diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 1dac839..2209816 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -9,21 +9,26 @@ jobs: steps: - uses: actions/checkout@v4 + + - name: clone NGG + run: | + cd NGG + git clone https://github.com/ItsWinterBush26/NG-GL4ES.git + - name: set up JDK 11 uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' cache: gradle - - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew :ltw:assembleRelease + run: ./gradlew :NGG:assembleRelease - name: Upload AAR uses: actions/upload-artifact@v4.6.0 with: name: output-aar - path: ltw/build/outputs/aar/ltw-release.aar + path: NGG/build/outputs/aar/NGG-release.aar if-no-files-found: error diff --git a/NGG/build.gradle.kts b/NGG/build.gradle.kts new file mode 100644 index 0000000..c6b3bb7 --- /dev/null +++ b/NGG/build.gradle.kts @@ -0,0 +1,40 @@ +plugins { + id("com.android.library") +} + +android { + namespace = "com.bzlzhh.ng_gl4es" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + ndkVersion = "28.2.13676358" + } + + buildTypes { + getByName("release") { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + create("proguard") { + isMinifyEnabled = true + initWith(getByName("release")) + } + } + externalNativeBuild { + cmake { + path = file("NG-GL4ES/CMakeLists.txt") + version = "3.22.1" + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..67c2d04 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,34 @@ +[versions] +agp = "8.8.0" +core = "4.6.2" +kotlin = "1.9.0" +coreKtx = "1.13.1" +junit = "4.13.2" +junitVersion = "1.2.1" +espressoCore = "3.6.1" +appcompat = "1.7.0" +kotlinStdlib = "1.7.1" +kotlinxCoroutinesAndroid = "1.7.1" +kotlinxCoroutinesCore = "1.7.1" +material = "1.12.0" +okhttp = "4.9.3" + +[libraries] +androidx-core = { module = "androidx.core:core", version.ref = "coreKtx" } +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +core = { module = "io.noties.markwon:core", version.ref = "core" } +core-ktx = { module = "androidx.core:core-ktx" } +ext-strikethrough = { module = "io.noties.markwon:ext-strikethrough", version.ref = "core" } +junit = { group = "junit", name = "junit", version.ref = "junit" } +androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } +androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlinStdlib" } +kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutinesAndroid" } +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutinesCore" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } +okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } diff --git a/ltw/.gitignore b/ltw/.gitignore deleted file mode 100644 index 42afabf..0000000 --- a/ltw/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/ltw/build.gradle b/ltw/build.gradle deleted file mode 100644 index e7f7e6b..0000000 --- a/ltw/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -plugins { - id 'com.android.library' -} - -android { - namespace "git.artdeell.ltw" - compileSdk 34 - defaultConfig { - minSdk 21 - externalNativeBuild { - ndkBuild { - arguments '-j24' - } - } - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.debug - } - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - ndkVersion = "28.2.13676358" - externalNativeBuild { - ndkBuild { - path file('src/main/tinywrapper/Android.mk') - } - } -} - -dependencies { -} diff --git a/ltw/proguard-rules.pro b/ltw/proguard-rules.pro deleted file mode 100644 index 481bb43..0000000 --- a/ltw/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/Android.mk b/ltw/src/main/tinywrapper/Android.mk deleted file mode 100644 index 3eba31a..0000000 --- a/ltw/src/main/tinywrapper/Android.mk +++ /dev/null @@ -1,415 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_MODULE := glsl_optimizer -LOCAL_SRC_FILES := glsl_optimizer/src/code/ir_print_glsl_visitor.cpp \ - glsl_optimizer/src/code/optimizer.cpp \ - glsl_optimizer/src/code/c_wrapper.cpp \ - glsl_optimizer/src/code/GlslConvert.cpp \ - glsl_optimizer/src/code/ir_print_ir_visitor.cpp \ - glsl_optimizer/src/util/compat_layer.cpp \ - glsl_optimizer/src/util/u_qsort.cpp \ - glsl_optimizer/src/util/u_debug_stack_android.cpp \ - glsl_optimizer/src/compiler/nir_types.cpp \ - glsl_optimizer/src/compiler/glsl/ir_validate.cpp \ - glsl_optimizer/src/compiler/glsl/hir_field_selection.cpp \ - glsl_optimizer/src/compiler/glsl/builtin_variables.cpp \ - glsl_optimizer/src/compiler/glsl/glsl_parser.cpp \ - glsl_optimizer/src/compiler/glsl/generate_ir.cpp \ - glsl_optimizer/src/compiler/glsl/glsl_to_nir.cpp \ - glsl_optimizer/src/compiler/glsl/ir_array_refcount.cpp \ - glsl_optimizer/src/compiler/glsl/lower_instructions.cpp \ - glsl_optimizer/src/compiler/glsl/lower_discard_flow.cpp \ - glsl_optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp \ - glsl_optimizer/src/compiler/glsl/link_varyings.cpp \ - glsl_optimizer/src/compiler/glsl/glsl_parser_extras.cpp \ - glsl_optimizer/src/compiler/glsl/builtin_types.cpp \ - glsl_optimizer/src/compiler/glsl/opt_algebraic.cpp \ - glsl_optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp \ - glsl_optimizer/src/compiler/glsl/link_uniforms.cpp \ - glsl_optimizer/src/compiler/glsl/ir.cpp \ - glsl_optimizer/src/compiler/glsl/opt_tree_grafting.cpp \ - glsl_optimizer/src/compiler/glsl/ir_constant_expression.cpp \ - glsl_optimizer/src/compiler/glsl/ast_type.cpp \ - glsl_optimizer/src/compiler/glsl/lower_jumps.cpp \ - glsl_optimizer/src/compiler/glsl/opt_if_simplification.cpp \ - glsl_optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp \ - glsl_optimizer/src/compiler/glsl/ir_builder.cpp \ - glsl_optimizer/src/compiler/glsl/ast_array_index.cpp \ - glsl_optimizer/src/compiler/glsl/propagate_invariance.cpp \ - glsl_optimizer/src/compiler/glsl/ir_hv_accept.cpp \ - glsl_optimizer/src/compiler/glsl/lower_builtins.cpp \ - glsl_optimizer/src/compiler/glsl/link_interface_blocks.cpp \ - glsl_optimizer/src/compiler/glsl/ast_to_hir.cpp \ - glsl_optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp \ - glsl_optimizer/src/compiler/glsl/lower_packing_builtins.cpp \ - glsl_optimizer/src/compiler/glsl/loop_analysis.cpp \ - glsl_optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp \ - glsl_optimizer/src/compiler/glsl/ir_clone.cpp \ - glsl_optimizer/src/compiler/glsl/opt_flip_matrices.cpp \ - glsl_optimizer/src/compiler/glsl/opt_dead_code.cpp \ - glsl_optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp \ - glsl_optimizer/src/compiler/glsl/s_expression.cpp \ - glsl_optimizer/src/compiler/glsl/ir_reader.cpp \ - glsl_optimizer/src/compiler/glsl/ir_equals.cpp \ - glsl_optimizer/src/compiler/glsl/ir_function_can_inline.cpp \ - glsl_optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp \ - glsl_optimizer/src/compiler/glsl/standalone_scaffolding.cpp \ - glsl_optimizer/src/compiler/glsl/link_uniform_blocks.cpp \ - glsl_optimizer/src/compiler/glsl/opt_function_inlining.cpp \ - glsl_optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp \ - glsl_optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp \ - glsl_optimizer/src/compiler/glsl/ir_expression_flattening.cpp \ - glsl_optimizer/src/compiler/glsl/opt_dead_code_local.cpp \ - glsl_optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp \ - glsl_optimizer/src/compiler/glsl/ir_function.cpp \ - glsl_optimizer/src/compiler/glsl/lower_precision.cpp \ - glsl_optimizer/src/compiler/glsl/ir_variable_refcount.cpp \ - glsl_optimizer/src/compiler/glsl/lower_vector_derefs.cpp \ - glsl_optimizer/src/compiler/glsl/builtin_functions.cpp \ - glsl_optimizer/src/compiler/glsl/linker_util.cpp \ - glsl_optimizer/src/compiler/glsl/lower_distance.cpp \ - glsl_optimizer/src/compiler/glsl/opt_rebalance_tree.cpp \ - glsl_optimizer/src/compiler/glsl/linker.cpp \ - glsl_optimizer/src/compiler/glsl/opt_dead_functions.cpp \ - glsl_optimizer/src/compiler/glsl/glsl_symbol_table.cpp \ - glsl_optimizer/src/compiler/glsl/lower_subroutine.cpp \ - glsl_optimizer/src/compiler/glsl/glsl_lexer.cpp \ - glsl_optimizer/src/compiler/glsl/link_functions.cpp \ - glsl_optimizer/src/compiler/glsl/lower_int64.cpp \ - glsl_optimizer/src/compiler/glsl/lower_discard.cpp \ - glsl_optimizer/src/compiler/glsl/string_to_uint_map.cpp \ - glsl_optimizer/src/compiler/glsl/ast_function.cpp \ - glsl_optimizer/src/compiler/glsl/ast_expr.cpp \ - glsl_optimizer/src/compiler/glsl/ir_print_visitor.cpp \ - glsl_optimizer/src/compiler/glsl/opt_minmax.cpp \ - glsl_optimizer/src/compiler/glsl/ir_basic_block.cpp \ - glsl_optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp \ - glsl_optimizer/src/compiler/glsl_types.cpp \ - glsl_optimizer/src/util/sha1/sha1.c \ - glsl_optimizer/src/util/u_debug_stack.c \ - glsl_optimizer/src/util/u_vector.c \ - glsl_optimizer/src/util/u_debug.c \ - glsl_optimizer/src/util/bitscan.c \ - glsl_optimizer/src/util/vma.c \ - glsl_optimizer/src/util/half_float.c \ - glsl_optimizer/src/util/u_idalloc.c \ - glsl_optimizer/src/util/u_process.c \ - glsl_optimizer/src/util/rgtc.c \ - glsl_optimizer/src/util/u_worklist.c \ - glsl_optimizer/src/util/sparse_array.c \ - glsl_optimizer/src/util/u_dl.c \ - glsl_optimizer/src/util/os_file.c \ - glsl_optimizer/src/util/fossilize_db.c \ - glsl_optimizer/src/util/u_thread.c \ - glsl_optimizer/src/util/build_id.c \ - glsl_optimizer/src/util/u_printf.c \ - glsl_optimizer/src/util/rb_tree.c \ - glsl_optimizer/src/util/register_allocate.c \ - glsl_optimizer/src/util/fast_idiv_by_const.c \ - glsl_optimizer/src/util/disk_cache_os.c \ - glsl_optimizer/src/util/blob.c \ - glsl_optimizer/src/util/strtod.c \ - glsl_optimizer/src/util/os_misc.c \ - glsl_optimizer/src/util/hash_table.c \ - glsl_optimizer/src/util/u_atomic.c \ - glsl_optimizer/src/util/softfloat.c \ - glsl_optimizer/src/util/crc32.c \ - glsl_optimizer/src/util/rand_xor.c \ - glsl_optimizer/src/util/os_memory_fd.c \ - glsl_optimizer/src/util/u_hash_table.c \ - glsl_optimizer/src/util/double.c \ - glsl_optimizer/src/util/slab.c \ - glsl_optimizer/src/util/futex.c \ - glsl_optimizer/src/util/u_queue.c \ - glsl_optimizer/src/util/u_call_once.c \ - glsl_optimizer/src/util/disk_cache.c \ - glsl_optimizer/src/util/set.c \ - glsl_optimizer/src/util/u_debug_memory.c \ - glsl_optimizer/src/util/u_math.c \ - glsl_optimizer/src/util/mesa_cache_db.c \ - glsl_optimizer/src/util/simple_mtx.c \ - glsl_optimizer/src/util/mesa-sha1.c \ - glsl_optimizer/src/util/log.c \ - glsl_optimizer/src/util/compress.c \ - glsl_optimizer/src/util/format/u_format_rgtc.c \ - glsl_optimizer/src/util/format/u_format_etc.c \ - glsl_optimizer/src/util/format/u_format_unpack_neon.c \ - glsl_optimizer/src/util/format/u_format_zs.c \ - glsl_optimizer/src/util/format/u_format_latc.c \ - glsl_optimizer/src/util/format/u_format_table.c \ - glsl_optimizer/src/util/format/u_format.c \ - glsl_optimizer/src/util/format/u_format_other.c \ - glsl_optimizer/src/util/format/u_format_fxt1.c \ - glsl_optimizer/src/util/format/u_format_bptc.c \ - glsl_optimizer/src/util/format/u_format_s3tc.c \ - glsl_optimizer/src/util/format/u_format_yuv.c \ - glsl_optimizer/src/util/string_buffer.c \ - glsl_optimizer/src/util/os_socket.c \ - glsl_optimizer/src/util/mesa_cache_db_multipart.c \ - glsl_optimizer/src/util/u_cpu_detect.c \ - glsl_optimizer/src/util/u_mm.c \ - glsl_optimizer/src/util/u_debug_describe.c \ - glsl_optimizer/src/util/anon_file.c \ - glsl_optimizer/src/util/dag.c \ - glsl_optimizer/src/util/format_srgb.c \ - glsl_optimizer/src/util/ralloc.c \ - glsl_optimizer/src/util/os_time.c \ - glsl_optimizer/src/util/u_debug_refcnt.c \ - glsl_optimizer/src/util/u_debug_symbol.c \ - glsl_optimizer/src/util/streaming-load-memcpy.c \ - glsl_optimizer/src/mesa/main/debug_output.c \ - glsl_optimizer/src/mesa/main/errors.c \ - glsl_optimizer/src/mesa/main/extensions_table.c \ - glsl_optimizer/src/mesa/main/imports.c \ - glsl_optimizer/src/mesa/program/symbol_table.c \ - glsl_optimizer/src/mesa/program/prog_parameter.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_initializers.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_lower_packed_varyings.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_opt_dead_builtin_varyings.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_lower_xfb_varying.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_lower_atomics.c \ - glsl_optimizer/src/compiler/glsl/glcpp/glcpp.c \ - glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.c \ - glsl_optimizer/src/compiler/glsl/glcpp/pp.c \ - glsl_optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c \ - glsl_optimizer/src/compiler/glsl/glcpp/glcpp-lex.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_lower_buffers.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_link_uniforms.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_link_varyings.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_linker.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_link_xfb.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_link_atomics.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_blocks.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers.c \ - glsl_optimizer/src/compiler/glsl/gl_nir_lower_images.c \ - glsl_optimizer/src/compiler/shader_enums.c \ - glsl_optimizer/src/compiler/nir/nir_opcodes.c \ - glsl_optimizer/src/compiler/nir/nir_from_ssa.c \ - glsl_optimizer/src/compiler/nir/nir_lower_point_smooth.c \ - glsl_optimizer/src/compiler/nir/nir_opt_shrink_vectors.c \ - glsl_optimizer/src/compiler/nir/nir_lower_wpos_ytransform.c \ - glsl_optimizer/src/compiler/nir/nir_metadata.c \ - glsl_optimizer/src/compiler/nir/nir_lower_bit_size.c \ - glsl_optimizer/src/compiler/nir/nir_lower_shader_calls.c \ - glsl_optimizer/src/compiler/nir/nir_lower_printf.c \ - glsl_optimizer/src/compiler/nir/nir_lower_clip.c \ - glsl_optimizer/src/compiler/nir/nir_scale_fdiv.c \ - glsl_optimizer/src/compiler/nir/nir_opt_preamble.c \ - glsl_optimizer/src/compiler/nir/nir_opt_dead_write_vars.c \ - glsl_optimizer/src/compiler/nir/nir_inline_functions.c \ - glsl_optimizer/src/compiler/nir/nir_lower_sysvals_to_varyings.c \ - glsl_optimizer/src/compiler/nir/nir_lower_two_sided_color.c \ - glsl_optimizer/src/compiler/nir/nir_opt_remove_phis.c \ - glsl_optimizer/src/compiler/nir/nir_lower_phis_to_scalar.c \ - glsl_optimizer/src/compiler/nir/nir_opt_copy_propagate.c \ - glsl_optimizer/src/compiler/nir/nir_lower_vec_to_movs.c \ - glsl_optimizer/src/compiler/nir/nir_phi_builder.c \ - glsl_optimizer/src/compiler/nir/nir_lower_single_sampled.c \ - glsl_optimizer/src/compiler/nir/nir_opt_peephole_select.c \ - glsl_optimizer/src/compiler/nir/nir_opt_cse.c \ - glsl_optimizer/src/compiler/nir/nir_opt_dead_cf.c \ - glsl_optimizer/src/compiler/nir/nir_lower_returns.c \ - glsl_optimizer/src/compiler/nir/nir_lower_discard_or_demote.c \ - glsl_optimizer/src/compiler/nir/nir_normalize_cubemap_coords.c \ - glsl_optimizer/src/compiler/nir/nir_search.c \ - glsl_optimizer/src/compiler/nir/nir_lower_bool_to_bitsize.c \ - glsl_optimizer/src/compiler/nir/nir_worklist.c \ - glsl_optimizer/src/compiler/nir/nir_passthrough_gs.c \ - glsl_optimizer/src/compiler/nir/nir_move_vec_src_uses_to_dest.c \ - glsl_optimizer/src/compiler/nir/nir_lower_packing.c \ - glsl_optimizer/src/compiler/nir/nir_group_loads.c \ - glsl_optimizer/src/compiler/nir/nir_opt_gcm.c \ - glsl_optimizer/src/compiler/nir/nir_lower_viewport_transform.c \ - glsl_optimizer/src/compiler/nir/nir_gather_xfb_info.c \ - glsl_optimizer/src/compiler/nir/nir_lower_subgroups.c \ - glsl_optimizer/src/compiler/nir/nir_gather_ssa_types.c \ - glsl_optimizer/src/compiler/nir/nir_lower_clip_halfz.c \ - glsl_optimizer/src/compiler/nir/nir_builder.c \ - glsl_optimizer/src/compiler/nir/nir_deref.c \ - glsl_optimizer/src/compiler/nir/nir_opt_shrink_stores.c \ - glsl_optimizer/src/compiler/nir/nir_lower_int64.c \ - glsl_optimizer/src/compiler/nir/nir_opt_load_store_vectorize.c \ - glsl_optimizer/src/compiler/nir/nir_opt_algebraic.c \ - glsl_optimizer/src/compiler/nir/nir_lower_mem_access_bit_sizes.c \ - glsl_optimizer/src/compiler/nir/nir_opt_find_array_copies.c \ - glsl_optimizer/src/compiler/nir/nir_lower_bool_to_int32.c \ - glsl_optimizer/src/compiler/nir/nir_opt_barriers.c \ - glsl_optimizer/src/compiler/nir/nir_lower_passthrough_edgeflags.c \ - glsl_optimizer/src/compiler/nir/nir_opt_constant_folding.c \ - glsl_optimizer/src/compiler/nir/nir_opt_move_discards_to_top.c \ - glsl_optimizer/src/compiler/nir/nir_lower_goto_ifs.c \ - glsl_optimizer/src/compiler/nir/nir_lower_image.c \ - glsl_optimizer/src/compiler/nir/nir_repair_ssa.c \ - glsl_optimizer/src/compiler/nir/nir_lower_memory_model.c \ - glsl_optimizer/src/compiler/nir/nir_lower_cl_images.c \ - glsl_optimizer/src/compiler/nir/nir_opt_ray_queries.c \ - glsl_optimizer/src/compiler/nir/nir_lower_poly_line_smooth.c \ - glsl_optimizer/src/compiler/nir/nir_opt_vectorize.c \ - glsl_optimizer/src/compiler/nir/nir_lower_pntc_ytransform.c \ - glsl_optimizer/src/compiler/nir/nir_lower_variable_initializers.c \ - glsl_optimizer/src/compiler/nir/nir_lower_interpolation.c \ - glsl_optimizer/src/compiler/nir/nir_opt_comparison_pre.c \ - glsl_optimizer/src/compiler/nir/nir_opt_if.c \ - glsl_optimizer/src/compiler/nir/nir_lower_io_to_scalar.c \ - glsl_optimizer/src/compiler/nir/nir.c \ - glsl_optimizer/src/compiler/nir/nir_opt_sink.c \ - glsl_optimizer/src/compiler/nir/nir_builtin_builder.c \ - glsl_optimizer/src/compiler/nir/nir_split_64bit_vec3_and_vec4.c \ - glsl_optimizer/src/compiler/nir/nir_lower_alpha_test.c \ - glsl_optimizer/src/compiler/nir/nir_lower_readonly_images_to_tex.c \ - glsl_optimizer/src/compiler/nir/nir_opt_offsets.c \ - glsl_optimizer/src/compiler/nir/nir_liveness.c \ - glsl_optimizer/src/compiler/nir/nir_lower_io_to_temporaries.c \ - glsl_optimizer/src/compiler/nir/nir_lower_task_shader.c \ - glsl_optimizer/src/compiler/nir/nir_opt_intrinsics.c \ - glsl_optimizer/src/compiler/nir/nir_lower_frexp.c \ - glsl_optimizer/src/compiler/nir/nir_validate.c \ - glsl_optimizer/src/compiler/nir/nir_lower_ubo_vec4.c \ - glsl_optimizer/src/compiler/nir/nir_lower_continue_constructs.c \ - glsl_optimizer/src/compiler/nir/nir_lower_vars_to_ssa.c \ - glsl_optimizer/src/compiler/nir/nir_mod_analysis.c \ - glsl_optimizer/src/compiler/nir/nir_opt_access.c \ - glsl_optimizer/src/compiler/nir/nir_lower_alu_width.c \ - glsl_optimizer/src/compiler/nir/nir_lower_bool_to_float.c \ - glsl_optimizer/src/compiler/nir/nir_lower_global_vars_to_local.c \ - glsl_optimizer/src/compiler/nir/nir_lower_tex_shadow.c \ - glsl_optimizer/src/compiler/nir/nir_split_var_copies.c \ - glsl_optimizer/src/compiler/nir/nir_opt_rematerialize_compares.c \ - glsl_optimizer/src/compiler/nir/nir_lower_system_values.c \ - glsl_optimizer/src/compiler/nir/nir_inline_uniforms.c \ - glsl_optimizer/src/compiler/nir/nir_dominance.c \ - glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace_late.c \ - glsl_optimizer/src/compiler/nir/nir_gs_count_vertices.c \ - glsl_optimizer/src/compiler/nir/nir_print.c \ - glsl_optimizer/src/compiler/nir/nir_opt_copy_prop_vars.c \ - glsl_optimizer/src/compiler/nir/nir_lower_indirect_derefs.c \ - glsl_optimizer/src/compiler/nir/nir_opt_phi_precision.c \ - glsl_optimizer/src/compiler/nir/nir_opt_fragdepth.c \ - glsl_optimizer/src/compiler/nir/nir_lower_is_helper_invocation.c \ - glsl_optimizer/src/compiler/nir/nir_lower_point_size.c \ - glsl_optimizer/src/compiler/nir/nir_opt_uniform_atomics.c \ - glsl_optimizer/src/compiler/nir/nir_lower_flrp.c \ - glsl_optimizer/src/compiler/nir/nir_opt_loop_unroll.c \ - glsl_optimizer/src/compiler/nir/nir_clone.c \ - glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace.c \ - glsl_optimizer/src/compiler/nir/nir_lower_samplers.c \ - glsl_optimizer/src/compiler/nir/nir_lower_clip_disable.c \ - glsl_optimizer/src/compiler/nir/nir_lower_io_to_vector.c \ - glsl_optimizer/src/compiler/nir/nir_split_vars.c \ - glsl_optimizer/src/compiler/nir/nir_lower_input_attachments.c \ - glsl_optimizer/src/compiler/nir/nir_schedule.c \ - glsl_optimizer/src/compiler/nir/nir_lower_fragcolor.c \ - glsl_optimizer/src/compiler/nir/nir_lower_tex.c \ - glsl_optimizer/src/compiler/nir/nir_range_analysis.c \ - glsl_optimizer/src/compiler/nir/nir_lower_regs_to_ssa.c \ - glsl_optimizer/src/compiler/nir/nir_lower_blend.c \ - glsl_optimizer/src/compiler/nir/nir_divergence_analysis.c \ - glsl_optimizer/src/compiler/nir/nir_lower_drawpixels.c \ - glsl_optimizer/src/compiler/nir/nir_opt_trivial_continues.c \ - glsl_optimizer/src/compiler/nir/nir_opt_idiv_const.c \ - glsl_optimizer/src/compiler/nir/nir_lower_fragcoord_wtrans.c \ - glsl_optimizer/src/compiler/nir/nir_lower_bitmap.c \ - glsl_optimizer/src/compiler/nir/nir_passthrough_tcs.c \ - glsl_optimizer/src/compiler/nir/nir_opt_undef.c \ - glsl_optimizer/src/compiler/nir/nir_gather_info.c \ - glsl_optimizer/src/compiler/nir/nir_lower_wrmasks.c \ - glsl_optimizer/src/compiler/nir/nir_lower_vec3_to_vec4.c \ - glsl_optimizer/src/compiler/nir/nir_serialize.c \ - glsl_optimizer/src/compiler/nir/nir_lower_idiv.c \ - glsl_optimizer/src/compiler/nir/nir_opt_non_uniform_access.c \ - glsl_optimizer/src/compiler/nir/nir_lower_array_deref_of_vec.c \ - glsl_optimizer/src/compiler/nir/nir_control_flow.c \ - glsl_optimizer/src/compiler/nir/nir_opt_large_constants.c \ - glsl_optimizer/src/compiler/nir/nir_lower_wpos_center.c \ - glsl_optimizer/src/compiler/nir/nir_constant_expressions.c \ - glsl_optimizer/src/compiler/nir/nir_linking_helpers.c \ - glsl_optimizer/src/compiler/nir/nir_instr_set.c \ - glsl_optimizer/src/compiler/nir/nir_lower_mediump.c \ - glsl_optimizer/src/compiler/nir/nir_split_per_member_structs.c \ - glsl_optimizer/src/compiler/nir/nir_lower_convert_alu_types.c \ - glsl_optimizer/src/compiler/nir/nir_lower_gs_intrinsics.c \ - glsl_optimizer/src/compiler/nir/nir_lower_int_to_float.c \ - glsl_optimizer/src/compiler/nir/nir_lower_to_source_mods.c \ - glsl_optimizer/src/compiler/nir/nir_remove_dead_variables.c \ - glsl_optimizer/src/compiler/nir/nir_lower_alu.c \ - glsl_optimizer/src/compiler/nir/nir_lower_var_copies.c \ - glsl_optimizer/src/compiler/nir/nir_lower_discard_if.c \ - glsl_optimizer/src/compiler/nir/nir_lower_atomics_to_ssbo.c \ - glsl_optimizer/src/compiler/nir/nir_lower_fb_read.c \ - glsl_optimizer/src/compiler/nir/nir_lower_flatshade.c \ - glsl_optimizer/src/compiler/nir/nir_lower_clip_cull_distance_arrays.c \ - glsl_optimizer/src/compiler/nir/nir_propagate_invariant.c \ - glsl_optimizer/src/compiler/nir/nir_lower_helper_writes.c \ - glsl_optimizer/src/compiler/nir/nir_lower_const_arrays_to_uniforms.c \ - glsl_optimizer/src/compiler/nir/nir_opt_memcpy.c \ - glsl_optimizer/src/compiler/nir/nir_opt_conditional_discard.c \ - glsl_optimizer/src/compiler/nir/nir_to_lcssa.c \ - glsl_optimizer/src/compiler/nir/nir_sweep.c \ - glsl_optimizer/src/compiler/nir/nir_lower_uniforms_to_ubo.c \ - glsl_optimizer/src/compiler/nir/nir_opt_combine_stores.c \ - glsl_optimizer/src/compiler/nir/nir_lower_fp16_conv.c \ - glsl_optimizer/src/compiler/nir/nir_lower_clamp_color_outputs.c \ - glsl_optimizer/src/compiler/nir/nir_lower_point_size_mov.c \ - glsl_optimizer/src/compiler/nir/nir_opt_dce.c \ - glsl_optimizer/src/compiler/nir/nir_lower_double_ops.c \ - glsl_optimizer/src/compiler/nir/nir_lower_non_uniform_access.c \ - glsl_optimizer/src/compiler/nir/nir_lower_ssbo.c \ - glsl_optimizer/src/compiler/nir/nir_lower_load_const_to_scalar.c \ - glsl_optimizer/src/compiler/nir/nir_lower_io.c \ - glsl_optimizer/src/compiler/nir/nir_lower_scratch.c \ - glsl_optimizer/src/compiler/nir/nir_opt_move.c \ - glsl_optimizer/src/compiler/nir/nir_lower_amul.c \ - glsl_optimizer/src/compiler/nir/nir_lower_multiview.c \ - glsl_optimizer/src/compiler/nir/nir_lower_patch_vertices.c \ - glsl_optimizer/src/compiler/nir/nir_lower_undef_to_zero.c \ - glsl_optimizer/src/compiler/nir/nir_lower_io_arrays_to_elements.c \ - glsl_optimizer/src/compiler/nir/nir_loop_analyze.c \ - glsl_optimizer/src/compiler/nir/nir_lower_memcpy.c \ - glsl_optimizer/src/compiler/nir/nir_intrinsics.c \ - glsl_optimizer/src/compiler/nir/nir_lower_locals_to_regs.c -LOCAL_CFLAGS += -D_LIB -LOCAL_CFLAGS += -DNOMINMAX -LOCAL_CFLAGS += -D_USE_MATH_DEFINES -LOCAL_CFLAGS += -D__STDC_NO_THREADS__ -LOCAL_CFLAGS += -D__STDC_LIMIT_MACROS -LOCAL_CFLAGS += -D__STDC_FORMAT_MACROS -LOCAL_CFLAGS += -D__STDC_CONSTANT_MACROS -LOCAL_CFLAGS += -DUTIL_ARCH_LITTLE_ENDIAN -LOCAL_CFLAGS += -DUNIX -LOCAL_CFLAGS += -DANDROID -DHAVE_STRUCT_TIMESPEC -DDETECT_OS_ANDROID -LOCAL_CFLAGS += -DHAVE_OPENGL -LOCAL_CFLAGS += -DHAVE_OPENGL_ES_1 -LOCAL_CFLAGS += -DHAVE_OPENGL_ES_2 -LOCAL_CFLAGS += -fvisibility=hidden -LOCAL_LDFLAGS := -ffunction-sections -fdata-sections -include $(BUILD_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := ltw -LOCAL_SRC_FILES := \ - egl.c \ - proc.c \ - main.c \ - glformats.c \ - basevertex.c \ - shader_wrapper.c \ - string_utils.c \ - framebuffer.c \ - of_buffer_copier.c \ - stubs.c \ - multidraw.c \ - vertexattrib.c \ - swizzle.c \ - license_notice.c \ - env.c \ - vgpu_shaderconv/shaderconv.c \ - unordered_map/unordered_map.c \ - unordered_map/int_hash.c -LOCAL_STATIC_LIBRARIES := glsl_optimizer -LOCAL_LDFLAGS := -ffunction-sections -fdata-sections -Wl,--version-script=$(LOCAL_PATH)/version.script -# Comment for debugging -LOCAL_LDFLAGS += -flto -Wl,--gc-sections -LOCAL_LDLIBS := -llog -lEGL -include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/Application.mk b/ltw/src/main/tinywrapper/Application.mk deleted file mode 100644 index 9abb89c..0000000 --- a/ltw/src/main/tinywrapper/Application.mk +++ /dev/null @@ -1,4 +0,0 @@ -# NDK_TOOLCHAIN_VERSION := 4.9 -APP_PLATFORM := android-21 -APP_STL := c++_static -# APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 diff --git a/ltw/src/main/tinywrapper/GL/gl.h b/ltw/src/main/tinywrapper/GL/gl.h deleted file mode 100644 index d74f6b4..0000000 --- a/ltw/src/main/tinywrapper/GL/gl.h +++ /dev/null @@ -1,2102 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef __gl_h_ -#define __gl_h_ - -/********************************************************************** - * Begin system-specific stuff. - */ - -#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) -#define __WIN32__ -#endif - -#if defined(__WIN32__) && !defined(__CYGWIN__) -# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ -# define GLAPI __declspec(dllexport) -# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ -# define GLAPI __declspec(dllimport) -# else /* for use with static link lib build of Win32 edition only */ -# define GLAPI extern -# endif -# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ -# define GLAPIENTRY -# else -# define GLAPIENTRY __stdcall -# endif -#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ -# define GLAPI extern -# define GLAPIENTRY __stdcall -#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -# define GLAPI __attribute__((visibility("default"))) -# define GLAPIENTRY -#endif /* WIN32 && !CYGWIN */ - -/* - * WINDOWS: Include windows.h here to define APIENTRY. - * It is also useful when applications include this file by - * including only glut.h, since glut.h depends on windows.h. - * Applications needing to include windows.h with parms other - * than "WIN32_LEAN_AND_MEAN" may include windows.h before - * glut.h or gl.h. - */ -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include -#endif - -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef APIENTRY -#define APIENTRY GLAPIENTRY -#endif - -/* "P" suffix to be used for a pointer to a function */ -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifndef GLAPIENTRYP -#define GLAPIENTRYP GLAPIENTRY * -#endif - -/* - * End system-specific stuff. - **********************************************************************/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define GL_VERSION_1_1 1 -#define GL_VERSION_1_2 1 -#define GL_VERSION_1_3 1 -#define GL_ARB_imaging 1 - - -/* - * Datatypes - */ -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ - - - -/* - * Constants - */ - -/* Boolean values */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* Data types */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_DOUBLE 0x140A - -/* Primitives */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON 0x0009 - -/* Vertex Arrays */ -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D - -/* Matrix Mode */ -#define GL_MATRIX_MODE 0x0BA0 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 - -/* Points */ -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_POINT_SIZE_RANGE 0x0B12 - -/* Lines */ -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_WIDTH_RANGE 0x0B22 - -/* Polygons */ -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 - -/* Display Lists */ -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_LIST_MODE 0x0B30 - -/* Depth buffer */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_BITS 0x0D56 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_COMPONENT 0x1902 - -/* Lighting */ -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT0 0x4000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_SHININESS 0x1601 -#define GL_EMISSION 0x1600 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_SHADE_MODEL 0x0B54 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_NORMALIZE 0x0BA1 - -/* User clipping planes */ -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 - -/* Accumulation buffer */ -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_ACCUM 0x0100 -#define GL_ADD 0x0104 -#define GL_LOAD 0x0101 -#define GL_MULT 0x0103 -#define GL_RETURN 0x0102 - -/* Alpha testing */ -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_ALPHA_TEST_FUNC 0x0BC1 - -/* Blending */ -#define GL_BLEND 0x0BE2 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND_DST 0x0BE0 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 - -/* Render Mode */ -#define GL_FEEDBACK 0x1C01 -#define GL_RENDER 0x1C00 -#define GL_SELECT 0x1C02 - -/* Feedback */ -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 - -/* Selection */ -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 - -/* Fog */ -#define GL_FOG 0x0B60 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_COLOR 0x0B66 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_LINEAR 0x2601 -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 - -/* Logic Ops */ -#define GL_LOGIC_OP 0x0BF1 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_CLEAR 0x1500 -#define GL_SET 0x150F -#define GL_COPY 0x1503 -#define GL_COPY_INVERTED 0x150C -#define GL_NOOP 0x1505 -#define GL_INVERT 0x150A -#define GL_AND 0x1501 -#define GL_NAND 0x150E -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_XOR 0x1506 -#define GL_EQUIV 0x1509 -#define GL_AND_REVERSE 0x1502 -#define GL_AND_INVERTED 0x1504 -#define GL_OR_REVERSE 0x150B -#define GL_OR_INVERTED 0x150D - -/* Stencil */ -#define GL_STENCIL_BITS 0x0D57 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_INDEX 0x1901 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 - -/* Buffers, Pixel Drawing/Reading */ -#define GL_NONE 0 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -/*GL_FRONT 0x0404 */ -/*GL_BACK 0x0405 */ -/*GL_FRONT_AND_BACK 0x0408 */ -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_COLOR_INDEX 0x1900 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_ALPHA_BITS 0x0D55 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_INDEX_BITS 0x0D51 -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_READ_BUFFER 0x0C02 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_BITMAP 0x1A00 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_DITHER 0x0BD0 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 - -/* Implementation limits */ -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B - -/* Gets */ -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_MODE 0x0C30 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_RENDER_MODE 0x0C40 -#define GL_RGBA_MODE 0x0C31 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_VIEWPORT 0x0BA2 - -/* Evaluators */ -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 - -/* Hints */ -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_FOG_HINT 0x0C54 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* Scissor box */ -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 - -/* Pixel Mode / Transfer */ -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 - -/* Texture mapping */ -#define GL_TEXTURE_ENV 0x2300 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_LINEAR 0x2400 -#define GL_EYE_PLANE 0x2502 -#define GL_SPHERE_MAP 0x2402 -#define GL_DECAL 0x2101 -#define GL_MODULATE 0x2100 -#define GL_NEAREST 0x2600 -#define GL_REPEAT 0x2901 -#define GL_CLAMP 0x2900 -#define GL_S 0x2000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 - -/* Utility */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* Errors */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 - -/* glPush/PopAttrib bits */ -#define GL_CURRENT_BIT 0x00000001 -#define GL_POINT_BIT 0x00000002 -#define GL_LINE_BIT 0x00000004 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_HINT_BIT 0x00008000 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF - - -/* OpenGL 1.1 */ -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF -#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF - - - -/* - * Miscellaneous - */ - -GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); - -GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glClear( GLbitfield mask ); - -GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); - -GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); - -GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); - -GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); - -GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); - -GLAPI void GLAPIENTRY glCullFace( GLenum mode ); - -GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); - -GLAPI void GLAPIENTRY glPointSize( GLfloat size ); - -GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); - -GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); - -GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); - -GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); - -GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); - -GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); - -GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); - -GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); - -GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); - -GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); - -GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); - -GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glEnable( GLenum cap ); - -GLAPI void GLAPIENTRY glDisable( GLenum cap ); - -GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); - - -GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ - -GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ - - -GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); - -GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); - -GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); - -GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); - -GLAPI void GLAPIENTRY glPopAttrib( void ); - - -GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ - -GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ - - -GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); - -GLAPI GLenum GLAPIENTRY glGetError( void ); - -GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); - -GLAPI void GLAPIENTRY glFinish( void ); - -GLAPI void GLAPIENTRY glFlush( void ); - -GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); - - -/* - * Depth Buffer - */ - -GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); - -GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); - -GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); - -GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); - - -/* - * Accumulation Buffer - */ - -GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); - -GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); - - -/* - * Transformation - */ - -GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); - -GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, - GLsizei width, GLsizei height ); - -GLAPI void GLAPIENTRY glPushMatrix( void ); - -GLAPI void GLAPIENTRY glPopMatrix( void ); - -GLAPI void GLAPIENTRY glLoadIdentity( void ); - -GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); - -GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); - -GLAPI void GLAPIENTRY glRotated( GLdouble angle, - GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glRotatef( GLfloat angle, - GLfloat x, GLfloat y, GLfloat z ); - -GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); - -GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); - - -/* - * Display Lists - */ - -GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); - -GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); - -GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); - -GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); - -GLAPI void GLAPIENTRY glEndList( void ); - -GLAPI void GLAPIENTRY glCallList( GLuint list ); - -GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, - const GLvoid *lists ); - -GLAPI void GLAPIENTRY glListBase( GLuint base ); - - -/* - * Drawing Functions - */ - -GLAPI void GLAPIENTRY glBegin( GLenum mode ); - -GLAPI void GLAPIENTRY glEnd( void ); - - -GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); -GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); -GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); -GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); -GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); - -GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); -GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glIndexd( GLdouble c ); -GLAPI void GLAPIENTRY glIndexf( GLfloat c ); -GLAPI void GLAPIENTRY glIndexi( GLint c ); -GLAPI void GLAPIENTRY glIndexs( GLshort c ); -GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); -GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); -GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); -GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); -GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); -GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); -GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); -GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); -GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); -GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); -GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); -GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); - -GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, - GLbyte blue, GLbyte alpha ); -GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, - GLdouble blue, GLdouble alpha ); -GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, - GLfloat blue, GLfloat alpha ); -GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, - GLint blue, GLint alpha ); -GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, - GLshort blue, GLshort alpha ); -GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, - GLubyte blue, GLubyte alpha ); -GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, - GLuint blue, GLuint alpha ); -GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, - GLushort blue, GLushort alpha ); - - -GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); - -GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); - - -GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); -GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); -GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); -GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); - -GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); -GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); -GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); -GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); -GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); -GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); -GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); -GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); -GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); -GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); -GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); -GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); -GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); - - -GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); -GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); -GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); -GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); - - -/* - * Vertex Arrays (1.1) - */ - -GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); - -GLAPI void GLAPIENTRY glArrayElement( GLint i ); - -GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); - -GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, - GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, - const GLvoid *pointer ); - -/* - * Lighting - */ - -GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); - -GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, - GLfloat *params ); -GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); - -GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); - - -/* - * Raster functions - */ - -GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); - -GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, - const GLfloat *values ); -GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, - const GLuint *values ); -GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, - const GLushort *values ); - -GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); -GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); -GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); - -GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, - GLfloat xorig, GLfloat yorig, - GLfloat xmove, GLfloat ymove, - const GLubyte *bitmap ); - -GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - GLvoid *pixels ); - -GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum type ); - -/* - * Stenciling - */ - -GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); - -GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); - -GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); - -GLAPI void GLAPIENTRY glClearStencil( GLint s ); - - - -/* - * Texture mapping - */ - -GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); -GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); -GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); -GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, - GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, - GLenum pname, GLint *params ); - -GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, - GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, - GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLint border, GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, - GLenum format, GLenum type, - GLvoid *pixels ); - - -/* 1.1 functions */ - -GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); - -GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); - -GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); - -GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, - const GLuint *textures, - const GLclampf *priorities ); - -GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, - const GLuint *textures, - GLboolean *residences ); - -GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); - - -GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, - GLint xoffset, - GLsizei width, GLenum format, - GLenum type, const GLvoid *pixels ); - - -GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ); - - -GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, - GLenum internalformat, - GLint x, GLint y, - GLsizei width, GLint border ); - - -GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, - GLenum internalformat, - GLint x, GLint y, - GLsizei width, GLsizei height, - GLint border ); - - -GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, - GLint xoffset, GLint x, GLint y, - GLsizei width ); - - -GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint x, GLint y, - GLsizei width, GLsizei height ); - - -/* - * Evaluators - */ - -GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, - GLint stride, - GLint order, const GLdouble *points ); -GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, - GLint stride, - GLint order, const GLfloat *points ); - -GLAPI void GLAPIENTRY glMap2d( GLenum target, - GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, - GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, - const GLdouble *points ); -GLAPI void GLAPIENTRY glMap2f( GLenum target, - GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, - GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, - const GLfloat *points ); - -GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); -GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); -GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); - -GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); -GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); - -GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); - -GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); -GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); - -GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); - -GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); -GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); - -GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, - GLint vn, GLdouble v1, GLdouble v2 ); -GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, - GLint vn, GLfloat v1, GLfloat v2 ); - -GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); - -GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); - -GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); - -GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); - - -/* - * Fog - */ - -GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); - -GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); - -GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); - - -/* - * Selection and Feedback - */ - -GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); - -GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); - -GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); - -GLAPI void GLAPIENTRY glInitNames( void ); - -GLAPI void GLAPIENTRY glLoadName( GLuint name ); - -GLAPI void GLAPIENTRY glPushName( GLuint name ); - -GLAPI void GLAPIENTRY glPopName( void ); - - - -/* - * OpenGL 1.2 - */ - -#define GL_RESCALE_NORMAL 0x803A -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_TEXTURE_BINDING_3D 0x806A - -GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, - GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLsizei depth, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLsizei width, - GLsizei height, GLsizei depth, - GLenum format, - GLenum type, const GLvoid *pixels); - -GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLint x, - GLint y, GLsizei width, - GLsizei height ); - -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - - -/* - * GL_ARB_imaging - */ - -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_BLEND_EQUATION 0x8009 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_BLEND_COLOR 0x8005 - - -GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, - GLsizei width, GLenum format, - GLenum type, const GLvoid *table ); - -GLAPI void GLAPIENTRY glColorSubTable( GLenum target, - GLsizei start, GLsizei count, - GLenum format, GLenum type, - const GLvoid *data ); - -GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, - const GLint *params); - -GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, - const GLfloat *params); - -GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, - GLenum type, GLvoid *table ); - -GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); - -GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, - GLenum internalformat, GLboolean sink ); - -GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); - -GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, - GLenum format, GLenum type, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, - GLboolean sink ); - -GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); - -GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, - GLenum format, GLenum types, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, - GLenum internalformat, GLsizei width, GLenum format, GLenum type, - const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, - GLfloat params ); - -GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); - -GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, - GLint params ); - -GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width, - GLsizei height); - -GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, - GLenum type, GLvoid *image ); - -GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *row, const GLvoid *column ); - -GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, - GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); - - - - -/* - * OpenGL 1.3 - */ - -/* multitexture */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -/* texture_cube_map */ -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -/* texture_compression */ -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -/* multisample */ -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 -/* transpose_matrix */ -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -/* texture_env_combine */ -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -/* texture_env_dot3 */ -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -/* texture_border_clamp */ -#define GL_CLAMP_TO_BORDER 0x812D - -GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); - -GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); - - -GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); - - -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); - - - -/* - * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) - */ -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 - -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - -GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); -GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); -GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); -GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); -GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); -GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); -GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); - -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); - -#endif /* GL_ARB_multitexture */ - - - -/* - * Define this token if you want "old-style" header file behaviour (extensions - * defined in gl.h). Otherwise, extensions will be included from glext.h. - */ -#if defined(GL_GLEXT_LEGACY) - -/* All extensions that used to be here are now found in glext.h */ - -#else /* GL_GLEXT_LEGACY */ - -#include - -#endif /* GL_GLEXT_LEGACY */ - - - -/* - * ???. GL_MESA_packed_depth_stencil - * XXX obsolete - */ -#ifndef GL_MESA_packed_depth_stencil -#define GL_MESA_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_MESA 0x8750 -#define GL_UNSIGNED_INT_24_8_MESA 0x8751 -#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 -#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 -#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 - -#endif /* GL_MESA_packed_depth_stencil */ - - -#ifndef GL_ATI_blend_equation_separate -#define GL_ATI_blend_equation_separate 1 - -#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D - -GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); - -#endif /* GL_ATI_blend_equation_separate */ - - -/* GL_OES_EGL_image */ -#if !defined(GL_OES_EGL_image) && !defined(GL_EXT_EGL_image_storage) -typedef void* GLeglImageOES; -#endif - -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* __gl_h_ */ diff --git a/ltw/src/main/tinywrapper/GL/glext.h b/ltw/src/main/tinywrapper/GL/glext.h deleted file mode 100644 index e8694ae..0000000 --- a/ltw/src/main/tinywrapper/GL/glext.h +++ /dev/null @@ -1,12832 +0,0 @@ -#ifndef __gl_glext_h_ -#define __gl_glext_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2013-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* -** This header is generated from the Khronos OpenGL / OpenGL ES XML -** API Registry. The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** https://github.com/KhronosGroup/OpenGL-Registry -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -#define GL_GLEXT_VERSION 20190911 - -#include - -/* Generated C header for: - * API: gl - * Profile: compatibility - * Versions considered: .* - * Versions emitted: 1\.[2-9]|[234]\.[0-9] - * Default extensions included: gl - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_RESCALE_NORMAL 0x803A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#endif /* GL_VERSION_1_2 */ - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum texture); -GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); -GLAPI void APIENTRY glClientActiveTexture (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); -#endif -#endif /* GL_VERSION_1_3 */ - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#define GL_BLEND_COLOR 0x8005 -#define GL_BLEND_EQUATION 0x8009 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_FUNC_SUBTRACT 0x800A -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFogCoordf (GLfloat coord); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); -GLAPI void APIENTRY glFogCoordd (GLdouble coord); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2iv (const GLint *v); -GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); -GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3iv (const GLint *v); -GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); -GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void APIENTRY glBlendEquation (GLenum mode); -#endif -#endif /* GL_VERSION_1_4 */ - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -typedef khronos_ssize_t GLsizeiptr; -typedef khronos_intptr_t GLintptr; -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_SRC1_ALPHA 0x8589 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_CURRENT_FOG_COORD 0x8453 -#define GL_FOG_COORD_ARRAY_TYPE 0x8454 -#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORD_ARRAY_POINTER 0x8456 -#define GL_FOG_COORD_ARRAY 0x8457 -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC2_ALPHA 0x858A -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); -typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQuery (GLuint id); -GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQuery (GLenum target); -GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); -GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_VERSION_1_5 */ - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -typedef char GLchar; -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_TEXTURE_COORDS 0x8871 -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GLAPI void APIENTRY glCompileShader (GLuint shader); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum type); -GLAPI void APIENTRY glDeleteProgram (GLuint program); -GLAPI void APIENTRY glDeleteShader (GLuint shader); -GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); -GLAPI GLboolean APIENTRY glIsProgram (GLuint program); -GLAPI GLboolean APIENTRY glIsShader (GLuint shader); -GLAPI void APIENTRY glLinkProgram (GLuint program); -GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -GLAPI void APIENTRY glUseProgram (GLuint program); -GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glValidateProgram (GLuint program); -GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -#endif -#endif /* GL_VERSION_2_0 */ - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif -#endif /* GL_VERSION_2_1 */ - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -typedef khronos_uint16_t GLhalf; -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_COLOR_ATTACHMENT16 0x8CF0 -#define GL_COLOR_ATTACHMENT17 0x8CF1 -#define GL_COLOR_ATTACHMENT18 0x8CF2 -#define GL_COLOR_ATTACHMENT19 0x8CF3 -#define GL_COLOR_ATTACHMENT20 0x8CF4 -#define GL_COLOR_ATTACHMENT21 0x8CF5 -#define GL_COLOR_ATTACHMENT22 0x8CF6 -#define GL_COLOR_ATTACHMENT23 0x8CF7 -#define GL_COLOR_ATTACHMENT24 0x8CF8 -#define GL_COLOR_ATTACHMENT25 0x8CF9 -#define GL_COLOR_ATTACHMENT26 0x8CFA -#define GL_COLOR_ATTACHMENT27 0x8CFB -#define GL_COLOR_ATTACHMENT28 0x8CFC -#define GL_COLOR_ATTACHMENT29 0x8CFD -#define GL_COLOR_ATTACHMENT30 0x8CFE -#define GL_COLOR_ATTACHMENT31 0x8CFF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#define GL_INDEX 0x8222 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#define GL_HALF_FLOAT 0x140B -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_ALPHA_INTEGER 0x8D97 -typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); -GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); -GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); -GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmap (GLenum target); -GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glBindVertexArray (GLuint array); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); -#endif -#endif /* GL_VERSION_3_0 */ - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFFu -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); -GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); -GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif -#endif /* GL_VERSION_3_1 */ - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -typedef struct __GLsync *GLsync; -typedef khronos_uint64_t GLuint64; -typedef khronos_int64_t GLint64; -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -#define GL_DEPTH_CLAMP 0x864F -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); -typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); -typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -GLAPI void APIENTRY glProvokingVertex (GLenum mode); -GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GLAPI GLboolean APIENTRY glIsSync (GLsync sync); -GLAPI void APIENTRY glDeleteSync (GLsync sync); -GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); -GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); -GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); -#endif -#endif /* GL_VERSION_3_2 */ - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#define GL_SAMPLER_BINDING 0x8919 -#define GL_RGB10_A2UI 0x906F -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#define GL_INT_2_10_10_10_REV 0x8D9F -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); -GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); -GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); -GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); -GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); -GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); -GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); -GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); -#endif -#endif /* GL_VERSION_3_3 */ - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -#define GL_PATCHES 0x000E -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -#define GL_ISOLINES 0x8E7A -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); -typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShading (GLfloat value); -GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); -GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); -GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); -GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); -GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); -GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); -GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); -GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedback (void); -GLAPI void APIENTRY glResumeTransformFeedback (void); -GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); -GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); -GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); -GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); -GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif -#endif /* GL_VERSION_4_0 */ - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_RGB565 0x8D62 -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReleaseShaderCompiler (void); -GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); -GLAPI void APIENTRY glClearDepthf (GLfloat d); -GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); -GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); -GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); -GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); -GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); -GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); -GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); -GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); -#endif -#endif /* GL_VERSION_4_1 */ - -#ifndef GL_VERSION_4_2 -#define GL_VERSION_4_2 1 -#define GL_COPY_READ_BUFFER_BINDING 0x8F36 -#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 -#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E -#define GL_NUM_SAMPLE_COUNTS 0x9380 -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); -typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); -GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); -GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#endif -#endif /* GL_VERSION_4_2 */ - -#ifndef GL_VERSION_4_3 -#define GL_VERSION_4_3 1 -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 -#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_COMPUTE_SHADER 0x91B9 -#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB -#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC -#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD -#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 -#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 -#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 -#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 -#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 -#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB -#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE -#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF -#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED -#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE -#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF -#define GL_COMPUTE_SHADER_BIT 0x00000020 -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_MAX_UNIFORM_LOCATIONS 0x826E -#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 -#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 -#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 -#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 -#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 -#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 -#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 -#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 -#define GL_INTERNALFORMAT_SUPPORTED 0x826F -#define GL_INTERNALFORMAT_PREFERRED 0x8270 -#define GL_INTERNALFORMAT_RED_SIZE 0x8271 -#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 -#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 -#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 -#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 -#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 -#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 -#define GL_INTERNALFORMAT_RED_TYPE 0x8278 -#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 -#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A -#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B -#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C -#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D -#define GL_MAX_WIDTH 0x827E -#define GL_MAX_HEIGHT 0x827F -#define GL_MAX_DEPTH 0x8280 -#define GL_MAX_LAYERS 0x8281 -#define GL_MAX_COMBINED_DIMENSIONS 0x8282 -#define GL_COLOR_COMPONENTS 0x8283 -#define GL_DEPTH_COMPONENTS 0x8284 -#define GL_STENCIL_COMPONENTS 0x8285 -#define GL_COLOR_RENDERABLE 0x8286 -#define GL_DEPTH_RENDERABLE 0x8287 -#define GL_STENCIL_RENDERABLE 0x8288 -#define GL_FRAMEBUFFER_RENDERABLE 0x8289 -#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A -#define GL_FRAMEBUFFER_BLEND 0x828B -#define GL_READ_PIXELS 0x828C -#define GL_READ_PIXELS_FORMAT 0x828D -#define GL_READ_PIXELS_TYPE 0x828E -#define GL_TEXTURE_IMAGE_FORMAT 0x828F -#define GL_TEXTURE_IMAGE_TYPE 0x8290 -#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 -#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 -#define GL_MIPMAP 0x8293 -#define GL_MANUAL_GENERATE_MIPMAP 0x8294 -#define GL_AUTO_GENERATE_MIPMAP 0x8295 -#define GL_COLOR_ENCODING 0x8296 -#define GL_SRGB_READ 0x8297 -#define GL_SRGB_WRITE 0x8298 -#define GL_FILTER 0x829A -#define GL_VERTEX_TEXTURE 0x829B -#define GL_TESS_CONTROL_TEXTURE 0x829C -#define GL_TESS_EVALUATION_TEXTURE 0x829D -#define GL_GEOMETRY_TEXTURE 0x829E -#define GL_FRAGMENT_TEXTURE 0x829F -#define GL_COMPUTE_TEXTURE 0x82A0 -#define GL_TEXTURE_SHADOW 0x82A1 -#define GL_TEXTURE_GATHER 0x82A2 -#define GL_TEXTURE_GATHER_SHADOW 0x82A3 -#define GL_SHADER_IMAGE_LOAD 0x82A4 -#define GL_SHADER_IMAGE_STORE 0x82A5 -#define GL_SHADER_IMAGE_ATOMIC 0x82A6 -#define GL_IMAGE_TEXEL_SIZE 0x82A7 -#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 -#define GL_IMAGE_PIXEL_FORMAT 0x82A9 -#define GL_IMAGE_PIXEL_TYPE 0x82AA -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF -#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 -#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 -#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 -#define GL_CLEAR_BUFFER 0x82B4 -#define GL_TEXTURE_VIEW 0x82B5 -#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 -#define GL_FULL_SUPPORT 0x82B7 -#define GL_CAVEAT_SUPPORT 0x82B8 -#define GL_IMAGE_CLASS_4_X_32 0x82B9 -#define GL_IMAGE_CLASS_2_X_32 0x82BA -#define GL_IMAGE_CLASS_1_X_32 0x82BB -#define GL_IMAGE_CLASS_4_X_16 0x82BC -#define GL_IMAGE_CLASS_2_X_16 0x82BD -#define GL_IMAGE_CLASS_1_X_16 0x82BE -#define GL_IMAGE_CLASS_4_X_8 0x82BF -#define GL_IMAGE_CLASS_2_X_8 0x82C0 -#define GL_IMAGE_CLASS_1_X_8 0x82C1 -#define GL_IMAGE_CLASS_11_11_10 0x82C2 -#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 -#define GL_VIEW_CLASS_128_BITS 0x82C4 -#define GL_VIEW_CLASS_96_BITS 0x82C5 -#define GL_VIEW_CLASS_64_BITS 0x82C6 -#define GL_VIEW_CLASS_48_BITS 0x82C7 -#define GL_VIEW_CLASS_32_BITS 0x82C8 -#define GL_VIEW_CLASS_24_BITS 0x82C9 -#define GL_VIEW_CLASS_16_BITS 0x82CA -#define GL_VIEW_CLASS_8_BITS 0x82CB -#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC -#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD -#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE -#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF -#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 -#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 -#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 -#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 -#define GL_UNIFORM 0x92E1 -#define GL_UNIFORM_BLOCK 0x92E2 -#define GL_PROGRAM_INPUT 0x92E3 -#define GL_PROGRAM_OUTPUT 0x92E4 -#define GL_BUFFER_VARIABLE 0x92E5 -#define GL_SHADER_STORAGE_BLOCK 0x92E6 -#define GL_VERTEX_SUBROUTINE 0x92E8 -#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 -#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA -#define GL_GEOMETRY_SUBROUTINE 0x92EB -#define GL_FRAGMENT_SUBROUTINE 0x92EC -#define GL_COMPUTE_SUBROUTINE 0x92ED -#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE -#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF -#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 -#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 -#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 -#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 -#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 -#define GL_ACTIVE_RESOURCES 0x92F5 -#define GL_MAX_NAME_LENGTH 0x92F6 -#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 -#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 -#define GL_NAME_LENGTH 0x92F9 -#define GL_TYPE 0x92FA -#define GL_ARRAY_SIZE 0x92FB -#define GL_OFFSET 0x92FC -#define GL_BLOCK_INDEX 0x92FD -#define GL_ARRAY_STRIDE 0x92FE -#define GL_MATRIX_STRIDE 0x92FF -#define GL_IS_ROW_MAJOR 0x9300 -#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 -#define GL_BUFFER_BINDING 0x9302 -#define GL_BUFFER_DATA_SIZE 0x9303 -#define GL_NUM_ACTIVE_VARIABLES 0x9304 -#define GL_ACTIVE_VARIABLES 0x9305 -#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 -#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 -#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A -#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B -#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C -#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D -#define GL_LOCATION 0x930E -#define GL_LOCATION_INDEX 0x930F -#define GL_IS_PER_PATCH 0x92E7 -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 -#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 -#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 -#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 -#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA -#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB -#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC -#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD -#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE -#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF -#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 -#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 -#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA -#define GL_TEXTURE_BUFFER_OFFSET 0x919D -#define GL_TEXTURE_BUFFER_SIZE 0x919E -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F -#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA -#define GL_VERTEX_BINDING_BUFFER 0x8F4F -#define GL_DISPLAY_LIST 0x82E7 -typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); -GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); -GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); -GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); -GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GLAPI void APIENTRY glPopDebugGroup (void); -GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -#endif /* GL_VERSION_4_3 */ - -#ifndef GL_VERSION_4_4 -#define GL_VERSION_4_4 1 -#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 -#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 -#define GL_TEXTURE_BUFFER_BINDING 0x8C2A -#define GL_MAP_PERSISTENT_BIT 0x0040 -#define GL_MAP_COHERENT_BIT 0x0080 -#define GL_DYNAMIC_STORAGE_BIT 0x0100 -#define GL_CLIENT_STORAGE_BIT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F -#define GL_BUFFER_STORAGE_FLAGS 0x8220 -#define GL_CLEAR_TEXTURE 0x9365 -#define GL_LOCATION_COMPONENT 0x934A -#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B -#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C -#define GL_QUERY_BUFFER 0x9192 -#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 -#define GL_QUERY_BUFFER_BINDING 0x9193 -#define GL_QUERY_RESULT_NO_WAIT 0x9194 -#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 -typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); -typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); -typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); -typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); -GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); -GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); -GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); -GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -#endif -#endif /* GL_VERSION_4_4 */ - -#ifndef GL_VERSION_4_5 -#define GL_VERSION_4_5 1 -#define GL_CONTEXT_LOST 0x0507 -#define GL_NEGATIVE_ONE_TO_ONE 0x935E -#define GL_ZERO_TO_ONE 0x935F -#define GL_CLIP_ORIGIN 0x935C -#define GL_CLIP_DEPTH_MODE 0x935D -#define GL_QUERY_WAIT_INVERTED 0x8E17 -#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 -#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 -#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A -#define GL_MAX_CULL_DISTANCES 0x82F9 -#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA -#define GL_TEXTURE_TARGET 0x1006 -#define GL_QUERY_TARGET 0x82EA -#define GL_GUILTY_CONTEXT_RESET 0x8253 -#define GL_INNOCENT_CONTEXT_RESET 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET 0x8252 -#define GL_NO_RESET_NOTIFICATION 0x8261 -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 -#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB -#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC -typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth); -typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); -typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src); -typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); -typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); -typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers); -typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers); -typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth); -GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param); -GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); -GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers); -GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access); -GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer); -GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params); -GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param); -GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf); -GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src); -GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); -GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures); -GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param); -GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture); -GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture); -GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params); -GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays); -GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer); -GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); -GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers); -GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids); -GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers); -GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); -GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void); -GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI void APIENTRY glTextureBarrier (void); -#endif -#endif /* GL_VERSION_4_5 */ - -#ifndef GL_VERSION_4_6 -#define GL_VERSION_4_6 1 -#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 -#define GL_SPIR_V_BINARY 0x9552 -#define GL_PARAMETER_BUFFER 0x80EE -#define GL_PARAMETER_BUFFER_BINDING 0x80EF -#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 -#define GL_VERTICES_SUBMITTED 0x82EE -#define GL_PRIMITIVES_SUBMITTED 0x82EF -#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 -#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 -#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 -#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 -#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 -#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 -#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 -#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 -#define GL_POLYGON_OFFSET_CLAMP 0x8E1B -#define GL_SPIR_V_EXTENSIONS 0x9553 -#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 -#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF -#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC -#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED -typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp); -#endif -#endif /* GL_VERSION_4_6 */ - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -#endif /* GL_ARB_ES2_compatibility */ - -#ifndef GL_ARB_ES3_1_compatibility -#define GL_ARB_ES3_1_compatibility 1 -#endif /* GL_ARB_ES3_1_compatibility */ - -#ifndef GL_ARB_ES3_2_compatibility -#define GL_ARB_ES3_2_compatibility 1 -#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE -#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 -#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 -typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#endif -#endif /* GL_ARB_ES3_2_compatibility */ - -#ifndef GL_ARB_ES3_compatibility -#define GL_ARB_ES3_compatibility 1 -#endif /* GL_ARB_ES3_compatibility */ - -#ifndef GL_ARB_arrays_of_arrays -#define GL_ARB_arrays_of_arrays 1 -#endif /* GL_ARB_arrays_of_arrays */ - -#ifndef GL_ARB_base_instance -#define GL_ARB_base_instance 1 -#endif /* GL_ARB_base_instance */ - -#ifndef GL_ARB_bindless_texture -#define GL_ARB_bindless_texture 1 -typedef khronos_uint64_t GLuint64EXT; -#define GL_UNSIGNED_INT64_ARB 0x140F -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); -GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); -GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); -GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); -GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); -GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); -GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); -GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); -GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); -GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); -GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); -#endif -#endif /* GL_ARB_bindless_texture */ - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 -#endif /* GL_ARB_blend_func_extended */ - -#ifndef GL_ARB_buffer_storage -#define GL_ARB_buffer_storage 1 -#endif /* GL_ARB_buffer_storage */ - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 -struct _cl_context; -struct _cl_event; -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); -#endif -#endif /* GL_ARB_cl_event */ - -#ifndef GL_ARB_clear_buffer_object -#define GL_ARB_clear_buffer_object 1 -#endif /* GL_ARB_clear_buffer_object */ - -#ifndef GL_ARB_clear_texture -#define GL_ARB_clear_texture 1 -#endif /* GL_ARB_clear_texture */ - -#ifndef GL_ARB_clip_control -#define GL_ARB_clip_control 1 -#endif /* GL_ARB_clip_control */ - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); -#endif -#endif /* GL_ARB_color_buffer_float */ - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 -#endif /* GL_ARB_compatibility */ - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 -#endif /* GL_ARB_compressed_texture_pixel_storage */ - -#ifndef GL_ARB_compute_shader -#define GL_ARB_compute_shader 1 -#endif /* GL_ARB_compute_shader */ - -#ifndef GL_ARB_compute_variable_group_size -#define GL_ARB_compute_variable_group_size 1 -#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 -#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB -#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 -#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); -#endif -#endif /* GL_ARB_compute_variable_group_size */ - -#ifndef GL_ARB_conditional_render_inverted -#define GL_ARB_conditional_render_inverted 1 -#endif /* GL_ARB_conditional_render_inverted */ - -#ifndef GL_ARB_conservative_depth -#define GL_ARB_conservative_depth 1 -#endif /* GL_ARB_conservative_depth */ - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 -#endif /* GL_ARB_copy_buffer */ - -#ifndef GL_ARB_copy_image -#define GL_ARB_copy_image 1 -#endif /* GL_ARB_copy_image */ - -#ifndef GL_ARB_cull_distance -#define GL_ARB_cull_distance 1 -#endif /* GL_ARB_cull_distance */ - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif -#endif /* GL_ARB_debug_output */ - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#endif /* GL_ARB_depth_buffer_float */ - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#endif /* GL_ARB_depth_clamp */ - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif /* GL_ARB_depth_texture */ - -#ifndef GL_ARB_derivative_control -#define GL_ARB_derivative_control 1 -#endif /* GL_ARB_derivative_control */ - -#ifndef GL_ARB_direct_state_access -#define GL_ARB_direct_state_access 1 -#endif /* GL_ARB_direct_state_access */ - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_ARB_draw_buffers */ - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif -#endif /* GL_ARB_draw_buffers_blend */ - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#endif /* GL_ARB_draw_elements_base_vertex */ - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 -#endif /* GL_ARB_draw_indirect */ - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_ARB_draw_instanced */ - -#ifndef GL_ARB_enhanced_layouts -#define GL_ARB_enhanced_layouts 1 -#endif /* GL_ARB_enhanced_layouts */ - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -#endif /* GL_ARB_explicit_attrib_location */ - -#ifndef GL_ARB_explicit_uniform_location -#define GL_ARB_explicit_uniform_location 1 -#endif /* GL_ARB_explicit_uniform_location */ - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 -#endif /* GL_ARB_fragment_coord_conventions */ - -#ifndef GL_ARB_fragment_layer_viewport -#define GL_ARB_fragment_layer_viewport 1 -#endif /* GL_ARB_fragment_layer_viewport */ - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); -#endif -#endif /* GL_ARB_fragment_program */ - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif /* GL_ARB_fragment_program_shadow */ - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif /* GL_ARB_fragment_shader */ - -#ifndef GL_ARB_fragment_shader_interlock -#define GL_ARB_fragment_shader_interlock 1 -#endif /* GL_ARB_fragment_shader_interlock */ - -#ifndef GL_ARB_framebuffer_no_attachments -#define GL_ARB_framebuffer_no_attachments 1 -#endif /* GL_ARB_framebuffer_no_attachments */ - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#endif /* GL_ARB_framebuffer_object */ - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#endif /* GL_ARB_framebuffer_sRGB */ - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 -#define GL_LINES_ADJACENCY_ARB 0x000A -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B -#define GL_TRIANGLES_ADJACENCY_ARB 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif -#endif /* GL_ARB_geometry_shader4 */ - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 -#endif /* GL_ARB_get_program_binary */ - -#ifndef GL_ARB_get_texture_sub_image -#define GL_ARB_get_texture_sub_image 1 -#endif /* GL_ARB_get_texture_sub_image */ - -#ifndef GL_ARB_gl_spirv -#define GL_ARB_gl_spirv 1 -#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 -#define GL_SPIR_V_BINARY_ARB 0x9552 -typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -#endif -#endif /* GL_ARB_gl_spirv */ - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 -#endif /* GL_ARB_gpu_shader5 */ - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 -#endif /* GL_ARB_gpu_shader_fp64 */ - -#ifndef GL_ARB_gpu_shader_int64 -#define GL_ARB_gpu_shader_int64 1 -#define GL_INT64_ARB 0x140E -#define GL_INT64_VEC2_ARB 0x8FE9 -#define GL_INT64_VEC3_ARB 0x8FEA -#define GL_INT64_VEC4_ARB 0x8FEB -#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 -typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x); -typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y); -typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z); -typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x); -GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y); -GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z); -GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x); -GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y); -GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params); -GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params); -GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); -GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); -GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x); -GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y); -GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); -GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x); -GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y); -GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -#endif -#endif /* GL_ARB_gpu_shader_int64 */ - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -typedef khronos_uint16_t GLhalfARB; -#define GL_HALF_FLOAT_ARB 0x140B -#endif /* GL_ARB_half_float_pixel */ - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -#endif /* GL_ARB_half_float_vertex */ - -#ifndef GL_ARB_imaging -#define GL_ARB_imaging 1 -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogram (GLenum target); -GLAPI void APIENTRY glResetMinmax (GLenum target); -#endif -#endif /* GL_ARB_imaging */ - -#ifndef GL_ARB_indirect_parameters -#define GL_ARB_indirect_parameters 1 -#define GL_PARAMETER_BUFFER_ARB 0x80EE -#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#endif -#endif /* GL_ARB_indirect_parameters */ - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); -#endif -#endif /* GL_ARB_instanced_arrays */ - -#ifndef GL_ARB_internalformat_query -#define GL_ARB_internalformat_query 1 -#endif /* GL_ARB_internalformat_query */ - -#ifndef GL_ARB_internalformat_query2 -#define GL_ARB_internalformat_query2 1 -#define GL_SRGB_DECODE_ARB 0x8299 -#define GL_VIEW_CLASS_EAC_R11 0x9383 -#define GL_VIEW_CLASS_EAC_RG11 0x9384 -#define GL_VIEW_CLASS_ETC2_RGB 0x9385 -#define GL_VIEW_CLASS_ETC2_RGBA 0x9386 -#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 -#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 -#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 -#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A -#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B -#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C -#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D -#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E -#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F -#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 -#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 -#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 -#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 -#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 -#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 -#endif /* GL_ARB_internalformat_query2 */ - -#ifndef GL_ARB_invalidate_subdata -#define GL_ARB_invalidate_subdata 1 -#endif /* GL_ARB_invalidate_subdata */ - -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 -#endif /* GL_ARB_map_buffer_alignment */ - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#endif /* GL_ARB_map_buffer_range */ - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_ARB_matrix_palette */ - -#ifndef GL_ARB_multi_bind -#define GL_ARB_multi_bind 1 -#endif /* GL_ARB_multi_bind */ - -#ifndef GL_ARB_multi_draw_indirect -#define GL_ARB_multi_draw_indirect 1 -#endif /* GL_ARB_multi_draw_indirect */ - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); -#endif -#endif /* GL_ARB_multisample */ - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); -#endif -#endif /* GL_ARB_multitexture */ - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); -GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQueryARB (GLenum target); -GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); -#endif -#endif /* GL_ARB_occlusion_query */ - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 -#endif /* GL_ARB_occlusion_query2 */ - -#ifndef GL_ARB_parallel_shader_compile -#define GL_ARB_parallel_shader_compile 1 -#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 -#define GL_COMPLETION_STATUS_ARB 0x91B1 -typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count); -#endif -#endif /* GL_ARB_parallel_shader_compile */ - -#ifndef GL_ARB_pipeline_statistics_query -#define GL_ARB_pipeline_statistics_query 1 -#define GL_VERTICES_SUBMITTED_ARB 0x82EE -#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF -#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 -#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 -#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 -#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 -#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 -#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 -#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 -#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 -#endif /* GL_ARB_pipeline_statistics_query */ - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif /* GL_ARB_pixel_buffer_object */ - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_ARB_point_parameters */ - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif /* GL_ARB_point_sprite */ - -#ifndef GL_ARB_polygon_offset_clamp -#define GL_ARB_polygon_offset_clamp 1 -#endif /* GL_ARB_polygon_offset_clamp */ - -#ifndef GL_ARB_post_depth_coverage -#define GL_ARB_post_depth_coverage 1 -#endif /* GL_ARB_post_depth_coverage */ - -#ifndef GL_ARB_program_interface_query -#define GL_ARB_program_interface_query 1 -#endif /* GL_ARB_program_interface_query */ - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#endif /* GL_ARB_provoking_vertex */ - -#ifndef GL_ARB_query_buffer_object -#define GL_ARB_query_buffer_object 1 -#endif /* GL_ARB_query_buffer_object */ - -#ifndef GL_ARB_robust_buffer_access_behavior -#define GL_ARB_robust_buffer_access_behavior 1 -#endif /* GL_ARB_robust_buffer_access_behavior */ - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); -GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); -GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); -GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -#endif -#endif /* GL_ARB_robustness */ - -#ifndef GL_ARB_robustness_isolation -#define GL_ARB_robustness_isolation 1 -#endif /* GL_ARB_robustness_isolation */ - -#ifndef GL_ARB_sample_locations -#define GL_ARB_sample_locations 1 -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 -#define GL_SAMPLE_LOCATION_ARB 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glEvaluateDepthValuesARB (void); -#endif -#endif /* GL_ARB_sample_locations */ - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); -#endif -#endif /* GL_ARB_sample_shading */ - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 -#endif /* GL_ARB_sampler_objects */ - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 -#endif /* GL_ARB_seamless_cube_map */ - -#ifndef GL_ARB_seamless_cubemap_per_texture -#define GL_ARB_seamless_cubemap_per_texture 1 -#endif /* GL_ARB_seamless_cubemap_per_texture */ - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 -#endif /* GL_ARB_separate_shader_objects */ - -#ifndef GL_ARB_shader_atomic_counter_ops -#define GL_ARB_shader_atomic_counter_ops 1 -#endif /* GL_ARB_shader_atomic_counter_ops */ - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ARB_shader_atomic_counters 1 -#endif /* GL_ARB_shader_atomic_counters */ - -#ifndef GL_ARB_shader_ballot -#define GL_ARB_shader_ballot 1 -#endif /* GL_ARB_shader_ballot */ - -#ifndef GL_ARB_shader_bit_encoding -#define GL_ARB_shader_bit_encoding 1 -#endif /* GL_ARB_shader_bit_encoding */ - -#ifndef GL_ARB_shader_clock -#define GL_ARB_shader_clock 1 -#endif /* GL_ARB_shader_clock */ - -#ifndef GL_ARB_shader_draw_parameters -#define GL_ARB_shader_draw_parameters 1 -#endif /* GL_ARB_shader_draw_parameters */ - -#ifndef GL_ARB_shader_group_vote -#define GL_ARB_shader_group_vote 1 -#endif /* GL_ARB_shader_group_vote */ - -#ifndef GL_ARB_shader_image_load_store -#define GL_ARB_shader_image_load_store 1 -#endif /* GL_ARB_shader_image_load_store */ - -#ifndef GL_ARB_shader_image_size -#define GL_ARB_shader_image_size 1 -#endif /* GL_ARB_shader_image_size */ - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef __APPLE__ -#ifdef BUILDING_MESA -/* Avoid uint <-> void* warnings */ -typedef unsigned long GLhandleARB; -#else -typedef void *GLhandleARB; -#endif -#else -typedef unsigned int GLhandleARB; -#endif -typedef char GLcharARB; -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif -#endif /* GL_ARB_shader_objects */ - -#ifndef GL_ARB_shader_precision -#define GL_ARB_shader_precision 1 -#endif /* GL_ARB_shader_precision */ - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 -#endif /* GL_ARB_shader_stencil_export */ - -#ifndef GL_ARB_shader_storage_buffer_object -#define GL_ARB_shader_storage_buffer_object 1 -#endif /* GL_ARB_shader_storage_buffer_object */ - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 -#endif /* GL_ARB_shader_subroutine */ - -#ifndef GL_ARB_shader_texture_image_samples -#define GL_ARB_shader_texture_image_samples 1 -#endif /* GL_ARB_shader_texture_image_samples */ - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 -#endif /* GL_ARB_shader_texture_lod */ - -#ifndef GL_ARB_shader_viewport_layer_array -#define GL_ARB_shader_viewport_layer_array 1 -#endif /* GL_ARB_shader_viewport_layer_array */ - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif /* GL_ARB_shading_language_100 */ - -#ifndef GL_ARB_shading_language_420pack -#define GL_ARB_shading_language_420pack 1 -#endif /* GL_ARB_shading_language_420pack */ - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); -GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif -#endif /* GL_ARB_shading_language_include */ - -#ifndef GL_ARB_shading_language_packing -#define GL_ARB_shading_language_packing 1 -#endif /* GL_ARB_shading_language_packing */ - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif /* GL_ARB_shadow */ - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif /* GL_ARB_shadow_ambient */ - -#ifndef GL_ARB_sparse_buffer -#define GL_ARB_sparse_buffer 1 -#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 -#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 -typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); -typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); -GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -#endif -#endif /* GL_ARB_sparse_buffer */ - -#ifndef GL_ARB_sparse_texture -#define GL_ARB_sparse_texture 1 -#define GL_TEXTURE_SPARSE_ARB 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 -#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA -#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 -#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 -typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -#endif -#endif /* GL_ARB_sparse_texture */ - -#ifndef GL_ARB_sparse_texture2 -#define GL_ARB_sparse_texture2 1 -#endif /* GL_ARB_sparse_texture2 */ - -#ifndef GL_ARB_sparse_texture_clamp -#define GL_ARB_sparse_texture_clamp 1 -#endif /* GL_ARB_sparse_texture_clamp */ - -#ifndef GL_ARB_spirv_extensions -#define GL_ARB_spirv_extensions 1 -#endif /* GL_ARB_spirv_extensions */ - -#ifndef GL_ARB_stencil_texturing -#define GL_ARB_stencil_texturing 1 -#endif /* GL_ARB_stencil_texturing */ - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#endif /* GL_ARB_sync */ - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 -#endif /* GL_ARB_tessellation_shader */ - -#ifndef GL_ARB_texture_barrier -#define GL_ARB_texture_barrier 1 -#endif /* GL_ARB_texture_barrier */ - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif /* GL_ARB_texture_border_clamp */ - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E -typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); -#endif -#endif /* GL_ARB_texture_buffer_object */ - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 -#endif /* GL_ARB_texture_buffer_object_rgb32 */ - -#ifndef GL_ARB_texture_buffer_range -#define GL_ARB_texture_buffer_range 1 -#endif /* GL_ARB_texture_buffer_range */ - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); -#endif -#endif /* GL_ARB_texture_compression */ - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F -#endif /* GL_ARB_texture_compression_bptc */ - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#endif /* GL_ARB_texture_compression_rgtc */ - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif /* GL_ARB_texture_cube_map */ - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F -#endif /* GL_ARB_texture_cube_map_array */ - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif /* GL_ARB_texture_env_add */ - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif /* GL_ARB_texture_env_combine */ - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif /* GL_ARB_texture_env_crossbar */ - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif /* GL_ARB_texture_env_dot3 */ - -#ifndef GL_ARB_texture_filter_anisotropic -#define GL_ARB_texture_filter_anisotropic 1 -#endif /* GL_ARB_texture_filter_anisotropic */ - -#ifndef GL_ARB_texture_filter_minmax -#define GL_ARB_texture_filter_minmax 1 -#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 -#define GL_WEIGHTED_AVERAGE_ARB 0x9367 -#endif /* GL_ARB_texture_filter_minmax */ - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif /* GL_ARB_texture_float */ - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F -#endif /* GL_ARB_texture_gather */ - -#ifndef GL_ARB_texture_mirror_clamp_to_edge -#define GL_ARB_texture_mirror_clamp_to_edge 1 -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif /* GL_ARB_texture_mirrored_repeat */ - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -#endif /* GL_ARB_texture_multisample */ - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif /* GL_ARB_texture_non_power_of_two */ - -#ifndef GL_ARB_texture_query_levels -#define GL_ARB_texture_query_levels 1 -#endif /* GL_ARB_texture_query_levels */ - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 -#endif /* GL_ARB_texture_query_lod */ - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif /* GL_ARB_texture_rectangle */ - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#endif /* GL_ARB_texture_rg */ - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 -#endif /* GL_ARB_texture_rgb10_a2ui */ - -#ifndef GL_ARB_texture_stencil8 -#define GL_ARB_texture_stencil8 1 -#endif /* GL_ARB_texture_stencil8 */ - -#ifndef GL_ARB_texture_storage -#define GL_ARB_texture_storage 1 -#endif /* GL_ARB_texture_storage */ - -#ifndef GL_ARB_texture_storage_multisample -#define GL_ARB_texture_storage_multisample 1 -#endif /* GL_ARB_texture_storage_multisample */ - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -#endif /* GL_ARB_texture_swizzle */ - -#ifndef GL_ARB_texture_view -#define GL_ARB_texture_view 1 -#endif /* GL_ARB_texture_view */ - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 -#endif /* GL_ARB_timer_query */ - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 -#endif /* GL_ARB_transform_feedback2 */ - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 -#endif /* GL_ARB_transform_feedback3 */ - -#ifndef GL_ARB_transform_feedback_instanced -#define GL_ARB_transform_feedback_instanced 1 -#endif /* GL_ARB_transform_feedback_instanced */ - -#ifndef GL_ARB_transform_feedback_overflow_query -#define GL_ARB_transform_feedback_overflow_query 1 -#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC -#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED -#endif /* GL_ARB_transform_feedback_overflow_query */ - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); -#endif -#endif /* GL_ARB_transpose_matrix */ - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -#endif /* GL_ARB_uniform_buffer_object */ - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 -#endif /* GL_ARB_vertex_array_bgra */ - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -#endif /* GL_ARB_vertex_array_object */ - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 -#endif /* GL_ARB_vertex_attrib_64bit */ - -#ifndef GL_ARB_vertex_attrib_binding -#define GL_ARB_vertex_attrib_binding 1 -#endif /* GL_ARB_vertex_attrib_binding */ - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); -GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); -GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); -GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); -GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); -GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); -GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); -GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); -GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glVertexBlendARB (GLint count); -#endif -#endif /* GL_ARB_vertex_blend */ - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -typedef khronos_ssize_t GLsizeiptrARB; -typedef khronos_intptr_t GLintptrARB; -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); -typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); -GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); -GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); -GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_ARB_vertex_buffer_object */ - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); -#endif -#endif /* GL_ARB_vertex_program */ - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); -#endif -#endif /* GL_ARB_vertex_shader */ - -#ifndef GL_ARB_vertex_type_10f_11f_11f_rev -#define GL_ARB_vertex_type_10f_11f_11f_rev 1 -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 -#endif /* GL_ARB_viewport_array */ - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); -#endif -#endif /* GL_ARB_window_pos */ - -#ifndef GL_KHR_blend_equation_advanced -#define GL_KHR_blend_equation_advanced 1 -#define GL_MULTIPLY_KHR 0x9294 -#define GL_SCREEN_KHR 0x9295 -#define GL_OVERLAY_KHR 0x9296 -#define GL_DARKEN_KHR 0x9297 -#define GL_LIGHTEN_KHR 0x9298 -#define GL_COLORDODGE_KHR 0x9299 -#define GL_COLORBURN_KHR 0x929A -#define GL_HARDLIGHT_KHR 0x929B -#define GL_SOFTLIGHT_KHR 0x929C -#define GL_DIFFERENCE_KHR 0x929E -#define GL_EXCLUSION_KHR 0x92A0 -#define GL_HSL_HUE_KHR 0x92AD -#define GL_HSL_SATURATION_KHR 0x92AE -#define GL_HSL_COLOR_KHR 0x92AF -#define GL_HSL_LUMINOSITY_KHR 0x92B0 -typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendBarrierKHR (void); -#endif -#endif /* GL_KHR_blend_equation_advanced */ - -#ifndef GL_KHR_blend_equation_advanced_coherent -#define GL_KHR_blend_equation_advanced_coherent 1 -#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 -#endif /* GL_KHR_blend_equation_advanced_coherent */ - -#ifndef GL_KHR_context_flush_control -#define GL_KHR_context_flush_control 1 -#endif /* GL_KHR_context_flush_control */ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#endif /* GL_KHR_debug */ - -#ifndef GL_KHR_no_error -#define GL_KHR_no_error 1 -#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 -#endif /* GL_KHR_no_error */ - -#ifndef GL_KHR_parallel_shader_compile -#define GL_KHR_parallel_shader_compile 1 -#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 -#define GL_COMPLETION_STATUS_KHR 0x91B1 -typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); -#endif -#endif /* GL_KHR_parallel_shader_compile */ - -#ifndef GL_KHR_robust_buffer_access_behavior -#define GL_KHR_robust_buffer_access_behavior 1 -#endif /* GL_KHR_robust_buffer_access_behavior */ - -#ifndef GL_KHR_robustness -#define GL_KHR_robustness 1 -#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 -#endif /* GL_KHR_robustness */ - -#ifndef GL_KHR_shader_subgroup -#define GL_KHR_shader_subgroup 1 -#define GL_SUBGROUP_SIZE_KHR 0x9532 -#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 -#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 -#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 -#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 -#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 -#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 -#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 -#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 -#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 -#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 -#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 -#endif /* GL_KHR_shader_subgroup */ - -#ifndef GL_KHR_texture_compression_astc_hdr -#define GL_KHR_texture_compression_astc_hdr 1 -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif /* GL_KHR_texture_compression_astc_hdr */ - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif /* GL_KHR_texture_compression_astc_ldr */ - -#ifndef GL_KHR_texture_compression_astc_sliced_3d -#define GL_KHR_texture_compression_astc_sliced_3d 1 -#endif /* GL_KHR_texture_compression_astc_sliced_3d */ - -#ifndef GL_OES_byte_coordinates -#define GL_OES_byte_coordinates 1 -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); -typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); -typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); -typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); -typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y); -typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z); -typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w); -typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); -GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); -GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); -GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); -GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); -GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); -GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y); -GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z); -GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w); -GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); -#endif -#endif /* GL_OES_byte_coordinates */ - -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif /* GL_OES_compressed_paletted_texture */ - -#ifndef GL_OES_fixed_point -#define GL_OES_fixed_point 1 -typedef khronos_int32_t GLfixed; -#define GL_FIXED_OES 0x140C -typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); -typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); -typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); -typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); -typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); -typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); -typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); -typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); -typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); -typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); -typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); -typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); -typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); -typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); -typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); -typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); -typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); -typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); -typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); -typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); -typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); -typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); -typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); -typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); -typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); -typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); -typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); -typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); -typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); -typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); -typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); -typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); -typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); -GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); -GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); -GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); -GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); -GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); -GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glLineWidthxOES (GLfixed width); -GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); -GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); -GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glPointSizexOES (GLfixed size); -GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); -GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); -GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); -GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); -GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); -GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); -GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); -GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); -GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); -GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); -GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); -GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); -GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); -GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glIndexxOES (GLfixed component); -GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); -GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); -GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); -GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); -GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); -GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); -GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); -GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); -GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glPassThroughxOES (GLfixed token); -GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); -GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); -GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); -GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); -GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); -GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); -GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); -GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); -GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); -GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); -GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); -GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glVertex2xOES (GLfixed x); -GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); -GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); -#endif -#endif /* GL_OES_fixed_point */ - -#ifndef GL_OES_query_matrix -#define GL_OES_query_matrix 1 -typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); -#endif -#endif /* GL_OES_query_matrix */ - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif /* GL_OES_read_format */ - -#ifndef GL_OES_single_precision -#define GL_OES_single_precision 1 -typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); -typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); -typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); -typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); -typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); -GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); -GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); -GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); -GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -#endif -#endif /* GL_OES_single_precision */ - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif /* GL_3DFX_multisample */ - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); -#endif -#endif /* GL_3DFX_tbuffer */ - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif /* GL_3DFX_texture_compression_FXT1 */ - -#ifndef GL_AMD_blend_minmax_factor -#define GL_AMD_blend_minmax_factor 1 -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D -#endif /* GL_AMD_blend_minmax_factor */ - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 -#endif /* GL_AMD_conservative_depth */ - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); -#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif -#endif /* GL_AMD_debug_output */ - -#ifndef GL_AMD_depth_clamp_separate -#define GL_AMD_depth_clamp_separate 1 -#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E -#define GL_DEPTH_CLAMP_FAR_AMD 0x901F -#endif /* GL_AMD_depth_clamp_separate */ - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 -typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif -#endif /* GL_AMD_draw_buffers_blend */ - -#ifndef GL_AMD_framebuffer_multisample_advanced -#define GL_AMD_framebuffer_multisample_advanced 1 -#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 -#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 -#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 -#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 -#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 -#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_AMD_framebuffer_multisample_advanced */ - -#ifndef GL_AMD_framebuffer_sample_positions -#define GL_AMD_framebuffer_sample_positions 1 -#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F -#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE -#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF -#define GL_ALL_PIXELS_AMD 0xFFFFFFFF -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferSamplePositionsfvAMD (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -GLAPI void APIENTRY glNamedFramebufferSamplePositionsfvAMD (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -GLAPI void APIENTRY glGetFramebufferParameterfvAMD (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -GLAPI void APIENTRY glGetNamedFramebufferParameterfvAMD (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -#endif -#endif /* GL_AMD_framebuffer_sample_positions */ - -#ifndef GL_AMD_gcn_shader -#define GL_AMD_gcn_shader 1 -#endif /* GL_AMD_gcn_shader */ - -#ifndef GL_AMD_gpu_shader_half_float -#define GL_AMD_gpu_shader_half_float 1 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB -#define GL_FLOAT16_MAT2_AMD 0x91C5 -#define GL_FLOAT16_MAT3_AMD 0x91C6 -#define GL_FLOAT16_MAT4_AMD 0x91C7 -#define GL_FLOAT16_MAT2x3_AMD 0x91C8 -#define GL_FLOAT16_MAT2x4_AMD 0x91C9 -#define GL_FLOAT16_MAT3x2_AMD 0x91CA -#define GL_FLOAT16_MAT3x4_AMD 0x91CB -#define GL_FLOAT16_MAT4x2_AMD 0x91CC -#define GL_FLOAT16_MAT4x3_AMD 0x91CD -#endif /* GL_AMD_gpu_shader_half_float */ - -#ifndef GL_AMD_gpu_shader_int16 -#define GL_AMD_gpu_shader_int16 1 -#endif /* GL_AMD_gpu_shader_int16 */ - -#ifndef GL_AMD_gpu_shader_int64 -#define GL_AMD_gpu_shader_int64 1 -typedef khronos_int64_t GLint64EXT; -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); -GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); -GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); -GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); -GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); -GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); -GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif -#endif /* GL_AMD_gpu_shader_int64 */ - -#ifndef GL_AMD_interleaved_elements -#define GL_AMD_interleaved_elements 1 -#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 -#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 -typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); -#endif -#endif /* GL_AMD_interleaved_elements */ - -#ifndef GL_AMD_multi_draw_indirect -#define GL_AMD_multi_draw_indirect 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); -#endif -#endif /* GL_AMD_multi_draw_indirect */ - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 -typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); -typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); -typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); -GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); -GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); -#endif -#endif /* GL_AMD_name_gen_delete */ - -#ifndef GL_AMD_occlusion_query_event -#define GL_AMD_occlusion_query_event 1 -#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F -#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 -#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 -#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 -#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 -#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF -typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); -#endif -#endif /* GL_AMD_occlusion_query_event */ - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); -typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); -GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -#endif /* GL_AMD_performance_monitor */ - -#ifndef GL_AMD_pinned_memory -#define GL_AMD_pinned_memory 1 -#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 -#endif /* GL_AMD_pinned_memory */ - -#ifndef GL_AMD_query_buffer_object -#define GL_AMD_query_buffer_object 1 -#define GL_QUERY_BUFFER_AMD 0x9192 -#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 -#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 -#endif /* GL_AMD_query_buffer_object */ - -#ifndef GL_AMD_sample_positions -#define GL_AMD_sample_positions 1 -typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); -#endif -#endif /* GL_AMD_sample_positions */ - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 -#endif /* GL_AMD_seamless_cubemap_per_texture */ - -#ifndef GL_AMD_shader_atomic_counter_ops -#define GL_AMD_shader_atomic_counter_ops 1 -#endif /* GL_AMD_shader_atomic_counter_ops */ - -#ifndef GL_AMD_shader_ballot -#define GL_AMD_shader_ballot 1 -#endif /* GL_AMD_shader_ballot */ - -#ifndef GL_AMD_shader_explicit_vertex_parameter -#define GL_AMD_shader_explicit_vertex_parameter 1 -#endif /* GL_AMD_shader_explicit_vertex_parameter */ - -#ifndef GL_AMD_shader_gpu_shader_half_float_fetch -#define GL_AMD_shader_gpu_shader_half_float_fetch 1 -#endif /* GL_AMD_shader_gpu_shader_half_float_fetch */ - -#ifndef GL_AMD_shader_image_load_store_lod -#define GL_AMD_shader_image_load_store_lod 1 -#endif /* GL_AMD_shader_image_load_store_lod */ - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 -#endif /* GL_AMD_shader_stencil_export */ - -#ifndef GL_AMD_shader_trinary_minmax -#define GL_AMD_shader_trinary_minmax 1 -#endif /* GL_AMD_shader_trinary_minmax */ - -#ifndef GL_AMD_sparse_texture -#define GL_AMD_sparse_texture 1 -#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A -#define GL_MIN_SPARSE_LEVEL_AMD 0x919B -#define GL_MIN_LOD_WARNING_AMD 0x919C -#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 -typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -#endif -#endif /* GL_AMD_sparse_texture */ - -#ifndef GL_AMD_stencil_operation_extended -#define GL_AMD_stencil_operation_extended 1 -#define GL_SET_AMD 0x874A -#define GL_REPLACE_VALUE_AMD 0x874B -#define GL_STENCIL_OP_VALUE_AMD 0x874C -#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D -typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); -#endif -#endif /* GL_AMD_stencil_operation_extended */ - -#ifndef GL_AMD_texture_gather_bias_lod -#define GL_AMD_texture_gather_bias_lod 1 -#endif /* GL_AMD_texture_gather_bias_lod */ - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 -#endif /* GL_AMD_texture_texture4 */ - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 -#endif /* GL_AMD_transform_feedback3_lines_triangles */ - -#ifndef GL_AMD_transform_feedback4 -#define GL_AMD_transform_feedback4 1 -#define GL_STREAM_RASTERIZATION_AMD 0x91A0 -#endif /* GL_AMD_transform_feedback4 */ - -#ifndef GL_AMD_vertex_shader_layer -#define GL_AMD_vertex_shader_layer 1 -#endif /* GL_AMD_vertex_shader_layer */ - -#ifndef GL_AMD_vertex_shader_tessellator -#define GL_AMD_vertex_shader_tessellator 1 -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 -typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); -GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); -#endif -#endif /* GL_AMD_vertex_shader_tessellator */ - -#ifndef GL_AMD_vertex_shader_viewport_index -#define GL_AMD_vertex_shader_viewport_index 1 -#endif /* GL_AMD_vertex_shader_viewport_index */ - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 -#endif /* GL_APPLE_aux_depth_stencil */ - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif /* GL_APPLE_client_storage */ - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif -#endif /* GL_APPLE_element_array */ - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); -#endif -#endif /* GL_APPLE_fence */ - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 -#define GL_HALF_APPLE 0x140B -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881A -#define GL_RGB_FLOAT16_APPLE 0x881B -#define GL_ALPHA_FLOAT16_APPLE 0x881C -#define GL_INTENSITY_FLOAT16_APPLE 0x881D -#define GL_LUMINANCE_FLOAT16_APPLE 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F -#define GL_COLOR_FLOAT_APPLE 0x8A0F -#endif /* GL_APPLE_float_pixels */ - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); -#endif -#endif /* GL_APPLE_flush_buffer_range */ - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D -typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif -#endif /* GL_APPLE_object_purgeable */ - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#define GL_RGB_RAW_422_APPLE 0x8A51 -#endif /* GL_APPLE_rgb_422 */ - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 -#endif /* GL_APPLE_row_bytes */ - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif /* GL_APPLE_specular_vector */ - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 -#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 -#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 -#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC -#define GL_STORAGE_PRIVATE_APPLE 0x85BD -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); -GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_APPLE_texture_range */ - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif /* GL_APPLE_transform_hint */ - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); -#endif -#endif /* GL_APPLE_vertex_array_object */ - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); -#endif -#endif /* GL_APPLE_vertex_array_range */ - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif -#endif /* GL_APPLE_vertex_program_evaluators */ - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#define GL_YCBCR_422_APPLE 0x85B9 -#endif /* GL_APPLE_ycbcr_422 */ - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_ATI_draw_buffers */ - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif -#endif /* GL_ATI_element_array */ - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); -#endif -#endif /* GL_ATI_envmap_bumpmap */ - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); -GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); -#endif -#endif /* GL_ATI_fragment_shader */ - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); -#endif -#endif /* GL_ATI_map_object_buffer */ - -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD -#endif /* GL_ATI_meminfo */ - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -#define GL_RGBA_FLOAT_MODE_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif /* GL_ATI_pixel_format_float */ - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); -#endif -#endif /* GL_ATI_pn_triangles */ - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif -#endif /* GL_ATI_separate_stencil */ - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif /* GL_ATI_text_fragment_shader */ - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif /* GL_ATI_texture_env_combine3 */ - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif /* GL_ATI_texture_float */ - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif /* GL_ATI_texture_mirror_once */ - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); -#endif -#endif /* GL_ATI_vertex_array_object */ - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); -#endif -#endif /* GL_ATI_vertex_attrib_array_object */ - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); -GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); -GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); -#endif -#endif /* GL_ATI_vertex_streams */ - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif /* GL_EXT_422_pixels */ - -#ifndef GL_EXT_EGL_image_storage -#define GL_EXT_EGL_image_storage 1 -typedef void *GLeglImageOES; -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); -GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); -#endif -#endif /* GL_EXT_EGL_image_storage */ - -#ifndef GL_EXT_EGL_sync -#define GL_EXT_EGL_sync 1 -#endif /* GL_EXT_EGL_sync */ - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#define GL_ABGR_EXT 0x8000 -#endif /* GL_EXT_abgr */ - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif /* GL_EXT_bgra */ - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); -#endif -#endif /* GL_EXT_bindable_uniform */ - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -#endif -#endif /* GL_EXT_blend_color */ - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); -#endif -#endif /* GL_EXT_blend_equation_separate */ - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif -#endif /* GL_EXT_blend_func_separate */ - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif /* GL_EXT_blend_logic_op */ - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_BLEND_EQUATION_EXT 0x8009 -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); -#endif -#endif /* GL_EXT_blend_minmax */ - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif /* GL_EXT_blend_subtract */ - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif /* GL_EXT_clip_volume_hint */ - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif /* GL_EXT_cmyka */ - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif -#endif /* GL_EXT_color_subtable */ - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif -#endif /* GL_EXT_compiled_vertex_array */ - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -#endif -#endif /* GL_EXT_convolution */ - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); -GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); -GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); -GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_coordinate_frame */ - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#endif /* GL_EXT_copy_texture */ - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_cull_vertex */ - -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -#endif /* GL_EXT_debug_label */ - -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GLAPI void APIENTRY glPopGroupMarkerEXT (void); -#endif -#endif /* GL_EXT_debug_marker */ - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); -#endif -#endif /* GL_EXT_depth_bounds_test */ - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F -typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); -typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); -GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); -GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); -GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); -GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); -GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); -GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); -GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); -GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); -GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); -GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); -GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); -GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); -GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); -GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); -GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); -GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); -GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); -GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); -GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); -GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); -#endif -#endif /* GL_EXT_direct_state_access */ - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -#endif -#endif /* GL_EXT_draw_buffers2 */ - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_EXT_draw_instanced */ - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -#endif -#endif /* GL_EXT_draw_range_elements */ - -#ifndef GL_EXT_external_buffer -#define GL_EXT_external_buffer 1 -typedef void *GLeglClientBufferEXT; -typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -GLAPI void APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -#endif -#endif /* GL_EXT_external_buffer */ - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_fog_coord */ - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -#endif /* GL_EXT_framebuffer_blit */ - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_EXT_framebuffer_multisample */ - -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_EXT_framebuffer_multisample_blit_scaled 1 -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); -#endif -#endif /* GL_EXT_framebuffer_object */ - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif /* GL_EXT_framebuffer_sRGB */ - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -#endif -#endif /* GL_EXT_geometry_shader4 */ - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif -#endif /* GL_EXT_gpu_program_parameters */ - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); -#endif -#endif /* GL_EXT_gpu_shader4 */ - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogramEXT (GLenum target); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); -#endif -#endif /* GL_EXT_histogram */ - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif /* GL_EXT_index_array_formats */ - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); -#endif -#endif /* GL_EXT_index_func */ - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); -#endif -#endif /* GL_EXT_index_material */ - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif /* GL_EXT_index_texture */ - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); -GLAPI void APIENTRY glTextureLightEXT (GLenum pname); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); -#endif -#endif /* GL_EXT_light_texture */ - -#ifndef GL_EXT_memory_object -#define GL_EXT_memory_object 1 -#define GL_TEXTURE_TILING_EXT 0x9580 -#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 -#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B -#define GL_NUM_TILING_TYPES_EXT 0x9582 -#define GL_TILING_TYPES_EXT 0x9583 -#define GL_OPTIMAL_TILING_EXT 0x9584 -#define GL_LINEAR_TILING_EXT 0x9585 -#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 -#define GL_DEVICE_UUID_EXT 0x9597 -#define GL_DRIVER_UUID_EXT 0x9598 -#define GL_UUID_SIZE_EXT 16 -typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); -typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); -typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); -typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); -typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); -typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); -GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); -GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); -GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); -GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); -GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); -GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -#endif -#endif /* GL_EXT_memory_object */ - -#ifndef GL_EXT_memory_object_fd -#define GL_EXT_memory_object_fd 1 -#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 -typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); -#endif -#endif /* GL_EXT_memory_object_fd */ - -#ifndef GL_EXT_memory_object_win32 -#define GL_EXT_memory_object_win32 1 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 -#define GL_DEVICE_LUID_EXT 0x9599 -#define GL_DEVICE_NODE_MASK_EXT 0x959A -#define GL_LUID_SIZE_EXT 8 -#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 -#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A -#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B -#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C -typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); -typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); -GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); -#endif -#endif /* GL_EXT_memory_object_win32 */ - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif /* GL_EXT_misc_attribute */ - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#endif -#endif /* GL_EXT_multi_draw_arrays */ - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); -#endif -#endif /* GL_EXT_multisample */ - -#ifndef GL_EXT_multiview_tessellation_geometry_shader -#define GL_EXT_multiview_tessellation_geometry_shader 1 -#endif /* GL_EXT_multiview_tessellation_geometry_shader */ - -#ifndef GL_EXT_multiview_texture_multisample -#define GL_EXT_multiview_texture_multisample 1 -#endif /* GL_EXT_multiview_texture_multisample */ - -#ifndef GL_EXT_multiview_timer_query -#define GL_EXT_multiview_timer_query 1 -#endif /* GL_EXT_multiview_timer_query */ - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif /* GL_EXT_packed_depth_stencil */ - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#endif /* GL_EXT_packed_float */ - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif /* GL_EXT_packed_pixels */ - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_paletted_texture */ - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif /* GL_EXT_pixel_buffer_object */ - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_pixel_transform */ - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif /* GL_EXT_pixel_transform_color_table */ - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_EXT_point_parameters */ - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); -#endif -#endif /* GL_EXT_polygon_offset */ - -#ifndef GL_EXT_polygon_offset_clamp -#define GL_EXT_polygon_offset_clamp 1 -#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B -typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); -#endif -#endif /* GL_EXT_polygon_offset_clamp */ - -#ifndef GL_EXT_post_depth_coverage -#define GL_EXT_post_depth_coverage 1 -#endif /* GL_EXT_post_depth_coverage */ - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); -#endif -#endif /* GL_EXT_provoking_vertex */ - -#ifndef GL_EXT_raster_multisample -#define GL_EXT_raster_multisample 1 -#define GL_RASTER_MULTISAMPLE_EXT 0x9327 -#define GL_RASTER_SAMPLES_EXT 0x9328 -#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 -#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A -#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B -#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C -typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); -#endif -#endif /* GL_EXT_raster_multisample */ - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif /* GL_EXT_rescale_normal */ - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_secondary_color */ - -#ifndef GL_EXT_semaphore -#define GL_EXT_semaphore 1 -#define GL_LAYOUT_GENERAL_EXT 0x958D -#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E -#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F -#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 -#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 -#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 -#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 -#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 -#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 -typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); -typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); -typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); -typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); -typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); -typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); -typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); -GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); -GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore); -GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); -GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); -GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); -GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); -#endif -#endif /* GL_EXT_semaphore */ - -#ifndef GL_EXT_semaphore_fd -#define GL_EXT_semaphore_fd 1 -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); -#endif -#endif /* GL_EXT_semaphore_fd */ - -#ifndef GL_EXT_semaphore_win32 -#define GL_EXT_semaphore_win32 1 -#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 -#define GL_D3D12_FENCE_VALUE_EXT 0x9595 -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); -GLAPI void APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); -#endif -#endif /* GL_EXT_semaphore_win32 */ - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D -typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); -typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); -GLAPI void APIENTRY glActiveProgramEXT (GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); -#endif -#endif /* GL_EXT_separate_shader_objects */ - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif /* GL_EXT_separate_specular_color */ - -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif /* GL_EXT_shader_framebuffer_fetch */ - -#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent -#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 -typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void); -#endif -#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ - -#ifndef GL_EXT_shader_image_load_formatted -#define GL_EXT_shader_image_load_formatted 1 -#endif /* GL_EXT_shader_image_load_formatted */ - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); -#endif -#endif /* GL_EXT_shader_image_load_store */ - -#ifndef GL_EXT_shader_integer_mix -#define GL_EXT_shader_integer_mix 1 -#endif /* GL_EXT_shader_integer_mix */ - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif /* GL_EXT_shadow_funcs */ - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif /* GL_EXT_shared_texture_palette */ - -#ifndef GL_EXT_sparse_texture2 -#define GL_EXT_sparse_texture2 1 -#endif /* GL_EXT_sparse_texture2 */ - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif -#endif /* GL_EXT_stencil_clear_tag */ - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); -#endif -#endif /* GL_EXT_stencil_two_side */ - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif /* GL_EXT_stencil_wrap */ - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_EXT_subtexture */ - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif /* GL_EXT_texture */ - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_EXT_texture3D */ - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif -#endif /* GL_EXT_texture_array */ - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); -#endif -#endif /* GL_EXT_texture_buffer_object */ - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 -#endif /* GL_EXT_texture_compression_latc */ - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#endif /* GL_EXT_texture_compression_rgtc */ - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif /* GL_EXT_texture_compression_s3tc */ - -#ifndef GL_EXT_texture_cube_map -#define GL_EXT_texture_cube_map 1 -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif /* GL_EXT_texture_cube_map */ - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif /* GL_EXT_texture_env_add */ - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif /* GL_EXT_texture_env_combine */ - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif /* GL_EXT_texture_env_dot3 */ - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif /* GL_EXT_texture_filter_anisotropic */ - -#ifndef GL_EXT_texture_filter_minmax -#define GL_EXT_texture_filter_minmax 1 -#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 -#define GL_WEIGHTED_AVERAGE_EXT 0x9367 -#endif /* GL_EXT_texture_filter_minmax */ - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif -#endif /* GL_EXT_texture_integer */ - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif /* GL_EXT_texture_lod_bias */ - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif /* GL_EXT_texture_mirror_clamp */ - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif -#endif /* GL_EXT_texture_object */ - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); -#endif -#endif /* GL_EXT_texture_perturb_normal */ - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif /* GL_EXT_texture_sRGB */ - -#ifndef GL_EXT_texture_sRGB_R8 -#define GL_EXT_texture_sRGB_R8 1 -#define GL_SR8_EXT 0x8FBD -#endif /* GL_EXT_texture_sRGB_R8 */ - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A -#endif /* GL_EXT_texture_sRGB_decode */ - -#ifndef GL_EXT_texture_shadow_lod -#define GL_EXT_texture_shadow_lod 1 -#endif /* GL_EXT_texture_shadow_lod */ - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif /* GL_EXT_texture_shared_exponent */ - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#endif /* GL_EXT_texture_snorm */ - -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 -#endif /* GL_EXT_texture_swizzle */ - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#define GL_TIME_ELAPSED_EXT 0x88BF -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); -#endif -#endif /* GL_EXT_timer_query */ - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackEXT (void); -GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif -#endif /* GL_EXT_transform_feedback */ - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint i); -GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); -GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); -GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -#endif -#endif /* GL_EXT_vertex_array */ - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 -#endif /* GL_EXT_vertex_array_bgra */ - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); -#endif -#endif /* GL_EXT_vertex_attrib_64bit */ - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); -GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); -GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); -GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); -GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); -GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); -GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); -GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); -GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); -GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); -GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); -GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -#endif -#endif /* GL_EXT_vertex_shader */ - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT 0x1700 -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_vertex_weighting */ - -#ifndef GL_EXT_win32_keyed_mutex -#define GL_EXT_win32_keyed_mutex 1 -typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); -typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); -GLAPI GLboolean APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); -#endif -#endif /* GL_EXT_win32_keyed_mutex */ - -#ifndef GL_EXT_window_rectangles -#define GL_EXT_window_rectangles 1 -#define GL_INCLUSIVE_EXT 0x8F10 -#define GL_EXCLUSIVE_EXT 0x8F11 -#define GL_WINDOW_RECTANGLE_EXT 0x8F12 -#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 -#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 -#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 -typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); -#endif -#endif /* GL_EXT_window_rectangles */ - -#ifndef GL_EXT_x11_sync_object -#define GL_EXT_x11_sync_object 1 -#define GL_SYNC_X11_FENCE_EXT 0x90E1 -typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#endif -#endif /* GL_EXT_x11_sync_object */ - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); -#endif -#endif /* GL_GREMEDY_frame_terminator */ - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); -#endif -#endif /* GL_GREMEDY_string_marker */ - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif /* GL_HP_convolution_border_modes */ - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_HP_image_transform */ - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif /* GL_HP_occlusion_test */ - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif /* GL_HP_texture_lighting */ - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#define GL_CULL_VERTEX_IBM 103050 -#endif /* GL_IBM_cull_vertex */ - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); -#endif -#endif /* GL_IBM_multimode_draw_arrays */ - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif /* GL_IBM_rasterpos_clip */ - -#ifndef GL_IBM_static_data -#define GL_IBM_static_data 1 -#define GL_ALL_STATIC_DATA_IBM 103060 -#define GL_STATIC_VERTEX_ARRAY_IBM 103061 -typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); -#endif -#endif /* GL_IBM_static_data */ - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_IBM_texture_mirrored_repeat 1 -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif /* GL_IBM_texture_mirrored_repeat */ - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -#endif -#endif /* GL_IBM_vertex_array_lists */ - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif -#endif /* GL_INGR_blend_func_separate */ - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif /* GL_INGR_color_clamp */ - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#define GL_INTERLACE_READ_INGR 0x8568 -#endif /* GL_INGR_interlace_read */ - -#ifndef GL_INTEL_blackhole_render -#define GL_INTEL_blackhole_render 1 -#define GL_BLACKHOLE_RENDER_INTEL 0x83FC -#endif /* GL_INTEL_blackhole_render */ - -#ifndef GL_INTEL_conservative_rasterization -#define GL_INTEL_conservative_rasterization 1 -#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE -#endif /* GL_INTEL_conservative_rasterization */ - -#ifndef GL_INTEL_fragment_shader_ordering -#define GL_INTEL_fragment_shader_ordering 1 -#endif /* GL_INTEL_fragment_shader_ordering */ - -#ifndef GL_INTEL_framebuffer_CMAA -#define GL_INTEL_framebuffer_CMAA 1 -typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); -#endif -#endif /* GL_INTEL_framebuffer_CMAA */ - -#ifndef GL_INTEL_map_texture -#define GL_INTEL_map_texture 1 -#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF -#define GL_LAYOUT_DEFAULT_INTEL 0 -#define GL_LAYOUT_LINEAR_INTEL 1 -#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 -typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); -typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); -GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); -GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); -#endif -#endif /* GL_INTEL_map_texture */ - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); -GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); -#endif -#endif /* GL_INTEL_parallel_arrays */ - -#ifndef GL_INTEL_performance_query -#define GL_INTEL_performance_query 1 -#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 -#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 -#define GL_PERFQUERY_WAIT_INTEL 0x83FB -#define GL_PERFQUERY_FLUSH_INTEL 0x83FA -#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 -#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 -#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 -#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 -#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 -#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 -#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 -#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 -#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 -#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA -#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB -#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC -#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD -#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE -#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF -#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 -typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); -typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); -typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); -typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); -typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); -typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); -GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); -GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); -GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); -GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); -GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#endif -#endif /* GL_INTEL_performance_query */ - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E -#endif /* GL_MESAX_texture_stack */ - -#ifndef GL_MESA_framebuffer_flip_y -#define GL_MESA_framebuffer_flip_y 1 -#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB -typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); -#endif -#endif /* GL_MESA_framebuffer_flip_y */ - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#define GL_PACK_INVERT_MESA 0x8758 -#endif /* GL_MESA_pack_invert */ - -#ifndef GL_MESA_program_binary_formats -#define GL_MESA_program_binary_formats 1 -#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F -#endif /* GL_MESA_program_binary_formats */ - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif -#endif /* GL_MESA_resize_buffers */ - -#ifndef GL_MESA_shader_integer_functions -#define GL_MESA_shader_integer_functions 1 -#endif /* GL_MESA_shader_integer_functions */ - -#ifndef GL_MESA_tile_raster_order -#define GL_MESA_tile_raster_order 1 -#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 -#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 -#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA -#endif /* GL_MESA_tile_raster_order */ - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); -#endif -#endif /* GL_MESA_window_pos */ - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif /* GL_MESA_ycbcr_texture */ - -#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers -#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 -#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ - -#ifndef GL_NVX_conditional_render -#define GL_NVX_conditional_render 1 -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); -GLAPI void APIENTRY glEndConditionalRenderNVX (void); -#endif -#endif /* GL_NVX_conditional_render */ - -#ifndef GL_NVX_gpu_memory_info -#define GL_NVX_gpu_memory_info 1 -#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 -#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 -#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 -#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A -#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B -#endif /* GL_NVX_gpu_memory_info */ - -#ifndef GL_NVX_gpu_multicast2 -#define GL_NVX_gpu_multicast2 1 -#define GL_UPLOAD_GPU_MASK_NVX 0x954A -typedef void (APIENTRYP PFNGLUPLOADGPUMASKNVXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC) (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); -typedef void (APIENTRYP PFNGLMULTICASTSCISSORARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLint *v); -typedef GLuint (APIENTRYP PFNGLASYNCCOPYBUFFERSUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -typedef GLuint (APIENTRYP PFNGLASYNCCOPYIMAGESUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUploadGpuMaskNVX (GLbitfield mask); -GLAPI void APIENTRY glMulticastViewportArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glMulticastViewportPositionWScaleNVX (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); -GLAPI void APIENTRY glMulticastScissorArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLint *v); -GLAPI GLuint APIENTRY glAsyncCopyBufferSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -GLAPI GLuint APIENTRY glAsyncCopyImageSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -#endif -#endif /* GL_NVX_gpu_multicast2 */ - -#ifndef GL_NVX_linked_gpu_multicast -#define GL_NVX_linked_gpu_multicast 1 -#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 -#define GL_MAX_LGPU_GPUS_NVX 0x92BA -typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLGPUNamedBufferSubDataNVX (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glLGPUCopyImageSubDataNVX (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glLGPUInterlockNVX (void); -#endif -#endif /* GL_NVX_linked_gpu_multicast */ - -#ifndef GL_NVX_progress_fence -#define GL_NVX_progress_fence 1 -typedef GLuint (APIENTRYP PFNGLCREATEPROGRESSFENCENVXPROC) (void); -typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREUI64NVXPROC) (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -typedef void (APIENTRYP PFNGLWAITSEMAPHOREUI64NVXPROC) (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -typedef void (APIENTRYP PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC) (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glCreateProgressFenceNVX (void); -GLAPI void APIENTRY glSignalSemaphoreui64NVX (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -GLAPI void APIENTRY glWaitSemaphoreui64NVX (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -GLAPI void APIENTRY glClientWaitSemaphoreui64NVX (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -#endif -#endif /* GL_NVX_progress_fence */ - -#ifndef GL_NV_alpha_to_coverage_dither_control -#define GL_NV_alpha_to_coverage_dither_control 1 -#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D -#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E -#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F -#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF -typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAlphaToCoverageDitherControlNV (GLenum mode); -#endif -#endif /* GL_NV_alpha_to_coverage_dither_control */ - -#ifndef GL_NV_bindless_multi_draw_indirect -#define GL_NV_bindless_multi_draw_indirect 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -#endif -#endif /* GL_NV_bindless_multi_draw_indirect */ - -#ifndef GL_NV_bindless_multi_draw_indirect_count -#define GL_NV_bindless_multi_draw_indirect_count 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -#endif -#endif /* GL_NV_bindless_multi_draw_indirect_count */ - -#ifndef GL_NV_bindless_texture -#define GL_NV_bindless_texture 1 -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); -GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); -GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); -GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); -GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); -GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); -GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); -GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); -GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); -GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); -#endif -#endif /* GL_NV_bindless_texture */ - -#ifndef GL_NV_blend_equation_advanced -#define GL_NV_blend_equation_advanced 1 -#define GL_BLEND_OVERLAP_NV 0x9281 -#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 -#define GL_BLUE_NV 0x1905 -#define GL_COLORBURN_NV 0x929A -#define GL_COLORDODGE_NV 0x9299 -#define GL_CONJOINT_NV 0x9284 -#define GL_CONTRAST_NV 0x92A1 -#define GL_DARKEN_NV 0x9297 -#define GL_DIFFERENCE_NV 0x929E -#define GL_DISJOINT_NV 0x9283 -#define GL_DST_ATOP_NV 0x928F -#define GL_DST_IN_NV 0x928B -#define GL_DST_NV 0x9287 -#define GL_DST_OUT_NV 0x928D -#define GL_DST_OVER_NV 0x9289 -#define GL_EXCLUSION_NV 0x92A0 -#define GL_GREEN_NV 0x1904 -#define GL_HARDLIGHT_NV 0x929B -#define GL_HARDMIX_NV 0x92A9 -#define GL_HSL_COLOR_NV 0x92AF -#define GL_HSL_HUE_NV 0x92AD -#define GL_HSL_LUMINOSITY_NV 0x92B0 -#define GL_HSL_SATURATION_NV 0x92AE -#define GL_INVERT_OVG_NV 0x92B4 -#define GL_INVERT_RGB_NV 0x92A3 -#define GL_LIGHTEN_NV 0x9298 -#define GL_LINEARBURN_NV 0x92A5 -#define GL_LINEARDODGE_NV 0x92A4 -#define GL_LINEARLIGHT_NV 0x92A7 -#define GL_MINUS_CLAMPED_NV 0x92B3 -#define GL_MINUS_NV 0x929F -#define GL_MULTIPLY_NV 0x9294 -#define GL_OVERLAY_NV 0x9296 -#define GL_PINLIGHT_NV 0x92A8 -#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 -#define GL_PLUS_CLAMPED_NV 0x92B1 -#define GL_PLUS_DARKER_NV 0x9292 -#define GL_PLUS_NV 0x9291 -#define GL_RED_NV 0x1903 -#define GL_SCREEN_NV 0x9295 -#define GL_SOFTLIGHT_NV 0x929C -#define GL_SRC_ATOP_NV 0x928E -#define GL_SRC_IN_NV 0x928A -#define GL_SRC_NV 0x9286 -#define GL_SRC_OUT_NV 0x928C -#define GL_SRC_OVER_NV 0x9288 -#define GL_UNCORRELATED_NV 0x9282 -#define GL_VIVIDLIGHT_NV 0x92A6 -#define GL_XOR_NV 0x1506 -typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); -GLAPI void APIENTRY glBlendBarrierNV (void); -#endif -#endif /* GL_NV_blend_equation_advanced */ - -#ifndef GL_NV_blend_equation_advanced_coherent -#define GL_NV_blend_equation_advanced_coherent 1 -#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 -#endif /* GL_NV_blend_equation_advanced_coherent */ - -#ifndef GL_NV_blend_minmax_factor -#define GL_NV_blend_minmax_factor 1 -#endif /* GL_NV_blend_minmax_factor */ - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif /* GL_NV_blend_square */ - -#ifndef GL_NV_clip_space_w_scaling -#define GL_NV_clip_space_w_scaling 1 -#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C -#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D -#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E -typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); -#endif -#endif /* GL_NV_clip_space_w_scaling */ - -#ifndef GL_NV_command_list -#define GL_NV_command_list 1 -#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 -#define GL_NOP_COMMAND_NV 0x0001 -#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 -#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 -#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 -#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 -#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 -#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 -#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 -#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 -#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A -#define GL_BLEND_COLOR_COMMAND_NV 0x000B -#define GL_STENCIL_REF_COMMAND_NV 0x000C -#define GL_LINE_WIDTH_COMMAND_NV 0x000D -#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E -#define GL_ALPHA_REF_COMMAND_NV 0x000F -#define GL_VIEWPORT_COMMAND_NV 0x0010 -#define GL_SCISSOR_COMMAND_NV 0x0011 -#define GL_FRONT_FACE_COMMAND_NV 0x0012 -typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states); -typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states); -typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state); -typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode); -typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size); -typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists); -typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists); -typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list); -typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments); -typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list); -typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states); -GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states); -GLAPI GLboolean APIENTRY glIsStateNV (GLuint state); -GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode); -GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size); -GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype); -GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); -GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); -GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists); -GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists); -GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list); -GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments); -GLAPI void APIENTRY glCompileCommandListNV (GLuint list); -GLAPI void APIENTRY glCallCommandListNV (GLuint list); -#endif -#endif /* GL_NV_command_list */ - -#ifndef GL_NV_compute_program5 -#define GL_NV_compute_program5 1 -#define GL_COMPUTE_PROGRAM_NV 0x90FB -#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC -#endif /* GL_NV_compute_program5 */ - -#ifndef GL_NV_compute_shader_derivatives -#define GL_NV_compute_shader_derivatives 1 -#endif /* GL_NV_compute_shader_derivatives */ - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRenderNV (void); -#endif -#endif /* GL_NV_conditional_render */ - -#ifndef GL_NV_conservative_raster -#define GL_NV_conservative_raster 1 -#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 -#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 -#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 -#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 -typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); -#endif -#endif /* GL_NV_conservative_raster */ - -#ifndef GL_NV_conservative_raster_dilate -#define GL_NV_conservative_raster_dilate 1 -#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 -#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A -#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B -typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value); -#endif -#endif /* GL_NV_conservative_raster_dilate */ - -#ifndef GL_NV_conservative_raster_pre_snap -#define GL_NV_conservative_raster_pre_snap 1 -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 -#endif /* GL_NV_conservative_raster_pre_snap */ - -#ifndef GL_NV_conservative_raster_pre_snap_triangles -#define GL_NV_conservative_raster_pre_snap_triangles 1 -#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D -#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F -typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); -#endif -#endif /* GL_NV_conservative_raster_pre_snap_triangles */ - -#ifndef GL_NV_conservative_raster_underestimation -#define GL_NV_conservative_raster_underestimation 1 -#endif /* GL_NV_conservative_raster_underestimation */ - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif /* GL_NV_copy_depth_to_color */ - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#endif -#endif /* GL_NV_copy_image */ - -#ifndef GL_NV_deep_texture3D -#define GL_NV_deep_texture3D 1 -#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 -#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 -#endif /* GL_NV_deep_texture3D */ - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); -#endif -#endif /* GL_NV_depth_buffer_float */ - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#define GL_DEPTH_CLAMP_NV 0x864F -#endif /* GL_NV_depth_clamp */ - -#ifndef GL_NV_draw_texture -#define GL_NV_draw_texture 1 -typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -#endif -#endif /* GL_NV_draw_texture */ - -#ifndef GL_NV_draw_vulkan_image -#define GL_NV_draw_vulkan_image 1 -typedef void (APIENTRY *GLVULKANPROCNV)(void); -typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); -typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); -typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); -typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name); -GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); -GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); -GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence); -#endif -#endif /* GL_NV_draw_vulkan_image */ - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); -GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); -#endif -#endif /* GL_NV_evaluators */ - -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); -GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); -#endif -#endif /* GL_NV_explicit_multisample */ - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); -GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GLAPI void APIENTRY glFinishFenceNV (GLuint fence); -GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif -#endif /* GL_NV_fence */ - -#ifndef GL_NV_fill_rectangle -#define GL_NV_fill_rectangle 1 -#define GL_FILL_RECTANGLE_NV 0x933C -#endif /* GL_NV_fill_rectangle */ - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif /* GL_NV_float_buffer */ - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -#endif /* GL_NV_fog_distance */ - -#ifndef GL_NV_fragment_coverage_to_color -#define GL_NV_fragment_coverage_to_color 1 -#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD -#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE -typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color); -#endif -#endif /* GL_NV_fragment_coverage_to_color */ - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif -#endif /* GL_NV_fragment_program */ - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif /* GL_NV_fragment_program2 */ - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif /* GL_NV_fragment_program4 */ - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif /* GL_NV_fragment_program_option */ - -#ifndef GL_NV_fragment_shader_barycentric -#define GL_NV_fragment_shader_barycentric 1 -#endif /* GL_NV_fragment_shader_barycentric */ - -#ifndef GL_NV_fragment_shader_interlock -#define GL_NV_fragment_shader_interlock 1 -#endif /* GL_NV_fragment_shader_interlock */ - -#ifndef GL_NV_framebuffer_mixed_samples -#define GL_NV_framebuffer_mixed_samples 1 -#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#define GL_DEPTH_SAMPLES_NV 0x932D -#define GL_STENCIL_SAMPLES_NV 0x932E -#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F -#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 -#define GL_COVERAGE_MODULATION_NV 0x9332 -#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 -typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); -typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v); -typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); -GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v); -GLAPI void APIENTRY glCoverageModulationNV (GLenum components); -#endif -#endif /* GL_NV_framebuffer_mixed_samples */ - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_NV_framebuffer_multisample_coverage */ - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif -#endif /* GL_NV_geometry_program4 */ - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -#endif /* GL_NV_geometry_shader4 */ - -#ifndef GL_NV_geometry_shader_passthrough -#define GL_NV_geometry_shader_passthrough 1 -#endif /* GL_NV_geometry_shader_passthrough */ - -#ifndef GL_NV_gpu_multicast -#define GL_NV_gpu_multicast 1 -#define GL_PER_GPU_STORAGE_BIT_NV 0x0800 -#define GL_MULTICAST_GPUS_NV 0x92BA -#define GL_RENDER_GPU_MASK_NV 0x9558 -#define GL_PER_GPU_STORAGE_NV 0x9548 -#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 -typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC) (void); -typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderGpuMaskNV (GLbitfield mask); -GLAPI void APIENTRY glMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI void APIENTRY glMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glMulticastBarrierNV (void); -GLAPI void APIENTRY glMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask); -GLAPI void APIENTRY glMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); -#endif -#endif /* GL_NV_gpu_multicast */ - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); -#endif -#endif /* GL_NV_gpu_program4 */ - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F -#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 -#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 -typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); -#endif -#endif /* GL_NV_gpu_program5 */ - -#ifndef GL_NV_gpu_program5_mem_extended -#define GL_NV_gpu_program5_mem_extended 1 -#endif /* GL_NV_gpu_program5_mem_extended */ - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -#endif /* GL_NV_gpu_shader5 */ - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -typedef unsigned short GLhalfNV; -#define GL_HALF_FLOAT_NV 0x140B -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -#endif -#endif /* GL_NV_half_float */ - -#ifndef GL_NV_internalformat_sample_query -#define GL_NV_internalformat_sample_query 1 -#define GL_MULTISAMPLES_NV 0x9371 -#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 -#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 -#define GL_CONFORMANT_NV 0x9374 -typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); -#endif -#endif /* GL_NV_internalformat_sample_query */ - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif /* GL_NV_light_max_exponent */ - -#ifndef GL_NV_memory_attachment -#define GL_NV_memory_attachment 1 -#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 -#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 -#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 -#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 -#define GL_MEMORY_ATTACHABLE_NV 0x95A8 -#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 -#define GL_DETACHED_TEXTURES_NV 0x95AA -#define GL_DETACHED_BUFFERS_NV 0x95AB -#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC -#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD -typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); -typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); -typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); -GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); -GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); -#endif -#endif /* GL_NV_memory_attachment */ - -#ifndef GL_NV_mesh_shader -#define GL_NV_mesh_shader 1 -#define GL_MESH_SHADER_NV 0x9559 -#define GL_TASK_SHADER_NV 0x955A -#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 -#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 -#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 -#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 -#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 -#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 -#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 -#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 -#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 -#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 -#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A -#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B -#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C -#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D -#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E -#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F -#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 -#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 -#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 -#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 -#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 -#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 -#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A -#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D -#define GL_MAX_MESH_VIEWS_NV 0x9557 -#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF -#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 -#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B -#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C -#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E -#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F -#define GL_MESH_VERTICES_OUT_NV 0x9579 -#define GL_MESH_PRIMITIVES_OUT_NV 0x957A -#define GL_MESH_OUTPUT_TYPE_NV 0x957B -#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D -#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 -#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 -#define GL_MESH_SHADER_BIT_NV 0x00000040 -#define GL_TASK_SHADER_BIT_NV 0x00000080 -#define GL_MESH_SUBROUTINE_NV 0x957C -#define GL_TASK_SUBROUTINE_NV 0x957D -#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E -#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F -typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); -typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); -typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); -GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); -GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#endif -#endif /* GL_NV_mesh_shader */ - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 -#endif /* GL_NV_multisample_coverage */ - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif /* GL_NV_multisample_filter_hint */ - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); -#endif -#endif /* GL_NV_occlusion_query */ - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif /* GL_NV_packed_depth_stencil */ - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); -#endif -#endif /* GL_NV_parameter_buffer_object */ - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 -#endif /* GL_NV_parameter_buffer_object2 */ - -#ifndef GL_NV_path_rendering -#define GL_NV_path_rendering 1 -#define GL_PATH_FORMAT_SVG_NV 0x9070 -#define GL_PATH_FORMAT_PS_NV 0x9071 -#define GL_STANDARD_FONT_NAME_NV 0x9072 -#define GL_SYSTEM_FONT_NAME_NV 0x9073 -#define GL_FILE_NAME_NV 0x9074 -#define GL_PATH_STROKE_WIDTH_NV 0x9075 -#define GL_PATH_END_CAPS_NV 0x9076 -#define GL_PATH_INITIAL_END_CAP_NV 0x9077 -#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 -#define GL_PATH_JOIN_STYLE_NV 0x9079 -#define GL_PATH_MITER_LIMIT_NV 0x907A -#define GL_PATH_DASH_CAPS_NV 0x907B -#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C -#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D -#define GL_PATH_DASH_OFFSET_NV 0x907E -#define GL_PATH_CLIENT_LENGTH_NV 0x907F -#define GL_PATH_FILL_MODE_NV 0x9080 -#define GL_PATH_FILL_MASK_NV 0x9081 -#define GL_PATH_FILL_COVER_MODE_NV 0x9082 -#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 -#define GL_PATH_STROKE_MASK_NV 0x9084 -#define GL_COUNT_UP_NV 0x9088 -#define GL_COUNT_DOWN_NV 0x9089 -#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A -#define GL_CONVEX_HULL_NV 0x908B -#define GL_BOUNDING_BOX_NV 0x908D -#define GL_TRANSLATE_X_NV 0x908E -#define GL_TRANSLATE_Y_NV 0x908F -#define GL_TRANSLATE_2D_NV 0x9090 -#define GL_TRANSLATE_3D_NV 0x9091 -#define GL_AFFINE_2D_NV 0x9092 -#define GL_AFFINE_3D_NV 0x9094 -#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 -#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 -#define GL_UTF8_NV 0x909A -#define GL_UTF16_NV 0x909B -#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C -#define GL_PATH_COMMAND_COUNT_NV 0x909D -#define GL_PATH_COORD_COUNT_NV 0x909E -#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F -#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 -#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 -#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 -#define GL_SQUARE_NV 0x90A3 -#define GL_ROUND_NV 0x90A4 -#define GL_TRIANGULAR_NV 0x90A5 -#define GL_BEVEL_NV 0x90A6 -#define GL_MITER_REVERT_NV 0x90A7 -#define GL_MITER_TRUNCATE_NV 0x90A8 -#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 -#define GL_USE_MISSING_GLYPH_NV 0x90AA -#define GL_PATH_ERROR_POSITION_NV 0x90AB -#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD -#define GL_ADJACENT_PAIRS_NV 0x90AE -#define GL_FIRST_TO_REST_NV 0x90AF -#define GL_PATH_GEN_MODE_NV 0x90B0 -#define GL_PATH_GEN_COEFF_NV 0x90B1 -#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 -#define GL_PATH_STENCIL_FUNC_NV 0x90B7 -#define GL_PATH_STENCIL_REF_NV 0x90B8 -#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 -#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD -#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE -#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF -#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 -#define GL_MOVE_TO_RESETS_NV 0x90B5 -#define GL_MOVE_TO_CONTINUES_NV 0x90B6 -#define GL_CLOSE_PATH_NV 0x00 -#define GL_MOVE_TO_NV 0x02 -#define GL_RELATIVE_MOVE_TO_NV 0x03 -#define GL_LINE_TO_NV 0x04 -#define GL_RELATIVE_LINE_TO_NV 0x05 -#define GL_HORIZONTAL_LINE_TO_NV 0x06 -#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 -#define GL_VERTICAL_LINE_TO_NV 0x08 -#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 -#define GL_QUADRATIC_CURVE_TO_NV 0x0A -#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B -#define GL_CUBIC_CURVE_TO_NV 0x0C -#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D -#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E -#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F -#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 -#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 -#define GL_SMALL_CCW_ARC_TO_NV 0x12 -#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 -#define GL_SMALL_CW_ARC_TO_NV 0x14 -#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 -#define GL_LARGE_CCW_ARC_TO_NV 0x16 -#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 -#define GL_LARGE_CW_ARC_TO_NV 0x18 -#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 -#define GL_RESTART_PATH_NV 0xF0 -#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 -#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 -#define GL_RECT_NV 0xF6 -#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 -#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA -#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC -#define GL_ARC_TO_NV 0xFE -#define GL_RELATIVE_ARC_TO_NV 0xFF -#define GL_BOLD_BIT_NV 0x01 -#define GL_ITALIC_BIT_NV 0x02 -#define GL_GLYPH_WIDTH_BIT_NV 0x01 -#define GL_GLYPH_HEIGHT_BIT_NV 0x02 -#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 -#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 -#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 -#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 -#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 -#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 -#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 -#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 -#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 -#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 -#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 -#define GL_FONT_ASCENDER_BIT_NV 0x00200000 -#define GL_FONT_DESCENDER_BIT_NV 0x00400000 -#define GL_FONT_HEIGHT_BIT_NV 0x00800000 -#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 -#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 -#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 -#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 -#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 -#define GL_ROUNDED_RECT_NV 0xE8 -#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 -#define GL_ROUNDED_RECT2_NV 0xEA -#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB -#define GL_ROUNDED_RECT4_NV 0xEC -#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED -#define GL_ROUNDED_RECT8_NV 0xEE -#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF -#define GL_RELATIVE_RECT_NV 0xF7 -#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 -#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 -#define GL_FONT_UNAVAILABLE_NV 0x936A -#define GL_FONT_UNINTELLIGIBLE_NV 0x936B -#define GL_CONIC_CURVE_TO_NV 0x1A -#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B -#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 -#define GL_STANDARD_FONT_FORMAT_NV 0x936C -#define GL_2_BYTES_NV 0x1407 -#define GL_3_BYTES_NV 0x1408 -#define GL_4_BYTES_NV 0x1409 -#define GL_EYE_LINEAR_NV 0x2400 -#define GL_OBJECT_LINEAR_NV 0x2401 -#define GL_CONSTANT_NV 0x8576 -#define GL_PATH_FOG_GEN_MODE_NV 0x90AC -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 -#define GL_PATH_PROJECTION_NV 0x1701 -#define GL_PATH_MODELVIEW_NV 0x1700 -#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 -#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 -#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 -#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 -#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 -#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 -#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 -#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 -#define GL_FRAGMENT_INPUT_NV 0x936D -typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); -typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); -typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); -typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); -typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); -typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); -typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); -typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); -typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); -typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); -typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); -typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); -typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); -typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); -typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); -typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); -typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); -typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); -typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); -typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); -GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); -GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); -GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); -GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); -GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); -GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); -GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); -GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); -GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); -GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); -GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); -GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); -GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); -GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); -GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); -GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); -GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); -GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); -GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); -GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); -GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); -GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); -GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); -GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); -GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); -GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); -GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); -GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); -GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); -GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); -GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); -#endif -#endif /* GL_NV_path_rendering */ - -#ifndef GL_NV_path_rendering_shared_edge -#define GL_NV_path_rendering_shared_edge 1 -#define GL_SHARED_EDGE_NV 0xC0 -#endif /* GL_NV_path_rendering_shared_edge */ - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); -#endif -#endif /* GL_NV_pixel_data_range */ - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); -#endif -#endif /* GL_NV_point_sprite */ - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B -typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif -#endif /* GL_NV_present_video */ - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); -#endif -#endif /* GL_NV_primitive_restart */ - -#ifndef GL_NV_query_resource -#define GL_NV_query_resource 1 -#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 -#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 -#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 -#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 -#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 -#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 -typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC) (GLenum queryType, GLint tagId, GLuint bufSize, GLint *buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glQueryResourceNV (GLenum queryType, GLint tagId, GLuint bufSize, GLint *buffer); -#endif -#endif /* GL_NV_query_resource */ - -#ifndef GL_NV_query_resource_tag -#define GL_NV_query_resource_tag 1 -typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC) (GLsizei n, GLint *tagIds); -typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC) (GLsizei n, const GLint *tagIds); -typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC) (GLint tagId, const GLchar *tagString); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueryResourceTagNV (GLsizei n, GLint *tagIds); -GLAPI void APIENTRY glDeleteQueryResourceTagNV (GLsizei n, const GLint *tagIds); -GLAPI void APIENTRY glQueryResourceTagNV (GLint tagId, const GLchar *tagString); -#endif -#endif /* GL_NV_query_resource_tag */ - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); -#endif -#endif /* GL_NV_register_combiners */ - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); -#endif -#endif /* GL_NV_register_combiners2 */ - -#ifndef GL_NV_representative_fragment_test -#define GL_NV_representative_fragment_test 1 -#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F -#endif /* GL_NV_representative_fragment_test */ - -#ifndef GL_NV_robustness_video_memory_purge -#define GL_NV_robustness_video_memory_purge 1 -#define GL_PURGED_CONTEXT_RESET_NV 0x92BB -#endif /* GL_NV_robustness_video_memory_purge */ - -#ifndef GL_NV_sample_locations -#define GL_NV_sample_locations 1 -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 -#define GL_SAMPLE_LOCATION_NV 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glResolveDepthValuesNV (void); -#endif -#endif /* GL_NV_sample_locations */ - -#ifndef GL_NV_sample_mask_override_coverage -#define GL_NV_sample_mask_override_coverage 1 -#endif /* GL_NV_sample_mask_override_coverage */ - -#ifndef GL_NV_scissor_exclusive -#define GL_NV_scissor_exclusive 1 -#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 -#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 -typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); -#endif -#endif /* GL_NV_scissor_exclusive */ - -#ifndef GL_NV_shader_atomic_counters -#define GL_NV_shader_atomic_counters 1 -#endif /* GL_NV_shader_atomic_counters */ - -#ifndef GL_NV_shader_atomic_float -#define GL_NV_shader_atomic_float 1 -#endif /* GL_NV_shader_atomic_float */ - -#ifndef GL_NV_shader_atomic_float64 -#define GL_NV_shader_atomic_float64 1 -#endif /* GL_NV_shader_atomic_float64 */ - -#ifndef GL_NV_shader_atomic_fp16_vector -#define GL_NV_shader_atomic_fp16_vector 1 -#endif /* GL_NV_shader_atomic_fp16_vector */ - -#ifndef GL_NV_shader_atomic_int64 -#define GL_NV_shader_atomic_int64 1 -#endif /* GL_NV_shader_atomic_int64 */ - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 -typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); -typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); -GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); -GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); -GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); -GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); -GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); -GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); -GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); -GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); -GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif -#endif /* GL_NV_shader_buffer_load */ - -#ifndef GL_NV_shader_buffer_store -#define GL_NV_shader_buffer_store 1 -#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 -#endif /* GL_NV_shader_buffer_store */ - -#ifndef GL_NV_shader_storage_buffer_object -#define GL_NV_shader_storage_buffer_object 1 -#endif /* GL_NV_shader_storage_buffer_object */ - -#ifndef GL_NV_shader_subgroup_partitioned -#define GL_NV_shader_subgroup_partitioned 1 -#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 -#endif /* GL_NV_shader_subgroup_partitioned */ - -#ifndef GL_NV_shader_texture_footprint -#define GL_NV_shader_texture_footprint 1 -#endif /* GL_NV_shader_texture_footprint */ - -#ifndef GL_NV_shader_thread_group -#define GL_NV_shader_thread_group 1 -#define GL_WARP_SIZE_NV 0x9339 -#define GL_WARPS_PER_SM_NV 0x933A -#define GL_SM_COUNT_NV 0x933B -#endif /* GL_NV_shader_thread_group */ - -#ifndef GL_NV_shader_thread_shuffle -#define GL_NV_shader_thread_shuffle 1 -#endif /* GL_NV_shader_thread_shuffle */ - -#ifndef GL_NV_shading_rate_image -#define GL_NV_shading_rate_image 1 -#define GL_SHADING_RATE_IMAGE_NV 0x9563 -#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 -#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 -#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 -#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A -#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B -#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C -#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D -#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E -#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F -#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B -#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C -#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D -#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E -#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F -#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE -#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF -#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 -typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); -typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); -typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); -typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); -typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture); -GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); -GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); -GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); -GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); -GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order); -GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); -#endif -#endif /* GL_NV_shading_rate_image */ - -#ifndef GL_NV_stereo_view_rendering -#define GL_NV_stereo_view_rendering 1 -#endif /* GL_NV_stereo_view_rendering */ - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 -#endif /* GL_NV_tessellation_program5 */ - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif /* GL_NV_texgen_emboss */ - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif /* GL_NV_texgen_reflection */ - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 -typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureBarrierNV (void); -#endif -#endif /* GL_NV_texture_barrier */ - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif /* GL_NV_texture_compression_vtc */ - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif /* GL_NV_texture_env_combine4 */ - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif /* GL_NV_texture_expand_normal */ - -#ifndef GL_NV_texture_multisample -#define GL_NV_texture_multisample 1 -#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 -#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#endif -#endif /* GL_NV_texture_multisample */ - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif /* GL_NV_texture_rectangle */ - -#ifndef GL_NV_texture_rectangle_compressed -#define GL_NV_texture_rectangle_compressed 1 -#endif /* GL_NV_texture_rectangle_compressed */ - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif /* GL_NV_texture_shader */ - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif /* GL_NV_texture_shader2 */ - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif /* GL_NV_texture_shader3 */ - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F -#define GL_LAYER_NV 0x8DAA -#define GL_NEXT_BUFFER_NV -2 -#define GL_SKIP_COMPONENTS4_NV -3 -#define GL_SKIP_COMPONENTS3_NV -4 -#define GL_SKIP_COMPONENTS2_NV -5 -#define GL_SKIP_COMPONENTS1_NV -6 -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); -GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif -#endif /* GL_NV_transform_feedback */ - -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedbackNV (void); -GLAPI void APIENTRY glResumeTransformFeedbackNV (void); -GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); -#endif -#endif /* GL_NV_transform_feedback2 */ - -#ifndef GL_NV_uniform_buffer_unified_memory -#define GL_NV_uniform_buffer_unified_memory 1 -#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E -#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F -#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 -#endif /* GL_NV_uniform_buffer_unified_memory */ - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 -typedef GLintptr GLvdpauSurfaceNV; -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE -typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); -typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); -GLAPI void APIENTRY glVDPAUFiniNV (void); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); -GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif -#endif /* GL_NV_vdpau_interop */ - -#ifndef GL_NV_vdpau_interop2 -#define GL_NV_vdpau_interop2 1 -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); -#endif -#endif /* GL_NV_vdpau_interop2 */ - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); -#endif -#endif /* GL_NV_vertex_array_range */ - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif /* GL_NV_vertex_array_range2 */ - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); -GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif -#endif /* GL_NV_vertex_attrib_integer_64bit */ - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 -typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); -GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); -#endif -#endif /* GL_NV_vertex_buffer_unified_memory */ - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); -GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); -GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); -GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); -#endif -#endif /* GL_NV_vertex_program */ - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif /* GL_NV_vertex_program1_1 */ - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif /* GL_NV_vertex_program2 */ - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif /* GL_NV_vertex_program2_option */ - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif /* GL_NV_vertex_program3 */ - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); -#endif -#endif /* GL_NV_vertex_program4 */ - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C -typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif -#endif /* GL_NV_video_capture */ - -#ifndef GL_NV_viewport_array2 -#define GL_NV_viewport_array2 1 -#endif /* GL_NV_viewport_array2 */ - -#ifndef GL_NV_viewport_swizzle -#define GL_NV_viewport_swizzle 1 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 -#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 -#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 -#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A -#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B -typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); -#endif -#endif /* GL_NV_viewport_swizzle */ - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif /* GL_OML_interlace */ - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif /* GL_OML_resample */ - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif /* GL_OML_subsample */ - -#ifndef GL_OVR_multiview -#define GL_OVR_multiview 1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 -#define GL_MAX_VIEWS_OVR 0x9631 -#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); -#endif -#endif /* GL_OVR_multiview */ - -#ifndef GL_OVR_multiview2 -#define GL_OVR_multiview2 1 -#endif /* GL_OVR_multiview2 */ - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); -#endif -#endif /* GL_PGI_misc_hints */ - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif /* GL_PGI_vertex_hints */ - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif /* GL_REND_screen_coordinates */ - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#define GL_RGBA_DXT5_S3TC 0x83A4 -#define GL_RGBA4_DXT5_S3TC 0x83A5 -#endif /* GL_S3_s3tc */ - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); -#endif -#endif /* GL_SGIS_detail_texture */ - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); -#endif -#endif /* GL_SGIS_fog_function */ - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif /* GL_SGIS_generate_mipmap */ - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); -#endif -#endif /* GL_SGIS_multisample */ - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); -#endif -#endif /* GL_SGIS_pixel_texture */ - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif /* GL_SGIS_point_line_texgen */ - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_SGIS_point_parameters */ - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); -#endif -#endif /* GL_SGIS_sharpen_texture */ - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_SGIS_texture4D */ - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif /* GL_SGIS_texture_border_clamp */ - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif -#endif /* GL_SGIS_texture_color_mask */ - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif /* GL_SGIS_texture_edge_clamp */ - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif -#endif /* GL_SGIS_texture_filter4 */ - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif /* GL_SGIS_texture_lod */ - -#ifndef GL_SGIS_texture_select -#define GL_SGIS_texture_select 1 -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif /* GL_SGIS_texture_select */ - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#define GL_ASYNC_MARKER_SGIX 0x8329 -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); -#endif -#endif /* GL_SGIX_async */ - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif /* GL_SGIX_async_histogram */ - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif /* GL_SGIX_async_pixel */ - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif /* GL_SGIX_blend_alpha_minmax */ - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif /* GL_SGIX_calligraphic_fragment */ - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif /* GL_SGIX_clipmap */ - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif /* GL_SGIX_convolution_accuracy */ - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif /* GL_SGIX_depth_pass_instrument */ - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif /* GL_SGIX_depth_texture */ - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif -#endif /* GL_SGIX_flush_raster */ - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif /* GL_SGIX_fog_offset */ - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); -GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); -#endif -#endif /* GL_SGIX_fragment_lighting */ - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); -#endif -#endif /* GL_SGIX_framezoom */ - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); -#endif -#endif /* GL_SGIX_igloo_interface */ - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); -#endif -#endif /* GL_SGIX_instruments */ - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#define GL_INTERLACE_SGIX 0x8094 -#endif /* GL_SGIX_interlace */ - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif /* GL_SGIX_ir_instrument1 */ - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#define GL_LIST_PRIORITY_SGIX 0x8182 -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); -GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); -GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); -#endif -#endif /* GL_SGIX_list_priority */ - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); -#endif -#endif /* GL_SGIX_pixel_texture */ - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif /* GL_SGIX_pixel_tiles */ - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); -#endif -#endif /* GL_SGIX_polynomial_ffd */ - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); -#endif -#endif /* GL_SGIX_reference_plane */ - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#define GL_PACK_RESAMPLE_SGIX 0x842E -#define GL_UNPACK_RESAMPLE_SGIX 0x842F -#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif /* GL_SGIX_resample */ - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif /* GL_SGIX_scalebias_hint */ - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif /* GL_SGIX_shadow */ - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif /* GL_SGIX_shadow_ambient */ - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); -#endif -#endif /* GL_SGIX_sprite */ - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif /* GL_SGIX_subsample */ - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif -#endif /* GL_SGIX_tag_sample_buffer */ - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif /* GL_SGIX_texture_add_env */ - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif /* GL_SGIX_texture_coordinate_clamp */ - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif /* GL_SGIX_texture_lod_bias */ - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif /* GL_SGIX_texture_multi_buffer */ - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif /* GL_SGIX_texture_scale_bias */ - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif /* GL_SGIX_vertex_preclip */ - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif /* GL_SGIX_ycrcb */ - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif /* GL_SGIX_ycrcb_subsample */ - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif /* GL_SGIX_ycrcba */ - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif /* GL_SGI_color_matrix */ - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); -#endif -#endif /* GL_SGI_color_table */ - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif /* GL_SGI_texture_color_table */ - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif -#endif /* GL_SUNX_constant_data */ - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif /* GL_SUN_convolution_border_modes */ - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); -#endif -#endif /* GL_SUN_global_alpha */ - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif -#endif /* GL_SUN_mesh_array */ - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif /* GL_SUN_slice_accum */ - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); -#endif -#endif /* GL_SUN_triangle_list */ - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif -#endif /* GL_SUN_vertex */ - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif /* GL_WIN_phong_shading */ - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif /* GL_WIN_specular_fog */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/GL/osmesa.h b/ltw/src/main/tinywrapper/GL/osmesa.h deleted file mode 100644 index 39cd54e..0000000 --- a/ltw/src/main/tinywrapper/GL/osmesa.h +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2005 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -/* - * Mesa Off-Screen rendering interface. - * - * This is an operating system and window system independent interface to - * Mesa which allows one to render images into a client-supplied buffer in - * main memory. Such images may manipulated or saved in whatever way the - * client wants. - * - * These are the API functions: - * OSMesaCreateContext - create a new Off-Screen Mesa rendering context - * OSMesaMakeCurrent - bind an OSMesaContext to a client's image buffer - * and make the specified context the current one. - * OSMesaDestroyContext - destroy an OSMesaContext - * OSMesaGetCurrentContext - return thread's current context ID - * OSMesaPixelStore - controls how pixels are stored in image buffer - * OSMesaGetIntegerv - return OSMesa state parameters - * - * - * The limits on the width and height of an image buffer can be retrieved - * via OSMesaGetIntegerv(OSMESA_MAX_WIDTH/OSMESA_MAX_HEIGHT). - */ - - -#ifndef OSMESA_H -#define OSMESA_H - - -#ifdef __cplusplus -extern "C" { -#endif - - -#include - - -#define OSMESA_MAJOR_VERSION 11 -#define OSMESA_MINOR_VERSION 2 -#define OSMESA_PATCH_VERSION 0 - - - -/* - * Values for the format parameter of OSMesaCreateContext() - * New in version 2.0. - */ -#define OSMESA_COLOR_INDEX GL_COLOR_INDEX -#define OSMESA_RGBA GL_RGBA -#define OSMESA_BGRA 0x1 -#define OSMESA_ARGB 0x2 -#define OSMESA_RGB GL_RGB -#define OSMESA_BGR 0x4 -#define OSMESA_RGB_565 0x5 - - -/* - * OSMesaPixelStore() parameters: - * New in version 2.0. - */ -#define OSMESA_ROW_LENGTH 0x10 -#define OSMESA_Y_UP 0x11 - - -/* - * Accepted by OSMesaGetIntegerv: - */ -#define OSMESA_WIDTH 0x20 -#define OSMESA_HEIGHT 0x21 -#define OSMESA_FORMAT 0x22 -#define OSMESA_TYPE 0x23 -#define OSMESA_MAX_WIDTH 0x24 /* new in 4.0 */ -#define OSMESA_MAX_HEIGHT 0x25 /* new in 4.0 */ - -/* - * Accepted in OSMesaCreateContextAttrib's attribute list. - */ -#define OSMESA_DEPTH_BITS 0x30 -#define OSMESA_STENCIL_BITS 0x31 -#define OSMESA_ACCUM_BITS 0x32 -#define OSMESA_PROFILE 0x33 -#define OSMESA_CORE_PROFILE 0x34 -#define OSMESA_COMPAT_PROFILE 0x35 -#define OSMESA_CONTEXT_MAJOR_VERSION 0x36 -#define OSMESA_CONTEXT_MINOR_VERSION 0x37 - - -typedef struct osmesa_context *OSMesaContext; - - -/* - * Create an Off-Screen Mesa rendering context. The only attribute needed is - * an RGBA vs Color-Index mode flag. - * - * Input: format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA, - * OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR. - * sharelist - specifies another OSMesaContext with which to share - * display lists. NULL indicates no sharing. - * Return: an OSMesaContext or 0 if error - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaCreateContext( GLenum format, OSMesaContext sharelist ); - - - -/* - * Create an Off-Screen Mesa rendering context and specify desired - * size of depth buffer, stencil buffer and accumulation buffer. - * If you specify zero for depthBits, stencilBits, accumBits you - * can save some memory. - * - * New in Mesa 3.5 - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits, - GLint accumBits, OSMesaContext sharelist); - - -/* - * Create an Off-Screen Mesa rendering context with attribute list. - * The list is composed of (attribute, value) pairs and terminated with - * attribute==0. Supported Attributes: - * - * Attributes Values - * -------------------------------------------------------------------------- - * OSMESA_FORMAT OSMESA_RGBA*, OSMESA_BGRA, OSMESA_ARGB, etc. - * OSMESA_DEPTH_BITS 0*, 16, 24, 32 - * OSMESA_STENCIL_BITS 0*, 8 - * OSMESA_ACCUM_BITS 0*, 16 - * OSMESA_PROFILE OSMESA_COMPAT_PROFILE*, OSMESA_CORE_PROFILE - * OSMESA_CONTEXT_MAJOR_VERSION 1*, 2, 3 - * OSMESA_CONTEXT_MINOR_VERSION 0+ - * - * Note: * = default value - * - * We return a context version >= what's specified by OSMESA_CONTEXT_MAJOR/ - * MINOR_VERSION for the given profile. For example, if you request a GL 1.4 - * compat profile, you might get a GL 3.0 compat profile. - * Otherwise, null is returned if the version/profile is not supported. - * - * New in Mesa 11.2 - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaCreateContextAttribs( const int *attribList, OSMesaContext sharelist ); - - - -/* - * Destroy an Off-Screen Mesa rendering context. - * - * Input: ctx - the context to destroy - */ -GLAPI void GLAPIENTRY -OSMesaDestroyContext( OSMesaContext ctx ); - - - -/* - * Bind an OSMesaContext to an image buffer. The image buffer is just a - * block of memory which the client provides. Its size must be at least - * as large as width*height*sizeof(type). Its address should be a multiple - * of 4 if using RGBA mode. - * - * Image data is stored in the order of glDrawPixels: row-major order - * with the lower-left image pixel stored in the first array position - * (ie. bottom-to-top). - * - * Since the only type initially supported is GL_UNSIGNED_BYTE, if the - * context is in RGBA mode, each pixel will be stored as a 4-byte RGBA - * value. If the context is in color indexed mode, each pixel will be - * stored as a 1-byte value. - * - * If the context's viewport hasn't been initialized yet, it will now be - * initialized to (0,0,width,height). - * - * Input: ctx - the rendering context - * buffer - the image buffer memory - * type - data type for pixel components, only GL_UNSIGNED_BYTE - * supported now - * width, height - size of image buffer in pixels, at least 1 - * Return: GL_TRUE if success, GL_FALSE if error because of invalid ctx, - * invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1, - * width>internal limit or height>internal limit. - */ -GLAPI GLboolean GLAPIENTRY -OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type, - GLsizei width, GLsizei height ); - - - - -/* - * Return the current Off-Screen Mesa rendering context handle. - */ -GLAPI OSMesaContext GLAPIENTRY -OSMesaGetCurrentContext( void ); - - - -/* - * Set pixel store/packing parameters for the current context. - * This is similar to glPixelStore. - * Input: pname - OSMESA_ROW_LENGTH - * specify actual pixels per row in image buffer - * 0 = same as image width (default) - * OSMESA_Y_UP - * zero = Y coordinates increase downward - * non-zero = Y coordinates increase upward (default) - * value - the value for the parameter pname - * - * New in version 2.0. - */ -GLAPI void GLAPIENTRY -OSMesaPixelStore( GLint pname, GLint value ); - - - -/* - * Return an integer value like glGetIntegerv. - * Input: pname - - * OSMESA_WIDTH return current image width - * OSMESA_HEIGHT return current image height - * OSMESA_FORMAT return image format - * OSMESA_TYPE return color component data type - * OSMESA_ROW_LENGTH return row length in pixels - * OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction - * value - pointer to integer in which to return result. - */ -GLAPI void GLAPIENTRY -OSMesaGetIntegerv( GLint pname, GLint *value ); - - - -/* - * Return the depth buffer associated with an OSMesa context. - * Input: c - the OSMesa context - * Output: width, height - size of buffer in pixels - * bytesPerValue - bytes per depth value (2 or 4) - * buffer - pointer to depth buffer values - * Return: GL_TRUE or GL_FALSE to indicate success or failure. - * - * New in Mesa 2.4. - */ -GLAPI GLboolean GLAPIENTRY -OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height, - GLint *bytesPerValue, void **buffer ); - - - -/* - * Return the color buffer associated with an OSMesa context. - * Input: c - the OSMesa context - * Output: width, height - size of buffer in pixels - * format - buffer format (OSMESA_FORMAT) - * buffer - pointer to depth buffer values - * Return: GL_TRUE or GL_FALSE to indicate success or failure. - * - * New in Mesa 3.3. - */ -GLAPI GLboolean GLAPIENTRY -OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height, - GLint *format, void **buffer ); - - - -/** - * This typedef is new in Mesa 6.3. - */ -typedef void (*OSMESAproc)(); - - -/* - * Return pointer to the named function. - * New in Mesa 4.1 - * Return OSMESAproc in 6.3. - */ -GLAPI OSMESAproc GLAPIENTRY -OSMesaGetProcAddress( const char *funcName ); - - - -/** - * Enable/disable color clamping, off by default. - * New in Mesa 6.4.2 - */ -GLAPI void GLAPIENTRY -OSMesaColorClamp(GLboolean enable); - - -/** - * Enable/disable Gallium post-process filters. - * This should be called after a context is created, but before it is - * made current for the first time. After a context has been made - * current, this function has no effect. - * If the enable_value param is zero, the filter is disabled. Otherwise - * the filter is enabled, and the value may control the filter's quality. - * New in Mesa 10.0 - */ -GLAPI void GLAPIENTRY -OSMesaPostprocess(OSMesaContext osmesa, const char *filter, - unsigned enable_value); - - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/ltw/src/main/tinywrapper/basevertex.c b/ltw/src/main/tinywrapper/basevertex.c deleted file mode 100644 index f02fa59..0000000 --- a/ltw/src/main/tinywrapper/basevertex.c +++ /dev/null @@ -1,130 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ -#include -#include "proc.h" -#include "egl.h" -#include "main.h" - -typedef struct { - GLuint count; - GLuint instanceCount; - GLuint firstIndex; - GLint baseVertex; - GLuint reservedMustBeZero; -} indirect_pass_t; - -void basevertex_init(context_t* context) { - basevertex_renderer_t *renderer = &context->basevertex; - if(context->drawelementsbasevertex != NULL) { - printf("LTW: BaseVertex render calls will use the host driver implementation\n"); - return; - } - if(!context->es31) { - printf("LTW: BaseVertex render calls not available: requires OpenGL ES 3.1\n"); - return; - } - es3_functions.glGenBuffers(1, &renderer->indirectRenderBuffer); - GLenum error = es3_functions.glGetError(); - if(error != GL_NO_ERROR) { - printf("LTW: Failed to initialize indirect buffers: %x\n", error); - return; - } - renderer->ready = true; -} - -GLint type_bytes(GLenum type) { - switch (type) { - case GL_UNSIGNED_BYTE: return 1; - case GL_UNSIGNED_SHORT: return 2; - case GL_UNSIGNED_INT: return 4; - default: return -1; - } -} - -static void restore_state(GLuint element_buffer) { - es3_functions.glBindBuffer(GL_DRAW_INDIRECT_BUFFER, current_context->bound_buffers[get_buffer_index(GL_DRAW_INDIRECT_BUFFER)]); -} - -void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex) { - if(!current_context) return; - if(current_context->drawelementsbasevertex != NULL) { - current_context->drawelementsbasevertex(mode, count, type, indices, basevertex); - return; - } - basevertex_renderer_t *renderer = ¤t_context->basevertex; - if(!renderer->ready) return; - GLint elementbuffer; - es3_functions.glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &elementbuffer); - if(elementbuffer == 0) { - // I am not bothered enough to implement this. - printf("LTW: Base vertex draws without element buffer are not supported\n"); - return; - } - GLint typeBytes = type_bytes(type); - uintptr_t indicesPointer = (uintptr_t)indices; - if(indicesPointer % typeBytes != 0) { - printf("LTW: misaligned base vertex draw not supported\n"); - } - indirect_pass_t indirect_pass; - indirect_pass.count = count; - indirect_pass.firstIndex = indicesPointer / typeBytes; - indirect_pass.baseVertex = basevertex; - indirect_pass.instanceCount = 1; - indirect_pass.reservedMustBeZero = 0; - es3_functions.glBindBuffer(GL_DRAW_INDIRECT_BUFFER, renderer->indirectRenderBuffer); - es3_functions.glBufferData(GL_DRAW_INDIRECT_BUFFER, sizeof(indirect_pass_t), &indirect_pass, GL_STREAM_DRAW); - es3_functions.glDrawElementsIndirect(mode, type, 0); - restore_state(elementbuffer); -} - - - -void glMultiDrawElementsBaseVertex(GLenum mode, - const GLsizei *count, - GLenum type, - const void * const *indices, - GLsizei drawcount, - const GLint *basevertex) { - if(!current_context) return; - if(current_context->drawelementsbasevertex != NULL) { - for(GLsizei i = 0; i < drawcount; i++) { - current_context->drawelementsbasevertex(mode, count[i], type, indices[i], basevertex[i]); - } - return; - } - basevertex_renderer_t *renderer = ¤t_context->basevertex; - if(!renderer->ready) return; - GLint elementbuffer; - es3_functions.glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &elementbuffer); - if(elementbuffer == 0) { - // I am not bothered enough to implement this. - printf("LTW: Base vertex draws without element buffer are not supported\n"); - return; - } - GLint typeBytes = type_bytes(type); - indirect_pass_t indirect_passes[drawcount]; - for(GLsizei i = 0; i < drawcount; i++) { - uintptr_t indicesPointer = (uintptr_t)indices[i]; - if(indicesPointer % typeBytes != 0) { - printf("LTW: misaligned base vertex draw not supported (draw %i)\n", i); - return; - } - indirect_pass_t* pass = &indirect_passes[i]; - pass->count = count[i]; - pass->firstIndex = indicesPointer / typeBytes; - pass->baseVertex = basevertex[i]; - pass->instanceCount = 1; - pass->reservedMustBeZero = 0; - } - es3_functions.glBindBuffer(GL_DRAW_INDIRECT_BUFFER, renderer->indirectRenderBuffer); - es3_functions.glBufferData(GL_DRAW_INDIRECT_BUFFER, (long)sizeof(indirect_pass_t) * drawcount, indirect_passes, GL_STREAM_DRAW); - if(current_context->multidraw_indirect) { - es3_functions.glMultiDrawElementsIndirectEXT(mode, type, 0, drawcount, 0); - } else for(GLsizei i = 0; i < drawcount; i++) { - es3_functions.glDrawElementsIndirect(mode, type, (void*)(sizeof(indirect_pass_t) * i)); - } - restore_state(elementbuffer); -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/basevertex.h b/ltw/src/main/tinywrapper/basevertex.h deleted file mode 100644 index bd9a215..0000000 --- a/ltw/src/main/tinywrapper/basevertex.h +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef GL4ES_WRAPPER_BASEVERTEX_H -#define GL4ES_WRAPPER_BASEVERTEX_H - -GLint type_bytes(GLenum type); - -#endif //GL4ES_WRAPPER_BASEVERTEX_H diff --git a/ltw/src/main/tinywrapper/egl.c b/ltw/src/main/tinywrapper/egl.c deleted file mode 100644 index 617144d..0000000 --- a/ltw/src/main/tinywrapper/egl.c +++ /dev/null @@ -1,220 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ -#include "egl.h" -#include "unordered_map/int_hash.h" -#include "string_utils.h" -#include "env.h" -#include - -thread_local context_t *current_context; -unordered_map* context_map; - -EGLContext (*host_eglCreateContext)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); -EGLBoolean (*host_eglDestroyContext)(EGLDisplay dpy, EGLContext ctx); -EGLBoolean (*host_eglMakeCurrent) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); - -void init_egl() { - context_map = alloc_intmap(); - host_eglCreateContext = (EGLContext (*)(EGLDisplay, EGLConfig, EGLContext, - const EGLint *)) host_eglGetProcAddress("eglCreateContext"); - host_eglDestroyContext = (EGLBoolean (*)(EGLDisplay, EGLContext)) host_eglGetProcAddress( - "eglDestroyContext"); - host_eglMakeCurrent = (EGLBoolean (*)(EGLDisplay, EGLSurface, EGLSurface, - EGLContext)) host_eglGetProcAddress("eglMakeCurrent"); -} - -static bool init_context(context_t* tw_context) { - tw_context->shader_map = alloc_intmap_safe(); - if(!tw_context->shader_map) goto fail; - tw_context->framebuffer_map = alloc_intmap_safe(); - if(!tw_context->framebuffer_map) goto fail_dealloc; - tw_context->program_map = alloc_intmap_safe(); - if(!tw_context->program_map) goto fail_dealloc; - tw_context->texture_swztrack_map = alloc_intmap_safe(); - if(!tw_context->texture_swztrack_map) goto fail_dealloc; - for(int i = 0; i < MAX_BOUND_BASEBUFFERS; i++) { - unordered_map *map = alloc_intmap_safe(); - if(!map) goto fail_dealloc; - tw_context->bound_basebuffers[i] = map; - } - return true; - - fail_dealloc: - for(int i = 0; i < MAX_BOUND_BASEBUFFERS; i++) { - unordered_map *map = tw_context->bound_basebuffers[i]; - if(map) unordered_map_free(map); - } - if(tw_context->shader_map) - unordered_map_free(tw_context->shader_map); - if(tw_context->framebuffer_map) - unordered_map_free(tw_context->framebuffer_map); - if(tw_context->program_map) - unordered_map_free(tw_context->program_map); - if(tw_context->texture_swztrack_map) - unordered_map_free(tw_context->texture_swztrack_map); - fail: - return false; -} - -static void free_context(context_t* tw_context) { - unordered_map_free(tw_context->shader_map); - unordered_map_free(tw_context->program_map); - unordered_map_free(tw_context->framebuffer_map); - unordered_map_free(tw_context->texture_swztrack_map); - if(tw_context->extensions_string != NULL) free(tw_context->extensions_string); - if(tw_context->nextras != 0 && tw_context->extra_extensions_array != NULL) { - for(int i = 0; i < tw_context->nextras; i++) { - free((tw_context->extra_extensions_array[i])); - } - free(tw_context->extra_extensions_array); - } -} - -void init_extra_extensions(context_t* context, int* length) { - const char* es_extensions = (const char*)es3_functions.glGetString(GL_EXTENSIONS); - *length = (int)strlen(es_extensions); - context->extensions_string = malloc(*length + 1); - memcpy(context->extensions_string, es_extensions, *length+1); -} - -void add_extra_extension(context_t* context, int* length, const char* extension) { - size_t extension_len = strlen(extension); - - char str_append_extension[extension_len + 2]; - memcpy(str_append_extension, extension, extension_len); - str_append_extension[extension_len] = ' '; - str_append_extension[extension_len + 1] = 0; - context->extensions_string = gl4es_append(context->extensions_string, length, str_append_extension); - - int extension_idx = context->nextras++; - context->extra_extensions_array = realloc(context->extra_extensions_array, sizeof(char*)*context->nextras); - char* extra_extension = malloc(extension_len + 1); - strncpy(extra_extension, extension, extension_len); - context->extra_extensions_array[extension_idx] = extra_extension; -} - -void fin_extra_extensions(context_t* context, int length) { - if(context->extensions_string[length-2] != ' ') return; - char* orig_string = context->extensions_string; - context->extensions_string = realloc(context->extensions_string, length - 1); - if(context->extensions_string == NULL) { - free(orig_string); - return; - } - context->extensions_string[length-2] = 0; -} - -void build_extension_string(context_t* context) { - int length; - init_extra_extensions(context, &length); - if(context->buffer_storage) { - if(!env_istrue("LTW_HIDE_BUFFER_STORAGE")) - add_extra_extension(context, &length, "GL_ARB_buffer_storage"); - else printf("LTW: The buffer storage extension is hidden.\n"); - } - if(context->buffer_texture_ext || context->es32) { - add_extra_extension(context, &length, "ARB_texture_buffer_object"); - } - // More extensions are possible, but will need way more wraps and tracking. - fin_extra_extensions(context, length); -} - -static void find_esversion(context_t* context) { - const char* version = (const char*) es3_functions.glGetString(GL_VERSION); - const char* shader_version = (const char*) es3_functions.glGetString(GL_SHADING_LANGUAGE_VERSION); - - int esmajor = 0, esminor = 0, shadermajor = 3, shaderminor = 0; - sscanf(version, " OpenGL ES %i.%i", &esmajor, &esminor); - sscanf(shader_version, " OpenGL ES GLSL ES %i.%i", &shadermajor, &shaderminor); - context->shader_version = shadermajor * 100 + shaderminor; - printf("LTW: Running on OpenGL ES %i.%i with ESSL %i\n", esmajor, esminor, context->shader_version); - if(esmajor == 0 && esminor == 0) goto fail; - if(esmajor < 3 || context->shader_version < 300) { - printf("Unsupported OpenGL ES version. This will cause you problems down the line.\n"); - return; - } - if(esmajor == 3) { - context->es31 = esminor >= 1; - context->es32 = esminor >= 2; - }else if(esmajor > 3) { - context->es32 = context->es31 = true; - } - - const char* extensions = (const char*) es3_functions.glGetString(GL_EXTENSIONS); - if(strstr(extensions, "GL_EXT_buffer_storage")) context->buffer_storage = true; - if(strstr(extensions, "GL_EXT_texture_buffer")) context->buffer_texture_ext = true; - if(strstr(extensions, "GL_EXT_multi_draw_indirect")) context->multidraw_indirect = true; - - bool basevertex_oes = strstr(extensions, "GL_OES_draw_elements_base_vertex"); - bool basevertex_ext = strstr(extensions, "GL_EXT_draw_elements_base_vertex"); - if(context->es32) context->drawelementsbasevertex = es3_functions.glDrawElementsBaseVertex; - else if(basevertex_oes) context->drawelementsbasevertex = es3_functions.glDrawElementsBaseVertexOES; - else if(basevertex_ext) context->drawelementsbasevertex = es3_functions.glDrawElementsBaseVertexEXT; - else context->drawelementsbasevertex = NULL; - - build_extension_string(context); - - return; - fail: - printf("LTW: Failed to detect OpenGL ES version"); -} - -void basevertex_init(context_t* context); -void buffer_copier_init(context_t* context); -static void init_incontext(context_t* tw_context) { - es3_functions.glGetIntegerv(GL_MAX_TEXTURE_SIZE, &tw_context->maxTextureSize); - es3_functions.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &tw_context->max_drawbuffers); - es3_functions.glGetIntegerv(GL_NUM_EXTENSIONS, &tw_context->nextensions_es); - if(tw_context->max_drawbuffers > MAX_DRAWBUFFERS) { - tw_context->max_drawbuffers = MAX_DRAWBUFFERS; - } - - find_esversion(tw_context); - - basevertex_init(tw_context); - buffer_copier_init(tw_context); - es3_functions.glGenBuffers(1, &tw_context->multidraw_element_buffer); -} - -EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list) { - EGLContext phys_context = host_eglCreateContext(dpy, config, share_context, attrib_list); - if(phys_context == EGL_NO_CONTEXT) return phys_context; - context_t* tw_context = calloc(1, sizeof(context_t)); - if(tw_context == NULL || !init_context(tw_context)) { - if(tw_context) free(tw_context); - host_eglDestroyContext(dpy, phys_context); - return EGL_NO_CONTEXT; - } - unordered_map_put(context_map, phys_context, tw_context); - return phys_context; -} - -EGLBoolean eglDestroyContext (EGLDisplay dpy, EGLContext ctx) { - if(!host_eglDestroyContext(dpy, ctx)) return EGL_FALSE; - context_t* old_ctx = unordered_map_remove(context_map, ctx); - free_context(old_ctx); - free(old_ctx); - return EGL_TRUE; -} - -EGLBoolean eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) { - if(!host_eglMakeCurrent(dpy, draw, read, ctx)) return EGL_FALSE; - if(ctx == EGL_NO_CONTEXT) { - current_context = NULL; - return EGL_TRUE; - } - context_t* tw_context = unordered_map_get(context_map, ctx); - if(tw_context == NULL) { - printf("TinywrapperEGL: Failed to find context %p\n", ctx); - abort(); - } - if(!tw_context->context_rdy) { - init_incontext(tw_context); - tw_context->context_rdy = true; - } - current_context = tw_context; - return EGL_TRUE; -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/egl.h b/ltw/src/main/tinywrapper/egl.h deleted file mode 100644 index 1a4e305..0000000 --- a/ltw/src/main/tinywrapper/egl.h +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef POJAVLAUNCHER_EGL_H -#define POJAVLAUNCHER_EGL_H - -#include -#include -#include "proc.h" -#include "unordered_map/unordered_map.h" - -#define MAX_BOUND_BUFFERS 9 -#define MAX_BOUND_BASEBUFFERS 4 -#define MAX_DRAWBUFFERS 8 -#define MAX_FBTARGETS 8 -#define MAX_TMUS 8 -#define MAX_TEXTARGETS 8 - -typedef struct { - bool ready; - GLuint indirectRenderBuffer; -} basevertex_renderer_t; - -typedef struct { - GLuint index; - GLuint buffer; - bool ranged; - GLintptr offset; - GLintptr size; -} basebuffer_binding_t; - -typedef struct { - GLuint color_targets[MAX_FBTARGETS]; - GLuint color_objects[MAX_FBTARGETS]; - GLuint color_levels[MAX_FBTARGETS]; - GLuint color_layers[MAX_FBTARGETS]; - GLenum virt_drawbuffers[MAX_DRAWBUFFERS]; - GLenum phys_drawbuffers[MAX_DRAWBUFFERS]; - GLsizei nbuffers; -} framebuffer_t; - -typedef struct { - bool ready; - GLuint temp_texture; - GLuint tempfb; - GLuint destfb; - void* depthData; - GLsizei depthWidth, depthHeight; -} framebuffer_copier_t; - -typedef struct { - GLenum original_swizzle[4]; - GLboolean goofy_byte_order; - GLboolean upload_bgra; -} texture_swizzle_track_t; - -typedef struct { - EGLContext phys_context; - bool context_rdy; - bool es31, es32, buffer_storage, buffer_texture_ext, multidraw_indirect; - PFNGLDRAWELEMENTSBASEVERTEXPROC drawelementsbasevertex; - GLint shader_version; - basevertex_renderer_t basevertex; - GLuint multidraw_element_buffer; - framebuffer_copier_t framebuffer_copier; - unordered_map* shader_map; - unordered_map* program_map; - unordered_map* framebuffer_map; - unordered_map* texture_swztrack_map; - unordered_map* bound_basebuffers[MAX_BOUND_BASEBUFFERS]; - int proxy_width, proxy_height, proxy_intformat, maxTextureSize; - GLint max_drawbuffers; - GLuint bound_buffers[MAX_BOUND_BUFFERS]; - GLuint program; - GLuint draw_framebuffer; - GLuint read_framebuffer; - char* extensions_string; - size_t nextras; - int nextensions_es; - char** extra_extensions_array; -} context_t; - -extern thread_local context_t *current_context; -extern void init_egl(); -extern GLenum get_textarget_query_param(GLenum target); - -#endif //POJAVLAUNCHER_EGL_H diff --git a/ltw/src/main/tinywrapper/env.c b/ltw/src/main/tinywrapper/env.c deleted file mode 100644 index 507692a..0000000 --- a/ltw/src/main/tinywrapper/env.c +++ /dev/null @@ -1,17 +0,0 @@ -// -// Created by maks on 12.07.2025. -// -#include "env.h" -#include -#include "libraryinternal.h" - -INTERNAL bool env_istrue_d(const char* name, bool _default) { - const char* env = getenv(name); - if(env == NULL) return _default; - return *env == '1'; -} - -INTERNAL bool env_istrue(const char* name) { - const char* env = getenv(name); - return env != NULL && *env == '1'; -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/env.h b/ltw/src/main/tinywrapper/env.h deleted file mode 100644 index ed75b62..0000000 --- a/ltw/src/main/tinywrapper/env.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by maks on 12.07.2025. -// - -#ifndef GL4ES_WRAPPER_ENV_H -#define GL4ES_WRAPPER_ENV_H - -#include - -bool env_istrue(const char* name); -bool env_istrue_d(const char* name, bool _default); - -#endif //GL4ES_WRAPPER_ENV_H diff --git a/ltw/src/main/tinywrapper/es3_extended.h b/ltw/src/main/tinywrapper/es3_extended.h deleted file mode 100644 index e0fabdb..0000000 --- a/ltw/src/main/tinywrapper/es3_extended.h +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -// Added manually as needed -GLESFUNC(glDrawElementsIndirect,PFNGLDRAWELEMENTSINDIRECTPROC) -GLESFUNC(glMultiDrawArraysEXT,PFNGLMULTIDRAWARRAYSEXTPROC) -GLESFUNC(glMultiDrawElementsEXT,PFNGLMULTIDRAWELEMENTSEXTPROC) -GLESFUNC(glGetTexLevelParameteriv,PFNGLGETTEXLEVELPARAMETERIVPROC) -GLESFUNC(glGetTexLevelParameterfv,PFNGLGETTEXLEVELPARAMETERFVPROC) -GLESFUNC(glDrawElementsBaseVertex, PFNGLDRAWELEMENTSBASEVERTEXPROC) -GLESFUNC(glDrawElementsBaseVertexOES, PFNGLDRAWELEMENTSBASEVERTEXOESPROC) -GLESFUNC(glDrawElementsBaseVertexEXT, PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) -GLESFUNC(glBufferStorageEXT, PFNGLBUFFERSTORAGEEXTPROC) -GLESFUNC(glTexBuffer, PFNGLTEXBUFFERPROC); -GLESFUNC(glTexBufferRange, PFNGLTEXBUFFERRANGEPROC); -GLESFUNC(glTexBufferEXT, PFNGLTEXBUFFEREXTPROC) -GLESFUNC(glTexBufferRangeEXT, PFNGLTEXBUFFERRANGEEXTPROC) -GLESFUNC(glMultiDrawElementsIndirectEXT, PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/es3_functions.h b/ltw/src/main/tinywrapper/es3_functions.h deleted file mode 100644 index 91ca264..0000000 --- a/ltw/src/main/tinywrapper/es3_functions.h +++ /dev/null @@ -1,299 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -/* -// Java program to assemble this file from the GLES3 header. -package pfngernerator; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.util.Scanner; - -public class PfnGernerator { - private static Scanner headerScanner; - private static final String GL_APIENTRY_STR = "GL_APIENTRY"; - public static void main(String[] args) throws FileNotFoundException { - // replace with your own NDK - FileInputStream headerStream = new FileInputStream("/home/maks/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/GLES3/gl3.h"); - headerScanner = new Scanner(headerStream); - String line = headerScanner.nextLine(); - StringBuilder es3FuncInclude = new StringBuilder(); - - while(headerScanner.hasNextLine()) { - if(isGLFunction(line)) { - String functionName = getFunctionName(line); - es3FuncInclude.append("\nGLESFUNC(") - .append(functionName) - .append(",PFN") - .append(functionName.toUpperCase()) - .append("PROC)"); - } - line = headerScanner.nextLine(); - } - System.out.println(es3FuncInclude); - } - - public static String getFunctionName(String line) { - int beginIndex = line.indexOf(GL_APIENTRY_STR); - beginIndex += GL_APIENTRY_STR.length() + 1; - int endIndex = line.indexOf(' ', beginIndex); - String name = line.substring(beginIndex, endIndex); - return name; - } - - public static boolean isGLFunction(String line) { - return line.contains("GL_APICALL") && line.contains(GL_APIENTRY_STR); - } -} - */ - -GLESFUNC(glActiveTexture,PFNGLACTIVETEXTUREPROC) -GLESFUNC(glAttachShader,PFNGLATTACHSHADERPROC) -GLESFUNC(glBindAttribLocation,PFNGLBINDATTRIBLOCATIONPROC) -GLESFUNC(glBindBuffer,PFNGLBINDBUFFERPROC) -GLESFUNC(glBindFramebuffer,PFNGLBINDFRAMEBUFFERPROC) -GLESFUNC(glBindRenderbuffer,PFNGLBINDRENDERBUFFERPROC) -GLESFUNC(glBindTexture,PFNGLBINDTEXTUREPROC) -GLESFUNC(glBlendColor,PFNGLBLENDCOLORPROC) -GLESFUNC(glBlendEquation,PFNGLBLENDEQUATIONPROC) -GLESFUNC(glBlendEquationSeparate,PFNGLBLENDEQUATIONSEPARATEPROC) -GLESFUNC(glBlendFunc,PFNGLBLENDFUNCPROC) -GLESFUNC(glBlendFuncSeparate,PFNGLBLENDFUNCSEPARATEPROC) -GLESFUNC(glBufferData,PFNGLBUFFERDATAPROC) -GLESFUNC(glBufferSubData,PFNGLBUFFERSUBDATAPROC) -GLESFUNC(glCheckFramebufferStatus,PFNGLCHECKFRAMEBUFFERSTATUSPROC) -GLESFUNC(glClear,PFNGLCLEARPROC) -GLESFUNC(glClearColor,PFNGLCLEARCOLORPROC) -GLESFUNC(glClearDepthf,PFNGLCLEARDEPTHFPROC) -GLESFUNC(glClearStencil,PFNGLCLEARSTENCILPROC) -GLESFUNC(glColorMask,PFNGLCOLORMASKPROC) -GLESFUNC(glCompileShader,PFNGLCOMPILESHADERPROC) -GLESFUNC(glCompressedTexImage2D,PFNGLCOMPRESSEDTEXIMAGE2DPROC) -GLESFUNC(glCompressedTexSubImage2D,PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) -GLESFUNC(glCopyTexImage2D,PFNGLCOPYTEXIMAGE2DPROC) -GLESFUNC(glCopyTexSubImage2D,PFNGLCOPYTEXSUBIMAGE2DPROC) -GLESFUNC(glCreateProgram,PFNGLCREATEPROGRAMPROC) -GLESFUNC(glCreateShader,PFNGLCREATESHADERPROC) -GLESFUNC(glCullFace,PFNGLCULLFACEPROC) -GLESFUNC(glDeleteBuffers,PFNGLDELETEBUFFERSPROC) -GLESFUNC(glDeleteFramebuffers,PFNGLDELETEFRAMEBUFFERSPROC) -GLESFUNC(glDeleteProgram,PFNGLDELETEPROGRAMPROC) -GLESFUNC(glDeleteRenderbuffers,PFNGLDELETERENDERBUFFERSPROC) -GLESFUNC(glDeleteShader,PFNGLDELETESHADERPROC) -GLESFUNC(glDeleteTextures,PFNGLDELETETEXTURESPROC) -GLESFUNC(glDepthFunc,PFNGLDEPTHFUNCPROC) -GLESFUNC(glDepthMask,PFNGLDEPTHMASKPROC) -GLESFUNC(glDepthRangef,PFNGLDEPTHRANGEFPROC) -GLESFUNC(glDetachShader,PFNGLDETACHSHADERPROC) -GLESFUNC(glDisable,PFNGLDISABLEPROC) -GLESFUNC(glDisableVertexAttribArray,PFNGLDISABLEVERTEXATTRIBARRAYPROC) -GLESFUNC(glDrawArrays,PFNGLDRAWARRAYSPROC) -GLESFUNC(glDrawElements,PFNGLDRAWELEMENTSPROC) -GLESFUNC(glEnable,PFNGLENABLEPROC) -GLESFUNC(glEnableVertexAttribArray,PFNGLENABLEVERTEXATTRIBARRAYPROC) -GLESFUNC(glFinish,PFNGLFINISHPROC) -GLESFUNC(glFlush,PFNGLFLUSHPROC) -GLESFUNC(glFramebufferRenderbuffer,PFNGLFRAMEBUFFERRENDERBUFFERPROC) -GLESFUNC(glFramebufferTexture2D,PFNGLFRAMEBUFFERTEXTURE2DPROC) -GLESFUNC(glFrontFace,PFNGLFRONTFACEPROC) -GLESFUNC(glGenBuffers,PFNGLGENBUFFERSPROC) -GLESFUNC(glGenerateMipmap,PFNGLGENERATEMIPMAPPROC) -GLESFUNC(glGenFramebuffers,PFNGLGENFRAMEBUFFERSPROC) -GLESFUNC(glGenRenderbuffers,PFNGLGENRENDERBUFFERSPROC) -GLESFUNC(glGenTextures,PFNGLGENTEXTURESPROC) -GLESFUNC(glGetActiveAttrib,PFNGLGETACTIVEATTRIBPROC) -GLESFUNC(glGetActiveUniform,PFNGLGETACTIVEUNIFORMPROC) -GLESFUNC(glGetAttachedShaders,PFNGLGETATTACHEDSHADERSPROC) -GLESFUNC(glGetAttribLocation,PFNGLGETATTRIBLOCATIONPROC) -GLESFUNC(glGetBooleanv,PFNGLGETBOOLEANVPROC) -GLESFUNC(glGetBufferParameteriv,PFNGLGETBUFFERPARAMETERIVPROC) -GLESFUNC(glGetError,PFNGLGETERRORPROC) -GLESFUNC(glGetFloatv,PFNGLGETFLOATVPROC) -GLESFUNC(glGetFramebufferAttachmentParameteriv,PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) -GLESFUNC(glGetIntegerv,PFNGLGETINTEGERVPROC) -GLESFUNC(glGetProgramiv,PFNGLGETPROGRAMIVPROC) -GLESFUNC(glGetProgramInfoLog,PFNGLGETPROGRAMINFOLOGPROC) -GLESFUNC(glGetRenderbufferParameteriv,PFNGLGETRENDERBUFFERPARAMETERIVPROC) -GLESFUNC(glGetShaderiv,PFNGLGETSHADERIVPROC) -GLESFUNC(glGetShaderInfoLog,PFNGLGETSHADERINFOLOGPROC) -GLESFUNC(glGetShaderPrecisionFormat,PFNGLGETSHADERPRECISIONFORMATPROC) -GLESFUNC(glGetShaderSource,PFNGLGETSHADERSOURCEPROC) -GLESFUNC(glGetString,PFNGLGETSTRINGPROC) -GLESFUNC(glGetTexParameterfv,PFNGLGETTEXPARAMETERFVPROC) -GLESFUNC(glGetTexParameteriv,PFNGLGETTEXPARAMETERIVPROC) -GLESFUNC(glGetUniformfv,PFNGLGETUNIFORMFVPROC) -GLESFUNC(glGetUniformiv,PFNGLGETUNIFORMIVPROC) -GLESFUNC(glGetUniformLocation,PFNGLGETUNIFORMLOCATIONPROC) -GLESFUNC(glGetVertexAttribfv,PFNGLGETVERTEXATTRIBFVPROC) -GLESFUNC(glGetVertexAttribiv,PFNGLGETVERTEXATTRIBIVPROC) -GLESFUNC(glGetVertexAttribPointerv,PFNGLGETVERTEXATTRIBPOINTERVPROC) -GLESFUNC(glHint,PFNGLHINTPROC) -GLESFUNC(glIsBuffer,PFNGLISBUFFERPROC) -GLESFUNC(glIsEnabled,PFNGLISENABLEDPROC) -GLESFUNC(glIsFramebuffer,PFNGLISFRAMEBUFFERPROC) -GLESFUNC(glIsProgram,PFNGLISPROGRAMPROC) -GLESFUNC(glIsRenderbuffer,PFNGLISRENDERBUFFERPROC) -GLESFUNC(glIsShader,PFNGLISSHADERPROC) -GLESFUNC(glIsTexture,PFNGLISTEXTUREPROC) -GLESFUNC(glLineWidth,PFNGLLINEWIDTHPROC) -GLESFUNC(glLinkProgram,PFNGLLINKPROGRAMPROC) -GLESFUNC(glPixelStorei,PFNGLPIXELSTOREIPROC) -GLESFUNC(glPolygonOffset,PFNGLPOLYGONOFFSETPROC) -GLESFUNC(glReadPixels,PFNGLREADPIXELSPROC) -GLESFUNC(glReleaseShaderCompiler,PFNGLRELEASESHADERCOMPILERPROC) -GLESFUNC(glRenderbufferStorage,PFNGLRENDERBUFFERSTORAGEPROC) -GLESFUNC(glSampleCoverage,PFNGLSAMPLECOVERAGEPROC) -GLESFUNC(glScissor,PFNGLSCISSORPROC) -GLESFUNC(glShaderBinary,PFNGLSHADERBINARYPROC) -GLESFUNC(glShaderSource,PFNGLSHADERSOURCEPROC) -GLESFUNC(glStencilFunc,PFNGLSTENCILFUNCPROC) -GLESFUNC(glStencilFuncSeparate,PFNGLSTENCILFUNCSEPARATEPROC) -GLESFUNC(glStencilMask,PFNGLSTENCILMASKPROC) -GLESFUNC(glStencilMaskSeparate,PFNGLSTENCILMASKSEPARATEPROC) -GLESFUNC(glStencilOp,PFNGLSTENCILOPPROC) -GLESFUNC(glStencilOpSeparate,PFNGLSTENCILOPSEPARATEPROC) -GLESFUNC(glTexImage2D,PFNGLTEXIMAGE2DPROC) -GLESFUNC(glTexParameterf,PFNGLTEXPARAMETERFPROC) -GLESFUNC(glTexParameterfv,PFNGLTEXPARAMETERFVPROC) -GLESFUNC(glTexParameteri,PFNGLTEXPARAMETERIPROC) -GLESFUNC(glTexParameteriv,PFNGLTEXPARAMETERIVPROC) -GLESFUNC(glTexSubImage2D,PFNGLTEXSUBIMAGE2DPROC) -GLESFUNC(glUniform1f,PFNGLUNIFORM1FPROC) -GLESFUNC(glUniform1fv,PFNGLUNIFORM1FVPROC) -GLESFUNC(glUniform1i,PFNGLUNIFORM1IPROC) -GLESFUNC(glUniform1iv,PFNGLUNIFORM1IVPROC) -GLESFUNC(glUniform2f,PFNGLUNIFORM2FPROC) -GLESFUNC(glUniform2fv,PFNGLUNIFORM2FVPROC) -GLESFUNC(glUniform2i,PFNGLUNIFORM2IPROC) -GLESFUNC(glUniform2iv,PFNGLUNIFORM2IVPROC) -GLESFUNC(glUniform3f,PFNGLUNIFORM3FPROC) -GLESFUNC(glUniform3fv,PFNGLUNIFORM3FVPROC) -GLESFUNC(glUniform3i,PFNGLUNIFORM3IPROC) -GLESFUNC(glUniform3iv,PFNGLUNIFORM3IVPROC) -GLESFUNC(glUniform4f,PFNGLUNIFORM4FPROC) -GLESFUNC(glUniform4fv,PFNGLUNIFORM4FVPROC) -GLESFUNC(glUniform4i,PFNGLUNIFORM4IPROC) -GLESFUNC(glUniform4iv,PFNGLUNIFORM4IVPROC) -GLESFUNC(glUniformMatrix2fv,PFNGLUNIFORMMATRIX2FVPROC) -GLESFUNC(glUniformMatrix3fv,PFNGLUNIFORMMATRIX3FVPROC) -GLESFUNC(glUniformMatrix4fv,PFNGLUNIFORMMATRIX4FVPROC) -GLESFUNC(glUseProgram,PFNGLUSEPROGRAMPROC) -GLESFUNC(glValidateProgram,PFNGLVALIDATEPROGRAMPROC) -GLESFUNC(glVertexAttrib1f,PFNGLVERTEXATTRIB1FPROC) -GLESFUNC(glVertexAttrib1fv,PFNGLVERTEXATTRIB1FVPROC) -GLESFUNC(glVertexAttrib2f,PFNGLVERTEXATTRIB2FPROC) -GLESFUNC(glVertexAttrib2fv,PFNGLVERTEXATTRIB2FVPROC) -GLESFUNC(glVertexAttrib3f,PFNGLVERTEXATTRIB3FPROC) -GLESFUNC(glVertexAttrib3fv,PFNGLVERTEXATTRIB3FVPROC) -GLESFUNC(glVertexAttrib4f,PFNGLVERTEXATTRIB4FPROC) -GLESFUNC(glVertexAttrib4fv,PFNGLVERTEXATTRIB4FVPROC) -GLESFUNC(glVertexAttribPointer,PFNGLVERTEXATTRIBPOINTERPROC) -GLESFUNC(glViewport,PFNGLVIEWPORTPROC) -GLESFUNC(glReadBuffer,PFNGLREADBUFFERPROC) -GLESFUNC(glDrawRangeElements,PFNGLDRAWRANGEELEMENTSPROC) -GLESFUNC(glTexImage3D,PFNGLTEXIMAGE3DPROC) -GLESFUNC(glTexSubImage3D,PFNGLTEXSUBIMAGE3DPROC) -GLESFUNC(glCopyTexSubImage3D,PFNGLCOPYTEXSUBIMAGE3DPROC) -GLESFUNC(glCompressedTexImage3D,PFNGLCOMPRESSEDTEXIMAGE3DPROC) -GLESFUNC(glCompressedTexSubImage3D,PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) -GLESFUNC(glGenQueries,PFNGLGENQUERIESPROC) -GLESFUNC(glDeleteQueries,PFNGLDELETEQUERIESPROC) -GLESFUNC(glIsQuery,PFNGLISQUERYPROC) -GLESFUNC(glBeginQuery,PFNGLBEGINQUERYPROC) -GLESFUNC(glEndQuery,PFNGLENDQUERYPROC) -GLESFUNC(glGetQueryiv,PFNGLGETQUERYIVPROC) -GLESFUNC(glGetQueryObjectuiv,PFNGLGETQUERYOBJECTUIVPROC) -GLESFUNC(glUnmapBuffer,PFNGLUNMAPBUFFERPROC) -GLESFUNC(glGetBufferPointerv,PFNGLGETBUFFERPOINTERVPROC) -GLESFUNC(glDrawBuffers,PFNGLDRAWBUFFERSPROC) -GLESFUNC(glUniformMatrix2x3fv,PFNGLUNIFORMMATRIX2X3FVPROC) -GLESFUNC(glUniformMatrix3x2fv,PFNGLUNIFORMMATRIX3X2FVPROC) -GLESFUNC(glUniformMatrix2x4fv,PFNGLUNIFORMMATRIX2X4FVPROC) -GLESFUNC(glUniformMatrix4x2fv,PFNGLUNIFORMMATRIX4X2FVPROC) -GLESFUNC(glUniformMatrix3x4fv,PFNGLUNIFORMMATRIX3X4FVPROC) -GLESFUNC(glUniformMatrix4x3fv,PFNGLUNIFORMMATRIX4X3FVPROC) -GLESFUNC(glBlitFramebuffer,PFNGLBLITFRAMEBUFFERPROC) -GLESFUNC(glRenderbufferStorageMultisample,PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) -GLESFUNC(glFramebufferTextureLayer,PFNGLFRAMEBUFFERTEXTURELAYERPROC) -GLESFUNC(glMapBufferRange,PFNGLMAPBUFFERRANGEPROC) -GLESFUNC(glFlushMappedBufferRange,PFNGLFLUSHMAPPEDBUFFERRANGEPROC) -GLESFUNC(glBindVertexArray,PFNGLBINDVERTEXARRAYPROC) -GLESFUNC(glDeleteVertexArrays,PFNGLDELETEVERTEXARRAYSPROC) -GLESFUNC(glGenVertexArrays,PFNGLGENVERTEXARRAYSPROC) -GLESFUNC(glIsVertexArray,PFNGLISVERTEXARRAYPROC) -GLESFUNC(glGetIntegeri_v,PFNGLGETINTEGERI_VPROC) -GLESFUNC(glBeginTransformFeedback,PFNGLBEGINTRANSFORMFEEDBACKPROC) -GLESFUNC(glEndTransformFeedback,PFNGLENDTRANSFORMFEEDBACKPROC) -GLESFUNC(glBindBufferRange,PFNGLBINDBUFFERRANGEPROC) -GLESFUNC(glBindBufferBase,PFNGLBINDBUFFERBASEPROC) -GLESFUNC(glTransformFeedbackVaryings,PFNGLTRANSFORMFEEDBACKVARYINGSPROC) -GLESFUNC(glGetTransformFeedbackVarying,PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) -GLESFUNC(glVertexAttribIPointer,PFNGLVERTEXATTRIBIPOINTERPROC) -GLESFUNC(glGetVertexAttribIiv,PFNGLGETVERTEXATTRIBIIVPROC) -GLESFUNC(glGetVertexAttribIuiv,PFNGLGETVERTEXATTRIBIUIVPROC) -GLESFUNC(glVertexAttribI4i,PFNGLVERTEXATTRIBI4IPROC) -GLESFUNC(glVertexAttribI4ui,PFNGLVERTEXATTRIBI4UIPROC) -GLESFUNC(glVertexAttribI4iv,PFNGLVERTEXATTRIBI4IVPROC) -GLESFUNC(glVertexAttribI4uiv,PFNGLVERTEXATTRIBI4UIVPROC) -GLESFUNC(glGetUniformuiv,PFNGLGETUNIFORMUIVPROC) -GLESFUNC(glGetFragDataLocation,PFNGLGETFRAGDATALOCATIONPROC) -GLESFUNC(glUniform1ui,PFNGLUNIFORM1UIPROC) -GLESFUNC(glUniform2ui,PFNGLUNIFORM2UIPROC) -GLESFUNC(glUniform3ui,PFNGLUNIFORM3UIPROC) -GLESFUNC(glUniform4ui,PFNGLUNIFORM4UIPROC) -GLESFUNC(glUniform1uiv,PFNGLUNIFORM1UIVPROC) -GLESFUNC(glUniform2uiv,PFNGLUNIFORM2UIVPROC) -GLESFUNC(glUniform3uiv,PFNGLUNIFORM3UIVPROC) -GLESFUNC(glUniform4uiv,PFNGLUNIFORM4UIVPROC) -GLESFUNC(glClearBufferiv,PFNGLCLEARBUFFERIVPROC) -GLESFUNC(glClearBufferuiv,PFNGLCLEARBUFFERUIVPROC) -GLESFUNC(glClearBufferfv,PFNGLCLEARBUFFERFVPROC) -GLESFUNC(glClearBufferfi,PFNGLCLEARBUFFERFIPROC) -GLESFUNC(glGetStringi,PFNGLGETSTRINGIPROC) -GLESFUNC(glCopyBufferSubData,PFNGLCOPYBUFFERSUBDATAPROC) -GLESFUNC(glGetUniformIndices,PFNGLGETUNIFORMINDICESPROC) -GLESFUNC(glGetActiveUniformsiv,PFNGLGETACTIVEUNIFORMSIVPROC) -GLESFUNC(glGetUniformBlockIndex,PFNGLGETUNIFORMBLOCKINDEXPROC) -GLESFUNC(glGetActiveUniformBlockiv,PFNGLGETACTIVEUNIFORMBLOCKIVPROC) -GLESFUNC(glGetActiveUniformBlockName,PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) -GLESFUNC(glUniformBlockBinding,PFNGLUNIFORMBLOCKBINDINGPROC) -GLESFUNC(glDrawArraysInstanced,PFNGLDRAWARRAYSINSTANCEDPROC) -GLESFUNC(glDrawElementsInstanced,PFNGLDRAWELEMENTSINSTANCEDPROC) -GLESFUNC(glFenceSync,PFNGLFENCESYNCPROC) -GLESFUNC(glIsSync,PFNGLISSYNCPROC) -GLESFUNC(glDeleteSync,PFNGLDELETESYNCPROC) -GLESFUNC(glClientWaitSync,PFNGLCLIENTWAITSYNCPROC) -GLESFUNC(glWaitSync,PFNGLWAITSYNCPROC) -GLESFUNC(glGetInteger64v,PFNGLGETINTEGER64VPROC) -GLESFUNC(glGetSynciv,PFNGLGETSYNCIVPROC) -GLESFUNC(glGetInteger64i_v,PFNGLGETINTEGER64I_VPROC) -GLESFUNC(glGetBufferParameteri64v,PFNGLGETBUFFERPARAMETERI64VPROC) -GLESFUNC(glGenSamplers,PFNGLGENSAMPLERSPROC) -GLESFUNC(glDeleteSamplers,PFNGLDELETESAMPLERSPROC) -GLESFUNC(glIsSampler,PFNGLISSAMPLERPROC) -GLESFUNC(glBindSampler,PFNGLBINDSAMPLERPROC) -GLESFUNC(glSamplerParameteri,PFNGLSAMPLERPARAMETERIPROC) -GLESFUNC(glSamplerParameteriv,PFNGLSAMPLERPARAMETERIVPROC) -GLESFUNC(glSamplerParameterf,PFNGLSAMPLERPARAMETERFPROC) -GLESFUNC(glSamplerParameterfv,PFNGLSAMPLERPARAMETERFVPROC) -GLESFUNC(glGetSamplerParameteriv,PFNGLGETSAMPLERPARAMETERIVPROC) -GLESFUNC(glGetSamplerParameterfv,PFNGLGETSAMPLERPARAMETERFVPROC) -GLESFUNC(glVertexAttribDivisor,PFNGLVERTEXATTRIBDIVISORPROC) -GLESFUNC(glBindTransformFeedback,PFNGLBINDTRANSFORMFEEDBACKPROC) -GLESFUNC(glDeleteTransformFeedbacks,PFNGLDELETETRANSFORMFEEDBACKSPROC) -GLESFUNC(glGenTransformFeedbacks,PFNGLGENTRANSFORMFEEDBACKSPROC) -GLESFUNC(glIsTransformFeedback,PFNGLISTRANSFORMFEEDBACKPROC) -GLESFUNC(glPauseTransformFeedback,PFNGLPAUSETRANSFORMFEEDBACKPROC) -GLESFUNC(glResumeTransformFeedback,PFNGLRESUMETRANSFORMFEEDBACKPROC) -GLESFUNC(glGetProgramBinary,PFNGLGETPROGRAMBINARYPROC) -GLESFUNC(glProgramBinary,PFNGLPROGRAMBINARYPROC) -GLESFUNC(glProgramParameteri,PFNGLPROGRAMPARAMETERIPROC) -GLESFUNC(glInvalidateFramebuffer,PFNGLINVALIDATEFRAMEBUFFERPROC) -GLESFUNC(glInvalidateSubFramebuffer,PFNGLINVALIDATESUBFRAMEBUFFERPROC) -GLESFUNC(glTexStorage2D,PFNGLTEXSTORAGE2DPROC) -GLESFUNC(glTexStorage3D,PFNGLTEXSTORAGE3DPROC) -GLESFUNC(glGetInternalformativ,PFNGLGETINTERNALFORMATIVPROC) -//BUILD SUCCESSFUL (total time: 0 seconds) diff --git a/ltw/src/main/tinywrapper/es3_overrides.h b/ltw/src/main/tinywrapper/es3_overrides.h deleted file mode 100644 index 67f1115..0000000 --- a/ltw/src/main/tinywrapper/es3_overrides.h +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ -void glClearDepth(double depth); -void* glMapBuffer(GLenum target, GLenum access); -void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params); -void glDebugMessageControl( GLenum source, - GLenum type, - GLenum severity, - GLsizei count, - const GLuint *ids, - GLboolean enabled); -void glMultiDrawElementsBaseVertex( GLenum mode, - const GLsizei *count, - GLenum type, - const void * const *indices, - GLsizei drawcount, - const GLint *basevertex); -void glBindFragDataLocation(GLuint program, - GLuint colorNumber, - const char * name); -void glGetTexImage( GLenum target, - GLint level, - GLenum format, - GLenum type, - void * pixels); - -void glGetQueryObjectiv( GLuint id, - GLenum pname, - GLint * params); - -void glDepthRange(GLdouble nearVal, - GLdouble farVal); - -GLESOVERRIDE(glClearDepth) -GLESOVERRIDE(glMapBuffer) -GLESOVERRIDE(glGetTexLevelParameteriv) -GLESOVERRIDE(glGetTexLevelParameterfv) -GLESOVERRIDE(glCreateShader) -GLESOVERRIDE(glDeleteShader) -GLESOVERRIDE(glCreateProgram) -GLESOVERRIDE(glDeleteProgram) -GLESOVERRIDE(glLinkProgram) -GLESOVERRIDE(glAttachShader) -GLESOVERRIDE(glGetShaderiv) -GLESOVERRIDE(glShaderSource) -GLESOVERRIDE(glTexImage2D) -GLESOVERRIDE(glDebugMessageControl) -GLESOVERRIDE(glGetString) -GLESOVERRIDE(glEnable) -GLESOVERRIDE(glMultiDrawArrays) -GLESOVERRIDE(glMultiDrawElements) -GLESOVERRIDE(glMultiDrawElementsBaseVertex) -GLESOVERRIDE(glBindBufferBase) -GLESOVERRIDE(glBindBufferRange) -GLESOVERRIDE(glBindBuffer) -GLESOVERRIDE(glUseProgram) -GLESOVERRIDE(glGetIntegerv) -GLESOVERRIDE(glBindFramebuffer) -GLESOVERRIDE(glGenFramebuffers) -GLESOVERRIDE(glDeleteFramebuffers) -GLESOVERRIDE(glFramebufferTexture2D) -GLESOVERRIDE(glFramebufferTextureLayer) -GLESOVERRIDE(glFramebufferRenderbuffer) -GLESOVERRIDE(glGetFramebufferAttachmentParameteriv) -GLESOVERRIDE(glDrawBuffers) -GLESOVERRIDE(glDrawBuffer) -GLESOVERRIDE(glClearBufferiv) -GLESOVERRIDE(glClearBufferuiv) -GLESOVERRIDE(glClearBufferfv) -GLESOVERRIDE(glCheckFramebufferStatus) -GLESOVERRIDE(glReadPixels) -GLESOVERRIDE(glTexSubImage2D) -GLESOVERRIDE(glCopyTexSubImage2D) -GLESOVERRIDE(glTexParameteri) -GLESOVERRIDE(glBindFragDataLocation) -GLESOVERRIDE(glGetTexImage) -GLESOVERRIDE(glGetQueryObjectiv) -GLESOVERRIDE(glDepthRange) -GLESOVERRIDE(glVertexAttrib1d) -GLESOVERRIDE(glVertexAttrib1dv) -GLESOVERRIDE(glVertexAttrib1s) -GLESOVERRIDE(glVertexAttrib1sv) -GLESOVERRIDE(glVertexAttrib2d) -GLESOVERRIDE(glVertexAttrib2dv) -GLESOVERRIDE(glVertexAttrib2s) -GLESOVERRIDE(glVertexAttrib2sv) -GLESOVERRIDE(glVertexAttrib3d) -GLESOVERRIDE(glVertexAttrib3dv) -GLESOVERRIDE(glVertexAttrib3s) -GLESOVERRIDE(glVertexAttrib3sv) -GLESOVERRIDE(glVertexAttrib4d) -GLESOVERRIDE(glVertexAttrib4dv) -GLESOVERRIDE(glVertexAttrib4s) -GLESOVERRIDE(glVertexAttrib4sv) -GLESOVERRIDE(glVertexAttrib4Nbv) -GLESOVERRIDE(glVertexAttrib4Niv) -GLESOVERRIDE(glVertexAttrib4Nsv) -GLESOVERRIDE(glVertexAttrib4Nub) -GLESOVERRIDE(glVertexAttrib4Nubv) -GLESOVERRIDE(glVertexAttrib4Nuiv) -GLESOVERRIDE(glVertexAttrib4Nusv) -GLESOVERRIDE(glVertexAttribI1i) -GLESOVERRIDE(glVertexAttribI1iv) -GLESOVERRIDE(glVertexAttribI1ui) -GLESOVERRIDE(glVertexAttribI1uiv) -GLESOVERRIDE(glVertexAttribI2i) -GLESOVERRIDE(glVertexAttribI2iv) -GLESOVERRIDE(glVertexAttribI2ui) -GLESOVERRIDE(glVertexAttribI2uiv) -GLESOVERRIDE(glVertexAttribI3i) -GLESOVERRIDE(glVertexAttribI3iv) -GLESOVERRIDE(glVertexAttribI3ui) -GLESOVERRIDE(glVertexAttribI3uiv) -GLESOVERRIDE(glVertexAttribI4bv) -GLESOVERRIDE(glVertexAttribI4ubv) -GLESOVERRIDE(glVertexAttribI4sv) -GLESOVERRIDE(glVertexAttribI4usv) -GLESOVERRIDE(glBufferStorage) -GLESOVERRIDE(glGetStringi) -GLESOVERRIDE(glTexParameterf) -GLESOVERRIDE(glTexParameteri) -GLESOVERRIDE(glTexParameterfv) -GLESOVERRIDE(glTexParameteriv) -GLESOVERRIDE(glTexParameterIiv) -GLESOVERRIDE(glTexParameterIuiv) -GLESOVERRIDE(glRenderbufferStorage) -GLESOVERRIDE(glGetError) -GLESOVERRIDE(glTexBuffer) -GLESOVERRIDE(glTexBufferRange) -GLESOVERRIDE(glMapBufferRange) -GLESOVERRIDE(glFlushMappedBufferRange) \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/framebuffer.c b/ltw/src/main/tinywrapper/framebuffer.c deleted file mode 100644 index 10691b2..0000000 --- a/ltw/src/main/tinywrapper/framebuffer.c +++ /dev/null @@ -1,300 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#include "proc.h" -#include "egl.h" -#include - -static framebuffer_t* get_framebuffer(GLenum target) { - GLuint fb; - switch (target) { - case GL_FRAMEBUFFER: - case GL_DRAW_FRAMEBUFFER: fb = current_context->draw_framebuffer; break; - case GL_READ_FRAMEBUFFER: fb = current_context->read_framebuffer; break; - } - return unordered_map_get(current_context->framebuffer_map, (void*)fb); -} - -static GLuint get_attachment_idx(GLenum attachment) { - if(attachment == GL_DEPTH_ATTACHMENT || - attachment == GL_STENCIL_ATTACHMENT || - attachment == GL_DEPTH_STENCIL_ATTACHMENT || - attachment == GL_NONE) return -1; - GLuint idx = attachment - GL_COLOR_ATTACHMENT0; - if(idx >= current_context->max_drawbuffers) return -1; - return idx; -} - -static GLenum map_attachment(framebuffer_t* framebuffer, GLenum attachment) { - for(GLsizei i = 0; i < framebuffer->nbuffers; i++) { - if(framebuffer->virt_drawbuffers[i] == attachment) { - return i + GL_COLOR_ATTACHMENT0; - } - } - return GL_NONE; -} - -void rebind_framebuffer(GLenum target, framebuffer_t *framebuffer, GLenum virt_attachment) { - GLuint virt_index = get_attachment_idx(virt_attachment); - if(virt_index == -1) return; - GLenum phys_attachment = map_attachment(framebuffer, virt_attachment); - if(phys_attachment == GL_NONE) return; - switch (framebuffer->color_targets[virt_index]) { - case GL_NONE: - es3_functions.glFramebufferRenderbuffer(target, phys_attachment, GL_RENDERBUFFER, 0); - break; - case GL_RENDERBUFFER: - es3_functions.glFramebufferRenderbuffer(target, phys_attachment, GL_RENDERBUFFER, framebuffer->color_objects[virt_index]); - break; - case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: - es3_functions.glFramebufferTextureLayer(target, phys_attachment, - framebuffer->color_objects[virt_index], - framebuffer->color_levels[virt_index], - framebuffer->color_layers[virt_index]); - break; - default: - es3_functions.glFramebufferTexture2D(target, phys_attachment, - framebuffer->color_targets[virt_index], - framebuffer->color_objects[virt_index], - framebuffer->color_levels[virt_index]); - break; - } -} - -void glClearBufferiv( GLenum buffer, - GLint drawBuffer, - const GLint * value) { - framebuffer_t *framebuffer = get_framebuffer(GL_DRAW_FRAMEBUFFER); - if(framebuffer && buffer == GL_COLOR) { - GLenum attachment = map_attachment(framebuffer, GL_COLOR_ATTACHMENT0 + drawBuffer); - drawBuffer = attachment - GL_COLOR_ATTACHMENT0; - } - es3_functions.glClearBufferiv(buffer, drawBuffer, value); -} - -void glClearBufferuiv( GLenum buffer, - GLint drawBuffer, - const GLuint * value) { - framebuffer_t *framebuffer = get_framebuffer(GL_DRAW_FRAMEBUFFER); - if(framebuffer && buffer == GL_COLOR) { - GLenum attachment = map_attachment(framebuffer, GL_COLOR_ATTACHMENT0 + drawBuffer); - drawBuffer = attachment - GL_COLOR_ATTACHMENT0; - } - es3_functions.glClearBufferuiv(buffer, drawBuffer, value); -} - -void glClearBufferfv( GLenum buffer, - GLint drawBuffer, - const GLfloat * value) { - framebuffer_t *framebuffer = get_framebuffer(GL_DRAW_FRAMEBUFFER); - if(framebuffer && buffer == GL_COLOR) { - GLenum attachment = map_attachment(framebuffer, GL_COLOR_ATTACHMENT0 + drawBuffer); - drawBuffer = attachment - GL_COLOR_ATTACHMENT0; - } - es3_functions.glClearBufferfv(buffer, drawBuffer, value); -} - -void glDrawBuffers(GLsizei n, const GLenum* buffers) { - if(!current_context) return; - framebuffer_t *framebuffer = get_framebuffer(GL_DRAW_FRAMEBUFFER); - if(!framebuffer) { - es3_functions.glDrawBuffers(n, buffers); - return; - } - framebuffer->nbuffers = n; - memcpy(framebuffer->virt_drawbuffers, buffers, n * sizeof(GLenum)); - GLenum phys_drawbuffers[n]; - for(GLsizei i = 0; i < n; i++) { - GLenum buffer = buffers[i]; - rebind_framebuffer(GL_DRAW_FRAMEBUFFER, framebuffer, buffer); - if(buffer != GL_NONE) phys_drawbuffers[i] = GL_COLOR_ATTACHMENT0+i; - else phys_drawbuffers[i] = GL_NONE; - } - es3_functions.glDrawBuffers(n, phys_drawbuffers); -} - -void glDrawBuffer(GLenum buffer) { - glDrawBuffers(1, &buffer); -} - -GLenum glCheckFramebufferStatus( GLenum target) { - if(!current_context) return GL_FRAMEBUFFER_UNDEFINED; - GLenum framebuffer_status = es3_functions.glCheckFramebufferStatus(target); - if(framebuffer_status == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) { - framebuffer_t *framebuffer = get_framebuffer(target); - for(GLint i = 0; i < MAX_FBTARGETS; i++) { - // At least one color target found, means we just optimized out all color targets on the physical device - // This will come back to normal after a call to `glDrawBuffers` if only the secondary buffers are in use. - if(framebuffer->color_targets[i] != GL_NONE || framebuffer->color_objects[i] != 0) return GL_FRAMEBUFFER_COMPLETE; - } - return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; - } - return framebuffer_status; -} - -void glFramebufferTexture2D( GLenum target, - GLenum attachment, - GLenum textarget, - GLuint texture, - GLint level) { - if(!current_context) return; - framebuffer_t *framebuffer = get_framebuffer(target); - GLuint attachment_idx = get_attachment_idx(attachment); - if(!framebuffer || attachment_idx == -1) { - es3_functions.glFramebufferTexture2D(target, attachment, textarget, texture, level); - return; - } - if(texture == 0) { - framebuffer->color_targets[attachment_idx] = GL_NONE; - goto rebind; - } - framebuffer->color_targets[attachment_idx] = textarget; - framebuffer->color_objects[attachment_idx] = texture; - framebuffer->color_levels[attachment_idx] = level; - rebind: - rebind_framebuffer(target, framebuffer, attachment); -} - -void glFramebufferTextureLayer( GLenum target, - GLenum attachment, - GLuint texture, - GLint level, GLint layer) { - if(!current_context) return; - framebuffer_t *framebuffer = get_framebuffer(target); - GLuint attachment_idx = get_attachment_idx(attachment); - if(!framebuffer || attachment_idx == -1) { - es3_functions.glFramebufferTextureLayer(target, attachment, texture, level, layer); - return; - } - if(texture == 0) { - framebuffer->color_targets[attachment_idx] = GL_NONE; - goto rebind; - } - // I know that this is not a real target, we just need something to put there for the if conditions - framebuffer->color_targets[attachment_idx] = GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER; - framebuffer->color_objects[attachment_idx] = texture; - framebuffer->color_levels[attachment_idx] = level; - framebuffer->color_layers[attachment_idx] = layer; - rebind: - rebind_framebuffer(target, framebuffer, attachment); -} - -void glFramebufferRenderbuffer( GLenum target, - GLenum attachment, - GLenum renderbuffertarget, - GLuint renderbuffer) { - if(!current_context) return; - framebuffer_t *framebuffer = get_framebuffer(target); - GLuint attachment_idx = get_attachment_idx(attachment); - if(!framebuffer || attachment_idx == -1) { - es3_functions.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); - return; - } - if(renderbuffer == 0) { - framebuffer->color_targets[attachment_idx] = GL_NONE; - goto rebind; - } - framebuffer->color_targets[attachment_idx] = renderbuffertarget; - framebuffer->color_objects[attachment_idx] = renderbuffer; - rebind: - rebind_framebuffer(target, framebuffer, attachment); -} - - -void glGetFramebufferAttachmentParameteriv(GLenum target, - GLenum attachment, - GLenum pname, - GLint *params) { - if(!current_context) return; - framebuffer_t *framebuffer = get_framebuffer(target); - GLuint attachment_idx = get_attachment_idx(attachment); - if(!framebuffer || attachment_idx == -1) { - es3_functions.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); - return; - } - GLenum fb_target = framebuffer->color_targets[attachment_idx]; - switch (pname) { - case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: - switch (fb_target) { - case GL_NONE: *params = GL_NONE; break; - case GL_RENDERBUFFER: *params = GL_RENDERBUFFER; break; - default: - *params = GL_TEXTURE; - break; - } - break; - case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: - if(fb_target == GL_NONE) { *params = 0; break; } - *params = (GLint)framebuffer->color_objects[attachment_idx]; - break; - case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: - if(fb_target == GL_NONE || fb_target == GL_RENDERBUFFER) { *params = 0; break; } - *params = framebuffer->color_levels[attachment_idx]; - break; - case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: - if(fb_target != GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER) { *params = 0; break; } - *params = framebuffer->color_layers[attachment_idx]; - break; - case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: - // Check if the cube map face is within the range of possible cube map face targets. Check GLES3/gl3.h to see why. - if(fb_target < GL_TEXTURE_CUBE_MAP_POSITIVE_X || fb_target > GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) { *params = 0; break; } - // The doc does not spacify how this should be sent, so ill just send the enum - *params = fb_target; - break; - case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: - case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: - case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: - case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: - case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: - case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: - printf("LTW: parameter %x is not implemented yet\n", pname); - *params = 0; - break; - default: - printf("LTW: parameter %x is not supported\n", pname); - *params = 0; - break; - } -} - -void glGenFramebuffers(GLsizei n, GLuint* framebuffers) { - if(!current_context) return; - es3_functions.glGenFramebuffers(n, framebuffers); - framebuffer_t* fb; - for(GLsizei i = 0; i < n; i++) { - fb = calloc(1, sizeof(framebuffer_t)); - fb->nbuffers = 1; - fb->virt_drawbuffers[0] = GL_COLOR_ATTACHMENT0; - unordered_map_put(current_context->framebuffer_map, (void*)framebuffers[i], fb); - } -} - -void glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) { - if(!current_context) return; - es3_functions.glDeleteFramebuffers(n, framebuffers); - framebuffer_t* fb; - for(GLsizei i = 0; i < n; i++) { - fb = unordered_map_remove(current_context->framebuffer_map, (void*)framebuffers[i]); - if(fb == NULL) continue; - free(fb); - } -} - -void glBindFramebuffer(GLenum target, GLuint framebuffer) { - if(!current_context) return; - es3_functions.glBindFramebuffer(target, framebuffer); - switch (target) { - case GL_FRAMEBUFFER: - current_context->read_framebuffer = current_context->draw_framebuffer = framebuffer; - break; - case GL_READ_FRAMEBUFFER: - current_context->read_framebuffer = framebuffer; - break; - case GL_DRAW_FRAMEBUFFER: - current_context->draw_framebuffer = framebuffer; - break; - } -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glformats.c b/ltw/src/main/tinywrapper/glformats.c deleted file mode 100644 index 262a041..0000000 --- a/ltw/src/main/tinywrapper/glformats.c +++ /dev/null @@ -1,325 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#include -#include "egl.h" -#include "glformats.h" -#include "libraryinternal.h" -#include "GL/gl.h" -#include - -static GLint pick_depth_internalformat(GLenum* type, bool* convert) { - switch (*type) { - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_INT: - return GL_DEPTH_COMPONENT16; - case GL_FLOAT: - return GL_DEPTH_COMPONENT32F; - default: - *convert = true; - *type = GL_UNSIGNED_SHORT; - return GL_DEPTH_COMPONENT16; - } -} - -static GLint pick_depth_stencil_internalformat(GLenum* type, bool* convert) { - switch (*type) { - case GL_UNSIGNED_INT_24_8: - return GL_DEPTH24_STENCIL8; - case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: - return GL_DEPTH32F_STENCIL8; - default: - *convert = true; - *type = GL_UNSIGNED_INT_24_8; - return GL_DEPTH24_STENCIL8; - } -} - -static GLint pick_red_internalformat(GLenum* type, bool* convert) { - switch(*type) { - case GL_BYTE: - return GL_R8_SNORM; - case GL_UNSIGNED_BYTE: - return GL_R8; - case GL_HALF_FLOAT: - return GL_R16F; - case GL_FLOAT: - return GL_R32F; - default: - *convert = true; - *type = GL_UNSIGNED_BYTE; - return GL_R8; - } -} - -static GLint pick_rg_internalformat(GLenum* type, bool* convert) { - switch(*type) { - case GL_BYTE: - return GL_RG8_SNORM; - case GL_UNSIGNED_BYTE: - return GL_RG8; - case GL_HALF_FLOAT: - return GL_RG16F; - case GL_FLOAT: - return GL_RG32F; - default: - *convert = true; - *type = GL_UNSIGNED_BYTE; - return GL_RG8; - } -} - -void pick_format(GLint *internalformat, GLenum* type, GLenum* format) { - // Workarounds! - switch (*internalformat) { - // Two legacy GL formats. From testing, OptiFine wants these to be floats. - case GL_RGBA12: - case GL_RGBA16: - *internalformat = GL_RGBA16F; - break; - // Always use 32-bit float depth for GL_DEPTH_COMPONENT, because the 16-bit depth buffer - // causes z-fighting in the distance - case GL_DEPTH_COMPONENT: - *internalformat = GL_DEPTH_COMPONENT32F; - break; - // This appears to be one of the legacy formats from the FPE days, and is not even - // listed in the format tables in 3.3 core. Still, MC uses it for the depth buffers. - case GL_DEPTH_COMPONENT32: - *internalformat = GL_DEPTH_COMPONENT32F; - break; - // Unsized depth-stencil. Not sure what uses it but we'll fall back to 24-bit + 8-bit stencil - case GL_DEPTH_STENCIL: - *internalformat = GL_DEPTH24_STENCIL8; - break; - // Color-renderability workarounds. Yes, those probably decrease performance but they sure do improve compatibility with shaderpacks! - // Ideally these should only be used on framebuffers, but whatever. - // In GL, the SNORM formats are color-renderable and support signed normalized values from -1 to 1. - // Sadly, the only alternative format with the same capabilities that *is* color-renderable in ES is 16-bit float. - // So, switch to that. - case GL_R8_SNORM: - *internalformat = GL_R16F; - case GL_RG8_SNORM: - *internalformat = GL_RG16F; - case GL_RGBA8_SNORM: - *internalformat = GL_RGBA16F; - break; - // Fun fact: the only color renderable formats in GLES that have 3 components are - // GL_R11F_G11F_B10F and GL_RGB8. And only GL_R11F_G11F_B10F supports signed values. - case GL_RGB8I: - case GL_RGB16I: - case GL_RGB32I: - case GL_RGB8_SNORM: - case GL_RGB12: - case GL_RGB16: - case GL_RGB16F: - case GL_RGB32F: - *internalformat = GL_R11F_G11F_B10F; - case GL_RGB8UI: - *internalformat = GL_RGB8; - break; - } - - // GLES 3.2 format table - switch (*internalformat) { - // Unsized formats. In this case we always prefer the "byte" versions of them (meaning 32bit/24bit color) - case GL_RGB: *format=GL_RGB; *type = GL_UNSIGNED_BYTE; break; - case GL_RGBA: *format=GL_RGBA; *type = GL_UNSIGNED_BYTE; break; - case GL_LUMINANCE_ALPHA: *format=GL_LUMINANCE_ALPHA; *type = GL_UNSIGNED_BYTE; break; - case GL_LUMINANCE: *format=GL_LUMINANCE; *type = GL_UNSIGNED_BYTE; break; - case GL_ALPHA: *format=GL_ALPHA; *type = GL_UNSIGNED_BYTE; break; - // Sized Formats - case GL_R8: *format=GL_RED; *type=GL_UNSIGNED_BYTE; break; - case GL_R8_SNORM: *format=GL_RED; *type=GL_BYTE; break; - case GL_R16F: *format=GL_RED; *type=GL_HALF_FLOAT; break; - case GL_R32F: *format=GL_RED; *type=GL_FLOAT; break; - case GL_R8UI: *format=GL_RED_INTEGER; *type=GL_UNSIGNED_BYTE; break; - case GL_R8I: *format=GL_RED_INTEGER; *type=GL_BYTE; break; - case GL_R16UI: *format=GL_RED_INTEGER; *type=GL_UNSIGNED_SHORT; break; - case GL_R16I: *format=GL_RED_INTEGER; *type=GL_SHORT; break; - case GL_R32UI: *format=GL_RED_INTEGER; *type=GL_UNSIGNED_INT; break; - case GL_R32I: *format=GL_RED_INTEGER; *type=GL_INT; break; - case GL_RG8: *format=GL_RG; *type=GL_UNSIGNED_BYTE; break; - case GL_RG8_SNORM: *format=GL_RG; *type=GL_BYTE; break; - case GL_RG16F: *format=GL_RG; *type=GL_HALF_FLOAT; break; - case GL_RG32F: *format=GL_RG; *type=GL_FLOAT; break; - case GL_RG8UI: *format=GL_RG_INTEGER; *type=GL_UNSIGNED_BYTE; break; - case GL_RG8I: *format=GL_RG_INTEGER; *type=GL_BYTE; break; - case GL_RG16UI: *format=GL_RG_INTEGER; *type=GL_UNSIGNED_SHORT; break; - case GL_RG16I: *format=GL_RG_INTEGER; *type=GL_SHORT; break; - case GL_RG32UI: *format=GL_RG_INTEGER; *type=GL_UNSIGNED_INT; break; - case GL_RG32I: *format=GL_RG_INTEGER; *type=GL_INT; break; - case GL_RGB8: *format=GL_RGB; *type=GL_UNSIGNED_BYTE; break; - case GL_SRGB8: *format=GL_RGB; *type=GL_UNSIGNED_BYTE; break; - case GL_RGB565: *format=GL_RGB; *type=GL_UNSIGNED_BYTE; break; - case GL_RGB8_SNORM: *format=GL_RGB; *type=GL_BYTE; break; - case GL_R11F_G11F_B10F: *format=GL_RGB; *type=GL_FLOAT; break; - case GL_RGB9_E5: *format=GL_RGB; *type=GL_UNSIGNED_INT_5_9_9_9_REV; break; - case GL_RGB16F: *format=GL_RGB; *type=GL_HALF_FLOAT; break; - case GL_RGB32F: *format=GL_RGB; *type=GL_FLOAT; break; - case GL_RGB8UI: *format=GL_RGB_INTEGER; *type=GL_UNSIGNED_BYTE; break; - case GL_RGB8I: *format=GL_RGB_INTEGER; *type=GL_BYTE; break; - case GL_RGB16UI: *format=GL_RGB_INTEGER; *type=GL_UNSIGNED_SHORT; break; - case GL_RGB16I: *format=GL_RGB_INTEGER; *type=GL_SHORT; break; - case GL_RGB32UI: *format=GL_RGB_INTEGER; *type=GL_UNSIGNED_INT; break; - case GL_RGB32I: *format=GL_RGB_INTEGER; *type=GL_INT; break; - case GL_RGBA8: *format=GL_RGBA; *type=GL_UNSIGNED_BYTE; break; - case GL_SRGB8_ALPHA8: *format=GL_RGBA; *type=GL_UNSIGNED_BYTE; break; - case GL_RGBA8_SNORM: *format=GL_RGBA; *type=GL_BYTE; break; - case GL_RGB5_A1: *format=GL_RGBA; *type=GL_UNSIGNED_BYTE; break; - case GL_RGBA4: *format=GL_RGBA; *type=GL_UNSIGNED_BYTE; break; - case GL_RGB10_A2: *format=GL_RGBA; *type=GL_UNSIGNED_INT_2_10_10_10_REV; break; - case GL_RGBA16F: *format=GL_RGBA; *type=GL_HALF_FLOAT; break; - case GL_RGBA32F: *format=GL_RGBA; *type=GL_FLOAT; break; - case GL_RGBA8UI: *format=GL_RGBA_INTEGER; *type=GL_UNSIGNED_BYTE; break; - case GL_RGBA8I: *format=GL_RGBA_INTEGER; *type=GL_BYTE; break; - case GL_RGB10_A2UI: *format=GL_RGBA_INTEGER; *type=GL_UNSIGNED_INT_2_10_10_10_REV; break; - case GL_RGBA16UI: *format=GL_RGBA_INTEGER; *type=GL_UNSIGNED_SHORT; break; - case GL_RGBA16I: *format=GL_RGBA_INTEGER; *type=GL_SHORT; break; - case GL_RGBA32I: *format=GL_RGBA_INTEGER; *type=GL_INT; break; - case GL_RGBA32UI: *format=GL_RGBA_INTEGER; *type=GL_UNSIGNED_INT; break; - // Sized depth formats - case GL_DEPTH_COMPONENT16: *format = GL_DEPTH_COMPONENT; *type = GL_UNSIGNED_SHORT; break; - case GL_DEPTH_COMPONENT24: *format = GL_DEPTH_COMPONENT; *type = GL_UNSIGNED_INT; break; - case GL_DEPTH_COMPONENT32F: *format = GL_DEPTH_COMPONENT; *type = GL_FLOAT; break; - case GL_DEPTH24_STENCIL8: *format = GL_DEPTH_STENCIL; *type = GL_UNSIGNED_INT_24_8; break; - case GL_DEPTH32F_STENCIL8: *format = GL_DEPTH_STENCIL; *type = GL_FLOAT_32_UNSIGNED_INT_24_8_REV; break; - case GL_STENCIL_INDEX8: *format = GL_STENCIL_INDEX; *type = GL_UNSIGNED_BYTE; break; - default: - printf("LTW: pick_format fallthrough: %x\n", *internalformat); - } - -} - - -INTERNAL void pick_internalformat(GLint *internalformat, GLenum* type, GLenum* format, GLvoid const** data) { - if(*data == NULL) { - // Appears that desktop GL completely discards type and format without data. Pick a correct (sized if unsized is unavailable) - // format for the d - pick_format(internalformat, type, format); - return; - } - // Compared to OpenGL ES, desktop OpenGL implicitly supports way more depth/RGB formats without explicit sizing. - // This function converts appropriate unsized formats to sized ones according to the type. - bool convert_data; - switch (*internalformat) { - case GL_DEPTH_COMPONENT32: - // Select the equivalent type (32f for float, 24 for int) - if(*type == GL_FLOAT) { - *internalformat = GL_DEPTH_COMPONENT32F; - } else { - *internalformat = GL_DEPTH_COMPONENT24; - if(*type != GL_UNSIGNED_INT) convert_data = true; - *type = GL_UNSIGNED_INT; - } - break; - case GL_DEPTH_COMPONENT: - *internalformat = pick_depth_internalformat(type, &convert_data); - break; - case GL_DEPTH_STENCIL: - *internalformat = pick_depth_stencil_internalformat(type, &convert_data); - break; - case GL_RED: - *internalformat = pick_red_internalformat(type, &convert_data); - break; - case GL_RG: - *internalformat = pick_rg_internalformat(type, &convert_data); - break; - // Desktop OpenGL specifies integer color formats with a regular format and - // a sized internal format. - // GLES is quirky, though, and requires you to explicitly specify that the format is an integer one. - case GL_R8I: - case GL_R8UI: - case GL_R16I: - case GL_R16UI: - case GL_R32I: - case GL_R32UI: - *format = GL_RED_INTEGER; - break; - case GL_RG8I: - case GL_RG8UI: - case GL_RG16I: - case GL_RG16UI: - case GL_RG32I: - case GL_RG32UI: - *format = GL_RG_INTEGER; - break; - case GL_RGB8I: - case GL_RGB8UI: - case GL_RGB16I: - case GL_RGB16UI: - case GL_RGB32I: - case GL_RGB32UI: - *format = GL_RGB_INTEGER; - break; - case GL_RGBA8I: - case GL_RGBA8UI: - case GL_RGBA16I: - case GL_RGBA16UI: - case GL_RGBA32I: - case GL_RGBA32UI: - *format = GL_RGBA_INTEGER; - break; - default: - if(*data != NULL) break; - bool _signed = false; - // Pray that EXT_color_buffer_float exists on target if the float versions of the textures are used on framebuffers - switch(*format) { - case GL_RGB: - switch (*type) { - case GL_FLOAT: - case GL_HALF_FLOAT: - *internalformat = GL_R11F_G11F_B10F; - return; - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_INT: - case GL_SHORT: - case GL_BYTE: - case GL_INT: - if(*internalformat == GL_RGB16 || *internalformat == GL_RGB12 || *internalformat == GL_RGB10) { - // Color renderable 16 bit RGB integer formats don't exist on GLES - *internalformat = GL_R11F_G11F_B10F; - *type = GL_FLOAT; - return; - } - - } - - break; - case GL_RGBA: - switch(*type) { - case GL_FLOAT: - *internalformat = GL_RGBA32F; - return; - case GL_HALF_FLOAT: - *internalformat = GL_RGBA16F; - return; - case GL_SHORT: - case GL_BYTE: - case GL_INT: - _signed = true; - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_INT: - if(*internalformat == GL_RGBA16 || *internalformat == GL_RGBA12) { - *format = GL_RGBA_INTEGER; - if(_signed) { - *internalformat = GL_RGBA16I; - *type = GL_SHORT; - }else { - *internalformat = GL_RGBA16UI; - *type = GL_UNSIGNED_SHORT; - } - return; - } - } - } - break; - } - if(*data != NULL && convert_data) { - printf("LTW: we don't support format conversion at the moment. Sorry!\n"); - } -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glformats.h b/ltw/src/main/tinywrapper/glformats.h deleted file mode 100644 index 5b8ae5a..0000000 --- a/ltw/src/main/tinywrapper/glformats.h +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef POJAVLAUNCHER_GLFORMATS_H -#define POJAVLAUNCHER_GLFORMATS_H - -#include - -extern void pick_internalformat(GLint *internalformat, GLenum* type, GLenum* format, GLvoid const** data); - -#endif //POJAVLAUNCHER_GLFORMATS_H diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/.gitattributes b/ltw/src/main/tinywrapper/glsl_optimizer/.gitattributes deleted file mode 100644 index 1ff0c42..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/.gitignore b/ltw/src/main/tinywrapper/glsl_optimizer/.gitignore deleted file mode 100644 index 9491a2f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/.gitignore +++ /dev/null @@ -1,363 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Oo]ut/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/CMakePresets.json b/ltw/src/main/tinywrapper/glsl_optimizer/CMakePresets.json deleted file mode 100644 index f4bc98b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/CMakePresets.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "version": 3, - "configurePresets": [ - { - "name": "windows-base", - "hidden": true, - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "installDir": "${sourceDir}/out/install/${presetName}", - "cacheVariables": { - "CMAKE_C_COMPILER": "cl.exe", - "CMAKE_CXX_COMPILER": "cl.exe" - }, - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Windows" - } - }, - { - "name": "x64-debug", - "displayName": "x64 Debug", - "inherits": "windows-base", - "architecture": { - "value": "x64", - "strategy": "external" - }, - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - } - }, - { - "name": "x64-release", - "displayName": "x64 Release", - "inherits": "x64-debug", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } - }, - { - "name": "x86-debug", - "displayName": "x86 Debug", - "inherits": "windows-base", - "architecture": { - "value": "x86", - "strategy": "external" - }, - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - } - }, - { - "name": "x86-release", - "displayName": "x86 Release", - "inherits": "x86-debug", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } - }, - { - "name": "linux-debug", - "displayName": "Linux Debug", - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "installDir": "${sourceDir}/out/install/${presetName}", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - }, - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Linux" - }, - "vendor": { - "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": { - "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}" - } - } - }, - { - "name": "macos-debug", - "displayName": "macOS Debug", - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "installDir": "${sourceDir}/out/install/${presetName}", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - }, - "condition": { - "type": "equals", - "lhs": "${hostSystemName}", - "rhs": "Darwin" - }, - "vendor": { - "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": { - "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}" - } - } - } - ] -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/KHR/khrplatform.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/KHR/khrplatform.h deleted file mode 100644 index 5b55ea2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/KHR/khrplatform.h +++ /dev/null @@ -1,290 +0,0 @@ -#ifndef __khrplatform_h_ -#define __khrplatform_h_ - -/* -** Copyright (c) 2008-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Khronos platform-specific types and definitions. - * - * The master copy of khrplatform.h is maintained in the Khronos EGL - * Registry repository at https://github.com/KhronosGroup/EGL-Registry - * The last semantic modification to khrplatform.h was at commit ID: - * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 - * - * Adopters may modify this file to suit their platform. Adopters are - * encouraged to submit platform specific modifications to the Khronos - * group so that they can be included in future versions of this file. - * Please submit changes by filing pull requests or issues on - * the EGL Registry repository linked above. - * - * - * See the Implementer's Guidelines for information about where this file - * should be located on your system and for more details of its use: - * http://www.khronos.org/registry/implementers_guide.pdf - * - * This file should be included as - * #include - * by Khronos client API header files that use its types and defines. - * - * The types in khrplatform.h should only be used to define API-specific types. - * - * Types defined in khrplatform.h: - * khronos_int8_t signed 8 bit - * khronos_uint8_t unsigned 8 bit - * khronos_int16_t signed 16 bit - * khronos_uint16_t unsigned 16 bit - * khronos_int32_t signed 32 bit - * khronos_uint32_t unsigned 32 bit - * khronos_int64_t signed 64 bit - * khronos_uint64_t unsigned 64 bit - * khronos_intptr_t signed same number of bits as a pointer - * khronos_uintptr_t unsigned same number of bits as a pointer - * khronos_ssize_t signed size - * khronos_usize_t unsigned size - * khronos_float_t signed 32 bit floating point - * khronos_time_ns_t unsigned 64 bit time in nanoseconds - * khronos_utime_nanoseconds_t unsigned time interval or absolute time in - * nanoseconds - * khronos_stime_nanoseconds_t signed time interval in nanoseconds - * khronos_boolean_enum_t enumerated boolean type. This should - * only be used as a base type when a client API's boolean type is - * an enum. Client APIs which use an integer or other type for - * booleans cannot use this as the base type for their boolean. - * - * Tokens defined in khrplatform.h: - * - * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. - * - * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. - * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. - * - * Calling convention macros defined in this file: - * KHRONOS_APICALL - * KHRONOS_APIENTRY - * KHRONOS_APIATTRIBUTES - * - * These may be used in function prototypes as: - * - * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( - * int arg1, - * int arg2) KHRONOS_APIATTRIBUTES; - */ - -#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) -# define KHRONOS_STATIC 1 -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APICALL - *------------------------------------------------------------------------- - * This precedes the return type of the function in the function prototype. - */ -#if defined(KHRONOS_STATIC) - /* If the preprocessor constant KHRONOS_STATIC is defined, make the - * header compatible with static linking. */ -# define KHRONOS_APICALL -#elif defined(_WIN32) -# define KHRONOS_APICALL __declspec(dllimport) -#elif defined (__SYMBIAN32__) -# define KHRONOS_APICALL IMPORT_C -#elif defined(__ANDROID__) -# define KHRONOS_APICALL __attribute__((visibility("default"))) -#else -# define KHRONOS_APICALL -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIENTRY - *------------------------------------------------------------------------- - * This follows the return type of the function and precedes the function - * name in the function prototype. - */ -#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(KHRONOS_STATIC) - /* Win32 but not WinCE */ -# define KHRONOS_APIENTRY __stdcall -#else -# define KHRONOS_APIENTRY -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIATTRIBUTES - *------------------------------------------------------------------------- - * This follows the closing parenthesis of the function prototype arguments. - */ -#if defined (__ARMCC_2__) -#define KHRONOS_APIATTRIBUTES __softfp -#else -#define KHRONOS_APIATTRIBUTES -#endif - -/*------------------------------------------------------------------------- - * basic type definitions - *-----------------------------------------------------------------------*/ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) - - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__VMS ) || defined(__sgi) - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) - -/* - * Win32 - */ -typedef __int32 khronos_int32_t; -typedef unsigned __int32 khronos_uint32_t; -typedef __int64 khronos_int64_t; -typedef unsigned __int64 khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__sun__) || defined(__digital__) - -/* - * Sun or Digital - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#if defined(__arch64__) || defined(_LP64) -typedef long int khronos_int64_t; -typedef unsigned long int khronos_uint64_t; -#else -typedef long long int khronos_int64_t; -typedef unsigned long long int khronos_uint64_t; -#endif /* __arch64__ */ -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif 0 - -/* - * Hypothetical platform with no float or int64 support - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#define KHRONOS_SUPPORT_INT64 0 -#define KHRONOS_SUPPORT_FLOAT 0 - -#else - -/* - * Generic fallback - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#endif - - -/* - * Types that are (so far) the same on all platforms - */ -typedef signed char khronos_int8_t; -typedef unsigned char khronos_uint8_t; -typedef signed short int khronos_int16_t; -typedef unsigned short int khronos_uint16_t; - -/* - * Types that differ between LLP64 and LP64 architectures - in LLP64, - * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears - * to be the only LLP64 architecture in current use. - */ -#ifdef _WIN64 -typedef signed long long int khronos_intptr_t; -typedef unsigned long long int khronos_uintptr_t; -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; -#else -typedef signed long int khronos_intptr_t; -typedef unsigned long int khronos_uintptr_t; -typedef signed long int khronos_ssize_t; -typedef unsigned long int khronos_usize_t; -#endif - -#if KHRONOS_SUPPORT_FLOAT -/* - * Float type - */ -typedef float khronos_float_t; -#endif - -#if KHRONOS_SUPPORT_INT64 -/* Time types - * - * These types can be used to represent a time interval in nanoseconds or - * an absolute Unadjusted System Time. Unadjusted System Time is the number - * of nanoseconds since some arbitrary system event (e.g. since the last - * time the system booted). The Unadjusted System Time is an unsigned - * 64 bit value that wraps back to 0 every 584 years. Time intervals - * may be either signed or unsigned. - */ -typedef khronos_uint64_t khronos_utime_nanoseconds_t; -typedef khronos_int64_t khronos_stime_nanoseconds_t; -#endif - -/* - * Dummy value used to pad enum types to 32 bits. - */ -#ifndef KHRONOS_MAX_ENUM -#define KHRONOS_MAX_ENUM 0x7FFFFFFF -#endif - -/* - * Enumerated boolean type - * - * Values other than zero should be considered to be true. Therefore - * comparisons should not be made against KHRONOS_TRUE. - */ -typedef enum { - KHRONOS_FALSE = 0, - KHRONOS_TRUE = 1, - KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM -} khronos_boolean_enum_t; - -#endif /* __khrplatform_h_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/gl.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/gl.h deleted file mode 100644 index 2518dfb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/gl.h +++ /dev/null @@ -1,2103 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef __gl_h_ -#define __gl_h_ - -/********************************************************************** - * Begin system-specific stuff. - */ - -#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) -#define __WIN32__ -#endif - -#if defined(__WIN32__) && !defined(__CYGWIN__) -# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ -# define GLAPI __declspec(dllexport) -# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ -# define GLAPI __declspec(dllimport) -# else /* for use with static link lib build of Win32 edition only */ -# define GLAPI extern -# endif -# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ -# define GLAPIENTRY -# else -# define GLAPIENTRY __stdcall -# endif -#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ -# define GLAPI extern -# define GLAPIENTRY __stdcall -#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) -# define GLAPI __attribute__((visibility("default"))) -# define GLAPIENTRY -#endif /* WIN32 && !CYGWIN */ - -/* - * WINDOWS: Include windows.h here to define APIENTRY. - * It is also useful when applications include this file by - * including only glut.h, since glut.h depends on windows.h. - * Applications needing to include windows.h with parms other - * than "WIN32_LEAN_AND_MEAN" may include windows.h before - * glut.h or gl.h. - */ -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include -#endif - -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef APIENTRY -#define APIENTRY GLAPIENTRY -#endif - -/* "P" suffix to be used for a pointer to a function */ -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifndef GLAPIENTRYP -#define GLAPIENTRYP GLAPIENTRY * -#endif - -/* - * End system-specific stuff. - **********************************************************************/ - - - -#ifdef __cplusplus -extern "C" { -#endif - - - -#define GL_VERSION_1_1 1 -#define GL_VERSION_1_2 1 -#define GL_VERSION_1_3 1 -#define GL_ARB_imaging 1 - - -/* - * Datatypes - */ -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef signed char GLbyte; /* 1-byte signed */ -typedef short GLshort; /* 2-byte signed */ -typedef int GLint; /* 4-byte signed */ -typedef unsigned char GLubyte; /* 1-byte unsigned */ -typedef unsigned short GLushort; /* 2-byte unsigned */ -typedef unsigned int GLuint; /* 4-byte unsigned */ -typedef int GLsizei; /* 4-byte signed */ -typedef float GLfloat; /* single precision float */ -typedef float GLclampf; /* single precision float in [0,1] */ -typedef double GLdouble; /* double precision float */ -typedef double GLclampd; /* double precision float in [0,1] */ - - - -/* - * Constants - */ - -/* Boolean values */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* Data types */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_DOUBLE 0x140A - -/* Primitives */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON 0x0009 - -/* Vertex Arrays */ -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D - -/* Matrix Mode */ -#define GL_MATRIX_MODE 0x0BA0 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 - -/* Points */ -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_POINT_SIZE_RANGE 0x0B12 - -/* Lines */ -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_WIDTH_RANGE 0x0B22 - -/* Polygons */ -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 - -/* Display Lists */ -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_LIST_MODE 0x0B30 - -/* Depth buffer */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_BITS 0x0D56 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_COMPONENT 0x1902 - -/* Lighting */ -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT0 0x4000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_SHININESS 0x1601 -#define GL_EMISSION 0x1600 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_SHADE_MODEL 0x0B54 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_NORMALIZE 0x0BA1 - -/* User clipping planes */ -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 - -/* Accumulation buffer */ -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_ACCUM 0x0100 -#define GL_ADD 0x0104 -#define GL_LOAD 0x0101 -#define GL_MULT 0x0103 -#define GL_RETURN 0x0102 - -/* Alpha testing */ -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_ALPHA_TEST_FUNC 0x0BC1 - -/* Blending */ -#define GL_BLEND 0x0BE2 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND_DST 0x0BE0 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 - -/* Render Mode */ -#define GL_FEEDBACK 0x1C01 -#define GL_RENDER 0x1C00 -#define GL_SELECT 0x1C02 - -/* Feedback */ -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 - -/* Selection */ -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 - -/* Fog */ -#define GL_FOG 0x0B60 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_COLOR 0x0B66 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_LINEAR 0x2601 -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 - -/* Logic Ops */ -#define GL_LOGIC_OP 0x0BF1 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_CLEAR 0x1500 -#define GL_SET 0x150F -#define GL_COPY 0x1503 -#define GL_COPY_INVERTED 0x150C -#define GL_NOOP 0x1505 -#define GL_INVERT 0x150A -#define GL_AND 0x1501 -#define GL_NAND 0x150E -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_XOR 0x1506 -#define GL_EQUIV 0x1509 -#define GL_AND_REVERSE 0x1502 -#define GL_AND_INVERTED 0x1504 -#define GL_OR_REVERSE 0x150B -#define GL_OR_INVERTED 0x150D - -/* Stencil */ -#define GL_STENCIL_BITS 0x0D57 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_INDEX 0x1901 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 - -/* Buffers, Pixel Drawing/Reading */ -#define GL_NONE 0 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -/*GL_FRONT 0x0404 */ -/*GL_BACK 0x0405 */ -/*GL_FRONT_AND_BACK 0x0408 */ -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_COLOR_INDEX 0x1900 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_ALPHA_BITS 0x0D55 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_INDEX_BITS 0x0D51 -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_READ_BUFFER 0x0C02 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_BITMAP 0x1A00 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_DITHER 0x0BD0 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 - -/* Implementation limits */ -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B - -/* Gets */ -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_MODE 0x0C30 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_RENDER_MODE 0x0C40 -#define GL_RGBA_MODE 0x0C31 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_VIEWPORT 0x0BA2 - -/* Evaluators */ -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 - -/* Hints */ -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_FOG_HINT 0x0C54 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* Scissor box */ -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 - -/* Pixel Mode / Transfer */ -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 - -/* Texture mapping */ -#define GL_TEXTURE_ENV 0x2300 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_LINEAR 0x2400 -#define GL_EYE_PLANE 0x2502 -#define GL_SPHERE_MAP 0x2402 -#define GL_DECAL 0x2101 -#define GL_MODULATE 0x2100 -#define GL_NEAREST 0x2600 -#define GL_REPEAT 0x2901 -#define GL_CLAMP 0x2900 -#define GL_S 0x2000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 - -/* Utility */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* Errors */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 - -/* glPush/PopAttrib bits */ -#define GL_CURRENT_BIT 0x00000001 -#define GL_POINT_BIT 0x00000002 -#define GL_LINE_BIT 0x00000004 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_HINT_BIT 0x00008000 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF - - -/* OpenGL 1.1 */ -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF -#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF - - - -/* - * Miscellaneous - */ - -GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); - -GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glClear( GLbitfield mask ); - -GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); - -GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); - -GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); - -GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); - -GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); - -GLAPI void GLAPIENTRY glCullFace( GLenum mode ); - -GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); - -GLAPI void GLAPIENTRY glPointSize( GLfloat size ); - -GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); - -GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); - -GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); - -GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); - -GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); - -GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); - -GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); - -GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); - -GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); - -GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); - -GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); - -GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); - -GLAPI void GLAPIENTRY glEnable( GLenum cap ); - -GLAPI void GLAPIENTRY glDisable( GLenum cap ); - -GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); - - -GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ - -GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ - - -GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); - -GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); - -GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); - -GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); - -GLAPI void GLAPIENTRY glPopAttrib( void ); - - -GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ - -GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ - - -GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); - -GLAPI GLenum GLAPIENTRY glGetError( void ); - -GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); - -GLAPI void GLAPIENTRY glFinish( void ); - -GLAPI void GLAPIENTRY glFlush( void ); - -GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); - - -/* - * Depth Buffer - */ - -GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); - -GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); - -GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); - -GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); - - -/* - * Accumulation Buffer - */ - -GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); - -GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); - - -/* - * Transformation - */ - -GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); - -GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, - GLdouble bottom, GLdouble top, - GLdouble near_val, GLdouble far_val ); - -GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, - GLsizei width, GLsizei height ); - -GLAPI void GLAPIENTRY glPushMatrix( void ); - -GLAPI void GLAPIENTRY glPopMatrix( void ); - -GLAPI void GLAPIENTRY glLoadIdentity( void ); - -GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); - -GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); -GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); - -GLAPI void GLAPIENTRY glRotated( GLdouble angle, - GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glRotatef( GLfloat angle, - GLfloat x, GLfloat y, GLfloat z ); - -GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); - -GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); - - -/* - * Display Lists - */ - -GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); - -GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); - -GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); - -GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); - -GLAPI void GLAPIENTRY glEndList( void ); - -GLAPI void GLAPIENTRY glCallList( GLuint list ); - -GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, - const GLvoid *lists ); - -GLAPI void GLAPIENTRY glListBase( GLuint base ); - - -/* - * Drawing Functions - */ - -GLAPI void GLAPIENTRY glBegin( GLenum mode ); - -GLAPI void GLAPIENTRY glEnd( void ); - - -GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); -GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); -GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); -GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); -GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); -GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); - -GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); -GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glIndexd( GLdouble c ); -GLAPI void GLAPIENTRY glIndexf( GLfloat c ); -GLAPI void GLAPIENTRY glIndexi( GLint c ); -GLAPI void GLAPIENTRY glIndexs( GLshort c ); -GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); -GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); -GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); -GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); -GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ - -GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); -GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); -GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); -GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); -GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); -GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); -GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); -GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); - -GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, - GLbyte blue, GLbyte alpha ); -GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, - GLdouble blue, GLdouble alpha ); -GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, - GLfloat blue, GLfloat alpha ); -GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, - GLint blue, GLint alpha ); -GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, - GLshort blue, GLshort alpha ); -GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, - GLubyte blue, GLubyte alpha ); -GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, - GLuint blue, GLuint alpha ); -GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, - GLushort blue, GLushort alpha ); - - -GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); - -GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); -GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); -GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); -GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); -GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); -GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); - - -GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); -GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); -GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); -GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); - -GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); -GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); -GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); -GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); -GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); -GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); -GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); -GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); -GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); -GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); -GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); -GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); -GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); -GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); - -GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); -GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); -GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); -GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); - -GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); -GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); -GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); -GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); - -GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); - -GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); -GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); -GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); -GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); - - -GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); -GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); -GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); -GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); - - -GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); -GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); -GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); -GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); - - -/* - * Vertex Arrays (1.1) - */ - -GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, - const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, - GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); - -GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); - -GLAPI void GLAPIENTRY glArrayElement( GLint i ); - -GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); - -GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, - GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, - const GLvoid *pointer ); - -/* - * Lighting - */ - -GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); - -GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, - GLfloat *params ); -GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); -GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); - -GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); - - -/* - * Raster functions - */ - -GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); - -GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, - const GLfloat *values ); -GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, - const GLuint *values ); -GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, - const GLushort *values ); - -GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); -GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); -GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); - -GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, - GLfloat xorig, GLfloat yorig, - GLfloat xmove, GLfloat ymove, - const GLubyte *bitmap ); - -GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - GLvoid *pixels ); - -GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum type ); - -/* - * Stenciling - */ - -GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); - -GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); - -GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); - -GLAPI void GLAPIENTRY glClearStencil( GLint s ); - - - -/* - * Texture mapping - */ - -GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); -GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); -GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); -GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); -GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); -GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); -GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, - GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, - GLenum pname, GLint *params ); - -GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, - GLenum pname, GLfloat *params ); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, - GLenum pname, GLint *params ); - - -GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLint border, GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, - GLenum format, GLenum type, - GLvoid *pixels ); - - -/* 1.1 functions */ - -GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); - -GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); - -GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); - -GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, - const GLuint *textures, - const GLclampf *priorities ); - -GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, - const GLuint *textures, - GLboolean *residences ); - -GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); - - -GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, - GLint xoffset, - GLsizei width, GLenum format, - GLenum type, const GLvoid *pixels ); - - -GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid *pixels ); - - -GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, - GLenum internalformat, - GLint x, GLint y, - GLsizei width, GLint border ); - - -GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, - GLenum internalformat, - GLint x, GLint y, - GLsizei width, GLsizei height, - GLint border ); - - -GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, - GLint xoffset, GLint x, GLint y, - GLsizei width ); - - -GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint x, GLint y, - GLsizei width, GLsizei height ); - - -/* - * Evaluators - */ - -GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, - GLint stride, - GLint order, const GLdouble *points ); -GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, - GLint stride, - GLint order, const GLfloat *points ); - -GLAPI void GLAPIENTRY glMap2d( GLenum target, - GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, - GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, - const GLdouble *points ); -GLAPI void GLAPIENTRY glMap2f( GLenum target, - GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, - GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, - const GLfloat *points ); - -GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); -GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); -GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); - -GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); -GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); - -GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); - -GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); -GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); - -GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); -GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); - -GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); -GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); - -GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, - GLint vn, GLdouble v1, GLdouble v2 ); -GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, - GLint vn, GLfloat v1, GLfloat v2 ); - -GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); - -GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); - -GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); - -GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); - - -/* - * Fog - */ - -GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); - -GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); - -GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); - -GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); - - -/* - * Selection and Feedback - */ - -GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); - -GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); - -GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); - -GLAPI void GLAPIENTRY glInitNames( void ); - -GLAPI void GLAPIENTRY glLoadName( GLuint name ); - -GLAPI void GLAPIENTRY glPushName( GLuint name ); - -GLAPI void GLAPIENTRY glPopName( void ); - - - -/* - * OpenGL 1.2 - */ - -#define GL_RESCALE_NORMAL 0x803A -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_TEXTURE_BINDING_3D 0x806A - -GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, - GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); - -GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLsizei depth, GLint border, - GLenum format, GLenum type, - const GLvoid *pixels ); - -GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLsizei width, - GLsizei height, GLsizei depth, - GLenum format, - GLenum type, const GLvoid *pixels); - -GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLint zoffset, GLint x, - GLint y, GLsizei width, - GLsizei height ); - -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - - -/* - * GL_ARB_imaging - */ - -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_BLEND_EQUATION 0x8009 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_BLEND_COLOR 0x8005 - - -GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, - GLsizei width, GLenum format, - GLenum type, const GLvoid *table ); - -GLAPI void GLAPIENTRY glColorSubTable( GLenum target, - GLsizei start, GLsizei count, - GLenum format, GLenum type, - const GLvoid *data ); - -GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, - const GLint *params); - -GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, - const GLfloat *params); - -GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, - GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, - GLenum type, GLvoid *table ); - -GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); - -GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha ); - -GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, - GLenum internalformat, GLboolean sink ); - -GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); - -GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, - GLenum format, GLenum type, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, - GLboolean sink ); - -GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); - -GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, - GLenum format, GLenum types, - GLvoid *values ); - -GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, - GLenum internalformat, GLsizei width, GLenum format, GLenum type, - const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *image ); - -GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, - GLfloat params ); - -GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, - const GLfloat *params ); - -GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, - GLint params ); - -GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, - const GLint *params ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width ); - -GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, - GLenum internalformat, GLint x, GLint y, GLsizei width, - GLsizei height); - -GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, - GLenum type, GLvoid *image ); - -GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, - GLfloat *params ); - -GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, - GLint *params ); - -GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, - GLenum internalformat, GLsizei width, GLsizei height, GLenum format, - GLenum type, const GLvoid *row, const GLvoid *column ); - -GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, - GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); - - - - -/* - * OpenGL 1.3 - */ - -/* multitexture */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -/* texture_cube_map */ -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -/* texture_compression */ -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -/* multisample */ -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 -/* transpose_matrix */ -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -/* texture_env_combine */ -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -/* texture_env_dot3 */ -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -/* texture_border_clamp */ -#define GL_CLAMP_TO_BORDER 0x812D - -GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); - -GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); - -GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); - -GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); - -GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); - -GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); - -GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); - -GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); - -GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); - - -GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); - -GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); - -GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); - - -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); - - - -/* - * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) - */ -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 - -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - -GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); -GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); -GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); -GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); -GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); -GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); -GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); -GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); -GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); -GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); -GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); -GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); - -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); - -#endif /* GL_ARB_multitexture */ - - - -/* - * Define this token if you want "old-style" header file behaviour (extensions - * defined in gl.h). Otherwise, extensions will be included from glext.h. - */ -#if defined(GL_GLEXT_LEGACY) - -/* All extensions that used to be here are now found in glext.h */ - -#else /* GL_GLEXT_LEGACY */ - -#include - -#endif /* GL_GLEXT_LEGACY */ - - - -/* - * ???. GL_MESA_packed_depth_stencil - * XXX obsolete - */ -#ifndef GL_MESA_packed_depth_stencil -#define GL_MESA_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_MESA 0x8750 -#define GL_UNSIGNED_INT_24_8_MESA 0x8751 -#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 -#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 -#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 - -#endif /* GL_MESA_packed_depth_stencil */ - - -#ifndef GL_ATI_blend_equation_separate -#define GL_ATI_blend_equation_separate 1 - -#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D - -GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); - -#endif /* GL_ATI_blend_equation_separate */ - - -/* GL_OES_EGL_image */ -#if !defined(GL_OES_EGL_image) && !defined(GL_EXT_EGL_image_storage) -typedef void* GLeglImageOES; -#endif - -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* __gl_h_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/glext.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/glext.h deleted file mode 100644 index e1adda4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/GL/glext.h +++ /dev/null @@ -1,12832 +0,0 @@ -#ifndef __gl_glext_h_ -#define __gl_glext_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2013-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* -** This header is generated from the Khronos OpenGL / OpenGL ES XML -** API Registry. The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** https://github.com/KhronosGroup/OpenGL-Registry -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -//#define GL_GLEXT_VERSION 20190911 - -#include "./KHR/khrplatform.h" - -/* Generated C header for: - * API: gl - * Profile: compatibility - * Versions considered: .* - * Versions emitted: 1\.[2-9]|[234]\.[0-9] - * Default extensions included: gl - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_RESCALE_NORMAL 0x803A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#endif /* GL_VERSION_1_2 */ - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum texture); -GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); -GLAPI void APIENTRY glClientActiveTexture (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); -#endif -#endif /* GL_VERSION_1_3 */ - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#define GL_BLEND_COLOR 0x8005 -#define GL_BLEND_EQUATION 0x8009 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_FUNC_SUBTRACT 0x800A -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFogCoordf (GLfloat coord); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); -GLAPI void APIENTRY glFogCoordd (GLdouble coord); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2iv (const GLint *v); -GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); -GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3iv (const GLint *v); -GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); -GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void APIENTRY glBlendEquation (GLenum mode); -#endif -#endif /* GL_VERSION_1_4 */ - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -typedef khronos_ssize_t GLsizeiptr; -typedef khronos_intptr_t GLintptr; -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_SRC1_ALPHA 0x8589 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_CURRENT_FOG_COORD 0x8453 -#define GL_FOG_COORD_ARRAY_TYPE 0x8454 -#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORD_ARRAY_POINTER 0x8456 -#define GL_FOG_COORD_ARRAY 0x8457 -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC2_ALPHA 0x858A -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); -typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQuery (GLuint id); -GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQuery (GLenum target); -GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); -GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_VERSION_1_5 */ - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -typedef char GLchar; -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_TEXTURE_COORDS 0x8871 -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GLAPI void APIENTRY glCompileShader (GLuint shader); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum type); -GLAPI void APIENTRY glDeleteProgram (GLuint program); -GLAPI void APIENTRY glDeleteShader (GLuint shader); -GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); -GLAPI GLboolean APIENTRY glIsProgram (GLuint program); -GLAPI GLboolean APIENTRY glIsShader (GLuint shader); -GLAPI void APIENTRY glLinkProgram (GLuint program); -GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -GLAPI void APIENTRY glUseProgram (GLuint program); -GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glValidateProgram (GLuint program); -GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -#endif -#endif /* GL_VERSION_2_0 */ - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif -#endif /* GL_VERSION_2_1 */ - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -typedef khronos_uint16_t GLhalf; -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_COLOR_ATTACHMENT16 0x8CF0 -#define GL_COLOR_ATTACHMENT17 0x8CF1 -#define GL_COLOR_ATTACHMENT18 0x8CF2 -#define GL_COLOR_ATTACHMENT19 0x8CF3 -#define GL_COLOR_ATTACHMENT20 0x8CF4 -#define GL_COLOR_ATTACHMENT21 0x8CF5 -#define GL_COLOR_ATTACHMENT22 0x8CF6 -#define GL_COLOR_ATTACHMENT23 0x8CF7 -#define GL_COLOR_ATTACHMENT24 0x8CF8 -#define GL_COLOR_ATTACHMENT25 0x8CF9 -#define GL_COLOR_ATTACHMENT26 0x8CFA -#define GL_COLOR_ATTACHMENT27 0x8CFB -#define GL_COLOR_ATTACHMENT28 0x8CFC -#define GL_COLOR_ATTACHMENT29 0x8CFD -#define GL_COLOR_ATTACHMENT30 0x8CFE -#define GL_COLOR_ATTACHMENT31 0x8CFF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#define GL_INDEX 0x8222 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#define GL_HALF_FLOAT 0x140B -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_ALPHA_INTEGER 0x8D97 -typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); -GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); -GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); -GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmap (GLenum target); -GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glBindVertexArray (GLuint array); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); -#endif -#endif /* GL_VERSION_3_0 */ - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFFu -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); -GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); -GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif -#endif /* GL_VERSION_3_1 */ - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -typedef struct __GLsync *GLsync; -typedef khronos_uint64_t GLuint64; -typedef khronos_int64_t GLint64; -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -#define GL_DEPTH_CLAMP 0x864F -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); -typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); -typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -GLAPI void APIENTRY glProvokingVertex (GLenum mode); -GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GLAPI GLboolean APIENTRY glIsSync (GLsync sync); -GLAPI void APIENTRY glDeleteSync (GLsync sync); -GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); -GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); -GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); -#endif -#endif /* GL_VERSION_3_2 */ - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#define GL_SAMPLER_BINDING 0x8919 -#define GL_RGB10_A2UI 0x906F -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#define GL_INT_2_10_10_10_REV 0x8D9F -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); -GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); -GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); -GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); -GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); -GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); -GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); -GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); -#endif -#endif /* GL_VERSION_3_3 */ - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -#define GL_PATCHES 0x000E -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -#define GL_ISOLINES 0x8E7A -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); -typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShading (GLfloat value); -GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); -GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); -GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); -GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); -GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); -GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); -GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); -GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedback (void); -GLAPI void APIENTRY glResumeTransformFeedback (void); -GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); -GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); -GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); -GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); -GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif -#endif /* GL_VERSION_4_0 */ - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_RGB565 0x8D62 -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReleaseShaderCompiler (void); -GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); -GLAPI void APIENTRY glClearDepthf (GLfloat d); -GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); -GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); -GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); -GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); -GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); -GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); -GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); -GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); -#endif -#endif /* GL_VERSION_4_1 */ - -#ifndef GL_VERSION_4_2 -#define GL_VERSION_4_2 1 -#define GL_COPY_READ_BUFFER_BINDING 0x8F36 -#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 -#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E -#define GL_NUM_SAMPLE_COUNTS 0x9380 -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); -typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); -GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); -GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); -#endif -#endif /* GL_VERSION_4_2 */ - -#ifndef GL_VERSION_4_3 -#define GL_VERSION_4_3 1 -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 -#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_COMPUTE_SHADER 0x91B9 -#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB -#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC -#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD -#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 -#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 -#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 -#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 -#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 -#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB -#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE -#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF -#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED -#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE -#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF -#define GL_COMPUTE_SHADER_BIT 0x00000020 -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_MAX_UNIFORM_LOCATIONS 0x826E -#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 -#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 -#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 -#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 -#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 -#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 -#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 -#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 -#define GL_INTERNALFORMAT_SUPPORTED 0x826F -#define GL_INTERNALFORMAT_PREFERRED 0x8270 -#define GL_INTERNALFORMAT_RED_SIZE 0x8271 -#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 -#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 -#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 -#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 -#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 -#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 -#define GL_INTERNALFORMAT_RED_TYPE 0x8278 -#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 -#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A -#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B -#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C -#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D -#define GL_MAX_WIDTH 0x827E -#define GL_MAX_HEIGHT 0x827F -#define GL_MAX_DEPTH 0x8280 -#define GL_MAX_LAYERS 0x8281 -#define GL_MAX_COMBINED_DIMENSIONS 0x8282 -#define GL_COLOR_COMPONENTS 0x8283 -#define GL_DEPTH_COMPONENTS 0x8284 -#define GL_STENCIL_COMPONENTS 0x8285 -#define GL_COLOR_RENDERABLE 0x8286 -#define GL_DEPTH_RENDERABLE 0x8287 -#define GL_STENCIL_RENDERABLE 0x8288 -#define GL_FRAMEBUFFER_RENDERABLE 0x8289 -#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A -#define GL_FRAMEBUFFER_BLEND 0x828B -#define GL_READ_PIXELS 0x828C -#define GL_READ_PIXELS_FORMAT 0x828D -#define GL_READ_PIXELS_TYPE 0x828E -#define GL_TEXTURE_IMAGE_FORMAT 0x828F -#define GL_TEXTURE_IMAGE_TYPE 0x8290 -#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 -#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 -#define GL_MIPMAP 0x8293 -#define GL_MANUAL_GENERATE_MIPMAP 0x8294 -#define GL_AUTO_GENERATE_MIPMAP 0x8295 -#define GL_COLOR_ENCODING 0x8296 -#define GL_SRGB_READ 0x8297 -#define GL_SRGB_WRITE 0x8298 -#define GL_FILTER 0x829A -#define GL_VERTEX_TEXTURE 0x829B -#define GL_TESS_CONTROL_TEXTURE 0x829C -#define GL_TESS_EVALUATION_TEXTURE 0x829D -#define GL_GEOMETRY_TEXTURE 0x829E -#define GL_FRAGMENT_TEXTURE 0x829F -#define GL_COMPUTE_TEXTURE 0x82A0 -#define GL_TEXTURE_SHADOW 0x82A1 -#define GL_TEXTURE_GATHER 0x82A2 -#define GL_TEXTURE_GATHER_SHADOW 0x82A3 -#define GL_SHADER_IMAGE_LOAD 0x82A4 -#define GL_SHADER_IMAGE_STORE 0x82A5 -#define GL_SHADER_IMAGE_ATOMIC 0x82A6 -#define GL_IMAGE_TEXEL_SIZE 0x82A7 -#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 -#define GL_IMAGE_PIXEL_FORMAT 0x82A9 -#define GL_IMAGE_PIXEL_TYPE 0x82AA -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF -#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 -#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 -#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 -#define GL_CLEAR_BUFFER 0x82B4 -#define GL_TEXTURE_VIEW 0x82B5 -#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 -#define GL_FULL_SUPPORT 0x82B7 -#define GL_CAVEAT_SUPPORT 0x82B8 -#define GL_IMAGE_CLASS_4_X_32 0x82B9 -#define GL_IMAGE_CLASS_2_X_32 0x82BA -#define GL_IMAGE_CLASS_1_X_32 0x82BB -#define GL_IMAGE_CLASS_4_X_16 0x82BC -#define GL_IMAGE_CLASS_2_X_16 0x82BD -#define GL_IMAGE_CLASS_1_X_16 0x82BE -#define GL_IMAGE_CLASS_4_X_8 0x82BF -#define GL_IMAGE_CLASS_2_X_8 0x82C0 -#define GL_IMAGE_CLASS_1_X_8 0x82C1 -#define GL_IMAGE_CLASS_11_11_10 0x82C2 -#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 -#define GL_VIEW_CLASS_128_BITS 0x82C4 -#define GL_VIEW_CLASS_96_BITS 0x82C5 -#define GL_VIEW_CLASS_64_BITS 0x82C6 -#define GL_VIEW_CLASS_48_BITS 0x82C7 -#define GL_VIEW_CLASS_32_BITS 0x82C8 -#define GL_VIEW_CLASS_24_BITS 0x82C9 -#define GL_VIEW_CLASS_16_BITS 0x82CA -#define GL_VIEW_CLASS_8_BITS 0x82CB -#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC -#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD -#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE -#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF -#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 -#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 -#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 -#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 -#define GL_UNIFORM 0x92E1 -#define GL_UNIFORM_BLOCK 0x92E2 -#define GL_PROGRAM_INPUT 0x92E3 -#define GL_PROGRAM_OUTPUT 0x92E4 -#define GL_BUFFER_VARIABLE 0x92E5 -#define GL_SHADER_STORAGE_BLOCK 0x92E6 -#define GL_VERTEX_SUBROUTINE 0x92E8 -#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 -#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA -#define GL_GEOMETRY_SUBROUTINE 0x92EB -#define GL_FRAGMENT_SUBROUTINE 0x92EC -#define GL_COMPUTE_SUBROUTINE 0x92ED -#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE -#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF -#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 -#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 -#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 -#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 -#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 -#define GL_ACTIVE_RESOURCES 0x92F5 -#define GL_MAX_NAME_LENGTH 0x92F6 -#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 -#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 -#define GL_NAME_LENGTH 0x92F9 -#define GL_TYPE 0x92FA -#define GL_ARRAY_SIZE 0x92FB -#define GL_OFFSET 0x92FC -#define GL_BLOCK_INDEX 0x92FD -#define GL_ARRAY_STRIDE 0x92FE -#define GL_MATRIX_STRIDE 0x92FF -#define GL_IS_ROW_MAJOR 0x9300 -#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 -#define GL_BUFFER_BINDING 0x9302 -#define GL_BUFFER_DATA_SIZE 0x9303 -#define GL_NUM_ACTIVE_VARIABLES 0x9304 -#define GL_ACTIVE_VARIABLES 0x9305 -#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 -#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 -#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A -#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B -#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C -#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D -#define GL_LOCATION 0x930E -#define GL_LOCATION_INDEX 0x930F -#define GL_IS_PER_PATCH 0x92E7 -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 -#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 -#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 -#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 -#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA -#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB -#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC -#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD -#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE -#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF -#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 -#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 -#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA -#define GL_TEXTURE_BUFFER_OFFSET 0x919D -#define GL_TEXTURE_BUFFER_SIZE 0x919E -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F -#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA -#define GL_VERTEX_BINDING_BUFFER 0x8F4F -#define GL_DISPLAY_LIST 0x82E7 -typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); -GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); -GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); -GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); -GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); -GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); -GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); -GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); -GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); -GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GLAPI void APIENTRY glPopDebugGroup (void); -GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -#endif /* GL_VERSION_4_3 */ - -#ifndef GL_VERSION_4_4 -#define GL_VERSION_4_4 1 -#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 -#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 -#define GL_TEXTURE_BUFFER_BINDING 0x8C2A -#define GL_MAP_PERSISTENT_BIT 0x0040 -#define GL_MAP_COHERENT_BIT 0x0080 -#define GL_DYNAMIC_STORAGE_BIT 0x0100 -#define GL_CLIENT_STORAGE_BIT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F -#define GL_BUFFER_STORAGE_FLAGS 0x8220 -#define GL_CLEAR_TEXTURE 0x9365 -#define GL_LOCATION_COMPONENT 0x934A -#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B -#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C -#define GL_QUERY_BUFFER 0x9192 -#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 -#define GL_QUERY_BUFFER_BINDING 0x9193 -#define GL_QUERY_RESULT_NO_WAIT 0x9194 -#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 -typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); -typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); -typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); -typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); -GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); -GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); -GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); -GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -#endif -#endif /* GL_VERSION_4_4 */ - -#ifndef GL_VERSION_4_5 -#define GL_VERSION_4_5 1 -#define GL_CONTEXT_LOST 0x0507 -#define GL_NEGATIVE_ONE_TO_ONE 0x935E -#define GL_ZERO_TO_ONE 0x935F -#define GL_CLIP_ORIGIN 0x935C -#define GL_CLIP_DEPTH_MODE 0x935D -#define GL_QUERY_WAIT_INVERTED 0x8E17 -#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 -#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 -#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A -#define GL_MAX_CULL_DISTANCES 0x82F9 -#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA -#define GL_TEXTURE_TARGET 0x1006 -#define GL_QUERY_TARGET 0x82EA -#define GL_GUILTY_CONTEXT_RESET 0x8253 -#define GL_INNOCENT_CONTEXT_RESET 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET 0x8252 -#define GL_NO_RESET_NOTIFICATION 0x8261 -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 -#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB -#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC -typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth); -typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); -typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src); -typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); -typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); -typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers); -typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers); -typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth); -GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param); -GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); -GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers); -GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access); -GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer); -GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params); -GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param); -GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf); -GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src); -GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); -GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures); -GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param); -GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture); -GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture); -GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params); -GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays); -GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer); -GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); -GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); -GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers); -GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids); -GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); -GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers); -GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); -GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void); -GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); -GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI void APIENTRY glTextureBarrier (void); -#endif -#endif /* GL_VERSION_4_5 */ - -#ifndef GL_VERSION_4_6 -#define GL_VERSION_4_6 1 -#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 -#define GL_SPIR_V_BINARY 0x9552 -#define GL_PARAMETER_BUFFER 0x80EE -#define GL_PARAMETER_BUFFER_BINDING 0x80EF -#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 -#define GL_VERTICES_SUBMITTED 0x82EE -#define GL_PRIMITIVES_SUBMITTED 0x82EF -#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 -#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 -#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 -#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 -#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 -#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 -#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 -#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 -#define GL_POLYGON_OFFSET_CLAMP 0x8E1B -#define GL_SPIR_V_EXTENSIONS 0x9553 -#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 -#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF -#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC -#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED -typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp); -#endif -#endif /* GL_VERSION_4_6 */ - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -#endif /* GL_ARB_ES2_compatibility */ - -#ifndef GL_ARB_ES3_1_compatibility -#define GL_ARB_ES3_1_compatibility 1 -#endif /* GL_ARB_ES3_1_compatibility */ - -#ifndef GL_ARB_ES3_2_compatibility -#define GL_ARB_ES3_2_compatibility 1 -#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE -#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 -#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 -typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#endif -#endif /* GL_ARB_ES3_2_compatibility */ - -#ifndef GL_ARB_ES3_compatibility -#define GL_ARB_ES3_compatibility 1 -#endif /* GL_ARB_ES3_compatibility */ - -#ifndef GL_ARB_arrays_of_arrays -#define GL_ARB_arrays_of_arrays 1 -#endif /* GL_ARB_arrays_of_arrays */ - -#ifndef GL_ARB_base_instance -#define GL_ARB_base_instance 1 -#endif /* GL_ARB_base_instance */ - -#ifndef GL_ARB_bindless_texture -#define GL_ARB_bindless_texture 1 -typedef khronos_uint64_t GLuint64EXT; -#define GL_UNSIGNED_INT64_ARB 0x140F -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); -GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); -GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); -GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); -GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); -GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); -GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); -GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); -GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); -GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); -GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); -#endif -#endif /* GL_ARB_bindless_texture */ - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 -#endif /* GL_ARB_blend_func_extended */ - -#ifndef GL_ARB_buffer_storage -#define GL_ARB_buffer_storage 1 -#endif /* GL_ARB_buffer_storage */ - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 -struct _cl_context; -struct _cl_event; -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); -#endif -#endif /* GL_ARB_cl_event */ - -#ifndef GL_ARB_clear_buffer_object -#define GL_ARB_clear_buffer_object 1 -#endif /* GL_ARB_clear_buffer_object */ - -#ifndef GL_ARB_clear_texture -#define GL_ARB_clear_texture 1 -#endif /* GL_ARB_clear_texture */ - -#ifndef GL_ARB_clip_control -#define GL_ARB_clip_control 1 -#endif /* GL_ARB_clip_control */ - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); -#endif -#endif /* GL_ARB_color_buffer_float */ - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 -#endif /* GL_ARB_compatibility */ - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 -#endif /* GL_ARB_compressed_texture_pixel_storage */ - -#ifndef GL_ARB_compute_shader -#define GL_ARB_compute_shader 1 -#endif /* GL_ARB_compute_shader */ - -#ifndef GL_ARB_compute_variable_group_size -#define GL_ARB_compute_variable_group_size 1 -#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 -#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB -#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 -#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF -typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); -#endif -#endif /* GL_ARB_compute_variable_group_size */ - -#ifndef GL_ARB_conditional_render_inverted -#define GL_ARB_conditional_render_inverted 1 -#endif /* GL_ARB_conditional_render_inverted */ - -#ifndef GL_ARB_conservative_depth -#define GL_ARB_conservative_depth 1 -#endif /* GL_ARB_conservative_depth */ - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 -#endif /* GL_ARB_copy_buffer */ - -#ifndef GL_ARB_copy_image -#define GL_ARB_copy_image 1 -#endif /* GL_ARB_copy_image */ - -#ifndef GL_ARB_cull_distance -#define GL_ARB_cull_distance 1 -#endif /* GL_ARB_cull_distance */ - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif -#endif /* GL_ARB_debug_output */ - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#endif /* GL_ARB_depth_buffer_float */ - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#endif /* GL_ARB_depth_clamp */ - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif /* GL_ARB_depth_texture */ - -#ifndef GL_ARB_derivative_control -#define GL_ARB_derivative_control 1 -#endif /* GL_ARB_derivative_control */ - -#ifndef GL_ARB_direct_state_access -#define GL_ARB_direct_state_access 1 -#endif /* GL_ARB_direct_state_access */ - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_ARB_draw_buffers */ - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif -#endif /* GL_ARB_draw_buffers_blend */ - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#endif /* GL_ARB_draw_elements_base_vertex */ - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 -#endif /* GL_ARB_draw_indirect */ - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_ARB_draw_instanced */ - -#ifndef GL_ARB_enhanced_layouts -#define GL_ARB_enhanced_layouts 1 -#endif /* GL_ARB_enhanced_layouts */ - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -#endif /* GL_ARB_explicit_attrib_location */ - -#ifndef GL_ARB_explicit_uniform_location -#define GL_ARB_explicit_uniform_location 1 -#endif /* GL_ARB_explicit_uniform_location */ - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 -#endif /* GL_ARB_fragment_coord_conventions */ - -#ifndef GL_ARB_fragment_layer_viewport -#define GL_ARB_fragment_layer_viewport 1 -#endif /* GL_ARB_fragment_layer_viewport */ - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); -#endif -#endif /* GL_ARB_fragment_program */ - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif /* GL_ARB_fragment_program_shadow */ - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif /* GL_ARB_fragment_shader */ - -#ifndef GL_ARB_fragment_shader_interlock -#define GL_ARB_fragment_shader_interlock 1 -#endif /* GL_ARB_fragment_shader_interlock */ - -#ifndef GL_ARB_framebuffer_no_attachments -#define GL_ARB_framebuffer_no_attachments 1 -#endif /* GL_ARB_framebuffer_no_attachments */ - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#endif /* GL_ARB_framebuffer_object */ - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#endif /* GL_ARB_framebuffer_sRGB */ - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 -#define GL_LINES_ADJACENCY_ARB 0x000A -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B -#define GL_TRIANGLES_ADJACENCY_ARB 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif -#endif /* GL_ARB_geometry_shader4 */ - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 -#endif /* GL_ARB_get_program_binary */ - -#ifndef GL_ARB_get_texture_sub_image -#define GL_ARB_get_texture_sub_image 1 -#endif /* GL_ARB_get_texture_sub_image */ - -#ifndef GL_ARB_gl_spirv -#define GL_ARB_gl_spirv 1 -#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 -#define GL_SPIR_V_BINARY_ARB 0x9552 -typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); -#endif -#endif /* GL_ARB_gl_spirv */ - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 -#endif /* GL_ARB_gpu_shader5 */ - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 -#endif /* GL_ARB_gpu_shader_fp64 */ - -#ifndef GL_ARB_gpu_shader_int64 -#define GL_ARB_gpu_shader_int64 1 -#define GL_INT64_ARB 0x140E -#define GL_INT64_VEC2_ARB 0x8FE9 -#define GL_INT64_VEC3_ARB 0x8FEA -#define GL_INT64_VEC4_ARB 0x8FEB -#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 -typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x); -typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y); -typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z); -typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x); -GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y); -GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z); -GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x); -GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y); -GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params); -GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params); -GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); -GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); -GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x); -GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y); -GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); -GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); -GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); -GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x); -GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y); -GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); -GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); -GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); -#endif -#endif /* GL_ARB_gpu_shader_int64 */ - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -typedef khronos_uint16_t GLhalfARB; -#define GL_HALF_FLOAT_ARB 0x140B -#endif /* GL_ARB_half_float_pixel */ - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -#endif /* GL_ARB_half_float_vertex */ - -#ifndef GL_ARB_imaging -#define GL_ARB_imaging 1 -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogram (GLenum target); -GLAPI void APIENTRY glResetMinmax (GLenum target); -#endif -#endif /* GL_ARB_imaging */ - -#ifndef GL_ARB_indirect_parameters -#define GL_ARB_indirect_parameters 1 -#define GL_PARAMETER_BUFFER_ARB 0x80EE -#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#endif -#endif /* GL_ARB_indirect_parameters */ - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); -#endif -#endif /* GL_ARB_instanced_arrays */ - -#ifndef GL_ARB_internalformat_query -#define GL_ARB_internalformat_query 1 -#endif /* GL_ARB_internalformat_query */ - -#ifndef GL_ARB_internalformat_query2 -#define GL_ARB_internalformat_query2 1 -#define GL_SRGB_DECODE_ARB 0x8299 -#define GL_VIEW_CLASS_EAC_R11 0x9383 -#define GL_VIEW_CLASS_EAC_RG11 0x9384 -#define GL_VIEW_CLASS_ETC2_RGB 0x9385 -#define GL_VIEW_CLASS_ETC2_RGBA 0x9386 -#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 -#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 -#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 -#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A -#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B -#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C -#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D -#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E -#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F -#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 -#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 -#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 -#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 -#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 -#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 -#endif /* GL_ARB_internalformat_query2 */ - -#ifndef GL_ARB_invalidate_subdata -#define GL_ARB_invalidate_subdata 1 -#endif /* GL_ARB_invalidate_subdata */ - -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 -#endif /* GL_ARB_map_buffer_alignment */ - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#endif /* GL_ARB_map_buffer_range */ - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_ARB_matrix_palette */ - -#ifndef GL_ARB_multi_bind -#define GL_ARB_multi_bind 1 -#endif /* GL_ARB_multi_bind */ - -#ifndef GL_ARB_multi_draw_indirect -#define GL_ARB_multi_draw_indirect 1 -#endif /* GL_ARB_multi_draw_indirect */ - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); -#endif -#endif /* GL_ARB_multisample */ - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); -#endif -#endif /* GL_ARB_multitexture */ - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); -GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQueryARB (GLenum target); -GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); -#endif -#endif /* GL_ARB_occlusion_query */ - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 -#endif /* GL_ARB_occlusion_query2 */ - -#ifndef GL_ARB_parallel_shader_compile -#define GL_ARB_parallel_shader_compile 1 -#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 -#define GL_COMPLETION_STATUS_ARB 0x91B1 -typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count); -#endif -#endif /* GL_ARB_parallel_shader_compile */ - -#ifndef GL_ARB_pipeline_statistics_query -#define GL_ARB_pipeline_statistics_query 1 -#define GL_VERTICES_SUBMITTED_ARB 0x82EE -#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF -#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 -#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 -#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 -#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 -#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 -#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 -#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 -#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 -#endif /* GL_ARB_pipeline_statistics_query */ - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif /* GL_ARB_pixel_buffer_object */ - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_ARB_point_parameters */ - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif /* GL_ARB_point_sprite */ - -#ifndef GL_ARB_polygon_offset_clamp -#define GL_ARB_polygon_offset_clamp 1 -#endif /* GL_ARB_polygon_offset_clamp */ - -#ifndef GL_ARB_post_depth_coverage -#define GL_ARB_post_depth_coverage 1 -#endif /* GL_ARB_post_depth_coverage */ - -#ifndef GL_ARB_program_interface_query -#define GL_ARB_program_interface_query 1 -#endif /* GL_ARB_program_interface_query */ - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#endif /* GL_ARB_provoking_vertex */ - -#ifndef GL_ARB_query_buffer_object -#define GL_ARB_query_buffer_object 1 -#endif /* GL_ARB_query_buffer_object */ - -#ifndef GL_ARB_robust_buffer_access_behavior -#define GL_ARB_robust_buffer_access_behavior 1 -#endif /* GL_ARB_robust_buffer_access_behavior */ - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); -GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); -GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); -GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); -GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); -GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); -GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); -#endif -#endif /* GL_ARB_robustness */ - -#ifndef GL_ARB_robustness_isolation -#define GL_ARB_robustness_isolation 1 -#endif /* GL_ARB_robustness_isolation */ - -#ifndef GL_ARB_sample_locations -#define GL_ARB_sample_locations 1 -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 -#define GL_SAMPLE_LOCATION_ARB 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glEvaluateDepthValuesARB (void); -#endif -#endif /* GL_ARB_sample_locations */ - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); -#endif -#endif /* GL_ARB_sample_shading */ - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 -#endif /* GL_ARB_sampler_objects */ - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 -#endif /* GL_ARB_seamless_cube_map */ - -#ifndef GL_ARB_seamless_cubemap_per_texture -#define GL_ARB_seamless_cubemap_per_texture 1 -#endif /* GL_ARB_seamless_cubemap_per_texture */ - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 -#endif /* GL_ARB_separate_shader_objects */ - -#ifndef GL_ARB_shader_atomic_counter_ops -#define GL_ARB_shader_atomic_counter_ops 1 -#endif /* GL_ARB_shader_atomic_counter_ops */ - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ARB_shader_atomic_counters 1 -#endif /* GL_ARB_shader_atomic_counters */ - -#ifndef GL_ARB_shader_ballot -#define GL_ARB_shader_ballot 1 -#endif /* GL_ARB_shader_ballot */ - -#ifndef GL_ARB_shader_bit_encoding -#define GL_ARB_shader_bit_encoding 1 -#endif /* GL_ARB_shader_bit_encoding */ - -#ifndef GL_ARB_shader_clock -#define GL_ARB_shader_clock 1 -#endif /* GL_ARB_shader_clock */ - -#ifndef GL_ARB_shader_draw_parameters -#define GL_ARB_shader_draw_parameters 1 -#endif /* GL_ARB_shader_draw_parameters */ - -#ifndef GL_ARB_shader_group_vote -#define GL_ARB_shader_group_vote 1 -#endif /* GL_ARB_shader_group_vote */ - -#ifndef GL_ARB_shader_image_load_store -#define GL_ARB_shader_image_load_store 1 -#endif /* GL_ARB_shader_image_load_store */ - -#ifndef GL_ARB_shader_image_size -#define GL_ARB_shader_image_size 1 -#endif /* GL_ARB_shader_image_size */ - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef __APPLE__ -#ifdef BUILDING_MESA -/* Avoid uint <-> void* warnings */ -typedef unsigned long GLhandleARB; -#else -typedef void *GLhandleARB; -#endif -#else -typedef unsigned int GLhandleARB; -#endif -typedef char GLcharARB; -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif -#endif /* GL_ARB_shader_objects */ - -#ifndef GL_ARB_shader_precision -#define GL_ARB_shader_precision 1 -#endif /* GL_ARB_shader_precision */ - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 -#endif /* GL_ARB_shader_stencil_export */ - -#ifndef GL_ARB_shader_storage_buffer_object -#define GL_ARB_shader_storage_buffer_object 1 -#endif /* GL_ARB_shader_storage_buffer_object */ - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 -#endif /* GL_ARB_shader_subroutine */ - -#ifndef GL_ARB_shader_texture_image_samples -#define GL_ARB_shader_texture_image_samples 1 -#endif /* GL_ARB_shader_texture_image_samples */ - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 -#endif /* GL_ARB_shader_texture_lod */ - -#ifndef GL_ARB_shader_viewport_layer_array -#define GL_ARB_shader_viewport_layer_array 1 -#endif /* GL_ARB_shader_viewport_layer_array */ - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif /* GL_ARB_shading_language_100 */ - -#ifndef GL_ARB_shading_language_420pack -#define GL_ARB_shading_language_420pack 1 -#endif /* GL_ARB_shading_language_420pack */ - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); -GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif -#endif /* GL_ARB_shading_language_include */ - -#ifndef GL_ARB_shading_language_packing -#define GL_ARB_shading_language_packing 1 -#endif /* GL_ARB_shading_language_packing */ - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif /* GL_ARB_shadow */ - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif /* GL_ARB_shadow_ambient */ - -#ifndef GL_ARB_sparse_buffer -#define GL_ARB_sparse_buffer 1 -#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 -#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 -typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); -typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); -GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); -#endif -#endif /* GL_ARB_sparse_buffer */ - -#ifndef GL_ARB_sparse_texture -#define GL_ARB_sparse_texture 1 -#define GL_TEXTURE_SPARSE_ARB 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 -#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA -#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 -#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 -typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -#endif -#endif /* GL_ARB_sparse_texture */ - -#ifndef GL_ARB_sparse_texture2 -#define GL_ARB_sparse_texture2 1 -#endif /* GL_ARB_sparse_texture2 */ - -#ifndef GL_ARB_sparse_texture_clamp -#define GL_ARB_sparse_texture_clamp 1 -#endif /* GL_ARB_sparse_texture_clamp */ - -#ifndef GL_ARB_spirv_extensions -#define GL_ARB_spirv_extensions 1 -#endif /* GL_ARB_spirv_extensions */ - -#ifndef GL_ARB_stencil_texturing -#define GL_ARB_stencil_texturing 1 -#endif /* GL_ARB_stencil_texturing */ - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#endif /* GL_ARB_sync */ - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 -#endif /* GL_ARB_tessellation_shader */ - -#ifndef GL_ARB_texture_barrier -#define GL_ARB_texture_barrier 1 -#endif /* GL_ARB_texture_barrier */ - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif /* GL_ARB_texture_border_clamp */ - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E -typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); -#endif -#endif /* GL_ARB_texture_buffer_object */ - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 -#endif /* GL_ARB_texture_buffer_object_rgb32 */ - -#ifndef GL_ARB_texture_buffer_range -#define GL_ARB_texture_buffer_range 1 -#endif /* GL_ARB_texture_buffer_range */ - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); -#endif -#endif /* GL_ARB_texture_compression */ - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F -#endif /* GL_ARB_texture_compression_bptc */ - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#endif /* GL_ARB_texture_compression_rgtc */ - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif /* GL_ARB_texture_cube_map */ - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F -#endif /* GL_ARB_texture_cube_map_array */ - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif /* GL_ARB_texture_env_add */ - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif /* GL_ARB_texture_env_combine */ - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif /* GL_ARB_texture_env_crossbar */ - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif /* GL_ARB_texture_env_dot3 */ - -#ifndef GL_ARB_texture_filter_anisotropic -#define GL_ARB_texture_filter_anisotropic 1 -#endif /* GL_ARB_texture_filter_anisotropic */ - -#ifndef GL_ARB_texture_filter_minmax -#define GL_ARB_texture_filter_minmax 1 -#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 -#define GL_WEIGHTED_AVERAGE_ARB 0x9367 -#endif /* GL_ARB_texture_filter_minmax */ - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif /* GL_ARB_texture_float */ - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F -#endif /* GL_ARB_texture_gather */ - -#ifndef GL_ARB_texture_mirror_clamp_to_edge -#define GL_ARB_texture_mirror_clamp_to_edge 1 -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif /* GL_ARB_texture_mirrored_repeat */ - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -#endif /* GL_ARB_texture_multisample */ - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif /* GL_ARB_texture_non_power_of_two */ - -#ifndef GL_ARB_texture_query_levels -#define GL_ARB_texture_query_levels 1 -#endif /* GL_ARB_texture_query_levels */ - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 -#endif /* GL_ARB_texture_query_lod */ - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif /* GL_ARB_texture_rectangle */ - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#endif /* GL_ARB_texture_rg */ - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 -#endif /* GL_ARB_texture_rgb10_a2ui */ - -#ifndef GL_ARB_texture_stencil8 -#define GL_ARB_texture_stencil8 1 -#endif /* GL_ARB_texture_stencil8 */ - -#ifndef GL_ARB_texture_storage -#define GL_ARB_texture_storage 1 -#endif /* GL_ARB_texture_storage */ - -#ifndef GL_ARB_texture_storage_multisample -#define GL_ARB_texture_storage_multisample 1 -#endif /* GL_ARB_texture_storage_multisample */ - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -#endif /* GL_ARB_texture_swizzle */ - -#ifndef GL_ARB_texture_view -#define GL_ARB_texture_view 1 -#endif /* GL_ARB_texture_view */ - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 -#endif /* GL_ARB_timer_query */ - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 -#endif /* GL_ARB_transform_feedback2 */ - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 -#endif /* GL_ARB_transform_feedback3 */ - -#ifndef GL_ARB_transform_feedback_instanced -#define GL_ARB_transform_feedback_instanced 1 -#endif /* GL_ARB_transform_feedback_instanced */ - -#ifndef GL_ARB_transform_feedback_overflow_query -#define GL_ARB_transform_feedback_overflow_query 1 -#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC -#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED -#endif /* GL_ARB_transform_feedback_overflow_query */ - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); -#endif -#endif /* GL_ARB_transpose_matrix */ - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -#endif /* GL_ARB_uniform_buffer_object */ - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 -#endif /* GL_ARB_vertex_array_bgra */ - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -#endif /* GL_ARB_vertex_array_object */ - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 -#endif /* GL_ARB_vertex_attrib_64bit */ - -#ifndef GL_ARB_vertex_attrib_binding -#define GL_ARB_vertex_attrib_binding 1 -#endif /* GL_ARB_vertex_attrib_binding */ - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); -GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); -GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); -GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); -GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); -GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); -GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); -GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); -GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glVertexBlendARB (GLint count); -#endif -#endif /* GL_ARB_vertex_blend */ - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -typedef khronos_ssize_t GLsizeiptrARB; -typedef khronos_intptr_t GLintptrARB; -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); -typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); -GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); -GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); -GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_ARB_vertex_buffer_object */ - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); -#endif -#endif /* GL_ARB_vertex_program */ - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); -#endif -#endif /* GL_ARB_vertex_shader */ - -#ifndef GL_ARB_vertex_type_10f_11f_11f_rev -#define GL_ARB_vertex_type_10f_11f_11f_rev 1 -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 -#endif /* GL_ARB_viewport_array */ - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); -#endif -#endif /* GL_ARB_window_pos */ - -#ifndef GL_KHR_blend_equation_advanced -#define GL_KHR_blend_equation_advanced 1 -#define GL_MULTIPLY_KHR 0x9294 -#define GL_SCREEN_KHR 0x9295 -#define GL_OVERLAY_KHR 0x9296 -#define GL_DARKEN_KHR 0x9297 -#define GL_LIGHTEN_KHR 0x9298 -#define GL_COLORDODGE_KHR 0x9299 -#define GL_COLORBURN_KHR 0x929A -#define GL_HARDLIGHT_KHR 0x929B -#define GL_SOFTLIGHT_KHR 0x929C -#define GL_DIFFERENCE_KHR 0x929E -#define GL_EXCLUSION_KHR 0x92A0 -#define GL_HSL_HUE_KHR 0x92AD -#define GL_HSL_SATURATION_KHR 0x92AE -#define GL_HSL_COLOR_KHR 0x92AF -#define GL_HSL_LUMINOSITY_KHR 0x92B0 -typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendBarrierKHR (void); -#endif -#endif /* GL_KHR_blend_equation_advanced */ - -#ifndef GL_KHR_blend_equation_advanced_coherent -#define GL_KHR_blend_equation_advanced_coherent 1 -#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 -#endif /* GL_KHR_blend_equation_advanced_coherent */ - -#ifndef GL_KHR_context_flush_control -#define GL_KHR_context_flush_control 1 -#endif /* GL_KHR_context_flush_control */ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#endif /* GL_KHR_debug */ - -#ifndef GL_KHR_no_error -#define GL_KHR_no_error 1 -#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 -#endif /* GL_KHR_no_error */ - -#ifndef GL_KHR_parallel_shader_compile -#define GL_KHR_parallel_shader_compile 1 -#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 -#define GL_COMPLETION_STATUS_KHR 0x91B1 -typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); -#endif -#endif /* GL_KHR_parallel_shader_compile */ - -#ifndef GL_KHR_robust_buffer_access_behavior -#define GL_KHR_robust_buffer_access_behavior 1 -#endif /* GL_KHR_robust_buffer_access_behavior */ - -#ifndef GL_KHR_robustness -#define GL_KHR_robustness 1 -#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 -#endif /* GL_KHR_robustness */ - -#ifndef GL_KHR_shader_subgroup -#define GL_KHR_shader_subgroup 1 -#define GL_SUBGROUP_SIZE_KHR 0x9532 -#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 -#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 -#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 -#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 -#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 -#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 -#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 -#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 -#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 -#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 -#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 -#endif /* GL_KHR_shader_subgroup */ - -#ifndef GL_KHR_texture_compression_astc_hdr -#define GL_KHR_texture_compression_astc_hdr 1 -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif /* GL_KHR_texture_compression_astc_hdr */ - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif /* GL_KHR_texture_compression_astc_ldr */ - -#ifndef GL_KHR_texture_compression_astc_sliced_3d -#define GL_KHR_texture_compression_astc_sliced_3d 1 -#endif /* GL_KHR_texture_compression_astc_sliced_3d */ - -#ifndef GL_OES_byte_coordinates -#define GL_OES_byte_coordinates 1 -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); -typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); -typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); -typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); -typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y); -typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z); -typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); -typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w); -typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); -GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); -GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); -GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); -GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); -GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); -GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); -GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); -GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); -GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y); -GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z); -GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); -GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w); -GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); -#endif -#endif /* GL_OES_byte_coordinates */ - -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif /* GL_OES_compressed_paletted_texture */ - -#ifndef GL_OES_fixed_point -#define GL_OES_fixed_point 1 -typedef khronos_int32_t GLfixed; -#define GL_FIXED_OES 0x140C -typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); -typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); -typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); -typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); -typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); -typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); -typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); -typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); -typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); -typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); -typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); -typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); -typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); -typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); -typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); -typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); -typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); -typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); -typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); -typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); -typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); -typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); -typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); -typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); -typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); -typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); -typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); -typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); -typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); -typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); -typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); -typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); -typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); -typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); -typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); -typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); -typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); -typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); -typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); -GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); -GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); -GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); -GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); -GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); -GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glLineWidthxOES (GLfixed width); -GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); -GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); -GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); -GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); -GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glPointSizexOES (GLfixed size); -GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); -GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); -GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); -GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); -GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); -GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); -GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); -GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); -GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); -GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); -GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); -GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); -GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); -GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); -GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); -GLAPI void APIENTRY glIndexxOES (GLfixed component); -GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); -GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); -GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); -GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); -GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); -GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); -GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); -GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); -GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); -GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); -GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glPassThroughxOES (GLfixed token); -GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); -GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); -GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); -GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); -GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); -GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); -GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); -GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); -GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); -GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); -GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); -GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); -GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); -GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); -GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); -GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); -GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); -GLAPI void APIENTRY glVertex2xOES (GLfixed x); -GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); -GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); -GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); -GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); -GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); -#endif -#endif /* GL_OES_fixed_point */ - -#ifndef GL_OES_query_matrix -#define GL_OES_query_matrix 1 -typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); -#endif -#endif /* GL_OES_query_matrix */ - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif /* GL_OES_read_format */ - -#ifndef GL_OES_single_precision -#define GL_OES_single_precision 1 -typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); -typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); -typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); -typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); -typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); -GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); -GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); -GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); -GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -#endif -#endif /* GL_OES_single_precision */ - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif /* GL_3DFX_multisample */ - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); -#endif -#endif /* GL_3DFX_tbuffer */ - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif /* GL_3DFX_texture_compression_FXT1 */ - -#ifndef GL_AMD_blend_minmax_factor -#define GL_AMD_blend_minmax_factor 1 -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D -#endif /* GL_AMD_blend_minmax_factor */ - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 -#endif /* GL_AMD_conservative_depth */ - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); -#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif -#endif /* GL_AMD_debug_output */ - -#ifndef GL_AMD_depth_clamp_separate -#define GL_AMD_depth_clamp_separate 1 -#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E -#define GL_DEPTH_CLAMP_FAR_AMD 0x901F -#endif /* GL_AMD_depth_clamp_separate */ - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 -typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif -#endif /* GL_AMD_draw_buffers_blend */ - -#ifndef GL_AMD_framebuffer_multisample_advanced -#define GL_AMD_framebuffer_multisample_advanced 1 -#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 -#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 -#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 -#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 -#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 -#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_AMD_framebuffer_multisample_advanced */ - -#ifndef GL_AMD_framebuffer_sample_positions -#define GL_AMD_framebuffer_sample_positions 1 -#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F -#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE -#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF -#define GL_ALL_PIXELS_AMD 0xFFFFFFFF -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferSamplePositionsfvAMD (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -GLAPI void APIENTRY glNamedFramebufferSamplePositionsfvAMD (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); -GLAPI void APIENTRY glGetFramebufferParameterfvAMD (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -GLAPI void APIENTRY glGetNamedFramebufferParameterfvAMD (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); -#endif -#endif /* GL_AMD_framebuffer_sample_positions */ - -#ifndef GL_AMD_gcn_shader -#define GL_AMD_gcn_shader 1 -#endif /* GL_AMD_gcn_shader */ - -#ifndef GL_AMD_gpu_shader_half_float -#define GL_AMD_gpu_shader_half_float 1 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB -#define GL_FLOAT16_MAT2_AMD 0x91C5 -#define GL_FLOAT16_MAT3_AMD 0x91C6 -#define GL_FLOAT16_MAT4_AMD 0x91C7 -#define GL_FLOAT16_MAT2x3_AMD 0x91C8 -#define GL_FLOAT16_MAT2x4_AMD 0x91C9 -#define GL_FLOAT16_MAT3x2_AMD 0x91CA -#define GL_FLOAT16_MAT3x4_AMD 0x91CB -#define GL_FLOAT16_MAT4x2_AMD 0x91CC -#define GL_FLOAT16_MAT4x3_AMD 0x91CD -#endif /* GL_AMD_gpu_shader_half_float */ - -#ifndef GL_AMD_gpu_shader_int16 -#define GL_AMD_gpu_shader_int16 1 -#endif /* GL_AMD_gpu_shader_int16 */ - -#ifndef GL_AMD_gpu_shader_int64 -#define GL_AMD_gpu_shader_int64 1 -typedef khronos_int64_t GLint64EXT; -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); -GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); -GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); -GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); -GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); -GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); -GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif -#endif /* GL_AMD_gpu_shader_int64 */ - -#ifndef GL_AMD_interleaved_elements -#define GL_AMD_interleaved_elements 1 -#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 -#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 -typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); -#endif -#endif /* GL_AMD_interleaved_elements */ - -#ifndef GL_AMD_multi_draw_indirect -#define GL_AMD_multi_draw_indirect 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); -#endif -#endif /* GL_AMD_multi_draw_indirect */ - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 -typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); -typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); -typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); -GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); -GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); -#endif -#endif /* GL_AMD_name_gen_delete */ - -#ifndef GL_AMD_occlusion_query_event -#define GL_AMD_occlusion_query_event 1 -#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F -#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 -#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 -#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 -#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 -#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF -typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); -#endif -#endif /* GL_AMD_occlusion_query_event */ - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); -typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); -GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -#endif /* GL_AMD_performance_monitor */ - -#ifndef GL_AMD_pinned_memory -#define GL_AMD_pinned_memory 1 -#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 -#endif /* GL_AMD_pinned_memory */ - -#ifndef GL_AMD_query_buffer_object -#define GL_AMD_query_buffer_object 1 -#define GL_QUERY_BUFFER_AMD 0x9192 -#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 -#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 -#endif /* GL_AMD_query_buffer_object */ - -#ifndef GL_AMD_sample_positions -#define GL_AMD_sample_positions 1 -typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); -#endif -#endif /* GL_AMD_sample_positions */ - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 -#endif /* GL_AMD_seamless_cubemap_per_texture */ - -#ifndef GL_AMD_shader_atomic_counter_ops -#define GL_AMD_shader_atomic_counter_ops 1 -#endif /* GL_AMD_shader_atomic_counter_ops */ - -#ifndef GL_AMD_shader_ballot -#define GL_AMD_shader_ballot 1 -#endif /* GL_AMD_shader_ballot */ - -#ifndef GL_AMD_shader_explicit_vertex_parameter -#define GL_AMD_shader_explicit_vertex_parameter 1 -#endif /* GL_AMD_shader_explicit_vertex_parameter */ - -#ifndef GL_AMD_shader_gpu_shader_half_float_fetch -#define GL_AMD_shader_gpu_shader_half_float_fetch 1 -#endif /* GL_AMD_shader_gpu_shader_half_float_fetch */ - -#ifndef GL_AMD_shader_image_load_store_lod -#define GL_AMD_shader_image_load_store_lod 1 -#endif /* GL_AMD_shader_image_load_store_lod */ - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 -#endif /* GL_AMD_shader_stencil_export */ - -#ifndef GL_AMD_shader_trinary_minmax -#define GL_AMD_shader_trinary_minmax 1 -#endif /* GL_AMD_shader_trinary_minmax */ - -#ifndef GL_AMD_sparse_texture -#define GL_AMD_sparse_texture 1 -#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A -#define GL_MIN_SPARSE_LEVEL_AMD 0x919B -#define GL_MIN_LOD_WARNING_AMD 0x919C -#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 -typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -#endif -#endif /* GL_AMD_sparse_texture */ - -#ifndef GL_AMD_stencil_operation_extended -#define GL_AMD_stencil_operation_extended 1 -#define GL_SET_AMD 0x874A -#define GL_REPLACE_VALUE_AMD 0x874B -#define GL_STENCIL_OP_VALUE_AMD 0x874C -#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D -typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); -#endif -#endif /* GL_AMD_stencil_operation_extended */ - -#ifndef GL_AMD_texture_gather_bias_lod -#define GL_AMD_texture_gather_bias_lod 1 -#endif /* GL_AMD_texture_gather_bias_lod */ - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 -#endif /* GL_AMD_texture_texture4 */ - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 -#endif /* GL_AMD_transform_feedback3_lines_triangles */ - -#ifndef GL_AMD_transform_feedback4 -#define GL_AMD_transform_feedback4 1 -#define GL_STREAM_RASTERIZATION_AMD 0x91A0 -#endif /* GL_AMD_transform_feedback4 */ - -#ifndef GL_AMD_vertex_shader_layer -#define GL_AMD_vertex_shader_layer 1 -#endif /* GL_AMD_vertex_shader_layer */ - -#ifndef GL_AMD_vertex_shader_tessellator -#define GL_AMD_vertex_shader_tessellator 1 -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 -typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); -GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); -#endif -#endif /* GL_AMD_vertex_shader_tessellator */ - -#ifndef GL_AMD_vertex_shader_viewport_index -#define GL_AMD_vertex_shader_viewport_index 1 -#endif /* GL_AMD_vertex_shader_viewport_index */ - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 -#endif /* GL_APPLE_aux_depth_stencil */ - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif /* GL_APPLE_client_storage */ - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif -#endif /* GL_APPLE_element_array */ - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); -#endif -#endif /* GL_APPLE_fence */ - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 -#define GL_HALF_APPLE 0x140B -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881A -#define GL_RGB_FLOAT16_APPLE 0x881B -#define GL_ALPHA_FLOAT16_APPLE 0x881C -#define GL_INTENSITY_FLOAT16_APPLE 0x881D -#define GL_LUMINANCE_FLOAT16_APPLE 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F -#define GL_COLOR_FLOAT_APPLE 0x8A0F -#endif /* GL_APPLE_float_pixels */ - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); -#endif -#endif /* GL_APPLE_flush_buffer_range */ - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D -typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif -#endif /* GL_APPLE_object_purgeable */ - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#define GL_RGB_RAW_422_APPLE 0x8A51 -#endif /* GL_APPLE_rgb_422 */ - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 -#endif /* GL_APPLE_row_bytes */ - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif /* GL_APPLE_specular_vector */ - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 -#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 -#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 -#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC -#define GL_STORAGE_PRIVATE_APPLE 0x85BD -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); -GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_APPLE_texture_range */ - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif /* GL_APPLE_transform_hint */ - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); -#endif -#endif /* GL_APPLE_vertex_array_object */ - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); -#endif -#endif /* GL_APPLE_vertex_array_range */ - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif -#endif /* GL_APPLE_vertex_program_evaluators */ - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#define GL_YCBCR_422_APPLE 0x85B9 -#endif /* GL_APPLE_ycbcr_422 */ - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_ATI_draw_buffers */ - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif -#endif /* GL_ATI_element_array */ - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); -#endif -#endif /* GL_ATI_envmap_bumpmap */ - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); -GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); -#endif -#endif /* GL_ATI_fragment_shader */ - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); -#endif -#endif /* GL_ATI_map_object_buffer */ - -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD -#endif /* GL_ATI_meminfo */ - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -#define GL_RGBA_FLOAT_MODE_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif /* GL_ATI_pixel_format_float */ - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); -#endif -#endif /* GL_ATI_pn_triangles */ - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif -#endif /* GL_ATI_separate_stencil */ - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif /* GL_ATI_text_fragment_shader */ - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif /* GL_ATI_texture_env_combine3 */ - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif /* GL_ATI_texture_float */ - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif /* GL_ATI_texture_mirror_once */ - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); -#endif -#endif /* GL_ATI_vertex_array_object */ - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); -#endif -#endif /* GL_ATI_vertex_attrib_array_object */ - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); -GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); -GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); -#endif -#endif /* GL_ATI_vertex_streams */ - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif /* GL_EXT_422_pixels */ - -#ifndef GL_EXT_EGL_image_storage -#define GL_EXT_EGL_image_storage 1 -typedef void *GLeglImageOES; -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); -typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); -GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); -#endif -#endif /* GL_EXT_EGL_image_storage */ - -#ifndef GL_EXT_EGL_sync -#define GL_EXT_EGL_sync 1 -#endif /* GL_EXT_EGL_sync */ - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#define GL_ABGR_EXT 0x8000 -#endif /* GL_EXT_abgr */ - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif /* GL_EXT_bgra */ - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); -#endif -#endif /* GL_EXT_bindable_uniform */ - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -#endif -#endif /* GL_EXT_blend_color */ - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); -#endif -#endif /* GL_EXT_blend_equation_separate */ - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif -#endif /* GL_EXT_blend_func_separate */ - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif /* GL_EXT_blend_logic_op */ - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_BLEND_EQUATION_EXT 0x8009 -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); -#endif -#endif /* GL_EXT_blend_minmax */ - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif /* GL_EXT_blend_subtract */ - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif /* GL_EXT_clip_volume_hint */ - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif /* GL_EXT_cmyka */ - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif -#endif /* GL_EXT_color_subtable */ - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif -#endif /* GL_EXT_compiled_vertex_array */ - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); -#endif -#endif /* GL_EXT_convolution */ - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); -GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); -GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); -GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_coordinate_frame */ - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#endif /* GL_EXT_copy_texture */ - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_cull_vertex */ - -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -#endif /* GL_EXT_debug_label */ - -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GLAPI void APIENTRY glPopGroupMarkerEXT (void); -#endif -#endif /* GL_EXT_debug_marker */ - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); -#endif -#endif /* GL_EXT_depth_bounds_test */ - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F -typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); -typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); -typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); -GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); -GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); -GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); -GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); -GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); -GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); -GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); -GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); -GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); -GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); -GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); -GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); -GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); -GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); -GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); -GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); -GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); -GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); -GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); -GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); -GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); -GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); -GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); -GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); -GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); -GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); -GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); -GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); -GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); -#endif -#endif /* GL_EXT_direct_state_access */ - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -#endif -#endif /* GL_EXT_draw_buffers2 */ - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_EXT_draw_instanced */ - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -#endif -#endif /* GL_EXT_draw_range_elements */ - -#ifndef GL_EXT_external_buffer -#define GL_EXT_external_buffer 1 -typedef void *GLeglClientBufferEXT; -typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -GLAPI void APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -#endif -#endif /* GL_EXT_external_buffer */ - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_fog_coord */ - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -#endif /* GL_EXT_framebuffer_blit */ - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_EXT_framebuffer_multisample */ - -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_EXT_framebuffer_multisample_blit_scaled 1 -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); -#endif -#endif /* GL_EXT_framebuffer_object */ - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif /* GL_EXT_framebuffer_sRGB */ - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -#endif -#endif /* GL_EXT_geometry_shader4 */ - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif -#endif /* GL_EXT_gpu_program_parameters */ - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); -#endif -#endif /* GL_EXT_gpu_shader4 */ - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogramEXT (GLenum target); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); -#endif -#endif /* GL_EXT_histogram */ - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif /* GL_EXT_index_array_formats */ - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); -#endif -#endif /* GL_EXT_index_func */ - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); -#endif -#endif /* GL_EXT_index_material */ - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif /* GL_EXT_index_texture */ - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); -GLAPI void APIENTRY glTextureLightEXT (GLenum pname); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); -#endif -#endif /* GL_EXT_light_texture */ - -#ifndef GL_EXT_memory_object -#define GL_EXT_memory_object 1 -#define GL_TEXTURE_TILING_EXT 0x9580 -#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 -#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B -#define GL_NUM_TILING_TYPES_EXT 0x9582 -#define GL_TILING_TYPES_EXT 0x9583 -#define GL_OPTIMAL_TILING_EXT 0x9584 -#define GL_LINEAR_TILING_EXT 0x9585 -#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 -#define GL_DEVICE_UUID_EXT 0x9597 -#define GL_DRIVER_UUID_EXT 0x9598 -#define GL_UUID_SIZE_EXT 16 -typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); -typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); -typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); -typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); -typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); -typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); -GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); -GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); -GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); -GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); -GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); -GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); -#endif -#endif /* GL_EXT_memory_object */ - -#ifndef GL_EXT_memory_object_fd -#define GL_EXT_memory_object_fd 1 -#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 -typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); -#endif -#endif /* GL_EXT_memory_object_fd */ - -#ifndef GL_EXT_memory_object_win32 -#define GL_EXT_memory_object_win32 1 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 -#define GL_DEVICE_LUID_EXT 0x9599 -#define GL_DEVICE_NODE_MASK_EXT 0x959A -#define GL_LUID_SIZE_EXT 8 -#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 -#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A -#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B -#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C -typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); -typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); -GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); -#endif -#endif /* GL_EXT_memory_object_win32 */ - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif /* GL_EXT_misc_attribute */ - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#endif -#endif /* GL_EXT_multi_draw_arrays */ - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); -#endif -#endif /* GL_EXT_multisample */ - -#ifndef GL_EXT_multiview_tessellation_geometry_shader -#define GL_EXT_multiview_tessellation_geometry_shader 1 -#endif /* GL_EXT_multiview_tessellation_geometry_shader */ - -#ifndef GL_EXT_multiview_texture_multisample -#define GL_EXT_multiview_texture_multisample 1 -#endif /* GL_EXT_multiview_texture_multisample */ - -#ifndef GL_EXT_multiview_timer_query -#define GL_EXT_multiview_timer_query 1 -#endif /* GL_EXT_multiview_timer_query */ - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif /* GL_EXT_packed_depth_stencil */ - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#endif /* GL_EXT_packed_float */ - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif /* GL_EXT_packed_pixels */ - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_paletted_texture */ - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif /* GL_EXT_pixel_buffer_object */ - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_EXT_pixel_transform */ - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif /* GL_EXT_pixel_transform_color_table */ - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_EXT_point_parameters */ - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); -#endif -#endif /* GL_EXT_polygon_offset */ - -#ifndef GL_EXT_polygon_offset_clamp -#define GL_EXT_polygon_offset_clamp 1 -#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B -typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); -#endif -#endif /* GL_EXT_polygon_offset_clamp */ - -#ifndef GL_EXT_post_depth_coverage -#define GL_EXT_post_depth_coverage 1 -#endif /* GL_EXT_post_depth_coverage */ - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); -#endif -#endif /* GL_EXT_provoking_vertex */ - -#ifndef GL_EXT_raster_multisample -#define GL_EXT_raster_multisample 1 -#define GL_RASTER_MULTISAMPLE_EXT 0x9327 -#define GL_RASTER_SAMPLES_EXT 0x9328 -#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 -#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A -#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B -#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C -typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); -#endif -#endif /* GL_EXT_raster_multisample */ - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif /* GL_EXT_rescale_normal */ - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_secondary_color */ - -#ifndef GL_EXT_semaphore -#define GL_EXT_semaphore 1 -#define GL_LAYOUT_GENERAL_EXT 0x958D -#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E -#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F -#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 -#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 -#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 -#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 -#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 -#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 -typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); -typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); -typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); -typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); -typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); -typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); -typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); -GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); -GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore); -GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); -GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); -GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); -GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); -#endif -#endif /* GL_EXT_semaphore */ - -#ifndef GL_EXT_semaphore_fd -#define GL_EXT_semaphore_fd 1 -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); -#endif -#endif /* GL_EXT_semaphore_fd */ - -#ifndef GL_EXT_semaphore_win32 -#define GL_EXT_semaphore_win32 1 -#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 -#define GL_D3D12_FENCE_VALUE_EXT 0x9595 -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); -typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); -GLAPI void APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); -#endif -#endif /* GL_EXT_semaphore_win32 */ - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D -typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); -typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); -GLAPI void APIENTRY glActiveProgramEXT (GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); -#endif -#endif /* GL_EXT_separate_shader_objects */ - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif /* GL_EXT_separate_specular_color */ - -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif /* GL_EXT_shader_framebuffer_fetch */ - -#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent -#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 -typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void); -#endif -#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ - -#ifndef GL_EXT_shader_image_load_formatted -#define GL_EXT_shader_image_load_formatted 1 -#endif /* GL_EXT_shader_image_load_formatted */ - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); -#endif -#endif /* GL_EXT_shader_image_load_store */ - -#ifndef GL_EXT_shader_integer_mix -#define GL_EXT_shader_integer_mix 1 -#endif /* GL_EXT_shader_integer_mix */ - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif /* GL_EXT_shadow_funcs */ - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif /* GL_EXT_shared_texture_palette */ - -#ifndef GL_EXT_sparse_texture2 -#define GL_EXT_sparse_texture2 1 -#endif /* GL_EXT_sparse_texture2 */ - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif -#endif /* GL_EXT_stencil_clear_tag */ - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); -#endif -#endif /* GL_EXT_stencil_two_side */ - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif /* GL_EXT_stencil_wrap */ - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_EXT_subtexture */ - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif /* GL_EXT_texture */ - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_EXT_texture3D */ - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif -#endif /* GL_EXT_texture_array */ - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); -#endif -#endif /* GL_EXT_texture_buffer_object */ - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 -#endif /* GL_EXT_texture_compression_latc */ - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#endif /* GL_EXT_texture_compression_rgtc */ - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif /* GL_EXT_texture_compression_s3tc */ - -#ifndef GL_EXT_texture_cube_map -#define GL_EXT_texture_cube_map 1 -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif /* GL_EXT_texture_cube_map */ - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif /* GL_EXT_texture_env_add */ - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif /* GL_EXT_texture_env_combine */ - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif /* GL_EXT_texture_env_dot3 */ - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif /* GL_EXT_texture_filter_anisotropic */ - -#ifndef GL_EXT_texture_filter_minmax -#define GL_EXT_texture_filter_minmax 1 -#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 -#define GL_WEIGHTED_AVERAGE_EXT 0x9367 -#endif /* GL_EXT_texture_filter_minmax */ - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif -#endif /* GL_EXT_texture_integer */ - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif /* GL_EXT_texture_lod_bias */ - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif /* GL_EXT_texture_mirror_clamp */ - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif -#endif /* GL_EXT_texture_object */ - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); -#endif -#endif /* GL_EXT_texture_perturb_normal */ - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif /* GL_EXT_texture_sRGB */ - -#ifndef GL_EXT_texture_sRGB_R8 -#define GL_EXT_texture_sRGB_R8 1 -#define GL_SR8_EXT 0x8FBD -#endif /* GL_EXT_texture_sRGB_R8 */ - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A -#endif /* GL_EXT_texture_sRGB_decode */ - -#ifndef GL_EXT_texture_shadow_lod -#define GL_EXT_texture_shadow_lod 1 -#endif /* GL_EXT_texture_shadow_lod */ - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif /* GL_EXT_texture_shared_exponent */ - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#endif /* GL_EXT_texture_snorm */ - -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 -#endif /* GL_EXT_texture_swizzle */ - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#define GL_TIME_ELAPSED_EXT 0x88BF -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); -#endif -#endif /* GL_EXT_timer_query */ - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackEXT (void); -GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif -#endif /* GL_EXT_transform_feedback */ - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint i); -GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); -GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); -GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); -#endif -#endif /* GL_EXT_vertex_array */ - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 -#endif /* GL_EXT_vertex_array_bgra */ - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); -#endif -#endif /* GL_EXT_vertex_attrib_64bit */ - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); -GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); -GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); -GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); -GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); -GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); -GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); -GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); -GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); -GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); -GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); -GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -#endif -#endif /* GL_EXT_vertex_shader */ - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT 0x1700 -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); -#endif -#endif /* GL_EXT_vertex_weighting */ - -#ifndef GL_EXT_win32_keyed_mutex -#define GL_EXT_win32_keyed_mutex 1 -typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); -typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); -GLAPI GLboolean APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); -#endif -#endif /* GL_EXT_win32_keyed_mutex */ - -#ifndef GL_EXT_window_rectangles -#define GL_EXT_window_rectangles 1 -#define GL_INCLUSIVE_EXT 0x8F10 -#define GL_EXCLUSIVE_EXT 0x8F11 -#define GL_WINDOW_RECTANGLE_EXT 0x8F12 -#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 -#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 -#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 -typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); -#endif -#endif /* GL_EXT_window_rectangles */ - -#ifndef GL_EXT_x11_sync_object -#define GL_EXT_x11_sync_object 1 -#define GL_SYNC_X11_FENCE_EXT 0x90E1 -typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); -#endif -#endif /* GL_EXT_x11_sync_object */ - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); -#endif -#endif /* GL_GREMEDY_frame_terminator */ - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); -#endif -#endif /* GL_GREMEDY_string_marker */ - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif /* GL_HP_convolution_border_modes */ - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); -#endif -#endif /* GL_HP_image_transform */ - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif /* GL_HP_occlusion_test */ - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif /* GL_HP_texture_lighting */ - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#define GL_CULL_VERTEX_IBM 103050 -#endif /* GL_IBM_cull_vertex */ - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); -#endif -#endif /* GL_IBM_multimode_draw_arrays */ - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif /* GL_IBM_rasterpos_clip */ - -#ifndef GL_IBM_static_data -#define GL_IBM_static_data 1 -#define GL_ALL_STATIC_DATA_IBM 103060 -#define GL_STATIC_VERTEX_ARRAY_IBM 103061 -typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); -#endif -#endif /* GL_IBM_static_data */ - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_IBM_texture_mirrored_repeat 1 -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif /* GL_IBM_texture_mirrored_repeat */ - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); -#endif -#endif /* GL_IBM_vertex_array_lists */ - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif -#endif /* GL_INGR_blend_func_separate */ - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif /* GL_INGR_color_clamp */ - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#define GL_INTERLACE_READ_INGR 0x8568 -#endif /* GL_INGR_interlace_read */ - -#ifndef GL_INTEL_blackhole_render -#define GL_INTEL_blackhole_render 1 -#define GL_BLACKHOLE_RENDER_INTEL 0x83FC -#endif /* GL_INTEL_blackhole_render */ - -#ifndef GL_INTEL_conservative_rasterization -#define GL_INTEL_conservative_rasterization 1 -#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE -#endif /* GL_INTEL_conservative_rasterization */ - -#ifndef GL_INTEL_fragment_shader_ordering -#define GL_INTEL_fragment_shader_ordering 1 -#endif /* GL_INTEL_fragment_shader_ordering */ - -#ifndef GL_INTEL_framebuffer_CMAA -#define GL_INTEL_framebuffer_CMAA 1 -typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); -#endif -#endif /* GL_INTEL_framebuffer_CMAA */ - -#ifndef GL_INTEL_map_texture -#define GL_INTEL_map_texture 1 -#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF -#define GL_LAYOUT_DEFAULT_INTEL 0 -#define GL_LAYOUT_LINEAR_INTEL 1 -#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 -typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); -typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); -GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); -GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); -#endif -#endif /* GL_INTEL_map_texture */ - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); -GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); -#endif -#endif /* GL_INTEL_parallel_arrays */ - -#ifndef GL_INTEL_performance_query -#define GL_INTEL_performance_query 1 -#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 -#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 -#define GL_PERFQUERY_WAIT_INTEL 0x83FB -#define GL_PERFQUERY_FLUSH_INTEL 0x83FA -#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 -#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 -#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 -#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 -#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 -#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 -#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 -#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 -#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 -#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA -#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB -#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC -#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD -#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE -#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF -#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 -typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); -typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); -typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); -typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); -typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); -typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); -GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); -GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); -GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); -GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); -GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); -GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#endif -#endif /* GL_INTEL_performance_query */ - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E -#endif /* GL_MESAX_texture_stack */ - -#ifndef GL_MESA_framebuffer_flip_y -#define GL_MESA_framebuffer_flip_y 1 -#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB -typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); -#endif -#endif /* GL_MESA_framebuffer_flip_y */ - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#define GL_PACK_INVERT_MESA 0x8758 -#endif /* GL_MESA_pack_invert */ - -#ifndef GL_MESA_program_binary_formats -#define GL_MESA_program_binary_formats 1 -#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F -#endif /* GL_MESA_program_binary_formats */ - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif -#endif /* GL_MESA_resize_buffers */ - -#ifndef GL_MESA_shader_integer_functions -#define GL_MESA_shader_integer_functions 1 -#endif /* GL_MESA_shader_integer_functions */ - -#ifndef GL_MESA_tile_raster_order -#define GL_MESA_tile_raster_order 1 -#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 -#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 -#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA -#endif /* GL_MESA_tile_raster_order */ - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); -#endif -#endif /* GL_MESA_window_pos */ - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif /* GL_MESA_ycbcr_texture */ - -#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers -#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 -#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ - -#ifndef GL_NVX_conditional_render -#define GL_NVX_conditional_render 1 -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); -GLAPI void APIENTRY glEndConditionalRenderNVX (void); -#endif -#endif /* GL_NVX_conditional_render */ - -#ifndef GL_NVX_gpu_memory_info -#define GL_NVX_gpu_memory_info 1 -#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 -#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 -#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 -#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A -#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B -#endif /* GL_NVX_gpu_memory_info */ - -#ifndef GL_NVX_gpu_multicast2 -#define GL_NVX_gpu_multicast2 1 -#define GL_UPLOAD_GPU_MASK_NVX 0x954A -typedef void (APIENTRYP PFNGLUPLOADGPUMASKNVXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC) (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); -typedef void (APIENTRYP PFNGLMULTICASTSCISSORARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLint *v); -typedef GLuint (APIENTRYP PFNGLASYNCCOPYBUFFERSUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -typedef GLuint (APIENTRYP PFNGLASYNCCOPYIMAGESUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUploadGpuMaskNVX (GLbitfield mask); -GLAPI void APIENTRY glMulticastViewportArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glMulticastViewportPositionWScaleNVX (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); -GLAPI void APIENTRY glMulticastScissorArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLint *v); -GLAPI GLuint APIENTRY glAsyncCopyBufferSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -GLAPI GLuint APIENTRY glAsyncCopyImageSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); -#endif -#endif /* GL_NVX_gpu_multicast2 */ - -#ifndef GL_NVX_linked_gpu_multicast -#define GL_NVX_linked_gpu_multicast 1 -#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 -#define GL_MAX_LGPU_GPUS_NVX 0x92BA -typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLGPUNamedBufferSubDataNVX (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glLGPUCopyImageSubDataNVX (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -GLAPI void APIENTRY glLGPUInterlockNVX (void); -#endif -#endif /* GL_NVX_linked_gpu_multicast */ - -#ifndef GL_NVX_progress_fence -#define GL_NVX_progress_fence 1 -typedef GLuint (APIENTRYP PFNGLCREATEPROGRESSFENCENVXPROC) (void); -typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREUI64NVXPROC) (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -typedef void (APIENTRYP PFNGLWAITSEMAPHOREUI64NVXPROC) (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -typedef void (APIENTRYP PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC) (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glCreateProgressFenceNVX (void); -GLAPI void APIENTRY glSignalSemaphoreui64NVX (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -GLAPI void APIENTRY glWaitSemaphoreui64NVX (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -GLAPI void APIENTRY glClientWaitSemaphoreui64NVX (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); -#endif -#endif /* GL_NVX_progress_fence */ - -#ifndef GL_NV_alpha_to_coverage_dither_control -#define GL_NV_alpha_to_coverage_dither_control 1 -#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D -#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E -#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F -#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF -typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAlphaToCoverageDitherControlNV (GLenum mode); -#endif -#endif /* GL_NV_alpha_to_coverage_dither_control */ - -#ifndef GL_NV_bindless_multi_draw_indirect -#define GL_NV_bindless_multi_draw_indirect 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -#endif -#endif /* GL_NV_bindless_multi_draw_indirect */ - -#ifndef GL_NV_bindless_multi_draw_indirect_count -#define GL_NV_bindless_multi_draw_indirect_count 1 -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); -#endif -#endif /* GL_NV_bindless_multi_draw_indirect_count */ - -#ifndef GL_NV_bindless_texture -#define GL_NV_bindless_texture 1 -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); -GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); -GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); -GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); -GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); -GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); -GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); -GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); -GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); -GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); -GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); -#endif -#endif /* GL_NV_bindless_texture */ - -#ifndef GL_NV_blend_equation_advanced -#define GL_NV_blend_equation_advanced 1 -#define GL_BLEND_OVERLAP_NV 0x9281 -#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 -#define GL_BLUE_NV 0x1905 -#define GL_COLORBURN_NV 0x929A -#define GL_COLORDODGE_NV 0x9299 -#define GL_CONJOINT_NV 0x9284 -#define GL_CONTRAST_NV 0x92A1 -#define GL_DARKEN_NV 0x9297 -#define GL_DIFFERENCE_NV 0x929E -#define GL_DISJOINT_NV 0x9283 -#define GL_DST_ATOP_NV 0x928F -#define GL_DST_IN_NV 0x928B -#define GL_DST_NV 0x9287 -#define GL_DST_OUT_NV 0x928D -#define GL_DST_OVER_NV 0x9289 -#define GL_EXCLUSION_NV 0x92A0 -#define GL_GREEN_NV 0x1904 -#define GL_HARDLIGHT_NV 0x929B -#define GL_HARDMIX_NV 0x92A9 -#define GL_HSL_COLOR_NV 0x92AF -#define GL_HSL_HUE_NV 0x92AD -#define GL_HSL_LUMINOSITY_NV 0x92B0 -#define GL_HSL_SATURATION_NV 0x92AE -#define GL_INVERT_OVG_NV 0x92B4 -#define GL_INVERT_RGB_NV 0x92A3 -#define GL_LIGHTEN_NV 0x9298 -#define GL_LINEARBURN_NV 0x92A5 -#define GL_LINEARDODGE_NV 0x92A4 -#define GL_LINEARLIGHT_NV 0x92A7 -#define GL_MINUS_CLAMPED_NV 0x92B3 -#define GL_MINUS_NV 0x929F -#define GL_MULTIPLY_NV 0x9294 -#define GL_OVERLAY_NV 0x9296 -#define GL_PINLIGHT_NV 0x92A8 -#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 -#define GL_PLUS_CLAMPED_NV 0x92B1 -#define GL_PLUS_DARKER_NV 0x9292 -#define GL_PLUS_NV 0x9291 -#define GL_RED_NV 0x1903 -#define GL_SCREEN_NV 0x9295 -#define GL_SOFTLIGHT_NV 0x929C -#define GL_SRC_ATOP_NV 0x928E -#define GL_SRC_IN_NV 0x928A -#define GL_SRC_NV 0x9286 -#define GL_SRC_OUT_NV 0x928C -#define GL_SRC_OVER_NV 0x9288 -#define GL_UNCORRELATED_NV 0x9282 -#define GL_VIVIDLIGHT_NV 0x92A6 -#define GL_XOR_NV 0x1506 -typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); -GLAPI void APIENTRY glBlendBarrierNV (void); -#endif -#endif /* GL_NV_blend_equation_advanced */ - -#ifndef GL_NV_blend_equation_advanced_coherent -#define GL_NV_blend_equation_advanced_coherent 1 -#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 -#endif /* GL_NV_blend_equation_advanced_coherent */ - -#ifndef GL_NV_blend_minmax_factor -#define GL_NV_blend_minmax_factor 1 -#endif /* GL_NV_blend_minmax_factor */ - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif /* GL_NV_blend_square */ - -#ifndef GL_NV_clip_space_w_scaling -#define GL_NV_clip_space_w_scaling 1 -#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C -#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D -#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E -typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); -#endif -#endif /* GL_NV_clip_space_w_scaling */ - -#ifndef GL_NV_command_list -#define GL_NV_command_list 1 -#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 -#define GL_NOP_COMMAND_NV 0x0001 -#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 -#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 -#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 -#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 -#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 -#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 -#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 -#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 -#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A -#define GL_BLEND_COLOR_COMMAND_NV 0x000B -#define GL_STENCIL_REF_COMMAND_NV 0x000C -#define GL_LINE_WIDTH_COMMAND_NV 0x000D -#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E -#define GL_ALPHA_REF_COMMAND_NV 0x000F -#define GL_VIEWPORT_COMMAND_NV 0x0010 -#define GL_SCISSOR_COMMAND_NV 0x0011 -#define GL_FRONT_FACE_COMMAND_NV 0x0012 -typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states); -typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states); -typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state); -typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode); -typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size); -typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists); -typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists); -typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list); -typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments); -typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list); -typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states); -GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states); -GLAPI GLboolean APIENTRY glIsStateNV (GLuint state); -GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode); -GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size); -GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype); -GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); -GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); -GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists); -GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists); -GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list); -GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); -GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments); -GLAPI void APIENTRY glCompileCommandListNV (GLuint list); -GLAPI void APIENTRY glCallCommandListNV (GLuint list); -#endif -#endif /* GL_NV_command_list */ - -#ifndef GL_NV_compute_program5 -#define GL_NV_compute_program5 1 -#define GL_COMPUTE_PROGRAM_NV 0x90FB -#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC -#endif /* GL_NV_compute_program5 */ - -#ifndef GL_NV_compute_shader_derivatives -#define GL_NV_compute_shader_derivatives 1 -#endif /* GL_NV_compute_shader_derivatives */ - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRenderNV (void); -#endif -#endif /* GL_NV_conditional_render */ - -#ifndef GL_NV_conservative_raster -#define GL_NV_conservative_raster 1 -#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 -#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 -#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 -#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 -typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); -#endif -#endif /* GL_NV_conservative_raster */ - -#ifndef GL_NV_conservative_raster_dilate -#define GL_NV_conservative_raster_dilate 1 -#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 -#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A -#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B -typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value); -#endif -#endif /* GL_NV_conservative_raster_dilate */ - -#ifndef GL_NV_conservative_raster_pre_snap -#define GL_NV_conservative_raster_pre_snap 1 -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 -#endif /* GL_NV_conservative_raster_pre_snap */ - -#ifndef GL_NV_conservative_raster_pre_snap_triangles -#define GL_NV_conservative_raster_pre_snap_triangles 1 -#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D -#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F -typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); -#endif -#endif /* GL_NV_conservative_raster_pre_snap_triangles */ - -#ifndef GL_NV_conservative_raster_underestimation -#define GL_NV_conservative_raster_underestimation 1 -#endif /* GL_NV_conservative_raster_underestimation */ - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif /* GL_NV_copy_depth_to_color */ - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#endif -#endif /* GL_NV_copy_image */ - -#ifndef GL_NV_deep_texture3D -#define GL_NV_deep_texture3D 1 -#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 -#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 -#endif /* GL_NV_deep_texture3D */ - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); -#endif -#endif /* GL_NV_depth_buffer_float */ - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#define GL_DEPTH_CLAMP_NV 0x864F -#endif /* GL_NV_depth_clamp */ - -#ifndef GL_NV_draw_texture -#define GL_NV_draw_texture 1 -typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -#endif -#endif /* GL_NV_draw_texture */ - -#ifndef GL_NV_draw_vulkan_image -#define GL_NV_draw_vulkan_image 1 -typedef void (APIENTRY *GLVULKANPROCNV)(void); -typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); -typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); -typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); -typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name); -GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); -GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); -GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence); -#endif -#endif /* GL_NV_draw_vulkan_image */ - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); -GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); -#endif -#endif /* GL_NV_evaluators */ - -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); -GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); -#endif -#endif /* GL_NV_explicit_multisample */ - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); -GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GLAPI void APIENTRY glFinishFenceNV (GLuint fence); -GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif -#endif /* GL_NV_fence */ - -#ifndef GL_NV_fill_rectangle -#define GL_NV_fill_rectangle 1 -#define GL_FILL_RECTANGLE_NV 0x933C -#endif /* GL_NV_fill_rectangle */ - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif /* GL_NV_float_buffer */ - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -#endif /* GL_NV_fog_distance */ - -#ifndef GL_NV_fragment_coverage_to_color -#define GL_NV_fragment_coverage_to_color 1 -#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD -#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE -typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color); -#endif -#endif /* GL_NV_fragment_coverage_to_color */ - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif -#endif /* GL_NV_fragment_program */ - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif /* GL_NV_fragment_program2 */ - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif /* GL_NV_fragment_program4 */ - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif /* GL_NV_fragment_program_option */ - -#ifndef GL_NV_fragment_shader_barycentric -#define GL_NV_fragment_shader_barycentric 1 -#endif /* GL_NV_fragment_shader_barycentric */ - -#ifndef GL_NV_fragment_shader_interlock -#define GL_NV_fragment_shader_interlock 1 -#endif /* GL_NV_fragment_shader_interlock */ - -#ifndef GL_NV_framebuffer_mixed_samples -#define GL_NV_framebuffer_mixed_samples 1 -#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#define GL_DEPTH_SAMPLES_NV 0x932D -#define GL_STENCIL_SAMPLES_NV 0x932E -#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F -#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 -#define GL_COVERAGE_MODULATION_NV 0x9332 -#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 -typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); -typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v); -typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); -GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v); -GLAPI void APIENTRY glCoverageModulationNV (GLenum components); -#endif -#endif /* GL_NV_framebuffer_mixed_samples */ - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_NV_framebuffer_multisample_coverage */ - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif -#endif /* GL_NV_geometry_program4 */ - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -#endif /* GL_NV_geometry_shader4 */ - -#ifndef GL_NV_geometry_shader_passthrough -#define GL_NV_geometry_shader_passthrough 1 -#endif /* GL_NV_geometry_shader_passthrough */ - -#ifndef GL_NV_gpu_multicast -#define GL_NV_gpu_multicast 1 -#define GL_PER_GPU_STORAGE_BIT_NV 0x0800 -#define GL_MULTICAST_GPUS_NV 0x92BA -#define GL_RENDER_GPU_MASK_NV 0x9558 -#define GL_PER_GPU_STORAGE_NV 0x9548 -#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 -typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC) (void); -typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderGpuMaskNV (GLbitfield mask); -GLAPI void APIENTRY glMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI void APIENTRY glMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -GLAPI void APIENTRY glMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glMulticastBarrierNV (void); -GLAPI void APIENTRY glMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask); -GLAPI void APIENTRY glMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); -#endif -#endif /* GL_NV_gpu_multicast */ - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); -#endif -#endif /* GL_NV_gpu_program4 */ - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F -#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 -#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 -typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); -#endif -#endif /* GL_NV_gpu_program5 */ - -#ifndef GL_NV_gpu_program5_mem_extended -#define GL_NV_gpu_program5_mem_extended 1 -#endif /* GL_NV_gpu_program5_mem_extended */ - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -#endif /* GL_NV_gpu_shader5 */ - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -typedef unsigned short GLhalfNV; -#define GL_HALF_FLOAT_NV 0x140B -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -#endif -#endif /* GL_NV_half_float */ - -#ifndef GL_NV_internalformat_sample_query -#define GL_NV_internalformat_sample_query 1 -#define GL_MULTISAMPLES_NV 0x9371 -#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 -#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 -#define GL_CONFORMANT_NV 0x9374 -typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); -#endif -#endif /* GL_NV_internalformat_sample_query */ - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif /* GL_NV_light_max_exponent */ - -#ifndef GL_NV_memory_attachment -#define GL_NV_memory_attachment 1 -#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 -#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 -#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 -#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 -#define GL_MEMORY_ATTACHABLE_NV 0x95A8 -#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 -#define GL_DETACHED_TEXTURES_NV 0x95AA -#define GL_DETACHED_BUFFERS_NV 0x95AB -#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC -#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD -typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); -typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); -typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); -typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); -GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); -GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); -GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); -#endif -#endif /* GL_NV_memory_attachment */ - -#ifndef GL_NV_mesh_shader -#define GL_NV_mesh_shader 1 -#define GL_MESH_SHADER_NV 0x9559 -#define GL_TASK_SHADER_NV 0x955A -#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 -#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 -#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 -#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 -#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 -#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 -#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 -#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 -#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 -#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 -#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A -#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B -#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C -#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D -#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E -#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F -#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 -#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 -#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 -#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 -#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 -#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 -#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A -#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D -#define GL_MAX_MESH_VIEWS_NV 0x9557 -#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF -#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 -#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B -#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C -#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E -#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F -#define GL_MESH_VERTICES_OUT_NV 0x9579 -#define GL_MESH_PRIMITIVES_OUT_NV 0x957A -#define GL_MESH_OUTPUT_TYPE_NV 0x957B -#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D -#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 -#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 -#define GL_MESH_SHADER_BIT_NV 0x00000040 -#define GL_TASK_SHADER_BIT_NV 0x00000080 -#define GL_MESH_SUBROUTINE_NV 0x957C -#define GL_TASK_SUBROUTINE_NV 0x957D -#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E -#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F -typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); -typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); -typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); -typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); -GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); -GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); -GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#endif -#endif /* GL_NV_mesh_shader */ - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 -#endif /* GL_NV_multisample_coverage */ - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif /* GL_NV_multisample_filter_hint */ - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); -#endif -#endif /* GL_NV_occlusion_query */ - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif /* GL_NV_packed_depth_stencil */ - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); -#endif -#endif /* GL_NV_parameter_buffer_object */ - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 -#endif /* GL_NV_parameter_buffer_object2 */ - -#ifndef GL_NV_path_rendering -#define GL_NV_path_rendering 1 -#define GL_PATH_FORMAT_SVG_NV 0x9070 -#define GL_PATH_FORMAT_PS_NV 0x9071 -#define GL_STANDARD_FONT_NAME_NV 0x9072 -#define GL_SYSTEM_FONT_NAME_NV 0x9073 -#define GL_FILE_NAME_NV 0x9074 -#define GL_PATH_STROKE_WIDTH_NV 0x9075 -#define GL_PATH_END_CAPS_NV 0x9076 -#define GL_PATH_INITIAL_END_CAP_NV 0x9077 -#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 -#define GL_PATH_JOIN_STYLE_NV 0x9079 -#define GL_PATH_MITER_LIMIT_NV 0x907A -#define GL_PATH_DASH_CAPS_NV 0x907B -#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C -#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D -#define GL_PATH_DASH_OFFSET_NV 0x907E -#define GL_PATH_CLIENT_LENGTH_NV 0x907F -#define GL_PATH_FILL_MODE_NV 0x9080 -#define GL_PATH_FILL_MASK_NV 0x9081 -#define GL_PATH_FILL_COVER_MODE_NV 0x9082 -#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 -#define GL_PATH_STROKE_MASK_NV 0x9084 -#define GL_COUNT_UP_NV 0x9088 -#define GL_COUNT_DOWN_NV 0x9089 -#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A -#define GL_CONVEX_HULL_NV 0x908B -#define GL_BOUNDING_BOX_NV 0x908D -#define GL_TRANSLATE_X_NV 0x908E -#define GL_TRANSLATE_Y_NV 0x908F -#define GL_TRANSLATE_2D_NV 0x9090 -#define GL_TRANSLATE_3D_NV 0x9091 -#define GL_AFFINE_2D_NV 0x9092 -#define GL_AFFINE_3D_NV 0x9094 -#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 -#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 -#define GL_UTF8_NV 0x909A -#define GL_UTF16_NV 0x909B -#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C -#define GL_PATH_COMMAND_COUNT_NV 0x909D -#define GL_PATH_COORD_COUNT_NV 0x909E -#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F -#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 -#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 -#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 -#define GL_SQUARE_NV 0x90A3 -#define GL_ROUND_NV 0x90A4 -#define GL_TRIANGULAR_NV 0x90A5 -#define GL_BEVEL_NV 0x90A6 -#define GL_MITER_REVERT_NV 0x90A7 -#define GL_MITER_TRUNCATE_NV 0x90A8 -#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 -#define GL_USE_MISSING_GLYPH_NV 0x90AA -#define GL_PATH_ERROR_POSITION_NV 0x90AB -#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD -#define GL_ADJACENT_PAIRS_NV 0x90AE -#define GL_FIRST_TO_REST_NV 0x90AF -#define GL_PATH_GEN_MODE_NV 0x90B0 -#define GL_PATH_GEN_COEFF_NV 0x90B1 -#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 -#define GL_PATH_STENCIL_FUNC_NV 0x90B7 -#define GL_PATH_STENCIL_REF_NV 0x90B8 -#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 -#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD -#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE -#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF -#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 -#define GL_MOVE_TO_RESETS_NV 0x90B5 -#define GL_MOVE_TO_CONTINUES_NV 0x90B6 -#define GL_CLOSE_PATH_NV 0x00 -#define GL_MOVE_TO_NV 0x02 -#define GL_RELATIVE_MOVE_TO_NV 0x03 -#define GL_LINE_TO_NV 0x04 -#define GL_RELATIVE_LINE_TO_NV 0x05 -#define GL_HORIZONTAL_LINE_TO_NV 0x06 -#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 -#define GL_VERTICAL_LINE_TO_NV 0x08 -#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 -#define GL_QUADRATIC_CURVE_TO_NV 0x0A -#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B -#define GL_CUBIC_CURVE_TO_NV 0x0C -#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D -#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E -#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F -#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 -#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 -#define GL_SMALL_CCW_ARC_TO_NV 0x12 -#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 -#define GL_SMALL_CW_ARC_TO_NV 0x14 -#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 -#define GL_LARGE_CCW_ARC_TO_NV 0x16 -#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 -#define GL_LARGE_CW_ARC_TO_NV 0x18 -#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 -#define GL_RESTART_PATH_NV 0xF0 -#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 -#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 -#define GL_RECT_NV 0xF6 -#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 -#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA -#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC -#define GL_ARC_TO_NV 0xFE -#define GL_RELATIVE_ARC_TO_NV 0xFF -#define GL_BOLD_BIT_NV 0x01 -#define GL_ITALIC_BIT_NV 0x02 -#define GL_GLYPH_WIDTH_BIT_NV 0x01 -#define GL_GLYPH_HEIGHT_BIT_NV 0x02 -#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 -#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 -#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 -#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 -#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 -#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 -#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 -#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 -#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 -#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 -#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 -#define GL_FONT_ASCENDER_BIT_NV 0x00200000 -#define GL_FONT_DESCENDER_BIT_NV 0x00400000 -#define GL_FONT_HEIGHT_BIT_NV 0x00800000 -#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 -#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 -#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 -#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 -#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 -#define GL_ROUNDED_RECT_NV 0xE8 -#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 -#define GL_ROUNDED_RECT2_NV 0xEA -#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB -#define GL_ROUNDED_RECT4_NV 0xEC -#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED -#define GL_ROUNDED_RECT8_NV 0xEE -#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF -#define GL_RELATIVE_RECT_NV 0xF7 -#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 -#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 -#define GL_FONT_UNAVAILABLE_NV 0x936A -#define GL_FONT_UNINTELLIGIBLE_NV 0x936B -#define GL_CONIC_CURVE_TO_NV 0x1A -#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B -#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 -#define GL_STANDARD_FONT_FORMAT_NV 0x936C -#define GL_2_BYTES_NV 0x1407 -#define GL_3_BYTES_NV 0x1408 -#define GL_4_BYTES_NV 0x1409 -#define GL_EYE_LINEAR_NV 0x2400 -#define GL_OBJECT_LINEAR_NV 0x2401 -#define GL_CONSTANT_NV 0x8576 -#define GL_PATH_FOG_GEN_MODE_NV 0x90AC -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 -#define GL_PATH_PROJECTION_NV 0x1701 -#define GL_PATH_MODELVIEW_NV 0x1700 -#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 -#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 -#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 -#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 -#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 -#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 -#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 -#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 -#define GL_FRAGMENT_INPUT_NV 0x936D -typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); -typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); -typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); -typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); -typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); -typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); -typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); -typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); -typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); -typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); -typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); -typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); -typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); -typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); -typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); -typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); -typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); -typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); -typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); -typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); -typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); -typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); -GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); -GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); -GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); -GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); -GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); -GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); -GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); -GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); -GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); -GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); -GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); -GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); -GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); -GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); -GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); -GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); -GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); -GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); -GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); -GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); -GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); -GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); -GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); -GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); -GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); -GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); -GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); -GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); -GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); -GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); -GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); -GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); -GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); -#endif -#endif /* GL_NV_path_rendering */ - -#ifndef GL_NV_path_rendering_shared_edge -#define GL_NV_path_rendering_shared_edge 1 -#define GL_SHARED_EDGE_NV 0xC0 -#endif /* GL_NV_path_rendering_shared_edge */ - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); -#endif -#endif /* GL_NV_pixel_data_range */ - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); -#endif -#endif /* GL_NV_point_sprite */ - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B -typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif -#endif /* GL_NV_present_video */ - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); -#endif -#endif /* GL_NV_primitive_restart */ - -#ifndef GL_NV_query_resource -#define GL_NV_query_resource 1 -#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 -#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 -#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 -#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 -#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 -#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 -typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC) (GLenum queryType, GLint tagId, GLuint bufSize, GLint *buffer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glQueryResourceNV (GLenum queryType, GLint tagId, GLuint bufSize, GLint *buffer); -#endif -#endif /* GL_NV_query_resource */ - -#ifndef GL_NV_query_resource_tag -#define GL_NV_query_resource_tag 1 -typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC) (GLsizei n, GLint *tagIds); -typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC) (GLsizei n, const GLint *tagIds); -typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC) (GLint tagId, const GLchar *tagString); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueryResourceTagNV (GLsizei n, GLint *tagIds); -GLAPI void APIENTRY glDeleteQueryResourceTagNV (GLsizei n, const GLint *tagIds); -GLAPI void APIENTRY glQueryResourceTagNV (GLint tagId, const GLchar *tagString); -#endif -#endif /* GL_NV_query_resource_tag */ - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); -#endif -#endif /* GL_NV_register_combiners */ - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); -#endif -#endif /* GL_NV_register_combiners2 */ - -#ifndef GL_NV_representative_fragment_test -#define GL_NV_representative_fragment_test 1 -#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F -#endif /* GL_NV_representative_fragment_test */ - -#ifndef GL_NV_robustness_video_memory_purge -#define GL_NV_robustness_video_memory_purge 1 -#define GL_PURGED_CONTEXT_RESET_NV 0x92BB -#endif /* GL_NV_robustness_video_memory_purge */ - -#ifndef GL_NV_sample_locations -#define GL_NV_sample_locations 1 -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 -#define GL_SAMPLE_LOCATION_NV 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glResolveDepthValuesNV (void); -#endif -#endif /* GL_NV_sample_locations */ - -#ifndef GL_NV_sample_mask_override_coverage -#define GL_NV_sample_mask_override_coverage 1 -#endif /* GL_NV_sample_mask_override_coverage */ - -#ifndef GL_NV_scissor_exclusive -#define GL_NV_scissor_exclusive 1 -#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 -#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 -typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); -#endif -#endif /* GL_NV_scissor_exclusive */ - -#ifndef GL_NV_shader_atomic_counters -#define GL_NV_shader_atomic_counters 1 -#endif /* GL_NV_shader_atomic_counters */ - -#ifndef GL_NV_shader_atomic_float -#define GL_NV_shader_atomic_float 1 -#endif /* GL_NV_shader_atomic_float */ - -#ifndef GL_NV_shader_atomic_float64 -#define GL_NV_shader_atomic_float64 1 -#endif /* GL_NV_shader_atomic_float64 */ - -#ifndef GL_NV_shader_atomic_fp16_vector -#define GL_NV_shader_atomic_fp16_vector 1 -#endif /* GL_NV_shader_atomic_fp16_vector */ - -#ifndef GL_NV_shader_atomic_int64 -#define GL_NV_shader_atomic_int64 1 -#endif /* GL_NV_shader_atomic_int64 */ - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 -typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); -typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); -GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); -GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); -GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); -GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); -GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); -GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); -GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); -GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); -GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif -#endif /* GL_NV_shader_buffer_load */ - -#ifndef GL_NV_shader_buffer_store -#define GL_NV_shader_buffer_store 1 -#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 -#endif /* GL_NV_shader_buffer_store */ - -#ifndef GL_NV_shader_storage_buffer_object -#define GL_NV_shader_storage_buffer_object 1 -#endif /* GL_NV_shader_storage_buffer_object */ - -#ifndef GL_NV_shader_subgroup_partitioned -#define GL_NV_shader_subgroup_partitioned 1 -#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 -#endif /* GL_NV_shader_subgroup_partitioned */ - -#ifndef GL_NV_shader_texture_footprint -#define GL_NV_shader_texture_footprint 1 -#endif /* GL_NV_shader_texture_footprint */ - -#ifndef GL_NV_shader_thread_group -#define GL_NV_shader_thread_group 1 -#define GL_WARP_SIZE_NV 0x9339 -#define GL_WARPS_PER_SM_NV 0x933A -#define GL_SM_COUNT_NV 0x933B -#endif /* GL_NV_shader_thread_group */ - -#ifndef GL_NV_shader_thread_shuffle -#define GL_NV_shader_thread_shuffle 1 -#endif /* GL_NV_shader_thread_shuffle */ - -#ifndef GL_NV_shading_rate_image -#define GL_NV_shading_rate_image 1 -#define GL_SHADING_RATE_IMAGE_NV 0x9563 -#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 -#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 -#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 -#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A -#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B -#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C -#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D -#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E -#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F -#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B -#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C -#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D -#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E -#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F -#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE -#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF -#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 -typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); -typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); -typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); -typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); -typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture); -GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); -GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); -GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); -GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); -GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order); -GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); -#endif -#endif /* GL_NV_shading_rate_image */ - -#ifndef GL_NV_stereo_view_rendering -#define GL_NV_stereo_view_rendering 1 -#endif /* GL_NV_stereo_view_rendering */ - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 -#endif /* GL_NV_tessellation_program5 */ - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif /* GL_NV_texgen_emboss */ - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif /* GL_NV_texgen_reflection */ - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 -typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureBarrierNV (void); -#endif -#endif /* GL_NV_texture_barrier */ - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif /* GL_NV_texture_compression_vtc */ - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif /* GL_NV_texture_env_combine4 */ - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif /* GL_NV_texture_expand_normal */ - -#ifndef GL_NV_texture_multisample -#define GL_NV_texture_multisample 1 -#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 -#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -#endif -#endif /* GL_NV_texture_multisample */ - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif /* GL_NV_texture_rectangle */ - -#ifndef GL_NV_texture_rectangle_compressed -#define GL_NV_texture_rectangle_compressed 1 -#endif /* GL_NV_texture_rectangle_compressed */ - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif /* GL_NV_texture_shader */ - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif /* GL_NV_texture_shader2 */ - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif /* GL_NV_texture_shader3 */ - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F -#define GL_LAYER_NV 0x8DAA -#define GL_NEXT_BUFFER_NV -2 -#define GL_SKIP_COMPONENTS4_NV -3 -#define GL_SKIP_COMPONENTS3_NV -4 -#define GL_SKIP_COMPONENTS2_NV -5 -#define GL_SKIP_COMPONENTS1_NV -6 -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); -GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif -#endif /* GL_NV_transform_feedback */ - -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedbackNV (void); -GLAPI void APIENTRY glResumeTransformFeedbackNV (void); -GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); -#endif -#endif /* GL_NV_transform_feedback2 */ - -#ifndef GL_NV_uniform_buffer_unified_memory -#define GL_NV_uniform_buffer_unified_memory 1 -#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E -#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F -#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 -#endif /* GL_NV_uniform_buffer_unified_memory */ - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 -typedef GLintptr GLvdpauSurfaceNV; -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE -typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); -typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); -GLAPI void APIENTRY glVDPAUFiniNV (void); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); -GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif -#endif /* GL_NV_vdpau_interop */ - -#ifndef GL_NV_vdpau_interop2 -#define GL_NV_vdpau_interop2 1 -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); -#endif -#endif /* GL_NV_vdpau_interop2 */ - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); -#endif -#endif /* GL_NV_vertex_array_range */ - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif /* GL_NV_vertex_array_range2 */ - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); -GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif -#endif /* GL_NV_vertex_attrib_integer_64bit */ - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 -typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); -GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); -#endif -#endif /* GL_NV_vertex_buffer_unified_memory */ - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); -GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); -GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); -GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); -#endif -#endif /* GL_NV_vertex_program */ - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif /* GL_NV_vertex_program1_1 */ - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif /* GL_NV_vertex_program2 */ - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif /* GL_NV_vertex_program2_option */ - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif /* GL_NV_vertex_program3 */ - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); -#endif -#endif /* GL_NV_vertex_program4 */ - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C -typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif -#endif /* GL_NV_video_capture */ - -#ifndef GL_NV_viewport_array2 -#define GL_NV_viewport_array2 1 -#endif /* GL_NV_viewport_array2 */ - -#ifndef GL_NV_viewport_swizzle -#define GL_NV_viewport_swizzle 1 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 -#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 -#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 -#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A -#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B -typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); -#endif -#endif /* GL_NV_viewport_swizzle */ - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif /* GL_OML_interlace */ - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif /* GL_OML_resample */ - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif /* GL_OML_subsample */ - -#ifndef GL_OVR_multiview -#define GL_OVR_multiview 1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 -#define GL_MAX_VIEWS_OVR 0x9631 -#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); -#endif -#endif /* GL_OVR_multiview */ - -#ifndef GL_OVR_multiview2 -#define GL_OVR_multiview2 1 -#endif /* GL_OVR_multiview2 */ - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); -#endif -#endif /* GL_PGI_misc_hints */ - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif /* GL_PGI_vertex_hints */ - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif /* GL_REND_screen_coordinates */ - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#define GL_RGBA_DXT5_S3TC 0x83A4 -#define GL_RGBA4_DXT5_S3TC 0x83A5 -#endif /* GL_S3_s3tc */ - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); -#endif -#endif /* GL_SGIS_detail_texture */ - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); -#endif -#endif /* GL_SGIS_fog_function */ - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif /* GL_SGIS_generate_mipmap */ - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); -#endif -#endif /* GL_SGIS_multisample */ - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); -#endif -#endif /* GL_SGIS_pixel_texture */ - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif /* GL_SGIS_point_line_texgen */ - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); -#endif -#endif /* GL_SGIS_point_parameters */ - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); -#endif -#endif /* GL_SGIS_sharpen_texture */ - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); -#endif -#endif /* GL_SGIS_texture4D */ - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif /* GL_SGIS_texture_border_clamp */ - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif -#endif /* GL_SGIS_texture_color_mask */ - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif /* GL_SGIS_texture_edge_clamp */ - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif -#endif /* GL_SGIS_texture_filter4 */ - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif /* GL_SGIS_texture_lod */ - -#ifndef GL_SGIS_texture_select -#define GL_SGIS_texture_select 1 -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif /* GL_SGIS_texture_select */ - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#define GL_ASYNC_MARKER_SGIX 0x8329 -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); -#endif -#endif /* GL_SGIX_async */ - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif /* GL_SGIX_async_histogram */ - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif /* GL_SGIX_async_pixel */ - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif /* GL_SGIX_blend_alpha_minmax */ - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif /* GL_SGIX_calligraphic_fragment */ - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif /* GL_SGIX_clipmap */ - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif /* GL_SGIX_convolution_accuracy */ - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif /* GL_SGIX_depth_pass_instrument */ - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif /* GL_SGIX_depth_texture */ - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif -#endif /* GL_SGIX_flush_raster */ - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif /* GL_SGIX_fog_offset */ - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); -GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); -#endif -#endif /* GL_SGIX_fragment_lighting */ - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); -#endif -#endif /* GL_SGIX_framezoom */ - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); -#endif -#endif /* GL_SGIX_igloo_interface */ - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); -#endif -#endif /* GL_SGIX_instruments */ - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#define GL_INTERLACE_SGIX 0x8094 -#endif /* GL_SGIX_interlace */ - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif /* GL_SGIX_ir_instrument1 */ - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#define GL_LIST_PRIORITY_SGIX 0x8182 -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); -GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); -GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); -#endif -#endif /* GL_SGIX_list_priority */ - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); -#endif -#endif /* GL_SGIX_pixel_texture */ - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif /* GL_SGIX_pixel_tiles */ - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); -#endif -#endif /* GL_SGIX_polynomial_ffd */ - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); -#endif -#endif /* GL_SGIX_reference_plane */ - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#define GL_PACK_RESAMPLE_SGIX 0x842E -#define GL_UNPACK_RESAMPLE_SGIX 0x842F -#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif /* GL_SGIX_resample */ - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif /* GL_SGIX_scalebias_hint */ - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif /* GL_SGIX_shadow */ - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif /* GL_SGIX_shadow_ambient */ - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); -#endif -#endif /* GL_SGIX_sprite */ - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif /* GL_SGIX_subsample */ - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif -#endif /* GL_SGIX_tag_sample_buffer */ - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif /* GL_SGIX_texture_add_env */ - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif /* GL_SGIX_texture_coordinate_clamp */ - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif /* GL_SGIX_texture_lod_bias */ - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif /* GL_SGIX_texture_multi_buffer */ - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif /* GL_SGIX_texture_scale_bias */ - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif /* GL_SGIX_vertex_preclip */ - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif /* GL_SGIX_ycrcb */ - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif /* GL_SGIX_ycrcb_subsample */ - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif /* GL_SGIX_ycrcba */ - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif /* GL_SGI_color_matrix */ - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); -#endif -#endif /* GL_SGI_color_table */ - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif /* GL_SGI_texture_color_table */ - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif -#endif /* GL_SUNX_constant_data */ - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif /* GL_SUN_convolution_border_modes */ - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); -#endif -#endif /* GL_SUN_global_alpha */ - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif -#endif /* GL_SUN_mesh_array */ - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif /* GL_SUN_slice_accum */ - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); -#endif -#endif /* GL_SUN_triangle_list */ - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif -#endif /* GL_SUN_vertex */ - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif /* GL_WIN_phong_shading */ - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif /* GL_WIN_specular_fog */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2.h deleted file mode 100644 index 366f77b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2.h +++ /dev/null @@ -1,675 +0,0 @@ -#ifndef __gles2_gl2_h_ -#define __gles2_gl2_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2013-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* -** This header is generated from the Khronos OpenGL / OpenGL ES XML -** API Registry. The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** https://github.com/KhronosGroup/OpenGL-Registry -*/ - -#include - -#ifndef GL_APIENTRYP -#define GL_APIENTRYP GL_APIENTRY* -#endif - -#ifndef GL_GLES_PROTOTYPES -#define GL_GLES_PROTOTYPES 1 -#endif - -/* Generated on date 20190911 */ - -/* Generated C header for: - * API: gles2 - * Profile: common - * Versions considered: 2\.[0-9] - * Versions emitted: .* - * Default extensions included: None - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef GL_ES_VERSION_2_0 -#define GL_ES_VERSION_2_0 1 -#include -typedef khronos_int8_t GLbyte; -typedef khronos_float_t GLclampf; -typedef khronos_int32_t GLfixed; -typedef khronos_int16_t GLshort; -typedef khronos_uint16_t GLushort; -typedef void GLvoid; -typedef struct __GLsync *GLsync; -typedef khronos_int64_t GLint64; -typedef khronos_uint64_t GLuint64; -typedef unsigned int GLenum; -typedef unsigned int GLuint; -typedef char GLchar; -typedef khronos_float_t GLfloat; -typedef khronos_ssize_t GLsizeiptr; -typedef khronos_intptr_t GLintptr; -typedef unsigned int GLbitfield; -typedef int GLint; -typedef unsigned char GLboolean; -typedef int GLsizei; -typedef khronos_uint8_t GLubyte; -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_FALSE 0 -#define GL_TRUE 1 -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_FUNC_ADD 0x8006 -#define GL_BLEND_EQUATION 0x8009 -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_STREAM_DRAW 0x88E0 -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_BLEND 0x0BE2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_LINE_WIDTH 0x0B21 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_FIXED 0x140C -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_SHADER_TYPE 0x8B4F -#define GL_DELETE_STATUS 0x8B80 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_INVERT 0x150A -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_TEXTURE 0x1702 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_COMPILE_STATUS 0x8B81 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGB565 0x8D62 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_NONE 0 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture); -typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor); -typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask); -typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); -typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s); -typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode); -typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures); -typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func); -typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag); -typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); -typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap); -typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices); -typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap); -typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void); -typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode); -typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures); -typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data); -typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void); -typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data); -typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name); -typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); -typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode); -typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap); -typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture); -typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width); -typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units); -typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); -typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); -typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -//typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask); -typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass); -typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); -#if GL_GLES_PROTOTYPES -GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); -GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); -GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode); -GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); -GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); -GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d); -GL_APICALL void GL_APIENTRY glClearStencil (GLint s); -GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); -GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); -GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); -GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); -GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); -GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); -GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); -GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); -GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); -GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f); -GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glDisable (GLenum cap); -GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices); -GL_APICALL void GL_APIENTRY glEnable (GLenum cap); -GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glFinish (void); -GL_APICALL void GL_APIENTRY glFlush (void); -GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); -GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); -GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures); -GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data); -GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GL_APICALL GLenum GL_APIENTRY glGetError (void); -GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data); -GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data); -GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name); -GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); -GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); -GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); -GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); -GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); -GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); -GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); -GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); -GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); -GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); -GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); -GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); -GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); -GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); -GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); -GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); -GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0); -GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0); -GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); -GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); -GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#endif /* GL_ES_VERSION_2_0 */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2ext.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2ext.h deleted file mode 100644 index 9ca6ed2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2ext.h +++ /dev/null @@ -1,3866 +0,0 @@ -#ifndef __gles2_gl2ext_h_ -#define __gles2_gl2ext_h_ 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2013-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* -** This header is generated from the Khronos OpenGL / OpenGL ES XML -** API Registry. The current version of the Registry, generator scripts -** used to make the header, and the header can be found at -** https://github.com/KhronosGroup/OpenGL-Registry -*/ - -#ifndef GL_APIENTRYP -#define GL_APIENTRYP GL_APIENTRY* -#endif - -/* Generated on date 20190911 */ - -/* Generated C header for: - * API: gles2 - * Profile: common - * Versions considered: 2\.[0-9] - * Versions emitted: _nomatch_^ - * Default extensions included: gles2 - * Additional extensions included: _nomatch_^ - * Extensions removed: _nomatch_^ - */ - -#ifndef GL_KHR_blend_equation_advanced -#define GL_KHR_blend_equation_advanced 1 -#define GL_MULTIPLY_KHR 0x9294 -#define GL_SCREEN_KHR 0x9295 -#define GL_OVERLAY_KHR 0x9296 -#define GL_DARKEN_KHR 0x9297 -#define GL_LIGHTEN_KHR 0x9298 -#define GL_COLORDODGE_KHR 0x9299 -#define GL_COLORBURN_KHR 0x929A -#define GL_HARDLIGHT_KHR 0x929B -#define GL_SOFTLIGHT_KHR 0x929C -#define GL_DIFFERENCE_KHR 0x929E -#define GL_EXCLUSION_KHR 0x92A0 -#define GL_HSL_HUE_KHR 0x92AD -#define GL_HSL_SATURATION_KHR 0x92AE -#define GL_HSL_COLOR_KHR 0x92AF -#define GL_HSL_LUMINOSITY_KHR 0x92B0 -typedef void (GL_APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlendBarrierKHR (void); -#endif -#endif /* GL_KHR_blend_equation_advanced */ - -#ifndef GL_KHR_blend_equation_advanced_coherent -#define GL_KHR_blend_equation_advanced_coherent 1 -#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 -#endif /* GL_KHR_blend_equation_advanced_coherent */ - -#ifndef GL_KHR_context_flush_control -#define GL_KHR_context_flush_control 1 -#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB -#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC -#endif /* GL_KHR_context_flush_control */ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -typedef void (GL_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -#define GL_SAMPLER 0x82E6 -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 -#define GL_DEBUG_SOURCE_API_KHR 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A -#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B -#define GL_DEBUG_TYPE_ERROR_KHR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 -#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 -#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D -#define GL_BUFFER_KHR 0x82E0 -#define GL_SHADER_KHR 0x82E1 -#define GL_PROGRAM_KHR 0x82E2 -#define GL_VERTEX_ARRAY_KHR 0x8074 -#define GL_QUERY_KHR 0x82E3 -#define GL_PROGRAM_PIPELINE_KHR 0x82E4 -#define GL_SAMPLER_KHR 0x82E6 -#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 -#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 -#define GL_DEBUG_OUTPUT_KHR 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 -#define GL_STACK_OVERFLOW_KHR 0x0503 -#define GL_STACK_UNDERFLOW_KHR 0x0504 -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); -typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); -typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); -GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); -GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params); -#endif -#endif /* GL_KHR_debug */ - -#ifndef GL_KHR_no_error -#define GL_KHR_no_error 1 -#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 -#endif /* GL_KHR_no_error */ - -#ifndef GL_KHR_parallel_shader_compile -#define GL_KHR_parallel_shader_compile 1 -#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 -#define GL_COMPLETION_STATUS_KHR 0x91B1 -typedef void (GL_APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); -#endif -#endif /* GL_KHR_parallel_shader_compile */ - -#ifndef GL_KHR_robust_buffer_access_behavior -#define GL_KHR_robust_buffer_access_behavior 1 -#endif /* GL_KHR_robust_buffer_access_behavior */ - -#ifndef GL_KHR_robustness -#define GL_KHR_robustness 1 -#define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 -#define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 -#define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 -#define GL_NO_RESET_NOTIFICATION_KHR 0x8261 -#define GL_CONTEXT_LOST_KHR 0x0507 -typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC) (void); -typedef void (GL_APIENTRYP PFNGLREADNPIXELSKHRPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusKHR (void); -GL_APICALL void GL_APIENTRY glReadnPixelsKHR (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GL_APICALL void GL_APIENTRY glGetnUniformfvKHR (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GL_APICALL void GL_APIENTRY glGetnUniformivKHR (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GL_APICALL void GL_APIENTRY glGetnUniformuivKHR (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -#endif -#endif /* GL_KHR_robustness */ - -#ifndef GL_KHR_shader_subgroup -#define GL_KHR_shader_subgroup 1 -#define GL_SUBGROUP_SIZE_KHR 0x9532 -#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 -#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 -#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 -#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 -#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 -#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 -#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 -#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 -#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 -#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 -#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 -#endif /* GL_KHR_shader_subgroup */ - -#ifndef GL_KHR_texture_compression_astc_hdr -#define GL_KHR_texture_compression_astc_hdr 1 -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif /* GL_KHR_texture_compression_astc_hdr */ - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif /* GL_KHR_texture_compression_astc_ldr */ - -#ifndef GL_KHR_texture_compression_astc_sliced_3d -#define GL_KHR_texture_compression_astc_sliced_3d 1 -#endif /* GL_KHR_texture_compression_astc_sliced_3d */ - -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -typedef void *GLeglImageOES; -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -#endif /* GL_OES_EGL_image */ - -#ifndef GL_OES_EGL_image_external -#define GL_OES_EGL_image_external 1 -#define GL_TEXTURE_EXTERNAL_OES 0x8D65 -#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 -#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 -#define GL_SAMPLER_EXTERNAL_OES 0x8D66 -#endif /* GL_OES_EGL_image_external */ - -#ifndef GL_OES_EGL_image_external_essl3 -#define GL_OES_EGL_image_external_essl3 1 -#endif /* GL_OES_EGL_image_external_essl3 */ - -#ifndef GL_OES_compressed_ETC1_RGB8_sub_texture -#define GL_OES_compressed_ETC1_RGB8_sub_texture 1 -#endif /* GL_OES_compressed_ETC1_RGB8_sub_texture */ - -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_OES_compressed_ETC1_RGB8_texture 1 -#define GL_ETC1_RGB8_OES 0x8D64 -#endif /* GL_OES_compressed_ETC1_RGB8_texture */ - -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif /* GL_OES_compressed_paletted_texture */ - -#ifndef GL_OES_copy_image -#define GL_OES_copy_image 1 -typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAOESPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyImageSubDataOES (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -#endif -#endif /* GL_OES_copy_image */ - -#ifndef GL_OES_depth24 -#define GL_OES_depth24 1 -#define GL_DEPTH_COMPONENT24_OES 0x81A6 -#endif /* GL_OES_depth24 */ - -#ifndef GL_OES_depth32 -#define GL_OES_depth32 1 -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#endif /* GL_OES_depth32 */ - -#ifndef GL_OES_depth_texture -#define GL_OES_depth_texture 1 -#endif /* GL_OES_depth_texture */ - -#ifndef GL_OES_draw_buffers_indexed -#define GL_OES_draw_buffers_indexed 1 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -typedef void (GL_APIENTRYP PFNGLENABLEIOESPROC) (GLenum target, GLuint index); -typedef void (GL_APIENTRYP PFNGLDISABLEIOESPROC) (GLenum target, GLuint index); -typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIOESPROC) (GLuint buf, GLenum mode); -typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIOESPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GL_APIENTRYP PFNGLBLENDFUNCIOESPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIOESPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (GL_APIENTRYP PFNGLCOLORMASKIOESPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIOESPROC) (GLenum target, GLuint index); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEnableiOES (GLenum target, GLuint index); -GL_APICALL void GL_APIENTRY glDisableiOES (GLenum target, GLuint index); -GL_APICALL void GL_APIENTRY glBlendEquationiOES (GLuint buf, GLenum mode); -GL_APICALL void GL_APIENTRY glBlendEquationSeparateiOES (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunciOES (GLuint buf, GLenum src, GLenum dst); -GL_APICALL void GL_APIENTRY glBlendFuncSeparateiOES (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GL_APICALL void GL_APIENTRY glColorMaskiOES (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GL_APICALL GLboolean GL_APIENTRY glIsEnablediOES (GLenum target, GLuint index); -#endif -#endif /* GL_OES_draw_buffers_indexed */ - -#ifndef GL_OES_draw_elements_base_vertex -#define GL_OES_draw_elements_base_vertex 1 -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexOES (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex); -#endif -#endif /* GL_OES_draw_elements_base_vertex */ - -#ifndef GL_OES_element_index_uint -#define GL_OES_element_index_uint 1 -#endif /* GL_OES_element_index_uint */ - -#ifndef GL_OES_fbo_render_mipmap -#define GL_OES_fbo_render_mipmap 1 -#endif /* GL_OES_fbo_render_mipmap */ - -#ifndef GL_OES_fragment_precision_high -#define GL_OES_fragment_precision_high 1 -#endif /* GL_OES_fragment_precision_high */ - -#ifndef GL_OES_geometry_point_size -#define GL_OES_geometry_point_size 1 -#endif /* GL_OES_geometry_point_size */ - -#ifndef GL_OES_geometry_shader -#define GL_OES_geometry_shader 1 -#define GL_GEOMETRY_SHADER_OES 0x8DD9 -#define GL_GEOMETRY_SHADER_BIT_OES 0x00000004 -#define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916 -#define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917 -#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918 -#define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F -#define GL_LAYER_PROVOKING_VERTEX_OES 0x825E -#define GL_LINES_ADJACENCY_OES 0x000A -#define GL_LINE_STRIP_ADJACENCY_OES 0x000B -#define GL_TRIANGLES_ADJACENCY_OES 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124 -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1 -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5 -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7 -#define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E -#define GL_UNDEFINED_VERTEX_OES 0x8260 -#define GL_PRIMITIVES_GENERATED_OES 0x8C87 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312 -#define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7 -#define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREOESPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferTextureOES (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif -#endif /* GL_OES_geometry_shader */ - -#ifndef GL_OES_get_program_binary -#define GL_OES_get_program_binary 1 -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE -#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF -typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLint length); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); -GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const void *binary, GLint length); -#endif -#endif /* GL_OES_get_program_binary */ - -#ifndef GL_OES_gpu_shader5 -#define GL_OES_gpu_shader5 1 -#endif /* GL_OES_gpu_shader5 */ - -#ifndef GL_OES_mapbuffer -#define GL_OES_mapbuffer 1 -#define GL_WRITE_ONLY_OES 0x88B9 -#define GL_BUFFER_ACCESS_OES 0x88BB -#define GL_BUFFER_MAPPED_OES 0x88BC -#define GL_BUFFER_MAP_POINTER_OES 0x88BD -typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); -typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void *GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); -GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); -GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void **params); -#endif -#endif /* GL_OES_mapbuffer */ - -#ifndef GL_OES_packed_depth_stencil -#define GL_OES_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#endif /* GL_OES_packed_depth_stencil */ - -#ifndef GL_OES_primitive_bounding_box -#define GL_OES_primitive_bounding_box 1 -#define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE -typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXOESPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxOES (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#endif -#endif /* GL_OES_primitive_bounding_box */ - -#ifndef GL_OES_required_internalformat -#define GL_OES_required_internalformat 1 -#define GL_ALPHA8_OES 0x803C -#define GL_DEPTH_COMPONENT16_OES 0x81A5 -#define GL_LUMINANCE4_ALPHA4_OES 0x8043 -#define GL_LUMINANCE8_ALPHA8_OES 0x8045 -#define GL_LUMINANCE8_OES 0x8040 -#define GL_RGBA4_OES 0x8056 -#define GL_RGB5_A1_OES 0x8057 -#define GL_RGB565_OES 0x8D62 -#define GL_RGB8_OES 0x8051 -#define GL_RGBA8_OES 0x8058 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB10_A2_EXT 0x8059 -#endif /* GL_OES_required_internalformat */ - -#ifndef GL_OES_rgb8_rgba8 -#define GL_OES_rgb8_rgba8 1 -#endif /* GL_OES_rgb8_rgba8 */ - -#ifndef GL_OES_sample_shading -#define GL_OES_sample_shading 1 -#define GL_SAMPLE_SHADING_OES 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 -typedef void (GL_APIENTRYP PFNGLMINSAMPLESHADINGOESPROC) (GLfloat value); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMinSampleShadingOES (GLfloat value); -#endif -#endif /* GL_OES_sample_shading */ - -#ifndef GL_OES_sample_variables -#define GL_OES_sample_variables 1 -#endif /* GL_OES_sample_variables */ - -#ifndef GL_OES_shader_image_atomic -#define GL_OES_shader_image_atomic 1 -#endif /* GL_OES_shader_image_atomic */ - -#ifndef GL_OES_shader_io_blocks -#define GL_OES_shader_io_blocks 1 -#endif /* GL_OES_shader_io_blocks */ - -#ifndef GL_OES_shader_multisample_interpolation -#define GL_OES_shader_multisample_interpolation 1 -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D -#endif /* GL_OES_shader_multisample_interpolation */ - -#ifndef GL_OES_standard_derivatives -#define GL_OES_standard_derivatives 1 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B -#endif /* GL_OES_standard_derivatives */ - -#ifndef GL_OES_stencil1 -#define GL_OES_stencil1 1 -#define GL_STENCIL_INDEX1_OES 0x8D46 -#endif /* GL_OES_stencil1 */ - -#ifndef GL_OES_stencil4 -#define GL_OES_stencil4 1 -#define GL_STENCIL_INDEX4_OES 0x8D47 -#endif /* GL_OES_stencil4 */ - -#ifndef GL_OES_surfaceless_context -#define GL_OES_surfaceless_context 1 -#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 -#endif /* GL_OES_surfaceless_context */ - -#ifndef GL_OES_tessellation_point_size -#define GL_OES_tessellation_point_size 1 -#endif /* GL_OES_tessellation_point_size */ - -#ifndef GL_OES_tessellation_shader -#define GL_OES_tessellation_shader 1 -#define GL_PATCHES_OES 0x000E -#define GL_PATCH_VERTICES_OES 0x8E72 -#define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75 -#define GL_TESS_GEN_MODE_OES 0x8E76 -#define GL_TESS_GEN_SPACING_OES 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78 -#define GL_TESS_GEN_POINT_MODE_OES 0x8E79 -#define GL_ISOLINES_OES 0x8E7A -#define GL_QUADS_OES 0x0007 -#define GL_FRACTIONAL_ODD_OES 0x8E7B -#define GL_FRACTIONAL_EVEN_OES 0x8E7C -#define GL_MAX_PATCH_VERTICES_OES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4 -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9 -#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221 -#define GL_IS_PER_PATCH_OES 0x92E7 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308 -#define GL_TESS_CONTROL_SHADER_OES 0x8E88 -#define GL_TESS_EVALUATION_SHADER_OES 0x8E87 -#define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010 -typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIOESPROC) (GLenum pname, GLint value); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glPatchParameteriOES (GLenum pname, GLint value); -#endif -#endif /* GL_OES_tessellation_shader */ - -#ifndef GL_OES_texture_3D -#define GL_OES_texture_3D 1 -#define GL_TEXTURE_WRAP_R_OES 0x8072 -#define GL_TEXTURE_3D_OES 0x806F -#define GL_TEXTURE_BINDING_3D_OES 0x806A -#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 -#define GL_SAMPLER_3D_OES 0x8B5F -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 -typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif -#endif /* GL_OES_texture_3D */ - -#ifndef GL_OES_texture_border_clamp -#define GL_OES_texture_border_clamp 1 -#define GL_TEXTURE_BORDER_COLOR_OES 0x1004 -#define GL_CLAMP_TO_BORDER_OES 0x812D -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexParameterIivOES (GLenum target, GLenum pname, const GLint *params); -GL_APICALL void GL_APIENTRY glTexParameterIuivOES (GLenum target, GLenum pname, const GLuint *params); -GL_APICALL void GL_APIENTRY glGetTexParameterIivOES (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetTexParameterIuivOES (GLenum target, GLenum pname, GLuint *params); -GL_APICALL void GL_APIENTRY glSamplerParameterIivOES (GLuint sampler, GLenum pname, const GLint *param); -GL_APICALL void GL_APIENTRY glSamplerParameterIuivOES (GLuint sampler, GLenum pname, const GLuint *param); -GL_APICALL void GL_APIENTRY glGetSamplerParameterIivOES (GLuint sampler, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivOES (GLuint sampler, GLenum pname, GLuint *params); -#endif -#endif /* GL_OES_texture_border_clamp */ - -#ifndef GL_OES_texture_buffer -#define GL_OES_texture_buffer 1 -#define GL_TEXTURE_BUFFER_OES 0x8C2A -#define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F -#define GL_SAMPLER_BUFFER_OES 0x8DC2 -#define GL_INT_SAMPLER_BUFFER_OES 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 -#define GL_IMAGE_BUFFER_OES 0x9051 -#define GL_INT_IMAGE_BUFFER_OES 0x905C -#define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 -#define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D -#define GL_TEXTURE_BUFFER_SIZE_OES 0x919E -typedef void (GL_APIENTRYP PFNGLTEXBUFFEROESPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEOESPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexBufferOES (GLenum target, GLenum internalformat, GLuint buffer); -GL_APICALL void GL_APIENTRY glTexBufferRangeOES (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -#endif -#endif /* GL_OES_texture_buffer */ - -#ifndef GL_OES_texture_compression_astc -#define GL_OES_texture_compression_astc 1 -#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 -#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 -#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 -#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 -#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 -#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 -#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 -#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 -#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 -#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 -#endif /* GL_OES_texture_compression_astc */ - -#ifndef GL_OES_texture_cube_map_array -#define GL_OES_texture_cube_map_array 1 -#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A -#define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F -#define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A -#endif /* GL_OES_texture_cube_map_array */ - -#ifndef GL_OES_texture_float -#define GL_OES_texture_float 1 -#endif /* GL_OES_texture_float */ - -#ifndef GL_OES_texture_float_linear -#define GL_OES_texture_float_linear 1 -#endif /* GL_OES_texture_float_linear */ - -#ifndef GL_OES_texture_half_float -#define GL_OES_texture_half_float 1 -#define GL_HALF_FLOAT_OES 0x8D61 -#endif /* GL_OES_texture_half_float */ - -#ifndef GL_OES_texture_half_float_linear -#define GL_OES_texture_half_float_linear 1 -#endif /* GL_OES_texture_half_float_linear */ - -#ifndef GL_OES_texture_npot -#define GL_OES_texture_npot 1 -#endif /* GL_OES_texture_npot */ - -#ifndef GL_OES_texture_stencil8 -#define GL_OES_texture_stencil8 1 -#define GL_STENCIL_INDEX_OES 0x1901 -#define GL_STENCIL_INDEX8_OES 0x8D48 -#endif /* GL_OES_texture_stencil8 */ - -#ifndef GL_OES_texture_storage_multisample_2d_array -#define GL_OES_texture_storage_multisample_2d_array 1 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105 -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexStorage3DMultisampleOES (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -#endif -#endif /* GL_OES_texture_storage_multisample_2d_array */ - -#ifndef GL_OES_texture_view -#define GL_OES_texture_view 1 -#define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWOESPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTextureViewOES (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -#endif -#endif /* GL_OES_texture_view */ - -#ifndef GL_OES_vertex_array_object -#define GL_OES_vertex_array_object 1 -#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 -typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); -typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); -typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); -GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); -GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); -GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); -#endif -#endif /* GL_OES_vertex_array_object */ - -#ifndef GL_OES_vertex_half_float -#define GL_OES_vertex_half_float 1 -#endif /* GL_OES_vertex_half_float */ - -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_OES_vertex_type_10_10_10_2 1 -#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 -#define GL_INT_10_10_10_2_OES 0x8DF7 -#endif /* GL_OES_vertex_type_10_10_10_2 */ - -#ifndef GL_OES_viewport_array -#define GL_OES_viewport_array 1 -#define GL_MAX_VIEWPORTS_OES 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS_OES 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE_OES 0x825D -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_OES 0x825F -typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVOESPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFOESPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVOESPROC) (GLuint index, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVOESPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDOESPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVOESPROC) (GLuint index, const GLint *v); -typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVOESPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFOESPROC) (GLuint index, GLfloat n, GLfloat f); -typedef void (GL_APIENTRYP PFNGLGETFLOATI_VOESPROC) (GLenum target, GLuint index, GLfloat *data); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glViewportArrayvOES (GLuint first, GLsizei count, const GLfloat *v); -GL_APICALL void GL_APIENTRY glViewportIndexedfOES (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GL_APICALL void GL_APIENTRY glViewportIndexedfvOES (GLuint index, const GLfloat *v); -GL_APICALL void GL_APIENTRY glScissorArrayvOES (GLuint first, GLsizei count, const GLint *v); -GL_APICALL void GL_APIENTRY glScissorIndexedOES (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glScissorIndexedvOES (GLuint index, const GLint *v); -GL_APICALL void GL_APIENTRY glDepthRangeArrayfvOES (GLuint first, GLsizei count, const GLfloat *v); -GL_APICALL void GL_APIENTRY glDepthRangeIndexedfOES (GLuint index, GLfloat n, GLfloat f); -GL_APICALL void GL_APIENTRY glGetFloati_vOES (GLenum target, GLuint index, GLfloat *data); -#endif -#endif /* GL_OES_viewport_array */ - -#ifndef GL_AMD_compressed_3DC_texture -#define GL_AMD_compressed_3DC_texture 1 -#define GL_3DC_X_AMD 0x87F9 -#define GL_3DC_XY_AMD 0x87FA -#endif /* GL_AMD_compressed_3DC_texture */ - -#ifndef GL_AMD_compressed_ATC_texture -#define GL_AMD_compressed_ATC_texture 1 -#define GL_ATC_RGB_AMD 0x8C92 -#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 -#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE -#endif /* GL_AMD_compressed_ATC_texture */ - -#ifndef GL_AMD_framebuffer_multisample_advanced -#define GL_AMD_framebuffer_multisample_advanced 1 -#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 -#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 -#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 -#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 -#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 -#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_AMD_framebuffer_multisample_advanced */ - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); -typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); -GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -#endif /* GL_AMD_performance_monitor */ - -#ifndef GL_AMD_program_binary_Z400 -#define GL_AMD_program_binary_Z400 1 -#define GL_Z400_BINARY_AMD 0x8740 -#endif /* GL_AMD_program_binary_Z400 */ - -#ifndef GL_ANDROID_extension_pack_es31a -#define GL_ANDROID_extension_pack_es31a 1 -#endif /* GL_ANDROID_extension_pack_es31a */ - -#ifndef GL_ANGLE_depth_texture -#define GL_ANGLE_depth_texture 1 -#endif /* GL_ANGLE_depth_texture */ - -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA -typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -#endif /* GL_ANGLE_framebuffer_blit */ - -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_ANGLE_framebuffer_multisample */ - -#ifndef GL_ANGLE_instanced_arrays -#define GL_ANGLE_instanced_arrays 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); -#endif -#endif /* GL_ANGLE_instanced_arrays */ - -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 -#endif /* GL_ANGLE_pack_reverse_row_order */ - -#ifndef GL_ANGLE_program_binary -#define GL_ANGLE_program_binary 1 -#define GL_PROGRAM_BINARY_ANGLE 0x93A6 -#endif /* GL_ANGLE_program_binary */ - -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#endif /* GL_ANGLE_texture_compression_dxt3 */ - -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 -#endif /* GL_ANGLE_texture_compression_dxt5 */ - -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 -#endif /* GL_ANGLE_texture_usage */ - -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 -typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif -#endif /* GL_ANGLE_translated_shader_source */ - -#ifndef GL_APPLE_clip_distance -#define GL_APPLE_clip_distance 1 -#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 -#define GL_CLIP_DISTANCE0_APPLE 0x3000 -#define GL_CLIP_DISTANCE1_APPLE 0x3001 -#define GL_CLIP_DISTANCE2_APPLE 0x3002 -#define GL_CLIP_DISTANCE3_APPLE 0x3003 -#define GL_CLIP_DISTANCE4_APPLE 0x3004 -#define GL_CLIP_DISTANCE5_APPLE 0x3005 -#define GL_CLIP_DISTANCE6_APPLE 0x3006 -#define GL_CLIP_DISTANCE7_APPLE 0x3007 -#endif /* GL_APPLE_clip_distance */ - -#ifndef GL_APPLE_color_buffer_packed_float -#define GL_APPLE_color_buffer_packed_float 1 -#endif /* GL_APPLE_color_buffer_packed_float */ - -#ifndef GL_APPLE_copy_texture_levels -#define GL_APPLE_copy_texture_levels 1 -typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif -#endif /* GL_APPLE_copy_texture_levels */ - -#ifndef GL_APPLE_framebuffer_multisample -#define GL_APPLE_framebuffer_multisample 1 -#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 -#define GL_MAX_SAMPLES_APPLE 0x8D57 -#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); -#endif -#endif /* GL_APPLE_framebuffer_multisample */ - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#define GL_RGB_RAW_422_APPLE 0x8A51 -#endif /* GL_APPLE_rgb_422 */ - -#ifndef GL_APPLE_sync -#define GL_APPLE_sync 1 -#define GL_SYNC_OBJECT_APPLE 0x8A53 -#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 -#define GL_OBJECT_TYPE_APPLE 0x9112 -#define GL_SYNC_CONDITION_APPLE 0x9113 -#define GL_SYNC_STATUS_APPLE 0x9114 -#define GL_SYNC_FLAGS_APPLE 0x9115 -#define GL_SYNC_FENCE_APPLE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 -#define GL_UNSIGNALED_APPLE 0x9118 -#define GL_SIGNALED_APPLE 0x9119 -#define GL_ALREADY_SIGNALED_APPLE 0x911A -#define GL_TIMEOUT_EXPIRED_APPLE 0x911B -#define GL_CONDITION_SATISFIED_APPLE 0x911C -#define GL_WAIT_FAILED_APPLE 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 -#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull -typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); -typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); -typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); -typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); -GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); -GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); -GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); -GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif -#endif /* GL_APPLE_sync */ - -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_APPLE_texture_format_BGRA8888 1 -#define GL_BGRA_EXT 0x80E1 -#define GL_BGRA8_EXT 0x93A1 -#endif /* GL_APPLE_texture_format_BGRA8888 */ - -#ifndef GL_APPLE_texture_max_level -#define GL_APPLE_texture_max_level 1 -#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D -#endif /* GL_APPLE_texture_max_level */ - -#ifndef GL_APPLE_texture_packed_float -#define GL_APPLE_texture_packed_float 1 -#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B -#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E -#define GL_R11F_G11F_B10F_APPLE 0x8C3A -#define GL_RGB9_E5_APPLE 0x8C3D -#endif /* GL_APPLE_texture_packed_float */ - -#ifndef GL_ARM_mali_program_binary -#define GL_ARM_mali_program_binary 1 -#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 -#endif /* GL_ARM_mali_program_binary */ - -#ifndef GL_ARM_mali_shader_binary -#define GL_ARM_mali_shader_binary 1 -#define GL_MALI_SHADER_BINARY_ARM 0x8F60 -#endif /* GL_ARM_mali_shader_binary */ - -#ifndef GL_ARM_rgba8 -#define GL_ARM_rgba8 1 -#endif /* GL_ARM_rgba8 */ - -#ifndef GL_ARM_shader_framebuffer_fetch -#define GL_ARM_shader_framebuffer_fetch 1 -#define GL_FETCH_PER_SAMPLE_ARM 0x8F65 -#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 -#endif /* GL_ARM_shader_framebuffer_fetch */ - -#ifndef GL_ARM_shader_framebuffer_fetch_depth_stencil -#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 -#endif /* GL_ARM_shader_framebuffer_fetch_depth_stencil */ - -#ifndef GL_DMP_program_binary -#define GL_DMP_program_binary 1 -#define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251 -#define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252 -#define GL_DMP_PROGRAM_BINARY_DMP 0x9253 -#endif /* GL_DMP_program_binary */ - -#ifndef GL_DMP_shader_binary -#define GL_DMP_shader_binary 1 -#define GL_SHADER_BINARY_DMP 0x9250 -#endif /* GL_DMP_shader_binary */ - -#ifndef GL_EXT_EGL_image_array -#define GL_EXT_EGL_image_array 1 -#endif /* GL_EXT_EGL_image_array */ - -#ifndef GL_EXT_EGL_image_storage -#define GL_EXT_EGL_image_storage 1 -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); -GL_APICALL void GL_APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); -#endif -#endif /* GL_EXT_EGL_image_storage */ - -#ifndef GL_EXT_YUV_target -#define GL_EXT_YUV_target 1 -#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 -#endif /* GL_EXT_YUV_target */ - -#ifndef GL_EXT_base_instance -#define GL_EXT_base_instance 1 -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedBaseInstanceEXT (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); -#endif -#endif /* GL_EXT_base_instance */ - -#ifndef GL_EXT_blend_func_extended -#define GL_EXT_blend_func_extended 1 -#define GL_SRC1_COLOR_EXT 0x88F9 -#define GL_SRC1_ALPHA_EXT 0x8589 -#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB -#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 -#define GL_LOCATION_INDEX_EXT 0x930F -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC -typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC) (GLuint program, GLenum programInterface, const GLchar *name); -typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATAINDEXEXTPROC) (GLuint program, const GLchar *name); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBindFragDataLocationIndexedEXT (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GL_APICALL void GL_APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); -GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationIndexEXT (GLuint program, GLenum programInterface, const GLchar *name); -GL_APICALL GLint GL_APIENTRY glGetFragDataIndexEXT (GLuint program, const GLchar *name); -#endif -#endif /* GL_EXT_blend_func_extended */ - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#endif /* GL_EXT_blend_minmax */ - -#ifndef GL_EXT_buffer_storage -#define GL_EXT_buffer_storage 1 -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_PERSISTENT_BIT_EXT 0x0040 -#define GL_MAP_COHERENT_BIT_EXT 0x0080 -#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100 -#define GL_CLIENT_STORAGE_BIT_EXT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F -#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220 -typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBufferStorageEXT (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -#endif -#endif /* GL_EXT_buffer_storage */ - -#ifndef GL_EXT_clear_texture -#define GL_EXT_clear_texture 1 -typedef void (GL_APIENTRYP PFNGLCLEARTEXIMAGEEXTPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -typedef void (GL_APIENTRYP PFNGLCLEARTEXSUBIMAGEEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glClearTexImageEXT (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); -GL_APICALL void GL_APIENTRY glClearTexSubImageEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); -#endif -#endif /* GL_EXT_clear_texture */ - -#ifndef GL_EXT_clip_control -#define GL_EXT_clip_control 1 -#define GL_LOWER_LEFT_EXT 0x8CA1 -#define GL_UPPER_LEFT_EXT 0x8CA2 -#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E -#define GL_ZERO_TO_ONE_EXT 0x935F -#define GL_CLIP_ORIGIN_EXT 0x935C -#define GL_CLIP_DEPTH_MODE_EXT 0x935D -typedef void (GL_APIENTRYP PFNGLCLIPCONTROLEXTPROC) (GLenum origin, GLenum depth); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glClipControlEXT (GLenum origin, GLenum depth); -#endif -#endif /* GL_EXT_clip_control */ - -#ifndef GL_EXT_clip_cull_distance -#define GL_EXT_clip_cull_distance 1 -#define GL_MAX_CLIP_DISTANCES_EXT 0x0D32 -#define GL_MAX_CULL_DISTANCES_EXT 0x82F9 -#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT 0x82FA -#define GL_CLIP_DISTANCE0_EXT 0x3000 -#define GL_CLIP_DISTANCE1_EXT 0x3001 -#define GL_CLIP_DISTANCE2_EXT 0x3002 -#define GL_CLIP_DISTANCE3_EXT 0x3003 -#define GL_CLIP_DISTANCE4_EXT 0x3004 -#define GL_CLIP_DISTANCE5_EXT 0x3005 -#define GL_CLIP_DISTANCE6_EXT 0x3006 -#define GL_CLIP_DISTANCE7_EXT 0x3007 -#endif /* GL_EXT_clip_cull_distance */ - -#ifndef GL_EXT_color_buffer_float -#define GL_EXT_color_buffer_float 1 -#endif /* GL_EXT_color_buffer_float */ - -#ifndef GL_EXT_color_buffer_half_float -#define GL_EXT_color_buffer_half_float 1 -#define GL_RGBA16F_EXT 0x881A -#define GL_RGB16F_EXT 0x881B -#define GL_RG16F_EXT 0x822F -#define GL_R16F_EXT 0x822D -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 -#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 -#endif /* GL_EXT_color_buffer_half_float */ - -#ifndef GL_EXT_conservative_depth -#define GL_EXT_conservative_depth 1 -#endif /* GL_EXT_conservative_depth */ - -#ifndef GL_EXT_copy_image -#define GL_EXT_copy_image 1 -typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAEXTPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyImageSubDataEXT (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); -#endif -#endif /* GL_EXT_copy_image */ - -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -#endif /* GL_EXT_debug_label */ - -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); -#endif -#endif /* GL_EXT_debug_marker */ - -#ifndef GL_EXT_depth_clamp -#define GL_EXT_depth_clamp 1 -#define GL_DEPTH_CLAMP_EXT 0x864F -#endif /* GL_EXT_depth_clamp */ - -#ifndef GL_EXT_discard_framebuffer -#define GL_EXT_discard_framebuffer 1 -#define GL_COLOR_EXT 0x1800 -#define GL_DEPTH_EXT 0x1801 -#define GL_STENCIL_EXT 0x1802 -typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif -#endif /* GL_EXT_discard_framebuffer */ - -#ifndef GL_EXT_disjoint_timer_query -#define GL_EXT_disjoint_timer_query 1 -#define GL_QUERY_COUNTER_BITS_EXT 0x8864 -#define GL_CURRENT_QUERY_EXT 0x8865 -#define GL_QUERY_RESULT_EXT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 -#define GL_TIME_ELAPSED_EXT 0x88BF -#define GL_TIMESTAMP_EXT 0x8E28 -#define GL_GPU_DISJOINT_EXT 0x8FBB -typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); -typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); -typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); -typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); -typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); -GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); -GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); -GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); -GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); -GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); -GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); -#endif -#endif /* GL_EXT_disjoint_timer_query */ - -#ifndef GL_EXT_draw_buffers -#define GL_EXT_draw_buffers 1 -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 -#define GL_DRAW_BUFFER0_EXT 0x8825 -#define GL_DRAW_BUFFER1_EXT 0x8826 -#define GL_DRAW_BUFFER2_EXT 0x8827 -#define GL_DRAW_BUFFER3_EXT 0x8828 -#define GL_DRAW_BUFFER4_EXT 0x8829 -#define GL_DRAW_BUFFER5_EXT 0x882A -#define GL_DRAW_BUFFER6_EXT 0x882B -#define GL_DRAW_BUFFER7_EXT 0x882C -#define GL_DRAW_BUFFER8_EXT 0x882D -#define GL_DRAW_BUFFER9_EXT 0x882E -#define GL_DRAW_BUFFER10_EXT 0x882F -#define GL_DRAW_BUFFER11_EXT 0x8830 -#define GL_DRAW_BUFFER12_EXT 0x8831 -#define GL_DRAW_BUFFER13_EXT 0x8832 -#define GL_DRAW_BUFFER14_EXT 0x8833 -#define GL_DRAW_BUFFER15_EXT 0x8834 -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_EXT_draw_buffers */ - -#ifndef GL_EXT_draw_buffers_indexed -#define GL_EXT_draw_buffers_indexed 1 -typedef void (GL_APIENTRYP PFNGLENABLEIEXTPROC) (GLenum target, GLuint index); -typedef void (GL_APIENTRYP PFNGLDISABLEIEXTPROC) (GLenum target, GLuint index); -typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIEXTPROC) (GLuint buf, GLenum mode); -typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIEXTPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GL_APIENTRYP PFNGLBLENDFUNCIEXTPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIEXTPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (GL_APIENTRYP PFNGLCOLORMASKIEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIEXTPROC) (GLenum target, GLuint index); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEnableiEXT (GLenum target, GLuint index); -GL_APICALL void GL_APIENTRY glDisableiEXT (GLenum target, GLuint index); -GL_APICALL void GL_APIENTRY glBlendEquationiEXT (GLuint buf, GLenum mode); -GL_APICALL void GL_APIENTRY glBlendEquationSeparateiEXT (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunciEXT (GLuint buf, GLenum src, GLenum dst); -GL_APICALL void GL_APIENTRY glBlendFuncSeparateiEXT (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GL_APICALL void GL_APIENTRY glColorMaskiEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GL_APICALL GLboolean GL_APIENTRY glIsEnablediEXT (GLenum target, GLuint index); -#endif -#endif /* GL_EXT_draw_buffers_indexed */ - -#ifndef GL_EXT_draw_elements_base_vertex -#define GL_EXT_draw_elements_base_vertex 1 -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -#endif -#endif /* GL_EXT_draw_elements_base_vertex */ - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_EXT_draw_instanced */ - -#ifndef GL_EXT_draw_transform_feedback -#define GL_EXT_draw_transform_feedback 1 -typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKEXTPROC) (GLenum mode, GLuint id); -typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC) (GLenum mode, GLuint id, GLsizei instancecount); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawTransformFeedbackEXT (GLenum mode, GLuint id); -GL_APICALL void GL_APIENTRY glDrawTransformFeedbackInstancedEXT (GLenum mode, GLuint id, GLsizei instancecount); -#endif -#endif /* GL_EXT_draw_transform_feedback */ - -#ifndef GL_EXT_external_buffer -#define GL_EXT_external_buffer 1 -typedef void *GLeglClientBufferEXT; -typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -GL_APICALL void GL_APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); -#endif -#endif /* GL_EXT_external_buffer */ - -#ifndef GL_EXT_float_blend -#define GL_EXT_float_blend 1 -#endif /* GL_EXT_float_blend */ - -#ifndef GL_EXT_geometry_point_size -#define GL_EXT_geometry_point_size 1 -#endif /* GL_EXT_geometry_point_size */ - -#ifndef GL_EXT_geometry_shader -#define GL_EXT_geometry_shader 1 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 -#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 -#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 -#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 -#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F -#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_UNDEFINED_VERTEX_EXT 0x8260 -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 -#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif -#endif /* GL_EXT_geometry_shader */ - -#ifndef GL_EXT_gpu_shader5 -#define GL_EXT_gpu_shader5 1 -#endif /* GL_EXT_gpu_shader5 */ - -#ifndef GL_EXT_instanced_arrays -#define GL_EXT_instanced_arrays 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT (GLuint index, GLuint divisor); -#endif -#endif /* GL_EXT_instanced_arrays */ - -#ifndef GL_EXT_map_buffer_range -#define GL_EXT_map_buffer_range 1 -#define GL_MAP_READ_BIT_EXT 0x0001 -#define GL_MAP_WRITE_BIT_EXT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 -typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void *GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); -#endif -#endif /* GL_EXT_map_buffer_range */ - -#ifndef GL_EXT_memory_object -#define GL_EXT_memory_object 1 -#define GL_TEXTURE_TILING_EXT 0x9580 -#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 -#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B -#define GL_NUM_TILING_TYPES_EXT 0x9582 -#define GL_TILING_TYPES_EXT 0x9583 -#define GL_OPTIMAL_TILING_EXT 0x9584 -#define GL_LINEAR_TILING_EXT 0x9585 -#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 -#define GL_DEVICE_UUID_EXT 0x9597 -#define GL_DRIVER_UUID_EXT 0x9598 -#define GL_UUID_SIZE_EXT 16 -typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); -typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); -typedef void (GL_APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); -typedef GLboolean (GL_APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); -typedef void (GL_APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); -typedef void (GL_APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); -typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); -GL_APICALL void GL_APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); -GL_APICALL void GL_APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); -GL_APICALL GLboolean GL_APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); -GL_APICALL void GL_APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); -GL_APICALL void GL_APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); -GL_APICALL void GL_APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); -#endif -#endif /* GL_EXT_memory_object */ - -#ifndef GL_EXT_memory_object_fd -#define GL_EXT_memory_object_fd 1 -#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 -typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); -#endif -#endif /* GL_EXT_memory_object_fd */ - -#ifndef GL_EXT_memory_object_win32 -#define GL_EXT_memory_object_win32 1 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 -#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 -#define GL_DEVICE_LUID_EXT 0x9599 -#define GL_DEVICE_NODE_MASK_EXT 0x959A -#define GL_LUID_SIZE_EXT 8 -#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 -#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A -#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B -#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C -typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); -typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); -GL_APICALL void GL_APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); -#endif -#endif /* GL_EXT_memory_object_win32 */ - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); -#endif -#endif /* GL_EXT_multi_draw_arrays */ - -#ifndef GL_EXT_multi_draw_indirect -#define GL_EXT_multi_draw_indirect 1 -typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMultiDrawArraysIndirectEXT (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); -GL_APICALL void GL_APIENTRY glMultiDrawElementsIndirectEXT (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); -#endif -#endif /* GL_EXT_multi_draw_indirect */ - -#ifndef GL_EXT_multisampled_compatibility -#define GL_EXT_multisampled_compatibility 1 -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#endif /* GL_EXT_multisampled_compatibility */ - -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_EXT_multisampled_render_to_texture 1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif -#endif /* GL_EXT_multisampled_render_to_texture */ - -#ifndef GL_EXT_multiview_draw_buffers -#define GL_EXT_multiview_draw_buffers 1 -#define GL_COLOR_ATTACHMENT_EXT 0x90F0 -#define GL_MULTIVIEW_EXT 0x90F1 -#define GL_DRAW_BUFFER_EXT 0x0C01 -#define GL_READ_BUFFER_EXT 0x0C02 -#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 -typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); -typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); -GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); -GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); -#endif -#endif /* GL_EXT_multiview_draw_buffers */ - -#ifndef GL_EXT_multiview_tessellation_geometry_shader -#define GL_EXT_multiview_tessellation_geometry_shader 1 -#endif /* GL_EXT_multiview_tessellation_geometry_shader */ - -#ifndef GL_EXT_multiview_texture_multisample -#define GL_EXT_multiview_texture_multisample 1 -#endif /* GL_EXT_multiview_texture_multisample */ - -#ifndef GL_EXT_multiview_timer_query -#define GL_EXT_multiview_timer_query 1 -#endif /* GL_EXT_multiview_timer_query */ - -#ifndef GL_EXT_occlusion_query_boolean -#define GL_EXT_occlusion_query_boolean 1 -#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A -#endif /* GL_EXT_occlusion_query_boolean */ - -#ifndef GL_EXT_polygon_offset_clamp -#define GL_EXT_polygon_offset_clamp 1 -#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B -typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); -#endif -#endif /* GL_EXT_polygon_offset_clamp */ - -#ifndef GL_EXT_post_depth_coverage -#define GL_EXT_post_depth_coverage 1 -#endif /* GL_EXT_post_depth_coverage */ - -#ifndef GL_EXT_primitive_bounding_box -#define GL_EXT_primitive_bounding_box 1 -#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE -typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXEXTPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); -#endif -#endif /* GL_EXT_primitive_bounding_box */ - -#ifndef GL_EXT_protected_textures -#define GL_EXT_protected_textures 1 -#define GL_CONTEXT_FLAG_PROTECTED_CONTENT_BIT_EXT 0x00000010 -#define GL_TEXTURE_PROTECTED_EXT 0x8BFA -#endif /* GL_EXT_protected_textures */ - -#ifndef GL_EXT_pvrtc_sRGB -#define GL_EXT_pvrtc_sRGB 1 -#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 -#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 -#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 -#endif /* GL_EXT_pvrtc_sRGB */ - -#ifndef GL_EXT_raster_multisample -#define GL_EXT_raster_multisample 1 -#define GL_RASTER_MULTISAMPLE_EXT 0x9327 -#define GL_RASTER_SAMPLES_EXT 0x9328 -#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 -#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A -#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B -#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C -typedef void (GL_APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); -#endif -#endif /* GL_EXT_raster_multisample */ - -#ifndef GL_EXT_read_format_bgra -#define GL_EXT_read_format_bgra 1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 -#endif /* GL_EXT_read_format_bgra */ - -#ifndef GL_EXT_render_snorm -#define GL_EXT_render_snorm 1 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM_EXT 0x8F98 -#define GL_RG16_SNORM_EXT 0x8F99 -#define GL_RGBA16_SNORM_EXT 0x8F9B -#endif /* GL_EXT_render_snorm */ - -#ifndef GL_EXT_robustness -#define GL_EXT_robustness 1 -#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 -#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 -#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 -#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 -typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); -typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); -GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif -#endif /* GL_EXT_robustness */ - -#ifndef GL_EXT_sRGB -#define GL_EXT_sRGB 1 -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 -#endif /* GL_EXT_sRGB */ - -#ifndef GL_EXT_sRGB_write_control -#define GL_EXT_sRGB_write_control 1 -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#endif /* GL_EXT_sRGB_write_control */ - -#ifndef GL_EXT_semaphore -#define GL_EXT_semaphore 1 -#define GL_LAYOUT_GENERAL_EXT 0x958D -#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E -#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F -#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 -#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 -#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 -#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 -#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 -#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 -typedef void (GL_APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); -typedef void (GL_APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); -typedef GLboolean (GL_APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); -typedef void (GL_APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); -typedef void (GL_APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); -typedef void (GL_APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); -typedef void (GL_APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); -GL_APICALL void GL_APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); -GL_APICALL GLboolean GL_APIENTRY glIsSemaphoreEXT (GLuint semaphore); -GL_APICALL void GL_APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); -GL_APICALL void GL_APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); -GL_APICALL void GL_APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); -GL_APICALL void GL_APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); -#endif -#endif /* GL_EXT_semaphore */ - -#ifndef GL_EXT_semaphore_fd -#define GL_EXT_semaphore_fd 1 -typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); -#endif -#endif /* GL_EXT_semaphore_fd */ - -#ifndef GL_EXT_semaphore_win32 -#define GL_EXT_semaphore_win32 1 -#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 -#define GL_D3D12_FENCE_VALUE_EXT 0x9595 -typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); -typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); -GL_APICALL void GL_APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); -#endif -#endif /* GL_EXT_semaphore_win32 */ - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#define GL_ACTIVE_PROGRAM_EXT 0x8259 -#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 -#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE_EXT 0x8258 -#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A -typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); -typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); -typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); -typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); -GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); -GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); -GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); -GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); -GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); -GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); -GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); -GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); -GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); -GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); -GL_APICALL void GL_APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); -GL_APICALL void GL_APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GL_APICALL void GL_APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GL_APICALL void GL_APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GL_APICALL void GL_APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GL_APICALL void GL_APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GL_APICALL void GL_APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif -#endif /* GL_EXT_separate_shader_objects */ - -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif /* GL_EXT_shader_framebuffer_fetch */ - -#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent -#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierEXT (void); -#endif -#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ - -#ifndef GL_EXT_shader_group_vote -#define GL_EXT_shader_group_vote 1 -#endif /* GL_EXT_shader_group_vote */ - -#ifndef GL_EXT_shader_implicit_conversions -#define GL_EXT_shader_implicit_conversions 1 -#endif /* GL_EXT_shader_implicit_conversions */ - -#ifndef GL_EXT_shader_integer_mix -#define GL_EXT_shader_integer_mix 1 -#endif /* GL_EXT_shader_integer_mix */ - -#ifndef GL_EXT_shader_io_blocks -#define GL_EXT_shader_io_blocks 1 -#endif /* GL_EXT_shader_io_blocks */ - -#ifndef GL_EXT_shader_non_constant_global_initializers -#define GL_EXT_shader_non_constant_global_initializers 1 -#endif /* GL_EXT_shader_non_constant_global_initializers */ - -#ifndef GL_EXT_shader_pixel_local_storage -#define GL_EXT_shader_pixel_local_storage 1 -#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 -#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 -#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 -#endif /* GL_EXT_shader_pixel_local_storage */ - -#ifndef GL_EXT_shader_pixel_local_storage2 -#define GL_EXT_shader_pixel_local_storage2 1 -#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_FAST_SIZE_EXT 0x9650 -#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_SIZE_EXT 0x9651 -#define GL_FRAMEBUFFER_INCOMPLETE_INSUFFICIENT_SHADER_COMBINED_LOCAL_STORAGE_EXT 0x9652 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target, GLsizei size); -typedef GLsizei (GL_APIENTRYP PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target); -typedef void (GL_APIENTRYP PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC) (GLsizei offset, GLsizei n, const GLuint *values); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferPixelLocalStorageSizeEXT (GLuint target, GLsizei size); -GL_APICALL GLsizei GL_APIENTRY glGetFramebufferPixelLocalStorageSizeEXT (GLuint target); -GL_APICALL void GL_APIENTRY glClearPixelLocalStorageuiEXT (GLsizei offset, GLsizei n, const GLuint *values); -#endif -#endif /* GL_EXT_shader_pixel_local_storage2 */ - -#ifndef GL_EXT_shader_texture_lod -#define GL_EXT_shader_texture_lod 1 -#endif /* GL_EXT_shader_texture_lod */ - -#ifndef GL_EXT_shadow_samplers -#define GL_EXT_shadow_samplers 1 -#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C -#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D -#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E -#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 -#endif /* GL_EXT_shadow_samplers */ - -#ifndef GL_EXT_sparse_texture -#define GL_EXT_sparse_texture 1 -#define GL_TEXTURE_SPARSE_EXT 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 -#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA -#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 -#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_TEXTURE_3D 0x806F -#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 -typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexPageCommitmentEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -#endif -#endif /* GL_EXT_sparse_texture */ - -#ifndef GL_EXT_sparse_texture2 -#define GL_EXT_sparse_texture2 1 -#endif /* GL_EXT_sparse_texture2 */ - -#ifndef GL_EXT_tessellation_point_size -#define GL_EXT_tessellation_point_size 1 -#endif /* GL_EXT_tessellation_point_size */ - -#ifndef GL_EXT_tessellation_shader -#define GL_EXT_tessellation_shader 1 -#define GL_PATCHES_EXT 0x000E -#define GL_PATCH_VERTICES_EXT 0x8E72 -#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75 -#define GL_TESS_GEN_MODE_EXT 0x8E76 -#define GL_TESS_GEN_SPACING_EXT 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78 -#define GL_TESS_GEN_POINT_MODE_EXT 0x8E79 -#define GL_ISOLINES_EXT 0x8E7A -#define GL_QUADS_EXT 0x0007 -#define GL_FRACTIONAL_ODD_EXT 0x8E7B -#define GL_FRACTIONAL_EVEN_EXT 0x8E7C -#define GL_MAX_PATCH_VERTICES_EXT 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4 -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9 -#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 -#define GL_IS_PER_PATCH_EXT 0x92E7 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308 -#define GL_TESS_CONTROL_SHADER_EXT 0x8E88 -#define GL_TESS_EVALUATION_SHADER_EXT 0x8E87 -#define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010 -typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIEXTPROC) (GLenum pname, GLint value); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glPatchParameteriEXT (GLenum pname, GLint value); -#endif -#endif /* GL_EXT_tessellation_shader */ - -#ifndef GL_EXT_texture_border_clamp -#define GL_EXT_texture_border_clamp 1 -#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 -#define GL_CLAMP_TO_BORDER_EXT 0x812D -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, GLuint *params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); -GL_APICALL void GL_APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); -GL_APICALL void GL_APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); -GL_APICALL void GL_APIENTRY glSamplerParameterIivEXT (GLuint sampler, GLenum pname, const GLint *param); -GL_APICALL void GL_APIENTRY glSamplerParameterIuivEXT (GLuint sampler, GLenum pname, const GLuint *param); -GL_APICALL void GL_APIENTRY glGetSamplerParameterIivEXT (GLuint sampler, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivEXT (GLuint sampler, GLenum pname, GLuint *params); -#endif -#endif /* GL_EXT_texture_border_clamp */ - -#ifndef GL_EXT_texture_buffer -#define GL_EXT_texture_buffer 1 -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D -#define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E -typedef void (GL_APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEEXTPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); -GL_APICALL void GL_APIENTRY glTexBufferRangeEXT (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -#endif -#endif /* GL_EXT_texture_buffer */ - -#ifndef GL_EXT_texture_compression_astc_decode_mode -#define GL_EXT_texture_compression_astc_decode_mode 1 -#define GL_TEXTURE_ASTC_DECODE_PRECISION_EXT 0x8F69 -#endif /* GL_EXT_texture_compression_astc_decode_mode */ - -#ifndef GL_EXT_texture_compression_bptc -#define GL_EXT_texture_compression_bptc 1 -#define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F -#endif /* GL_EXT_texture_compression_bptc */ - -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif /* GL_EXT_texture_compression_dxt1 */ - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#endif /* GL_EXT_texture_compression_rgtc */ - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif /* GL_EXT_texture_compression_s3tc */ - -#ifndef GL_EXT_texture_compression_s3tc_srgb -#define GL_EXT_texture_compression_s3tc_srgb 1 -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif /* GL_EXT_texture_compression_s3tc_srgb */ - -#ifndef GL_EXT_texture_cube_map_array -#define GL_EXT_texture_cube_map_array 1 -#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A -#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#endif /* GL_EXT_texture_cube_map_array */ - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif /* GL_EXT_texture_filter_anisotropic */ - -#ifndef GL_EXT_texture_filter_minmax -#define GL_EXT_texture_filter_minmax 1 -#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 -#define GL_WEIGHTED_AVERAGE_EXT 0x9367 -#endif /* GL_EXT_texture_filter_minmax */ - -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_EXT_texture_format_BGRA8888 1 -#endif /* GL_EXT_texture_format_BGRA8888 */ - -#ifndef GL_EXT_texture_format_sRGB_override -#define GL_EXT_texture_format_sRGB_override 1 -#define GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT 0x8FBF -#endif /* GL_EXT_texture_format_sRGB_override */ - -#ifndef GL_EXT_texture_mirror_clamp_to_edge -#define GL_EXT_texture_mirror_clamp_to_edge 1 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#endif /* GL_EXT_texture_mirror_clamp_to_edge */ - -#ifndef GL_EXT_texture_norm16 -#define GL_EXT_texture_norm16 1 -#define GL_R16_EXT 0x822A -#define GL_RG16_EXT 0x822C -#define GL_RGBA16_EXT 0x805B -#define GL_RGB16_EXT 0x8054 -#define GL_RGB16_SNORM_EXT 0x8F9A -#endif /* GL_EXT_texture_norm16 */ - -#ifndef GL_EXT_texture_query_lod -#define GL_EXT_texture_query_lod 1 -#endif /* GL_EXT_texture_query_lod */ - -#ifndef GL_EXT_texture_rg -#define GL_EXT_texture_rg 1 -#define GL_RED_EXT 0x1903 -#define GL_RG_EXT 0x8227 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#endif /* GL_EXT_texture_rg */ - -#ifndef GL_EXT_texture_sRGB_R8 -#define GL_EXT_texture_sRGB_R8 1 -#define GL_SR8_EXT 0x8FBD -#endif /* GL_EXT_texture_sRGB_R8 */ - -#ifndef GL_EXT_texture_sRGB_RG8 -#define GL_EXT_texture_sRGB_RG8 1 -#define GL_SRG8_EXT 0x8FBE -#endif /* GL_EXT_texture_sRGB_RG8 */ - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A -#endif /* GL_EXT_texture_sRGB_decode */ - -#ifndef GL_EXT_texture_shadow_lod -#define GL_EXT_texture_shadow_lod 1 -#endif /* GL_EXT_texture_shadow_lod */ - -#ifndef GL_EXT_texture_storage -#define GL_EXT_texture_storage 1 -#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F -#define GL_ALPHA8_EXT 0x803C -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_RGBA32F_EXT 0x8814 -#define GL_RGB32F_EXT 0x8815 -#define GL_ALPHA32F_EXT 0x8816 -#define GL_LUMINANCE32F_EXT 0x8818 -#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 -#define GL_ALPHA16F_EXT 0x881C -#define GL_LUMINANCE16F_EXT 0x881E -#define GL_LUMINANCE_ALPHA16F_EXT 0x881F -#define GL_R32F_EXT 0x822E -#define GL_RG32F_EXT 0x8230 -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif -#endif /* GL_EXT_texture_storage */ - -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_EXT_texture_type_2_10_10_10_REV 1 -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#endif /* GL_EXT_texture_type_2_10_10_10_REV */ - -#ifndef GL_EXT_texture_view -#define GL_EXT_texture_view 1 -#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE -typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWEXTPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTextureViewEXT (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); -#endif -#endif /* GL_EXT_texture_view */ - -#ifndef GL_EXT_unpack_subimage -#define GL_EXT_unpack_subimage 1 -#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 -#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 -#endif /* GL_EXT_unpack_subimage */ - -#ifndef GL_EXT_win32_keyed_mutex -#define GL_EXT_win32_keyed_mutex 1 -typedef GLboolean (GL_APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); -typedef GLboolean (GL_APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLboolean GL_APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); -GL_APICALL GLboolean GL_APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); -#endif -#endif /* GL_EXT_win32_keyed_mutex */ - -#ifndef GL_EXT_window_rectangles -#define GL_EXT_window_rectangles 1 -#define GL_INCLUSIVE_EXT 0x8F10 -#define GL_EXCLUSIVE_EXT 0x8F11 -#define GL_WINDOW_RECTANGLE_EXT 0x8F12 -#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 -#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 -#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 -typedef void (GL_APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); -#endif -#endif /* GL_EXT_window_rectangles */ - -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_FJ_shader_binary_GCCSO 1 -#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 -#endif /* GL_FJ_shader_binary_GCCSO */ - -#ifndef GL_IMG_bindless_texture -#define GL_IMG_bindless_texture 1 -typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLEIMGPROC) (GLuint texture); -typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEIMGPROC) (GLuint texture, GLuint sampler); -typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64IMGPROC) (GLint location, GLuint64 value); -typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VIMGPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleIMG (GLuint texture); -GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleIMG (GLuint texture, GLuint sampler); -GL_APICALL void GL_APIENTRY glUniformHandleui64IMG (GLint location, GLuint64 value); -GL_APICALL void GL_APIENTRY glUniformHandleui64vIMG (GLint location, GLsizei count, const GLuint64 *value); -GL_APICALL void GL_APIENTRY glProgramUniformHandleui64IMG (GLuint program, GLint location, GLuint64 value); -GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vIMG (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -#endif -#endif /* GL_IMG_bindless_texture */ - -#ifndef GL_IMG_framebuffer_downsample -#define GL_IMG_framebuffer_downsample 1 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_AND_DOWNSAMPLE_IMG 0x913C -#define GL_NUM_DOWNSAMPLE_SCALES_IMG 0x913D -#define GL_DOWNSAMPLE_SCALES_IMG 0x913E -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SCALE_IMG 0x913F -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferTexture2DDownsampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); -GL_APICALL void GL_APIENTRY glFramebufferTextureLayerDownsampleIMG (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale); -#endif -#endif /* GL_IMG_framebuffer_downsample */ - -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_IMG_multisampled_render_to_texture 1 -#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 -#define GL_MAX_SAMPLES_IMG 0x9135 -#define GL_TEXTURE_SAMPLES_IMG 0x9136 -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif -#endif /* GL_IMG_multisampled_render_to_texture */ - -#ifndef GL_IMG_program_binary -#define GL_IMG_program_binary 1 -#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 -#endif /* GL_IMG_program_binary */ - -#ifndef GL_IMG_read_format -#define GL_IMG_read_format 1 -#define GL_BGRA_IMG 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 -#endif /* GL_IMG_read_format */ - -#ifndef GL_IMG_shader_binary -#define GL_IMG_shader_binary 1 -#define GL_SGX_BINARY_IMG 0x8C0A -#endif /* GL_IMG_shader_binary */ - -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_IMG_texture_compression_pvrtc 1 -#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 -#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 -#endif /* GL_IMG_texture_compression_pvrtc */ - -#ifndef GL_IMG_texture_compression_pvrtc2 -#define GL_IMG_texture_compression_pvrtc2 1 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 -#endif /* GL_IMG_texture_compression_pvrtc2 */ - -#ifndef GL_IMG_texture_filter_cubic -#define GL_IMG_texture_filter_cubic 1 -#define GL_CUBIC_IMG 0x9139 -#define GL_CUBIC_MIPMAP_NEAREST_IMG 0x913A -#define GL_CUBIC_MIPMAP_LINEAR_IMG 0x913B -#endif /* GL_IMG_texture_filter_cubic */ - -#ifndef GL_INTEL_blackhole_render -#define GL_INTEL_blackhole_render 1 -#define GL_BLACKHOLE_RENDER_INTEL 0x83FC -#endif /* GL_INTEL_blackhole_render */ - -#ifndef GL_INTEL_conservative_rasterization -#define GL_INTEL_conservative_rasterization 1 -#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE -#endif /* GL_INTEL_conservative_rasterization */ - -#ifndef GL_INTEL_framebuffer_CMAA -#define GL_INTEL_framebuffer_CMAA 1 -typedef void (GL_APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); -#endif -#endif /* GL_INTEL_framebuffer_CMAA */ - -#ifndef GL_INTEL_performance_query -#define GL_INTEL_performance_query 1 -#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 -#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 -#define GL_PERFQUERY_WAIT_INTEL 0x83FB -#define GL_PERFQUERY_FLUSH_INTEL 0x83FA -#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 -#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 -#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 -#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 -#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 -#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 -#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 -#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 -#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 -#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA -#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB -#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC -#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD -#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE -#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF -#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 -typedef void (GL_APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (GL_APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); -typedef void (GL_APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (GL_APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); -typedef void (GL_APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); -typedef void (GL_APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); -typedef void (GL_APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -typedef void (GL_APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); -typedef void (GL_APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); -typedef void (GL_APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); -GL_APICALL void GL_APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); -GL_APICALL void GL_APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); -GL_APICALL void GL_APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); -GL_APICALL void GL_APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); -GL_APICALL void GL_APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); -GL_APICALL void GL_APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); -GL_APICALL void GL_APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); -GL_APICALL void GL_APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); -GL_APICALL void GL_APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); -#endif -#endif /* GL_INTEL_performance_query */ - -#ifndef GL_MESA_framebuffer_flip_y -#define GL_MESA_framebuffer_flip_y 1 -#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); -#endif -#endif /* GL_MESA_framebuffer_flip_y */ - -#ifndef GL_MESA_program_binary_formats -#define GL_MESA_program_binary_formats 1 -#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F -#endif /* GL_MESA_program_binary_formats */ - -#ifndef GL_MESA_shader_integer_functions -#define GL_MESA_shader_integer_functions 1 -#endif /* GL_MESA_shader_integer_functions */ - -#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers -#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 -#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ - -#ifndef GL_NV_bindless_texture -#define GL_NV_bindless_texture 1 -typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); -typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); -typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef GLuint64 (GL_APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); -typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); -typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef GLboolean (GL_APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleNV (GLuint texture); -GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); -GL_APICALL void GL_APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); -GL_APICALL void GL_APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); -GL_APICALL GLuint64 GL_APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -GL_APICALL void GL_APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); -GL_APICALL void GL_APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); -GL_APICALL void GL_APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); -GL_APICALL void GL_APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); -GL_APICALL void GL_APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); -GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -GL_APICALL GLboolean GL_APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); -GL_APICALL GLboolean GL_APIENTRY glIsImageHandleResidentNV (GLuint64 handle); -#endif -#endif /* GL_NV_bindless_texture */ - -#ifndef GL_NV_blend_equation_advanced -#define GL_NV_blend_equation_advanced 1 -#define GL_BLEND_OVERLAP_NV 0x9281 -#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 -#define GL_BLUE_NV 0x1905 -#define GL_COLORBURN_NV 0x929A -#define GL_COLORDODGE_NV 0x9299 -#define GL_CONJOINT_NV 0x9284 -#define GL_CONTRAST_NV 0x92A1 -#define GL_DARKEN_NV 0x9297 -#define GL_DIFFERENCE_NV 0x929E -#define GL_DISJOINT_NV 0x9283 -#define GL_DST_ATOP_NV 0x928F -#define GL_DST_IN_NV 0x928B -#define GL_DST_NV 0x9287 -#define GL_DST_OUT_NV 0x928D -#define GL_DST_OVER_NV 0x9289 -#define GL_EXCLUSION_NV 0x92A0 -#define GL_GREEN_NV 0x1904 -#define GL_HARDLIGHT_NV 0x929B -#define GL_HARDMIX_NV 0x92A9 -#define GL_HSL_COLOR_NV 0x92AF -#define GL_HSL_HUE_NV 0x92AD -#define GL_HSL_LUMINOSITY_NV 0x92B0 -#define GL_HSL_SATURATION_NV 0x92AE -#define GL_INVERT_OVG_NV 0x92B4 -#define GL_INVERT_RGB_NV 0x92A3 -#define GL_LIGHTEN_NV 0x9298 -#define GL_LINEARBURN_NV 0x92A5 -#define GL_LINEARDODGE_NV 0x92A4 -#define GL_LINEARLIGHT_NV 0x92A7 -#define GL_MINUS_CLAMPED_NV 0x92B3 -#define GL_MINUS_NV 0x929F -#define GL_MULTIPLY_NV 0x9294 -#define GL_OVERLAY_NV 0x9296 -#define GL_PINLIGHT_NV 0x92A8 -#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 -#define GL_PLUS_CLAMPED_NV 0x92B1 -#define GL_PLUS_DARKER_NV 0x9292 -#define GL_PLUS_NV 0x9291 -#define GL_RED_NV 0x1903 -#define GL_SCREEN_NV 0x9295 -#define GL_SOFTLIGHT_NV 0x929C -#define GL_SRC_ATOP_NV 0x928E -#define GL_SRC_IN_NV 0x928A -#define GL_SRC_NV 0x9286 -#define GL_SRC_OUT_NV 0x928C -#define GL_SRC_OVER_NV 0x9288 -#define GL_UNCORRELATED_NV 0x9282 -#define GL_VIVIDLIGHT_NV 0x92A6 -#define GL_XOR_NV 0x1506 -typedef void (GL_APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); -typedef void (GL_APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlendParameteriNV (GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glBlendBarrierNV (void); -#endif -#endif /* GL_NV_blend_equation_advanced */ - -#ifndef GL_NV_blend_equation_advanced_coherent -#define GL_NV_blend_equation_advanced_coherent 1 -#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 -#endif /* GL_NV_blend_equation_advanced_coherent */ - -#ifndef GL_NV_blend_minmax_factor -#define GL_NV_blend_minmax_factor 1 -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D -#endif /* GL_NV_blend_minmax_factor */ - -#ifndef GL_NV_clip_space_w_scaling -#define GL_NV_clip_space_w_scaling 1 -#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C -#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D -#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E -typedef void (GL_APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); -#endif -#endif /* GL_NV_clip_space_w_scaling */ - -#ifndef GL_NV_compute_shader_derivatives -#define GL_NV_compute_shader_derivatives 1 -#endif /* GL_NV_compute_shader_derivatives */ - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 -typedef void (GL_APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (GL_APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); -GL_APICALL void GL_APIENTRY glEndConditionalRenderNV (void); -#endif -#endif /* GL_NV_conditional_render */ - -#ifndef GL_NV_conservative_raster -#define GL_NV_conservative_raster 1 -#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 -#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 -#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 -#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 -typedef void (GL_APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); -#endif -#endif /* GL_NV_conservative_raster */ - -#ifndef GL_NV_conservative_raster_pre_snap -#define GL_NV_conservative_raster_pre_snap 1 -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 -#endif /* GL_NV_conservative_raster_pre_snap */ - -#ifndef GL_NV_conservative_raster_pre_snap_triangles -#define GL_NV_conservative_raster_pre_snap_triangles 1 -#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D -#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E -#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F -typedef void (GL_APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); -#endif -#endif /* GL_NV_conservative_raster_pre_snap_triangles */ - -#ifndef GL_NV_copy_buffer -#define GL_NV_copy_buffer 1 -#define GL_COPY_READ_BUFFER_NV 0x8F36 -#define GL_COPY_WRITE_BUFFER_NV 0x8F37 -typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATANVPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyBufferSubDataNV (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif -#endif /* GL_NV_copy_buffer */ - -#ifndef GL_NV_coverage_sample -#define GL_NV_coverage_sample 1 -#define GL_COVERAGE_COMPONENT_NV 0x8ED0 -#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 -#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 -#define GL_COVERAGE_BUFFERS_NV 0x8ED3 -//#define GL_COVERAGE_SAMPLES_NV 0x8ED4 -#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 -#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 -#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 -#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 -typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); -typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); -GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); -#endif -#endif /* GL_NV_coverage_sample */ - -#ifndef GL_NV_depth_nonlinear -#define GL_NV_depth_nonlinear 1 -#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C -#endif /* GL_NV_depth_nonlinear */ - -#ifndef GL_NV_draw_buffers -#define GL_NV_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_NV 0x8824 -#define GL_DRAW_BUFFER0_NV 0x8825 -#define GL_DRAW_BUFFER1_NV 0x8826 -#define GL_DRAW_BUFFER2_NV 0x8827 -#define GL_DRAW_BUFFER3_NV 0x8828 -#define GL_DRAW_BUFFER4_NV 0x8829 -#define GL_DRAW_BUFFER5_NV 0x882A -#define GL_DRAW_BUFFER6_NV 0x882B -#define GL_DRAW_BUFFER7_NV 0x882C -#define GL_DRAW_BUFFER8_NV 0x882D -#define GL_DRAW_BUFFER9_NV 0x882E -#define GL_DRAW_BUFFER10_NV 0x882F -#define GL_DRAW_BUFFER11_NV 0x8830 -#define GL_DRAW_BUFFER12_NV 0x8831 -#define GL_DRAW_BUFFER13_NV 0x8832 -#define GL_DRAW_BUFFER14_NV 0x8833 -#define GL_DRAW_BUFFER15_NV 0x8834 -#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 -#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 -#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 -#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 -#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 -#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 -#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 -#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 -#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 -#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 -#define GL_COLOR_ATTACHMENT10_NV 0x8CEA -#define GL_COLOR_ATTACHMENT11_NV 0x8CEB -#define GL_COLOR_ATTACHMENT12_NV 0x8CEC -#define GL_COLOR_ATTACHMENT13_NV 0x8CED -#define GL_COLOR_ATTACHMENT14_NV 0x8CEE -#define GL_COLOR_ATTACHMENT15_NV 0x8CEF -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); -#endif -#endif /* GL_NV_draw_buffers */ - -#ifndef GL_NV_draw_instanced -#define GL_NV_draw_instanced 1 -typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -#endif -#endif /* GL_NV_draw_instanced */ - -#ifndef GL_NV_draw_vulkan_image -#define GL_NV_draw_vulkan_image 1 -typedef void (GL_APIENTRY *GLVULKANPROCNV)(void); -typedef void (GL_APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -typedef GLVULKANPROCNV (GL_APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); -typedef void (GL_APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); -typedef void (GL_APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); -typedef void (GL_APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); -GL_APICALL GLVULKANPROCNV GL_APIENTRY glGetVkProcAddrNV (const GLchar *name); -GL_APICALL void GL_APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); -GL_APICALL void GL_APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); -GL_APICALL void GL_APIENTRY glSignalVkFenceNV (GLuint64 vkFence); -#endif -#endif /* GL_NV_draw_vulkan_image */ - -#ifndef GL_NV_explicit_attrib_location -#define GL_NV_explicit_attrib_location 1 -#endif /* GL_NV_explicit_attrib_location */ - -#ifndef GL_NV_fbo_color_attachments -#define GL_NV_fbo_color_attachments 1 -#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF -#endif /* GL_NV_fbo_color_attachments */ - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); -GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); -GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); -GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif -#endif /* GL_NV_fence */ - -#ifndef GL_NV_fill_rectangle -#define GL_NV_fill_rectangle 1 -#define GL_FILL_RECTANGLE_NV 0x933C -#endif /* GL_NV_fill_rectangle */ - -#ifndef GL_NV_fragment_coverage_to_color -#define GL_NV_fragment_coverage_to_color 1 -#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD -#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE -typedef void (GL_APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFragmentCoverageColorNV (GLuint color); -#endif -#endif /* GL_NV_fragment_coverage_to_color */ - -#ifndef GL_NV_fragment_shader_barycentric -#define GL_NV_fragment_shader_barycentric 1 -#endif /* GL_NV_fragment_shader_barycentric */ - -#ifndef GL_NV_fragment_shader_interlock -#define GL_NV_fragment_shader_interlock 1 -#endif /* GL_NV_fragment_shader_interlock */ - -#ifndef GL_NV_framebuffer_blit -#define GL_NV_framebuffer_blit 1 -#define GL_READ_FRAMEBUFFER_NV 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA -typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -#endif /* GL_NV_framebuffer_blit */ - -#ifndef GL_NV_framebuffer_mixed_samples -#define GL_NV_framebuffer_mixed_samples 1 -#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#define GL_DEPTH_SAMPLES_NV 0x932D -#define GL_STENCIL_SAMPLES_NV 0x932E -#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F -#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 -#define GL_COVERAGE_MODULATION_NV 0x9332 -#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 -typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v); -typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); -GL_APICALL void GL_APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v); -GL_APICALL void GL_APIENTRY glCoverageModulationNV (GLenum components); -#endif -#endif /* GL_NV_framebuffer_mixed_samples */ - -#ifndef GL_NV_framebuffer_multisample -#define GL_NV_framebuffer_multisample 1 -#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 -#define GL_MAX_SAMPLES_NV 0x8D57 -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -#endif /* GL_NV_framebuffer_multisample */ - -#ifndef GL_NV_generate_mipmap_sRGB -#define GL_NV_generate_mipmap_sRGB 1 -#endif /* GL_NV_generate_mipmap_sRGB */ - -#ifndef GL_NV_geometry_shader_passthrough -#define GL_NV_geometry_shader_passthrough 1 -#endif /* GL_NV_geometry_shader_passthrough */ - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -typedef khronos_int64_t GLint64EXT; -typedef khronos_uint64_t GLuint64EXT; -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB -#define GL_PATCHES 0x000E -typedef void (GL_APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (GL_APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (GL_APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GL_APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GL_APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (GL_APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); -GL_APICALL void GL_APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); -GL_APICALL void GL_APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GL_APICALL void GL_APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GL_APICALL void GL_APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); -GL_APICALL void GL_APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); -GL_APICALL void GL_APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GL_APICALL void GL_APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GL_APICALL void GL_APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GL_APICALL void GL_APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GL_APICALL void GL_APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GL_APICALL void GL_APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GL_APICALL void GL_APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); -GL_APICALL void GL_APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); -GL_APICALL void GL_APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GL_APICALL void GL_APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GL_APICALL void GL_APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GL_APICALL void GL_APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GL_APICALL void GL_APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); -GL_APICALL void GL_APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GL_APICALL void GL_APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GL_APICALL void GL_APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GL_APICALL void GL_APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GL_APICALL void GL_APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GL_APICALL void GL_APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GL_APICALL void GL_APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif -#endif /* GL_NV_gpu_shader5 */ - -#ifndef GL_NV_image_formats -#define GL_NV_image_formats 1 -#endif /* GL_NV_image_formats */ - -#ifndef GL_NV_instanced_arrays -#define GL_NV_instanced_arrays 1 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE -typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); -#endif -#endif /* GL_NV_instanced_arrays */ - -#ifndef GL_NV_internalformat_sample_query -#define GL_NV_internalformat_sample_query 1 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_MULTISAMPLES_NV 0x9371 -#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 -#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 -#define GL_CONFORMANT_NV 0x9374 -typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params); -#endif -#endif /* GL_NV_internalformat_sample_query */ - -#ifndef GL_NV_memory_attachment -#define GL_NV_memory_attachment 1 -#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 -#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 -#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 -#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 -#define GL_MEMORY_ATTACHABLE_NV 0x95A8 -#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 -#define GL_DETACHED_TEXTURES_NV 0x95AA -#define GL_DETACHED_BUFFERS_NV 0x95AB -#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC -#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD -typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); -typedef void (GL_APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); -typedef void (GL_APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); -typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); -GL_APICALL void GL_APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); -GL_APICALL void GL_APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); -GL_APICALL void GL_APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); -#endif -#endif /* GL_NV_memory_attachment */ - -#ifndef GL_NV_mesh_shader -#define GL_NV_mesh_shader 1 -#define GL_MESH_SHADER_NV 0x9559 -#define GL_TASK_SHADER_NV 0x955A -#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 -#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 -#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 -#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 -#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 -#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 -#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 -#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 -#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 -#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 -#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A -#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B -#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C -#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D -#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E -#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F -#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 -#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 -#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 -#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 -#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 -#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 -#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A -#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D -#define GL_MAX_MESH_VIEWS_NV 0x9557 -#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF -#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 -#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B -#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C -#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E -#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F -#define GL_MESH_VERTICES_OUT_NV 0x9579 -#define GL_MESH_PRIMITIVES_OUT_NV 0x957A -#define GL_MESH_OUTPUT_TYPE_NV 0x957B -#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D -#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 -#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 -#define GL_MESH_SHADER_BIT_NV 0x00000040 -#define GL_TASK_SHADER_BIT_NV 0x00000080 -#define GL_MESH_SUBROUTINE_NV 0x957C -#define GL_TASK_SUBROUTINE_NV 0x957D -#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E -#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F -typedef void (GL_APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); -typedef void (GL_APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); -GL_APICALL void GL_APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); -GL_APICALL void GL_APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); -GL_APICALL void GL_APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -#endif -#endif /* GL_NV_mesh_shader */ - -#ifndef GL_NV_non_square_matrices -#define GL_NV_non_square_matrices 1 -#define GL_FLOAT_MAT2x3_NV 0x8B65 -#define GL_FLOAT_MAT2x4_NV 0x8B66 -#define GL_FLOAT_MAT3x2_NV 0x8B67 -#define GL_FLOAT_MAT3x4_NV 0x8B68 -#define GL_FLOAT_MAT4x2_NV 0x8B69 -#define GL_FLOAT_MAT4x3_NV 0x8B6A -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glUniformMatrix2x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniformMatrix3x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniformMatrix2x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniformMatrix4x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniformMatrix3x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif -#endif /* GL_NV_non_square_matrices */ - -#ifndef GL_NV_path_rendering -#define GL_NV_path_rendering 1 -typedef double GLdouble; -#define GL_PATH_FORMAT_SVG_NV 0x9070 -#define GL_PATH_FORMAT_PS_NV 0x9071 -#define GL_STANDARD_FONT_NAME_NV 0x9072 -#define GL_SYSTEM_FONT_NAME_NV 0x9073 -#define GL_FILE_NAME_NV 0x9074 -#define GL_PATH_STROKE_WIDTH_NV 0x9075 -#define GL_PATH_END_CAPS_NV 0x9076 -#define GL_PATH_INITIAL_END_CAP_NV 0x9077 -#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 -#define GL_PATH_JOIN_STYLE_NV 0x9079 -#define GL_PATH_MITER_LIMIT_NV 0x907A -#define GL_PATH_DASH_CAPS_NV 0x907B -#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C -#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D -#define GL_PATH_DASH_OFFSET_NV 0x907E -#define GL_PATH_CLIENT_LENGTH_NV 0x907F -#define GL_PATH_FILL_MODE_NV 0x9080 -#define GL_PATH_FILL_MASK_NV 0x9081 -#define GL_PATH_FILL_COVER_MODE_NV 0x9082 -#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 -#define GL_PATH_STROKE_MASK_NV 0x9084 -#define GL_COUNT_UP_NV 0x9088 -#define GL_COUNT_DOWN_NV 0x9089 -#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A -#define GL_CONVEX_HULL_NV 0x908B -#define GL_BOUNDING_BOX_NV 0x908D -#define GL_TRANSLATE_X_NV 0x908E -#define GL_TRANSLATE_Y_NV 0x908F -#define GL_TRANSLATE_2D_NV 0x9090 -#define GL_TRANSLATE_3D_NV 0x9091 -#define GL_AFFINE_2D_NV 0x9092 -#define GL_AFFINE_3D_NV 0x9094 -#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 -#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 -#define GL_UTF8_NV 0x909A -#define GL_UTF16_NV 0x909B -#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C -#define GL_PATH_COMMAND_COUNT_NV 0x909D -#define GL_PATH_COORD_COUNT_NV 0x909E -#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F -#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 -#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 -#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 -#define GL_SQUARE_NV 0x90A3 -#define GL_ROUND_NV 0x90A4 -#define GL_TRIANGULAR_NV 0x90A5 -#define GL_BEVEL_NV 0x90A6 -#define GL_MITER_REVERT_NV 0x90A7 -#define GL_MITER_TRUNCATE_NV 0x90A8 -#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 -#define GL_USE_MISSING_GLYPH_NV 0x90AA -#define GL_PATH_ERROR_POSITION_NV 0x90AB -#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD -#define GL_ADJACENT_PAIRS_NV 0x90AE -#define GL_FIRST_TO_REST_NV 0x90AF -#define GL_PATH_GEN_MODE_NV 0x90B0 -#define GL_PATH_GEN_COEFF_NV 0x90B1 -#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 -#define GL_PATH_STENCIL_FUNC_NV 0x90B7 -#define GL_PATH_STENCIL_REF_NV 0x90B8 -#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 -#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD -#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE -#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF -#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 -#define GL_MOVE_TO_RESETS_NV 0x90B5 -#define GL_MOVE_TO_CONTINUES_NV 0x90B6 -#define GL_CLOSE_PATH_NV 0x00 -#define GL_MOVE_TO_NV 0x02 -#define GL_RELATIVE_MOVE_TO_NV 0x03 -#define GL_LINE_TO_NV 0x04 -#define GL_RELATIVE_LINE_TO_NV 0x05 -#define GL_HORIZONTAL_LINE_TO_NV 0x06 -#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 -#define GL_VERTICAL_LINE_TO_NV 0x08 -#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 -#define GL_QUADRATIC_CURVE_TO_NV 0x0A -#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B -#define GL_CUBIC_CURVE_TO_NV 0x0C -#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D -#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E -#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F -#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 -#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 -#define GL_SMALL_CCW_ARC_TO_NV 0x12 -#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 -#define GL_SMALL_CW_ARC_TO_NV 0x14 -#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 -#define GL_LARGE_CCW_ARC_TO_NV 0x16 -#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 -#define GL_LARGE_CW_ARC_TO_NV 0x18 -#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 -#define GL_RESTART_PATH_NV 0xF0 -#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 -#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 -#define GL_RECT_NV 0xF6 -#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 -#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA -#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC -#define GL_ARC_TO_NV 0xFE -#define GL_RELATIVE_ARC_TO_NV 0xFF -#define GL_BOLD_BIT_NV 0x01 -#define GL_ITALIC_BIT_NV 0x02 -#define GL_GLYPH_WIDTH_BIT_NV 0x01 -#define GL_GLYPH_HEIGHT_BIT_NV 0x02 -#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 -#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 -#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 -#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 -#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 -#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 -#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 -#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 -#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 -#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 -#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 -#define GL_FONT_ASCENDER_BIT_NV 0x00200000 -#define GL_FONT_DESCENDER_BIT_NV 0x00400000 -#define GL_FONT_HEIGHT_BIT_NV 0x00800000 -#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 -#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 -#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 -#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 -#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 -#define GL_ROUNDED_RECT_NV 0xE8 -#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 -#define GL_ROUNDED_RECT2_NV 0xEA -#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB -#define GL_ROUNDED_RECT4_NV 0xEC -#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED -#define GL_ROUNDED_RECT8_NV 0xEE -#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF -#define GL_RELATIVE_RECT_NV 0xF7 -#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 -#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 -#define GL_FONT_UNAVAILABLE_NV 0x936A -#define GL_FONT_UNINTELLIGIBLE_NV 0x936B -#define GL_CONIC_CURVE_TO_NV 0x1A -#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B -#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 -#define GL_STANDARD_FONT_FORMAT_NV 0x936C -#define GL_PATH_PROJECTION_NV 0x1701 -#define GL_PATH_MODELVIEW_NV 0x1700 -#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 -#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 -#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 -#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 -#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 -#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 -#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 -#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 -#define GL_FRAGMENT_INPUT_NV 0x936D -typedef GLuint (GL_APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); -typedef void (GL_APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); -typedef GLboolean (GL_APIENTRYP PFNGLISPATHNVPROC) (GLuint path); -typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (GL_APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (GL_APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (GL_APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -typedef void (GL_APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); -typedef void (GL_APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (GL_APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (GL_APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -typedef void (GL_APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); -typedef void (GL_APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -typedef void (GL_APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -typedef void (GL_APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); -typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); -typedef void (GL_APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -typedef void (GL_APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (GL_APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); -typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); -typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); -typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (GL_APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); -typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); -typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); -typedef void (GL_APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); -typedef void (GL_APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); -typedef void (GL_APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); -typedef void (GL_APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -typedef void (GL_APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -typedef void (GL_APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); -typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); -typedef GLfloat (GL_APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); -typedef GLboolean (GL_APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); -typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); -typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); -typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef GLenum (GL_APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); -typedef void (GL_APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (GL_APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); -typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (GL_APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (GL_APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (GL_APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (GL_APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (GL_APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); -typedef void (GL_APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); -typedef void (GL_APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (GL_APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLuint GL_APIENTRY glGenPathsNV (GLsizei range); -GL_APICALL void GL_APIENTRY glDeletePathsNV (GLuint path, GLsizei range); -GL_APICALL GLboolean GL_APIENTRY glIsPathNV (GLuint path); -GL_APICALL void GL_APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GL_APICALL void GL_APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); -GL_APICALL void GL_APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); -GL_APICALL void GL_APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); -GL_APICALL void GL_APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); -GL_APICALL void GL_APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GL_APICALL void GL_APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GL_APICALL void GL_APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); -GL_APICALL void GL_APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); -GL_APICALL void GL_APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -GL_APICALL void GL_APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); -GL_APICALL void GL_APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); -GL_APICALL void GL_APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); -GL_APICALL void GL_APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); -GL_APICALL void GL_APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); -GL_APICALL void GL_APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); -GL_APICALL void GL_APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -GL_APICALL void GL_APIENTRY glPathCoverDepthFuncNV (GLenum func); -GL_APICALL void GL_APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); -GL_APICALL void GL_APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); -GL_APICALL void GL_APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GL_APICALL void GL_APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); -GL_APICALL void GL_APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); -GL_APICALL void GL_APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); -GL_APICALL void GL_APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); -GL_APICALL void GL_APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); -GL_APICALL void GL_APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -GL_APICALL void GL_APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); -GL_APICALL void GL_APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -GL_APICALL GLboolean GL_APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); -GL_APICALL GLboolean GL_APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); -GL_APICALL GLfloat GL_APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); -GL_APICALL GLboolean GL_APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -GL_APICALL void GL_APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); -GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); -GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]); -GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GL_APICALL GLenum GL_APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); -GL_APICALL void GL_APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params); -GL_APICALL void GL_APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GL_APICALL void GL_APIENTRY glMatrixLoadIdentityEXT (GLenum mode); -GL_APICALL void GL_APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); -GL_APICALL void GL_APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); -GL_APICALL void GL_APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); -GL_APICALL void GL_APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); -GL_APICALL void GL_APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); -GL_APICALL void GL_APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GL_APICALL void GL_APIENTRY glMatrixPopEXT (GLenum mode); -GL_APICALL void GL_APIENTRY glMatrixPushEXT (GLenum mode); -GL_APICALL void GL_APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GL_APICALL void GL_APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GL_APICALL void GL_APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -#endif -#endif /* GL_NV_path_rendering */ - -#ifndef GL_NV_path_rendering_shared_edge -#define GL_NV_path_rendering_shared_edge 1 -#define GL_SHARED_EDGE_NV 0xC0 -#endif /* GL_NV_path_rendering_shared_edge */ - -#ifndef GL_NV_pixel_buffer_object -#define GL_NV_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_NV 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_NV 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_NV 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_NV 0x88EF -#endif /* GL_NV_pixel_buffer_object */ - -#ifndef GL_NV_polygon_mode -#define GL_NV_polygon_mode 1 -#define GL_POLYGON_MODE_NV 0x0B40 -#define GL_POLYGON_OFFSET_POINT_NV 0x2A01 -#define GL_POLYGON_OFFSET_LINE_NV 0x2A02 -#define GL_POINT_NV 0x1B00 -#define GL_LINE_NV 0x1B01 -#define GL_FILL_NV 0x1B02 -typedef void (GL_APIENTRYP PFNGLPOLYGONMODENVPROC) (GLenum face, GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glPolygonModeNV (GLenum face, GLenum mode); -#endif -#endif /* GL_NV_polygon_mode */ - -#ifndef GL_NV_read_buffer -#define GL_NV_read_buffer 1 -#define GL_READ_BUFFER_NV 0x0C02 -typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); -#endif -#endif /* GL_NV_read_buffer */ - -#ifndef GL_NV_read_buffer_front -#define GL_NV_read_buffer_front 1 -#endif /* GL_NV_read_buffer_front */ - -#ifndef GL_NV_read_depth -#define GL_NV_read_depth 1 -#endif /* GL_NV_read_depth */ - -#ifndef GL_NV_read_depth_stencil -#define GL_NV_read_depth_stencil 1 -#endif /* GL_NV_read_depth_stencil */ - -#ifndef GL_NV_read_stencil -#define GL_NV_read_stencil 1 -#endif /* GL_NV_read_stencil */ - -#ifndef GL_NV_representative_fragment_test -#define GL_NV_representative_fragment_test 1 -#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F -#endif /* GL_NV_representative_fragment_test */ - -#ifndef GL_NV_sRGB_formats -#define GL_NV_sRGB_formats 1 -#define GL_SLUMINANCE_NV 0x8C46 -#define GL_SLUMINANCE_ALPHA_NV 0x8C44 -#define GL_SRGB8_NV 0x8C41 -#define GL_SLUMINANCE8_NV 0x8C47 -#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 -#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F -#define GL_ETC1_SRGB8_NV 0x88EE -#endif /* GL_NV_sRGB_formats */ - -#ifndef GL_NV_sample_locations -#define GL_NV_sample_locations 1 -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 -#define GL_SAMPLE_LOCATION_NV 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); -GL_APICALL void GL_APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); -GL_APICALL void GL_APIENTRY glResolveDepthValuesNV (void); -#endif -#endif /* GL_NV_sample_locations */ - -#ifndef GL_NV_sample_mask_override_coverage -#define GL_NV_sample_mask_override_coverage 1 -#endif /* GL_NV_sample_mask_override_coverage */ - -#ifndef GL_NV_scissor_exclusive -#define GL_NV_scissor_exclusive 1 -#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 -#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 -typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); -#endif -#endif /* GL_NV_scissor_exclusive */ - -#ifndef GL_NV_shader_atomic_fp16_vector -#define GL_NV_shader_atomic_fp16_vector 1 -#endif /* GL_NV_shader_atomic_fp16_vector */ - -#ifndef GL_NV_shader_noperspective_interpolation -#define GL_NV_shader_noperspective_interpolation 1 -#endif /* GL_NV_shader_noperspective_interpolation */ - -#ifndef GL_NV_shader_subgroup_partitioned -#define GL_NV_shader_subgroup_partitioned 1 -#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 -#endif /* GL_NV_shader_subgroup_partitioned */ - -#ifndef GL_NV_shader_texture_footprint -#define GL_NV_shader_texture_footprint 1 -#endif /* GL_NV_shader_texture_footprint */ - -#ifndef GL_NV_shading_rate_image -#define GL_NV_shading_rate_image 1 -#define GL_SHADING_RATE_IMAGE_NV 0x9563 -#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 -#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 -#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 -#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 -#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A -#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B -#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C -#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D -#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E -#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F -#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B -#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C -#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D -#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E -#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F -#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE -#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF -#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 -typedef void (GL_APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); -typedef void (GL_APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); -typedef void (GL_APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); -typedef void (GL_APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); -typedef void (GL_APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); -typedef void (GL_APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); -typedef void (GL_APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBindShadingRateImageNV (GLuint texture); -GL_APICALL void GL_APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); -GL_APICALL void GL_APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); -GL_APICALL void GL_APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); -GL_APICALL void GL_APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); -GL_APICALL void GL_APIENTRY glShadingRateSampleOrderNV (GLenum order); -GL_APICALL void GL_APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); -#endif -#endif /* GL_NV_shading_rate_image */ - -#ifndef GL_NV_shadow_samplers_array -#define GL_NV_shadow_samplers_array 1 -#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 -#endif /* GL_NV_shadow_samplers_array */ - -#ifndef GL_NV_shadow_samplers_cube -#define GL_NV_shadow_samplers_cube 1 -#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 -#endif /* GL_NV_shadow_samplers_cube */ - -#ifndef GL_NV_stereo_view_rendering -#define GL_NV_stereo_view_rendering 1 -#endif /* GL_NV_stereo_view_rendering */ - -#ifndef GL_NV_texture_border_clamp -#define GL_NV_texture_border_clamp 1 -#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 -#define GL_CLAMP_TO_BORDER_NV 0x812D -#endif /* GL_NV_texture_border_clamp */ - -#ifndef GL_NV_texture_compression_s3tc_update -#define GL_NV_texture_compression_s3tc_update 1 -#endif /* GL_NV_texture_compression_s3tc_update */ - -#ifndef GL_NV_texture_npot_2D_mipmap -#define GL_NV_texture_npot_2D_mipmap 1 -#endif /* GL_NV_texture_npot_2D_mipmap */ - -#ifndef GL_NV_viewport_array -#define GL_NV_viewport_array 1 -#define GL_MAX_VIEWPORTS_NV 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F -typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVNVPROC) (GLuint index, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDNVPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVNVPROC) (GLuint index, const GLint *v); -typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFNVPROC) (GLuint index, GLfloat n, GLfloat f); -typedef void (GL_APIENTRYP PFNGLGETFLOATI_VNVPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (GL_APIENTRYP PFNGLENABLEINVPROC) (GLenum target, GLuint index); -typedef void (GL_APIENTRYP PFNGLDISABLEINVPROC) (GLenum target, GLuint index); -typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDINVPROC) (GLenum target, GLuint index); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glViewportArrayvNV (GLuint first, GLsizei count, const GLfloat *v); -GL_APICALL void GL_APIENTRY glViewportIndexedfNV (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GL_APICALL void GL_APIENTRY glViewportIndexedfvNV (GLuint index, const GLfloat *v); -GL_APICALL void GL_APIENTRY glScissorArrayvNV (GLuint first, GLsizei count, const GLint *v); -GL_APICALL void GL_APIENTRY glScissorIndexedNV (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glScissorIndexedvNV (GLuint index, const GLint *v); -GL_APICALL void GL_APIENTRY glDepthRangeArrayfvNV (GLuint first, GLsizei count, const GLfloat *v); -GL_APICALL void GL_APIENTRY glDepthRangeIndexedfNV (GLuint index, GLfloat n, GLfloat f); -GL_APICALL void GL_APIENTRY glGetFloati_vNV (GLenum target, GLuint index, GLfloat *data); -GL_APICALL void GL_APIENTRY glEnableiNV (GLenum target, GLuint index); -GL_APICALL void GL_APIENTRY glDisableiNV (GLenum target, GLuint index); -GL_APICALL GLboolean GL_APIENTRY glIsEnablediNV (GLenum target, GLuint index); -#endif -#endif /* GL_NV_viewport_array */ - -#ifndef GL_NV_viewport_array2 -#define GL_NV_viewport_array2 1 -#endif /* GL_NV_viewport_array2 */ - -#ifndef GL_NV_viewport_swizzle -#define GL_NV_viewport_swizzle 1 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 -#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 -#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 -#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 -#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 -#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A -#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B -typedef void (GL_APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); -#endif -#endif /* GL_NV_viewport_swizzle */ - -#ifndef GL_OVR_multiview -#define GL_OVR_multiview 1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 -#define GL_MAX_VIEWS_OVR 0x9631 -#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); -#endif -#endif /* GL_OVR_multiview */ - -#ifndef GL_OVR_multiview2 -#define GL_OVR_multiview2 1 -#endif /* GL_OVR_multiview2 */ - -#ifndef GL_OVR_multiview_multisampled_render_to_texture -#define GL_OVR_multiview_multisampled_render_to_texture 1 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferTextureMultisampleMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); -#endif -#endif /* GL_OVR_multiview_multisampled_render_to_texture */ - -#ifndef GL_QCOM_YUV_texture_gather -#define GL_QCOM_YUV_texture_gather 1 -#endif /* GL_QCOM_YUV_texture_gather */ - -#ifndef GL_QCOM_alpha_test -#define GL_QCOM_alpha_test 1 -#define GL_ALPHA_TEST_QCOM 0x0BC0 -#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 -#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 -typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); -#endif -#endif /* GL_QCOM_alpha_test */ - -#ifndef GL_QCOM_binning_control -#define GL_QCOM_binning_control 1 -#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 -#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 -#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 -#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 -#endif /* GL_QCOM_binning_control */ - -#ifndef GL_QCOM_driver_control -#define GL_QCOM_driver_control 1 -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); -GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); -GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); -#endif -#endif /* GL_QCOM_driver_control */ - -#ifndef GL_QCOM_extended_get -#define GL_QCOM_extended_get 1 -#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 -#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 -#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 -#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 -#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 -#define GL_TEXTURE_TYPE_QCOM 0x8BD7 -#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 -#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 -#define GL_TEXTURE_TARGET_QCOM 0x8BDA -#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB -#define GL_STATE_RESTORE 0x8BDC -typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, void **params); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); -GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); -GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, void **params); -#endif -#endif /* GL_QCOM_extended_get */ - -#ifndef GL_QCOM_extended_get2 -#define GL_QCOM_extended_get2 1 -typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); -GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); -GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif -#endif /* GL_QCOM_extended_get2 */ - -#ifndef GL_QCOM_framebuffer_foveated -#define GL_QCOM_framebuffer_foveated 1 -#define GL_FOVEATION_ENABLE_BIT_QCOM 0x00000001 -#define GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM 0x00000002 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC) (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC) (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferFoveationConfigQCOM (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures); -GL_APICALL void GL_APIENTRY glFramebufferFoveationParametersQCOM (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); -#endif -#endif /* GL_QCOM_framebuffer_foveated */ - -#ifndef GL_QCOM_perfmon_global_mode -#define GL_QCOM_perfmon_global_mode 1 -#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 -#endif /* GL_QCOM_perfmon_global_mode */ - -#ifndef GL_QCOM_shader_framebuffer_fetch_noncoherent -#define GL_QCOM_shader_framebuffer_fetch_noncoherent 1 -#define GL_FRAMEBUFFER_FETCH_NONCOHERENT_QCOM 0x96A2 -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC) (void); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierQCOM (void); -#endif -#endif /* GL_QCOM_shader_framebuffer_fetch_noncoherent */ - -#ifndef GL_QCOM_shader_framebuffer_fetch_rate -#define GL_QCOM_shader_framebuffer_fetch_rate 1 -#endif /* GL_QCOM_shader_framebuffer_fetch_rate */ - -#ifndef GL_QCOM_texture_foveated -#define GL_QCOM_texture_foveated 1 -#define GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM 0x8BFB -#define GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM 0x8BFC -#define GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM 0x8BFD -#define GL_TEXTURE_FOVEATED_NUM_FOCAL_POINTS_QUERY_QCOM 0x8BFE -#define GL_FRAMEBUFFER_INCOMPLETE_FOVEATION_QCOM 0x8BFF -typedef void (GL_APIENTRYP PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC) (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTextureFoveationParametersQCOM (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); -#endif -#endif /* GL_QCOM_texture_foveated */ - -#ifndef GL_QCOM_texture_foveated_subsampled_layout -#define GL_QCOM_texture_foveated_subsampled_layout 1 -#define GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM 0x00000004 -#define GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM 0x8FA1 -#endif /* GL_QCOM_texture_foveated_subsampled_layout */ - -#ifndef GL_QCOM_tiled_rendering -#define GL_QCOM_tiled_rendering 1 -#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 -#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 -#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 -#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 -#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 -#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 -#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 -#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 -#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 -#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 -#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 -#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 -#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 -#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 -#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 -#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 -#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 -#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 -#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 -#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 -#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 -#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 -#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 -#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 -#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 -#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 -#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 -#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 -#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 -#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 -#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 -#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 -typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); -#endif -#endif /* GL_QCOM_tiled_rendering */ - -#ifndef GL_QCOM_writeonly_rendering -#define GL_QCOM_writeonly_rendering 1 -#define GL_WRITEONLY_RENDERING_QCOM 0x8823 -#endif /* GL_QCOM_writeonly_rendering */ - -#ifndef GL_VIV_shader_binary -#define GL_VIV_shader_binary 1 -#define GL_SHADER_BINARY_VIV 0x8FC4 -#endif /* GL_VIV_shader_binary */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2platform.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2platform.h deleted file mode 100644 index eb318dc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/GLES2/gl2platform.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __gl2platform_h_ -#define __gl2platform_h_ - -/* -** Copyright (c) 2017 The Khronos Group Inc. -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * Please contribute modifications back to Khronos as pull requests on the - * public github repository: - * https://github.com/KhronosGroup/OpenGL-Registry - */ - -#include - -#ifndef GL_APICALL -#define GL_APICALL KHRONOS_APICALL -#endif - -#ifndef GL_APIENTRY -#define GL_APIENTRY KHRONOS_APIENTRY -#endif - -#endif /* __gl2platform_h_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/android/defines.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/android/defines.h deleted file mode 100644 index df9092c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/android/defines.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by serpentspirale on 30/09/23. -// - -#ifndef GL4ES_EXTRA_DEFINES_H -#define GL4ES_EXTRA_DEFINES_H - -#if !defined(__BIONIC__) && !defined(__INTRODUCED_IN) -#define __INTRODUCED_IN(x) -#endif - - -#endif //GL4ES_EXTRA_DEFINES_H diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/android/log.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/android/log.h deleted file mode 100644 index a52827f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/android/log.h +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -/** - * @addtogroup Logging - * @{ - */ - -/** - * \file - * - * Support routines to send messages to the Android log buffer, - * which can later be accessed through the `logcat` utility. - * - * Each log message must have - * - a priority - * - a log tag - * - some text - * - * The tag normally corresponds to the component that emits the log message, - * and should be reasonably small. - * - * Log message text may be truncated to less than an implementation-specific - * limit (1023 bytes). - * - * Note that a newline character ("\n") will be appended automatically to your - * log message, if not already there. It is not possible to send several - * messages and have them appear on a single line in logcat. - * - * Please use logging in moderation: - * - * - Sending log messages eats CPU and slow down your application and the - * system. - * - * - The circular log buffer is pretty small, so sending many messages - * will hide other important log messages. - * - * - In release builds, only send log messages to account for exceptional - * conditions. - */ - -#include -#include -#include -#include - -#if !defined(__BIONIC__) && !defined(__INTRODUCED_IN) -#define __INTRODUCED_IN(x) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Android log priority values, in increasing order of priority. - */ -typedef enum android_LogPriority { - /** For internal use only. */ - ANDROID_LOG_UNKNOWN = 0, - /** The default priority, for internal use only. */ - ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */ - /** Verbose logging. Should typically be disabled for a release apk. */ - ANDROID_LOG_VERBOSE, - /** Debug logging. Should typically be disabled for a release apk. */ - ANDROID_LOG_DEBUG, - /** Informational logging. Should typically be disabled for a release apk. */ - ANDROID_LOG_INFO, - /** Warning logging. For use with recoverable failures. */ - ANDROID_LOG_WARN, - /** Error logging. For use with unrecoverable failures. */ - ANDROID_LOG_ERROR, - /** Fatal logging. For use when aborting. */ - ANDROID_LOG_FATAL, - /** For internal use only. */ - ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */ -} android_LogPriority; - -/** - * Writes the constant string `text` to the log, with priority `prio` and tag - * `tag`. - */ -int __android_log_write(int prio, const char* tag, const char* text); - -/** - * Writes a formatted string to the log, with priority `prio` and tag `tag`. - * The details of formatting are the same as for - * [printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html). - */ -int __android_log_print(int prio, const char* tag, const char* fmt, ...) -__attribute__((__format__(printf, 3, 4))); - -/** - * Equivalent to `__android_log_print`, but taking a `va_list`. - * (If `__android_log_print` is like `printf`, this is like `vprintf`.) - */ -int __android_log_vprint(int prio, const char* tag, const char* fmt, va_list ap) -__attribute__((__format__(printf, 3, 0))); - -/** - * Writes an assertion failure to the log (as `ANDROID_LOG_FATAL`) and to - * stderr, before calling - * [abort(3)](http://man7.org/linux/man-pages/man3/abort.3.html). - * - * If `fmt` is non-null, `cond` is unused. If `fmt` is null, the string - * `Assertion failed: %s` is used with `cond` as the string argument. - * If both `fmt` and `cond` are null, a default string is provided. - * - * Most callers should use - * [assert(3)](http://man7.org/linux/man-pages/man3/assert.3.html) from - * `<assert.h>` instead, or the `__assert` and `__assert2` functions - * provided by bionic if more control is needed. They support automatically - * including the source filename and line number more conveniently than this - * function. - */ -void __android_log_assert(const char* cond, const char* tag, const char* fmt, ...) -__attribute__((__noreturn__)) __attribute__((__format__(printf, 3, 4))); - -/** - * Identifies a specific log buffer for __android_log_buf_write() - * and __android_log_buf_print(). - */ -typedef enum log_id { - LOG_ID_MIN = 0, - - /** The main log buffer. This is the only log buffer available to apps. */ - LOG_ID_MAIN = 0, - /** The radio log buffer. */ - LOG_ID_RADIO = 1, - /** The event log buffer. */ - LOG_ID_EVENTS = 2, - /** The system log buffer. */ - LOG_ID_SYSTEM = 3, - /** The crash log buffer. */ - LOG_ID_CRASH = 4, - /** The statistics log buffer. */ - LOG_ID_STATS = 5, - /** The security log buffer. */ - LOG_ID_SECURITY = 6, - /** The kernel log buffer. */ - LOG_ID_KERNEL = 7, - - LOG_ID_MAX, - - /** Let the logging function choose the best log target. */ - LOG_ID_DEFAULT = 0x7FFFFFFF -} log_id_t; - -/** - * Writes the constant string `text` to the log buffer `id`, - * with priority `prio` and tag `tag`. - * - * Apps should use __android_log_write() instead. - */ -int __android_log_buf_write(int bufID, int prio, const char* tag, const char* text); - -/** - * Writes a formatted string to log buffer `id`, - * with priority `prio` and tag `tag`. - * The details of formatting are the same as for - * [printf(3)](http://man7.org/linux/man-pages/man3/printf.3.html). - * - * Apps should use __android_log_print() instead. - */ -int __android_log_buf_print(int bufID, int prio, const char* tag, const char* fmt, ...) -__attribute__((__format__(printf, 4, 5))); - -/** - * Logger data struct used for writing log messages to liblog via __android_log_write_logger_data() - * and sending log messages to user defined loggers specified in __android_log_set_logger(). - */ -struct __android_log_message { - /** Must be set to sizeof(__android_log_message) and is used for versioning. */ - size_t struct_size; - - /** {@link log_id_t} values. */ - int32_t buffer_id; - - /** {@link android_LogPriority} values. */ - int32_t priority; - - /** The tag for the log message. */ - const char* tag; - - /** Optional file name, may be set to nullptr. */ - const char* file; - - /** Optional line number, ignore if file is nullptr. */ - uint32_t line; - - /** The log message itself. */ - const char* message; -}; - -/** - * Prototype for the 'logger' function that is called for every log message. - */ -typedef void (*__android_logger_function)(const struct __android_log_message* log_message); -/** - * Prototype for the 'abort' function that is called when liblog will abort due to - * __android_log_assert() failures. - */ -typedef void (*__android_aborter_function)(const char* abort_message); - -/** - * Writes the log message specified by log_message. log_message includes additional file name and - * line number information that a logger may use. log_message is versioned for backwards - * compatibility. - * This assumes that loggability has already been checked through __android_log_is_loggable(). - * Higher level logging libraries, such as libbase, first check loggability, then format their - * buffers, then pass the message to liblog via this function, and therefore we do not want to - * duplicate the loggability check here. - * - * @param log_message the log message itself, see __android_log_message. - * - * Available since API level 30. - */ -void __android_log_write_log_message(struct __android_log_message* log_message) __INTRODUCED_IN(30); - -/** - * Sets a user defined logger function. All log messages sent to liblog will be set to the - * function pointer specified by logger for processing. It is not expected that log messages are - * already terminated with a new line. This function should add new lines if required for line - * separation. - * - * @param logger the new function that will handle log messages. - * - * Available since API level 30. - */ -void __android_log_set_logger(__android_logger_function logger) __INTRODUCED_IN(30); - -/** - * Writes the log message to logd. This is an __android_logger_function and can be provided to - * __android_log_set_logger(). It is the default logger when running liblog on a device. - * - * @param log_message the log message to write, see __android_log_message. - * - * Available since API level 30. - */ -void __android_log_logd_logger(const struct __android_log_message* log_message) __INTRODUCED_IN(30); - -/** - * Writes the log message to stderr. This is an __android_logger_function and can be provided to - * __android_log_set_logger(). It is the default logger when running liblog on host. - * - * @param log_message the log message to write, see __android_log_message. - * - * Available since API level 30. - */ -void __android_log_stderr_logger(const struct __android_log_message* log_message) -__INTRODUCED_IN(30); - -/** - * Sets a user defined aborter function that is called for __android_log_assert() failures. This - * user defined aborter function is highly recommended to abort and be noreturn, but is not strictly - * required to. - * - * @param aborter the new aborter function, see __android_aborter_function. - * - * Available since API level 30. - */ -void __android_log_set_aborter(__android_aborter_function aborter) __INTRODUCED_IN(30); - -/** - * Calls the stored aborter function. This allows for other logging libraries to use the same - * aborter function by calling this function in liblog. - * - * @param abort_message an additional message supplied when aborting, for example this is used to - * call android_set_abort_message() in __android_log_default_aborter(). - * - * Available since API level 30. - */ -void __android_log_call_aborter(const char* abort_message) __INTRODUCED_IN(30); - -/** - * Sets android_set_abort_message() on device then aborts(). This is the default aborter. - * - * @param abort_message an additional message supplied when aborting. This functions calls - * android_set_abort_message() with its contents. - * - * Available since API level 30. - */ -void __android_log_default_aborter(const char* abort_message) __attribute__((noreturn)) -__INTRODUCED_IN(30); - -/** - * Use the per-tag properties "log.tag." along with the minimum priority from - * __android_log_set_minimum_priority() to determine if a log message with a given prio and tag will - * be printed. A non-zero result indicates yes, zero indicates false. - * - * If both a priority for a tag and a minimum priority are set by - * __android_log_set_minimum_priority(), then the lowest of the two values are to determine the - * minimum priority needed to log. If only one is set, then that value is used to determine the - * minimum priority needed. If none are set, then default_priority is used. - * - * @param prio the priority to test, takes android_LogPriority values. - * @param tag the tag to test. - * @param default_prio the default priority to use if no properties or minimum priority are set. - * @return an integer where 1 indicates that the message is loggable and 0 indicates that it is not. - * - * Available since API level 30. - */ -int __android_log_is_loggable(int prio, const char* tag, int default_prio) __INTRODUCED_IN(30); - -/** - * Use the per-tag properties "log.tag." along with the minimum priority from - * __android_log_set_minimum_priority() to determine if a log message with a given prio and tag will - * be printed. A non-zero result indicates yes, zero indicates false. - * - * If both a priority for a tag and a minimum priority are set by - * __android_log_set_minimum_priority(), then the lowest of the two values are to determine the - * minimum priority needed to log. If only one is set, then that value is used to determine the - * minimum priority needed. If none are set, then default_priority is used. - * - * @param prio the priority to test, takes android_LogPriority values. - * @param tag the tag to test. - * @param len the length of the tag. - * @param default_prio the default priority to use if no properties or minimum priority are set. - * @return an integer where 1 indicates that the message is loggable and 0 indicates that it is not. - * - * Available since API level 30. - */ -int __android_log_is_loggable_len(int prio, const char* tag, size_t len, int default_prio) -__INTRODUCED_IN(30); - -/** - * Sets the minimum priority that will be logged for this process. - * - * @param priority the new minimum priority to set, takes android_LogPriority values. - * @return the previous set minimum priority as android_LogPriority values, or - * ANDROID_LOG_DEFAULT if none was set. - * - * Available since API level 30. - */ -int32_t __android_log_set_minimum_priority(int32_t priority) __INTRODUCED_IN(30); - -/** - * Gets the minimum priority that will be logged for this process. If none has been set by a - * previous __android_log_set_minimum_priority() call, this returns ANDROID_LOG_DEFAULT. - * - * @return the current minimum priority as android_LogPriority values, or - * ANDROID_LOG_DEFAULT if none is set. - * - * Available since API level 30. - */ -int32_t __android_log_get_minimum_priority(void) __INTRODUCED_IN(30); - -/** - * Sets the default tag if no tag is provided when writing a log message. Defaults to - * getprogname(). This truncates tag to the maximum log message size, though appropriate tags - * should be much smaller. - * - * @param tag the new log tag. - * - * Available since API level 30. - */ -void __android_log_set_default_tag(const char* tag) __INTRODUCED_IN(30); - -#ifdef __cplusplus -} -#endif - -/** @} */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/android/sync.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/android/sync.h deleted file mode 100644 index 6964c2a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/android/sync.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * sync.h - * - * Copyright 2012 Google, Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __SYS_CORE_SYNC_H -#define __SYS_CORE_SYNC_H - -/* This file contains the legacy sync interface used by Android platform and - * device code. The direct contents will be removed over time as code - * transitions to using the updated interface in ndk/sync.h. When this file is - * empty other than the ndk/sync.h include, that file will be renamed to - * replace this one. - * - * New code should continue to include this file (#include ) - * instead of ndk/sync.h so the eventual rename is seamless, but should only - * use the things declared in ndk/sync.h. - * - * This file used to be called sync/sync.h, but we renamed to that both the - * platform and NDK call it android/sync.h. A symlink from the old name to this - * one exists temporarily to avoid having to change all sync clients - * simultaneously. It will be removed when they've been updated, and probably - * after this change has been delivered to AOSP so that integrations don't - * break builds. - */ - -#include -#include "../ndk/sync.h" - -__BEGIN_DECLS - -/* timeout in msecs */ -int sync_wait(int fd, int timeout); - -__END_DECLS - -#endif /* __SYS_CORE_SYNC_H */ \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/threads.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/threads.h deleted file mode 100644 index 4dd6c01..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/threads.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * C11 emulation library - * - * (C) Copyright yohhoy 2012. - * Distributed under the Boost Software License, Version 1.0. - * - * Permission is hereby granted, free of charge, to any person or organization - * obtaining a copy of the software and accompanying documentation covered by - * this license (the "Software") to use, reproduce, display, distribute, - * execute, and transmit the Software, and to prepare [[derivative work]]s of the - * Software, and to permit third-parties to whom the Software is furnished to - * do so, all subject to the following: - * - * The copyright notices in the Software and this entire statement, including - * the above license grant, this restriction and the following disclaimer, - * must be included in all copies of the Software, in whole or in part, and - * all derivative works of the Software, unless such copies or derivative - * works are solely in the form of machine-executable object code generated by - * a source language processor. - * - * 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT - * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE - * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#ifndef EMULATED_THREADS_H_INCLUDED_ -#define EMULATED_THREADS_H_INCLUDED_ - -#include - -#ifndef TIME_UTC -#define TIME_UTC 1 -#endif - -#include "../c99_compat.h" // for `inline` - -typedef void (*tss_dtor_t)(void*); -typedef int (*thrd_start_t)(void*); - - -enum { - mtx_plain = 0, - mtx_try = 1, - mtx_timed = 2, - mtx_recursive = 4 -}; - -enum { - thrd_success = 0, // succeeded - thrd_timeout, // timeout - thrd_error, // failed - thrd_busy, // resource busy - thrd_nomem // out of memory -}; - -#if defined(_WIN32) && !defined(__CYGWIN__) -#include "threads_win32.h" -#elif defined(HAVE_PTHREAD) - -#else -#include "threads_posix.h" -//#error Not supported on this platform. -#endif - -#endif /* EMULATED_THREADS_H_INCLUDED_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/threads_posix.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/threads_posix.h deleted file mode 100644 index 45cb607..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/threads_posix.h +++ /dev/null @@ -1,396 +0,0 @@ -/* - * C11 emulation library - * - * (C) Copyright yohhoy 2012. - * Distributed under the Boost Software License, Version 1.0. - * - * Permission is hereby granted, free of charge, to any person or organization - * obtaining a copy of the software and accompanying documentation covered by - * this license (the "Software") to use, reproduce, display, distribute, - * execute, and transmit the Software, and to prepare [[derivative work]]s of the - * Software, and to permit third-parties to whom the Software is furnished to - * do so, all subject to the following: - * - * The copyright notices in the Software and this entire statement, including - * the above license grant, this restriction and the following disclaimer, - * must be included in all copies of the Software, in whole or in part, and - * all derivative works of the Software, unless such copies or derivative - * works are solely in the form of machine-executable object code generated by - * a source language processor. - * - * 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT - * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE - * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#include -#ifndef assert -#include -#endif -#include -#include -#include -#include -#include /* for intptr_t */ - -/* -Configuration macro: - - EMULATED_THREADS_USE_NATIVE_TIMEDLOCK - Use pthread_mutex_timedlock() for `mtx_timedlock()' - Otherwise use mtx_trylock() + *busy loop* emulation. -*/ -#if !defined(__CYGWIN__) && !defined(__APPLE__) && !defined(__NetBSD__) -#define EMULATED_THREADS_USE_NATIVE_TIMEDLOCK -#endif - - -#include - -/*---------------------------- macros ----------------------------*/ -#define ONCE_FLAG_INIT PTHREAD_ONCE_INIT -#ifdef INIT_ONCE_STATIC_INIT -#define TSS_DTOR_ITERATIONS PTHREAD_DESTRUCTOR_ITERATIONS -#else -#define TSS_DTOR_ITERATIONS 1 // assume TSS dtor MAY be called at least once. -#endif - -// FIXME: temporary non-standard hack to ease transition -#define _MTX_INITIALIZER_NP PTHREAD_MUTEX_INITIALIZER - -/*---------------------------- types ----------------------------*/ -typedef pthread_cond_t cnd_t; -typedef pthread_t thrd_t; -typedef pthread_key_t tss_t; -typedef pthread_mutex_t mtx_t; -typedef pthread_once_t once_flag; - - -/* -Implementation limits: - - Conditionally emulation for "mutex with timeout" - (see EMULATED_THREADS_USE_NATIVE_TIMEDLOCK macro) -*/ -struct impl_thrd_param { - thrd_start_t func; - void *arg; -}; - -static inline void * -impl_thrd_routine(void *p) -{ - struct impl_thrd_param pack = *((struct impl_thrd_param *)p); - free(p); - return (void*)(intptr_t)pack.func(pack.arg); -} - - -/*--------------- 7.25.2 Initialization functions ---------------*/ -// 7.25.2.1 -static inline void -call_once(once_flag *flag, void (*func)(void)) -{ - pthread_once(flag, func); -} - - -/*------------- 7.25.3 Condition variable functions -------------*/ -// 7.25.3.1 -static inline int -cnd_broadcast(cnd_t *cond) -{ - assert(cond != NULL); - return (pthread_cond_broadcast(cond) == 0) ? thrd_success : thrd_error; -} - -// 7.25.3.2 -static inline void -cnd_destroy(cnd_t *cond) -{ - assert(cond); - pthread_cond_destroy(cond); -} - -// 7.25.3.3 -static inline int -cnd_init(cnd_t *cond) -{ - assert(cond != NULL); - return (pthread_cond_init(cond, NULL) == 0) ? thrd_success : thrd_error; -} - -// 7.25.3.4 -static inline int -cnd_signal(cnd_t *cond) -{ - assert(cond != NULL); - return (pthread_cond_signal(cond) == 0) ? thrd_success : thrd_error; -} - -// 7.25.3.5 -static inline int -cnd_timedwait(cnd_t *cond, mtx_t *mtx, const struct timespec *abs_time) -{ - int rt; - - assert(mtx != NULL); - assert(cond != NULL); - assert(abs_time != NULL); - - rt = pthread_cond_timedwait(cond, mtx, abs_time); - if (rt == ETIMEDOUT) - return thrd_busy; - return (rt == 0) ? thrd_success : thrd_error; -} - -// 7.25.3.6 -static inline int -cnd_wait(cnd_t *cond, mtx_t *mtx) -{ - assert(mtx != NULL); - assert(cond != NULL); - return (pthread_cond_wait(cond, mtx) == 0) ? thrd_success : thrd_error; -} - - -/*-------------------- 7.25.4 Mutex functions --------------------*/ -// 7.25.4.1 -static inline void -mtx_destroy(mtx_t *mtx) -{ - assert(mtx != NULL); - pthread_mutex_destroy(mtx); -} - -/* - * XXX: Workaround when building with -O0 and without pthreads link. - * - * In such cases constant folding and dead code elimination won't be - * available, thus the compiler will always add the pthread_mutexattr* - * functions into the binary. As we try to link, we'll fail as the - * symbols are unresolved. - * - * Ideally we'll enable the optimisations locally, yet that does not - * seem to work. - * - * So the alternative workaround is to annotate the symbols as weak. - * Thus the linker will be happy and things don't clash when building - * with -O1 or greater. - */ -#if defined(HAVE_FUNC_ATTRIBUTE_WEAK) && !defined(__CYGWIN__) -__attribute__((weak)) -int pthread_mutexattr_init(pthread_mutexattr_t *attr); - -__attribute__((weak)) -int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type); - -__attribute__((weak)) -int pthread_mutexattr_destroy(pthread_mutexattr_t *attr); -#endif - -// 7.25.4.2 -static inline int -mtx_init(mtx_t *mtx, int type) -{ - pthread_mutexattr_t attr; - assert(mtx != NULL); - if (type != mtx_plain && type != mtx_timed && type != mtx_try - && type != (mtx_plain|mtx_recursive) - && type != (mtx_timed|mtx_recursive) - && type != (mtx_try|mtx_recursive)) - return thrd_error; - - if ((type & mtx_recursive) == 0) { - pthread_mutex_init(mtx, NULL); - return thrd_success; - } - - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(mtx, &attr); - pthread_mutexattr_destroy(&attr); - return thrd_success; -} - -// 7.25.4.3 -static inline int -mtx_lock(mtx_t *mtx) -{ - assert(mtx != NULL); - return (pthread_mutex_lock(mtx) == 0) ? thrd_success : thrd_error; -} - -static inline int -mtx_trylock(mtx_t *mtx); - -static inline void -thrd_yield(void); - -// 7.25.4.4 -static inline int -mtx_timedlock(mtx_t *mtx, const struct timespec *ts) -{ - assert(mtx != NULL); - assert(ts != NULL); - - { -#ifdef EMULATED_THREADS_USE_NATIVE_TIMEDLOCK - int rt; - rt = pthread_mutex_timedlock(mtx, ts); - if (rt == 0) - return thrd_success; - return (rt == ETIMEDOUT) ? thrd_busy : thrd_error; -#else - time_t expire = time(NULL); - expire += ts->tv_sec; - while (mtx_trylock(mtx) != thrd_success) { - time_t now = time(NULL); - if (expire < now) - return thrd_busy; - // busy loop! - thrd_yield(); - } - return thrd_success; -#endif - } -} - -// 7.25.4.5 -static inline int -mtx_trylock(mtx_t *mtx) -{ - assert(mtx != NULL); - return (pthread_mutex_trylock(mtx) == 0) ? thrd_success : thrd_busy; -} - -// 7.25.4.6 -static inline int -mtx_unlock(mtx_t *mtx) -{ - assert(mtx != NULL); - return (pthread_mutex_unlock(mtx) == 0) ? thrd_success : thrd_error; -} - - -/*------------------- 7.25.5 Thread functions -------------------*/ -// 7.25.5.1 -static inline int -thrd_create(thrd_t *thr, thrd_start_t func, void *arg) -{ - struct impl_thrd_param *pack; - assert(thr != NULL); - pack = (struct impl_thrd_param *)malloc(sizeof(struct impl_thrd_param)); - if (!pack) return thrd_nomem; - pack->func = func; - pack->arg = arg; - if (pthread_create(thr, NULL, impl_thrd_routine, pack) != 0) { - free(pack); - return thrd_error; - } - return thrd_success; -} - -// 7.25.5.2 -static inline thrd_t -thrd_current(void) -{ - return pthread_self(); -} - -// 7.25.5.3 -static inline int -thrd_detach(thrd_t thr) -{ - return (pthread_detach(thr) == 0) ? thrd_success : thrd_error; -} - -// 7.25.5.4 -static inline int -thrd_equal(thrd_t thr0, thrd_t thr1) -{ - return pthread_equal(thr0, thr1); -} - -// 7.25.5.5 -static inline void -thrd_exit(int res) -{ - pthread_exit((void*)(intptr_t)res); -} - -// 7.25.5.6 -static inline int -thrd_join(thrd_t thr, int *res) -{ - void *code; - if (pthread_join(thr, &code) != 0) - return thrd_error; - if (res) - *res = (int)(intptr_t)code; - return thrd_success; -} - -// 7.25.5.7 -static inline void -thrd_sleep(const struct timespec *time_point, struct timespec *remaining) -{ - assert(time_point != NULL); - nanosleep(time_point, remaining); -} - -// 7.25.5.8 -static inline void -thrd_yield(void) -{ - sched_yield(); -} - - -/*----------- 7.25.6 Thread-specific storage functions -----------*/ -// 7.25.6.1 -static inline int -tss_create(tss_t *key, tss_dtor_t dtor) -{ - assert(key != NULL); - return (pthread_key_create(key, dtor) == 0) ? thrd_success : thrd_error; -} - -// 7.25.6.2 -static inline void -tss_delete(tss_t key) -{ - pthread_key_delete(key); -} - -// 7.25.6.3 -static inline void * -tss_get(tss_t key) -{ - return pthread_getspecific(key); -} - -// 7.25.6.4 -static inline int -tss_set(tss_t key, void *val) -{ - return (pthread_setspecific(key, val) == 0) ? thrd_success : thrd_error; -} - - -/*-------------------- 7.25.7 Time functions --------------------*/ -// 7.25.6.1 -#ifndef HAVE_TIMESPEC_GET -static inline int -timespec_get(struct timespec *ts, int base) -{ - if (!ts) return 0; - if (base == TIME_UTC) { - clock_gettime(CLOCK_REALTIME, ts); - return base; - } - return 0; -} -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/time.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/time.h deleted file mode 100644 index c7f8154..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11/time.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2022 Yonggang Luo - * SPDX-License-Identifier: MIT - * - * C11 emulation library - */ - -#ifndef C11_TIME_H_INCLUDED_ -#define C11_TIME_H_INCLUDED_ - -#include - -/*---------------------------- macros ---------------------------*/ - -#ifndef TIME_UTC -#define TIME_UTC 1 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/*---------------------------- types ----------------------------*/ - -/* - * On MINGW `struct timespec` present but `timespec_get` may not present; - * On MSVC `struct timespec` and `timespec_get` present at the same time; - * So detecting `HAVE_STRUCT_TIMESPEC` in meson script dynamically. - */ -#ifndef HAVE_STRUCT_TIMESPEC -struct timespec -{ - time_t tv_sec; // Seconds - >= 0 - long tv_nsec; // Nanoseconds - [0, 999999999] -}; -#endif - -/*-------------------------- functions --------------------------*/ - -#if !defined(HAVE_TIMESPEC_GET) -#define _HAVE_TIMESPEC_GET_NEED_DECL -#elif defined(__APPLE__) && defined(__cplusplus) && (__cplusplus < 201703L) -/* On macOS, the guard for declaration of timespec_get is by - * (defined(__cplusplus) && __cplusplus >= 201703L), - * fix the declaration for C++14 and lower here - */ -#define _HAVE_TIMESPEC_GET_NEED_DECL -#endif - -#ifdef _HAVE_TIMESPEC_GET_NEED_DECL -/*-------------------- 7.25.7 Time functions --------------------*/ -// 7.25.6.1 -int -timespec_get(struct timespec *ts, int base); -#undef _HAVE_TIMESPEC_GET_NEED_DECL -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* C11_TIME_H_INCLUDED_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11_compat.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/c11_compat.h deleted file mode 100644 index d35740f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/c11_compat.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2019 Intel Corporation */ -/* SPDX-License-Identifier: MIT */ - -#include "no_extern_c.h" - -#ifndef _C11_COMPAT_H_ -#define _C11_COMPAT_H_ - -#if defined(__cplusplus) - /* This is C++ code, not C */ -#elif (__STDC_VERSION__ >= 201112L) - /* Already C11 */ -#else - - -/* - * C11 static_assert() macro - * assert.h only defines that name for C11 and above - */ -#ifndef static_assert -#define static_assert _Static_assert -#endif - - -#endif /* !C++ && !C11 */ - -#endif /* _C11_COMPAT_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_alloca.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_alloca.h deleted file mode 100644 index 5a3b8c1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_alloca.h +++ /dev/null @@ -1,49 +0,0 @@ -/************************************************************************** - * - * Copyright 2015 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef _C99_ALLOCA_H_ -#define _C99_ALLOCA_H_ - - -#if defined(_MSC_VER) - -# include - -# define alloca _alloca - -#elif defined(__sun) || defined(__CYGWIN__) - -# include - -#else /* !defined(_MSC_VER) */ - -# include - -#endif /* !defined(_MSC_VER) */ - - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_compat.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_compat.h deleted file mode 100644 index 8389542..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_compat.h +++ /dev/null @@ -1,88 +0,0 @@ -/************************************************************************** - * - * Copyright 2007-2013 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#include "no_extern_c.h" - -#ifndef _C99_COMPAT_H_ -#define _C99_COMPAT_H_ - - -/* - * MSVC hacks. - */ -#if defined(_MSC_VER) - -# if _MSC_VER < 1900 -# error "Microsoft Visual Studio 2015 or higher required" -# endif - - /* - * XXX: MSVC has a `__restrict` keyword, but it also has a - * `__declspec(restrict)` modifier, so it is impossible to define a - * `restrict` macro without interfering with the latter. Furthermore the - * MSVC standard library uses __declspec(restrict) under the _CRTRESTRICT - * macro. For now resolve this issue by redefining _CRTRESTRICT, but going - * forward we should probably should stop using restrict, especially - * considering that our code does not obbey strict aliasing rules any way. - */ -# include -# undef _CRTRESTRICT -# define _CRTRESTRICT -#endif - - -/* - * C99 restrict keyword - * - * See also: - * - http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html - */ -#ifndef restrict -# ifndef __cplusplus - /* Use C99 restrict keyword */ -# elif defined(__GNUC__) -# define restrict __restrict__ -# elif defined(_MSC_VER) -# define restrict __restrict -# else -# define restrict /* */ -# endif -#endif - - -/* Simple test case for debugging */ -#if 0 -static inline const char * -test_c99_compat_h(const void * restrict a, - const void * restrict b) -{ - return __func__; -} -#endif - - -#endif /* _C99_COMPAT_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_math.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_math.h deleted file mode 100644 index e906c26..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/c99_math.h +++ /dev/null @@ -1,211 +0,0 @@ -/************************************************************************** - * - * Copyright 2007-2015 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -/** - * Wrapper for math.h which makes sure we have definitions of all the c99 - * functions. - */ - - -#ifndef _C99_MATH_H_ -#define _C99_MATH_H_ - -#include -#include "c99_compat.h" - - -/* This is to ensure that we get M_PI, etc. definitions */ -#if defined(_MSC_VER) && !defined(_USE_MATH_DEFINES) -#error _USE_MATH_DEFINES define required when building with MSVC -#endif - - -#if !defined(_MSC_VER) && \ - __STDC_VERSION__ < 199901L && \ - (!defined(_XOPEN_SOURCE) || _XOPEN_SOURCE < 600) && \ - !defined(__cplusplus) - -static inline long int -lrint(double d) -{ - long int rounded = (long int)(d + 0.5); - - if (d - floor(d) == 0.5) { - if (rounded % 2 != 0) - rounded += (d > 0) ? -1 : 1; - } - - return rounded; -} - -static inline long int -lrintf(float f) -{ - long int rounded = (long int)(f + 0.5f); - - if (f - floorf(f) == 0.5f) { - if (rounded % 2 != 0) - rounded += (f > 0) ? -1 : 1; - } - - return rounded; -} - -static inline long long int -llrint(double d) -{ - long long int rounded = (long long int)(d + 0.5); - - if (d - floor(d) == 0.5) { - if (rounded % 2 != 0) - rounded += (d > 0) ? -1 : 1; - } - - return rounded; -} - -static inline long long int -llrintf(float f) -{ - long long int rounded = (long long int)(f + 0.5f); - - if (f - floorf(f) == 0.5f) { - if (rounded % 2 != 0) - rounded += (f > 0) ? -1 : 1; - } - - return rounded; -} - -static inline float -exp2f(float f) -{ - return powf(2.0f, f); -} - -static inline double -exp2(double d) -{ - return pow(2.0, d); -} - -#endif /* C99 */ - - -/* - * signbit() is a macro on Linux. Not available on Windows. - */ -#ifndef signbit -#define signbit(x) ((x) < 0.0f) -#endif - - -#ifndef M_PI -#define M_PI (3.14159265358979323846) -#endif - -#ifndef M_E -#define M_E (2.7182818284590452354) -#endif - -#ifndef M_LOG2E -#define M_LOG2E (1.4426950408889634074) -#endif - -#ifndef FLT_MAX_EXP -#define FLT_MAX_EXP 128 -#endif - - -#if defined(fpclassify) -/* ISO C99 says that fpclassify is a macro. Assume that any implementation - * of fpclassify, whether it's in a C99 compiler or not, will be a macro. - */ -#elif defined(__cplusplus) -/* For C++, fpclassify() should be defined in */ -#elif defined(_MSC_VER) -/* Not required on VS2013 and above. Oddly, the fpclassify() function - * doesn't exist in such a form on MSVC. This is an implementation using - * slightly different lower-level Windows functions. - */ -#include - -static inline enum {FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL, FP_NORMAL} -fpclassify(double x) -{ - switch(_fpclass(x)) { - case _FPCLASS_SNAN: /* signaling NaN */ - case _FPCLASS_QNAN: /* quiet NaN */ - return FP_NAN; - case _FPCLASS_NINF: /* negative infinity */ - case _FPCLASS_PINF: /* positive infinity */ - return FP_INFINITE; - case _FPCLASS_NN: /* negative normal */ - case _FPCLASS_PN: /* positive normal */ - return FP_NORMAL; - case _FPCLASS_ND: /* negative denormalized */ - case _FPCLASS_PD: /* positive denormalized */ - return FP_SUBNORMAL; - case _FPCLASS_NZ: /* negative zero */ - case _FPCLASS_PZ: /* positive zero */ - return FP_ZERO; - default: - /* Should never get here; but if we do, this will guarantee - * that the pattern is not treated like a number. - */ - return FP_NAN; - } -} -#else -#error "Need to include or define an fpclassify function" -#endif - - -/* Since C++11, the following functions are part of the std namespace. Their C - * counteparts should still exist in the global namespace, however cmath - * undefines those functions, which in glibc 2.23, are defined as macros rather - * than functions as in glibc 2.22. - */ -#if __cplusplus >= 201103L && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 23)) -#include - -using std::fpclassify; -using std::isfinite; -using std::isinf; -using std::isnan; -using std::isnormal; -using std::signbit; -using std::isgreater; -using std::isgreaterequal; -using std::isless; -using std::islessequal; -using std::islessgreater; -using std::isunordered; -#endif - - -#endif /* #define _C99_MATH_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/ndk/sync.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/ndk/sync.h deleted file mode 100644 index a0e7328..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/ndk/sync.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @addtogroup Sync - * @{ - */ - -/** - * @file sync.h - */ - -#ifndef ANDROID_SYNC_H -#define ANDROID_SYNC_H - -#include -#include - -#include -#include "../android/defines.h" - -__BEGIN_DECLS - -/* Fences indicate the status of an asynchronous task. They are initially - * in unsignaled state (0), and make a one-time transition to either signaled - * (1) or error (< 0) state. A sync file is a collection of one or more fences; - * the sync file's status is error if any of its fences are in error state, - * signaled if all of the child fences are signaled, or unsignaled otherwise. - * - * Sync files are created by various device APIs in response to submitting - * tasks to the device. Standard file descriptor lifetime syscalls like dup() - * and close() are used to manage sync file lifetime. - * - * The poll(), ppoll(), or select() syscalls can be used to wait for the sync - * file to change status, or (with a timeout of zero) to check its status. - * - * The functions below provide a few additional sync-specific operations. - */ - -/** - * Merge two sync files. - * - * This produces a new sync file with the given name which has the union of the - * two original sync file's fences; redundant fences may be removed. - * - * If one of the input sync files is signaled or invalid, then this function - * may behave like dup(): the new file descriptor refers to the valid/unsignaled - * sync file with its original name, rather than a new sync file. - * - * The original fences remain valid, and the caller is responsible for closing - * them. - * - * Available since API level 26. - */ -int32_t sync_merge(const char* name, int32_t fd1, int32_t fd2) __INTRODUCED_IN(26); - -/** - * Retrieve detailed information about a sync file and its fences. - * - * The returned sync_file_info must be freed by calling sync_file_info_free(). - * - * Available since API level 26. - */ -struct sync_file_info* sync_file_info(int32_t fd) __INTRODUCED_IN(26); - -/** - * Get the array of fence infos from the sync file's info. - * - * The returned array is owned by the parent sync file info, and has - * info->num_fences entries. - * - * Available since API level 26. - */ -static inline struct sync_fence_info* sync_get_fence_info(const struct sync_file_info* info) { -// This header should compile in C, but some C++ projects enable -// warnings-as-error for C-style casts. -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" - return (struct sync_fence_info *)(uintptr_t)(info->sync_fence_info); -#pragma GCC diagnostic pop -} - -/** - * Free a struct sync_file_info structure - * - * Available since API level 26. - */ -void sync_file_info_free(struct sync_file_info* info) __INTRODUCED_IN(26); - -__END_DECLS - -#endif /* ANDROID_SYNC_H */ - -/** @} */ \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/no_extern_c.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/no_extern_c.h deleted file mode 100644 index f79602c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/no_extern_c.h +++ /dev/null @@ -1,48 +0,0 @@ -/************************************************************************** - * - * Copyright 2014 VMware, Inc. - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - - -/* - * Including system's headers inside `extern "C" { ... }` is not safe, as system - * headers may have C++ code in them, and C++ code inside extern "C" - * leads to syntatically incorrect code. - * - * This is because putting code inside extern "C" won't make __cplusplus define - * go away, that is, the system header being included thinks is free to use C++ - * as it sees fits. - * - * Including non-system headers inside extern "C" is not safe either, because - * non-system headers end up including system headers, hence fall in the above - * case too. - * - * Conclusion, includes inside extern "C" is simply not portable. - * - * - * This header helps surface these issues. - */ - -#ifdef __cplusplus -template class _IncludeInsideExternCNotPortable; -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/optimizer/optimizer.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/optimizer/optimizer.h deleted file mode 100644 index ed081be..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/optimizer/optimizer.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once -#include - -enum class xShaderStage -{ - MESA_SHADER_NONE = -1, - MESA_SHADER_VERTEX = 0, - MESA_SHADER_TESS_CTRL = 1, - MESA_SHADER_TESS_EVAL = 2, - MESA_SHADER_GEOMETRY = 3, - MESA_SHADER_FRAGMENT = 4, - MESA_SHADER_COMPUTE = 5, - /* must be last so it doesn't affect the GL pipeline */ - MESA_SHADER_KERNEL = 6, -}; -enum class xApiTarget -{ - API_OPENGL_COMPAT = 0, - API_OPENGL_CORE -}; - -class GlslConvert; - -struct Optimizer -{ -public: - Optimizer(); -public: - std::string Optimize( - std::string vShaderSource, - xShaderStage vShaderType, - int vGLSLVersion, - int vTargetGLSLVersion, - bool isESShader); - bool Failed()const noexcept; - std::string GetLog(); -private: - GlslConvert& instance; -}; - - - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/p_defines.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/p_defines.h deleted file mode 100644 index d3a0272..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/p_defines.h +++ /dev/null @@ -1,1413 +0,0 @@ -/************************************************************************** - * - * Copyright 2007 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef PIPE_DEFINES_H -#define PIPE_DEFINES_H - -#include "../src/gallium/include/pipe/p_compiler.h" - -#include "../src/compiler/shader_enums.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Gallium error codes. - * - * - A zero value always means success. - * - A negative value always means failure. - * - The meaning of a positive value is function dependent. - */ -enum pipe_error -{ - PIPE_OK = 0, - PIPE_ERROR = -1, /**< Generic error */ - PIPE_ERROR_BAD_INPUT = -2, - PIPE_ERROR_OUT_OF_MEMORY = -3, - PIPE_ERROR_RETRY = -4 - /* TODO */ -}; - -enum pipe_blendfactor { - PIPE_BLENDFACTOR_ONE = 1, - PIPE_BLENDFACTOR_SRC_COLOR, - PIPE_BLENDFACTOR_SRC_ALPHA, - PIPE_BLENDFACTOR_DST_ALPHA, - PIPE_BLENDFACTOR_DST_COLOR, - PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE, - PIPE_BLENDFACTOR_CONST_COLOR, - PIPE_BLENDFACTOR_CONST_ALPHA, - PIPE_BLENDFACTOR_SRC1_COLOR, - PIPE_BLENDFACTOR_SRC1_ALPHA, - - PIPE_BLENDFACTOR_ZERO = 0x11, - PIPE_BLENDFACTOR_INV_SRC_COLOR, - PIPE_BLENDFACTOR_INV_SRC_ALPHA, - PIPE_BLENDFACTOR_INV_DST_ALPHA, - PIPE_BLENDFACTOR_INV_DST_COLOR, - - PIPE_BLENDFACTOR_INV_CONST_COLOR = 0x17, - PIPE_BLENDFACTOR_INV_CONST_ALPHA, - PIPE_BLENDFACTOR_INV_SRC1_COLOR, - PIPE_BLENDFACTOR_INV_SRC1_ALPHA, -}; - -enum pipe_blend_func { - PIPE_BLEND_ADD, - PIPE_BLEND_SUBTRACT, - PIPE_BLEND_REVERSE_SUBTRACT, - PIPE_BLEND_MIN, - PIPE_BLEND_MAX, -}; - -enum pipe_logicop { - PIPE_LOGICOP_CLEAR, - PIPE_LOGICOP_NOR, - PIPE_LOGICOP_AND_INVERTED, - PIPE_LOGICOP_COPY_INVERTED, - PIPE_LOGICOP_AND_REVERSE, - PIPE_LOGICOP_INVERT, - PIPE_LOGICOP_XOR, - PIPE_LOGICOP_NAND, - PIPE_LOGICOP_AND, - PIPE_LOGICOP_EQUIV, - PIPE_LOGICOP_NOOP, - PIPE_LOGICOP_OR_INVERTED, - PIPE_LOGICOP_COPY, - PIPE_LOGICOP_OR_REVERSE, - PIPE_LOGICOP_OR, - PIPE_LOGICOP_SET, -}; - -#define PIPE_MASK_R 0x1 -#define PIPE_MASK_G 0x2 -#define PIPE_MASK_B 0x4 -#define PIPE_MASK_A 0x8 -#define PIPE_MASK_RGBA 0xf -#define PIPE_MASK_Z 0x10 -#define PIPE_MASK_S 0x20 -#define PIPE_MASK_ZS 0x30 -#define PIPE_MASK_RGBAZS (PIPE_MASK_RGBA|PIPE_MASK_ZS) - - -/** - * Inequality functions. Used for depth test, stencil compare, alpha - * test, shadow compare, etc. - */ -enum pipe_compare_func { - PIPE_FUNC_NEVER, - PIPE_FUNC_LESS, - PIPE_FUNC_EQUAL, - PIPE_FUNC_LEQUAL, - PIPE_FUNC_GREATER, - PIPE_FUNC_NOTEQUAL, - PIPE_FUNC_GEQUAL, - PIPE_FUNC_ALWAYS, -}; - -/** Polygon fill mode */ -enum { - PIPE_POLYGON_MODE_FILL, - PIPE_POLYGON_MODE_LINE, - PIPE_POLYGON_MODE_POINT, - PIPE_POLYGON_MODE_FILL_RECTANGLE, -}; - -/** Polygon face specification, eg for culling */ -#define PIPE_FACE_NONE 0 -#define PIPE_FACE_FRONT 1 -#define PIPE_FACE_BACK 2 -#define PIPE_FACE_FRONT_AND_BACK (PIPE_FACE_FRONT | PIPE_FACE_BACK) - -/** Stencil ops */ -enum pipe_stencil_op { - PIPE_STENCIL_OP_KEEP, - PIPE_STENCIL_OP_ZERO, - PIPE_STENCIL_OP_REPLACE, - PIPE_STENCIL_OP_INCR, - PIPE_STENCIL_OP_DECR, - PIPE_STENCIL_OP_INCR_WRAP, - PIPE_STENCIL_OP_DECR_WRAP, - PIPE_STENCIL_OP_INVERT, -}; - -/** Texture types. - * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D - */ -enum pipe_texture_target -{ - PIPE_BUFFER, - PIPE_TEXTURE_1D, - PIPE_TEXTURE_2D, - PIPE_TEXTURE_3D, - PIPE_TEXTURE_CUBE, - PIPE_TEXTURE_RECT, - PIPE_TEXTURE_1D_ARRAY, - PIPE_TEXTURE_2D_ARRAY, - PIPE_TEXTURE_CUBE_ARRAY, - PIPE_MAX_TEXTURE_TYPES, -}; - -enum pipe_tex_face { - PIPE_TEX_FACE_POS_X, - PIPE_TEX_FACE_NEG_X, - PIPE_TEX_FACE_POS_Y, - PIPE_TEX_FACE_NEG_Y, - PIPE_TEX_FACE_POS_Z, - PIPE_TEX_FACE_NEG_Z, - PIPE_TEX_FACE_MAX, -}; - -enum pipe_tex_wrap { - PIPE_TEX_WRAP_REPEAT, - PIPE_TEX_WRAP_CLAMP, - PIPE_TEX_WRAP_CLAMP_TO_EDGE, - PIPE_TEX_WRAP_CLAMP_TO_BORDER, - PIPE_TEX_WRAP_MIRROR_REPEAT, - PIPE_TEX_WRAP_MIRROR_CLAMP, - PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE, - PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER, -}; - -/** Between mipmaps, ie mipfilter */ -enum pipe_tex_mipfilter { - PIPE_TEX_MIPFILTER_NEAREST, - PIPE_TEX_MIPFILTER_LINEAR, - PIPE_TEX_MIPFILTER_NONE, -}; - -/** Within a mipmap, ie min/mag filter */ -enum pipe_tex_filter { - PIPE_TEX_FILTER_NEAREST, - PIPE_TEX_FILTER_LINEAR, -}; - -enum pipe_tex_compare { - PIPE_TEX_COMPARE_NONE, - PIPE_TEX_COMPARE_R_TO_TEXTURE, -}; - -enum pipe_tex_reduction_mode { - PIPE_TEX_REDUCTION_WEIGHTED_AVERAGE, - PIPE_TEX_REDUCTION_MIN, - PIPE_TEX_REDUCTION_MAX, -}; - -/** - * Clear buffer bits - */ -#define PIPE_CLEAR_DEPTH (1 << 0) -#define PIPE_CLEAR_STENCIL (1 << 1) -#define PIPE_CLEAR_COLOR0 (1 << 2) -#define PIPE_CLEAR_COLOR1 (1 << 3) -#define PIPE_CLEAR_COLOR2 (1 << 4) -#define PIPE_CLEAR_COLOR3 (1 << 5) -#define PIPE_CLEAR_COLOR4 (1 << 6) -#define PIPE_CLEAR_COLOR5 (1 << 7) -#define PIPE_CLEAR_COLOR6 (1 << 8) -#define PIPE_CLEAR_COLOR7 (1 << 9) -/** Combined flags */ -/** All color buffers currently bound */ -#define PIPE_CLEAR_COLOR (PIPE_CLEAR_COLOR0 | PIPE_CLEAR_COLOR1 | \ - PIPE_CLEAR_COLOR2 | PIPE_CLEAR_COLOR3 | \ - PIPE_CLEAR_COLOR4 | PIPE_CLEAR_COLOR5 | \ - PIPE_CLEAR_COLOR6 | PIPE_CLEAR_COLOR7) -#define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL) - -/** - * CPU access map flags - */ -enum pipe_map_flags -{ - /** - * Resource contents read back (or accessed directly) at transfer - * create time. - */ - PIPE_MAP_READ = 1 << 0, - - /** - * Resource contents will be written back at buffer/texture_unmap - * time (or modified as a result of being accessed directly). - */ - PIPE_MAP_WRITE = 1 << 1, - - /** - * Read/modify/write - */ - PIPE_MAP_READ_WRITE = PIPE_MAP_READ | PIPE_MAP_WRITE, - - /** - * The transfer should map the texture storage directly. The driver may - * return NULL if that isn't possible, and the gallium frontend needs to cope - * with that and use an alternative path without this flag. - * - * E.g. the gallium frontend could have a simpler path which maps textures and - * does read/modify/write cycles on them directly, and a more complicated - * path which uses minimal read and write transfers. - * - * This flag supresses implicit "DISCARD" for buffer_subdata. - */ - PIPE_MAP_DIRECTLY = 1 << 2, - - /** - * Discards the memory within the mapped region. - * - * It should not be used with PIPE_MAP_READ. - * - * See also: - * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_RANGE_BIT flag. - */ - PIPE_MAP_DISCARD_RANGE = 1 << 3, - - /** - * Fail if the resource cannot be mapped immediately. - * - * See also: - * - Direct3D's D3DLOCK_DONOTWAIT flag. - * - Mesa's MESA_MAP_NOWAIT_BIT flag. - * - WDDM's D3DDDICB_LOCKFLAGS.DonotWait flag. - */ - PIPE_MAP_DONTBLOCK = 1 << 4, - - /** - * Do not attempt to synchronize pending operations on the resource when mapping. - * - * It should not be used with PIPE_MAP_READ. - * - * See also: - * - OpenGL's ARB_map_buffer_range extension, MAP_UNSYNCHRONIZED_BIT flag. - * - Direct3D's D3DLOCK_NOOVERWRITE flag. - * - WDDM's D3DDDICB_LOCKFLAGS.IgnoreSync flag. - */ - PIPE_MAP_UNSYNCHRONIZED = 1 << 5, - - /** - * Written ranges will be notified later with - * pipe_context::transfer_flush_region. - * - * It should not be used with PIPE_MAP_READ. - * - * See also: - * - pipe_context::transfer_flush_region - * - OpenGL's ARB_map_buffer_range extension, MAP_FLUSH_EXPLICIT_BIT flag. - */ - PIPE_MAP_FLUSH_EXPLICIT = 1 << 6, - - /** - * Discards all memory backing the resource. - * - * It should not be used with PIPE_MAP_READ. - * - * This is equivalent to: - * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_BUFFER_BIT - * - BufferData(NULL) on a GL buffer - * - Direct3D's D3DLOCK_DISCARD flag. - * - WDDM's D3DDDICB_LOCKFLAGS.Discard flag. - * - D3D10 DDI's D3D10_DDI_MAP_WRITE_DISCARD flag - * - D3D10's D3D10_MAP_WRITE_DISCARD flag. - */ - PIPE_MAP_DISCARD_WHOLE_RESOURCE = 1 << 7, - - /** - * Allows the resource to be used for rendering while mapped. - * - * PIPE_RESOURCE_FLAG_MAP_PERSISTENT must be set when creating - * the resource. - * - * If COHERENT is not set, memory_barrier(PIPE_BARRIER_MAPPED_BUFFER) - * must be called to ensure the device can see what the CPU has written. - */ - PIPE_MAP_PERSISTENT = 1 << 8, - - /** - * If PERSISTENT is set, this ensures any writes done by the device are - * immediately visible to the CPU and vice versa. - * - * PIPE_RESOURCE_FLAG_MAP_COHERENT must be set when creating - * the resource. - */ - PIPE_MAP_COHERENT = 1 << 9, - - /** - * Map a resource in a thread-safe manner, because the calling thread can - * be any thread. It can only be used if both WRITE and UNSYNCHRONIZED are - * set. - */ - PIPE_MAP_THREAD_SAFE = 1 << 10, - - /** - * Map only the depth aspect of a resource - */ - PIPE_MAP_DEPTH_ONLY = 1 << 11, - - /** - * Map only the stencil aspect of a resource - */ - PIPE_MAP_STENCIL_ONLY = 1 << 12, - - /** - * Mapping will be used only once (never remapped). - */ - PIPE_MAP_ONCE = 1 << 13, - - /** - * This and higher bits are reserved for private use by drivers. Drivers - * should use this as (PIPE_MAP_DRV_PRV << i). - */ - PIPE_MAP_DRV_PRV = 1 << 14, -}; - -/** - * Flags for the flush function. - */ -enum pipe_flush_flags -{ - PIPE_FLUSH_END_OF_FRAME = (1 << 0), - PIPE_FLUSH_DEFERRED = (1 << 1), - PIPE_FLUSH_FENCE_FD = (1 << 2), - PIPE_FLUSH_ASYNC = (1 << 3), - PIPE_FLUSH_HINT_FINISH = (1 << 4), - PIPE_FLUSH_TOP_OF_PIPE = (1 << 5), - PIPE_FLUSH_BOTTOM_OF_PIPE = (1 << 6), -}; - -/** - * Flags for pipe_context::dump_debug_state. - */ -#define PIPE_DUMP_DEVICE_STATUS_REGISTERS (1 << 0) - -/** - * Create a compute-only context. Use in pipe_screen::context_create. - * This disables draw, blit, and clear*, render_condition, and other graphics - * functions. Interop with other graphics contexts is still allowed. - * This allows scheduling jobs on a compute-only hardware command queue that - * can run in parallel with graphics without stalling it. - */ -#define PIPE_CONTEXT_COMPUTE_ONLY (1 << 0) - -/** - * Gather debug information and expect that pipe_context::dump_debug_state - * will be called. Use in pipe_screen::context_create. - */ -#define PIPE_CONTEXT_DEBUG (1 << 1) - -/** - * Whether out-of-bounds shader loads must return zero and out-of-bounds - * shader stores must be dropped. - */ -#define PIPE_CONTEXT_ROBUST_BUFFER_ACCESS (1 << 2) - -/** - * Prefer threaded pipe_context. It also implies that video codec functions - * will not be used. (they will be either no-ops or NULL when threading is - * enabled) - */ -#define PIPE_CONTEXT_PREFER_THREADED (1 << 3) - -/** - * Create a high priority context. - */ -#define PIPE_CONTEXT_HIGH_PRIORITY (1 << 4) - -/** - * Create a low priority context. - */ -#define PIPE_CONTEXT_LOW_PRIORITY (1 << 5) - -/** Stop execution if the device is reset. */ -#define PIPE_CONTEXT_LOSE_CONTEXT_ON_RESET (1 << 6) - -/** - * Create a protected context to access protected content (surfaces, - * textures, ...) - * - * This is required to access protected images and surfaces if - * EGL_EXT_protected_surface is not supported. - */ -#define PIPE_CONTEXT_PROTECTED (1 << 7) - -/** - * Flags for pipe_context::memory_barrier. - */ -#define PIPE_BARRIER_MAPPED_BUFFER (1 << 0) -#define PIPE_BARRIER_SHADER_BUFFER (1 << 1) -#define PIPE_BARRIER_QUERY_BUFFER (1 << 2) -#define PIPE_BARRIER_VERTEX_BUFFER (1 << 3) -#define PIPE_BARRIER_INDEX_BUFFER (1 << 4) -#define PIPE_BARRIER_CONSTANT_BUFFER (1 << 5) -#define PIPE_BARRIER_INDIRECT_BUFFER (1 << 6) -#define PIPE_BARRIER_TEXTURE (1 << 7) -#define PIPE_BARRIER_IMAGE (1 << 8) -#define PIPE_BARRIER_FRAMEBUFFER (1 << 9) -#define PIPE_BARRIER_STREAMOUT_BUFFER (1 << 10) -#define PIPE_BARRIER_GLOBAL_BUFFER (1 << 11) -#define PIPE_BARRIER_UPDATE_BUFFER (1 << 12) -#define PIPE_BARRIER_UPDATE_TEXTURE (1 << 13) -#define PIPE_BARRIER_ALL ((1 << 14) - 1) - -#define PIPE_BARRIER_UPDATE \ - (PIPE_BARRIER_UPDATE_BUFFER | PIPE_BARRIER_UPDATE_TEXTURE) - -/** - * Flags for pipe_context::texture_barrier. - */ -#define PIPE_TEXTURE_BARRIER_SAMPLER (1 << 0) -#define PIPE_TEXTURE_BARRIER_FRAMEBUFFER (1 << 1) - -/** - * Resource binding flags -- gallium frontends must specify in advance all - * the ways a resource might be used. - */ -#define PIPE_BIND_DEPTH_STENCIL (1 << 0) /* create_surface */ -#define PIPE_BIND_RENDER_TARGET (1 << 1) /* create_surface */ -#define PIPE_BIND_BLENDABLE (1 << 2) /* create_surface */ -#define PIPE_BIND_SAMPLER_VIEW (1 << 3) /* create_sampler_view */ -#define PIPE_BIND_VERTEX_BUFFER (1 << 4) /* set_vertex_buffers */ -#define PIPE_BIND_INDEX_BUFFER (1 << 5) /* draw_elements */ -#define PIPE_BIND_CONSTANT_BUFFER (1 << 6) /* set_constant_buffer */ -#define PIPE_BIND_DISPLAY_TARGET (1 << 7) /* flush_front_buffer */ -#define PIPE_BIND_VERTEX_STATE (1 << 8) /* create_vertex_state */ -/* gap */ -#define PIPE_BIND_STREAM_OUTPUT (1 << 10) /* set_stream_output_buffers */ -#define PIPE_BIND_CURSOR (1 << 11) /* mouse cursor */ -#define PIPE_BIND_CUSTOM (1 << 12) /* gallium frontend/winsys usages */ -#define PIPE_BIND_GLOBAL (1 << 13) /* set_global_binding */ -#define PIPE_BIND_SHADER_BUFFER (1 << 14) /* set_shader_buffers */ -#define PIPE_BIND_SHADER_IMAGE (1 << 15) /* set_shader_images */ -#define PIPE_BIND_COMPUTE_RESOURCE (1 << 16) /* set_compute_resources */ -#define PIPE_BIND_COMMAND_ARGS_BUFFER (1 << 17) /* pipe_draw_info.indirect */ -#define PIPE_BIND_QUERY_BUFFER (1 << 18) /* get_query_result_resource */ - -/** - * The first two flags above were previously part of the amorphous - * TEXTURE_USAGE, most of which are now descriptions of the ways a - * particular texture can be bound to the gallium pipeline. The two flags - * below do not fit within that and probably need to be migrated to some - * other place. - * - * Scanout is used to ask for a texture suitable for actual scanout (hence - * the name), which implies extra layout constraints on some hardware. - * It may also have some special meaning regarding mouse cursor images. - * - * The shared flag is quite underspecified, but certainly isn't a - * binding flag - it seems more like a message to the winsys to create - * a shareable allocation. - * - * The third flag has been added to be able to force textures to be created - * in linear mode (no tiling). - */ -#define PIPE_BIND_SCANOUT (1 << 19) /* */ -#define PIPE_BIND_SHARED (1 << 20) /* get_texture_handle ??? */ -#define PIPE_BIND_LINEAR (1 << 21) -#define PIPE_BIND_PROTECTED (1 << 22) /* Resource will be protected/encrypted */ -#define PIPE_BIND_SAMPLER_REDUCTION_MINMAX (1 << 23) /* PIPE_CAP_SAMPLER_REDUCTION_MINMAX */ -/* Resource is the DRI_PRIME blit destination. Only set on on the render GPU. */ -#define PIPE_BIND_PRIME_BLIT_DST (1 << 24) -#define PIPE_BIND_USE_FRONT_RENDERING (1 << 25) /* Resource may be used for frontbuffer rendering */ - - -/** - * Flags for the driver about resource behaviour: - */ -#define PIPE_RESOURCE_FLAG_MAP_PERSISTENT (1 << 0) -#define PIPE_RESOURCE_FLAG_MAP_COHERENT (1 << 1) -#define PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY (1 << 2) -#define PIPE_RESOURCE_FLAG_SPARSE (1 << 3) -#define PIPE_RESOURCE_FLAG_SINGLE_THREAD_USE (1 << 4) -#define PIPE_RESOURCE_FLAG_ENCRYPTED (1 << 5) -#define PIPE_RESOURCE_FLAG_DONT_OVER_ALLOCATE (1 << 6) -#define PIPE_RESOURCE_FLAG_DONT_MAP_DIRECTLY (1 << 7) /* for small visible VRAM */ -#define PIPE_RESOURCE_FLAG_UNMAPPABLE (1 << 8) /* implies staging transfers due to VK interop */ -#define PIPE_RESOURCE_FLAG_DRV_PRIV (1 << 9) /* driver/winsys private */ -#define PIPE_RESOURCE_FLAG_FRONTEND_PRIV (1 << 24) /* gallium frontend private */ - -/** - * Hint about the expected lifecycle of a resource. - * Sorted according to GPU vs CPU access. - */ -enum pipe_resource_usage { - PIPE_USAGE_DEFAULT, /* fast GPU access */ - PIPE_USAGE_IMMUTABLE, /* fast GPU access, immutable */ - PIPE_USAGE_DYNAMIC, /* uploaded data is used multiple times */ - PIPE_USAGE_STREAM, /* uploaded data is used once */ - PIPE_USAGE_STAGING, /* fast CPU access */ -}; - -/** - * Primitive types: - */ -enum PACKED pipe_prim_type { - PIPE_PRIM_POINTS, - PIPE_PRIM_LINES, - PIPE_PRIM_LINE_LOOP, - PIPE_PRIM_LINE_STRIP, - PIPE_PRIM_TRIANGLES, - PIPE_PRIM_TRIANGLE_STRIP, - PIPE_PRIM_TRIANGLE_FAN, - PIPE_PRIM_QUADS, - PIPE_PRIM_QUAD_STRIP, - PIPE_PRIM_POLYGON, - PIPE_PRIM_LINES_ADJACENCY, - PIPE_PRIM_LINE_STRIP_ADJACENCY, - PIPE_PRIM_TRIANGLES_ADJACENCY, - PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY, - PIPE_PRIM_PATCHES, - PIPE_PRIM_MAX, -}; - -/** - * Tessellator spacing types - */ -enum pipe_tess_spacing { - PIPE_TESS_SPACING_FRACTIONAL_ODD, - PIPE_TESS_SPACING_FRACTIONAL_EVEN, - PIPE_TESS_SPACING_EQUAL, -}; - -/** - * Query object types - */ -enum pipe_query_type { - PIPE_QUERY_OCCLUSION_COUNTER, - PIPE_QUERY_OCCLUSION_PREDICATE, - PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE, - PIPE_QUERY_TIMESTAMP, - PIPE_QUERY_TIMESTAMP_DISJOINT, - PIPE_QUERY_TIME_ELAPSED, - PIPE_QUERY_PRIMITIVES_GENERATED, - PIPE_QUERY_PRIMITIVES_EMITTED, - PIPE_QUERY_SO_STATISTICS, - PIPE_QUERY_SO_OVERFLOW_PREDICATE, - PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE, - PIPE_QUERY_GPU_FINISHED, - PIPE_QUERY_PIPELINE_STATISTICS, - PIPE_QUERY_PIPELINE_STATISTICS_SINGLE, - PIPE_QUERY_TYPES, - /* start of driver queries, see pipe_screen::get_driver_query_info */ - PIPE_QUERY_DRIVER_SPECIFIC = 256, -}; - -/** - * Index for PIPE_QUERY_PIPELINE_STATISTICS subqueries. - */ -enum pipe_statistics_query_index { - PIPE_STAT_QUERY_IA_VERTICES, - PIPE_STAT_QUERY_IA_PRIMITIVES, - PIPE_STAT_QUERY_VS_INVOCATIONS, - PIPE_STAT_QUERY_GS_INVOCATIONS, - PIPE_STAT_QUERY_GS_PRIMITIVES, - PIPE_STAT_QUERY_C_INVOCATIONS, - PIPE_STAT_QUERY_C_PRIMITIVES, - PIPE_STAT_QUERY_PS_INVOCATIONS, - PIPE_STAT_QUERY_HS_INVOCATIONS, - PIPE_STAT_QUERY_DS_INVOCATIONS, - PIPE_STAT_QUERY_CS_INVOCATIONS, -}; - -/** - * Conditional rendering modes - */ -enum pipe_render_cond_flag { - PIPE_RENDER_COND_WAIT, - PIPE_RENDER_COND_NO_WAIT, - PIPE_RENDER_COND_BY_REGION_WAIT, - PIPE_RENDER_COND_BY_REGION_NO_WAIT, -}; - -/** - * Point sprite coord modes - */ -enum pipe_sprite_coord_mode { - PIPE_SPRITE_COORD_UPPER_LEFT, - PIPE_SPRITE_COORD_LOWER_LEFT, -}; - -/** - * Texture & format swizzles - */ -enum pipe_swizzle { - PIPE_SWIZZLE_X, - PIPE_SWIZZLE_Y, - PIPE_SWIZZLE_Z, - PIPE_SWIZZLE_W, - PIPE_SWIZZLE_0, - PIPE_SWIZZLE_1, - PIPE_SWIZZLE_NONE, - PIPE_SWIZZLE_MAX, /**< Number of enums counter (must be last) */ -}; - -/** - * Viewport swizzles - */ -enum pipe_viewport_swizzle { - PIPE_VIEWPORT_SWIZZLE_POSITIVE_X, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_X, - PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_Y, - PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_Z, - PIPE_VIEWPORT_SWIZZLE_POSITIVE_W, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_W, -}; - -#define PIPE_TIMEOUT_INFINITE 0xffffffffffffffffull - - -/** - * Device reset status. - */ -enum pipe_reset_status -{ - PIPE_NO_RESET, - PIPE_GUILTY_CONTEXT_RESET, - PIPE_INNOCENT_CONTEXT_RESET, - PIPE_UNKNOWN_CONTEXT_RESET, -}; - - -/** - * Conservative rasterization modes. - */ -enum pipe_conservative_raster_mode -{ - PIPE_CONSERVATIVE_RASTER_OFF, - - /** - * The post-snap mode means the conservative rasterization occurs after - * the conversion from floating-point to fixed-point coordinates - * on the subpixel grid. - */ - PIPE_CONSERVATIVE_RASTER_POST_SNAP, - - /** - * The pre-snap mode means the conservative rasterization occurs before - * the conversion from floating-point to fixed-point coordinates. - */ - PIPE_CONSERVATIVE_RASTER_PRE_SNAP, -}; - - -/** - * resource_get_handle flags. - */ -/* Requires pipe_context::flush_resource before external use. */ -#define PIPE_HANDLE_USAGE_EXPLICIT_FLUSH (1 << 0) -/* Expected external use of the resource: */ -#define PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE (1 << 1) -#define PIPE_HANDLE_USAGE_SHADER_WRITE (1 << 2) - -/** - * pipe_image_view access flags. - */ -#define PIPE_IMAGE_ACCESS_READ (1 << 0) -#define PIPE_IMAGE_ACCESS_WRITE (1 << 1) -#define PIPE_IMAGE_ACCESS_READ_WRITE (PIPE_IMAGE_ACCESS_READ | \ - PIPE_IMAGE_ACCESS_WRITE) -#define PIPE_IMAGE_ACCESS_COHERENT (1 << 2) -#define PIPE_IMAGE_ACCESS_VOLATILE (1 << 3) -#define PIPE_IMAGE_ACCESS_TEX2D_FROM_BUFFER (1 << 4) - -/** - * Implementation capabilities/limits which are queried through - * pipe_screen::get_param() - */ -enum pipe_cap -{ - PIPE_CAP_GRAPHICS, - PIPE_CAP_NPOT_TEXTURES, - PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS, - PIPE_CAP_ANISOTROPIC_FILTER, - PIPE_CAP_MAX_RENDER_TARGETS, - PIPE_CAP_OCCLUSION_QUERY, - PIPE_CAP_QUERY_TIME_ELAPSED, - PIPE_CAP_TEXTURE_SHADOW_MAP, - PIPE_CAP_TEXTURE_SWIZZLE, - PIPE_CAP_MAX_TEXTURE_2D_SIZE, - PIPE_CAP_MAX_TEXTURE_3D_LEVELS, - PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS, - PIPE_CAP_TEXTURE_MIRROR_CLAMP, - PIPE_CAP_BLEND_EQUATION_SEPARATE, - PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS, - PIPE_CAP_PRIMITIVE_RESTART, - /** subset of PRIMITIVE_RESTART where the restart index is always the fixed - * maximum value for the index type - */ - PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX, - /** blend enables and write masks per rendertarget */ - PIPE_CAP_INDEP_BLEND_ENABLE, - /** different blend funcs per rendertarget */ - PIPE_CAP_INDEP_BLEND_FUNC, - PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS, - PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT, - PIPE_CAP_FS_COORD_ORIGIN_LOWER_LEFT, - PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER, - PIPE_CAP_FS_COORD_PIXEL_CENTER_INTEGER, - PIPE_CAP_DEPTH_CLIP_DISABLE, - PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE, - PIPE_CAP_DEPTH_CLAMP_ENABLE, - PIPE_CAP_SHADER_STENCIL_EXPORT, - PIPE_CAP_VS_INSTANCEID, - PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, - PIPE_CAP_FRAGMENT_COLOR_CLAMPED, - PIPE_CAP_MIXED_COLORBUFFER_FORMATS, - PIPE_CAP_SEAMLESS_CUBE_MAP, - PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE, - PIPE_CAP_MIN_TEXEL_OFFSET, - PIPE_CAP_MAX_TEXEL_OFFSET, - PIPE_CAP_CONDITIONAL_RENDER, - PIPE_CAP_TEXTURE_BARRIER, - PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS, - PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS, - PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME, - PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS, - PIPE_CAP_VERTEX_COLOR_UNCLAMPED, - PIPE_CAP_VERTEX_COLOR_CLAMPED, - PIPE_CAP_GLSL_FEATURE_LEVEL, - PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY, - PIPE_CAP_ESSL_FEATURE_LEVEL, - PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION, - PIPE_CAP_USER_VERTEX_BUFFERS, - PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY, - PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY, - PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY, - PIPE_CAP_VERTEX_ATTRIB_ELEMENT_ALIGNED_ONLY, - PIPE_CAP_COMPUTE, - PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT, - PIPE_CAP_START_INSTANCE, - PIPE_CAP_QUERY_TIMESTAMP, - PIPE_CAP_TEXTURE_MULTISAMPLE, - PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT, - PIPE_CAP_CUBE_MAP_ARRAY, - PIPE_CAP_TEXTURE_BUFFER_OBJECTS, - PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT, - PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY, - PIPE_CAP_TGSI_TEXCOORD, - PIPE_CAP_LINEAR_IMAGE_PITCH_ALIGNMENT, - PIPE_CAP_LINEAR_IMAGE_BASE_ADDRESS_ALIGNMENT, - PIPE_CAP_TEXTURE_TRANSFER_MODES, - PIPE_CAP_QUERY_PIPELINE_STATISTICS, - PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK, - PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT, - PIPE_CAP_MAX_VIEWPORTS, - PIPE_CAP_ENDIANNESS, - PIPE_CAP_MIXED_FRAMEBUFFER_SIZES, - PIPE_CAP_VS_LAYER_VIEWPORT, - PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES, - PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, - PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS, - PIPE_CAP_TEXTURE_GATHER_SM5, - PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT, - PIPE_CAP_FAKE_SW_MSAA, - PIPE_CAP_TEXTURE_QUERY_LOD, - PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET, - PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET, - PIPE_CAP_SAMPLE_SHADING, - PIPE_CAP_TEXTURE_GATHER_OFFSETS, - PIPE_CAP_VS_WINDOW_SPACE_POSITION, - PIPE_CAP_MAX_VERTEX_STREAMS, - PIPE_CAP_DRAW_INDIRECT, - PIPE_CAP_FS_FINE_DERIVATIVE, - PIPE_CAP_VENDOR_ID, - PIPE_CAP_DEVICE_ID, - PIPE_CAP_ACCELERATED, - PIPE_CAP_VIDEO_MEMORY, - PIPE_CAP_UMA, - PIPE_CAP_CONDITIONAL_RENDER_INVERTED, - PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE, - PIPE_CAP_SAMPLER_VIEW_TARGET, - PIPE_CAP_CLIP_HALFZ, - PIPE_CAP_POLYGON_OFFSET_CLAMP, - PIPE_CAP_MULTISAMPLE_Z_RESOLVE, - PIPE_CAP_RESOURCE_FROM_USER_MEMORY, - PIPE_CAP_RESOURCE_FROM_USER_MEMORY_COMPUTE_ONLY, - PIPE_CAP_DEVICE_RESET_STATUS_QUERY, - PIPE_CAP_MAX_SHADER_PATCH_VARYINGS, - PIPE_CAP_TEXTURE_FLOAT_LINEAR, - PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR, - PIPE_CAP_DEPTH_BOUNDS_TEST, - PIPE_CAP_TEXTURE_QUERY_SAMPLES, - PIPE_CAP_FORCE_PERSAMPLE_INTERP, - PIPE_CAP_SHAREABLE_SHADERS, - PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS, - PIPE_CAP_CLEAR_TEXTURE, - PIPE_CAP_CLEAR_SCISSORED, - PIPE_CAP_DRAW_PARAMETERS, - PIPE_CAP_SHADER_PACK_HALF_FLOAT, - PIPE_CAP_MULTI_DRAW_INDIRECT, - PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS, - PIPE_CAP_MULTI_DRAW_INDIRECT_PARTIAL_STRIDE, - PIPE_CAP_FS_POSITION_IS_SYSVAL, - PIPE_CAP_FS_POINT_IS_SYSVAL, - PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL, - PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT, - PIPE_CAP_INVALIDATE_BUFFER, - PIPE_CAP_GENERATE_MIPMAP, - PIPE_CAP_STRING_MARKER, - PIPE_CAP_SURFACE_REINTERPRET_BLOCKS, - PIPE_CAP_QUERY_BUFFER_OBJECT, - PIPE_CAP_QUERY_MEMORY_INFO, - PIPE_CAP_PCI_GROUP, - PIPE_CAP_PCI_BUS, - PIPE_CAP_PCI_DEVICE, - PIPE_CAP_PCI_FUNCTION, - PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT, - PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR, - PIPE_CAP_CULL_DISTANCE, - PIPE_CAP_CULL_DISTANCE_NOCOMBINE, - PIPE_CAP_SHADER_GROUP_VOTE, - PIPE_CAP_MAX_WINDOW_RECTANGLES, - PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED, - PIPE_CAP_VIEWPORT_SUBPIXEL_BITS, - PIPE_CAP_RASTERIZER_SUBPIXEL_BITS, - PIPE_CAP_MIXED_COLOR_DEPTH_BITS, - PIPE_CAP_SHADER_ARRAY_COMPONENTS, - PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS, - PIPE_CAP_SHADER_CAN_READ_OUTPUTS, - PIPE_CAP_NATIVE_FENCE_FD, - PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS, - PIPE_CAP_FBFETCH, - PIPE_CAP_LEGACY_MATH_RULES, - PIPE_CAP_DOUBLES, - PIPE_CAP_INT64, - PIPE_CAP_INT64_DIVMOD, - PIPE_CAP_TGSI_TEX_TXF_LZ, - PIPE_CAP_SHADER_CLOCK, - PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE, - PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE, - PIPE_CAP_SHADER_BALLOT, - PIPE_CAP_TES_LAYER_VIEWPORT, - PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX, - PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION, - PIPE_CAP_POST_DEPTH_COVERAGE, - PIPE_CAP_BINDLESS_TEXTURE, - PIPE_CAP_NIR_SAMPLERS_AS_DEREF, - PIPE_CAP_QUERY_SO_OVERFLOW, - PIPE_CAP_MEMOBJ, - PIPE_CAP_LOAD_CONSTBUF, - PIPE_CAP_TILE_RASTER_ORDER, - PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, - PIPE_CAP_FRAMEBUFFER_MSAA_CONSTRAINTS, - PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET, - PIPE_CAP_CONTEXT_PRIORITY_MASK, - PIPE_CAP_FENCE_SIGNAL, - PIPE_CAP_CONSTBUF0_FLAGS, - PIPE_CAP_PACKED_UNIFORMS, - PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES, - PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES, - PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES, - PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES, - PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS, - PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE, - PIPE_CAP_CONSERVATIVE_RASTER_INNER_COVERAGE, - PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS, - PIPE_CAP_MAX_GS_INVOCATIONS, - PIPE_CAP_MAX_SHADER_BUFFER_SIZE_UINT, - PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE, - PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS, - PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTERS, - PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS, - PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET, - PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET, - PIPE_CAP_SURFACE_SAMPLE_COUNT, - PIPE_CAP_IMAGE_ATOMIC_FLOAT_ADD, - PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE, - PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND, - PIPE_CAP_DEST_SURFACE_SRGB_CONTROL, - PIPE_CAP_NIR_COMPACT_ARRAYS, - PIPE_CAP_MAX_VARYINGS, - PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK, - PIPE_CAP_COMPUTE_SHADER_DERIVATIVES, - PIPE_CAP_IMAGE_LOAD_FORMATTED, - PIPE_CAP_IMAGE_STORE_FORMATTED, - PIPE_CAP_THROTTLE, - PIPE_CAP_DMABUF, - PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA, - PIPE_CAP_FRAGMENT_SHADER_INTERLOCK, - PIPE_CAP_FBFETCH_COHERENT, - PIPE_CAP_ATOMIC_FLOAT_MINMAX, - PIPE_CAP_TGSI_DIV, - PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD, - PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES, - PIPE_CAP_TEXTURE_SHADOW_LOD, - PIPE_CAP_SHADER_SAMPLES_IDENTICAL, - PIPE_CAP_IMAGE_ATOMIC_INC_WRAP, - PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF, - PIPE_CAP_GL_SPIRV, - PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS, - PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION, - PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE, - PIPE_CAP_FLATSHADE, - PIPE_CAP_ALPHA_TEST, - PIPE_CAP_POINT_SIZE_FIXED, - PIPE_CAP_TWO_SIDED_COLOR, - PIPE_CAP_CLIP_PLANES, - PIPE_CAP_MAX_VERTEX_BUFFERS, - PIPE_CAP_OPENCL_INTEGER_FUNCTIONS, - PIPE_CAP_INTEGER_MULTIPLY_32X16, - /* Turn draw, dispatch, blit into NOOP */ - PIPE_CAP_FRONTEND_NOOP, - PIPE_CAP_NIR_IMAGES_AS_DEREF, - PIPE_CAP_PACKED_STREAM_OUTPUT, - PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED, - PIPE_CAP_PSIZ_CLAMPED, - PIPE_CAP_GL_BEGIN_END_BUFFER_SIZE, - PIPE_CAP_VIEWPORT_SWIZZLE, - PIPE_CAP_SYSTEM_SVM, - PIPE_CAP_VIEWPORT_MASK, - PIPE_CAP_ALPHA_TO_COVERAGE_DITHER_CONTROL, - PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE, - PIPE_CAP_GLSL_ZERO_INIT, - PIPE_CAP_BLEND_EQUATION_ADVANCED, - PIPE_CAP_NIR_ATOMICS_AS_DEREF, - PIPE_CAP_NO_CLIP_ON_COPY_TEX, - PIPE_CAP_MAX_TEXTURE_MB, - PIPE_CAP_SHADER_ATOMIC_INT64, - /** For EGL_EXT_protected_surface */ - PIPE_CAP_DEVICE_PROTECTED_SURFACE, - PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0, - PIPE_CAP_GL_CLAMP, - PIPE_CAP_TEXRECT, - PIPE_CAP_SAMPLER_REDUCTION_MINMAX, - PIPE_CAP_SAMPLER_REDUCTION_MINMAX_ARB, - PIPE_CAP_ALLOW_DYNAMIC_VAO_FASTPATH, - PIPE_CAP_EMULATE_NONFIXED_PRIMITIVE_RESTART, - PIPE_CAP_SUPPORTED_PRIM_MODES, - PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART, - PIPE_CAP_PREFER_BACK_BUFFER_REUSE, - PIPE_CAP_DRAW_VERTEX_STATE, - PIPE_CAP_PREFER_POT_ALIGNED_VARYINGS, - PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE, - PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE, - PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS, - PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS, - PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY, - PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD, - PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER, - PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT, - PIPE_CAP_HARDWARE_GL_SELECT, - PIPE_CAP_DITHERING, - PIPE_CAP_FBFETCH_ZS, - PIPE_CAP_TIMELINE_SEMAPHORE_IMPORT, - PIPE_CAP_QUERY_TIMESTAMP_BITS, - /** For EGL_EXT_protected_content */ - PIPE_CAP_DEVICE_PROTECTED_CONTEXT, - PIPE_CAP_ALLOW_GLTHREAD_BUFFER_SUBDATA_OPT, - PIPE_CAP_NULL_TEXTURES, - PIPE_CAP_ASTC_VOID_EXTENTS_NEED_DENORM_FLUSH, - - PIPE_CAP_VALIDATE_ALL_DIRTY_STATES, - PIPE_CAP_LAST, - /* XXX do not add caps after PIPE_CAP_LAST! */ -}; - -enum pipe_texture_transfer_mode { - PIPE_TEXTURE_TRANSFER_DEFAULT = 0, - PIPE_TEXTURE_TRANSFER_BLIT = (1 << 0), - PIPE_TEXTURE_TRANSFER_COMPUTE = (1 << 1), -}; - -/** - * Possible bits for PIPE_CAP_CONTEXT_PRIORITY_MASK param, which should - * return a bitmask of the supported priorities. If the driver does not - * support prioritized contexts, it can return 0. - * - * Note that these match __EGL_CONTEXT_PRIORITY_*_BIT. - */ -#define PIPE_CONTEXT_PRIORITY_LOW (1 << 0) -#define PIPE_CONTEXT_PRIORITY_MEDIUM (1 << 1) -#define PIPE_CONTEXT_PRIORITY_HIGH (1 << 2) - -enum pipe_quirk_texture_border_color_swizzle { - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 = (1 << 0), - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 = (1 << 1), - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_FREEDRENO = (1 << 2), - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_ALPHA_NOT_W = (1 << 3), -}; - -enum pipe_endian -{ - PIPE_ENDIAN_LITTLE = 0, - PIPE_ENDIAN_BIG = 1, -#if UTIL_ARCH_LITTLE_ENDIAN - PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_LITTLE -#elif UTIL_ARCH_BIG_ENDIAN - PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_BIG -#endif -}; - -/** - * Implementation limits which are queried through - * pipe_screen::get_paramf() - */ -enum pipe_capf -{ - PIPE_CAPF_MIN_LINE_WIDTH, - PIPE_CAPF_MIN_LINE_WIDTH_AA, - PIPE_CAPF_MAX_LINE_WIDTH, - PIPE_CAPF_MAX_LINE_WIDTH_AA, - PIPE_CAPF_LINE_WIDTH_GRANULARITY, - PIPE_CAPF_MIN_POINT_SIZE, - PIPE_CAPF_MIN_POINT_SIZE_AA, - PIPE_CAPF_MAX_POINT_SIZE, - PIPE_CAPF_MAX_POINT_SIZE_AA, - PIPE_CAPF_POINT_SIZE_GRANULARITY, - PIPE_CAPF_MAX_TEXTURE_ANISOTROPY, - PIPE_CAPF_MAX_TEXTURE_LOD_BIAS, - PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE, - PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE, - PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY, -}; - -/** Shader caps not specific to any single stage */ -enum pipe_shader_cap -{ - PIPE_SHADER_CAP_MAX_INSTRUCTIONS, /* if 0, it means the stage is unsupported */ - PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS, - PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS, - PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS, - PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH, - PIPE_SHADER_CAP_MAX_INPUTS, - PIPE_SHADER_CAP_MAX_OUTPUTS, - PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE, - PIPE_SHADER_CAP_MAX_CONST_BUFFERS, - PIPE_SHADER_CAP_MAX_TEMPS, - /* boolean caps */ - PIPE_SHADER_CAP_CONT_SUPPORTED, - PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR, - PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR, - PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR, - PIPE_SHADER_CAP_INDIRECT_CONST_ADDR, - PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */ - PIPE_SHADER_CAP_INTEGERS, - PIPE_SHADER_CAP_INT64_ATOMICS, - PIPE_SHADER_CAP_FP16, - PIPE_SHADER_CAP_FP16_DERIVATIVES, - PIPE_SHADER_CAP_FP16_CONST_BUFFERS, - PIPE_SHADER_CAP_INT16, - PIPE_SHADER_CAP_GLSL_16BIT_CONSTS, - PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS, - PIPE_SHADER_CAP_PREFERRED_IR, - PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED, - PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS, - PIPE_SHADER_CAP_DROUND_SUPPORTED, /* all rounding modes */ - PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE, - PIPE_SHADER_CAP_MAX_SHADER_BUFFERS, - PIPE_SHADER_CAP_SUPPORTED_IRS, - PIPE_SHADER_CAP_MAX_SHADER_IMAGES, - PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS, - PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS, -}; - -/** - * Shader intermediate representation. - * - * Note that if the driver requests something other than TGSI, it must - * always be prepared to receive TGSI in addition to its preferred IR. - * If the driver requests TGSI as its preferred IR, it will *always* - * get TGSI. - * - * Note that PIPE_SHADER_IR_TGSI should be zero for backwards compat with - * gallium frontends that only understand TGSI. - */ -enum pipe_shader_ir -{ - PIPE_SHADER_IR_TGSI = 0, - PIPE_SHADER_IR_NATIVE, - PIPE_SHADER_IR_NIR, - PIPE_SHADER_IR_NIR_SERIALIZED, -}; - -/** - * Compute-specific implementation capability. They can be queried - * using pipe_screen::get_compute_param. - */ -enum pipe_compute_cap -{ - PIPE_COMPUTE_CAP_ADDRESS_BITS, - PIPE_COMPUTE_CAP_IR_TARGET, - PIPE_COMPUTE_CAP_GRID_DIMENSION, - PIPE_COMPUTE_CAP_MAX_GRID_SIZE, - PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, - PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK, - PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE, - PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE, - PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE, - PIPE_COMPUTE_CAP_MAX_INPUT_SIZE, - PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE, - PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY, - PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS, - PIPE_COMPUTE_CAP_IMAGES_SUPPORTED, - PIPE_COMPUTE_CAP_SUBGROUP_SIZE, - PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK, -}; - -/** - * Resource parameters. They can be queried using - * pipe_screen::get_resource_param. - */ -enum pipe_resource_param -{ - PIPE_RESOURCE_PARAM_NPLANES, - PIPE_RESOURCE_PARAM_STRIDE, - PIPE_RESOURCE_PARAM_OFFSET, - PIPE_RESOURCE_PARAM_MODIFIER, - PIPE_RESOURCE_PARAM_HANDLE_TYPE_SHARED, - PIPE_RESOURCE_PARAM_HANDLE_TYPE_KMS, - PIPE_RESOURCE_PARAM_HANDLE_TYPE_FD, - PIPE_RESOURCE_PARAM_LAYER_STRIDE, -}; - -/** - * Types of parameters for pipe_context::set_context_param. - */ -enum pipe_context_param -{ - /* A hint for the driver that it should pin its execution threads to - * a group of cores sharing a specific L3 cache if the CPU has multiple - * L3 caches. This is needed for good multithreading performance on - * AMD Zen CPUs. "value" is the L3 cache index. Drivers that don't have - * any internal threads or don't run on affected CPUs can ignore this. - */ - PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE, -}; - -/** - * Composite query types - */ - -/** - * Query result for PIPE_QUERY_SO_STATISTICS. - */ -struct pipe_query_data_so_statistics -{ - uint64_t num_primitives_written; - uint64_t primitives_storage_needed; -}; - -/** - * Query result for PIPE_QUERY_TIMESTAMP_DISJOINT. - */ -struct pipe_query_data_timestamp_disjoint -{ - uint64_t frequency; - bool disjoint; -}; - -/** - * Query result for PIPE_QUERY_PIPELINE_STATISTICS. - */ -struct pipe_query_data_pipeline_statistics -{ - union { - struct { - uint64_t ia_vertices; /**< Num vertices read by the vertex fetcher. */ - uint64_t ia_primitives; /**< Num primitives read by the vertex fetcher. */ - uint64_t vs_invocations; /**< Num vertex shader invocations. */ - uint64_t gs_invocations; /**< Num geometry shader invocations. */ - uint64_t gs_primitives; /**< Num primitives output by a geometry shader. */ - uint64_t c_invocations; /**< Num primitives sent to the rasterizer. */ - uint64_t c_primitives; /**< Num primitives that were rendered. */ - uint64_t ps_invocations; /**< Num pixel shader invocations. */ - uint64_t hs_invocations; /**< Num hull shader invocations. */ - uint64_t ds_invocations; /**< Num domain shader invocations. */ - uint64_t cs_invocations; /**< Num compute shader invocations. */ - }; - uint64_t counters[11]; - }; -}; - -/** - * For batch queries. - */ -union pipe_numeric_type_union -{ - uint64_t u64; - uint32_t u32; - float f; -}; - -/** - * Query result (returned by pipe_context::get_query_result). - */ -union pipe_query_result -{ - /* PIPE_QUERY_OCCLUSION_PREDICATE */ - /* PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE */ - /* PIPE_QUERY_SO_OVERFLOW_PREDICATE */ - /* PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE */ - /* PIPE_QUERY_GPU_FINISHED */ - bool b; - - /* PIPE_QUERY_OCCLUSION_COUNTER */ - /* PIPE_QUERY_TIMESTAMP */ - /* PIPE_QUERY_TIME_ELAPSED */ - /* PIPE_QUERY_PRIMITIVES_GENERATED */ - /* PIPE_QUERY_PRIMITIVES_EMITTED */ - /* PIPE_DRIVER_QUERY_TYPE_UINT64 */ - /* PIPE_DRIVER_QUERY_TYPE_BYTES */ - /* PIPE_DRIVER_QUERY_TYPE_MICROSECONDS */ - /* PIPE_DRIVER_QUERY_TYPE_HZ */ - uint64_t u64; - - /* PIPE_DRIVER_QUERY_TYPE_UINT */ - uint32_t u32; - - /* PIPE_DRIVER_QUERY_TYPE_FLOAT */ - /* PIPE_DRIVER_QUERY_TYPE_PERCENTAGE */ - float f; - - /* PIPE_QUERY_SO_STATISTICS */ - struct pipe_query_data_so_statistics so_statistics; - - /* PIPE_QUERY_TIMESTAMP_DISJOINT */ - struct pipe_query_data_timestamp_disjoint timestamp_disjoint; - - /* PIPE_QUERY_PIPELINE_STATISTICS */ - struct pipe_query_data_pipeline_statistics pipeline_statistics; - - /* batch queries (variable length) */ - union pipe_numeric_type_union batch[1]; -}; - -enum pipe_query_value_type -{ - PIPE_QUERY_TYPE_I32, - PIPE_QUERY_TYPE_U32, - PIPE_QUERY_TYPE_I64, - PIPE_QUERY_TYPE_U64, -}; - -enum pipe_query_flags -{ - PIPE_QUERY_WAIT = (1 << 0), - PIPE_QUERY_PARTIAL = (1 << 1), -}; - -union pipe_color_union -{ - float f[4]; - int i[4]; - unsigned int ui[4]; -}; - -enum pipe_driver_query_type -{ - PIPE_DRIVER_QUERY_TYPE_UINT64, - PIPE_DRIVER_QUERY_TYPE_UINT, - PIPE_DRIVER_QUERY_TYPE_FLOAT, - PIPE_DRIVER_QUERY_TYPE_PERCENTAGE, - PIPE_DRIVER_QUERY_TYPE_BYTES, - PIPE_DRIVER_QUERY_TYPE_MICROSECONDS, - PIPE_DRIVER_QUERY_TYPE_HZ, - PIPE_DRIVER_QUERY_TYPE_DBM, - PIPE_DRIVER_QUERY_TYPE_TEMPERATURE, - PIPE_DRIVER_QUERY_TYPE_VOLTS, - PIPE_DRIVER_QUERY_TYPE_AMPS, - PIPE_DRIVER_QUERY_TYPE_WATTS, -}; - -/* Whether an average value per frame or a cumulative value should be - * displayed. - */ -enum pipe_driver_query_result_type -{ - PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE, - PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE, -}; - -/** - * Some hardware requires some hardware-specific queries to be submitted - * as batched queries. The corresponding query objects are created using - * create_batch_query, and at most one such query may be active at - * any time. - */ -#define PIPE_DRIVER_QUERY_FLAG_BATCH (1 << 0) - -/* Do not list this query in the HUD. */ -#define PIPE_DRIVER_QUERY_FLAG_DONT_LIST (1 << 1) - -struct pipe_driver_query_info -{ - const char *name; - unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */ - union pipe_numeric_type_union max_value; /* max value that can be returned */ - enum pipe_driver_query_type type; - enum pipe_driver_query_result_type result_type; - unsigned group_id; - unsigned flags; -}; - -struct pipe_driver_query_group_info -{ - const char *name; - unsigned max_active_queries; - unsigned num_queries; -}; - -enum pipe_fd_type -{ - PIPE_FD_TYPE_NATIVE_SYNC, - PIPE_FD_TYPE_SYNCOBJ, - PIPE_FD_TYPE_TIMELINE_SEMAPHORE, -}; - -/** - * counter type and counter data type enums used by INTEL_performance_query - * APIs in gallium drivers. - */ -enum pipe_perf_counter_type -{ - PIPE_PERF_COUNTER_TYPE_EVENT, - PIPE_PERF_COUNTER_TYPE_DURATION_NORM, - PIPE_PERF_COUNTER_TYPE_DURATION_RAW, - PIPE_PERF_COUNTER_TYPE_THROUGHPUT, - PIPE_PERF_COUNTER_TYPE_RAW, - PIPE_PERF_COUNTER_TYPE_TIMESTAMP, -}; - -enum pipe_perf_counter_data_type -{ - PIPE_PERF_COUNTER_DATA_TYPE_BOOL32, - PIPE_PERF_COUNTER_DATA_TYPE_UINT32, - PIPE_PERF_COUNTER_DATA_TYPE_UINT64, - PIPE_PERF_COUNTER_DATA_TYPE_FLOAT, - PIPE_PERF_COUNTER_DATA_TYPE_DOUBLE, -}; - -#define PIPE_UUID_SIZE 16 -#define PIPE_LUID_SIZE 8 - -#if DETECT_OS_UNIX -#define PIPE_MEMORY_FD -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/include/p_state.h b/ltw/src/main/tinywrapper/glsl_optimizer/include/p_state.h deleted file mode 100644 index 15f4256..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/include/p_state.h +++ /dev/null @@ -1,1102 +0,0 @@ -/************************************************************************** - * - * Copyright 2007 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * - * Abstract graphics pipe state objects. - * - * Basic notes: - * 1. Want compact representations, so we use bitfields. - * 2. Put bitfields before other (GLfloat) fields. - * 3. enum bitfields need to be at least one bit extra in size so the most - * significant bit is zero. MSVC treats enums as signed so if the high - * bit is set, the value will be interpreted as a negative number. - * That causes trouble in various places. - */ - - -#ifndef PIPE_STATE_H -#define PIPE_STATE_H - -#include "../src/util/u_memory.h" - -#include "../src/gallium/include/pipe/p_compiler.h" -#include "p_defines.h" -#include "../src/util/format/u_formats.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Implementation limits - */ -#define PIPE_MAX_ATTRIBS 32 -#define PIPE_MAX_CLIP_PLANES 8 -#define PIPE_MAX_COLOR_BUFS 8 -#define PIPE_MAX_CONSTANT_BUFFERS 32 -#define PIPE_MAX_SAMPLERS 32 -#define PIPE_MAX_SHADER_INPUTS 80 /* 32 GENERIC + 32 PATCH + 16 others */ -#define PIPE_MAX_SHADER_OUTPUTS 80 /* 32 GENERIC + 32 PATCH + 16 others */ -#define PIPE_MAX_SHADER_SAMPLER_VIEWS 128 -#define PIPE_MAX_SHADER_BUFFERS 32 -#define PIPE_MAX_SHADER_IMAGES 64 -#define PIPE_MAX_TEXTURE_LEVELS 16 -#define PIPE_MAX_SO_BUFFERS 4 -#define PIPE_MAX_SO_OUTPUTS 64 -#define PIPE_MAX_VIEWPORTS 16 -#define PIPE_MAX_CLIP_OR_CULL_DISTANCE_COUNT 8 -#define PIPE_MAX_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT 2 -#define PIPE_MAX_WINDOW_RECTANGLES 8 -#define PIPE_MAX_SAMPLE_LOCATION_GRID_SIZE 4 - -#define PIPE_MAX_HW_ATOMIC_BUFFERS 32 -#define PIPE_MAX_VERTEX_STREAMS 4 - -struct pipe_reference -{ - int32_t count; /* atomic */ -}; - - - -/** - * Primitive (point/line/tri) rasterization info - */ -struct pipe_rasterizer_state -{ - unsigned flatshade:1; - unsigned light_twoside:1; - unsigned clamp_vertex_color:1; - unsigned clamp_fragment_color:1; - unsigned front_ccw:1; - unsigned cull_face:2; /**< PIPE_FACE_x */ - unsigned fill_front:2; /**< PIPE_POLYGON_MODE_x */ - unsigned fill_back:2; /**< PIPE_POLYGON_MODE_x */ - unsigned offset_point:1; - unsigned offset_line:1; - unsigned offset_tri:1; - unsigned scissor:1; - unsigned poly_smooth:1; - unsigned poly_stipple_enable:1; - unsigned point_smooth:1; - unsigned sprite_coord_mode:1; /**< PIPE_SPRITE_COORD_ */ - unsigned point_quad_rasterization:1; /** points rasterized as quads or points */ - unsigned point_tri_clip:1; /** large points clipped as tris or points */ - unsigned point_size_per_vertex:1; /**< size computed in vertex shader */ - unsigned multisample:1; /* XXX maybe more ms state in future */ - unsigned no_ms_sample_mask_out:1; - unsigned force_persample_interp:1; - unsigned line_smooth:1; - unsigned line_stipple_enable:1; - unsigned line_last_pixel:1; - unsigned line_rectangular:1; /** lines rasterized as rectangles or parallelograms */ - unsigned conservative_raster_mode:2; /**< PIPE_CONSERVATIVE_RASTER_x */ - - /** - * Use the first vertex of a primitive as the provoking vertex for - * flat shading. - */ - unsigned flatshade_first:1; - - unsigned half_pixel_center:1; - unsigned bottom_edge_rule:1; - - /* - * Conservative rasterization subpixel precision bias in bits - */ - unsigned subpixel_precision_x:4; - unsigned subpixel_precision_y:4; - - /** - * When true, rasterization is disabled and no pixels are written. - * This only makes sense with the Stream Out functionality. - */ - unsigned rasterizer_discard:1; - - /** - * Exposed by PIPE_CAP_TILE_RASTER_ORDER. When true, - * tile_raster_order_increasing_* indicate the order that the rasterizer - * should render tiles, to meet the requirements of - * GL_MESA_tile_raster_order. - */ - unsigned tile_raster_order_fixed:1; - unsigned tile_raster_order_increasing_x:1; - unsigned tile_raster_order_increasing_y:1; - - /** - * When false, depth clipping is disabled and the depth value will be - * clamped later at the per-pixel level before depth testing. - * This depends on PIPE_CAP_DEPTH_CLIP_DISABLE. - * - * If PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE is unsupported, depth_clip_near - * is equal to depth_clip_far. - */ - unsigned depth_clip_near:1; - unsigned depth_clip_far:1; - - /** - * When true, depth clamp is enabled. - * If PIPE_CAP_DEPTH_CLAMP_ENABLE is unsupported, this is always the inverse - * of depth_clip_far. - */ - unsigned depth_clamp:1; - - /** - * When true clip space in the z axis goes from [0..1] (D3D). When false - * [-1, 1] (GL). - * - * NOTE: D3D will always use depth clamping. - */ - unsigned clip_halfz:1; - - /** - * When true do not scale offset_units and use same rules for unorm and - * float depth buffers (D3D9). When false use GL/D3D1X behaviour. - * This depends on PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED. - */ - unsigned offset_units_unscaled:1; - - /** - * Depth values output from fragment shader may be outside 0..1. - * These have to be clamped for use with UNORM buffers. - * Vulkan can allow this with an extension, - * GL could with NV_depth_buffer_float, but GLES doesn't. - */ - unsigned unclamped_fragment_depth_values:1; - - /** - * Enable bits for clipping half-spaces. - * This applies to both user clip planes and shader clip distances. - * Note that if the bound shader exports any clip distances, these - * replace all user clip planes, and clip half-spaces enabled here - * but not written by the shader count as disabled. - */ - unsigned clip_plane_enable:PIPE_MAX_CLIP_PLANES; - - unsigned line_stipple_factor:8; /**< [1..256] actually */ - unsigned line_stipple_pattern:16; - - /** - * Replace the given TEXCOORD inputs with point coordinates, max. 8 inputs. - * If TEXCOORD (including PCOORD) are unsupported, replace GENERIC inputs - * instead. Max. 9 inputs: 8x GENERIC to emulate TEXCOORD, and 1x GENERIC - * to emulate PCOORD. - */ - uint16_t sprite_coord_enable; /* 0-7: TEXCOORD/GENERIC, 8: PCOORD */ - - float line_width; - float point_size; /**< used when no per-vertex size */ - float offset_units; - float offset_scale; - float offset_clamp; - float conservative_raster_dilate; -}; - - -struct pipe_poly_stipple -{ - unsigned stipple[32]; -}; - - -struct pipe_viewport_state -{ - float scale[3]; - float translate[3]; - enum pipe_viewport_swizzle swizzle_x:8; - enum pipe_viewport_swizzle swizzle_y:8; - enum pipe_viewport_swizzle swizzle_z:8; - enum pipe_viewport_swizzle swizzle_w:8; -}; - - -struct pipe_scissor_state -{ - unsigned minx:16; - unsigned miny:16; - unsigned maxx:16; - unsigned maxy:16; -}; - - -struct pipe_clip_state -{ - float ucp[PIPE_MAX_CLIP_PLANES][4]; -}; - -/** - * A single output for vertex transform feedback. - */ -struct pipe_stream_output -{ - unsigned register_index:6; /**< 0 to 63 (OUT index) */ - unsigned start_component:2; /** 0 to 3 */ - unsigned num_components:3; /** 1 to 4 */ - unsigned output_buffer:3; /**< 0 to PIPE_MAX_SO_BUFFERS */ - unsigned dst_offset:16; /**< offset into the buffer in dwords */ - unsigned stream:2; /**< 0 to 3 */ -}; - -/** - * Stream output for vertex transform feedback. - */ -struct pipe_stream_output_info -{ - unsigned num_outputs; - /** stride for an entire vertex for each buffer in dwords */ - uint16_t stride[PIPE_MAX_SO_BUFFERS]; - - /** - * Array of stream outputs, in the order they are to be written in. - * Selected components are tightly packed into the output buffer. - */ - struct pipe_stream_output output[PIPE_MAX_SO_OUTPUTS]; -}; - -/** - * The 'type' parameter identifies whether the shader state contains TGSI - * tokens, etc. If the driver returns 'PIPE_SHADER_IR_TGSI' for the - * 'PIPE_SHADER_CAP_PREFERRED_IR' shader param, the ir will *always* be - * 'PIPE_SHADER_IR_TGSI' and the tokens ptr will be valid. If the driver - * requests a different 'pipe_shader_ir' type, then it must check the 'type' - * enum to see if it is getting TGSI tokens or its preferred IR. - * - * TODO pipe_compute_state should probably get similar treatment to handle - * multiple IR's in a cleaner way.. - * - * NOTE: since it is expected that the consumer will want to perform - * additional passes on the nir_shader, the driver takes ownership of - * the nir_shader. If gallium frontends need to hang on to the IR (for - * example, variant management), it should use nir_shader_clone(). - */ -struct pipe_shader_state -{ - enum pipe_shader_ir type; - /* TODO move tokens into union. */ - const struct tgsi_token *tokens; - union { - void *native; - void *nir; - } ir; - struct pipe_stream_output_info stream_output; -}; - -static inline void -pipe_shader_state_from_tgsi(struct pipe_shader_state *state, - const struct tgsi_token *tokens) -{ - state->type = PIPE_SHADER_IR_TGSI; - state->tokens = tokens; - memset(&state->stream_output, 0, sizeof(state->stream_output)); -} - - -struct pipe_stencil_state -{ - unsigned enabled:1; /**< stencil[0]: stencil enabled, stencil[1]: two-side enabled */ - unsigned func:3; /**< PIPE_FUNC_x */ - unsigned fail_op:3; /**< PIPE_STENCIL_OP_x */ - unsigned zpass_op:3; /**< PIPE_STENCIL_OP_x */ - unsigned zfail_op:3; /**< PIPE_STENCIL_OP_x */ - unsigned valuemask:8; - unsigned writemask:8; -}; - - -struct pipe_depth_stencil_alpha_state -{ - struct pipe_stencil_state stencil[2]; /**< [0] = front, [1] = back */ - - unsigned alpha_enabled:1; /**< alpha test enabled? */ - unsigned alpha_func:3; /**< PIPE_FUNC_x */ - - unsigned depth_enabled:1; /**< depth test enabled? */ - unsigned depth_writemask:1; /**< allow depth buffer writes? */ - unsigned depth_func:3; /**< depth test func (PIPE_FUNC_x) */ - unsigned depth_bounds_test:1; /**< depth bounds test enabled? */ - - float alpha_ref_value; /**< reference value */ - double depth_bounds_min; /**< minimum depth bound */ - double depth_bounds_max; /**< maximum depth bound */ -}; - - -struct pipe_rt_blend_state -{ - unsigned blend_enable:1; - - unsigned rgb_func:3; /**< PIPE_BLEND_x */ - unsigned rgb_src_factor:5; /**< PIPE_BLENDFACTOR_x */ - unsigned rgb_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ - - unsigned alpha_func:3; /**< PIPE_BLEND_x */ - unsigned alpha_src_factor:5; /**< PIPE_BLENDFACTOR_x */ - unsigned alpha_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ - - unsigned colormask:4; /**< bitmask of PIPE_MASK_R/G/B/A */ -}; - - -struct pipe_blend_state -{ - unsigned independent_blend_enable:1; - unsigned logicop_enable:1; - unsigned logicop_func:4; /**< PIPE_LOGICOP_x */ - unsigned dither:1; - unsigned alpha_to_coverage:1; - unsigned alpha_to_coverage_dither:1; - unsigned alpha_to_one:1; - unsigned max_rt:3; /* index of max rt, Ie. # of cbufs minus 1 */ - unsigned advanced_blend_func:4; - unsigned blend_coherent:1; - struct pipe_rt_blend_state rt[PIPE_MAX_COLOR_BUFS]; -}; - - -struct pipe_blend_color -{ - float color[4]; -}; - - -struct pipe_stencil_ref -{ - ubyte ref_value[2]; -}; - - -/** - * Note that pipe_surfaces are "texture views for rendering" - * and so in the case of ARB_framebuffer_no_attachment there - * is no pipe_surface state available such that we may - * extract the number of samples and layers. - */ -struct pipe_framebuffer_state -{ - uint16_t width, height; - uint16_t layers; /**< Number of layers in a no-attachment framebuffer */ - ubyte samples; /**< Number of samples in a no-attachment framebuffer */ - - /** multiple color buffers for multiple render targets */ - ubyte nr_cbufs; - struct pipe_surface *cbufs[PIPE_MAX_COLOR_BUFS]; - - struct pipe_surface *zsbuf; /**< Z/stencil buffer */ - - struct pipe_resource *resolve; -}; - - -/** - * Texture sampler state. - */ -struct pipe_sampler_state -{ - unsigned wrap_s:3; /**< PIPE_TEX_WRAP_x */ - unsigned wrap_t:3; /**< PIPE_TEX_WRAP_x */ - unsigned wrap_r:3; /**< PIPE_TEX_WRAP_x */ - unsigned min_img_filter:1; /**< PIPE_TEX_FILTER_x */ - unsigned min_mip_filter:2; /**< PIPE_TEX_MIPFILTER_x */ - unsigned mag_img_filter:1; /**< PIPE_TEX_FILTER_x */ - unsigned compare_mode:1; /**< PIPE_TEX_COMPARE_x */ - unsigned compare_func:3; /**< PIPE_FUNC_x */ - unsigned unnormalized_coords:1; /**< Are coords normalized to [0,1]? */ - unsigned max_anisotropy:5; - unsigned seamless_cube_map:1; - unsigned border_color_is_integer:1; - unsigned reduction_mode:2; /**< PIPE_TEX_REDUCTION_x */ - unsigned pad:5; /**< take bits from this for new members */ - float lod_bias; /**< LOD/lambda bias */ - float min_lod, max_lod; /**< LOD clamp range, after bias */ - union pipe_color_union border_color; - enum pipe_format border_color_format; /**< only with PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_FREEDRENO, must be last */ -}; - -union pipe_surface_desc { - struct { - unsigned level; - unsigned first_layer:16; - unsigned last_layer:16; - } tex; - struct { - unsigned first_element; - unsigned last_element; - } buf; -}; - -/** - * A view into a texture that can be bound to a color render target / - * depth stencil attachment point. - */ -struct pipe_surface -{ - struct pipe_reference reference; - enum pipe_format format:16; - unsigned writable:1; /**< writable shader resource */ - struct pipe_resource *texture; /**< resource into which this is a view */ - struct pipe_context *context; /**< context this surface belongs to */ - - /* XXX width/height should be removed */ - uint16_t width; /**< logical width in pixels */ - uint16_t height; /**< logical height in pixels */ - - /** - * Number of samples for the surface. This will be 0 if rendering - * should use the resource's nr_samples, or another value if the resource - * is bound using FramebufferTexture2DMultisampleEXT. - */ - unsigned nr_samples:8; - - union pipe_surface_desc u; -}; - - -/** - * A view into a texture that can be bound to a shader stage. - */ -struct pipe_sampler_view -{ - /* Put the refcount on its own cache line to prevent "False sharing". */ - EXCLUSIVE_CACHELINE(struct pipe_reference reference); - - enum pipe_format format:14; /**< typed PIPE_FORMAT_x */ - bool is_tex2d_from_buf:1; /**< true if union is tex2d_from_buf */ - enum pipe_texture_target target:5; /**< PIPE_TEXTURE_x */ - unsigned swizzle_r:3; /**< PIPE_SWIZZLE_x for red component */ - unsigned swizzle_g:3; /**< PIPE_SWIZZLE_x for green component */ - unsigned swizzle_b:3; /**< PIPE_SWIZZLE_x for blue component */ - unsigned swizzle_a:3; /**< PIPE_SWIZZLE_x for alpha component */ - struct pipe_resource *texture; /**< texture into which this is a view */ - struct pipe_context *context; /**< context this view belongs to */ - union { - struct { - unsigned first_layer:16; /**< first layer to use for array textures */ - unsigned last_layer:16; /**< last layer to use for array textures */ - unsigned first_level:8; /**< first mipmap level to use */ - unsigned last_level:8; /**< last mipmap level to use */ - } tex; - struct { - unsigned offset; /**< offset in bytes */ - unsigned size; /**< size of the readable sub-range in bytes */ - } buf; - struct { - unsigned offset; /**< offset in pixels */ - uint16_t row_stride; /**< size of the image row_stride in pixels */ - uint16_t width; /**< width of image provided by application */ - uint16_t height; /**< height of image provided by application */ - } tex2d_from_buf; /**< used in cl extension cl_khr_image2d_from_buffer */ - } u; -}; - - -/** - * A description of a buffer or texture image that can be bound to a shader - * stage. - * - * Note that pipe_image_view::access comes from the frontend API, while - * shader_access comes from the shader and may contain additional information - * (ie. coherent/volatile may be set on shader_access but not on access) - */ -struct pipe_image_view -{ - struct pipe_resource *resource; /**< resource into which this is a view */ - enum pipe_format format; /**< typed PIPE_FORMAT_x */ - uint16_t access; /**< PIPE_IMAGE_ACCESS_x */ - uint16_t shader_access; /**< PIPE_IMAGE_ACCESS_x */ - union { - struct { - unsigned first_layer:16; /**< first layer to use for array textures */ - unsigned last_layer:16; /**< last layer to use for array textures */ - unsigned level:8; /**< mipmap level to use */ - } tex; - struct { - unsigned offset; /**< offset in bytes */ - unsigned size; /**< size of the accessible sub-range in bytes */ - } buf; - struct { - unsigned offset; /**< offset in pixels */ - uint16_t row_stride; /**< size of the image row_stride in pixels */ - uint16_t width; /**< width of image provided by application */ - uint16_t height; /**< height of image provided by application */ - } tex2d_from_buf; /**< used in cl extension cl_khr_image2d_from_buffer */ - } u; -}; - - -/** - * Subregion of 1D/2D/3D image resource. - */ -struct pipe_box -{ - /* Fields only used by textures use int16_t instead of int. - * x and width are used by buffers, so they need the full 32-bit range. - */ - int x; - int16_t y; - int16_t z; - int width; - int16_t height; - int16_t depth; -}; - - -/** - * A memory object/resource such as a vertex buffer or texture. - */ -struct pipe_resource -{ - /* Put the refcount on its own cache line to prevent "False sharing". */ - EXCLUSIVE_CACHELINE(struct pipe_reference reference); - - unsigned width0; /**< Used by both buffers and textures. */ - uint16_t height0; /* Textures: The maximum height/depth/array_size is 16k. */ - uint16_t depth0; - uint16_t array_size; - - enum pipe_format format:16; /**< PIPE_FORMAT_x */ - enum pipe_texture_target target:8; /**< PIPE_TEXTURE_x */ - unsigned last_level:8; /**< Index of last mipmap level present/defined */ - - /** Number of samples determining quality, driving rasterizer, shading, - * and framebuffer. - */ - unsigned nr_samples:8; - - /** Multiple samples within a pixel can have the same value. - * nr_storage_samples determines how many slots for different values - * there are per pixel. Only color buffers can set this lower than - * nr_samples. - */ - unsigned nr_storage_samples:8; - - unsigned nr_sparse_levels:8; /**< Mipmap levels support partial resident */ - - unsigned usage:8; /**< PIPE_USAGE_x (not a bitmask) */ - unsigned bind; /**< bitmask of PIPE_BIND_x */ - unsigned flags; /**< bitmask of PIPE_RESOURCE_FLAG_x */ - - /** - * For planar images, ie. YUV EGLImage external, etc, pointer to the - * next plane. - */ - struct pipe_resource *next; - /* The screen pointer should be last for optimal structure packing. */ - struct pipe_screen *screen; /**< screen that this texture belongs to */ -}; - -/** - * Opaque object used for separate resource/memory allocations. - */ -struct pipe_memory_allocation; - -/** - * Transfer object. For data transfer to/from a resource. - */ -struct pipe_transfer -{ - struct pipe_resource *resource; /**< resource to transfer to/from */ - enum pipe_map_flags usage:24; - unsigned level:8; /**< texture mipmap level */ - struct pipe_box box; /**< region of the resource to access */ - unsigned stride; /**< row stride in bytes */ - unsigned layer_stride; /**< image/layer stride in bytes */ - - /* Offset into a driver-internal staging buffer to make use of unused - * padding in this structure. - */ - unsigned offset; -}; - - -/** - * A vertex buffer. Typically, all the vertex data/attributes for - * drawing something will be in one buffer. But it's also possible, for - * example, to put colors in one buffer and texcoords in another. - */ -struct pipe_vertex_buffer -{ - uint16_t stride; /**< stride to same attrib in next vertex, in bytes */ - bool is_user_buffer; - unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ - - union { - struct pipe_resource *resource; /**< the actual buffer */ - const void *user; /**< pointer to a user buffer */ - } buffer; -}; - - -/** - * A constant buffer. A subrange of an existing buffer can be set - * as a constant buffer. - */ -struct pipe_constant_buffer -{ - struct pipe_resource *buffer; /**< the actual buffer */ - unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ - unsigned buffer_size; /**< how much data can be read in shader */ - const void *user_buffer; /**< pointer to a user buffer if buffer == NULL */ -}; - - -/** - * An untyped shader buffer supporting loads, stores, and atomics. - */ -struct pipe_shader_buffer { - struct pipe_resource *buffer; /**< the actual buffer */ - unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ - unsigned buffer_size; /**< how much data can be read in shader */ -}; - - -/** - * A stream output target. The structure specifies the range vertices can - * be written to. - * - * In addition to that, the structure should internally maintain the offset - * into the buffer, which should be incremented everytime something is written - * (appended) to it. The internal offset is buffer_offset + how many bytes - * have been written. The internal offset can be stored on the device - * and the CPU actually doesn't have to query it. - * - * Note that the buffer_size variable is actually specifying the available - * space in the buffer, not the size of the attached buffer. - * In other words in majority of cases buffer_size would simply be - * 'buffer->width0 - buffer_offset', so buffer_size refers to the size - * of the buffer left, after accounting for buffer offset, for stream output - * to write to. - * - * Use PIPE_QUERY_SO_STATISTICS to know how many primitives have - * actually been written. - */ -struct pipe_stream_output_target -{ - struct pipe_reference reference; - struct pipe_resource *buffer; /**< the output buffer */ - struct pipe_context *context; /**< context this SO target belongs to */ - - unsigned buffer_offset; /**< offset where data should be written, in bytes */ - unsigned buffer_size; /**< how much data is allowed to be written */ -}; - - -/** - * Information to describe a vertex attribute (position, color, etc) - */ -struct pipe_vertex_element -{ - /** Offset of this attribute, in bytes, from the start of the vertex */ - uint16_t src_offset; - - /** Which vertex_buffer (as given to pipe->set_vertex_buffer()) does - * this attribute live in? - */ - uint8_t vertex_buffer_index:7; - - /** - * Whether this element refers to a dual-slot vertex shader input. - * The purpose of this field is to do dual-slot lowering when the CSO is - * created instead of during every state change. - * - * It's lowered by util_lower_uint64_vertex_elements. - */ - bool dual_slot:1; - - /** - * This has only 8 bits because all vertex formats should be <= 255. - */ - uint8_t src_format; /* low 8 bits of enum pipe_format. */ - - /** Instance data rate divisor. 0 means this is per-vertex data, - * n means per-instance data used for n consecutive instances (n > 0). - */ - unsigned instance_divisor; -}; - -/** - * Opaque refcounted constant state object encapsulating a vertex buffer, - * index buffer, and vertex elements. Used by display lists to bind those - * states and pass buffer references quickly. - * - * The state contains 1 index buffer, 0 or 1 vertex buffer, and 0 or more - * vertex elements. - * - * Constraints on the buffers to get the fastest codepath: - * - All buffer contents are considered immutable and read-only after - * initialization. This implies the following things. - * - No place is required to track whether these buffers are busy. - * - All CPU mappings of these buffers can be forced to UNSYNCHRONIZED by - * both drivers and common code unconditionally. - * - Buffer invalidation can be skipped by both drivers and common code - * unconditionally. - */ -struct pipe_vertex_state { - struct pipe_reference reference; - struct pipe_screen *screen; - - /* The following structure is used as a key for util_vertex_state_cache - * to deduplicate identical state objects and thus enable more - * opportunities for draw merging. - */ - struct { - struct pipe_resource *indexbuf; - struct pipe_vertex_buffer vbuffer; - unsigned num_elements; - struct pipe_vertex_element elements[PIPE_MAX_ATTRIBS]; - uint32_t full_velem_mask; - } input; -}; - -struct pipe_draw_indirect_info -{ - unsigned offset; /**< must be 4 byte aligned */ - unsigned stride; /**< must be 4 byte aligned */ - unsigned draw_count; /**< number of indirect draws */ - unsigned indirect_draw_count_offset; /**< must be 4 byte aligned */ - - /* Indirect draw parameters resource is laid out as follows: - * - * if using indexed drawing: - * struct { - * uint32_t count; - * uint32_t instance_count; - * uint32_t start; - * int32_t index_bias; - * uint32_t start_instance; - * }; - * otherwise: - * struct { - * uint32_t count; - * uint32_t instance_count; - * uint32_t start; - * uint32_t start_instance; - * }; - * - * If NULL, count_from_stream_output != NULL. - */ - struct pipe_resource *buffer; - - /* Indirect draw count resource: If not NULL, contains a 32-bit value which - * is to be used as the real draw_count. - */ - struct pipe_resource *indirect_draw_count; - - /** - * Stream output target. If not NULL, it's used to provide the 'count' - * parameter based on the number vertices captured by the stream output - * stage. (or generally, based on the number of bytes captured) - * - * Only 'mode', 'start_instance', and 'instance_count' are taken into - * account, all the other variables from pipe_draw_info are ignored. - * - * 'start' is implicitly 0 and 'count' is set as discussed above. - * The draw command is non-indexed. - * - * Note that this only provides the count. The vertex buffers must - * be set via set_vertex_buffers manually. - */ - struct pipe_stream_output_target *count_from_stream_output; -}; - -struct pipe_draw_start_count_bias { - unsigned start; - unsigned count; - int index_bias; /**< a bias to be added to each index */ -}; - -/** - * Draw vertex state description. It's translated to pipe_draw_info as follows: - * - mode comes from this structure - * - index_size is 4 - * - instance_count is 1 - * - index.resource comes from pipe_vertex_state - * - everything else is 0 - */ -struct pipe_draw_vertex_state_info { -#if defined(__GNUC__) - /* sizeof(mode) == 1 because it's a packed enum. */ - enum pipe_prim_type mode; /**< the mode of the primitive */ -#else - /* sizeof(mode) == 1 is required by draw merging in u_threaded_context. */ - uint8_t mode; /**< the mode of the primitive */ -#endif - bool take_vertex_state_ownership; /**< for skipping reference counting */ -}; - -/** - * Information to describe a draw_vbo call. - */ -struct pipe_draw_info -{ -#if defined(__GNUC__) - /* sizeof(mode) == 1 because it's a packed enum. */ - enum pipe_prim_type mode; /**< the mode of the primitive */ -#else - /* sizeof(mode) == 1 is required by draw merging in u_threaded_context. */ - uint8_t mode; /**< the mode of the primitive */ -#endif - uint8_t index_size; /**< if 0, the draw is not indexed. */ - uint8_t view_mask; /**< mask of multiviews for this draw */ - bool primitive_restart:1; - bool has_user_indices:1; /**< if true, use index.user_buffer */ - bool index_bounds_valid:1; /**< whether min_index and max_index are valid; - they're always invalid if index_size == 0 */ - bool increment_draw_id:1; /**< whether drawid increments for direct draws */ - bool take_index_buffer_ownership:1; /**< callee inherits caller's refcount - (no need to reference indexbuf, but still needs to unreference it) */ - bool index_bias_varies:1; /**< true if index_bias varies between draws */ - bool was_line_loop:1; /**< true if pipe_prim_type was LINE_LOOP before translation */ - uint8_t _pad:1; - - unsigned start_instance; /**< first instance id */ - unsigned instance_count; /**< number of instances */ - - /** - * Primitive restart enable/index (only applies to indexed drawing) - */ - unsigned restart_index; - - /* Pointers must be placed appropriately for optimal structure packing on - * 64-bit CPUs. - */ - - /** - * An index buffer. When an index buffer is bound, all indices to vertices - * will be looked up from the buffer. - * - * If has_user_indices, use index.user, else use index.resource. - */ - union { - struct pipe_resource *resource; /**< real buffer */ - const void *user; /**< pointer to a user buffer */ - } index; - - /* These must be last for better packing in u_threaded_context. */ - unsigned min_index; /**< the min index */ - unsigned max_index; /**< the max index */ -}; - - -/** - * Information to describe a blit call. - */ -struct pipe_blit_info -{ - struct { - struct pipe_resource *resource; - unsigned level; - struct pipe_box box; /**< negative width, height only legal for src */ - /* For pipe_surface-like format casting: */ - enum pipe_format format; /**< must be supported for sampling (src) - or rendering (dst), ZS is always supported */ - } dst, src; - - unsigned mask; /**< bitmask of PIPE_MASK_R/G/B/A/Z/S */ - unsigned filter; /**< PIPE_TEX_FILTER_* */ - uint8_t dst_sample; /**< if non-zero, set sample_mask to (1 << (dst_sample - 1)) */ - bool sample0_only; - bool scissor_enable; - struct pipe_scissor_state scissor; - - /* Window rectangles can either be inclusive or exclusive. */ - bool window_rectangle_include; - unsigned num_window_rectangles; - struct pipe_scissor_state window_rectangles[PIPE_MAX_WINDOW_RECTANGLES]; - - bool render_condition_enable; /**< whether the blit should honor the - current render condition */ - bool alpha_blend; /* dst.rgb = src.rgb * src.a + dst.rgb * (1 - src.a) */ -}; - -/** - * Information to describe a launch_grid call. - */ -struct pipe_grid_info -{ - /** - * For drivers that use PIPE_SHADER_IR_NATIVE as their prefered IR, this - * value will be the index of the kernel in the opencl.kernels metadata - * list. - */ - uint32_t pc; - - /** - * Will be used to initialize the INPUT resource, and it should point to a - * buffer of at least pipe_compute_state::req_input_mem bytes. - */ - const void *input; - - /** - * Variable shared memory used by this invocation. - * - * This comes on top of shader declared shared memory. - */ - uint32_t variable_shared_mem; - - /** - * Grid number of dimensions, 1-3, e.g. the work_dim parameter passed to - * clEnqueueNDRangeKernel. Note block[] and grid[] must be padded with - * 1 for non-used dimensions. - */ - uint work_dim; - - /** - * Determine the layout of the working block (in thread units) to be used. - */ - uint block[3]; - - /** - * last_block allows disabling threads at the farthermost grid boundary. - * Full blocks as specified by "block" are launched, but the threads - * outside of "last_block" dimensions are disabled. - * - * If a block touches the grid boundary in the i-th axis, threads with - * THREAD_ID[i] >= last_block[i] are disabled. - * - * If last_block[i] is 0, it has the same behavior as last_block[i] = block[i], - * meaning no effect. - * - * It's equivalent to doing this at the beginning of the compute shader: - * - * for (i = 0; i < 3; i++) { - * if (block_id[i] == grid[i] - 1 && - * last_block[i] && thread_id[i] >= last_block[i]) - * return; - * } - */ - uint last_block[3]; - - /** - * Determine the layout of the grid (in block units) to be used. - */ - uint grid[3]; - - /** - * Base offsets to launch grids from - */ - uint grid_base[3]; - - /* Indirect compute parameters resource: If not NULL, block sizes are taken - * from this buffer instead, which is laid out as follows: - * - * struct { - * uint32_t num_blocks_x; - * uint32_t num_blocks_y; - * uint32_t num_blocks_z; - * }; - */ - struct pipe_resource *indirect; - unsigned indirect_offset; /**< must be 4 byte aligned */ -}; - -/** - * Structure used as a header for serialized compute programs. - */ -struct pipe_binary_program_header -{ - uint32_t num_bytes; /**< Number of bytes in the LLVM bytecode program. */ - char blob[]; -}; - -struct pipe_compute_state -{ - enum pipe_shader_ir ir_type; /**< IR type contained in prog. */ - const void *prog; /**< Compute program to be executed. */ - unsigned static_shared_mem; /**< equal to info.shared_size, used for shaders passed as TGSI */ - unsigned req_input_mem; /**< Required size of the INPUT resource. */ -}; - -struct pipe_compute_state_object_info -{ - /** - * Max number of threads per block supported for the given cso. - */ - unsigned max_threads; - - /** - * Which multiple should the block size be of for best performance. - * - * E.g. for 8 a block with n * 8 threads would result in optimal utilization - * of the hardware. - */ - unsigned preferred_simd_size; - - /** - * How much private memory does this CSO require per thread (a.k.a. NIR scratch memory). - */ - unsigned private_memory; -}; - -/** - * Structure that contains a callback for device reset messages from the driver - * back to the gallium frontend. - * - * The callback must not be called from driver-created threads. - */ -struct pipe_device_reset_callback -{ - /** - * Callback for the driver to report when a device reset is detected. - * - * \param data user-supplied data pointer - * \param status PIPE_*_RESET - */ - void (*reset)(void *data, enum pipe_reset_status status); - - void *data; -}; - -/** - * Information about memory usage. All sizes are in kilobytes. - */ -struct pipe_memory_info -{ - unsigned total_device_memory; /**< size of device memory, e.g. VRAM */ - unsigned avail_device_memory; /**< free device memory at the moment */ - unsigned total_staging_memory; /**< size of staging memory, e.g. GART */ - unsigned avail_staging_memory; /**< free staging memory at the moment */ - unsigned device_memory_evicted; /**< size of memory evicted (monotonic counter) */ - unsigned nr_device_memory_evictions; /**< # of evictions (monotonic counter) */ -}; - -/** - * Structure that contains information about external memory - */ -struct pipe_memory_object -{ - bool dedicated; -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/jni/Application.mk b/ltw/src/main/tinywrapper/glsl_optimizer/jni/Application.mk deleted file mode 100644 index 067c76f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/jni/Application.mk +++ /dev/null @@ -1 +0,0 @@ -APP_STL := c++_static \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/GlslConvert.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/GlslConvert.cpp deleted file mode 100644 index bdf7e39..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/GlslConvert.cpp +++ /dev/null @@ -1,671 +0,0 @@ -/* - * Copyright 2020 Stephane Cuillerdier (aka Aiekick) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include "GlslConvert.h" - -#include -#include - -#include "../compiler/glsl/ast.h" -#include "../compiler/glsl/ir_optimization.h" -#include "../mesa/program/program.h" -#include "../compiler/glsl/program.h" -#include "../compiler/glsl/ir_reader.h" -#include "../compiler/glsl/standalone_scaffolding.h" -#include "../mesa/main/mtypes.h" -#include "../mesa/main/menums.h" -#include "../compiler/glsl/builtin_functions.h" -//#include "../compiler/glsl/loop_analysis.h" - - //#include "ir_print_ir_visitor.h" -#include "ir_print_glsl_visitor.h" -//#include "../compiler/glsl/ir_builder_print_visitor.h" - -#include "../compiler/glsl/string_to_uint_map.h" -#include "../compiler/glsl/linker.h" - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -GlslConvert::GlslConvert() -{ - -} - -GlslConvert::~GlslConvert() -{ - -} - - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -char * GlslConvert::Optimize( - const char * vShaderSource, - ShaderStage vShaderType, - ApiTarget vTarget, - LanguageTarget vLanguageTarget, - int vGLSLVersion, - int vTargetGLSLVersion, - bool isESShader, - OptimizationStruct vOptimizationStruct) -{ - this->failed = false; - char * optimized_shader = NULL; - - struct gl_shader* shader = rzalloc(NULL, struct gl_shader); - shader->Stage = (gl_shader_stage)vShaderType; - switch (shader->Stage) { - case gl_shader_stage::MESA_SHADER_VERTEX: - shader->Type = GL_VERTEX_SHADER; - break; - case gl_shader_stage::MESA_SHADER_FRAGMENT: - shader->Type = GL_FRAGMENT_SHADER; - break; - case gl_shader_stage::MESA_SHADER_TESS_CTRL: - shader->Type = GL_TESS_CONTROL_SHADER; - break; - case gl_shader_stage::MESA_SHADER_TESS_EVAL: - shader->Type = GL_TESS_EVALUATION_SHADER; - break; - case gl_shader_stage::MESA_SHADER_GEOMETRY: - shader->Type = GL_GEOMETRY_SHADER; - break; - case gl_shader_stage::MESA_SHADER_KERNEL: - // todo : opencl kernel target to generate after the others - //shader->Type = GL_KERNEL_SHADER; - break; - default: - break; - } - - vOptimizationStruct.stage = vShaderType; - - struct gl_context local_ctx; - struct gl_context* ctx = &local_ctx; - InitContext(ctx, vTarget, vGLSLVersion); - - gl_shader_compiler_options compileOptions = - ctx->Const.ShaderCompilerOptions[(int)shader->Stage]; - FillCompilerOptions(&compileOptions, &vOptimizationStruct); - - ctx->Const.AllowGLSLExtensionDirectiveMidShader = true; - - ir_variable::temporaries_allocate_names = true; - - struct _mesa_glsl_parse_state* state - = new(shader) _mesa_glsl_parse_state(ctx, shader->Stage, shader); - - struct gl_shader_program* program = 0; - - // si le format d'entrée est un ir - //shader->ir = new(shader) exec_list; - //_mesa_glsl_initialize_types(state); - //_mesa_glsl_read_ir(state, shader->ir, input.c_str(), true); - - shader->Source = vShaderSource; - const char* source = shader->Source; - - if (!(vOptimizationStruct.controlFlags & ControlFlags::CONTROL_SKIP_PREPROCESSING)) - { - state->error = glcpp_preprocess(state, &source, &state->info_log, add_builtin_defines, state, ctx) != 0; - } - - if (!state->error) - { - _mesa_glsl_lexer_ctor(state, source); - _mesa_glsl_parse(state); - _mesa_glsl_lexer_dtor(state); - - if (vLanguageTarget == LanguageTarget::LANGUAGE_TARGET_AST) - { - //https://stackoverflow.com/questions/7664788/freopen-stdout-and-console - /* Print out the initial AST */ - FILE* fp = freopen("tmp_ast", "w", stdout); - if (fp) - { - foreach_list_typed(ast_node, ast, link, &state->translation_unit) - { - ast->print(); - } - fclose(fp); - } - - freopen("CON", "w", stdout); - printf("Ast Export => SUCCESS\n"); - - fp = fopen("tmp_ast", "r"); - if (fp) - { -#define MAX_LENGTH 1024 - char* buffer = new char[MAX_LENGTH]; - while (!feof(fp)) - { - fgets(buffer, MAX_LENGTH, fp); - if (ferror(fp)) - { - break; - } - else - { - //res += buffer; - //TODO STUB - } - } - - delete[] buffer; - fclose(fp); - } - } - else - { - exec_list* ir = new (shader) exec_list(); - shader->ir = ir; - - if (!state->translation_unit.is_empty()) - _mesa_ast_to_hir(ir, state); - - if (!state->error) - { - // Link built-in functions - shader->symbols = state->symbols; - - program = GetProgramFromShader(ctx, shader); - - if (program) - { - bool linked = false; - - if (!ir->is_empty() && !(vOptimizationStruct.controlFlags & ControlFlags::CONTROL_DO_PARTIAL_SHADER)) - { - const gl_shader_stage stage = program->Shaders[0]->Stage; - - bool _allowMissingMain = true; - program->data->LinkStatus = LINKING_SUCCESS; - program->_LinkedShaders[stage] = - link_intrastage_shaders( - program /* mem_ctx */, - ctx, - program, - program->Shaders, - program->NumShaders, - _allowMissingMain); - - if (program->_LinkedShaders[stage]) - { - linked = true; - - struct gl_shader_compiler_options* const compiler_options = - &ctx->Const.ShaderCompilerOptions[stage]; - - ir = program->_LinkedShaders[stage]->ir; - } - else - { - linked = false; - - log = program->data->InfoLog; - failed = true; - } - } - - // Do optimization post-link - apply_optimizations(ir, linked, &compileOptions); - - - validate_ir_tree(ir); - - /*if (vLanguageTarget == LanguageTarget::LANGUAGE_TARGET_IR_BUILDER) - { - const gl_shader_stage stage = program->Shaders[0]->Stage; - FILE *fp = freopen("tmp_builder", "w", stdout); - if (fp) - { - _mesa_print_builder_for_ir(stdout, ir); - fclose(fp); - } - freopen("CON", "w", stdout); - fp = fopen("tmp_builder", "r"); - if (fp) - { -#define MAX_LENGTH 1024 - char *buffer = new char[MAX_LENGTH]; - while (!feof(fp)) - { - fgets(buffer, MAX_LENGTH, fp); - if (ferror(fp)) break; - else res += buffer; - } - delete[] buffer; - fclose(fp); - } - }*/ - } - - if (vLanguageTarget == LanguageTarget::LANGUAGE_TARGET_IR) - { - /* Print out the initial IR */ - //res = IR_TO_IR::Convert(ir, state); - } - else if (vLanguageTarget == LanguageTarget::LANGUAGE_TARGET_GLSL) - { - /* Print out the initial GLSL */ - state->es_shader = isESShader; - state->language_version = vTargetGLSLVersion; - state->original_language_version = vGLSLVersion; - optimized_shader = IR_TO_GLSL::Convert(ir, state); - } - /*else if (vLanguageTarget == LanguageTarget::LANGUAGE_TARGET_HLSL) - { - - } - else if (vLanguageTarget == LanguageTarget::LANGUAGE_TARGET_METAL) - { - - }*/ - } - else - { - log = state->info_log; - failed = true; - } - } - - } - else - { - log = state->info_log; - failed = true; - } - - // free - if (program) - { - _mesa_clear_shader_program_data(ctx, program); - ralloc_free(program); - } - ralloc_free(state); - ralloc_free(shader); - - ClearContext(ctx); - - return optimized_shader; -} - -void GlslConvert::apply_optimizations( - struct exec_list *vIr, - bool linked, - gl_shader_compiler_options* vCompilerFlags -) { - unsigned int passes = 0; - while (passes < 1){ - passes ++; - do_common_optimization(vIr, linked, vCompilerFlags, true); - do_mat_op_to_vec(vIr); - do_vec_index_to_cond_assign(vIr); - lower_discard(vIr); - lower_discard_flow(vIr); - lower_instructions(vIr, false, false); - } -} - - -static void init_gl_program(struct gl_program* prog, bool is_arb_asm, gl_shader_stage target) -{ - prog->RefCount = 1; - prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB; - //prog->is_arb_asm = is_arb_asm; - prog->info.stage = target; -} - -static struct gl_program* new_program(UNUSED struct gl_context* ctx, gl_shader_stage target, - UNUSED GLuint id, bool is_arb_asm) -{ - struct gl_program* prog = rzalloc(NULL, struct gl_program); - init_gl_program(prog, is_arb_asm, target); - return prog; -} - -void GlslConvert::InitContext(struct gl_context* ctx, ApiTarget api, int vGlslVersion) -{ - gl_api glApi; - if (vGlslVersion == 100 || vGlslVersion == 300) - glApi = gl_api::API_OPENGLES2; - else if (api == ApiTarget::API_OPENGL_COMPAT) - glApi = gl_api::API_OPENGL_COMPAT; - else if (api == ApiTarget::API_OPENGL_CORE) - glApi = gl_api::API_OPENGL_CORE; - - initialize_context_to_defaults(ctx, glApi); - - _mesa_glsl_builtin_functions_init_or_ref(); - - /* The standalone compiler needs to claim support for almost - * everything in order to compile the built-in functions. - */ - ctx->Const.GLSLVersion = vGlslVersion; - - ctx->Extensions.ARB_ES3_compatibility = true; - ctx->Extensions.ARB_ES3_1_compatibility = true; - ctx->Extensions.ARB_ES3_2_compatibility = true; - - ctx->Const.MaxComputeWorkGroupCount[0] = 65535; - ctx->Const.MaxComputeWorkGroupCount[1] = 65535; - ctx->Const.MaxComputeWorkGroupCount[2] = 65535; - ctx->Const.MaxComputeWorkGroupSize[0] = 1024; - ctx->Const.MaxComputeWorkGroupSize[1] = 1024; - ctx->Const.MaxComputeWorkGroupSize[2] = 64; - ctx->Const.MaxComputeWorkGroupInvocations = 1024; - ctx->Const.MaxComputeSharedMemorySize = 32768; - ctx->Const.MaxComputeVariableGroupSize[0] = 512; - ctx->Const.MaxComputeVariableGroupSize[1] = 512; - ctx->Const.MaxComputeVariableGroupSize[2] = 64; - ctx->Const.MaxComputeVariableGroupInvocations = 512; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxOutputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicBuffers = 8; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicCounters = 8; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxImageUniforms = 8; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformBlocks = 64; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformBlocks = 64; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformBlocks = 64; - - switch (ctx->Const.GLSLVersion) { - case 100: - ctx->Const.MaxClipPlanes = 0; - ctx->Const.MaxCombinedTextureImageUnits = 8; - ctx->Const.MaxDrawBuffers = 2; - ctx->Const.MinProgramTexelOffset = 0; - ctx->Const.MaxProgramTexelOffset = 0; - ctx->Const.MaxLights = 0; - ctx->Const.MaxTextureCoordUnits = 0; - ctx->Const.MaxTextureUnits = 8; - - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 8; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 0; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 128 * 4; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxCombinedUniformComponents = 128 * 4; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 32; - - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = - ctx->Const.MaxCombinedTextureImageUnits; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 16 * 4; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxCombinedUniformComponents = 16 * 4; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxOutputComponents = 0; /* not used */ - - ctx->Const.MaxVarying = ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents / 4; - break; - case 110: - case 120: - ctx->Const.MaxClipPlanes = 6; - ctx->Const.MaxCombinedTextureImageUnits = 2; - ctx->Const.MaxDrawBuffers = 8; - ctx->Const.MinProgramTexelOffset = 0; - ctx->Const.MaxProgramTexelOffset = 0; - ctx->Const.MaxLights = 8; - ctx->Const.MaxTextureCoordUnits = 2; - ctx->Const.MaxTextureUnits = 2; - - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 0; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 512; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxCombinedUniformComponents = 512; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 32; - - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = - ctx->Const.MaxCombinedTextureImageUnits; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 64; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxCombinedUniformComponents = 64; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxOutputComponents = 0; /* not used */ - - ctx->Const.MaxVarying = ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents / 4; - break; - case 130: - case 140: - ctx->Const.MaxClipPlanes = 8; - ctx->Const.MaxCombinedTextureImageUnits = 16; - ctx->Const.MaxDrawBuffers = 8; - ctx->Const.MinProgramTexelOffset = -8; - ctx->Const.MaxProgramTexelOffset = 7; - ctx->Const.MaxLights = 8; - ctx->Const.MaxTextureCoordUnits = 8; - ctx->Const.MaxTextureUnits = 2; - ctx->Const.MaxUniformBufferBindings = 84; - ctx->Const.MaxVertexStreams = 4; - ctx->Const.MaxTransformFeedbackBuffers = 4; - - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 64; - - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxOutputComponents = 0; /* not used */ - - ctx->Const.MaxVarying = ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents / 4; - break; - case 150: - case 330: - case 400: - case 410: - case 420: - case 430: - case 440: - case 450: - case 460: - ctx->Const.MaxClipPlanes = 8; - ctx->Const.MaxDrawBuffers = 8; - ctx->Const.MinProgramTexelOffset = -8; - ctx->Const.MaxProgramTexelOffset = 7; - ctx->Const.MaxLights = 8; - ctx->Const.MaxTextureCoordUnits = 8; - ctx->Const.MaxTextureUnits = 2; - ctx->Const.MaxUniformBufferBindings = 84; - ctx->Const.MaxVertexStreams = 4; - ctx->Const.MaxTransformFeedbackBuffers = 4; - ctx->Const.MaxShaderStorageBufferBindings = 4; - ctx->Const.MaxShaderStorageBlockSize = 4096; - ctx->Const.MaxAtomicBufferBindings = 4; - - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 64; - - ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxInputComponents = - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents; - ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxOutputComponents = 128; - - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = - ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxOutputComponents; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxOutputComponents = 0; /* not used */ - - ctx->Const.MaxCombinedTextureImageUnits = - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits - + ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits - + ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits; - - ctx->Const.MaxGeometryOutputVertices = 256; - ctx->Const.MaxGeometryTotalOutputComponents = 1024; - - ctx->Const.MaxVarying = 60 / 4; - break; - case 300: - case 310: - case 320: - ctx->Const.MaxClipPlanes = 8; - ctx->Const.MaxCombinedTextureImageUnits = 32; - ctx->Const.MaxDrawBuffers = 4; - ctx->Const.MinProgramTexelOffset = -8; - ctx->Const.MaxProgramTexelOffset = 7; - ctx->Const.MaxLights = 0; - ctx->Const.MaxTextureCoordUnits = 0; - ctx->Const.MaxTextureUnits = 0; - ctx->Const.MaxUniformBufferBindings = 84; - ctx->Const.MaxVertexStreams = 4; - ctx->Const.MaxTransformFeedbackBuffers = 4; - - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 16 * 4; - - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 224; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxCombinedUniformComponents = 224; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 15 * 4; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxOutputComponents = 0; /* not used */ - - ctx->Const.MaxVarying = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents / 4; - break; - } - - ctx->Const.GenerateTemporaryNames = true; - ctx->Const.MaxPatchVertices = 32; - - /* GL_ARB_explicit_uniform_location, GL_MAX_UNIFORM_LOCATIONS */ - ctx->Const.MaxUserAssignableUniformLocations = - 4 * MESA_SHADER_STAGES * MAX_UNIFORMS; - - ctx->Driver.NewProgram = new_program; - //ctx->Driver.DeleteProgram = 0; - - // Gl4es overrides - ctx->Const.MaxTextureCoordUnits = 16; - - // Abused override - ctx->Const.MaxClipPlanes = 8; - ctx->Const.MaxCombinedTextureImageUnits = 32; - ctx->Const.MaxDrawBuffers = 4; - ctx->Const.MinProgramTexelOffset = -8; - ctx->Const.MaxProgramTexelOffset = 7; - ctx->Const.MaxLights = 0; - ctx->Const.MaxTextureUnits = 0; - ctx->Const.MaxUniformBufferBindings = 84; - ctx->Const.MaxVertexStreams = 4; - ctx->Const.MaxTransformFeedbackBuffers = 4; - - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxCombinedUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 16 * 4; - - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 224; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxCombinedUniformComponents = 224; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 15 * 4; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxOutputComponents = 0; /* not used */ - - ctx->Const.MaxVarying = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents / 4; -} - -void GlslConvert::ClearContext(struct gl_context* ctx) -{ - _mesa_glsl_builtin_functions_decref(); -} - -struct gl_shader_program* GlslConvert::GetProgramFromShader(struct gl_context* ctx, struct gl_shader* shader) -{ - struct gl_shader_program* whole_program = 0; - - if (!ctx) return whole_program; - if (!shader) return whole_program; - - whole_program = rzalloc(NULL, struct gl_shader_program); - assert(whole_program != NULL); - whole_program->data = rzalloc(whole_program, struct gl_shader_program_data); - assert(whole_program->data != NULL); - whole_program->data->InfoLog = ralloc_strdup(whole_program->data, ""); - - /* Created just to avoid segmentation faults */ - whole_program->AttributeBindings = new string_to_uint_map; - whole_program->FragDataBindings = new string_to_uint_map; - whole_program->FragDataIndexBindings = new string_to_uint_map; - - // attach - whole_program->Shaders = - reralloc(whole_program, whole_program->Shaders, - struct gl_shader*, whole_program->NumShaders + 1); - assert(whole_program->Shaders != NULL); - - whole_program->Shaders[whole_program->NumShaders] = shader; - whole_program->NumShaders++; - - return whole_program; -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -void GlslConvert::FillCompilerOptions(gl_shader_compiler_options* vCompileOptions, OptimizationStruct* vOptimizationStruct) -{ - if (vCompileOptions && vOptimizationStruct) - { -#define COND(FLAG) (&vOptimizationStruct->compilerFlags && GlslConvert::CompilerFlags::FLAG) - //vCompileOptions->EmitNoLoops = COND(COMPILER_EmitNoLoops); - vCompileOptions->EmitNoCont = COND(COMPILER_EmitNoCont); - vCompileOptions->EmitNoMainReturn = COND(COMPILER_EmitNoMainReturn); - //vCompileOptions->EmitNoPow = COND(COMPILER_EmitNoPow); - //vCompileOptions->EmitNoSat = COND(COMPILER_EmitNoSat); - vCompileOptions->LowerCombinedClipCullDistance = COND(COMPILER_LowerCombinedClipCullDistance); - vCompileOptions->EmitNoIndirectInput = COND(COMPILER_EmitNoIndirectInput); - vCompileOptions->EmitNoIndirectOutput = COND(COMPILER_EmitNoIndirectOutput); - vCompileOptions->EmitNoIndirectTemp = COND(COMPILER_EmitNoIndirectTemp); - vCompileOptions->EmitNoIndirectUniform = COND(COMPILER_EmitNoIndirectUniform); - //vCompileOptions->EmitNoIndirectSampler = COND(COMPILER_EmitNoIndirectSampler); - vCompileOptions->MaxIfDepth = vOptimizationStruct->instructionToLower.MaxIfDepth; - //vCompileOptions->MaxUnrollIterations = vOptimizationStruct->instructionToLower.MaxUnrollIterations; - vCompileOptions->OptimizeForAOS = COND(COMPILER_OptimizeForAOS); - //vCompileOptions->LowerBufferInterfaceBlocks = COND(COMPILER_LowerBufferInterfaceBlocks); - vCompileOptions->ClampBlockIndicesToArrayBounds = COND(COMPILER_ClampBlockIndicesToArrayBounds); - vCompileOptions->PositionAlwaysInvariant = COND(COMPILER_PositionAlwaysInvariant); -#undef COND - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/GlslConvert.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/GlslConvert.h deleted file mode 100644 index 21f5509..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/GlslConvert.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright 2020 Stephane Cuillerdier (aka Aiekick) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include -#include -#include -#include "../compiler/shader_enums.h" - -struct exec_list; -struct gl_context; -struct gl_shader_compiler_options; -struct _mesa_glsl_parse_state; -class GlslConvert -{ -public: - - enum ShaderStage - { - MESA_SHADER_NONE = -1, - MESA_SHADER_VERTEX = 0, - MESA_SHADER_TESS_CTRL = 1, - MESA_SHADER_TESS_EVAL = 2, - MESA_SHADER_GEOMETRY = 3, - MESA_SHADER_FRAGMENT = 4, - MESA_SHADER_COMPUTE = 5, - /* must be last so it doesn't affect the GL pipeline */ - MESA_SHADER_KERNEL = 6, - }; - - enum ApiTarget - { - API_OPENGL_COMPAT = 0, - API_OPENGL_CORE - }; - - enum LanguageTarget - { - LANGUAGE_TARGET_AST = 0, - LANGUAGE_TARGET_IR, - //LANGUAGE_TARGET_IR_BUILDER, - LANGUAGE_TARGET_GLSL, - //LANGUAGE_TARGET_HLSL, - //LANGUAGE_TARGET_METAL - }; - - enum ControlFlags - { - CONTROL_SKIP_PREPROCESSING = (1 << 0), // Skip preprocessing shader source. Saves some time if you know you don't need it. - CONTROL_DO_PARTIAL_SHADER = (1 << 1) // Passed shader is not the full shader source. This makes some optimizations weaker. - }; - - enum CompilerFlags - { - COMPILER_EmitNoLoops = (1 << 0), - COMPILER_EmitNoCont = (1 << 1), - COMPILER_EmitNoMainReturn = (1 << 2), - COMPILER_EmitNoPow = (1 << 3), - COMPILER_EmitNoSat = (1 << 4), - COMPILER_LowerCombinedClipCullDistance = (1 << 5), - COMPILER_EmitNoIndirectInput = (1 << 6), - COMPILER_EmitNoIndirectOutput = (1 << 7), - COMPILER_EmitNoIndirectTemp = (1 << 8), - COMPILER_EmitNoIndirectUniform = (1 << 9), - COMPILER_EmitNoIndirectSampler = (1 << 10), - COMPILER_OptimizeForAOS = (1 << 11), - COMPILER_LowerBufferInterfaceBlocks = (1 << 12), - COMPILER_ClampBlockIndicesToArrayBounds = (1 << 13), - COMPILER_PositionAlwaysInvariant = (1 << 14) - }; - - enum InstructionToLowerFlags - { - LOWER_SUB_TO_ADD_NEG = (1 << 0), - LOWER_FDIV_TO_MUL_RCP = (1 << 1), - LOWER_EXP_TO_EXP2 = (1 << 2), - LOWER_POW_TO_EXP2 = (1 << 3), - LOWER_LOG_TO_LOG2 = (1 << 4), - LOWER_MOD_TO_FLOOR = (1 << 5), - LOWER_INT_DIV_TO_MUL_RCP = (1 << 6), - LOWER_LDEXP_TO_ARITH = (1 << 7), - LOWER_CARRY_TO_ARITH = (1 << 8), - LOWER_BORROW_TO_ARITH = (1 << 9), - LOWER_SAT_TO_CLAMP = (1 << 10), - LOWER_DOPS_TO_DFRAC = (1 << 11), - LOWER_DFREXP_DLDEXP_TO_ARITH = (1 << 12), - LOWER_BIT_COUNT_TO_MATH = (1 << 13), - LOWER_EXTRACT_TO_SHIFTS = (1 << 14), - LOWER_INSERT_TO_SHIFTS = (1 << 15), - LOWER_REVERSE_TO_SHIFTS = (1 << 16), - LOWER_FIND_LSB_TO_FLOAT_CAST = (1 << 17), - LOWER_FIND_MSB_TO_FLOAT_CAST = (1 << 18), - LOWER_IMUL_HIGH_TO_MUL = (1 << 19), - LOWER_DDIV_TO_MUL_RCP = (1 << 20), - LOWER_DIV_TO_MUL_RCP = (LOWER_FDIV_TO_MUL_RCP | LOWER_DDIV_TO_MUL_RCP), - LOWER_SQRT_TO_ABS_SQRT = (1 << 21), - LOWER_MUL64_TO_MUL_AND_MUL_HIGH = (1 << 22) - - }; - -#define OPT_FLAGS(CONTAINER, FLAG_TO_TEST) (CONTAINER & OptimizationFlags::FLAG_TO_TEST) - enum OptimizationFlags - { - OPT_algebraic = (1 << 0), // c/o - OPT_common_optimization = (1 << 1), - OPT_constant_folding = (1 << 2), // c/o - OPT_constant_propagation = (1 << 3), // c/o - OPT_constant_variable = (1 << 4), // c/o - OPT_constant_variable_unlinked = (1 << 5), // c/o - OPT_copy_propagation_elements = (1 << 6), // c/o - OPT_dead_code = (1 << 7), // c/o - OPT_dead_code_local = (1 << 8), // c/o - OPT_dead_code_unlinked = (1 << 9), // c/o - OPT_dead_functions = (1 << 10), // c/o - OPT_function_inlining = (1 << 11), // c/o - OPT_if_simplification = (1 << 12), // c/o - OPT_lower_discard = (1 << 13), - OPT_lower_variable_index_to_cond_assign = (1 << 14), - OPT_lower_instructions = (1 << 15), - OPT_lower_jumps = (1 << 16), // c/o - OPT_lower_noise = (1 << 17), - OPT_lower_quadop_vector = (1 << 18), - OPT_lower_texture_projection = (1 << 19), - OPT_lower_if_to_cond_assign = (1 << 20), - OPT_mat_op_to_vec = (1 << 21), - OPT_optimize_swizzles = (1 << 22), - OPT_optimize_redundant_jumps = (1 << 23), // c/o - OPT_structure_splitting = (1 << 24), // c/o - OPT_tree_grafting = (1 << 25), // c/o - OPT_vec_index_to_cond_assign = (1 << 26), - OPT_vec_index_to_swizzle = (1 << 27), // c/o - OPT_flatten_nested_if_blocks = (1 << 28), - OPT_conditional_discard = (1 << 29), - OPT_flip_matrices = (1 << 30), - OPT_vectorize = (1 << 31), - }; - -#define OPT_BIS_FLAGS(CONTAINER, FLAG_TO_TEST) (CONTAINER & OptimizationFlags_Bis::FLAG_TO_TEST) - enum OptimizationFlags_Bis - { - OPT_minmax_prune = (1 << 0), - OPT_rebalance_tree = (1 << 1), - OPT_lower_vector_insert = (1 << 2), - OPT_optimize_split_arrays = (1 << 3), - OPT_set_unroll_Loops = (1 << 4), - }; - - struct OptimizationStruct - { - // dont save - int maxCountPasses = 1000; - ShaderStage stage = ShaderStage::MESA_SHADER_FRAGMENT; - - // the rest is to save - CompilerFlags compilerFlags = (GlslConvert::CompilerFlags)0; - ControlFlags controlFlags = (GlslConvert::ControlFlags)0; - int optimizationFlags = (GlslConvert::OptimizationFlags)~0; // all - int optimizationFlags_Bis = (GlslConvert::OptimizationFlags_Bis)~0; // all - InstructionToLowerFlags instructionToLowerFlags = (GlslConvert::InstructionToLowerFlags)~0; // all - - struct AlgebraicOptions - { - bool native_integers = true; - } algebraicOptions; - - struct LowerJumpsOptions - { - bool pull_out_jumps = true; - bool lower_sub_return = true; - bool lower_main_return = true; - bool lower_continue = true; - bool lower_break = true; - } lowerJumpsOptions; - - struct LowerIfToCondAssignOptions - { - int max_depth = 10; - int min_branch_cost = 1; - } lowerIfToCondAssignOptions; - - struct LowerVariableIndexToCondAssignOptions - { - bool lower_input = true; - bool lower_output = true; - bool lower_temp = true; - bool lower_uniform = true; - } lowerVariableIndexToCondAssignOptions; - - struct DeadCodeOptions - { - bool keep_only_assigned_uniforms = false; // true => ne garde que les uniform assignés (loc >= 0) - } deadCodeOptions; - - struct DeadFunctionOptions - { - std::string entryFunc = "main"; - } deadFunctionOptions; - - struct LowerVectorInsertOptions - { - bool lower_nonconstant_index = false; - } lowerVectorInsertOptions; - - struct LowerQuadopVector - { - bool dont_lower_swz = true; - } lowerQuadopVector; - - struct InstructionToLower - { - int MaxIfDepth = 10; - int MaxUnrollIterations = 10; - } instructionToLower; - }; - -public: - static GlslConvert& Instance() - { - static GlslConvert _instance; - return _instance; - } - -protected: - GlslConvert(); // Prevent construction - GlslConvert(const GlslConvert&) {}; // Prevent construction by copying - GlslConvert& operator =(const GlslConvert&) { return *this; }; // Prevent assignment - ~GlslConvert(); // Prevent unwanted destruction - -public: - char * Optimize( - const char * vShaderSource, - ShaderStage vShaderType, - ApiTarget vTarget, - LanguageTarget vLanguageTarget, - int vGLSLVersion, - int vTargetGLSLVersion, - bool isESShader, - OptimizationStruct vOptimisationStruct); - std::string GetLog()noexcept - { - return std::move(log); - } - bool Failed()const noexcept - { - return failed; - } - - -public: - static void InitContext(struct gl_context *ctx, ApiTarget api, int vGlslVersion); - static void ClearContext(struct gl_context *ctx); - static struct gl_shader_program* GetProgramFromShader(struct gl_context *ctx, struct gl_shader *shader); - -private: - void FillCompilerOptions(gl_shader_compiler_options *vCompileOptions, OptimizationStruct *vOptimizationStruct); - std::string log; - bool failed = false; - - void apply_optimizations(exec_list *vIr, bool linked, gl_shader_compiler_options *vCompilerFlags); -}; diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/c_wrapper.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/c_wrapper.cpp deleted file mode 100644 index 1c8e82f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/c_wrapper.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// -// Created by serpentspirale on 17/06/23. -// - -#include -#include "c_wrapper.h" -#include "GlslConvert.h" - -GlslConvert::ShaderStage getStageForGlEnum(GLenum shader_type) { - switch(shader_type) { - case GL_VERTEX_SHADER: return GlslConvert::MESA_SHADER_VERTEX; - case GL_FRAGMENT_SHADER: return GlslConvert::MESA_SHADER_FRAGMENT; - case GL_COMPUTE_SHADER: return GlslConvert::MESA_SHADER_COMPUTE; - case GL_GEOMETRY_SHADER: return GlslConvert::MESA_SHADER_GEOMETRY; - case GL_TESS_CONTROL_SHADER: return GlslConvert::MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_SHADER: return GlslConvert::MESA_SHADER_TESS_EVAL; - default: return GlslConvert::MESA_SHADER_NONE; - } -} - -#ifdef __cplusplus -extern "C" { -#endif - -GlslConvert::OptimizationStruct optimizationStruct {}; // Default struct with everything enabled - - - -__attribute((visibility("default"))) char *optimize_shader(char *source, GLenum type, int vGLSLVersion, int vTargetGLSLVersion) { - GlslConvert& converter = GlslConvert::Instance(); - GlslConvert::ShaderStage stage = getStageForGlEnum(type); - if(stage == GlslConvert::MESA_SHADER_NONE) { - printf("Unknown shader type %x\n", type); - return nullptr; - } - char * optimized_shader = converter.Optimize( - source, - stage, - GlslConvert::API_OPENGL_COMPAT, - GlslConvert::LANGUAGE_TARGET_GLSL, - vGLSLVersion, - vTargetGLSLVersion, - true, - optimizationStruct - ); - if(converter.Failed()) { - printf("Shader conversion failed!\n%s\n", converter.GetLog().c_str()); - return nullptr; - } - return optimized_shader; -} - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/c_wrapper.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/c_wrapper.h deleted file mode 100644 index 7983094..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/c_wrapper.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Created by serpentspirale on 17/06/23. -// - - - -#ifndef GL4ES_C_WRAPPER_H -#define GL4ES_C_WRAPPER_H - -#include "GL/gl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -char *optimize_shader(char *source, GLenum type, int vGLSLVersion, int vTargetGLSLVersion ); - -#ifdef __cplusplus -} /* extern C */ -#endif - - -#endif //GL4ES_C_WRAPPER_H diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_glsl_visitor.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_glsl_visitor.cpp deleted file mode 100644 index 264f3bc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_glsl_visitor.cpp +++ /dev/null @@ -1,2347 +0,0 @@ -#include -#include "ir_print_glsl_visitor.h" -#include "../compiler/glsl/ir_visitor.h" -#include "../compiler/glsl_types.h" -#include "../compiler/glsl/loop_analysis.h" -#include "../compiler/glsl_types.h" -#include "../compiler/glsl/glsl_parser_extras.h" -#include "../util/macros.h" -#include "../util/hash_table.h" -#include "../util/u_string.h" -#include "../compiler/glsl/ast.h" - -const char* const precision[] = { "", "highp ", "mediump ", "lowp " }; - -struct ga_entry : public exec_node -{ - ga_entry(ir_instruction* ir) - { - assert(ir); - this->ir = ir; - } - ir_instruction* ir; -}; - -IR_TO_GLSL::global_print_tracker::global_print_tracker() -{ - mem_ctx = ralloc_context(0); - var_counter = 0; - var_hash = _mesa_pointer_hash_table_create(NULL); - main_function_done = false; -} - -IR_TO_GLSL::global_print_tracker::~global_print_tracker() -{ - _mesa_hash_table_destroy(var_hash, NULL); - ralloc_free(mem_ctx); -} - -static const int tex_sampler_type_count = 7; -// [glsl_sampler_dim] -static const char* tex_sampler_dim_name[tex_sampler_type_count] = { - "1D", "2D", "3D", "Cube", "Rect", "Buf", "External", -}; -static int tex_sampler_dim_size[tex_sampler_type_count] = { - 1, 2, 3, 3, 2, 2, 2, -}; - -static void print_texlod_workarounds( - int usage_bitfield, - int usage_proj_bitfield, - sbuffer& str) -{ - static const char* precStrings[3] = { "lowp", "mediump", "highp" }; - static const char* precNameStrings[3] = { "low_", "medium_", "high_" }; - // Print out the texlod workarounds - for (int prec = 0; prec < 3; prec++) - { - const char* precString = precStrings[prec]; - const char* precName = precNameStrings[prec]; - - for (int dim = 0; dim < tex_sampler_type_count; dim++) - { - int mask = 1 << (dim + (prec * 8)); - if (usage_bitfield & mask) - { - str.append("%s vec4 impl_%stexture%sLodEXT(%s sampler%s sampler, highp vec%d coord, mediump float lod)\n", precString, precName, tex_sampler_dim_name[dim], precString, tex_sampler_dim_name[dim], tex_sampler_dim_size[dim]); - str.append("{\n"); - str.append("#if defined(GL_EXT_shader_texture_lod)\n"); - str.append("\treturn texture%sLodEXT(sampler, coord, lod);\n", tex_sampler_dim_name[dim]); - str.append("#else\n"); - str.append("\treturn texture%s(sampler, coord, lod);\n", tex_sampler_dim_name[dim]); - str.append("#endif\n"); - str.append("}\n\n"); - } - if (usage_proj_bitfield & mask) - { - // 2D projected read also has a vec4 UV variant - if (dim == GLSL_SAMPLER_DIM_2D) - { - str.append("%s vec4 impl_%stexture2DProjLodEXT(%s sampler2D sampler, highp vec4 coord, mediump float lod)\n", precString, precName, precString); - str.append("{\n"); - str.append("#if defined(GL_EXT_shader_texture_lod)\n"); - str.append("\treturn texture%sProjLodEXT(sampler, coord, lod);\n", tex_sampler_dim_name[dim]); - str.append("#else\n"); - str.append("\treturn texture%sProj(sampler, coord, lod);\n", tex_sampler_dim_name[dim]); - str.append("#endif\n"); - str.append("}\n\n"); - } - str.append("%s vec4 impl_%stexture%sProjLodEXT(%s sampler%s sampler, highp vec%d coord, mediump float lod)\n", precString, precName, tex_sampler_dim_name[dim], precString, tex_sampler_dim_name[dim], tex_sampler_dim_size[dim] + 1); - str.append("{\n"); - str.append("#if defined(GL_EXT_shader_texture_lod)\n"); - str.append("\treturn texture%sProjLodEXT(sampler, coord, lod);\n", tex_sampler_dim_name[dim]); - str.append("#else\n"); - str.append("\treturn texture%sProj(sampler, coord, lod);\n", tex_sampler_dim_name[dim]); - str.append("#endif\n"); - str.append("}\n\n"); - } - } - } -} - -void IR_TO_GLSL::print_type(sbuffer& str, const glsl_type* t, bool arraySize) -{ - if (t->is_array()) - { - print_type(str, t->fields.array, true); - if (arraySize) - str.append("[%u]", t->length); - } - else if ((t->is_struct()) && !is_gl_identifier(t->name)) - { - str.append("%s", t->name, (void*)t); - } - else - { - str.append("%s", t->name); - } -} - -void IR_TO_GLSL::print_type_post(sbuffer& str, const glsl_type* t, bool arraySize) -{ - if (t->base_type == GLSL_TYPE_ARRAY) - { - if (!arraySize) - str.append("[%u]", t->length); - } -} - -const char* str_primtype(GLenum type, bool out) { - if(!out) switch (type) { - case GL_POINTS: return "points"; - case GL_LINE_STRIP: - case GL_LINES: return "lines"; - case GL_LINE_STRIP_ADJACENCY: - case GL_LINES_ADJACENCY: return "lines_adjacency"; - case GL_TRIANGLE_STRIP: - case GL_TRIANGLE_FAN: - case GL_TRIANGLES: return "triangles"; - case GL_TRIANGLE_STRIP_ADJACENCY: - case GL_TRIANGLES_ADJACENCY: return "triangles_adjacency"; - default: - printf("Unhandled geom shader input primtype: %x\n", type); - return "unknown"; - } - else switch(type) { - case GL_POINTS: return "points"; - case GL_LINE_STRIP: return "line_strip"; - case GL_TRIANGLE_STRIP: return "triangle_strip"; - default: - printf("Unhandled geom shader output primtype: %x\n", type); - return "unknown"; - } -} - -bool should_print_layout(const ast_type_qualifier* qual) { - return qual->flags.q.prim_type || - qual->flags.q.max_vertices || - qual->flags.q.local_size; -} - -void print_layout(sbuffer& str, struct _mesa_glsl_parse_state* state, ast_type_qualifier* qual, bool out) { - bool first = true; -#define I_LAYOUT_QUALIFIER(cmp_op, block) \ - if(cmp_op) { \ - if(!first) str.append(","); \ - else first = false; \ - block \ - } -#define LAYOUT_QUALIFIER(name, block) I_LAYOUT_QUALIFIER(qual->flags.q.name, block) -#define LAYOUT_QUALIFIER_MASK(name, bit, block) I_LAYOUT_QUALIFIER(qual->flags.q.name & (bit), block) - str.append("layout("); - LAYOUT_QUALIFIER(prim_type,{ - str.append("%s", str_primtype(qual->prim_type, out)); - }) - LAYOUT_QUALIFIER(max_vertices,{ - unsigned qual_max_vertices = !0; - qual->max_vertices->process_qualifier_constant(state, "max_vertices", - &qual_max_vertices, true); - str.append("max_vertices=%u", qual_max_vertices); - }) - LAYOUT_QUALIFIER_MASK(local_size, 1 << 0, { - str.append("local_size_x=", state->cs_input_local_size[0]); - }) - LAYOUT_QUALIFIER_MASK(local_size, 1 << 1, { - str.append("local_size_y=", state->cs_input_local_size[1]); - }) - LAYOUT_QUALIFIER_MASK(local_size, 1 << 2, { - str.append("local_size_z=", state->cs_input_local_size[2]); - }) - str.append(") "); -} - -void nan_check_warn() { - static bool warned = false; - if(warned) return; - printf("LTW shader optimizer will emit NaN checks for fragment outputs. This may lead to loss of performance.\n"); - warned = true; -} - -void print_nan_check_funcs(sbuffer& str) { - nan_check_warn(); - const char* nan_check_func = - "%1$s _ltw_removenan(%1$s colorVal) {\n" - " return mix(colorVal, %1$s(%2$s), isnan(colorVal));\n" - "}\n"; - str.append(nan_check_func, "float", "0.0"); - str.append(nan_check_func, "vec2", "0.0,0.0"); - str.append(nan_check_func, "vec3", "0.0,0.0,0.0"); - str.append(nan_check_func, "vec4", "0.0,0.0,0.0,1.0"); -} - -// DANGER, the function allocates a new string -// DO NOT FORGET TO FREE IT -char * IR_TO_GLSL::Convert( - exec_list* instructions, - struct _mesa_glsl_parse_state* state) -{ - sbuffer res; - bool shader_nan_check = false; - - if (state) - { - bool print_precision = false; - if(state->es_shader && state->language_version >= 300){ - res.append("#version %i es\n", state->language_version); - print_precision = true; - } - else - res.append("#version %i\n", state->language_version); - - - if (state->ARB_shader_texture_lod_enable) - res.append("#extension GL_ARB_shader_texture_lod : enable\n"); - if (state->ARB_draw_instanced_enable) - res.append("#extension GL_ARB_draw_instanced : enable\n"); - //if (state->EXT_gpu_shader4_enable) - // res.append("#extension GL_EXT_gpu_shader4 : enable\n"); - //if (state->EXT_shader_texture_lod_enable) - // str.append("#extension GL_EXT_shader_texture_lod : enable\n"); - if (state->OES_standard_derivatives_enable) - res.append("#extension GL_OES_standard_derivatives : enable\n"); - //if (state->EXT_shadow_samplers_enable) - // str.append("#extension GL_EXT_shadow_samplers : enable\n"); - if (state->EXT_frag_depth_enable) - res.append("#extension GL_EXT_frag_depth : enable\n"); - if (state->es_shader && state->language_version < 300) - { - if (state->EXT_draw_buffers_enable) - res.append("#extension GL_EXT_draw_buffers : enable\n"); - // if (state->EXT_draw_instanced_enable) - // str.append("#extension GL_EXT_draw_instanced : enable\n"); - } - if (state->EXT_shader_framebuffer_fetch_enable) - res.append("#extension GL_EXT_shader_framebuffer_fetch : enable\n"); - if (state->ARB_shader_bit_encoding_enable) - res.append("#extension GL_ARB_shader_bit_encoding : enable\n"); - if (state->EXT_texture_array_enable) - res.append("#extension GL_EXT_texture_array : enable\n"); - - // Search for internal GL variables and enable extensions based on them - bool uses_buffer_sampler = false; - bool sampler2d_highp = false; - foreach_in_list(ir_instruction, ir, instructions) - { - // Skip non-variables - if(ir->ir_type != ir_type_variable) continue; - auto* var = (ir_variable*)ir; - - const char* type = var->type->name; - if(type != nullptr) { - // Check for buffer texture samplers. Need to enable (and/or set precision) for them - if(!uses_buffer_sampler && (strstr(type, "samplerBuffer") != nullptr || strstr(type, "imageBuffer") != nullptr)) { - uses_buffer_sampler = true; - if(state->es_shader && state->language_version < 320) { - res.append("#extension GL_EXT_texture_buffer : enable\n"); - } - } - // Check if shampler2DShadow is used in this shader. If yes, we need to explicitly enable high - // precision for all 2D samplers, to make shadows on Mali look good. - if(!sampler2d_highp && (strstr(type, "sampler2DShadow") != nullptr)) { - sampler2d_highp = true; - } - } - // Check for interpolation type. Need to enable the noperspective interpolation extension - // if used. - if(var->data.interpolation == glsl_interp_mode::INTERP_MODE_NOPERSPECTIVE && !state->NV_shader_noperspective_interpolation_enable) { - state->NV_shader_noperspective_interpolation_enable = true; - res.append("#extension GL_NV_shader_noperspective_interpolation : enable\n"); - } - // Skip non-internal variables - if(strstr(var->name, "gl_") != var->name) continue; - const char* name = var->name; - // If gl_ClipDistance or gl_CullDistance is in use, enable the corresponding GLES extension - if((strstr(name, "gl_ClipDistance") != nullptr || strstr(name, "gl_CullDistance") != nullptr) && !state->EXT_clip_cull_distance_enable) { - state->EXT_clip_cull_distance_enable = true; - res.append("#extension GL_EXT_clip_cull_distance : enable\n"); - } - - } - - if(print_precision) { - const char* sampler2d_precision = "lowp"; - if(sampler2d_highp) sampler2d_precision = "highp"; - res.append("precision %1$s float;\n" - "precision %1$s int;\n" - "precision %2$s sampler2D;\n", "highp", sampler2d_precision); - res.append("precision %1$s sampler3D;\n" - "precision %1$s samplerCubeShadow;\n" - "precision %2$s sampler2DShadow;\n" - "precision %2$s sampler2DArray;\n" - "precision %2$s sampler2DArrayShadow;\n" - "precision %1$s isampler2D;\n" - "precision %1$s isampler3D;\n" - "precision %1$s isamplerCube;\n" - "precision %1$s isampler2DArray;\n" - "precision %1$s usampler2D;\n" - "precision %1$s usampler3D;\n" - "precision %1$s usamplerCube;\n" - "precision %1$s usampler2DArray;\n", "lowp", sampler2d_precision); - if(uses_buffer_sampler) { - res.append("precision %1$s samplerBuffer;\n" - "precision %1$s isamplerBuffer;\n" - "precision %1$s usamplerBuffer;\n" - "precision %1$s imageBuffer;\n" - "precision %1$s iimageBuffer;\n" - "precision %1$s uimageBuffer;\n", "lowp"); - } - } - - for (unsigned i = 0; i < state->num_user_structures; i++) - { - const glsl_type* const s = state->user_structures[i]; - res.append("struct %s {\n", - s->name); - for (unsigned j = 0; j < s->length; j++) - { - res.append("\t"); - print_type(res, s->fields.structure[j].type, false); - res.append(" %s;\n", s->fields.structure[j].name); - } - res.append("};\n"); - } - if(should_print_layout(state->in_qualifier)) { - print_layout(res, state, state->in_qualifier, false); - res.append("in;\n"); - } - if(should_print_layout(state->out_qualifier)) { - print_layout(res, state, state->out_qualifier, true); - res.append("out;\n"); - } - const char* nan_check_env = getenv("LTW_SHADERCONV_CHECKNAN"); - bool emit_nan_check = nan_check_env != nullptr && *nan_check_env == '1'; - if(emit_nan_check && state->stage == MESA_SHADER_FRAGMENT) { - print_nan_check_funcs(res); - shader_nan_check = true; - } - } - - global_print_tracker global; - global.enable_nan_check = shader_nan_check; - int uses_texlod_impl = 0; - int uses_texlodproj_impl = 0; - loop_state* ls = analyze_loop_variables(instructions); - if (ls) - { - foreach_in_list(ir_instruction, ir, instructions) - { - if (ir->ir_type == ir_type_variable) - { - ir_variable* var = static_cast(ir); - if ((strstr(var->name, "gl_") == var->name) - && !var->data.invariant) - continue; - } - - ir_instruction* deconsted = const_cast(ir); - - IR_TO_GLSL v(res, &global, state); - v.loopstate = ls; - - ir->accept(&v); - if (ir->ir_type != ir_type_function && !v.skipped_this_ir) - res.append(";\n"); // uniforms - - uses_texlod_impl |= v.uses_texlod_impl; - uses_texlodproj_impl |= v.uses_texlodproj_impl; - } - - delete ls; - } - - print_texlod_workarounds(uses_texlod_impl, uses_texlodproj_impl, res); - res.append("\n\n"); - - - - // DANGER, A NEW STRING IS ALLOCATED ! - // YOUR PROGRAM HAS TO FREE IT ! - return res.c_str_take_ownership(); -} - -IR_TO_GLSL::IR_TO_GLSL( - sbuffer& str, - global_print_tracker* vGlobals, - const _mesa_glsl_parse_state* vState) - : generated_source(str), global(vGlobals), state(vState) -{ - printable_names = _mesa_pointer_hash_table_create(NULL); - symbols = _mesa_symbol_table_ctor(); - mem_ctx = ralloc_context(NULL); -} - -IR_TO_GLSL::~IR_TO_GLSL() -{ - _mesa_hash_table_destroy(printable_names, NULL); - _mesa_symbol_table_dtor(symbols); - ralloc_free(mem_ctx); -} - -void -IR_TO_GLSL::indent(void) -{ - if (previous_skipped) - return; - previous_skipped = false; - for (int i = 0; i < indentation; i++) - generated_source.append(" "); -} - -void -IR_TO_GLSL::end_statement_line() -{ - if (!skipped_this_ir) - generated_source.append(";\n"); - previous_skipped = skipped_this_ir; - skipped_this_ir = false; -} - -void -IR_TO_GLSL::newline_indent() -{ - if (expression_depth % 8 == 0) - { - ++indentation; - generated_source.append("\n"); - indent(); - } -} - -void -IR_TO_GLSL::newline_deindent() -{ - if (expression_depth % 8 == 0) - { - --indentation; - generated_source.append("\n"); - indent(); - } -} - -void -IR_TO_GLSL::print_var_name(ir_variable* v) -{ - hash_entry* entry = _mesa_hash_table_search(global->var_hash, v); - long id; - - - if (entry) - { - id = (long)entry->data; - if (!id && v->data.mode == ir_var_temporary) - { - id = ++global->var_counter; - _mesa_hash_table_insert(global->var_hash, v, (void*)id); - } - if (id) - { - if (v->data.mode == ir_var_temporary) - generated_source.append("tmpvar_%d", (int)id); - else - generated_source.append("%s_%d", v->name, (int)id); - } - else - { - generated_source.append("%s", v->name); - } - } - else - { - if (v->data.mode == ir_var_temporary) { - id = ++global->var_counter; - _mesa_hash_table_insert(global->var_hash, v, (void*)id); - generated_source.append("tmpvar_%d", (int)id); - } - else - generated_source.append("%s", v->name); - } -} - -const char* -IR_TO_GLSL::unique_name(ir_variable* v) -{ - /* var->name can be NULL in function prototypes when a type is given for a - * parameter but no name is given. In that case, just return an empty - * string. Don't worry about tracking the generated name in the printable - * names hash because this is the only scope where it can ever appear. - */ - if (v->name == NULL) - { - static unsigned arg = 1; - return ralloc_asprintf(this->mem_ctx, "parameter@%u", arg++); - } - - /* Do we already have a name for this variable? */ - struct hash_entry* entry = - _mesa_hash_table_search(this->printable_names, v); - - if (entry != NULL) - { - return (const char*)entry->data; - } - - const char* name = NULL; - - /* If there's no conflict, just use the original name */ - if (_mesa_symbol_table_find_symbol(this->symbols, v->name) == NULL) - { - name = v->name; - } - else - { - static unsigned i = 1; - name = ralloc_asprintf(this->mem_ctx, "%s@%u", v->name, ++i); - } - - _mesa_hash_table_insert(this->printable_names, v, (void*)name); - _mesa_symbol_table_add_symbol(this->symbols, name, v); - - return name; -} - -void -IR_TO_GLSL::visit(ir_rvalue*) -{ - generated_source.append("error"); -} - -void -IR_TO_GLSL::visit(ir_variable* ir) -{ - // HACK to handle unoptimized shaders - if(ir->type->is_void()) - return; - - if ( ir->is_in_uniform_block()) // only supporting uniform blocks for now, might add SSBOs later - { - visit_uniform_block( ir ); - return; - } - char binding[32] = { 0 }; - if (ir->data.binding) - snprintf(binding, sizeof(binding), "binding=%i ", ir->data.binding); - - char loc[100] = { 0 }; - if (this->state->language_version >= 300 && ir->data.explicit_location) - { - const int binding_base = (this->state->stage == MESA_SHADER_VERTEX ? (int)VERT_ATTRIB_GENERIC0 : (int)FRAG_RESULT_DATA0); - const int location = ir->data.location - binding_base; - snprintf(loc, sizeof(loc), "layout(location=%d) ", location); - } else if(!ir->data.explicit_location && ir->data.mode == ir_var_shader_out && this->state->stage == MESA_SHADER_FRAGMENT) { - generated_source.append("/* LTW INSERT LOCATION "); - print_var_name(ir); - generated_source.append(" LTW */"); - } - else if (ir->data.location != -1) - { - snprintf(loc, sizeof(loc), "location=%i ", ir->data.location); - } - - int decormode = this->mode; - // GLSL 1.30 and up use "in" and "out" for everything - if (this->state->language_version >= 130) - decormode = 0; - else { - switch (this->state->stage) { - case MESA_SHADER_FRAGMENT: - decormode = 2; - break; - case MESA_SHADER_VERTEX: - decormode = 1; - break; - } - } - - // give an id to any variable defined in a - // function that is not an uniform - if (this->mode == 0 && ir->data.mode != ir_var_uniform) - { - hash_entry* entry = _mesa_hash_table_search(global->var_hash, ir); - if (entry == 0) - { - long id = ++global->var_counter; - _mesa_hash_table_insert(global->var_hash, ir, (void*)id); - } - } - - // if this is a loop induction variable, do not print it - // (will be printed inside loop body) - if (!inside_loop_body) - { - ir_loop* lo = ir->as_loop(); - if (lo) - { - loop_variable_state* inductor_state = loopstate->get(lo); - if (inductor_state && inductor_state->induction_variables.length() == 1 && - can_emit_canonical_for(inductor_state)) - { - skipped_this_ir = true; - return; - } - } - } - - char component[32] = { 0 }; - if (ir->data.explicit_component || ir->data.location_frac != 0) - snprintf(component, sizeof(component), "component=%i ", - ir->data.location_frac); - - char stream[32] = { 0 }; - if (ir->data.stream & (1u << 31)) { - if (ir->data.stream & ~(1u << 31)) { - snprintf(stream, sizeof(stream), "stream(%u,%u,%u,%u) ", - ir->data.stream & 3, (ir->data.stream >> 2) & 3, - (ir->data.stream >> 4) & 3, (ir->data.stream >> 6) & 3); - } - } - else if (ir->data.stream) { - snprintf(stream, sizeof(stream), "stream%u ", ir->data.stream); - } - - char image_format[32] = { 0 }; - if (ir->data.image_format) { - snprintf(image_format, sizeof(image_format), "format=%x ", - ir->data.image_format); - } - - const char* const cent = (ir->data.centroid) ? "centroid " : ""; - const char* const samp = (ir->data.sample) ? "sample " : ""; - const char* const patc = (ir->data.patch) ? "patch " : ""; - const char* const inv = (ir->data.invariant) ? "invariant " : ""; - const char* const explicit_inv = (ir->data.explicit_invariant) ? "explicit_invariant " : ""; - const char* const prec = (ir->data.precise) ? "precise " : ""; - const char* const bindless = (ir->data.bindless) ? "bindless " : ""; - const char* const bound = (ir->data.bound) ? "bound " : ""; - const char* const memory_read_only = (ir->data.memory_read_only) ? "readonly " : ""; - const char* const memory_write_only = (ir->data.memory_write_only) ? "writeonly " : ""; - const char* const memory_coherent = (ir->data.memory_coherent) ? "coherent " : ""; - const char* const memory_volatile = (ir->data.memory_volatile) ? "volatile " : ""; - const char* const memory_restrict = (ir->data.memory_restrict) ? "restrict " : ""; - const char* const mode[3][ir_var_mode_count] = - { - { "", "uniform ", "shader_storage", "shader_shared", "in ", "out ", "in ", "out ", "inout ", "const_in ", "sys ", "" }, - { "", "uniform ", "shader_storage", "shader_shared", "attribute ", "varying ", "in ", "out ", "inout ", "const_in ", "sys ", "" }, - { "", "uniform ", "shader_storage", "shader_shared", "varying ", "out ", "in ", "out ", "inout ", "const_in ", "sys ", "" } - }; - const char* const interp[] = { "", "smooth ", "flat ", "noperspective ", "EXPLICIT ", "COLOR " }; - STATIC_ASSERT(ARRAY_SIZE(interp) == INTERP_MODE_COUNT); - - // keep invariant declaration for builtin variables - if (strstr(ir->name, "gl_") == ir->name) - { - generated_source.append("%s", inv); - print_var_name(ir); - return; - } - - generated_source.append("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", - binding, loc, component, cent, bindless, bound, - image_format, memory_read_only, memory_write_only, - memory_coherent, memory_volatile, memory_restrict, - samp, patc, inv, explicit_inv, prec, interp[ir->data.interpolation], mode[decormode][ir->data.mode], - precision[ir->data.precision], stream); - - print_type(generated_source, ir->type, false); - generated_source.append(" "); - print_var_name(ir); - print_type_post(generated_source, ir->type, false); - - if (ir->constant_value && - ir->data.mode != ir_var_shader_in && - ir->data.mode != ir_var_shader_out && - //ir->data.mode != ir_var_shader_inout && - ir->data.mode != ir_var_function_in && - ir->data.mode != ir_var_function_out && - ir->data.mode != ir_var_function_inout) - { - generated_source.append(" = "); - visit(ir->constant_value); - } -} - -void -IR_TO_GLSL::visit(ir_function_signature* ir) -{ - _mesa_symbol_table_push_scope(symbols); - - print_type(generated_source, ir->return_type, true); - generated_source.append(" %s(", ir->function_name()); - - if (!ir->parameters.is_empty()) - { - previous_skipped = false; - bool first = true; - foreach_in_list(ir_variable, inst, &ir->parameters) - { - if (!first) - generated_source.append(", "); - indent(); - inst->accept(this); - first = false; - } - indent(); - } - - if (ir->body.is_empty() && strcmp(ir->function()->name, "main") != 0) - { - generated_source.append(");\n"); - return; - } - - generated_source.append(")\n"); - - indent(); - generated_source.append("{\n"); - indentation++; - previous_skipped = false; - - // insert postponed global assigments - if (strcmp(ir->function()->name, "main") == 0) - { - assert(!global->main_function_done); - global->main_function_done = true; - foreach_in_list(ga_entry, node, &global->global_assignements) - { - ir_instruction* as = node->ir; - as->accept(this); - generated_source.append(";\n"); - } - } - - foreach_in_list(ir_instruction, inst, &ir->body) - { - indent(); - inst->accept(this); - end_statement_line(); - } - - indentation--; - indent(); - generated_source.append("}\n"); - - _mesa_symbol_table_pop_scope(symbols); -} - -void -IR_TO_GLSL::visit(ir_function* ir) -{ - bool found_non_builtin_proto = false; - foreach_in_list(ir_function_signature, sig, &ir->signatures) - { - if (!sig->is_builtin()) - found_non_builtin_proto = true; - } - if (!found_non_builtin_proto) - return; - - int oldMode = this->mode; - this->mode = 0; - - foreach_in_list(ir_function_signature, sig, &ir->signatures) - { - indent(); - sig->accept(this); - generated_source.append("\n"); - } - - this->mode = oldMode; - - indent(); -} - -const char* const operator_glsl_strs[] = { - "~", // bit not - "!", // logic not - "-", //neg - "abs", // abs - "sign", //sign - "1.0/", // rcp - "1.0/sqrt", //rcq - "sqrt", //sqrt - "exp", // exp - "log", // log - "exp2", //exp2 - "log2", //log2 - "int", //f2i - "uint", //f2u - "float", // i2f - "bool", // f2b - "float", //b2f - "ir_unop_b2f16", - "bool", //i2b - "int",//"b2i", - "float",// "u2f", - "uint",// "i2u", - "int",// "u2i", - "float",// "d2f", - "double",// "f2d", - "f2f16", - "f2fmp", - "f162f", - "i2i", - "i2imp", - "u2u", - "u2ump", - "int", //"d2i", - "double", // "i2d", - "uint",// "d2u", - "double", //"u2d", - "bool",// "d2b", - "f162b", - "intBitsToFloat", - "floatBitsToInt", - "uintBitsToFloat", - "floatBitsToUint", - "bitcast_u642d", - "bitcast_i642d", - "bitcast_d2u64", - "bitcast_d2i64", - "i642i", - "u642i", - "i642u", - "u642u", - "i642b", - "i642f", - "u642f", - "i642d", - "u642d", - "i2i64", - "u2i64", - "b2i64", - "f2i64", - "d2i64", - "i2u64", - "u2u64", - "f2u64", - "d2u64", - "u642i64", - "i642u64", - "trunc", - "ceil", - "floor", - "fract", - "roundEven", - "sin", - "cos", - "atan", - "dFdx", - "dFdxCoarse", - "dFdxFine", - "dFdy", - "dFdyCoarse", - "dFdyFine", - "packSnorm2x16", - "packSnorm4x8", - "packUnorm2x16", - "packUnorm4x8", - "packHalf2x16", - "unpackSnorm2x16", - "unpackSnorm4x8", - "unpackUnorm2x16", - "unpackUnorm4x8", - "unpackHalf2x16", - "bitfield_reverse", - "bit_count", - "find_msb", - "find_lsb", - "clz", // clz ? - "clamp", // "saturate" clamps between 0.0 and 1.0. So we hack the printer to add arguments - "packDouble2x32", - "unpackDouble2x32", - "packSampler2x32", - "packImage2x32", - "unpackSampler2x32", - "unpackImage2x32", - "frexp_sig", - "frexp_exp", - "subroutine_to_int", - "interpolate_at_centroid", - "get_buffer_size", - "ssbo_unsized_array_length", - "implicitly_sized_array_length", - "packInt2x32", - "packUint2x32", - "unpackInt2x32", - "unpackUint2x32", - "+", - "-", - "add_sat", - "sub_sat", - "abs_sub", - "avg", - "avg_round", - "*", - "mul_32x16", - "imul_high_TODO", - "/", - "carry_TODO", - "borrow_TODO", - "mod", - "<", - ">=", - "==", - "!=", - "==", // all_equal_TODO - "!=", // any_nequal_TODO - "<<", - ">>", - "&", - "^", - "|", - "&&", - "^^", - "||", - "dot", - "min", - "max", - "pow", - "ubo_load_TODO", - "ldexp_TODO", - "vector_extract_TODO", - "interpolate_at_offse_TODOt", - "interpolate_at_sample_TODO", - // NOTE: atan2 operation, replaced with atan(x,y) - "atan", - "fma", - "mix", // lrp ? - "csel", - "bitfield_extract_TODO", - "vector_insert_TODO", - "bitfield_insert_TODO", - "vector_TODO", -}; - -const char* const operator_glsl_enum_strs[] = { - "bit_not", - "logic_not", - "neg", - "abs", - "sign", - "rcp", - "rsq", - "sqrt", - "exp", - "log", - "exp2", - "log2", - "f2i", - "f2u", - "i2f", - "f2b", - "b2f", - "i2b", - "b2i", - "u2f", - "i2u", - "u2i", - "d2f", - "f2d", - "d2i", - "i2d", - "d2u", - "u2d", - "d2b", - "bitcast_i2f", - "bitcast_f2i", - "bitcast_u2f", - "bitcast_f2u", - "bitcast_u642d", - "bitcast_i642d", - "bitcast_d2u64", - "bitcast_d2i64", - "i642i", - "u642i", - "i642u", - "u642u", - "i642b", - "i642f", - "u642f", - "i642d", - "u642d", - "i2i64", - "u2i64", - "b2i64", - "f2i64", - "d2i64", - "i2u64", - "u2u64", - "f2u64", - "d2u64", - "u642i64", - "i642u64", - "trunc", - "ceil", - "floor", - "fract", - "round_even", - "sin", - "cos", - "atan", - "dFdx", - "dFdx_coarse", - "dFdx_fine", - "dFdy", - "dFdy_coarse", - "dFdy_fine", - "pack_snorm_2x16", - "pack_snorm_4x8", - "pack_unorm_2x16", - "pack_unorm_4x8", - "pack_half_2x16", - "unpack_snorm_2x16", - "unpack_snorm_4x8", - "unpack_unorm_2x16", - "unpack_unorm_4x8", - "unpack_half_2x16", - "bitfield_reverse", - "bit_count", - "find_msb", - "find_lsb", - "saturate", - "pack_double_2x32", - "unpack_double_2x32", - "pack_sampler_2x32", - "pack_image_2x32", - "unpack_sampler_2x32", - "unpack_image_2x32", - "frexp_sig", - "frexp_exp", - "noise", - "subroutine_to_int", - "interpolate_at_centroid", - "get_buffer_size", - "ssbo_unsized_array_length", - "pack_int_2x32", - "pack_uint_2x32", - "unpack_int_2x32", - "unpack_uint_2x32", - "add", - "sub", - "mul", - "imul_high", - "div", - "carry", - "borrow", - "mod", - "less", - "gequal", - "equal", - "nequal", - "all_equal", - "any_nequal", - "lshift", - "rshift", - "bit_and", - "bit_xor", - "bit_or", - "logic_and", - "logic_xor", - "logic_or", - "dot", - "min", - "max", - "pow", - "ubo_load", - "ldexp", - "vector_extract", - "interpolate_at_offset", - "interpolate_at_sample", - // NOTE: atan2 operation, replaced with atan(x,y) - "atan", - "fma", - "lrp", - "csel", - "bitfield_extract", - "vector_insert", - "bitfield_insert", - "vector", -}; - - -static const char* const operator_vec_glsl_strs[] = { - "lessThan", - "greaterThan", - "lessThanEqual", - "greaterThanEqual", - "equal", - "notEqual", -}; - -static bool is_binop_func_like(ir_expression_operation op, const glsl_type* type) -{ - if (op == ir_binop_equal || - op == ir_binop_nequal || - op == ir_binop_mod || op == ir_binop_atan2 || - (op >= ir_binop_dot && op <= ir_binop_pow)) - return true; - if (type->is_vector() && (op >= ir_binop_less && op <= ir_binop_nequal)) - { - return true; - } - return false; -} - -void -IR_TO_GLSL::visit(ir_expression* ir) -{ - expression_depth++; - newline_indent(); - - if (ir->num_operands == 1) - { - if (ir->operation >= ir_unop_f2i && ir->operation <= ir_unop_u2i) { - print_type(generated_source, ir->type, true); - generated_source.append("("); - } - else if (ir->operation == ir_unop_rcp) { - generated_source.append("(1.0/("); - } - else { - generated_source.append("%s(", operator_glsl_strs[ir->operation]); - } - if (ir->operands[0]) - ir->operands[0]->accept(this); - - // Saturate is only accepted by some glsl compilers, so transform it into a clamp 0.0 - 1.0 - if(ir->operation == ir_unop_saturate) - generated_source.append(", 0.0, 1.0"); - - generated_source.append(")"); - if (ir->operation == ir_unop_rcp) { - generated_source.append(")"); - } - } - else if (ir->operation == ir_triop_csel) - { - generated_source.append("mix("); - ir->operands[2]->accept(this); - generated_source.append(", "); - ir->operands[1]->accept(this); - auto x = ir->operands[1]->type->vector_elements; - if (ir->operands[1]->type->vector_elements > 1) - generated_source.append(", bvec%d(", ir->operands[1]->type->vector_elements); - else - generated_source.append(", bool("); - ir->operands[0]->accept(this); - generated_source.append("))"); - } - else if (ir->operation == ir_binop_vector_extract) - { - // a[b] - - if (ir->operands[0]) - ir->operands[0]->accept(this); - generated_source.append("["); - if (ir->operands[1]) - ir->operands[1]->accept(this); - generated_source.append("]"); - } - else if (is_binop_func_like(ir->operation, ir->type)) - { - if (ir->operation == ir_binop_mod) - { - generated_source.append("("); - print_type(generated_source, ir->type, true); - generated_source.append("("); - } - if (ir->type->is_vector() && (ir->operation >= ir_binop_less && ir->operation <= ir_binop_nequal)) - generated_source.append("%s (", operator_vec_glsl_strs[ir->operation - ir_binop_less]); - else - { - if (ir->operation >= ir_binop_less && ir->operation <= ir_binop_nequal) - { - generated_source.append("("); - if (ir->operands[0]) - ir->operands[0]->accept(this); - - generated_source.append(" %s ", operator_glsl_strs[ir->operation]); - - if (ir->operands[1]) - ir->operands[1]->accept(this); - generated_source.append(")"); - return; - } - generated_source.append("%s (", operator_glsl_strs[ir->operation]); - } - - - if (ir->operands[0]){ - // mod needs floating types for some reason - if(ir->operation == ir_binop_mod) - generated_source.append("float("); - ir->operands[0]->accept(this); - if(ir->operation == ir_binop_mod) - generated_source.append(")"); - } - - generated_source.append(", "); - if (ir->operands[1]) { - if(ir->operation == ir_binop_mod) - generated_source.append("float("); - ir->operands[1]->accept(this); - if(ir->operation == ir_binop_mod) - generated_source.append(")"); - } - generated_source.append(")"); - if (ir->operation == ir_binop_mod) - generated_source.append("))"); - } - else if (ir->num_operands == 2) - { - generated_source.append("("); - if (ir->operands[0]) - ir->operands[0]->accept(this); - - generated_source.append(" %s ", operator_glsl_strs[ir->operation]); - - if (ir->operands[1]) - ir->operands[1]->accept(this); - generated_source.append(")"); - } - else - { - // ternary op - generated_source.append("%s (", operator_glsl_strs[ir->operation]); - if (ir->operands[0]) - ir->operands[0]->accept(this); - generated_source.append(", "); - if (ir->operands[1]) - ir->operands[1]->accept(this); - generated_source.append(", "); - if (ir->operands[2]) - ir->operands[2]->accept(this); - generated_source.append(")"); - } - - newline_deindent(); - expression_depth--; -} - -void -IR_TO_GLSL::visit(ir_texture* ir) -{ - glsl_sampler_dim sampler_dim = (glsl_sampler_dim)ir->sampler->type->sampler_dimensionality; - const bool is_shadow = ir->sampler->type->sampler_shadow; - const bool is_array = ir->sampler->type->sampler_array; - - if (ir->op == ir_txs) - { - generated_source.append("textureSize ("); - ir->sampler->accept(this); - //TODO stub ! - generated_source.append(", 0"); - /* - if (ir_texture::has_lod(ir->sampler->type)) - { - generated_source.append(", "); - ir->lod_info.lod->accept(this); - } - */ - generated_source.append(")"); - return; - } - - const glsl_type* uv_type = ir->coordinate->type; - const int uv_dim = uv_type->vector_elements; - int sampler_uv_dim = tex_sampler_dim_size[sampler_dim]; - if (is_shadow) - sampler_uv_dim += 1; - if (is_array) - sampler_uv_dim += 1; - const bool is_proj = ((ir->op == ir_tex || ir->op == ir_txb || ir->op == ir_txl || ir->op == ir_txd) && uv_dim > sampler_uv_dim); - const bool is_lod = (ir->op == ir_txl); - - /*if (is_lod && state->es_shader && state->language_version < 300 && state->stage == MESA_SHADER_FRAGMENT) - { - // Special workaround for GLES 2.0 LOD samplers to prevent a lot of debug spew. - const glsl_precision prec = ir->sampler->type->get_precision(); - const char *precString = ""; - // Sampler bitfield is 7 bits, so use 0-7 for lowp, 8-15 for mediump and 16-23 for highp. - int position = (int)sampler_dim; - switch (prec) - { - case glsl_precision_high: - position += 16; - precString = "_high_"; - break; - case glsl_precision_medium: - position += 8; - precString = "_medium_"; - break; - case glsl_precision_low: - default: - precString = "_low_"; - break; - } - generated_source.append("impl%s", precString); - if (is_proj) - uses_texlodproj_impl |= (1 << position); - else - uses_texlod_impl |= (1 << position); - }*/ - - // texture function name - //ACS: shadow lookups and lookups with dimensionality included in the name were deprecated in 130 - - if (state->language_version < 130) - { - if(ir->op == ir_txf || ir->op == ir_txf_ms) { - // texelfetch has to be emulated manually. - // FIXME emulated the fetch properly - generated_source.append("vec4(1.0)"); - return; - } - // Note: when backporting a texture op with a shadow sampler, only take the X component of it - generated_source.append("%s", is_shadow ? "shadow" : "texture"); - generated_source.append("%s", tex_sampler_dim_name[sampler_dim]); - } - else - { - if (ir->op == ir_txf || ir->op == ir_txf_ms){ - generated_source.append("texelFetch"); - } else { - // The signature changed from vec4 to float, so when forward porting we need to wrap it - if (is_shadow && ir->type->vector_elements > 2){ - generated_source.append(ir->type->name); - generated_source.append("("); - } - - generated_source.append("texture"); - } - - } - - if (is_array && state->EXT_texture_array_enable) - generated_source.append("Array"); - - if (is_proj) - generated_source.append("Proj"); - if (ir->op == ir_txl) - generated_source.append("Lod"); - if (ir->op == ir_txd) - generated_source.append("Grad"); - if (ir->offset != NULL) - generated_source.append("Offset"); - - if (state->es_shader) - { - /*if ((is_shadow && state->EXT_shadow_samplers_enable) || - (ir->op == ir_txl && state->EXT_shader_texture_lod_enable)) - { - generated_source.append("EXT"); - }*/ - } - - if (ir->op == ir_txd) - { - /*if (state->es_shader && state->EXT_shader_texture_lod_enable) - generated_source.append("EXT"); - else */if (!state->es_shader && state->ARB_shader_texture_lod_enable) - generated_source.append("ARB"); - } - - generated_source.append(" ("); - - // sampler - ir->sampler->accept(this); - generated_source.append(", "); - - // texture coordinate - - if(sampler_uv_dim > 4) { // samplerCubeArrayShadow (jesus christ) - ir->coordinate->accept(this); - generated_source.append(", "); - ir->shadow_comparator->accept(this); // the "float compare" bit, because khronos people were not crazy enough for vec5 - }else if(is_shadow || is_proj) { // these two need to generate a new vector because of the split - generated_source.append("vec%i(", sampler_uv_dim); - ir->coordinate->accept(this); - if(is_shadow) { - generated_source.append(", "); - ir->shadow_comparator->accept(this); - } - if(is_proj) { - generated_source.append(", "); - ir->projector->accept(this); - } - generated_source.append(")"); - }else { - ir->coordinate->accept(this); // accept as usual if the function aint wacky - } - GLenum type_enum = ir->sampler->type->gl_type; - bool buffer_texture_sampler; - switch(type_enum) { - case GL_SAMPLER_BUFFER: - case GL_INT_SAMPLER_BUFFER: - case GL_UNSIGNED_INT_SAMPLER_BUFFER: - case GL_IMAGE_BUFFER: - case GL_INT_IMAGE_BUFFER: - case GL_UNSIGNED_INT_IMAGE_BUFFER: - buffer_texture_sampler = true; - break; - default: - buffer_texture_sampler = false; - } - // lod - // Don't print LOD if fetching texel from buffer texture - bool is_txf_from_buffer_texture = ir->op == ir_txf && buffer_texture_sampler; - if ((ir->op == ir_txl || ir->op == ir_txf) && state->language_version >= 130 && !is_txf_from_buffer_texture) - { - generated_source.append(", "); - ir->lod_info.lod->accept(this); - } - - // sample index - if (ir->op == ir_txf_ms) - { - generated_source.append(", "); - ir->lod_info.sample_index->accept(this); - } - - // grad - if (ir->op == ir_txd) - { - generated_source.append(", "); - ir->lod_info.grad.dPdx->accept(this); - generated_source.append(", "); - ir->lod_info.grad.dPdy->accept(this); - } - - // texel offset - if (ir->offset != NULL) - { - generated_source.append(", "); - ir->offset->accept(this); - } - - // lod bias - if (ir->op == ir_txb) - { - generated_source.append(", "); - ir->lod_info.bias->accept(this); - } - - // Close the function call - generated_source.append(")"); - - // Handle forward/back porting - if (is_shadow) { - //printf("stateversion: %i, %i\n", state->language_version, state->original_language_version); - if (state->language_version >= 130 && ir->type->vector_elements > 2){ - printf("closing vec4 wrapper"); - generated_source.append(")"); // Close the vec4 wrapper - } else { - if (state->language_version < 130 && state->original_language_version >= 130) { - printf("reducing vec4 to float"); - generated_source.append(".x"); // Reduce from vec4 to float - } - } - } -} - -void -IR_TO_GLSL::visit(ir_swizzle* ir) -{ - const unsigned swiz[4] = { - ir->mask.x, - ir->mask.y, - ir->mask.z, - ir->mask.w, - }; - - if (ir->val->type == glsl_type::float_type || - ir->val->type == glsl_type::int_type || - ir->val->type == glsl_type::uint_type) - { - if (ir->mask.num_components != 1) - { - print_type(generated_source, ir->type, true); - generated_source.append("("); - } - } - - ir->val->accept(this); - - if (ir->val->type == glsl_type::float_type || - ir->val->type == glsl_type::int_type || - ir->val->type == glsl_type::uint_type) - { - if (ir->mask.num_components != 1) - { - generated_source.append(")"); - } - return; - } - - // Swizzling scalar types is not allowed so just return now. - if (ir->val->type->vector_elements == 1) - return; - - generated_source.append("."); - for (unsigned i = 0; i < ir->mask.num_components; i++) - { - generated_source.append("%c", "xyzw"[swiz[i]]); - } -} - -void -IR_TO_GLSL::visit(ir_dereference_variable* ir) -{ - ir_variable* var = ir->variable_referenced(); - print_var_name(var); -} - -void -IR_TO_GLSL::visit(ir_dereference_array* ir) -{ - ir->array->accept(this); - generated_source.append("["); - ir->array_index->accept(this); - generated_source.append("]"); -} - -void -IR_TO_GLSL::visit(ir_dereference_record* ir) -{ - ir->record->accept(this); - - const char* field_name = - ir->record->type->fields.structure[ir->field_idx].name; - generated_source.append(".%s ", field_name); -} - -bool -IR_TO_GLSL::try_print_array_assignment(ir_dereference* lhs, ir_rvalue* rhs) -{ - if (this->state->language_version >= 120) - return false; - ir_dereference_variable* rhsarr = rhs->as_dereference_variable(); - if (rhsarr == NULL) - return false; - const glsl_type* lhstype = lhs->type; - const glsl_type* rhstype = rhsarr->type; - if (!lhstype->is_array() || !rhstype->is_array()) - return false; - if (lhstype->array_size() != rhstype->array_size()) - return false; - if (lhstype->base_type != rhstype->base_type) - return false; - - const unsigned size = rhstype->array_size(); - for (unsigned i = 0; i < size; i++) - { - lhs->accept(this); - generated_source.append("[%d]=", i); - rhs->accept(this); - generated_source.append("[%d]", i); - if (i != size - 1) - generated_source.append(";"); - } - return true; -} - -void -IR_TO_GLSL::emit_assignment_part(ir_dereference* lhs, ir_rvalue* rhs, unsigned write_mask, ir_rvalue* dstIndex) -{ - lhs->accept(this); - - if (dstIndex) - { - // if dst index is a constant, then emit a swizzle - ir_constant* dstConst = dstIndex->as_constant(); - if (dstConst) - { - const char* comps = "xyzw"; - char comp = comps[dstConst->get_int_component(0)]; - generated_source.append(".%c", comp); - } - else - { - generated_source.append("["); - dstIndex->accept(this); - generated_source.append("]"); - } - } - - char mask[5]; - unsigned j = 0; - const glsl_type* lhsType = lhs->type; - const glsl_type* rhsType = rhs->type; - if (!dstIndex && lhsType->matrix_columns <= 1 && lhsType->vector_elements > 1 && write_mask != (1 << lhsType->vector_elements) - 1) - { - for (unsigned i = 0; i < 4; i++) { - if ((write_mask & (1 << i)) != 0) { - mask[j] = "xyzw"[i]; - j++; - } - } - lhsType = glsl_type::get_instance(lhsType->base_type, j, 1); - } - mask[j] = '\0'; - bool hasWriteMask = false; - if (mask[0]) - { - generated_source.append(".%s", mask); - hasWriteMask = true; - } - - generated_source.append(" = "); - - bool rhs_nan_check = global->enable_nan_check && - lhs->variable_referenced()->data.mode == ir_var_shader_out && - lhsType->is_float(); - if(rhs_nan_check) generated_source.append("_ltw_removenan("); - - bool typeMismatch = !dstIndex && (lhsType != rhsType); - const bool addSwizzle = hasWriteMask && typeMismatch; - if (typeMismatch) - { - if (!addSwizzle) - print_type(generated_source, lhsType, true); - generated_source.append("("); - } - - rhs->accept(this); - - if (typeMismatch) - { - generated_source.append(")"); - if (addSwizzle) - generated_source.append(".%s", mask); - } - - if(rhs_nan_check) generated_source.append(")"); -} - -// Try to print (X = X + const) as (X += const), mostly to satisfy -// OpenGL ES 2.0 loop syntax restrictions. -static bool try_print_increment(IR_TO_GLSL* vis, ir_assignment* ir) -{ - //if (ir->condition) - // return false; - - // Needs to be + on rhs - ir_expression* rhsOp = ir->rhs->as_expression(); - if (!rhsOp || rhsOp->operation != ir_binop_add) - return false; - - // Needs to write to whole variable - ir_variable* lhsVar = ir->whole_variable_written(); - if (lhsVar == NULL) - return false; - - // Types must match - if (ir->lhs->type != ir->rhs->type) - return false; - - // Type must be scalar - if (!ir->lhs->type->is_scalar()) - return false; - - // rhs0 must be variable deref, same one as lhs - ir_dereference_variable* rhsDeref = rhsOp->operands[0]->as_dereference_variable(); - if (rhsDeref == NULL) - return false; - if (lhsVar != rhsDeref->var) - return false; - - // rhs1 must be a constant - ir_constant* rhsConst = rhsOp->operands[1]->as_constant(); - if (!rhsConst) - return false; - - // print variable name - ir->lhs->accept(vis); - - // print ++ or +=const - if (ir->lhs->type->base_type <= GLSL_TYPE_INT && rhsConst->is_one()) - { - vis->generated_source.append("++"); - } - else - { - vis->generated_source.append(" += "); - rhsConst->accept(vis); - } - - return true; -} - -void -IR_TO_GLSL::visit(ir_assignment* ir) -{ - // if this is a loop induction variable initial assignment, and we aren't inside loop body: - // do not print it (will be printed when inside loop body) - if (!inside_loop_body) - { - ir_variable* whole_var = ir->whole_variable_written(); - if (/*!ir->condition &&*/ whole_var) - { - ir_loop* lo = whole_var->as_loop(); - if (lo) - { - loop_variable_state* inductor_state = loopstate->get(lo); - if (inductor_state && inductor_state->induction_variables.length() == 1 && - can_emit_canonical_for(inductor_state)) - { - skipped_this_ir = true; - return; - } - } - } - } - - if (this->mode != 0) - { - // assignments in global scope are postponed to main function - assert(!global->main_function_done); - global->global_assignements.push_tail(new(global->mem_ctx) ga_entry(ir)); - generated_source.append("//"); // for the ; that will follow (ugly, I know) - return; - } - - // if RHS is ir_triop_vector_insert, then we have to do some special dance. If source expression is: - // dst = vector_insert (a, b, idx) - // then emit it like: - // dst = a; - // dst.idx = b; - ir_expression* rhsOp = ir->rhs->as_expression(); - if (rhsOp && rhsOp->operation == ir_triop_vector_insert) - { - // skip assignment if lhs and rhs would be the same - bool skip_assign = false; - ir_dereference_variable* lhsDeref = ir->lhs->as_dereference_variable(); - ir_dereference_variable* rhsDeref = rhsOp->operands[0]->as_dereference_variable(); - if (lhsDeref && rhsDeref) - { - if (lhsDeref->var == rhsDeref->var) - skip_assign = true; - } - - if (!skip_assign) - { - emit_assignment_part(ir->lhs, rhsOp->operands[0], ir->write_mask, NULL); - generated_source.append(";"); - } - emit_assignment_part(ir->lhs, rhsOp->operands[1], ir->write_mask, rhsOp->operands[2]); - return; - } - - if (try_print_increment(this, ir)) - return; - - if (try_print_array_assignment(ir->lhs, ir->rhs)) - return; - - /* - if (ir->condition) - { - generated_source.append("if ("); - ir->condition->accept(this); - generated_source.append(") "); - } - */ - - emit_assignment_part(ir->lhs, ir->rhs, ir->write_mask, NULL); -} - -#ifdef _MSC_VER -#define isnan(x) _isnan(x) -#define isinf(x) (!_finite(x)) -#endif - -#define fpcheck(x) (isnan(x) || isinf(x)) - -void -print_float(sbuffer& str, float f) -{ - // Kind of roundabout way, but this is to satisfy two things: - // * MSVC and gcc-based compilers differ a bit in how they treat float - // widht/precision specifiers. Want to match for tests. - // * GLSL (early version at least) require floats to have ".0" or - // exponential notation. - char tmp[64]; - snprintf(tmp, 64, "%.7g", f); - - char* posE = NULL; - posE = strchr(tmp, 'e'); - if (!posE) - posE = strchr(tmp, 'E'); - - // snprintf formats infinity as inf.0 or -inf.0, which isn't useful here. - // GLSL has no infinity constant so print an equivalent expression instead. - if (f == HUGE_VALF) - strcpy(tmp, "(1.0/0.0)"); - - if (f == -HUGE_VALF) - strcpy(tmp, "(-1.0/0.0)"); - - // Do similar thing for NaN - if (f != f) - strcpy(tmp, "(0.0/0.0)"); - -#if _MSC_VER - // While gcc would print something like 1.0e+07, MSVC will print 1.0e+007 - - // only for exponential notation, it seems, will add one extra useless zero. Let's try to remove - // that so compiler output matches. - if (posE != NULL) - { - if ((posE[1] == '+' || posE[1] == '-') && posE[2] == '0') - { - char* p = posE + 2; - while (p[0]) - { - p[0] = p[1]; - ++p; - } - } - } -#endif - - str.append("%s", tmp); - - // need to append ".0"? - if (!strchr(tmp, '.') && (posE == NULL)) - str.append(".0"); -} - -void IR_TO_GLSL::print_float_checked(sbuffer& str, float f) { - int valid_float = 0; - char float_dest[5]; - snprintf(float_dest, 5, "%f", f); - valid_float = strstr(float_dest, "nan") == nullptr && strstr(float_dest, "inf") == nullptr; - if (!valid_float) - { - // Non-printable float. If we have bit conversions, we're fine. otherwise do hand-wavey things in print_float(). - if ((state->es_shader && (state->language_version >= 300)) - || (state->language_version >= 330) - || (state->ARB_shader_bit_encoding_enable)) - { - str.append("uintBitsToFloat(%uu)", *((unsigned int*)(&f))); - return; - } - } - print_float(str, f); - return; -} - -void -IR_TO_GLSL::visit(ir_constant* ir) -{ - const glsl_type* type = ir->type; - - if (type == glsl_type::float_type) - { - print_float_checked(generated_source, ir->value.f[0]); - return; - } - else if (type == glsl_type::int_type) - { - // Need special handling for INT_MIN - if (ir->value.u[0] == 0x80000000) - generated_source.append("int(0x%X)", ir->value.i[0]); - else - generated_source.append("%d", ir->value.i[0]); - return; - } - else if (type == glsl_type::uint_type) - { - // ES 2.0 doesn't support uints, neither does GLSL < 130 - if ((state->es_shader && (state->language_version < 300)) - || (state->language_version < 130)) - generated_source.append("%u", ir->value.u[0]); - else - { - // Old Adreno drivers try to be smart with '0u' and treat that as 'const int'. Sigh. - if (ir->value.u[0] == 0) - generated_source.append("uint(0)"); - else - generated_source.append("%uu", ir->value.u[0]); - } - return; - } - - const glsl_type* const base_type = ir->type->get_base_type(); - - print_type(generated_source, type, true); - generated_source.append("("); - - if (ir->type->is_array()) - { - for (unsigned i = 0; i < ir->type->length; i++) - { - if (i != 0) - generated_source.append(", "); - ir->get_array_element(i)->accept(this); - } - } - else if (ir->type->is_struct()) - { - bool first = true; - for(unsigned int i = 0; i < ir->type->length; i++) - { - ir_instruction* inst = ir->const_elements[i]; - if (!first) - generated_source.append(", "); - first = false; - inst->accept(this); - } - } - else - { - bool first = true; - for (unsigned i = 0; i < ir->type->components(); i++) - { - if (!first) - generated_source.append(", "); - first = false; - switch (base_type->base_type) { - case GLSL_TYPE_UINT: - { - // ES 2.0 doesn't support uints, neither does GLSL < 130 - if ((state->es_shader && (state->language_version < 300)) - || (state->language_version < 130)) - generated_source.append("%u", ir->value.u[i]); - else - generated_source.append("%uu", ir->value.u[i]); - break; - } - case GLSL_TYPE_INT: - { - // Need special handling for INT_MIN - if (ir->value.u[i] == 0x80000000) - generated_source.append("int(0x%X)", ir->value.i[i]); - else - generated_source.append("%d", ir->value.i[i]); - break; - } - case GLSL_TYPE_FLOAT: print_float_checked(generated_source, ir->value.f[i]); break; - case GLSL_TYPE_BOOL: generated_source.append("%d", ir->value.b[i]); break; - default: assert(0); - } - } - } - generated_source.append(")"); -} - -void -IR_TO_GLSL::visit(ir_call* ir) -{ - if (this->mode != 0) - { - // calls in global scope are postponed to main function - assert(!global->main_function_done); - global->global_assignements.push_tail(new(global->mem_ctx) ga_entry(ir)); - generated_source.append("//"); // for the ; that will follow (ugly, I know) - return; - } - - if (ir->return_deref) - { - visit(ir->return_deref); - generated_source.append(" = "); - } - - generated_source.append("%s (", ir->callee_name()); - bool first = true; - foreach_in_list(ir_instruction, inst, &ir->actual_parameters) - { - if (!first) - generated_source.append(", "); - inst->accept(this); - first = false; - } - generated_source.append(")"); -} - -void -IR_TO_GLSL::visit(ir_return* ir) -{ - generated_source.append("return"); - - ir_rvalue* const value = ir->get_value(); - if (value) - { - generated_source.append(" "); - value->accept(this); - } -} - -void -IR_TO_GLSL::visit(ir_discard* ir) -{ - if (ir->condition != NULL) - { - generated_source.append("if ( "); - ir->condition->accept(this); - generated_source.append(") {"); - } - - generated_source.append("discard"); - - if (ir->condition != NULL) { - generated_source.append(" ;}"); - } -} - -void -IR_TO_GLSL::visit(ir_demote* ir) -{ - generated_source.append("(demote TODO)"); -} - -void -IR_TO_GLSL::visit(ir_if* ir) -{ - generated_source.append("if ("); - ir->condition->accept(this); - - generated_source.append(")\n"); - indent(); - indentation++; previous_skipped = false; - - generated_source.append("{\n"); - foreach_in_list(ir_instruction, inst, &ir->then_instructions) - { - indent(); - inst->accept(this); - end_statement_line(); - } - - indentation--; - indent(); - generated_source.append("}\n"); - - if (!ir->else_instructions.is_empty()) - { - indent(); - generated_source.append("else\n"); - indent(); - indentation++; previous_skipped = false; - - generated_source.append("{\n"); - foreach_in_list(ir_instruction, inst, &ir->else_instructions) - { - indent(); - inst->accept(this); - end_statement_line(); - } - indentation--; - indent(); - generated_source.append("}\n"); - skipped_this_ir = true; - } -} - -bool -IR_TO_GLSL::can_emit_canonical_for(loop_variable_state* ls) -{ - if (ls == NULL) - return false; - - if (ls->induction_variables.is_empty()) - return false; - - if (ls->terminators.is_empty()) - return false; - - // only support for loops with one terminator condition - int terminatorCount = ls->terminators.length(); - if (terminatorCount != 1) - return false; - - return true; -} - -bool -IR_TO_GLSL::emit_canonical_for(ir_loop* ir) -{ - loop_variable_state* const ls = this->loopstate->get(ir); - - if (!can_emit_canonical_for(ls)) - return false; - - hash_table* terminator_hash = _mesa_pointer_hash_table_create(NULL); - hash_table* induction_hash = _mesa_pointer_hash_table_create(NULL); - - generated_source.append("for ("); - inside_loop_body = true; - - // emit loop induction variable declarations. - // only for loops with single induction variable, to avoid cases of different types of them - if (ls->induction_variables.length() == 1) - { - foreach_in_list(loop_variable, indvar, &ls->induction_variables) - { - ir_loop* lo = indvar->var->as_loop(); - if (lo) - { - if (!this->loopstate->get(lo)) - continue; - } - ir_variable* var = indvar->var; - print_type(generated_source, var->type, false); - generated_source.append(" "); - print_var_name(var); - print_type_post(generated_source, var->type, false); - if (indvar->first_assignment) - { - generated_source.append(" = "); - // if the var is an array add the proper initializer - if (var->type->is_vector()) - { - print_type(generated_source, var->type, false); - generated_source.append("("); - } - indvar->first_assignment->accept(this); - if (var->type->is_vector()) - { - generated_source.append(")"); - } - } - } - } - generated_source.append("; "); - - // emit loop terminating conditions - foreach_in_list(loop_terminator, term, &ls->terminators) - { - _mesa_hash_table_insert(terminator_hash, term->ir, term); - - // IR has conditions in the form of "if (x) break", - // whereas for loop needs them negated, in the form - // if "while (x) continue the loop". - // See if we can print them using syntax that reads nice. - bool handled = false; - ir_expression* term_expr = term->ir->condition->as_expression(); - if (term_expr) - { - // Binary comparison conditions - const char* termOp = NULL; - switch (term_expr->operation) - { - case ir_binop_less: termOp = "<"; break; - //case ir_binop_greater: termOp = ">"; break; - //case ir_binop_lequal: termOp = "<="; break; - case ir_binop_gequal: termOp = ">="; break; - case ir_binop_equal: termOp = "=="; break; - case ir_binop_nequal: termOp = "!="; break; - default: break; - } - if (termOp != NULL) - { - term_expr->operands[0]->accept(this); - generated_source.append(" %s ", termOp); - term_expr->operands[1]->accept(this); - handled = true; - } - - // Unary logic not - if (!handled && term_expr->operation == ir_unop_logic_not) - { - term_expr->operands[0]->accept(this); - handled = true; - } - } - - // More complex condition, print as "!(x)" - if (!handled) - { - generated_source.append("!("); - term->ir->condition->accept(this); - generated_source.append(")"); - } - } - generated_source.append("; "); - - // emit loop induction variable updates - bool first = true; - foreach_in_list(loop_variable, indvar, &ls->induction_variables) - { - _mesa_hash_table_insert(induction_hash, indvar->first_assignment, indvar); - if (!first) - generated_source.append(", "); - visit(indvar->first_assignment); - first = false; - } - generated_source.append(")\n"); - indentation++; previous_skipped = false; - - indent(); - generated_source.append("{\n"); - - inside_loop_body = false; - - // emit loop body - foreach_in_list(ir_instruction, inst, &ir->body_instructions) - { - // skip termination & induction statements, - // they are part of "for" clause - if (_mesa_hash_table_search(terminator_hash, inst)) - continue; - if (_mesa_hash_table_search(induction_hash, inst)) - continue; - - indent(); - inst->accept(this); - end_statement_line(); - } - indentation--; - - indent(); - generated_source.append("}\n"); - - _mesa_hash_table_destroy(terminator_hash, NULL); - _mesa_hash_table_destroy(induction_hash, NULL); - - return true; -} - -void -IR_TO_GLSL::visit(ir_loop* ir) -{ - if (emit_canonical_for(ir)) - return; - - generated_source.append("while (true)\n{\n"); - indentation++; previous_skipped = false; - foreach_in_list(ir_instruction, inst, &ir->body_instructions) - { - indent(); - inst->accept(this); - end_statement_line(); - } - indentation--; - indent(); - generated_source.append("}\n"); -} - -void -IR_TO_GLSL::visit(ir_loop_jump* ir) -{ - generated_source.append("%s", ir->is_break() ? "break" : "continue"); -} - -void -IR_TO_GLSL::visit(ir_emit_vertex* ir) -{ - generated_source.append("EmitVertex();"); - ir->stream->accept(this); - generated_source.append("\n"); -} - -void -IR_TO_GLSL::visit(ir_end_primitive* ir) -{ - generated_source.append("EndPrimitive();"); - ir->stream->accept(this); - generated_source.append("\n"); -} - -void -IR_TO_GLSL::visit(ir_barrier*) -{ - generated_source.append("barrier();\n"); -} - -void IR_TO_GLSL::visit_uniform_block(ir_variable *ir) { - const glsl_type* itype = ir->get_interface_type(); - - for ( int i = 0; i < global->num_uniform_blocks; i++ ) - { - if ( itype->name == global->processed_uniform_blocks[i] ) - { - skipped_this_ir = true; - return; - } - } - - assert( global->num_uniform_blocks < sizeof( global->processed_uniform_blocks ) / sizeof( global->processed_uniform_blocks[0] ) ); - - global->processed_uniform_blocks[global->num_uniform_blocks++] = itype->name; - - const char* packing = nullptr; - - switch ( itype->interface_packing ) - { - case GLSL_INTERFACE_PACKING_STD140: packing = "std140"; break; - case GLSL_INTERFACE_PACKING_STD430: packing = "std430"; break; - case GLSL_INTERFACE_PACKING_SHARED: packing = "shared"; break; - default: packing = nullptr; break; - } - - bool explicit_location = ir->data.explicit_location; - bool output_layout_qualifier = packing || explicit_location; - if(output_layout_qualifier) { - generated_source.append("layout("); - char insert_comma[] = {0, 0}; - if(packing) { - generated_source.append("%s%s", insert_comma, packing); - insert_comma[0] = ','; - } - if(explicit_location) { - generated_source.append("%slocation=%i", insert_comma, ir->data.location); - insert_comma[0] = ','; - } - generated_source.append(")"); - } - generated_source.append( "uniform %s {\n", itype->name ); - - for ( unsigned int i = 0; i < itype->length; i++ ) - { - const glsl_type* field_type = itype->fields.structure[i].type; - const char* field_name = itype->fields.structure[i].name; - const unsigned int precision_int = itype->fields.structure[i].precision; - generated_source.append( " %s ", precision[precision_int]); - print_type( generated_source, field_type, false ); - generated_source.append( " %s", field_name ); - print_type_post( generated_source, field_type, false ); - generated_source.append( ";\n" ); - } - - generated_source.append( "}" ); - - if ( ir->is_interface_instance() ) - { - generated_source.append( " %s", ir->name ); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_glsl_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_glsl_visitor.h deleted file mode 100644 index e75f6d1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_glsl_visitor.h +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_PRINT_GLSL_VISITOR_H -#define IR_PRINT_GLSL_VISITOR_H - -#include -#include "../compiler/glsl/ir.h" -#include "../compiler/glsl/ir_visitor.h" -#include "../mesa/program/symbol_table.h" -#include "st_printf.h" - -class loop_state; -class loop_variable_state; -class IR_TO_GLSL : public ir_visitor -{ -public: - struct global_print_tracker - { - global_print_tracker(); - ~global_print_tracker(); - - const char* processed_uniform_blocks[64] = { 0 }; - int num_uniform_blocks = 0; - unsigned var_counter; - hash_table* var_hash; - exec_list global_assignements; - void* mem_ctx; - bool main_function_done; - bool enable_nan_check; - }; - -public: - static char * Convert( - exec_list *instructions, - struct _mesa_glsl_parse_state *state); - static void print_type(sbuffer& str, const glsl_type *t, bool arraySize); - static void print_type_post(sbuffer& str, const glsl_type *t, bool arraySize); - -public: - IR_TO_GLSL( - sbuffer& str, - global_print_tracker* vGlobals, - const _mesa_glsl_parse_state* vState); - virtual ~IR_TO_GLSL(); - - void print_float_checked(sbuffer& str, float f); - void indent(void); - void end_statement_line(); - void newline_indent(); - void newline_deindent(); - void print_var_name(ir_variable* v); - const char *unique_name(ir_variable *var); - void emit_assignment_part(ir_dereference* lhs, ir_rvalue* rhs, unsigned write_mask, ir_rvalue* dstIndex); - bool can_emit_canonical_for(loop_variable_state *ls); - bool emit_canonical_for(ir_loop* ir); - bool try_print_array_assignment(ir_dereference* lhs, ir_rvalue* rhs); - - virtual void visit(ir_rvalue *); - virtual void visit(ir_variable *); - virtual void visit(ir_function_signature *); - virtual void visit(ir_function *); - virtual void visit(ir_expression *); - virtual void visit(ir_texture *); - virtual void visit(ir_swizzle *); - virtual void visit(ir_dereference_variable *); - virtual void visit(ir_dereference_array *); - virtual void visit(ir_dereference_record *); - virtual void visit(ir_assignment *); - virtual void visit(ir_constant *); - virtual void visit(ir_call *); - virtual void visit(ir_return *); - virtual void visit(ir_discard *); - virtual void visit(ir_demote *); - virtual void visit(ir_if *); - virtual void visit(ir_loop *); - virtual void visit(ir_loop_jump *); - virtual void visit(ir_emit_vertex *); - virtual void visit(ir_end_primitive *); - virtual void visit(ir_barrier *); - void visit_uniform_block(ir_variable* var); - -public: - int mode = 1; - global_print_tracker* global; - const _mesa_glsl_parse_state* state; - hash_table *printable_names = 0; - _mesa_symbol_table *symbols = 0; - void *mem_ctx = 0; - sbuffer& generated_source; - loop_state* loopstate = 0; - int expression_depth = 0; - int indentation = 0; - bool inside_loop_body = false; - bool skipped_this_ir = false; - bool previous_skipped = false; - int uses_texlod_impl = 0; // 3 bits per tex_dimension, bit set for each precision if any texture sampler needs the GLES2 lod workaround. - int uses_texlodproj_impl = 0; // 3 bits per tex_dimension, bit set for each precision if any texture sampler needs the GLES2 lod workaround. -}; - -#endif /* IR_PRINT_GLSL_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_ir_visitor.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_ir_visitor.cpp deleted file mode 100644 index 3f6e732..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_ir_visitor.cpp +++ /dev/null @@ -1,617 +0,0 @@ -#include -#include "ir_print_ir_visitor.h" -#include "../compiler/glsl_types.h" -#include "../compiler/glsl/glsl_parser_extras.h" -#include "../util/macros.h" -#include "../util/hash_table.h" -#include "../util/u_string.h" - -void IR_TO_IR::print_type(sbuffer& str, const glsl_type *t) -{ - if (t->is_array()) - { - str.append("(array "); - print_type(str, t->fields.array); - str.append(" %u)", t->length); - } - else if (t->is_struct() && !is_gl_identifier(t->name)) - { - str.append("%s@%p", t->name, (void *)t); - } - else - { - str.append("%s", t->name); - } -} - -char* IR_TO_IR::Convert(exec_list *instructions, struct _mesa_glsl_parse_state *state) -{ - sbuffer res; - - if (state) - { - for (unsigned i = 0; i < state->num_user_structures; i++) - { - const glsl_type *const s = state->user_structures[i]; - res.append("(structure (%s) (%s@%p) (%u) (\n", - s->name, s->name, (void *)s, s->length); - for (unsigned j = 0; j < s->length; j++) - { - res.append("\t(("); - print_type(res, s->fields.structure[j].type); - res.append(")(%s))\n", s->fields.structure[j].name); - } - res.append(")\n"); - } - } - - res.append("(\n"); - foreach_in_list(ir_instruction, ir, instructions) - { - ir_instruction *deconsted = const_cast(ir); - IR_TO_IR v(res); - deconsted->accept(&v); - if (ir->ir_type != ir_type_function) - res.append("\n"); - } - res.append(")\n"); - - // DANGER, A NEW STRING IS ALLOCATED ! - // YOUR PROGRAM HAS TO FREE IT ! - return res.c_str_take_ownership(); -} - -IR_TO_IR::IR_TO_IR(sbuffer& str) : generated_source(str) -{ - indentation = 0; - printable_names = _mesa_pointer_hash_table_create(NULL); - symbols = _mesa_symbol_table_ctor(); - mem_ctx = ralloc_context(NULL); -} - -IR_TO_IR::~IR_TO_IR() -{ - _mesa_hash_table_destroy(printable_names, NULL); - _mesa_symbol_table_dtor(symbols); - ralloc_free(mem_ctx); -} - -void IR_TO_IR::indent(void) -{ - for (int i = 0; i < indentation; i++) - generated_source.append(" "); -} - -const char * -IR_TO_IR::unique_name(ir_variable *var) -{ - /* var->name can be NULL in function prototypes when a type is given for a - * parameter but no name is given. In that case, just return an empty - * string. Don't worry about tracking the generated name in the printable - * names hash because this is the only scope where it can ever appear. - */ - if (var->name == NULL) { - static unsigned arg = 1; - return ralloc_asprintf(this->mem_ctx, "parameter@%u", arg++); - } - - /* Do we already have a name for this variable? */ - struct hash_entry * entry = - _mesa_hash_table_search(this->printable_names, var); - - if (entry != NULL) { - return (const char *) entry->data; - } - - /* If there's no conflict, just use the original name */ - const char* name = NULL; - if (_mesa_symbol_table_find_symbol(this->symbols, var->name) == NULL) { - name = var->name; - } else { - static unsigned i = 1; - name = ralloc_asprintf(this->mem_ctx, "%s@%u", var->name, ++i); - } - _mesa_hash_table_insert(this->printable_names, var, (void *) name); - _mesa_symbol_table_add_symbol(this->symbols, name, var); - return name; -} - -void IR_TO_IR::visit(ir_rvalue *) -{ - generated_source.append("error"); -} - -void IR_TO_IR::visit(ir_variable *ir) -{ - generated_source.append("(declare "); - - char binding[32] = {0}; - if (ir->data.binding) - snprintf(binding, sizeof(binding), "binding=%i ", ir->data.binding); - - char loc[32] = {0}; - if (ir->data.location != -1) - snprintf(loc, sizeof(loc), "location=%i ", ir->data.location); - - char component[32] = {0}; - if (ir->data.explicit_component || ir->data.location_frac != 0) - snprintf(component, sizeof(component), "component=%i ", - ir->data.location_frac); - - char stream[32] = {0}; - if (ir->data.stream & (1u << 31)) { - if (ir->data.stream & ~(1u << 31)) { - snprintf(stream, sizeof(stream), "stream(%u,%u,%u,%u) ", - ir->data.stream & 3, (ir->data.stream >> 2) & 3, - (ir->data.stream >> 4) & 3, (ir->data.stream >> 6) & 3); - } - } else if (ir->data.stream) { - snprintf(stream, sizeof(stream), "stream%u ", ir->data.stream); - } - - char image_format[32] = {0}; - if (ir->data.image_format) { - snprintf(image_format, sizeof(image_format), "format=%x ", - ir->data.image_format); - } - - const char *const cent = (ir->data.centroid) ? "centroid " : ""; - const char *const samp = (ir->data.sample) ? "sample " : ""; - const char *const patc = (ir->data.patch) ? "patch " : ""; - const char *const inv = (ir->data.invariant) ? "invariant " : ""; - const char *const explicit_inv = (ir->data.explicit_invariant) ? "explicit_invariant " : ""; - const char *const prec = (ir->data.precise) ? "precise " : ""; - const char *const bindless = (ir->data.bindless) ? "bindless " : ""; - const char *const bound = (ir->data.bound) ? "bound " : ""; - const char *const memory_read_only = (ir->data.memory_read_only) ? "readonly " : ""; - const char *const memory_write_only = (ir->data.memory_write_only) ? "writeonly " : ""; - const char *const memory_coherent = (ir->data.memory_coherent) ? "coherent " : ""; - const char *const memory_volatile = (ir->data.memory_volatile) ? "volatile " : ""; - const char *const memory_restrict = (ir->data.memory_restrict) ? "restrict " : ""; - const char *const mode[] = { "", "uniform ", "shader_storage ", - "shader_shared ", "shader_in ", "shader_out ", - "in ", "out ", "inout ", - "const_in ", "sys ", "temporary " }; - STATIC_ASSERT(ARRAY_SIZE(mode) == ir_var_mode_count); - /* aiekick 03/01/2020 */ - const char *const precision[] = { "", "highp ", "mediump ", "lowp " }; - const char *const interp[] = { "", "smooth", "flat", "noperspective", "EXPLICIT ", "COLOR " }; - STATIC_ASSERT(ARRAY_SIZE(interp) == INTERP_MODE_COUNT); - - generated_source.append("(%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s) ", - binding, loc, component, cent, bindless, bound, - image_format, memory_read_only, memory_write_only, - memory_coherent, memory_volatile, memory_restrict, - samp, patc, inv, explicit_inv, prec, precision[ir->data.precision], mode[ir->data.mode], - stream, - interp[ir->data.interpolation]); - - print_type(generated_source, ir->type); - generated_source.append(" %s)", unique_name(ir)); -} - - -void IR_TO_IR::visit(ir_function_signature *ir) -{ - _mesa_symbol_table_push_scope(symbols); - generated_source.append("(signature "); - indentation++; - - print_type(generated_source, ir->return_type); - generated_source.append("\n"); - indent(); - - generated_source.append("(parameters\n"); - indentation++; - - foreach_in_list(ir_variable, inst, &ir->parameters) { - indent(); - inst->accept(this); - generated_source.append("\n"); - } - indentation--; - - indent(); - generated_source.append(")\n"); - - indent(); - - generated_source.append("(\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->body) { - indent(); - inst->accept(this); - generated_source.append("\n"); - } - indentation--; - indent(); - generated_source.append("))\n"); - indentation--; - _mesa_symbol_table_pop_scope(symbols); -} - - -void IR_TO_IR::visit(ir_function *ir) -{ - generated_source.append("(%s function %s\n", ir->is_subroutine ? "subroutine" : "", ir->name); - indentation++; - foreach_in_list(ir_function_signature, sig, &ir->signatures) { - indent(); - sig->accept(this); - generated_source.append("\n"); - } - indentation--; - indent(); - generated_source.append(")\n\n"); -} - - -void IR_TO_IR::visit(ir_expression *ir) -{ - generated_source.append("(expression "); - - print_type(generated_source, ir->type); - - generated_source.append(" %s ", ir_expression_operation_strings[ir->operation]); - - for (unsigned i = 0; i < ir->num_operands; i++) { - ir->operands[i]->accept(this); - } - - generated_source.append(") "); -} - - -void IR_TO_IR::visit(ir_texture *ir) -{ - generated_source.append("(%s ", ir->opcode_string()); - - if (ir->op == ir_samples_identical) { - ir->sampler->accept(this); - generated_source.append(" "); - ir->coordinate->accept(this); - generated_source.append(")"); - return; - } - - print_type(generated_source, ir->type); - generated_source.append(" "); - - ir->sampler->accept(this); - generated_source.append(" "); - - if (ir->op != ir_txs && ir->op != ir_query_levels && - ir->op != ir_texture_samples) { - ir->coordinate->accept(this); - - generated_source.append(" "); - - if (ir->offset != NULL) { - ir->offset->accept(this); - } else { - generated_source.append("0"); - } - - generated_source.append(" "); - } - - if (ir->op != ir_txf && ir->op != ir_txf_ms && - ir->op != ir_txs && ir->op != ir_tg4 && - ir->op != ir_query_levels && ir->op != ir_texture_samples) { - if (ir->projector) - ir->projector->accept(this); - else - generated_source.append("1"); - - if (ir->shadow_comparator) { - generated_source.append(" "); - ir->shadow_comparator->accept(this); - } else { - generated_source.append(" ()"); - } - } - - generated_source.append(" "); - switch (ir->op) - { - case ir_tex: - case ir_lod: - case ir_query_levels: - case ir_texture_samples: - break; - case ir_txb: - ir->lod_info.bias->accept(this); - break; - case ir_txl: - case ir_txf: - case ir_txs: - ir->lod_info.lod->accept(this); - break; - case ir_txf_ms: - ir->lod_info.sample_index->accept(this); - break; - case ir_txd: - generated_source.append("("); - ir->lod_info.grad.dPdx->accept(this); - generated_source.append(" "); - ir->lod_info.grad.dPdy->accept(this); - generated_source.append(")"); - break; - case ir_tg4: - ir->lod_info.component->accept(this); - break; - case ir_samples_identical: - unreachable("ir_samples_identical was already handled"); - }; - generated_source.append(")"); -} - - -void IR_TO_IR::visit(ir_swizzle *ir) -{ - const unsigned swiz[4] = { - ir->mask.x, - ir->mask.y, - ir->mask.z, - ir->mask.w, - }; - - generated_source.append("(swiz "); - for (unsigned i = 0; i < ir->mask.num_components; i++) { - generated_source.append("%c", "xyzw"[swiz[i]]); - } - generated_source.append(" "); - ir->val->accept(this); - generated_source.append(")"); -} - - -void IR_TO_IR::visit(ir_dereference_variable *ir) -{ - ir_variable *var = ir->variable_referenced(); - generated_source.append("(var_ref %s) ", unique_name(var)); -} - - -void IR_TO_IR::visit(ir_dereference_array *ir) -{ - generated_source.append("(array_ref "); - ir->array->accept(this); - ir->array_index->accept(this); - generated_source.append(") "); -} - - -void IR_TO_IR::visit(ir_dereference_record *ir) -{ - generated_source.append("(record_ref "); - ir->record->accept(this); - - const char *field_name = - ir->record->type->fields.structure[ir->field_idx].name; - generated_source.append(" %s) ", field_name); -} - - -void IR_TO_IR::visit(ir_assignment *ir) -{ - generated_source.append("(assign "); - - //if (ir->condition) - // ir->condition->accept(this); - - char mask[5]; - unsigned j = 0; - - for (unsigned i = 0; i < 4; i++) { - if ((ir->write_mask & (1 << i)) != 0) { - mask[j] = "xyzw"[i]; - j++; - } - } - mask[j] = '\0'; - - generated_source.append(" (%s) ", mask); - - ir->lhs->accept(this); - - generated_source.append(" "); - - ir->rhs->accept(this); - generated_source.append(") "); -} - - -void IR_TO_IR::visit(ir_constant *ir) -{ - generated_source.append("(constant "); - print_type(generated_source, ir->type); - generated_source.append(" ("); - - if (ir->type->is_array()) { - for (unsigned i = 0; i < ir->type->length; i++) - ir->get_array_element(i)->accept(this); - } else if (ir->type->is_struct()) { - for (unsigned i = 0; i < ir->type->length; i++) { - generated_source.append("(%s ", ir->type->fields.structure[i].name); - ir->get_record_field(i)->accept(this); - generated_source.append(")"); - } - } else { - for (unsigned i = 0; i < ir->type->components(); i++) { - if (i != 0) - generated_source.append(" "); - switch (ir->type->base_type) { - case GLSL_TYPE_UINT: generated_source.append("%u", ir->value.u[i]); break; - case GLSL_TYPE_INT: generated_source.append("%d", ir->value.i[i]); break; - case GLSL_TYPE_FLOAT: - if (ir->value.f[i] == 0.0f) - /* 0.0 == -0.0, so print with %f to get the proper sign. */ - generated_source.append("%f", ir->value.f[i]); - else if (fabs(ir->value.f[i]) < 0.000001f) - generated_source.append("%a", ir->value.f[i]); - else if (fabs(ir->value.f[i]) > 1000000.0f) - generated_source.append("%e", ir->value.f[i]); - else - generated_source.append("%f", ir->value.f[i]); - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: - generated_source.append("%" PRIu64, ir->value.u64[i]); - break; - case GLSL_TYPE_INT64: generated_source.append("%" PRIi64, ir->value.i64[i]); break; - case GLSL_TYPE_BOOL: generated_source.append("%d", ir->value.b[i]); break; - case GLSL_TYPE_DOUBLE: - if (ir->value.d[i] == 0.0) - /* 0.0 == -0.0, so print with %f to get the proper sign. */ - generated_source.append("%.1f", ir->value.d[i]); - else if (fabs(ir->value.d[i]) < 0.000001) - generated_source.append("%a", ir->value.d[i]); - else if (fabs(ir->value.d[i]) > 1000000.0) - generated_source.append("%e", ir->value.d[i]); - else - generated_source.append("%f", ir->value.d[i]); - break; - default: - unreachable("Invalid constant type"); - } - } - } - generated_source.append(")) "); -} - - -void -IR_TO_IR::visit(ir_call *ir) -{ - generated_source.append("(call %s ", ir->callee_name()); - if (ir->return_deref) - ir->return_deref->accept(this); - generated_source.append(" ("); - foreach_in_list(ir_rvalue, param, &ir->actual_parameters) { - param->accept(this); - } - generated_source.append("))\n"); -} - - -void -IR_TO_IR::visit(ir_return *ir) -{ - generated_source.append("(return"); - - ir_rvalue *const value = ir->get_value(); - if (value) { - generated_source.append(" "); - value->accept(this); - } - - generated_source.append(")"); -} - - -void -IR_TO_IR::visit(ir_discard *ir) -{ - generated_source.append("(discard "); - - if (ir->condition != NULL) { - generated_source.append(" "); - ir->condition->accept(this); - } - - generated_source.append(")"); -} - - -void -IR_TO_IR::visit(ir_demote *ir) -{ - generated_source.append("(demote)"); -} - - -void -IR_TO_IR::visit(ir_if *ir) -{ - generated_source.append("(if "); - ir->condition->accept(this); - - generated_source.append("(\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->then_instructions) { - indent(); - inst->accept(this); - generated_source.append("\n"); - } - - indentation--; - indent(); - generated_source.append(")\n"); - - indent(); - if (!ir->else_instructions.is_empty()) { - generated_source.append("(\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->else_instructions) { - indent(); - inst->accept(this); - generated_source.append("\n"); - } - indentation--; - indent(); - generated_source.append("))\n"); - } else { - generated_source.append("())\n"); - } -} - - -void -IR_TO_IR::visit(ir_loop *ir) -{ - generated_source.append("(loop (\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->body_instructions) { - indent(); - inst->accept(this); - generated_source.append("\n"); - } - indentation--; - indent(); - generated_source.append("))\n"); -} - - -void -IR_TO_IR::visit(ir_loop_jump *ir) -{ - generated_source.append("%s", ir->is_break() ? "break" : "continue"); -} - -void -IR_TO_IR::visit(ir_emit_vertex *ir) -{ - generated_source.append("(emit-vertex "); - ir->stream->accept(this); - generated_source.append(")\n"); -} - -void -IR_TO_IR::visit(ir_end_primitive *ir) -{ - generated_source.append("(end-primitive "); - ir->stream->accept(this); - generated_source.append(")\n"); -} - -void -IR_TO_IR::visit(ir_barrier *) -{ - generated_source.append("(barrier)\n"); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_ir_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_ir_visitor.h deleted file mode 100644 index f88c17d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/ir_print_ir_visitor.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_PRINT_IR_VISITOR_H -#define IR_PRINT_IR_VISITOR_H - -#include -#include "../compiler/glsl/ir.h" -#include "../compiler/glsl/ir_visitor.h" -#include "../mesa/program/symbol_table.h" -#include "st_printf.h" - -class IR_TO_IR : public ir_visitor -{ -public: - static char* Convert( - struct exec_list *instructions, - struct _mesa_glsl_parse_state *state); - static void print_type(sbuffer& str, const glsl_type *t); - -public: - IR_TO_IR(sbuffer& str); - virtual ~IR_TO_IR(); - - void indent(void); - - /** - * \name Visit methods - * - * As typical for the visitor pattern, there must be one \c visit method for - * each concrete subclass of \c ir_instruction. Virtual base classes within - * the hierarchy should not have \c visit methods. - */ - /*@{*/ - virtual void visit(ir_rvalue *); - virtual void visit(ir_variable *); - virtual void visit(ir_function_signature *); - virtual void visit(ir_function *); - virtual void visit(ir_expression *); - virtual void visit(ir_texture *); - virtual void visit(ir_swizzle *); - virtual void visit(ir_dereference_variable *); - virtual void visit(ir_dereference_array *); - virtual void visit(ir_dereference_record *); - virtual void visit(ir_assignment *); - virtual void visit(ir_constant *); - virtual void visit(ir_call *); - virtual void visit(ir_return *); - virtual void visit(ir_discard *); - virtual void visit(ir_demote *); - virtual void visit(ir_if *); - virtual void visit(ir_loop *); - virtual void visit(ir_loop_jump *); - virtual void visit(ir_emit_vertex *); - virtual void visit(ir_end_primitive *); - virtual void visit(ir_barrier *); - /*@}*/ - -private: - /** - * Fetch/generate a unique name for ir_variable. - * - * GLSL IR permits multiple ir_variables to share the same name. This works - * fine until we try to print it, when we really need a unique one. - */ - const char *unique_name(ir_variable *var); - - /** A mapping from ir_variable * -> unique printable names. */ - hash_table *printable_names; - _mesa_symbol_table *symbols; - - void *mem_ctx; - sbuffer& generated_source; - - int indentation; -}; - -#endif /* IR_PRINT_IR_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/optimizer.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/optimizer.cpp deleted file mode 100644 index 5d6d7e2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/optimizer.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "../../include/optimizer/optimizer.h" -#include "GlslConvert.h" - - - -Optimizer::Optimizer() - :instance(GlslConvert::Instance()) -{ -} - -std::string Optimizer::Optimize(std::string vShaderSource, xShaderStage vShaderType, int vGLSLVersion, int vTargetGLSLVersion, bool isESShader) -{ - //return instance.Optimize(vShaderSource.c_str(), GlslConvert::ShaderStage(vShaderType), GlslConvert::API_OPENGL_COMPAT, GlslConvert::LanguageTarget::LANGUAGE_TARGET_GLSL, vGLSLVersion, vTargetGLSLVersion, isESShader, {}); - //TODO stub - return "TODO STUB"; -} - -bool Optimizer::Failed() const noexcept -{ - return instance.Failed(); -} - -std::string Optimizer::GetLog() -{ - return instance.GetLog(); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/st_printf.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/code/st_printf.h deleted file mode 100644 index 0806f64..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/code/st_printf.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef __ST_PRINTF__H__ -#define __ST_PRINTF__H__ - -#include -#include - -#include "../util/macros.h" -#include "../util/compat_layer.h" - - -class st -{ -public: - st() {} - - static void stprintf(std::string& buffer, const char *fmt, ...) - { - if (fmt) - { - va_list args; - va_start(args, fmt); - - size_t size = vscprintf(fmt, args); - char *buf = new char[size + 1]; - size_t nsize = vsnprintf(buf, size, fmt, args); - buffer += buf; - delete[] buf; - - va_end(args); - } - } -}; - -/* Original code come from https://github.com/aras-p/glsl-optimizer - -GLSL Optimizer is licensed according to the terms of the MIT license : - -Copyright(C) 1999 - 2007 Brian Paul All Rights Reserved. -Copyright(C) 2010 - 2013 Unity Technologies 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. -*/ - -class sbuffer -{ -public: - sbuffer() - { - m_Capacity = 512; - m_Ptr = (char*)malloc(m_Capacity); - m_Size = 0; - m_Ptr[0] = 0; - m_Ownership_Lost = false; - } - - ~sbuffer() - { - if(!m_Ownership_Lost) - free(m_Ptr); - } - - bool empty() const { return m_Size == 0; } - - const char* c_str() const { return m_Ptr; } - - /** - * Dangerous, get the string and declare the ownership lost. - * Meaning the lifecycle of the char * goes beyond what the class normally allows. - * @return A C style string - */ - char * c_str_take_ownership() { - m_Ownership_Lost = true; - return m_Ptr; - } - - void append(const char *fmt, ...) PRINTFLIKE(2, 3) - { - va_list args; - va_start(args, fmt); - vasprintf_append(fmt, args); - va_end(args); - } - - void vasprintf_append(const char *fmt, va_list args) - { - assert(m_Ptr != NULL); - vasprintf_rewrite_tail(&m_Size, fmt, args); - } - - void vasprintf_rewrite_tail(size_t *start, const char *fmt, va_list args) - { - assert(m_Ptr != NULL); - - size_t new_length = vscprintf(fmt, args); - size_t needed_length = m_Size + new_length + 1; - - if (m_Capacity < needed_length) - { - m_Capacity = MAX2(m_Capacity + m_Capacity / 2, needed_length); - m_Ptr = (char*)realloc(m_Ptr, m_Capacity); - } - - vsnprintf(m_Ptr + m_Size, new_length + 1, fmt, args); - m_Size += new_length; - assert(m_Capacity >= m_Size); - } - -private: - char* m_Ptr; - size_t m_Size; - size_t m_Capacity; - bool m_Ownership_Lost; -}; - -#endif // __ST_PRINTF__H__ \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/builtin_type_macros.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/builtin_type_macros.h deleted file mode 100644 index fc6f215..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/builtin_type_macros.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 builtin_type_macros.h - * - * This contains definitions for all GLSL built-in types, regardless of what - * language version or extension might provide them. - */ - -DECL_TYPE(error, GL_INVALID_ENUM, GLSL_TYPE_ERROR, 0, 0) -DECL_TYPE(void, GL_INVALID_ENUM, GLSL_TYPE_VOID, 0, 0) - -#define DECL_VEC_TYPE(stype, vtype, btype, etype, ...) \ - DECL_TYPE(stype, etype ##__VA_ARGS__, btype, 1, 1) \ - DECL_TYPE(vtype ## 2, etype ##_VEC2 ##__VA_ARGS__, btype, 2, 1) \ - DECL_TYPE(vtype ## 3, etype ##_VEC3 ##__VA_ARGS__, btype, 3, 1) \ - DECL_TYPE(vtype ## 4, etype ##_VEC4 ##__VA_ARGS__, btype, 4, 1) \ - DECL_TYPE(vtype ## 5, 0, btype, 5, 1) \ - DECL_TYPE(vtype ## 8, 0, btype, 8, 1) \ - DECL_TYPE(vtype ## 16, 0, btype, 16, 1) - -DECL_VEC_TYPE(bool, bvec, GLSL_TYPE_BOOL, GL_BOOL) -DECL_VEC_TYPE(int, ivec, GLSL_TYPE_INT, GL_INT) -DECL_VEC_TYPE(uint, uvec, GLSL_TYPE_UINT, GL_UNSIGNED_INT) -DECL_VEC_TYPE(float, vec, GLSL_TYPE_FLOAT, GL_FLOAT) -DECL_VEC_TYPE(float16_t, f16vec, GLSL_TYPE_FLOAT16, GL_FLOAT16, _NV) -DECL_VEC_TYPE(double, dvec, GLSL_TYPE_DOUBLE, GL_DOUBLE) -DECL_VEC_TYPE(int64_t, i64vec, GLSL_TYPE_INT64, GL_INT64, _ARB) -DECL_VEC_TYPE(uint64_t, u64vec, GLSL_TYPE_UINT64, GL_UNSIGNED_INT64, _ARB) -DECL_VEC_TYPE(int16_t, i16vec, GLSL_TYPE_INT16, GL_INT16, _NV) -DECL_VEC_TYPE(uint16_t, u16vec, GLSL_TYPE_UINT16, GL_UNSIGNED_INT16, _NV) -DECL_VEC_TYPE(int8_t, i8vec, GLSL_TYPE_INT8, GL_INT8, _NV) -DECL_VEC_TYPE(uint8_t, u8vec, GLSL_TYPE_UINT8, GL_UNSIGNED_INT8, _NV) - -DECL_TYPE(mat2, GL_FLOAT_MAT2, GLSL_TYPE_FLOAT, 2, 2) -DECL_TYPE(mat3, GL_FLOAT_MAT3, GLSL_TYPE_FLOAT, 3, 3) -DECL_TYPE(mat4, GL_FLOAT_MAT4, GLSL_TYPE_FLOAT, 4, 4) - -DECL_TYPE(mat2x3, GL_FLOAT_MAT2x3, GLSL_TYPE_FLOAT, 3, 2) -DECL_TYPE(mat2x4, GL_FLOAT_MAT2x4, GLSL_TYPE_FLOAT, 4, 2) -DECL_TYPE(mat3x2, GL_FLOAT_MAT3x2, GLSL_TYPE_FLOAT, 2, 3) -DECL_TYPE(mat3x4, GL_FLOAT_MAT3x4, GLSL_TYPE_FLOAT, 4, 3) -DECL_TYPE(mat4x2, GL_FLOAT_MAT4x2, GLSL_TYPE_FLOAT, 2, 4) -DECL_TYPE(mat4x3, GL_FLOAT_MAT4x3, GLSL_TYPE_FLOAT, 3, 4) - -DECL_TYPE(f16mat2, GL_FLOAT16_MAT2_AMD, GLSL_TYPE_FLOAT16, 2, 2) -DECL_TYPE(f16mat3, GL_FLOAT16_MAT3_AMD, GLSL_TYPE_FLOAT16, 3, 3) -DECL_TYPE(f16mat4, GL_FLOAT16_MAT4_AMD, GLSL_TYPE_FLOAT16, 4, 4) - -DECL_TYPE(f16mat2x3, GL_FLOAT16_MAT2x3_AMD, GLSL_TYPE_FLOAT16, 3, 2) -DECL_TYPE(f16mat2x4, GL_FLOAT16_MAT2x4_AMD, GLSL_TYPE_FLOAT16, 4, 2) -DECL_TYPE(f16mat3x2, GL_FLOAT16_MAT3x2_AMD, GLSL_TYPE_FLOAT16, 2, 3) -DECL_TYPE(f16mat3x4, GL_FLOAT16_MAT3x4_AMD, GLSL_TYPE_FLOAT16, 4, 3) -DECL_TYPE(f16mat4x2, GL_FLOAT16_MAT4x2_AMD, GLSL_TYPE_FLOAT16, 2, 4) -DECL_TYPE(f16mat4x3, GL_FLOAT16_MAT4x3_AMD, GLSL_TYPE_FLOAT16, 3, 4) - -DECL_TYPE(dmat2, GL_DOUBLE_MAT2, GLSL_TYPE_DOUBLE, 2, 2) -DECL_TYPE(dmat3, GL_DOUBLE_MAT3, GLSL_TYPE_DOUBLE, 3, 3) -DECL_TYPE(dmat4, GL_DOUBLE_MAT4, GLSL_TYPE_DOUBLE, 4, 4) - -DECL_TYPE(dmat2x3, GL_DOUBLE_MAT2x3, GLSL_TYPE_DOUBLE, 3, 2) -DECL_TYPE(dmat2x4, GL_DOUBLE_MAT2x4, GLSL_TYPE_DOUBLE, 4, 2) -DECL_TYPE(dmat3x2, GL_DOUBLE_MAT3x2, GLSL_TYPE_DOUBLE, 2, 3) -DECL_TYPE(dmat3x4, GL_DOUBLE_MAT3x4, GLSL_TYPE_DOUBLE, 4, 3) -DECL_TYPE(dmat4x2, GL_DOUBLE_MAT4x2, GLSL_TYPE_DOUBLE, 2, 4) -DECL_TYPE(dmat4x3, GL_DOUBLE_MAT4x3, GLSL_TYPE_DOUBLE, 3, 4) - -DECL_TYPE(sampler, GL_SAMPLER_1D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(sampler1D, GL_SAMPLER_1D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2D, GL_SAMPLER_2D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler3D, GL_SAMPLER_3D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(samplerCube, GL_SAMPLER_CUBE, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler1DArray, GL_SAMPLER_1D_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2DArray, GL_SAMPLER_2D_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(samplerCubeArray, GL_SAMPLER_CUBE_MAP_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2DRect, GL_SAMPLER_2D_RECT, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(samplerBuffer, GL_SAMPLER_BUFFER, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2DMS, GL_SAMPLER_2D_MULTISAMPLE, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2DMSArray, GL_SAMPLER_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_FLOAT) - -DECL_TYPE(isampler1D, GL_INT_SAMPLER_1D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isampler2D, GL_INT_SAMPLER_2D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isampler3D, GL_INT_SAMPLER_3D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isamplerCube, GL_INT_SAMPLER_CUBE, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isampler1DArray, GL_INT_SAMPLER_1D_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(isampler2DArray, GL_INT_SAMPLER_2D_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(isamplerCubeArray, GL_INT_SAMPLER_CUBE_MAP_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(isampler2DRect, GL_INT_SAMPLER_2D_RECT, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isamplerBuffer, GL_INT_SAMPLER_BUFFER, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isampler2DMS, GL_INT_SAMPLER_2D_MULTISAMPLE, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isampler2DMSArray, GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_INT) - -DECL_TYPE(usampler1D, GL_UNSIGNED_INT_SAMPLER_1D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usampler2D, GL_UNSIGNED_INT_SAMPLER_2D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usampler3D, GL_UNSIGNED_INT_SAMPLER_3D, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usamplerCube, GL_UNSIGNED_INT_SAMPLER_CUBE, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usampler1DArray, GL_UNSIGNED_INT_SAMPLER_1D_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(usampler2DArray, GL_UNSIGNED_INT_SAMPLER_2D_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(usamplerCubeArray, GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(usampler2DRect, GL_UNSIGNED_INT_SAMPLER_2D_RECT, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usamplerBuffer, GL_UNSIGNED_INT_SAMPLER_BUFFER, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usampler2DMS, GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usampler2DMSArray, GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_UINT) - -DECL_TYPE(samplerShadow, GL_SAMPLER_1D_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 1, 0, GLSL_TYPE_VOID) -DECL_TYPE(sampler1DShadow, GL_SAMPLER_1D_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 1, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2DShadow, GL_SAMPLER_2D_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 1, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(samplerCubeShadow, GL_SAMPLER_CUBE_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 1, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler1DArrayShadow, GL_SAMPLER_1D_ARRAY_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_1D, 1, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2DArrayShadow, GL_SAMPLER_2D_ARRAY_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_2D, 1, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(samplerCubeArrayShadow, GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_CUBE, 1, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(sampler2DRectShadow, GL_SAMPLER_2D_RECT_SHADOW, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_RECT, 1, 0, GLSL_TYPE_FLOAT) - -DECL_TYPE(samplerExternalOES, GL_SAMPLER_EXTERNAL_OES, GLSL_TYPE_SAMPLER, GLSL_SAMPLER_DIM_EXTERNAL, 0, 0, GLSL_TYPE_FLOAT) - -DECL_TYPE(texture1D, GL_SAMPLER_1D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(texture2D, GL_SAMPLER_2D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(texture3D, GL_SAMPLER_3D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(textureCube, GL_SAMPLER_CUBE, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(texture1DArray, GL_SAMPLER_1D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(texture2DArray, GL_SAMPLER_2D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(textureCubeArray, GL_SAMPLER_CUBE_MAP_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(texture2DRect, GL_SAMPLER_2D_RECT, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(textureBuffer, GL_SAMPLER_BUFFER, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(texture2DMS, GL_SAMPLER_2D_MULTISAMPLE, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(texture2DMSArray, GL_SAMPLER_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_FLOAT) - -DECL_TYPE(itexture1D, GL_INT_SAMPLER_1D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itexture2D, GL_INT_SAMPLER_2D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itexture3D, GL_INT_SAMPLER_3D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itextureCube, GL_INT_SAMPLER_CUBE, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itexture1DArray, GL_INT_SAMPLER_1D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(itexture2DArray, GL_INT_SAMPLER_2D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(itextureCubeArray, GL_INT_SAMPLER_CUBE_MAP_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(itexture2DRect, GL_INT_SAMPLER_2D_RECT, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itextureBuffer, GL_INT_SAMPLER_BUFFER, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itexture2DMS, GL_INT_SAMPLER_2D_MULTISAMPLE, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itexture2DMSArray, GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_INT) - -DECL_TYPE(utexture1D, GL_UNSIGNED_INT_SAMPLER_1D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utexture2D, GL_UNSIGNED_INT_SAMPLER_2D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utexture3D, GL_UNSIGNED_INT_SAMPLER_3D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utextureCube, GL_UNSIGNED_INT_SAMPLER_CUBE, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utexture1DArray, GL_UNSIGNED_INT_SAMPLER_1D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(utexture2DArray, GL_UNSIGNED_INT_SAMPLER_2D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(utextureCubeArray, GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(utexture2DRect, GL_UNSIGNED_INT_SAMPLER_2D_RECT, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utextureBuffer, GL_UNSIGNED_INT_SAMPLER_BUFFER, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utexture2DMS, GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utexture2DMSArray, GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_UINT) - -DECL_TYPE(textureExternalOES, GL_SAMPLER_EXTERNAL_OES, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_EXTERNAL, 0, 0, GLSL_TYPE_FLOAT) - -/* OpenCL image types */ -DECL_TYPE(vtexture1D, GL_SAMPLER_1D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(vtexture2D, GL_SAMPLER_2D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(vtexture3D, GL_SAMPLER_3D, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(vtexture1DArray, GL_SAMPLER_1D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_VOID) -DECL_TYPE(vtexture2DArray, GL_SAMPLER_2D_ARRAY, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_VOID) -DECL_TYPE(vtextureBuffer, GL_SAMPLER_BUFFER, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_VOID) - -DECL_TYPE(image1D, GL_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(image2D, GL_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(image3D, GL_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(image2DRect, GL_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(imageCube, GL_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(imageBuffer, GL_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(image1DArray, GL_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(image2DArray, GL_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(imageCubeArray, GL_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(image2DMS, GL_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(image2DMSArray, GL_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_FLOAT) -DECL_TYPE(iimage1D, GL_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(iimage2D, GL_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(iimage3D, GL_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(iimage2DRect, GL_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(iimageCube, GL_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(iimageBuffer, GL_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(iimage1DArray, GL_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(iimage2DArray, GL_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(iimageCubeArray, GL_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(iimage2DMS, GL_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(iimage2DMSArray, GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_INT) -DECL_TYPE(uimage1D, GL_UNSIGNED_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(uimage2D, GL_UNSIGNED_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(uimage3D, GL_UNSIGNED_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(uimage2DRect, GL_UNSIGNED_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(uimageCube, GL_UNSIGNED_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(uimageBuffer, GL_UNSIGNED_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(uimage1DArray, GL_UNSIGNED_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(uimage2DArray, GL_UNSIGNED_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(uimageCubeArray, GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(uimage2DMS, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(uimage2DMSArray, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(i64image1D, GL_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_INT64) -DECL_TYPE(i64image2D, GL_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_INT64) -DECL_TYPE(i64image3D, GL_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_INT64) -DECL_TYPE(i64image2DRect, GL_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_INT64) -DECL_TYPE(i64imageCube, GL_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_INT64) -DECL_TYPE(i64imageBuffer, GL_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_INT64) -DECL_TYPE(i64image1DArray, GL_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_INT64) -DECL_TYPE(i64image2DArray, GL_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_INT64) -DECL_TYPE(i64imageCubeArray, GL_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_INT64) -DECL_TYPE(i64image2DMS, GL_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_INT64) -DECL_TYPE(i64image2DMSArray, GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_INT64) -DECL_TYPE(u64image1D, GL_UNSIGNED_INT_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_UINT64) -DECL_TYPE(u64image2D, GL_UNSIGNED_INT_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_UINT64) -DECL_TYPE(u64image3D, GL_UNSIGNED_INT_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_UINT64) -DECL_TYPE(u64image2DRect, GL_UNSIGNED_INT_IMAGE_2D_RECT, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_RECT, 0, 0, GLSL_TYPE_UINT64) -DECL_TYPE(u64imageCube, GL_UNSIGNED_INT_IMAGE_CUBE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 0, GLSL_TYPE_UINT64) -DECL_TYPE(u64imageBuffer, GL_UNSIGNED_INT_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_UINT64) -DECL_TYPE(u64image1DArray, GL_UNSIGNED_INT_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_UINT64) -DECL_TYPE(u64image2DArray, GL_UNSIGNED_INT_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_UINT64) -DECL_TYPE(u64imageCubeArray, GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_CUBE, 0, 1, GLSL_TYPE_UINT64) -DECL_TYPE(u64image2DMS, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_UINT64) -DECL_TYPE(u64image2DMSArray, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_UINT64) - -/* OpenCL image types */ -DECL_TYPE(vbuffer, GL_IMAGE_BUFFER, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_BUF, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(vimage1D, GL_IMAGE_1D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(vimage2D, GL_IMAGE_2D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(vimage3D, GL_IMAGE_3D, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_3D, 0, 0, GLSL_TYPE_VOID) -DECL_TYPE(vimage1DArray, GL_IMAGE_1D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_1D, 0, 1, GLSL_TYPE_VOID) -DECL_TYPE(vimage2DArray, GL_IMAGE_2D_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_2D, 0, 1, GLSL_TYPE_VOID) - -DECL_TYPE(subpassInput, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(subpassInputMS, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(isubpassInput, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(isubpassInputMS, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(usubpassInput, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(usubpassInputMS, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(textureSubpassInput, 0, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(textureSubpassInputMS, 0, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_FLOAT) -DECL_TYPE(itextureSubpassInput, 0, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(itextureSubpassInputMS, 0, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_INT) -DECL_TYPE(utextureSubpassInput, 0, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_UINT) -DECL_TYPE(utextureSubpassInputMS, 0, GLSL_TYPE_TEXTURE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_UINT) - - -DECL_TYPE(atomic_uint, GL_UNSIGNED_INT_ATOMIC_COUNTER, GLSL_TYPE_ATOMIC_UINT, 1, 1) - -STRUCT_TYPE(gl_DepthRangeParameters) -STRUCT_TYPE(gl_PointParameters) -STRUCT_TYPE(gl_MaterialParameters) -STRUCT_TYPE(gl_LightSourceParameters) -STRUCT_TYPE(gl_LightModelParameters) -STRUCT_TYPE(gl_LightModelProducts) -STRUCT_TYPE(gl_LightProducts) -STRUCT_TYPE(gl_FogParameters) \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/CMakeLists.txt b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/CMakeLists.txt deleted file mode 100644 index e69de29..0000000 diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/CrossPlatformSettings_piece_all.glsl b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/CrossPlatformSettings_piece_all.glsl deleted file mode 100644 index 7ef940a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/CrossPlatformSettings_piece_all.glsl +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2020-2022 Matias N. Goldberg - * - * 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 THE - * AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#define min3( a, b, c ) min( a, min( b, c ) ) -#define max3( a, b, c ) max( a, max( b, c ) ) - -#define float2 vec2 -#define float3 vec3 -#define float4 vec4 - -#define int2 ivec2 -#define int3 ivec3 -#define int4 ivec4 - -#define uint2 uvec2 -#define uint3 uvec3 -#define uint4 uvec4 - -#define float2x2 mat2 -#define float3x3 mat3 -#define float4x4 mat4 -#define ogre_float4x3 mat3x4 - -#define ushort uint -#define ushort3 uint3 -#define ushort4 uint4 - -//Short used for read operations. It's an int in GLSL & HLSL. An ushort in Metal -#define rshort int -#define rshort2 int2 -#define rint int -//Short used for write operations. It's an int in GLSL. An ushort in HLSL & Metal -#define wshort2 int2 -#define wshort3 int3 - -#define toFloat3x3( x ) mat3( x ) -#define buildFloat3x3( row0, row1, row2 ) mat3( row0, row1, row2 ) - -#define mul( x, y ) ((x) * (y)) -#define saturate(x) clamp( (x), 0.0, 1.0 ) -#define lerp mix -#define rsqrt inversesqrt -#define INLINE -#define NO_INTERPOLATION_PREFIX flat -#define NO_INTERPOLATION_SUFFIX - -#define PARAMS_ARG_DECL -#define PARAMS_ARG - -#define reversebits bitfieldReverse - -#define OGRE_Sample( tex, sampler, uv ) texture( tex, uv ) -#define OGRE_SampleLevel( tex, sampler, uv, lod ) textureLod( tex, uv, lod ) -#define OGRE_SampleArray2D( tex, sampler, uv, arrayIdx ) texture( tex, vec3( uv, arrayIdx ) ) -#define OGRE_SampleArray2DLevel( tex, sampler, uv, arrayIdx, lod ) textureLod( tex, vec3( uv, arrayIdx ), lod ) -#define OGRE_SampleArrayCubeLevel( tex, sampler, uv, arrayIdx, lod ) textureLod( tex, vec4( uv, arrayIdx ), lod ) -#define OGRE_SampleGrad( tex, sampler, uv, ddx, ddy ) textureGrad( tex, uv, ddx, ddy ) -#define OGRE_SampleArray2DGrad( tex, sampler, uv, arrayIdx, ddx, ddy ) textureGrad( tex, vec3( uv, arrayIdx ), ddx, ddy ) -#define OGRE_ddx( val ) dFdx( val ) -#define OGRE_ddy( val ) dFdy( val ) -#define OGRE_Load2D( tex, iuv, lod ) texelFetch( tex, iuv, lod ) -#define OGRE_LoadArray2D( tex, iuv, arrayIdx, lod ) texelFetch( tex, ivec3( iuv, arrayIdx ), lod ) -#define OGRE_Load2DMS( tex, iuv, subsample ) texelFetch( tex, iuv, subsample ) - -#define OGRE_Load3D( tex, iuv, lod ) texelFetch( tex, ivec3( iuv ), lod ) - -#define OGRE_GatherRed( tex, sampler, uv ) textureGather( tex, uv, 0 ) -#define OGRE_GatherGreen( tex, sampler, uv ) textureGather( tex, uv, 1 ) -#define OGRE_GatherBlue( tex, sampler, uv ) textureGather( tex, uv, 2 ) - -#define bufferFetch1( buffer, idx ) texelFetch( buffer, idx ).x - -#define OGRE_SAMPLER_ARG_DECL( samplerName ) -#define OGRE_SAMPLER_ARG( samplerName ) - -#define OGRE_Texture3D_float4 sampler3D -#define OGRE_OUT_REF( declType, variableName ) out declType variableName -#define OGRE_INOUT_REF( declType, variableName ) inout declType variableName diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/README b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/README deleted file mode 100644 index 6eb085f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/README +++ /dev/null @@ -1,227 +0,0 @@ -Welcome to Mesa's GLSL compiler. A brief overview of how things flow: - -1) lex and yacc-based preprocessor takes the incoming shader string -and produces a new string containing the preprocessed shader. This -takes care of things like #if, #ifdef, #define, and preprocessor macro -invocations. Note that #version, #extension, and some others are -passed straight through. See glcpp/* - -2) lex and yacc-based parser takes the preprocessed string and -generates the AST (abstract syntax tree). Almost no checking is -performed in this stage. See glsl_lexer.ll and glsl_parser.yy. - -3) The AST is converted to "HIR". This is the intermediate -representation of the compiler. Constructors are generated, function -calls are resolved to particular function signatures, and all the -semantic checking is performed. See ast_*.cpp for the conversion, and -ir.h for the IR structures. - -4) The driver (Mesa, or main.cpp for the standalone binary) performs -optimizations. These include copy propagation, dead code elimination, -constant folding, and others. Generally the driver will call -optimizations in a loop, as each may open up opportunities for other -optimizations to do additional work. See most files called ir_*.cpp - -5) linking is performed. This does checking to ensure that the -outputs of the vertex shader match the inputs of the fragment shader, -and assigns locations to uniforms, attributes, and varyings. See -linker.cpp. - -6) The driver may perform additional optimization at this point, as -for example dead code elimination previously couldn't remove functions -or global variable usage when we didn't know what other code would be -linked in. - -7) The driver performs code generation out of the IR, taking a linked -shader program and producing a compiled program for each stage. See -../mesa/program/ir_to_mesa.cpp for Mesa IR code generation. - -FAQ: - -Q: What is HIR versus IR versus LIR? - -A: The idea behind the naming was that ast_to_hir would produce a -high-level IR ("HIR"), with things like matrix operations, structure -assignments, etc., present. A series of lowering passes would occur -that do things like break matrix multiplication into a series of dot -products/MADs, make structure assignment be a series of assignment of -components, flatten if statements into conditional moves, and such, -producing a low level IR ("LIR"). - -However, it now appears that each driver will have different -requirements from a LIR. A 915-generation chipset wants all functions -inlined, all loops unrolled, all ifs flattened, no variable array -accesses, and matrix multiplication broken down. The Mesa IR backend -for swrast would like matrices and structure assignment broken down, -but it can support function calls and dynamic branching. A 965 vertex -shader IR backend could potentially even handle some matrix operations -without breaking them down, but the 965 fragment shader IR backend -would want to break to have (almost) all operations down channel-wise -and perform optimization on that. As a result, there's no single -low-level IR that will make everyone happy. So that usage has fallen -out of favor, and each driver will perform a series of lowering passes -to take the HIR down to whatever restrictions it wants to impose -before doing codegen. - -Q: How is the IR structured? - -A: The best way to get started seeing it would be to run the -standalone compiler against a shader: - -./glsl_compiler --dump-lir \ - ~/src/piglit/tests/shaders/glsl-orangebook-ch06-bump.frag - -So for example one of the ir_instructions in main() contains: - -(assign (constant bool (1)) (var_ref litColor) (expression vec3 * (var_ref Surf -aceColor) (var_ref __retval) ) ) - -Or more visually: - (assign) - / | \ - (var_ref) (expression *) (constant bool 1) - / / \ -(litColor) (var_ref) (var_ref) - / \ - (SurfaceColor) (__retval) - -which came from: - -litColor = SurfaceColor * max(dot(normDelta, LightDir), 0.0); - -(the max call is not represented in this expression tree, as it was a -function call that got inlined but not brought into this expression -tree) - -Each of those nodes is a subclass of ir_instruction. A particular -ir_instruction instance may only appear once in the whole IR tree with -the exception of ir_variables, which appear once as variable -declarations: - -(declare () vec3 normDelta) - -and multiple times as the targets of variable dereferences: -... -(assign (constant bool (1)) (var_ref __retval) (expression float dot - (var_ref normDelta) (var_ref LightDir) ) ) -... -(assign (constant bool (1)) (var_ref __retval) (expression vec3 - - (var_ref LightDir) (expression vec3 * (constant float (2.000000)) - (expression vec3 * (expression float dot (var_ref normDelta) (var_ref - LightDir) ) (var_ref normDelta) ) ) ) ) -... - -Each node has a type. Expressions may involve several different types: -(declare (uniform ) mat4 gl_ModelViewMatrix) -((assign (constant bool (1)) (var_ref constructor_tmp) (expression - vec4 * (var_ref gl_ModelViewMatrix) (var_ref gl_Vertex) ) ) - -An expression tree can be arbitrarily deep, and the compiler tries to -keep them structured like that so that things like algebraic -optimizations ((color * 1.0 == color) and ((mat1 * mat2) * vec == mat1 -* (mat2 * vec))) or recognizing operation patterns for code generation -(vec1 * vec2 + vec3 == mad(vec1, vec2, vec3)) are easier. This comes -at the expense of additional trickery in implementing some -optimizations like CSE where one must navigate an expression tree. - -Q: Why no SSA representation? - -A: Converting an IR tree to SSA form makes dead code elimination, -common subexpression elimination, and many other optimizations much -easier. However, in our primarily vector-based language, there's some -major questions as to how it would work. Do we do SSA on the scalar -or vector level? If we do it at the vector level, we're going to end -up with many different versions of the variable when encountering code -like: - -(assign (constant bool (1)) (swiz x (var_ref __retval) ) (var_ref a) ) -(assign (constant bool (1)) (swiz y (var_ref __retval) ) (var_ref b) ) -(assign (constant bool (1)) (swiz z (var_ref __retval) ) (var_ref c) ) - -If every masked update of a component relies on the previous value of -the variable, then we're probably going to be quite limited in our -dead code elimination wins, and recognizing common expressions may -just not happen. On the other hand, if we operate channel-wise, then -we'll be prone to optimizing the operation on one of the channels at -the expense of making its instruction flow different from the other -channels, and a vector-based GPU would end up with worse code than if -we didn't optimize operations on that channel! - -Once again, it appears that our optimization requirements are driven -significantly by the target architecture. For now, targeting the Mesa -IR backend, SSA does not appear to be that important to producing -excellent code, but we do expect to do some SSA-based optimizations -for the 965 fragment shader backend when that is developed. - -Q: How should I expand instructions that take multiple backend instructions? - -Sometimes you'll have to do the expansion in your code generation. -However, in many cases you'll want to do a pass over the IR to convert -non-native instructions to a series of native instructions. For -example, for the Mesa backend we have ir_div_to_mul_rcp.cpp because -Mesa IR (and many hardware backends) only have a reciprocal -instruction, not a divide. Implementing non-native instructions this -way gives the chance for constant folding to occur, so (a / 2.0) -becomes (a * 0.5) after codegen instead of (a * (1.0 / 2.0)) - -Q: How shoud I handle my special hardware instructions with respect to IR? - -Our current theory is that if multiple targets have an instruction for -some operation, then we should probably be able to represent that in -the IR. Generally this is in the form of an ir_{bin,un}op expression -type. For example, we initially implemented fract() using (a - -floor(a)), but both 945 and 965 have instructions to give that result, -and it would also simplify the implementation of mod(), so -ir_unop_fract was added. The following areas need updating to add a -new expression type: - -ir.h (new enum) -ir.cpp:operator_strs (used for ir_reader) -ir_constant_expression.cpp (you probably want to be able to constant fold) -ir_validate.cpp (check users have the right types) - -You may also need to update the backends if they will see the new expr type: - -../mesa/program/ir_to_mesa.cpp - -You can then use the new expression from builtins (if all backends -would rather see it), or scan the IR and convert to use your new -expression type (see ir_mod_to_floor, for example). - -Q: How is memory management handled in the compiler? - -The hierarchical memory allocator "talloc" developed for the Samba -project is used, so that things like optimization passes don't have to -worry about their garbage collection so much. It has a few nice -features, including low performance overhead and good debugging -support that's trivially available. - -Generally, each stage of the compile creates a talloc context and -allocates its memory out of that or children of it. At the end of the -stage, the pieces still live are stolen to a new context and the old -one freed, or the whole context is kept for use by the next stage. - -For IR transformations, a temporary context is used, then at the end -of all transformations, reparent_ir reparents all live nodes under the -shader's IR list, and the old context full of dead nodes is freed. -When developing a single IR transformation pass, this means that you -want to allocate instruction nodes out of the temporary context, so if -it becomes dead it doesn't live on as the child of a live node. At -the moment, optimization passes aren't passed that temporary context, -so they find it by calling talloc_parent() on a nearby IR node. The -talloc_parent() call is expensive, so many passes will cache the -result of the first talloc_parent(). Cleaning up all the optimization -passes to take a context argument and not call talloc_parent() is left -as an exercise. - -Q: What is the file naming convention in this directory? - -Initially, there really wasn't one. We have since adopted one: - - - Files that implement code lowering passes should be named lower_* - (e.g., lower_builtins.cpp). - - Files that implement optimization passes should be named opt_*. - - Files that implement a class that is used throught the code should - take the name of that class (e.g., ir_hierarchical_visitor.cpp). - - Files that contain code not fitting in one of the previous - categories should have a sensible name (e.g., glsl_parser.yy). diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/TODO b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/TODO deleted file mode 100644 index bd077a8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/TODO +++ /dev/null @@ -1,12 +0,0 @@ -- Detect code paths in non-void functions that don't reach a return statement - -- Improve handling of constants and their initializers. Constant initializers - should never generate any code. This is trival for scalar constants. It is - also trivial for arrays, matrices, and vectors that are accessed with - constant index values. For others it is more complicated. Perhaps these - cases should be silently converted to uniforms? - -- Track source locations throughout the IR. There are currently several - places where we cannot emit line numbers for errors (and currently emit 0:0) - because we've "lost" the line number information. This is particularly - noticeable at link time. diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast.h deleted file mode 100644 index f82144b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast.h +++ /dev/null @@ -1,1406 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef AST_H -#define AST_H - -#include "list.h" -#include "glsl_parser_extras.h" -#include "../glsl_types.h" -#include "../../util/bitset.h" - -struct _mesa_glsl_parse_state; - -struct YYLTYPE; - -/** - * \defgroup AST Abstract syntax tree node definitions - * - * An abstract syntax tree is generated by the parser. This is a fairly - * direct representation of the gramma derivation for the source program. - * No symantic checking is done during the generation of the AST. Only - * syntactic checking is done. Symantic checking is performed by a later - * stage that converts the AST to a more generic intermediate representation. - * - *@{ - */ -/** - * Base class of all abstract syntax tree nodes - */ -class ast_node { -public: - DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(ast_node); - - /** - * Print an AST node in something approximating the original GLSL code - */ - virtual void print(void) const; - - /** - * Convert the AST node to the high-level intermediate representation - */ - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - virtual bool has_sequence_subexpression() const; - - /** - * Retrieve the source location of an AST node - * - * This function is primarily used to get the source position of an AST node - * into a form that can be passed to \c _mesa_glsl_error. - * - * \sa _mesa_glsl_error, ast_node::set_location - */ - struct YYLTYPE get_location(void) const - { - struct YYLTYPE locp; - - locp.path = this->location.path; - locp.source = this->location.source; - locp.first_line = this->location.first_line; - locp.first_column = this->location.first_column; - locp.last_line = this->location.last_line; - locp.last_column = this->location.last_column; - - return locp; - } - - /** - * Set the source location of an AST node from a parser location - * - * \sa ast_node::get_location - */ - void set_location(const struct YYLTYPE &locp) - { - this->location.path = locp.path; - this->location.source = locp.source; - this->location.first_line = locp.first_line; - this->location.first_column = locp.first_column; - this->location.last_line = locp.last_line; - this->location.last_column = locp.last_column; - } - - /** - * Set the source location range of an AST node using two location nodes - * - * \sa ast_node::set_location - */ - void set_location_range(const struct YYLTYPE &begin, const struct YYLTYPE &end) - { - this->location.path = begin.path; - this->location.source = begin.source; - this->location.first_line = begin.first_line; - this->location.last_line = end.last_line; - this->location.first_column = begin.first_column; - this->location.last_column = end.last_column; - } - - /** - * Source location of the AST node. - */ - struct { - char *path; /**< GLSL shader include path. */ - unsigned source; /**< GLSL source number. */ - unsigned first_line; /**< First line number within the source string. */ - unsigned first_column; /**< First column in the first line. */ - unsigned last_line; /**< Last line number within the source string. */ - unsigned last_column; /**< Last column in the last line. */ - } location; - - exec_node link; - - virtual void set_is_lhs(bool); - -protected: - /** - * The only constructor is protected so that only derived class objects can - * be created. - */ - ast_node(void); -}; - - -/** - * Operators for AST expression nodes. - */ -enum ast_operators { - ast_assign, - ast_plus, /**< Unary + operator. */ - ast_neg, - ast_add, - ast_sub, - ast_mul, - ast_div, - ast_mod, - ast_lshift, - ast_rshift, - ast_less, - ast_greater, - ast_lequal, - ast_gequal, - ast_equal, - ast_nequal, - ast_bit_and, - ast_bit_xor, - ast_bit_or, - ast_bit_not, - ast_logic_and, - ast_logic_xor, - ast_logic_or, - ast_logic_not, - - ast_mul_assign, - ast_div_assign, - ast_mod_assign, - ast_add_assign, - ast_sub_assign, - ast_ls_assign, - ast_rs_assign, - ast_and_assign, - ast_xor_assign, - ast_or_assign, - - ast_conditional, - - ast_pre_inc, - ast_pre_dec, - ast_post_inc, - ast_post_dec, - ast_field_selection, - ast_array_index, - ast_unsized_array_dim, - - ast_function_call, - - ast_identifier, - ast_int_constant, - ast_uint_constant, - ast_float_constant, - ast_bool_constant, - ast_double_constant, - ast_int64_constant, - ast_uint64_constant, - - ast_sequence, - ast_aggregate - - /** - * Number of possible operators for an ast_expression - * - * This is done as a define instead of as an additional value in the enum so - * that the compiler won't generate spurious messages like "warning: - * enumeration value ‘ast_num_operators’ not handled in switch" - */ - #define AST_NUM_OPERATORS (ast_aggregate + 1) -}; - -/** - * Representation of any sort of expression. - */ -class ast_expression : public ast_node { -public: - ast_expression(int oper, ast_expression *, - ast_expression *, ast_expression *); - - ast_expression(const char *identifier) : - oper(ast_identifier) - { - subexpressions[0] = NULL; - subexpressions[1] = NULL; - subexpressions[2] = NULL; - primary_expression.identifier = identifier; - this->non_lvalue_description = NULL; - this->is_lhs = false; - } - - static const char *operator_string(enum ast_operators op); - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - virtual void hir_no_rvalue(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - virtual bool has_sequence_subexpression() const; - - ir_rvalue *do_hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state, - bool needs_rvalue); - - virtual void print(void) const; - - enum ast_operators oper; - - ast_expression *subexpressions[3]; - - union { - const char *identifier; - int int_constant; - float float_constant; - unsigned uint_constant; - int bool_constant; - double double_constant; - uint64_t uint64_constant; - int64_t int64_constant; - } primary_expression; - - - /** - * List of expressions for an \c ast_sequence or parameters for an - * \c ast_function_call - */ - exec_list expressions; - - /** - * For things that can't be l-values, this describes what it is. - * - * This text is used by the code that generates IR for assignments to - * detect and emit useful messages for assignments to some things that - * can't be l-values. For example, pre- or post-incerement expressions. - * - * \note - * This pointer may be \c NULL. - */ - const char *non_lvalue_description; - - void set_is_lhs(bool new_value); - -private: - bool is_lhs; -}; - -class ast_expression_bin : public ast_expression { -public: - ast_expression_bin(int oper, ast_expression *, ast_expression *); - - virtual void print(void) const; -}; - -/** - * Subclass of expressions for function calls - */ -class ast_function_expression : public ast_expression { -public: - ast_function_expression(ast_expression *callee) - : ast_expression(ast_function_call, callee, - NULL, NULL), - cons(false) - { - /* empty */ - } - - ast_function_expression(class ast_type_specifier *type) - : ast_expression(ast_function_call, (ast_expression *) type, - NULL, NULL), - cons(true) - { - /* empty */ - } - - bool is_constructor() const - { - return cons; - } - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - virtual void hir_no_rvalue(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - virtual bool has_sequence_subexpression() const; - -private: - /** - * Is this function call actually a constructor? - */ - bool cons; - ir_rvalue * - handle_method(exec_list *instructions, - struct _mesa_glsl_parse_state *state); -}; - -class ast_subroutine_list : public ast_node -{ -public: - virtual void print(void) const; - exec_list declarations; -}; - -class ast_array_specifier : public ast_node { -public: - ast_array_specifier(const struct YYLTYPE &locp, ast_expression *dim) - { - set_location(locp); - array_dimensions.push_tail(&dim->link); - } - - void add_dimension(ast_expression *dim) - { - array_dimensions.push_tail(&dim->link); - } - - bool is_single_dimension() const - { - return this->array_dimensions.get_tail_raw()->prev != NULL && - this->array_dimensions.get_tail_raw()->prev->is_head_sentinel(); - } - - virtual void print(void) const; - - /* This list contains objects of type ast_node containing the - * array dimensions in outermost-to-innermost order. - */ - exec_list array_dimensions; -}; - -class ast_layout_expression : public ast_node { -public: - ast_layout_expression(const struct YYLTYPE &locp, ast_expression *expr) - { - set_location(locp); - layout_const_expressions.push_tail(&expr->link); - } - - bool process_qualifier_constant(struct _mesa_glsl_parse_state *state, - const char *qual_indentifier, - unsigned *value, bool can_be_zero); - - void merge_qualifier(ast_layout_expression *l_expr) - { - layout_const_expressions.append_list(&l_expr->layout_const_expressions); - } - - exec_list layout_const_expressions; -}; - -/** - * C-style aggregate initialization class - * - * Represents C-style initializers of vectors, matrices, arrays, and - * structures. E.g., vec3 pos = {1.0, 0.0, -1.0} is equivalent to - * vec3 pos = vec3(1.0, 0.0, -1.0). - * - * Specified in GLSL 4.20 and GL_ARB_shading_language_420pack. - * - * \sa _mesa_ast_set_aggregate_type - */ -class ast_aggregate_initializer : public ast_expression { -public: - ast_aggregate_initializer() - : ast_expression(ast_aggregate, NULL, NULL, NULL), - constructor_type(NULL) - { - /* empty */ - } - - /** - * glsl_type of the aggregate, which is inferred from the LHS of whatever - * the aggregate is being used to initialize. This can't be inferred at - * parse time (since the parser deals with ast_type_specifiers, not - * glsl_types), so the parser leaves it NULL. However, the ast-to-hir - * conversion code makes sure to fill it in with the appropriate type - * before hir() is called. - */ - const glsl_type *constructor_type; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - virtual void hir_no_rvalue(exec_list *instructions, - struct _mesa_glsl_parse_state *state); -}; - - -class ast_compound_statement : public ast_node { -public: - ast_compound_statement(int new_scope, ast_node *statements); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - int new_scope; - exec_list statements; -}; - -class ast_declaration : public ast_node { -public: - ast_declaration(const char *identifier, - ast_array_specifier *array_specifier, - ast_expression *initializer); - virtual void print(void) const; - - const char *identifier; - - ast_array_specifier *array_specifier; - - ast_expression *initializer; -}; - - -enum { - ast_precision_none = 0, /**< Absence of precision qualifier. */ - ast_precision_high, - ast_precision_medium, - ast_precision_low -}; - -enum { - ast_depth_none = 0, /**< Absence of depth qualifier. */ - ast_depth_any, - ast_depth_greater, - ast_depth_less, - ast_depth_unchanged -}; - -struct ast_type_qualifier { - DECLARE_RALLOC_CXX_OPERATORS(ast_type_qualifier); - /* Note: this bitset needs to have at least as many bits as the 'q' - * struct has flags, below. Previously, the size was 128 instead of 96. - * But an apparent bug in GCC 5.4.0 causes bad SSE code generation - * elsewhere, leading to a crash. 96 bits works around the issue. - * See https://bugs.freedesktop.org/show_bug.cgi?id=105497 - */ - DECLARE_BITSET_T(bitset_t, 96); - - union flags { - struct { - unsigned invariant:1; - unsigned precise:1; - unsigned constant:1; - unsigned attribute:1; - unsigned varying:1; - unsigned in:1; - unsigned out:1; - unsigned centroid:1; - unsigned sample:1; - unsigned patch:1; - unsigned uniform:1; - unsigned buffer:1; - unsigned shared_storage:1; - unsigned smooth:1; - unsigned flat:1; - unsigned noperspective:1; - - /** \name Layout qualifiers for GL_ARB_fragment_coord_conventions */ - /*@{*/ - unsigned origin_upper_left:1; - unsigned pixel_center_integer:1; - /*@}*/ - - /** - * Flag set if GL_ARB_enhanced_layouts "align" layout qualifier is - * used. - */ - unsigned explicit_align:1; - - /** - * Flag set if GL_ARB_explicit_attrib_location "location" layout - * qualifier is used. - */ - unsigned explicit_location:1; - /** - * Flag set if GL_ARB_explicit_attrib_location "index" layout - * qualifier is used. - */ - unsigned explicit_index:1; - - /** - * Flag set if GL_ARB_enhanced_layouts "component" layout - * qualifier is used. - */ - unsigned explicit_component:1; - - /** - * Flag set if GL_ARB_shading_language_420pack "binding" layout - * qualifier is used. - */ - unsigned explicit_binding:1; - - /** - * Flag set if GL_ARB_shader_atomic counter "offset" layout - * qualifier is used. - */ - unsigned explicit_offset:1; - - /** \name Layout qualifiers for GL_AMD_conservative_depth */ - /** \{ */ - unsigned depth_type:1; - /** \} */ - - /** \name Layout qualifiers for GL_ARB_uniform_buffer_object */ - /** \{ */ - unsigned std140:1; - unsigned std430:1; - unsigned shared:1; - unsigned packed:1; - unsigned column_major:1; - unsigned row_major:1; - /** \} */ - - /** \name Layout qualifiers for GLSL 1.50 geometry shaders */ - /** \{ */ - unsigned prim_type:1; - unsigned max_vertices:1; - /** \} */ - - /** - * local_size_{x,y,z} flags for compute shaders. Bit 0 represents - * local_size_x, and so on. - */ - unsigned local_size:3; - - /** \name Layout qualifiers for ARB_compute_variable_group_size. */ - /** \{ */ - unsigned local_size_variable:1; - /** \} */ - - /** \name Layout and memory qualifiers for ARB_shader_image_load_store. */ - /** \{ */ - unsigned early_fragment_tests:1; - unsigned explicit_image_format:1; - unsigned coherent:1; - unsigned _volatile:1; - unsigned restrict_flag:1; - unsigned read_only:1; /**< "readonly" qualifier. */ - unsigned write_only:1; /**< "writeonly" qualifier. */ - /** \} */ - - /** \name Layout qualifiers for GL_ARB_gpu_shader5 */ - /** \{ */ - unsigned invocations:1; - unsigned stream:1; /**< Has stream value assigned */ - unsigned explicit_stream:1; /**< stream value assigned explicitly by shader code */ - /** \} */ - - /** \name Layout qualifiers for GL_ARB_enhanced_layouts */ - /** \{ */ - unsigned explicit_xfb_offset:1; /**< xfb_offset value assigned explicitly by shader code */ - unsigned xfb_buffer:1; /**< Has xfb_buffer value assigned */ - unsigned explicit_xfb_buffer:1; /**< xfb_buffer value assigned explicitly by shader code */ - unsigned xfb_stride:1; /**< Is xfb_stride value yet to be merged with global values */ - unsigned explicit_xfb_stride:1; /**< xfb_stride value assigned explicitly by shader code */ - /** \} */ - - /** \name Layout qualifiers for GL_ARB_tessellation_shader */ - /** \{ */ - /* tess eval input layout */ - /* gs prim_type reused for primitive mode */ - unsigned vertex_spacing:1; - unsigned ordering:1; - unsigned point_mode:1; - /* tess control output layout */ - unsigned vertices:1; - /** \} */ - - /** \name Qualifiers for GL_ARB_shader_subroutine */ - /** \{ */ - unsigned subroutine:1; /**< Is this marked 'subroutine' */ - /** \} */ - - /** \name Qualifiers for GL_KHR_blend_equation_advanced */ - /** \{ */ - unsigned blend_support:1; /**< Are there any blend_support_ qualifiers */ - /** \} */ - - /** - * Flag set if GL_ARB_post_depth_coverage layout qualifier is used. - */ - unsigned post_depth_coverage:1; - - /** - * Flags for the layout qualifers added by ARB_fragment_shader_interlock - */ - - unsigned pixel_interlock_ordered:1; - unsigned pixel_interlock_unordered:1; - unsigned sample_interlock_ordered:1; - unsigned sample_interlock_unordered:1; - - /** - * Flag set if GL_INTEL_conservartive_rasterization layout qualifier - * is used. - */ - unsigned inner_coverage:1; - - /** \name Layout qualifiers for GL_ARB_bindless_texture */ - /** \{ */ - unsigned bindless_sampler:1; - unsigned bindless_image:1; - unsigned bound_sampler:1; - unsigned bound_image:1; - /** \} */ - - /** \name Layout qualifiers for GL_EXT_shader_framebuffer_fetch_non_coherent */ - /** \{ */ - unsigned non_coherent:1; - /** \} */ - - /** \name Layout qualifiers for NV_compute_shader_derivatives */ - /** \{ */ - unsigned derivative_group:1; - /** \} */ - - /** - * Flag set if GL_NV_viewport_array2 viewport_relative layout - * qualifier is used. - */ - unsigned viewport_relative:1; - } - /** \brief Set of flags, accessed by name. */ - q; - - /** \brief Set of flags, accessed as a bitmask. */ - bitset_t i; - } flags; - - /** Precision of the type (highp/medium/lowp). */ - unsigned precision:2; - - /** Type of layout qualifiers for GL_AMD_conservative_depth. */ - unsigned depth_type:3; - - /** - * Alignment specified via GL_ARB_enhanced_layouts "align" layout qualifier - */ - ast_expression *align; - - /** Geometry shader invocations for GL_ARB_gpu_shader5. */ - ast_layout_expression *invocations; - - /** - * Location specified via GL_ARB_explicit_attrib_location layout - * - * \note - * This field is only valid if \c explicit_location is set. - */ - ast_expression *location; - /** - * Index specified via GL_ARB_explicit_attrib_location layout - * - * \note - * This field is only valid if \c explicit_index is set. - */ - ast_expression *index; - - /** - * Component specified via GL_ARB_enhaced_layouts - * - * \note - * This field is only valid if \c explicit_component is set. - */ - ast_expression *component; - - /** Maximum output vertices in GLSL 1.50 geometry shaders. */ - ast_layout_expression *max_vertices; - - /** Stream in GLSL 1.50 geometry shaders. */ - ast_expression *stream; - - /** xfb_buffer specified via the GL_ARB_enhanced_layouts keyword. */ - ast_expression *xfb_buffer; - - /** xfb_stride specified via the GL_ARB_enhanced_layouts keyword. */ - ast_expression *xfb_stride; - - /** global xfb_stride values for each buffer */ - ast_layout_expression *out_xfb_stride[MAX_FEEDBACK_BUFFERS]; - - /** - * Input or output primitive type in GLSL 1.50 geometry shaders - * and tessellation shaders. - */ - GLenum prim_type; - - /** - * Binding specified via GL_ARB_shading_language_420pack's "binding" keyword. - * - * \note - * This field is only valid if \c explicit_binding is set. - */ - ast_expression *binding; - - /** - * Offset specified via GL_ARB_shader_atomic_counter's or - * GL_ARB_enhanced_layouts "offset" keyword, or by GL_ARB_enhanced_layouts - * "xfb_offset" keyword. - * - * \note - * This field is only valid if \c explicit_offset is set. - */ - ast_expression *offset; - - /** - * Local size specified via GL_ARB_compute_shader's "local_size_{x,y,z}" - * layout qualifier. Element i of this array is only valid if - * flags.q.local_size & (1 << i) is set. - */ - ast_layout_expression *local_size[3]; - - /** Tessellation evaluation shader: vertex spacing (equal, fractional even/odd) */ - enum gl_tess_spacing vertex_spacing; - - /** Tessellation evaluation shader: vertex ordering (CW or CCW) */ - GLenum ordering; - - /** Tessellation evaluation shader: point mode */ - bool point_mode; - - /** Tessellation control shader: number of output vertices */ - ast_layout_expression *vertices; - - /** - * Image format specified with an ARB_shader_image_load_store - * layout qualifier. - * - * \note - * This field is only valid if \c explicit_image_format is set. - */ - enum pipe_format image_format; - - /** - * Arrangement of invocations used to calculate derivatives in a compute - * shader. From NV_compute_shader_derivatives. - */ - enum gl_derivative_group derivative_group; - - /** - * Base type of the data read from or written to this image. Only - * the following enumerants are allowed: GLSL_TYPE_UINT, - * GLSL_TYPE_INT, GLSL_TYPE_FLOAT. - * - * \note - * This field is only valid if \c explicit_image_format is set. - */ - glsl_base_type image_base_type; - - /** - * Return true if and only if an interpolation qualifier is present. - */ - bool has_interpolation() const; - - /** - * Return whether a layout qualifier is present. - */ - bool has_layout() const; - - /** - * Return whether a storage qualifier is present. - */ - bool has_storage() const; - - /** - * Return whether an auxiliary storage qualifier is present. - */ - bool has_auxiliary_storage() const; - - /** - * Return true if and only if a memory qualifier is present. - */ - bool has_memory() const; - - /** - * Return true if the qualifier is a subroutine declaration. - */ - bool is_subroutine_decl() const; - - bool merge_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - const ast_type_qualifier &q, - bool is_single_layout_merge, - bool is_multiple_layouts_merge = false); - - /** - * Validate current qualifier against the global out one. - */ - bool validate_out_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state); - - /** - * Merge current qualifier into the global out one. - */ - bool merge_into_out_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - ast_node* &node); - - /** - * Validate current qualifier against the global in one. - */ - bool validate_in_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state); - - /** - * Merge current qualifier into the global in one. - */ - bool merge_into_in_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - ast_node* &node); - - /** - * Push pending layout qualifiers to the global values. - */ - bool push_to_global(YYLTYPE *loc, - _mesa_glsl_parse_state *state); - - bool validate_flags(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - const ast_type_qualifier &allowed_flags, - const char *message, const char *name); - - ast_subroutine_list *subroutine_list; -}; - -class ast_declarator_list; - -class ast_struct_specifier : public ast_node { -public: - ast_struct_specifier(const char *identifier, - ast_declarator_list *declarator_list); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - const char *name; - ast_type_qualifier *layout; - /* List of ast_declarator_list * */ - exec_list declarations; - bool is_declaration; - const glsl_type *type; -}; - - - -class ast_type_specifier : public ast_node { -public: - /** Construct a type specifier from a type name */ - ast_type_specifier(const char *name) - : type(NULL), type_name(name), structure(NULL), array_specifier(NULL), - default_precision(ast_precision_none) - { - /* empty */ - } - - /** Construct a type specifier from a structure definition */ - ast_type_specifier(ast_struct_specifier *s) - : type(NULL), type_name(s->name), structure(s), array_specifier(NULL), - default_precision(ast_precision_none) - { - /* empty */ - } - - ast_type_specifier(const glsl_type *t) - : type(t), type_name(t->name), structure(NULL), array_specifier(NULL), - default_precision(ast_precision_none) - { - /* empty */ - } - - const struct glsl_type *glsl_type(const char **name, - struct _mesa_glsl_parse_state *state) - const; - - virtual void print(void) const; - - ir_rvalue *hir(exec_list *, struct _mesa_glsl_parse_state *); - - const struct glsl_type *type; - const char *type_name; - ast_struct_specifier *structure; - - ast_array_specifier *array_specifier; - - /** For precision statements, this is the given precision; otherwise none. */ - unsigned default_precision:2; -}; - - -class ast_fully_specified_type : public ast_node { -public: - virtual void print(void) const; - bool has_qualifiers(_mesa_glsl_parse_state *state) const; - - ast_fully_specified_type() : qualifier(), specifier(NULL) - { - } - - const struct glsl_type *glsl_type(const char **name, - struct _mesa_glsl_parse_state *state) - const; - - ast_type_qualifier qualifier; - ast_type_specifier *specifier; -}; - - -class ast_declarator_list : public ast_node { -public: - ast_declarator_list(ast_fully_specified_type *); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_fully_specified_type *type; - /** List of 'ast_declaration *' */ - exec_list declarations; - - /** - * Flags for redeclarations. In these cases, no type is specified, to - * `type` is allowed to be NULL. In all other cases, this would be an error. - */ - int invariant; /** < `invariant` redeclaration */ - int precise; /** < `precise` redeclaration */ -}; - - -class ast_parameter_declarator : public ast_node { -public: - ast_parameter_declarator() : - type(NULL), - identifier(NULL), - array_specifier(NULL), - formal_parameter(false), - is_void(false) - { - /* empty */ - } - - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_fully_specified_type *type; - const char *identifier; - ast_array_specifier *array_specifier; - - static void parameters_to_hir(exec_list *ast_parameters, - bool formal, exec_list *ir_parameters, - struct _mesa_glsl_parse_state *state); - -private: - /** Is this parameter declaration part of a formal parameter list? */ - bool formal_parameter; - - /** - * Is this parameter 'void' type? - * - * This field is set by \c ::hir. - */ - bool is_void; -}; - - -class ast_function : public ast_node { -public: - ast_function(void); - - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_fully_specified_type *return_type; - const char *identifier; - - exec_list parameters; - -private: - /** - * Is this prototype part of the function definition? - * - * Used by ast_function_definition::hir to process the parameters, etc. - * of the function. - * - * \sa ::hir - */ - bool is_definition; - - /** - * Function signature corresponding to this function prototype instance - * - * Used by ast_function_definition::hir to process the parameters, etc. - * of the function. - * - * \sa ::hir - */ - class ir_function_signature *signature; - - friend class ast_function_definition; -}; - - -class ast_expression_statement : public ast_node { -public: - ast_expression_statement(ast_expression *); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_expression *expression; -}; - - -class ast_case_label : public ast_node { -public: - ast_case_label(ast_expression *test_value); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - /** - * An test value of NULL means 'default'. - */ - ast_expression *test_value; -}; - - -class ast_case_label_list : public ast_node { -public: - ast_case_label_list(void); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - /** - * A list of case labels. - */ - exec_list labels; -}; - - -class ast_case_statement : public ast_node { -public: - ast_case_statement(ast_case_label_list *labels); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_case_label_list *labels; - - /** - * A list of statements. - */ - exec_list stmts; -}; - - -class ast_case_statement_list : public ast_node { -public: - ast_case_statement_list(void); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - /** - * A list of cases. - */ - exec_list cases; -}; - - -class ast_switch_body : public ast_node { -public: - ast_switch_body(ast_case_statement_list *stmts); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_case_statement_list *stmts; -}; - - -class ast_selection_statement : public ast_node { -public: - ast_selection_statement(ast_expression *condition, - ast_node *then_statement, - ast_node *else_statement); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_expression *condition; - ast_node *then_statement; - ast_node *else_statement; -}; - - -class ast_switch_statement : public ast_node { -public: - ast_switch_statement(ast_expression *test_expression, - ast_node *body); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_expression *test_expression; - ast_node *body; - -protected: - void test_to_hir(exec_list *, struct _mesa_glsl_parse_state *); - void eval_test_expression(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - ir_rvalue *test_val; -}; - -class ast_iteration_statement : public ast_node { -public: - ast_iteration_statement(int mode, ast_node *init, ast_node *condition, - ast_expression *rest_expression, ast_node *body); - - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *, struct _mesa_glsl_parse_state *); - - enum ast_iteration_modes { - ast_for, - ast_while, - ast_do_while - } mode; - - - ast_node *init_statement; - ast_node *condition; - ast_expression *rest_expression; - - exec_list rest_instructions; - - ast_node *body; - - /** - * Generate IR from the condition of a loop - * - * This is factored out of ::hir because some loops have the condition - * test at the top (for and while), and others have it at the end (do-while). - */ - void condition_to_hir(exec_list *, struct _mesa_glsl_parse_state *); -}; - - -class ast_jump_statement : public ast_node { -public: - ast_jump_statement(int mode, ast_expression *return_value); - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - enum ast_jump_modes { - ast_continue, - ast_break, - ast_return, - ast_discard - } mode; - - ast_expression *opt_return_value; -}; - - -class ast_demote_statement : public ast_node { -public: - ast_demote_statement(void) {} - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); -}; - - -class ast_function_definition : public ast_node { -public: - ast_function_definition() : prototype(NULL), body(NULL) - { - } - - virtual void print(void) const; - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_function *prototype; - ast_compound_statement *body; -}; - -class ast_interface_block : public ast_node { -public: - ast_interface_block(const char *instance_name, - ast_array_specifier *array_specifier) - : block_name(NULL), instance_name(instance_name), - array_specifier(array_specifier) - { - } - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - - ast_type_qualifier default_layout; - ast_type_qualifier layout; - const char *block_name; - - /** - * Declared name of the block instance, if specified. - * - * If the block does not have an instance name, this field will be - * \c NULL. - */ - const char *instance_name; - - /** List of ast_declarator_list * */ - exec_list declarations; - - /** - * Declared array size of the block instance - * - * If the block is not declared as an array or if the block instance array - * is unsized, this field will be \c NULL. - */ - ast_array_specifier *array_specifier; -}; - - -/** - * AST node representing a declaration of the output layout for tessellation - * control shaders. - */ -class ast_tcs_output_layout : public ast_node -{ -public: - ast_tcs_output_layout(const struct YYLTYPE &locp) - { - set_location(locp); - } - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); -}; - - -/** - * AST node representing a declaration of the input layout for geometry - * shaders. - */ -class ast_gs_input_layout : public ast_node -{ -public: - ast_gs_input_layout(const struct YYLTYPE &locp, GLenum prim_type) - : prim_type(prim_type) - { - set_location(locp); - } - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - -private: - const GLenum prim_type; -}; - - -/** - * AST node representing a decalaration of the input layout for compute - * shaders. - */ -class ast_cs_input_layout : public ast_node -{ -public: - ast_cs_input_layout(const struct YYLTYPE &locp, - ast_layout_expression *const *local_size) - { - for (int i = 0; i < 3; i++) { - this->local_size[i] = local_size[i]; - } - set_location(locp); - } - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - -private: - ast_layout_expression *local_size[3]; -}; - -class ast_warnings_toggle : public ast_node { -public: - ast_warnings_toggle(bool _enable) - : enable(_enable) - { - /* empty */ - } - - virtual ir_rvalue *hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - -private: - bool enable; -}; -/*@}*/ - -extern void -_mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state); - -extern ir_rvalue * -_mesa_ast_field_selection_to_hir(const ast_expression *expr, - exec_list *instructions, - struct _mesa_glsl_parse_state *state); - -extern ir_rvalue * -_mesa_ast_array_index_to_hir(void *mem_ctx, - struct _mesa_glsl_parse_state *state, - ir_rvalue *array, ir_rvalue *idx, - YYLTYPE &loc, YYLTYPE &idx_loc); - -extern void -_mesa_ast_set_aggregate_type(const glsl_type *type, - ast_expression *expr); - -void -emit_function(_mesa_glsl_parse_state *state, ir_function *f); - -extern void -check_builtin_array_max_size(const char *name, unsigned size, - YYLTYPE loc, struct _mesa_glsl_parse_state *state); - -extern void _mesa_ast_process_interface_block(YYLTYPE *locp, - _mesa_glsl_parse_state *state, - ast_interface_block *const block, - const struct ast_type_qualifier &q); - -extern bool -process_qualifier_constant(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - const char *qual_indentifier, - ast_expression *const_expression, - unsigned *value); -#endif /* AST_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_array_index.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_array_index.cpp deleted file mode 100644 index 0a4aa02..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_array_index.cpp +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ast.h" -#include "../glsl_types.h" -#include "ir.h" - -void -ast_array_specifier::print(void) const -{ - foreach_list_typed (ast_node, array_dimension, link, &this->array_dimensions) { - printf("[ "); - if (((ast_expression*)array_dimension)->oper != ast_unsized_array_dim) - array_dimension->print(); - printf("] "); - } -} - -/** - * If \c ir is a reference to an array for which we are tracking the max array - * element accessed, track that the given element has been accessed. - * Otherwise do nothing. - * - * This function also checks whether the array is a built-in array whose - * maximum size is too small to accommodate the given index, and if so uses - * loc and state to report the error. - */ -static void -update_max_array_access(ir_rvalue *ir, int idx, YYLTYPE *loc, - struct _mesa_glsl_parse_state *state) -{ - if (ir_dereference_variable *deref_var = ir->as_dereference_variable()) { - ir_variable *var = deref_var->var; - if (idx > (int)var->data.max_array_access) { - var->data.max_array_access = idx; - - /* Check whether this access will, as a side effect, implicitly cause - * the size of a built-in array to be too large. - */ - check_builtin_array_max_size(var->name, idx+1, *loc, state); - } - } else if (ir_dereference_record *deref_record = - ir->as_dereference_record()) { - /* There are three possibilities we need to consider: - * - * - Accessing an element of an array that is a member of a named - * interface block (e.g. ifc.foo[i]) - * - * - Accessing an element of an array that is a member of a named - * interface block array (e.g. ifc[j].foo[i]). - * - * - Accessing an element of an array that is a member of a named - * interface block array of arrays (e.g. ifc[j][k].foo[i]). - */ - ir_dereference_variable *deref_var = - deref_record->record->as_dereference_variable(); - if (deref_var == NULL) { - ir_dereference_array *deref_array = - deref_record->record->as_dereference_array(); - ir_dereference_array *deref_array_prev = NULL; - while (deref_array != NULL) { - deref_array_prev = deref_array; - deref_array = deref_array->array->as_dereference_array(); - } - if (deref_array_prev != NULL) - deref_var = deref_array_prev->array->as_dereference_variable(); - } - - if (deref_var != NULL) { - if (deref_var->var->is_interface_instance()) { - unsigned field_idx = deref_record->field_idx; - assert(field_idx < deref_var->var->get_interface_type()->length); - - int *const max_ifc_array_access = - deref_var->var->get_max_ifc_array_access(); - - assert(max_ifc_array_access != NULL); - - if (idx > max_ifc_array_access[field_idx]) { - max_ifc_array_access[field_idx] = idx; - - /* Check whether this access will, as a side effect, implicitly - * cause the size of a built-in array to be too large. - */ - const char *field_name = - deref_record->record->type->fields.structure[field_idx].name; - check_builtin_array_max_size(field_name, idx+1, *loc, state); - } - } - } - } -} - - -static int -get_implicit_array_size(struct _mesa_glsl_parse_state *state, - ir_rvalue *array) -{ - ir_variable *var = array->variable_referenced(); - - /* Inputs in control shader are implicitly sized - * to the maximum patch size. - */ - if (state->stage == MESA_SHADER_TESS_CTRL && - var->data.mode == ir_var_shader_in) { - return state->Const.MaxPatchVertices; - } - - /* Non-patch inputs in evaluation shader are implicitly sized - * to the maximum patch size. - */ - if (state->stage == MESA_SHADER_TESS_EVAL && - var->data.mode == ir_var_shader_in && - !var->data.patch) { - return state->Const.MaxPatchVertices; - } - - return 0; -} - - -ir_rvalue * -_mesa_ast_array_index_to_hir(void *mem_ctx, - struct _mesa_glsl_parse_state *state, - ir_rvalue *array, ir_rvalue *idx, - YYLTYPE &loc, YYLTYPE &idx_loc) -{ - if (!array->type->is_error() - && !array->type->is_array() - && !array->type->is_matrix() - && !array->type->is_vector()) { - _mesa_glsl_error(& idx_loc, state, - "cannot dereference non-array / non-matrix / " - "non-vector"); - } - - if (!idx->type->is_error()) { - if (!idx->type->is_integer_32()) { - _mesa_glsl_error(& idx_loc, state, "array index must be integer type"); - } else if (!idx->type->is_scalar()) { - _mesa_glsl_error(& idx_loc, state, "array index must be scalar"); - } - } - - /* If the array index is a constant expression and the array has a - * declared size, ensure that the access is in-bounds. If the array - * index is not a constant expression, ensure that the array has a - * declared size. - */ - ir_constant *const const_index = idx->constant_expression_value(mem_ctx); - if (const_index != NULL && idx->type->is_integer_32()) { - const int idx = const_index->value.i[0]; - const char *type_name = "error"; - unsigned bound = 0; - - /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec: - * - * "It is illegal to declare an array with a size, and then - * later (in the same shader) index the same array with an - * integral constant expression greater than or equal to the - * declared size. It is also illegal to index an array with a - * negative constant expression." - */ - if (array->type->is_matrix()) { - if (array->type->row_type()->vector_elements <= idx) { - type_name = "matrix"; - bound = array->type->row_type()->vector_elements; - } - } else if (array->type->is_vector()) { - if (array->type->vector_elements <= idx) { - type_name = "vector"; - bound = array->type->vector_elements; - } - } else { - /* glsl_type::array_size() returns -1 for non-array types. This means - * that we don't need to verify that the type is an array before - * doing the bounds checking. - */ - if ((array->type->array_size() > 0) - && (array->type->array_size() <= idx)) { - type_name = "array"; - bound = array->type->array_size(); - } - } - - if (bound > 0) { - _mesa_glsl_error(& loc, state, "%s index must be < %u", - type_name, bound); - } else if (idx < 0) { - _mesa_glsl_error(& loc, state, "%s index must be >= 0", type_name); - } - - if (array->type->is_array()) - update_max_array_access(array, idx, &loc, state); - } else if (const_index == NULL && array->type->is_array()) { - if (array->type->is_unsized_array()) { - int implicit_size = get_implicit_array_size(state, array); - if (implicit_size) { - ir_variable *v = array->whole_variable_referenced(); - if (v != NULL) - v->data.max_array_access = implicit_size - 1; - } - else if (state->stage == MESA_SHADER_TESS_CTRL && - array->variable_referenced()->data.mode == ir_var_shader_out && - !array->variable_referenced()->data.patch) { - /* Tessellation control shader output non-patch arrays are - * initially unsized. Despite that, they are allowed to be - * indexed with a non-constant expression (typically - * "gl_InvocationID"). The array size will be determined - * by the linker. - */ - } - else if (array->variable_referenced()->data.mode != - ir_var_shader_storage) { - _mesa_glsl_error(&loc, state, "unsized array index must be constant"); - } else { - /* Unsized array non-constant indexing on SSBO is allowed only for - * the last member of the SSBO definition. - */ - ir_variable *var = array->variable_referenced(); - const glsl_type *iface_type = var->get_interface_type(); - int field_index = iface_type->field_index(var->name); - /* Field index can be < 0 for instance arrays */ - if (field_index >= 0 && - field_index != (int) iface_type->length - 1) { - _mesa_glsl_error(&loc, state, "Indirect access on unsized " - "array is limited to the last member of " - "SSBO."); - } - } - } else if (array->type->without_array()->is_interface() - && ((array->variable_referenced()->data.mode == ir_var_uniform - && !state->is_version(400, 320) - && !state->ARB_gpu_shader5_enable - && !state->EXT_gpu_shader5_enable - && !state->OES_gpu_shader5_enable) || - (array->variable_referenced()->data.mode == ir_var_shader_storage - && !state->is_version(400, 0) - && !state->ARB_gpu_shader5_enable))) { - /* Page 50 in section 4.3.9 of the OpenGL ES 3.10 spec says: - * - * "All indices used to index a uniform or shader storage block - * array must be constant integral expressions." - * - * But OES_gpu_shader5 (and ESSL 3.20) relax this to allow indexing - * on uniform blocks but not shader storage blocks. - * - */ - _mesa_glsl_error(&loc, state, "%s block array index must be constant", - array->variable_referenced()->data.mode - == ir_var_uniform ? "uniform" : "shader storage"); - } else { - /* whole_variable_referenced can return NULL if the array is a - * member of a structure. In this case it is safe to not update - * the max_array_access field because it is never used for fields - * of structures. - */ - ir_variable *v = array->whole_variable_referenced(); - if (v != NULL) - v->data.max_array_access = array->type->array_size() - 1; - } - - /* From page 23 (29 of the PDF) of the GLSL 1.30 spec: - * - * "Samplers aggregated into arrays within a shader (using square - * brackets [ ]) can only be indexed with integral constant - * expressions [...]." - * - * This restriction was added in GLSL 1.30. Shaders using earlier - * version of the language should not be rejected by the compiler - * front-end for using this construct. This allows useful things such - * as using a loop counter as the index to an array of samplers. If the - * loop in unrolled, the code should compile correctly. Instead, emit a - * warning. - * - * In GLSL 4.00 / ARB_gpu_shader5, this requirement is relaxed again to allow - * indexing with dynamically uniform expressions. Note that these are not - * required to be uniforms or expressions based on them, but merely that the - * values must not diverge between shader invocations run together. If the - * values *do* diverge, then the behavior of the operation requiring a - * dynamically uniform expression is undefined. - * - * From section 4.1.7 of the ARB_bindless_texture spec: - * - * "Samplers aggregated into arrays within a shader (using square - * brackets []) can be indexed with arbitrary integer expressions." - */ - if (array->type->without_array()->is_sampler()) { - if (!state->is_version(400, 320) && - !state->ARB_gpu_shader5_enable && - !state->EXT_gpu_shader5_enable && - !state->OES_gpu_shader5_enable && - !state->has_bindless()) { - if (state->is_version(130, 300)) - _mesa_glsl_error(&loc, state, - "sampler arrays indexed with non-constant " - "expressions are forbidden in GLSL %s " - "and later", - state->es_shader ? "ES 3.00" : "1.30"); - else if (state->es_shader) - _mesa_glsl_warning(&loc, state, - "sampler arrays indexed with non-constant " - "expressions will be forbidden in GLSL " - "3.00 and later"); - else - _mesa_glsl_warning(&loc, state, - "sampler arrays indexed with non-constant " - "expressions will be forbidden in GLSL " - "1.30 and later"); - } - } - - /* From page 27 of the GLSL ES 3.1 specification: - * - * "When aggregated into arrays within a shader, images can only be - * indexed with a constant integral expression." - * - * On the other hand the desktop GL specification extension allows - * non-constant indexing of image arrays, but behavior is left undefined - * in cases where the indexing expression is not dynamically uniform. - */ - if (state->es_shader && array->type->without_array()->is_image()) { - _mesa_glsl_error(&loc, state, - "image arrays indexed with non-constant " - "expressions are forbidden in GLSL ES."); - } - } - - /* After performing all of the error checking, generate the IR for the - * expression. - */ - if (array->type->is_array() - || array->type->is_matrix() - || array->type->is_vector()) { - return new(mem_ctx) ir_dereference_array(array, idx); - } else if (array->type->is_error()) { - return array; - } else { - ir_rvalue *result = new(mem_ctx) ir_dereference_array(array, idx); - result->type = glsl_type::error_type; - - return result; - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_expr.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_expr.cpp deleted file mode 100644 index 1e06418..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_expr.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include "ast.h" - -const char * -ast_expression::operator_string(enum ast_operators op) -{ - static const char *const operators[] = { - "=", - "+", - "-", - "+", - "-", - "*", - "/", - "%", - "<<", - ">>", - "<", - ">", - "<=", - ">=", - "==", - "!=", - "&", - "^", - "|", - "~", - "&&", - "^^", - "||", - "!", - - "*=", - "/=", - "%=", - "+=", - "-=", - "<<=", - ">>=", - "&=", - "^=", - "|=", - - "?:", - - "++", - "--", - "++", - "--", - ".", - }; - - assert((unsigned int)op < sizeof(operators) / sizeof(operators[0])); - - return operators[op]; -} - - -ast_expression_bin::ast_expression_bin(int oper, ast_expression *ex0, - ast_expression *ex1) : - ast_expression(oper, ex0, ex1, NULL) -{ - assert((oper >= ast_plus) && (oper <= ast_logic_not)); -} - - -void -ast_expression_bin::print(void) const -{ - subexpressions[0]->print(); - printf("%s ", operator_string(oper)); - subexpressions[1]->print(); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_function.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_function.cpp deleted file mode 100644 index 8d4a294..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_function.cpp +++ /dev/null @@ -1,2554 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "glsl_symbol_table.h" -#include "ast.h" -#include "../glsl_types.h" -#include "ir.h" -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/shaderobj.h" -#include "builtin_functions.h" - -static ir_rvalue * -convert_component(ir_rvalue *src, const glsl_type *desired_type); - -static unsigned -process_parameters(exec_list *instructions, exec_list *actual_parameters, - exec_list *parameters, - struct _mesa_glsl_parse_state *state) -{ - void *mem_ctx = state; - unsigned count = 0; - - foreach_list_typed(ast_node, ast, link, parameters) { - /* We need to process the parameters first in order to know if we can - * raise or not a unitialized warning. Calling set_is_lhs silence the - * warning for now. Raising the warning or not will be checked at - * verify_parameter_modes. - */ - ast->set_is_lhs(true); - ir_rvalue *result = ast->hir(instructions, state); - - /* Error happened processing function parameter */ - if (!result) { - actual_parameters->push_tail(ir_rvalue::error_value(mem_ctx)); - count++; - continue; - } - - ir_constant *const constant = - result->constant_expression_value(mem_ctx); - - if (constant != NULL) - result = constant; - - actual_parameters->push_tail(result); - count++; - } - - return count; -} - - -/** - * Generate a source prototype for a function signature - * - * \param return_type Return type of the function. May be \c NULL. - * \param name Name of the function. - * \param parameters List of \c ir_instruction nodes representing the - * parameter list for the function. This may be either a - * formal (\c ir_variable) or actual (\c ir_rvalue) - * parameter list. Only the type is used. - * - * \return - * A ralloced string representing the prototype of the function. - */ -char * -prototype_string(const glsl_type *return_type, const char *name, - exec_list *parameters) -{ - char *str = NULL; - - if (return_type != NULL) - str = ralloc_asprintf(NULL, "%s ", return_type->name); - - ralloc_asprintf_append(&str, "%s(", name); - - const char *comma = ""; - foreach_in_list(const ir_variable, param, parameters) { - ralloc_asprintf_append(&str, "%s%s", comma, param->type->name); - comma = ", "; - } - - ralloc_strcat(&str, ")"); - return str; -} - -static bool -verify_image_parameter(YYLTYPE *loc, _mesa_glsl_parse_state *state, - const ir_variable *formal, const ir_variable *actual) -{ - /** - * From the ARB_shader_image_load_store specification: - * - * "The values of image variables qualified with coherent, - * volatile, restrict, readonly, or writeonly may not be passed - * to functions whose formal parameters lack such - * qualifiers. [...] It is legal to have additional qualifiers - * on a formal parameter, but not to have fewer." - */ - if (actual->data.memory_coherent && !formal->data.memory_coherent) { - _mesa_glsl_error(loc, state, - "function call parameter `%s' drops " - "`coherent' qualifier", formal->name); - return false; - } - - if (actual->data.memory_volatile && !formal->data.memory_volatile) { - _mesa_glsl_error(loc, state, - "function call parameter `%s' drops " - "`volatile' qualifier", formal->name); - return false; - } - - if (actual->data.memory_restrict && !formal->data.memory_restrict) { - _mesa_glsl_error(loc, state, - "function call parameter `%s' drops " - "`restrict' qualifier", formal->name); - return false; - } - - if (actual->data.memory_read_only && !formal->data.memory_read_only) { - _mesa_glsl_error(loc, state, - "function call parameter `%s' drops " - "`readonly' qualifier", formal->name); - return false; - } - - if (actual->data.memory_write_only && !formal->data.memory_write_only) { - _mesa_glsl_error(loc, state, - "function call parameter `%s' drops " - "`writeonly' qualifier", formal->name); - return false; - } - - return true; -} - -static bool -verify_first_atomic_parameter(YYLTYPE *loc, _mesa_glsl_parse_state *state, - ir_variable *var) -{ - if (!var || - (!var->is_in_shader_storage_block() && - var->data.mode != ir_var_shader_shared)) { - _mesa_glsl_error(loc, state, "First argument to atomic function " - "must be a buffer or shared variable"); - return false; - } - return true; -} - -static bool -is_atomic_function(const char *func_name) -{ - return !strcmp(func_name, "atomicAdd") || - !strcmp(func_name, "atomicMin") || - !strcmp(func_name, "atomicMax") || - !strcmp(func_name, "atomicAnd") || - !strcmp(func_name, "atomicOr") || - !strcmp(func_name, "atomicXor") || - !strcmp(func_name, "atomicExchange") || - !strcmp(func_name, "atomicCompSwap"); -} - -static bool -verify_atomic_image_parameter_qualifier(YYLTYPE *loc, _mesa_glsl_parse_state *state, - ir_variable *var) -{ - if (!var || - (var->data.image_format != PIPE_FORMAT_R32_UINT && - var->data.image_format != PIPE_FORMAT_R32_SINT && - var->data.image_format != PIPE_FORMAT_R32_FLOAT)) { - _mesa_glsl_error(loc, state, "Image atomic functions should use r32i/r32ui " - "format qualifier"); - return false; - } - return true; -} - -static bool -is_atomic_image_function(const char *func_name) -{ - return !strcmp(func_name, "imageAtomicAdd") || - !strcmp(func_name, "imageAtomicMin") || - !strcmp(func_name, "imageAtomicMax") || - !strcmp(func_name, "imageAtomicAnd") || - !strcmp(func_name, "imageAtomicOr") || - !strcmp(func_name, "imageAtomicXor") || - !strcmp(func_name, "imageAtomicExchange") || - !strcmp(func_name, "imageAtomicCompSwap") || - !strcmp(func_name, "imageAtomicIncWrap") || - !strcmp(func_name, "imageAtomicDecWrap"); -} - - -/** - * Verify that 'out' and 'inout' actual parameters are lvalues. Also, verify - * that 'const_in' formal parameters (an extension in our IR) correspond to - * ir_constant actual parameters. - */ -static bool -verify_parameter_modes(_mesa_glsl_parse_state *state, - ir_function_signature *sig, - exec_list &actual_ir_parameters, - exec_list &actual_ast_parameters) -{ - exec_node *actual_ir_node = actual_ir_parameters.get_head_raw(); - exec_node *actual_ast_node = actual_ast_parameters.get_head_raw(); - - foreach_in_list(const ir_variable, formal, &sig->parameters) { - /* The lists must be the same length. */ - assert(!actual_ir_node->is_tail_sentinel()); - assert(!actual_ast_node->is_tail_sentinel()); - - const ir_rvalue *const actual = (ir_rvalue *) actual_ir_node; - const ast_expression *const actual_ast = - exec_node_data(ast_expression, actual_ast_node, link); - - YYLTYPE loc = actual_ast->get_location(); - - /* Verify that 'const_in' parameters are ir_constants. */ - if (formal->data.mode == ir_var_const_in && - actual->ir_type != ir_type_constant) { - _mesa_glsl_error(&loc, state, - "parameter `in %s' must be a constant expression", - formal->name); - return false; - } - - /* Verify that shader_in parameters are shader inputs */ - if (formal->data.must_be_shader_input) { - const ir_rvalue *val = actual; - - /* GLSL 4.40 allows swizzles, while earlier GLSL versions do not. */ - if (val->ir_type == ir_type_swizzle) { - if (!state->is_version(440, 0)) { - _mesa_glsl_error(&loc, state, - "parameter `%s` must not be swizzled", - formal->name); - return false; - } - val = ((ir_swizzle *)val)->val; - } - - for (;;) { - if (val->ir_type == ir_type_dereference_array) { - val = ((ir_dereference_array *)val)->array; - } else if (val->ir_type == ir_type_dereference_record && - !state->es_shader) { - val = ((ir_dereference_record *)val)->record; - } else - break; - } - - ir_variable *var = NULL; - if (const ir_dereference_variable *deref_var = val->as_dereference_variable()) - var = deref_var->variable_referenced(); - - if (!var || var->data.mode != ir_var_shader_in) { - _mesa_glsl_error(&loc, state, - "parameter `%s` must be a shader input", - formal->name); - return false; - } - - var->data.must_be_shader_input = 1; - } - - /* Verify that 'out' and 'inout' actual parameters are lvalues. */ - if (formal->data.mode == ir_var_function_out - || formal->data.mode == ir_var_function_inout) { - const char *mode = NULL; - switch (formal->data.mode) { - case ir_var_function_out: mode = "out"; break; - case ir_var_function_inout: mode = "inout"; break; - default: assert(false); break; - } - - /* This AST-based check catches errors like f(i++). The IR-based - * is_lvalue() is insufficient because the actual parameter at the - * IR-level is just a temporary value, which is an l-value. - */ - if (actual_ast->non_lvalue_description != NULL) { - _mesa_glsl_error(&loc, state, - "function parameter '%s %s' references a %s", - mode, formal->name, - actual_ast->non_lvalue_description); - return false; - } - - ir_variable *var = actual->variable_referenced(); - - if (var && formal->data.mode == ir_var_function_inout) { - if ((var->data.mode == ir_var_auto || - var->data.mode == ir_var_shader_out) && - !var->data.assigned && - !is_gl_identifier(var->name)) { - _mesa_glsl_warning(&loc, state, "`%s' used uninitialized", - var->name); - } - } - - if (var) - var->data.assigned = true; - - if (var && var->data.read_only) { - _mesa_glsl_error(&loc, state, - "function parameter '%s %s' references the " - "read-only variable '%s'", - mode, formal->name, - actual->variable_referenced()->name); - return false; - } else if (!actual->is_lvalue(state)) { - _mesa_glsl_error(&loc, state, - "function parameter '%s %s' is not an lvalue", - mode, formal->name); - return false; - } - } else { - assert(formal->data.mode == ir_var_function_in || - formal->data.mode == ir_var_const_in); - ir_variable *var = actual->variable_referenced(); - if (var) { - if ((var->data.mode == ir_var_auto || - var->data.mode == ir_var_shader_out) && - !var->data.assigned && - !is_gl_identifier(var->name)) { - _mesa_glsl_warning(&loc, state, "`%s' used uninitialized", - var->name); - } - } - } - - if (formal->type->is_image() && - actual->variable_referenced()) { - if (!verify_image_parameter(&loc, state, formal, - actual->variable_referenced())) - return false; - } - - actual_ir_node = actual_ir_node->next; - actual_ast_node = actual_ast_node->next; - } - - /* The first parameter of atomic functions must be a buffer variable */ - const char *func_name = sig->function_name(); - bool is_atomic = is_atomic_function(func_name); - if (is_atomic) { - const ir_rvalue *const actual = - (ir_rvalue *) actual_ir_parameters.get_head_raw(); - - const ast_expression *const actual_ast = - exec_node_data(ast_expression, - actual_ast_parameters.get_head_raw(), link); - YYLTYPE loc = actual_ast->get_location(); - - if (!verify_first_atomic_parameter(&loc, state, - actual->variable_referenced())) { - return false; - } - } else if (is_atomic_image_function(func_name)) { - const ir_rvalue *const actual = - (ir_rvalue *) actual_ir_parameters.get_head_raw(); - - const ast_expression *const actual_ast = - exec_node_data(ast_expression, - actual_ast_parameters.get_head_raw(), link); - YYLTYPE loc = actual_ast->get_location(); - - if (!verify_atomic_image_parameter_qualifier(&loc, state, - actual->variable_referenced())) { - return false; - } - } - - return true; -} - -struct copy_index_deref_data { - void *mem_ctx; - exec_list *before_instructions; -}; - -static void -copy_index_derefs_to_temps(ir_instruction *ir, void *data) -{ - struct copy_index_deref_data *d = (struct copy_index_deref_data *)data; - - if (ir->ir_type == ir_type_dereference_array) { - ir_dereference_array *a = (ir_dereference_array *) ir; - ir = a->array->as_dereference(); - - ir_rvalue *idx = a->array_index; - ir_variable *var = idx->variable_referenced(); - - /* If the index is read only it cannot change so there is no need - * to copy it. - */ - if (!var || var->data.read_only || var->data.memory_read_only) - return; - - ir_variable *tmp = new(d->mem_ctx) ir_variable(idx->type, "idx_tmp", - ir_var_temporary); - d->before_instructions->push_tail(tmp); - - ir_dereference_variable *const deref_tmp_1 = - new(d->mem_ctx) ir_dereference_variable(tmp); - ir_assignment *const assignment = - new(d->mem_ctx) ir_assignment(deref_tmp_1, - idx->clone(d->mem_ctx, NULL)); - d->before_instructions->push_tail(assignment); - - /* Replace the array index with a dereference of the new temporary */ - ir_dereference_variable *const deref_tmp_2 = - new(d->mem_ctx) ir_dereference_variable(tmp); - a->array_index = deref_tmp_2; - } -} - -static void -fix_parameter(void *mem_ctx, ir_rvalue *actual, const glsl_type *formal_type, - exec_list *before_instructions, exec_list *after_instructions, - bool parameter_is_inout) -{ - ir_expression *const expr = actual->as_expression(); - - /* If the types match exactly and the parameter is not a vector-extract, - * nothing needs to be done to fix the parameter. - */ - if (formal_type == actual->type - && (expr == NULL || expr->operation != ir_binop_vector_extract) - && actual->as_dereference_variable()) - return; - - /* An array index could also be an out variable so we need to make a copy - * of them before the function is called. - */ - if (!actual->as_dereference_variable()) { - struct copy_index_deref_data data; - data.mem_ctx = mem_ctx; - data.before_instructions = before_instructions; - - visit_tree(actual, copy_index_derefs_to_temps, &data); - } - - /* To convert an out parameter, we need to create a temporary variable to - * hold the value before conversion, and then perform the conversion after - * the function call returns. - * - * This has the effect of transforming code like this: - * - * void f(out int x); - * float value; - * f(value); - * - * Into IR that's equivalent to this: - * - * void f(out int x); - * float value; - * int out_parameter_conversion; - * f(out_parameter_conversion); - * value = float(out_parameter_conversion); - * - * If the parameter is an ir_expression of ir_binop_vector_extract, - * additional conversion is needed in the post-call re-write. - */ - ir_variable *tmp = - new(mem_ctx) ir_variable(formal_type, "inout_tmp", ir_var_temporary); - - before_instructions->push_tail(tmp); - - /* If the parameter is an inout parameter, copy the value of the actual - * parameter to the new temporary. Note that no type conversion is allowed - * here because inout parameters must match types exactly. - */ - if (parameter_is_inout) { - /* Inout parameters should never require conversion, since that would - * require an implicit conversion to exist both to and from the formal - * parameter type, and there are no bidirectional implicit conversions. - */ - assert (actual->type == formal_type); - - ir_dereference_variable *const deref_tmp_1 = - new(mem_ctx) ir_dereference_variable(tmp); - ir_assignment *const assignment = - new(mem_ctx) ir_assignment(deref_tmp_1, actual->clone(mem_ctx, NULL)); - before_instructions->push_tail(assignment); - } - - /* Replace the parameter in the call with a dereference of the new - * temporary. - */ - ir_dereference_variable *const deref_tmp_2 = - new(mem_ctx) ir_dereference_variable(tmp); - actual->replace_with(deref_tmp_2); - - - /* Copy the temporary variable to the actual parameter with optional - * type conversion applied. - */ - ir_rvalue *rhs = new(mem_ctx) ir_dereference_variable(tmp); - if (actual->type != formal_type) - rhs = convert_component(rhs, actual->type); - - ir_rvalue *lhs = actual; - if (expr != NULL && expr->operation == ir_binop_vector_extract) { - lhs = new(mem_ctx) ir_dereference_array(expr->operands[0]->clone(mem_ctx, - NULL), - expr->operands[1]->clone(mem_ctx, - NULL)); - } - - ir_assignment *const assignment_2 = new(mem_ctx) ir_assignment(lhs, rhs); - after_instructions->push_tail(assignment_2); -} - -/** - * Generate a function call. - * - * For non-void functions, this returns a dereference of the temporary - * variable which stores the return value for the call. For void functions, - * this returns NULL. - */ -static ir_rvalue * -generate_call(exec_list *instructions, ir_function_signature *sig, - exec_list *actual_parameters, - ir_variable *sub_var, - ir_rvalue *array_idx, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - exec_list post_call_conversions; - - /* Perform implicit conversion of arguments. For out parameters, we need - * to place them in a temporary variable and do the conversion after the - * call takes place. Since we haven't emitted the call yet, we'll place - * the post-call conversions in a temporary exec_list, and emit them later. - */ - foreach_two_lists(formal_node, &sig->parameters, - actual_node, actual_parameters) { - ir_rvalue *actual = (ir_rvalue *) actual_node; - ir_variable *formal = (ir_variable *) formal_node; - - if (formal->type->is_numeric() || formal->type->is_boolean()) { - switch (formal->data.mode) { - case ir_var_const_in: - case ir_var_function_in: { - ir_rvalue *converted - = convert_component(actual, formal->type); - actual->replace_with(converted); - break; - } - case ir_var_function_out: - case ir_var_function_inout: - fix_parameter(ctx, actual, formal->type, - instructions, &post_call_conversions, - formal->data.mode == ir_var_function_inout); - break; - default: - assert (!"Illegal formal parameter mode"); - break; - } - } - } - - /* Section 4.3.2 (Const) of the GLSL 1.10.59 spec says: - * - * "Initializers for const declarations must be formed from literal - * values, other const variables (not including function call - * paramaters), or expressions of these. - * - * Constructors may be used in such expressions, but function calls may - * not." - * - * Section 4.3.3 (Constant Expressions) of the GLSL 1.20.8 spec says: - * - * "A constant expression is one of - * - * ... - * - * - a built-in function call whose arguments are all constant - * expressions, with the exception of the texture lookup - * functions, the noise functions, and ftransform. The built-in - * functions dFdx, dFdy, and fwidth must return 0 when evaluated - * inside an initializer with an argument that is a constant - * expression." - * - * Section 5.10 (Constant Expressions) of the GLSL ES 1.00.17 spec says: - * - * "A constant expression is one of - * - * ... - * - * - a built-in function call whose arguments are all constant - * expressions, with the exception of the texture lookup - * functions." - * - * Section 4.3.3 (Constant Expressions) of the GLSL ES 3.00.4 spec says: - * - * "A constant expression is one of - * - * ... - * - * - a built-in function call whose arguments are all constant - * expressions, with the exception of the texture lookup - * functions. The built-in functions dFdx, dFdy, and fwidth must - * return 0 when evaluated inside an initializer with an argument - * that is a constant expression." - * - * If the function call is a constant expression, don't generate any - * instructions; just generate an ir_constant. - */ - if (state->is_version(120, 100) || - state->consts->AllowGLSLBuiltinConstantExpression) { - ir_constant *value = sig->constant_expression_value(ctx, - actual_parameters, - NULL); - if (value != NULL) { - return value; - } - } - - ir_dereference_variable *deref = NULL; - if (!sig->return_type->is_void()) { - /* Create a new temporary to hold the return value. */ - char *const name = ir_variable::temporaries_allocate_names - ? ralloc_asprintf(ctx, "%s_retval", sig->function_name()) - : NULL; - - ir_variable *var; - - var = new(ctx) ir_variable(sig->return_type, name, ir_var_temporary); - var->data.precision = sig->return_precision; - instructions->push_tail(var); - - ralloc_free(name); - - deref = new(ctx) ir_dereference_variable(var); - } - - ir_call *call = new(ctx) ir_call(sig, deref, - actual_parameters, sub_var, array_idx); - instructions->push_tail(call); - - /* Also emit any necessary out-parameter conversions. */ - instructions->append_list(&post_call_conversions); - - return deref ? deref->clone(ctx, NULL) : NULL; -} - -/** - * Given a function name and parameter list, find the matching signature. - */ -static ir_function_signature * -match_function_by_name(const char *name, - exec_list *actual_parameters, - struct _mesa_glsl_parse_state *state) -{ - ir_function *f = state->symbols->get_function(name); - ir_function_signature *local_sig = NULL; - ir_function_signature *sig = NULL; - - /* Is the function hidden by a record type constructor? */ - if (state->symbols->get_type(name)) - return sig; /* no match */ - - /* Is the function hidden by a variable (impossible in 1.10)? */ - if (!state->symbols->separate_function_namespace - && state->symbols->get_variable(name)) - return sig; /* no match */ - - if (f != NULL) { - /* In desktop GL, the presence of a user-defined signature hides any - * built-in signatures, so we must ignore them. In contrast, in ES2 - * user-defined signatures add new overloads, so we must consider them. - */ - bool allow_builtins = state->es_shader || !f->has_user_signature(); - - /* Look for a match in the local shader. If exact, we're done. */ - bool is_exact = false; - sig = local_sig = f->matching_signature(state, actual_parameters, - allow_builtins, &is_exact); - if (is_exact) - return sig; - - if (!allow_builtins) - return sig; - } - - /* Local shader has no exact candidates; check the built-ins. */ - sig = _mesa_glsl_find_builtin_function(state, name, actual_parameters); - - /* if _mesa_glsl_find_builtin_function failed, fall back to the result - * of choose_best_inexact_overload() instead. This should only affect - * GLES. - */ - return sig ? sig : local_sig; -} - -static ir_function_signature * -match_subroutine_by_name(const char *name, - exec_list *actual_parameters, - struct _mesa_glsl_parse_state *state, - ir_variable **var_r) -{ - void *ctx = state; - ir_function_signature *sig = NULL; - ir_function *f, *found = NULL; - const char *new_name; - ir_variable *var; - bool is_exact = false; - - new_name = - ralloc_asprintf(ctx, "%s_%s", - _mesa_shader_stage_to_subroutine_prefix(state->stage), - name); - var = state->symbols->get_variable(new_name); - if (!var) - return NULL; - - for (int i = 0; i < state->num_subroutine_types; i++) { - f = state->subroutine_types[i]; - if (strcmp(f->name, var->type->without_array()->name)) - continue; - found = f; - break; - } - - if (!found) - return NULL; - *var_r = var; - sig = found->matching_signature(state, actual_parameters, - false, &is_exact); - return sig; -} - -static ir_rvalue * -generate_array_index(void *mem_ctx, exec_list *instructions, - struct _mesa_glsl_parse_state *state, YYLTYPE loc, - const ast_expression *array, ast_expression *idx, - const char **function_name, exec_list *actual_parameters) -{ - if (array->oper == ast_array_index) { - /* This handles arrays of arrays */ - ir_rvalue *outer_array = generate_array_index(mem_ctx, instructions, - state, loc, - array->subexpressions[0], - array->subexpressions[1], - function_name, - actual_parameters); - ir_rvalue *outer_array_idx = idx->hir(instructions, state); - - YYLTYPE index_loc = idx->get_location(); - return _mesa_ast_array_index_to_hir(mem_ctx, state, outer_array, - outer_array_idx, loc, - index_loc); - } else { - ir_variable *sub_var = NULL; - *function_name = array->primary_expression.identifier; - - if (!match_subroutine_by_name(*function_name, actual_parameters, - state, &sub_var)) { - _mesa_glsl_error(&loc, state, "Unknown subroutine `%s'", - *function_name); - *function_name = NULL; /* indicate error condition to caller */ - return NULL; - } - - ir_rvalue *outer_array_idx = idx->hir(instructions, state); - return new(mem_ctx) ir_dereference_array(sub_var, outer_array_idx); - } -} - -static bool -function_exists(_mesa_glsl_parse_state *state, - struct glsl_symbol_table *symbols, const char *name) -{ - ir_function *f = symbols->get_function(name); - if (f != NULL) { - foreach_in_list(ir_function_signature, sig, &f->signatures) { - if (sig->is_builtin() && !sig->is_builtin_available(state)) - continue; - return true; - } - } - return false; -} - -static void -print_function_prototypes(_mesa_glsl_parse_state *state, YYLTYPE *loc, - ir_function *f) -{ - if (f == NULL) - return; - - foreach_in_list(ir_function_signature, sig, &f->signatures) { - if (sig->is_builtin() && !sig->is_builtin_available(state)) - continue; - - char *str = prototype_string(sig->return_type, f->name, - &sig->parameters); - _mesa_glsl_error(loc, state, " %s", str); - ralloc_free(str); - } -} - -/** - * Raise a "no matching function" error, listing all possible overloads the - * compiler considered so developers can figure out what went wrong. - */ -static void -no_matching_function_error(const char *name, - YYLTYPE *loc, - exec_list *actual_parameters, - _mesa_glsl_parse_state *state) -{ - gl_shader *sh = _mesa_glsl_get_builtin_function_shader(); - - if (!function_exists(state, state->symbols, name) - && (!state->uses_builtin_functions - || !function_exists(state, sh->symbols, name))) { - _mesa_glsl_error(loc, state, "no function with name '%s'", name); - } else { - char *str = prototype_string(NULL, name, actual_parameters); - _mesa_glsl_error(loc, state, - "no matching function for call to `%s';" - " candidates are:", - str); - ralloc_free(str); - - print_function_prototypes(state, loc, - state->symbols->get_function(name)); - - if (state->uses_builtin_functions) { - print_function_prototypes(state, loc, - sh->symbols->get_function(name)); - } - } -} - -/** - * Perform automatic type conversion of constructor parameters - * - * This implements the rules in the "Conversion and Scalar Constructors" - * section (GLSL 1.10 section 5.4.1), not the "Implicit Conversions" rules. - */ -static ir_rvalue * -convert_component(ir_rvalue *src, const glsl_type *desired_type) -{ - void *ctx = ralloc_parent(src); - const unsigned a = desired_type->base_type; - const unsigned b = src->type->base_type; - ir_expression *result = NULL; - - if (src->type->is_error()) - return src; - - assert(a <= GLSL_TYPE_IMAGE); - assert(b <= GLSL_TYPE_IMAGE); - - if (a == b) - return src; - - switch (a) { - case GLSL_TYPE_UINT: - switch (b) { - case GLSL_TYPE_INT: - result = new(ctx) ir_expression(ir_unop_i2u, src); - break; - case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_f2u, src); - break; - case GLSL_TYPE_BOOL: - result = new(ctx) ir_expression(ir_unop_i2u, - new(ctx) ir_expression(ir_unop_b2i, - src)); - break; - case GLSL_TYPE_DOUBLE: - result = new(ctx) ir_expression(ir_unop_d2u, src); - break; - case GLSL_TYPE_UINT64: - result = new(ctx) ir_expression(ir_unop_u642u, src); - break; - case GLSL_TYPE_INT64: - result = new(ctx) ir_expression(ir_unop_i642u, src); - break; - case GLSL_TYPE_SAMPLER: - result = new(ctx) ir_expression(ir_unop_unpack_sampler_2x32, src); - break; - case GLSL_TYPE_IMAGE: - result = new(ctx) ir_expression(ir_unop_unpack_image_2x32, src); - break; - } - break; - case GLSL_TYPE_INT: - switch (b) { - case GLSL_TYPE_UINT: - result = new(ctx) ir_expression(ir_unop_u2i, src); - break; - case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_f2i, src); - break; - case GLSL_TYPE_BOOL: - result = new(ctx) ir_expression(ir_unop_b2i, src); - break; - case GLSL_TYPE_DOUBLE: - result = new(ctx) ir_expression(ir_unop_d2i, src); - break; - case GLSL_TYPE_UINT64: - result = new(ctx) ir_expression(ir_unop_u642i, src); - break; - case GLSL_TYPE_INT64: - result = new(ctx) ir_expression(ir_unop_i642i, src); - break; - } - break; - case GLSL_TYPE_FLOAT: - switch (b) { - case GLSL_TYPE_UINT: - result = new(ctx) ir_expression(ir_unop_u2f, desired_type, src, NULL); - break; - case GLSL_TYPE_INT: - result = new(ctx) ir_expression(ir_unop_i2f, desired_type, src, NULL); - break; - case GLSL_TYPE_BOOL: - result = new(ctx) ir_expression(ir_unop_b2f, desired_type, src, NULL); - break; - case GLSL_TYPE_DOUBLE: - result = new(ctx) ir_expression(ir_unop_d2f, desired_type, src, NULL); - break; - case GLSL_TYPE_UINT64: - result = new(ctx) ir_expression(ir_unop_u642f, desired_type, src, NULL); - break; - case GLSL_TYPE_INT64: - result = new(ctx) ir_expression(ir_unop_i642f, desired_type, src, NULL); - break; - } - break; - case GLSL_TYPE_BOOL: - switch (b) { - case GLSL_TYPE_UINT: - result = new(ctx) ir_expression(ir_unop_i2b, - new(ctx) ir_expression(ir_unop_u2i, - src)); - break; - case GLSL_TYPE_INT: - result = new(ctx) ir_expression(ir_unop_i2b, desired_type, src, NULL); - break; - case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_f2b, desired_type, src, NULL); - break; - case GLSL_TYPE_DOUBLE: - result = new(ctx) ir_expression(ir_unop_d2b, desired_type, src, NULL); - break; - case GLSL_TYPE_UINT64: - result = new(ctx) ir_expression(ir_unop_i642b, - new(ctx) ir_expression(ir_unop_u642i64, - src)); - break; - case GLSL_TYPE_INT64: - result = new(ctx) ir_expression(ir_unop_i642b, desired_type, src, NULL); - break; - } - break; - case GLSL_TYPE_DOUBLE: - switch (b) { - case GLSL_TYPE_INT: - result = new(ctx) ir_expression(ir_unop_i2d, src); - break; - case GLSL_TYPE_UINT: - result = new(ctx) ir_expression(ir_unop_u2d, src); - break; - case GLSL_TYPE_BOOL: - result = new(ctx) ir_expression(ir_unop_f2d, - new(ctx) ir_expression(ir_unop_b2f, - src)); - break; - case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_f2d, desired_type, src, NULL); - break; - case GLSL_TYPE_UINT64: - result = new(ctx) ir_expression(ir_unop_u642d, desired_type, src, NULL); - break; - case GLSL_TYPE_INT64: - result = new(ctx) ir_expression(ir_unop_i642d, desired_type, src, NULL); - break; - } - break; - case GLSL_TYPE_UINT64: - switch (b) { - case GLSL_TYPE_INT: - result = new(ctx) ir_expression(ir_unop_i2u64, src); - break; - case GLSL_TYPE_UINT: - result = new(ctx) ir_expression(ir_unop_u2u64, src); - break; - case GLSL_TYPE_BOOL: - result = new(ctx) ir_expression(ir_unop_i642u64, - new(ctx) ir_expression(ir_unop_b2i64, - src)); - break; - case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_f2u64, src); - break; - case GLSL_TYPE_DOUBLE: - result = new(ctx) ir_expression(ir_unop_d2u64, src); - break; - case GLSL_TYPE_INT64: - result = new(ctx) ir_expression(ir_unop_i642u64, src); - break; - } - break; - case GLSL_TYPE_INT64: - switch (b) { - case GLSL_TYPE_INT: - result = new(ctx) ir_expression(ir_unop_i2i64, src); - break; - case GLSL_TYPE_UINT: - result = new(ctx) ir_expression(ir_unop_u2i64, src); - break; - case GLSL_TYPE_BOOL: - result = new(ctx) ir_expression(ir_unop_b2i64, src); - break; - case GLSL_TYPE_FLOAT: - result = new(ctx) ir_expression(ir_unop_f2i64, src); - break; - case GLSL_TYPE_DOUBLE: - result = new(ctx) ir_expression(ir_unop_d2i64, src); - break; - case GLSL_TYPE_UINT64: - result = new(ctx) ir_expression(ir_unop_u642i64, src); - break; - } - break; - case GLSL_TYPE_SAMPLER: - switch (b) { - case GLSL_TYPE_UINT: - result = new(ctx) - ir_expression(ir_unop_pack_sampler_2x32, desired_type, src); - break; - } - break; - case GLSL_TYPE_IMAGE: - switch (b) { - case GLSL_TYPE_UINT: - result = new(ctx) - ir_expression(ir_unop_pack_image_2x32, desired_type, src); - break; - } - break; - } - - assert(result != NULL); - assert(result->type == desired_type); - - /* Try constant folding; it may fold in the conversion we just added. */ - ir_constant *const constant = result->constant_expression_value(ctx); - return (constant != NULL) ? (ir_rvalue *) constant : (ir_rvalue *) result; -} - - -/** - * Perform automatic type and constant conversion of constructor parameters - * - * This implements the rules in the "Implicit Conversions" rules, not the - * "Conversion and Scalar Constructors". - * - * After attempting the implicit conversion, an attempt to convert into a - * constant valued expression is also done. - * - * The \c from \c ir_rvalue is converted "in place". - * - * \param from Operand that is being converted - * \param to Base type the operand will be converted to - * \param state GLSL compiler state - * - * \return - * If the attempt to convert into a constant expression succeeds, \c true is - * returned. Otherwise \c false is returned. - */ -static bool -implicitly_convert_component(ir_rvalue * &from, const glsl_base_type to, - struct _mesa_glsl_parse_state *state) -{ - void *mem_ctx = state; - ir_rvalue *result = from; - - if (to != from->type->base_type) { - const glsl_type *desired_type = - glsl_type::get_instance(to, - from->type->vector_elements, - from->type->matrix_columns); - - if (from->type->can_implicitly_convert_to(desired_type, state)) { - /* Even though convert_component() implements the constructor - * conversion rules (not the implicit conversion rules), its safe - * to use it here because we already checked that the implicit - * conversion is legal. - */ - result = convert_component(from, desired_type); - } - } - - ir_rvalue *const constant = result->constant_expression_value(mem_ctx); - - if (constant != NULL) - result = constant; - - if (from != result) { - from->replace_with(result); - from = result; - } - - return constant != NULL; -} - - -/** - * Dereference a specific component from a scalar, vector, or matrix - */ -static ir_rvalue * -dereference_component(ir_rvalue *src, unsigned component) -{ - void *ctx = ralloc_parent(src); - assert(component < src->type->components()); - - /* If the source is a constant, just create a new constant instead of a - * dereference of the existing constant. - */ - ir_constant *constant = src->as_constant(); - if (constant) - return new(ctx) ir_constant(constant, component); - - if (src->type->is_scalar()) { - return src; - } else if (src->type->is_vector()) { - return new(ctx) ir_swizzle(src, component, 0, 0, 0, 1); - } else { - assert(src->type->is_matrix()); - - /* Dereference a row of the matrix, then call this function again to get - * a specific element from that row. - */ - const int c = component / src->type->column_type()->vector_elements; - const int r = component % src->type->column_type()->vector_elements; - ir_constant *const col_index = new(ctx) ir_constant(c); - ir_dereference *const col = new(ctx) ir_dereference_array(src, - col_index); - - col->type = src->type->column_type(); - - return dereference_component(col, r); - } - - assert(!"Should not get here."); - return NULL; -} - - -static ir_rvalue * -process_vec_mat_constructor(exec_list *instructions, - const glsl_type *constructor_type, - YYLTYPE *loc, exec_list *parameters, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - /* The ARB_shading_language_420pack spec says: - * - * "If an initializer is a list of initializers enclosed in curly braces, - * the variable being declared must be a vector, a matrix, an array, or a - * structure. - * - * int i = { 1 }; // illegal, i is not an aggregate" - */ - if (constructor_type->vector_elements <= 1) { - _mesa_glsl_error(loc, state, "aggregates can only initialize vectors, " - "matrices, arrays, and structs"); - return ir_rvalue::error_value(ctx); - } - - exec_list actual_parameters; - const unsigned parameter_count = - process_parameters(instructions, &actual_parameters, parameters, state); - - if (parameter_count == 0 - || (constructor_type->is_vector() && - constructor_type->vector_elements != parameter_count) - || (constructor_type->is_matrix() && - constructor_type->matrix_columns != parameter_count)) { - _mesa_glsl_error(loc, state, "%s constructor must have %u parameters", - constructor_type->is_vector() ? "vector" : "matrix", - constructor_type->vector_elements); - return ir_rvalue::error_value(ctx); - } - - bool all_parameters_are_constant = true; - - /* Type cast each parameter and, if possible, fold constants. */ - foreach_in_list_safe(ir_rvalue, ir, &actual_parameters) { - /* Apply implicit conversions (not the scalar constructor rules, see the - * spec quote above!) and attempt to convert the parameter to a constant - * valued expression. After doing so, track whether or not all the - * parameters to the constructor are trivially constant valued - * expressions. - */ - all_parameters_are_constant &= - implicitly_convert_component(ir, constructor_type->base_type, state); - - if (constructor_type->is_matrix()) { - if (ir->type != constructor_type->column_type()) { - _mesa_glsl_error(loc, state, "type error in matrix constructor: " - "expected: %s, found %s", - constructor_type->column_type()->name, - ir->type->name); - return ir_rvalue::error_value(ctx); - } - } else if (ir->type != constructor_type->get_scalar_type()) { - _mesa_glsl_error(loc, state, "type error in vector constructor: " - "expected: %s, found %s", - constructor_type->get_scalar_type()->name, - ir->type->name); - return ir_rvalue::error_value(ctx); - } - } - - if (all_parameters_are_constant) - return new(ctx) ir_constant(constructor_type, &actual_parameters); - - ir_variable *var = new(ctx) ir_variable(constructor_type, "vec_mat_ctor", - ir_var_temporary); - instructions->push_tail(var); - - int i = 0; - - foreach_in_list(ir_rvalue, rhs, &actual_parameters) { - ir_instruction *assignment = NULL; - - if (var->type->is_matrix()) { - ir_rvalue *lhs = - new(ctx) ir_dereference_array(var, new(ctx) ir_constant(i)); - assignment = new(ctx) ir_assignment(lhs, rhs); - } else { - /* use writemask rather than index for vector */ - assert(var->type->is_vector()); - assert(i < 4); - ir_dereference *lhs = new(ctx) ir_dereference_variable(var); - assignment = new(ctx) ir_assignment(lhs, rhs, 1u << i); - } - - instructions->push_tail(assignment); - - i++; - } - - return new(ctx) ir_dereference_variable(var); -} - - -static ir_rvalue * -process_array_constructor(exec_list *instructions, - const glsl_type *constructor_type, - YYLTYPE *loc, exec_list *parameters, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - /* Array constructors come in two forms: sized and unsized. Sized array - * constructors look like 'vec4[2](a, b)', where 'a' and 'b' are vec4 - * variables. In this case the number of parameters must exactly match the - * specified size of the array. - * - * Unsized array constructors look like 'vec4[](a, b)', where 'a' and 'b' - * are vec4 variables. In this case the size of the array being constructed - * is determined by the number of parameters. - * - * From page 52 (page 58 of the PDF) of the GLSL 1.50 spec: - * - * "There must be exactly the same number of arguments as the size of - * the array being constructed. If no size is present in the - * constructor, then the array is explicitly sized to the number of - * arguments provided. The arguments are assigned in order, starting at - * element 0, to the elements of the constructed array. Each argument - * must be the same type as the element type of the array, or be a type - * that can be converted to the element type of the array according to - * Section 4.1.10 "Implicit Conversions."" - */ - exec_list actual_parameters; - const unsigned parameter_count = - process_parameters(instructions, &actual_parameters, parameters, state); - bool is_unsized_array = constructor_type->is_unsized_array(); - - if ((parameter_count == 0) || - (!is_unsized_array && (constructor_type->length != parameter_count))) { - const unsigned min_param = is_unsized_array - ? 1 : constructor_type->length; - - _mesa_glsl_error(loc, state, "array constructor must have %s %u " - "parameter%s", - is_unsized_array ? "at least" : "exactly", - min_param, (min_param <= 1) ? "" : "s"); - return ir_rvalue::error_value(ctx); - } - - if (is_unsized_array) { - constructor_type = - glsl_type::get_array_instance(constructor_type->fields.array, - parameter_count); - assert(constructor_type != NULL); - assert(constructor_type->length == parameter_count); - } - - bool all_parameters_are_constant = true; - const glsl_type *element_type = constructor_type->fields.array; - - /* Type cast each parameter and, if possible, fold constants. */ - foreach_in_list_safe(ir_rvalue, ir, &actual_parameters) { - /* Apply implicit conversions (not the scalar constructor rules, see the - * spec quote above!) and attempt to convert the parameter to a constant - * valued expression. After doing so, track whether or not all the - * parameters to the constructor are trivially constant valued - * expressions. - */ - all_parameters_are_constant &= - implicitly_convert_component(ir, element_type->base_type, state); - - if (constructor_type->fields.array->is_unsized_array()) { - /* As the inner parameters of the constructor are created without - * knowledge of each other we need to check to make sure unsized - * parameters of unsized constructors all end up with the same size. - * - * e.g we make sure to fail for a constructor like this: - * vec4[][] a = vec4[][](vec4[](vec4(0.0), vec4(1.0)), - * vec4[](vec4(0.0), vec4(1.0), vec4(1.0)), - * vec4[](vec4(0.0), vec4(1.0))); - */ - if (element_type->is_unsized_array()) { - /* This is the first parameter so just get the type */ - element_type = ir->type; - } else if (element_type != ir->type) { - _mesa_glsl_error(loc, state, "type error in array constructor: " - "expected: %s, found %s", - element_type->name, - ir->type->name); - return ir_rvalue::error_value(ctx); - } - } else if (ir->type != constructor_type->fields.array) { - _mesa_glsl_error(loc, state, "type error in array constructor: " - "expected: %s, found %s", - constructor_type->fields.array->name, - ir->type->name); - return ir_rvalue::error_value(ctx); - } else { - element_type = ir->type; - } - } - - if (constructor_type->fields.array->is_unsized_array()) { - constructor_type = - glsl_type::get_array_instance(element_type, - parameter_count); - assert(constructor_type != NULL); - assert(constructor_type->length == parameter_count); - } - - if (all_parameters_are_constant) - return new(ctx) ir_constant(constructor_type, &actual_parameters); - - ir_variable *var = new(ctx) ir_variable(constructor_type, "array_ctor", - ir_var_temporary); - instructions->push_tail(var); - - int i = 0; - foreach_in_list(ir_rvalue, rhs, &actual_parameters) { - ir_rvalue *lhs = new(ctx) ir_dereference_array(var, - new(ctx) ir_constant(i)); - - ir_instruction *assignment = new(ctx) ir_assignment(lhs, rhs); - instructions->push_tail(assignment); - - i++; - } - - return new(ctx) ir_dereference_variable(var); -} - - -/** - * Determine if a list consists of a single scalar r-value - */ -static bool -single_scalar_parameter(exec_list *parameters) -{ - const ir_rvalue *const p = (ir_rvalue *) parameters->get_head_raw(); - assert(((ir_rvalue *)p)->as_rvalue() != NULL); - - return (p->type->is_scalar() && p->next->is_tail_sentinel()); -} - - -/** - * Generate inline code for a vector constructor - * - * The generated constructor code will consist of a temporary variable - * declaration of the same type as the constructor. A sequence of assignments - * from constructor parameters to the temporary will follow. - * - * \return - * An \c ir_dereference_variable of the temprorary generated in the constructor - * body. - */ -static ir_rvalue * -emit_inline_vector_constructor(const glsl_type *type, - exec_list *instructions, - exec_list *parameters, - void *ctx) -{ - assert(!parameters->is_empty()); - - ir_variable *var = new(ctx) ir_variable(type, "vec_ctor", ir_var_temporary); - instructions->push_tail(var); - - /* There are three kinds of vector constructors. - * - * - Construct a vector from a single scalar by replicating that scalar to - * all components of the vector. - * - * - Construct a vector from at least a matrix. This case should already - * have been taken care of in ast_function_expression::hir by breaking - * down the matrix into a series of column vectors. - * - * - Construct a vector from an arbirary combination of vectors and - * scalars. The components of the constructor parameters are assigned - * to the vector in order until the vector is full. - */ - const unsigned lhs_components = type->components(); - if (single_scalar_parameter(parameters)) { - ir_rvalue *first_param = (ir_rvalue *)parameters->get_head_raw(); - return new(ctx) ir_swizzle(first_param, 0, 0, 0, 0, lhs_components); - } else { - unsigned base_component = 0; - unsigned base_lhs_component = 0; - ir_constant_data data; - unsigned constant_mask = 0, constant_components = 0; - - memset(&data, 0, sizeof(data)); - - foreach_in_list(ir_rvalue, param, parameters) { - unsigned rhs_components = param->type->components(); - - /* Do not try to assign more components to the vector than it has! */ - if ((rhs_components + base_lhs_component) > lhs_components) { - rhs_components = lhs_components - base_lhs_component; - } - - const ir_constant *const c = param->as_constant(); - if (c != NULL) { - for (unsigned i = 0; i < rhs_components; i++) { - switch (c->type->base_type) { - case GLSL_TYPE_UINT: - data.u[i + base_component] = c->get_uint_component(i); - break; - case GLSL_TYPE_INT: - data.i[i + base_component] = c->get_int_component(i); - break; - case GLSL_TYPE_FLOAT: - data.f[i + base_component] = c->get_float_component(i); - break; - case GLSL_TYPE_DOUBLE: - data.d[i + base_component] = c->get_double_component(i); - break; - case GLSL_TYPE_BOOL: - data.b[i + base_component] = c->get_bool_component(i); - break; - case GLSL_TYPE_UINT64: - data.u64[i + base_component] = c->get_uint64_component(i); - break; - case GLSL_TYPE_INT64: - data.i64[i + base_component] = c->get_int64_component(i); - break; - default: - assert(!"Should not get here."); - break; - } - } - - /* Mask of fields to be written in the assignment. */ - constant_mask |= ((1U << rhs_components) - 1) << base_lhs_component; - constant_components += rhs_components; - - base_component += rhs_components; - } - /* Advance the component index by the number of components - * that were just assigned. - */ - base_lhs_component += rhs_components; - } - - if (constant_mask != 0) { - ir_dereference *lhs = new(ctx) ir_dereference_variable(var); - const glsl_type *rhs_type = - glsl_type::get_instance(var->type->base_type, - constant_components, - 1); - ir_rvalue *rhs = new(ctx) ir_constant(rhs_type, &data); - - ir_instruction *inst = - new(ctx) ir_assignment(lhs, rhs, constant_mask); - instructions->push_tail(inst); - } - - base_component = 0; - foreach_in_list(ir_rvalue, param, parameters) { - unsigned rhs_components = param->type->components(); - - /* Do not try to assign more components to the vector than it has! */ - if ((rhs_components + base_component) > lhs_components) { - rhs_components = lhs_components - base_component; - } - - /* If we do not have any components left to copy, break out of the - * loop. This can happen when initializing a vec4 with a mat3 as the - * mat3 would have been broken into a series of column vectors. - */ - if (rhs_components == 0) { - break; - } - - const ir_constant *const c = param->as_constant(); - if (c == NULL) { - /* Mask of fields to be written in the assignment. */ - const unsigned write_mask = ((1U << rhs_components) - 1) - << base_component; - - ir_dereference *lhs = new(ctx) ir_dereference_variable(var); - - /* Generate a swizzle so that LHS and RHS sizes match. */ - ir_rvalue *rhs = - new(ctx) ir_swizzle(param, 0, 1, 2, 3, rhs_components); - - ir_instruction *inst = - new(ctx) ir_assignment(lhs, rhs, write_mask); - instructions->push_tail(inst); - } - - /* Advance the component index by the number of components that were - * just assigned. - */ - base_component += rhs_components; - } - } - return new(ctx) ir_dereference_variable(var); -} - - -/** - * Generate assignment of a portion of a vector to a portion of a matrix column - * - * \param src_base First component of the source to be used in assignment - * \param column Column of destination to be assiged - * \param row_base First component of the destination column to be assigned - * \param count Number of components to be assigned - * - * \note - * \c src_base + \c count must be less than or equal to the number of - * components in the source vector. - */ -static ir_instruction * -assign_to_matrix_column(ir_variable *var, unsigned column, unsigned row_base, - ir_rvalue *src, unsigned src_base, unsigned count, - void *mem_ctx) -{ - ir_constant *col_idx = new(mem_ctx) ir_constant(column); - ir_dereference *column_ref = new(mem_ctx) ir_dereference_array(var, - col_idx); - - assert(column_ref->type->components() >= (row_base + count)); - assert(src->type->components() >= (src_base + count)); - - /* Generate a swizzle that extracts the number of components from the source - * that are to be assigned to the column of the matrix. - */ - if (count < src->type->vector_elements) { - src = new(mem_ctx) ir_swizzle(src, - src_base + 0, src_base + 1, - src_base + 2, src_base + 3, - count); - } - - /* Mask of fields to be written in the assignment. */ - const unsigned write_mask = ((1U << count) - 1) << row_base; - - return new(mem_ctx) ir_assignment(column_ref, src, write_mask); -} - - -/** - * Generate inline code for a matrix constructor - * - * The generated constructor code will consist of a temporary variable - * declaration of the same type as the constructor. A sequence of assignments - * from constructor parameters to the temporary will follow. - * - * \return - * An \c ir_dereference_variable of the temprorary generated in the constructor - * body. - */ -static ir_rvalue * -emit_inline_matrix_constructor(const glsl_type *type, - exec_list *instructions, - exec_list *parameters, - void *ctx) -{ - assert(!parameters->is_empty()); - - ir_variable *var = new(ctx) ir_variable(type, "mat_ctor", ir_var_temporary); - instructions->push_tail(var); - - /* There are three kinds of matrix constructors. - * - * - Construct a matrix from a single scalar by replicating that scalar to - * along the diagonal of the matrix and setting all other components to - * zero. - * - * - Construct a matrix from an arbirary combination of vectors and - * scalars. The components of the constructor parameters are assigned - * to the matrix in column-major order until the matrix is full. - * - * - Construct a matrix from a single matrix. The source matrix is copied - * to the upper left portion of the constructed matrix, and the remaining - * elements take values from the identity matrix. - */ - ir_rvalue *const first_param = (ir_rvalue *) parameters->get_head_raw(); - if (single_scalar_parameter(parameters)) { - /* Assign the scalar to the X component of a vec4, and fill the remaining - * components with zero. - */ - glsl_base_type param_base_type = first_param->type->base_type; - assert(first_param->type->is_float() || first_param->type->is_double()); - ir_variable *rhs_var = - new(ctx) ir_variable(glsl_type::get_instance(param_base_type, 4, 1), - "mat_ctor_vec", - ir_var_temporary); - instructions->push_tail(rhs_var); - - ir_constant_data zero; - for (unsigned i = 0; i < 4; i++) - if (first_param->type->is_float()) - zero.f[i] = 0.0; - else - zero.d[i] = 0.0; - - ir_instruction *inst = - new(ctx) ir_assignment(new(ctx) ir_dereference_variable(rhs_var), - new(ctx) ir_constant(rhs_var->type, &zero)); - instructions->push_tail(inst); - - ir_dereference *const rhs_ref = - new(ctx) ir_dereference_variable(rhs_var); - - inst = new(ctx) ir_assignment(rhs_ref, first_param, 0x01); - instructions->push_tail(inst); - - /* Assign the temporary vector to each column of the destination matrix - * with a swizzle that puts the X component on the diagonal of the - * matrix. In some cases this may mean that the X component does not - * get assigned into the column at all (i.e., when the matrix has more - * columns than rows). - */ - static const unsigned rhs_swiz[4][4] = { - { 0, 1, 1, 1 }, - { 1, 0, 1, 1 }, - { 1, 1, 0, 1 }, - { 1, 1, 1, 0 } - }; - - const unsigned cols_to_init = MIN2(type->matrix_columns, - type->vector_elements); - for (unsigned i = 0; i < cols_to_init; i++) { - ir_constant *const col_idx = new(ctx) ir_constant(i); - ir_rvalue *const col_ref = new(ctx) ir_dereference_array(var, - col_idx); - - ir_rvalue *const rhs_ref = new(ctx) ir_dereference_variable(rhs_var); - ir_rvalue *const rhs = new(ctx) ir_swizzle(rhs_ref, rhs_swiz[i], - type->vector_elements); - - inst = new(ctx) ir_assignment(col_ref, rhs); - instructions->push_tail(inst); - } - - for (unsigned i = cols_to_init; i < type->matrix_columns; i++) { - ir_constant *const col_idx = new(ctx) ir_constant(i); - ir_rvalue *const col_ref = new(ctx) ir_dereference_array(var, - col_idx); - - ir_rvalue *const rhs_ref = new(ctx) ir_dereference_variable(rhs_var); - ir_rvalue *const rhs = new(ctx) ir_swizzle(rhs_ref, 1, 1, 1, 1, - type->vector_elements); - - inst = new(ctx) ir_assignment(col_ref, rhs); - instructions->push_tail(inst); - } - } else if (first_param->type->is_matrix()) { - /* From page 50 (56 of the PDF) of the GLSL 1.50 spec: - * - * "If a matrix is constructed from a matrix, then each component - * (column i, row j) in the result that has a corresponding - * component (column i, row j) in the argument will be initialized - * from there. All other components will be initialized to the - * identity matrix. If a matrix argument is given to a matrix - * constructor, it is an error to have any other arguments." - */ - assert(first_param->next->is_tail_sentinel()); - ir_rvalue *const src_matrix = first_param; - - /* If the source matrix is smaller, pre-initialize the relavent parts of - * the destination matrix to the identity matrix. - */ - if ((src_matrix->type->matrix_columns < var->type->matrix_columns) || - (src_matrix->type->vector_elements < var->type->vector_elements)) { - - /* If the source matrix has fewer rows, every column of the - * destination must be initialized. Otherwise only the columns in - * the destination that do not exist in the source must be - * initialized. - */ - unsigned col = - (src_matrix->type->vector_elements < var->type->vector_elements) - ? 0 : src_matrix->type->matrix_columns; - - const glsl_type *const col_type = var->type->column_type(); - for (/* empty */; col < var->type->matrix_columns; col++) { - ir_constant_data ident; - - if (!col_type->is_double()) { - ident.f[0] = 0.0f; - ident.f[1] = 0.0f; - ident.f[2] = 0.0f; - ident.f[3] = 0.0f; - ident.f[col] = 1.0f; - } else { - ident.d[0] = 0.0; - ident.d[1] = 0.0; - ident.d[2] = 0.0; - ident.d[3] = 0.0; - ident.d[col] = 1.0; - } - - ir_rvalue *const rhs = new(ctx) ir_constant(col_type, &ident); - - ir_rvalue *const lhs = - new(ctx) ir_dereference_array(var, new(ctx) ir_constant(col)); - - ir_instruction *inst = new(ctx) ir_assignment(lhs, rhs); - instructions->push_tail(inst); - } - } - - /* Assign columns from the source matrix to the destination matrix. - * - * Since the parameter will be used in the RHS of multiple assignments, - * generate a temporary and copy the paramter there. - */ - ir_variable *const rhs_var = - new(ctx) ir_variable(first_param->type, "mat_ctor_mat", - ir_var_temporary); - instructions->push_tail(rhs_var); - - ir_dereference *const rhs_var_ref = - new(ctx) ir_dereference_variable(rhs_var); - ir_instruction *const inst = - new(ctx) ir_assignment(rhs_var_ref, first_param); - instructions->push_tail(inst); - - const unsigned last_row = MIN2(src_matrix->type->vector_elements, - var->type->vector_elements); - const unsigned last_col = MIN2(src_matrix->type->matrix_columns, - var->type->matrix_columns); - - unsigned swiz[4] = { 0, 0, 0, 0 }; - for (unsigned i = 1; i < last_row; i++) - swiz[i] = i; - - const unsigned write_mask = (1U << last_row) - 1; - - for (unsigned i = 0; i < last_col; i++) { - ir_dereference *const lhs = - new(ctx) ir_dereference_array(var, new(ctx) ir_constant(i)); - ir_rvalue *const rhs_col = - new(ctx) ir_dereference_array(rhs_var, new(ctx) ir_constant(i)); - - /* If one matrix has columns that are smaller than the columns of the - * other matrix, wrap the column access of the larger with a swizzle - * so that the LHS and RHS of the assignment have the same size (and - * therefore have the same type). - * - * It would be perfectly valid to unconditionally generate the - * swizzles, this this will typically result in a more compact IR - * tree. - */ - ir_rvalue *rhs; - if (lhs->type->vector_elements != rhs_col->type->vector_elements) { - rhs = new(ctx) ir_swizzle(rhs_col, swiz, last_row); - } else { - rhs = rhs_col; - } - - ir_instruction *inst = - new(ctx) ir_assignment(lhs, rhs, write_mask); - instructions->push_tail(inst); - } - } else { - const unsigned cols = type->matrix_columns; - const unsigned rows = type->vector_elements; - unsigned remaining_slots = rows * cols; - unsigned col_idx = 0; - unsigned row_idx = 0; - - foreach_in_list(ir_rvalue, rhs, parameters) { - unsigned rhs_components = rhs->type->components(); - unsigned rhs_base = 0; - - if (remaining_slots == 0) - break; - - /* Since the parameter might be used in the RHS of two assignments, - * generate a temporary and copy the paramter there. - */ - ir_variable *rhs_var = - new(ctx) ir_variable(rhs->type, "mat_ctor_vec", ir_var_temporary); - instructions->push_tail(rhs_var); - - ir_dereference *rhs_var_ref = - new(ctx) ir_dereference_variable(rhs_var); - ir_instruction *inst = new(ctx) ir_assignment(rhs_var_ref, rhs); - instructions->push_tail(inst); - - do { - /* Assign the current parameter to as many components of the matrix - * as it will fill. - * - * NOTE: A single vector parameter can span two matrix columns. A - * single vec4, for example, can completely fill a mat2. - */ - unsigned count = MIN2(rows - row_idx, - rhs_components - rhs_base); - - rhs_var_ref = new(ctx) ir_dereference_variable(rhs_var); - ir_instruction *inst = assign_to_matrix_column(var, col_idx, - row_idx, - rhs_var_ref, - rhs_base, - count, ctx); - instructions->push_tail(inst); - rhs_base += count; - row_idx += count; - remaining_slots -= count; - - /* Sometimes, there is still data left in the parameters and - * components left to be set in the destination but in other - * column. - */ - if (row_idx >= rows) { - row_idx = 0; - col_idx++; - } - } while(remaining_slots > 0 && rhs_base < rhs_components); - } - } - - return new(ctx) ir_dereference_variable(var); -} - - -static ir_rvalue * -emit_inline_record_constructor(const glsl_type *type, - exec_list *instructions, - exec_list *parameters, - void *mem_ctx) -{ - ir_variable *const var = - new(mem_ctx) ir_variable(type, "record_ctor", ir_var_temporary); - ir_dereference_variable *const d = - new(mem_ctx) ir_dereference_variable(var); - - instructions->push_tail(var); - - exec_node *node = parameters->get_head_raw(); - for (unsigned i = 0; i < type->length; i++) { - assert(!node->is_tail_sentinel()); - - ir_dereference *const lhs = - new(mem_ctx) ir_dereference_record(d->clone(mem_ctx, NULL), - type->fields.structure[i].name); - - ir_rvalue *const rhs = ((ir_instruction *) node)->as_rvalue(); - assert(rhs != NULL); - - ir_instruction *const assign = new(mem_ctx) ir_assignment(lhs, rhs); - - instructions->push_tail(assign); - node = node->next; - } - - return d; -} - - -static ir_rvalue * -process_record_constructor(exec_list *instructions, - const glsl_type *constructor_type, - YYLTYPE *loc, exec_list *parameters, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - /* From page 32 (page 38 of the PDF) of the GLSL 1.20 spec: - * - * "The arguments to the constructor will be used to set the structure's - * fields, in order, using one argument per field. Each argument must - * be the same type as the field it sets, or be a type that can be - * converted to the field's type according to Section 4.1.10 “Implicit - * Conversions.”" - * - * From page 35 (page 41 of the PDF) of the GLSL 4.20 spec: - * - * "In all cases, the innermost initializer (i.e., not a list of - * initializers enclosed in curly braces) applied to an object must - * have the same type as the object being initialized or be a type that - * can be converted to the object's type according to section 4.1.10 - * "Implicit Conversions". In the latter case, an implicit conversion - * will be done on the initializer before the assignment is done." - */ - exec_list actual_parameters; - - const unsigned parameter_count = - process_parameters(instructions, &actual_parameters, parameters, - state); - - if (parameter_count != constructor_type->length) { - _mesa_glsl_error(loc, state, - "%s parameters in constructor for `%s'", - parameter_count > constructor_type->length - ? "too many": "insufficient", - constructor_type->name); - return ir_rvalue::error_value(ctx); - } - - bool all_parameters_are_constant = true; - - int i = 0; - /* Type cast each parameter and, if possible, fold constants. */ - foreach_in_list_safe(ir_rvalue, ir, &actual_parameters) { - - const glsl_struct_field *struct_field = - &constructor_type->fields.structure[i]; - - /* Apply implicit conversions (not the scalar constructor rules, see the - * spec quote above!) and attempt to convert the parameter to a constant - * valued expression. After doing so, track whether or not all the - * parameters to the constructor are trivially constant valued - * expressions. - */ - all_parameters_are_constant &= - implicitly_convert_component(ir, struct_field->type->base_type, - state); - - if (ir->type != struct_field->type) { - _mesa_glsl_error(loc, state, - "parameter type mismatch in constructor for `%s.%s' " - "(%s vs %s)", - constructor_type->name, - struct_field->name, - ir->type->name, - struct_field->type->name); - return ir_rvalue::error_value(ctx); - } - - i++; - } - - if (all_parameters_are_constant) { - return new(ctx) ir_constant(constructor_type, &actual_parameters); - } else { - return emit_inline_record_constructor(constructor_type, instructions, - &actual_parameters, state); - } -} - -ir_rvalue * -ast_function_expression::handle_method(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - const ast_expression *field = subexpressions[0]; - ir_rvalue *op; - ir_rvalue *result; - void *ctx = state; - /* Handle "method calls" in GLSL 1.20 - namely, array.length() */ - YYLTYPE loc = get_location(); - state->check_version(120, 300, &loc, "methods not supported"); - - const char *method; - method = field->primary_expression.identifier; - - /* This would prevent to raise "uninitialized variable" warnings when - * calling array.length. - */ - field->subexpressions[0]->set_is_lhs(true); - op = field->subexpressions[0]->hir(instructions, state); - if (strcmp(method, "length") == 0) { - if (!this->expressions.is_empty()) { - _mesa_glsl_error(&loc, state, "length method takes no arguments"); - goto fail; - } - - if (op->type->is_array()) { - if (op->type->is_unsized_array()) { - if (!state->has_shader_storage_buffer_objects()) { - _mesa_glsl_error(&loc, state, - "length called on unsized array" - " only available with" - " ARB_shader_storage_buffer_object"); - goto fail; - } else if (op->variable_referenced()->is_in_shader_storage_block()) { - /* Calculate length of an unsized array in run-time */ - result = new(ctx) - ir_expression(ir_unop_ssbo_unsized_array_length, op); - } else { - /* When actual size is known at link-time, this will be - * replaced with a constant expression. - */ - result = new (ctx) - ir_expression(ir_unop_implicitly_sized_array_length, op); - } - } else { - result = new(ctx) ir_constant(op->type->array_size()); - } - } else if (op->type->is_vector()) { - if (state->has_420pack()) { - /* .length() returns int. */ - result = new(ctx) ir_constant((int) op->type->vector_elements); - } else { - _mesa_glsl_error(&loc, state, "length method on matrix only" - " available with ARB_shading_language_420pack"); - goto fail; - } - } else if (op->type->is_matrix()) { - if (state->has_420pack()) { - /* .length() returns int. */ - result = new(ctx) ir_constant((int) op->type->matrix_columns); - } else { - _mesa_glsl_error(&loc, state, "length method on matrix only" - " available with ARB_shading_language_420pack"); - goto fail; - } - } else { - _mesa_glsl_error(&loc, state, "length called on scalar."); - goto fail; - } - } else { - _mesa_glsl_error(&loc, state, "unknown method: `%s'", method); - goto fail; - } - return result; - fail: - return ir_rvalue::error_value(ctx); -} - -static inline bool is_valid_constructor(const glsl_type *type, - struct _mesa_glsl_parse_state *state) -{ - return type->is_numeric() || type->is_boolean() || - (state->has_bindless() && (type->is_sampler() || type->is_image())); -} - -ir_rvalue * -ast_function_expression::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - /* There are three sorts of function calls. - * - * 1. constructors - The first subexpression is an ast_type_specifier. - * 2. methods - Only the .length() method of array types. - * 3. functions - Calls to regular old functions. - * - */ - if (is_constructor()) { - const ast_type_specifier *type = - (ast_type_specifier *) subexpressions[0]; - YYLTYPE loc = type->get_location(); - const char *name; - - const glsl_type *const constructor_type = type->glsl_type(& name, state); - - /* constructor_type can be NULL if a variable with the same name as the - * structure has come into scope. - */ - if (constructor_type == NULL) { - _mesa_glsl_error(& loc, state, "unknown type `%s' (structure name " - "may be shadowed by a variable with the same name)", - type->type_name); - return ir_rvalue::error_value(ctx); - } - - - /* Constructors for opaque types are illegal. - * - * From section 4.1.7 of the ARB_bindless_texture spec: - * - * "Samplers are represented using 64-bit integer handles, and may be " - * converted to and from 64-bit integers using constructors." - * - * From section 4.1.X of the ARB_bindless_texture spec: - * - * "Images are represented using 64-bit integer handles, and may be - * converted to and from 64-bit integers using constructors." - */ - if (constructor_type->contains_atomic() || - (!state->has_bindless() && constructor_type->contains_opaque())) { - _mesa_glsl_error(& loc, state, "cannot construct %s type `%s'", - state->has_bindless() ? "atomic" : "opaque", - constructor_type->name); - return ir_rvalue::error_value(ctx); - } - - if (constructor_type->is_subroutine()) { - _mesa_glsl_error(& loc, state, - "subroutine name cannot be a constructor `%s'", - constructor_type->name); - return ir_rvalue::error_value(ctx); - } - - if (constructor_type->is_array()) { - if (!state->check_version(state->allow_glsl_120_subset_in_110 ? 110 : 120, - 300, &loc, "array constructors forbidden")) { - return ir_rvalue::error_value(ctx); - } - - return process_array_constructor(instructions, constructor_type, - & loc, &this->expressions, state); - } - - - /* There are two kinds of constructor calls. Constructors for arrays and - * structures must have the exact number of arguments with matching types - * in the correct order. These constructors follow essentially the same - * type matching rules as functions. - * - * Constructors for built-in language types, such as mat4 and vec2, are - * free form. The only requirements are that the parameters must provide - * enough values of the correct scalar type and that no arguments are - * given past the last used argument. - * - * When using the C-style initializer syntax from GLSL 4.20, constructors - * must have the exact number of arguments with matching types in the - * correct order. - */ - if (constructor_type->is_struct()) { - return process_record_constructor(instructions, constructor_type, - &loc, &this->expressions, - state); - } - - if (!is_valid_constructor(constructor_type, state)) - return ir_rvalue::error_value(ctx); - - /* Total number of components of the type being constructed. */ - const unsigned type_components = constructor_type->components(); - - /* Number of components from parameters that have actually been - * consumed. This is used to perform several kinds of error checking. - */ - unsigned components_used = 0; - - unsigned matrix_parameters = 0; - unsigned nonmatrix_parameters = 0; - exec_list actual_parameters; - - foreach_list_typed(ast_node, ast, link, &this->expressions) { - ir_rvalue *result = ast->hir(instructions, state); - - /* From page 50 (page 56 of the PDF) of the GLSL 1.50 spec: - * - * "It is an error to provide extra arguments beyond this - * last used argument." - */ - if (components_used >= type_components) { - _mesa_glsl_error(& loc, state, "too many parameters to `%s' " - "constructor", - constructor_type->name); - return ir_rvalue::error_value(ctx); - } - - if (!is_valid_constructor(result->type, state)) { - _mesa_glsl_error(& loc, state, "cannot construct `%s' from a " - "non-numeric data type", - constructor_type->name); - return ir_rvalue::error_value(ctx); - } - - /* Count the number of matrix and nonmatrix parameters. This - * is used below to enforce some of the constructor rules. - */ - if (result->type->is_matrix()) - matrix_parameters++; - else - nonmatrix_parameters++; - - actual_parameters.push_tail(result); - components_used += result->type->components(); - } - - /* From page 28 (page 34 of the PDF) of the GLSL 1.10 spec: - * - * "It is an error to construct matrices from other matrices. This - * is reserved for future use." - */ - if (matrix_parameters > 0 - && constructor_type->is_matrix() - && !state->check_version(120, 100, &loc, - "cannot construct `%s' from a matrix", - constructor_type->name)) { - return ir_rvalue::error_value(ctx); - } - - /* From page 50 (page 56 of the PDF) of the GLSL 1.50 spec: - * - * "If a matrix argument is given to a matrix constructor, it is - * an error to have any other arguments." - */ - if ((matrix_parameters > 0) - && ((matrix_parameters + nonmatrix_parameters) > 1) - && constructor_type->is_matrix()) { - _mesa_glsl_error(& loc, state, "for matrix `%s' constructor, " - "matrix must be only parameter", - constructor_type->name); - return ir_rvalue::error_value(ctx); - } - - /* From page 28 (page 34 of the PDF) of the GLSL 1.10 spec: - * - * "In these cases, there must be enough components provided in the - * arguments to provide an initializer for every component in the - * constructed value." - */ - if (components_used < type_components && components_used != 1 - && matrix_parameters == 0) { - _mesa_glsl_error(& loc, state, "too few components to construct " - "`%s'", - constructor_type->name); - return ir_rvalue::error_value(ctx); - } - - /* Matrices can never be consumed as is by any constructor but matrix - * constructors. If the constructor type is not matrix, always break the - * matrix up into a series of column vectors. - */ - if (!constructor_type->is_matrix()) { - foreach_in_list_safe(ir_rvalue, matrix, &actual_parameters) { - if (!matrix->type->is_matrix()) - continue; - - /* Create a temporary containing the matrix. */ - ir_variable *var = new(ctx) ir_variable(matrix->type, "matrix_tmp", - ir_var_temporary); - instructions->push_tail(var); - instructions->push_tail( - new(ctx) ir_assignment(new(ctx) ir_dereference_variable(var), - matrix)); - var->constant_value = matrix->constant_expression_value(ctx); - - /* Replace the matrix with dereferences of its columns. */ - for (int i = 0; i < matrix->type->matrix_columns; i++) { - matrix->insert_before( - new (ctx) ir_dereference_array(var, - new(ctx) ir_constant(i))); - } - matrix->remove(); - } - } - - bool all_parameters_are_constant = true; - - /* Type cast each parameter and, if possible, fold constants.*/ - foreach_in_list_safe(ir_rvalue, ir, &actual_parameters) { - const glsl_type *desired_type; - - /* From section 5.4.1 of the ARB_bindless_texture spec: - * - * "In the following four constructors, the low 32 bits of the sampler - * type correspond to the .x component of the uvec2 and the high 32 - * bits correspond to the .y component." - * - * uvec2(any sampler type) // Converts a sampler type to a - * // pair of 32-bit unsigned integers - * any sampler type(uvec2) // Converts a pair of 32-bit unsigned integers to - * // a sampler type - * uvec2(any image type) // Converts an image type to a - * // pair of 32-bit unsigned integers - * any image type(uvec2) // Converts a pair of 32-bit unsigned integers to - * // an image type - */ - if (ir->type->is_sampler() || ir->type->is_image()) { - /* Convert a sampler/image type to a pair of 32-bit unsigned - * integers as defined by ARB_bindless_texture. - */ - if (constructor_type != glsl_type::uvec2_type) { - _mesa_glsl_error(&loc, state, "sampler and image types can only " - "be converted to a pair of 32-bit unsigned " - "integers"); - } - desired_type = glsl_type::uvec2_type; - } else if (constructor_type->is_sampler() || - constructor_type->is_image()) { - /* Convert a pair of 32-bit unsigned integers to a sampler or image - * type as defined by ARB_bindless_texture. - */ - if (ir->type != glsl_type::uvec2_type) { - _mesa_glsl_error(&loc, state, "sampler and image types can only " - "be converted from a pair of 32-bit unsigned " - "integers"); - } - desired_type = constructor_type; - } else { - desired_type = - glsl_type::get_instance(constructor_type->base_type, - ir->type->vector_elements, - ir->type->matrix_columns); - } - - ir_rvalue *result = convert_component(ir, desired_type); - - /* Attempt to convert the parameter to a constant valued expression. - * After doing so, track whether or not all the parameters to the - * constructor are trivially constant valued expressions. - */ - ir_rvalue *const constant = result->constant_expression_value(ctx); - - if (constant != NULL) - result = constant; - else - all_parameters_are_constant = false; - - if (result != ir) { - ir->replace_with(result); - } - } - - /* If all of the parameters are trivially constant, create a - * constant representing the complete collection of parameters. - */ - if (all_parameters_are_constant) { - return new(ctx) ir_constant(constructor_type, &actual_parameters); - } else if (constructor_type->is_scalar()) { - return dereference_component((ir_rvalue *) - actual_parameters.get_head_raw(), - 0); - } else if (constructor_type->is_vector()) { - return emit_inline_vector_constructor(constructor_type, - instructions, - &actual_parameters, - ctx); - } else { - assert(constructor_type->is_matrix()); - return emit_inline_matrix_constructor(constructor_type, - instructions, - &actual_parameters, - ctx); - } - } else if (subexpressions[0]->oper == ast_field_selection) { - return handle_method(instructions, state); - } else { - const ast_expression *id = subexpressions[0]; - const char *func_name = NULL; - YYLTYPE loc = get_location(); - exec_list actual_parameters; - ir_variable *sub_var = NULL; - ir_rvalue *array_idx = NULL; - - process_parameters(instructions, &actual_parameters, &this->expressions, - state); - - if (id->oper == ast_array_index) { - array_idx = generate_array_index(ctx, instructions, state, loc, - id->subexpressions[0], - id->subexpressions[1], &func_name, - &actual_parameters); - } else if (id->oper == ast_identifier) { - func_name = id->primary_expression.identifier; - } else { - _mesa_glsl_error(&loc, state, "function name is not an identifier"); - } - - /* an error was emitted earlier */ - if (!func_name) - return ir_rvalue::error_value(ctx); - - ir_function_signature *sig = - match_function_by_name(func_name, &actual_parameters, state); - - ir_rvalue *value = NULL; - if (sig == NULL) { - sig = match_subroutine_by_name(func_name, &actual_parameters, - state, &sub_var); - } - - if (sig == NULL) { - no_matching_function_error(func_name, &loc, - &actual_parameters, state); - value = ir_rvalue::error_value(ctx); - } else if (!verify_parameter_modes(state, sig, - actual_parameters, - this->expressions)) { - /* an error has already been emitted */ - value = ir_rvalue::error_value(ctx); - } else if (sig->is_builtin() && strcmp(func_name, "ftransform") == 0) { - /* ftransform refers to global variables, and we don't have any code - * for remapping the variable references in the built-in shader. - */ - ir_variable *mvp = - state->symbols->get_variable("gl_ModelViewProjectionMatrix"); - ir_variable *vtx = state->symbols->get_variable("gl_Vertex"); - value = new(ctx) ir_expression(ir_binop_mul, glsl_type::vec4_type, - new(ctx) ir_dereference_variable(mvp), - new(ctx) ir_dereference_variable(vtx)); - } else { - bool is_begin_interlock = false; - bool is_end_interlock = false; - if (sig->is_builtin() && - state->stage == MESA_SHADER_FRAGMENT && - state->ARB_fragment_shader_interlock_enable) { - is_begin_interlock = strcmp(func_name, "beginInvocationInterlockARB") == 0; - is_end_interlock = strcmp(func_name, "endInvocationInterlockARB") == 0; - } - - if (sig->is_builtin() && - ((state->stage == MESA_SHADER_TESS_CTRL && - strcmp(func_name, "barrier") == 0) || - is_begin_interlock || is_end_interlock)) { - if (state->current_function == NULL || - strcmp(state->current_function->function_name(), "main") != 0) { - _mesa_glsl_error(&loc, state, - "%s() may only be used in main()", func_name); - } - - if (state->found_return) { - _mesa_glsl_error(&loc, state, - "%s() may not be used after return", func_name); - } - - if (instructions != &state->current_function->body) { - _mesa_glsl_error(&loc, state, - "%s() may not be used in control flow", func_name); - } - } - - /* There can be only one begin/end interlock pair in the function. */ - if (is_begin_interlock) { - if (state->found_begin_interlock) - _mesa_glsl_error(&loc, state, - "beginInvocationInterlockARB may not be used twice"); - state->found_begin_interlock = true; - } else if (is_end_interlock) { - if (!state->found_begin_interlock) - _mesa_glsl_error(&loc, state, - "endInvocationInterlockARB may not be used " - "before beginInvocationInterlockARB"); - if (state->found_end_interlock) - _mesa_glsl_error(&loc, state, - "endInvocationInterlockARB may not be used twice"); - state->found_end_interlock = true; - } - - value = generate_call(instructions, sig, &actual_parameters, sub_var, - array_idx, state); - if (!value) { - ir_variable *const tmp = new(ctx) ir_variable(glsl_type::void_type, - "void_var", - ir_var_temporary); - instructions->push_tail(tmp); - value = new(ctx) ir_dereference_variable(tmp); - } - } - - return value; - } - - unreachable("not reached"); -} - -bool -ast_function_expression::has_sequence_subexpression() const -{ - foreach_list_typed(const ast_node, ast, link, &this->expressions) { - if (ast->has_sequence_subexpression()) - return true; - } - - return false; -} - -ir_rvalue * -ast_aggregate_initializer::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - YYLTYPE loc = this->get_location(); - - if (!this->constructor_type) { - _mesa_glsl_error(&loc, state, "type of C-style initializer unknown"); - return ir_rvalue::error_value(ctx); - } - const glsl_type *const constructor_type = this->constructor_type; - - if (!state->has_420pack()) { - _mesa_glsl_error(&loc, state, "C-style initialization requires the " - "GL_ARB_shading_language_420pack extension"); - return ir_rvalue::error_value(ctx); - } - - if (constructor_type->is_array()) { - return process_array_constructor(instructions, constructor_type, &loc, - &this->expressions, state); - } - - if (constructor_type->is_struct()) { - return process_record_constructor(instructions, constructor_type, &loc, - &this->expressions, state); - } - - return process_vec_mat_constructor(instructions, constructor_type, &loc, - &this->expressions, state); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_to_hir.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_to_hir.cpp deleted file mode 100644 index 8a26d4c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_to_hir.cpp +++ /dev/null @@ -1,9149 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ast_to_hir.c - * Convert abstract syntax to to high-level intermediate reprensentation (HIR). - * - * During the conversion to HIR, the majority of the symantic checking is - * preformed on the program. This includes: - * - * * Symbol table management - * * Type checking - * * Function binding - * - * The majority of this work could be done during parsing, and the parser could - * probably generate HIR directly. However, this results in frequent changes - * to the parser code. Since we do not assume that every system this complier - * is built on will have Flex and Bison installed, we have to store the code - * generated by these tools in our version control system. In other parts of - * the system we've seen problems where a parser was changed but the generated - * code was not committed, merge conflicts where created because two developers - * had slightly different versions of Bison installed, etc. - * - * I have also noticed that running Bison generated parsers in GDB is very - * irritating. When you get a segfault on '$$ = $1->foo', you can't very - * well 'print $1' in GDB. - * - * As a result, my preference is to put as little C code as possible in the - * parser (and lexer) sources. - */ - -#include "glsl_symbol_table.h" -#include "glsl_parser_extras.h" -#include "ast.h" -#include "../glsl_types.h" -#include "../../util/hash_table.h" -#include "../../mesa/main/consts_exts.h" -#include "../../util/macros.h" -#include "../../mesa/main/shaderobj.h" -#include "ir.h" -#include "ir_builder.h" -#include "builtin_functions.h" -#include "../../util/compiler.h" - -using namespace ir_builder; - -static void -detect_conflicting_assignments(struct _mesa_glsl_parse_state *state, - exec_list *instructions); -static void -verify_subroutine_associated_funcs(struct _mesa_glsl_parse_state *state); - -static void -remove_per_vertex_blocks(exec_list *instructions, - _mesa_glsl_parse_state *state, ir_variable_mode mode); - -/** - * Visitor class that finds the first instance of any write-only variable that - * is ever read, if any - */ -class read_from_write_only_variable_visitor : public ir_hierarchical_visitor -{ -public: - read_from_write_only_variable_visitor() : found(NULL) - { - } - - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - if (this->in_assignee) - return visit_continue; - - ir_variable *var = ir->variable_referenced(); - /* We can have memory_write_only set on both images and buffer variables, - * but in the former there is a distinction between reads from - * the variable itself (write_only) and from the memory they point to - * (memory_write_only), while in the case of buffer variables there is - * no such distinction, that is why this check here is limited to - * buffer variables alone. - */ - if (!var || var->data.mode != ir_var_shader_storage) - return visit_continue; - - if (var->data.memory_write_only) { - found = var; - return visit_stop; - } - - return visit_continue; - } - - ir_variable *get_variable() { - return found; - } - - virtual ir_visitor_status visit_enter(ir_expression *ir) - { - /* .length() doesn't actually read anything */ - if (ir->operation == ir_unop_ssbo_unsized_array_length) - return visit_continue_with_parent; - - return visit_continue; - } - -private: - ir_variable *found; -}; - -void -_mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) -{ - _mesa_glsl_initialize_variables(instructions, state); - - state->symbols->separate_function_namespace = state->language_version == 110; - - state->current_function = NULL; - - state->toplevel_ir = instructions; - - state->gs_input_prim_type_specified = false; - state->tcs_output_vertices_specified = false; - state->cs_input_local_size_specified = false; - - /* Section 4.2 of the GLSL 1.20 specification states: - * "The built-in functions are scoped in a scope outside the global scope - * users declare global variables in. That is, a shader's global scope, - * available for user-defined functions and global variables, is nested - * inside the scope containing the built-in functions." - * - * Since built-in functions like ftransform() access built-in variables, - * it follows that those must be in the outer scope as well. - * - * We push scope here to create this nesting effect...but don't pop. - * This way, a shader's globals are still in the symbol table for use - * by the linker. - */ - state->symbols->push_scope(); - - foreach_list_typed (ast_node, ast, link, & state->translation_unit) - ast->hir(instructions, state); - - verify_subroutine_associated_funcs(state); - detect_recursion_unlinked(state, instructions); - detect_conflicting_assignments(state, instructions); - - state->toplevel_ir = NULL; - - /* Move all of the variable declarations to the front of the IR list, and - * reverse the order. This has the (intended!) side effect that vertex - * shader inputs and fragment shader outputs will appear in the IR in the - * same order that they appeared in the shader code. This results in the - * locations being assigned in the declared order. Many (arguably buggy) - * applications depend on this behavior, and it matches what nearly all - * other drivers do. - */ - foreach_in_list_safe(ir_instruction, node, instructions) { - ir_variable *const var = node->as_variable(); - - if (var == NULL) - continue; - - var->remove(); - instructions->push_head(var); - } - - /* Figure out if gl_FragCoord is actually used in fragment shader */ - ir_variable *const var = state->symbols->get_variable("gl_FragCoord"); - if (var != NULL) - state->fs_uses_gl_fragcoord = var->data.used; - - /* From section 7.1 (Built-In Language Variables) of the GLSL 4.10 spec: - * - * If multiple shaders using members of a built-in block belonging to - * the same interface are linked together in the same program, they - * must all redeclare the built-in block in the same way, as described - * in section 4.3.7 "Interface Blocks" for interface block matching, or - * a link error will result. - * - * The phrase "using members of a built-in block" implies that if two - * shaders are linked together and one of them *does not use* any members - * of the built-in block, then that shader does not need to have a matching - * redeclaration of the built-in block. - * - * This appears to be a clarification to the behaviour established for - * gl_PerVertex by GLSL 1.50, therefore implement it regardless of GLSL - * version. - * - * The definition of "interface" in section 4.3.7 that applies here is as - * follows: - * - * The boundary between adjacent programmable pipeline stages: This - * spans all the outputs in all compilation units of the first stage - * and all the inputs in all compilation units of the second stage. - * - * Therefore this rule applies to both inter- and intra-stage linking. - * - * The easiest way to implement this is to check whether the shader uses - * gl_PerVertex right after ast-to-ir conversion, and if it doesn't, simply - * remove all the relevant variable declaration from the IR, so that the - * linker won't see them and complain about mismatches. - */ - remove_per_vertex_blocks(instructions, state, ir_var_shader_in); - remove_per_vertex_blocks(instructions, state, ir_var_shader_out); - - /* Check that we don't have reads from write-only variables */ - read_from_write_only_variable_visitor v; - v.run(instructions); - ir_variable *error_var = v.get_variable(); - if (error_var) { - /* It would be nice to have proper location information, but for that - * we would need to check this as we process each kind of AST node - */ - YYLTYPE loc; - memset(&loc, 0, sizeof(loc)); - _mesa_glsl_error(&loc, state, "Read from write-only variable `%s'", - error_var->name); - } -} - - -static ir_expression_operation -get_implicit_conversion_operation(const glsl_type *to, const glsl_type *from, - struct _mesa_glsl_parse_state *state) -{ - switch (to->base_type) { - case GLSL_TYPE_FLOAT: - switch (from->base_type) { - case GLSL_TYPE_INT: return ir_unop_i2f; - case GLSL_TYPE_UINT: return ir_unop_u2f; - default: return (ir_expression_operation)0; - } - - case GLSL_TYPE_UINT: - if (!state->has_implicit_int_to_uint_conversion()) - return (ir_expression_operation)0; - switch (from->base_type) { - case GLSL_TYPE_INT: return ir_unop_i2u; - default: return (ir_expression_operation)0; - } - - case GLSL_TYPE_DOUBLE: - if (!state->has_double()) - return (ir_expression_operation)0; - switch (from->base_type) { - case GLSL_TYPE_INT: return ir_unop_i2d; - case GLSL_TYPE_UINT: return ir_unop_u2d; - case GLSL_TYPE_FLOAT: return ir_unop_f2d; - case GLSL_TYPE_INT64: return ir_unop_i642d; - case GLSL_TYPE_UINT64: return ir_unop_u642d; - default: return (ir_expression_operation)0; - } - - case GLSL_TYPE_UINT64: - if (!state->has_int64()) - return (ir_expression_operation)0; - switch (from->base_type) { - case GLSL_TYPE_INT: return ir_unop_i2u64; - case GLSL_TYPE_UINT: return ir_unop_u2u64; - case GLSL_TYPE_INT64: return ir_unop_i642u64; - default: return (ir_expression_operation)0; - } - - case GLSL_TYPE_INT64: - if (!state->has_int64()) - return (ir_expression_operation)0; - switch (from->base_type) { - case GLSL_TYPE_INT: return ir_unop_i2i64; - default: return (ir_expression_operation)0; - } - - default: return (ir_expression_operation)0; - } -} - - -/** - * If a conversion is available, convert one operand to a different type - * - * The \c from \c ir_rvalue is converted "in place". - * - * \param to Type that the operand it to be converted to - * \param from Operand that is being converted - * \param state GLSL compiler state - * - * \return - * If a conversion is possible (or unnecessary), \c true is returned. - * Otherwise \c false is returned. - */ -static bool -apply_implicit_conversion(const glsl_type *to, ir_rvalue * &from, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - if (to->base_type == from->type->base_type) - return true; - - /* Prior to GLSL 1.20, there are no implicit conversions */ - if (!state->has_implicit_conversions()) - return false; - - /* From page 27 (page 33 of the PDF) of the GLSL 1.50 spec: - * - * "There are no implicit array or structure conversions. For - * example, an array of int cannot be implicitly converted to an - * array of float. - */ - if (!to->is_numeric() || !from->type->is_numeric()) - return false; - - /* We don't actually want the specific type `to`, we want a type - * with the same base type as `to`, but the same vector width as - * `from`. - */ - to = glsl_type::get_instance(to->base_type, from->type->vector_elements, - from->type->matrix_columns); - - ir_expression_operation op = get_implicit_conversion_operation(to, from->type, state); - if (op) { - from = new(ctx) ir_expression(op, to, from, NULL); - return true; - } else { - return false; - } -} - - -static const struct glsl_type * -arithmetic_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b, - bool multiply, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) -{ - const glsl_type *type_a = value_a->type; - const glsl_type *type_b = value_b->type; - - /* From GLSL 1.50 spec, page 56: - * - * "The arithmetic binary operators add (+), subtract (-), - * multiply (*), and divide (/) operate on integer and - * floating-point scalars, vectors, and matrices." - */ - if (!type_a->is_numeric() || !type_b->is_numeric()) { - _mesa_glsl_error(loc, state, - "operands to arithmetic operators must be numeric"); - return glsl_type::error_type; - } - - - /* "If one operand is floating-point based and the other is - * not, then the conversions from Section 4.1.10 "Implicit - * Conversions" are applied to the non-floating-point-based operand." - */ - if (!apply_implicit_conversion(type_a, value_b, state) - && !apply_implicit_conversion(type_b, value_a, state)) { - _mesa_glsl_error(loc, state, - "could not implicitly convert operands to " - "arithmetic operator"); - return glsl_type::error_type; - } - type_a = value_a->type; - type_b = value_b->type; - - /* "If the operands are integer types, they must both be signed or - * both be unsigned." - * - * From this rule and the preceeding conversion it can be inferred that - * both types must be GLSL_TYPE_FLOAT, or GLSL_TYPE_UINT, or GLSL_TYPE_INT. - * The is_numeric check above already filtered out the case where either - * type is not one of these, so now the base types need only be tested for - * equality. - */ - if (type_a->base_type != type_b->base_type) { - _mesa_glsl_error(loc, state, - "base type mismatch for arithmetic operator"); - return glsl_type::error_type; - } - - /* "All arithmetic binary operators result in the same fundamental type - * (signed integer, unsigned integer, or floating-point) as the - * operands they operate on, after operand type conversion. After - * conversion, the following cases are valid - * - * * The two operands are scalars. In this case the operation is - * applied, resulting in a scalar." - */ - if (type_a->is_scalar() && type_b->is_scalar()) - return type_a; - - /* "* One operand is a scalar, and the other is a vector or matrix. - * In this case, the scalar operation is applied independently to each - * component of the vector or matrix, resulting in the same size - * vector or matrix." - */ - if (type_a->is_scalar()) { - if (!type_b->is_scalar()) - return type_b; - } else if (type_b->is_scalar()) { - return type_a; - } - - /* All of the combinations of , , - * , , and have been - * handled. - */ - assert(!type_a->is_scalar()); - assert(!type_b->is_scalar()); - - /* "* The two operands are vectors of the same size. In this case, the - * operation is done component-wise resulting in the same size - * vector." - */ - if (type_a->is_vector() && type_b->is_vector()) { - if (type_a == type_b) { - return type_a; - } else { - _mesa_glsl_error(loc, state, - "vector size mismatch for arithmetic operator"); - return glsl_type::error_type; - } - } - - /* All of the combinations of , , - * , , , and - * have been handled. At least one of the operands must - * be matrix. Further, since there are no integer matrix types, the base - * type of both operands must be float. - */ - assert(type_a->is_matrix() || type_b->is_matrix()); - assert(type_a->is_float() || type_a->is_double()); - assert(type_b->is_float() || type_b->is_double()); - - /* "* The operator is add (+), subtract (-), or divide (/), and the - * operands are matrices with the same number of rows and the same - * number of columns. In this case, the operation is done component- - * wise resulting in the same size matrix." - * * The operator is multiply (*), where both operands are matrices or - * one operand is a vector and the other a matrix. A right vector - * operand is treated as a column vector and a left vector operand as a - * row vector. In all these cases, it is required that the number of - * columns of the left operand is equal to the number of rows of the - * right operand. Then, the multiply (*) operation does a linear - * algebraic multiply, yielding an object that has the same number of - * rows as the left operand and the same number of columns as the right - * operand. Section 5.10 "Vector and Matrix Operations" explains in - * more detail how vectors and matrices are operated on." - */ - if (! multiply) { - if (type_a == type_b) - return type_a; - } else { - const glsl_type *type = glsl_type::get_mul_type(type_a, type_b); - - if (type == glsl_type::error_type) { - _mesa_glsl_error(loc, state, - "size mismatch for matrix multiplication"); - } - - return type; - } - - - /* "All other cases are illegal." - */ - _mesa_glsl_error(loc, state, "type mismatch"); - return glsl_type::error_type; -} - - -static const struct glsl_type * -unary_arithmetic_result_type(const struct glsl_type *type, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) -{ - /* From GLSL 1.50 spec, page 57: - * - * "The arithmetic unary operators negate (-), post- and pre-increment - * and decrement (-- and ++) operate on integer or floating-point - * values (including vectors and matrices). All unary operators work - * component-wise on their operands. These result with the same type - * they operated on." - */ - if (!type->is_numeric()) { - _mesa_glsl_error(loc, state, - "operands to arithmetic operators must be numeric"); - return glsl_type::error_type; - } - - return type; -} - -/** - * \brief Return the result type of a bit-logic operation. - * - * If the given types to the bit-logic operator are invalid, return - * glsl_type::error_type. - * - * \param value_a LHS of bit-logic op - * \param value_b RHS of bit-logic op - */ -static const struct glsl_type * -bit_logic_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b, - ast_operators op, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) -{ - const glsl_type *type_a = value_a->type; - const glsl_type *type_b = value_b->type; - - if (!state->check_bitwise_operations_allowed(loc)) { - return glsl_type::error_type; - } - - /* From page 50 (page 56 of PDF) of GLSL 1.30 spec: - * - * "The bitwise operators and (&), exclusive-or (^), and inclusive-or - * (|). The operands must be of type signed or unsigned integers or - * integer vectors." - */ - if (!type_a->is_integer_32_64()) { - _mesa_glsl_error(loc, state, "LHS of `%s' must be an integer", - ast_expression::operator_string(op)); - return glsl_type::error_type; - } - if (!type_b->is_integer_32_64()) { - _mesa_glsl_error(loc, state, "RHS of `%s' must be an integer", - ast_expression::operator_string(op)); - return glsl_type::error_type; - } - - /* Prior to GLSL 4.0 / GL_ARB_gpu_shader5, implicit conversions didn't - * make sense for bitwise operations, as they don't operate on floats. - * - * GLSL 4.0 added implicit int -> uint conversions, which are relevant - * here. It wasn't clear whether or not we should apply them to bitwise - * operations. However, Khronos has decided that they should in future - * language revisions. Applications also rely on this behavior. We opt - * to apply them in general, but issue a portability warning. - * - * See https://www.khronos.org/bugzilla/show_bug.cgi?id=1405 - */ - if (type_a->base_type != type_b->base_type) { - if (!apply_implicit_conversion(type_a, value_b, state) - && !apply_implicit_conversion(type_b, value_a, state)) { - _mesa_glsl_error(loc, state, - "could not implicitly convert operands to " - "`%s` operator", - ast_expression::operator_string(op)); - return glsl_type::error_type; - } else { - _mesa_glsl_warning(loc, state, - "some implementations may not support implicit " - "int -> uint conversions for `%s' operators; " - "consider casting explicitly for portability", - ast_expression::operator_string(op)); - } - type_a = value_a->type; - type_b = value_b->type; - } - - /* "The fundamental types of the operands (signed or unsigned) must - * match," - */ - if (type_a->base_type != type_b->base_type) { - _mesa_glsl_error(loc, state, "operands of `%s' must have the same " - "base type", ast_expression::operator_string(op)); - return glsl_type::error_type; - } - - /* "The operands cannot be vectors of differing size." */ - if (type_a->is_vector() && - type_b->is_vector() && - type_a->vector_elements != type_b->vector_elements) { - _mesa_glsl_error(loc, state, "operands of `%s' cannot be vectors of " - "different sizes", ast_expression::operator_string(op)); - return glsl_type::error_type; - } - - /* "If one operand is a scalar and the other a vector, the scalar is - * applied component-wise to the vector, resulting in the same type as - * the vector. The fundamental types of the operands [...] will be the - * resulting fundamental type." - */ - if (type_a->is_scalar()) - return type_b; - else - return type_a; -} - -static const struct glsl_type * -modulus_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) -{ - const glsl_type *type_a = value_a->type; - const glsl_type *type_b = value_b->type; - - if (!state->EXT_gpu_shader4_enable && - !state->check_version(130, 300, loc, "operator '%%' is reserved")) { - return glsl_type::error_type; - } - - /* Section 5.9 (Expressions) of the GLSL 4.00 specification says: - * - * "The operator modulus (%) operates on signed or unsigned integers or - * integer vectors." - */ - if (!type_a->is_integer_32_64()) { - _mesa_glsl_error(loc, state, "LHS of operator %% must be an integer"); - return glsl_type::error_type; - } - if (!type_b->is_integer_32_64()) { - _mesa_glsl_error(loc, state, "RHS of operator %% must be an integer"); - return glsl_type::error_type; - } - - /* "If the fundamental types in the operands do not match, then the - * conversions from section 4.1.10 "Implicit Conversions" are applied - * to create matching types." - * - * Note that GLSL 4.00 (and GL_ARB_gpu_shader5) introduced implicit - * int -> uint conversion rules. Prior to that, there were no implicit - * conversions. So it's harmless to apply them universally - no implicit - * conversions will exist. If the types don't match, we'll receive false, - * and raise an error, satisfying the GLSL 1.50 spec, page 56: - * - * "The operand types must both be signed or unsigned." - */ - if (!apply_implicit_conversion(type_a, value_b, state) && - !apply_implicit_conversion(type_b, value_a, state)) { - _mesa_glsl_error(loc, state, - "could not implicitly convert operands to " - "modulus (%%) operator"); - return glsl_type::error_type; - } - type_a = value_a->type; - type_b = value_b->type; - - /* "The operands cannot be vectors of differing size. If one operand is - * a scalar and the other vector, then the scalar is applied component- - * wise to the vector, resulting in the same type as the vector. If both - * are vectors of the same size, the result is computed component-wise." - */ - if (type_a->is_vector()) { - if (!type_b->is_vector() - || (type_a->vector_elements == type_b->vector_elements)) - return type_a; - } else - return type_b; - - /* "The operator modulus (%) is not defined for any other data types - * (non-integer types)." - */ - _mesa_glsl_error(loc, state, "type mismatch"); - return glsl_type::error_type; -} - - -static const struct glsl_type * -relational_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) -{ - const glsl_type *type_a = value_a->type; - const glsl_type *type_b = value_b->type; - - /* From GLSL 1.50 spec, page 56: - * "The relational operators greater than (>), less than (<), greater - * than or equal (>=), and less than or equal (<=) operate only on - * scalar integer and scalar floating-point expressions." - */ - if (!type_a->is_numeric() - || !type_b->is_numeric() - || !type_a->is_scalar() - || !type_b->is_scalar()) { - _mesa_glsl_error(loc, state, - "operands to relational operators must be scalar and " - "numeric"); - return glsl_type::error_type; - } - - /* "Either the operands' types must match, or the conversions from - * Section 4.1.10 "Implicit Conversions" will be applied to the integer - * operand, after which the types must match." - */ - if (!apply_implicit_conversion(type_a, value_b, state) - && !apply_implicit_conversion(type_b, value_a, state)) { - _mesa_glsl_error(loc, state, - "could not implicitly convert operands to " - "relational operator"); - return glsl_type::error_type; - } - type_a = value_a->type; - type_b = value_b->type; - - if (type_a->base_type != type_b->base_type) { - _mesa_glsl_error(loc, state, "base type mismatch"); - return glsl_type::error_type; - } - - /* "The result is scalar Boolean." - */ - return glsl_type::bool_type; -} - -/** - * \brief Return the result type of a bit-shift operation. - * - * If the given types to the bit-shift operator are invalid, return - * glsl_type::error_type. - * - * \param type_a Type of LHS of bit-shift op - * \param type_b Type of RHS of bit-shift op - */ -static const struct glsl_type * -shift_result_type(const struct glsl_type *type_a, - const struct glsl_type *type_b, - ast_operators op, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) -{ - if (!state->check_bitwise_operations_allowed(loc)) { - return glsl_type::error_type; - } - - /* From page 50 (page 56 of the PDF) of the GLSL 1.30 spec: - * - * "The shift operators (<<) and (>>). For both operators, the operands - * must be signed or unsigned integers or integer vectors. One operand - * can be signed while the other is unsigned." - */ - if (!type_a->is_integer_32_64()) { - _mesa_glsl_error(loc, state, "LHS of operator %s must be an integer or " - "integer vector", ast_expression::operator_string(op)); - return glsl_type::error_type; - - } - if (!type_b->is_integer_32_64()) { - _mesa_glsl_error(loc, state, "RHS of operator %s must be an integer or " - "integer vector", ast_expression::operator_string(op)); - return glsl_type::error_type; - } - - /* "If the first operand is a scalar, the second operand has to be - * a scalar as well." - */ - if (type_a->is_scalar() && !type_b->is_scalar()) { - _mesa_glsl_error(loc, state, "if the first operand of %s is scalar, the " - "second must be scalar as well", - ast_expression::operator_string(op)); - return glsl_type::error_type; - } - - /* If both operands are vectors, check that they have same number of - * elements. - */ - if (type_a->is_vector() && - type_b->is_vector() && - type_a->vector_elements != type_b->vector_elements) { - _mesa_glsl_error(loc, state, "vector operands to operator %s must " - "have same number of elements", - ast_expression::operator_string(op)); - return glsl_type::error_type; - } - - /* "In all cases, the resulting type will be the same type as the left - * operand." - */ - return type_a; -} - -/** - * Returns the innermost array index expression in an rvalue tree. - * This is the largest indexing level -- if an array of blocks, then - * it is the block index rather than an indexing expression for an - * array-typed member of an array of blocks. - */ -static ir_rvalue * -find_innermost_array_index(ir_rvalue *rv) -{ - ir_dereference_array *last = NULL; - while (rv) { - if (rv->as_dereference_array()) { - last = rv->as_dereference_array(); - rv = last->array; - } else if (rv->as_dereference_record()) - rv = rv->as_dereference_record()->record; - else if (rv->as_swizzle()) - rv = rv->as_swizzle()->val; - else - rv = NULL; - } - - if (last) - return last->array_index; - - return NULL; -} - -/** - * Validates that a value can be assigned to a location with a specified type - * - * Validates that \c rhs can be assigned to some location. If the types are - * not an exact match but an automatic conversion is possible, \c rhs will be - * converted. - * - * \return - * \c NULL if \c rhs cannot be assigned to a location with type \c lhs_type. - * Otherwise the actual RHS to be assigned will be returned. This may be - * \c rhs, or it may be \c rhs after some type conversion. - * - * \note - * In addition to being used for assignments, this function is used to - * type-check return values. - */ -static ir_rvalue * -validate_assignment(struct _mesa_glsl_parse_state *state, - YYLTYPE loc, ir_rvalue *lhs, - ir_rvalue *rhs, bool is_initializer) -{ - /* If there is already some error in the RHS, just return it. Anything - * else will lead to an avalanche of error message back to the user. - */ - if (rhs->type->is_error()) - return rhs; - - /* In the Tessellation Control Shader: - * If a per-vertex output variable is used as an l-value, it is an error - * if the expression indicating the vertex number is not the identifier - * `gl_InvocationID`. - */ - if (state->stage == MESA_SHADER_TESS_CTRL && !lhs->type->is_error()) { - ir_variable *var = lhs->variable_referenced(); - if (var && var->data.mode == ir_var_shader_out && !var->data.patch) { - ir_rvalue *index = find_innermost_array_index(lhs); - ir_variable *index_var = index ? index->variable_referenced() : NULL; - if (!index_var || strcmp(index_var->name, "gl_InvocationID") != 0) { - _mesa_glsl_error(&loc, state, - "Tessellation control shader outputs can only " - "be indexed by gl_InvocationID"); - return NULL; - } - } - } - - /* If the types are identical, the assignment can trivially proceed. - */ - if (rhs->type == lhs->type) - return rhs; - - /* If the array element types are the same and the LHS is unsized, - * the assignment is okay for initializers embedded in variable - * declarations. - * - * Note: Whole-array assignments are not permitted in GLSL 1.10, but this - * is handled by ir_dereference::is_lvalue. - */ - const glsl_type *lhs_t = lhs->type; - const glsl_type *rhs_t = rhs->type; - bool unsized_array = false; - while(lhs_t->is_array()) { - if (rhs_t == lhs_t) - break; /* the rest of the inner arrays match so break out early */ - if (!rhs_t->is_array()) { - unsized_array = false; - break; /* number of dimensions mismatch */ - } - if (lhs_t->length == rhs_t->length) { - lhs_t = lhs_t->fields.array; - rhs_t = rhs_t->fields.array; - continue; - } else if (lhs_t->is_unsized_array()) { - unsized_array = true; - } else { - unsized_array = false; - break; /* sized array mismatch */ - } - lhs_t = lhs_t->fields.array; - rhs_t = rhs_t->fields.array; - } - if (unsized_array) { - if (is_initializer) { - if (rhs->type->get_scalar_type() == lhs->type->get_scalar_type()) - return rhs; - } else { - _mesa_glsl_error(&loc, state, - "implicitly sized arrays cannot be assigned"); - return NULL; - } - } - - /* Check for implicit conversion in GLSL 1.20 */ - if (apply_implicit_conversion(lhs->type, rhs, state)) { - if (rhs->type == lhs->type) - return rhs; - } - - _mesa_glsl_error(&loc, state, - "%s of type %s cannot be assigned to " - "variable of type %s", - is_initializer ? "initializer" : "value", - rhs->type->name, lhs->type->name); - - return NULL; -} - -static void -mark_whole_array_access(ir_rvalue *access) -{ - ir_dereference_variable *deref = access->as_dereference_variable(); - - if (deref && deref->var) { - deref->var->data.max_array_access = deref->type->length - 1; - } -} - -static bool -do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state, - const char *non_lvalue_description, - ir_rvalue *lhs, ir_rvalue *rhs, - ir_rvalue **out_rvalue, bool needs_rvalue, - bool is_initializer, - YYLTYPE lhs_loc) -{ - void *ctx = state; - bool error_emitted = (lhs->type->is_error() || rhs->type->is_error()); - - ir_variable *lhs_var = lhs->variable_referenced(); - if (lhs_var) - lhs_var->data.assigned = true; - - bool omit_assignment = false; - if (!error_emitted) { - if (non_lvalue_description != NULL) { - _mesa_glsl_error(&lhs_loc, state, - "assignment to %s", - non_lvalue_description); - error_emitted = true; - } else if (lhs_var != NULL && (lhs_var->data.read_only || - (lhs_var->data.mode == ir_var_shader_storage && - lhs_var->data.memory_read_only))) { - /* We can have memory_read_only set on both images and buffer variables, - * but in the former there is a distinction between assignments to - * the variable itself (read_only) and to the memory they point to - * (memory_read_only), while in the case of buffer variables there is - * no such distinction, that is why this check here is limited to - * buffer variables alone. - */ - - if (state->ignore_write_to_readonly_var) - omit_assignment = true; - else { - _mesa_glsl_error(&lhs_loc, state, - "assignment to read-only variable '%s'", - lhs_var->name); - error_emitted = true; - } - } else if (lhs->type->is_array() && - !state->check_version(state->allow_glsl_120_subset_in_110 ? 110 : 120, - 300, &lhs_loc, - "whole array assignment forbidden")) { - /* From page 32 (page 38 of the PDF) of the GLSL 1.10 spec: - * - * "Other binary or unary expressions, non-dereferenced - * arrays, function names, swizzles with repeated fields, - * and constants cannot be l-values." - * - * The restriction on arrays is lifted in GLSL 1.20 and GLSL ES 3.00. - */ - error_emitted = true; - } else if (!lhs->is_lvalue(state)) { - _mesa_glsl_error(& lhs_loc, state, "non-lvalue in assignment"); - error_emitted = true; - } - } - - ir_rvalue *new_rhs = - validate_assignment(state, lhs_loc, lhs, rhs, is_initializer); - if (new_rhs != NULL) { - rhs = new_rhs; - - /* If the LHS array was not declared with a size, it takes it size from - * the RHS. If the LHS is an l-value and a whole array, it must be a - * dereference of a variable. Any other case would require that the LHS - * is either not an l-value or not a whole array. - */ - if (lhs->type->is_unsized_array()) { - ir_dereference *const d = lhs->as_dereference(); - - assert(d != NULL); - - ir_variable *const var = d->variable_referenced(); - - assert(var != NULL); - - if (var->data.max_array_access >= rhs->type->array_size()) { - /* FINISHME: This should actually log the location of the RHS. */ - _mesa_glsl_error(& lhs_loc, state, "array size must be > %u due to " - "previous access", - var->data.max_array_access); - } - - var->type = glsl_type::get_array_instance(lhs->type->fields.array, - rhs->type->array_size()); - d->type = var->type; - } - if (lhs->type->is_array()) { - mark_whole_array_access(rhs); - mark_whole_array_access(lhs); - } - } else { - error_emitted = true; - } - - if (omit_assignment) { - *out_rvalue = needs_rvalue ? ir_rvalue::error_value(ctx) : NULL; - return error_emitted; - } - - /* Most callers of do_assignment (assign, add_assign, pre_inc/dec, - * but not post_inc) need the converted assigned value as an rvalue - * to handle things like: - * - * i = j += 1; - */ - if (needs_rvalue) { - ir_rvalue *rvalue; - if (!error_emitted) { - ir_variable *var = new(ctx) ir_variable(rhs->type, "assignment_tmp", - ir_var_temporary); - instructions->push_tail(var); - instructions->push_tail(assign(var, rhs)); - - ir_dereference_variable *deref_var = - new(ctx) ir_dereference_variable(var); - instructions->push_tail(new(ctx) ir_assignment(lhs, deref_var)); - rvalue = new(ctx) ir_dereference_variable(var); - } else { - rvalue = ir_rvalue::error_value(ctx); - } - *out_rvalue = rvalue; - } else { - if (!error_emitted) - instructions->push_tail(new(ctx) ir_assignment(lhs, rhs)); - *out_rvalue = NULL; - } - - return error_emitted; -} - -static ir_rvalue * -get_lvalue_copy(exec_list *instructions, ir_rvalue *lvalue) -{ - void *ctx = ralloc_parent(lvalue); - ir_variable *var; - - var = new(ctx) ir_variable(lvalue->type, "_post_incdec_tmp", - ir_var_temporary); - instructions->push_tail(var); - - instructions->push_tail(new(ctx) ir_assignment(new(ctx) ir_dereference_variable(var), - lvalue)); - - return new(ctx) ir_dereference_variable(var); -} - - -ir_rvalue * -ast_node::hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) -{ - (void) instructions; - (void) state; - - return NULL; -} - -bool -ast_node::has_sequence_subexpression() const -{ - return false; -} - -void -ast_node::set_is_lhs(bool /* new_value */) -{ -} - -void -ast_function_expression::hir_no_rvalue(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - (void)hir(instructions, state); -} - -void -ast_aggregate_initializer::hir_no_rvalue(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - (void)hir(instructions, state); -} - -static ir_rvalue * -do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1) -{ - int join_op; - ir_rvalue *cmp = NULL; - - if (operation == ir_binop_all_equal) - join_op = ir_binop_logic_and; - else - join_op = ir_binop_logic_or; - - switch (op0->type->base_type) { - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_BOOL: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - return new(mem_ctx) ir_expression(operation, op0, op1); - - case GLSL_TYPE_ARRAY: { - for (unsigned int i = 0; i < op0->type->length; i++) { - ir_rvalue *e0, *e1, *result; - - e0 = new(mem_ctx) ir_dereference_array(op0->clone(mem_ctx, NULL), - new(mem_ctx) ir_constant(i)); - e1 = new(mem_ctx) ir_dereference_array(op1->clone(mem_ctx, NULL), - new(mem_ctx) ir_constant(i)); - result = do_comparison(mem_ctx, operation, e0, e1); - - if (cmp) { - cmp = new(mem_ctx) ir_expression(join_op, cmp, result); - } else { - cmp = result; - } - } - - mark_whole_array_access(op0); - mark_whole_array_access(op1); - break; - } - - case GLSL_TYPE_STRUCT: { - for (unsigned int i = 0; i < op0->type->length; i++) { - ir_rvalue *e0, *e1, *result; - const char *field_name = op0->type->fields.structure[i].name; - - e0 = new(mem_ctx) ir_dereference_record(op0->clone(mem_ctx, NULL), - field_name); - e1 = new(mem_ctx) ir_dereference_record(op1->clone(mem_ctx, NULL), - field_name); - result = do_comparison(mem_ctx, operation, e0, e1); - - if (cmp) { - cmp = new(mem_ctx) ir_expression(join_op, cmp, result); - } else { - cmp = result; - } - } - break; - } - - case GLSL_TYPE_ERROR: - case GLSL_TYPE_VOID: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_FUNCTION: - /* I assume a comparison of a struct containing a sampler just - * ignores the sampler present in the type. - */ - break; - } - - if (cmp == NULL) - cmp = new(mem_ctx) ir_constant(true); - - return cmp; -} - -/* For logical operations, we want to ensure that the operands are - * scalar booleans. If it isn't, emit an error and return a constant - * boolean to avoid triggering cascading error messages. - */ -static ir_rvalue * -get_scalar_boolean_operand(exec_list *instructions, - struct _mesa_glsl_parse_state *state, - ast_expression *parent_expr, - int operand, - const char *operand_name, - bool *error_emitted) -{ - ast_expression *expr = parent_expr->subexpressions[operand]; - void *ctx = state; - ir_rvalue *val = expr->hir(instructions, state); - - if (val->type->is_boolean() && val->type->is_scalar()) - return val; - - if (!*error_emitted) { - YYLTYPE loc = expr->get_location(); - _mesa_glsl_error(&loc, state, "%s of `%s' must be scalar boolean", - operand_name, - parent_expr->operator_string(parent_expr->oper)); - *error_emitted = true; - } - - return new(ctx) ir_constant(true); -} - -/** - * If name refers to a builtin array whose maximum allowed size is less than - * size, report an error and return true. Otherwise return false. - */ -void -check_builtin_array_max_size(const char *name, unsigned size, - YYLTYPE loc, struct _mesa_glsl_parse_state *state) -{ - if ((strcmp("gl_TexCoord", name) == 0) - && (size > state->Const.MaxTextureCoords)) { - /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec: - * - * "The size [of gl_TexCoord] can be at most - * gl_MaxTextureCoords." - */ - _mesa_glsl_error(&loc, state, "`gl_TexCoord' array size cannot " - "be larger than gl_MaxTextureCoords (%u)", - state->Const.MaxTextureCoords); - } else if (strcmp("gl_ClipDistance", name) == 0) { - state->clip_dist_size = size; - if (size + state->cull_dist_size > state->Const.MaxClipPlanes) { - /* From section 7.1 (Vertex Shader Special Variables) of the - * GLSL 1.30 spec: - * - * "The gl_ClipDistance array is predeclared as unsized and - * must be sized by the shader either redeclaring it with a - * size or indexing it only with integral constant - * expressions. ... The size can be at most - * gl_MaxClipDistances." - */ - _mesa_glsl_error(&loc, state, "`gl_ClipDistance' array size cannot " - "be larger than gl_MaxClipDistances (%u)", - state->Const.MaxClipPlanes); - } - } else if (strcmp("gl_CullDistance", name) == 0) { - state->cull_dist_size = size; - if (size + state->clip_dist_size > state->Const.MaxClipPlanes) { - /* From the ARB_cull_distance spec: - * - * "The gl_CullDistance array is predeclared as unsized and - * must be sized by the shader either redeclaring it with - * a size or indexing it only with integral constant - * expressions. The size determines the number and set of - * enabled cull distances and can be at most - * gl_MaxCullDistances." - */ - _mesa_glsl_error(&loc, state, "`gl_CullDistance' array size cannot " - "be larger than gl_MaxCullDistances (%u)", - state->Const.MaxClipPlanes); - } - } -} - -/** - * Create the constant 1, of a which is appropriate for incrementing and - * decrementing values of the given GLSL type. For example, if type is vec4, - * this creates a constant value of 1.0 having type float. - * - * If the given type is invalid for increment and decrement operators, return - * a floating point 1--the error will be detected later. - */ -static ir_rvalue * -constant_one_for_inc_dec(void *ctx, const glsl_type *type) -{ - switch (type->base_type) { - case GLSL_TYPE_UINT: - return new(ctx) ir_constant((unsigned) 1); - case GLSL_TYPE_INT: - return new(ctx) ir_constant(1); - case GLSL_TYPE_UINT64: - return new(ctx) ir_constant((uint64_t) 1); - case GLSL_TYPE_INT64: - return new(ctx) ir_constant((int64_t) 1); - default: - case GLSL_TYPE_FLOAT: - return new(ctx) ir_constant(1.0f); - } -} - -ir_rvalue * -ast_expression::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - return do_hir(instructions, state, true); -} - -void -ast_expression::hir_no_rvalue(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - do_hir(instructions, state, false); -} - -void -ast_expression::set_is_lhs(bool new_value) -{ - /* is_lhs is tracked only to print "variable used uninitialized" warnings, - * if we lack an identifier we can just skip it. - */ - if (this->primary_expression.identifier == NULL) - return; - - this->is_lhs = new_value; - - /* We need to go through the subexpressions tree to cover cases like - * ast_field_selection - */ - if (this->subexpressions[0] != NULL) - this->subexpressions[0]->set_is_lhs(new_value); -} - -ir_rvalue * -ast_expression::do_hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state, - bool needs_rvalue) -{ - void *ctx = state; - static const int operations[AST_NUM_OPERATORS] = { - -1, /* ast_assign doesn't convert to ir_expression. */ - -1, /* ast_plus doesn't convert to ir_expression. */ - ir_unop_neg, - ir_binop_add, - ir_binop_sub, - ir_binop_mul, - ir_binop_div, - ir_binop_mod, - ir_binop_lshift, - ir_binop_rshift, - ir_binop_less, - ir_binop_less, /* This is correct. See the ast_greater case below. */ - ir_binop_gequal, /* This is correct. See the ast_lequal case below. */ - ir_binop_gequal, - ir_binop_all_equal, - ir_binop_any_nequal, - ir_binop_bit_and, - ir_binop_bit_xor, - ir_binop_bit_or, - ir_unop_bit_not, - ir_binop_logic_and, - ir_binop_logic_xor, - ir_binop_logic_or, - ir_unop_logic_not, - - /* Note: The following block of expression types actually convert - * to multiple IR instructions. - */ - ir_binop_mul, /* ast_mul_assign */ - ir_binop_div, /* ast_div_assign */ - ir_binop_mod, /* ast_mod_assign */ - ir_binop_add, /* ast_add_assign */ - ir_binop_sub, /* ast_sub_assign */ - ir_binop_lshift, /* ast_ls_assign */ - ir_binop_rshift, /* ast_rs_assign */ - ir_binop_bit_and, /* ast_and_assign */ - ir_binop_bit_xor, /* ast_xor_assign */ - ir_binop_bit_or, /* ast_or_assign */ - - -1, /* ast_conditional doesn't convert to ir_expression. */ - ir_binop_add, /* ast_pre_inc. */ - ir_binop_sub, /* ast_pre_dec. */ - ir_binop_add, /* ast_post_inc. */ - ir_binop_sub, /* ast_post_dec. */ - -1, /* ast_field_selection doesn't conv to ir_expression. */ - -1, /* ast_array_index doesn't convert to ir_expression. */ - -1, /* ast_function_call doesn't conv to ir_expression. */ - -1, /* ast_identifier doesn't convert to ir_expression. */ - -1, /* ast_int_constant doesn't convert to ir_expression. */ - -1, /* ast_uint_constant doesn't conv to ir_expression. */ - -1, /* ast_float_constant doesn't conv to ir_expression. */ - -1, /* ast_bool_constant doesn't conv to ir_expression. */ - -1, /* ast_sequence doesn't convert to ir_expression. */ - -1, /* ast_aggregate shouldn't ever even get here. */ - }; - ir_rvalue *result = NULL; - ir_rvalue *op[3]; - const struct glsl_type *type, *orig_type; - bool error_emitted = false; - YYLTYPE loc; - - loc = this->get_location(); - - switch (this->oper) { - case ast_aggregate: - unreachable("ast_aggregate: Should never get here."); - - case ast_assign: { - this->subexpressions[0]->set_is_lhs(true); - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - error_emitted = - do_assignment(instructions, state, - this->subexpressions[0]->non_lvalue_description, - op[0], op[1], &result, needs_rvalue, false, - this->subexpressions[0]->get_location()); - break; - } - - case ast_plus: - op[0] = this->subexpressions[0]->hir(instructions, state); - - type = unary_arithmetic_result_type(op[0]->type, state, & loc); - - error_emitted = type->is_error(); - - result = op[0]; - break; - - case ast_neg: - op[0] = this->subexpressions[0]->hir(instructions, state); - - type = unary_arithmetic_result_type(op[0]->type, state, & loc); - - error_emitted = type->is_error(); - - result = new(ctx) ir_expression(operations[this->oper], type, - op[0], NULL); - break; - - case ast_add: - case ast_sub: - case ast_mul: - case ast_div: - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - type = arithmetic_result_type(op[0], op[1], - (this->oper == ast_mul), - state, & loc); - error_emitted = type->is_error(); - - result = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - break; - - case ast_mod: - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - type = modulus_result_type(op[0], op[1], state, &loc); - - assert(operations[this->oper] == ir_binop_mod); - - result = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - error_emitted = type->is_error(); - break; - - case ast_lshift: - case ast_rshift: - if (!state->check_bitwise_operations_allowed(&loc)) { - error_emitted = true; - } - - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - type = shift_result_type(op[0]->type, op[1]->type, this->oper, state, - &loc); - result = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - error_emitted = op[0]->type->is_error() || op[1]->type->is_error(); - break; - - case ast_less: - case ast_greater: - case ast_lequal: - case ast_gequal: - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - type = relational_result_type(op[0], op[1], state, & loc); - - /* The relational operators must either generate an error or result - * in a scalar boolean. See page 57 of the GLSL 1.50 spec. - */ - assert(type->is_error() - || (type->is_boolean() && type->is_scalar())); - - /* Like NIR, GLSL IR does not have opcodes for > or <=. Instead, swap - * the arguments and use < or >=. - */ - if (this->oper == ast_greater || this->oper == ast_lequal) { - ir_rvalue *const tmp = op[0]; - op[0] = op[1]; - op[1] = tmp; - } - - result = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - error_emitted = type->is_error(); - break; - - case ast_nequal: - case ast_equal: - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - /* From page 58 (page 64 of the PDF) of the GLSL 1.50 spec: - * - * "The equality operators equal (==), and not equal (!=) - * operate on all types. They result in a scalar Boolean. If - * the operand types do not match, then there must be a - * conversion from Section 4.1.10 "Implicit Conversions" - * applied to one operand that can make them match, in which - * case this conversion is done." - */ - - if (op[0]->type == glsl_type::void_type || op[1]->type == glsl_type::void_type) { - _mesa_glsl_error(& loc, state, "`%s': wrong operand types: " - "no operation `%1$s' exists that takes a left-hand " - "operand of type 'void' or a right operand of type " - "'void'", (this->oper == ast_equal) ? "==" : "!="); - error_emitted = true; - } else if ((!apply_implicit_conversion(op[0]->type, op[1], state) - && !apply_implicit_conversion(op[1]->type, op[0], state)) - || (op[0]->type != op[1]->type)) { - _mesa_glsl_error(& loc, state, "operands of `%s' must have the same " - "type", (this->oper == ast_equal) ? "==" : "!="); - error_emitted = true; - } else if ((op[0]->type->is_array() || op[1]->type->is_array()) && - !state->check_version(120, 300, &loc, - "array comparisons forbidden")) { - error_emitted = true; - } else if ((op[0]->type->contains_subroutine() || - op[1]->type->contains_subroutine())) { - _mesa_glsl_error(&loc, state, "subroutine comparisons forbidden"); - error_emitted = true; - } else if ((op[0]->type->contains_opaque() || - op[1]->type->contains_opaque())) { - _mesa_glsl_error(&loc, state, "opaque type comparisons forbidden"); - error_emitted = true; - } - - if (error_emitted) { - result = new(ctx) ir_constant(false); - } else { - result = do_comparison(ctx, operations[this->oper], op[0], op[1]); - assert(result->type == glsl_type::bool_type); - } - break; - - case ast_bit_and: - case ast_bit_xor: - case ast_bit_or: - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - type = bit_logic_result_type(op[0], op[1], this->oper, state, &loc); - result = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - error_emitted = op[0]->type->is_error() || op[1]->type->is_error(); - break; - - case ast_bit_not: - op[0] = this->subexpressions[0]->hir(instructions, state); - - if (!state->check_bitwise_operations_allowed(&loc)) { - error_emitted = true; - } - - if (!op[0]->type->is_integer_32_64()) { - _mesa_glsl_error(&loc, state, "operand of `~' must be an integer"); - error_emitted = true; - } - - type = error_emitted ? glsl_type::error_type : op[0]->type; - result = new(ctx) ir_expression(ir_unop_bit_not, type, op[0], NULL); - break; - - case ast_logic_and: { - exec_list rhs_instructions; - op[0] = get_scalar_boolean_operand(instructions, state, this, 0, - "LHS", &error_emitted); - op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1, - "RHS", &error_emitted); - - if (rhs_instructions.is_empty()) { - result = new(ctx) ir_expression(ir_binop_logic_and, op[0], op[1]); - } else { - ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type, - "and_tmp", - ir_var_temporary); - instructions->push_tail(tmp); - - ir_if *const stmt = new(ctx) ir_if(op[0]); - instructions->push_tail(stmt); - - stmt->then_instructions.append_list(&rhs_instructions); - ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp); - ir_assignment *const then_assign = - new(ctx) ir_assignment(then_deref, op[1]); - stmt->then_instructions.push_tail(then_assign); - - ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp); - ir_assignment *const else_assign = - new(ctx) ir_assignment(else_deref, new(ctx) ir_constant(false)); - stmt->else_instructions.push_tail(else_assign); - - result = new(ctx) ir_dereference_variable(tmp); - } - break; - } - - case ast_logic_or: { - exec_list rhs_instructions; - op[0] = get_scalar_boolean_operand(instructions, state, this, 0, - "LHS", &error_emitted); - op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1, - "RHS", &error_emitted); - - if (rhs_instructions.is_empty()) { - result = new(ctx) ir_expression(ir_binop_logic_or, op[0], op[1]); - } else { - ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type, - "or_tmp", - ir_var_temporary); - instructions->push_tail(tmp); - - ir_if *const stmt = new(ctx) ir_if(op[0]); - instructions->push_tail(stmt); - - ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp); - ir_assignment *const then_assign = - new(ctx) ir_assignment(then_deref, new(ctx) ir_constant(true)); - stmt->then_instructions.push_tail(then_assign); - - stmt->else_instructions.append_list(&rhs_instructions); - ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp); - ir_assignment *const else_assign = - new(ctx) ir_assignment(else_deref, op[1]); - stmt->else_instructions.push_tail(else_assign); - - result = new(ctx) ir_dereference_variable(tmp); - } - break; - } - - case ast_logic_xor: - /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec: - * - * "The logical binary operators and (&&), or ( | | ), and - * exclusive or (^^). They operate only on two Boolean - * expressions and result in a Boolean expression." - */ - op[0] = get_scalar_boolean_operand(instructions, state, this, 0, "LHS", - &error_emitted); - op[1] = get_scalar_boolean_operand(instructions, state, this, 1, "RHS", - &error_emitted); - - result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type, - op[0], op[1]); - break; - - case ast_logic_not: - op[0] = get_scalar_boolean_operand(instructions, state, this, 0, - "operand", &error_emitted); - - result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type, - op[0], NULL); - break; - - case ast_mul_assign: - case ast_div_assign: - case ast_add_assign: - case ast_sub_assign: { - this->subexpressions[0]->set_is_lhs(true); - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - orig_type = op[0]->type; - - /* Break out if operand types were not parsed successfully. */ - if ((op[0]->type == glsl_type::error_type || - op[1]->type == glsl_type::error_type)) { - error_emitted = true; - result = ir_rvalue::error_value(ctx); - break; - } - - type = arithmetic_result_type(op[0], op[1], - (this->oper == ast_mul_assign), - state, & loc); - - if (type != orig_type) { - _mesa_glsl_error(& loc, state, - "could not implicitly convert " - "%s to %s", type->name, orig_type->name); - type = glsl_type::error_type; - } - - ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - - error_emitted = - do_assignment(instructions, state, - this->subexpressions[0]->non_lvalue_description, - op[0]->clone(ctx, NULL), temp_rhs, - &result, needs_rvalue, false, - this->subexpressions[0]->get_location()); - - /* GLSL 1.10 does not allow array assignment. However, we don't have to - * explicitly test for this because none of the binary expression - * operators allow array operands either. - */ - - break; - } - - case ast_mod_assign: { - this->subexpressions[0]->set_is_lhs(true); - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - /* Break out if operand types were not parsed successfully. */ - if ((op[0]->type == glsl_type::error_type || - op[1]->type == glsl_type::error_type)) { - error_emitted = true; - result = ir_rvalue::error_value(ctx); - break; - } - - orig_type = op[0]->type; - type = modulus_result_type(op[0], op[1], state, &loc); - - if (type != orig_type) { - _mesa_glsl_error(& loc, state, - "could not implicitly convert " - "%s to %s", type->name, orig_type->name); - type = glsl_type::error_type; - } - - assert(operations[this->oper] == ir_binop_mod); - - ir_rvalue *temp_rhs; - temp_rhs = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - - error_emitted = - do_assignment(instructions, state, - this->subexpressions[0]->non_lvalue_description, - op[0]->clone(ctx, NULL), temp_rhs, - &result, needs_rvalue, false, - this->subexpressions[0]->get_location()); - break; - } - - case ast_ls_assign: - case ast_rs_assign: { - this->subexpressions[0]->set_is_lhs(true); - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - /* Break out if operand types were not parsed successfully. */ - if ((op[0]->type == glsl_type::error_type || - op[1]->type == glsl_type::error_type)) { - error_emitted = true; - result = ir_rvalue::error_value(ctx); - break; - } - - type = shift_result_type(op[0]->type, op[1]->type, this->oper, state, - &loc); - ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], - type, op[0], op[1]); - error_emitted = - do_assignment(instructions, state, - this->subexpressions[0]->non_lvalue_description, - op[0]->clone(ctx, NULL), temp_rhs, - &result, needs_rvalue, false, - this->subexpressions[0]->get_location()); - break; - } - - case ast_and_assign: - case ast_xor_assign: - case ast_or_assign: { - this->subexpressions[0]->set_is_lhs(true); - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = this->subexpressions[1]->hir(instructions, state); - - /* Break out if operand types were not parsed successfully. */ - if ((op[0]->type == glsl_type::error_type || - op[1]->type == glsl_type::error_type)) { - error_emitted = true; - result = ir_rvalue::error_value(ctx); - break; - } - - orig_type = op[0]->type; - type = bit_logic_result_type(op[0], op[1], this->oper, state, &loc); - - if (type != orig_type) { - _mesa_glsl_error(& loc, state, - "could not implicitly convert " - "%s to %s", type->name, orig_type->name); - type = glsl_type::error_type; - } - - ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], - type, op[0], op[1]); - error_emitted = - do_assignment(instructions, state, - this->subexpressions[0]->non_lvalue_description, - op[0]->clone(ctx, NULL), temp_rhs, - &result, needs_rvalue, false, - this->subexpressions[0]->get_location()); - break; - } - - case ast_conditional: { - /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec: - * - * "The ternary selection operator (?:). It operates on three - * expressions (exp1 ? exp2 : exp3). This operator evaluates the - * first expression, which must result in a scalar Boolean." - */ - op[0] = get_scalar_boolean_operand(instructions, state, this, 0, - "condition", &error_emitted); - - /* The :? operator is implemented by generating an anonymous temporary - * followed by an if-statement. The last instruction in each branch of - * the if-statement assigns a value to the anonymous temporary. This - * temporary is the r-value of the expression. - */ - exec_list then_instructions; - exec_list else_instructions; - - op[1] = this->subexpressions[1]->hir(&then_instructions, state); - op[2] = this->subexpressions[2]->hir(&else_instructions, state); - - /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec: - * - * "The second and third expressions can be any type, as - * long their types match, or there is a conversion in - * Section 4.1.10 "Implicit Conversions" that can be applied - * to one of the expressions to make their types match. This - * resulting matching type is the type of the entire - * expression." - */ - if ((!apply_implicit_conversion(op[1]->type, op[2], state) - && !apply_implicit_conversion(op[2]->type, op[1], state)) - || (op[1]->type != op[2]->type)) { - YYLTYPE loc = this->subexpressions[1]->get_location(); - - _mesa_glsl_error(& loc, state, "second and third operands of ?: " - "operator must have matching types"); - error_emitted = true; - type = glsl_type::error_type; - } else { - type = op[1]->type; - } - - /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec: - * - * "The second and third expressions must be the same type, but can - * be of any type other than an array." - */ - if (type->is_array() && - !state->check_version(120, 300, &loc, - "second and third operands of ?: operator " - "cannot be arrays")) { - error_emitted = true; - } - - /* From section 4.1.7 of the GLSL 4.50 spec (Opaque Types): - * - * "Except for array indexing, structure member selection, and - * parentheses, opaque variables are not allowed to be operands in - * expressions; such use results in a compile-time error." - */ - if (type->contains_opaque()) { - if (!(state->has_bindless() && (type->is_image() || type->is_sampler()))) { - _mesa_glsl_error(&loc, state, "variables of type %s cannot be " - "operands of the ?: operator", type->name); - error_emitted = true; - } - } - - ir_constant *cond_val = op[0]->constant_expression_value(ctx); - - if (then_instructions.is_empty() - && else_instructions.is_empty() - && cond_val != NULL) { - result = cond_val->value.b[0] ? op[1] : op[2]; - } else { - /* The copy to conditional_tmp reads the whole array. */ - if (type->is_array()) { - mark_whole_array_access(op[1]); - mark_whole_array_access(op[2]); - } - - ir_variable *const tmp = - new(ctx) ir_variable(type, "conditional_tmp", ir_var_temporary); - instructions->push_tail(tmp); - - ir_if *const stmt = new(ctx) ir_if(op[0]); - instructions->push_tail(stmt); - - then_instructions.move_nodes_to(& stmt->then_instructions); - ir_dereference *const then_deref = - new(ctx) ir_dereference_variable(tmp); - ir_assignment *const then_assign = - new(ctx) ir_assignment(then_deref, op[1]); - stmt->then_instructions.push_tail(then_assign); - - else_instructions.move_nodes_to(& stmt->else_instructions); - ir_dereference *const else_deref = - new(ctx) ir_dereference_variable(tmp); - ir_assignment *const else_assign = - new(ctx) ir_assignment(else_deref, op[2]); - stmt->else_instructions.push_tail(else_assign); - - result = new(ctx) ir_dereference_variable(tmp); - } - break; - } - - case ast_pre_inc: - case ast_pre_dec: { - this->non_lvalue_description = (this->oper == ast_pre_inc) - ? "pre-increment operation" : "pre-decrement operation"; - - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = constant_one_for_inc_dec(ctx, op[0]->type); - - type = arithmetic_result_type(op[0], op[1], false, state, & loc); - - ir_rvalue *temp_rhs; - temp_rhs = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - - error_emitted = - do_assignment(instructions, state, - this->subexpressions[0]->non_lvalue_description, - op[0]->clone(ctx, NULL), temp_rhs, - &result, needs_rvalue, false, - this->subexpressions[0]->get_location()); - break; - } - - case ast_post_inc: - case ast_post_dec: { - this->non_lvalue_description = (this->oper == ast_post_inc) - ? "post-increment operation" : "post-decrement operation"; - op[0] = this->subexpressions[0]->hir(instructions, state); - op[1] = constant_one_for_inc_dec(ctx, op[0]->type); - - error_emitted = op[0]->type->is_error() || op[1]->type->is_error(); - - if (error_emitted) { - result = ir_rvalue::error_value(ctx); - break; - } - - type = arithmetic_result_type(op[0], op[1], false, state, & loc); - - ir_rvalue *temp_rhs; - temp_rhs = new(ctx) ir_expression(operations[this->oper], type, - op[0], op[1]); - - /* Get a temporary of a copy of the lvalue before it's modified. - * This may get thrown away later. - */ - result = get_lvalue_copy(instructions, op[0]->clone(ctx, NULL)); - - ir_rvalue *junk_rvalue; - error_emitted = - do_assignment(instructions, state, - this->subexpressions[0]->non_lvalue_description, - op[0]->clone(ctx, NULL), temp_rhs, - &junk_rvalue, false, false, - this->subexpressions[0]->get_location()); - - break; - } - - case ast_field_selection: - result = _mesa_ast_field_selection_to_hir(this, instructions, state); - break; - - case ast_array_index: { - YYLTYPE index_loc = subexpressions[1]->get_location(); - - /* Getting if an array is being used uninitialized is beyond what we get - * from ir_value.data.assigned. Setting is_lhs as true would force to - * not raise a uninitialized warning when using an array - */ - subexpressions[0]->set_is_lhs(true); - op[0] = subexpressions[0]->hir(instructions, state); - op[1] = subexpressions[1]->hir(instructions, state); - - result = _mesa_ast_array_index_to_hir(ctx, state, op[0], op[1], - loc, index_loc); - - if (result->type->is_error()) - error_emitted = true; - - break; - } - - case ast_unsized_array_dim: - unreachable("ast_unsized_array_dim: Should never get here."); - - case ast_function_call: - /* Should *NEVER* get here. ast_function_call should always be handled - * by ast_function_expression::hir. - */ - unreachable("ast_function_call: handled elsewhere "); - - case ast_identifier: { - /* ast_identifier can appear several places in a full abstract syntax - * tree. This particular use must be at location specified in the grammar - * as 'variable_identifier'. - */ - ir_variable *var = - state->symbols->get_variable(this->primary_expression.identifier); - - if (var == NULL) { - /* the identifier might be a subroutine name */ - char *sub_name; - sub_name = ralloc_asprintf(ctx, "%s_%s", _mesa_shader_stage_to_subroutine_prefix(state->stage), this->primary_expression.identifier); - var = state->symbols->get_variable(sub_name); - ralloc_free(sub_name); - } - - if (var != NULL) { - var->data.used = true; - result = new(ctx) ir_dereference_variable(var); - - if ((var->data.mode == ir_var_auto || var->data.mode == ir_var_shader_out) - && !this->is_lhs - && result->variable_referenced()->data.assigned != true - && !is_gl_identifier(var->name)) { - _mesa_glsl_warning(&loc, state, "`%s' used uninitialized", - this->primary_expression.identifier); - } - - if (var->is_fb_fetch_color_output()) { - /* From the EXT_shader_framebuffer_fetch spec: - * - * "Unless the GL_EXT_shader_framebuffer_fetch extension has been - * enabled in addition, it's an error to use gl_LastFragData if it - * hasn't been explicitly redeclared with layout(noncoherent)." - */ - if (var->data.memory_coherent && !state->EXT_shader_framebuffer_fetch_enable) { - _mesa_glsl_error(&loc, state, - "invalid use of framebuffer fetch output not " - "qualified with layout(noncoherent)"); - } - } else if (var->data.fb_fetch_output) { - /* From the ARM_shader_framebuffer_fetch_depth_stencil spec: - * - * "It is not legal for a fragment shader to read from gl_LastFragDepthARM - * and gl_LastFragStencilARM if the early_fragment_tests layout qualifier - * is specified. This will result in a compile-time error." - */ - if (state->fs_early_fragment_tests) { - _mesa_glsl_error(&loc, state, - "invalid use of depth or stencil fetch " - "with early fragment tests enabled"); - } - } - - } else { - _mesa_glsl_error(& loc, state, "`%s' undeclared", - this->primary_expression.identifier); - - result = ir_rvalue::error_value(ctx); - error_emitted = true; - } - break; - } - - case ast_int_constant: - result = new(ctx) ir_constant(this->primary_expression.int_constant); - break; - - case ast_uint_constant: - result = new(ctx) ir_constant(this->primary_expression.uint_constant); - break; - - case ast_float_constant: - result = new(ctx) ir_constant(this->primary_expression.float_constant); - break; - - case ast_bool_constant: - result = new(ctx) ir_constant(bool(this->primary_expression.bool_constant)); - break; - - case ast_double_constant: - result = new(ctx) ir_constant(this->primary_expression.double_constant); - break; - - case ast_uint64_constant: - result = new(ctx) ir_constant(this->primary_expression.uint64_constant); - break; - - case ast_int64_constant: - result = new(ctx) ir_constant(this->primary_expression.int64_constant); - break; - - case ast_sequence: { - /* It should not be possible to generate a sequence in the AST without - * any expressions in it. - */ - assert(!this->expressions.is_empty()); - - /* The r-value of a sequence is the last expression in the sequence. If - * the other expressions in the sequence do not have side-effects (and - * therefore add instructions to the instruction list), they get dropped - * on the floor. - */ - exec_node *previous_tail = NULL; - YYLTYPE previous_operand_loc = loc; - - foreach_list_typed (ast_node, ast, link, &this->expressions) { - /* If one of the operands of comma operator does not generate any - * code, we want to emit a warning. At each pass through the loop - * previous_tail will point to the last instruction in the stream - * *before* processing the previous operand. Naturally, - * instructions->get_tail_raw() will point to the last instruction in - * the stream *after* processing the previous operand. If the two - * pointers match, then the previous operand had no effect. - * - * The warning behavior here differs slightly from GCC. GCC will - * only emit a warning if none of the left-hand operands have an - * effect. However, it will emit a warning for each. I believe that - * there are some cases in C (especially with GCC extensions) where - * it is useful to have an intermediate step in a sequence have no - * effect, but I don't think these cases exist in GLSL. Either way, - * it would be a giant hassle to replicate that behavior. - */ - if (previous_tail == instructions->get_tail_raw()) { - _mesa_glsl_warning(&previous_operand_loc, state, - "left-hand operand of comma expression has " - "no effect"); - } - - /* The tail is directly accessed instead of using the get_tail() - * method for performance reasons. get_tail() has extra code to - * return NULL when the list is empty. We don't care about that - * here, so using get_tail_raw() is fine. - */ - previous_tail = instructions->get_tail_raw(); - previous_operand_loc = ast->get_location(); - - result = ast->hir(instructions, state); - } - - /* Any errors should have already been emitted in the loop above. - */ - error_emitted = true; - break; - } - } - type = NULL; /* use result->type, not type. */ - assert(error_emitted || (result != NULL || !needs_rvalue)); - - if (result && result->type->is_error() && !error_emitted) - _mesa_glsl_error(& loc, state, "type mismatch"); - - return result; -} - -bool -ast_expression::has_sequence_subexpression() const -{ - switch (this->oper) { - case ast_plus: - case ast_neg: - case ast_bit_not: - case ast_logic_not: - case ast_pre_inc: - case ast_pre_dec: - case ast_post_inc: - case ast_post_dec: - return this->subexpressions[0]->has_sequence_subexpression(); - - case ast_assign: - case ast_add: - case ast_sub: - case ast_mul: - case ast_div: - case ast_mod: - case ast_lshift: - case ast_rshift: - case ast_less: - case ast_greater: - case ast_lequal: - case ast_gequal: - case ast_nequal: - case ast_equal: - case ast_bit_and: - case ast_bit_xor: - case ast_bit_or: - case ast_logic_and: - case ast_logic_or: - case ast_logic_xor: - case ast_array_index: - case ast_mul_assign: - case ast_div_assign: - case ast_add_assign: - case ast_sub_assign: - case ast_mod_assign: - case ast_ls_assign: - case ast_rs_assign: - case ast_and_assign: - case ast_xor_assign: - case ast_or_assign: - return this->subexpressions[0]->has_sequence_subexpression() || - this->subexpressions[1]->has_sequence_subexpression(); - - case ast_conditional: - return this->subexpressions[0]->has_sequence_subexpression() || - this->subexpressions[1]->has_sequence_subexpression() || - this->subexpressions[2]->has_sequence_subexpression(); - - case ast_sequence: - return true; - - case ast_field_selection: - case ast_identifier: - case ast_int_constant: - case ast_uint_constant: - case ast_float_constant: - case ast_bool_constant: - case ast_double_constant: - case ast_int64_constant: - case ast_uint64_constant: - return false; - - case ast_aggregate: - return false; - - case ast_function_call: - unreachable("should be handled by ast_function_expression::hir"); - - case ast_unsized_array_dim: - unreachable("ast_unsized_array_dim: Should never get here."); - } - - return false; -} - -ir_rvalue * -ast_expression_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - /* It is possible to have expression statements that don't have an - * expression. This is the solitary semicolon: - * - * for (i = 0; i < 5; i++) - * ; - * - * In this case the expression will be NULL. Test for NULL and don't do - * anything in that case. - */ - if (expression != NULL) - expression->hir_no_rvalue(instructions, state); - - /* Statements do not have r-values. - */ - return NULL; -} - - -ir_rvalue * -ast_compound_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - if (new_scope) - state->symbols->push_scope(); - - foreach_list_typed (ast_node, ast, link, &this->statements) - ast->hir(instructions, state); - - if (new_scope) - state->symbols->pop_scope(); - - /* Compound statements do not have r-values. - */ - return NULL; -} - -/** - * Evaluate the given exec_node (which should be an ast_node representing - * a single array dimension) and return its integer value. - */ -static unsigned -process_array_size(exec_node *node, - struct _mesa_glsl_parse_state *state) -{ - void *mem_ctx = state; - - exec_list dummy_instructions; - - ast_node *array_size = exec_node_data(ast_node, node, link); - - /** - * Dimensions other than the outermost dimension can by unsized if they - * are immediately sized by a constructor or initializer. - */ - if (((ast_expression*)array_size)->oper == ast_unsized_array_dim) - return 0; - - ir_rvalue *const ir = array_size->hir(& dummy_instructions, state); - YYLTYPE loc = array_size->get_location(); - - if (ir == NULL) { - _mesa_glsl_error(& loc, state, - "array size could not be resolved"); - return 0; - } - - if (!ir->type->is_integer_32()) { - _mesa_glsl_error(& loc, state, - "array size must be integer type"); - return 0; - } - - if (!ir->type->is_scalar()) { - _mesa_glsl_error(& loc, state, - "array size must be scalar type"); - return 0; - } - - ir_constant *const size = ir->constant_expression_value(mem_ctx); - if (size == NULL || - (state->is_version(120, 300) && - array_size->has_sequence_subexpression())) { - _mesa_glsl_error(& loc, state, "array size must be a " - "constant valued expression"); - return 0; - } - - if (size->value.i[0] <= 0) { - _mesa_glsl_error(& loc, state, "array size must be > 0"); - return 0; - } - - assert(size->type == ir->type); - - /* If the array size is const (and we've verified that - * it is) then no instructions should have been emitted - * when we converted it to HIR. If they were emitted, - * then either the array size isn't const after all, or - * we are emitting unnecessary instructions. - */ - assert(dummy_instructions.is_empty()); - - return size->value.u[0]; -} - -static const glsl_type * -process_array_type(YYLTYPE *loc, const glsl_type *base, - ast_array_specifier *array_specifier, - struct _mesa_glsl_parse_state *state) -{ - const glsl_type *array_type = base; - - if (array_specifier != NULL) { - if (base->is_array()) { - - /* From page 19 (page 25) of the GLSL 1.20 spec: - * - * "Only one-dimensional arrays may be declared." - */ - if (!state->check_arrays_of_arrays_allowed(loc)) { - return glsl_type::error_type; - } - } - - for (exec_node *node = array_specifier->array_dimensions.get_tail_raw(); - !node->is_head_sentinel(); node = node->prev) { - unsigned array_size = process_array_size(node, state); - array_type = glsl_type::get_array_instance(array_type, array_size); - } - } - - return array_type; -} - -static bool -precision_qualifier_allowed(const glsl_type *type) -{ - /* Precision qualifiers apply to floating point, integer and opaque - * types. - * - * Section 4.5.2 (Precision Qualifiers) of the GLSL 1.30 spec says: - * "Any floating point or any integer declaration can have the type - * preceded by one of these precision qualifiers [...] Literal - * constants do not have precision qualifiers. Neither do Boolean - * variables. - * - * Section 4.5 (Precision and Precision Qualifiers) of the GLSL 1.30 - * spec also says: - * - * "Precision qualifiers are added for code portability with OpenGL - * ES, not for functionality. They have the same syntax as in OpenGL - * ES." - * - * Section 8 (Built-In Functions) of the GLSL ES 1.00 spec says: - * - * "uniform lowp sampler2D sampler; - * highp vec2 coord; - * ... - * lowp vec4 col = texture2D (sampler, coord); - * // texture2D returns lowp" - * - * From this, we infer that GLSL 1.30 (and later) should allow precision - * qualifiers on sampler types just like float and integer types. - */ - const glsl_type *const t = type->without_array(); - - return (t->is_float() || t->is_integer_32() || t->contains_opaque()) && - !t->is_struct(); -} - -const glsl_type * -ast_type_specifier::glsl_type(const char **name, - struct _mesa_glsl_parse_state *state) const -{ - const struct glsl_type *type; - - if (this->type != NULL) - type = this->type; - else if (structure) - type = structure->type; - else - type = state->symbols->get_type(this->type_name); - *name = this->type_name; - - YYLTYPE loc = this->get_location(); - type = process_array_type(&loc, type, this->array_specifier, state); - - return type; -} - -/** - * From the OpenGL ES 3.0 spec, 4.5.4 Default Precision Qualifiers: - * - * "The precision statement - * - * precision precision-qualifier type; - * - * can be used to establish a default precision qualifier. The type field can - * be either int or float or any of the sampler types, (...) If type is float, - * the directive applies to non-precision-qualified floating point type - * (scalar, vector, and matrix) declarations. If type is int, the directive - * applies to all non-precision-qualified integer type (scalar, vector, signed, - * and unsigned) declarations." - * - * We use the symbol table to keep the values of the default precisions for - * each 'type' in each scope and we use the 'type' string from the precision - * statement as key in the symbol table. When we want to retrieve the default - * precision associated with a given glsl_type we need to know the type string - * associated with it. This is what this function returns. - */ -static const char * -get_type_name_for_precision_qualifier(const glsl_type *type) -{ - switch (type->base_type) { - case GLSL_TYPE_FLOAT: - return "float"; - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - return "int"; - case GLSL_TYPE_ATOMIC_UINT: - return "atomic_uint"; - case GLSL_TYPE_IMAGE: - [[clang::fallthrough]]; - case GLSL_TYPE_SAMPLER: { - const unsigned type_idx = - type->sampler_array + 2 * type->sampler_shadow; - const unsigned offset = type->is_sampler() ? 0 : 4; - assert(type_idx < 4); - switch (type->sampled_type) { - case GLSL_TYPE_FLOAT: - switch (type->sampler_dimensionality) { - case GLSL_SAMPLER_DIM_1D: { - assert(type->is_sampler()); - static const char *const names[4] = { - "sampler1D", "sampler1DArray", - "sampler1DShadow", "sampler1DArrayShadow" - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_2D: { - static const char *const names[8] = { - "sampler2D", "sampler2DArray", - "sampler2DShadow", "sampler2DArrayShadow", - "image2D", "image2DArray", NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_3D: { - static const char *const names[8] = { - "sampler3D", NULL, NULL, NULL, - "image3D", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_CUBE: { - static const char *const names[8] = { - "samplerCube", "samplerCubeArray", - "samplerCubeShadow", "samplerCubeArrayShadow", - "imageCube", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_MS: { - assert(type->is_sampler()); - static const char *const names[4] = { - "sampler2DMS", "sampler2DMSArray", NULL, NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_RECT: { - assert(type->is_sampler()); - static const char *const names[4] = { - "samplerRect", NULL, "samplerRectShadow", NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_BUF: { - static const char *const names[8] = { - "samplerBuffer", NULL, NULL, NULL, - "imageBuffer", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_EXTERNAL: { - assert(type->is_sampler()); - static const char *const names[4] = { - "samplerExternalOES", NULL, NULL, NULL - }; - return names[type_idx]; - } - default: - unreachable("Unsupported sampler/image dimensionality"); - } /* sampler/image float dimensionality */ - break; - case GLSL_TYPE_INT: - switch (type->sampler_dimensionality) { - case GLSL_SAMPLER_DIM_1D: { - assert(type->is_sampler()); - static const char *const names[4] = { - "isampler1D", "isampler1DArray", NULL, NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_2D: { - static const char *const names[8] = { - "isampler2D", "isampler2DArray", NULL, NULL, - "iimage2D", "iimage2DArray", NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_3D: { - static const char *const names[8] = { - "isampler3D", NULL, NULL, NULL, - "iimage3D", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_CUBE: { - static const char *const names[8] = { - "isamplerCube", "isamplerCubeArray", NULL, NULL, - "iimageCube", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_MS: { - assert(type->is_sampler()); - static const char *const names[4] = { - "isampler2DMS", "isampler2DMSArray", NULL, NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_RECT: { - assert(type->is_sampler()); - static const char *const names[4] = { - "isamplerRect", NULL, "isamplerRectShadow", NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_BUF: { - static const char *const names[8] = { - "isamplerBuffer", NULL, NULL, NULL, - "iimageBuffer", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - default: - unreachable("Unsupported isampler/iimage dimensionality"); - } /* sampler/image int dimensionality */ - break; - case GLSL_TYPE_UINT: - switch (type->sampler_dimensionality) { - case GLSL_SAMPLER_DIM_1D: { - assert(type->is_sampler()); - static const char *const names[4] = { - "usampler1D", "usampler1DArray", NULL, NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_2D: { - static const char *const names[8] = { - "usampler2D", "usampler2DArray", NULL, NULL, - "uimage2D", "uimage2DArray", NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_3D: { - static const char *const names[8] = { - "usampler3D", NULL, NULL, NULL, - "uimage3D", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_CUBE: { - static const char *const names[8] = { - "usamplerCube", "usamplerCubeArray", NULL, NULL, - "uimageCube", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - case GLSL_SAMPLER_DIM_MS: { - assert(type->is_sampler()); - static const char *const names[4] = { - "usampler2DMS", "usampler2DMSArray", NULL, NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_RECT: { - assert(type->is_sampler()); - static const char *const names[4] = { - "usamplerRect", NULL, "usamplerRectShadow", NULL - }; - return names[type_idx]; - } - case GLSL_SAMPLER_DIM_BUF: { - static const char *const names[8] = { - "usamplerBuffer", NULL, NULL, NULL, - "uimageBuffer", NULL, NULL, NULL - }; - return names[offset + type_idx]; - } - default: - unreachable("Unsupported usampler/uimage dimensionality"); - } /* sampler/image uint dimensionality */ - break; - default: - unreachable("Unsupported sampler/image type"); - } /* sampler/image type */ - break; - } /* GLSL_TYPE_SAMPLER/GLSL_TYPE_IMAGE */ - break; - default: - unreachable("Unsupported type"); - } /* base type */ -} - -static unsigned -select_gles_precision(unsigned qual_precision, - const glsl_type *type, - struct _mesa_glsl_parse_state *state, YYLTYPE *loc) -{ - /* Precision qualifiers do not have any meaning in Desktop GLSL. - * In GLES we take the precision from the type qualifier if present, - * otherwise, if the type of the variable allows precision qualifiers at - * all, we look for the default precision qualifier for that type in the - * current scope. - */ - assert(state->es_shader); - - unsigned precision = GLSL_PRECISION_NONE; - if (qual_precision) { - precision = qual_precision; - } else if (precision_qualifier_allowed(type)) { - const char *type_name = - get_type_name_for_precision_qualifier(type->without_array()); - assert(type_name != NULL); - - precision = - state->symbols->get_default_precision_qualifier(type_name); - if (precision == ast_precision_none) { - _mesa_glsl_error(loc, state, - "No precision specified in this scope for type `%s'", - type->name); - } - } - - - /* Section 4.1.7.3 (Atomic Counters) of the GLSL ES 3.10 spec says: - * - * "The default precision of all atomic types is highp. It is an error to - * declare an atomic type with a different precision or to specify the - * default precision for an atomic type to be lowp or mediump." - */ - if (type->is_atomic_uint() && precision != ast_precision_high) { - _mesa_glsl_error(loc, state, - "atomic_uint can only have highp precision qualifier"); - } - - return precision; -} - -const glsl_type * -ast_fully_specified_type::glsl_type(const char **name, - struct _mesa_glsl_parse_state *state) const -{ - return this->specifier->glsl_type(name, state); -} - -/** - * Determine whether a toplevel variable declaration declares a varying. This - * function operates by examining the variable's mode and the shader target, - * so it correctly identifies linkage variables regardless of whether they are - * declared using the deprecated "varying" syntax or the new "in/out" syntax. - * - * Passing a non-toplevel variable declaration (e.g. a function parameter) to - * this function will produce undefined results. - */ -static bool -is_varying_var(ir_variable *var, gl_shader_stage target) -{ - switch (target) { - case MESA_SHADER_VERTEX: - return var->data.mode == ir_var_shader_out; - case MESA_SHADER_FRAGMENT: - return var->data.mode == ir_var_shader_in || - (var->data.mode == ir_var_system_value && - var->data.location == SYSTEM_VALUE_FRAG_COORD); - default: - return var->data.mode == ir_var_shader_out || var->data.mode == ir_var_shader_in; - } -} - -static bool -is_allowed_invariant(ir_variable *var, struct _mesa_glsl_parse_state *state) -{ - if (is_varying_var(var, state->stage)) - return true; - - /* From Section 4.6.1 ("The Invariant Qualifier") GLSL 1.20 spec: - * "Only variables output from a vertex shader can be candidates - * for invariance". - */ - if (!state->is_version(130, 100)) - return false; - - /* - * Later specs remove this language - so allowed invariant - * on fragment shader outputs as well. - */ - if (state->stage == MESA_SHADER_FRAGMENT && - var->data.mode == ir_var_shader_out) - return true; - return false; -} - -static void -validate_component_layout_for_type(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, const glsl_type *type, - unsigned qual_component) -{ - type = type->without_array(); - unsigned components = type->component_slots(); - - if (type->is_matrix() || type->is_struct()) { - _mesa_glsl_error(loc, state, "component layout qualifier " - "cannot be applied to a matrix, a structure, " - "a block, or an array containing any of these."); - } else if (components > 4 && type->is_64bit()) { - _mesa_glsl_error(loc, state, "component layout qualifier " - "cannot be applied to dvec%u.", - components / 2); - } else if (qual_component != 0 && (qual_component + components - 1) > 3) { - _mesa_glsl_error(loc, state, "component overflow (%u > 3)", - (qual_component + components - 1)); - } else if (qual_component == 1 && type->is_64bit()) { - /* We don't bother checking for 3 as it should be caught by the - * overflow check above. - */ - _mesa_glsl_error(loc, state, "doubles cannot begin at component 1 or 3"); - } -} - -/** - * Matrix layout qualifiers are only allowed on certain types - */ -static void -validate_matrix_layout_for_type(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - const glsl_type *type, - ir_variable *var) -{ - if (var && !var->is_in_buffer_block()) { - /* Layout qualifiers may only apply to interface blocks and fields in - * them. - */ - _mesa_glsl_error(loc, state, - "uniform block layout qualifiers row_major and " - "column_major may not be applied to variables " - "outside of uniform blocks"); - } else if (!type->without_array()->is_matrix()) { - /* The OpenGL ES 3.0 conformance tests did not originally allow - * matrix layout qualifiers on non-matrices. However, the OpenGL - * 4.4 and OpenGL ES 3.0 (revision TBD) specifications were - * amended to specifically allow these layouts on all types. Emit - * a warning so that people know their code may not be portable. - */ - _mesa_glsl_warning(loc, state, - "uniform block layout qualifiers row_major and " - "column_major applied to non-matrix types may " - "be rejected by older compilers"); - } -} - -static bool -validate_xfb_buffer_qualifier(YYLTYPE *loc, - struct _mesa_glsl_parse_state *state, - unsigned xfb_buffer) { - if (xfb_buffer >= state->Const.MaxTransformFeedbackBuffers) { - _mesa_glsl_error(loc, state, - "invalid xfb_buffer specified %d is larger than " - "MAX_TRANSFORM_FEEDBACK_BUFFERS - 1 (%d).", - xfb_buffer, - state->Const.MaxTransformFeedbackBuffers - 1); - return false; - } - - return true; -} - -/* From the ARB_enhanced_layouts spec: - * - * "Variables and block members qualified with *xfb_offset* can be - * scalars, vectors, matrices, structures, and (sized) arrays of these. - * The offset must be a multiple of the size of the first component of - * the first qualified variable or block member, or a compile-time error - * results. Further, if applied to an aggregate containing a double, - * the offset must also be a multiple of 8, and the space taken in the - * buffer will be a multiple of 8. - */ -static bool -validate_xfb_offset_qualifier(YYLTYPE *loc, - struct _mesa_glsl_parse_state *state, - int xfb_offset, const glsl_type *type, - unsigned component_size) { - const glsl_type *t_without_array = type->without_array(); - - if (xfb_offset != -1 && type->is_unsized_array()) { - _mesa_glsl_error(loc, state, - "xfb_offset can't be used with unsized arrays."); - return false; - } - - /* Make sure nested structs don't contain unsized arrays, and validate - * any xfb_offsets on interface members. - */ - if (t_without_array->is_struct() || t_without_array->is_interface()) - for (unsigned int i = 0; i < t_without_array->length; i++) { - const glsl_type *member_t = t_without_array->fields.structure[i].type; - - /* When the interface block doesn't have an xfb_offset qualifier then - * we apply the component size rules at the member level. - */ - if (xfb_offset == -1) - component_size = member_t->contains_double() ? 8 : 4; - - int xfb_offset = t_without_array->fields.structure[i].offset; - validate_xfb_offset_qualifier(loc, state, xfb_offset, member_t, - component_size); - } - - /* Nested structs or interface block without offset may not have had an - * offset applied yet so return. - */ - if (xfb_offset == -1) { - return true; - } - - if (xfb_offset % component_size) { - _mesa_glsl_error(loc, state, - "invalid qualifier xfb_offset=%d must be a multiple " - "of the first component size of the first qualified " - "variable or block member. Or double if an aggregate " - "that contains a double (%d).", - xfb_offset, component_size); - return false; - } - - return true; -} - -static bool -validate_stream_qualifier(YYLTYPE *loc, struct _mesa_glsl_parse_state *state, - unsigned stream) -{ - if (stream >= state->consts->MaxVertexStreams) { - _mesa_glsl_error(loc, state, - "invalid stream specified %d is larger than " - "MAX_VERTEX_STREAMS - 1 (%d).", - stream, state->consts->MaxVertexStreams - 1); - return false; - } - - return true; -} - -static void -apply_explicit_binding(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - ir_variable *var, - const glsl_type *type, - const ast_type_qualifier *qual) -{ - if (!qual->flags.q.uniform && !qual->flags.q.buffer) { - _mesa_glsl_error(loc, state, - "the \"binding\" qualifier only applies to uniforms and " - "shader storage buffer objects"); - return; - } - - unsigned qual_binding; - if (!process_qualifier_constant(state, loc, "binding", qual->binding, - &qual_binding)) { - return; - } - - const struct gl_constants *consts = state->consts; - unsigned elements = type->is_array() ? type->arrays_of_arrays_size() : 1; - unsigned max_index = qual_binding + elements - 1; - const glsl_type *base_type = type->without_array(); - - if (base_type->is_interface()) { - /* UBOs. From page 60 of the GLSL 4.20 specification: - * "If the binding point for any uniform block instance is less than zero, - * or greater than or equal to the implementation-dependent maximum - * number of uniform buffer bindings, a compilation error will occur. - * When the binding identifier is used with a uniform block instanced as - * an array of size N, all elements of the array from binding through - * binding + N – 1 must be within this range." - * - * The implementation-dependent maximum is GL_MAX_UNIFORM_BUFFER_BINDINGS. - */ - if (qual->flags.q.uniform && - max_index >= consts->MaxUniformBufferBindings) { - _mesa_glsl_error(loc, state, "layout(binding = %u) for %d UBOs exceeds " - "the maximum number of UBO binding points (%d)", - qual_binding, elements, - consts->MaxUniformBufferBindings); - return; - } - - /* SSBOs. From page 67 of the GLSL 4.30 specification: - * "If the binding point for any uniform or shader storage block instance - * is less than zero, or greater than or equal to the - * implementation-dependent maximum number of uniform buffer bindings, a - * compile-time error will occur. When the binding identifier is used - * with a uniform or shader storage block instanced as an array of size - * N, all elements of the array from binding through binding + N – 1 must - * be within this range." - */ - if (qual->flags.q.buffer && - max_index >= consts->MaxShaderStorageBufferBindings) { - _mesa_glsl_error(loc, state, "layout(binding = %u) for %d SSBOs exceeds " - "the maximum number of SSBO binding points (%d)", - qual_binding, elements, - consts->MaxShaderStorageBufferBindings); - return; - } - } else if (base_type->is_sampler()) { - /* Samplers. From page 63 of the GLSL 4.20 specification: - * "If the binding is less than zero, or greater than or equal to the - * implementation-dependent maximum supported number of units, a - * compilation error will occur. When the binding identifier is used - * with an array of size N, all elements of the array from binding - * through binding + N - 1 must be within this range." - */ - unsigned limit = consts->MaxCombinedTextureImageUnits; - - if (max_index >= limit) { - _mesa_glsl_error(loc, state, "layout(binding = %d) for %d samplers " - "exceeds the maximum number of texture image units " - "(%u)", qual_binding, elements, limit); - - return; - } - } else if (base_type->contains_atomic()) { - assert(consts->MaxAtomicBufferBindings <= MAX_COMBINED_ATOMIC_BUFFERS); - if (qual_binding >= consts->MaxAtomicBufferBindings) { - _mesa_glsl_error(loc, state, "layout(binding = %d) exceeds the " - "maximum number of atomic counter buffer bindings " - "(%u)", qual_binding, - consts->MaxAtomicBufferBindings); - - return; - } - } else if ((state->is_version(420, 310) || - state->ARB_shading_language_420pack_enable) && - base_type->is_image()) { - assert(consts->MaxImageUnits <= MAX_IMAGE_UNITS); - if (max_index >= consts->MaxImageUnits) { - _mesa_glsl_error(loc, state, "Image binding %d exceeds the " - "maximum number of image units (%d)", max_index, - consts->MaxImageUnits); - return; - } - - } else { - _mesa_glsl_error(loc, state, - "the \"binding\" qualifier only applies to uniform " - "blocks, storage blocks, opaque variables, or arrays " - "thereof"); - return; - } - - var->data.explicit_binding = true; - var->data.binding = qual_binding; - - return; -} - -static void -validate_fragment_flat_interpolation_input(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - const glsl_interp_mode interpolation, - const struct glsl_type *var_type, - ir_variable_mode mode) -{ - if (state->stage != MESA_SHADER_FRAGMENT || - interpolation == INTERP_MODE_FLAT || - mode != ir_var_shader_in) - return; - - /* Integer fragment inputs must be qualified with 'flat'. In GLSL ES, - * so must integer vertex outputs. - * - * From section 4.3.4 ("Inputs") of the GLSL 1.50 spec: - * "Fragment shader inputs that are signed or unsigned integers or - * integer vectors must be qualified with the interpolation qualifier - * flat." - * - * From section 4.3.4 ("Input Variables") of the GLSL 3.00 ES spec: - * "Fragment shader inputs that are, or contain, signed or unsigned - * integers or integer vectors must be qualified with the - * interpolation qualifier flat." - * - * From section 4.3.6 ("Output Variables") of the GLSL 3.00 ES spec: - * "Vertex shader outputs that are, or contain, signed or unsigned - * integers or integer vectors must be qualified with the - * interpolation qualifier flat." - * - * Note that prior to GLSL 1.50, this requirement applied to vertex - * outputs rather than fragment inputs. That creates problems in the - * presence of geometry shaders, so we adopt the GLSL 1.50 rule for all - * desktop GL shaders. For GLSL ES shaders, we follow the spec and - * apply the restriction to both vertex outputs and fragment inputs. - * - * Note also that the desktop GLSL specs are missing the text "or - * contain"; this is presumably an oversight, since there is no - * reasonable way to interpolate a fragment shader input that contains - * an integer. See Khronos bug #15671. - */ - if ((state->is_version(130, 300) || state->EXT_gpu_shader4_enable) - && var_type->contains_integer()) { - _mesa_glsl_error(loc, state, "if a fragment input is (or contains) " - "an integer, then it must be qualified with 'flat'"); - } - - /* Double fragment inputs must be qualified with 'flat'. - * - * From the "Overview" of the ARB_gpu_shader_fp64 extension spec: - * "This extension does not support interpolation of double-precision - * values; doubles used as fragment shader inputs must be qualified as - * "flat"." - * - * From section 4.3.4 ("Inputs") of the GLSL 4.00 spec: - * "Fragment shader inputs that are signed or unsigned integers, integer - * vectors, or any double-precision floating-point type must be - * qualified with the interpolation qualifier flat." - * - * Note that the GLSL specs are missing the text "or contain"; this is - * presumably an oversight. See Khronos bug #15671. - * - * The 'double' type does not exist in GLSL ES so far. - */ - if (state->has_double() - && var_type->contains_double()) { - _mesa_glsl_error(loc, state, "if a fragment input is (or contains) " - "a double, then it must be qualified with 'flat'"); - } - - /* Bindless sampler/image fragment inputs must be qualified with 'flat'. - * - * From section 4.3.4 of the ARB_bindless_texture spec: - * - * "(modify last paragraph, p. 35, allowing samplers and images as - * fragment shader inputs) ... Fragment inputs can only be signed and - * unsigned integers and integer vectors, floating point scalars, - * floating-point vectors, matrices, sampler and image types, or arrays - * or structures of these. Fragment shader inputs that are signed or - * unsigned integers, integer vectors, or any double-precision floating- - * point type, or any sampler or image type must be qualified with the - * interpolation qualifier "flat"." - */ - if (state->has_bindless() - && (var_type->contains_sampler() || var_type->contains_image())) { - _mesa_glsl_error(loc, state, "if a fragment input is (or contains) " - "a bindless sampler (or image), then it must be " - "qualified with 'flat'"); - } -} - -static void -validate_interpolation_qualifier(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - const glsl_interp_mode interpolation, - const struct ast_type_qualifier *qual, - const struct glsl_type *var_type, - ir_variable_mode mode) -{ - /* Interpolation qualifiers can only apply to shader inputs or outputs, but - * not to vertex shader inputs nor fragment shader outputs. - * - * From section 4.3 ("Storage Qualifiers") of the GLSL 1.30 spec: - * "Outputs from a vertex shader (out) and inputs to a fragment - * shader (in) can be further qualified with one or more of these - * interpolation qualifiers" - * ... - * "These interpolation qualifiers may only precede the qualifiers in, - * centroid in, out, or centroid out in a declaration. They do not apply - * to the deprecated storage qualifiers varying or centroid - * varying. They also do not apply to inputs into a vertex shader or - * outputs from a fragment shader." - * - * From section 4.3 ("Storage Qualifiers") of the GLSL ES 3.00 spec: - * "Outputs from a shader (out) and inputs to a shader (in) can be - * further qualified with one of these interpolation qualifiers." - * ... - * "These interpolation qualifiers may only precede the qualifiers - * in, centroid in, out, or centroid out in a declaration. They do - * not apply to inputs into a vertex shader or outputs from a - * fragment shader." - */ - if ((state->is_version(130, 300) || state->EXT_gpu_shader4_enable) - && interpolation != INTERP_MODE_NONE) { - const char *i = interpolation_string(interpolation); - if (mode != ir_var_shader_in && mode != ir_var_shader_out) - _mesa_glsl_error(loc, state, - "interpolation qualifier `%s' can only be applied to " - "shader inputs or outputs.", i); - - switch (state->stage) { - case MESA_SHADER_VERTEX: - if (mode == ir_var_shader_in) { - _mesa_glsl_error(loc, state, - "interpolation qualifier '%s' cannot be applied to " - "vertex shader inputs", i); - } - break; - case MESA_SHADER_FRAGMENT: - if (mode == ir_var_shader_out) { - _mesa_glsl_error(loc, state, - "interpolation qualifier '%s' cannot be applied to " - "fragment shader outputs", i); - } - break; - default: - break; - } - } - - /* Interpolation qualifiers cannot be applied to 'centroid' and - * 'centroid varying'. - * - * From section 4.3 ("Storage Qualifiers") of the GLSL 1.30 spec: - * "interpolation qualifiers may only precede the qualifiers in, - * centroid in, out, or centroid out in a declaration. They do not apply - * to the deprecated storage qualifiers varying or centroid varying." - * - * These deprecated storage qualifiers do not exist in GLSL ES 3.00. - * - * GL_EXT_gpu_shader4 allows this. - */ - if (state->is_version(130, 0) && !state->EXT_gpu_shader4_enable - && interpolation != INTERP_MODE_NONE - && qual->flags.q.varying) { - - const char *i = interpolation_string(interpolation); - const char *s; - if (qual->flags.q.centroid) - s = "centroid varying"; - else - s = "varying"; - - _mesa_glsl_error(loc, state, - "qualifier '%s' cannot be applied to the " - "deprecated storage qualifier '%s'", i, s); - } - - validate_fragment_flat_interpolation_input(state, loc, interpolation, - var_type, mode); -} - -static glsl_interp_mode -interpret_interpolation_qualifier(const struct ast_type_qualifier *qual, - const struct glsl_type *var_type, - ir_variable_mode mode, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) -{ - glsl_interp_mode interpolation; - if (qual->flags.q.flat) - interpolation = INTERP_MODE_FLAT; - else if (qual->flags.q.noperspective) - interpolation = INTERP_MODE_NOPERSPECTIVE; - else if (qual->flags.q.smooth) - interpolation = INTERP_MODE_SMOOTH; - else - interpolation = INTERP_MODE_NONE; - - validate_interpolation_qualifier(state, loc, - interpolation, - qual, var_type, mode); - - return interpolation; -} - - -static void -apply_explicit_location(const struct ast_type_qualifier *qual, - ir_variable *var, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) -{ - bool fail = false; - - unsigned qual_location; - if (!process_qualifier_constant(state, loc, "location", qual->location, - &qual_location)) { - return; - } - - /* Checks for GL_ARB_explicit_uniform_location. */ - if (qual->flags.q.uniform) { - if (!state->check_explicit_uniform_location_allowed(loc, var)) - return; - - const struct gl_constants *consts = state->consts; - unsigned max_loc = qual_location + var->type->uniform_locations() - 1; - - if (max_loc >= consts->MaxUserAssignableUniformLocations) { - _mesa_glsl_error(loc, state, "location(s) consumed by uniform %s " - ">= MAX_UNIFORM_LOCATIONS (%u)", var->name, - consts->MaxUserAssignableUniformLocations); - return; - } - - var->data.explicit_location = true; - var->data.location = qual_location; - return; - } - - /* Between GL_ARB_explicit_attrib_location an - * GL_ARB_separate_shader_objects, the inputs and outputs of any shader - * stage can be assigned explicit locations. The checking here associates - * the correct extension with the correct stage's input / output: - * - * input output - * ----- ------ - * vertex explicit_loc sso - * tess control sso sso - * tess eval sso sso - * geometry sso sso - * fragment sso explicit_loc - */ - switch (state->stage) { - case MESA_SHADER_VERTEX: - if (var->data.mode == ir_var_shader_in) { - if (!state->check_explicit_attrib_location_allowed(loc, var)) - return; - - break; - } - - if (var->data.mode == ir_var_shader_out) { - if (!state->check_separate_shader_objects_allowed(loc, var)) - return; - - break; - } - - fail = true; - break; - - case MESA_SHADER_TESS_CTRL: - case MESA_SHADER_TESS_EVAL: - case MESA_SHADER_GEOMETRY: - if (var->data.mode == ir_var_shader_in || var->data.mode == ir_var_shader_out) { - if (!state->check_separate_shader_objects_allowed(loc, var)) - return; - - break; - } - - fail = true; - break; - - case MESA_SHADER_FRAGMENT: - if (var->data.mode == ir_var_shader_in) { - if (!state->check_separate_shader_objects_allowed(loc, var)) - return; - - break; - } - - if (var->data.mode == ir_var_shader_out) { - if (!state->check_explicit_attrib_location_allowed(loc, var)) - return; - - break; - } - - fail = true; - break; - - case MESA_SHADER_COMPUTE: - _mesa_glsl_error(loc, state, - "compute shader variables cannot be given " - "explicit locations"); - return; - default: - fail = true; - break; - }; - - if (fail) { - _mesa_glsl_error(loc, state, - "%s cannot be given an explicit location in %s shader", - mode_string(var), - _mesa_shader_stage_to_string(state->stage)); - } else { - var->data.explicit_location = true; - - switch (state->stage) { - case MESA_SHADER_VERTEX: - var->data.location = (var->data.mode == ir_var_shader_in) - ? (qual_location + VERT_ATTRIB_GENERIC0) - : (qual_location + VARYING_SLOT_VAR0); - break; - - case MESA_SHADER_TESS_CTRL: - case MESA_SHADER_TESS_EVAL: - case MESA_SHADER_GEOMETRY: - if (var->data.patch) - var->data.location = qual_location + VARYING_SLOT_PATCH0; - else - var->data.location = qual_location + VARYING_SLOT_VAR0; - break; - - case MESA_SHADER_FRAGMENT: - var->data.location = (var->data.mode == ir_var_shader_out) - ? (qual_location + FRAG_RESULT_DATA0) - : (qual_location + VARYING_SLOT_VAR0); - break; - default: - assert(!"Unexpected shader type"); - break; - } - - /* Check if index was set for the uniform instead of the function */ - if (qual->flags.q.explicit_index && qual->is_subroutine_decl()) { - _mesa_glsl_error(loc, state, "an index qualifier can only be " - "used with subroutine functions"); - return; - } - - unsigned qual_index; - if (qual->flags.q.explicit_index && - process_qualifier_constant(state, loc, "index", qual->index, - &qual_index)) { - /* From the GLSL 4.30 specification, section 4.4.2 (Output - * Layout Qualifiers): - * - * "It is also a compile-time error if a fragment shader - * sets a layout index to less than 0 or greater than 1." - * - * Older specifications don't mandate a behavior; we take - * this as a clarification and always generate the error. - */ - if (qual_index > 1) { - _mesa_glsl_error(loc, state, - "explicit index may only be 0 or 1"); - } else { - var->data.explicit_index = true; - var->data.index = qual_index; - } - } - } -} - -static bool -validate_storage_for_sampler_image_types(ir_variable *var, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) -{ - /* From section 4.1.7 of the GLSL 4.40 spec: - * - * "[Opaque types] can only be declared as function - * parameters or uniform-qualified variables." - * - * From section 4.1.7 of the ARB_bindless_texture spec: - * - * "Samplers may be declared as shader inputs and outputs, as uniform - * variables, as temporary variables, and as function parameters." - * - * From section 4.1.X of the ARB_bindless_texture spec: - * - * "Images may be declared as shader inputs and outputs, as uniform - * variables, as temporary variables, and as function parameters." - */ - if (state->has_bindless()) { - if (var->data.mode != ir_var_auto && - var->data.mode != ir_var_uniform && - var->data.mode != ir_var_shader_in && - var->data.mode != ir_var_shader_out && - var->data.mode != ir_var_function_in && - var->data.mode != ir_var_function_out && - var->data.mode != ir_var_function_inout) { - _mesa_glsl_error(loc, state, "bindless image/sampler variables may " - "only be declared as shader inputs and outputs, as " - "uniform variables, as temporary variables and as " - "function parameters"); - return false; - } - } else { - if (var->data.mode != ir_var_uniform && - var->data.mode != ir_var_function_in) { - _mesa_glsl_error(loc, state, "image/sampler variables may only be " - "declared as function parameters or " - "uniform-qualified global variables"); - return false; - } - } - return true; -} - -static bool -validate_memory_qualifier_for_type(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - const struct ast_type_qualifier *qual, - const glsl_type *type) -{ - /* From Section 4.10 (Memory Qualifiers) of the GLSL 4.50 spec: - * - * "Memory qualifiers are only supported in the declarations of image - * variables, buffer variables, and shader storage blocks; it is an error - * to use such qualifiers in any other declarations. - */ - if (!type->is_image() && !qual->flags.q.buffer) { - if (qual->flags.q.read_only || - qual->flags.q.write_only || - qual->flags.q.coherent || - qual->flags.q._volatile || - qual->flags.q.restrict_flag) { - _mesa_glsl_error(loc, state, "memory qualifiers may only be applied " - "in the declarations of image variables, buffer " - "variables, and shader storage blocks"); - return false; - } - } - return true; -} - -static bool -validate_image_format_qualifier_for_type(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - const struct ast_type_qualifier *qual, - const glsl_type *type) -{ - /* From section 4.4.6.2 (Format Layout Qualifiers) of the GLSL 4.50 spec: - * - * "Format layout qualifiers can be used on image variable declarations - * (those declared with a basic type having “image ” in its keyword)." - */ - if (!type->is_image() && qual->flags.q.explicit_image_format) { - _mesa_glsl_error(loc, state, "format layout qualifiers may only be " - "applied to images"); - return false; - } - return true; -} - -static void -apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual, - ir_variable *var, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) -{ - const glsl_type *base_type = var->type->without_array(); - - if (!validate_image_format_qualifier_for_type(state, loc, qual, base_type) || - !validate_memory_qualifier_for_type(state, loc, qual, base_type)) - return; - - if (!base_type->is_image()) - return; - - if (!validate_storage_for_sampler_image_types(var, state, loc)) - return; - - var->data.memory_read_only |= qual->flags.q.read_only; - var->data.memory_write_only |= qual->flags.q.write_only; - var->data.memory_coherent |= qual->flags.q.coherent; - var->data.memory_volatile |= qual->flags.q._volatile; - var->data.memory_restrict |= qual->flags.q.restrict_flag; - - if (qual->flags.q.explicit_image_format) { - if (var->data.mode == ir_var_function_in) { - _mesa_glsl_error(loc, state, "format qualifiers cannot be used on " - "image function parameters"); - } - - if (qual->image_base_type != base_type->sampled_type) { - _mesa_glsl_error(loc, state, "format qualifier doesn't match the base " - "data type of the image"); - } - - var->data.image_format = qual->image_format; - } else if (state->has_image_load_formatted()) { - if (var->data.mode == ir_var_uniform && - state->EXT_shader_image_load_formatted_warn) { - _mesa_glsl_warning(loc, state, "GL_EXT_image_load_formatted used"); - } - } else { - if (var->data.mode == ir_var_uniform) { - if (state->es_shader || - !(state->is_version(420, 310) || state->ARB_shader_image_load_store_enable)) { - _mesa_glsl_error(loc, state, "all image uniforms must have a " - "format layout qualifier"); - } else if (!qual->flags.q.write_only) { - _mesa_glsl_error(loc, state, "image uniforms not qualified with " - "`writeonly' must have a format layout qualifier"); - } - } - var->data.image_format = PIPE_FORMAT_NONE; - } - - /* From page 70 of the GLSL ES 3.1 specification: - * - * "Except for image variables qualified with the format qualifiers r32f, - * r32i, and r32ui, image variables must specify either memory qualifier - * readonly or the memory qualifier writeonly." - */ - if (state->es_shader && - var->data.image_format != PIPE_FORMAT_R32_FLOAT && - var->data.image_format != PIPE_FORMAT_R32_SINT && - var->data.image_format != PIPE_FORMAT_R32_UINT && - !var->data.memory_read_only && - !var->data.memory_write_only) { - _mesa_glsl_error(loc, state, "image variables of format other than r32f, " - "r32i or r32ui must be qualified `readonly' or " - "`writeonly'"); - } -} - -static inline const char* -get_layout_qualifier_string(bool origin_upper_left, bool pixel_center_integer) -{ - if (origin_upper_left && pixel_center_integer) - return "origin_upper_left, pixel_center_integer"; - else if (origin_upper_left) - return "origin_upper_left"; - else if (pixel_center_integer) - return "pixel_center_integer"; - else - return " "; -} - -static inline bool -is_conflicting_fragcoord_redeclaration(struct _mesa_glsl_parse_state *state, - const struct ast_type_qualifier *qual) -{ - /* If gl_FragCoord was previously declared, and the qualifiers were - * different in any way, return true. - */ - if (state->fs_redeclares_gl_fragcoord) { - return (state->fs_pixel_center_integer != qual->flags.q.pixel_center_integer - || state->fs_origin_upper_left != qual->flags.q.origin_upper_left); - } - - return false; -} - -static inline bool -is_conflicting_layer_redeclaration(struct _mesa_glsl_parse_state *state, - const struct ast_type_qualifier *qual) -{ - if (state->redeclares_gl_layer) { - return state->layer_viewport_relative != qual->flags.q.viewport_relative; - } - return false; -} - -static inline void -validate_array_dimensions(const glsl_type *t, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) { - if (t->is_array()) { - t = t->fields.array; - while (t->is_array()) { - if (t->is_unsized_array()) { - _mesa_glsl_error(loc, state, - "only the outermost array dimension can " - "be unsized", - t->name); - break; - } - t = t->fields.array; - } - } -} - -static void -apply_bindless_qualifier_to_variable(const struct ast_type_qualifier *qual, - ir_variable *var, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) -{ - bool has_local_qualifiers = qual->flags.q.bindless_sampler || - qual->flags.q.bindless_image || - qual->flags.q.bound_sampler || - qual->flags.q.bound_image; - - /* The ARB_bindless_texture spec says: - * - * "Modify Section 4.4.6 Opaque-Uniform Layout Qualifiers of the GLSL 4.30 - * spec" - * - * "If these layout qualifiers are applied to other types of default block - * uniforms, or variables with non-uniform storage, a compile-time error - * will be generated." - */ - if (has_local_qualifiers && !qual->flags.q.uniform) { - _mesa_glsl_error(loc, state, "ARB_bindless_texture layout qualifiers " - "can only be applied to default block uniforms or " - "variables with uniform storage"); - return; - } - - /* The ARB_bindless_texture spec doesn't state anything in this situation, - * but it makes sense to only allow bindless_sampler/bound_sampler for - * sampler types, and respectively bindless_image/bound_image for image - * types. - */ - if ((qual->flags.q.bindless_sampler || qual->flags.q.bound_sampler) && - !var->type->contains_sampler()) { - _mesa_glsl_error(loc, state, "bindless_sampler or bound_sampler can only " - "be applied to sampler types"); - return; - } - - if ((qual->flags.q.bindless_image || qual->flags.q.bound_image) && - !var->type->contains_image()) { - _mesa_glsl_error(loc, state, "bindless_image or bound_image can only be " - "applied to image types"); - return; - } - - /* The bindless_sampler/bindless_image (and respectively - * bound_sampler/bound_image) layout qualifiers can be set at global and at - * local scope. - */ - if (var->type->contains_sampler() || var->type->contains_image()) { - var->data.bindless = qual->flags.q.bindless_sampler || - qual->flags.q.bindless_image || - state->bindless_sampler_specified || - state->bindless_image_specified; - - var->data.bound = qual->flags.q.bound_sampler || - qual->flags.q.bound_image || - state->bound_sampler_specified || - state->bound_image_specified; - } -} - -static void -apply_layout_qualifier_to_variable(const struct ast_type_qualifier *qual, - ir_variable *var, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc) -{ - if (var->name != NULL && strcmp(var->name, "gl_FragCoord") == 0) { - - /* Section 4.3.8.1, page 39 of GLSL 1.50 spec says: - * - * "Within any shader, the first redeclarations of gl_FragCoord - * must appear before any use of gl_FragCoord." - * - * Generate a compiler error if above condition is not met by the - * fragment shader. - */ - ir_variable *earlier = state->symbols->get_variable("gl_FragCoord"); - if (earlier != NULL && - earlier->data.used && - !state->fs_redeclares_gl_fragcoord) { - _mesa_glsl_error(loc, state, - "gl_FragCoord used before its first redeclaration " - "in fragment shader"); - } - - /* Make sure all gl_FragCoord redeclarations specify the same layout - * qualifiers. - */ - if (is_conflicting_fragcoord_redeclaration(state, qual)) { - const char *const qual_string = - get_layout_qualifier_string(qual->flags.q.origin_upper_left, - qual->flags.q.pixel_center_integer); - - const char *const state_string = - get_layout_qualifier_string(state->fs_origin_upper_left, - state->fs_pixel_center_integer); - - _mesa_glsl_error(loc, state, - "gl_FragCoord redeclared with different layout " - "qualifiers (%s) and (%s) ", - state_string, - qual_string); - } - state->fs_origin_upper_left = qual->flags.q.origin_upper_left; - state->fs_pixel_center_integer = qual->flags.q.pixel_center_integer; - state->fs_redeclares_gl_fragcoord_with_no_layout_qualifiers = - !qual->flags.q.origin_upper_left && !qual->flags.q.pixel_center_integer; - state->fs_redeclares_gl_fragcoord = - state->fs_origin_upper_left || - state->fs_pixel_center_integer || - state->fs_redeclares_gl_fragcoord_with_no_layout_qualifiers; - } - - if ((qual->flags.q.origin_upper_left || qual->flags.q.pixel_center_integer) - && (strcmp(var->name, "gl_FragCoord") != 0)) { - const char *const qual_string = (qual->flags.q.origin_upper_left) - ? "origin_upper_left" : "pixel_center_integer"; - - _mesa_glsl_error(loc, state, - "layout qualifier `%s' can only be applied to " - "fragment shader input `gl_FragCoord'", - qual_string); - } - - if (qual->flags.q.explicit_location) { - apply_explicit_location(qual, var, state, loc); - - if (qual->flags.q.explicit_component) { - unsigned qual_component; - if (process_qualifier_constant(state, loc, "component", - qual->component, &qual_component)) { - validate_component_layout_for_type(state, loc, var->type, - qual_component); - var->data.explicit_component = true; - var->data.location_frac = qual_component; - } - } - } else if (qual->flags.q.explicit_index) { - if (!qual->subroutine_list) - _mesa_glsl_error(loc, state, - "explicit index requires explicit location"); - } else if (qual->flags.q.explicit_component) { - _mesa_glsl_error(loc, state, - "explicit component requires explicit location"); - } - - if (qual->flags.q.explicit_binding) { - apply_explicit_binding(state, loc, var, var->type, qual); - } - - if (state->stage == MESA_SHADER_GEOMETRY && - qual->flags.q.out && qual->flags.q.stream) { - unsigned qual_stream; - if (process_qualifier_constant(state, loc, "stream", qual->stream, - &qual_stream) && - validate_stream_qualifier(loc, state, qual_stream)) { - var->data.stream = qual_stream; - } - } - - if (qual->flags.q.out && qual->flags.q.xfb_buffer) { - unsigned qual_xfb_buffer; - if (process_qualifier_constant(state, loc, "xfb_buffer", - qual->xfb_buffer, &qual_xfb_buffer) && - validate_xfb_buffer_qualifier(loc, state, qual_xfb_buffer)) { - var->data.xfb_buffer = qual_xfb_buffer; - if (qual->flags.q.explicit_xfb_buffer) - var->data.explicit_xfb_buffer = true; - } - } - - if (qual->flags.q.explicit_xfb_offset) { - unsigned qual_xfb_offset; - unsigned component_size = var->type->contains_double() ? 8 : 4; - - if (process_qualifier_constant(state, loc, "xfb_offset", - qual->offset, &qual_xfb_offset) && - validate_xfb_offset_qualifier(loc, state, (int) qual_xfb_offset, - var->type, component_size)) { - var->data.offset = qual_xfb_offset; - var->data.explicit_xfb_offset = true; - } - } - - if (qual->flags.q.explicit_xfb_stride) { - unsigned qual_xfb_stride; - if (process_qualifier_constant(state, loc, "xfb_stride", - qual->xfb_stride, &qual_xfb_stride)) { - var->data.xfb_stride = qual_xfb_stride; - var->data.explicit_xfb_stride = true; - } - } - - if (var->type->contains_atomic()) { - if (var->data.mode == ir_var_uniform) { - if (var->data.explicit_binding) { - unsigned *offset = - &state->atomic_counter_offsets[var->data.binding]; - - if (*offset % ATOMIC_COUNTER_SIZE) - _mesa_glsl_error(loc, state, - "misaligned atomic counter offset"); - - if (*offset >= state->Const.MaxAtomicCounterBufferSize) - _mesa_glsl_error(loc, state, - "offset > max atomic counter buffer size"); - - var->data.offset = *offset; - *offset += var->type->atomic_size(); - - } else { - _mesa_glsl_error(loc, state, - "atomic counters require explicit binding point"); - } - } else if (var->data.mode != ir_var_function_in) { - _mesa_glsl_error(loc, state, "atomic counters may only be declared as " - "function parameters or uniform-qualified " - "global variables"); - } - } - - if (var->type->contains_sampler() && - !validate_storage_for_sampler_image_types(var, state, loc)) - return; - - /* Is the 'layout' keyword used with parameters that allow relaxed checking. - * Many implementations of GL_ARB_fragment_coord_conventions_enable and some - * implementations (only Mesa?) GL_ARB_explicit_attrib_location_enable - * allowed the layout qualifier to be used with 'varying' and 'attribute'. - * These extensions and all following extensions that add the 'layout' - * keyword have been modified to require the use of 'in' or 'out'. - * - * The following extension do not allow the deprecated keywords: - * - * GL_AMD_conservative_depth - * GL_ARB_conservative_depth - * GL_ARB_gpu_shader5 - * GL_ARB_separate_shader_objects - * GL_ARB_tessellation_shader - * GL_ARB_transform_feedback3 - * GL_ARB_uniform_buffer_object - * - * It is unknown whether GL_EXT_shader_image_load_store or GL_NV_gpu_shader5 - * allow layout with the deprecated keywords. - */ - const bool relaxed_layout_qualifier_checking = - state->ARB_fragment_coord_conventions_enable; - - const bool uses_deprecated_qualifier = qual->flags.q.attribute - || qual->flags.q.varying; - if (qual->has_layout() && uses_deprecated_qualifier) { - if (relaxed_layout_qualifier_checking) { - _mesa_glsl_warning(loc, state, - "`layout' qualifier may not be used with " - "`attribute' or `varying'"); - } else { - _mesa_glsl_error(loc, state, - "`layout' qualifier may not be used with " - "`attribute' or `varying'"); - } - } - - /* Layout qualifiers for gl_FragDepth, which are enabled by extension - * AMD_conservative_depth. - */ - if (qual->flags.q.depth_type - && !state->is_version(420, 0) - && !state->AMD_conservative_depth_enable - && !state->ARB_conservative_depth_enable) { - _mesa_glsl_error(loc, state, - "extension GL_AMD_conservative_depth or " - "GL_ARB_conservative_depth must be enabled " - "to use depth layout qualifiers"); - } else if (qual->flags.q.depth_type - && strcmp(var->name, "gl_FragDepth") != 0) { - _mesa_glsl_error(loc, state, - "depth layout qualifiers can be applied only to " - "gl_FragDepth"); - } - - switch (qual->depth_type) { - case ast_depth_any: - var->data.depth_layout = ir_depth_layout_any; - break; - case ast_depth_greater: - var->data.depth_layout = ir_depth_layout_greater; - break; - case ast_depth_less: - var->data.depth_layout = ir_depth_layout_less; - break; - case ast_depth_unchanged: - var->data.depth_layout = ir_depth_layout_unchanged; - break; - default: - var->data.depth_layout = ir_depth_layout_none; - break; - } - - if (qual->flags.q.std140 || - qual->flags.q.std430 || - qual->flags.q.packed || - qual->flags.q.shared) { - _mesa_glsl_error(loc, state, - "uniform and shader storage block layout qualifiers " - "std140, std430, packed, and shared can only be " - "applied to uniform or shader storage blocks, not " - "members"); - } - - if (qual->flags.q.row_major || qual->flags.q.column_major) { - validate_matrix_layout_for_type(state, loc, var->type, var); - } - - /* From section 4.4.1.3 of the GLSL 4.50 specification (Fragment Shader - * Inputs): - * - * "Fragment shaders also allow the following layout qualifier on in only - * (not with variable declarations) - * layout-qualifier-id - * early_fragment_tests - * [...]" - */ - if (qual->flags.q.early_fragment_tests) { - _mesa_glsl_error(loc, state, "early_fragment_tests layout qualifier only " - "valid in fragment shader input layout declaration."); - } - - if (qual->flags.q.inner_coverage) { - _mesa_glsl_error(loc, state, "inner_coverage layout qualifier only " - "valid in fragment shader input layout declaration."); - } - - if (qual->flags.q.post_depth_coverage) { - _mesa_glsl_error(loc, state, "post_depth_coverage layout qualifier only " - "valid in fragment shader input layout declaration."); - } - - if (state->has_bindless()) - apply_bindless_qualifier_to_variable(qual, var, state, loc); - - if (qual->flags.q.pixel_interlock_ordered || - qual->flags.q.pixel_interlock_unordered || - qual->flags.q.sample_interlock_ordered || - qual->flags.q.sample_interlock_unordered) { - _mesa_glsl_error(loc, state, "interlock layout qualifiers: " - "pixel_interlock_ordered, pixel_interlock_unordered, " - "sample_interlock_ordered and sample_interlock_unordered, " - "only valid in fragment shader input layout declaration."); - } - - if (var->name != NULL && strcmp(var->name, "gl_Layer") == 0) { - if (is_conflicting_layer_redeclaration(state, qual)) { - _mesa_glsl_error(loc, state, "gl_Layer redeclaration with " - "different viewport_relative setting than earlier"); - } - state->redeclares_gl_layer = true; - if (qual->flags.q.viewport_relative) { - state->layer_viewport_relative = true; - } - } else if (qual->flags.q.viewport_relative) { - _mesa_glsl_error(loc, state, - "viewport_relative qualifier " - "can only be applied to gl_Layer."); - } -} - -static void -apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual, - ir_variable *var, - struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - bool is_parameter) -{ - STATIC_ASSERT(sizeof(qual->flags.q) <= sizeof(qual->flags.i)); - - if (qual->flags.q.invariant) { - if (var->data.used) { - _mesa_glsl_error(loc, state, - "variable `%s' may not be redeclared " - "`invariant' after being used", - var->name); - } else { - var->data.explicit_invariant = true; - var->data.invariant = true; - } - } - - if (qual->flags.q.precise) { - if (var->data.used) { - _mesa_glsl_error(loc, state, - "variable `%s' may not be redeclared " - "`precise' after being used", - var->name); - } else { - var->data.precise = 1; - } - } - - if (qual->is_subroutine_decl() && !qual->flags.q.uniform) { - _mesa_glsl_error(loc, state, - "`subroutine' may only be applied to uniforms, " - "subroutine type declarations, or function definitions"); - } - - if (qual->flags.q.constant || qual->flags.q.attribute - || qual->flags.q.uniform - || (qual->flags.q.varying && (state->stage == MESA_SHADER_FRAGMENT))) - var->data.read_only = 1; - - if (qual->flags.q.centroid) - var->data.centroid = 1; - - if (qual->flags.q.sample) - var->data.sample = 1; - - /* Precision qualifiers do not hold any meaning in Desktop GLSL */ - if (state->es_shader) { - var->data.precision = - select_gles_precision(qual->precision, var->type, state, loc); - } - - if (qual->flags.q.patch) - var->data.patch = 1; - - if (qual->flags.q.attribute && state->stage != MESA_SHADER_VERTEX) { - var->type = glsl_type::error_type; - _mesa_glsl_error(loc, state, - "`attribute' variables may not be declared in the " - "%s shader", - _mesa_shader_stage_to_string(state->stage)); - } - - /* Disallow layout qualifiers which may only appear on layout declarations. */ - if (qual->flags.q.prim_type) { - _mesa_glsl_error(loc, state, - "Primitive type may only be specified on GS input or output " - "layout declaration, not on variables."); - } - - /* Section 6.1.1 (Function Calling Conventions) of the GLSL 1.10 spec says: - * - * "However, the const qualifier cannot be used with out or inout." - * - * The same section of the GLSL 4.40 spec further clarifies this saying: - * - * "The const qualifier cannot be used with out or inout, or a - * compile-time error results." - */ - if (is_parameter && qual->flags.q.constant && qual->flags.q.out) { - _mesa_glsl_error(loc, state, - "`const' may not be applied to `out' or `inout' " - "function parameters"); - } - - /* If there is no qualifier that changes the mode of the variable, leave - * the setting alone. - */ - assert(var->data.mode != ir_var_temporary); - if (qual->flags.q.in && qual->flags.q.out) - var->data.mode = is_parameter ? ir_var_function_inout : ir_var_shader_out; - else if (qual->flags.q.in) - var->data.mode = is_parameter ? ir_var_function_in : ir_var_shader_in; - else if (qual->flags.q.attribute - || (qual->flags.q.varying && (state->stage == MESA_SHADER_FRAGMENT))) - var->data.mode = ir_var_shader_in; - else if (qual->flags.q.out) - var->data.mode = is_parameter ? ir_var_function_out : ir_var_shader_out; - else if (qual->flags.q.varying && (state->stage == MESA_SHADER_VERTEX)) - var->data.mode = ir_var_shader_out; - else if (qual->flags.q.uniform) - var->data.mode = ir_var_uniform; - else if (qual->flags.q.buffer) - var->data.mode = ir_var_shader_storage; - else if (qual->flags.q.shared_storage) - var->data.mode = ir_var_shader_shared; - - if (!is_parameter && state->stage == MESA_SHADER_FRAGMENT) { - if (state->has_framebuffer_fetch()) { - if (state->is_version(130, 300)) - var->data.fb_fetch_output = qual->flags.q.in && qual->flags.q.out; - else - var->data.fb_fetch_output = (strcmp(var->name, "gl_LastFragData") == 0); - } - - if (state->has_framebuffer_fetch_zs() && - (strcmp(var->name, "gl_LastFragDepthARM") == 0 || - strcmp(var->name, "gl_LastFragStencilARM") == 0)) { - var->data.fb_fetch_output = 1; - } - } - - if (var->data.fb_fetch_output) - var->data.assigned = true; - - if (var->is_fb_fetch_color_output()) { - var->data.memory_coherent = !qual->flags.q.non_coherent; - - /* From the EXT_shader_framebuffer_fetch spec: - * - * "It is an error to declare an inout fragment output not qualified - * with layout(noncoherent) if the GL_EXT_shader_framebuffer_fetch - * extension hasn't been enabled." - */ - if (var->data.memory_coherent && - !state->EXT_shader_framebuffer_fetch_enable) - _mesa_glsl_error(loc, state, - "invalid declaration of framebuffer fetch output not " - "qualified with layout(noncoherent)"); - - } else { - /* From the EXT_shader_framebuffer_fetch spec: - * - * "Fragment outputs declared inout may specify the following layout - * qualifier: [...] noncoherent" - */ - if (qual->flags.q.non_coherent) - _mesa_glsl_error(loc, state, - "invalid layout(noncoherent) qualifier not part of " - "framebuffer fetch output declaration"); - } - - if (!is_parameter && is_varying_var(var, state->stage)) { - /* User-defined ins/outs are not permitted in compute shaders. */ - if (state->stage == MESA_SHADER_COMPUTE) { - _mesa_glsl_error(loc, state, - "user-defined input and output variables are not " - "permitted in compute shaders"); - } - - /* This variable is being used to link data between shader stages (in - * pre-glsl-1.30 parlance, it's a "varying"). Check that it has a type - * that is allowed for such purposes. - * - * From page 25 (page 31 of the PDF) of the GLSL 1.10 spec: - * - * "The varying qualifier can be used only with the data types - * float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of - * these." - * - * This was relaxed in GLSL version 1.30 and GLSL ES version 3.00. From - * page 31 (page 37 of the PDF) of the GLSL 1.30 spec: - * - * "Fragment inputs can only be signed and unsigned integers and - * integer vectors, float, floating-point vectors, matrices, or - * arrays of these. Structures cannot be input. - * - * Similar text exists in the section on vertex shader outputs. - * - * Similar text exists in the GLSL ES 3.00 spec, except that the GLSL ES - * 3.00 spec allows structs as well. Varying structs are also allowed - * in GLSL 1.50. - * - * From section 4.3.4 of the ARB_bindless_texture spec: - * - * "(modify third paragraph of the section to allow sampler and image - * types) ... Vertex shader inputs can only be float, - * single-precision floating-point scalars, single-precision - * floating-point vectors, matrices, signed and unsigned integers - * and integer vectors, sampler and image types." - * - * From section 4.3.6 of the ARB_bindless_texture spec: - * - * "Output variables can only be floating-point scalars, - * floating-point vectors, matrices, signed or unsigned integers or - * integer vectors, sampler or image types, or arrays or structures - * of any these." - */ - switch (var->type->without_array()->base_type) { - case GLSL_TYPE_FLOAT: - /* Ok in all GLSL versions */ - break; - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - if (state->is_version(130, 300) || state->EXT_gpu_shader4_enable) - break; - _mesa_glsl_error(loc, state, - "varying variables must be of base type float in %s", - state->get_version_string()); - break; - case GLSL_TYPE_STRUCT: - if (state->is_version(150, 300)) - break; - _mesa_glsl_error(loc, state, - "varying variables may not be of type struct"); - break; - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - if (state->has_bindless()) - break; - [[clang::fallthrough]]; - default: - _mesa_glsl_error(loc, state, "illegal type for a varying variable"); - break; - } - } - - if (state->all_invariant && var->data.mode == ir_var_shader_out) { - var->data.explicit_invariant = true; - var->data.invariant = true; - } - - var->data.interpolation = - interpret_interpolation_qualifier(qual, var->type, - (ir_variable_mode) var->data.mode, - state, loc); - - /* Does the declaration use the deprecated 'attribute' or 'varying' - * keywords? - */ - const bool uses_deprecated_qualifier = qual->flags.q.attribute - || qual->flags.q.varying; - - - /* Validate auxiliary storage qualifiers */ - - /* From section 4.3.4 of the GLSL 1.30 spec: - * "It is an error to use centroid in in a vertex shader." - * - * From section 4.3.4 of the GLSL ES 3.00 spec: - * "It is an error to use centroid in or interpolation qualifiers in - * a vertex shader input." - */ - - /* Section 4.3.6 of the GLSL 1.30 specification states: - * "It is an error to use centroid out in a fragment shader." - * - * The GL_ARB_shading_language_420pack extension specification states: - * "It is an error to use auxiliary storage qualifiers or interpolation - * qualifiers on an output in a fragment shader." - */ - if (qual->flags.q.sample && (!is_varying_var(var, state->stage) || uses_deprecated_qualifier)) { - _mesa_glsl_error(loc, state, - "sample qualifier may only be used on `in` or `out` " - "variables between shader stages"); - } - if (qual->flags.q.centroid && !is_varying_var(var, state->stage)) { - _mesa_glsl_error(loc, state, - "centroid qualifier may only be used with `in', " - "`out' or `varying' variables between shader stages"); - } - - if (qual->flags.q.shared_storage && state->stage != MESA_SHADER_COMPUTE) { - _mesa_glsl_error(loc, state, - "the shared storage qualifiers can only be used with " - "compute shaders"); - } - - apply_image_qualifier_to_variable(qual, var, state, loc); -} - -/** - * Get the variable that is being redeclared by this declaration or if it - * does not exist, the current declared variable. - * - * Semantic checks to verify the validity of the redeclaration are also - * performed. If semantic checks fail, compilation error will be emitted via - * \c _mesa_glsl_error, but a non-\c NULL pointer will still be returned. - * - * \returns - * A pointer to an existing variable in the current scope if the declaration - * is a redeclaration, current variable otherwise. \c is_declared boolean - * will return \c true if the declaration is a redeclaration, \c false - * otherwise. - */ -static ir_variable * -get_variable_being_redeclared(ir_variable **var_ptr, YYLTYPE loc, - struct _mesa_glsl_parse_state *state, - bool allow_all_redeclarations, - bool *is_redeclaration) -{ - ir_variable *var = *var_ptr; - - /* Check if this declaration is actually a re-declaration, either to - * resize an array or add qualifiers to an existing variable. - * - * This is allowed for variables in the current scope, or when at - * global scope (for built-ins in the implicit outer scope). - */ - ir_variable *earlier = state->symbols->get_variable(var->name); - if (earlier == NULL || - (state->current_function != NULL && - !state->symbols->name_declared_this_scope(var->name))) { - *is_redeclaration = false; - return var; - } - - *is_redeclaration = true; - - if (earlier->data.how_declared == ir_var_declared_implicitly) { - /* Verify that the redeclaration of a built-in does not change the - * storage qualifier. There are a couple special cases. - * - * 1. Some built-in variables that are defined as 'in' in the - * specification are implemented as system values. Allow - * ir_var_system_value -> ir_var_shader_in. - * - * 2. gl_LastFragData is implemented as a ir_var_shader_out, but the - * specification requires that redeclarations omit any qualifier. - * Allow ir_var_shader_out -> ir_var_auto for this one variable. - */ - if (earlier->data.mode != var->data.mode && - !(earlier->data.mode == ir_var_system_value && - var->data.mode == ir_var_shader_in) && - !(strcmp(var->name, "gl_LastFragData") == 0 && - var->data.mode == ir_var_auto)) { - _mesa_glsl_error(&loc, state, - "redeclaration cannot change qualification of `%s'", - var->name); - } - } - - /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec, - * - * "It is legal to declare an array without a size and then - * later re-declare the same name as an array of the same - * type and specify a size." - */ - if (earlier->type->is_unsized_array() && var->type->is_array() - && (var->type->fields.array == earlier->type->fields.array)) { - const int size = var->type->array_size(); - check_builtin_array_max_size(var->name, size, loc, state); - if ((size > 0) && (size <= earlier->data.max_array_access)) { - _mesa_glsl_error(& loc, state, "array size must be > %u due to " - "previous access", - earlier->data.max_array_access); - } - - earlier->type = var->type; - delete var; - var = NULL; - *var_ptr = NULL; - } else if (earlier->type != var->type) { - _mesa_glsl_error(&loc, state, - "redeclaration of `%s' has incorrect type", - var->name); - } else if ((state->ARB_fragment_coord_conventions_enable || - state->is_version(150, 0)) - && strcmp(var->name, "gl_FragCoord") == 0) { - /* Allow redeclaration of gl_FragCoord for ARB_fcc layout - * qualifiers. - * - * We don't really need to do anything here, just allow the - * redeclaration. Any error on the gl_FragCoord is handled on the ast - * level at apply_layout_qualifier_to_variable using the - * ast_type_qualifier and _mesa_glsl_parse_state, or later at - * linker.cpp. - */ - /* According to section 4.3.7 of the GLSL 1.30 spec, - * the following built-in varaibles can be redeclared with an - * interpolation qualifier: - * * gl_FrontColor - * * gl_BackColor - * * gl_FrontSecondaryColor - * * gl_BackSecondaryColor - * * gl_Color - * * gl_SecondaryColor - */ - } else if (state->is_version(130, 0) - && (strcmp(var->name, "gl_FrontColor") == 0 - || strcmp(var->name, "gl_BackColor") == 0 - || strcmp(var->name, "gl_FrontSecondaryColor") == 0 - || strcmp(var->name, "gl_BackSecondaryColor") == 0 - || strcmp(var->name, "gl_Color") == 0 - || strcmp(var->name, "gl_SecondaryColor") == 0)) { - earlier->data.interpolation = var->data.interpolation; - - /* Layout qualifiers for gl_FragDepth. */ - } else if ((state->is_version(420, 0) || - state->AMD_conservative_depth_enable || - state->ARB_conservative_depth_enable) - && strcmp(var->name, "gl_FragDepth") == 0) { - - /** From the AMD_conservative_depth spec: - * Within any shader, the first redeclarations of gl_FragDepth - * must appear before any use of gl_FragDepth. - */ - if (earlier->data.used) { - _mesa_glsl_error(&loc, state, - "the first redeclaration of gl_FragDepth " - "must appear before any use of gl_FragDepth"); - } - - /* Prevent inconsistent redeclaration of depth layout qualifier. */ - if (earlier->data.depth_layout != ir_depth_layout_none - && earlier->data.depth_layout != var->data.depth_layout) { - _mesa_glsl_error(&loc, state, - "gl_FragDepth: depth layout is declared here " - "as '%s, but it was previously declared as " - "'%s'", - depth_layout_string(var->data.depth_layout), - depth_layout_string(earlier->data.depth_layout)); - } - - earlier->data.depth_layout = var->data.depth_layout; - - } else if (state->has_framebuffer_fetch() && - strcmp(var->name, "gl_LastFragData") == 0 && - var->data.mode == ir_var_auto) { - /* According to the EXT_shader_framebuffer_fetch spec: - * - * "By default, gl_LastFragData is declared with the mediump precision - * qualifier. This can be changed by redeclaring the corresponding - * variables with the desired precision qualifier." - * - * "Fragment shaders may specify the following layout qualifier only for - * redeclaring the built-in gl_LastFragData array [...]: noncoherent" - */ - earlier->data.precision = var->data.precision; - earlier->data.memory_coherent = var->data.memory_coherent; - - } else if (state->NV_viewport_array2_enable && - strcmp(var->name, "gl_Layer") == 0 && - earlier->data.how_declared == ir_var_declared_implicitly) { - /* No need to do anything, just allow it. Qualifier is stored in state */ - - } else if (state->is_version(0, 300) && - state->has_separate_shader_objects() && - (strcmp(var->name, "gl_Position") == 0 || - strcmp(var->name, "gl_PointSize") == 0)) { - - /* EXT_separate_shader_objects spec says: - * - * "The following vertex shader outputs may be redeclared - * at global scope to specify a built-in output interface, - * with or without special qualifiers: - * - * gl_Position - * gl_PointSize - * - * When compiling shaders using either of the above variables, - * both such variables must be redeclared prior to use." - */ - if (earlier->data.used) { - _mesa_glsl_error(&loc, state, "the first redeclaration of " - "%s must appear before any use", var->name); - } - } else if ((earlier->data.how_declared == ir_var_declared_implicitly && - state->allow_builtin_variable_redeclaration) || - allow_all_redeclarations) { - /* Allow verbatim redeclarations of built-in variables. Not explicitly - * valid, but some applications do it. - */ - } else { - _mesa_glsl_error(&loc, state, "`%s' redeclared", var->name); - } - - return earlier; -} - -/** - * Generate the IR for an initializer in a variable declaration - */ -static ir_rvalue * -process_initializer(ir_variable *var, ast_declaration *decl, - ast_fully_specified_type *type, - exec_list *initializer_instructions, - struct _mesa_glsl_parse_state *state) -{ - void *mem_ctx = state; - ir_rvalue *result = NULL; - - YYLTYPE initializer_loc = decl->initializer->get_location(); - - /* From page 24 (page 30 of the PDF) of the GLSL 1.10 spec: - * - * "All uniform variables are read-only and are initialized either - * directly by an application via API commands, or indirectly by - * OpenGL." - */ - if (var->data.mode == ir_var_uniform) { - state->check_version(120, 0, &initializer_loc, - "cannot initialize uniform %s", - var->name); - } - - /* Section 4.3.7 "Buffer Variables" of the GLSL 4.30 spec: - * - * "Buffer variables cannot have initializers." - */ - if (var->data.mode == ir_var_shader_storage) { - _mesa_glsl_error(&initializer_loc, state, - "cannot initialize buffer variable %s", - var->name); - } - - /* From section 4.1.7 of the GLSL 4.40 spec: - * - * "Opaque variables [...] are initialized only through the - * OpenGL API; they cannot be declared with an initializer in a - * shader." - * - * From section 4.1.7 of the ARB_bindless_texture spec: - * - * "Samplers may be declared as shader inputs and outputs, as uniform - * variables, as temporary variables, and as function parameters." - * - * From section 4.1.X of the ARB_bindless_texture spec: - * - * "Images may be declared as shader inputs and outputs, as uniform - * variables, as temporary variables, and as function parameters." - */ - if (var->type->contains_atomic() || - (!state->has_bindless() && var->type->contains_opaque())) { - _mesa_glsl_error(&initializer_loc, state, - "cannot initialize %s variable %s", - var->name, state->has_bindless() ? "atomic" : "opaque"); - } - - if ((var->data.mode == ir_var_shader_in) && (state->current_function == NULL)) { - _mesa_glsl_error(&initializer_loc, state, - "cannot initialize %s shader input / %s %s", - _mesa_shader_stage_to_string(state->stage), - (state->stage == MESA_SHADER_VERTEX) - ? "attribute" : "varying", - var->name); - } - - if (var->data.mode == ir_var_shader_out && state->current_function == NULL) { - _mesa_glsl_error(&initializer_loc, state, - "cannot initialize %s shader output %s", - _mesa_shader_stage_to_string(state->stage), - var->name); - } - - /* If the initializer is an ast_aggregate_initializer, recursively store - * type information from the LHS into it, so that its hir() function can do - * type checking. - */ - if (decl->initializer->oper == ast_aggregate) - _mesa_ast_set_aggregate_type(var->type, decl->initializer); - - ir_dereference *const lhs = new(state) ir_dereference_variable(var); - ir_rvalue *rhs = decl->initializer->hir(initializer_instructions, state); - - /* Calculate the constant value if this is a const or uniform - * declaration. - * - * Section 4.3 (Storage Qualifiers) of the GLSL ES 1.00.17 spec says: - * - * "Declarations of globals without a storage qualifier, or with - * just the const qualifier, may include initializers, in which case - * they will be initialized before the first line of main() is - * executed. Such initializers must be a constant expression." - * - * The same section of the GLSL ES 3.00.4 spec has similar language. - */ - if (type->qualifier.flags.q.constant - || type->qualifier.flags.q.uniform - || (state->es_shader && state->current_function == NULL)) { - ir_rvalue *new_rhs = validate_assignment(state, initializer_loc, - lhs, rhs, true); - if (new_rhs != NULL) { - rhs = new_rhs; - - /* Section 4.3.3 (Constant Expressions) of the GLSL ES 3.00.4 spec - * says: - * - * "A constant expression is one of - * - * ... - * - * - an expression formed by an operator on operands that are - * all constant expressions, including getting an element of - * a constant array, or a field of a constant structure, or - * components of a constant vector. However, the sequence - * operator ( , ) and the assignment operators ( =, +=, ...) - * are not included in the operators that can create a - * constant expression." - * - * Section 12.43 (Sequence operator and constant expressions) says: - * - * "Should the following construct be allowed? - * - * float a[2,3]; - * - * The expression within the brackets uses the sequence operator - * (',') and returns the integer 3 so the construct is declaring - * a single-dimensional array of size 3. In some languages, the - * construct declares a two-dimensional array. It would be - * preferable to make this construct illegal to avoid confusion. - * - * One possibility is to change the definition of the sequence - * operator so that it does not return a constant-expression and - * hence cannot be used to declare an array size. - * - * RESOLUTION: The result of a sequence operator is not a - * constant-expression." - * - * Section 4.3.3 (Constant Expressions) of the GLSL 4.30.9 spec - * contains language almost identical to the section 4.3.3 in the - * GLSL ES 3.00.4 spec. This is a new limitation for these GLSL - * versions. - */ - ir_constant *constant_value = - rhs->constant_expression_value(mem_ctx); - - if (!constant_value || - (state->is_version(430, 300) && - decl->initializer->has_sequence_subexpression())) { - const char *const variable_mode = - (type->qualifier.flags.q.constant) - ? "const" - : ((type->qualifier.flags.q.uniform) ? "uniform" : "global"); - - /* If ARB_shading_language_420pack is enabled, initializers of - * const-qualified local variables do not have to be constant - * expressions. Const-qualified global variables must still be - * initialized with constant expressions. - */ - if (!state->has_420pack() - || state->current_function == NULL) { - _mesa_glsl_error(& initializer_loc, state, - "initializer of %s variable `%s' must be a " - "constant expression", - variable_mode, - decl->identifier); - if (var->type->is_numeric()) { - /* Reduce cascading errors. */ - var->constant_value = type->qualifier.flags.q.constant - ? ir_constant::zero(state, var->type) : NULL; - } - } - } else { - rhs = constant_value; - var->constant_value = type->qualifier.flags.q.constant - ? constant_value : NULL; - } - } else { - if (var->type->is_numeric()) { - /* Reduce cascading errors. */ - rhs = var->constant_value = type->qualifier.flags.q.constant - ? ir_constant::zero(state, var->type) : NULL; - } - } - } - - if (rhs && !rhs->type->is_error()) { - bool temp = var->data.read_only; - if (type->qualifier.flags.q.constant) - var->data.read_only = false; - - /* Never emit code to initialize a uniform. - */ - const glsl_type *initializer_type; - bool error_emitted = false; - if (!type->qualifier.flags.q.uniform) { - error_emitted = - do_assignment(initializer_instructions, state, - NULL, lhs, rhs, - &result, true, true, - type->get_location()); - initializer_type = result->type; - } else - initializer_type = rhs->type; - - if (!error_emitted) { - var->constant_initializer = rhs->constant_expression_value(mem_ctx); - var->data.has_initializer = true; - var->data.is_implicit_initializer = false; - - /* If the declared variable is an unsized array, it must inherrit - * its full type from the initializer. A declaration such as - * - * uniform float a[] = float[](1.0, 2.0, 3.0, 3.0); - * - * becomes - * - * uniform float a[4] = float[](1.0, 2.0, 3.0, 3.0); - * - * The assignment generated in the if-statement (below) will also - * automatically handle this case for non-uniforms. - * - * If the declared variable is not an array, the types must - * already match exactly. As a result, the type assignment - * here can be done unconditionally. For non-uniforms the call - * to do_assignment can change the type of the initializer (via - * the implicit conversion rules). For uniforms the initializer - * must be a constant expression, and the type of that expression - * was validated above. - */ - var->type = initializer_type; - } - - var->data.read_only = temp; - } - - return result; -} - -static void -validate_layout_qualifier_vertex_count(struct _mesa_glsl_parse_state *state, - YYLTYPE loc, ir_variable *var, - unsigned num_vertices, - unsigned *size, - const char *var_category) -{ - if (var->type->is_unsized_array()) { - /* Section 4.3.8.1 (Input Layout Qualifiers) of the GLSL 1.50 spec says: - * - * All geometry shader input unsized array declarations will be - * sized by an earlier input layout qualifier, when present, as per - * the following table. - * - * Followed by a table mapping each allowed input layout qualifier to - * the corresponding input length. - * - * Similarly for tessellation control shader outputs. - */ - if (num_vertices != 0) - var->type = glsl_type::get_array_instance(var->type->fields.array, - num_vertices); - } else { - /* Section 4.3.8.1 (Input Layout Qualifiers) of the GLSL 1.50 spec - * includes the following examples of compile-time errors: - * - * // code sequence within one shader... - * in vec4 Color1[]; // size unknown - * ...Color1.length()...// illegal, length() unknown - * in vec4 Color2[2]; // size is 2 - * ...Color1.length()...// illegal, Color1 still has no size - * in vec4 Color3[3]; // illegal, input sizes are inconsistent - * layout(lines) in; // legal, input size is 2, matching - * in vec4 Color4[3]; // illegal, contradicts layout - * ... - * - * To detect the case illustrated by Color3, we verify that the size of - * an explicitly-sized array matches the size of any previously declared - * explicitly-sized array. To detect the case illustrated by Color4, we - * verify that the size of an explicitly-sized array is consistent with - * any previously declared input layout. - */ - if (num_vertices != 0 && var->type->length != num_vertices) { - _mesa_glsl_error(&loc, state, - "%s size contradicts previously declared layout " - "(size is %u, but layout requires a size of %u)", - var_category, var->type->length, num_vertices); - } else if (*size != 0 && var->type->length != *size) { - _mesa_glsl_error(&loc, state, - "%s sizes are inconsistent (size is %u, but a " - "previous declaration has size %u)", - var_category, var->type->length, *size); - } else { - *size = var->type->length; - } - } -} - -static void -handle_tess_ctrl_shader_output_decl(struct _mesa_glsl_parse_state *state, - YYLTYPE loc, ir_variable *var) -{ - unsigned num_vertices = 0; - - if (state->tcs_output_vertices_specified) { - if (!state->out_qualifier->vertices-> - process_qualifier_constant(state, "vertices", - &num_vertices, false)) { - return; - } - - if (num_vertices > state->Const.MaxPatchVertices) { - _mesa_glsl_error(&loc, state, "vertices (%d) exceeds " - "GL_MAX_PATCH_VERTICES", num_vertices); - return; - } - } - - if (!var->type->is_array() && !var->data.patch) { - _mesa_glsl_error(&loc, state, - "tessellation control shader outputs must be arrays"); - - /* To avoid cascading failures, short circuit the checks below. */ - return; - } - - if (var->data.patch) - return; - - validate_layout_qualifier_vertex_count(state, loc, var, num_vertices, - &state->tcs_output_size, - "tessellation control shader output"); -} - -/** - * Do additional processing necessary for tessellation control/evaluation shader - * input declarations. This covers both interface block arrays and bare input - * variables. - */ -static void -handle_tess_shader_input_decl(struct _mesa_glsl_parse_state *state, - YYLTYPE loc, ir_variable *var) -{ - if (!var->type->is_array() && !var->data.patch) { - _mesa_glsl_error(&loc, state, - "per-vertex tessellation shader inputs must be arrays"); - /* Avoid cascading failures. */ - return; - } - - if (var->data.patch) - return; - - /* The ARB_tessellation_shader spec says: - * - * "Declaring an array size is optional. If no size is specified, it - * will be taken from the implementation-dependent maximum patch size - * (gl_MaxPatchVertices). If a size is specified, it must match the - * maximum patch size; otherwise, a compile or link error will occur." - * - * This text appears twice, once for TCS inputs, and again for TES inputs. - */ - if (var->type->is_unsized_array()) { - var->type = glsl_type::get_array_instance(var->type->fields.array, - state->Const.MaxPatchVertices); - } else if (var->type->length != state->Const.MaxPatchVertices) { - _mesa_glsl_error(&loc, state, - "per-vertex tessellation shader input arrays must be " - "sized to gl_MaxPatchVertices (%d).", - state->Const.MaxPatchVertices); - } -} - - -/** - * Do additional processing necessary for geometry shader input declarations - * (this covers both interface blocks arrays and bare input variables). - */ -static void -handle_geometry_shader_input_decl(struct _mesa_glsl_parse_state *state, - YYLTYPE loc, ir_variable *var) -{ - unsigned num_vertices = 0; - - if (state->gs_input_prim_type_specified) { - num_vertices = vertices_per_prim(state->in_qualifier->prim_type); - } - - /* Geometry shader input variables must be arrays. Caller should have - * reported an error for this. - */ - if (!var->type->is_array()) { - assert(state->error); - - /* To avoid cascading failures, short circuit the checks below. */ - return; - } - - validate_layout_qualifier_vertex_count(state, loc, var, num_vertices, - &state->gs_input_size, - "geometry shader input"); -} - -static void -validate_identifier(const char *identifier, YYLTYPE loc, - struct _mesa_glsl_parse_state *state) -{ - /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec, - * - * "Identifiers starting with "gl_" are reserved for use by - * OpenGL, and may not be declared in a shader as either a - * variable or a function." - */ - if (is_gl_identifier(identifier)) { - _mesa_glsl_error(&loc, state, - "identifier `%s' uses reserved `gl_' prefix", - identifier); - } else if (strstr(identifier, "__")) { - /* From page 14 (page 20 of the PDF) of the GLSL 1.10 - * spec: - * - * "In addition, all identifiers containing two - * consecutive underscores (__) are reserved as - * possible future keywords." - * - * The intention is that names containing __ are reserved for internal - * use by the implementation, and names prefixed with GL_ are reserved - * for use by Khronos. Names simply containing __ are dangerous to use, - * but should be allowed. - * - * A future version of the GLSL specification will clarify this. - */ - _mesa_glsl_warning(&loc, state, - "identifier `%s' uses reserved `__' string", - identifier); - } -} - -ir_rvalue * -ast_declarator_list::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - const struct glsl_type *decl_type; - const char *type_name = NULL; - ir_rvalue *result = NULL; - YYLTYPE loc = this->get_location(); - - /* From page 46 (page 52 of the PDF) of the GLSL 1.50 spec: - * - * "To ensure that a particular output variable is invariant, it is - * necessary to use the invariant qualifier. It can either be used to - * qualify a previously declared variable as being invariant - * - * invariant gl_Position; // make existing gl_Position be invariant" - * - * In these cases the parser will set the 'invariant' flag in the declarator - * list, and the type will be NULL. - */ - if (this->invariant) { - assert(this->type == NULL); - - if (state->current_function != NULL) { - _mesa_glsl_error(& loc, state, - "all uses of `invariant' keyword must be at global " - "scope"); - } - - foreach_list_typed (ast_declaration, decl, link, &this->declarations) { - assert(decl->array_specifier == NULL); - assert(decl->initializer == NULL); - - ir_variable *const earlier = - state->symbols->get_variable(decl->identifier); - if (earlier == NULL) { - _mesa_glsl_error(& loc, state, - "undeclared variable `%s' cannot be marked " - "invariant", decl->identifier); - } else if (!is_allowed_invariant(earlier, state)) { - _mesa_glsl_error(&loc, state, - "`%s' cannot be marked invariant; interfaces between " - "shader stages only.", decl->identifier); - } else if (earlier->data.used) { - _mesa_glsl_error(& loc, state, - "variable `%s' may not be redeclared " - "`invariant' after being used", - earlier->name); - } else { - earlier->data.explicit_invariant = true; - earlier->data.invariant = true; - } - } - - /* Invariant redeclarations do not have r-values. - */ - return NULL; - } - - if (this->precise) { - assert(this->type == NULL); - - foreach_list_typed (ast_declaration, decl, link, &this->declarations) { - assert(decl->array_specifier == NULL); - assert(decl->initializer == NULL); - - ir_variable *const earlier = - state->symbols->get_variable(decl->identifier); - if (earlier == NULL) { - _mesa_glsl_error(& loc, state, - "undeclared variable `%s' cannot be marked " - "precise", decl->identifier); - } else if (state->current_function != NULL && - !state->symbols->name_declared_this_scope(decl->identifier)) { - /* Note: we have to check if we're in a function, since - * builtins are treated as having come from another scope. - */ - _mesa_glsl_error(& loc, state, - "variable `%s' from an outer scope may not be " - "redeclared `precise' in this scope", - earlier->name); - } else if (earlier->data.used) { - _mesa_glsl_error(& loc, state, - "variable `%s' may not be redeclared " - "`precise' after being used", - earlier->name); - } else { - earlier->data.precise = true; - } - } - - /* Precise redeclarations do not have r-values either. */ - return NULL; - } - - assert(this->type != NULL); - assert(!this->invariant); - assert(!this->precise); - - /* GL_EXT_shader_image_load_store base type uses GLSL_TYPE_VOID as a special value to - * indicate that it needs to be updated later (see glsl_parser.yy). - * This is done here, based on the layout qualifier and the type of the image var - */ - if (this->type->qualifier.flags.q.explicit_image_format && - this->type->specifier->type->is_image() && - this->type->qualifier.image_base_type == GLSL_TYPE_VOID) { - /* "The ARB_shader_image_load_store says: - * If both extensions are enabled in the shading language, the "size*" layout - * qualifiers are treated as format qualifiers, and are mapped to equivalent - * format qualifiers in the table below, according to the type of image - * variable. - * image* iimage* uimage* - * -------- -------- -------- - * size1x8 n/a r8i r8ui - * size1x16 r16f r16i r16ui - * size1x32 r32f r32i r32ui - * size2x32 rg32f rg32i rg32ui - * size4x32 rgba32f rgba32i rgba32ui" - */ - if (strncmp(this->type->specifier->type_name, "image", strlen("image")) == 0) { - switch (this->type->qualifier.image_format) { - case PIPE_FORMAT_R8_SINT: - /* The GL_EXT_shader_image_load_store spec says: - * A layout of "size1x8" is illegal for image variables associated - * with floating-point data types. - */ - _mesa_glsl_error(& loc, state, - "size1x8 is illegal for image variables " - "with floating-point data types."); - return NULL; - case PIPE_FORMAT_R16_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R16_FLOAT; - break; - case PIPE_FORMAT_R32_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R32_FLOAT; - break; - case PIPE_FORMAT_R32G32_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R32G32_FLOAT; - break; - case PIPE_FORMAT_R32G32B32A32_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_FLOAT; - break; - default: - unreachable("Unknown image format"); - } - this->type->qualifier.image_base_type = GLSL_TYPE_FLOAT; - } else if (strncmp(this->type->specifier->type_name, "uimage", strlen("uimage")) == 0) { - switch (this->type->qualifier.image_format) { - case PIPE_FORMAT_R8_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R8_UINT; - break; - case PIPE_FORMAT_R16_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R16_UINT; - break; - case PIPE_FORMAT_R32_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R32_UINT; - break; - case PIPE_FORMAT_R32G32_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R32G32_UINT; - break; - case PIPE_FORMAT_R32G32B32A32_SINT: - this->type->qualifier.image_format = PIPE_FORMAT_R32G32B32A32_UINT; - break; - default: - unreachable("Unknown image format"); - } - this->type->qualifier.image_base_type = GLSL_TYPE_UINT; - } else if (strncmp(this->type->specifier->type_name, "iimage", strlen("iimage")) == 0) { - this->type->qualifier.image_base_type = GLSL_TYPE_INT; - } else { - assert(false); - } - } - - /* The type specifier may contain a structure definition. Process that - * before any of the variable declarations. - */ - (void) this->type->specifier->hir(instructions, state); - - decl_type = this->type->glsl_type(& type_name, state); - - /* Section 4.3.7 "Buffer Variables" of the GLSL 4.30 spec: - * "Buffer variables may only be declared inside interface blocks - * (section 4.3.9 “Interface Blocks”), which are then referred to as - * shader storage blocks. It is a compile-time error to declare buffer - * variables at global scope (outside a block)." - */ - if (type->qualifier.flags.q.buffer && !decl_type->is_interface()) { - _mesa_glsl_error(&loc, state, - "buffer variables cannot be declared outside " - "interface blocks"); - } - - /* An offset-qualified atomic counter declaration sets the default - * offset for the next declaration within the same atomic counter - * buffer. - */ - if (decl_type && decl_type->contains_atomic()) { - if (type->qualifier.flags.q.explicit_binding && - type->qualifier.flags.q.explicit_offset) { - unsigned qual_binding; - unsigned qual_offset; - if (process_qualifier_constant(state, &loc, "binding", - type->qualifier.binding, - &qual_binding) - && process_qualifier_constant(state, &loc, "offset", - type->qualifier.offset, - &qual_offset)) { - if (qual_binding < ARRAY_SIZE(state->atomic_counter_offsets)) - state->atomic_counter_offsets[qual_binding] = qual_offset; - } - } - - ast_type_qualifier allowed_atomic_qual_mask; - allowed_atomic_qual_mask.flags.i = 0; - allowed_atomic_qual_mask.flags.q.explicit_binding = 1; - allowed_atomic_qual_mask.flags.q.explicit_offset = 1; - allowed_atomic_qual_mask.flags.q.uniform = 1; - - type->qualifier.validate_flags(&loc, state, allowed_atomic_qual_mask, - "invalid layout qualifier for", - "atomic_uint"); - } - - if (this->declarations.is_empty()) { - /* If there is no structure involved in the program text, there are two - * possible scenarios: - * - * - The program text contained something like 'vec4;'. This is an - * empty declaration. It is valid but weird. Emit a warning. - * - * - The program text contained something like 'S;' and 'S' is not the - * name of a known structure type. This is both invalid and weird. - * Emit an error. - * - * - The program text contained something like 'mediump float;' - * when the programmer probably meant 'precision mediump - * float;' Emit a warning with a description of what they - * probably meant to do. - * - * Note that if decl_type is NULL and there is a structure involved, - * there must have been some sort of error with the structure. In this - * case we assume that an error was already generated on this line of - * code for the structure. There is no need to generate an additional, - * confusing error. - */ - assert(this->type->specifier->structure == NULL || decl_type != NULL - || state->error); - - if (decl_type == NULL) { - _mesa_glsl_error(&loc, state, - "invalid type `%s' in empty declaration", - type_name); - } else { - if (decl_type->is_array()) { - /* From Section 13.22 (Array Declarations) of the GLSL ES 3.2 - * spec: - * - * "... any declaration that leaves the size undefined is - * disallowed as this would add complexity and there are no - * use-cases." - */ - if (state->es_shader && decl_type->is_unsized_array()) { - _mesa_glsl_error(&loc, state, "array size must be explicitly " - "or implicitly defined"); - } - - /* From Section 4.12 (Empty Declarations) of the GLSL 4.5 spec: - * - * "The combinations of types and qualifiers that cause - * compile-time or link-time errors are the same whether or not - * the declaration is empty." - */ - validate_array_dimensions(decl_type, state, &loc); - } - - if (decl_type->is_atomic_uint()) { - /* Empty atomic counter declarations are allowed and useful - * to set the default offset qualifier. - */ - return NULL; - } else if (this->type->qualifier.precision != ast_precision_none) { - if (this->type->specifier->structure != NULL) { - _mesa_glsl_error(&loc, state, - "precision qualifiers can't be applied " - "to structures"); - } else { - static const char *const precision_names[] = { - "highp", - "highp", - "mediump", - "lowp" - }; - - _mesa_glsl_warning(&loc, state, - "empty declaration with precision " - "qualifier, to set the default precision, " - "use `precision %s %s;'", - precision_names[this->type-> - qualifier.precision], - type_name); - } - } else if (this->type->specifier->structure == NULL) { - _mesa_glsl_warning(&loc, state, "empty declaration"); - } - } - } - - foreach_list_typed (ast_declaration, decl, link, &this->declarations) { - const struct glsl_type *var_type; - ir_variable *var; - const char *identifier = decl->identifier; - /* FINISHME: Emit a warning if a variable declaration shadows a - * FINISHME: declaration at a higher scope. - */ - - if ((decl_type == NULL) || decl_type->is_void()) { - if (type_name != NULL) { - _mesa_glsl_error(& loc, state, - "invalid type `%s' in declaration of `%s'", - type_name, decl->identifier); - } else { - _mesa_glsl_error(& loc, state, - "invalid type in declaration of `%s'", - decl->identifier); - } - continue; - } - - if (this->type->qualifier.is_subroutine_decl()) { - const glsl_type *t; - const char *name; - - t = state->symbols->get_type(this->type->specifier->type_name); - if (!t) - _mesa_glsl_error(& loc, state, - "invalid type in declaration of `%s'", - decl->identifier); - name = ralloc_asprintf(ctx, "%s_%s", _mesa_shader_stage_to_subroutine_prefix(state->stage), decl->identifier); - - identifier = name; - - } - var_type = process_array_type(&loc, decl_type, decl->array_specifier, - state); - - var = new(ctx) ir_variable(var_type, identifier, ir_var_auto); - - /* The 'varying in' and 'varying out' qualifiers can only be used with - * ARB_geometry_shader4 and EXT_geometry_shader4, which we don't support - * yet. - */ - if (this->type->qualifier.flags.q.varying) { - if (this->type->qualifier.flags.q.in) { - _mesa_glsl_error(& loc, state, - "`varying in' qualifier in declaration of " - "`%s' only valid for geometry shaders using " - "ARB_geometry_shader4 or EXT_geometry_shader4", - decl->identifier); - } else if (this->type->qualifier.flags.q.out) { - _mesa_glsl_error(& loc, state, - "`varying out' qualifier in declaration of " - "`%s' only valid for geometry shaders using " - "ARB_geometry_shader4 or EXT_geometry_shader4", - decl->identifier); - } - } - - /* From page 22 (page 28 of the PDF) of the GLSL 1.10 specification; - * - * "Global variables can only use the qualifiers const, - * attribute, uniform, or varying. Only one may be - * specified. - * - * Local variables can only use the qualifier const." - * - * This is relaxed in GLSL 1.30 and GLSL ES 3.00. It is also relaxed by - * any extension that adds the 'layout' keyword. - */ - if (!state->is_version(130, 300) - && !state->has_explicit_attrib_location() - && !state->has_separate_shader_objects() - && !state->ARB_fragment_coord_conventions_enable) { - /* GL_EXT_gpu_shader4 only allows "varying out" on fragment shader - * outputs. (the varying flag is not set by the parser) - */ - if (this->type->qualifier.flags.q.out && - (!state->EXT_gpu_shader4_enable || - state->stage != MESA_SHADER_FRAGMENT)) { - _mesa_glsl_error(& loc, state, - "`out' qualifier in declaration of `%s' " - "only valid for function parameters in %s", - decl->identifier, state->get_version_string()); - } - if (this->type->qualifier.flags.q.in) { - _mesa_glsl_error(& loc, state, - "`in' qualifier in declaration of `%s' " - "only valid for function parameters in %s", - decl->identifier, state->get_version_string()); - } - /* FINISHME: Test for other invalid qualifiers. */ - } - - apply_type_qualifier_to_variable(& this->type->qualifier, var, state, - & loc, false); - apply_layout_qualifier_to_variable(&this->type->qualifier, var, state, - &loc); - - if ((state->zero_init & (1u << var->data.mode)) && - (var->type->is_numeric() || var->type->is_boolean())) { - const ir_constant_data data = { { 0 } }; - var->data.has_initializer = true; - var->data.is_implicit_initializer = true; - var->constant_initializer = new(var) ir_constant(var->type, &data); - } - - if (this->type->qualifier.flags.q.invariant) { - if (!is_allowed_invariant(var, state)) { - _mesa_glsl_error(&loc, state, - "`%s' cannot be marked invariant; interfaces between " - "shader stages only", var->name); - } - } - - if (state->current_function != NULL) { - const char *mode = NULL; - const char *extra = ""; - - /* There is no need to check for 'inout' here because the parser will - * only allow that in function parameter lists. - */ - if (this->type->qualifier.flags.q.attribute) { - mode = "attribute"; - } else if (this->type->qualifier.is_subroutine_decl()) { - mode = "subroutine uniform"; - } else if (this->type->qualifier.flags.q.uniform) { - mode = "uniform"; - } else if (this->type->qualifier.flags.q.varying) { - mode = "varying"; - } else if (this->type->qualifier.flags.q.in) { - mode = "in"; - extra = " or in function parameter list"; - } else if (this->type->qualifier.flags.q.out) { - mode = "out"; - extra = " or in function parameter list"; - } - - if (mode) { - _mesa_glsl_error(& loc, state, - "%s variable `%s' must be declared at " - "global scope%s", - mode, var->name, extra); - } - } else if (var->data.mode == ir_var_shader_in) { - var->data.read_only = true; - - if (state->stage == MESA_SHADER_VERTEX) { - /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec: - * - * "Vertex shader inputs can only be float, floating-point - * vectors, matrices, signed and unsigned integers and integer - * vectors. Vertex shader inputs can also form arrays of these - * types, but not structures." - * - * From page 31 (page 27 of the PDF) of the GLSL 1.30 spec: - * - * "Vertex shader inputs can only be float, floating-point - * vectors, matrices, signed and unsigned integers and integer - * vectors. They cannot be arrays or structures." - * - * From page 23 (page 29 of the PDF) of the GLSL 1.20 spec: - * - * "The attribute qualifier can be used only with float, - * floating-point vectors, and matrices. Attribute variables - * cannot be declared as arrays or structures." - * - * From page 33 (page 39 of the PDF) of the GLSL ES 3.00 spec: - * - * "Vertex shader inputs can only be float, floating-point - * vectors, matrices, signed and unsigned integers and integer - * vectors. Vertex shader inputs cannot be arrays or - * structures." - * - * From section 4.3.4 of the ARB_bindless_texture spec: - * - * "(modify third paragraph of the section to allow sampler and - * image types) ... Vertex shader inputs can only be float, - * single-precision floating-point scalars, single-precision - * floating-point vectors, matrices, signed and unsigned - * integers and integer vectors, sampler and image types." - */ - const glsl_type *check_type = var->type->without_array(); - - bool error = false; - switch (check_type->base_type) { - case GLSL_TYPE_FLOAT: - break; - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - break; - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - error = !state->is_version(120, 300) && !state->EXT_gpu_shader4_enable; - break; - case GLSL_TYPE_DOUBLE: - error = !state->is_version(410, 0) && !state->ARB_vertex_attrib_64bit_enable; - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - error = !state->has_bindless(); - break; - default: - error = true; - } - - if (error) { - _mesa_glsl_error(& loc, state, - "vertex shader input / attribute cannot have " - "type %s`%s'", - var->type->is_array() ? "array of " : "", - check_type->name); - } else if (var->type->is_array() && - !state->check_version(150, 0, &loc, - "vertex shader input / attribute " - "cannot have array type")) { - } - } else if (state->stage == MESA_SHADER_GEOMETRY) { - /* From section 4.3.4 (Inputs) of the GLSL 1.50 spec: - * - * Geometry shader input variables get the per-vertex values - * written out by vertex shader output variables of the same - * names. Since a geometry shader operates on a set of - * vertices, each input varying variable (or input block, see - * interface blocks below) needs to be declared as an array. - */ - if (!var->type->is_array()) { - _mesa_glsl_error(&loc, state, - "geometry shader inputs must be arrays"); - } - - handle_geometry_shader_input_decl(state, loc, var); - } else if (state->stage == MESA_SHADER_FRAGMENT) { - /* From section 4.3.4 (Input Variables) of the GLSL ES 3.10 spec: - * - * It is a compile-time error to declare a fragment shader - * input with, or that contains, any of the following types: - * - * * A boolean type - * * An opaque type - * * An array of arrays - * * An array of structures - * * A structure containing an array - * * A structure containing a structure - */ - if (state->es_shader) { - const glsl_type *check_type = var->type->without_array(); - if (check_type->is_boolean() || - check_type->contains_opaque()) { - _mesa_glsl_error(&loc, state, - "fragment shader input cannot have type %s", - check_type->name); - } - if (var->type->is_array() && - var->type->fields.array->is_array()) { - _mesa_glsl_error(&loc, state, - "%s shader output " - "cannot have an array of arrays", - _mesa_shader_stage_to_string(state->stage)); - } - if (var->type->is_array() && - var->type->fields.array->is_struct()) { - _mesa_glsl_error(&loc, state, - "fragment shader input " - "cannot have an array of structs"); - } - if (var->type->is_struct()) { - for (unsigned i = 0; i < var->type->length; i++) { - if (var->type->fields.structure[i].type->is_array() || - var->type->fields.structure[i].type->is_struct()) - _mesa_glsl_error(&loc, state, - "fragment shader input cannot have " - "a struct that contains an " - "array or struct"); - } - } - } - } else if (state->stage == MESA_SHADER_TESS_CTRL || - state->stage == MESA_SHADER_TESS_EVAL) { - handle_tess_shader_input_decl(state, loc, var); - } - } else if (var->data.mode == ir_var_shader_out) { - const glsl_type *check_type = var->type->without_array(); - - /* From section 4.3.6 (Output variables) of the GLSL 4.40 spec: - * - * It is a compile-time error to declare a fragment shader output - * that contains any of the following: - * - * * A Boolean type (bool, bvec2 ...) - * * A double-precision scalar or vector (double, dvec2 ...) - * * An opaque type - * * Any matrix type - * * A structure - */ - if (state->stage == MESA_SHADER_FRAGMENT) { - if (check_type->is_struct() || check_type->is_matrix()) - _mesa_glsl_error(&loc, state, - "fragment shader output " - "cannot have struct or matrix type"); - switch (check_type->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - break; - default: - _mesa_glsl_error(&loc, state, - "fragment shader output cannot have " - "type %s", check_type->name); - } - } - - /* From section 4.3.6 (Output Variables) of the GLSL ES 3.10 spec: - * - * It is a compile-time error to declare a vertex shader output - * with, or that contains, any of the following types: - * - * * A boolean type - * * An opaque type - * * An array of arrays - * * An array of structures - * * A structure containing an array - * * A structure containing a structure - * - * It is a compile-time error to declare a fragment shader output - * with, or that contains, any of the following types: - * - * * A boolean type - * * An opaque type - * * A matrix - * * A structure - * * An array of array - * - * ES 3.20 updates this to apply to tessellation and geometry shaders - * as well. Because there are per-vertex arrays in the new stages, - * it strikes the "array of..." rules and replaces them with these: - * - * * For per-vertex-arrayed variables (applies to tessellation - * control, tessellation evaluation and geometry shaders): - * - * * Per-vertex-arrayed arrays of arrays - * * Per-vertex-arrayed arrays of structures - * - * * For non-per-vertex-arrayed variables: - * - * * An array of arrays - * * An array of structures - * - * which basically says to unwrap the per-vertex aspect and apply - * the old rules. - */ - if (state->es_shader) { - if (var->type->is_array() && - var->type->fields.array->is_array()) { - _mesa_glsl_error(&loc, state, - "%s shader output " - "cannot have an array of arrays", - _mesa_shader_stage_to_string(state->stage)); - } - if (state->stage <= MESA_SHADER_GEOMETRY) { - const glsl_type *type = var->type; - - if (state->stage == MESA_SHADER_TESS_CTRL && - !var->data.patch && var->type->is_array()) { - type = var->type->fields.array; - } - - if (type->is_array() && type->fields.array->is_struct()) { - _mesa_glsl_error(&loc, state, - "%s shader output cannot have " - "an array of structs", - _mesa_shader_stage_to_string(state->stage)); - } - if (type->is_struct()) { - for (unsigned i = 0; i < type->length; i++) { - if (type->fields.structure[i].type->is_array() || - type->fields.structure[i].type->is_struct()) - _mesa_glsl_error(&loc, state, - "%s shader output cannot have a " - "struct that contains an " - "array or struct", - _mesa_shader_stage_to_string(state->stage)); - } - } - } - } - - if (state->stage == MESA_SHADER_TESS_CTRL) { - handle_tess_ctrl_shader_output_decl(state, loc, var); - } - } else if (var->type->contains_subroutine()) { - /* declare subroutine uniforms as hidden */ - var->data.how_declared = ir_var_hidden; - } - - /* From section 4.3.4 of the GLSL 4.00 spec: - * "Input variables may not be declared using the patch in qualifier - * in tessellation control or geometry shaders." - * - * From section 4.3.6 of the GLSL 4.00 spec: - * "It is an error to use patch out in a vertex, tessellation - * evaluation, or geometry shader." - * - * This doesn't explicitly forbid using them in a fragment shader, but - * that's probably just an oversight. - */ - if (state->stage != MESA_SHADER_TESS_EVAL - && this->type->qualifier.flags.q.patch - && this->type->qualifier.flags.q.in) { - - _mesa_glsl_error(&loc, state, "'patch in' can only be used in a " - "tessellation evaluation shader"); - } - - if (state->stage != MESA_SHADER_TESS_CTRL - && this->type->qualifier.flags.q.patch - && this->type->qualifier.flags.q.out) { - - _mesa_glsl_error(&loc, state, "'patch out' can only be used in a " - "tessellation control shader"); - } - - /* Precision qualifiers exists only in GLSL versions 1.00 and >= 1.30. - */ - if (this->type->qualifier.precision != ast_precision_none) { - state->check_precision_qualifiers_allowed(&loc); - } - - if (this->type->qualifier.precision != ast_precision_none && - !precision_qualifier_allowed(var->type)) { - _mesa_glsl_error(&loc, state, - "precision qualifiers apply only to floating point" - ", integer and opaque types"); - } - - /* From section 4.1.7 of the GLSL 4.40 spec: - * - * "[Opaque types] can only be declared as function - * parameters or uniform-qualified variables." - * - * From section 4.1.7 of the ARB_bindless_texture spec: - * - * "Samplers may be declared as shader inputs and outputs, as uniform - * variables, as temporary variables, and as function parameters." - * - * From section 4.1.X of the ARB_bindless_texture spec: - * - * "Images may be declared as shader inputs and outputs, as uniform - * variables, as temporary variables, and as function parameters." - */ - if (!this->type->qualifier.flags.q.uniform && - (var_type->contains_atomic() || - (!state->has_bindless() && var_type->contains_opaque()))) { - _mesa_glsl_error(&loc, state, - "%s variables must be declared uniform", - state->has_bindless() ? "atomic" : "opaque"); - } - - /* Process the initializer and add its instructions to a temporary - * list. This list will be added to the instruction stream (below) after - * the declaration is added. This is done because in some cases (such as - * redeclarations) the declaration may not actually be added to the - * instruction stream. - */ - exec_list initializer_instructions; - - /* Examine var name here since var may get deleted in the next call */ - bool var_is_gl_id = is_gl_identifier(var->name); - - bool is_redeclaration; - var = get_variable_being_redeclared(&var, decl->get_location(), state, - false /* allow_all_redeclarations */, - &is_redeclaration); - if (is_redeclaration) { - if (var_is_gl_id && - var->data.how_declared == ir_var_declared_in_block) { - _mesa_glsl_error(&loc, state, - "`%s' has already been redeclared using " - "gl_PerVertex", var->name); - } - var->data.how_declared = ir_var_declared_normally; - } - - if (decl->initializer != NULL) { - result = process_initializer(var, - decl, this->type, - &initializer_instructions, state); - } else { - validate_array_dimensions(var_type, state, &loc); - } - - /* From page 23 (page 29 of the PDF) of the GLSL 1.10 spec: - * - * "It is an error to write to a const variable outside of - * its declaration, so they must be initialized when - * declared." - */ - if (this->type->qualifier.flags.q.constant && decl->initializer == NULL) { - _mesa_glsl_error(& loc, state, - "const declaration of `%s' must be initialized", - decl->identifier); - } - - if (state->es_shader) { - const glsl_type *const t = var->type; - - /* Skip the unsized array check for TCS/TES/GS inputs & TCS outputs. - * - * The GL_OES_tessellation_shader spec says about inputs: - * - * "Declaring an array size is optional. If no size is specified, - * it will be taken from the implementation-dependent maximum - * patch size (gl_MaxPatchVertices)." - * - * and about TCS outputs: - * - * "If no size is specified, it will be taken from output patch - * size declared in the shader." - * - * The GL_OES_geometry_shader spec says: - * - * "All geometry shader input unsized array declarations will be - * sized by an earlier input primitive layout qualifier, when - * present, as per the following table." - */ - const bool implicitly_sized = - (var->data.mode == ir_var_shader_in && - state->stage >= MESA_SHADER_TESS_CTRL && - state->stage <= MESA_SHADER_GEOMETRY) || - (var->data.mode == ir_var_shader_out && - state->stage == MESA_SHADER_TESS_CTRL); - - if (t->is_unsized_array() && !implicitly_sized) - /* Section 10.17 of the GLSL ES 1.00 specification states that - * unsized array declarations have been removed from the language. - * Arrays that are sized using an initializer are still explicitly - * sized. However, GLSL ES 1.00 does not allow array - * initializers. That is only allowed in GLSL ES 3.00. - * - * Section 4.1.9 (Arrays) of the GLSL ES 3.00 spec says: - * - * "An array type can also be formed without specifying a size - * if the definition includes an initializer: - * - * float x[] = float[2] (1.0, 2.0); // declares an array of size 2 - * float y[] = float[] (1.0, 2.0, 3.0); // declares an array of size 3 - * - * float a[5]; - * float b[] = a;" - */ - _mesa_glsl_error(& loc, state, - "unsized array declarations are not allowed in " - "GLSL ES"); - } - - /* Section 4.4.6.1 Atomic Counter Layout Qualifiers of the GLSL 4.60 spec: - * - * "It is a compile-time error to declare an unsized array of - * atomic_uint" - */ - if (var->type->is_unsized_array() && - var->type->without_array()->base_type == GLSL_TYPE_ATOMIC_UINT) { - _mesa_glsl_error(& loc, state, - "Unsized array of atomic_uint is not allowed"); - } - - /* If the declaration is not a redeclaration, there are a few additional - * semantic checks that must be applied. In addition, variable that was - * created for the declaration should be added to the IR stream. - */ - if (!is_redeclaration) { - validate_identifier(decl->identifier, loc, state); - - /* Add the variable to the symbol table. Note that the initializer's - * IR was already processed earlier (though it hasn't been emitted - * yet), without the variable in scope. - * - * This differs from most C-like languages, but it follows the GLSL - * specification. From page 28 (page 34 of the PDF) of the GLSL 1.50 - * spec: - * - * "Within a declaration, the scope of a name starts immediately - * after the initializer if present or immediately after the name - * being declared if not." - */ - if (!state->symbols->add_variable(var)) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, "name `%s' already taken in the " - "current scope", decl->identifier); - continue; - } - - /* Push the variable declaration to the top. It means that all the - * variable declarations will appear in a funny last-to-first order, - * but otherwise we run into trouble if a function is prototyped, a - * global var is decled, then the function is defined with usage of - * the global var. See glslparsertest's CorrectModule.frag. - */ - instructions->push_head(var); - } - - instructions->append_list(&initializer_instructions); - } - - - /* Generally, variable declarations do not have r-values. However, - * one is used for the declaration in - * - * while (bool b = some_condition()) { - * ... - * } - * - * so we return the rvalue from the last seen declaration here. - */ - return result; -} - - -ir_rvalue * -ast_parameter_declarator::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - const struct glsl_type *type; - const char *name = NULL; - YYLTYPE loc = this->get_location(); - - type = this->type->glsl_type(& name, state); - - if (type == NULL) { - if (name != NULL) { - _mesa_glsl_error(& loc, state, - "invalid type `%s' in declaration of `%s'", - name, this->identifier); - } else { - _mesa_glsl_error(& loc, state, - "invalid type in declaration of `%s'", - this->identifier); - } - - type = glsl_type::error_type; - } - - /* From page 62 (page 68 of the PDF) of the GLSL 1.50 spec: - * - * "Functions that accept no input arguments need not use void in the - * argument list because prototypes (or definitions) are required and - * therefore there is no ambiguity when an empty argument list "( )" is - * declared. The idiom "(void)" as a parameter list is provided for - * convenience." - * - * Placing this check here prevents a void parameter being set up - * for a function, which avoids tripping up checks for main taking - * parameters and lookups of an unnamed symbol. - */ - if (type->is_void()) { - if (this->identifier != NULL) - _mesa_glsl_error(& loc, state, - "named parameter cannot have type `void'"); - - is_void = true; - return NULL; - } - - if (formal_parameter && (this->identifier == NULL)) { - _mesa_glsl_error(& loc, state, "formal parameter lacks a name"); - return NULL; - } - - /* This only handles "vec4 foo[..]". The earlier specifier->glsl_type(...) - * call already handled the "vec4[..] foo" case. - */ - type = process_array_type(&loc, type, this->array_specifier, state); - - if (!type->is_error() && type->is_unsized_array()) { - _mesa_glsl_error(&loc, state, "arrays passed as parameters must have " - "a declared size"); - type = glsl_type::error_type; - } - - is_void = false; - ir_variable *var = new(ctx) - ir_variable(type, this->identifier, ir_var_function_in); - - /* Apply any specified qualifiers to the parameter declaration. Note that - * for function parameters the default mode is 'in'. - */ - apply_type_qualifier_to_variable(& this->type->qualifier, var, state, & loc, - true); - - if (((1u << var->data.mode) & state->zero_init) && - (var->type->is_numeric() || var->type->is_boolean())) { - const ir_constant_data data = { { 0 } }; - var->data.has_initializer = true; - var->data.is_implicit_initializer = true; - var->constant_initializer = new(var) ir_constant(var->type, &data); - } - - /* From section 4.1.7 of the GLSL 4.40 spec: - * - * "Opaque variables cannot be treated as l-values; hence cannot - * be used as out or inout function parameters, nor can they be - * assigned into." - * - * From section 4.1.7 of the ARB_bindless_texture spec: - * - * "Samplers can be used as l-values, so can be assigned into and used - * as "out" and "inout" function parameters." - * - * From section 4.1.X of the ARB_bindless_texture spec: - * - * "Images can be used as l-values, so can be assigned into and used as - * "out" and "inout" function parameters." - */ - if ((var->data.mode == ir_var_function_inout || var->data.mode == ir_var_function_out) - && (type->contains_atomic() || - (!state->has_bindless() && type->contains_opaque()))) { - _mesa_glsl_error(&loc, state, "out and inout parameters cannot " - "contain %s variables", - state->has_bindless() ? "atomic" : "opaque"); - type = glsl_type::error_type; - } - - /* From page 39 (page 45 of the PDF) of the GLSL 1.10 spec: - * - * "When calling a function, expressions that do not evaluate to - * l-values cannot be passed to parameters declared as out or inout." - * - * From page 32 (page 38 of the PDF) of the GLSL 1.10 spec: - * - * "Other binary or unary expressions, non-dereferenced arrays, - * function names, swizzles with repeated fields, and constants - * cannot be l-values." - * - * So for GLSL 1.10, passing an array as an out or inout parameter is not - * allowed. This restriction is removed in GLSL 1.20, and in GLSL ES. - */ - if ((var->data.mode == ir_var_function_inout || var->data.mode == ir_var_function_out) - && type->is_array() - && !state->check_version(120, 100, &loc, - "arrays cannot be out or inout parameters")) { - type = glsl_type::error_type; - } - - instructions->push_tail(var); - - /* Parameter declarations do not have r-values. - */ - return NULL; -} - - -void -ast_parameter_declarator::parameters_to_hir(exec_list *ast_parameters, - bool formal, - exec_list *ir_parameters, - _mesa_glsl_parse_state *state) -{ - ast_parameter_declarator *void_param = NULL; - unsigned count = 0; - - foreach_list_typed (ast_parameter_declarator, param, link, ast_parameters) { - param->formal_parameter = formal; - param->hir(ir_parameters, state); - - if (param->is_void) - void_param = param; - - count++; - } - - if ((void_param != NULL) && (count > 1)) { - YYLTYPE loc = void_param->get_location(); - - _mesa_glsl_error(& loc, state, - "`void' parameter must be only parameter"); - } -} - - -void -emit_function(_mesa_glsl_parse_state *state, ir_function *f) -{ - /* IR invariants disallow function declarations or definitions - * nested within other function definitions. But there is no - * requirement about the relative order of function declarations - * and definitions with respect to one another. So simply insert - * the new ir_function block at the end of the toplevel instruction - * list. - */ - state->toplevel_ir->push_tail(f); -} - - -ir_rvalue * -ast_function::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - ir_function *f = NULL; - ir_function_signature *sig = NULL; - exec_list hir_parameters; - YYLTYPE loc = this->get_location(); - - const char *const name = identifier; - - /* New functions are always added to the top-level IR instruction stream, - * so this instruction list pointer is ignored. See also emit_function - * (called below). - */ - (void) instructions; - - /* From page 21 (page 27 of the PDF) of the GLSL 1.20 spec, - * - * "Function declarations (prototypes) cannot occur inside of functions; - * they must be at global scope, or for the built-in functions, outside - * the global scope." - * - * From page 27 (page 33 of the PDF) of the GLSL ES 1.00.16 spec, - * - * "User defined functions may only be defined within the global scope." - * - * Note that this language does not appear in GLSL 1.10. - */ - if ((state->current_function != NULL) && - state->is_version(120, 100)) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, - "declaration of function `%s' not allowed within " - "function body", name); - } - - validate_identifier(name, this->get_location(), state); - - /* Convert the list of function parameters to HIR now so that they can be - * used below to compare this function's signature with previously seen - * signatures for functions with the same name. - */ - ast_parameter_declarator::parameters_to_hir(& this->parameters, - is_definition, - & hir_parameters, state); - - const char *return_type_name; - const glsl_type *return_type = - this->return_type->glsl_type(& return_type_name, state); - - if (!return_type) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, - "function `%s' has undeclared return type `%s'", - name, return_type_name); - return_type = glsl_type::error_type; - } - - /* ARB_shader_subroutine states: - * "Subroutine declarations cannot be prototyped. It is an error to prepend - * subroutine(...) to a function declaration." - */ - if (this->return_type->qualifier.subroutine_list && !is_definition) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, - "function declaration `%s' cannot have subroutine prepended", - name); - } - - /* From page 56 (page 62 of the PDF) of the GLSL 1.30 spec: - * "No qualifier is allowed on the return type of a function." - */ - if (this->return_type->has_qualifiers(state)) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(& loc, state, - "function `%s' return type has qualifiers", name); - } - - /* Section 6.1 (Function Definitions) of the GLSL 1.20 spec says: - * - * "Arrays are allowed as arguments and as the return type. In both - * cases, the array must be explicitly sized." - */ - if (return_type->is_unsized_array()) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(& loc, state, - "function `%s' return type array must be explicitly " - "sized", name); - } - - /* From Section 6.1 (Function Definitions) of the GLSL 1.00 spec: - * - * "Arrays are allowed as arguments, but not as the return type. [...] - * The return type can also be a structure if the structure does not - * contain an array." - */ - if (state->language_version == 100 && return_type->contains_array()) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(& loc, state, - "function `%s' return type contains an array", name); - } - - /* From section 4.1.7 of the GLSL 4.40 spec: - * - * "[Opaque types] can only be declared as function parameters - * or uniform-qualified variables." - * - * The ARB_bindless_texture spec doesn't clearly state this, but as it says - * "Replace Section 4.1.7 (Samplers), p. 25" and, "Replace Section 4.1.X, - * (Images)", this should be allowed. - */ - if (return_type->contains_atomic() || - (!state->has_bindless() && return_type->contains_opaque())) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, - "function `%s' return type can't contain an %s type", - name, state->has_bindless() ? "atomic" : "opaque"); - } - - /**/ - if (return_type->is_subroutine()) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, - "function `%s' return type can't be a subroutine type", - name); - } - - /* Get the precision for the return type */ - unsigned return_precision; - - if (state->es_shader) { - YYLTYPE loc = this->get_location(); - return_precision = - select_gles_precision(this->return_type->qualifier.precision, - return_type, - state, - &loc); - } else { - return_precision = GLSL_PRECISION_NONE; - } - - /* Create an ir_function if one doesn't already exist. */ - f = state->symbols->get_function(name); - if (f == NULL) { - f = new(ctx) ir_function(name); - if (!this->return_type->qualifier.is_subroutine_decl()) { - if (!state->symbols->add_function(f)) { - /* This function name shadows a non-function use of the same name. */ - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, "function name `%s' conflicts with " - "non-function", name); - return NULL; - } - } - emit_function(state, f); - } - - /* From GLSL ES 3.0 spec, chapter 6.1 "Function Definitions", page 71: - * - * "A shader cannot redefine or overload built-in functions." - * - * While in GLSL ES 1.0 specification, chapter 8 "Built-in Functions": - * - * "User code can overload the built-in functions but cannot redefine - * them." - */ - if (state->es_shader) { - /* Local shader has no exact candidates; check the built-ins. */ - if (state->language_version >= 300 && - _mesa_glsl_has_builtin_function(state, name)) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(& loc, state, - "A shader cannot redefine or overload built-in " - "function `%s' in GLSL ES 3.00", name); - return NULL; - } - - if (state->language_version == 100) { - ir_function_signature *sig = - _mesa_glsl_find_builtin_function(state, name, &hir_parameters); - if (sig && sig->is_builtin()) { - _mesa_glsl_error(& loc, state, - "A shader cannot redefine built-in " - "function `%s' in GLSL ES 1.00", name); - } - } - } - - /* Verify that this function's signature either doesn't match a previously - * seen signature for a function with the same name, or, if a match is found, - * that the previously seen signature does not have an associated definition. - */ - if (state->es_shader || f->has_user_signature()) { - sig = f->exact_matching_signature(state, &hir_parameters); - if (sig != NULL) { - const char *badvar = sig->qualifiers_match(&hir_parameters); - if (badvar != NULL) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(&loc, state, "function `%s' parameter `%s' " - "qualifiers don't match prototype", name, badvar); - } - - if (sig->return_type != return_type) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(&loc, state, "function `%s' return type doesn't " - "match prototype", name); - } - - if (sig->return_precision != return_precision) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(&loc, state, "function `%s' return type precision " - "doesn't match prototype", name); - } - - if (sig->is_defined) { - if (is_definition) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(& loc, state, "function `%s' redefined", name); - } else { - /* We just encountered a prototype that exactly matches a - * function that's already been defined. This is redundant, - * and we should ignore it. - */ - return NULL; - } - } else if (state->language_version == 100 && !is_definition) { - /* From the GLSL 1.00 spec, section 4.2.7: - * - * "A particular variable, structure or function declaration - * may occur at most once within a scope with the exception - * that a single function prototype plus the corresponding - * function definition are allowed." - */ - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, "function `%s' redeclared", name); - } - } - } - - /* Verify the return type of main() */ - if (strcmp(name, "main") == 0) { - if (! return_type->is_void()) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, "main() must return void"); - } - - if (!hir_parameters.is_empty()) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, "main() must not take any parameters"); - } - } - - /* Finish storing the information about this new function in its signature. - */ - if (sig == NULL) { - sig = new(ctx) ir_function_signature(return_type); - sig->return_precision = return_precision; - f->add_signature(sig); - } - - sig->replace_parameters(&hir_parameters); - signature = sig; - - if (this->return_type->qualifier.subroutine_list) { - int idx; - - if (this->return_type->qualifier.flags.q.explicit_index) { - unsigned qual_index; - if (process_qualifier_constant(state, &loc, "index", - this->return_type->qualifier.index, - &qual_index)) { - if (!state->has_explicit_uniform_location()) { - _mesa_glsl_error(&loc, state, "subroutine index requires " - "GL_ARB_explicit_uniform_location or " - "GLSL 4.30"); - } else if (qual_index >= MAX_SUBROUTINES) { - _mesa_glsl_error(&loc, state, - "invalid subroutine index (%d) index must " - "be a number between 0 and " - "GL_MAX_SUBROUTINES - 1 (%d)", qual_index, - MAX_SUBROUTINES - 1); - } else { - f->subroutine_index = qual_index; - } - } - } - - f->num_subroutine_types = this->return_type->qualifier.subroutine_list->declarations.length(); - f->subroutine_types = ralloc_array(state, const struct glsl_type *, - f->num_subroutine_types); - idx = 0; - foreach_list_typed(ast_declaration, decl, link, &this->return_type->qualifier.subroutine_list->declarations) { - const struct glsl_type *type; - /* the subroutine type must be already declared */ - type = state->symbols->get_type(decl->identifier); - if (!type) { - _mesa_glsl_error(& loc, state, "unknown type '%s' in subroutine function definition", decl->identifier); - } - - for (int i = 0; i < state->num_subroutine_types; i++) { - ir_function *fn = state->subroutine_types[i]; - ir_function_signature *tsig = NULL; - - if (strcmp(fn->name, decl->identifier)) - continue; - - tsig = fn->matching_signature(state, &sig->parameters, - false); - if (!tsig) { - _mesa_glsl_error(& loc, state, "subroutine type mismatch '%s' - signatures do not match\n", decl->identifier); - } else { - if (tsig->return_type != sig->return_type) { - _mesa_glsl_error(& loc, state, "subroutine type mismatch '%s' - return types do not match\n", decl->identifier); - } - } - } - f->subroutine_types[idx++] = type; - } - state->subroutines = (ir_function **)reralloc(state, state->subroutines, - ir_function *, - state->num_subroutines + 1); - state->subroutines[state->num_subroutines] = f; - state->num_subroutines++; - - } - - if (this->return_type->qualifier.is_subroutine_decl()) { - if (!state->symbols->add_type(this->identifier, glsl_type::get_subroutine_instance(this->identifier))) { - _mesa_glsl_error(& loc, state, "type '%s' previously defined", this->identifier); - return NULL; - } - state->subroutine_types = (ir_function **)reralloc(state, state->subroutine_types, - ir_function *, - state->num_subroutine_types + 1); - state->subroutine_types[state->num_subroutine_types] = f; - state->num_subroutine_types++; - - f->is_subroutine = true; - } - - /* Function declarations (prototypes) do not have r-values. - */ - return NULL; -} - - -ir_rvalue * -ast_function_definition::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - prototype->is_definition = true; - prototype->hir(instructions, state); - - ir_function_signature *signature = prototype->signature; - if (signature == NULL) - return NULL; - - assert(state->current_function == NULL); - state->current_function = signature; - state->found_return = false; - state->found_begin_interlock = false; - state->found_end_interlock = false; - - /* Duplicate parameters declared in the prototype as concrete variables. - * Add these to the symbol table. - */ - state->symbols->push_scope(); - foreach_in_list(ir_variable, var, &signature->parameters) { - assert(var->as_variable() != NULL); - - /* The only way a parameter would "exist" is if two parameters have - * the same name. - */ - if (state->symbols->name_declared_this_scope(var->name)) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, "parameter `%s' redeclared", var->name); - } else { - state->symbols->add_variable(var); - } - } - - /* Convert the body of the function to HIR. */ - this->body->hir(&signature->body, state); - signature->is_defined = true; - - state->symbols->pop_scope(); - - assert(state->current_function == signature); - state->current_function = NULL; - - if (!signature->return_type->is_void() && !state->found_return) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(& loc, state, "function `%s' has non-void return type " - "%s, but no return statement", - signature->function_name(), - signature->return_type->name); - } - - /* Function definitions do not have r-values. - */ - return NULL; -} - - -ir_rvalue * -ast_jump_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - switch (mode) { - case ast_return: { - ir_return *inst; - assert(state->current_function); - - if (opt_return_value) { - ir_rvalue *ret = opt_return_value->hir(instructions, state); - - /* The value of the return type can be NULL if the shader says - * 'return foo();' and foo() is a function that returns void. - * - * NOTE: The GLSL spec doesn't say that this is an error. The type - * of the return value is void. If the return type of the function is - * also void, then this should compile without error. Seriously. - */ - const glsl_type *const ret_type = - (ret == NULL) ? glsl_type::void_type : ret->type; - - /* Implicit conversions are not allowed for return values prior to - * ARB_shading_language_420pack. - */ - if (state->current_function->return_type != ret_type) { - YYLTYPE loc = this->get_location(); - - if (state->has_420pack()) { - if (!apply_implicit_conversion(state->current_function->return_type, - ret, state) - || (ret->type != state->current_function->return_type)) { - _mesa_glsl_error(& loc, state, - "could not implicitly convert return value " - "to %s, in function `%s'", - state->current_function->return_type->name, - state->current_function->function_name()); - } - } else { - _mesa_glsl_error(& loc, state, - "`return' with wrong type %s, in function `%s' " - "returning %s", - ret_type->name, - state->current_function->function_name(), - state->current_function->return_type->name); - } - } else if (state->current_function->return_type->base_type == - GLSL_TYPE_VOID) { - YYLTYPE loc = this->get_location(); - - /* The ARB_shading_language_420pack, GLSL ES 3.0, and GLSL 4.20 - * specs add a clarification: - * - * "A void function can only use return without a return argument, even if - * the return argument has void type. Return statements only accept values: - * - * void func1() { } - * void func2() { return func1(); } // illegal return statement" - */ - _mesa_glsl_error(& loc, state, - "void functions can only use `return' without a " - "return argument"); - } - - inst = new(ctx) ir_return(ret); - } else { - if (state->current_function->return_type->base_type != - GLSL_TYPE_VOID) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, - "`return' with no value, in function %s returning " - "non-void", - state->current_function->function_name()); - } - inst = new(ctx) ir_return; - } - - state->found_return = true; - instructions->push_tail(inst); - break; - } - - case ast_discard: - if (state->stage != MESA_SHADER_FRAGMENT) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, - "`discard' may only appear in a fragment shader"); - } - instructions->push_tail(new(ctx) ir_discard); - break; - - case ast_break: - case ast_continue: - if (mode == ast_continue && - state->loop_nesting_ast == NULL) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, "continue may only appear in a loop"); - } else if (mode == ast_break && - state->loop_nesting_ast == NULL && - state->switch_state.switch_nesting_ast == NULL) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, - "break may only appear in a loop or a switch"); - } else { - /* For a loop, inline the for loop expression again, since we don't - * know where near the end of the loop body the normal copy of it is - * going to be placed. Same goes for the condition for a do-while - * loop. - */ - if (state->loop_nesting_ast != NULL && - mode == ast_continue && !state->switch_state.is_switch_innermost) { - if (state->loop_nesting_ast->rest_expression) { - clone_ir_list(ctx, instructions, - &state->loop_nesting_ast->rest_instructions); - } - if (state->loop_nesting_ast->mode == - ast_iteration_statement::ast_do_while) { - state->loop_nesting_ast->condition_to_hir(instructions, state); - } - } - - if (state->switch_state.is_switch_innermost && - mode == ast_continue) { - /* Set 'continue_inside' to true. */ - ir_rvalue *const true_val = new (ctx) ir_constant(true); - ir_dereference_variable *deref_continue_inside_var = - new(ctx) ir_dereference_variable(state->switch_state.continue_inside); - instructions->push_tail(new(ctx) ir_assignment(deref_continue_inside_var, - true_val)); - - /* Break out from the switch, continue for the loop will - * be called right after switch. */ - ir_loop_jump *const jump = - new(ctx) ir_loop_jump(ir_loop_jump::jump_break); - instructions->push_tail(jump); - - } else if (state->switch_state.is_switch_innermost && - mode == ast_break) { - /* Force break out of switch by inserting a break. */ - ir_loop_jump *const jump = - new(ctx) ir_loop_jump(ir_loop_jump::jump_break); - instructions->push_tail(jump); - } else { - ir_loop_jump *const jump = - new(ctx) ir_loop_jump((mode == ast_break) - ? ir_loop_jump::jump_break - : ir_loop_jump::jump_continue); - instructions->push_tail(jump); - } - } - - break; - } - - /* Jump instructions do not have r-values. - */ - return NULL; -} - - -ir_rvalue * -ast_demote_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - if (state->stage != MESA_SHADER_FRAGMENT) { - YYLTYPE loc = this->get_location(); - - _mesa_glsl_error(& loc, state, - "`demote' may only appear in a fragment shader"); - } - - instructions->push_tail(new(ctx) ir_demote); - - return NULL; -} - - -ir_rvalue * -ast_selection_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - ir_rvalue *const condition = this->condition->hir(instructions, state); - - /* From page 66 (page 72 of the PDF) of the GLSL 1.50 spec: - * - * "Any expression whose type evaluates to a Boolean can be used as the - * conditional expression bool-expression. Vector types are not accepted - * as the expression to if." - * - * The checks are separated so that higher quality diagnostics can be - * generated for cases where both rules are violated. - */ - if (!condition->type->is_boolean() || !condition->type->is_scalar()) { - YYLTYPE loc = this->condition->get_location(); - - _mesa_glsl_error(& loc, state, "if-statement condition must be scalar " - "boolean"); - } - - ir_if *const stmt = new(ctx) ir_if(condition); - - if (then_statement != NULL) { - state->symbols->push_scope(); - then_statement->hir(& stmt->then_instructions, state); - state->symbols->pop_scope(); - } - - if (else_statement != NULL) { - state->symbols->push_scope(); - else_statement->hir(& stmt->else_instructions, state); - state->symbols->pop_scope(); - } - - instructions->push_tail(stmt); - - /* if-statements do not have r-values. - */ - return NULL; -} - - -struct case_label { - /** Value of the case label. */ - unsigned value; - - /** Does this label occur after the default? */ - bool after_default; - - /** - * AST for the case label. - * - * This is only used to generate error messages for duplicate labels. - */ - ast_expression *ast; -}; - -/* Used for detection of duplicate case values, compare - * given contents directly. - */ -static bool -compare_case_value(const void *a, const void *b) -{ - return ((struct case_label *) a)->value == ((struct case_label *) b)->value; -} - - -/* Used for detection of duplicate case values, just - * returns key contents as is. - */ -static unsigned -key_contents(const void *key) -{ - return ((struct case_label *) key)->value; -} - -void -ast_switch_statement::eval_test_expression(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - if (test_val == NULL) - test_val = this->test_expression->hir(instructions, state); -} - -ir_rvalue * -ast_switch_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - this->eval_test_expression(instructions, state); - - /* From page 66 (page 55 of the PDF) of the GLSL 1.50 spec: - * - * "The type of init-expression in a switch statement must be a - * scalar integer." - */ - if (!test_val->type->is_scalar() || - !test_val->type->is_integer_32()) { - YYLTYPE loc = this->test_expression->get_location(); - - _mesa_glsl_error(& loc, - state, - "switch-statement expression must be scalar " - "integer"); - return NULL; - } - - /* Track the switch-statement nesting in a stack-like manner. - */ - struct glsl_switch_state saved = state->switch_state; - - state->switch_state.is_switch_innermost = true; - state->switch_state.switch_nesting_ast = this; - state->switch_state.labels_ht = - _mesa_hash_table_create(NULL, key_contents, - compare_case_value); - state->switch_state.previous_default = NULL; - - /* Initalize is_fallthru state to false. - */ - ir_rvalue *const is_fallthru_val = new (ctx) ir_constant(false); - state->switch_state.is_fallthru_var = - new(ctx) ir_variable(glsl_type::bool_type, - "switch_is_fallthru_tmp", - ir_var_temporary); - instructions->push_tail(state->switch_state.is_fallthru_var); - - ir_dereference_variable *deref_is_fallthru_var = - new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var); - instructions->push_tail(new(ctx) ir_assignment(deref_is_fallthru_var, - is_fallthru_val)); - - /* Initialize continue_inside state to false. - */ - state->switch_state.continue_inside = - new(ctx) ir_variable(glsl_type::bool_type, - "continue_inside_tmp", - ir_var_temporary); - instructions->push_tail(state->switch_state.continue_inside); - - ir_rvalue *const false_val = new (ctx) ir_constant(false); - ir_dereference_variable *deref_continue_inside_var = - new(ctx) ir_dereference_variable(state->switch_state.continue_inside); - instructions->push_tail(new(ctx) ir_assignment(deref_continue_inside_var, - false_val)); - - state->switch_state.run_default = - new(ctx) ir_variable(glsl_type::bool_type, - "run_default_tmp", - ir_var_temporary); - instructions->push_tail(state->switch_state.run_default); - - /* Loop around the switch is used for flow control. */ - ir_loop * loop = new(ctx) ir_loop(); - instructions->push_tail(loop); - - /* Cache test expression. - */ - test_to_hir(&loop->body_instructions, state); - - /* Emit code for body of switch stmt. - */ - body->hir(&loop->body_instructions, state); - - /* Insert a break at the end to exit loop. */ - ir_loop_jump *jump = new(ctx) ir_loop_jump(ir_loop_jump::jump_break); - loop->body_instructions.push_tail(jump); - - /* If we are inside loop, check if continue got called inside switch. */ - if (state->loop_nesting_ast != NULL) { - ir_dereference_variable *deref_continue_inside = - new(ctx) ir_dereference_variable(state->switch_state.continue_inside); - ir_if *irif = new(ctx) ir_if(deref_continue_inside); - ir_loop_jump *jump = new(ctx) ir_loop_jump(ir_loop_jump::jump_continue); - - if (state->loop_nesting_ast != NULL) { - if (state->loop_nesting_ast->rest_expression) { - clone_ir_list(ctx, &irif->then_instructions, - &state->loop_nesting_ast->rest_instructions); - } - if (state->loop_nesting_ast->mode == - ast_iteration_statement::ast_do_while) { - state->loop_nesting_ast->condition_to_hir(&irif->then_instructions, state); - } - } - irif->then_instructions.push_tail(jump); - instructions->push_tail(irif); - } - - _mesa_hash_table_destroy(state->switch_state.labels_ht, NULL); - - state->switch_state = saved; - - /* Switch statements do not have r-values. */ - return NULL; -} - - -void -ast_switch_statement::test_to_hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - /* set to true to avoid a duplicate "use of uninitialized variable" warning - * on the switch test case. The first one would be already raised when - * getting the test_expression at ast_switch_statement::hir - */ - test_expression->set_is_lhs(true); - /* Cache value of test expression. */ - this->eval_test_expression(instructions, state); - - state->switch_state.test_var = new(ctx) ir_variable(test_val->type, - "switch_test_tmp", - ir_var_temporary); - ir_dereference_variable *deref_test_var = - new(ctx) ir_dereference_variable(state->switch_state.test_var); - - instructions->push_tail(state->switch_state.test_var); - instructions->push_tail(new(ctx) ir_assignment(deref_test_var, test_val)); -} - - -ir_rvalue * -ast_switch_body::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - if (stmts != NULL) { - state->symbols->push_scope(); - stmts->hir(instructions, state); - state->symbols->pop_scope(); - } - - /* Switch bodies do not have r-values. */ - return NULL; -} - -ir_rvalue * -ast_case_statement_list::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - exec_list default_case, after_default, tmp; - - foreach_list_typed (ast_case_statement, case_stmt, link, & this->cases) { - case_stmt->hir(&tmp, state); - - /* Default case. */ - if (state->switch_state.previous_default && default_case.is_empty()) { - default_case.append_list(&tmp); - continue; - } - - /* If default case found, append 'after_default' list. */ - if (!default_case.is_empty()) - after_default.append_list(&tmp); - else - instructions->append_list(&tmp); - } - - /* Handle the default case. This is done here because default might not be - * the last case. We need to add checks against following cases first to see - * if default should be chosen or not. - */ - if (!default_case.is_empty()) { - ir_factory body(instructions, state); - - ir_expression *cmp = NULL; - - hash_table_foreach(state->switch_state.labels_ht, entry) { - const struct case_label *const l = (struct case_label *) entry->data; - - /* If the switch init-value is the value of one of the labels that - * occurs after the default case, disable execution of the default - * case. - */ - if (l->after_default) { - ir_constant *const cnst = - state->switch_state.test_var->type->base_type == GLSL_TYPE_UINT - ? body.constant(unsigned(l->value)) - : body.constant(int(l->value)); - - cmp = cmp == NULL - ? equal(cnst, state->switch_state.test_var) - : logic_or(cmp, equal(cnst, state->switch_state.test_var)); - } - } - - if (cmp != NULL) - body.emit(assign(state->switch_state.run_default, logic_not(cmp))); - else - body.emit(assign(state->switch_state.run_default, body.constant(true))); - - /* Append default case and all cases after it. */ - instructions->append_list(&default_case); - instructions->append_list(&after_default); - } - - /* Case statements do not have r-values. */ - return NULL; -} - -ir_rvalue * -ast_case_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - labels->hir(instructions, state); - - /* Guard case statements depending on fallthru state. */ - ir_dereference_variable *const deref_fallthru_guard = - new(state) ir_dereference_variable(state->switch_state.is_fallthru_var); - ir_if *const test_fallthru = new(state) ir_if(deref_fallthru_guard); - - foreach_list_typed (ast_node, stmt, link, & this->stmts) - stmt->hir(& test_fallthru->then_instructions, state); - - instructions->push_tail(test_fallthru); - - /* Case statements do not have r-values. */ - return NULL; -} - - -ir_rvalue * -ast_case_label_list::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - foreach_list_typed (ast_case_label, label, link, & this->labels) - label->hir(instructions, state); - - /* Case labels do not have r-values. */ - return NULL; -} - -ir_rvalue * -ast_case_label::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - ir_factory body(instructions, state); - - ir_variable *const fallthru_var = state->switch_state.is_fallthru_var; - - /* If not default case, ... */ - if (this->test_value != NULL) { - /* Conditionally set fallthru state based on - * comparison of cached test expression value to case label. - */ - ir_rvalue *const label_rval = this->test_value->hir(instructions, state); - ir_constant *label_const = - label_rval->constant_expression_value(body.mem_ctx); - - if (!label_const) { - YYLTYPE loc = this->test_value->get_location(); - - _mesa_glsl_error(& loc, state, - "switch statement case label must be a " - "constant expression"); - - /* Stuff a dummy value in to allow processing to continue. */ - label_const = body.constant(0); - } else { - hash_entry *entry = - _mesa_hash_table_search(state->switch_state.labels_ht, - &label_const->value.u[0]); - - if (entry) { - const struct case_label *const l = - (struct case_label *) entry->data; - const ast_expression *const previous_label = l->ast; - YYLTYPE loc = this->test_value->get_location(); - - _mesa_glsl_error(& loc, state, "duplicate case value"); - - loc = previous_label->get_location(); - _mesa_glsl_error(& loc, state, "this is the previous case label"); - } else { - struct case_label *l = ralloc(state->switch_state.labels_ht, - struct case_label); - - l->value = label_const->value.u[0]; - l->after_default = state->switch_state.previous_default != NULL; - l->ast = this->test_value; - - _mesa_hash_table_insert(state->switch_state.labels_ht, - &label_const->value.u[0], - l); - } - } - - /* Create an r-value version of the ir_constant label here (after we may - * have created a fake one in error cases) that can be passed to - * apply_implicit_conversion below. - */ - ir_rvalue *label = label_const; - - ir_rvalue *deref_test_var = - new(body.mem_ctx) ir_dereference_variable(state->switch_state.test_var); - - /* - * From GLSL 4.40 specification section 6.2 ("Selection"): - * - * "The type of the init-expression value in a switch statement must - * be a scalar int or uint. The type of the constant-expression value - * in a case label also must be a scalar int or uint. When any pair - * of these values is tested for "equal value" and the types do not - * match, an implicit conversion will be done to convert the int to a - * uint (see section 4.1.10 “Implicit Conversions”) before the compare - * is done." - */ - if (label->type != state->switch_state.test_var->type) { - YYLTYPE loc = this->test_value->get_location(); - - const glsl_type *type_a = label->type; - const glsl_type *type_b = state->switch_state.test_var->type; - - /* Check if int->uint implicit conversion is supported. */ - bool integer_conversion_supported = - glsl_type::int_type->can_implicitly_convert_to(glsl_type::uint_type, - state); - - if ((!type_a->is_integer_32() || !type_b->is_integer_32()) || - !integer_conversion_supported) { - _mesa_glsl_error(&loc, state, "type mismatch with switch " - "init-expression and case label (%s != %s)", - type_a->name, type_b->name); - } else { - /* Conversion of the case label. */ - if (type_a->base_type == GLSL_TYPE_INT) { - if (!apply_implicit_conversion(glsl_type::uint_type, - label, state)) - _mesa_glsl_error(&loc, state, "implicit type conversion error"); - } else { - /* Conversion of the init-expression value. */ - if (!apply_implicit_conversion(glsl_type::uint_type, - deref_test_var, state)) - _mesa_glsl_error(&loc, state, "implicit type conversion error"); - } - } - - /* If the implicit conversion was allowed, the types will already be - * the same. If the implicit conversion wasn't allowed, smash the - * type of the label anyway. This will prevent the expression - * constructor (below) from failing an assertion. - */ - label->type = deref_test_var->type; - } - - body.emit(assign(fallthru_var, - logic_or(fallthru_var, equal(label, deref_test_var)))); - } else { /* default case */ - if (state->switch_state.previous_default) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(& loc, state, - "multiple default labels in one switch"); - - loc = state->switch_state.previous_default->get_location(); - _mesa_glsl_error(& loc, state, "this is the first default label"); - } - state->switch_state.previous_default = this; - - /* Set fallthru condition on 'run_default' bool. */ - body.emit(assign(fallthru_var, - logic_or(fallthru_var, - state->switch_state.run_default))); - } - - /* Case statements do not have r-values. */ - return NULL; -} - -void -ast_iteration_statement::condition_to_hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - if (condition != NULL) { - ir_rvalue *const cond = - condition->hir(instructions, state); - - if ((cond == NULL) - || !cond->type->is_boolean() || !cond->type->is_scalar()) { - YYLTYPE loc = condition->get_location(); - - _mesa_glsl_error(& loc, state, - "loop condition must be scalar boolean"); - } else { - /* As the first code in the loop body, generate a block that looks - * like 'if (!condition) break;' as the loop termination condition. - */ - ir_rvalue *const not_cond = - new(ctx) ir_expression(ir_unop_logic_not, cond); - - ir_if *const if_stmt = new(ctx) ir_if(not_cond); - - ir_jump *const break_stmt = - new(ctx) ir_loop_jump(ir_loop_jump::jump_break); - - if_stmt->then_instructions.push_tail(break_stmt); - instructions->push_tail(if_stmt); - } - } -} - - -ir_rvalue * -ast_iteration_statement::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - - /* For-loops and while-loops start a new scope, but do-while loops do not. - */ - if (mode != ast_do_while) - state->symbols->push_scope(); - - if (init_statement != NULL) - init_statement->hir(instructions, state); - - ir_loop *const stmt = new(ctx) ir_loop(); - instructions->push_tail(stmt); - - /* Track the current loop nesting. */ - ast_iteration_statement *nesting_ast = state->loop_nesting_ast; - - state->loop_nesting_ast = this; - - /* Likewise, indicate that following code is closest to a loop, - * NOT closest to a switch. - */ - bool saved_is_switch_innermost = state->switch_state.is_switch_innermost; - state->switch_state.is_switch_innermost = false; - - if (mode != ast_do_while) - condition_to_hir(&stmt->body_instructions, state); - - if (rest_expression != NULL) - rest_expression->hir(&rest_instructions, state); - - if (body != NULL) { - if (mode == ast_do_while) - state->symbols->push_scope(); - - body->hir(& stmt->body_instructions, state); - - if (mode == ast_do_while) - state->symbols->pop_scope(); - } - - if (rest_expression != NULL) - stmt->body_instructions.append_list(&rest_instructions); - - if (mode == ast_do_while) - condition_to_hir(&stmt->body_instructions, state); - - if (mode != ast_do_while) - state->symbols->pop_scope(); - - /* Restore previous nesting before returning. */ - state->loop_nesting_ast = nesting_ast; - state->switch_state.is_switch_innermost = saved_is_switch_innermost; - - /* Loops do not have r-values. - */ - return NULL; -} - - -/** - * Determine if the given type is valid for establishing a default precision - * qualifier. - * - * From GLSL ES 3.00 section 4.5.4 ("Default Precision Qualifiers"): - * - * "The precision statement - * - * precision precision-qualifier type; - * - * can be used to establish a default precision qualifier. The type field - * can be either int or float or any of the sampler types, and the - * precision-qualifier can be lowp, mediump, or highp." - * - * GLSL ES 1.00 has similar language. GLSL 1.30 doesn't allow precision - * qualifiers on sampler types, but this seems like an oversight (since the - * intention of including these in GLSL 1.30 is to allow compatibility with ES - * shaders). So we allow int, float, and all sampler types regardless of GLSL - * version. - */ -static bool -is_valid_default_precision_type(const struct glsl_type *const type) -{ - if (type == NULL) - return false; - - switch (type->base_type) { - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - /* "int" and "float" are valid, but vectors and matrices are not. */ - return type->vector_elements == 1 && type->matrix_columns == 1; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_ATOMIC_UINT: - return true; - default: - return false; - } -} - - -ir_rvalue * -ast_type_specifier::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - if (this->default_precision == ast_precision_none && this->structure == NULL) - return NULL; - - YYLTYPE loc = this->get_location(); - - /* If this is a precision statement, check that the type to which it is - * applied is either float or int. - * - * From section 4.5.3 of the GLSL 1.30 spec: - * "The precision statement - * precision precision-qualifier type; - * can be used to establish a default precision qualifier. The type - * field can be either int or float [...]. Any other types or - * qualifiers will result in an error. - */ - if (this->default_precision != ast_precision_none) { - if (!state->check_precision_qualifiers_allowed(&loc)) - return NULL; - - if (this->structure != NULL) { - _mesa_glsl_error(&loc, state, - "precision qualifiers do not apply to structures"); - return NULL; - } - - if (this->array_specifier != NULL) { - _mesa_glsl_error(&loc, state, - "default precision statements do not apply to " - "arrays"); - return NULL; - } - - const struct glsl_type *const type = - state->symbols->get_type(this->type_name); - if (!is_valid_default_precision_type(type)) { - _mesa_glsl_error(&loc, state, - "default precision statements apply only to " - "float, int, and opaque types"); - return NULL; - } - - if (state->es_shader) { - /* Section 4.5.3 (Default Precision Qualifiers) of the GLSL ES 1.00 - * spec says: - * - * "Non-precision qualified declarations will use the precision - * qualifier specified in the most recent precision statement - * that is still in scope. The precision statement has the same - * scoping rules as variable declarations. If it is declared - * inside a compound statement, its effect stops at the end of - * the innermost statement it was declared in. Precision - * statements in nested scopes override precision statements in - * outer scopes. Multiple precision statements for the same basic - * type can appear inside the same scope, with later statements - * overriding earlier statements within that scope." - * - * Default precision specifications follow the same scope rules as - * variables. So, we can track the state of the default precision - * qualifiers in the symbol table, and the rules will just work. This - * is a slight abuse of the symbol table, but it has the semantics - * that we want. - */ - state->symbols->add_default_precision_qualifier(this->type_name, - this->default_precision); - } - - /* FINISHME: Translate precision statements into IR. */ - return NULL; - } - - /* _mesa_ast_set_aggregate_type() sets the field so that - * process_record_constructor() can do type-checking on C-style initializer - * expressions of structs, but ast_struct_specifier should only be translated - * to HIR if it is declaring the type of a structure. - * - * The ->is_declaration field is false for initializers of variables - * declared separately from the struct's type definition. - * - * struct S { ... }; (is_declaration = true) - * struct T { ... } t = { ... }; (is_declaration = true) - * S s = { ... }; (is_declaration = false) - */ - if (this->structure != NULL && this->structure->is_declaration) - return this->structure->hir(instructions, state); - - return NULL; -} - - -/** - * Process a structure or interface block tree into an array of structure fields - * - * After parsing, where there are some syntax differnces, structures and - * interface blocks are almost identical. They are similar enough that the - * AST for each can be processed the same way into a set of - * \c glsl_struct_field to describe the members. - * - * If we're processing an interface block, var_mode should be the type of the - * interface block (ir_var_shader_in, ir_var_shader_out, ir_var_uniform or - * ir_var_shader_storage). If we're processing a structure, var_mode should be - * ir_var_auto. - * - * \return - * The number of fields processed. A pointer to the array structure fields is - * stored in \c *fields_ret. - */ -static unsigned -ast_process_struct_or_iface_block_members(exec_list *instructions, - struct _mesa_glsl_parse_state *state, - exec_list *declarations, - glsl_struct_field **fields_ret, - bool is_interface, - enum glsl_matrix_layout matrix_layout, - bool allow_reserved_names, - ir_variable_mode var_mode, - ast_type_qualifier *layout, - unsigned block_stream, - unsigned block_xfb_buffer, - unsigned block_xfb_offset, - unsigned expl_location, - unsigned expl_align) -{ - unsigned decl_count = 0; - unsigned next_offset = 0; - - /* Make an initial pass over the list of fields to determine how - * many there are. Each element in this list is an ast_declarator_list. - * This means that we actually need to count the number of elements in the - * 'declarations' list in each of the elements. - */ - foreach_list_typed (ast_declarator_list, decl_list, link, declarations) { - decl_count += decl_list->declarations.length(); - } - - /* Allocate storage for the fields and process the field - * declarations. As the declarations are processed, try to also convert - * the types to HIR. This ensures that structure definitions embedded in - * other structure definitions or in interface blocks are processed. - */ - glsl_struct_field *const fields = rzalloc_array(state, glsl_struct_field, - decl_count); - - bool first_member = true; - bool first_member_has_explicit_location = false; - - unsigned i = 0; - foreach_list_typed (ast_declarator_list, decl_list, link, declarations) { - const char *type_name; - YYLTYPE loc = decl_list->get_location(); - - decl_list->type->specifier->hir(instructions, state); - - /* Section 4.1.8 (Structures) of the GLSL 1.10 spec says: - * - * "Anonymous structures are not supported; so embedded structures - * must have a declarator. A name given to an embedded struct is - * scoped at the same level as the struct it is embedded in." - * - * The same section of the GLSL 1.20 spec says: - * - * "Anonymous structures are not supported. Embedded structures are - * not supported." - * - * The GLSL ES 1.00 and 3.00 specs have similar langauge. So, we allow - * embedded structures in 1.10 only. - */ - if (state->language_version != 110 && - decl_list->type->specifier->structure != NULL) - _mesa_glsl_error(&loc, state, - "embedded structure declarations are not allowed"); - - const glsl_type *decl_type = - decl_list->type->glsl_type(& type_name, state); - - const struct ast_type_qualifier *const qual = - &decl_list->type->qualifier; - - /* From section 4.3.9 of the GLSL 4.40 spec: - * - * "[In interface blocks] opaque types are not allowed." - * - * It should be impossible for decl_type to be NULL here. Cases that - * might naturally lead to decl_type being NULL, especially for the - * is_interface case, will have resulted in compilation having - * already halted due to a syntax error. - */ - assert(decl_type); - - if (is_interface) { - /* From section 4.3.7 of the ARB_bindless_texture spec: - * - * "(remove the following bullet from the last list on p. 39, - * thereby permitting sampler types in interface blocks; image - * types are also permitted in blocks by this extension)" - * - * * sampler types are not allowed - */ - if (decl_type->contains_atomic() || - (!state->has_bindless() && decl_type->contains_opaque())) { - _mesa_glsl_error(&loc, state, "uniform/buffer in non-default " - "interface block contains %s variable", - state->has_bindless() ? "atomic" : "opaque"); - } - } else { - if (decl_type->contains_atomic()) { - /* From section 4.1.7.3 of the GLSL 4.40 spec: - * - * "Members of structures cannot be declared as atomic counter - * types." - */ - _mesa_glsl_error(&loc, state, "atomic counter in structure"); - } - - if (!state->has_bindless() && decl_type->contains_image()) { - /* FINISHME: Same problem as with atomic counters. - * FINISHME: Request clarification from Khronos and add - * FINISHME: spec quotation here. - */ - _mesa_glsl_error(&loc, state, "image in structure"); - } - } - - if (qual->flags.q.explicit_binding) { - _mesa_glsl_error(&loc, state, - "binding layout qualifier cannot be applied " - "to struct or interface block members"); - } - - if (is_interface) { - if (!first_member) { - if (!layout->flags.q.explicit_location && - ((first_member_has_explicit_location && - !qual->flags.q.explicit_location) || - (!first_member_has_explicit_location && - qual->flags.q.explicit_location))) { - _mesa_glsl_error(&loc, state, - "when block-level location layout qualifier " - "is not supplied either all members must " - "have a location layout qualifier or all " - "members must not have a location layout " - "qualifier"); - } - } else { - first_member = false; - first_member_has_explicit_location = - qual->flags.q.explicit_location; - } - } - - if (qual->flags.q.std140 || - qual->flags.q.std430 || - qual->flags.q.packed || - qual->flags.q.shared) { - _mesa_glsl_error(&loc, state, - "uniform/shader storage block layout qualifiers " - "std140, std430, packed, and shared can only be " - "applied to uniform/shader storage blocks, not " - "members"); - } - - if (qual->flags.q.constant) { - _mesa_glsl_error(&loc, state, - "const storage qualifier cannot be applied " - "to struct or interface block members"); - } - - validate_memory_qualifier_for_type(state, &loc, qual, decl_type); - validate_image_format_qualifier_for_type(state, &loc, qual, decl_type); - - /* From Section 4.4.2.3 (Geometry Outputs) of the GLSL 4.50 spec: - * - * "A block member may be declared with a stream identifier, but - * the specified stream must match the stream associated with the - * containing block." - */ - if (qual->flags.q.explicit_stream) { - unsigned qual_stream; - if (process_qualifier_constant(state, &loc, "stream", - qual->stream, &qual_stream) && - qual_stream != block_stream) { - _mesa_glsl_error(&loc, state, "stream layout qualifier on " - "interface block member does not match " - "the interface block (%u vs %u)", qual_stream, - block_stream); - } - } - - int xfb_buffer; - unsigned explicit_xfb_buffer = 0; - if (qual->flags.q.explicit_xfb_buffer) { - unsigned qual_xfb_buffer; - if (process_qualifier_constant(state, &loc, "xfb_buffer", - qual->xfb_buffer, &qual_xfb_buffer)) { - explicit_xfb_buffer = 1; - if (qual_xfb_buffer != block_xfb_buffer) - _mesa_glsl_error(&loc, state, "xfb_buffer layout qualifier on " - "interface block member does not match " - "the interface block (%u vs %u)", - qual_xfb_buffer, block_xfb_buffer); - } - xfb_buffer = (int) qual_xfb_buffer; - } else { - if (layout) - explicit_xfb_buffer = layout->flags.q.explicit_xfb_buffer; - xfb_buffer = (int) block_xfb_buffer; - } - - int xfb_stride = -1; - if (qual->flags.q.explicit_xfb_stride) { - unsigned qual_xfb_stride; - if (process_qualifier_constant(state, &loc, "xfb_stride", - qual->xfb_stride, &qual_xfb_stride)) { - xfb_stride = (int) qual_xfb_stride; - } - } - - if (qual->flags.q.uniform && qual->has_interpolation()) { - _mesa_glsl_error(&loc, state, - "interpolation qualifiers cannot be used " - "with uniform interface blocks"); - } - - if ((qual->flags.q.uniform || !is_interface) && - qual->has_auxiliary_storage()) { - _mesa_glsl_error(&loc, state, - "auxiliary storage qualifiers cannot be used " - "in uniform blocks or structures."); - } - - if (qual->flags.q.row_major || qual->flags.q.column_major) { - if (!qual->flags.q.uniform && !qual->flags.q.buffer) { - _mesa_glsl_error(&loc, state, - "row_major and column_major can only be " - "applied to interface blocks"); - } else - validate_matrix_layout_for_type(state, &loc, decl_type, NULL); - } - - foreach_list_typed (ast_declaration, decl, link, - &decl_list->declarations) { - YYLTYPE loc = decl->get_location(); - - if (!allow_reserved_names) - validate_identifier(decl->identifier, loc, state); - - const struct glsl_type *field_type = - process_array_type(&loc, decl_type, decl->array_specifier, state); - validate_array_dimensions(field_type, state, &loc); - fields[i].type = field_type; - fields[i].name = decl->identifier; - fields[i].interpolation = - interpret_interpolation_qualifier(qual, field_type, - var_mode, state, &loc); - fields[i].centroid = qual->flags.q.centroid ? 1 : 0; - fields[i].sample = qual->flags.q.sample ? 1 : 0; - fields[i].patch = qual->flags.q.patch ? 1 : 0; - fields[i].offset = -1; - fields[i].explicit_xfb_buffer = explicit_xfb_buffer; - fields[i].xfb_buffer = xfb_buffer; - fields[i].xfb_stride = xfb_stride; - - if (qual->flags.q.explicit_location) { - unsigned qual_location; - if (process_qualifier_constant(state, &loc, "location", - qual->location, &qual_location)) { - fields[i].location = qual_location + - (fields[i].patch ? VARYING_SLOT_PATCH0 : VARYING_SLOT_VAR0); - expl_location = fields[i].location + - fields[i].type->count_attribute_slots(false); - } - } else { - if (layout && layout->flags.q.explicit_location) { - fields[i].location = expl_location; - expl_location += fields[i].type->count_attribute_slots(false); - } else { - fields[i].location = -1; - } - } - - if (qual->flags.q.explicit_component) { - unsigned qual_component; - if (process_qualifier_constant(state, &loc, "component", - qual->component, &qual_component)) { - validate_component_layout_for_type(state, &loc, fields[i].type, - qual_component); - fields[i].component = qual_component; - } - } else { - fields[i].component = -1; - } - - /* Offset can only be used with std430 and std140 layouts an initial - * value of 0 is used for error detection. - */ - unsigned align = 0; - unsigned size = 0; - if (layout) { - bool row_major; - if (qual->flags.q.row_major || - matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - row_major = true; - } else { - row_major = false; - } - - if(layout->flags.q.std140) { - align = field_type->std140_base_alignment(row_major); - size = field_type->std140_size(row_major); - } else if (layout->flags.q.std430) { - align = field_type->std430_base_alignment(row_major); - size = field_type->std430_size(row_major); - } - } - - if (qual->flags.q.explicit_offset) { - unsigned qual_offset; - if (process_qualifier_constant(state, &loc, "offset", - qual->offset, &qual_offset)) { - if (align != 0 && size != 0) { - if (next_offset > qual_offset) - _mesa_glsl_error(&loc, state, "layout qualifier " - "offset overlaps previous member"); - - if (qual_offset % align) { - _mesa_glsl_error(&loc, state, "layout qualifier offset " - "must be a multiple of the base " - "alignment of %s", field_type->name); - } - fields[i].offset = qual_offset; - next_offset = qual_offset + size; - } else { - _mesa_glsl_error(&loc, state, "offset can only be used " - "with std430 and std140 layouts"); - } - } - } - - if (qual->flags.q.explicit_align || expl_align != 0) { - unsigned offset = fields[i].offset != -1 ? fields[i].offset : - next_offset; - if (align == 0 || size == 0) { - _mesa_glsl_error(&loc, state, "align can only be used with " - "std430 and std140 layouts"); - } else if (qual->flags.q.explicit_align) { - unsigned member_align; - if (process_qualifier_constant(state, &loc, "align", - qual->align, &member_align)) { - if (member_align == 0 || - member_align & (member_align - 1)) { - _mesa_glsl_error(&loc, state, "align layout qualifier " - "is not a power of 2"); - } else { - fields[i].offset = glsl_align(offset, member_align); - next_offset = fields[i].offset + size; - } - } - } else { - fields[i].offset = glsl_align(offset, expl_align); - next_offset = fields[i].offset + size; - } - } else if (!qual->flags.q.explicit_offset) { - if (align != 0 && size != 0) - next_offset = glsl_align(next_offset, align) + size; - } - - /* From the ARB_enhanced_layouts spec: - * - * "The given offset applies to the first component of the first - * member of the qualified entity. Then, within the qualified - * entity, subsequent components are each assigned, in order, to - * the next available offset aligned to a multiple of that - * component's size. Aggregate types are flattened down to the - * component level to get this sequence of components." - */ - if (qual->flags.q.explicit_xfb_offset) { - unsigned xfb_offset; - if (process_qualifier_constant(state, &loc, "xfb_offset", - qual->offset, &xfb_offset)) { - fields[i].offset = xfb_offset; - block_xfb_offset = fields[i].offset + - 4 * field_type->component_slots(); - } - } else { - if (layout && layout->flags.q.explicit_xfb_offset) { - unsigned align = field_type->is_64bit() ? 8 : 4; - fields[i].offset = glsl_align(block_xfb_offset, align); - block_xfb_offset += 4 * field_type->component_slots(); - } - } - - /* Propogate row- / column-major information down the fields of the - * structure or interface block. Structures need this data because - * the structure may contain a structure that contains ... a matrix - * that need the proper layout. - */ - if (is_interface && layout && - (layout->flags.q.uniform || layout->flags.q.buffer) && - (field_type->without_array()->is_matrix() - || field_type->without_array()->is_struct())) { - /* If no layout is specified for the field, inherit the layout - * from the block. - */ - fields[i].matrix_layout = matrix_layout; - - if (qual->flags.q.row_major) - fields[i].matrix_layout = GLSL_MATRIX_LAYOUT_ROW_MAJOR; - else if (qual->flags.q.column_major) - fields[i].matrix_layout = GLSL_MATRIX_LAYOUT_COLUMN_MAJOR; - - /* If we're processing an uniform or buffer block, the matrix - * layout must be decided by this point. - */ - assert(fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR - || fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR); - } - - /* Memory qualifiers are allowed on buffer and image variables, while - * the format qualifier is only accepted for images. - */ - if (var_mode == ir_var_shader_storage || - field_type->without_array()->is_image()) { - /* For readonly and writeonly qualifiers the field definition, - * if set, overwrites the layout qualifier. - */ - if (qual->flags.q.read_only || qual->flags.q.write_only) { - fields[i].memory_read_only = qual->flags.q.read_only; - fields[i].memory_write_only = qual->flags.q.write_only; - } else { - fields[i].memory_read_only = - layout ? layout->flags.q.read_only : 0; - fields[i].memory_write_only = - layout ? layout->flags.q.write_only : 0; - } - - /* For other qualifiers, we set the flag if either the layout - * qualifier or the field qualifier are set - */ - fields[i].memory_coherent = qual->flags.q.coherent || - (layout && layout->flags.q.coherent); - fields[i].memory_volatile = qual->flags.q._volatile || - (layout && layout->flags.q._volatile); - fields[i].memory_restrict = qual->flags.q.restrict_flag || - (layout && layout->flags.q.restrict_flag); - - if (field_type->without_array()->is_image()) { - if (qual->flags.q.explicit_image_format) { - if (qual->image_base_type != - field_type->without_array()->sampled_type) { - _mesa_glsl_error(&loc, state, "format qualifier doesn't " - "match the base data type of the image"); - } - - fields[i].image_format = qual->image_format; - } else { - if (!qual->flags.q.write_only) { - _mesa_glsl_error(&loc, state, "image not qualified with " - "`writeonly' must have a format layout " - "qualifier"); - } - - fields[i].image_format = PIPE_FORMAT_NONE; - } - } - } - - /* Precision qualifiers do not hold any meaning in Desktop GLSL */ - if (state->es_shader) { - fields[i].precision = select_gles_precision(qual->precision, - field_type, - state, - &loc); - } else { - fields[i].precision = qual->precision; - } - - i++; - } - } - - assert(i == decl_count); - - *fields_ret = fields; - return decl_count; -} - - -ir_rvalue * -ast_struct_specifier::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - YYLTYPE loc = this->get_location(); - - unsigned expl_location = 0; - if (layout && layout->flags.q.explicit_location) { - if (!process_qualifier_constant(state, &loc, "location", - layout->location, &expl_location)) { - return NULL; - } else { - expl_location = VARYING_SLOT_VAR0 + expl_location; - } - } - - glsl_struct_field *fields; - unsigned decl_count = - ast_process_struct_or_iface_block_members(instructions, - state, - &this->declarations, - &fields, - false, - GLSL_MATRIX_LAYOUT_INHERITED, - false /* allow_reserved_names */, - ir_var_auto, - layout, - 0, /* for interface only */ - 0, /* for interface only */ - 0, /* for interface only */ - expl_location, - 0 /* for interface only */); - - validate_identifier(this->name, loc, state); - - type = glsl_type::get_struct_instance(fields, decl_count, this->name); - - if (!type->is_anonymous() && !state->symbols->add_type(name, type)) { - const glsl_type *match = state->symbols->get_type(name); - /* allow struct matching for desktop GL - older UE4 does this */ - if (match != NULL && state->is_version(130, 0) && match->record_compare(type, true, false)) - _mesa_glsl_warning(& loc, state, "struct `%s' previously defined", name); - else - _mesa_glsl_error(& loc, state, "struct `%s' previously defined", name); - } else { - const glsl_type **s = reralloc(state, state->user_structures, - const glsl_type *, - state->num_user_structures + 1); - if (s != NULL) { - s[state->num_user_structures] = type; - state->user_structures = s; - state->num_user_structures++; - } - } - - /* Structure type definitions do not have r-values. - */ - return NULL; -} - - -/** - * Visitor class which detects whether a given interface block has been used. - */ -class interface_block_usage_visitor : public ir_hierarchical_visitor -{ -public: - interface_block_usage_visitor(ir_variable_mode mode, const glsl_type *block) - : mode(mode), block(block), found(false) - { - } - - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - if (ir->var->data.mode == mode && ir->var->get_interface_type() == block) { - found = true; - return visit_stop; - } - return visit_continue; - } - - bool usage_found() const - { - return this->found; - } - -private: - ir_variable_mode mode; - const glsl_type *block; - bool found; -}; - -static bool -is_unsized_array_last_element(ir_variable *v) -{ - const glsl_type *interface_type = v->get_interface_type(); - int length = interface_type->length; - - assert(v->type->is_unsized_array()); - - /* Check if it is the last element of the interface */ - if (strcmp(interface_type->fields.structure[length-1].name, v->name) == 0) - return true; - return false; -} - -static void -apply_memory_qualifiers(ir_variable *var, glsl_struct_field field) -{ - var->data.memory_read_only = field.memory_read_only; - var->data.memory_write_only = field.memory_write_only; - var->data.memory_coherent = field.memory_coherent; - var->data.memory_volatile = field.memory_volatile; - var->data.memory_restrict = field.memory_restrict; -} - -ir_rvalue * -ast_interface_block::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - YYLTYPE loc = this->get_location(); - - /* Interface blocks must be declared at global scope */ - if (state->current_function != NULL) { - _mesa_glsl_error(&loc, state, - "Interface block `%s' must be declared " - "at global scope", - this->block_name); - } - - /* Validate qualifiers: - * - * - Layout Qualifiers as per the table in Section 4.4 - * ("Layout Qualifiers") of the GLSL 4.50 spec. - * - * - Memory Qualifiers as per Section 4.10 ("Memory Qualifiers") of the - * GLSL 4.50 spec: - * - * "Additionally, memory qualifiers may also be used in the declaration - * of shader storage blocks" - * - * Note the table in Section 4.4 says std430 is allowed on both uniform and - * buffer blocks however Section 4.4.5 (Uniform and Shader Storage Block - * Layout Qualifiers) of the GLSL 4.50 spec says: - * - * "The std430 qualifier is supported only for shader storage blocks; - * using std430 on a uniform block will result in a compile-time error." - */ - ast_type_qualifier allowed_blk_qualifiers; - allowed_blk_qualifiers.flags.i = 0; - if (this->layout.flags.q.buffer || this->layout.flags.q.uniform) { - allowed_blk_qualifiers.flags.q.shared = 1; - allowed_blk_qualifiers.flags.q.packed = 1; - allowed_blk_qualifiers.flags.q.std140 = 1; - allowed_blk_qualifiers.flags.q.row_major = 1; - allowed_blk_qualifiers.flags.q.column_major = 1; - allowed_blk_qualifiers.flags.q.explicit_align = 1; - allowed_blk_qualifiers.flags.q.explicit_binding = 1; - if (this->layout.flags.q.buffer) { - allowed_blk_qualifiers.flags.q.buffer = 1; - allowed_blk_qualifiers.flags.q.std430 = 1; - allowed_blk_qualifiers.flags.q.coherent = 1; - allowed_blk_qualifiers.flags.q._volatile = 1; - allowed_blk_qualifiers.flags.q.restrict_flag = 1; - allowed_blk_qualifiers.flags.q.read_only = 1; - allowed_blk_qualifiers.flags.q.write_only = 1; - } else { - allowed_blk_qualifiers.flags.q.uniform = 1; - } - } else { - /* Interface block */ - assert(this->layout.flags.q.in || this->layout.flags.q.out); - - allowed_blk_qualifiers.flags.q.explicit_location = 1; - if (this->layout.flags.q.out) { - allowed_blk_qualifiers.flags.q.out = 1; - if (state->stage == MESA_SHADER_GEOMETRY || - state->stage == MESA_SHADER_TESS_CTRL || - state->stage == MESA_SHADER_TESS_EVAL || - state->stage == MESA_SHADER_VERTEX ) { - allowed_blk_qualifiers.flags.q.explicit_xfb_offset = 1; - allowed_blk_qualifiers.flags.q.explicit_xfb_buffer = 1; - allowed_blk_qualifiers.flags.q.xfb_buffer = 1; - allowed_blk_qualifiers.flags.q.explicit_xfb_stride = 1; - allowed_blk_qualifiers.flags.q.xfb_stride = 1; - } - if (state->stage == MESA_SHADER_GEOMETRY) { - allowed_blk_qualifiers.flags.q.stream = 1; - allowed_blk_qualifiers.flags.q.explicit_stream = 1; - } - if (state->stage == MESA_SHADER_TESS_CTRL) { - allowed_blk_qualifiers.flags.q.patch = 1; - } - } else { - allowed_blk_qualifiers.flags.q.in = 1; - if (state->stage == MESA_SHADER_TESS_EVAL) { - allowed_blk_qualifiers.flags.q.patch = 1; - } - } - } - - this->layout.validate_flags(&loc, state, allowed_blk_qualifiers, - "invalid qualifier for block", - this->block_name); - - enum glsl_interface_packing packing; - if (this->layout.flags.q.std140) { - packing = GLSL_INTERFACE_PACKING_STD140; - } else if (this->layout.flags.q.packed) { - packing = GLSL_INTERFACE_PACKING_PACKED; - } else if (this->layout.flags.q.std430) { - packing = GLSL_INTERFACE_PACKING_STD430; - } else { - /* The default layout is shared. - */ - packing = GLSL_INTERFACE_PACKING_SHARED; - } - - ir_variable_mode var_mode; - const char *iface_type_name; - if (this->layout.flags.q.in) { - var_mode = ir_var_shader_in; - iface_type_name = "in"; - } else if (this->layout.flags.q.out) { - var_mode = ir_var_shader_out; - iface_type_name = "out"; - } else if (this->layout.flags.q.uniform) { - var_mode = ir_var_uniform; - iface_type_name = "uniform"; - } else if (this->layout.flags.q.buffer) { - var_mode = ir_var_shader_storage; - iface_type_name = "buffer"; - } else { - var_mode = ir_var_auto; - iface_type_name = "UNKNOWN"; - assert(!"interface block layout qualifier not found!"); - } - - enum glsl_matrix_layout matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; - if (this->layout.flags.q.row_major) - matrix_layout = GLSL_MATRIX_LAYOUT_ROW_MAJOR; - else if (this->layout.flags.q.column_major) - matrix_layout = GLSL_MATRIX_LAYOUT_COLUMN_MAJOR; - - bool redeclaring_per_vertex = strcmp(this->block_name, "gl_PerVertex") == 0; - exec_list declared_variables; - glsl_struct_field *fields; - - /* For blocks that accept memory qualifiers (i.e. shader storage), verify - * that we don't have incompatible qualifiers - */ - if (this->layout.flags.q.read_only && this->layout.flags.q.write_only) { - _mesa_glsl_error(&loc, state, - "Interface block sets both readonly and writeonly"); - } - - unsigned qual_stream; - if (!process_qualifier_constant(state, &loc, "stream", this->layout.stream, - &qual_stream) || - !validate_stream_qualifier(&loc, state, qual_stream)) { - /* If the stream qualifier is invalid it doesn't make sense to continue - * on and try to compare stream layouts on member variables against it - * so just return early. - */ - return NULL; - } - - unsigned qual_xfb_buffer = 0; - if (layout.flags.q.xfb_buffer) { - if (!process_qualifier_constant(state, &loc, "xfb_buffer", - layout.xfb_buffer, &qual_xfb_buffer) || - !validate_xfb_buffer_qualifier(&loc, state, qual_xfb_buffer)) { - return NULL; - } - } - - unsigned qual_xfb_offset = 0; - if (layout.flags.q.explicit_xfb_offset) { - if (!process_qualifier_constant(state, &loc, "xfb_offset", - layout.offset, &qual_xfb_offset)) { - return NULL; - } - } - - unsigned qual_xfb_stride = 0; - if (layout.flags.q.explicit_xfb_stride) { - if (!process_qualifier_constant(state, &loc, "xfb_stride", - layout.xfb_stride, &qual_xfb_stride)) { - return NULL; - } - } - - unsigned expl_location = 0; - if (layout.flags.q.explicit_location) { - if (!process_qualifier_constant(state, &loc, "location", - layout.location, &expl_location)) { - return NULL; - } else { - expl_location += this->layout.flags.q.patch ? VARYING_SLOT_PATCH0 - : VARYING_SLOT_VAR0; - } - } - - unsigned expl_align = 0; - if (layout.flags.q.explicit_align) { - if (!process_qualifier_constant(state, &loc, "align", - layout.align, &expl_align)) { - return NULL; - } else { - if (expl_align == 0 || expl_align & (expl_align - 1)) { - _mesa_glsl_error(&loc, state, "align layout qualifier is not a " - "power of 2."); - return NULL; - } - } - } - - unsigned int num_variables = - ast_process_struct_or_iface_block_members(&declared_variables, - state, - &this->declarations, - &fields, - true, - matrix_layout, - redeclaring_per_vertex, - var_mode, - &this->layout, - qual_stream, - qual_xfb_buffer, - qual_xfb_offset, - expl_location, - expl_align); - - if (!redeclaring_per_vertex) { - validate_identifier(this->block_name, loc, state); - - /* From section 4.3.9 ("Interface Blocks") of the GLSL 4.50 spec: - * - * "Block names have no other use within a shader beyond interface - * matching; it is a compile-time error to use a block name at global - * scope for anything other than as a block name." - */ - ir_variable *var = state->symbols->get_variable(this->block_name); - if (var && !var->type->is_interface()) { - _mesa_glsl_error(&loc, state, "Block name `%s' is " - "already used in the scope.", - this->block_name); - } - } - - const glsl_type *earlier_per_vertex = NULL; - if (redeclaring_per_vertex) { - /* Find the previous declaration of gl_PerVertex. If we're redeclaring - * the named interface block gl_in, we can find it by looking at the - * previous declaration of gl_in. Otherwise we can find it by looking - * at the previous decalartion of any of the built-in outputs, - * e.g. gl_Position. - * - * Also check that the instance name and array-ness of the redeclaration - * are correct. - */ - switch (var_mode) { - case ir_var_shader_in: - if (ir_variable *earlier_gl_in = - state->symbols->get_variable("gl_in")) { - earlier_per_vertex = earlier_gl_in->get_interface_type(); - } else { - _mesa_glsl_error(&loc, state, - "redeclaration of gl_PerVertex input not allowed " - "in the %s shader", - _mesa_shader_stage_to_string(state->stage)); - } - if (this->instance_name == NULL || - strcmp(this->instance_name, "gl_in") != 0 || this->array_specifier == NULL || - !this->array_specifier->is_single_dimension()) { - _mesa_glsl_error(&loc, state, - "gl_PerVertex input must be redeclared as " - "gl_in[]"); - } - break; - case ir_var_shader_out: - if (ir_variable *earlier_gl_Position = - state->symbols->get_variable("gl_Position")) { - earlier_per_vertex = earlier_gl_Position->get_interface_type(); - } else if (ir_variable *earlier_gl_out = - state->symbols->get_variable("gl_out")) { - earlier_per_vertex = earlier_gl_out->get_interface_type(); - } else { - _mesa_glsl_error(&loc, state, - "redeclaration of gl_PerVertex output not " - "allowed in the %s shader", - _mesa_shader_stage_to_string(state->stage)); - } - if (state->stage == MESA_SHADER_TESS_CTRL) { - if (this->instance_name == NULL || - strcmp(this->instance_name, "gl_out") != 0 || this->array_specifier == NULL) { - _mesa_glsl_error(&loc, state, - "gl_PerVertex output must be redeclared as " - "gl_out[]"); - } - } else { - if (this->instance_name != NULL) { - _mesa_glsl_error(&loc, state, - "gl_PerVertex output may not be redeclared with " - "an instance name"); - } - } - break; - default: - _mesa_glsl_error(&loc, state, - "gl_PerVertex must be declared as an input or an " - "output"); - break; - } - - if (earlier_per_vertex == NULL) { - /* An error has already been reported. Bail out to avoid null - * dereferences later in this function. - */ - return NULL; - } - - /* Copy locations from the old gl_PerVertex interface block. */ - for (unsigned i = 0; i < num_variables; i++) { - int j = earlier_per_vertex->field_index(fields[i].name); - if (j == -1) { - _mesa_glsl_error(&loc, state, - "redeclaration of gl_PerVertex must be a subset " - "of the built-in members of gl_PerVertex"); - } else { - fields[i].location = - earlier_per_vertex->fields.structure[j].location; - fields[i].offset = - earlier_per_vertex->fields.structure[j].offset; - fields[i].interpolation = - earlier_per_vertex->fields.structure[j].interpolation; - fields[i].centroid = - earlier_per_vertex->fields.structure[j].centroid; - fields[i].sample = - earlier_per_vertex->fields.structure[j].sample; - fields[i].patch = - earlier_per_vertex->fields.structure[j].patch; - fields[i].precision = - earlier_per_vertex->fields.structure[j].precision; - fields[i].explicit_xfb_buffer = - earlier_per_vertex->fields.structure[j].explicit_xfb_buffer; - fields[i].xfb_buffer = - earlier_per_vertex->fields.structure[j].xfb_buffer; - fields[i].xfb_stride = - earlier_per_vertex->fields.structure[j].xfb_stride; - } - } - - /* From section 7.1 ("Built-in Language Variables") of the GLSL 4.10 - * spec: - * - * If a built-in interface block is redeclared, it must appear in - * the shader before any use of any member included in the built-in - * declaration, or a compilation error will result. - * - * This appears to be a clarification to the behaviour established for - * gl_PerVertex by GLSL 1.50, therefore we implement this behaviour - * regardless of GLSL version. - */ - interface_block_usage_visitor v(var_mode, earlier_per_vertex); - v.run(instructions); - if (v.usage_found()) { - _mesa_glsl_error(&loc, state, - "redeclaration of a built-in interface block must " - "appear before any use of any member of the " - "interface block"); - } - } - - const glsl_type *block_type = - glsl_type::get_interface_instance(fields, - num_variables, - packing, - matrix_layout == - GLSL_MATRIX_LAYOUT_ROW_MAJOR, - this->block_name); - - unsigned component_size = block_type->contains_double() ? 8 : 4; - int xfb_offset = - layout.flags.q.explicit_xfb_offset ? (int) qual_xfb_offset : -1; - validate_xfb_offset_qualifier(&loc, state, xfb_offset, block_type, - component_size); - - if (!state->symbols->add_interface(block_type->name, block_type, var_mode)) { - YYLTYPE loc = this->get_location(); - _mesa_glsl_error(&loc, state, "interface block `%s' with type `%s' " - "already taken in the current scope", - this->block_name, iface_type_name); - } - - /* Since interface blocks cannot contain statements, it should be - * impossible for the block to generate any instructions. - */ - assert(declared_variables.is_empty()); - - /* From section 4.3.4 (Inputs) of the GLSL 1.50 spec: - * - * Geometry shader input variables get the per-vertex values written - * out by vertex shader output variables of the same names. Since a - * geometry shader operates on a set of vertices, each input varying - * variable (or input block, see interface blocks below) needs to be - * declared as an array. - */ - if (state->stage == MESA_SHADER_GEOMETRY && this->array_specifier == NULL && - var_mode == ir_var_shader_in) { - _mesa_glsl_error(&loc, state, "geometry shader inputs must be arrays"); - } else if ((state->stage == MESA_SHADER_TESS_CTRL || - state->stage == MESA_SHADER_TESS_EVAL) && - !this->layout.flags.q.patch && - this->array_specifier == NULL && - var_mode == ir_var_shader_in) { - _mesa_glsl_error(&loc, state, "per-vertex tessellation shader inputs must be arrays"); - } else if (state->stage == MESA_SHADER_TESS_CTRL && - !this->layout.flags.q.patch && - this->array_specifier == NULL && - var_mode == ir_var_shader_out) { - _mesa_glsl_error(&loc, state, "tessellation control shader outputs must be arrays"); - } - - - /* Page 39 (page 45 of the PDF) of section 4.3.7 in the GLSL ES 3.00 spec - * says: - * - * "If an instance name (instance-name) is used, then it puts all the - * members inside a scope within its own name space, accessed with the - * field selector ( . ) operator (analogously to structures)." - */ - if (this->instance_name) { - if (redeclaring_per_vertex) { - /* When a built-in in an unnamed interface block is redeclared, - * get_variable_being_redeclared() calls - * check_builtin_array_max_size() to make sure that built-in array - * variables aren't redeclared to illegal sizes. But we're looking - * at a redeclaration of a named built-in interface block. So we - * have to manually call check_builtin_array_max_size() for all parts - * of the interface that are arrays. - */ - for (unsigned i = 0; i < num_variables; i++) { - if (fields[i].type->is_array()) { - const unsigned size = fields[i].type->array_size(); - check_builtin_array_max_size(fields[i].name, size, loc, state); - } - } - } else { - validate_identifier(this->instance_name, loc, state); - } - - ir_variable *var; - - if (this->array_specifier != NULL) { - const glsl_type *block_array_type = - process_array_type(&loc, block_type, this->array_specifier, state); - - /* From Section 4.4.1 (Input Layout Qualifiers) of the GLSL 4.50 spec: - * - * "For some blocks declared as arrays, the location can only be applied - * at the block level: When a block is declared as an array where - * additional locations are needed for each member for each block array - * element, it is a compile-time error to specify locations on the block - * members. That is, when locations would be under specified by applying - * them on block members, they are not allowed on block members. For - * arrayed interfaces (those generally having an extra level of - * arrayness due to interface expansion), the outer array is stripped - * before applying this rule" - * - * From 4.4.1 (Input Layout Qualifiers) and - * 4.4.2 (Output Layout Qualifiers) of GLSL ES 3.20 - * - * "If an input is declared as an array of blocks, excluding - * per-vertex-arrays as required for tessellation, it is an error - * to declare a member of the block with a location qualifier." - * - * "If an output is declared as an array of blocks, excluding - * per-vertex-arrays as required for tessellation, it is an error - * to declare a member of the block with a location qualifier." - */ - if (!redeclaring_per_vertex && - (state->has_enhanced_layouts() || state->has_shader_io_blocks())) { - bool allow_location; - switch (state->stage) - { - case MESA_SHADER_TESS_CTRL: - allow_location = this->array_specifier->is_single_dimension(); - break; - case MESA_SHADER_TESS_EVAL: - case MESA_SHADER_GEOMETRY: - allow_location = (this->array_specifier->is_single_dimension() - && var_mode == ir_var_shader_in); - break; - default: - allow_location = false; - break; - } - - if (!allow_location) { - for (unsigned i = 0; i < num_variables; i++) { - if (fields[i].location != -1) { - _mesa_glsl_error(&loc, state, - "explicit member locations are not allowed in " - "blocks declared as arrays %s shader", - _mesa_shader_stage_to_string(state->stage)); - } - } - } - } - - /* Section 4.3.7 (Interface Blocks) of the GLSL 1.50 spec says: - * - * For uniform blocks declared an array, each individual array - * element corresponds to a separate buffer object backing one - * instance of the block. As the array size indicates the number - * of buffer objects needed, uniform block array declarations - * must specify an array size. - * - * And a few paragraphs later: - * - * Geometry shader input blocks must be declared as arrays and - * follow the array declaration and linking rules for all - * geometry shader inputs. All other input and output block - * arrays must specify an array size. - * - * The same applies to tessellation shaders. - * - * The upshot of this is that the only circumstance where an - * interface array size *doesn't* need to be specified is on a - * geometry shader input, tessellation control shader input, - * tessellation control shader output, and tessellation evaluation - * shader input. - */ - if (block_array_type->is_unsized_array()) { - bool allow_inputs = state->stage == MESA_SHADER_GEOMETRY || - state->stage == MESA_SHADER_TESS_CTRL || - state->stage == MESA_SHADER_TESS_EVAL; - bool allow_outputs = state->stage == MESA_SHADER_TESS_CTRL; - - if (this->layout.flags.q.in) { - if (!allow_inputs) - _mesa_glsl_error(&loc, state, - "unsized input block arrays not allowed in " - "%s shader", - _mesa_shader_stage_to_string(state->stage)); - } else if (this->layout.flags.q.out) { - if (!allow_outputs) - _mesa_glsl_error(&loc, state, - "unsized output block arrays not allowed in " - "%s shader", - _mesa_shader_stage_to_string(state->stage)); - } else { - /* by elimination, this is a uniform block array */ - _mesa_glsl_error(&loc, state, - "unsized uniform block arrays not allowed in " - "%s shader", - _mesa_shader_stage_to_string(state->stage)); - } - } - - /* From section 4.3.9 (Interface Blocks) of the GLSL ES 3.10 spec: - * - * * Arrays of arrays of blocks are not allowed - */ - if (state->es_shader && block_array_type->is_array() && - block_array_type->fields.array->is_array()) { - _mesa_glsl_error(&loc, state, - "arrays of arrays interface blocks are " - "not allowed"); - } - - var = new(state) ir_variable(block_array_type, - this->instance_name, - var_mode); - } else { - var = new(state) ir_variable(block_type, - this->instance_name, - var_mode); - } - - var->data.matrix_layout = matrix_layout == GLSL_MATRIX_LAYOUT_INHERITED - ? GLSL_MATRIX_LAYOUT_COLUMN_MAJOR : matrix_layout; - - if (var_mode == ir_var_shader_in || var_mode == ir_var_uniform) - var->data.read_only = true; - - var->data.patch = this->layout.flags.q.patch; - - if (state->stage == MESA_SHADER_GEOMETRY && var_mode == ir_var_shader_in) - handle_geometry_shader_input_decl(state, loc, var); - else if ((state->stage == MESA_SHADER_TESS_CTRL || - state->stage == MESA_SHADER_TESS_EVAL) && var_mode == ir_var_shader_in) - handle_tess_shader_input_decl(state, loc, var); - else if (state->stage == MESA_SHADER_TESS_CTRL && var_mode == ir_var_shader_out) - handle_tess_ctrl_shader_output_decl(state, loc, var); - - for (unsigned i = 0; i < num_variables; i++) { - if (var->data.mode == ir_var_shader_storage) - apply_memory_qualifiers(var, fields[i]); - } - - if (ir_variable *earlier = - state->symbols->get_variable(this->instance_name)) { - if (!redeclaring_per_vertex) { - _mesa_glsl_error(&loc, state, "`%s' redeclared", - this->instance_name); - } - earlier->data.how_declared = ir_var_declared_normally; - earlier->type = var->type; - earlier->reinit_interface_type(block_type); - delete var; - } else { - if (this->layout.flags.q.explicit_binding) { - apply_explicit_binding(state, &loc, var, var->type, - &this->layout); - } - - var->data.stream = qual_stream; - if (layout.flags.q.explicit_location) { - var->data.location = expl_location; - var->data.explicit_location = true; - } - - state->symbols->add_variable(var); - instructions->push_tail(var); - } - } else { - /* In order to have an array size, the block must also be declared with - * an instance name. - */ - assert(this->array_specifier == NULL); - - for (unsigned i = 0; i < num_variables; i++) { - ir_variable *var = - new(state) ir_variable(fields[i].type, - ralloc_strdup(state, fields[i].name), - var_mode); - var->data.interpolation = fields[i].interpolation; - var->data.centroid = fields[i].centroid; - var->data.sample = fields[i].sample; - var->data.patch = fields[i].patch; - var->data.stream = qual_stream; - var->data.location = fields[i].location; - - if (fields[i].location != -1) - var->data.explicit_location = true; - - var->data.explicit_xfb_buffer = fields[i].explicit_xfb_buffer; - var->data.xfb_buffer = fields[i].xfb_buffer; - - if (fields[i].offset != -1) - var->data.explicit_xfb_offset = true; - var->data.offset = fields[i].offset; - - var->init_interface_type(block_type); - - if (var_mode == ir_var_shader_in || var_mode == ir_var_uniform) - var->data.read_only = true; - - /* Precision qualifiers do not have any meaning in Desktop GLSL */ - if (state->es_shader) { - var->data.precision = - select_gles_precision(fields[i].precision, fields[i].type, - state, &loc); - } - - if (fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_INHERITED) { - var->data.matrix_layout = matrix_layout == GLSL_MATRIX_LAYOUT_INHERITED - ? GLSL_MATRIX_LAYOUT_COLUMN_MAJOR : matrix_layout; - } else { - var->data.matrix_layout = fields[i].matrix_layout; - } - - if (var->data.mode == ir_var_shader_storage) - apply_memory_qualifiers(var, fields[i]); - - /* Examine var name here since var may get deleted in the next call */ - bool var_is_gl_id = is_gl_identifier(var->name); - - if (redeclaring_per_vertex) { - bool is_redeclaration; - var = - get_variable_being_redeclared(&var, loc, state, - true /* allow_all_redeclarations */, - &is_redeclaration); - if (!var_is_gl_id || !is_redeclaration) { - _mesa_glsl_error(&loc, state, - "redeclaration of gl_PerVertex can only " - "include built-in variables"); - } else if (var->data.how_declared == ir_var_declared_normally) { - _mesa_glsl_error(&loc, state, - "`%s' has already been redeclared", - var->name); - } else { - var->data.how_declared = ir_var_declared_in_block; - var->reinit_interface_type(block_type); - } - continue; - } - - if (state->symbols->get_variable(var->name) != NULL) - _mesa_glsl_error(&loc, state, "`%s' redeclared", var->name); - - /* Propagate the "binding" keyword into this UBO/SSBO's fields. - * The UBO declaration itself doesn't get an ir_variable unless it - * has an instance name. This is ugly. - */ - if (this->layout.flags.q.explicit_binding) { - apply_explicit_binding(state, &loc, var, - var->get_interface_type(), &this->layout); - } - - if (var->type->is_unsized_array()) { - if (var->is_in_shader_storage_block() && - is_unsized_array_last_element(var)) { - var->data.from_ssbo_unsized_array = true; - } else { - /* From GLSL ES 3.10 spec, section 4.1.9 "Arrays": - * - * "If an array is declared as the last member of a shader storage - * block and the size is not specified at compile-time, it is - * sized at run-time. In all other cases, arrays are sized only - * at compile-time." - * - * In desktop GLSL it is allowed to have unsized-arrays that are - * not last, as long as we can determine that they are implicitly - * sized. - */ - if (state->es_shader) { - _mesa_glsl_error(&loc, state, "unsized array `%s' " - "definition: only last member of a shader " - "storage block can be defined as unsized " - "array", fields[i].name); - } - } - } - - state->symbols->add_variable(var); - instructions->push_tail(var); - } - - if (redeclaring_per_vertex && block_type != earlier_per_vertex) { - /* From section 7.1 ("Built-in Language Variables") of the GLSL 4.10 spec: - * - * It is also a compilation error ... to redeclare a built-in - * block and then use a member from that built-in block that was - * not included in the redeclaration. - * - * This appears to be a clarification to the behaviour established - * for gl_PerVertex by GLSL 1.50, therefore we implement this - * behaviour regardless of GLSL version. - * - * To prevent the shader from using a member that was not included in - * the redeclaration, we disable any ir_variables that are still - * associated with the old declaration of gl_PerVertex (since we've - * already updated all of the variables contained in the new - * gl_PerVertex to point to it). - * - * As a side effect this will prevent - * validate_intrastage_interface_blocks() from getting confused and - * thinking there are conflicting definitions of gl_PerVertex in the - * shader. - */ - foreach_in_list_safe(ir_instruction, node, instructions) { - ir_variable *const var = node->as_variable(); - if (var != NULL && - var->get_interface_type() == earlier_per_vertex && - var->data.mode == var_mode) { - if (var->data.how_declared == ir_var_declared_normally) { - _mesa_glsl_error(&loc, state, - "redeclaration of gl_PerVertex cannot " - "follow a redeclaration of `%s'", - var->name); - } - state->symbols->disable_variable(var->name); - var->remove(); - } - } - } - } - - return NULL; -} - - -ir_rvalue * -ast_tcs_output_layout::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - YYLTYPE loc = this->get_location(); - - unsigned num_vertices; - if (!state->out_qualifier->vertices-> - process_qualifier_constant(state, "vertices", &num_vertices, - false)) { - /* return here to stop cascading incorrect error messages */ - return NULL; - } - - /* If any shader outputs occurred before this declaration and specified an - * array size, make sure the size they specified is consistent with the - * primitive type. - */ - if (state->tcs_output_size != 0 && state->tcs_output_size != num_vertices) { - _mesa_glsl_error(&loc, state, - "this tessellation control shader output layout " - "specifies %u vertices, but a previous output " - "is declared with size %u", - num_vertices, state->tcs_output_size); - return NULL; - } - - state->tcs_output_vertices_specified = true; - - /* If any shader outputs occurred before this declaration and did not - * specify an array size, their size is determined now. - */ - foreach_in_list (ir_instruction, node, instructions) { - ir_variable *var = node->as_variable(); - if (var == NULL || var->data.mode != ir_var_shader_out) - continue; - - /* Note: Not all tessellation control shader output are arrays. */ - if (!var->type->is_unsized_array() || var->data.patch) - continue; - - if (var->data.max_array_access >= (int)num_vertices) { - _mesa_glsl_error(&loc, state, - "this tessellation control shader output layout " - "specifies %u vertices, but an access to element " - "%u of output `%s' already exists", num_vertices, - var->data.max_array_access, var->name); - } else { - var->type = glsl_type::get_array_instance(var->type->fields.array, - num_vertices); - } - } - - return NULL; -} - - -ir_rvalue * -ast_gs_input_layout::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - YYLTYPE loc = this->get_location(); - - /* Should have been prevented by the parser. */ - assert(!state->gs_input_prim_type_specified - || state->in_qualifier->prim_type == this->prim_type); - - /* If any shader inputs occurred before this declaration and specified an - * array size, make sure the size they specified is consistent with the - * primitive type. - */ - unsigned num_vertices = vertices_per_prim(this->prim_type); - if (state->gs_input_size != 0 && state->gs_input_size != num_vertices) { - _mesa_glsl_error(&loc, state, - "this geometry shader input layout implies %u vertices" - " per primitive, but a previous input is declared" - " with size %u", num_vertices, state->gs_input_size); - return NULL; - } - - state->gs_input_prim_type_specified = true; - - /* If any shader inputs occurred before this declaration and did not - * specify an array size, their size is determined now. - */ - foreach_in_list(ir_instruction, node, instructions) { - ir_variable *var = node->as_variable(); - if (var == NULL || var->data.mode != ir_var_shader_in) - continue; - - /* Note: gl_PrimitiveIDIn has mode ir_var_shader_in, but it's not an - * array; skip it. - */ - - if (var->type->is_unsized_array()) { - if (var->data.max_array_access >= (int)num_vertices) { - _mesa_glsl_error(&loc, state, - "this geometry shader input layout implies %u" - " vertices, but an access to element %u of input" - " `%s' already exists", num_vertices, - var->data.max_array_access, var->name); - } else { - var->type = glsl_type::get_array_instance(var->type->fields.array, - num_vertices); - } - } - } - - return NULL; -} - - -ir_rvalue * -ast_cs_input_layout::hir(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - YYLTYPE loc = this->get_location(); - - /* From the ARB_compute_shader specification: - * - * If the local size of the shader in any dimension is greater - * than the maximum size supported by the implementation for that - * dimension, a compile-time error results. - * - * It is not clear from the spec how the error should be reported if - * the total size of the work group exceeds - * MAX_COMPUTE_WORK_GROUP_INVOCATIONS, but it seems reasonable to - * report it at compile time as well. - */ - GLuint64 total_invocations = 1; - unsigned qual_local_size[3]; - for (int i = 0; i < 3; i++) { - - char *local_size_str = ralloc_asprintf(NULL, "invalid local_size_%c", - 'x' + i); - /* Infer a local_size of 1 for unspecified dimensions */ - if (this->local_size[i] == NULL) { - qual_local_size[i] = 1; - } else if (!this->local_size[i]-> - process_qualifier_constant(state, local_size_str, - &qual_local_size[i], false)) { - ralloc_free(local_size_str); - return NULL; - } - ralloc_free(local_size_str); - - if (qual_local_size[i] > state->consts->MaxComputeWorkGroupSize[i]) { - _mesa_glsl_error(&loc, state, - "local_size_%c exceeds MAX_COMPUTE_WORK_GROUP_SIZE" - " (%d)", 'x' + i, - state->consts->MaxComputeWorkGroupSize[i]); - break; - } - total_invocations *= qual_local_size[i]; - if (total_invocations > - state->consts->MaxComputeWorkGroupInvocations) { - _mesa_glsl_error(&loc, state, - "product of local_sizes exceeds " - "MAX_COMPUTE_WORK_GROUP_INVOCATIONS (%d)", - state->consts->MaxComputeWorkGroupInvocations); - break; - } - } - - /* If any compute input layout declaration preceded this one, make sure it - * was consistent with this one. - */ - if (state->cs_input_local_size_specified) { - for (int i = 0; i < 3; i++) { - if (state->cs_input_local_size[i] != qual_local_size[i]) { - _mesa_glsl_error(&loc, state, - "compute shader input layout does not match" - " previous declaration"); - return NULL; - } - } - } - - /* The ARB_compute_variable_group_size spec says: - * - * If a compute shader including a *local_size_variable* qualifier also - * declares a fixed local group size using the *local_size_x*, - * *local_size_y*, or *local_size_z* qualifiers, a compile-time error - * results - */ - if (state->cs_input_local_size_variable_specified) { - _mesa_glsl_error(&loc, state, - "compute shader can't include both a variable and a " - "fixed local group size"); - return NULL; - } - - state->cs_input_local_size_specified = true; - for (int i = 0; i < 3; i++) - state->cs_input_local_size[i] = qual_local_size[i]; - - /* We may now declare the built-in constant gl_WorkGroupSize (see - * builtin_variable_generator::generate_constants() for why we didn't - * declare it earlier). - */ - ir_variable *var = new(state->symbols) - ir_variable(glsl_type::uvec3_type, "gl_WorkGroupSize", ir_var_auto); - var->data.how_declared = ir_var_declared_implicitly; - var->data.read_only = true; - instructions->push_tail(var); - state->symbols->add_variable(var); - ir_constant_data data; - memset(&data, 0, sizeof(data)); - for (int i = 0; i < 3; i++) - data.u[i] = qual_local_size[i]; - var->constant_value = new(var) ir_constant(glsl_type::uvec3_type, &data); - var->constant_initializer = - new(var) ir_constant(glsl_type::uvec3_type, &data); - var->data.has_initializer = true; - var->data.is_implicit_initializer = false; - - return NULL; -} - - -static void -detect_conflicting_assignments(struct _mesa_glsl_parse_state *state, - exec_list *instructions) -{ - bool gl_FragColor_assigned = false; - bool gl_FragData_assigned = false; - bool gl_FragSecondaryColor_assigned = false; - bool gl_FragSecondaryData_assigned = false; - bool user_defined_fs_output_assigned = false; - ir_variable *user_defined_fs_output = NULL; - - /* It would be nice to have proper location information. */ - YYLTYPE loc; - memset(&loc, 0, sizeof(loc)); - - foreach_in_list(ir_instruction, node, instructions) { - ir_variable *var = node->as_variable(); - - if (!var || !var->data.assigned) - continue; - - if (strcmp(var->name, "gl_FragColor") == 0) { - gl_FragColor_assigned = true; - if (!var->constant_initializer && state->zero_init) { - const ir_constant_data data = { { 0 } }; - var->data.has_initializer = true; - var->data.is_implicit_initializer = true; - var->constant_initializer = new(var) ir_constant(var->type, &data); - } - } - else if (strcmp(var->name, "gl_FragData") == 0) - gl_FragData_assigned = true; - else if (strcmp(var->name, "gl_SecondaryFragColorEXT") == 0) - gl_FragSecondaryColor_assigned = true; - else if (strcmp(var->name, "gl_SecondaryFragDataEXT") == 0) - gl_FragSecondaryData_assigned = true; - else if (!is_gl_identifier(var->name)) { - if (state->stage == MESA_SHADER_FRAGMENT && - var->data.mode == ir_var_shader_out) { - user_defined_fs_output_assigned = true; - user_defined_fs_output = var; - } - } - } - - /* From the GLSL 1.30 spec: - * - * "If a shader statically assigns a value to gl_FragColor, it - * may not assign a value to any element of gl_FragData. If a - * shader statically writes a value to any element of - * gl_FragData, it may not assign a value to - * gl_FragColor. That is, a shader may assign values to either - * gl_FragColor or gl_FragData, but not both. Multiple shaders - * linked together must also consistently write just one of - * these variables. Similarly, if user declared output - * variables are in use (statically assigned to), then the - * built-in variables gl_FragColor and gl_FragData may not be - * assigned to. These incorrect usages all generate compile - * time errors." - */ - if (gl_FragColor_assigned && gl_FragData_assigned) { - _mesa_glsl_error(&loc, state, "fragment shader writes to both " - "`gl_FragColor' and `gl_FragData'"); - } else if (gl_FragColor_assigned && user_defined_fs_output_assigned) { - _mesa_glsl_error(&loc, state, "fragment shader writes to both " - "`gl_FragColor' and `%s'", - user_defined_fs_output->name); - } else if (gl_FragSecondaryColor_assigned && gl_FragSecondaryData_assigned) { - _mesa_glsl_error(&loc, state, "fragment shader writes to both " - "`gl_FragSecondaryColorEXT' and" - " `gl_FragSecondaryDataEXT'"); - } else if (gl_FragColor_assigned && gl_FragSecondaryData_assigned) { - _mesa_glsl_error(&loc, state, "fragment shader writes to both " - "`gl_FragColor' and" - " `gl_FragSecondaryDataEXT'"); - } else if (gl_FragData_assigned && gl_FragSecondaryColor_assigned) { - _mesa_glsl_error(&loc, state, "fragment shader writes to both " - "`gl_FragData' and" - " `gl_FragSecondaryColorEXT'"); - } else if (gl_FragData_assigned && user_defined_fs_output_assigned) { - _mesa_glsl_error(&loc, state, "fragment shader writes to both " - "`gl_FragData' and `%s'", - user_defined_fs_output->name); - } - - if ((gl_FragSecondaryColor_assigned || gl_FragSecondaryData_assigned) && - !state->EXT_blend_func_extended_enable) { - _mesa_glsl_error(&loc, state, - "Dual source blending requires EXT_blend_func_extended"); - } -} - -static void -verify_subroutine_associated_funcs(struct _mesa_glsl_parse_state *state) -{ - YYLTYPE loc; - memset(&loc, 0, sizeof(loc)); - - /* Section 6.1.2 (Subroutines) of the GLSL 4.00 spec says: - * - * "A program will fail to compile or link if any shader - * or stage contains two or more functions with the same - * name if the name is associated with a subroutine type." - */ - - for (int i = 0; i < state->num_subroutines; i++) { - unsigned definitions = 0; - ir_function *fn = state->subroutines[i]; - /* Calculate number of function definitions with the same name */ - foreach_in_list(ir_function_signature, sig, &fn->signatures) { - if (sig->is_defined) { - if (++definitions > 1) { - _mesa_glsl_error(&loc, state, - "%s shader contains two or more function " - "definitions with name `%s', which is " - "associated with a subroutine type.\n", - _mesa_shader_stage_to_string(state->stage), - fn->name); - return; - } - } - } - } -} - -static void -remove_per_vertex_blocks(exec_list *instructions, - _mesa_glsl_parse_state *state, ir_variable_mode mode) -{ - /* Find the gl_PerVertex interface block of the appropriate (in/out) mode, - * if it exists in this shader type. - */ - const glsl_type *per_vertex = NULL; - switch (mode) { - case ir_var_shader_in: - if (ir_variable *gl_in = state->symbols->get_variable("gl_in")) - per_vertex = gl_in->get_interface_type(); - break; - case ir_var_shader_out: - if (ir_variable *gl_Position = - state->symbols->get_variable("gl_Position")) { - per_vertex = gl_Position->get_interface_type(); - } - break; - default: - assert(!"Unexpected mode"); - break; - } - - /* If we didn't find a built-in gl_PerVertex interface block, then we don't - * need to do anything. - */ - if (per_vertex == NULL) - return; - - /* If the interface block is used by the shader, then we don't need to do - * anything. - */ - interface_block_usage_visitor v(mode, per_vertex); - v.run(instructions); - if (v.usage_found()) - return; - - /* Remove any ir_variable declarations that refer to the interface block - * we're removing. - */ - foreach_in_list_safe(ir_instruction, node, instructions) { - ir_variable *const var = node->as_variable(); - if (var != NULL && var->get_interface_type() == per_vertex && - var->data.mode == mode) { - state->symbols->disable_variable(var->name); - var->remove(); - } - } -} - -ir_rvalue * -ast_warnings_toggle::hir(exec_list *, - struct _mesa_glsl_parse_state *state) -{ - state->warnings_enabled = enable; - return NULL; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_type.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_type.cpp deleted file mode 100644 index 6c46eb6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ast_type.cpp +++ /dev/null @@ -1,1025 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ast.h" -#include "../../util/string_buffer.h" - -void -ast_type_specifier::print(void) const -{ - if (structure) { - structure->print(); - } else { - printf("%s ", type_name); - } - - if (array_specifier) { - array_specifier->print(); - } -} - -bool -ast_fully_specified_type::has_qualifiers(_mesa_glsl_parse_state *state) const -{ - /* 'subroutine' isnt a real qualifier. */ - ast_type_qualifier subroutine_only; - subroutine_only.flags.i = 0; - subroutine_only.flags.q.subroutine = 1; - if (state->has_explicit_uniform_location()) { - subroutine_only.flags.q.explicit_index = 1; - } - return (this->qualifier.flags.i & ~subroutine_only.flags.i) != 0; -} - -bool ast_type_qualifier::has_interpolation() const -{ - return this->flags.q.smooth - || this->flags.q.flat - || this->flags.q.noperspective; -} - -bool -ast_type_qualifier::has_layout() const -{ - return this->flags.q.origin_upper_left - || this->flags.q.pixel_center_integer - || this->flags.q.depth_type - || this->flags.q.std140 - || this->flags.q.std430 - || this->flags.q.shared - || this->flags.q.column_major - || this->flags.q.row_major - || this->flags.q.packed - || this->flags.q.bindless_sampler - || this->flags.q.bindless_image - || this->flags.q.bound_sampler - || this->flags.q.bound_image - || this->flags.q.explicit_align - || this->flags.q.explicit_component - || this->flags.q.explicit_location - || this->flags.q.explicit_image_format - || this->flags.q.explicit_index - || this->flags.q.explicit_binding - || this->flags.q.explicit_offset - || this->flags.q.explicit_stream - || this->flags.q.explicit_xfb_buffer - || this->flags.q.explicit_xfb_offset - || this->flags.q.explicit_xfb_stride; -} - -bool -ast_type_qualifier::has_storage() const -{ - return this->flags.q.constant - || this->flags.q.attribute - || this->flags.q.varying - || this->flags.q.in - || this->flags.q.out - || this->flags.q.uniform - || this->flags.q.buffer - || this->flags.q.shared_storage; -} - -bool -ast_type_qualifier::has_auxiliary_storage() const -{ - return this->flags.q.centroid - || this->flags.q.sample - || this->flags.q.patch; -} - -bool ast_type_qualifier::has_memory() const -{ - return this->flags.q.coherent - || this->flags.q._volatile - || this->flags.q.restrict_flag - || this->flags.q.read_only - || this->flags.q.write_only; -} - -bool ast_type_qualifier::is_subroutine_decl() const -{ - return this->flags.q.subroutine && !this->subroutine_list; -} - -static bool -validate_prim_type(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - const ast_type_qualifier &qualifier, - const ast_type_qualifier &new_qualifier) -{ - /* Input layout qualifiers can be specified multiple - * times in separate declarations, as long as they match. - */ - if (qualifier.flags.q.prim_type && new_qualifier.flags.q.prim_type - && qualifier.prim_type != new_qualifier.prim_type) { - _mesa_glsl_error(loc, state, - "conflicting input primitive %s specified", - state->stage == MESA_SHADER_GEOMETRY ? - "type" : "mode"); - return false; - } - - return true; -} - -static bool -validate_vertex_spacing(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - const ast_type_qualifier &qualifier, - const ast_type_qualifier &new_qualifier) -{ - if (qualifier.flags.q.vertex_spacing && new_qualifier.flags.q.vertex_spacing - && qualifier.vertex_spacing != new_qualifier.vertex_spacing) { - _mesa_glsl_error(loc, state, - "conflicting vertex spacing specified"); - return false; - } - - return true; -} - -static bool -validate_ordering(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - const ast_type_qualifier &qualifier, - const ast_type_qualifier &new_qualifier) -{ - if (qualifier.flags.q.ordering && new_qualifier.flags.q.ordering - && qualifier.ordering != new_qualifier.ordering) { - _mesa_glsl_error(loc, state, - "conflicting ordering specified"); - return false; - } - - return true; -} - -static bool -validate_point_mode(ASSERTED const ast_type_qualifier &qualifier, - ASSERTED const ast_type_qualifier &new_qualifier) -{ - /* Point mode can only be true if the flag is set. */ - assert (!qualifier.flags.q.point_mode || !new_qualifier.flags.q.point_mode - || (qualifier.point_mode && new_qualifier.point_mode)); - - return true; -} - -static void -merge_bindless_qualifier(_mesa_glsl_parse_state *state) -{ - if (state->default_uniform_qualifier->flags.q.bindless_sampler) { - state->bindless_sampler_specified = true; - state->default_uniform_qualifier->flags.q.bindless_sampler = false; - } - - if (state->default_uniform_qualifier->flags.q.bindless_image) { - state->bindless_image_specified = true; - state->default_uniform_qualifier->flags.q.bindless_image = false; - } - - if (state->default_uniform_qualifier->flags.q.bound_sampler) { - state->bound_sampler_specified = true; - state->default_uniform_qualifier->flags.q.bound_sampler = false; - } - - if (state->default_uniform_qualifier->flags.q.bound_image) { - state->bound_image_specified = true; - state->default_uniform_qualifier->flags.q.bound_image = false; - } -} - -/** - * This function merges duplicate layout identifiers. - * - * It deals with duplicates within a single layout qualifier, among multiple - * layout qualifiers on a single declaration and on several declarations for - * the same variable. - * - * The is_single_layout_merge and is_multiple_layouts_merge parameters are - * used to differentiate among them. - */ -bool -ast_type_qualifier::merge_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - const ast_type_qualifier &q, - bool is_single_layout_merge, - bool is_multiple_layouts_merge) -{ - bool r = true; - ast_type_qualifier ubo_mat_mask; - ubo_mat_mask.flags.i = 0; - ubo_mat_mask.flags.q.row_major = 1; - ubo_mat_mask.flags.q.column_major = 1; - - ast_type_qualifier ubo_layout_mask; - ubo_layout_mask.flags.i = 0; - ubo_layout_mask.flags.q.std140 = 1; - ubo_layout_mask.flags.q.packed = 1; - ubo_layout_mask.flags.q.shared = 1; - ubo_layout_mask.flags.q.std430 = 1; - - ast_type_qualifier ubo_binding_mask; - ubo_binding_mask.flags.i = 0; - ubo_binding_mask.flags.q.explicit_binding = 1; - ubo_binding_mask.flags.q.explicit_offset = 1; - - ast_type_qualifier stream_layout_mask; - stream_layout_mask.flags.i = 0; - stream_layout_mask.flags.q.stream = 1; - - /* FIXME: We should probably do interface and function param validation - * separately. - */ - ast_type_qualifier input_layout_mask; - input_layout_mask.flags.i = 0; - input_layout_mask.flags.q.centroid = 1; - /* Function params can have constant */ - input_layout_mask.flags.q.constant = 1; - input_layout_mask.flags.q.explicit_component = 1; - input_layout_mask.flags.q.explicit_location = 1; - input_layout_mask.flags.q.flat = 1; - input_layout_mask.flags.q.in = 1; - input_layout_mask.flags.q.invariant = 1; - input_layout_mask.flags.q.noperspective = 1; - input_layout_mask.flags.q.origin_upper_left = 1; - /* Function params 'inout' will set this */ - input_layout_mask.flags.q.out = 1; - input_layout_mask.flags.q.patch = 1; - input_layout_mask.flags.q.pixel_center_integer = 1; - input_layout_mask.flags.q.precise = 1; - input_layout_mask.flags.q.sample = 1; - input_layout_mask.flags.q.smooth = 1; - input_layout_mask.flags.q.non_coherent = 1; - - if (state->has_bindless()) { - /* Allow to use image qualifiers with shader inputs/outputs. */ - input_layout_mask.flags.q.coherent = 1; - input_layout_mask.flags.q._volatile = 1; - input_layout_mask.flags.q.restrict_flag = 1; - input_layout_mask.flags.q.read_only = 1; - input_layout_mask.flags.q.write_only = 1; - input_layout_mask.flags.q.explicit_image_format = 1; - } - - /* Uniform block layout qualifiers get to overwrite each - * other (rightmost having priority), while all other - * qualifiers currently don't allow duplicates. - */ - ast_type_qualifier allowed_duplicates_mask; - allowed_duplicates_mask.flags.i = - ubo_mat_mask.flags.i | - ubo_layout_mask.flags.i | - ubo_binding_mask.flags.i; - - /* Geometry shaders can have several layout qualifiers - * assigning different stream values. - */ - if (state->stage == MESA_SHADER_GEOMETRY) { - allowed_duplicates_mask.flags.i |= - stream_layout_mask.flags.i; - } - - if (is_single_layout_merge && !state->has_enhanced_layouts() && - (this->flags.i & q.flags.i & ~allowed_duplicates_mask.flags.i) != 0) { - _mesa_glsl_error(loc, state, "duplicate layout qualifiers used"); - return false; - } - - if (is_multiple_layouts_merge && !state->has_420pack_or_es31()) { - _mesa_glsl_error(loc, state, - "duplicate layout(...) qualifiers"); - return false; - } - - if (q.flags.q.prim_type) { - r &= validate_prim_type(loc, state, *this, q); - this->flags.q.prim_type = 1; - this->prim_type = q.prim_type; - } - - if (q.flags.q.max_vertices) { - if (this->flags.q.max_vertices - && !is_single_layout_merge && !is_multiple_layouts_merge) { - this->max_vertices->merge_qualifier(q.max_vertices); - } else { - this->flags.q.max_vertices = 1; - this->max_vertices = q.max_vertices; - } - } - - if (q.subroutine_list) { - if (this->subroutine_list) { - _mesa_glsl_error(loc, state, - "conflicting subroutine qualifiers used"); - } else { - this->subroutine_list = q.subroutine_list; - } - } - - if (q.flags.q.invocations) { - if (this->flags.q.invocations - && !is_single_layout_merge && !is_multiple_layouts_merge) { - this->invocations->merge_qualifier(q.invocations); - } else { - this->flags.q.invocations = 1; - this->invocations = q.invocations; - } - } - - if (state->stage == MESA_SHADER_GEOMETRY && - state->has_explicit_attrib_stream()) { - if (!this->flags.q.explicit_stream) { - if (q.flags.q.stream) { - this->flags.q.stream = 1; - this->stream = q.stream; - } else if (!this->flags.q.stream && this->flags.q.out && - !this->flags.q.in) { - /* Assign default global stream value */ - this->flags.q.stream = 1; - this->stream = state->out_qualifier->stream; - } - } - } - - if (state->has_enhanced_layouts()) { - if (!this->flags.q.explicit_xfb_buffer) { - if (q.flags.q.xfb_buffer) { - this->flags.q.xfb_buffer = 1; - this->xfb_buffer = q.xfb_buffer; - } else if (!this->flags.q.xfb_buffer && this->flags.q.out && - !this->flags.q.in) { - /* Assign global xfb_buffer value */ - this->flags.q.xfb_buffer = 1; - this->xfb_buffer = state->out_qualifier->xfb_buffer; - } - } - - if (q.flags.q.explicit_xfb_stride) { - this->flags.q.xfb_stride = 1; - this->flags.q.explicit_xfb_stride = 1; - this->xfb_stride = q.xfb_stride; - } - } - - if (q.flags.q.vertices) { - if (this->flags.q.vertices - && !is_single_layout_merge && !is_multiple_layouts_merge) { - this->vertices->merge_qualifier(q.vertices); - } else { - this->flags.q.vertices = 1; - this->vertices = q.vertices; - } - } - - if (q.flags.q.vertex_spacing) { - r &= validate_vertex_spacing(loc, state, *this, q); - this->flags.q.vertex_spacing = 1; - this->vertex_spacing = q.vertex_spacing; - } - - if (q.flags.q.ordering) { - r &= validate_ordering(loc, state, *this, q); - this->flags.q.ordering = 1; - this->ordering = q.ordering; - } - - if (q.flags.q.point_mode) { - r &= validate_point_mode(*this, q); - this->flags.q.point_mode = 1; - this->point_mode = q.point_mode; - } - - if (q.flags.q.early_fragment_tests) - this->flags.q.early_fragment_tests = true; - - if ((q.flags.i & ubo_mat_mask.flags.i) != 0) - this->flags.i &= ~ubo_mat_mask.flags.i; - if ((q.flags.i & ubo_layout_mask.flags.i) != 0) - this->flags.i &= ~ubo_layout_mask.flags.i; - - for (int i = 0; i < 3; i++) { - if (q.flags.q.local_size & (1 << i)) { - if (this->local_size[i] - && !is_single_layout_merge && !is_multiple_layouts_merge) { - this->local_size[i]->merge_qualifier(q.local_size[i]); - } else { - this->local_size[i] = q.local_size[i]; - } - } - } - - if (q.flags.q.local_size_variable) - this->flags.q.local_size_variable = true; - - if (q.flags.q.bindless_sampler) - this->flags.q.bindless_sampler = true; - - if (q.flags.q.bindless_image) - this->flags.q.bindless_image = true; - - if (q.flags.q.bound_sampler) - this->flags.q.bound_sampler = true; - - if (q.flags.q.bound_image) - this->flags.q.bound_image = true; - - if (q.flags.q.derivative_group) { - this->flags.q.derivative_group = true; - this->derivative_group = q.derivative_group; - } - - this->flags.i |= q.flags.i; - - if (this->flags.q.in && - (this->flags.i & ~input_layout_mask.flags.i) != 0) { - _mesa_glsl_error(loc, state, "invalid input layout qualifier used"); - return false; - } - - if (q.flags.q.explicit_align) - this->align = q.align; - - if (q.flags.q.explicit_location) - this->location = q.location; - - if (q.flags.q.explicit_index) - this->index = q.index; - - if (q.flags.q.explicit_component) - this->component = q.component; - - if (q.flags.q.explicit_binding) - this->binding = q.binding; - - if (q.flags.q.explicit_offset || q.flags.q.explicit_xfb_offset) - this->offset = q.offset; - - if (q.precision != ast_precision_none) - this->precision = q.precision; - - if (q.flags.q.explicit_image_format) { - this->image_format = q.image_format; - this->image_base_type = q.image_base_type; - } - - if (q.flags.q.bindless_sampler || - q.flags.q.bindless_image || - q.flags.q.bound_sampler || - q.flags.q.bound_image) - merge_bindless_qualifier(state); - - if (state->EXT_gpu_shader4_enable && - state->stage == MESA_SHADER_FRAGMENT && - this->flags.q.varying && q.flags.q.out) { - this->flags.q.varying = 0; - this->flags.q.out = 1; - } - - return r; -} - -bool -ast_type_qualifier::validate_out_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state) -{ - bool r = true; - ast_type_qualifier valid_out_mask; - valid_out_mask.flags.i = 0; - - switch (state->stage) { - case MESA_SHADER_GEOMETRY: - if (this->flags.q.prim_type) { - /* Make sure this is a valid output primitive type. */ - switch (this->prim_type) { - case GL_POINTS: - case GL_LINE_STRIP: - case GL_TRIANGLE_STRIP: - break; - default: - r = false; - _mesa_glsl_error(loc, state, "invalid geometry shader output " - "primitive type"); - break; - } - } - - valid_out_mask.flags.q.stream = 1; - valid_out_mask.flags.q.explicit_stream = 1; - valid_out_mask.flags.q.explicit_xfb_buffer = 1; - valid_out_mask.flags.q.xfb_buffer = 1; - valid_out_mask.flags.q.explicit_xfb_stride = 1; - valid_out_mask.flags.q.xfb_stride = 1; - valid_out_mask.flags.q.max_vertices = 1; - valid_out_mask.flags.q.prim_type = 1; - break; - case MESA_SHADER_TESS_CTRL: - valid_out_mask.flags.q.vertices = 1; - valid_out_mask.flags.q.explicit_xfb_buffer = 1; - valid_out_mask.flags.q.xfb_buffer = 1; - valid_out_mask.flags.q.explicit_xfb_stride = 1; - valid_out_mask.flags.q.xfb_stride = 1; - break; - case MESA_SHADER_TESS_EVAL: - case MESA_SHADER_VERTEX: - valid_out_mask.flags.q.explicit_xfb_buffer = 1; - valid_out_mask.flags.q.xfb_buffer = 1; - valid_out_mask.flags.q.explicit_xfb_stride = 1; - valid_out_mask.flags.q.xfb_stride = 1; - break; - case MESA_SHADER_FRAGMENT: - valid_out_mask.flags.q.blend_support = 1; - break; - default: - r = false; - _mesa_glsl_error(loc, state, - "out layout qualifiers only valid in " - "geometry, tessellation, vertex and fragment shaders"); - } - - /* Generate an error when invalid output layout qualifiers are used. */ - if ((this->flags.i & ~valid_out_mask.flags.i) != 0) { - r = false; - _mesa_glsl_error(loc, state, "invalid output layout qualifiers used"); - } - - return r; -} - -bool -ast_type_qualifier::merge_into_out_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - ast_node* &node) -{ - const bool r = state->out_qualifier->merge_qualifier(loc, state, - *this, false); - - switch (state->stage) { - case MESA_SHADER_GEOMETRY: - /* Allow future assignments of global out's stream id value */ - state->out_qualifier->flags.q.explicit_stream = 0; - break; - case MESA_SHADER_TESS_CTRL: - node = new(state->linalloc) ast_tcs_output_layout(*loc); - break; - default: - break; - } - - /* Allow future assignments of global out's */ - state->out_qualifier->flags.q.explicit_xfb_buffer = 0; - state->out_qualifier->flags.q.explicit_xfb_stride = 0; - - return r; -} - -bool -ast_type_qualifier::validate_in_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state) -{ - bool r = true; - ast_type_qualifier valid_in_mask; - valid_in_mask.flags.i = 0; - - switch (state->stage) { - case MESA_SHADER_TESS_EVAL: - if (this->flags.q.prim_type) { - /* Make sure this is a valid input primitive type. */ - switch (this->prim_type) { - case GL_TRIANGLES: - case GL_QUADS: - case GL_ISOLINES: - break; - default: - r = false; - _mesa_glsl_error(loc, state, - "invalid tessellation evaluation " - "shader input primitive type"); - break; - } - } - - valid_in_mask.flags.q.prim_type = 1; - valid_in_mask.flags.q.vertex_spacing = 1; - valid_in_mask.flags.q.ordering = 1; - valid_in_mask.flags.q.point_mode = 1; - break; - case MESA_SHADER_GEOMETRY: - if (this->flags.q.prim_type) { - /* Make sure this is a valid input primitive type. */ - switch (this->prim_type) { - case GL_POINTS: - case GL_LINES: - case GL_LINES_ADJACENCY: - case GL_TRIANGLES: - case GL_TRIANGLES_ADJACENCY: - break; - default: - r = false; - _mesa_glsl_error(loc, state, - "invalid geometry shader input primitive type"); - break; - } - } - - valid_in_mask.flags.q.prim_type = 1; - valid_in_mask.flags.q.invocations = 1; - break; - case MESA_SHADER_FRAGMENT: - valid_in_mask.flags.q.early_fragment_tests = 1; - valid_in_mask.flags.q.inner_coverage = 1; - valid_in_mask.flags.q.post_depth_coverage = 1; - valid_in_mask.flags.q.pixel_interlock_ordered = 1; - valid_in_mask.flags.q.pixel_interlock_unordered = 1; - valid_in_mask.flags.q.sample_interlock_ordered = 1; - valid_in_mask.flags.q.sample_interlock_unordered = 1; - break; - case MESA_SHADER_COMPUTE: - valid_in_mask.flags.q.local_size = 7; - valid_in_mask.flags.q.local_size_variable = 1; - valid_in_mask.flags.q.derivative_group = 1; - break; - default: - r = false; - _mesa_glsl_error(loc, state, - "input layout qualifiers only valid in " - "geometry, tessellation, fragment and compute shaders"); - break; - } - - /* Generate an error when invalid input layout qualifiers are used. */ - if ((this->flags.i & ~valid_in_mask.flags.i) != 0) { - r = false; - _mesa_glsl_error(loc, state, "invalid input layout qualifiers used"); - } - - /* The checks below are also performed when merging but we want to spit an - * error against the default global input qualifier as soon as we can, with - * the closest error location in the shader. - */ - r &= validate_prim_type(loc, state, *state->in_qualifier, *this); - r &= validate_vertex_spacing(loc, state, *state->in_qualifier, *this); - r &= validate_ordering(loc, state, *state->in_qualifier, *this); - r &= validate_point_mode(*state->in_qualifier, *this); - - return r; -} - -bool -ast_type_qualifier::merge_into_in_qualifier(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - ast_node* &node) -{ - bool r = true; - void *lin_ctx = state->linalloc; - - /* We create the gs_input_layout node before merging so, in the future, no - * more repeated nodes will be created as we will have the flag set. - */ - if (state->stage == MESA_SHADER_GEOMETRY - && this->flags.q.prim_type && !state->in_qualifier->flags.q.prim_type) { - node = new(lin_ctx) ast_gs_input_layout(*loc, this->prim_type); - } - - r = state->in_qualifier->merge_qualifier(loc, state, *this, false); - - if (state->in_qualifier->flags.q.early_fragment_tests) { - state->fs_early_fragment_tests = true; - state->in_qualifier->flags.q.early_fragment_tests = false; - } - - if (state->in_qualifier->flags.q.inner_coverage) { - state->fs_inner_coverage = true; - state->in_qualifier->flags.q.inner_coverage = false; - } - - if (state->in_qualifier->flags.q.post_depth_coverage) { - state->fs_post_depth_coverage = true; - state->in_qualifier->flags.q.post_depth_coverage = false; - } - - if (state->fs_inner_coverage && state->fs_post_depth_coverage) { - _mesa_glsl_error(loc, state, - "inner_coverage & post_depth_coverage layout qualifiers " - "are mutally exclusives"); - r = false; - } - - if (state->in_qualifier->flags.q.pixel_interlock_ordered) { - state->fs_pixel_interlock_ordered = true; - state->in_qualifier->flags.q.pixel_interlock_ordered = false; - } - - if (state->in_qualifier->flags.q.pixel_interlock_unordered) { - state->fs_pixel_interlock_unordered = true; - state->in_qualifier->flags.q.pixel_interlock_unordered = false; - } - - if (state->in_qualifier->flags.q.sample_interlock_ordered) { - state->fs_sample_interlock_ordered = true; - state->in_qualifier->flags.q.sample_interlock_ordered = false; - } - - if (state->in_qualifier->flags.q.sample_interlock_unordered) { - state->fs_sample_interlock_unordered = true; - state->in_qualifier->flags.q.sample_interlock_unordered = false; - } - - if (state->fs_pixel_interlock_ordered + - state->fs_pixel_interlock_unordered + - state->fs_sample_interlock_ordered + - state->fs_sample_interlock_unordered > 1) { - _mesa_glsl_error(loc, state, - "only one interlock mode can be used at any time."); - r = false; - } - - if (state->in_qualifier->flags.q.derivative_group) { - if (state->cs_derivative_group != DERIVATIVE_GROUP_NONE) { - if (state->in_qualifier->derivative_group != DERIVATIVE_GROUP_NONE && - state->cs_derivative_group != state->in_qualifier->derivative_group) { - _mesa_glsl_error(loc, state, - "conflicting derivative groups."); - r = false; - } - } else { - state->cs_derivative_group = state->in_qualifier->derivative_group; - } - } - - /* We allow the creation of multiple cs_input_layout nodes. Coherence among - * all existing nodes is checked later, when the AST node is transformed - * into HIR. - */ - if (state->in_qualifier->flags.q.local_size) { - node = new(lin_ctx) ast_cs_input_layout(*loc, - state->in_qualifier->local_size); - state->in_qualifier->flags.q.local_size = 0; - for (int i = 0; i < 3; i++) - state->in_qualifier->local_size[i] = NULL; - } - - if (state->in_qualifier->flags.q.local_size_variable) { - state->cs_input_local_size_variable_specified = true; - state->in_qualifier->flags.q.local_size_variable = false; - } - - return r; -} - -bool -ast_type_qualifier::push_to_global(YYLTYPE *loc, - _mesa_glsl_parse_state *state) -{ - if (this->flags.q.xfb_stride) { - this->flags.q.xfb_stride = 0; - - unsigned buff_idx; - if (process_qualifier_constant(state, loc, "xfb_buffer", - this->xfb_buffer, &buff_idx)) { - if (state->out_qualifier->out_xfb_stride[buff_idx]) { - state->out_qualifier->out_xfb_stride[buff_idx]->merge_qualifier( - new(state->linalloc) ast_layout_expression(*loc, - this->xfb_stride)); - } else { - state->out_qualifier->out_xfb_stride[buff_idx] = - new(state->linalloc) ast_layout_expression(*loc, - this->xfb_stride); - } - } - } - - return true; -} - -/** - * Check if the current type qualifier has any illegal flags. - * - * If so, print an error message, followed by a list of illegal flags. - * - * \param message The error message to print. - * \param allowed_flags A list of valid flags. - */ -bool -ast_type_qualifier::validate_flags(YYLTYPE *loc, - _mesa_glsl_parse_state *state, - const ast_type_qualifier &allowed_flags, - const char *message, const char *name) -{ - ast_type_qualifier bad; - bad.flags.i = this->flags.i & ~allowed_flags.flags.i; - if (bad.flags.i == 0) - return true; - - struct _mesa_string_buffer *buf = _mesa_string_buffer_create(NULL, 100); -#define Q(f) \ - if (bad.flags.q.f) \ - _mesa_string_buffer_append(buf, "" #f) -#define Q2(f, s) \ - if (bad.flags.q.f) \ - _mesa_string_buffer_append(buf, " " #s) - - Q(invariant); - Q(precise); - Q(constant); - Q(attribute); - Q(varying); - Q(in); - Q(out); - Q(centroid); - Q(sample); - Q(patch); - Q(uniform); - Q(buffer); - Q(shared_storage); - Q(smooth); - Q(flat); - Q(noperspective); - Q(origin_upper_left); - Q(pixel_center_integer); - Q2(explicit_align, align); - Q2(explicit_component, component); - Q2(explicit_location, location); - Q2(explicit_index, index); - Q2(explicit_binding, binding); - Q2(explicit_offset, offset); - Q(depth_type); - Q(std140); - Q(std430); - Q(shared); - Q(packed); - Q(column_major); - Q(row_major); - Q(prim_type); - Q(max_vertices); - Q(local_size); - Q(local_size_variable); - Q(early_fragment_tests); - Q2(explicit_image_format, image_format); - Q(coherent); - Q2(_volatile, volatile); - Q(restrict_flag); - Q(read_only); - Q(write_only); - Q(invocations); - Q(stream); - Q(stream); - Q2(explicit_xfb_offset, xfb_offset); - Q2(xfb_buffer, xfb_buffer); - Q2(explicit_xfb_buffer, xfb_buffer); - Q2(xfb_stride, xfb_stride); - Q2(explicit_xfb_stride, xfb_stride); - Q(vertex_spacing); - Q(ordering); - Q(point_mode); - Q(vertices); - Q(subroutine); - Q(blend_support); - Q(inner_coverage); - Q(bindless_sampler); - Q(bindless_image); - Q(bound_sampler); - Q(bound_image); - Q(post_depth_coverage); - Q(pixel_interlock_ordered); - Q(pixel_interlock_unordered); - Q(sample_interlock_ordered); - Q(sample_interlock_unordered); - Q2(non_coherent, noncoherent); - -#undef Q -#undef Q2 - - _mesa_glsl_error(loc, state, - "%s '%s': %s\n", - message, name, - buf->buf); - _mesa_string_buffer_destroy(buf); - - return false; -} - -bool -ast_layout_expression::process_qualifier_constant(struct _mesa_glsl_parse_state *state, - const char *qual_indentifier, - unsigned *value, - bool can_be_zero) -{ - int min_value = 0; - bool first_pass = true; - *value = 0; - - if (!can_be_zero) - min_value = 1; - - for (exec_node *node = layout_const_expressions.get_head_raw(); - !node->is_tail_sentinel(); node = node->next) { - - exec_list dummy_instructions; - ast_node *const_expression = exec_node_data(ast_node, node, link); - - ir_rvalue *const ir = const_expression->hir(&dummy_instructions, state); - - ir_constant *const const_int = - ir->constant_expression_value(ralloc_parent(ir)); - - if (const_int == NULL || !const_int->type->is_integer_32()) { - YYLTYPE loc = const_expression->get_location(); - _mesa_glsl_error(&loc, state, "%s must be an integral constant " - "expression", qual_indentifier); - return false; - } - - if (const_int->value.i[0] < min_value) { - YYLTYPE loc = const_expression->get_location(); - _mesa_glsl_error(&loc, state, "%s layout qualifier is invalid " - "(%d < %d)", qual_indentifier, - const_int->value.i[0], min_value); - return false; - } - - if (!first_pass && *value != const_int->value.u[0]) { - YYLTYPE loc = const_expression->get_location(); - _mesa_glsl_error(&loc, state, "%s layout qualifier does not " - "match previous declaration (%d vs %d)", - qual_indentifier, *value, const_int->value.i[0]); - return false; - } else { - first_pass = false; - *value = const_int->value.u[0]; - } - - /* If the location is const (and we've verified that - * it is) then no instructions should have been emitted - * when we converted it to HIR. If they were emitted, - * then either the location isn't const after all, or - * we are emitting unnecessary instructions. - */ - assert(dummy_instructions.is_empty()); - } - - return true; -} - -bool -process_qualifier_constant(struct _mesa_glsl_parse_state *state, - YYLTYPE *loc, - const char *qual_indentifier, - ast_expression *const_expression, - unsigned *value) -{ - exec_list dummy_instructions; - - if (const_expression == NULL) { - *value = 0; - return true; - } - - ir_rvalue *const ir = const_expression->hir(&dummy_instructions, state); - - ir_constant *const const_int = - ir->constant_expression_value(ralloc_parent(ir)); - if (const_int == NULL || !const_int->type->is_integer_32()) { - _mesa_glsl_error(loc, state, "%s must be an integral constant " - "expression", qual_indentifier); - return false; - } - - if (const_int->value.i[0] < 0) { - _mesa_glsl_error(loc, state, "%s layout qualifier is invalid (%d < 0)", - qual_indentifier, const_int->value.u[0]); - return false; - } - - /* If the location is const (and we've verified that - * it is) then no instructions should have been emitted - * when we converted it to HIR. If they were emitted, - * then either the location isn't const after all, or - * we are emitting unnecessary instructions. - */ - assert(dummy_instructions.is_empty()); - - *value = const_int->value.u[0]; - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/astc_decoder.glsl b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/astc_decoder.glsl deleted file mode 100644 index 838229c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/astc_decoder.glsl +++ /dev/null @@ -1,1307 +0,0 @@ -#version 320 es -precision highp float; -precision highp int; -precision highp usamplerBuffer; -precision highp usampler2D; -precision highp image2D; -precision highp uimage2D; - -/* Copyright (c) 2020-2022 Hans-Kristian Arntzen - * Copyright (c) 2022 Intel Corporation - * - * 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 THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -layout(local_size_x = %u, local_size_y = %u, local_size_z = 4) in; - -#define utextureBuffer usamplerBuffer -#define utexture2D usampler2D - -layout(binding = 0) uniform utextureBuffer LUTRemainingBitsToEndpointQuantizer; -layout(binding = 1) uniform utextureBuffer LUTEndpointUnquantize; -layout(binding = 2) uniform utextureBuffer LUTWeightQuantizer; -layout(binding = 3) uniform utextureBuffer LUTWeightUnquantize; -layout(binding = 4) uniform utextureBuffer LUTTritQuintDecode; -layout(binding = 5) uniform utexture2D LUTPartitionTable; -layout(binding = 6) uniform utexture2D PayloadInput; - -layout(rgba8ui, binding = 7) writeonly uniform uimage2D OutputImage; -const bool DECODE_8BIT = true; - -const int MODE_LDR = 0; -const int MODE_HDR = 1; -const int MODE_HDR_LDR_ALPHA = 2; - -const uvec4 error_color = uvec4(255, 0, 255, 255); - -/* bitextract.h */ -int extract_bits(uvec4 payload, int offset, int bits) -{ - int last_offset = offset + bits - 1; - int result; - - if (bits <= 0) - result = 0; - else if ((last_offset >> 5) == (offset >> 5)) - result = int(bitfieldExtract(payload[offset >> 5], offset & 31, bits)); - else - { - int first_bits = 32 - (offset & 31); - int result_first = int(bitfieldExtract(payload[offset >> 5], offset & 31, first_bits)); - int result_second = int(bitfieldExtract(payload[(offset >> 5) + 1], 0, bits - first_bits)); - result = result_first | (result_second << first_bits); - } - return result; -} - -/* bitextract.h */ -int extract_bits_sign(uvec4 payload, int offset, int bits) -{ - int last_offset = offset + bits - 1; - int result; - - if (bits <= 0) - result = 0; - else if ((last_offset >> 5) == (offset >> 5)) - result = bitfieldExtract(int(payload[offset >> 5]), offset & 31, bits); - else - { - int first_bits = 32 - (offset & 31); - int result_first = int(bitfieldExtract(payload[offset >> 5], offset & 31, first_bits)); - int result_second = bitfieldExtract(int(payload[(offset >> 5) + 1]), 0, bits - first_bits); - result = result_first | (result_second << first_bits); - } - return result; -} - -/* bitextract.h */ -int extract_bits_reverse(uvec4 payload, int offset, int bits) -{ - int last_offset = offset + bits - 1; - int result; - - if (bits <= 0) - result = 0; - else if ((last_offset >> 5) == (offset >> 5)) - result = int(bitfieldReverse(bitfieldExtract(payload[offset >> 5], offset & 31, bits)) >> (32 - bits)); - else - { - int first_bits = 32 - (offset & 31); - uint result_first = bitfieldExtract(payload[offset >> 5], offset & 31, first_bits); - uint result_second = bitfieldExtract(payload[(offset >> 5) + 1], 0, bits - first_bits); - result = int(bitfieldReverse(result_first | (result_second << first_bits)) >> (32 - bits)); - } - return result; -} - -void swap(inout int a, inout int b) -{ - int tmp = a; - a = b; - b = tmp; -} - -ivec4 build_coord() -{ - ivec2 payload_coord = ivec2(gl_WorkGroupID.xy) * 2; - payload_coord.x += int(gl_LocalInvocationID.z) & 1; - payload_coord.y += (int(gl_LocalInvocationID.z) >> 1) & 1; - ivec2 coord = payload_coord * ivec2(gl_WorkGroupSize.xy); - coord += ivec2(gl_LocalInvocationID.xy); - return ivec4(coord, payload_coord); -} - -ivec4 interpolate_endpoint(ivec4 ep0, ivec4 ep1, ivec4 weight, int decode_mode) -{ - if (decode_mode == MODE_HDR) - { - ep0 <<= 4; - ep1 <<= 4; - } - else if (decode_mode == MODE_HDR_LDR_ALPHA) - { - ep0.rgb <<= 4; - ep1.rgb <<= 4; - ep0.a *= 0x101; - ep1.a *= 0x101; - } - else if (DECODE_8BIT) - { - // This isn't quite right in all cases. - // In normal ASTC with sRGB, the alpha channel is supposed to - // be decoded as FP16, - // even when color components are SRGB 8-bit (?!?!?!?!). - // This is correct if decode_unorm8 mode is used though, - // for sanity, we're going to assume unorm8 decoding mode - // is implied when using sRGB. - ep0 = (ep0 << 8) | ivec4(0x80); - ep1 = (ep1 << 8) | ivec4(0x80); - } - else - { - ep0 *= 0x101; - ep1 *= 0x101; - } - - ivec4 color = (ep0 * (64 - weight) + ep1 * weight + 32) >> 6; - return color; -} - -bvec4 bvec_or(bvec4 a, bvec4 b) -{ - return bvec4(ivec4(a) | ivec4(b)); -} - -uint round_down_quantize_fp16(int color) -{ - // ASTC has a very peculiar way of converting the decoded result to FP16. - // 0xffff -> 1.0, and for everything else we get roundDownQuantizeFP16(vec4(c) / vec4(0x10000)). - int msb = findMSB(color); - int shamt = msb; - int m = ((color << 10) >> shamt) & 0x3ff; - int e = msb - 1; - uint decoded = color == 0xffff ? 0x3c00u : uint(e < 1 ? (color << 8) : (m | (e << 10))); - return decoded; -} - -uvec4 round_down_quantize_fp16(ivec4 color) -{ - // ASTC has a very peculiar way of converting the decoded result to FP16. - // 0xffff -> 1.0, and for everything else we get roundDownQuantizeFP16(vec4(c) / vec4(0x10000)). - ivec4 msb = findMSB(color); - ivec4 shamt = msb; - ivec4 m = ((color << 10) >> shamt) & 0x3ff; - ivec4 e = msb - 1; - uvec4 decoded = uvec4(m | (e << 10)); - uvec4 denorm_decode = uvec4(color << 8); - decoded = mix(decoded, uvec4(denorm_decode), lessThan(e, ivec4(1))); - decoded = mix(decoded, uvec4(0x3c00), equal(color, ivec4(0xffff))); - return decoded; -} - -uvec4 decode_fp16(ivec4 color, int decode_mode) -{ - if (decode_mode != MODE_LDR) - { - // Interpret the value as FP16, but with some extra fixups along the way to make the interpolation more - // logarithmic (apparently). From spec: - ivec4 e = color >> 11; - ivec4 m = color & 0x7ff; - ivec4 mt = 4 * m - 512; - mt = mix(mt, ivec4(3 * m), lessThan(m, ivec4(512))); - mt = mix(mt, ivec4(5 * m - 2048), greaterThanEqual(m, ivec4(1536))); - - ivec4 decoded = (e << 10) + (mt >> 3); - // +Inf or NaN are decoded to 0x7bff (max finite value). - decoded = mix(decoded, ivec4(0x7bff), bvec_or(greaterThan(decoded & 0x7fff, ivec4(0x7c00)), equal(decoded, ivec4(0x7c00)))); - - if (decode_mode == MODE_HDR_LDR_ALPHA) - decoded.a = int(round_down_quantize_fp16(color.a)); - - return uvec4(decoded); - } - else - { - return round_down_quantize_fp16(color); - } -} - -struct BlockMode -{ - ivec2 weight_grid_size; - int weight_mode_index; - int num_partitions; - int seed; - int cem; - int config_bits; - int primary_config_bits; - bool dual_plane; - bool void_extent; -}; - -bool decode_error = false; - -BlockMode decode_block_mode(uvec4 payload) -{ - BlockMode mode; - mode.void_extent = (payload.x & 0x1ffu) == 0x1fcu; - if (mode.void_extent) - return mode; - - mode.dual_plane = (payload.x & (1u << 10u)) != 0u; - - uint higher = (payload.x >> 2u) & 3u; - uint lower = payload.x & 3u; - - if (lower != 0u) - { - mode.weight_mode_index = int((payload.x >> 4u) & 1u); - mode.weight_mode_index |= int((payload.x << 1u) & 6u); - mode.weight_mode_index |= int((payload.x >> 6u) & 8u); - - if (higher < 2u) - { - mode.weight_grid_size.x = int(bitfieldExtract(payload.x, 7, 2) + 4u + 4u * higher); - mode.weight_grid_size.y = int(bitfieldExtract(payload.x, 5, 2) + 2u); - } - else if (higher == 2u) - { - mode.weight_grid_size.x = int(bitfieldExtract(payload.x, 5, 2) + 2u); - mode.weight_grid_size.y = int(bitfieldExtract(payload.x, 7, 2) + 8u); - } - else - { - if ((payload.x & (1u << 8u)) != 0u) - { - mode.weight_grid_size.x = int(bitfieldExtract(payload.x, 7, 1) + 2u); - mode.weight_grid_size.y = int(bitfieldExtract(payload.x, 5, 2) + 2u); - } - else - { - mode.weight_grid_size.x = int(bitfieldExtract(payload.x, 5, 2) + 2u); - mode.weight_grid_size.y = int(bitfieldExtract(payload.x, 7, 1) + 6u); - } - } - } - else - { - int p3 = int(bitfieldExtract(payload.x, 9, 1)); - int hi = int(bitfieldExtract(payload.x, 7, 2)); - int lo = int(bitfieldExtract(payload.x, 5, 2)); - if (hi == 0) - { - mode.weight_grid_size.x = 12; - mode.weight_grid_size.y = lo + 2; - } - else if (hi == 1) - { - mode.weight_grid_size.x = lo + 2; - mode.weight_grid_size.y = 12; - } - else if (hi == 2) - { - mode.dual_plane = false; - p3 = 0; - mode.weight_grid_size.x = lo + 6; - mode.weight_grid_size.y = int(bitfieldExtract(payload.x, 9, 2) + 6u); - } - else - { - if (lo == 0) - mode.weight_grid_size = ivec2(6, 10); - else if (lo == 1) - mode.weight_grid_size = ivec2(10, 6); - else - decode_error = true; - } - - int p0 = int(bitfieldExtract(payload.x, 4, 1)); - int p1 = int(bitfieldExtract(payload.x, 2, 1)); - int p2 = int(bitfieldExtract(payload.x, 3, 1)); - mode.weight_mode_index = p0 + (p1 << 1) + (p2 << 2) + (p3 << 3); - } - - // 11 bits for block mode. - // 2 bits for partition select - // If partitions > 1: - // 4 bits CEM selector - // If dual_plane: - // 2 bits of CCS - // else: - // 10 for partition seed - // 2 bits for CEM main selector - // If CEM[1:0] = 00: - // 4 bits for CEM extra selector if all same type. - // else: - // (1 + 2) * num_partitions if different types. - // First 4 bits are encoded next to CEM[1:0], otherwise, packed before weights. - // If dual_plane: - // 2 bits of CCS before extra CEM bits. - const int CONFIG_BITS_BLOCK = 11; - const int CONFIG_BITS_PARTITION_MODE = 2; - const int CONFIG_BITS_SEED = 10; - const int CONFIG_BITS_PRIMARY_MULTI_CEM = 2; - const int CONFIG_BITS_CEM = 4; - const int CONFIG_BITS_EXTRA_CEM_PER_PARTITION = 3; - const int CONFIG_BITS_CCS = 2; - - mode.num_partitions = int(bitfieldExtract(payload.x, CONFIG_BITS_BLOCK, CONFIG_BITS_PARTITION_MODE)) + 1; - - if (mode.num_partitions > 1) - { - mode.seed = int(bitfieldExtract(payload.x, CONFIG_BITS_BLOCK + CONFIG_BITS_PARTITION_MODE, CONFIG_BITS_SEED)); - mode.cem = int(bitfieldExtract(payload.x, CONFIG_BITS_BLOCK + CONFIG_BITS_PARTITION_MODE + CONFIG_BITS_SEED, - CONFIG_BITS_PRIMARY_MULTI_CEM + CONFIG_BITS_CEM)); - } - else - mode.cem = int(bitfieldExtract(payload.x, CONFIG_BITS_BLOCK + CONFIG_BITS_PARTITION_MODE, CONFIG_BITS_CEM)); - - int config_bits; - if (mode.num_partitions > 1) - { - bool single_cem = (mode.cem & 3) == 0; - if (single_cem) - { - config_bits = CONFIG_BITS_BLOCK + CONFIG_BITS_PARTITION_MODE + - CONFIG_BITS_SEED + CONFIG_BITS_PRIMARY_MULTI_CEM + CONFIG_BITS_CEM; - } - else - { - config_bits = CONFIG_BITS_BLOCK + CONFIG_BITS_PARTITION_MODE + - CONFIG_BITS_SEED + CONFIG_BITS_PRIMARY_MULTI_CEM + - CONFIG_BITS_EXTRA_CEM_PER_PARTITION * mode.num_partitions; - } - } - else - { - config_bits = CONFIG_BITS_BLOCK + CONFIG_BITS_PARTITION_MODE + CONFIG_BITS_CEM; - } - - // Other config bits are packed before the weights. - int primary_config_bits; - if (mode.num_partitions > 1) - { - primary_config_bits = CONFIG_BITS_BLOCK + CONFIG_BITS_PARTITION_MODE + CONFIG_BITS_SEED + - CONFIG_BITS_PRIMARY_MULTI_CEM + CONFIG_BITS_CEM; - } - else - primary_config_bits = config_bits; - - if (mode.dual_plane) - config_bits += CONFIG_BITS_CCS; - - // This is not allowed. - if (any(greaterThan(mode.weight_grid_size, ivec2(gl_WorkGroupSize.xy)))) - decode_error = true; - if (mode.dual_plane && mode.num_partitions > 3) - decode_error = true; - - mode.config_bits = config_bits; - mode.primary_config_bits = primary_config_bits; - return mode; -} - -int idiv3_floor(int v) -{ - return (v * 0x5556) >> 16; -} - -int idiv3_ceil(int v) -{ - return idiv3_floor(v + 2); -} - -int idiv5_floor(int v) -{ - return (v * 0x3334) >> 16; -} - -int idiv5_ceil(int v) -{ - return idiv5_floor(v + 4); -} - -uvec4 build_bitmask(int bits) -{ - ivec4 num_bits = ivec4(bits, bits - 32, bits - 64, bits - 96); - uvec4 mask = uvec4(1) << clamp(num_bits, ivec4(0), ivec4(31)); - mask--; - mask = mix(mask, uvec4(0xffffffffu), greaterThanEqual(uvec4(bits), uvec4(32, 64, 96, 128))); - return mask; -} - -int decode_integer_sequence(uvec4 payload, int start_bit, int index, ivec3 quant) -{ - int ret; - if (quant.y != 0) - { - // Trit-decoding. - int block = idiv5_floor(index); - int offset = index - block * 5; - start_bit += block * (5 * quant.x + 8); - - int t0_t1_offset = start_bit + (quant.x * 1 + 0); - int t2_t3_offset = start_bit + (quant.x * 2 + 2); - int t4_offset = start_bit + (quant.x * 3 + 4); - int t5_t6_offset = start_bit + (quant.x * 4 + 5); - int t7_offset = start_bit + (quant.x * 5 + 7); - - int t = (extract_bits(payload, t0_t1_offset, 2) << 0) | - (extract_bits(payload, t2_t3_offset, 2) << 2) | - (extract_bits(payload, t4_offset, 1) << 4) | - (extract_bits(payload, t5_t6_offset, 2) << 5) | - (extract_bits(payload, t7_offset, 1) << 7); - - t = int(texelFetch(LUTTritQuintDecode, t).x); - t = (t >> (3 * offset)) & 7; - - int m_offset = offset * quant.x; - m_offset += idiv5_ceil(offset * 8); - - if (quant.x != 0) - { - int m = extract_bits(payload, m_offset + start_bit, quant.x); - ret = (t << quant.x) | m; - } - else - ret = t; - } - else if (quant.z != 0) - { - // Quint-decoding - int block = idiv3_floor(index); - int offset = index - block * 3; - start_bit += block * (3 * quant.x + 7); - - int q0_q1_q2_offset = start_bit + (quant.x * 1 + 0); - int q3_q4_offset = start_bit + (quant.x * 2 + 3); - int q5_q6_offset = start_bit + (quant.x * 3 + 5); - - int q = (extract_bits(payload, q0_q1_q2_offset, 3) << 0) | - (extract_bits(payload, q3_q4_offset, 2) << 3) | - (extract_bits(payload, q5_q6_offset, 2) << 5); - - q = int(texelFetch(LUTTritQuintDecode, 256 + q).x); - q = (q >> (3 * offset)) & 7; - - int m_offset = offset * quant.x; - m_offset += idiv3_ceil(offset * 7); - - if (quant.x != 0) - { - int m = extract_bits(payload, m_offset + start_bit, quant.x); - ret = (q << quant.x) | m; - } - else - ret = q; - } - else - { - int bit = index * quant.x; - ret = extract_bits(payload, start_bit + bit, quant.x); - } - return ret; -} - -ivec2 normalize_coord(ivec2 pixel_coord) -{ - // This resolves to a compile-time constant. - const ivec2 D = ivec2((vec2((1024 + ivec2(gl_WorkGroupSize.xy >> 1u))) + 0.5) / vec2(gl_WorkGroupSize.xy - 1u)); - ivec2 c = D * pixel_coord; - return c; -} - -int decode_weight(uvec4 payload, int weight_index, ivec4 quant) -{ - int primary_weight = decode_integer_sequence(payload, 0, weight_index, quant.xyz); - primary_weight = int(texelFetch(LUTWeightUnquantize, primary_weight + quant.w).x); - return primary_weight; -} - -int decode_weight_bilinear(uvec4 payload, ivec2 coord, int weight_resolution, - int stride, int offset, ivec2 fractional, ivec4 quant) -{ - int index = coord.y * weight_resolution + coord.x; - int p00 = decode_weight(payload, stride * index + offset, quant); - int p10, p01, p11; - - if (fractional.x != 0) - p10 = decode_weight(payload, stride * (index + 1) + offset, quant); - else - p10 = p00; - - if (fractional.y != 0) - { - p01 = decode_weight(payload, stride * (index + weight_resolution) + offset, quant); - if (fractional.x != 0) - p11 = decode_weight(payload, stride * (index + weight_resolution + 1) + offset, quant); - else - p11 = p01; - } - else - { - p01 = p00; - p11 = p10; - } - - int w11 = (fractional.x * fractional.y + 8) >> 4; - int w10 = fractional.x - w11; - int w01 = fractional.y - w11; - int w00 = 16 - fractional.x - fractional.y + w11; - return (p00 * w00 + p10 * w10 + p01 * w01 + p11 * w11 + 8) >> 4; -} - -ivec4 decode_weights(uvec4 payload, BlockMode mode, ivec2 normalized_pixel, out int weight_cost_bits) -{ - ivec4 quant = ivec4(texelFetch(LUTWeightQuantizer, mode.weight_mode_index)); - int num_weights = mode.weight_grid_size.x * mode.weight_grid_size.y; - num_weights <<= int(mode.dual_plane); - weight_cost_bits = - quant.x * num_weights + - idiv5_ceil(num_weights * 8 * quant.y) + - idiv3_ceil(num_weights * 7 * quant.z); - - // Decoders must deal with error conditions and return the correct error color. - if (weight_cost_bits < 24 || weight_cost_bits > 96 || num_weights > 64) - { - decode_error = true; - return ivec4(0); - } - - int ccs; - if (mode.dual_plane) - { - int extra_cem_bits = 0; - if ((mode.cem & 3) != 0) - extra_cem_bits = max(mode.num_partitions * 3 - 4, 0); - ccs = extract_bits(payload, 126 - weight_cost_bits - extra_cem_bits, 2); - } - - payload = bitfieldReverse(payload); - payload = payload.wzyx; - payload &= build_bitmask(weight_cost_bits); - - // Scale the normalized coordinate to weight grid. - ivec2 weight_pixel_fixed_point = (normalized_pixel * (mode.weight_grid_size - 1) + 32) >> 6; - ivec2 weight_pixel = weight_pixel_fixed_point >> 4; - ivec2 weight_pixel_fractional = weight_pixel_fixed_point & 0xf; - - ivec4 ret; - int primary_weight = decode_weight_bilinear(payload, weight_pixel, mode.weight_grid_size.x, - 1 << int(mode.dual_plane), 0, - weight_pixel_fractional, quant); - if (mode.dual_plane) - { - int secondary_weight = decode_weight_bilinear(payload, weight_pixel, mode.weight_grid_size.x, - 2, 1, - weight_pixel_fractional, quant); - ret = mix(ivec4(primary_weight), ivec4(secondary_weight), equal(ivec4(ccs), ivec4(0, 1, 2, 3))); - } - else - ret = ivec4(primary_weight); - - return ret; -} - -void decode_endpoint_ldr_luma_direct(out ivec4 ep0, out ivec4 ep1, - int v0, int v1) -{ - ep0 = ivec4(ivec3(v0), 0xff); - ep1 = ivec4(ivec3(v1), 0xff); -} - -void decode_endpoint_hdr_luma_direct(out ivec4 ep0, out ivec4 ep1, - int v0, int v1) -{ - int y0, y1; - if (v1 >= v0) - { - y0 = v0 << 4; - y1 = v1 << 4; - } - else - { - y0 = (v1 << 4) + 8; - y1 = (v0 << 4) - 8; - } - - ep0 = ivec4(ivec3(y0), 0x780); - ep1 = ivec4(ivec3(y1), 0x780); -} - -void decode_endpoint_hdr_luma_direct_small_range(out ivec4 ep0, out ivec4 ep1, - int v0, int v1) -{ - int y0, y1, d; - - if ((v0 & 0x80) != 0) - { - y0 = ((v1 & 0xe0) << 4) | ((v0 & 0x7f) << 2); - d = (v1 & 0x1f) << 2; - } - else - { - y0 = ((v1 & 0xf0) << 4) | ((v0 & 0x7f) << 1); - d = (v1 & 0x0f) << 1; - } - - y1 = min(y0 + d, 0xfff); - - ep0 = ivec4(ivec3(y0), 0x780); - ep1 = ivec4(ivec3(y1), 0x780); -} - -void decode_endpoint_ldr_luma_base_offset(out ivec4 ep0, out ivec4 ep1, - int v0, int v1) -{ - int l0 = (v0 >> 2) | (v1 & 0xc0); - int l1 = l0 + (v1 & 0x3f); - l1 = min(l1, 0xff); - ep0 = ivec4(ivec3(l0), 0xff); - ep1 = ivec4(ivec3(l1), 0xff); -} - -void decode_endpoint_ldr_luma_alpha_direct(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3) -{ - ep0 = ivec4(ivec3(v0), v2); - ep1 = ivec4(ivec3(v1), v3); -} - -ivec4 blue_contract(int r, int g, int b, int a) -{ - ivec4 ret; - ret.r = (r + b) >> 1; - ret.g = (g + b) >> 1; - ret.b = b; - ret.a = a; - return ret; -} - -void bit_transfer_signed(inout int a, inout int b) -{ - b >>= 1; - b |= a & 0x80; - a >>= 1; - a &= 0x3f; - a = bitfieldExtract(a, 0, 6); -} - -void decode_endpoint_ldr_luma_alpha_base_offset(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3) -{ - bit_transfer_signed(v1, v0); - bit_transfer_signed(v3, v2); - int v0_v1 = clamp(v0 + v1, 0, 0xff); - int v2_v3 = clamp(v2 + v3, 0, 0xff); - v0 = clamp(v0, 0, 0xff); - v2 = clamp(v2, 0, 0xff); - ep0 = ivec4(ivec3(v0), v2); - ep1 = ivec4(ivec3(v0_v1), v2_v3); -} - -void decode_endpoint_ldr_rgb_base_scale(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3) -{ - ep0 = ivec4((ivec3(v0, v1, v2) * v3) >> 8, 0xff); - ep1 = ivec4(v0, v1, v2, 0xff); -} - -void decode_endpoint_ldr_rgb_base_scale_two_a(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3, int v4, int v5) -{ - ep0 = ivec4((ivec3(v0, v1, v2) * v3) >> 8, v4); - ep1 = ivec4(v0, v1, v2, v5); -} - -void decode_endpoint_ldr_rgb_direct(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3, int v4, int v5) -{ - int s0 = v0 + v2 + v4; - int s1 = v1 + v3 + v5; - if (s1 >= s0) - { - ep0 = ivec4(v0, v2, v4, 0xff); - ep1 = ivec4(v1, v3, v5, 0xff); - } - else - { - ep0 = blue_contract(v1, v3, v5, 0xff); - ep1 = blue_contract(v0, v2, v4, 0xff); - } -} - -void decode_endpoint_hdr_rgb_scale(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3) -{ - // Mind-numbing weird format, just copy from spec ... - int mode_value = ((v0 & 0xc0) >> 6) | ((v1 & 0x80) >> 5) | ((v2 & 0x80) >> 4); - int major_component; - int mode; - - if ((mode_value & 0xc) != 0xc) - { - major_component = mode_value >> 2; - mode = mode_value & 3; - } - else if (mode_value != 0xf) - { - major_component = mode_value & 3; - mode = 4; - } - else - { - major_component = 0; - mode = 5; - } - - int red = v0 & 0x3f; - int green = v1 & 0x1f; - int blue = v2 & 0x1f; - int scale = v3 & 0x1f; - - int x0 = (v1 >> 6) & 1; - int x1 = (v1 >> 5) & 1; - int x2 = (v2 >> 6) & 1; - int x3 = (v2 >> 5) & 1; - int x4 = (v3 >> 7) & 1; - int x5 = (v3 >> 6) & 1; - int x6 = (v3 >> 5) & 1; - - int ohm = 1 << mode; - if ((ohm & 0x30) != 0) green |= x0 << 6; - if ((ohm & 0x3a) != 0) green |= x1 << 5; - if ((ohm & 0x30) != 0) blue |= x2 << 6; - if ((ohm & 0x3a) != 0) blue |= x3 << 5; - if ((ohm & 0x3d) != 0) scale |= x6 << 5; - if ((ohm & 0x2d) != 0) scale |= x5 << 6; - if ((ohm & 0x04) != 0) scale |= x4 << 7; - if ((ohm & 0x3b) != 0) red |= x4 << 6; - if ((ohm & 0x04) != 0) red |= x3 << 6; - if ((ohm & 0x10) != 0) red |= x5 << 7; - if ((ohm & 0x0f) != 0) red |= x2 << 7; - if ((ohm & 0x05) != 0) red |= x1 << 8; - if ((ohm & 0x0a) != 0) red |= x0 << 8; - if ((ohm & 0x05) != 0) red |= x0 << 9; - if ((ohm & 0x02) != 0) red |= x6 << 9; - if ((ohm & 0x01) != 0) red |= x3 << 10; - if ((ohm & 0x02) != 0) red |= x5 << 10; - - int shamt = max(mode, 1); - red <<= shamt; - green <<= shamt; - blue <<= shamt; - scale <<= shamt; - - if (mode != 5) - { - green = red - green; - blue = red - blue; - } - - if (major_component == 1) - swap(red, green); - else if (major_component == 2) - swap(red, blue); - - ep1 = ivec4(clamp(ivec3(red, green, blue), ivec3(0), ivec3(0xfff)), 0x780); - ep0 = ivec4(clamp(ivec3(red, green, blue) - scale, ivec3(0), ivec3(0xfff)), 0x780); -} - -void decode_endpoint_hdr_rgb_direct(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3, int v4, int v5) -{ - int major_component = ((v4 & 0x80) >> 7) | ((v5 & 0x80) >> 6); - - if (major_component == 3) - { - ep0 = ivec4(v0 << 4, v2 << 4, (v4 & 0x7f) << 5, 0x780); - ep1 = ivec4(v1 << 4, v3 << 4, (v5 & 0x7f) << 5, 0x780); - return; - } - - int mode = ((v1 & 0x80) >> 7) | ((v2 & 0x80) >> 6) | ((v3 & 0x80) >> 5); - int va = v0 | ((v1 & 0x40) << 2); - int vb0 = v2 & 0x3f; - int vb1 = v3 & 0x3f; - int vc = v1 & 0x3f; - int vd0 = v4 & 0x7f; - int vd1 = v5 & 0x7f; - - int d_bits = 7 - (mode & 1); - if ((mode & 5) == 4) - d_bits -= 2; - - vd0 = bitfieldExtract(vd0, 0, d_bits); - vd1 = bitfieldExtract(vd1, 0, d_bits); - - int x0 = (v2 >> 6) & 1; - int x1 = (v3 >> 6) & 1; - int x2 = (v4 >> 6) & 1; - int x3 = (v5 >> 6) & 1; - int x4 = (v4 >> 5) & 1; - int x5 = (v5 >> 5) & 1; - - int ohm = 1 << mode; - if ((ohm & 0xa4) != 0) va |= x0 << 9; - if ((ohm & 0x08) != 0) va |= x2 << 9; - if ((ohm & 0x50) != 0) va |= x4 << 9; - if ((ohm & 0x50) != 0) va |= x5 << 10; - if ((ohm & 0xa0) != 0) va |= x1 << 10; - if ((ohm & 0xc0) != 0) va |= x2 << 11; - - if ((ohm & 0x04) != 0) vc |= x1 << 6; - if ((ohm & 0xe8) != 0) vc |= x3 << 6; - if ((ohm & 0x20) != 0) vc |= x2 << 7; - - if ((ohm & 0x5b) != 0) vb0 |= x0 << 6; - if ((ohm & 0x5b) != 0) vb1 |= x1 << 6; - if ((ohm & 0x12) != 0) vb0 |= x2 << 7; - if ((ohm & 0x12) != 0) vb1 |= x3 << 7; - - int shamt = (mode >> 1) ^ 3; - va <<= shamt; - vb0 <<= shamt; - vb1 <<= shamt; - vc <<= shamt; - vd0 <<= shamt; - vd1 <<= shamt; - - ep1 = ivec4(clamp(ivec3(va, va - vb0, va - vb1), ivec3(0), ivec3(0xfff)), 0x780); - ep0 = ivec4(clamp(ivec3(va - vc, va - vb0 - vc - vd0, va - vb1 - vc - vd1), ivec3(0), ivec3(0xfff)), 0x780); - - if (major_component == 1) - { - swap(ep0.r, ep0.g); - swap(ep1.r, ep1.g); - } - else if (major_component == 2) - { - swap(ep0.r, ep0.b); - swap(ep1.r, ep1.b); - } -} - -void decode_endpoint_ldr_rgb_base_offset(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3, int v4, int v5) -{ - bit_transfer_signed(v1, v0); - bit_transfer_signed(v3, v2); - bit_transfer_signed(v5, v4); - if (v1 + v3 + v5 >= 0) - { - ep0 = ivec4(v0, v2, v4, 0xff); - ep1 = ivec4(v0 + v1, v2 + v3, v4 + v5, 0xff); - } - else - { - ep0 = blue_contract(v0 + v1, v2 + v3, v4 + v5, 0xff); - ep1 = blue_contract(v0, v2, v4, 0xff); - } - - ep0.rgb = clamp(ep0.rgb, ivec3(0), ivec3(0xff)); - ep1.rgb = clamp(ep1.rgb, ivec3(0), ivec3(0xff)); -} - -void decode_endpoint_ldr_rgba_direct(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3, - int v4, int v5, int v6, int v7) -{ - int s0 = v0 + v2 + v4; - int s1 = v1 + v3 + v5; - if (s1 >= s0) - { - ep0 = ivec4(v0, v2, v4, v6); - ep1 = ivec4(v1, v3, v5, v7); - } - else - { - ep0 = blue_contract(v1, v3, v5, v7); - ep1 = blue_contract(v0, v2, v4, v6); - } -} - -void decode_endpoint_ldr_rgba_base_offset(out ivec4 ep0, out ivec4 ep1, - int v0, int v1, int v2, int v3, int v4, int v5, int v6, int v7) -{ - bit_transfer_signed(v1, v0); - bit_transfer_signed(v3, v2); - bit_transfer_signed(v5, v4); - bit_transfer_signed(v7, v6); - - if (v1 + v3 + v5 >= 0) - { - ep0 = ivec4(v0, v2, v4, v6); - ep1 = ivec4(v0 + v1, v2 + v3, v4 + v5, v6 + v7); - } - else - { - ep0 = blue_contract(v0 + v1, v2 + v3, v4 + v5, v6 + v7); - ep1 = blue_contract(v0, v2, v4, v6); - } - - ep0 = clamp(ep0, ivec4(0), ivec4(0xff)); - ep1 = clamp(ep1, ivec4(0), ivec4(0xff)); -} - -void decode_endpoint_hdr_alpha(out int ep0, out int ep1, int v6, int v7) -{ - int mode = ((v6 >> 7) & 1) | ((v7 >> 6) & 2); - v6 &= 0x7f; - v7 &= 0x7f; - - if (mode == 3) - { - ep0 = v6 << 5; - ep1 = v7 << 5; - } - else - { - v6 |= (v7 << (mode + 1)) & 0x780; - v7 &= 0x3f >> mode; - v7 ^= 0x20 >> mode; - v7 -= 0x20 >> mode; - v6 <<= 4 - mode; - v7 <<= 4 - mode; - v7 += v6; - v7 = clamp(v7, 0, 0xfff); - ep0 = v6; - ep1 = v7; - } -} - -void decode_endpoint(out ivec4 ep0, out ivec4 ep1, out int decode_mode, - uvec4 payload, int bit_offset, ivec4 quant, int ep_mode, - int base_endpoint_index, int num_endpoint_bits) -{ - num_endpoint_bits += bit_offset; - payload &= build_bitmask(num_endpoint_bits); - - // Could of course use an array, but that doesn't lower nicely to indexed registers on all GPUs. - int v0, v1, v2, v3, v4, v5, v6, v7; - int num_values = 2 * ((ep_mode >> 2) + 1); - -#define DECODE_EP(i) \ - int(texelFetch(LUTEndpointUnquantize, quant.w + decode_integer_sequence(payload, bit_offset, i + base_endpoint_index, quant.xyz)).x) - - int hi_bits = ep_mode >> 2; - v0 = DECODE_EP(0); - v1 = DECODE_EP(1); - - if (hi_bits >= 1) - { - v2 = DECODE_EP(2); - v3 = DECODE_EP(3); - } - - if (hi_bits >= 2) - { - v4 = DECODE_EP(4); - v5 = DECODE_EP(5); - } - - if (hi_bits >= 3) - { - v6 = DECODE_EP(6); - v7 = DECODE_EP(7); - } - - switch (ep_mode) - { - case 0: - decode_endpoint_ldr_luma_direct(ep0, ep1, - v0, v1); - decode_mode = MODE_LDR; - break; - - case 1: - decode_endpoint_ldr_luma_base_offset(ep0, ep1, - v0, v1); - decode_mode = MODE_LDR; - break; - - case 2: - decode_endpoint_hdr_luma_direct(ep0, ep1, - v0, v1); - decode_mode = MODE_HDR; - break; - - case 3: - decode_endpoint_hdr_luma_direct_small_range(ep0, ep1, - v0, v1); - decode_mode = MODE_HDR; - break; - - case 4: - decode_endpoint_ldr_luma_alpha_direct(ep0, ep1, - v0, v1, v2, v3); - decode_mode = MODE_LDR; - break; - - case 5: - decode_endpoint_ldr_luma_alpha_base_offset(ep0, ep1, - v0, v1, v2, v3); - decode_mode = MODE_LDR; - break; - - case 6: - decode_endpoint_ldr_rgb_base_scale(ep0, ep1, - v0, v1, v2, v3); - decode_mode = MODE_LDR; - break; - - case 7: - decode_endpoint_hdr_rgb_scale(ep0, ep1, - v0, v1, v2, v3); - decode_mode = MODE_HDR; - break; - - case 8: - decode_endpoint_ldr_rgb_direct(ep0, ep1, - v0, v1, v2, v3, v4, v5); - decode_mode = MODE_LDR; - break; - - case 9: - decode_endpoint_ldr_rgb_base_offset(ep0, ep1, - v0, v1, v2, v3, v4, v5); - decode_mode = MODE_LDR; - break; - - case 10: - decode_endpoint_ldr_rgb_base_scale_two_a(ep0, ep1, - v0, v1, v2, v3, v4, v5); - decode_mode = MODE_LDR; - break; - - case 11: - case 14: - case 15: - decode_endpoint_hdr_rgb_direct(ep0, ep1, - v0, v1, v2, v3, v4, v5); - if (ep_mode == 14) - { - ep0.a = v6; - ep1.a = v7; - decode_mode = MODE_HDR_LDR_ALPHA; - } - else if (ep_mode == 15) - { - decode_endpoint_hdr_alpha(ep0.a, ep1.a, v6, v7); - decode_mode = MODE_HDR; - } - else - decode_mode = MODE_HDR; - break; - - case 12: - decode_endpoint_ldr_rgba_direct(ep0, ep1, - v0, v1, v2, v3, v4, v5, v6, v7); - decode_mode = MODE_LDR; - break; - - case 13: - decode_endpoint_ldr_rgba_base_offset(ep0, ep1, - v0, v1, v2, v3, v4, v5, v6, v7); - decode_mode = MODE_LDR; - break; - } - - if (DECODE_8BIT && decode_mode != MODE_LDR) - decode_error = true; -} - -#define CHECK_DECODE_ERROR() do { \ - if (decode_error) \ - { \ - emit_decode_error(coord.xy); \ - return; \ - } \ -} while(false) - -void emit_decode_error(ivec2 coord) -{ - imageStore(OutputImage, coord, error_color); -} - -int compute_num_endpoint_pairs(int num_partitions, int cem) -{ - int ret; - if (num_partitions > 1) - { - bool single_cem = (cem & 3) == 0; - if (single_cem) - ret = ((cem >> 4) + 1) * num_partitions; - else - ret = (cem & 3) * num_partitions + bitCount(bitfieldExtract(uint(cem), 2, num_partitions)); - } - else - { - ret = (cem >> 2) + 1; - } - return ret; -} - -void decode_cem_base_endpoint(uvec4 payload, int weight_cost_bits, inout int cem, out int base_endpoint_index, - int num_partitions, int partition_index) -{ - if (num_partitions > 1) - { - bool single_cem = (cem & 3) == 0; - if (single_cem) - { - cem >>= 2; - base_endpoint_index = ((cem >> 2) + 1) * partition_index; - } - else - { - if (partition_index != 0) - base_endpoint_index = (cem & 3) * partition_index + bitCount(bitfieldExtract(uint(cem), 2, partition_index)); - else - base_endpoint_index = 0; - - int base_class = (cem & 3) - 1; - int extra_cem_bits = num_partitions * 3 - 4; - int extra_bits = extract_bits(payload, 128 - weight_cost_bits - extra_cem_bits, extra_cem_bits); - cem = (extra_bits << 4) | (cem >> 2); - - int class_offset_bit = (cem >> partition_index) & 1; - int ep_bits = (cem >> (num_partitions + 2 * partition_index)) & 3; - - cem = 4 * (base_class + class_offset_bit) + ep_bits; - } - base_endpoint_index *= 2; - } - else - { - base_endpoint_index = 0; - } -} - -ivec4 void_extent_color(uvec4 payload, out int decode_mode) -{ - int min_s = extract_bits(payload, 12, 13); - int max_s = extract_bits(payload, 12 + 13, 13); - int min_t = extract_bits(payload, 12 + 2 * 13, 13); - int max_t = extract_bits(payload, 12 + 3 * 13, 13); - - int reserved = extract_bits(payload, 10, 2); - if (reserved != 3) - { - decode_error = true; - return ivec4(0); - } - - if (!all(equal(ivec4(min_s, max_s, min_t, max_t), ivec4((1 << 13) - 1)))) - { - if (any(greaterThanEqual(ivec2(min_s, min_t), ivec2(max_s, max_t)))) - { - decode_error = true; - return ivec4(0); - } - } - - decode_mode = (payload.x & (1u << 9)) != 0u ? MODE_HDR : MODE_LDR; - - int r = extract_bits(payload, 64, 16); - int g = extract_bits(payload, 64 + 16, 16); - int b = extract_bits(payload, 64 + 32, 16); - int a = extract_bits(payload, 64 + 48, 16); - - return ivec4(r, g, b, a); -} - -void main() -{ - ivec4 coord = build_coord(); - if (any(greaterThanEqual(coord.xy, imageSize(OutputImage)))) - return; - - ivec2 pixel_coord = ivec2(gl_LocalInvocationID.xy); - int linear_pixel = int(gl_WorkGroupSize.x) * pixel_coord.y + pixel_coord.x; - uvec4 payload = texelFetch(PayloadInput, coord.zw, 0); - - BlockMode block_mode = decode_block_mode(payload); - CHECK_DECODE_ERROR(); - - ivec4 final_color; - int decode_mode; - if (block_mode.void_extent) - { - final_color = void_extent_color(payload, decode_mode); - CHECK_DECODE_ERROR(); - } - else - { - int weight_cost_bits; - ivec4 weights = decode_weights(payload, block_mode, normalize_coord(pixel_coord), weight_cost_bits); - - int partition_index = 0; - if (block_mode.num_partitions > 1) - { - int lut_x = pixel_coord.x + int(gl_WorkGroupSize.x) * (block_mode.seed & 31); - int lut_y = pixel_coord.y + int(gl_WorkGroupSize.y) * (block_mode.seed >> 5); - partition_index = int(texelFetch(LUTPartitionTable, ivec2(lut_x, lut_y), 0).x); - partition_index = (partition_index >> (2 * block_mode.num_partitions - 4)) & 3; - } - - int available_endpoint_bits = max(128 - block_mode.config_bits - weight_cost_bits, 0); - - // In multi-partition mode, the 6-bit CEM field is encoded as - // First two bits tell if all CEM field are the same, if not we specify a class offset, and N bits - // after that will offset the class by 1. - int num_endpoint_pairs = compute_num_endpoint_pairs(block_mode.num_partitions, block_mode.cem); - - // Error color must be emitted if we need more than 18 integer sequence encoded values of color. - if (num_endpoint_pairs > 9) - { - decode_error = true; - emit_decode_error(coord.xy); - return; - } - - ivec4 endpoint_quant = ivec4(texelFetch(LUTRemainingBitsToEndpointQuantizer, - 128 * (num_endpoint_pairs - 1) + available_endpoint_bits)); - - // Only read the bits we need for endpoints. - int num_endpoint_values = num_endpoint_pairs * 2; - available_endpoint_bits = - endpoint_quant.x * num_endpoint_values + - idiv5_ceil(endpoint_quant.y * 8 * num_endpoint_values) + - idiv3_ceil(endpoint_quant.z * 7 * num_endpoint_values); - - // No space left for color endpoints. - if (all(equal(endpoint_quant.xyz, ivec3(0)))) - { - decode_error = true; - emit_decode_error(coord.xy); - return; - } - - int endpoint_bit_offset = block_mode.primary_config_bits; - ivec4 ep0, ep1; - - // Decode CEM for multi-partition schemes. - int cem = block_mode.cem; - int base_endpoint_index; - decode_cem_base_endpoint(payload, weight_cost_bits, cem, base_endpoint_index, - block_mode.num_partitions, partition_index); - - decode_endpoint(ep0, ep1, decode_mode, payload, endpoint_bit_offset, endpoint_quant, - cem, base_endpoint_index, available_endpoint_bits); - CHECK_DECODE_ERROR(); - - final_color = interpolate_endpoint(ep0, ep1, weights, decode_mode); - } - - if (DECODE_8BIT) - { - imageStore(OutputImage, coord.xy, uvec4(final_color >> 8)); - } - else - { - uvec4 encoded; - if (block_mode.void_extent && decode_mode == MODE_HDR) - encoded = uvec4(final_color); - else - encoded = decode_fp16(final_color, decode_mode); - imageStore(OutputImage, coord.xy, encoded); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/astc_glsl.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/astc_glsl.h deleted file mode 100644 index b6e54bd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/astc_glsl.h +++ /dev/null @@ -1,1886 +0,0 @@ -static const char astc_source[] = { -0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x32, 0x30, 0x20, 0x65, 0x73, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3b, 0x0a, 0x70, 0x72, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x69, 0x6e, 0x74, 0x3b, 0x0a, 0x70, 0x72, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x75, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x3b, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x67, - 0x68, 0x70, 0x20, 0x75, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x3b, 0x0a, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x32, 0x44, 0x3b, 0x0a, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x75, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x32, - 0x44, 0x3b, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, - 0x32, 0x30, 0x32, 0x30, 0x2d, 0x32, 0x30, 0x32, 0x32, 0x20, 0x48, 0x61, 0x6e, 0x73, 0x2d, 0x4b, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x61, 0x6e, 0x20, 0x41, 0x72, 0x6e, 0x74, 0x7a, 0x65, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x32, 0x32, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x6c, 0x20, 0x43, 0x6f, 0x72, - 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0x62, 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, - 0x64, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x6f, - 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, - 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, - 0x28, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x22, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x29, 0x2c, 0x20, - 0x74, 0x6f, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x2a, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, - 0x75, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2c, 0x20, 0x6d, 0x6f, 0x64, - 0x69, 0x66, 0x79, 0x2c, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2c, 0x0a, - 0x20, 0x2a, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, - 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2c, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, - 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x66, 0x75, 0x72, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, - 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x3a, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, - 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, - 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, - 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, - 0x45, 0x44, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, 0x2c, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, - 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x0a, - 0x20, 0x2a, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, - 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, - 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x20, 0x54, 0x48, 0x45, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, - 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x0a, 0x20, 0x2a, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, 0x41, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, - 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, 0x20, 0x41, 0x4e, 0x44, - 0x20, 0x4e, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x52, 0x49, 0x4e, 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x2e, 0x0a, 0x20, 0x2a, 0x20, - 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, 0x54, 0x48, 0x45, - 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, - 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, - 0x52, 0x20, 0x41, 0x4e, 0x59, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x2c, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, - 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, - 0x2c, 0x20, 0x57, 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x41, 0x4e, 0x20, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x20, 0x4f, 0x46, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x4f, 0x52, - 0x54, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, 0x53, 0x45, 0x2c, 0x20, 0x41, 0x52, 0x49, 0x53, 0x49, - 0x4e, 0x47, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x2c, 0x20, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, - 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x57, 0x49, 0x54, 0x48, 0x20, 0x54, 0x48, 0x45, 0x0a, - 0x20, 0x2a, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x54, 0x48, 0x45, 0x20, 0x55, 0x53, - 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x20, 0x44, 0x45, 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x53, 0x20, 0x49, - 0x4e, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, - 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x78, 0x20, 0x3d, - 0x20, 0x25, 0x75, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x25, - 0x75, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x7a, 0x20, 0x3d, 0x20, 0x34, 0x29, 0x20, - 0x69, 0x6e, 0x3b, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x75, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x20, 0x75, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x4c, 0x55, 0x54, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x42, 0x69, 0x74, 0x73, 0x54, 0x6f, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, 0x61, 0x6e, - 0x74, 0x69, 0x7a, 0x65, 0x72, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, - 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x4c, 0x55, 0x54, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x6e, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x4c, 0x55, 0x54, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x51, - 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x72, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x33, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x4c, 0x55, 0x54, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x55, - 0x6e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x4c, 0x55, 0x54, 0x54, 0x72, 0x69, 0x74, 0x51, 0x75, - 0x69, 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x35, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x20, 0x4c, 0x55, 0x54, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x3d, 0x20, 0x36, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x32, 0x44, 0x20, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, - 0x6f, 0x75, 0x74, 0x28, 0x72, 0x67, 0x62, 0x61, 0x38, 0x75, 0x69, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x3d, 0x20, 0x37, 0x29, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x75, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x32, 0x44, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x3b, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, - 0x38, 0x42, 0x49, 0x54, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0x0a, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x5f, 0x4c, 0x44, 0x52, - 0x5f, 0x41, 0x4c, 0x50, 0x48, 0x41, 0x20, 0x3d, 0x20, 0x32, 0x3b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x76, - 0x65, 0x63, 0x34, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x76, 0x65, - 0x63, 0x34, 0x28, 0x32, 0x35, 0x35, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x32, 0x35, 0x35, 0x2c, 0x20, 0x32, 0x35, 0x35, 0x29, 0x3b, - 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x62, 0x69, 0x74, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x2e, 0x68, 0x20, 0x2a, 0x2f, 0x0a, - 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x75, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, - 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x3d, - 0x3d, 0x20, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, - 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x5d, 0x2c, 0x20, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x33, 0x32, 0x20, 0x2d, 0x20, 0x28, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, - 0x3e, 0x20, 0x35, 0x5d, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5b, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, - 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x7c, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x62, - 0x69, 0x74, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x2e, 0x68, 0x20, 0x2a, 0x2f, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x28, 0x75, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, - 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x28, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x3d, 0x3d, - 0x20, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x62, - 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x69, 0x6e, 0x74, 0x28, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x5d, 0x29, 0x2c, 0x20, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x33, 0x32, 0x20, 0x2d, 0x20, 0x28, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, - 0x20, 0x35, 0x5d, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, - 0x69, 0x6e, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5b, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, - 0x3e, 0x20, 0x35, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x7c, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x62, 0x69, - 0x74, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x2e, 0x68, 0x20, 0x2a, 0x2f, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x28, 0x75, 0x76, 0x65, - 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, - 0x3d, 0x3d, 0x20, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, - 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x28, - 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x5b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x5d, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x33, - 0x32, 0x20, 0x2d, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, - 0x74, 0x73, 0x20, 0x3d, 0x20, 0x33, 0x32, 0x20, 0x2d, 0x20, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x26, 0x20, 0x33, - 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x69, - 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x5b, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x5d, 0x2c, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x20, 0x26, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5b, 0x28, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x5d, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x62, - 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, - 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, - 0x28, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x7c, 0x20, 0x28, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x62, 0x69, - 0x74, 0x73, 0x29, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x33, 0x32, 0x20, 0x2d, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, - 0x73, 0x77, 0x61, 0x70, 0x28, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x2c, 0x20, 0x69, 0x6e, 0x6f, - 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x74, - 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x62, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, - 0x65, 0x63, 0x32, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x69, - 0x76, 0x65, 0x63, 0x32, 0x28, 0x67, 0x6c, 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x2e, 0x78, - 0x79, 0x29, 0x20, 0x2a, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, - 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x20, 0x2b, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x67, 0x6c, 0x5f, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x7a, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, - 0x2b, 0x3d, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x28, 0x67, 0x6c, 0x5f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x7a, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x20, 0x2a, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x67, - 0x6c, 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x79, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x20, 0x2b, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x67, 0x6c, - 0x5f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x78, 0x79, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, - 0x6f, 0x6f, 0x72, 0x64, 0x2c, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x28, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x20, 0x3d, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x5f, 0x4c, 0x44, 0x52, 0x5f, - 0x41, 0x4c, 0x50, 0x48, 0x41, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x70, 0x30, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x70, 0x31, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x2e, 0x61, 0x20, 0x2a, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x30, 0x31, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x2e, 0x61, 0x20, 0x2a, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x30, 0x31, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x38, 0x42, 0x49, 0x54, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x71, - 0x75, 0x69, 0x74, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x61, 0x73, - 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x6e, 0x20, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x20, 0x41, 0x53, 0x54, 0x43, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x52, 0x47, 0x42, 0x2c, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, - 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x46, 0x50, 0x31, 0x36, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, - 0x53, 0x52, 0x47, 0x42, 0x20, 0x38, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x28, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x21, 0x29, - 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x69, 0x66, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x75, 0x6e, 0x6f, - 0x72, 0x6d, 0x38, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x68, 0x6f, 0x75, - 0x67, 0x68, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x61, - 0x6e, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x77, 0x65, 0x27, 0x72, 0x65, 0x20, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x75, 0x6e, 0x6f, 0x72, 0x6d, 0x38, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x73, 0x20, - 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x52, - 0x47, 0x42, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x28, 0x65, 0x70, - 0x30, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x38, 0x30, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x65, 0x70, 0x31, 0x20, - 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x7c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x38, 0x30, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x2a, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x30, 0x31, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x2a, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x30, 0x31, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x65, 0x70, 0x30, 0x20, 0x2a, 0x20, 0x28, 0x36, 0x34, 0x20, 0x2d, 0x20, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x29, 0x20, 0x2b, 0x20, 0x65, 0x70, 0x31, 0x20, 0x2a, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x2b, 0x20, 0x33, 0x32, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x62, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x76, 0x65, - 0x63, 0x5f, 0x6f, 0x72, 0x28, 0x62, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x2c, 0x20, 0x62, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, - 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x76, 0x65, 0x63, 0x34, 0x28, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x61, 0x29, 0x20, 0x7c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x62, 0x29, 0x29, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x71, - 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x70, 0x31, 0x36, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x53, 0x54, 0x43, 0x20, 0x68, 0x61, 0x73, 0x20, - 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x69, 0x61, 0x72, 0x20, 0x77, 0x61, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x46, 0x50, 0x31, 0x36, 0x2e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x20, 0x2d, 0x3e, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6c, - 0x73, 0x65, 0x20, 0x77, 0x65, 0x20, 0x67, 0x65, 0x74, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x51, 0x75, - 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x46, 0x50, 0x31, 0x36, 0x28, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x29, 0x20, 0x2f, 0x20, - 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x31, 0x30, 0x30, 0x30, 0x30, 0x29, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x6d, 0x73, 0x62, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x4d, 0x53, 0x42, 0x28, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x20, 0x3d, 0x20, 0x6d, - 0x73, 0x62, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x29, 0x20, 0x26, - 0x20, 0x30, 0x78, 0x33, 0x66, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x20, 0x3d, 0x20, 0x6d, - 0x73, 0x62, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, - 0x20, 0x3f, 0x20, 0x30, 0x78, 0x33, 0x63, 0x30, 0x30, 0x75, 0x20, 0x3a, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x65, 0x20, 0x3c, - 0x20, 0x31, 0x20, 0x3f, 0x20, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x20, 0x3a, 0x20, 0x28, - 0x6d, 0x20, 0x7c, 0x20, 0x28, 0x65, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x76, - 0x65, 0x63, 0x34, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, - 0x7a, 0x65, 0x5f, 0x66, 0x70, 0x31, 0x36, 0x28, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x41, 0x53, 0x54, 0x43, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x20, 0x76, - 0x65, 0x72, 0x79, 0x20, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x69, 0x61, 0x72, 0x20, 0x77, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x46, 0x50, 0x31, 0x36, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x2f, 0x2f, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x20, 0x2d, 0x3e, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, - 0x77, 0x65, 0x20, 0x67, 0x65, 0x74, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x44, 0x6f, 0x77, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, - 0x69, 0x7a, 0x65, 0x46, 0x50, 0x31, 0x36, 0x28, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x29, 0x20, 0x2f, 0x20, 0x76, 0x65, 0x63, - 0x34, 0x28, 0x30, 0x78, 0x31, 0x30, 0x30, 0x30, 0x30, 0x29, 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x6d, 0x73, 0x62, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x4d, 0x53, 0x42, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x20, 0x3d, 0x20, - 0x6d, 0x73, 0x62, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x28, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, - 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x66, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x73, 0x62, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x6d, 0x20, 0x7c, - 0x20, 0x28, 0x65, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x76, 0x65, - 0x63, 0x34, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2c, - 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x29, - 0x2c, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x68, 0x61, 0x6e, 0x28, 0x65, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x31, - 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x6d, 0x69, - 0x78, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x33, 0x63, - 0x30, 0x30, 0x29, 0x2c, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x69, 0x76, 0x65, - 0x63, 0x34, 0x28, 0x30, 0x78, 0x66, 0x66, 0x66, 0x66, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x70, 0x31, 0x36, 0x28, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x29, - 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x73, 0x20, 0x46, 0x50, 0x31, 0x36, 0x2c, 0x20, 0x62, 0x75, - 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x66, 0x69, 0x78, - 0x75, 0x70, 0x73, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, - 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x6f, 0x67, - 0x61, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x69, 0x63, 0x20, 0x28, 0x61, 0x70, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x29, - 0x2e, 0x20, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x70, 0x65, 0x63, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x31, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x6d, 0x74, 0x20, 0x3d, 0x20, 0x34, 0x20, 0x2a, 0x20, 0x6d, 0x20, 0x2d, 0x20, 0x35, - 0x31, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x6d, 0x74, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x33, 0x20, 0x2a, 0x20, 0x6d, 0x29, 0x2c, 0x20, 0x6c, 0x65, 0x73, - 0x73, 0x54, 0x68, 0x61, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x35, 0x31, 0x32, 0x29, 0x29, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x6d, 0x74, - 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x35, 0x20, 0x2a, 0x20, 0x6d, 0x20, 0x2d, 0x20, 0x32, 0x30, 0x34, 0x38, 0x29, - 0x2c, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x28, 0x6d, 0x2c, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x31, 0x35, 0x33, 0x36, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x28, - 0x65, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x6d, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x33, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x2b, 0x49, 0x6e, 0x66, 0x20, 0x6f, 0x72, 0x20, 0x4e, - 0x61, 0x4e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x30, 0x78, 0x37, - 0x62, 0x66, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x78, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x29, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, - 0x6d, 0x69, 0x78, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, - 0x37, 0x62, 0x66, 0x66, 0x29, 0x2c, 0x20, 0x62, 0x76, 0x65, 0x63, 0x5f, 0x6f, 0x72, 0x28, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x54, 0x68, 0x61, 0x6e, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, 0x66, - 0x66, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x37, 0x63, 0x30, 0x30, 0x29, 0x29, 0x2c, 0x20, 0x65, 0x71, - 0x75, 0x61, 0x6c, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, - 0x37, 0x63, 0x30, 0x30, 0x29, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, - 0x5f, 0x48, 0x44, 0x52, 0x5f, 0x4c, 0x44, 0x52, 0x5f, 0x41, 0x4c, 0x50, 0x48, 0x41, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x69, 0x6e, - 0x74, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, - 0x5f, 0x66, 0x70, 0x31, 0x36, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x29, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x5f, - 0x66, 0x70, 0x31, 0x36, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, - 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, - 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x73, 0x65, 0x65, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x65, 0x6d, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x64, 0x75, 0x61, 0x6c, - 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x76, 0x6f, 0x69, 0x64, - 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x0a, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x28, 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, - 0x20, 0x3d, 0x20, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x66, 0x66, - 0x75, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x66, 0x63, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x20, 0x3d, 0x20, - 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, 0x26, 0x20, 0x28, 0x31, 0x75, 0x20, 0x3c, 0x3c, 0x20, 0x31, - 0x30, 0x75, 0x29, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, - 0x3e, 0x3e, 0x20, 0x32, 0x75, 0x29, 0x20, 0x26, 0x20, 0x33, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, 0x26, 0x20, - 0x33, 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x21, 0x3d, - 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, - 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, 0x3e, 0x3e, 0x20, 0x34, - 0x75, 0x29, 0x20, 0x26, 0x20, 0x31, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, - 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x7c, - 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, 0x3c, 0x3c, 0x20, 0x31, - 0x75, 0x29, 0x20, 0x26, 0x20, 0x36, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, - 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x7c, - 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, 0x3e, 0x3e, 0x20, 0x36, - 0x75, 0x29, 0x20, 0x26, 0x20, 0x38, 0x75, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x3c, 0x20, 0x32, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x3d, 0x20, - 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x37, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x34, 0x75, 0x20, - 0x2b, 0x20, 0x34, 0x75, 0x20, 0x2a, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, - 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, - 0x20, 0x35, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x68, - 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, - 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x75, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, - 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x37, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x38, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x20, 0x26, 0x20, 0x28, 0x31, 0x75, - 0x20, 0x3c, 0x3c, 0x20, 0x38, 0x75, 0x29, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x37, 0x2c, - 0x20, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, - 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, - 0x35, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, - 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, - 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, - 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x37, 0x2c, 0x20, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x36, 0x75, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x33, 0x20, 0x3d, 0x20, 0x69, 0x6e, - 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x39, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x68, 0x69, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, - 0x20, 0x37, 0x2c, 0x20, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x6c, 0x6f, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x32, 0x29, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x68, 0x69, 0x20, 0x3d, 0x3d, 0x20, 0x30, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x31, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x20, 0x2b, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x68, 0x69, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x20, 0x2b, 0x20, - 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x31, - 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x68, 0x69, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x2e, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x20, - 0x2b, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, - 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x20, 0x3d, - 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x39, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x36, 0x75, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x6f, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x32, 0x28, 0x36, 0x2c, 0x20, 0x31, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x6f, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x32, 0x28, 0x31, 0x30, 0x2c, 0x20, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, - 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x34, 0x2c, 0x20, - 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x31, 0x20, 0x3d, - 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x32, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, - 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x2e, 0x78, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, - 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x20, 0x3d, 0x20, 0x70, 0x30, 0x20, 0x2b, 0x20, 0x28, 0x70, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x28, - 0x70, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x70, 0x33, 0x20, 0x3c, 0x3c, 0x20, 0x33, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x31, 0x31, 0x20, 0x62, 0x69, 0x74, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x2f, 0x2f, 0x20, 0x32, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x66, 0x20, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, - 0x2f, 0x20, 0x20, 0x20, 0x34, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x43, 0x45, 0x4d, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x49, 0x66, 0x20, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x20, 0x62, 0x69, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x43, 0x53, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x31, 0x30, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, - 0x32, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x43, 0x45, 0x4d, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x49, 0x66, 0x20, 0x43, - 0x45, 0x4d, 0x5b, 0x31, 0x3a, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x30, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x34, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x43, 0x45, 0x4d, 0x20, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, - 0x61, 0x6d, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x65, 0x6c, - 0x73, 0x65, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x31, 0x20, 0x2b, 0x20, 0x32, - 0x29, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x66, - 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x69, 0x72, 0x73, 0x74, 0x20, 0x34, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x43, - 0x45, 0x4d, 0x5b, 0x31, 0x3a, 0x30, 0x5d, 0x2c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x2c, 0x20, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2e, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x49, 0x66, 0x20, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x20, 0x62, 0x69, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x43, 0x43, 0x53, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, - 0x43, 0x45, 0x4d, 0x20, 0x62, 0x69, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, - 0x3d, 0x20, 0x31, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x43, - 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x53, 0x45, 0x45, 0x44, 0x20, 0x3d, - 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x4d, 0x55, 0x4c, - 0x54, 0x49, 0x5f, 0x43, 0x45, 0x4d, 0x20, 0x3d, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x43, 0x45, 0x4d, 0x20, - 0x3d, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x43, 0x45, 0x4d, 0x5f, 0x50, - 0x45, 0x52, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x3d, 0x20, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, - 0x53, 0x5f, 0x43, 0x43, 0x53, 0x20, 0x3d, 0x20, 0x32, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, - 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, - 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, - 0x43, 0x4b, 0x2c, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x29, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x73, 0x65, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, - 0x78, 0x2c, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, - 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x2c, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, - 0x53, 0x45, 0x45, 0x44, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, - 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x53, 0x45, 0x45, 0x44, 0x2c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x46, - 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, - 0x5f, 0x43, 0x45, 0x4d, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x43, 0x45, - 0x4d, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, - 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x2e, 0x78, 0x2c, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x52, - 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x2c, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, - 0x49, 0x54, 0x53, 0x5f, 0x43, 0x45, 0x4d, 0x29, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, - 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, - 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, - 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x65, 0x6d, 0x20, 0x26, 0x20, 0x33, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x65, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, - 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, - 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x53, 0x45, 0x45, 0x44, 0x20, 0x2b, 0x20, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x4d, - 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x45, 0x4d, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, - 0x53, 0x5f, 0x43, 0x45, 0x4d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, - 0x20, 0x3d, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, - 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x53, 0x45, 0x45, 0x44, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, - 0x49, 0x54, 0x53, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x45, 0x4d, - 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x45, - 0x58, 0x54, 0x52, 0x41, 0x5f, 0x43, 0x45, 0x4d, 0x5f, 0x50, 0x45, 0x52, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, - 0x4e, 0x20, 0x2a, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, - 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x2b, - 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x43, 0x45, 0x4d, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x65, - 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, - 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, - 0x53, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, - 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x53, 0x45, 0x45, 0x44, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x50, 0x52, 0x49, 0x4d, 0x41, - 0x52, 0x59, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x43, 0x45, 0x4d, 0x20, 0x2b, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, - 0x5f, 0x42, 0x49, 0x54, 0x53, 0x5f, 0x43, 0x45, 0x4d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x64, - 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2b, 0x3d, 0x20, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x42, - 0x49, 0x54, 0x53, 0x5f, 0x43, 0x43, 0x53, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x61, 0x6e, 0x79, 0x28, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x28, 0x6d, - 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2c, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x67, 0x6c, 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, - 0x7a, 0x65, 0x2e, 0x78, 0x79, 0x29, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x20, - 0x26, 0x26, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x3e, 0x20, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, - 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x70, - 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6e, - 0x74, 0x20, 0x69, 0x64, 0x69, 0x76, 0x33, 0x5f, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x76, 0x20, 0x2a, 0x20, 0x30, 0x78, 0x35, - 0x35, 0x35, 0x36, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x64, - 0x69, 0x76, 0x33, 0x5f, 0x63, 0x65, 0x69, 0x6c, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x64, 0x69, 0x76, 0x33, 0x5f, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x76, - 0x20, 0x2b, 0x20, 0x32, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x69, 0x76, 0x35, 0x5f, 0x66, - 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x28, 0x76, 0x20, 0x2a, 0x20, 0x30, 0x78, 0x33, 0x33, 0x33, 0x34, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, - 0x36, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x64, 0x69, 0x76, 0x35, 0x5f, 0x63, 0x65, 0x69, 0x6c, 0x28, - 0x69, 0x6e, 0x74, 0x20, 0x76, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, - 0x64, 0x69, 0x76, 0x35, 0x5f, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x76, 0x20, 0x2b, 0x20, 0x34, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x73, 0x6b, 0x28, - 0x69, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x62, 0x69, 0x74, - 0x73, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x33, 0x32, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, - 0x36, 0x34, 0x2c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x39, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, - 0x76, 0x65, 0x63, 0x34, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x31, 0x29, 0x20, - 0x3c, 0x3c, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x6e, 0x75, 0x6d, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x76, - 0x65, 0x63, 0x34, 0x28, 0x30, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x33, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x2d, 0x2d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, - 0x20, 0x6d, 0x69, 0x78, 0x28, 0x6d, 0x61, 0x73, 0x6b, 0x2c, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x75, 0x29, 0x2c, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, - 0x45, 0x71, 0x75, 0x61, 0x6c, 0x28, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x62, 0x69, 0x74, 0x73, 0x29, 0x2c, 0x20, 0x75, 0x76, - 0x65, 0x63, 0x34, 0x28, 0x33, 0x32, 0x2c, 0x20, 0x36, 0x34, 0x2c, 0x20, 0x39, 0x36, 0x2c, 0x20, 0x31, 0x32, 0x38, 0x29, 0x29, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x28, 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x79, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x72, 0x69, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x69, 0x64, 0x69, 0x76, 0x35, 0x5f, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2a, 0x20, 0x35, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, - 0x3d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2a, 0x20, 0x28, 0x35, 0x20, 0x2a, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, - 0x78, 0x20, 0x2b, 0x20, 0x38, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x74, 0x30, 0x5f, 0x74, 0x31, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x62, 0x69, 0x74, 0x20, 0x2b, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x31, 0x20, 0x2b, 0x20, - 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x32, 0x5f, 0x74, 0x33, - 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, - 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x32, 0x20, 0x2b, 0x20, 0x32, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x34, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, - 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, 0x20, 0x28, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x33, 0x20, 0x2b, 0x20, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x35, 0x5f, 0x74, 0x36, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, - 0x2a, 0x20, 0x34, 0x20, 0x2b, 0x20, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x74, 0x37, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x35, 0x20, 0x2b, - 0x20, 0x37, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x20, 0x3d, - 0x20, 0x28, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2c, 0x20, 0x74, 0x30, 0x5f, 0x74, 0x31, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x3c, - 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x28, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x2c, 0x20, 0x74, 0x32, 0x5f, 0x74, 0x33, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x32, 0x29, 0x20, - 0x3c, 0x3c, 0x20, 0x32, 0x29, 0x20, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x28, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x74, 0x34, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x31, 0x29, 0x20, 0x3c, 0x3c, - 0x20, 0x34, 0x29, 0x20, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x28, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2c, 0x20, 0x74, 0x35, 0x5f, 0x74, 0x36, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x3c, - 0x3c, 0x20, 0x35, 0x29, 0x20, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x28, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x2c, 0x20, 0x74, 0x37, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x31, 0x29, 0x20, 0x3c, 0x3c, 0x20, - 0x37, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, - 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x4c, 0x55, 0x54, 0x54, 0x72, 0x69, 0x74, 0x51, 0x75, 0x69, - 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x29, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x33, 0x20, 0x2a, 0x20, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x29, 0x29, 0x20, 0x26, 0x20, 0x37, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x20, 0x2a, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, - 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x69, 0x64, 0x69, 0x76, 0x35, 0x5f, 0x63, 0x65, 0x69, 0x6c, - 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2a, 0x20, 0x38, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x20, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x20, 0x3c, - 0x3c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x29, 0x20, 0x7c, 0x20, 0x6d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x2e, 0x7a, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x51, 0x75, 0x69, 0x6e, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x3d, 0x20, 0x69, 0x64, - 0x69, 0x76, 0x33, 0x5f, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x20, 0x2d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x2a, 0x20, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x20, 0x2a, 0x20, 0x28, 0x33, 0x20, 0x2a, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2b, 0x20, 0x37, 0x29, 0x3b, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x71, 0x30, 0x5f, 0x71, 0x31, 0x5f, 0x71, - 0x32, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, - 0x2b, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x31, 0x20, 0x2b, 0x20, 0x30, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x71, 0x33, 0x5f, 0x71, 0x34, 0x5f, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, 0x20, - 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x32, 0x20, 0x2b, 0x20, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x71, 0x35, 0x5f, 0x71, 0x36, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, 0x20, 0x28, 0x71, - 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x33, 0x20, 0x2b, 0x20, 0x35, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x71, 0x20, 0x3d, 0x20, 0x28, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x71, 0x30, 0x5f, 0x71, 0x31, 0x5f, - 0x71, 0x32, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x33, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x71, 0x33, - 0x5f, 0x71, 0x34, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x33, 0x29, 0x20, - 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x71, - 0x35, 0x5f, 0x71, 0x36, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x32, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x35, 0x29, - 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x65, - 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x4c, 0x55, 0x54, 0x54, 0x72, 0x69, 0x74, 0x51, 0x75, 0x69, 0x6e, 0x74, - 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x32, 0x35, 0x36, 0x20, 0x2b, 0x20, 0x71, 0x29, 0x2e, 0x78, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x20, 0x3d, 0x20, 0x28, 0x71, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x33, 0x20, - 0x2a, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x29, 0x29, 0x20, 0x26, 0x20, 0x37, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x20, 0x2a, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x69, 0x64, 0x69, 0x76, 0x33, 0x5f, - 0x63, 0x65, 0x69, 0x6c, 0x28, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x2a, 0x20, 0x37, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x21, 0x3d, 0x20, - 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x20, 0x2b, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, - 0x28, 0x71, 0x20, 0x3c, 0x3c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x29, 0x20, 0x7c, 0x20, 0x6d, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x71, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x20, 0x2a, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x2b, 0x20, - 0x62, 0x69, 0x74, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x76, - 0x65, 0x63, 0x32, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x28, 0x69, - 0x76, 0x65, 0x63, 0x32, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x74, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, - 0x20, 0x44, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x28, 0x76, 0x65, 0x63, 0x32, 0x28, 0x28, 0x31, 0x30, 0x32, - 0x34, 0x20, 0x2b, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x67, 0x6c, 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x79, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x75, 0x29, 0x29, 0x29, 0x20, 0x2b, 0x20, 0x30, - 0x2e, 0x35, 0x29, 0x20, 0x2f, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x67, 0x6c, 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x79, 0x20, 0x2d, 0x20, 0x31, 0x75, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x44, 0x20, 0x2a, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, - 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x28, - 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, - 0x20, 0x30, 0x2c, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x28, 0x4c, 0x55, 0x54, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x55, 0x6e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, - 0x65, 0x2c, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x2b, 0x20, 0x71, - 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x77, 0x29, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x62, 0x69, 0x6c, - 0x69, 0x6e, 0x65, 0x61, 0x72, 0x28, 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2c, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x2a, 0x20, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2b, 0x20, 0x63, 0x6f, - 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x30, 0x30, 0x20, 0x3d, 0x20, - 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x70, 0x31, 0x30, 0x2c, 0x20, 0x70, 0x30, 0x31, 0x2c, 0x20, 0x70, 0x31, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x78, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x72, - 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, - 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x70, 0x30, 0x30, 0x3b, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, - 0x79, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x70, 0x30, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x28, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x28, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x2e, 0x78, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x70, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x20, 0x2a, 0x20, 0x28, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x20, 0x2b, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x70, 0x30, 0x31, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x30, 0x31, 0x20, 0x3d, 0x20, 0x70, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x70, 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x31, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x66, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x38, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x77, 0x31, 0x30, 0x20, 0x3d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x78, 0x20, - 0x2d, 0x20, 0x77, 0x31, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x30, 0x31, 0x20, 0x3d, 0x20, - 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x79, 0x20, 0x2d, 0x20, 0x77, 0x31, 0x31, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x30, 0x30, 0x20, 0x3d, 0x20, 0x31, 0x36, 0x20, 0x2d, 0x20, 0x66, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x78, 0x20, 0x2d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x77, 0x31, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x28, 0x70, 0x30, 0x30, 0x20, 0x2a, 0x20, 0x77, 0x30, 0x30, 0x20, 0x2b, 0x20, 0x70, 0x31, 0x30, 0x20, 0x2a, 0x20, 0x77, - 0x31, 0x30, 0x20, 0x2b, 0x20, 0x70, 0x30, 0x31, 0x20, 0x2a, 0x20, 0x77, 0x30, 0x31, 0x20, 0x2b, 0x20, 0x70, 0x31, 0x31, 0x20, - 0x2a, 0x20, 0x77, 0x31, 0x31, 0x20, 0x2b, 0x20, 0x38, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, - 0x76, 0x65, 0x63, 0x34, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x28, 0x75, - 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x6f, - 0x64, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, - 0x28, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x4c, 0x55, 0x54, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x72, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x65, - 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x20, 0x2a, - 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x2e, 0x79, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, - 0x3c, 0x3c, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, - 0x6e, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, - 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, - 0x78, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x64, 0x69, 0x76, 0x35, 0x5f, 0x63, 0x65, 0x69, 0x6c, 0x28, 0x6e, 0x75, 0x6d, 0x5f, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x2a, 0x20, 0x38, 0x20, 0x2a, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x79, 0x29, - 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x64, 0x69, 0x76, 0x33, 0x5f, 0x63, 0x65, 0x69, 0x6c, - 0x28, 0x6e, 0x75, 0x6d, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x2a, 0x20, 0x37, 0x20, 0x2a, 0x20, 0x71, 0x75, - 0x61, 0x6e, 0x74, 0x2e, 0x7a, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x72, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x20, 0x32, 0x34, 0x20, 0x7c, 0x7c, 0x20, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3e, 0x20, 0x39, 0x36, - 0x20, 0x7c, 0x7c, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x3e, 0x20, 0x36, 0x34, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, - 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x63, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x5f, 0x63, 0x65, 0x6d, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x6d, 0x20, 0x26, 0x20, - 0x33, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x63, 0x65, 0x6d, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, - 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x2a, - 0x20, 0x33, 0x20, 0x2d, 0x20, 0x34, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x63, 0x73, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x31, 0x32, 0x36, 0x20, 0x2d, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, - 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x63, 0x65, 0x6d, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x2c, 0x20, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x76, 0x65, - 0x72, 0x73, 0x65, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x77, 0x7a, 0x79, 0x78, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x26, 0x3d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x62, 0x69, 0x74, 0x6d, 0x61, 0x73, 0x6b, 0x28, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x67, 0x72, 0x69, 0x64, 0x2e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, - 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, - 0x2b, 0x20, 0x33, 0x32, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, - 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3e, - 0x3e, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x62, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x64, 0x75, 0x61, 0x6c, 0x5f, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x29, 0x2c, 0x20, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2c, 0x20, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2e, - 0x64, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x77, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, - 0x62, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x77, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x2c, 0x20, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x70, 0x72, 0x69, - 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, 0x2c, 0x20, 0x65, 0x71, 0x75, - 0x61, 0x6c, 0x28, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x63, 0x73, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, - 0x30, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, - 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x6f, 0x75, - 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, - 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x30, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x66, - 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, - 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x31, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, - 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, - 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, - 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, - 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x31, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x79, 0x30, 0x2c, 0x20, 0x79, - 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x31, 0x20, 0x3e, 0x3d, 0x20, 0x76, 0x30, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x30, 0x20, 0x3d, 0x20, 0x76, 0x30, - 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x31, 0x20, 0x3d, 0x20, 0x76, - 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, - 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x30, 0x20, 0x3d, 0x20, - 0x28, 0x76, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x2b, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x79, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x30, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x2d, 0x20, 0x38, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, - 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x79, 0x30, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, - 0x33, 0x28, 0x79, 0x31, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, - 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, 0x72, - 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x79, 0x30, 0x2c, 0x20, 0x79, 0x31, 0x2c, 0x20, 0x64, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x28, 0x76, 0x30, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x30, 0x20, 0x3d, 0x20, 0x28, - 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x65, 0x30, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x28, - 0x28, 0x76, 0x30, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x66, 0x29, - 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x79, 0x30, 0x20, 0x3d, 0x20, 0x28, - 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x30, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x28, - 0x28, 0x76, 0x30, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x66, 0x29, - 0x20, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x79, 0x31, - 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x79, 0x30, 0x20, 0x2b, 0x20, 0x64, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x29, - 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, - 0x65, 0x63, 0x33, 0x28, 0x79, 0x30, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x79, 0x31, 0x29, - 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, - 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x76, 0x31, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x30, 0x20, 0x3d, 0x20, 0x28, 0x76, - 0x30, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x63, 0x30, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x31, 0x20, 0x3d, 0x20, 0x6c, 0x30, 0x20, 0x2b, 0x20, 0x28, - 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x31, 0x20, 0x3d, 0x20, - 0x6d, 0x69, 0x6e, 0x28, 0x6c, 0x31, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, - 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x6c, 0x30, 0x29, 0x2c, 0x20, - 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x6c, 0x31, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x33, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, - 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x30, 0x29, 0x2c, 0x20, 0x76, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, - 0x31, 0x29, 0x2c, 0x20, 0x76, 0x33, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x6c, 0x75, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x67, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x72, 0x20, 0x2b, 0x20, 0x62, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x28, 0x67, 0x20, 0x2b, 0x20, 0x62, 0x29, 0x20, 0x3e, 0x3e, 0x20, - 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x2e, 0x62, 0x20, 0x3d, 0x20, 0x62, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x61, 0x2c, 0x20, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x62, 0x20, 0x3e, 0x3e, 0x3d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x20, 0x7c, 0x3d, - 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3e, 0x3e, 0x3d, 0x20, - 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x26, 0x3d, 0x20, 0x30, 0x78, 0x33, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x61, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, - 0x61, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x36, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, - 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x6f, 0x75, - 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x29, - 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, - 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x76, 0x33, 0x2c, - 0x20, 0x76, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x5f, 0x76, 0x31, 0x20, 0x3d, - 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x76, 0x30, 0x20, 0x2b, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x78, - 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x5f, 0x76, 0x33, 0x20, 0x3d, 0x20, - 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x76, 0x32, 0x20, 0x2b, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x66, - 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x76, 0x30, - 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x32, 0x20, 0x3d, 0x20, - 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x76, 0x32, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, - 0x76, 0x30, 0x29, 0x2c, 0x20, 0x76, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, - 0x76, 0x65, 0x63, 0x34, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x30, 0x5f, 0x76, 0x31, 0x29, 0x2c, 0x20, 0x76, 0x32, - 0x5f, 0x76, 0x33, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x30, 0x2c, - 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x33, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x2c, 0x20, - 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x34, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x61, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x34, 0x2c, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x35, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, - 0x76, 0x32, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x33, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x2c, 0x20, 0x76, 0x34, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, - 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x35, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, - 0x62, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, - 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x34, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x35, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x73, 0x30, 0x20, 0x3d, 0x20, 0x76, 0x30, 0x20, 0x2b, 0x20, 0x76, 0x32, 0x20, 0x2b, 0x20, 0x76, 0x34, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x31, 0x20, 0x3d, 0x20, 0x76, 0x31, 0x20, 0x2b, 0x20, 0x76, 0x33, 0x20, 0x2b, 0x20, - 0x76, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x31, 0x20, 0x3e, 0x3d, 0x20, 0x73, 0x30, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x66, - 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, - 0x63, 0x34, 0x28, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x30, - 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x62, - 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, - 0x76, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, - 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, - 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x2f, 0x2f, 0x20, 0x4d, 0x69, 0x6e, 0x64, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x65, 0x69, 0x72, - 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2c, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x2e, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x76, 0x30, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x63, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x32, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, - 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6d, 0x6f, - 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x26, 0x20, 0x30, 0x78, 0x63, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x78, - 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x6a, 0x6f, - 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, - 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x26, 0x20, 0x33, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x78, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x26, 0x20, 0x33, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, - 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x64, - 0x20, 0x3d, 0x20, 0x76, 0x30, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x66, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x76, 0x32, 0x20, 0x26, 0x20, 0x30, 0x78, - 0x31, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x76, - 0x33, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x66, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x30, - 0x20, 0x3d, 0x20, 0x28, 0x76, 0x31, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x31, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x26, - 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x32, 0x20, - 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x33, - 0x20, 0x3d, 0x20, 0x28, 0x76, 0x32, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x33, 0x20, 0x3e, 0x3e, 0x20, 0x37, 0x29, 0x20, 0x26, - 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x35, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x33, 0x20, - 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x36, - 0x20, 0x3d, 0x20, 0x28, 0x76, 0x33, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x68, 0x6d, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x6d, 0x6f, 0x64, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x30, - 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x30, 0x20, 0x3c, - 0x3c, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x33, 0x61, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x7c, 0x3d, 0x20, 0x78, - 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, - 0x26, 0x20, 0x30, 0x78, 0x33, 0x30, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x20, 0x7c, 0x3d, - 0x20, 0x78, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, - 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x61, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x20, - 0x7c, 0x3d, 0x20, 0x78, 0x33, 0x20, 0x3c, 0x3c, 0x20, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x64, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x36, 0x20, 0x3c, 0x3c, 0x20, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x32, 0x64, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x35, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x34, 0x29, 0x20, 0x21, 0x3d, 0x20, - 0x30, 0x29, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x34, 0x20, 0x3c, 0x3c, 0x20, 0x37, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x62, 0x29, 0x20, - 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x34, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x34, 0x29, - 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x33, 0x20, 0x3c, 0x3c, 0x20, 0x36, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x30, - 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x35, 0x20, 0x3c, 0x3c, 0x20, - 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, - 0x66, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x32, 0x20, 0x3c, 0x3c, - 0x20, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, - 0x30, 0x35, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x31, 0x20, 0x3c, - 0x3c, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x30, 0x61, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x30, 0x20, - 0x3c, 0x3c, 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, - 0x30, 0x78, 0x30, 0x35, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x30, - 0x20, 0x3c, 0x3c, 0x20, 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, - 0x20, 0x30, 0x78, 0x30, 0x32, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, 0x78, - 0x36, 0x20, 0x3c, 0x3c, 0x20, 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, - 0x26, 0x20, 0x30, 0x78, 0x30, 0x31, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, 0x3d, 0x20, - 0x78, 0x33, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, - 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x32, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x72, 0x65, 0x64, 0x20, 0x7c, - 0x3d, 0x20, 0x78, 0x35, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x73, 0x68, 0x61, 0x6d, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x31, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x64, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x35, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x72, 0x65, - 0x64, 0x20, 0x2d, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6c, - 0x75, 0x65, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x64, 0x20, 0x2d, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, - 0x77, 0x61, 0x70, 0x28, 0x72, 0x65, 0x64, 0x2c, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x61, - 0x70, 0x28, 0x72, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, - 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, - 0x28, 0x72, 0x65, 0x64, 0x2c, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x2c, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0x20, 0x69, - 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x78, 0x66, 0x66, 0x66, 0x29, - 0x29, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x72, 0x65, 0x64, - 0x2c, 0x20, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x2c, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x2d, 0x20, 0x73, 0x63, 0x61, 0x6c, - 0x65, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x78, - 0x66, 0x66, 0x66, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, - 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, 0x72, - 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x31, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x35, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, - 0x28, 0x28, 0x76, 0x34, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x37, 0x29, 0x20, 0x7c, 0x20, - 0x28, 0x28, 0x76, 0x35, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x20, 0x3c, 0x3c, 0x20, 0x34, - 0x2c, 0x20, 0x76, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x2c, 0x20, 0x28, 0x76, 0x34, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, - 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x35, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x31, 0x20, 0x3c, 0x3c, 0x20, - 0x34, 0x2c, 0x20, 0x76, 0x33, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x2c, 0x20, 0x28, 0x76, 0x35, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, - 0x66, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x35, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x37, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x32, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x33, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x61, 0x20, 0x3d, 0x20, 0x76, 0x30, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x34, 0x30, 0x29, - 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x62, 0x30, 0x20, 0x3d, - 0x20, 0x76, 0x32, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x62, 0x31, 0x20, 0x3d, 0x20, 0x20, 0x76, 0x33, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x76, 0x63, 0x20, 0x3d, 0x20, 0x76, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x33, 0x66, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x76, 0x34, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, - 0x66, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x64, 0x31, 0x20, 0x3d, 0x20, 0x76, 0x35, 0x20, 0x26, - 0x20, 0x30, 0x78, 0x37, 0x66, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x5f, 0x62, 0x69, 0x74, - 0x73, 0x20, 0x3d, 0x20, 0x37, 0x20, 0x2d, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x26, 0x20, 0x31, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x26, 0x20, 0x35, 0x29, 0x20, 0x3d, 0x3d, 0x20, - 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x3d, 0x20, - 0x32, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x64, 0x30, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x64, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x64, 0x5f, 0x62, 0x69, - 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x64, 0x31, 0x20, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x64, 0x31, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x64, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x30, 0x20, 0x3d, 0x20, 0x28, - 0x76, 0x32, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x78, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x33, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x34, 0x20, 0x3e, 0x3e, 0x20, 0x36, - 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x33, 0x20, 0x3d, 0x20, 0x28, - 0x76, 0x35, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x78, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x34, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x78, 0x35, 0x20, 0x3d, 0x20, 0x28, 0x76, 0x35, 0x20, 0x3e, 0x3e, 0x20, 0x35, - 0x29, 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x68, 0x6d, 0x20, 0x3d, - 0x20, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x61, 0x34, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x76, 0x61, 0x20, - 0x7c, 0x3d, 0x20, 0x78, 0x30, 0x20, 0x3c, 0x3c, 0x20, 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x38, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x76, 0x61, 0x20, - 0x7c, 0x3d, 0x20, 0x78, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x35, 0x30, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x76, 0x61, 0x20, - 0x7c, 0x3d, 0x20, 0x78, 0x34, 0x20, 0x3c, 0x3c, 0x20, 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x35, 0x30, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x76, 0x61, 0x20, - 0x7c, 0x3d, 0x20, 0x78, 0x35, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x61, 0x30, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x76, 0x61, - 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x63, 0x30, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x76, - 0x61, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x31, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x34, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, - 0x20, 0x76, 0x63, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x65, 0x38, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, - 0x20, 0x76, 0x63, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x33, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x32, 0x30, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, - 0x20, 0x76, 0x63, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x37, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x35, 0x62, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x29, 0x20, 0x76, 0x62, 0x30, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x30, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x35, 0x62, 0x29, 0x20, 0x21, 0x3d, 0x20, - 0x30, 0x29, 0x20, 0x76, 0x62, 0x31, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x32, 0x29, 0x20, 0x21, 0x3d, - 0x20, 0x30, 0x29, 0x20, 0x76, 0x62, 0x30, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x32, 0x20, 0x3c, 0x3c, 0x20, 0x37, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x6f, 0x68, 0x6d, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x32, 0x29, 0x20, 0x21, - 0x3d, 0x20, 0x30, 0x29, 0x20, 0x76, 0x62, 0x31, 0x20, 0x7c, 0x3d, 0x20, 0x78, 0x33, 0x20, 0x3c, 0x3c, 0x20, 0x37, 0x3b, 0x0a, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x6d, 0x6f, 0x64, - 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x5e, 0x20, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x20, 0x3c, - 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x62, 0x30, 0x20, 0x3c, 0x3c, 0x3d, - 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x62, 0x31, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, - 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x63, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, - 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x64, 0x30, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x64, 0x31, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x61, 0x6d, 0x74, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6c, 0x61, 0x6d, 0x70, - 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x61, 0x2c, 0x20, 0x76, 0x61, 0x20, 0x2d, 0x20, 0x76, 0x62, 0x30, 0x2c, 0x20, - 0x76, 0x61, 0x20, 0x2d, 0x20, 0x76, 0x62, 0x31, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x2c, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x78, 0x66, 0x66, 0x66, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6c, 0x61, - 0x6d, 0x70, 0x28, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x76, 0x61, 0x20, 0x2d, 0x20, 0x76, 0x63, 0x2c, 0x20, 0x76, 0x61, 0x20, - 0x2d, 0x20, 0x76, 0x62, 0x30, 0x20, 0x2d, 0x20, 0x76, 0x63, 0x20, 0x2d, 0x20, 0x76, 0x64, 0x30, 0x2c, 0x20, 0x76, 0x61, 0x20, - 0x2d, 0x20, 0x76, 0x62, 0x31, 0x20, 0x2d, 0x20, 0x76, 0x63, 0x20, 0x2d, 0x20, 0x76, 0x64, 0x31, 0x29, 0x2c, 0x20, 0x69, 0x76, - 0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x78, 0x66, 0x66, 0x66, 0x29, 0x29, - 0x2c, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, - 0x6a, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x61, 0x70, 0x28, 0x65, 0x70, 0x30, - 0x2e, 0x72, 0x2c, 0x20, 0x65, 0x70, 0x30, 0x2e, 0x67, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, - 0x77, 0x61, 0x70, 0x28, 0x65, 0x70, 0x31, 0x2e, 0x72, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2e, 0x67, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x61, 0x6a, 0x6f, - 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x61, 0x70, 0x28, 0x65, 0x70, 0x30, 0x2e, 0x72, - 0x2c, 0x20, 0x65, 0x70, 0x30, 0x2e, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x77, 0x61, - 0x70, 0x28, 0x65, 0x70, 0x31, 0x2e, 0x72, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2e, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x35, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x30, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x28, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x76, 0x35, 0x2c, 0x20, 0x76, 0x34, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x31, 0x20, 0x2b, 0x20, 0x76, 0x33, 0x20, 0x2b, 0x20, 0x76, - 0x35, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, - 0x76, 0x34, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, - 0x31, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x20, 0x2b, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, - 0x20, 0x2b, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x20, 0x2b, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x5f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x30, 0x20, 0x2b, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x20, - 0x2b, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x20, 0x2b, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x75, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x30, - 0x78, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x2e, - 0x72, 0x67, 0x62, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x65, 0x70, 0x30, 0x2e, 0x72, 0x67, 0x62, 0x2c, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x78, 0x66, 0x66, 0x29, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, - 0x70, 0x28, 0x65, 0x70, 0x31, 0x2e, 0x72, 0x67, 0x62, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x2c, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x78, 0x66, 0x66, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, - 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, - 0x72, 0x67, 0x62, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x31, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x33, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x35, 0x2c, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x36, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x37, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x30, 0x20, 0x3d, 0x20, 0x76, 0x30, 0x20, 0x2b, 0x20, 0x76, 0x32, 0x20, 0x2b, 0x20, - 0x76, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x31, 0x20, 0x3d, 0x20, 0x76, 0x31, 0x20, 0x2b, - 0x20, 0x76, 0x33, 0x20, 0x2b, 0x20, 0x76, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x31, 0x20, - 0x3e, 0x3d, 0x20, 0x73, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, - 0x34, 0x2c, 0x20, 0x76, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x76, 0x37, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x75, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x35, 0x2c, - 0x20, 0x76, 0x37, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x62, - 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, - 0x76, 0x34, 0x2c, 0x20, 0x76, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, - 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, - 0x5f, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x6f, 0x75, 0x74, - 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x30, 0x2c, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x76, 0x33, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x76, 0x36, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x37, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x76, - 0x31, 0x2c, 0x20, 0x76, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x32, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x28, 0x76, 0x35, 0x2c, 0x20, 0x76, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x28, 0x76, 0x37, 0x2c, 0x20, 0x76, 0x36, 0x29, - 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x76, 0x31, 0x20, 0x2b, 0x20, 0x76, 0x33, 0x20, 0x2b, 0x20, - 0x76, 0x35, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, - 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, - 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x30, 0x20, 0x2b, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x20, - 0x2b, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x20, 0x2b, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x76, 0x36, 0x20, 0x2b, 0x20, 0x76, - 0x37, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x75, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x30, 0x20, 0x2b, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, - 0x32, 0x20, 0x2b, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x20, 0x2b, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x76, 0x36, 0x20, 0x2b, - 0x20, 0x76, 0x37, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x62, - 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, - 0x76, 0x34, 0x2c, 0x20, 0x76, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x70, 0x30, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, - 0x28, 0x30, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x66, 0x66, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x65, 0x70, 0x31, 0x2c, 0x20, 0x69, 0x76, - 0x65, 0x63, 0x34, 0x28, 0x30, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x78, 0x66, 0x66, 0x29, 0x29, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, 0x72, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x36, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x37, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x76, 0x36, 0x20, 0x3e, 0x3e, 0x20, 0x37, 0x29, 0x20, - 0x26, 0x20, 0x31, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x28, 0x76, 0x37, 0x20, 0x3e, 0x3e, 0x20, 0x36, 0x29, 0x20, 0x26, 0x20, 0x32, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x36, 0x20, 0x26, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x66, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x76, 0x37, 0x20, 0x26, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x66, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x76, 0x36, 0x20, 0x3c, 0x3c, 0x20, 0x35, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x76, 0x37, 0x20, 0x3c, 0x3c, 0x20, 0x35, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x36, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x76, 0x37, 0x20, 0x3c, - 0x3c, 0x20, 0x28, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x38, 0x30, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x37, 0x20, 0x26, 0x3d, 0x20, 0x30, 0x78, 0x33, 0x66, 0x20, - 0x3e, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x37, 0x20, 0x5e, - 0x3d, 0x20, 0x30, 0x78, 0x32, 0x30, 0x20, 0x3e, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x37, 0x20, 0x2d, 0x3d, 0x20, 0x30, 0x78, 0x32, 0x30, 0x20, 0x3e, 0x3e, 0x20, 0x6d, 0x6f, 0x64, 0x65, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x36, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x34, 0x20, 0x2d, 0x20, - 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x37, 0x20, 0x3c, 0x3c, 0x3d, 0x20, - 0x34, 0x20, 0x2d, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x37, 0x20, - 0x2b, 0x3d, 0x20, 0x76, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x37, 0x20, 0x3d, 0x20, 0x63, - 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x76, 0x37, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x66, 0x66, 0x66, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x20, 0x3d, 0x20, 0x76, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x76, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, - 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x28, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, - 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, - 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x70, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x75, 0x6d, 0x5f, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2b, 0x3d, 0x20, 0x62, 0x69, 0x74, 0x5f, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x26, - 0x3d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x73, 0x6b, 0x28, 0x6e, 0x75, 0x6d, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, - 0x2f, 0x20, 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x20, 0x75, 0x73, 0x65, - 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x6e, 0x69, 0x63, 0x65, 0x6c, 0x79, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, - 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x47, 0x50, 0x55, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, - 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, 0x35, - 0x2c, 0x20, 0x76, 0x36, 0x2c, 0x20, 0x76, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x32, 0x20, 0x2a, 0x20, 0x28, 0x28, 0x65, 0x70, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x3b, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x50, 0x28, 0x69, 0x29, 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x4c, 0x55, 0x54, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x6e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x2e, 0x77, 0x20, 0x2b, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, - 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x62, 0x69, - 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, - 0x79, 0x7a, 0x29, 0x29, 0x2e, 0x78, 0x29, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x68, 0x69, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x65, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x30, 0x20, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x50, 0x28, 0x30, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x31, 0x20, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x50, 0x28, 0x31, - 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x68, 0x69, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3e, - 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x32, - 0x20, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x50, 0x28, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x33, 0x20, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x50, 0x28, 0x33, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x68, 0x69, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x34, 0x20, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x50, 0x28, 0x34, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x35, 0x20, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, - 0x45, 0x50, 0x28, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x68, 0x69, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x36, 0x20, 0x3d, 0x20, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, - 0x50, 0x28, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x37, 0x20, 0x3d, 0x20, 0x44, 0x45, - 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x50, 0x28, 0x37, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x28, 0x65, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x30, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, - 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, - 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x3a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, - 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x32, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, - 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, - 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, - 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x33, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, 0x72, - 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, - 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x34, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, - 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, - 0x61, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, - 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, - 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x35, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, - 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x6c, 0x75, 0x6d, 0x61, 0x5f, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x65, 0x70, 0x30, - 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, - 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, - 0x4c, 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x36, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, - 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, - 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x61, 0x73, 0x65, 0x20, 0x37, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, - 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, - 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, - 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x38, 0x3a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, - 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, - 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, 0x35, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, - 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, - 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x39, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, - 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x65, 0x70, - 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, - 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, 0x35, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x30, 0x3a, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, - 0x65, 0x5f, 0x74, 0x77, 0x6f, 0x5f, 0x61, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, - 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, - 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x31, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, - 0x34, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x35, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, - 0x72, 0x5f, 0x72, 0x67, 0x62, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, - 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, - 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x30, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x76, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x70, 0x31, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x76, 0x37, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x5f, 0x4c, 0x44, 0x52, 0x5f, 0x41, 0x4c, 0x50, 0x48, 0x41, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x35, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x68, 0x64, - 0x72, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x28, 0x65, 0x70, 0x30, 0x2e, 0x61, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2e, 0x61, 0x2c, - 0x20, 0x76, 0x36, 0x2c, 0x20, 0x76, 0x37, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, - 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x61, 0x73, 0x65, 0x20, 0x31, 0x32, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, - 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, 0x35, 0x2c, 0x20, 0x76, 0x36, 0x2c, 0x20, 0x76, 0x37, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, - 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, - 0x6b, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x33, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6c, - 0x64, 0x72, 0x5f, 0x72, 0x67, 0x62, 0x61, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x28, 0x65, - 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x76, 0x30, 0x2c, 0x20, 0x76, 0x31, 0x2c, 0x20, 0x76, 0x32, 0x2c, 0x20, 0x76, 0x33, 0x2c, 0x20, 0x76, 0x34, 0x2c, 0x20, 0x76, - 0x35, 0x2c, 0x20, 0x76, 0x36, 0x2c, 0x20, 0x76, 0x37, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x38, 0x42, 0x49, - 0x54, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4d, - 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x44, 0x52, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, - 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x23, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x28, 0x29, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x29, 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x6f, - 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x79, 0x29, 0x3b, 0x20, 0x5c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x20, 0x5c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x20, 0x5c, 0x0a, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x28, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x29, 0x0a, - 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x65, 0x6d, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x28, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x6e, 0x75, - 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x69, 0x6e, 0x74, 0x20, - 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, - 0x65, 0x6d, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x3e, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, - 0x6f, 0x6c, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, - 0x26, 0x20, 0x33, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x65, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x63, 0x65, 0x6d, 0x20, 0x3e, 0x3e, 0x20, 0x34, - 0x29, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, 0x26, 0x20, - 0x33, 0x29, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x2b, - 0x20, 0x62, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x63, 0x65, 0x6d, 0x29, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x6e, 0x75, - 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x2b, - 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x72, 0x65, 0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x63, - 0x65, 0x6d, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x28, 0x75, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x63, 0x65, 0x6d, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x3e, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, - 0x6f, 0x6c, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, - 0x26, 0x20, 0x33, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x65, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x65, 0x6d, 0x20, 0x3e, 0x3e, - 0x3d, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x63, - 0x65, 0x6d, 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x2b, 0x20, 0x31, 0x29, 0x20, 0x2a, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, - 0x26, 0x20, 0x33, 0x29, 0x20, 0x2a, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x20, 0x2b, 0x20, 0x62, 0x69, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x28, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x63, 0x65, 0x6d, 0x29, 0x2c, 0x20, 0x32, 0x2c, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, 0x26, 0x20, 0x33, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x63, 0x65, - 0x6d, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x2a, 0x20, 0x33, 0x20, 0x2d, 0x20, 0x34, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, - 0x31, 0x32, 0x38, 0x20, 0x2d, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, - 0x73, 0x20, 0x2d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x63, 0x65, 0x6d, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x5f, 0x63, 0x65, 0x6d, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x28, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x62, - 0x69, 0x74, 0x73, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, 0x3e, 0x3e, 0x20, 0x32, - 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, - 0x6d, 0x20, 0x3e, 0x3e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, - 0x20, 0x26, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x65, 0x70, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x63, 0x65, 0x6d, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x6e, - 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x2b, 0x20, 0x32, 0x20, 0x2a, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x29, 0x20, 0x26, 0x20, 0x33, 0x3b, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x34, - 0x20, 0x2a, 0x20, 0x28, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x20, 0x2b, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x29, 0x20, 0x2b, 0x20, 0x65, 0x70, 0x5f, 0x62, 0x69, - 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, - 0x2a, 0x3d, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x20, 0x3d, 0x20, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, - 0x20, 0x31, 0x32, 0x2c, 0x20, 0x31, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x78, - 0x5f, 0x73, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x31, 0x32, 0x20, 0x2b, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x31, 0x33, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x31, 0x32, 0x20, 0x2b, 0x20, - 0x32, 0x20, 0x2a, 0x20, 0x31, 0x33, 0x2c, 0x20, 0x31, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x31, 0x32, 0x20, 0x2b, 0x20, 0x33, 0x20, 0x2a, 0x20, 0x31, 0x33, 0x2c, - 0x20, 0x31, 0x33, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x61, 0x6c, 0x6c, 0x28, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x28, 0x69, 0x76, 0x65, - 0x63, 0x34, 0x28, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x5f, - 0x74, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x28, 0x31, 0x20, 0x3c, - 0x3c, 0x20, 0x31, 0x33, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x6e, 0x79, 0x28, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x72, 0x54, 0x68, 0x61, 0x6e, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x28, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x6d, 0x69, 0x6e, 0x5f, - 0x73, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x29, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x6d, 0x61, 0x78, 0x5f, - 0x73, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x29, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x2e, 0x78, 0x20, 0x26, 0x20, 0x28, 0x31, 0x75, 0x20, 0x3c, 0x3c, 0x20, 0x39, 0x29, 0x29, 0x20, 0x21, 0x3d, 0x20, - 0x30, 0x75, 0x20, 0x3f, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x20, 0x3a, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, - 0x4c, 0x44, 0x52, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x36, 0x34, - 0x2c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x67, 0x20, 0x3d, 0x20, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x36, - 0x34, 0x20, 0x2b, 0x20, 0x31, 0x36, 0x2c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x62, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x36, 0x34, 0x20, 0x2b, 0x20, 0x33, 0x32, 0x2c, 0x20, 0x31, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x62, 0x69, 0x74, - 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x36, 0x34, 0x20, 0x2b, 0x20, 0x34, 0x38, 0x2c, 0x20, 0x31, - 0x36, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, - 0x28, 0x72, 0x2c, 0x20, 0x67, 0x2c, 0x20, 0x62, 0x2c, 0x20, 0x61, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, - 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, - 0x6f, 0x6f, 0x72, 0x64, 0x20, 0x3d, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x28, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x6e, 0x79, 0x28, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x54, - 0x68, 0x61, 0x6e, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x28, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x28, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x29, 0x29, - 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x20, - 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x28, 0x67, 0x6c, 0x5f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x78, 0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x67, 0x6c, - 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x29, 0x20, 0x2a, 0x20, 0x70, - 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, - 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x7a, 0x77, 0x2c, - 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x20, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x28, - 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, - 0x6d, 0x6f, 0x64, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x20, 0x3d, 0x20, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, - 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, - 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x28, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x28, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6f, - 0x72, 0x64, 0x29, 0x2c, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, - 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, - 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x6c, 0x75, 0x74, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, - 0x78, 0x20, 0x2b, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x67, 0x6c, 0x5f, 0x57, 0x6f, 0x72, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, - 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, - 0x73, 0x65, 0x65, 0x64, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x75, 0x74, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, - 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x67, 0x6c, 0x5f, 0x57, 0x6f, 0x72, 0x6b, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x73, 0x65, 0x65, 0x64, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, - 0x4c, 0x55, 0x54, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x76, - 0x65, 0x63, 0x32, 0x28, 0x6c, 0x75, 0x74, 0x5f, 0x78, 0x2c, 0x20, 0x6c, 0x75, 0x74, 0x5f, 0x79, 0x29, 0x2c, 0x20, 0x30, 0x29, - 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x32, 0x20, 0x2a, 0x20, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x2d, 0x20, 0x34, 0x29, 0x29, 0x20, 0x26, 0x20, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6d, - 0x61, 0x78, 0x28, 0x31, 0x32, 0x38, 0x20, 0x2d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2d, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, - 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x49, 0x6e, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x43, 0x45, - 0x4d, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x46, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x77, 0x6f, - 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x74, 0x65, 0x6c, 0x6c, 0x20, 0x69, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x43, 0x45, 0x4d, - 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x2c, 0x20, - 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x77, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4e, 0x20, 0x62, 0x69, - 0x74, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x20, 0x62, 0x79, 0x20, 0x31, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, - 0x3d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, - 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x6d, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, - 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x77, 0x65, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x31, 0x38, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, - 0x3e, 0x20, 0x39, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x69, - 0x74, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, - 0x78, 0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x20, 0x3d, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x28, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, - 0x4c, 0x55, 0x54, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, 0x74, 0x73, 0x54, 0x6f, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x38, 0x20, 0x2a, 0x20, 0x28, 0x6e, 0x75, 0x6d, - 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, - 0x2b, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x62, 0x69, 0x74, 0x73, 0x29, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4f, - 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x77, 0x65, 0x20, - 0x6e, 0x65, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x20, 0x2a, 0x20, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x62, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x5f, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x64, 0x69, 0x76, 0x35, 0x5f, 0x63, 0x65, 0x69, 0x6c, 0x28, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x79, 0x20, 0x2a, 0x20, 0x38, 0x20, 0x2a, - 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29, - 0x20, 0x2b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x64, 0x69, 0x76, 0x33, 0x5f, - 0x63, 0x65, 0x69, 0x6c, 0x28, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x7a, - 0x20, 0x2a, 0x20, 0x37, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4e, - 0x6f, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x61, 0x6c, 0x6c, 0x28, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x28, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x29, - 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6d, 0x69, 0x74, - 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x28, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, - 0x79, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x20, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x43, 0x45, 0x4d, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x63, 0x65, 0x6d, 0x20, 0x3d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x65, 0x6d, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x65, 0x6d, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x28, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2c, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, - 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x63, 0x65, 0x6d, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x5f, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, - 0x2c, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2c, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x2c, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x65, 0x6d, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x48, - 0x45, 0x43, 0x4b, 0x5f, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x28, 0x29, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x28, 0x65, 0x70, 0x30, 0x2c, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2c, 0x20, 0x64, - 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x38, 0x42, 0x49, 0x54, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x28, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, - 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x20, 0x3e, 0x3e, 0x20, 0x38, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, - 0x63, 0x34, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x6f, 0x69, 0x64, 0x5f, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x74, 0x20, 0x26, 0x26, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, - 0x3d, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x48, 0x44, 0x52, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x28, 0x66, 0x69, - 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x70, 0x31, 0x36, 0x28, 0x66, 0x69, 0x6e, 0x61, - 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2c, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x79, - 0x2c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, -0 -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc1.glsl b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc1.glsl deleted file mode 100644 index 251635d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc1.glsl +++ /dev/null @@ -1,544 +0,0 @@ -/* - * Copyright 2020-2022 Matias N. Goldberg - * Copyright 2022 Intel Corporation - * - * 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 THE - * AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#version 310 es - -#if defined(GL_ES) && GL_ES == 1 - // Desktop GLSL allows the const keyword for either compile-time or - // run-time constants. GLSL ES only allows the keyword for compile-time - // constants. Since we use const on run-time constants, define it to - // nothing. - #define const -#endif - -%s // include "CrossPlatformSettings_piece_all.glsl" - -#define FLT_MAX 340282346638528859811704183484516925440.0f - -layout( location = 0 ) uniform uint p_numRefinements; - -uniform sampler2D srcTex; - -layout( rgba16ui ) uniform restrict writeonly mediump uimage2D dstTexture; - -layout( std430, binding = 1 ) readonly restrict buffer globalBuffer -{ - float2 c_oMatch5[256]; - float2 c_oMatch6[256]; -}; - -layout( local_size_x = 8, // - local_size_y = 8, // - local_size_z = 1 ) in; - -float3 rgb565to888( float rgb565 ) -{ - float3 retVal; - retVal.x = floor( rgb565 / 2048.0f ); - retVal.y = floor( mod( rgb565, 2048.0f ) / 32.0f ); - retVal.z = floor( mod( rgb565, 32.0f ) ); - - // This is the correct 565 to 888 conversion: - // rgb = floor( rgb * ( 255.0f / float3( 31.0f, 63.0f, 31.0f ) ) + 0.5f ) - // - // However stb_dxt follows a different one: - // rb = floor( rb * ( 256 / 32 + 8 / 32 ) ); - // g = floor( g * ( 256 / 64 + 4 / 64 ) ); - // - // I'm not sure exactly why but it's possible this is how the S3TC specifies it should be decoded - // It's quite possible this is the reason: - // http://www.ludicon.com/castano/blog/2009/03/gpu-dxt-decompression/ - // - // Or maybe it's just because it's cheap to do with integer shifts. - // Anyway, we follow stb_dxt's conversion just in case - // (gives almost the same result, with 1 or -1 of difference for a very few values) - // - // Perhaps when we make 888 -> 565 -> 888 it doesn't matter - // because they end up mapping to the original number - - return floor( retVal * float3( 8.25f, 4.0625f, 8.25f ) ); -} - -float rgb888to565( float3 rgbValue ) -{ - rgbValue.rb = floor( rgbValue.rb * 31.0f / 255.0f + 0.5f ); - rgbValue.g = floor( rgbValue.g * 63.0f / 255.0f + 0.5f ); - - return rgbValue.r * 2048.0f + rgbValue.g * 32.0f + rgbValue.b; -} - -// linear interpolation at 1/3 point between a and b, using desired rounding type -float3 lerp13( float3 a, float3 b ) -{ -#ifdef STB_DXT_USE_ROUNDING_BIAS - // with rounding bias - return a + floor( ( b - a ) * ( 1.0f / 3.0f ) + 0.5f ); -#else - // without rounding bias - return floor( ( 2.0f * a + b ) / 3.0f ); -#endif -} - -/// Unpacks a block of 4 colours from two 16-bit endpoints -void EvalColors( out float3 colours[4], float c0, float c1 ) -{ - colours[0] = rgb565to888( c0 ); - colours[1] = rgb565to888( c1 ); - colours[2] = lerp13( colours[0], colours[1] ); - colours[3] = lerp13( colours[1], colours[0] ); -} - -/** The color optimization function. (Clever code, part 1) -@param outMinEndp16 [out] - Minimum endpoint, in RGB565 -@param outMaxEndp16 [out] - Maximum endpoint, in RGB565 -*/ -void OptimizeColorsBlock( const uint srcPixelsBlock[16], out float outMinEndp16, out float outMaxEndp16 ) -{ - // determine color distribution - float3 avgColour; - float3 minColour; - float3 maxColour; - - avgColour = minColour = maxColour = unpackUnorm4x8( srcPixelsBlock[0] ).xyz; - for( int i = 1; i < 16; ++i ) - { - const float3 currColourUnorm = unpackUnorm4x8( srcPixelsBlock[i] ).xyz; - avgColour += currColourUnorm; - minColour = min( minColour, currColourUnorm ); - maxColour = max( maxColour, currColourUnorm ); - } - - avgColour = round( avgColour * 255.0f / 16.0f ); - maxColour *= 255.0f; - minColour *= 255.0f; - - // determine covariance matrix - float cov[6]; - for( int i = 0; i < 6; ++i ) - cov[i] = 0.0f; - - for( int i = 0; i < 16; ++i ) - { - const float3 currColour = unpackUnorm4x8( srcPixelsBlock[i] ).xyz * 255.0f; - float3 rgbDiff = currColour - avgColour; - - cov[0] += rgbDiff.r * rgbDiff.r; - cov[1] += rgbDiff.r * rgbDiff.g; - cov[2] += rgbDiff.r * rgbDiff.b; - cov[3] += rgbDiff.g * rgbDiff.g; - cov[4] += rgbDiff.g * rgbDiff.b; - cov[5] += rgbDiff.b * rgbDiff.b; - } - - // convert covariance matrix to float, find principal axis via power iter - for( int i = 0; i < 6; ++i ) - cov[i] /= 255.0f; - - float3 vF = maxColour - minColour; - - const int nIterPower = 4; - for( int iter = 0; iter < nIterPower; ++iter ) - { - const float r = vF.r * cov[0] + vF.g * cov[1] + vF.b * cov[2]; - const float g = vF.r * cov[1] + vF.g * cov[3] + vF.b * cov[4]; - const float b = vF.r * cov[2] + vF.g * cov[4] + vF.b * cov[5]; - - vF.r = r; - vF.g = g; - vF.b = b; - } - - float magn = max3( abs( vF.r ), abs( vF.g ), abs( vF.b ) ); - float3 v; - - if( magn < 4.0f ) - { // too small, default to luminance - v.r = 299.0f; // JPEG YCbCr luma coefs, scaled by 1000. - v.g = 587.0f; - v.b = 114.0f; - } - else - { - v = trunc( vF * ( 512.0f / magn ) ); - } - - // Pick colors at extreme points - float3 minEndpoint, maxEndpoint; - float minDot = FLT_MAX; - float maxDot = -FLT_MAX; - for( int i = 0; i < 16; ++i ) - { - const float3 currColour = unpackUnorm4x8( srcPixelsBlock[i] ).xyz * 255.0f; - const float dotValue = dot( currColour, v ); - - if( dotValue < minDot ) - { - minDot = dotValue; - minEndpoint = currColour; - } - - if( dotValue > maxDot ) - { - maxDot = dotValue; - maxEndpoint = currColour; - } - } - - outMinEndp16 = rgb888to565( minEndpoint ); - outMaxEndp16 = rgb888to565( maxEndpoint ); -} - -// The color matching function -uint MatchColorsBlock( const uint srcPixelsBlock[16], float3 colour[4] ) -{ - uint mask = 0u; - float3 dir = colour[0] - colour[1]; - float stops[4]; - - for( int i = 0; i < 4; ++i ) - stops[i] = dot( colour[i], dir ); - - // think of the colors as arranged on a line; project point onto that line, then choose - // next color out of available ones. we compute the crossover points for "best color in top - // half"/"best in bottom half" and then the same inside that subinterval. - // - // relying on this 1d approximation isn't always optimal in terms of euclidean distance, - // but it's very close and a lot faster. - // http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html - - float c0Point = trunc( ( stops[1] + stops[3] ) * 0.5f ); - float halfPoint = trunc( ( stops[3] + stops[2] ) * 0.5f ); - float c3Point = trunc( ( stops[2] + stops[0] ) * 0.5f ); - -#ifndef BC1_DITHER - // the version without dithering is straightforward - for( uint i = 16u; i-- > 0u; ) - { - const float3 currColour = unpackUnorm4x8( srcPixelsBlock[i] ).xyz * 255.0f; - - const float dotValue = dot( currColour, dir ); - mask <<= 2u; - - if( dotValue < halfPoint ) - mask |= ( ( dotValue < c0Point ) ? 1u : 3u ); - else - mask |= ( ( dotValue < c3Point ) ? 2u : 0u ); - } -#else - // with floyd-steinberg dithering - float4 ep1 = float4( 0, 0, 0, 0 ); - float4 ep2 = float4( 0, 0, 0, 0 ); - - c0Point *= 16.0f; - halfPoint *= 16.0f; - c3Point *= 16.0f; - - for( uint y = 0u; y < 4u; ++y ) - { - float ditherDot; - uint lmask, step; - - float3 currColour; - float dotValue; - - currColour = unpackUnorm4x8( srcPixelsBlock[y * 4u + 0u] ).xyz * 255.0f; - dotValue = dot( currColour, dir ); - - ditherDot = ( dotValue * 16.0f ) + ( 3.0f * ep2[1] + 5.0f * ep2[0] ); - if( ditherDot < halfPoint ) - step = ( ditherDot < c0Point ) ? 1u : 3u; - else - step = ( ditherDot < c3Point ) ? 2u : 0u; - ep1[0] = dotValue - stops[step]; - lmask = step; - - currColour = unpackUnorm4x8( srcPixelsBlock[y * 4u + 1u] ).xyz * 255.0f; - dotValue = dot( currColour, dir ); - - ditherDot = ( dotValue * 16.0f ) + ( 7.0f * ep1[0] + 3.0f * ep2[2] + 5.0f * ep2[1] + ep2[0] ); - if( ditherDot < halfPoint ) - step = ( ditherDot < c0Point ) ? 1u : 3u; - else - step = ( ditherDot < c3Point ) ? 2u : 0u; - ep1[1] = dotValue - stops[step]; - lmask |= step << 2u; - - currColour = unpackUnorm4x8( srcPixelsBlock[y * 4u + 2u] ).xyz * 255.0f; - dotValue = dot( currColour, dir ); - - ditherDot = ( dotValue * 16.0f ) + ( 7.0f * ep1[1] + 3.0f * ep2[3] + 5.0f * ep2[2] + ep2[1] ); - if( ditherDot < halfPoint ) - step = ( ditherDot < c0Point ) ? 1u : 3u; - else - step = ( ditherDot < c3Point ) ? 2u : 0u; - ep1[2] = dotValue - stops[step]; - lmask |= step << 4u; - - currColour = unpackUnorm4x8( srcPixelsBlock[y * 4u + 2u] ).xyz * 255.0f; - dotValue = dot( currColour, dir ); - - ditherDot = ( dotValue * 16.0f ) + ( 7.0f * ep1[2] + 5.0f * ep2[3] + ep2[2] ); - if( ditherDot < halfPoint ) - step = ( ditherDot < c0Point ) ? 1u : 3u; - else - step = ( ditherDot < c3Point ) ? 2u : 0u; - ep1[3] = dotValue - stops[step]; - lmask |= step << 6u; - - mask |= lmask << ( y * 8u ); - { - float4 tmp = ep1; - ep1 = ep2; - ep2 = tmp; - } // swap - } -#endif - - return mask; -} - -// The refinement function. (Clever code, part 2) -// Tries to optimize colors to suit block contents better. -// (By solving a least squares system via normal equations+Cramer's rule) -bool RefineBlock( const uint srcPixelsBlock[16], uint mask, inout float inOutMinEndp16, - inout float inOutMaxEndp16 ) -{ - float newMin16, newMax16; - const float oldMin = inOutMinEndp16; - const float oldMax = inOutMaxEndp16; - - if( ( mask ^ ( mask << 2u ) ) < 4u ) // all pixels have the same index? - { - // yes, linear system would be singular; solve using optimal - // single-color match on average color - float3 rgbVal = float3( 8.0f / 255.0f, 8.0f / 255.0f, 8.0f / 255.0f ); - for( int i = 0; i < 16; ++i ) - rgbVal += unpackUnorm4x8( srcPixelsBlock[i] ).xyz; - - rgbVal = floor( rgbVal * ( 255.0f / 16.0f ) ); - - newMax16 = c_oMatch5[uint( rgbVal.r )][0] * 2048.0f + // - c_oMatch6[uint( rgbVal.g )][0] * 32.0f + // - c_oMatch5[uint( rgbVal.b )][0]; - newMin16 = c_oMatch5[uint( rgbVal.r )][1] * 2048.0f + // - c_oMatch6[uint( rgbVal.g )][1] * 32.0f + // - c_oMatch5[uint( rgbVal.b )][1]; - } - else - { - const float w1Tab[4] = float[4]( 3.0f, 0.0f, 2.0f, 1.0f ); - const float prods[4] = float[4]( 589824.0f, 2304.0f, 262402.0f, 66562.0f ); - // ^some magic to save a lot of multiplies in the accumulating loop... - // (precomputed products of weights for least squares system, accumulated inside one 32-bit - // register) - - float akku = 0.0f; - uint cm = mask; - float3 at1 = float3( 0, 0, 0 ); - float3 at2 = float3( 0, 0, 0 ); - for( int i = 0; i < 16; ++i, cm >>= 2u ) - { - const float3 currColour = unpackUnorm4x8( srcPixelsBlock[i] ).xyz * 255.0f; - - const uint step = cm & 3u; - const float w1 = w1Tab[step]; - akku += prods[step]; - at1 += currColour * w1; - at2 += currColour; - } - - at2 = 3.0f * at2 - at1; - - // extract solutions and decide solvability - const float xx = floor( akku / 65535.0f ); - const float yy = floor( mod( akku, 65535.0f ) / 256.0f ); - const float xy = mod( akku, 256.0f ); - - float2 f_rb_g; - f_rb_g.x = 3.0f * 31.0f / 255.0f / ( xx * yy - xy * xy ); - f_rb_g.y = f_rb_g.x * 63.0f / 31.0f; - - // solve. - const float3 newMaxVal = clamp( floor( ( at1 * yy - at2 * xy ) * f_rb_g.xyx + 0.5f ), - float3( 0.0f, 0.0f, 0.0f ), float3( 31, 63, 31 ) ); - newMax16 = newMaxVal.x * 2048.0f + newMaxVal.y * 32.0f + newMaxVal.z; - - const float3 newMinVal = clamp( floor( ( at2 * xx - at1 * xy ) * f_rb_g.xyx + 0.5f ), - float3( 0.0f, 0.0f, 0.0f ), float3( 31, 63, 31 ) ); - newMin16 = newMinVal.x * 2048.0f + newMinVal.y * 32.0f + newMinVal.z; - } - - inOutMinEndp16 = newMin16; - inOutMaxEndp16 = newMax16; - - return oldMin != newMin16 || oldMax != newMax16; -} - -#ifdef BC1_DITHER -/// Quantizes 'srcValue' which is originally in 888 (full range), -/// converting it to 565 and then back to 888 (quantized) -float3 quant( float3 srcValue ) -{ - srcValue = clamp( srcValue, 0.0f, 255.0f ); - // Convert 888 -> 565 - srcValue = floor( srcValue * float3( 31.0f / 255.0f, 63.0f / 255.0f, 31.0f / 255.0f ) + 0.5f ); - // Convert 565 -> 888 back - srcValue = floor( srcValue * float3( 8.25f, 4.0625f, 8.25f ) ); - - return srcValue; -} - -void DitherBlock( const uint srcPixBlck[16], out uint dthPixBlck[16] ) -{ - float3 ep1[4] = float3[4]( float3( 0, 0, 0 ), float3( 0, 0, 0 ), float3( 0, 0, 0 ), float3( 0, 0, 0 ) ); - float3 ep2[4] = float3[4]( float3( 0, 0, 0 ), float3( 0, 0, 0 ), float3( 0, 0, 0 ), float3( 0, 0, 0 ) ); - - for( uint y = 0u; y < 16u; y += 4u ) - { - float3 srcPixel, dithPixel; - - srcPixel = unpackUnorm4x8( srcPixBlck[y + 0u] ).xyz * 255.0f; - dithPixel = quant( srcPixel + trunc( ( 3.0f * ep2[1] + 5.0f * ep2[0] ) * ( 1.0f / 16.0f ) ) ); - ep1[0] = srcPixel - dithPixel; - dthPixBlck[y + 0u] = packUnorm4x8( float4( dithPixel * ( 1.0f / 255.0f ), 1.0f ) ); - - srcPixel = unpackUnorm4x8( srcPixBlck[y + 1u] ).xyz * 255.0f; - dithPixel = quant( - srcPixel + trunc( ( 7.0f * ep1[0] + 3.0f * ep2[2] + 5.0f * ep2[1] + ep2[0] ) * ( 1.0f / 16.0f ) ) ); - ep1[1] = srcPixel - dithPixel; - dthPixBlck[y + 1u] = packUnorm4x8( float4( dithPixel * ( 1.0f / 255.0f ), 1.0f ) ); - - srcPixel = unpackUnorm4x8( srcPixBlck[y + 2u] ).xyz * 255.0f; - dithPixel = quant( - srcPixel + trunc( ( 7.0f * ep1[1] + 3.0f * ep2[3] + 5.0f * ep2[2] + ep2[1] ) * ( 1.0f / 16.0f ) ) ); - ep1[2] = srcPixel - dithPixel; - dthPixBlck[y + 2u] = packUnorm4x8( float4( dithPixel * ( 1.0f / 255.0f ), 1.0f ) ); - - srcPixel = unpackUnorm4x8( srcPixBlck[y + 3u] ).xyz * 255.0f; - dithPixel = quant( srcPixel + trunc( ( 7.0f * ep1[2] + 5.0f * ep2[3] + ep2[2] ) * ( 1.0f / 16.0f ) ) ); - ep1[3] = srcPixel - dithPixel; - dthPixBlck[y + 3u] = packUnorm4x8( float4( dithPixel * ( 1.0f / 255.0f ), 1.0f ) ); - - // swap( ep1, ep2 ) - for( uint i = 0u; i < 4u; ++i ) - { - float3 tmp = ep1[i]; - ep1[i] = ep2[i]; - ep2[i] = tmp; - } - } -} -#endif - -void main() -{ - uint srcPixelsBlock[16]; - - bool bAllColoursEqual = true; - - // Load the whole 4x4 block - const uint2 pixelsToLoadBase = gl_GlobalInvocationID.xy << 2u; - for( uint i = 0u; i < 16u; ++i ) - { - const uint2 pixelsToLoad = pixelsToLoadBase + uint2( i & 0x03u, i >> 2u ); - const float3 srcPixels0 = OGRE_Load2D( srcTex, int2( pixelsToLoad ), 0 ).xyz; - srcPixelsBlock[i] = packUnorm4x8( float4( srcPixels0, 1.0f ) ); - bAllColoursEqual = bAllColoursEqual && srcPixelsBlock[0] == srcPixelsBlock[i]; - } - - float maxEndp16, minEndp16; - uint mask = 0u; - - if( bAllColoursEqual ) - { - const uint3 rgbVal = uint3( unpackUnorm4x8( srcPixelsBlock[0] ).xyz * 255.0f ); - mask = 0xAAAAAAAAu; - maxEndp16 = - c_oMatch5[rgbVal.r][0] * 2048.0f + c_oMatch6[rgbVal.g][0] * 32.0f + c_oMatch5[rgbVal.b][0]; - minEndp16 = - c_oMatch5[rgbVal.r][1] * 2048.0f + c_oMatch6[rgbVal.g][1] * 32.0f + c_oMatch5[rgbVal.b][1]; - } - else - { -#ifdef BC1_DITHER - uint ditherPixelsBlock[16]; - // first step: compute dithered version for PCA if desired - DitherBlock( srcPixelsBlock, ditherPixelsBlock ); -#else -# define ditherPixelsBlock srcPixelsBlock -#endif - - // second step: pca+map along principal axis - OptimizeColorsBlock( ditherPixelsBlock, minEndp16, maxEndp16 ); - if( minEndp16 != maxEndp16 ) - { - float3 colours[4]; - EvalColors( colours, maxEndp16, minEndp16 ); // Note min/max are inverted - mask = MatchColorsBlock( srcPixelsBlock, colours ); - } - - // third step: refine (multiple times if requested) - bool bStopRefinement = false; - for( uint i = 0u; i < p_numRefinements && !bStopRefinement; ++i ) - { - const uint lastMask = mask; - - if( RefineBlock( ditherPixelsBlock, mask, minEndp16, maxEndp16 ) ) - { - if( minEndp16 != maxEndp16 ) - { - float3 colours[4]; - EvalColors( colours, maxEndp16, minEndp16 ); // Note min/max are inverted - mask = MatchColorsBlock( srcPixelsBlock, colours ); - } - else - { - mask = 0u; - bStopRefinement = true; - } - } - - bStopRefinement = mask == lastMask || bStopRefinement; - } - } - - // write the color block - if( maxEndp16 < minEndp16 ) - { - const float tmpValue = minEndp16; - minEndp16 = maxEndp16; - maxEndp16 = tmpValue; - mask ^= 0x55555555u; - } - - uint4 outputBytes; - outputBytes.x = uint( maxEndp16 ); - outputBytes.y = uint( minEndp16 ); - outputBytes.z = mask & 0xFFFFu; - outputBytes.w = mask >> 16u; - - uint2 dstUV = gl_GlobalInvocationID.xy; - imageStore( dstTexture, int2( dstUV ), outputBytes ); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc1_glsl.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc1_glsl.h deleted file mode 100644 index efdc37e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc1_glsl.h +++ /dev/null @@ -1,813 +0,0 @@ -static const char bc1_source[] = { -0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x2d, - 0x32, 0x30, 0x32, 0x32, 0x20, 0x4d, 0x61, 0x74, 0x69, 0x61, 0x73, 0x20, 0x4e, 0x2e, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x62, 0x65, - 0x72, 0x67, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x32, 0x20, - 0x49, 0x6e, 0x74, 0x65, 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x2a, 0x0a, - 0x20, 0x2a, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, - 0x62, 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, - 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x22, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x22, 0x29, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, - 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, - 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, - 0x63, 0x6f, 0x70, 0x79, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x2c, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x2c, 0x20, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, - 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, - 0x20, 0x73, 0x65, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x20, 0x2a, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x66, 0x75, 0x72, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, - 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x0a, 0x20, - 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, - 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x44, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, 0x2c, 0x20, 0x57, 0x49, 0x54, - 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x41, 0x4e, 0x59, 0x20, - 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x49, - 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x42, 0x55, 0x54, - 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x20, 0x54, 0x48, 0x45, 0x20, 0x57, - 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, - 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, - 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, - 0x53, 0x45, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x4e, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x52, 0x49, 0x4e, 0x47, 0x45, 0x4d, 0x45, 0x4e, - 0x54, 0x2e, 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, - 0x54, 0x48, 0x45, 0x0a, 0x20, 0x2a, 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x50, - 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, - 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x2c, 0x20, 0x44, 0x41, - 0x4d, 0x41, 0x47, 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x4c, 0x49, 0x41, - 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x57, 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x41, 0x4e, - 0x20, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x4f, 0x46, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, - 0x54, 0x4f, 0x52, 0x54, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, 0x53, 0x45, 0x2c, 0x20, 0x41, 0x52, - 0x49, 0x53, 0x49, 0x4e, 0x47, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x2c, 0x20, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, - 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x57, 0x49, 0x54, - 0x48, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x54, 0x48, 0x45, - 0x20, 0x55, 0x53, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x44, 0x45, 0x41, 0x4c, - 0x49, 0x4e, 0x47, 0x53, 0x20, 0x49, 0x4e, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x2e, - 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x31, 0x30, 0x20, 0x65, 0x73, - 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x47, 0x4c, 0x5f, 0x45, 0x53, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x47, 0x4c, 0x5f, 0x45, 0x53, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x73, - 0x6b, 0x74, 0x6f, 0x70, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x69, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x0a, 0x09, - 0x2f, 0x2f, 0x20, 0x72, 0x75, 0x6e, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, - 0x2e, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x20, 0x45, 0x53, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x2e, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x6f, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x6e, - 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x25, 0x73, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x20, 0x22, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x2e, 0x67, 0x6c, 0x73, 0x6c, 0x22, 0x0a, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x4c, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x20, 0x33, 0x34, 0x30, 0x32, - 0x38, 0x32, 0x33, 0x34, 0x36, 0x36, 0x33, 0x38, 0x35, 0x32, 0x38, 0x38, 0x35, 0x39, 0x38, 0x31, 0x31, 0x37, 0x30, 0x34, 0x31, - 0x38, 0x33, 0x34, 0x38, 0x34, 0x35, 0x31, 0x36, 0x39, 0x32, 0x35, 0x34, 0x34, 0x30, 0x2e, 0x30, 0x66, 0x0a, 0x0a, 0x6c, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, - 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x70, 0x5f, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3b, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x72, 0x63, 0x54, 0x65, 0x78, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, - 0x75, 0x74, 0x28, 0x20, 0x72, 0x67, 0x62, 0x61, 0x31, 0x36, 0x75, 0x69, 0x20, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x75, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x32, 0x44, 0x20, 0x64, 0x73, 0x74, 0x54, - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x73, 0x74, 0x64, 0x34, - 0x33, 0x30, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x29, 0x20, 0x72, 0x65, 0x61, - 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x0a, 0x7b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x32, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x35, 0x5b, 0x32, 0x35, 0x36, 0x5d, 0x3b, 0x0a, 0x09, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x36, 0x5b, 0x32, 0x35, 0x36, 0x5d, 0x3b, - 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x38, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x38, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x0a, 0x09, 0x09, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x7a, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x29, 0x20, 0x69, 0x6e, 0x3b, 0x0a, - 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x72, 0x67, 0x62, 0x35, 0x36, 0x35, 0x74, 0x6f, 0x38, 0x38, 0x38, 0x28, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x67, 0x62, 0x35, 0x36, 0x35, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x33, 0x20, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x2e, 0x78, - 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x72, 0x67, 0x62, 0x35, 0x36, 0x35, 0x20, 0x2f, 0x20, 0x32, 0x30, - 0x34, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x2e, 0x79, 0x20, 0x3d, 0x20, - 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x6d, 0x6f, 0x64, 0x28, 0x20, 0x72, 0x67, 0x62, 0x35, 0x36, 0x35, 0x2c, 0x20, 0x32, - 0x30, 0x34, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2f, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, - 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x6d, 0x6f, 0x64, - 0x28, 0x20, 0x72, 0x67, 0x62, 0x35, 0x36, 0x35, 0x2c, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, - 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, - 0x65, 0x63, 0x74, 0x20, 0x35, 0x36, 0x35, 0x20, 0x74, 0x6f, 0x20, 0x38, 0x38, 0x38, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x0a, 0x09, 0x2f, 0x2f, 0x09, 0x09, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, - 0x72, 0x28, 0x20, 0x72, 0x67, 0x62, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x33, 0x31, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x36, 0x33, 0x2e, 0x30, 0x66, 0x2c, 0x20, - 0x33, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x0a, 0x09, 0x2f, - 0x2f, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x20, 0x73, 0x74, 0x62, 0x5f, 0x64, 0x78, 0x74, - 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x6f, 0x6e, 0x65, 0x3a, 0x0a, 0x09, 0x2f, 0x2f, 0x09, 0x09, 0x72, 0x62, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, - 0x20, 0x72, 0x62, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x32, 0x35, 0x36, 0x20, 0x2f, 0x20, 0x33, 0x32, 0x20, 0x2b, 0x20, 0x38, 0x20, - 0x2f, 0x20, 0x33, 0x32, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x2f, 0x2f, 0x09, 0x09, 0x67, 0x20, 0x20, 0x3d, 0x20, 0x66, - 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x67, 0x20, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x32, 0x35, 0x36, 0x20, 0x2f, 0x20, 0x36, 0x34, - 0x20, 0x2b, 0x20, 0x34, 0x20, 0x2f, 0x20, 0x36, 0x34, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x2f, 0x2f, 0x0a, 0x09, 0x2f, - 0x2f, 0x20, 0x49, 0x27, 0x6d, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x6c, - 0x79, 0x20, 0x77, 0x68, 0x79, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x27, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x33, - 0x54, 0x43, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, - 0x64, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x49, 0x74, 0x27, 0x73, - 0x20, 0x71, 0x75, 0x69, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3a, 0x0a, 0x09, 0x2f, 0x2f, 0x09, 0x09, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6c, 0x75, 0x64, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x61, 0x73, 0x74, 0x61, 0x6e, 0x6f, 0x2f, 0x62, 0x6c, 0x6f, 0x67, 0x2f, 0x32, 0x30, 0x30, 0x39, 0x2f, 0x30, 0x33, - 0x2f, 0x67, 0x70, 0x75, 0x2d, 0x64, 0x78, 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x2f, 0x0a, 0x09, 0x2f, 0x2f, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4f, 0x72, 0x20, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x20, 0x69, - 0x74, 0x27, 0x73, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x69, 0x74, 0x27, 0x73, - 0x20, 0x63, 0x68, 0x65, 0x61, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x65, 0x72, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x73, 0x2e, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x41, 0x6e, 0x79, 0x77, - 0x61, 0x79, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x73, 0x74, 0x62, 0x5f, 0x64, 0x78, 0x74, - 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x69, 0x6e, - 0x20, 0x63, 0x61, 0x73, 0x65, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x28, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x61, 0x6c, 0x6d, 0x6f, - 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x31, 0x20, 0x6f, 0x72, 0x20, 0x2d, 0x31, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x66, 0x65, 0x77, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x29, 0x0a, 0x09, 0x2f, 0x2f, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x50, 0x65, 0x72, 0x68, 0x61, 0x70, - 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x77, 0x65, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x38, 0x38, 0x38, 0x20, 0x2d, 0x3e, - 0x20, 0x35, 0x36, 0x35, 0x20, 0x2d, 0x3e, 0x20, 0x38, 0x38, 0x38, 0x20, 0x69, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, - 0x74, 0x20, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x79, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x75, 0x70, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x0a, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x72, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x38, 0x2e, 0x32, 0x35, 0x66, 0x2c, 0x20, 0x34, - 0x2e, 0x30, 0x36, 0x32, 0x35, 0x66, 0x2c, 0x20, 0x38, 0x2e, 0x32, 0x35, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x67, 0x62, 0x38, 0x38, 0x38, 0x74, 0x6f, 0x35, 0x36, 0x35, 0x28, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x72, - 0x67, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x72, 0x62, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x72, - 0x67, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x72, 0x62, 0x20, 0x2a, 0x20, 0x33, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, - 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x72, 0x67, 0x62, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x72, 0x67, 0x62, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x67, 0x20, 0x2a, 0x20, 0x36, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, - 0x30, 0x66, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x72, 0x20, 0x2a, 0x20, 0x32, 0x30, 0x34, 0x38, 0x2e, 0x30, 0x66, - 0x20, 0x2b, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x67, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, - 0x20, 0x2b, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x62, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2f, 0x20, - 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x61, 0x74, 0x20, 0x31, 0x2f, 0x33, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, - 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x2c, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x33, 0x20, 0x6c, 0x65, 0x72, 0x70, 0x31, 0x33, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x2c, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x62, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x53, 0x54, - 0x42, 0x5f, 0x44, 0x58, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x49, - 0x41, 0x53, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x62, 0x69, 0x61, 0x73, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x20, 0x2b, 0x20, 0x66, 0x6c, 0x6f, 0x6f, - 0x72, 0x28, 0x20, 0x28, 0x20, 0x62, 0x20, 0x2d, 0x20, 0x61, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, - 0x20, 0x2f, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x23, - 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x61, 0x73, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6c, 0x6f, - 0x6f, 0x72, 0x28, 0x20, 0x28, 0x20, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x61, 0x20, 0x2b, 0x20, 0x62, 0x20, 0x29, 0x20, - 0x2f, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, - 0x2f, 0x2f, 0x20, 0x55, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x73, 0x20, 0x61, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6f, 0x66, - 0x20, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x31, - 0x36, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, - 0x45, 0x76, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x28, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x33, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x34, 0x5d, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, - 0x30, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x31, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x63, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x35, 0x36, 0x35, 0x74, 0x6f, 0x38, 0x38, 0x38, 0x28, - 0x20, 0x63, 0x30, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, - 0x72, 0x67, 0x62, 0x35, 0x36, 0x35, 0x74, 0x6f, 0x38, 0x38, 0x38, 0x28, 0x20, 0x63, 0x31, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x63, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x72, 0x70, 0x31, 0x33, 0x28, 0x20, 0x63, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x31, 0x5d, - 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x72, - 0x70, 0x31, 0x33, 0x28, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x28, 0x43, 0x6c, 0x65, 0x76, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x31, 0x29, 0x0a, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6f, 0x75, 0x74, 0x4d, 0x69, - 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x5b, 0x6f, 0x75, 0x74, 0x5d, 0x0a, 0x09, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, - 0x6d, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x47, 0x42, 0x35, 0x36, 0x35, - 0x0a, 0x40, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x6f, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, - 0x5b, 0x6f, 0x75, 0x74, 0x5d, 0x0a, 0x09, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x47, 0x42, 0x35, 0x36, 0x35, 0x0a, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, - 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x31, 0x36, 0x5d, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, - 0x6f, 0x75, 0x74, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x09, - 0x2f, 0x2f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x76, - 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x6d, 0x69, 0x6e, 0x43, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x0a, 0x09, 0x61, 0x76, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x69, - 0x6e, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, - 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x30, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, - 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x31, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, - 0x31, 0x36, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x55, 0x6e, 0x6f, 0x72, - 0x6d, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, - 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, - 0x7a, 0x3b, 0x0a, 0x09, 0x09, 0x61, 0x76, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x75, 0x72, - 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x69, 0x6e, 0x43, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x20, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, - 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x20, 0x29, 0x3b, 0x0a, - 0x09, 0x09, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x20, 0x6d, 0x61, - 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x55, 0x6e, - 0x6f, 0x72, 0x6d, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x61, 0x76, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, - 0x20, 0x3d, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x28, 0x20, 0x61, 0x76, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x2a, - 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x6d, - 0x61, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x2a, 0x3d, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, - 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x2a, 0x3d, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, - 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x6f, - 0x76, 0x5b, 0x36, 0x5d, 0x3b, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, - 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x36, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, - 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, - 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, 0x75, - 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, - 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, - 0x69, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x09, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x63, 0x75, 0x72, 0x72, - 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x2d, 0x20, 0x61, 0x76, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x0a, - 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, 0x30, 0x5d, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x72, - 0x20, 0x2a, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x72, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, 0x31, - 0x5d, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x72, 0x20, 0x2a, 0x20, 0x72, 0x67, 0x62, 0x44, - 0x69, 0x66, 0x66, 0x2e, 0x67, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x67, - 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x72, 0x20, 0x2a, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x62, 0x3b, 0x0a, - 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, 0x33, 0x5d, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x67, - 0x20, 0x2a, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x67, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, 0x34, - 0x5d, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x67, 0x20, 0x2a, 0x20, 0x72, 0x67, 0x62, 0x44, - 0x69, 0x66, 0x66, 0x2e, 0x62, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, 0x35, 0x5d, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x67, - 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x62, 0x20, 0x2a, 0x20, 0x72, 0x67, 0x62, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x62, 0x3b, 0x0a, - 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x63, 0x6f, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x2c, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x20, 0x61, 0x78, 0x69, 0x73, - 0x20, 0x76, 0x69, 0x61, 0x20, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x69, 0x74, 0x65, 0x72, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x36, 0x3b, 0x20, 0x2b, 0x2b, - 0x69, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x76, 0x5b, 0x69, 0x5d, 0x20, 0x2f, 0x3d, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, - 0x66, 0x3b, 0x0a, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x46, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x43, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x2d, 0x20, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x0a, 0x09, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x49, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x20, - 0x3d, 0x20, 0x34, 0x3b, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3d, - 0x20, 0x30, 0x3b, 0x20, 0x69, 0x74, 0x65, 0x72, 0x20, 0x3c, 0x20, 0x6e, 0x49, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x77, 0x65, 0x72, - 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x74, 0x65, 0x72, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x46, 0x2e, 0x72, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x76, - 0x5b, 0x30, 0x5d, 0x20, 0x2b, 0x20, 0x76, 0x46, 0x2e, 0x67, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x2b, - 0x20, 0x76, 0x46, 0x2e, 0x62, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x76, 0x5b, 0x32, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x67, 0x20, 0x3d, 0x20, 0x76, 0x46, 0x2e, 0x72, 0x20, 0x2a, 0x20, 0x63, - 0x6f, 0x76, 0x5b, 0x31, 0x5d, 0x20, 0x2b, 0x20, 0x76, 0x46, 0x2e, 0x67, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x76, 0x5b, 0x33, 0x5d, - 0x20, 0x2b, 0x20, 0x76, 0x46, 0x2e, 0x62, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x76, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x76, 0x46, 0x2e, 0x72, 0x20, 0x2a, - 0x20, 0x63, 0x6f, 0x76, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x20, 0x76, 0x46, 0x2e, 0x67, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x76, 0x5b, - 0x34, 0x5d, 0x20, 0x2b, 0x20, 0x76, 0x46, 0x2e, 0x62, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x76, 0x5b, 0x35, 0x5d, 0x3b, 0x0a, 0x0a, - 0x09, 0x09, 0x76, 0x46, 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x72, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x46, 0x2e, 0x67, 0x20, 0x3d, 0x20, - 0x67, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x46, 0x2e, 0x62, 0x20, 0x3d, 0x20, 0x62, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x33, 0x28, 0x20, 0x61, 0x62, 0x73, - 0x28, 0x20, 0x76, 0x46, 0x2e, 0x72, 0x20, 0x29, 0x2c, 0x20, 0x61, 0x62, 0x73, 0x28, 0x20, 0x76, 0x46, 0x2e, 0x67, 0x20, 0x29, - 0x2c, 0x20, 0x61, 0x62, 0x73, 0x28, 0x20, 0x76, 0x46, 0x2e, 0x62, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x33, 0x20, 0x76, 0x3b, 0x0a, 0x0a, 0x09, 0x69, 0x66, 0x28, 0x20, 0x6d, 0x61, 0x67, 0x6e, 0x20, 0x3c, 0x20, 0x34, - 0x2e, 0x30, 0x66, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x75, 0x6d, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x0a, 0x09, 0x09, - 0x76, 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x32, 0x39, 0x39, 0x2e, 0x30, 0x66, 0x3b, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4a, 0x50, 0x45, - 0x47, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x20, 0x6c, 0x75, 0x6d, 0x61, 0x20, 0x63, 0x6f, 0x65, 0x66, 0x73, 0x2c, 0x20, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x31, 0x30, 0x30, 0x30, 0x2e, 0x0a, 0x09, 0x09, 0x76, 0x2e, 0x67, 0x20, - 0x3d, 0x20, 0x35, 0x38, 0x37, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x09, 0x76, 0x2e, 0x62, 0x20, 0x3d, 0x20, 0x31, 0x31, 0x34, - 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x76, 0x20, - 0x3d, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x76, 0x46, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x35, 0x31, 0x32, 0x2e, 0x30, - 0x66, 0x20, 0x2f, 0x20, 0x6d, 0x61, 0x67, 0x6e, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, - 0x20, 0x50, 0x69, 0x63, 0x6b, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x74, 0x20, 0x65, 0x78, 0x74, 0x72, 0x65, - 0x6d, 0x65, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x6d, 0x69, 0x6e, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x69, 0x6e, 0x44, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x46, 0x4c, 0x54, - 0x5f, 0x4d, 0x41, 0x58, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x74, 0x20, 0x3d, - 0x20, 0x2d, 0x46, 0x4c, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x3b, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, - 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, 0x75, 0x72, - 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, - 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, - 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x09, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, - 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2c, 0x20, 0x76, 0x20, 0x29, - 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x20, 0x6d, - 0x69, 0x6e, 0x44, 0x6f, 0x74, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x69, 0x6e, 0x44, 0x6f, 0x74, - 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x69, 0x6e, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, - 0x09, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3e, - 0x20, 0x6d, 0x61, 0x78, 0x44, 0x6f, 0x74, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x78, 0x44, - 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x78, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, - 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, - 0x31, 0x36, 0x20, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x38, 0x38, 0x38, 0x74, 0x6f, 0x35, 0x36, 0x35, 0x28, 0x20, 0x6d, 0x69, 0x6e, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x45, 0x6e, - 0x64, 0x70, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x72, 0x67, 0x62, 0x38, 0x38, 0x38, 0x74, 0x6f, 0x35, 0x36, 0x35, 0x28, 0x20, 0x6d, - 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2f, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x72, - 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x31, 0x36, 0x5d, 0x2c, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x33, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x5b, 0x34, 0x5d, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, - 0x20, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x5b, 0x30, 0x5d, 0x20, 0x2d, 0x20, 0x63, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, - 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, - 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x34, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x73, 0x74, 0x6f, 0x70, - 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x5b, 0x69, 0x5d, - 0x2c, 0x20, 0x64, 0x69, 0x72, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x20, 0x61, 0x73, 0x20, 0x61, 0x72, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6c, 0x69, 0x6e, - 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x6e, 0x65, - 0x78, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0x2e, 0x20, 0x77, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x22, 0x62, 0x65, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x6f, 0x70, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x22, 0x2f, 0x22, 0x62, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, - 0x20, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x22, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x2e, 0x0a, 0x09, 0x2f, 0x2f, 0x0a, 0x09, 0x2f, - 0x2f, 0x20, 0x72, 0x65, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x31, 0x64, 0x20, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x61, - 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x65, 0x72, 0x6d, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x75, 0x63, 0x6c, 0x69, 0x64, 0x65, 0x61, 0x6e, 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x2c, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x27, 0x73, 0x20, 0x76, 0x65, 0x72, 0x79, - 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x20, 0x66, 0x61, 0x73, 0x74, - 0x65, 0x72, 0x2e, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x62, 0x6c, 0x6f, 0x6f, 0x6d, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2e, 0x62, 0x6c, 0x6f, 0x67, 0x73, 0x70, 0x6f, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x32, 0x30, - 0x30, 0x38, 0x2f, 0x31, 0x32, 0x2f, 0x31, 0x32, 0x2d, 0x30, 0x38, 0x2d, 0x30, 0x38, 0x2d, 0x64, 0x78, 0x74, 0x63, 0x2d, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x0a, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, - 0x30, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x28, 0x20, 0x73, 0x74, 0x6f, - 0x70, 0x73, 0x5b, 0x31, 0x5d, 0x20, 0x2b, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, 0x33, 0x5d, 0x20, 0x29, 0x20, 0x2a, 0x20, - 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x28, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, - 0x33, 0x5d, 0x20, 0x2b, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, 0x32, 0x5d, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, - 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x33, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x3d, - 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x28, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x20, - 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, 0x30, 0x5d, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x3b, 0x0a, - 0x0a, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x20, 0x42, 0x43, 0x31, 0x5f, 0x44, 0x49, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x09, - 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x61, 0x69, 0x67, - 0x68, 0x74, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x69, 0x20, 0x3d, 0x20, 0x31, 0x36, 0x75, 0x3b, 0x20, 0x69, 0x2d, 0x2d, 0x20, 0x3e, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x29, 0x0a, - 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, 0x75, 0x72, - 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, - 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, - 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x0a, 0x09, 0x09, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, - 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2c, 0x20, 0x64, 0x69, - 0x72, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x32, 0x75, 0x3b, 0x0a, 0x0a, - 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x20, 0x68, 0x61, 0x6c, 0x66, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x20, - 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x20, 0x63, 0x30, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, - 0x29, 0x20, 0x3f, 0x20, 0x31, 0x75, 0x20, 0x3a, 0x20, 0x33, 0x75, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, - 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x7c, 0x3d, 0x20, 0x28, 0x20, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x20, 0x3c, 0x20, 0x63, 0x33, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x32, 0x75, 0x20, - 0x3a, 0x20, 0x30, 0x75, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x2f, 0x2f, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x66, 0x6c, 0x6f, 0x79, 0x64, 0x2d, 0x73, 0x74, 0x65, 0x69, 0x6e, 0x62, 0x65, 0x72, 0x67, 0x20, - 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x65, 0x70, 0x31, - 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, - 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x65, 0x70, 0x32, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x34, 0x28, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, - 0x63, 0x30, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x3d, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x68, 0x61, - 0x6c, 0x66, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x3d, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x63, 0x33, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x2a, 0x3d, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x0a, 0x09, 0x66, 0x6f, 0x72, - 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x79, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x79, 0x20, 0x3c, 0x20, 0x34, 0x75, - 0x3b, 0x20, 0x2b, 0x2b, 0x79, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x69, - 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x6d, 0x61, 0x73, 0x6b, - 0x2c, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, 0x75, 0x72, - 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, - 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2a, 0x20, 0x34, 0x75, 0x20, 0x2b, 0x20, 0x30, - 0x75, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x09, - 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2c, 0x20, 0x64, 0x69, 0x72, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x64, 0x69, 0x74, 0x68, - 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2a, 0x20, - 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, - 0x32, 0x5b, 0x31, 0x5d, 0x20, 0x2b, 0x20, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x30, 0x5d, 0x20, - 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, - 0x68, 0x61, 0x6c, 0x66, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, - 0x20, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x63, 0x30, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x31, 0x75, 0x20, 0x3a, 0x20, 0x33, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, - 0x0a, 0x09, 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, - 0x74, 0x20, 0x3c, 0x20, 0x63, 0x33, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x32, 0x75, 0x20, 0x3a, 0x20, - 0x30, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x2d, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, 0x73, 0x74, 0x65, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x6c, - 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x63, 0x75, 0x72, 0x72, 0x43, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, - 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2a, - 0x20, 0x34, 0x75, 0x20, 0x2b, 0x20, 0x31, 0x75, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, - 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, - 0x28, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2c, 0x20, 0x64, 0x69, 0x72, 0x20, 0x29, 0x3b, 0x0a, - 0x0a, 0x09, 0x09, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2a, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x20, 0x37, 0x2e, - 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x31, 0x5b, 0x30, 0x5d, 0x20, 0x2b, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, - 0x65, 0x70, 0x32, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x20, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x31, - 0x5d, 0x20, 0x2b, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x30, 0x5d, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x64, - 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, - 0x29, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, - 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x63, 0x30, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x31, 0x75, 0x20, 0x3a, - 0x20, 0x33, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, - 0x20, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x63, 0x33, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x32, 0x75, 0x20, 0x3a, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, - 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2d, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, - 0x5b, 0x73, 0x74, 0x65, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x6c, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x7c, 0x3d, 0x20, 0x73, 0x74, - 0x65, 0x70, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, - 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2a, 0x20, 0x34, 0x75, - 0x20, 0x2b, 0x20, 0x32, 0x75, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, - 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x63, - 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2c, 0x20, 0x64, 0x69, 0x72, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, - 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x20, 0x2a, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x20, 0x37, 0x2e, 0x30, 0x66, 0x20, - 0x2a, 0x20, 0x65, 0x70, 0x31, 0x5b, 0x31, 0x5d, 0x20, 0x2b, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, - 0x5b, 0x33, 0x5d, 0x20, 0x2b, 0x20, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x32, 0x5d, 0x20, 0x2b, - 0x20, 0x65, 0x70, 0x32, 0x5b, 0x31, 0x5d, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, - 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x0a, 0x09, - 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, - 0x3c, 0x20, 0x63, 0x30, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x31, 0x75, 0x20, 0x3a, 0x20, 0x33, 0x75, - 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x20, - 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x63, 0x33, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, - 0x20, 0x3f, 0x20, 0x32, 0x75, 0x20, 0x3a, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, 0x32, 0x5d, 0x20, - 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2d, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, 0x73, 0x74, - 0x65, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x6c, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x7c, 0x3d, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, - 0x3c, 0x3c, 0x20, 0x34, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, - 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2a, 0x20, 0x34, 0x75, 0x20, 0x2b, 0x20, - 0x32, 0x75, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, - 0x09, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x63, 0x75, 0x72, 0x72, - 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x2c, 0x20, 0x64, 0x69, 0x72, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x64, 0x69, 0x74, - 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2a, - 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x20, 0x37, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, - 0x70, 0x31, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x20, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x33, 0x5d, - 0x20, 0x2b, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x32, 0x5d, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x64, 0x69, - 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, - 0x0a, 0x09, 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, - 0x74, 0x20, 0x3c, 0x20, 0x63, 0x30, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x31, 0x75, 0x20, 0x3a, 0x20, - 0x33, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, - 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x44, 0x6f, 0x74, 0x20, 0x3c, 0x20, 0x63, 0x33, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x20, 0x29, 0x20, 0x3f, 0x20, 0x32, 0x75, 0x20, 0x3a, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, 0x33, - 0x5d, 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2d, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x5b, - 0x73, 0x74, 0x65, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x6c, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x7c, 0x3d, 0x20, 0x73, 0x74, 0x65, - 0x70, 0x20, 0x3c, 0x3c, 0x20, 0x36, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x7c, 0x3d, 0x20, 0x6c, - 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x20, 0x79, 0x20, 0x2a, 0x20, 0x38, 0x75, 0x20, 0x29, 0x3b, 0x0a, 0x09, - 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x74, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x65, 0x70, - 0x31, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x65, 0x70, 0x31, 0x20, 0x3d, 0x20, 0x65, 0x70, 0x32, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x65, - 0x70, 0x32, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x77, 0x61, - 0x70, 0x0a, 0x09, 0x7d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x6d, 0x61, 0x73, 0x6b, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x28, 0x43, 0x6c, 0x65, 0x76, - 0x65, 0x72, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x32, 0x29, 0x0a, 0x2f, 0x2f, 0x20, 0x54, - 0x72, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x69, 0x74, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x2e, 0x0a, 0x2f, 0x2f, 0x20, 0x28, 0x42, 0x79, 0x20, 0x73, - 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, - 0x73, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x76, 0x69, 0x61, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x65, - 0x71, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2b, 0x43, 0x72, 0x61, 0x6d, 0x65, 0x72, 0x27, 0x73, 0x20, 0x72, 0x75, 0x6c, - 0x65, 0x29, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x31, 0x36, 0x5d, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x2c, 0x20, - 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x4d, 0x69, 0x6e, 0x45, - 0x6e, 0x64, 0x70, 0x31, 0x36, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x20, 0x20, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x20, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x0a, - 0x7b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x69, 0x6e, 0x31, 0x36, 0x2c, 0x20, 0x6e, 0x65, - 0x77, 0x4d, 0x61, 0x78, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, - 0x6f, 0x6c, 0x64, 0x4d, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, - 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6f, 0x6c, 0x64, 0x4d, - 0x61, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x3b, 0x0a, - 0x0a, 0x09, 0x69, 0x66, 0x28, 0x20, 0x28, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x5e, 0x20, 0x28, 0x20, 0x6d, 0x61, 0x73, 0x6b, - 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x75, 0x20, 0x29, 0x20, 0x29, 0x20, 0x3c, 0x20, 0x34, 0x75, 0x20, 0x29, 0x20, 0x20, 0x2f, 0x2f, - 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x61, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3f, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x79, - 0x65, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x3b, 0x20, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x61, 0x6c, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x6f, 0x6e, 0x20, - 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x33, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x38, 0x2e, - 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, - 0x35, 0x35, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, - 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, - 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x67, 0x62, 0x56, - 0x61, 0x6c, 0x20, 0x2b, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, - 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, 0x5d, 0x20, 0x29, 0x2e, - 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, - 0x72, 0x28, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, - 0x2f, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x6e, 0x65, 0x77, 0x4d, 0x61, - 0x78, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x35, 0x5b, 0x75, 0x69, 0x6e, 0x74, 0x28, - 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x72, 0x20, 0x29, 0x5d, 0x5b, 0x30, 0x5d, 0x20, 0x2a, 0x20, 0x32, 0x30, 0x34, - 0x38, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x20, 0x2f, 0x2f, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x63, 0x5f, 0x6f, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x36, 0x5b, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x67, - 0x20, 0x29, 0x5d, 0x5b, 0x30, 0x5d, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x2f, - 0x2f, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x35, 0x5b, 0x75, 0x69, - 0x6e, 0x74, 0x28, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x62, 0x20, 0x29, 0x5d, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x09, - 0x09, 0x6e, 0x65, 0x77, 0x4d, 0x69, 0x6e, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x35, - 0x5b, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x72, 0x20, 0x29, 0x5d, 0x5b, 0x31, 0x5d, - 0x20, 0x2a, 0x20, 0x32, 0x30, 0x34, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x20, 0x2f, 0x2f, 0x0a, 0x09, 0x09, 0x09, 0x09, - 0x20, 0x20, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x36, 0x5b, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x20, 0x72, 0x67, - 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x67, 0x20, 0x29, 0x5d, 0x5b, 0x31, 0x5d, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, 0x20, - 0x2b, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x20, 0x20, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x35, 0x5b, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x62, 0x20, 0x29, 0x5d, - 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x77, 0x31, 0x54, 0x61, 0x62, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5b, 0x34, 0x5d, 0x28, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x2c, - 0x20, 0x32, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x73, 0x5b, 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x5b, 0x34, 0x5d, 0x28, 0x20, 0x35, 0x38, 0x39, 0x38, 0x32, 0x34, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x32, 0x33, - 0x30, 0x34, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x32, 0x36, 0x32, 0x34, 0x30, 0x32, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x36, 0x36, 0x35, - 0x36, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x5e, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6d, - 0x61, 0x67, 0x69, 0x63, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, - 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x2e, 0x2e, 0x0a, 0x09, 0x09, - 0x2f, 0x2f, 0x20, 0x28, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x65, - 0x61, 0x73, 0x74, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x73, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x61, - 0x63, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, 0x6e, 0x65, - 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x29, 0x0a, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x6b, 0x6b, 0x75, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, - 0x66, 0x3b, 0x0a, 0x09, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6d, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x3b, 0x0a, - 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x61, 0x74, 0x31, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, - 0x28, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, - 0x20, 0x61, 0x74, 0x32, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, - 0x30, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, - 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x2c, 0x20, 0x63, 0x6d, 0x20, 0x3e, 0x3e, 0x3d, - 0x20, 0x32, 0x75, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, - 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, - 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x69, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, - 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x73, - 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x63, 0x6d, 0x20, 0x26, 0x20, 0x33, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x77, 0x31, 0x20, 0x3d, 0x20, 0x77, 0x31, 0x54, 0x61, 0x62, 0x5b, 0x73, - 0x74, 0x65, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x61, 0x6b, 0x6b, 0x75, 0x20, 0x2b, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x64, - 0x73, 0x5b, 0x73, 0x74, 0x65, 0x70, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x61, 0x74, 0x31, 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x75, - 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x2a, 0x20, 0x77, 0x31, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x61, 0x74, 0x32, - 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x75, 0x72, 0x72, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x0a, - 0x09, 0x09, 0x61, 0x74, 0x32, 0x20, 0x3d, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x61, 0x74, 0x32, 0x20, 0x2d, 0x20, - 0x61, 0x74, 0x31, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x73, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x65, 0x63, 0x69, 0x64, 0x65, 0x20, 0x73, 0x6f, - 0x6c, 0x76, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x78, 0x78, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x61, 0x6b, 0x6b, 0x75, 0x20, 0x2f, - 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x79, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x6d, 0x6f, 0x64, - 0x28, 0x20, 0x61, 0x6b, 0x6b, 0x75, 0x2c, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2f, 0x20, - 0x32, 0x35, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x6d, 0x6f, 0x64, 0x28, 0x20, 0x61, 0x6b, 0x6b, 0x75, 0x2c, 0x20, 0x32, 0x35, - 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x66, 0x5f, 0x72, - 0x62, 0x5f, 0x67, 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x5f, 0x72, 0x62, 0x5f, 0x67, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x33, 0x2e, 0x30, - 0x66, 0x20, 0x2a, 0x20, 0x33, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, - 0x28, 0x20, 0x78, 0x78, 0x20, 0x2a, 0x20, 0x79, 0x79, 0x20, 0x2d, 0x20, 0x78, 0x79, 0x20, 0x2a, 0x20, 0x78, 0x79, 0x20, 0x29, - 0x3b, 0x0a, 0x09, 0x09, 0x66, 0x5f, 0x72, 0x62, 0x5f, 0x67, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x5f, 0x72, 0x62, 0x5f, 0x67, - 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x36, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x33, 0x31, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x0a, - 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x2e, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, - 0x6d, 0x70, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x28, 0x20, 0x61, 0x74, 0x31, 0x20, 0x2a, 0x20, 0x79, 0x79, - 0x20, 0x2d, 0x20, 0x61, 0x74, 0x32, 0x20, 0x2a, 0x20, 0x78, 0x79, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x66, 0x5f, 0x72, 0x62, 0x5f, - 0x67, 0x2e, 0x78, 0x79, 0x78, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, - 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x33, - 0x31, 0x2c, 0x20, 0x36, 0x33, 0x2c, 0x20, 0x33, 0x31, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x6e, 0x65, 0x77, 0x4d, - 0x61, 0x78, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x2e, 0x78, 0x20, 0x2a, 0x20, - 0x32, 0x30, 0x34, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x2e, 0x79, - 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x2e, - 0x7a, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x6e, 0x65, - 0x77, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x6f, - 0x72, 0x28, 0x20, 0x28, 0x20, 0x61, 0x74, 0x32, 0x20, 0x2a, 0x20, 0x78, 0x78, 0x20, 0x2d, 0x20, 0x61, 0x74, 0x31, 0x20, 0x2a, - 0x20, 0x78, 0x79, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x66, 0x5f, 0x72, 0x62, 0x5f, 0x67, 0x2e, 0x78, 0x79, 0x78, 0x20, 0x2b, 0x20, - 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x33, 0x28, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, - 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x36, 0x33, 0x2c, 0x20, 0x33, - 0x31, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x6e, 0x65, 0x77, 0x4d, 0x69, 0x6e, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x6e, - 0x65, 0x77, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x2e, 0x78, 0x20, 0x2a, 0x20, 0x32, 0x30, 0x34, 0x38, 0x2e, 0x30, 0x66, 0x20, - 0x2b, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x2e, 0x79, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, - 0x20, 0x2b, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x2e, 0x7a, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, - 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x4d, - 0x69, 0x6e, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x69, 0x6e, 0x4f, 0x75, 0x74, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, - 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x61, 0x78, 0x31, 0x36, 0x3b, 0x0a, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x6f, 0x6c, 0x64, 0x4d, 0x69, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x69, 0x6e, 0x31, 0x36, 0x20, 0x7c, - 0x7c, 0x20, 0x6f, 0x6c, 0x64, 0x4d, 0x61, 0x78, 0x20, 0x21, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x4d, 0x61, 0x78, 0x31, 0x36, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20, 0x42, 0x43, 0x31, 0x5f, 0x44, 0x49, 0x54, 0x48, 0x45, 0x52, - 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x73, 0x20, 0x27, 0x73, 0x72, 0x63, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x27, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, - 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x38, 0x38, 0x38, 0x20, 0x28, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x29, 0x2c, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x74, - 0x20, 0x74, 0x6f, 0x20, 0x35, 0x36, 0x35, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x20, 0x74, 0x6f, 0x20, 0x38, 0x38, 0x38, 0x20, 0x28, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x65, 0x64, 0x29, 0x0a, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x73, - 0x72, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x73, 0x72, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x20, 0x73, 0x72, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x30, - 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x38, 0x38, 0x38, 0x20, 0x2d, 0x3e, 0x20, 0x35, 0x36, 0x35, 0x0a, 0x09, 0x73, 0x72, 0x63, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x73, 0x72, 0x63, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x33, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, - 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x36, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, - 0x66, 0x2c, 0x20, 0x33, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2b, - 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, - 0x35, 0x36, 0x35, 0x20, 0x2d, 0x3e, 0x20, 0x38, 0x38, 0x38, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x0a, 0x09, 0x73, 0x72, 0x63, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x20, 0x73, 0x72, 0x63, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x38, 0x2e, 0x32, 0x35, 0x66, 0x2c, 0x20, 0x34, 0x2e, - 0x30, 0x36, 0x32, 0x35, 0x66, 0x2c, 0x20, 0x38, 0x2e, 0x32, 0x35, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x72, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x76, 0x6f, - 0x69, 0x64, 0x20, 0x44, 0x69, 0x74, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x31, 0x36, 0x5d, 0x2c, - 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x74, 0x68, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, 0x5b, - 0x31, 0x36, 0x5d, 0x20, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x65, 0x70, 0x31, 0x5b, 0x34, - 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x5b, 0x34, 0x5d, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, - 0x28, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, - 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x30, 0x2c, - 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x30, 0x2c, 0x20, 0x30, - 0x2c, 0x20, 0x30, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x65, 0x70, 0x32, 0x5b, - 0x34, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x5b, 0x34, 0x5d, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x33, 0x28, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, - 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x30, - 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x28, 0x20, 0x30, 0x2c, 0x20, - 0x30, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x79, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x79, 0x20, 0x3c, 0x20, 0x31, 0x36, 0x75, 0x3b, 0x20, 0x79, 0x20, 0x2b, - 0x3d, 0x20, 0x34, 0x75, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x73, 0x72, - 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x3b, 0x0a, 0x0a, 0x09, - 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, - 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2b, - 0x20, 0x30, 0x75, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, - 0x09, 0x09, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x28, 0x20, - 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x28, 0x20, 0x33, - 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x31, 0x5d, 0x20, 0x2b, 0x20, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, - 0x20, 0x65, 0x70, 0x32, 0x5b, 0x30, 0x5d, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, - 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, 0x30, 0x5d, - 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2d, 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x74, 0x68, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2b, 0x20, - 0x30, 0x75, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x20, - 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x66, - 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x75, - 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, - 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2b, 0x20, 0x31, 0x75, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, - 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, - 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x28, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2b, - 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x28, 0x20, 0x37, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x31, 0x5b, - 0x30, 0x5d, 0x20, 0x2b, 0x20, 0x33, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x20, - 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x31, 0x5d, 0x20, 0x2b, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x30, - 0x5d, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, - 0x29, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2d, 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x3b, 0x0a, 0x09, 0x09, - 0x64, 0x74, 0x68, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2b, 0x20, 0x31, 0x75, 0x5d, 0x20, 0x3d, 0x20, - 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, - 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, - 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, - 0x0a, 0x09, 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, - 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x79, - 0x20, 0x2b, 0x20, 0x32, 0x75, 0x5d, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, - 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x28, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, - 0x28, 0x20, 0x28, 0x20, 0x37, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x31, 0x5b, 0x31, 0x5d, 0x20, 0x2b, 0x20, 0x33, - 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x33, 0x5d, 0x20, 0x2b, 0x20, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, - 0x20, 0x65, 0x70, 0x32, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x31, 0x5d, 0x20, 0x29, 0x20, 0x2a, 0x20, - 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x3b, - 0x0a, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, - 0x2d, 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x74, 0x68, 0x50, 0x69, 0x78, - 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2b, 0x20, 0x32, 0x75, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, - 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, - 0x66, 0x20, 0x29, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x73, 0x72, 0x63, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, - 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, 0x5b, 0x79, 0x20, 0x2b, 0x20, 0x33, 0x75, 0x5d, - 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x69, - 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x28, 0x20, 0x37, 0x2e, 0x30, 0x66, 0x20, - 0x2a, 0x20, 0x65, 0x70, 0x31, 0x5b, 0x32, 0x5d, 0x20, 0x2b, 0x20, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x2a, 0x20, 0x65, 0x70, 0x32, - 0x5b, 0x33, 0x5d, 0x20, 0x2b, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x32, 0x5d, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, - 0x30, 0x66, 0x20, 0x2f, 0x20, 0x31, 0x36, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x65, - 0x70, 0x31, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x2d, 0x20, 0x64, 0x69, - 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x3b, 0x0a, 0x09, 0x09, 0x64, 0x74, 0x68, 0x50, 0x69, 0x78, 0x42, 0x6c, 0x63, 0x6b, - 0x5b, 0x79, 0x20, 0x2b, 0x20, 0x33, 0x75, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, - 0x78, 0x38, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x50, 0x69, 0x78, 0x65, 0x6c, - 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x2c, - 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x73, 0x77, 0x61, 0x70, - 0x28, 0x20, 0x65, 0x70, 0x31, 0x2c, 0x20, 0x65, 0x70, 0x32, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x34, 0x75, 0x3b, 0x20, 0x2b, - 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x74, 0x6d, - 0x70, 0x20, 0x3d, 0x20, 0x65, 0x70, 0x31, 0x5b, 0x69, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x65, 0x70, 0x31, 0x5b, 0x69, 0x5d, - 0x20, 0x3d, 0x20, 0x65, 0x70, 0x32, 0x5b, 0x69, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x65, 0x70, 0x32, 0x5b, 0x69, 0x5d, 0x20, - 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x7d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, - 0x66, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x31, 0x36, 0x5d, 0x3b, - 0x0a, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x62, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x45, 0x71, - 0x75, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x4c, 0x6f, 0x61, 0x64, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x20, 0x34, 0x78, 0x34, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x0a, - 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x54, 0x6f, - 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, - 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x78, 0x79, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x75, 0x3b, - 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x69, - 0x20, 0x3c, 0x20, 0x31, 0x36, 0x75, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x6f, 0x61, - 0x64, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x73, 0x65, 0x20, - 0x2b, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x28, 0x20, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x33, 0x75, 0x2c, 0x20, 0x69, - 0x20, 0x3e, 0x3e, 0x20, 0x32, 0x75, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x33, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x30, 0x20, 0x3d, 0x20, 0x4f, 0x47, 0x52, 0x45, - 0x5f, 0x4c, 0x6f, 0x61, 0x64, 0x32, 0x44, 0x28, 0x20, 0x73, 0x72, 0x63, 0x54, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x32, - 0x28, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x6f, 0x61, 0x64, 0x20, 0x29, 0x2c, 0x20, 0x30, 0x20, 0x29, - 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x09, 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x30, 0x2c, 0x20, 0x31, - 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x62, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, - 0x73, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x62, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x45, - 0x71, 0x75, 0x61, 0x6c, 0x20, 0x26, 0x26, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x5b, 0x69, 0x5d, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x78, 0x45, - 0x6e, 0x64, 0x70, 0x31, 0x36, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x69, 0x66, 0x28, 0x20, 0x62, - 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, - 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x20, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x20, - 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x28, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, 0x34, - 0x78, 0x38, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x30, 0x5d, - 0x20, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2a, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, - 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x75, 0x3b, 0x0a, 0x09, - 0x09, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x3d, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x5f, 0x6f, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x35, 0x5b, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x72, 0x5d, 0x5b, 0x30, 0x5d, 0x20, 0x2a, 0x20, 0x32, - 0x30, 0x34, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x36, 0x5b, 0x72, 0x67, - 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x67, 0x5d, 0x5b, 0x30, 0x5d, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, - 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x35, 0x5b, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x62, 0x5d, 0x5b, 0x30, - 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x3d, 0x0a, 0x09, 0x09, 0x09, 0x63, - 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x35, 0x5b, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x72, 0x5d, 0x5b, 0x31, 0x5d, - 0x20, 0x2a, 0x20, 0x32, 0x30, 0x34, 0x38, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x36, 0x5b, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, 0x67, 0x5d, 0x5b, 0x31, 0x5d, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2e, 0x30, - 0x66, 0x20, 0x2b, 0x20, 0x63, 0x5f, 0x6f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x35, 0x5b, 0x72, 0x67, 0x62, 0x56, 0x61, 0x6c, 0x2e, - 0x62, 0x5d, 0x5b, 0x31, 0x5d, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x7b, 0x0a, 0x23, 0x69, - 0x66, 0x64, 0x65, 0x66, 0x20, 0x42, 0x43, 0x31, 0x5f, 0x44, 0x49, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x09, 0x09, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x5b, 0x31, - 0x36, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3a, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x65, 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x50, 0x43, 0x41, 0x20, 0x69, 0x66, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, - 0x64, 0x0a, 0x09, 0x09, 0x44, 0x69, 0x74, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x29, 0x3b, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x23, 0x09, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x0a, 0x23, 0x65, 0x6e, - 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x73, 0x74, 0x65, 0x70, - 0x3a, 0x20, 0x70, 0x63, 0x61, 0x2b, 0x6d, 0x61, 0x70, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x63, - 0x69, 0x70, 0x61, 0x6c, 0x20, 0x61, 0x78, 0x69, 0x73, 0x0a, 0x09, 0x09, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x2c, 0x20, - 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x6d, 0x69, - 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x21, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, - 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, - 0x72, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x45, 0x76, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x28, - 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x2c, 0x20, - 0x6d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x3b, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x4e, 0x6f, 0x74, 0x65, - 0x20, 0x6d, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x78, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x09, - 0x2f, 0x2f, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x20, 0x73, 0x74, 0x65, 0x70, 0x3a, 0x20, 0x72, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x20, 0x28, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x69, 0x66, 0x20, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x29, 0x0a, 0x09, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x62, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, - 0x09, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x69, - 0x20, 0x3c, 0x20, 0x70, 0x5f, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x26, - 0x26, 0x20, 0x21, 0x62, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x20, 0x2b, - 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x3b, 0x0a, 0x0a, 0x09, - 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, 0x64, 0x69, - 0x74, 0x68, 0x65, 0x72, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x6d, 0x61, 0x73, 0x6b, - 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, - 0x36, 0x20, 0x29, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x6d, 0x69, - 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x21, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, - 0x29, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x63, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x5b, 0x34, 0x5d, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x45, 0x76, 0x61, 0x6c, 0x43, - 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x28, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, - 0x64, 0x70, 0x31, 0x36, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x3b, 0x20, 0x20, 0x2f, - 0x2f, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x78, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e, - 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, - 0x78, 0x65, 0x6c, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x2c, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x20, 0x29, 0x3b, - 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7b, - 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x62, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x62, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, - 0x3d, 0x3d, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x20, 0x7c, 0x7c, 0x20, 0x62, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x2f, - 0x2f, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x0a, 0x09, 0x69, 0x66, 0x28, 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x3c, 0x20, 0x6d, - 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e, - 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x69, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x3d, - 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, - 0x31, 0x36, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, - 0x20, 0x5e, 0x3d, 0x20, 0x30, 0x78, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x75, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, - 0x09, 0x75, 0x69, 0x6e, 0x74, 0x34, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3b, 0x0a, 0x09, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, - 0x20, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x20, 0x6d, 0x69, 0x6e, 0x45, 0x6e, - 0x64, 0x70, 0x31, 0x36, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, - 0x7a, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x75, 0x3b, 0x0a, 0x09, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x77, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x20, - 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x64, 0x73, 0x74, 0x55, 0x56, - 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x44, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x20, - 0x64, 0x73, 0x74, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x32, 0x28, 0x20, 0x64, 0x73, 0x74, - 0x55, 0x56, 0x20, 0x29, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x20, 0x29, 0x3b, 0x0a, - 0x7d, 0x0a, -0 -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc4.glsl b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc4.glsl deleted file mode 100644 index 2486fa4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc4.glsl +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright 2020-2022 Matias N. Goldberg - * Copyright 2022 Intel Corporation - * - * 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 THE - * AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#version 310 es - -#if defined(GL_ES) && GL_ES == 1 - // Desktop GLSL allows the const keyword for either compile-time or - // run-time constants. GLSL ES only allows the keyword for compile-time - // constants. Since we use const on run-time constants, define it to - // nothing. - #define const -#endif - -#define __sharedOnlyBarrier memoryBarrierShared();barrier(); - -%s // include "CrossPlatformSettings_piece_all.glsl" - -shared float2 g_minMaxValues[4u * 4u * 4u]; -shared uint2 g_mask[4u * 4u]; - -layout( location = 0 ) uniform uint2 params; - -#define p_channelIdx params.x -#define p_useSNorm params.y - -uniform sampler2D srcTex; - -layout( rgba16ui ) uniform restrict writeonly mediump uimage2D dstTexture; - -layout( local_size_x = 4, // - local_size_y = 4, // - local_size_z = 4 ) in; - -/// Each block is 16 pixels -/// Each thread works on 4 pixels -/// Therefore each block needs 4 threads, generating 8 masks -/// At the end these 8 masks get merged into 2 and results written to output -/// -/// **Q: Why 4 pixels per thread? Why not 1 pixel per thread? Why not 2? Why not 16?** -/// -/// A: It's a sweetspot. -/// - Very short threads cannot fill expensive GPUs with enough work (dispatch bound) -/// - Lots of threads means lots of synchronization (e.g. evaluating min/max, merging masks) -/// overhead, and also more LDS usage which reduces occupancy. -/// - Long threads (e.g. 1 thread per block) misses parallelism opportunities -void main() -{ - float minVal, maxVal; - float4 srcPixel; - - const uint blockThreadId = gl_LocalInvocationID.x; - - const uint2 pixelsToLoadBase = gl_GlobalInvocationID.yz << 2u; - - for( uint i = 0u; i < 4u; ++i ) - { - const uint2 pixelsToLoad = pixelsToLoadBase + uint2( i, blockThreadId ); - - const float4 value = OGRE_Load2D( srcTex, int2( pixelsToLoad ), 0 ).xyzw; - srcPixel[i] = p_channelIdx == 0u ? value.x : ( p_channelIdx == 1u ? value.y : value.w ); - srcPixel[i] *= 255.0f; - } - - minVal = min3( srcPixel.x, srcPixel.y, srcPixel.z ); - maxVal = max3( srcPixel.x, srcPixel.y, srcPixel.z ); - minVal = min( minVal, srcPixel.w ); - maxVal = max( maxVal, srcPixel.w ); - - const uint minMaxIdxBase = ( gl_LocalInvocationID.z << 4u ) + ( gl_LocalInvocationID.y << 2u ); - const uint maskIdxBase = ( gl_LocalInvocationID.z << 2u ) + gl_LocalInvocationID.y; - - g_minMaxValues[minMaxIdxBase + blockThreadId] = float2( minVal, maxVal ); - g_mask[maskIdxBase] = uint2( 0u, 0u ); - - __sharedOnlyBarrier; - - // Have all 4 threads in the block grab the min/max value by comparing what all 4 threads uploaded - for( uint i = 0u; i < 4u; ++i ) - { - minVal = min( g_minMaxValues[minMaxIdxBase + i].x, minVal ); - maxVal = max( g_minMaxValues[minMaxIdxBase + i].y, maxVal ); - } - - // determine bias and emit color indices - // given the choice of maxVal/minVal, these indices are optimal: - // http://fgiesen.wordpress.com/2009/12/15/dxt5-alpha-block-index-determination/ - float dist = maxVal - minVal; - float dist4 = dist * 4.0f; - float dist2 = dist * 2.0f; - float bias = ( dist < 8.0f ) ? ( dist - 1.0f ) : ( trunc( dist * 0.5f ) + 2.0f ); - bias -= minVal * 7.0f; - - uint mask0 = 0u, mask1 = 0u; - - for( uint i = 0u; i < 4u; ++i ) - { - float a = srcPixel[i] * 7.0f + bias; - - int ind = 0; - - // select index. this is a "linear scale" lerp factor between 0 (val=min) and 7 (val=max). - if( a >= dist4 ) - { - ind = 4; - a -= dist4; - } - - if( a >= dist2 ) - { - ind += 2; - a -= dist2; - } - - if( a >= dist ) - ind += 1; - - // turn linear scale into DXT index (0/1 are extremal pts) - ind = -ind & 7; - ind ^= ( 2 > ind ) ? 1 : 0; - - // write index - const uint bits = 16u + ( ( blockThreadId << 2u ) + i ) * 3u; - if( bits < 32u ) - { - mask0 |= uint( ind ) << bits; - if( bits + 3u > 32u ) - { - mask1 |= uint( ind ) >> ( 32u - bits ); - } - } - else - { - mask1 |= uint( ind ) << ( bits - 32u ); - } - } - - if( mask0 != 0u ) - atomicOr( g_mask[maskIdxBase].x, mask0 ); - if( mask1 != 0u ) - atomicOr( g_mask[maskIdxBase].y, mask1 ); - - __sharedOnlyBarrier; - - if( blockThreadId == 0u ) - { - // Save data - uint4 outputBytes; - - if( p_useSNorm != 0u ) - { - outputBytes.x = - packSnorm4x8( float4( maxVal * ( 1.0f / 255.0f ) * 2.0f - 1.0f, - minVal * ( 1.0f / 255.0f ) * 2.0f - 1.0f, 0.0f, 0.0f ) ); - } - else - { - outputBytes.x = packUnorm4x8( - float4( maxVal * ( 1.0f / 255.0f ), minVal * ( 1.0f / 255.0f ), 0.0f, 0.0f ) ); - } - outputBytes.y = g_mask[maskIdxBase].x >> 16u; - outputBytes.z = g_mask[maskIdxBase].y & 0xFFFFu; - outputBytes.w = g_mask[maskIdxBase].y >> 16u; - - uint2 dstUV = gl_GlobalInvocationID.yz; - imageStore( dstTexture, int2( dstUV ), outputBytes ); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc4_glsl.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc4_glsl.h deleted file mode 100644 index cb35e91..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/bc4_glsl.h +++ /dev/null @@ -1,279 +0,0 @@ -static const char bc4_source[] = { -0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x2d, - 0x32, 0x30, 0x32, 0x32, 0x20, 0x4d, 0x61, 0x74, 0x69, 0x61, 0x73, 0x20, 0x4e, 0x2e, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x62, 0x65, - 0x72, 0x67, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x32, 0x20, - 0x49, 0x6e, 0x74, 0x65, 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x2a, 0x0a, - 0x20, 0x2a, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, - 0x62, 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, - 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x22, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x22, 0x29, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, - 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, - 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, - 0x63, 0x6f, 0x70, 0x79, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x2c, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x2c, 0x20, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, - 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, - 0x20, 0x73, 0x65, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x20, 0x2a, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x66, 0x75, 0x72, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, - 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x0a, 0x20, - 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, - 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x44, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, 0x2c, 0x20, 0x57, 0x49, 0x54, - 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x41, 0x4e, 0x59, 0x20, - 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x49, - 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x42, 0x55, 0x54, - 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x20, 0x54, 0x48, 0x45, 0x20, 0x57, - 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, - 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, - 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, - 0x53, 0x45, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x4e, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x52, 0x49, 0x4e, 0x47, 0x45, 0x4d, 0x45, 0x4e, - 0x54, 0x2e, 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, - 0x54, 0x48, 0x45, 0x0a, 0x20, 0x2a, 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x50, - 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, - 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x2c, 0x20, 0x44, 0x41, - 0x4d, 0x41, 0x47, 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x4c, 0x49, 0x41, - 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x57, 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x41, 0x4e, - 0x20, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x4f, 0x46, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, - 0x54, 0x4f, 0x52, 0x54, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, 0x53, 0x45, 0x2c, 0x20, 0x41, 0x52, - 0x49, 0x53, 0x49, 0x4e, 0x47, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x2c, 0x20, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, - 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x57, 0x49, 0x54, - 0x48, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x54, 0x48, 0x45, - 0x20, 0x55, 0x53, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x44, 0x45, 0x41, 0x4c, - 0x49, 0x4e, 0x47, 0x53, 0x20, 0x49, 0x4e, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x2e, - 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x31, 0x30, 0x20, 0x65, 0x73, - 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x28, 0x47, 0x4c, 0x5f, 0x45, 0x53, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x47, 0x4c, 0x5f, 0x45, 0x53, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x44, 0x65, 0x73, - 0x6b, 0x74, 0x6f, 0x70, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x69, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x0a, 0x09, - 0x2f, 0x2f, 0x20, 0x72, 0x75, 0x6e, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, - 0x2e, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x20, 0x45, 0x53, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x2e, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x6f, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x6e, - 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x09, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x5f, 0x5f, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x42, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x20, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x42, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x28, 0x29, 0x3b, 0x62, 0x61, 0x72, - 0x72, 0x69, 0x65, 0x72, 0x28, 0x29, 0x3b, 0x0a, 0x0a, 0x25, 0x73, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x20, 0x22, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x2e, 0x67, 0x6c, 0x73, 0x6c, 0x22, 0x0a, 0x0a, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x67, 0x5f, 0x6d, 0x69, 0x6e, 0x4d, 0x61, - 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, 0x34, 0x75, 0x20, 0x2a, 0x20, 0x34, 0x75, 0x20, 0x2a, 0x20, 0x34, 0x75, 0x5d, - 0x3b, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x67, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x5b, 0x34, 0x75, 0x20, 0x2a, 0x20, 0x34, 0x75, 0x5d, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3b, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x20, 0x70, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x78, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x2e, 0x78, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x5f, 0x75, 0x73, 0x65, 0x53, 0x4e, 0x6f, 0x72, - 0x6d, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x79, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x72, 0x63, 0x54, 0x65, 0x78, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, - 0x6f, 0x75, 0x74, 0x28, 0x20, 0x72, 0x67, 0x62, 0x61, 0x31, 0x36, 0x75, 0x69, 0x20, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, - 0x72, 0x6d, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x70, 0x20, 0x75, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x32, 0x44, 0x20, 0x64, 0x73, 0x74, - 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x34, 0x2c, 0x20, 0x20, 0x2f, 0x2f, 0x0a, 0x09, 0x09, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x34, 0x2c, 0x20, 0x20, 0x2f, 0x2f, - 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x7a, 0x20, 0x3d, 0x20, 0x34, 0x20, 0x29, - 0x20, 0x69, 0x6e, 0x3b, 0x0a, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, - 0x69, 0x73, 0x20, 0x31, 0x36, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x45, 0x61, 0x63, 0x68, - 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x34, 0x20, 0x70, 0x69, - 0x78, 0x65, 0x6c, 0x73, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x61, - 0x63, 0x68, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x34, 0x20, 0x74, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x73, 0x2c, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x38, 0x20, 0x6d, 0x61, 0x73, - 0x6b, 0x73, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x41, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x65, 0x20, 0x38, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x67, 0x65, 0x74, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x32, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x0a, 0x2f, 0x2f, 0x2f, 0x0a, - 0x2f, 0x2f, 0x2f, 0x20, 0x2a, 0x2a, 0x51, 0x3a, 0x20, 0x57, 0x68, 0x79, 0x20, 0x34, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, - 0x20, 0x70, 0x65, 0x72, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x3f, 0x20, 0x57, 0x68, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x31, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x70, 0x65, 0x72, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x3f, 0x20, 0x57, - 0x68, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x32, 0x3f, 0x20, 0x57, 0x68, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x31, 0x36, 0x3f, - 0x2a, 0x2a, 0x0a, 0x2f, 0x2f, 0x2f, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x41, 0x3a, 0x20, 0x49, 0x74, 0x27, 0x73, 0x20, 0x61, 0x20, - 0x73, 0x77, 0x65, 0x65, 0x74, 0x73, 0x70, 0x6f, 0x74, 0x2e, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x20, 0x56, 0x65, 0x72, - 0x79, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x20, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x20, 0x47, 0x50, 0x55, 0x73, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x28, 0x64, 0x69, - 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x29, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x20, - 0x4c, 0x6f, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, - 0x20, 0x6c, 0x6f, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x6d, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x78, 0x2c, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x61, 0x73, 0x6b, - 0x73, 0x29, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x68, 0x65, 0x61, 0x64, 0x2c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x4c, 0x44, 0x53, 0x20, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x70, - 0x61, 0x6e, 0x63, 0x79, 0x2e, 0x0a, 0x2f, 0x2f, 0x2f, 0x20, 0x20, 0x2d, 0x20, 0x4c, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x31, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x20, 0x70, - 0x65, 0x72, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x29, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, - 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x20, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x34, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x3b, 0x0a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x20, 0x3d, - 0x20, 0x67, 0x6c, 0x5f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x2e, 0x78, 0x3b, 0x0a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x70, 0x69, 0x78, - 0x65, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x79, 0x7a, 0x20, 0x3c, - 0x3c, 0x20, 0x32, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, - 0x20, 0x30, 0x75, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x34, 0x75, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x7b, - 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, - 0x54, 0x6f, 0x4c, 0x6f, 0x61, 0x64, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x73, 0x65, 0x20, 0x2b, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x28, 0x20, 0x69, 0x2c, 0x20, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, - 0x4c, 0x6f, 0x61, 0x64, 0x32, 0x44, 0x28, 0x20, 0x73, 0x72, 0x63, 0x54, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x32, 0x28, - 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x54, 0x6f, 0x4c, 0x6f, 0x61, 0x64, 0x20, 0x29, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2e, - 0x78, 0x79, 0x7a, 0x77, 0x3b, 0x0a, 0x09, 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x5b, 0x69, 0x5d, 0x20, 0x3d, - 0x20, 0x70, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x20, 0x3f, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x78, 0x20, 0x3a, 0x20, 0x28, 0x20, 0x70, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x49, 0x64, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x75, 0x20, 0x3f, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x79, 0x20, - 0x3a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x77, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x5b, 0x69, 0x5d, 0x20, 0x2a, 0x3d, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, - 0x09, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e, 0x33, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, - 0x78, 0x65, 0x6c, 0x2e, 0x78, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2e, 0x79, 0x2c, 0x20, 0x73, 0x72, - 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2e, 0x7a, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, 0x3d, - 0x20, 0x6d, 0x61, 0x78, 0x33, 0x28, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2e, 0x78, 0x2c, 0x20, 0x73, 0x72, - 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2e, 0x79, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2e, 0x7a, 0x20, - 0x29, 0x3b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x20, 0x6d, 0x69, 0x6e, - 0x56, 0x61, 0x6c, 0x2c, 0x20, 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2e, 0x77, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x6d, - 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x20, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x2c, 0x20, - 0x73, 0x72, 0x63, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x2e, 0x77, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x20, 0x3d, - 0x20, 0x28, 0x20, 0x67, 0x6c, 0x5f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x2e, 0x7a, 0x20, 0x3c, 0x3c, 0x20, 0x34, 0x75, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x20, 0x67, 0x6c, 0x5f, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x79, 0x20, 0x3c, 0x3c, - 0x20, 0x32, 0x75, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, - 0x73, 0x6b, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x67, 0x6c, 0x5f, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x7a, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x75, - 0x20, 0x29, 0x20, 0x2b, 0x20, 0x67, 0x6c, 0x5f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x79, 0x3b, 0x0a, 0x0a, 0x09, 0x67, 0x5f, 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x5b, 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x20, 0x2b, 0x20, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x5d, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x32, 0x28, 0x20, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, 0x29, 0x3b, 0x0a, - 0x09, 0x67, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5b, 0x6d, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x5d, 0x20, - 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x28, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, - 0x5f, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x42, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x3b, 0x0a, - 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x48, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x34, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, - 0x64, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x67, 0x72, 0x61, 0x62, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x78, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x79, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x34, 0x20, - 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x0a, 0x09, 0x66, 0x6f, 0x72, - 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x34, 0x75, - 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x3d, - 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x20, 0x67, 0x5f, 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, - 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x20, 0x2b, 0x20, 0x69, 0x5d, 0x2e, 0x78, 0x2c, - 0x20, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, 0x3d, - 0x20, 0x6d, 0x61, 0x78, 0x28, 0x20, 0x67, 0x5f, 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5b, - 0x6d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x20, 0x2b, 0x20, 0x69, 0x5d, 0x2e, 0x79, 0x2c, - 0x20, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x62, 0x69, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6d, 0x69, 0x74, - 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x0a, 0x09, 0x2f, 0x2f, 0x20, 0x67, 0x69, - 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x61, 0x78, - 0x56, 0x61, 0x6c, 0x2f, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x61, 0x6c, 0x3a, 0x0a, 0x09, 0x2f, 0x2f, - 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x67, 0x69, 0x65, 0x73, 0x65, 0x6e, 0x2e, 0x77, 0x6f, 0x72, 0x64, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x32, 0x30, 0x30, 0x39, 0x2f, 0x31, 0x32, 0x2f, 0x31, 0x35, 0x2f, 0x64, - 0x78, 0x74, 0x35, 0x2d, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2d, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, 0x2d, 0x20, 0x6d, 0x69, 0x6e, - 0x56, 0x61, 0x6c, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x69, 0x73, 0x74, 0x34, 0x20, 0x3d, 0x20, 0x64, - 0x69, 0x73, 0x74, 0x20, 0x2a, 0x20, 0x34, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x69, - 0x73, 0x74, 0x32, 0x20, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x2a, 0x20, 0x32, 0x2e, 0x30, 0x66, 0x3b, 0x0a, 0x09, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x69, 0x61, 0x73, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x3c, 0x20, - 0x38, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x3f, 0x20, 0x28, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, - 0x66, 0x20, 0x29, 0x20, 0x3a, 0x20, 0x28, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x2a, - 0x20, 0x30, 0x2e, 0x35, 0x66, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x62, 0x69, - 0x61, 0x73, 0x20, 0x2d, 0x3d, 0x20, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x2a, 0x20, 0x37, 0x2e, 0x30, 0x66, 0x3b, 0x0a, - 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x6d, 0x61, - 0x73, 0x6b, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x20, 0x34, 0x75, 0x3b, 0x20, 0x2b, 0x2b, 0x69, 0x20, - 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x72, 0x63, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x5b, 0x69, 0x5d, 0x20, 0x2a, 0x20, 0x37, 0x2e, 0x30, 0x66, 0x20, 0x2b, 0x20, 0x62, 0x69, 0x61, 0x73, - 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x0a, 0x09, 0x09, - 0x2f, 0x2f, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x20, 0x74, 0x68, 0x69, 0x73, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x22, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x22, 0x20, - 0x6c, 0x65, 0x72, 0x70, 0x20, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x30, - 0x20, 0x28, 0x76, 0x61, 0x6c, 0x3d, 0x6d, 0x69, 0x6e, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x37, 0x20, 0x28, 0x76, 0x61, 0x6c, - 0x3d, 0x6d, 0x61, 0x78, 0x29, 0x2e, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x61, 0x20, 0x3e, 0x3d, 0x20, 0x64, 0x69, 0x73, - 0x74, 0x34, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x34, 0x3b, 0x0a, - 0x09, 0x09, 0x09, 0x61, 0x20, 0x2d, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x74, 0x34, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x0a, 0x09, - 0x09, 0x69, 0x66, 0x28, 0x20, 0x61, 0x20, 0x3e, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x74, 0x32, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, - 0x0a, 0x09, 0x09, 0x09, 0x69, 0x6e, 0x64, 0x20, 0x2b, 0x3d, 0x20, 0x32, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x61, 0x20, 0x2d, 0x3d, - 0x20, 0x64, 0x69, 0x73, 0x74, 0x32, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x61, 0x20, - 0x3e, 0x3d, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x6e, 0x64, 0x20, 0x2b, 0x3d, 0x20, 0x31, - 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x44, 0x58, 0x54, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x28, - 0x30, 0x2f, 0x31, 0x20, 0x61, 0x72, 0x65, 0x20, 0x65, 0x78, 0x74, 0x72, 0x65, 0x6d, 0x61, 0x6c, 0x20, 0x70, 0x74, 0x73, 0x29, - 0x0a, 0x09, 0x09, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x2d, 0x69, 0x6e, 0x64, 0x20, 0x26, 0x20, 0x37, 0x3b, 0x0a, 0x09, 0x09, - 0x69, 0x6e, 0x64, 0x20, 0x5e, 0x3d, 0x20, 0x28, 0x20, 0x32, 0x20, 0x3e, 0x20, 0x69, 0x6e, 0x64, 0x20, 0x29, 0x20, 0x3f, 0x20, - 0x31, 0x20, 0x3a, 0x20, 0x30, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, - 0x20, 0x3d, 0x20, 0x31, 0x36, 0x75, 0x20, 0x2b, 0x20, 0x28, 0x20, 0x28, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x49, 0x64, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x75, 0x20, 0x29, 0x20, 0x2b, 0x20, 0x69, 0x20, 0x29, 0x20, 0x2a, - 0x20, 0x33, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x75, - 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x30, 0x20, 0x7c, 0x3d, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x28, 0x20, 0x69, 0x6e, 0x64, 0x20, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x09, 0x09, - 0x09, 0x69, 0x66, 0x28, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x2b, 0x20, 0x33, 0x75, 0x20, 0x3e, 0x20, 0x33, 0x32, 0x75, 0x20, - 0x29, 0x0a, 0x09, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x31, 0x20, 0x7c, 0x3d, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x28, 0x20, 0x69, 0x6e, 0x64, 0x20, 0x29, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x20, 0x33, 0x32, 0x75, 0x20, 0x2d, - 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x65, - 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x61, 0x73, 0x6b, 0x31, 0x20, 0x7c, 0x3d, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x28, 0x20, 0x69, 0x6e, 0x64, 0x20, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, - 0x2d, 0x20, 0x33, 0x32, 0x75, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x7d, 0x0a, 0x0a, 0x09, 0x69, 0x66, 0x28, - 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x30, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x61, 0x74, 0x6f, 0x6d, - 0x69, 0x63, 0x4f, 0x72, 0x28, 0x20, 0x67, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5b, 0x6d, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x78, 0x42, - 0x61, 0x73, 0x65, 0x5d, 0x2e, 0x78, 0x2c, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x30, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x69, 0x66, 0x28, - 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x31, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x61, 0x74, 0x6f, 0x6d, - 0x69, 0x63, 0x4f, 0x72, 0x28, 0x20, 0x67, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5b, 0x6d, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x78, 0x42, - 0x61, 0x73, 0x65, 0x5d, 0x2e, 0x79, 0x2c, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x31, 0x20, 0x29, 0x3b, 0x0a, 0x0a, 0x09, 0x5f, 0x5f, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x42, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x3b, 0x0a, 0x0a, 0x09, - 0x69, 0x66, 0x28, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x49, 0x64, 0x20, 0x3d, 0x3d, 0x20, - 0x30, 0x75, 0x20, 0x29, 0x0a, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x2f, 0x2f, 0x20, 0x53, 0x61, 0x76, 0x65, 0x20, 0x64, 0x61, 0x74, - 0x61, 0x0a, 0x09, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x34, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x20, 0x70, 0x5f, 0x75, 0x73, 0x65, 0x53, 0x4e, 0x6f, 0x72, 0x6d, 0x20, 0x21, - 0x3d, 0x20, 0x30, 0x75, 0x20, 0x29, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x2e, 0x78, 0x20, 0x3d, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x53, 0x6e, 0x6f, 0x72, - 0x6d, 0x34, 0x78, 0x38, 0x28, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x20, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x20, - 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2a, - 0x20, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x20, 0x20, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, - 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x2a, 0x20, 0x32, 0x2e, 0x30, 0x66, 0x20, 0x2d, 0x20, 0x31, 0x2e, - 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, - 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x09, 0x09, 0x7b, 0x0a, 0x09, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x6e, 0x6f, 0x72, 0x6d, - 0x34, 0x78, 0x38, 0x28, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x20, 0x6d, 0x61, 0x78, 0x56, - 0x61, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, - 0x29, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x20, 0x2a, 0x20, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x2f, 0x20, - 0x32, 0x35, 0x35, 0x2e, 0x30, 0x66, 0x20, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x20, - 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x67, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5b, 0x6d, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x78, 0x42, - 0x61, 0x73, 0x65, 0x5d, 0x2e, 0x78, 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x67, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5b, 0x6d, 0x61, - 0x73, 0x6b, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x5d, 0x2e, 0x79, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, - 0x75, 0x3b, 0x0a, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x2e, 0x77, 0x20, 0x3d, 0x20, - 0x67, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x5b, 0x6d, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x78, 0x42, 0x61, 0x73, 0x65, 0x5d, 0x2e, 0x79, - 0x20, 0x3e, 0x3e, 0x20, 0x31, 0x36, 0x75, 0x3b, 0x0a, 0x0a, 0x09, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x64, 0x73, 0x74, - 0x55, 0x56, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x79, 0x7a, 0x3b, 0x0a, 0x09, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x28, 0x20, 0x64, 0x73, 0x74, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x32, 0x28, 0x20, - 0x64, 0x73, 0x74, 0x55, 0x56, 0x20, 0x29, 0x2c, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x20, - 0x29, 0x3b, 0x0a, 0x09, 0x7d, 0x0a, 0x7d, 0x0a, -0 -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_functions.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_functions.cpp deleted file mode 100644 index a8ed0ce..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_functions.cpp +++ /dev/null @@ -1,8645 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 builtin_functions.cpp - * - * Support for GLSL built-in functions. - * - * This file is split into several main components: - * - * 1. Availability predicates - * - * A series of small functions that check whether the current shader - * supports the version/extensions required to expose a built-in. - * - * 2. Core builtin_builder class functionality - * - * 3. Lists of built-in functions - * - * The builtin_builder::create_builtins() function contains lists of all - * built-in function signatures, where they're available, what types they - * take, and so on. - * - * 4. Implementations of built-in function signatures - * - * A series of functions which create ir_function_signatures and emit IR - * via ir_builder to implement them. - * - * 5. External API - * - * A few functions the rest of the compiler can use to interact with the - * built-in function module. For example, searching for a built-in by - * name and parameters. - */ - - -/** - * Unfortunately, some versions of MinGW produce bad code if this file - * is compiled with -O2 or -O3. The resulting driver will crash in random - * places if the app uses GLSL. - * The work-around is to disable optimizations for just this file. Luckily, - * this code is basically just executed once. - * - * MinGW 4.6.3 (in Ubuntu 13.10) does not have this bug. - * MinGW 5.3.1 (in Ubuntu 16.04) definitely has this bug. - * MinGW 6.2.0 (in Ubuntu 16.10) definitely has this bug. - * MinGW 7.3.0 (in Ubuntu 18.04) does not have this bug. Assume versions before 7.3.x are buggy - */ - -#include "../../util/detect_cc.h" - -#if defined(__MINGW32__) && (DETECT_CC_GCC_VERSION < 703) -#warning "disabling optimizations for this file to work around compiler bug" -#pragma GCC optimize("O1") -#endif - - -#include -#include -#include "../../util/simple_mtx.h" -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/shaderobj.h" -#include "ir_builder.h" -#include "glsl_parser_extras.h" -#include "../../mesa/program/prog_instruction.h" -#include -#include "builtin_functions.h" -#include "../../util/hash_table.h" - -#ifndef M_PIf -#define M_PIf ((float) M_PI) -#endif -#ifndef M_PI_2f -#define M_PI_2f ((float) M_PI_2) -#endif -#ifndef M_PI_4f -#define M_PI_4f ((float) M_PI_4) -#endif - -using namespace ir_builder; - -static simple_mtx_t builtins_lock = SIMPLE_MTX_INITIALIZER; - -/** - * Availability predicates: - * @{ - */ -static bool -always_available(const _mesa_glsl_parse_state *) -{ - return true; -} - -static bool -compatibility_vs_only(const _mesa_glsl_parse_state *state) -{ - return state->stage == MESA_SHADER_VERTEX && - (state->compat_shader || state->ARB_compatibility_enable) && - !state->es_shader; -} - -static bool -derivatives_only(const _mesa_glsl_parse_state *state) -{ - return state->stage == MESA_SHADER_FRAGMENT || - (state->stage == MESA_SHADER_COMPUTE && - state->NV_compute_shader_derivatives_enable); -} - -static bool -gs_only(const _mesa_glsl_parse_state *state) -{ - return state->stage == MESA_SHADER_GEOMETRY; -} - -/* For texture functions moved to compat profile in GLSL 4.20 */ -static bool -deprecated_texture(const _mesa_glsl_parse_state *state) -{ - return state->compat_shader || !state->is_version(420, 0); -} - -static bool -deprecated_texture_derivatives_only(const _mesa_glsl_parse_state *state) -{ - return deprecated_texture(state) && derivatives_only(state); -} - -static bool -v110(const _mesa_glsl_parse_state *state) -{ - return !state->es_shader; -} - -static bool -v110_deprecated_texture(const _mesa_glsl_parse_state *state) -{ - return !state->es_shader && deprecated_texture(state); -} - -static bool -v110_derivatives_only_deprecated_texture(const _mesa_glsl_parse_state *state) -{ - return v110_deprecated_texture(state) && - derivatives_only(state); -} - -static bool -v120(const _mesa_glsl_parse_state *state) -{ - return state->is_version(120, 300); -} - -static bool -v130(const _mesa_glsl_parse_state *state) -{ - return state->is_version(130, 300); -} - -static bool -v130_desktop(const _mesa_glsl_parse_state *state) -{ - return state->is_version(130, 0); -} - -static bool -v460_desktop(const _mesa_glsl_parse_state *state) -{ - return state->is_version(460, 0); -} - -static bool -v130_derivatives_only(const _mesa_glsl_parse_state *state) -{ - return state->is_version(130, 300) && - derivatives_only(state); -} - -static bool -v140_or_es3(const _mesa_glsl_parse_state *state) -{ - return state->is_version(140, 300); -} - -static bool -v400_derivatives_only(const _mesa_glsl_parse_state *state) -{ - return state->is_version(400, 0) && - derivatives_only(state); -} - -static bool -texture_rectangle(const _mesa_glsl_parse_state *state) -{ - return state->ARB_texture_rectangle_enable; -} - -static bool -texture_external(const _mesa_glsl_parse_state *state) -{ - return state->OES_EGL_image_external_enable; -} - -static bool -texture_external_es3(const _mesa_glsl_parse_state *state) -{ - return state->OES_EGL_image_external_essl3_enable && - state->es_shader && - state->is_version(0, 300); -} - -/** True if texturing functions with explicit LOD are allowed. */ -static bool -lod_exists_in_stage(const _mesa_glsl_parse_state *state) -{ - /* Texturing functions with "Lod" in their name exist: - * - In the vertex shader stage (for all languages) - * - In any stage for GLSL 1.30+ or GLSL ES 3.00 - * - In any stage for desktop GLSL with ARB_shader_texture_lod enabled. - * - * Since ARB_shader_texture_lod can only be enabled on desktop GLSL, we - * don't need to explicitly check state->es_shader. - */ - return state->stage == MESA_SHADER_VERTEX || - state->is_version(130, 300) || - state->ARB_shader_texture_lod_enable || - state->EXT_gpu_shader4_enable; -} - -static bool -lod_deprecated_texture(const _mesa_glsl_parse_state *state) -{ - return deprecated_texture(state) && lod_exists_in_stage(state); -} - -static bool -v110_lod_deprecated_texture(const _mesa_glsl_parse_state *state) -{ - return !state->es_shader && lod_deprecated_texture(state); -} - -static bool -texture_buffer(const _mesa_glsl_parse_state *state) -{ - return state->is_version(140, 320) || - state->EXT_texture_buffer_enable || - state->OES_texture_buffer_enable; -} - -static bool -shader_texture_lod(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_texture_lod_enable; -} - -static bool -shader_texture_lod_and_rect(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_texture_lod_enable && - state->ARB_texture_rectangle_enable; -} - -static bool -shader_bit_encoding(const _mesa_glsl_parse_state *state) -{ - return state->is_version(330, 300) || - state->ARB_shader_bit_encoding_enable || - state->ARB_gpu_shader5_enable; -} - -static bool -shader_integer_mix(const _mesa_glsl_parse_state *state) -{ - return state->is_version(450, 310) || - state->ARB_ES3_1_compatibility_enable || - (v130(state) && state->EXT_shader_integer_mix_enable); -} - -static bool -shader_packing_or_es3(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shading_language_packing_enable || - state->is_version(420, 300); -} - -static bool -shader_packing_or_es3_or_gpu_shader5(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shading_language_packing_enable || - state->ARB_gpu_shader5_enable || - state->is_version(400, 300); -} - -static bool -gpu_shader4(const _mesa_glsl_parse_state *state) -{ - return state->EXT_gpu_shader4_enable; -} - -static bool -gpu_shader4_integer(const _mesa_glsl_parse_state *state) -{ - return state->EXT_gpu_shader4_enable && - state->exts->EXT_texture_integer; -} - -static bool -gpu_shader4_array(const _mesa_glsl_parse_state *state) -{ - return state->EXT_gpu_shader4_enable && - state->exts->EXT_texture_array; -} - -static bool -gpu_shader4_array_integer(const _mesa_glsl_parse_state *state) -{ - return gpu_shader4_array(state) && - state->exts->EXT_texture_integer; -} - -static bool -gpu_shader4_rect(const _mesa_glsl_parse_state *state) -{ - return state->EXT_gpu_shader4_enable && - state->exts->NV_texture_rectangle; -} - -static bool -gpu_shader4_rect_integer(const _mesa_glsl_parse_state *state) -{ - return gpu_shader4_rect(state) && - state->exts->EXT_texture_integer; -} - -static bool -gpu_shader4_tbo(const _mesa_glsl_parse_state *state) -{ - return state->EXT_gpu_shader4_enable && - state->exts->EXT_texture_buffer_object; -} - -static bool -gpu_shader4_tbo_integer(const _mesa_glsl_parse_state *state) -{ - return gpu_shader4_tbo(state) && - state->exts->EXT_texture_integer; -} - -static bool -gpu_shader4_derivs_only(const _mesa_glsl_parse_state *state) -{ - return state->EXT_gpu_shader4_enable && - derivatives_only(state); -} - -static bool -gpu_shader4_integer_derivs_only(const _mesa_glsl_parse_state *state) -{ - return gpu_shader4_derivs_only(state) && - state->exts->EXT_texture_integer; -} - -static bool -gpu_shader4_array_derivs_only(const _mesa_glsl_parse_state *state) -{ - return gpu_shader4_derivs_only(state) && - state->exts->EXT_texture_array; -} - -static bool -gpu_shader4_array_integer_derivs_only(const _mesa_glsl_parse_state *state) -{ - return gpu_shader4_array_derivs_only(state) && - state->exts->EXT_texture_integer; -} - -static bool -v130_or_gpu_shader4(const _mesa_glsl_parse_state *state) -{ - return state->is_version(130, 300) || state->EXT_gpu_shader4_enable; -} - -static bool -v130_or_gpu_shader4_and_tex_shadow_lod(const _mesa_glsl_parse_state *state) -{ - return v130_or_gpu_shader4(state) && - state->EXT_texture_shadow_lod_enable; -} - -static bool -gpu_shader5(const _mesa_glsl_parse_state *state) -{ - return state->is_version(400, 0) || state->ARB_gpu_shader5_enable; -} - -static bool -gpu_shader5_es(const _mesa_glsl_parse_state *state) -{ - return state->is_version(400, 320) || - state->ARB_gpu_shader5_enable || - state->EXT_gpu_shader5_enable || - state->OES_gpu_shader5_enable; -} - -static bool -gpu_shader5_or_OES_texture_cube_map_array(const _mesa_glsl_parse_state *state) -{ - return state->is_version(400, 320) || - state->ARB_gpu_shader5_enable || - state->EXT_texture_cube_map_array_enable || - state->OES_texture_cube_map_array_enable; -} - -static bool -es31_not_gs5(const _mesa_glsl_parse_state *state) -{ - return state->is_version(0, 310) && !gpu_shader5_es(state); -} - -static bool -gpu_shader5_or_es31(const _mesa_glsl_parse_state *state) -{ - return state->is_version(400, 310) || state->ARB_gpu_shader5_enable; -} - -static bool -shader_packing_or_es31_or_gpu_shader5(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shading_language_packing_enable || - state->ARB_gpu_shader5_enable || - state->is_version(400, 310); -} - -static bool -gpu_shader5_or_es31_or_integer_functions(const _mesa_glsl_parse_state *state) -{ - return gpu_shader5_or_es31(state) || - state->MESA_shader_integer_functions_enable; -} - -static bool -fs_interpolate_at(const _mesa_glsl_parse_state *state) -{ - return state->stage == MESA_SHADER_FRAGMENT && - (state->is_version(400, 320) || - state->ARB_gpu_shader5_enable || - state->OES_shader_multisample_interpolation_enable); -} - - -static bool -texture_array_lod(const _mesa_glsl_parse_state *state) -{ - return lod_exists_in_stage(state) && - (state->EXT_texture_array_enable || - (state->EXT_gpu_shader4_enable && - state->exts->EXT_texture_array)); -} - -static bool -texture_array(const _mesa_glsl_parse_state *state) -{ - return state->EXT_texture_array_enable || - (state->EXT_gpu_shader4_enable && - state->exts->EXT_texture_array); -} - -static bool -texture_array_derivs_only(const _mesa_glsl_parse_state *state) -{ - return derivatives_only(state) && - texture_array(state); -} - -static bool -texture_multisample(const _mesa_glsl_parse_state *state) -{ - return state->is_version(150, 310) || - state->ARB_texture_multisample_enable; -} - -static bool -texture_multisample_array(const _mesa_glsl_parse_state *state) -{ - return state->is_version(150, 320) || - state->ARB_texture_multisample_enable || - state->OES_texture_storage_multisample_2d_array_enable; -} - -static bool -texture_samples_identical(const _mesa_glsl_parse_state *state) -{ - return texture_multisample(state) && - state->EXT_shader_samples_identical_enable; -} - -static bool -texture_samples_identical_array(const _mesa_glsl_parse_state *state) -{ - return texture_multisample_array(state) && - state->EXT_shader_samples_identical_enable; -} - -static bool -derivatives_texture_cube_map_array(const _mesa_glsl_parse_state *state) -{ - return state->has_texture_cube_map_array() && - derivatives_only(state); -} - -static bool -texture_cube_map_array(const _mesa_glsl_parse_state *state) -{ - return state->has_texture_cube_map_array(); -} - -static bool -v130_or_gpu_shader4_and_tex_cube_map_array(const _mesa_glsl_parse_state *state) -{ - return texture_cube_map_array(state) && - v130_or_gpu_shader4(state) && - state->EXT_texture_shadow_lod_enable; -} - -static bool -texture_query_levels(const _mesa_glsl_parse_state *state) -{ - return state->is_version(430, 0) || - state->ARB_texture_query_levels_enable; -} - -static bool -texture_query_lod(const _mesa_glsl_parse_state *state) -{ - return derivatives_only(state) && - (state->ARB_texture_query_lod_enable || - state->EXT_texture_query_lod_enable); -} - -static bool -texture_gather_cube_map_array(const _mesa_glsl_parse_state *state) -{ - return state->is_version(400, 320) || - state->ARB_texture_gather_enable || - state->ARB_gpu_shader5_enable || - state->EXT_texture_cube_map_array_enable || - state->OES_texture_cube_map_array_enable; -} - -static bool -texture_texture4(const _mesa_glsl_parse_state *state) -{ - return state->AMD_texture_texture4_enable; -} - -static bool -texture_gather_or_es31(const _mesa_glsl_parse_state *state) -{ - return state->is_version(400, 310) || - state->ARB_texture_gather_enable || - state->ARB_gpu_shader5_enable; -} - -/* Only ARB_texture_gather but not GLSL 4.0 or ARB_gpu_shader5. - * used for relaxation of const offset requirements. - */ -static bool -texture_gather_only_or_es31(const _mesa_glsl_parse_state *state) -{ - return !state->is_version(400, 320) && - !state->ARB_gpu_shader5_enable && - !state->EXT_gpu_shader5_enable && - !state->OES_gpu_shader5_enable && - (state->ARB_texture_gather_enable || - state->is_version(0, 310)); -} - -/* Desktop GL or OES_standard_derivatives */ -static bool -derivatives(const _mesa_glsl_parse_state *state) -{ - return derivatives_only(state) && - (state->is_version(110, 300) || - state->OES_standard_derivatives_enable || - state->consts->AllowGLSLRelaxedES); -} - -static bool -derivative_control(const _mesa_glsl_parse_state *state) -{ - return derivatives_only(state) && - (state->is_version(450, 0) || - state->ARB_derivative_control_enable); -} - -/** True if sampler3D exists */ -static bool -tex3d(const _mesa_glsl_parse_state *state) -{ - /* sampler3D exists in all desktop GLSL versions, GLSL ES 1.00 with the - * OES_texture_3D extension, and in GLSL ES 3.00. - */ - return (!state->es_shader || - state->OES_texture_3D_enable || - state->language_version >= 300) && deprecated_texture(state); -} - -static bool -derivatives_tex3d(const _mesa_glsl_parse_state *state) -{ - return (!state->es_shader || state->OES_texture_3D_enable) && - derivatives_only(state) && deprecated_texture(state); -} - -static bool -tex3d_lod(const _mesa_glsl_parse_state *state) -{ - return tex3d(state) && lod_exists_in_stage(state); -} - -static bool -shader_atomic_counters(const _mesa_glsl_parse_state *state) -{ - return state->has_atomic_counters(); -} - -static bool -shader_atomic_counter_ops(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_atomic_counter_ops_enable; -} - -static bool -shader_atomic_counter_ops_or_v460_desktop(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_atomic_counter_ops_enable || v460_desktop(state); -} - -static bool -shader_ballot(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_ballot_enable; -} - -static bool -supports_arb_fragment_shader_interlock(const _mesa_glsl_parse_state *state) -{ - return state->ARB_fragment_shader_interlock_enable; -} - -static bool -supports_nv_fragment_shader_interlock(const _mesa_glsl_parse_state *state) -{ - return state->NV_fragment_shader_interlock_enable; -} - -static bool -shader_clock(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_clock_enable; -} - -static bool -shader_clock_int64(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_clock_enable && - (state->ARB_gpu_shader_int64_enable || - state->AMD_gpu_shader_int64_enable); -} - -static bool -shader_storage_buffer_object(const _mesa_glsl_parse_state *state) -{ - return state->has_shader_storage_buffer_objects(); -} - -static bool -shader_trinary_minmax(const _mesa_glsl_parse_state *state) -{ - return state->AMD_shader_trinary_minmax_enable; -} - -static bool -shader_image_load_store(const _mesa_glsl_parse_state *state) -{ - return (state->is_version(420, 310) || - state->ARB_shader_image_load_store_enable || - state->EXT_shader_image_load_store_enable); -} - -static bool -shader_image_load_store_ext(const _mesa_glsl_parse_state *state) -{ - return state->EXT_shader_image_load_store_enable; -} - -static bool -shader_image_atomic(const _mesa_glsl_parse_state *state) -{ - return (state->is_version(420, 320) || - state->ARB_shader_image_load_store_enable || - state->EXT_shader_image_load_store_enable || - state->OES_shader_image_atomic_enable); -} - -static bool -shader_image_atomic_exchange_float(const _mesa_glsl_parse_state *state) -{ - return (state->is_version(450, 320) || - state->ARB_ES3_1_compatibility_enable || - state->OES_shader_image_atomic_enable || - state->NV_shader_atomic_float_enable); -} - -static bool -shader_image_atomic_add_float(const _mesa_glsl_parse_state *state) -{ - return state->NV_shader_atomic_float_enable; -} - -static bool -shader_image_size(const _mesa_glsl_parse_state *state) -{ - return state->is_version(430, 310) || - state->ARB_shader_image_size_enable; -} - -static bool -shader_samples(const _mesa_glsl_parse_state *state) -{ - return state->is_version(450, 0) || - state->ARB_shader_texture_image_samples_enable; -} - -static bool -gs_streams(const _mesa_glsl_parse_state *state) -{ - return gpu_shader5(state) && gs_only(state); -} - -static bool -fp64(const _mesa_glsl_parse_state *state) -{ - return state->has_double(); -} - -static bool -int64_avail(const _mesa_glsl_parse_state *state) -{ - return state->has_int64(); -} - -static bool -int64_fp64(const _mesa_glsl_parse_state *state) -{ - return state->has_int64() && state->has_double(); -} - -static bool -compute_shader(const _mesa_glsl_parse_state *state) -{ - return state->stage == MESA_SHADER_COMPUTE; -} - -static bool -compute_shader_supported(const _mesa_glsl_parse_state *state) -{ - return state->has_compute_shader(); -} - -static bool -buffer_atomics_supported(const _mesa_glsl_parse_state *state) -{ - return compute_shader(state) || shader_storage_buffer_object(state); -} - -static bool -buffer_int64_atomics_supported(const _mesa_glsl_parse_state *state) -{ - return state->NV_shader_atomic_int64_enable && - buffer_atomics_supported(state); -} - -static bool -barrier_supported(const _mesa_glsl_parse_state *state) -{ - return compute_shader(state) || - state->stage == MESA_SHADER_TESS_CTRL; -} - -static bool -vote(const _mesa_glsl_parse_state *state) -{ - return state->ARB_shader_group_vote_enable; -} - -static bool -vote_ext(const _mesa_glsl_parse_state *state) -{ - return state->EXT_shader_group_vote_enable; -} - -static bool -vote_or_v460_desktop(const _mesa_glsl_parse_state *state) -{ - return state->EXT_shader_group_vote_enable || state->ARB_shader_group_vote_enable || v460_desktop(state); -} - -static bool -integer_functions_supported(const _mesa_glsl_parse_state *state) -{ - return state->extensions->MESA_shader_integer_functions; -} - -static bool -NV_shader_atomic_float_supported(const _mesa_glsl_parse_state *state) -{ - return state->extensions->NV_shader_atomic_float; -} - -static bool -shader_atomic_float_add(const _mesa_glsl_parse_state *state) -{ - return state->NV_shader_atomic_float_enable; -} - -static bool -shader_atomic_float_exchange(const _mesa_glsl_parse_state *state) -{ - return state->NV_shader_atomic_float_enable || - state->INTEL_shader_atomic_float_minmax_enable; -} - -static bool -INTEL_shader_atomic_float_minmax_supported(const _mesa_glsl_parse_state *state) -{ - return state->extensions->INTEL_shader_atomic_float_minmax; -} - -static bool -shader_atomic_float_minmax(const _mesa_glsl_parse_state *state) -{ - return state->INTEL_shader_atomic_float_minmax_enable; -} - -static bool -demote_to_helper_invocation(const _mesa_glsl_parse_state *state) -{ - return state->EXT_demote_to_helper_invocation_enable; -} - -static bool -shader_integer_functions2(const _mesa_glsl_parse_state *state) -{ - return state->INTEL_shader_integer_functions2_enable; -} - -static bool -shader_integer_functions2_int64(const _mesa_glsl_parse_state *state) -{ - return state->INTEL_shader_integer_functions2_enable && state->has_int64(); -} - -static bool -sparse_enabled(const _mesa_glsl_parse_state *state) -{ - return state->ARB_sparse_texture2_enable; -} - -static bool -v130_desktop_and_sparse(const _mesa_glsl_parse_state *state) -{ - return v130_desktop(state) && state->ARB_sparse_texture2_enable; -} - -static bool -texture_cube_map_array_and_sparse(const _mesa_glsl_parse_state *state) -{ - return texture_cube_map_array(state) && state->ARB_sparse_texture2_enable; -} - -static bool -v130_derivatives_only_and_sparse(const _mesa_glsl_parse_state *state) -{ - return v130_derivatives_only(state) && state->ARB_sparse_texture2_enable; -} - -static bool -derivatives_texture_cube_map_array_and_sparse(const _mesa_glsl_parse_state *state) -{ - return derivatives_texture_cube_map_array(state) && state->ARB_sparse_texture2_enable; -} - -static bool -texture_gather_and_sparse(const _mesa_glsl_parse_state *state) -{ - return (gpu_shader5(state) || state->ARB_texture_gather_enable) && - state->ARB_sparse_texture2_enable; -} - -static bool -gpu_shader5_and_sparse(const _mesa_glsl_parse_state *state) -{ - return gpu_shader5(state) && state->ARB_sparse_texture2_enable; -} - -static bool -texture_multisample_and_sparse(const _mesa_glsl_parse_state *state) -{ - return texture_multisample(state) && - state->ARB_sparse_texture2_enable; -} - -static bool -texture_multisample_array_and_sparse(const _mesa_glsl_parse_state *state) -{ - return texture_multisample_array(state) && - state->ARB_sparse_texture2_enable; -} - -static bool -shader_image_load_store_and_sparse(const _mesa_glsl_parse_state *state) -{ - return shader_image_load_store(state) && - state->ARB_sparse_texture2_enable; -} - -static bool -v130_desktop_and_clamp(const _mesa_glsl_parse_state *state) -{ - return v130_desktop(state) && state->ARB_sparse_texture_clamp_enable; -} - -static bool -texture_cube_map_array_and_clamp(const _mesa_glsl_parse_state *state) -{ - return texture_cube_map_array(state) && state->ARB_sparse_texture_clamp_enable; -} - -static bool -v130_derivatives_only_and_clamp(const _mesa_glsl_parse_state *state) -{ - return v130_derivatives_only(state) && state->ARB_sparse_texture_clamp_enable; -} - -static bool -derivatives_texture_cube_map_array_and_clamp(const _mesa_glsl_parse_state *state) -{ - return derivatives_texture_cube_map_array(state) && state->ARB_sparse_texture_clamp_enable; -} - -/** @} */ - -/******************************************************************************/ - -namespace { - -/** - * builtin_builder: A singleton object representing the core of the built-in - * function module. - * - * It generates IR for every built-in function signature, and organizes them - * into functions. - */ -class builtin_builder { -public: - builtin_builder(); - ~builtin_builder(); - - void initialize(); - void release(); - ir_function_signature *find(_mesa_glsl_parse_state *state, - const char *name, exec_list *actual_parameters); - - /** - * A shader to hold all the built-in signatures; created by this module. - * - * This includes signatures for every built-in, regardless of version or - * enabled extensions. The availability predicate associated with each - * signature allows matching_signature() to filter out the irrelevant ones. - */ - gl_shader *shader; - -private: - void *mem_ctx; - - void create_shader(); - void create_intrinsics(); - void create_builtins(); - - /** - * IR builder helpers: - * - * These convenience functions assist in emitting IR, but don't necessarily - * fit in ir_builder itself. Many of them rely on having a mem_ctx class - * member available. - */ - ir_variable *in_var(const glsl_type *type, const char *name); - ir_variable *in_mediump_var(const glsl_type *type, const char *name); - ir_variable *in_highp_var(const glsl_type *type, const char *name); - ir_variable *out_var(const glsl_type *type, const char *name); - ir_variable *out_lowp_var(const glsl_type *type, const char *name); - ir_variable *out_highp_var(const glsl_type *type, const char *name); - ir_variable *as_highp(ir_factory &body, ir_variable *var); - ir_constant *imm(float f, unsigned vector_elements=1); - ir_constant *imm(bool b, unsigned vector_elements=1); - ir_constant *imm(int i, unsigned vector_elements=1); - ir_constant *imm(unsigned u, unsigned vector_elements=1); - ir_constant *imm(double d, unsigned vector_elements=1); - ir_constant *imm(const glsl_type *type, const ir_constant_data &); - ir_dereference_variable *var_ref(ir_variable *var); - ir_dereference_array *array_ref(ir_variable *var, int i); - ir_swizzle *matrix_elt(ir_variable *var, int col, int row); - ir_dereference_record *record_ref(ir_variable *var, const char *field); - - ir_expression *asin_expr(ir_variable *x, float p0, float p1); - void do_atan(ir_factory &body, const glsl_type *type, ir_variable *res, operand y_over_x); - - /** - * Call function \param f with parameters specified as the linked - * list \param params of \c ir_variable objects. \param ret should - * point to the ir_variable that will hold the function return - * value, or be \c NULL if the function has void return type. - */ - ir_call *call(ir_function *f, ir_variable *ret, exec_list params); - - /** Create a new function and add the given signatures. */ - void add_function(const char *name, ...); - - typedef ir_function_signature *(builtin_builder::*image_prototype_ctr)(const glsl_type *image_type, - unsigned num_arguments, - unsigned flags); - - /** - * Create a new image built-in function for all known image types. - * \p flags is a bitfield of \c image_function_flags flags. - */ - void add_image_function(const char *name, - const char *intrinsic_name, - image_prototype_ctr prototype, - unsigned num_arguments, - unsigned flags, - enum ir_intrinsic_id id); - - /** - * Create new functions for all known image built-ins and types. - * If \p glsl is \c true, use the GLSL built-in names and emit code - * to call into the actual compiler intrinsic. If \p glsl is - * false, emit a function prototype with no body for each image - * intrinsic name. - */ - void add_image_functions(bool glsl); - - ir_function_signature *new_sig(const glsl_type *return_type, - builtin_available_predicate avail, - int num_params, ...); - - /** - * Function signature generators: - * @{ - */ - ir_function_signature *unop(builtin_available_predicate avail, - ir_expression_operation opcode, - const glsl_type *return_type, - const glsl_type *param_type); - ir_function_signature *unop_precision(builtin_available_predicate avail, - ir_expression_operation opcode, - const glsl_type *return_type, - const glsl_type *param_type, uint32_t precision); - ir_function_signature *binop(builtin_available_predicate avail, - ir_expression_operation opcode, - const glsl_type *return_type, - const glsl_type *param0_type, - const glsl_type *param1_type, - bool swap_operands = false); - -#define B0(X) ir_function_signature *_##X(); -#define B1(X) ir_function_signature *_##X(const glsl_type *); -#define B2(X) ir_function_signature *_##X(const glsl_type *, const glsl_type *); -#define B3(X) ir_function_signature *_##X(const glsl_type *, const glsl_type *, const glsl_type *); -#define BA1(X) ir_function_signature *_##X(builtin_available_predicate, const glsl_type *); -#define BA2(X) ir_function_signature *_##X(builtin_available_predicate, const glsl_type *, const glsl_type *); - B1(radians) - B1(degrees) - B1(sin) - B1(cos) - B1(tan) - B1(asin) - B1(acos) - B1(atan2) - B1(atan) - B1(sinh) - B1(cosh) - B1(tanh) - B1(asinh) - B1(acosh) - B1(atanh) - B1(pow) - B1(exp) - B1(log) - B1(exp2) - B1(log2) - BA1(sqrt) - BA1(inversesqrt) - BA1(abs) - BA1(sign) - BA1(floor) - BA1(truncate) - BA1(trunc) - BA1(round) - BA1(roundEven) - BA1(ceil) - BA1(fract) - BA2(mod) - BA1(modf) - BA2(min) - BA2(max) - BA2(clamp) - BA2(mix_lrp) - ir_function_signature *_mix_sel(builtin_available_predicate avail, - const glsl_type *val_type, - const glsl_type *blend_type); - BA2(step) - BA2(smoothstep) - BA1(isnan) - BA1(isinf) - B1(floatBitsToInt) - B1(floatBitsToUint) - B1(intBitsToFloat) - B1(uintBitsToFloat) - - BA1(doubleBitsToInt64) - BA1(doubleBitsToUint64) - BA1(int64BitsToDouble) - BA1(uint64BitsToDouble) - - ir_function_signature *_packUnorm2x16(builtin_available_predicate avail); - ir_function_signature *_packSnorm2x16(builtin_available_predicate avail); - ir_function_signature *_packUnorm4x8(builtin_available_predicate avail); - ir_function_signature *_packSnorm4x8(builtin_available_predicate avail); - ir_function_signature *_unpackUnorm2x16(builtin_available_predicate avail); - ir_function_signature *_unpackSnorm2x16(builtin_available_predicate avail); - ir_function_signature *_unpackUnorm4x8(builtin_available_predicate avail); - ir_function_signature *_unpackSnorm4x8(builtin_available_predicate avail); - ir_function_signature *_packHalf2x16(builtin_available_predicate avail); - ir_function_signature *_unpackHalf2x16(builtin_available_predicate avail); - ir_function_signature *_packDouble2x32(builtin_available_predicate avail); - ir_function_signature *_unpackDouble2x32(builtin_available_predicate avail); - ir_function_signature *_packInt2x32(builtin_available_predicate avail); - ir_function_signature *_unpackInt2x32(builtin_available_predicate avail); - ir_function_signature *_packUint2x32(builtin_available_predicate avail); - ir_function_signature *_unpackUint2x32(builtin_available_predicate avail); - - BA1(length) - BA1(distance); - BA1(dot); - BA1(cross); - BA1(normalize); - B0(ftransform); - BA1(faceforward); - BA1(reflect); - BA1(refract); - BA1(matrixCompMult); - BA1(outerProduct); - BA1(determinant_mat2); - BA1(determinant_mat3); - BA1(determinant_mat4); - BA1(inverse_mat2); - BA1(inverse_mat3); - BA1(inverse_mat4); - BA1(transpose); - BA1(lessThan); - BA1(lessThanEqual); - BA1(greaterThan); - BA1(greaterThanEqual); - BA1(equal); - BA1(notEqual); - B1(any); - B1(all); - B1(not); - BA2(textureSize); - BA1(textureSamples); - - B0(is_sparse_texels_resident); - B0(is_sparse_texels_resident_intrinsic); - -/** Flags to _texture() */ -#define TEX_PROJECT 1 -#define TEX_OFFSET 2 -#define TEX_COMPONENT 4 -#define TEX_OFFSET_NONCONST 8 -#define TEX_OFFSET_ARRAY 16 -#define TEX_SPARSE 32 -#define TEX_CLAMP 64 - - ir_function_signature *_texture(ir_texture_opcode opcode, - builtin_available_predicate avail, - const glsl_type *return_type, - const glsl_type *sampler_type, - const glsl_type *coord_type, - int flags = 0); - ir_function_signature *_textureCubeArrayShadow(ir_texture_opcode opcode, - builtin_available_predicate avail, - const glsl_type *x, - int flags = 0); - ir_function_signature *_texelFetch(builtin_available_predicate avail, - const glsl_type *return_type, - const glsl_type *sampler_type, - const glsl_type *coord_type, - const glsl_type *offset_type = NULL, - bool sparse = false); - - B0(EmitVertex) - B0(EndPrimitive) - ir_function_signature *_EmitStreamVertex(builtin_available_predicate avail, - const glsl_type *stream_type); - ir_function_signature *_EndStreamPrimitive(builtin_available_predicate avail, - const glsl_type *stream_type); - B0(barrier) - - BA2(textureQueryLod); - BA1(textureQueryLevels); - BA2(textureSamplesIdentical); - B1(dFdx); - B1(dFdy); - B1(fwidth); - B1(dFdxCoarse); - B1(dFdyCoarse); - B1(fwidthCoarse); - B1(dFdxFine); - B1(dFdyFine); - B1(fwidthFine); - B1(noise1); - B1(noise2); - B1(noise3); - B1(noise4); - - B1(bitfieldExtract) - B1(bitfieldInsert) - B1(bitfieldReverse) - B1(bitCount) - B1(findLSB) - B1(findMSB) - BA1(countLeadingZeros) - BA1(countTrailingZeros) - BA1(fma) - B2(ldexp) - B2(frexp) - B2(dfrexp) - B1(uaddCarry) - B1(usubBorrow) - BA1(addSaturate) - BA1(subtractSaturate) - BA1(absoluteDifference) - BA1(average) - BA1(averageRounded) - B1(mulExtended) - BA1(multiply32x16) - B1(interpolateAtCentroid) - B1(interpolateAtOffset) - B1(interpolateAtSample) - - ir_function_signature *_atomic_counter_intrinsic(builtin_available_predicate avail, - enum ir_intrinsic_id id); - ir_function_signature *_atomic_counter_intrinsic1(builtin_available_predicate avail, - enum ir_intrinsic_id id); - ir_function_signature *_atomic_counter_intrinsic2(builtin_available_predicate avail, - enum ir_intrinsic_id id); - ir_function_signature *_atomic_counter_op(const char *intrinsic, - builtin_available_predicate avail); - ir_function_signature *_atomic_counter_op1(const char *intrinsic, - builtin_available_predicate avail); - ir_function_signature *_atomic_counter_op2(const char *intrinsic, - builtin_available_predicate avail); - - ir_function_signature *_atomic_intrinsic2(builtin_available_predicate avail, - const glsl_type *type, - enum ir_intrinsic_id id); - ir_function_signature *_atomic_op2(const char *intrinsic, - builtin_available_predicate avail, - const glsl_type *type); - ir_function_signature *_atomic_intrinsic3(builtin_available_predicate avail, - const glsl_type *type, - enum ir_intrinsic_id id); - ir_function_signature *_atomic_op3(const char *intrinsic, - builtin_available_predicate avail, - const glsl_type *type); - - B1(min3) - B1(max3) - B1(mid3) - - ir_function_signature *_image_prototype(const glsl_type *image_type, - unsigned num_arguments, - unsigned flags); - ir_function_signature *_image_size_prototype(const glsl_type *image_type, - unsigned num_arguments, - unsigned flags); - ir_function_signature *_image_samples_prototype(const glsl_type *image_type, - unsigned num_arguments, - unsigned flags); - ir_function_signature *_image(image_prototype_ctr prototype, - const glsl_type *image_type, - const char *intrinsic_name, - unsigned num_arguments, - unsigned flags, - enum ir_intrinsic_id id); - - ir_function_signature *_memory_barrier_intrinsic( - builtin_available_predicate avail, - enum ir_intrinsic_id id); - ir_function_signature *_memory_barrier(const char *intrinsic_name, - builtin_available_predicate avail); - - ir_function_signature *_ballot_intrinsic(); - ir_function_signature *_ballot(); - ir_function_signature *_read_first_invocation_intrinsic(const glsl_type *type); - ir_function_signature *_read_first_invocation(const glsl_type *type); - ir_function_signature *_read_invocation_intrinsic(const glsl_type *type); - ir_function_signature *_read_invocation(const glsl_type *type); - - - ir_function_signature *_invocation_interlock_intrinsic( - builtin_available_predicate avail, - enum ir_intrinsic_id id); - ir_function_signature *_invocation_interlock( - const char *intrinsic_name, - builtin_available_predicate avail); - - ir_function_signature *_shader_clock_intrinsic(builtin_available_predicate avail, - const glsl_type *type); - ir_function_signature *_shader_clock(builtin_available_predicate avail, - const glsl_type *type); - - ir_function_signature *_vote_intrinsic(builtin_available_predicate avail, - enum ir_intrinsic_id id); - ir_function_signature *_vote(const char *intrinsic_name, - builtin_available_predicate avail); - - ir_function_signature *_helper_invocation_intrinsic(); - ir_function_signature *_helper_invocation(); - -#undef B0 -#undef B1 -#undef B2 -#undef B3 -#undef BA1 -#undef BA2 - /** @} */ -}; - -enum image_function_flags { - IMAGE_FUNCTION_EMIT_STUB = (1 << 0), - IMAGE_FUNCTION_RETURNS_VOID = (1 << 1), - IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE = (1 << 2), - IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE = (1 << 3), - IMAGE_FUNCTION_READ_ONLY = (1 << 4), - IMAGE_FUNCTION_WRITE_ONLY = (1 << 5), - IMAGE_FUNCTION_AVAIL_ATOMIC = (1 << 6), - IMAGE_FUNCTION_MS_ONLY = (1 << 7), - IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE = (1 << 8), - IMAGE_FUNCTION_AVAIL_ATOMIC_ADD = (1 << 9), - IMAGE_FUNCTION_EXT_ONLY = (1 << 10), - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE = (1 << 11), - IMAGE_FUNCTION_SPARSE = (1 << 12), -}; - -} /* anonymous namespace */ - -/** - * Core builtin_builder functionality: - * @{ - */ -builtin_builder::builtin_builder() - : shader(NULL) -{ - mem_ctx = NULL; -} - -builtin_builder::~builtin_builder() -{ - simple_mtx_lock(&builtins_lock); - - ralloc_free(mem_ctx); - mem_ctx = NULL; - - ralloc_free(shader); - shader = NULL; - - simple_mtx_unlock(&builtins_lock); -} - -ir_function_signature * -builtin_builder::find(_mesa_glsl_parse_state *state, - const char *name, exec_list *actual_parameters) -{ - /* The shader currently being compiled requested a built-in function; - * it needs to link against builtin_builder::shader in order to get them. - * - * Even if we don't find a matching signature, we still need to do this so - * that the "no matching signature" error will list potential candidates - * from the available built-ins. - */ - state->uses_builtin_functions = true; - - ir_function *f = shader->symbols->get_function(name); - if (f == NULL) - return NULL; - - ir_function_signature *sig = - f->matching_signature(state, actual_parameters, true); - if (sig == NULL) - return NULL; - - return sig; -} - -void -builtin_builder::initialize() -{ - /* If already initialized, don't do it again. */ - if (mem_ctx != NULL) - return; - - glsl_type_singleton_init_or_ref(); - - mem_ctx = ralloc_context(NULL); - create_shader(); - create_intrinsics(); - create_builtins(); -} - -void -builtin_builder::release() -{ - ralloc_free(mem_ctx); - mem_ctx = NULL; - - ralloc_free(shader); - shader = NULL; - - glsl_type_singleton_decref(); -} - -void -builtin_builder::create_shader() -{ - /* The target doesn't actually matter. There's no target for generic - * GLSL utility code that could be linked against any stage, so just - * arbitrarily pick GL_VERTEX_SHADER. - */ - shader = _mesa_new_shader(0, MESA_SHADER_VERTEX); - shader->symbols = new(mem_ctx) glsl_symbol_table; -} - -/** @} */ - -/** - * Create ir_function and ir_function_signature objects for each - * intrinsic. - */ -void -builtin_builder::create_intrinsics() -{ - add_function("__intrinsic_atomic_read", - _atomic_counter_intrinsic(shader_atomic_counters, - ir_intrinsic_atomic_counter_read), - NULL); - add_function("__intrinsic_atomic_increment", - _atomic_counter_intrinsic(shader_atomic_counters, - ir_intrinsic_atomic_counter_increment), - NULL); - add_function("__intrinsic_atomic_predecrement", - _atomic_counter_intrinsic(shader_atomic_counters, - ir_intrinsic_atomic_counter_predecrement), - NULL); - - add_function("__intrinsic_atomic_add", - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_add), - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_add), - _atomic_intrinsic2(NV_shader_atomic_float_supported, - glsl_type::float_type, - ir_intrinsic_generic_atomic_add), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_add), - _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_add), - NULL); - add_function("__intrinsic_atomic_min", - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_min), - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_min), - _atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported, - glsl_type::float_type, - ir_intrinsic_generic_atomic_min), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::uint64_t_type, - ir_intrinsic_generic_atomic_min), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_min), - _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_min), - NULL); - add_function("__intrinsic_atomic_max", - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_max), - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_max), - _atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported, - glsl_type::float_type, - ir_intrinsic_generic_atomic_max), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::uint64_t_type, - ir_intrinsic_generic_atomic_max), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_max), - _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_max), - NULL); - add_function("__intrinsic_atomic_and", - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_and), - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_and), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::uint64_t_type, - ir_intrinsic_generic_atomic_and), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_and), - _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_and), - NULL); - add_function("__intrinsic_atomic_or", - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_or), - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_or), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::uint64_t_type, - ir_intrinsic_generic_atomic_or), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_or), - _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_or), - NULL); - add_function("__intrinsic_atomic_xor", - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_xor), - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_xor), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::uint64_t_type, - ir_intrinsic_generic_atomic_xor), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_xor), - _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_xor), - NULL); - add_function("__intrinsic_atomic_exchange", - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_exchange), - _atomic_intrinsic2(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_exchange), - _atomic_intrinsic2(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_exchange), - _atomic_intrinsic2(NV_shader_atomic_float_supported, - glsl_type::float_type, - ir_intrinsic_generic_atomic_exchange), - _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_exchange), - NULL); - add_function("__intrinsic_atomic_comp_swap", - _atomic_intrinsic3(buffer_atomics_supported, - glsl_type::uint_type, - ir_intrinsic_generic_atomic_comp_swap), - _atomic_intrinsic3(buffer_atomics_supported, - glsl_type::int_type, - ir_intrinsic_generic_atomic_comp_swap), - _atomic_intrinsic3(buffer_int64_atomics_supported, - glsl_type::int64_t_type, - ir_intrinsic_generic_atomic_comp_swap), - _atomic_intrinsic3(INTEL_shader_atomic_float_minmax_supported, - glsl_type::float_type, - ir_intrinsic_generic_atomic_comp_swap), - _atomic_counter_intrinsic2(shader_atomic_counter_ops_or_v460_desktop, - ir_intrinsic_atomic_counter_comp_swap), - NULL); - - add_image_functions(false); - - add_function("__intrinsic_memory_barrier", - _memory_barrier_intrinsic(shader_image_load_store, - ir_intrinsic_memory_barrier), - NULL); - add_function("__intrinsic_group_memory_barrier", - _memory_barrier_intrinsic(compute_shader, - ir_intrinsic_group_memory_barrier), - NULL); - add_function("__intrinsic_memory_barrier_atomic_counter", - _memory_barrier_intrinsic(compute_shader_supported, - ir_intrinsic_memory_barrier_atomic_counter), - NULL); - add_function("__intrinsic_memory_barrier_buffer", - _memory_barrier_intrinsic(compute_shader_supported, - ir_intrinsic_memory_barrier_buffer), - NULL); - add_function("__intrinsic_memory_barrier_image", - _memory_barrier_intrinsic(compute_shader_supported, - ir_intrinsic_memory_barrier_image), - NULL); - add_function("__intrinsic_memory_barrier_shared", - _memory_barrier_intrinsic(compute_shader, - ir_intrinsic_memory_barrier_shared), - NULL); - - add_function("__intrinsic_begin_invocation_interlock", - _invocation_interlock_intrinsic( - supports_arb_fragment_shader_interlock, - ir_intrinsic_begin_invocation_interlock), NULL); - - add_function("__intrinsic_end_invocation_interlock", - _invocation_interlock_intrinsic( - supports_arb_fragment_shader_interlock, - ir_intrinsic_end_invocation_interlock), NULL); - - add_function("__intrinsic_shader_clock", - _shader_clock_intrinsic(shader_clock, - glsl_type::uvec2_type), - NULL); - - add_function("__intrinsic_vote_all", - _vote_intrinsic(vote_or_v460_desktop, ir_intrinsic_vote_all), - NULL); - add_function("__intrinsic_vote_any", - _vote_intrinsic(vote_or_v460_desktop, ir_intrinsic_vote_any), - NULL); - add_function("__intrinsic_vote_eq", - _vote_intrinsic(vote_or_v460_desktop, ir_intrinsic_vote_eq), - NULL); - - add_function("__intrinsic_ballot", _ballot_intrinsic(), NULL); - - add_function("__intrinsic_read_invocation", - _read_invocation_intrinsic(glsl_type::float_type), - _read_invocation_intrinsic(glsl_type::vec2_type), - _read_invocation_intrinsic(glsl_type::vec3_type), - _read_invocation_intrinsic(glsl_type::vec4_type), - - _read_invocation_intrinsic(glsl_type::int_type), - _read_invocation_intrinsic(glsl_type::ivec2_type), - _read_invocation_intrinsic(glsl_type::ivec3_type), - _read_invocation_intrinsic(glsl_type::ivec4_type), - - _read_invocation_intrinsic(glsl_type::uint_type), - _read_invocation_intrinsic(glsl_type::uvec2_type), - _read_invocation_intrinsic(glsl_type::uvec3_type), - _read_invocation_intrinsic(glsl_type::uvec4_type), - NULL); - - add_function("__intrinsic_read_first_invocation", - _read_first_invocation_intrinsic(glsl_type::float_type), - _read_first_invocation_intrinsic(glsl_type::vec2_type), - _read_first_invocation_intrinsic(glsl_type::vec3_type), - _read_first_invocation_intrinsic(glsl_type::vec4_type), - - _read_first_invocation_intrinsic(glsl_type::int_type), - _read_first_invocation_intrinsic(glsl_type::ivec2_type), - _read_first_invocation_intrinsic(glsl_type::ivec3_type), - _read_first_invocation_intrinsic(glsl_type::ivec4_type), - - _read_first_invocation_intrinsic(glsl_type::uint_type), - _read_first_invocation_intrinsic(glsl_type::uvec2_type), - _read_first_invocation_intrinsic(glsl_type::uvec3_type), - _read_first_invocation_intrinsic(glsl_type::uvec4_type), - NULL); - - add_function("__intrinsic_helper_invocation", - _helper_invocation_intrinsic(), NULL); - - add_function("__intrinsic_is_sparse_texels_resident", - _is_sparse_texels_resident_intrinsic(), NULL); -} - -/** - * Create ir_function and ir_function_signature objects for each built-in. - * - * Contains a list of every available built-in. - */ -void -builtin_builder::create_builtins() -{ -#define F(NAME) \ - add_function(#NAME, \ - _##NAME(glsl_type::float_type), \ - _##NAME(glsl_type::vec2_type), \ - _##NAME(glsl_type::vec3_type), \ - _##NAME(glsl_type::vec4_type), \ - NULL); - -#define FD(NAME) \ - add_function(#NAME, \ - _##NAME(always_available, glsl_type::float_type), \ - _##NAME(always_available, glsl_type::vec2_type), \ - _##NAME(always_available, glsl_type::vec3_type), \ - _##NAME(always_available, glsl_type::vec4_type), \ - _##NAME(fp64, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type), \ - NULL); - -#define FD130(NAME) \ - add_function(#NAME, \ - _##NAME(v130, glsl_type::float_type), \ - _##NAME(v130, glsl_type::vec2_type), \ - _##NAME(v130, glsl_type::vec3_type), \ - _##NAME(v130, glsl_type::vec4_type), \ - _##NAME(fp64, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type), \ - NULL); - -#define FD130GS4(NAME) \ - add_function(#NAME, \ - _##NAME(v130_or_gpu_shader4, glsl_type::float_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::vec2_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::vec3_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::vec4_type), \ - _##NAME(fp64, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type), \ - NULL); - -#define FDGS5(NAME) \ - add_function(#NAME, \ - _##NAME(gpu_shader5_es, glsl_type::float_type), \ - _##NAME(gpu_shader5_es, glsl_type::vec2_type), \ - _##NAME(gpu_shader5_es, glsl_type::vec3_type), \ - _##NAME(gpu_shader5_es, glsl_type::vec4_type), \ - _##NAME(fp64, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type), \ - NULL); - -#define FI(NAME) \ - add_function(#NAME, \ - _##NAME(glsl_type::float_type), \ - _##NAME(glsl_type::vec2_type), \ - _##NAME(glsl_type::vec3_type), \ - _##NAME(glsl_type::vec4_type), \ - _##NAME(glsl_type::int_type), \ - _##NAME(glsl_type::ivec2_type), \ - _##NAME(glsl_type::ivec3_type), \ - _##NAME(glsl_type::ivec4_type), \ - NULL); - -#define FI64(NAME) \ - add_function(#NAME, \ - _##NAME(always_available, glsl_type::float_type), \ - _##NAME(always_available, glsl_type::vec2_type), \ - _##NAME(always_available, glsl_type::vec3_type), \ - _##NAME(always_available, glsl_type::vec4_type), \ - _##NAME(always_available, glsl_type::int_type), \ - _##NAME(always_available, glsl_type::ivec2_type), \ - _##NAME(always_available, glsl_type::ivec3_type), \ - _##NAME(always_available, glsl_type::ivec4_type), \ - _##NAME(fp64, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type), \ - _##NAME(int64_avail, glsl_type::int64_t_type), \ - _##NAME(int64_avail, glsl_type::i64vec2_type), \ - _##NAME(int64_avail, glsl_type::i64vec3_type), \ - _##NAME(int64_avail, glsl_type::i64vec4_type), \ - NULL); - -#define FIUD_VEC(NAME) \ - add_function(#NAME, \ - _##NAME(always_available, glsl_type::vec2_type), \ - _##NAME(always_available, glsl_type::vec3_type), \ - _##NAME(always_available, glsl_type::vec4_type), \ - \ - _##NAME(always_available, glsl_type::ivec2_type), \ - _##NAME(always_available, glsl_type::ivec3_type), \ - _##NAME(always_available, glsl_type::ivec4_type), \ - \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec2_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec3_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec4_type), \ - _##NAME(fp64, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type), \ - _##NAME(int64_avail, glsl_type::int64_t_type), \ - _##NAME(int64_avail, glsl_type::i64vec2_type), \ - _##NAME(int64_avail, glsl_type::i64vec3_type), \ - _##NAME(int64_avail, glsl_type::i64vec4_type), \ - _##NAME(int64_avail, glsl_type::uint64_t_type), \ - _##NAME(int64_avail, glsl_type::u64vec2_type), \ - _##NAME(int64_avail, glsl_type::u64vec3_type), \ - _##NAME(int64_avail, glsl_type::u64vec4_type), \ - NULL); - -#define IU(NAME) \ - add_function(#NAME, \ - _##NAME(glsl_type::int_type), \ - _##NAME(glsl_type::ivec2_type), \ - _##NAME(glsl_type::ivec3_type), \ - _##NAME(glsl_type::ivec4_type), \ - \ - _##NAME(glsl_type::uint_type), \ - _##NAME(glsl_type::uvec2_type), \ - _##NAME(glsl_type::uvec3_type), \ - _##NAME(glsl_type::uvec4_type), \ - NULL); - -#define FIUBD_VEC(NAME) \ - add_function(#NAME, \ - _##NAME(always_available, glsl_type::vec2_type), \ - _##NAME(always_available, glsl_type::vec3_type), \ - _##NAME(always_available, glsl_type::vec4_type), \ - \ - _##NAME(always_available, glsl_type::ivec2_type), \ - _##NAME(always_available, glsl_type::ivec3_type), \ - _##NAME(always_available, glsl_type::ivec4_type), \ - \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec2_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec3_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec4_type), \ - \ - _##NAME(always_available, glsl_type::bvec2_type), \ - _##NAME(always_available, glsl_type::bvec3_type), \ - _##NAME(always_available, glsl_type::bvec4_type), \ - \ - _##NAME(fp64, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type), \ - _##NAME(int64_avail, glsl_type::int64_t_type), \ - _##NAME(int64_avail, glsl_type::i64vec2_type), \ - _##NAME(int64_avail, glsl_type::i64vec3_type), \ - _##NAME(int64_avail, glsl_type::i64vec4_type), \ - _##NAME(int64_avail, glsl_type::uint64_t_type), \ - _##NAME(int64_avail, glsl_type::u64vec2_type), \ - _##NAME(int64_avail, glsl_type::u64vec3_type), \ - _##NAME(int64_avail, glsl_type::u64vec4_type), \ - NULL); - -#define FIUD2_MIXED(NAME) \ - add_function(#NAME, \ - _##NAME(always_available, glsl_type::float_type, glsl_type::float_type), \ - _##NAME(always_available, glsl_type::vec2_type, glsl_type::float_type), \ - _##NAME(always_available, glsl_type::vec3_type, glsl_type::float_type), \ - _##NAME(always_available, glsl_type::vec4_type, glsl_type::float_type), \ - \ - _##NAME(always_available, glsl_type::vec2_type, glsl_type::vec2_type), \ - _##NAME(always_available, glsl_type::vec3_type, glsl_type::vec3_type), \ - _##NAME(always_available, glsl_type::vec4_type, glsl_type::vec4_type), \ - \ - _##NAME(always_available, glsl_type::int_type, glsl_type::int_type), \ - _##NAME(always_available, glsl_type::ivec2_type, glsl_type::int_type), \ - _##NAME(always_available, glsl_type::ivec3_type, glsl_type::int_type), \ - _##NAME(always_available, glsl_type::ivec4_type, glsl_type::int_type), \ - \ - _##NAME(always_available, glsl_type::ivec2_type, glsl_type::ivec2_type), \ - _##NAME(always_available, glsl_type::ivec3_type, glsl_type::ivec3_type), \ - _##NAME(always_available, glsl_type::ivec4_type, glsl_type::ivec4_type), \ - \ - _##NAME(v130_or_gpu_shader4, glsl_type::uint_type, glsl_type::uint_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec2_type, glsl_type::uint_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec3_type, glsl_type::uint_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec4_type, glsl_type::uint_type), \ - \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec2_type, glsl_type::uvec2_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec3_type, glsl_type::uvec3_type), \ - _##NAME(v130_or_gpu_shader4, glsl_type::uvec4_type, glsl_type::uvec4_type), \ - \ - _##NAME(fp64, glsl_type::double_type, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec2_type, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec3_type, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec4_type, glsl_type::double_type), \ - _##NAME(fp64, glsl_type::dvec2_type, glsl_type::dvec2_type), \ - _##NAME(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), \ - _##NAME(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), \ - \ - _##NAME(int64_avail, glsl_type::int64_t_type, glsl_type::int64_t_type), \ - _##NAME(int64_avail, glsl_type::i64vec2_type, glsl_type::int64_t_type), \ - _##NAME(int64_avail, glsl_type::i64vec3_type, glsl_type::int64_t_type), \ - _##NAME(int64_avail, glsl_type::i64vec4_type, glsl_type::int64_t_type), \ - _##NAME(int64_avail, glsl_type::i64vec2_type, glsl_type::i64vec2_type), \ - _##NAME(int64_avail, glsl_type::i64vec3_type, glsl_type::i64vec3_type), \ - _##NAME(int64_avail, glsl_type::i64vec4_type, glsl_type::i64vec4_type), \ - _##NAME(int64_avail, glsl_type::uint64_t_type, glsl_type::uint64_t_type), \ - _##NAME(int64_avail, glsl_type::u64vec2_type, glsl_type::uint64_t_type), \ - _##NAME(int64_avail, glsl_type::u64vec3_type, glsl_type::uint64_t_type), \ - _##NAME(int64_avail, glsl_type::u64vec4_type, glsl_type::uint64_t_type), \ - _##NAME(int64_avail, glsl_type::u64vec2_type, glsl_type::u64vec2_type), \ - _##NAME(int64_avail, glsl_type::u64vec3_type, glsl_type::u64vec3_type), \ - _##NAME(int64_avail, glsl_type::u64vec4_type, glsl_type::u64vec4_type), \ - NULL); - - F(radians) - F(degrees) - F(sin) - F(cos) - F(tan) - F(asin) - F(acos) - - add_function("atan", - _atan(glsl_type::float_type), - _atan(glsl_type::vec2_type), - _atan(glsl_type::vec3_type), - _atan(glsl_type::vec4_type), - _atan2(glsl_type::float_type), - _atan2(glsl_type::vec2_type), - _atan2(glsl_type::vec3_type), - _atan2(glsl_type::vec4_type), - NULL); - - F(sinh) - F(cosh) - F(tanh) - F(asinh) - F(acosh) - F(atanh) - F(pow) - F(exp) - F(log) - F(exp2) - F(log2) - FD(sqrt) - FD(inversesqrt) - FI64(abs) - FI64(sign) - FD(floor) - FD130(trunc) - FD130GS4(round) - FD130(roundEven) - FD(ceil) - FD(fract) - - add_function("truncate", - _truncate(gpu_shader4, glsl_type::float_type), - _truncate(gpu_shader4, glsl_type::vec2_type), - _truncate(gpu_shader4, glsl_type::vec3_type), - _truncate(gpu_shader4, glsl_type::vec4_type), - NULL); - - - add_function("mod", - _mod(always_available, glsl_type::float_type, glsl_type::float_type), - _mod(always_available, glsl_type::vec2_type, glsl_type::float_type), - _mod(always_available, glsl_type::vec3_type, glsl_type::float_type), - _mod(always_available, glsl_type::vec4_type, glsl_type::float_type), - - _mod(always_available, glsl_type::vec2_type, glsl_type::vec2_type), - _mod(always_available, glsl_type::vec3_type, glsl_type::vec3_type), - _mod(always_available, glsl_type::vec4_type, glsl_type::vec4_type), - - _mod(fp64, glsl_type::double_type, glsl_type::double_type), - _mod(fp64, glsl_type::dvec2_type, glsl_type::double_type), - _mod(fp64, glsl_type::dvec3_type, glsl_type::double_type), - _mod(fp64, glsl_type::dvec4_type, glsl_type::double_type), - - _mod(fp64, glsl_type::dvec2_type, glsl_type::dvec2_type), - _mod(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), - _mod(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), - NULL); - - FD130(modf) - - FIUD2_MIXED(min) - FIUD2_MIXED(max) - FIUD2_MIXED(clamp) - - add_function("mix", - _mix_lrp(always_available, glsl_type::float_type, glsl_type::float_type), - _mix_lrp(always_available, glsl_type::vec2_type, glsl_type::float_type), - _mix_lrp(always_available, glsl_type::vec3_type, glsl_type::float_type), - _mix_lrp(always_available, glsl_type::vec4_type, glsl_type::float_type), - - _mix_lrp(always_available, glsl_type::vec2_type, glsl_type::vec2_type), - _mix_lrp(always_available, glsl_type::vec3_type, glsl_type::vec3_type), - _mix_lrp(always_available, glsl_type::vec4_type, glsl_type::vec4_type), - - _mix_lrp(fp64, glsl_type::double_type, glsl_type::double_type), - _mix_lrp(fp64, glsl_type::dvec2_type, glsl_type::double_type), - _mix_lrp(fp64, glsl_type::dvec3_type, glsl_type::double_type), - _mix_lrp(fp64, glsl_type::dvec4_type, glsl_type::double_type), - - _mix_lrp(fp64, glsl_type::dvec2_type, glsl_type::dvec2_type), - _mix_lrp(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), - _mix_lrp(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), - - _mix_sel(v130, glsl_type::float_type, glsl_type::bool_type), - _mix_sel(v130, glsl_type::vec2_type, glsl_type::bvec2_type), - _mix_sel(v130, glsl_type::vec3_type, glsl_type::bvec3_type), - _mix_sel(v130, glsl_type::vec4_type, glsl_type::bvec4_type), - - _mix_sel(fp64, glsl_type::double_type, glsl_type::bool_type), - _mix_sel(fp64, glsl_type::dvec2_type, glsl_type::bvec2_type), - _mix_sel(fp64, glsl_type::dvec3_type, glsl_type::bvec3_type), - _mix_sel(fp64, glsl_type::dvec4_type, glsl_type::bvec4_type), - - _mix_sel(shader_integer_mix, glsl_type::int_type, glsl_type::bool_type), - _mix_sel(shader_integer_mix, glsl_type::ivec2_type, glsl_type::bvec2_type), - _mix_sel(shader_integer_mix, glsl_type::ivec3_type, glsl_type::bvec3_type), - _mix_sel(shader_integer_mix, glsl_type::ivec4_type, glsl_type::bvec4_type), - - _mix_sel(shader_integer_mix, glsl_type::uint_type, glsl_type::bool_type), - _mix_sel(shader_integer_mix, glsl_type::uvec2_type, glsl_type::bvec2_type), - _mix_sel(shader_integer_mix, glsl_type::uvec3_type, glsl_type::bvec3_type), - _mix_sel(shader_integer_mix, glsl_type::uvec4_type, glsl_type::bvec4_type), - - _mix_sel(shader_integer_mix, glsl_type::bool_type, glsl_type::bool_type), - _mix_sel(shader_integer_mix, glsl_type::bvec2_type, glsl_type::bvec2_type), - _mix_sel(shader_integer_mix, glsl_type::bvec3_type, glsl_type::bvec3_type), - _mix_sel(shader_integer_mix, glsl_type::bvec4_type, glsl_type::bvec4_type), - - _mix_sel(int64_avail, glsl_type::int64_t_type, glsl_type::bool_type), - _mix_sel(int64_avail, glsl_type::i64vec2_type, glsl_type::bvec2_type), - _mix_sel(int64_avail, glsl_type::i64vec3_type, glsl_type::bvec3_type), - _mix_sel(int64_avail, glsl_type::i64vec4_type, glsl_type::bvec4_type), - - _mix_sel(int64_avail, glsl_type::uint64_t_type, glsl_type::bool_type), - _mix_sel(int64_avail, glsl_type::u64vec2_type, glsl_type::bvec2_type), - _mix_sel(int64_avail, glsl_type::u64vec3_type, glsl_type::bvec3_type), - _mix_sel(int64_avail, glsl_type::u64vec4_type, glsl_type::bvec4_type), - NULL); - - add_function("step", - _step(always_available, glsl_type::float_type, glsl_type::float_type), - _step(always_available, glsl_type::float_type, glsl_type::vec2_type), - _step(always_available, glsl_type::float_type, glsl_type::vec3_type), - _step(always_available, glsl_type::float_type, glsl_type::vec4_type), - - _step(always_available, glsl_type::vec2_type, glsl_type::vec2_type), - _step(always_available, glsl_type::vec3_type, glsl_type::vec3_type), - _step(always_available, glsl_type::vec4_type, glsl_type::vec4_type), - _step(fp64, glsl_type::double_type, glsl_type::double_type), - _step(fp64, glsl_type::double_type, glsl_type::dvec2_type), - _step(fp64, glsl_type::double_type, glsl_type::dvec3_type), - _step(fp64, glsl_type::double_type, glsl_type::dvec4_type), - - _step(fp64, glsl_type::dvec2_type, glsl_type::dvec2_type), - _step(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), - _step(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), - NULL); - - add_function("smoothstep", - _smoothstep(always_available, glsl_type::float_type, glsl_type::float_type), - _smoothstep(always_available, glsl_type::float_type, glsl_type::vec2_type), - _smoothstep(always_available, glsl_type::float_type, glsl_type::vec3_type), - _smoothstep(always_available, glsl_type::float_type, glsl_type::vec4_type), - - _smoothstep(always_available, glsl_type::vec2_type, glsl_type::vec2_type), - _smoothstep(always_available, glsl_type::vec3_type, glsl_type::vec3_type), - _smoothstep(always_available, glsl_type::vec4_type, glsl_type::vec4_type), - _smoothstep(fp64, glsl_type::double_type, glsl_type::double_type), - _smoothstep(fp64, glsl_type::double_type, glsl_type::dvec2_type), - _smoothstep(fp64, glsl_type::double_type, glsl_type::dvec3_type), - _smoothstep(fp64, glsl_type::double_type, glsl_type::dvec4_type), - - _smoothstep(fp64, glsl_type::dvec2_type, glsl_type::dvec2_type), - _smoothstep(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), - _smoothstep(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), - NULL); - - FD130(isnan) - FD130(isinf) - - F(floatBitsToInt) - F(floatBitsToUint) - add_function("intBitsToFloat", - _intBitsToFloat(glsl_type::int_type), - _intBitsToFloat(glsl_type::ivec2_type), - _intBitsToFloat(glsl_type::ivec3_type), - _intBitsToFloat(glsl_type::ivec4_type), - NULL); - add_function("uintBitsToFloat", - _uintBitsToFloat(glsl_type::uint_type), - _uintBitsToFloat(glsl_type::uvec2_type), - _uintBitsToFloat(glsl_type::uvec3_type), - _uintBitsToFloat(glsl_type::uvec4_type), - NULL); - - add_function("doubleBitsToInt64", - _doubleBitsToInt64(int64_fp64, glsl_type::double_type), - _doubleBitsToInt64(int64_fp64, glsl_type::dvec2_type), - _doubleBitsToInt64(int64_fp64, glsl_type::dvec3_type), - _doubleBitsToInt64(int64_fp64, glsl_type::dvec4_type), - NULL); - - add_function("doubleBitsToUint64", - _doubleBitsToUint64(int64_fp64, glsl_type::double_type), - _doubleBitsToUint64(int64_fp64, glsl_type::dvec2_type), - _doubleBitsToUint64(int64_fp64, glsl_type::dvec3_type), - _doubleBitsToUint64(int64_fp64, glsl_type::dvec4_type), - NULL); - - add_function("int64BitsToDouble", - _int64BitsToDouble(int64_fp64, glsl_type::int64_t_type), - _int64BitsToDouble(int64_fp64, glsl_type::i64vec2_type), - _int64BitsToDouble(int64_fp64, glsl_type::i64vec3_type), - _int64BitsToDouble(int64_fp64, glsl_type::i64vec4_type), - NULL); - - add_function("uint64BitsToDouble", - _uint64BitsToDouble(int64_fp64, glsl_type::uint64_t_type), - _uint64BitsToDouble(int64_fp64, glsl_type::u64vec2_type), - _uint64BitsToDouble(int64_fp64, glsl_type::u64vec3_type), - _uint64BitsToDouble(int64_fp64, glsl_type::u64vec4_type), - NULL); - - add_function("packUnorm2x16", _packUnorm2x16(shader_packing_or_es3_or_gpu_shader5), NULL); - add_function("packSnorm2x16", _packSnorm2x16(shader_packing_or_es3), NULL); - add_function("packUnorm4x8", _packUnorm4x8(shader_packing_or_es31_or_gpu_shader5), NULL); - add_function("packSnorm4x8", _packSnorm4x8(shader_packing_or_es31_or_gpu_shader5), NULL); - add_function("unpackUnorm2x16", _unpackUnorm2x16(shader_packing_or_es3_or_gpu_shader5), NULL); - add_function("unpackSnorm2x16", _unpackSnorm2x16(shader_packing_or_es3), NULL); - add_function("unpackUnorm4x8", _unpackUnorm4x8(shader_packing_or_es31_or_gpu_shader5), NULL); - add_function("unpackSnorm4x8", _unpackSnorm4x8(shader_packing_or_es31_or_gpu_shader5), NULL); - add_function("packHalf2x16", _packHalf2x16(shader_packing_or_es3), NULL); - add_function("unpackHalf2x16", _unpackHalf2x16(shader_packing_or_es3), NULL); - add_function("packDouble2x32", _packDouble2x32(fp64), NULL); - add_function("unpackDouble2x32", _unpackDouble2x32(fp64), NULL); - - add_function("packInt2x32", _packInt2x32(int64_avail), NULL); - add_function("unpackInt2x32", _unpackInt2x32(int64_avail), NULL); - add_function("packUint2x32", _packUint2x32(int64_avail), NULL); - add_function("unpackUint2x32", _unpackUint2x32(int64_avail), NULL); - - FD(length) - FD(distance) - FD(dot) - - add_function("cross", _cross(always_available, glsl_type::vec3_type), - _cross(fp64, glsl_type::dvec3_type), NULL); - - FD(normalize) - add_function("ftransform", _ftransform(), NULL); - FD(faceforward) - FD(reflect) - FD(refract) - // ... - add_function("matrixCompMult", - _matrixCompMult(always_available, glsl_type::mat2_type), - _matrixCompMult(always_available, glsl_type::mat3_type), - _matrixCompMult(always_available, glsl_type::mat4_type), - _matrixCompMult(always_available, glsl_type::mat2x3_type), - _matrixCompMult(always_available, glsl_type::mat2x4_type), - _matrixCompMult(always_available, glsl_type::mat3x2_type), - _matrixCompMult(always_available, glsl_type::mat3x4_type), - _matrixCompMult(always_available, glsl_type::mat4x2_type), - _matrixCompMult(always_available, glsl_type::mat4x3_type), - _matrixCompMult(fp64, glsl_type::dmat2_type), - _matrixCompMult(fp64, glsl_type::dmat3_type), - _matrixCompMult(fp64, glsl_type::dmat4_type), - _matrixCompMult(fp64, glsl_type::dmat2x3_type), - _matrixCompMult(fp64, glsl_type::dmat2x4_type), - _matrixCompMult(fp64, glsl_type::dmat3x2_type), - _matrixCompMult(fp64, glsl_type::dmat3x4_type), - _matrixCompMult(fp64, glsl_type::dmat4x2_type), - _matrixCompMult(fp64, glsl_type::dmat4x3_type), - NULL); - add_function("outerProduct", - _outerProduct(v120, glsl_type::mat2_type), - _outerProduct(v120, glsl_type::mat3_type), - _outerProduct(v120, glsl_type::mat4_type), - _outerProduct(v120, glsl_type::mat2x3_type), - _outerProduct(v120, glsl_type::mat2x4_type), - _outerProduct(v120, glsl_type::mat3x2_type), - _outerProduct(v120, glsl_type::mat3x4_type), - _outerProduct(v120, glsl_type::mat4x2_type), - _outerProduct(v120, glsl_type::mat4x3_type), - _outerProduct(fp64, glsl_type::dmat2_type), - _outerProduct(fp64, glsl_type::dmat3_type), - _outerProduct(fp64, glsl_type::dmat4_type), - _outerProduct(fp64, glsl_type::dmat2x3_type), - _outerProduct(fp64, glsl_type::dmat2x4_type), - _outerProduct(fp64, glsl_type::dmat3x2_type), - _outerProduct(fp64, glsl_type::dmat3x4_type), - _outerProduct(fp64, glsl_type::dmat4x2_type), - _outerProduct(fp64, glsl_type::dmat4x3_type), - NULL); - add_function("determinant", - _determinant_mat2(v120, glsl_type::mat2_type), - _determinant_mat3(v120, glsl_type::mat3_type), - _determinant_mat4(v120, glsl_type::mat4_type), - _determinant_mat2(fp64, glsl_type::dmat2_type), - _determinant_mat3(fp64, glsl_type::dmat3_type), - _determinant_mat4(fp64, glsl_type::dmat4_type), - - NULL); - add_function("inverse", - _inverse_mat2(v140_or_es3, glsl_type::mat2_type), - _inverse_mat3(v140_or_es3, glsl_type::mat3_type), - _inverse_mat4(v140_or_es3, glsl_type::mat4_type), - _inverse_mat2(fp64, glsl_type::dmat2_type), - _inverse_mat3(fp64, glsl_type::dmat3_type), - _inverse_mat4(fp64, glsl_type::dmat4_type), - NULL); - add_function("transpose", - _transpose(v120, glsl_type::mat2_type), - _transpose(v120, glsl_type::mat3_type), - _transpose(v120, glsl_type::mat4_type), - _transpose(v120, glsl_type::mat2x3_type), - _transpose(v120, glsl_type::mat2x4_type), - _transpose(v120, glsl_type::mat3x2_type), - _transpose(v120, glsl_type::mat3x4_type), - _transpose(v120, glsl_type::mat4x2_type), - _transpose(v120, glsl_type::mat4x3_type), - _transpose(fp64, glsl_type::dmat2_type), - _transpose(fp64, glsl_type::dmat3_type), - _transpose(fp64, glsl_type::dmat4_type), - _transpose(fp64, glsl_type::dmat2x3_type), - _transpose(fp64, glsl_type::dmat2x4_type), - _transpose(fp64, glsl_type::dmat3x2_type), - _transpose(fp64, glsl_type::dmat3x4_type), - _transpose(fp64, glsl_type::dmat4x2_type), - _transpose(fp64, glsl_type::dmat4x3_type), - NULL); - FIUD_VEC(lessThan) - FIUD_VEC(lessThanEqual) - FIUD_VEC(greaterThan) - FIUD_VEC(greaterThanEqual) - FIUBD_VEC(notEqual) - FIUBD_VEC(equal) - - add_function("any", - _any(glsl_type::bvec2_type), - _any(glsl_type::bvec3_type), - _any(glsl_type::bvec4_type), - NULL); - - add_function("all", - _all(glsl_type::bvec2_type), - _all(glsl_type::bvec3_type), - _all(glsl_type::bvec4_type), - NULL); - - add_function("not", - _not(glsl_type::bvec2_type), - _not(glsl_type::bvec3_type), - _not(glsl_type::bvec4_type), - NULL); - - add_function("textureSize", - _textureSize(v130, glsl_type::int_type, glsl_type::sampler1D_type), - _textureSize(v130, glsl_type::int_type, glsl_type::isampler1D_type), - _textureSize(v130, glsl_type::int_type, glsl_type::usampler1D_type), - - _textureSize(v130, glsl_type::ivec2_type, glsl_type::sampler2D_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::isampler2D_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::usampler2D_type), - - _textureSize(v130, glsl_type::ivec3_type, glsl_type::sampler3D_type), - _textureSize(v130, glsl_type::ivec3_type, glsl_type::isampler3D_type), - _textureSize(v130, glsl_type::ivec3_type, glsl_type::usampler3D_type), - - _textureSize(v130, glsl_type::ivec2_type, glsl_type::samplerCube_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::isamplerCube_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::usamplerCube_type), - - _textureSize(v130, glsl_type::int_type, glsl_type::sampler1DShadow_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::sampler2DShadow_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::samplerCubeShadow_type), - - _textureSize(v130, glsl_type::ivec2_type, glsl_type::sampler1DArray_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::isampler1DArray_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::usampler1DArray_type), - _textureSize(v130, glsl_type::ivec3_type, glsl_type::sampler2DArray_type), - _textureSize(v130, glsl_type::ivec3_type, glsl_type::isampler2DArray_type), - _textureSize(v130, glsl_type::ivec3_type, glsl_type::usampler2DArray_type), - - _textureSize(v130, glsl_type::ivec2_type, glsl_type::sampler1DArrayShadow_type), - _textureSize(v130, glsl_type::ivec3_type, glsl_type::sampler2DArrayShadow_type), - - _textureSize(texture_cube_map_array, glsl_type::ivec3_type, glsl_type::samplerCubeArray_type), - _textureSize(texture_cube_map_array, glsl_type::ivec3_type, glsl_type::isamplerCubeArray_type), - _textureSize(texture_cube_map_array, glsl_type::ivec3_type, glsl_type::usamplerCubeArray_type), - _textureSize(texture_cube_map_array, glsl_type::ivec3_type, glsl_type::samplerCubeArrayShadow_type), - - _textureSize(v130, glsl_type::ivec2_type, glsl_type::sampler2DRect_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::isampler2DRect_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::usampler2DRect_type), - _textureSize(v130, glsl_type::ivec2_type, glsl_type::sampler2DRectShadow_type), - - _textureSize(texture_buffer, glsl_type::int_type, glsl_type::samplerBuffer_type), - _textureSize(texture_buffer, glsl_type::int_type, glsl_type::isamplerBuffer_type), - _textureSize(texture_buffer, glsl_type::int_type, glsl_type::usamplerBuffer_type), - _textureSize(texture_multisample, glsl_type::ivec2_type, glsl_type::sampler2DMS_type), - _textureSize(texture_multisample, glsl_type::ivec2_type, glsl_type::isampler2DMS_type), - _textureSize(texture_multisample, glsl_type::ivec2_type, glsl_type::usampler2DMS_type), - - _textureSize(texture_multisample_array, glsl_type::ivec3_type, glsl_type::sampler2DMSArray_type), - _textureSize(texture_multisample_array, glsl_type::ivec3_type, glsl_type::isampler2DMSArray_type), - _textureSize(texture_multisample_array, glsl_type::ivec3_type, glsl_type::usampler2DMSArray_type), - - _textureSize(texture_external_es3, glsl_type::ivec2_type, glsl_type::samplerExternalOES_type), - NULL); - - add_function("textureSize1D", - _textureSize(gpu_shader4, glsl_type::int_type, glsl_type::sampler1D_type), - _textureSize(gpu_shader4_integer, glsl_type::int_type, glsl_type::isampler1D_type), - _textureSize(gpu_shader4_integer, glsl_type::int_type, glsl_type::usampler1D_type), - NULL); - - add_function("textureSize2D", - _textureSize(gpu_shader4, glsl_type::ivec2_type, glsl_type::sampler2D_type), - _textureSize(gpu_shader4_integer, glsl_type::ivec2_type, glsl_type::isampler2D_type), - _textureSize(gpu_shader4_integer, glsl_type::ivec2_type, glsl_type::usampler2D_type), - NULL); - - add_function("textureSize3D", - _textureSize(gpu_shader4, glsl_type::ivec3_type, glsl_type::sampler3D_type), - _textureSize(gpu_shader4_integer, glsl_type::ivec3_type, glsl_type::isampler3D_type), - _textureSize(gpu_shader4_integer, glsl_type::ivec3_type, glsl_type::usampler3D_type), - NULL); - - add_function("textureSizeCube", - _textureSize(gpu_shader4, glsl_type::ivec2_type, glsl_type::samplerCube_type), - _textureSize(gpu_shader4_integer, glsl_type::ivec2_type, glsl_type::isamplerCube_type), - _textureSize(gpu_shader4_integer, glsl_type::ivec2_type, glsl_type::usamplerCube_type), - NULL); - - add_function("textureSize1DArray", - _textureSize(gpu_shader4_array, glsl_type::ivec2_type, glsl_type::sampler1DArray_type), - _textureSize(gpu_shader4_array_integer, glsl_type::ivec2_type, glsl_type::isampler1DArray_type), - _textureSize(gpu_shader4_array_integer, glsl_type::ivec2_type, glsl_type::usampler1DArray_type), - NULL); - - add_function("textureSize2DArray", - _textureSize(gpu_shader4_array, glsl_type::ivec3_type, glsl_type::sampler2DArray_type), - _textureSize(gpu_shader4_array_integer, glsl_type::ivec3_type, glsl_type::isampler2DArray_type), - _textureSize(gpu_shader4_array_integer, glsl_type::ivec3_type, glsl_type::usampler2DArray_type), - NULL); - - add_function("textureSize2DRect", - _textureSize(gpu_shader4_rect, glsl_type::ivec2_type, glsl_type::sampler2DRect_type), - _textureSize(gpu_shader4_rect_integer, glsl_type::ivec2_type, glsl_type::isampler2DRect_type), - _textureSize(gpu_shader4_rect_integer, glsl_type::ivec2_type, glsl_type::usampler2DRect_type), - NULL); - - add_function("textureSizeBuffer", - _textureSize(gpu_shader4_tbo, glsl_type::int_type, glsl_type::samplerBuffer_type), - _textureSize(gpu_shader4_tbo_integer, glsl_type::int_type, glsl_type::isamplerBuffer_type), - _textureSize(gpu_shader4_tbo_integer, glsl_type::int_type, glsl_type::usamplerBuffer_type), - NULL); - - add_function("textureSamples", - _textureSamples(shader_samples, glsl_type::sampler2DMS_type), - _textureSamples(shader_samples, glsl_type::isampler2DMS_type), - _textureSamples(shader_samples, glsl_type::usampler2DMS_type), - - _textureSamples(shader_samples, glsl_type::sampler2DMSArray_type), - _textureSamples(shader_samples, glsl_type::isampler2DMSArray_type), - _textureSamples(shader_samples, glsl_type::usampler2DMSArray_type), - NULL); - - add_function("texture", - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - - _texture(ir_tex, texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_tex, texture_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_tex, texture_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - /* samplerCubeArrayShadow is special; it has an extra parameter - * for the shadow comparator since there is no vec5 type. - */ - _textureCubeArrayShadow(ir_tex, texture_cube_map_array, glsl_type::samplerCubeArrayShadow_type), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type), - - _texture(ir_tex, texture_external_es3, glsl_type::vec4_type, glsl_type::samplerExternalOES_type, glsl_type::vec2_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - - _texture(ir_txb, derivatives_texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_txb, derivatives_texture_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_txb, derivatives_texture_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type), - - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - _texture(ir_tex, v130_or_gpu_shader4_and_tex_shadow_lod, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - _texture(ir_txb, v130_or_gpu_shader4_and_tex_shadow_lod, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - - _textureCubeArrayShadow(ir_tex, v130_or_gpu_shader4_and_tex_cube_map_array, glsl_type::samplerCubeArrayShadow_type), - _textureCubeArrayShadow(ir_txb, v130_or_gpu_shader4_and_tex_cube_map_array, glsl_type::samplerCubeArrayShadow_type), - NULL); - - add_function("textureLod", - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - - _texture(ir_txl, texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_txl, texture_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_txl, texture_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type), - - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - _texture(ir_txl, v130_or_gpu_shader4_and_tex_shadow_lod, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - _texture(ir_txl, v130_or_gpu_shader4_and_tex_shadow_lod, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type), - _textureCubeArrayShadow(ir_txl, v130_or_gpu_shader4_and_tex_cube_map_array, glsl_type::samplerCubeArrayShadow_type), - NULL); - - add_function("textureOffset", - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - /* The next one was forgotten in GLSL 1.30 spec. It's from - * EXT_gpu_shader4 originally. It was added in 4.30 with the - * wrong syntax. This was corrected in 4.40. 4.30 indicates - * that it was intended to be included previously, so allow it - * in 1.30. - */ - _texture(ir_tex, v130_desktop, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, v130_or_gpu_shader4_and_tex_shadow_lod, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET), - _texture(ir_txb, v130_or_gpu_shader4_and_tex_shadow_lod, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET), - NULL); - - add_function("texture1DOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - NULL); - - add_function("texture2DOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("texture3DOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("texture2DRectOffset", - _texture(ir_tex, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("shadow2DRectOffset", - _texture(ir_tex, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow1DOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow2DOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("texture1DArrayOffset", - _texture(ir_tex, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("texture2DArrayOffset", - _texture(ir_tex, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow1DArrayOffset", - _texture(ir_tex, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txb, gpu_shader4_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow2DArrayOffset", - _texture(ir_tex, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET), - NULL); - - add_function("textureProj", - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, texture_external_es3, glsl_type::vec4_type, glsl_type::samplerExternalOES_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, texture_external_es3, glsl_type::vec4_type, glsl_type::samplerExternalOES_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texelFetch", - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::int_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::int_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::int_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::ivec2_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::ivec3_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::ivec3_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::ivec3_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::ivec2_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::ivec2_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::ivec3_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::ivec3_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::ivec3_type), - - _texelFetch(texture_buffer, glsl_type::vec4_type, glsl_type::samplerBuffer_type, glsl_type::int_type), - _texelFetch(texture_buffer, glsl_type::ivec4_type, glsl_type::isamplerBuffer_type, glsl_type::int_type), - _texelFetch(texture_buffer, glsl_type::uvec4_type, glsl_type::usamplerBuffer_type, glsl_type::int_type), - - _texelFetch(texture_multisample, glsl_type::vec4_type, glsl_type::sampler2DMS_type, glsl_type::ivec2_type), - _texelFetch(texture_multisample, glsl_type::ivec4_type, glsl_type::isampler2DMS_type, glsl_type::ivec2_type), - _texelFetch(texture_multisample, glsl_type::uvec4_type, glsl_type::usampler2DMS_type, glsl_type::ivec2_type), - - _texelFetch(texture_multisample_array, glsl_type::vec4_type, glsl_type::sampler2DMSArray_type, glsl_type::ivec3_type), - _texelFetch(texture_multisample_array, glsl_type::ivec4_type, glsl_type::isampler2DMSArray_type, glsl_type::ivec3_type), - _texelFetch(texture_multisample_array, glsl_type::uvec4_type, glsl_type::usampler2DMSArray_type, glsl_type::ivec3_type), - - _texelFetch(texture_external_es3, glsl_type::vec4_type, glsl_type::samplerExternalOES_type, glsl_type::ivec2_type), - - NULL); - - add_function("texelFetch1D", - _texelFetch(gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::int_type), - _texelFetch(gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::int_type), - _texelFetch(gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::int_type), - NULL); - - add_function("texelFetch2D", - _texelFetch(gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::ivec2_type), - NULL); - - add_function("texelFetch3D", - _texelFetch(gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::ivec3_type), - _texelFetch(gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::ivec3_type), - _texelFetch(gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::ivec3_type), - NULL); - - add_function("texelFetch2DRect", - _texelFetch(gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::ivec2_type), - NULL); - - add_function("texelFetch1DArray", - _texelFetch(gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::ivec2_type), - NULL); - - add_function("texelFetch2DArray", - _texelFetch(gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::ivec3_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::ivec3_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::ivec3_type), - NULL); - - add_function("texelFetchBuffer", - _texelFetch(gpu_shader4_tbo, glsl_type::vec4_type, glsl_type::samplerBuffer_type, glsl_type::int_type), - _texelFetch(gpu_shader4_tbo_integer, glsl_type::ivec4_type, glsl_type::isamplerBuffer_type, glsl_type::int_type), - _texelFetch(gpu_shader4_tbo_integer, glsl_type::uvec4_type, glsl_type::usamplerBuffer_type, glsl_type::int_type), - NULL); - - add_function("texelFetchOffset", - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::int_type, glsl_type::int_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::int_type, glsl_type::int_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::int_type, glsl_type::int_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::ivec2_type, glsl_type::int_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::ivec2_type, glsl_type::int_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::ivec2_type, glsl_type::int_type), - - _texelFetch(v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type), - _texelFetch(v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type), - - NULL); - - add_function("texelFetch1DOffset", - _texelFetch(gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::int_type, glsl_type::int_type), - _texelFetch(gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::int_type, glsl_type::int_type), - _texelFetch(gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::int_type, glsl_type::int_type), - NULL); - - add_function("texelFetch2DOffset", - _texelFetch(gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - NULL); - - add_function("texelFetch3DOffset", - _texelFetch(gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type), - _texelFetch(gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type), - _texelFetch(gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type), - NULL); - - add_function("texelFetch2DRectOffset", - _texelFetch(gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type), - NULL); - - add_function("texelFetch1DArrayOffset", - _texelFetch(gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::ivec2_type, glsl_type::int_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::ivec2_type, glsl_type::int_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::ivec2_type, glsl_type::int_type), - NULL); - - add_function("texelFetch2DArrayOffset", - _texelFetch(gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type), - _texelFetch(gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type), - NULL); - - add_function("textureProjOffset", - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_tex, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, v130_derivatives_only, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture1DProjOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture2DProjOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture3DProjOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow1DProjOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow2DProjOffset", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture2DRectProjOffset", - _texture(ir_tex, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow2DRectProjOffset", - _texture(ir_tex, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("textureLodOffset", - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, v130_or_gpu_shader4_and_tex_shadow_lod, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET), - NULL); - - add_function("texture1DLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - NULL); - - add_function("texture2DLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("texture3DLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow1DLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow2DLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("texture1DArrayLodOffset", - _texture(ir_txl, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("texture2DArrayLodOffset", - _texture(ir_txl, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow1DArrayLodOffset", - _texture(ir_txl, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("textureProjLod", - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("textureProjLodOffset", - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture1DProjLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture2DProjLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture3DProjLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow1DProjLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow2DProjLodOffset", - _texture(ir_txl, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("textureGrad", - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - - _texture(ir_txd, texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_txd, texture_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_txd, texture_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - NULL); - - add_function("textureGradOffset", - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET), - NULL); - - add_function("texture1DGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET), - NULL); - - add_function("texture2DGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("texture3DGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("texture2DRectGradOffset", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("shadow2DRectGradOffset", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow1DGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow2DGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("texture1DArrayGradOffset", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET), - NULL); - - add_function("texture2DArrayGradOffset", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow1DArrayGradOffset", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("shadow2DArrayGradOffset", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET), - NULL); - - add_function("textureProjGrad", - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("textureProjGradOffset", - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, v130, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture1DProjGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture2DProjGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture3DProjGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("texture2DRectProjGradOffset", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow2DRectProjGradOffset", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow1DProjGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("shadow2DProjGradOffset", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT | TEX_OFFSET), - NULL); - - add_function("EmitVertex", _EmitVertex(), NULL); - add_function("EndPrimitive", _EndPrimitive(), NULL); - add_function("EmitStreamVertex", - _EmitStreamVertex(gs_streams, glsl_type::uint_type), - _EmitStreamVertex(gs_streams, glsl_type::int_type), - NULL); - add_function("EndStreamPrimitive", - _EndStreamPrimitive(gs_streams, glsl_type::uint_type), - _EndStreamPrimitive(gs_streams, glsl_type::int_type), - NULL); - add_function("barrier", _barrier(), NULL); - - add_function("textureQueryLOD", - _textureQueryLod(texture_query_lod, glsl_type::sampler1D_type, glsl_type::float_type), - _textureQueryLod(texture_query_lod, glsl_type::isampler1D_type, glsl_type::float_type), - _textureQueryLod(texture_query_lod, glsl_type::usampler1D_type, glsl_type::float_type), - - _textureQueryLod(texture_query_lod, glsl_type::sampler2D_type, glsl_type::vec2_type), - _textureQueryLod(texture_query_lod, glsl_type::isampler2D_type, glsl_type::vec2_type), - _textureQueryLod(texture_query_lod, glsl_type::usampler2D_type, glsl_type::vec2_type), - - _textureQueryLod(texture_query_lod, glsl_type::sampler3D_type, glsl_type::vec3_type), - _textureQueryLod(texture_query_lod, glsl_type::isampler3D_type, glsl_type::vec3_type), - _textureQueryLod(texture_query_lod, glsl_type::usampler3D_type, glsl_type::vec3_type), - - _textureQueryLod(texture_query_lod, glsl_type::samplerCube_type, glsl_type::vec3_type), - _textureQueryLod(texture_query_lod, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _textureQueryLod(texture_query_lod, glsl_type::usamplerCube_type, glsl_type::vec3_type), - - _textureQueryLod(texture_query_lod, glsl_type::sampler1DArray_type, glsl_type::float_type), - _textureQueryLod(texture_query_lod, glsl_type::isampler1DArray_type, glsl_type::float_type), - _textureQueryLod(texture_query_lod, glsl_type::usampler1DArray_type, glsl_type::float_type), - - _textureQueryLod(texture_query_lod, glsl_type::sampler2DArray_type, glsl_type::vec2_type), - _textureQueryLod(texture_query_lod, glsl_type::isampler2DArray_type, glsl_type::vec2_type), - _textureQueryLod(texture_query_lod, glsl_type::usampler2DArray_type, glsl_type::vec2_type), - - _textureQueryLod(texture_query_lod, glsl_type::samplerCubeArray_type, glsl_type::vec3_type), - _textureQueryLod(texture_query_lod, glsl_type::isamplerCubeArray_type, glsl_type::vec3_type), - _textureQueryLod(texture_query_lod, glsl_type::usamplerCubeArray_type, glsl_type::vec3_type), - - _textureQueryLod(texture_query_lod, glsl_type::sampler1DShadow_type, glsl_type::float_type), - _textureQueryLod(texture_query_lod, glsl_type::sampler2DShadow_type, glsl_type::vec2_type), - _textureQueryLod(texture_query_lod, glsl_type::samplerCubeShadow_type, glsl_type::vec3_type), - _textureQueryLod(texture_query_lod, glsl_type::sampler1DArrayShadow_type, glsl_type::float_type), - _textureQueryLod(texture_query_lod, glsl_type::sampler2DArrayShadow_type, glsl_type::vec2_type), - _textureQueryLod(texture_query_lod, glsl_type::samplerCubeArrayShadow_type, glsl_type::vec3_type), - NULL); - - add_function("textureQueryLod", - _textureQueryLod(v400_derivatives_only, glsl_type::sampler1D_type, glsl_type::float_type), - _textureQueryLod(v400_derivatives_only, glsl_type::isampler1D_type, glsl_type::float_type), - _textureQueryLod(v400_derivatives_only, glsl_type::usampler1D_type, glsl_type::float_type), - - _textureQueryLod(v400_derivatives_only, glsl_type::sampler2D_type, glsl_type::vec2_type), - _textureQueryLod(v400_derivatives_only, glsl_type::isampler2D_type, glsl_type::vec2_type), - _textureQueryLod(v400_derivatives_only, glsl_type::usampler2D_type, glsl_type::vec2_type), - - _textureQueryLod(v400_derivatives_only, glsl_type::sampler3D_type, glsl_type::vec3_type), - _textureQueryLod(v400_derivatives_only, glsl_type::isampler3D_type, glsl_type::vec3_type), - _textureQueryLod(v400_derivatives_only, glsl_type::usampler3D_type, glsl_type::vec3_type), - - _textureQueryLod(v400_derivatives_only, glsl_type::samplerCube_type, glsl_type::vec3_type), - _textureQueryLod(v400_derivatives_only, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _textureQueryLod(v400_derivatives_only, glsl_type::usamplerCube_type, glsl_type::vec3_type), - - _textureQueryLod(v400_derivatives_only, glsl_type::sampler1DArray_type, glsl_type::float_type), - _textureQueryLod(v400_derivatives_only, glsl_type::isampler1DArray_type, glsl_type::float_type), - _textureQueryLod(v400_derivatives_only, glsl_type::usampler1DArray_type, glsl_type::float_type), - - _textureQueryLod(v400_derivatives_only, glsl_type::sampler2DArray_type, glsl_type::vec2_type), - _textureQueryLod(v400_derivatives_only, glsl_type::isampler2DArray_type, glsl_type::vec2_type), - _textureQueryLod(v400_derivatives_only, glsl_type::usampler2DArray_type, glsl_type::vec2_type), - - _textureQueryLod(v400_derivatives_only, glsl_type::samplerCubeArray_type, glsl_type::vec3_type), - _textureQueryLod(v400_derivatives_only, glsl_type::isamplerCubeArray_type, glsl_type::vec3_type), - _textureQueryLod(v400_derivatives_only, glsl_type::usamplerCubeArray_type, glsl_type::vec3_type), - - _textureQueryLod(v400_derivatives_only, glsl_type::sampler1DShadow_type, glsl_type::float_type), - _textureQueryLod(v400_derivatives_only, glsl_type::sampler2DShadow_type, glsl_type::vec2_type), - _textureQueryLod(v400_derivatives_only, glsl_type::samplerCubeShadow_type, glsl_type::vec3_type), - _textureQueryLod(v400_derivatives_only, glsl_type::sampler1DArrayShadow_type, glsl_type::float_type), - _textureQueryLod(v400_derivatives_only, glsl_type::sampler2DArrayShadow_type, glsl_type::vec2_type), - _textureQueryLod(v400_derivatives_only, glsl_type::samplerCubeArrayShadow_type, glsl_type::vec3_type), - NULL); - - add_function("textureQueryLevels", - _textureQueryLevels(texture_query_levels, glsl_type::sampler1D_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler2D_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler3D_type), - _textureQueryLevels(texture_query_levels, glsl_type::samplerCube_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler1DArray_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler2DArray_type), - _textureQueryLevels(texture_query_levels, glsl_type::samplerCubeArray_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler1DShadow_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler2DShadow_type), - _textureQueryLevels(texture_query_levels, glsl_type::samplerCubeShadow_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler1DArrayShadow_type), - _textureQueryLevels(texture_query_levels, glsl_type::sampler2DArrayShadow_type), - _textureQueryLevels(texture_query_levels, glsl_type::samplerCubeArrayShadow_type), - - _textureQueryLevels(texture_query_levels, glsl_type::isampler1D_type), - _textureQueryLevels(texture_query_levels, glsl_type::isampler2D_type), - _textureQueryLevels(texture_query_levels, glsl_type::isampler3D_type), - _textureQueryLevels(texture_query_levels, glsl_type::isamplerCube_type), - _textureQueryLevels(texture_query_levels, glsl_type::isampler1DArray_type), - _textureQueryLevels(texture_query_levels, glsl_type::isampler2DArray_type), - _textureQueryLevels(texture_query_levels, glsl_type::isamplerCubeArray_type), - - _textureQueryLevels(texture_query_levels, glsl_type::usampler1D_type), - _textureQueryLevels(texture_query_levels, glsl_type::usampler2D_type), - _textureQueryLevels(texture_query_levels, glsl_type::usampler3D_type), - _textureQueryLevels(texture_query_levels, glsl_type::usamplerCube_type), - _textureQueryLevels(texture_query_levels, glsl_type::usampler1DArray_type), - _textureQueryLevels(texture_query_levels, glsl_type::usampler2DArray_type), - _textureQueryLevels(texture_query_levels, glsl_type::usamplerCubeArray_type), - - NULL); - - add_function("textureSamplesIdenticalEXT", - _textureSamplesIdentical(texture_samples_identical, glsl_type::sampler2DMS_type, glsl_type::ivec2_type), - _textureSamplesIdentical(texture_samples_identical, glsl_type::isampler2DMS_type, glsl_type::ivec2_type), - _textureSamplesIdentical(texture_samples_identical, glsl_type::usampler2DMS_type, glsl_type::ivec2_type), - - _textureSamplesIdentical(texture_samples_identical_array, glsl_type::sampler2DMSArray_type, glsl_type::ivec3_type), - _textureSamplesIdentical(texture_samples_identical_array, glsl_type::isampler2DMSArray_type, glsl_type::ivec3_type), - _textureSamplesIdentical(texture_samples_identical_array, glsl_type::usampler2DMSArray_type, glsl_type::ivec3_type), - NULL); - - add_function("texture1D", - _texture(ir_tex, v110_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_txb, v110_derivatives_only_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - NULL); - - add_function("texture1DArray", - _texture(ir_tex, texture_array, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txb, texture_array_derivs_only,glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - NULL); - - add_function("texture1DProj", - _texture(ir_tex, v110_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_tex, v110_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v110_derivatives_only_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txb, v110_derivatives_only_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture1DLod", - _texture(ir_txl, v110_lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - NULL); - - add_function("texture1DArrayLod", - _texture(ir_txl, texture_array_lod, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - NULL); - - add_function("texture1DProjLod", - _texture(ir_txl, v110_lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txl, v110_lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture2D", - _texture(ir_tex, deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_txb, deprecated_texture_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - _texture(ir_tex, texture_external, glsl_type::vec4_type, glsl_type::samplerExternalOES_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DArray", - _texture(ir_tex, texture_array, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_tex, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txb, gpu_shader4_array_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - NULL); - - add_function("texture2DProj", - _texture(ir_tex, deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, deprecated_texture_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txb, deprecated_texture_derivatives_only, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, texture_external, glsl_type::vec4_type, glsl_type::samplerExternalOES_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, texture_external, glsl_type::vec4_type, glsl_type::samplerExternalOES_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture2DLod", - _texture(ir_txl, lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DArrayLod", - _texture(ir_txl, texture_array_lod, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txl, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - NULL); - - add_function("texture2DProjLod", - _texture(ir_txl, lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txl, lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture3D", - _texture(ir_tex, tex3d, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_txb, derivatives_tex3d, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - NULL); - - add_function("texture3DProj", - _texture(ir_tex, tex3d, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, derivatives_tex3d, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture3DLod", - _texture(ir_txl, tex3d_lod, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - NULL); - - add_function("texture3DProjLod", - _texture(ir_txl, tex3d_lod, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("textureCube", - _texture(ir_tex, deprecated_texture, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_txb, deprecated_texture_derivatives_only, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_tex, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - _texture(ir_txb, gpu_shader4_integer_derivs_only, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - NULL); - - add_function("textureCubeLod", - _texture(ir_txl, lod_deprecated_texture, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_txl, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - NULL); - - add_function("texture2DRect", - _texture(ir_tex, texture_rectangle, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DRectProj", - _texture(ir_tex, texture_rectangle, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, texture_rectangle, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_tex, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow1D", - _texture(ir_tex, v110_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - _texture(ir_txb, v110_derivatives_only_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow1DArray", - _texture(ir_tex, texture_array, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2D", - _texture(ir_tex, v110_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - _texture(ir_txb, v110_derivatives_only_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DArray", - _texture(ir_tex, texture_array, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - NULL); - - add_function("shadow1DProj", - _texture(ir_tex, v110_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v110_derivatives_only_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow2DArray", - _texture(ir_tex, texture_array, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - _texture(ir_txb, texture_array_derivs_only, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - NULL); - - add_function("shadowCube", - _texture(ir_tex, gpu_shader4, glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type), - _texture(ir_txb, gpu_shader4_derivs_only, glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type), - NULL); - - add_function("shadow2DProj", - _texture(ir_tex, v110_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txb, v110_derivatives_only_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow1DLod", - _texture(ir_txl, v110_lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DLod", - _texture(ir_txl, v110_lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow1DArrayLod", - _texture(ir_txl, texture_array_lod, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow1DProjLod", - _texture(ir_txl, v110_lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow2DProjLod", - _texture(ir_txl, v110_lod_deprecated_texture, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow2DRect", - _texture(ir_tex, texture_rectangle, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DRectProj", - _texture(ir_tex, texture_rectangle, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture1DGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - NULL); - - add_function("texture1DProjGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture2DGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DProjGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture3DGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - NULL); - - add_function("texture3DProjGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("textureCubeGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - NULL); - - add_function("shadow1DGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow1DProjGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow2DGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DProjGradARB", - _texture(ir_txd, shader_texture_lod, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture2DRectGradARB", - _texture(ir_txd, shader_texture_lod_and_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DRectProjGradARB", - _texture(ir_txd, shader_texture_lod_and_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, shader_texture_lod_and_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow2DRectGradARB", - _texture(ir_txd, shader_texture_lod_and_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DRectProjGradARB", - _texture(ir_txd, shader_texture_lod_and_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture4", - _texture(ir_tg4, texture_texture4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - NULL); - - add_function("texture1DGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type), - NULL); - - add_function("texture1DProjGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec2_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture1DArrayGrad", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DProjGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("texture2DArrayGrad", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_txd, gpu_shader4_array_integer, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - NULL); - - add_function("texture3DGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type), - NULL); - - add_function("texture3DProjGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("textureCubeGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_txd, gpu_shader4_integer, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - NULL); - - add_function("shadow1DGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow1DProjGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler1DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow1DArrayGrad", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DProjGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow2DArrayGrad", - _texture(ir_txd, gpu_shader4_array, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type), - NULL); - - add_function("texture2DRectGrad", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type), - NULL); - - add_function("texture2DRectProjGrad", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec3_type, TEX_PROJECT), - _texture(ir_txd, gpu_shader4_rect_integer, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadow2DRectGrad", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type), - NULL); - - add_function("shadow2DRectProjGrad", - _texture(ir_txd, gpu_shader4_rect, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec4_type, TEX_PROJECT), - NULL); - - add_function("shadowCubeGrad", - _texture(ir_txd, gpu_shader4, glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type), - NULL); - - add_function("textureGather", - _texture(ir_tg4, texture_gather_or_es31, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type), - _texture(ir_tg4, texture_gather_or_es31, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type), - _texture(ir_tg4, texture_gather_or_es31, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type), - - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type), - _texture(ir_tg4, gpu_shader5, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type), - _texture(ir_tg4, gpu_shader5, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type), - - _texture(ir_tg4, texture_gather_or_es31, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type), - _texture(ir_tg4, texture_gather_or_es31, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type), - _texture(ir_tg4, texture_gather_or_es31, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type), - - _texture(ir_tg4, texture_gather_or_es31, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type), - _texture(ir_tg4, texture_gather_or_es31, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type), - _texture(ir_tg4, texture_gather_or_es31, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type), - - _texture(ir_tg4, texture_gather_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_tg4, texture_gather_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type), - _texture(ir_tg4, texture_gather_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type), - - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type), - _texture(ir_tg4, gpu_shader5_or_es31, glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec3_type), - _texture(ir_tg4, gpu_shader5_or_OES_texture_cube_map_array, glsl_type::vec4_type, glsl_type::samplerCubeArrayShadow_type, glsl_type::vec4_type), - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec2_type), - NULL); - - add_function("textureGatherOffset", - _texture(ir_tg4, texture_gather_only_or_es31, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tg4, texture_gather_only_or_es31, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tg4, texture_gather_only_or_es31, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET), - - _texture(ir_tg4, texture_gather_only_or_es31, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tg4, texture_gather_only_or_es31, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - _texture(ir_tg4, texture_gather_only_or_es31, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET), - - _texture(ir_tg4, es31_not_gs5, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET | TEX_COMPONENT), - _texture(ir_tg4, es31_not_gs5, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET | TEX_COMPONENT), - _texture(ir_tg4, es31_not_gs5, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET | TEX_COMPONENT), - - _texture(ir_tg4, es31_not_gs5, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET | TEX_COMPONENT), - _texture(ir_tg4, es31_not_gs5, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET | TEX_COMPONENT), - _texture(ir_tg4, es31_not_gs5, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET | TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST), - - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST | TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST), - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST), - - _texture(ir_tg4, es31_not_gs5, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type, TEX_OFFSET), - _texture(ir_tg4, es31_not_gs5, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET), - NULL); - - add_function("textureGatherOffsets", - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5_es, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - _texture(ir_tg4, gpu_shader5, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY | TEX_COMPONENT), - - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5_es, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY), - _texture(ir_tg4, gpu_shader5, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY), - NULL); - - add_function("sparseTextureARB", - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_tex, texture_cube_map_array_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_tex, texture_cube_map_array_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_tex, texture_cube_map_array_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_SPARSE), - - _textureCubeArrayShadow(ir_tex, texture_cube_map_array_and_sparse, glsl_type::samplerCubeArrayShadow_type, TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txb, derivatives_texture_cube_map_array_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_txb, derivatives_texture_cube_map_array_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_txb, derivatives_texture_cube_map_array_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - NULL); - - add_function("sparseTextureLodARB", - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txl, texture_cube_map_array_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_txl, texture_cube_map_array_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_txl, texture_cube_map_array_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - NULL); - - add_function("sparseTextureOffsetARB", - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_tex, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txb, v130_derivatives_only_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - NULL); - - add_function("sparseTexelFetchARB", - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::ivec2_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::ivec2_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::ivec2_type, NULL, true), - - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::ivec3_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::ivec3_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::ivec3_type, NULL, true), - - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::ivec2_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::ivec2_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::ivec2_type, NULL, true), - - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::ivec3_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::ivec3_type, NULL, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::ivec3_type, NULL, true), - - _texelFetch(texture_multisample_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DMS_type, glsl_type::ivec2_type, NULL, true), - _texelFetch(texture_multisample_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DMS_type, glsl_type::ivec2_type, NULL, true), - _texelFetch(texture_multisample_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DMS_type, glsl_type::ivec2_type, NULL, true), - - _texelFetch(texture_multisample_array_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DMSArray_type, glsl_type::ivec3_type, NULL, true), - _texelFetch(texture_multisample_array_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DMSArray_type, glsl_type::ivec3_type, NULL, true), - _texelFetch(texture_multisample_array_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DMSArray_type, glsl_type::ivec3_type, NULL, true), - NULL); - - add_function("sparseTexelFetchOffsetARB", - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::ivec2_type, glsl_type::ivec2_type, true), - - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::ivec3_type, glsl_type::ivec3_type, true), - - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::ivec2_type, glsl_type::ivec2_type, true), - - _texelFetch(v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type, true), - _texelFetch(v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::ivec3_type, glsl_type::ivec2_type, true), - NULL); - - add_function("sparseTextureLodOffsetARB", - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txl, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - NULL); - - add_function("sparseTextureGradARB", - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_txd, texture_cube_map_array_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_txd, texture_cube_map_array_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_txd, texture_cube_map_array_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_SPARSE), - NULL); - - add_function("sparseTextureGradOffsetARB", - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE), - - _texture(ir_txd, v130_desktop_and_sparse, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET|TEX_SPARSE), - NULL); - - add_function("sparseTextureGatherARB", - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_SPARSE), - - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE), - - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_tg4, texture_gather_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type, TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeShadow_type, glsl_type::vec3_type, TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::samplerCubeArrayShadow_type, glsl_type::vec4_type, TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec2_type, TEX_SPARSE), - NULL); - - add_function("sparseTextureGatherOffsetARB", - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec2_type, TEX_OFFSET_NONCONST|TEX_SPARSE), - NULL); - - add_function("sparseTextureGatherOffsetsARB", - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::ivec4_type, glsl_type::isampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::uvec4_type, glsl_type::usampler2DRect_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_COMPONENT|TEX_SPARSE), - - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DShadow_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - _texture(ir_tg4, gpu_shader5_and_sparse, glsl_type::vec4_type, glsl_type::sampler2DRectShadow_type, glsl_type::vec2_type, TEX_OFFSET_ARRAY|TEX_SPARSE), - NULL); - - add_function("sparseTexelsResidentARB", _is_sparse_texels_resident(), NULL); - - add_function("sparseTextureClampARB", - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, texture_cube_map_array_and_clamp, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, texture_cube_map_array_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, texture_cube_map_array_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - - _textureCubeArrayShadow(ir_tex, texture_cube_map_array_and_clamp, glsl_type::samplerCubeArrayShadow_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - NULL); - - add_function("textureClampARB", - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_tex, texture_cube_map_array_and_clamp, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - _texture(ir_tex, texture_cube_map_array_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - _texture(ir_tex, texture_cube_map_array_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_CLAMP), - - _textureCubeArrayShadow(ir_tex, texture_cube_map_array_and_clamp, glsl_type::samplerCubeArrayShadow_type, TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - _texture(ir_txb, derivatives_texture_cube_map_array_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - - _texture(ir_txb, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_CLAMP), - NULL); - - add_function("sparseTextureOffsetClampARB", - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - NULL); - - add_function("textureOffsetClampARB", - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_tex, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txb, v130_derivatives_only_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txb, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - NULL); - - add_function("sparseTextureGradClampARB", - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, texture_cube_map_array_and_clamp, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, texture_cube_map_array_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, texture_cube_map_array_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_SPARSE|TEX_CLAMP), - NULL); - - add_function("textureGradClampARB", - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::samplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCube_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::samplerCubeShadow_type, glsl_type::vec4_type, TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_CLAMP), - - _texture(ir_txd, texture_cube_map_array_and_clamp, glsl_type::vec4_type, glsl_type::samplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - _texture(ir_txd, texture_cube_map_array_and_clamp, glsl_type::ivec4_type, glsl_type::isamplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - _texture(ir_txd, texture_cube_map_array_and_clamp, glsl_type::uvec4_type, glsl_type::usamplerCubeArray_type, glsl_type::vec4_type, TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_CLAMP), - NULL); - - add_function("sparseTextureGradOffsetClampARB", - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET|TEX_SPARSE|TEX_CLAMP), - NULL); - - add_function("textureGradOffsetClampARB", - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1D_type, glsl_type::float_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2D_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler3D_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler1DArray_type, glsl_type::vec2_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::vec4_type, glsl_type::sampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::ivec4_type, glsl_type::isampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::uvec4_type, glsl_type::usampler2DArray_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler1DArrayShadow_type, glsl_type::vec3_type, TEX_OFFSET|TEX_CLAMP), - _texture(ir_txd, v130_desktop_and_clamp, glsl_type::float_type, glsl_type::sampler2DArrayShadow_type, glsl_type::vec4_type, TEX_OFFSET|TEX_CLAMP), - NULL); - - F(dFdx) - F(dFdy) - F(fwidth) - F(dFdxCoarse) - F(dFdyCoarse) - F(fwidthCoarse) - F(dFdxFine) - F(dFdyFine) - F(fwidthFine) - F(noise1) - F(noise2) - F(noise3) - F(noise4) - - IU(bitfieldExtract) - IU(bitfieldInsert) - IU(bitfieldReverse) - IU(bitCount) - IU(findLSB) - IU(findMSB) - FDGS5(fma) - - add_function("ldexp", - _ldexp(glsl_type::float_type, glsl_type::int_type), - _ldexp(glsl_type::vec2_type, glsl_type::ivec2_type), - _ldexp(glsl_type::vec3_type, glsl_type::ivec3_type), - _ldexp(glsl_type::vec4_type, glsl_type::ivec4_type), - _ldexp(glsl_type::double_type, glsl_type::int_type), - _ldexp(glsl_type::dvec2_type, glsl_type::ivec2_type), - _ldexp(glsl_type::dvec3_type, glsl_type::ivec3_type), - _ldexp(glsl_type::dvec4_type, glsl_type::ivec4_type), - NULL); - - add_function("frexp", - _frexp(glsl_type::float_type, glsl_type::int_type), - _frexp(glsl_type::vec2_type, glsl_type::ivec2_type), - _frexp(glsl_type::vec3_type, glsl_type::ivec3_type), - _frexp(glsl_type::vec4_type, glsl_type::ivec4_type), - _frexp(glsl_type::double_type, glsl_type::int_type), - _frexp(glsl_type::dvec2_type, glsl_type::ivec2_type), - _frexp(glsl_type::dvec3_type, glsl_type::ivec3_type), - _frexp(glsl_type::dvec4_type, glsl_type::ivec4_type), - NULL); - add_function("uaddCarry", - _uaddCarry(glsl_type::uint_type), - _uaddCarry(glsl_type::uvec2_type), - _uaddCarry(glsl_type::uvec3_type), - _uaddCarry(glsl_type::uvec4_type), - NULL); - add_function("usubBorrow", - _usubBorrow(glsl_type::uint_type), - _usubBorrow(glsl_type::uvec2_type), - _usubBorrow(glsl_type::uvec3_type), - _usubBorrow(glsl_type::uvec4_type), - NULL); - add_function("imulExtended", - _mulExtended(glsl_type::int_type), - _mulExtended(glsl_type::ivec2_type), - _mulExtended(glsl_type::ivec3_type), - _mulExtended(glsl_type::ivec4_type), - NULL); - add_function("umulExtended", - _mulExtended(glsl_type::uint_type), - _mulExtended(glsl_type::uvec2_type), - _mulExtended(glsl_type::uvec3_type), - _mulExtended(glsl_type::uvec4_type), - NULL); - add_function("interpolateAtCentroid", - _interpolateAtCentroid(glsl_type::float_type), - _interpolateAtCentroid(glsl_type::vec2_type), - _interpolateAtCentroid(glsl_type::vec3_type), - _interpolateAtCentroid(glsl_type::vec4_type), - NULL); - add_function("interpolateAtOffset", - _interpolateAtOffset(glsl_type::float_type), - _interpolateAtOffset(glsl_type::vec2_type), - _interpolateAtOffset(glsl_type::vec3_type), - _interpolateAtOffset(glsl_type::vec4_type), - NULL); - add_function("interpolateAtSample", - _interpolateAtSample(glsl_type::float_type), - _interpolateAtSample(glsl_type::vec2_type), - _interpolateAtSample(glsl_type::vec3_type), - _interpolateAtSample(glsl_type::vec4_type), - NULL); - - add_function("atomicCounter", - _atomic_counter_op("__intrinsic_atomic_read", - shader_atomic_counters), - NULL); - add_function("atomicCounterIncrement", - _atomic_counter_op("__intrinsic_atomic_increment", - shader_atomic_counters), - NULL); - add_function("atomicCounterDecrement", - _atomic_counter_op("__intrinsic_atomic_predecrement", - shader_atomic_counters), - NULL); - - add_function("atomicCounterAddARB", - _atomic_counter_op1("__intrinsic_atomic_add", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterSubtractARB", - _atomic_counter_op1("__intrinsic_atomic_sub", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterMinARB", - _atomic_counter_op1("__intrinsic_atomic_min", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterMaxARB", - _atomic_counter_op1("__intrinsic_atomic_max", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterAndARB", - _atomic_counter_op1("__intrinsic_atomic_and", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterOrARB", - _atomic_counter_op1("__intrinsic_atomic_or", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterXorARB", - _atomic_counter_op1("__intrinsic_atomic_xor", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterExchangeARB", - _atomic_counter_op1("__intrinsic_atomic_exchange", - shader_atomic_counter_ops), - NULL); - add_function("atomicCounterCompSwapARB", - _atomic_counter_op2("__intrinsic_atomic_comp_swap", - shader_atomic_counter_ops), - NULL); - - add_function("atomicCounterAdd", - _atomic_counter_op1("__intrinsic_atomic_add", - v460_desktop), - NULL); - add_function("atomicCounterSubtract", - _atomic_counter_op1("__intrinsic_atomic_sub", - v460_desktop), - NULL); - add_function("atomicCounterMin", - _atomic_counter_op1("__intrinsic_atomic_min", - v460_desktop), - NULL); - add_function("atomicCounterMax", - _atomic_counter_op1("__intrinsic_atomic_max", - v460_desktop), - NULL); - add_function("atomicCounterAnd", - _atomic_counter_op1("__intrinsic_atomic_and", - v460_desktop), - NULL); - add_function("atomicCounterOr", - _atomic_counter_op1("__intrinsic_atomic_or", - v460_desktop), - NULL); - add_function("atomicCounterXor", - _atomic_counter_op1("__intrinsic_atomic_xor", - v460_desktop), - NULL); - add_function("atomicCounterExchange", - _atomic_counter_op1("__intrinsic_atomic_exchange", - v460_desktop), - NULL); - add_function("atomicCounterCompSwap", - _atomic_counter_op2("__intrinsic_atomic_comp_swap", - v460_desktop), - NULL); - - add_function("atomicAdd", - _atomic_op2("__intrinsic_atomic_add", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op2("__intrinsic_atomic_add", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op2("__intrinsic_atomic_add", - shader_atomic_float_add, - glsl_type::float_type), - _atomic_op2("__intrinsic_atomic_add", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - NULL); - add_function("atomicMin", - _atomic_op2("__intrinsic_atomic_min", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op2("__intrinsic_atomic_min", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op2("__intrinsic_atomic_min", - shader_atomic_float_minmax, - glsl_type::float_type), - _atomic_op2("__intrinsic_atomic_min", - buffer_int64_atomics_supported, - glsl_type::uint64_t_type), - _atomic_op2("__intrinsic_atomic_min", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - NULL); - add_function("atomicMax", - _atomic_op2("__intrinsic_atomic_max", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op2("__intrinsic_atomic_max", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op2("__intrinsic_atomic_max", - shader_atomic_float_minmax, - glsl_type::float_type), - _atomic_op2("__intrinsic_atomic_max", - buffer_int64_atomics_supported, - glsl_type::uint64_t_type), - _atomic_op2("__intrinsic_atomic_max", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - NULL); - add_function("atomicAnd", - _atomic_op2("__intrinsic_atomic_and", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op2("__intrinsic_atomic_and", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op2("__intrinsic_atomic_and", - buffer_int64_atomics_supported, - glsl_type::uint64_t_type), - _atomic_op2("__intrinsic_atomic_and", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - NULL); - add_function("atomicOr", - _atomic_op2("__intrinsic_atomic_or", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op2("__intrinsic_atomic_or", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op2("__intrinsic_atomic_or", - buffer_int64_atomics_supported, - glsl_type::uint64_t_type), - _atomic_op2("__intrinsic_atomic_or", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - NULL); - add_function("atomicXor", - _atomic_op2("__intrinsic_atomic_xor", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op2("__intrinsic_atomic_xor", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op2("__intrinsic_atomic_xor", - buffer_int64_atomics_supported, - glsl_type::uint64_t_type), - _atomic_op2("__intrinsic_atomic_xor", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - NULL); - add_function("atomicExchange", - _atomic_op2("__intrinsic_atomic_exchange", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op2("__intrinsic_atomic_exchange", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op2("__intrinsic_atomic_exchange", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - _atomic_op2("__intrinsic_atomic_exchange", - shader_atomic_float_exchange, - glsl_type::float_type), - NULL); - add_function("atomicCompSwap", - _atomic_op3("__intrinsic_atomic_comp_swap", - buffer_atomics_supported, - glsl_type::uint_type), - _atomic_op3("__intrinsic_atomic_comp_swap", - buffer_atomics_supported, - glsl_type::int_type), - _atomic_op3("__intrinsic_atomic_comp_swap", - buffer_int64_atomics_supported, - glsl_type::int64_t_type), - _atomic_op3("__intrinsic_atomic_comp_swap", - shader_atomic_float_minmax, - glsl_type::float_type), - NULL); - - add_function("min3", - _min3(glsl_type::float_type), - _min3(glsl_type::vec2_type), - _min3(glsl_type::vec3_type), - _min3(glsl_type::vec4_type), - - _min3(glsl_type::int_type), - _min3(glsl_type::ivec2_type), - _min3(glsl_type::ivec3_type), - _min3(glsl_type::ivec4_type), - - _min3(glsl_type::uint_type), - _min3(glsl_type::uvec2_type), - _min3(glsl_type::uvec3_type), - _min3(glsl_type::uvec4_type), - NULL); - - add_function("max3", - _max3(glsl_type::float_type), - _max3(glsl_type::vec2_type), - _max3(glsl_type::vec3_type), - _max3(glsl_type::vec4_type), - - _max3(glsl_type::int_type), - _max3(glsl_type::ivec2_type), - _max3(glsl_type::ivec3_type), - _max3(glsl_type::ivec4_type), - - _max3(glsl_type::uint_type), - _max3(glsl_type::uvec2_type), - _max3(glsl_type::uvec3_type), - _max3(glsl_type::uvec4_type), - NULL); - - add_function("mid3", - _mid3(glsl_type::float_type), - _mid3(glsl_type::vec2_type), - _mid3(glsl_type::vec3_type), - _mid3(glsl_type::vec4_type), - - _mid3(glsl_type::int_type), - _mid3(glsl_type::ivec2_type), - _mid3(glsl_type::ivec3_type), - _mid3(glsl_type::ivec4_type), - - _mid3(glsl_type::uint_type), - _mid3(glsl_type::uvec2_type), - _mid3(glsl_type::uvec3_type), - _mid3(glsl_type::uvec4_type), - NULL); - - add_image_functions(true); - - add_function("memoryBarrier", - _memory_barrier("__intrinsic_memory_barrier", - shader_image_load_store), - NULL); - add_function("groupMemoryBarrier", - _memory_barrier("__intrinsic_group_memory_barrier", - compute_shader), - NULL); - add_function("memoryBarrierAtomicCounter", - _memory_barrier("__intrinsic_memory_barrier_atomic_counter", - compute_shader_supported), - NULL); - add_function("memoryBarrierBuffer", - _memory_barrier("__intrinsic_memory_barrier_buffer", - compute_shader_supported), - NULL); - add_function("memoryBarrierImage", - _memory_barrier("__intrinsic_memory_barrier_image", - compute_shader_supported), - NULL); - add_function("memoryBarrierShared", - _memory_barrier("__intrinsic_memory_barrier_shared", - compute_shader), - NULL); - - add_function("ballotARB", _ballot(), NULL); - - add_function("readInvocationARB", - _read_invocation(glsl_type::float_type), - _read_invocation(glsl_type::vec2_type), - _read_invocation(glsl_type::vec3_type), - _read_invocation(glsl_type::vec4_type), - - _read_invocation(glsl_type::int_type), - _read_invocation(glsl_type::ivec2_type), - _read_invocation(glsl_type::ivec3_type), - _read_invocation(glsl_type::ivec4_type), - - _read_invocation(glsl_type::uint_type), - _read_invocation(glsl_type::uvec2_type), - _read_invocation(glsl_type::uvec3_type), - _read_invocation(glsl_type::uvec4_type), - NULL); - - add_function("readFirstInvocationARB", - _read_first_invocation(glsl_type::float_type), - _read_first_invocation(glsl_type::vec2_type), - _read_first_invocation(glsl_type::vec3_type), - _read_first_invocation(glsl_type::vec4_type), - - _read_first_invocation(glsl_type::int_type), - _read_first_invocation(glsl_type::ivec2_type), - _read_first_invocation(glsl_type::ivec3_type), - _read_first_invocation(glsl_type::ivec4_type), - - _read_first_invocation(glsl_type::uint_type), - _read_first_invocation(glsl_type::uvec2_type), - _read_first_invocation(glsl_type::uvec3_type), - _read_first_invocation(glsl_type::uvec4_type), - NULL); - - add_function("clock2x32ARB", - _shader_clock(shader_clock, - glsl_type::uvec2_type), - NULL); - - add_function("clockARB", - _shader_clock(shader_clock_int64, - glsl_type::uint64_t_type), - NULL); - - add_function("beginInvocationInterlockARB", - _invocation_interlock( - "__intrinsic_begin_invocation_interlock", - supports_arb_fragment_shader_interlock), - NULL); - - add_function("endInvocationInterlockARB", - _invocation_interlock( - "__intrinsic_end_invocation_interlock", - supports_arb_fragment_shader_interlock), - NULL); - - add_function("beginInvocationInterlockNV", - _invocation_interlock( - "__intrinsic_begin_invocation_interlock", - supports_nv_fragment_shader_interlock), - NULL); - - add_function("endInvocationInterlockNV", - _invocation_interlock( - "__intrinsic_end_invocation_interlock", - supports_nv_fragment_shader_interlock), - NULL); - - add_function("anyInvocationARB", - _vote("__intrinsic_vote_any", vote), - NULL); - - add_function("allInvocationsARB", - _vote("__intrinsic_vote_all", vote), - NULL); - - add_function("allInvocationsEqualARB", - _vote("__intrinsic_vote_eq", vote), - NULL); - - add_function("anyInvocationEXT", - _vote("__intrinsic_vote_any", vote_ext), - NULL); - - add_function("allInvocationsEXT", - _vote("__intrinsic_vote_all", vote_ext), - NULL); - - add_function("allInvocationsEqualEXT", - _vote("__intrinsic_vote_eq", vote_ext), - NULL); - - add_function("anyInvocation", - _vote("__intrinsic_vote_any", v460_desktop), - NULL); - - add_function("allInvocations", - _vote("__intrinsic_vote_all", v460_desktop), - NULL); - - add_function("allInvocationsEqual", - _vote("__intrinsic_vote_eq", v460_desktop), - NULL); - - add_function("helperInvocationEXT", _helper_invocation(), NULL); - - add_function("__builtin_idiv64", - generate_ir::idiv64(mem_ctx, integer_functions_supported), - NULL); - - add_function("__builtin_imod64", - generate_ir::imod64(mem_ctx, integer_functions_supported), - NULL); - - add_function("__builtin_udiv64", - generate_ir::udiv64(mem_ctx, integer_functions_supported), - NULL); - - add_function("__builtin_umod64", - generate_ir::umod64(mem_ctx, integer_functions_supported), - NULL); - - add_function("countLeadingZeros", - _countLeadingZeros(shader_integer_functions2, - glsl_type::uint_type), - _countLeadingZeros(shader_integer_functions2, - glsl_type::uvec2_type), - _countLeadingZeros(shader_integer_functions2, - glsl_type::uvec3_type), - _countLeadingZeros(shader_integer_functions2, - glsl_type::uvec4_type), - NULL); - - add_function("countTrailingZeros", - _countTrailingZeros(shader_integer_functions2, - glsl_type::uint_type), - _countTrailingZeros(shader_integer_functions2, - glsl_type::uvec2_type), - _countTrailingZeros(shader_integer_functions2, - glsl_type::uvec3_type), - _countTrailingZeros(shader_integer_functions2, - glsl_type::uvec4_type), - NULL); - - add_function("absoluteDifference", - _absoluteDifference(shader_integer_functions2, - glsl_type::int_type), - _absoluteDifference(shader_integer_functions2, - glsl_type::ivec2_type), - _absoluteDifference(shader_integer_functions2, - glsl_type::ivec3_type), - _absoluteDifference(shader_integer_functions2, - glsl_type::ivec4_type), - _absoluteDifference(shader_integer_functions2, - glsl_type::uint_type), - _absoluteDifference(shader_integer_functions2, - glsl_type::uvec2_type), - _absoluteDifference(shader_integer_functions2, - glsl_type::uvec3_type), - _absoluteDifference(shader_integer_functions2, - glsl_type::uvec4_type), - - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::int64_t_type), - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::i64vec2_type), - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::i64vec3_type), - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::i64vec4_type), - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::uint64_t_type), - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::u64vec2_type), - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::u64vec3_type), - _absoluteDifference(shader_integer_functions2_int64, - glsl_type::u64vec4_type), - NULL); - - add_function("addSaturate", - _addSaturate(shader_integer_functions2, - glsl_type::int_type), - _addSaturate(shader_integer_functions2, - glsl_type::ivec2_type), - _addSaturate(shader_integer_functions2, - glsl_type::ivec3_type), - _addSaturate(shader_integer_functions2, - glsl_type::ivec4_type), - _addSaturate(shader_integer_functions2, - glsl_type::uint_type), - _addSaturate(shader_integer_functions2, - glsl_type::uvec2_type), - _addSaturate(shader_integer_functions2, - glsl_type::uvec3_type), - _addSaturate(shader_integer_functions2, - glsl_type::uvec4_type), - - _addSaturate(shader_integer_functions2_int64, - glsl_type::int64_t_type), - _addSaturate(shader_integer_functions2_int64, - glsl_type::i64vec2_type), - _addSaturate(shader_integer_functions2_int64, - glsl_type::i64vec3_type), - _addSaturate(shader_integer_functions2_int64, - glsl_type::i64vec4_type), - _addSaturate(shader_integer_functions2_int64, - glsl_type::uint64_t_type), - _addSaturate(shader_integer_functions2_int64, - glsl_type::u64vec2_type), - _addSaturate(shader_integer_functions2_int64, - glsl_type::u64vec3_type), - _addSaturate(shader_integer_functions2_int64, - glsl_type::u64vec4_type), - NULL); - - add_function("average", - _average(shader_integer_functions2, - glsl_type::int_type), - _average(shader_integer_functions2, - glsl_type::ivec2_type), - _average(shader_integer_functions2, - glsl_type::ivec3_type), - _average(shader_integer_functions2, - glsl_type::ivec4_type), - _average(shader_integer_functions2, - glsl_type::uint_type), - _average(shader_integer_functions2, - glsl_type::uvec2_type), - _average(shader_integer_functions2, - glsl_type::uvec3_type), - _average(shader_integer_functions2, - glsl_type::uvec4_type), - - _average(shader_integer_functions2_int64, - glsl_type::int64_t_type), - _average(shader_integer_functions2_int64, - glsl_type::i64vec2_type), - _average(shader_integer_functions2_int64, - glsl_type::i64vec3_type), - _average(shader_integer_functions2_int64, - glsl_type::i64vec4_type), - _average(shader_integer_functions2_int64, - glsl_type::uint64_t_type), - _average(shader_integer_functions2_int64, - glsl_type::u64vec2_type), - _average(shader_integer_functions2_int64, - glsl_type::u64vec3_type), - _average(shader_integer_functions2_int64, - glsl_type::u64vec4_type), - NULL); - - add_function("averageRounded", - _averageRounded(shader_integer_functions2, - glsl_type::int_type), - _averageRounded(shader_integer_functions2, - glsl_type::ivec2_type), - _averageRounded(shader_integer_functions2, - glsl_type::ivec3_type), - _averageRounded(shader_integer_functions2, - glsl_type::ivec4_type), - _averageRounded(shader_integer_functions2, - glsl_type::uint_type), - _averageRounded(shader_integer_functions2, - glsl_type::uvec2_type), - _averageRounded(shader_integer_functions2, - glsl_type::uvec3_type), - _averageRounded(shader_integer_functions2, - glsl_type::uvec4_type), - - _averageRounded(shader_integer_functions2_int64, - glsl_type::int64_t_type), - _averageRounded(shader_integer_functions2_int64, - glsl_type::i64vec2_type), - _averageRounded(shader_integer_functions2_int64, - glsl_type::i64vec3_type), - _averageRounded(shader_integer_functions2_int64, - glsl_type::i64vec4_type), - _averageRounded(shader_integer_functions2_int64, - glsl_type::uint64_t_type), - _averageRounded(shader_integer_functions2_int64, - glsl_type::u64vec2_type), - _averageRounded(shader_integer_functions2_int64, - glsl_type::u64vec3_type), - _averageRounded(shader_integer_functions2_int64, - glsl_type::u64vec4_type), - NULL); - - add_function("subtractSaturate", - _subtractSaturate(shader_integer_functions2, - glsl_type::int_type), - _subtractSaturate(shader_integer_functions2, - glsl_type::ivec2_type), - _subtractSaturate(shader_integer_functions2, - glsl_type::ivec3_type), - _subtractSaturate(shader_integer_functions2, - glsl_type::ivec4_type), - _subtractSaturate(shader_integer_functions2, - glsl_type::uint_type), - _subtractSaturate(shader_integer_functions2, - glsl_type::uvec2_type), - _subtractSaturate(shader_integer_functions2, - glsl_type::uvec3_type), - _subtractSaturate(shader_integer_functions2, - glsl_type::uvec4_type), - - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::int64_t_type), - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::i64vec2_type), - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::i64vec3_type), - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::i64vec4_type), - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::uint64_t_type), - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::u64vec2_type), - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::u64vec3_type), - _subtractSaturate(shader_integer_functions2_int64, - glsl_type::u64vec4_type), - NULL); - - add_function("multiply32x16", - _multiply32x16(shader_integer_functions2, - glsl_type::int_type), - _multiply32x16(shader_integer_functions2, - glsl_type::ivec2_type), - _multiply32x16(shader_integer_functions2, - glsl_type::ivec3_type), - _multiply32x16(shader_integer_functions2, - glsl_type::ivec4_type), - _multiply32x16(shader_integer_functions2, - glsl_type::uint_type), - _multiply32x16(shader_integer_functions2, - glsl_type::uvec2_type), - _multiply32x16(shader_integer_functions2, - glsl_type::uvec3_type), - _multiply32x16(shader_integer_functions2, - glsl_type::uvec4_type), - NULL); - -#undef F -#undef FI -#undef FIUD_VEC -#undef FIUBD_VEC -#undef FIU2_MIXED -} - -void -builtin_builder::add_function(const char *name, ...) -{ - va_list ap; - - ir_function *f = new(mem_ctx) ir_function(name); - - va_start(ap, name); - while (true) { - ir_function_signature *sig = va_arg(ap, ir_function_signature *); - if (sig == NULL) - break; - - if (false) { - exec_list stuff; - stuff.push_tail(sig); - validate_ir_tree(&stuff); - } - - f->add_signature(sig); - } - va_end(ap); - - shader->symbols->add_function(f); -} - -void -builtin_builder::add_image_function(const char *name, - const char *intrinsic_name, - image_prototype_ctr prototype, - unsigned num_arguments, - unsigned flags, - enum ir_intrinsic_id intrinsic_id) -{ - static const glsl_type *const types[] = { - glsl_type::image1D_type, - glsl_type::image2D_type, - glsl_type::image3D_type, - glsl_type::image2DRect_type, - glsl_type::imageCube_type, - glsl_type::imageBuffer_type, - glsl_type::image1DArray_type, - glsl_type::image2DArray_type, - glsl_type::imageCubeArray_type, - glsl_type::image2DMS_type, - glsl_type::image2DMSArray_type, - glsl_type::iimage1D_type, - glsl_type::iimage2D_type, - glsl_type::iimage3D_type, - glsl_type::iimage2DRect_type, - glsl_type::iimageCube_type, - glsl_type::iimageBuffer_type, - glsl_type::iimage1DArray_type, - glsl_type::iimage2DArray_type, - glsl_type::iimageCubeArray_type, - glsl_type::iimage2DMS_type, - glsl_type::iimage2DMSArray_type, - glsl_type::uimage1D_type, - glsl_type::uimage2D_type, - glsl_type::uimage3D_type, - glsl_type::uimage2DRect_type, - glsl_type::uimageCube_type, - glsl_type::uimageBuffer_type, - glsl_type::uimage1DArray_type, - glsl_type::uimage2DArray_type, - glsl_type::uimageCubeArray_type, - glsl_type::uimage2DMS_type, - glsl_type::uimage2DMSArray_type - }; - - ir_function *f = new(mem_ctx) ir_function(name); - - for (unsigned i = 0; i < ARRAY_SIZE(types); ++i) { - if (types[i]->sampled_type == GLSL_TYPE_FLOAT && !(flags & IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE)) - continue; - if (types[i]->sampled_type == GLSL_TYPE_INT && !(flags & IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE)) - continue; - if ((types[i]->sampler_dimensionality != GLSL_SAMPLER_DIM_MS) && (flags & IMAGE_FUNCTION_MS_ONLY)) - continue; - if (flags & IMAGE_FUNCTION_SPARSE) { - switch (types[i]->sampler_dimensionality) { - case GLSL_SAMPLER_DIM_2D: - case GLSL_SAMPLER_DIM_3D: - case GLSL_SAMPLER_DIM_CUBE: - case GLSL_SAMPLER_DIM_RECT: - case GLSL_SAMPLER_DIM_MS: - break; - default: - continue; - } - } - f->add_signature(_image(prototype, types[i], intrinsic_name, - num_arguments, flags, intrinsic_id)); - } - shader->symbols->add_function(f); -} - -void -builtin_builder::add_image_functions(bool glsl) -{ - const unsigned flags = (glsl ? IMAGE_FUNCTION_EMIT_STUB : 0); - - add_image_function(glsl ? "imageLoad" : "__intrinsic_image_load", - "__intrinsic_image_load", - &builtin_builder::_image_prototype, 0, - (flags | IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE | - IMAGE_FUNCTION_READ_ONLY), - ir_intrinsic_image_load); - - add_image_function(glsl ? "imageStore" : "__intrinsic_image_store", - "__intrinsic_image_store", - &builtin_builder::_image_prototype, 1, - (flags | IMAGE_FUNCTION_RETURNS_VOID | - IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE | - IMAGE_FUNCTION_WRITE_ONLY), - ir_intrinsic_image_store); - - const unsigned atom_flags = flags | IMAGE_FUNCTION_AVAIL_ATOMIC; - - add_image_function(glsl ? "imageAtomicAdd" : "__intrinsic_image_atomic_add", - "__intrinsic_image_atomic_add", - &builtin_builder::_image_prototype, 1, - (flags | IMAGE_FUNCTION_AVAIL_ATOMIC_ADD | - IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE), - ir_intrinsic_image_atomic_add); - - add_image_function(glsl ? "imageAtomicMin" : "__intrinsic_image_atomic_min", - "__intrinsic_image_atomic_min", - &builtin_builder::_image_prototype, 1, - atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE, - ir_intrinsic_image_atomic_min); - - add_image_function(glsl ? "imageAtomicMax" : "__intrinsic_image_atomic_max", - "__intrinsic_image_atomic_max", - &builtin_builder::_image_prototype, 1, - atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE, - ir_intrinsic_image_atomic_max); - - add_image_function(glsl ? "imageAtomicAnd" : "__intrinsic_image_atomic_and", - "__intrinsic_image_atomic_and", - &builtin_builder::_image_prototype, 1, - atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE, - ir_intrinsic_image_atomic_and); - - add_image_function(glsl ? "imageAtomicOr" : "__intrinsic_image_atomic_or", - "__intrinsic_image_atomic_or", - &builtin_builder::_image_prototype, 1, - atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE, - ir_intrinsic_image_atomic_or); - - add_image_function(glsl ? "imageAtomicXor" : "__intrinsic_image_atomic_xor", - "__intrinsic_image_atomic_xor", - &builtin_builder::_image_prototype, 1, - atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE, - ir_intrinsic_image_atomic_xor); - - add_image_function((glsl ? "imageAtomicExchange" : - "__intrinsic_image_atomic_exchange"), - "__intrinsic_image_atomic_exchange", - &builtin_builder::_image_prototype, 1, - (flags | IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE | - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE), - ir_intrinsic_image_atomic_exchange); - - add_image_function((glsl ? "imageAtomicCompSwap" : - "__intrinsic_image_atomic_comp_swap"), - "__intrinsic_image_atomic_comp_swap", - &builtin_builder::_image_prototype, 2, - atom_flags | IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE, - ir_intrinsic_image_atomic_comp_swap); - - add_image_function(glsl ? "imageSize" : "__intrinsic_image_size", - "__intrinsic_image_size", - &builtin_builder::_image_size_prototype, 1, - flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE, - ir_intrinsic_image_size); - - add_image_function(glsl ? "imageSamples" : "__intrinsic_image_samples", - "__intrinsic_image_samples", - &builtin_builder::_image_samples_prototype, 1, - flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE | - IMAGE_FUNCTION_MS_ONLY, - ir_intrinsic_image_samples); - - /* EXT_shader_image_load_store */ - add_image_function(glsl ? "imageAtomicIncWrap" : "__intrinsic_image_atomic_inc_wrap", - "__intrinsic_image_atomic_inc_wrap", - &builtin_builder::_image_prototype, 1, - (atom_flags | IMAGE_FUNCTION_EXT_ONLY), - ir_intrinsic_image_atomic_inc_wrap); - add_image_function(glsl ? "imageAtomicDecWrap" : "__intrinsic_image_atomic_dec_wrap", - "__intrinsic_image_atomic_dec_wrap", - &builtin_builder::_image_prototype, 1, - (atom_flags | IMAGE_FUNCTION_EXT_ONLY), - ir_intrinsic_image_atomic_dec_wrap); - - /* ARB_sparse_texture2 */ - add_image_function(glsl ? "sparseImageLoadARB" : "__intrinsic_image_sparse_load", - "__intrinsic_image_sparse_load", - &builtin_builder::_image_prototype, 0, - (flags | IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE | - IMAGE_FUNCTION_SUPPORTS_SIGNED_DATA_TYPE | - IMAGE_FUNCTION_READ_ONLY | - IMAGE_FUNCTION_SPARSE), - ir_intrinsic_image_sparse_load); -} - -ir_variable * -builtin_builder::in_var(const glsl_type *type, const char *name) -{ - return new(mem_ctx) ir_variable(type, name, ir_var_function_in); -} - -ir_variable * -builtin_builder::in_highp_var(const glsl_type *type, const char *name) -{ - ir_variable *var = in_var(type, name); - var->data.precision = GLSL_PRECISION_HIGH; - return var; -} - -ir_variable * -builtin_builder::in_mediump_var(const glsl_type *type, const char *name) -{ - ir_variable *var = in_var(type, name); - var->data.precision = GLSL_PRECISION_MEDIUM; - return var; -} - -ir_variable * -builtin_builder::out_var(const glsl_type *type, const char *name) -{ - return new(mem_ctx) ir_variable(type, name, ir_var_function_out); -} - -ir_variable * -builtin_builder::out_lowp_var(const glsl_type *type, const char *name) -{ - ir_variable *var = out_var(type, name); - var->data.precision = GLSL_PRECISION_LOW; - return var; -} - -ir_variable * -builtin_builder::out_highp_var(const glsl_type *type, const char *name) -{ - ir_variable *var = out_var(type, name); - var->data.precision = GLSL_PRECISION_HIGH; - return var; -} - -ir_variable * -builtin_builder::as_highp(ir_factory &body, ir_variable *var) -{ - ir_variable *t = body.make_temp(var->type, "highp_tmp"); - body.emit(assign(t, var)); - return t; -} - -ir_constant * -builtin_builder::imm(bool b, unsigned vector_elements) -{ - return new(mem_ctx) ir_constant(b, vector_elements); -} - -ir_constant * -builtin_builder::imm(float f, unsigned vector_elements) -{ - return new(mem_ctx) ir_constant(f, vector_elements); -} - -ir_constant * -builtin_builder::imm(int i, unsigned vector_elements) -{ - return new(mem_ctx) ir_constant(i, vector_elements); -} - -ir_constant * -builtin_builder::imm(unsigned u, unsigned vector_elements) -{ - return new(mem_ctx) ir_constant(u, vector_elements); -} - -ir_constant * -builtin_builder::imm(double d, unsigned vector_elements) -{ - return new(mem_ctx) ir_constant(d, vector_elements); -} - -ir_constant * -builtin_builder::imm(const glsl_type *type, const ir_constant_data &data) -{ - return new(mem_ctx) ir_constant(type, &data); -} - -#define IMM_FP(type, val) (type->is_double()) ? imm(val) : imm((float)val) - -ir_dereference_variable * -builtin_builder::var_ref(ir_variable *var) -{ - return new(mem_ctx) ir_dereference_variable(var); -} - -ir_dereference_array * -builtin_builder::array_ref(ir_variable *var, int idx) -{ - return new(mem_ctx) ir_dereference_array(var, imm(idx)); -} - -/** Return an element of a matrix */ -ir_swizzle * -builtin_builder::matrix_elt(ir_variable *var, int column, int row) -{ - return swizzle(array_ref(var, column), row, 1); -} - -ir_dereference_record * -builtin_builder::record_ref(ir_variable *var, const char *field) -{ - return new(mem_ctx) ir_dereference_record(var, field); -} - -/** - * Implementations of built-in functions: - * @{ - */ -ir_function_signature * -builtin_builder::new_sig(const glsl_type *return_type, - builtin_available_predicate avail, - int num_params, - ...) -{ - va_list ap; - - ir_function_signature *sig = - new(mem_ctx) ir_function_signature(return_type, avail); - - exec_list plist; - va_start(ap, num_params); - for (int i = 0; i < num_params; i++) { - plist.push_tail(va_arg(ap, ir_variable *)); - } - va_end(ap); - - sig->replace_parameters(&plist); - return sig; -} - -#define MAKE_SIG(return_type, avail, ...) \ - ir_function_signature *sig = \ - new_sig(return_type, avail, __VA_ARGS__); \ - ir_factory body(&sig->body, mem_ctx); \ - sig->is_defined = true; - -#define MAKE_INTRINSIC(return_type, id, avail, ...) \ - ir_function_signature *sig = \ - new_sig(return_type, avail, __VA_ARGS__); \ - sig->intrinsic_id = id; - -ir_function_signature * -builtin_builder::unop(builtin_available_predicate avail, - ir_expression_operation opcode, - const glsl_type *return_type, - const glsl_type *param_type) -{ - ir_variable *x = in_var(param_type, "x"); - MAKE_SIG(return_type, avail, 1, x); - body.emit(ret(expr(opcode, x))); - return sig; -} - -#define UNOP(NAME, OPCODE, AVAIL) \ -ir_function_signature * \ -builtin_builder::_##NAME(const glsl_type *type) \ -{ \ - return unop(&AVAIL, OPCODE, type, type); \ -} - -#define UNOPA(NAME, OPCODE) \ -ir_function_signature * \ -builtin_builder::_##NAME(builtin_available_predicate avail, const glsl_type *type) \ -{ \ - return unop(avail, OPCODE, type, type); \ -} - -ir_function_signature * -builtin_builder::binop(builtin_available_predicate avail, - ir_expression_operation opcode, - const glsl_type *return_type, - const glsl_type *param0_type, - const glsl_type *param1_type, - bool swap_operands) -{ - ir_variable *x = in_var(param0_type, "x"); - ir_variable *y = in_var(param1_type, "y"); - MAKE_SIG(return_type, avail, 2, x, y); - - if (swap_operands) - body.emit(ret(expr(opcode, y, x))); - else - body.emit(ret(expr(opcode, x, y))); - - return sig; -} - -#define BINOP(NAME, OPCODE, AVAIL) \ -ir_function_signature * \ -builtin_builder::_##NAME(const glsl_type *return_type, \ - const glsl_type *param0_type, \ - const glsl_type *param1_type) \ -{ \ - return binop(&AVAIL, OPCODE, return_type, param0_type, param1_type); \ -} - -/** - * Angle and Trigonometry Functions @{ - */ - -ir_function_signature * -builtin_builder::_radians(const glsl_type *type) -{ - ir_variable *degrees = in_var(type, "degrees"); - MAKE_SIG(type, always_available, 1, degrees); - body.emit(ret(mul(degrees, imm(0.0174532925f)))); - return sig; -} - -ir_function_signature * -builtin_builder::_degrees(const glsl_type *type) -{ - ir_variable *radians = in_var(type, "radians"); - MAKE_SIG(type, always_available, 1, radians); - body.emit(ret(mul(radians, imm(57.29578f)))); - return sig; -} - -UNOP(sin, ir_unop_sin, always_available) -UNOP(cos, ir_unop_cos, always_available) - -ir_function_signature * -builtin_builder::_tan(const glsl_type *type) -{ - ir_variable *theta = in_var(type, "theta"); - MAKE_SIG(type, always_available, 1, theta); - body.emit(ret(div(sin(theta), cos(theta)))); - return sig; -} - -ir_expression * -builtin_builder::asin_expr(ir_variable *x, float p0, float p1) -{ - return mul(sign(x), - sub(imm(M_PI_2f), - mul(sqrt(sub(imm(1.0f), abs(x))), - add(imm(M_PI_2f), - mul(abs(x), - add(imm(M_PI_4f - 1.0f), - mul(abs(x), - add(imm(p0), - mul(abs(x), imm(p1)))))))))); -} - -/** - * Generate a ir_call to a function with a set of parameters - * - * The input \c params can either be a list of \c ir_variable or a list of - * \c ir_dereference_variable. In the latter case, all nodes will be removed - * from \c params and used directly as the parameters to the generated - * \c ir_call. - */ -ir_call * -builtin_builder::call(ir_function *f, ir_variable *ret, exec_list params) -{ - exec_list actual_params; - - foreach_in_list_safe(ir_instruction, ir, ¶ms) { - ir_dereference_variable *d = ir->as_dereference_variable(); - if (d != NULL) { - d->remove(); - actual_params.push_tail(d); - } else { - ir_variable *var = ir->as_variable(); - assert(var != NULL); - actual_params.push_tail(var_ref(var)); - } - } - - ir_function_signature *sig = - f->exact_matching_signature(NULL, &actual_params); - if (!sig) - return NULL; - - ir_dereference_variable *deref = - (sig->return_type->is_void() ? NULL : var_ref(ret)); - - return new(mem_ctx) ir_call(sig, deref, &actual_params); -} - -ir_function_signature * -builtin_builder::_asin(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, always_available, 1, x); - - body.emit(ret(asin_expr(x, 0.086566724f, -0.03102955f))); - - return sig; -} - -ir_function_signature * -builtin_builder::_acos(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, always_available, 1, x); - - body.emit(ret(sub(imm(M_PI_2f), asin_expr(x, 0.08132463f, -0.02363318f)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_sinh(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, v130, 1, x); - - /* 0.5 * (e^x - e^(-x)) */ - body.emit(ret(mul(imm(0.5f), sub(exp(x), exp(neg(x)))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_cosh(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, v130, 1, x); - - /* 0.5 * (e^x + e^(-x)) */ - body.emit(ret(mul(imm(0.5f), add(exp(x), exp(neg(x)))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_tanh(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, v130, 1, x); - - /* Clamp x to [-10, +10] to avoid precision problems. - * When x > 10, e^(-x) is so small relative to e^x that it gets flushed to - * zero in the computation e^x + e^(-x). The same happens in the other - * direction when x < -10. - */ - ir_variable *t = body.make_temp(type, "tmp"); - body.emit(assign(t, min2(max2(x, imm(-10.0f)), imm(10.0f)))); - - /* (e^x - e^(-x)) / (e^x + e^(-x)) */ - body.emit(ret(div(sub(exp(t), exp(neg(t))), - add(exp(t), exp(neg(t)))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_asinh(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, v130, 1, x); - - body.emit(ret(mul(sign(x), log(add(abs(x), sqrt(add(mul(x, x), - imm(1.0f)))))))); - return sig; -} - -ir_function_signature * -builtin_builder::_acosh(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, v130, 1, x); - - body.emit(ret(log(add(x, sqrt(sub(mul(x, x), imm(1.0f))))))); - return sig; -} - -ir_function_signature * -builtin_builder::_atanh(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, v130, 1, x); - - body.emit(ret(mul(imm(0.5f), log(div(add(imm(1.0f), x), - sub(imm(1.0f), x)))))); - return sig; -} -/** @} */ - -/** - * Exponential Functions @{ - */ - -ir_function_signature * -builtin_builder::_pow(const glsl_type *type) -{ - return binop(always_available, ir_binop_pow, type, type, type); -} - -UNOP(exp, ir_unop_exp, always_available) -UNOP(log, ir_unop_log, always_available) -UNOP(exp2, ir_unop_exp2, always_available) -UNOP(log2, ir_unop_log2, always_available) -UNOP(atan, ir_unop_atan, always_available) -UNOPA(sqrt, ir_unop_sqrt) -UNOPA(inversesqrt, ir_unop_rsq) - -/** @} */ - -UNOPA(abs, ir_unop_abs) -UNOPA(sign, ir_unop_sign) -UNOPA(floor, ir_unop_floor) -UNOPA(truncate, ir_unop_trunc) -UNOPA(trunc, ir_unop_trunc) -UNOPA(round, ir_unop_round_even) -UNOPA(roundEven, ir_unop_round_even) -UNOPA(ceil, ir_unop_ceil) -UNOPA(fract, ir_unop_fract) - -ir_function_signature * -builtin_builder::_mod(builtin_available_predicate avail, - const glsl_type *x_type, const glsl_type *y_type) -{ - return binop(avail, ir_binop_mod, x_type, x_type, y_type); -} - -ir_function_signature * -builtin_builder::_modf(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - ir_variable *i = out_var(type, "i"); - MAKE_SIG(type, avail, 2, x, i); - - ir_variable *t = body.make_temp(type, "t"); - body.emit(assign(t, expr(ir_unop_trunc, x))); - body.emit(assign(i, t)); - body.emit(ret(sub(x, t))); - - return sig; -} - -ir_function_signature * -builtin_builder::_min(builtin_available_predicate avail, - const glsl_type *x_type, const glsl_type *y_type) -{ - return binop(avail, ir_binop_min, x_type, x_type, y_type); -} - -ir_function_signature * -builtin_builder::_max(builtin_available_predicate avail, - const glsl_type *x_type, const glsl_type *y_type) -{ - return binop(avail, ir_binop_max, x_type, x_type, y_type); -} - -ir_function_signature * -builtin_builder::_clamp(builtin_available_predicate avail, - const glsl_type *val_type, const glsl_type *bound_type) -{ - ir_variable *x = in_var(val_type, "x"); - ir_variable *minVal = in_var(bound_type, "minVal"); - ir_variable *maxVal = in_var(bound_type, "maxVal"); - MAKE_SIG(val_type, avail, 3, x, minVal, maxVal); - - body.emit(ret(clamp(x, minVal, maxVal))); - - return sig; -} - -ir_function_signature * -builtin_builder::_mix_lrp(builtin_available_predicate avail, const glsl_type *val_type, const glsl_type *blend_type) -{ - ir_variable *x = in_var(val_type, "x"); - ir_variable *y = in_var(val_type, "y"); - ir_variable *a = in_var(blend_type, "a"); - MAKE_SIG(val_type, avail, 3, x, y, a); - - body.emit(ret(lrp(x, y, a))); - - return sig; -} - -ir_function_signature * -builtin_builder::_mix_sel(builtin_available_predicate avail, - const glsl_type *val_type, - const glsl_type *blend_type) -{ - ir_variable *x = in_var(val_type, "x"); - ir_variable *y = in_var(val_type, "y"); - ir_variable *a = in_var(blend_type, "a"); - MAKE_SIG(val_type, avail, 3, x, y, a); - - /* csel matches the ternary operator in that a selector of true choses the - * first argument. This differs from mix(x, y, false) which choses the - * second argument (to remain consistent with the interpolating version of - * mix() which takes a blend factor from 0.0 to 1.0 where 0.0 is only x. - * - * To handle the behavior mismatch, reverse the x and y arguments. - */ - body.emit(ret(csel(a, y, x))); - - return sig; -} - -ir_function_signature * -builtin_builder::_step(builtin_available_predicate avail, const glsl_type *edge_type, const glsl_type *x_type) -{ - ir_variable *edge = in_var(edge_type, "edge"); - ir_variable *x = in_var(x_type, "x"); - MAKE_SIG(x_type, avail, 2, edge, x); - - ir_variable *t = body.make_temp(x_type, "t"); - if (x_type->vector_elements == 1) { - /* Both are floats */ - if (edge_type->is_double()) - body.emit(assign(t, f2d(b2f(gequal(x, edge))))); - else - body.emit(assign(t, b2f(gequal(x, edge)))); - } else if (edge_type->vector_elements == 1) { - /* x is a vector but edge is a float */ - for (int i = 0; i < x_type->vector_elements; i++) { - if (edge_type->is_double()) - body.emit(assign(t, f2d(b2f(gequal(swizzle(x, i, 1), edge))), 1 << i)); - else - body.emit(assign(t, b2f(gequal(swizzle(x, i, 1), edge)), 1 << i)); - } - } else { - /* Both are vectors */ - for (int i = 0; i < x_type->vector_elements; i++) { - if (edge_type->is_double()) - body.emit(assign(t, f2d(b2f(gequal(swizzle(x, i, 1), swizzle(edge, i, 1)))), - 1 << i)); - else - body.emit(assign(t, b2f(gequal(swizzle(x, i, 1), swizzle(edge, i, 1))), - 1 << i)); - - } - } - body.emit(ret(t)); - - return sig; -} - -ir_function_signature * -builtin_builder::_smoothstep(builtin_available_predicate avail, const glsl_type *edge_type, const glsl_type *x_type) -{ - ir_variable *edge0 = in_var(edge_type, "edge0"); - ir_variable *edge1 = in_var(edge_type, "edge1"); - ir_variable *x = in_var(x_type, "x"); - MAKE_SIG(x_type, avail, 3, edge0, edge1, x); - - /* From the GLSL 1.10 specification: - * - * genType t; - * t = clamp((x - edge0) / (edge1 - edge0), 0, 1); - * return t * t * (3 - 2 * t); - */ - - ir_variable *t = body.make_temp(x_type, "t"); - body.emit(assign(t, clamp(div(sub(x, edge0), sub(edge1, edge0)), - IMM_FP(x_type, 0.0), IMM_FP(x_type, 1.0)))); - - body.emit(ret(mul(t, mul(t, sub(IMM_FP(x_type, 3.0), mul(IMM_FP(x_type, 2.0), t)))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_isnan(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::bvec(type->vector_elements), avail, 1, x); - - body.emit(ret(nequal(x, x))); - - return sig; -} - -ir_function_signature * -builtin_builder::_isinf(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::bvec(type->vector_elements), avail, 1, x); - - ir_constant_data infinities; - for (int i = 0; i < type->vector_elements; i++) { - switch (type->base_type) { - case GLSL_TYPE_FLOAT: - infinities.f[i] = INFINITY; - break; - case GLSL_TYPE_DOUBLE: - infinities.d[i] = INFINITY; - break; - default: - unreachable("unknown type"); - } - } - - body.emit(ret(equal(abs(x), imm(type, infinities)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_atan2(const glsl_type *x_type) -{ - return binop(always_available, ir_binop_atan2, x_type, x_type, x_type); -} - -ir_function_signature * -builtin_builder::_floatBitsToInt(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::ivec(type->vector_elements), shader_bit_encoding, 1, x); - body.emit(ret(bitcast_f2i(as_highp(body, x)))); - return sig; -} - -ir_function_signature * -builtin_builder::_floatBitsToUint(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::uvec(type->vector_elements), shader_bit_encoding, 1, x); - body.emit(ret(bitcast_f2u(as_highp(body, x)))); - return sig; -} - -ir_function_signature * -builtin_builder::_intBitsToFloat(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::vec(type->vector_elements), shader_bit_encoding, 1, x); - body.emit(ret(bitcast_i2f(as_highp(body, x)))); - return sig; -} - -ir_function_signature * -builtin_builder::_uintBitsToFloat(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::vec(type->vector_elements), shader_bit_encoding, 1, x); - body.emit(ret(bitcast_u2f(as_highp(body, x)))); - return sig; -} - -ir_function_signature * -builtin_builder::_doubleBitsToInt64(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::i64vec(type->vector_elements), avail, 1, x); - body.emit(ret(bitcast_d2i64(x))); - return sig; -} - -ir_function_signature * -builtin_builder::_doubleBitsToUint64(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::u64vec(type->vector_elements), avail, 1, x); - body.emit(ret(bitcast_d2u64(x))); - return sig; -} - -ir_function_signature * -builtin_builder::_int64BitsToDouble(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::dvec(type->vector_elements), avail, 1, x); - body.emit(ret(bitcast_i642d(x))); - return sig; -} - -ir_function_signature * -builtin_builder::_uint64BitsToDouble(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::dvec(type->vector_elements), avail, 1, x); - body.emit(ret(bitcast_u642d(x))); - return sig; -} - -ir_function_signature * -builtin_builder::_packUnorm2x16(builtin_available_predicate avail) -{ - ir_variable *v = in_highp_var(glsl_type::vec2_type, "v"); - MAKE_SIG(glsl_type::uint_type, avail, 1, v); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_pack_unorm_2x16, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_packSnorm2x16(builtin_available_predicate avail) -{ - ir_variable *v = in_var(glsl_type::vec2_type, "v"); - MAKE_SIG(glsl_type::uint_type, avail, 1, v); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_pack_snorm_2x16, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_packUnorm4x8(builtin_available_predicate avail) -{ - ir_variable *v = in_mediump_var(glsl_type::vec4_type, "v"); - MAKE_SIG(glsl_type::uint_type, avail, 1, v); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_pack_unorm_4x8, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_packSnorm4x8(builtin_available_predicate avail) -{ - ir_variable *v = in_mediump_var(glsl_type::vec4_type, "v"); - MAKE_SIG(glsl_type::uint_type, avail, 1, v); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_pack_snorm_4x8, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_unpackUnorm2x16(builtin_available_predicate avail) -{ - ir_variable *p = in_highp_var(glsl_type::uint_type, "p"); - MAKE_SIG(glsl_type::vec2_type, avail, 1, p); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_unpack_unorm_2x16, p))); - return sig; -} - -ir_function_signature * -builtin_builder::_unpackSnorm2x16(builtin_available_predicate avail) -{ - ir_variable *p = in_highp_var(glsl_type::uint_type, "p"); - MAKE_SIG(glsl_type::vec2_type, avail, 1, p); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_unpack_snorm_2x16, p))); - return sig; -} - - -ir_function_signature * -builtin_builder::_unpackUnorm4x8(builtin_available_predicate avail) -{ - ir_variable *p = in_highp_var(glsl_type::uint_type, "p"); - MAKE_SIG(glsl_type::vec4_type, avail, 1, p); - sig->return_precision = GLSL_PRECISION_MEDIUM; - body.emit(ret(expr(ir_unop_unpack_unorm_4x8, p))); - return sig; -} - -ir_function_signature * -builtin_builder::_unpackSnorm4x8(builtin_available_predicate avail) -{ - ir_variable *p = in_highp_var(glsl_type::uint_type, "p"); - MAKE_SIG(glsl_type::vec4_type, avail, 1, p); - sig->return_precision = GLSL_PRECISION_MEDIUM; - body.emit(ret(expr(ir_unop_unpack_snorm_4x8, p))); - return sig; -} - -ir_function_signature * -builtin_builder::_packHalf2x16(builtin_available_predicate avail) -{ - ir_variable *v = in_mediump_var(glsl_type::vec2_type, "v"); - MAKE_SIG(glsl_type::uint_type, avail, 1, v); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_pack_half_2x16, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_unpackHalf2x16(builtin_available_predicate avail) -{ - ir_variable *p = in_highp_var(glsl_type::uint_type, "p"); - MAKE_SIG(glsl_type::vec2_type, avail, 1, p); - sig->return_precision = GLSL_PRECISION_MEDIUM; - body.emit(ret(expr(ir_unop_unpack_half_2x16, p))); - return sig; -} - -ir_function_signature * -builtin_builder::_packDouble2x32(builtin_available_predicate avail) -{ - ir_variable *v = in_var(glsl_type::uvec2_type, "v"); - MAKE_SIG(glsl_type::double_type, avail, 1, v); - body.emit(ret(expr(ir_unop_pack_double_2x32, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_unpackDouble2x32(builtin_available_predicate avail) -{ - ir_variable *p = in_var(glsl_type::double_type, "p"); - MAKE_SIG(glsl_type::uvec2_type, avail, 1, p); - body.emit(ret(expr(ir_unop_unpack_double_2x32, p))); - return sig; -} - -ir_function_signature * -builtin_builder::_packInt2x32(builtin_available_predicate avail) -{ - ir_variable *v = in_var(glsl_type::ivec2_type, "v"); - MAKE_SIG(glsl_type::int64_t_type, avail, 1, v); - body.emit(ret(expr(ir_unop_pack_int_2x32, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_unpackInt2x32(builtin_available_predicate avail) -{ - ir_variable *p = in_var(glsl_type::int64_t_type, "p"); - MAKE_SIG(glsl_type::ivec2_type, avail, 1, p); - body.emit(ret(expr(ir_unop_unpack_int_2x32, p))); - return sig; -} - -ir_function_signature * -builtin_builder::_packUint2x32(builtin_available_predicate avail) -{ - ir_variable *v = in_var(glsl_type::uvec2_type, "v"); - MAKE_SIG(glsl_type::uint64_t_type, avail, 1, v); - body.emit(ret(expr(ir_unop_pack_uint_2x32, v))); - return sig; -} - -ir_function_signature * -builtin_builder::_unpackUint2x32(builtin_available_predicate avail) -{ - ir_variable *p = in_var(glsl_type::uint64_t_type, "p"); - MAKE_SIG(glsl_type::uvec2_type, avail, 1, p); - body.emit(ret(expr(ir_unop_unpack_uint_2x32, p))); - return sig; -} - -ir_function_signature * -builtin_builder::_length(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type->get_base_type(), avail, 1, x); - - body.emit(ret(sqrt(dot(x, x)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_distance(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *p0 = in_var(type, "p0"); - ir_variable *p1 = in_var(type, "p1"); - MAKE_SIG(type->get_base_type(), avail, 2, p0, p1); - - if (type->vector_elements == 1) { - body.emit(ret(abs(sub(p0, p1)))); - } else { - ir_variable *p = body.make_temp(type, "p"); - body.emit(assign(p, sub(p0, p1))); - body.emit(ret(sqrt(dot(p, p)))); - } - - return sig; -} - -ir_function_signature * -builtin_builder::_dot(builtin_available_predicate avail, const glsl_type *type) -{ - if (type->vector_elements == 1) - return binop(avail, ir_binop_mul, type, type, type); - - return binop(avail, ir_binop_dot, - type->get_base_type(), type, type); -} - -ir_function_signature * -builtin_builder::_cross(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *a = in_var(type, "a"); - ir_variable *b = in_var(type, "b"); - MAKE_SIG(type, avail, 2, a, b); - - int yzx = MAKE_SWIZZLE4(SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_X, 0); - int zxy = MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_X, SWIZZLE_Y, 0); - - body.emit(ret(sub(mul(swizzle(a, yzx, 3), swizzle(b, zxy, 3)), - mul(swizzle(a, zxy, 3), swizzle(b, yzx, 3))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_normalize(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(type, avail, 1, x); - - if (type->vector_elements == 1) { - body.emit(ret(sign(x))); - } else { - body.emit(ret(mul(x, rsq(dot(x, x))))); - } - - return sig; -} - -ir_function_signature * -builtin_builder::_ftransform() -{ - MAKE_SIG(glsl_type::vec4_type, compatibility_vs_only, 0); - - /* ftransform() refers to global variables, and is always emitted - * directly by ast_function.cpp. Just emit a prototype here so we - * can recognize calls to it. - */ - return sig; -} - -ir_function_signature * -builtin_builder::_faceforward(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *N = in_var(type, "N"); - ir_variable *I = in_var(type, "I"); - ir_variable *Nref = in_var(type, "Nref"); - MAKE_SIG(type, avail, 3, N, I, Nref); - - body.emit(if_tree(less(dot(Nref, I), IMM_FP(type, 0.0)), - ret(N), ret(neg(N)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_reflect(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *I = in_var(type, "I"); - ir_variable *N = in_var(type, "N"); - MAKE_SIG(type, avail, 2, I, N); - - /* I - 2 * dot(N, I) * N */ - body.emit(ret(sub(I, mul(IMM_FP(type, 2.0), mul(dot(N, I), N))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_refract(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *I = in_var(type, "I"); - ir_variable *N = in_var(type, "N"); - ir_variable *eta = in_var(type->get_base_type(), "eta"); - MAKE_SIG(type, avail, 3, I, N, eta); - - ir_variable *n_dot_i = body.make_temp(type->get_base_type(), "n_dot_i"); - body.emit(assign(n_dot_i, dot(N, I))); - - /* From the GLSL 1.10 specification: - * k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I)) - * if (k < 0.0) - * return genType(0.0) - * else - * return eta * I - (eta * dot(N, I) + sqrt(k)) * N - */ - ir_variable *k = body.make_temp(type->get_base_type(), "k"); - body.emit(assign(k, sub(IMM_FP(type, 1.0), - mul(eta, mul(eta, sub(IMM_FP(type, 1.0), - mul(n_dot_i, n_dot_i))))))); - body.emit(if_tree(less(k, IMM_FP(type, 0.0)), - ret(ir_constant::zero(mem_ctx, type)), - ret(sub(mul(eta, I), - mul(add(mul(eta, n_dot_i), sqrt(k)), N))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_matrixCompMult(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - ir_variable *y = in_var(type, "y"); - MAKE_SIG(type, avail, 2, x, y); - - ir_variable *z = body.make_temp(type, "z"); - for (int i = 0; i < type->matrix_columns; i++) { - body.emit(assign(array_ref(z, i), mul(array_ref(x, i), array_ref(y, i)))); - } - body.emit(ret(z)); - - return sig; -} - -ir_function_signature * -builtin_builder::_outerProduct(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *c; - ir_variable *r; - - if (type->is_double()) { - r = in_var(glsl_type::dvec(type->matrix_columns), "r"); - c = in_var(glsl_type::dvec(type->vector_elements), "c"); - } else { - r = in_var(glsl_type::vec(type->matrix_columns), "r"); - c = in_var(glsl_type::vec(type->vector_elements), "c"); - } - MAKE_SIG(type, avail, 2, c, r); - - ir_variable *m = body.make_temp(type, "m"); - for (int i = 0; i < type->matrix_columns; i++) { - body.emit(assign(array_ref(m, i), mul(c, swizzle(r, i, 1)))); - } - body.emit(ret(m)); - - return sig; -} - -ir_function_signature * -builtin_builder::_transpose(builtin_available_predicate avail, const glsl_type *orig_type) -{ - const glsl_type *transpose_type = - glsl_type::get_instance(orig_type->base_type, - orig_type->matrix_columns, - orig_type->vector_elements); - - ir_variable *m = in_var(orig_type, "m"); - MAKE_SIG(transpose_type, avail, 1, m); - - ir_variable *t = body.make_temp(transpose_type, "t"); - for (int i = 0; i < orig_type->matrix_columns; i++) { - for (int j = 0; j < orig_type->vector_elements; j++) { - body.emit(assign(array_ref(t, j), - matrix_elt(m, i, j), - 1 << i)); - } - } - body.emit(ret(t)); - - return sig; -} - -ir_function_signature * -builtin_builder::_determinant_mat2(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *m = in_var(type, "m"); - MAKE_SIG(type->get_base_type(), avail, 1, m); - - body.emit(ret(sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 1)), - mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 1))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_determinant_mat3(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *m = in_var(type, "m"); - MAKE_SIG(type->get_base_type(), avail, 1, m); - - ir_expression *f1 = - sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)), - mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 1))); - - ir_expression *f2 = - sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)), - mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 0))); - - ir_expression *f3 = - sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)), - mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 0))); - - body.emit(ret(add(sub(mul(matrix_elt(m, 0, 0), f1), - mul(matrix_elt(m, 0, 1), f2)), - mul(matrix_elt(m, 0, 2), f3)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_determinant_mat4(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *m = in_var(type, "m"); - const glsl_type *btype = type->get_base_type(); - MAKE_SIG(btype, avail, 1, m); - - ir_variable *SubFactor00 = body.make_temp(btype, "SubFactor00"); - ir_variable *SubFactor01 = body.make_temp(btype, "SubFactor01"); - ir_variable *SubFactor02 = body.make_temp(btype, "SubFactor02"); - ir_variable *SubFactor03 = body.make_temp(btype, "SubFactor03"); - ir_variable *SubFactor04 = body.make_temp(btype, "SubFactor04"); - ir_variable *SubFactor05 = body.make_temp(btype, "SubFactor05"); - ir_variable *SubFactor06 = body.make_temp(btype, "SubFactor06"); - ir_variable *SubFactor07 = body.make_temp(btype, "SubFactor07"); - ir_variable *SubFactor08 = body.make_temp(btype, "SubFactor08"); - ir_variable *SubFactor09 = body.make_temp(btype, "SubFactor09"); - ir_variable *SubFactor10 = body.make_temp(btype, "SubFactor10"); - ir_variable *SubFactor11 = body.make_temp(btype, "SubFactor11"); - ir_variable *SubFactor12 = body.make_temp(btype, "SubFactor12"); - ir_variable *SubFactor13 = body.make_temp(btype, "SubFactor13"); - ir_variable *SubFactor14 = body.make_temp(btype, "SubFactor14"); - ir_variable *SubFactor15 = body.make_temp(btype, "SubFactor15"); - ir_variable *SubFactor16 = body.make_temp(btype, "SubFactor16"); - ir_variable *SubFactor17 = body.make_temp(btype, "SubFactor17"); - ir_variable *SubFactor18 = body.make_temp(btype, "SubFactor18"); - - body.emit(assign(SubFactor00, sub(mul(matrix_elt(m, 2, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 2, 3))))); - body.emit(assign(SubFactor01, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 3))))); - body.emit(assign(SubFactor02, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 2))))); - body.emit(assign(SubFactor03, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 3))))); - body.emit(assign(SubFactor04, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 2))))); - body.emit(assign(SubFactor05, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 1))))); - body.emit(assign(SubFactor06, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor07, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor08, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor09, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor10, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor11, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor12, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 1))))); - body.emit(assign(SubFactor13, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 2), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor14, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor15, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor16, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor17, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor18, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 1))))); - - ir_variable *adj_0 = body.make_temp(btype == glsl_type::float_type ? glsl_type::vec4_type : glsl_type::dvec4_type, "adj_0"); - - body.emit(assign(adj_0, - add(sub(mul(matrix_elt(m, 1, 1), SubFactor00), - mul(matrix_elt(m, 1, 2), SubFactor01)), - mul(matrix_elt(m, 1, 3), SubFactor02)), - WRITEMASK_X)); - body.emit(assign(adj_0, neg( - add(sub(mul(matrix_elt(m, 1, 0), SubFactor00), - mul(matrix_elt(m, 1, 2), SubFactor03)), - mul(matrix_elt(m, 1, 3), SubFactor04))), - WRITEMASK_Y)); - body.emit(assign(adj_0, - add(sub(mul(matrix_elt(m, 1, 0), SubFactor01), - mul(matrix_elt(m, 1, 1), SubFactor03)), - mul(matrix_elt(m, 1, 3), SubFactor05)), - WRITEMASK_Z)); - body.emit(assign(adj_0, neg( - add(sub(mul(matrix_elt(m, 1, 0), SubFactor02), - mul(matrix_elt(m, 1, 1), SubFactor04)), - mul(matrix_elt(m, 1, 2), SubFactor05))), - WRITEMASK_W)); - - body.emit(ret(dot(array_ref(m, 0), adj_0))); - - return sig; -} - -ir_function_signature * -builtin_builder::_inverse_mat2(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *m = in_var(type, "m"); - MAKE_SIG(type, avail, 1, m); - - ir_variable *adj = body.make_temp(type, "adj"); - body.emit(assign(array_ref(adj, 0), matrix_elt(m, 1, 1), 1 << 0)); - body.emit(assign(array_ref(adj, 0), neg(matrix_elt(m, 0, 1)), 1 << 1)); - body.emit(assign(array_ref(adj, 1), neg(matrix_elt(m, 1, 0)), 1 << 0)); - body.emit(assign(array_ref(adj, 1), matrix_elt(m, 0, 0), 1 << 1)); - - ir_expression *det = - sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 1)), - mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 1))); - - body.emit(ret(div(adj, det))); - return sig; -} - -ir_function_signature * -builtin_builder::_inverse_mat3(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *m = in_var(type, "m"); - const glsl_type *btype = type->get_base_type(); - MAKE_SIG(type, avail, 1, m); - - ir_variable *f11_22_21_12 = body.make_temp(btype, "f11_22_21_12"); - ir_variable *f10_22_20_12 = body.make_temp(btype, "f10_22_20_12"); - ir_variable *f10_21_20_11 = body.make_temp(btype, "f10_21_20_11"); - - body.emit(assign(f11_22_21_12, - sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)), - mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 2))))); - body.emit(assign(f10_22_20_12, - sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)), - mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 2))))); - body.emit(assign(f10_21_20_11, - sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)), - mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 1))))); - - ir_variable *adj = body.make_temp(type, "adj"); - body.emit(assign(array_ref(adj, 0), f11_22_21_12, WRITEMASK_X)); - body.emit(assign(array_ref(adj, 1), neg(f10_22_20_12), WRITEMASK_X)); - body.emit(assign(array_ref(adj, 2), f10_21_20_11, WRITEMASK_X)); - - body.emit(assign(array_ref(adj, 0), neg( - sub(mul(matrix_elt(m, 0, 1), matrix_elt(m, 2, 2)), - mul(matrix_elt(m, 2, 1), matrix_elt(m, 0, 2)))), - WRITEMASK_Y)); - body.emit(assign(array_ref(adj, 1), - sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 2, 2)), - mul(matrix_elt(m, 2, 0), matrix_elt(m, 0, 2))), - WRITEMASK_Y)); - body.emit(assign(array_ref(adj, 2), neg( - sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 2, 1)), - mul(matrix_elt(m, 2, 0), matrix_elt(m, 0, 1)))), - WRITEMASK_Y)); - - body.emit(assign(array_ref(adj, 0), - sub(mul(matrix_elt(m, 0, 1), matrix_elt(m, 1, 2)), - mul(matrix_elt(m, 1, 1), matrix_elt(m, 0, 2))), - WRITEMASK_Z)); - body.emit(assign(array_ref(adj, 1), neg( - sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 2)), - mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 2)))), - WRITEMASK_Z)); - body.emit(assign(array_ref(adj, 2), - sub(mul(matrix_elt(m, 0, 0), matrix_elt(m, 1, 1)), - mul(matrix_elt(m, 1, 0), matrix_elt(m, 0, 1))), - WRITEMASK_Z)); - - ir_expression *det = - add(sub(mul(matrix_elt(m, 0, 0), f11_22_21_12), - mul(matrix_elt(m, 0, 1), f10_22_20_12)), - mul(matrix_elt(m, 0, 2), f10_21_20_11)); - - body.emit(ret(div(adj, det))); - - return sig; -} - -ir_function_signature * -builtin_builder::_inverse_mat4(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *m = in_var(type, "m"); - const glsl_type *btype = type->get_base_type(); - MAKE_SIG(type, avail, 1, m); - - ir_variable *SubFactor00 = body.make_temp(btype, "SubFactor00"); - ir_variable *SubFactor01 = body.make_temp(btype, "SubFactor01"); - ir_variable *SubFactor02 = body.make_temp(btype, "SubFactor02"); - ir_variable *SubFactor03 = body.make_temp(btype, "SubFactor03"); - ir_variable *SubFactor04 = body.make_temp(btype, "SubFactor04"); - ir_variable *SubFactor05 = body.make_temp(btype, "SubFactor05"); - ir_variable *SubFactor06 = body.make_temp(btype, "SubFactor06"); - ir_variable *SubFactor07 = body.make_temp(btype, "SubFactor07"); - ir_variable *SubFactor08 = body.make_temp(btype, "SubFactor08"); - ir_variable *SubFactor09 = body.make_temp(btype, "SubFactor09"); - ir_variable *SubFactor10 = body.make_temp(btype, "SubFactor10"); - ir_variable *SubFactor11 = body.make_temp(btype, "SubFactor11"); - ir_variable *SubFactor12 = body.make_temp(btype, "SubFactor12"); - ir_variable *SubFactor13 = body.make_temp(btype, "SubFactor13"); - ir_variable *SubFactor14 = body.make_temp(btype, "SubFactor14"); - ir_variable *SubFactor15 = body.make_temp(btype, "SubFactor15"); - ir_variable *SubFactor16 = body.make_temp(btype, "SubFactor16"); - ir_variable *SubFactor17 = body.make_temp(btype, "SubFactor17"); - ir_variable *SubFactor18 = body.make_temp(btype, "SubFactor18"); - - body.emit(assign(SubFactor00, sub(mul(matrix_elt(m, 2, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 2, 3))))); - body.emit(assign(SubFactor01, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 3))))); - body.emit(assign(SubFactor02, sub(mul(matrix_elt(m, 2, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 2, 2))))); - body.emit(assign(SubFactor03, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 3))))); - body.emit(assign(SubFactor04, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 2))))); - body.emit(assign(SubFactor05, sub(mul(matrix_elt(m, 2, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 2, 1))))); - body.emit(assign(SubFactor06, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 2), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor07, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor08, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor09, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor10, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 2)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor11, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 3, 3)), mul(matrix_elt(m, 3, 1), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor12, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 3, 1)), mul(matrix_elt(m, 3, 0), matrix_elt(m, 1, 1))))); - body.emit(assign(SubFactor13, sub(mul(matrix_elt(m, 1, 2), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 2), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor14, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor15, sub(mul(matrix_elt(m, 1, 1), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 1), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor16, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 3)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 3))))); - body.emit(assign(SubFactor17, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 2)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 2))))); - body.emit(assign(SubFactor18, sub(mul(matrix_elt(m, 1, 0), matrix_elt(m, 2, 1)), mul(matrix_elt(m, 2, 0), matrix_elt(m, 1, 1))))); - - ir_variable *adj = body.make_temp(btype == glsl_type::float_type ? glsl_type::mat4_type : glsl_type::dmat4_type, "adj"); - body.emit(assign(array_ref(adj, 0), - add(sub(mul(matrix_elt(m, 1, 1), SubFactor00), - mul(matrix_elt(m, 1, 2), SubFactor01)), - mul(matrix_elt(m, 1, 3), SubFactor02)), - WRITEMASK_X)); - body.emit(assign(array_ref(adj, 1), neg( - add(sub(mul(matrix_elt(m, 1, 0), SubFactor00), - mul(matrix_elt(m, 1, 2), SubFactor03)), - mul(matrix_elt(m, 1, 3), SubFactor04))), - WRITEMASK_X)); - body.emit(assign(array_ref(adj, 2), - add(sub(mul(matrix_elt(m, 1, 0), SubFactor01), - mul(matrix_elt(m, 1, 1), SubFactor03)), - mul(matrix_elt(m, 1, 3), SubFactor05)), - WRITEMASK_X)); - body.emit(assign(array_ref(adj, 3), neg( - add(sub(mul(matrix_elt(m, 1, 0), SubFactor02), - mul(matrix_elt(m, 1, 1), SubFactor04)), - mul(matrix_elt(m, 1, 2), SubFactor05))), - WRITEMASK_X)); - - body.emit(assign(array_ref(adj, 0), neg( - add(sub(mul(matrix_elt(m, 0, 1), SubFactor00), - mul(matrix_elt(m, 0, 2), SubFactor01)), - mul(matrix_elt(m, 0, 3), SubFactor02))), - WRITEMASK_Y)); - body.emit(assign(array_ref(adj, 1), - add(sub(mul(matrix_elt(m, 0, 0), SubFactor00), - mul(matrix_elt(m, 0, 2), SubFactor03)), - mul(matrix_elt(m, 0, 3), SubFactor04)), - WRITEMASK_Y)); - body.emit(assign(array_ref(adj, 2), neg( - add(sub(mul(matrix_elt(m, 0, 0), SubFactor01), - mul(matrix_elt(m, 0, 1), SubFactor03)), - mul(matrix_elt(m, 0, 3), SubFactor05))), - WRITEMASK_Y)); - body.emit(assign(array_ref(adj, 3), - add(sub(mul(matrix_elt(m, 0, 0), SubFactor02), - mul(matrix_elt(m, 0, 1), SubFactor04)), - mul(matrix_elt(m, 0, 2), SubFactor05)), - WRITEMASK_Y)); - - body.emit(assign(array_ref(adj, 0), - add(sub(mul(matrix_elt(m, 0, 1), SubFactor06), - mul(matrix_elt(m, 0, 2), SubFactor07)), - mul(matrix_elt(m, 0, 3), SubFactor08)), - WRITEMASK_Z)); - body.emit(assign(array_ref(adj, 1), neg( - add(sub(mul(matrix_elt(m, 0, 0), SubFactor06), - mul(matrix_elt(m, 0, 2), SubFactor09)), - mul(matrix_elt(m, 0, 3), SubFactor10))), - WRITEMASK_Z)); - body.emit(assign(array_ref(adj, 2), - add(sub(mul(matrix_elt(m, 0, 0), SubFactor11), - mul(matrix_elt(m, 0, 1), SubFactor09)), - mul(matrix_elt(m, 0, 3), SubFactor12)), - WRITEMASK_Z)); - body.emit(assign(array_ref(adj, 3), neg( - add(sub(mul(matrix_elt(m, 0, 0), SubFactor08), - mul(matrix_elt(m, 0, 1), SubFactor10)), - mul(matrix_elt(m, 0, 2), SubFactor12))), - WRITEMASK_Z)); - - body.emit(assign(array_ref(adj, 0), neg( - add(sub(mul(matrix_elt(m, 0, 1), SubFactor13), - mul(matrix_elt(m, 0, 2), SubFactor14)), - mul(matrix_elt(m, 0, 3), SubFactor15))), - WRITEMASK_W)); - body.emit(assign(array_ref(adj, 1), - add(sub(mul(matrix_elt(m, 0, 0), SubFactor13), - mul(matrix_elt(m, 0, 2), SubFactor16)), - mul(matrix_elt(m, 0, 3), SubFactor17)), - WRITEMASK_W)); - body.emit(assign(array_ref(adj, 2), neg( - add(sub(mul(matrix_elt(m, 0, 0), SubFactor14), - mul(matrix_elt(m, 0, 1), SubFactor16)), - mul(matrix_elt(m, 0, 3), SubFactor18))), - WRITEMASK_W)); - body.emit(assign(array_ref(adj, 3), - add(sub(mul(matrix_elt(m, 0, 0), SubFactor15), - mul(matrix_elt(m, 0, 1), SubFactor17)), - mul(matrix_elt(m, 0, 2), SubFactor18)), - WRITEMASK_W)); - - ir_expression *det = - add(mul(matrix_elt(m, 0, 0), matrix_elt(adj, 0, 0)), - add(mul(matrix_elt(m, 0, 1), matrix_elt(adj, 1, 0)), - add(mul(matrix_elt(m, 0, 2), matrix_elt(adj, 2, 0)), - mul(matrix_elt(m, 0, 3), matrix_elt(adj, 3, 0))))); - - body.emit(ret(div(adj, det))); - - return sig; -} - - -ir_function_signature * -builtin_builder::_lessThan(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_less, - glsl_type::bvec(type->vector_elements), type, type); -} - -ir_function_signature * -builtin_builder::_lessThanEqual(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_gequal, - glsl_type::bvec(type->vector_elements), type, type, - true); -} - -ir_function_signature * -builtin_builder::_greaterThan(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_less, - glsl_type::bvec(type->vector_elements), type, type, - true); -} - -ir_function_signature * -builtin_builder::_greaterThanEqual(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_gequal, - glsl_type::bvec(type->vector_elements), type, type); -} - -ir_function_signature * -builtin_builder::_equal(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_equal, - glsl_type::bvec(type->vector_elements), type, type); -} - -ir_function_signature * -builtin_builder::_notEqual(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_nequal, - glsl_type::bvec(type->vector_elements), type, type); -} - -ir_function_signature * -builtin_builder::_any(const glsl_type *type) -{ - ir_variable *v = in_var(type, "v"); - MAKE_SIG(glsl_type::bool_type, always_available, 1, v); - - const unsigned vec_elem = v->type->vector_elements; - body.emit(ret(expr(ir_binop_any_nequal, v, imm(false, vec_elem)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_all(const glsl_type *type) -{ - ir_variable *v = in_var(type, "v"); - MAKE_SIG(glsl_type::bool_type, always_available, 1, v); - - const unsigned vec_elem = v->type->vector_elements; - body.emit(ret(expr(ir_binop_all_equal, v, imm(true, vec_elem)))); - - return sig; -} - -UNOP(not, ir_unop_logic_not, always_available) - -static bool -has_lod(const glsl_type *sampler_type) -{ - assert(sampler_type->is_sampler()); - - switch (sampler_type->sampler_dimensionality) { - case GLSL_SAMPLER_DIM_RECT: - case GLSL_SAMPLER_DIM_BUF: - case GLSL_SAMPLER_DIM_MS: - return false; - default: - return true; - } -} - -ir_function_signature * -builtin_builder::_textureSize(builtin_available_predicate avail, - const glsl_type *return_type, - const glsl_type *sampler_type) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - /* The sampler always exists; add optional lod later. */ - MAKE_SIG(return_type, avail, 1, s); - sig->return_precision = GLSL_PRECISION_HIGH; - - ir_texture *tex = new(mem_ctx) ir_texture(ir_txs); - tex->set_sampler(new(mem_ctx) ir_dereference_variable(s), return_type); - - if (has_lod(sampler_type)) { - ir_variable *lod = in_var(glsl_type::int_type, "lod"); - sig->parameters.push_tail(lod); - tex->lod_info.lod = var_ref(lod); - } else { - tex->lod_info.lod = imm(0u); - } - - body.emit(ret(tex)); - - return sig; -} - -ir_function_signature * -builtin_builder::_textureSamples(builtin_available_predicate avail, - const glsl_type *sampler_type) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - MAKE_SIG(glsl_type::int_type, avail, 1, s); - - ir_texture *tex = new(mem_ctx) ir_texture(ir_texture_samples); - tex->set_sampler(new(mem_ctx) ir_dereference_variable(s), glsl_type::int_type); - body.emit(ret(tex)); - - return sig; -} - -ir_function_signature * -builtin_builder::_is_sparse_texels_resident(void) -{ - ir_variable *code = in_var(glsl_type::int_type, "code"); - MAKE_SIG(glsl_type::bool_type, sparse_enabled, 1, code); - - ir_variable *retval = body.make_temp(glsl_type::bool_type, "retval"); - ir_function *f = - shader->symbols->get_function("__intrinsic_is_sparse_texels_resident"); - - body.emit(call(f, retval, sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_is_sparse_texels_resident_intrinsic(void) -{ - ir_variable *code = in_var(glsl_type::int_type, "code"); - MAKE_INTRINSIC(glsl_type::bool_type, ir_intrinsic_is_sparse_texels_resident, - sparse_enabled, 1, code); - return sig; -} - -ir_function_signature * -builtin_builder::_texture(ir_texture_opcode opcode, - builtin_available_predicate avail, - const glsl_type *return_type, - const glsl_type *sampler_type, - const glsl_type *coord_type, - int flags) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - ir_variable *P = in_var(coord_type, "P"); - /* Sparse texture return residency info. */ - const glsl_type *type = flags & TEX_SPARSE ? glsl_type::int_type : return_type; - /* The sampler and coordinate always exist; add optional parameters later. */ - MAKE_SIG(type, avail, 2, s, P); - - ir_texture *tex = new(mem_ctx) ir_texture(opcode, flags & TEX_SPARSE); - tex->set_sampler(var_ref(s), return_type); - - const int coord_size = sampler_type->coordinate_components(); - - if (coord_size == coord_type->vector_elements) { - tex->coordinate = var_ref(P); - } else { - /* The incoming coordinate also has the projector or shadow comparator, - * so we need to swizzle those away. - */ - tex->coordinate = swizzle_for_size(P, coord_size); - } - - /* The projector is always in the last component. */ - if (flags & TEX_PROJECT) - tex->projector = swizzle(P, coord_type->vector_elements - 1, 1); - - if (sampler_type->sampler_shadow) { - if (opcode == ir_tg4) { - /* gather has refz as a separate parameter, immediately after the - * coordinate - */ - ir_variable *refz = in_var(glsl_type::float_type, "refz"); - sig->parameters.push_tail(refz); - tex->shadow_comparator = var_ref(refz); - } else { - /* The shadow comparator is normally in the Z component, but a few types - * have sufficiently large coordinates that it's in W. - */ - tex->shadow_comparator = swizzle(P, MAX2(coord_size, SWIZZLE_Z), 1); - } - } - - if (opcode == ir_txl) { - ir_variable *lod = in_var(glsl_type::float_type, "lod"); - sig->parameters.push_tail(lod); - tex->lod_info.lod = var_ref(lod); - } else if (opcode == ir_txd) { - int grad_size = coord_size - (sampler_type->sampler_array ? 1 : 0); - ir_variable *dPdx = in_var(glsl_type::vec(grad_size), "dPdx"); - ir_variable *dPdy = in_var(glsl_type::vec(grad_size), "dPdy"); - sig->parameters.push_tail(dPdx); - sig->parameters.push_tail(dPdy); - tex->lod_info.grad.dPdx = var_ref(dPdx); - tex->lod_info.grad.dPdy = var_ref(dPdy); - } - - if (flags & (TEX_OFFSET | TEX_OFFSET_NONCONST)) { - int offset_size = coord_size - (sampler_type->sampler_array ? 1 : 0); - ir_variable *offset = - new(mem_ctx) ir_variable(glsl_type::ivec(offset_size), "offset", - (flags & TEX_OFFSET) ? ir_var_const_in : ir_var_function_in); - sig->parameters.push_tail(offset); - tex->offset = var_ref(offset); - } - - if (flags & TEX_OFFSET_ARRAY) { - ir_variable *offsets = - new(mem_ctx) ir_variable(glsl_type::get_array_instance(glsl_type::ivec2_type, 4), - "offsets", ir_var_const_in); - sig->parameters.push_tail(offsets); - tex->offset = var_ref(offsets); - } - - if (flags & TEX_CLAMP) { - ir_variable *clamp = in_var(glsl_type::float_type, "lodClamp"); - sig->parameters.push_tail(clamp); - tex->clamp = var_ref(clamp); - } - - ir_variable *texel = NULL; - if (flags & TEX_SPARSE) { - texel = out_var(return_type, "texel"); - sig->parameters.push_tail(texel); - } - - if (opcode == ir_tg4) { - if (flags & TEX_COMPONENT) { - ir_variable *component = - new(mem_ctx) ir_variable(glsl_type::int_type, "comp", ir_var_const_in); - sig->parameters.push_tail(component); - tex->lod_info.component = var_ref(component); - } - else { - tex->lod_info.component = imm(0); - } - } - - /* The "bias" parameter comes /after/ the "offset" parameter, which is - * inconsistent with both textureLodOffset and textureGradOffset. - */ - if (opcode == ir_txb) { - ir_variable *bias = in_var(glsl_type::float_type, "bias"); - sig->parameters.push_tail(bias); - tex->lod_info.bias = var_ref(bias); - } - - if (flags & TEX_SPARSE) { - ir_variable *r = body.make_temp(tex->type, "result"); - body.emit(assign(r, tex)); - body.emit(assign(texel, record_ref(r, "texel"))); - body.emit(ret(record_ref(r, "code"))); - } else - body.emit(ret(tex)); - - return sig; -} - -ir_function_signature * -builtin_builder::_textureCubeArrayShadow(ir_texture_opcode opcode, - builtin_available_predicate avail, - const glsl_type *sampler_type, - int flags) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - ir_variable *P = in_var(glsl_type::vec4_type, "P"); - ir_variable *compare = in_var(glsl_type::float_type, "compare"); - const glsl_type *return_type = glsl_type::float_type; - bool sparse = flags & TEX_SPARSE; - bool clamp = flags & TEX_CLAMP; - /* Sparse texture return residency info. */ - const glsl_type *type = sparse ? glsl_type::int_type : return_type; - MAKE_SIG(type, avail, 3, s, P, compare); - - ir_texture *tex = new(mem_ctx) ir_texture(opcode, sparse); - tex->set_sampler(var_ref(s), return_type); - - tex->coordinate = var_ref(P); - tex->shadow_comparator = var_ref(compare); - - if (opcode == ir_txl) { - ir_variable *lod = in_var(glsl_type::float_type, "lod"); - sig->parameters.push_tail(lod); - tex->lod_info.lod = var_ref(lod); - } - - if (clamp) { - ir_variable *lod_clamp = in_var(glsl_type::float_type, "lodClamp"); - sig->parameters.push_tail(lod_clamp); - tex->clamp = var_ref(lod_clamp); - } - - ir_variable *texel = NULL; - if (sparse) { - texel = out_var(return_type, "texel"); - sig->parameters.push_tail(texel); - } - - if (opcode == ir_txb) { - ir_variable *bias = in_var(glsl_type::float_type, "bias"); - sig->parameters.push_tail(bias); - tex->lod_info.bias = var_ref(bias); - } - - if (sparse) { - ir_variable *r = body.make_temp(tex->type, "result"); - body.emit(assign(r, tex)); - body.emit(assign(texel, record_ref(r, "texel"))); - body.emit(ret(record_ref(r, "code"))); - } else - body.emit(ret(tex)); - - return sig; -} - -ir_function_signature * -builtin_builder::_texelFetch(builtin_available_predicate avail, - const glsl_type *return_type, - const glsl_type *sampler_type, - const glsl_type *coord_type, - const glsl_type *offset_type, - bool sparse) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - ir_variable *P = in_var(coord_type, "P"); - /* Sparse texture return residency info. */ - const glsl_type *type = sparse ? glsl_type::int_type : return_type; - /* The sampler and coordinate always exist; add optional parameters later. */ - MAKE_SIG(type, avail, 2, s, P); - - ir_texture *tex = new(mem_ctx) ir_texture(ir_txf, sparse); - tex->coordinate = var_ref(P); - tex->set_sampler(var_ref(s), return_type); - - if (sampler_type->sampler_dimensionality == GLSL_SAMPLER_DIM_MS) { - ir_variable *sample = in_var(glsl_type::int_type, "sample"); - sig->parameters.push_tail(sample); - tex->lod_info.sample_index = var_ref(sample); - tex->op = ir_txf_ms; - } else if (has_lod(sampler_type)) { - ir_variable *lod = in_var(glsl_type::int_type, "lod"); - sig->parameters.push_tail(lod); - tex->lod_info.lod = var_ref(lod); - } else { - tex->lod_info.lod = imm(0u); - } - - if (offset_type != NULL) { - ir_variable *offset = - new(mem_ctx) ir_variable(offset_type, "offset", ir_var_const_in); - sig->parameters.push_tail(offset); - tex->offset = var_ref(offset); - } - - if (sparse) { - ir_variable *texel = out_var(return_type, "texel"); - sig->parameters.push_tail(texel); - - ir_variable *r = body.make_temp(tex->type, "result"); - body.emit(assign(r, tex)); - body.emit(assign(texel, record_ref(r, "texel"))); - body.emit(ret(record_ref(r, "code"))); - } else - body.emit(ret(tex)); - - return sig; -} - -ir_function_signature * -builtin_builder::_EmitVertex() -{ - MAKE_SIG(glsl_type::void_type, gs_only, 0); - - ir_rvalue *stream = new(mem_ctx) ir_constant(0, 1); - body.emit(new(mem_ctx) ir_emit_vertex(stream)); - - return sig; -} - -ir_function_signature * -builtin_builder::_EmitStreamVertex(builtin_available_predicate avail, - const glsl_type *stream_type) -{ - /* Section 8.12 (Geometry Shader Functions) of the GLSL 4.0 spec says: - * - * "Emit the current values of output variables to the current output - * primitive on stream stream. The argument to stream must be a constant - * integral expression." - */ - ir_variable *stream = - new(mem_ctx) ir_variable(stream_type, "stream", ir_var_const_in); - - MAKE_SIG(glsl_type::void_type, avail, 1, stream); - - body.emit(new(mem_ctx) ir_emit_vertex(var_ref(stream))); - - return sig; -} - -ir_function_signature * -builtin_builder::_EndPrimitive() -{ - MAKE_SIG(glsl_type::void_type, gs_only, 0); - - ir_rvalue *stream = new(mem_ctx) ir_constant(0, 1); - body.emit(new(mem_ctx) ir_end_primitive(stream)); - - return sig; -} - -ir_function_signature * -builtin_builder::_EndStreamPrimitive(builtin_available_predicate avail, - const glsl_type *stream_type) -{ - /* Section 8.12 (Geometry Shader Functions) of the GLSL 4.0 spec says: - * - * "Completes the current output primitive on stream stream and starts - * a new one. The argument to stream must be a constant integral - * expression." - */ - ir_variable *stream = - new(mem_ctx) ir_variable(stream_type, "stream", ir_var_const_in); - - MAKE_SIG(glsl_type::void_type, avail, 1, stream); - - body.emit(new(mem_ctx) ir_end_primitive(var_ref(stream))); - - return sig; -} - -ir_function_signature * -builtin_builder::_barrier() -{ - MAKE_SIG(glsl_type::void_type, barrier_supported, 0); - - body.emit(new(mem_ctx) ir_barrier()); - return sig; -} - -ir_function_signature * -builtin_builder::_textureQueryLod(builtin_available_predicate avail, - const glsl_type *sampler_type, - const glsl_type *coord_type) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - ir_variable *coord = in_var(coord_type, "coord"); - /* The sampler and coordinate always exist; add optional parameters later. */ - MAKE_SIG(glsl_type::vec2_type, avail, 2, s, coord); - - ir_texture *tex = new(mem_ctx) ir_texture(ir_lod); - tex->coordinate = var_ref(coord); - tex->set_sampler(var_ref(s), glsl_type::vec2_type); - - body.emit(ret(tex)); - - return sig; -} - -ir_function_signature * -builtin_builder::_textureQueryLevels(builtin_available_predicate avail, - const glsl_type *sampler_type) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - const glsl_type *return_type = glsl_type::int_type; - MAKE_SIG(return_type, avail, 1, s); - - ir_texture *tex = new(mem_ctx) ir_texture(ir_query_levels); - tex->set_sampler(var_ref(s), return_type); - - body.emit(ret(tex)); - - return sig; -} - -ir_function_signature * -builtin_builder::_textureSamplesIdentical(builtin_available_predicate avail, - const glsl_type *sampler_type, - const glsl_type *coord_type) -{ - ir_variable *s = in_var(sampler_type, "sampler"); - ir_variable *P = in_var(coord_type, "P"); - const glsl_type *return_type = glsl_type::bool_type; - MAKE_SIG(return_type, avail, 2, s, P); - - ir_texture *tex = new(mem_ctx) ir_texture(ir_samples_identical); - tex->coordinate = var_ref(P); - tex->set_sampler(var_ref(s), return_type); - - body.emit(ret(tex)); - - return sig; -} - -UNOP(dFdx, ir_unop_dFdx, derivatives) -UNOP(dFdxCoarse, ir_unop_dFdx_coarse, derivative_control) -UNOP(dFdxFine, ir_unop_dFdx_fine, derivative_control) -UNOP(dFdy, ir_unop_dFdy, derivatives) -UNOP(dFdyCoarse, ir_unop_dFdy_coarse, derivative_control) -UNOP(dFdyFine, ir_unop_dFdy_fine, derivative_control) - -ir_function_signature * -builtin_builder::_fwidth(const glsl_type *type) -{ - ir_variable *p = in_var(type, "p"); - MAKE_SIG(type, derivatives, 1, p); - - body.emit(ret(add(abs(expr(ir_unop_dFdx, p)), abs(expr(ir_unop_dFdy, p))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_fwidthCoarse(const glsl_type *type) -{ - ir_variable *p = in_var(type, "p"); - MAKE_SIG(type, derivative_control, 1, p); - - body.emit(ret(add(abs(expr(ir_unop_dFdx_coarse, p)), - abs(expr(ir_unop_dFdy_coarse, p))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_fwidthFine(const glsl_type *type) -{ - ir_variable *p = in_var(type, "p"); - MAKE_SIG(type, derivative_control, 1, p); - - body.emit(ret(add(abs(expr(ir_unop_dFdx_fine, p)), - abs(expr(ir_unop_dFdy_fine, p))))); - - return sig; -} - -ir_function_signature * -builtin_builder::_noise1(const glsl_type *type) -{ - /* From the GLSL 4.60 specification: - * - * "The noise functions noise1, noise2, noise3, and noise4 have been - * deprecated starting with version 4.4 of GLSL. When not generating - * SPIR-V they are defined to return the value 0.0 or a vector whose - * components are all 0.0. When generating SPIR-V the noise functions - * are not declared and may not be used." - * - * In earlier versions of the GLSL specification attempt to define some - * sort of statistical noise function. However, the function's - * characteristics have always been such that always returning 0 is - * valid and Mesa has always returned 0 for noise on most drivers. - */ - ir_variable *p = in_var(type, "p"); - MAKE_SIG(glsl_type::float_type, v110, 1, p); - body.emit(ret(imm(glsl_type::float_type, ir_constant_data()))); - return sig; -} - -ir_function_signature * -builtin_builder::_noise2(const glsl_type *type) -{ - /* See builtin_builder::_noise1 */ - ir_variable *p = in_var(type, "p"); - MAKE_SIG(glsl_type::vec2_type, v110, 1, p); - body.emit(ret(imm(glsl_type::vec2_type, ir_constant_data()))); - return sig; -} - -ir_function_signature * -builtin_builder::_noise3(const glsl_type *type) -{ - /* See builtin_builder::_noise1 */ - ir_variable *p = in_var(type, "p"); - MAKE_SIG(glsl_type::vec3_type, v110, 1, p); - body.emit(ret(imm(glsl_type::vec3_type, ir_constant_data()))); - return sig; -} - -ir_function_signature * -builtin_builder::_noise4(const glsl_type *type) -{ - /* See builtin_builder::_noise1 */ - ir_variable *p = in_var(type, "p"); - MAKE_SIG(glsl_type::vec4_type, v110, 1, p); - body.emit(ret(imm(glsl_type::vec4_type, ir_constant_data()))); - return sig; -} - -ir_function_signature * -builtin_builder::_bitfieldExtract(const glsl_type *type) -{ - bool is_uint = type->base_type == GLSL_TYPE_UINT; - ir_variable *value = in_var(type, "value"); - ir_variable *offset = in_var(glsl_type::int_type, "offset"); - ir_variable *bits = in_var(glsl_type::int_type, "bits"); - MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 3, value, offset, - bits); - - operand cast_offset = is_uint ? i2u(offset) : operand(offset); - operand cast_bits = is_uint ? i2u(bits) : operand(bits); - - body.emit(ret(expr(ir_triop_bitfield_extract, value, - swizzle(cast_offset, SWIZZLE_XXXX, type->vector_elements), - swizzle(cast_bits, SWIZZLE_XXXX, type->vector_elements)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_bitfieldInsert(const glsl_type *type) -{ - bool is_uint = type->base_type == GLSL_TYPE_UINT; - ir_variable *base = in_var(type, "base"); - ir_variable *insert = in_var(type, "insert"); - ir_variable *offset = in_var(glsl_type::int_type, "offset"); - ir_variable *bits = in_var(glsl_type::int_type, "bits"); - MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 4, base, insert, - offset, bits); - - operand cast_offset = is_uint ? i2u(offset) : operand(offset); - operand cast_bits = is_uint ? i2u(bits) : operand(bits); - - body.emit(ret(bitfield_insert(base, insert, - swizzle(cast_offset, SWIZZLE_XXXX, type->vector_elements), - swizzle(cast_bits, SWIZZLE_XXXX, type->vector_elements)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_bitfieldReverse(const glsl_type *type) -{ - ir_variable *x = in_highp_var(type, "x"); - MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 1, x); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_unop_bitfield_reverse, x))); - return sig; -} - -ir_function_signature * -builtin_builder::_bitCount(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - MAKE_SIG(glsl_type::ivec(type->vector_elements), gpu_shader5_or_es31_or_integer_functions, 1, x); - sig->return_precision = GLSL_PRECISION_LOW; - body.emit(ret(expr(ir_unop_bit_count, x))); - return sig; -} - -ir_function_signature * -builtin_builder::_findLSB(const glsl_type *type) -{ - ir_variable *x = in_highp_var(type, "x"); - MAKE_SIG(glsl_type::ivec(type->vector_elements), gpu_shader5_or_es31_or_integer_functions, 1, x); - sig->return_precision = GLSL_PRECISION_LOW; - body.emit(ret(expr(ir_unop_find_lsb, x))); - return sig; -} - -ir_function_signature * -builtin_builder::_findMSB(const glsl_type *type) -{ - ir_variable *x = in_highp_var(type, "x"); - MAKE_SIG(glsl_type::ivec(type->vector_elements), gpu_shader5_or_es31_or_integer_functions, 1, x); - sig->return_precision = GLSL_PRECISION_LOW; - body.emit(ret(expr(ir_unop_find_msb, x))); - return sig; -} - -ir_function_signature * -builtin_builder::_countLeadingZeros(builtin_available_predicate avail, - const glsl_type *type) -{ - return unop(avail, ir_unop_clz, - glsl_type::uvec(type->vector_elements), type); -} - -ir_function_signature * -builtin_builder::_countTrailingZeros(builtin_available_predicate avail, - const glsl_type *type) -{ - ir_variable *a = in_var(type, "a"); - MAKE_SIG(glsl_type::uvec(type->vector_elements), avail, 1, a); - - body.emit(ret(ir_builder::min2( - ir_builder::i2u(ir_builder::expr(ir_unop_find_lsb, a)), - imm(32u)))); - - return sig; -} - -ir_function_signature * -builtin_builder::_fma(builtin_available_predicate avail, const glsl_type *type) -{ - ir_variable *a = in_var(type, "a"); - ir_variable *b = in_var(type, "b"); - ir_variable *c = in_var(type, "c"); - MAKE_SIG(type, avail, 3, a, b, c); - - body.emit(ret(ir_builder::fma(a, b, c))); - - return sig; -} - -ir_function_signature * -builtin_builder::_ldexp(const glsl_type *x_type, const glsl_type *exp_type) -{ - ir_variable *x = in_highp_var(x_type, "x"); - ir_variable *y = in_highp_var(exp_type, "y"); - MAKE_SIG(x_type, x_type->is_double() ? fp64 : gpu_shader5_or_es31_or_integer_functions, 2, x, y); - sig->return_precision = GLSL_PRECISION_HIGH; - body.emit(ret(expr(ir_binop_ldexp, x, y))); - return sig; -} - -ir_function_signature * -builtin_builder::_frexp(const glsl_type *x_type, const glsl_type *exp_type) -{ - ir_variable *x = in_highp_var(x_type, "x"); - ir_variable *exponent = out_var(exp_type, "exp"); - MAKE_SIG(x_type, x_type->is_double() ? fp64 : gpu_shader5_or_es31_or_integer_functions, - 2, x, exponent); - sig->return_precision = GLSL_PRECISION_HIGH; - - body.emit(assign(exponent, expr(ir_unop_frexp_exp, x))); - - body.emit(ret(expr(ir_unop_frexp_sig, x))); - return sig; -} - -ir_function_signature * -builtin_builder::_uaddCarry(const glsl_type *type) -{ - ir_variable *x = in_highp_var(type, "x"); - ir_variable *y = in_highp_var(type, "y"); - ir_variable *carry = out_lowp_var(type, "carry"); - MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 3, x, y, carry); - sig->return_precision = GLSL_PRECISION_HIGH; - - body.emit(assign(carry, ir_builder::carry(x, y))); - body.emit(ret(add(x, y))); - - return sig; -} - -ir_function_signature * -builtin_builder::_addSaturate(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_add_sat, type, type, type); -} - -ir_function_signature * -builtin_builder::_usubBorrow(const glsl_type *type) -{ - ir_variable *x = in_highp_var(type, "x"); - ir_variable *y = in_highp_var(type, "y"); - ir_variable *borrow = out_lowp_var(type, "borrow"); - MAKE_SIG(type, gpu_shader5_or_es31_or_integer_functions, 3, x, y, borrow); - sig->return_precision = GLSL_PRECISION_HIGH; - - body.emit(assign(borrow, ir_builder::borrow(x, y))); - body.emit(ret(sub(x, y))); - - return sig; -} - -ir_function_signature * -builtin_builder::_subtractSaturate(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_sub_sat, type, type, type); -} - -ir_function_signature * -builtin_builder::_absoluteDifference(builtin_available_predicate avail, - const glsl_type *type) -{ - /* absoluteDifference returns an unsigned type that has the same number of - * bits and number of vector elements as the type of the operands. - */ - return binop(avail, ir_binop_abs_sub, - glsl_type::get_instance(glsl_unsigned_base_type_of(type->base_type), - type->vector_elements, 1), - type, type); -} - -ir_function_signature * -builtin_builder::_average(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_avg, type, type, type); -} - -ir_function_signature * -builtin_builder::_averageRounded(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_avg_round, type, type, type); -} - -/** - * For both imulExtended() and umulExtended() built-ins. - */ -ir_function_signature * -builtin_builder::_mulExtended(const glsl_type *type) -{ - const glsl_type *mul_type, *unpack_type; - ir_expression_operation unpack_op; - - if (type->base_type == GLSL_TYPE_INT) { - unpack_op = ir_unop_unpack_int_2x32; - mul_type = glsl_type::get_instance(GLSL_TYPE_INT64, type->vector_elements, 1); - unpack_type = glsl_type::ivec2_type; - } else { - unpack_op = ir_unop_unpack_uint_2x32; - mul_type = glsl_type::get_instance(GLSL_TYPE_UINT64, type->vector_elements, 1); - unpack_type = glsl_type::uvec2_type; - } - - ir_variable *x = in_highp_var(type, "x"); - ir_variable *y = in_highp_var(type, "y"); - ir_variable *msb = out_highp_var(type, "msb"); - ir_variable *lsb = out_highp_var(type, "lsb"); - MAKE_SIG(glsl_type::void_type, gpu_shader5_or_es31_or_integer_functions, 4, x, y, msb, lsb); - - ir_variable *unpack_val = body.make_temp(unpack_type, "_unpack_val"); - - ir_expression *mul_res = new(mem_ctx) ir_expression(ir_binop_mul, mul_type, - new(mem_ctx)ir_dereference_variable(x), - new(mem_ctx)ir_dereference_variable(y)); - - if (type->vector_elements == 1) { - body.emit(assign(unpack_val, expr(unpack_op, mul_res))); - body.emit(assign(msb, swizzle_y(unpack_val))); - body.emit(assign(lsb, swizzle_x(unpack_val))); - } else { - for (int i = 0; i < type->vector_elements; i++) { - body.emit(assign(unpack_val, expr(unpack_op, swizzle(mul_res, i, 1)))); - body.emit(assign(array_ref(msb, i), swizzle_y(unpack_val))); - body.emit(assign(array_ref(lsb, i), swizzle_x(unpack_val))); - } - } - - return sig; -} - -ir_function_signature * -builtin_builder::_multiply32x16(builtin_available_predicate avail, - const glsl_type *type) -{ - return binop(avail, ir_binop_mul_32x16, type, type, type); -} - -ir_function_signature * -builtin_builder::_interpolateAtCentroid(const glsl_type *type) -{ - ir_variable *interpolant = in_var(type, "interpolant"); - interpolant->data.must_be_shader_input = 1; - MAKE_SIG(type, fs_interpolate_at, 1, interpolant); - - body.emit(ret(interpolate_at_centroid(interpolant))); - - return sig; -} - -ir_function_signature * -builtin_builder::_interpolateAtOffset(const glsl_type *type) -{ - ir_variable *interpolant = in_var(type, "interpolant"); - interpolant->data.must_be_shader_input = 1; - ir_variable *offset = in_var(glsl_type::vec2_type, "offset"); - MAKE_SIG(type, fs_interpolate_at, 2, interpolant, offset); - - body.emit(ret(interpolate_at_offset(interpolant, offset))); - - return sig; -} - -ir_function_signature * -builtin_builder::_interpolateAtSample(const glsl_type *type) -{ - ir_variable *interpolant = in_var(type, "interpolant"); - interpolant->data.must_be_shader_input = 1; - ir_variable *sample_num = in_var(glsl_type::int_type, "sample_num"); - MAKE_SIG(type, fs_interpolate_at, 2, interpolant, sample_num); - - body.emit(ret(interpolate_at_sample(interpolant, sample_num))); - - return sig; -} - -/* The highp isn't specified in the built-in function descriptions, but in the - * atomic counter description: "The default precision of all atomic types is - * highp. It is an error to declare an atomic type with a different precision or - * to specify the default precision for an atomic type to be lowp or mediump." - */ -ir_function_signature * -builtin_builder::_atomic_counter_intrinsic(builtin_available_predicate avail, - enum ir_intrinsic_id id) -{ - ir_variable *counter = in_highp_var(glsl_type::atomic_uint_type, "counter"); - MAKE_INTRINSIC(glsl_type::uint_type, id, avail, 1, counter); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_counter_intrinsic1(builtin_available_predicate avail, - enum ir_intrinsic_id id) -{ - ir_variable *counter = in_highp_var(glsl_type::atomic_uint_type, "counter"); - ir_variable *data = in_var(glsl_type::uint_type, "data"); - MAKE_INTRINSIC(glsl_type::uint_type, id, avail, 2, counter, data); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_counter_intrinsic2(builtin_available_predicate avail, - enum ir_intrinsic_id id) -{ - ir_variable *counter = in_highp_var(glsl_type::atomic_uint_type, "counter"); - ir_variable *compare = in_var(glsl_type::uint_type, "compare"); - ir_variable *data = in_var(glsl_type::uint_type, "data"); - MAKE_INTRINSIC(glsl_type::uint_type, id, avail, 3, counter, compare, data); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_intrinsic2(builtin_available_predicate avail, - const glsl_type *type, - enum ir_intrinsic_id id) -{ - ir_variable *atomic = in_var(type, "atomic"); - ir_variable *data = in_var(type, "data"); - MAKE_INTRINSIC(type, id, avail, 2, atomic, data); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_intrinsic3(builtin_available_predicate avail, - const glsl_type *type, - enum ir_intrinsic_id id) -{ - ir_variable *atomic = in_var(type, "atomic"); - ir_variable *data1 = in_var(type, "data1"); - ir_variable *data2 = in_var(type, "data2"); - MAKE_INTRINSIC(type, id, avail, 3, atomic, data1, data2); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_counter_op(const char *intrinsic, - builtin_available_predicate avail) -{ - ir_variable *counter = in_highp_var(glsl_type::atomic_uint_type, "atomic_counter"); - MAKE_SIG(glsl_type::uint_type, avail, 1, counter); - - ir_variable *retval = body.make_temp(glsl_type::uint_type, "atomic_retval"); - body.emit(call(shader->symbols->get_function(intrinsic), retval, - sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_counter_op1(const char *intrinsic, - builtin_available_predicate avail) -{ - ir_variable *counter = in_highp_var(glsl_type::atomic_uint_type, "atomic_counter"); - ir_variable *data = in_var(glsl_type::uint_type, "data"); - MAKE_SIG(glsl_type::uint_type, avail, 2, counter, data); - - ir_variable *retval = body.make_temp(glsl_type::uint_type, "atomic_retval"); - - /* Instead of generating an __intrinsic_atomic_sub, generate an - * __intrinsic_atomic_add with the data parameter negated. - */ - if (strcmp("__intrinsic_atomic_sub", intrinsic) == 0) { - ir_variable *const neg_data = - body.make_temp(glsl_type::uint_type, "neg_data"); - - body.emit(assign(neg_data, neg(data))); - - exec_list parameters; - - parameters.push_tail(new(mem_ctx) ir_dereference_variable(counter)); - parameters.push_tail(new(mem_ctx) ir_dereference_variable(neg_data)); - - ir_function *const func = - shader->symbols->get_function("__intrinsic_atomic_add"); - ir_instruction *const c = call(func, retval, parameters); - - assert(c != NULL); - assert(parameters.is_empty()); - - body.emit(c); - } else { - body.emit(call(shader->symbols->get_function(intrinsic), retval, - sig->parameters)); - } - - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_counter_op2(const char *intrinsic, - builtin_available_predicate avail) -{ - ir_variable *counter = in_highp_var(glsl_type::atomic_uint_type, "atomic_counter"); - ir_variable *compare = in_var(glsl_type::uint_type, "compare"); - ir_variable *data = in_var(glsl_type::uint_type, "data"); - MAKE_SIG(glsl_type::uint_type, avail, 3, counter, compare, data); - - ir_variable *retval = body.make_temp(glsl_type::uint_type, "atomic_retval"); - body.emit(call(shader->symbols->get_function(intrinsic), retval, - sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_op2(const char *intrinsic, - builtin_available_predicate avail, - const glsl_type *type) -{ - ir_variable *atomic = in_var(type, "atomic_var"); - ir_variable *data = in_var(type, "atomic_data"); - MAKE_SIG(type, avail, 2, atomic, data); - - atomic->data.implicit_conversion_prohibited = true; - - ir_variable *retval = body.make_temp(type, "atomic_retval"); - body.emit(call(shader->symbols->get_function(intrinsic), retval, - sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_atomic_op3(const char *intrinsic, - builtin_available_predicate avail, - const glsl_type *type) -{ - ir_variable *atomic = in_var(type, "atomic_var"); - ir_variable *data1 = in_var(type, "atomic_data1"); - ir_variable *data2 = in_var(type, "atomic_data2"); - MAKE_SIG(type, avail, 3, atomic, data1, data2); - - atomic->data.implicit_conversion_prohibited = true; - - ir_variable *retval = body.make_temp(type, "atomic_retval"); - body.emit(call(shader->symbols->get_function(intrinsic), retval, - sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_min3(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - ir_variable *y = in_var(type, "y"); - ir_variable *z = in_var(type, "z"); - MAKE_SIG(type, shader_trinary_minmax, 3, x, y, z); - - ir_expression *min3 = min2(x, min2(y,z)); - body.emit(ret(min3)); - - return sig; -} - -ir_function_signature * -builtin_builder::_max3(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - ir_variable *y = in_var(type, "y"); - ir_variable *z = in_var(type, "z"); - MAKE_SIG(type, shader_trinary_minmax, 3, x, y, z); - - ir_expression *max3 = max2(x, max2(y,z)); - body.emit(ret(max3)); - - return sig; -} - -ir_function_signature * -builtin_builder::_mid3(const glsl_type *type) -{ - ir_variable *x = in_var(type, "x"); - ir_variable *y = in_var(type, "y"); - ir_variable *z = in_var(type, "z"); - MAKE_SIG(type, shader_trinary_minmax, 3, x, y, z); - - ir_expression *mid3 = max2(min2(x, y), max2(min2(x, z), min2(y, z))); - body.emit(ret(mid3)); - - return sig; -} - -static builtin_available_predicate -get_image_available_predicate(const glsl_type *type, unsigned flags) -{ - if ((flags & IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE) && - type->sampled_type == GLSL_TYPE_FLOAT) - return shader_image_atomic_exchange_float; - - if ((flags & IMAGE_FUNCTION_AVAIL_ATOMIC_ADD) && - type->sampled_type == GLSL_TYPE_FLOAT) - return shader_image_atomic_add_float; - - else if (flags & (IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE | - IMAGE_FUNCTION_AVAIL_ATOMIC_ADD | - IMAGE_FUNCTION_AVAIL_ATOMIC)) - return shader_image_atomic; - - else if (flags & IMAGE_FUNCTION_EXT_ONLY) - return shader_image_load_store_ext; - - else if (flags & IMAGE_FUNCTION_SPARSE) - return shader_image_load_store_and_sparse; - - else - return shader_image_load_store; -} - -ir_function_signature * -builtin_builder::_image_prototype(const glsl_type *image_type, - unsigned num_arguments, - unsigned flags) -{ - const glsl_type *data_type = glsl_type::get_instance( - image_type->sampled_type, - (flags & IMAGE_FUNCTION_HAS_VECTOR_DATA_TYPE ? 4 : 1), - 1); - - const glsl_type *ret_type; - if (flags & IMAGE_FUNCTION_RETURNS_VOID) - ret_type = glsl_type::void_type; - else if (flags & IMAGE_FUNCTION_SPARSE) { - if (flags & IMAGE_FUNCTION_EMIT_STUB) - ret_type = glsl_type::int_type; - else { - /* code holds residency info */ - glsl_struct_field fields[2] = { - glsl_struct_field(glsl_type::int_type, "code"), - glsl_struct_field(data_type, "texel"), - }; - ret_type = glsl_type::get_struct_instance(fields, 2, "struct"); - } - } else - ret_type = data_type; - - /* Addressing arguments that are always present. */ - ir_variable *image = in_var(image_type, "image"); - ir_variable *coord = in_var( - glsl_type::ivec(image_type->coordinate_components()), "coord"); - - ir_function_signature *sig = new_sig( - ret_type, get_image_available_predicate(image_type, flags), - 2, image, coord); - - /* Sample index for multisample images. */ - if (image_type->sampler_dimensionality == GLSL_SAMPLER_DIM_MS) - sig->parameters.push_tail(in_var(glsl_type::int_type, "sample")); - - /* Data arguments. */ - for (unsigned i = 0; i < num_arguments; ++i) { - char *arg_name = ralloc_asprintf(NULL, "arg%d", i); - sig->parameters.push_tail(in_var(data_type, arg_name)); - ralloc_free(arg_name); - } - - /* Set the maximal set of qualifiers allowed for this image - * built-in. Function calls with arguments having fewer - * qualifiers than present in the prototype are allowed by the - * spec, but not with more, i.e. this will make the compiler - * accept everything that needs to be accepted, and reject cases - * like loads from write-only or stores to read-only images. - */ - image->data.memory_read_only = (flags & IMAGE_FUNCTION_READ_ONLY) != 0; - image->data.memory_write_only = (flags & IMAGE_FUNCTION_WRITE_ONLY) != 0; - image->data.memory_coherent = true; - image->data.memory_volatile = true; - image->data.memory_restrict = true; - - return sig; -} - -ir_function_signature * -builtin_builder::_image_size_prototype(const glsl_type *image_type, - unsigned /* num_arguments */, - unsigned /* flags */) -{ - const glsl_type *ret_type; - unsigned num_components = image_type->coordinate_components(); - - /* From the ARB_shader_image_size extension: - * "Cube images return the dimensions of one face." - */ - if (image_type->sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE && - !image_type->sampler_array) { - num_components = 2; - } - - /* FIXME: Add the highp precision qualifier for GLES 3.10 when it is - * supported by mesa. - */ - ret_type = glsl_type::get_instance(GLSL_TYPE_INT, num_components, 1); - - ir_variable *image = in_var(image_type, "image"); - ir_function_signature *sig = new_sig(ret_type, shader_image_size, 1, image); - - /* Set the maximal set of qualifiers allowed for this image - * built-in. Function calls with arguments having fewer - * qualifiers than present in the prototype are allowed by the - * spec, but not with more, i.e. this will make the compiler - * accept everything that needs to be accepted, and reject cases - * like loads from write-only or stores to read-only images. - */ - image->data.memory_read_only = true; - image->data.memory_write_only = true; - image->data.memory_coherent = true; - image->data.memory_volatile = true; - image->data.memory_restrict = true; - - return sig; -} - -ir_function_signature * -builtin_builder::_image_samples_prototype(const glsl_type *image_type, - unsigned /* num_arguments */, - unsigned /* flags */) -{ - ir_variable *image = in_var(image_type, "image"); - ir_function_signature *sig = - new_sig(glsl_type::int_type, shader_samples, 1, image); - - /* Set the maximal set of qualifiers allowed for this image - * built-in. Function calls with arguments having fewer - * qualifiers than present in the prototype are allowed by the - * spec, but not with more, i.e. this will make the compiler - * accept everything that needs to be accepted, and reject cases - * like loads from write-only or stores to read-only images. - */ - image->data.memory_read_only = true; - image->data.memory_write_only = true; - image->data.memory_coherent = true; - image->data.memory_volatile = true; - image->data.memory_restrict = true; - - return sig; -} - -ir_function_signature * -builtin_builder::_image(image_prototype_ctr prototype, - const glsl_type *image_type, - const char *intrinsic_name, - unsigned num_arguments, - unsigned flags, - enum ir_intrinsic_id id) -{ - ir_function_signature *sig = (this->*prototype)(image_type, - num_arguments, flags); - - if (flags & IMAGE_FUNCTION_EMIT_STUB) { - ir_factory body(&sig->body, mem_ctx); - ir_function *f = shader->symbols->get_function(intrinsic_name); - - if (flags & IMAGE_FUNCTION_RETURNS_VOID) { - body.emit(call(f, NULL, sig->parameters)); - } else if (flags & IMAGE_FUNCTION_SPARSE) { - ir_function_signature *intr_sig = - f->exact_matching_signature(NULL, &sig->parameters); - assert(intr_sig); - - ir_variable *ret_val = body.make_temp(intr_sig->return_type, "_ret_val"); - ir_dereference_record *texel_field = record_ref(ret_val, "texel"); - ir_variable *texel = out_var(texel_field->type, "texel"); - - /* Add texel param to builtin function after call intrinsic function - * because they have different prototype: - * struct {int code; gvec4 texel;} __intrinsic_image_sparse_load(in) - * int sparseImageLoad(in, out texel) - */ - body.emit(call(f, ret_val, sig->parameters)); - sig->parameters.push_tail(texel); - - body.emit(assign(texel, texel_field)); - body.emit(ret(record_ref(ret_val, "code"))); - } else { - ir_variable *ret_val = - body.make_temp(sig->return_type, "_ret_val"); - /* all non-void image functions return highp, so make our temporary and return - * value in the signature highp. - */ - ret_val->data.precision = GLSL_PRECISION_HIGH; - body.emit(call(f, ret_val, sig->parameters)); - body.emit(ret(ret_val)); - } - - sig->is_defined = true; - - } else { - sig->intrinsic_id = id; - } - sig->return_precision = GLSL_PRECISION_HIGH; - - return sig; -} - -ir_function_signature * -builtin_builder::_memory_barrier_intrinsic(builtin_available_predicate avail, - enum ir_intrinsic_id id) -{ - MAKE_INTRINSIC(glsl_type::void_type, id, avail, 0); - return sig; -} - -ir_function_signature * -builtin_builder::_memory_barrier(const char *intrinsic_name, - builtin_available_predicate avail) -{ - MAKE_SIG(glsl_type::void_type, avail, 0); - body.emit(call(shader->symbols->get_function(intrinsic_name), - NULL, sig->parameters)); - return sig; -} - -ir_function_signature * -builtin_builder::_ballot_intrinsic() -{ - ir_variable *value = in_var(glsl_type::bool_type, "value"); - MAKE_INTRINSIC(glsl_type::uint64_t_type, ir_intrinsic_ballot, shader_ballot, - 1, value); - return sig; -} - -ir_function_signature * -builtin_builder::_ballot() -{ - ir_variable *value = in_var(glsl_type::bool_type, "value"); - - MAKE_SIG(glsl_type::uint64_t_type, shader_ballot, 1, value); - ir_variable *retval = body.make_temp(glsl_type::uint64_t_type, "retval"); - - body.emit(call(shader->symbols->get_function("__intrinsic_ballot"), - retval, sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_read_first_invocation_intrinsic(const glsl_type *type) -{ - ir_variable *value = in_var(type, "value"); - MAKE_INTRINSIC(type, ir_intrinsic_read_first_invocation, shader_ballot, - 1, value); - return sig; -} - -ir_function_signature * -builtin_builder::_read_first_invocation(const glsl_type *type) -{ - ir_variable *value = in_var(type, "value"); - - MAKE_SIG(type, shader_ballot, 1, value); - ir_variable *retval = body.make_temp(type, "retval"); - - body.emit(call(shader->symbols->get_function("__intrinsic_read_first_invocation"), - retval, sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_read_invocation_intrinsic(const glsl_type *type) -{ - ir_variable *value = in_var(type, "value"); - ir_variable *invocation = in_var(glsl_type::uint_type, "invocation"); - MAKE_INTRINSIC(type, ir_intrinsic_read_invocation, shader_ballot, - 2, value, invocation); - return sig; -} - -ir_function_signature * -builtin_builder::_read_invocation(const glsl_type *type) -{ - ir_variable *value = in_var(type, "value"); - ir_variable *invocation = in_var(glsl_type::uint_type, "invocation"); - - MAKE_SIG(type, shader_ballot, 2, value, invocation); - ir_variable *retval = body.make_temp(type, "retval"); - - body.emit(call(shader->symbols->get_function("__intrinsic_read_invocation"), - retval, sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_invocation_interlock_intrinsic(builtin_available_predicate avail, - enum ir_intrinsic_id id) -{ - MAKE_INTRINSIC(glsl_type::void_type, id, avail, 0); - return sig; -} - -ir_function_signature * -builtin_builder::_invocation_interlock(const char *intrinsic_name, - builtin_available_predicate avail) -{ - MAKE_SIG(glsl_type::void_type, avail, 0); - body.emit(call(shader->symbols->get_function(intrinsic_name), - NULL, sig->parameters)); - return sig; -} - -ir_function_signature * -builtin_builder::_shader_clock_intrinsic(builtin_available_predicate avail, - const glsl_type *type) -{ - MAKE_INTRINSIC(type, ir_intrinsic_shader_clock, avail, 0); - return sig; -} - -ir_function_signature * -builtin_builder::_shader_clock(builtin_available_predicate avail, - const glsl_type *type) -{ - MAKE_SIG(type, avail, 0); - - ir_variable *retval = body.make_temp(glsl_type::uvec2_type, "clock_retval"); - - body.emit(call(shader->symbols->get_function("__intrinsic_shader_clock"), - retval, sig->parameters)); - - if (type == glsl_type::uint64_t_type) { - body.emit(ret(expr(ir_unop_pack_uint_2x32, retval))); - } else { - body.emit(ret(retval)); - } - - return sig; -} - -ir_function_signature * -builtin_builder::_vote_intrinsic(builtin_available_predicate avail, - enum ir_intrinsic_id id) -{ - ir_variable *value = in_var(glsl_type::bool_type, "value"); - MAKE_INTRINSIC(glsl_type::bool_type, id, avail, 1, value); - return sig; -} - -ir_function_signature * -builtin_builder::_vote(const char *intrinsic_name, - builtin_available_predicate avail) -{ - ir_variable *value = in_var(glsl_type::bool_type, "value"); - - MAKE_SIG(glsl_type::bool_type, avail, 1, value); - - ir_variable *retval = body.make_temp(glsl_type::bool_type, "retval"); - - body.emit(call(shader->symbols->get_function(intrinsic_name), - retval, sig->parameters)); - body.emit(ret(retval)); - return sig; -} - -ir_function_signature * -builtin_builder::_helper_invocation_intrinsic() -{ - MAKE_INTRINSIC(glsl_type::bool_type, ir_intrinsic_helper_invocation, - demote_to_helper_invocation, 0); - return sig; -} - -ir_function_signature * -builtin_builder::_helper_invocation() -{ - MAKE_SIG(glsl_type::bool_type, demote_to_helper_invocation, 0); - - ir_variable *retval = body.make_temp(glsl_type::bool_type, "retval"); - - body.emit(call(shader->symbols->get_function("__intrinsic_helper_invocation"), - retval, sig->parameters)); - body.emit(ret(retval)); - - return sig; -} - -/** @} */ - -/******************************************************************************/ - -/* The singleton instance of builtin_builder. */ -static builtin_builder builtins; -static uint32_t builtin_users = 0; - -/** - * External API (exposing the built-in module to the rest of the compiler): - * @{ - */ -extern "C" void -_mesa_glsl_builtin_functions_init_or_ref() -{ - simple_mtx_lock(&builtins_lock); - if (builtin_users++ == 0) - builtins.initialize(); - simple_mtx_unlock(&builtins_lock); -} - -extern "C" void -_mesa_glsl_builtin_functions_decref() -{ - simple_mtx_lock(&builtins_lock); - assert(builtin_users != 0); - if (--builtin_users == 0) - builtins.release(); - simple_mtx_unlock(&builtins_lock); -} - -ir_function_signature * -_mesa_glsl_find_builtin_function(_mesa_glsl_parse_state *state, - const char *name, exec_list *actual_parameters) -{ - ir_function_signature *s; - simple_mtx_lock(&builtins_lock); - s = builtins.find(state, name, actual_parameters); - simple_mtx_unlock(&builtins_lock); - - return s; -} - -bool -_mesa_glsl_has_builtin_function(_mesa_glsl_parse_state *state, const char *name) -{ - ir_function *f; - bool ret = false; - simple_mtx_lock(&builtins_lock); - f = builtins.shader->symbols->get_function(name); - if (f != NULL) { - foreach_in_list(ir_function_signature, sig, &f->signatures) { - if (sig->is_builtin_available(state)) { - ret = true; - break; - } - } - } - simple_mtx_unlock(&builtins_lock); - - return ret; -} - -gl_shader * -_mesa_glsl_get_builtin_function_shader() -{ - return builtins.shader; -} - - -/** - * Get the function signature for main from a shader - */ -ir_function_signature * -_mesa_get_main_function_signature(glsl_symbol_table *symbols) -{ - ir_function *const f = symbols->get_function("main"); - if (f != NULL) { - exec_list void_parameters; - - /* Look for the 'void main()' signature and ensure that it's defined. - * This keeps the linker from accidentally pick a shader that just - * contains a prototype for main. - * - * We don't have to check for multiple definitions of main (in multiple - * shaders) because that would have already been caught above. - */ - ir_function_signature *sig = - f->matching_signature(NULL, &void_parameters, false); - if ((sig != NULL) && sig->is_defined) { - return sig; - } - } - - return NULL; -} - -/** @} */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_functions.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_functions.h deleted file mode 100644 index fb1e5e5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_functions.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef BULITIN_FUNCTIONS_H -#define BULITIN_FUNCTIONS_H - -struct gl_shader; - -#ifdef __cplusplus -extern "C" { -#endif - -void -_mesa_glsl_builtin_functions_init_or_ref(); - -void -_mesa_glsl_builtin_functions_decref(void); - -#ifdef __cplusplus - -} /* extern "C" */ - -extern ir_function_signature * -_mesa_glsl_find_builtin_function(_mesa_glsl_parse_state *state, - const char *name, exec_list *actual_parameters); - -extern bool -_mesa_glsl_has_builtin_function(_mesa_glsl_parse_state *state, - const char *name); - -extern gl_shader * -_mesa_glsl_get_builtin_function_shader(void); - -extern ir_function_signature * -_mesa_get_main_function_signature(glsl_symbol_table *symbols); - -namespace generate_ir { - -ir_function_signature * -udiv64(void *mem_ctx, builtin_available_predicate avail); - -ir_function_signature * -idiv64(void *mem_ctx, builtin_available_predicate avail); - -ir_function_signature * -umod64(void *mem_ctx, builtin_available_predicate avail); - -ir_function_signature * -imod64(void *mem_ctx, builtin_available_predicate avail); - -ir_function_signature * -udivmod64(void *mem_ctx, builtin_available_predicate avail); - -} - -#endif /* __cplusplus */ - -#endif /* BULITIN_FUNCTIONS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_int64.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_int64.h deleted file mode 100644 index 40e2c1c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_int64.h +++ /dev/null @@ -1,1140 +0,0 @@ -ir_function_signature * -udivmod64(void *mem_ctx, builtin_available_predicate avail) -{ - ir_function_signature *const sig = - new(mem_ctx) ir_function_signature(glsl_type::uvec4_type, avail); - ir_factory body(&sig->body, mem_ctx); - sig->is_defined = true; - - exec_list sig_parameters; - - ir_variable *const r000C = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "n", ir_var_function_in); - sig_parameters.push_tail(r000C); - ir_variable *const r000D = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "d", ir_var_function_in); - sig_parameters.push_tail(r000D); - ir_variable *const r000E = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r000E); - ir_variable *const r000F = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto); - body.emit(r000F); - ir_variable *const r0010 = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto); - body.emit(r0010); - ir_variable *const r0011 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto); - body.emit(r0011); - body.emit(assign(r0011, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03)); - - ir_expression *const r0012 = expr(ir_unop_find_msb, swizzle_y(r000D)); - body.emit(assign(r0010, add(r0012, body.constant(int(32))), 0x01)); - - /* IF CONDITION */ - ir_expression *const r0014 = equal(swizzle_y(r000D), body.constant(0u)); - ir_expression *const r0015 = gequal(swizzle_y(r000C), swizzle_x(r000D)); - ir_expression *const r0016 = logic_and(r0014, r0015); - ir_if *f0013 = new(mem_ctx) ir_if(operand(r0016).val); - exec_list *const f0013_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0013->then_instructions; - - ir_variable *const r0017 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r0017); - ir_variable *const r0018 = body.make_temp(glsl_type::int_type, "findMSB_retval"); - body.emit(assign(r0018, expr(ir_unop_find_msb, swizzle_x(r000D)), 0x01)); - - body.emit(assign(r0010, r0018, 0x01)); - - body.emit(assign(r0017, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f0019 = new(mem_ctx) ir_loop(); - exec_list *const f0019_parent_instructions = body.instructions; - - body.instructions = &f0019->body_instructions; - - /* IF CONDITION */ - ir_expression *const r001B = less(r0017, body.constant(int(1))); - ir_if *f001A = new(mem_ctx) ir_if(operand(r001B).val); - exec_list *const f001A_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f001A->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f001A_parent_instructions; - body.emit(f001A); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r001D = sub(body.constant(int(31)), r0017); - ir_expression *const r001E = lequal(r0018, r001D); - ir_expression *const r001F = lshift(swizzle_x(r000D), r0017); - ir_expression *const r0020 = lequal(r001F, swizzle_y(r000C)); - ir_expression *const r0021 = logic_and(r001E, r0020); - ir_if *f001C = new(mem_ctx) ir_if(operand(r0021).val); - exec_list *const f001C_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f001C->then_instructions; - - ir_expression *const r0022 = lshift(swizzle_x(r000D), r0017); - body.emit(assign(r000C, sub(swizzle_y(r000C), r0022), 0x02)); - - ir_expression *const r0023 = lshift(body.constant(1u), r0017); - body.emit(assign(r0011, bit_or(swizzle_y(r0011), r0023), 0x02)); - - - body.instructions = f001C_parent_instructions; - body.emit(f001C); - - /* END IF */ - - body.emit(assign(r0017, add(r0017, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f0019_parent_instructions; - body.emit(f0019); - - /* IF CONDITION */ - ir_expression *const r0025 = lequal(swizzle_x(r000D), swizzle_y(r000C)); - ir_if *f0024 = new(mem_ctx) ir_if(operand(r0025).val); - exec_list *const f0024_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0024->then_instructions; - - body.emit(assign(r000C, sub(swizzle_y(r000C), swizzle_x(r000D)), 0x02)); - - body.emit(assign(r0011, bit_or(swizzle_y(r0011), body.constant(1u)), 0x02)); - - - body.instructions = f0024_parent_instructions; - body.emit(f0024); - - /* END IF */ - - - body.instructions = f0013_parent_instructions; - body.emit(f0013); - - /* END IF */ - - ir_variable *const r0026 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval"); - body.emit(assign(r0026, expr(ir_unop_pack_uint_2x32, r000D), 0x01)); - - body.emit(assign(r000F, expr(ir_unop_pack_uint_2x32, r000C), 0x01)); - - body.emit(assign(r000E, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f0027 = new(mem_ctx) ir_loop(); - exec_list *const f0027_parent_instructions = body.instructions; - - body.instructions = &f0027->body_instructions; - - /* IF CONDITION */ - ir_expression *const r0029 = less(r000E, body.constant(int(1))); - ir_if *f0028 = new(mem_ctx) ir_if(operand(r0029).val); - exec_list *const f0028_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0028->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f0028_parent_instructions; - body.emit(f0028); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r002B = sub(body.constant(int(63)), r000E); - ir_expression *const r002C = lequal(r0010, r002B); - ir_expression *const r002D = lshift(r0026, r000E); - ir_expression *const r002E = lequal(r002D, r000F); - ir_expression *const r002F = logic_and(r002C, r002E); - ir_if *f002A = new(mem_ctx) ir_if(operand(r002F).val); - exec_list *const f002A_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f002A->then_instructions; - - ir_expression *const r0030 = lshift(r0026, r000E); - body.emit(assign(r000F, sub(r000F, r0030), 0x01)); - - ir_expression *const r0031 = lshift(body.constant(1u), r000E); - body.emit(assign(r0011, bit_or(swizzle_x(r0011), r0031), 0x01)); - - - body.instructions = f002A_parent_instructions; - body.emit(f002A); - - /* END IF */ - - body.emit(assign(r000E, add(r000E, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f0027_parent_instructions; - body.emit(f0027); - - /* IF CONDITION */ - ir_expression *const r0033 = lequal(r0026, r000F); - ir_if *f0032 = new(mem_ctx) ir_if(operand(r0033).val); - exec_list *const f0032_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0032->then_instructions; - - body.emit(assign(r000F, sub(r000F, r0026), 0x01)); - - body.emit(assign(r0011, bit_or(swizzle_x(r0011), body.constant(1u)), 0x01)); - - - body.instructions = f0032_parent_instructions; - body.emit(f0032); - - /* END IF */ - - ir_variable *const r0034 = body.make_temp(glsl_type::uvec4_type, "vec_ctor"); - body.emit(assign(r0034, r0011, 0x03)); - - body.emit(assign(r0034, expr(ir_unop_unpack_uint_2x32, r000F), 0x0c)); - - body.emit(ret(r0034)); - - sig->replace_parameters(&sig_parameters); - return sig; -} -ir_function_signature * -udiv64(void *mem_ctx, builtin_available_predicate avail) -{ - ir_function_signature *const sig = - new(mem_ctx) ir_function_signature(glsl_type::uvec2_type, avail); - ir_factory body(&sig->body, mem_ctx); - sig->is_defined = true; - - exec_list sig_parameters; - - ir_variable *const r0035 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "n", ir_var_function_in); - sig_parameters.push_tail(r0035); - ir_variable *const r0036 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "d", ir_var_function_in); - sig_parameters.push_tail(r0036); - ir_variable *const r0037 = body.make_temp(glsl_type::uvec2_type, "n"); - body.emit(assign(r0037, r0035, 0x03)); - - ir_variable *const r0038 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r0038); - ir_variable *const r0039 = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto); - body.emit(r0039); - ir_variable *const r003A = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto); - body.emit(r003A); - ir_variable *const r003B = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto); - body.emit(r003B); - body.emit(assign(r003B, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03)); - - ir_expression *const r003C = expr(ir_unop_find_msb, swizzle_y(r0036)); - body.emit(assign(r003A, add(r003C, body.constant(int(32))), 0x01)); - - /* IF CONDITION */ - ir_expression *const r003E = equal(swizzle_y(r0036), body.constant(0u)); - ir_expression *const r003F = gequal(swizzle_y(r0035), swizzle_x(r0036)); - ir_expression *const r0040 = logic_and(r003E, r003F); - ir_if *f003D = new(mem_ctx) ir_if(operand(r0040).val); - exec_list *const f003D_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f003D->then_instructions; - - ir_variable *const r0041 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r0041); - ir_variable *const r0042 = body.make_temp(glsl_type::int_type, "findMSB_retval"); - body.emit(assign(r0042, expr(ir_unop_find_msb, swizzle_x(r0036)), 0x01)); - - body.emit(assign(r003A, r0042, 0x01)); - - body.emit(assign(r0041, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f0043 = new(mem_ctx) ir_loop(); - exec_list *const f0043_parent_instructions = body.instructions; - - body.instructions = &f0043->body_instructions; - - /* IF CONDITION */ - ir_expression *const r0045 = less(r0041, body.constant(int(1))); - ir_if *f0044 = new(mem_ctx) ir_if(operand(r0045).val); - exec_list *const f0044_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0044->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f0044_parent_instructions; - body.emit(f0044); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r0047 = sub(body.constant(int(31)), r0041); - ir_expression *const r0048 = lequal(r0042, r0047); - ir_expression *const r0049 = lshift(swizzle_x(r0036), r0041); - ir_expression *const r004A = lequal(r0049, swizzle_y(r0037)); - ir_expression *const r004B = logic_and(r0048, r004A); - ir_if *f0046 = new(mem_ctx) ir_if(operand(r004B).val); - exec_list *const f0046_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0046->then_instructions; - - ir_expression *const r004C = lshift(swizzle_x(r0036), r0041); - body.emit(assign(r0037, sub(swizzle_y(r0037), r004C), 0x02)); - - ir_expression *const r004D = lshift(body.constant(1u), r0041); - body.emit(assign(r003B, bit_or(swizzle_y(r003B), r004D), 0x02)); - - - body.instructions = f0046_parent_instructions; - body.emit(f0046); - - /* END IF */ - - body.emit(assign(r0041, add(r0041, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f0043_parent_instructions; - body.emit(f0043); - - /* IF CONDITION */ - ir_expression *const r004F = lequal(swizzle_x(r0036), swizzle_y(r0037)); - ir_if *f004E = new(mem_ctx) ir_if(operand(r004F).val); - exec_list *const f004E_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f004E->then_instructions; - - body.emit(assign(r0037, sub(swizzle_y(r0037), swizzle_x(r0036)), 0x02)); - - body.emit(assign(r003B, bit_or(swizzle_y(r003B), body.constant(1u)), 0x02)); - - - body.instructions = f004E_parent_instructions; - body.emit(f004E); - - /* END IF */ - - - body.instructions = f003D_parent_instructions; - body.emit(f003D); - - /* END IF */ - - ir_variable *const r0050 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval"); - body.emit(assign(r0050, expr(ir_unop_pack_uint_2x32, r0036), 0x01)); - - body.emit(assign(r0039, expr(ir_unop_pack_uint_2x32, r0037), 0x01)); - - body.emit(assign(r0038, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f0051 = new(mem_ctx) ir_loop(); - exec_list *const f0051_parent_instructions = body.instructions; - - body.instructions = &f0051->body_instructions; - - /* IF CONDITION */ - ir_expression *const r0053 = less(r0038, body.constant(int(1))); - ir_if *f0052 = new(mem_ctx) ir_if(operand(r0053).val); - exec_list *const f0052_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0052->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f0052_parent_instructions; - body.emit(f0052); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r0055 = sub(body.constant(int(63)), r0038); - ir_expression *const r0056 = lequal(r003A, r0055); - ir_expression *const r0057 = lshift(r0050, r0038); - ir_expression *const r0058 = lequal(r0057, r0039); - ir_expression *const r0059 = logic_and(r0056, r0058); - ir_if *f0054 = new(mem_ctx) ir_if(operand(r0059).val); - exec_list *const f0054_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0054->then_instructions; - - ir_expression *const r005A = lshift(r0050, r0038); - body.emit(assign(r0039, sub(r0039, r005A), 0x01)); - - ir_expression *const r005B = lshift(body.constant(1u), r0038); - body.emit(assign(r003B, bit_or(swizzle_x(r003B), r005B), 0x01)); - - - body.instructions = f0054_parent_instructions; - body.emit(f0054); - - /* END IF */ - - body.emit(assign(r0038, add(r0038, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f0051_parent_instructions; - body.emit(f0051); - - /* IF CONDITION */ - ir_expression *const r005D = lequal(r0050, r0039); - ir_if *f005C = new(mem_ctx) ir_if(operand(r005D).val); - exec_list *const f005C_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f005C->then_instructions; - - body.emit(assign(r0039, sub(r0039, r0050), 0x01)); - - body.emit(assign(r003B, bit_or(swizzle_x(r003B), body.constant(1u)), 0x01)); - - - body.instructions = f005C_parent_instructions; - body.emit(f005C); - - /* END IF */ - - body.emit(ret(r003B)); - - sig->replace_parameters(&sig_parameters); - return sig; -} -ir_function_signature * -idiv64(void *mem_ctx, builtin_available_predicate avail) -{ - ir_function_signature *const sig = - new(mem_ctx) ir_function_signature(glsl_type::ivec2_type, avail); - ir_factory body(&sig->body, mem_ctx); - sig->is_defined = true; - - exec_list sig_parameters; - - ir_variable *const r005E = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_n", ir_var_function_in); - sig_parameters.push_tail(r005E); - ir_variable *const r005F = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_d", ir_var_function_in); - sig_parameters.push_tail(r005F); - ir_variable *const r0060 = new(mem_ctx) ir_variable(glsl_type::bool_type, "negate", ir_var_auto); - body.emit(r0060); - ir_expression *const r0061 = less(swizzle_y(r005E), body.constant(int(0))); - ir_expression *const r0062 = less(swizzle_y(r005F), body.constant(int(0))); - body.emit(assign(r0060, nequal(r0061, r0062), 0x01)); - - ir_variable *const r0063 = body.make_temp(glsl_type::uvec2_type, "n"); - ir_expression *const r0064 = expr(ir_unop_pack_int_2x32, r005E); - ir_expression *const r0065 = expr(ir_unop_abs, r0064); - ir_expression *const r0066 = expr(ir_unop_i642u64, r0065); - body.emit(assign(r0063, expr(ir_unop_unpack_uint_2x32, r0066), 0x03)); - - ir_variable *const r0067 = body.make_temp(glsl_type::uvec2_type, "d"); - ir_expression *const r0068 = expr(ir_unop_pack_int_2x32, r005F); - ir_expression *const r0069 = expr(ir_unop_abs, r0068); - ir_expression *const r006A = expr(ir_unop_i642u64, r0069); - body.emit(assign(r0067, expr(ir_unop_unpack_uint_2x32, r006A), 0x03)); - - ir_variable *const r006B = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r006B); - ir_variable *const r006C = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto); - body.emit(r006C); - ir_variable *const r006D = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto); - body.emit(r006D); - ir_variable *const r006E = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto); - body.emit(r006E); - body.emit(assign(r006E, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03)); - - ir_expression *const r006F = expr(ir_unop_find_msb, swizzle_y(r0067)); - body.emit(assign(r006D, add(r006F, body.constant(int(32))), 0x01)); - - /* IF CONDITION */ - ir_expression *const r0071 = equal(swizzle_y(r0067), body.constant(0u)); - ir_expression *const r0072 = gequal(swizzle_y(r0063), swizzle_x(r0067)); - ir_expression *const r0073 = logic_and(r0071, r0072); - ir_if *f0070 = new(mem_ctx) ir_if(operand(r0073).val); - exec_list *const f0070_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0070->then_instructions; - - ir_variable *const r0074 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r0074); - ir_variable *const r0075 = body.make_temp(glsl_type::int_type, "findMSB_retval"); - body.emit(assign(r0075, expr(ir_unop_find_msb, swizzle_x(r0067)), 0x01)); - - body.emit(assign(r006D, r0075, 0x01)); - - body.emit(assign(r0074, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f0076 = new(mem_ctx) ir_loop(); - exec_list *const f0076_parent_instructions = body.instructions; - - body.instructions = &f0076->body_instructions; - - /* IF CONDITION */ - ir_expression *const r0078 = less(r0074, body.constant(int(1))); - ir_if *f0077 = new(mem_ctx) ir_if(operand(r0078).val); - exec_list *const f0077_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0077->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f0077_parent_instructions; - body.emit(f0077); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r007A = sub(body.constant(int(31)), r0074); - ir_expression *const r007B = lequal(r0075, r007A); - ir_expression *const r007C = lshift(swizzle_x(r0067), r0074); - ir_expression *const r007D = lequal(r007C, swizzle_y(r0063)); - ir_expression *const r007E = logic_and(r007B, r007D); - ir_if *f0079 = new(mem_ctx) ir_if(operand(r007E).val); - exec_list *const f0079_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0079->then_instructions; - - ir_expression *const r007F = lshift(swizzle_x(r0067), r0074); - body.emit(assign(r0063, sub(swizzle_y(r0063), r007F), 0x02)); - - ir_expression *const r0080 = lshift(body.constant(1u), r0074); - body.emit(assign(r006E, bit_or(swizzle_y(r006E), r0080), 0x02)); - - - body.instructions = f0079_parent_instructions; - body.emit(f0079); - - /* END IF */ - - body.emit(assign(r0074, add(r0074, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f0076_parent_instructions; - body.emit(f0076); - - /* IF CONDITION */ - ir_expression *const r0082 = lequal(swizzle_x(r0067), swizzle_y(r0063)); - ir_if *f0081 = new(mem_ctx) ir_if(operand(r0082).val); - exec_list *const f0081_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0081->then_instructions; - - body.emit(assign(r0063, sub(swizzle_y(r0063), swizzle_x(r0067)), 0x02)); - - body.emit(assign(r006E, bit_or(swizzle_y(r006E), body.constant(1u)), 0x02)); - - - body.instructions = f0081_parent_instructions; - body.emit(f0081); - - /* END IF */ - - - body.instructions = f0070_parent_instructions; - body.emit(f0070); - - /* END IF */ - - ir_variable *const r0083 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval"); - body.emit(assign(r0083, expr(ir_unop_pack_uint_2x32, r0067), 0x01)); - - body.emit(assign(r006C, expr(ir_unop_pack_uint_2x32, r0063), 0x01)); - - body.emit(assign(r006B, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f0084 = new(mem_ctx) ir_loop(); - exec_list *const f0084_parent_instructions = body.instructions; - - body.instructions = &f0084->body_instructions; - - /* IF CONDITION */ - ir_expression *const r0086 = less(r006B, body.constant(int(1))); - ir_if *f0085 = new(mem_ctx) ir_if(operand(r0086).val); - exec_list *const f0085_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0085->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f0085_parent_instructions; - body.emit(f0085); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r0088 = sub(body.constant(int(63)), r006B); - ir_expression *const r0089 = lequal(r006D, r0088); - ir_expression *const r008A = lshift(r0083, r006B); - ir_expression *const r008B = lequal(r008A, r006C); - ir_expression *const r008C = logic_and(r0089, r008B); - ir_if *f0087 = new(mem_ctx) ir_if(operand(r008C).val); - exec_list *const f0087_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0087->then_instructions; - - ir_expression *const r008D = lshift(r0083, r006B); - body.emit(assign(r006C, sub(r006C, r008D), 0x01)); - - ir_expression *const r008E = lshift(body.constant(1u), r006B); - body.emit(assign(r006E, bit_or(swizzle_x(r006E), r008E), 0x01)); - - - body.instructions = f0087_parent_instructions; - body.emit(f0087); - - /* END IF */ - - body.emit(assign(r006B, add(r006B, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f0084_parent_instructions; - body.emit(f0084); - - /* IF CONDITION */ - ir_expression *const r0090 = lequal(r0083, r006C); - ir_if *f008F = new(mem_ctx) ir_if(operand(r0090).val); - exec_list *const f008F_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f008F->then_instructions; - - body.emit(assign(r006C, sub(r006C, r0083), 0x01)); - - body.emit(assign(r006E, bit_or(swizzle_x(r006E), body.constant(1u)), 0x01)); - - - body.instructions = f008F_parent_instructions; - body.emit(f008F); - - /* END IF */ - - ir_variable *const r0091 = body.make_temp(glsl_type::ivec2_type, "conditional_tmp"); - /* IF CONDITION */ - ir_if *f0092 = new(mem_ctx) ir_if(operand(r0060).val); - exec_list *const f0092_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f0092->then_instructions; - - ir_expression *const r0093 = expr(ir_unop_pack_uint_2x32, r006E); - ir_expression *const r0094 = expr(ir_unop_u642i64, r0093); - ir_expression *const r0095 = neg(r0094); - body.emit(assign(r0091, expr(ir_unop_unpack_int_2x32, r0095), 0x03)); - - - /* ELSE INSTRUCTIONS */ - body.instructions = &f0092->else_instructions; - - body.emit(assign(r0091, expr(ir_unop_u2i, r006E), 0x03)); - - - body.instructions = f0092_parent_instructions; - body.emit(f0092); - - /* END IF */ - - body.emit(ret(r0091)); - - sig->replace_parameters(&sig_parameters); - return sig; -} -ir_function_signature * -umod64(void *mem_ctx, builtin_available_predicate avail) -{ - ir_function_signature *const sig = - new(mem_ctx) ir_function_signature(glsl_type::uvec2_type, avail); - ir_factory body(&sig->body, mem_ctx); - sig->is_defined = true; - - exec_list sig_parameters; - - ir_variable *const r0096 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "n", ir_var_function_in); - sig_parameters.push_tail(r0096); - ir_variable *const r0097 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "d", ir_var_function_in); - sig_parameters.push_tail(r0097); - ir_variable *const r0098 = body.make_temp(glsl_type::uvec2_type, "n"); - body.emit(assign(r0098, r0096, 0x03)); - - ir_variable *const r0099 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r0099); - ir_variable *const r009A = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto); - body.emit(r009A); - ir_variable *const r009B = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto); - body.emit(r009B); - ir_variable *const r009C = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto); - body.emit(r009C); - body.emit(assign(r009C, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03)); - - ir_expression *const r009D = expr(ir_unop_find_msb, swizzle_y(r0097)); - body.emit(assign(r009B, add(r009D, body.constant(int(32))), 0x01)); - - /* IF CONDITION */ - ir_expression *const r009F = equal(swizzle_y(r0097), body.constant(0u)); - ir_expression *const r00A0 = gequal(swizzle_y(r0096), swizzle_x(r0097)); - ir_expression *const r00A1 = logic_and(r009F, r00A0); - ir_if *f009E = new(mem_ctx) ir_if(operand(r00A1).val); - exec_list *const f009E_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f009E->then_instructions; - - ir_variable *const r00A2 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r00A2); - ir_variable *const r00A3 = body.make_temp(glsl_type::int_type, "findMSB_retval"); - body.emit(assign(r00A3, expr(ir_unop_find_msb, swizzle_x(r0097)), 0x01)); - - body.emit(assign(r009B, r00A3, 0x01)); - - body.emit(assign(r00A2, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f00A4 = new(mem_ctx) ir_loop(); - exec_list *const f00A4_parent_instructions = body.instructions; - - body.instructions = &f00A4->body_instructions; - - /* IF CONDITION */ - ir_expression *const r00A6 = less(r00A2, body.constant(int(1))); - ir_if *f00A5 = new(mem_ctx) ir_if(operand(r00A6).val); - exec_list *const f00A5_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00A5->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f00A5_parent_instructions; - body.emit(f00A5); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r00A8 = sub(body.constant(int(31)), r00A2); - ir_expression *const r00A9 = lequal(r00A3, r00A8); - ir_expression *const r00AA = lshift(swizzle_x(r0097), r00A2); - ir_expression *const r00AB = lequal(r00AA, swizzle_y(r0098)); - ir_expression *const r00AC = logic_and(r00A9, r00AB); - ir_if *f00A7 = new(mem_ctx) ir_if(operand(r00AC).val); - exec_list *const f00A7_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00A7->then_instructions; - - ir_expression *const r00AD = lshift(swizzle_x(r0097), r00A2); - body.emit(assign(r0098, sub(swizzle_y(r0098), r00AD), 0x02)); - - ir_expression *const r00AE = lshift(body.constant(1u), r00A2); - body.emit(assign(r009C, bit_or(swizzle_y(r009C), r00AE), 0x02)); - - - body.instructions = f00A7_parent_instructions; - body.emit(f00A7); - - /* END IF */ - - body.emit(assign(r00A2, add(r00A2, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f00A4_parent_instructions; - body.emit(f00A4); - - /* IF CONDITION */ - ir_expression *const r00B0 = lequal(swizzle_x(r0097), swizzle_y(r0098)); - ir_if *f00AF = new(mem_ctx) ir_if(operand(r00B0).val); - exec_list *const f00AF_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00AF->then_instructions; - - body.emit(assign(r0098, sub(swizzle_y(r0098), swizzle_x(r0097)), 0x02)); - - body.emit(assign(r009C, bit_or(swizzle_y(r009C), body.constant(1u)), 0x02)); - - - body.instructions = f00AF_parent_instructions; - body.emit(f00AF); - - /* END IF */ - - - body.instructions = f009E_parent_instructions; - body.emit(f009E); - - /* END IF */ - - ir_variable *const r00B1 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval"); - body.emit(assign(r00B1, expr(ir_unop_pack_uint_2x32, r0097), 0x01)); - - body.emit(assign(r009A, expr(ir_unop_pack_uint_2x32, r0098), 0x01)); - - body.emit(assign(r0099, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f00B2 = new(mem_ctx) ir_loop(); - exec_list *const f00B2_parent_instructions = body.instructions; - - body.instructions = &f00B2->body_instructions; - - /* IF CONDITION */ - ir_expression *const r00B4 = less(r0099, body.constant(int(1))); - ir_if *f00B3 = new(mem_ctx) ir_if(operand(r00B4).val); - exec_list *const f00B3_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00B3->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f00B3_parent_instructions; - body.emit(f00B3); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r00B6 = sub(body.constant(int(63)), r0099); - ir_expression *const r00B7 = lequal(r009B, r00B6); - ir_expression *const r00B8 = lshift(r00B1, r0099); - ir_expression *const r00B9 = lequal(r00B8, r009A); - ir_expression *const r00BA = logic_and(r00B7, r00B9); - ir_if *f00B5 = new(mem_ctx) ir_if(operand(r00BA).val); - exec_list *const f00B5_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00B5->then_instructions; - - ir_expression *const r00BB = lshift(r00B1, r0099); - body.emit(assign(r009A, sub(r009A, r00BB), 0x01)); - - ir_expression *const r00BC = lshift(body.constant(1u), r0099); - body.emit(assign(r009C, bit_or(swizzle_x(r009C), r00BC), 0x01)); - - - body.instructions = f00B5_parent_instructions; - body.emit(f00B5); - - /* END IF */ - - body.emit(assign(r0099, add(r0099, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f00B2_parent_instructions; - body.emit(f00B2); - - /* IF CONDITION */ - ir_expression *const r00BE = lequal(r00B1, r009A); - ir_if *f00BD = new(mem_ctx) ir_if(operand(r00BE).val); - exec_list *const f00BD_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00BD->then_instructions; - - body.emit(assign(r009A, sub(r009A, r00B1), 0x01)); - - body.emit(assign(r009C, bit_or(swizzle_x(r009C), body.constant(1u)), 0x01)); - - - body.instructions = f00BD_parent_instructions; - body.emit(f00BD); - - /* END IF */ - - ir_variable *const r00BF = body.make_temp(glsl_type::uvec4_type, "vec_ctor"); - body.emit(assign(r00BF, r009C, 0x03)); - - body.emit(assign(r00BF, expr(ir_unop_unpack_uint_2x32, r009A), 0x0c)); - - ir_swizzle *const r00C0 = swizzle(r00BF, MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_W, SWIZZLE_X, SWIZZLE_X), 2); - body.emit(ret(r00C0)); - - sig->replace_parameters(&sig_parameters); - return sig; -} -ir_function_signature * -imod64(void *mem_ctx, builtin_available_predicate avail) -{ - ir_function_signature *const sig = - new(mem_ctx) ir_function_signature(glsl_type::ivec2_type, avail); - ir_factory body(&sig->body, mem_ctx); - sig->is_defined = true; - - exec_list sig_parameters; - - ir_variable *const r00C1 = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_n", ir_var_function_in); - sig_parameters.push_tail(r00C1); - ir_variable *const r00C2 = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_d", ir_var_function_in); - sig_parameters.push_tail(r00C2); - ir_variable *const r00C3 = new(mem_ctx) ir_variable(glsl_type::bool_type, "negate", ir_var_auto); - body.emit(r00C3); - ir_expression *const r00C4 = less(swizzle_y(r00C1), body.constant(int(0))); - ir_expression *const r00C5 = less(swizzle_y(r00C2), body.constant(int(0))); - body.emit(assign(r00C3, nequal(r00C4, r00C5), 0x01)); - - ir_variable *const r00C6 = body.make_temp(glsl_type::uvec2_type, "n"); - ir_expression *const r00C7 = expr(ir_unop_pack_int_2x32, r00C1); - ir_expression *const r00C8 = expr(ir_unop_abs, r00C7); - ir_expression *const r00C9 = expr(ir_unop_i642u64, r00C8); - body.emit(assign(r00C6, expr(ir_unop_unpack_uint_2x32, r00C9), 0x03)); - - ir_variable *const r00CA = body.make_temp(glsl_type::uvec2_type, "d"); - ir_expression *const r00CB = expr(ir_unop_pack_int_2x32, r00C2); - ir_expression *const r00CC = expr(ir_unop_abs, r00CB); - ir_expression *const r00CD = expr(ir_unop_i642u64, r00CC); - body.emit(assign(r00CA, expr(ir_unop_unpack_uint_2x32, r00CD), 0x03)); - - ir_variable *const r00CE = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r00CE); - ir_variable *const r00CF = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto); - body.emit(r00CF); - ir_variable *const r00D0 = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto); - body.emit(r00D0); - ir_variable *const r00D1 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto); - body.emit(r00D1); - body.emit(assign(r00D1, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03)); - - ir_expression *const r00D2 = expr(ir_unop_find_msb, swizzle_y(r00CA)); - body.emit(assign(r00D0, add(r00D2, body.constant(int(32))), 0x01)); - - /* IF CONDITION */ - ir_expression *const r00D4 = equal(swizzle_y(r00CA), body.constant(0u)); - ir_expression *const r00D5 = gequal(swizzle_y(r00C6), swizzle_x(r00CA)); - ir_expression *const r00D6 = logic_and(r00D4, r00D5); - ir_if *f00D3 = new(mem_ctx) ir_if(operand(r00D6).val); - exec_list *const f00D3_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00D3->then_instructions; - - ir_variable *const r00D7 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto); - body.emit(r00D7); - ir_variable *const r00D8 = body.make_temp(glsl_type::int_type, "findMSB_retval"); - body.emit(assign(r00D8, expr(ir_unop_find_msb, swizzle_x(r00CA)), 0x01)); - - body.emit(assign(r00D0, r00D8, 0x01)); - - body.emit(assign(r00D7, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f00D9 = new(mem_ctx) ir_loop(); - exec_list *const f00D9_parent_instructions = body.instructions; - - body.instructions = &f00D9->body_instructions; - - /* IF CONDITION */ - ir_expression *const r00DB = less(r00D7, body.constant(int(1))); - ir_if *f00DA = new(mem_ctx) ir_if(operand(r00DB).val); - exec_list *const f00DA_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00DA->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f00DA_parent_instructions; - body.emit(f00DA); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r00DD = sub(body.constant(int(31)), r00D7); - ir_expression *const r00DE = lequal(r00D8, r00DD); - ir_expression *const r00DF = lshift(swizzle_x(r00CA), r00D7); - ir_expression *const r00E0 = lequal(r00DF, swizzle_y(r00C6)); - ir_expression *const r00E1 = logic_and(r00DE, r00E0); - ir_if *f00DC = new(mem_ctx) ir_if(operand(r00E1).val); - exec_list *const f00DC_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00DC->then_instructions; - - ir_expression *const r00E2 = lshift(swizzle_x(r00CA), r00D7); - body.emit(assign(r00C6, sub(swizzle_y(r00C6), r00E2), 0x02)); - - ir_expression *const r00E3 = lshift(body.constant(1u), r00D7); - body.emit(assign(r00D1, bit_or(swizzle_y(r00D1), r00E3), 0x02)); - - - body.instructions = f00DC_parent_instructions; - body.emit(f00DC); - - /* END IF */ - - body.emit(assign(r00D7, add(r00D7, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f00D9_parent_instructions; - body.emit(f00D9); - - /* IF CONDITION */ - ir_expression *const r00E5 = lequal(swizzle_x(r00CA), swizzle_y(r00C6)); - ir_if *f00E4 = new(mem_ctx) ir_if(operand(r00E5).val); - exec_list *const f00E4_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00E4->then_instructions; - - body.emit(assign(r00C6, sub(swizzle_y(r00C6), swizzle_x(r00CA)), 0x02)); - - body.emit(assign(r00D1, bit_or(swizzle_y(r00D1), body.constant(1u)), 0x02)); - - - body.instructions = f00E4_parent_instructions; - body.emit(f00E4); - - /* END IF */ - - - body.instructions = f00D3_parent_instructions; - body.emit(f00D3); - - /* END IF */ - - ir_variable *const r00E6 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval"); - body.emit(assign(r00E6, expr(ir_unop_pack_uint_2x32, r00CA), 0x01)); - - body.emit(assign(r00CF, expr(ir_unop_pack_uint_2x32, r00C6), 0x01)); - - body.emit(assign(r00CE, body.constant(int(31)), 0x01)); - - /* LOOP BEGIN */ - ir_loop *f00E7 = new(mem_ctx) ir_loop(); - exec_list *const f00E7_parent_instructions = body.instructions; - - body.instructions = &f00E7->body_instructions; - - /* IF CONDITION */ - ir_expression *const r00E9 = less(r00CE, body.constant(int(1))); - ir_if *f00E8 = new(mem_ctx) ir_if(operand(r00E9).val); - exec_list *const f00E8_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00E8->then_instructions; - - body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break)); - - - body.instructions = f00E8_parent_instructions; - body.emit(f00E8); - - /* END IF */ - - /* IF CONDITION */ - ir_expression *const r00EB = sub(body.constant(int(63)), r00CE); - ir_expression *const r00EC = lequal(r00D0, r00EB); - ir_expression *const r00ED = lshift(r00E6, r00CE); - ir_expression *const r00EE = lequal(r00ED, r00CF); - ir_expression *const r00EF = logic_and(r00EC, r00EE); - ir_if *f00EA = new(mem_ctx) ir_if(operand(r00EF).val); - exec_list *const f00EA_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00EA->then_instructions; - - ir_expression *const r00F0 = lshift(r00E6, r00CE); - body.emit(assign(r00CF, sub(r00CF, r00F0), 0x01)); - - ir_expression *const r00F1 = lshift(body.constant(1u), r00CE); - body.emit(assign(r00D1, bit_or(swizzle_x(r00D1), r00F1), 0x01)); - - - body.instructions = f00EA_parent_instructions; - body.emit(f00EA); - - /* END IF */ - - body.emit(assign(r00CE, add(r00CE, body.constant(int(-1))), 0x01)); - - /* LOOP END */ - - body.instructions = f00E7_parent_instructions; - body.emit(f00E7); - - /* IF CONDITION */ - ir_expression *const r00F3 = lequal(r00E6, r00CF); - ir_if *f00F2 = new(mem_ctx) ir_if(operand(r00F3).val); - exec_list *const f00F2_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00F2->then_instructions; - - body.emit(assign(r00CF, sub(r00CF, r00E6), 0x01)); - - body.emit(assign(r00D1, bit_or(swizzle_x(r00D1), body.constant(1u)), 0x01)); - - - body.instructions = f00F2_parent_instructions; - body.emit(f00F2); - - /* END IF */ - - ir_variable *const r00F4 = body.make_temp(glsl_type::uvec4_type, "vec_ctor"); - body.emit(assign(r00F4, r00D1, 0x03)); - - body.emit(assign(r00F4, expr(ir_unop_unpack_uint_2x32, r00CF), 0x0c)); - - ir_variable *const r00F5 = body.make_temp(glsl_type::ivec2_type, "conditional_tmp"); - /* IF CONDITION */ - ir_if *f00F6 = new(mem_ctx) ir_if(operand(r00C3).val); - exec_list *const f00F6_parent_instructions = body.instructions; - - /* THEN INSTRUCTIONS */ - body.instructions = &f00F6->then_instructions; - - ir_swizzle *const r00F7 = swizzle(r00F4, MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_W, SWIZZLE_X, SWIZZLE_X), 2); - ir_expression *const r00F8 = expr(ir_unop_pack_uint_2x32, r00F7); - ir_expression *const r00F9 = expr(ir_unop_u642i64, r00F8); - ir_expression *const r00FA = neg(r00F9); - body.emit(assign(r00F5, expr(ir_unop_unpack_int_2x32, r00FA), 0x03)); - - - /* ELSE INSTRUCTIONS */ - body.instructions = &f00F6->else_instructions; - - ir_swizzle *const r00FB = swizzle(r00F4, MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_W, SWIZZLE_X, SWIZZLE_X), 2); - body.emit(assign(r00F5, expr(ir_unop_u2i, r00FB), 0x03)); - - - body.instructions = f00F6_parent_instructions; - body.emit(f00F6); - - /* END IF */ - - body.emit(ret(r00F5)); - - sig->replace_parameters(&sig_parameters); - return sig; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_types.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_types.cpp deleted file mode 100644 index 6d13e70..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_types.cpp +++ /dev/null @@ -1,474 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 builtin_types.cpp - * - * The glsl_type class has static members to represent all the built-in types - * (such as the glsl_type::_float_type flyweight) as well as convenience pointer - * accessors (such as glsl_type::float_type). Those global variables are - * declared and initialized in this file. - * - * This also contains _mesa_glsl_initialize_types(), a function which populates - * a symbol table with the available built-in types for a particular language - * version and set of enabled extensions. - */ - -#include "../glsl_types.h" -#include "glsl_parser_extras.h" -#include "../../util/macros.h" -#include "../../mesa/main/consts_exts.h" - -/** - * Declarations of type flyweights (glsl_type::_foo_type) and - * convenience pointers (glsl_type::foo_type). - * @{ - */ -#define DECL_TYPE(NAME, ...) - -#define STRUCT_TYPE(NAME) \ - const glsl_type glsl_type::_struct_##NAME##_type = \ - glsl_type(NAME##_fields, ARRAY_SIZE(NAME##_fields), #NAME); \ - const glsl_type *const glsl_type::struct_##NAME##_type = \ - &glsl_type::_struct_##NAME##_type; - -static const struct glsl_struct_field gl_DepthRangeParameters_fields[] = { - glsl_struct_field(glsl_type::float_type, GLSL_PRECISION_HIGH, "near"), - glsl_struct_field(glsl_type::float_type, GLSL_PRECISION_HIGH, "far"), - glsl_struct_field(glsl_type::float_type, GLSL_PRECISION_HIGH, "diff"), -}; - -static const struct glsl_struct_field gl_PointParameters_fields[] = { - glsl_struct_field(glsl_type::float_type, "size"), - glsl_struct_field(glsl_type::float_type, "sizeMin"), - glsl_struct_field(glsl_type::float_type, "sizeMax"), - glsl_struct_field(glsl_type::float_type, "fadeThresholdSize"), - glsl_struct_field(glsl_type::float_type, "distanceConstantAttenuation"), - glsl_struct_field(glsl_type::float_type, "distanceLinearAttenuation"), - glsl_struct_field(glsl_type::float_type, "distanceQuadraticAttenuation"), -}; - -static const struct glsl_struct_field gl_MaterialParameters_fields[] = { - glsl_struct_field(glsl_type::vec4_type, "emission"), - glsl_struct_field(glsl_type::vec4_type, "ambient"), - glsl_struct_field(glsl_type::vec4_type, "diffuse"), - glsl_struct_field(glsl_type::vec4_type, "specular"), - glsl_struct_field(glsl_type::float_type, "shininess"), -}; - -static const struct glsl_struct_field gl_LightSourceParameters_fields[] = { - glsl_struct_field(glsl_type::vec4_type, "ambient"), - glsl_struct_field(glsl_type::vec4_type, "diffuse"), - glsl_struct_field(glsl_type::vec4_type, "specular"), - glsl_struct_field(glsl_type::vec4_type, "position"), - glsl_struct_field(glsl_type::vec4_type, "halfVector"), - glsl_struct_field(glsl_type::vec3_type, "spotDirection"), - glsl_struct_field(glsl_type::float_type, "spotCosCutoff"), - glsl_struct_field(glsl_type::float_type, "constantAttenuation"), - glsl_struct_field(glsl_type::float_type, "linearAttenuation"), - glsl_struct_field(glsl_type::float_type, "quadraticAttenuation"), - glsl_struct_field(glsl_type::float_type, "spotExponent"), - glsl_struct_field(glsl_type::float_type, "spotCutoff"), -}; - -static const struct glsl_struct_field gl_LightModelParameters_fields[] = { - glsl_struct_field(glsl_type::vec4_type, "ambient"), -}; - -static const struct glsl_struct_field gl_LightModelProducts_fields[] = { - glsl_struct_field(glsl_type::vec4_type, "sceneColor"), -}; - -static const struct glsl_struct_field gl_LightProducts_fields[] = { - glsl_struct_field(glsl_type::vec4_type, "ambient"), - glsl_struct_field(glsl_type::vec4_type, "diffuse"), - glsl_struct_field(glsl_type::vec4_type, "specular"), -}; - -static const struct glsl_struct_field gl_FogParameters_fields[] = { - glsl_struct_field(glsl_type::vec4_type, "color"), - glsl_struct_field(glsl_type::float_type, "density"), - glsl_struct_field(glsl_type::float_type, "start"), - glsl_struct_field(glsl_type::float_type, "end"), - glsl_struct_field(glsl_type::float_type, "scale"), -}; - -#include "../builtin_type_macros.h" -/** @} */ - -/** - * Code to populate a symbol table with the built-in types available in a - * particular shading language version. The table below contains tags every - * type with the GLSL/GLSL ES versions where it was introduced. - * - * @{ - */ -#define T(TYPE, MIN_GL, MIN_ES) \ - { glsl_type::TYPE##_type, MIN_GL, MIN_ES }, - -static const struct builtin_type_versions { - const glsl_type *const type; - int min_gl; - int min_es; -} builtin_type_versions[] = { - T(void, 110, 100) - T(bool, 110, 100) - T(bvec2, 110, 100) - T(bvec3, 110, 100) - T(bvec4, 110, 100) - T(int, 110, 100) - T(ivec2, 110, 100) - T(ivec3, 110, 100) - T(ivec4, 110, 100) - T(uint, 120, 300) - T(uvec2, 120, 300) - T(uvec3, 120, 300) - T(uvec4, 120, 300) - T(float, 110, 100) - T(vec2, 110, 100) - T(vec3, 110, 100) - T(vec4, 110, 100) - T(mat2, 110, 100) - T(mat3, 110, 100) - T(mat4, 110, 100) - T(mat2x3, 120, 300) - T(mat2x4, 120, 300) - T(mat3x2, 120, 300) - T(mat3x4, 120, 300) - T(mat4x2, 120, 300) - T(mat4x3, 120, 300) - - T(double, 400, 999) - T(dvec2, 400, 999) - T(dvec3, 400, 999) - T(dvec4, 400, 999) - T(dmat2, 400, 999) - T(dmat3, 400, 999) - T(dmat4, 400, 999) - T(dmat2x3, 400, 999) - T(dmat2x4, 400, 999) - T(dmat3x2, 400, 999) - T(dmat3x4, 400, 999) - T(dmat4x2, 400, 999) - T(dmat4x3, 400, 999) - - T(sampler1D, 110, 999) - T(sampler2D, 110, 100) - T(sampler3D, 110, 300) - T(samplerCube, 110, 100) - T(sampler1DArray, 130, 999) - T(sampler2DArray, 130, 300) - T(samplerCubeArray, 400, 320) - T(sampler2DRect, 140, 999) - T(samplerBuffer, 140, 320) - T(sampler2DMS, 150, 310) - T(sampler2DMSArray, 150, 320) - - T(isampler1D, 130, 999) - T(isampler2D, 130, 300) - T(isampler3D, 130, 300) - T(isamplerCube, 130, 300) - T(isampler1DArray, 130, 999) - T(isampler2DArray, 130, 300) - T(isamplerCubeArray, 400, 320) - T(isampler2DRect, 140, 999) - T(isamplerBuffer, 140, 320) - T(isampler2DMS, 150, 310) - T(isampler2DMSArray, 150, 320) - - T(usampler1D, 130, 999) - T(usampler2D, 130, 300) - T(usampler3D, 130, 300) - T(usamplerCube, 130, 300) - T(usampler1DArray, 130, 999) - T(usampler2DArray, 130, 300) - T(usamplerCubeArray, 400, 320) - T(usampler2DRect, 140, 999) - T(usamplerBuffer, 140, 320) - T(usampler2DMS, 150, 310) - T(usampler2DMSArray, 150, 320) - - T(sampler1DShadow, 110, 999) - T(sampler2DShadow, 110, 300) - T(samplerCubeShadow, 130, 300) - T(sampler1DArrayShadow, 130, 999) - T(sampler2DArrayShadow, 130, 300) - T(samplerCubeArrayShadow, 400, 320) - T(sampler2DRectShadow, 140, 999) - - T(struct_gl_DepthRangeParameters, 110, 100) - - T(image1D, 420, 999) - T(image2D, 420, 310) - T(image3D, 420, 310) - T(image2DRect, 420, 999) - T(imageCube, 420, 310) - T(imageBuffer, 420, 320) - T(image1DArray, 420, 999) - T(image2DArray, 420, 310) - T(imageCubeArray, 420, 320) - T(image2DMS, 420, 999) - T(image2DMSArray, 420, 999) - T(iimage1D, 420, 999) - T(iimage2D, 420, 310) - T(iimage3D, 420, 310) - T(iimage2DRect, 420, 999) - T(iimageCube, 420, 310) - T(iimageBuffer, 420, 320) - T(iimage1DArray, 420, 999) - T(iimage2DArray, 420, 310) - T(iimageCubeArray, 420, 320) - T(iimage2DMS, 420, 999) - T(iimage2DMSArray, 420, 999) - T(uimage1D, 420, 999) - T(uimage2D, 420, 310) - T(uimage3D, 420, 310) - T(uimage2DRect, 420, 999) - T(uimageCube, 420, 310) - T(uimageBuffer, 420, 320) - T(uimage1DArray, 420, 999) - T(uimage2DArray, 420, 310) - T(uimageCubeArray, 420, 320) - T(uimage2DMS, 420, 999) - T(uimage2DMSArray, 420, 999) - - T(atomic_uint, 420, 310) -}; - -static const glsl_type *const deprecated_types[] = { - glsl_type::struct_gl_PointParameters_type, - glsl_type::struct_gl_MaterialParameters_type, - glsl_type::struct_gl_LightSourceParameters_type, - glsl_type::struct_gl_LightModelParameters_type, - glsl_type::struct_gl_LightModelProducts_type, - glsl_type::struct_gl_LightProducts_type, - glsl_type::struct_gl_FogParameters_type, -}; - -static inline void -add_type(glsl_symbol_table *symbols, const glsl_type *const type) -{ - symbols->add_type(type->name, type); -} - -/** - * Populate the symbol table with available built-in types. - */ -void -_mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) -{ - struct glsl_symbol_table *symbols = state->symbols; - - for (unsigned i = 0; i < ARRAY_SIZE(builtin_type_versions); i++) { - const struct builtin_type_versions *const t = &builtin_type_versions[i]; - if (state->is_version(t->min_gl, t->min_es)) { - add_type(symbols, t->type); - } - } - - /* Add deprecated structure types. While these were deprecated in 1.30, - * they're still present. We've removed them in 1.40+ (OpenGL 3.1+). - */ - if (state->compat_shader || state->ARB_compatibility_enable) { - for (unsigned i = 0; i < ARRAY_SIZE(deprecated_types); i++) { - add_type(symbols, deprecated_types[i]); - } - } - - /* Add types for enabled extensions. They may have already been added - * by the version-based loop, but attempting to add them a second time - * is harmless. - */ - if (state->ARB_texture_cube_map_array_enable || - state->EXT_texture_cube_map_array_enable || - state->OES_texture_cube_map_array_enable) { - add_type(symbols, glsl_type::samplerCubeArray_type); - add_type(symbols, glsl_type::samplerCubeArrayShadow_type); - add_type(symbols, glsl_type::isamplerCubeArray_type); - add_type(symbols, glsl_type::usamplerCubeArray_type); - } - - if (state->ARB_texture_multisample_enable) { - add_type(symbols, glsl_type::sampler2DMS_type); - add_type(symbols, glsl_type::isampler2DMS_type); - add_type(symbols, glsl_type::usampler2DMS_type); - } - if (state->ARB_texture_multisample_enable || - state->OES_texture_storage_multisample_2d_array_enable) { - add_type(symbols, glsl_type::sampler2DMSArray_type); - add_type(symbols, glsl_type::isampler2DMSArray_type); - add_type(symbols, glsl_type::usampler2DMSArray_type); - } - - if (state->ARB_texture_rectangle_enable) { - add_type(symbols, glsl_type::sampler2DRect_type); - add_type(symbols, glsl_type::sampler2DRectShadow_type); - } - - if (state->EXT_gpu_shader4_enable) { - add_type(symbols, glsl_type::uint_type); - add_type(symbols, glsl_type::uvec2_type); - add_type(symbols, glsl_type::uvec3_type); - add_type(symbols, glsl_type::uvec4_type); - - add_type(symbols, glsl_type::samplerCubeShadow_type); - - if (state->exts->EXT_texture_array) { - add_type(symbols, glsl_type::sampler1DArray_type); - add_type(symbols, glsl_type::sampler2DArray_type); - add_type(symbols, glsl_type::sampler1DArrayShadow_type); - add_type(symbols, glsl_type::sampler2DArrayShadow_type); - } - if (state->exts->EXT_texture_buffer_object) { - add_type(symbols, glsl_type::samplerBuffer_type); - } - - if (state->exts->EXT_texture_integer) { - add_type(symbols, glsl_type::isampler1D_type); - add_type(symbols, glsl_type::isampler2D_type); - add_type(symbols, glsl_type::isampler3D_type); - add_type(symbols, glsl_type::isamplerCube_type); - - add_type(symbols, glsl_type::usampler1D_type); - add_type(symbols, glsl_type::usampler2D_type); - add_type(symbols, glsl_type::usampler3D_type); - add_type(symbols, glsl_type::usamplerCube_type); - - if (state->exts->NV_texture_rectangle) { - add_type(symbols, glsl_type::isampler2DRect_type); - add_type(symbols, glsl_type::usampler2DRect_type); - } - if (state->exts->EXT_texture_array) { - add_type(symbols, glsl_type::isampler1DArray_type); - add_type(symbols, glsl_type::isampler2DArray_type); - add_type(symbols, glsl_type::usampler1DArray_type); - add_type(symbols, glsl_type::usampler2DArray_type); - } - if (state->exts->EXT_texture_buffer_object) { - add_type(symbols, glsl_type::isamplerBuffer_type); - add_type(symbols, glsl_type::usamplerBuffer_type); - } - } - } - - if (state->EXT_texture_array_enable) { - add_type(symbols, glsl_type::sampler1DArray_type); - add_type(symbols, glsl_type::sampler2DArray_type); - add_type(symbols, glsl_type::sampler1DArrayShadow_type); - add_type(symbols, glsl_type::sampler2DArrayShadow_type); - } - - if (state->OES_EGL_image_external_enable || - state->OES_EGL_image_external_essl3_enable) { - add_type(symbols, glsl_type::samplerExternalOES_type); - } - - if (state->OES_texture_3D_enable) { - add_type(symbols, glsl_type::sampler3D_type); - } - - if (state->ARB_shader_image_load_store_enable || - state->EXT_texture_cube_map_array_enable || - state->OES_texture_cube_map_array_enable) { - add_type(symbols, glsl_type::imageCubeArray_type); - add_type(symbols, glsl_type::iimageCubeArray_type); - add_type(symbols, glsl_type::uimageCubeArray_type); - } - - if (state->ARB_shader_image_load_store_enable) { - add_type(symbols, glsl_type::image1D_type); - add_type(symbols, glsl_type::image2D_type); - add_type(symbols, glsl_type::image3D_type); - add_type(symbols, glsl_type::image2DRect_type); - add_type(symbols, glsl_type::imageCube_type); - add_type(symbols, glsl_type::imageBuffer_type); - add_type(symbols, glsl_type::image1DArray_type); - add_type(symbols, glsl_type::image2DArray_type); - add_type(symbols, glsl_type::image2DMS_type); - add_type(symbols, glsl_type::image2DMSArray_type); - add_type(symbols, glsl_type::iimage1D_type); - add_type(symbols, glsl_type::iimage2D_type); - add_type(symbols, glsl_type::iimage3D_type); - add_type(symbols, glsl_type::iimage2DRect_type); - add_type(symbols, glsl_type::iimageCube_type); - add_type(symbols, glsl_type::iimageBuffer_type); - add_type(symbols, glsl_type::iimage1DArray_type); - add_type(symbols, glsl_type::iimage2DArray_type); - add_type(symbols, glsl_type::iimage2DMS_type); - add_type(symbols, glsl_type::iimage2DMSArray_type); - add_type(symbols, glsl_type::uimage1D_type); - add_type(symbols, glsl_type::uimage2D_type); - add_type(symbols, glsl_type::uimage3D_type); - add_type(symbols, glsl_type::uimage2DRect_type); - add_type(symbols, glsl_type::uimageCube_type); - add_type(symbols, glsl_type::uimageBuffer_type); - add_type(symbols, glsl_type::uimage1DArray_type); - add_type(symbols, glsl_type::uimage2DArray_type); - add_type(symbols, glsl_type::uimage2DMS_type); - add_type(symbols, glsl_type::uimage2DMSArray_type); - } - - if (state->EXT_texture_buffer_enable || state->OES_texture_buffer_enable) { - add_type(symbols, glsl_type::samplerBuffer_type); - add_type(symbols, glsl_type::isamplerBuffer_type); - add_type(symbols, glsl_type::usamplerBuffer_type); - - add_type(symbols, glsl_type::imageBuffer_type); - add_type(symbols, glsl_type::iimageBuffer_type); - add_type(symbols, glsl_type::uimageBuffer_type); - } - - if (state->has_atomic_counters()) { - add_type(symbols, glsl_type::atomic_uint_type); - } - - if (state->ARB_gpu_shader_fp64_enable) { - add_type(symbols, glsl_type::double_type); - add_type(symbols, glsl_type::dvec2_type); - add_type(symbols, glsl_type::dvec3_type); - add_type(symbols, glsl_type::dvec4_type); - add_type(symbols, glsl_type::dmat2_type); - add_type(symbols, glsl_type::dmat3_type); - add_type(symbols, glsl_type::dmat4_type); - add_type(symbols, glsl_type::dmat2x3_type); - add_type(symbols, glsl_type::dmat2x4_type); - add_type(symbols, glsl_type::dmat3x2_type); - add_type(symbols, glsl_type::dmat3x4_type); - add_type(symbols, glsl_type::dmat4x2_type); - add_type(symbols, glsl_type::dmat4x3_type); - } - - if (state->ARB_gpu_shader_int64_enable || - state->AMD_gpu_shader_int64_enable) { - add_type(symbols, glsl_type::int64_t_type); - add_type(symbols, glsl_type::i64vec2_type); - add_type(symbols, glsl_type::i64vec3_type); - add_type(symbols, glsl_type::i64vec4_type); - - add_type(symbols, glsl_type::uint64_t_type); - add_type(symbols, glsl_type::u64vec2_type); - add_type(symbols, glsl_type::u64vec3_type); - add_type(symbols, glsl_type::u64vec4_type); - } -} -/** @} */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_variables.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_variables.cpp deleted file mode 100644 index 283102a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/builtin_variables.cpp +++ /dev/null @@ -1,1692 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -/** - * Building this file with MinGW g++ 7.3 or 7.4 with: - * scons platform=windows toolchain=crossmingw machine=x86 build=profile - * triggers an internal compiler error. - * Overriding the optimization level to -O1 works around the issue. - * MinGW 5.3.1 does not seem to have the bug, neither does 8.3. So for now - * we're simply testing for version 7.x here. - */ -#if defined(__MINGW32__) && __GNUC__ == 7 -#warning "disabling optimizations for this file to work around compiler bug in MinGW gcc 7.x" -#pragma GCC optimize("O1") -#endif - - -#include "ir.h" -#include "ir_builder.h" -#include "linker.h" -#include "glsl_parser_extras.h" -#include "glsl_symbol_table.h" -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/uniforms.h" -#include "../../mesa/program/prog_instruction.h" - -using namespace ir_builder; - -static const struct gl_builtin_uniform_element gl_NumSamples_elements[] = { - {NULL, {STATE_NUM_SAMPLES, 0, 0}, SWIZZLE_XXXX} -}; - -static const struct gl_builtin_uniform_element gl_DepthRange_elements[] = { - {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX}, - {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_YYYY}, - {"diff", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_ZZZZ}, -}; - -static const struct gl_builtin_uniform_element gl_ClipPlane_elements[] = { - {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW} -}; - -static const struct gl_builtin_uniform_element gl_Point_elements[] = { - {"size", {STATE_POINT_SIZE}, SWIZZLE_XXXX}, - {"sizeMin", {STATE_POINT_SIZE}, SWIZZLE_YYYY}, - {"sizeMax", {STATE_POINT_SIZE}, SWIZZLE_ZZZZ}, - {"fadeThresholdSize", {STATE_POINT_SIZE}, SWIZZLE_WWWW}, - {"distanceConstantAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_XXXX}, - {"distanceLinearAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_YYYY}, - {"distanceQuadraticAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_ZZZZ}, -}; - -static const struct gl_builtin_uniform_element gl_FrontMaterial_elements[] = { - {"emission", {STATE_MATERIAL, MAT_ATTRIB_FRONT_EMISSION}, SWIZZLE_XYZW}, - {"ambient", {STATE_MATERIAL, MAT_ATTRIB_FRONT_AMBIENT}, SWIZZLE_XYZW}, - {"diffuse", {STATE_MATERIAL, MAT_ATTRIB_FRONT_DIFFUSE}, SWIZZLE_XYZW}, - {"specular", {STATE_MATERIAL, MAT_ATTRIB_FRONT_SPECULAR}, SWIZZLE_XYZW}, - {"shininess", {STATE_MATERIAL, MAT_ATTRIB_FRONT_SHININESS}, SWIZZLE_XXXX}, -}; - -static const struct gl_builtin_uniform_element gl_BackMaterial_elements[] = { - {"emission", {STATE_MATERIAL, MAT_ATTRIB_BACK_EMISSION}, SWIZZLE_XYZW}, - {"ambient", {STATE_MATERIAL, MAT_ATTRIB_BACK_AMBIENT}, SWIZZLE_XYZW}, - {"diffuse", {STATE_MATERIAL, MAT_ATTRIB_BACK_DIFFUSE}, SWIZZLE_XYZW}, - {"specular", {STATE_MATERIAL, MAT_ATTRIB_BACK_SPECULAR}, SWIZZLE_XYZW}, - {"shininess", {STATE_MATERIAL, MAT_ATTRIB_BACK_SHININESS}, SWIZZLE_XXXX}, -}; - -static const struct gl_builtin_uniform_element gl_LightSource_elements[] = { - {"ambient", {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, - {"diffuse", {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, - {"specular", {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, - {"position", {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW}, - {"halfVector", {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW}, - {"spotDirection", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, - MAKE_SWIZZLE4(SWIZZLE_X, - SWIZZLE_Y, - SWIZZLE_Z, - SWIZZLE_Z)}, - {"spotCosCutoff", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_WWWW}, - {"constantAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_XXXX}, - {"linearAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_YYYY}, - {"quadraticAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_ZZZZ}, - {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_WWWW}, - {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_XXXX}, -}; - -static const struct gl_builtin_uniform_element gl_LightModel_elements[] = { - {"ambient", {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_FrontLightModelProduct_elements[] = { - {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_BackLightModelProduct_elements[] = { - {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_FrontLightProduct_elements[] = { - {"ambient", {STATE_LIGHTPROD, 0, MAT_ATTRIB_FRONT_AMBIENT}, SWIZZLE_XYZW}, - {"diffuse", {STATE_LIGHTPROD, 0, MAT_ATTRIB_FRONT_DIFFUSE}, SWIZZLE_XYZW}, - {"specular", {STATE_LIGHTPROD, 0, MAT_ATTRIB_FRONT_SPECULAR}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_BackLightProduct_elements[] = { - {"ambient", {STATE_LIGHTPROD, 0, MAT_ATTRIB_BACK_AMBIENT}, SWIZZLE_XYZW}, - {"diffuse", {STATE_LIGHTPROD, 0, MAT_ATTRIB_BACK_DIFFUSE}, SWIZZLE_XYZW}, - {"specular", {STATE_LIGHTPROD, 0, MAT_ATTRIB_BACK_SPECULAR}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_TextureEnvColor_elements[] = { - {NULL, {STATE_TEXENV_COLOR, 0}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_EyePlaneS_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_S}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_EyePlaneT_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_T}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_EyePlaneR_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_R}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_EyePlaneQ_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_Q}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_ObjectPlaneS_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_S}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_ObjectPlaneT_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_T}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_ObjectPlaneR_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_R}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_ObjectPlaneQ_elements[] = { - {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_Q}, SWIZZLE_XYZW}, -}; - -static const struct gl_builtin_uniform_element gl_Fog_elements[] = { - {"color", {STATE_FOG_COLOR}, SWIZZLE_XYZW}, - {"density", {STATE_FOG_PARAMS}, SWIZZLE_XXXX}, - {"start", {STATE_FOG_PARAMS}, SWIZZLE_YYYY}, - {"end", {STATE_FOG_PARAMS}, SWIZZLE_ZZZZ}, - {"scale", {STATE_FOG_PARAMS}, SWIZZLE_WWWW}, -}; - -static const struct gl_builtin_uniform_element gl_NormalScale_elements[] = { - {NULL, {STATE_NORMAL_SCALE_EYESPACE}, SWIZZLE_XXXX}, -}; - -static const struct gl_builtin_uniform_element gl_FogParamsOptimizedMESA_elements[] = { - {NULL, {STATE_FOG_PARAMS_OPTIMIZED}, SWIZZLE_XYZW}, -}; - -#define ATTRIB(i) \ - static const struct gl_builtin_uniform_element gl_CurrentAttribFrag##i##MESA_elements[] = { \ - {NULL, {STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED, i}, SWIZZLE_XYZW}, \ - }; - -ATTRIB(0) -ATTRIB(1) -ATTRIB(2) -ATTRIB(3) -ATTRIB(4) -ATTRIB(5) -ATTRIB(6) -ATTRIB(7) -ATTRIB(8) -ATTRIB(9) -ATTRIB(10) -ATTRIB(11) -ATTRIB(12) -ATTRIB(13) -ATTRIB(14) -ATTRIB(15) -ATTRIB(16) -ATTRIB(17) -ATTRIB(18) -ATTRIB(19) -ATTRIB(20) -ATTRIB(21) -ATTRIB(22) -ATTRIB(23) -ATTRIB(24) -ATTRIB(25) -ATTRIB(26) -ATTRIB(27) -ATTRIB(28) -ATTRIB(29) -ATTRIB(30) -ATTRIB(31) - -#define MATRIX(name, statevar) \ - static const struct gl_builtin_uniform_element name ## _elements[] = { \ - { NULL, { statevar, 0, 0, 0}, SWIZZLE_XYZW }, \ - { NULL, { statevar, 0, 1, 1}, SWIZZLE_XYZW }, \ - { NULL, { statevar, 0, 2, 2}, SWIZZLE_XYZW }, \ - { NULL, { statevar, 0, 3, 3}, SWIZZLE_XYZW }, \ - } - -MATRIX(gl_ModelViewMatrix, STATE_MODELVIEW_MATRIX_TRANSPOSE); -MATRIX(gl_ModelViewMatrixInverse, STATE_MODELVIEW_MATRIX_INVTRANS); -MATRIX(gl_ModelViewMatrixTranspose, STATE_MODELVIEW_MATRIX); -MATRIX(gl_ModelViewMatrixInverseTranspose, STATE_MODELVIEW_MATRIX_INVERSE); - -MATRIX(gl_ProjectionMatrix, STATE_PROJECTION_MATRIX_TRANSPOSE); -MATRIX(gl_ProjectionMatrixInverse, STATE_PROJECTION_MATRIX_INVTRANS); -MATRIX(gl_ProjectionMatrixTranspose, STATE_PROJECTION_MATRIX); -MATRIX(gl_ProjectionMatrixInverseTranspose, STATE_PROJECTION_MATRIX_INVERSE); - -MATRIX(gl_ModelViewProjectionMatrix, STATE_MVP_MATRIX_TRANSPOSE); -MATRIX(gl_ModelViewProjectionMatrixInverse, STATE_MVP_MATRIX_INVTRANS); -MATRIX(gl_ModelViewProjectionMatrixTranspose, STATE_MVP_MATRIX); -MATRIX(gl_ModelViewProjectionMatrixInverseTranspose, STATE_MVP_MATRIX_INVERSE); - -MATRIX(gl_TextureMatrix, STATE_TEXTURE_MATRIX_TRANSPOSE); -MATRIX(gl_TextureMatrixInverse, STATE_TEXTURE_MATRIX_INVTRANS); -MATRIX(gl_TextureMatrixTranspose, STATE_TEXTURE_MATRIX); -MATRIX(gl_TextureMatrixInverseTranspose, STATE_TEXTURE_MATRIX_INVERSE); - -static const struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = { - { NULL, { STATE_MODELVIEW_MATRIX_INVERSE, 0, 0, 0}, - MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z) }, - { NULL, { STATE_MODELVIEW_MATRIX_INVERSE, 0, 1, 1}, - MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z) }, - { NULL, { STATE_MODELVIEW_MATRIX_INVERSE, 0, 2, 2}, - MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z) }, -}; - -#undef MATRIX - -#define STATEVAR(name) {#name, name ## _elements, ARRAY_SIZE(name ## _elements)} - -static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { - STATEVAR(gl_NumSamples), - STATEVAR(gl_DepthRange), - STATEVAR(gl_ClipPlane), - STATEVAR(gl_Point), - STATEVAR(gl_FrontMaterial), - STATEVAR(gl_BackMaterial), - STATEVAR(gl_LightSource), - STATEVAR(gl_LightModel), - STATEVAR(gl_FrontLightModelProduct), - STATEVAR(gl_BackLightModelProduct), - STATEVAR(gl_FrontLightProduct), - STATEVAR(gl_BackLightProduct), - STATEVAR(gl_TextureEnvColor), - STATEVAR(gl_EyePlaneS), - STATEVAR(gl_EyePlaneT), - STATEVAR(gl_EyePlaneR), - STATEVAR(gl_EyePlaneQ), - STATEVAR(gl_ObjectPlaneS), - STATEVAR(gl_ObjectPlaneT), - STATEVAR(gl_ObjectPlaneR), - STATEVAR(gl_ObjectPlaneQ), - STATEVAR(gl_Fog), - - STATEVAR(gl_ModelViewMatrix), - STATEVAR(gl_ModelViewMatrixInverse), - STATEVAR(gl_ModelViewMatrixTranspose), - STATEVAR(gl_ModelViewMatrixInverseTranspose), - - STATEVAR(gl_ProjectionMatrix), - STATEVAR(gl_ProjectionMatrixInverse), - STATEVAR(gl_ProjectionMatrixTranspose), - STATEVAR(gl_ProjectionMatrixInverseTranspose), - - STATEVAR(gl_ModelViewProjectionMatrix), - STATEVAR(gl_ModelViewProjectionMatrixInverse), - STATEVAR(gl_ModelViewProjectionMatrixTranspose), - STATEVAR(gl_ModelViewProjectionMatrixInverseTranspose), - - STATEVAR(gl_TextureMatrix), - STATEVAR(gl_TextureMatrixInverse), - STATEVAR(gl_TextureMatrixTranspose), - STATEVAR(gl_TextureMatrixInverseTranspose), - - STATEVAR(gl_NormalMatrix), - STATEVAR(gl_NormalScale), - - STATEVAR(gl_FogParamsOptimizedMESA), - - STATEVAR(gl_CurrentAttribFrag0MESA), - STATEVAR(gl_CurrentAttribFrag1MESA), - STATEVAR(gl_CurrentAttribFrag2MESA), - STATEVAR(gl_CurrentAttribFrag3MESA), - STATEVAR(gl_CurrentAttribFrag4MESA), - STATEVAR(gl_CurrentAttribFrag5MESA), - STATEVAR(gl_CurrentAttribFrag6MESA), - STATEVAR(gl_CurrentAttribFrag7MESA), - STATEVAR(gl_CurrentAttribFrag8MESA), - STATEVAR(gl_CurrentAttribFrag9MESA), - STATEVAR(gl_CurrentAttribFrag10MESA), - STATEVAR(gl_CurrentAttribFrag11MESA), - STATEVAR(gl_CurrentAttribFrag12MESA), - STATEVAR(gl_CurrentAttribFrag13MESA), - STATEVAR(gl_CurrentAttribFrag14MESA), - STATEVAR(gl_CurrentAttribFrag15MESA), - STATEVAR(gl_CurrentAttribFrag16MESA), - STATEVAR(gl_CurrentAttribFrag17MESA), - STATEVAR(gl_CurrentAttribFrag18MESA), - STATEVAR(gl_CurrentAttribFrag19MESA), - STATEVAR(gl_CurrentAttribFrag20MESA), - STATEVAR(gl_CurrentAttribFrag21MESA), - STATEVAR(gl_CurrentAttribFrag22MESA), - STATEVAR(gl_CurrentAttribFrag23MESA), - STATEVAR(gl_CurrentAttribFrag24MESA), - STATEVAR(gl_CurrentAttribFrag25MESA), - STATEVAR(gl_CurrentAttribFrag26MESA), - STATEVAR(gl_CurrentAttribFrag27MESA), - STATEVAR(gl_CurrentAttribFrag28MESA), - STATEVAR(gl_CurrentAttribFrag29MESA), - STATEVAR(gl_CurrentAttribFrag30MESA), - STATEVAR(gl_CurrentAttribFrag31MESA), - - {NULL, NULL, 0} -}; - - -namespace { - -/** - * Data structure that accumulates fields for the gl_PerVertex interface - * block. - */ -class per_vertex_accumulator -{ -public: - per_vertex_accumulator(); - void add_field(int slot, const glsl_type *type, int precision, - const char *name, enum glsl_interp_mode interp); - const glsl_type *construct_interface_instance() const; - -private: - glsl_struct_field fields[14]; - unsigned num_fields; -}; - - -per_vertex_accumulator::per_vertex_accumulator() - : fields(), - num_fields(0) -{ -} - - -void -per_vertex_accumulator::add_field(int slot, const glsl_type *type, - int precision, const char *name, - enum glsl_interp_mode interp) -{ - assert(this->num_fields < ARRAY_SIZE(this->fields)); - this->fields[this->num_fields].type = type; - this->fields[this->num_fields].name = name; - this->fields[this->num_fields].matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; - this->fields[this->num_fields].location = slot; - this->fields[this->num_fields].offset = -1; - this->fields[this->num_fields].interpolation = interp; - this->fields[this->num_fields].centroid = 0; - this->fields[this->num_fields].sample = 0; - this->fields[this->num_fields].patch = 0; - this->fields[this->num_fields].precision = precision; - this->fields[this->num_fields].memory_read_only = 0; - this->fields[this->num_fields].memory_write_only = 0; - this->fields[this->num_fields].memory_coherent = 0; - this->fields[this->num_fields].memory_volatile = 0; - this->fields[this->num_fields].memory_restrict = 0; - this->fields[this->num_fields].image_format = PIPE_FORMAT_NONE; - this->fields[this->num_fields].explicit_xfb_buffer = 0; - this->fields[this->num_fields].xfb_buffer = -1; - this->fields[this->num_fields].xfb_stride = -1; - this->num_fields++; -} - - -const glsl_type * -per_vertex_accumulator::construct_interface_instance() const -{ - return glsl_type::get_interface_instance(this->fields, this->num_fields, - GLSL_INTERFACE_PACKING_STD140, - false, - "gl_PerVertex"); -} - - -class builtin_variable_generator -{ -public: - builtin_variable_generator(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - void generate_constants(); - void generate_uniforms(); - void generate_special_vars(); - void generate_vs_special_vars(); - void generate_tcs_special_vars(); - void generate_tes_special_vars(); - void generate_gs_special_vars(); - void generate_fs_special_vars(); - void generate_cs_special_vars(); - void generate_varyings(); - -private: - const glsl_type *array(const glsl_type *base, unsigned elements) - { - return glsl_type::get_array_instance(base, elements); - } - - const glsl_type *type(const char *name) - { - return symtab->get_type(name); - } - - ir_variable *add_input(int slot, const glsl_type *type, int precision, - const char *name, - enum glsl_interp_mode interp = INTERP_MODE_NONE) - { - return add_variable(name, type, precision, ir_var_shader_in, slot, interp); - } - - ir_variable *add_input(int slot, const glsl_type *type, const char *name, - enum glsl_interp_mode interp = INTERP_MODE_NONE) - { - return add_input(slot, type, GLSL_PRECISION_NONE, name, interp); - } - - ir_variable *add_output(int slot, const glsl_type *type, int precision, - const char *name) - { - return add_variable(name, type, precision, ir_var_shader_out, slot); - } - - ir_variable *add_output(int slot, const glsl_type *type, const char *name) - { - return add_output(slot, type, GLSL_PRECISION_NONE, name); - } - - ir_variable *add_index_output(int slot, int index, const glsl_type *type, - int precision, const char *name) - { - return add_index_variable(name, type, precision, ir_var_shader_out, slot, - index); - } - - ir_variable *add_system_value(int slot, const glsl_type *type, int precision, - const char *name) - { - return add_variable(name, type, precision, ir_var_system_value, slot); - } - ir_variable *add_system_value(int slot, const glsl_type *type, - const char *name) - { - return add_system_value(slot, type, GLSL_PRECISION_NONE, name); - } - - ir_variable *add_variable(const char *name, const glsl_type *type, - int precision, enum ir_variable_mode mode, - int slot, enum glsl_interp_mode interp = INTERP_MODE_NONE); - ir_variable *add_index_variable(const char *name, const glsl_type *type, - int precision, enum ir_variable_mode mode, - int slot, int index); - ir_variable *add_uniform(const glsl_type *type, int precision, - const char *name); - ir_variable *add_uniform(const glsl_type *type, const char *name) - { - return add_uniform(type, GLSL_PRECISION_NONE, name); - } - ir_variable *add_const(const char *name, int precision, int value); - ir_variable *add_const(const char *name, int value) - { - return add_const(name, GLSL_PRECISION_MEDIUM, value); - } - ir_variable *add_const_ivec3(const char *name, int x, int y, int z); - void add_varying(int slot, const glsl_type *type, int precision, - const char *name, - enum glsl_interp_mode interp = INTERP_MODE_NONE); - void add_varying(int slot, const glsl_type *type, const char *name, - enum glsl_interp_mode interp = INTERP_MODE_NONE) - { - add_varying(slot, type, GLSL_PRECISION_NONE, name, interp); - } - - exec_list * const instructions; - struct _mesa_glsl_parse_state * const state; - glsl_symbol_table * const symtab; - - /** - * True if compatibility-profile-only variables should be included. (In - * desktop GL, these are always included when the GLSL version is 1.30 and - * or below). - */ - const bool compatibility; - - const glsl_type * const bool_t; - const glsl_type * const int_t; - const glsl_type * const uint_t; - const glsl_type * const uint64_t; - const glsl_type * const float_t; - const glsl_type * const vec2_t; - const glsl_type * const vec3_t; - const glsl_type * const vec4_t; - const glsl_type * const uvec3_t; - const glsl_type * const mat3_t; - const glsl_type * const mat4_t; - - per_vertex_accumulator per_vertex_in; - per_vertex_accumulator per_vertex_out; -}; - - -builtin_variable_generator::builtin_variable_generator( - exec_list *instructions, struct _mesa_glsl_parse_state *state) - : instructions(instructions), state(state), symtab(state->symbols), - compatibility(state->compat_shader || state->ARB_compatibility_enable), - bool_t(glsl_type::bool_type), int_t(glsl_type::int_type), - uint_t(glsl_type::uint_type), - uint64_t(glsl_type::uint64_t_type), - float_t(glsl_type::float_type), vec2_t(glsl_type::vec2_type), - vec3_t(glsl_type::vec3_type), vec4_t(glsl_type::vec4_type), - uvec3_t(glsl_type::uvec3_type), - mat3_t(glsl_type::mat3_type), mat4_t(glsl_type::mat4_type) -{ -} - -ir_variable * -builtin_variable_generator::add_index_variable(const char *name, - const glsl_type *type, - int precision, - enum ir_variable_mode mode, - int slot, int index) -{ - ir_variable *var = new(symtab) ir_variable(type, name, mode); - var->data.how_declared = ir_var_declared_implicitly; - - switch (var->data.mode) { - case ir_var_auto: - case ir_var_shader_in: - case ir_var_uniform: - case ir_var_system_value: - var->data.read_only = true; - break; - case ir_var_shader_out: - case ir_var_shader_storage: - break; - default: - /* The only variables that are added using this function should be - * uniforms, shader storage, shader inputs, and shader outputs, constants - * (which use ir_var_auto), and system values. - */ - assert(0); - break; - } - - var->data.location = slot; - var->data.explicit_location = (slot >= 0); - var->data.explicit_index = 1; - var->data.index = index; - - if (state->es_shader) - var->data.precision = precision; - - /* Once the variable is created an initialized, add it to the symbol table - * and add the declaration to the IR stream. - */ - instructions->push_tail(var); - - symtab->add_variable(var); - return var; -} - -ir_variable * -builtin_variable_generator::add_variable(const char *name, - const glsl_type *type, - int precision, - enum ir_variable_mode mode, int slot, - enum glsl_interp_mode interp) -{ - ir_variable *var = new(symtab) ir_variable(type, name, mode); - var->data.how_declared = ir_var_declared_implicitly; - - switch (var->data.mode) { - case ir_var_auto: - case ir_var_shader_in: - case ir_var_uniform: - case ir_var_system_value: - var->data.read_only = true; - break; - case ir_var_shader_out: - case ir_var_shader_storage: - break; - default: - /* The only variables that are added using this function should be - * uniforms, shader storage, shader inputs, and shader outputs, constants - * (which use ir_var_auto), and system values. - */ - assert(0); - break; - } - - var->data.location = slot; - var->data.explicit_location = (slot >= 0); - var->data.explicit_index = 0; - var->data.interpolation = interp; - - if (state->es_shader) - var->data.precision = precision; - - /* Once the variable is created an initialized, add it to the symbol table - * and add the declaration to the IR stream. - */ - instructions->push_tail(var); - - symtab->add_variable(var); - return var; -} - -extern "C" const struct gl_builtin_uniform_desc * -_mesa_glsl_get_builtin_uniform_desc(const char *name) -{ - for (unsigned i = 0; _mesa_builtin_uniform_desc[i].name != NULL; i++) { - if (strcmp(_mesa_builtin_uniform_desc[i].name, name) == 0) { - return &_mesa_builtin_uniform_desc[i]; - } - } - return NULL; -} - -ir_variable * -builtin_variable_generator::add_uniform(const glsl_type *type, - int precision, - const char *name) -{ - ir_variable *const uni = - add_variable(name, type, precision, ir_var_uniform, -1); - - const struct gl_builtin_uniform_desc* const statevar = - _mesa_glsl_get_builtin_uniform_desc(name); - assert(statevar != NULL); - - const unsigned array_count = type->is_array() ? type->length : 1; - - ir_state_slot *slots = - uni->allocate_state_slots(array_count * statevar->num_elements); - - for (unsigned a = 0; a < array_count; a++) { - for (unsigned j = 0; j < statevar->num_elements; j++) { - const struct gl_builtin_uniform_element *element = - &statevar->elements[j]; - - memcpy(slots->tokens, element->tokens, sizeof(element->tokens)); - if (type->is_array()) - slots->tokens[1] = a; - - slots->swizzle = element->swizzle; - slots++; - } - } - - return uni; -} - - -ir_variable * -builtin_variable_generator::add_const(const char *name, int precision, - int value) -{ - ir_variable *const var = add_variable(name, glsl_type::int_type, - precision, ir_var_auto, -1); - var->constant_value = new(var) ir_constant(value); - var->constant_initializer = new(var) ir_constant(value); - var->data.has_initializer = true; - return var; -} - - -ir_variable * -builtin_variable_generator::add_const_ivec3(const char *name, int x, int y, - int z) -{ - ir_variable *const var = add_variable(name, glsl_type::ivec3_type, - GLSL_PRECISION_HIGH, - ir_var_auto, -1); - ir_constant_data data; - memset(&data, 0, sizeof(data)); - data.i[0] = x; - data.i[1] = y; - data.i[2] = z; - var->constant_value = new(var) ir_constant(glsl_type::ivec3_type, &data); - var->constant_initializer = - new(var) ir_constant(glsl_type::ivec3_type, &data); - var->data.has_initializer = true; - return var; -} - - -void -builtin_variable_generator::generate_constants() -{ - add_const("gl_MaxVertexAttribs", state->Const.MaxVertexAttribs); - add_const("gl_MaxVertexTextureImageUnits", - state->Const.MaxVertexTextureImageUnits); - add_const("gl_MaxCombinedTextureImageUnits", - state->Const.MaxCombinedTextureImageUnits); - add_const("gl_MaxTextureImageUnits", state->Const.MaxTextureImageUnits); - add_const("gl_MaxDrawBuffers", state->Const.MaxDrawBuffers); - - /* Max uniforms/varyings: GLSL ES counts these in units of vectors; desktop - * GL counts them in units of "components" or "floats" and also in units - * of vectors since GL 4.1 - */ - if (!state->es_shader) { - add_const("gl_MaxFragmentUniformComponents", - state->Const.MaxFragmentUniformComponents); - add_const("gl_MaxVertexUniformComponents", - state->Const.MaxVertexUniformComponents); - } - - if (state->is_version(410, 100)) { - add_const("gl_MaxVertexUniformVectors", - state->Const.MaxVertexUniformComponents / 4); - add_const("gl_MaxFragmentUniformVectors", - state->Const.MaxFragmentUniformComponents / 4); - - /* In GLSL ES 3.00, gl_MaxVaryingVectors was split out to separate - * vertex and fragment shader constants. - */ - if (state->is_version(0, 300)) { - add_const("gl_MaxVertexOutputVectors", - state->consts->Program[MESA_SHADER_VERTEX].MaxOutputComponents / 4); - add_const("gl_MaxFragmentInputVectors", - state->consts->Program[MESA_SHADER_FRAGMENT].MaxInputComponents / 4); - } else { - add_const("gl_MaxVaryingVectors", - state->consts->MaxVarying); - } - - /* EXT_blend_func_extended brings a built in constant - * for determining number of dual source draw buffers - */ - if (state->EXT_blend_func_extended_enable) { - add_const("gl_MaxDualSourceDrawBuffersEXT", - state->Const.MaxDualSourceDrawBuffers); - } - } - - /* gl_MaxVaryingFloats was deprecated in GLSL 1.30+, and was moved to - * compat profile in GLSL 4.20. GLSL ES never supported this constant. - */ - if (compatibility || !state->is_version(420, 100)) { - add_const("gl_MaxVaryingFloats", state->consts->MaxVarying * 4); - } - - /* Texel offsets were introduced in ARB_shading_language_420pack (which - * requires desktop GLSL version 130), and adopted into desktop GLSL - * version 4.20 and GLSL ES version 3.00. - */ - if ((state->is_version(130, 0) && - state->ARB_shading_language_420pack_enable) || - state->is_version(420, 300)) { - add_const("gl_MinProgramTexelOffset", - state->Const.MinProgramTexelOffset); - add_const("gl_MaxProgramTexelOffset", - state->Const.MaxProgramTexelOffset); - } - - if (state->has_clip_distance()) { - add_const("gl_MaxClipDistances", state->Const.MaxClipPlanes); - } - if (state->is_version(130, 0)) { - add_const("gl_MaxVaryingComponents", state->consts->MaxVarying * 4); - } - if (state->has_cull_distance()) { - add_const("gl_MaxCullDistances", state->Const.MaxClipPlanes); - add_const("gl_MaxCombinedClipAndCullDistances", - state->Const.MaxClipPlanes); - } - - if (state->has_geometry_shader()) { - add_const("gl_MaxVertexOutputComponents", - state->Const.MaxVertexOutputComponents); - add_const("gl_MaxGeometryInputComponents", - state->Const.MaxGeometryInputComponents); - add_const("gl_MaxGeometryOutputComponents", - state->Const.MaxGeometryOutputComponents); - add_const("gl_MaxFragmentInputComponents", - state->Const.MaxFragmentInputComponents); - add_const("gl_MaxGeometryTextureImageUnits", - state->Const.MaxGeometryTextureImageUnits); - add_const("gl_MaxGeometryOutputVertices", - state->Const.MaxGeometryOutputVertices); - add_const("gl_MaxGeometryTotalOutputComponents", - state->Const.MaxGeometryTotalOutputComponents); - add_const("gl_MaxGeometryUniformComponents", - state->Const.MaxGeometryUniformComponents); - - /* Note: the GLSL 1.50-4.40 specs require - * gl_MaxGeometryVaryingComponents to be present, and to be at least 64. - * But they do not define what it means (and there does not appear to be - * any corresponding constant in the GL specs). However, - * ARB_geometry_shader4 defines MAX_GEOMETRY_VARYING_COMPONENTS_ARB to - * be the maximum number of components available for use as geometry - * outputs. So we assume this is a synonym for - * gl_MaxGeometryOutputComponents. - */ - add_const("gl_MaxGeometryVaryingComponents", - state->Const.MaxGeometryOutputComponents); - } - - if (compatibility) { - /* Note: gl_MaxLights stopped being listed as an explicit constant in - * GLSL 1.30, however it continues to be referred to (as a minimum size - * for compatibility-mode uniforms) all the way up through GLSL 4.30, so - * this seems like it was probably an oversight. - */ - add_const("gl_MaxLights", state->Const.MaxLights); - - add_const("gl_MaxClipPlanes", state->Const.MaxClipPlanes); - - /* Note: gl_MaxTextureUnits wasn't made compatibility-only until GLSL - * 1.50, however this seems like it was probably an oversight. - */ - add_const("gl_MaxTextureUnits", state->Const.MaxTextureUnits); - - /* Note: gl_MaxTextureCoords was left out of GLSL 1.40, but it was - * re-introduced in GLSL 1.50, so this seems like it was probably an - * oversight. - */ - add_const("gl_MaxTextureCoords", state->Const.MaxTextureCoords); - } - - if (state->has_atomic_counters()) { - add_const("gl_MaxVertexAtomicCounters", - state->Const.MaxVertexAtomicCounters); - add_const("gl_MaxFragmentAtomicCounters", - state->Const.MaxFragmentAtomicCounters); - add_const("gl_MaxCombinedAtomicCounters", - state->Const.MaxCombinedAtomicCounters); - add_const("gl_MaxAtomicCounterBindings", - state->Const.MaxAtomicBufferBindings); - - if (state->has_geometry_shader()) { - add_const("gl_MaxGeometryAtomicCounters", - state->Const.MaxGeometryAtomicCounters); - } - if (state->is_version(110, 320)) { - add_const("gl_MaxTessControlAtomicCounters", - state->Const.MaxTessControlAtomicCounters); - add_const("gl_MaxTessEvaluationAtomicCounters", - state->Const.MaxTessEvaluationAtomicCounters); - } - } - - if (state->is_version(420, 310)) { - add_const("gl_MaxVertexAtomicCounterBuffers", - state->Const.MaxVertexAtomicCounterBuffers); - add_const("gl_MaxFragmentAtomicCounterBuffers", - state->Const.MaxFragmentAtomicCounterBuffers); - add_const("gl_MaxCombinedAtomicCounterBuffers", - state->Const.MaxCombinedAtomicCounterBuffers); - add_const("gl_MaxAtomicCounterBufferSize", - state->Const.MaxAtomicCounterBufferSize); - - if (state->has_geometry_shader()) { - add_const("gl_MaxGeometryAtomicCounterBuffers", - state->Const.MaxGeometryAtomicCounterBuffers); - } - if (state->is_version(110, 320)) { - add_const("gl_MaxTessControlAtomicCounterBuffers", - state->Const.MaxTessControlAtomicCounterBuffers); - add_const("gl_MaxTessEvaluationAtomicCounterBuffers", - state->Const.MaxTessEvaluationAtomicCounterBuffers); - } - } - - if (state->is_version(430, 310) || state->ARB_compute_shader_enable) { - add_const("gl_MaxComputeAtomicCounterBuffers", - state->Const.MaxComputeAtomicCounterBuffers); - add_const("gl_MaxComputeAtomicCounters", - state->Const.MaxComputeAtomicCounters); - add_const("gl_MaxComputeImageUniforms", - state->Const.MaxComputeImageUniforms); - add_const("gl_MaxComputeTextureImageUnits", - state->Const.MaxComputeTextureImageUnits); - add_const("gl_MaxComputeUniformComponents", - state->Const.MaxComputeUniformComponents); - - add_const_ivec3("gl_MaxComputeWorkGroupCount", - state->Const.MaxComputeWorkGroupCount[0], - state->Const.MaxComputeWorkGroupCount[1], - state->Const.MaxComputeWorkGroupCount[2]); - add_const_ivec3("gl_MaxComputeWorkGroupSize", - state->Const.MaxComputeWorkGroupSize[0], - state->Const.MaxComputeWorkGroupSize[1], - state->Const.MaxComputeWorkGroupSize[2]); - - /* From the GLSL 4.40 spec, section 7.1 (Built-In Language Variables): - * - * The built-in constant gl_WorkGroupSize is a compute-shader - * constant containing the local work-group size of the shader. The - * size of the work group in the X, Y, and Z dimensions is stored in - * the x, y, and z components. The constants values in - * gl_WorkGroupSize will match those specified in the required - * local_size_x, local_size_y, and local_size_z layout qualifiers - * for the current shader. This is a constant so that it can be - * used to size arrays of memory that can be shared within the local - * work group. It is a compile-time error to use gl_WorkGroupSize - * in a shader that does not declare a fixed local group size, or - * before that shader has declared a fixed local group size, using - * local_size_x, local_size_y, and local_size_z. - * - * To prevent the shader from trying to refer to gl_WorkGroupSize before - * the layout declaration, we don't define it here. Intead we define it - * in ast_cs_input_layout::hir(). - */ - } - - if (state->has_enhanced_layouts()) { - add_const("gl_MaxTransformFeedbackBuffers", - state->Const.MaxTransformFeedbackBuffers); - add_const("gl_MaxTransformFeedbackInterleavedComponents", - state->Const.MaxTransformFeedbackInterleavedComponents); - } - - if (state->has_shader_image_load_store()) { - add_const("gl_MaxImageUnits", - state->Const.MaxImageUnits); - add_const("gl_MaxVertexImageUniforms", - state->Const.MaxVertexImageUniforms); - add_const("gl_MaxFragmentImageUniforms", - state->Const.MaxFragmentImageUniforms); - add_const("gl_MaxCombinedImageUniforms", - state->Const.MaxCombinedImageUniforms); - - if (state->has_geometry_shader()) { - add_const("gl_MaxGeometryImageUniforms", - state->Const.MaxGeometryImageUniforms); - } - - if (!state->es_shader) { - add_const("gl_MaxCombinedImageUnitsAndFragmentOutputs", - state->Const.MaxCombinedShaderOutputResources); - add_const("gl_MaxImageSamples", - state->Const.MaxImageSamples); - } - - if (state->has_tessellation_shader()) { - add_const("gl_MaxTessControlImageUniforms", - state->Const.MaxTessControlImageUniforms); - add_const("gl_MaxTessEvaluationImageUniforms", - state->Const.MaxTessEvaluationImageUniforms); - } - } - - if (state->is_version(440, 310) || - state->ARB_ES3_1_compatibility_enable) { - add_const("gl_MaxCombinedShaderOutputResources", - state->Const.MaxCombinedShaderOutputResources); - } - - if (state->is_version(410, 0) || - state->ARB_viewport_array_enable || - state->OES_viewport_array_enable) { - add_const("gl_MaxViewports", GLSL_PRECISION_HIGH, - state->Const.MaxViewports); - } - - if (state->has_tessellation_shader()) { - add_const("gl_MaxPatchVertices", state->Const.MaxPatchVertices); - add_const("gl_MaxTessGenLevel", state->Const.MaxTessGenLevel); - add_const("gl_MaxTessControlInputComponents", state->Const.MaxTessControlInputComponents); - add_const("gl_MaxTessControlOutputComponents", state->Const.MaxTessControlOutputComponents); - add_const("gl_MaxTessControlTextureImageUnits", state->Const.MaxTessControlTextureImageUnits); - add_const("gl_MaxTessEvaluationInputComponents", state->Const.MaxTessEvaluationInputComponents); - add_const("gl_MaxTessEvaluationOutputComponents", state->Const.MaxTessEvaluationOutputComponents); - add_const("gl_MaxTessEvaluationTextureImageUnits", state->Const.MaxTessEvaluationTextureImageUnits); - add_const("gl_MaxTessPatchComponents", state->Const.MaxTessPatchComponents); - add_const("gl_MaxTessControlTotalOutputComponents", state->Const.MaxTessControlTotalOutputComponents); - add_const("gl_MaxTessControlUniformComponents", state->Const.MaxTessControlUniformComponents); - add_const("gl_MaxTessEvaluationUniformComponents", state->Const.MaxTessEvaluationUniformComponents); - } - - if (state->is_version(450, 320) || - state->OES_sample_variables_enable || - state->ARB_ES3_1_compatibility_enable) - add_const("gl_MaxSamples", state->Const.MaxSamples); -} - - -/** - * Generate uniform variables (which exist in all types of shaders). - */ -void -builtin_variable_generator::generate_uniforms() -{ - if (state->is_version(400, 320) || - state->ARB_sample_shading_enable || - state->OES_sample_variables_enable) - add_uniform(int_t, GLSL_PRECISION_LOW, "gl_NumSamples"); - add_uniform(type("gl_DepthRangeParameters"), "gl_DepthRange"); - - for (unsigned i = 0; i < VARYING_SLOT_VAR0; i++) { - char name[128]; - - snprintf(name, sizeof(name), "gl_CurrentAttribFrag%uMESA", i); - add_uniform(vec4_t, name); - } - - if (compatibility) { - add_uniform(mat4_t, "gl_ModelViewMatrix"); - add_uniform(mat4_t, "gl_ProjectionMatrix"); - add_uniform(mat4_t, "gl_ModelViewProjectionMatrix"); - add_uniform(mat3_t, "gl_NormalMatrix"); - add_uniform(mat4_t, "gl_ModelViewMatrixInverse"); - add_uniform(mat4_t, "gl_ProjectionMatrixInverse"); - add_uniform(mat4_t, "gl_ModelViewProjectionMatrixInverse"); - add_uniform(mat4_t, "gl_ModelViewMatrixTranspose"); - add_uniform(mat4_t, "gl_ProjectionMatrixTranspose"); - add_uniform(mat4_t, "gl_ModelViewProjectionMatrixTranspose"); - add_uniform(mat4_t, "gl_ModelViewMatrixInverseTranspose"); - add_uniform(mat4_t, "gl_ProjectionMatrixInverseTranspose"); - add_uniform(mat4_t, "gl_ModelViewProjectionMatrixInverseTranspose"); - add_uniform(float_t, "gl_NormalScale"); - add_uniform(type("gl_LightModelParameters"), "gl_LightModel"); - add_uniform(vec4_t, "gl_FogParamsOptimizedMESA"); - - const glsl_type *const mat4_array_type = - array(mat4_t, state->Const.MaxTextureCoords); - add_uniform(mat4_array_type, "gl_TextureMatrix"); - add_uniform(mat4_array_type, "gl_TextureMatrixInverse"); - add_uniform(mat4_array_type, "gl_TextureMatrixTranspose"); - add_uniform(mat4_array_type, "gl_TextureMatrixInverseTranspose"); - - add_uniform(array(vec4_t, state->Const.MaxClipPlanes), "gl_ClipPlane"); - add_uniform(type("gl_PointParameters"), "gl_Point"); - - const glsl_type *const material_parameters_type = - type("gl_MaterialParameters"); - add_uniform(material_parameters_type, "gl_FrontMaterial"); - add_uniform(material_parameters_type, "gl_BackMaterial"); - - add_uniform(array(type("gl_LightSourceParameters"), - state->Const.MaxLights), - "gl_LightSource"); - - const glsl_type *const light_model_products_type = - type("gl_LightModelProducts"); - add_uniform(light_model_products_type, "gl_FrontLightModelProduct"); - add_uniform(light_model_products_type, "gl_BackLightModelProduct"); - - const glsl_type *const light_products_type = - array(type("gl_LightProducts"), state->Const.MaxLights); - add_uniform(light_products_type, "gl_FrontLightProduct"); - add_uniform(light_products_type, "gl_BackLightProduct"); - - add_uniform(array(vec4_t, state->Const.MaxTextureUnits), - "gl_TextureEnvColor"); - - const glsl_type *const texcoords_vec4 = - array(vec4_t, state->Const.MaxTextureCoords); - add_uniform(texcoords_vec4, "gl_EyePlaneS"); - add_uniform(texcoords_vec4, "gl_EyePlaneT"); - add_uniform(texcoords_vec4, "gl_EyePlaneR"); - add_uniform(texcoords_vec4, "gl_EyePlaneQ"); - add_uniform(texcoords_vec4, "gl_ObjectPlaneS"); - add_uniform(texcoords_vec4, "gl_ObjectPlaneT"); - add_uniform(texcoords_vec4, "gl_ObjectPlaneR"); - add_uniform(texcoords_vec4, "gl_ObjectPlaneQ"); - - add_uniform(type("gl_FogParameters"), "gl_Fog"); - } -} - - -/** - * Generate special variables which exist in all shaders. - */ -void -builtin_variable_generator::generate_special_vars() -{ - if (state->ARB_shader_ballot_enable) { - add_system_value(SYSTEM_VALUE_SUBGROUP_SIZE, uint_t, "gl_SubGroupSizeARB"); - add_system_value(SYSTEM_VALUE_SUBGROUP_INVOCATION, uint_t, "gl_SubGroupInvocationARB"); - add_system_value(SYSTEM_VALUE_SUBGROUP_EQ_MASK, uint64_t, "gl_SubGroupEqMaskARB"); - add_system_value(SYSTEM_VALUE_SUBGROUP_GE_MASK, uint64_t, "gl_SubGroupGeMaskARB"); - add_system_value(SYSTEM_VALUE_SUBGROUP_GT_MASK, uint64_t, "gl_SubGroupGtMaskARB"); - add_system_value(SYSTEM_VALUE_SUBGROUP_LE_MASK, uint64_t, "gl_SubGroupLeMaskARB"); - add_system_value(SYSTEM_VALUE_SUBGROUP_LT_MASK, uint64_t, "gl_SubGroupLtMaskARB"); - } -} - - -/** - * Generate variables which only exist in vertex shaders. - */ -void -builtin_variable_generator::generate_vs_special_vars() -{ - if (state->is_version(130, 300) || state->EXT_gpu_shader4_enable) { - add_system_value(SYSTEM_VALUE_VERTEX_ID, int_t, GLSL_PRECISION_HIGH, - "gl_VertexID"); - } - if (state->is_version(460, 0)) { - add_system_value(SYSTEM_VALUE_BASE_VERTEX, int_t, "gl_BaseVertex"); - add_system_value(SYSTEM_VALUE_BASE_INSTANCE, int_t, "gl_BaseInstance"); - add_system_value(SYSTEM_VALUE_DRAW_ID, int_t, "gl_DrawID"); - } - if (state->EXT_draw_instanced_enable && state->is_version(0, 100)) - add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, GLSL_PRECISION_HIGH, - "gl_InstanceIDEXT"); - - if (state->ARB_draw_instanced_enable) - add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, "gl_InstanceIDARB"); - - if (state->ARB_draw_instanced_enable || state->is_version(140, 300) || - state->EXT_gpu_shader4_enable) { - add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, GLSL_PRECISION_HIGH, - "gl_InstanceID"); - } - if (state->ARB_shader_draw_parameters_enable) { - add_system_value(SYSTEM_VALUE_BASE_VERTEX, int_t, "gl_BaseVertexARB"); - add_system_value(SYSTEM_VALUE_BASE_INSTANCE, int_t, "gl_BaseInstanceARB"); - add_system_value(SYSTEM_VALUE_DRAW_ID, int_t, "gl_DrawIDARB"); - } - if (compatibility) { - add_input(VERT_ATTRIB_POS, vec4_t, "gl_Vertex"); - add_input(VERT_ATTRIB_NORMAL, vec3_t, "gl_Normal"); - add_input(VERT_ATTRIB_COLOR0, vec4_t, "gl_Color"); - add_input(VERT_ATTRIB_COLOR1, vec4_t, "gl_SecondaryColor"); - add_input(VERT_ATTRIB_TEX0, vec4_t, "gl_MultiTexCoord0"); - add_input(VERT_ATTRIB_TEX1, vec4_t, "gl_MultiTexCoord1"); - add_input(VERT_ATTRIB_TEX2, vec4_t, "gl_MultiTexCoord2"); - add_input(VERT_ATTRIB_TEX3, vec4_t, "gl_MultiTexCoord3"); - add_input(VERT_ATTRIB_TEX4, vec4_t, "gl_MultiTexCoord4"); - add_input(VERT_ATTRIB_TEX5, vec4_t, "gl_MultiTexCoord5"); - add_input(VERT_ATTRIB_TEX6, vec4_t, "gl_MultiTexCoord6"); - add_input(VERT_ATTRIB_TEX7, vec4_t, "gl_MultiTexCoord7"); - add_input(VERT_ATTRIB_FOG, float_t, "gl_FogCoord"); - } -} - - -/** - * Generate variables which only exist in tessellation control shaders. - */ -void -builtin_variable_generator::generate_tcs_special_vars() -{ - add_system_value(SYSTEM_VALUE_PRIMITIVE_ID, int_t, GLSL_PRECISION_HIGH, - "gl_PrimitiveID"); - add_system_value(SYSTEM_VALUE_INVOCATION_ID, int_t, GLSL_PRECISION_HIGH, - "gl_InvocationID"); - add_system_value(SYSTEM_VALUE_VERTICES_IN, int_t, GLSL_PRECISION_HIGH, - "gl_PatchVerticesIn"); - - add_output(VARYING_SLOT_TESS_LEVEL_OUTER, array(float_t, 4), - GLSL_PRECISION_HIGH, "gl_TessLevelOuter")->data.patch = 1; - add_output(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2), - GLSL_PRECISION_HIGH, "gl_TessLevelInner")->data.patch = 1; - /* XXX What to do if multiple are flipped on? */ - int bbox_slot = state->consts->NoPrimitiveBoundingBoxOutput ? -1 : - VARYING_SLOT_BOUNDING_BOX0; - if (state->EXT_primitive_bounding_box_enable) - add_output(bbox_slot, array(vec4_t, 2), "gl_BoundingBoxEXT") - ->data.patch = 1; - if (state->OES_primitive_bounding_box_enable) { - add_output(bbox_slot, array(vec4_t, 2), GLSL_PRECISION_HIGH, - "gl_BoundingBoxOES")->data.patch = 1; - } - if (state->is_version(0, 320) || state->ARB_ES3_2_compatibility_enable) { - add_output(bbox_slot, array(vec4_t, 2), GLSL_PRECISION_HIGH, - "gl_BoundingBox")->data.patch = 1; - } - - /* NOTE: These are completely pointless. Writing these will never go - * anywhere. But the specs demands it. So we add them with a slot of -1, - * which makes the data go nowhere. - */ - if (state->NV_viewport_array2_enable) { - add_output(-1, int_t, "gl_Layer"); - add_output(-1, int_t, "gl_ViewportIndex"); - add_output(-1, array(int_t, 1), "gl_ViewportMask"); - } - -} - - -/** - * Generate variables which only exist in tessellation evaluation shaders. - */ -void -builtin_variable_generator::generate_tes_special_vars() -{ - ir_variable *var; - - add_system_value(SYSTEM_VALUE_PRIMITIVE_ID, int_t, GLSL_PRECISION_HIGH, - "gl_PrimitiveID"); - add_system_value(SYSTEM_VALUE_VERTICES_IN, int_t, GLSL_PRECISION_HIGH, - "gl_PatchVerticesIn"); - add_system_value(SYSTEM_VALUE_TESS_COORD, vec3_t, GLSL_PRECISION_HIGH, - "gl_TessCoord"); - if (this->state->consts->GLSLTessLevelsAsInputs) { - add_input(VARYING_SLOT_TESS_LEVEL_OUTER, array(float_t, 4), - GLSL_PRECISION_HIGH, "gl_TessLevelOuter")->data.patch = 1; - add_input(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2), - GLSL_PRECISION_HIGH, "gl_TessLevelInner")->data.patch = 1; - } else { - add_system_value(SYSTEM_VALUE_TESS_LEVEL_OUTER, array(float_t, 4), - GLSL_PRECISION_HIGH, "gl_TessLevelOuter"); - add_system_value(SYSTEM_VALUE_TESS_LEVEL_INNER, array(float_t, 2), - GLSL_PRECISION_HIGH, "gl_TessLevelInner"); - } - if (state->ARB_shader_viewport_layer_array_enable || - state->NV_viewport_array2_enable) { - var = add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer"); - var->data.interpolation = INTERP_MODE_FLAT; - var = add_output(VARYING_SLOT_VIEWPORT, int_t, "gl_ViewportIndex"); - var->data.interpolation = INTERP_MODE_FLAT; - } - if (state->NV_viewport_array2_enable) { - var = add_output(VARYING_SLOT_VIEWPORT_MASK, array(int_t, 1), - "gl_ViewportMask"); - var->data.interpolation = INTERP_MODE_FLAT; - } -} - - -/** - * Generate variables which only exist in geometry shaders. - */ -void -builtin_variable_generator::generate_gs_special_vars() -{ - ir_variable *var; - - var = add_output(VARYING_SLOT_LAYER, int_t, GLSL_PRECISION_HIGH, "gl_Layer"); - var->data.interpolation = INTERP_MODE_FLAT; - if (state->is_version(410, 0) || state->ARB_viewport_array_enable || - state->OES_viewport_array_enable) { - var = add_output(VARYING_SLOT_VIEWPORT, int_t, GLSL_PRECISION_HIGH, - "gl_ViewportIndex"); - var->data.interpolation = INTERP_MODE_FLAT; - } - if (state->NV_viewport_array2_enable) { - var = add_output(VARYING_SLOT_VIEWPORT_MASK, array(int_t, 1), - "gl_ViewportMask"); - var->data.interpolation = INTERP_MODE_FLAT; - } - if (state->is_version(400, 320) || state->ARB_gpu_shader5_enable || - state->OES_geometry_shader_enable || state->EXT_geometry_shader_enable) { - add_system_value(SYSTEM_VALUE_INVOCATION_ID, int_t, GLSL_PRECISION_HIGH, - "gl_InvocationID"); - } - - /* Although gl_PrimitiveID appears in tessellation control and tessellation - * evaluation shaders, it has a different function there than it has in - * geometry shaders, so we treat it (and its counterpart gl_PrimitiveIDIn) - * as special geometry shader variables. - * - * Note that although the general convention of suffixing geometry shader - * input varyings with "In" was not adopted into GLSL 1.50, it is used in - * the specific case of gl_PrimitiveIDIn. So we don't need to treat - * gl_PrimitiveIDIn as an {ARB,EXT}_geometry_shader4-only variable. - */ - var = add_input(VARYING_SLOT_PRIMITIVE_ID, int_t, GLSL_PRECISION_HIGH, - "gl_PrimitiveIDIn"); - var->data.interpolation = INTERP_MODE_FLAT; - var = add_output(VARYING_SLOT_PRIMITIVE_ID, int_t, GLSL_PRECISION_HIGH, - "gl_PrimitiveID"); - var->data.interpolation = INTERP_MODE_FLAT; -} - - -/** - * Generate variables which only exist in fragment shaders. - */ -void -builtin_variable_generator::generate_fs_special_vars() -{ - ir_variable *var; - - int frag_coord_precision = (state->is_version(0, 300) ? - GLSL_PRECISION_HIGH : - GLSL_PRECISION_MEDIUM); - - if (this->state->consts->GLSLFragCoordIsSysVal) { - add_system_value(SYSTEM_VALUE_FRAG_COORD, vec4_t, frag_coord_precision, - "gl_FragCoord"); - } else { - add_input(VARYING_SLOT_POS, vec4_t, frag_coord_precision, "gl_FragCoord"); - } - - if (this->state->consts->GLSLFrontFacingIsSysVal) { - var = add_system_value(SYSTEM_VALUE_FRONT_FACE, bool_t, "gl_FrontFacing"); - var->data.interpolation = INTERP_MODE_FLAT; - } else { - var = add_input(VARYING_SLOT_FACE, bool_t, "gl_FrontFacing"); - var->data.interpolation = INTERP_MODE_FLAT; - } - - if (state->is_version(120, 100)) { - if (this->state->consts->GLSLPointCoordIsSysVal) - add_system_value(SYSTEM_VALUE_POINT_COORD, vec2_t, - GLSL_PRECISION_MEDIUM, "gl_PointCoord"); - else - add_input(VARYING_SLOT_PNTC, vec2_t, GLSL_PRECISION_MEDIUM, - "gl_PointCoord"); - } - - if (state->has_geometry_shader() || state->EXT_gpu_shader4_enable) { - var = add_input(VARYING_SLOT_PRIMITIVE_ID, int_t, GLSL_PRECISION_HIGH, - "gl_PrimitiveID"); - var->data.interpolation = INTERP_MODE_FLAT; - } - - /* gl_FragColor and gl_FragData were deprecated starting in desktop GLSL - * 1.30, and were relegated to the compatibility profile in GLSL 4.20. - * They were removed from GLSL ES 3.00. - */ - if (compatibility || !state->is_version(420, 300)) { - add_output(FRAG_RESULT_COLOR, vec4_t, GLSL_PRECISION_MEDIUM, - "gl_FragColor"); - add_output(FRAG_RESULT_DATA0, - array(vec4_t, state->Const.MaxDrawBuffers), - GLSL_PRECISION_MEDIUM, - "gl_FragData"); - } - - if (state->has_framebuffer_fetch() && !state->is_version(130, 300)) { - ir_variable *const var = - add_output(FRAG_RESULT_DATA0, - array(vec4_t, state->Const.MaxDrawBuffers), - "gl_LastFragData"); - var->data.precision = GLSL_PRECISION_MEDIUM; - var->data.read_only = 1; - var->data.fb_fetch_output = 1; - var->data.memory_coherent = 1; - } - - if (state->has_framebuffer_fetch_zs()) { - ir_variable *const depth_var = - add_output(FRAG_RESULT_DEPTH, float_t, - GLSL_PRECISION_HIGH, "gl_LastFragDepthARM"); - depth_var->data.read_only = 1; - depth_var->data.fb_fetch_output = 1; - depth_var->data.memory_coherent = 1; - - ir_variable *const stencil_var = - add_output(FRAG_RESULT_STENCIL, int_t, - GLSL_PRECISION_LOW, "gl_LastFragStencilARM"); - stencil_var->data.read_only = 1; - stencil_var->data.fb_fetch_output = 1; - stencil_var->data.memory_coherent = 1; - } - - if (state->es_shader && state->language_version == 100 && state->EXT_blend_func_extended_enable) { - add_index_output(FRAG_RESULT_COLOR, 1, vec4_t, - GLSL_PRECISION_MEDIUM, "gl_SecondaryFragColorEXT"); - add_index_output(FRAG_RESULT_DATA0, 1, - array(vec4_t, state->Const.MaxDualSourceDrawBuffers), - GLSL_PRECISION_MEDIUM, "gl_SecondaryFragDataEXT"); - } - - /* gl_FragDepth has always been in desktop GLSL, but did not appear in GLSL - * ES 1.00. - */ - if (state->is_version(110, 300)) { - add_output(FRAG_RESULT_DEPTH, float_t, GLSL_PRECISION_HIGH, - "gl_FragDepth"); - } - - if (state->EXT_frag_depth_enable) - add_output(FRAG_RESULT_DEPTH, float_t, "gl_FragDepthEXT"); - - if (state->ARB_shader_stencil_export_enable) { - ir_variable *const var = - add_output(FRAG_RESULT_STENCIL, int_t, "gl_FragStencilRefARB"); - if (state->ARB_shader_stencil_export_warn) - var->enable_extension_warning("GL_ARB_shader_stencil_export"); - } - - if (state->AMD_shader_stencil_export_enable) { - ir_variable *const var = - add_output(FRAG_RESULT_STENCIL, int_t, "gl_FragStencilRefAMD"); - if (state->AMD_shader_stencil_export_warn) - var->enable_extension_warning("GL_AMD_shader_stencil_export"); - } - - if (state->is_version(400, 320) || - state->ARB_sample_shading_enable || - state->OES_sample_variables_enable) { - add_system_value(SYSTEM_VALUE_SAMPLE_ID, int_t, GLSL_PRECISION_LOW, - "gl_SampleID"); - add_system_value(SYSTEM_VALUE_SAMPLE_POS, vec2_t, GLSL_PRECISION_MEDIUM, - "gl_SamplePosition"); - /* From the ARB_sample_shading specification: - * "The number of elements in the array is ceil(/32), where - * is the maximum number of color samples supported by the - * implementation." - * Since no drivers expose more than 32x MSAA, we can simply set - * the array size to 1 rather than computing it. - */ - add_output(FRAG_RESULT_SAMPLE_MASK, array(int_t, 1), - GLSL_PRECISION_HIGH, "gl_SampleMask"); - } - - if (state->is_version(400, 320) || - state->ARB_gpu_shader5_enable || - state->OES_sample_variables_enable) { - add_system_value(SYSTEM_VALUE_SAMPLE_MASK_IN, array(int_t, 1), - GLSL_PRECISION_HIGH, "gl_SampleMaskIn"); - } - - if (state->is_version(430, 320) || - state->ARB_fragment_layer_viewport_enable || - state->OES_geometry_shader_enable || - state->EXT_geometry_shader_enable) { - add_varying(VARYING_SLOT_LAYER, int_t, GLSL_PRECISION_HIGH, - "gl_Layer", INTERP_MODE_FLAT); - } - - if (state->is_version(430, 0) || - state->ARB_fragment_layer_viewport_enable || - state->OES_viewport_array_enable) { - add_varying(VARYING_SLOT_VIEWPORT, int_t, "gl_ViewportIndex", INTERP_MODE_FLAT); - } - - if (state->is_version(450, 310) || state->ARB_ES3_1_compatibility_enable) - add_system_value(SYSTEM_VALUE_HELPER_INVOCATION, bool_t, "gl_HelperInvocation"); -} - - -/** - * Generate variables which only exist in compute shaders. - */ -void -builtin_variable_generator::generate_cs_special_vars() -{ - add_system_value(SYSTEM_VALUE_LOCAL_INVOCATION_ID, uvec3_t, - "gl_LocalInvocationID"); - add_system_value(SYSTEM_VALUE_WORKGROUP_ID, uvec3_t, "gl_WorkGroupID"); - add_system_value(SYSTEM_VALUE_NUM_WORKGROUPS, uvec3_t, "gl_NumWorkGroups"); - - if (state->ARB_compute_variable_group_size_enable) { - add_system_value(SYSTEM_VALUE_WORKGROUP_SIZE, - uvec3_t, "gl_LocalGroupSizeARB"); - } - - add_system_value(SYSTEM_VALUE_GLOBAL_INVOCATION_ID, - uvec3_t, "gl_GlobalInvocationID"); - add_system_value(SYSTEM_VALUE_LOCAL_INVOCATION_INDEX, - uint_t, "gl_LocalInvocationIndex"); -} - - -/** - * Add a single "varying" variable. The variable's type and direction (input - * or output) are adjusted as appropriate for the type of shader being - * compiled. - */ -void -builtin_variable_generator::add_varying(int slot, const glsl_type *type, - int precision, const char *name, - enum glsl_interp_mode interp) -{ - switch (state->stage) { - case MESA_SHADER_TESS_CTRL: - case MESA_SHADER_TESS_EVAL: - case MESA_SHADER_GEOMETRY: - this->per_vertex_in.add_field(slot, type, precision, name, interp); - - case MESA_SHADER_VERTEX: - this->per_vertex_out.add_field(slot, type, precision, name, interp); - break; - case MESA_SHADER_FRAGMENT: - add_input(slot, type, precision, name, interp); - break; - case MESA_SHADER_COMPUTE: - /* Compute shaders don't have varyings. */ - break; - default: - break; - } -} - - -/** - * Generate variables that are used to communicate data from one shader stage - * to the next ("varyings"). - */ -void -builtin_variable_generator::generate_varyings() -{ - const struct gl_shader_compiler_options *options = - &state->consts->ShaderCompilerOptions[state->stage]; - - /* gl_Position and gl_PointSize are not visible from fragment shaders. */ - if (state->stage != MESA_SHADER_FRAGMENT) { - add_varying(VARYING_SLOT_POS, vec4_t, GLSL_PRECISION_HIGH, "gl_Position"); - if (!state->es_shader || - state->stage == MESA_SHADER_VERTEX || - (state->stage == MESA_SHADER_GEOMETRY && - (state->OES_geometry_point_size_enable || - state->EXT_geometry_point_size_enable)) || - ((state->stage == MESA_SHADER_TESS_CTRL || - state->stage == MESA_SHADER_TESS_EVAL) && - (state->OES_tessellation_point_size_enable || - state->EXT_tessellation_point_size_enable))) { - add_varying(VARYING_SLOT_PSIZ, - float_t, - state->is_version(0, 300) ? - GLSL_PRECISION_HIGH : - GLSL_PRECISION_MEDIUM, - "gl_PointSize"); - } - if (state->stage == MESA_SHADER_VERTEX) { - if (state->AMD_vertex_shader_viewport_index_enable || - state->ARB_shader_viewport_layer_array_enable || - state->NV_viewport_array2_enable) { - add_varying(VARYING_SLOT_VIEWPORT, int_t, "gl_ViewportIndex", INTERP_MODE_FLAT); - } - - if (state->AMD_vertex_shader_layer_enable || - state->ARB_shader_viewport_layer_array_enable || - state->NV_viewport_array2_enable) { - add_varying(VARYING_SLOT_LAYER, int_t, GLSL_PRECISION_HIGH, - "gl_Layer", INTERP_MODE_FLAT); - } - - /* From the NV_viewport_array2 specification: - * - * "The variable gl_ViewportMask[] is available as an output variable - * in the VTG languages. The array has ceil(v/32) elements where v is - * the maximum number of viewports supported by the implementation." - * - * Since no drivers expose more than 16 viewports, we can simply set the - * array size to 1 rather than computing it and dealing with varying - * slot complication. - */ - if (state->NV_viewport_array2_enable) - add_varying(VARYING_SLOT_VIEWPORT_MASK, array(int_t, 1), - "gl_ViewportMask", INTERP_MODE_FLAT); - } - } - - if (state->has_clip_distance()) { - add_varying(VARYING_SLOT_CLIP_DIST0, array(float_t, 0), - GLSL_PRECISION_HIGH, "gl_ClipDistance"); - } - if (state->has_cull_distance()) { - add_varying(VARYING_SLOT_CULL_DIST0, array(float_t, 0), - GLSL_PRECISION_HIGH, "gl_CullDistance"); - } - - if (compatibility) { - add_varying(VARYING_SLOT_TEX0, array(vec4_t, 0), "gl_TexCoord"); - add_varying(VARYING_SLOT_FOGC, float_t, "gl_FogFragCoord"); - if (state->stage == MESA_SHADER_FRAGMENT) { - add_varying(VARYING_SLOT_COL0, vec4_t, "gl_Color"); - add_varying(VARYING_SLOT_COL1, vec4_t, "gl_SecondaryColor"); - } else { - add_varying(VARYING_SLOT_CLIP_VERTEX, vec4_t, "gl_ClipVertex"); - add_varying(VARYING_SLOT_COL0, vec4_t, "gl_FrontColor"); - add_varying(VARYING_SLOT_BFC0, vec4_t, "gl_BackColor"); - add_varying(VARYING_SLOT_COL1, vec4_t, "gl_FrontSecondaryColor"); - add_varying(VARYING_SLOT_BFC1, vec4_t, "gl_BackSecondaryColor"); - } - } - - /* Section 7.1 (Built-In Language Variables) of the GLSL 4.00 spec - * says: - * - * "In the tessellation control language, built-in variables are - * intrinsically declared as: - * - * in gl_PerVertex { - * vec4 gl_Position; - * float gl_PointSize; - * float gl_ClipDistance[]; - * } gl_in[gl_MaxPatchVertices];" - */ - if (state->stage == MESA_SHADER_TESS_CTRL || - state->stage == MESA_SHADER_TESS_EVAL) { - const glsl_type *per_vertex_in_type = - this->per_vertex_in.construct_interface_instance(); - add_variable("gl_in", array(per_vertex_in_type, state->Const.MaxPatchVertices), - GLSL_PRECISION_NONE, ir_var_shader_in, -1); - } - if (state->stage == MESA_SHADER_GEOMETRY) { - const glsl_type *per_vertex_in_type = - this->per_vertex_in.construct_interface_instance(); - add_variable("gl_in", array(per_vertex_in_type, 0), - GLSL_PRECISION_NONE, ir_var_shader_in, -1); - } - if (state->stage == MESA_SHADER_TESS_CTRL) { - const glsl_type *per_vertex_out_type = - this->per_vertex_out.construct_interface_instance(); - add_variable("gl_out", array(per_vertex_out_type, 0), - GLSL_PRECISION_NONE, ir_var_shader_out, -1); - } - if (state->stage == MESA_SHADER_VERTEX || - state->stage == MESA_SHADER_TESS_EVAL || - state->stage == MESA_SHADER_GEOMETRY) { - const glsl_type *per_vertex_out_type = - this->per_vertex_out.construct_interface_instance(); - const glsl_struct_field *fields = per_vertex_out_type->fields.structure; - for (unsigned i = 0; i < per_vertex_out_type->length; i++) { - ir_variable *var = - add_variable(fields[i].name, fields[i].type, fields[i].precision, - ir_var_shader_out, fields[i].location); - var->data.interpolation = fields[i].interpolation; - var->data.centroid = fields[i].centroid; - var->data.sample = fields[i].sample; - var->data.patch = fields[i].patch; - var->init_interface_type(per_vertex_out_type); - - var->data.invariant = fields[i].location == VARYING_SLOT_POS && - options->PositionAlwaysInvariant; - - var->data.precise = fields[i].location == VARYING_SLOT_POS && - options->PositionAlwaysPrecise; - } - } -} - - -}; /* Anonymous namespace */ - - -void -_mesa_glsl_initialize_variables(exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - builtin_variable_generator gen(instructions, state); - - gen.generate_constants(); - gen.generate_uniforms(); - gen.generate_special_vars(); - - gen.generate_varyings(); - - switch (state->stage) { - case MESA_SHADER_VERTEX: - gen.generate_vs_special_vars(); - break; - case MESA_SHADER_TESS_CTRL: - gen.generate_tcs_special_vars(); - break; - case MESA_SHADER_TESS_EVAL: - gen.generate_tes_special_vars(); - break; - case MESA_SHADER_GEOMETRY: - gen.generate_gs_special_vars(); - break; - case MESA_SHADER_FRAGMENT: - gen.generate_fs_special_vars(); - break; - case MESA_SHADER_COMPUTE: - gen.generate_cs_special_vars(); - break; - default: - break; - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/cross_platform_settings_piece_all.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/cross_platform_settings_piece_all.h deleted file mode 100644 index c052886..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/cross_platform_settings_piece_all.h +++ /dev/null @@ -1,187 +0,0 @@ -static const char cross_platform_settings_piece_all_header[] = { -0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x2d, - 0x32, 0x30, 0x32, 0x32, 0x20, 0x4d, 0x61, 0x74, 0x69, 0x61, 0x73, 0x20, 0x4e, 0x2e, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x62, 0x65, - 0x72, 0x67, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, - 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0x62, 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x66, 0x72, 0x65, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, - 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x0a, 0x20, 0x2a, 0x20, - 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x22, - 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x22, 0x29, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x61, - 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x2c, 0x20, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x20, 0x2a, 0x20, - 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x73, 0x65, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x66, 0x75, 0x72, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, - 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, - 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, - 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, - 0x61, 0x72, 0x65, 0x2e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, - 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x44, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, - 0x22, 0x2c, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x4f, - 0x46, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, - 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, - 0x4e, 0x47, 0x20, 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, - 0x20, 0x54, 0x48, 0x45, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, - 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x49, 0x54, - 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, - 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x4e, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x52, 0x49, - 0x4e, 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x2e, 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, - 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, 0x54, 0x48, 0x45, 0x0a, 0x20, 0x2a, 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x53, 0x20, - 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, - 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x43, 0x4c, 0x41, - 0x49, 0x4d, 0x2c, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, - 0x20, 0x2a, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x57, 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, - 0x20, 0x49, 0x4e, 0x20, 0x41, 0x4e, 0x20, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x4f, 0x46, 0x20, 0x43, 0x4f, 0x4e, 0x54, - 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, 0x54, 0x4f, 0x52, 0x54, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, - 0x53, 0x45, 0x2c, 0x20, 0x41, 0x52, 0x49, 0x53, 0x49, 0x4e, 0x47, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x2c, 0x20, - 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x20, 0x57, 0x49, 0x54, 0x48, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, - 0x4f, 0x52, 0x20, 0x54, 0x48, 0x45, 0x20, 0x55, 0x53, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x20, - 0x2a, 0x20, 0x44, 0x45, 0x41, 0x4c, 0x49, 0x4e, 0x47, 0x53, 0x20, 0x49, 0x4e, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, - 0x54, 0x57, 0x41, 0x52, 0x45, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, - 0x6d, 0x69, 0x6e, 0x33, 0x28, 0x20, 0x61, 0x2c, 0x20, 0x62, 0x2c, 0x20, 0x63, 0x20, 0x29, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x20, - 0x61, 0x2c, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x20, 0x62, 0x2c, 0x20, 0x63, 0x20, 0x29, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x33, 0x28, 0x20, 0x61, 0x2c, 0x20, 0x62, 0x2c, 0x20, 0x63, 0x20, 0x29, 0x20, 0x6d, - 0x61, 0x78, 0x28, 0x20, 0x61, 0x2c, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x20, 0x62, 0x2c, 0x20, 0x63, 0x20, 0x29, 0x20, 0x29, 0x0a, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x76, 0x65, 0x63, 0x32, 0x0a, - 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x76, 0x65, 0x63, 0x33, 0x0a, 0x23, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x76, 0x65, 0x63, 0x34, 0x0a, 0x0a, 0x23, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x69, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x23, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x34, 0x20, 0x69, 0x76, 0x65, 0x63, 0x34, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x20, 0x75, 0x76, 0x65, 0x63, 0x33, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x34, 0x20, 0x75, 0x76, 0x65, 0x63, 0x34, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x78, 0x32, 0x20, 0x6d, 0x61, 0x74, 0x32, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x20, 0x6f, 0x67, 0x72, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x33, 0x20, 0x6d, 0x61, 0x74, 0x33, - 0x78, 0x34, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x33, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x33, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x75, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x34, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x34, 0x0a, 0x0a, 0x2f, 0x2f, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x49, 0x74, - 0x27, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x20, 0x26, 0x20, 0x48, - 0x4c, 0x53, 0x4c, 0x2e, 0x20, 0x41, 0x6e, 0x20, 0x75, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x4d, 0x65, 0x74, - 0x61, 0x6c, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x72, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x74, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x72, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x32, 0x20, 0x69, 0x6e, 0x74, 0x32, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x72, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x0a, 0x2f, 0x2f, 0x53, - 0x68, 0x6f, 0x72, 0x74, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x49, 0x74, 0x27, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x69, 0x6e, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x20, 0x41, 0x6e, 0x20, 0x75, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, - 0x69, 0x6e, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x26, 0x20, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x20, 0x77, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x32, 0x20, 0x69, 0x6e, 0x74, 0x32, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x20, 0x77, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x33, 0x20, 0x69, 0x6e, 0x74, 0x33, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x20, 0x74, 0x6f, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x28, 0x20, 0x78, 0x20, 0x29, 0x20, 0x6d, - 0x61, 0x74, 0x33, 0x28, 0x20, 0x78, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x28, 0x20, 0x72, 0x6f, 0x77, 0x30, 0x2c, 0x20, 0x72, 0x6f, 0x77, 0x31, - 0x2c, 0x20, 0x72, 0x6f, 0x77, 0x32, 0x20, 0x29, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x28, 0x20, 0x72, 0x6f, 0x77, 0x30, 0x2c, 0x20, - 0x72, 0x6f, 0x77, 0x31, 0x2c, 0x20, 0x72, 0x6f, 0x77, 0x32, 0x20, 0x29, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x20, 0x6d, 0x75, 0x6c, 0x28, 0x20, 0x78, 0x2c, 0x20, 0x79, 0x20, 0x29, 0x20, 0x28, 0x28, 0x78, 0x29, 0x20, 0x2a, 0x20, 0x28, - 0x79, 0x29, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x73, 0x61, 0x74, 0x75, 0x72, 0x61, 0x74, 0x65, 0x28, - 0x78, 0x29, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x20, 0x28, 0x78, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, - 0x2e, 0x30, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x6c, 0x65, 0x72, 0x70, 0x20, 0x6d, 0x69, 0x78, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x72, 0x73, 0x71, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x65, 0x73, 0x71, 0x72, 0x74, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x0a, - 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4e, 0x4f, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x50, 0x4f, 0x4c, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x20, 0x66, 0x6c, 0x61, 0x74, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x20, 0x4e, 0x4f, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x50, 0x4f, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, - 0x55, 0x46, 0x46, 0x49, 0x58, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x50, 0x41, 0x52, 0x41, 0x4d, 0x53, - 0x5f, 0x41, 0x52, 0x47, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x50, 0x41, 0x52, - 0x41, 0x4d, 0x53, 0x5f, 0x41, 0x52, 0x47, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x76, 0x65, - 0x72, 0x73, 0x65, 0x62, 0x69, 0x74, 0x73, 0x20, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x65, 0x76, 0x65, 0x72, - 0x73, 0x65, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x20, - 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x75, 0x76, 0x20, 0x29, 0x0a, - 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, - 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x20, 0x74, - 0x65, 0x78, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x32, 0x44, 0x28, 0x20, - 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x49, 0x64, 0x78, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, - 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, 0x20, 0x29, - 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x32, 0x44, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, 0x2c, - 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x20, 0x74, 0x65, - 0x78, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, - 0x20, 0x29, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, - 0x45, 0x5f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, 0x43, 0x75, 0x62, 0x65, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x72, 0x65, 0x4c, 0x6f, 0x64, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x20, 0x75, 0x76, 0x2c, - 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, 0x20, 0x29, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x0a, 0x23, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x47, 0x72, 0x61, 0x64, - 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x64, - 0x64, 0x78, 0x2c, 0x20, 0x64, 0x64, 0x79, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x47, 0x72, 0x61, 0x64, - 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x64, 0x64, 0x78, 0x2c, 0x20, 0x64, 0x64, 0x79, 0x20, 0x29, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x41, - 0x72, 0x72, 0x61, 0x79, 0x32, 0x44, 0x47, 0x72, 0x61, 0x64, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, 0x2c, 0x20, 0x64, 0x64, - 0x78, 0x2c, 0x20, 0x64, 0x64, 0x79, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x47, 0x72, 0x61, 0x64, 0x28, - 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, - 0x49, 0x64, 0x78, 0x20, 0x29, 0x2c, 0x20, 0x64, 0x64, 0x78, 0x2c, 0x20, 0x64, 0x64, 0x79, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x64, 0x64, 0x78, 0x28, 0x20, 0x76, 0x61, 0x6c, 0x20, 0x29, 0x20, - 0x64, 0x46, 0x64, 0x78, 0x28, 0x20, 0x76, 0x61, 0x6c, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, - 0x47, 0x52, 0x45, 0x5f, 0x64, 0x64, 0x79, 0x28, 0x20, 0x76, 0x61, 0x6c, 0x20, 0x29, 0x20, 0x64, 0x46, 0x64, 0x79, 0x28, 0x20, - 0x76, 0x61, 0x6c, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x4c, 0x6f, - 0x61, 0x64, 0x32, 0x44, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x75, 0x76, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, - 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x75, 0x76, - 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, - 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x72, 0x61, 0x79, 0x32, 0x44, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x75, 0x76, - 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, - 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x20, - 0x69, 0x75, 0x76, 0x2c, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x49, 0x64, 0x78, 0x20, 0x29, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, - 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x4c, 0x6f, 0x61, 0x64, 0x32, 0x44, - 0x4d, 0x53, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x75, 0x76, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, - 0x20, 0x69, 0x75, 0x76, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x29, 0x0a, 0x0a, 0x23, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x4c, 0x6f, 0x61, 0x64, 0x33, 0x44, 0x28, 0x20, 0x74, 0x65, - 0x78, 0x2c, 0x20, 0x69, 0x75, 0x76, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x69, 0x76, 0x65, 0x63, 0x33, 0x28, 0x20, 0x69, 0x75, 0x76, 0x20, - 0x29, 0x2c, 0x20, 0x6c, 0x6f, 0x64, 0x20, 0x29, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, - 0x45, 0x5f, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x52, 0x65, 0x64, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x47, 0x61, 0x74, - 0x68, 0x65, 0x72, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x47, 0x72, 0x65, 0x65, 0x6e, - 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x20, 0x29, 0x20, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x47, 0x61, 0x74, 0x68, 0x65, 0x72, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x75, - 0x76, 0x2c, 0x20, 0x31, 0x20, 0x29, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x47, - 0x61, 0x74, 0x68, 0x65, 0x72, 0x42, 0x6c, 0x75, 0x65, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x72, 0x2c, 0x20, 0x75, 0x76, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x47, 0x61, 0x74, 0x68, 0x65, - 0x72, 0x28, 0x20, 0x74, 0x65, 0x78, 0x2c, 0x20, 0x75, 0x76, 0x2c, 0x20, 0x32, 0x20, 0x29, 0x0a, 0x0a, 0x23, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x46, 0x65, 0x74, 0x63, 0x68, 0x31, 0x28, 0x20, 0x62, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x64, 0x78, 0x20, 0x29, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x28, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x64, 0x78, 0x20, 0x29, 0x2e, 0x78, 0x0a, 0x0a, 0x23, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x52, 0x5f, 0x41, 0x52, - 0x47, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x28, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x29, - 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x52, - 0x5f, 0x41, 0x52, 0x47, 0x28, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x29, 0x0a, 0x0a, - 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x33, - 0x44, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x33, 0x44, 0x0a, 0x23, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x4f, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x46, 0x28, 0x20, 0x64, - 0x65, 0x63, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x20, 0x29, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, - 0x49, 0x4e, 0x4f, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x46, 0x28, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x2c, 0x20, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x29, 0x20, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x20, - 0x64, 0x65, 0x63, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x0a, -0 -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/etc2_rgba_stitch.glsl b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/etc2_rgba_stitch.glsl deleted file mode 100644 index f90accb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/etc2_rgba_stitch.glsl +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2020-2022 Matias N. Goldberg - * Copyright 2022 Intel Corporation - * - * 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 THE - * AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -// RGB and Alpha components of ETC2 RGBA are computed separately. -// This compute shader merely stitches them together to form the final result -// It's also used by RG11 driver to stitch two R11 into one RG11 - -#version 310 es - -%s // include "CrossPlatformSettings_piece_all.glsl" - -layout( local_size_x = 8, // - local_size_y = 8, // - local_size_z = 1 ) in; - -layout( binding = 0 ) uniform highp usampler2D srcRGB; -layout( binding = 1 ) uniform highp usampler2D srcAlpha; -layout( rgba32ui ) uniform restrict writeonly highp uimage2D dstTexture; - -void main() -{ - uint2 etcRgb = OGRE_Load2D( srcRGB, int2( gl_GlobalInvocationID.xy ), 0 ).xy; - uint2 etcAlpha = OGRE_Load2D( srcAlpha, int2( gl_GlobalInvocationID.xy ), 0 ).xy; - - imageStore( dstTexture, int2( gl_GlobalInvocationID.xy ), uint4( etcAlpha.xy, etcRgb.xy ) ); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/etc2_rgba_stitch_glsl.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/etc2_rgba_stitch_glsl.h deleted file mode 100644 index a236ac7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/etc2_rgba_stitch_glsl.h +++ /dev/null @@ -1,99 +0,0 @@ -static const char etc2_rgba_stitch_source[] = { -0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x2d, - 0x32, 0x30, 0x32, 0x32, 0x20, 0x4d, 0x61, 0x74, 0x69, 0x61, 0x73, 0x20, 0x4e, 0x2e, 0x20, 0x47, 0x6f, 0x6c, 0x64, 0x62, 0x65, - 0x72, 0x67, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x32, 0x20, - 0x49, 0x6e, 0x74, 0x65, 0x6c, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x2a, 0x0a, - 0x20, 0x2a, 0x20, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, - 0x62, 0x79, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, - 0x68, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, - 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x22, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, - 0x72, 0x65, 0x22, 0x29, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x72, - 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, - 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, - 0x63, 0x6f, 0x70, 0x79, 0x2c, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x2c, 0x20, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x2c, 0x20, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2c, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, - 0x73, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, - 0x20, 0x73, 0x65, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, - 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x20, 0x2a, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x66, 0x75, 0x72, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x73, 0x6f, 0x2c, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, - 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x20, - 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x2e, 0x0a, 0x20, - 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, - 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x44, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, 0x2c, 0x20, 0x57, 0x49, 0x54, - 0x48, 0x4f, 0x55, 0x54, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x41, 0x4e, 0x59, 0x20, - 0x4b, 0x49, 0x4e, 0x44, 0x2c, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x49, - 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x42, 0x55, 0x54, - 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x20, 0x54, 0x48, 0x45, 0x20, 0x57, - 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, - 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, - 0x4f, 0x52, 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, - 0x53, 0x45, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x4e, 0x4f, 0x4e, 0x49, 0x4e, 0x46, 0x52, 0x49, 0x4e, 0x47, 0x45, 0x4d, 0x45, 0x4e, - 0x54, 0x2e, 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, - 0x54, 0x48, 0x45, 0x0a, 0x20, 0x2a, 0x20, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x50, - 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, - 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x2c, 0x20, 0x44, 0x41, - 0x4d, 0x41, 0x47, 0x45, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x4c, 0x49, 0x41, - 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x57, 0x48, 0x45, 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x41, 0x4e, - 0x20, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x4f, 0x46, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, - 0x54, 0x4f, 0x52, 0x54, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, 0x53, 0x45, 0x2c, 0x20, 0x41, 0x52, - 0x49, 0x53, 0x49, 0x4e, 0x47, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x52, 0x4f, 0x4d, 0x2c, 0x20, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, - 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x57, 0x49, 0x54, - 0x48, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x54, 0x48, 0x45, - 0x20, 0x55, 0x53, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x0a, 0x20, 0x2a, 0x20, 0x44, 0x45, 0x41, 0x4c, - 0x49, 0x4e, 0x47, 0x53, 0x20, 0x49, 0x4e, 0x20, 0x54, 0x48, 0x45, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x2e, - 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x0a, 0x2f, 0x2f, 0x20, 0x52, 0x47, 0x42, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x6c, 0x70, 0x68, - 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x54, 0x43, 0x32, 0x20, - 0x52, 0x47, 0x42, 0x41, 0x20, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x20, 0x73, 0x65, 0x70, - 0x61, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2e, 0x0a, 0x2f, 0x2f, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x20, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6d, 0x65, 0x72, 0x65, 0x6c, 0x79, 0x20, 0x73, 0x74, 0x69, - 0x74, 0x63, 0x68, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x0a, 0x2f, 0x2f, 0x20, 0x49, 0x74, 0x27, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x52, 0x47, 0x31, 0x31, 0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x69, - 0x74, 0x63, 0x68, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x52, 0x31, 0x31, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x6f, 0x6e, 0x65, 0x20, - 0x52, 0x47, 0x31, 0x31, 0x0a, 0x0a, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x33, 0x31, 0x30, 0x20, 0x65, 0x73, - 0x0a, 0x0a, 0x25, 0x73, 0x20, 0x2f, 0x2f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x22, 0x43, 0x72, 0x6f, 0x73, - 0x73, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x70, 0x69, 0x65, - 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x2e, 0x67, 0x6c, 0x73, 0x6c, 0x22, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, - 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x38, 0x2c, 0x20, 0x20, 0x2f, - 0x2f, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x38, 0x2c, - 0x20, 0x20, 0x2f, 0x2f, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x7a, 0x20, 0x3d, - 0x20, 0x31, 0x20, 0x29, 0x20, 0x69, 0x6e, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, - 0x67, 0x68, 0x70, 0x20, 0x75, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x72, 0x63, 0x52, 0x47, 0x42, - 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x31, - 0x20, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x75, 0x73, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x72, 0x63, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, - 0x75, 0x74, 0x28, 0x20, 0x72, 0x67, 0x62, 0x61, 0x33, 0x32, 0x75, 0x69, 0x20, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x68, 0x69, 0x67, 0x68, 0x70, 0x20, 0x75, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x32, 0x44, 0x20, 0x64, 0x73, 0x74, 0x54, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, - 0x09, 0x75, 0x69, 0x6e, 0x74, 0x32, 0x20, 0x65, 0x74, 0x63, 0x52, 0x67, 0x62, 0x20, 0x3d, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, - 0x4c, 0x6f, 0x61, 0x64, 0x32, 0x44, 0x28, 0x20, 0x73, 0x72, 0x63, 0x52, 0x47, 0x42, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x32, 0x28, - 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x44, 0x2e, 0x78, 0x79, 0x20, 0x29, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x09, 0x75, 0x69, 0x6e, 0x74, - 0x32, 0x20, 0x65, 0x74, 0x63, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x3d, 0x20, 0x4f, 0x47, 0x52, 0x45, 0x5f, 0x4c, 0x6f, 0x61, - 0x64, 0x32, 0x44, 0x28, 0x20, 0x73, 0x72, 0x63, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x32, 0x28, 0x20, - 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x2e, 0x78, 0x79, 0x20, 0x29, 0x2c, 0x20, 0x30, 0x20, 0x29, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x28, 0x20, 0x64, 0x73, 0x74, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x69, - 0x6e, 0x74, 0x32, 0x28, 0x20, 0x67, 0x6c, 0x5f, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x2e, 0x78, 0x79, 0x20, 0x29, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x34, 0x28, 0x20, 0x65, 0x74, - 0x63, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x65, 0x74, 0x63, 0x52, 0x67, 0x62, 0x2e, 0x78, 0x79, 0x20, - 0x29, 0x20, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, -0 -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/float64.glsl b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/float64.glsl deleted file mode 100644 index 64bdbee..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/float64.glsl +++ /dev/null @@ -1,1724 +0,0 @@ -/* - * The implementations contained in this file are heavily based on the - * implementations found in the Berkeley SoftFloat library. As such, they are - * licensed under the same 3-clause BSD license: - * - * License for Berkeley SoftFloat Release 3e - * - * John R. Hauser - * 2018 January 20 - * - * The following applies to the whole of SoftFloat Release 3e as well as to - * each source file individually. - * - * Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the - * University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions, and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions, and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#version 400 -#extension GL_ARB_gpu_shader_int64 : enable -#extension GL_ARB_shader_bit_encoding : enable -#extension GL_EXT_shader_integer_mix : enable -#extension GL_MESA_shader_integer_functions : enable - -#pragma warning(off) - -/* Software IEEE floating-point rounding mode. - * GLSL spec section "4.7.1 Range and Precision": - * The rounding mode cannot be set and is undefined. - * But here, we are able to define the rounding mode at the compilation time. - */ -#define FLOAT_ROUND_NEAREST_EVEN 0 -#define FLOAT_ROUND_TO_ZERO 1 -#define FLOAT_ROUND_DOWN 2 -#define FLOAT_ROUND_UP 3 -#define FLOAT_ROUNDING_MODE FLOAT_ROUND_NEAREST_EVEN - -/* Relax propagation of NaN. Binary operations with a NaN source will still - * produce a NaN result, but it won't follow strict IEEE rules. - */ -#define RELAXED_NAN_PROPAGATION - -/* Absolute value of a Float64 : - * Clear the sign bit - */ -uint64_t -__fabs64(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - a.y &= 0x7FFFFFFFu; - return packUint2x32(a); -} - -/* Returns 1 if the double-precision floating-point value `a' is a NaN; - * otherwise returns 0. - */ -bool -__is_nan(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - return (0xFFE00000u <= (a.y<<1)) && - ((a.x != 0u) || ((a.y & 0x000FFFFFu) != 0u)); -} - -/* Negate value of a Float64 : - * Toggle the sign bit - */ -uint64_t -__fneg64(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - a.y ^= (1u << 31); - return packUint2x32(a); -} - -uint64_t -__fsign64(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - uvec2 retval; - retval.x = 0u; - retval.y = mix((a.y & 0x80000000u) | 0x3FF00000u, 0u, (a.y << 1 | a.x) == 0u); - return packUint2x32(retval); -} - -/* Returns the fraction bits of the double-precision floating-point value `a'.*/ -uint -__extractFloat64FracLo(uint64_t a) -{ - return unpackUint2x32(a).x; -} - -uint -__extractFloat64FracHi(uint64_t a) -{ - return unpackUint2x32(a).y & 0x000FFFFFu; -} - -/* Returns the exponent bits of the double-precision floating-point value `a'.*/ -int -__extractFloat64Exp(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - return int((a.y>>20) & 0x7FFu); -} - -bool -__feq64_nonnan(uint64_t __a, uint64_t __b) -{ - uvec2 a = unpackUint2x32(__a); - uvec2 b = unpackUint2x32(__b); - return (a.x == b.x) && - ((a.y == b.y) || ((a.x == 0u) && (((a.y | b.y)<<1) == 0u))); -} - -/* Returns true if the double-precision floating-point value `a' is equal to the - * corresponding value `b', and false otherwise. The comparison is performed - * according to the IEEE Standard for Floating-Point Arithmetic. - */ -bool -__feq64(uint64_t a, uint64_t b) -{ - if (__is_nan(a) || __is_nan(b)) - return false; - - return __feq64_nonnan(a, b); -} - -/* Returns true if the double-precision floating-point value `a' is not equal - * to the corresponding value `b', and false otherwise. The comparison is - * performed according to the IEEE Standard for Floating-Point Arithmetic. - */ -bool -__fneu64(uint64_t a, uint64_t b) -{ - if (__is_nan(a) || __is_nan(b)) - return true; - - return !__feq64_nonnan(a, b); -} - -/* Returns the sign bit of the double-precision floating-point value `a'.*/ -uint -__extractFloat64Sign(uint64_t a) -{ - return unpackUint2x32(a).y & 0x80000000u; -} - -/* Returns true if the signed 64-bit value formed by concatenating `a0' and - * `a1' is less than the signed 64-bit value formed by concatenating `b0' and - * `b1'. Otherwise, returns false. - */ -bool -ilt64(uint a0, uint a1, uint b0, uint b1) -{ - return (int(a0) < int(b0)) || ((a0 == b0) && (a1 < b1)); -} - -bool -__flt64_nonnan(uint64_t __a, uint64_t __b) -{ - uvec2 a = unpackUint2x32(__a); - uvec2 b = unpackUint2x32(__b); - - /* IEEE 754 floating point numbers are specifically designed so that, with - * two exceptions, values can be compared by bit-casting to signed integers - * with the same number of bits. - * - * From https://en.wikipedia.org/wiki/IEEE_754-1985#Comparing_floating-point_numbers: - * - * When comparing as 2's-complement integers: If the sign bits differ, - * the negative number precedes the positive number, so 2's complement - * gives the correct result (except that negative zero and positive zero - * should be considered equal). If both values are positive, the 2's - * complement comparison again gives the correct result. Otherwise (two - * negative numbers), the correct FP ordering is the opposite of the 2's - * complement ordering. - * - * The logic implied by the above quotation is: - * - * !both_are_zero(a, b) && (both_negative(a, b) ? a > b : a < b) - * - * This is equivalent to - * - * fneu(a, b) && (both_negative(a, b) ? a >= b : a < b) - * - * fneu(a, b) && (both_negative(a, b) ? !(a < b) : a < b) - * - * fneu(a, b) && ((both_negative(a, b) && !(a < b)) || - * (!both_negative(a, b) && (a < b))) - * - * (A!|B)&(A|!B) is (A xor B) which is implemented here using !=. - * - * fneu(a, b) && (both_negative(a, b) != (a < b)) - */ - bool lt = ilt64(a.y, a.x, b.y, b.x); - bool both_negative = (a.y & b.y & 0x80000000u) != 0; - - return !__feq64_nonnan(__a, __b) && (lt != both_negative); -} - -/* Returns true if the double-precision floating-point value `a' is less than - * the corresponding value `b', and false otherwise. The comparison is performed - * according to the IEEE Standard for Floating-Point Arithmetic. - */ -bool -__flt64(uint64_t a, uint64_t b) -{ - /* This weird layout matters. Doing the "obvious" thing results in extra - * flow control being inserted to implement the short-circuit evaluation - * rules. Flow control is bad! - */ - bool x = !__is_nan(a); - bool y = !__is_nan(b); - bool z = __flt64_nonnan(a, b); - - return (x && y && z); -} - -/* Returns true if the double-precision floating-point value `a' is greater - * than or equal to * the corresponding value `b', and false otherwise. The - * comparison is performed * according to the IEEE Standard for Floating-Point - * Arithmetic. - */ -bool -__fge64(uint64_t a, uint64_t b) -{ - /* This weird layout matters. Doing the "obvious" thing results in extra - * flow control being inserted to implement the short-circuit evaluation - * rules. Flow control is bad! - */ - bool x = !__is_nan(a); - bool y = !__is_nan(b); - bool z = !__flt64_nonnan(a, b); - - return (x && y && z); -} - -uint64_t -__fsat64(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - - /* fsat(NaN) should be zero. */ - if (__is_nan(__a) || int(a.y) < 0) - return 0ul; - - /* IEEE 754 floating point numbers are specifically designed so that, with - * two exceptions, values can be compared by bit-casting to signed integers - * with the same number of bits. - * - * From https://en.wikipedia.org/wiki/IEEE_754-1985#Comparing_floating-point_numbers: - * - * When comparing as 2's-complement integers: If the sign bits differ, - * the negative number precedes the positive number, so 2's complement - * gives the correct result (except that negative zero and positive zero - * should be considered equal). If both values are positive, the 2's - * complement comparison again gives the correct result. Otherwise (two - * negative numbers), the correct FP ordering is the opposite of the 2's - * complement ordering. - * - * We know that both values are not negative, and we know that at least one - * value is not zero. Therefore, we can just use the 2's complement - * comparison ordering. - */ - if (ilt64(0x3FF00000, 0x00000000, a.y, a.x)) - return 0x3FF0000000000000ul; - - return __a; -} - -/* Adds the 64-bit value formed by concatenating `a0' and `a1' to the 64-bit - * value formed by concatenating `b0' and `b1'. Addition is modulo 2^64, so - * any carry out is lost. The result is broken into two 32-bit pieces which - * are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. - */ -void -__add64(uint a0, uint a1, uint b0, uint b1, - out uint z0Ptr, - out uint z1Ptr) -{ - uint z1 = a1 + b1; - z1Ptr = z1; - z0Ptr = a0 + b0 + uint(z1 < a1); -} - - -/* Subtracts the 64-bit value formed by concatenating `b0' and `b1' from the - * 64-bit value formed by concatenating `a0' and `a1'. Subtraction is modulo - * 2^64, so any borrow out (carry out) is lost. The result is broken into two - * 32-bit pieces which are stored at the locations pointed to by `z0Ptr' and - * `z1Ptr'. - */ -void -__sub64(uint a0, uint a1, uint b0, uint b1, - out uint z0Ptr, - out uint z1Ptr) -{ - z1Ptr = a1 - b1; - z0Ptr = a0 - b0 - uint(a1 < b1); -} - -/* Shifts the 64-bit value formed by concatenating `a0' and `a1' right by the - * number of bits given in `count'. If any nonzero bits are shifted off, they - * are "jammed" into the least significant bit of the result by setting the - * least significant bit to 1. The value of `count' can be arbitrarily large; - * in particular, if `count' is greater than 64, the result will be either 0 - * or 1, depending on whether the concatenation of `a0' and `a1' is zero or - * nonzero. The result is broken into two 32-bit pieces which are stored at - * the locations pointed to by `z0Ptr' and `z1Ptr'. - */ -void -__shift64RightJamming(uint a0, - uint a1, - int count, - out uint z0Ptr, - out uint z1Ptr) -{ - uint z0; - uint z1; - int negCount = (-count) & 31; - - z0 = mix(0u, a0, count == 0); - z0 = mix(z0, (a0 >> count), count < 32); - - z1 = uint((a0 | a1) != 0u); /* count >= 64 */ - uint z1_lt64 = (a0>>(count & 31)) | uint(((a0<>count) | uint ((a1<> (count & 31)), count < 64); - z1 = mix(z1, (a0<>count), count < 32); - - a2 = mix(a2 | a1, a2, count < 32); - z0 = mix(z0, a0 >> count, count < 32); - z2 |= uint(a2 != 0u); - - z0 = mix(z0, 0u, (count == 32)); - z1 = mix(z1, a0, (count == 32)); - z2 = mix(z2, a1, (count == 32)); - z0 = mix(z0, a0, (count == 0)); - z1 = mix(z1, a1, (count == 0)); - z2 = mix(z2, a2, (count == 0)); - z2Ptr = z2; - z1Ptr = z1; - z0Ptr = z0; -} - -/* Shifts the 64-bit value formed by concatenating `a0' and `a1' left by the - * number of bits given in `count'. Any bits shifted off are lost. The value - * of `count' must be less than 32. The result is broken into two 32-bit - * pieces which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. - */ -void -__shortShift64Left(uint a0, uint a1, - int count, - out uint z0Ptr, - out uint z1Ptr) -{ - z1Ptr = a1<> ((-count) & 31))), a0, count == 0); -} - -/* Packs the sign `zSign', the exponent `zExp', and the significand formed by - * the concatenation of `zFrac0' and `zFrac1' into a double-precision floating- - * point value, returning the result. After being shifted into the proper - * positions, the three fields `zSign', `zExp', and `zFrac0' are simply added - * together to form the most significant 32 bits of the result. This means - * that any integer portion of `zFrac0' will be added into the exponent. Since - * a properly normalized significand will have an integer portion equal to 1, - * the `zExp' input should be 1 less than the desired result exponent whenever - * `zFrac0' and `zFrac1' concatenated form a complete, normalized significand. - */ -uint64_t -__packFloat64(uint zSign, int zExp, uint zFrac0, uint zFrac1) -{ - uvec2 z; - - z.y = zSign + (uint(zExp) << 20) + zFrac0; - z.x = zFrac1; - return packUint2x32(z); -} - -/* Takes an abstract floating-point value having sign `zSign', exponent `zExp', - * and extended significand formed by the concatenation of `zFrac0', `zFrac1', - * and `zFrac2', and returns the proper double-precision floating-point value - * corresponding to the abstract input. Ordinarily, the abstract value is - * simply rounded and packed into the double-precision format, with the inexact - * exception raised if the abstract input cannot be represented exactly. - * However, if the abstract value is too large, the overflow and inexact - * exceptions are raised and an infinity or maximal finite value is returned. - * If the abstract value is too small, the input value is rounded to a - * subnormal number, and the underflow and inexact exceptions are raised if the - * abstract input cannot be represented exactly as a subnormal double-precision - * floating-point number. - * The input significand must be normalized or smaller. If the input - * significand is not normalized, `zExp' must be 0; in that case, the result - * returned is a subnormal number, and it must not require rounding. In the - * usual case that the input significand is normalized, `zExp' must be 1 less - * than the "true" floating-point exponent. The handling of underflow and - * overflow follows the IEEE Standard for Floating-Point Arithmetic. - */ -uint64_t -__roundAndPackFloat64(uint zSign, - int zExp, - uint zFrac0, - uint zFrac1, - uint zFrac2) -{ - bool roundNearestEven; - bool increment; - - roundNearestEven = FLOAT_ROUNDING_MODE == FLOAT_ROUND_NEAREST_EVEN; - increment = int(zFrac2) < 0; - if (!roundNearestEven) { - if (FLOAT_ROUNDING_MODE == FLOAT_ROUND_TO_ZERO) { - increment = false; - } else { - if (zSign != 0u) { - increment = (FLOAT_ROUNDING_MODE == FLOAT_ROUND_DOWN) && - (zFrac2 != 0u); - } else { - increment = (FLOAT_ROUNDING_MODE == FLOAT_ROUND_UP) && - (zFrac2 != 0u); - } - } - } - if (0x7FD <= zExp) { - if ((0x7FD < zExp) || - ((zExp == 0x7FD) && - (0x001FFFFFu == zFrac0 && 0xFFFFFFFFu == zFrac1) && - increment)) { - if ((FLOAT_ROUNDING_MODE == FLOAT_ROUND_TO_ZERO) || - ((zSign != 0u) && (FLOAT_ROUNDING_MODE == FLOAT_ROUND_UP)) || - ((zSign == 0u) && (FLOAT_ROUNDING_MODE == FLOAT_ROUND_DOWN))) { - return __packFloat64(zSign, 0x7FE, 0x000FFFFFu, 0xFFFFFFFFu); - } - return __packFloat64(zSign, 0x7FF, 0u, 0u); - } - } - - if (zExp < 0) { - __shift64ExtraRightJamming( - zFrac0, zFrac1, zFrac2, -zExp, zFrac0, zFrac1, zFrac2); - zExp = 0; - if (roundNearestEven) { - increment = zFrac2 < 0u; - } else { - if (zSign != 0u) { - increment = (FLOAT_ROUNDING_MODE == FLOAT_ROUND_DOWN) && - (zFrac2 != 0u); - } else { - increment = (FLOAT_ROUNDING_MODE == FLOAT_ROUND_UP) && - (zFrac2 != 0u); - } - } - } - - if (increment) { - __add64(zFrac0, zFrac1, 0u, 1u, zFrac0, zFrac1); - zFrac1 &= ~((zFrac2 + uint(zFrac2 == 0u)) & uint(roundNearestEven)); - } else { - zExp = mix(zExp, 0, (zFrac0 | zFrac1) == 0u); - } - return __packFloat64(zSign, zExp, zFrac0, zFrac1); -} - -uint64_t -__roundAndPackUInt64(uint zSign, uint zFrac0, uint zFrac1, uint zFrac2) -{ - bool roundNearestEven; - bool increment; - uint64_t default_nan = 0xFFFFFFFFFFFFFFFFUL; - - roundNearestEven = FLOAT_ROUNDING_MODE == FLOAT_ROUND_NEAREST_EVEN; - - if (zFrac2 >= 0x80000000u) - increment = false; - - if (!roundNearestEven) { - if (zSign != 0u) { - if ((FLOAT_ROUNDING_MODE == FLOAT_ROUND_DOWN) && (zFrac2 != 0u)) { - increment = false; - } - } else { - increment = (FLOAT_ROUNDING_MODE == FLOAT_ROUND_UP) && - (zFrac2 != 0u); - } - } - - if (increment) { - __add64(zFrac0, zFrac1, 0u, 1u, zFrac0, zFrac1); - if ((zFrac0 | zFrac1) != 0u) - zFrac1 &= ~(1u) + uint(zFrac2 == 0u) & uint(roundNearestEven); - } - return mix(packUint2x32(uvec2(zFrac1, zFrac0)), default_nan, - (zSign != 0u && (zFrac0 | zFrac1) != 0u)); -} - -int64_t -__roundAndPackInt64(uint zSign, uint zFrac0, uint zFrac1, uint zFrac2) -{ - bool roundNearestEven; - bool increment; - int64_t default_NegNaN = -0x7FFFFFFFFFFFFFFEL; - int64_t default_PosNaN = 0xFFFFFFFFFFFFFFFFL; - - roundNearestEven = FLOAT_ROUNDING_MODE == FLOAT_ROUND_NEAREST_EVEN; - - if (zFrac2 >= 0x80000000u) - increment = false; - - if (!roundNearestEven) { - if (zSign != 0u) { - increment = ((FLOAT_ROUNDING_MODE == FLOAT_ROUND_DOWN) && - (zFrac2 != 0u)); - } else { - increment = (FLOAT_ROUNDING_MODE == FLOAT_ROUND_UP) && - (zFrac2 != 0u); - } - } - - if (increment) { - __add64(zFrac0, zFrac1, 0u, 1u, zFrac0, zFrac1); - if ((zFrac0 | zFrac1) != 0u) - zFrac1 &= ~(1u) + uint(zFrac2 == 0u) & uint(roundNearestEven); - } - - int64_t absZ = mix(int64_t(packUint2x32(uvec2(zFrac1, zFrac0))), - -int64_t(packUint2x32(uvec2(zFrac1, zFrac0))), - zSign != 0u); - int64_t nan = mix(default_PosNaN, default_NegNaN, zSign != 0u); - return mix(absZ, nan, ((zSign != 0u) != (absZ < 0)) && bool(absZ)); -} - -/* Returns the number of leading 0 bits before the most-significant 1 bit of - * `a'. If `a' is zero, 32 is returned. - */ -int -__countLeadingZeros32(uint a) -{ - return 31 - findMSB(a); -} - -/* Takes an abstract floating-point value having sign `zSign', exponent `zExp', - * and significand formed by the concatenation of `zSig0' and `zSig1', and - * returns the proper double-precision floating-point value corresponding - * to the abstract input. This routine is just like `__roundAndPackFloat64' - * except that the input significand has fewer bits and does not have to be - * normalized. In all cases, `zExp' must be 1 less than the "true" floating- - * point exponent. - */ -uint64_t -__normalizeRoundAndPackFloat64(uint zSign, - int zExp, - uint zFrac0, - uint zFrac1) -{ - int shiftCount; - uint zFrac2; - - if (zFrac0 == 0u) { - zExp -= 32; - zFrac0 = zFrac1; - zFrac1 = 0u; - } - - shiftCount = __countLeadingZeros32(zFrac0) - 11; - if (0 <= shiftCount) { - zFrac2 = 0u; - __shortShift64Left(zFrac0, zFrac1, shiftCount, zFrac0, zFrac1); - } else { - __shift64ExtraRightJamming( - zFrac0, zFrac1, 0u, -shiftCount, zFrac0, zFrac1, zFrac2); - } - zExp -= shiftCount; - return __roundAndPackFloat64(zSign, zExp, zFrac0, zFrac1, zFrac2); -} - -/* Takes two double-precision floating-point values `a' and `b', one of which - * is a NaN, and returns the appropriate NaN result. - */ -uint64_t -__propagateFloat64NaN(uint64_t __a, uint64_t __b) -{ -#if defined RELAXED_NAN_PROPAGATION - uvec2 a = unpackUint2x32(__a); - uvec2 b = unpackUint2x32(__b); - - return packUint2x32(uvec2(a.x | b.x, a.y | b.y)); -#else - bool aIsNaN = __is_nan(__a); - bool bIsNaN = __is_nan(__b); - uvec2 a = unpackUint2x32(__a); - uvec2 b = unpackUint2x32(__b); - a.y |= 0x00080000u; - b.y |= 0x00080000u; - - return packUint2x32(mix(b, mix(a, b, bvec2(bIsNaN, bIsNaN)), bvec2(aIsNaN, aIsNaN))); -#endif -} - -/* If a shader is in the soft-fp64 path, it almost certainly has register - * pressure problems. Choose a method to exchange two values that does not - * require a temporary. - */ -#define EXCHANGE(a, b) \ - do { \ - a ^= b; \ - b ^= a; \ - a ^= b; \ - } while (false) - -/* Returns the result of adding the double-precision floating-point values - * `a' and `b'. The operation is performed according to the IEEE Standard for - * Floating-Point Arithmetic. - */ -uint64_t -__fadd64(uint64_t a, uint64_t b) -{ - uint aSign = __extractFloat64Sign(a); - uint bSign = __extractFloat64Sign(b); - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - uint bFracLo = __extractFloat64FracLo(b); - uint bFracHi = __extractFloat64FracHi(b); - int aExp = __extractFloat64Exp(a); - int bExp = __extractFloat64Exp(b); - int expDiff = aExp - bExp; - if (aSign == bSign) { - uint zFrac0; - uint zFrac1; - uint zFrac2; - int zExp; - - if (expDiff == 0) { - if (aExp == 0x7FF) { - bool propagate = ((aFracHi | bFracHi) | (aFracLo| bFracLo)) != 0u; - return mix(a, __propagateFloat64NaN(a, b), propagate); - } - __add64(aFracHi, aFracLo, bFracHi, bFracLo, zFrac0, zFrac1); - if (aExp == 0) - return __packFloat64(aSign, 0, zFrac0, zFrac1); - zFrac2 = 0u; - zFrac0 |= 0x00200000u; - zExp = aExp; - __shift64ExtraRightJamming( - zFrac0, zFrac1, zFrac2, 1, zFrac0, zFrac1, zFrac2); - } else { - if (expDiff < 0) { - EXCHANGE(aFracHi, bFracHi); - EXCHANGE(aFracLo, bFracLo); - EXCHANGE(aExp, bExp); - } - - if (aExp == 0x7FF) { - bool propagate = (aFracHi | aFracLo) != 0u; - return mix(__packFloat64(aSign, 0x7ff, 0u, 0u), __propagateFloat64NaN(a, b), propagate); - } - - expDiff = mix(abs(expDiff), abs(expDiff) - 1, bExp == 0); - bFracHi = mix(bFracHi | 0x00100000u, bFracHi, bExp == 0); - __shift64ExtraRightJamming( - bFracHi, bFracLo, 0u, expDiff, bFracHi, bFracLo, zFrac2); - zExp = aExp; - - aFracHi |= 0x00100000u; - __add64(aFracHi, aFracLo, bFracHi, bFracLo, zFrac0, zFrac1); - --zExp; - if (!(zFrac0 < 0x00200000u)) { - __shift64ExtraRightJamming(zFrac0, zFrac1, zFrac2, 1, zFrac0, zFrac1, zFrac2); - ++zExp; - } - } - return __roundAndPackFloat64(aSign, zExp, zFrac0, zFrac1, zFrac2); - - } else { - int zExp; - - __shortShift64Left(aFracHi, aFracLo, 10, aFracHi, aFracLo); - __shortShift64Left(bFracHi, bFracLo, 10, bFracHi, bFracLo); - if (expDiff != 0) { - uint zFrac0; - uint zFrac1; - - if (expDiff < 0) { - EXCHANGE(aFracHi, bFracHi); - EXCHANGE(aFracLo, bFracLo); - EXCHANGE(aExp, bExp); - aSign ^= 0x80000000u; - } - - if (aExp == 0x7FF) { - bool propagate = (aFracHi | aFracLo) != 0u; - return mix(__packFloat64(aSign, 0x7ff, 0u, 0u), __propagateFloat64NaN(a, b), propagate); - } - - expDiff = mix(abs(expDiff), abs(expDiff) - 1, bExp == 0); - bFracHi = mix(bFracHi | 0x40000000u, bFracHi, bExp == 0); - __shift64RightJamming(bFracHi, bFracLo, expDiff, bFracHi, bFracLo); - aFracHi |= 0x40000000u; - __sub64(aFracHi, aFracLo, bFracHi, bFracLo, zFrac0, zFrac1); - zExp = aExp; - --zExp; - return __normalizeRoundAndPackFloat64(aSign, zExp - 10, zFrac0, zFrac1); - } - if (aExp == 0x7FF) { - bool propagate = ((aFracHi | bFracHi) | (aFracLo | bFracLo)) != 0u; - return mix(0xFFFFFFFFFFFFFFFFUL, __propagateFloat64NaN(a, b), propagate); - } - bExp = mix(bExp, 1, aExp == 0); - aExp = mix(aExp, 1, aExp == 0); - - uint zFrac0; - uint zFrac1; - uint sign_of_difference = 0; - if (bFracHi < aFracHi) { - __sub64(aFracHi, aFracLo, bFracHi, bFracLo, zFrac0, zFrac1); - } - else if (aFracHi < bFracHi) { - __sub64(bFracHi, bFracLo, aFracHi, aFracLo, zFrac0, zFrac1); - sign_of_difference = 0x80000000; - } - else if (bFracLo <= aFracLo) { - /* It is possible that zFrac0 and zFrac1 may be zero after this. */ - __sub64(aFracHi, aFracLo, bFracHi, bFracLo, zFrac0, zFrac1); - } - else { - __sub64(bFracHi, bFracLo, aFracHi, aFracLo, zFrac0, zFrac1); - sign_of_difference = 0x80000000; - } - zExp = mix(bExp, aExp, sign_of_difference == 0u); - aSign ^= sign_of_difference; - uint64_t retval_0 = __packFloat64(uint(FLOAT_ROUNDING_MODE == FLOAT_ROUND_DOWN) << 31, 0, 0u, 0u); - uint64_t retval_1 = __normalizeRoundAndPackFloat64(aSign, zExp - 11, zFrac0, zFrac1); - return mix(retval_0, retval_1, zFrac0 != 0u || zFrac1 != 0u); - } -} - -/* Multiplies the 64-bit value formed by concatenating `a0' and `a1' to the - * 64-bit value formed by concatenating `b0' and `b1' to obtain a 128-bit - * product. The product is broken into four 32-bit pieces which are stored at - * the locations pointed to by `z0Ptr', `z1Ptr', `z2Ptr', and `z3Ptr'. - */ -void -__mul64To128(uint a0, uint a1, uint b0, uint b1, - out uint z0Ptr, - out uint z1Ptr, - out uint z2Ptr, - out uint z3Ptr) -{ - uint z0 = 0u; - uint z1 = 0u; - uint z2 = 0u; - uint z3 = 0u; - uint more1 = 0u; - uint more2 = 0u; - - umulExtended(a1, b1, z2, z3); - umulExtended(a1, b0, z1, more2); - __add64(z1, more2, 0u, z2, z1, z2); - umulExtended(a0, b0, z0, more1); - __add64(z0, more1, 0u, z1, z0, z1); - umulExtended(a0, b1, more1, more2); - __add64(more1, more2, 0u, z2, more1, z2); - __add64(z0, z1, 0u, more1, z0, z1); - z3Ptr = z3; - z2Ptr = z2; - z1Ptr = z1; - z0Ptr = z0; -} - -/* Normalizes the subnormal double-precision floating-point value represented - * by the denormalized significand formed by the concatenation of `aFrac0' and - * `aFrac1'. The normalized exponent is stored at the location pointed to by - * `zExpPtr'. The most significant 21 bits of the normalized significand are - * stored at the location pointed to by `zFrac0Ptr', and the least significant - * 32 bits of the normalized significand are stored at the location pointed to - * by `zFrac1Ptr'. - */ -void -__normalizeFloat64Subnormal(uint aFrac0, uint aFrac1, - out int zExpPtr, - out uint zFrac0Ptr, - out uint zFrac1Ptr) -{ - int shiftCount; - uint temp_zfrac0, temp_zfrac1; - shiftCount = __countLeadingZeros32(mix(aFrac0, aFrac1, aFrac0 == 0u)) - 11; - zExpPtr = mix(1 - shiftCount, -shiftCount - 31, aFrac0 == 0u); - - temp_zfrac0 = mix(aFrac1<>(-shiftCount), shiftCount < 0); - temp_zfrac1 = mix(0u, aFrac1<<(shiftCount & 31), shiftCount < 0); - - __shortShift64Left(aFrac0, aFrac1, shiftCount, zFrac0Ptr, zFrac1Ptr); - - zFrac0Ptr = mix(zFrac0Ptr, temp_zfrac0, aFrac0 == 0); - zFrac1Ptr = mix(zFrac1Ptr, temp_zfrac1, aFrac0 == 0); -} - -/* Returns the result of multiplying the double-precision floating-point values - * `a' and `b'. The operation is performed according to the IEEE Standard for - * Floating-Point Arithmetic. - */ -uint64_t -__fmul64(uint64_t a, uint64_t b) -{ - uint zFrac0 = 0u; - uint zFrac1 = 0u; - uint zFrac2 = 0u; - uint zFrac3 = 0u; - int zExp; - - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - uint bFracLo = __extractFloat64FracLo(b); - uint bFracHi = __extractFloat64FracHi(b); - int aExp = __extractFloat64Exp(a); - uint aSign = __extractFloat64Sign(a); - int bExp = __extractFloat64Exp(b); - uint bSign = __extractFloat64Sign(b); - uint zSign = aSign ^ bSign; - if (aExp == 0x7FF) { - if (((aFracHi | aFracLo) != 0u) || - ((bExp == 0x7FF) && ((bFracHi | bFracLo) != 0u))) { - return __propagateFloat64NaN(a, b); - } - if ((uint(bExp) | bFracHi | bFracLo) == 0u) - return 0xFFFFFFFFFFFFFFFFUL; - return __packFloat64(zSign, 0x7FF, 0u, 0u); - } - if (bExp == 0x7FF) { - /* a cannot be NaN, but is b NaN? */ - if ((bFracHi | bFracLo) != 0u) -#if defined RELAXED_NAN_PROPAGATION - return b; -#else - return __propagateFloat64NaN(a, b); -#endif - if ((uint(aExp) | aFracHi | aFracLo) == 0u) - return 0xFFFFFFFFFFFFFFFFUL; - return __packFloat64(zSign, 0x7FF, 0u, 0u); - } - if (aExp == 0) { - if ((aFracHi | aFracLo) == 0u) - return __packFloat64(zSign, 0, 0u, 0u); - __normalizeFloat64Subnormal(aFracHi, aFracLo, aExp, aFracHi, aFracLo); - } - if (bExp == 0) { - if ((bFracHi | bFracLo) == 0u) - return __packFloat64(zSign, 0, 0u, 0u); - __normalizeFloat64Subnormal(bFracHi, bFracLo, bExp, bFracHi, bFracLo); - } - zExp = aExp + bExp - 0x400; - aFracHi |= 0x00100000u; - __shortShift64Left(bFracHi, bFracLo, 12, bFracHi, bFracLo); - __mul64To128( - aFracHi, aFracLo, bFracHi, bFracLo, zFrac0, zFrac1, zFrac2, zFrac3); - __add64(zFrac0, zFrac1, aFracHi, aFracLo, zFrac0, zFrac1); - zFrac2 |= uint(zFrac3 != 0u); - if (0x00200000u <= zFrac0) { - __shift64ExtraRightJamming( - zFrac0, zFrac1, zFrac2, 1, zFrac0, zFrac1, zFrac2); - ++zExp; - } - return __roundAndPackFloat64(zSign, zExp, zFrac0, zFrac1, zFrac2); -} - -uint64_t -__ffma64(uint64_t a, uint64_t b, uint64_t c) -{ - return __fadd64(__fmul64(a, b), c); -} - -/* Shifts the 64-bit value formed by concatenating `a0' and `a1' right by the - * number of bits given in `count'. Any bits shifted off are lost. The value - * of `count' can be arbitrarily large; in particular, if `count' is greater - * than 64, the result will be 0. The result is broken into two 32-bit pieces - * which are stored at the locations pointed to by `z0Ptr' and `z1Ptr'. - */ -void -__shift64Right(uint a0, uint a1, - int count, - out uint z0Ptr, - out uint z1Ptr) -{ - uint z0; - uint z1; - int negCount = (-count) & 31; - - z0 = 0u; - z0 = mix(z0, (a0 >> count), count < 32); - z0 = mix(z0, a0, count == 0); - - z1 = mix(0u, (a0 >> (count & 31)), count < 64); - z1 = mix(z1, (a0<>count), count < 32); - z1 = mix(z1, a0, count == 0); - - z1Ptr = z1; - z0Ptr = z0; -} - -/* Returns the result of converting the double-precision floating-point value - * `a' to the unsigned integer format. The conversion is performed according - * to the IEEE Standard for Floating-Point Arithmetic. - */ -uint -__fp64_to_uint(uint64_t a) -{ - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - int aExp = __extractFloat64Exp(a); - uint aSign = __extractFloat64Sign(a); - - if ((aExp == 0x7FF) && ((aFracHi | aFracLo) != 0u)) - return 0xFFFFFFFFu; - - aFracHi |= mix(0u, 0x00100000u, aExp != 0); - - int shiftDist = 0x427 - aExp; - if (0 < shiftDist) - __shift64RightJamming(aFracHi, aFracLo, shiftDist, aFracHi, aFracLo); - - if ((aFracHi & 0xFFFFF000u) != 0u) - return mix(~0u, 0u, aSign != 0u); - - uint z = 0u; - uint zero = 0u; - __shift64Right(aFracHi, aFracLo, 12, zero, z); - - uint expt = mix(~0u, 0u, aSign != 0u); - - return mix(z, expt, (aSign != 0u) && (z != 0u)); -} - -uint64_t -__uint_to_fp64(uint a) -{ - if (a == 0u) - return 0ul; - - int shiftDist = __countLeadingZeros32(a) + 21; - - uint aHigh = 0u; - uint aLow = 0u; - int negCount = (- shiftDist) & 31; - - aHigh = mix(0u, a<< shiftDist - 32, shiftDist < 64); - aLow = 0u; - aHigh = mix(aHigh, 0u, shiftDist == 0); - aLow = mix(aLow, a, shiftDist ==0); - aHigh = mix(aHigh, a >> negCount, shiftDist < 32); - aLow = mix(aLow, a << shiftDist, shiftDist < 32); - - return __packFloat64(0u, 0x432 - shiftDist, aHigh, aLow); -} - -uint64_t -__uint64_to_fp64(uint64_t a) -{ - if (a == 0u) - return 0ul; - - uvec2 aFrac = unpackUint2x32(a); - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - - if ((aFracHi & 0x80000000u) != 0u) { - __shift64RightJamming(aFracHi, aFracLo, 1, aFracHi, aFracLo); - return __roundAndPackFloat64(0, 0x433, aFracHi, aFracLo, 0u); - } else { - return __normalizeRoundAndPackFloat64(0, 0x432, aFrac.y, aFrac.x); - } -} - -uint64_t -__fp64_to_uint64(uint64_t a) -{ - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - int aExp = __extractFloat64Exp(a); - uint aSign = __extractFloat64Sign(a); - uint zFrac2 = 0u; - uint64_t default_nan = 0xFFFFFFFFFFFFFFFFUL; - - aFracHi = mix(aFracHi, aFracHi | 0x00100000u, aExp != 0); - int shiftCount = 0x433 - aExp; - - if ( shiftCount <= 0 ) { - if (shiftCount < -11 && aExp == 0x7FF) { - if ((aFracHi | aFracLo) != 0u) - return __propagateFloat64NaN(a, a); - return mix(default_nan, a, aSign == 0u); - } - __shortShift64Left(aFracHi, aFracLo, -shiftCount, aFracHi, aFracLo); - } else { - __shift64ExtraRightJamming(aFracHi, aFracLo, zFrac2, shiftCount, - aFracHi, aFracLo, zFrac2); - } - return __roundAndPackUInt64(aSign, aFracHi, aFracLo, zFrac2); -} - -int64_t -__fp64_to_int64(uint64_t a) -{ - uint zFrac2 = 0u; - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - int aExp = __extractFloat64Exp(a); - uint aSign = __extractFloat64Sign(a); - int64_t default_NegNaN = -0x7FFFFFFFFFFFFFFEL; - int64_t default_PosNaN = 0xFFFFFFFFFFFFFFFFL; - - aFracHi = mix(aFracHi, aFracHi | 0x00100000u, aExp != 0); - int shiftCount = 0x433 - aExp; - - if (shiftCount <= 0) { - if (shiftCount < -11 && aExp == 0x7FF) { - if ((aFracHi | aFracLo) != 0u) - return default_NegNaN; - return mix(default_NegNaN, default_PosNaN, aSign == 0u); - } - __shortShift64Left(aFracHi, aFracLo, -shiftCount, aFracHi, aFracLo); - } else { - __shift64ExtraRightJamming(aFracHi, aFracLo, zFrac2, shiftCount, - aFracHi, aFracLo, zFrac2); - } - - return __roundAndPackInt64(aSign, aFracHi, aFracLo, zFrac2); -} - -uint64_t -__int64_to_fp64(int64_t a) -{ - if (a==0) - return 0ul; - - uint64_t absA = mix(uint64_t(a), uint64_t(-a), a < 0); - uint aFracHi = __extractFloat64FracHi(absA); - uvec2 aFrac = unpackUint2x32(absA); - uint zSign = uint(unpackInt2x32(a).y) & 0x80000000u; - - if ((aFracHi & 0x80000000u) != 0u) { - return mix(0ul, __packFloat64(0x80000000u, 0x434, 0u, 0u), a < 0); - } - - return __normalizeRoundAndPackFloat64(zSign, 0x432, aFrac.y, aFrac.x); -} - -/* Returns the result of converting the double-precision floating-point value - * `a' to the 32-bit two's complement integer format. The conversion is - * performed according to the IEEE Standard for Floating-Point Arithmetic--- - * which means in particular that the conversion is rounded according to the - * current rounding mode. If `a' is a NaN, the largest positive integer is - * returned. Otherwise, if the conversion overflows, the largest integer with - * the same sign as `a' is returned. - */ -int -__fp64_to_int(uint64_t a) -{ - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - int aExp = __extractFloat64Exp(a); - uint aSign = __extractFloat64Sign(a); - - uint absZ = 0u; - uint aFracExtra = 0u; - int shiftCount = aExp - 0x413; - - if (0 <= shiftCount) { - if (0x41E < aExp) { - if ((aExp == 0x7FF) && bool(aFracHi | aFracLo)) - aSign = 0u; - return mix(0x7FFFFFFF, 0x80000000, aSign != 0u); - } - __shortShift64Left(aFracHi | 0x00100000u, aFracLo, shiftCount, absZ, aFracExtra); - } else { - if (aExp < 0x3FF) - return 0; - - aFracHi |= 0x00100000u; - aFracExtra = ( aFracHi << (shiftCount & 31)) | aFracLo; - absZ = aFracHi >> (- shiftCount); - } - - int z = mix(int(absZ), -int(absZ), aSign != 0u); - int nan = mix(0x7FFFFFFF, 0x80000000, aSign != 0u); - return mix(z, nan, ((aSign != 0u) != (z < 0)) && bool(z)); -} - -/* Returns the result of converting the 32-bit two's complement integer `a' - * to the double-precision floating-point format. The conversion is performed - * according to the IEEE Standard for Floating-Point Arithmetic. - */ -uint64_t -__int_to_fp64(int a) -{ - uint zFrac0 = 0u; - uint zFrac1 = 0u; - if (a==0) - return __packFloat64(0u, 0, 0u, 0u); - uint zSign = uint(a) & 0x80000000u; - uint absA = mix(uint(a), uint(-a), a < 0); - int shiftCount = __countLeadingZeros32(absA) - 11; - if (0 <= shiftCount) { - zFrac0 = absA << shiftCount; - zFrac1 = 0u; - } else { - __shift64Right(absA, 0u, -shiftCount, zFrac0, zFrac1); - } - return __packFloat64(zSign, 0x412 - shiftCount, zFrac0, zFrac1); -} - -uint64_t -__bool_to_fp64(bool a) -{ - return packUint2x32(uvec2(0x00000000u, uint(-int(a) & 0x3ff00000))); -} - -/* Packs the sign `zSign', exponent `zExp', and significand `zFrac' into a - * single-precision floating-point value, returning the result. After being - * shifted into the proper positions, the three fields are simply added - * together to form the result. This means that any integer portion of `zSig' - * will be added into the exponent. Since a properly normalized significand - * will have an integer portion equal to 1, the `zExp' input should be 1 less - * than the desired result exponent whenever `zFrac' is a complete, normalized - * significand. - */ -float -__packFloat32(uint zSign, int zExp, uint zFrac) -{ - return uintBitsToFloat(zSign + (uint(zExp)<<23) + zFrac); -} - -/* Takes an abstract floating-point value having sign `zSign', exponent `zExp', - * and significand `zFrac', and returns the proper single-precision floating- - * point value corresponding to the abstract input. Ordinarily, the abstract - * value is simply rounded and packed into the single-precision format, with - * the inexact exception raised if the abstract input cannot be represented - * exactly. However, if the abstract value is too large, the overflow and - * inexact exceptions are raised and an infinity or maximal finite value is - * returned. If the abstract value is too small, the input value is rounded to - * a subnormal number, and the underflow and inexact exceptions are raised if - * the abstract input cannot be represented exactly as a subnormal single- - * precision floating-point number. - * The input significand `zFrac' has its binary point between bits 30 - * and 29, which is 7 bits to the left of the usual location. This shifted - * significand must be normalized or smaller. If `zFrac' is not normalized, - * `zExp' must be 0; in that case, the result returned is a subnormal number, - * and it must not require rounding. In the usual case that `zFrac' is - * normalized, `zExp' must be 1 less than the "true" floating-point exponent. - * The handling of underflow and overflow follows the IEEE Standard for - * Floating-Point Arithmetic. - */ -float -__roundAndPackFloat32(uint zSign, int zExp, uint zFrac) -{ - bool roundNearestEven; - int roundIncrement; - int roundBits; - - roundNearestEven = FLOAT_ROUNDING_MODE == FLOAT_ROUND_NEAREST_EVEN; - roundIncrement = 0x40; - if (!roundNearestEven) { - if (FLOAT_ROUNDING_MODE == FLOAT_ROUND_TO_ZERO) { - roundIncrement = 0; - } else { - roundIncrement = 0x7F; - if (zSign != 0u) { - if (FLOAT_ROUNDING_MODE == FLOAT_ROUND_UP) - roundIncrement = 0; - } else { - if (FLOAT_ROUNDING_MODE == FLOAT_ROUND_DOWN) - roundIncrement = 0; - } - } - } - roundBits = int(zFrac & 0x7Fu); - if (0xFDu <= uint(zExp)) { - if ((0xFD < zExp) || ((zExp == 0xFD) && (int(zFrac) + roundIncrement) < 0)) - return __packFloat32(zSign, 0xFF, 0u) - float(roundIncrement == 0); - int count = -zExp; - bool zexp_lt0 = zExp < 0; - uint zFrac_lt0 = mix(uint(zFrac != 0u), (zFrac>>count) | uint((zFrac<<((-count) & 31)) != 0u), (-zExp) < 32); - zFrac = mix(zFrac, zFrac_lt0, zexp_lt0); - roundBits = mix(roundBits, int(zFrac) & 0x7f, zexp_lt0); - zExp = mix(zExp, 0, zexp_lt0); - } - zFrac = (zFrac + uint(roundIncrement))>>7; - zFrac &= ~uint(((roundBits ^ 0x40) == 0) && roundNearestEven); - - return __packFloat32(zSign, mix(zExp, 0, zFrac == 0u), zFrac); -} - -/* Returns the result of converting the double-precision floating-point value - * `a' to the single-precision floating-point format. The conversion is - * performed according to the IEEE Standard for Floating-Point Arithmetic. - */ -float -__fp64_to_fp32(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - uint zFrac = 0u; - uint allZero = 0u; - - uint aFracLo = __extractFloat64FracLo(__a); - uint aFracHi = __extractFloat64FracHi(__a); - int aExp = __extractFloat64Exp(__a); - uint aSign = __extractFloat64Sign(__a); - if (aExp == 0x7FF) { - __shortShift64Left(a.y, a.x, 12, a.y, a.x); - float rval = uintBitsToFloat(aSign | 0x7FC00000u | (a.y>>9)); - rval = mix(__packFloat32(aSign, 0xFF, 0u), rval, (aFracHi | aFracLo) != 0u); - return rval; - } - __shift64RightJamming(aFracHi, aFracLo, 22, allZero, zFrac); - zFrac = mix(zFrac, zFrac | 0x40000000u, aExp != 0); - return __roundAndPackFloat32(aSign, aExp - 0x381, zFrac); -} - -/* Returns the result of converting the single-precision floating-point value - * `a' to the double-precision floating-point format. - */ -uint64_t -__fp32_to_fp64(float f) -{ - uint a = floatBitsToUint(f); - uint aFrac = a & 0x007FFFFFu; - int aExp = int((a>>23) & 0xFFu); - uint aSign = a & 0x80000000u; - uint zFrac0 = 0u; - uint zFrac1 = 0u; - - if (aExp == 0xFF) { - if (aFrac != 0u) { - uint nanLo = 0u; - uint nanHi = a<<9; - __shift64Right(nanHi, nanLo, 12, nanHi, nanLo); - nanHi |= aSign | 0x7FF80000u; - return packUint2x32(uvec2(nanLo, nanHi)); - } - return __packFloat64(aSign, 0x7FF, 0u, 0u); - } - - if (aExp == 0) { - if (aFrac == 0u) - return __packFloat64(aSign, 0, 0u, 0u); - /* Normalize subnormal */ - int shiftCount = __countLeadingZeros32(aFrac) - 8; - aFrac <<= shiftCount; - aExp = 1 - shiftCount; - --aExp; - } - - __shift64Right(aFrac, 0u, 3, zFrac0, zFrac1); - return __packFloat64(aSign, aExp + 0x380, zFrac0, zFrac1); -} - -/* Adds the 96-bit value formed by concatenating `a0', `a1', and `a2' to the - * 96-bit value formed by concatenating `b0', `b1', and `b2'. Addition is - * modulo 2^96, so any carry out is lost. The result is broken into three - * 32-bit pieces which are stored at the locations pointed to by `z0Ptr', - * `z1Ptr', and `z2Ptr'. - */ -void -__add96(uint a0, uint a1, uint a2, - uint b0, uint b1, uint b2, - out uint z0Ptr, - out uint z1Ptr, - out uint z2Ptr) -{ - uint z2 = a2 + b2; - uint carry1 = uint(z2 < a2); - uint z1 = a1 + b1; - uint carry0 = uint(z1 < a1); - uint z0 = a0 + b0; - z1 += carry1; - z0 += uint(z1 < carry1); - z0 += carry0; - z2Ptr = z2; - z1Ptr = z1; - z0Ptr = z0; -} - -/* Subtracts the 96-bit value formed by concatenating `b0', `b1', and `b2' from - * the 96-bit value formed by concatenating `a0', `a1', and `a2'. Subtraction - * is modulo 2^96, so any borrow out (carry out) is lost. The result is broken - * into three 32-bit pieces which are stored at the locations pointed to by - * `z0Ptr', `z1Ptr', and `z2Ptr'. - */ -void -__sub96(uint a0, uint a1, uint a2, - uint b0, uint b1, uint b2, - out uint z0Ptr, - out uint z1Ptr, - out uint z2Ptr) -{ - uint z2 = a2 - b2; - uint borrow1 = uint(a2 < b2); - uint z1 = a1 - b1; - uint borrow0 = uint(a1 < b1); - uint z0 = a0 - b0; - z0 -= uint(z1 < borrow1); - z1 -= borrow1; - z0 -= borrow0; - z2Ptr = z2; - z1Ptr = z1; - z0Ptr = z0; -} - -/* Returns an approximation to the 32-bit integer quotient obtained by dividing - * `b' into the 64-bit value formed by concatenating `a0' and `a1'. The - * divisor `b' must be at least 2^31. If q is the exact quotient truncated - * toward zero, the approximation returned lies between q and q + 2 inclusive. - * If the exact quotient q is larger than 32 bits, the maximum positive 32-bit - * unsigned integer is returned. - */ -uint -__estimateDiv64To32(uint a0, uint a1, uint b) -{ - uint b0; - uint b1; - uint rem0 = 0u; - uint rem1 = 0u; - uint term0 = 0u; - uint term1 = 0u; - uint z; - - if (b <= a0) - return 0xFFFFFFFFu; - b0 = b>>16; - z = (b0<<16 <= a0) ? 0xFFFF0000u : (a0 / b0)<<16; - umulExtended(b, z, term0, term1); - __sub64(a0, a1, term0, term1, rem0, rem1); - while (int(rem0) < 0) { - z -= 0x10000u; - b1 = b<<16; - __add64(rem0, rem1, b0, b1, rem0, rem1); - } - rem0 = (rem0<<16) | (rem1>>16); - z |= (b0<<16 <= rem0) ? 0xFFFFu : rem0 / b0; - return z; -} - -uint -__sqrtOddAdjustments(int index) -{ - uint res = 0u; - if (index == 0) - res = 0x0004u; - if (index == 1) - res = 0x0022u; - if (index == 2) - res = 0x005Du; - if (index == 3) - res = 0x00B1u; - if (index == 4) - res = 0x011Du; - if (index == 5) - res = 0x019Fu; - if (index == 6) - res = 0x0236u; - if (index == 7) - res = 0x02E0u; - if (index == 8) - res = 0x039Cu; - if (index == 9) - res = 0x0468u; - if (index == 10) - res = 0x0545u; - if (index == 11) - res = 0x631u; - if (index == 12) - res = 0x072Bu; - if (index == 13) - res = 0x0832u; - if (index == 14) - res = 0x0946u; - if (index == 15) - res = 0x0A67u; - - return res; -} - -uint -__sqrtEvenAdjustments(int index) -{ - uint res = 0u; - if (index == 0) - res = 0x0A2Du; - if (index == 1) - res = 0x08AFu; - if (index == 2) - res = 0x075Au; - if (index == 3) - res = 0x0629u; - if (index == 4) - res = 0x051Au; - if (index == 5) - res = 0x0429u; - if (index == 6) - res = 0x0356u; - if (index == 7) - res = 0x029Eu; - if (index == 8) - res = 0x0200u; - if (index == 9) - res = 0x0179u; - if (index == 10) - res = 0x0109u; - if (index == 11) - res = 0x00AFu; - if (index == 12) - res = 0x0068u; - if (index == 13) - res = 0x0034u; - if (index == 14) - res = 0x0012u; - if (index == 15) - res = 0x0002u; - - return res; -} - -/* Returns an approximation to the square root of the 32-bit significand given - * by `a'. Considered as an integer, `a' must be at least 2^31. If bit 0 of - * `aExp' (the least significant bit) is 1, the integer returned approximates - * 2^31*sqrt(`a'/2^31), where `a' is considered an integer. If bit 0 of `aExp' - * is 0, the integer returned approximates 2^31*sqrt(`a'/2^30). In either - * case, the approximation returned lies strictly within +/-2 of the exact - * value. - */ -uint -__estimateSqrt32(int aExp, uint a) -{ - uint z; - - int index = int(a>>27 & 15u); - if ((aExp & 1) != 0) { - z = 0x4000u + (a>>17) - __sqrtOddAdjustments(index); - z = ((a / z)<<14) + (z<<15); - a >>= 1; - } else { - z = 0x8000u + (a>>17) - __sqrtEvenAdjustments(index); - z = a / z + z; - z = (0x20000u <= z) ? 0xFFFF8000u : (z<<15); - if (z <= a) - return uint(int(a)>>1); - } - return ((__estimateDiv64To32(a, 0u, z))>>1) + (z>>1); -} - -/* Returns the square root of the double-precision floating-point value `a'. - * The operation is performed according to the IEEE Standard for Floating-Point - * Arithmetic. - */ -uint64_t -__fsqrt64(uint64_t a) -{ - uint zFrac0 = 0u; - uint zFrac1 = 0u; - uint zFrac2 = 0u; - uint doubleZFrac0 = 0u; - uint rem0 = 0u; - uint rem1 = 0u; - uint rem2 = 0u; - uint rem3 = 0u; - uint term0 = 0u; - uint term1 = 0u; - uint term2 = 0u; - uint term3 = 0u; - uint64_t default_nan = 0xFFFFFFFFFFFFFFFFUL; - - uint aFracLo = __extractFloat64FracLo(a); - uint aFracHi = __extractFloat64FracHi(a); - int aExp = __extractFloat64Exp(a); - uint aSign = __extractFloat64Sign(a); - if (aExp == 0x7FF) { - if ((aFracHi | aFracLo) != 0u) - return __propagateFloat64NaN(a, a); - if (aSign == 0u) - return a; - return default_nan; - } - if (aSign != 0u) { - if ((uint(aExp) | aFracHi | aFracLo) == 0u) - return a; - return default_nan; - } - if (aExp == 0) { - if ((aFracHi | aFracLo) == 0u) - return __packFloat64(0u, 0, 0u, 0u); - __normalizeFloat64Subnormal(aFracHi, aFracLo, aExp, aFracHi, aFracLo); - } - int zExp = ((aExp - 0x3FF)>>1) + 0x3FE; - aFracHi |= 0x00100000u; - __shortShift64Left(aFracHi, aFracLo, 11, term0, term1); - zFrac0 = (__estimateSqrt32(aExp, term0)>>1) + 1u; - if (zFrac0 == 0u) - zFrac0 = 0x7FFFFFFFu; - doubleZFrac0 = zFrac0 + zFrac0; - __shortShift64Left(aFracHi, aFracLo, 9 - (aExp & 1), aFracHi, aFracLo); - umulExtended(zFrac0, zFrac0, term0, term1); - __sub64(aFracHi, aFracLo, term0, term1, rem0, rem1); - while (int(rem0) < 0) { - --zFrac0; - doubleZFrac0 -= 2u; - __add64(rem0, rem1, 0u, doubleZFrac0 | 1u, rem0, rem1); - } - zFrac1 = __estimateDiv64To32(rem1, 0u, doubleZFrac0); - if ((zFrac1 & 0x1FFu) <= 5u) { - if (zFrac1 == 0u) - zFrac1 = 1u; - umulExtended(doubleZFrac0, zFrac1, term1, term2); - __sub64(rem1, 0u, term1, term2, rem1, rem2); - umulExtended(zFrac1, zFrac1, term2, term3); - __sub96(rem1, rem2, 0u, 0u, term2, term3, rem1, rem2, rem3); - while (int(rem1) < 0) { - --zFrac1; - __shortShift64Left(0u, zFrac1, 1, term2, term3); - term3 |= 1u; - term2 |= doubleZFrac0; - __add96(rem1, rem2, rem3, 0u, term2, term3, rem1, rem2, rem3); - } - zFrac1 |= uint((rem1 | rem2 | rem3) != 0u); - } - __shift64ExtraRightJamming(zFrac0, zFrac1, 0u, 10, zFrac0, zFrac1, zFrac2); - return __roundAndPackFloat64(0u, zExp, zFrac0, zFrac1, zFrac2); -} - -uint64_t -__ftrunc64(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - int aExp = __extractFloat64Exp(__a); - uint zLo; - uint zHi; - - int unbiasedExp = aExp - 1023; - int fracBits = 52 - unbiasedExp; - uint maskLo = mix(~0u << fracBits, 0u, fracBits >= 32); - uint maskHi = mix(~0u << (fracBits - 32), ~0u, fracBits < 33); - zLo = maskLo & a.x; - zHi = maskHi & a.y; - - zLo = mix(zLo, 0u, unbiasedExp < 0); - zHi = mix(zHi, 0u, unbiasedExp < 0); - zLo = mix(zLo, a.x, unbiasedExp > 52); - zHi = mix(zHi, a.y, unbiasedExp > 52); - return packUint2x32(uvec2(zLo, zHi)); -} - -uint64_t -__ffloor64(uint64_t a) -{ - /* The big assumtion is that when 'a' is NaN, __ftrunc(a) returns a. Based - * on that assumption, NaN values that don't have the sign bit will safely - * return NaN (identity). This is guarded by RELAXED_NAN_PROPAGATION - * because otherwise the NaN should have the "signal" bit set. The - * __fadd64 will ensure that occurs. - */ - bool is_positive = -#if defined RELAXED_NAN_PROPAGATION - int(unpackUint2x32(a).y) >= 0 -#else - __fge64(a, 0ul) -#endif - ; - uint64_t tr = __ftrunc64(a); - - if (is_positive || __feq64(tr, a)) { - return tr; - } else { - return __fadd64(tr, 0xbff0000000000000ul /* -1.0 */); - } -} - -uint64_t -__fround64(uint64_t __a) -{ - uvec2 a = unpackUint2x32(__a); - int unbiasedExp = __extractFloat64Exp(__a) - 1023; - uint aHi = a.y; - uint aLo = a.x; - - if (unbiasedExp < 20) { - if (unbiasedExp < 0) { - if ((aHi & 0x80000000u) != 0u && aLo == 0u) { - return 0ul; - } - aHi &= 0x80000000u; - if ((a.y & 0x000FFFFFu) == 0u && a.x == 0u) { - aLo = 0u; - return packUint2x32(uvec2(aLo, aHi)); - } - aHi = mix(aHi, (aHi | 0x3FF00000u), unbiasedExp == -1); - aLo = 0u; - } else { - uint maskExp = 0x000FFFFFu >> unbiasedExp; - uint lastBit = maskExp + 1; - aHi += 0x00080000u >> unbiasedExp; - if ((aHi & maskExp) == 0u) - aHi &= ~lastBit; - aHi &= ~maskExp; - aLo = 0u; - } - } else if (unbiasedExp > 51 || unbiasedExp == 1024) { - return __a; - } else { - uint maskExp = 0xFFFFFFFFu >> (unbiasedExp - 20); - if ((aLo & maskExp) == 0u) - return __a; - uint tmp = aLo + (1u << (51 - unbiasedExp)); - if(tmp < aLo) - aHi += 1u; - aLo = tmp; - aLo &= ~maskExp; - } - - return packUint2x32(uvec2(aLo, aHi)); -} - -uint64_t -__fmin64(uint64_t a, uint64_t b) -{ - /* This weird layout matters. Doing the "obvious" thing results in extra - * flow control being inserted to implement the short-circuit evaluation - * rules. Flow control is bad! - */ - bool b_nan = __is_nan(b); - bool a_lt_b = __flt64_nonnan(a, b); - bool a_nan = __is_nan(a); - - return (b_nan || a_lt_b) && !a_nan ? a : b; -} - -uint64_t -__fmax64(uint64_t a, uint64_t b) -{ - /* This weird layout matters. Doing the "obvious" thing results in extra - * flow control being inserted to implement the short-circuit evaluation - * rules. Flow control is bad! - */ - bool b_nan = __is_nan(b); - bool a_lt_b = __flt64_nonnan(a, b); - bool a_nan = __is_nan(a); - - return (b_nan || a_lt_b) && !a_nan ? b : a; -} - -uint64_t -__ffract64(uint64_t a) -{ - return __fadd64(a, __fneg64(__ffloor64(a))); -} - -bool -__fisfinite64(uint64_t __a) -{ - return __extractFloat64Exp(__a) != 0x7ff; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/float64_glsl.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/float64_glsl.h deleted file mode 100644 index 4284a5e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/float64_glsl.h +++ /dev/null @@ -1,2667 +0,0 @@ -static const char float64_source[] = { -0x2f, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x68, 0x65, 0x61, 0x76, 0x69, 0x6c, 0x79, 0x20, 0x62, 0x61, - 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x42, 0x65, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x79, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2e, 0x20, 0x41, 0x73, 0x20, 0x73, 0x75, 0x63, 0x68, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, - 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x33, 0x2d, 0x63, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x42, - 0x53, 0x44, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x3a, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x4c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x42, 0x65, 0x72, 0x6b, 0x65, 0x6c, 0x65, 0x79, 0x20, 0x53, 0x6f, 0x66, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x33, 0x65, 0x0a, 0x20, 0x2a, 0x0a, - 0x20, 0x2a, 0x20, 0x4a, 0x6f, 0x68, 0x6e, 0x20, 0x52, 0x2e, 0x20, 0x48, 0x61, 0x75, 0x73, 0x65, 0x72, 0x0a, 0x20, 0x2a, 0x20, - 0x32, 0x30, 0x31, 0x38, 0x20, 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x20, 0x32, 0x30, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x6f, 0x66, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x33, 0x65, 0x20, 0x61, 0x73, 0x20, - 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x2e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, - 0x31, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x32, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x34, 0x2c, - 0x20, 0x32, 0x30, 0x31, 0x35, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x36, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x37, 0x2c, 0x20, 0x32, 0x30, - 0x31, 0x38, 0x20, 0x54, 0x68, 0x65, 0x20, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x0a, 0x20, 0x2a, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x61, 0x6c, - 0x69, 0x66, 0x6f, 0x72, 0x6e, 0x69, 0x61, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x52, 0x65, 0x64, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, - 0x6d, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x0a, 0x20, - 0x2a, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x3a, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, - 0x20, 0x31, 0x2e, 0x20, 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x72, 0x65, - 0x74, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, - 0x69, 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x20, 0x32, 0x2e, 0x20, - 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x69, - 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, - 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, - 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x20, 0x33, 0x2e, 0x20, 0x4e, 0x65, 0x69, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, - 0x72, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x73, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x20, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x20, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x2e, 0x0a, 0x20, 0x2a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x48, 0x49, 0x53, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, - 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x44, 0x20, 0x42, 0x59, 0x20, 0x54, 0x48, 0x45, - 0x20, 0x52, 0x45, 0x47, 0x45, 0x4e, 0x54, 0x53, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, - 0x54, 0x4f, 0x52, 0x53, 0x20, 0x22, 0x41, 0x53, 0x20, 0x49, 0x53, 0x22, 0x2c, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x41, 0x4e, 0x59, - 0x0a, 0x20, 0x2a, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, - 0x44, 0x20, 0x57, 0x41, 0x52, 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, - 0x4e, 0x47, 0x2c, 0x20, 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, - 0x4f, 0x2c, 0x20, 0x54, 0x48, 0x45, 0x20, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x45, 0x44, 0x0a, 0x20, 0x2a, 0x20, 0x57, 0x41, 0x52, - 0x52, 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x46, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x46, 0x4f, 0x52, - 0x20, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, - 0x2c, 0x20, 0x41, 0x52, 0x45, 0x0a, 0x20, 0x2a, 0x20, 0x44, 0x49, 0x53, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x45, 0x44, 0x2e, 0x20, - 0x20, 0x49, 0x4e, 0x20, 0x4e, 0x4f, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x20, 0x54, 0x48, - 0x45, 0x20, 0x52, 0x45, 0x47, 0x45, 0x4e, 0x54, 0x53, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, - 0x54, 0x4f, 0x52, 0x53, 0x20, 0x42, 0x45, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x20, 0x46, 0x4f, 0x52, 0x20, 0x41, 0x4e, - 0x59, 0x0a, 0x20, 0x2a, 0x20, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x2c, 0x20, 0x49, 0x4e, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, - 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x41, 0x4c, 0x2c, 0x20, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, - 0x2c, 0x20, 0x45, 0x58, 0x45, 0x4d, 0x50, 0x4c, 0x41, 0x52, 0x59, 0x2c, 0x20, 0x4f, 0x52, 0x20, 0x43, 0x4f, 0x4e, 0x53, 0x45, - 0x51, 0x55, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x0a, 0x20, 0x2a, 0x20, 0x28, - 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x2c, 0x20, 0x42, 0x55, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x4c, 0x49, - 0x4d, 0x49, 0x54, 0x45, 0x44, 0x20, 0x54, 0x4f, 0x2c, 0x20, 0x50, 0x52, 0x4f, 0x43, 0x55, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, - 0x20, 0x4f, 0x46, 0x20, 0x53, 0x55, 0x42, 0x53, 0x54, 0x49, 0x54, 0x55, 0x54, 0x45, 0x20, 0x47, 0x4f, 0x4f, 0x44, 0x53, 0x20, - 0x4f, 0x52, 0x20, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x53, 0x3b, 0x0a, 0x20, 0x2a, 0x20, 0x4c, 0x4f, 0x53, 0x53, 0x20, - 0x4f, 0x46, 0x20, 0x55, 0x53, 0x45, 0x2c, 0x20, 0x44, 0x41, 0x54, 0x41, 0x2c, 0x20, 0x4f, 0x52, 0x20, 0x50, 0x52, 0x4f, 0x46, - 0x49, 0x54, 0x53, 0x3b, 0x20, 0x4f, 0x52, 0x20, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x49, 0x4e, 0x54, 0x45, - 0x52, 0x52, 0x55, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x20, 0x48, 0x4f, 0x57, 0x45, 0x56, 0x45, 0x52, 0x20, 0x43, 0x41, 0x55, - 0x53, 0x45, 0x44, 0x20, 0x41, 0x4e, 0x44, 0x0a, 0x20, 0x2a, 0x20, 0x4f, 0x4e, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x54, 0x48, 0x45, - 0x4f, 0x52, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x57, 0x48, 0x45, - 0x54, 0x48, 0x45, 0x52, 0x20, 0x49, 0x4e, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x41, 0x43, 0x54, 0x2c, 0x20, 0x53, 0x54, 0x52, - 0x49, 0x43, 0x54, 0x20, 0x4c, 0x49, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x2c, 0x20, 0x4f, 0x52, 0x20, 0x54, 0x4f, 0x52, - 0x54, 0x0a, 0x20, 0x2a, 0x20, 0x28, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, 0x47, 0x20, 0x4e, 0x45, 0x47, 0x4c, 0x49, - 0x47, 0x45, 0x4e, 0x43, 0x45, 0x20, 0x4f, 0x52, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x57, 0x49, 0x53, 0x45, 0x29, 0x20, 0x41, - 0x52, 0x49, 0x53, 0x49, 0x4e, 0x47, 0x20, 0x49, 0x4e, 0x20, 0x41, 0x4e, 0x59, 0x20, 0x57, 0x41, 0x59, 0x20, 0x4f, 0x55, 0x54, - 0x20, 0x4f, 0x46, 0x20, 0x54, 0x48, 0x45, 0x20, 0x55, 0x53, 0x45, 0x20, 0x4f, 0x46, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x48, 0x49, - 0x53, 0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x2c, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x20, 0x49, 0x46, 0x20, 0x41, - 0x44, 0x56, 0x49, 0x53, 0x45, 0x44, 0x20, 0x4f, 0x46, 0x20, 0x54, 0x48, 0x45, 0x20, 0x50, 0x4f, 0x53, 0x53, 0x49, 0x42, 0x49, - 0x4c, 0x49, 0x54, 0x59, 0x20, 0x4f, 0x46, 0x20, 0x53, 0x55, 0x43, 0x48, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x45, 0x2e, 0x0a, - 0x2a, 0x2f, 0x0a, 0x0a, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x30, 0x30, 0x0a, 0x23, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x73, 0x68, 0x61, - 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x20, 0x3a, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x23, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, - 0x72, 0x5f, 0x62, 0x69, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3a, 0x20, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x47, 0x4c, 0x5f, 0x45, 0x58, 0x54, 0x5f, - 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x78, 0x20, 0x3a, 0x20, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x23, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x47, 0x4c, 0x5f, - 0x4d, 0x45, 0x53, 0x41, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x5f, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3a, 0x20, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x0a, 0x23, 0x70, - 0x72, 0x61, 0x67, 0x6d, 0x61, 0x20, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x28, 0x6f, 0x66, 0x66, 0x29, 0x0a, 0x0a, 0x2f, - 0x2a, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, - 0x64, 0x65, 0x2e, 0x0a, 0x20, 0x2a, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x20, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x34, 0x2e, 0x37, 0x2e, 0x31, 0x20, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x0a, 0x20, 0x2a, 0x20, 0x42, 0x75, 0x74, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2c, 0x20, 0x77, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, - 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4e, - 0x45, 0x41, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x30, 0x0a, 0x23, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x5a, 0x45, - 0x52, 0x4f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, - 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x4c, 0x4f, 0x41, - 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x55, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x33, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, - 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, - 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4e, 0x45, 0x41, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x56, - 0x45, 0x4e, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x78, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x4e, 0x61, 0x4e, 0x2e, 0x20, 0x20, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x4e, 0x61, 0x4e, 0x20, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x0a, 0x20, 0x2a, 0x20, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x20, 0x61, 0x20, 0x4e, 0x61, 0x4e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, - 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x6e, 0x27, 0x74, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, - 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x2a, - 0x2f, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x45, 0x44, 0x5f, 0x4e, 0x41, 0x4e, - 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x41, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x41, 0x62, 0x73, 0x6f, - 0x6c, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x36, 0x34, 0x20, 0x3a, 0x0a, 0x20, 0x2a, 0x20, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, - 0x6e, 0x20, 0x62, 0x69, 0x74, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, - 0x66, 0x61, 0x62, 0x73, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, - 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x2e, 0x79, - 0x20, 0x26, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x31, 0x20, 0x69, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, - 0x60, 0x61, 0x27, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x4e, 0x61, 0x4e, 0x3b, 0x0a, 0x20, 0x2a, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x30, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, - 0x62, 0x6f, 0x6f, 0x6c, 0x0a, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, - 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x30, 0x78, 0x46, 0x46, 0x45, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x75, 0x20, 0x3c, 0x3d, 0x20, 0x28, 0x61, 0x2e, 0x79, 0x3c, 0x3c, 0x31, 0x29, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x61, 0x2e, 0x78, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, - 0x28, 0x61, 0x2e, 0x79, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x29, 0x20, 0x21, - 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x65, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x20, 0x3a, 0x0a, - 0x20, 0x2a, 0x20, 0x54, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x62, 0x69, - 0x74, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x6e, 0x65, 0x67, - 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, - 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x2e, 0x79, 0x20, 0x5e, 0x3d, 0x20, - 0x28, 0x31, 0x75, 0x20, 0x3c, 0x3c, 0x20, 0x33, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x36, 0x34, 0x28, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, - 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, - 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x28, 0x61, 0x2e, 0x79, - 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x29, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x33, - 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x28, 0x61, 0x2e, 0x79, 0x20, 0x3c, 0x3c, - 0x20, 0x31, 0x20, 0x7c, 0x20, 0x61, 0x2e, 0x78, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x72, - 0x65, 0x74, 0x76, 0x61, 0x6c, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x60, 0x61, 0x27, 0x2e, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x0a, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x6e, 0x70, - 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, 0x2e, 0x78, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x75, 0x69, 0x6e, 0x74, 0x0a, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, - 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, 0x2e, 0x79, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x75, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x61, 0x27, 0x2e, - 0x2a, 0x2f, 0x0a, 0x69, 0x6e, 0x74, 0x0a, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, - 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x61, 0x2e, 0x79, 0x3e, 0x3e, 0x32, 0x30, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, - 0x37, 0x46, 0x46, 0x75, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x0a, 0x5f, 0x5f, 0x66, 0x65, 0x71, 0x36, - 0x34, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, - 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, - 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x62, 0x20, - 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x62, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x61, 0x2e, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x62, - 0x2e, 0x78, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x61, 0x2e, - 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x62, 0x2e, 0x79, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x28, 0x61, 0x2e, 0x78, 0x20, 0x3d, 0x3d, - 0x20, 0x30, 0x75, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x28, 0x28, 0x61, 0x2e, 0x79, 0x20, 0x7c, 0x20, 0x62, 0x2e, 0x79, 0x29, - 0x3c, 0x3c, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x61, 0x27, 0x20, 0x69, - 0x73, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x72, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x62, 0x27, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x2e, - 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, - 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x41, - 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x0a, 0x5f, - 0x5f, 0x66, 0x65, 0x71, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x2c, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x5f, - 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, - 0x28, 0x62, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x66, 0x65, 0x71, 0x36, - 0x34, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, - 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x61, 0x27, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x60, 0x62, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x77, 0x69, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, - 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, - 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x62, - 0x6f, 0x6f, 0x6c, 0x0a, 0x5f, 0x5f, 0x66, 0x6e, 0x65, 0x75, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, - 0x20, 0x61, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x5f, 0x5f, - 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x62, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, - 0x5f, 0x5f, 0x66, 0x65, 0x71, 0x36, 0x34, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x3b, - 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, - 0x67, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, - 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x61, 0x27, 0x2e, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, - 0x0a, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, 0x67, 0x6e, - 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, - 0x2e, 0x79, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, 0x31, 0x27, 0x20, - 0x69, 0x73, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x62, - 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x62, 0x31, 0x27, 0x2e, 0x20, 0x20, 0x4f, 0x74, 0x68, 0x65, - 0x72, 0x77, 0x69, 0x73, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2e, - 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x0a, 0x69, 0x6c, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x61, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x30, 0x2c, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x31, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x28, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x30, 0x29, 0x20, 0x3c, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x30, 0x29, 0x29, 0x20, - 0x7c, 0x7c, 0x20, 0x28, 0x28, 0x61, 0x30, 0x20, 0x3d, 0x3d, 0x20, 0x62, 0x30, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x61, 0x31, - 0x20, 0x3c, 0x20, 0x62, 0x31, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x0a, 0x5f, 0x5f, 0x66, 0x6c, - 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, - 0x5f, 0x61, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, - 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, - 0x62, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, - 0x62, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x37, 0x35, 0x34, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x2a, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x62, 0x69, 0x74, 0x2d, 0x63, 0x61, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, - 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, 0x2e, 0x77, 0x69, 0x6b, 0x69, 0x70, - 0x65, 0x64, 0x69, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x69, 0x6b, 0x69, 0x2f, 0x49, 0x45, 0x45, 0x45, 0x5f, 0x37, 0x35, - 0x34, 0x2d, 0x31, 0x39, 0x38, 0x35, 0x23, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, 0x32, 0x27, 0x73, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x73, 0x3a, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x32, 0x27, 0x73, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, - 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, - 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, - 0x64, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, - 0x29, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x32, 0x27, 0x73, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x20, 0x4f, 0x74, - 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x28, 0x74, 0x77, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, - 0x20, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x29, 0x2c, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x46, 0x50, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x32, 0x27, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x20, 0x69, 0x6d, 0x70, - 0x6c, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x71, 0x75, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x2a, 0x20, 0x20, 0x20, 0x20, 0x21, 0x62, 0x6f, 0x74, 0x68, 0x5f, 0x61, 0x72, 0x65, 0x5f, 0x7a, 0x65, 0x72, 0x6f, 0x28, 0x61, - 0x2c, 0x20, 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x62, 0x6f, 0x74, 0x68, 0x5f, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3f, 0x20, 0x61, 0x20, 0x3e, 0x20, 0x62, 0x20, 0x3a, 0x20, 0x61, 0x20, 0x3c, - 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, - 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x65, 0x75, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x28, 0x62, 0x6f, 0x74, 0x68, 0x5f, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x28, 0x61, 0x2c, - 0x20, 0x62, 0x29, 0x20, 0x3f, 0x20, 0x61, 0x20, 0x3e, 0x3d, 0x20, 0x62, 0x20, 0x3a, 0x20, 0x61, 0x20, 0x3c, 0x20, 0x62, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x65, 0x75, 0x28, - 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x62, 0x6f, 0x74, 0x68, 0x5f, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x3f, 0x20, 0x21, 0x28, 0x61, 0x20, 0x3c, 0x20, 0x62, 0x29, 0x20, 0x3a, - 0x20, 0x61, 0x20, 0x3c, 0x20, 0x62, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, - 0x20, 0x20, 0x66, 0x6e, 0x65, 0x75, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x28, 0x62, 0x6f, 0x74, - 0x68, 0x5f, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, - 0x28, 0x61, 0x20, 0x3c, 0x20, 0x62, 0x29, 0x29, 0x20, 0x7c, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x21, 0x62, 0x6f, 0x74, 0x68, 0x5f, - 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x61, 0x20, - 0x3c, 0x20, 0x62, 0x29, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x28, 0x41, - 0x21, 0x7c, 0x42, 0x29, 0x26, 0x28, 0x41, 0x7c, 0x21, 0x42, 0x29, 0x20, 0x69, 0x73, 0x20, 0x28, 0x41, 0x20, 0x78, 0x6f, 0x72, - 0x20, 0x42, 0x29, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x20, 0x68, 0x65, 0x72, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x21, 0x3d, 0x2e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6e, 0x65, 0x75, 0x28, 0x61, 0x2c, 0x20, - 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x62, 0x6f, 0x74, 0x68, 0x5f, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x28, - 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x28, 0x61, 0x20, 0x3c, 0x20, 0x62, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6c, 0x74, 0x36, - 0x34, 0x28, 0x61, 0x2e, 0x79, 0x2c, 0x20, 0x61, 0x2e, 0x78, 0x2c, 0x20, 0x62, 0x2e, 0x79, 0x2c, 0x20, 0x62, 0x2e, 0x78, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x5f, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x2e, 0x79, 0x20, 0x26, 0x20, 0x62, 0x2e, 0x79, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x21, 0x5f, 0x5f, 0x66, 0x65, 0x71, 0x36, 0x34, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, - 0x28, 0x5f, 0x5f, 0x61, 0x2c, 0x20, 0x5f, 0x5f, 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x6c, 0x74, 0x20, 0x21, 0x3d, 0x20, - 0x62, 0x6f, 0x74, 0x68, 0x5f, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, - 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x72, 0x75, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x61, 0x27, 0x20, - 0x69, 0x73, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x62, - 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, - 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x69, 0x73, - 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, - 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, - 0x0a, 0x5f, 0x5f, 0x66, 0x6c, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x2c, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x77, 0x65, 0x69, 0x72, 0x64, 0x20, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x6f, 0x62, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x22, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x6e, - 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, - 0x2d, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x2a, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x20, 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x62, 0x61, 0x64, 0x21, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, - 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x78, 0x20, 0x3d, 0x20, 0x21, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, - 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x79, 0x20, 0x3d, 0x20, 0x21, 0x5f, 0x5f, 0x69, 0x73, - 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x7a, 0x20, 0x3d, 0x20, - 0x5f, 0x5f, 0x66, 0x6c, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x3b, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x78, 0x20, 0x26, 0x26, 0x20, 0x79, 0x20, 0x26, - 0x26, 0x20, 0x7a, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, - 0x72, 0x75, 0x65, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x61, 0x27, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, - 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, - 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x62, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, - 0x2a, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, - 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, - 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x0a, 0x5f, 0x5f, 0x66, 0x67, 0x65, 0x36, 0x34, 0x28, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, - 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x65, 0x69, 0x72, 0x64, - 0x20, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x44, 0x6f, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x6f, 0x62, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x20, 0x74, 0x68, 0x69, 0x6e, - 0x67, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x62, 0x65, 0x69, 0x6e, - 0x67, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x2d, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x20, - 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x72, 0x75, 0x6c, 0x65, - 0x73, 0x2e, 0x20, 0x20, 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x62, - 0x61, 0x64, 0x21, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x78, 0x20, - 0x3d, 0x20, 0x21, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, - 0x6f, 0x6c, 0x20, 0x79, 0x20, 0x3d, 0x20, 0x21, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x62, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x7a, 0x20, 0x3d, 0x20, 0x21, 0x5f, 0x5f, 0x66, 0x6c, 0x74, 0x36, 0x34, 0x5f, - 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x28, 0x78, 0x20, 0x26, 0x26, 0x20, 0x79, 0x20, 0x26, 0x26, 0x20, 0x7a, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x73, 0x61, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, - 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, - 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x66, 0x73, 0x61, 0x74, 0x28, 0x4e, 0x61, 0x4e, - 0x29, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x20, - 0x7c, 0x7c, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x2e, 0x79, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x75, 0x6c, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, - 0x49, 0x45, 0x45, 0x45, 0x20, 0x37, 0x35, 0x34, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x62, 0x69, 0x74, 0x2d, 0x63, 0x61, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x65, 0x72, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, - 0x6d, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, 0x73, 0x2e, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, - 0x2f, 0x2f, 0x65, 0x6e, 0x2e, 0x77, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, 0x69, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x69, - 0x6b, 0x69, 0x2f, 0x49, 0x45, 0x45, 0x45, 0x5f, 0x37, 0x35, 0x34, 0x2d, 0x31, 0x39, 0x38, 0x35, 0x23, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, - 0x20, 0x20, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, - 0x32, 0x27, 0x73, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, - 0x72, 0x73, 0x3a, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x63, 0x65, - 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x32, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x2a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, - 0x65, 0x72, 0x65, 0x64, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x29, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x2c, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x32, 0x27, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x61, 0x67, 0x61, - 0x69, 0x6e, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x20, 0x28, 0x74, 0x77, - 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x29, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, - 0x46, 0x50, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x32, 0x27, 0x73, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x57, 0x65, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x77, 0x65, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, - 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x2c, 0x20, 0x77, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x32, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x2e, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6c, 0x74, 0x36, 0x34, 0x28, - 0x30, 0x78, 0x33, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x2c, 0x20, 0x61, 0x2e, 0x79, 0x2c, 0x20, 0x61, 0x2e, 0x78, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x78, 0x33, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x75, 0x6c, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x61, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x41, 0x64, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, - 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, - 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x60, 0x61, 0x31, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x0a, 0x20, 0x2a, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, - 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x62, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x62, - 0x31, 0x27, 0x2e, 0x20, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x6f, 0x20, 0x32, 0x5e, 0x36, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x61, - 0x72, 0x72, 0x79, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74, - 0x6f, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, - 0x7a, 0x31, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x61, 0x64, - 0x64, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x31, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, - 0x74, 0x72, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x61, 0x31, - 0x20, 0x2b, 0x20, 0x62, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x31, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x30, 0x20, 0x2b, 0x20, 0x62, 0x30, 0x20, 0x2b, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x31, 0x20, 0x3c, 0x20, 0x61, 0x31, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x0a, 0x2f, - 0x2a, 0x20, 0x53, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, - 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x62, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, - 0x62, 0x31, 0x27, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, - 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, - 0x61, 0x31, 0x27, 0x2e, 0x20, 0x20, 0x53, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x32, 0x5e, 0x36, 0x34, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x61, 0x6e, - 0x79, 0x20, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x28, 0x63, 0x61, 0x72, 0x72, 0x79, 0x20, 0x6f, - 0x75, 0x74, 0x29, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x77, - 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x7a, - 0x31, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x73, 0x75, 0x62, - 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, 0x74, - 0x72, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x31, 0x20, 0x2d, 0x20, - 0x62, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x61, 0x30, 0x20, 0x2d, 0x20, 0x62, - 0x30, 0x20, 0x2d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x31, 0x20, 0x3c, 0x20, 0x62, 0x31, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x68, 0x69, 0x66, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, - 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, - 0x31, 0x27, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, - 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6e, 0x6f, 0x6e, - 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, - 0x20, 0x6f, 0x66, 0x66, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x72, 0x65, 0x20, 0x22, 0x6a, 0x61, - 0x6d, 0x6d, 0x65, 0x64, 0x22, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, - 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x62, 0x79, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x31, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x3b, 0x0a, 0x20, 0x2a, - 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x60, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x36, 0x34, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, - 0x62, 0x65, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x30, 0x0a, 0x20, 0x2a, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x2c, 0x20, - 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x60, 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x31, 0x27, 0x20, 0x69, 0x73, 0x20, 0x7a, 0x65, 0x72, 0x6f, - 0x20, 0x6f, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x6e, 0x6f, 0x6e, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0x20, 0x74, 0x77, 0x6f, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x0a, 0x20, 0x2a, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, - 0x31, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x73, 0x68, 0x69, - 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x61, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x29, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, - 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, - 0x28, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x26, 0x20, 0x33, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, - 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x30, - 0x2c, 0x20, 0x28, 0x61, 0x30, 0x20, 0x3e, 0x3e, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x28, 0x28, 0x61, 0x30, 0x20, 0x7c, 0x20, 0x61, 0x31, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x20, 0x2f, - 0x2a, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3e, 0x3d, 0x20, 0x36, 0x34, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x5f, 0x6c, 0x74, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x30, 0x3e, 0x3e, 0x28, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x29, 0x20, 0x7c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x28, - 0x61, 0x30, 0x3c, 0x3c, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x7c, 0x20, 0x61, 0x31, 0x29, 0x20, 0x21, - 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x31, - 0x2c, 0x20, 0x7a, 0x31, 0x5f, 0x6c, 0x74, 0x36, 0x34, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x36, 0x34, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x31, 0x2c, 0x20, 0x28, 0x61, - 0x30, 0x20, 0x7c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x31, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x2c, 0x20, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x31, 0x5f, 0x6c, 0x74, 0x33, 0x32, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x30, 0x3c, 0x3c, 0x6e, 0x65, 0x67, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x61, 0x31, 0x3e, 0x3e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x7c, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x28, 0x28, 0x61, 0x31, 0x3c, 0x3c, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, - 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, - 0x31, 0x2c, 0x20, 0x7a, 0x31, 0x5f, 0x6c, 0x74, 0x33, 0x32, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x33, - 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x31, 0x2c, 0x20, 0x61, - 0x31, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, - 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, - 0x7a, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x68, 0x69, 0x66, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x39, 0x36, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x2c, - 0x20, 0x60, 0x61, 0x31, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x32, 0x27, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x0a, 0x20, 0x2a, 0x20, 0x62, 0x79, 0x20, 0x33, 0x32, 0x20, 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, - 0x69, 0x6e, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x74, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x36, 0x34, 0x20, 0x6e, 0x6f, 0x6e, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x62, 0x69, 0x74, 0x73, 0x3b, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0x20, 0x74, 0x77, 0x6f, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, - 0x31, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x20, 0x74, 0x68, 0x69, - 0x72, 0x64, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x73, 0x20, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x3a, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x20, 0x62, - 0x69, 0x74, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x2d, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, - 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x33, 0x31, 0x20, - 0x62, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x69, - 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x66, 0x20, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x62, 0x75, - 0x74, 0x5f, 0x74, 0x68, 0x65, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x0a, 0x20, 0x2a, 0x20, 0x77, 0x65, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x7a, - 0x65, 0x72, 0x6f, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, - 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x2e, 0x0a, 0x20, 0x2a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x54, 0x68, 0x69, 0x73, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x20, 0x6d, 0x61, - 0x6b, 0x65, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x60, 0x61, 0x30, - 0x27, 0x2c, 0x20, 0x60, 0x61, 0x31, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x32, 0x27, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x61, 0x20, 0x66, 0x69, 0x78, 0x65, 0x64, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x65, - 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x60, 0x61, 0x31, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x32, 0x27, 0x2e, 0x20, - 0x20, 0x54, 0x68, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x66, 0x69, 0x78, 0x65, 0x64, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x20, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, - 0x74, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x2c, 0x0a, - 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x62, 0x79, 0x20, - 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x20, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, - 0x73, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, - 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x62, 0x79, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x29, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, - 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, - 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x32, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x29, 0x20, 0x26, 0x20, 0x33, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x75, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x30, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x2c, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x36, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, 0x20, 0x3d, 0x20, - 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x32, 0x2c, 0x20, 0x61, 0x30, 0x20, 0x3c, 0x3c, 0x20, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x36, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, - 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x32, 0x2c, 0x20, 0x61, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x6e, 0x65, 0x67, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x28, 0x61, 0x30, 0x20, 0x3e, 0x3e, - 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x20, 0x3c, 0x20, 0x36, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, - 0x31, 0x2c, 0x20, 0x28, 0x61, 0x30, 0x3c, 0x3c, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x7c, 0x20, 0x28, - 0x61, 0x31, 0x3e, 0x3e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x33, - 0x32, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x32, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x32, 0x20, 0x7c, - 0x20, 0x61, 0x31, 0x2c, 0x20, 0x61, 0x32, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x30, 0x2c, 0x20, 0x61, 0x30, 0x20, 0x3e, - 0x3e, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, 0x20, 0x7c, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x32, 0x20, 0x21, 0x3d, 0x20, - 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x30, 0x2c, - 0x20, 0x30, 0x75, 0x2c, 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x32, 0x29, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x31, 0x2c, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x28, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, 0x20, - 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x32, 0x2c, 0x20, 0x61, 0x31, 0x2c, 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x3d, 0x3d, 0x20, 0x33, 0x32, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x7a, 0x30, 0x2c, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x31, 0x2c, 0x20, 0x61, 0x31, 0x2c, - 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, - 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x32, 0x2c, 0x20, 0x61, 0x32, 0x2c, 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, - 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x7a, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x68, 0x69, - 0x66, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x31, 0x27, 0x20, 0x6c, 0x65, 0x66, 0x74, - 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x69, 0x74, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, - 0x2e, 0x20, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x20, 0x6f, - 0x66, 0x66, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x33, 0x32, 0x2e, 0x20, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, - 0x74, 0x6f, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x69, 0x65, 0x63, - 0x65, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x60, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x61, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, - 0x61, 0x31, 0x3c, 0x3c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, - 0x20, 0x6d, 0x69, 0x78, 0x28, 0x28, 0x61, 0x30, 0x20, 0x3c, 0x3c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x7c, 0x20, 0x28, - 0x61, 0x31, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x28, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, - 0x29, 0x29, 0x2c, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, - 0x60, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x27, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x0a, 0x20, 0x2a, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, - 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x27, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x20, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x69, 0x6e, - 0x67, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x60, 0x7a, 0x53, 0x69, 0x67, 0x6e, - 0x27, 0x2c, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x30, 0x27, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x79, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x0a, 0x20, - 0x2a, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x33, 0x32, - 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x20, - 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, - 0x6e, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x27, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x61, 0x64, 0x64, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x20, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79, - 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x65, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x31, - 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x31, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, - 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x0a, 0x20, 0x2a, 0x20, - 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x27, - 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, - 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x31, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x7a, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x7a, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x2b, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, - 0x7a, 0x45, 0x78, 0x70, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x32, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, - 0x7a, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x54, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x62, - 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x60, 0x7a, - 0x53, 0x69, 0x67, 0x6e, 0x27, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, - 0x27, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x73, 0x69, - 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x60, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x27, 0x2c, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x27, 0x2c, 0x0a, 0x20, 0x2a, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x75, 0x62, - 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x20, 0x20, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x6c, - 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x79, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x0a, - 0x20, 0x2a, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, - 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x6c, 0x79, 0x2e, 0x0a, 0x20, 0x2a, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, - 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x0a, 0x20, - 0x2a, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x61, 0x69, 0x73, - 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x72, - 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x2a, 0x20, 0x49, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x6f, 0x6f, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, - 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x69, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x61, 0x72, 0x65, 0x20, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, - 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x2a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2c, - 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x75, - 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, - 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x75, 0x73, - 0x75, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x31, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, - 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, - 0x0a, 0x20, 0x2a, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, - 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, - 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, - 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, - 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, - 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, - 0x44, 0x5f, 0x4e, 0x45, 0x41, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, - 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, - 0x20, 0x3c, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, - 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x5a, 0x45, - 0x52, 0x4f, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, - 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x4c, 0x4f, - 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, - 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, - 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, - 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, - 0x4e, 0x44, 0x5f, 0x55, 0x50, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x30, 0x78, 0x37, 0x46, 0x44, 0x20, 0x3c, 0x3d, 0x20, 0x7a, 0x45, 0x78, - 0x70, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x30, 0x78, 0x37, 0x46, 0x44, - 0x20, 0x3c, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x29, 0x20, 0x7c, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x28, 0x28, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x44, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x30, 0x78, 0x30, 0x30, 0x31, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x75, 0x20, 0x3d, 0x3d, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x26, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x20, 0x3d, 0x3d, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x20, 0x26, 0x26, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, - 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x5a, 0x45, 0x52, - 0x4f, 0x29, 0x20, 0x7c, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x7a, - 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, - 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, - 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x55, 0x50, 0x29, 0x29, 0x20, 0x7c, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x3d, - 0x20, 0x30, 0x75, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, - 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, - 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x29, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x46, 0x45, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, - 0x30, 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x2c, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, - 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x2c, 0x20, 0x2d, 0x7a, - 0x45, 0x78, 0x70, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x3d, - 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, - 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3c, - 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, - 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, - 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, - 0x4e, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, - 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x55, 0x50, 0x29, 0x20, 0x26, - 0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x32, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x31, 0x75, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x26, - 0x3d, 0x20, 0x7e, 0x28, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x2b, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x20, 0x26, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, - 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x30, 0x20, 0x7c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, - 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6e, - 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x55, 0x4c, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, - 0x5f, 0x4e, 0x45, 0x41, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, - 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, - 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, - 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x32, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, - 0x55, 0x50, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x31, 0x75, - 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x7c, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x31, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x26, 0x3d, 0x20, 0x7e, 0x28, 0x31, 0x75, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x26, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x70, 0x61, - 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, 0x63, 0x32, 0x28, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x29, 0x29, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x6e, 0x61, 0x6e, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, - 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x20, 0x26, 0x26, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x30, 0x20, 0x7c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x3b, 0x0a, - 0x7d, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, - 0x50, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x4e, 0x65, 0x67, 0x4e, 0x61, 0x4e, 0x20, 0x3d, 0x20, 0x2d, 0x30, 0x78, 0x37, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x45, 0x4c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, - 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x50, 0x6f, 0x73, 0x4e, 0x61, 0x4e, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x4c, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x46, - 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, - 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4e, 0x45, 0x41, 0x52, 0x45, 0x53, 0x54, 0x5f, - 0x45, 0x56, 0x45, 0x4e, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, - 0x3e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x53, 0x69, 0x67, - 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, - 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, - 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, 0x46, 0x4c, 0x4f, - 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, - 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x55, 0x50, 0x29, 0x20, 0x26, 0x26, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x31, 0x75, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x7c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x26, 0x3d, 0x20, - 0x7e, 0x28, 0x31, 0x75, 0x29, 0x20, 0x2b, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, - 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x26, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, - 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x62, 0x73, 0x5a, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x74, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, - 0x63, 0x32, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x29, 0x29, 0x29, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2d, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x28, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, - 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, 0x63, 0x32, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x30, 0x29, 0x29, 0x29, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x6e, 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, - 0x28, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x50, 0x6f, 0x73, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x4e, 0x65, 0x67, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, - 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x62, - 0x73, 0x5a, 0x2c, 0x20, 0x6e, 0x61, 0x6e, 0x2c, 0x20, 0x28, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x28, 0x61, 0x62, 0x73, 0x5a, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x61, 0x62, 0x73, 0x5a, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x6c, - 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x30, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x2d, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, - 0x31, 0x20, 0x62, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, 0x27, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, - 0x60, 0x61, 0x27, 0x20, 0x69, 0x73, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2c, 0x20, 0x33, 0x32, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x69, 0x6e, 0x74, 0x0a, 0x5f, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x33, 0x32, 0x28, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x33, 0x31, 0x20, 0x2d, 0x20, - 0x66, 0x69, 0x6e, 0x64, 0x4d, 0x53, 0x42, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x54, 0x61, 0x6b, - 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, - 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x60, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x27, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x69, 0x67, - 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x7a, - 0x53, 0x69, 0x67, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x53, 0x69, 0x67, 0x31, 0x27, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, - 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, - 0x69, 0x73, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x6c, 0x69, - 0x6b, 0x65, 0x20, 0x60, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x36, 0x34, 0x27, 0x0a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, - 0x20, 0x68, 0x61, 0x73, 0x20, 0x66, 0x65, 0x77, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x0a, 0x20, 0x2a, - 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x73, 0x2c, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x31, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x74, 0x72, 0x75, - 0x65, 0x22, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, - 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, - 0x67, 0x6e, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, - 0x70, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x30, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, - 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x3d, 0x20, 0x33, 0x32, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5a, 0x65, 0x72, 0x6f, - 0x73, 0x33, 0x32, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x30, 0x20, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, - 0x65, 0x66, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x73, - 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, - 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x2d, 0x73, - 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x3d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, - 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x7a, 0x45, - 0x78, 0x70, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x54, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x74, - 0x77, 0x6f, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, - 0x60, 0x61, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x62, 0x27, 0x2c, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x0a, 0x20, 0x2a, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, - 0x61, 0x74, 0x65, 0x20, 0x4e, 0x61, 0x4e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x6f, 0x61, 0x74, 0x36, 0x34, 0x4e, 0x61, 0x4e, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, - 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x23, 0x69, 0x66, - 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x45, 0x44, 0x5f, 0x4e, 0x41, 0x4e, 0x5f, - 0x50, 0x52, 0x4f, 0x50, 0x41, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, - 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, - 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, - 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x62, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, - 0x76, 0x65, 0x63, 0x32, 0x28, 0x61, 0x2e, 0x78, 0x20, 0x7c, 0x20, 0x62, 0x2e, 0x78, 0x2c, 0x20, 0x61, 0x2e, 0x79, 0x20, 0x7c, - 0x20, 0x62, 0x2e, 0x79, 0x29, 0x29, 0x3b, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, - 0x20, 0x61, 0x49, 0x73, 0x4e, 0x61, 0x4e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x5f, 0x5f, - 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x62, 0x49, 0x73, 0x4e, 0x61, 0x4e, 0x20, 0x3d, 0x20, - 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x5f, 0x5f, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, - 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, - 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x75, - 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x62, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x61, 0x2e, 0x79, 0x20, 0x7c, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x62, 0x2e, 0x79, 0x20, 0x7c, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, - 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, - 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x6d, 0x69, 0x78, 0x28, 0x62, 0x2c, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x2c, 0x20, 0x62, - 0x2c, 0x20, 0x62, 0x76, 0x65, 0x63, 0x32, 0x28, 0x62, 0x49, 0x73, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x62, 0x49, 0x73, 0x4e, 0x61, - 0x4e, 0x29, 0x29, 0x2c, 0x20, 0x62, 0x76, 0x65, 0x63, 0x32, 0x28, 0x61, 0x49, 0x73, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x61, 0x49, - 0x73, 0x4e, 0x61, 0x4e, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, - 0x20, 0x49, 0x66, 0x20, 0x61, 0x20, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x6f, 0x66, 0x74, 0x2d, 0x66, 0x70, 0x36, 0x34, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2c, 0x20, 0x69, 0x74, 0x20, - 0x61, 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x20, 0x68, 0x61, 0x73, 0x20, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, - 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x2e, 0x20, 0x20, 0x43, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x77, 0x6f, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x0a, 0x20, 0x2a, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x61, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, - 0x72, 0x79, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x45, 0x58, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x20, 0x7b, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x61, 0x20, 0x5e, 0x3d, 0x20, 0x62, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x20, 0x5e, 0x3d, 0x20, 0x61, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x5e, 0x3d, 0x20, 0x62, 0x3b, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x66, 0x61, - 0x6c, 0x73, 0x65, 0x29, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x0a, 0x20, 0x2a, 0x20, - 0x60, 0x61, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x62, 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x61, - 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, - 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, - 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x61, 0x64, 0x64, 0x36, - 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, - 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, 0x67, - 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, - 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, 0x67, 0x6e, - 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, - 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, - 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, - 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, - 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, - 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, - 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, - 0x34, 0x45, 0x78, 0x70, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x70, 0x44, 0x69, - 0x66, 0x66, 0x20, 0x3d, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x20, 0x62, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x62, 0x53, 0x69, 0x67, 0x6e, 0x29, 0x20, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, - 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, - 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, - 0x69, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, - 0x4c, 0x6f, 0x7c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, - 0x78, 0x28, 0x61, 0x2c, 0x20, 0x5f, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x36, 0x34, 0x4e, 0x61, 0x4e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, - 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, - 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, - 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, - 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x75, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x7c, 0x3d, 0x20, - 0x30, 0x78, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x61, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, 0x68, 0x74, - 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x32, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, - 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x78, 0x70, 0x44, - 0x69, 0x66, 0x66, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, - 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x46, 0x72, - 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x45, 0x58, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x28, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x62, 0x45, 0x78, 0x70, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, - 0x67, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x66, 0x66, 0x2c, - 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x2c, 0x20, 0x5f, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x4e, 0x61, 0x4e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x2c, 0x20, 0x70, 0x72, 0x6f, - 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x6d, 0x69, - 0x78, 0x28, 0x61, 0x62, 0x73, 0x28, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x29, 0x2c, 0x20, 0x61, 0x62, 0x73, 0x28, 0x65, - 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x2c, 0x20, 0x62, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, - 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, - 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x45, 0x78, 0x70, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, - 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, - 0x67, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, - 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x44, 0x69, - 0x66, 0x66, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x45, - 0x78, 0x70, 0x20, 0x3d, 0x20, 0x61, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, - 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, - 0x7a, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x28, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x29, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, - 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, - 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x32, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, - 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2b, 0x2b, 0x7a, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, - 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, - 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, - 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, - 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, - 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x20, 0x3c, - 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x45, 0x58, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, - 0x69, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x45, 0x58, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x45, 0x58, 0x43, 0x48, 0x41, 0x4e, 0x47, - 0x45, 0x28, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x62, 0x45, 0x78, 0x70, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x5e, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, - 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, - 0x6f, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, - 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, - 0x78, 0x28, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, - 0x2c, 0x20, 0x30, 0x78, 0x37, 0x66, 0x66, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x2c, 0x20, 0x5f, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x4e, 0x61, 0x4e, 0x28, 0x61, 0x2c, - 0x20, 0x62, 0x29, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x78, 0x70, 0x44, - 0x69, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x62, 0x73, 0x28, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, - 0x29, 0x2c, 0x20, 0x61, 0x62, 0x73, 0x28, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x2c, 0x20, - 0x62, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, - 0x20, 0x7c, 0x20, 0x30, 0x78, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, - 0x48, 0x69, 0x2c, 0x20, 0x62, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, - 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, - 0x2c, 0x20, 0x65, 0x78, 0x70, 0x44, 0x69, 0x66, 0x66, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, - 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x3d, 0x20, 0x30, 0x78, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x36, 0x34, 0x28, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, - 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, - 0x3d, 0x20, 0x61, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x7a, 0x45, - 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, - 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, - 0x2d, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, - 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, - 0x28, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x29, 0x20, - 0x7c, 0x20, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, - 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x55, 0x4c, 0x2c, 0x20, 0x5f, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x4e, 0x61, 0x4e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x70, - 0x61, 0x67, 0x61, 0x74, 0x65, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x62, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x31, 0x2c, 0x20, - 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x45, 0x78, - 0x70, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x45, 0x78, 0x70, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x5f, - 0x6f, 0x66, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3c, 0x20, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, - 0x62, 0x36, 0x34, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, - 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x48, 0x69, 0x20, 0x3c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x36, 0x34, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, - 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6f, 0x66, 0x5f, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3c, 0x3d, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, - 0x4c, 0x6f, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x49, 0x74, 0x20, - 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x30, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, - 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x20, 0x2a, 0x2f, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x36, 0x34, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, - 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, - 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x36, - 0x34, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6f, 0x66, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x3d, - 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x62, 0x45, 0x78, 0x70, - 0x2c, 0x20, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6f, 0x66, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, - 0x53, 0x69, 0x67, 0x6e, 0x20, 0x5e, 0x3d, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6f, 0x66, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, - 0x20, 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, - 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, - 0x4e, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x29, 0x20, 0x3c, 0x3c, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x75, - 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, - 0x20, 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x5f, 0x30, 0x2c, 0x20, - 0x72, 0x65, 0x74, 0x76, 0x61, 0x6c, 0x5f, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x75, 0x20, 0x7c, 0x7c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, - 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x31, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, - 0x2a, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x62, 0x30, - 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x62, 0x31, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, - 0x61, 0x20, 0x31, 0x32, 0x38, 0x2d, 0x62, 0x69, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, - 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x6b, - 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x64, 0x20, 0x61, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, - 0x27, 0x2c, 0x20, 0x60, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x27, 0x2c, 0x20, 0x60, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x27, 0x2c, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x33, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, - 0x0a, 0x5f, 0x5f, 0x6d, 0x75, 0x6c, 0x36, 0x34, 0x54, 0x6f, 0x31, 0x32, 0x38, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, - 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x30, 0x2c, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x62, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, 0x74, - 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x33, 0x50, 0x74, 0x72, 0x29, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x7a, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x33, 0x20, 0x3d, - 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x20, 0x3d, 0x20, - 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x32, 0x20, 0x3d, 0x20, 0x30, - 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x6d, 0x75, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x28, 0x61, - 0x31, 0x2c, 0x20, 0x62, 0x31, 0x2c, 0x20, 0x7a, 0x32, 0x2c, 0x20, 0x7a, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x6d, - 0x75, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x28, 0x61, 0x31, 0x2c, 0x20, 0x62, 0x30, 0x2c, 0x20, 0x7a, 0x31, - 0x2c, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, - 0x7a, 0x31, 0x2c, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x32, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x7a, 0x32, 0x2c, 0x20, 0x7a, 0x31, - 0x2c, 0x20, 0x7a, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x6d, 0x75, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x28, 0x61, 0x30, 0x2c, 0x20, 0x62, 0x30, 0x2c, 0x20, 0x7a, 0x30, 0x2c, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x7a, 0x30, 0x2c, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x31, - 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x7a, 0x31, 0x2c, 0x20, 0x7a, 0x30, 0x2c, 0x20, 0x7a, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x75, 0x6d, 0x75, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x28, 0x61, 0x30, 0x2c, 0x20, 0x62, 0x31, 0x2c, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x2c, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, - 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x2c, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x32, 0x2c, 0x20, 0x30, - 0x75, 0x2c, 0x20, 0x7a, 0x32, 0x2c, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x2c, 0x20, 0x7a, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x7a, 0x30, 0x2c, 0x20, 0x7a, 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x31, 0x2c, 0x20, 0x7a, 0x30, 0x2c, 0x20, 0x7a, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x33, - 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, - 0x7a, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x4e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x72, 0x65, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, - 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, - 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x61, 0x46, 0x72, 0x61, 0x63, 0x30, 0x27, - 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, 0x46, 0x72, 0x61, 0x63, 0x31, 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x0a, 0x20, - 0x2a, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x32, 0x31, 0x20, 0x62, 0x69, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x73, 0x69, - 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x50, 0x74, - 0x72, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x73, 0x69, 0x67, - 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x50, 0x74, 0x72, 0x27, - 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x28, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x31, - 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, - 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x50, 0x74, 0x72, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x7a, 0x66, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x74, 0x65, 0x6d, 0x70, - 0x5f, 0x7a, 0x66, 0x72, 0x61, 0x63, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5a, 0x65, 0x72, - 0x6f, 0x73, 0x33, 0x32, 0x28, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x31, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x20, 0x2d, 0x20, - 0x31, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x31, 0x20, 0x2d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x2d, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x2d, 0x20, 0x33, 0x31, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, - 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x7a, 0x66, 0x72, 0x61, 0x63, - 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x31, 0x3c, 0x3c, 0x73, 0x68, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x31, 0x3e, 0x3e, 0x28, 0x2d, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, - 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x7a, 0x66, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, - 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x31, 0x3c, 0x3c, 0x28, 0x73, 0x68, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, - 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x50, 0x74, 0x72, 0x29, 0x3b, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x7a, 0x66, 0x72, 0x61, 0x63, - 0x30, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, - 0x50, 0x74, 0x72, 0x2c, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x5f, 0x7a, 0x66, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x30, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x60, 0x62, 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, - 0x73, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x6d, 0x75, 0x6c, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x74, 0x20, 0x61, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, - 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x62, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, - 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, 0x67, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x62, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, 0x67, 0x6e, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x5e, 0x20, 0x62, 0x53, 0x69, - 0x67, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, - 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x28, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x20, 0x7c, 0x7c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x62, 0x45, 0x78, 0x70, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, - 0x48, 0x69, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, - 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x4e, 0x61, 0x4e, 0x28, - 0x61, 0x2c, 0x20, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x62, 0x45, 0x78, 0x70, 0x29, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x55, 0x4c, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x2c, 0x20, - 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x62, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x61, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x4e, 0x61, 0x4e, 0x2c, - 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x20, 0x4e, 0x61, 0x4e, 0x3f, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, - 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x20, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x45, 0x44, 0x5f, 0x4e, 0x41, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x41, - 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x62, 0x3b, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, - 0x74, 0x36, 0x34, 0x4e, 0x61, 0x4e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x3b, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x45, 0x78, 0x70, 0x29, - 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x55, 0x4c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, - 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x46, - 0x46, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, - 0x4c, 0x6f, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, - 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x53, 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, - 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x62, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, - 0x6f, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, - 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x5f, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, - 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, - 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, - 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, - 0x70, 0x20, 0x3d, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x2b, 0x20, 0x62, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x20, 0x30, 0x78, 0x34, - 0x30, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x3d, 0x20, 0x30, 0x78, 0x30, - 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, - 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, - 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, - 0x62, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x6d, 0x75, 0x6c, 0x36, 0x34, 0x54, - 0x6f, 0x31, 0x32, 0x38, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x62, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x62, 0x46, 0x72, - 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x31, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x7c, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x33, 0x20, - 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x30, 0x78, 0x30, 0x30, 0x32, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x75, 0x20, 0x3c, 0x3d, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, - 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, - 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x2b, 0x7a, 0x45, 0x78, 0x70, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, - 0x67, 0x6e, 0x2c, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x66, 0x6d, 0x61, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x74, 0x20, 0x61, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x62, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x74, 0x20, 0x63, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, - 0x5f, 0x66, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x5f, 0x5f, 0x66, 0x6d, 0x75, 0x6c, 0x36, 0x34, 0x28, 0x61, 0x2c, 0x20, 0x62, - 0x29, 0x2c, 0x20, 0x63, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x68, 0x69, 0x66, 0x74, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, - 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x31, 0x27, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x62, 0x79, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, 0x73, - 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x2e, 0x20, 0x20, 0x41, - 0x6e, 0x79, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x20, - 0x2a, 0x20, 0x6f, 0x66, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x27, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x3b, 0x20, 0x69, 0x6e, 0x20, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x60, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x27, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, - 0x36, 0x34, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, - 0x65, 0x20, 0x30, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, - 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, - 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, - 0x74, 0x72, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, - 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, 0x67, 0x68, 0x74, 0x28, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x3d, 0x20, 0x28, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x26, 0x20, 0x33, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x7a, 0x30, 0x2c, 0x20, 0x28, 0x61, 0x30, 0x20, 0x3e, 0x3e, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x2c, 0x20, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, - 0x78, 0x28, 0x7a, 0x30, 0x2c, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, - 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x28, 0x61, - 0x30, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x29, 0x2c, 0x20, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x36, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, - 0x69, 0x78, 0x28, 0x7a, 0x31, 0x2c, 0x20, 0x28, 0x61, 0x30, 0x3c, 0x3c, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, - 0x20, 0x7c, 0x20, 0x28, 0x61, 0x31, 0x3e, 0x3e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, - 0x31, 0x2c, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x50, - 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, - 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, - 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x0a, - 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, - 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, - 0x0a, 0x5f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, - 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, - 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, - 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, - 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, - 0x34, 0x53, 0x69, 0x67, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x45, - 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x28, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, - 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, - 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, - 0x2c, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x34, 0x32, 0x37, 0x20, 0x2d, 0x20, - 0x61, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x30, 0x20, 0x3c, 0x20, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x44, 0x69, 0x73, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, - 0x34, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, - 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x2c, - 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x30, 0x30, 0x30, 0x75, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7e, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x2c, - 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x7a, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x65, - 0x72, 0x6f, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, - 0x52, 0x69, 0x67, 0x68, 0x74, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, - 0x6f, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2c, 0x20, 0x7a, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x70, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7e, 0x30, 0x75, 0x2c, 0x20, - 0x30, 0x75, 0x2c, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x74, 0x2c, 0x20, - 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x7a, 0x20, 0x21, - 0x3d, 0x20, 0x30, 0x75, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, - 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x29, - 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x75, 0x6c, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x4c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x33, 0x32, 0x28, 0x61, 0x29, 0x20, 0x2b, 0x20, - 0x32, 0x31, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x48, 0x69, 0x67, 0x68, 0x20, 0x3d, 0x20, - 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x4c, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x30, 0x75, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x28, - 0x2d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x29, 0x20, 0x26, 0x20, 0x33, 0x31, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x61, 0x48, 0x69, 0x67, 0x68, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x61, 0x3c, 0x3c, - 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, 0x2d, 0x20, 0x33, 0x32, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, - 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, 0x3c, 0x20, 0x36, 0x34, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x4c, 0x6f, 0x77, 0x20, - 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x67, 0x68, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x61, 0x48, 0x69, 0x67, 0x68, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, - 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x4c, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x61, 0x4c, 0x6f, 0x77, 0x2c, 0x20, 0x61, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, 0x3d, 0x3d, - 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x67, 0x68, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x48, - 0x69, 0x67, 0x68, 0x2c, 0x20, 0x61, 0x20, 0x3e, 0x3e, 0x20, 0x6e, 0x65, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x73, - 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x4c, - 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x4c, 0x6f, 0x77, 0x2c, 0x20, 0x61, 0x20, 0x3c, 0x3c, 0x20, 0x73, - 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x20, 0x3c, - 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, - 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x33, 0x32, 0x20, 0x2d, - 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x44, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x61, 0x48, 0x69, 0x67, 0x68, 0x2c, 0x20, 0x61, 0x4c, - 0x6f, 0x77, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, - 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x75, 0x6c, 0x3b, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, - 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, - 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, - 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x30, 0x2c, 0x20, 0x30, - 0x78, 0x34, 0x33, 0x33, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, - 0x6f, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x28, 0x30, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x33, 0x32, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x2e, 0x79, 0x2c, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, 0x67, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x3d, 0x20, - 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x55, 0x4c, 0x3b, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x30, 0x30, - 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, - 0x78, 0x34, 0x33, 0x33, 0x20, 0x2d, 0x20, 0x61, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x20, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x3c, 0x20, 0x2d, 0x31, 0x31, 0x20, 0x26, 0x26, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, - 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x5f, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x4e, 0x61, - 0x4e, 0x28, 0x61, 0x2c, 0x20, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6e, 0x2c, 0x20, - 0x61, 0x2c, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, - 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x2d, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, - 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x32, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, - 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x55, - 0x49, 0x6e, 0x74, 0x36, 0x34, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, - 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, 0x67, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x4e, 0x65, 0x67, 0x4e, - 0x61, 0x4e, 0x20, 0x3d, 0x20, 0x2d, 0x30, 0x78, 0x37, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x45, 0x4c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x50, 0x6f, 0x73, 0x4e, 0x61, 0x4e, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x4c, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, - 0x61, 0x45, 0x78, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x34, 0x33, 0x33, 0x20, 0x2d, 0x20, 0x61, 0x45, - 0x78, 0x70, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x20, 0x3c, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, - 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3c, 0x20, 0x2d, 0x31, 0x31, 0x20, 0x26, 0x26, 0x20, 0x61, 0x45, - 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x4e, 0x65, - 0x67, 0x4e, 0x61, 0x4e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x6d, 0x69, 0x78, 0x28, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x4e, 0x65, 0x67, 0x4e, 0x61, 0x4e, 0x2c, 0x20, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x50, 0x6f, 0x73, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x2d, 0x73, 0x68, - 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, - 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, - 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x28, 0x61, 0x53, - 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, - 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x74, 0x0a, 0x5f, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x28, 0x69, 0x6e, 0x74, - 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x3d, 0x3d, 0x30, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x75, 0x6c, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x62, 0x73, 0x41, 0x20, 0x3d, 0x20, 0x6d, 0x69, - 0x78, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x28, 0x61, 0x29, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, - 0x5f, 0x74, 0x28, 0x2d, 0x61, 0x29, 0x2c, 0x20, 0x61, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x62, 0x73, 0x41, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, - 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x62, 0x73, 0x41, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x75, 0x6e, - 0x70, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, 0x2e, 0x79, 0x29, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, - 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x75, 0x6c, 0x2c, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x36, 0x34, 0x28, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x78, 0x34, - 0x33, 0x34, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x2c, 0x20, 0x61, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x33, 0x32, 0x2c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x2e, 0x79, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x2e, 0x78, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, - 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, 0x27, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x27, 0x73, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, - 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2d, 0x2d, 0x2d, 0x0a, 0x20, 0x2a, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x60, 0x61, - 0x27, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, - 0x73, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x69, - 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x4f, 0x74, 0x68, 0x65, 0x72, - 0x77, 0x69, 0x73, 0x65, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x72, - 0x67, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0a, 0x20, 0x2a, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x60, 0x61, 0x27, 0x20, - 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x69, 0x6e, 0x74, 0x0a, - 0x5f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x74, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, - 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, - 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, - 0x34, 0x45, 0x78, 0x70, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, - 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, - 0x69, 0x67, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x62, 0x73, 0x5a, - 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x45, - 0x78, 0x74, 0x72, 0x61, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x69, - 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x20, 0x30, 0x78, 0x34, 0x31, - 0x33, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x30, 0x20, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x30, 0x78, - 0x34, 0x31, 0x45, 0x20, 0x3c, 0x20, 0x61, 0x45, 0x78, 0x70, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, - 0x20, 0x26, 0x26, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, - 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x78, 0x37, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x2c, - 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2c, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, - 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, - 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x61, - 0x62, 0x73, 0x5a, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, - 0x78, 0x70, 0x20, 0x3c, 0x20, 0x30, 0x78, 0x33, 0x46, 0x46, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x48, 0x69, 0x20, 0x7c, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x45, 0x78, 0x74, 0x72, 0x61, 0x20, 0x3d, 0x20, 0x28, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x29, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x61, 0x62, 0x73, 0x5a, 0x20, 0x3d, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x3e, 0x3e, - 0x20, 0x28, 0x2d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x69, 0x6e, 0x74, 0x28, - 0x61, 0x62, 0x73, 0x5a, 0x29, 0x2c, 0x20, 0x2d, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x62, 0x73, 0x5a, 0x29, 0x2c, 0x20, 0x61, 0x53, - 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x61, - 0x6e, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x30, 0x78, 0x37, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x2c, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2c, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x2c, 0x20, - 0x6e, 0x61, 0x6e, 0x2c, 0x20, 0x28, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x21, - 0x3d, 0x20, 0x28, 0x7a, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x29, 0x20, 0x26, 0x26, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x28, 0x7a, 0x29, - 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x27, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x60, 0x61, 0x27, 0x0a, 0x20, 0x2a, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x63, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, - 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, - 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x70, 0x36, 0x34, - 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x3d, 0x3d, 0x30, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x28, 0x61, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x62, 0x73, 0x41, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x75, 0x69, - 0x6e, 0x74, 0x28, 0x61, 0x29, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x2d, 0x61, 0x29, 0x2c, 0x20, 0x61, 0x20, 0x3c, 0x20, - 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5a, 0x65, 0x72, 0x6f, - 0x73, 0x33, 0x32, 0x28, 0x61, 0x62, 0x73, 0x41, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x30, 0x20, 0x3c, 0x3d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73, 0x41, 0x20, 0x3c, - 0x3c, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, 0x67, - 0x68, 0x74, 0x28, 0x61, 0x62, 0x73, 0x41, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x2d, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, - 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x34, 0x31, 0x32, - 0x20, 0x2d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, - 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x74, 0x0a, 0x5f, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x28, 0x62, 0x6f, 0x6f, 0x6c, - 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x55, - 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x2d, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x29, 0x20, 0x26, 0x20, - 0x30, 0x78, 0x33, 0x66, 0x66, 0x30, 0x30, 0x30, 0x30, 0x30, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, - 0x50, 0x61, 0x63, 0x6b, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x60, 0x7a, 0x53, 0x69, 0x67, 0x6e, - 0x27, 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x2c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x27, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x20, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x69, 0x6e, - 0x67, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x69, - 0x6d, 0x70, 0x6c, 0x79, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, - 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x79, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x60, - 0x7a, 0x53, 0x69, 0x67, 0x27, 0x0a, 0x20, 0x2a, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x20, - 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79, 0x20, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x0a, 0x20, - 0x2a, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, - 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x31, 0x2c, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x31, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x61, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x65, - 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x60, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x27, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x2c, 0x20, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x64, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0a, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x29, 0x0a, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x42, 0x69, 0x74, 0x73, 0x54, 0x6f, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x2b, 0x20, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, - 0x45, 0x78, 0x70, 0x29, 0x3c, 0x3c, 0x32, 0x33, 0x29, 0x20, 0x2b, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x29, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x54, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x20, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x60, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x27, - 0x2c, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x2c, 0x0a, 0x20, 0x2a, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x0a, 0x20, 0x2a, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x2e, 0x20, 0x20, 0x4f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, - 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x69, - 0x6d, 0x70, 0x6c, 0x79, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x61, 0x63, 0x6b, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x0a, - 0x20, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, - 0x6c, 0x79, 0x2e, 0x20, 0x20, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x6f, - 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, - 0x61, 0x6e, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x61, 0x6c, - 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x73, 0x6d, 0x61, - 0x6c, 0x6c, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, - 0x73, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, - 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x61, 0x69, - 0x73, 0x65, 0x64, 0x20, 0x69, 0x66, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x73, 0x20, 0x61, - 0x20, 0x73, 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x0a, 0x20, 0x2a, - 0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x0a, 0x20, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, - 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x27, 0x20, 0x68, 0x61, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, - 0x33, 0x30, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x32, 0x39, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, - 0x73, 0x20, 0x37, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x0a, 0x20, 0x2a, 0x20, 0x73, 0x69, - 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x20, 0x20, - 0x49, 0x66, 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x73, 0x65, - 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x75, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x20, 0x49, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x60, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x27, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x2c, 0x20, 0x60, 0x7a, 0x45, 0x78, 0x70, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x31, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x74, 0x72, 0x75, 0x65, - 0x22, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x78, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x20, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, - 0x20, 0x6f, 0x66, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x76, 0x65, - 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, - 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x46, 0x6c, 0x6f, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x41, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, - 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0a, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x53, - 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, - 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, - 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, - 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x4e, 0x45, 0x41, 0x52, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, - 0x78, 0x34, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x21, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, - 0x72, 0x65, 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, - 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x5a, 0x45, 0x52, - 0x4f, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, - 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, - 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x46, - 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x3d, 0x3d, - 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x55, 0x50, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x63, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x4f, 0x44, 0x45, - 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x5f, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x46, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x30, 0x78, 0x46, - 0x44, 0x75, 0x20, 0x3c, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x45, 0x78, 0x70, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x30, 0x78, 0x46, 0x44, 0x20, 0x3c, 0x20, 0x7a, 0x45, 0x78, 0x70, - 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x28, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x46, 0x44, 0x29, 0x20, - 0x26, 0x26, 0x20, 0x28, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x29, 0x20, 0x2b, 0x20, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, - 0x6f, 0x61, 0x74, 0x33, 0x32, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x46, 0x46, 0x2c, 0x20, 0x30, 0x75, - 0x29, 0x20, 0x2d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x2d, 0x7a, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x7a, 0x65, 0x78, 0x70, 0x5f, 0x6c, 0x74, 0x30, 0x20, 0x3d, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, - 0x3c, 0x20, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x5f, 0x6c, 0x74, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x2c, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x3e, 0x3e, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x29, 0x20, 0x7c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x3c, 0x3c, 0x28, 0x28, 0x2d, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x29, 0x20, 0x26, 0x20, 0x33, 0x31, 0x29, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x2c, - 0x20, 0x28, 0x2d, 0x7a, 0x45, 0x78, 0x70, 0x29, 0x20, 0x3c, 0x20, 0x33, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x2c, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x5f, 0x6c, 0x74, 0x30, 0x2c, 0x20, 0x7a, 0x65, 0x78, 0x70, 0x5f, 0x6c, 0x74, 0x30, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, - 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x37, 0x66, 0x2c, 0x20, 0x7a, 0x65, 0x78, 0x70, 0x5f, 0x6c, 0x74, 0x30, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, 0x45, 0x78, 0x70, - 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x7a, 0x65, 0x78, 0x70, 0x5f, 0x6c, 0x74, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, - 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x2b, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x29, 0x29, 0x3e, - 0x3e, 0x37, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x26, 0x3d, 0x20, 0x7e, 0x75, 0x69, 0x6e, 0x74, - 0x28, 0x28, 0x28, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x69, 0x74, 0x73, 0x20, 0x5e, 0x20, 0x30, 0x78, 0x34, 0x30, 0x29, 0x20, - 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x26, 0x26, 0x20, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, - 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x28, 0x7a, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x6d, 0x69, 0x78, - 0x28, 0x7a, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, - 0x29, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x20, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, - 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x41, 0x72, 0x69, - 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0a, 0x5f, 0x5f, - 0x66, 0x70, 0x36, 0x34, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x70, 0x33, 0x32, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, - 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, - 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x5a, 0x65, 0x72, 0x6f, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, - 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x5f, 0x5f, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x28, - 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, - 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, - 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, - 0x78, 0x70, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, - 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, - 0x69, 0x67, 0x6e, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, - 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x61, 0x2e, 0x79, 0x2c, - 0x20, 0x61, 0x2e, 0x78, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x61, 0x2e, 0x79, 0x2c, 0x20, 0x61, 0x2e, 0x78, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x42, 0x69, 0x74, 0x73, 0x54, 0x6f, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x7c, - 0x20, 0x30, 0x78, 0x37, 0x46, 0x43, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x20, 0x7c, 0x20, 0x28, 0x61, 0x2e, 0x79, 0x3e, 0x3e, - 0x39, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, - 0x28, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, - 0x20, 0x30, 0x78, 0x46, 0x46, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x2c, 0x20, 0x72, 0x76, 0x61, 0x6c, 0x2c, 0x20, 0x28, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x76, 0x61, 0x6c, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, - 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, - 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x32, 0x32, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x5a, 0x65, 0x72, 0x6f, 0x2c, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x20, 0x6d, 0x69, - 0x78, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x34, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x2c, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x50, - 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x32, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x61, 0x45, 0x78, - 0x70, 0x20, 0x2d, 0x20, 0x30, 0x78, 0x33, 0x38, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, - 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x61, - 0x27, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, - 0x5f, 0x66, 0x70, 0x33, 0x32, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x70, 0x36, 0x34, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x66, - 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x42, 0x69, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x69, 0x6e, 0x74, 0x28, 0x66, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x37, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x69, - 0x6e, 0x74, 0x28, 0x28, 0x61, 0x3e, 0x3e, 0x32, 0x33, 0x29, 0x20, 0x26, 0x20, 0x30, 0x78, 0x46, 0x46, 0x75, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x3d, 0x20, 0x61, 0x20, 0x26, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, - 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x78, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x61, 0x6e, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x30, - 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6e, 0x61, 0x6e, 0x48, - 0x69, 0x20, 0x3d, 0x20, 0x61, 0x3c, 0x3c, 0x39, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, - 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, 0x67, 0x68, 0x74, 0x28, 0x6e, 0x61, 0x6e, 0x48, 0x69, 0x2c, 0x20, 0x6e, - 0x61, 0x6e, 0x4c, 0x6f, 0x2c, 0x20, 0x31, 0x32, 0x2c, 0x20, 0x6e, 0x61, 0x6e, 0x48, 0x69, 0x2c, 0x20, 0x6e, 0x61, 0x6e, 0x4c, - 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6e, 0x48, 0x69, 0x20, 0x7c, 0x3d, - 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x38, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, - 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, 0x63, 0x32, 0x28, 0x6e, 0x61, 0x6e, 0x4c, 0x6f, 0x2c, - 0x20, 0x6e, 0x61, 0x6e, 0x48, 0x69, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, - 0x36, 0x34, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, - 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, - 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20, 0x73, 0x75, 0x62, - 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, - 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x65, - 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x33, 0x32, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x29, 0x20, 0x2d, - 0x20, 0x38, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x20, 0x3c, 0x3c, 0x3d, 0x20, 0x73, - 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x45, 0x78, 0x70, - 0x20, 0x3d, 0x20, 0x31, 0x20, 0x2d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x61, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x52, 0x69, 0x67, 0x68, 0x74, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x2c, - 0x20, 0x30, 0x75, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x2b, 0x20, - 0x30, 0x78, 0x33, 0x38, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, - 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x41, 0x64, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x39, 0x36, 0x2d, - 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, - 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x2c, 0x20, 0x60, 0x61, - 0x31, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x32, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x20, - 0x2a, 0x20, 0x39, 0x36, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x62, 0x30, - 0x27, 0x2c, 0x20, 0x60, 0x62, 0x31, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x62, 0x32, 0x27, 0x2e, 0x20, 0x20, 0x41, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x6f, 0x20, - 0x32, 0x5e, 0x39, 0x36, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x61, 0x72, 0x72, 0x79, 0x20, 0x6f, 0x75, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x72, 0x65, - 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x62, 0x79, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, 0x2c, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x7a, 0x31, 0x50, 0x74, - 0x72, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, - 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x39, 0x36, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, 0x2c, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x32, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, - 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x32, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x32, 0x20, 0x3d, 0x20, 0x61, 0x32, 0x20, 0x2b, 0x20, 0x62, - 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x72, 0x72, 0x79, 0x31, 0x20, 0x3d, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x32, 0x20, 0x3c, 0x20, 0x61, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x61, 0x31, 0x20, 0x2b, 0x20, 0x62, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x63, 0x61, 0x72, 0x72, 0x79, 0x30, 0x20, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x31, 0x20, 0x3c, 0x20, - 0x61, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x30, 0x20, - 0x2b, 0x20, 0x62, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x61, 0x72, 0x72, 0x79, 0x31, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x2b, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x31, 0x20, 0x3c, 0x20, - 0x63, 0x61, 0x72, 0x72, 0x79, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x61, 0x72, - 0x72, 0x79, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x32, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x32, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x50, 0x74, - 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x30, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x53, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x39, 0x36, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x20, 0x60, 0x62, 0x30, 0x27, 0x2c, 0x20, 0x60, 0x62, 0x31, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x62, 0x32, - 0x27, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x0a, 0x20, 0x2a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x39, 0x36, 0x2d, 0x62, 0x69, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, - 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x2c, 0x20, 0x60, 0x61, 0x31, 0x27, 0x2c, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x32, 0x27, 0x2e, 0x20, 0x20, 0x53, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x6f, 0x20, 0x32, 0x5e, 0x39, 0x36, 0x2c, 0x20, - 0x73, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x28, 0x63, 0x61, - 0x72, 0x72, 0x79, 0x20, 0x6f, 0x75, 0x74, 0x29, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, - 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x0a, 0x20, 0x2a, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x70, 0x69, - 0x65, 0x63, 0x65, 0x73, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, - 0x20, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x79, 0x0a, 0x20, 0x2a, 0x20, 0x60, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x27, - 0x2c, 0x20, 0x60, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x27, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x7a, 0x32, 0x50, 0x74, 0x72, - 0x27, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x0a, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x39, 0x36, 0x28, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x61, 0x32, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x30, 0x2c, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x32, 0x2c, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x2c, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x50, - 0x74, 0x72, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x7a, 0x32, 0x50, 0x74, 0x72, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x32, 0x20, 0x3d, - 0x20, 0x61, 0x32, 0x20, 0x2d, 0x20, 0x62, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x6f, 0x72, - 0x72, 0x6f, 0x77, 0x31, 0x20, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x32, 0x20, 0x3c, 0x20, 0x62, 0x32, 0x29, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x31, 0x20, 0x3d, 0x20, 0x61, 0x31, 0x20, 0x2d, 0x20, 0x62, 0x31, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x30, 0x20, 0x3d, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x28, 0x61, 0x31, 0x20, 0x3c, 0x20, 0x62, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x30, 0x20, 0x3d, 0x20, 0x61, 0x30, 0x20, 0x2d, 0x20, 0x62, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x20, - 0x2d, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x7a, 0x31, 0x20, 0x3c, 0x20, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x31, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x20, 0x2d, 0x3d, 0x20, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x31, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x7a, 0x30, 0x20, 0x2d, 0x3d, 0x20, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, - 0x32, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x31, 0x50, 0x74, 0x72, 0x20, 0x3d, - 0x20, 0x7a, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x30, 0x50, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x7a, 0x30, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x78, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, - 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x62, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x2a, - 0x20, 0x60, 0x62, 0x27, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x36, 0x34, 0x2d, 0x62, 0x69, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x61, - 0x74, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x60, 0x61, 0x30, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x60, 0x61, 0x31, - 0x27, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x0a, 0x20, 0x2a, 0x20, 0x64, 0x69, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x20, 0x60, 0x62, - 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x32, 0x5e, - 0x33, 0x31, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x71, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x61, 0x63, - 0x74, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x0a, - 0x20, 0x2a, 0x20, 0x74, 0x6f, 0x77, 0x61, 0x72, 0x64, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x20, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x71, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x71, - 0x20, 0x2b, 0x20, 0x32, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x2e, 0x0a, 0x20, 0x2a, 0x20, 0x49, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20, 0x71, 0x75, 0x6f, 0x74, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x71, - 0x20, 0x69, 0x73, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x33, 0x32, 0x20, 0x62, 0x69, - 0x74, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x0a, 0x5f, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, - 0x44, 0x69, 0x76, 0x36, 0x34, 0x54, 0x6f, 0x33, 0x32, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x30, 0x2c, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x61, 0x31, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, - 0x69, 0x6e, 0x74, 0x20, 0x62, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x62, 0x31, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x6d, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, - 0x20, 0x7a, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x62, 0x20, 0x3c, 0x3d, 0x20, 0x61, 0x30, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x30, 0x20, 0x3d, 0x20, 0x62, 0x3e, 0x3e, 0x31, 0x36, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x62, 0x30, 0x3c, 0x3c, 0x31, 0x36, 0x20, 0x3c, 0x3d, 0x20, 0x61, 0x30, 0x29, 0x20, - 0x3f, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x75, 0x20, 0x3a, 0x20, 0x28, 0x61, 0x30, 0x20, 0x2f, - 0x20, 0x62, 0x30, 0x29, 0x3c, 0x3c, 0x31, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x6d, 0x75, 0x6c, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x64, 0x65, 0x64, 0x28, 0x62, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x30, 0x2c, 0x20, 0x74, 0x65, 0x72, - 0x6d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x36, 0x34, 0x28, 0x61, 0x30, 0x2c, 0x20, 0x61, - 0x31, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x30, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x30, - 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x6e, - 0x74, 0x28, 0x72, 0x65, 0x6d, 0x30, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7a, 0x20, 0x2d, 0x3d, 0x20, 0x30, 0x78, 0x31, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x62, 0x31, 0x20, 0x3d, 0x20, 0x62, 0x3c, 0x3c, 0x31, 0x36, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, - 0x64, 0x64, 0x36, 0x34, 0x28, 0x72, 0x65, 0x6d, 0x30, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x2c, 0x20, 0x62, 0x30, 0x2c, 0x20, - 0x62, 0x31, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x30, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x6d, 0x30, 0x20, 0x3d, 0x20, 0x28, 0x72, 0x65, 0x6d, 0x30, 0x3c, 0x3c, 0x31, 0x36, 0x29, - 0x20, 0x7c, 0x20, 0x28, 0x72, 0x65, 0x6d, 0x31, 0x3e, 0x3e, 0x31, 0x36, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x20, 0x7c, - 0x3d, 0x20, 0x28, 0x62, 0x30, 0x3c, 0x3c, 0x31, 0x36, 0x20, 0x3c, 0x3d, 0x20, 0x72, 0x65, 0x6d, 0x30, 0x29, 0x20, 0x3f, 0x20, - 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x75, 0x20, 0x3a, 0x20, 0x72, 0x65, 0x6d, 0x30, 0x20, 0x2f, 0x20, 0x62, 0x30, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x7a, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x0a, - 0x5f, 0x5f, 0x73, 0x71, 0x72, 0x74, 0x4f, 0x64, 0x64, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x28, - 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, - 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, - 0x78, 0x30, 0x30, 0x30, 0x34, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, - 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, - 0x30, 0x32, 0x32, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, - 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x35, - 0x44, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x33, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x42, 0x31, 0x75, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x31, 0x31, 0x44, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x35, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x31, 0x39, 0x46, 0x75, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x36, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x32, 0x33, 0x36, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x37, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x32, 0x45, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x38, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x33, 0x39, 0x43, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x39, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, - 0x3d, 0x20, 0x30, 0x78, 0x30, 0x34, 0x36, 0x38, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, - 0x20, 0x30, 0x78, 0x30, 0x35, 0x34, 0x35, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, - 0x30, 0x78, 0x36, 0x33, 0x31, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, - 0x3d, 0x3d, 0x20, 0x31, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, - 0x30, 0x37, 0x32, 0x42, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, - 0x3d, 0x20, 0x31, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, - 0x38, 0x33, 0x32, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, - 0x20, 0x31, 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x39, - 0x34, 0x36, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, - 0x31, 0x35, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x41, 0x36, - 0x37, 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x3b, 0x0a, 0x7d, - 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x0a, 0x5f, 0x5f, 0x73, 0x71, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x41, 0x64, 0x6a, 0x75, - 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x0a, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x41, 0x32, 0x44, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x38, 0x41, 0x46, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, - 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x37, 0x35, 0x41, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, - 0x20, 0x30, 0x78, 0x30, 0x36, 0x32, 0x39, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, - 0x78, 0x30, 0x35, 0x31, 0x41, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, - 0x3d, 0x3d, 0x20, 0x35, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, - 0x34, 0x32, 0x39, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, - 0x20, 0x36, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x33, 0x35, - 0x36, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x37, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x32, 0x39, 0x45, 0x75, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x38, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x32, 0x30, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x39, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x31, 0x37, 0x39, 0x75, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x31, 0x30, 0x39, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x31, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x41, 0x46, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x36, 0x38, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x33, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x33, 0x34, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x34, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x32, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x35, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x73, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x32, 0x75, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x64, 0x20, - 0x67, 0x69, 0x76, 0x65, 0x6e, 0x0a, 0x20, 0x2a, 0x20, 0x62, 0x79, 0x20, 0x60, 0x61, 0x27, 0x2e, 0x20, 0x20, 0x43, 0x6f, 0x6e, - 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, - 0x2c, 0x20, 0x60, 0x61, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, - 0x74, 0x20, 0x32, 0x5e, 0x33, 0x31, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x62, 0x69, 0x74, 0x20, 0x30, 0x20, 0x6f, 0x66, 0x0a, - 0x20, 0x2a, 0x20, 0x60, 0x61, 0x45, 0x78, 0x70, 0x27, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, - 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x29, 0x20, 0x69, 0x73, 0x20, 0x31, - 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, 0x0a, 0x20, 0x2a, 0x20, 0x32, 0x5e, 0x33, - 0x31, 0x2a, 0x73, 0x71, 0x72, 0x74, 0x28, 0x60, 0x61, 0x27, 0x2f, 0x32, 0x5e, 0x33, 0x31, 0x29, 0x2c, 0x20, 0x77, 0x68, 0x65, - 0x72, 0x65, 0x20, 0x60, 0x61, 0x27, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x62, 0x69, 0x74, 0x20, 0x30, - 0x20, 0x6f, 0x66, 0x20, 0x60, 0x61, 0x45, 0x78, 0x70, 0x27, 0x0a, 0x20, 0x2a, 0x20, 0x69, 0x73, 0x20, 0x30, 0x2c, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, 0x20, 0x32, 0x5e, 0x33, 0x31, 0x2a, 0x73, 0x71, 0x72, 0x74, - 0x28, 0x60, 0x61, 0x27, 0x2f, 0x32, 0x5e, 0x33, 0x30, 0x29, 0x2e, 0x20, 0x20, 0x49, 0x6e, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, - 0x72, 0x0a, 0x20, 0x2a, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, - 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x6c, 0x69, 0x65, 0x73, - 0x20, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x2b, 0x2f, 0x2d, 0x32, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x0a, 0x5f, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x53, 0x71, 0x72, 0x74, 0x33, 0x32, 0x28, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x3b, 0x0a, 0x0a, 0x20, 0x20, - 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x3e, 0x3e, 0x32, - 0x37, 0x20, 0x26, 0x20, 0x31, 0x35, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x45, 0x78, - 0x70, 0x20, 0x26, 0x20, 0x31, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7a, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x34, 0x30, 0x30, 0x30, 0x75, 0x20, 0x2b, 0x20, 0x28, 0x61, 0x3e, 0x3e, 0x31, 0x37, 0x29, - 0x20, 0x2d, 0x20, 0x5f, 0x5f, 0x73, 0x71, 0x72, 0x74, 0x4f, 0x64, 0x64, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x28, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x20, 0x3d, 0x20, - 0x28, 0x28, 0x61, 0x20, 0x2f, 0x20, 0x7a, 0x29, 0x3c, 0x3c, 0x31, 0x34, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x7a, 0x3c, 0x3c, 0x31, - 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3e, 0x3e, 0x3d, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x20, 0x3d, 0x20, 0x30, - 0x78, 0x38, 0x30, 0x30, 0x30, 0x75, 0x20, 0x2b, 0x20, 0x28, 0x61, 0x3e, 0x3e, 0x31, 0x37, 0x29, 0x20, 0x2d, 0x20, 0x5f, 0x5f, - 0x73, 0x71, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x28, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x20, 0x2f, 0x20, - 0x7a, 0x20, 0x2b, 0x20, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x20, 0x3d, 0x20, 0x28, 0x30, 0x78, 0x32, - 0x30, 0x30, 0x30, 0x30, 0x75, 0x20, 0x3c, 0x3d, 0x20, 0x7a, 0x29, 0x20, 0x3f, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x38, - 0x30, 0x30, 0x30, 0x75, 0x20, 0x3a, 0x20, 0x28, 0x7a, 0x3c, 0x3c, 0x31, 0x35, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x20, 0x3c, 0x3d, 0x20, 0x61, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x29, 0x3e, 0x3e, - 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x28, - 0x5f, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x44, 0x69, 0x76, 0x36, 0x34, 0x54, 0x6f, 0x33, 0x32, 0x28, 0x61, - 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x7a, 0x29, 0x29, 0x3e, 0x3e, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x28, 0x7a, 0x3e, 0x3e, 0x31, - 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x2f, 0x2a, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x60, 0x61, 0x27, 0x2e, 0x0a, 0x20, - 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, - 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x0a, 0x20, 0x2a, 0x20, 0x41, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x2e, 0x0a, 0x20, 0x2a, 0x2f, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, - 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x73, 0x71, 0x72, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, - 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, - 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, - 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, 0x20, 0x3d, - 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5a, 0x46, - 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, - 0x6d, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x6d, 0x31, - 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x6d, 0x32, 0x20, 0x3d, - 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x6d, 0x33, 0x20, 0x3d, 0x20, 0x30, - 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x75, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x32, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x33, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6e, 0x61, - 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x55, 0x4c, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, - 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x46, 0x72, - 0x61, 0x63, 0x4c, 0x6f, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, - 0x34, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x45, - 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, - 0x45, 0x78, 0x70, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x53, 0x69, 0x67, 0x6e, - 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x69, - 0x67, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, - 0x20, 0x30, 0x78, 0x37, 0x46, 0x46, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x21, 0x3d, - 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x5f, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x4e, 0x61, 0x4e, - 0x28, 0x61, 0x2c, 0x20, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x61, 0x53, 0x69, - 0x67, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x61, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x61, 0x45, 0x78, 0x70, 0x29, 0x20, 0x7c, - 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x20, 0x3d, - 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, - 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x30, 0x75, 0x2c, 0x20, - 0x30, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x6e, - 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x53, 0x75, 0x62, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, - 0x20, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, - 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x45, 0x78, 0x70, - 0x20, 0x3d, 0x20, 0x28, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x20, 0x30, 0x78, 0x33, 0x46, 0x46, 0x29, 0x3e, 0x3e, 0x31, - 0x29, 0x20, 0x2b, 0x20, 0x30, 0x78, 0x33, 0x46, 0x45, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, - 0x20, 0x7c, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, - 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x61, 0x46, 0x72, - 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x31, 0x31, 0x2c, 0x20, 0x74, 0x65, - 0x72, 0x6d, 0x30, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x30, 0x20, 0x3d, 0x20, 0x28, 0x5f, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x53, 0x71, 0x72, 0x74, 0x33, 0x32, - 0x28, 0x61, 0x45, 0x78, 0x70, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x30, 0x29, 0x3e, 0x3e, 0x31, 0x29, 0x20, 0x2b, 0x20, 0x31, - 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x3d, 0x20, 0x30, - 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x37, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5a, 0x46, - 0x72, 0x61, 0x63, 0x30, 0x20, 0x3d, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x2b, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, - 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, - 0x65, 0x66, 0x74, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, - 0x20, 0x39, 0x20, 0x2d, 0x20, 0x28, 0x61, 0x45, 0x78, 0x70, 0x20, 0x26, 0x20, 0x31, 0x29, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, - 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x6d, 0x75, - 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, - 0x61, 0x63, 0x30, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x30, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x29, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x36, 0x34, 0x28, 0x61, 0x46, 0x72, 0x61, 0x63, 0x48, 0x69, 0x2c, 0x20, 0x61, 0x46, - 0x72, 0x61, 0x63, 0x4c, 0x6f, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x30, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x2c, 0x20, - 0x72, 0x65, 0x6d, 0x30, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, - 0x20, 0x28, 0x69, 0x6e, 0x74, 0x28, 0x72, 0x65, 0x6d, 0x30, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x2d, 0x3d, 0x20, 0x32, 0x75, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x72, 0x65, 0x6d, 0x30, 0x2c, 0x20, 0x72, 0x65, 0x6d, - 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x20, 0x7c, - 0x20, 0x31, 0x75, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x30, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x73, 0x74, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x44, 0x69, 0x76, 0x36, 0x34, 0x54, 0x6f, 0x33, 0x32, 0x28, 0x72, 0x65, 0x6d, 0x31, 0x2c, 0x20, 0x30, 0x75, - 0x2c, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x66, 0x20, 0x28, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x26, 0x20, 0x30, 0x78, 0x31, 0x46, 0x46, 0x75, 0x29, 0x20, - 0x3c, 0x3d, 0x20, 0x35, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x3d, 0x20, 0x31, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x6d, - 0x75, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x28, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5a, 0x46, 0x72, 0x61, - 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x2c, 0x20, 0x74, 0x65, - 0x72, 0x6d, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x36, 0x34, 0x28, 0x72, - 0x65, 0x6d, 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x31, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x32, - 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x75, 0x6d, 0x75, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x28, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, - 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x32, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x33, 0x29, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x75, 0x62, 0x39, 0x36, 0x28, 0x72, 0x65, 0x6d, 0x31, 0x2c, - 0x20, 0x72, 0x65, 0x6d, 0x32, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x32, 0x2c, - 0x20, 0x74, 0x65, 0x72, 0x6d, 0x33, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x32, 0x2c, 0x20, 0x72, - 0x65, 0x6d, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x69, 0x6e, - 0x74, 0x28, 0x72, 0x65, 0x6d, 0x31, 0x29, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x53, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x4c, 0x65, 0x66, 0x74, 0x28, 0x30, - 0x75, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x32, 0x2c, 0x20, - 0x74, 0x65, 0x72, 0x6d, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x72, 0x6d, - 0x33, 0x20, 0x7c, 0x3d, 0x20, 0x31, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x65, 0x72, - 0x6d, 0x32, 0x20, 0x7c, 0x3d, 0x20, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x39, 0x36, 0x28, 0x72, 0x65, 0x6d, 0x31, 0x2c, - 0x20, 0x72, 0x65, 0x6d, 0x32, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x33, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, - 0x32, 0x2c, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x33, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x31, 0x2c, 0x20, 0x72, 0x65, 0x6d, 0x32, 0x2c, - 0x20, 0x72, 0x65, 0x6d, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x20, 0x7c, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x72, 0x65, 0x6d, 0x31, - 0x20, 0x7c, 0x20, 0x72, 0x65, 0x6d, 0x32, 0x20, 0x7c, 0x20, 0x72, 0x65, 0x6d, 0x33, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x36, 0x34, 0x45, - 0x78, 0x74, 0x72, 0x61, 0x52, 0x69, 0x67, 0x68, 0x74, 0x4a, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x28, 0x7a, 0x46, 0x72, 0x61, - 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x31, 0x30, 0x2c, 0x20, 0x7a, - 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x32, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x41, - 0x6e, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x28, 0x30, 0x75, 0x2c, 0x20, 0x7a, 0x45, 0x78, - 0x70, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x30, 0x2c, 0x20, 0x7a, 0x46, 0x72, 0x61, 0x63, 0x31, 0x2c, 0x20, 0x7a, 0x46, - 0x72, 0x61, 0x63, 0x32, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, - 0x66, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, - 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, - 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, - 0x6e, 0x74, 0x20, 0x61, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x46, 0x6c, - 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, - 0x74, 0x20, 0x7a, 0x4c, 0x6f, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x7a, 0x48, 0x69, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, - 0x61, 0x45, 0x78, 0x70, 0x20, 0x2d, 0x20, 0x31, 0x30, 0x32, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x66, - 0x72, 0x61, 0x63, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3d, 0x20, 0x35, 0x32, 0x20, 0x2d, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, - 0x65, 0x64, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x4c, 0x6f, - 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7e, 0x30, 0x75, 0x20, 0x3c, 0x3c, 0x20, 0x66, 0x72, 0x61, 0x63, 0x42, 0x69, 0x74, - 0x73, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x66, 0x72, 0x61, 0x63, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x33, 0x32, - 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, - 0x69, 0x78, 0x28, 0x7e, 0x30, 0x75, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x66, 0x72, 0x61, 0x63, 0x42, 0x69, 0x74, 0x73, 0x20, 0x2d, - 0x20, 0x33, 0x32, 0x29, 0x2c, 0x20, 0x7e, 0x30, 0x75, 0x2c, 0x20, 0x66, 0x72, 0x61, 0x63, 0x42, 0x69, 0x74, 0x73, 0x20, 0x3c, - 0x20, 0x33, 0x33, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x4c, 0x6f, - 0x20, 0x26, 0x20, 0x61, 0x2e, 0x78, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, - 0x48, 0x69, 0x20, 0x26, 0x20, 0x61, 0x2e, 0x79, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x6d, - 0x69, 0x78, 0x28, 0x7a, 0x4c, 0x6f, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, - 0x78, 0x70, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, - 0x28, 0x7a, 0x48, 0x69, 0x2c, 0x20, 0x30, 0x75, 0x2c, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, - 0x20, 0x3c, 0x20, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, - 0x4c, 0x6f, 0x2c, 0x20, 0x61, 0x2e, 0x78, 0x2c, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, - 0x3e, 0x20, 0x35, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7a, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x7a, - 0x48, 0x69, 0x2c, 0x20, 0x61, 0x2e, 0x79, 0x2c, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, - 0x3e, 0x20, 0x35, 0x32, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, 0x63, 0x6b, - 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, 0x63, 0x32, 0x28, 0x7a, 0x4c, 0x6f, 0x2c, 0x20, 0x7a, - 0x48, 0x69, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, - 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x62, 0x69, 0x67, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x27, 0x61, 0x27, 0x20, - 0x69, 0x73, 0x20, 0x4e, 0x61, 0x4e, 0x2c, 0x20, 0x5f, 0x5f, 0x66, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x28, 0x61, 0x29, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x61, 0x2e, 0x20, 0x20, 0x42, 0x61, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x2a, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2c, - 0x20, 0x4e, 0x61, 0x4e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x6e, 0x27, - 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x62, 0x69, 0x74, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x61, 0x66, 0x65, 0x6c, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x20, 0x4e, 0x61, 0x4e, 0x20, 0x28, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0x2e, 0x20, 0x20, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x67, 0x75, 0x61, 0x72, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x52, 0x45, 0x4c, - 0x41, 0x58, 0x45, 0x44, 0x5f, 0x4e, 0x41, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x41, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, - 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x61, 0x4e, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x22, 0x20, 0x62, 0x69, 0x74, 0x20, 0x73, 0x65, - 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x5f, 0x5f, 0x66, 0x61, 0x64, 0x64, 0x36, - 0x34, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x63, - 0x63, 0x75, 0x72, 0x73, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, - 0x69, 0x73, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x3d, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x20, 0x52, 0x45, 0x4c, 0x41, 0x58, 0x45, 0x44, 0x5f, 0x4e, 0x41, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x50, - 0x41, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x28, 0x75, 0x6e, 0x70, - 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x61, 0x29, 0x2e, 0x79, 0x29, 0x20, 0x3e, 0x3d, 0x20, - 0x30, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x66, 0x67, 0x65, 0x36, 0x34, - 0x28, 0x61, 0x2c, 0x20, 0x30, 0x75, 0x6c, 0x29, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x74, 0x72, 0x20, 0x3d, 0x20, 0x5f, - 0x5f, 0x66, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x36, 0x34, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x69, 0x73, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x7c, 0x7c, 0x20, 0x5f, 0x5f, 0x66, 0x65, 0x71, - 0x36, 0x34, 0x28, 0x74, 0x72, 0x2c, 0x20, 0x61, 0x29, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x66, 0x61, 0x64, 0x64, 0x36, 0x34, - 0x28, 0x74, 0x72, 0x2c, 0x20, 0x30, 0x78, 0x62, 0x66, 0x66, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x75, 0x6c, 0x20, 0x2f, 0x2a, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x20, 0x2a, 0x2f, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, 0x0a, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x75, 0x76, 0x65, 0x63, 0x32, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, - 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x75, 0x6e, - 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x20, 0x2d, 0x20, 0x31, 0x30, 0x32, - 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x61, 0x2e, 0x79, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x61, 0x2e, 0x78, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, 0x3c, 0x20, - 0x32, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x6e, 0x62, 0x69, 0x61, - 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, 0x3c, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x48, 0x69, 0x20, 0x26, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x75, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x75, 0x20, 0x26, 0x26, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x3d, 0x3d, 0x20, - 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x30, 0x75, 0x6c, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x20, 0x26, 0x3d, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, - 0x61, 0x2e, 0x79, 0x20, 0x26, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x29, 0x20, 0x3d, 0x3d, - 0x20, 0x30, 0x75, 0x20, 0x26, 0x26, 0x20, 0x61, 0x2e, 0x78, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x20, 0x7b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x61, - 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, 0x63, 0x32, 0x28, 0x61, 0x4c, 0x6f, 0x2c, - 0x20, 0x61, 0x48, 0x69, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x48, 0x69, 0x2c, - 0x20, 0x28, 0x61, 0x48, 0x69, 0x20, 0x7c, 0x20, 0x30, 0x78, 0x33, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x75, 0x29, 0x2c, - 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x75, 0x20, 0x3e, 0x3e, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x42, - 0x69, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x70, 0x20, 0x2b, 0x20, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x20, 0x2b, 0x3d, 0x20, 0x30, 0x78, 0x30, 0x30, 0x30, 0x38, 0x30, 0x30, - 0x30, 0x30, 0x75, 0x20, 0x3e, 0x3e, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x48, 0x69, 0x20, 0x26, 0x20, 0x6d, 0x61, - 0x73, 0x6b, 0x45, 0x78, 0x70, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x20, 0x26, 0x3d, 0x20, 0x7e, 0x6c, 0x61, 0x73, 0x74, 0x42, 0x69, 0x74, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x20, 0x26, 0x3d, 0x20, 0x7e, 0x6d, 0x61, 0x73, - 0x6b, 0x45, 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x3d, 0x20, - 0x30, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, - 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, 0x3e, 0x20, 0x35, 0x31, - 0x20, 0x7c, 0x7c, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x30, - 0x32, 0x34, 0x29, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, - 0x61, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x70, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x75, 0x20, 0x3e, 0x3e, 0x20, 0x28, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, - 0x20, 0x2d, 0x20, 0x32, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x28, 0x61, 0x4c, - 0x6f, 0x20, 0x26, 0x20, 0x6d, 0x61, 0x73, 0x6b, 0x45, 0x78, 0x70, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x75, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x61, 0x3b, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x6d, 0x70, 0x20, 0x3d, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x2b, - 0x20, 0x28, 0x31, 0x75, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x35, 0x31, 0x20, 0x2d, 0x20, 0x75, 0x6e, 0x62, 0x69, 0x61, 0x73, 0x65, - 0x64, 0x45, 0x78, 0x70, 0x29, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x74, 0x6d, 0x70, 0x20, - 0x3c, 0x20, 0x61, 0x4c, 0x6f, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x48, 0x69, 0x20, 0x2b, - 0x3d, 0x20, 0x31, 0x75, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x74, 0x6d, 0x70, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x4c, 0x6f, 0x20, 0x26, 0x3d, 0x20, 0x7e, 0x6d, 0x61, 0x73, 0x6b, 0x45, - 0x78, 0x70, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, - 0x61, 0x63, 0x6b, 0x55, 0x69, 0x6e, 0x74, 0x32, 0x78, 0x33, 0x32, 0x28, 0x75, 0x76, 0x65, 0x63, 0x32, 0x28, 0x61, 0x4c, 0x6f, - 0x2c, 0x20, 0x61, 0x48, 0x69, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, - 0x5f, 0x5f, 0x66, 0x6d, 0x69, 0x6e, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x2c, 0x20, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x62, 0x29, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x77, 0x65, 0x69, 0x72, 0x64, 0x20, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x6f, 0x62, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x22, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x6e, - 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, - 0x2d, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x2a, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x20, 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x62, 0x61, 0x64, 0x21, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, - 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x62, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, - 0x61, 0x6e, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x61, 0x5f, 0x6c, 0x74, 0x5f, 0x62, - 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x66, 0x6c, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x2c, 0x20, - 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x61, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x5f, - 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x28, 0x62, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x7c, 0x7c, 0x20, 0x61, 0x5f, 0x6c, 0x74, 0x5f, 0x62, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x21, 0x61, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x3f, 0x20, 0x61, 0x20, 0x3a, 0x20, 0x62, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, - 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, 0x6d, 0x61, 0x78, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, - 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x2c, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x62, 0x29, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x77, 0x65, 0x69, 0x72, 0x64, 0x20, 0x6c, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x22, 0x6f, 0x62, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, - 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x69, - 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x2d, 0x63, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x20, 0x65, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x20, - 0x20, 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x62, 0x61, 0x64, 0x21, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, 0x62, 0x5f, 0x6e, 0x61, 0x6e, - 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, - 0x6f, 0x6c, 0x20, 0x61, 0x5f, 0x6c, 0x74, 0x5f, 0x62, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x66, 0x6c, 0x74, 0x36, 0x34, 0x5f, 0x6e, - 0x6f, 0x6e, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x2c, 0x20, 0x62, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x62, 0x6f, 0x6f, 0x6c, 0x20, - 0x61, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x5f, 0x69, 0x73, 0x5f, 0x6e, 0x61, 0x6e, 0x28, 0x61, 0x29, 0x3b, 0x0a, - 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x62, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x7c, 0x7c, 0x20, - 0x61, 0x5f, 0x6c, 0x74, 0x5f, 0x62, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x61, 0x5f, 0x6e, 0x61, 0x6e, 0x20, 0x3f, 0x20, 0x62, - 0x20, 0x3a, 0x20, 0x61, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x0a, 0x5f, 0x5f, 0x66, - 0x66, 0x72, 0x61, 0x63, 0x74, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x61, 0x29, 0x0a, 0x7b, - 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x66, 0x61, 0x64, 0x64, 0x36, 0x34, 0x28, 0x61, - 0x2c, 0x20, 0x5f, 0x5f, 0x66, 0x6e, 0x65, 0x67, 0x36, 0x34, 0x28, 0x5f, 0x5f, 0x66, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x36, 0x34, - 0x28, 0x61, 0x29, 0x29, 0x29, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x0a, 0x5f, 0x5f, 0x66, 0x69, 0x73, 0x66, - 0x69, 0x6e, 0x69, 0x74, 0x65, 0x36, 0x34, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x29, - 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x5f, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x45, 0x78, 0x70, 0x28, 0x5f, 0x5f, 0x61, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x30, - 0x78, 0x37, 0x66, 0x66, 0x3b, 0x0a, 0x7d, 0x0a, -0 -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/generate_ir.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/generate_ir.cpp deleted file mode 100644 index d91f159..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/generate_ir.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include "ir_builder.h" -#include "builtin_functions.h" -#include "../../mesa/program/prog_instruction.h" /* for SWIZZLE_X, &c. */ - -using namespace ir_builder; - -namespace generate_ir { - -#include "builtin_int64.h" - -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir.h deleted file mode 100644 index 1152093..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2018 Timothy Arceri - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GL_NIR_H -#define GL_NIR_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -struct nir_shader; -struct gl_constants; -struct gl_linked_shader; -struct gl_shader_program; - -bool gl_nir_lower_atomics(nir_shader *shader, - const struct gl_shader_program *shader_program, - bool use_binding_as_idx); - -bool gl_nir_lower_images(nir_shader *shader, bool bindless_only); -bool gl_nir_lower_samplers(nir_shader *shader, - const struct gl_shader_program *shader_program); -bool gl_nir_lower_samplers_as_deref(nir_shader *shader, - const struct gl_shader_program *shader_program); - -bool gl_nir_lower_buffers(nir_shader *shader, - const struct gl_shader_program *shader_program); - -void gl_nir_lower_packed_varyings(const struct gl_constants *consts, - struct gl_shader_program *prog, - void *mem_ctx, unsigned locations_used, - const uint8_t *components, - nir_variable_mode mode, - unsigned gs_input_vertices, - struct gl_linked_shader *linked_shader, - bool disable_varying_packing, - bool disable_xfb_packing, bool xfb_enabled); - -#ifdef __cplusplus -} -#endif - -#endif /* GL_NIR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_atomics.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_atomics.c deleted file mode 100644 index 03ff016..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_atomics.c +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "linker_util.h" -#include "gl_nir_linker.h" -#include "ir_uniform.h" /* for gl_uniform_storage */ -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/shader_types.h" -#include "../../util/glheader.h" - -/** - * This file do the common link for GLSL atomic counter uniforms, using NIR, - * instead of IR as the counter-part glsl/link_uniforms.cpp - */ - -struct active_atomic_counter_uniform { - unsigned loc; - nir_variable *var; -}; - -struct active_atomic_buffer { - struct active_atomic_counter_uniform *uniforms; - unsigned num_uniforms; - unsigned uniform_buffer_size; - unsigned stage_counter_references[MESA_SHADER_STAGES]; - unsigned size; -}; - -static void -add_atomic_counter(const void *ctx, - struct active_atomic_buffer *buffer, - unsigned uniform_loc, - nir_variable *var) -{ - if (buffer->num_uniforms >= buffer->uniform_buffer_size) { - if (buffer->uniform_buffer_size == 0) - buffer->uniform_buffer_size = 1; - else - buffer->uniform_buffer_size *= 2; - buffer->uniforms = reralloc(ctx, - buffer->uniforms, - struct active_atomic_counter_uniform, - buffer->uniform_buffer_size); - } - - struct active_atomic_counter_uniform *uniform = - buffer->uniforms + buffer->num_uniforms; - uniform->loc = uniform_loc; - uniform->var = var; - buffer->num_uniforms++; -} - -static void -process_atomic_variable(const struct glsl_type *t, - struct gl_shader_program *prog, - unsigned *uniform_loc, - nir_variable *var, - struct active_atomic_buffer *buffers, - unsigned *num_buffers, - int *offset, - unsigned shader_stage) -{ - /* FIXME: Arrays of arrays get counted separately. For example: - * x1[3][3][2] = 9 uniforms, 18 atomic counters - * x2[3][2] = 3 uniforms, 6 atomic counters - * x3[2] = 1 uniform, 2 atomic counters - * - * However this code marks all the counters as active even when they - * might not be used. - */ - if (glsl_type_is_array(t) && - glsl_type_is_array(glsl_get_array_element(t))) { - for (unsigned i = 0; i < glsl_get_length(t); i++) { - process_atomic_variable(glsl_get_array_element(t), - prog, - uniform_loc, - var, - buffers, num_buffers, - offset, - shader_stage); - } - } else { - struct active_atomic_buffer *buf = buffers + var->data.binding; - struct gl_uniform_storage *const storage = - &prog->data->UniformStorage[*uniform_loc]; - - /* If this is the first time the buffer is used, increment - * the counter of buffers used. - */ - if (buf->size == 0) - (*num_buffers)++; - - add_atomic_counter(buffers, /* ctx */ - buf, - *uniform_loc, - var); - - /* When checking for atomic counters we should count every member in - * an array as an atomic counter reference. - */ - if (glsl_type_is_array(t)) - buf->stage_counter_references[shader_stage] += glsl_get_length(t); - else - buf->stage_counter_references[shader_stage]++; - buf->size = MAX2(buf->size, *offset + glsl_atomic_size(t)); - - storage->offset = *offset; - *offset += glsl_atomic_size(t); - - (*uniform_loc)++; - } -} - -static struct active_atomic_buffer * -find_active_atomic_counters(const struct gl_constants *consts, - struct gl_shader_program *prog, - unsigned *num_buffers) -{ - struct active_atomic_buffer *buffers = - rzalloc_array(NULL, /* ctx */ - struct active_atomic_buffer, - consts->MaxAtomicBufferBindings); - *num_buffers = 0; - - for (unsigned i = 0; i < MESA_SHADER_STAGES; ++i) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - if (sh == NULL) - continue; - - nir_shader *nir = sh->Program->nir; - - nir_foreach_uniform_variable(var, nir) { - if (!glsl_contains_atomic(var->type)) - continue; - - int offset = var->data.offset; - unsigned uniform_loc = var->data.location; - - process_atomic_variable(var->type, - prog, - &uniform_loc, - var, - buffers, - num_buffers, - &offset, - i); - } - } - - return buffers; -} - -static bool -check_atomic_counters_overlap(const nir_variable *x, const nir_variable *y) -{ - return ((x->data.offset >= y->data.offset && - x->data.offset < y->data.offset + glsl_atomic_size(y->type)) || - (y->data.offset >= x->data.offset && - y->data.offset < x->data.offset + glsl_atomic_size(x->type))); -} - -static int -cmp_active_counter_offsets(const void *a, const void *b) -{ - const struct active_atomic_counter_uniform *const first = - (struct active_atomic_counter_uniform *) a; - const struct active_atomic_counter_uniform *const second = - (struct active_atomic_counter_uniform *) b; - - return first->var->data.offset - second->var->data.offset; -} - -void -gl_nir_link_assign_atomic_counter_resources(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - unsigned num_buffers; - unsigned num_atomic_buffers[MESA_SHADER_STAGES] = {0}; - struct active_atomic_buffer *abs = - find_active_atomic_counters(consts, prog, &num_buffers); - - prog->data->AtomicBuffers = - rzalloc_array(prog->data, struct gl_active_atomic_buffer, num_buffers); - prog->data->NumAtomicBuffers = num_buffers; - - unsigned buffer_idx = 0; - for (unsigned binding = 0; - binding < consts->MaxAtomicBufferBindings; - binding++) { - - /* If the binding was not used, skip. - */ - if (abs[binding].size == 0) - continue; - - struct active_atomic_buffer *ab = abs + binding; - struct gl_active_atomic_buffer *mab = - prog->data->AtomicBuffers + buffer_idx; - - /* Assign buffer-specific fields. */ - mab->Binding = binding; - mab->MinimumSize = ab->size; - mab->Uniforms = rzalloc_array(prog->data->AtomicBuffers, GLuint, - ab->num_uniforms); - mab->NumUniforms = ab->num_uniforms; - - /* Assign counter-specific fields. */ - for (unsigned j = 0; j < ab->num_uniforms; j++) { - nir_variable *var = ab->uniforms[j].var; - struct gl_uniform_storage *storage = - &prog->data->UniformStorage[ab->uniforms[j].loc]; - - mab->Uniforms[j] = ab->uniforms[j].loc; - - storage->atomic_buffer_index = buffer_idx; - storage->offset = var->data.offset; - if (glsl_type_is_array(var->type)) { - const struct glsl_type *without_array = - glsl_without_array(var->type); - storage->array_stride = glsl_atomic_size(without_array); - } else { - storage->array_stride = 0; - } - if (!glsl_type_is_matrix(var->type)) - storage->matrix_stride = 0; - } - - /* Assign stage-specific fields. */ - for (unsigned stage = 0; stage < MESA_SHADER_STAGES; ++stage) { - if (ab->stage_counter_references[stage]) { - mab->StageReferences[stage] = GL_TRUE; - num_atomic_buffers[stage]++; - } else { - mab->StageReferences[stage] = GL_FALSE; - } - } - - buffer_idx++; - } - - /* Store a list pointers to atomic buffers per stage and store the index - * to the intra-stage buffer list in uniform storage. - */ - for (unsigned stage = 0; stage < MESA_SHADER_STAGES; ++stage) { - if (prog->_LinkedShaders[stage] == NULL || - num_atomic_buffers[stage] <= 0) - continue; - - struct gl_program *gl_prog = prog->_LinkedShaders[stage]->Program; - gl_prog->info.num_abos = num_atomic_buffers[stage]; - gl_prog->sh.AtomicBuffers = - rzalloc_array(gl_prog, - struct gl_active_atomic_buffer *, - num_atomic_buffers[stage]); - - gl_prog->nir->info.num_abos = num_atomic_buffers[stage]; - - unsigned intra_stage_idx = 0; - for (unsigned i = 0; i < num_buffers; i++) { - struct gl_active_atomic_buffer *atomic_buffer = - &prog->data->AtomicBuffers[i]; - if (!atomic_buffer->StageReferences[stage]) - continue; - - gl_prog->sh.AtomicBuffers[intra_stage_idx] = atomic_buffer; - - for (unsigned u = 0; u < atomic_buffer->NumUniforms; u++) { - GLuint uniform_loc = atomic_buffer->Uniforms[u]; - struct gl_opaque_uniform_index *opaque = - prog->data->UniformStorage[uniform_loc].opaque + stage; - opaque->index = intra_stage_idx; - opaque->active = true; - } - - intra_stage_idx++; - } - } - - assert(buffer_idx == num_buffers); - - ralloc_free(abs); -} - -void -gl_nir_link_check_atomic_counter_resources(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - unsigned num_buffers; - struct active_atomic_buffer *abs = - find_active_atomic_counters(consts, prog, &num_buffers); - unsigned atomic_counters[MESA_SHADER_STAGES] = {0}; - unsigned atomic_buffers[MESA_SHADER_STAGES] = {0}; - unsigned total_atomic_counters = 0; - unsigned total_atomic_buffers = 0; - - /* Sum the required resources. Note that this counts buffers and - * counters referenced by several shader stages multiple times - * against the combined limit -- That's the behavior the spec - * requires. - */ - for (unsigned i = 0; i < consts->MaxAtomicBufferBindings; i++) { - if (abs[i].size == 0) - continue; - - qsort(abs[i].uniforms, abs[i].num_uniforms, - sizeof(struct active_atomic_counter_uniform), - cmp_active_counter_offsets); - - for (unsigned j = 1; j < abs[i].num_uniforms; j++) { - /* If an overlapping counter found, it must be a reference to the - * same counter from a different shader stage. - */ - if (check_atomic_counters_overlap(abs[i].uniforms[j-1].var, - abs[i].uniforms[j].var) - && strcmp(abs[i].uniforms[j-1].var->name, - abs[i].uniforms[j].var->name) != 0) { - linker_error(prog, "Atomic counter %s declared at offset %d " - "which is already in use.", - abs[i].uniforms[j].var->name, - abs[i].uniforms[j].var->data.offset); - } - } - - for (unsigned j = 0; j < MESA_SHADER_STAGES; ++j) { - const unsigned n = abs[i].stage_counter_references[j]; - - if (n) { - atomic_counters[j] += n; - total_atomic_counters += n; - atomic_buffers[j]++; - total_atomic_buffers++; - } - } - } - - /* Check that they are within the supported limits. */ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (atomic_counters[i] > consts->Program[i].MaxAtomicCounters) - linker_error(prog, "Too many %s shader atomic counters", - _mesa_shader_stage_to_string(i)); - - if (atomic_buffers[i] > consts->Program[i].MaxAtomicBuffers) - linker_error(prog, "Too many %s shader atomic counter buffers", - _mesa_shader_stage_to_string(i)); - } - - if (total_atomic_counters > consts->MaxCombinedAtomicCounters) - linker_error(prog, "Too many combined atomic counters"); - - if (total_atomic_buffers > consts->MaxCombinedAtomicBuffers) - linker_error(prog, "Too many combined atomic buffers"); - - ralloc_free(abs); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_blocks.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_blocks.c deleted file mode 100644 index 2bc66a2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_blocks.c +++ /dev/null @@ -1,649 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "gl_nir_linker.h" -#include "ir_uniform.h" /* for gl_uniform_storage */ -#include "linker_util.h" -#include "../../mesa/main/shader_types.h" - -/** - * This file contains code to do a nir-based linking for uniform blocks. This - * includes ubos and ssbos. - * - * For the case of ARB_gl_spirv there are some differences compared with GLSL: - * - * 1. Linking doesn't use names: GLSL linking use names as core concept. But - * on SPIR-V, uniform block name, fields names, and other names are - * considered optional debug infor so could not be present. So the linking - * should work without it, and it is optional to not handle them at - * all. From ARB_gl_spirv spec. - * - * "19. How should the program interface query operations behave for program - * objects created from SPIR-V shaders? - * - * DISCUSSION: we previously said we didn't need reflection to work for - * SPIR-V shaders (at least for the first version), however we are left - * with specifying how it should "not work". The primary issue is that - * SPIR-V binaries are not required to have names associated with - * variables. They can be associated in debug information, but there is no - * requirement for that to be present, and it should not be relied upon. - * - * Options: - * - * - * - * C) Allow as much as possible to work "naturally". You can query for the - * number of active resources, and for details about them. Anything that - * doesn't query by name will work as expected. Queries for maximum length - * of names return one. Queries for anything "by name" return INVALID_INDEX - * (or -1). Querying the name property of a resource returns an empty - * string. This may allow many queries to work, but it's not clear how - * useful it would be if you can't actually know which specific variable - * you are retrieving information on. If everything is specified a-priori - * by location/binding/offset/index/component in the shader, this may be - * sufficient. - * - * RESOLVED. Pick (c), but also allow debug names to be returned if an - * implementation wants to." - * - * When linking SPIR-V shaders this implemention doesn't care for the names, - * as the main objective is functional, and not support optional debug - * features. - * - * 2. Terminology: this file handles both UBO and SSBO, including both as - * "uniform blocks" analogously to what is done in the GLSL (IR) path. - * - * From ARB_gl_spirv spec: - * "Mapping of Storage Classes: - * - * uniform blockN { ... } ...; -> Uniform, with Block decoration - * - * buffer blockN { ... } ...; -> Uniform, with BufferBlock decoration" - * - * 3. Explicit data: for the SPIR-V path the code assumes that all structure - * members have an Offset decoration, all arrays have an ArrayStride and - * all matrices have a MatrixStride, even for nested structures. That way - * we don’t have to worry about the different layout modes. This is - * explicitly required in the SPIR-V spec: - * - * "Composite objects in the UniformConstant, Uniform, and PushConstant - * Storage Classes must be explicitly laid out. The following apply to all - * the aggregate and matrix types describing such an object, recursively - * through their nested types: - * - * – Each structure-type member must have an Offset Decoration. - * – Each array type must have an ArrayStride Decoration. - * – Each structure-type member that is a matrix or array-of-matrices must - * have be decorated with a MatrixStride Decoration, and one of the - * RowMajor or ColMajor Decorations." - * - * Additionally, the structure members are expected to be presented in - * increasing offset order: - * - * "a structure has lower-numbered members appearing at smaller offsets than - * higher-numbered members" - */ - -enum block_type { - BLOCK_UBO, - BLOCK_SSBO -}; - -/* - * It is worth to note that ARB_gl_spirv spec doesn't require us to do this - * validation, but at the same time, it allow us to do it. The following - * validation is easy and a nice-to-have. -*/ -static bool -link_blocks_are_compatible(const struct gl_uniform_block *a, - const struct gl_uniform_block *b) -{ - /* - * Names on ARB_gl_spirv are optional, so we are ignoring them. So - * meanwhile on the equivalent GLSL method the matching is done using the - * name, here we use the binding, that for SPIR-V binaries is explicit, and - * mandatory, from OpenGL 4.6 spec, section "7.4.2. SPIR-V Shader Interface - * Matching": - * "Uniform and shader storage block variables must also be decorated - * with a Binding" - */ - if (a->Binding != b->Binding) - return false; - - /* We are explicitly ignoring the names, so it would be good to check that - * this is happening. - */ - assert(a->name.string == NULL); - assert(b->name.string == NULL); - - if (a->NumUniforms != b->NumUniforms) - return false; - - if (a->_Packing != b->_Packing) - return false; - - if (a->_RowMajor != b->_RowMajor) - return false; - - for (unsigned i = 0; i < a->NumUniforms; i++) { - if (a->Uniforms[i].Type != b->Uniforms[i].Type) - return false; - - if (a->Uniforms[i].RowMajor != b->Uniforms[i].RowMajor) - return false; - - if (a->Uniforms[i].Offset != b->Uniforms[i].Offset) - return false; - - /* See comment on previous assert */ - assert(a->Uniforms[i].Name == NULL); - assert(b->Uniforms[i].Name == NULL); - } - - return true; -} - -/** - * Merges a buffer block into an array of buffer blocks that may or may not - * already contain a copy of it. - * - * Returns the index of the block in the array (new if it was needed, or the - * index of the copy of it). -1 if there are two incompatible block - * definitions with the same binding. - * - */ -static int -link_cross_validate_uniform_block(void *mem_ctx, - struct gl_uniform_block **linked_blocks, - unsigned int *num_linked_blocks, - struct gl_uniform_block *new_block) -{ - /* We first check if new_block was already linked */ - for (unsigned int i = 0; i < *num_linked_blocks; i++) { - struct gl_uniform_block *old_block = &(*linked_blocks)[i]; - - if (old_block->Binding == new_block->Binding) - return link_blocks_are_compatible(old_block, new_block) ? i : -1; - } - - *linked_blocks = reralloc(mem_ctx, *linked_blocks, - struct gl_uniform_block, - *num_linked_blocks + 1); - int linked_block_index = (*num_linked_blocks)++; - struct gl_uniform_block *linked_block = &(*linked_blocks)[linked_block_index]; - - memcpy(linked_block, new_block, sizeof(*new_block)); - linked_block->Uniforms = ralloc_array(*linked_blocks, - struct gl_uniform_buffer_variable, - linked_block->NumUniforms); - - memcpy(linked_block->Uniforms, - new_block->Uniforms, - sizeof(*linked_block->Uniforms) * linked_block->NumUniforms); - - return linked_block_index; -} - - -/** - * Accumulates the array of buffer blocks and checks that all definitions of - * blocks agree on their contents. - */ -static bool -nir_interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog, - enum block_type block_type) -{ - int *interfaceBlockStageIndex[MESA_SHADER_STAGES]; - struct gl_uniform_block *blks = NULL; - unsigned *num_blks = block_type == BLOCK_SSBO ? &prog->data->NumShaderStorageBlocks : - &prog->data->NumUniformBlocks; - - unsigned max_num_buffer_blocks = 0; - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i]) { - if (block_type == BLOCK_SSBO) { - max_num_buffer_blocks += - prog->_LinkedShaders[i]->Program->info.num_ssbos; - } else { - max_num_buffer_blocks += - prog->_LinkedShaders[i]->Program->info.num_ubos; - } - } - } - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - - interfaceBlockStageIndex[i] = malloc(max_num_buffer_blocks * sizeof(int)); - for (unsigned int j = 0; j < max_num_buffer_blocks; j++) - interfaceBlockStageIndex[i][j] = -1; - - if (sh == NULL) - continue; - - unsigned sh_num_blocks; - struct gl_uniform_block **sh_blks; - if (block_type == BLOCK_SSBO) { - sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ssbos; - sh_blks = sh->Program->sh.ShaderStorageBlocks; - } else { - sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ubos; - sh_blks = sh->Program->sh.UniformBlocks; - } - - for (unsigned int j = 0; j < sh_num_blocks; j++) { - int index = link_cross_validate_uniform_block(prog->data, &blks, - num_blks, sh_blks[j]); - - if (index == -1) { - /* We use the binding as we are ignoring the names */ - linker_error(prog, "buffer block with binding `%i' has mismatching " - "definitions\n", sh_blks[j]->Binding); - - for (unsigned k = 0; k <= i; k++) { - free(interfaceBlockStageIndex[k]); - } - - /* Reset the block count. This will help avoid various segfaults - * from api calls that assume the array exists due to the count - * being non-zero. - */ - *num_blks = 0; - return false; - } - - interfaceBlockStageIndex[i][index] = j; - } - } - - /* Update per stage block pointers to point to the program list. - */ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - for (unsigned j = 0; j < *num_blks; j++) { - int stage_index = interfaceBlockStageIndex[i][j]; - - if (stage_index != -1) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - - struct gl_uniform_block **sh_blks = block_type == BLOCK_SSBO ? - sh->Program->sh.ShaderStorageBlocks : - sh->Program->sh.UniformBlocks; - - blks[j].stageref |= sh_blks[stage_index]->stageref; - sh_blks[stage_index] = &blks[j]; - } - } - } - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - free(interfaceBlockStageIndex[i]); - } - - if (block_type == BLOCK_SSBO) - prog->data->ShaderStorageBlocks = blks; - else { - prog->data->NumUniformBlocks = *num_blks; - prog->data->UniformBlocks = blks; - } - - return true; -} - -/* - * Iterates @type in order to compute how many individual leaf variables - * contains. - */ -static void -iterate_type_count_variables(const struct glsl_type *type, - unsigned int *num_variables) -{ - for (unsigned i = 0; i < glsl_get_length(type); i++) { - const struct glsl_type *field_type; - - if (glsl_type_is_struct_or_ifc(type)) - field_type = glsl_get_struct_field(type, i); - else - field_type = glsl_get_array_element(type); - - if (glsl_type_is_leaf(field_type) || glsl_type_is_unsized_array(field_type)) - (*num_variables)++; - else - iterate_type_count_variables(field_type, num_variables); - } -} - - -static void -fill_individual_variable(const struct glsl_type *type, - struct gl_uniform_buffer_variable *variables, - unsigned int *variable_index, - unsigned int *offset, - struct gl_shader_program *prog, - struct gl_uniform_block *block) -{ - /* ARB_gl_spirv: allowed to ignore names. Thus, we don't need to initialize - * the variable's Name or IndexName. - */ - variables[*variable_index].Type = type; - - if (glsl_type_is_matrix(type)) { - variables[*variable_index].RowMajor = glsl_matrix_type_is_row_major(type); - } else { - /* default value, better that potential meaningless garbage */ - variables[*variable_index].RowMajor = false; - } - - /** - * Although ARB_gl_spirv points that the offsets need to be included (see - * "Mappings of layouts"), in the end those are only valid for - * root-variables, and we would need to recompute offsets when we iterate - * over non-trivial types, like aoa. So we compute the offset always. - */ - variables[*variable_index].Offset = *offset; - (*offset) += glsl_get_explicit_size(type, true); - - (*variable_index)++; -} - -static void -iterate_type_fill_variables(const struct glsl_type *type, - struct gl_uniform_buffer_variable *variables, - unsigned int *variable_index, - unsigned int *offset, - struct gl_shader_program *prog, - struct gl_uniform_block *block) -{ - unsigned struct_base_offset; - - bool struct_or_ifc = glsl_type_is_struct_or_ifc(type); - if (struct_or_ifc) - struct_base_offset = *offset; - - for (unsigned i = 0; i < glsl_get_length(type); i++) { - const struct glsl_type *field_type; - - if (struct_or_ifc) { - field_type = glsl_get_struct_field(type, i); - - *offset = struct_base_offset + glsl_get_struct_field_offset(type, i); - } else { - field_type = glsl_get_array_element(type); - } - - if (glsl_type_is_leaf(field_type) || glsl_type_is_unsized_array(field_type)) { - fill_individual_variable(field_type, variables, variable_index, - offset, prog, block); - } else { - iterate_type_fill_variables(field_type, variables, variable_index, - offset, prog, block); - } - } -} - -/* - * In opposite to the equivalent glsl one, this one only allocates the needed - * space. We do a initial count here, just to avoid re-allocating for each one - * we find. - */ -static void -allocate_uniform_blocks(void *mem_ctx, - struct gl_linked_shader *shader, - struct gl_uniform_block **out_blks, unsigned *num_blocks, - struct gl_uniform_buffer_variable **out_variables, - unsigned *num_variables, - enum block_type block_type) -{ - *num_variables = 0; - *num_blocks = 0; - - nir_foreach_variable_in_shader(var, shader->Program->nir) { - if (block_type == BLOCK_UBO && !nir_variable_is_in_ubo(var)) - continue; - - if (block_type == BLOCK_SSBO && !nir_variable_is_in_ssbo(var)) - continue; - - const struct glsl_type *type = glsl_without_array(var->type); - unsigned aoa_size = glsl_get_aoa_size(var->type); - unsigned buffer_count = aoa_size == 0 ? 1 : aoa_size; - - *num_blocks += buffer_count; - - unsigned int block_variables = 0; - iterate_type_count_variables(type, &block_variables); - - *num_variables += block_variables * buffer_count; - } - - if (*num_blocks == 0) { - assert(*num_variables == 0); - return; - } - - assert(*num_variables != 0); - - struct gl_uniform_block *blocks = - rzalloc_array(mem_ctx, struct gl_uniform_block, *num_blocks); - - struct gl_uniform_buffer_variable *variables = - rzalloc_array(blocks, struct gl_uniform_buffer_variable, *num_variables); - - *out_blks = blocks; - *out_variables = variables; -} - -static void -fill_block(struct gl_uniform_block *block, - nir_variable *var, - struct gl_uniform_buffer_variable *variables, - unsigned *variable_index, - unsigned array_index, - struct gl_shader_program *prog, - const gl_shader_stage stage) -{ - const struct glsl_type *type = glsl_without_array(var->type); - - block->name.string = NULL; /* ARB_gl_spirv: allowed to ignore names */ - resource_name_updated(&block->name); - /* From ARB_gl_spirv spec: - * "Vulkan uses only one binding point for a resource array, - * while OpenGL still uses multiple binding points, so binding - * numbers are counted differently for SPIR-V used in Vulkan - * and OpenGL - */ - block->Binding = var->data.binding + array_index; - block->Uniforms = &variables[*variable_index]; - block->stageref = 1U << stage; - - /* From SPIR-V 1.0 spec, 3.20, Decoration: - * "RowMajor - * Applies only to a member of a structure type. - * Only valid on a matrix or array whose most basic - * element is a matrix. Indicates that components - * within a row are contiguous in memory." - * - * So the SPIR-V binary doesn't report if the block was defined as RowMajor - * or not. In any case, for the components it is mandatory to set it, so it - * is not needed a default RowMajor value to know it. - * - * Setting to the default, but it should be ignored. - */ - block->_RowMajor = false; - - /* From ARB_gl_spirv spec: - * "Mapping of layouts - * - * std140/std430 -> explicit *Offset*, *ArrayStride*, and - * *MatrixStride* Decoration on struct members - * shared/packed -> not allowed" - * - * So we would not have a value for _Packing, and in fact it would be - * useless so far. Using a default value. It should be ignored. - */ - block->_Packing = 0; - block->linearized_array_index = array_index; - - unsigned old_variable_index = *variable_index; - unsigned offset = 0; - iterate_type_fill_variables(type, variables, variable_index, &offset, prog, block); - block->NumUniforms = *variable_index - old_variable_index; - - block->UniformBufferSize = glsl_get_explicit_size(type, false); - - /* From OpenGL 4.6 spec, section 7.6.2.3, "SPIR-V Uniform Offsets and - * strides" - * - * "If the variable is decorated as a BufferBlock , its offsets and - * strides must not contradict std430 alignment and minimum offset - * requirements. Otherwise, its offsets and strides must not contradict - * std140 alignment and minimum offset requirements." - * - * So although we are computing the size based on the offsets and - * array/matrix strides, at the end we need to ensure that the alignment is - * the same that with std140. From ARB_uniform_buffer_object spec: - * - * "For uniform blocks laid out according to [std140] rules, the minimum - * buffer object size returned by the UNIFORM_BLOCK_DATA_SIZE query is - * derived by taking the offset of the last basic machine unit consumed - * by the last uniform of the uniform block (including any end-of-array - * or end-of-structure padding), adding one, and rounding up to the next - * multiple of the base alignment required for a vec4." - */ - block->UniformBufferSize = glsl_align(block->UniformBufferSize, 16); -} - -/* - * Link ubos/ssbos for a given linked_shader/stage. - */ -static void -link_linked_shader_uniform_blocks(void *mem_ctx, - struct gl_shader_program *prog, - struct gl_linked_shader *shader, - struct gl_uniform_block **blocks, - unsigned *num_blocks, - enum block_type block_type) -{ - struct gl_uniform_buffer_variable *variables = NULL; - unsigned num_variables = 0; - - allocate_uniform_blocks(mem_ctx, shader, - blocks, num_blocks, - &variables, &num_variables, - block_type); - - /* Fill the content of uniforms and variables */ - unsigned block_index = 0; - unsigned variable_index = 0; - struct gl_uniform_block *blks = *blocks; - - nir_foreach_variable_in_shader(var, shader->Program->nir) { - if (block_type == BLOCK_UBO && !nir_variable_is_in_ubo(var)) - continue; - - if (block_type == BLOCK_SSBO && !nir_variable_is_in_ssbo(var)) - continue; - - unsigned aoa_size = glsl_get_aoa_size(var->type); - unsigned buffer_count = aoa_size == 0 ? 1 : aoa_size; - - for (unsigned array_index = 0; array_index < buffer_count; array_index++) { - fill_block(&blks[block_index], var, variables, &variable_index, - array_index, prog, shader->Stage); - block_index++; - } - } - - assert(block_index == *num_blocks); - assert(variable_index == num_variables); -} - -bool -gl_nir_link_uniform_blocks(struct gl_shader_program *prog) -{ - void *mem_ctx = ralloc_context(NULL); - bool ret = false; - for (int stage = 0; stage < MESA_SHADER_STAGES; stage++) { - struct gl_linked_shader *const linked = prog->_LinkedShaders[stage]; - struct gl_uniform_block *ubo_blocks = NULL; - unsigned num_ubo_blocks = 0; - struct gl_uniform_block *ssbo_blocks = NULL; - unsigned num_ssbo_blocks = 0; - - if (!linked) - continue; - - link_linked_shader_uniform_blocks(mem_ctx, prog, linked, - &ubo_blocks, &num_ubo_blocks, - BLOCK_UBO); - - link_linked_shader_uniform_blocks(mem_ctx, prog, linked, - &ssbo_blocks, &num_ssbo_blocks, - BLOCK_SSBO); - - if (!prog->data->LinkStatus) { - goto out; - } - - prog->data->linked_stages |= 1 << stage; - - /* Copy ubo blocks to linked shader list */ - linked->Program->sh.UniformBlocks = - ralloc_array(linked, struct gl_uniform_block *, num_ubo_blocks); - ralloc_steal(linked, ubo_blocks); - linked->Program->sh.NumUniformBlocks = num_ubo_blocks; - for (unsigned i = 0; i < num_ubo_blocks; i++) { - linked->Program->sh.UniformBlocks[i] = &ubo_blocks[i]; - } - - /* We need to set it twice to avoid the value being overwritten by the - * one from nir in brw_shader_gather_info. TODO: get a way to set the - * info once, and being able to gather properly the info. - */ - linked->Program->nir->info.num_ubos = num_ubo_blocks; - linked->Program->info.num_ubos = num_ubo_blocks; - - /* Copy ssbo blocks to linked shader list */ - linked->Program->sh.ShaderStorageBlocks = - ralloc_array(linked, struct gl_uniform_block *, num_ssbo_blocks); - ralloc_steal(linked, ssbo_blocks); - for (unsigned i = 0; i < num_ssbo_blocks; i++) { - linked->Program->sh.ShaderStorageBlocks[i] = &ssbo_blocks[i]; - } - - /* See previous comment on num_ubo_blocks */ - linked->Program->nir->info.num_ssbos = num_ssbo_blocks; - linked->Program->info.num_ssbos = num_ssbo_blocks; - } - - if (!nir_interstage_cross_validate_uniform_blocks(prog, BLOCK_UBO)) - goto out; - - if (!nir_interstage_cross_validate_uniform_blocks(prog, BLOCK_SSBO)) - goto out; - - ret = true; -out: - ralloc_free(mem_ctx); - return ret; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_initializers.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_initializers.c deleted file mode 100644 index d664703..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniform_initializers.c +++ /dev/null @@ -1,308 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "gl_nir_linker.h" -#include "ir_uniform.h" /* for gl_uniform_storage */ -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/consts_exts.h" - -struct set_opaque_binding_closure { - struct gl_shader_program *shader_prog; - struct gl_program *prog; - const nir_variable *var; - int binding; - int location; -}; - -static void -set_opaque_binding(struct set_opaque_binding_closure *data, - const struct glsl_type *type) -{ - if (glsl_type_is_array(type) && - glsl_type_is_array(glsl_get_array_element(type))) { - const struct glsl_type *element_type = glsl_get_array_element(type); - - for (unsigned int i = 0; i < glsl_get_length(type); i++) - set_opaque_binding(data, element_type); - - return; - } - - if (data->location < 0 || - data->location >= data->prog->sh.data->NumUniformStorage) - return; - - struct gl_uniform_storage *storage = - data->prog->sh.data->UniformStorage + data->location++; - - const unsigned elements = MAX2(storage->array_elements, 1); - - for (unsigned int i = 0; i < elements; i++) - storage->storage[i].i = data->binding++; - - for (int sh = 0; sh < MESA_SHADER_STAGES; sh++) { - struct gl_linked_shader *shader = data->shader_prog->_LinkedShaders[sh]; - - if (!shader) - continue; - if (!storage->opaque[sh].active) - continue; - - if (glsl_type_is_sampler(storage->type)) { - for (unsigned i = 0; i < elements; i++) { - const unsigned index = storage->opaque[sh].index + i; - - if (storage->is_bindless) { - if (index >= shader->Program->sh.NumBindlessSamplers) - break; - shader->Program->sh.BindlessSamplers[index].unit = - storage->storage[i].i; - shader->Program->sh.BindlessSamplers[index].bound = true; - shader->Program->sh.HasBoundBindlessSampler = true; - } else { - if (index >= ARRAY_SIZE(shader->Program->SamplerUnits)) - break; - shader->Program->SamplerUnits[index] = - storage->storage[i].i; - } - } - } else if (glsl_type_is_image(storage->type)) { - for (unsigned i = 0; i < elements; i++) { - const unsigned index = storage->opaque[sh].index + i; - - if (storage->is_bindless) { - if (index >= shader->Program->sh.NumBindlessImages) - break; - shader->Program->sh.BindlessImages[index].unit = - storage->storage[i].i; - shader->Program->sh.BindlessImages[index].bound = true; - shader->Program->sh.HasBoundBindlessImage = true; - } else { - if (index >= ARRAY_SIZE(shader->Program->sh.ImageUnits)) - break; - shader->Program->sh.ImageUnits[index] = - storage->storage[i].i; - } - } - } - } -} - -static void -copy_constant_to_storage(union gl_constant_value *storage, - const nir_constant *val, - const struct glsl_type *type, - unsigned int boolean_true) -{ - const enum glsl_base_type base_type = glsl_get_base_type(type); - const unsigned n_columns = glsl_get_matrix_columns(type); - const unsigned n_rows = glsl_get_vector_elements(type); - unsigned dmul = glsl_base_type_is_64bit(base_type) ? 2 : 1; - int i = 0; - - if (n_columns > 1) { - const struct glsl_type *column_type = glsl_get_column_type(type); - for (unsigned int column = 0; column < n_columns; column++) { - copy_constant_to_storage(&storage[i], val->elements[column], - column_type, boolean_true); - i += n_rows * dmul; - } - } else { - for (unsigned int row = 0; row < n_rows; row++) { - switch (base_type) { - case GLSL_TYPE_UINT: - storage[i].u = val->values[row].u32; - break; - case GLSL_TYPE_INT: - case GLSL_TYPE_SAMPLER: - storage[i].i = val->values[row].i32; - break; - case GLSL_TYPE_FLOAT: - storage[i].f = val->values[row].f32; - break; - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - /* XXX need to check on big-endian */ - memcpy(&storage[i].u, &val->values[row].f64, sizeof(double)); - break; - case GLSL_TYPE_BOOL: - storage[i].b = val->values[row].u32 ? boolean_true : 0; - break; - case GLSL_TYPE_ARRAY: - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_VOID: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_ERROR: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_FLOAT16: - /* All other types should have already been filtered by other - * paths in the caller. - */ - assert(!"Should not get here."); - break; - } - i += dmul; - } - } -} - -struct set_uniform_initializer_closure { - struct gl_shader_program *shader_prog; - struct gl_program *prog; - const nir_variable *var; - int location; - unsigned int boolean_true; -}; - -static void -set_uniform_initializer(struct set_uniform_initializer_closure *data, - const struct glsl_type *type, - const nir_constant *val) -{ - const struct glsl_type *t_without_array = glsl_without_array(type); - - if (glsl_type_is_struct_or_ifc(type)) { - for (unsigned int i = 0; i < glsl_get_length(type); i++) { - const struct glsl_type *field_type = glsl_get_struct_field(type, i); - set_uniform_initializer(data, field_type, val->elements[i]); - } - return; - } - - if (glsl_type_is_struct_or_ifc(t_without_array) || - (glsl_type_is_array(type) && - glsl_type_is_array(glsl_get_array_element(type)))) { - const struct glsl_type *element_type = glsl_get_array_element(type); - - for (unsigned int i = 0; i < glsl_get_length(type); i++) - set_uniform_initializer(data, element_type, val->elements[i]); - - return; - } - - if (data->location < 0 || - data->location >= data->prog->sh.data->NumUniformStorage) - return; - - struct gl_uniform_storage *storage = - data->prog->sh.data->UniformStorage + data->location++; - - if (glsl_type_is_array(type)) { - const struct glsl_type *element_type = glsl_get_array_element(type); - const enum glsl_base_type base_type = glsl_get_base_type(element_type); - const unsigned int elements = glsl_get_components(element_type); - unsigned int idx = 0; - unsigned dmul = glsl_base_type_is_64bit(base_type) ? 2 : 1; - - assert(glsl_get_length(type) >= storage->array_elements); - for (unsigned int i = 0; i < storage->array_elements; i++) { - copy_constant_to_storage(&storage->storage[idx], - val->elements[i], - element_type, - data->boolean_true); - - idx += elements * dmul; - } - } else { - copy_constant_to_storage(storage->storage, - val, - type, - data->boolean_true); - - if (glsl_type_is_sampler(storage->type)) { - for (int sh = 0; sh < MESA_SHADER_STAGES; sh++) { - struct gl_linked_shader *shader = - data->shader_prog->_LinkedShaders[sh]; - - if (shader && storage->opaque[sh].active) { - unsigned index = storage->opaque[sh].index; - - shader->Program->SamplerUnits[index] = storage->storage[0].i; - } - } - } - } -} - -void -gl_nir_set_uniform_initializers(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - if (!sh) - continue; - - nir_shader *nir = sh->Program->nir; - assert(nir); - - nir_foreach_gl_uniform_variable(var, nir) { - if (var->constant_initializer) { - struct set_uniform_initializer_closure data = { - .shader_prog = prog, - .prog = sh->Program, - .var = var, - .location = var->data.location, - .boolean_true = consts->UniformBooleanTrue - }; - set_uniform_initializer(&data, - var->type, - var->constant_initializer); - } else if (var->data.explicit_binding) { - - if (nir_variable_is_in_block(var)) { - /* This case is handled by link_uniform_blocks */ - continue; - } - - const struct glsl_type *without_array = - glsl_without_array(var->type); - - if (glsl_type_is_sampler(without_array) || - glsl_type_is_image(without_array)) { - struct set_opaque_binding_closure data = { - .shader_prog = prog, - .prog = sh->Program, - .var = var, - .binding = var->data.binding, - .location = var->data.location - }; - set_opaque_binding(&data, var->type); - } - } - } - } - memcpy(prog->data->UniformDataDefaults, prog->data->UniformDataSlots, - sizeof(union gl_constant_value) * prog->data->NumUniformDataSlots); - -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniforms.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniforms.c deleted file mode 100644 index 71f9653..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_uniforms.c +++ /dev/null @@ -1,1932 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "../nir_gl_types.h" -#include "../nir/nir_deref.h" -#include "gl_nir_linker.h" -#include "ir_uniform.h" /* for gl_uniform_storage */ -#include "linker_util.h" -#include "../../util/u_dynarray.h" -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/shader_types.h" - -/** - * This file do the common link for GLSL uniforms, using NIR, instead of IR as - * the counter-part glsl/link_uniforms.cpp - */ - -#define UNMAPPED_UNIFORM_LOC ~0u - -struct uniform_array_info { - /** List of dereferences of the uniform array. */ - struct util_dynarray *deref_list; - - /** Set of bit-flags to note which array elements have been accessed. */ - BITSET_WORD *indices; -}; - -/** - * Built-in / reserved GL variables names start with "gl_" - */ -static inline bool -is_gl_identifier(const char *s) -{ - return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_'; -} - -static unsigned -uniform_storage_size(const struct glsl_type *type) -{ - switch (glsl_get_base_type(type)) { - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: { - unsigned size = 0; - for (unsigned i = 0; i < glsl_get_length(type); i++) - size += uniform_storage_size(glsl_get_struct_field(type, i)); - return size; - } - case GLSL_TYPE_ARRAY: { - const struct glsl_type *e_type = glsl_get_array_element(type); - enum glsl_base_type e_base_type = glsl_get_base_type(e_type); - if (e_base_type == GLSL_TYPE_STRUCT || - e_base_type == GLSL_TYPE_INTERFACE || - e_base_type == GLSL_TYPE_ARRAY) { - unsigned length = !glsl_type_is_unsized_array(type) ? - glsl_get_length(type) : 1; - return length * uniform_storage_size(e_type); - } else - return 1; - } - default: - return 1; - } -} - -/** - * Update the sizes of linked shader uniform arrays to the maximum - * array index used. - * - * From page 81 (page 95 of the PDF) of the OpenGL 2.1 spec: - * - * If one or more elements of an array are active, - * GetActiveUniform will return the name of the array in name, - * subject to the restrictions listed above. The type of the array - * is returned in type. The size parameter contains the highest - * array element index used, plus one. The compiler or linker - * determines the highest index used. There will be only one - * active uniform reported by the GL per uniform array. - */ -static void -update_array_sizes(struct gl_shader_program *prog, nir_variable *var, - struct hash_table **referenced_uniforms, - unsigned current_var_stage) -{ - /* For now we only resize 1D arrays. - * TODO: add support for resizing more complex array types ?? - */ - if (!glsl_type_is_array(var->type) || - glsl_type_is_array(glsl_get_array_element(var->type))) - return; - - /* GL_ARB_uniform_buffer_object says that std140 uniforms - * will not be eliminated. Since we always do std140, just - * don't resize arrays in UBOs. - * - * Atomic counters are supposed to get deterministic - * locations assigned based on the declaration ordering and - * sizes, array compaction would mess that up. - * - * Subroutine uniforms are not removed. - */ - if (nir_variable_is_in_block(var) || glsl_contains_atomic(var->type) || - glsl_get_base_type(glsl_without_array(var->type)) == GLSL_TYPE_SUBROUTINE || - var->constant_initializer) - return; - - struct uniform_array_info *ainfo = NULL; - int words = BITSET_WORDS(glsl_array_size(var->type)); - int max_array_size = 0; - for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - if (!sh) - continue; - - struct hash_entry *entry = - _mesa_hash_table_search(referenced_uniforms[stage], var->name); - if (entry) { - ainfo = (struct uniform_array_info *) entry->data; - max_array_size = MAX2(BITSET_LAST_BIT_SIZED(ainfo->indices, words), - max_array_size); - } - - if (max_array_size == glsl_array_size(var->type)) - return; - } - - if (max_array_size != glsl_array_size(var->type)) { - /* If this is a built-in uniform (i.e., it's backed by some - * fixed-function state), adjust the number of state slots to - * match the new array size. The number of slots per array entry - * is not known. It seems safe to assume that the total number of - * slots is an integer multiple of the number of array elements. - * Determine the number of slots per array element by dividing by - * the old (total) size. - */ - const unsigned num_slots = var->num_state_slots; - if (num_slots > 0) { - var->num_state_slots = - (max_array_size * (num_slots / glsl_array_size(var->type))); - } - - var->type = glsl_array_type(glsl_get_array_element(var->type), - max_array_size, 0); - - /* Update the types of dereferences in case we changed any. */ - struct hash_entry *entry = - _mesa_hash_table_search(referenced_uniforms[current_var_stage], var->name); - if (entry) { - struct uniform_array_info *ainfo = - (struct uniform_array_info *) entry->data; - util_dynarray_foreach(ainfo->deref_list, nir_deref_instr *, deref) { - (*deref)->type = var->type; - } - } - } -} - -static void -nir_setup_uniform_remap_tables(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - unsigned total_entries = prog->NumExplicitUniformLocations; - - /* For glsl this may have been allocated by reserve_explicit_locations() so - * that we can keep track of unused uniforms with explicit locations. - */ - assert(!prog->data->spirv || - (prog->data->spirv && !prog->UniformRemapTable)); - if (!prog->UniformRemapTable) { - prog->UniformRemapTable = rzalloc_array(prog, - struct gl_uniform_storage *, - prog->NumUniformRemapTable); - } - - union gl_constant_value *data = - rzalloc_array(prog->data, - union gl_constant_value, prog->data->NumUniformDataSlots); - if (!prog->UniformRemapTable || !data) { - linker_error(prog, "Out of memory during linking.\n"); - return; - } - prog->data->UniformDataSlots = data; - - prog->data->UniformDataDefaults = - rzalloc_array(prog->data->UniformDataSlots, - union gl_constant_value, prog->data->NumUniformDataSlots); - - unsigned data_pos = 0; - - /* Reserve all the explicit locations of the active uniforms. */ - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - - if (uniform->hidden) - continue; - - if (uniform->is_shader_storage || - glsl_get_base_type(uniform->type) == GLSL_TYPE_SUBROUTINE) - continue; - - if (prog->data->UniformStorage[i].remap_location == UNMAPPED_UNIFORM_LOC) - continue; - - /* How many new entries for this uniform? */ - const unsigned entries = MAX2(1, uniform->array_elements); - unsigned num_slots = glsl_get_component_slots(uniform->type); - - uniform->storage = &data[data_pos]; - - /* Set remap table entries point to correct gl_uniform_storage. */ - for (unsigned j = 0; j < entries; j++) { - unsigned element_loc = uniform->remap_location + j; - prog->UniformRemapTable[element_loc] = uniform; - - data_pos += num_slots; - } - } - - /* Reserve locations for rest of the uniforms. */ - if (prog->data->spirv) - link_util_update_empty_uniform_locations(prog); - - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - - if (uniform->hidden) - continue; - - if (uniform->is_shader_storage || - glsl_get_base_type(uniform->type) == GLSL_TYPE_SUBROUTINE) - continue; - - /* Built-in uniforms should not get any location. */ - if (uniform->builtin) - continue; - - /* Explicit ones have been set already. */ - if (uniform->remap_location != UNMAPPED_UNIFORM_LOC) - continue; - - /* How many entries for this uniform? */ - const unsigned entries = MAX2(1, uniform->array_elements); - - /* Add new entries to the total amount for checking against MAX_UNIFORM- - * _LOCATIONS. This only applies to the default uniform block (-1), - * because locations of uniform block entries are not assignable. - */ - if (prog->data->UniformStorage[i].block_index == -1) - total_entries += entries; - - unsigned location = - link_util_find_empty_block(prog, &prog->data->UniformStorage[i]); - - if (location == -1) { - location = prog->NumUniformRemapTable; - - /* resize remap table to fit new entries */ - prog->UniformRemapTable = - reralloc(prog, - prog->UniformRemapTable, - struct gl_uniform_storage *, - prog->NumUniformRemapTable + entries); - prog->NumUniformRemapTable += entries; - } - - /* set the base location in remap table for the uniform */ - uniform->remap_location = location; - - unsigned num_slots = glsl_get_component_slots(uniform->type); - - if (uniform->block_index == -1) - uniform->storage = &data[data_pos]; - - /* Set remap table entries point to correct gl_uniform_storage. */ - for (unsigned j = 0; j < entries; j++) { - unsigned element_loc = uniform->remap_location + j; - prog->UniformRemapTable[element_loc] = uniform; - - if (uniform->block_index == -1) - data_pos += num_slots; - } - } - - /* Verify that total amount of entries for explicit and implicit locations - * is less than MAX_UNIFORM_LOCATIONS. - */ - if (total_entries > consts->MaxUserAssignableUniformLocations) { - linker_error(prog, "count of uniform locations > MAX_UNIFORM_LOCATIONS" - "(%u > %u)", total_entries, - consts->MaxUserAssignableUniformLocations); - } - - /* Reserve all the explicit locations of the active subroutine uniforms. */ - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - - if (glsl_get_base_type(uniform->type) != GLSL_TYPE_SUBROUTINE) - continue; - - if (prog->data->UniformStorage[i].remap_location == UNMAPPED_UNIFORM_LOC) - continue; - - /* How many new entries for this uniform? */ - const unsigned entries = - MAX2(1, prog->data->UniformStorage[i].array_elements); - - uniform->storage = &data[data_pos]; - - unsigned num_slots = glsl_get_component_slots(uniform->type); - unsigned mask = prog->data->linked_stages; - while (mask) { - const int j = u_bit_scan(&mask); - struct gl_program *p = prog->_LinkedShaders[j]->Program; - - if (!prog->data->UniformStorage[i].opaque[j].active) - continue; - - /* Set remap table entries point to correct gl_uniform_storage. */ - for (unsigned k = 0; k < entries; k++) { - unsigned element_loc = - prog->data->UniformStorage[i].remap_location + k; - p->sh.SubroutineUniformRemapTable[element_loc] = - &prog->data->UniformStorage[i]; - - data_pos += num_slots; - } - } - } - - /* reserve subroutine locations */ - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - - if (glsl_get_base_type(uniform->type) != GLSL_TYPE_SUBROUTINE) - continue; - - if (prog->data->UniformStorage[i].remap_location != - UNMAPPED_UNIFORM_LOC) - continue; - - const unsigned entries = - MAX2(1, prog->data->UniformStorage[i].array_elements); - - uniform->storage = &data[data_pos]; - - unsigned num_slots = glsl_get_component_slots(uniform->type); - unsigned mask = prog->data->linked_stages; - while (mask) { - const int j = u_bit_scan(&mask); - struct gl_program *p = prog->_LinkedShaders[j]->Program; - - if (!prog->data->UniformStorage[i].opaque[j].active) - continue; - - p->sh.SubroutineUniformRemapTable = - reralloc(p, - p->sh.SubroutineUniformRemapTable, - struct gl_uniform_storage *, - p->sh.NumSubroutineUniformRemapTable + entries); - - for (unsigned k = 0; k < entries; k++) { - p->sh.SubroutineUniformRemapTable[p->sh.NumSubroutineUniformRemapTable + k] = - &prog->data->UniformStorage[i]; - - data_pos += num_slots; - } - prog->data->UniformStorage[i].remap_location = - p->sh.NumSubroutineUniformRemapTable; - p->sh.NumSubroutineUniformRemapTable += entries; - } - } - - /* assign storage to hidden uniforms */ - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - - if (!uniform->hidden || - glsl_get_base_type(uniform->type) == GLSL_TYPE_SUBROUTINE) - continue; - - const unsigned entries = - MAX2(1, prog->data->UniformStorage[i].array_elements); - - uniform->storage = &data[data_pos]; - - unsigned num_slots = glsl_get_component_slots(uniform->type); - for (unsigned k = 0; k < entries; k++) - data_pos += num_slots; - } -} - -static void -add_var_use_deref(nir_deref_instr *deref, struct hash_table *live, - struct array_deref_range **derefs, unsigned *derefs_size) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - deref = path.path[0]; - if (deref->deref_type != nir_deref_type_var || - !nir_deref_mode_is_one_of(deref, nir_var_uniform | - nir_var_mem_ubo | - nir_var_mem_ssbo | - nir_var_image)) { - nir_deref_path_finish(&path); - return; - } - - /* Number of derefs used in current processing. */ - unsigned num_derefs = 0; - - const struct glsl_type *deref_type = deref->var->type; - nir_deref_instr **p = &path.path[1]; - for (; *p; p++) { - if ((*p)->deref_type == nir_deref_type_array) { - - /* Skip matrix derefences */ - if (!glsl_type_is_array(deref_type)) - break; - - if ((num_derefs + 1) * sizeof(struct array_deref_range) > *derefs_size) { - void *ptr = reralloc_size(NULL, *derefs, *derefs_size + 4096); - - if (ptr == NULL) { - nir_deref_path_finish(&path); - return; - } - - *derefs_size += 4096; - *derefs = (struct array_deref_range *)ptr; - } - - struct array_deref_range *dr = &(*derefs)[num_derefs]; - num_derefs++; - - dr->size = glsl_get_length(deref_type); - - if (nir_src_is_const((*p)->arr.index)) { - dr->index = nir_src_as_uint((*p)->arr.index); - } else { - /* An unsized array can occur at the end of an SSBO. We can't track - * accesses to such an array, so bail. - */ - if (dr->size == 0) { - nir_deref_path_finish(&path); - return; - } - - dr->index = dr->size; - } - - deref_type = glsl_get_array_element(deref_type); - } else if ((*p)->deref_type == nir_deref_type_struct) { - /* We have reached the end of the array. */ - break; - } - } - - nir_deref_path_finish(&path); - - - struct uniform_array_info *ainfo = NULL; - - struct hash_entry *entry = - _mesa_hash_table_search(live, deref->var->name); - if (!entry && glsl_type_is_array(deref->var->type)) { - ainfo = ralloc(live, struct uniform_array_info); - - unsigned num_bits = MAX2(1, glsl_get_aoa_size(deref->var->type)); - ainfo->indices = rzalloc_array(live, BITSET_WORD, BITSET_WORDS(num_bits)); - - ainfo->deref_list = ralloc(live, struct util_dynarray); - util_dynarray_init(ainfo->deref_list, live); - } - - if (entry) - ainfo = (struct uniform_array_info *) entry->data; - - if (glsl_type_is_array(deref->var->type)) { - /* Count the "depth" of the arrays-of-arrays. */ - unsigned array_depth = 0; - for (const struct glsl_type *type = deref->var->type; - glsl_type_is_array(type); - type = glsl_get_array_element(type)) { - array_depth++; - } - - link_util_mark_array_elements_referenced(*derefs, num_derefs, array_depth, - ainfo->indices); - - util_dynarray_append(ainfo->deref_list, nir_deref_instr *, deref); - } - - assert(deref->modes == deref->var->data.mode); - _mesa_hash_table_insert(live, deref->var->name, ainfo); -} - -/* Iterate over the shader and collect infomation about uniform use */ -static void -add_var_use_shader(nir_shader *shader, struct hash_table *live) -{ - /* Currently allocated buffer block of derefs. */ - struct array_deref_range *derefs = NULL; - - /* Size of the derefs buffer in bytes. */ - unsigned derefs_size = 0; - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - switch (intr->intrinsic) { - case nir_intrinsic_atomic_counter_read_deref: - case nir_intrinsic_atomic_counter_inc_deref: - case nir_intrinsic_atomic_counter_pre_dec_deref: - case nir_intrinsic_atomic_counter_post_dec_deref: - case nir_intrinsic_atomic_counter_add_deref: - case nir_intrinsic_atomic_counter_min_deref: - case nir_intrinsic_atomic_counter_max_deref: - case nir_intrinsic_atomic_counter_and_deref: - case nir_intrinsic_atomic_counter_or_deref: - case nir_intrinsic_atomic_counter_xor_deref: - case nir_intrinsic_atomic_counter_exchange_deref: - case nir_intrinsic_atomic_counter_comp_swap_deref: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: - add_var_use_deref(nir_src_as_deref(intr->src[0]), live, - &derefs, &derefs_size); - break; - - default: - /* Nothing to do */ - break; - } - } else if (instr->type == nir_instr_type_tex) { - nir_tex_instr *tex_instr = nir_instr_as_tex(instr); - int sampler_idx = - nir_tex_instr_src_index(tex_instr, - nir_tex_src_sampler_deref); - int texture_idx = - nir_tex_instr_src_index(tex_instr, - nir_tex_src_texture_deref); - - if (sampler_idx >= 0) { - nir_deref_instr *deref = - nir_src_as_deref(tex_instr->src[sampler_idx].src); - add_var_use_deref(deref, live, &derefs, &derefs_size); - } - - if (texture_idx >= 0) { - nir_deref_instr *deref = - nir_src_as_deref(tex_instr->src[texture_idx].src); - add_var_use_deref(deref, live, &derefs, &derefs_size); - } - } - } - } - } - } - - ralloc_free(derefs); -} - -static void -mark_stage_as_active(struct gl_uniform_storage *uniform, - unsigned stage) -{ - uniform->active_shader_mask |= 1 << stage; -} - -/* Used to build a tree representing the glsl_type so that we can have a place - * to store the next index for opaque types. Array types are expanded so that - * they have a single child which is used for all elements of the array. - * Struct types have a child for each member. The tree is walked while - * processing a uniform so that we can recognise when an opaque type is - * encountered a second time in order to reuse the same range of indices that - * was reserved the first time. That way the sampler indices can be arranged - * so that members of an array are placed sequentially even if the array is an - * array of structs containing other opaque members. - */ -struct type_tree_entry { - /* For opaque types, this will be the next index to use. If we haven’t - * encountered this member yet, it will be UINT_MAX. - */ - unsigned next_index; - unsigned array_size; - struct type_tree_entry *parent; - struct type_tree_entry *next_sibling; - struct type_tree_entry *children; -}; - -struct nir_link_uniforms_state { - /* per-whole program */ - unsigned num_hidden_uniforms; - unsigned num_values; - unsigned max_uniform_location; - - /* per-shader stage */ - unsigned next_bindless_image_index; - unsigned next_bindless_sampler_index; - unsigned next_image_index; - unsigned next_sampler_index; - unsigned next_subroutine; - unsigned num_shader_samplers; - unsigned num_shader_images; - unsigned num_shader_uniform_components; - unsigned shader_samplers_used; - unsigned shader_shadow_samplers; - unsigned shader_storage_blocks_write_access; - struct gl_program_parameter_list *params; - - /* per-variable */ - nir_variable *current_var; - const struct glsl_type *current_ifc_type; - int offset; - bool var_is_in_block; - bool set_top_level_array; - int top_level_array_size; - int top_level_array_stride; - - struct type_tree_entry *current_type; - struct hash_table *referenced_uniforms[MESA_SHADER_STAGES]; - struct hash_table *uniform_hash; -}; - -static void -add_parameter(struct gl_uniform_storage *uniform, - const struct gl_constants *consts, - struct gl_shader_program *prog, - const struct glsl_type *type, - struct nir_link_uniforms_state *state) -{ - /* Builtin uniforms are backed by PROGRAM_STATE_VAR, so don't add them as - * uniforms. - */ - if (uniform->builtin) - return; - - if (!state->params || uniform->is_shader_storage || - (glsl_contains_opaque(type) && !state->current_var->data.bindless)) - return; - - unsigned num_params = glsl_get_aoa_size(type); - num_params = MAX2(num_params, 1); - num_params *= glsl_get_matrix_columns(glsl_without_array(type)); - - bool is_dual_slot = glsl_type_is_dual_slot(glsl_without_array(type)); - if (is_dual_slot) - num_params *= 2; - - struct gl_program_parameter_list *params = state->params; - int base_index = params->NumParameters; - _mesa_reserve_parameter_storage(params, num_params, num_params); - - if (consts->PackedDriverUniformStorage) { - for (unsigned i = 0; i < num_params; i++) { - unsigned dmul = glsl_type_is_64bit(glsl_without_array(type)) ? 2 : 1; - unsigned comps = glsl_get_vector_elements(glsl_without_array(type)) * dmul; - if (is_dual_slot) { - if (i & 0x1) - comps -= 4; - else - comps = 4; - } - - /* TODO: This will waste space with 1 and 3 16-bit components. */ - if (glsl_type_is_16bit(glsl_without_array(type))) - comps = DIV_ROUND_UP(comps, 2); - - _mesa_add_parameter(params, PROGRAM_UNIFORM, uniform->name.string, comps, - glsl_get_gl_type(type), NULL, NULL, false); - } - } else { - for (unsigned i = 0; i < num_params; i++) { - _mesa_add_parameter(params, PROGRAM_UNIFORM, uniform->name.string, 4, - glsl_get_gl_type(type), NULL, NULL, true); - } - } - - /* Each Parameter will hold the index to the backing uniform storage. - * This avoids relying on names to match parameters and uniform - * storages. - */ - for (unsigned i = 0; i < num_params; i++) { - struct gl_program_parameter *param = ¶ms->Parameters[base_index + i]; - param->UniformStorageIndex = uniform - prog->data->UniformStorage; - param->MainUniformStorageIndex = state->current_var->data.location; - } -} - -static unsigned -get_next_index(struct nir_link_uniforms_state *state, - const struct gl_uniform_storage *uniform, - unsigned *next_index, bool *initialised) -{ - /* If we’ve already calculated an index for this member then we can just - * offset from there. - */ - if (state->current_type->next_index == UINT_MAX) { - /* Otherwise we need to reserve enough indices for all of the arrays - * enclosing this member. - */ - - unsigned array_size = 1; - - for (const struct type_tree_entry *p = state->current_type; - p; - p = p->parent) { - array_size *= p->array_size; - } - - state->current_type->next_index = *next_index; - *next_index += array_size; - *initialised = true; - } else - *initialised = false; - - unsigned index = state->current_type->next_index; - - state->current_type->next_index += MAX2(1, uniform->array_elements); - - return index; -} - -/* Update the uniforms info for the current shader stage */ -static void -update_uniforms_shader_info(struct gl_shader_program *prog, - struct nir_link_uniforms_state *state, - struct gl_uniform_storage *uniform, - const struct glsl_type *type, - unsigned stage) -{ - unsigned values = glsl_get_component_slots(type); - const struct glsl_type *type_no_array = glsl_without_array(type); - - if (glsl_type_is_sampler(type_no_array)) { - bool init_idx; - /* ARB_bindless_texture spec says: - * - * "When used as shader inputs, outputs, uniform block members, - * or temporaries, the value of the sampler is a 64-bit unsigned - * integer handle and never refers to a texture image unit." - */ - bool is_bindless = state->current_var->data.bindless || state->var_is_in_block; - unsigned *next_index = is_bindless ? - &state->next_bindless_sampler_index : - &state->next_sampler_index; - int sampler_index = get_next_index(state, uniform, next_index, &init_idx); - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - - if (is_bindless) { - if (init_idx) { - sh->Program->sh.BindlessSamplers = - rerzalloc(sh->Program, sh->Program->sh.BindlessSamplers, - struct gl_bindless_sampler, - sh->Program->sh.NumBindlessSamplers, - state->next_bindless_sampler_index); - - for (unsigned j = sh->Program->sh.NumBindlessSamplers; - j < state->next_bindless_sampler_index; j++) { - sh->Program->sh.BindlessSamplers[j].target = - glsl_get_sampler_target(type_no_array); - } - - sh->Program->sh.NumBindlessSamplers = - state->next_bindless_sampler_index; - } - - if (!state->var_is_in_block) - state->num_shader_uniform_components += values; - } else { - /* Samplers (bound or bindless) are counted as two components - * as specified by ARB_bindless_texture. - */ - state->num_shader_samplers += values / 2; - - if (init_idx) { - const unsigned shadow = glsl_sampler_type_is_shadow(type_no_array); - for (unsigned i = sampler_index; - i < MIN2(state->next_sampler_index, MAX_SAMPLERS); i++) { - sh->Program->sh.SamplerTargets[i] = - glsl_get_sampler_target(type_no_array); - state->shader_samplers_used |= 1U << i; - state->shader_shadow_samplers |= shadow << i; - } - } - } - - uniform->opaque[stage].active = true; - uniform->opaque[stage].index = sampler_index; - } else if (glsl_type_is_image(type_no_array)) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - - /* Set image access qualifiers */ - enum gl_access_qualifier image_access = - state->current_var->data.access; - - int image_index; - if (state->current_var->data.bindless) { - image_index = state->next_bindless_image_index; - state->next_bindless_image_index += MAX2(1, uniform->array_elements); - - sh->Program->sh.BindlessImages = - rerzalloc(sh->Program, sh->Program->sh.BindlessImages, - struct gl_bindless_image, - sh->Program->sh.NumBindlessImages, - state->next_bindless_image_index); - - for (unsigned j = sh->Program->sh.NumBindlessImages; - j < state->next_bindless_image_index; j++) { - sh->Program->sh.BindlessImages[j].image_access = image_access; - } - - sh->Program->sh.NumBindlessImages = state->next_bindless_image_index; - - } else { - image_index = state->next_image_index; - state->next_image_index += MAX2(1, uniform->array_elements); - - /* Images (bound or bindless) are counted as two components as - * specified by ARB_bindless_texture. - */ - state->num_shader_images += values / 2; - - for (unsigned i = image_index; - i < MIN2(state->next_image_index, MAX_IMAGE_UNIFORMS); i++) { - sh->Program->sh.image_access[i] = image_access; - } - } - - uniform->opaque[stage].active = true; - uniform->opaque[stage].index = image_index; - - if (!uniform->is_shader_storage) - state->num_shader_uniform_components += values; - } else { - if (glsl_get_base_type(type_no_array) == GLSL_TYPE_SUBROUTINE) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - - uniform->opaque[stage].index = state->next_subroutine; - uniform->opaque[stage].active = true; - - sh->Program->sh.NumSubroutineUniforms++; - - /* Increment the subroutine index by 1 for non-arrays and by the - * number of array elements for arrays. - */ - state->next_subroutine += MAX2(1, uniform->array_elements); - } - - if (!state->var_is_in_block) - state->num_shader_uniform_components += values; - } -} - -static bool -find_and_update_named_uniform_storage(const struct gl_constants *consts, - struct gl_shader_program *prog, - struct nir_link_uniforms_state *state, - nir_variable *var, char **name, - size_t name_length, - const struct glsl_type *type, - unsigned stage, bool *first_element) -{ - /* gl_uniform_storage can cope with one level of array, so if the type is a - * composite type or an array where each element occupies more than one - * location than we need to recursively process it. - */ - if (glsl_type_is_struct_or_ifc(type) || - (glsl_type_is_array(type) && - (glsl_type_is_array(glsl_get_array_element(type)) || - glsl_type_is_struct_or_ifc(glsl_get_array_element(type))))) { - - struct type_tree_entry *old_type = state->current_type; - state->current_type = old_type->children; - - /* Shader storage block unsized arrays: add subscript [0] to variable - * names. - */ - unsigned length = glsl_get_length(type); - if (glsl_type_is_unsized_array(type)) - length = 1; - - bool result = false; - for (unsigned i = 0; i < length; i++) { - const struct glsl_type *field_type; - size_t new_length = name_length; - - if (glsl_type_is_struct_or_ifc(type)) { - field_type = glsl_get_struct_field(type, i); - - /* Append '.field' to the current variable name. */ - if (name) { - ralloc_asprintf_rewrite_tail(name, &new_length, ".%s", - glsl_get_struct_elem_name(type, i)); - } - } else { - field_type = glsl_get_array_element(type); - - /* Append the subscript to the current variable name */ - if (name) - ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i); - } - - result = find_and_update_named_uniform_storage(consts, prog, state, - var, name, new_length, - field_type, stage, - first_element); - - if (glsl_type_is_struct_or_ifc(type)) - state->current_type = state->current_type->next_sibling; - - if (!result) { - state->current_type = old_type; - return false; - } - } - - state->current_type = old_type; - - return result; - } else { - struct hash_entry *entry = - _mesa_hash_table_search(state->uniform_hash, *name); - if (entry) { - unsigned i = (unsigned) (intptr_t) entry->data; - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - - if (*first_element && !state->var_is_in_block) { - *first_element = false; - var->data.location = uniform - prog->data->UniformStorage; - } - - update_uniforms_shader_info(prog, state, uniform, type, stage); - - const struct glsl_type *type_no_array = glsl_without_array(type); - struct hash_entry *entry = prog->data->spirv ? NULL : - _mesa_hash_table_search(state->referenced_uniforms[stage], - state->current_var->name); - if (entry != NULL || - glsl_get_base_type(type_no_array) == GLSL_TYPE_SUBROUTINE || - prog->data->spirv) - uniform->active_shader_mask |= 1 << stage; - - if (!state->var_is_in_block) - add_parameter(uniform, consts, prog, type, state); - - return true; - } - } - - return false; -} - -/** - * Finds, returns, and updates the stage info for any uniform in UniformStorage - * defined by @var. For GLSL this is done using the name, for SPIR-V in general - * is this done using the explicit location, except: - * - * * UBOs/SSBOs: as they lack explicit location, binding is used to locate - * them. That means that more that one entry at the uniform storage can be - * found. In that case all of them are updated, and the first entry is - * returned, in order to update the location of the nir variable. - * - * * Special uniforms: like atomic counters. They lack a explicit location, - * so they are skipped. They will be handled and assigned a location later. - * - */ -static bool -find_and_update_previous_uniform_storage(const struct gl_constants *consts, - struct gl_shader_program *prog, - struct nir_link_uniforms_state *state, - nir_variable *var, char *name, - const struct glsl_type *type, - unsigned stage) -{ - if (!prog->data->spirv) { - bool first_element = true; - char *name_tmp = ralloc_strdup(NULL, name); - bool r = find_and_update_named_uniform_storage(consts, prog, state, var, - &name_tmp, - strlen(name_tmp), type, - stage, &first_element); - ralloc_free(name_tmp); - - return r; - } - - if (nir_variable_is_in_block(var)) { - struct gl_uniform_storage *uniform = NULL; - - ASSERTED unsigned num_blks = nir_variable_is_in_ubo(var) ? - prog->data->NumUniformBlocks : - prog->data->NumShaderStorageBlocks; - - struct gl_uniform_block *blks = nir_variable_is_in_ubo(var) ? - prog->data->UniformBlocks : prog->data->ShaderStorageBlocks; - - bool result = false; - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - /* UniformStorage contains both variables from ubos and ssbos */ - if ( prog->data->UniformStorage[i].is_shader_storage != - nir_variable_is_in_ssbo(var)) - continue; - - int block_index = prog->data->UniformStorage[i].block_index; - if (block_index != -1) { - assert(block_index < num_blks); - - if (var->data.binding == blks[block_index].Binding) { - if (!uniform) - uniform = &prog->data->UniformStorage[i]; - mark_stage_as_active(&prog->data->UniformStorage[i], - stage); - result = true; - } - } - } - - if (result) - var->data.location = uniform - prog->data->UniformStorage; - return result; - } - - /* Beyond blocks, there are still some corner cases of uniforms without - * location (ie: atomic counters) that would have a initial location equal - * to -1. We just return on that case. Those uniforms will be handled - * later. - */ - if (var->data.location == -1) - return false; - - /* TODO: following search can be problematic with shaders with a lot of - * uniforms. Would it be better to use some type of hash - */ - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - if (prog->data->UniformStorage[i].remap_location == var->data.location) { - mark_stage_as_active(&prog->data->UniformStorage[i], stage); - - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - var->data.location = uniform - prog->data->UniformStorage; - add_parameter(uniform, consts, prog, var->type, state); - return true; - } - } - - return false; -} - -static struct type_tree_entry * -build_type_tree_for_type(const struct glsl_type *type) -{ - struct type_tree_entry *entry = malloc(sizeof *entry); - - entry->array_size = 1; - entry->next_index = UINT_MAX; - entry->children = NULL; - entry->next_sibling = NULL; - entry->parent = NULL; - - if (glsl_type_is_array(type)) { - entry->array_size = glsl_get_length(type); - entry->children = build_type_tree_for_type(glsl_get_array_element(type)); - entry->children->parent = entry; - } else if (glsl_type_is_struct_or_ifc(type)) { - struct type_tree_entry *last = NULL; - - for (unsigned i = 0; i < glsl_get_length(type); i++) { - const struct glsl_type *field_type = glsl_get_struct_field(type, i); - struct type_tree_entry *field_entry = - build_type_tree_for_type(field_type); - - if (last == NULL) - entry->children = field_entry; - else - last->next_sibling = field_entry; - - field_entry->parent = entry; - - last = field_entry; - } - } - - return entry; -} - -static void -free_type_tree(struct type_tree_entry *entry) -{ - struct type_tree_entry *p, *next; - - for (p = entry->children; p; p = next) { - next = p->next_sibling; - free_type_tree(p); - } - - free(entry); -} - -static void -hash_free_uniform_name(struct hash_entry *entry) -{ - free((void*)entry->key); -} - -static void -enter_record(struct nir_link_uniforms_state *state, - const struct gl_constants *consts, - const struct glsl_type *type, - bool row_major) -{ - assert(glsl_type_is_struct(type)); - if (!state->var_is_in_block) - return; - - bool use_std430 = consts->UseSTD430AsDefaultPacking; - const enum glsl_interface_packing packing = - glsl_get_internal_ifc_packing(state->current_var->interface_type, - use_std430); - - if (packing == GLSL_INTERFACE_PACKING_STD430) - state->offset = glsl_align( - state->offset, glsl_get_std430_base_alignment(type, row_major)); - else - state->offset = glsl_align( - state->offset, glsl_get_std140_base_alignment(type, row_major)); -} - -static void -leave_record(struct nir_link_uniforms_state *state, - const struct gl_constants *consts, - const struct glsl_type *type, - bool row_major) -{ - assert(glsl_type_is_struct(type)); - if (!state->var_is_in_block) - return; - - bool use_std430 = consts->UseSTD430AsDefaultPacking; - const enum glsl_interface_packing packing = - glsl_get_internal_ifc_packing(state->current_var->interface_type, - use_std430); - - if (packing == GLSL_INTERFACE_PACKING_STD430) - state->offset = glsl_align( - state->offset, glsl_get_std430_base_alignment(type, row_major)); - else - state->offset = glsl_align( - state->offset, glsl_get_std140_base_alignment(type, row_major)); -} - -/** - * Creates the neccessary entries in UniformStorage for the uniform. Returns - * the number of locations used or -1 on failure. - */ -static int -nir_link_uniform(const struct gl_constants *consts, - struct gl_shader_program *prog, - struct gl_program *stage_program, - gl_shader_stage stage, - const struct glsl_type *type, - unsigned index_in_parent, - int location, - struct nir_link_uniforms_state *state, - char **name, size_t name_length, bool row_major) -{ - struct gl_uniform_storage *uniform = NULL; - - if (state->set_top_level_array && - nir_variable_is_in_ssbo(state->current_var)) { - /* Type is the top level SSBO member */ - if (glsl_type_is_array(type) && - (glsl_type_is_array(glsl_get_array_element(type)) || - glsl_type_is_struct_or_ifc(glsl_get_array_element(type)))) { - /* Type is a top-level array (array of aggregate types) */ - state->top_level_array_size = glsl_get_length(type); - state->top_level_array_stride = glsl_get_explicit_stride(type); - } else { - state->top_level_array_size = 1; - state->top_level_array_stride = 0; - } - - state->set_top_level_array = false; - } - - /* gl_uniform_storage can cope with one level of array, so if the type is a - * composite type or an array where each element occupies more than one - * location than we need to recursively process it. - */ - if (glsl_type_is_struct_or_ifc(type) || - (glsl_type_is_array(type) && - (glsl_type_is_array(glsl_get_array_element(type)) || - glsl_type_is_struct_or_ifc(glsl_get_array_element(type))))) { - int location_count = 0; - struct type_tree_entry *old_type = state->current_type; - unsigned int struct_base_offset = state->offset; - - state->current_type = old_type->children; - - /* Shader storage block unsized arrays: add subscript [0] to variable - * names. - */ - unsigned length = glsl_get_length(type); - if (glsl_type_is_unsized_array(type)) - length = 1; - - if (glsl_type_is_struct(type) && !prog->data->spirv) - enter_record(state, consts, type, row_major); - - for (unsigned i = 0; i < length; i++) { - const struct glsl_type *field_type; - size_t new_length = name_length; - bool field_row_major = row_major; - - if (glsl_type_is_struct_or_ifc(type)) { - field_type = glsl_get_struct_field(type, i); - /* Use the offset inside the struct only for variables backed by - * a buffer object. For variables not backed by a buffer object, - * offset is -1. - */ - if (state->var_is_in_block) { - if (prog->data->spirv) { - state->offset = - struct_base_offset + glsl_get_struct_field_offset(type, i); - } else if (glsl_get_struct_field_offset(type, i) != -1 && - type == state->current_ifc_type) { - state->offset = glsl_get_struct_field_offset(type, i); - } - - if (glsl_type_is_interface(type)) - state->set_top_level_array = true; - } - - /* Append '.field' to the current variable name. */ - if (name) { - ralloc_asprintf_rewrite_tail(name, &new_length, ".%s", - glsl_get_struct_elem_name(type, i)); - } - - - /* The layout of structures at the top level of the block is set - * during parsing. For matrices contained in multiple levels of - * structures in the block, the inner structures have no layout. - * These cases must potentially inherit the layout from the outer - * levels. - */ - const enum glsl_matrix_layout matrix_layout = - glsl_get_struct_field_data(type, i)->matrix_layout; - if (matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } else if (matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } - } else { - field_type = glsl_get_array_element(type); - - /* Append the subscript to the current variable name */ - if (name) - ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i); - } - - int entries = nir_link_uniform(consts, prog, stage_program, stage, - field_type, i, location, - state, name, new_length, - field_row_major); - - if (entries == -1) - return -1; - - if (location != -1) - location += entries; - location_count += entries; - - if (glsl_type_is_struct_or_ifc(type)) - state->current_type = state->current_type->next_sibling; - } - - if (glsl_type_is_struct(type) && !prog->data->spirv) - leave_record(state, consts, type, row_major); - - state->current_type = old_type; - - return location_count; - } else { - /* TODO: reallocating storage is slow, we should figure out a way to - * allocate storage up front for spirv like we do for GLSL. - */ - if (prog->data->spirv) { - /* Create a new uniform storage entry */ - prog->data->UniformStorage = - reralloc(prog->data, - prog->data->UniformStorage, - struct gl_uniform_storage, - prog->data->NumUniformStorage + 1); - if (!prog->data->UniformStorage) { - linker_error(prog, "Out of memory during linking.\n"); - return -1; - } - } - - uniform = &prog->data->UniformStorage[prog->data->NumUniformStorage]; - prog->data->NumUniformStorage++; - - /* Initialize its members */ - memset(uniform, 0x00, sizeof(struct gl_uniform_storage)); - - uniform->name.string = - name ? ralloc_strdup(prog->data->UniformStorage, *name) : NULL; - resource_name_updated(&uniform->name); - - const struct glsl_type *type_no_array = glsl_without_array(type); - if (glsl_type_is_array(type)) { - uniform->type = type_no_array; - uniform->array_elements = glsl_get_length(type); - } else { - uniform->type = type; - uniform->array_elements = 0; - } - uniform->top_level_array_size = state->top_level_array_size; - uniform->top_level_array_stride = state->top_level_array_stride; - - struct hash_entry *entry = prog->data->spirv ? NULL : - _mesa_hash_table_search(state->referenced_uniforms[stage], - state->current_var->name); - if (entry != NULL || - glsl_get_base_type(type_no_array) == GLSL_TYPE_SUBROUTINE || - prog->data->spirv) - uniform->active_shader_mask |= 1 << stage; - - if (location >= 0) { - /* Uniform has an explicit location */ - uniform->remap_location = location; - } else { - uniform->remap_location = UNMAPPED_UNIFORM_LOC; - } - - uniform->hidden = state->current_var->data.how_declared == nir_var_hidden; - if (uniform->hidden) - state->num_hidden_uniforms++; - - uniform->is_shader_storage = nir_variable_is_in_ssbo(state->current_var); - uniform->is_bindless = state->current_var->data.bindless; - - /* Set fields whose default value depend on the variable being inside a - * block. - * - * From the OpenGL 4.6 spec, 7.3 Program objects: - * - * "For the property ARRAY_STRIDE, ... For active variables not declared - * as an array of basic types, zero is written to params. For active - * variables not backed by a buffer object, -1 is written to params, - * regardless of the variable type." - * - * "For the property MATRIX_STRIDE, ... For active variables not declared - * as a matrix or array of matrices, zero is written to params. For active - * variables not backed by a buffer object, -1 is written to params, - * regardless of the variable type." - * - * For the property IS_ROW_MAJOR, ... For active variables backed by a - * buffer object, declared as a single matrix or array of matrices, and - * stored in row-major order, one is written to params. For all other - * active variables, zero is written to params. - */ - uniform->array_stride = -1; - uniform->matrix_stride = -1; - uniform->row_major = false; - - if (state->var_is_in_block) { - uniform->array_stride = glsl_type_is_array(type) ? - glsl_get_explicit_stride(type) : 0; - - if (glsl_type_is_matrix(uniform->type)) { - uniform->matrix_stride = glsl_get_explicit_stride(uniform->type); - uniform->row_major = glsl_matrix_type_is_row_major(uniform->type); - } else { - uniform->matrix_stride = 0; - } - - if (!prog->data->spirv) { - bool use_std430 = consts->UseSTD430AsDefaultPacking; - const enum glsl_interface_packing packing = - glsl_get_internal_ifc_packing(state->current_var->interface_type, - use_std430); - - unsigned alignment = - glsl_get_std140_base_alignment(type, uniform->row_major); - if (packing == GLSL_INTERFACE_PACKING_STD430) { - alignment = - glsl_get_std430_base_alignment(type, uniform->row_major); - } - state->offset = glsl_align(state->offset, alignment); - } - } - - uniform->offset = state->var_is_in_block ? state->offset : -1; - - int buffer_block_index = -1; - /* If the uniform is inside a uniform block determine its block index by - * comparing the bindings, we can not use names. - */ - if (state->var_is_in_block) { - struct gl_uniform_block *blocks = nir_variable_is_in_ssbo(state->current_var) ? - prog->data->ShaderStorageBlocks : prog->data->UniformBlocks; - - int num_blocks = nir_variable_is_in_ssbo(state->current_var) ? - prog->data->NumShaderStorageBlocks : prog->data->NumUniformBlocks; - - if (!prog->data->spirv) { - bool is_interface_array = - glsl_without_array(state->current_var->type) == state->current_var->interface_type && - glsl_type_is_array(state->current_var->type); - - const char *ifc_name = - glsl_get_type_name(state->current_var->interface_type); - if (is_interface_array) { - unsigned l = strlen(ifc_name); - for (unsigned i = 0; i < num_blocks; i++) { - if (strncmp(ifc_name, blocks[i].name.string, l) == 0 && - blocks[i].name.string[l] == '[') { - buffer_block_index = i; - break; - } - } - } else { - for (unsigned i = 0; i < num_blocks; i++) { - if (strcmp(ifc_name, blocks[i].name.string) == 0) { - buffer_block_index = i; - break; - } - } - } - - /* Compute the next offset. */ - bool use_std430 = consts->UseSTD430AsDefaultPacking; - const enum glsl_interface_packing packing = - glsl_get_internal_ifc_packing(state->current_var->interface_type, - use_std430); - if (packing == GLSL_INTERFACE_PACKING_STD430) - state->offset += glsl_get_std430_size(type, uniform->row_major); - else - state->offset += glsl_get_std140_size(type, uniform->row_major); - } else { - for (unsigned i = 0; i < num_blocks; i++) { - if (state->current_var->data.binding == blocks[i].Binding) { - buffer_block_index = i; - break; - } - } - - /* Compute the next offset. */ - state->offset += glsl_get_explicit_size(type, true); - } - assert(buffer_block_index >= 0); - } - - uniform->block_index = buffer_block_index; - uniform->builtin = is_gl_identifier(uniform->name.string); - uniform->atomic_buffer_index = -1; - - /* The following are not for features not supported by ARB_gl_spirv */ - uniform->num_compatible_subroutines = 0; - - unsigned entries = MAX2(1, uniform->array_elements); - unsigned values = glsl_get_component_slots(type); - - update_uniforms_shader_info(prog, state, uniform, type, stage); - - if (uniform->remap_location != UNMAPPED_UNIFORM_LOC && - state->max_uniform_location < uniform->remap_location + entries) - state->max_uniform_location = uniform->remap_location + entries; - - if (!state->var_is_in_block) - add_parameter(uniform, consts, prog, type, state); - - if (name) { - _mesa_hash_table_insert(state->uniform_hash, strdup(*name), - (void *) (intptr_t) - (prog->data->NumUniformStorage - 1)); - } - - if (!is_gl_identifier(uniform->name.string) && !uniform->is_shader_storage && - !state->var_is_in_block) - state->num_values += values; - - return MAX2(uniform->array_elements, 1); - } -} - -bool -gl_nir_link_uniforms(const struct gl_constants *consts, - struct gl_shader_program *prog, - bool fill_parameters) -{ - /* First free up any previous UniformStorage items */ - ralloc_free(prog->data->UniformStorage); - prog->data->UniformStorage = NULL; - prog->data->NumUniformStorage = 0; - - /* Iterate through all linked shaders */ - struct nir_link_uniforms_state state = {0,}; - - if (!prog->data->spirv) { - /* Gather information on uniform use */ - for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - if (!sh) - continue; - - state.referenced_uniforms[stage] = - _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - - nir_shader *nir = sh->Program->nir; - add_var_use_shader(nir, state.referenced_uniforms[stage]); - } - - if(!consts->DisableUniformArrayResize) { - /* Resize uniform arrays based on the maximum array index */ - for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - if (!sh) - continue; - - nir_foreach_gl_uniform_variable(var, sh->Program->nir) - update_array_sizes(prog, var, state.referenced_uniforms, stage); - } - } - } - - /* Count total number of uniforms and allocate storage */ - unsigned storage_size = 0; - if (!prog->data->spirv) { - struct set *storage_counted = - _mesa_set_create(NULL, _mesa_hash_string, _mesa_key_string_equal); - for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - if (!sh) - continue; - - nir_foreach_gl_uniform_variable(var, sh->Program->nir) { - const struct glsl_type *type = var->type; - const char *name = var->name; - if (nir_variable_is_in_block(var) && - glsl_without_array(type) == var->interface_type) { - type = glsl_without_array(var->type); - name = glsl_get_type_name(type); - } - - struct set_entry *entry = _mesa_set_search(storage_counted, name); - if (!entry) { - storage_size += uniform_storage_size(type); - _mesa_set_add(storage_counted, name); - } - } - } - _mesa_set_destroy(storage_counted, NULL); - - prog->data->UniformStorage = rzalloc_array(prog->data, - struct gl_uniform_storage, - storage_size); - if (!prog->data->UniformStorage) { - linker_error(prog, "Out of memory while linking uniforms.\n"); - return false; - } - } - - /* Iterate through all linked shaders */ - state.uniform_hash = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - - for (unsigned shader_type = 0; shader_type < MESA_SHADER_STAGES; shader_type++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[shader_type]; - if (!sh) - continue; - - nir_shader *nir = sh->Program->nir; - assert(nir); - - state.next_bindless_image_index = 0; - state.next_bindless_sampler_index = 0; - state.next_image_index = 0; - state.next_sampler_index = 0; - state.num_shader_samplers = 0; - state.num_shader_images = 0; - state.num_shader_uniform_components = 0; - state.shader_storage_blocks_write_access = 0; - state.shader_samplers_used = 0; - state.shader_shadow_samplers = 0; - state.params = fill_parameters ? sh->Program->Parameters : NULL; - - nir_foreach_gl_uniform_variable(var, nir) { - state.current_var = var; - state.current_ifc_type = NULL; - state.offset = 0; - state.var_is_in_block = nir_variable_is_in_block(var); - state.set_top_level_array = false; - state.top_level_array_size = 0; - state.top_level_array_stride = 0; - - /* - * From ARB_program_interface spec, issue (16): - * - * "RESOLVED: We will follow the default rule for enumerating block - * members in the OpenGL API, which is: - * - * * If a variable is a member of an interface block without an - * instance name, it is enumerated using just the variable name. - * - * * If a variable is a member of an interface block with an - * instance name, it is enumerated as "BlockName.Member", where - * "BlockName" is the name of the interface block (not the - * instance name) and "Member" is the name of the variable. - * - * For example, in the following code: - * - * uniform Block1 { - * int member1; - * }; - * uniform Block2 { - * int member2; - * } instance2; - * uniform Block3 { - * int member3; - * } instance3[2]; // uses two separate buffer bindings - * - * the three uniforms (if active) are enumerated as "member1", - * "Block2.member2", and "Block3.member3"." - * - * Note that in the last example, with an array of ubo, only one - * uniform is generated. For that reason, while unrolling the - * uniforms of a ubo, or the variables of a ssbo, we need to treat - * arrays of instance as a single block. - */ - char *name; - const struct glsl_type *type = var->type; - if (state.var_is_in_block && - ((!prog->data->spirv && glsl_without_array(type) == var->interface_type) || - (prog->data->spirv && type == var->interface_type))) { - type = glsl_without_array(var->type); - state.current_ifc_type = type; - name = ralloc_strdup(NULL, glsl_get_type_name(type)); - } else { - state.set_top_level_array = true; - name = ralloc_strdup(NULL, var->name); - } - - struct type_tree_entry *type_tree = - build_type_tree_for_type(type); - state.current_type = type_tree; - - int location = var->data.location; - - struct gl_uniform_block *blocks = NULL; - int num_blocks = 0; - int buffer_block_index = -1; - bool is_interface_array = false; - if (state.var_is_in_block) { - /* If the uniform is inside a uniform block determine its block index by - * comparing the bindings, we can not use names. - */ - blocks = nir_variable_is_in_ssbo(state.current_var) ? - prog->data->ShaderStorageBlocks : prog->data->UniformBlocks; - num_blocks = nir_variable_is_in_ssbo(state.current_var) ? - prog->data->NumShaderStorageBlocks : prog->data->NumUniformBlocks; - - is_interface_array = - glsl_without_array(state.current_var->type) == state.current_var->interface_type && - glsl_type_is_array(state.current_var->type); - - const char *ifc_name = - glsl_get_type_name(state.current_var->interface_type); - - if (is_interface_array && !prog->data->spirv) { - unsigned l = strlen(ifc_name); - - /* Even when a match is found, do not "break" here. As this is - * an array of instances, all elements of the array need to be - * marked as referenced. - */ - for (unsigned i = 0; i < num_blocks; i++) { - if (strncmp(ifc_name, blocks[i].name.string, l) == 0 && - blocks[i].name.string[l] == '[') { - if (buffer_block_index == -1) - buffer_block_index = i; - - struct hash_entry *entry = - _mesa_hash_table_search(state.referenced_uniforms[shader_type], - var->name); - if (entry) { - struct uniform_array_info *ainfo = - (struct uniform_array_info *) entry->data; - if (BITSET_TEST(ainfo->indices, blocks[i].linearized_array_index)) - blocks[i].stageref |= 1U << shader_type; - } - } - } - } else { - for (unsigned i = 0; i < num_blocks; i++) { - bool match = false; - if (!prog->data->spirv) { - match = strcmp(ifc_name, blocks[i].name.string) == 0; - } else { - match = var->data.binding == blocks[i].Binding; - } - if (match) { - buffer_block_index = i; - - if (!prog->data->spirv) { - struct hash_entry *entry = - _mesa_hash_table_search(state.referenced_uniforms[shader_type], - var->name); - if (entry) - blocks[i].stageref |= 1U << shader_type; - } - - break; - } - } - } - } - - if (nir_variable_is_in_ssbo(var) && - !(var->data.access & ACCESS_NON_WRITEABLE)) { - unsigned array_size = is_interface_array ? - glsl_get_length(var->type) : 1; - - STATIC_ASSERT(MAX_SHADER_STORAGE_BUFFERS <= 32); - - /* Buffers from each stage are pointers to the one stored in the program. We need - * to account for this before computing the mask below otherwise the mask will be - * incorrect. - * sh->Program->sh.SSBlocks: [a][b][c][d][e][f] - * VS prog->data->SSBlocks : [a][b][c] - * FS prog->data->SSBlocks : [d][e][f] - * eg for FS buffer 1, buffer_block_index will be 4 but sh_block_index will be 1. - */ - int base = 0; - base = sh->Program->sh.ShaderStorageBlocks[0] - prog->data->ShaderStorageBlocks; - - assert(base >= 0); - - int sh_block_index = buffer_block_index - base; - /* Shaders that use too many SSBOs will fail to compile, which - * we don't care about. - * - * This is true for shaders that do not use too many SSBOs: - */ - if (sh_block_index + array_size <= 32) { - state.shader_storage_blocks_write_access |= - u_bit_consecutive(sh_block_index, array_size); - } - } - - if (blocks && !prog->data->spirv && state.var_is_in_block) { - if (glsl_without_array(state.current_var->type) != state.current_var->interface_type) { - /* this is nested at some offset inside the block */ - bool found = false; - char sentinel = '\0'; - - if (glsl_type_is_struct(state.current_var->type)) { - sentinel = '.'; - } else if (glsl_type_is_array(state.current_var->type) && - (glsl_type_is_array(glsl_get_array_element(state.current_var->type)) - || glsl_type_is_struct(glsl_without_array(state.current_var->type)))) { - sentinel = '['; - } - - const unsigned l = strlen(state.current_var->name); - for (unsigned i = 0; i < num_blocks; i++) { - for (unsigned j = 0; j < blocks[i].NumUniforms; j++) { - if (sentinel) { - const char *begin = blocks[i].Uniforms[j].Name; - const char *end = strchr(begin, sentinel); - - if (end == NULL) - continue; - - if ((ptrdiff_t) l != (end - begin)) - continue; - found = strncmp(state.current_var->name, begin, l) == 0; - } else { - found = strcmp(state.current_var->name, blocks[i].Uniforms[j].Name) == 0; - } - - if (found) { - location = j; - - struct hash_entry *entry = - _mesa_hash_table_search(state.referenced_uniforms[shader_type], var->name); - if (entry) - blocks[i].stageref |= 1U << shader_type; - - break; - } - } - - if (found) - break; - } - assert(found); - var->data.location = location; - } else { - /* this is the base block offset */ - var->data.location = buffer_block_index; - location = 0; - } - assert(buffer_block_index >= 0); - const struct gl_uniform_block *const block = - &blocks[buffer_block_index]; - assert(location >= 0 && location < block->NumUniforms); - - const struct gl_uniform_buffer_variable *const ubo_var = - &block->Uniforms[location]; - - state.offset = ubo_var->Offset; - } - - /* Check if the uniform has been processed already for - * other stage. If so, validate they are compatible and update - * the active stage mask. - */ - if (find_and_update_previous_uniform_storage(consts, prog, &state, var, - name, type, shader_type)) { - ralloc_free(name); - free_type_tree(type_tree); - continue; - } - - /* From now on the variable’s location will be its uniform index */ - if (!state.var_is_in_block) - var->data.location = prog->data->NumUniformStorage; - else - location = -1; - - bool row_major = - var->data.matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR; - int res = nir_link_uniform(consts, prog, sh->Program, shader_type, type, - 0, location, - &state, - !prog->data->spirv ? &name : NULL, - !prog->data->spirv ? strlen(name) : 0, - row_major); - - free_type_tree(type_tree); - ralloc_free(name); - - if (res == -1) - return false; - } - - if (!prog->data->spirv) { - _mesa_hash_table_destroy(state.referenced_uniforms[shader_type], - NULL); - } - - if (state.num_shader_samplers > - consts->Program[shader_type].MaxTextureImageUnits) { - linker_error(prog, "Too many %s shader texture samplers\n", - _mesa_shader_stage_to_string(shader_type)); - continue; - } - - if (state.num_shader_images > - consts->Program[shader_type].MaxImageUniforms) { - linker_error(prog, "Too many %s shader image uniforms (%u > %u)\n", - _mesa_shader_stage_to_string(shader_type), - state.num_shader_images, - consts->Program[shader_type].MaxImageUniforms); - continue; - } - - sh->Program->SamplersUsed = state.shader_samplers_used; - sh->Program->sh.ShaderStorageBlocksWriteAccess = - state.shader_storage_blocks_write_access; - sh->shadow_samplers = state.shader_shadow_samplers; - sh->Program->info.num_textures = state.num_shader_samplers; - sh->Program->info.num_images = state.num_shader_images; - sh->num_uniform_components = state.num_shader_uniform_components; - sh->num_combined_uniform_components = sh->num_uniform_components; - } - - prog->data->NumHiddenUniforms = state.num_hidden_uniforms; - prog->data->NumUniformDataSlots = state.num_values; - - assert(prog->data->spirv || prog->data->NumUniformStorage == storage_size); - - if (prog->data->spirv) - prog->NumUniformRemapTable = state.max_uniform_location; - - nir_setup_uniform_remap_tables(consts, prog); - gl_nir_set_uniform_initializers(consts, prog); - - _mesa_hash_table_destroy(state.uniform_hash, hash_free_uniform_name); - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_varyings.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_varyings.c deleted file mode 100644 index f93e266..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_varyings.c +++ /dev/null @@ -1,3205 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * Linker functions related specifically to linking varyings between shader - * stages. - */ - -#include "../../mesa/main/errors.h" -#include "../../util/macros.h" -#include "../../mesa/main/menums.h" -#include "../../mesa/main/mtypes.h" -#include "../../util/hash_table.h" -#include "../../util/u_math.h" - -#include "../nir/nir.h" -#include "../nir/nir_builder.h" -#include "gl_nir.h" -#include "gl_nir_link_varyings.h" -#include "gl_nir_linker.h" -#include "linker_util.h" -#include "../nir_gl_types.h" - - -/** - * Get the varying type stripped of the outermost array if we're processing - * a stage whose varyings are arrays indexed by a vertex number (such as - * geometry shader inputs). - */ -static const struct glsl_type * -get_varying_type(const nir_variable *var, gl_shader_stage stage) -{ - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - return type; -} - -static bool -varying_has_user_specified_location(const nir_variable *var) -{ - return var->data.explicit_location && - var->data.location >= VARYING_SLOT_VAR0; -} - -static void -create_xfb_varying_names(void *mem_ctx, const struct glsl_type *t, char **name, - size_t name_length, unsigned *count, - const char *ifc_member_name, - const struct glsl_type *ifc_member_t, - char ***varying_names) -{ - if (glsl_type_is_interface(t)) { - size_t new_length = name_length; - - assert(ifc_member_name && ifc_member_t); - ralloc_asprintf_rewrite_tail(name, &new_length, ".%s", ifc_member_name); - - create_xfb_varying_names(mem_ctx, ifc_member_t, name, new_length, count, - NULL, NULL, varying_names); - } else if (glsl_type_is_struct(t)) { - for (unsigned i = 0; i < glsl_get_length(t); i++) { - const char *field = glsl_get_struct_elem_name(t, i); - size_t new_length = name_length; - - ralloc_asprintf_rewrite_tail(name, &new_length, ".%s", field); - - create_xfb_varying_names(mem_ctx, glsl_get_struct_field(t, i), name, - new_length, count, NULL, NULL, - varying_names); - } - } else if (glsl_type_is_struct(glsl_without_array(t)) || - glsl_type_is_interface(glsl_without_array(t)) || - (glsl_type_is_array(t) && glsl_type_is_array(glsl_get_array_element(t)))) { - for (unsigned i = 0; i < glsl_get_length(t); i++) { - size_t new_length = name_length; - - /* Append the subscript to the current variable name */ - ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i); - - create_xfb_varying_names(mem_ctx, glsl_get_array_element(t), name, - new_length, count, ifc_member_name, - ifc_member_t, varying_names); - } - } else { - (*varying_names)[(*count)++] = ralloc_strdup(mem_ctx, *name); - } -} - -static bool -process_xfb_layout_qualifiers(void *mem_ctx, const struct gl_linked_shader *sh, - struct gl_shader_program *prog, - unsigned *num_xfb_decls, - char ***varying_names) -{ - bool has_xfb_qualifiers = false; - - /* We still need to enable transform feedback mode even if xfb_stride is - * only applied to a global out. Also we don't bother to propagate - * xfb_stride to interface block members so this will catch that case also. - */ - for (unsigned j = 0; j < MAX_FEEDBACK_BUFFERS; j++) { - if (prog->TransformFeedback.BufferStride[j]) { - has_xfb_qualifiers = true; - break; - } - } - - nir_foreach_shader_out_variable(var, sh->Program->nir) { - /* From the ARB_enhanced_layouts spec: - * - * "Any shader making any static use (after preprocessing) of any of - * these *xfb_* qualifiers will cause the shader to be in a - * transform feedback capturing mode and hence responsible for - * describing the transform feedback setup. This mode will capture - * any output selected by *xfb_offset*, directly or indirectly, to - * a transform feedback buffer." - */ - if (var->data.explicit_xfb_buffer || var->data.explicit_xfb_stride) { - has_xfb_qualifiers = true; - } - - if (var->data.explicit_offset) { - *num_xfb_decls += glsl_varying_count(var->type); - has_xfb_qualifiers = true; - } - } - - if (*num_xfb_decls == 0) - return has_xfb_qualifiers; - - unsigned i = 0; - *varying_names = ralloc_array(mem_ctx, char *, *num_xfb_decls); - nir_foreach_shader_out_variable(var, sh->Program->nir) { - if (var->data.explicit_offset) { - char *name; - const struct glsl_type *type, *member_type; - - if (var->data.from_named_ifc_block) { - type = var->interface_type; - - /* Find the member type before it was altered by lowering */ - const struct glsl_type *type_wa = glsl_without_array(type); - member_type = - glsl_get_struct_field(type_wa, glsl_get_field_index(type_wa, var->name)); - name = ralloc_strdup(NULL, glsl_get_type_name(type_wa)); - } else { - type = var->type; - member_type = NULL; - name = ralloc_strdup(NULL, var->name); - } - create_xfb_varying_names(mem_ctx, type, &name, strlen(name), &i, - var->name, member_type, varying_names); - ralloc_free(name); - } - } - - assert(i == *num_xfb_decls); - return has_xfb_qualifiers; -} - -/** - * Initialize this struct based on a string that was passed to - * glTransformFeedbackVaryings. - * - * If the input is mal-formed, this call still succeeds, but it sets - * this->var_name to a mal-formed input, so xfb_decl_find_output_var() - * will fail to find any matching variable. - */ -static void -xfb_decl_init(struct xfb_decl *xfb_decl, const struct gl_constants *consts, - const struct gl_extensions *exts, const void *mem_ctx, - const char *input) -{ - /* We don't have to be pedantic about what is a valid GLSL variable name, - * because any variable with an invalid name can't exist in the IR anyway. - */ - xfb_decl->location = -1; - xfb_decl->orig_name = input; - xfb_decl->lowered_builtin_array_variable = none; - xfb_decl->skip_components = 0; - xfb_decl->next_buffer_separator = false; - xfb_decl->matched_candidate = NULL; - xfb_decl->stream_id = 0; - xfb_decl->buffer = 0; - xfb_decl->offset = 0; - - if (exts->ARB_transform_feedback3) { - /* Parse gl_NextBuffer. */ - if (strcmp(input, "gl_NextBuffer") == 0) { - xfb_decl->next_buffer_separator = true; - return; - } - - /* Parse gl_SkipComponents. */ - if (strcmp(input, "gl_SkipComponents1") == 0) - xfb_decl->skip_components = 1; - else if (strcmp(input, "gl_SkipComponents2") == 0) - xfb_decl->skip_components = 2; - else if (strcmp(input, "gl_SkipComponents3") == 0) - xfb_decl->skip_components = 3; - else if (strcmp(input, "gl_SkipComponents4") == 0) - xfb_decl->skip_components = 4; - - if (xfb_decl->skip_components) - return; - } - - /* Parse a declaration. */ - const char *base_name_end; - long subscript = link_util_parse_program_resource_name(input, strlen(input), - &base_name_end); - xfb_decl->var_name = ralloc_strndup(mem_ctx, input, base_name_end - input); - if (xfb_decl->var_name == NULL) { - _mesa_error_no_memory(__func__); - return; - } - - if (subscript >= 0) { - xfb_decl->array_subscript = subscript; - xfb_decl->is_subscripted = true; - } else { - xfb_decl->is_subscripted = false; - } - - /* For drivers that lower gl_ClipDistance to gl_ClipDistanceMESA, this - * class must behave specially to account for the fact that gl_ClipDistance - * is converted from a float[8] to a vec4[2]. - */ - if (consts->ShaderCompilerOptions[MESA_SHADER_VERTEX].LowerCombinedClipCullDistance && - strcmp(xfb_decl->var_name, "gl_ClipDistance") == 0) { - xfb_decl->lowered_builtin_array_variable = clip_distance; - } - if (consts->ShaderCompilerOptions[MESA_SHADER_VERTEX].LowerCombinedClipCullDistance && - strcmp(xfb_decl->var_name, "gl_CullDistance") == 0) { - xfb_decl->lowered_builtin_array_variable = cull_distance; - } -} - -/** - * Determine whether two xfb_decl structs refer to the same variable and - * array index (if applicable). - */ -static bool -xfb_decl_is_same(const struct xfb_decl *x, const struct xfb_decl *y) -{ - assert(xfb_decl_is_varying(x) && xfb_decl_is_varying(y)); - - if (strcmp(x->var_name, y->var_name) != 0) - return false; - if (x->is_subscripted != y->is_subscripted) - return false; - if (x->is_subscripted && x->array_subscript != y->array_subscript) - return false; - return true; -} - -/** - * The total number of varying components taken up by this variable. Only - * valid if assign_location() has been called. - */ -static unsigned -xfb_decl_num_components(struct xfb_decl *xfb_decl) -{ - if (xfb_decl->lowered_builtin_array_variable) - return xfb_decl->size; - else - return xfb_decl->vector_elements * xfb_decl->matrix_columns * - xfb_decl->size * (_mesa_gl_datatype_is_64bit(xfb_decl->type) ? 2 : 1); -} - -/** - * Assign a location and stream ID for this xfb_decl object based on the - * transform feedback candidate found by find_candidate. - * - * If an error occurs, the error is reported through linker_error() and false - * is returned. - */ -static bool -xfb_decl_assign_location(struct xfb_decl *xfb_decl, - const struct gl_constants *consts, - struct gl_shader_program *prog, - bool disable_varying_packing, bool xfb_enabled) -{ - assert(xfb_decl_is_varying(xfb_decl)); - - unsigned fine_location - = xfb_decl->matched_candidate->toplevel_var->data.location * 4 - + xfb_decl->matched_candidate->toplevel_var->data.location_frac - + xfb_decl->matched_candidate->struct_offset_floats; - const unsigned dmul = - glsl_type_is_64bit(glsl_without_array(xfb_decl->matched_candidate->type)) ? 2 : 1; - - if (glsl_type_is_array(xfb_decl->matched_candidate->type)) { - /* Array variable */ - const struct glsl_type *element_type = - glsl_get_array_element(xfb_decl->matched_candidate->type); - const unsigned matrix_cols = glsl_get_matrix_columns(element_type); - const unsigned vector_elements = glsl_get_vector_elements(element_type); - unsigned actual_array_size; - switch (xfb_decl->lowered_builtin_array_variable) { - case clip_distance: - actual_array_size = prog->last_vert_prog ? - prog->last_vert_prog->info.clip_distance_array_size : 0; - break; - case cull_distance: - actual_array_size = prog->last_vert_prog ? - prog->last_vert_prog->info.cull_distance_array_size : 0; - break; - case none: - default: - actual_array_size = glsl_array_size(xfb_decl->matched_candidate->type); - break; - } - - if (xfb_decl->is_subscripted) { - /* Check array bounds. */ - if (xfb_decl->array_subscript >= actual_array_size) { - linker_error(prog, "Transform feedback varying %s has index " - "%i, but the array size is %u.", - xfb_decl->orig_name, xfb_decl->array_subscript, - actual_array_size); - return false; - } - - bool array_will_be_lowered = - lower_packed_varying_needs_lowering(prog->last_vert_prog->nir, - xfb_decl->matched_candidate->toplevel_var, - nir_var_shader_out, - disable_varying_packing, - xfb_enabled) || - strcmp(xfb_decl->matched_candidate->toplevel_var->name, "gl_ClipDistance") == 0 || - strcmp(xfb_decl->matched_candidate->toplevel_var->name, "gl_CullDistance") == 0 || - strcmp(xfb_decl->matched_candidate->toplevel_var->name, "gl_TessLevelInner") == 0 || - strcmp(xfb_decl->matched_candidate->toplevel_var->name, "gl_TessLevelOuter") == 0; - - unsigned array_elem_size = xfb_decl->lowered_builtin_array_variable ? - 1 : (array_will_be_lowered ? vector_elements : 4) * matrix_cols * dmul; - fine_location += array_elem_size * xfb_decl->array_subscript; - xfb_decl->size = 1; - } else { - xfb_decl->size = actual_array_size; - } - xfb_decl->vector_elements = vector_elements; - xfb_decl->matrix_columns = matrix_cols; - if (xfb_decl->lowered_builtin_array_variable) - xfb_decl->type = GL_FLOAT; - else - xfb_decl->type = glsl_get_gl_type(element_type); - } else { - /* Regular variable (scalar, vector, or matrix) */ - if (xfb_decl->is_subscripted) { - linker_error(prog, "Transform feedback varying %s requested, " - "but %s is not an array.", - xfb_decl->orig_name, xfb_decl->var_name); - return false; - } - xfb_decl->size = 1; - xfb_decl->vector_elements = glsl_get_vector_elements(xfb_decl->matched_candidate->type); - xfb_decl->matrix_columns = glsl_get_matrix_columns(xfb_decl->matched_candidate->type); - xfb_decl->type = glsl_get_gl_type(xfb_decl->matched_candidate->type); - } - xfb_decl->location = fine_location / 4; - xfb_decl->location_frac = fine_location % 4; - - /* From GL_EXT_transform_feedback: - * A program will fail to link if: - * - * * the total number of components to capture in any varying - * variable in is greater than the constant - * MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT and the - * buffer mode is SEPARATE_ATTRIBS_EXT; - */ - if (prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS && - xfb_decl_num_components(xfb_decl) > - consts->MaxTransformFeedbackSeparateComponents) { - linker_error(prog, "Transform feedback varying %s exceeds " - "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS.", - xfb_decl->orig_name); - return false; - } - - /* Only transform feedback varyings can be assigned to non-zero streams, - * so assign the stream id here. - */ - xfb_decl->stream_id = xfb_decl->matched_candidate->toplevel_var->data.stream; - - unsigned array_offset = xfb_decl->array_subscript * 4 * dmul; - unsigned struct_offset = xfb_decl->matched_candidate->xfb_offset_floats * 4; - xfb_decl->buffer = xfb_decl->matched_candidate->toplevel_var->data.xfb.buffer; - xfb_decl->offset = xfb_decl->matched_candidate->toplevel_var->data.offset + - array_offset + struct_offset; - - return true; -} - -static unsigned -xfb_decl_get_num_outputs(struct xfb_decl *xfb_decl) -{ - if (!xfb_decl_is_varying(xfb_decl)) { - return 0; - } - - if (varying_has_user_specified_location(xfb_decl->matched_candidate->toplevel_var)) { - unsigned dmul = _mesa_gl_datatype_is_64bit(xfb_decl->type) ? 2 : 1; - unsigned rows_per_element = DIV_ROUND_UP(xfb_decl->vector_elements * dmul, 4); - return xfb_decl->size * xfb_decl->matrix_columns * rows_per_element; - } else { - return (xfb_decl_num_components(xfb_decl) + xfb_decl->location_frac + 3) / 4; - } -} - -static bool -xfb_decl_is_varying_written(struct xfb_decl *xfb_decl) -{ - if (xfb_decl->next_buffer_separator || xfb_decl->skip_components) - return false; - - return xfb_decl->matched_candidate->toplevel_var->data.assigned; -} - -/** - * Update gl_transform_feedback_info to reflect this xfb_decl. - * - * If an error occurs, the error is reported through linker_error() and false - * is returned. - */ -static bool -xfb_decl_store(struct xfb_decl *xfb_decl, const struct gl_constants *consts, - struct gl_shader_program *prog, - struct gl_transform_feedback_info *info, - unsigned buffer, unsigned buffer_index, - const unsigned max_outputs, - BITSET_WORD *used_components[MAX_FEEDBACK_BUFFERS], - bool *explicit_stride, unsigned *max_member_alignment, - bool has_xfb_qualifiers, const void* mem_ctx) -{ - unsigned xfb_offset = 0; - unsigned size = xfb_decl->size; - /* Handle gl_SkipComponents. */ - if (xfb_decl->skip_components) { - info->Buffers[buffer].Stride += xfb_decl->skip_components; - size = xfb_decl->skip_components; - goto store_varying; - } - - if (xfb_decl->next_buffer_separator) { - size = 0; - goto store_varying; - } - - if (has_xfb_qualifiers) { - xfb_offset = xfb_decl->offset / 4; - } else { - xfb_offset = info->Buffers[buffer].Stride; - } - info->Varyings[info->NumVarying].Offset = xfb_offset * 4; - - { - unsigned location = xfb_decl->location; - unsigned location_frac = xfb_decl->location_frac; - unsigned num_components = xfb_decl_num_components(xfb_decl); - - /* From GL_EXT_transform_feedback: - * - * " A program will fail to link if: - * - * * the total number of components to capture is greater than the - * constant MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT - * and the buffer mode is INTERLEAVED_ATTRIBS_EXT." - * - * From GL_ARB_enhanced_layouts: - * - * " The resulting stride (implicit or explicit) must be less than or - * equal to the implementation-dependent constant - * gl_MaxTransformFeedbackInterleavedComponents." - */ - if ((prog->TransformFeedback.BufferMode == GL_INTERLEAVED_ATTRIBS || - has_xfb_qualifiers) && - xfb_offset + num_components > - consts->MaxTransformFeedbackInterleavedComponents) { - linker_error(prog, - "The MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS " - "limit has been exceeded."); - return false; - } - - /* From the OpenGL 4.60.5 spec, section 4.4.2. Output Layout Qualifiers, - * Page 76, (Transform Feedback Layout Qualifiers): - * - * " No aliasing in output buffers is allowed: It is a compile-time or - * link-time error to specify variables with overlapping transform - * feedback offsets." - */ - const unsigned max_components = - consts->MaxTransformFeedbackInterleavedComponents; - const unsigned first_component = xfb_offset; - const unsigned last_component = xfb_offset + num_components - 1; - const unsigned start_word = BITSET_BITWORD(first_component); - const unsigned end_word = BITSET_BITWORD(last_component); - BITSET_WORD *used; - assert(last_component < max_components); - - if (!used_components[buffer]) { - used_components[buffer] = - rzalloc_array(mem_ctx, BITSET_WORD, BITSET_WORDS(max_components)); - } - used = used_components[buffer]; - - for (unsigned word = start_word; word <= end_word; word++) { - unsigned start_range = 0; - unsigned end_range = BITSET_WORDBITS - 1; - - if (word == start_word) - start_range = first_component % BITSET_WORDBITS; - - if (word == end_word) - end_range = last_component % BITSET_WORDBITS; - - if (used[word] & BITSET_RANGE(start_range, end_range)) { - linker_error(prog, - "variable '%s', xfb_offset (%d) is causing aliasing.", - xfb_decl->orig_name, xfb_offset * 4); - return false; - } - used[word] |= BITSET_RANGE(start_range, end_range); - } - - const unsigned type_num_components = - xfb_decl->vector_elements * - (_mesa_gl_datatype_is_64bit(xfb_decl->type) ? 2 : 1); - unsigned current_type_components_left = type_num_components; - - while (num_components > 0) { - unsigned output_size = 0; - - /* From GL_ARB_enhanced_layouts: - * - * "When an attribute variable declared using an array type is bound to - * generic attribute index , the active array elements are assigned to - * consecutive generic attributes beginning with generic attribute . The - * number of attributes and components assigned to each element are - * determined according to the data type of array elements and "component" - * layout qualifier (if any) specified in the declaration of the array." - * - * "When an attribute variable declared using a matrix type is bound to a - * generic attribute index , its values are taken from consecutive generic - * attributes beginning with generic attribute . Such matrices are - * treated as an array of column vectors with values taken from the generic - * attributes. - * This means there may be gaps in the varyings we are taking values from." - * - * Examples: - * - * | layout(location=0) dvec3[2] a; | layout(location=4) vec2[4] b; | - * | | | - * | 32b 32b 32b 32b | 32b 32b 32b 32b | - * | 0 X X Y Y | 4 X Y 0 0 | - * | 1 Z Z 0 0 | 5 X Y 0 0 | - * | 2 X X Y Y | 6 X Y 0 0 | - * | 3 Z Z 0 0 | 7 X Y 0 0 | - * - */ - if (varying_has_user_specified_location(xfb_decl->matched_candidate->toplevel_var)) { - output_size = MIN3(num_components, current_type_components_left, 4); - current_type_components_left -= output_size; - if (current_type_components_left == 0) { - current_type_components_left = type_num_components; - } - } else { - output_size = MIN2(num_components, 4 - location_frac); - } - - assert((info->NumOutputs == 0 && max_outputs == 0) || - info->NumOutputs < max_outputs); - - /* From the ARB_enhanced_layouts spec: - * - * "If such a block member or variable is not written during a shader - * invocation, the buffer contents at the assigned offset will be - * undefined. Even if there are no static writes to a variable or - * member that is assigned a transform feedback offset, the space is - * still allocated in the buffer and still affects the stride." - */ - if (xfb_decl_is_varying_written(xfb_decl)) { - info->Outputs[info->NumOutputs].ComponentOffset = location_frac; - info->Outputs[info->NumOutputs].OutputRegister = location; - info->Outputs[info->NumOutputs].NumComponents = output_size; - info->Outputs[info->NumOutputs].StreamId = xfb_decl->stream_id; - info->Outputs[info->NumOutputs].OutputBuffer = buffer; - info->Outputs[info->NumOutputs].DstOffset = xfb_offset; - ++info->NumOutputs; - } - info->Buffers[buffer].Stream = xfb_decl->stream_id; - xfb_offset += output_size; - - num_components -= output_size; - location++; - location_frac = 0; - } - } - - if (explicit_stride && explicit_stride[buffer]) { - if (_mesa_gl_datatype_is_64bit(xfb_decl->type) && - info->Buffers[buffer].Stride % 2) { - linker_error(prog, "invalid qualifier xfb_stride=%d must be a " - "multiple of 8 as its applied to a type that is or " - "contains a double.", - info->Buffers[buffer].Stride * 4); - return false; - } - - if (xfb_offset > info->Buffers[buffer].Stride) { - linker_error(prog, "xfb_offset (%d) overflows xfb_stride (%d) for " - "buffer (%d)", xfb_offset * 4, - info->Buffers[buffer].Stride * 4, buffer); - return false; - } - } else { - if (max_member_alignment && has_xfb_qualifiers) { - max_member_alignment[buffer] = MAX2(max_member_alignment[buffer], - _mesa_gl_datatype_is_64bit(xfb_decl->type) ? 2 : 1); - info->Buffers[buffer].Stride = ALIGN(xfb_offset, - max_member_alignment[buffer]); - } else { - info->Buffers[buffer].Stride = xfb_offset; - } - } - - store_varying: - info->Varyings[info->NumVarying].name.string = - ralloc_strdup(prog, xfb_decl->orig_name); - resource_name_updated(&info->Varyings[info->NumVarying].name); - info->Varyings[info->NumVarying].Type = xfb_decl->type; - info->Varyings[info->NumVarying].Size = size; - info->Varyings[info->NumVarying].BufferIndex = buffer_index; - info->NumVarying++; - info->Buffers[buffer].NumVaryings++; - - return true; -} - -static const struct tfeedback_candidate * -xfb_decl_find_candidate(struct xfb_decl *xfb_decl, - struct gl_shader_program *prog, - struct hash_table *tfeedback_candidates) -{ - const char *name = xfb_decl->var_name; - switch (xfb_decl->lowered_builtin_array_variable) { - case none: - name = xfb_decl->var_name; - break; - case clip_distance: - case cull_distance: - name = "gl_ClipDistanceMESA"; - break; - } - struct hash_entry *entry = - _mesa_hash_table_search(tfeedback_candidates, name); - - xfb_decl->matched_candidate = entry ? - (struct tfeedback_candidate *) entry->data : NULL; - - if (!xfb_decl->matched_candidate) { - /* From GL_EXT_transform_feedback: - * A program will fail to link if: - * - * * any variable name specified in the array is not - * declared as an output in the geometry shader (if present) or - * the vertex shader (if no geometry shader is present); - */ - linker_error(prog, "Transform feedback varying %s undeclared.", - xfb_decl->orig_name); - } - - return xfb_decl->matched_candidate; -} - -/** - * Force a candidate over the previously matched one. It happens when a new - * varying needs to be created to match the xfb declaration, for example, - * to fullfil an alignment criteria. - */ -static void -xfb_decl_set_lowered_candidate(struct xfb_decl *xfb_decl, - struct tfeedback_candidate *candidate) -{ - xfb_decl->matched_candidate = candidate; - - /* The subscript part is no longer relevant */ - xfb_decl->is_subscripted = false; - xfb_decl->array_subscript = 0; -} - -/** - * Parse all the transform feedback declarations that were passed to - * glTransformFeedbackVaryings() and store them in xfb_decl objects. - * - * If an error occurs, the error is reported through linker_error() and false - * is returned. - */ -static bool -parse_xfb_decls(const struct gl_constants *consts, - const struct gl_extensions *exts, - struct gl_shader_program *prog, - const void *mem_ctx, unsigned num_names, - char **varying_names, struct xfb_decl *decls) -{ - for (unsigned i = 0; i < num_names; ++i) { - xfb_decl_init(&decls[i], consts, exts, mem_ctx, varying_names[i]); - - if (!xfb_decl_is_varying(&decls[i])) - continue; - - /* From GL_EXT_transform_feedback: - * A program will fail to link if: - * - * * any two entries in the array specify the same varying - * variable; - * - * We interpret this to mean "any two entries in the array - * specify the same varying variable and array index", since transform - * feedback of arrays would be useless otherwise. - */ - for (unsigned j = 0; j < i; ++j) { - if (xfb_decl_is_varying(&decls[j])) { - if (xfb_decl_is_same(&decls[i], &decls[j])) { - linker_error(prog, "Transform feedback varying %s specified " - "more than once.", varying_names[i]); - return false; - } - } - } - } - return true; -} - -static int -cmp_xfb_offset(const void * x_generic, const void * y_generic) -{ - struct xfb_decl *x = (struct xfb_decl *) x_generic; - struct xfb_decl *y = (struct xfb_decl *) y_generic; - - if (x->buffer != y->buffer) - return x->buffer - y->buffer; - return x->offset - y->offset; -} - -/** - * Store transform feedback location assignments into - * prog->sh.LinkedTransformFeedback based on the data stored in - * xfb_decls. - * - * If an error occurs, the error is reported through linker_error() and false - * is returned. - */ -static bool -store_tfeedback_info(const struct gl_constants *consts, - struct gl_shader_program *prog, unsigned num_xfb_decls, - struct xfb_decl *xfb_decls, bool has_xfb_qualifiers, - const void *mem_ctx) -{ - if (!prog->last_vert_prog) - return true; - - /* Make sure MaxTransformFeedbackBuffers is less than 32 so the bitmask for - * tracking the number of buffers doesn't overflow. - */ - assert(consts->MaxTransformFeedbackBuffers < 32); - - bool separate_attribs_mode = - prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS; - - struct gl_program *xfb_prog = prog->last_vert_prog; - xfb_prog->sh.LinkedTransformFeedback = - rzalloc(xfb_prog, struct gl_transform_feedback_info); - - /* The xfb_offset qualifier does not have to be used in increasing order - * however some drivers expect to receive the list of transform feedback - * declarations in order so sort it now for convenience. - */ - if (has_xfb_qualifiers) { - qsort(xfb_decls, num_xfb_decls, sizeof(*xfb_decls), - cmp_xfb_offset); - } - - xfb_prog->sh.LinkedTransformFeedback->Varyings = - rzalloc_array(xfb_prog, struct gl_transform_feedback_varying_info, - num_xfb_decls); - - unsigned num_outputs = 0; - for (unsigned i = 0; i < num_xfb_decls; ++i) { - if (xfb_decl_is_varying_written(&xfb_decls[i])) - num_outputs += xfb_decl_get_num_outputs(&xfb_decls[i]); - } - - xfb_prog->sh.LinkedTransformFeedback->Outputs = - rzalloc_array(xfb_prog, struct gl_transform_feedback_output, - num_outputs); - - unsigned num_buffers = 0; - unsigned buffers = 0; - BITSET_WORD *used_components[MAX_FEEDBACK_BUFFERS] = {0}; - - if (!has_xfb_qualifiers && separate_attribs_mode) { - /* GL_SEPARATE_ATTRIBS */ - for (unsigned i = 0; i < num_xfb_decls; ++i) { - if (!xfb_decl_store(&xfb_decls[i], consts, prog, - xfb_prog->sh.LinkedTransformFeedback, - num_buffers, num_buffers, num_outputs, - used_components, NULL, NULL, has_xfb_qualifiers, - mem_ctx)) - return false; - - buffers |= 1 << num_buffers; - num_buffers++; - } - } - else { - /* GL_INVERLEAVED_ATTRIBS */ - int buffer_stream_id = -1; - unsigned buffer = - num_xfb_decls ? xfb_decls[0].buffer : 0; - bool explicit_stride[MAX_FEEDBACK_BUFFERS] = { false }; - unsigned max_member_alignment[MAX_FEEDBACK_BUFFERS] = { 1, 1, 1, 1 }; - /* Apply any xfb_stride global qualifiers */ - if (has_xfb_qualifiers) { - for (unsigned j = 0; j < MAX_FEEDBACK_BUFFERS; j++) { - if (prog->TransformFeedback.BufferStride[j]) { - explicit_stride[j] = true; - xfb_prog->sh.LinkedTransformFeedback->Buffers[j].Stride = - prog->TransformFeedback.BufferStride[j] / 4; - } - } - } - - for (unsigned i = 0; i < num_xfb_decls; ++i) { - if (has_xfb_qualifiers && - buffer != xfb_decls[i].buffer) { - /* we have moved to the next buffer so reset stream id */ - buffer_stream_id = -1; - num_buffers++; - } - - if (xfb_decls[i].next_buffer_separator) { - if (!xfb_decl_store(&xfb_decls[i], consts, prog, - xfb_prog->sh.LinkedTransformFeedback, - buffer, num_buffers, num_outputs, - used_components, explicit_stride, - max_member_alignment, has_xfb_qualifiers, - mem_ctx)) - return false; - num_buffers++; - buffer_stream_id = -1; - continue; - } - - if (has_xfb_qualifiers) { - buffer = xfb_decls[i].buffer; - } else { - buffer = num_buffers; - } - - if (xfb_decl_is_varying(&xfb_decls[i])) { - if (buffer_stream_id == -1) { - /* First varying writing to this buffer: remember its stream */ - buffer_stream_id = (int) xfb_decls[i].stream_id; - - /* Only mark a buffer as active when there is a varying - * attached to it. This behaviour is based on a revised version - * of section 13.2.2 of the GL 4.6 spec. - */ - buffers |= 1 << buffer; - } else if (buffer_stream_id != - (int) xfb_decls[i].stream_id) { - /* Varying writes to the same buffer from a different stream */ - linker_error(prog, - "Transform feedback can't capture varyings belonging " - "to different vertex streams in a single buffer. " - "Varying %s writes to buffer from stream %u, other " - "varyings in the same buffer write from stream %u.", - xfb_decls[i].orig_name, - xfb_decls[i].stream_id, - buffer_stream_id); - return false; - } - } - - if (!xfb_decl_store(&xfb_decls[i], consts, prog, - xfb_prog->sh.LinkedTransformFeedback, - buffer, num_buffers, num_outputs, used_components, - explicit_stride, max_member_alignment, - has_xfb_qualifiers, mem_ctx)) - return false; - } - } - assert(xfb_prog->sh.LinkedTransformFeedback->NumOutputs == num_outputs); - - xfb_prog->sh.LinkedTransformFeedback->ActiveBuffers = buffers; - return true; -} - -/** - * Enum representing the order in which varyings are packed within a - * packing class. - * - * Currently we pack vec4's first, then vec2's, then scalar values, then - * vec3's. This order ensures that the only vectors that are at risk of - * having to be "double parked" (split between two adjacent varying slots) - * are the vec3's. - */ -enum packing_order_enum { - PACKING_ORDER_VEC4, - PACKING_ORDER_VEC2, - PACKING_ORDER_SCALAR, - PACKING_ORDER_VEC3, -}; - -/** - * Structure recording the relationship between a single producer output - * and a single consumer input. - */ -struct match { - /** - * Packing class for this varying, computed by compute_packing_class(). - */ - unsigned packing_class; - - /** - * Packing order for this varying, computed by compute_packing_order(). - */ - enum packing_order_enum packing_order; - - /** - * The output variable in the producer stage. - */ - nir_variable *producer_var; - - /** - * The input variable in the consumer stage. - */ - nir_variable *consumer_var; - - /** - * The location which has been assigned for this varying. This is - * expressed in multiples of a float, with the first generic varying - * (i.e. the one referred to by VARYING_SLOT_VAR0) represented by the - * value 0. - */ - unsigned generic_location; -}; - -/** - * Data structure recording the relationship between outputs of one shader - * stage (the "producer") and inputs of another (the "consumer"). - */ -struct varying_matches -{ - /** - * If true, this driver disables varying packing, so all varyings need to - * be aligned on slot boundaries, and take up a number of slots equal to - * their number of matrix columns times their array size. - * - * Packing may also be disabled because our current packing method is not - * safe in SSO or versions of OpenGL where interpolation qualifiers are not - * guaranteed to match across stages. - */ - bool disable_varying_packing; - - /** - * If true, this driver disables packing for varyings used by transform - * feedback. - */ - bool disable_xfb_packing; - - /** - * If true, this driver has transform feedback enabled. The transform - * feedback code usually requires at least some packing be done even - * when varying packing is disabled, fortunately where transform feedback - * requires packing it's safe to override the disabled setting. See - * is_varying_packing_safe(). - */ - bool xfb_enabled; - - bool enhanced_layouts_enabled; - - /** - * If true, this driver prefers varyings to be aligned to power of two - * in a slot. - */ - bool prefer_pot_aligned_varyings; - - struct match *matches; - - /** - * The number of elements in the \c matches array that are currently in - * use. - */ - unsigned num_matches; - - /** - * The number of elements that were set aside for the \c matches array when - * it was allocated. - */ - unsigned matches_capacity; - - gl_shader_stage producer_stage; - gl_shader_stage consumer_stage; -}; - -/** - * Comparison function passed to qsort() to sort varyings by packing_class and - * then by packing_order. - */ -static int -varying_matches_match_comparator(const void *x_generic, const void *y_generic) -{ - const struct match *x = (const struct match *) x_generic; - const struct match *y = (const struct match *) y_generic; - - if (x->packing_class != y->packing_class) - return x->packing_class - y->packing_class; - return x->packing_order - y->packing_order; -} - -/** - * Comparison function passed to qsort() to sort varyings used only by - * transform feedback when packing of other varyings is disabled. - */ -static int -varying_matches_xfb_comparator(const void *x_generic, const void *y_generic) -{ - const struct match *x = (const struct match *) x_generic; - - if (x->producer_var != NULL && x->producer_var->data.is_xfb_only) - return varying_matches_match_comparator(x_generic, y_generic); - - /* FIXME: When the comparator returns 0 it means the elements being - * compared are equivalent. However the qsort documentation says: - * - * "The order of equivalent elements is undefined." - * - * In practice the sort ends up reversing the order of the varyings which - * means locations are also assigned in this reversed order and happens to - * be what we want. This is also whats happening in - * varying_matches_match_comparator(). - */ - return 0; -} - -/** - * Comparison function passed to qsort() to sort varyings NOT used by - * transform feedback when packing of xfb varyings is disabled. - */ -static int -varying_matches_not_xfb_comparator(const void *x_generic, const void *y_generic) -{ - const struct match *x = (const struct match *) x_generic; - - if (x->producer_var != NULL && !x->producer_var->data.is_xfb) - return varying_matches_match_comparator(x_generic, y_generic); - - /* FIXME: When the comparator returns 0 it means the elements being - * compared are equivalent. However the qsort documentation says: - * - * "The order of equivalent elements is undefined." - * - * In practice the sort ends up reversing the order of the varyings which - * means locations are also assigned in this reversed order and happens to - * be what we want. This is also whats happening in - * varying_matches_match_comparator(). - */ - return 0; -} - -static bool -is_unpackable_tess(gl_shader_stage producer_stage, - gl_shader_stage consumer_stage) -{ - if (consumer_stage == MESA_SHADER_TESS_EVAL || - consumer_stage == MESA_SHADER_TESS_CTRL || - producer_stage == MESA_SHADER_TESS_CTRL) - return true; - - return false; -} - -static void -init_varying_matches(void *mem_ctx, struct varying_matches *vm, - const struct gl_constants *consts, - const struct gl_extensions *exts, - gl_shader_stage producer_stage, - gl_shader_stage consumer_stage, - bool sso) -{ - /* Tessellation shaders treat inputs and outputs as shared memory and can - * access inputs and outputs of other invocations. - * Therefore, they can't be lowered to temps easily (and definitely not - * efficiently). - */ - bool unpackable_tess = - is_unpackable_tess(producer_stage, consumer_stage); - - /* Transform feedback code assumes varying arrays are packed, so if the - * driver has disabled varying packing, make sure to at least enable - * packing required by transform feedback. See below for exception. - */ - bool xfb_enabled = exts->EXT_transform_feedback && !unpackable_tess; - - /* Some drivers actually requires packing to be explicitly disabled - * for varyings used by transform feedback. - */ - bool disable_xfb_packing = consts->DisableTransformFeedbackPacking; - - /* Disable packing on outward facing interfaces for SSO because in ES we - * need to retain the unpacked varying information for draw time - * validation. - * - * Packing is still enabled on individual arrays, structs, and matrices as - * these are required by the transform feedback code and it is still safe - * to do so. We also enable packing when a varying is only used for - * transform feedback and its not a SSO. - */ - bool disable_varying_packing = - consts->DisableVaryingPacking || unpackable_tess; - if (sso && (producer_stage == MESA_SHADER_NONE || consumer_stage == MESA_SHADER_NONE)) - disable_varying_packing = true; - - /* Note: this initial capacity is rather arbitrarily chosen to be large - * enough for many cases without wasting an unreasonable amount of space. - * varying_matches_record() will resize the array if there are more than - * this number of varyings. - */ - vm->matches_capacity = 8; - vm->matches = (struct match *) - ralloc_array(mem_ctx, struct match, vm->matches_capacity); - vm->num_matches = 0; - - vm->disable_varying_packing = disable_varying_packing; - vm->disable_xfb_packing = disable_xfb_packing; - vm->xfb_enabled = xfb_enabled; - vm->enhanced_layouts_enabled = exts->ARB_enhanced_layouts; - vm->prefer_pot_aligned_varyings = consts->PreferPOTAlignedVaryings; - vm->producer_stage = producer_stage; - vm->consumer_stage = consumer_stage; -} - -/** - * Packing is always safe on individual arrays, structures, and matrices. It - * is also safe if the varying is only used for transform feedback. - */ -static bool -is_varying_packing_safe(struct varying_matches *vm, - const struct glsl_type *type, const nir_variable *var) -{ - if (is_unpackable_tess(vm->producer_stage, vm->consumer_stage)) - return false; - - return vm->xfb_enabled && (glsl_type_is_array_or_matrix(type) || - glsl_type_is_struct(type) || - var->data.is_xfb_only); -} - -static bool -is_packing_disabled(struct varying_matches *vm, const struct glsl_type *type, - const nir_variable *var) -{ - return (vm->disable_varying_packing && !is_varying_packing_safe(vm, type, var)) || - (vm->disable_xfb_packing && var->data.is_xfb && - !(glsl_type_is_array(type) || glsl_type_is_struct(type) || - glsl_type_is_matrix(type))) || var->data.must_be_shader_input; -} - -/** - * Compute the "packing class" of the given varying. This is an unsigned - * integer with the property that two variables in the same packing class can - * be safely backed into the same vec4. - */ -static unsigned -varying_matches_compute_packing_class(const nir_variable *var) -{ - /* Without help from the back-end, there is no way to pack together - * variables with different interpolation types, because - * lower_packed_varyings must choose exactly one interpolation type for - * each packed varying it creates. - * - * However, we can safely pack together floats, ints, and uints, because: - * - * - varyings of base type "int" and "uint" must use the "flat" - * interpolation type, which can only occur in GLSL 1.30 and above. - * - * - On platforms that support GLSL 1.30 and above, lower_packed_varyings - * can store flat floats as ints without losing any information (using - * the ir_unop_bitcast_* opcodes). - * - * Therefore, the packing class depends only on the interpolation type. - */ - bool is_interpolation_flat = var->data.interpolation == INTERP_MODE_FLAT || - glsl_contains_integer(var->type) || glsl_contains_double(var->type); - - const unsigned interp = is_interpolation_flat - ? (unsigned) INTERP_MODE_FLAT : var->data.interpolation; - - assert(interp < (1 << 3)); - - const unsigned packing_class = (interp << 0) | - (var->data.centroid << 3) | - (var->data.sample << 4) | - (var->data.patch << 5) | - (var->data.must_be_shader_input << 6); - - return packing_class; -} - -/** - * Compute the "packing order" of the given varying. This is a sort key we - * use to determine when to attempt to pack the given varying relative to - * other varyings in the same packing class. - */ -static enum packing_order_enum -varying_matches_compute_packing_order(const nir_variable *var) -{ - const struct glsl_type *element_type = glsl_without_array(var->type); - - switch (glsl_get_component_slots(element_type) % 4) { - case 1: return PACKING_ORDER_SCALAR; - case 2: return PACKING_ORDER_VEC2; - case 3: return PACKING_ORDER_VEC3; - case 0: return PACKING_ORDER_VEC4; - default: - assert(!"Unexpected value of vector_elements"); - return PACKING_ORDER_VEC4; - } -} - -/** - * Built-in / reserved GL variables names start with "gl_" - */ -static bool -is_gl_identifier(const char *s) -{ - return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_'; -} - -/** - * Record the given producer/consumer variable pair in the list of variables - * that should later be assigned locations. - * - * It is permissible for \c consumer_var to be NULL (this happens if a - * variable is output by the producer and consumed by transform feedback, but - * not consumed by the consumer). - * - * If \c producer_var has already been paired up with a consumer_var, or - * producer_var is part of fixed pipeline functionality (and hence already has - * a location assigned), this function has no effect. - * - * Note: as a side effect this function may change the interpolation type of - * \c producer_var, but only when the change couldn't possibly affect - * rendering. - */ -static void -varying_matches_record(void *mem_ctx, struct varying_matches *vm, - nir_variable *producer_var, nir_variable *consumer_var) -{ - assert(producer_var != NULL || consumer_var != NULL); - - if ((producer_var && - (producer_var->data.explicit_location || producer_var->data.location != -1)) || - (consumer_var && - (consumer_var->data.explicit_location || consumer_var->data.location != -1))) { - /* Either a location already exists for this variable (since it is part - * of fixed functionality), or it has already been assigned explicitly. - */ - return; - } - - /* The varyings should not have been matched and assgned previously */ - assert((producer_var == NULL || producer_var->data.location == -1) && - (consumer_var == NULL || consumer_var->data.location == -1)); - - bool needs_flat_qualifier = consumer_var == NULL && - (glsl_contains_integer(producer_var->type) || - glsl_contains_double(producer_var->type)); - - if (!vm->disable_varying_packing && - (!vm->disable_xfb_packing || producer_var == NULL || !producer_var->data.is_xfb) && - (needs_flat_qualifier || - (vm->consumer_stage != MESA_SHADER_NONE && vm->consumer_stage != MESA_SHADER_FRAGMENT))) { - /* Since this varying is not being consumed by the fragment shader, its - * interpolation type varying cannot possibly affect rendering. - * Also, this variable is non-flat and is (or contains) an integer - * or a double. - * If the consumer stage is unknown, don't modify the interpolation - * type as it could affect rendering later with separate shaders. - * - * lower_packed_varyings requires all integer varyings to flat, - * regardless of where they appear. We can trivially satisfy that - * requirement by changing the interpolation type to flat here. - */ - if (producer_var) { - producer_var->data.centroid = false; - producer_var->data.sample = false; - producer_var->data.interpolation = INTERP_MODE_FLAT; - } - - if (consumer_var) { - consumer_var->data.centroid = false; - consumer_var->data.sample = false; - consumer_var->data.interpolation = INTERP_MODE_FLAT; - } - } - - if (vm->num_matches == vm->matches_capacity) { - vm->matches_capacity *= 2; - vm->matches = (struct match *) - reralloc(mem_ctx, vm->matches, struct match, vm->matches_capacity); - } - - /* We must use the consumer to compute the packing class because in GL4.4+ - * there is no guarantee interpolation qualifiers will match across stages. - * - * From Section 4.5 (Interpolation Qualifiers) of the GLSL 4.30 spec: - * - * "The type and presence of interpolation qualifiers of variables with - * the same name declared in all linked shaders for the same cross-stage - * interface must match, otherwise the link command will fail. - * - * When comparing an output from one stage to an input of a subsequent - * stage, the input and output don't match if their interpolation - * qualifiers (or lack thereof) are not the same." - * - * This text was also in at least revison 7 of the 4.40 spec but is no - * longer in revision 9 and not in the 4.50 spec. - */ - const nir_variable *const var = (consumer_var != NULL) - ? consumer_var : producer_var; - - if (producer_var && consumer_var && - consumer_var->data.must_be_shader_input) { - producer_var->data.must_be_shader_input = 1; - } - - vm->matches[vm->num_matches].packing_class - = varying_matches_compute_packing_class(var); - vm->matches[vm->num_matches].packing_order - = varying_matches_compute_packing_order(var); - - vm->matches[vm->num_matches].producer_var = producer_var; - vm->matches[vm->num_matches].consumer_var = consumer_var; - vm->num_matches++; -} - -/** - * Choose locations for all of the variable matches that were previously - * passed to varying_matches_record(). - * \param components returns array[slot] of number of components used - * per slot (1, 2, 3 or 4) - * \param reserved_slots bitmask indicating which varying slots are already - * allocated - * \return number of slots (4-element vectors) allocated - */ -static unsigned -varying_matches_assign_locations(struct varying_matches *vm, - struct gl_shader_program *prog, - uint8_t components[], uint64_t reserved_slots) -{ - /* If packing has been disabled then we cannot safely sort the varyings by - * class as it may mean we are using a version of OpenGL where - * interpolation qualifiers are not guaranteed to be matching across - * shaders, sorting in this case could result in mismatching shader - * interfaces. - * When packing is disabled the sort orders varyings used by transform - * feedback first, but also depends on *undefined behaviour* of qsort to - * reverse the order of the varyings. See: xfb_comparator(). - * - * If packing is only disabled for xfb varyings (mutually exclusive with - * disable_varying_packing), we then group varyings depending on if they - * are captured for transform feedback. The same *undefined behaviour* is - * taken advantage of. - */ - if (vm->disable_varying_packing) { - /* Only sort varyings that are only used by transform feedback. */ - qsort(vm->matches, vm->num_matches, sizeof(*vm->matches), - &varying_matches_xfb_comparator); - } else if (vm->disable_xfb_packing) { - /* Only sort varyings that are NOT used by transform feedback. */ - qsort(vm->matches, vm->num_matches, sizeof(*vm->matches), - &varying_matches_not_xfb_comparator); - } else { - /* Sort varying matches into an order that makes them easy to pack. */ - qsort(vm->matches, vm->num_matches, sizeof(*vm->matches), - &varying_matches_match_comparator); - } - - unsigned generic_location = 0; - unsigned generic_patch_location = MAX_VARYING*4; - bool previous_var_xfb = false; - bool previous_var_xfb_only = false; - unsigned previous_packing_class = ~0u; - - /* For tranform feedback separate mode, we know the number of attributes - * is <= the number of buffers. So packing isn't critical. In fact, - * packing vec3 attributes can cause trouble because splitting a vec3 - * effectively creates an additional transform feedback output. The - * extra TFB output may exceed device driver limits. - * - * Also don't pack vec3 if the driver prefers power of two aligned - * varyings. Packing order guarantees that vec4, vec2 and vec1 will be - * pot-aligned, we only need to take care of vec3s - */ - const bool dont_pack_vec3 = - (prog->TransformFeedback.BufferMode == GL_SEPARATE_ATTRIBS && - prog->TransformFeedback.NumVarying > 0) || - vm->prefer_pot_aligned_varyings; - - for (unsigned i = 0; i < vm->num_matches; i++) { - unsigned *location = &generic_location; - const nir_variable *var; - const struct glsl_type *type; - bool is_vertex_input = false; - - if (vm->matches[i].consumer_var) { - var = vm->matches[i].consumer_var; - type = get_varying_type(var, vm->consumer_stage); - if (vm->consumer_stage == MESA_SHADER_VERTEX) - is_vertex_input = true; - } else { - if (!vm->matches[i].producer_var) - continue; /* The varying was optimised away */ - - var = vm->matches[i].producer_var; - type = get_varying_type(var, vm->producer_stage); - } - - if (var->data.patch) - location = &generic_patch_location; - - /* Advance to the next slot if this varying has a different packing - * class than the previous one, and we're not already on a slot - * boundary. - * - * Also advance if varying packing is disabled for transform feedback, - * and previous or current varying is used for transform feedback. - * - * Also advance to the next slot if packing is disabled. This makes sure - * we don't assign varyings the same locations which is possible - * because we still pack individual arrays, records and matrices even - * when packing is disabled. Note we don't advance to the next slot if - * we can pack varyings together that are only used for transform - * feedback. - */ - if (var->data.must_be_shader_input || - (vm->disable_xfb_packing && - (previous_var_xfb || var->data.is_xfb)) || - (vm->disable_varying_packing && - !(previous_var_xfb_only && var->data.is_xfb_only)) || - (previous_packing_class != vm->matches[i].packing_class) || - (vm->matches[i].packing_order == PACKING_ORDER_VEC3 && - dont_pack_vec3)) { - *location = ALIGN(*location, 4); - } - - previous_var_xfb = var->data.is_xfb; - previous_var_xfb_only = var->data.is_xfb_only; - previous_packing_class = vm->matches[i].packing_class; - - /* The number of components taken up by this variable. For vertex shader - * inputs, we use the number of slots * 4, as they have different - * counting rules. - */ - unsigned num_components = 0; - if (is_vertex_input) { - num_components = glsl_count_attribute_slots(type, is_vertex_input) * 4; - } else { - if (is_packing_disabled(vm, type, var)) { - num_components = glsl_count_attribute_slots(type, false) * 4; - } else { - num_components = glsl_get_component_slots_aligned(type, *location); - } - } - - /* The last slot for this variable, inclusive. */ - unsigned slot_end = *location + num_components - 1; - - /* FIXME: We could be smarter in the below code and loop back over - * trying to fill any locations that we skipped because we couldn't pack - * the varying between an explicit location. For now just let the user - * hit the linking error if we run out of room and suggest they use - * explicit locations. - */ - while (slot_end < MAX_VARYING * 4u) { - const unsigned slots = (slot_end / 4u) - (*location / 4u) + 1; - const uint64_t slot_mask = ((1ull << slots) - 1) << (*location / 4u); - - assert(slots > 0); - - if ((reserved_slots & slot_mask) == 0) { - break; - } - - *location = ALIGN(*location + 1, 4); - slot_end = *location + num_components - 1; - } - - if (!var->data.patch && slot_end >= MAX_VARYING * 4u) { - linker_error(prog, "insufficient contiguous locations available for " - "%s it is possible an array or struct could not be " - "packed between varyings with explicit locations. Try " - "using an explicit location for arrays and structs.", - var->name); - } - - if (slot_end < MAX_VARYINGS_INCL_PATCH * 4u) { - for (unsigned j = *location / 4u; j < slot_end / 4u; j++) - components[j] = 4; - components[slot_end / 4u] = (slot_end & 3) + 1; - } - - vm->matches[i].generic_location = *location; - - *location = slot_end + 1; - } - - return (generic_location + 3) / 4; -} - -static void -varying_matches_assign_temp_locations(struct varying_matches *vm, - struct gl_shader_program *prog, - uint64_t reserved_slots) -{ - unsigned tmp_loc = 0; - for (unsigned i = 0; i < vm->num_matches; i++) { - nir_variable *producer_var = vm->matches[i].producer_var; - nir_variable *consumer_var = vm->matches[i].consumer_var; - - while (tmp_loc < MAX_VARYINGS_INCL_PATCH) { - if (reserved_slots & (UINT64_C(1) << tmp_loc)) - tmp_loc++; - else - break; - } - - if (producer_var) { - assert(producer_var->data.location == -1); - producer_var->data.location = VARYING_SLOT_VAR0 + tmp_loc; - } - - if (consumer_var) { - assert(consumer_var->data.location == -1); - consumer_var->data.location = VARYING_SLOT_VAR0 + tmp_loc; - } - - tmp_loc++; - } -} - -/** - * Update the producer and consumer shaders to reflect the locations - * assignments that were made by varying_matches_assign_locations(). - */ -static void -varying_matches_store_locations(struct varying_matches *vm) -{ - /* Check is location needs to be packed with lower_packed_varyings() or if - * we can just use ARB_enhanced_layouts packing. - */ - bool pack_loc[MAX_VARYINGS_INCL_PATCH] = {0}; - const struct glsl_type *loc_type[MAX_VARYINGS_INCL_PATCH][4] = { {NULL, NULL} }; - - for (unsigned i = 0; i < vm->num_matches; i++) { - nir_variable *producer_var = vm->matches[i].producer_var; - nir_variable *consumer_var = vm->matches[i].consumer_var; - unsigned generic_location = vm->matches[i].generic_location; - unsigned slot = generic_location / 4; - unsigned offset = generic_location % 4; - - if (producer_var) { - producer_var->data.location = VARYING_SLOT_VAR0 + slot; - producer_var->data.location_frac = offset; - } - - if (consumer_var) { - consumer_var->data.location = VARYING_SLOT_VAR0 + slot; - consumer_var->data.location_frac = offset; - } - - /* Find locations suitable for native packing via - * ARB_enhanced_layouts. - */ - if (vm->enhanced_layouts_enabled) { - nir_variable *var = producer_var ? producer_var : consumer_var; - unsigned stage = producer_var ? vm->producer_stage : vm->consumer_stage; - const struct glsl_type *type = - get_varying_type(var, stage); - unsigned comp_slots = glsl_get_component_slots(type) + offset; - unsigned slots = comp_slots / 4; - if (comp_slots % 4) - slots += 1; - - if (producer_var && consumer_var) { - if (glsl_type_is_array_or_matrix(type) || glsl_type_is_struct(type) || - glsl_type_is_64bit(type)) { - for (unsigned j = 0; j < slots; j++) { - pack_loc[slot + j] = true; - } - } else if (offset + glsl_get_vector_elements(type) > 4) { - pack_loc[slot] = true; - pack_loc[slot + 1] = true; - } else { - loc_type[slot][offset] = type; - } - } else { - for (unsigned j = 0; j < slots; j++) { - pack_loc[slot + j] = true; - } - } - } - } - - /* Attempt to use ARB_enhanced_layouts for more efficient packing if - * suitable. - */ - if (vm->enhanced_layouts_enabled) { - for (unsigned i = 0; i < vm->num_matches; i++) { - nir_variable *producer_var = vm->matches[i].producer_var; - nir_variable *consumer_var = vm->matches[i].consumer_var; - if (!producer_var || !consumer_var) - continue; - - unsigned generic_location = vm->matches[i].generic_location; - unsigned slot = generic_location / 4; - if (pack_loc[slot]) - continue; - - const struct glsl_type *type = - get_varying_type(producer_var, vm->producer_stage); - bool type_match = true; - for (unsigned j = 0; j < 4; j++) { - if (loc_type[slot][j]) { - if (glsl_get_base_type(type) != - glsl_get_base_type(loc_type[slot][j])) - type_match = false; - } - } - - if (type_match) { - producer_var->data.explicit_location = 1; - consumer_var->data.explicit_location = 1; - } - } - } -} - -/** - * Is the given variable a varying variable to be counted against the - * limit in ctx->Const.MaxVarying? - * This includes variables such as texcoords, colors and generic - * varyings, but excludes variables such as gl_FrontFacing and gl_FragCoord. - */ -static bool -var_counts_against_varying_limit(gl_shader_stage stage, const nir_variable *var) -{ - /* Only fragment shaders will take a varying variable as an input */ - if (stage == MESA_SHADER_FRAGMENT && - var->data.mode == nir_var_shader_in) { - switch (var->data.location) { - case VARYING_SLOT_POS: - case VARYING_SLOT_FACE: - case VARYING_SLOT_PNTC: - return false; - default: - return true; - } - } - return false; -} - -struct tfeedback_candidate_generator_state { - /** - * Memory context used to allocate hash table keys and values. - */ - void *mem_ctx; - - /** - * Hash table in which tfeedback_candidate objects should be stored. - */ - struct hash_table *tfeedback_candidates; - - gl_shader_stage stage; - - /** - * Pointer to the toplevel variable that is being traversed. - */ - nir_variable *toplevel_var; - - /** - * Total number of varying floats that have been visited so far. This is - * used to determine the offset to each varying within the toplevel - * variable. - */ - unsigned varying_floats; - - /** - * Offset within the xfb. Counted in floats. - */ - unsigned xfb_offset_floats; -}; - -/** - * Generates tfeedback_candidate structs describing all possible targets of - * transform feedback. - * - * tfeedback_candidate structs are stored in the hash table - * tfeedback_candidates. This hash table maps varying names to instances of the - * tfeedback_candidate struct. - */ -static void -tfeedback_candidate_generator(struct tfeedback_candidate_generator_state *state, - char **name, size_t name_length, - const struct glsl_type *type, - const struct glsl_struct_field *named_ifc_member) -{ - switch (glsl_get_base_type(type)) { - case GLSL_TYPE_INTERFACE: - if (named_ifc_member) { - ralloc_asprintf_rewrite_tail(name, &name_length, ".%s", - named_ifc_member->name); - tfeedback_candidate_generator(state, name, name_length, - named_ifc_member->type, NULL); - return; - } - - case GLSL_TYPE_STRUCT: - for (unsigned i = 0; i < glsl_get_length(type); i++) { - size_t new_length = name_length; - - /* Append '.field' to the current variable name. */ - if (name) { - ralloc_asprintf_rewrite_tail(name, &new_length, ".%s", - glsl_get_struct_elem_name(type, i)); - } - - tfeedback_candidate_generator(state, name, new_length, - glsl_get_struct_field(type, i), NULL); - } - - return; - case GLSL_TYPE_ARRAY: - if (glsl_type_is_struct(glsl_without_array(type)) || - glsl_type_is_interface(glsl_without_array(type)) || - glsl_type_is_array(glsl_get_array_element(type))) { - - for (unsigned i = 0; i < glsl_get_length(type); i++) { - size_t new_length = name_length; - - /* Append the subscript to the current variable name */ - ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i); - - tfeedback_candidate_generator(state, name, new_length, - glsl_get_array_element(type), - named_ifc_member); - } - - return; - } - - default: - assert(!glsl_type_is_struct(glsl_without_array(type))); - assert(!glsl_type_is_interface(glsl_without_array(type))); - - struct tfeedback_candidate *candidate - = rzalloc(state->mem_ctx, struct tfeedback_candidate); - candidate->toplevel_var = state->toplevel_var; - candidate->type = type; - - if (glsl_type_is_64bit(glsl_without_array(type))) { - /* From ARB_gpu_shader_fp64: - * - * If any variable captured in transform feedback has double-precision - * components, the practical requirements for defined behavior are: - * ... - * (c) each double-precision variable captured must be aligned to a - * multiple of eight bytes relative to the beginning of a vertex. - */ - state->xfb_offset_floats = ALIGN(state->xfb_offset_floats, 2); - /* 64-bit members of structs are also aligned. */ - state->varying_floats = ALIGN(state->varying_floats, 2); - } - - candidate->xfb_offset_floats = state->xfb_offset_floats; - candidate->struct_offset_floats = state->varying_floats; - - _mesa_hash_table_insert(state->tfeedback_candidates, - ralloc_strdup(state->mem_ctx, *name), - candidate); - - const unsigned component_slots = glsl_get_component_slots(type); - - if (varying_has_user_specified_location(state->toplevel_var)) { - state->varying_floats += glsl_count_attribute_slots(type, false) * 4; - } else { - state->varying_floats += component_slots; - } - - state->xfb_offset_floats += component_slots; - } -} - -static void -populate_consumer_input_sets(void *mem_ctx, nir_shader *nir, - struct hash_table *consumer_inputs, - struct hash_table *consumer_interface_inputs, - nir_variable *consumer_inputs_with_locations[VARYING_SLOT_TESS_MAX]) -{ - memset(consumer_inputs_with_locations, 0, - sizeof(consumer_inputs_with_locations[0]) * VARYING_SLOT_TESS_MAX); - - nir_foreach_shader_in_variable(input_var, nir) { - /* All interface blocks should have been lowered by this point */ - assert(!glsl_type_is_interface(input_var->type)); - - if (input_var->data.explicit_location) { - /* assign_varying_locations only cares about finding the - * nir_variable at the start of a contiguous location block. - * - * - For !producer, consumer_inputs_with_locations isn't used. - * - * - For !consumer, consumer_inputs_with_locations is empty. - * - * For consumer && producer, if you were trying to set some - * nir_variable to the middle of a location block on the other side - * of producer/consumer, cross_validate_outputs_to_inputs() should - * be link-erroring due to either type mismatch or location - * overlaps. If the variables do match up, then they've got a - * matching data.location and you only looked at - * consumer_inputs_with_locations[var->data.location], not any - * following entries for the array/structure. - */ - consumer_inputs_with_locations[input_var->data.location] = - input_var; - } else if (input_var->interface_type != NULL) { - char *const iface_field_name = - ralloc_asprintf(mem_ctx, "%s.%s", - glsl_get_type_name(glsl_without_array(input_var->interface_type)), - input_var->name); - _mesa_hash_table_insert(consumer_interface_inputs, - iface_field_name, input_var); - } else { - _mesa_hash_table_insert(consumer_inputs, - ralloc_strdup(mem_ctx, input_var->name), - input_var); - } - } -} - -/** - * Find a variable from the consumer that "matches" the specified variable - * - * This function only finds inputs with names that match. There is no - * validation (here) that the types, etc. are compatible. - */ -static nir_variable * -get_matching_input(void *mem_ctx, - const nir_variable *output_var, - struct hash_table *consumer_inputs, - struct hash_table *consumer_interface_inputs, - nir_variable *consumer_inputs_with_locations[VARYING_SLOT_TESS_MAX]) -{ - nir_variable *input_var; - - if (output_var->data.explicit_location) { - input_var = consumer_inputs_with_locations[output_var->data.location]; - } else if (output_var->interface_type != NULL) { - char *const iface_field_name = - ralloc_asprintf(mem_ctx, "%s.%s", - glsl_get_type_name(glsl_without_array(output_var->interface_type)), - output_var->name); - struct hash_entry *entry = - _mesa_hash_table_search(consumer_interface_inputs, iface_field_name); - input_var = entry ? (nir_variable *) entry->data : NULL; - } else { - struct hash_entry *entry = - _mesa_hash_table_search(consumer_inputs, output_var->name); - input_var = entry ? (nir_variable *) entry->data : NULL; - } - - return (input_var == NULL || input_var->data.mode != nir_var_shader_in) - ? NULL : input_var; -} - -static int -io_variable_cmp(const void *_a, const void *_b) -{ - const nir_variable *const a = *(const nir_variable **) _a; - const nir_variable *const b = *(const nir_variable **) _b; - - if (a->data.explicit_location && b->data.explicit_location) - return b->data.location - a->data.location; - - if (a->data.explicit_location && !b->data.explicit_location) - return 1; - - if (!a->data.explicit_location && b->data.explicit_location) - return -1; - - return -strcmp(a->name, b->name); -} - -/** - * Sort the shader IO variables into canonical order - */ -static void -canonicalize_shader_io(nir_shader *nir, nir_variable_mode io_mode) -{ - nir_variable *var_table[MAX_PROGRAM_OUTPUTS * 4]; - unsigned num_variables = 0; - - nir_foreach_variable_with_modes(var, nir, io_mode) { - /* If we have already encountered more I/O variables that could - * successfully link, bail. - */ - if (num_variables == ARRAY_SIZE(var_table)) - return; - - var_table[num_variables++] = var; - } - - if (num_variables == 0) - return; - - /* Sort the list in reverse order (io_variable_cmp handles this). Later - * we're going to push the variables on to the IR list as a stack, so we - * want the last variable (in canonical order) to be first in the list. - */ - qsort(var_table, num_variables, sizeof(var_table[0]), io_variable_cmp); - - /* Remove the variable from it's current location in the varible list, and - * put it at the front. - */ - for (unsigned i = 0; i < num_variables; i++) { - exec_node_remove(&var_table[i]->node); - exec_list_push_head(&nir->variables, &var_table[i]->node); - } -} - -/** - * Generate a bitfield map of the explicit locations for shader varyings. - * - * Note: For Tessellation shaders we are sitting right on the limits of the - * 64 bit map. Per-vertex and per-patch both have separate location domains - * with a max of MAX_VARYING. - */ -static uint64_t -reserved_varying_slot(struct gl_linked_shader *sh, - nir_variable_mode io_mode) -{ - assert(io_mode == nir_var_shader_in || io_mode == nir_var_shader_out); - /* Avoid an overflow of the returned value */ - assert(MAX_VARYINGS_INCL_PATCH <= 64); - - uint64_t slots = 0; - int var_slot; - - if (!sh) - return slots; - - nir_foreach_variable_with_modes(var, sh->Program->nir, io_mode) { - if (!var->data.explicit_location || - var->data.location < VARYING_SLOT_VAR0) - continue; - - var_slot = var->data.location - VARYING_SLOT_VAR0; - - bool is_gl_vertex_input = io_mode == nir_var_shader_in && - sh->Stage == MESA_SHADER_VERTEX; - unsigned num_elements = - glsl_count_attribute_slots(get_varying_type(var, sh->Stage), - is_gl_vertex_input); - for (unsigned i = 0; i < num_elements; i++) { - if (var_slot >= 0 && var_slot < MAX_VARYINGS_INCL_PATCH) - slots |= UINT64_C(1) << var_slot; - var_slot += 1; - } - } - - return slots; -} - -/** - * Sets the bits in the inputs_read, or outputs_written - * bitfield corresponding to this variable. - */ -static void -set_variable_io_mask(BITSET_WORD *bits, nir_variable *var, gl_shader_stage stage) -{ - assert(var->data.mode == nir_var_shader_in || - var->data.mode == nir_var_shader_out); - assert(var->data.location >= VARYING_SLOT_VAR0); - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - unsigned location = var->data.location - VARYING_SLOT_VAR0; - unsigned slots = glsl_count_attribute_slots(type, false); - for (unsigned i = 0; i < slots; i++) { - BITSET_SET(bits, location + i); - } -} - -static uint8_t -get_num_components(nir_variable *var) -{ - if (glsl_type_is_struct_or_ifc(glsl_without_array(var->type))) - return 4; - - return glsl_get_vector_elements(glsl_without_array(var->type)); -} - -static void -tcs_add_output_reads(nir_shader *shader, BITSET_WORD **read) -{ - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_shader_out)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - for (unsigned i = 0; i < get_num_components(var); i++) { - if (var->data.location < VARYING_SLOT_VAR0) - continue; - - unsigned comp = var->data.location_frac; - set_variable_io_mask(read[comp + i], var, shader->info.stage); - } - } - } - } -} - -/* We need to replace any interp intrinsics with undefined (shader_temp) inputs - * as no further NIR pass expects to see this. - */ -static bool -replace_unused_interpolate_at_with_undef(nir_builder *b, nir_instr *instr, - void *data) -{ - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - if (intrin->intrinsic == nir_intrinsic_interp_deref_at_centroid || - intrin->intrinsic == nir_intrinsic_interp_deref_at_sample || - intrin->intrinsic == nir_intrinsic_interp_deref_at_offset) { - nir_variable *var = nir_intrinsic_get_var(intrin, 0); - if (var->data.mode == nir_var_shader_temp) { - /* Create undef and rewrite the interp uses */ - nir_ssa_def *undef = - nir_ssa_undef(b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, undef); - - nir_instr_remove(&intrin->instr); - return true; - } - } - } - - return false; -} - -static void -fixup_vars_lowered_to_temp(nir_shader *shader, nir_variable_mode mode) -{ - /* Remove all interpolate uses of the unset varying and replace with undef. */ - if (mode == nir_var_shader_in && shader->info.stage == MESA_SHADER_FRAGMENT) { - (void) nir_shader_instructions_pass(shader, - replace_unused_interpolate_at_with_undef, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); - } - - nir_lower_global_vars_to_local(shader); - nir_fixup_deref_modes(shader); -} - -/** - * Helper for removing unused shader I/O variables, by demoting them to global - * variables (which may then be dead code eliminated). - * - * Example usage is: - * - * progress = nir_remove_unused_io_vars(producer, consumer, nir_var_shader_out, - * read, patches_read) || - * progress; - * - * The "used" should be an array of 4 BITSET_WORDs representing each - * .location_frac used. Note that for vector variables, only the first channel - * (.location_frac) is examined for deciding if the variable is used! - */ -static bool -remove_unused_io_vars(nir_shader *producer, nir_shader *consumer, - struct gl_shader_program *prog, - nir_variable_mode mode, - BITSET_WORD **used_by_other_stage) -{ - assert(mode == nir_var_shader_in || mode == nir_var_shader_out); - - bool progress = false; - nir_shader *shader = mode == nir_var_shader_out ? producer : consumer; - - BITSET_WORD **used; - nir_foreach_variable_with_modes_safe(var, shader, mode) { - used = used_by_other_stage; - - /* Skip builtins dead builtins are removed elsewhere */ - if (is_gl_identifier(var->name)) - continue; - - if (var->data.location < VARYING_SLOT_VAR0 && var->data.location >= 0) - continue; - - /* Skip xfb varyings and any other type we cannot remove */ - if (var->data.always_active_io) - continue; - - if (var->data.explicit_xfb_buffer) - continue; - - BITSET_WORD *other_stage = used[var->data.location_frac]; - - /* if location == -1 lower varying to global as it has no match and is not - * a xfb varying, this must be done after skiping bultins as builtins - * could be assigned a location of -1. - * We also lower unused varyings with explicit locations. - */ - bool use_found = false; - if (var->data.location >= 0) { - unsigned location = var->data.location - VARYING_SLOT_VAR0; - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, shader->info.stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - unsigned slots = glsl_count_attribute_slots(type, false); - for (unsigned i = 0; i < slots; i++) { - if (BITSET_TEST(other_stage, location + i)) { - use_found = true; - break; - } - } - } - - if (!use_found) { - /* This one is invalid, make it a global variable instead */ - var->data.location = 0; - var->data.mode = nir_var_shader_temp; - - progress = true; - - if (mode == nir_var_shader_in) { - if (!prog->IsES && prog->GLSL_Version <= 120) { - /* On page 25 (page 31 of the PDF) of the GLSL 1.20 spec: - * - * Only those varying variables used (i.e. read) in - * the fragment shader executable must be written to - * by the vertex shader executable; declaring - * superfluous varying variables in a vertex shader is - * permissible. - * - * We interpret this text as meaning that the VS must - * write the variable for the FS to read it. See - * "glsl1-varying read but not written" in piglit. - */ - linker_error(prog, "%s shader varying %s not written " - "by %s shader\n.", - _mesa_shader_stage_to_string(consumer->info.stage), - var->name, - _mesa_shader_stage_to_string(producer->info.stage)); - } else { - linker_warning(prog, "%s shader varying %s not written " - "by %s shader\n.", - _mesa_shader_stage_to_string(consumer->info.stage), - var->name, - _mesa_shader_stage_to_string(producer->info.stage)); - } - } - } - } - - if (progress) - fixup_vars_lowered_to_temp(shader, mode); - - return progress; -} - -static bool -remove_unused_varyings(nir_shader *producer, nir_shader *consumer, - struct gl_shader_program *prog, void *mem_ctx) -{ - assert(producer->info.stage != MESA_SHADER_FRAGMENT); - assert(consumer->info.stage != MESA_SHADER_VERTEX); - - int max_loc_out = 0; - nir_foreach_shader_out_variable(var, producer) { - if (var->data.location < VARYING_SLOT_VAR0) - continue; - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, producer->info.stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - unsigned slots = glsl_count_attribute_slots(type, false); - - max_loc_out = max_loc_out < (var->data.location - VARYING_SLOT_VAR0) + slots ? - (var->data.location - VARYING_SLOT_VAR0) + slots : max_loc_out; - } - - int max_loc_in = 0; - nir_foreach_shader_in_variable(var, consumer) { - if (var->data.location < VARYING_SLOT_VAR0) - continue; - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, consumer->info.stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - unsigned slots = glsl_count_attribute_slots(type, false); - - max_loc_in = max_loc_in < (var->data.location - VARYING_SLOT_VAR0) + slots ? - (var->data.location - VARYING_SLOT_VAR0) + slots : max_loc_in; - } - - /* Old glsl shaders that don't use explicit locations can contain greater - * than 64 varyings before unused varyings are removed so we must count them - * and make use of the BITSET macros to keep track of used slots. Once we - * have removed these excess varyings we can make use of further nir varying - * linking optimimisation passes. - */ - BITSET_WORD *read[4]; - BITSET_WORD *written[4]; - int max_loc = MAX2(max_loc_in, max_loc_out); - for (unsigned i = 0; i < 4; i++) { - read[i] = rzalloc_array(mem_ctx, BITSET_WORD, BITSET_WORDS(max_loc)); - written[i] = rzalloc_array(mem_ctx, BITSET_WORD, BITSET_WORDS(max_loc)); - } - - nir_foreach_shader_out_variable(var, producer) { - if (var->data.location < VARYING_SLOT_VAR0) - continue; - - for (unsigned i = 0; i < get_num_components(var); i++) { - unsigned comp = var->data.location_frac; - set_variable_io_mask(written[comp + i], var, producer->info.stage); - } - } - - nir_foreach_shader_in_variable(var, consumer) { - if (var->data.location < VARYING_SLOT_VAR0) - continue; - - for (unsigned i = 0; i < get_num_components(var); i++) { - unsigned comp = var->data.location_frac; - set_variable_io_mask(read[comp + i], var, consumer->info.stage); - } - } - - /* Each TCS invocation can read data written by other TCS invocations, - * so even if the outputs are not used by the TES we must also make - * sure they are not read by the TCS before demoting them to globals. - */ - if (producer->info.stage == MESA_SHADER_TESS_CTRL) - tcs_add_output_reads(producer, read); - - bool progress = false; - progress = - remove_unused_io_vars(producer, consumer, prog, nir_var_shader_out, read); - progress = - remove_unused_io_vars(producer, consumer, prog, nir_var_shader_in, written) || progress; - - return progress; -} - -static bool -should_add_varying_match_record(nir_variable *const input_var, - struct gl_shader_program *prog, - struct gl_linked_shader *producer, - struct gl_linked_shader *consumer) { - - /* If a matching input variable was found, add this output (and the input) to - * the set. If this is a separable program and there is no consumer stage, - * add the output. - * - * Always add TCS outputs. They are shared by all invocations - * within a patch and can be used as shared memory. - */ - return input_var || (prog->SeparateShader && consumer == NULL) || - producer->Stage == MESA_SHADER_TESS_CTRL; -} - -/* This assigns some initial unoptimised varying locations so that our nir - * optimisations can perform some initial optimisations and also does initial - * processing of - */ -static bool -assign_initial_varying_locations(const struct gl_constants *consts, - const struct gl_extensions *exts, - void *mem_ctx, - struct gl_shader_program *prog, - struct gl_linked_shader *producer, - struct gl_linked_shader *consumer, - unsigned num_xfb_decls, - struct xfb_decl *xfb_decls, - struct varying_matches *vm) -{ - init_varying_matches(mem_ctx, vm, consts, exts, - producer ? producer->Stage : MESA_SHADER_NONE, - consumer ? consumer->Stage : MESA_SHADER_NONE, - prog->SeparateShader); - - struct hash_table *tfeedback_candidates = - _mesa_hash_table_create(mem_ctx, _mesa_hash_string, - _mesa_key_string_equal); - struct hash_table *consumer_inputs = - _mesa_hash_table_create(mem_ctx, _mesa_hash_string, - _mesa_key_string_equal); - struct hash_table *consumer_interface_inputs = - _mesa_hash_table_create(mem_ctx, _mesa_hash_string, - _mesa_key_string_equal); - nir_variable *consumer_inputs_with_locations[VARYING_SLOT_TESS_MAX] = { - NULL, - }; - - if (consumer) - populate_consumer_input_sets(mem_ctx, consumer->Program->nir, - consumer_inputs, consumer_interface_inputs, - consumer_inputs_with_locations); - - if (producer) { - nir_foreach_shader_out_variable(output_var, producer->Program->nir) { - /* Only geometry shaders can use non-zero streams */ - assert(output_var->data.stream == 0 || - (output_var->data.stream < MAX_VERTEX_STREAMS && - producer->Stage == MESA_SHADER_GEOMETRY)); - - if (num_xfb_decls > 0) { - /* From OpenGL 4.6 (Core Profile) spec, section 11.1.2.1 - * ("Vertex Shader Variables / Output Variables") - * - * "Each program object can specify a set of output variables from - * one shader to be recorded in transform feedback mode (see - * section 13.3). The variables that can be recorded are those - * emitted by the first active shader, in order, from the - * following list: - * - * * geometry shader - * * tessellation evaluation shader - * * tessellation control shader - * * vertex shader" - * - * But on OpenGL ES 3.2, section 11.1.2.1 ("Vertex Shader - * Variables / Output Variables") tessellation control shader is - * not included in the stages list. - */ - if (!prog->IsES || producer->Stage != MESA_SHADER_TESS_CTRL) { - - const struct glsl_type *type = output_var->data.from_named_ifc_block ? - output_var->interface_type : output_var->type; - if (!output_var->data.patch && producer->Stage == MESA_SHADER_TESS_CTRL) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - const struct glsl_struct_field *ifc_member = NULL; - if (output_var->data.from_named_ifc_block) { - ifc_member = - glsl_get_struct_field_data(glsl_without_array(type), - glsl_get_field_index(glsl_without_array(type), output_var->name)); - } - - char *name; - if (glsl_type_is_struct(glsl_without_array(type)) || - (glsl_type_is_array(type) && glsl_type_is_array(glsl_get_array_element(type)))) { - type = output_var->type; - name = ralloc_strdup(NULL, output_var->name); - } else if (glsl_type_is_interface(glsl_without_array(type))) { - name = ralloc_strdup(NULL, glsl_get_type_name(glsl_without_array(type))); - } else { - name = ralloc_strdup(NULL, output_var->name); - } - - struct tfeedback_candidate_generator_state state; - state.mem_ctx = mem_ctx; - state.tfeedback_candidates = tfeedback_candidates; - state.stage = producer->Stage; - state.toplevel_var = output_var; - state.varying_floats = 0; - state.xfb_offset_floats = 0; - - tfeedback_candidate_generator(&state, &name, strlen(name), type, - ifc_member); - ralloc_free(name); - } - } - - nir_variable *const input_var = - get_matching_input(mem_ctx, output_var, consumer_inputs, - consumer_interface_inputs, - consumer_inputs_with_locations); - - if (should_add_varying_match_record(input_var, prog, producer, - consumer)) { - varying_matches_record(mem_ctx, vm, output_var, input_var); - } - - /* Only stream 0 outputs can be consumed in the next stage */ - if (input_var && output_var->data.stream != 0) { - linker_error(prog, "output %s is assigned to stream=%d but " - "is linked to an input, which requires stream=0", - output_var->name, output_var->data.stream); - return false; - } - } - } else { - /* If there's no producer stage, then this must be a separable program. - * For example, we may have a program that has just a fragment shader. - * Later this program will be used with some arbitrary vertex (or - * geometry) shader program. This means that locations must be assigned - * for all the inputs. - */ - nir_foreach_shader_in_variable(input_var, consumer->Program->nir) { - varying_matches_record(mem_ctx, vm, NULL, input_var); - } - } - - for (unsigned i = 0; i < num_xfb_decls; ++i) { - if (!xfb_decl_is_varying(&xfb_decls[i])) - continue; - - const struct tfeedback_candidate *matched_candidate - = xfb_decl_find_candidate(&xfb_decls[i], prog, tfeedback_candidates); - - if (matched_candidate == NULL) - return false; - - /* There are two situations where a new output varying is needed: - * - * - If varying packing is disabled for xfb and the current declaration - * is subscripting an array, whether the subscript is aligned or not. - * to preserve the rest of the array for the consumer. - * - * - If a builtin variable needs to be copied to a new variable - * before its content is modified by another lowering pass (e.g. - * \c gl_Position is transformed by \c nir_lower_viewport_transform). - */ - const bool lowered = - (vm->disable_xfb_packing && xfb_decls[i].is_subscripted) || - (matched_candidate->toplevel_var->data.explicit_location && - matched_candidate->toplevel_var->data.location < VARYING_SLOT_VAR0 && - (!consumer || consumer->Stage == MESA_SHADER_FRAGMENT) && - (consts->ShaderCompilerOptions[producer->Stage].LowerBuiltinVariablesXfb & - BITFIELD_BIT(matched_candidate->toplevel_var->data.location))); - - if (lowered) { - nir_variable *new_var; - struct tfeedback_candidate *new_candidate = NULL; - - new_var = gl_nir_lower_xfb_varying(producer->Program->nir, - xfb_decls[i].orig_name, - matched_candidate->toplevel_var); - if (new_var == NULL) - return false; - - /* Create new candidate and replace matched_candidate */ - new_candidate = rzalloc(mem_ctx, struct tfeedback_candidate); - new_candidate->toplevel_var = new_var; - new_candidate->type = new_var->type; - new_candidate->struct_offset_floats = 0; - new_candidate->xfb_offset_floats = 0; - _mesa_hash_table_insert(tfeedback_candidates, - ralloc_strdup(mem_ctx, new_var->name), - new_candidate); - - xfb_decl_set_lowered_candidate(&xfb_decls[i], new_candidate); - matched_candidate = new_candidate; - } - - /* Mark as xfb varying */ - matched_candidate->toplevel_var->data.is_xfb = 1; - - /* Mark xfb varyings as always active */ - matched_candidate->toplevel_var->data.always_active_io = 1; - - /* Mark any corresponding inputs as always active also. We must do this - * because we have a NIR pass that lowers vectors to scalars and another - * that removes unused varyings. - * We don't split varyings marked as always active because there is no - * point in doing so. This means we need to mark both sides of the - * interface as always active otherwise we will have a mismatch and - * start removing things we shouldn't. - */ - nir_variable *const input_var = - get_matching_input(mem_ctx, matched_candidate->toplevel_var, - consumer_inputs, consumer_interface_inputs, - consumer_inputs_with_locations); - if (input_var) { - input_var->data.is_xfb = 1; - input_var->data.always_active_io = 1; - } - - /* Add the xfb varying to varying matches if it wasn't already added */ - if ((!should_add_varying_match_record(input_var, prog, producer, - consumer) && - !matched_candidate->toplevel_var->data.is_xfb_only) || lowered) { - matched_candidate->toplevel_var->data.is_xfb_only = 1; - varying_matches_record(mem_ctx, vm, matched_candidate->toplevel_var, - NULL); - } - } - - uint64_t reserved_out_slots = 0; - if (producer) - reserved_out_slots = reserved_varying_slot(producer, nir_var_shader_out); - - uint64_t reserved_in_slots = 0; - if (consumer) - reserved_in_slots = reserved_varying_slot(consumer, nir_var_shader_in); - - /* Assign temporary user varying locations. This is required for our NIR - * varying optimisations to do their matching. - */ - const uint64_t reserved_slots = reserved_out_slots | reserved_in_slots; - varying_matches_assign_temp_locations(vm, prog, reserved_slots); - - for (unsigned i = 0; i < num_xfb_decls; ++i) { - if (!xfb_decl_is_varying(&xfb_decls[i])) - continue; - - xfb_decls[i].matched_candidate->initial_location = - xfb_decls[i].matched_candidate->toplevel_var->data.location; - xfb_decls[i].matched_candidate->initial_location_frac = - xfb_decls[i].matched_candidate->toplevel_var->data.location_frac; - } - - return true; -} - -static void -link_shader_opts(struct varying_matches *vm, - nir_shader *producer, nir_shader *consumer, - struct gl_shader_program *prog, void *mem_ctx) -{ - /* If we can't pack the stage using this pass then we can't lower io to - * scalar just yet. Instead we leave it to a later NIR linking pass that uses - * ARB_enhanced_layout style packing to pack things further. - * - * Otherwise we might end up causing linking errors and perf regressions - * because the new scalars will be assigned individual slots and can overflow - * the available slots. - */ - if (producer->options->lower_to_scalar && !vm->disable_varying_packing && - !vm->disable_xfb_packing) { - NIR_PASS_V(producer, nir_lower_io_to_scalar_early, nir_var_shader_out); - NIR_PASS_V(consumer, nir_lower_io_to_scalar_early, nir_var_shader_in); - } - - gl_nir_opts(producer); - gl_nir_opts(consumer); - - if (nir_link_opt_varyings(producer, consumer)) - gl_nir_opts(consumer); - - NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, NULL); - NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, NULL); - - if (remove_unused_varyings(producer, consumer, prog, mem_ctx)) { - NIR_PASS_V(producer, nir_lower_global_vars_to_local); - NIR_PASS_V(consumer, nir_lower_global_vars_to_local); - - gl_nir_opts(producer); - gl_nir_opts(consumer); - - /* Optimizations can cause varyings to become unused. - * nir_compact_varyings() depends on all dead varyings being removed so - * we need to call nir_remove_dead_variables() again here. - */ - NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, - NULL); - NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, - NULL); - } - - nir_link_varying_precision(producer, consumer); -} - -/** - * Assign locations for all variables that are produced in one pipeline stage - * (the "producer") and consumed in the next stage (the "consumer"). - * - * Variables produced by the producer may also be consumed by transform - * feedback. - * - * \param num_xfb_decls is the number of declarations indicating - * variables that may be consumed by transform feedback. - * - * \param xfb_decls is a pointer to an array of xfb_decl objects - * representing the result of parsing the strings passed to - * glTransformFeedbackVaryings(). assign_location() will be called for - * each of these objects that matches one of the outputs of the - * producer. - * - * When num_xfb_decls is nonzero, it is permissible for the consumer to - * be NULL. In this case, varying locations are assigned solely based on the - * requirements of transform feedback. - */ -static bool -assign_final_varying_locations(const struct gl_constants *consts, - const struct gl_extensions *exts, - void *mem_ctx, - struct gl_shader_program *prog, - struct gl_linked_shader *producer, - struct gl_linked_shader *consumer, - unsigned num_xfb_decls, - struct xfb_decl *xfb_decls, - const uint64_t reserved_slots, - struct varying_matches *vm) -{ - init_varying_matches(mem_ctx, vm, consts, exts, - producer ? producer->Stage : MESA_SHADER_NONE, - consumer ? consumer->Stage : MESA_SHADER_NONE, - prog->SeparateShader); - - /* Regather varying matches as we ran optimisations and the previous pointers - * are no longer valid. - */ - if (producer) { - nir_foreach_shader_out_variable(var_out, producer->Program->nir) { - if (var_out->data.location < VARYING_SLOT_VAR0 || - var_out->data.explicit_location) - continue; - - if (vm->num_matches == vm->matches_capacity) { - vm->matches_capacity *= 2; - vm->matches = (struct match *) - reralloc(mem_ctx, vm->matches, struct match, - vm->matches_capacity); - } - - vm->matches[vm->num_matches].packing_class - = varying_matches_compute_packing_class(var_out); - vm->matches[vm->num_matches].packing_order - = varying_matches_compute_packing_order(var_out); - - vm->matches[vm->num_matches].producer_var = var_out; - vm->matches[vm->num_matches].consumer_var = NULL; - vm->num_matches++; - } - - /* Regather xfb varyings too */ - for (unsigned i = 0; i < num_xfb_decls; i++) { - if (!xfb_decl_is_varying(&xfb_decls[i])) - continue; - - /* Varying pointer was already reset */ - if (xfb_decls[i].matched_candidate->initial_location == -1) - continue; - - bool UNUSED is_reset = false; - bool UNUSED no_outputs = true; - nir_foreach_shader_out_variable(var_out, producer->Program->nir) { - no_outputs = false; - assert(var_out->data.location != -1); - if (var_out->data.location == - xfb_decls[i].matched_candidate->initial_location && - var_out->data.location_frac == - xfb_decls[i].matched_candidate->initial_location_frac) { - xfb_decls[i].matched_candidate->toplevel_var = var_out; - xfb_decls[i].matched_candidate->initial_location = -1; - is_reset = true; - break; - } - } - assert(is_reset || no_outputs); - } - } - - bool found_match = false; - if (consumer) { - nir_foreach_shader_in_variable(var_in, consumer->Program->nir) { - if (var_in->data.location < VARYING_SLOT_VAR0 || - var_in->data.explicit_location) - continue; - - found_match = false; - for (unsigned i = 0; i < vm->num_matches; i++) { - if (vm->matches[i].producer_var && - (vm->matches[i].producer_var->data.location == var_in->data.location && - vm->matches[i].producer_var->data.location_frac == var_in->data.location_frac)) { - - vm->matches[i].consumer_var = var_in; - found_match = true; - break; - } - } - if (!found_match) { - if (vm->num_matches == vm->matches_capacity) { - vm->matches_capacity *= 2; - vm->matches = (struct match *) - reralloc(mem_ctx, vm->matches, struct match, - vm->matches_capacity); - } - - vm->matches[vm->num_matches].packing_class - = varying_matches_compute_packing_class(var_in); - vm->matches[vm->num_matches].packing_order - = varying_matches_compute_packing_order(var_in); - - vm->matches[vm->num_matches].producer_var = NULL; - vm->matches[vm->num_matches].consumer_var = var_in; - vm->num_matches++; - } - } - } - - uint8_t components[MAX_VARYINGS_INCL_PATCH] = {0}; - const unsigned slots_used = - varying_matches_assign_locations(vm, prog, components, reserved_slots); - varying_matches_store_locations(vm); - - for (unsigned i = 0; i < num_xfb_decls; ++i) { - if (xfb_decl_is_varying(&xfb_decls[i])) { - if (!xfb_decl_assign_location(&xfb_decls[i], consts, prog, - vm->disable_varying_packing, vm->xfb_enabled)) - return false; - } - } - - if (producer) { - gl_nir_lower_packed_varyings(consts, prog, mem_ctx, slots_used, components, - nir_var_shader_out, 0, producer, - vm->disable_varying_packing, - vm->disable_xfb_packing, vm->xfb_enabled); - nir_lower_pack(producer->Program->nir); - } - - if (consumer) { - unsigned consumer_vertices = 0; - if (consumer && consumer->Stage == MESA_SHADER_GEOMETRY) - consumer_vertices = prog->Geom.VerticesIn; - - gl_nir_lower_packed_varyings(consts, prog, mem_ctx, slots_used, components, - nir_var_shader_in, consumer_vertices, - consumer, vm->disable_varying_packing, - vm->disable_xfb_packing, vm->xfb_enabled); - nir_lower_pack(consumer->Program->nir); - } - - return true; -} - -static bool -check_against_output_limit(const struct gl_constants *consts, gl_api api, - struct gl_shader_program *prog, - struct gl_linked_shader *producer, - unsigned num_explicit_locations) -{ - unsigned output_vectors = num_explicit_locations; - nir_foreach_shader_out_variable(var, producer->Program->nir) { - if (!var->data.explicit_location && - var_counts_against_varying_limit(producer->Stage, var)) { - /* outputs for fragment shader can't be doubles */ - output_vectors += glsl_count_attribute_slots(var->type, false); - } - } - - assert(producer->Stage != MESA_SHADER_FRAGMENT); - unsigned max_output_components = - consts->Program[producer->Stage].MaxOutputComponents; - - const unsigned output_components = output_vectors * 4; - if (output_components > max_output_components) { - if (api == API_OPENGLES2 || prog->IsES) - linker_error(prog, "%s shader uses too many output vectors " - "(%u > %u)\n", - _mesa_shader_stage_to_string(producer->Stage), - output_vectors, - max_output_components / 4); - else - linker_error(prog, "%s shader uses too many output components " - "(%u > %u)\n", - _mesa_shader_stage_to_string(producer->Stage), - output_components, - max_output_components); - - return false; - } - - return true; -} - -static bool -check_against_input_limit(const struct gl_constants *consts, gl_api api, - struct gl_shader_program *prog, - struct gl_linked_shader *consumer, - unsigned num_explicit_locations) -{ - unsigned input_vectors = num_explicit_locations; - - nir_foreach_shader_in_variable(var, consumer->Program->nir) { - if (!var->data.explicit_location && - var_counts_against_varying_limit(consumer->Stage, var)) { - /* vertex inputs aren't varying counted */ - input_vectors += glsl_count_attribute_slots(var->type, false); - } - } - - assert(consumer->Stage != MESA_SHADER_VERTEX); - unsigned max_input_components = - consts->Program[consumer->Stage].MaxInputComponents; - - const unsigned input_components = input_vectors * 4; - if (input_components > max_input_components) { - if (api == API_OPENGLES2 || prog->IsES) - linker_error(prog, "%s shader uses too many input vectors " - "(%u > %u)\n", - _mesa_shader_stage_to_string(consumer->Stage), - input_vectors, - max_input_components / 4); - else - linker_error(prog, "%s shader uses too many input components " - "(%u > %u)\n", - _mesa_shader_stage_to_string(consumer->Stage), - input_components, - max_input_components); - - return false; - } - - return true; -} - -/* Lower unset/unused inputs/outputs */ -static void -remove_unused_shader_inputs_and_outputs(struct gl_shader_program *prog, - unsigned stage, nir_variable_mode mode) -{ - bool progress = false; - nir_shader *shader = prog->_LinkedShaders[stage]->Program->nir; - - nir_foreach_variable_with_modes_safe(var, shader, mode) { - if (!var->data.is_xfb_only && var->data.location == -1) { - var->data.location = 0; - var->data.mode = nir_var_shader_temp; - progress = true; - } - } - - if (progress) - fixup_vars_lowered_to_temp(shader, mode); -} - -static bool -link_varyings(struct gl_shader_program *prog, unsigned first, - unsigned last, const struct gl_constants *consts, - const struct gl_extensions *exts, gl_api api, void *mem_ctx) -{ - bool has_xfb_qualifiers = false; - unsigned num_xfb_decls = 0; - char **varying_names = NULL; - struct xfb_decl *xfb_decls = NULL; - - if (last > MESA_SHADER_FRAGMENT) - return true; - - /* From the ARB_enhanced_layouts spec: - * - * "If the shader used to record output variables for transform feedback - * varyings uses the "xfb_buffer", "xfb_offset", or "xfb_stride" layout - * qualifiers, the values specified by TransformFeedbackVaryings are - * ignored, and the set of variables captured for transform feedback is - * instead derived from the specified layout qualifiers." - */ - for (int i = MESA_SHADER_FRAGMENT - 1; i >= 0; i--) { - /* Find last stage before fragment shader */ - if (prog->_LinkedShaders[i]) { - has_xfb_qualifiers = - process_xfb_layout_qualifiers(mem_ctx, prog->_LinkedShaders[i], - prog, &num_xfb_decls, - &varying_names); - break; - } - } - - if (!has_xfb_qualifiers) { - num_xfb_decls = prog->TransformFeedback.NumVarying; - varying_names = prog->TransformFeedback.VaryingNames; - } - - if (num_xfb_decls != 0) { - /* From GL_EXT_transform_feedback: - * A program will fail to link if: - * - * * the specified by TransformFeedbackVaryingsEXT is - * non-zero, but the program object has no vertex or geometry - * shader; - */ - if (first >= MESA_SHADER_FRAGMENT) { - linker_error(prog, "Transform feedback varyings specified, but " - "no vertex, tessellation, or geometry shader is " - "present.\n"); - return false; - } - - xfb_decls = rzalloc_array(mem_ctx, struct xfb_decl, - num_xfb_decls); - if (!parse_xfb_decls(consts, exts, prog, mem_ctx, num_xfb_decls, - varying_names, xfb_decls)) - return false; - } - - struct gl_linked_shader *linked_shader[MESA_SHADER_STAGES]; - unsigned num_shaders = 0; - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i]) - linked_shader[num_shaders++] = prog->_LinkedShaders[i]; - } - - struct varying_matches vm; - if (last < MESA_SHADER_FRAGMENT && - (num_xfb_decls != 0 || prog->SeparateShader)) { - struct gl_linked_shader *producer = prog->_LinkedShaders[last]; - if (!assign_initial_varying_locations(consts, exts, mem_ctx, prog, - producer, NULL, num_xfb_decls, - xfb_decls, &vm)) - return false; - } - - if (last <= MESA_SHADER_FRAGMENT && !prog->SeparateShader) { - remove_unused_shader_inputs_and_outputs(prog, first, nir_var_shader_in); - remove_unused_shader_inputs_and_outputs(prog, last, nir_var_shader_out); - } - - if (prog->SeparateShader) { - struct gl_linked_shader *consumer = linked_shader[0]; - if (!assign_initial_varying_locations(consts, exts, mem_ctx, prog, NULL, - consumer, 0, NULL, &vm)) - return false; - } - - if (num_shaders == 1) { - /* Linking shaders also optimizes them. Separate shaders, compute shaders - * and shaders with a fixed-func VS or FS that don't need linking are - * optimized here. - */ - gl_nir_opts(linked_shader[0]->Program->nir); - } else { - /* Linking the stages in the opposite order (from fragment to vertex) - * ensures that inter-shader outputs written to in an earlier stage - * are eliminated if they are (transitively) not used in a later - * stage. - */ - for (int i = num_shaders - 2; i >= 0; i--) { - unsigned stage_num_xfb_decls = - linked_shader[i + 1]->Stage == MESA_SHADER_FRAGMENT ? - num_xfb_decls : 0; - - if (!assign_initial_varying_locations(consts, exts, mem_ctx, prog, - linked_shader[i], - linked_shader[i + 1], - stage_num_xfb_decls, xfb_decls, - &vm)) - return false; - - /* Now that validation is done its safe to remove unused varyings. As - * we have both a producer and consumer its safe to remove unused - * varyings even if the program is a SSO because the stages are being - * linked together i.e. we have a multi-stage SSO. - */ - link_shader_opts(&vm, linked_shader[i]->Program->nir, - linked_shader[i + 1]->Program->nir, - prog, mem_ctx); - - remove_unused_shader_inputs_and_outputs(prog, linked_shader[i]->Stage, - nir_var_shader_out); - remove_unused_shader_inputs_and_outputs(prog, - linked_shader[i + 1]->Stage, - nir_var_shader_in); - } - } - - if (!prog->SeparateShader) { - /* If not SSO remove unused varyings from the first/last stage */ - NIR_PASS_V(prog->_LinkedShaders[first]->Program->nir, - nir_remove_dead_variables, nir_var_shader_in, NULL); - NIR_PASS_V(prog->_LinkedShaders[last]->Program->nir, - nir_remove_dead_variables, nir_var_shader_out, NULL); - } else { - /* Sort inputs / outputs into a canonical order. This is necessary so - * that inputs / outputs of separable shaders will be assigned - * predictable locations regardless of the order in which declarations - * appeared in the shader source. - */ - if (first != MESA_SHADER_VERTEX) { - canonicalize_shader_io(prog->_LinkedShaders[first]->Program->nir, - nir_var_shader_in); - } - - if (last != MESA_SHADER_FRAGMENT) { - canonicalize_shader_io(prog->_LinkedShaders[last]->Program->nir, - nir_var_shader_out); - } - } - - /* If there is no fragment shader we need to set transform feedback. - * - * For SSO we also need to assign output locations. We assign them here - * because we need to do it for both single stage programs and multi stage - * programs. - */ - if (last < MESA_SHADER_FRAGMENT && - (num_xfb_decls != 0 || prog->SeparateShader)) { - const uint64_t reserved_out_slots = - reserved_varying_slot(prog->_LinkedShaders[last], nir_var_shader_out); - if (!assign_final_varying_locations(consts, exts, mem_ctx, prog, - prog->_LinkedShaders[last], NULL, - num_xfb_decls, xfb_decls, - reserved_out_slots, &vm)) - return false; - } - - if (prog->SeparateShader) { - struct gl_linked_shader *const sh = prog->_LinkedShaders[first]; - - const uint64_t reserved_slots = - reserved_varying_slot(sh, nir_var_shader_in); - - /* Assign input locations for SSO, output locations are already - * assigned. - */ - if (!assign_final_varying_locations(consts, exts, mem_ctx, prog, - NULL /* producer */, - sh /* consumer */, - 0 /* num_xfb_decls */, - NULL /* xfb_decls */, - reserved_slots, &vm)) - return false; - } - - if (num_shaders == 1) { - gl_nir_opt_dead_builtin_varyings(consts, api, prog, NULL, linked_shader[0], - 0, NULL); - gl_nir_opt_dead_builtin_varyings(consts, api, prog, linked_shader[0], NULL, - num_xfb_decls, xfb_decls); - } else { - /* Linking the stages in the opposite order (from fragment to vertex) - * ensures that inter-shader outputs written to in an earlier stage - * are eliminated if they are (transitively) not used in a later - * stage. - */ - int next = last; - for (int i = next - 1; i >= 0; i--) { - if (prog->_LinkedShaders[i] == NULL && i != 0) - continue; - - struct gl_linked_shader *const sh_i = prog->_LinkedShaders[i]; - struct gl_linked_shader *const sh_next = prog->_LinkedShaders[next]; - - gl_nir_opt_dead_builtin_varyings(consts, api, prog, sh_i, sh_next, - next == MESA_SHADER_FRAGMENT ? num_xfb_decls : 0, - xfb_decls); - - const uint64_t reserved_out_slots = - reserved_varying_slot(sh_i, nir_var_shader_out); - const uint64_t reserved_in_slots = - reserved_varying_slot(sh_next, nir_var_shader_in); - - if (!assign_final_varying_locations(consts, exts, mem_ctx, prog, sh_i, - sh_next, next == MESA_SHADER_FRAGMENT ? num_xfb_decls : 0, - xfb_decls, reserved_out_slots | reserved_in_slots, &vm)) - return false; - - /* This must be done after all dead varyings are eliminated. */ - if (sh_i != NULL) { - unsigned slots_used = util_bitcount64(reserved_out_slots); - if (!check_against_output_limit(consts, api, prog, sh_i, slots_used)) - return false; - } - - unsigned slots_used = util_bitcount64(reserved_in_slots); - if (!check_against_input_limit(consts, api, prog, sh_next, slots_used)) - return false; - - next = i; - } - } - - if (!store_tfeedback_info(consts, prog, num_xfb_decls, xfb_decls, - has_xfb_qualifiers, mem_ctx)) - return false; - - return true; -} - -bool -gl_nir_link_varyings(const struct gl_constants *consts, - const struct gl_extensions *exts, - gl_api api, struct gl_shader_program *prog) -{ - void *mem_ctx = ralloc_context(NULL); - - unsigned first, last; - - first = MESA_SHADER_STAGES; - last = 0; - - /* We need to initialise the program resource list because the varying - * packing pass my start inserting varyings onto the list. - */ - init_program_resource_list(prog); - - /* Determine first and last stage. */ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (!prog->_LinkedShaders[i]) - continue; - if (first == MESA_SHADER_STAGES) - first = i; - last = i; - } - - bool r = link_varyings(prog, first, last, consts, exts, api, mem_ctx); - if (r) { - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (!prog->_LinkedShaders[i]) - continue; - - /* Check for transform feedback varyings specified via the API */ - prog->_LinkedShaders[i]->Program->nir->info.has_transform_feedback_varyings = - prog->TransformFeedback.NumVarying > 0; - - /* Check for transform feedback varyings specified in the Shader */ - if (prog->last_vert_prog) { - prog->_LinkedShaders[i]->Program->nir->info.has_transform_feedback_varyings |= - prog->last_vert_prog->sh.LinkedTransformFeedback->NumVarying > 0; - } - } - - /* Assign NIR XFB info to the last stage before the fragment shader */ - for (int stage = MESA_SHADER_FRAGMENT - 1; stage >= 0; stage--) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - if (sh && stage != MESA_SHADER_TESS_CTRL) { - sh->Program->nir->xfb_info = - gl_to_nir_xfb_info(sh->Program->sh.LinkedTransformFeedback, - sh->Program->nir); - break; - } - } - } - - ralloc_free(mem_ctx); - return r; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_varyings.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_varyings.h deleted file mode 100644 index e635f01..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_varyings.h +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * Copyright © 2022 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_LINK_VARYINGS_H -#define GLSL_LINK_VARYINGS_H - -/** - * Linker functions related specifically to linking varyings between shader - * stages. - */ - - -#include "../../util/glheader.h" -#include "../../mesa/program/prog_parameter.h" -#include "../../util/bitset.h" - -#include "../nir/nir.h" - -struct gl_shader_program; -struct gl_shader_stage; -struct gl_shader; -struct gl_type; - - -/** - * Data structure describing a varying which is available for use in transform - * feedback. - * - * For example, if the vertex shader contains: - * - * struct S { - * vec4 foo; - * float[3] bar; - * }; - * - * varying S[2] v; - * - * Then there would be tfeedback_candidate objects corresponding to the - * following varyings: - * - * v[0].foo - * v[0].bar - * v[1].foo - * v[1].bar - */ -struct tfeedback_candidate -{ - /** - * Toplevel variable containing this varying. In the above example, this - * would point to the declaration of the varying v. - */ - nir_variable *toplevel_var; - - /** - * Type of this varying. In the above example, this would point to the - * glsl_type for "vec4" or "float[3]". - */ - const struct glsl_type *type; - - /** - * Offset within the toplevel variable where this varying occurs. - * Counted in floats. - */ - unsigned struct_offset_floats; - - /** - * Offset within the xfb with respect to alignment requirements. - * Counted in floats. - */ - unsigned xfb_offset_floats; - - /* Used to match varyings and update toplevel_var pointer after NIR - * optimisations have been performed. - */ - unsigned initial_location; - unsigned initial_location_frac; -}; - -enum lowered_builtin_array_var { - none, - clip_distance, - cull_distance, -}; - -/** - * Data structure tracking information about a transform feedback declaration - * during linking. - */ -struct xfb_decl -{ - /** - * The name that was supplied to glTransformFeedbackVaryings. Used for - * error reporting and glGetTransformFeedbackVarying(). - */ - const char *orig_name; - - /** - * The name of the variable, parsed from orig_name. - */ - const char *var_name; - - /** - * True if the declaration in orig_name represents an array. - */ - bool is_subscripted; - - /** - * If is_subscripted is true, the subscript that was specified in orig_name. - */ - unsigned array_subscript; - - /** - * Non-zero if the variable is gl_ClipDistance and the driver lowers it to - * gl_*MESA. - */ - enum lowered_builtin_array_var lowered_builtin_array_variable; - - /** - * The vertex shader output location that the linker assigned for this - * variable. -1 if a location hasn't been assigned yet. - */ - int location; - - /** - * Used to store the buffer assigned by xfb_buffer. - */ - unsigned buffer; - - /** - * Used to store the offset assigned by xfb_offset. - */ - unsigned offset; - - /** - * If non-zero, then this variable may be packed along with other variables - * into a single varying slot, so this offset should be applied when - * accessing components. For example, an offset of 1 means that the x - * component of this variable is actually stored in component y of the - * location specified by \c location. - * - * Only valid if location != -1. - */ - unsigned location_frac; - - /** - * If location != -1, the number of vector elements in this variable, or 1 - * if this variable is a scalar. - */ - unsigned vector_elements; - - /** - * If location != -1, the number of matrix columns in this variable, or 1 - * if this variable is not a matrix. - */ - unsigned matrix_columns; - - /** Type of the varying returned by glGetTransformFeedbackVarying() */ - GLenum type; - - /** - * If location != -1, the size that should be returned by - * glGetTransformFeedbackVarying(). - */ - unsigned size; - - /** - * How many components to skip. If non-zero, this is - * gl_SkipComponents{1,2,3,4} from ARB_transform_feedback3. - */ - unsigned skip_components; - - /** - * Whether this is gl_NextBuffer from ARB_transform_feedback3. - */ - bool next_buffer_separator; - - /** - * If find_candidate() has been called, pointer to the tfeedback_candidate - * data structure that was found. Otherwise NULL. - */ - struct tfeedback_candidate *matched_candidate; - - /** - * StreamId assigned to this varying (defaults to 0). Can only be set to - * values other than 0 in geometry shaders that use the stream layout - * modifier. Accepted values must be in the range [0, MAX_VERTEX_STREAMS-1]. - */ - unsigned stream_id; -}; - -static inline bool -xfb_decl_is_varying(const struct xfb_decl *xfb_decl) -{ - return !xfb_decl->next_buffer_separator && !xfb_decl->skip_components; -} - -#endif /* GLSL_LINK_VARYINGS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_xfb.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_xfb.c deleted file mode 100644 index 357ba58..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_link_xfb.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "../nir_gl_types.h" -#include "../nir/nir_xfb_info.h" -#include "gl_nir_linker.h" -#include "linker_util.h" -#include "../../util/u_math.h" -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/consts_exts.h" - -/** - * This file does the linking of GLSL transform feedback using NIR. - */ - -void -gl_nir_link_assign_xfb_resources(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - /* - * From ARB_gl_spirv spec: - * - * "- If the *Xfb* Execution Mode is set, any output variable that is at - * least partially captured: - * * must be decorated with an *XfbBuffer*, declaring the capturing buffer - * * must have at least one captured output variable in the capturing - * buffer decorated with an *XfbStride* (and all such *XfbStride* values - * for the capturing buffer must be equal) - * - If the *Xfb* Execution Mode is set, any captured output: - * * must be a non-structure decorated with *Offset* or a member of a - * structure whose type member is decorated with *Offset*" - * - * Note the "must be", meaning that explicit buffer, offset and stride are - * mandatory. So as this is intended to work with SPIR-V shaders we don't - * need to calculate the offset or the stride. - */ - - struct gl_program *xfb_prog = prog->last_vert_prog; - - if (xfb_prog == NULL) - return; - - /* free existing varyings, if any */ - for (unsigned i = 0; i < prog->TransformFeedback.NumVarying; i++) - free(prog->TransformFeedback.VaryingNames[i]); - free(prog->TransformFeedback.VaryingNames); - - nir_xfb_info *xfb_info = NULL; - nir_xfb_varyings_info *varyings_info = NULL; - - /* Find last stage before fragment shader */ - for (int stage = MESA_SHADER_FRAGMENT - 1; stage >= 0; stage--) { - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - - if (sh && stage != MESA_SHADER_TESS_CTRL) { - nir_gather_xfb_info_with_varyings(sh->Program->nir, NULL, &varyings_info); - xfb_info = sh->Program->nir->xfb_info; - break; - } - } - - struct gl_transform_feedback_info *linked_xfb = - rzalloc(xfb_prog, struct gl_transform_feedback_info); - xfb_prog->sh.LinkedTransformFeedback = linked_xfb; - - if (!xfb_info) { - prog->TransformFeedback.NumVarying = 0; - linked_xfb->NumOutputs = 0; - linked_xfb->NumVarying = 0; - linked_xfb->ActiveBuffers = 0; - return; - } - - for (unsigned buf = 0; buf < MAX_FEEDBACK_BUFFERS; buf++) - prog->TransformFeedback.BufferStride[buf] = xfb_info->buffers[buf].stride; - - prog->TransformFeedback.NumVarying = varyings_info->varying_count; - prog->TransformFeedback.VaryingNames = - malloc(sizeof(GLchar *) * varyings_info->varying_count); - - linked_xfb->Outputs = - rzalloc_array(xfb_prog, - struct gl_transform_feedback_output, - xfb_info->output_count); - linked_xfb->NumOutputs = xfb_info->output_count; - - linked_xfb->Varyings = - rzalloc_array(xfb_prog, - struct gl_transform_feedback_varying_info, - varyings_info->varying_count); - linked_xfb->NumVarying = varyings_info->varying_count; - - int buffer_index = 0; /* Corresponds to GL_TRANSFORM_FEEDBACK_BUFFER_INDEX */ - int xfb_buffer = - (varyings_info->varying_count > 0) ? - xfb_info->outputs[0].buffer : 0; - - for (unsigned i = 0; i < varyings_info->varying_count; i++) { - nir_xfb_varying_info *xfb_varying = &varyings_info->varyings[i]; - - /* From ARB_gl_spirv spec: - * - * "19. How should the program interface query operations behave for - * program objects created from SPIR-V shaders? - * - * DISCUSSION: we previously said we didn't need reflection to work - * for SPIR-V shaders (at least for the first version), however we - * are left with specifying how it should "not work". The primary - * issue is that SPIR-V binaries are not required to have names - * associated with variables. They can be associated in debug - * information, but there is no requirement for that to be present, - * and it should not be relied upon." - * - * Options:" - * - * - * - * "RESOLVED. Pick (c), but also allow debug names to be returned - * if an implementation wants to." - * - * So names are considered optional debug info, so the linker needs to - * work without them, and returning them is optional. For simplicity at - * this point we are ignoring names - */ - prog->TransformFeedback.VaryingNames[i] = NULL; - - if (xfb_buffer != xfb_varying->buffer) { - buffer_index++; - xfb_buffer = xfb_varying->buffer; - } - - struct gl_transform_feedback_varying_info *varying = - linked_xfb->Varyings + i; - - /* ARB_gl_spirv: see above. */ - varying->name.string = NULL; - resource_name_updated(&varying->name); - varying->Type = glsl_get_gl_type(xfb_varying->type); - varying->BufferIndex = buffer_index; - varying->Size = glsl_type_is_array(xfb_varying->type) ? - glsl_get_length(xfb_varying->type) : 1; - varying->Offset = xfb_varying->offset; - } - - for (unsigned i = 0; i < xfb_info->output_count; i++) { - nir_xfb_output_info *xfb_output = &xfb_info->outputs[i]; - - struct gl_transform_feedback_output *output = - linked_xfb->Outputs + i; - - output->OutputRegister = xfb_output->location; - output->OutputBuffer = xfb_output->buffer; - output->NumComponents = util_bitcount(xfb_output->component_mask); - output->StreamId = xfb_info->buffer_to_stream[xfb_output->buffer]; - output->DstOffset = xfb_output->offset / 4; - output->ComponentOffset = xfb_output->component_offset; - } - - /* Make sure MaxTransformFeedbackBuffers is <= 32 so the bitmask for - * tracking the number of buffers doesn't overflow. - */ - unsigned buffers = 0; - assert(consts->MaxTransformFeedbackBuffers <= sizeof(buffers) * 8); - - for (unsigned buf = 0; buf < MAX_FEEDBACK_BUFFERS; buf++) { - if (xfb_info->buffers[buf].stride > 0) { - linked_xfb->Buffers[buf].Stride = xfb_info->buffers[buf].stride / 4; - linked_xfb->Buffers[buf].NumVaryings = xfb_info->buffers[buf].varying_count; - buffers |= 1 << buf; - } - } - - linked_xfb->ActiveBuffers = buffers; - - ralloc_free(varyings_info); -} - -struct nir_xfb_info * -gl_to_nir_xfb_info(struct gl_transform_feedback_info *info, void *mem_ctx) -{ - if (info == NULL || info->NumOutputs == 0) - return NULL; - - nir_xfb_info *xfb = - rzalloc_size(mem_ctx, nir_xfb_info_size(info->NumOutputs)); - - xfb->output_count = info->NumOutputs; - - for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) { - xfb->buffers[i].stride = info->Buffers[i].Stride * 4; - xfb->buffers[i].varying_count = info->Buffers[i].NumVaryings; - xfb->buffer_to_stream[i] = info->Buffers[i].Stream; - } - - for (unsigned i = 0; i < info->NumOutputs; i++) { - xfb->outputs[i].buffer = info->Outputs[i].OutputBuffer; - xfb->outputs[i].offset = info->Outputs[i].DstOffset * 4; - xfb->outputs[i].location = info->Outputs[i].OutputRegister; - xfb->outputs[i].component_offset = info->Outputs[i].ComponentOffset; - xfb->outputs[i].component_mask = - BITFIELD_RANGE(info->Outputs[i].ComponentOffset, - info->Outputs[i].NumComponents); - xfb->buffers_written |= BITFIELD_BIT(info->Outputs[i].OutputBuffer); - xfb->streams_written |= BITFIELD_BIT(info->Outputs[i].StreamId); - } - - return xfb; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_linker.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_linker.c deleted file mode 100644 index 2362e68..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_linker.c +++ /dev/null @@ -1,1039 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "gl_nir.h" -#include "gl_nir_linker.h" -#include "linker_util.h" -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/shaderobj.h" -#include "ir_uniform.h" /* for gl_uniform_storage */ -#include "../../util/glheader.h" - -/** - * This file included general link methods, using NIR, instead of IR as - * the counter-part glsl/linker.cpp - */ - -void -gl_nir_opts(nir_shader *nir) -{ - bool progress; - - do { - progress = false; - - NIR_PASS_V(nir, nir_lower_vars_to_ssa); - - /* Linking deals with unused inputs/outputs, but here we can remove - * things local to the shader in the hopes that we can cleanup other - * things. This pass will also remove variables with only stores, so we - * might be able to make progress after it. - */ - NIR_PASS(progress, nir, nir_remove_dead_variables, - nir_var_function_temp | nir_var_shader_temp | - nir_var_mem_shared, - NULL); - - NIR_PASS(progress, nir, nir_opt_find_array_copies); - NIR_PASS(progress, nir, nir_opt_copy_prop_vars); - NIR_PASS(progress, nir, nir_opt_dead_write_vars); - - if (nir->options->lower_to_scalar) { - NIR_PASS_V(nir, nir_lower_alu_to_scalar, - nir->options->lower_to_scalar_filter, NULL); - NIR_PASS_V(nir, nir_lower_phis_to_scalar, false); - } - - NIR_PASS_V(nir, nir_lower_alu); - NIR_PASS_V(nir, nir_lower_pack); - NIR_PASS(progress, nir, nir_copy_prop); - NIR_PASS(progress, nir, nir_opt_remove_phis); - NIR_PASS(progress, nir, nir_opt_dce); - if (nir_opt_trivial_continues(nir)) { - progress = true; - NIR_PASS(progress, nir, nir_copy_prop); - NIR_PASS(progress, nir, nir_opt_dce); - } - NIR_PASS(progress, nir, nir_opt_if, 0); - NIR_PASS(progress, nir, nir_opt_dead_cf); - NIR_PASS(progress, nir, nir_opt_cse); - NIR_PASS(progress, nir, nir_opt_peephole_select, 8, true, true); - - NIR_PASS(progress, nir, nir_opt_phi_precision); - NIR_PASS(progress, nir, nir_opt_algebraic); - NIR_PASS(progress, nir, nir_opt_constant_folding); - - if (!nir->info.flrp_lowered) { - unsigned lower_flrp = - (nir->options->lower_flrp16 ? 16 : 0) | - (nir->options->lower_flrp32 ? 32 : 0) | - (nir->options->lower_flrp64 ? 64 : 0); - - if (lower_flrp) { - bool lower_flrp_progress = false; - - NIR_PASS(lower_flrp_progress, nir, nir_lower_flrp, - lower_flrp, - false /* always_precise */); - if (lower_flrp_progress) { - NIR_PASS(progress, nir, - nir_opt_constant_folding); - progress = true; - } - } - - /* Nothing should rematerialize any flrps, so we only need to do this - * lowering once. - */ - nir->info.flrp_lowered = true; - } - - NIR_PASS(progress, nir, nir_opt_undef); - NIR_PASS(progress, nir, nir_opt_conditional_discard); - if (nir->options->max_unroll_iterations || - (nir->options->max_unroll_iterations_fp64 && - (nir->options->lower_doubles_options & nir_lower_fp64_full_software))) { - NIR_PASS(progress, nir, nir_opt_loop_unroll); - } - } while (progress); - - NIR_PASS_V(nir, nir_lower_var_copies); -} - -static void -gl_nir_link_opts(nir_shader *producer, nir_shader *consumer) -{ - if (producer->options->lower_to_scalar) { - NIR_PASS_V(producer, nir_lower_io_to_scalar_early, nir_var_shader_out); - NIR_PASS_V(consumer, nir_lower_io_to_scalar_early, nir_var_shader_in); - } - - nir_lower_io_arrays_to_elements(producer, consumer); - - gl_nir_opts(producer); - gl_nir_opts(consumer); - - if (nir_link_opt_varyings(producer, consumer)) - gl_nir_opts(consumer); - - NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, NULL); - NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, NULL); - - if (nir_remove_unused_varyings(producer, consumer)) { - NIR_PASS_V(producer, nir_lower_global_vars_to_local); - NIR_PASS_V(consumer, nir_lower_global_vars_to_local); - - gl_nir_opts(producer); - gl_nir_opts(consumer); - - /* Optimizations can cause varyings to become unused. - * nir_compact_varyings() depends on all dead varyings being removed so - * we need to call nir_remove_dead_variables() again here. - */ - NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_out, - NULL); - NIR_PASS_V(consumer, nir_remove_dead_variables, nir_var_shader_in, - NULL); - } - - nir_link_varying_precision(producer, consumer); -} - -static bool -can_remove_uniform(nir_variable *var, UNUSED void *data) -{ - /* Section 2.11.6 (Uniform Variables) of the OpenGL ES 3.0.3 spec - * says: - * - * "All members of a named uniform block declared with a shared or - * std140 layout qualifier are considered active, even if they are not - * referenced in any shader in the program. The uniform block itself is - * also considered active, even if no member of the block is - * referenced." - * - * Although the spec doesn't state it std430 layouts are expect to behave - * the same way. If the variable is in a uniform block with one of those - * layouts, do not eliminate it. - */ - if (nir_variable_is_in_block(var) && - (glsl_get_ifc_packing(var->interface_type) != - GLSL_INTERFACE_PACKING_PACKED)) - return false; - - if (glsl_get_base_type(glsl_without_array(var->type)) == - GLSL_TYPE_SUBROUTINE) - return false; - - /* Uniform initializers could get used by another stage. However if its a - * hidden uniform then it should be safe to remove as this was a constant - * variable that has been lowered to a uniform. - */ - if (var->constant_initializer && var->data.how_declared != nir_var_hidden) - return false; - - return true; -} - -/** - * Built-in / reserved GL variables names start with "gl_" - */ -static inline bool -is_gl_identifier(const char *s) -{ - return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_'; -} - -static bool -inout_has_same_location(const nir_variable *var, unsigned stage) -{ - if (!var->data.patch && - ((var->data.mode == nir_var_shader_out && - stage == MESA_SHADER_TESS_CTRL) || - (var->data.mode == nir_var_shader_in && - (stage == MESA_SHADER_TESS_CTRL || stage == MESA_SHADER_TESS_EVAL || - stage == MESA_SHADER_GEOMETRY)))) - return true; - else - return false; -} - -/** - * Create gl_shader_variable from nir_variable. - */ -static struct gl_shader_variable * -create_shader_variable(struct gl_shader_program *shProg, - const nir_variable *in, - const char *name, const struct glsl_type *type, - const struct glsl_type *interface_type, - bool use_implicit_location, int location, - const struct glsl_type *outermost_struct_type) -{ - /* Allocate zero-initialized memory to ensure that bitfield padding - * is zero. - */ - struct gl_shader_variable *out = rzalloc(shProg, - struct gl_shader_variable); - if (!out) - return NULL; - - /* Since gl_VertexID may be lowered to gl_VertexIDMESA, but applications - * expect to see gl_VertexID in the program resource list. Pretend. - */ - if (in->data.mode == nir_var_system_value && - in->data.location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) { - out->name.string = ralloc_strdup(shProg, "gl_VertexID"); - } else if ((in->data.mode == nir_var_shader_out && - in->data.location == VARYING_SLOT_TESS_LEVEL_OUTER) || - (in->data.mode == nir_var_system_value && - in->data.location == SYSTEM_VALUE_TESS_LEVEL_OUTER)) { - out->name.string = ralloc_strdup(shProg, "gl_TessLevelOuter"); - type = glsl_array_type(glsl_float_type(), 4, 0); - } else if ((in->data.mode == nir_var_shader_out && - in->data.location == VARYING_SLOT_TESS_LEVEL_INNER) || - (in->data.mode == nir_var_system_value && - in->data.location == SYSTEM_VALUE_TESS_LEVEL_INNER)) { - out->name.string = ralloc_strdup(shProg, "gl_TessLevelInner"); - type = glsl_array_type(glsl_float_type(), 2, 0); - } else { - out->name.string = ralloc_strdup(shProg, name); - } - - resource_name_updated(&out->name); - - if (!out->name.string) - return NULL; - - /* The ARB_program_interface_query spec says: - * - * "Not all active variables are assigned valid locations; the - * following variables will have an effective location of -1: - * - * * uniforms declared as atomic counters; - * - * * members of a uniform block; - * - * * built-in inputs, outputs, and uniforms (starting with "gl_"); and - * - * * inputs or outputs not declared with a "location" layout - * qualifier, except for vertex shader inputs and fragment shader - * outputs." - */ - if (glsl_get_base_type(in->type) == GLSL_TYPE_ATOMIC_UINT || - is_gl_identifier(in->name) || - !(in->data.explicit_location || use_implicit_location)) { - out->location = -1; - } else { - out->location = location; - } - - out->type = type; - out->outermost_struct_type = outermost_struct_type; - out->interface_type = interface_type; - out->component = in->data.location_frac; - out->index = in->data.index; - out->patch = in->data.patch; - out->mode = in->data.mode; - out->interpolation = in->data.interpolation; - out->precision = in->data.precision; - out->explicit_location = in->data.explicit_location; - - return out; -} - -static bool -add_shader_variable(const struct gl_constants *consts, - struct gl_shader_program *shProg, - struct set *resource_set, - unsigned stage_mask, - GLenum programInterface, nir_variable *var, - const char *name, const struct glsl_type *type, - bool use_implicit_location, int location, - bool inouts_share_location, - const struct glsl_type *outermost_struct_type) -{ - const struct glsl_type *interface_type = var->interface_type; - - if (outermost_struct_type == NULL) { - if (var->data.from_named_ifc_block) { - const char *interface_name = glsl_get_type_name(interface_type); - - if (glsl_type_is_array(interface_type)) { - /* Issue #16 of the ARB_program_interface_query spec says: - * - * "* If a variable is a member of an interface block without an - * instance name, it is enumerated using just the variable name. - * - * * If a variable is a member of an interface block with an - * instance name, it is enumerated as "BlockName.Member", where - * "BlockName" is the name of the interface block (not the - * instance name) and "Member" is the name of the variable." - * - * In particular, it indicates that it should be "BlockName", - * not "BlockName[array length]". The conformance suite and - * dEQP both require this behavior. - * - * Here, we unwrap the extra array level added by named interface - * block array lowering so we have the correct variable type. We - * also unwrap the interface type when constructing the name. - * - * We leave interface_type the same so that ES 3.x SSO pipeline - * validation can enforce the rules requiring array length to - * match on interface blocks. - */ - type = glsl_get_array_element(type); - - interface_name = - glsl_get_type_name(glsl_get_array_element(interface_type)); - } - - name = ralloc_asprintf(shProg, "%s.%s", interface_name, name); - } - } - - switch (glsl_get_base_type(type)) { - case GLSL_TYPE_STRUCT: { - /* The ARB_program_interface_query spec says: - * - * "For an active variable declared as a structure, a separate entry - * will be generated for each active structure member. The name of - * each entry is formed by concatenating the name of the structure, - * the "." character, and the name of the structure member. If a - * structure member to enumerate is itself a structure or array, - * these enumeration rules are applied recursively." - */ - if (outermost_struct_type == NULL) - outermost_struct_type = type; - - unsigned field_location = location; - for (unsigned i = 0; i < glsl_get_length(type); i++) { - const struct glsl_type *field_type = glsl_get_struct_field(type, i); - const struct glsl_struct_field *field = - glsl_get_struct_field_data(type, i); - - char *field_name = ralloc_asprintf(shProg, "%s.%s", name, field->name); - if (!add_shader_variable(consts, shProg, resource_set, - stage_mask, programInterface, - var, field_name, field_type, - use_implicit_location, field_location, - false, outermost_struct_type)) - return false; - - field_location += glsl_count_attribute_slots(field_type, false); - } - return true; - } - - case GLSL_TYPE_ARRAY: { - /* The ARB_program_interface_query spec says: - * - * "For an active variable declared as an array of basic types, a - * single entry will be generated, with its name string formed by - * concatenating the name of the array and the string "[0]"." - * - * "For an active variable declared as an array of an aggregate data - * type (structures or arrays), a separate entry will be generated - * for each active array element, unless noted immediately below. - * The name of each entry is formed by concatenating the name of - * the array, the "[" character, an integer identifying the element - * number, and the "]" character. These enumeration rules are - * applied recursively, treating each enumerated array element as a - * separate active variable." - */ - const struct glsl_type *array_type = glsl_get_array_element(type); - if (glsl_get_base_type(array_type) == GLSL_TYPE_STRUCT || - glsl_get_base_type(array_type) == GLSL_TYPE_ARRAY) { - unsigned elem_location = location; - unsigned stride = inouts_share_location ? 0 : - glsl_count_attribute_slots(array_type, false); - for (unsigned i = 0; i < glsl_get_length(type); i++) { - char *elem = ralloc_asprintf(shProg, "%s[%d]", name, i); - if (!add_shader_variable(consts, shProg, resource_set, - stage_mask, programInterface, - var, elem, array_type, - use_implicit_location, elem_location, - false, outermost_struct_type)) - return false; - elem_location += stride; - } - return true; - } - } - - - default: { - /* The ARB_program_interface_query spec says: - * - * "For an active variable declared as a single instance of a basic - * type, a single entry will be generated, using the variable name - * from the shader source." - */ - struct gl_shader_variable *sha_v = - create_shader_variable(shProg, var, name, type, interface_type, - use_implicit_location, location, - outermost_struct_type); - if (!sha_v) - return false; - - return link_util_add_program_resource(shProg, resource_set, - programInterface, sha_v, stage_mask); - } - } -} - -static bool -add_vars_with_modes(const struct gl_constants *consts, - struct gl_shader_program *prog, struct set *resource_set, - nir_shader *nir, nir_variable_mode modes, - unsigned stage, GLenum programInterface) -{ - nir_foreach_variable_with_modes(var, nir, modes) { - if (var->data.how_declared == nir_var_hidden) - continue; - - int loc_bias = 0; - switch(var->data.mode) { - case nir_var_system_value: - case nir_var_shader_in: - if (programInterface != GL_PROGRAM_INPUT) - continue; - loc_bias = (stage == MESA_SHADER_VERTEX) ? VERT_ATTRIB_GENERIC0 - : VARYING_SLOT_VAR0; - break; - case nir_var_shader_out: - if (programInterface != GL_PROGRAM_OUTPUT) - continue; - loc_bias = (stage == MESA_SHADER_FRAGMENT) ? FRAG_RESULT_DATA0 - : VARYING_SLOT_VAR0; - break; - default: - continue; - } - - if (var->data.patch) - loc_bias = VARYING_SLOT_PATCH0; - - if (prog->data->spirv) { - struct gl_shader_variable *sh_var = - rzalloc(prog, struct gl_shader_variable); - - /* In the ARB_gl_spirv spec, names are considered optional debug info, so - * the linker needs to work without them. Returning them is optional. - * For simplicity, we ignore names. - */ - sh_var->name.string = NULL; - resource_name_updated(&sh_var->name); - sh_var->type = var->type; - sh_var->location = var->data.location - loc_bias; - sh_var->explicit_location = var->data.explicit_location; - sh_var->index = var->data.index; - - if (!link_util_add_program_resource(prog, resource_set, - programInterface, - sh_var, 1 << stage)) { - return false; - } - } else { - /* Skip packed varyings, packed varyings are handled separately - * by add_packed_varyings in the GLSL IR - * build_program_resource_list() call. - * TODO: handle packed varyings here instead. We likely want a NIR - * based packing pass first. - */ - if (strncmp(var->name, "packed:", 7) == 0) - continue; - - const bool vs_input_or_fs_output = - (stage == MESA_SHADER_VERTEX && - var->data.mode == nir_var_shader_in) || - (stage == MESA_SHADER_FRAGMENT && - var->data.mode == nir_var_shader_out); - - if (!add_shader_variable(consts, prog, resource_set, - 1 << stage, programInterface, - var, var->name, var->type, - vs_input_or_fs_output, - var->data.location - loc_bias, - inout_has_same_location(var, stage), - NULL)) - return false; - } - } - - return true; -} - -static bool -add_interface_variables(const struct gl_constants *consts, - struct gl_shader_program *prog, - struct set *resource_set, - unsigned stage, GLenum programInterface) -{ - struct gl_linked_shader *sh = prog->_LinkedShaders[stage]; - if (!sh) - return true; - - nir_shader *nir = sh->Program->nir; - assert(nir); - - switch (programInterface) { - case GL_PROGRAM_INPUT: { - return add_vars_with_modes(consts, prog, resource_set, - nir, nir_var_shader_in | nir_var_system_value, - stage, programInterface); - } - case GL_PROGRAM_OUTPUT: - return add_vars_with_modes(consts, prog, resource_set, - nir, nir_var_shader_out, - stage, programInterface); - default: - assert("!Should not get here"); - break; - } - - return false; -} - -bool -nir_add_packed_var_to_resource_list(const struct gl_constants *consts, - struct gl_shader_program *shProg, - struct set *resource_set, - nir_variable *var, - unsigned stage, GLenum type) -{ - if (!add_shader_variable(consts, shProg, resource_set, 1 << stage, - type, var, var->name, var->type, false, - var->data.location - VARYING_SLOT_VAR0, - inout_has_same_location(var, stage), NULL)) - return false; - - return true; -} - -/** - * Initilise list of program resources that point to resource data. - */ -void -init_program_resource_list(struct gl_shader_program *prog) -{ - /* Rebuild resource list. */ - if (prog->data->ProgramResourceList) { - ralloc_free(prog->data->ProgramResourceList); - prog->data->ProgramResourceList = NULL; - prog->data->NumProgramResourceList = 0; - } -} - -/* TODO: as we keep adding features, this method is becoming more and more - * similar to its GLSL counterpart at linker.cpp. Eventually it would be good - * to check if they could be refactored, and reduce code duplication somehow - */ -void -nir_build_program_resource_list(const struct gl_constants *consts, - struct gl_shader_program *prog, - bool rebuild_resourse_list) -{ - /* Rebuild resource list. */ - if (rebuild_resourse_list) - init_program_resource_list(prog); - - int input_stage = MESA_SHADER_STAGES, output_stage = 0; - - /* Determine first input and final output stage. These are used to - * detect which variables should be enumerated in the resource list - * for GL_PROGRAM_INPUT and GL_PROGRAM_OUTPUT. - */ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (!prog->_LinkedShaders[i]) - continue; - if (input_stage == MESA_SHADER_STAGES) - input_stage = i; - output_stage = i; - } - - /* Empty shader, no resources. */ - if (input_stage == MESA_SHADER_STAGES && output_stage == 0) - return; - - struct set *resource_set = _mesa_pointer_set_create(NULL); - - /* Add inputs and outputs to the resource list. */ - if (!add_interface_variables(consts, prog, resource_set, input_stage, - GL_PROGRAM_INPUT)) { - return; - } - - if (!add_interface_variables(consts, prog, resource_set, output_stage, - GL_PROGRAM_OUTPUT)) { - return; - } - - /* Add transform feedback varyings and buffers. */ - if (prog->last_vert_prog) { - struct gl_transform_feedback_info *linked_xfb = - prog->last_vert_prog->sh.LinkedTransformFeedback; - - /* Add varyings. */ - if (linked_xfb->NumVarying > 0) { - for (int i = 0; i < linked_xfb->NumVarying; i++) { - if (!link_util_add_program_resource(prog, resource_set, - GL_TRANSFORM_FEEDBACK_VARYING, - &linked_xfb->Varyings[i], 0)) - return; - } - } - - /* Add buffers. */ - for (unsigned i = 0; i < consts->MaxTransformFeedbackBuffers; i++) { - if ((linked_xfb->ActiveBuffers >> i) & 1) { - linked_xfb->Buffers[i].Binding = i; - if (!link_util_add_program_resource(prog, resource_set, - GL_TRANSFORM_FEEDBACK_BUFFER, - &linked_xfb->Buffers[i], 0)) - return; - } - } - } - - /* Add uniforms - * - * Here, it is expected that nir_link_uniforms() has already been - * called, so that UniformStorage table is already available. - */ - int top_level_array_base_offset = -1; - int top_level_array_size_in_bytes = -1; - int second_element_offset = -1; - int block_index = -1; - for (unsigned i = 0; i < prog->data->NumUniformStorage; i++) { - struct gl_uniform_storage *uniform = &prog->data->UniformStorage[i]; - - if (uniform->hidden) { - for (int j = MESA_SHADER_VERTEX; j < MESA_SHADER_STAGES; j++) { - if (!uniform->opaque[j].active || - glsl_get_base_type(uniform->type) != GLSL_TYPE_SUBROUTINE) - continue; - - GLenum type = - _mesa_shader_stage_to_subroutine_uniform((gl_shader_stage)j); - /* add shader subroutines */ - if (!link_util_add_program_resource(prog, resource_set, - type, uniform, 0)) - return; - } - - continue; - } - - if (!link_util_should_add_buffer_variable(prog, uniform, - top_level_array_base_offset, - top_level_array_size_in_bytes, - second_element_offset, block_index)) - continue; - - - if (prog->data->UniformStorage[i].offset >= second_element_offset) { - top_level_array_base_offset = - prog->data->UniformStorage[i].offset; - - top_level_array_size_in_bytes = - prog->data->UniformStorage[i].top_level_array_size * - prog->data->UniformStorage[i].top_level_array_stride; - - /* Set or reset the second element offset. For non arrays this - * will be set to -1. - */ - second_element_offset = top_level_array_size_in_bytes ? - top_level_array_base_offset + - prog->data->UniformStorage[i].top_level_array_stride : -1; - } - block_index = uniform->block_index; - - - GLenum interface = uniform->is_shader_storage ? GL_BUFFER_VARIABLE : GL_UNIFORM; - if (!link_util_add_program_resource(prog, resource_set, interface, uniform, - uniform->active_shader_mask)) { - return; - } - } - - - for (unsigned i = 0; i < prog->data->NumUniformBlocks; i++) { - if (!link_util_add_program_resource(prog, resource_set, GL_UNIFORM_BLOCK, - &prog->data->UniformBlocks[i], - prog->data->UniformBlocks[i].stageref)) - return; - } - - for (unsigned i = 0; i < prog->data->NumShaderStorageBlocks; i++) { - if (!link_util_add_program_resource(prog, resource_set, GL_SHADER_STORAGE_BLOCK, - &prog->data->ShaderStorageBlocks[i], - prog->data->ShaderStorageBlocks[i].stageref)) - return; - } - - /* Add atomic counter buffers. */ - for (unsigned i = 0; i < prog->data->NumAtomicBuffers; i++) { - if (!link_util_add_program_resource(prog, resource_set, GL_ATOMIC_COUNTER_BUFFER, - &prog->data->AtomicBuffers[i], 0)) - return; - } - - unsigned mask = prog->data->linked_stages; - while (mask) { - const int i = u_bit_scan(&mask); - struct gl_program *p = prog->_LinkedShaders[i]->Program; - - GLuint type = _mesa_shader_stage_to_subroutine((gl_shader_stage)i); - for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) { - if (!link_util_add_program_resource(prog, resource_set, - type, - &p->sh.SubroutineFunctions[j], - 0)) - return; - } - } - - _mesa_set_destroy(resource_set, NULL); -} - -bool -gl_nir_link_spirv(const struct gl_constants *consts, - struct gl_shader_program *prog, - const struct gl_nir_linker_options *options) -{ - struct gl_linked_shader *linked_shader[MESA_SHADER_STAGES]; - unsigned num_shaders = 0; - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i]) - linked_shader[num_shaders++] = prog->_LinkedShaders[i]; - } - - /* Linking the stages in the opposite order (from fragment to vertex) - * ensures that inter-shader outputs written to in an earlier stage - * are eliminated if they are (transitively) not used in a later - * stage. - */ - for (int i = num_shaders - 2; i >= 0; i--) { - gl_nir_link_opts(linked_shader[i]->Program->nir, - linked_shader[i + 1]->Program->nir); - } - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - struct gl_linked_shader *shader = prog->_LinkedShaders[i]; - if (shader) { - const nir_remove_dead_variables_options opts = { - .can_remove_var = can_remove_uniform, - }; - nir_remove_dead_variables(shader->Program->nir, - nir_var_uniform | nir_var_image, - &opts); - } - } - - if (!gl_nir_link_uniform_blocks(prog)) - return false; - - if (!gl_nir_link_uniforms(consts, prog, options->fill_parameters)) - return false; - - gl_nir_link_assign_atomic_counter_resources(consts, prog); - gl_nir_link_assign_xfb_resources(consts, prog); - - return true; -} - -/** - * Validate shader image resources. - */ -static void -check_image_resources(const struct gl_constants *consts, - const struct gl_extensions *exts, - struct gl_shader_program *prog) -{ - unsigned total_image_units = 0; - unsigned fragment_outputs = 0; - unsigned total_shader_storage_blocks = 0; - - if (!exts->ARB_shader_image_load_store) - return; - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - if (!sh) - continue; - - total_image_units += sh->Program->info.num_images; - total_shader_storage_blocks += sh->Program->info.num_ssbos; - } - - if (total_image_units > consts->MaxCombinedImageUniforms) - linker_error(prog, "Too many combined image uniforms\n"); - - struct gl_linked_shader *frag_sh = - prog->_LinkedShaders[MESA_SHADER_FRAGMENT]; - if (frag_sh) { - uint64_t frag_outputs_written = frag_sh->Program->info.outputs_written; - fragment_outputs = util_bitcount64(frag_outputs_written); - } - - if (total_image_units + fragment_outputs + total_shader_storage_blocks > - consts->MaxCombinedShaderOutputResources) - linker_error(prog, "Too many combined image uniforms, shader storage " - " buffers and fragment outputs\n"); -} - -static bool -is_sampler_array_accessed_indirectly(nir_deref_instr *deref) -{ - for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type != nir_deref_type_array) - continue; - - if (nir_src_is_const(d->arr.index)) - continue; - - return true; - } - - return false; -} - -/** - * This check is done to make sure we allow only constant expression - * indexing and "constant-index-expression" (indexing with an expression - * that includes loop induction variable). - */ -static bool -validate_sampler_array_indexing(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i] == NULL) - continue; - - bool no_dynamic_indexing = - consts->ShaderCompilerOptions[i].NirOptions->force_indirect_unrolling_sampler; - - bool uses_indirect_sampler_array_indexing = false; - nir_foreach_function(function, prog->_LinkedShaders[i]->Program->nir) { - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - /* Check if a sampler array is accessed indirectly */ - if (instr->type == nir_instr_type_tex) { - nir_tex_instr *tex_instr = nir_instr_as_tex(instr); - int sampler_idx = - nir_tex_instr_src_index(tex_instr, nir_tex_src_sampler_deref); - if (sampler_idx >= 0) { - nir_deref_instr *deref = - nir_instr_as_deref(tex_instr->src[sampler_idx].src.ssa->parent_instr); - if (is_sampler_array_accessed_indirectly(deref)) { - uses_indirect_sampler_array_indexing = true; - break; - } - } - } - } - - if (uses_indirect_sampler_array_indexing) - break; - } - if (uses_indirect_sampler_array_indexing) - break; - } - - if (uses_indirect_sampler_array_indexing) { - const char *msg = "sampler arrays indexed with non-constant " - "expressions is forbidden in GLSL %s %u"; - /* Backend has indicated that it has no dynamic indexing support. */ - if (no_dynamic_indexing) { - linker_error(prog, msg, prog->IsES ? "ES" : "", prog->GLSL_Version); - return false; - } else { - linker_warning(prog, msg, prog->IsES ? "ES" : "", - prog->GLSL_Version); - } - } - } - - return true; -} - -bool -gl_nir_link_glsl(const struct gl_constants *consts, - const struct gl_extensions *exts, - gl_api api, - struct gl_shader_program *prog) -{ - if (prog->NumShaders == 0) - return true; - - if (!gl_nir_link_varyings(consts, exts, api, prog)) - return false; - - /* Validation for special cases where we allow sampler array indexing - * with loop induction variable. This check emits a warning or error - * depending if backend can handle dynamic indexing. - */ - if ((!prog->IsES && prog->GLSL_Version < 130) || - (prog->IsES && prog->GLSL_Version < 300)) { - if (!validate_sampler_array_indexing(consts, prog)) - return false; - } - - if (prog->data->LinkStatus == LINKING_FAILURE) - return false; - - struct gl_linked_shader *linked_shader[MESA_SHADER_STAGES]; - unsigned num_shaders = 0; - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i]) - linked_shader[num_shaders++] = prog->_LinkedShaders[i]; - } - - /* Linking the stages in the opposite order (from fragment to vertex) - * ensures that inter-shader outputs written to in an earlier stage - * are eliminated if they are (transitively) not used in a later - * stage. - */ - for (int i = num_shaders - 2; i >= 0; i--) { - gl_nir_link_opts(linked_shader[i]->Program->nir, - linked_shader[i + 1]->Program->nir); - } - - /* Tidy up any left overs from the linking process for single shaders. - * For example varying arrays that get packed may have dead elements that - * can be now be eliminated now that array access has been lowered. - */ - if (num_shaders == 1) - gl_nir_opts(linked_shader[0]->Program->nir); - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - struct gl_linked_shader *shader = prog->_LinkedShaders[i]; - if (shader) { - if (consts->GLSLLowerConstArrays) { - nir_lower_const_arrays_to_uniforms(shader->Program->nir, - consts->Program[i].MaxUniformComponents); - } - - const nir_remove_dead_variables_options opts = { - .can_remove_var = can_remove_uniform, - }; - nir_remove_dead_variables(shader->Program->nir, - nir_var_uniform | nir_var_image, - &opts); - } - } - - if (!gl_nir_link_uniforms(consts, prog, true)) - return false; - - link_util_calculate_subroutine_compat(prog); - link_util_check_uniform_resources(consts, prog); - link_util_check_subroutine_resources(prog); - check_image_resources(consts, exts, prog); - gl_nir_link_assign_atomic_counter_resources(consts, prog); - gl_nir_link_check_atomic_counter_resources(consts, prog); - - /* OpenGL ES < 3.1 requires that a vertex shader and a fragment shader both - * be present in a linked program. GL_ARB_ES2_compatibility doesn't say - * anything about shader linking when one of the shaders (vertex or - * fragment shader) is absent. So, the extension shouldn't change the - * behavior specified in GLSL specification. - * - * From OpenGL ES 3.1 specification (7.3 Program Objects): - * "Linking can fail for a variety of reasons as specified in the - * OpenGL ES Shading Language Specification, as well as any of the - * following reasons: - * - * ... - * - * * program contains objects to form either a vertex shader or - * fragment shader, and program is not separable, and does not - * contain objects to form both a vertex shader and fragment - * shader." - * - * However, the only scenario in 3.1+ where we don't require them both is - * when we have a compute shader. For example: - * - * - No shaders is a link error. - * - Geom or Tess without a Vertex shader is a link error which means we - * always require a Vertex shader and hence a Fragment shader. - * - Finally a Compute shader linked with any other stage is a link error. - */ - if (!prog->SeparateShader && _mesa_is_api_gles2(api) && - !prog->_LinkedShaders[MESA_SHADER_COMPUTE]) { - if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) { - linker_error(prog, "program lacks a vertex shader\n"); - } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) { - linker_error(prog, "program lacks a fragment shader\n"); - } - } - - if (prog->data->LinkStatus == LINKING_FAILURE) - return false; - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_linker.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_linker.h deleted file mode 100644 index 05e62b5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_linker.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright © 2017 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GL_NIR_LINKER_H -#define GL_NIR_LINKER_H - -#include - -#include "../nir/nir.h" -#include "../../util/glheader.h" -#include "../../mesa/main/menums.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_constants; -struct gl_extensions; -struct gl_linked_shader; -struct gl_shader_program; -struct gl_transform_feedback_info; -struct xfb_decl; -struct nir_xfb_info; - -struct gl_nir_linker_options { - bool fill_parameters; -}; - -#define nir_foreach_gl_uniform_variable(var, shader) \ - nir_foreach_variable_with_modes(var, shader, nir_var_uniform | \ - nir_var_mem_ubo | \ - nir_var_mem_ssbo | \ - nir_var_image) - -void gl_nir_opts(nir_shader *nir); - -bool gl_nir_link_spirv(const struct gl_constants *consts, - struct gl_shader_program *prog, - const struct gl_nir_linker_options *options); - -bool gl_nir_link_glsl(const struct gl_constants *consts, - const struct gl_extensions *exts, - gl_api api, - struct gl_shader_program *prog); - -bool gl_nir_link_uniforms(const struct gl_constants *consts, - struct gl_shader_program *prog, - bool fill_parameters); - -bool gl_nir_link_varyings(const struct gl_constants *consts, - const struct gl_extensions *exts, - gl_api api, struct gl_shader_program *prog); - -struct nir_xfb_info * -gl_to_nir_xfb_info(struct gl_transform_feedback_info *info, void *mem_ctx); - -nir_variable * gl_nir_lower_xfb_varying(nir_shader *shader, - const char *old_var_name, - nir_variable *toplevel_var); - -void gl_nir_opt_dead_builtin_varyings(const struct gl_constants *consts, - gl_api api, - struct gl_shader_program *prog, - struct gl_linked_shader *producer, - struct gl_linked_shader *consumer, - unsigned num_tfeedback_decls, - struct xfb_decl *tfeedback_decls); - -void gl_nir_set_uniform_initializers(const struct gl_constants *consts, - struct gl_shader_program *prog); - -bool nir_add_packed_var_to_resource_list(const struct gl_constants *consts, - struct gl_shader_program *shProg, - struct set *resource_set, - nir_variable *var, - unsigned stage, GLenum type); - -void -init_program_resource_list(struct gl_shader_program *prog); - -void nir_build_program_resource_list(const struct gl_constants *consts, - struct gl_shader_program *prog, - bool rebuild_resourse_list); - -void gl_nir_link_assign_atomic_counter_resources(const struct gl_constants *consts, - struct gl_shader_program *prog); - -void gl_nir_link_check_atomic_counter_resources(const struct gl_constants *consts, - struct gl_shader_program *prog); - -void gl_nir_link_assign_xfb_resources(const struct gl_constants *consts, - struct gl_shader_program *prog); - -bool gl_nir_link_uniform_blocks(struct gl_shader_program *prog); - -bool lower_packed_varying_needs_lowering(nir_shader *shader, nir_variable *var, - bool xfb_enabled, - bool disable_xfb_packing, - bool disable_varying_packing); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GL_NIR_LINKER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_atomics.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_atomics.c deleted file mode 100644 index 2023a5d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_atomics.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "../nir/nir.h" -#include "../nir/nir_builder.h" -#include "gl_nir.h" -#include "ir_uniform.h" -#include "../../mesa/main/config.h" -#include "../../mesa/main/shader_types.h" -#include - -/* - * replace atomic counter intrinsics that use a variable with intrinsics - * that directly store the buffer index and byte offset - */ - -static bool -lower_deref_instr(nir_builder *b, nir_intrinsic_instr *instr, - const struct gl_shader_program *shader_program, - nir_shader *shader, bool use_binding_as_idx) -{ - nir_intrinsic_op op; - switch (instr->intrinsic) { - case nir_intrinsic_atomic_counter_read_deref: - op = nir_intrinsic_atomic_counter_read; - break; - - case nir_intrinsic_atomic_counter_inc_deref: - op = nir_intrinsic_atomic_counter_inc; - break; - - case nir_intrinsic_atomic_counter_pre_dec_deref: - op = nir_intrinsic_atomic_counter_pre_dec; - break; - - case nir_intrinsic_atomic_counter_post_dec_deref: - op = nir_intrinsic_atomic_counter_post_dec; - break; - - case nir_intrinsic_atomic_counter_add_deref: - op = nir_intrinsic_atomic_counter_add; - break; - - case nir_intrinsic_atomic_counter_min_deref: - op = nir_intrinsic_atomic_counter_min; - break; - - case nir_intrinsic_atomic_counter_max_deref: - op = nir_intrinsic_atomic_counter_max; - break; - - case nir_intrinsic_atomic_counter_and_deref: - op = nir_intrinsic_atomic_counter_and; - break; - - case nir_intrinsic_atomic_counter_or_deref: - op = nir_intrinsic_atomic_counter_or; - break; - - case nir_intrinsic_atomic_counter_xor_deref: - op = nir_intrinsic_atomic_counter_xor; - break; - - case nir_intrinsic_atomic_counter_exchange_deref: - op = nir_intrinsic_atomic_counter_exchange; - break; - - case nir_intrinsic_atomic_counter_comp_swap_deref: - op = nir_intrinsic_atomic_counter_comp_swap; - break; - - default: - return false; - } - - nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - if (var->data.mode != nir_var_uniform && - var->data.mode != nir_var_mem_ssbo && - var->data.mode != nir_var_mem_shared) - return false; /* atomics passed as function arguments can't be lowered */ - - const unsigned uniform_loc = var->data.location; - const unsigned idx = use_binding_as_idx ? var->data.binding : - shader_program->data->UniformStorage[uniform_loc].opaque[shader->info.stage].index; - - b->cursor = nir_before_instr(&instr->instr); - - int offset_value = 0; - int range_base = 0; - if (!b->shader->options->lower_atomic_offset_to_range_base) - offset_value = var->data.offset; - else - range_base = var->data.offset; - - nir_ssa_def *offset = nir_imm_int(b, offset_value); - for (nir_deref_instr *d = deref; d->deref_type != nir_deref_type_var; - d = nir_deref_instr_parent(d)) { - assert(d->deref_type == nir_deref_type_array); - assert(d->arr.index.is_ssa); - - unsigned array_stride = ATOMIC_COUNTER_SIZE; - if (glsl_type_is_array(d->type)) - array_stride *= glsl_get_aoa_size(d->type); - - offset = nir_iadd(b, offset, nir_imul(b, d->arr.index.ssa, - nir_imm_int(b, array_stride))); - } - - /* Since the first source is a deref and the first source in the lowered - * instruction is the offset, we can just swap it out and change the - * opcode. - */ - instr->intrinsic = op; - nir_intrinsic_set_range_base(instr, range_base); - - nir_instr_rewrite_src(&instr->instr, &instr->src[0], - nir_src_for_ssa(offset)); - nir_intrinsic_set_base(instr, idx); - - nir_deref_instr_remove_if_unused(deref); - - return true; -} - -struct lower_atomics_data { - bool use_binding_as_idx; - nir_shader *shader; - const struct gl_shader_program *shader_program; -}; - -static bool -gl_nir_lower_atomics_instr(nir_builder *b, nir_instr *instr, void *cb_data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - struct lower_atomics_data *data = cb_data; - - return lower_deref_instr(b, - nir_instr_as_intrinsic(instr), - data->shader_program, - data->shader, - data->use_binding_as_idx); -} - -bool -gl_nir_lower_atomics(nir_shader *shader, - const struct gl_shader_program *shader_program, - bool use_binding_as_idx) -{ - struct lower_atomics_data data = { - .use_binding_as_idx = use_binding_as_idx, - .shader = shader, - .shader_program = shader_program, - }; - - return nir_shader_instructions_pass(shader, gl_nir_lower_atomics_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &data); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_buffers.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_buffers.c deleted file mode 100644 index 0975dc8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_buffers.c +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "../nir/nir_builder.h" -#include "gl_nir.h" -#include "ir_uniform.h" - -#include "../../util/compiler.h" -#include "../../mesa/main/shader_types.h" - -static nir_ssa_def * -get_block_array_index(nir_builder *b, nir_deref_instr *deref, - const struct gl_shader_program *shader_program) -{ - unsigned array_elements = 1; - - /* Build a block name such as "block[2][0]" for finding in the list of - * blocks later on as well as an optional dynamic index which gets added - * to the block index later. - */ - int const_array_offset = 0; - const char *block_name = ""; - nir_ssa_def *nonconst_index = NULL; - while (deref->deref_type == nir_deref_type_array) { - nir_deref_instr *parent = nir_deref_instr_parent(deref); - assert(parent && glsl_type_is_array(parent->type)); - unsigned arr_size = glsl_get_length(parent->type); - - if (nir_src_is_const(deref->arr.index)) { - unsigned arr_index = nir_src_as_uint(deref->arr.index); - - /* We're walking the deref from the tail so prepend the array index */ - block_name = ralloc_asprintf(b->shader, "[%u]%s", arr_index, - block_name); - - const_array_offset += arr_index * array_elements; - } else { - nir_ssa_def *arr_index = nir_ssa_for_src(b, deref->arr.index, 1); - arr_index = nir_umin(b, arr_index, nir_imm_int(b, arr_size - 1)); - nir_ssa_def *arr_offset = nir_amul_imm(b, arr_index, array_elements); - if (nonconst_index) - nonconst_index = nir_iadd(b, nonconst_index, arr_offset); - else - nonconst_index = arr_offset; - - /* We're walking the deref from the tail so prepend the array index */ - block_name = ralloc_asprintf(b->shader, "[0]%s", block_name); - } - - array_elements *= arr_size; - deref = parent; - } - - assert(deref->deref_type == nir_deref_type_var); - int binding = const_array_offset + deref->var->data.binding; - block_name = ralloc_asprintf(b->shader, "%s%s", - glsl_get_type_name(deref->var->interface_type), - block_name); - - struct gl_linked_shader *linked_shader = - shader_program->_LinkedShaders[b->shader->info.stage]; - - unsigned num_blocks; - struct gl_uniform_block **blocks; - if (nir_deref_mode_is(deref, nir_var_mem_ubo)) { - num_blocks = linked_shader->Program->info.num_ubos; - blocks = linked_shader->Program->sh.UniformBlocks; - } else { - assert(nir_deref_mode_is(deref, nir_var_mem_ssbo)); - num_blocks = linked_shader->Program->info.num_ssbos; - blocks = linked_shader->Program->sh.ShaderStorageBlocks; - } - - /* Block names are optional with ARB_gl_spirv so use the binding instead. */ - bool use_bindings = shader_program->data->spirv; - - for (unsigned i = 0; i < num_blocks; i++) { - if (( use_bindings && binding == blocks[i]->Binding) || - (!use_bindings && strcmp(block_name, blocks[i]->name.string) == 0)) { - deref->var->data.driver_location = i - const_array_offset; - if (nonconst_index) - return nir_iadd_imm(b, nonconst_index, i); - else - return nir_imm_int(b, i); - } - } - - /* TODO: Investigate if we could change the code to assign Bindings to the - * blocks that were not explicitly assigned, so we can always compare - * bindings. - */ - - if (use_bindings) - unreachable("Failed to find the block by binding"); - else - unreachable("Failed to find the block by name"); -} - -static void -get_block_index_offset(nir_variable *var, - const struct gl_shader_program *shader_program, - gl_shader_stage stage, - unsigned *index, unsigned *offset) -{ - - struct gl_linked_shader *linked_shader = - shader_program->_LinkedShaders[stage]; - - unsigned num_blocks; - struct gl_uniform_block **blocks; - if (var->data.mode == nir_var_mem_ubo) { - num_blocks = linked_shader->Program->info.num_ubos; - blocks = linked_shader->Program->sh.UniformBlocks; - } else { - assert(var->data.mode == nir_var_mem_ssbo); - num_blocks = linked_shader->Program->info.num_ssbos; - blocks = linked_shader->Program->sh.ShaderStorageBlocks; - } - - /* Block names are optional with ARB_gl_spirv so use the binding instead. */ - bool use_bindings = shader_program->data->spirv; - - for (unsigned i = 0; i < num_blocks; i++) { - const char *block_name = glsl_get_type_name(var->interface_type); - if (( use_bindings && blocks[i]->Binding == var->data.binding) || - (!use_bindings && strcmp(block_name, blocks[i]->name.string) == 0)) { - var->data.driver_location = i; - *index = i; - *offset = blocks[i]->Uniforms[var->data.location].Offset; - return; - } - } - - if (use_bindings) - unreachable("Failed to find the block by binding"); - else - unreachable("Failed to find the block by name"); -} - -static bool -lower_buffer_interface_derefs_impl(nir_function_impl *impl, - const struct gl_shader_program *shader_program) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - /* this must be a separate loop before the main pass in order to ensure that - * access info is fully propagated prior to the info being lost during rewrites - */ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic == nir_intrinsic_load_deref || - intrin->intrinsic == nir_intrinsic_store_deref) { - nir_variable *var = nir_intrinsic_get_var(intrin, 0); - assert(var); - nir_intrinsic_set_access(intrin, nir_intrinsic_access(intrin) | var->data.access); - } - } - } - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (!nir_deref_mode_is_one_of(deref, nir_var_mem_ubo | - nir_var_mem_ssbo)) - break; - - /* We use nir_address_format_32bit_index_offset */ - assert(deref->dest.is_ssa); - assert(deref->dest.ssa.bit_size == 32); - deref->dest.ssa.num_components = 2; - - progress = true; - - b.cursor = nir_before_instr(&deref->instr); - - unsigned offset = 0; - nir_ssa_def *ptr; - if (deref->deref_type == nir_deref_type_var && - !glsl_type_is_interface(glsl_without_array(deref->var->type))) { - /* This variable is contained in an interface block rather than - * containing one. We need the block index and its offset - * inside that block - */ - unsigned index; - get_block_index_offset(deref->var, shader_program, - b.shader->info.stage, - &index, &offset); - ptr = nir_imm_ivec2(&b, index, offset); - } else if (glsl_type_is_interface(deref->type)) { - /* This is the last deref before the block boundary. - * Everything after this point is a byte offset and will be - * handled by nir_lower_explicit_io(). - */ - nir_ssa_def *index = get_block_array_index(&b, deref, - shader_program); - ptr = nir_vec2(&b, index, nir_imm_int(&b, offset)); - } else { - /* This will get handled by nir_lower_explicit_io(). */ - break; - } - - nir_deref_instr *cast = nir_build_deref_cast(&b, ptr, deref->modes, - deref->type, 0); - /* Set the alignment on the cast so that we get good alignment out - * of nir_lower_explicit_io. Our offset to the start of the UBO - * variable is always a constant, so we can use the maximum - * align_mul. - */ - cast->cast.align_mul = NIR_ALIGN_MUL_MAX; - cast->cast.align_offset = offset % NIR_ALIGN_MUL_MAX; - - nir_ssa_def_rewrite_uses(&deref->dest.ssa, - &cast->dest.ssa); - nir_deref_instr_remove_if_unused(deref); - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_one_of(deref, nir_var_mem_ubo | - nir_var_mem_ssbo)) - break; - - /* UBO and SSBO Booleans are 32-bit integers where any non-zero - * value is considered true. NIR Booleans, on the other hand - * are 1-bit values until you get to a very late stage of the - * compilation process. We need to turn those 1-bit loads into - * a 32-bit load wrapped in an i2b to get a proper NIR boolean - * from the SSBO. - */ - if (glsl_type_is_boolean(deref->type)) { - assert(intrin->dest.is_ssa); - b.cursor = nir_after_instr(&intrin->instr); - intrin->dest.ssa.bit_size = 32; - nir_ssa_def *bval = nir_i2b(&b, &intrin->dest.ssa); - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - bval, - bval->parent_instr); - progress = true; - } - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_one_of(deref, nir_var_mem_ubo | - nir_var_mem_ssbo)) - break; - - /* SSBO Booleans are 32-bit integers where any non-zero value - * is considered true. NIR Booleans, on the other hand are - * 1-bit values until you get to a very late stage of the - * compilation process. We need to turn those 1-bit stores - * into a b2i32 followed by a 32-bit store. Technically the - * value we write doesn't have to be 0/1 so once Booleans are - * lowered to 32-bit values, we have an unneeded sanitation - * step but in practice it doesn't cost much. - */ - if (glsl_type_is_boolean(deref->type)) { - assert(intrin->src[1].is_ssa); - b.cursor = nir_before_instr(&intrin->instr); - nir_ssa_def *ival = nir_b2i32(&b, intrin->src[1].ssa); - nir_instr_rewrite_src(&intrin->instr, &intrin->src[1], - nir_src_for_ssa(ival)); - progress = true; - } - break; - } - - case nir_intrinsic_copy_deref: - unreachable("copy_deref should be lowered by now"); - break; - - default: - /* Nothing to do */ - break; - } - break; - } - - default: - break; /* Nothing to do */ - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -gl_nir_lower_buffers(nir_shader *shader, - const struct gl_shader_program *shader_program) -{ - bool progress = false; - - nir_foreach_variable_with_modes(var, shader, nir_var_mem_ubo | nir_var_mem_ssbo) { - var->data.driver_location = -1; - progress = true; - } - - /* First, we lower the derefs to turn block variable and array derefs into - * a nir_address_format_32bit_index_offset pointer. From there forward, - * we leave the derefs in place and let nir_lower_explicit_io handle them. - */ - nir_foreach_function(function, shader) { - if (function->impl && - lower_buffer_interface_derefs_impl(function->impl, shader_program)) - progress = true; - } - - /* If that did something, we validate and then call nir_lower_explicit_io - * to finish the process. - */ - if (progress) { - nir_validate_shader(shader, "Lowering buffer interface derefs"); - nir_lower_explicit_io(shader, nir_var_mem_ubo | nir_var_mem_ssbo, - nir_address_format_32bit_index_offset); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_images.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_images.c deleted file mode 100644 index 0a701d4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_images.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright © 2019 Red Hat Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 - * - * Lower image operations by turning the image_deref_* into a image_* on an - * index number or bindless_image_* intrinsic on a load_deref of the previous - * deref source. All applicable indicies are also set so that fetching the - * variable in the backend wouldn't be needed anymore. - */ - -#include "../nir/nir.h" -#include "../nir/nir_builder.h" -#include "../nir/nir_deref.h" - -#include "gl_nir.h" - -static void -type_size_align_1(const struct glsl_type *type, unsigned *size, unsigned *align) -{ - unsigned s; - - if (glsl_type_is_array(type)) - s = glsl_get_aoa_size(type); - else - s = 1; - - *size = s; - *align = s; -} - -static bool -lower_instr(nir_builder *b, nir_instr *instr, void *cb_data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - bool bindless_only = *(bool *)cb_data; - - nir_intrinsic_instr *intrinsic = nir_instr_as_intrinsic(instr); - - nir_deref_instr *deref; - nir_variable *var; - - switch (intrinsic->intrinsic) { - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_inc_wrap: - case nir_intrinsic_image_deref_atomic_dec_wrap: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_image_deref_samples_identical: - case nir_intrinsic_image_deref_descriptor_amd: - case nir_intrinsic_image_deref_store: { - deref = nir_src_as_deref(intrinsic->src[0]); - var = nir_deref_instr_get_variable(deref); - break; - } - default: - return false; - } - - bool bindless = var->data.mode != nir_var_image || var->data.bindless; - if (bindless_only && !bindless) - return false; - - b->cursor = nir_before_instr(instr); - - nir_ssa_def *src; - int range_base = 0; - if (bindless) { - src = nir_load_deref(b, deref); - } else if (b->shader->options->lower_image_offset_to_range_base) { - src = nir_build_deref_offset(b, deref, type_size_align_1); - range_base = var->data.driver_location; - } else { - src = nir_iadd_imm(b, - nir_build_deref_offset(b, deref, type_size_align_1), - var->data.driver_location); - } - nir_rewrite_image_intrinsic(intrinsic, src, bindless); - if (!bindless) - nir_intrinsic_set_range_base(intrinsic, range_base); - - return true; -} - -bool -gl_nir_lower_images(nir_shader *shader, bool bindless_only) -{ - return nir_shader_instructions_pass(shader, lower_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &bindless_only); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_packed_varyings.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_packed_varyings.c deleted file mode 100644 index 9c699c5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_packed_varyings.c +++ /dev/null @@ -1,1049 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * Copyright © 2022 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * This lowering pass generates GLSL code that manually packs varyings into - * vec4 slots, for the benefit of back-ends that don't support packed varyings - * natively. - * - * For example, the following shader: - * - * out mat3x2 foo; // location=4, location_frac=0 - * out vec3 bar[2]; // location=5, location_frac=2 - * - * main() - * { - * ... - * } - * - * Is rewritten to: - * - * mat3x2 foo; - * vec3 bar[2]; - * out vec4 packed4; // location=4, location_frac=0 - * out vec4 packed5; // location=5, location_frac=0 - * out vec4 packed6; // location=6, location_frac=0 - * - * main() - * { - * ... - * packed4.xy = foo[0]; - * packed4.zw = foo[1]; - * packed5.xy = foo[2]; - * packed5.zw = bar[0].xy; - * packed6.x = bar[0].z; - * packed6.yzw = bar[1]; - * } - * - * This lowering pass properly handles "double parking" of a varying vector - * across two varying slots. For example, in the code above, two of the - * components of bar[0] are stored in packed5, and the remaining component is - * stored in packed6. - * - * Note that in theory, the extra instructions may cause some loss of - * performance. However, hopefully in most cases the performance loss will - * either be absorbed by a later optimization pass, or it will be offset by - * memory bandwidth savings (because fewer varyings are used). - * - * This lowering pass also packs flat floats, ints, and uints together, by - * using ivec4 as the base type of flat "varyings", and using appropriate - * casts to convert floats and uints into ints. - * - * This lowering pass also handles varyings whose type is a struct or an array - * of struct. Structs are packed in order and with no gaps, so there may be a - * performance penalty due to structure elements being double-parked. - * - * Lowering of geometry shader inputs is slightly more complex, since geometry - * inputs are always arrays, so we need to lower arrays to arrays. For - * example, the following input: - * - * in struct Foo { - * float f; - * vec3 v; - * vec2 a[2]; - * } arr[3]; // location=4, location_frac=0 - * - * Would get lowered like this if it occurred in a fragment shader: - * - * struct Foo { - * float f; - * vec3 v; - * vec2 a[2]; - * } arr[3]; - * in vec4 packed4; // location=4, location_frac=0 - * in vec4 packed5; // location=5, location_frac=0 - * in vec4 packed6; // location=6, location_frac=0 - * in vec4 packed7; // location=7, location_frac=0 - * in vec4 packed8; // location=8, location_frac=0 - * in vec4 packed9; // location=9, location_frac=0 - * - * main() - * { - * arr[0].f = packed4.x; - * arr[0].v = packed4.yzw; - * arr[0].a[0] = packed5.xy; - * arr[0].a[1] = packed5.zw; - * arr[1].f = packed6.x; - * arr[1].v = packed6.yzw; - * arr[1].a[0] = packed7.xy; - * arr[1].a[1] = packed7.zw; - * arr[2].f = packed8.x; - * arr[2].v = packed8.yzw; - * arr[2].a[0] = packed9.xy; - * arr[2].a[1] = packed9.zw; - * ... - * } - * - * But it would get lowered like this if it occurred in a geometry shader: - * - * struct Foo { - * float f; - * vec3 v; - * vec2 a[2]; - * } arr[3]; - * in vec4 packed4[3]; // location=4, location_frac=0 - * in vec4 packed5[3]; // location=5, location_frac=0 - * - * main() - * { - * arr[0].f = packed4[0].x; - * arr[0].v = packed4[0].yzw; - * arr[0].a[0] = packed5[0].xy; - * arr[0].a[1] = packed5[0].zw; - * arr[1].f = packed4[1].x; - * arr[1].v = packed4[1].yzw; - * arr[1].a[0] = packed5[1].xy; - * arr[1].a[1] = packed5[1].zw; - * arr[2].f = packed4[2].x; - * arr[2].v = packed4[2].yzw; - * arr[2].a[0] = packed5[2].xy; - * arr[2].a[1] = packed5[2].zw; - * ... - * } - */ - -#include "../nir/nir.h" -#include "../nir/nir_builder.h" -#include "gl_nir.h" -#include "gl_nir_linker.h" -#include "../../mesa/program/prog_instruction.h" -#include "../../mesa/main/mtypes.h" - -/** - * Visitor that performs varying packing. For each varying declared in the - * shader, this visitor determines whether it needs to be packed. If so, it - * demotes it to an ordinary global, creates new packed varyings, and - * generates assignments to convert between the original varying and the - * packed varying. - */ -struct lower_packed_varyings_state -{ - const struct gl_constants *consts; - - struct gl_shader_program *prog; - - /** - * Memory context used to allocate new instructions for the shader. - */ - void *mem_ctx; - - /** - * Number of generic varying slots which are used by this shader. This is - * used to allocate temporary intermediate data structures. If any varying - * used by this shader has a location greater than or equal to - * VARYING_SLOT_VAR0 + locations_used, an assertion will fire. - */ - unsigned locations_used; - - const uint8_t* components; - - /** - * Array of pointers to the packed varyings that have been created for each - * generic varying slot. NULL entries in this array indicate varying slots - * for which a packed varying has not been created yet. - */ - nir_variable **packed_varyings; - - nir_shader *shader; - - nir_function_impl *impl; - - nir_builder b; - - /** - * Type of varying which is being lowered in this pass (either - * nir_var_shader_in or ir_var_shader_out). - */ - nir_variable_mode mode; - - /** - * If we are currently lowering geometry shader inputs, the number of input - * vertices the geometry shader accepts. Otherwise zero. - */ - unsigned gs_input_vertices; - - bool disable_varying_packing; - bool disable_xfb_packing; - bool xfb_enabled; - bool ifc_exposed_to_query_api; -}; - -bool -lower_packed_varying_needs_lowering(nir_shader *shader, nir_variable *var, - bool xfb_enabled, bool disable_xfb_packing, - bool disable_varying_packing) -{ - /* Things composed of vec4's, varyings with explicitly assigned - * locations or varyings marked as must_be_shader_input (which might be used - * by interpolateAt* functions) shouldn't be lowered. Everything else can be. - */ - if (var->data.explicit_location || var->data.must_be_shader_input) - return false; - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, shader->info.stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - /* Some drivers (e.g. panfrost) don't support packing of transform - * feedback varyings. - */ - if (disable_xfb_packing && var->data.is_xfb && - !(glsl_type_is_array(type) || glsl_type_is_struct(type) || glsl_type_is_matrix(type)) && - xfb_enabled) - return false; - - /* Override disable_varying_packing if the var is only used by transform - * feedback. Also override it if transform feedback is enabled and the - * variable is an array, struct or matrix as the elements of these types - * will always have the same interpolation and therefore are safe to pack. - */ - if (disable_varying_packing && !var->data.is_xfb_only && - !((glsl_type_is_array(type) || glsl_type_is_struct(type) || glsl_type_is_matrix(type)) && - xfb_enabled)) - return false; - - type = glsl_without_array(type); - if (glsl_get_vector_elements(type) == 4 && !glsl_type_is_64bit(type)) - return false; - return true; -} - -/** - * If no packed varying has been created for the given varying location yet, - * create it and add it to the shader. - * - * The newly created varying inherits its interpolation parameters from \c - * unpacked_var. Its base type is ivec4 if we are lowering a flat varying, - * vec4 otherwise. - */ -static void -create_or_update_packed_varying(struct lower_packed_varyings_state *state, - nir_variable *unpacked_var, - const char *name, unsigned location, - unsigned slot, unsigned vertex_index) -{ - assert(slot < state->locations_used); - if (state->packed_varyings[slot] == NULL) { - assert(state->components[slot] != 0); - assert(name); - - nir_variable *packed_var = rzalloc(state->shader, nir_variable); - packed_var->name = ralloc_asprintf(packed_var, "packed:%s", name); - packed_var->data.mode = state->mode; - - bool is_interpolation_flat = - unpacked_var->data.interpolation == INTERP_MODE_FLAT || - glsl_contains_integer(unpacked_var->type) || - glsl_contains_double(unpacked_var->type); - - const struct glsl_type *packed_type; - if (is_interpolation_flat) - packed_type = glsl_vector_type(GLSL_TYPE_INT, state->components[slot]); - else - packed_type = glsl_vector_type(GLSL_TYPE_FLOAT, state->components[slot]); - - if (state->gs_input_vertices != 0) { - packed_type = - glsl_array_type(packed_type, state->gs_input_vertices, 0); - } - - packed_var->type = packed_type; - packed_var->data.centroid = unpacked_var->data.centroid; - packed_var->data.sample = unpacked_var->data.sample; - packed_var->data.patch = unpacked_var->data.patch; - packed_var->data.interpolation = is_interpolation_flat ? - (unsigned) INTERP_MODE_FLAT : unpacked_var->data.interpolation; - packed_var->data.location = location; - packed_var->data.precision = unpacked_var->data.precision; - packed_var->data.always_active_io = unpacked_var->data.always_active_io; - packed_var->data.stream = NIR_STREAM_PACKED; - - nir_shader_add_variable(state->shader, packed_var); - state->packed_varyings[slot] = packed_var; - } else { - nir_variable *var = state->packed_varyings[slot]; - - /* The slot needs to be marked as always active if any variable that got - * packed there was. - */ - var->data.always_active_io |= unpacked_var->data.always_active_io; - - /* For geometry shader inputs, only update the packed variable name the - * first time we visit each component. - */ - if (state->gs_input_vertices == 0 || vertex_index == 0) { - assert(name); - ralloc_asprintf_append((char **) &var->name, ",%s", name); - } - } -} - -/** - * Retrieve the packed varying corresponding to the given varying location. - * - * \param vertex_index: if we are lowering geometry shader inputs, then this - * indicates which vertex we are currently lowering. Otherwise it is ignored. - */ -static nir_deref_instr * -get_packed_varying_deref(struct lower_packed_varyings_state *state, - unsigned location, nir_variable *unpacked_var, - const char *name, unsigned vertex_index) -{ - unsigned slot = location - VARYING_SLOT_VAR0; - assert(slot < state->locations_used); - - create_or_update_packed_varying(state, unpacked_var, name, location, slot, - vertex_index); - - nir_deref_instr *deref = - nir_build_deref_var(&state->b, state->packed_varyings[slot]); - - if (state->gs_input_vertices != 0) { - /* When lowering GS inputs, the packed variable is an array, so we need - * to dereference it using vertex_index. - */ - nir_load_const_instr *c_idx = - nir_load_const_instr_create(state->b.shader, 1, 32); - c_idx->value[0].u32 = vertex_index; - nir_builder_instr_insert(&state->b, &c_idx->instr); - - deref = nir_build_deref_array(&state->b, deref, &c_idx->def); - } - - return deref; -} - -struct packing_store_values { - bool is_64bit; - unsigned writemasks[2]; - nir_ssa_def *values[2]; - nir_deref_instr *deref; -}; - -/** - * Make an ir_assignment from \c rhs to \c lhs, performing appropriate - * bitcasts if necessary to match up types. - * - * This function is called when packing varyings. - */ -static struct packing_store_values * -bitwise_assign_pack(struct lower_packed_varyings_state *state, - nir_deref_instr *packed_deref, - nir_deref_instr *unpacked_deref, - const struct glsl_type *unpacked_type, - nir_ssa_def *value, - unsigned writemask) - -{ - nir_variable *packed_var = nir_deref_instr_get_variable(packed_deref); - - enum glsl_base_type packed_base_type = glsl_get_base_type(packed_var->type); - enum glsl_base_type unpacked_base_type = glsl_get_base_type(unpacked_type); - - struct packing_store_values *store_state = - calloc(1, sizeof(struct packing_store_values)); - - if (unpacked_base_type != packed_base_type) { - /* Since we only mix types in flat varyings, and we always store flat - * varyings as type ivec4, we need only produce conversions from (uint - * or float) to int. - */ - assert(packed_base_type == GLSL_TYPE_INT); - switch (unpacked_base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_FLOAT: - value = nir_mov(&state->b, value); - break; - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - assert(glsl_get_vector_elements(unpacked_type) <= 2); - if (glsl_get_vector_elements(unpacked_type) == 2) { - assert(glsl_get_vector_elements(packed_var->type) == 4); - - unsigned swiz_x = 0; - unsigned writemask = 0x3; - nir_ssa_def *swizzle = nir_swizzle(&state->b, value, &swiz_x, 1); - - store_state->is_64bit = true; - store_state->deref = packed_deref; - store_state->values[0] = nir_unpack_64_2x32(&state->b, swizzle); - store_state->writemasks[0] = writemask; - - unsigned swiz_y = 1; - writemask = 0xc; - swizzle = nir_swizzle(&state->b, value, &swiz_y, 1); - - store_state->deref = packed_deref; - store_state->values[1] = nir_unpack_64_2x32(&state->b, swizzle); - store_state->writemasks[1] = writemask; - return store_state; - } else { - value = nir_unpack_64_2x32(&state->b, value); - } - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - value = nir_unpack_64_2x32(&state->b, value); - break; - default: - assert(!"Unexpected type conversion while lowering varyings"); - break; - } - } - - store_state->deref = packed_deref; - store_state->values[0] = value; - store_state->writemasks[0] = writemask; - - return store_state; -} - -/** - * This function is called when unpacking varyings. - */ -static struct packing_store_values * -bitwise_assign_unpack(struct lower_packed_varyings_state *state, - nir_deref_instr *unpacked_deref, - nir_deref_instr *packed_deref, - const struct glsl_type *unpacked_type, - nir_ssa_def *value, unsigned writemask) -{ - nir_variable *packed_var = nir_deref_instr_get_variable(packed_deref); - - const struct glsl_type *packed_type = glsl_without_array(packed_var->type); - enum glsl_base_type packed_base_type = glsl_get_base_type(packed_type); - enum glsl_base_type unpacked_base_type = glsl_get_base_type(unpacked_type); - - struct packing_store_values *store_state = - calloc(1, sizeof(struct packing_store_values)); - - if (unpacked_base_type != packed_base_type) { - /* Since we only mix types in flat varyings, and we always store flat - * varyings as type ivec4, we need only produce conversions from int to - * (uint or float). - */ - assert(packed_base_type == GLSL_TYPE_INT); - - switch (unpacked_base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_FLOAT: - value = nir_mov(&state->b, value); - break; - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - assert(glsl_get_vector_elements(unpacked_type) <= 2); - if (glsl_get_vector_elements(unpacked_type) == 2) { - assert(glsl_get_vector_elements(packed_type) == 4); - - unsigned swiz_xy[2] = {0, 1}; - writemask = 1 << (ffs(writemask) - 1); - - store_state->is_64bit = true; - store_state->deref = unpacked_deref; - store_state->values[0] = - nir_pack_64_2x32(&state->b, - nir_swizzle(&state->b, value, swiz_xy, 2)); - store_state->writemasks[0] = writemask; - - unsigned swiz_zw[2] = {2, 3}; - writemask = writemask << 1; - - store_state->deref = unpacked_deref; - store_state->values[1] = - nir_pack_64_2x32(&state->b, - nir_swizzle(&state->b, value, swiz_zw, 2)); - store_state->writemasks[1] = writemask; - - return store_state; - } else { - value = nir_pack_64_2x32(&state->b, value); - } - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - value = nir_pack_64_2x32(&state->b, value); - break; - default: - assert(!"Unexpected type conversion while lowering varyings"); - break; - } - } - - store_state->deref = unpacked_deref; - store_state->values[0] = value; - store_state->writemasks[0] = writemask; - - return store_state; -} - -static void -create_store_deref(struct lower_packed_varyings_state *state, - nir_deref_instr *deref, nir_ssa_def *value, - unsigned writemask, bool is_64bit) -{ - /* If dest and value have different number of components pack the srcs - * into a vector. - */ - const struct glsl_type *type = glsl_without_array(deref->type); - unsigned comps = glsl_get_vector_elements(type); - if (value->num_components != comps) { - nir_ssa_def *srcs[4]; - - unsigned comp = 0; - for (unsigned i = 0; i < comps; i++) { - if (writemask & (1 << i)) { - if (is_64bit && state->mode == nir_var_shader_in) - srcs[i] = value; - else - srcs[i] = nir_swizzle(&state->b, value, &comp, 1); - comp++; - } else { - srcs[i] = nir_ssa_undef(&state->b, 1, - glsl_type_is_64bit(type) ? 64 : 32); - } - } - value = nir_vec(&state->b, srcs, comps); - } - - nir_store_deref(&state->b, deref, value, writemask); -} - -static unsigned -lower_varying(struct lower_packed_varyings_state *state, - nir_ssa_def *rhs_swizzle, unsigned writemask, - const struct glsl_type *type, unsigned fine_location, - nir_variable *unpacked_var, nir_deref_instr *unpacked_var_deref, - const char *name, bool gs_input_toplevel, unsigned vertex_index); - -/** - * Recursively pack or unpack a varying for which we need to iterate over its - * constituent elements. - * This takes care of both arrays and matrices. - * - * \param gs_input_toplevel should be set to true if we are lowering geometry - * shader inputs, and we are currently lowering the whole input variable - * (i.e. we are lowering the array whose index selects the vertex). - * - * \param vertex_index: if we are lowering geometry shader inputs, and the - * level of the array that we are currently lowering is *not* the top level, - * then this indicates which vertex we are currently lowering. Otherwise it - * is ignored. - */ -static unsigned -lower_arraylike(struct lower_packed_varyings_state *state, - nir_ssa_def *rhs_swizzle, unsigned writemask, - const struct glsl_type *type, unsigned fine_location, - nir_variable *unpacked_var, nir_deref_instr *unpacked_var_deref, - const char *name, bool gs_input_toplevel, unsigned vertex_index) -{ - unsigned array_size = glsl_get_length(type); - unsigned dmul = glsl_type_is_64bit(glsl_without_array(type)) ? 2 : 1; - if (array_size * dmul + fine_location % 4 > 4) { - fine_location = ALIGN_POT(fine_location, dmul); - } - - type = glsl_get_array_element(type); - for (unsigned i = 0; i < array_size; i++) { - nir_load_const_instr *c_idx = - nir_load_const_instr_create(state->b.shader, 1, 32); - c_idx->value[0].u32 = i; - nir_builder_instr_insert(&state->b, &c_idx->instr); - - nir_deref_instr *unpacked_array_deref = - nir_build_deref_array(&state->b, unpacked_var_deref, &c_idx->def); - - if (gs_input_toplevel) { - /* Geometry shader inputs are a special case. Instead of storing - * each element of the array at a different location, all elements - * are at the same location, but with a different vertex index. - */ - (void) lower_varying(state, rhs_swizzle, writemask, type, fine_location, - unpacked_var, unpacked_array_deref, name, false, i); - } else { - char *subscripted_name = name ? - ralloc_asprintf(state->mem_ctx, "%s[%d]", name, i) : NULL; - fine_location = - lower_varying(state, rhs_swizzle, writemask, type, fine_location, - unpacked_var, unpacked_array_deref, - subscripted_name, false, vertex_index); - } - } - - return fine_location; -} - -/** - * Recursively pack or unpack the given varying (or portion of a varying) by - * traversing all of its constituent vectors. - * - * \param fine_location is the location where the first constituent vector - * should be packed--the word "fine" indicates that this location is expressed - * in multiples of a float, rather than multiples of a vec4 as is used - * elsewhere in Mesa. - * - * \param gs_input_toplevel should be set to true if we are lowering geometry - * shader inputs, and we are currently lowering the whole input variable - * (i.e. we are lowering the array whose index selects the vertex). - * - * \param vertex_index: if we are lowering geometry shader inputs, and the - * level of the array that we are currently lowering is *not* the top level, - * then this indicates which vertex we are currently lowering. Otherwise it - * is ignored. - * - * \return the location where the next constituent vector (after this one) - * should be packed. - */ -static unsigned -lower_varying(struct lower_packed_varyings_state *state, - nir_ssa_def *rhs_swizzle, unsigned writemask, - const struct glsl_type *type, unsigned fine_location, - nir_variable *unpacked_var, nir_deref_instr *unpacked_var_deref, - const char *name, bool gs_input_toplevel, unsigned vertex_index) -{ - unsigned dmul = glsl_type_is_64bit(type) ? 2 : 1; - /* When gs_input_toplevel is set, we should be looking at a geometry shader - * input array. - */ - assert(!gs_input_toplevel || glsl_type_is_array(type)); - - if (glsl_type_is_struct(type)) { - unsigned struct_len = glsl_get_length(type); - for (unsigned i = 0; i < struct_len; i++) { - const char *field_name = glsl_get_struct_elem_name(type, i); - char *deref_name = name ? - ralloc_asprintf(state->mem_ctx, "%s.%s", name, field_name) : - NULL; - const struct glsl_type *field_type = glsl_get_struct_field(type, i); - - nir_deref_instr *unpacked_struct_deref = - nir_build_deref_struct(&state->b, unpacked_var_deref, i); - fine_location = lower_varying(state, rhs_swizzle, writemask, field_type, - fine_location, unpacked_var, - unpacked_struct_deref, deref_name, - false, vertex_index); - } - - return fine_location; - } else if (glsl_type_is_array(type)) { - /* Arrays are packed/unpacked by considering each array element in - * sequence. - */ - return lower_arraylike(state, rhs_swizzle, writemask, type, fine_location, - unpacked_var, unpacked_var_deref, name, - gs_input_toplevel, vertex_index); - } else if (glsl_type_is_matrix(type)) { - /* Matrices are packed/unpacked by considering each column vector in - * sequence. - */ - return lower_arraylike(state, rhs_swizzle, writemask, type, fine_location, - unpacked_var, unpacked_var_deref, name, false, - vertex_index); - } else if (glsl_get_vector_elements(type) * dmul + fine_location % 4 > 4) { - /* We don't have code to split up 64bit variable between two - * varying slots, instead we add padding if necessary. - */ - unsigned aligned_fine_location = ALIGN_POT(fine_location, dmul); - if (aligned_fine_location != fine_location) { - return lower_varying(state, rhs_swizzle, writemask, type, - aligned_fine_location, unpacked_var, - unpacked_var_deref, name, false, vertex_index); - } - - /* This vector is going to be "double parked" across two varying slots, - * so handle it as two separate assignments. For doubles, a dvec3/dvec4 - * can end up being spread over 3 slots. However the second splitting - * will happen later, here we just always want to split into 2. - */ - unsigned left_components, right_components; - unsigned left_swizzle_values[4] = { 0, 0, 0, 0 }; - unsigned right_swizzle_values[4] = { 0, 0, 0, 0 }; - char left_swizzle_name[4] = { 0, 0, 0, 0 }; - char right_swizzle_name[4] = { 0, 0, 0, 0 }; - - left_components = 4 - fine_location % 4; - if (glsl_type_is_64bit(type)) { - left_components /= 2; - assert(left_components > 0); - } - right_components = glsl_get_vector_elements(type) - left_components; - - /* If set use previously set writemask to offset the following - * swizzle/writemasks. This can happen when spliting a dvec, etc across - * slots. - */ - unsigned offset = 0; - if (writemask) { - for (unsigned i = 0; i < left_components; i++) { - /* Keep going until we find the first component of the write */ - if (!(writemask & (1 << i))) { - offset++; - } else - break; - } - } - - for (unsigned i = 0; i < left_components; i++) { - left_swizzle_values[i] = i + offset; - left_swizzle_name[i] = "xyzw"[i + offset]; - } - for (unsigned i = 0; i < right_components; i++) { - right_swizzle_values[i] = i + left_components + offset; - right_swizzle_name[i] = "xyzw"[i + left_components + offset]; - } - - if (left_components) { - char *left_name = name ? - ralloc_asprintf(state->mem_ctx, "%s.%s", name, left_swizzle_name) : - NULL; - - nir_ssa_def *left_swizzle = NULL; - unsigned left_writemask = ~0u; - if (state->mode == nir_var_shader_out) { - nir_ssa_def *ssa_def = rhs_swizzle ? - rhs_swizzle : nir_load_deref(&state->b, unpacked_var_deref); - left_swizzle = - nir_swizzle(&state->b, ssa_def, - left_swizzle_values, left_components); - } else { - left_writemask = ((1 << left_components) - 1) << offset; - } - - const struct glsl_type *swiz_type = - glsl_vector_type(glsl_get_base_type(type), left_components); - fine_location = lower_varying(state, left_swizzle, left_writemask, swiz_type, - fine_location, unpacked_var, unpacked_var_deref, - left_name, false, vertex_index); - } else { - /* Top up the fine location to the next slot */ - fine_location++; - } - - char *right_name = name ? - ralloc_asprintf(state->mem_ctx, "%s.%s", name, right_swizzle_name) : - NULL; - - nir_ssa_def *right_swizzle = NULL; - unsigned right_writemask = ~0u; - if (state->mode == nir_var_shader_out) { - nir_ssa_def *ssa_def = rhs_swizzle ? - rhs_swizzle : nir_load_deref(&state->b, unpacked_var_deref); - right_swizzle = - nir_swizzle(&state->b, ssa_def, - right_swizzle_values, right_components); - } else { - right_writemask = ((1 << right_components) - 1) << (left_components + offset); - } - - const struct glsl_type *swiz_type = - glsl_vector_type(glsl_get_base_type(type), right_components); - return lower_varying(state, right_swizzle, right_writemask, swiz_type, - fine_location, unpacked_var, unpacked_var_deref, - right_name, false, vertex_index); - } else { - /* No special handling is necessary; (un)pack the old varying (now temp) - * from/into the new packed varying. - */ - unsigned components = glsl_get_vector_elements(type) * dmul; - unsigned location = fine_location / 4; - unsigned location_frac = fine_location % 4; - - assert(state->components[location - VARYING_SLOT_VAR0] >= components); - nir_deref_instr *packed_deref = - get_packed_varying_deref(state, location, unpacked_var, name, - vertex_index); - - nir_variable *packed_var = - state->packed_varyings[location - VARYING_SLOT_VAR0]; - if (unpacked_var->data.stream != 0) { - assert(unpacked_var->data.stream < 4); - for (unsigned i = 0; i < components; ++i) { - packed_var->data.stream |= - unpacked_var->data.stream << (2 * (location_frac + i)); - } - } - - struct packing_store_values *store_value; - if (state->mode == nir_var_shader_out) { - unsigned writemask = ((1 << components) - 1) << location_frac; - nir_ssa_def *value = rhs_swizzle ? rhs_swizzle : - nir_load_deref(&state->b, unpacked_var_deref); - - store_value = - bitwise_assign_pack(state, packed_deref, unpacked_var_deref, type, - value, writemask); - } else { - unsigned swizzle_values[4] = { 0, 0, 0, 0 }; - for (unsigned i = 0; i < components; ++i) { - swizzle_values[i] = i + location_frac; - } - - nir_ssa_def *ssa_def = &packed_deref->dest.ssa; - ssa_def = nir_load_deref(&state->b, packed_deref); - nir_ssa_def *swizzle = - nir_swizzle(&state->b, ssa_def, swizzle_values, components); - - store_value = bitwise_assign_unpack(state, unpacked_var_deref, - packed_deref, type, swizzle, - writemask); - } - - create_store_deref(state, store_value->deref, store_value->values[0], - store_value->writemasks[0], store_value->is_64bit); - if (store_value->is_64bit) { - create_store_deref(state, store_value->deref, store_value->values[1], - store_value->writemasks[1], store_value->is_64bit); - } - - free(store_value); - return fine_location + components; - } -} - -/* Recursively pack varying. */ -static void -pack_output_var(struct lower_packed_varyings_state *state, nir_variable *var) -{ - nir_deref_instr *unpacked_var_deref = nir_build_deref_var(&state->b, var); - lower_varying(state, NULL, ~0u, var->type, - var->data.location * 4 + var->data.location_frac, - var, unpacked_var_deref, var->name, - state->gs_input_vertices != 0, 0); -} - -static void -lower_output_var(struct lower_packed_varyings_state *state, nir_variable *var) -{ - if (var->data.mode != state->mode || - var->data.location < VARYING_SLOT_VAR0 || - !lower_packed_varying_needs_lowering(state->shader, var, - state->xfb_enabled, - state->disable_xfb_packing, - state->disable_varying_packing)) - return; - - /* Skip any new packed varyings we just added */ - if (strncmp("packed:", var->name, 7) == 0) - return; - - /* This lowering pass is only capable of packing floats and ints - * together when their interpolation mode is "flat". Treat integers as - * being flat when the interpolation mode is none. - */ - assert(var->data.interpolation == INTERP_MODE_FLAT || - var->data.interpolation == INTERP_MODE_NONE || - !glsl_contains_integer(var->type)); - - if (state->prog->SeparateShader && state->ifc_exposed_to_query_api) { - struct set *resource_set = _mesa_pointer_set_create(NULL); - - nir_add_packed_var_to_resource_list(state->consts, state->prog, - resource_set, var, - state->shader->info.stage, - GL_PROGRAM_OUTPUT); - - _mesa_set_destroy(resource_set, NULL); - } - - /* Change the old varying into an ordinary global. */ - var->data.mode = nir_var_shader_temp; - - nir_foreach_block(block, state->impl) { - if (state->shader->info.stage != MESA_SHADER_GEOMETRY) { - /* For shaders other than geometry, outputs need to be lowered before - * each return statement and at the end of main() - */ - if (nir_block_ends_in_return_or_halt(block)) { - state->b.cursor = nir_before_instr(nir_block_last_instr(block)); - pack_output_var(state, var); - } else if (block == nir_impl_last_block(state->impl)) { - state->b.cursor = nir_after_block(block); - pack_output_var(state, var); - } - } else { - /* For geometry shaders, outputs need to be lowered before each call - * to EmitVertex() - */ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_emit_vertex) - continue; - - state->b.cursor = nir_before_instr(instr); - pack_output_var(state, var); - } - } - } -} - -static void -lower_packed_outputs(struct lower_packed_varyings_state *state) -{ - nir_foreach_shader_out_variable_safe(var, state->shader) { - lower_output_var(state, var); - } -} - -static void -lower_packed_inputs(struct lower_packed_varyings_state *state) -{ - /* Shader inputs need to be lowered at the beginning of main() so set bulder - * cursor to insert packing code at the start of the main function. - */ - state->b.cursor = nir_before_block(nir_start_block(state->impl)); - - /* insert new varyings, lower old ones to locals and add unpacking code a - * the start of the shader. - */ - nir_foreach_shader_in_variable_safe(var, state->shader) { - if (var->data.mode != state->mode || - var->data.location < VARYING_SLOT_VAR0 || - !lower_packed_varying_needs_lowering(state->shader, var, - state->xfb_enabled, - state->disable_xfb_packing, - state->disable_varying_packing)) - continue; - - /* Skip any new packed varyings we just added */ - if (strncmp("packed:", var->name, 7) == 0) - continue; - - /* This lowering pass is only capable of packing floats and ints - * together when their interpolation mode is "flat". Treat integers as - * being flat when the interpolation mode is none. - */ - assert(var->data.interpolation == INTERP_MODE_FLAT || - var->data.interpolation == INTERP_MODE_NONE || - !glsl_contains_integer(var->type)); - - /* Program interface needs to expose varyings in case of SSO. Add the - * variable for program resource list before it gets modified and lost. - */ - if (state->prog->SeparateShader && state->ifc_exposed_to_query_api) { - struct set *resource_set = _mesa_pointer_set_create(NULL); - - nir_add_packed_var_to_resource_list(state->consts, state->prog, - resource_set, var, - state->shader->info.stage, - GL_PROGRAM_INPUT); - - _mesa_set_destroy(resource_set, NULL); - } - - /* Change the old varying into an ordinary global. */ - var->data.mode = nir_var_shader_temp; - - /* Recursively unpack varying. */ - nir_deref_instr *unpacked_var_deref = nir_build_deref_var(&state->b, var); - lower_varying(state, NULL, ~0u, var->type, - var->data.location * 4 + var->data.location_frac, - var, unpacked_var_deref, var->name, - state->gs_input_vertices != 0, 0); - } -} - -void -gl_nir_lower_packed_varyings(const struct gl_constants *consts, - struct gl_shader_program *prog, - void *mem_ctx, unsigned locations_used, - const uint8_t *components, - nir_variable_mode mode, unsigned gs_input_vertices, - struct gl_linked_shader *linked_shader, - bool disable_varying_packing, - bool disable_xfb_packing, bool xfb_enabled) -{ - struct lower_packed_varyings_state state; - nir_shader *shader = linked_shader->Program->nir; - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - assert(shader->info.stage != MESA_SHADER_COMPUTE); - - /* assert that functions have been inlined before packing is called */ - nir_foreach_function(f, shader) { - assert(f->impl == impl); - } - - nir_builder_init(&state.b, impl); - state.consts = consts; - state.prog = prog; - state.mem_ctx = mem_ctx; - state.shader = shader; - state.impl = impl; - state.locations_used = locations_used; - state.components = components; - state.mode = mode; - state.gs_input_vertices = gs_input_vertices; - state.disable_varying_packing = disable_varying_packing; - state.disable_xfb_packing = disable_xfb_packing; - state.xfb_enabled = xfb_enabled; - state.packed_varyings = - (nir_variable **) rzalloc_array_size(mem_ctx, sizeof(nir_variable *), - locations_used); - - /* Determine if the shader interface is exposed to api query */ - struct gl_linked_shader *linked_shaders[MESA_SHADER_STAGES]; - unsigned num_shaders = 0; - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i]) - linked_shaders[num_shaders++] = prog->_LinkedShaders[i]; - } - - if (mode == nir_var_shader_in) { - state.ifc_exposed_to_query_api = linked_shaders[0] == linked_shader; - lower_packed_inputs(&state); - } else { - state.ifc_exposed_to_query_api = - linked_shaders[num_shaders - 1] == linked_shader; - lower_packed_outputs(&state); - } - - nir_lower_global_vars_to_local(shader); - nir_fixup_deref_modes(shader); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers.c deleted file mode 100644 index 0ef2e3e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2005-2007 Brian Paul All Rights Reserved. - * Copyright (C) 2008 VMware, Inc. All Rights Reserved. - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "gl_nir.h" - -bool -gl_nir_lower_samplers(nir_shader *shader, - const struct gl_shader_program *shader_program) -{ - /* First, use gl_nir_lower_samplers_as_derefs to set var->data.binding - * based on the uniforms, and split structures to simplify derefs. - */ - gl_nir_lower_samplers_as_deref(shader, shader_program); - - return nir_lower_samplers(shader); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c deleted file mode 100644 index fe92032..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c +++ /dev/null @@ -1,413 +0,0 @@ -/* - * Copyright (C) 2005-2007 Brian Paul All Rights Reserved. - * Copyright (C) 2008 VMware, Inc. All Rights Reserved. - * Copyright © 2014 Intel Corporation - * Copyright © 2017 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 - * - * Lower sampler and image references of (non-bindless) uniforms by removing - * struct dereferences, and synthesizing new uniform variables without structs - * if required. - * - * This will allow backends to have a simple, uniform treatment of bindless and - * non-bindless samplers and images. - * - * Example: - * - * struct S { - * sampler2D tex[2]; - * sampler2D other; - * }; - * uniform S s[2]; - * - * tmp = texture(s[n].tex[m], coord); - * - * Becomes: - * - * decl_var uniform INTERP_MODE_NONE sampler2D[2][2] lower@s.tex (...) - * - * vec1 32 ssa_idx = $(2 * n + m) - * vec4 32 ssa_out = tex ssa_coord (coord), lower@s.tex[n][m] (texture), lower@s.tex[n][m] (sampler) - * - * and lower@s.tex has var->data.binding set to the base index as defined by - * the opaque uniform mapping. - */ - -#include "../nir/nir.h" -#include "../nir/nir_builder.h" -#include "../nir/nir_deref.h" -#include "gl_nir.h" -#include "ir_uniform.h" - -#include "../../util/compiler.h" -#include "../../mesa/main/shader_types.h" - -struct lower_samplers_as_deref_state { - nir_shader *shader; - const struct gl_shader_program *shader_program; - struct hash_table *remap_table; -}; - -/* Prepare for removing struct derefs. This pre-pass generates the name - * of the lowered deref, and calculates the lowered type and location. - * After that, once looking up (or creating if needed) the lowered var, - * constructing the new chain of deref instructions is a simple loop - * that skips the struct deref's - * - * path: appended to as we descend down the chain of deref instrs - * and remove struct derefs - * location: increased as we descend down and remove struct derefs - * type: updated as we recurse back up the chain of deref instrs - * with the resulting type after removing struct derefs - */ -static void -remove_struct_derefs_prep(nir_deref_instr **p, char **name, - unsigned *location, const struct glsl_type **type) -{ - nir_deref_instr *cur = p[0], *next = p[1]; - - if (!next) { - *type = cur->type; - return; - } - - switch (next->deref_type) { - case nir_deref_type_array: { - unsigned length = glsl_get_length(cur->type); - - remove_struct_derefs_prep(&p[1], name, location, type); - - *type = glsl_array_type(*type, length, glsl_get_explicit_stride(cur->type)); - break; - } - - case nir_deref_type_struct: { - *location += glsl_get_struct_location_offset(cur->type, next->strct.index); - ralloc_asprintf_append(name, ".%s", - glsl_get_struct_elem_name(cur->type, next->strct.index)); - - remove_struct_derefs_prep(&p[1], name, location, type); - break; - } - - default: - unreachable("Invalid deref type"); - break; - } -} - -static void -record_images_used(struct shader_info *info, - nir_intrinsic_instr *instr) -{ - nir_variable *var = - nir_deref_instr_get_variable(nir_src_as_deref(instr->src[0])); - - /* Structs have been lowered already, so get_aoa_size is sufficient. */ - const unsigned size = - glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1; - - BITSET_SET_RANGE(info->images_used, var->data.binding, - var->data.binding + (MAX2(size, 1) - 1)); - - enum glsl_sampler_dim sampler_dim = - glsl_get_sampler_dim(glsl_without_array(var->type)); - if (sampler_dim == GLSL_SAMPLER_DIM_BUF) { - BITSET_SET_RANGE(info->image_buffers, var->data.binding, - var->data.binding + (MAX2(size, 1) - 1)); - } - if (sampler_dim == GLSL_SAMPLER_DIM_MS) { - BITSET_SET_RANGE(info->msaa_images, var->data.binding, - var->data.binding + (MAX2(size, 1) - 1)); - } -} - - -static nir_deref_instr * -lower_deref(nir_builder *b, struct lower_samplers_as_deref_state *state, - nir_deref_instr *deref) -{ - nir_variable *var = nir_deref_instr_get_variable(deref); - gl_shader_stage stage = state->shader->info.stage; - - if (!(var->data.mode & (nir_var_uniform | nir_var_image)) || - var->data.bindless) - return NULL; - - nir_deref_path path; - nir_deref_path_init(&path, deref, state->remap_table); - assert(path.path[0]->deref_type == nir_deref_type_var); - - char *name = ralloc_asprintf(state->remap_table, "lower@%s", var->name); - unsigned location = var->data.location; - const struct glsl_type *type = NULL; - unsigned binding; - - /* - * We end up needing to do this in two passes, in order to generate - * the name of the lowered var (and detecting whether there even are - * any struct deref's), and then the second pass to construct the - * actual deref instructions after looking up / generating a new - * nir_variable (since we need to construct the deref_var first) - */ - - remove_struct_derefs_prep(path.path, &name, &location, &type); - - if (state->shader_program && var->data.how_declared != nir_var_hidden) { - /* For GLSL programs, look up the bindings in the uniform storage. */ - assert(location < state->shader_program->data->NumUniformStorage && - state->shader_program->data->UniformStorage[location].opaque[stage].active); - - binding = state->shader_program->data->UniformStorage[location].opaque[stage].index; - } else { - /* For ARB programs, built-in shaders, or internally generated sampler - * variables in GLSL programs, assume that whoever created the shader - * set the bindings correctly already. - */ - assert(var->data.explicit_binding); - binding = var->data.binding; - } - - if (var->type == type) { - /* Fast path: We did not encounter any struct derefs. */ - var->data.binding = binding; - return deref; - } - - uint32_t hash = _mesa_hash_string(name); - struct hash_entry *h = - _mesa_hash_table_search_pre_hashed(state->remap_table, hash, name); - - if (h) { - var = (nir_variable *)h->data; - } else { - var = nir_variable_create(state->shader, var->data.mode, type, name); - var->data.binding = binding; - - /* Don't set var->data.location. The old structure location could be - * used to index into gl_uniform_storage, assuming the full structure - * was walked in order. With the new split variables, this invariant - * no longer holds and there's no meaningful way to start from a base - * location and access a particular array element. Just leave it 0. - */ - - _mesa_hash_table_insert_pre_hashed(state->remap_table, hash, name, var); - } - - /* construct a new deref based on lowered var (skipping the struct deref's - * from the original deref: - */ - nir_deref_instr *new_deref = nir_build_deref_var(b, var); - for (nir_deref_instr **p = &path.path[1]; *p; p++) { - if ((*p)->deref_type == nir_deref_type_struct) - continue; - - assert((*p)->deref_type == nir_deref_type_array); - - new_deref = nir_build_deref_array(b, new_deref, - nir_ssa_for_src(b, (*p)->arr.index, 1)); - } - - return new_deref; -} - -static void -record_textures_used(struct shader_info *info, - nir_deref_instr *deref, - nir_texop op) -{ - nir_variable *var = nir_deref_instr_get_variable(deref); - - /* Structs have been lowered already, so get_aoa_size is sufficient. */ - const unsigned size = - glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1; - - BITSET_SET_RANGE(info->textures_used, var->data.binding, - var->data.binding + (MAX2(size, 1) - 1)); - - if (op == nir_texop_txf || - op == nir_texop_txf_ms || - op == nir_texop_txf_ms_mcs_intel) { - BITSET_SET_RANGE(info->textures_used_by_txf, var->data.binding, - var->data.binding + (MAX2(size, 1) - 1)); - } -} - -static void -record_samplers_used(struct shader_info *info, - nir_deref_instr *deref, - nir_texop op) -{ - nir_variable *var = nir_deref_instr_get_variable(deref); - - /* Structs have been lowered already, so get_aoa_size is sufficient. */ - const unsigned size = - glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1; - - BITSET_SET_RANGE(info->samplers_used, var->data.binding, - var->data.binding + (MAX2(size, 1) - 1)); -} - -static bool -lower_sampler(nir_tex_instr *instr, struct lower_samplers_as_deref_state *state, - nir_builder *b) -{ - int texture_idx = - nir_tex_instr_src_index(instr, nir_tex_src_texture_deref); - int sampler_idx = - nir_tex_instr_src_index(instr, nir_tex_src_sampler_deref); - - b->cursor = nir_before_instr(&instr->instr); - - if (texture_idx >= 0) { - assert(instr->src[texture_idx].src.is_ssa); - - nir_deref_instr *texture_deref = - lower_deref(b, state, nir_src_as_deref(instr->src[texture_idx].src)); - /* only lower non-bindless: */ - if (texture_deref) { - nir_instr_rewrite_src(&instr->instr, &instr->src[texture_idx].src, - nir_src_for_ssa(&texture_deref->dest.ssa)); - record_textures_used(&b->shader->info, texture_deref, instr->op); - } - } - - if (sampler_idx >= 0) { - assert(instr->src[sampler_idx].src.is_ssa); - nir_deref_instr *sampler_deref = - lower_deref(b, state, nir_src_as_deref(instr->src[sampler_idx].src)); - /* only lower non-bindless: */ - if (sampler_deref) { - nir_instr_rewrite_src(&instr->instr, &instr->src[sampler_idx].src, - nir_src_for_ssa(&sampler_deref->dest.ssa)); - record_samplers_used(&b->shader->info, sampler_deref, instr->op); - } - } - - return true; -} - -static bool -lower_intrinsic(nir_intrinsic_instr *instr, - struct lower_samplers_as_deref_state *state, - nir_builder *b) -{ - if (instr->intrinsic == nir_intrinsic_image_deref_load || - instr->intrinsic == nir_intrinsic_image_deref_store || - instr->intrinsic == nir_intrinsic_image_deref_atomic_add || - instr->intrinsic == nir_intrinsic_image_deref_atomic_imin || - instr->intrinsic == nir_intrinsic_image_deref_atomic_umin || - instr->intrinsic == nir_intrinsic_image_deref_atomic_imax || - instr->intrinsic == nir_intrinsic_image_deref_atomic_umax || - instr->intrinsic == nir_intrinsic_image_deref_atomic_and || - instr->intrinsic == nir_intrinsic_image_deref_atomic_or || - instr->intrinsic == nir_intrinsic_image_deref_atomic_xor || - instr->intrinsic == nir_intrinsic_image_deref_atomic_exchange || - instr->intrinsic == nir_intrinsic_image_deref_atomic_comp_swap || - instr->intrinsic == nir_intrinsic_image_deref_atomic_fadd || - instr->intrinsic == nir_intrinsic_image_deref_size || - instr->intrinsic == nir_intrinsic_image_deref_samples_identical || - instr->intrinsic == nir_intrinsic_image_deref_descriptor_amd || - instr->intrinsic == nir_intrinsic_image_deref_samples) { - - b->cursor = nir_before_instr(&instr->instr); - nir_deref_instr *deref = - lower_deref(b, state, nir_src_as_deref(instr->src[0])); - - record_images_used(&state->shader->info, instr); - - /* don't lower bindless: */ - if (!deref) - return false; - nir_instr_rewrite_src(&instr->instr, &instr->src[0], - nir_src_for_ssa(&deref->dest.ssa)); - return true; - } - if (instr->intrinsic == nir_intrinsic_image_deref_order || - instr->intrinsic == nir_intrinsic_image_deref_format) - unreachable("how did you even manage this?"); - - return false; -} - -static bool -lower_instr(nir_builder *b, nir_instr *instr, void *cb_data) -{ - struct lower_samplers_as_deref_state *state = cb_data; - - if (instr->type == nir_instr_type_tex) - return lower_sampler(nir_instr_as_tex(instr), state, b); - - if (instr->type == nir_instr_type_intrinsic) - return lower_intrinsic(nir_instr_as_intrinsic(instr), state, b); - - return false; -} - -bool -gl_nir_lower_samplers_as_deref(nir_shader *shader, - const struct gl_shader_program *shader_program) -{ - struct lower_samplers_as_deref_state state; - - state.shader = shader; - state.shader_program = shader_program; - state.remap_table = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - - bool progress = nir_shader_instructions_pass(shader, lower_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &state); - - if (progress) { - nir_remove_dead_derefs(shader); - if (!shader->info.internal && shader_program) { - /* try to apply bindings for unused samplers to avoid index zero clobbering in backends */ - nir_foreach_uniform_variable(var, shader) { - /* ignore hidden variables */ - if (!glsl_type_is_sampler(glsl_without_array(var->type)) || - var->data.how_declared == nir_var_hidden) - continue; - bool found = false; - hash_table_foreach(state.remap_table, entry) { - if (var == entry->data) { - found = true; - break; - } - } - if (!found) { - /* same as lower_deref() */ - var->data.binding = shader_program->data->UniformStorage[var->data.location].opaque[shader->info.stage].index; - } - } - } - } - - /* keys are freed automatically by ralloc */ - _mesa_hash_table_destroy(state.remap_table, NULL); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_xfb_varying.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_xfb_varying.c deleted file mode 100644 index 8840b5f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_lower_xfb_varying.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright © 2019 Collabora Ltd. - * Copyright © 2022 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../nir/nir.h" -#include "../nir/nir_builder.h" -#include "gl_nir_linker.h" -#include "../../mesa/main/shader_types.h" -#include "../../util/strndup.h" - -static char* -get_field_name(const char *name) -{ - const char *first_dot = strchr(name, '.'); - const char *first_square_bracket = strchr(name, '['); - int name_size = 0; - - if (!first_square_bracket && !first_dot) - name_size = strlen(name); - else if ((!first_square_bracket || - (first_dot && first_dot < first_square_bracket))) - name_size = first_dot - name; - else - name_size = first_square_bracket - name; - - return strndup(name, name_size); -} - -/* Generate a new name given the old xfb declaration string by replacing dots - * with '_', brackets with '@' and appending "-xfb" */ -static char * -generate_new_name(void *mem_ctx, const char *name) -{ - char *new_name; - unsigned i = 0; - - new_name = ralloc_strdup(mem_ctx, name); - while (new_name[i]) { - if (new_name[i] == '.') { - new_name[i] = '_'; - } else if (new_name[i] == '[' || new_name[i] == ']') { - new_name[i] = '@'; - } - i++; - } - - if (!ralloc_strcat(&new_name, "-xfb")) { - ralloc_free(new_name); - return NULL; - } - - return new_name; -} - -/* Get the dereference for the given variable name. The method is called - * recursively to parse array indices and struct members. */ -static bool -get_deref(nir_builder *b, const char *name, nir_variable *toplevel_var, - nir_deref_instr **deref, const struct glsl_type **type) -{ - if (name[0] == '\0') { - /* End */ - return (*deref != NULL); - } else if (name[0] == '[') { - /* Array index */ - char *endptr = NULL; - unsigned index = strtol(name + 1, &endptr, 10); - assert(*type != NULL && glsl_type_is_array(*type) && endptr[0] == ']'); - - nir_load_const_instr *c = nir_load_const_instr_create(b->shader, 1, 32); - c->value[0].u32 = index; - nir_builder_instr_insert(b, &c->instr); - - *deref = nir_build_deref_array(b, *deref, &c->def); - *type = glsl_without_array(*type); - return get_deref(b, endptr + 1, NULL, deref, type); - } else if (name[0] == '.') { - /* Struct member */ - char *field = get_field_name(name + 1); - - assert(*type != NULL && glsl_type_is_struct(*type) && field != NULL); - - int idx = glsl_get_field_index(*type, field); - *deref = nir_build_deref_struct(b, *deref, idx); - *type = glsl_get_struct_field(*type, idx); - name += 1 + strlen(field); - free(field); - return get_deref(b, name, NULL, deref, type); - } else { - /* Top level variable */ - char *field = get_field_name(name); - name += strlen(field); - free(field); - if (toplevel_var == NULL) { - return false; - } - - *deref = nir_build_deref_var(b, toplevel_var); - *type = toplevel_var->type; - return get_deref(b, name, NULL, deref, type); - } -} - -static void -copy_to_new_var(nir_builder *b, nir_deref_instr *deref, - nir_deref_instr *new_var_deref, const struct glsl_type *type) -{ - bool is_matrix = glsl_type_is_matrix(type); - unsigned components = glsl_get_vector_elements(type); - unsigned writemask = (1 << components) - 1; - - if (is_matrix) { - unsigned array_size = glsl_get_length(type); - for (unsigned i = 0; i < array_size; i++) { - nir_load_const_instr *c = nir_load_const_instr_create(b->shader, 1, 32); - c->value[0].u32 = i; - nir_builder_instr_insert(b, &c->instr); - - nir_deref_instr *m_deref = nir_build_deref_array(b, deref, &c->def); - nir_deref_instr *new_var_m_deref = - nir_build_deref_array(b, new_var_deref, &c->def); - - nir_ssa_def *value = nir_load_deref(b, m_deref); - nir_store_deref(b, new_var_m_deref, value, writemask); - } - } else { - nir_ssa_def *value = nir_load_deref(b, deref); - nir_store_deref(b, new_var_deref, value, writemask); - } -} - -nir_variable * -gl_nir_lower_xfb_varying(nir_shader *shader, const char *old_var_name, - nir_variable *toplevel_var) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - nir_builder b; - nir_builder_init(&b, impl); - b.cursor = nir_before_block(nir_start_block(impl)); - - nir_deref_instr *deref = NULL; - const struct glsl_type *type = NULL; - if (!get_deref(&b, old_var_name, toplevel_var, &deref, &type)) - return NULL; - - nir_variable *new_variable = rzalloc(shader, nir_variable); - new_variable->name = generate_new_name(new_variable, old_var_name); - new_variable->type = type; - new_variable->data.mode = nir_var_shader_out; - new_variable->data.location = -1; - new_variable->data.xfb.buffer = -1; - new_variable->data.xfb.stride = -1; - new_variable->data.assigned = true; - nir_shader_add_variable(shader, new_variable); - nir_deref_instr *new_var_deref = nir_build_deref_var(&b, new_variable); - - nir_foreach_block(block, impl) { - if (shader->info.stage != MESA_SHADER_GEOMETRY) { - /* For shaders other than geometry, outputs need to be lowered before - * each return statement and at the end of main() - */ - if (nir_block_ends_in_return_or_halt(block)) { - b.cursor = nir_before_instr(nir_block_last_instr(block)); - copy_to_new_var(&b, deref, new_var_deref, type); - } else if (block == nir_impl_last_block(impl)) { - b.cursor = nir_after_instr(nir_block_last_instr(block)); - copy_to_new_var(&b, deref, new_var_deref, type); - } - } else { - /* For geometry shaders, outputs need to be lowered before each call - * to EmitVertex() - */ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_emit_vertex) - continue; - - b.cursor = nir_before_instr(instr); - copy_to_new_var(&b, deref, new_var_deref, type); - } - } - } - - return new_variable; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_opt_dead_builtin_varyings.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_opt_dead_builtin_varyings.c deleted file mode 100644 index 4d43180..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/gl_nir_opt_dead_builtin_varyings.c +++ /dev/null @@ -1,549 +0,0 @@ -/* - * Copyright © 2013 Marek Olšák - * Copyright © 2022 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * This eliminates the built-in shader outputs which are either not written - * at all or not used by the next stage. It also eliminates unused elements - * of gl_TexCoord inputs, which reduces the overall varying usage. - * The varyings handled here are the primary and secondary color, the fog, - * and the texture coordinates (gl_TexCoord). - * - * This pass is necessary, because the Mesa GLSL linker cannot eliminate - * built-in varyings like it eliminates user-defined varyings, because - * the built-in varyings have pre-assigned locations. Also, the elimination - * of unused gl_TexCoord elements requires its own lowering pass anyway. - * - * It's implemented by replacing all occurrences of dead varyings with - * temporary variables, which creates dead code. It is recommended to run - * a dead-code elimination pass after this. - * - * If any texture coordinate slots can be eliminated, the gl_TexCoord array is - * broken down into separate vec4 variables with locations equal to - * VARYING_SLOT_TEX0 + i. - */ - -#include "gl_nir_link_varyings.h" -#include "gl_nir_linker.h" -#include "../nir/nir_builder.h" -#include "../nir_gl_types.h" -#include "../nir_types.h" - -#include "../glsl_types.h" -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/shader_types.h" -#include "../../util/u_string.h" - -struct varying_info { - bool lower_texcoord_array; - nir_variable *texcoord_array; - unsigned texcoord_usage; /* bitmask */ - - bool find_frag_outputs; /* false if it's looking for varyings */ - - nir_variable *color[2]; - nir_variable *backcolor[2]; - unsigned color_usage; /* bitmask */ - unsigned tfeedback_color_usage; /* bitmask */ - - nir_variable *fog; - bool has_fog; - bool tfeedback_has_fog; - - nir_variable_mode mode; -}; - -static void -initialise_varying_info(struct varying_info *info, nir_variable_mode mode, - bool find_frag_outputs) -{ - info->find_frag_outputs = find_frag_outputs; - info->lower_texcoord_array = true; - info->texcoord_array = NULL; - info->texcoord_usage = 0; - info->color_usage = 0; - info->tfeedback_color_usage = 0; - info->fog = NULL; - info->has_fog = false; - info->tfeedback_has_fog = false; - info->mode = mode; - - memset(info->color, 0, sizeof(info->color)); - memset(info->backcolor, 0, sizeof(info->backcolor)); -} - -/** - * Built-in / reserved GL variables names start with "gl_" - */ -static bool -is_gl_identifier(const char *s) -{ - return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_'; -} - -static void -gather_info_on_varying_deref(struct varying_info *info, nir_deref_instr *deref) -{ - nir_variable *var = nir_deref_instr_get_variable(deref); - - if (!glsl_type_is_array(var->type) || !is_gl_identifier(var->name)) - return; - - if (!info->find_frag_outputs && var->data.location == VARYING_SLOT_TEX0) { - info->texcoord_array = var; - - assert(deref->deref_type == nir_deref_type_array); - if (nir_src_is_const(deref->arr.index)) { - info->texcoord_usage |= 1 << nir_src_as_uint(deref->arr.index); - } else { - /* There is variable indexing, we can't lower the texcoord array. */ - info->texcoord_usage |= (1 << glsl_array_size(var->type)) - 1; - info->lower_texcoord_array = false; - } - - return; - } -} - -/** - * This obtains detailed information about built-in varyings from shader code. - */ -static void -get_varying_info(struct varying_info *info, nir_shader *shader, - unsigned num_tfeedback_decls, struct xfb_decl *tfeedback_decls) -{ - /* Handle the transform feedback varyings. */ - for (unsigned i = 0; i < num_tfeedback_decls; i++) { - if (!xfb_decl_is_varying(&tfeedback_decls[i])) - continue; - - unsigned location = tfeedback_decls[i].location; - - switch (location) { - case VARYING_SLOT_COL0: - case VARYING_SLOT_BFC0: - info->tfeedback_color_usage |= 1; - break; - case VARYING_SLOT_COL1: - case VARYING_SLOT_BFC1: - info->tfeedback_color_usage |= 2; - break; - case VARYING_SLOT_FOGC: - info->tfeedback_has_fog = true; - break; - default: - if (location >= VARYING_SLOT_TEX0 && - location <= VARYING_SLOT_TEX7) { - info->lower_texcoord_array = false; - } - } - } - - /* Process frag shader vars */ - nir_foreach_variable_with_modes(var, shader, info->mode) { - /* Nothing to do here for fragment outputs. */ - if (info->find_frag_outputs) - break; - - /* Handle colors and fog. */ - switch (var->data.location) { - case VARYING_SLOT_COL0: - info->color[0] = var; - info->color_usage |= 1; - break; - case VARYING_SLOT_COL1: - info->color[1] = var; - info->color_usage |= 2; - break; - case VARYING_SLOT_BFC0: - info->backcolor[0] = var; - info->color_usage |= 1; - break; - case VARYING_SLOT_BFC1: - info->backcolor[1] = var; - info->color_usage |= 2; - break; - case VARYING_SLOT_FOGC: - info->fog = var; - info->has_fog = true; - break; - } - } - - /* Process the shader. */ - assert(shader->info.stage != MESA_SHADER_COMPUTE); - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - /* assert that functions have been inlined before packing is called */ - nir_foreach_function(f, shader) { - assert(f->impl == impl); - } - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - /* Copies should have been lowered by nir_split_var_copies() before - * calling this pass. - */ - assert(intrin->intrinsic != nir_intrinsic_copy_deref); - - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, info->mode)) - continue; - - gather_info_on_varying_deref(info, deref); - } - } - - if (!info->texcoord_array) { - info->lower_texcoord_array = false; - } -} - -struct replace_varyings_data { - const struct gl_constants *consts; - - struct gl_shader_program *prog; - struct gl_linked_shader *shader; - const struct varying_info *info; - - nir_variable *new_texcoord[MAX_TEXTURE_COORD_UNITS]; - nir_variable *new_color[2]; - nir_variable *new_backcolor[2]; - nir_variable *new_fog; -}; - -static nir_variable * -create_new_var(nir_shader *shader, char *name, nir_variable_mode mode, - const struct glsl_type *type) -{ - nir_variable *var = rzalloc(shader, nir_variable); - var->name = ralloc_strdup(var, name); - var->data.mode = mode; - var->type = type; - - nir_shader_add_variable(shader, var); - return var; -} - -static void -replace_varying(struct replace_varyings_data *rv_data, nir_variable *var) -{ - /* Remove the gl_TexCoord array. */ - if (rv_data->info->lower_texcoord_array && - var == rv_data->info->texcoord_array) { - var->data.mode = nir_var_shader_temp; - } - - /* Lower set-but-unused color and fog outputs to shader temps. */ - for (int i = 0; i < 2; i++) { - if (var == rv_data->info->color[i] && rv_data->new_color[i]) { - var->data.mode = nir_var_shader_temp; - } - - if (var == rv_data->info->backcolor[i] && rv_data->new_backcolor[i]) { - var->data.mode = nir_var_shader_temp; - } - } - - if (var == rv_data->info->fog && rv_data->new_fog) { - var->data.mode = nir_var_shader_temp; - } -} - -static void -rewrite_varying_deref(nir_builder *b, struct replace_varyings_data *rv_data, - nir_deref_instr *deref) -{ - if (deref->deref_type != nir_deref_type_array) - return; - - nir_variable *var = nir_deref_instr_get_variable(deref); - const struct varying_info *info = rv_data->info; - b->cursor = nir_before_instr(&deref->instr); - - /* Replace an array dereference gl_TexCoord[i] with a single - * variable dereference representing gl_TexCoord[i]. - */ - if (info->lower_texcoord_array && info->texcoord_array == var) { - /* gl_TexCoord[i] occurrence */ - unsigned i = nir_src_as_uint(deref->arr.index); - nir_deref_instr *new_deref = - nir_build_deref_var(b, rv_data->new_texcoord[i]); - nir_ssa_def_rewrite_uses(&deref->dest.ssa, &new_deref->dest.ssa); - return; - } -} - -static void -prepare_array(struct replace_varyings_data *rv_data, - nir_shader *shader, nir_variable **new_var, - int max_elements, unsigned start_location, - const char *var_name, const char *mode_str, - unsigned usage, unsigned external_usage) -{ - for (int i = max_elements - 1; i >= 0; i--) { - if (usage & (1 << i)) { - char name[32]; - - if (!(external_usage & (1 << i))) { - /* This varying is unused in the next stage. Declare - * a temporary instead of an output. */ - snprintf(name, 32, "gl_%s_%s%i_dummy", mode_str, var_name, i); - new_var[i] = create_new_var(shader, name, nir_var_shader_temp, - glsl_vec4_type()); - } else { - snprintf(name, 32, "gl_%s_%s%i", mode_str, var_name, i); - new_var[i] = create_new_var(shader, name, rv_data->info->mode, - glsl_vec4_type()); - new_var[i]->data.location = start_location + i; - new_var[i]->data.explicit_location = true; - } - } - } -} - -/** - * This replaces unused varyings with temporary variables. - * - * If "ir" is the producer, the "external" usage should come from - * the consumer. It also works the other way around. If either one is - * missing, set the "external" usage to a full mask. - */ -static void -replace_varyings(const struct gl_constants *consts, - struct gl_linked_shader *shader, - struct gl_shader_program *prog, - const struct varying_info *info, - unsigned external_texcoord_usage, - unsigned external_color_usage, bool external_has_fog) -{ - struct replace_varyings_data rv_data; - rv_data.shader = shader; - rv_data.info = info; - rv_data.consts = consts; - rv_data.prog = prog; - - memset(rv_data.new_texcoord, 0, sizeof(rv_data.new_texcoord)); - memset(rv_data.new_color, 0, sizeof(rv_data.new_color)); - memset(rv_data.new_backcolor, 0, sizeof(rv_data.new_backcolor)); - rv_data.new_fog = NULL; - - const char *mode_str = info->mode == nir_var_shader_in ? "in" : "out"; - - /* Handle texcoord outputs. - * - * We're going to break down the gl_TexCoord array into separate - * variables. First, add declarations of the new variables all - * occurrences of gl_TexCoord will be replaced with. - */ - if (info->lower_texcoord_array) { - prepare_array(&rv_data, shader->Program->nir, rv_data.new_texcoord, - ARRAY_SIZE(rv_data.new_texcoord), - VARYING_SLOT_TEX0, "TexCoord", mode_str, - info->texcoord_usage, external_texcoord_usage); - } - - /* Create dummy variables which will replace set-but-unused color and - * fog outputs. - */ - external_color_usage |= info->tfeedback_color_usage; - - for (int i = 0; i < 2; i++) { - char name[32]; - - if (!(external_color_usage & (1 << i))) { - if (info->color[i]) { - snprintf(name, 32, "gl_%s_FrontColor%i_dummy", mode_str, i); - rv_data.new_color[i] = - create_new_var(shader->Program->nir, name, nir_var_shader_temp, - glsl_vec4_type()); - } - - if (info->backcolor[i]) { - snprintf(name, 32, "gl_%s_BackColor%i_dummy", mode_str, i); - rv_data.new_backcolor[i] = - create_new_var(shader->Program->nir, name, nir_var_shader_temp, - glsl_vec4_type()); - } - } - } - - if (!external_has_fog && !info->tfeedback_has_fog && info->fog) { - char name[32]; - - snprintf(name, 32, "gl_%s_FogFragCoord_dummy", mode_str); - rv_data.new_fog = - create_new_var(shader->Program->nir, name, nir_var_shader_temp, - glsl_float_type()); - } - - /* Now do the replacing. */ - nir_foreach_variable_with_modes_safe(var, shader->Program->nir, info->mode) { - replace_varying(&rv_data, var); - } - - nir_function_impl *impl = nir_shader_get_entrypoint(shader->Program->nir); - nir_builder b; - nir_builder_init(&b, impl); - - /* assert that functions have been inlined before packing is called */ - nir_foreach_function(f, shader->Program->nir) { - assert(f->impl == impl); - } - - /* Rewrite the derefs to use the new vars */ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - /* Copies should have been lowered by nir_split_var_copies() before - * calling this pass. - */ - assert(intrin->intrinsic != nir_intrinsic_copy_deref); - - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, info->mode)) - continue; - - rewrite_varying_deref(&b, &rv_data, deref); - } - } -} - -static void -lower_texcoord_array(const struct gl_constants *consts, - struct gl_linked_shader *shader, - struct gl_shader_program *prog, - const struct varying_info *info) -{ - replace_varyings(consts, shader, prog, info, - (1 << MAX_TEXTURE_COORD_UNITS) - 1, 1 | 2, true); -} - -void -gl_nir_opt_dead_builtin_varyings(const struct gl_constants *consts, gl_api api, - struct gl_shader_program *prog, - struct gl_linked_shader *producer, - struct gl_linked_shader *consumer, - unsigned num_tfeedback_decls, - struct xfb_decl *tfeedback_decls) -{ - /* Lowering of built-in varyings has no effect with the core context and - * GLES2, because they are not available there. - */ - if (api == API_OPENGL_CORE || - api == API_OPENGLES2) { - goto done; - } - - /* Information about built-in varyings. */ - struct varying_info producer_info; - struct varying_info consumer_info; - initialise_varying_info(&producer_info, nir_var_shader_out, false); - initialise_varying_info(&consumer_info, nir_var_shader_in, false); - - if (producer) { - get_varying_info(&producer_info, producer->Program->nir, - num_tfeedback_decls, tfeedback_decls); - - if (producer->Stage == MESA_SHADER_TESS_CTRL) - producer_info.lower_texcoord_array = false; - - if (!consumer) { - /* At least eliminate unused gl_TexCoord elements. */ - if (producer_info.lower_texcoord_array) { - lower_texcoord_array(consts, producer, prog, &producer_info); - } - goto done; - } - } - - if (consumer) { - get_varying_info(&consumer_info, consumer->Program->nir, - num_tfeedback_decls, tfeedback_decls); - - if (consumer->Stage != MESA_SHADER_FRAGMENT) - consumer_info.lower_texcoord_array = false; - - if (!producer) { - /* At least eliminate unused gl_TexCoord elements. */ - if (consumer_info.lower_texcoord_array) { - lower_texcoord_array(consts, consumer, prog, &consumer_info); - } - goto done; - } - } - - /* Eliminate the outputs unused by the consumer. */ - if (producer_info.lower_texcoord_array || - producer_info.color_usage || - producer_info.has_fog) { - replace_varyings(consts, producer, prog, &producer_info, - consumer_info.texcoord_usage, - consumer_info.color_usage, - consumer_info.has_fog); - } - - /* The gl_TexCoord fragment shader inputs can be initialized - * by GL_COORD_REPLACE, so we can't eliminate them. - * - * This doesn't prevent elimination of the gl_TexCoord elements which - * are not read by the fragment shader. We want to eliminate those anyway. - */ - if (consumer->Stage == MESA_SHADER_FRAGMENT) { - producer_info.texcoord_usage = (1 << MAX_TEXTURE_COORD_UNITS) - 1; - } - - /* Eliminate the inputs uninitialized by the producer. */ - if (consumer_info.lower_texcoord_array || - consumer_info.color_usage || - consumer_info.has_fog) { - replace_varyings(consts, consumer, prog, &consumer_info, - producer_info.texcoord_usage, - producer_info.color_usage, - producer_info.has_fog); - } - -done: - if (producer) - nir_fixup_deref_modes(producer->Program->nir); - - if (consumer) - nir_fixup_deref_modes(consumer->Program->nir); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/README b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/README deleted file mode 100644 index 0637935..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/README +++ /dev/null @@ -1,30 +0,0 @@ -glcpp -- GLSL "C" preprocessor - -This is a simple preprocessor designed to provide the preprocessing -needs of the GLSL language. The requirements for this preprocessor are -specified in the GLSL 1.30 specification availble from: - -http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.30.10.pdf - -This specification is not precise on some semantics, (for example, -#define and #if), defining these merely "as is standard for C++ -preprocessors". To fill in these details, I've been using a draft of -the C99 standard as available from: - -http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf - -Any downstream compiler accepting output from glcpp should be prepared -to encounter and deal with the following preprocessor macros: - - #line - #pragma - #extension - -All other macros will be handled according to the GLSL specification -and will not appear in the output. - -Known limitations ------------------ -A file that ends with a function-like macro name as the last -non-whitespace token will result in a parse error, (where it should be -passed through as is). \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-lex.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-lex.c deleted file mode 100644 index 09f0214..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-lex.c +++ /dev/null @@ -1,3224 +0,0 @@ -#line 2 "src/compiler/glsl/glcpp/glcpp-lex.c" - -#line 4 "src/compiler/glsl/glcpp/glcpp-lex.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 4 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -#ifdef yy_create_buffer -#define glcpp__create_buffer_ALREADY_DEFINED -#else -#define yy_create_buffer glcpp__create_buffer -#endif - -#ifdef yy_delete_buffer -#define glcpp__delete_buffer_ALREADY_DEFINED -#else -#define yy_delete_buffer glcpp__delete_buffer -#endif - -#ifdef yy_scan_buffer -#define glcpp__scan_buffer_ALREADY_DEFINED -#else -#define yy_scan_buffer glcpp__scan_buffer -#endif - -#ifdef yy_scan_string -#define glcpp__scan_string_ALREADY_DEFINED -#else -#define yy_scan_string glcpp__scan_string -#endif - -#ifdef yy_scan_bytes -#define glcpp__scan_bytes_ALREADY_DEFINED -#else -#define yy_scan_bytes glcpp__scan_bytes -#endif - -#ifdef yy_init_buffer -#define glcpp__init_buffer_ALREADY_DEFINED -#else -#define yy_init_buffer glcpp__init_buffer -#endif - -#ifdef yy_flush_buffer -#define glcpp__flush_buffer_ALREADY_DEFINED -#else -#define yy_flush_buffer glcpp__flush_buffer -#endif - -#ifdef yy_load_buffer_state -#define glcpp__load_buffer_state_ALREADY_DEFINED -#else -#define yy_load_buffer_state glcpp__load_buffer_state -#endif - -#ifdef yy_switch_to_buffer -#define glcpp__switch_to_buffer_ALREADY_DEFINED -#else -#define yy_switch_to_buffer glcpp__switch_to_buffer -#endif - -#ifdef yypush_buffer_state -#define glcpp_push_buffer_state_ALREADY_DEFINED -#else -#define yypush_buffer_state glcpp_push_buffer_state -#endif - -#ifdef yypop_buffer_state -#define glcpp_pop_buffer_state_ALREADY_DEFINED -#else -#define yypop_buffer_state glcpp_pop_buffer_state -#endif - -#ifdef yyensure_buffer_stack -#define glcpp_ensure_buffer_stack_ALREADY_DEFINED -#else -#define yyensure_buffer_stack glcpp_ensure_buffer_stack -#endif - -#ifdef yylex -#define glcpp_lex_ALREADY_DEFINED -#else -#define yylex glcpp_lex -#endif - -#ifdef yyrestart -#define glcpp_restart_ALREADY_DEFINED -#else -#define yyrestart glcpp_restart -#endif - -#ifdef yylex_init -#define glcpp_lex_init_ALREADY_DEFINED -#else -#define yylex_init glcpp_lex_init -#endif - -#ifdef yylex_init_extra -#define glcpp_lex_init_extra_ALREADY_DEFINED -#else -#define yylex_init_extra glcpp_lex_init_extra -#endif - -#ifdef yylex_destroy -#define glcpp_lex_destroy_ALREADY_DEFINED -#else -#define yylex_destroy glcpp_lex_destroy -#endif - -#ifdef yyget_debug -#define glcpp_get_debug_ALREADY_DEFINED -#else -#define yyget_debug glcpp_get_debug -#endif - -#ifdef yyset_debug -#define glcpp_set_debug_ALREADY_DEFINED -#else -#define yyset_debug glcpp_set_debug -#endif - -#ifdef yyget_extra -#define glcpp_get_extra_ALREADY_DEFINED -#else -#define yyget_extra glcpp_get_extra -#endif - -#ifdef yyset_extra -#define glcpp_set_extra_ALREADY_DEFINED -#else -#define yyset_extra glcpp_set_extra -#endif - -#ifdef yyget_in -#define glcpp_get_in_ALREADY_DEFINED -#else -#define yyget_in glcpp_get_in -#endif - -#ifdef yyset_in -#define glcpp_set_in_ALREADY_DEFINED -#else -#define yyset_in glcpp_set_in -#endif - -#ifdef yyget_out -#define glcpp_get_out_ALREADY_DEFINED -#else -#define yyget_out glcpp_get_out -#endif - -#ifdef yyset_out -#define glcpp_set_out_ALREADY_DEFINED -#else -#define yyset_out glcpp_set_out -#endif - -#ifdef yyget_leng -#define glcpp_get_leng_ALREADY_DEFINED -#else -#define yyget_leng glcpp_get_leng -#endif - -#ifdef yyget_text -#define glcpp_get_text_ALREADY_DEFINED -#else -#define yyget_text glcpp_get_text -#endif - -#ifdef yyget_lineno -#define glcpp_get_lineno_ALREADY_DEFINED -#else -#define yyget_lineno glcpp_get_lineno -#endif - -#ifdef yyset_lineno -#define glcpp_set_lineno_ALREADY_DEFINED -#else -#define yyset_lineno glcpp_set_lineno -#endif - -#ifdef yyget_column -#define glcpp_get_column_ALREADY_DEFINED -#else -#define yyget_column glcpp_get_column -#endif - -#ifdef yyset_column -#define glcpp_set_column_ALREADY_DEFINED -#else -#define yyset_column glcpp_set_column -#endif - -#ifdef yywrap -#define glcpp_wrap_ALREADY_DEFINED -#else -#define yywrap glcpp_wrap -#endif - -#ifdef yyget_lval -#define glcpp_get_lval_ALREADY_DEFINED -#else -#define yyget_lval glcpp_get_lval -#endif - -#ifdef yyset_lval -#define glcpp_set_lval_ALREADY_DEFINED -#else -#define yyset_lval glcpp_set_lval -#endif - -#ifdef yyget_lloc -#define glcpp_get_lloc_ALREADY_DEFINED -#else -#define yyget_lloc glcpp_get_lloc -#endif - -#ifdef yyset_lloc -#define glcpp_set_lloc_ALREADY_DEFINED -#else -#define yyset_lloc glcpp_set_lloc -#endif - -#ifdef yyalloc -#define glcpp_alloc_ALREADY_DEFINED -#else -#define yyalloc glcpp_alloc -#endif - -#ifdef yyrealloc -#define glcpp_realloc_ALREADY_DEFINED -#else -#define yyrealloc glcpp_realloc -#endif - -#ifdef yyfree -#define glcpp_free_ALREADY_DEFINED -#else -#define yyfree glcpp_free -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#ifndef SIZE_MAX -#define SIZE_MAX (~(size_t)0) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -/* begin standard C++ headers. */ - -/* TODO: this is always defined, so inline it */ -#define yyconst const - -#if defined(__GNUC__) && __GNUC__ >= 3 -#define yynoreturn __attribute__((__noreturn__)) -#else -#define yynoreturn -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an - * integer in range [0..255] for use as an array index. - */ -#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) - -/* An opaque pointer. */ -#ifndef YY_TYPEDEF_YY_SCANNER_T -#define YY_TYPEDEF_YY_SCANNER_T -typedef void* yyscan_t; -#endif - -/* For convenience, these vars (plus the bison vars far below) - are macros in the reentrant scanner. */ -#define yyin yyg->yyin_r -#define yyout yyg->yyout_r -#define yyextra yyg->yyextra_r -#define yyleng yyg->yyleng_r -#define yytext yyg->yytext_r -#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) -#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) -#define yy_flex_debug yyg->yy_flex_debug_r - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yyg->yy_start = 1 + 2 * -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yyg->yy_start - 1) / 2) -#define YYSTATE YY_START -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin , yyscanner ) -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else -#define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - #define YY_LINENO_REWIND_TO(ptr) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = yyg->yy_hold_char; \ - YY_RESTORE_YY_MORE_OFFSET \ - yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) -#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - int yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ - ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ - : NULL) -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] - -void yyrestart ( FILE *input_file , yyscan_t yyscanner ); -void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); -void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); -void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); -void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); -void yypop_buffer_state ( yyscan_t yyscanner ); - -static void yyensure_buffer_stack ( yyscan_t yyscanner ); -static void yy_load_buffer_state ( yyscan_t yyscanner ); -static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); -#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) - -YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); - -void *yyalloc ( yy_size_t , yyscan_t yyscanner ); -void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); -void yyfree ( void * , yyscan_t yyscanner ); - -#define yy_new_buffer yy_create_buffer -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -/* Begin user sect3 */ - -#define glcpp_wrap(yyscanner) (/*CONSTCOND*/1) -#define YY_SKIP_YYWRAP -typedef flex_uint8_t YY_CHAR; - -typedef int yy_state_type; - -#define yytext_ptr yytext_r - -static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); -static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); -static int yy_get_next_buffer ( yyscan_t yyscanner ); -static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yyg->yytext_ptr = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - yyg->yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 54 -#define YY_END_OF_BUFFER 55 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static const flex_int16_t yy_accept[189] = - { 0, - 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 55, 49, 50, 52, 52, 48, - 49, 8, 48, 48, 48, 48, 48, 48, 32, 31, - 48, 48, 48, 46, 46, 48, 3, 4, 4, 5, - 30, 28, 53, 27, 53, 25, 24, 14, 14, 25, - 25, 25, 25, 25, 25, 25, 25, 49, 52, 39, - 0, 49, 49, 44, 40, 42, 43, 47, 2, 1, - 47, 32, 47, 32, 47, 31, 31, 34, 36, 38, - 37, 35, 46, 46, 41, 3, 4, 4, 4, 5, - 6, 6, 5, 7, 30, 28, 29, 1, 26, 27, - - 24, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 1, 33, 33, 46, 4, 6, - 29, 1, 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 33, 46, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 46, 0, 18, 20, 21, 0, 15, 0, 0, - 13, 0, 23, 0, 46, 22, 21, 0, 16, 0, - 11, 0, 45, 22, 0, 0, 11, 11, 10, 0, - 0, 0, 9, 11, 0, 0, 12, 0 - } ; - -static const YY_CHAR yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 6, 7, 8, 1, 9, 10, 1, 11, - 9, 12, 13, 9, 14, 15, 16, 17, 18, 18, - 18, 18, 18, 18, 18, 19, 19, 20, 9, 21, - 22, 23, 20, 1, 24, 24, 24, 24, 25, 24, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, - 26, 26, 26, 26, 28, 26, 26, 29, 26, 26, - 9, 1, 9, 9, 26, 1, 30, 24, 31, 32, - - 33, 34, 35, 26, 36, 26, 26, 37, 38, 39, - 40, 41, 26, 42, 43, 44, 45, 46, 26, 47, - 26, 26, 9, 48, 9, 9, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static const YY_CHAR yy_meta[49] = - { 0, - 1, 2, 3, 3, 4, 5, 1, 6, 5, 5, - 7, 8, 5, 5, 9, 5, 10, 10, 10, 5, - 6, 5, 6, 10, 10, 10, 10, 10, 10, 10, - 10, 11, 10, 10, 10, 10, 10, 10, 11, 10, - 10, 10, 10, 10, 10, 10, 10, 5 - } ; - -static const flex_int16_t yy_base[208] = - { 0, - 0, 0, 46, 48, 60, 0, 50, 52, 107, 152, - 110, 112, 114, 116, 538, 121, 539, 533, 533, 513, - 125, 526, 539, 523, 519, 517, 112, 109, 182, 213, - 112, 508, 113, 0, 496, 480, 134, 523, 523, 146, - 0, 122, 130, 514, 539, 539, 158, 520, 520, 135, - 489, 122, 131, 485, 478, 480, 485, 166, 539, 539, - 165, 170, 174, 539, 539, 539, 539, 179, 539, 0, - 192, 217, 230, 165, 259, 0, 169, 539, 539, 539, - 539, 539, 0, 483, 539, 188, 512, 512, 539, 210, - 510, 510, 244, 539, 0, 200, 0, 216, 539, 496, - - 237, 539, 451, 144, 440, 412, 400, 164, 412, 403, - 402, 395, 384, 539, 0, 221, 237, 370, 539, 539, - 0, 259, 369, 370, 355, 334, 327, 333, 539, 297, - 297, 291, 294, 291, 292, 281, 239, 284, 283, 0, - 539, 287, 278, 280, 284, 271, 251, 265, 257, 253, - 250, 248, 247, 539, 539, 0, 236, 539, 225, 205, - 283, 198, 539, 176, 169, 292, 0, 159, 539, 143, - 296, 135, 0, 300, 19, 301, 265, 305, 539, 309, - 18, 310, 311, 271, 0, 201, 539, 539, 331, 342, - 353, 364, 367, 369, 380, 391, 402, 413, 418, 429, - - 440, 451, 462, 473, 482, 493, 501 - } ; - -static const flex_int16_t yy_def[208] = - { 0, - 188, 1, 189, 189, 188, 5, 190, 190, 191, 191, - 190, 190, 190, 190, 188, 188, 188, 188, 188, 188, - 192, 188, 188, 188, 188, 188, 188, 188, 193, 193, - 188, 188, 188, 194, 194, 188, 195, 188, 188, 196, - 197, 188, 198, 199, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 192, 188, 192, 188, 188, 188, 188, 193, 188, 200, - 193, 30, 193, 73, 73, 30, 73, 188, 188, 188, - 188, 188, 194, 194, 188, 195, 188, 188, 188, 196, - 188, 188, 196, 188, 197, 188, 201, 202, 188, 199, - - 188, 188, 188, 188, 188, 188, 188, 203, 188, 188, - 188, 188, 188, 188, 200, 75, 75, 194, 188, 188, - 201, 202, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 73, 194, 188, 204, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 194, 188, 188, 188, 205, 188, 188, 188, 188, - 188, 188, 188, 188, 194, 188, 205, 188, 188, 188, - 206, 188, 194, 188, 188, 188, 206, 206, 188, 188, - 188, 188, 188, 206, 207, 207, 188, 0, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - - 188, 188, 188, 188, 188, 188, 188 - } ; - -static const flex_int16_t yy_nxt[588] = - { 0, - 16, 17, 18, 19, 17, 20, 21, 22, 23, 24, - 23, 23, 25, 26, 27, 28, 29, 30, 30, 16, - 31, 32, 33, 34, 34, 34, 34, 34, 34, 34, - 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 36, 38, 39, - 38, 39, 18, 19, 18, 19, 184, 40, 181, 40, - 41, 42, 18, 19, 42, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 43, 41, 41, 41, 41, - 41, 41, 41, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - - 44, 44, 44, 44, 44, 44, 44, 41, 47, 48, - 49, 47, 18, 19, 18, 19, 18, 19, 18, 19, - 69, 58, 50, 96, 70, 58, 96, 58, 68, 68, - 68, 62, 78, 79, 81, 82, 87, 88, 51, 52, - 58, 69, 53, 54, 63, 98, 69, 55, 91, 92, - 70, 56, 57, 47, 48, 49, 47, 93, 104, 101, - 105, 94, 101, 106, 108, 188, 58, 50, 107, 109, - 58, 114, 58, 180, 58, 176, 58, 188, 188, 124, - 62, 188, 188, 51, 52, 58, 125, 53, 54, 58, - 87, 88, 55, 63, 175, 130, 56, 57, 72, 72, - - 173, 96, 131, 73, 96, 73, 73, 187, 73, 74, - 75, 73, 91, 92, 73, 172, 73, 115, 73, 73, - 115, 188, 73, 187, 73, 188, 74, 171, 75, 76, - 76, 76, 73, 72, 72, 71, 170, 73, 101, 73, - 77, 101, 71, 71, 74, 73, 91, 92, 137, 71, - 71, 188, 188, 73, 73, 93, 73, 77, 169, 94, - 115, 74, 73, 115, 137, 137, 161, 188, 188, 161, - 73, 188, 188, 188, 188, 116, 116, 116, 168, 166, - 165, 137, 116, 117, 161, 164, 163, 161, 116, 116, - 116, 117, 116, 174, 162, 160, 174, 178, 179, 179, - - 178, 174, 182, 159, 174, 182, 178, 179, 179, 178, - 183, 182, 183, 183, 182, 183, 185, 158, 157, 156, - 155, 153, 152, 151, 150, 149, 148, 147, 146, 145, - 185, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 61, 144, 143, 61, 61, 142, - 61, 61, 61, 61, 61, 71, 71, 71, 83, 83, - 86, 86, 86, 86, 86, 86, 86, 141, 86, 86, - 86, 90, 90, 90, 90, 90, 90, 90, 90, 90, - - 90, 90, 95, 140, 139, 138, 95, 95, 95, 95, - 95, 95, 95, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 100, 136, 135, 100, 100, 115, - 115, 134, 115, 115, 115, 115, 115, 115, 115, 115, - 121, 133, 132, 128, 121, 121, 121, 121, 121, 121, - 121, 122, 122, 127, 122, 122, 122, 122, 122, 122, - 122, 122, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 126, 129, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 167, 167, 123, 167, 167, 167, 167, 167, - 167, 167, 167, 177, 177, 177, 177, 177, 177, 177, - - 177, 177, 177, 177, 186, 186, 99, 186, 186, 186, - 186, 186, 120, 120, 119, 119, 118, 113, 112, 111, - 110, 103, 102, 102, 99, 89, 89, 85, 84, 80, - 67, 66, 65, 64, 60, 59, 59, 188, 15, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188 - } ; - -static const flex_int16_t yy_chk[588] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, - 4, 4, 7, 7, 8, 8, 181, 3, 175, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - - 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, - 9, 9, 11, 11, 12, 12, 13, 13, 14, 14, - 28, 16, 9, 42, 28, 21, 42, 16, 27, 27, - 27, 21, 31, 31, 33, 33, 37, 37, 9, 9, - 16, 43, 9, 9, 21, 43, 50, 9, 40, 40, - 50, 9, 9, 10, 10, 10, 10, 40, 52, 47, - 52, 40, 47, 52, 53, 61, 58, 10, 52, 53, - 62, 61, 58, 172, 63, 170, 62, 74, 74, 104, - 63, 77, 77, 10, 10, 58, 104, 10, 10, 62, - 86, 86, 10, 63, 168, 108, 10, 10, 29, 29, - - 165, 96, 108, 68, 96, 68, 29, 186, 29, 29, - 29, 68, 90, 90, 29, 164, 71, 98, 71, 68, - 98, 90, 29, 186, 71, 90, 29, 162, 29, 30, - 30, 30, 71, 72, 72, 72, 160, 30, 101, 30, - 30, 101, 73, 73, 72, 30, 93, 93, 116, 117, - 117, 137, 137, 30, 73, 93, 73, 30, 159, 93, - 122, 72, 73, 122, 117, 116, 148, 177, 177, 148, - 73, 75, 75, 184, 184, 75, 75, 75, 157, 153, - 152, 117, 75, 75, 161, 151, 150, 161, 75, 75, - 75, 75, 75, 166, 149, 147, 166, 171, 171, 171, - - 171, 174, 176, 146, 174, 176, 178, 178, 178, 178, - 180, 182, 183, 180, 182, 183, 182, 145, 144, 143, - 142, 139, 138, 136, 135, 134, 133, 132, 131, 130, - 182, 189, 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 192, 128, 127, 192, 192, 126, - 192, 192, 192, 192, 192, 193, 193, 193, 194, 194, - 195, 195, 195, 195, 195, 195, 195, 125, 195, 195, - 195, 196, 196, 196, 196, 196, 196, 196, 196, 196, - - 196, 196, 197, 124, 123, 118, 197, 197, 197, 197, - 197, 197, 197, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 199, 113, 112, 199, 199, 200, - 200, 111, 200, 200, 200, 200, 200, 200, 200, 200, - 201, 110, 109, 107, 201, 201, 201, 201, 201, 201, - 201, 202, 202, 106, 202, 202, 202, 202, 202, 202, - 202, 202, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 105, 203, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 205, 205, 103, 205, 205, 205, 205, 205, - 205, 205, 205, 206, 206, 206, 206, 206, 206, 206, - - 206, 206, 206, 206, 207, 207, 100, 207, 207, 207, - 207, 207, 92, 91, 88, 87, 84, 57, 56, 55, - 54, 51, 49, 48, 44, 39, 38, 36, 35, 32, - 26, 25, 24, 22, 20, 19, 18, 15, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188 - } ; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -#line 1 "../src/compiler/glsl/glcpp/glcpp-lex.l" -#line 2 "../src/compiler/glsl/glcpp/glcpp-lex.l" -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include - -#include "glcpp.h" -#include "glcpp-parse.h" - -/* Flex annoyingly generates some functions without making them - * static. Let's declare them here. */ -int glcpp_get_column (yyscan_t yyscanner); -void glcpp_set_column (int column_no , yyscan_t yyscanner); - -#ifdef _MSC_VER -#define YY_NO_UNISTD_H -#endif - -#define YY_NO_INPUT - -#define YY_USER_ACTION \ - do { \ - if (parser->has_new_line_number) \ - yylineno = parser->new_line_number; \ - if (parser->has_new_source_number) \ - yylloc->source = parser->new_source_number; \ - yylloc->first_column = yycolumn + 1; \ - yylloc->first_line = yylloc->last_line = yylineno; \ - yycolumn += yyleng; \ - yylloc->last_column = yycolumn + 1; \ - parser->has_new_line_number = 0; \ - parser->has_new_source_number = 0; \ - } while(0); - -#define YY_USER_INIT \ - do { \ - yylineno = 1; \ - yycolumn = 0; \ - yylloc->source = 0; \ - } while(0) - -/* It's ugly to have macros that have return statements inside of - * them, but flex-based lexer generation is all built around the - * return statement. - * - * To mitigate the ugliness, we defer as much of the logic as possible - * to an actual function, not a macro (see - * glcpplex_update_state_per_token) and we make the word RETURN - * prominent in all of the macros which may return. - * - * The most-commonly-used macro is RETURN_TOKEN which will perform all - * necessary state updates based on the provided token,, then - * conditionally return the token. It will not return a token if the - * parser is currently skipping tokens, (such as within #if - * 0...#else). - * - * The RETURN_TOKEN_NEVER_SKIP macro is a lower-level variant that - * makes the token returning unconditional. This is needed for things - * like #if and the tokens of its condition, (since these must be - * evaluated by the parser even when otherwise skipping). - * - * Finally, RETURN_STRING_TOKEN is a simple convenience wrapper on top - * of RETURN_TOKEN that performs a string copy of yytext before the - * return. - */ -#define RETURN_TOKEN_NEVER_SKIP(token) \ - do { \ - if (glcpp_lex_update_state_per_token (parser, token)) \ - return token; \ - } while (0) - -#define RETURN_TOKEN(token) \ - do { \ - if (! parser->skipping) { \ - RETURN_TOKEN_NEVER_SKIP(token); \ - } \ - } while(0) - -#define RETURN_STRING_TOKEN(token) \ - do { \ - if (! parser->skipping) { \ - /* We're not doing linear_strdup here, to avoid \ - * an implicit call on strlen() for the length \ - * of the string, as this is already found by \ - * flex and stored in yyleng */ \ - void *mem_ctx = yyextra->linalloc; \ - yylval->str = linear_alloc_child(mem_ctx, \ - yyleng + 1); \ - memcpy(yylval->str, yytext, yyleng + 1); \ - RETURN_TOKEN_NEVER_SKIP (token); \ - } \ - } while(0) - - -/* Update all state necessary for each token being returned. - * - * Here we'll be tracking newlines and spaces so that the lexer can - * alter its behavior as necessary, (for example, '#' has special - * significance if it is the first non-whitespace, non-comment token - * in a line, but does not otherwise). - * - * NOTE: If this function returns FALSE, then no token should be - * returned at all. This is used to suprress duplicate SPACE tokens. - */ -static int -glcpp_lex_update_state_per_token (glcpp_parser_t *parser, int token) -{ - if (token != NEWLINE && token != SPACE && token != HASH_TOKEN && - !parser->lexing_version_directive) { - glcpp_parser_resolve_implicit_version(parser); - } - - /* After the first non-space token in a line, we won't - * allow any '#' to introduce a directive. */ - if (token == NEWLINE) { - parser->first_non_space_token_this_line = 1; - } else if (token != SPACE) { - parser->first_non_space_token_this_line = 0; - } - - /* Track newlines just to know whether a newline needs - * to be inserted if end-of-file comes early. */ - if (token == NEWLINE) { - parser->last_token_was_newline = 1; - } else { - parser->last_token_was_newline = 0; - } - - /* Track spaces to avoid emitting multiple SPACE - * tokens in a row. */ - if (token == SPACE) { - if (! parser->last_token_was_space) { - parser->last_token_was_space = 1; - return 1; - } else { - parser->last_token_was_space = 1; - return 0; - } - } else { - parser->last_token_was_space = 0; - return 1; - } -} - - -#line 1016 "src/compiler/glsl/glcpp/glcpp-lex.c" -#line 178 "../src/compiler/glsl/glcpp/glcpp-lex.l" - /* Note: When adding any start conditions to this list, you must also - * update the "Internal compiler error" catch-all rule near the end of - * this file. */ - -/* The OTHER class is simply a catch-all for things that the CPP -parser just doesn't care about. Since flex regular expressions that -match longer strings take priority over those matching shorter -strings, we have to be careful to avoid OTHER matching and hiding -something that CPP does care about. So we simply exclude all -characters that appear in any other expressions. */ -#line 1028 "src/compiler/glsl/glcpp/glcpp-lex.c" - -#define INITIAL 0 -#define COMMENT 1 -#define DEFINE 2 -#define DONE 3 -#define HASH 4 -#define NEWLINE_CATCHUP 5 -#define UNREACHABLE 6 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif - -#define YY_EXTRA_TYPE glcpp_parser_t * - -/* Holds the entire state of the reentrant scanner. */ -struct yyguts_t - { - - /* User-defined. Not touched by flex. */ - YY_EXTRA_TYPE yyextra_r; - - /* The rest are the same as the globals declared in the non-reentrant scanner. */ - FILE *yyin_r, *yyout_r; - size_t yy_buffer_stack_top; /**< index of top of stack. */ - size_t yy_buffer_stack_max; /**< capacity of stack. */ - YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ - char yy_hold_char; - int yy_n_chars; - int yyleng_r; - char *yy_c_buf_p; - int yy_init; - int yy_start; - int yy_did_buffer_switch_on_eof; - int yy_start_stack_ptr; - int yy_start_stack_depth; - int *yy_start_stack; - yy_state_type yy_last_accepting_state; - char* yy_last_accepting_cpos; - - int yylineno_r; - int yy_flex_debug_r; - - char *yytext_r; - int yy_more_flag; - int yy_more_len; - - YYSTYPE * yylval_r; - - YYLTYPE * yylloc_r; - - }; /* end struct yyguts_t */ - -static int yy_init_globals ( yyscan_t yyscanner ); - - /* This must go here because YYSTYPE and YYLTYPE are included - * from bison output in section 1.*/ - # define yylval yyg->yylval_r - - # define yylloc yyg->yylloc_r - -int yylex_init (yyscan_t* scanner); - -int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy ( yyscan_t yyscanner ); - -int yyget_debug ( yyscan_t yyscanner ); - -void yyset_debug ( int debug_flag , yyscan_t yyscanner ); - -YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); - -void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); - -FILE *yyget_in ( yyscan_t yyscanner ); - -void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); - -FILE *yyget_out ( yyscan_t yyscanner ); - -void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); - - int yyget_leng ( yyscan_t yyscanner ); - -char *yyget_text ( yyscan_t yyscanner ); - -int yyget_lineno ( yyscan_t yyscanner ); - -void yyset_lineno ( int _line_number , yyscan_t yyscanner ); - -int yyget_column ( yyscan_t yyscanner ); - -void yyset_column ( int _column_no , yyscan_t yyscanner ); - -YYSTYPE * yyget_lval ( yyscan_t yyscanner ); - -void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); - - YYLTYPE *yyget_lloc ( yyscan_t yyscanner ); - - void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap ( yyscan_t yyscanner ); -#else -extern int yywrap ( yyscan_t yyscanner ); -#endif -#endif - -#ifndef YY_NO_UNPUT - - static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); - -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen ( const char * , yyscan_t yyscanner); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput ( yyscan_t yyscanner ); -#else -static int input ( yyscan_t yyscanner ); -#endif - -#endif - - static void yy_push_state ( int _new_state , yyscan_t yyscanner); - - static void yy_pop_state ( yyscan_t yyscanner ); - - static int yy_top_state ( yyscan_t yyscanner ); - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else -#define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - int n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex \ - (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner); - -#define YY_DECL int yylex \ - (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK /*LINTED*/break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - yy_state_type yy_current_state; - char *yy_cp, *yy_bp; - int yy_act; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yylval = yylval_param; - - yylloc = yylloc_param; - - if ( !yyg->yy_init ) - { - yyg->yy_init = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! yyg->yy_start ) - yyg->yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); - } - - yy_load_buffer_state( yyscanner ); - } - - { -#line 208 "../src/compiler/glsl/glcpp/glcpp-lex.l" - - - glcpp_parser_t *parser = yyextra; - - /* When we lex a multi-line comment, we replace it (as - * specified) with a single space. But if the comment spanned - * multiple lines, then subsequent parsing stages will not - * count correct line numbers. To avoid this problem we keep - * track of all newlines that were commented out by a - * multi-line comment, and we emit a NEWLINE token for each at - * the next legal opportunity, (which is when the lexer would - * be emitting a NEWLINE token anyway). - */ - if (YY_START == NEWLINE_CATCHUP) { - if (parser->commented_newlines) - parser->commented_newlines--; - if (parser->commented_newlines == 0) - BEGIN INITIAL; - RETURN_TOKEN_NEVER_SKIP (NEWLINE); - } - - /* Set up the parser->skipping bit here before doing any lexing. - * - * This bit controls whether tokens are skipped, (as implemented by - * RETURN_TOKEN), such as between "#if 0" and "#endif". - * - * The parser maintains a skip_stack indicating whether we should be - * skipping, (and nested levels of #if/#ifdef/#ifndef/#endif) will - * push and pop items from the stack. - * - * Here are the rules for determining whether we are skipping: - * - * 1. If the skip stack is NULL, we are outside of all #if blocks - * and we are not skipping. - * - * 2. If the skip stack is non-NULL, the type of the top node in - * the stack determines whether to skip. A type of - * SKIP_NO_SKIP is used for blocks wheere we are emitting - * tokens, (such as between #if 1 and #endif, or after the - * #else of an #if 0, etc.). - * - * 3. The lexing_directive bit overrides the skip stack. This bit - * is set when we are actively lexing the expression for a - * pre-processor condition, (such as #if, #elif, or #else). In - * this case, even if otherwise skipping, we need to emit the - * tokens for this condition so that the parser can evaluate - * the expression. (For, #else, there's no expression, but we - * emit tokens so the parser can generate a nice error message - * if there are any tokens here). - */ - if (parser->skip_stack && - parser->skip_stack->type != SKIP_NO_SKIP && - ! parser->lexing_directive) - { - parser->skipping = 1; - } else { - parser->skipping = 0; - } - - /* Single-line comments */ -#line 1383 "src/compiler/glsl/glcpp/glcpp-lex.c" - - while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ - { - yy_cp = yyg->yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yyg->yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yyg->yy_start; -yy_match: - do - { - YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; - if ( yy_accept[yy_current_state] ) - { - yyg->yy_last_accepting_state = yy_current_state; - yyg->yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 189 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - ++yy_cp; - } - while ( yy_current_state != 188 ); - yy_cp = yyg->yy_last_accepting_cpos; - yy_current_state = yyg->yy_last_accepting_state; - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yyg->yy_hold_char; - yy_cp = yyg->yy_last_accepting_cpos; - yy_current_state = yyg->yy_last_accepting_state; - goto yy_find_action; - -case 1: -YY_RULE_SETUP -#line 268 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ -} - YY_BREAK -/* Multi-line comments */ -case 2: -YY_RULE_SETUP -#line 272 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ yy_push_state(COMMENT, yyscanner); } - YY_BREAK -case 3: -YY_RULE_SETUP -#line 273 "../src/compiler/glsl/glcpp/glcpp-lex.l" - - YY_BREAK -case 4: -/* rule 4 can match eol */ -YY_RULE_SETUP -#line 274 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ yylineno++; yycolumn = 0; parser->commented_newlines++; } - YY_BREAK -case 5: -YY_RULE_SETUP -#line 275 "../src/compiler/glsl/glcpp/glcpp-lex.l" - - YY_BREAK -case 6: -/* rule 6 can match eol */ -YY_RULE_SETUP -#line 276 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ yylineno++; yycolumn = 0; parser->commented_newlines++; } - YY_BREAK -case 7: -YY_RULE_SETUP -#line 277 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - yy_pop_state(yyscanner); - /* In the start condition, we don't want any SPACE token. */ - if (yyextra->space_tokens && YY_START != HASH) - RETURN_TOKEN (SPACE); -} - YY_BREAK -case 8: -YY_RULE_SETUP -#line 284 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - - /* If the '#' is the first non-whitespace, non-comment token on this - * line, then it introduces a directive, switch to the start - * condition. - * - * Otherwise, this is just punctuation, so return the HASH_TOKEN - * token. */ - if (parser->first_non_space_token_this_line) { - BEGIN HASH; - yyextra->in_define = false; - } - - RETURN_TOKEN_NEVER_SKIP (HASH_TOKEN); -} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 300 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - yyextra->space_tokens = 0; - yyextra->lexing_version_directive = 1; - RETURN_STRING_TOKEN (VERSION_TOKEN); -} - YY_BREAK -/* Swallow empty #pragma directives, (to avoid confusing the - * downstream compiler). - * - * Note: We use a simple regular expression for the lookahead - * here. Specifically, we cannot use the complete {NEWLINE} expression - * since it uses alternation and we've found that there's a flex bug - * where using alternation in the lookahead portion of a pattern - * triggers a buffer overrun. */ -case 10: -/* rule 10 can match eol */ -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -YY_LINENO_REWIND_TO(yy_cp - 1); -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 315 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; -} - YY_BREAK -/* glcpp doesn't handle #extension, #version, or #pragma directives. - * Simply pass them through to the main compiler's lexer/parser. */ -case 11: -YY_RULE_SETUP -#line 321 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - RETURN_STRING_TOKEN (PRAGMA); -} - YY_BREAK -case 12: -YY_RULE_SETUP -#line 326 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - RETURN_STRING_TOKEN (INCLUDE); -} - YY_BREAK -case 13: -YY_RULE_SETUP -#line 331 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - RETURN_TOKEN (LINE); -} - YY_BREAK -case 14: -/* rule 14 can match eol */ -YY_RULE_SETUP -#line 336 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - yyextra->space_tokens = 0; - yylineno++; - yycolumn = 0; - RETURN_TOKEN_NEVER_SKIP (NEWLINE); -} - YY_BREAK -/* For the pre-processor directives, we return these tokens - * even when we are otherwise skipping. */ -case 15: -YY_RULE_SETUP -#line 346 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (IFDEF); - } -} - YY_BREAK -case 16: -YY_RULE_SETUP -#line 355 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (IFNDEF); - } -} - YY_BREAK -case 17: -/* rule 17 can match eol */ -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -YY_LINENO_REWIND_TO(yy_bp + 2); -yyg->yy_c_buf_p = yy_cp = yy_bp + 2; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 364 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (IF); - } -} - YY_BREAK -case 18: -/* rule 18 can match eol */ -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -YY_LINENO_REWIND_TO(yy_bp + 4); -yyg->yy_c_buf_p = yy_cp = yy_bp + 4; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 373 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (ELIF); - } -} - YY_BREAK -case 19: -YY_RULE_SETUP -#line 382 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (ELSE); - } -} - YY_BREAK -case 20: -YY_RULE_SETUP -#line 390 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (ENDIF); - } -} - YY_BREAK -case 21: -YY_RULE_SETUP -#line 398 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - RETURN_STRING_TOKEN (ERROR_TOKEN); -} - YY_BREAK -/* After we see a "#define" we enter the start state - * for the lexer. Within we are looking for the first - * identifier and specifically checking whether the identifier - * is followed by a '(' or not, (to lex either a - * FUNC_IDENTIFIER or an OBJ_IDENITIFIER token). - * - * While in the state we also need to explicitly - * handle a few other things that may appear before the - * identifier: - * - * * Comments, (handled above with the main support for - * comments). - * - * * Whitespace (simply ignored) - * - * * Anything else, (not an identifier, not a comment, - * and not whitespace). This will generate an error. - */ -case 22: -YY_RULE_SETUP -#line 421 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - yyextra->in_define = true; - if (!parser->skipping) { - BEGIN DEFINE; - yyextra->space_tokens = 0; - RETURN_TOKEN (DEFINE_TOKEN); - } -} - YY_BREAK -case 23: -YY_RULE_SETUP -#line 430 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - yyextra->space_tokens = 0; - RETURN_TOKEN (UNDEF); -} - YY_BREAK -case 24: -YY_RULE_SETUP -#line 436 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - /* Nothing to do here. Importantly, don't leave the - * start condition, since it's legal to have space between the - * '#' and the directive.. */ -} - YY_BREAK -/* This will catch any non-directive garbage after a HASH */ -case 25: -YY_RULE_SETUP -#line 443 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (!parser->skipping) { - BEGIN INITIAL; - RETURN_TOKEN (GARBAGE); - } -} - YY_BREAK -/* An identifier immediately followed by '(' */ -case 26: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 451 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - RETURN_STRING_TOKEN (FUNC_IDENTIFIER); -} - YY_BREAK -/* An identifier not immediately followed by '(' */ -case 27: -YY_RULE_SETUP -#line 457 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - RETURN_STRING_TOKEN (OBJ_IDENTIFIER); -} - YY_BREAK -/* Whitespace */ -case 28: -YY_RULE_SETUP -#line 463 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - /* Just ignore it. Nothing to do here. */ -} - YY_BREAK -/* '/' not followed by '*', so not a comment. This is an error. */ -case 29: -/* rule 29 can match eol */ -YY_RULE_SETUP -#line 468 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - glcpp_error(yylloc, yyextra, "#define followed by a non-identifier: %s", yytext); - RETURN_STRING_TOKEN (INTEGER_STRING); -} - YY_BREAK -/* A character that can't start an identifier, comment, or - * space. This is an error. */ -case 30: -YY_RULE_SETUP -#line 476 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - BEGIN INITIAL; - glcpp_error(yylloc, yyextra, "#define followed by a non-identifier: %s", yytext); - RETURN_STRING_TOKEN (INTEGER_STRING); -} - YY_BREAK -case 31: -YY_RULE_SETUP -#line 482 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_STRING_TOKEN (INTEGER_STRING); -} - YY_BREAK -case 32: -YY_RULE_SETUP -#line 486 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_STRING_TOKEN (INTEGER_STRING); -} - YY_BREAK -case 33: -YY_RULE_SETUP -#line 490 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_STRING_TOKEN (INTEGER_STRING); -} - YY_BREAK -case 34: -YY_RULE_SETUP -#line 494 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (LEFT_SHIFT); -} - YY_BREAK -case 35: -YY_RULE_SETUP -#line 498 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (RIGHT_SHIFT); -} - YY_BREAK -case 36: -YY_RULE_SETUP -#line 502 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (LESS_OR_EQUAL); -} - YY_BREAK -case 37: -YY_RULE_SETUP -#line 506 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (GREATER_OR_EQUAL); -} - YY_BREAK -case 38: -YY_RULE_SETUP -#line 510 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (EQUAL); -} - YY_BREAK -case 39: -YY_RULE_SETUP -#line 514 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (NOT_EQUAL); -} - YY_BREAK -case 40: -YY_RULE_SETUP -#line 518 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (AND); -} - YY_BREAK -case 41: -YY_RULE_SETUP -#line 522 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (OR); -} - YY_BREAK -case 42: -YY_RULE_SETUP -#line 526 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (PLUS_PLUS); -} - YY_BREAK -case 43: -YY_RULE_SETUP -#line 530 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (MINUS_MINUS); -} - YY_BREAK -case 44: -YY_RULE_SETUP -#line 534 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (! parser->skipping) { - if (parser->is_gles) - glcpp_error(yylloc, yyextra, "Token pasting (##) is illegal in GLES"); - RETURN_TOKEN (PASTE); - } -} - YY_BREAK -case 45: -YY_RULE_SETUP -#line 542 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (DEFINED); -} - YY_BREAK -case 46: -YY_RULE_SETUP -#line 546 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_STRING_TOKEN (IDENTIFIER); -} - YY_BREAK -case 47: -YY_RULE_SETUP -#line 550 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_STRING_TOKEN (OTHER); -} - YY_BREAK -case 48: -YY_RULE_SETUP -#line 554 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_TOKEN (yytext[0]); -} - YY_BREAK -case 49: -YY_RULE_SETUP -#line 558 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_STRING_TOKEN (OTHER); -} - YY_BREAK -case 50: -YY_RULE_SETUP -#line 562 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (yyextra->space_tokens) { - RETURN_TOKEN (SPACE); - } -} - YY_BREAK -case 51: -YY_RULE_SETUP -#line 568 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - RETURN_STRING_TOKEN (PATH); -} - YY_BREAK -/* We preserve all newlines, even between #if 0..#endif, so no - skipping.. */ -case 52: -/* rule 52 can match eol */ -YY_RULE_SETUP -#line 574 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (parser->commented_newlines) { - BEGIN NEWLINE_CATCHUP; - } else { - BEGIN INITIAL; - } - yyextra->space_tokens = 1; - yyextra->lexing_directive = 0; - yyextra->lexing_version_directive = 0; - yylineno++; - yycolumn = 0; - RETURN_TOKEN_NEVER_SKIP (NEWLINE); -} - YY_BREAK -case YY_STATE_EOF(INITIAL): -case YY_STATE_EOF(COMMENT): -case YY_STATE_EOF(DEFINE): -case YY_STATE_EOF(HASH): -#line 588 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - if (YY_START == COMMENT) - glcpp_error(yylloc, yyextra, "Unterminated comment"); - BEGIN DONE; /* Don't keep matching this rule forever. */ - yyextra->lexing_directive = 0; - yyextra->lexing_version_directive = 0; - if (! parser->last_token_was_newline) - RETURN_TOKEN (NEWLINE); -} - YY_BREAK -/* This is a catch-all to avoid the annoying default flex action which - * matches any character and prints it. If any input ever matches this - * rule, then we have made a mistake above and need to fix one or more - * of the preceding patterns to match that input. */ -case 53: -YY_RULE_SETUP -#line 603 "../src/compiler/glsl/glcpp/glcpp-lex.l" -{ - glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext); - - /* We don't actually use the UNREACHABLE start condition. We - only have this block here so that we can pretend to call some - generated functions, (to avoid "defined but not used" - warnings. */ - if (YY_START == UNREACHABLE) { - unput('.'); - yy_top_state(yyextra); - } -} - YY_BREAK -case 54: -YY_RULE_SETUP -#line 616 "../src/compiler/glsl/glcpp/glcpp-lex.l" -YY_FATAL_ERROR( "flex scanner jammed" ); - YY_BREAK -#line 1980 "src/compiler/glsl/glcpp/glcpp-lex.c" -case YY_STATE_EOF(DONE): -case YY_STATE_EOF(NEWLINE_CATCHUP): -case YY_STATE_EOF(UNREACHABLE): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yyg->yy_hold_char; - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); - - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yyg->yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yyg->yy_last_accepting_cpos; - yy_current_state = yyg->yy_last_accepting_state; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_END_OF_FILE: - { - yyg->yy_did_buffer_switch_on_eof = 0; - - if ( yywrap( yyscanner ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = - yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yyg->yy_c_buf_p = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of user's declarations */ -} /* end of yylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - char *source = yyg->yytext_ptr; - int number_to_move, i; - int ret_val; - - if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; - - else - { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - - int yy_c_buf_p_offset = - (int) (yyg->yy_c_buf_p - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yyrealloc( (void *) b->yy_ch_buf, - (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = NULL; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - yyg->yy_n_chars, num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - if ( yyg->yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin , yyscanner); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( - (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - /* "- 2" to take care of EOB's */ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); - } - - yyg->yy_n_chars += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (yyscan_t yyscanner) -{ - yy_state_type yy_current_state; - char *yy_cp; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_current_state = yyg->yy_start; - - for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) - { - YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - yyg->yy_last_accepting_state = yy_current_state; - yyg->yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 189 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) -{ - int yy_is_jam; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - char *yy_cp = yyg->yy_c_buf_p; - - YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - yyg->yy_last_accepting_state = yy_current_state; - yyg->yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 189 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 188); - - (void)yyg; - return yy_is_jam ? 0 : yy_current_state; -} - -#ifndef YY_NO_UNPUT - - static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) -{ - char *yy_cp; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_cp = yyg->yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yyg->yy_hold_char; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - int number_to_move = yyg->yy_n_chars + 2; - char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - yyg->yytext_ptr = yy_bp; - yyg->yy_hold_char = *yy_cp; - yyg->yy_c_buf_p = yy_cp; -} - -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (yyscan_t yyscanner) -#else - static int input (yyscan_t yyscanner) -#endif - -{ - int c; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - *yyg->yy_c_buf_p = yyg->yy_hold_char; - - if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - /* This was really a NUL. */ - *yyg->yy_c_buf_p = '\0'; - - else - { /* need more input */ - int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); - ++yyg->yy_c_buf_p; - - switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart( yyin , yyscanner); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap( yyscanner ) ) - return 0; - - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(yyscanner); -#else - return input(yyscanner); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = yyg->yytext_ptr + offset; - break; - } - } - } - - c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ - *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ - yyg->yy_hold_char = *++yyg->yy_c_buf_p; - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * @param yyscanner The scanner object. - * @note This function does not reset the start condition to @c INITIAL . - */ - void yyrestart (FILE * input_file , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); - } - - yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); - yy_load_buffer_state( yyscanner ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * @param yyscanner The scanner object. - */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (yyscanner); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( yyscanner ); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yyg->yy_did_buffer_switch_on_eof = 1; -} - -static void yy_load_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - yyg->yy_hold_char = *yyg->yy_c_buf_p; -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * @param yyscanner The scanner object. - * @return the allocated buffer state. - */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file , yyscanner); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * @param yyscanner The scanner object. - */ - void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yyfree( (void *) b->yy_ch_buf , yyscanner ); - - yyfree( (void *) b , yyscanner ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) - -{ - int oerrno = errno; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_flush_buffer( b , yyscanner); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * @param yyscanner The scanner object. - */ - void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( yyscanner ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * @param yyscanner The scanner object. - */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(yyscanner); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - yyg->yy_buffer_stack_top++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * @param yyscanner The scanner object. - */ -void yypop_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); - YY_CURRENT_BUFFER_LVALUE = NULL; - if (yyg->yy_buffer_stack_top > 0) - --yyg->yy_buffer_stack_top; - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void yyensure_buffer_stack (yyscan_t yyscanner) -{ - yy_size_t num_to_alloc; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (!yyg->yy_buffer_stack) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - yyg->yy_buffer_stack_max = num_to_alloc; - yyg->yy_buffer_stack_top = 0; - return; - } - - if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - yy_size_t grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = yyg->yy_buffer_stack_max + grow_size; - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc - (yyg->yy_buffer_stack, - num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); - yyg->yy_buffer_stack_max = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return NULL; - - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = NULL; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b , yyscanner ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) -{ - - return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); -} - -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param yybytes the byte buffer to scan - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = (yy_size_t) (_yybytes_len + 2); - buf = (char *) yyalloc( n , yyscanner ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n , yyscanner); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - - static void yy_push_state (int _new_state , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth ) - { - yy_size_t new_size; - - yyg->yy_start_stack_depth += YY_START_STACK_INCR; - new_size = (yy_size_t) yyg->yy_start_stack_depth * sizeof( int ); - - if ( ! yyg->yy_start_stack ) - yyg->yy_start_stack = (int *) yyalloc( new_size , yyscanner ); - - else - yyg->yy_start_stack = (int *) yyrealloc( - (void *) yyg->yy_start_stack, new_size , yyscanner ); - - if ( ! yyg->yy_start_stack ) - YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); - } - - yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START; - - BEGIN(_new_state); -} - - static void yy_pop_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if ( --yyg->yy_start_stack_ptr < 0 ) - YY_FATAL_ERROR( "start-condition stack underflow" ); - - BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]); -} - - static int yy_top_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1]; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = yyg->yy_hold_char; \ - yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ - yyg->yy_hold_char = *yyg->yy_c_buf_p; \ - *yyg->yy_c_buf_p = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the user-defined data for this scanner. - * @param yyscanner The scanner object. - */ -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyextra; -} - -/** Get the current line number. - * @param yyscanner The scanner object. - */ -int yyget_lineno (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yylineno; -} - -/** Get the current column number. - * @param yyscanner The scanner object. - */ -int yyget_column (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yycolumn; -} - -/** Get the input stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_in (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyin; -} - -/** Get the output stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_out (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyout; -} - -/** Get the length of the current token. - * @param yyscanner The scanner object. - */ -int yyget_leng (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyleng; -} - -/** Get the current token. - * @param yyscanner The scanner object. - */ - -char *yyget_text (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yytext; -} - -/** Set the user-defined data. This data is never touched by the scanner. - * @param user_defined The data to be associated with this scanner. - * @param yyscanner The scanner object. - */ -void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyextra = user_defined ; -} - -/** Set the current line number. - * @param _line_number line number - * @param yyscanner The scanner object. - */ -void yyset_lineno (int _line_number , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* lineno is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); - - yylineno = _line_number; -} - -/** Set the current column. - * @param _column_no column number - * @param yyscanner The scanner object. - */ -void yyset_column (int _column_no , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* column is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_column called with no buffer" ); - - yycolumn = _column_no; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param _in_str A readable stream. - * @param yyscanner The scanner object. - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * _in_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyin = _in_str ; -} - -void yyset_out (FILE * _out_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyout = _out_str ; -} - -int yyget_debug (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yy_flex_debug; -} - -void yyset_debug (int _bdebug , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yy_flex_debug = _bdebug ; -} - -/* Accessor methods for yylval and yylloc */ - -YYSTYPE * yyget_lval (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yylval; -} - -void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yylval = yylval_param; -} - -YYLTYPE *yyget_lloc (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yylloc; -} - -void yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yylloc = yylloc_param; -} - -/* User-visible API */ - -/* yylex_init is special because it creates the scanner itself, so it is - * the ONLY reentrant function that doesn't take the scanner as the last argument. - * That's why we explicitly handle the declaration, instead of using our macros. - */ -int yylex_init(yyscan_t* ptr_yy_globals) -{ - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - return yy_init_globals ( *ptr_yy_globals ); -} - -/* yylex_init_extra has the same functionality as yylex_init, but follows the - * convention of taking the scanner as the last argument. Note however, that - * this is a *pointer* to a scanner, as it will be allocated by this call (and - * is the reason, too, why this function also must handle its own declaration). - * The user defined value in the first argument will be available to yyalloc in - * the yyextra field. - */ -int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) -{ - struct yyguts_t dummy_yyguts; - - yyset_extra (yy_user_defined, &dummy_yyguts); - - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in - yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - yyset_extra (yy_user_defined, *ptr_yy_globals); - - return yy_init_globals ( *ptr_yy_globals ); -} - -static int yy_init_globals (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - yyg->yy_buffer_stack = NULL; - yyg->yy_buffer_stack_top = 0; - yyg->yy_buffer_stack_max = 0; - yyg->yy_c_buf_p = NULL; - yyg->yy_init = 0; - yyg->yy_start = 0; - - yyg->yy_start_stack_ptr = 0; - yyg->yy_start_stack_depth = 0; - yyg->yy_start_stack = NULL; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = NULL; - yyout = NULL; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; -} - -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(yyscanner); - } - - /* Destroy the stack itself. */ - yyfree(yyg->yy_buffer_stack , yyscanner); - yyg->yy_buffer_stack = NULL; - - /* Destroy the start condition stack. */ - yyfree( yyg->yy_start_stack , yyscanner ); - yyg->yy_start_stack = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( yyscanner); - - /* Destroy the main struct (reentrant only). */ - yyfree ( yyscanner , yyscanner ); - yyscanner = NULL; - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - - int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (const char * s , yyscan_t yyscanner) -{ - int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *yyalloc (yy_size_t size , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - return malloc(size); -} - -void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return realloc(ptr, size); -} - -void yyfree (void * ptr , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 616 "../src/compiler/glsl/glcpp/glcpp-lex.l" - - -void -glcpp_lex_set_source_string(glcpp_parser_t *parser, const char *shader) -{ - yy_scan_string(shader, parser->scanner); -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-lex.l b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-lex.l deleted file mode 100644 index e07739b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-lex.l +++ /dev/null @@ -1,621 +0,0 @@ -%{ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include - -#include "glcpp.h" -#include "glcpp-parse.h" - -/* Flex annoyingly generates some functions without making them - * static. Let's declare them here. */ -int glcpp_get_column (yyscan_t yyscanner); -void glcpp_set_column (int column_no , yyscan_t yyscanner); - -#ifdef _MSC_VER -#define YY_NO_UNISTD_H -#endif - -#define YY_NO_INPUT - -#define YY_USER_ACTION \ - do { \ - if (parser->has_new_line_number) \ - yylineno = parser->new_line_number; \ - if (parser->has_new_source_number) \ - yylloc->source = parser->new_source_number; \ - yylloc->first_column = yycolumn + 1; \ - yylloc->first_line = yylloc->last_line = yylineno; \ - yycolumn += yyleng; \ - yylloc->last_column = yycolumn + 1; \ - parser->has_new_line_number = 0; \ - parser->has_new_source_number = 0; \ - } while(0); - -#define YY_USER_INIT \ - do { \ - yylineno = 1; \ - yycolumn = 0; \ - yylloc->source = 0; \ - } while(0) - -/* It's ugly to have macros that have return statements inside of - * them, but flex-based lexer generation is all built around the - * return statement. - * - * To mitigate the ugliness, we defer as much of the logic as possible - * to an actual function, not a macro (see - * glcpplex_update_state_per_token) and we make the word RETURN - * prominent in all of the macros which may return. - * - * The most-commonly-used macro is RETURN_TOKEN which will perform all - * necessary state updates based on the provided token,, then - * conditionally return the token. It will not return a token if the - * parser is currently skipping tokens, (such as within #if - * 0...#else). - * - * The RETURN_TOKEN_NEVER_SKIP macro is a lower-level variant that - * makes the token returning unconditional. This is needed for things - * like #if and the tokens of its condition, (since these must be - * evaluated by the parser even when otherwise skipping). - * - * Finally, RETURN_STRING_TOKEN is a simple convenience wrapper on top - * of RETURN_TOKEN that performs a string copy of yytext before the - * return. - */ -#define RETURN_TOKEN_NEVER_SKIP(token) \ - do { \ - if (glcpp_lex_update_state_per_token (parser, token)) \ - return token; \ - } while (0) - -#define RETURN_TOKEN(token) \ - do { \ - if (! parser->skipping) { \ - RETURN_TOKEN_NEVER_SKIP(token); \ - } \ - } while(0) - -#define RETURN_STRING_TOKEN(token) \ - do { \ - if (! parser->skipping) { \ - /* We're not doing linear_strdup here, to avoid \ - * an implicit call on strlen() for the length \ - * of the string, as this is already found by \ - * flex and stored in yyleng */ \ - void *mem_ctx = yyextra->linalloc; \ - yylval->str = linear_alloc_child(mem_ctx, \ - yyleng + 1); \ - memcpy(yylval->str, yytext, yyleng + 1); \ - RETURN_TOKEN_NEVER_SKIP (token); \ - } \ - } while(0) - - -/* Update all state necessary for each token being returned. - * - * Here we'll be tracking newlines and spaces so that the lexer can - * alter its behavior as necessary, (for example, '#' has special - * significance if it is the first non-whitespace, non-comment token - * in a line, but does not otherwise). - * - * NOTE: If this function returns FALSE, then no token should be - * returned at all. This is used to suprress duplicate SPACE tokens. - */ -static int -glcpp_lex_update_state_per_token (glcpp_parser_t *parser, int token) -{ - if (token != NEWLINE && token != SPACE && token != HASH_TOKEN && - !parser->lexing_version_directive) { - glcpp_parser_resolve_implicit_version(parser); - } - - /* After the first non-space token in a line, we won't - * allow any '#' to introduce a directive. */ - if (token == NEWLINE) { - parser->first_non_space_token_this_line = 1; - } else if (token != SPACE) { - parser->first_non_space_token_this_line = 0; - } - - /* Track newlines just to know whether a newline needs - * to be inserted if end-of-file comes early. */ - if (token == NEWLINE) { - parser->last_token_was_newline = 1; - } else { - parser->last_token_was_newline = 0; - } - - /* Track spaces to avoid emitting multiple SPACE - * tokens in a row. */ - if (token == SPACE) { - if (! parser->last_token_was_space) { - parser->last_token_was_space = 1; - return 1; - } else { - parser->last_token_was_space = 1; - return 0; - } - } else { - parser->last_token_was_space = 0; - return 1; - } -} - - -%} - -%option bison-bridge bison-locations reentrant noyywrap -%option extra-type="glcpp_parser_t *" -%option prefix="glcpp_" -%option stack -%option never-interactive -%option warn nodefault - - /* Note: When adding any start conditions to this list, you must also - * update the "Internal compiler error" catch-all rule near the end of - * this file. */ - -%x COMMENT DEFINE DONE HASH NEWLINE_CATCHUP UNREACHABLE - -SPACE [[:space:]] -NONSPACE [^[:space:]] -HSPACE [ \t\v\f] -HASH # -NEWLINE (\r\n|\n\r|\r|\n) -IDENTIFIER [_a-zA-Z][_a-zA-Z0-9]* -PP_NUMBER [.]?[0-9]([._a-zA-Z0-9]|[eEpP][-+])* -PUNCTUATION [][(){}.&*~!/%<>^|;,=+-] - -/* The OTHER class is simply a catch-all for things that the CPP -parser just doesn't care about. Since flex regular expressions that -match longer strings take priority over those matching shorter -strings, we have to be careful to avoid OTHER matching and hiding -something that CPP does care about. So we simply exclude all -characters that appear in any other expressions. */ - -OTHER [^][_#[:space:]#a-zA-Z0-9(){}.&*~!/%<>^|;,=+-] - -DIGITS [0-9][0-9]* -DECIMAL_INTEGER [1-9][0-9]*[uU]? -OCTAL_INTEGER 0[0-7]*[uU]? -HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]? -PATH ["][]^./ _A-Za-z0-9+*%[(){}|&~=!:;,?-]*["] - -%% - - glcpp_parser_t *parser = yyextra; - - /* When we lex a multi-line comment, we replace it (as - * specified) with a single space. But if the comment spanned - * multiple lines, then subsequent parsing stages will not - * count correct line numbers. To avoid this problem we keep - * track of all newlines that were commented out by a - * multi-line comment, and we emit a NEWLINE token for each at - * the next legal opportunity, (which is when the lexer would - * be emitting a NEWLINE token anyway). - */ - if (YY_START == NEWLINE_CATCHUP) { - if (parser->commented_newlines) - parser->commented_newlines--; - if (parser->commented_newlines == 0) - BEGIN INITIAL; - RETURN_TOKEN_NEVER_SKIP (NEWLINE); - } - - /* Set up the parser->skipping bit here before doing any lexing. - * - * This bit controls whether tokens are skipped, (as implemented by - * RETURN_TOKEN), such as between "#if 0" and "#endif". - * - * The parser maintains a skip_stack indicating whether we should be - * skipping, (and nested levels of #if/#ifdef/#ifndef/#endif) will - * push and pop items from the stack. - * - * Here are the rules for determining whether we are skipping: - * - * 1. If the skip stack is NULL, we are outside of all #if blocks - * and we are not skipping. - * - * 2. If the skip stack is non-NULL, the type of the top node in - * the stack determines whether to skip. A type of - * SKIP_NO_SKIP is used for blocks wheere we are emitting - * tokens, (such as between #if 1 and #endif, or after the - * #else of an #if 0, etc.). - * - * 3. The lexing_directive bit overrides the skip stack. This bit - * is set when we are actively lexing the expression for a - * pre-processor condition, (such as #if, #elif, or #else). In - * this case, even if otherwise skipping, we need to emit the - * tokens for this condition so that the parser can evaluate - * the expression. (For, #else, there's no expression, but we - * emit tokens so the parser can generate a nice error message - * if there are any tokens here). - */ - if (parser->skip_stack && - parser->skip_stack->type != SKIP_NO_SKIP && - ! parser->lexing_directive) - { - parser->skipping = 1; - } else { - parser->skipping = 0; - } - - /* Single-line comments */ -"//"[^\r\n]* { -} - - /* Multi-line comments */ -"/*" { yy_push_state(COMMENT, yyscanner); } -[^*\r\n]* -[^*\r\n]*{NEWLINE} { yylineno++; yycolumn = 0; parser->commented_newlines++; } -"*"+[^*/\r\n]* -"*"+[^*/\r\n]*{NEWLINE} { yylineno++; yycolumn = 0; parser->commented_newlines++; } -"*"+"/" { - yy_pop_state(yyscanner); - /* In the start condition, we don't want any SPACE token. */ - if (yyextra->space_tokens && YY_START != HASH) - RETURN_TOKEN (SPACE); -} - -{HASH} { - - /* If the '#' is the first non-whitespace, non-comment token on this - * line, then it introduces a directive, switch to the start - * condition. - * - * Otherwise, this is just punctuation, so return the HASH_TOKEN - * token. */ - if (parser->first_non_space_token_this_line) { - BEGIN HASH; - yyextra->in_define = false; - } - - RETURN_TOKEN_NEVER_SKIP (HASH_TOKEN); -} - -version{HSPACE}+ { - BEGIN INITIAL; - yyextra->space_tokens = 0; - yyextra->lexing_version_directive = 1; - RETURN_STRING_TOKEN (VERSION_TOKEN); -} - - /* Swallow empty #pragma directives, (to avoid confusing the - * downstream compiler). - * - * Note: We use a simple regular expression for the lookahead - * here. Specifically, we cannot use the complete {NEWLINE} expression - * since it uses alternation and we've found that there's a flex bug - * where using alternation in the lookahead portion of a pattern - * triggers a buffer overrun. */ -pragma{HSPACE}*/[\r\n] { - BEGIN INITIAL; -} - - /* glcpp doesn't handle #extension, #version, or #pragma directives. - * Simply pass them through to the main compiler's lexer/parser. */ -(extension|pragma)[^\r\n]* { - BEGIN INITIAL; - RETURN_STRING_TOKEN (PRAGMA); -} - -include{HSPACE}+["<][]^./ _A-Za-z0-9+*%[(){}|&~=!:;,?-]+[">] { - BEGIN INITIAL; - RETURN_STRING_TOKEN (INCLUDE); -} - -line{HSPACE}+ { - BEGIN INITIAL; - RETURN_TOKEN (LINE); -} - -{NEWLINE} { - BEGIN INITIAL; - yyextra->space_tokens = 0; - yylineno++; - yycolumn = 0; - RETURN_TOKEN_NEVER_SKIP (NEWLINE); -} - - /* For the pre-processor directives, we return these tokens - * even when we are otherwise skipping. */ -ifdef { - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (IFDEF); - } -} - -ifndef { - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (IFNDEF); - } -} - -if/[^_a-zA-Z0-9] { - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (IF); - } -} - -elif/[^_a-zA-Z0-9] { - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->lexing_directive = 1; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (ELIF); - } -} - -else { - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (ELSE); - } -} - -endif { - if (!yyextra->in_define) { - BEGIN INITIAL; - yyextra->space_tokens = 0; - RETURN_TOKEN_NEVER_SKIP (ENDIF); - } -} - -error[^\r\n]* { - BEGIN INITIAL; - RETURN_STRING_TOKEN (ERROR_TOKEN); -} - - /* After we see a "#define" we enter the start state - * for the lexer. Within we are looking for the first - * identifier and specifically checking whether the identifier - * is followed by a '(' or not, (to lex either a - * FUNC_IDENTIFIER or an OBJ_IDENITIFIER token). - * - * While in the state we also need to explicitly - * handle a few other things that may appear before the - * identifier: - * - * * Comments, (handled above with the main support for - * comments). - * - * * Whitespace (simply ignored) - * - * * Anything else, (not an identifier, not a comment, - * and not whitespace). This will generate an error. - */ -define{HSPACE}* { - yyextra->in_define = true; - if (!parser->skipping) { - BEGIN DEFINE; - yyextra->space_tokens = 0; - RETURN_TOKEN (DEFINE_TOKEN); - } -} - -undef { - BEGIN INITIAL; - yyextra->space_tokens = 0; - RETURN_TOKEN (UNDEF); -} - -{HSPACE}+ { - /* Nothing to do here. Importantly, don't leave the - * start condition, since it's legal to have space between the - * '#' and the directive.. */ -} - - /* This will catch any non-directive garbage after a HASH */ -{NONSPACE} { - if (!parser->skipping) { - BEGIN INITIAL; - RETURN_TOKEN (GARBAGE); - } -} - - /* An identifier immediately followed by '(' */ -{IDENTIFIER}/"(" { - BEGIN INITIAL; - RETURN_STRING_TOKEN (FUNC_IDENTIFIER); -} - - /* An identifier not immediately followed by '(' */ -{IDENTIFIER} { - BEGIN INITIAL; - RETURN_STRING_TOKEN (OBJ_IDENTIFIER); -} - - /* Whitespace */ -{HSPACE}+ { - /* Just ignore it. Nothing to do here. */ -} - - /* '/' not followed by '*', so not a comment. This is an error. */ -[/][^*]{NONSPACE}* { - BEGIN INITIAL; - glcpp_error(yylloc, yyextra, "#define followed by a non-identifier: %s", yytext); - RETURN_STRING_TOKEN (INTEGER_STRING); -} - - /* A character that can't start an identifier, comment, or - * space. This is an error. */ -[^_a-zA-Z/[:space:]]{NONSPACE}* { - BEGIN INITIAL; - glcpp_error(yylloc, yyextra, "#define followed by a non-identifier: %s", yytext); - RETURN_STRING_TOKEN (INTEGER_STRING); -} - -{DECIMAL_INTEGER} { - RETURN_STRING_TOKEN (INTEGER_STRING); -} - -{OCTAL_INTEGER} { - RETURN_STRING_TOKEN (INTEGER_STRING); -} - -{HEXADECIMAL_INTEGER} { - RETURN_STRING_TOKEN (INTEGER_STRING); -} - -"<<" { - RETURN_TOKEN (LEFT_SHIFT); -} - -">>" { - RETURN_TOKEN (RIGHT_SHIFT); -} - -"<=" { - RETURN_TOKEN (LESS_OR_EQUAL); -} - -">=" { - RETURN_TOKEN (GREATER_OR_EQUAL); -} - -"==" { - RETURN_TOKEN (EQUAL); -} - -"!=" { - RETURN_TOKEN (NOT_EQUAL); -} - -"&&" { - RETURN_TOKEN (AND); -} - -"||" { - RETURN_TOKEN (OR); -} - -"++" { - RETURN_TOKEN (PLUS_PLUS); -} - -"--" { - RETURN_TOKEN (MINUS_MINUS); -} - -"##" { - if (! parser->skipping) { - if (parser->is_gles) - glcpp_error(yylloc, yyextra, "Token pasting (##) is illegal in GLES"); - RETURN_TOKEN (PASTE); - } -} - -"defined" { - RETURN_TOKEN (DEFINED); -} - -{IDENTIFIER} { - RETURN_STRING_TOKEN (IDENTIFIER); -} - -{PP_NUMBER} { - RETURN_STRING_TOKEN (OTHER); -} - -{PUNCTUATION} { - RETURN_TOKEN (yytext[0]); -} - -{OTHER}+ { - RETURN_STRING_TOKEN (OTHER); -} - -{HSPACE} { - if (yyextra->space_tokens) { - RETURN_TOKEN (SPACE); - } -} - -{PATH} { - RETURN_STRING_TOKEN (PATH); -} - - /* We preserve all newlines, even between #if 0..#endif, so no - skipping.. */ -<*>{NEWLINE} { - if (parser->commented_newlines) { - BEGIN NEWLINE_CATCHUP; - } else { - BEGIN INITIAL; - } - yyextra->space_tokens = 1; - yyextra->lexing_directive = 0; - yyextra->lexing_version_directive = 0; - yylineno++; - yycolumn = 0; - RETURN_TOKEN_NEVER_SKIP (NEWLINE); -} - -<> { - if (YY_START == COMMENT) - glcpp_error(yylloc, yyextra, "Unterminated comment"); - BEGIN DONE; /* Don't keep matching this rule forever. */ - yyextra->lexing_directive = 0; - yyextra->lexing_version_directive = 0; - if (! parser->last_token_was_newline) - RETURN_TOKEN (NEWLINE); -} - - /* This is a catch-all to avoid the annoying default flex action which - * matches any character and prints it. If any input ever matches this - * rule, then we have made a mistake above and need to fix one or more - * of the preceding patterns to match that input. */ - -<*>. { - glcpp_error(yylloc, yyextra, "Internal compiler error: Unexpected character: %s", yytext); - - /* We don't actually use the UNREACHABLE start condition. We - only have this block here so that we can pretend to call some - generated functions, (to avoid "defined but not used" - warnings. */ - if (YY_START == UNREACHABLE) { - unput('.'); - yy_top_state(yyextra); - } -} - -%% - -void -glcpp_lex_set_source_string(glcpp_parser_t *parser, const char *shader) -{ - yy_scan_string(shader, parser->scanner); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.c deleted file mode 100644 index b3aee7f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.c +++ /dev/null @@ -1,5028 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output, and Bison version. */ -#define YYBISON 30802 - -/* Bison version string. */ -#define YYBISON_VERSION "3.8.2" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - -/* Substitute the variable and function names. */ -#define yyparse glcpp_parser_parse -#define yylex glcpp_parser_lex -#define yyerror glcpp_parser_error -#define yydebug glcpp_parser_debug -#define yynerrs glcpp_parser_nerrs - -/* First part of user prologue. */ -#line 1 "../src/compiler/glsl/glcpp/glcpp-parse.y" - -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include -#include -#include - -#include "glcpp.h" -#include "../../../mesa/main/mtypes.h" -#include "../../../util/strndup.h" - -const char * -_mesa_lookup_shader_include(struct gl_context *ctx, char *path, - bool error_check); - -size_t -_mesa_get_shader_include_cursor(struct gl_shared_state *shared); - -void -_mesa_set_shader_include_cursor(struct gl_shared_state *shared, size_t cursor); - -static void -yyerror(YYLTYPE *locp, glcpp_parser_t *parser, const char *error); - -static void -_define_object_macro(glcpp_parser_t *parser, - YYLTYPE *loc, - const char *macro, - token_list_t *replacements); - -static void -_define_function_macro(glcpp_parser_t *parser, - YYLTYPE *loc, - const char *macro, - string_list_t *parameters, - token_list_t *replacements); - -static string_list_t * -_string_list_create(glcpp_parser_t *parser); - -static void -_string_list_append_item(glcpp_parser_t *parser, string_list_t *list, - const char *str); - -static int -_string_list_contains(string_list_t *list, const char *member, int *index); - -static const char * -_string_list_has_duplicate(string_list_t *list); - -static int -_string_list_length(string_list_t *list); - -static int -_string_list_equal(string_list_t *a, string_list_t *b); - -static argument_list_t * -_argument_list_create(glcpp_parser_t *parser); - -static void -_argument_list_append(glcpp_parser_t *parser, argument_list_t *list, - token_list_t *argument); - -static int -_argument_list_length(argument_list_t *list); - -static token_list_t * -_argument_list_member_at(argument_list_t *list, int index); - -static token_t * -_token_create_str(glcpp_parser_t *parser, int type, char *str); - -static token_t * -_token_create_ival(glcpp_parser_t *parser, int type, int ival); - -static token_list_t * -_token_list_create(glcpp_parser_t *parser); - -static void -_token_list_prepend(glcpp_parser_t *parser, token_list_t *list, token_t *token); - -static void -_token_list_append(glcpp_parser_t *parser, token_list_t *list, token_t *token); - -static void -_token_list_append_list(token_list_t *list, token_list_t *tail); - -static int -_token_list_equal_ignoring_space(token_list_t *a, token_list_t *b); - -static void -_parser_active_list_push(glcpp_parser_t *parser, const char *identifier, - token_node_t *marker); - -static void -_parser_active_list_pop(glcpp_parser_t *parser); - -static int -_parser_active_list_contains(glcpp_parser_t *parser, const char *identifier); - -typedef enum { - EXPANSION_MODE_IGNORE_DEFINED, - EXPANSION_MODE_EVALUATE_DEFINED -} expansion_mode_t; - -/* Expand list, and begin lexing from the result (after first - * prefixing a token of type 'head_token_type'). - */ -static void -_glcpp_parser_expand_and_lex_from(glcpp_parser_t *parser, int head_token_type, - token_list_t *list, expansion_mode_t mode); - -/* Perform macro expansion in-place on the given list. */ -static void -_glcpp_parser_expand_token_list(glcpp_parser_t *parser, token_list_t *list, - expansion_mode_t mode); - -static void -_glcpp_parser_print_expanded_token_list(glcpp_parser_t *parser, - token_list_t *list); - -static void -_glcpp_parser_skip_stack_push_if(glcpp_parser_t *parser, YYLTYPE *loc, - int condition); - -static void -_glcpp_parser_skip_stack_change_if(glcpp_parser_t *parser, YYLTYPE *loc, - const char *type, int condition); - -static void -_glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, YYLTYPE *loc); - -static void -_glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version, - const char *ident, bool explicitly_set); - -static int -glcpp_parser_lex(YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser); - -static void -glcpp_parser_lex_from(glcpp_parser_t *parser, token_list_t *list); - -struct define_include { - glcpp_parser_t *parser; - YYLTYPE *loc; -}; - -static void -glcpp_parser_copy_defines(const void *key, void *data, void *closure); - -static void -add_builtin_define(glcpp_parser_t *parser, const char *name, int value); - - -#line 254 "src/compiler/glsl/glcpp/glcpp-parse.c" - -# ifndef YY_CAST -# ifdef __cplusplus -# define YY_CAST(Type, Val) static_cast (Val) -# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) -# else -# define YY_CAST(Type, Val) ((Type) (Val)) -# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) -# endif -# endif -# ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# else -# define YY_NULLPTR ((void*)0) -# endif -# endif - -#include "glcpp-parse.h" -/* Symbol kind. */ -enum yysymbol_kind_t -{ - YYSYMBOL_YYEMPTY = -2, - YYSYMBOL_YYEOF = 0, /* "end of file" */ - YYSYMBOL_YYerror = 1, /* error */ - YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ - YYSYMBOL_DEFINED = 3, /* DEFINED */ - YYSYMBOL_ELIF_EXPANDED = 4, /* ELIF_EXPANDED */ - YYSYMBOL_HASH_TOKEN = 5, /* HASH_TOKEN */ - YYSYMBOL_DEFINE_TOKEN = 6, /* DEFINE_TOKEN */ - YYSYMBOL_FUNC_IDENTIFIER = 7, /* FUNC_IDENTIFIER */ - YYSYMBOL_OBJ_IDENTIFIER = 8, /* OBJ_IDENTIFIER */ - YYSYMBOL_ELIF = 9, /* ELIF */ - YYSYMBOL_ELSE = 10, /* ELSE */ - YYSYMBOL_ENDIF = 11, /* ENDIF */ - YYSYMBOL_ERROR_TOKEN = 12, /* ERROR_TOKEN */ - YYSYMBOL_IF = 13, /* IF */ - YYSYMBOL_IFDEF = 14, /* IFDEF */ - YYSYMBOL_IFNDEF = 15, /* IFNDEF */ - YYSYMBOL_LINE = 16, /* LINE */ - YYSYMBOL_PRAGMA = 17, /* PRAGMA */ - YYSYMBOL_UNDEF = 18, /* UNDEF */ - YYSYMBOL_VERSION_TOKEN = 19, /* VERSION_TOKEN */ - YYSYMBOL_GARBAGE = 20, /* GARBAGE */ - YYSYMBOL_IDENTIFIER = 21, /* IDENTIFIER */ - YYSYMBOL_IF_EXPANDED = 22, /* IF_EXPANDED */ - YYSYMBOL_INTEGER = 23, /* INTEGER */ - YYSYMBOL_INTEGER_STRING = 24, /* INTEGER_STRING */ - YYSYMBOL_LINE_EXPANDED = 25, /* LINE_EXPANDED */ - YYSYMBOL_NEWLINE = 26, /* NEWLINE */ - YYSYMBOL_OTHER = 27, /* OTHER */ - YYSYMBOL_PLACEHOLDER = 28, /* PLACEHOLDER */ - YYSYMBOL_SPACE = 29, /* SPACE */ - YYSYMBOL_PLUS_PLUS = 30, /* PLUS_PLUS */ - YYSYMBOL_MINUS_MINUS = 31, /* MINUS_MINUS */ - YYSYMBOL_PATH = 32, /* PATH */ - YYSYMBOL_INCLUDE = 33, /* INCLUDE */ - YYSYMBOL_PASTE = 34, /* PASTE */ - YYSYMBOL_OR = 35, /* OR */ - YYSYMBOL_AND = 36, /* AND */ - YYSYMBOL_37_ = 37, /* '|' */ - YYSYMBOL_38_ = 38, /* '^' */ - YYSYMBOL_39_ = 39, /* '&' */ - YYSYMBOL_EQUAL = 40, /* EQUAL */ - YYSYMBOL_NOT_EQUAL = 41, /* NOT_EQUAL */ - YYSYMBOL_42_ = 42, /* '<' */ - YYSYMBOL_43_ = 43, /* '>' */ - YYSYMBOL_LESS_OR_EQUAL = 44, /* LESS_OR_EQUAL */ - YYSYMBOL_GREATER_OR_EQUAL = 45, /* GREATER_OR_EQUAL */ - YYSYMBOL_LEFT_SHIFT = 46, /* LEFT_SHIFT */ - YYSYMBOL_RIGHT_SHIFT = 47, /* RIGHT_SHIFT */ - YYSYMBOL_48_ = 48, /* '+' */ - YYSYMBOL_49_ = 49, /* '-' */ - YYSYMBOL_50_ = 50, /* '*' */ - YYSYMBOL_51_ = 51, /* '/' */ - YYSYMBOL_52_ = 52, /* '%' */ - YYSYMBOL_UNARY = 53, /* UNARY */ - YYSYMBOL_54_ = 54, /* '(' */ - YYSYMBOL_55_ = 55, /* ')' */ - YYSYMBOL_56_ = 56, /* '!' */ - YYSYMBOL_57_ = 57, /* '~' */ - YYSYMBOL_58_ = 58, /* ',' */ - YYSYMBOL_59_ = 59, /* '[' */ - YYSYMBOL_60_ = 60, /* ']' */ - YYSYMBOL_61_ = 61, /* '{' */ - YYSYMBOL_62_ = 62, /* '}' */ - YYSYMBOL_63_ = 63, /* '.' */ - YYSYMBOL_64_ = 64, /* ';' */ - YYSYMBOL_65_ = 65, /* '=' */ - YYSYMBOL_YYACCEPT = 66, /* $accept */ - YYSYMBOL_input = 67, /* input */ - YYSYMBOL_line = 68, /* line */ - YYSYMBOL_expanded_line = 69, /* expanded_line */ - YYSYMBOL_define = 70, /* define */ - YYSYMBOL_control_line = 71, /* control_line */ - YYSYMBOL_control_line_success = 72, /* control_line_success */ - YYSYMBOL_73_1 = 73, /* $@1 */ - YYSYMBOL_74_2 = 74, /* $@2 */ - YYSYMBOL_control_line_error = 75, /* control_line_error */ - YYSYMBOL_integer_constant = 76, /* integer_constant */ - YYSYMBOL_version_constant = 77, /* version_constant */ - YYSYMBOL_expression = 78, /* expression */ - YYSYMBOL_identifier_list = 79, /* identifier_list */ - YYSYMBOL_text_line = 80, /* text_line */ - YYSYMBOL_replacement_list = 81, /* replacement_list */ - YYSYMBOL_junk = 82, /* junk */ - YYSYMBOL_pp_tokens = 83, /* pp_tokens */ - YYSYMBOL_preprocessing_token = 84, /* preprocessing_token */ - YYSYMBOL_operator = 85 /* operator */ -}; -typedef enum yysymbol_kind_t yysymbol_kind_t; - - - - -#ifdef short -# undef short -#endif - -/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure - and (if available) are included - so that the code can choose integer types of a good width. */ - -#ifndef __PTRDIFF_MAX__ -# include /* INFRINGES ON USER NAME SPACE */ -# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_STDINT_H -# endif -#endif - -/* Narrow types that promote to a signed type and that can represent a - signed or unsigned integer of at least N bits. In tables they can - save space and decrease cache pressure. Promoting to a signed type - helps avoid bugs in integer arithmetic. */ - -#ifdef __INT_LEAST8_MAX__ -typedef __INT_LEAST8_TYPE__ yytype_int8; -#elif defined YY_STDINT_H -typedef int_least8_t yytype_int8; -#else -typedef signed char yytype_int8; -#endif - -#ifdef __INT_LEAST16_MAX__ -typedef __INT_LEAST16_TYPE__ yytype_int16; -#elif defined YY_STDINT_H -typedef int_least16_t yytype_int16; -#else -typedef short yytype_int16; -#endif - -/* Work around bug in HP-UX 11.23, which defines these macros - incorrectly for preprocessor constants. This workaround can likely - be removed in 2023, as HPE has promised support for HP-UX 11.23 - (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of - . */ -#ifdef __hpux -# undef UINT_LEAST8_MAX -# undef UINT_LEAST16_MAX -# define UINT_LEAST8_MAX 255 -# define UINT_LEAST16_MAX 65535 -#endif - -#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST8_TYPE__ yytype_uint8; -#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST8_MAX <= INT_MAX) -typedef uint_least8_t yytype_uint8; -#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX -typedef unsigned char yytype_uint8; -#else -typedef short yytype_uint8; -#endif - -#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST16_TYPE__ yytype_uint16; -#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST16_MAX <= INT_MAX) -typedef uint_least16_t yytype_uint16; -#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX -typedef unsigned short yytype_uint16; -#else -typedef int yytype_uint16; -#endif - -#ifndef YYPTRDIFF_T -# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ -# define YYPTRDIFF_T __PTRDIFF_TYPE__ -# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ -# elif defined PTRDIFF_MAX -# ifndef ptrdiff_t -# include /* INFRINGES ON USER NAME SPACE */ -# endif -# define YYPTRDIFF_T ptrdiff_t -# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX -# else -# define YYPTRDIFF_T long -# define YYPTRDIFF_MAXIMUM LONG_MAX -# endif -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned -# endif -#endif - -#define YYSIZE_MAXIMUM \ - YY_CAST (YYPTRDIFF_T, \ - (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ - ? YYPTRDIFF_MAXIMUM \ - : YY_CAST (YYSIZE_T, -1))) - -#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) - - -/* Stored state numbers (used for stacks). */ -typedef yytype_uint8 yy_state_t; - -/* State numbers in computations. */ -typedef int yy_state_fast_t; - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - - -#ifndef YY_ATTRIBUTE_PURE -# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) -# else -# define YY_ATTRIBUTE_PURE -# endif -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -# else -# define YY_ATTRIBUTE_UNUSED -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YY_USE(E) ((void) (E)) -#else -# define YY_USE(E) /* empty */ -#endif - -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ -# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") -# else -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# endif -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ -# define YY_IGNORE_USELESS_CAST_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") -# define YY_IGNORE_USELESS_CAST_END \ - _Pragma ("GCC diagnostic pop") -#endif -#ifndef YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_END -#endif - - -#define YY_ASSERT(E) ((void) (0 && (E))) - -#if 1 - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* 1 */ - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ - && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yy_state_t yyss_alloc; - YYSTYPE yyvs_alloc; - YYLTYPE yyls_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ - + YYSIZEOF (YYLTYPE)) \ - + 2 * YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYPTRDIFF_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / YYSIZEOF (*yyptr); \ - } \ - while (0) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYPTRDIFF_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 2 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 731 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 66 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 20 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 116 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 185 - -/* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 298 - - -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - (0 <= (YYX) && (YYX) <= YYMAXUTOK \ - ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ - : YYSYMBOL_YYUNDEF) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ -static const yytype_int8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 56, 2, 2, 2, 52, 39, 2, - 54, 55, 50, 48, 58, 49, 63, 51, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 64, - 42, 65, 43, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 59, 2, 60, 38, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 61, 37, 62, 57, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 40, 41, 44, 45, 46, 47, 53 -}; - -#if YYDEBUG -/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_int16 yyrline[] = -{ - 0, 223, 223, 225, 229, 230, 231, 235, 239, 244, - 249, 254, 263, 273, 276, 279, 285, 288, 289, 302, - 303, 355, 429, 450, 460, 466, 472, 498, 518, 518, - 531, 531, 534, 540, 546, 549, 555, 558, 561, 567, - 571, 576, 587, 591, 598, 609, 620, 627, 634, 641, - 648, 655, 662, 669, 676, 683, 690, 697, 704, 711, - 723, 735, 742, 746, 750, 754, 758, 764, 768, 775, - 776, 780, 781, 784, 786, 797, 802, 809, 813, 817, - 821, 825, 829, 833, 840, 841, 842, 843, 844, 845, - 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, - 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 872 -}; -#endif - -/** Accessing symbol of state STATE. */ -#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) - -#if 1 -/* The user-facing name of the symbol whose (internal) number is - YYSYMBOL. No bounds checking. */ -static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; - -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "\"end of file\"", "error", "\"invalid token\"", "DEFINED", - "ELIF_EXPANDED", "HASH_TOKEN", "DEFINE_TOKEN", "FUNC_IDENTIFIER", - "OBJ_IDENTIFIER", "ELIF", "ELSE", "ENDIF", "ERROR_TOKEN", "IF", "IFDEF", - "IFNDEF", "LINE", "PRAGMA", "UNDEF", "VERSION_TOKEN", "GARBAGE", - "IDENTIFIER", "IF_EXPANDED", "INTEGER", "INTEGER_STRING", - "LINE_EXPANDED", "NEWLINE", "OTHER", "PLACEHOLDER", "SPACE", "PLUS_PLUS", - "MINUS_MINUS", "PATH", "INCLUDE", "PASTE", "OR", "AND", "'|'", "'^'", - "'&'", "EQUAL", "NOT_EQUAL", "'<'", "'>'", "LESS_OR_EQUAL", - "GREATER_OR_EQUAL", "LEFT_SHIFT", "RIGHT_SHIFT", "'+'", "'-'", "'*'", - "'/'", "'%'", "UNARY", "'('", "')'", "'!'", "'~'", "','", "'['", "']'", - "'{'", "'}'", "'.'", "';'", "'='", "$accept", "input", "line", - "expanded_line", "define", "control_line", "control_line_success", "$@1", - "$@2", "control_line_error", "integer_constant", "version_constant", - "expression", "identifier_list", "text_line", "replacement_list", "junk", - "pp_tokens", "preprocessing_token", "operator", YY_NULLPTR -}; - -static const char * -yysymbol_name (yysymbol_kind_t yysymbol) -{ - return yytname[yysymbol]; -} -#endif - -#define YYPACT_NINF (-145) - -#define yypact_value_is_default(Yyn) \ - ((Yyn) == YYPACT_NINF) - -#define YYTABLE_NINF (-1) - -#define yytable_value_is_error(Yyn) \ - 0 - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - -145, 105, -145, -145, -15, 4, -145, -15, -145, 45, - -145, -145, -2, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, 155, -145, -145, -145, -145, -145, -15, - -15, -15, -15, -15, -145, 545, 18, 205, -145, -145, - 1, 255, -10, 10, 505, 12, 19, 24, 505, -145, - 17, 572, 26, -145, -145, -145, -145, -145, -145, 590, - -145, -145, -145, -15, -15, -15, -15, -15, -15, -15, - -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, - -15, -3, 505, -145, -145, -145, 305, 48, 50, -145, - -145, 355, 505, 505, 405, -145, 53, -145, -14, 455, - -145, -145, -145, 60, 80, -145, 610, 626, 641, 655, - 668, 679, 679, 13, 13, 13, 13, 33, 33, -5, - -5, -145, -145, -145, -19, 85, 505, -145, -145, -145, - -145, 86, 505, 88, -145, -145, 89, -145, -145, -145, - -145, -145, 505, -26, -145, -145, -145, -145, 90, 505, - 96, -145, 92, -145, -145 -}; - -/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_int8 yydefact[] = -{ - 2, 0, 1, 81, 0, 0, 77, 0, 78, 0, - 69, 82, 83, 115, 116, 79, 114, 110, 109, 108, - 107, 91, 105, 106, 101, 102, 103, 104, 99, 100, - 93, 94, 92, 97, 98, 86, 87, 96, 95, 112, - 84, 85, 88, 89, 90, 111, 113, 3, 7, 4, - 16, 17, 6, 0, 75, 80, 43, 40, 39, 0, - 0, 0, 0, 0, 42, 0, 0, 0, 28, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, - 0, 0, 0, 5, 70, 83, 76, 65, 64, 0, - 62, 63, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 71, 37, 19, 27, 0, 0, 0, 36, - 23, 0, 73, 73, 0, 35, 0, 41, 0, 0, - 21, 8, 10, 0, 0, 66, 44, 45, 46, 47, - 48, 50, 49, 54, 53, 52, 51, 56, 55, 58, - 57, 61, 60, 59, 0, 0, 72, 26, 29, 31, - 22, 0, 74, 0, 18, 20, 0, 32, 38, 12, - 11, 67, 71, 0, 13, 24, 25, 33, 0, 71, - 0, 14, 0, 68, 15 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -145, -145, -145, -145, -145, 59, -145, -145, -145, -145, - -4, -145, -6, -145, -145, -144, 0, -1, -49, -145 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_uint8 yydefgoto[] = -{ - 0, 1, 47, 48, 114, 49, 50, 117, 118, 51, - 64, 128, 65, 173, 52, 155, 161, 156, 54, 55 -}; - -/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_uint8 yytable[] = -{ - 53, 81, 171, 5, 86, 82, 56, 166, 57, 58, - 66, 122, 167, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 111, 112, 119, 178, 179, - 79, 123, 180, 59, 60, 182, 172, 80, 125, 61, - 126, 62, 63, 130, 113, 108, 109, 110, 127, 57, - 58, 154, 132, 87, 88, 89, 90, 91, 133, 104, - 105, 106, 107, 108, 109, 110, 116, 86, 57, 58, - 121, 83, 86, 124, 158, 86, 159, 129, 134, 165, - 86, 106, 107, 108, 109, 110, 169, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 2, 170, 86, 3, 4, - 5, 174, 175, 86, 176, 177, 181, 183, 184, 0, - 0, 162, 162, 163, 0, 0, 6, 7, 0, 8, - 9, 10, 11, 0, 12, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 84, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 115, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 120, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 157, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 160, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 164, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 168, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 3, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 0, 0, 0, 0, 0, 6, 0, 0, 8, - 0, 0, 11, 0, 85, 13, 14, 15, 0, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 0, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 131, 0, - 0, 0, 0, 0, 0, 0, 0, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 0, 0, 135, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110 -}; - -static const yytype_int16 yycheck[] = -{ - 1, 7, 21, 5, 53, 9, 21, 21, 23, 24, - 6, 21, 26, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 7, 8, 26, 172, 55, - 26, 21, 58, 48, 49, 179, 55, 33, 26, 54, - 21, 56, 57, 26, 26, 50, 51, 52, 24, 23, - 24, 54, 26, 59, 60, 61, 62, 63, 32, 46, - 47, 48, 49, 50, 51, 52, 67, 116, 23, 24, - 71, 12, 121, 74, 26, 124, 26, 78, 82, 26, - 129, 48, 49, 50, 51, 52, 26, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 0, 26, 156, 3, 4, - 5, 26, 26, 162, 26, 26, 26, 21, 26, -1, - -1, 122, 123, 123, -1, -1, 21, 22, -1, 24, - 25, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, 26, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 3, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, -1, -1, -1, -1, -1, 21, -1, -1, 24, - -1, -1, 27, -1, 29, 30, 31, 32, -1, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, -1, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 26, -1, -1, -1, -1, -1, -1, -1, -1, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 26, -1, - -1, -1, -1, -1, -1, -1, -1, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, -1, -1, 55, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52 -}; - -/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of - state STATE-NUM. */ -static const yytype_int8 yystos[] = -{ - 0, 67, 0, 3, 4, 5, 21, 22, 24, 25, - 26, 27, 29, 30, 31, 32, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 68, 69, 71, - 72, 75, 80, 83, 84, 85, 21, 23, 24, 48, - 49, 54, 56, 57, 76, 78, 6, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, - 33, 78, 76, 71, 26, 29, 84, 78, 78, 78, - 78, 78, 26, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 7, 8, 26, 70, 26, 83, 73, 74, 26, - 26, 83, 21, 21, 83, 26, 21, 24, 77, 83, - 26, 26, 26, 32, 76, 55, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 54, 81, 83, 26, 26, 26, - 26, 82, 83, 82, 26, 26, 21, 26, 26, 26, - 26, 21, 55, 79, 26, 26, 26, 26, 81, 55, - 58, 26, 81, 21, 26 -}; - -/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ -static const yytype_int8 yyr1[] = -{ - 0, 66, 67, 67, 68, 68, 68, 68, 69, 69, - 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 73, 72, - 74, 72, 72, 72, 72, 72, 75, 75, 75, 76, - 76, 77, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 79, 79, 80, - 80, 81, 81, 82, 82, 83, 83, 84, 84, 84, - 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85 -}; - -/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ -static const yytype_int8 yyr2[] = -{ - 0, 2, 0, 2, 1, 2, 1, 1, 3, 3, - 3, 4, 4, 3, 5, 6, 1, 1, 4, 3, - 4, 3, 4, 3, 5, 5, 4, 3, 0, 4, - 0, 4, 4, 5, 2, 3, 3, 3, 4, 1, - 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 2, 2, 2, 2, 3, 1, 3, 1, - 2, 0, 1, 0, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1 -}; - - -enum { YYENOMEM = -2 }; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab -#define YYNOMEM goto yyexhaustedlab - - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (&yylloc, parser, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) - -/* Backward compatibility with an undocumented macro. - Use YYerror or YYUNDEF. */ -#define YYERRCODE YYUNDEF - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - - -/* YYLOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -# ifndef YYLOCATION_PRINT - -# if defined YY_LOCATION_PRINT - - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc)) - -# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - -/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ - -YY_ATTRIBUTE_UNUSED -static int -yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) -{ - int res = 0; - int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; - if (0 <= yylocp->first_line) - { - res += YYFPRINTF (yyo, "%d", yylocp->first_line); - if (0 <= yylocp->first_column) - res += YYFPRINTF (yyo, ".%d", yylocp->first_column); - } - if (0 <= yylocp->last_line) - { - if (yylocp->first_line < yylocp->last_line) - { - res += YYFPRINTF (yyo, "-%d", yylocp->last_line); - if (0 <= end_col) - res += YYFPRINTF (yyo, ".%d", end_col); - } - else if (0 <= end_col && yylocp->first_column < end_col) - res += YYFPRINTF (yyo, "-%d", end_col); - } - return res; -} - -# define YYLOCATION_PRINT yy_location_print_ - - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc)) - -# else - -# define YYLOCATION_PRINT(File, Loc) ((void) 0) - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YY_LOCATION_PRINT YYLOCATION_PRINT - -# endif -# endif /* !defined YYLOCATION_PRINT */ - - -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Kind, Value, Location, parser); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ - -static void -yy_symbol_value_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, glcpp_parser_t *parser) -{ - FILE *yyoutput = yyo; - YY_USE (yyoutput); - YY_USE (yylocationp); - YY_USE (parser); - if (!yyvaluep) - return; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ - -static void -yy_symbol_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, glcpp_parser_t *parser) -{ - YYFPRINTF (yyo, "%s %s (", - yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - - YYLOCATION_PRINT (yyo, yylocationp); - YYFPRINTF (yyo, ": "); - yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, parser); - YYFPRINTF (yyo, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -static void -yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -static void -yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, - int yyrule, glcpp_parser_t *parser) -{ - int yylno = yyrline[yyrule]; - int yynrhs = yyr2[yyrule]; - int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), - &yyvsp[(yyi + 1) - (yynrhs)], - &(yylsp[(yyi + 1) - (yynrhs)]), parser); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, yylsp, Rule, parser); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) ((void) 0) -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -/* Context of a parse error. */ -typedef struct -{ - yy_state_t *yyssp; - yysymbol_kind_t yytoken; - YYLTYPE *yylloc; -} yypcontext_t; - -/* Put in YYARG at most YYARGN of the expected tokens given the - current YYCTX, and return the number of tokens stored in YYARG. If - YYARG is null, return the number of expected tokens (guaranteed to - be less than YYNTOKENS). Return YYENOMEM on memory exhaustion. - Return 0 if there are more than YYARGN expected tokens, yet fill - YYARG up to YYARGN. */ -static int -yypcontext_expected_tokens (const yypcontext_t *yyctx, - yysymbol_kind_t yyarg[], int yyargn) -{ - /* Actual size of YYARG. */ - int yycount = 0; - int yyn = yypact[+*yyctx->yyssp]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (!yyarg) - ++yycount; - else if (yycount == yyargn) - return 0; - else - yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx); - } - } - if (yyarg && yycount == 0 && 0 < yyargn) - yyarg[0] = YYSYMBOL_YYEMPTY; - return yycount; -} - - - - -#ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) -# else -/* Return the length of YYSTR. */ -static YYPTRDIFF_T -yystrlen (const char *yystr) -{ - YYPTRDIFF_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -#endif - -#ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -#endif - -#ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYPTRDIFF_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYPTRDIFF_T yyn = 0; - char const *yyp = yystr; - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (yyres) - return yystpcpy (yyres, yystr) - yyres; - else - return yystrlen (yystr); -} -#endif - - -static int -yy_syntax_error_arguments (const yypcontext_t *yyctx, - yysymbol_kind_t yyarg[], int yyargn) -{ - /* Actual size of YYARG. */ - int yycount = 0; - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yyctx->yytoken != YYSYMBOL_YYEMPTY) - { - int yyn; - if (yyarg) - yyarg[yycount] = yyctx->yytoken; - ++yycount; - yyn = yypcontext_expected_tokens (yyctx, - yyarg ? yyarg + 1 : yyarg, yyargn - 1); - if (yyn == YYENOMEM) - return YYENOMEM; - else - yycount += yyn; - } - return yycount; -} - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return -1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return YYENOMEM if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, - const yypcontext_t *yyctx) -{ - enum { YYARGS_MAX = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat: reported tokens (one for the "unexpected", - one per "expected"). */ - yysymbol_kind_t yyarg[YYARGS_MAX]; - /* Cumulated lengths of YYARG. */ - YYPTRDIFF_T yysize = 0; - - /* Actual size of YYARG. */ - int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX); - if (yycount == YYENOMEM) - return YYENOMEM; - - switch (yycount) - { -#define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - default: /* Avoid compiler warnings. */ - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -#undef YYCASE_ - } - - /* Compute error message size. Don't count the "%s"s, but reserve - room for the terminator. */ - yysize = yystrlen (yyformat) - 2 * yycount + 1; - { - int yyi; - for (yyi = 0; yyi < yycount; ++yyi) - { - YYPTRDIFF_T yysize1 - = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return YYENOMEM; - } - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return -1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]); - yyformat += 2; - } - else - { - ++yyp; - ++yyformat; - } - } - return 0; -} - - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -static void -yydestruct (const char *yymsg, - yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, glcpp_parser_t *parser) -{ - YY_USE (yyvaluep); - YY_USE (yylocationp); - YY_USE (parser); - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - - - - - -/*----------. -| yyparse. | -`----------*/ - -int -yyparse (glcpp_parser_t *parser) -{ -/* Lookahead token kind. */ -int yychar; - - -/* The semantic value of the lookahead symbol. */ -/* Default value used for initialization, for pacifying older GCCs - or non-GCC compilers. */ -YY_INITIAL_VALUE (static YYSTYPE yyval_default;) -YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); - -/* Location data for the lookahead symbol. */ -static YYLTYPE yyloc_default -# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - = { 1, 1, 1, 1 } -# endif -; -YYLTYPE yylloc = yyloc_default; - - /* Number of syntax errors so far. */ - int yynerrs = 0; - - yy_state_fast_t yystate = 0; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus = 0; - - /* Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* Their size. */ - YYPTRDIFF_T yystacksize = YYINITDEPTH; - - /* The state stack: array, bottom, top. */ - yy_state_t yyssa[YYINITDEPTH]; - yy_state_t *yyss = yyssa; - yy_state_t *yyssp = yyss; - - /* The semantic value stack: array, bottom, top. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp = yyvs; - - /* The location stack: array, bottom, top. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp = yyls; - - int yyn; - /* The return value of yyparse. */ - int yyresult; - /* Lookahead symbol kind. */ - yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - YYLTYPE yyloc; - - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[3]; - - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yychar = YYEMPTY; /* Cause a token to be read. */ - - -/* User initialization code. */ -#line 183 "../src/compiler/glsl/glcpp/glcpp-parse.y" -{ - yylloc.first_line = 1; - yylloc.first_column = 1; - yylloc.last_line = 1; - yylloc.last_column = 1; - yylloc.source = 0; -} - -#line 1761 "src/compiler/glsl/glcpp/glcpp-parse.c" - - yylsp[0] = yylloc; - goto yysetstate; - - -/*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | -`------------------------------------------------------------*/ -yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - -/*--------------------------------------------------------------------. -| yysetstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - YY_IGNORE_USELESS_CAST_BEGIN - *yyssp = YY_CAST (yy_state_t, yystate); - YY_IGNORE_USELESS_CAST_END - YY_STACK_PRINT (yyss, yyssp); - - if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - YYNOMEM; -#else - { - /* Get the current used size of the three stacks, in elements. */ - YYPTRDIFF_T yysize = yyssp - yyss + 1; - -# if defined yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - yy_state_t *yyss1 = yyss; - YYSTYPE *yyvs1 = yyvs; - YYLTYPE *yyls1 = yyls; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * YYSIZEOF (*yyssp), - &yyvs1, yysize * YYSIZEOF (*yyvsp), - &yyls1, yysize * YYSIZEOF (*yylsp), - &yystacksize); - yyss = yyss1; - yyvs = yyvs1; - yyls = yyls1; - } -# else /* defined YYSTACK_RELOCATE */ - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - YYNOMEM; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yy_state_t *yyss1 = yyss; - union yyalloc *yyptr = - YY_CAST (union yyalloc *, - YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); - if (! yyptr) - YYNOMEM; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); - YYSTACK_RELOCATE (yyls_alloc, yyls); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - yylsp = yyls + yysize - 1; - - YY_IGNORE_USELESS_CAST_BEGIN - YYDPRINTF ((stderr, "Stack size increased to %ld\n", - YY_CAST (long, yystacksize))); - YY_IGNORE_USELESS_CAST_END - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token\n")); - yychar = yylex (&yylval, &yylloc, parser); - } - - if (yychar <= YYEOF) - { - yychar = YYEOF; - yytoken = YYSYMBOL_YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else if (yychar == YYerror) - { - /* The scanner already issued an error message, process directly - to error recovery. But do not keep the error token as - lookahead, it is too special and may lead us to an endless - loop in error recovery. */ - yychar = YYUNDEF; - yytoken = YYSYMBOL_YYerror; - yyerror_range[1] = yylloc; - goto yyerrlab1; - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - *++yylsp = yylloc; - - /* Discard the shifted token. */ - yychar = YYEMPTY; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - /* Default location. */ - YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); - yyerror_range[1] = yyloc; - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 6: /* line: text_line */ -#line 231 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - _glcpp_parser_print_expanded_token_list (parser, (yyvsp[0].token_list)); - _mesa_string_buffer_append_char(parser->output, '\n'); - } -#line 1977 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 8: /* expanded_line: IF_EXPANDED expression NEWLINE */ -#line 239 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if (parser->is_gles && (yyvsp[-1].expression_value).undefined_macro) - glcpp_error(& (yylsp[-2]), parser, "undefined macro %s in expression (illegal in GLES)", (yyvsp[-1].expression_value).undefined_macro); - _glcpp_parser_skip_stack_push_if (parser, & (yylsp[-2]), (yyvsp[-1].expression_value).value); - } -#line 1987 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 9: /* expanded_line: ELIF_EXPANDED expression NEWLINE */ -#line 244 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if (parser->is_gles && (yyvsp[-1].expression_value).undefined_macro) - glcpp_error(& (yylsp[-2]), parser, "undefined macro %s in expression (illegal in GLES)", (yyvsp[-1].expression_value).undefined_macro); - _glcpp_parser_skip_stack_change_if (parser, & (yylsp[-2]), "elif", (yyvsp[-1].expression_value).value); - } -#line 1997 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 10: /* expanded_line: LINE_EXPANDED integer_constant NEWLINE */ -#line 249 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - parser->has_new_line_number = 1; - parser->new_line_number = (yyvsp[-1].ival); - _mesa_string_buffer_printf(parser->output, "#line %" PRIiMAX "\n", (yyvsp[-1].ival)); - } -#line 2007 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 11: /* expanded_line: LINE_EXPANDED integer_constant integer_constant NEWLINE */ -#line 254 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - parser->has_new_line_number = 1; - parser->new_line_number = (yyvsp[-2].ival); - parser->has_new_source_number = 1; - parser->new_source_number = (yyvsp[-1].ival); - _mesa_string_buffer_printf(parser->output, - "#line %" PRIiMAX " %" PRIiMAX "\n", - (yyvsp[-2].ival), (yyvsp[-1].ival)); - } -#line 2021 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 12: /* expanded_line: LINE_EXPANDED integer_constant PATH NEWLINE */ -#line 263 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - parser->has_new_line_number = 1; - parser->new_line_number = (yyvsp[-2].ival); - _mesa_string_buffer_printf(parser->output, - "#line %" PRIiMAX " %s\n", - (yyvsp[-2].ival), (yyvsp[-1].str)); - } -#line 2033 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 13: /* define: OBJ_IDENTIFIER replacement_list NEWLINE */ -#line 273 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - _define_object_macro (parser, & (yylsp[-2]), (yyvsp[-2].str), (yyvsp[-1].token_list)); - } -#line 2041 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 14: /* define: FUNC_IDENTIFIER '(' ')' replacement_list NEWLINE */ -#line 276 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - _define_function_macro (parser, & (yylsp[-4]), (yyvsp[-4].str), NULL, (yyvsp[-1].token_list)); - } -#line 2049 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 15: /* define: FUNC_IDENTIFIER '(' identifier_list ')' replacement_list NEWLINE */ -#line 279 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - _define_function_macro (parser, & (yylsp[-5]), (yyvsp[-5].str), (yyvsp[-3].string_list), (yyvsp[-1].token_list)); - } -#line 2057 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 16: /* control_line: control_line_success */ -#line 285 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - _mesa_string_buffer_append_char(parser->output, '\n'); - } -#line 2065 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 18: /* control_line: HASH_TOKEN LINE pp_tokens NEWLINE */ -#line 289 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - - if (parser->skip_stack == NULL || - parser->skip_stack->type == SKIP_NO_SKIP) - { - _glcpp_parser_expand_and_lex_from (parser, - LINE_EXPANDED, (yyvsp[-1].token_list), - EXPANSION_MODE_IGNORE_DEFINED); - } - } -#line 2080 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 20: /* control_line_success: HASH_TOKEN UNDEF IDENTIFIER NEWLINE */ -#line 303 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - struct hash_entry *entry; - - /* Section 3.4 (Preprocessor) of the GLSL ES 3.00 spec says: - * - * It is an error to undefine or to redefine a built-in - * (pre-defined) macro name. - * - * The GLSL ES 1.00 spec does not contain this text, but - * dEQP's preprocess test in GLES2 checks for it. - * - * Section 3.3 (Preprocessor) revision 7, of the GLSL 4.50 - * spec says: - * - * By convention, all macro names containing two consecutive - * underscores ( __ ) are reserved for use by underlying - * software layers. Defining or undefining such a name - * in a shader does not itself result in an error, but may - * result in unintended behaviors that stem from having - * multiple definitions of the same name. All macro names - * prefixed with "GL_" (...) are also reseved, and defining - * such a name results in a compile-time error. - * - * The code below implements the same checks as GLSLang. - */ - if (strncmp("GL_", (yyvsp[-1].str), 3) == 0) - glcpp_error(& (yylsp[-3]), parser, "Built-in (pre-defined)" - " names beginning with GL_ cannot be undefined."); - else if (strstr((yyvsp[-1].str), "__") != NULL) { - if (parser->is_gles - && parser->version >= 300 - && (strcmp("__LINE__", (yyvsp[-1].str)) == 0 - || strcmp("__FILE__", (yyvsp[-1].str)) == 0 - || strcmp("__VERSION__", (yyvsp[-1].str)) == 0)) { - glcpp_error(& (yylsp[-3]), parser, "Built-in (pre-defined)" - " names cannot be undefined."); - } else if (parser->is_gles && parser->version <= 300) { - glcpp_error(& (yylsp[-3]), parser, - " names containing consecutive underscores" - " are reserved."); - } else { - glcpp_warning(& (yylsp[-3]), parser, - " names containing consecutive underscores" - " are reserved."); - } - } - - entry = _mesa_hash_table_search (parser->defines, (yyvsp[-1].str)); - if (entry) { - _mesa_hash_table_remove (parser->defines, entry); - } - } -#line 2137 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 21: /* control_line_success: HASH_TOKEN INCLUDE NEWLINE */ -#line 355 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - size_t include_cursor = _mesa_get_shader_include_cursor(parser->gl_ctx->Shared); - - /* Remove leading and trailing "" or <> */ - char *start = strchr((yyvsp[-1].str), '"'); - if (!start) { - _mesa_set_shader_include_cursor(parser->gl_ctx->Shared, 0); - start = strchr((yyvsp[-1].str), '<'); - } - char *path = strndup(start + 1, strlen(start + 1) - 1); - - const char *shader = - _mesa_lookup_shader_include(parser->gl_ctx, path, false); - free(path); - - if (!shader) - glcpp_error(&(yylsp[-2]), parser, "%s not found", (yyvsp[-1].str)); - else { - /* Create a temporary parser with the same settings */ - glcpp_parser_t *tmp_parser = - glcpp_parser_create(parser->gl_ctx, parser->extensions, parser->state); - tmp_parser->version_set = true; - tmp_parser->version = parser->version; - - /* Set the shader source and run the lexer */ - glcpp_lex_set_source_string(tmp_parser, shader); - - /* Copy any existing define macros to the temporary - * shade include parser. - */ - struct define_include di; - di.parser = tmp_parser; - di.loc = &(yylsp[-2]); - - hash_table_call_foreach(parser->defines, - glcpp_parser_copy_defines, - &di); - - /* Print out '#include' to the glsl parser. We do this - * so that it can do the error checking require to - * make sure the ARB_shading_language_include - * extension is enabled. - */ - _mesa_string_buffer_printf(parser->output, "#include\n"); - - /* Parse the include string before adding to the - * preprocessor output. - */ - glcpp_parser_parse(tmp_parser); - _mesa_string_buffer_printf(parser->info_log, "%s", - tmp_parser->info_log->buf); - _mesa_string_buffer_printf(parser->output, "%s", - tmp_parser->output->buf); - - /* Copy any new define macros to the parent parser - * and steal the memory of our temp parser so we don't - * free these new defines before they are no longer - * needed. - */ - di.parser = parser; - di.loc = &(yylsp[-2]); - ralloc_steal(parser, tmp_parser); - - hash_table_call_foreach(tmp_parser->defines, - glcpp_parser_copy_defines, - &di); - - /* Destroy tmp parser memory we no longer need */ - glcpp_lex_destroy(tmp_parser->scanner); - _mesa_hash_table_destroy(tmp_parser->defines, NULL); - } - - _mesa_set_shader_include_cursor(parser->gl_ctx->Shared, include_cursor); - } -#line 2216 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 22: /* control_line_success: HASH_TOKEN IF pp_tokens NEWLINE */ -#line 429 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - /* Be careful to only evaluate the 'if' expression if - * we are not skipping. When we are skipping, we - * simply push a new 0-valued 'if' onto the skip - * stack. - * - * This avoids generating diagnostics for invalid - * expressions that are being skipped. */ - if (parser->skip_stack == NULL || - parser->skip_stack->type == SKIP_NO_SKIP) - { - _glcpp_parser_expand_and_lex_from (parser, - IF_EXPANDED, (yyvsp[-1].token_list), - EXPANSION_MODE_EVALUATE_DEFINED); - } - else - { - _glcpp_parser_skip_stack_push_if (parser, & (yylsp[-3]), 0); - parser->skip_stack->type = SKIP_TO_ENDIF; - } - } -#line 2242 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 23: /* control_line_success: HASH_TOKEN IF NEWLINE */ -#line 450 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - /* #if without an expression is only an error if we - * are not skipping */ - if (parser->skip_stack == NULL || - parser->skip_stack->type == SKIP_NO_SKIP) - { - glcpp_error(& (yylsp[-2]), parser, "#if with no expression"); - } - _glcpp_parser_skip_stack_push_if (parser, & (yylsp[-2]), 0); - } -#line 2257 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 24: /* control_line_success: HASH_TOKEN IFDEF IDENTIFIER junk NEWLINE */ -#line 460 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - struct hash_entry *entry = - _mesa_hash_table_search(parser->defines, (yyvsp[-2].str)); - macro_t *macro = entry ? entry->data : NULL; - _glcpp_parser_skip_stack_push_if (parser, & (yylsp[-4]), macro != NULL); - } -#line 2268 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 25: /* control_line_success: HASH_TOKEN IFNDEF IDENTIFIER junk NEWLINE */ -#line 466 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - struct hash_entry *entry = - _mesa_hash_table_search(parser->defines, (yyvsp[-2].str)); - macro_t *macro = entry ? entry->data : NULL; - _glcpp_parser_skip_stack_push_if (parser, & (yylsp[-2]), macro == NULL); - } -#line 2279 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 26: /* control_line_success: HASH_TOKEN ELIF pp_tokens NEWLINE */ -#line 472 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - /* Be careful to only evaluate the 'elif' expression - * if we are not skipping. When we are skipping, we - * simply change to a 0-valued 'elif' on the skip - * stack. - * - * This avoids generating diagnostics for invalid - * expressions that are being skipped. */ - if (parser->skip_stack && - parser->skip_stack->type == SKIP_TO_ELSE) - { - _glcpp_parser_expand_and_lex_from (parser, - ELIF_EXPANDED, (yyvsp[-1].token_list), - EXPANSION_MODE_EVALUATE_DEFINED); - } - else if (parser->skip_stack && - parser->skip_stack->has_else) - { - glcpp_error(& (yylsp[-3]), parser, "#elif after #else"); - } - else - { - _glcpp_parser_skip_stack_change_if (parser, & (yylsp[-3]), - "elif", 0); - } - } -#line 2310 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 27: /* control_line_success: HASH_TOKEN ELIF NEWLINE */ -#line 498 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - /* #elif without an expression is an error unless we - * are skipping. */ - if (parser->skip_stack && - parser->skip_stack->type == SKIP_TO_ELSE) - { - glcpp_error(& (yylsp[-2]), parser, "#elif with no expression"); - } - else if (parser->skip_stack && - parser->skip_stack->has_else) - { - glcpp_error(& (yylsp[-2]), parser, "#elif after #else"); - } - else - { - _glcpp_parser_skip_stack_change_if (parser, & (yylsp[-2]), - "elif", 0); - glcpp_warning(& (yylsp[-2]), parser, "ignoring illegal #elif without expression"); - } - } -#line 2335 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 28: /* $@1: %empty */ -#line 518 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { parser->lexing_directive = 1; } -#line 2341 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 29: /* control_line_success: HASH_TOKEN ELSE $@1 NEWLINE */ -#line 518 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if (parser->skip_stack && - parser->skip_stack->has_else) - { - glcpp_error(& (yylsp[-3]), parser, "multiple #else"); - } - else - { - _glcpp_parser_skip_stack_change_if (parser, & (yylsp[-3]), "else", 1); - if (parser->skip_stack) - parser->skip_stack->has_else = true; - } - } -#line 2359 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 30: /* $@2: %empty */ -#line 531 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - _glcpp_parser_skip_stack_pop (parser, & (yylsp[-1])); - } -#line 2367 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 32: /* control_line_success: HASH_TOKEN VERSION_TOKEN version_constant NEWLINE */ -#line 534 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if (parser->version_set) { - glcpp_error(& (yylsp[-3]), parser, "#version must appear on the first line"); - } - _glcpp_parser_handle_version_declaration(parser, (yyvsp[-1].ival), NULL, true); - } -#line 2378 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 33: /* control_line_success: HASH_TOKEN VERSION_TOKEN version_constant IDENTIFIER NEWLINE */ -#line 540 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if (parser->version_set) { - glcpp_error(& (yylsp[-4]), parser, "#version must appear on the first line"); - } - _glcpp_parser_handle_version_declaration(parser, (yyvsp[-2].ival), (yyvsp[-1].str), true); - } -#line 2389 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 34: /* control_line_success: HASH_TOKEN NEWLINE */ -#line 546 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - glcpp_parser_resolve_implicit_version(parser); - } -#line 2397 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 35: /* control_line_success: HASH_TOKEN PRAGMA NEWLINE */ -#line 549 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - _mesa_string_buffer_printf(parser->output, "#%s", (yyvsp[-1].str)); - } -#line 2405 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 36: /* control_line_error: HASH_TOKEN ERROR_TOKEN NEWLINE */ -#line 555 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - glcpp_error(& (yylsp[-2]), parser, "#%s", (yyvsp[-1].str)); - } -#line 2413 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 37: /* control_line_error: HASH_TOKEN DEFINE_TOKEN NEWLINE */ -#line 558 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - glcpp_error (& (yylsp[-2]), parser, "#define without macro name"); - } -#line 2421 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 38: /* control_line_error: HASH_TOKEN GARBAGE pp_tokens NEWLINE */ -#line 561 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - glcpp_error (& (yylsp[-3]), parser, "Illegal non-directive after #"); - } -#line 2429 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 39: /* integer_constant: INTEGER_STRING */ -#line 567 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - /* let strtoll detect the base */ - (yyval.ival) = strtoll ((yyvsp[0].str), NULL, 0); - } -#line 2438 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 40: /* integer_constant: INTEGER */ -#line 571 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.ival) = (yyvsp[0].ival); - } -#line 2446 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 41: /* version_constant: INTEGER_STRING */ -#line 576 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - /* Both octal and hexadecimal constants begin with 0. */ - if ((yyvsp[0].str)[0] == '0' && (yyvsp[0].str)[1] != '\0') { - glcpp_error(&(yylsp[0]), parser, "invalid #version \"%s\" (not a decimal constant)", (yyvsp[0].str)); - (yyval.ival) = 0; - } else { - (yyval.ival) = strtoll((yyvsp[0].str), NULL, 10); - } - } -#line 2460 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 42: /* expression: integer_constant */ -#line 587 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[0].ival); - (yyval.expression_value).undefined_macro = NULL; - } -#line 2469 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 43: /* expression: IDENTIFIER */ -#line 591 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = 0; - if (parser->is_gles) - (yyval.expression_value).undefined_macro = linear_strdup(parser->linalloc, (yyvsp[0].str)); - else - (yyval.expression_value).undefined_macro = NULL; - } -#line 2481 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 44: /* expression: expression OR expression */ -#line 598 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value || (yyvsp[0].expression_value).value; - - /* Short-circuit: Only flag undefined from right side - * if left side evaluates to false. - */ - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else if (! (yyvsp[-2].expression_value).value) - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2497 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 45: /* expression: expression AND expression */ -#line 609 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value && (yyvsp[0].expression_value).value; - - /* Short-circuit: Only flag undefined from right-side - * if left side evaluates to true. - */ - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else if ((yyvsp[-2].expression_value).value) - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2513 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 46: /* expression: expression '|' expression */ -#line 620 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value | (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2525 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 47: /* expression: expression '^' expression */ -#line 627 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value ^ (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2537 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 48: /* expression: expression '&' expression */ -#line 634 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value & (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2549 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 49: /* expression: expression NOT_EQUAL expression */ -#line 641 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value != (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2561 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 50: /* expression: expression EQUAL expression */ -#line 648 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value == (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2573 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 51: /* expression: expression GREATER_OR_EQUAL expression */ -#line 655 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value >= (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2585 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 52: /* expression: expression LESS_OR_EQUAL expression */ -#line 662 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value <= (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2597 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 53: /* expression: expression '>' expression */ -#line 669 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value > (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2609 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 54: /* expression: expression '<' expression */ -#line 676 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value < (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2621 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 55: /* expression: expression RIGHT_SHIFT expression */ -#line 683 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value >> (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2633 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 56: /* expression: expression LEFT_SHIFT expression */ -#line 690 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value << (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2645 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 57: /* expression: expression '-' expression */ -#line 697 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value - (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2657 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 58: /* expression: expression '+' expression */ -#line 704 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value + (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2669 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 59: /* expression: expression '%' expression */ -#line 711 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if ((yyvsp[0].expression_value).value == 0) { - yyerror (& (yylsp[-2]), parser, - "zero modulus in preprocessor directive"); - } else { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value % (yyvsp[0].expression_value).value; - } - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2686 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 60: /* expression: expression '/' expression */ -#line 723 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if ((yyvsp[0].expression_value).value == 0) { - yyerror (& (yylsp[-2]), parser, - "division by 0 in preprocessor directive"); - } else { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value / (yyvsp[0].expression_value).value; - } - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2703 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 61: /* expression: expression '*' expression */ -#line 735 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = (yyvsp[-2].expression_value).value * (yyvsp[0].expression_value).value; - if ((yyvsp[-2].expression_value).undefined_macro) - (yyval.expression_value).undefined_macro = (yyvsp[-2].expression_value).undefined_macro; - else - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2715 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 62: /* expression: '!' expression */ -#line 742 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = ! (yyvsp[0].expression_value).value; - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2724 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 63: /* expression: '~' expression */ -#line 746 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = ~ (yyvsp[0].expression_value).value; - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2733 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 64: /* expression: '-' expression */ -#line 750 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = - (yyvsp[0].expression_value).value; - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2742 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 65: /* expression: '+' expression */ -#line 754 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value).value = + (yyvsp[0].expression_value).value; - (yyval.expression_value).undefined_macro = (yyvsp[0].expression_value).undefined_macro; - } -#line 2751 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 66: /* expression: '(' expression ')' */ -#line 758 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.expression_value) = (yyvsp[-1].expression_value); - } -#line 2759 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 67: /* identifier_list: IDENTIFIER */ -#line 764 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.string_list) = _string_list_create (parser); - _string_list_append_item (parser, (yyval.string_list), (yyvsp[0].str)); - } -#line 2768 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 68: /* identifier_list: identifier_list ',' IDENTIFIER */ -#line 768 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.string_list) = (yyvsp[-2].string_list); - _string_list_append_item (parser, (yyval.string_list), (yyvsp[0].str)); - } -#line 2777 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 69: /* text_line: NEWLINE */ -#line 775 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.token_list) = NULL; } -#line 2783 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 71: /* replacement_list: %empty */ -#line 780 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.token_list) = NULL; } -#line 2789 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 74: /* junk: pp_tokens */ -#line 786 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - if (parser->gl_ctx->Const.AllowExtraPPTokens) - glcpp_warning(&(yylsp[0]), parser, "extra tokens at end of directive"); - else - glcpp_error(&(yylsp[0]), parser, "extra tokens at end of directive"); - - (void)yynerrs; - } -#line 2802 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 75: /* pp_tokens: preprocessing_token */ -#line 797 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - parser->space_tokens = 1; - (yyval.token_list) = _token_list_create (parser); - _token_list_append (parser, (yyval.token_list), (yyvsp[0].token)); - } -#line 2812 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 76: /* pp_tokens: pp_tokens preprocessing_token */ -#line 802 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token_list) = (yyvsp[-1].token_list); - _token_list_append (parser, (yyval.token_list), (yyvsp[0].token)); - } -#line 2821 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 77: /* preprocessing_token: IDENTIFIER */ -#line 809 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token) = _token_create_str (parser, IDENTIFIER, (yyvsp[0].str)); - (yyval.token)->location = yylloc; - } -#line 2830 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 78: /* preprocessing_token: INTEGER_STRING */ -#line 813 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token) = _token_create_str (parser, INTEGER_STRING, (yyvsp[0].str)); - (yyval.token)->location = yylloc; - } -#line 2839 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 79: /* preprocessing_token: PATH */ -#line 817 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token) = _token_create_str (parser, PATH, (yyvsp[0].str)); - (yyval.token)->location = yylloc; - } -#line 2848 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 80: /* preprocessing_token: operator */ -#line 821 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token) = _token_create_ival (parser, (yyvsp[0].ival), (yyvsp[0].ival)); - (yyval.token)->location = yylloc; - } -#line 2857 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 81: /* preprocessing_token: DEFINED */ -#line 825 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token) = _token_create_ival (parser, DEFINED, DEFINED); - (yyval.token)->location = yylloc; - } -#line 2866 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 82: /* preprocessing_token: OTHER */ -#line 829 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token) = _token_create_str (parser, OTHER, (yyvsp[0].str)); - (yyval.token)->location = yylloc; - } -#line 2875 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 83: /* preprocessing_token: SPACE */ -#line 833 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { - (yyval.token) = _token_create_ival (parser, SPACE, SPACE); - (yyval.token)->location = yylloc; - } -#line 2884 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 84: /* operator: '[' */ -#line 840 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '['; } -#line 2890 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 85: /* operator: ']' */ -#line 841 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = ']'; } -#line 2896 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 86: /* operator: '(' */ -#line 842 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '('; } -#line 2902 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 87: /* operator: ')' */ -#line 843 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = ')'; } -#line 2908 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 88: /* operator: '{' */ -#line 844 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '{'; } -#line 2914 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 89: /* operator: '}' */ -#line 845 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '}'; } -#line 2920 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 90: /* operator: '.' */ -#line 846 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '.'; } -#line 2926 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 91: /* operator: '&' */ -#line 847 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '&'; } -#line 2932 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 92: /* operator: '*' */ -#line 848 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '*'; } -#line 2938 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 93: /* operator: '+' */ -#line 849 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '+'; } -#line 2944 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 94: /* operator: '-' */ -#line 850 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '-'; } -#line 2950 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 95: /* operator: '~' */ -#line 851 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '~'; } -#line 2956 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 96: /* operator: '!' */ -#line 852 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '!'; } -#line 2962 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 97: /* operator: '/' */ -#line 853 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '/'; } -#line 2968 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 98: /* operator: '%' */ -#line 854 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '%'; } -#line 2974 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 99: /* operator: LEFT_SHIFT */ -#line 855 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = LEFT_SHIFT; } -#line 2980 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 100: /* operator: RIGHT_SHIFT */ -#line 856 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = RIGHT_SHIFT; } -#line 2986 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 101: /* operator: '<' */ -#line 857 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '<'; } -#line 2992 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 102: /* operator: '>' */ -#line 858 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '>'; } -#line 2998 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 103: /* operator: LESS_OR_EQUAL */ -#line 859 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = LESS_OR_EQUAL; } -#line 3004 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 104: /* operator: GREATER_OR_EQUAL */ -#line 860 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = GREATER_OR_EQUAL; } -#line 3010 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 105: /* operator: EQUAL */ -#line 861 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = EQUAL; } -#line 3016 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 106: /* operator: NOT_EQUAL */ -#line 862 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = NOT_EQUAL; } -#line 3022 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 107: /* operator: '^' */ -#line 863 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '^'; } -#line 3028 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 108: /* operator: '|' */ -#line 864 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '|'; } -#line 3034 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 109: /* operator: AND */ -#line 865 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = AND; } -#line 3040 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 110: /* operator: OR */ -#line 866 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = OR; } -#line 3046 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 111: /* operator: ';' */ -#line 867 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = ';'; } -#line 3052 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 112: /* operator: ',' */ -#line 868 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = ','; } -#line 3058 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 113: /* operator: '=' */ -#line 869 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = '='; } -#line 3064 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 114: /* operator: PASTE */ -#line 870 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = PASTE; } -#line 3070 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 115: /* operator: PLUS_PLUS */ -#line 871 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = PLUS_PLUS; } -#line 3076 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - case 116: /* operator: MINUS_MINUS */ -#line 872 "../src/compiler/glsl/glcpp/glcpp-parse.y" - { (yyval.ival) = MINUS_MINUS; } -#line 3082 "src/compiler/glsl/glcpp/glcpp-parse.c" - break; - - -#line 3086 "src/compiler/glsl/glcpp/glcpp-parse.c" - - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - - *++yyvsp = yyval; - *++yylsp = yyloc; - - /* Now 'shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } - - goto yynewstate; - - -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; - { - yypcontext_t yyctx - = {yyssp, yytoken, &yylloc}; - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == -1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = YY_CAST (char *, - YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); - if (yymsg) - { - yysyntax_error_status - = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); - yymsgp = yymsg; - } - else - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = YYENOMEM; - } - } - yyerror (&yylloc, parser, yymsgp); - if (yysyntax_error_status == YYENOMEM) - YYNOMEM; - } - } - - yyerror_range[1] = yylloc; - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval, &yylloc, parser); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; - ++yynerrs; - - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - /* Pop stack until we find a state that shifts the error token. */ - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYSYMBOL_YYerror; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - yyerror_range[1] = *yylsp; - yydestruct ("Error: popping", - YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, parser); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - yyerror_range[2] = yylloc; - ++yylsp; - YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturnlab; - - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturnlab; - - -/*-----------------------------------------------------------. -| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | -`-----------------------------------------------------------*/ -yyexhaustedlab: - yyerror (&yylloc, parser, YY_("memory exhausted")); - yyresult = 2; - goto yyreturnlab; - - -/*----------------------------------------------------------. -| yyreturnlab -- parsing is finished, clean up and return. | -`----------------------------------------------------------*/ -yyreturnlab: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, &yylloc, parser); - } - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, parser); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - return yyresult; -} - -#line 875 "../src/compiler/glsl/glcpp/glcpp-parse.y" - - -string_list_t * -_string_list_create(glcpp_parser_t *parser) -{ - string_list_t *list; - - list = linear_alloc_child(parser->linalloc, sizeof(string_list_t)); - list->head = NULL; - list->tail = NULL; - - return list; -} - -void -_string_list_append_item(glcpp_parser_t *parser, string_list_t *list, - const char *str) -{ - string_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(string_node_t)); - node->str = linear_strdup(parser->linalloc, str); - - node->next = NULL; - - if (list->head == NULL) { - list->head = node; - } else { - list->tail->next = node; - } - - list->tail = node; -} - -int -_string_list_contains(string_list_t *list, const char *member, int *index) -{ - string_node_t *node; - int i; - - if (list == NULL) - return 0; - - for (i = 0, node = list->head; node; i++, node = node->next) { - if (strcmp (node->str, member) == 0) { - if (index) - *index = i; - return 1; - } - } - - return 0; -} - -/* Return duplicate string in list (if any), NULL otherwise. */ -const char * -_string_list_has_duplicate(string_list_t *list) -{ - string_node_t *node, *dup; - - if (list == NULL) - return NULL; - - for (node = list->head; node; node = node->next) { - for (dup = node->next; dup; dup = dup->next) { - if (strcmp (node->str, dup->str) == 0) - return node->str; - } - } - - return NULL; -} - -int -_string_list_length(string_list_t *list) -{ - int length = 0; - string_node_t *node; - - if (list == NULL) - return 0; - - for (node = list->head; node; node = node->next) - length++; - - return length; -} - -int -_string_list_equal(string_list_t *a, string_list_t *b) -{ - string_node_t *node_a, *node_b; - - if (a == NULL && b == NULL) - return 1; - - if (a == NULL || b == NULL) - return 0; - - for (node_a = a->head, node_b = b->head; - node_a && node_b; - node_a = node_a->next, node_b = node_b->next) - { - if (strcmp (node_a->str, node_b->str)) - return 0; - } - - /* Catch the case of lists being different lengths, (which - * would cause the loop above to terminate after the shorter - * list). */ - return node_a == node_b; -} - -argument_list_t * -_argument_list_create(glcpp_parser_t *parser) -{ - argument_list_t *list; - - list = linear_alloc_child(parser->linalloc, sizeof(argument_list_t)); - list->head = NULL; - list->tail = NULL; - - return list; -} - -void -_argument_list_append(glcpp_parser_t *parser, - argument_list_t *list, token_list_t *argument) -{ - argument_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(argument_node_t)); - node->argument = argument; - - node->next = NULL; - - if (list->head == NULL) { - list->head = node; - } else { - list->tail->next = node; - } - - list->tail = node; -} - -int -_argument_list_length(argument_list_t *list) -{ - int length = 0; - argument_node_t *node; - - if (list == NULL) - return 0; - - for (node = list->head; node; node = node->next) - length++; - - return length; -} - -token_list_t * -_argument_list_member_at(argument_list_t *list, int index) -{ - argument_node_t *node; - int i; - - if (list == NULL) - return NULL; - - node = list->head; - for (i = 0; i < index; i++) { - node = node->next; - if (node == NULL) - break; - } - - if (node) - return node->argument; - - return NULL; -} - -token_t * -_token_create_str(glcpp_parser_t *parser, int type, char *str) -{ - token_t *token; - - token = linear_alloc_child(parser->linalloc, sizeof(token_t)); - token->type = type; - token->value.str = str; - token->expanding = false; - - return token; -} - -token_t * -_token_create_ival(glcpp_parser_t *parser, int type, int ival) -{ - token_t *token; - - token = linear_alloc_child(parser->linalloc, sizeof(token_t)); - token->type = type; - token->value.ival = ival; - token->expanding = false; - - return token; -} - -token_list_t * -_token_list_create(glcpp_parser_t *parser) -{ - token_list_t *list; - - list = linear_alloc_child(parser->linalloc, sizeof(token_list_t)); - list->head = NULL; - list->tail = NULL; - list->non_space_tail = NULL; - - return list; -} - -void -_token_list_prepend(glcpp_parser_t *parser, token_list_t *list, token_t *token) -{ - token_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); - node->token = token; - node->next = list->head; - - list->head = node; -} - -void -_token_list_append(glcpp_parser_t *parser, token_list_t *list, token_t *token) -{ - token_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); - node->token = token; - node->next = NULL; - - if (list->head == NULL) { - list->head = node; - } else { - list->tail->next = node; - } - - list->tail = node; - if (token->type != SPACE) - list->non_space_tail = node; -} - -void -_token_list_append_list(token_list_t *list, token_list_t *tail) -{ - if (tail == NULL || tail->head == NULL) - return; - - if (list->head == NULL) { - list->head = tail->head; - } else { - list->tail->next = tail->head; - } - - list->tail = tail->tail; - list->non_space_tail = tail->non_space_tail; -} - -static token_list_t * -_token_list_copy(glcpp_parser_t *parser, token_list_t *other) -{ - token_list_t *copy; - token_node_t *node; - - if (other == NULL) - return NULL; - - copy = _token_list_create (parser); - for (node = other->head; node; node = node->next) { - token_t *new_token = linear_alloc_child(parser->linalloc, sizeof(token_t)); - *new_token = *node->token; - _token_list_append (parser, copy, new_token); - } - - return copy; -} - -static void -_token_list_trim_trailing_space(token_list_t *list) -{ - if (list->non_space_tail) { - list->non_space_tail->next = NULL; - list->tail = list->non_space_tail; - } -} - -static int -_token_list_is_empty_ignoring_space(token_list_t *l) -{ - token_node_t *n; - - if (l == NULL) - return 1; - - n = l->head; - while (n != NULL && n->token->type == SPACE) - n = n->next; - - return n == NULL; -} - -int -_token_list_equal_ignoring_space(token_list_t *a, token_list_t *b) -{ - token_node_t *node_a, *node_b; - - if (a == NULL || b == NULL) { - int a_empty = _token_list_is_empty_ignoring_space(a); - int b_empty = _token_list_is_empty_ignoring_space(b); - return a_empty == b_empty; - } - - node_a = a->head; - node_b = b->head; - - while (1) - { - if (node_a == NULL && node_b == NULL) - break; - - /* Ignore trailing whitespace */ - if (node_a == NULL && node_b->token->type == SPACE) { - while (node_b && node_b->token->type == SPACE) - node_b = node_b->next; - } - - if (node_a == NULL && node_b == NULL) - break; - - if (node_b == NULL && node_a->token->type == SPACE) { - while (node_a && node_a->token->type == SPACE) - node_a = node_a->next; - } - - if (node_a == NULL && node_b == NULL) - break; - - if (node_a == NULL || node_b == NULL) - return 0; - /* Make sure whitespace appears in the same places in both. - * It need not be exactly the same amount of whitespace, - * though. - */ - if (node_a->token->type == SPACE && node_b->token->type == SPACE) { - while (node_a && node_a->token->type == SPACE) - node_a = node_a->next; - while (node_b && node_b->token->type == SPACE) - node_b = node_b->next; - continue; - } - - if (node_a->token->type != node_b->token->type) - return 0; - - switch (node_a->token->type) { - case INTEGER: - if (node_a->token->value.ival != node_b->token->value.ival) { - return 0; - } - break; - case IDENTIFIER: - case INTEGER_STRING: - case OTHER: - if (strcmp(node_a->token->value.str, node_b->token->value.str)) { - return 0; - } - break; - } - - node_a = node_a->next; - node_b = node_b->next; - } - - return 1; -} - -static void -_token_print(struct _mesa_string_buffer *out, token_t *token) -{ - if (token->type < 256) { - _mesa_string_buffer_append_char(out, token->type); - return; - } - - switch (token->type) { - case INTEGER: - _mesa_string_buffer_printf(out, "%" PRIiMAX, token->value.ival); - break; - case IDENTIFIER: - case INTEGER_STRING: - case PATH: - case OTHER: - _mesa_string_buffer_append(out, token->value.str); - break; - case SPACE: - _mesa_string_buffer_append_char(out, ' '); - break; - case LEFT_SHIFT: - _mesa_string_buffer_append(out, "<<"); - break; - case RIGHT_SHIFT: - _mesa_string_buffer_append(out, ">>"); - break; - case LESS_OR_EQUAL: - _mesa_string_buffer_append(out, "<="); - break; - case GREATER_OR_EQUAL: - _mesa_string_buffer_append(out, ">="); - break; - case EQUAL: - _mesa_string_buffer_append(out, "=="); - break; - case NOT_EQUAL: - _mesa_string_buffer_append(out, "!="); - break; - case AND: - _mesa_string_buffer_append(out, "&&"); - break; - case OR: - _mesa_string_buffer_append(out, "||"); - break; - case PASTE: - _mesa_string_buffer_append(out, "##"); - break; - case PLUS_PLUS: - _mesa_string_buffer_append(out, "++"); - break; - case MINUS_MINUS: - _mesa_string_buffer_append(out, "--"); - break; - case DEFINED: - _mesa_string_buffer_append(out, "defined"); - break; - case PLACEHOLDER: - /* Nothing to print. */ - break; - default: - assert(!"Error: Don't know how to print token."); - - break; - } -} - -/* Return a new token formed by pasting 'token' and 'other'. Note that this - * function may return 'token' or 'other' directly rather than allocating - * anything new. - * - * Caution: Only very cursory error-checking is performed to see if - * the final result is a valid single token. */ -static token_t * -_token_paste(glcpp_parser_t *parser, token_t *token, token_t *other) -{ - token_t *combined = NULL; - - /* Pasting a placeholder onto anything makes no change. */ - if (other->type == PLACEHOLDER) - return token; - - /* When 'token' is a placeholder, just return 'other'. */ - if (token->type == PLACEHOLDER) - return other; - - /* A very few single-character punctuators can be combined - * with another to form a multi-character punctuator. */ - switch (token->type) { - case '<': - if (other->type == '<') - combined = _token_create_ival (parser, LEFT_SHIFT, LEFT_SHIFT); - else if (other->type == '=') - combined = _token_create_ival (parser, LESS_OR_EQUAL, LESS_OR_EQUAL); - break; - case '>': - if (other->type == '>') - combined = _token_create_ival (parser, RIGHT_SHIFT, RIGHT_SHIFT); - else if (other->type == '=') - combined = _token_create_ival (parser, GREATER_OR_EQUAL, GREATER_OR_EQUAL); - break; - case '=': - if (other->type == '=') - combined = _token_create_ival (parser, EQUAL, EQUAL); - break; - case '!': - if (other->type == '=') - combined = _token_create_ival (parser, NOT_EQUAL, NOT_EQUAL); - break; - case '&': - if (other->type == '&') - combined = _token_create_ival (parser, AND, AND); - break; - case '|': - if (other->type == '|') - combined = _token_create_ival (parser, OR, OR); - break; - } - - if (combined != NULL) { - /* Inherit the location from the first token */ - combined->location = token->location; - return combined; - } - - /* Two string-valued (or integer) tokens can usually just be - * mashed together. (We also handle a string followed by an - * integer here as well.) - * - * There are some exceptions here. Notably, if the first token - * is an integer (or a string representing an integer), then - * the second token must also be an integer or must be a - * string representing an integer that begins with a digit. - */ - if ((token->type == IDENTIFIER || token->type == OTHER || token->type == INTEGER_STRING || token->type == INTEGER) && - (other->type == IDENTIFIER || other->type == OTHER || other->type == INTEGER_STRING || other->type == INTEGER)) - { - char *str; - int combined_type; - - /* Check that pasting onto an integer doesn't create a - * non-integer, (that is, only digits can be - * pasted. */ - if (token->type == INTEGER_STRING || token->type == INTEGER) { - switch (other->type) { - case INTEGER_STRING: - if (other->value.str[0] < '0' || other->value.str[0] > '9') - goto FAIL; - break; - case INTEGER: - if (other->value.ival < 0) - goto FAIL; - break; - default: - goto FAIL; - } - } - - if (token->type == INTEGER) - str = linear_asprintf(parser->linalloc, "%" PRIiMAX, token->value.ival); - else - str = linear_strdup(parser->linalloc, token->value.str); - - if (other->type == INTEGER) - linear_asprintf_append(parser->linalloc, &str, "%" PRIiMAX, other->value.ival); - else - linear_strcat(parser->linalloc, &str, other->value.str); - - /* New token is same type as original token, unless we - * started with an integer, in which case we will be - * creating an integer-string. */ - combined_type = token->type; - if (combined_type == INTEGER) - combined_type = INTEGER_STRING; - - combined = _token_create_str (parser, combined_type, str); - combined->location = token->location; - return combined; - } - - FAIL: - glcpp_error (&token->location, parser, ""); - _mesa_string_buffer_append(parser->info_log, "Pasting \""); - _token_print(parser->info_log, token); - _mesa_string_buffer_append(parser->info_log, "\" and \""); - _token_print(parser->info_log, other); - _mesa_string_buffer_append(parser->info_log, "\" does not give a valid preprocessing token.\n"); - - return token; -} - -static void -_token_list_print(glcpp_parser_t *parser, token_list_t *list) -{ - token_node_t *node; - - if (list == NULL) - return; - - for (node = list->head; node; node = node->next) - _token_print(parser->output, node->token); -} - -void -yyerror(YYLTYPE *locp, glcpp_parser_t *parser, const char *error) -{ - glcpp_error(locp, parser, "%s", error); -} - -static void -add_builtin_define(glcpp_parser_t *parser, const char *name, int value) -{ - token_t *tok; - token_list_t *list; - - tok = _token_create_ival (parser, INTEGER, value); - - list = _token_list_create(parser); - _token_list_append(parser, list, tok); - _define_object_macro(parser, NULL, name, list); -} - -/* Initial output buffer size, 4096 minus ralloc() overhead. It was selected - * to minimize total amount of allocated memory during shader-db run. - */ -#define INITIAL_PP_OUTPUT_BUF_SIZE 4048 - -glcpp_parser_t * -glcpp_parser_create(struct gl_context *gl_ctx, - glcpp_extension_iterator extensions, void *state) -{ - glcpp_parser_t *parser; - - parser = ralloc (NULL, glcpp_parser_t); - - glcpp_lex_init_extra (parser, &parser->scanner); - parser->defines = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - parser->linalloc = linear_alloc_parent(parser, 0); - parser->active = NULL; - parser->lexing_directive = 0; - parser->lexing_version_directive = 0; - parser->space_tokens = 1; - parser->last_token_was_newline = 0; - parser->last_token_was_space = 0; - parser->first_non_space_token_this_line = 1; - parser->newline_as_space = 0; - parser->in_control_line = 0; - parser->paren_count = 0; - parser->commented_newlines = 0; - - parser->skip_stack = NULL; - parser->skipping = 0; - - parser->lex_from_list = NULL; - parser->lex_from_node = NULL; - - parser->output = _mesa_string_buffer_create(parser, - INITIAL_PP_OUTPUT_BUF_SIZE); - parser->info_log = _mesa_string_buffer_create(parser, - INITIAL_PP_OUTPUT_BUF_SIZE); - parser->error = 0; - - parser->gl_ctx = gl_ctx; - parser->extensions = extensions; - parser->extension_list = &gl_ctx->Extensions; - parser->state = state; - parser->api = gl_ctx->API; - parser->version = 0; - parser->version_set = false; - - parser->has_new_line_number = 0; - parser->new_line_number = 1; - parser->has_new_source_number = 0; - parser->new_source_number = 0; - - parser->is_gles = false; - - return parser; -} - -void -glcpp_parser_destroy(glcpp_parser_t *parser) -{ - glcpp_lex_destroy (parser->scanner); - _mesa_hash_table_destroy(parser->defines, NULL); - ralloc_free (parser); -} - -typedef enum function_status -{ - FUNCTION_STATUS_SUCCESS, - FUNCTION_NOT_A_FUNCTION, - FUNCTION_UNBALANCED_PARENTHESES -} function_status_t; - -/* Find a set of function-like macro arguments by looking for a - * balanced set of parentheses. - * - * When called, 'node' should be the opening-parenthesis token, (or - * perhaps preceeding SPACE tokens). Upon successful return *last will - * be the last consumed node, (corresponding to the closing right - * parenthesis). - * - * Return values: - * - * FUNCTION_STATUS_SUCCESS: - * - * Successfully parsed a set of function arguments. - * - * FUNCTION_NOT_A_FUNCTION: - * - * Macro name not followed by a '('. This is not an error, but - * simply that the macro name should be treated as a non-macro. - * - * FUNCTION_UNBALANCED_PARENTHESES - * - * Macro name is not followed by a balanced set of parentheses. - */ -static function_status_t -_arguments_parse(glcpp_parser_t *parser, - argument_list_t *arguments, token_node_t *node, - token_node_t **last) -{ - token_list_t *argument; - int paren_count; - - node = node->next; - - /* Ignore whitespace before first parenthesis. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL || node->token->type != '(') - return FUNCTION_NOT_A_FUNCTION; - - node = node->next; - - argument = _token_list_create (parser); - _argument_list_append (parser, arguments, argument); - - for (paren_count = 1; node; node = node->next) { - if (node->token->type == '(') { - paren_count++; - } else if (node->token->type == ')') { - paren_count--; - if (paren_count == 0) - break; - } - - if (node->token->type == ',' && paren_count == 1) { - _token_list_trim_trailing_space (argument); - argument = _token_list_create (parser); - _argument_list_append (parser, arguments, argument); - } else { - if (argument->head == NULL) { - /* Don't treat initial whitespace as part of the argument. */ - if (node->token->type == SPACE) - continue; - } - _token_list_append(parser, argument, node->token); - } - } - - if (paren_count) - return FUNCTION_UNBALANCED_PARENTHESES; - - *last = node; - - return FUNCTION_STATUS_SUCCESS; -} - -static token_list_t * -_token_list_create_with_one_ival(glcpp_parser_t *parser, int type, int ival) -{ - token_list_t *list; - token_t *node; - - list = _token_list_create(parser); - node = _token_create_ival(parser, type, ival); - _token_list_append(parser, list, node); - - return list; -} - -static token_list_t * -_token_list_create_with_one_space(glcpp_parser_t *parser) -{ - return _token_list_create_with_one_ival(parser, SPACE, SPACE); -} - -static token_list_t * -_token_list_create_with_one_integer(glcpp_parser_t *parser, int ival) -{ - return _token_list_create_with_one_ival(parser, INTEGER, ival); -} - -/* Evaluate a DEFINED token node (based on subsequent tokens in the list). - * - * Note: This function must only be called when "node" is a DEFINED token, - * (and will abort with an assertion failure otherwise). - * - * If "node" is followed, (ignoring any SPACE tokens), by an IDENTIFIER token - * (optionally preceded and followed by '(' and ')' tokens) then the following - * occurs: - * - * If the identifier is a defined macro, this function returns 1. - * - * If the identifier is not a defined macro, this function returns 0. - * - * In either case, *last will be updated to the last node in the list - * consumed by the evaluation, (either the token of the identifier or the - * token of the closing parenthesis). - * - * In all other cases, (such as "node is the final node of the list", or - * "missing closing parenthesis", etc.), this function generates a - * preprocessor error, returns -1 and *last will not be set. - */ -static int -_glcpp_parser_evaluate_defined(glcpp_parser_t *parser, token_node_t *node, - token_node_t **last) -{ - token_node_t *argument, *defined = node; - - assert(node->token->type == DEFINED); - - node = node->next; - - /* Ignore whitespace after DEFINED token. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL) - goto FAIL; - - if (node->token->type == IDENTIFIER || node->token->type == OTHER) { - argument = node; - } else if (node->token->type == '(') { - node = node->next; - - /* Ignore whitespace after '(' token. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL || (node->token->type != IDENTIFIER && - node->token->type != OTHER)) { - goto FAIL; - } - - argument = node; - - node = node->next; - - /* Ignore whitespace after identifier, before ')' token. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL || node->token->type != ')') - goto FAIL; - } else { - goto FAIL; - } - - *last = node; - - return _mesa_hash_table_search(parser->defines, - argument->token->value.str) ? 1 : 0; - -FAIL: - glcpp_error (&defined->token->location, parser, - "\"defined\" not followed by an identifier"); - return -1; -} - -/* Evaluate all DEFINED nodes in a given list, modifying the list in place. - */ -static void -_glcpp_parser_evaluate_defined_in_list(glcpp_parser_t *parser, - token_list_t *list) -{ - token_node_t *node, *node_prev, *replacement, *last = NULL; - int value; - - if (list == NULL) - return; - - node_prev = NULL; - node = list->head; - - while (node) { - - if (node->token->type != DEFINED) - goto NEXT; - - value = _glcpp_parser_evaluate_defined (parser, node, &last); - if (value == -1) - goto NEXT; - - replacement = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); - replacement->token = _token_create_ival (parser, INTEGER, value); - - /* Splice replacement node into list, replacing from "node" - * through "last". */ - if (node_prev) - node_prev->next = replacement; - else - list->head = replacement; - replacement->next = last->next; - if (last == list->tail) - list->tail = replacement; - - node = replacement; - - NEXT: - node_prev = node; - node = node->next; - } -} - -/* Perform macro expansion on 'list', placing the resulting tokens - * into a new list which is initialized with a first token of type - * 'head_token_type'. Then begin lexing from the resulting list, - * (return to the current lexing source when this list is exhausted). - * - * See the documentation of _glcpp_parser_expand_token_list for a description - * of the "mode" parameter. - */ -static void -_glcpp_parser_expand_and_lex_from(glcpp_parser_t *parser, int head_token_type, - token_list_t *list, expansion_mode_t mode) -{ - token_list_t *expanded; - token_t *token; - - expanded = _token_list_create (parser); - token = _token_create_ival (parser, head_token_type, head_token_type); - _token_list_append (parser, expanded, token); - _glcpp_parser_expand_token_list (parser, list, mode); - _token_list_append_list (expanded, list); - glcpp_parser_lex_from (parser, expanded); -} - -static void -_glcpp_parser_apply_pastes(glcpp_parser_t *parser, token_list_t *list) -{ - token_node_t *node; - - node = list->head; - while (node) { - token_node_t *next_non_space; - - /* Look ahead for a PASTE token, skipping space. */ - next_non_space = node->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) - break; - - if (next_non_space->token->type != PASTE) { - node = next_non_space; - continue; - } - - /* Now find the next non-space token after the PASTE. */ - next_non_space = next_non_space->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) { - yyerror(&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); - return; - } - - node->token = _token_paste(parser, node->token, next_non_space->token); - node->next = next_non_space->next; - if (next_non_space == list->tail) - list->tail = node; - } - - list->non_space_tail = list->tail; -} - -/* This is a helper function that's essentially part of the - * implementation of _glcpp_parser_expand_node. It shouldn't be called - * except for by that function. - * - * Returns NULL if node is a simple token with no expansion, (that is, - * although 'node' corresponds to an identifier defined as a - * function-like macro, it is not followed with a parenthesized - * argument list). - * - * Compute the complete expansion of node (which is a function-like - * macro) and subsequent nodes which are arguments. - * - * Returns the token list that results from the expansion and sets - * *last to the last node in the list that was consumed by the - * expansion. Specifically, *last will be set as follows: as the - * token of the closing right parenthesis. - * - * See the documentation of _glcpp_parser_expand_token_list for a description - * of the "mode" parameter. - */ -static token_list_t * -_glcpp_parser_expand_function(glcpp_parser_t *parser, token_node_t *node, - token_node_t **last, expansion_mode_t mode) -{ - struct hash_entry *entry; - macro_t *macro; - const char *identifier; - argument_list_t *arguments; - function_status_t status; - token_list_t *substituted; - int parameter_index; - - identifier = node->token->value.str; - - entry = _mesa_hash_table_search(parser->defines, identifier); - macro = entry ? entry->data : NULL; - - assert(macro->is_function); - - arguments = _argument_list_create(parser); - status = _arguments_parse(parser, arguments, node, last); - - switch (status) { - case FUNCTION_STATUS_SUCCESS: - break; - case FUNCTION_NOT_A_FUNCTION: - return NULL; - case FUNCTION_UNBALANCED_PARENTHESES: - glcpp_error(&node->token->location, parser, "Macro %s call has unbalanced parentheses\n", identifier); - return NULL; - } - - /* Replace a macro defined as empty with a SPACE token. */ - if (macro->replacements == NULL) { - return _token_list_create_with_one_space(parser); - } - - if (!((_argument_list_length (arguments) == - _string_list_length (macro->parameters)) || - (_string_list_length (macro->parameters) == 0 && - _argument_list_length (arguments) == 1 && - arguments->head->argument->head == NULL))) { - glcpp_error(&node->token->location, parser, - "Error: macro %s invoked with %d arguments (expected %d)\n", - identifier, _argument_list_length (arguments), - _string_list_length(macro->parameters)); - return NULL; - } - - /* Perform argument substitution on the replacement list. */ - substituted = _token_list_create(parser); - - for (node = macro->replacements->head; node; node = node->next) { - if (node->token->type == IDENTIFIER && - _string_list_contains(macro->parameters, node->token->value.str, - ¶meter_index)) { - token_list_t *argument; - argument = _argument_list_member_at(arguments, parameter_index); - /* Before substituting, we expand the argument tokens, or append a - * placeholder token for an empty argument. */ - if (argument->head) { - token_list_t *expanded_argument; - expanded_argument = _token_list_copy(parser, argument); - _glcpp_parser_expand_token_list(parser, expanded_argument, mode); - _token_list_append_list(substituted, expanded_argument); - } else { - token_t *new_token; - - new_token = _token_create_ival(parser, PLACEHOLDER, - PLACEHOLDER); - _token_list_append(parser, substituted, new_token); - } - } else { - _token_list_append(parser, substituted, node->token); - } - } - - /* After argument substitution, and before further expansion - * below, implement token pasting. */ - - _token_list_trim_trailing_space(substituted); - - _glcpp_parser_apply_pastes(parser, substituted); - - return substituted; -} - -/* Compute the complete expansion of node, (and subsequent nodes after - * 'node' in the case that 'node' is a function-like macro and - * subsequent nodes are arguments). - * - * Returns NULL if node is a simple token with no expansion. - * - * Otherwise, returns the token list that results from the expansion - * and sets *last to the last node in the list that was consumed by - * the expansion. Specifically, *last will be set as follows: - * - * As 'node' in the case of object-like macro expansion. - * - * As the token of the closing right parenthesis in the case of - * function-like macro expansion. - * - * See the documentation of _glcpp_parser_expand_token_list for a description - * of the "mode" parameter. - */ -static token_list_t * -_glcpp_parser_expand_node(glcpp_parser_t *parser, token_node_t *node, - token_node_t *node_prev, token_node_t **last, - expansion_mode_t mode, int line) -{ - token_t *token = node->token; - const char *identifier; - struct hash_entry *entry; - macro_t *macro; - - /* If token is already being expanded return to avoid an infinite loop */ - if (token->expanding) - return NULL; - - /* We only expand identifiers */ - if (token->type != IDENTIFIER) { - return NULL; - } - - *last = node; - identifier = token->value.str; - - /* Special handling for __LINE__ and __FILE__, (not through - * the hash table). */ - if (*identifier == '_') { - if (strcmp(identifier, "__LINE__") == 0) - return _token_list_create_with_one_integer(parser, line); - - if (strcmp(identifier, "__FILE__") == 0) - return _token_list_create_with_one_integer(parser, - node->token->location.source); - } - - /* Look up this identifier in the hash table. */ - entry = _mesa_hash_table_search(parser->defines, identifier); - macro = entry ? entry->data : NULL; - - /* Not a macro, so no expansion needed. */ - if (macro == NULL) - return NULL; - - /* Finally, don't expand this macro if we're already actively - * expanding it, (to avoid infinite recursion). */ - if (_parser_active_list_contains (parser, identifier)) { - /* We change the `expanding` bool to true to prevent any - * future expansion of this unexpanded token. */ - char *str; - token_list_t *expansion; - token_t *final; - - str = linear_strdup(parser->linalloc, token->value.str); - final = _token_create_str(parser, token->type, str); - final->expanding = true; - expansion = _token_list_create(parser); - _token_list_append(parser, expansion, final); - return expansion; - } - - if (! macro->is_function) { - token_list_t *replacement; - - /* Replace a macro defined as empty with a SPACE token. */ - if (macro->replacements == NULL) - return _token_list_create_with_one_space(parser); - - replacement = _token_list_copy(parser, macro->replacements); - - /* If needed insert space in front of replacements to isolate them from - * the code they will be inserted into. For example: - * - * #define VALUE -1.0 - * int a = -VALUE; - * - * Should be evaluated to int a = - -1.0; not int a = --1.0; - */ - if (node_prev && - (node_prev->token->type == '-' || node_prev->token->type == '+') && - node_prev->token->type == replacement->head->token->type) { - token_t *new_token = _token_create_ival(parser, SPACE, SPACE); - _token_list_prepend(parser, replacement, new_token); - } - - _glcpp_parser_apply_pastes(parser, replacement); - return replacement; - } - - return _glcpp_parser_expand_function(parser, node, last, mode); -} - -/* Push a new identifier onto the parser's active list. - * - * Here, 'marker' is the token node that appears in the list after the - * expansion of 'identifier'. That is, when the list iterator begins - * examining 'marker', then it is time to pop this node from the - * active stack. - */ -static void -_parser_active_list_push(glcpp_parser_t *parser, const char *identifier, - token_node_t *marker) -{ - active_list_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(active_list_t)); - node->identifier = linear_strdup(parser->linalloc, identifier); - node->marker = marker; - node->next = parser->active; - - parser->active = node; -} - -static void -_parser_active_list_pop(glcpp_parser_t *parser) -{ - active_list_t *node = parser->active; - - if (node == NULL) { - parser->active = NULL; - return; - } - - node = parser->active->next; - parser->active = node; -} - -static int -_parser_active_list_contains(glcpp_parser_t *parser, const char *identifier) -{ - active_list_t *node; - - if (parser->active == NULL) - return 0; - - for (node = parser->active; node; node = node->next) - if (strcmp(node->identifier, identifier) == 0) - return 1; - - return 0; -} - -/* Walk over the token list replacing nodes with their expansion. - * Whenever nodes are expanded the walking will walk over the new - * nodes, continuing to expand as necessary. The results are placed in - * 'list' itself. - * - * The "mode" argument controls the handling of any DEFINED tokens that - * result from expansion as follows: - * - * EXPANSION_MODE_IGNORE_DEFINED: Any resulting DEFINED tokens will be - * left in the final list, unevaluated. This is the correct mode - * for expanding any list in any context other than a - * preprocessor conditional, (#if or #elif). - * - * EXPANSION_MODE_EVALUATE_DEFINED: Any resulting DEFINED tokens will be - * evaluated to 0 or 1 tokens depending on whether the following - * token is the name of a defined macro. If the DEFINED token is - * not followed by an (optionally parenthesized) identifier, then - * an error will be generated. This the correct mode for - * expanding any list in the context of a preprocessor - * conditional, (#if or #elif). - */ -static void -_glcpp_parser_expand_token_list(glcpp_parser_t *parser, token_list_t *list, - expansion_mode_t mode) -{ - token_node_t *node_prev; - token_node_t *node, *last = NULL; - token_list_t *expansion; - active_list_t *active_initial = parser->active; - int line; - - if (list == NULL) - return; - - _token_list_trim_trailing_space (list); - - line = list->tail->token->location.last_line; - - node_prev = NULL; - node = list->head; - - if (mode == EXPANSION_MODE_EVALUATE_DEFINED) - _glcpp_parser_evaluate_defined_in_list (parser, list); - - while (node) { - - while (parser->active && parser->active->marker == node) - _parser_active_list_pop (parser); - - expansion = - _glcpp_parser_expand_node(parser, node, node_prev, &last, mode, line); - if (expansion) { - token_node_t *n; - - if (mode == EXPANSION_MODE_EVALUATE_DEFINED) { - _glcpp_parser_evaluate_defined_in_list (parser, expansion); - } - - for (n = node; n != last->next; n = n->next) - while (parser->active && parser->active->marker == n) { - _parser_active_list_pop (parser); - } - - _parser_active_list_push(parser, node->token->value.str, last->next); - - /* Splice expansion into list, supporting a simple deletion if the - * expansion is empty. - */ - if (expansion->head) { - if (node_prev) - node_prev->next = expansion->head; - else - list->head = expansion->head; - expansion->tail->next = last->next; - if (last == list->tail) - list->tail = expansion->tail; - } else { - if (node_prev) - node_prev->next = last->next; - else - list->head = last->next; - if (last == list->tail) - list->tail = NULL; - } - } else { - node_prev = node; - } - node = node_prev ? node_prev->next : list->head; - } - - /* Remove any lingering effects of this invocation on the - * active list. That is, pop until the list looks like it did - * at the beginning of this function. */ - while (parser->active && parser->active != active_initial) - _parser_active_list_pop (parser); - - list->non_space_tail = list->tail; -} - -void -_glcpp_parser_print_expanded_token_list(glcpp_parser_t *parser, - token_list_t *list) -{ - if (list == NULL) - return; - - _glcpp_parser_expand_token_list (parser, list, EXPANSION_MODE_IGNORE_DEFINED); - - _token_list_trim_trailing_space (list); - - _token_list_print (parser, list); -} - -static void -_check_for_reserved_macro_name(glcpp_parser_t *parser, YYLTYPE *loc, - const char *identifier) -{ - /* Section 3.3 (Preprocessor) of the GLSL 1.30 spec (and later) and - * the GLSL ES spec (all versions) say: - * - * "All macro names containing two consecutive underscores ( __ ) - * are reserved for future use as predefined macro names. All - * macro names prefixed with "GL_" ("GL" followed by a single - * underscore) are also reserved." - * - * The intention is that names containing __ are reserved for internal - * use by the implementation, and names prefixed with GL_ are reserved - * for use by Khronos. Since every extension adds a name prefixed - * with GL_ (i.e., the name of the extension), that should be an - * error. Names simply containing __ are dangerous to use, but should - * be allowed. - * - * A future version of the GLSL specification will clarify this. - */ - if (strstr(identifier, "__")) { - glcpp_warning(loc, parser, "Macro names containing \"__\" are reserved " - "for use by the implementation.\n"); - } - if (strncmp(identifier, "GL_", 3) == 0) { - glcpp_error (loc, parser, "Macro names starting with \"GL_\" are reserved.\n"); - } - if (strcmp(identifier, "defined") == 0) { - glcpp_error (loc, parser, "\"defined\" cannot be used as a macro name"); - } -} - -static int -_macro_equal(macro_t *a, macro_t *b) -{ - if (a->is_function != b->is_function) - return 0; - - if (a->is_function) { - if (! _string_list_equal (a->parameters, b->parameters)) - return 0; - } - - return _token_list_equal_ignoring_space(a->replacements, b->replacements); -} - -void -_define_object_macro(glcpp_parser_t *parser, YYLTYPE *loc, - const char *identifier, token_list_t *replacements) -{ - macro_t *macro, *previous; - struct hash_entry *entry; - - /* We define pre-defined macros before we've started parsing the actual - * file. So if there's no location defined yet, that's what were doing and - * we don't want to generate an error for using the reserved names. */ - if (loc != NULL) - _check_for_reserved_macro_name(parser, loc, identifier); - - macro = linear_alloc_child(parser->linalloc, sizeof(macro_t)); - - macro->is_function = 0; - macro->parameters = NULL; - macro->identifier = linear_strdup(parser->linalloc, identifier); - macro->replacements = replacements; - - entry = _mesa_hash_table_search(parser->defines, identifier); - previous = entry ? entry->data : NULL; - if (previous) { - if (_macro_equal (macro, previous)) { - return; - } - glcpp_error (loc, parser, "Redefinition of macro %s\n", identifier); - } - - _mesa_hash_table_insert (parser->defines, identifier, macro); -} - -void -_define_function_macro(glcpp_parser_t *parser, YYLTYPE *loc, - const char *identifier, string_list_t *parameters, - token_list_t *replacements) -{ - macro_t *macro, *previous; - struct hash_entry *entry; - const char *dup; - - _check_for_reserved_macro_name(parser, loc, identifier); - - /* Check for any duplicate parameter names. */ - if ((dup = _string_list_has_duplicate (parameters)) != NULL) { - glcpp_error (loc, parser, "Duplicate macro parameter \"%s\"", dup); - } - - macro = linear_alloc_child(parser->linalloc, sizeof(macro_t)); - - macro->is_function = 1; - macro->parameters = parameters; - macro->identifier = linear_strdup(parser->linalloc, identifier); - macro->replacements = replacements; - - entry = _mesa_hash_table_search(parser->defines, identifier); - previous = entry ? entry->data : NULL; - if (previous) { - if (_macro_equal (macro, previous)) { - return; - } - glcpp_error (loc, parser, "Redefinition of macro %s\n", identifier); - } - - _mesa_hash_table_insert(parser->defines, identifier, macro); -} - -static int -glcpp_parser_lex(YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser) -{ - token_node_t *node; - int ret; - - if (parser->lex_from_list == NULL) { - ret = glcpp_lex(yylval, yylloc, parser->scanner); - - /* XXX: This ugly block of code exists for the sole - * purpose of converting a NEWLINE token into a SPACE - * token, but only in the case where we have seen a - * function-like macro name, but have not yet seen its - * closing parenthesis. - * - * There's perhaps a more compact way to do this with - * mid-rule actions in the grammar. - * - * I'm definitely not pleased with the complexity of - * this code here. - */ - if (parser->newline_as_space) { - if (ret == '(') { - parser->paren_count++; - } else if (ret == ')') { - parser->paren_count--; - if (parser->paren_count == 0) - parser->newline_as_space = 0; - } else if (ret == NEWLINE) { - ret = SPACE; - } else if (ret != SPACE) { - if (parser->paren_count == 0) - parser->newline_as_space = 0; - } - } else if (parser->in_control_line) { - if (ret == NEWLINE) - parser->in_control_line = 0; - } - else if (ret == DEFINE_TOKEN || ret == UNDEF || ret == IF || - ret == IFDEF || ret == IFNDEF || ret == ELIF || ret == ELSE || - ret == ENDIF || ret == HASH_TOKEN) { - parser->in_control_line = 1; - } else if (ret == IDENTIFIER) { - struct hash_entry *entry = _mesa_hash_table_search(parser->defines, - yylval->str); - macro_t *macro = entry ? entry->data : NULL; - if (macro && macro->is_function) { - parser->newline_as_space = 1; - parser->paren_count = 0; - } - } - - return ret; - } - - node = parser->lex_from_node; - - if (node == NULL) { - parser->lex_from_list = NULL; - return NEWLINE; - } - - *yylval = node->token->value; - ret = node->token->type; - - parser->lex_from_node = node->next; - - return ret; -} - -static void -glcpp_parser_lex_from(glcpp_parser_t *parser, token_list_t *list) -{ - token_node_t *node; - - assert (parser->lex_from_list == NULL); - - /* Copy list, eliminating any space tokens. */ - parser->lex_from_list = _token_list_create (parser); - - for (node = list->head; node; node = node->next) { - if (node->token->type == SPACE) - continue; - _token_list_append (parser, parser->lex_from_list, node->token); - } - - parser->lex_from_node = parser->lex_from_list->head; - - /* It's possible the list consisted of nothing but whitespace. */ - if (parser->lex_from_node == NULL) { - parser->lex_from_list = NULL; - } -} - -static void -_glcpp_parser_skip_stack_push_if(glcpp_parser_t *parser, YYLTYPE *loc, - int condition) -{ - skip_type_t current = SKIP_NO_SKIP; - skip_node_t *node; - - if (parser->skip_stack) - current = parser->skip_stack->type; - - node = linear_alloc_child(parser->linalloc, sizeof(skip_node_t)); - node->loc = *loc; - - if (current == SKIP_NO_SKIP) { - if (condition) - node->type = SKIP_NO_SKIP; - else - node->type = SKIP_TO_ELSE; - } else { - node->type = SKIP_TO_ENDIF; - } - - node->has_else = false; - node->next = parser->skip_stack; - parser->skip_stack = node; -} - -static void -_glcpp_parser_skip_stack_change_if(glcpp_parser_t *parser, YYLTYPE *loc, - const char *type, int condition) -{ - if (parser->skip_stack == NULL) { - glcpp_error (loc, parser, "#%s without #if\n", type); - return; - } - - if (parser->skip_stack->type == SKIP_TO_ELSE) { - if (condition) - parser->skip_stack->type = SKIP_NO_SKIP; - } else { - parser->skip_stack->type = SKIP_TO_ENDIF; - } -} - -static void -_glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, YYLTYPE *loc) -{ - skip_node_t *node; - - if (parser->skip_stack == NULL) { - glcpp_error (loc, parser, "#endif without #if\n"); - return; - } - - node = parser->skip_stack; - parser->skip_stack = node->next; -} - -static void -_glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version, - const char *identifier, - bool explicitly_set) -{ - if (parser->version_set) - return; - - parser->version = version; - parser->version_set = true; - - add_builtin_define (parser, "__VERSION__", version); - - parser->is_gles = (version == 100) || - (identifier && (strcmp(identifier, "es") == 0)); - bool is_compat = version >= 150 && identifier && - strcmp(identifier, "compatibility") == 0; - - /* Add pre-defined macros. */ - if (parser->is_gles) - add_builtin_define(parser, "GL_ES", 1); - else if (is_compat) - add_builtin_define(parser, "GL_compatibility_profile", 1); - else if (version >= 150) - add_builtin_define(parser, "GL_core_profile", 1); - - /* Currently, all ES2/ES3 implementations support highp in the - * fragment shader, so we always define this macro in ES2/ES3. - * If we ever get a driver that doesn't support highp, we'll - * need to add a flag to the gl_context and check that here. - */ - if (version >= 130 || parser->is_gles) - add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1); - - /* Add all the extension macros available in this context */ - if (parser->extensions) - parser->extensions(parser->state, add_builtin_define, parser, - version, parser->is_gles); - - if (parser->extension_list) { - /* If MESA_shader_integer_functions is supported, then the building - * blocks required for the 64x64 => 64 multiply exist. Add defines for - * those functions so that they can be tested. - */ - if (parser->extension_list->MESA_shader_integer_functions) { - add_builtin_define(parser, "__have_builtin_builtin_udiv64", 1); - add_builtin_define(parser, "__have_builtin_builtin_umod64", 1); - add_builtin_define(parser, "__have_builtin_builtin_idiv64", 1); - add_builtin_define(parser, "__have_builtin_builtin_imod64", 1); - } - } - - if (explicitly_set) { - _mesa_string_buffer_printf(parser->output, - "#version %" PRIiMAX "%s%s", version, - identifier ? " " : "", - identifier ? identifier : ""); - } -} - -/* GLSL version if no version is explicitly specified. */ -#define IMPLICIT_GLSL_VERSION 110 - -/* GLSL ES version if no version is explicitly specified. */ -#define IMPLICIT_GLSL_ES_VERSION 100 - -void -glcpp_parser_resolve_implicit_version(glcpp_parser_t *parser) -{ - int language_version = parser->api == API_OPENGLES2 ? - IMPLICIT_GLSL_ES_VERSION : IMPLICIT_GLSL_VERSION; - - _glcpp_parser_handle_version_declaration(parser, language_version, - NULL, false); -} - -static void -glcpp_parser_copy_defines(const void *key, void *data, void *closure) -{ - struct define_include *di = (struct define_include *) closure; - macro_t *macro = (macro_t *) data; - - /* If we hit an error on a previous pass, just return */ - if (di->parser->error) - return; - - const char *identifier = macro->identifier; - struct hash_entry *entry = _mesa_hash_table_search(di->parser->defines, - identifier); - - macro_t *previous = entry ? entry->data : NULL; - if (previous) { - if (_macro_equal(macro, previous)) { - return; - } - glcpp_error(di->loc, di->parser, "Redefinition of macro %s\n", - identifier); - } - - _mesa_hash_table_insert(di->parser->defines, identifier, macro); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.h deleted file mode 100644 index 88c853a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.h +++ /dev/null @@ -1,124 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - -#ifndef YY_GLCPP_PARSER_SRC_COMPILER_GLSL_GLCPP_GLCPP_PARSE_H_INCLUDED -# define YY_GLCPP_PARSER_SRC_COMPILER_GLSL_GLCPP_GLCPP_PARSE_H_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 1 -#endif -#if YYDEBUG -extern int glcpp_parser_debug; -#endif - -/* Token kinds. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - YYEMPTY = -2, - YYEOF = 0, /* "end of file" */ - YYerror = 256, /* error */ - YYUNDEF = 257, /* "invalid token" */ - DEFINED = 258, /* DEFINED */ - ELIF_EXPANDED = 259, /* ELIF_EXPANDED */ - HASH_TOKEN = 260, /* HASH_TOKEN */ - DEFINE_TOKEN = 261, /* DEFINE_TOKEN */ - FUNC_IDENTIFIER = 262, /* FUNC_IDENTIFIER */ - OBJ_IDENTIFIER = 263, /* OBJ_IDENTIFIER */ - ELIF = 264, /* ELIF */ - ELSE = 265, /* ELSE */ - ENDIF = 266, /* ENDIF */ - ERROR_TOKEN = 267, /* ERROR_TOKEN */ - IF = 268, /* IF */ - IFDEF = 269, /* IFDEF */ - IFNDEF = 270, /* IFNDEF */ - LINE = 271, /* LINE */ - PRAGMA = 272, /* PRAGMA */ - UNDEF = 273, /* UNDEF */ - VERSION_TOKEN = 274, /* VERSION_TOKEN */ - GARBAGE = 275, /* GARBAGE */ - IDENTIFIER = 276, /* IDENTIFIER */ - IF_EXPANDED = 277, /* IF_EXPANDED */ - INTEGER = 278, /* INTEGER */ - INTEGER_STRING = 279, /* INTEGER_STRING */ - LINE_EXPANDED = 280, /* LINE_EXPANDED */ - NEWLINE = 281, /* NEWLINE */ - OTHER = 282, /* OTHER */ - PLACEHOLDER = 283, /* PLACEHOLDER */ - SPACE = 284, /* SPACE */ - PLUS_PLUS = 285, /* PLUS_PLUS */ - MINUS_MINUS = 286, /* MINUS_MINUS */ - PATH = 287, /* PATH */ - INCLUDE = 288, /* INCLUDE */ - PASTE = 289, /* PASTE */ - OR = 290, /* OR */ - AND = 291, /* AND */ - EQUAL = 292, /* EQUAL */ - NOT_EQUAL = 293, /* NOT_EQUAL */ - LESS_OR_EQUAL = 294, /* LESS_OR_EQUAL */ - GREATER_OR_EQUAL = 295, /* GREATER_OR_EQUAL */ - LEFT_SHIFT = 296, /* LEFT_SHIFT */ - RIGHT_SHIFT = 297, /* RIGHT_SHIFT */ - UNARY = 298 /* UNARY */ - }; - typedef enum yytokentype yytoken_kind_t; -#endif - -/* Value type. */ - -/* Location type. */ -#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED -typedef struct YYLTYPE YYLTYPE; -struct YYLTYPE -{ - int first_line; - int first_column; - int last_line; - int last_column; -}; -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 -#endif - - - - -int glcpp_parser_parse (glcpp_parser_t *parser); - - -#endif /* !YY_GLCPP_PARSER_SRC_COMPILER_GLSL_GLCPP_GLCPP_PARSE_H_INCLUDED */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.y b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.y deleted file mode 100644 index 3638560..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp-parse.y +++ /dev/null @@ -1,2588 +0,0 @@ -%{ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include -#include -#include - -#include "glcpp.h" -#include "main/mtypes.h" -#include "util/strndup.h" - -const char * -_mesa_lookup_shader_include(struct gl_context *ctx, char *path, - bool error_check); - -size_t -_mesa_get_shader_include_cursor(struct gl_shared_state *shared); - -void -_mesa_set_shader_include_cursor(struct gl_shared_state *shared, size_t cursor); - -static void -yyerror(YYLTYPE *locp, glcpp_parser_t *parser, const char *error); - -static void -_define_object_macro(glcpp_parser_t *parser, - YYLTYPE *loc, - const char *macro, - token_list_t *replacements); - -static void -_define_function_macro(glcpp_parser_t *parser, - YYLTYPE *loc, - const char *macro, - string_list_t *parameters, - token_list_t *replacements); - -static string_list_t * -_string_list_create(glcpp_parser_t *parser); - -static void -_string_list_append_item(glcpp_parser_t *parser, string_list_t *list, - const char *str); - -static int -_string_list_contains(string_list_t *list, const char *member, int *index); - -static const char * -_string_list_has_duplicate(string_list_t *list); - -static int -_string_list_length(string_list_t *list); - -static int -_string_list_equal(string_list_t *a, string_list_t *b); - -static argument_list_t * -_argument_list_create(glcpp_parser_t *parser); - -static void -_argument_list_append(glcpp_parser_t *parser, argument_list_t *list, - token_list_t *argument); - -static int -_argument_list_length(argument_list_t *list); - -static token_list_t * -_argument_list_member_at(argument_list_t *list, int index); - -static token_t * -_token_create_str(glcpp_parser_t *parser, int type, char *str); - -static token_t * -_token_create_ival(glcpp_parser_t *parser, int type, int ival); - -static token_list_t * -_token_list_create(glcpp_parser_t *parser); - -static void -_token_list_prepend(glcpp_parser_t *parser, token_list_t *list, token_t *token); - -static void -_token_list_append(glcpp_parser_t *parser, token_list_t *list, token_t *token); - -static void -_token_list_append_list(token_list_t *list, token_list_t *tail); - -static int -_token_list_equal_ignoring_space(token_list_t *a, token_list_t *b); - -static void -_parser_active_list_push(glcpp_parser_t *parser, const char *identifier, - token_node_t *marker); - -static void -_parser_active_list_pop(glcpp_parser_t *parser); - -static int -_parser_active_list_contains(glcpp_parser_t *parser, const char *identifier); - -typedef enum { - EXPANSION_MODE_IGNORE_DEFINED, - EXPANSION_MODE_EVALUATE_DEFINED -} expansion_mode_t; - -/* Expand list, and begin lexing from the result (after first - * prefixing a token of type 'head_token_type'). - */ -static void -_glcpp_parser_expand_and_lex_from(glcpp_parser_t *parser, int head_token_type, - token_list_t *list, expansion_mode_t mode); - -/* Perform macro expansion in-place on the given list. */ -static void -_glcpp_parser_expand_token_list(glcpp_parser_t *parser, token_list_t *list, - expansion_mode_t mode); - -static void -_glcpp_parser_print_expanded_token_list(glcpp_parser_t *parser, - token_list_t *list); - -static void -_glcpp_parser_skip_stack_push_if(glcpp_parser_t *parser, YYLTYPE *loc, - int condition); - -static void -_glcpp_parser_skip_stack_change_if(glcpp_parser_t *parser, YYLTYPE *loc, - const char *type, int condition); - -static void -_glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, YYLTYPE *loc); - -static void -_glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version, - const char *ident, bool explicitly_set); - -static int -glcpp_parser_lex(YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser); - -static void -glcpp_parser_lex_from(glcpp_parser_t *parser, token_list_t *list); - -struct define_include { - glcpp_parser_t *parser; - YYLTYPE *loc; -}; - -static void -glcpp_parser_copy_defines(const void *key, void *data, void *closure); - -static void -add_builtin_define(glcpp_parser_t *parser, const char *name, int value); - -%} - -%pure-parser -%error-verbose - -%locations -%initial-action { - @$.first_line = 1; - @$.first_column = 1; - @$.last_line = 1; - @$.last_column = 1; - @$.source = 0; -} - -%parse-param {glcpp_parser_t *parser} -%lex-param {glcpp_parser_t *parser} - -%expect 0 - - /* We use HASH_TOKEN, DEFINE_TOKEN and VERSION_TOKEN (as opposed to - * HASH, DEFINE, and VERSION) to avoid conflicts with other symbols, - * (such as the and start conditions in the lexer). */ -%token DEFINED ELIF_EXPANDED HASH_TOKEN DEFINE_TOKEN FUNC_IDENTIFIER OBJ_IDENTIFIER ELIF ELSE ENDIF ERROR_TOKEN IF IFDEF IFNDEF LINE PRAGMA UNDEF VERSION_TOKEN GARBAGE IDENTIFIER IF_EXPANDED INTEGER INTEGER_STRING LINE_EXPANDED NEWLINE OTHER PLACEHOLDER SPACE PLUS_PLUS MINUS_MINUS PATH INCLUDE -%token PASTE -%type INTEGER operator SPACE integer_constant version_constant -%type expression -%type IDENTIFIER FUNC_IDENTIFIER OBJ_IDENTIFIER INTEGER_STRING OTHER ERROR_TOKEN PRAGMA PATH INCLUDE -%type identifier_list -%type preprocessing_token -%type pp_tokens replacement_list text_line -%left OR -%left AND -%left '|' -%left '^' -%left '&' -%left EQUAL NOT_EQUAL -%left '<' '>' LESS_OR_EQUAL GREATER_OR_EQUAL -%left LEFT_SHIFT RIGHT_SHIFT -%left '+' '-' -%left '*' '/' '%' -%right UNARY - -%debug - -%% - -input: - /* empty */ -| input line -; - -line: - control_line -| SPACE control_line -| text_line { - _glcpp_parser_print_expanded_token_list (parser, $1); - _mesa_string_buffer_append_char(parser->output, '\n'); - } -| expanded_line -; - -expanded_line: - IF_EXPANDED expression NEWLINE { - if (parser->is_gles && $2.undefined_macro) - glcpp_error(& @1, parser, "undefined macro %s in expression (illegal in GLES)", $2.undefined_macro); - _glcpp_parser_skip_stack_push_if (parser, & @1, $2.value); - } -| ELIF_EXPANDED expression NEWLINE { - if (parser->is_gles && $2.undefined_macro) - glcpp_error(& @1, parser, "undefined macro %s in expression (illegal in GLES)", $2.undefined_macro); - _glcpp_parser_skip_stack_change_if (parser, & @1, "elif", $2.value); - } -| LINE_EXPANDED integer_constant NEWLINE { - parser->has_new_line_number = 1; - parser->new_line_number = $2; - _mesa_string_buffer_printf(parser->output, "#line %" PRIiMAX "\n", $2); - } -| LINE_EXPANDED integer_constant integer_constant NEWLINE { - parser->has_new_line_number = 1; - parser->new_line_number = $2; - parser->has_new_source_number = 1; - parser->new_source_number = $3; - _mesa_string_buffer_printf(parser->output, - "#line %" PRIiMAX " %" PRIiMAX "\n", - $2, $3); - } -| LINE_EXPANDED integer_constant PATH NEWLINE { - parser->has_new_line_number = 1; - parser->new_line_number = $2; - _mesa_string_buffer_printf(parser->output, - "#line %" PRIiMAX " %s\n", - $2, $3); - } -; - -define: - OBJ_IDENTIFIER replacement_list NEWLINE { - _define_object_macro (parser, & @1, $1, $2); - } -| FUNC_IDENTIFIER '(' ')' replacement_list NEWLINE { - _define_function_macro (parser, & @1, $1, NULL, $4); - } -| FUNC_IDENTIFIER '(' identifier_list ')' replacement_list NEWLINE { - _define_function_macro (parser, & @1, $1, $3, $5); - } -; - -control_line: - control_line_success { - _mesa_string_buffer_append_char(parser->output, '\n'); - } -| control_line_error -| HASH_TOKEN LINE pp_tokens NEWLINE { - - if (parser->skip_stack == NULL || - parser->skip_stack->type == SKIP_NO_SKIP) - { - _glcpp_parser_expand_and_lex_from (parser, - LINE_EXPANDED, $3, - EXPANSION_MODE_IGNORE_DEFINED); - } - } -; - -control_line_success: - HASH_TOKEN DEFINE_TOKEN define -| HASH_TOKEN UNDEF IDENTIFIER NEWLINE { - struct hash_entry *entry; - - /* Section 3.4 (Preprocessor) of the GLSL ES 3.00 spec says: - * - * It is an error to undefine or to redefine a built-in - * (pre-defined) macro name. - * - * The GLSL ES 1.00 spec does not contain this text, but - * dEQP's preprocess test in GLES2 checks for it. - * - * Section 3.3 (Preprocessor) revision 7, of the GLSL 4.50 - * spec says: - * - * By convention, all macro names containing two consecutive - * underscores ( __ ) are reserved for use by underlying - * software layers. Defining or undefining such a name - * in a shader does not itself result in an error, but may - * result in unintended behaviors that stem from having - * multiple definitions of the same name. All macro names - * prefixed with "GL_" (...) are also reseved, and defining - * such a name results in a compile-time error. - * - * The code below implements the same checks as GLSLang. - */ - if (strncmp("GL_", $3, 3) == 0) - glcpp_error(& @1, parser, "Built-in (pre-defined)" - " names beginning with GL_ cannot be undefined."); - else if (strstr($3, "__") != NULL) { - if (parser->is_gles - && parser->version >= 300 - && (strcmp("__LINE__", $3) == 0 - || strcmp("__FILE__", $3) == 0 - || strcmp("__VERSION__", $3) == 0)) { - glcpp_error(& @1, parser, "Built-in (pre-defined)" - " names cannot be undefined."); - } else if (parser->is_gles && parser->version <= 300) { - glcpp_error(& @1, parser, - " names containing consecutive underscores" - " are reserved."); - } else { - glcpp_warning(& @1, parser, - " names containing consecutive underscores" - " are reserved."); - } - } - - entry = _mesa_hash_table_search (parser->defines, $3); - if (entry) { - _mesa_hash_table_remove (parser->defines, entry); - } - } -| HASH_TOKEN INCLUDE NEWLINE { - size_t include_cursor = _mesa_get_shader_include_cursor(parser->gl_ctx->Shared); - - /* Remove leading and trailing "" or <> */ - char *start = strchr($2, '"'); - if (!start) { - _mesa_set_shader_include_cursor(parser->gl_ctx->Shared, 0); - start = strchr($2, '<'); - } - char *path = strndup(start + 1, strlen(start + 1) - 1); - - const char *shader = - _mesa_lookup_shader_include(parser->gl_ctx, path, false); - free(path); - - if (!shader) - glcpp_error(&@1, parser, "%s not found", $2); - else { - /* Create a temporary parser with the same settings */ - glcpp_parser_t *tmp_parser = - glcpp_parser_create(parser->gl_ctx, parser->extensions, parser->state); - tmp_parser->version_set = true; - tmp_parser->version = parser->version; - - /* Set the shader source and run the lexer */ - glcpp_lex_set_source_string(tmp_parser, shader); - - /* Copy any existing define macros to the temporary - * shade include parser. - */ - struct define_include di; - di.parser = tmp_parser; - di.loc = &@1; - - hash_table_call_foreach(parser->defines, - glcpp_parser_copy_defines, - &di); - - /* Print out '#include' to the glsl parser. We do this - * so that it can do the error checking require to - * make sure the ARB_shading_language_include - * extension is enabled. - */ - _mesa_string_buffer_printf(parser->output, "#include\n"); - - /* Parse the include string before adding to the - * preprocessor output. - */ - glcpp_parser_parse(tmp_parser); - _mesa_string_buffer_printf(parser->info_log, "%s", - tmp_parser->info_log->buf); - _mesa_string_buffer_printf(parser->output, "%s", - tmp_parser->output->buf); - - /* Copy any new define macros to the parent parser - * and steal the memory of our temp parser so we don't - * free these new defines before they are no longer - * needed. - */ - di.parser = parser; - di.loc = &@1; - ralloc_steal(parser, tmp_parser); - - hash_table_call_foreach(tmp_parser->defines, - glcpp_parser_copy_defines, - &di); - - /* Destroy tmp parser memory we no longer need */ - glcpp_lex_destroy(tmp_parser->scanner); - _mesa_hash_table_destroy(tmp_parser->defines, NULL); - } - - _mesa_set_shader_include_cursor(parser->gl_ctx->Shared, include_cursor); - } -| HASH_TOKEN IF pp_tokens NEWLINE { - /* Be careful to only evaluate the 'if' expression if - * we are not skipping. When we are skipping, we - * simply push a new 0-valued 'if' onto the skip - * stack. - * - * This avoids generating diagnostics for invalid - * expressions that are being skipped. */ - if (parser->skip_stack == NULL || - parser->skip_stack->type == SKIP_NO_SKIP) - { - _glcpp_parser_expand_and_lex_from (parser, - IF_EXPANDED, $3, - EXPANSION_MODE_EVALUATE_DEFINED); - } - else - { - _glcpp_parser_skip_stack_push_if (parser, & @1, 0); - parser->skip_stack->type = SKIP_TO_ENDIF; - } - } -| HASH_TOKEN IF NEWLINE { - /* #if without an expression is only an error if we - * are not skipping */ - if (parser->skip_stack == NULL || - parser->skip_stack->type == SKIP_NO_SKIP) - { - glcpp_error(& @1, parser, "#if with no expression"); - } - _glcpp_parser_skip_stack_push_if (parser, & @1, 0); - } -| HASH_TOKEN IFDEF IDENTIFIER junk NEWLINE { - struct hash_entry *entry = - _mesa_hash_table_search(parser->defines, $3); - macro_t *macro = entry ? entry->data : NULL; - _glcpp_parser_skip_stack_push_if (parser, & @1, macro != NULL); - } -| HASH_TOKEN IFNDEF IDENTIFIER junk NEWLINE { - struct hash_entry *entry = - _mesa_hash_table_search(parser->defines, $3); - macro_t *macro = entry ? entry->data : NULL; - _glcpp_parser_skip_stack_push_if (parser, & @3, macro == NULL); - } -| HASH_TOKEN ELIF pp_tokens NEWLINE { - /* Be careful to only evaluate the 'elif' expression - * if we are not skipping. When we are skipping, we - * simply change to a 0-valued 'elif' on the skip - * stack. - * - * This avoids generating diagnostics for invalid - * expressions that are being skipped. */ - if (parser->skip_stack && - parser->skip_stack->type == SKIP_TO_ELSE) - { - _glcpp_parser_expand_and_lex_from (parser, - ELIF_EXPANDED, $3, - EXPANSION_MODE_EVALUATE_DEFINED); - } - else if (parser->skip_stack && - parser->skip_stack->has_else) - { - glcpp_error(& @1, parser, "#elif after #else"); - } - else - { - _glcpp_parser_skip_stack_change_if (parser, & @1, - "elif", 0); - } - } -| HASH_TOKEN ELIF NEWLINE { - /* #elif without an expression is an error unless we - * are skipping. */ - if (parser->skip_stack && - parser->skip_stack->type == SKIP_TO_ELSE) - { - glcpp_error(& @1, parser, "#elif with no expression"); - } - else if (parser->skip_stack && - parser->skip_stack->has_else) - { - glcpp_error(& @1, parser, "#elif after #else"); - } - else - { - _glcpp_parser_skip_stack_change_if (parser, & @1, - "elif", 0); - glcpp_warning(& @1, parser, "ignoring illegal #elif without expression"); - } - } -| HASH_TOKEN ELSE { parser->lexing_directive = 1; } NEWLINE { - if (parser->skip_stack && - parser->skip_stack->has_else) - { - glcpp_error(& @1, parser, "multiple #else"); - } - else - { - _glcpp_parser_skip_stack_change_if (parser, & @1, "else", 1); - if (parser->skip_stack) - parser->skip_stack->has_else = true; - } - } -| HASH_TOKEN ENDIF { - _glcpp_parser_skip_stack_pop (parser, & @1); - } NEWLINE -| HASH_TOKEN VERSION_TOKEN version_constant NEWLINE { - if (parser->version_set) { - glcpp_error(& @1, parser, "#version must appear on the first line"); - } - _glcpp_parser_handle_version_declaration(parser, $3, NULL, true); - } -| HASH_TOKEN VERSION_TOKEN version_constant IDENTIFIER NEWLINE { - if (parser->version_set) { - glcpp_error(& @1, parser, "#version must appear on the first line"); - } - _glcpp_parser_handle_version_declaration(parser, $3, $4, true); - } -| HASH_TOKEN NEWLINE { - glcpp_parser_resolve_implicit_version(parser); - } -| HASH_TOKEN PRAGMA NEWLINE { - _mesa_string_buffer_printf(parser->output, "#%s", $2); - } -; - -control_line_error: - HASH_TOKEN ERROR_TOKEN NEWLINE { - glcpp_error(& @1, parser, "#%s", $2); - } -| HASH_TOKEN DEFINE_TOKEN NEWLINE { - glcpp_error (& @1, parser, "#define without macro name"); - } -| HASH_TOKEN GARBAGE pp_tokens NEWLINE { - glcpp_error (& @1, parser, "Illegal non-directive after #"); - } -; - -integer_constant: - INTEGER_STRING { - /* let strtoll detect the base */ - $$ = strtoll ($1, NULL, 0); - } -| INTEGER { - $$ = $1; - } - -version_constant: - INTEGER_STRING { - /* Both octal and hexadecimal constants begin with 0. */ - if ($1[0] == '0' && $1[1] != '\0') { - glcpp_error(&@1, parser, "invalid #version \"%s\" (not a decimal constant)", $1); - $$ = 0; - } else { - $$ = strtoll($1, NULL, 10); - } - } - -expression: - integer_constant { - $$.value = $1; - $$.undefined_macro = NULL; - } -| IDENTIFIER { - $$.value = 0; - if (parser->is_gles) - $$.undefined_macro = linear_strdup(parser->linalloc, $1); - else - $$.undefined_macro = NULL; - } -| expression OR expression { - $$.value = $1.value || $3.value; - - /* Short-circuit: Only flag undefined from right side - * if left side evaluates to false. - */ - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else if (! $1.value) - $$.undefined_macro = $3.undefined_macro; - } -| expression AND expression { - $$.value = $1.value && $3.value; - - /* Short-circuit: Only flag undefined from right-side - * if left side evaluates to true. - */ - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else if ($1.value) - $$.undefined_macro = $3.undefined_macro; - } -| expression '|' expression { - $$.value = $1.value | $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '^' expression { - $$.value = $1.value ^ $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '&' expression { - $$.value = $1.value & $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression NOT_EQUAL expression { - $$.value = $1.value != $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression EQUAL expression { - $$.value = $1.value == $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression GREATER_OR_EQUAL expression { - $$.value = $1.value >= $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression LESS_OR_EQUAL expression { - $$.value = $1.value <= $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '>' expression { - $$.value = $1.value > $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '<' expression { - $$.value = $1.value < $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression RIGHT_SHIFT expression { - $$.value = $1.value >> $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression LEFT_SHIFT expression { - $$.value = $1.value << $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '-' expression { - $$.value = $1.value - $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '+' expression { - $$.value = $1.value + $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '%' expression { - if ($3.value == 0) { - yyerror (& @1, parser, - "zero modulus in preprocessor directive"); - } else { - $$.value = $1.value % $3.value; - } - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '/' expression { - if ($3.value == 0) { - yyerror (& @1, parser, - "division by 0 in preprocessor directive"); - } else { - $$.value = $1.value / $3.value; - } - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| expression '*' expression { - $$.value = $1.value * $3.value; - if ($1.undefined_macro) - $$.undefined_macro = $1.undefined_macro; - else - $$.undefined_macro = $3.undefined_macro; - } -| '!' expression %prec UNARY { - $$.value = ! $2.value; - $$.undefined_macro = $2.undefined_macro; - } -| '~' expression %prec UNARY { - $$.value = ~ $2.value; - $$.undefined_macro = $2.undefined_macro; - } -| '-' expression %prec UNARY { - $$.value = - $2.value; - $$.undefined_macro = $2.undefined_macro; - } -| '+' expression %prec UNARY { - $$.value = + $2.value; - $$.undefined_macro = $2.undefined_macro; - } -| '(' expression ')' { - $$ = $2; - } -; - -identifier_list: - IDENTIFIER { - $$ = _string_list_create (parser); - _string_list_append_item (parser, $$, $1); - } -| identifier_list ',' IDENTIFIER { - $$ = $1; - _string_list_append_item (parser, $$, $3); - } -; - -text_line: - NEWLINE { $$ = NULL; } -| pp_tokens NEWLINE -; - -replacement_list: - /* empty */ { $$ = NULL; } -| pp_tokens -; - -junk: - /* empty */ -| pp_tokens { - if (parser->gl_ctx->Const.AllowExtraPPTokens) - glcpp_warning(&@1, parser, "extra tokens at end of directive"); - else - glcpp_error(&@1, parser, "extra tokens at end of directive"); - - (void)yynerrs; - } -; - -pp_tokens: - preprocessing_token { - parser->space_tokens = 1; - $$ = _token_list_create (parser); - _token_list_append (parser, $$, $1); - } -| pp_tokens preprocessing_token { - $$ = $1; - _token_list_append (parser, $$, $2); - } -; - -preprocessing_token: - IDENTIFIER { - $$ = _token_create_str (parser, IDENTIFIER, $1); - $$->location = yylloc; - } -| INTEGER_STRING { - $$ = _token_create_str (parser, INTEGER_STRING, $1); - $$->location = yylloc; - } -| PATH { - $$ = _token_create_str (parser, PATH, $1); - $$->location = yylloc; - } -| operator { - $$ = _token_create_ival (parser, $1, $1); - $$->location = yylloc; - } -| DEFINED { - $$ = _token_create_ival (parser, DEFINED, DEFINED); - $$->location = yylloc; - } -| OTHER { - $$ = _token_create_str (parser, OTHER, $1); - $$->location = yylloc; - } -| SPACE { - $$ = _token_create_ival (parser, SPACE, SPACE); - $$->location = yylloc; - } -; - -operator: - '[' { $$ = '['; } -| ']' { $$ = ']'; } -| '(' { $$ = '('; } -| ')' { $$ = ')'; } -| '{' { $$ = '{'; } -| '}' { $$ = '}'; } -| '.' { $$ = '.'; } -| '&' { $$ = '&'; } -| '*' { $$ = '*'; } -| '+' { $$ = '+'; } -| '-' { $$ = '-'; } -| '~' { $$ = '~'; } -| '!' { $$ = '!'; } -| '/' { $$ = '/'; } -| '%' { $$ = '%'; } -| LEFT_SHIFT { $$ = LEFT_SHIFT; } -| RIGHT_SHIFT { $$ = RIGHT_SHIFT; } -| '<' { $$ = '<'; } -| '>' { $$ = '>'; } -| LESS_OR_EQUAL { $$ = LESS_OR_EQUAL; } -| GREATER_OR_EQUAL { $$ = GREATER_OR_EQUAL; } -| EQUAL { $$ = EQUAL; } -| NOT_EQUAL { $$ = NOT_EQUAL; } -| '^' { $$ = '^'; } -| '|' { $$ = '|'; } -| AND { $$ = AND; } -| OR { $$ = OR; } -| ';' { $$ = ';'; } -| ',' { $$ = ','; } -| '=' { $$ = '='; } -| PASTE { $$ = PASTE; } -| PLUS_PLUS { $$ = PLUS_PLUS; } -| MINUS_MINUS { $$ = MINUS_MINUS; } -; - -%% - -string_list_t * -_string_list_create(glcpp_parser_t *parser) -{ - string_list_t *list; - - list = linear_alloc_child(parser->linalloc, sizeof(string_list_t)); - list->head = NULL; - list->tail = NULL; - - return list; -} - -void -_string_list_append_item(glcpp_parser_t *parser, string_list_t *list, - const char *str) -{ - string_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(string_node_t)); - node->str = linear_strdup(parser->linalloc, str); - - node->next = NULL; - - if (list->head == NULL) { - list->head = node; - } else { - list->tail->next = node; - } - - list->tail = node; -} - -int -_string_list_contains(string_list_t *list, const char *member, int *index) -{ - string_node_t *node; - int i; - - if (list == NULL) - return 0; - - for (i = 0, node = list->head; node; i++, node = node->next) { - if (strcmp (node->str, member) == 0) { - if (index) - *index = i; - return 1; - } - } - - return 0; -} - -/* Return duplicate string in list (if any), NULL otherwise. */ -const char * -_string_list_has_duplicate(string_list_t *list) -{ - string_node_t *node, *dup; - - if (list == NULL) - return NULL; - - for (node = list->head; node; node = node->next) { - for (dup = node->next; dup; dup = dup->next) { - if (strcmp (node->str, dup->str) == 0) - return node->str; - } - } - - return NULL; -} - -int -_string_list_length(string_list_t *list) -{ - int length = 0; - string_node_t *node; - - if (list == NULL) - return 0; - - for (node = list->head; node; node = node->next) - length++; - - return length; -} - -int -_string_list_equal(string_list_t *a, string_list_t *b) -{ - string_node_t *node_a, *node_b; - - if (a == NULL && b == NULL) - return 1; - - if (a == NULL || b == NULL) - return 0; - - for (node_a = a->head, node_b = b->head; - node_a && node_b; - node_a = node_a->next, node_b = node_b->next) - { - if (strcmp (node_a->str, node_b->str)) - return 0; - } - - /* Catch the case of lists being different lengths, (which - * would cause the loop above to terminate after the shorter - * list). */ - return node_a == node_b; -} - -argument_list_t * -_argument_list_create(glcpp_parser_t *parser) -{ - argument_list_t *list; - - list = linear_alloc_child(parser->linalloc, sizeof(argument_list_t)); - list->head = NULL; - list->tail = NULL; - - return list; -} - -void -_argument_list_append(glcpp_parser_t *parser, - argument_list_t *list, token_list_t *argument) -{ - argument_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(argument_node_t)); - node->argument = argument; - - node->next = NULL; - - if (list->head == NULL) { - list->head = node; - } else { - list->tail->next = node; - } - - list->tail = node; -} - -int -_argument_list_length(argument_list_t *list) -{ - int length = 0; - argument_node_t *node; - - if (list == NULL) - return 0; - - for (node = list->head; node; node = node->next) - length++; - - return length; -} - -token_list_t * -_argument_list_member_at(argument_list_t *list, int index) -{ - argument_node_t *node; - int i; - - if (list == NULL) - return NULL; - - node = list->head; - for (i = 0; i < index; i++) { - node = node->next; - if (node == NULL) - break; - } - - if (node) - return node->argument; - - return NULL; -} - -token_t * -_token_create_str(glcpp_parser_t *parser, int type, char *str) -{ - token_t *token; - - token = linear_alloc_child(parser->linalloc, sizeof(token_t)); - token->type = type; - token->value.str = str; - token->expanding = false; - - return token; -} - -token_t * -_token_create_ival(glcpp_parser_t *parser, int type, int ival) -{ - token_t *token; - - token = linear_alloc_child(parser->linalloc, sizeof(token_t)); - token->type = type; - token->value.ival = ival; - token->expanding = false; - - return token; -} - -token_list_t * -_token_list_create(glcpp_parser_t *parser) -{ - token_list_t *list; - - list = linear_alloc_child(parser->linalloc, sizeof(token_list_t)); - list->head = NULL; - list->tail = NULL; - list->non_space_tail = NULL; - - return list; -} - -void -_token_list_prepend(glcpp_parser_t *parser, token_list_t *list, token_t *token) -{ - token_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); - node->token = token; - node->next = list->head; - - list->head = node; -} - -void -_token_list_append(glcpp_parser_t *parser, token_list_t *list, token_t *token) -{ - token_node_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); - node->token = token; - node->next = NULL; - - if (list->head == NULL) { - list->head = node; - } else { - list->tail->next = node; - } - - list->tail = node; - if (token->type != SPACE) - list->non_space_tail = node; -} - -void -_token_list_append_list(token_list_t *list, token_list_t *tail) -{ - if (tail == NULL || tail->head == NULL) - return; - - if (list->head == NULL) { - list->head = tail->head; - } else { - list->tail->next = tail->head; - } - - list->tail = tail->tail; - list->non_space_tail = tail->non_space_tail; -} - -static token_list_t * -_token_list_copy(glcpp_parser_t *parser, token_list_t *other) -{ - token_list_t *copy; - token_node_t *node; - - if (other == NULL) - return NULL; - - copy = _token_list_create (parser); - for (node = other->head; node; node = node->next) { - token_t *new_token = linear_alloc_child(parser->linalloc, sizeof(token_t)); - *new_token = *node->token; - _token_list_append (parser, copy, new_token); - } - - return copy; -} - -static void -_token_list_trim_trailing_space(token_list_t *list) -{ - if (list->non_space_tail) { - list->non_space_tail->next = NULL; - list->tail = list->non_space_tail; - } -} - -static int -_token_list_is_empty_ignoring_space(token_list_t *l) -{ - token_node_t *n; - - if (l == NULL) - return 1; - - n = l->head; - while (n != NULL && n->token->type == SPACE) - n = n->next; - - return n == NULL; -} - -int -_token_list_equal_ignoring_space(token_list_t *a, token_list_t *b) -{ - token_node_t *node_a, *node_b; - - if (a == NULL || b == NULL) { - int a_empty = _token_list_is_empty_ignoring_space(a); - int b_empty = _token_list_is_empty_ignoring_space(b); - return a_empty == b_empty; - } - - node_a = a->head; - node_b = b->head; - - while (1) - { - if (node_a == NULL && node_b == NULL) - break; - - /* Ignore trailing whitespace */ - if (node_a == NULL && node_b->token->type == SPACE) { - while (node_b && node_b->token->type == SPACE) - node_b = node_b->next; - } - - if (node_a == NULL && node_b == NULL) - break; - - if (node_b == NULL && node_a->token->type == SPACE) { - while (node_a && node_a->token->type == SPACE) - node_a = node_a->next; - } - - if (node_a == NULL && node_b == NULL) - break; - - if (node_a == NULL || node_b == NULL) - return 0; - /* Make sure whitespace appears in the same places in both. - * It need not be exactly the same amount of whitespace, - * though. - */ - if (node_a->token->type == SPACE && node_b->token->type == SPACE) { - while (node_a && node_a->token->type == SPACE) - node_a = node_a->next; - while (node_b && node_b->token->type == SPACE) - node_b = node_b->next; - continue; - } - - if (node_a->token->type != node_b->token->type) - return 0; - - switch (node_a->token->type) { - case INTEGER: - if (node_a->token->value.ival != node_b->token->value.ival) { - return 0; - } - break; - case IDENTIFIER: - case INTEGER_STRING: - case OTHER: - if (strcmp(node_a->token->value.str, node_b->token->value.str)) { - return 0; - } - break; - } - - node_a = node_a->next; - node_b = node_b->next; - } - - return 1; -} - -static void -_token_print(struct _mesa_string_buffer *out, token_t *token) -{ - if (token->type < 256) { - _mesa_string_buffer_append_char(out, token->type); - return; - } - - switch (token->type) { - case INTEGER: - _mesa_string_buffer_printf(out, "%" PRIiMAX, token->value.ival); - break; - case IDENTIFIER: - case INTEGER_STRING: - case PATH: - case OTHER: - _mesa_string_buffer_append(out, token->value.str); - break; - case SPACE: - _mesa_string_buffer_append_char(out, ' '); - break; - case LEFT_SHIFT: - _mesa_string_buffer_append(out, "<<"); - break; - case RIGHT_SHIFT: - _mesa_string_buffer_append(out, ">>"); - break; - case LESS_OR_EQUAL: - _mesa_string_buffer_append(out, "<="); - break; - case GREATER_OR_EQUAL: - _mesa_string_buffer_append(out, ">="); - break; - case EQUAL: - _mesa_string_buffer_append(out, "=="); - break; - case NOT_EQUAL: - _mesa_string_buffer_append(out, "!="); - break; - case AND: - _mesa_string_buffer_append(out, "&&"); - break; - case OR: - _mesa_string_buffer_append(out, "||"); - break; - case PASTE: - _mesa_string_buffer_append(out, "##"); - break; - case PLUS_PLUS: - _mesa_string_buffer_append(out, "++"); - break; - case MINUS_MINUS: - _mesa_string_buffer_append(out, "--"); - break; - case DEFINED: - _mesa_string_buffer_append(out, "defined"); - break; - case PLACEHOLDER: - /* Nothing to print. */ - break; - default: - assert(!"Error: Don't know how to print token."); - - break; - } -} - -/* Return a new token formed by pasting 'token' and 'other'. Note that this - * function may return 'token' or 'other' directly rather than allocating - * anything new. - * - * Caution: Only very cursory error-checking is performed to see if - * the final result is a valid single token. */ -static token_t * -_token_paste(glcpp_parser_t *parser, token_t *token, token_t *other) -{ - token_t *combined = NULL; - - /* Pasting a placeholder onto anything makes no change. */ - if (other->type == PLACEHOLDER) - return token; - - /* When 'token' is a placeholder, just return 'other'. */ - if (token->type == PLACEHOLDER) - return other; - - /* A very few single-character punctuators can be combined - * with another to form a multi-character punctuator. */ - switch (token->type) { - case '<': - if (other->type == '<') - combined = _token_create_ival (parser, LEFT_SHIFT, LEFT_SHIFT); - else if (other->type == '=') - combined = _token_create_ival (parser, LESS_OR_EQUAL, LESS_OR_EQUAL); - break; - case '>': - if (other->type == '>') - combined = _token_create_ival (parser, RIGHT_SHIFT, RIGHT_SHIFT); - else if (other->type == '=') - combined = _token_create_ival (parser, GREATER_OR_EQUAL, GREATER_OR_EQUAL); - break; - case '=': - if (other->type == '=') - combined = _token_create_ival (parser, EQUAL, EQUAL); - break; - case '!': - if (other->type == '=') - combined = _token_create_ival (parser, NOT_EQUAL, NOT_EQUAL); - break; - case '&': - if (other->type == '&') - combined = _token_create_ival (parser, AND, AND); - break; - case '|': - if (other->type == '|') - combined = _token_create_ival (parser, OR, OR); - break; - } - - if (combined != NULL) { - /* Inherit the location from the first token */ - combined->location = token->location; - return combined; - } - - /* Two string-valued (or integer) tokens can usually just be - * mashed together. (We also handle a string followed by an - * integer here as well.) - * - * There are some exceptions here. Notably, if the first token - * is an integer (or a string representing an integer), then - * the second token must also be an integer or must be a - * string representing an integer that begins with a digit. - */ - if ((token->type == IDENTIFIER || token->type == OTHER || token->type == INTEGER_STRING || token->type == INTEGER) && - (other->type == IDENTIFIER || other->type == OTHER || other->type == INTEGER_STRING || other->type == INTEGER)) - { - char *str; - int combined_type; - - /* Check that pasting onto an integer doesn't create a - * non-integer, (that is, only digits can be - * pasted. */ - if (token->type == INTEGER_STRING || token->type == INTEGER) { - switch (other->type) { - case INTEGER_STRING: - if (other->value.str[0] < '0' || other->value.str[0] > '9') - goto FAIL; - break; - case INTEGER: - if (other->value.ival < 0) - goto FAIL; - break; - default: - goto FAIL; - } - } - - if (token->type == INTEGER) - str = linear_asprintf(parser->linalloc, "%" PRIiMAX, token->value.ival); - else - str = linear_strdup(parser->linalloc, token->value.str); - - if (other->type == INTEGER) - linear_asprintf_append(parser->linalloc, &str, "%" PRIiMAX, other->value.ival); - else - linear_strcat(parser->linalloc, &str, other->value.str); - - /* New token is same type as original token, unless we - * started with an integer, in which case we will be - * creating an integer-string. */ - combined_type = token->type; - if (combined_type == INTEGER) - combined_type = INTEGER_STRING; - - combined = _token_create_str (parser, combined_type, str); - combined->location = token->location; - return combined; - } - - FAIL: - glcpp_error (&token->location, parser, ""); - _mesa_string_buffer_append(parser->info_log, "Pasting \""); - _token_print(parser->info_log, token); - _mesa_string_buffer_append(parser->info_log, "\" and \""); - _token_print(parser->info_log, other); - _mesa_string_buffer_append(parser->info_log, "\" does not give a valid preprocessing token.\n"); - - return token; -} - -static void -_token_list_print(glcpp_parser_t *parser, token_list_t *list) -{ - token_node_t *node; - - if (list == NULL) - return; - - for (node = list->head; node; node = node->next) - _token_print(parser->output, node->token); -} - -void -yyerror(YYLTYPE *locp, glcpp_parser_t *parser, const char *error) -{ - glcpp_error(locp, parser, "%s", error); -} - -static void -add_builtin_define(glcpp_parser_t *parser, const char *name, int value) -{ - token_t *tok; - token_list_t *list; - - tok = _token_create_ival (parser, INTEGER, value); - - list = _token_list_create(parser); - _token_list_append(parser, list, tok); - _define_object_macro(parser, NULL, name, list); -} - -/* Initial output buffer size, 4096 minus ralloc() overhead. It was selected - * to minimize total amount of allocated memory during shader-db run. - */ -#define INITIAL_PP_OUTPUT_BUF_SIZE 4048 - -glcpp_parser_t * -glcpp_parser_create(struct gl_context *gl_ctx, - glcpp_extension_iterator extensions, void *state) -{ - glcpp_parser_t *parser; - - parser = ralloc (NULL, glcpp_parser_t); - - glcpp_lex_init_extra (parser, &parser->scanner); - parser->defines = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - parser->linalloc = linear_alloc_parent(parser, 0); - parser->active = NULL; - parser->lexing_directive = 0; - parser->lexing_version_directive = 0; - parser->space_tokens = 1; - parser->last_token_was_newline = 0; - parser->last_token_was_space = 0; - parser->first_non_space_token_this_line = 1; - parser->newline_as_space = 0; - parser->in_control_line = 0; - parser->paren_count = 0; - parser->commented_newlines = 0; - - parser->skip_stack = NULL; - parser->skipping = 0; - - parser->lex_from_list = NULL; - parser->lex_from_node = NULL; - - parser->output = _mesa_string_buffer_create(parser, - INITIAL_PP_OUTPUT_BUF_SIZE); - parser->info_log = _mesa_string_buffer_create(parser, - INITIAL_PP_OUTPUT_BUF_SIZE); - parser->error = 0; - - parser->gl_ctx = gl_ctx; - parser->extensions = extensions; - parser->extension_list = &gl_ctx->Extensions; - parser->state = state; - parser->api = gl_ctx->API; - parser->version = 0; - parser->version_set = false; - - parser->has_new_line_number = 0; - parser->new_line_number = 1; - parser->has_new_source_number = 0; - parser->new_source_number = 0; - - parser->is_gles = false; - - return parser; -} - -void -glcpp_parser_destroy(glcpp_parser_t *parser) -{ - glcpp_lex_destroy (parser->scanner); - _mesa_hash_table_destroy(parser->defines, NULL); - ralloc_free (parser); -} - -typedef enum function_status -{ - FUNCTION_STATUS_SUCCESS, - FUNCTION_NOT_A_FUNCTION, - FUNCTION_UNBALANCED_PARENTHESES -} function_status_t; - -/* Find a set of function-like macro arguments by looking for a - * balanced set of parentheses. - * - * When called, 'node' should be the opening-parenthesis token, (or - * perhaps preceeding SPACE tokens). Upon successful return *last will - * be the last consumed node, (corresponding to the closing right - * parenthesis). - * - * Return values: - * - * FUNCTION_STATUS_SUCCESS: - * - * Successfully parsed a set of function arguments. - * - * FUNCTION_NOT_A_FUNCTION: - * - * Macro name not followed by a '('. This is not an error, but - * simply that the macro name should be treated as a non-macro. - * - * FUNCTION_UNBALANCED_PARENTHESES - * - * Macro name is not followed by a balanced set of parentheses. - */ -static function_status_t -_arguments_parse(glcpp_parser_t *parser, - argument_list_t *arguments, token_node_t *node, - token_node_t **last) -{ - token_list_t *argument; - int paren_count; - - node = node->next; - - /* Ignore whitespace before first parenthesis. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL || node->token->type != '(') - return FUNCTION_NOT_A_FUNCTION; - - node = node->next; - - argument = _token_list_create (parser); - _argument_list_append (parser, arguments, argument); - - for (paren_count = 1; node; node = node->next) { - if (node->token->type == '(') { - paren_count++; - } else if (node->token->type == ')') { - paren_count--; - if (paren_count == 0) - break; - } - - if (node->token->type == ',' && paren_count == 1) { - _token_list_trim_trailing_space (argument); - argument = _token_list_create (parser); - _argument_list_append (parser, arguments, argument); - } else { - if (argument->head == NULL) { - /* Don't treat initial whitespace as part of the argument. */ - if (node->token->type == SPACE) - continue; - } - _token_list_append(parser, argument, node->token); - } - } - - if (paren_count) - return FUNCTION_UNBALANCED_PARENTHESES; - - *last = node; - - return FUNCTION_STATUS_SUCCESS; -} - -static token_list_t * -_token_list_create_with_one_ival(glcpp_parser_t *parser, int type, int ival) -{ - token_list_t *list; - token_t *node; - - list = _token_list_create(parser); - node = _token_create_ival(parser, type, ival); - _token_list_append(parser, list, node); - - return list; -} - -static token_list_t * -_token_list_create_with_one_space(glcpp_parser_t *parser) -{ - return _token_list_create_with_one_ival(parser, SPACE, SPACE); -} - -static token_list_t * -_token_list_create_with_one_integer(glcpp_parser_t *parser, int ival) -{ - return _token_list_create_with_one_ival(parser, INTEGER, ival); -} - -/* Evaluate a DEFINED token node (based on subsequent tokens in the list). - * - * Note: This function must only be called when "node" is a DEFINED token, - * (and will abort with an assertion failure otherwise). - * - * If "node" is followed, (ignoring any SPACE tokens), by an IDENTIFIER token - * (optionally preceded and followed by '(' and ')' tokens) then the following - * occurs: - * - * If the identifier is a defined macro, this function returns 1. - * - * If the identifier is not a defined macro, this function returns 0. - * - * In either case, *last will be updated to the last node in the list - * consumed by the evaluation, (either the token of the identifier or the - * token of the closing parenthesis). - * - * In all other cases, (such as "node is the final node of the list", or - * "missing closing parenthesis", etc.), this function generates a - * preprocessor error, returns -1 and *last will not be set. - */ -static int -_glcpp_parser_evaluate_defined(glcpp_parser_t *parser, token_node_t *node, - token_node_t **last) -{ - token_node_t *argument, *defined = node; - - assert(node->token->type == DEFINED); - - node = node->next; - - /* Ignore whitespace after DEFINED token. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL) - goto FAIL; - - if (node->token->type == IDENTIFIER || node->token->type == OTHER) { - argument = node; - } else if (node->token->type == '(') { - node = node->next; - - /* Ignore whitespace after '(' token. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL || (node->token->type != IDENTIFIER && - node->token->type != OTHER)) { - goto FAIL; - } - - argument = node; - - node = node->next; - - /* Ignore whitespace after identifier, before ')' token. */ - while (node && node->token->type == SPACE) - node = node->next; - - if (node == NULL || node->token->type != ')') - goto FAIL; - } else { - goto FAIL; - } - - *last = node; - - return _mesa_hash_table_search(parser->defines, - argument->token->value.str) ? 1 : 0; - -FAIL: - glcpp_error (&defined->token->location, parser, - "\"defined\" not followed by an identifier"); - return -1; -} - -/* Evaluate all DEFINED nodes in a given list, modifying the list in place. - */ -static void -_glcpp_parser_evaluate_defined_in_list(glcpp_parser_t *parser, - token_list_t *list) -{ - token_node_t *node, *node_prev, *replacement, *last = NULL; - int value; - - if (list == NULL) - return; - - node_prev = NULL; - node = list->head; - - while (node) { - - if (node->token->type != DEFINED) - goto NEXT; - - value = _glcpp_parser_evaluate_defined (parser, node, &last); - if (value == -1) - goto NEXT; - - replacement = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); - replacement->token = _token_create_ival (parser, INTEGER, value); - - /* Splice replacement node into list, replacing from "node" - * through "last". */ - if (node_prev) - node_prev->next = replacement; - else - list->head = replacement; - replacement->next = last->next; - if (last == list->tail) - list->tail = replacement; - - node = replacement; - - NEXT: - node_prev = node; - node = node->next; - } -} - -/* Perform macro expansion on 'list', placing the resulting tokens - * into a new list which is initialized with a first token of type - * 'head_token_type'. Then begin lexing from the resulting list, - * (return to the current lexing source when this list is exhausted). - * - * See the documentation of _glcpp_parser_expand_token_list for a description - * of the "mode" parameter. - */ -static void -_glcpp_parser_expand_and_lex_from(glcpp_parser_t *parser, int head_token_type, - token_list_t *list, expansion_mode_t mode) -{ - token_list_t *expanded; - token_t *token; - - expanded = _token_list_create (parser); - token = _token_create_ival (parser, head_token_type, head_token_type); - _token_list_append (parser, expanded, token); - _glcpp_parser_expand_token_list (parser, list, mode); - _token_list_append_list (expanded, list); - glcpp_parser_lex_from (parser, expanded); -} - -static void -_glcpp_parser_apply_pastes(glcpp_parser_t *parser, token_list_t *list) -{ - token_node_t *node; - - node = list->head; - while (node) { - token_node_t *next_non_space; - - /* Look ahead for a PASTE token, skipping space. */ - next_non_space = node->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) - break; - - if (next_non_space->token->type != PASTE) { - node = next_non_space; - continue; - } - - /* Now find the next non-space token after the PASTE. */ - next_non_space = next_non_space->next; - while (next_non_space && next_non_space->token->type == SPACE) - next_non_space = next_non_space->next; - - if (next_non_space == NULL) { - yyerror(&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); - return; - } - - node->token = _token_paste(parser, node->token, next_non_space->token); - node->next = next_non_space->next; - if (next_non_space == list->tail) - list->tail = node; - } - - list->non_space_tail = list->tail; -} - -/* This is a helper function that's essentially part of the - * implementation of _glcpp_parser_expand_node. It shouldn't be called - * except for by that function. - * - * Returns NULL if node is a simple token with no expansion, (that is, - * although 'node' corresponds to an identifier defined as a - * function-like macro, it is not followed with a parenthesized - * argument list). - * - * Compute the complete expansion of node (which is a function-like - * macro) and subsequent nodes which are arguments. - * - * Returns the token list that results from the expansion and sets - * *last to the last node in the list that was consumed by the - * expansion. Specifically, *last will be set as follows: as the - * token of the closing right parenthesis. - * - * See the documentation of _glcpp_parser_expand_token_list for a description - * of the "mode" parameter. - */ -static token_list_t * -_glcpp_parser_expand_function(glcpp_parser_t *parser, token_node_t *node, - token_node_t **last, expansion_mode_t mode) -{ - struct hash_entry *entry; - macro_t *macro; - const char *identifier; - argument_list_t *arguments; - function_status_t status; - token_list_t *substituted; - int parameter_index; - - identifier = node->token->value.str; - - entry = _mesa_hash_table_search(parser->defines, identifier); - macro = entry ? entry->data : NULL; - - assert(macro->is_function); - - arguments = _argument_list_create(parser); - status = _arguments_parse(parser, arguments, node, last); - - switch (status) { - case FUNCTION_STATUS_SUCCESS: - break; - case FUNCTION_NOT_A_FUNCTION: - return NULL; - case FUNCTION_UNBALANCED_PARENTHESES: - glcpp_error(&node->token->location, parser, "Macro %s call has unbalanced parentheses\n", identifier); - return NULL; - } - - /* Replace a macro defined as empty with a SPACE token. */ - if (macro->replacements == NULL) { - return _token_list_create_with_one_space(parser); - } - - if (!((_argument_list_length (arguments) == - _string_list_length (macro->parameters)) || - (_string_list_length (macro->parameters) == 0 && - _argument_list_length (arguments) == 1 && - arguments->head->argument->head == NULL))) { - glcpp_error(&node->token->location, parser, - "Error: macro %s invoked with %d arguments (expected %d)\n", - identifier, _argument_list_length (arguments), - _string_list_length(macro->parameters)); - return NULL; - } - - /* Perform argument substitution on the replacement list. */ - substituted = _token_list_create(parser); - - for (node = macro->replacements->head; node; node = node->next) { - if (node->token->type == IDENTIFIER && - _string_list_contains(macro->parameters, node->token->value.str, - ¶meter_index)) { - token_list_t *argument; - argument = _argument_list_member_at(arguments, parameter_index); - /* Before substituting, we expand the argument tokens, or append a - * placeholder token for an empty argument. */ - if (argument->head) { - token_list_t *expanded_argument; - expanded_argument = _token_list_copy(parser, argument); - _glcpp_parser_expand_token_list(parser, expanded_argument, mode); - _token_list_append_list(substituted, expanded_argument); - } else { - token_t *new_token; - - new_token = _token_create_ival(parser, PLACEHOLDER, - PLACEHOLDER); - _token_list_append(parser, substituted, new_token); - } - } else { - _token_list_append(parser, substituted, node->token); - } - } - - /* After argument substitution, and before further expansion - * below, implement token pasting. */ - - _token_list_trim_trailing_space(substituted); - - _glcpp_parser_apply_pastes(parser, substituted); - - return substituted; -} - -/* Compute the complete expansion of node, (and subsequent nodes after - * 'node' in the case that 'node' is a function-like macro and - * subsequent nodes are arguments). - * - * Returns NULL if node is a simple token with no expansion. - * - * Otherwise, returns the token list that results from the expansion - * and sets *last to the last node in the list that was consumed by - * the expansion. Specifically, *last will be set as follows: - * - * As 'node' in the case of object-like macro expansion. - * - * As the token of the closing right parenthesis in the case of - * function-like macro expansion. - * - * See the documentation of _glcpp_parser_expand_token_list for a description - * of the "mode" parameter. - */ -static token_list_t * -_glcpp_parser_expand_node(glcpp_parser_t *parser, token_node_t *node, - token_node_t *node_prev, token_node_t **last, - expansion_mode_t mode, int line) -{ - token_t *token = node->token; - const char *identifier; - struct hash_entry *entry; - macro_t *macro; - - /* If token is already being expanded return to avoid an infinite loop */ - if (token->expanding) - return NULL; - - /* We only expand identifiers */ - if (token->type != IDENTIFIER) { - return NULL; - } - - *last = node; - identifier = token->value.str; - - /* Special handling for __LINE__ and __FILE__, (not through - * the hash table). */ - if (*identifier == '_') { - if (strcmp(identifier, "__LINE__") == 0) - return _token_list_create_with_one_integer(parser, line); - - if (strcmp(identifier, "__FILE__") == 0) - return _token_list_create_with_one_integer(parser, - node->token->location.source); - } - - /* Look up this identifier in the hash table. */ - entry = _mesa_hash_table_search(parser->defines, identifier); - macro = entry ? entry->data : NULL; - - /* Not a macro, so no expansion needed. */ - if (macro == NULL) - return NULL; - - /* Finally, don't expand this macro if we're already actively - * expanding it, (to avoid infinite recursion). */ - if (_parser_active_list_contains (parser, identifier)) { - /* We change the `expanding` bool to true to prevent any - * future expansion of this unexpanded token. */ - char *str; - token_list_t *expansion; - token_t *final; - - str = linear_strdup(parser->linalloc, token->value.str); - final = _token_create_str(parser, token->type, str); - final->expanding = true; - expansion = _token_list_create(parser); - _token_list_append(parser, expansion, final); - return expansion; - } - - if (! macro->is_function) { - token_list_t *replacement; - - /* Replace a macro defined as empty with a SPACE token. */ - if (macro->replacements == NULL) - return _token_list_create_with_one_space(parser); - - replacement = _token_list_copy(parser, macro->replacements); - - /* If needed insert space in front of replacements to isolate them from - * the code they will be inserted into. For example: - * - * #define VALUE -1.0 - * int a = -VALUE; - * - * Should be evaluated to int a = - -1.0; not int a = --1.0; - */ - if (node_prev && - (node_prev->token->type == '-' || node_prev->token->type == '+') && - node_prev->token->type == replacement->head->token->type) { - token_t *new_token = _token_create_ival(parser, SPACE, SPACE); - _token_list_prepend(parser, replacement, new_token); - } - - _glcpp_parser_apply_pastes(parser, replacement); - return replacement; - } - - return _glcpp_parser_expand_function(parser, node, last, mode); -} - -/* Push a new identifier onto the parser's active list. - * - * Here, 'marker' is the token node that appears in the list after the - * expansion of 'identifier'. That is, when the list iterator begins - * examining 'marker', then it is time to pop this node from the - * active stack. - */ -static void -_parser_active_list_push(glcpp_parser_t *parser, const char *identifier, - token_node_t *marker) -{ - active_list_t *node; - - node = linear_alloc_child(parser->linalloc, sizeof(active_list_t)); - node->identifier = linear_strdup(parser->linalloc, identifier); - node->marker = marker; - node->next = parser->active; - - parser->active = node; -} - -static void -_parser_active_list_pop(glcpp_parser_t *parser) -{ - active_list_t *node = parser->active; - - if (node == NULL) { - parser->active = NULL; - return; - } - - node = parser->active->next; - parser->active = node; -} - -static int -_parser_active_list_contains(glcpp_parser_t *parser, const char *identifier) -{ - active_list_t *node; - - if (parser->active == NULL) - return 0; - - for (node = parser->active; node; node = node->next) - if (strcmp(node->identifier, identifier) == 0) - return 1; - - return 0; -} - -/* Walk over the token list replacing nodes with their expansion. - * Whenever nodes are expanded the walking will walk over the new - * nodes, continuing to expand as necessary. The results are placed in - * 'list' itself. - * - * The "mode" argument controls the handling of any DEFINED tokens that - * result from expansion as follows: - * - * EXPANSION_MODE_IGNORE_DEFINED: Any resulting DEFINED tokens will be - * left in the final list, unevaluated. This is the correct mode - * for expanding any list in any context other than a - * preprocessor conditional, (#if or #elif). - * - * EXPANSION_MODE_EVALUATE_DEFINED: Any resulting DEFINED tokens will be - * evaluated to 0 or 1 tokens depending on whether the following - * token is the name of a defined macro. If the DEFINED token is - * not followed by an (optionally parenthesized) identifier, then - * an error will be generated. This the correct mode for - * expanding any list in the context of a preprocessor - * conditional, (#if or #elif). - */ -static void -_glcpp_parser_expand_token_list(glcpp_parser_t *parser, token_list_t *list, - expansion_mode_t mode) -{ - token_node_t *node_prev; - token_node_t *node, *last = NULL; - token_list_t *expansion; - active_list_t *active_initial = parser->active; - int line; - - if (list == NULL) - return; - - _token_list_trim_trailing_space (list); - - line = list->tail->token->location.last_line; - - node_prev = NULL; - node = list->head; - - if (mode == EXPANSION_MODE_EVALUATE_DEFINED) - _glcpp_parser_evaluate_defined_in_list (parser, list); - - while (node) { - - while (parser->active && parser->active->marker == node) - _parser_active_list_pop (parser); - - expansion = - _glcpp_parser_expand_node(parser, node, node_prev, &last, mode, line); - if (expansion) { - token_node_t *n; - - if (mode == EXPANSION_MODE_EVALUATE_DEFINED) { - _glcpp_parser_evaluate_defined_in_list (parser, expansion); - } - - for (n = node; n != last->next; n = n->next) - while (parser->active && parser->active->marker == n) { - _parser_active_list_pop (parser); - } - - _parser_active_list_push(parser, node->token->value.str, last->next); - - /* Splice expansion into list, supporting a simple deletion if the - * expansion is empty. - */ - if (expansion->head) { - if (node_prev) - node_prev->next = expansion->head; - else - list->head = expansion->head; - expansion->tail->next = last->next; - if (last == list->tail) - list->tail = expansion->tail; - } else { - if (node_prev) - node_prev->next = last->next; - else - list->head = last->next; - if (last == list->tail) - list->tail = NULL; - } - } else { - node_prev = node; - } - node = node_prev ? node_prev->next : list->head; - } - - /* Remove any lingering effects of this invocation on the - * active list. That is, pop until the list looks like it did - * at the beginning of this function. */ - while (parser->active && parser->active != active_initial) - _parser_active_list_pop (parser); - - list->non_space_tail = list->tail; -} - -void -_glcpp_parser_print_expanded_token_list(glcpp_parser_t *parser, - token_list_t *list) -{ - if (list == NULL) - return; - - _glcpp_parser_expand_token_list (parser, list, EXPANSION_MODE_IGNORE_DEFINED); - - _token_list_trim_trailing_space (list); - - _token_list_print (parser, list); -} - -static void -_check_for_reserved_macro_name(glcpp_parser_t *parser, YYLTYPE *loc, - const char *identifier) -{ - /* Section 3.3 (Preprocessor) of the GLSL 1.30 spec (and later) and - * the GLSL ES spec (all versions) say: - * - * "All macro names containing two consecutive underscores ( __ ) - * are reserved for future use as predefined macro names. All - * macro names prefixed with "GL_" ("GL" followed by a single - * underscore) are also reserved." - * - * The intention is that names containing __ are reserved for internal - * use by the implementation, and names prefixed with GL_ are reserved - * for use by Khronos. Since every extension adds a name prefixed - * with GL_ (i.e., the name of the extension), that should be an - * error. Names simply containing __ are dangerous to use, but should - * be allowed. - * - * A future version of the GLSL specification will clarify this. - */ - if (strstr(identifier, "__")) { - glcpp_warning(loc, parser, "Macro names containing \"__\" are reserved " - "for use by the implementation.\n"); - } - if (strncmp(identifier, "GL_", 3) == 0) { - glcpp_error (loc, parser, "Macro names starting with \"GL_\" are reserved.\n"); - } - if (strcmp(identifier, "defined") == 0) { - glcpp_error (loc, parser, "\"defined\" cannot be used as a macro name"); - } -} - -static int -_macro_equal(macro_t *a, macro_t *b) -{ - if (a->is_function != b->is_function) - return 0; - - if (a->is_function) { - if (! _string_list_equal (a->parameters, b->parameters)) - return 0; - } - - return _token_list_equal_ignoring_space(a->replacements, b->replacements); -} - -void -_define_object_macro(glcpp_parser_t *parser, YYLTYPE *loc, - const char *identifier, token_list_t *replacements) -{ - macro_t *macro, *previous; - struct hash_entry *entry; - - /* We define pre-defined macros before we've started parsing the actual - * file. So if there's no location defined yet, that's what were doing and - * we don't want to generate an error for using the reserved names. */ - if (loc != NULL) - _check_for_reserved_macro_name(parser, loc, identifier); - - macro = linear_alloc_child(parser->linalloc, sizeof(macro_t)); - - macro->is_function = 0; - macro->parameters = NULL; - macro->identifier = linear_strdup(parser->linalloc, identifier); - macro->replacements = replacements; - - entry = _mesa_hash_table_search(parser->defines, identifier); - previous = entry ? entry->data : NULL; - if (previous) { - if (_macro_equal (macro, previous)) { - return; - } - glcpp_error (loc, parser, "Redefinition of macro %s\n", identifier); - } - - _mesa_hash_table_insert (parser->defines, identifier, macro); -} - -void -_define_function_macro(glcpp_parser_t *parser, YYLTYPE *loc, - const char *identifier, string_list_t *parameters, - token_list_t *replacements) -{ - macro_t *macro, *previous; - struct hash_entry *entry; - const char *dup; - - _check_for_reserved_macro_name(parser, loc, identifier); - - /* Check for any duplicate parameter names. */ - if ((dup = _string_list_has_duplicate (parameters)) != NULL) { - glcpp_error (loc, parser, "Duplicate macro parameter \"%s\"", dup); - } - - macro = linear_alloc_child(parser->linalloc, sizeof(macro_t)); - - macro->is_function = 1; - macro->parameters = parameters; - macro->identifier = linear_strdup(parser->linalloc, identifier); - macro->replacements = replacements; - - entry = _mesa_hash_table_search(parser->defines, identifier); - previous = entry ? entry->data : NULL; - if (previous) { - if (_macro_equal (macro, previous)) { - return; - } - glcpp_error (loc, parser, "Redefinition of macro %s\n", identifier); - } - - _mesa_hash_table_insert(parser->defines, identifier, macro); -} - -static int -glcpp_parser_lex(YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser) -{ - token_node_t *node; - int ret; - - if (parser->lex_from_list == NULL) { - ret = glcpp_lex(yylval, yylloc, parser->scanner); - - /* XXX: This ugly block of code exists for the sole - * purpose of converting a NEWLINE token into a SPACE - * token, but only in the case where we have seen a - * function-like macro name, but have not yet seen its - * closing parenthesis. - * - * There's perhaps a more compact way to do this with - * mid-rule actions in the grammar. - * - * I'm definitely not pleased with the complexity of - * this code here. - */ - if (parser->newline_as_space) { - if (ret == '(') { - parser->paren_count++; - } else if (ret == ')') { - parser->paren_count--; - if (parser->paren_count == 0) - parser->newline_as_space = 0; - } else if (ret == NEWLINE) { - ret = SPACE; - } else if (ret != SPACE) { - if (parser->paren_count == 0) - parser->newline_as_space = 0; - } - } else if (parser->in_control_line) { - if (ret == NEWLINE) - parser->in_control_line = 0; - } - else if (ret == DEFINE_TOKEN || ret == UNDEF || ret == IF || - ret == IFDEF || ret == IFNDEF || ret == ELIF || ret == ELSE || - ret == ENDIF || ret == HASH_TOKEN) { - parser->in_control_line = 1; - } else if (ret == IDENTIFIER) { - struct hash_entry *entry = _mesa_hash_table_search(parser->defines, - yylval->str); - macro_t *macro = entry ? entry->data : NULL; - if (macro && macro->is_function) { - parser->newline_as_space = 1; - parser->paren_count = 0; - } - } - - return ret; - } - - node = parser->lex_from_node; - - if (node == NULL) { - parser->lex_from_list = NULL; - return NEWLINE; - } - - *yylval = node->token->value; - ret = node->token->type; - - parser->lex_from_node = node->next; - - return ret; -} - -static void -glcpp_parser_lex_from(glcpp_parser_t *parser, token_list_t *list) -{ - token_node_t *node; - - assert (parser->lex_from_list == NULL); - - /* Copy list, eliminating any space tokens. */ - parser->lex_from_list = _token_list_create (parser); - - for (node = list->head; node; node = node->next) { - if (node->token->type == SPACE) - continue; - _token_list_append (parser, parser->lex_from_list, node->token); - } - - parser->lex_from_node = parser->lex_from_list->head; - - /* It's possible the list consisted of nothing but whitespace. */ - if (parser->lex_from_node == NULL) { - parser->lex_from_list = NULL; - } -} - -static void -_glcpp_parser_skip_stack_push_if(glcpp_parser_t *parser, YYLTYPE *loc, - int condition) -{ - skip_type_t current = SKIP_NO_SKIP; - skip_node_t *node; - - if (parser->skip_stack) - current = parser->skip_stack->type; - - node = linear_alloc_child(parser->linalloc, sizeof(skip_node_t)); - node->loc = *loc; - - if (current == SKIP_NO_SKIP) { - if (condition) - node->type = SKIP_NO_SKIP; - else - node->type = SKIP_TO_ELSE; - } else { - node->type = SKIP_TO_ENDIF; - } - - node->has_else = false; - node->next = parser->skip_stack; - parser->skip_stack = node; -} - -static void -_glcpp_parser_skip_stack_change_if(glcpp_parser_t *parser, YYLTYPE *loc, - const char *type, int condition) -{ - if (parser->skip_stack == NULL) { - glcpp_error (loc, parser, "#%s without #if\n", type); - return; - } - - if (parser->skip_stack->type == SKIP_TO_ELSE) { - if (condition) - parser->skip_stack->type = SKIP_NO_SKIP; - } else { - parser->skip_stack->type = SKIP_TO_ENDIF; - } -} - -static void -_glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, YYLTYPE *loc) -{ - skip_node_t *node; - - if (parser->skip_stack == NULL) { - glcpp_error (loc, parser, "#endif without #if\n"); - return; - } - - node = parser->skip_stack; - parser->skip_stack = node->next; -} - -static void -_glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version, - const char *identifier, - bool explicitly_set) -{ - if (parser->version_set) - return; - - parser->version = version; - parser->version_set = true; - - add_builtin_define (parser, "__VERSION__", version); - - parser->is_gles = (version == 100) || - (identifier && (strcmp(identifier, "es") == 0)); - bool is_compat = version >= 150 && identifier && - strcmp(identifier, "compatibility") == 0; - - /* Add pre-defined macros. */ - if (parser->is_gles) - add_builtin_define(parser, "GL_ES", 1); - else if (is_compat) - add_builtin_define(parser, "GL_compatibility_profile", 1); - else if (version >= 150) - add_builtin_define(parser, "GL_core_profile", 1); - - /* Currently, all ES2/ES3 implementations support highp in the - * fragment shader, so we always define this macro in ES2/ES3. - * If we ever get a driver that doesn't support highp, we'll - * need to add a flag to the gl_context and check that here. - */ - if (version >= 130 || parser->is_gles) - add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1); - - /* Add all the extension macros available in this context */ - if (parser->extensions) - parser->extensions(parser->state, add_builtin_define, parser, - version, parser->is_gles); - - if (parser->extension_list) { - /* If MESA_shader_integer_functions is supported, then the building - * blocks required for the 64x64 => 64 multiply exist. Add defines for - * those functions so that they can be tested. - */ - if (parser->extension_list->MESA_shader_integer_functions) { - add_builtin_define(parser, "__have_builtin_builtin_udiv64", 1); - add_builtin_define(parser, "__have_builtin_builtin_umod64", 1); - add_builtin_define(parser, "__have_builtin_builtin_idiv64", 1); - add_builtin_define(parser, "__have_builtin_builtin_imod64", 1); - } - } - - if (explicitly_set) { - _mesa_string_buffer_printf(parser->output, - "#version %" PRIiMAX "%s%s", version, - identifier ? " " : "", - identifier ? identifier : ""); - } -} - -/* GLSL version if no version is explicitly specified. */ -#define IMPLICIT_GLSL_VERSION 110 - -/* GLSL ES version if no version is explicitly specified. */ -#define IMPLICIT_GLSL_ES_VERSION 100 - -void -glcpp_parser_resolve_implicit_version(glcpp_parser_t *parser) -{ - int language_version = parser->api == API_OPENGLES2 ? - IMPLICIT_GLSL_ES_VERSION : IMPLICIT_GLSL_VERSION; - - _glcpp_parser_handle_version_declaration(parser, language_version, - NULL, false); -} - -static void -glcpp_parser_copy_defines(const void *key, void *data, void *closure) -{ - struct define_include *di = (struct define_include *) closure; - macro_t *macro = (macro_t *) data; - - /* If we hit an error on a previous pass, just return */ - if (di->parser->error) - return; - - const char *identifier = macro->identifier; - struct hash_entry *entry = _mesa_hash_table_search(di->parser->defines, - identifier); - - macro_t *previous = entry ? entry->data : NULL; - if (previous) { - if (_macro_equal(macro, previous)) { - return; - } - glcpp_error(di->loc, di->parser, "Redefinition of macro %s\n", - identifier); - } - - _mesa_hash_table_insert(di->parser->defines, identifier, macro); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp.c deleted file mode 100644 index a558157..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include -#include - -#include "glcpp.h" -#include "../../../mesa/main/mtypes.h" -#include "../../../mesa/main/shaderobj.h" -#include "../../../util/strtod.h" - -extern int glcpp_parser_debug; - -void -_mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, - struct gl_shader *sh) -{ - (void) ctx; - *ptr = sh; -} - -/* Read from fp until EOF and return a string of everything read. - */ -static char * -load_text_fp (void *ctx, FILE *fp) -{ -#define CHUNK 4096 - char *text = NULL; - size_t text_size = 0; - size_t total_read = 0; - size_t bytes; - - while (1) { - if (total_read + CHUNK + 1 > text_size) { - text_size = text_size ? text_size * 2 : CHUNK + 1; - text = reralloc_size (ctx, text, text_size); - if (text == NULL) { - fprintf (stderr, "Out of memory\n"); - return NULL; - } - } - bytes = fread (text + total_read, 1, CHUNK, fp); - total_read += bytes; - - if (bytes < CHUNK) { - break; - } - } - - text[total_read] = '\0'; - - return text; -} - -static char * -load_text_file(void *ctx, const char *filename) -{ - char *text; - FILE *fp; - - if (filename == NULL || strcmp (filename, "-") == 0) - return load_text_fp (ctx, stdin); - - fp = fopen (filename, "r"); - if (fp == NULL) { - fprintf (stderr, "Failed to open file %s: %s\n", - filename, strerror (errno)); - return NULL; - } - - text = load_text_fp (ctx, fp); - - fclose(fp); - - return text; -} - -/* Initialize only those things that glcpp cares about. - */ -static void -init_fake_gl_context (struct gl_context *gl_ctx) -{ - memset(gl_ctx, 0, sizeof(*gl_ctx)); - gl_ctx->API = API_OPENGL_COMPAT; - gl_ctx->Const.DisableGLSLLineContinuations = false; -} - -static void -usage (void) -{ - fprintf (stderr, - "Usage: glcpp [OPTIONS] [--] []\n" - "\n" - "Pre-process the given filename (stdin if no filename given).\n" - "The following options are supported:\n" - " --disable-line-continuations Do not interpret lines ending with a\n" - " backslash ('\\') as a line continuation.\n"); -} - -enum { - DISABLE_LINE_CONTINUATIONS_OPT = CHAR_MAX + 1 -}; - -static const struct option -long_options[] = { - {"disable-line-continuations", no_argument, 0, DISABLE_LINE_CONTINUATIONS_OPT }, - {"debug", no_argument, 0, 'd'}, - {0, 0, 0, 0 } -}; - -int -main (int argc, char *argv[]) -{ - char *filename = NULL; - void *ctx = ralloc(NULL, void*); - char *info_log = ralloc_strdup(ctx, ""); - const char *shader; - int ret; - struct gl_context gl_ctx; - int c; - - init_fake_gl_context (&gl_ctx); - - while ((c = getopt_long(argc, argv, "d", long_options, NULL)) != -1) { - switch (c) { - case DISABLE_LINE_CONTINUATIONS_OPT: - gl_ctx.Const.DisableGLSLLineContinuations = true; - break; - case 'd': - glcpp_parser_debug = 1; - break; - default: - usage (); - exit (1); - } - } - - if (optind + 1 < argc) { - printf ("Unexpected argument: %s\n", argv[optind+1]); - usage (); - exit (1); - } - if (optind < argc) { - filename = argv[optind]; - } - - shader = load_text_file (ctx, filename); - if (shader == NULL) - return 1; - - _mesa_locale_init(); - - ret = glcpp_preprocess(ctx, &shader, &info_log, NULL, NULL, &gl_ctx); - - printf("%s", shader); - fprintf(stderr, "%s", info_log); - - ralloc_free(ctx); - - return ret; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp.h deleted file mode 100644 index 587295c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/glcpp.h +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLCPP_H -#define GLCPP_H - -#include -#include - -#include "../../../mesa/main/menums.h" - -#include "../../../util/ralloc.h" - -#include "../../../util/hash_table.h" - -#include "../../../util/string_buffer.h" - -struct gl_context; - -#define yyscan_t void* - -/* Some data types used for parser values. */ - -typedef struct expression_value { - intmax_t value; - char *undefined_macro; -} expression_value_t; - - -typedef struct string_node { - const char *str; - struct string_node *next; -} string_node_t; - -typedef struct string_list { - string_node_t *head; - string_node_t *tail; -} string_list_t; - -typedef struct token token_t; -typedef struct token_list token_list_t; - -typedef union YYSTYPE -{ - intmax_t ival; - expression_value_t expression_value; - char *str; - string_list_t *string_list; - token_t *token; - token_list_t *token_list; -} YYSTYPE; - -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 - -typedef struct YYLTYPE { - int first_line; - int first_column; - int last_line; - int last_column; - unsigned source; -} YYLTYPE; -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 - -# define YYLLOC_DEFAULT(Current, Rhs, N) \ -do { \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC(Rhs, N).last_column; \ - (Current).source = YYRHSLOC(Rhs, N).source; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC(Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC(Rhs, 0).last_column; \ - (Current).source = YYRHSLOC(Rhs, 0).source; \ - } \ -} while (0) - -struct token { - bool expanding; - int type; - YYSTYPE value; - YYLTYPE location; -}; - -typedef struct token_node { - token_t *token; - struct token_node *next; -} token_node_t; - -struct token_list { - token_node_t *head; - token_node_t *tail; - token_node_t *non_space_tail; -}; - -typedef struct argument_node { - token_list_t *argument; - struct argument_node *next; -} argument_node_t; - -typedef struct argument_list { - argument_node_t *head; - argument_node_t *tail; -} argument_list_t; - -typedef struct glcpp_parser glcpp_parser_t; - -typedef enum { - TOKEN_CLASS_IDENTIFIER, - TOKEN_CLASS_IDENTIFIER_FINALIZED, - TOKEN_CLASS_FUNC_MACRO, - TOKEN_CLASS_OBJ_MACRO -} token_class_t; - -token_class_t -glcpp_parser_classify_token (glcpp_parser_t *parser, - const char *identifier, - int *parameter_index); - -typedef struct { - int is_function; - string_list_t *parameters; - const char *identifier; - token_list_t *replacements; -} macro_t; - -typedef struct expansion_node { - macro_t *macro; - token_node_t *replacements; - struct expansion_node *next; -} expansion_node_t; - -typedef enum skip_type { - SKIP_NO_SKIP, - SKIP_TO_ELSE, - SKIP_TO_ENDIF -} skip_type_t; - -typedef struct skip_node { - skip_type_t type; - bool has_else; - YYLTYPE loc; /* location of the initial #if/#elif/... */ - struct skip_node *next; -} skip_node_t; - -typedef struct active_list { - const char *identifier; - token_node_t *marker; - struct active_list *next; -} active_list_t; - -struct _mesa_glsl_parse_state; - -typedef void (*glcpp_extension_iterator)( - struct _mesa_glsl_parse_state *state, - void (*add_builtin_define)(glcpp_parser_t *, const char *, int), - glcpp_parser_t *data, - unsigned version, - bool es); - -struct glcpp_parser { - void *linalloc; - yyscan_t scanner; - struct hash_table *defines; - active_list_t *active; - int lexing_directive; - int lexing_version_directive; - int space_tokens; - int last_token_was_newline; - int last_token_was_space; - int first_non_space_token_this_line; - int newline_as_space; - int in_control_line; - bool in_define; - int paren_count; - int commented_newlines; - skip_node_t *skip_stack; - int skipping; - token_list_t *lex_from_list; - token_node_t *lex_from_node; - struct _mesa_string_buffer *output; - struct _mesa_string_buffer *info_log; - int error; - glcpp_extension_iterator extensions; - const struct gl_extensions *extension_list; - void *state; - gl_api api; - struct gl_context *gl_ctx; - unsigned version; - - /** - * Has the #version been set? - * - * A separate flag is used because any possible sentinel value in - * \c ::version could also be set by a #version line. - */ - bool version_set; - - bool has_new_line_number; - int new_line_number; - bool has_new_source_number; - int new_source_number; - bool is_gles; -}; - -glcpp_parser_t * -glcpp_parser_create(struct gl_context *gl_ctx, - glcpp_extension_iterator extensions, void *state); - -int -glcpp_parser_parse (glcpp_parser_t *parser); - -void -glcpp_parser_destroy (glcpp_parser_t *parser); - -void -glcpp_parser_resolve_implicit_version(glcpp_parser_t *parser); - -int -glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, - glcpp_extension_iterator extensions, void *state, - struct gl_context *g_ctx); - -/* Functions for writing to the info log */ - -void -glcpp_error (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...); - -void -glcpp_warning (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...); - -/* Generated by glcpp-lex.l to glcpp-lex.c */ - -int -glcpp_lex_init_extra (glcpp_parser_t *parser, yyscan_t* scanner); - -void -glcpp_lex_set_source_string(glcpp_parser_t *parser, const char *shader); - -int -glcpp_lex (YYSTYPE *lvalp, YYLTYPE *llocp, yyscan_t scanner); - -int -glcpp_lex_destroy (yyscan_t scanner); - -/* Generated by glcpp-parse.y to glcpp-parse.c */ - -int -yyparse (glcpp_parser_t *parser); - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/meson.build b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/meson.build deleted file mode 100644 index b3ea48a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/meson.build +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright © 2017 Intel Corporation - -# 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 THE -# AUTHORS OR COPYRIGHT HOLDERS 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. - -bison_command = [] -if yacc_is_bison - bison_command = [ - prog_bison, '-o', '@OUTPUT0@', '-p', 'glcpp_parser_', - '--defines=@OUTPUT1@', '@INPUT@', - ] -else - bison_command = [ - prog_bison, '-o', '@OUTPUT0@', '-p', 'glcpp_parser_', - '-H', '@OUTPUT1@', '@INPUT@', - ] -endif - -glcpp_parse = custom_target( - 'glcpp-parse.[ch]', - input : 'glcpp-parse.y', - output : ['glcpp-parse.c', 'glcpp-parse.h'], - command : bison_command -) - -glcpp_lex = custom_target( - 'glcpp-lex.c', - input : 'glcpp-lex.l', - output : 'glcpp-lex.c', - command : [prog_flex, '-o', '@OUTPUT@', '@INPUT@'], -) - -libglcpp = static_library( - 'glcpp', - [glcpp_lex, glcpp_parse, files('glcpp.h', 'pp.c')], - dependencies : idep_mesautil, - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - c_args : [no_override_init_args, c_msvc_compat_args], - cpp_args : [cpp_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - build_by_default : false, -) - -libglcpp_standalone = static_library( - 'glcpp_standalone', - 'pp_standalone_scaffolding.c', - link_with : libglcpp, - dependencies : idep_mesautil, - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - c_args : [no_override_init_args, c_msvc_compat_args], - cpp_args : [cpp_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - build_by_default : false, -) - -glcpp = executable( - 'glcpp', - 'glcpp.c', - dependencies : [dep_m, idep_getopt, idep_mesautil], - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - link_with : [libglcpp_standalone, libglsl_util], - c_args : [no_override_init_args, c_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - build_by_default : false, -) - -# Meson can't auto-skip these on cross builds because of the python wrapper -if with_any_opengl and with_tests and meson.can_run_host_binaries() and \ - with_glcpp_tests - modes = ['unix', 'windows', 'oldmac', 'bizarro'] - - foreach m : modes - test( - 'glcpp test (@0@)'.format(m), - prog_python, - args : [ - files('tests/glcpp_test.py'), - glcpp, join_paths(meson.current_source_dir(), 'tests'), - '--@0@'.format(m), - ], - suite : ['compiler', 'glcpp'], - timeout: 60, - ) - endforeach -endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp.c deleted file mode 100644 index f022717..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include -#include "glcpp.h" -#include "../../../mesa/main/mtypes.h" - -void -glcpp_error (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...) -{ - va_list ap; - - parser->error = 1; - _mesa_string_buffer_printf(parser->info_log, - "%u:%u(%u): " - "preprocessor error: ", - locp->source, - locp->first_line, - locp->first_column); - va_start(ap, fmt); - _mesa_string_buffer_vprintf(parser->info_log, fmt, ap); - va_end(ap); - _mesa_string_buffer_append_char(parser->info_log, '\n'); -} - -void -glcpp_warning (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...) -{ - va_list ap; - - _mesa_string_buffer_printf(parser->info_log, - "%u:%u(%u): " - "preprocessor warning: ", - locp->source, - locp->first_line, - locp->first_column); - va_start(ap, fmt); - _mesa_string_buffer_vprintf(parser->info_log, fmt, ap); - va_end(ap); - _mesa_string_buffer_append_char(parser->info_log, '\n'); -} - -/* Given str, (that's expected to start with a newline terminator of some - * sort), return a pointer to the first character in str after the newline. - * - * A newline terminator can be any of the following sequences: - * - * "\r\n" - * "\n\r" - * "\n" - * "\r" - * - * And the longest such sequence will be skipped. - */ -static const char * -skip_newline (const char *str) -{ - const char *ret = str; - - if (ret == NULL) - return ret; - - if (*ret == '\0') - return ret; - - if (*ret == '\r') { - ret++; - if (*ret && *ret == '\n') - ret++; - } else if (*ret == '\n') { - ret++; - if (*ret && *ret == '\r') - ret++; - } - - return ret; -} - -/* Initial output buffer size, 4096 minus ralloc() overhead. It was selected - * to minimize total amount of allocated memory during shader-db run. - */ -#define INITIAL_PP_OUTPUT_BUF_SIZE 4048 - -/* Remove any line continuation characters in the shader, (whether in - * preprocessing directives or in GLSL code). - */ -static char * -remove_line_continuations(glcpp_parser_t *ctx, const char *shader) -{ - struct _mesa_string_buffer *sb = - _mesa_string_buffer_create(ctx, INITIAL_PP_OUTPUT_BUF_SIZE); - - const char *backslash, *newline, *search_start; - const char *cr, *lf; - char newline_separator[3]; - int collapsed_newlines = 0; - int separator_len; - - backslash = strchr(shader, '\\'); - - /* No line continuations were found in this shader, our job is done */ - if (backslash == NULL) - return (char *) shader; - - search_start = shader; - - /* Determine what flavor of newlines this shader is using. GLSL - * provides for 4 different possible ways to separate lines, (using - * one or two characters): - * - * "\n" (line-feed, like Linux, Unix, and new Mac OS) - * "\r" (carriage-return, like old Mac files) - * "\r\n" (carriage-return + line-feed, like DOS files) - * "\n\r" (line-feed + carriage-return, like nothing, really) - * - * This code explicitly supports a shader that uses a mixture of - * newline terminators and will properly handle line continuation - * backslashes followed by any of the above. - * - * But, since we must also insert additional newlines in the output - * (for any collapsed lines) we attempt to maintain consistency by - * examining the first encountered newline terminator, and using the - * same terminator for any newlines we insert. - */ - cr = strchr(search_start, '\r'); - lf = strchr(search_start, '\n'); - - newline_separator[0] = '\n'; - newline_separator[1] = '\0'; - newline_separator[2] = '\0'; - - if (cr == NULL) { - /* Nothing to do. */ - } else if (lf == NULL) { - newline_separator[0] = '\r'; - } else if (lf == cr + 1) { - newline_separator[0] = '\r'; - newline_separator[1] = '\n'; - } else if (cr == lf + 1) { - newline_separator[0] = '\n'; - newline_separator[1] = '\r'; - } - separator_len = strlen(newline_separator); - - while (true) { - /* If we have previously collapsed any line-continuations, - * then we want to insert additional newlines at the next - * occurrence of a newline character to avoid changing any - * line numbers. - */ - if (collapsed_newlines) { - cr = strchr (search_start, '\r'); - lf = strchr (search_start, '\n'); - if (cr && lf) - newline = cr < lf ? cr : lf; - else if (cr) - newline = cr; - else - newline = lf; - if (newline && - (backslash == NULL || newline < backslash)) - { - _mesa_string_buffer_append_len(sb, shader, - newline - shader + 1); - while (collapsed_newlines) { - _mesa_string_buffer_append_len(sb, - newline_separator, - separator_len); - collapsed_newlines--; - } - shader = skip_newline (newline); - search_start = shader; - } - } - - if (backslash == NULL) - break; - - search_start = backslash + 1; - - /* At each line continuation, (backslash followed by a - * newline), copy all preceding text to the output, then - * advance the shader pointer to the character after the - * newline. - */ - if (backslash[1] == '\r' || backslash[1] == '\n') - { - collapsed_newlines++; - _mesa_string_buffer_append_len(sb, shader, backslash - shader); - shader = skip_newline (backslash + 1); - search_start = shader; - } - - backslash = strchr(search_start, '\\'); - } - - _mesa_string_buffer_append(sb, shader); - - return sb->buf; -} - -int -glcpp_preprocess(void *ralloc_ctx, const char **shader, char **info_log, - glcpp_extension_iterator extensions, void *state, - struct gl_context *gl_ctx) -{ - int errors; - glcpp_parser_t *parser = - glcpp_parser_create(gl_ctx, extensions, state); - - if (! gl_ctx->Const.DisableGLSLLineContinuations) - *shader = remove_line_continuations(parser, *shader); - - glcpp_lex_set_source_string (parser, *shader); - - glcpp_parser_parse (parser); - - if (parser->skip_stack) - glcpp_error (&parser->skip_stack->loc, parser, "Unterminated #if\n"); - - glcpp_parser_resolve_implicit_version(parser); - - ralloc_strcat(info_log, parser->info_log->buf); - - /* Crimp the buffer first, to conserve memory */ - _mesa_string_buffer_crimp_to_fit(parser->output); - - ralloc_steal(ralloc_ctx, parser->output->buf); - *shader = parser->output->buf; - - errors = parser->error; - glcpp_parser_destroy (parser); - return errors; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c deleted file mode 100644 index 063b055..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright © 2019 Timothy Arceri - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* This file declares stripped-down versions of functions that - * normally exist outside of the glsl folder, so that they can be used - * when running the GLSL compiler standalone (for unit testing or - * compiling builtins). - */ - -#include "pp_standalone_scaffolding.h" - -const char * -_mesa_lookup_shader_include(struct gl_context *ctx, char *path, - bool error_check) -{ - (void) ctx; - (void) path; - (void) error_check; - - return NULL; -} - -size_t -_mesa_get_shader_include_cursor(struct gl_shared_state *shared) -{ - (void) shared; - - return 0; -} - -void -_mesa_set_shader_include_cursor(struct gl_shared_state *shared, - size_t cursor) -{ - (void) shared; - (void) cursor; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h deleted file mode 100644 index a6c18be..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2019 Timothy Arceri - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* This file declares stripped-down versions of functions that - * normally exist outside of the glcpp folder, so that they can be used - * when running the GLSL compiler standalone (for unit testing or - * compiling builtins). - */ - -#ifndef PP_STANDALONE_SCAFFOLDING_H -#define PP_STANDALONE_SCAFFOLDING_H - -#include -#include "../../../mesa/main/mtypes.h" - -const char * -_mesa_lookup_shader_include(struct gl_context *ctx, char *path, - bool error_check); - -size_t -_mesa_get_shader_include_cursor(struct gl_shared_state *shared); - -void -_mesa_set_shader_include_cursor(struct gl_shared_state *shared, - size_t cursor); - -#endif /* PP_STANDALONE_SCAFFOLDING_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_compiler b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_compiler deleted file mode 100755 index 2640258..0000000 Binary files a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_compiler and /dev/null differ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_lexer.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_lexer.cpp deleted file mode 100644 index 0b36f5e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_lexer.cpp +++ /dev/null @@ -1,4760 +0,0 @@ -#line 2 "src/compiler/glsl/glsl_lexer.cpp" - -#line 4 "src/compiler/glsl/glsl_lexer.cpp" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 4 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -#ifdef yy_create_buffer -#define _mesa_glsl_lexer__create_buffer_ALREADY_DEFINED -#else -#define yy_create_buffer _mesa_glsl_lexer__create_buffer -#endif - -#ifdef yy_delete_buffer -#define _mesa_glsl_lexer__delete_buffer_ALREADY_DEFINED -#else -#define yy_delete_buffer _mesa_glsl_lexer__delete_buffer -#endif - -#ifdef yy_scan_buffer -#define _mesa_glsl_lexer__scan_buffer_ALREADY_DEFINED -#else -#define yy_scan_buffer _mesa_glsl_lexer__scan_buffer -#endif - -#ifdef yy_scan_string -#define _mesa_glsl_lexer__scan_string_ALREADY_DEFINED -#else -#define yy_scan_string _mesa_glsl_lexer__scan_string -#endif - -#ifdef yy_scan_bytes -#define _mesa_glsl_lexer__scan_bytes_ALREADY_DEFINED -#else -#define yy_scan_bytes _mesa_glsl_lexer__scan_bytes -#endif - -#ifdef yy_init_buffer -#define _mesa_glsl_lexer__init_buffer_ALREADY_DEFINED -#else -#define yy_init_buffer _mesa_glsl_lexer__init_buffer -#endif - -#ifdef yy_flush_buffer -#define _mesa_glsl_lexer__flush_buffer_ALREADY_DEFINED -#else -#define yy_flush_buffer _mesa_glsl_lexer__flush_buffer -#endif - -#ifdef yy_load_buffer_state -#define _mesa_glsl_lexer__load_buffer_state_ALREADY_DEFINED -#else -#define yy_load_buffer_state _mesa_glsl_lexer__load_buffer_state -#endif - -#ifdef yy_switch_to_buffer -#define _mesa_glsl_lexer__switch_to_buffer_ALREADY_DEFINED -#else -#define yy_switch_to_buffer _mesa_glsl_lexer__switch_to_buffer -#endif - -#ifdef yypush_buffer_state -#define _mesa_glsl_lexer_push_buffer_state_ALREADY_DEFINED -#else -#define yypush_buffer_state _mesa_glsl_lexer_push_buffer_state -#endif - -#ifdef yypop_buffer_state -#define _mesa_glsl_lexer_pop_buffer_state_ALREADY_DEFINED -#else -#define yypop_buffer_state _mesa_glsl_lexer_pop_buffer_state -#endif - -#ifdef yyensure_buffer_stack -#define _mesa_glsl_lexer_ensure_buffer_stack_ALREADY_DEFINED -#else -#define yyensure_buffer_stack _mesa_glsl_lexer_ensure_buffer_stack -#endif - -#ifdef yylex -#define _mesa_glsl_lexer_lex_ALREADY_DEFINED -#else -#define yylex _mesa_glsl_lexer_lex -#endif - -#ifdef yyrestart -#define _mesa_glsl_lexer_restart_ALREADY_DEFINED -#else -#define yyrestart _mesa_glsl_lexer_restart -#endif - -#ifdef yylex_init -#define _mesa_glsl_lexer_lex_init_ALREADY_DEFINED -#else -#define yylex_init _mesa_glsl_lexer_lex_init -#endif - -#ifdef yylex_init_extra -#define _mesa_glsl_lexer_lex_init_extra_ALREADY_DEFINED -#else -#define yylex_init_extra _mesa_glsl_lexer_lex_init_extra -#endif - -#ifdef yylex_destroy -#define _mesa_glsl_lexer_lex_destroy_ALREADY_DEFINED -#else -#define yylex_destroy _mesa_glsl_lexer_lex_destroy -#endif - -#ifdef yyget_debug -#define _mesa_glsl_lexer_get_debug_ALREADY_DEFINED -#else -#define yyget_debug _mesa_glsl_lexer_get_debug -#endif - -#ifdef yyset_debug -#define _mesa_glsl_lexer_set_debug_ALREADY_DEFINED -#else -#define yyset_debug _mesa_glsl_lexer_set_debug -#endif - -#ifdef yyget_extra -#define _mesa_glsl_lexer_get_extra_ALREADY_DEFINED -#else -#define yyget_extra _mesa_glsl_lexer_get_extra -#endif - -#ifdef yyset_extra -#define _mesa_glsl_lexer_set_extra_ALREADY_DEFINED -#else -#define yyset_extra _mesa_glsl_lexer_set_extra -#endif - -#ifdef yyget_in -#define _mesa_glsl_lexer_get_in_ALREADY_DEFINED -#else -#define yyget_in _mesa_glsl_lexer_get_in -#endif - -#ifdef yyset_in -#define _mesa_glsl_lexer_set_in_ALREADY_DEFINED -#else -#define yyset_in _mesa_glsl_lexer_set_in -#endif - -#ifdef yyget_out -#define _mesa_glsl_lexer_get_out_ALREADY_DEFINED -#else -#define yyget_out _mesa_glsl_lexer_get_out -#endif - -#ifdef yyset_out -#define _mesa_glsl_lexer_set_out_ALREADY_DEFINED -#else -#define yyset_out _mesa_glsl_lexer_set_out -#endif - -#ifdef yyget_leng -#define _mesa_glsl_lexer_get_leng_ALREADY_DEFINED -#else -#define yyget_leng _mesa_glsl_lexer_get_leng -#endif - -#ifdef yyget_text -#define _mesa_glsl_lexer_get_text_ALREADY_DEFINED -#else -#define yyget_text _mesa_glsl_lexer_get_text -#endif - -#ifdef yyget_lineno -#define _mesa_glsl_lexer_get_lineno_ALREADY_DEFINED -#else -#define yyget_lineno _mesa_glsl_lexer_get_lineno -#endif - -#ifdef yyset_lineno -#define _mesa_glsl_lexer_set_lineno_ALREADY_DEFINED -#else -#define yyset_lineno _mesa_glsl_lexer_set_lineno -#endif - -#ifdef yyget_column -#define _mesa_glsl_lexer_get_column_ALREADY_DEFINED -#else -#define yyget_column _mesa_glsl_lexer_get_column -#endif - -#ifdef yyset_column -#define _mesa_glsl_lexer_set_column_ALREADY_DEFINED -#else -#define yyset_column _mesa_glsl_lexer_set_column -#endif - -#ifdef yywrap -#define _mesa_glsl_lexer_wrap_ALREADY_DEFINED -#else -#define yywrap _mesa_glsl_lexer_wrap -#endif - -#ifdef yyget_lval -#define _mesa_glsl_lexer_get_lval_ALREADY_DEFINED -#else -#define yyget_lval _mesa_glsl_lexer_get_lval -#endif - -#ifdef yyset_lval -#define _mesa_glsl_lexer_set_lval_ALREADY_DEFINED -#else -#define yyset_lval _mesa_glsl_lexer_set_lval -#endif - -#ifdef yyget_lloc -#define _mesa_glsl_lexer_get_lloc_ALREADY_DEFINED -#else -#define yyget_lloc _mesa_glsl_lexer_get_lloc -#endif - -#ifdef yyset_lloc -#define _mesa_glsl_lexer_set_lloc_ALREADY_DEFINED -#else -#define yyset_lloc _mesa_glsl_lexer_set_lloc -#endif - -#ifdef yyalloc -#define _mesa_glsl_lexer_alloc_ALREADY_DEFINED -#else -#define yyalloc _mesa_glsl_lexer_alloc -#endif - -#ifdef yyrealloc -#define _mesa_glsl_lexer_realloc_ALREADY_DEFINED -#else -#define yyrealloc _mesa_glsl_lexer_realloc -#endif - -#ifdef yyfree -#define _mesa_glsl_lexer_free_ALREADY_DEFINED -#else -#define yyfree _mesa_glsl_lexer_free -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include -#include -#include -#include - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have . Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#ifndef SIZE_MAX -#define SIZE_MAX (~(size_t)0) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -/* begin standard C++ headers. */ - -/* TODO: this is always defined, so inline it */ -#define yyconst const - -#if defined(__GNUC__) && __GNUC__ >= 3 -#define yynoreturn __attribute__((__noreturn__)) -#else -#define yynoreturn -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an - * integer in range [0..255] for use as an array index. - */ -#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) - -/* An opaque pointer. */ -#ifndef YY_TYPEDEF_YY_SCANNER_T -#define YY_TYPEDEF_YY_SCANNER_T -typedef void* yyscan_t; -#endif - -/* For convenience, these vars (plus the bison vars far below) - are macros in the reentrant scanner. */ -#define yyin yyg->yyin_r -#define yyout yyg->yyout_r -#define yyextra yyg->yyextra_r -#define yyleng yyg->yyleng_r -#define yytext yyg->yytext_r -#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) -#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) -#define yy_flex_debug yyg->yy_flex_debug_r - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yyg->yy_start = 1 + 2 * -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yyg->yy_start - 1) / 2) -#define YYSTATE YY_START -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin , yyscanner ) -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else -#define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - #define YY_LINENO_REWIND_TO(ptr) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = yyg->yy_hold_char; \ - YY_RESTORE_YY_MORE_OFFSET \ - yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) -#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - int yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ - ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ - : NULL) -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] - -void yyrestart ( FILE *input_file , yyscan_t yyscanner ); -void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); -void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); -void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); -void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); -void yypop_buffer_state ( yyscan_t yyscanner ); - -static void yyensure_buffer_stack ( yyscan_t yyscanner ); -static void yy_load_buffer_state ( yyscan_t yyscanner ); -static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); -#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) - -YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); - -void *yyalloc ( yy_size_t , yyscan_t yyscanner ); -void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); -void yyfree ( void * , yyscan_t yyscanner ); - -#define yy_new_buffer yy_create_buffer -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -/* Begin user sect3 */ - -#define _mesa_glsl_lexer_wrap(yyscanner) (/*CONSTCOND*/1) -#define YY_SKIP_YYWRAP -typedef flex_uint8_t YY_CHAR; - -typedef int yy_state_type; - -#define yytext_ptr yytext_r - -static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); -static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); -static int yy_get_next_buffer ( yyscan_t yyscanner ); -static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yyg->yytext_ptr = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - yyg->yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 280 -#define YY_END_OF_BUFFER 281 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static const flex_int16_t yy_accept[1112] = - { 0, - 0, 0, 20, 20, 0, 0, 281, 279, 1, 27, - 279, 279, 279, 279, 279, 279, 278, 279, 185, 183, - 279, 279, 279, 277, 279, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 279, 1, 279, 26, 20, - 25, 26, 24, 23, 21, 22, 18, 17, 1, 167, - 176, 168, 179, 173, 162, 175, 163, 182, 187, 174, - 188, 185, 0, 0, 185, 185, 0, 185, 183, 183, - 183, 183, 171, 164, 166, 165, 172, 277, 180, 170, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - - 277, 277, 277, 277, 36, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 40, - 277, 277, 68, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 181, 169, - 1, 0, 0, 2, 0, 0, 0, 0, 0, 20, - 19, 23, 22, 0, 187, 0, 0, 186, 0, 188, - 0, 0, 0, 189, 184, 177, 178, 277, 196, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 39, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 32, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 69, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 0, 0, 0, - 0, 0, 19, 0, 187, 191, 0, 186, 0, 0, - 0, 188, 192, 189, 0, 0, 184, 184, 184, 277, - - 277, 277, 30, 277, 277, 277, 254, 247, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 38, 199, 277, 277, 277, 277, 76, 277, 277, 204, - 217, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 214, 250, 56, 57, 58, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 202, 194, 277, 277, - 277, 33, 277, 277, 277, 277, 277, 277, 277, 53, - 54, 55, 160, 277, 277, 277, 0, 0, 0, 0, - - 0, 0, 186, 190, 193, 277, 277, 277, 34, 277, - 44, 45, 46, 277, 197, 277, 277, 29, 277, 277, - 277, 277, 228, 229, 230, 277, 225, 226, 227, 277, - 195, 277, 218, 31, 240, 241, 242, 252, 222, 223, - 224, 277, 277, 277, 277, 70, 220, 277, 277, 277, - 277, 47, 48, 49, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 79, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 215, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 198, - 277, 277, 249, 50, 51, 52, 277, 277, 37, 277, - - 0, 0, 0, 0, 0, 257, 277, 277, 72, 277, - 277, 255, 277, 277, 43, 277, 277, 277, 277, 216, - 211, 260, 277, 277, 277, 277, 277, 277, 277, 207, - 277, 277, 277, 277, 161, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 277, 277, 277, 277, 221, 203, - 277, 277, 209, 277, 277, 277, 42, 277, 267, 158, - 246, 77, 210, 159, 277, 258, 205, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 0, 0, - 0, 0, 0, 277, 277, 277, 277, 277, 206, 41, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 277, - - 270, 271, 272, 277, 277, 277, 277, 277, 115, 116, - 117, 277, 277, 269, 277, 277, 277, 251, 277, 277, - 277, 277, 114, 277, 277, 277, 277, 277, 277, 277, - 277, 200, 274, 275, 276, 277, 277, 277, 277, 277, - 277, 71, 277, 277, 73, 277, 277, 0, 0, 0, - 0, 0, 0, 277, 277, 74, 152, 35, 212, 126, - 127, 128, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 208, 277, 277, 277, - 155, 266, 154, 277, 277, 277, 277, 277, 277, 277, - 277, 201, 137, 138, 139, 277, 277, 273, 219, 277, - - 153, 277, 0, 5, 0, 8, 0, 0, 0, 16, - 3, 277, 28, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 124, 277, 277, 277, 119, 213, 75, 277, - 277, 277, 277, 277, 248, 277, 256, 253, 261, 80, - 81, 82, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 156, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 277, 277, 277, - 135, 277, 277, 130, 277, 277, 277, 277, 277, 277, - 277, 277, 91, 92, 93, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 268, 277, - - 277, 146, 277, 277, 141, 97, 98, 99, 277, 277, - 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 157, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 118, 277, 120, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 103, 277, 277, - 277, 277, 83, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 0, 7, 0, 0, - 0, 0, 0, 277, 277, 277, 129, 131, 277, 121, - 277, 122, 277, 277, 277, 277, 277, 104, 277, 277, - 94, 277, 277, 277, 277, 277, 277, 277, 277, 277, - - 277, 277, 277, 277, 277, 277, 140, 142, 277, 277, - 277, 105, 277, 277, 100, 0, 0, 0, 0, 132, - 133, 277, 277, 277, 148, 277, 277, 149, 277, 277, - 277, 277, 277, 277, 277, 78, 277, 277, 277, 277, - 243, 277, 244, 259, 277, 277, 277, 143, 144, 277, - 277, 277, 277, 277, 277, 277, 277, 0, 0, 0, - 0, 277, 277, 277, 277, 125, 123, 277, 277, 277, - 262, 264, 277, 84, 277, 85, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 263, 265, 277, - 0, 0, 0, 0, 0, 136, 134, 277, 277, 95, - - 96, 277, 277, 277, 86, 277, 277, 277, 87, 277, - 277, 277, 147, 145, 101, 102, 277, 277, 0, 0, - 0, 0, 0, 277, 277, 277, 277, 277, 277, 106, - 277, 109, 277, 277, 277, 277, 0, 0, 0, 0, - 0, 0, 277, 277, 107, 110, 277, 277, 277, 277, - 88, 277, 108, 111, 0, 0, 0, 9, 0, 0, - 0, 0, 150, 151, 277, 277, 277, 277, 113, 0, - 0, 10, 0, 0, 0, 0, 277, 277, 245, 277, - 0, 0, 0, 0, 0, 13, 89, 90, 277, 0, - 0, 0, 11, 0, 14, 277, 0, 0, 12, 112, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0 - } ; - -static const YY_CHAR yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 5, 6, 7, 8, 1, 9, 10, 1, 11, - 12, 13, 14, 1, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 23, 25, 25, 26, 1, 27, - 28, 29, 1, 1, 30, 31, 32, 33, 34, 35, - 36, 37, 37, 37, 37, 38, 39, 37, 40, 37, - 37, 41, 42, 43, 44, 37, 37, 45, 37, 37, - 1, 1, 1, 46, 47, 1, 48, 49, 50, 51, - - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 37, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 1, 73, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static const YY_CHAR yy_meta[74] = - { 0, - 1, 2, 3, 1, 4, 1, 5, 1, 1, 1, - 1, 1, 1, 1, 1, 6, 5, 7, 7, 7, - 7, 7, 7, 7, 7, 1, 1, 1, 1, 8, - 8, 8, 8, 9, 10, 11, 11, 12, 11, 11, - 11, 11, 11, 11, 11, 1, 11, 8, 8, 8, - 8, 9, 10, 11, 11, 11, 11, 11, 12, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 1 - } ; - -static const flex_int16_t yy_base[1127] = - { 0, - 0, 72, 80, 0, 1606, 1605, 1607, 1610, 74, 1610, - 1578, 1577, 144, 1576, 141, 142, 140, 1575, 157, 212, - 139, 1574, 155, 0, 128, 121, 126, 137, 151, 145, - 192, 1539, 144, 202, 160, 162, 177, 1533, 201, 190, - 218, 217, 221, 195, 165, 210, 288, 292, 1610, 296, - 1610, 1582, 1610, 284, 1610, 0, 1610, 1610, 308, 1610, - 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 343, 1610, - 385, 153, 283, 300, 1610, 1560, 0, 1538, 0, 1610, - 1558, 1536, 1566, 1610, 1610, 1610, 1565, 0, 1610, 1610, - 1526, 1531, 155, 1528, 1537, 1535, 1535, 1521, 1524, 1536, - - 271, 274, 1518, 1534, 1514, 1528, 1514, 1511, 1511, 1517, - 221, 213, 1511, 1522, 1507, 1513, 1517, 1518, 1547, 0, - 1508, 1519, 274, 1518, 1513, 1493, 136, 1497, 1511, 1501, - 282, 1494, 293, 1507, 1509, 263, 1488, 1496, 268, 1483, - 1492, 305, 307, 1497, 1492, 1495, 1483, 1486, 1526, 286, - 188, 293, 1495, 1482, 1495, 315, 1488, 1487, 1610, 1610, - 371, 380, 395, 1610, 1472, 1480, 1484, 1475, 1486, 382, - 0, 393, 0, 446, 1610, 1502, 1483, 393, 458, 1610, - 1500, 1481, 466, 457, 455, 1610, 1610, 1477, 0, 1472, - 1467, 1471, 1481, 1475, 1477, 306, 1460, 1460, 1472, 1463, - - 323, 1474, 1459, 1470, 1453, 1469, 1467, 1464, 1455, 1462, - 1448, 1446, 1459, 1444, 1461, 0, 1458, 1445, 1453, 1450, - 1454, 1435, 1454, 1447, 1444, 1432, 1431, 328, 1449, 1436, - 1445, 1432, 1439, 1429, 370, 1435, 1438, 1428, 1436, 1424, - 1428, 1419, 1434, 1433, 1423, 1430, 288, 1413, 1432, 1415, - 1413, 1412, 1423, 1412, 1407, 1405, 1407, 1418, 1403, 1405, - 1402, 1414, 1413, 1396, 1415, 1396, 368, 1405, 1400, 1398, - 1408, 1386, 404, 1405, 1407, 1395, 1387, 1386, 1401, 1389, - 1401, 1384, 0, 482, 459, 1610, 505, 1610, 1412, 1393, - 513, 504, 1610, 1610, 1410, 1391, 1610, 1405, 1383, 1373, - - 1384, 1383, 0, 1380, 1385, 413, 0, 0, 1372, 1370, - 1370, 1371, 1366, 1375, 1363, 1363, 1380, 420, 1368, 435, - 0, 0, 1362, 1373, 1372, 1372, 0, 1356, 523, 0, - 0, 1358, 526, 1368, 1365, 1366, 1356, 1350, 1349, 1392, - 1349, 1348, 1348, 529, 1343, 0, 0, 1339, 1338, 1337, - 1339, 1340, 1345, 1339, 1335, 1349, 1344, 1344, 1342, 1341, - 1334, 1328, 1330, 1329, 1332, 1332, 1338, 1323, 1326, 1321, - 1330, 1335, 1322, 1319, 1332, 1322, 0, 0, 1329, 1327, - 1324, 1353, 1314, 1314, 1320, 1310, 1318, 532, 1315, 0, - 0, 0, 0, 1304, 1317, 1316, 1315, 1307, 1313, 1310, - - 1298, 546, 520, 1610, 1610, 1310, 1311, 1311, 0, 1295, - 0, 0, 0, 1296, 0, 1305, 1295, 0, 1294, 1295, - 1301, 1288, 1281, 1280, 1279, 1296, 0, 0, 0, 1286, - 0, 1282, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1295, 1292, 555, 1291, 0, 0, 1295, 1288, 1284, - 1280, 0, 0, 0, 1272, 539, 560, 563, 1277, 1273, - 1279, 1269, 1267, 1281, 1265, 0, 1265, 1279, 1267, 1263, - 1270, 1264, 1276, 1271, 1271, 0, 1268, 1265, 1269, 1252, - 1250, 1253, 1260, 1266, 1261, 1262, 1259, 1288, 1245, 0, - 1247, 1248, 0, 0, 0, 0, 1245, 1249, 0, 1242, - - 1242, 1235, 448, 1241, 1244, 0, 1252, 1231, 0, 1241, - 1235, 0, 1228, 1228, 0, 1242, 568, 571, 574, 0, - 1244, 0, 577, 581, 1258, 1257, 1256, 1221, 1220, 0, - 1220, 1237, 1236, 1231, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1219, 1233, 1219, 1216, 0, 0, - 1222, 457, 0, 1218, 1226, 1225, 0, 1217, 1209, 0, - 0, 0, 0, 0, 1206, 0, 0, 1205, 1217, 583, - 587, 1222, 1208, 1215, 1214, 1211, 1205, 1202, 1197, 1210, - 609, 1212, 1197, 1191, 1191, 1205, 1189, 1202, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1194, - - 0, 0, 0, 1219, 1218, 1217, 1182, 1181, 432, 596, - 0, 1194, 1197, 0, 1195, 1183, 1179, 0, 1192, 1189, - 1188, 1177, 0, 1176, 1166, 1184, 1169, 1172, 620, 1177, - 1180, 0, 0, 0, 0, 1198, 1197, 1196, 1161, 1160, - 1160, 0, 1174, 1160, 0, 1171, 1163, 1165, 1168, 653, - 618, 506, 1158, 1162, 1165, 0, 0, 0, 0, 1186, - 606, 0, 1162, 1165, 1149, 1157, 1147, 1168, 1157, 1153, - 1154, 1154, 1153, 1138, 629, 1151, 0, 1152, 1140, 1139, - 0, 0, 0, 1135, 1165, 1164, 1163, 1128, 1127, 1123, - 1131, 0, 1161, 623, 0, 1137, 1140, 0, 0, 647, - - 0, 1117, 1125, 1610, 722, 1610, 681, 0, 641, 686, - 1610, 1125, 0, 1121, 1120, 1141, 1130, 1128, 1128, 1115, - 1130, 1113, 1146, 1125, 1126, 1121, 1142, 0, 0, 1138, - 1137, 1136, 1096, 1095, 0, 1078, 0, 0, 0, 580, - 651, 1102, 1085, 1087, 1069, 1080, 1066, 1065, 1084, 1072, - 1070, 1068, 1085, 1084, 1073, 1031, 1003, 0, 1008, 1061, - 754, 692, 704, 1024, 1013, 1001, 1015, 996, 997, 996, - 1029, 1008, 1005, 1026, 1007, 1003, 1005, 988, 985, 999, - 985, 984, 1017, 678, 0, 993, 996, 988, 979, 987, - 977, 997, 986, 982, 983, 981, 980, 979, 0, 960, - - 955, 988, 958, 23, 138, 188, 681, 0, 188, 210, - 1610, 269, 710, 728, 1610, 747, 0, 733, 306, 344, - 328, 335, 0, 353, 374, 365, 383, 395, 411, 425, - 436, 444, 453, 0, 459, 0, 476, 477, 492, 520, - 520, 524, 526, 541, 551, 568, 553, 594, 575, 594, - 607, 607, 640, 599, 617, 621, 616, 619, 623, 625, - 632, 646, 672, 664, 665, 669, 758, 1610, 777, 690, - 665, 678, 678, 680, 682, 690, 0, 0, 694, 720, - 695, 739, 735, 715, 737, 722, 723, 758, 739, 738, - 761, 740, 745, 743, 747, 732, 731, 747, 734, 737, - - 738, 748, 743, 734, 735, 743, 0, 0, 744, 745, - 746, 781, 762, 761, 784, 777, 762, 757, 762, 0, - 0, 771, 772, 766, 0, 767, 752, 0, 754, 778, - 779, 764, 763, 766, 767, 0, 761, 771, 763, 771, - 794, 775, 0, 0, 774, 791, 792, 0, 0, 793, - 794, 795, 796, 781, 780, 783, 784, 847, 848, 795, - 793, 784, 785, 809, 810, 0, 0, 789, 790, 798, - 0, 0, 799, 822, 796, 824, 819, 813, 800, 822, - 820, 813, 802, 803, 804, 805, 813, 0, 0, 814, - 877, 878, 879, 813, 832, 0, 0, 836, 837, 0, - - 0, 842, 843, 837, 0, 838, 823, 847, 0, 825, - 835, 858, 0, 0, 0, 0, 851, 852, 840, 900, - 850, 852, 904, 845, 846, 839, 841, 865, 866, 0, - 865, 875, 849, 885, 849, 850, 854, 870, 922, 924, - 926, 934, 856, 861, 0, 0, 881, 887, 878, 887, - 0, 901, 0, 0, 896, 943, 944, 1610, 948, 949, - 955, 905, 0, 0, 885, 890, 892, 915, 0, 900, - 963, 1610, 965, 916, 918, 971, 903, 905, 0, 927, - 923, 927, 979, 980, 985, 1610, 0, 0, 924, 940, - 993, 997, 1610, 998, 1610, 920, 932, 1002, 1610, 0, - - 928, 1010, 1011, 1018, 1023, 942, 947, 1024, 1028, 1610, - 1610, 1071, 1077, 1083, 1090, 1093, 1103, 1109, 1115, 1121, - 1127, 1138, 1139, 1146, 1157, 1158 - } ; - -static const flex_int16_t yy_def[1127] = - { 0, - 1111, 1, 1111, 3, 1112, 1112, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1113, 1111, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1114, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 19, 1115, 1111, 1111, 1111, 1116, 1111, 20, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1113, 1111, 1111, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1117, 1111, 1114, 1111, 1111, 1111, 1111, 71, 1111, 1111, - 1111, 1111, 1111, 1118, 1116, 1111, 1111, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1111, - 1111, 1111, 1117, 1111, 1119, 1111, 1111, 1111, 1111, 1111, - 1111, 1120, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1111, 1111, - - 1111, 1111, 1121, 1111, 1111, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - - 1111, 1111, 1111, 1111, 1111, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, - 1111, 1111, 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1111, - 1122, 1111, 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - - 1113, 1113, 1111, 1111, 1111, 1111, 1111, 1123, 1122, 1111, - 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1124, - 1111, 1125, 1123, 1111, 1111, 1111, 1111, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1111, 1124, 1111, 1111, 1111, 1111, 1126, 1125, 1111, 1111, - 1111, 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1126, 1111, - 1111, 1111, 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1111, 1111, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1111, - 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1111, 1111, 1111, 1111, 1111, 1113, 1113, 1113, 1113, 1113, - - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, - 1111, 1111, 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1113, 1113, 1111, 1111, 1111, 1111, - 1111, 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, 1113, 1113, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1113, 1113, 1113, 1113, - 1111, 1111, 1111, 1111, 1111, 1111, 1113, 1113, 1113, 1111, - 1111, 1111, 1111, 1111, 1111, 1113, 1111, 1111, 1111, 1113, - - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 0, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111 - } ; - -static const flex_int16_t yy_nxt[1684] = - { 0, - 8, 9, 10, 9, 9, 11, 8, 8, 12, 13, - 8, 8, 14, 15, 16, 17, 18, 19, 20, 20, - 20, 20, 20, 20, 20, 8, 21, 22, 23, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 25, 24, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 24, 24, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 24, - 24, 24, 46, 47, 859, 59, 47, 59, 59, 48, - 49, 50, 51, 50, 50, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 52, 53, 54, 54, - - 54, 54, 54, 54, 54, 55, 49, 49, 49, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 49, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 49, 62, 65, 89, 67, 69, 69, 69, - 69, 69, 69, 69, 69, 83, 84, 860, 66, 68, - 91, 63, 71, 90, 72, 72, 72, 72, 72, 72, - 72, 73, 86, 87, 98, 92, 93, 94, 99, 95, - 74, 116, 96, 97, 75, 100, 233, 1111, 101, 117, - - 76, 77, 102, 107, 234, 108, 103, 126, 74, 128, - 104, 118, 105, 129, 109, 75, 190, 861, 106, 157, - 191, 127, 1111, 78, 130, 119, 77, 71, 158, 79, - 79, 79, 79, 79, 79, 79, 79, 159, 131, 110, - 865, 136, 154, 267, 149, 74, 155, 111, 133, 80, - 112, 137, 268, 113, 120, 81, 156, 121, 866, 114, - 214, 122, 123, 74, 134, 138, 124, 135, 145, 125, - 80, 146, 139, 140, 215, 813, 150, 141, 82, 212, - 147, 151, 160, 142, 143, 152, 144, 148, 153, 161, - 213, 59, 161, 163, 164, 162, 163, 170, 71, 170, - - 170, 172, 172, 172, 172, 172, 172, 172, 172, 59, - 246, 59, 59, 183, 183, 251, 74, 184, 184, 184, - 184, 184, 184, 184, 184, 199, 202, 247, 248, 252, - 200, 201, 225, 203, 74, 226, 227, 238, 870, 228, - 269, 229, 241, 165, 239, 265, 266, 166, 270, 362, - 167, 340, 255, 363, 168, 257, 242, 307, 243, 169, - 69, 69, 69, 69, 69, 69, 69, 69, 256, 258, - 274, 308, 161, 275, 59, 161, 174, 175, 162, 341, - 176, 163, 164, 170, 163, 170, 170, 313, 314, 348, - 349, 350, 871, 872, 174, 175, 163, 164, 873, 163, - - 874, 177, 178, 178, 178, 178, 178, 178, 178, 178, - 172, 172, 172, 172, 172, 172, 172, 172, 179, 180, - 383, 875, 181, 390, 391, 392, 287, 288, 876, 384, - 289, 165, 411, 412, 413, 166, 179, 180, 167, 423, - 424, 425, 168, 182, 287, 288, 165, 169, 877, 581, - 166, 290, 581, 167, 427, 428, 429, 168, 878, 284, - 284, 665, 169, 285, 285, 285, 285, 285, 285, 285, - 285, 291, 291, 666, 879, 292, 292, 292, 292, 292, - 292, 292, 292, 184, 184, 184, 184, 184, 184, 184, - 184, 294, 297, 175, 295, 880, 176, 881, 298, 285, - - 285, 285, 285, 285, 285, 285, 285, 710, 623, 294, - 710, 175, 624, 297, 882, 296, 883, 177, 402, 402, - 884, 299, 403, 403, 403, 403, 403, 403, 403, 403, - 292, 292, 292, 292, 292, 292, 292, 292, 180, 885, - 886, 181, 435, 436, 437, 439, 440, 441, 452, 453, - 454, 494, 495, 496, 288, 887, 180, 289, 536, 537, - 538, 888, 182, 403, 403, 403, 403, 403, 403, 403, - 403, 889, 288, 525, 526, 527, 890, 891, 290, 539, - 540, 541, 542, 543, 544, 528, 529, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 601, 602, 603, 604, - - 605, 606, 633, 634, 635, 636, 637, 638, 892, 789, - 581, 607, 608, 581, 893, 894, 895, 639, 640, 705, - 706, 790, 705, 896, 897, 667, 650, 651, 651, 651, - 651, 651, 651, 651, 668, 715, 669, 670, 685, 686, - 687, 898, 705, 706, 716, 705, 717, 730, 731, 732, - 688, 689, 748, 690, 705, 706, 899, 705, 900, 733, - 734, 749, 903, 750, 904, 753, 754, 755, 905, 901, - 707, 707, 707, 707, 707, 707, 707, 756, 757, 906, - 791, 902, 705, 706, 907, 705, 908, 710, 909, 792, - 710, 793, 794, 814, 815, 910, 814, 708, 707, 707, - - 707, 707, 707, 707, 707, 705, 706, 839, 705, 911, - 862, 867, 868, 912, 867, 913, 840, 914, 841, 863, - 915, 864, 708, 705, 706, 916, 705, 764, 760, 814, - 815, 917, 814, 918, 814, 815, 765, 814, 919, 761, - 762, 762, 762, 762, 762, 762, 762, 766, 814, 815, - 920, 814, 921, 922, 767, 814, 815, 923, 814, 867, - 868, 924, 867, 925, 816, 816, 816, 816, 816, 816, - 816, 816, 816, 816, 816, 816, 816, 816, 814, 815, - 926, 814, 927, 928, 929, 930, 931, 932, 933, 934, - 935, 936, 937, 938, 939, 940, 941, 942, 817, 943, - - 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, - 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, - 964, 965, 966, 817, 967, 968, 969, 970, 971, 972, - 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, - 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, - 994, 991, 992, 995, 996, 997, 998, 999, 993, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 991, 992, - 1020, 991, 992, 1020, 1022, 1023, 1024, 1025, 993, 1026, - 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, - - 1037, 1020, 1038, 1040, 1020, 1041, 1043, 1044, 1041, 1045, - 1039, 1046, 1047, 1048, 1042, 1049, 1050, 1051, 1052, 1053, - 1054, 1055, 1056, 1057, 1063, 1059, 1057, 1041, 1059, 1064, - 1041, 1065, 1019, 1058, 1060, 1061, 1042, 1066, 1061, 1067, - 1021, 1068, 1069, 1070, 1071, 1057, 1077, 1071, 1057, 1059, - 1073, 1078, 1059, 1073, 1072, 1058, 1061, 1075, 1060, 1061, - 1079, 1021, 1080, 1081, 1071, 1076, 1073, 1071, 1082, 1073, - 1084, 1087, 1085, 1088, 1072, 1085, 1083, 1089, 1090, 1091, - 1092, 1094, 1086, 1092, 1094, 1096, 1085, 1097, 1100, 1085, - 1093, 1095, 1101, 1102, 1098, 1062, 1086, 1098, 1092, 1094, - - 1107, 1092, 1094, 1098, 1099, 1108, 1098, 858, 1093, 1095, - 1074, 1103, 1103, 1099, 1103, 1103, 1062, 857, 856, 1105, - 1104, 1104, 1105, 855, 1105, 1109, 1074, 1105, 1109, 1109, - 854, 853, 1109, 852, 851, 1110, 850, 849, 848, 1110, - 847, 846, 845, 844, 843, 842, 838, 837, 836, 835, - 834, 833, 832, 831, 830, 829, 828, 827, 826, 825, - 824, 823, 822, 821, 820, 1106, 819, 813, 811, 810, - 1106, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 88, 88, 88, 88, 88, 88, 173, - 173, 173, 173, 173, 173, 73, 73, 809, 73, 185, - - 185, 185, 185, 283, 283, 808, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 184, 807, 806, 184, 805, - 184, 285, 804, 803, 285, 802, 285, 292, 801, 800, - 292, 799, 292, 403, 798, 797, 403, 796, 403, 709, - 709, 709, 795, 788, 709, 763, 763, 763, 763, 812, - 812, 812, 812, 812, 812, 812, 812, 812, 818, 818, - 818, 787, 786, 818, 869, 869, 869, 869, 785, 784, - 783, 782, 781, 780, 779, 778, 777, 776, 775, 774, - 773, 772, 771, 770, 769, 768, 759, 758, 752, 751, - 747, 746, 745, 744, 743, 742, 741, 740, 739, 738, - - 737, 736, 735, 729, 728, 727, 726, 725, 724, 723, - 722, 721, 720, 719, 718, 714, 713, 712, 711, 704, - 703, 702, 701, 700, 699, 698, 697, 696, 695, 694, - 693, 692, 691, 684, 683, 682, 681, 680, 679, 678, - 677, 676, 675, 674, 673, 672, 671, 664, 663, 662, - 661, 660, 659, 658, 657, 656, 655, 654, 653, 652, - 649, 648, 647, 646, 645, 644, 643, 642, 641, 632, - 631, 630, 629, 628, 627, 626, 625, 622, 621, 620, - 619, 618, 617, 616, 615, 614, 613, 612, 611, 610, - 609, 600, 590, 589, 588, 587, 586, 585, 584, 583, - - 582, 580, 579, 578, 577, 576, 575, 574, 573, 572, - 571, 570, 569, 568, 567, 566, 565, 564, 563, 562, - 561, 560, 559, 558, 557, 556, 555, 554, 553, 552, - 551, 550, 549, 548, 547, 546, 545, 535, 534, 533, - 532, 531, 530, 524, 523, 522, 521, 520, 519, 518, - 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, - 507, 506, 505, 504, 503, 502, 501, 500, 499, 498, - 497, 493, 492, 491, 490, 489, 488, 487, 486, 485, - 484, 483, 482, 481, 480, 479, 478, 477, 476, 475, - 474, 473, 472, 471, 470, 469, 468, 467, 466, 465, - - 464, 463, 462, 461, 460, 459, 458, 457, 456, 455, - 451, 450, 449, 448, 447, 446, 445, 444, 443, 442, - 438, 434, 433, 432, 431, 430, 426, 422, 421, 420, - 419, 418, 417, 416, 415, 414, 410, 409, 408, 407, - 406, 297, 297, 405, 405, 404, 404, 401, 400, 399, - 398, 397, 396, 395, 394, 393, 389, 388, 387, 386, - 385, 382, 381, 380, 379, 378, 377, 376, 375, 374, - 373, 372, 371, 370, 369, 368, 367, 366, 365, 364, - 361, 360, 359, 358, 357, 356, 355, 354, 353, 352, - 351, 347, 346, 345, 344, 343, 342, 339, 338, 337, - - 336, 335, 334, 333, 332, 331, 330, 329, 328, 327, - 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, - 316, 315, 312, 311, 310, 309, 306, 305, 304, 303, - 302, 301, 300, 293, 293, 286, 286, 282, 281, 280, - 279, 278, 277, 276, 273, 272, 271, 264, 263, 262, - 261, 260, 259, 254, 253, 250, 249, 245, 244, 240, - 237, 236, 235, 232, 231, 230, 224, 223, 222, 221, - 220, 219, 218, 217, 216, 211, 210, 209, 208, 207, - 206, 205, 204, 198, 197, 196, 195, 194, 193, 192, - 189, 188, 187, 186, 80, 80, 75, 75, 171, 132, - - 115, 85, 70, 64, 61, 60, 1111, 58, 58, 7, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111 - } ; - -static const flex_int16_t yy_chk[1684] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 804, 9, 2, 9, 9, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 13, 15, 25, 16, 17, 17, 17, - 17, 17, 17, 17, 17, 21, 21, 805, 15, 16, - 26, 13, 19, 25, 19, 19, 19, 19, 19, 19, - 19, 19, 23, 23, 28, 26, 26, 27, 28, 27, - 19, 33, 27, 27, 19, 28, 127, 72, 28, 33, - - 19, 19, 29, 30, 127, 30, 29, 35, 19, 36, - 29, 33, 29, 36, 30, 19, 93, 806, 29, 45, - 93, 35, 72, 19, 37, 34, 19, 20, 45, 20, - 20, 20, 20, 20, 20, 20, 20, 46, 37, 31, - 809, 40, 44, 151, 43, 20, 44, 31, 39, 20, - 31, 40, 151, 31, 34, 20, 44, 34, 810, 31, - 112, 34, 34, 20, 39, 41, 34, 39, 42, 34, - 20, 42, 41, 41, 112, 812, 43, 41, 20, 111, - 42, 43, 46, 41, 41, 43, 41, 42, 43, 47, - 111, 47, 47, 48, 48, 47, 48, 50, 73, 50, - - 50, 54, 54, 54, 54, 54, 54, 54, 54, 59, - 136, 59, 59, 74, 74, 139, 73, 74, 74, 74, - 74, 74, 74, 74, 74, 101, 102, 136, 136, 139, - 101, 101, 123, 102, 73, 123, 123, 131, 819, 123, - 152, 123, 133, 48, 131, 150, 150, 48, 152, 247, - 48, 228, 142, 247, 48, 143, 133, 196, 133, 48, - 69, 69, 69, 69, 69, 69, 69, 69, 142, 143, - 156, 196, 161, 156, 161, 161, 69, 69, 161, 228, - 69, 162, 162, 170, 162, 170, 170, 201, 201, 235, - 235, 235, 820, 821, 69, 69, 163, 163, 822, 163, - - 824, 69, 71, 71, 71, 71, 71, 71, 71, 71, - 172, 172, 172, 172, 172, 172, 172, 172, 71, 71, - 267, 825, 71, 273, 273, 273, 178, 178, 826, 267, - 178, 162, 306, 306, 306, 162, 71, 71, 162, 318, - 318, 318, 162, 71, 178, 178, 163, 162, 827, 503, - 163, 178, 503, 163, 320, 320, 320, 163, 828, 174, - 174, 609, 163, 174, 174, 174, 174, 174, 174, 174, - 174, 179, 179, 609, 829, 179, 179, 179, 179, 179, - 179, 179, 179, 183, 183, 183, 183, 183, 183, 183, - 183, 184, 185, 285, 184, 830, 285, 831, 185, 284, - - 284, 284, 284, 284, 284, 284, 284, 652, 552, 184, - 652, 285, 552, 185, 832, 184, 833, 285, 287, 287, - 835, 185, 287, 287, 287, 287, 287, 287, 287, 287, - 291, 291, 291, 291, 291, 291, 291, 291, 292, 837, - 838, 292, 329, 329, 329, 333, 333, 333, 344, 344, - 344, 388, 388, 388, 403, 839, 292, 403, 456, 456, - 456, 840, 292, 402, 402, 402, 402, 402, 402, 402, - 402, 841, 403, 444, 444, 444, 842, 843, 403, 457, - 457, 457, 458, 458, 458, 444, 444, 517, 517, 517, - 518, 518, 518, 519, 519, 519, 523, 523, 523, 524, - - 524, 524, 570, 570, 570, 571, 571, 571, 844, 740, - 581, 524, 524, 581, 845, 846, 847, 571, 571, 651, - 651, 740, 651, 848, 849, 610, 581, 581, 581, 581, - 581, 581, 581, 581, 610, 661, 610, 610, 629, 629, - 629, 850, 709, 709, 661, 709, 661, 675, 675, 675, - 629, 629, 694, 629, 650, 650, 851, 650, 852, 675, - 675, 694, 854, 694, 855, 700, 700, 700, 856, 853, - 650, 650, 650, 650, 650, 650, 650, 700, 700, 857, - 741, 853, 707, 707, 858, 707, 859, 710, 860, 741, - 710, 741, 741, 762, 762, 861, 762, 650, 707, 707, - - 707, 707, 707, 707, 707, 763, 763, 784, 763, 862, - 807, 813, 813, 863, 813, 864, 784, 865, 784, 807, - 866, 807, 650, 705, 705, 870, 705, 710, 705, 814, - 814, 871, 814, 872, 818, 818, 710, 818, 873, 705, - 705, 705, 705, 705, 705, 705, 705, 710, 816, 816, - 874, 816, 875, 876, 710, 761, 761, 879, 761, 867, - 867, 880, 867, 881, 816, 816, 816, 816, 816, 816, - 816, 761, 761, 761, 761, 761, 761, 761, 869, 869, - 882, 869, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 761, 899, - - 900, 901, 902, 903, 904, 905, 906, 909, 910, 911, - 912, 913, 914, 915, 916, 917, 918, 919, 922, 923, - 924, 926, 927, 761, 929, 930, 931, 932, 933, 934, - 935, 937, 938, 939, 940, 941, 942, 945, 946, 947, - 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, - 960, 958, 959, 961, 962, 963, 964, 965, 959, 968, - 969, 970, 973, 974, 975, 976, 977, 978, 979, 980, - 981, 982, 983, 984, 985, 986, 987, 990, 991, 992, - 993, 991, 992, 993, 994, 995, 998, 999, 992, 1002, - 1003, 1004, 1006, 1007, 1008, 1010, 1011, 1012, 1017, 1018, - - 1019, 1020, 1021, 1022, 1020, 1023, 1024, 1025, 1023, 1026, - 1021, 1027, 1028, 1029, 1023, 1031, 1032, 1033, 1034, 1035, - 1036, 1037, 1038, 1039, 1043, 1040, 1039, 1041, 1040, 1044, - 1041, 1047, 991, 1039, 1040, 1042, 1041, 1048, 1042, 1049, - 993, 1050, 1052, 1055, 1056, 1057, 1065, 1056, 1057, 1059, - 1060, 1066, 1059, 1060, 1056, 1057, 1061, 1062, 1059, 1061, - 1067, 1020, 1068, 1070, 1071, 1062, 1073, 1071, 1074, 1073, - 1075, 1077, 1076, 1078, 1071, 1076, 1074, 1080, 1081, 1082, - 1083, 1084, 1076, 1083, 1084, 1089, 1085, 1090, 1096, 1085, - 1083, 1084, 1097, 1101, 1091, 1042, 1085, 1091, 1092, 1094, - - 1106, 1092, 1094, 1098, 1091, 1107, 1098, 803, 1092, 1094, - 1060, 1102, 1103, 1098, 1102, 1103, 1061, 802, 801, 1104, - 1102, 1103, 1104, 800, 1105, 1108, 1073, 1105, 1108, 1109, - 798, 797, 1109, 796, 795, 1108, 794, 793, 792, 1109, - 791, 790, 789, 788, 787, 786, 783, 782, 781, 780, - 779, 778, 777, 776, 775, 774, 773, 772, 771, 770, - 769, 768, 767, 766, 765, 1104, 764, 760, 759, 757, - 1105, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, - 1112, 1112, 1112, 1113, 1113, 1113, 1113, 1113, 1113, 1114, - 1114, 1114, 1114, 1114, 1114, 1115, 1115, 756, 1115, 1116, - - 1116, 1116, 1116, 1117, 1117, 755, 1117, 1117, 1117, 1117, - 1117, 1117, 1117, 1117, 1117, 1118, 754, 753, 1118, 752, - 1118, 1119, 751, 750, 1119, 749, 1119, 1120, 748, 747, - 1120, 746, 1120, 1121, 745, 744, 1121, 743, 1121, 1122, - 1122, 1122, 742, 736, 1122, 1123, 1123, 1123, 1123, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1125, 1125, - 1125, 734, 733, 1125, 1126, 1126, 1126, 1126, 732, 731, - 730, 727, 726, 725, 724, 723, 722, 721, 720, 719, - 718, 717, 716, 715, 714, 712, 703, 702, 697, 696, - 693, 691, 690, 689, 688, 687, 686, 685, 684, 680, - - 679, 678, 676, 674, 673, 672, 671, 670, 669, 668, - 667, 666, 665, 664, 663, 660, 655, 654, 653, 649, - 648, 647, 646, 644, 643, 641, 640, 639, 638, 637, - 636, 631, 630, 628, 627, 626, 625, 624, 622, 621, - 620, 619, 617, 616, 615, 613, 612, 608, 607, 606, - 605, 604, 600, 588, 587, 586, 585, 584, 583, 582, - 580, 579, 578, 577, 576, 575, 574, 573, 572, 569, - 568, 565, 559, 558, 556, 555, 554, 551, 548, 547, - 546, 545, 534, 533, 532, 531, 529, 528, 527, 526, - 525, 521, 516, 514, 513, 511, 510, 508, 507, 505, - - 504, 502, 501, 500, 498, 497, 492, 491, 489, 488, - 487, 486, 485, 484, 483, 482, 481, 480, 479, 478, - 477, 475, 474, 473, 472, 471, 470, 469, 468, 467, - 465, 464, 463, 462, 461, 460, 459, 455, 451, 450, - 449, 448, 445, 443, 442, 432, 430, 426, 425, 424, - 423, 422, 421, 420, 419, 417, 416, 414, 410, 408, - 407, 406, 401, 400, 399, 398, 397, 396, 395, 394, - 389, 387, 386, 385, 384, 383, 382, 381, 380, 379, - 376, 375, 374, 373, 372, 371, 370, 369, 368, 367, - 366, 365, 364, 363, 362, 361, 360, 359, 358, 357, - - 356, 355, 354, 353, 352, 351, 350, 349, 348, 345, - 343, 342, 341, 340, 339, 338, 337, 336, 335, 334, - 332, 328, 326, 325, 324, 323, 319, 317, 316, 315, - 314, 313, 312, 311, 310, 309, 305, 304, 302, 301, - 300, 299, 298, 296, 295, 290, 289, 282, 281, 280, - 279, 278, 277, 276, 275, 274, 272, 271, 270, 269, - 268, 266, 265, 264, 263, 262, 261, 260, 259, 258, - 257, 256, 255, 254, 253, 252, 251, 250, 249, 248, - 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, - 236, 234, 233, 232, 231, 230, 229, 227, 226, 225, - - 224, 223, 222, 221, 220, 219, 218, 217, 215, 214, - 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, - 203, 202, 200, 199, 198, 197, 195, 194, 193, 192, - 191, 190, 188, 182, 181, 177, 176, 169, 168, 167, - 166, 165, 158, 157, 155, 154, 153, 149, 148, 147, - 146, 145, 144, 141, 140, 138, 137, 135, 134, 132, - 130, 129, 128, 126, 125, 124, 122, 121, 119, 118, - 117, 116, 115, 114, 113, 110, 109, 108, 107, 106, - 105, 104, 103, 100, 99, 98, 97, 96, 95, 94, - 92, 91, 87, 83, 82, 81, 78, 76, 52, 38, - - 32, 22, 18, 14, 12, 11, 7, 6, 5, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, - 1111, 1111, 1111 - } ; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -#line 1 "../src/compiler/glsl/glsl_lexer.ll" -#line 2 "../src/compiler/glsl/glsl_lexer.ll" -/* - * Copyright © 2008, 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include -#include "../../util/strtod.h" -#include "ast.h" -#include "glsl_parser_extras.h" -#include "glsl_parser.h" -#include "../../mesa/main/consts_exts.h" - -static int classify_identifier(struct _mesa_glsl_parse_state *, const char *, - unsigned name_len, YYSTYPE *output); - -#ifdef _MSC_VER -#define YY_NO_UNISTD_H -#endif - -#define YY_NO_INPUT -#define YY_USER_ACTION \ - do { \ - yylloc->first_column = yycolumn + 1; \ - yylloc->first_line = yylloc->last_line = yylineno + 1; \ - yycolumn += yyleng; \ - yylloc->last_column = yycolumn + 1; \ - } while(0); - -#define YY_USER_INIT yylineno = 0; yycolumn = 0; yylloc->source = 0; \ - yylloc->path = NULL; - -/* A macro for handling reserved words and keywords across language versions. - * - * Certain words start out as identifiers, become reserved words in - * later language revisions, and finally become language keywords. - * This may happen at different times in desktop GLSL and GLSL ES. - * - * For example, consider the following lexer rule: - * samplerBuffer KEYWORD(130, 0, 140, 0, SAMPLERBUFFER) - * - * This means that "samplerBuffer" will be treated as: - * - a keyword (SAMPLERBUFFER token) ...in GLSL >= 1.40 - * - a reserved word - error ...in GLSL >= 1.30 - * - an identifier ...in GLSL < 1.30 or GLSL ES - */ -#define KEYWORD(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, token) \ - KEYWORD_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, false, token) - -/** - * Like the KEYWORD macro, but the word is also treated as a keyword - * if the given boolean expression is true. - */ -#define KEYWORD_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - alt_expr, token) \ - do { \ - if (yyextra->is_version(allowed_glsl, allowed_glsl_es) \ - || (alt_expr)) { \ - return token; \ - } else if (yyextra->is_version(reserved_glsl, \ - reserved_glsl_es)) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else { \ - return classify_identifier(yyextra, yytext, yyleng, yylval); \ - } \ - } while (0) - -/** - * Like KEYWORD_WITH_ALT, but used for built-in GLSL types - */ -#define TYPE_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - alt_expr, gtype) \ - do { \ - if (yyextra->is_version(allowed_glsl, allowed_glsl_es) \ - || (alt_expr)) { \ - yylval->type = gtype; \ - return BASIC_TYPE_TOK; \ - } else if (yyextra->is_version(reserved_glsl, \ - reserved_glsl_es)) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else { \ - return classify_identifier(yyextra, yytext, yyleng, yylval); \ - } \ - } while (0) - -#define TYPE(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - gtype) \ - TYPE_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - false, gtype) - -/** - * A macro for handling keywords that have been present in GLSL since - * its origin, but were changed into reserved words in later versions. - */ -#define DEPRECATED_KEYWORD(token, state, reserved_glsl, \ - reserved_glsl_es) \ - do { \ - if (yyextra->is_version(reserved_glsl, reserved_glsl_es) && \ - !state->compat_shader) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else { \ - return token; \ - } \ - } while (0) - -/** - * Like DEPRECATED_KEYWORD, but for types - */ -#define DEPRECATED_ES_TYPE_WITH_ALT(alt_expr, gtype) \ - do { \ - if (yyextra->is_version(0, 300)) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else if (alt_expr) { \ - yylval->type = gtype; \ - return BASIC_TYPE_TOK; \ - } else { \ - return classify_identifier(yyextra, yytext, yyleng, yylval); \ - } \ - } while (0) - -#define DEPRECATED_ES_TYPE(gtype) \ - DEPRECATED_ES_TYPE_WITH_ALT(true, gtype) - -static int -literal_integer(char *text, int len, struct _mesa_glsl_parse_state *state, - YYSTYPE *lval, YYLTYPE *lloc, int base) -{ - bool is_uint = (text[len - 1] == 'u' || - text[len - 1] == 'U'); - bool is_long = (text[len - 1] == 'l' || text[len - 1] == 'L'); - const char *digits = text; - - if (is_long) - is_uint = (text[len - 2] == 'u' && text[len - 1] == 'l') || - (text[len - 2] == 'U' && text[len - 1] == 'L'); - /* Skip "0x" */ - if (base == 16) - digits += 2; - - unsigned long long value = strtoull(digits, NULL, base); - - if (is_long) - lval->n64 = (int64_t)value; - else - lval->n = (int)value; - - if (is_long && !is_uint && base == 10 && value > (uint64_t)LLONG_MAX + 1) { - /* Tries to catch unintentionally providing a negative value. */ - _mesa_glsl_warning(lloc, state, - "signed literal value `%s' is interpreted as %lld", - text, lval->n64); - } else if (!is_long && value > UINT_MAX) { - /* Note that signed 0xffffffff is valid, not out of range! */ - if (state->is_version(130, 300)) { - _mesa_glsl_error(lloc, state, - "literal value `%s' out of range", text); - } else { - _mesa_glsl_warning(lloc, state, - "literal value `%s' out of range", text); - } - } else if (base == 10 && !is_uint && (unsigned)value > (unsigned)INT_MAX + 1) { - /* Tries to catch unintentionally providing a negative value. - * Note that -2147483648 is parsed as -(2147483648), so we don't - * want to warn for INT_MAX. - */ - _mesa_glsl_warning(lloc, state, - "signed literal value `%s' is interpreted as %d", - text, lval->n); - } - if (is_long) - return is_uint ? UINT64CONSTANT : INT64CONSTANT; - else - return is_uint ? UINTCONSTANT : INTCONSTANT; -} - -#define LITERAL_INTEGER(base) \ - literal_integer(yytext, yyleng, yyextra, yylval, yylloc, base) - -#line 1609 "src/compiler/glsl/glsl_lexer.cpp" -#line 221 "../src/compiler/glsl/glsl_lexer.ll" - /* Note: When adding any start conditions to this list, you must also - * update the "Internal compiler error" catch-all rule near the end of - * this file. */ - -#line 1615 "src/compiler/glsl/glsl_lexer.cpp" - -#define INITIAL 0 -#define PP 1 -#define PRAGMA 2 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include -#endif - -#define YY_EXTRA_TYPE struct _mesa_glsl_parse_state * - -/* Holds the entire state of the reentrant scanner. */ -struct yyguts_t - { - - /* User-defined. Not touched by flex. */ - YY_EXTRA_TYPE yyextra_r; - - /* The rest are the same as the globals declared in the non-reentrant scanner. */ - FILE *yyin_r, *yyout_r; - size_t yy_buffer_stack_top; /**< index of top of stack. */ - size_t yy_buffer_stack_max; /**< capacity of stack. */ - YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ - char yy_hold_char; - int yy_n_chars; - int yyleng_r; - char *yy_c_buf_p; - int yy_init; - int yy_start; - int yy_did_buffer_switch_on_eof; - int yy_start_stack_ptr; - int yy_start_stack_depth; - int *yy_start_stack; - yy_state_type yy_last_accepting_state; - char* yy_last_accepting_cpos; - - int yylineno_r; - int yy_flex_debug_r; - - char *yytext_r; - int yy_more_flag; - int yy_more_len; - - YYSTYPE * yylval_r; - - YYLTYPE * yylloc_r; - - }; /* end struct yyguts_t */ - -static int yy_init_globals ( yyscan_t yyscanner ); - - /* This must go here because YYSTYPE and YYLTYPE are included - * from bison output in section 1.*/ - # define yylval yyg->yylval_r - - # define yylloc yyg->yylloc_r - -int yylex_init (yyscan_t* scanner); - -int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy ( yyscan_t yyscanner ); - -int yyget_debug ( yyscan_t yyscanner ); - -void yyset_debug ( int debug_flag , yyscan_t yyscanner ); - -YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); - -void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); - -FILE *yyget_in ( yyscan_t yyscanner ); - -void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); - -FILE *yyget_out ( yyscan_t yyscanner ); - -void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); - - int yyget_leng ( yyscan_t yyscanner ); - -char *yyget_text ( yyscan_t yyscanner ); - -int yyget_lineno ( yyscan_t yyscanner ); - -void yyset_lineno ( int _line_number , yyscan_t yyscanner ); - -int yyget_column ( yyscan_t yyscanner ); - -void yyset_column ( int _column_no , yyscan_t yyscanner ); - -YYSTYPE * yyget_lval ( yyscan_t yyscanner ); - -void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); - - YYLTYPE *yyget_lloc ( yyscan_t yyscanner ); - - void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap ( yyscan_t yyscanner ); -#else -extern int yywrap ( yyscan_t yyscanner ); -#endif -#endif - -#ifndef YY_NO_UNPUT - -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen ( const char * , yyscan_t yyscanner); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput ( yyscan_t yyscanner ); -#else -static int input ( yyscan_t yyscanner ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else -#define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - int n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex \ - (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner); - -#define YY_DECL int yylex \ - (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner) -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK /*LINTED*/break; -#endif - -#define YY_RULE_SETUP \ - if ( yyleng > 0 ) \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ - (yytext[yyleng - 1] == '\n'); \ - YY_USER_ACTION - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - yy_state_type yy_current_state; - char *yy_cp, *yy_bp; - int yy_act; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yylval = yylval_param; - - yylloc = yylloc_param; - - if ( !yyg->yy_init ) - { - yyg->yy_init = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! yyg->yy_start ) - yyg->yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); - } - - yy_load_buffer_state( yyscanner ); - } - - { -#line 234 "../src/compiler/glsl/glsl_lexer.ll" - - -#line 1903 "src/compiler/glsl/glsl_lexer.cpp" - - while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ - { - yy_cp = yyg->yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yyg->yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yyg->yy_start; - yy_current_state += YY_AT_BOL(); -yy_match: - do - { - YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; - if ( yy_accept[yy_current_state] ) - { - yyg->yy_last_accepting_state = yy_current_state; - yyg->yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1112 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - ++yy_cp; - } - while ( yy_current_state != 1111 ); - yy_cp = yyg->yy_last_accepting_cpos; - yy_current_state = yyg->yy_last_accepting_state; - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yyg->yy_hold_char; - yy_cp = yyg->yy_last_accepting_cpos; - yy_current_state = yyg->yy_last_accepting_state; - goto yy_find_action; - -case 1: -YY_RULE_SETUP -#line 236 "../src/compiler/glsl/glsl_lexer.ll" -; - YY_BREAK -/* Preprocessor tokens. */ -case 2: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 239 "../src/compiler/glsl/glsl_lexer.ll" -; - YY_BREAK -case 3: -YY_RULE_SETUP -#line 240 "../src/compiler/glsl/glsl_lexer.ll" -{ BEGIN PP; return VERSION_TOK; } - YY_BREAK -case 4: -YY_RULE_SETUP -#line 241 "../src/compiler/glsl/glsl_lexer.ll" -{ BEGIN PP; return EXTENSION; } - YY_BREAK -case 5: -YY_RULE_SETUP -#line 242 "../src/compiler/glsl/glsl_lexer.ll" -{ - if (!yyextra->ARB_shading_language_include_enable) { - struct _mesa_glsl_parse_state *state = yyextra; - _mesa_glsl_error(yylloc, state, - "ARB_shading_language_include required " - "to use #include"); - } -} - YY_BREAK -case 6: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 250 "../src/compiler/glsl/glsl_lexer.ll" -{ - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - - /* From GLSL 3.30 and GLSL ES on, after processing the - * line directive (including its new-line), the implementation - * will behave as if it is compiling at the line number passed - * as argument. It was line number + 1 in older specifications. - */ - if (yyextra->is_version(330, 100)) - yylineno--; - - yylloc->source = strtol(ptr, NULL, 0); - yylloc->path = NULL; - } - YY_BREAK -case 7: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 275 "../src/compiler/glsl/glsl_lexer.ll" -{ - if (!yyextra->ARB_shading_language_include_enable) { - struct _mesa_glsl_parse_state *state = yyextra; - _mesa_glsl_error(yylloc, state, - "ARB_shading_language_include required " - "to use #line \"\""); - } - - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - - /* From GLSL 3.30 and GLSL ES on, after processing the - * line directive (including its new-line), the implementation - * will behave as if it is compiling at the line number passed - * as argument. It was line number + 1 in older specifications. - */ - if (yyextra->is_version(330, 100)) - yylineno--; - - while (isspace(*ptr)) - ptr++; - - /* Skip over leading " */ - ptr++; - - char *end = strrchr(ptr, '"'); - int path_len = (end - ptr) + 1; - void *mem_ctx = yyextra->linalloc; - yylloc->path = (char *) linear_alloc_child(mem_ctx, path_len); - memcpy(yylloc->path, ptr, path_len); - yylloc->path[path_len - 1] = '\0'; - } - YY_BREAK -case 8: -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ -yyg->yy_c_buf_p = yy_cp -= 1; -YY_DO_BEFORE_ACTION; /* set up yytext again */ -YY_RULE_SETUP -#line 317 "../src/compiler/glsl/glsl_lexer.ll" -{ - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - - /* From GLSL 3.30 and GLSL ES on, after processing the - * line directive (including its new-line), the implementation - * will behave as if it is compiling at the line number passed - * as argument. It was line number + 1 in older specifications. - */ - if (yyextra->is_version(330, 100)) - yylineno--; - } - YY_BREAK -case 9: -YY_RULE_SETUP -#line 339 "../src/compiler/glsl/glsl_lexer.ll" -{ - BEGIN PP; - return PRAGMA_DEBUG_ON; - } - YY_BREAK -case 10: -YY_RULE_SETUP -#line 343 "../src/compiler/glsl/glsl_lexer.ll" -{ - BEGIN PP; - return PRAGMA_DEBUG_OFF; - } - YY_BREAK -case 11: -YY_RULE_SETUP -#line 347 "../src/compiler/glsl/glsl_lexer.ll" -{ - BEGIN PP; - return PRAGMA_OPTIMIZE_ON; - } - YY_BREAK -case 12: -YY_RULE_SETUP -#line 351 "../src/compiler/glsl/glsl_lexer.ll" -{ - BEGIN PP; - return PRAGMA_OPTIMIZE_OFF; - } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 355 "../src/compiler/glsl/glsl_lexer.ll" -{ - BEGIN PP; - return PRAGMA_WARNING_ON; - } - YY_BREAK -case 14: -YY_RULE_SETUP -#line 359 "../src/compiler/glsl/glsl_lexer.ll" -{ - BEGIN PP; - return PRAGMA_WARNING_OFF; - } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 363 "../src/compiler/glsl/glsl_lexer.ll" -{ - BEGIN PP; - return PRAGMA_INVARIANT_ALL; - } - YY_BREAK -case 16: -YY_RULE_SETUP -#line 367 "../src/compiler/glsl/glsl_lexer.ll" -{ BEGIN PRAGMA; } - YY_BREAK -case 17: -/* rule 17 can match eol */ -YY_RULE_SETUP -#line 369 "../src/compiler/glsl/glsl_lexer.ll" -{ BEGIN 0; yylineno++; yycolumn = 0; } - YY_BREAK -case 18: -YY_RULE_SETUP -#line 370 "../src/compiler/glsl/glsl_lexer.ll" -{ } - YY_BREAK -case 19: -YY_RULE_SETUP -#line 372 "../src/compiler/glsl/glsl_lexer.ll" -{ } - YY_BREAK -case 20: -YY_RULE_SETUP -#line 373 "../src/compiler/glsl/glsl_lexer.ll" -{ } - YY_BREAK -case 21: -YY_RULE_SETUP -#line 374 "../src/compiler/glsl/glsl_lexer.ll" -return COLON; - YY_BREAK -case 22: -YY_RULE_SETUP -#line 375 "../src/compiler/glsl/glsl_lexer.ll" -{ - /* We're not doing linear_strdup here, to avoid an implicit call - * on strlen() for the length of the string, as this is already - * found by flex and stored in yyleng - */ - void *mem_ctx = yyextra->linalloc; - char *id = (char *) linear_alloc_child(mem_ctx, yyleng + 1); - memcpy(id, yytext, yyleng + 1); - yylval->identifier = id; - return IDENTIFIER; - } - YY_BREAK -case 23: -YY_RULE_SETUP -#line 386 "../src/compiler/glsl/glsl_lexer.ll" -{ - yylval->n = strtol(yytext, NULL, 10); - return INTCONSTANT; - } - YY_BREAK -case 24: -YY_RULE_SETUP -#line 390 "../src/compiler/glsl/glsl_lexer.ll" -{ - yylval->n = 0; - return INTCONSTANT; - } - YY_BREAK -case 25: -/* rule 25 can match eol */ -YY_RULE_SETUP -#line 394 "../src/compiler/glsl/glsl_lexer.ll" -{ BEGIN 0; yylineno++; yycolumn = 0; return EOL; } - YY_BREAK -case 26: -YY_RULE_SETUP -#line 395 "../src/compiler/glsl/glsl_lexer.ll" -{ return yytext[0]; } - YY_BREAK -case 27: -/* rule 27 can match eol */ -YY_RULE_SETUP -#line 397 "../src/compiler/glsl/glsl_lexer.ll" -{ yylineno++; yycolumn = 0; } - YY_BREAK -case 28: -YY_RULE_SETUP -#line 399 "../src/compiler/glsl/glsl_lexer.ll" -DEPRECATED_KEYWORD(ATTRIBUTE, yyextra, 420, 300); - YY_BREAK -case 29: -YY_RULE_SETUP -#line 400 "../src/compiler/glsl/glsl_lexer.ll" -return CONST_TOK; - YY_BREAK -case 30: -YY_RULE_SETUP -#line 401 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::bool_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 31: -YY_RULE_SETUP -#line 402 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::float_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 32: -YY_RULE_SETUP -#line 403 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::int_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 33: -YY_RULE_SETUP -#line 404 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(130, 300, 130, 300, glsl_type::uint_type); - YY_BREAK -case 34: -YY_RULE_SETUP -#line 406 "../src/compiler/glsl/glsl_lexer.ll" -return BREAK; - YY_BREAK -case 35: -YY_RULE_SETUP -#line 407 "../src/compiler/glsl/glsl_lexer.ll" -return CONTINUE; - YY_BREAK -case 36: -YY_RULE_SETUP -#line 408 "../src/compiler/glsl/glsl_lexer.ll" -return DO; - YY_BREAK -case 37: -YY_RULE_SETUP -#line 409 "../src/compiler/glsl/glsl_lexer.ll" -return WHILE; - YY_BREAK -case 38: -YY_RULE_SETUP -#line 410 "../src/compiler/glsl/glsl_lexer.ll" -return ELSE; - YY_BREAK -case 39: -YY_RULE_SETUP -#line 411 "../src/compiler/glsl/glsl_lexer.ll" -return FOR; - YY_BREAK -case 40: -YY_RULE_SETUP -#line 412 "../src/compiler/glsl/glsl_lexer.ll" -return IF; - YY_BREAK -case 41: -YY_RULE_SETUP -#line 413 "../src/compiler/glsl/glsl_lexer.ll" -return DISCARD; - YY_BREAK -case 42: -YY_RULE_SETUP -#line 414 "../src/compiler/glsl/glsl_lexer.ll" -return RETURN; - YY_BREAK -case 43: -YY_RULE_SETUP -#line 415 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(0, 0, 0, 0, yyextra->EXT_demote_to_helper_invocation_enable, DEMOTE); - YY_BREAK -case 44: -YY_RULE_SETUP -#line 417 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::bvec2_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 45: -YY_RULE_SETUP -#line 418 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::bvec3_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 46: -YY_RULE_SETUP -#line 419 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::bvec4_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 47: -YY_RULE_SETUP -#line 420 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::ivec2_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 48: -YY_RULE_SETUP -#line 421 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::ivec3_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 49: -YY_RULE_SETUP -#line 422 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::ivec4_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 50: -YY_RULE_SETUP -#line 423 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::uvec2_type); - YY_BREAK -case 51: -YY_RULE_SETUP -#line 424 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::uvec3_type); - YY_BREAK -case 52: -YY_RULE_SETUP -#line 425 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::uvec4_type); - YY_BREAK -case 53: -YY_RULE_SETUP -#line 426 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::vec2_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 54: -YY_RULE_SETUP -#line 427 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::vec3_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 55: -YY_RULE_SETUP -#line 428 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::vec4_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 56: -YY_RULE_SETUP -#line 429 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::mat2_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 57: -YY_RULE_SETUP -#line 430 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::mat3_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 58: -YY_RULE_SETUP -#line 431 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::mat4_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 59: -YY_RULE_SETUP -#line 432 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat2_type); - YY_BREAK -case 60: -YY_RULE_SETUP -#line 433 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat2x3_type); - YY_BREAK -case 61: -YY_RULE_SETUP -#line 434 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat2x4_type); - YY_BREAK -case 62: -YY_RULE_SETUP -#line 435 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat3x2_type); - YY_BREAK -case 63: -YY_RULE_SETUP -#line 436 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat3_type); - YY_BREAK -case 64: -YY_RULE_SETUP -#line 437 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat3x4_type); - YY_BREAK -case 65: -YY_RULE_SETUP -#line 438 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat4x2_type); - YY_BREAK -case 66: -YY_RULE_SETUP -#line 439 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat4x3_type); - YY_BREAK -case 67: -YY_RULE_SETUP -#line 440 "../src/compiler/glsl/glsl_lexer.ll" -TYPE(120, 300, 120, 300, glsl_type::mat4_type); - YY_BREAK -case 68: -YY_RULE_SETUP -#line 442 "../src/compiler/glsl/glsl_lexer.ll" -return IN_TOK; - YY_BREAK -case 69: -YY_RULE_SETUP -#line 443 "../src/compiler/glsl/glsl_lexer.ll" -return OUT_TOK; - YY_BREAK -case 70: -YY_RULE_SETUP -#line 444 "../src/compiler/glsl/glsl_lexer.ll" -return INOUT_TOK; - YY_BREAK -case 71: -YY_RULE_SETUP -#line 445 "../src/compiler/glsl/glsl_lexer.ll" -return UNIFORM; - YY_BREAK -case 72: -YY_RULE_SETUP -#line 446 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(0, 0, 430, 310, yyextra->ARB_shader_storage_buffer_object_enable, BUFFER); - YY_BREAK -case 73: -YY_RULE_SETUP -#line 447 "../src/compiler/glsl/glsl_lexer.ll" -DEPRECATED_KEYWORD(VARYING, yyextra, 420, 300); - YY_BREAK -case 74: -YY_RULE_SETUP -#line 448 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(120, 300, 120, 300, yyextra->EXT_gpu_shader4_enable, CENTROID); - YY_BREAK -case 75: -YY_RULE_SETUP -#line 449 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(120, 100, 120, 100, INVARIANT); - YY_BREAK -case 76: -YY_RULE_SETUP -#line 450 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(130, 100, 130, 300, yyextra->EXT_gpu_shader4_enable, FLAT); - YY_BREAK -case 77: -YY_RULE_SETUP -#line 451 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 300, 130, 300, SMOOTH); - YY_BREAK -case 78: -YY_RULE_SETUP -#line 452 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable || yyextra->NV_shader_noperspective_interpolation_enable, NOPERSPECTIVE); - YY_BREAK -case 79: -YY_RULE_SETUP -#line 453 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(0, 300, 400, 320, yyextra->has_tessellation_shader(), PATCH); - YY_BREAK -case 80: -YY_RULE_SETUP -#line 455 "../src/compiler/glsl/glsl_lexer.ll" -DEPRECATED_ES_TYPE(glsl_type::sampler1D_type); - YY_BREAK -case 81: -YY_RULE_SETUP -#line 456 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::sampler2D_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 82: -YY_RULE_SETUP -#line 457 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::sampler3D_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 83: -YY_RULE_SETUP -#line 458 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::samplerCube_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 84: -YY_RULE_SETUP -#line 459 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler1DArray_type); - YY_BREAK -case 85: -YY_RULE_SETUP -#line 460 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler2DArray_type); - YY_BREAK -case 86: -YY_RULE_SETUP -#line 461 "../src/compiler/glsl/glsl_lexer.ll" -DEPRECATED_ES_TYPE(glsl_type::sampler1DShadow_type); - YY_BREAK -case 87: -YY_RULE_SETUP -#line 462 "../src/compiler/glsl/glsl_lexer.ll" -{ yylval->type = glsl_type::sampler2DShadow_type; return BASIC_TYPE_TOK; } - YY_BREAK -case 88: -YY_RULE_SETUP -#line 463 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::samplerCubeShadow_type); - YY_BREAK -case 89: -YY_RULE_SETUP -#line 464 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler1DArrayShadow_type); - YY_BREAK -case 90: -YY_RULE_SETUP -#line 465 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler2DArrayShadow_type); - YY_BREAK -case 91: -YY_RULE_SETUP -#line 466 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler1D_type); - YY_BREAK -case 92: -YY_RULE_SETUP -#line 467 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler2D_type); - YY_BREAK -case 93: -YY_RULE_SETUP -#line 468 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler3D_type); - YY_BREAK -case 94: -YY_RULE_SETUP -#line 469 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isamplerCube_type); - YY_BREAK -case 95: -YY_RULE_SETUP -#line 470 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::isampler1DArray_type); - YY_BREAK -case 96: -YY_RULE_SETUP -#line 471 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::isampler2DArray_type); - YY_BREAK -case 97: -YY_RULE_SETUP -#line 472 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler1D_type); - YY_BREAK -case 98: -YY_RULE_SETUP -#line 473 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler2D_type); - YY_BREAK -case 99: -YY_RULE_SETUP -#line 474 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler3D_type); - YY_BREAK -case 100: -YY_RULE_SETUP -#line 475 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usamplerCube_type); - YY_BREAK -case 101: -YY_RULE_SETUP -#line 476 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::usampler1DArray_type); - YY_BREAK -case 102: -YY_RULE_SETUP -#line 477 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::usampler2DArray_type); - YY_BREAK -/* additional keywords in ARB_texture_multisample, included in GLSL 1.50 */ -/* these are reserved but not defined in GLSL 3.00 */ -/* [iu]sampler2DMS are defined in GLSL ES 3.10 */ -case 103: -YY_RULE_SETUP -#line 482 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(150, 300, 150, 310, yyextra->ARB_texture_multisample_enable, glsl_type::sampler2DMS_type); - YY_BREAK -case 104: -YY_RULE_SETUP -#line 483 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(150, 300, 150, 310, yyextra->ARB_texture_multisample_enable, glsl_type::isampler2DMS_type); - YY_BREAK -case 105: -YY_RULE_SETUP -#line 484 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(150, 300, 150, 310, yyextra->ARB_texture_multisample_enable, glsl_type::usampler2DMS_type); - YY_BREAK -case 106: -YY_RULE_SETUP -#line 485 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_multisample_enable || yyextra->OES_texture_storage_multisample_2d_array_enable, glsl_type::sampler2DMSArray_type); - YY_BREAK -case 107: -YY_RULE_SETUP -#line 486 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_multisample_enable || yyextra->OES_texture_storage_multisample_2d_array_enable, glsl_type::isampler2DMSArray_type); - YY_BREAK -case 108: -YY_RULE_SETUP -#line 487 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_multisample_enable || yyextra->OES_texture_storage_multisample_2d_array_enable, glsl_type::usampler2DMSArray_type); - YY_BREAK -/* keywords available with ARB_texture_cube_map_array_enable extension on desktop GLSL */ -case 109: -YY_RULE_SETUP -#line 490 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::samplerCubeArray_type); - YY_BREAK -case 110: -YY_RULE_SETUP -#line 491 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::isamplerCubeArray_type); - YY_BREAK -case 111: -YY_RULE_SETUP -#line 492 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::usamplerCubeArray_type); - YY_BREAK -case 112: -YY_RULE_SETUP -#line 493 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::samplerCubeArrayShadow_type); - YY_BREAK -case 113: -YY_RULE_SETUP -#line 495 "../src/compiler/glsl/glsl_lexer.ll" -{ - if (yyextra->OES_EGL_image_external_enable || yyextra->OES_EGL_image_external_essl3_enable) { - yylval->type = glsl_type::samplerExternalOES_type; - return BASIC_TYPE_TOK; - } else - return IDENTIFIER; - } - YY_BREAK -/* keywords available with ARB_gpu_shader5 */ -case 114: -YY_RULE_SETUP -#line 504 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(400, 310, 400, 320, yyextra->ARB_gpu_shader5_enable || yyextra->EXT_gpu_shader5_enable || yyextra->OES_gpu_shader5_enable, PRECISE); - YY_BREAK -/* keywords available with ARB_shader_image_load_store */ -case 115: -YY_RULE_SETUP -#line 507 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image1D_type); - YY_BREAK -case 116: -YY_RULE_SETUP -#line 508 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2D_type); - YY_BREAK -case 117: -YY_RULE_SETUP -#line 509 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image3D_type); - YY_BREAK -case 118: -YY_RULE_SETUP -#line 510 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DRect_type); - YY_BREAK -case 119: -YY_RULE_SETUP -#line 511 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::imageCube_type); - YY_BREAK -case 120: -YY_RULE_SETUP -#line 512 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::imageBuffer_type); - YY_BREAK -case 121: -YY_RULE_SETUP -#line 513 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image1DArray_type); - YY_BREAK -case 122: -YY_RULE_SETUP -#line 514 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DArray_type); - YY_BREAK -case 123: -YY_RULE_SETUP -#line 515 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::imageCubeArray_type); - YY_BREAK -case 124: -YY_RULE_SETUP -#line 516 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DMS_type); - YY_BREAK -case 125: -YY_RULE_SETUP -#line 517 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DMSArray_type); - YY_BREAK -case 126: -YY_RULE_SETUP -#line 518 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage1D_type); - YY_BREAK -case 127: -YY_RULE_SETUP -#line 519 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2D_type); - YY_BREAK -case 128: -YY_RULE_SETUP -#line 520 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage3D_type); - YY_BREAK -case 129: -YY_RULE_SETUP -#line 521 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DRect_type); - YY_BREAK -case 130: -YY_RULE_SETUP -#line 522 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimageCube_type); - YY_BREAK -case 131: -YY_RULE_SETUP -#line 523 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::iimageBuffer_type); - YY_BREAK -case 132: -YY_RULE_SETUP -#line 524 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage1DArray_type); - YY_BREAK -case 133: -YY_RULE_SETUP -#line 525 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DArray_type); - YY_BREAK -case 134: -YY_RULE_SETUP -#line 526 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::iimageCubeArray_type); - YY_BREAK -case 135: -YY_RULE_SETUP -#line 527 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DMS_type); - YY_BREAK -case 136: -YY_RULE_SETUP -#line 528 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DMSArray_type); - YY_BREAK -case 137: -YY_RULE_SETUP -#line 529 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage1D_type); - YY_BREAK -case 138: -YY_RULE_SETUP -#line 530 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2D_type); - YY_BREAK -case 139: -YY_RULE_SETUP -#line 531 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage3D_type); - YY_BREAK -case 140: -YY_RULE_SETUP -#line 532 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DRect_type); - YY_BREAK -case 141: -YY_RULE_SETUP -#line 533 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimageCube_type); - YY_BREAK -case 142: -YY_RULE_SETUP -#line 534 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::uimageBuffer_type); - YY_BREAK -case 143: -YY_RULE_SETUP -#line 535 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage1DArray_type); - YY_BREAK -case 144: -YY_RULE_SETUP -#line 536 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DArray_type); - YY_BREAK -case 145: -YY_RULE_SETUP -#line 537 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::uimageCubeArray_type); - YY_BREAK -case 146: -YY_RULE_SETUP -#line 538 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DMS_type); - YY_BREAK -case 147: -YY_RULE_SETUP -#line 539 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DMSArray_type); - YY_BREAK -case 148: -YY_RULE_SETUP -#line 540 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 0, 420, 0, IMAGE1DSHADOW); - YY_BREAK -case 149: -YY_RULE_SETUP -#line 541 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 0, 420, 0, IMAGE2DSHADOW); - YY_BREAK -case 150: -YY_RULE_SETUP -#line 542 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 0, 420, 0, IMAGE1DARRAYSHADOW); - YY_BREAK -case 151: -YY_RULE_SETUP -#line 543 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 0, 420, 0, IMAGE2DARRAYSHADOW); - YY_BREAK -case 152: -YY_RULE_SETUP -#line 545 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, COHERENT); - YY_BREAK -case 153: -YY_RULE_SETUP -#line 546 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(110, 100, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, VOLATILE); - YY_BREAK -case 154: -YY_RULE_SETUP -#line 547 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, RESTRICT); - YY_BREAK -case 155: -YY_RULE_SETUP -#line 548 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, READONLY); - YY_BREAK -case 156: -YY_RULE_SETUP -#line 549 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, WRITEONLY); - YY_BREAK -case 157: -YY_RULE_SETUP -#line 551 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_atomic_counters_enable, glsl_type::atomic_uint_type); - YY_BREAK -case 158: -YY_RULE_SETUP -#line 553 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(430, 310, 430, 310, yyextra->ARB_compute_shader_enable, SHARED); - YY_BREAK -case 159: -YY_RULE_SETUP -#line 555 "../src/compiler/glsl/glsl_lexer.ll" -return STRUCT; - YY_BREAK -case 160: -YY_RULE_SETUP -#line 556 "../src/compiler/glsl/glsl_lexer.ll" -return VOID_TOK; - YY_BREAK -case 161: -YY_RULE_SETUP -#line 558 "../src/compiler/glsl/glsl_lexer.ll" -{ - if ((yyextra->is_version(140, 300)) - || yyextra->ARB_bindless_texture_enable - || yyextra->KHR_blend_equation_advanced_enable - || yyextra->AMD_conservative_depth_enable - || yyextra->ARB_conservative_depth_enable - || yyextra->ARB_explicit_attrib_location_enable - || yyextra->ARB_explicit_uniform_location_enable - || yyextra->ARB_post_depth_coverage_enable - || yyextra->has_separate_shader_objects() - || yyextra->ARB_uniform_buffer_object_enable - || yyextra->ARB_fragment_coord_conventions_enable - || yyextra->ARB_shading_language_420pack_enable - || yyextra->ARB_compute_shader_enable - || yyextra->ARB_tessellation_shader_enable - || yyextra->EXT_shader_framebuffer_fetch_non_coherent_enable) { - return LAYOUT_TOK; - } else { - return classify_identifier(yyextra, yytext, yyleng, yylval); - } - } - YY_BREAK -case 162: -YY_RULE_SETUP -#line 580 "../src/compiler/glsl/glsl_lexer.ll" -return INC_OP; - YY_BREAK -case 163: -YY_RULE_SETUP -#line 581 "../src/compiler/glsl/glsl_lexer.ll" -return DEC_OP; - YY_BREAK -case 164: -YY_RULE_SETUP -#line 582 "../src/compiler/glsl/glsl_lexer.ll" -return LE_OP; - YY_BREAK -case 165: -YY_RULE_SETUP -#line 583 "../src/compiler/glsl/glsl_lexer.ll" -return GE_OP; - YY_BREAK -case 166: -YY_RULE_SETUP -#line 584 "../src/compiler/glsl/glsl_lexer.ll" -return EQ_OP; - YY_BREAK -case 167: -YY_RULE_SETUP -#line 585 "../src/compiler/glsl/glsl_lexer.ll" -return NE_OP; - YY_BREAK -case 168: -YY_RULE_SETUP -#line 586 "../src/compiler/glsl/glsl_lexer.ll" -return AND_OP; - YY_BREAK -case 169: -YY_RULE_SETUP -#line 587 "../src/compiler/glsl/glsl_lexer.ll" -return OR_OP; - YY_BREAK -case 170: -YY_RULE_SETUP -#line 588 "../src/compiler/glsl/glsl_lexer.ll" -return XOR_OP; - YY_BREAK -case 171: -YY_RULE_SETUP -#line 589 "../src/compiler/glsl/glsl_lexer.ll" -return LEFT_OP; - YY_BREAK -case 172: -YY_RULE_SETUP -#line 590 "../src/compiler/glsl/glsl_lexer.ll" -return RIGHT_OP; - YY_BREAK -case 173: -YY_RULE_SETUP -#line 592 "../src/compiler/glsl/glsl_lexer.ll" -return MUL_ASSIGN; - YY_BREAK -case 174: -YY_RULE_SETUP -#line 593 "../src/compiler/glsl/glsl_lexer.ll" -return DIV_ASSIGN; - YY_BREAK -case 175: -YY_RULE_SETUP -#line 594 "../src/compiler/glsl/glsl_lexer.ll" -return ADD_ASSIGN; - YY_BREAK -case 176: -YY_RULE_SETUP -#line 595 "../src/compiler/glsl/glsl_lexer.ll" -return MOD_ASSIGN; - YY_BREAK -case 177: -YY_RULE_SETUP -#line 596 "../src/compiler/glsl/glsl_lexer.ll" -return LEFT_ASSIGN; - YY_BREAK -case 178: -YY_RULE_SETUP -#line 597 "../src/compiler/glsl/glsl_lexer.ll" -return RIGHT_ASSIGN; - YY_BREAK -case 179: -YY_RULE_SETUP -#line 598 "../src/compiler/glsl/glsl_lexer.ll" -return AND_ASSIGN; - YY_BREAK -case 180: -YY_RULE_SETUP -#line 599 "../src/compiler/glsl/glsl_lexer.ll" -return XOR_ASSIGN; - YY_BREAK -case 181: -YY_RULE_SETUP -#line 600 "../src/compiler/glsl/glsl_lexer.ll" -return OR_ASSIGN; - YY_BREAK -case 182: -YY_RULE_SETUP -#line 601 "../src/compiler/glsl/glsl_lexer.ll" -return SUB_ASSIGN; - YY_BREAK -case 183: -YY_RULE_SETUP -#line 603 "../src/compiler/glsl/glsl_lexer.ll" -{ - return LITERAL_INTEGER(10); - } - YY_BREAK -case 184: -YY_RULE_SETUP -#line 606 "../src/compiler/glsl/glsl_lexer.ll" -{ - return LITERAL_INTEGER(16); - } - YY_BREAK -case 185: -YY_RULE_SETUP -#line 609 "../src/compiler/glsl/glsl_lexer.ll" -{ - return LITERAL_INTEGER(8); - } - YY_BREAK -case 186: -#line 614 "../src/compiler/glsl/glsl_lexer.ll" -case 187: -#line 615 "../src/compiler/glsl/glsl_lexer.ll" -case 188: -#line 616 "../src/compiler/glsl/glsl_lexer.ll" -case 189: -YY_RULE_SETUP -#line 616 "../src/compiler/glsl/glsl_lexer.ll" -{ - struct _mesa_glsl_parse_state *state = yyextra; - char suffix = yytext[strlen(yytext) - 1]; - if (!state->is_version(120, 300) && - (suffix == 'f' || suffix == 'F')) { - _mesa_glsl_warning(yylloc, state, - "Float suffixes are invalid in GLSL 1.10"); - } - yylval->real = _mesa_strtof(yytext, NULL); - return FLOATCONSTANT; - } - YY_BREAK -case 190: -#line 629 "../src/compiler/glsl/glsl_lexer.ll" -case 191: -#line 630 "../src/compiler/glsl/glsl_lexer.ll" -case 192: -#line 631 "../src/compiler/glsl/glsl_lexer.ll" -case 193: -YY_RULE_SETUP -#line 631 "../src/compiler/glsl/glsl_lexer.ll" -{ - if (!yyextra->is_version(400, 0) && - !yyextra->ARB_gpu_shader_fp64_enable) - return ERROR_TOK; - yylval->dreal = _mesa_strtod(yytext, NULL); - return DOUBLECONSTANT; - } - YY_BREAK -case 194: -YY_RULE_SETUP -#line 639 "../src/compiler/glsl/glsl_lexer.ll" -{ - yylval->n = 1; - return BOOLCONSTANT; - } - YY_BREAK -case 195: -YY_RULE_SETUP -#line 643 "../src/compiler/glsl/glsl_lexer.ll" -{ - yylval->n = 0; - return BOOLCONSTANT; - } - YY_BREAK -/* Reserved words in GLSL 1.10. */ -case 196: -YY_RULE_SETUP -#line 650 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, ASM); - YY_BREAK -case 197: -YY_RULE_SETUP -#line 651 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, CLASS); - YY_BREAK -case 198: -YY_RULE_SETUP -#line 652 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, UNION); - YY_BREAK -case 199: -YY_RULE_SETUP -#line 653 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, ENUM); - YY_BREAK -case 200: -YY_RULE_SETUP -#line 654 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, TYPEDEF); - YY_BREAK -case 201: -YY_RULE_SETUP -#line 655 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, TEMPLATE); - YY_BREAK -case 202: -YY_RULE_SETUP -#line 656 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, THIS); - YY_BREAK -case 203: -YY_RULE_SETUP -#line 657 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(110, 100, 140, 300, yyextra->ARB_uniform_buffer_object_enable, PACKED_TOK); - YY_BREAK -case 204: -YY_RULE_SETUP -#line 658 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, GOTO); - YY_BREAK -case 205: -YY_RULE_SETUP -#line 659 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 130, 300, SWITCH); - YY_BREAK -case 206: -YY_RULE_SETUP -#line 660 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 130, 300, DEFAULT); - YY_BREAK -case 207: -YY_RULE_SETUP -#line 661 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, INLINE_TOK); - YY_BREAK -case 208: -YY_RULE_SETUP -#line 662 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, NOINLINE); - YY_BREAK -case 209: -YY_RULE_SETUP -#line 663 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, PUBLIC_TOK); - YY_BREAK -case 210: -YY_RULE_SETUP -#line 664 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, STATIC); - YY_BREAK -case 211: -YY_RULE_SETUP -#line 665 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, EXTERN); - YY_BREAK -case 212: -YY_RULE_SETUP -#line 666 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, EXTERNAL); - YY_BREAK -case 213: -YY_RULE_SETUP -#line 667 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, INTERFACE_TOK); - YY_BREAK -case 214: -YY_RULE_SETUP -#line 668 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, LONG_TOK); - YY_BREAK -case 215: -YY_RULE_SETUP -#line 669 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, SHORT_TOK); - YY_BREAK -case 216: -YY_RULE_SETUP -#line 670 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 100, 130, 300, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::double_type); - YY_BREAK -case 217: -YY_RULE_SETUP -#line 671 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, HALF); - YY_BREAK -case 218: -YY_RULE_SETUP -#line 672 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, FIXED_TOK); - YY_BREAK -case 219: -YY_RULE_SETUP -#line 673 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(110, 100, 0, 0, yyextra->EXT_gpu_shader4_enable, UNSIGNED); - YY_BREAK -case 220: -YY_RULE_SETUP -#line 674 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, INPUT_TOK); - YY_BREAK -case 221: -YY_RULE_SETUP -#line 675 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, OUTPUT); - YY_BREAK -case 222: -YY_RULE_SETUP -#line 676 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, HVEC2); - YY_BREAK -case 223: -YY_RULE_SETUP -#line 677 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, HVEC3); - YY_BREAK -case 224: -YY_RULE_SETUP -#line 678 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, HVEC4); - YY_BREAK -case 225: -YY_RULE_SETUP -#line 679 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dvec2_type); - YY_BREAK -case 226: -YY_RULE_SETUP -#line 680 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dvec3_type); - YY_BREAK -case 227: -YY_RULE_SETUP -#line 681 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dvec4_type); - YY_BREAK -case 228: -YY_RULE_SETUP -#line 682 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2_type); - YY_BREAK -case 229: -YY_RULE_SETUP -#line 683 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3_type); - YY_BREAK -case 230: -YY_RULE_SETUP -#line 684 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4_type); - YY_BREAK -case 231: -YY_RULE_SETUP -#line 685 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2_type); - YY_BREAK -case 232: -YY_RULE_SETUP -#line 686 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2x3_type); - YY_BREAK -case 233: -YY_RULE_SETUP -#line 687 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2x4_type); - YY_BREAK -case 234: -YY_RULE_SETUP -#line 688 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3x2_type); - YY_BREAK -case 235: -YY_RULE_SETUP -#line 689 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3_type); - YY_BREAK -case 236: -YY_RULE_SETUP -#line 690 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3x4_type); - YY_BREAK -case 237: -YY_RULE_SETUP -#line 691 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4x2_type); - YY_BREAK -case 238: -YY_RULE_SETUP -#line 692 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4x3_type); - YY_BREAK -case 239: -YY_RULE_SETUP -#line 693 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4_type); - YY_BREAK -case 240: -YY_RULE_SETUP -#line 694 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, FVEC2); - YY_BREAK -case 241: -YY_RULE_SETUP -#line 695 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, FVEC3); - YY_BREAK -case 242: -YY_RULE_SETUP -#line 696 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, FVEC4); - YY_BREAK -case 243: -YY_RULE_SETUP -#line 697 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 0, 0, yyextra->ARB_texture_rectangle_enable, glsl_type::sampler2DRect_type); - YY_BREAK -case 244: -YY_RULE_SETUP -#line 698 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, SAMPLER3DRECT); - YY_BREAK -case 245: -YY_RULE_SETUP -#line 699 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(110, 100, 0, 0, yyextra->ARB_texture_rectangle_enable, glsl_type::sampler2DRectShadow_type); - YY_BREAK -case 246: -YY_RULE_SETUP -#line 700 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, SIZEOF); - YY_BREAK -case 247: -YY_RULE_SETUP -#line 701 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, CAST); - YY_BREAK -case 248: -YY_RULE_SETUP -#line 702 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, NAMESPACE); - YY_BREAK -case 249: -YY_RULE_SETUP -#line 703 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(110, 100, 0, 0, USING); - YY_BREAK -/* Additional reserved words in GLSL 1.20. */ -case 250: -YY_RULE_SETUP -#line 706 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(120, 100, 100, 100, LOWP); - YY_BREAK -case 251: -YY_RULE_SETUP -#line 707 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(120, 100, 100, 100, MEDIUMP); - YY_BREAK -case 252: -YY_RULE_SETUP -#line 708 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(120, 100, 100, 100, HIGHP); - YY_BREAK -case 253: -YY_RULE_SETUP -#line 709 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(120, 100, 100, 100, PRECISION); - YY_BREAK -/* Additional reserved words in GLSL 1.30. */ -case 254: -YY_RULE_SETUP -#line 712 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 300, 130, 300, CASE); - YY_BREAK -case 255: -YY_RULE_SETUP -#line 713 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 300, 0, 0, COMMON); - YY_BREAK -case 256: -YY_RULE_SETUP -#line 714 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 300, 0, 0, PARTITION); - YY_BREAK -case 257: -YY_RULE_SETUP -#line 715 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 300, 0, 0, ACTIVE); - YY_BREAK -case 258: -YY_RULE_SETUP -#line 716 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 100, 0, 0, SUPERP); - YY_BREAK -case 259: -YY_RULE_SETUP -#line 717 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(130, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object), glsl_type::samplerBuffer_type); - YY_BREAK -case 260: -YY_RULE_SETUP -#line 718 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(130, 300, 0, 0, FILTER); - YY_BREAK -case 261: -YY_RULE_SETUP -#line 719 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(130, 0, 140, 0, yyextra->ARB_uniform_buffer_object_enable && !yyextra->es_shader, ROW_MAJOR); - YY_BREAK -/* Additional reserved words in GLSL 1.40 */ -case 262: -YY_RULE_SETUP -#line 722 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->NV_texture_rectangle && yyextra->exts->EXT_texture_integer, glsl_type::isampler2DRect_type); - YY_BREAK -case 263: -YY_RULE_SETUP -#line 723 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->NV_texture_rectangle && yyextra->exts->EXT_texture_integer, glsl_type::usampler2DRect_type); - YY_BREAK -case 264: -YY_RULE_SETUP -#line 724 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object && yyextra->exts->EXT_texture_integer), glsl_type::isamplerBuffer_type); - YY_BREAK -case 265: -YY_RULE_SETUP -#line 725 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object && yyextra->exts->EXT_texture_integer), glsl_type::usamplerBuffer_type); - YY_BREAK -/* Additional reserved words in GLSL ES 3.00 */ -case 266: -YY_RULE_SETUP -#line 728 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD(420, 300, 0, 0, RESOURCE); - YY_BREAK -case 267: -YY_RULE_SETUP -#line 729 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(400, 300, 400, 320, yyextra->ARB_gpu_shader5_enable || yyextra->OES_shader_multisample_interpolation_enable, SAMPLE); - YY_BREAK -case 268: -YY_RULE_SETUP -#line 730 "../src/compiler/glsl/glsl_lexer.ll" -KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_shader_subroutine_enable, SUBROUTINE); - YY_BREAK -/* Additional words for ARB_gpu_shader_int64 */ -case 269: -YY_RULE_SETUP -#line 733 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::int64_t_type); - YY_BREAK -case 270: -YY_RULE_SETUP -#line 734 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec2_type); - YY_BREAK -case 271: -YY_RULE_SETUP -#line 735 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec3_type); - YY_BREAK -case 272: -YY_RULE_SETUP -#line 736 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec4_type); - YY_BREAK -case 273: -YY_RULE_SETUP -#line 738 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::uint64_t_type); - YY_BREAK -case 274: -YY_RULE_SETUP -#line 739 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec2_type); - YY_BREAK -case 275: -YY_RULE_SETUP -#line 740 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec3_type); - YY_BREAK -case 276: -YY_RULE_SETUP -#line 741 "../src/compiler/glsl/glsl_lexer.ll" -TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec4_type); - YY_BREAK -case 277: -YY_RULE_SETUP -#line 743 "../src/compiler/glsl/glsl_lexer.ll" -{ - struct _mesa_glsl_parse_state *state = yyextra; - if (state->es_shader && yyleng > 1024) { - _mesa_glsl_error(yylloc, state, - "Identifier `%s' exceeds 1024 characters", - yytext); - } - return classify_identifier(state, yytext, yyleng, yylval); - } - YY_BREAK -case 278: -YY_RULE_SETUP -#line 753 "../src/compiler/glsl/glsl_lexer.ll" -{ struct _mesa_glsl_parse_state *state = yyextra; - state->is_field = true; - return DOT_TOK; } - YY_BREAK -case 279: -YY_RULE_SETUP -#line 757 "../src/compiler/glsl/glsl_lexer.ll" -{ return yytext[0]; } - YY_BREAK -case 280: -YY_RULE_SETUP -#line 759 "../src/compiler/glsl/glsl_lexer.ll" -YY_FATAL_ERROR( "flex scanner jammed" ); - YY_BREAK -#line 3561 "src/compiler/glsl/glsl_lexer.cpp" -case YY_STATE_EOF(INITIAL): -case YY_STATE_EOF(PP): -case YY_STATE_EOF(PRAGMA): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yyg->yy_hold_char; - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); - - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yyg->yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yyg->yy_last_accepting_cpos; - yy_current_state = yyg->yy_last_accepting_state; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_END_OF_FILE: - { - yyg->yy_did_buffer_switch_on_eof = 0; - - if ( yywrap( yyscanner ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = - yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yyg->yy_c_buf_p = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of user's declarations */ -} /* end of yylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - char *source = yyg->yytext_ptr; - int number_to_move, i; - int ret_val; - - if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; - - else - { - int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - - int yy_c_buf_p_offset = - (int) (yyg->yy_c_buf_p - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yyrealloc( (void *) b->yy_ch_buf, - (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = NULL; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - yyg->yy_n_chars, num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - if ( yyg->yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin , yyscanner); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( - (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - /* "- 2" to take care of EOB's */ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); - } - - yyg->yy_n_chars += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (yyscan_t yyscanner) -{ - yy_state_type yy_current_state; - char *yy_cp; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_current_state = yyg->yy_start; - yy_current_state += YY_AT_BOL(); - - for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) - { - YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - yyg->yy_last_accepting_state = yy_current_state; - yyg->yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1112 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) -{ - int yy_is_jam; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - char *yy_cp = yyg->yy_c_buf_p; - - YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - yyg->yy_last_accepting_state = yy_current_state; - yyg->yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1112 ) - yy_c = yy_meta[yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 1111); - - (void)yyg; - return yy_is_jam ? 0 : yy_current_state; -} - -#ifndef YY_NO_UNPUT - -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (yyscan_t yyscanner) -#else - static int input (yyscan_t yyscanner) -#endif - -{ - int c; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - *yyg->yy_c_buf_p = yyg->yy_hold_char; - - if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - /* This was really a NUL. */ - *yyg->yy_c_buf_p = '\0'; - - else - { /* need more input */ - int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); - ++yyg->yy_c_buf_p; - - switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart( yyin , yyscanner); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap( yyscanner ) ) - return 0; - - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(yyscanner); -#else - return input(yyscanner); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = yyg->yytext_ptr + offset; - break; - } - } - } - - c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ - *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ - yyg->yy_hold_char = *++yyg->yy_c_buf_p; - - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); - - return c; -} -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * @param yyscanner The scanner object. - * @note This function does not reset the start condition to @c INITIAL . - */ - void yyrestart (FILE * input_file , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); - } - - yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); - yy_load_buffer_state( yyscanner ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * @param yyscanner The scanner object. - */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (yyscanner); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( yyscanner ); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yyg->yy_did_buffer_switch_on_eof = 1; -} - -static void yy_load_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - yyg->yy_hold_char = *yyg->yy_c_buf_p; -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * @param yyscanner The scanner object. - * @return the allocated buffer state. - */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file , yyscanner); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * @param yyscanner The scanner object. - */ - void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yyfree( (void *) b->yy_ch_buf , yyscanner ); - - yyfree( (void *) b , yyscanner ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) - -{ - int oerrno = errno; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_flush_buffer( b , yyscanner); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * @param yyscanner The scanner object. - */ - void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( yyscanner ); -} - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * @param yyscanner The scanner object. - */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(yyscanner); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - yyg->yy_buffer_stack_top++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * @param yyscanner The scanner object. - */ -void yypop_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); - YY_CURRENT_BUFFER_LVALUE = NULL; - if (yyg->yy_buffer_stack_top > 0) - --yyg->yy_buffer_stack_top; - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void yyensure_buffer_stack (yyscan_t yyscanner) -{ - yy_size_t num_to_alloc; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (!yyg->yy_buffer_stack) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - yyg->yy_buffer_stack_max = num_to_alloc; - yyg->yy_buffer_stack_top = 0; - return; - } - - if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - yy_size_t grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = yyg->yy_buffer_stack_max + grow_size; - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc - (yyg->yy_buffer_stack, - num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); - yyg->yy_buffer_stack_max = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return NULL; - - b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = NULL; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b , yyscanner ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) -{ - - return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); -} - -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param yybytes the byte buffer to scan - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = (yy_size_t) (_yybytes_len + 2); - buf = (char *) yyalloc( n , yyscanner ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n , yyscanner); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = yyg->yy_hold_char; \ - yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ - yyg->yy_hold_char = *yyg->yy_c_buf_p; \ - *yyg->yy_c_buf_p = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the user-defined data for this scanner. - * @param yyscanner The scanner object. - */ -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyextra; -} - -/** Get the current line number. - * @param yyscanner The scanner object. - */ -int yyget_lineno (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yylineno; -} - -/** Get the current column number. - * @param yyscanner The scanner object. - */ -int yyget_column (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yycolumn; -} - -/** Get the input stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_in (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyin; -} - -/** Get the output stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_out (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyout; -} - -/** Get the length of the current token. - * @param yyscanner The scanner object. - */ -int yyget_leng (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyleng; -} - -/** Get the current token. - * @param yyscanner The scanner object. - */ - -char *yyget_text (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yytext; -} - -/** Set the user-defined data. This data is never touched by the scanner. - * @param user_defined The data to be associated with this scanner. - * @param yyscanner The scanner object. - */ -void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyextra = user_defined ; -} - -/** Set the current line number. - * @param _line_number line number - * @param yyscanner The scanner object. - */ -void yyset_lineno (int _line_number , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* lineno is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); - - yylineno = _line_number; -} - -/** Set the current column. - * @param _column_no column number - * @param yyscanner The scanner object. - */ -void yyset_column (int _column_no , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* column is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_column called with no buffer" ); - - yycolumn = _column_no; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param _in_str A readable stream. - * @param yyscanner The scanner object. - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * _in_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyin = _in_str ; -} - -void yyset_out (FILE * _out_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyout = _out_str ; -} - -int yyget_debug (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yy_flex_debug; -} - -void yyset_debug (int _bdebug , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yy_flex_debug = _bdebug ; -} - -/* Accessor methods for yylval and yylloc */ - -YYSTYPE * yyget_lval (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yylval; -} - -void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yylval = yylval_param; -} - -YYLTYPE *yyget_lloc (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yylloc; -} - -void yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yylloc = yylloc_param; -} - -/* User-visible API */ - -/* yylex_init is special because it creates the scanner itself, so it is - * the ONLY reentrant function that doesn't take the scanner as the last argument. - * That's why we explicitly handle the declaration, instead of using our macros. - */ -int yylex_init(yyscan_t* ptr_yy_globals) -{ - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - return yy_init_globals ( *ptr_yy_globals ); -} - -/* yylex_init_extra has the same functionality as yylex_init, but follows the - * convention of taking the scanner as the last argument. Note however, that - * this is a *pointer* to a scanner, as it will be allocated by this call (and - * is the reason, too, why this function also must handle its own declaration). - * The user defined value in the first argument will be available to yyalloc in - * the yyextra field. - */ -int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) -{ - struct yyguts_t dummy_yyguts; - - yyset_extra (yy_user_defined, &dummy_yyguts); - - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in - yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - yyset_extra (yy_user_defined, *ptr_yy_globals); - - return yy_init_globals ( *ptr_yy_globals ); -} - -static int yy_init_globals (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - yyg->yy_buffer_stack = NULL; - yyg->yy_buffer_stack_top = 0; - yyg->yy_buffer_stack_max = 0; - yyg->yy_c_buf_p = NULL; - yyg->yy_init = 0; - yyg->yy_start = 0; - - yyg->yy_start_stack_ptr = 0; - yyg->yy_start_stack_depth = 0; - yyg->yy_start_stack = NULL; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = NULL; - yyout = NULL; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; -} - -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(yyscanner); - } - - /* Destroy the stack itself. */ - yyfree(yyg->yy_buffer_stack , yyscanner); - yyg->yy_buffer_stack = NULL; - - /* Destroy the start condition stack. */ - yyfree( yyg->yy_start_stack , yyscanner ); - yyg->yy_start_stack = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( yyscanner); - - /* Destroy the main struct (reentrant only). */ - yyfree ( yyscanner , yyscanner ); - yyscanner = NULL; - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - - int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (const char * s , yyscan_t yyscanner) -{ - int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *yyalloc (yy_size_t size , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - return malloc(size); -} - -void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return realloc(ptr, size); -} - -void yyfree (void * ptr , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - (void)yyg; - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 759 "../src/compiler/glsl/glsl_lexer.ll" - - -int -classify_identifier(struct _mesa_glsl_parse_state *state, const char *name, - unsigned name_len, YYSTYPE *output) -{ - /* We're not doing linear_strdup here, to avoid an implicit call on - * strlen() for the length of the string, as this is already found by flex - * and stored in yyleng - */ - char *id = (char *) linear_alloc_child(state->linalloc, name_len + 1); - memcpy(id, name, name_len + 1); - output->identifier = id; - - if (state->is_field) { - state->is_field = false; - return FIELD_SELECTION; - } - if (state->symbols->get_variable(name) || state->symbols->get_function(name)) - return IDENTIFIER; - else if (state->symbols->get_type(name)) - return TYPE_IDENTIFIER; - else - return NEW_IDENTIFIER; -} - -void -_mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, const char *string) -{ - yylex_init_extra(state, & state->scanner); - yy_scan_string(string, state->scanner); -} - -void -_mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state) -{ - yylex_destroy(state->scanner); -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_lexer.ll b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_lexer.ll deleted file mode 100644 index ad109b3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_lexer.ll +++ /dev/null @@ -1,795 +0,0 @@ -%{ -/* - * Copyright © 2008, 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include -#include "util/strtod.h" -#include "ast.h" -#include "glsl_parser_extras.h" -#include "glsl_parser.h" -#include "main/consts_exts.h" - -static int classify_identifier(struct _mesa_glsl_parse_state *, const char *, - unsigned name_len, YYSTYPE *output); - -#ifdef _MSC_VER -#define YY_NO_UNISTD_H -#endif - -#define YY_NO_INPUT -#define YY_USER_ACTION \ - do { \ - yylloc->first_column = yycolumn + 1; \ - yylloc->first_line = yylloc->last_line = yylineno + 1; \ - yycolumn += yyleng; \ - yylloc->last_column = yycolumn + 1; \ - } while(0); - -#define YY_USER_INIT yylineno = 0; yycolumn = 0; yylloc->source = 0; \ - yylloc->path = NULL; - -/* A macro for handling reserved words and keywords across language versions. - * - * Certain words start out as identifiers, become reserved words in - * later language revisions, and finally become language keywords. - * This may happen at different times in desktop GLSL and GLSL ES. - * - * For example, consider the following lexer rule: - * samplerBuffer KEYWORD(130, 0, 140, 0, SAMPLERBUFFER) - * - * This means that "samplerBuffer" will be treated as: - * - a keyword (SAMPLERBUFFER token) ...in GLSL >= 1.40 - * - a reserved word - error ...in GLSL >= 1.30 - * - an identifier ...in GLSL < 1.30 or GLSL ES - */ -#define KEYWORD(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, token) \ - KEYWORD_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, false, token) - -/** - * Like the KEYWORD macro, but the word is also treated as a keyword - * if the given boolean expression is true. - */ -#define KEYWORD_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - alt_expr, token) \ - do { \ - if (yyextra->is_version(allowed_glsl, allowed_glsl_es) \ - || (alt_expr)) { \ - return token; \ - } else if (yyextra->is_version(reserved_glsl, \ - reserved_glsl_es)) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else { \ - return classify_identifier(yyextra, yytext, yyleng, yylval); \ - } \ - } while (0) - -/** - * Like KEYWORD_WITH_ALT, but used for built-in GLSL types - */ -#define TYPE_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - alt_expr, gtype) \ - do { \ - if (yyextra->is_version(allowed_glsl, allowed_glsl_es) \ - || (alt_expr)) { \ - yylval->type = gtype; \ - return BASIC_TYPE_TOK; \ - } else if (yyextra->is_version(reserved_glsl, \ - reserved_glsl_es)) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else { \ - return classify_identifier(yyextra, yytext, yyleng, yylval); \ - } \ - } while (0) - -#define TYPE(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - gtype) \ - TYPE_WITH_ALT(reserved_glsl, reserved_glsl_es, \ - allowed_glsl, allowed_glsl_es, \ - false, gtype) - -/** - * A macro for handling keywords that have been present in GLSL since - * its origin, but were changed into reserved words in later versions. - */ -#define DEPRECATED_KEYWORD(token, state, reserved_glsl, \ - reserved_glsl_es) \ - do { \ - if (yyextra->is_version(reserved_glsl, reserved_glsl_es) && \ - !state->compat_shader) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else { \ - return token; \ - } \ - } while (0) - -/** - * Like DEPRECATED_KEYWORD, but for types - */ -#define DEPRECATED_ES_TYPE_WITH_ALT(alt_expr, gtype) \ - do { \ - if (yyextra->is_version(0, 300)) { \ - _mesa_glsl_error(yylloc, yyextra, \ - "illegal use of reserved word `%s'", yytext); \ - return ERROR_TOK; \ - } else if (alt_expr) { \ - yylval->type = gtype; \ - return BASIC_TYPE_TOK; \ - } else { \ - return classify_identifier(yyextra, yytext, yyleng, yylval); \ - } \ - } while (0) - -#define DEPRECATED_ES_TYPE(gtype) \ - DEPRECATED_ES_TYPE_WITH_ALT(true, gtype) - -static int -literal_integer(char *text, int len, struct _mesa_glsl_parse_state *state, - YYSTYPE *lval, YYLTYPE *lloc, int base) -{ - bool is_uint = (text[len - 1] == 'u' || - text[len - 1] == 'U'); - bool is_long = (text[len - 1] == 'l' || text[len - 1] == 'L'); - const char *digits = text; - - if (is_long) - is_uint = (text[len - 2] == 'u' && text[len - 1] == 'l') || - (text[len - 2] == 'U' && text[len - 1] == 'L'); - /* Skip "0x" */ - if (base == 16) - digits += 2; - - unsigned long long value = strtoull(digits, NULL, base); - - if (is_long) - lval->n64 = (int64_t)value; - else - lval->n = (int)value; - - if (is_long && !is_uint && base == 10 && value > (uint64_t)LLONG_MAX + 1) { - /* Tries to catch unintentionally providing a negative value. */ - _mesa_glsl_warning(lloc, state, - "signed literal value `%s' is interpreted as %lld", - text, lval->n64); - } else if (!is_long && value > UINT_MAX) { - /* Note that signed 0xffffffff is valid, not out of range! */ - if (state->is_version(130, 300)) { - _mesa_glsl_error(lloc, state, - "literal value `%s' out of range", text); - } else { - _mesa_glsl_warning(lloc, state, - "literal value `%s' out of range", text); - } - } else if (base == 10 && !is_uint && (unsigned)value > (unsigned)INT_MAX + 1) { - /* Tries to catch unintentionally providing a negative value. - * Note that -2147483648 is parsed as -(2147483648), so we don't - * want to warn for INT_MAX. - */ - _mesa_glsl_warning(lloc, state, - "signed literal value `%s' is interpreted as %d", - text, lval->n); - } - if (is_long) - return is_uint ? UINT64CONSTANT : INT64CONSTANT; - else - return is_uint ? UINTCONSTANT : INTCONSTANT; -} - -#define LITERAL_INTEGER(base) \ - literal_integer(yytext, yyleng, yyextra, yylval, yylloc, base) - -%} - -%option bison-bridge bison-locations reentrant noyywrap -%option nounput noyy_top_state -%option never-interactive -%option prefix="_mesa_glsl_lexer_" -%option extra-type="struct _mesa_glsl_parse_state *" -%option warn nodefault - - /* Note: When adding any start conditions to this list, you must also - * update the "Internal compiler error" catch-all rule near the end of - * this file. */ -%x PP PRAGMA - -DEC_INT [1-9][0-9]* -HEX_INT 0[xX][0-9a-fA-F]+ -OCT_INT 0[0-7]* -INT ({DEC_INT}|{HEX_INT}|{OCT_INT}) -SPC [ \t]* -SPCP [ \t]+ -HASH ^{SPC}#{SPC} -PATH ["][./ _A-Za-z0-9]*["] -%% - -[ \r\t]+ ; - - /* Preprocessor tokens. */ -^[ \t]*#[ \t]*$ ; -^[ \t]*#[ \t]*version { BEGIN PP; return VERSION_TOK; } -^[ \t]*#[ \t]*extension { BEGIN PP; return EXTENSION; } -{HASH}include { - if (!yyextra->ARB_shading_language_include_enable) { - struct _mesa_glsl_parse_state *state = yyextra; - _mesa_glsl_error(yylloc, state, - "ARB_shading_language_include required " - "to use #include"); - } -} -{HASH}line{SPCP}{INT}{SPCP}{INT}{SPC}$ { - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - - /* From GLSL 3.30 and GLSL ES on, after processing the - * line directive (including its new-line), the implementation - * will behave as if it is compiling at the line number passed - * as argument. It was line number + 1 in older specifications. - */ - if (yyextra->is_version(330, 100)) - yylineno--; - - yylloc->source = strtol(ptr, NULL, 0); - yylloc->path = NULL; - } -{HASH}line{SPCP}{INT}{SPCP}{PATH}{SPC}$ { - if (!yyextra->ARB_shading_language_include_enable) { - struct _mesa_glsl_parse_state *state = yyextra; - _mesa_glsl_error(yylloc, state, - "ARB_shading_language_include required " - "to use #line \"\""); - } - - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - - /* From GLSL 3.30 and GLSL ES on, after processing the - * line directive (including its new-line), the implementation - * will behave as if it is compiling at the line number passed - * as argument. It was line number + 1 in older specifications. - */ - if (yyextra->is_version(330, 100)) - yylineno--; - - while (isspace(*ptr)) - ptr++; - - /* Skip over leading " */ - ptr++; - - char *end = strrchr(ptr, '"'); - int path_len = (end - ptr) + 1; - void *mem_ctx = yyextra->linalloc; - yylloc->path = (char *) linear_alloc_child(mem_ctx, path_len); - memcpy(yylloc->path, ptr, path_len); - yylloc->path[path_len - 1] = '\0'; - } -{HASH}line{SPCP}{INT}{SPC}$ { - /* Eat characters until the first digit is - * encountered - */ - char *ptr = yytext; - while (!isdigit(*ptr)) - ptr++; - - /* Subtract one from the line number because - * yylineno is zero-based instead of - * one-based. - */ - yylineno = strtol(ptr, &ptr, 0) - 1; - - /* From GLSL 3.30 and GLSL ES on, after processing the - * line directive (including its new-line), the implementation - * will behave as if it is compiling at the line number passed - * as argument. It was line number + 1 in older specifications. - */ - if (yyextra->is_version(330, 100)) - yylineno--; - } -^{SPC}#{SPC}pragma{SPCP}debug{SPC}\({SPC}on{SPC}\) { - BEGIN PP; - return PRAGMA_DEBUG_ON; - } -^{SPC}#{SPC}pragma{SPCP}debug{SPC}\({SPC}off{SPC}\) { - BEGIN PP; - return PRAGMA_DEBUG_OFF; - } -^{SPC}#{SPC}pragma{SPCP}optimize{SPC}\({SPC}on{SPC}\) { - BEGIN PP; - return PRAGMA_OPTIMIZE_ON; - } -^{SPC}#{SPC}pragma{SPCP}optimize{SPC}\({SPC}off{SPC}\) { - BEGIN PP; - return PRAGMA_OPTIMIZE_OFF; - } -^{SPC}#{SPC}pragma{SPCP}warning{SPC}\({SPC}on{SPC}\) { - BEGIN PP; - return PRAGMA_WARNING_ON; - } -^{SPC}#{SPC}pragma{SPCP}warning{SPC}\({SPC}off{SPC}\) { - BEGIN PP; - return PRAGMA_WARNING_OFF; - } -^{SPC}#{SPC}pragma{SPCP}STDGL{SPCP}invariant{SPC}\({SPC}all{SPC}\) { - BEGIN PP; - return PRAGMA_INVARIANT_ALL; - } -^{SPC}#{SPC}pragma{SPCP} { BEGIN PRAGMA; } - -\n { BEGIN 0; yylineno++; yycolumn = 0; } -. { } - -\/\/[^\n]* { } -[ \t\r]* { } -: return COLON; -[_a-zA-Z][_a-zA-Z0-9]* { - /* We're not doing linear_strdup here, to avoid an implicit call - * on strlen() for the length of the string, as this is already - * found by flex and stored in yyleng - */ - void *mem_ctx = yyextra->linalloc; - char *id = (char *) linear_alloc_child(mem_ctx, yyleng + 1); - memcpy(id, yytext, yyleng + 1); - yylval->identifier = id; - return IDENTIFIER; - } -[1-9][0-9]* { - yylval->n = strtol(yytext, NULL, 10); - return INTCONSTANT; - } -0 { - yylval->n = 0; - return INTCONSTANT; - } -\n { BEGIN 0; yylineno++; yycolumn = 0; return EOL; } -. { return yytext[0]; } - -\n { yylineno++; yycolumn = 0; } - -attribute DEPRECATED_KEYWORD(ATTRIBUTE, yyextra, 420, 300); -const return CONST_TOK; -bool { yylval->type = glsl_type::bool_type; return BASIC_TYPE_TOK; } -float { yylval->type = glsl_type::float_type; return BASIC_TYPE_TOK; } -int { yylval->type = glsl_type::int_type; return BASIC_TYPE_TOK; } -uint TYPE(130, 300, 130, 300, glsl_type::uint_type); - -break return BREAK; -continue return CONTINUE; -do return DO; -while return WHILE; -else return ELSE; -for return FOR; -if return IF; -discard return DISCARD; -return return RETURN; -demote KEYWORD_WITH_ALT(0, 0, 0, 0, yyextra->EXT_demote_to_helper_invocation_enable, DEMOTE); - -bvec2 { yylval->type = glsl_type::bvec2_type; return BASIC_TYPE_TOK; } -bvec3 { yylval->type = glsl_type::bvec3_type; return BASIC_TYPE_TOK; } -bvec4 { yylval->type = glsl_type::bvec4_type; return BASIC_TYPE_TOK; } -ivec2 { yylval->type = glsl_type::ivec2_type; return BASIC_TYPE_TOK; } -ivec3 { yylval->type = glsl_type::ivec3_type; return BASIC_TYPE_TOK; } -ivec4 { yylval->type = glsl_type::ivec4_type; return BASIC_TYPE_TOK; } -uvec2 TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::uvec2_type); -uvec3 TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::uvec3_type); -uvec4 TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::uvec4_type); -vec2 { yylval->type = glsl_type::vec2_type; return BASIC_TYPE_TOK; } -vec3 { yylval->type = glsl_type::vec3_type; return BASIC_TYPE_TOK; } -vec4 { yylval->type = glsl_type::vec4_type; return BASIC_TYPE_TOK; } -mat2 { yylval->type = glsl_type::mat2_type; return BASIC_TYPE_TOK; } -mat3 { yylval->type = glsl_type::mat3_type; return BASIC_TYPE_TOK; } -mat4 { yylval->type = glsl_type::mat4_type; return BASIC_TYPE_TOK; } -mat2x2 TYPE(120, 300, 120, 300, glsl_type::mat2_type); -mat2x3 TYPE(120, 300, 120, 300, glsl_type::mat2x3_type); -mat2x4 TYPE(120, 300, 120, 300, glsl_type::mat2x4_type); -mat3x2 TYPE(120, 300, 120, 300, glsl_type::mat3x2_type); -mat3x3 TYPE(120, 300, 120, 300, glsl_type::mat3_type); -mat3x4 TYPE(120, 300, 120, 300, glsl_type::mat3x4_type); -mat4x2 TYPE(120, 300, 120, 300, glsl_type::mat4x2_type); -mat4x3 TYPE(120, 300, 120, 300, glsl_type::mat4x3_type); -mat4x4 TYPE(120, 300, 120, 300, glsl_type::mat4_type); - -in return IN_TOK; -out return OUT_TOK; -inout return INOUT_TOK; -uniform return UNIFORM; -buffer KEYWORD_WITH_ALT(0, 0, 430, 310, yyextra->ARB_shader_storage_buffer_object_enable, BUFFER); -varying DEPRECATED_KEYWORD(VARYING, yyextra, 420, 300); -centroid KEYWORD_WITH_ALT(120, 300, 120, 300, yyextra->EXT_gpu_shader4_enable, CENTROID); -invariant KEYWORD(120, 100, 120, 100, INVARIANT); -flat KEYWORD_WITH_ALT(130, 100, 130, 300, yyextra->EXT_gpu_shader4_enable, FLAT); -smooth KEYWORD(130, 300, 130, 300, SMOOTH); -noperspective KEYWORD_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable || yyextra->NV_shader_noperspective_interpolation_enable, NOPERSPECTIVE); -patch KEYWORD_WITH_ALT(0, 300, 400, 320, yyextra->has_tessellation_shader(), PATCH); - -sampler1D DEPRECATED_ES_TYPE(glsl_type::sampler1D_type); -sampler2D { yylval->type = glsl_type::sampler2D_type; return BASIC_TYPE_TOK; } -sampler3D { yylval->type = glsl_type::sampler3D_type; return BASIC_TYPE_TOK; } -samplerCube { yylval->type = glsl_type::samplerCube_type; return BASIC_TYPE_TOK; } -sampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler1DArray_type); -sampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler2DArray_type); -sampler1DShadow DEPRECATED_ES_TYPE(glsl_type::sampler1DShadow_type); -sampler2DShadow { yylval->type = glsl_type::sampler2DShadow_type; return BASIC_TYPE_TOK; } -samplerCubeShadow TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::samplerCubeShadow_type); -sampler1DArrayShadow TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler1DArrayShadow_type); -sampler2DArrayShadow TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler2DArrayShadow_type); -isampler1D TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler1D_type); -isampler2D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler2D_type); -isampler3D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler3D_type); -isamplerCube TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isamplerCube_type); -isampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::isampler1DArray_type); -isampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::isampler2DArray_type); -usampler1D TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler1D_type); -usampler2D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler2D_type); -usampler3D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler3D_type); -usamplerCube TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usamplerCube_type); -usampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::usampler1DArray_type); -usampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::usampler2DArray_type); - - /* additional keywords in ARB_texture_multisample, included in GLSL 1.50 */ - /* these are reserved but not defined in GLSL 3.00 */ - /* [iu]sampler2DMS are defined in GLSL ES 3.10 */ -sampler2DMS TYPE_WITH_ALT(150, 300, 150, 310, yyextra->ARB_texture_multisample_enable, glsl_type::sampler2DMS_type); -isampler2DMS TYPE_WITH_ALT(150, 300, 150, 310, yyextra->ARB_texture_multisample_enable, glsl_type::isampler2DMS_type); -usampler2DMS TYPE_WITH_ALT(150, 300, 150, 310, yyextra->ARB_texture_multisample_enable, glsl_type::usampler2DMS_type); -sampler2DMSArray TYPE_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_multisample_enable || yyextra->OES_texture_storage_multisample_2d_array_enable, glsl_type::sampler2DMSArray_type); -isampler2DMSArray TYPE_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_multisample_enable || yyextra->OES_texture_storage_multisample_2d_array_enable, glsl_type::isampler2DMSArray_type); -usampler2DMSArray TYPE_WITH_ALT(150, 300, 150, 320, yyextra->ARB_texture_multisample_enable || yyextra->OES_texture_storage_multisample_2d_array_enable, glsl_type::usampler2DMSArray_type); - - /* keywords available with ARB_texture_cube_map_array_enable extension on desktop GLSL */ -samplerCubeArray TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::samplerCubeArray_type); -isamplerCubeArray TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::isamplerCubeArray_type); -usamplerCubeArray TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::usamplerCubeArray_type); -samplerCubeArrayShadow TYPE_WITH_ALT(400, 310, 400, 320, yyextra->ARB_texture_cube_map_array_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::samplerCubeArrayShadow_type); - -samplerExternalOES { - if (yyextra->OES_EGL_image_external_enable || yyextra->OES_EGL_image_external_essl3_enable) { - yylval->type = glsl_type::samplerExternalOES_type; - return BASIC_TYPE_TOK; - } else - return IDENTIFIER; - } - - /* keywords available with ARB_gpu_shader5 */ -precise KEYWORD_WITH_ALT(400, 310, 400, 320, yyextra->ARB_gpu_shader5_enable || yyextra->EXT_gpu_shader5_enable || yyextra->OES_gpu_shader5_enable, PRECISE); - - /* keywords available with ARB_shader_image_load_store */ -image1D TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image1D_type); -image2D TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2D_type); -image3D TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image3D_type); -image2DRect TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DRect_type); -imageCube TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::imageCube_type); -imageBuffer TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::imageBuffer_type); -image1DArray TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image1DArray_type); -image2DArray TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DArray_type); -imageCubeArray TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::imageCubeArray_type); -image2DMS TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DMS_type); -image2DMSArray TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::image2DMSArray_type); -iimage1D TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage1D_type); -iimage2D TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2D_type); -iimage3D TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage3D_type); -iimage2DRect TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DRect_type); -iimageCube TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimageCube_type); -iimageBuffer TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::iimageBuffer_type); -iimage1DArray TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage1DArray_type); -iimage2DArray TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DArray_type); -iimageCubeArray TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::iimageCubeArray_type); -iimage2DMS TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DMS_type); -iimage2DMSArray TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::iimage2DMSArray_type); -uimage1D TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage1D_type); -uimage2D TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2D_type); -uimage3D TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage3D_type); -uimage2DRect TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DRect_type); -uimageCube TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimageCube_type); -uimageBuffer TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::uimageBuffer_type); -uimage1DArray TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage1DArray_type); -uimage2DArray TYPE_WITH_ALT(130, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DArray_type); -uimageCubeArray TYPE_WITH_ALT(130, 300, 420, 320, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->OES_texture_cube_map_array_enable || yyextra->EXT_texture_cube_map_array_enable, glsl_type::uimageCubeArray_type); -uimage2DMS TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DMS_type); -uimage2DMSArray TYPE_WITH_ALT(130, 300, 420, 0, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable, glsl_type::uimage2DMSArray_type); -image1DShadow KEYWORD(130, 0, 420, 0, IMAGE1DSHADOW); -image2DShadow KEYWORD(130, 0, 420, 0, IMAGE2DSHADOW); -image1DArrayShadow KEYWORD(130, 0, 420, 0, IMAGE1DARRAYSHADOW); -image2DArrayShadow KEYWORD(130, 0, 420, 0, IMAGE2DARRAYSHADOW); - -coherent KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, COHERENT); -volatile KEYWORD_WITH_ALT(110, 100, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, VOLATILE); -restrict KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->EXT_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, RESTRICT); -readonly KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, READONLY); -writeonly KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_load_store_enable || yyextra->ARB_shader_storage_buffer_object_enable, WRITEONLY); - -atomic_uint TYPE_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_atomic_counters_enable, glsl_type::atomic_uint_type); - -shared KEYWORD_WITH_ALT(430, 310, 430, 310, yyextra->ARB_compute_shader_enable, SHARED); - -struct return STRUCT; -void return VOID_TOK; - -layout { - if ((yyextra->is_version(140, 300)) - || yyextra->ARB_bindless_texture_enable - || yyextra->KHR_blend_equation_advanced_enable - || yyextra->AMD_conservative_depth_enable - || yyextra->ARB_conservative_depth_enable - || yyextra->ARB_explicit_attrib_location_enable - || yyextra->ARB_explicit_uniform_location_enable - || yyextra->ARB_post_depth_coverage_enable - || yyextra->has_separate_shader_objects() - || yyextra->ARB_uniform_buffer_object_enable - || yyextra->ARB_fragment_coord_conventions_enable - || yyextra->ARB_shading_language_420pack_enable - || yyextra->ARB_compute_shader_enable - || yyextra->ARB_tessellation_shader_enable - || yyextra->EXT_shader_framebuffer_fetch_non_coherent_enable) { - return LAYOUT_TOK; - } else { - return classify_identifier(yyextra, yytext, yyleng, yylval); - } - } - -\+\+ return INC_OP; --- return DEC_OP; -\<= return LE_OP; ->= return GE_OP; -== return EQ_OP; -!= return NE_OP; -&& return AND_OP; -\|\| return OR_OP; -"^^" return XOR_OP; -"<<" return LEFT_OP; -">>" return RIGHT_OP; - -\*= return MUL_ASSIGN; -\/= return DIV_ASSIGN; -\+= return ADD_ASSIGN; -\%= return MOD_ASSIGN; -\<\<= return LEFT_ASSIGN; ->>= return RIGHT_ASSIGN; -&= return AND_ASSIGN; -"^=" return XOR_ASSIGN; -\|= return OR_ASSIGN; --= return SUB_ASSIGN; - -[1-9][0-9]*([uU]|[lL]|ul|UL)? { - return LITERAL_INTEGER(10); - } -0[xX][0-9a-fA-F]+([uU]|[lL]|ul|UL)? { - return LITERAL_INTEGER(16); - } -0[0-7]*([uU]|[lL]|ul|UL)? { - return LITERAL_INTEGER(8); - } - -[0-9]+\.[0-9]+([eE][+-]?[0-9]+)?[fF]? | -\.[0-9]+([eE][+-]?[0-9]+)?[fF]? | -[0-9]+\.([eE][+-]?[0-9]+)?[fF]? | -[0-9]+[eE][+-]?[0-9]+[fF]? { - struct _mesa_glsl_parse_state *state = yyextra; - char suffix = yytext[strlen(yytext) - 1]; - if (!state->is_version(120, 300) && - (suffix == 'f' || suffix == 'F')) { - _mesa_glsl_warning(yylloc, state, - "Float suffixes are invalid in GLSL 1.10"); - } - yylval->real = _mesa_strtof(yytext, NULL); - return FLOATCONSTANT; - } - -[0-9]+\.[0-9]+([eE][+-]?[0-9]+)?(lf|LF) | -\.[0-9]+([eE][+-]?[0-9]+)?(lf|LF) | -[0-9]+\.([eE][+-]?[0-9]+)?(lf|LF) | -[0-9]+[eE][+-]?[0-9]+(lf|LF) { - if (!yyextra->is_version(400, 0) && - !yyextra->ARB_gpu_shader_fp64_enable) - return ERROR_TOK; - yylval->dreal = _mesa_strtod(yytext, NULL); - return DOUBLECONSTANT; - } - -true { - yylval->n = 1; - return BOOLCONSTANT; - } -false { - yylval->n = 0; - return BOOLCONSTANT; - } - - - /* Reserved words in GLSL 1.10. */ -asm KEYWORD(110, 100, 0, 0, ASM); -class KEYWORD(110, 100, 0, 0, CLASS); -union KEYWORD(110, 100, 0, 0, UNION); -enum KEYWORD(110, 100, 0, 0, ENUM); -typedef KEYWORD(110, 100, 0, 0, TYPEDEF); -template KEYWORD(110, 100, 0, 0, TEMPLATE); -this KEYWORD(110, 100, 0, 0, THIS); -packed KEYWORD_WITH_ALT(110, 100, 140, 300, yyextra->ARB_uniform_buffer_object_enable, PACKED_TOK); -goto KEYWORD(110, 100, 0, 0, GOTO); -switch KEYWORD(110, 100, 130, 300, SWITCH); -default KEYWORD(110, 100, 130, 300, DEFAULT); -inline KEYWORD(110, 100, 0, 0, INLINE_TOK); -noinline KEYWORD(110, 100, 0, 0, NOINLINE); -public KEYWORD(110, 100, 0, 0, PUBLIC_TOK); -static KEYWORD(110, 100, 0, 0, STATIC); -extern KEYWORD(110, 100, 0, 0, EXTERN); -external KEYWORD(110, 100, 0, 0, EXTERNAL); -interface KEYWORD(110, 100, 0, 0, INTERFACE_TOK); -long KEYWORD(110, 100, 0, 0, LONG_TOK); -short KEYWORD(110, 100, 0, 0, SHORT_TOK); -double TYPE_WITH_ALT(130, 100, 130, 300, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::double_type); -half KEYWORD(110, 100, 0, 0, HALF); -fixed KEYWORD(110, 100, 0, 0, FIXED_TOK); -unsigned KEYWORD_WITH_ALT(110, 100, 0, 0, yyextra->EXT_gpu_shader4_enable, UNSIGNED); -input KEYWORD(110, 100, 0, 0, INPUT_TOK); -output KEYWORD(110, 100, 0, 0, OUTPUT); -hvec2 KEYWORD(110, 100, 0, 0, HVEC2); -hvec3 KEYWORD(110, 100, 0, 0, HVEC3); -hvec4 KEYWORD(110, 100, 0, 0, HVEC4); -dvec2 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dvec2_type); -dvec3 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dvec3_type); -dvec4 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dvec4_type); -dmat2 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2_type); -dmat3 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3_type); -dmat4 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4_type); -dmat2x2 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2_type); -dmat2x3 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2x3_type); -dmat2x4 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat2x4_type); -dmat3x2 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3x2_type); -dmat3x3 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3_type); -dmat3x4 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat3x4_type); -dmat4x2 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4x2_type); -dmat4x3 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4x3_type); -dmat4x4 TYPE_WITH_ALT(110, 100, 400, 0, yyextra->ARB_gpu_shader_fp64_enable, glsl_type::dmat4_type); -fvec2 KEYWORD(110, 100, 0, 0, FVEC2); -fvec3 KEYWORD(110, 100, 0, 0, FVEC3); -fvec4 KEYWORD(110, 100, 0, 0, FVEC4); -sampler2DRect TYPE_WITH_ALT(110, 100, 0, 0, yyextra->ARB_texture_rectangle_enable, glsl_type::sampler2DRect_type); -sampler3DRect KEYWORD(110, 100, 0, 0, SAMPLER3DRECT); -sampler2DRectShadow TYPE_WITH_ALT(110, 100, 0, 0, yyextra->ARB_texture_rectangle_enable, glsl_type::sampler2DRectShadow_type); -sizeof KEYWORD(110, 100, 0, 0, SIZEOF); -cast KEYWORD(110, 100, 0, 0, CAST); -namespace KEYWORD(110, 100, 0, 0, NAMESPACE); -using KEYWORD(110, 100, 0, 0, USING); - - /* Additional reserved words in GLSL 1.20. */ -lowp KEYWORD(120, 100, 130, 100, LOWP); -mediump KEYWORD(120, 100, 130, 100, MEDIUMP); -highp KEYWORD(120, 100, 130, 100, HIGHP); -precision KEYWORD(120, 100, 130, 100, PRECISION); - - /* Additional reserved words in GLSL 1.30. */ -case KEYWORD(130, 300, 130, 300, CASE); -common KEYWORD(130, 300, 0, 0, COMMON); -partition KEYWORD(130, 300, 0, 0, PARTITION); -active KEYWORD(130, 300, 0, 0, ACTIVE); -superp KEYWORD(130, 100, 0, 0, SUPERP); -samplerBuffer TYPE_WITH_ALT(130, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object), glsl_type::samplerBuffer_type); -filter KEYWORD(130, 300, 0, 0, FILTER); -row_major KEYWORD_WITH_ALT(130, 0, 140, 0, yyextra->ARB_uniform_buffer_object_enable && !yyextra->es_shader, ROW_MAJOR); - - /* Additional reserved words in GLSL 1.40 */ -isampler2DRect TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->NV_texture_rectangle && yyextra->exts->EXT_texture_integer, glsl_type::isampler2DRect_type); -usampler2DRect TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->NV_texture_rectangle && yyextra->exts->EXT_texture_integer, glsl_type::usampler2DRect_type); -isamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object && yyextra->exts->EXT_texture_integer), glsl_type::isamplerBuffer_type); -usamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object && yyextra->exts->EXT_texture_integer), glsl_type::usamplerBuffer_type); - - /* Additional reserved words in GLSL ES 3.00 */ -resource KEYWORD(420, 300, 0, 0, RESOURCE); -sample KEYWORD_WITH_ALT(400, 300, 400, 320, yyextra->ARB_gpu_shader5_enable || yyextra->OES_shader_multisample_interpolation_enable, SAMPLE); -subroutine KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_shader_subroutine_enable, SUBROUTINE); - - /* Additional words for ARB_gpu_shader_int64 */ -int64_t TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::int64_t_type); -i64vec2 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec2_type); -i64vec3 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec3_type); -i64vec4 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec4_type); - -uint64_t TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::uint64_t_type); -u64vec2 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec2_type); -u64vec3 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec3_type); -u64vec4 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec4_type); - -[_a-zA-Z][_a-zA-Z0-9]* { - struct _mesa_glsl_parse_state *state = yyextra; - if (state->es_shader && yyleng > 1024) { - _mesa_glsl_error(yylloc, state, - "Identifier `%s' exceeds 1024 characters", - yytext); - } - return classify_identifier(state, yytext, yyleng, yylval); - } - -\. { struct _mesa_glsl_parse_state *state = yyextra; - state->is_field = true; - return DOT_TOK; } - -. { return yytext[0]; } - -%% - -int -classify_identifier(struct _mesa_glsl_parse_state *state, const char *name, - unsigned name_len, YYSTYPE *output) -{ - /* We're not doing linear_strdup here, to avoid an implicit call on - * strlen() for the length of the string, as this is already found by flex - * and stored in yyleng - */ - char *id = (char *) linear_alloc_child(state->linalloc, name_len + 1); - memcpy(id, name, name_len + 1); - output->identifier = id; - - if (state->is_field) { - state->is_field = false; - return FIELD_SELECTION; - } - if (state->symbols->get_variable(name) || state->symbols->get_function(name)) - return IDENTIFIER; - else if (state->symbols->get_type(name)) - return TYPE_IDENTIFIER; - else - return NEW_IDENTIFIER; -} - -void -_mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, const char *string) -{ - yylex_init_extra(state, & state->scanner); - yy_scan_string(string, state->scanner); -} - -void -_mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state) -{ - yylex_destroy(state->scanner); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.cpp deleted file mode 100644 index fab4429..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.cpp +++ /dev/null @@ -1,6303 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output, and Bison version. */ -#define YYBISON 30802 - -/* Bison version string. */ -#define YYBISON_VERSION "3.8.2" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - -/* Substitute the variable and function names. */ -#define yyparse _mesa_glsl_parse -#define yylex _mesa_glsl_lex -#define yyerror _mesa_glsl_error -#define yydebug _mesa_glsl_debug -#define yynerrs _mesa_glsl_nerrs - -/* First part of user prologue. */ -#line 1 "../src/compiler/glsl/glsl_parser.yy" - -/* - * Copyright © 2008, 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include -#include -#ifndef _MSC_VER -#include -#endif -#include - -#include "ast.h" -#include "glsl_parser_extras.h" -#include "../glsl_types.h" -#include "../../util/u_string.h" -#include "../../util/format/u_format.h" -#include "../../mesa/main/consts_exts.h" - -#ifdef _MSC_VER -#pragma warning( disable : 4065 ) // switch statement contains 'default' but no 'case' labels -#endif - -#undef yyerror - -static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg) -{ - _mesa_glsl_error(loc, st, "%s", msg); -} - -static int -_mesa_glsl_lex(YYSTYPE *val, YYLTYPE *loc, _mesa_glsl_parse_state *state) -{ - return _mesa_glsl_lexer_lex(val, loc, state->scanner); -} - -static bool match_layout_qualifier(const char *s1, const char *s2, - _mesa_glsl_parse_state *state) -{ - /* From the GLSL 1.50 spec, section 4.3.8 (Layout Qualifiers): - * - * "The tokens in any layout-qualifier-id-list ... are not case - * sensitive, unless explicitly noted otherwise." - * - * The text "unless explicitly noted otherwise" appears to be - * vacuous--no desktop GLSL spec (up through GLSL 4.40) notes - * otherwise. - * - * However, the GLSL ES 3.00 spec says, in section 4.3.8 (Layout - * Qualifiers): - * - * "As for other identifiers, they are case sensitive." - * - * So we need to do a case-sensitive or a case-insensitive match, - * depending on whether we are compiling for GLSL ES. - */ - if (state->es_shader) - return strcmp(s1, s2); - else - return strcasecmp(s1, s2); -} - -#line 158 "src/compiler/glsl/glsl_parser.cpp" - -# ifndef YY_CAST -# ifdef __cplusplus -# define YY_CAST(Type, Val) static_cast (Val) -# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) -# else -# define YY_CAST(Type, Val) ((Type) (Val)) -# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) -# endif -# endif -# ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# else -# define YY_NULLPTR ((void*)0) -# endif -# endif - -#include "glsl_parser.h" -/* Symbol kind. */ -enum yysymbol_kind_t -{ - YYSYMBOL_YYEMPTY = -2, - YYSYMBOL_YYEOF = 0, /* "end of file" */ - YYSYMBOL_YYerror = 1, /* error */ - YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ - YYSYMBOL_ATTRIBUTE = 3, /* ATTRIBUTE */ - YYSYMBOL_CONST_TOK = 4, /* CONST_TOK */ - YYSYMBOL_BASIC_TYPE_TOK = 5, /* BASIC_TYPE_TOK */ - YYSYMBOL_BREAK = 6, /* BREAK */ - YYSYMBOL_BUFFER = 7, /* BUFFER */ - YYSYMBOL_CONTINUE = 8, /* CONTINUE */ - YYSYMBOL_DO = 9, /* DO */ - YYSYMBOL_ELSE = 10, /* ELSE */ - YYSYMBOL_FOR = 11, /* FOR */ - YYSYMBOL_IF = 12, /* IF */ - YYSYMBOL_DEMOTE = 13, /* DEMOTE */ - YYSYMBOL_DISCARD = 14, /* DISCARD */ - YYSYMBOL_RETURN = 15, /* RETURN */ - YYSYMBOL_SWITCH = 16, /* SWITCH */ - YYSYMBOL_CASE = 17, /* CASE */ - YYSYMBOL_DEFAULT = 18, /* DEFAULT */ - YYSYMBOL_CENTROID = 19, /* CENTROID */ - YYSYMBOL_IN_TOK = 20, /* IN_TOK */ - YYSYMBOL_OUT_TOK = 21, /* OUT_TOK */ - YYSYMBOL_INOUT_TOK = 22, /* INOUT_TOK */ - YYSYMBOL_UNIFORM = 23, /* UNIFORM */ - YYSYMBOL_VARYING = 24, /* VARYING */ - YYSYMBOL_SAMPLE = 25, /* SAMPLE */ - YYSYMBOL_NOPERSPECTIVE = 26, /* NOPERSPECTIVE */ - YYSYMBOL_FLAT = 27, /* FLAT */ - YYSYMBOL_SMOOTH = 28, /* SMOOTH */ - YYSYMBOL_IMAGE1DSHADOW = 29, /* IMAGE1DSHADOW */ - YYSYMBOL_IMAGE2DSHADOW = 30, /* IMAGE2DSHADOW */ - YYSYMBOL_IMAGE1DARRAYSHADOW = 31, /* IMAGE1DARRAYSHADOW */ - YYSYMBOL_IMAGE2DARRAYSHADOW = 32, /* IMAGE2DARRAYSHADOW */ - YYSYMBOL_COHERENT = 33, /* COHERENT */ - YYSYMBOL_VOLATILE = 34, /* VOLATILE */ - YYSYMBOL_RESTRICT = 35, /* RESTRICT */ - YYSYMBOL_READONLY = 36, /* READONLY */ - YYSYMBOL_WRITEONLY = 37, /* WRITEONLY */ - YYSYMBOL_SHARED = 38, /* SHARED */ - YYSYMBOL_STRUCT = 39, /* STRUCT */ - YYSYMBOL_VOID_TOK = 40, /* VOID_TOK */ - YYSYMBOL_WHILE = 41, /* WHILE */ - YYSYMBOL_IDENTIFIER = 42, /* IDENTIFIER */ - YYSYMBOL_TYPE_IDENTIFIER = 43, /* TYPE_IDENTIFIER */ - YYSYMBOL_NEW_IDENTIFIER = 44, /* NEW_IDENTIFIER */ - YYSYMBOL_FLOATCONSTANT = 45, /* FLOATCONSTANT */ - YYSYMBOL_DOUBLECONSTANT = 46, /* DOUBLECONSTANT */ - YYSYMBOL_INTCONSTANT = 47, /* INTCONSTANT */ - YYSYMBOL_UINTCONSTANT = 48, /* UINTCONSTANT */ - YYSYMBOL_BOOLCONSTANT = 49, /* BOOLCONSTANT */ - YYSYMBOL_INT64CONSTANT = 50, /* INT64CONSTANT */ - YYSYMBOL_UINT64CONSTANT = 51, /* UINT64CONSTANT */ - YYSYMBOL_FIELD_SELECTION = 52, /* FIELD_SELECTION */ - YYSYMBOL_LEFT_OP = 53, /* LEFT_OP */ - YYSYMBOL_RIGHT_OP = 54, /* RIGHT_OP */ - YYSYMBOL_INC_OP = 55, /* INC_OP */ - YYSYMBOL_DEC_OP = 56, /* DEC_OP */ - YYSYMBOL_LE_OP = 57, /* LE_OP */ - YYSYMBOL_GE_OP = 58, /* GE_OP */ - YYSYMBOL_EQ_OP = 59, /* EQ_OP */ - YYSYMBOL_NE_OP = 60, /* NE_OP */ - YYSYMBOL_AND_OP = 61, /* AND_OP */ - YYSYMBOL_OR_OP = 62, /* OR_OP */ - YYSYMBOL_XOR_OP = 63, /* XOR_OP */ - YYSYMBOL_MUL_ASSIGN = 64, /* MUL_ASSIGN */ - YYSYMBOL_DIV_ASSIGN = 65, /* DIV_ASSIGN */ - YYSYMBOL_ADD_ASSIGN = 66, /* ADD_ASSIGN */ - YYSYMBOL_MOD_ASSIGN = 67, /* MOD_ASSIGN */ - YYSYMBOL_LEFT_ASSIGN = 68, /* LEFT_ASSIGN */ - YYSYMBOL_RIGHT_ASSIGN = 69, /* RIGHT_ASSIGN */ - YYSYMBOL_AND_ASSIGN = 70, /* AND_ASSIGN */ - YYSYMBOL_XOR_ASSIGN = 71, /* XOR_ASSIGN */ - YYSYMBOL_OR_ASSIGN = 72, /* OR_ASSIGN */ - YYSYMBOL_SUB_ASSIGN = 73, /* SUB_ASSIGN */ - YYSYMBOL_INVARIANT = 74, /* INVARIANT */ - YYSYMBOL_PRECISE = 75, /* PRECISE */ - YYSYMBOL_LOWP = 76, /* LOWP */ - YYSYMBOL_MEDIUMP = 77, /* MEDIUMP */ - YYSYMBOL_HIGHP = 78, /* HIGHP */ - YYSYMBOL_SUPERP = 79, /* SUPERP */ - YYSYMBOL_PRECISION = 80, /* PRECISION */ - YYSYMBOL_VERSION_TOK = 81, /* VERSION_TOK */ - YYSYMBOL_EXTENSION = 82, /* EXTENSION */ - YYSYMBOL_LINE = 83, /* LINE */ - YYSYMBOL_COLON = 84, /* COLON */ - YYSYMBOL_EOL = 85, /* EOL */ - YYSYMBOL_INTERFACE_TOK = 86, /* INTERFACE_TOK */ - YYSYMBOL_OUTPUT = 87, /* OUTPUT */ - YYSYMBOL_PRAGMA_DEBUG_ON = 88, /* PRAGMA_DEBUG_ON */ - YYSYMBOL_PRAGMA_DEBUG_OFF = 89, /* PRAGMA_DEBUG_OFF */ - YYSYMBOL_PRAGMA_OPTIMIZE_ON = 90, /* PRAGMA_OPTIMIZE_ON */ - YYSYMBOL_PRAGMA_OPTIMIZE_OFF = 91, /* PRAGMA_OPTIMIZE_OFF */ - YYSYMBOL_PRAGMA_WARNING_ON = 92, /* PRAGMA_WARNING_ON */ - YYSYMBOL_PRAGMA_WARNING_OFF = 93, /* PRAGMA_WARNING_OFF */ - YYSYMBOL_PRAGMA_INVARIANT_ALL = 94, /* PRAGMA_INVARIANT_ALL */ - YYSYMBOL_LAYOUT_TOK = 95, /* LAYOUT_TOK */ - YYSYMBOL_DOT_TOK = 96, /* DOT_TOK */ - YYSYMBOL_ASM = 97, /* ASM */ - YYSYMBOL_CLASS = 98, /* CLASS */ - YYSYMBOL_UNION = 99, /* UNION */ - YYSYMBOL_ENUM = 100, /* ENUM */ - YYSYMBOL_TYPEDEF = 101, /* TYPEDEF */ - YYSYMBOL_TEMPLATE = 102, /* TEMPLATE */ - YYSYMBOL_THIS = 103, /* THIS */ - YYSYMBOL_PACKED_TOK = 104, /* PACKED_TOK */ - YYSYMBOL_GOTO = 105, /* GOTO */ - YYSYMBOL_INLINE_TOK = 106, /* INLINE_TOK */ - YYSYMBOL_NOINLINE = 107, /* NOINLINE */ - YYSYMBOL_PUBLIC_TOK = 108, /* PUBLIC_TOK */ - YYSYMBOL_STATIC = 109, /* STATIC */ - YYSYMBOL_EXTERN = 110, /* EXTERN */ - YYSYMBOL_EXTERNAL = 111, /* EXTERNAL */ - YYSYMBOL_LONG_TOK = 112, /* LONG_TOK */ - YYSYMBOL_SHORT_TOK = 113, /* SHORT_TOK */ - YYSYMBOL_HALF = 114, /* HALF */ - YYSYMBOL_FIXED_TOK = 115, /* FIXED_TOK */ - YYSYMBOL_UNSIGNED = 116, /* UNSIGNED */ - YYSYMBOL_INPUT_TOK = 117, /* INPUT_TOK */ - YYSYMBOL_HVEC2 = 118, /* HVEC2 */ - YYSYMBOL_HVEC3 = 119, /* HVEC3 */ - YYSYMBOL_HVEC4 = 120, /* HVEC4 */ - YYSYMBOL_FVEC2 = 121, /* FVEC2 */ - YYSYMBOL_FVEC3 = 122, /* FVEC3 */ - YYSYMBOL_FVEC4 = 123, /* FVEC4 */ - YYSYMBOL_SAMPLER3DRECT = 124, /* SAMPLER3DRECT */ - YYSYMBOL_SIZEOF = 125, /* SIZEOF */ - YYSYMBOL_CAST = 126, /* CAST */ - YYSYMBOL_NAMESPACE = 127, /* NAMESPACE */ - YYSYMBOL_USING = 128, /* USING */ - YYSYMBOL_RESOURCE = 129, /* RESOURCE */ - YYSYMBOL_PATCH = 130, /* PATCH */ - YYSYMBOL_SUBROUTINE = 131, /* SUBROUTINE */ - YYSYMBOL_ERROR_TOK = 132, /* ERROR_TOK */ - YYSYMBOL_COMMON = 133, /* COMMON */ - YYSYMBOL_PARTITION = 134, /* PARTITION */ - YYSYMBOL_ACTIVE = 135, /* ACTIVE */ - YYSYMBOL_FILTER = 136, /* FILTER */ - YYSYMBOL_ROW_MAJOR = 137, /* ROW_MAJOR */ - YYSYMBOL_THEN = 138, /* THEN */ - YYSYMBOL_139_ = 139, /* '(' */ - YYSYMBOL_140_ = 140, /* ')' */ - YYSYMBOL_141_ = 141, /* '[' */ - YYSYMBOL_142_ = 142, /* ']' */ - YYSYMBOL_143_ = 143, /* ',' */ - YYSYMBOL_144_ = 144, /* '+' */ - YYSYMBOL_145_ = 145, /* '-' */ - YYSYMBOL_146_ = 146, /* '!' */ - YYSYMBOL_147_ = 147, /* '~' */ - YYSYMBOL_148_ = 148, /* '*' */ - YYSYMBOL_149_ = 149, /* '/' */ - YYSYMBOL_150_ = 150, /* '%' */ - YYSYMBOL_151_ = 151, /* '<' */ - YYSYMBOL_152_ = 152, /* '>' */ - YYSYMBOL_153_ = 153, /* '&' */ - YYSYMBOL_154_ = 154, /* '^' */ - YYSYMBOL_155_ = 155, /* '|' */ - YYSYMBOL_156_ = 156, /* '?' */ - YYSYMBOL_157_ = 157, /* ':' */ - YYSYMBOL_158_ = 158, /* '=' */ - YYSYMBOL_159_ = 159, /* ';' */ - YYSYMBOL_160_ = 160, /* '{' */ - YYSYMBOL_161_ = 161, /* '}' */ - YYSYMBOL_YYACCEPT = 162, /* $accept */ - YYSYMBOL_translation_unit = 163, /* translation_unit */ - YYSYMBOL_164_1 = 164, /* $@1 */ - YYSYMBOL_version_statement = 165, /* version_statement */ - YYSYMBOL_pragma_statement = 166, /* pragma_statement */ - YYSYMBOL_extension_statement_list = 167, /* extension_statement_list */ - YYSYMBOL_any_identifier = 168, /* any_identifier */ - YYSYMBOL_extension_statement = 169, /* extension_statement */ - YYSYMBOL_external_declaration_list = 170, /* external_declaration_list */ - YYSYMBOL_variable_identifier = 171, /* variable_identifier */ - YYSYMBOL_primary_expression = 172, /* primary_expression */ - YYSYMBOL_postfix_expression = 173, /* postfix_expression */ - YYSYMBOL_integer_expression = 174, /* integer_expression */ - YYSYMBOL_function_call = 175, /* function_call */ - YYSYMBOL_function_call_or_method = 176, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 177, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 178, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 179, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 180, /* function_call_header */ - YYSYMBOL_function_identifier = 181, /* function_identifier */ - YYSYMBOL_unary_expression = 182, /* unary_expression */ - YYSYMBOL_unary_operator = 183, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 184, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 185, /* additive_expression */ - YYSYMBOL_shift_expression = 186, /* shift_expression */ - YYSYMBOL_relational_expression = 187, /* relational_expression */ - YYSYMBOL_equality_expression = 188, /* equality_expression */ - YYSYMBOL_and_expression = 189, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 190, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 191, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 192, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 193, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 194, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 195, /* conditional_expression */ - YYSYMBOL_assignment_expression = 196, /* assignment_expression */ - YYSYMBOL_assignment_operator = 197, /* assignment_operator */ - YYSYMBOL_expression = 198, /* expression */ - YYSYMBOL_constant_expression = 199, /* constant_expression */ - YYSYMBOL_declaration = 200, /* declaration */ - YYSYMBOL_function_prototype = 201, /* function_prototype */ - YYSYMBOL_function_declarator = 202, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 203, /* function_header_with_parameters */ - YYSYMBOL_function_header = 204, /* function_header */ - YYSYMBOL_parameter_declarator = 205, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 206, /* parameter_declaration */ - YYSYMBOL_parameter_qualifier = 207, /* parameter_qualifier */ - YYSYMBOL_parameter_direction_qualifier = 208, /* parameter_direction_qualifier */ - YYSYMBOL_parameter_type_specifier = 209, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 210, /* init_declarator_list */ - YYSYMBOL_single_declaration = 211, /* single_declaration */ - YYSYMBOL_fully_specified_type = 212, /* fully_specified_type */ - YYSYMBOL_layout_qualifier = 213, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 214, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 215, /* layout_qualifier_id */ - YYSYMBOL_interface_block_layout_qualifier = 216, /* interface_block_layout_qualifier */ - YYSYMBOL_subroutine_qualifier = 217, /* subroutine_qualifier */ - YYSYMBOL_subroutine_type_list = 218, /* subroutine_type_list */ - YYSYMBOL_interpolation_qualifier = 219, /* interpolation_qualifier */ - YYSYMBOL_type_qualifier = 220, /* type_qualifier */ - YYSYMBOL_auxiliary_storage_qualifier = 221, /* auxiliary_storage_qualifier */ - YYSYMBOL_storage_qualifier = 222, /* storage_qualifier */ - YYSYMBOL_memory_qualifier = 223, /* memory_qualifier */ - YYSYMBOL_array_specifier = 224, /* array_specifier */ - YYSYMBOL_type_specifier = 225, /* type_specifier */ - YYSYMBOL_type_specifier_nonarray = 226, /* type_specifier_nonarray */ - YYSYMBOL_basic_type_specifier_nonarray = 227, /* basic_type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 228, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 229, /* struct_specifier */ - YYSYMBOL_struct_declaration_list = 230, /* struct_declaration_list */ - YYSYMBOL_struct_declaration = 231, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 232, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 233, /* struct_declarator */ - YYSYMBOL_initializer = 234, /* initializer */ - YYSYMBOL_initializer_list = 235, /* initializer_list */ - YYSYMBOL_declaration_statement = 236, /* declaration_statement */ - YYSYMBOL_statement = 237, /* statement */ - YYSYMBOL_simple_statement = 238, /* simple_statement */ - YYSYMBOL_compound_statement = 239, /* compound_statement */ - YYSYMBOL_240_2 = 240, /* $@2 */ - YYSYMBOL_statement_no_new_scope = 241, /* statement_no_new_scope */ - YYSYMBOL_compound_statement_no_new_scope = 242, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 243, /* statement_list */ - YYSYMBOL_expression_statement = 244, /* expression_statement */ - YYSYMBOL_selection_statement = 245, /* selection_statement */ - YYSYMBOL_selection_rest_statement = 246, /* selection_rest_statement */ - YYSYMBOL_condition = 247, /* condition */ - YYSYMBOL_switch_statement = 248, /* switch_statement */ - YYSYMBOL_switch_body = 249, /* switch_body */ - YYSYMBOL_case_label = 250, /* case_label */ - YYSYMBOL_case_label_list = 251, /* case_label_list */ - YYSYMBOL_case_statement = 252, /* case_statement */ - YYSYMBOL_case_statement_list = 253, /* case_statement_list */ - YYSYMBOL_iteration_statement = 254, /* iteration_statement */ - YYSYMBOL_for_init_statement = 255, /* for_init_statement */ - YYSYMBOL_conditionopt = 256, /* conditionopt */ - YYSYMBOL_for_rest_statement = 257, /* for_rest_statement */ - YYSYMBOL_jump_statement = 258, /* jump_statement */ - YYSYMBOL_demote_statement = 259, /* demote_statement */ - YYSYMBOL_external_declaration = 260, /* external_declaration */ - YYSYMBOL_function_definition = 261, /* function_definition */ - YYSYMBOL_interface_block = 262, /* interface_block */ - YYSYMBOL_basic_interface_block = 263, /* basic_interface_block */ - YYSYMBOL_interface_qualifier = 264, /* interface_qualifier */ - YYSYMBOL_instance_name_opt = 265, /* instance_name_opt */ - YYSYMBOL_member_list = 266, /* member_list */ - YYSYMBOL_member_declaration = 267, /* member_declaration */ - YYSYMBOL_layout_uniform_defaults = 268, /* layout_uniform_defaults */ - YYSYMBOL_layout_buffer_defaults = 269, /* layout_buffer_defaults */ - YYSYMBOL_layout_in_defaults = 270, /* layout_in_defaults */ - YYSYMBOL_layout_out_defaults = 271, /* layout_out_defaults */ - YYSYMBOL_layout_defaults = 272 /* layout_defaults */ -}; -typedef enum yysymbol_kind_t yysymbol_kind_t; - - - - -#ifdef short -# undef short -#endif - -/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure - and (if available) are included - so that the code can choose integer types of a good width. */ - -#ifndef __PTRDIFF_MAX__ -# include /* INFRINGES ON USER NAME SPACE */ -# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_STDINT_H -# endif -#endif - -/* Narrow types that promote to a signed type and that can represent a - signed or unsigned integer of at least N bits. In tables they can - save space and decrease cache pressure. Promoting to a signed type - helps avoid bugs in integer arithmetic. */ - -#ifdef __INT_LEAST8_MAX__ -typedef __INT_LEAST8_TYPE__ yytype_int8; -#elif defined YY_STDINT_H -typedef int_least8_t yytype_int8; -#else -typedef signed char yytype_int8; -#endif - -#ifdef __INT_LEAST16_MAX__ -typedef __INT_LEAST16_TYPE__ yytype_int16; -#elif defined YY_STDINT_H -typedef int_least16_t yytype_int16; -#else -typedef short yytype_int16; -#endif - -/* Work around bug in HP-UX 11.23, which defines these macros - incorrectly for preprocessor constants. This workaround can likely - be removed in 2023, as HPE has promised support for HP-UX 11.23 - (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of - . */ -#ifdef __hpux -# undef UINT_LEAST8_MAX -# undef UINT_LEAST16_MAX -# define UINT_LEAST8_MAX 255 -# define UINT_LEAST16_MAX 65535 -#endif - -#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST8_TYPE__ yytype_uint8; -#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST8_MAX <= INT_MAX) -typedef uint_least8_t yytype_uint8; -#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX -typedef unsigned char yytype_uint8; -#else -typedef short yytype_uint8; -#endif - -#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST16_TYPE__ yytype_uint16; -#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST16_MAX <= INT_MAX) -typedef uint_least16_t yytype_uint16; -#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX -typedef unsigned short yytype_uint16; -#else -typedef int yytype_uint16; -#endif - -#ifndef YYPTRDIFF_T -# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ -# define YYPTRDIFF_T __PTRDIFF_TYPE__ -# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ -# elif defined PTRDIFF_MAX -# ifndef ptrdiff_t -# include /* INFRINGES ON USER NAME SPACE */ -# endif -# define YYPTRDIFF_T ptrdiff_t -# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX -# else -# define YYPTRDIFF_T long -# define YYPTRDIFF_MAXIMUM LONG_MAX -# endif -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned -# endif -#endif - -#define YYSIZE_MAXIMUM \ - YY_CAST (YYPTRDIFF_T, \ - (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ - ? YYPTRDIFF_MAXIMUM \ - : YY_CAST (YYSIZE_T, -1))) - -#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) - - -/* Stored state numbers (used for stacks). */ -typedef yytype_int16 yy_state_t; - -/* State numbers in computations. */ -typedef int yy_state_fast_t; - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - - -#ifndef YY_ATTRIBUTE_PURE -# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) -# else -# define YY_ATTRIBUTE_PURE -# endif -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -# else -# define YY_ATTRIBUTE_UNUSED -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YY_USE(E) ((void) (E)) -#else -# define YY_USE(E) /* empty */ -#endif - -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ -# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") -# else -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# endif -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ -# define YY_IGNORE_USELESS_CAST_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") -# define YY_IGNORE_USELESS_CAST_END \ - _Pragma ("GCC diagnostic pop") -#endif -#ifndef YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_END -#endif - - -#define YY_ASSERT(E) ((void) (0 && (E))) - -#if 1 - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* 1 */ - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ - && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yy_state_t yyss_alloc; - YYSTYPE yyvs_alloc; - YYLTYPE yyls_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ - + YYSIZEOF (YYLTYPE)) \ - + 2 * YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYPTRDIFF_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / YYSIZEOF (*yyptr); \ - } \ - while (0) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYPTRDIFF_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 5 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2510 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 162 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 111 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 312 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 475 - -/* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 393 - - -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - (0 <= (YYX) && (YYX) <= YYMAXUTOK \ - ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ - : YYSYMBOL_YYUNDEF) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 146, 2, 2, 2, 150, 153, 2, - 139, 140, 148, 144, 143, 145, 2, 149, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 157, 159, - 151, 158, 152, 156, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 141, 2, 142, 154, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 160, 155, 161, 147, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138 -}; - -#if YYDEBUG -/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_int16 yyrline[] = -{ - 0, 295, 295, 294, 318, 320, 327, 337, 338, 339, - 340, 341, 365, 370, 377, 379, 383, 384, 385, 389, - 398, 406, 414, 425, 426, 430, 437, 444, 451, 458, - 465, 472, 479, 486, 493, 494, 500, 504, 511, 517, - 526, 530, 534, 538, 539, 543, 544, 548, 554, 566, - 570, 576, 590, 591, 597, 603, 613, 614, 615, 616, - 620, 621, 627, 633, 642, 643, 649, 658, 659, 665, - 674, 675, 681, 687, 693, 702, 703, 709, 718, 719, - 728, 729, 738, 739, 748, 749, 758, 759, 768, 769, - 778, 779, 788, 789, 798, 799, 800, 801, 802, 803, - 804, 805, 806, 807, 808, 812, 816, 832, 836, 841, - 845, 850, 867, 871, 872, 876, 881, 889, 907, 918, - 923, 938, 946, 963, 966, 974, 982, 994, 1006, 1013, - 1018, 1023, 1032, 1036, 1037, 1047, 1057, 1067, 1081, 1088, - 1099, 1110, 1121, 1132, 1144, 1159, 1166, 1184, 1191, 1192, - 1202, 1725, 1890, 1916, 1921, 1926, 1934, 1939, 1948, 1957, - 1969, 1974, 1979, 1988, 1993, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2022, 2030, 2055, 2079, 2093, 2098, 2114, 2139, - 2151, 2159, 2164, 2169, 2176, 2181, 2186, 2191, 2196, 2221, - 2233, 2238, 2243, 2251, 2256, 2261, 2267, 2272, 2280, 2288, - 2294, 2304, 2315, 2316, 2324, 2330, 2336, 2345, 2346, 2347, - 2359, 2364, 2369, 2377, 2384, 2401, 2406, 2414, 2452, 2457, - 2465, 2471, 2480, 2481, 2485, 2492, 2499, 2506, 2512, 2513, - 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2527, 2534, 2533, - 2547, 2548, 2552, 2558, 2567, 2577, 2586, 2598, 2604, 2613, - 2622, 2627, 2635, 2639, 2657, 2665, 2670, 2678, 2683, 2691, - 2699, 2707, 2715, 2723, 2731, 2739, 2746, 2753, 2763, 2764, - 2768, 2770, 2776, 2781, 2790, 2796, 2802, 2808, 2814, 2823, - 2832, 2833, 2834, 2835, 2836, 2840, 2854, 2858, 2871, 2889, - 2908, 2913, 2918, 2923, 2928, 2943, 2946, 2951, 2959, 2964, - 2972, 2996, 3003, 3007, 3014, 3018, 3028, 3037, 3047, 3056, - 3068, 3090, 3100 -}; -#endif - -/** Accessing symbol of state STATE. */ -#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) - -#if 1 -/* The user-facing name of the symbol whose (internal) number is - YYSYMBOL. No bounds checking. */ -static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; - -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "\"end of file\"", "error", "\"invalid token\"", "ATTRIBUTE", - "CONST_TOK", "BASIC_TYPE_TOK", "BREAK", "BUFFER", "CONTINUE", "DO", - "ELSE", "FOR", "IF", "DEMOTE", "DISCARD", "RETURN", "SWITCH", "CASE", - "DEFAULT", "CENTROID", "IN_TOK", "OUT_TOK", "INOUT_TOK", "UNIFORM", - "VARYING", "SAMPLE", "NOPERSPECTIVE", "FLAT", "SMOOTH", "IMAGE1DSHADOW", - "IMAGE2DSHADOW", "IMAGE1DARRAYSHADOW", "IMAGE2DARRAYSHADOW", "COHERENT", - "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "SHARED", "STRUCT", - "VOID_TOK", "WHILE", "IDENTIFIER", "TYPE_IDENTIFIER", "NEW_IDENTIFIER", - "FLOATCONSTANT", "DOUBLECONSTANT", "INTCONSTANT", "UINTCONSTANT", - "BOOLCONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "FIELD_SELECTION", - "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", - "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", - "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", - "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "INVARIANT", "PRECISE", "LOWP", - "MEDIUMP", "HIGHP", "SUPERP", "PRECISION", "VERSION_TOK", "EXTENSION", - "LINE", "COLON", "EOL", "INTERFACE_TOK", "OUTPUT", "PRAGMA_DEBUG_ON", - "PRAGMA_DEBUG_OFF", "PRAGMA_OPTIMIZE_ON", "PRAGMA_OPTIMIZE_OFF", - "PRAGMA_WARNING_ON", "PRAGMA_WARNING_OFF", "PRAGMA_INVARIANT_ALL", - "LAYOUT_TOK", "DOT_TOK", "ASM", "CLASS", "UNION", "ENUM", "TYPEDEF", - "TEMPLATE", "THIS", "PACKED_TOK", "GOTO", "INLINE_TOK", "NOINLINE", - "PUBLIC_TOK", "STATIC", "EXTERN", "EXTERNAL", "LONG_TOK", "SHORT_TOK", - "HALF", "FIXED_TOK", "UNSIGNED", "INPUT_TOK", "HVEC2", "HVEC3", "HVEC4", - "FVEC2", "FVEC3", "FVEC4", "SAMPLER3DRECT", "SIZEOF", "CAST", - "NAMESPACE", "USING", "RESOURCE", "PATCH", "SUBROUTINE", "ERROR_TOK", - "COMMON", "PARTITION", "ACTIVE", "FILTER", "ROW_MAJOR", "THEN", "'('", - "')'", "'['", "']'", "','", "'+'", "'-'", "'!'", "'~'", "'*'", "'/'", - "'%'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'", "'='", "';'", - "'{'", "'}'", "$accept", "translation_unit", "$@1", "version_statement", - "pragma_statement", "extension_statement_list", "any_identifier", - "extension_statement", "external_declaration_list", - "variable_identifier", "primary_expression", "postfix_expression", - "integer_expression", "function_call", "function_call_or_method", - "function_call_generic", "function_call_header_no_parameters", - "function_call_header_with_parameters", "function_call_header", - "function_identifier", "unary_expression", "unary_operator", - "multiplicative_expression", "additive_expression", "shift_expression", - "relational_expression", "equality_expression", "and_expression", - "exclusive_or_expression", "inclusive_or_expression", - "logical_and_expression", "logical_xor_expression", - "logical_or_expression", "conditional_expression", - "assignment_expression", "assignment_operator", "expression", - "constant_expression", "declaration", "function_prototype", - "function_declarator", "function_header_with_parameters", - "function_header", "parameter_declarator", "parameter_declaration", - "parameter_qualifier", "parameter_direction_qualifier", - "parameter_type_specifier", "init_declarator_list", "single_declaration", - "fully_specified_type", "layout_qualifier", "layout_qualifier_id_list", - "layout_qualifier_id", "interface_block_layout_qualifier", - "subroutine_qualifier", "subroutine_type_list", - "interpolation_qualifier", "type_qualifier", - "auxiliary_storage_qualifier", "storage_qualifier", "memory_qualifier", - "array_specifier", "type_specifier", "type_specifier_nonarray", - "basic_type_specifier_nonarray", "precision_qualifier", - "struct_specifier", "struct_declaration_list", "struct_declaration", - "struct_declarator_list", "struct_declarator", "initializer", - "initializer_list", "declaration_statement", "statement", - "simple_statement", "compound_statement", "$@2", - "statement_no_new_scope", "compound_statement_no_new_scope", - "statement_list", "expression_statement", "selection_statement", - "selection_rest_statement", "condition", "switch_statement", - "switch_body", "case_label", "case_label_list", "case_statement", - "case_statement_list", "iteration_statement", "for_init_statement", - "conditionopt", "for_rest_statement", "jump_statement", - "demote_statement", "external_declaration", "function_definition", - "interface_block", "basic_interface_block", "interface_qualifier", - "instance_name_opt", "member_list", "member_declaration", - "layout_uniform_defaults", "layout_buffer_defaults", - "layout_in_defaults", "layout_out_defaults", "layout_defaults", YY_NULLPTR -}; - -static const char * -yysymbol_name (yysymbol_kind_t yysymbol) -{ - return yytname[yysymbol]; -} -#endif - -#define YYPACT_NINF (-322) - -#define yypact_value_is_default(Yyn) \ - ((Yyn) == YYPACT_NINF) - -#define YYTABLE_NINF (-294) - -#define yytable_value_is_error(Yyn) \ - 0 - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - -66, -3, 24, -322, 120, -322, -33, -322, -322, -322, - -322, 7, 228, 1762, -322, -322, 26, -322, -322, -322, - 74, -322, 91, 116, -322, 122, -322, -322, -322, -322, - -322, -322, -322, -322, -322, -322, -322, -23, -322, -322, - 2184, 2184, -322, -322, -322, 210, 83, 94, 115, 129, - 131, 140, 143, 93, 193, -322, 97, -322, -322, 1663, - -322, 30, 90, 104, 64, -114, -322, 257, 2250, 2313, - 2313, 31, 2379, 2313, 2379, -322, 119, -322, 2313, -322, - -322, -322, -322, -322, 213, -322, -322, -322, -322, -322, - 228, 2121, 102, -322, -322, -322, -322, -322, -322, 2313, - 2313, -322, 2313, -322, 2313, 2313, -322, -322, 31, -322, - -322, -322, -322, -322, -322, -322, -1, -322, 228, -322, - -322, -322, 811, -322, -322, 543, 543, -322, -322, -322, - 543, -322, 51, 543, 543, 543, 228, -322, 134, 137, - -69, 144, -31, -16, -14, -11, -322, -322, -322, -322, - -322, -322, -322, -322, -322, -322, -322, -322, 2379, -322, - -322, 1855, 127, -322, 132, 212, 228, 940, -322, 2121, - 136, -322, -322, -322, 167, -29, -322, -322, -322, 59, - 173, 174, 1290, 195, 197, 182, 183, 1768, 206, 208, - -322, -322, -322, -322, -322, -322, -322, 1991, 1991, 1991, - -322, -322, -322, -322, -322, 189, -322, -322, -322, 96, - -322, -322, -322, 150, 70, 2023, 214, 251, 1991, 156, - 107, 225, 25, 248, 199, 200, 201, 294, 295, -54, - -322, -322, -105, -322, 198, 220, -322, -322, -322, -322, - 493, -322, -322, -322, -322, -322, -322, -322, -322, -322, - -322, -322, 31, 228, -322, -322, -322, 17, 1502, 20, - -322, -322, -322, -322, -322, -322, -322, -322, 218, -322, - 1967, 2121, -322, 119, -47, -322, -322, -322, 1003, -322, - 1991, -322, -1, -322, 228, -322, -322, -322, 320, -322, - 1577, 1991, -322, -322, -322, 50, 1991, 1913, -322, -322, - 86, -322, 1448, -322, -322, 311, 1991, -322, -322, 1991, - 224, -322, -322, -322, -322, -322, -322, -322, -322, -322, - -322, -322, -322, -322, 1991, -322, 1991, 1991, 1991, 1991, - 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, - 1991, 1991, 1991, 1991, 1991, 1991, 1991, -322, -322, -322, - -322, 228, 119, 1502, 33, 1502, -322, -322, 1502, -322, - -322, 226, 228, 217, 2121, 127, 228, -322, -322, -322, - -322, -322, 227, -322, -322, 1913, 105, -322, 106, 236, - 228, 240, -322, 652, -322, 241, 236, -322, -322, -322, - -322, -322, 156, 156, 107, 107, 225, 225, 225, 225, - 25, 25, 248, 199, 200, 201, 294, 295, -109, -322, - -322, 127, -322, 1502, -322, -104, -322, -322, 53, 323, - -322, -322, 1991, -322, 223, 245, 1448, 229, 230, 1290, - -322, -322, 1991, -322, 946, -322, -322, 119, 231, 113, - 1991, 1290, 376, -322, -8, -322, 1502, -322, -322, -322, - -322, 127, -322, 232, 236, -322, 1448, 1991, 235, -322, - -322, 1132, 1448, -6, -322, -322, -322, -70, -322, -322, - -322, -322, -322, 1448, -322 -}; - -/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_int16 yydefact[] = -{ - 4, 0, 0, 14, 0, 1, 2, 16, 17, 18, - 5, 0, 0, 0, 15, 6, 0, 185, 184, 208, - 191, 181, 187, 188, 189, 190, 186, 182, 162, 161, - 160, 193, 194, 195, 196, 197, 192, 0, 207, 206, - 163, 164, 212, 211, 210, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 183, 156, 284, 282, 3, - 281, 0, 0, 114, 123, 0, 133, 138, 168, 170, - 167, 0, 165, 166, 169, 145, 202, 204, 171, 205, - 20, 280, 111, 286, 0, 309, 310, 311, 312, 283, - 0, 0, 0, 191, 187, 188, 190, 23, 24, 163, - 164, 143, 168, 173, 165, 169, 144, 172, 0, 7, - 8, 9, 10, 12, 13, 11, 0, 209, 0, 22, - 21, 108, 0, 285, 112, 123, 123, 129, 130, 131, - 123, 115, 0, 123, 123, 123, 0, 109, 16, 18, - 139, 0, 191, 187, 188, 190, 175, 287, 301, 303, - 305, 307, 176, 174, 146, 177, 294, 178, 168, 180, - 288, 0, 203, 179, 0, 0, 0, 0, 215, 0, - 0, 155, 154, 153, 150, 0, 148, 152, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 30, 31, 26, 27, 32, 28, 29, 0, 0, 0, - 56, 57, 58, 59, 247, 238, 242, 25, 34, 52, - 36, 41, 42, 0, 0, 46, 0, 60, 0, 64, - 67, 70, 75, 78, 80, 82, 84, 86, 88, 90, - 92, 105, 0, 227, 0, 145, 230, 244, 229, 228, - 0, 231, 232, 233, 234, 235, 236, 116, 124, 125, - 121, 122, 0, 132, 126, 128, 127, 134, 0, 140, - 117, 304, 306, 308, 302, 198, 60, 107, 0, 50, - 0, 0, 19, 220, 0, 218, 214, 216, 0, 110, - 0, 147, 0, 157, 0, 275, 274, 241, 0, 240, - 0, 0, 279, 278, 276, 0, 0, 0, 53, 54, - 0, 237, 0, 38, 39, 0, 0, 44, 43, 0, - 207, 47, 49, 95, 96, 98, 97, 100, 101, 102, - 103, 104, 99, 94, 0, 55, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 248, 243, 246, - 245, 0, 118, 0, 135, 0, 222, 142, 0, 199, - 200, 0, 0, 0, 298, 221, 0, 217, 213, 151, - 149, 159, 0, 269, 268, 271, 0, 277, 0, 252, - 0, 0, 33, 0, 37, 0, 40, 48, 93, 61, - 62, 63, 65, 66, 68, 69, 73, 74, 71, 72, - 76, 77, 79, 81, 83, 85, 87, 89, 0, 106, - 119, 120, 137, 0, 225, 0, 141, 201, 0, 295, - 299, 219, 0, 270, 0, 0, 0, 0, 0, 0, - 239, 35, 0, 136, 0, 223, 300, 296, 0, 0, - 272, 0, 251, 249, 0, 254, 0, 265, 91, 224, - 226, 297, 289, 0, 273, 267, 0, 0, 0, 255, - 259, 0, 263, 0, 253, 266, 250, 0, 258, 261, - 260, 262, 256, 264, 257 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = -{ - -322, -322, -322, -322, -322, -322, 14, 21, -322, 130, - -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, - 151, -322, -20, -18, -112, -10, 48, 55, 52, 54, - 56, 57, -322, -136, -152, -322, -111, -165, -7, 34, - -322, -322, -322, -322, 272, 85, -322, -322, -322, -322, - -90, 1, -322, 118, -322, -322, -322, -322, 303, -38, - -322, -9, -135, -13, -322, -322, 205, -322, 237, -151, - 36, 38, -171, -322, 121, -218, -175, -322, -322, -321, - 349, 110, 124, -322, -322, 40, -322, -322, -43, -322, - -44, -322, -322, -322, -322, -322, -322, -322, 363, -322, - -51, -322, 351, -322, 60, -322, 357, 358, 361, 365, - -322 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - 0, 2, 13, 3, 58, 6, 273, 349, 59, 207, - 208, 209, 385, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 324, 232, 268, 233, 234, - 62, 63, 64, 250, 131, 132, 133, 251, 65, 66, - 67, 102, 175, 176, 177, 69, 179, 70, 71, 72, - 73, 105, 162, 269, 76, 77, 78, 79, 167, 168, - 274, 275, 357, 415, 236, 237, 238, 239, 302, 288, - 289, 240, 241, 242, 443, 381, 243, 445, 460, 461, - 462, 463, 244, 375, 424, 425, 245, 246, 80, 81, - 82, 83, 84, 438, 363, 364, 85, 86, 87, 88, - 89 -}; - -/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_int16 yytable[] = -{ - 75, 166, 104, 104, 74, 259, 60, 287, 344, 457, - 458, 457, 458, -293, 68, 1, 277, 147, 11, 7, - 8, 9, 350, 160, 5, 267, 16, 14, -290, 136, - -291, 104, 104, -292, 346, 104, 19, 171, 346, 434, - 104, 7, 8, 9, 4, 137, 75, 61, 432, 12, - 74, 92, 60, 104, 347, 134, 19, 435, 154, 74, - 68, 104, 104, 311, 104, 74, 104, 104, 126, 68, - 37, 38, 161, 346, 39, 158, 295, 166, 75, 166, - 119, 140, 333, 334, 127, 128, 129, 474, 300, 258, - 37, 38, 15, 61, 39, 170, 366, 31, 32, 33, - 34, 35, 345, 172, 165, 361, 356, 147, 447, 235, - 90, 281, 367, 74, 282, 369, 134, 134, -293, 253, - 455, 134, 354, 158, 134, 134, 134, 277, 261, 104, - 174, 104, 178, 252, 267, -290, 173, 91, 365, 130, - 42, 43, 44, 262, 267, 263, 53, 54, 264, 74, - 257, 303, 304, 459, 75, 472, 75, 387, 161, 158, - -291, 270, 7, 8, 9, 350, -292, 54, 109, 235, - 101, 106, 388, 74, 270, 353, 335, 336, 358, 110, - 376, 362, 412, 158, 414, 378, 379, 416, 166, 121, - 122, 413, 305, 346, 409, 386, 366, 141, 117, 283, - 111, 356, 284, 356, -113, 10, 356, 380, 442, 377, - 308, 248, 436, 309, 112, 249, 113, 411, 254, 255, - 256, 396, 397, 398, 399, 114, 382, 235, 115, 346, - 124, 74, 116, 104, 408, -51, 118, 306, 466, 351, - 104, 158, 433, 469, 471, 426, 427, 125, 346, 346, - 108, 329, 330, 453, 287, 471, 346, 164, 75, 104, - 161, 356, 169, 450, 379, 75, 287, 352, 270, 135, - 7, 8, 9, -23, 362, 464, -24, 235, 331, 332, - 448, 74, 356, 260, 235, 380, 42, 43, 44, 235, - 307, 158, 271, 74, 356, 279, 174, 272, 371, 138, - 8, 139, 451, 158, 326, 327, 328, 337, 338, 392, - 393, 439, 266, 394, 395, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 280, 104, 400, 401, 454, - 135, 135, 285, 286, 290, 135, 291, 104, 135, 135, - 135, 292, 293, 103, 107, 296, 467, 297, 298, 299, - 301, 75, 339, 312, 340, 342, 341, 121, 343, -50, - 359, 372, 235, 384, -45, 410, 422, 437, 417, 325, - 235, 146, 152, 153, 74, 155, 157, 159, 419, 346, - 429, 163, 440, 431, 158, 441, 456, 402, 446, 444, - 452, 465, 468, 404, 428, 403, 405, 247, 418, 406, - 370, 407, 103, 107, 421, 146, 278, 155, 159, 323, - 123, 373, 383, 235, 374, 423, 235, 74, 470, 473, - 74, 266, 120, 156, 420, 148, 149, 158, 235, 150, - 158, 266, 74, 151, 0, 0, 0, 0, 0, 0, - 0, 0, 158, 235, 0, 0, 0, 74, 235, 235, - 0, 0, 74, 74, 0, 0, 0, 158, 0, 0, - 235, 146, 158, 158, 74, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 158, 0, 0, 389, 390, 391, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 17, 18, 19, 180, - 20, 181, 182, 0, 183, 184, 185, 186, 187, 188, - 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 0, 0, 0, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 189, 97, 39, 98, 190, 191, - 192, 193, 194, 195, 196, 0, 0, 126, 197, 198, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 127, 128, 129, 0, 40, 41, 42, - 43, 44, 0, 45, 0, 12, 31, 32, 33, 34, - 35, 0, 0, 0, 0, 0, 0, 0, 53, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 0, 0, 0, 0, 0, 0, 130, 42, - 43, 44, 0, 55, 56, 0, 0, 0, 0, 0, - 0, 0, 199, 0, 0, 0, 0, 200, 201, 202, - 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 204, 205, 348, 17, 18, 19, 180, 20, - 181, 182, 0, 183, 184, 185, 186, 187, 188, 0, - 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 0, 0, 0, 0, 31, 32, 33, 34, 35, - 36, 37, 38, 189, 97, 39, 98, 190, 191, 192, - 193, 194, 195, 196, 0, 0, 0, 197, 198, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 41, 42, 43, - 44, 0, 45, 0, 12, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 200, 201, 202, 203, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 204, 205, 430, 17, 18, 19, 180, 20, 181, - 182, 0, 183, 184, 185, 186, 187, 188, 0, 0, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, - 37, 38, 189, 97, 39, 98, 190, 191, 192, 193, - 194, 195, 196, 0, 0, 0, 197, 198, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 40, 41, 42, 43, 44, - 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 55, 56, 17, 18, 19, 0, 93, 0, 0, - 199, 19, 0, 0, 0, 200, 201, 202, 203, 21, - 94, 95, 24, 96, 26, 27, 28, 29, 30, 0, - 204, 205, 206, 31, 32, 33, 34, 35, 36, 37, - 38, 0, 0, 39, 0, 37, 38, 0, 97, 39, - 98, 190, 191, 192, 193, 194, 195, 196, 0, 0, - 0, 197, 198, 0, 0, 0, 17, 18, 19, 0, - 93, 0, 0, 0, 99, 100, 42, 43, 44, 0, - 0, 0, 21, 94, 95, 24, 96, 26, 27, 28, - 29, 30, 0, 0, 0, 53, 31, 32, 33, 34, - 35, 36, 37, 38, 0, 0, 39, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, - 55, 56, 0, 0, 0, 0, 0, 99, 100, 42, - 43, 44, 0, 0, 0, 199, 0, 0, 0, 0, - 200, 201, 202, 203, 0, 0, 0, 0, 53, 0, - 0, 276, 0, 0, 0, 0, 355, 449, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 55, 56, 17, 18, 19, 180, 20, - 181, 182, 0, 183, 184, 185, 186, 187, 188, 457, - 458, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 0, 0, 0, 368, 31, 32, 33, 34, 35, - 36, 37, 38, 189, 97, 39, 98, 190, 191, 192, - 193, 194, 195, 196, 0, 0, 0, 197, 198, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 41, 42, 43, - 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 56, 0, 0, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 200, 201, 202, 203, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 204, 205, 17, 18, 19, 180, 20, 181, 182, - 0, 183, 184, 185, 186, 187, 188, 0, 0, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, - 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, - 38, 189, 97, 39, 98, 190, 191, 192, 193, 194, - 195, 196, 0, 0, 0, 197, 198, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 41, 42, 43, 44, 0, - 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 55, 56, 0, 0, 0, 0, 0, 0, 0, 199, - 0, 0, 0, 0, 200, 201, 202, 203, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, - 122, 17, 18, 19, 180, 20, 181, 182, 0, 183, - 184, 185, 186, 187, 188, 0, 0, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 189, - 97, 39, 98, 190, 191, 192, 193, 194, 195, 196, - 0, 0, 0, 197, 198, 0, 0, 19, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 41, 42, 43, 44, 0, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 38, 53, 97, 39, 98, 190, 191, 192, - 193, 194, 195, 196, 0, 0, 0, 197, 198, 0, - 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 55, 56, - 17, 18, 19, 0, 20, 0, 0, 199, 0, 0, - 0, 0, 200, 201, 202, 203, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 0, 204, 205, 0, - 31, 32, 33, 34, 35, 36, 37, 38, 54, 97, - 39, 98, 190, 191, 192, 193, 194, 195, 196, 0, - 0, 0, 197, 198, 0, 0, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 200, 201, 202, 203, - 0, 40, 41, 42, 43, 44, 0, 45, 0, 0, - 0, 0, 355, 0, 0, 0, 17, 18, 19, 0, - 20, 0, 53, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 0, 54, 0, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 0, 0, 39, 55, 56, 0, - 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, - 0, 200, 201, 202, 203, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 204, 40, 41, 42, - 43, 44, 0, 45, 0, 12, 0, 0, 0, 0, - 0, 46, 47, 48, 49, 50, 51, 52, 53, 0, - 0, 0, 0, 0, 0, 17, 18, 19, 0, 20, - 0, 0, 0, 19, 0, 0, 0, 0, 0, 54, - 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 0, 0, 55, 56, 31, 32, 33, 34, 35, - 36, 37, 38, 0, 0, 39, 0, 37, 38, 0, - 97, 39, 98, 190, 191, 192, 193, 194, 195, 196, - 0, 0, 57, 197, 198, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 40, 41, 42, 43, - 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, - 46, 47, 48, 49, 50, 51, 52, 53, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, - 0, 0, 55, 56, 37, 38, 0, 97, 39, 98, - 190, 191, 192, 193, 194, 195, 196, 199, 0, 0, - 197, 198, 200, 201, 202, 203, 17, 18, 19, 0, - 93, 57, 0, 0, 0, 0, 0, 294, 0, 0, - 0, 0, 21, 94, 95, 24, 96, 26, 27, 28, - 29, 30, 0, 0, 0, 0, 31, 32, 33, 34, - 35, 36, 37, 38, 0, 97, 39, 98, 190, 191, - 192, 193, 194, 195, 196, 0, 0, 0, 197, 198, - 0, 54, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 99, 100, 42, - 43, 44, 0, 0, 199, 0, 19, 265, 0, 200, - 201, 202, 203, 0, 0, 0, 37, 38, 53, 97, - 39, 98, 190, 191, 192, 193, 194, 195, 196, 0, - 0, 0, 197, 198, 0, 0, 0, 0, 19, 54, - 37, 38, 0, 97, 39, 98, 190, 191, 192, 193, - 194, 195, 196, 55, 56, 0, 197, 198, 0, 0, - 0, 0, 199, 0, 0, 0, 0, 200, 201, 202, - 203, 0, 37, 310, 0, 97, 39, 98, 190, 191, - 192, 193, 194, 195, 196, 0, 0, 0, 197, 198, - 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 199, 54, 0, 360, - 0, 200, 201, 202, 203, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 18, 19, 0, 93, 0, - 199, 0, 0, 0, 0, 200, 201, 202, 203, 54, - 21, 94, 95, 24, 96, 26, 27, 28, 29, 30, - 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, - 37, 38, 199, 0, 39, 0, 0, 200, 201, 202, - 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 17, 18, 0, - 0, 93, 0, 0, 0, 99, 100, 42, 43, 44, - 0, 0, 0, 21, 94, 95, 24, 96, 26, 27, - 28, 29, 30, 0, 0, 0, 53, 31, 32, 33, - 34, 35, 36, 0, 0, 0, 97, 0, 98, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 55, 56, 17, 18, 0, 0, 142, 99, 100, - 42, 43, 44, 0, 0, 0, 0, 0, 0, 21, - 143, 144, 24, 145, 26, 27, 28, 29, 30, 53, - 0, 0, 0, 31, 32, 33, 34, 35, 36, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 55, 56, 17, 18, 0, 0, - 93, 0, 0, 0, 99, 100, 42, 43, 44, 0, - 0, 0, 21, 94, 95, 24, 96, 26, 27, 28, - 29, 30, 0, 0, 0, 53, 31, 32, 33, 34, - 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 55, 56, 17, 18, 0, 0, 20, 99, 100, 42, - 43, 44, 0, 0, 0, 0, 0, 0, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 53, 0, - 0, 0, 31, 32, 33, 34, 35, 36, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 100, 42, 43, 44, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, - 56 -}; - -static const yytype_int16 yycheck[] = -{ - 13, 91, 40, 41, 13, 140, 13, 182, 62, 17, - 18, 17, 18, 44, 13, 81, 167, 68, 4, 42, - 43, 44, 240, 74, 0, 161, 12, 6, 44, 143, - 44, 69, 70, 44, 143, 73, 5, 38, 143, 143, - 78, 42, 43, 44, 47, 159, 59, 13, 157, 82, - 59, 37, 59, 91, 159, 64, 5, 161, 71, 68, - 59, 99, 100, 215, 102, 74, 104, 105, 4, 68, - 39, 40, 141, 143, 43, 74, 187, 167, 91, 169, - 59, 67, 57, 58, 20, 21, 22, 157, 199, 158, - 39, 40, 85, 59, 43, 108, 143, 33, 34, 35, - 36, 37, 156, 104, 90, 270, 258, 158, 429, 122, - 84, 140, 159, 122, 143, 280, 125, 126, 44, 132, - 441, 130, 257, 122, 133, 134, 135, 278, 159, 167, - 116, 169, 118, 132, 270, 44, 137, 160, 273, 75, - 76, 77, 78, 159, 280, 159, 95, 116, 159, 158, - 136, 55, 56, 161, 167, 161, 169, 309, 141, 158, - 44, 141, 42, 43, 44, 383, 44, 116, 85, 182, - 40, 41, 324, 182, 141, 158, 151, 152, 158, 85, - 291, 271, 353, 182, 355, 296, 297, 358, 278, 159, - 160, 158, 96, 143, 346, 306, 143, 67, 5, 140, - 85, 353, 143, 355, 140, 85, 358, 297, 426, 159, - 140, 126, 159, 143, 85, 130, 85, 352, 133, 134, - 135, 333, 334, 335, 336, 85, 140, 240, 85, 143, - 140, 240, 139, 271, 345, 139, 139, 141, 456, 252, - 278, 240, 413, 461, 462, 140, 140, 143, 143, 143, - 45, 144, 145, 140, 429, 473, 143, 44, 271, 297, - 141, 413, 160, 434, 375, 278, 441, 253, 141, 64, - 42, 43, 44, 139, 364, 446, 139, 290, 53, 54, - 432, 290, 434, 139, 297, 375, 76, 77, 78, 302, - 140, 290, 160, 302, 446, 159, 282, 85, 284, 42, - 43, 44, 437, 302, 148, 149, 150, 59, 60, 329, - 330, 422, 161, 331, 332, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 158, 364, 337, 338, 440, - 125, 126, 159, 159, 139, 130, 139, 375, 133, 134, - 135, 159, 159, 40, 41, 139, 457, 139, 197, 198, - 161, 364, 153, 139, 154, 61, 155, 159, 63, 139, - 142, 41, 375, 52, 140, 351, 139, 44, 142, 218, - 383, 68, 69, 70, 383, 72, 73, 74, 161, 143, - 140, 78, 159, 142, 383, 140, 10, 339, 158, 160, - 159, 159, 157, 341, 380, 340, 342, 125, 362, 343, - 282, 344, 99, 100, 366, 102, 169, 104, 105, 158, - 61, 290, 302, 426, 290, 375, 429, 426, 461, 463, - 429, 270, 59, 72, 364, 68, 68, 426, 441, 68, - 429, 280, 441, 68, -1, -1, -1, -1, -1, -1, - -1, -1, 441, 456, -1, -1, -1, 456, 461, 462, - -1, -1, 461, 462, -1, -1, -1, 456, -1, -1, - 473, 158, 461, 462, 473, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 473, -1, -1, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 3, 4, 5, 6, - 7, 8, 9, -1, 11, 12, 13, 14, 15, 16, - -1, -1, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, -1, -1, 4, 55, 56, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 20, 21, 22, -1, 74, 75, 76, - 77, 78, -1, 80, -1, 82, 33, 34, 35, 36, - 37, -1, -1, -1, -1, -1, -1, -1, 95, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 116, - -1, -1, -1, -1, -1, -1, -1, -1, 75, 76, - 77, 78, -1, 130, 131, -1, -1, -1, -1, -1, - -1, -1, 139, -1, -1, -1, -1, 144, 145, 146, - 147, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 159, 160, 161, 3, 4, 5, 6, 7, - 8, 9, -1, 11, 12, 13, 14, 15, 16, -1, - -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, -1, -1, -1, -1, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, -1, -1, -1, 55, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 74, 75, 76, 77, - 78, -1, 80, -1, 82, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 116, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 130, 131, -1, -1, -1, -1, -1, -1, - -1, 139, -1, -1, -1, -1, 144, 145, 146, 147, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 159, 160, 161, 3, 4, 5, 6, 7, 8, - 9, -1, 11, 12, 13, 14, 15, 16, -1, -1, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, -1, -1, -1, 55, 56, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 74, 75, 76, 77, 78, - -1, 80, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 116, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 130, 131, 3, 4, 5, -1, 7, -1, -1, - 139, 5, -1, -1, -1, 144, 145, 146, 147, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, - 159, 160, 161, 33, 34, 35, 36, 37, 38, 39, - 40, -1, -1, 43, -1, 39, 40, -1, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, - -1, 55, 56, -1, -1, -1, 3, 4, 5, -1, - 7, -1, -1, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, -1, -1, -1, 95, 33, 34, 35, 36, - 37, 38, 39, 40, -1, -1, 43, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 116, -1, -1, -1, - -1, -1, 116, -1, -1, -1, -1, -1, -1, -1, - 130, 131, -1, -1, -1, -1, -1, 74, 75, 76, - 77, 78, -1, -1, -1, 139, -1, -1, -1, -1, - 144, 145, 146, 147, -1, -1, -1, -1, 95, -1, - -1, 161, -1, -1, -1, -1, 160, 161, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 116, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 130, 131, 3, 4, 5, 6, 7, - 8, 9, -1, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, -1, -1, -1, 161, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, -1, -1, -1, 55, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 74, 75, 76, 77, - 78, -1, 80, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 116, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 130, 131, -1, -1, -1, -1, -1, -1, - -1, 139, -1, -1, -1, -1, 144, 145, 146, 147, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 159, 160, 3, 4, 5, 6, 7, 8, 9, - -1, 11, 12, 13, 14, 15, 16, -1, -1, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, - -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, -1, -1, -1, 55, 56, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 74, 75, 76, 77, 78, -1, - 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 116, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 130, 131, -1, -1, -1, -1, -1, -1, -1, 139, - -1, -1, -1, -1, 144, 145, 146, 147, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 159, - 160, 3, 4, 5, 6, 7, 8, 9, -1, 11, - 12, 13, 14, 15, 16, -1, -1, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, -1, -1, -1, - -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - -1, -1, -1, 55, 56, -1, -1, 5, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 74, 75, 76, 77, 78, -1, 80, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 39, 40, 95, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, -1, -1, -1, 55, 56, -1, - -1, -1, -1, -1, 116, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 130, 131, - 3, 4, 5, -1, 7, -1, -1, 139, -1, -1, - -1, -1, 144, 145, 146, 147, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, -1, 159, 160, -1, - 33, 34, 35, 36, 37, 38, 39, 40, 116, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, - -1, -1, 55, 56, -1, -1, -1, -1, -1, -1, - -1, 139, -1, -1, -1, -1, 144, 145, 146, 147, - -1, 74, 75, 76, 77, 78, -1, 80, -1, -1, - -1, -1, 160, -1, -1, -1, 3, 4, 5, -1, - 7, -1, 95, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, -1, 116, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, -1, -1, 43, 130, 131, -1, - -1, -1, -1, -1, -1, -1, 139, -1, -1, -1, - -1, 144, 145, 146, 147, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 159, 74, 75, 76, - 77, 78, -1, 80, -1, 82, -1, -1, -1, -1, - -1, 88, 89, 90, 91, 92, 93, 94, 95, -1, - -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, - -1, -1, -1, 5, -1, -1, -1, -1, -1, 116, - -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, -1, -1, 130, 131, 33, 34, 35, 36, 37, - 38, 39, 40, -1, -1, 43, -1, 39, 40, -1, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - -1, -1, 159, 55, 56, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 74, 75, 76, 77, - 78, -1, 80, -1, -1, -1, -1, -1, -1, -1, - 88, 89, 90, 91, 92, 93, 94, 95, -1, -1, - 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 116, -1, - -1, -1, -1, -1, 116, -1, -1, -1, -1, -1, - -1, -1, 130, 131, 39, 40, -1, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 139, -1, -1, - 55, 56, 144, 145, 146, 147, 3, 4, 5, -1, - 7, 159, -1, -1, -1, -1, -1, 159, -1, -1, - -1, -1, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, -1, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, -1, -1, -1, 55, 56, - -1, 116, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 74, 75, 76, - 77, 78, -1, -1, 139, -1, 5, 142, -1, 144, - 145, 146, 147, -1, -1, -1, 39, 40, 95, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, - -1, -1, 55, 56, -1, -1, -1, -1, 5, 116, - 39, 40, -1, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 130, 131, -1, 55, 56, -1, -1, - -1, -1, 139, -1, -1, -1, -1, 144, 145, 146, - 147, -1, 39, 40, -1, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, -1, -1, -1, 55, 56, - -1, -1, -1, 116, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 139, 116, -1, 142, - -1, 144, 145, 146, 147, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, - 139, -1, -1, -1, -1, 144, 145, 146, 147, 116, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, 139, -1, 43, -1, -1, 144, 145, 146, - 147, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3, 4, -1, - -1, 7, -1, -1, -1, 74, 75, 76, 77, 78, - -1, -1, -1, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, -1, -1, -1, 95, 33, 34, 35, - 36, 37, 38, -1, -1, -1, 42, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, 116, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 130, 131, 3, 4, -1, -1, 7, 74, 75, - 76, 77, 78, -1, -1, -1, -1, -1, -1, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 95, - -1, -1, -1, 33, 34, 35, 36, 37, 38, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 130, 131, 3, 4, -1, -1, - 7, -1, -1, -1, 74, 75, 76, 77, 78, -1, - -1, -1, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, -1, -1, -1, 95, 33, 34, 35, 36, - 37, 38, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 130, 131, 3, 4, -1, -1, 7, 74, 75, 76, - 77, 78, -1, -1, -1, -1, -1, -1, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 95, -1, - -1, -1, 33, 34, 35, 36, 37, 38, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 130, 131, -1, -1, -1, -1, -1, - -1, -1, -1, 74, 75, 76, 77, 78, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 130, - 131 -}; - -/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of - state STATE-NUM. */ -static const yytype_int16 yystos[] = -{ - 0, 81, 163, 165, 47, 0, 167, 42, 43, 44, - 85, 168, 82, 164, 169, 85, 168, 3, 4, 5, - 7, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 33, 34, 35, 36, 37, 38, 39, 40, 43, - 74, 75, 76, 77, 78, 80, 88, 89, 90, 91, - 92, 93, 94, 95, 116, 130, 131, 159, 166, 170, - 200, 201, 202, 203, 204, 210, 211, 212, 213, 217, - 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, - 260, 261, 262, 263, 264, 268, 269, 270, 271, 272, - 84, 160, 168, 7, 20, 21, 23, 42, 44, 74, - 75, 171, 213, 220, 221, 223, 171, 220, 228, 85, - 85, 85, 85, 85, 85, 85, 139, 5, 139, 169, - 260, 159, 160, 242, 140, 143, 4, 20, 21, 22, - 75, 206, 207, 208, 223, 228, 143, 159, 42, 44, - 168, 171, 7, 20, 21, 23, 220, 262, 268, 269, - 270, 271, 220, 220, 225, 220, 264, 220, 213, 220, - 262, 141, 224, 220, 44, 168, 212, 230, 231, 160, - 225, 38, 104, 137, 168, 214, 215, 216, 168, 218, - 6, 8, 9, 11, 12, 13, 14, 15, 16, 41, - 45, 46, 47, 48, 49, 50, 51, 55, 56, 139, - 144, 145, 146, 147, 159, 160, 161, 171, 172, 173, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 198, 200, 201, 225, 236, 237, 238, 239, - 243, 244, 245, 248, 254, 258, 259, 206, 207, 207, - 205, 209, 213, 225, 207, 207, 207, 168, 158, 224, - 139, 159, 159, 159, 159, 142, 182, 195, 199, 225, - 141, 160, 85, 168, 232, 233, 161, 231, 230, 159, - 158, 140, 143, 140, 143, 159, 159, 238, 241, 242, - 139, 139, 159, 159, 159, 198, 139, 139, 182, 182, - 198, 161, 240, 55, 56, 96, 141, 140, 140, 143, - 40, 196, 139, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 158, 197, 182, 148, 149, 150, 144, - 145, 53, 54, 57, 58, 151, 152, 59, 60, 153, - 154, 155, 61, 63, 62, 156, 143, 159, 161, 169, - 237, 225, 168, 158, 224, 160, 196, 234, 158, 142, - 142, 199, 212, 266, 267, 224, 143, 159, 161, 199, - 215, 168, 41, 236, 244, 255, 198, 159, 198, 198, - 212, 247, 140, 243, 52, 174, 198, 196, 196, 182, - 182, 182, 184, 184, 185, 185, 186, 186, 186, 186, - 187, 187, 188, 189, 190, 191, 192, 193, 198, 196, - 168, 224, 234, 158, 234, 235, 234, 142, 232, 161, - 266, 233, 139, 247, 256, 257, 140, 140, 168, 140, - 161, 142, 157, 234, 143, 161, 159, 44, 265, 198, - 159, 140, 237, 246, 160, 249, 158, 241, 196, 161, - 234, 224, 159, 140, 198, 241, 10, 17, 18, 161, - 250, 251, 252, 253, 234, 159, 237, 198, 157, 237, - 250, 237, 161, 252, 157 -}; - -/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ -static const yytype_int16 yyr1[] = -{ - 0, 162, 164, 163, 165, 165, 165, 166, 166, 166, - 166, 166, 166, 166, 167, 167, 168, 168, 168, 169, - 170, 170, 170, 171, 171, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, - 174, 175, 176, 177, 177, 178, 178, 179, 179, 180, - 181, 181, 182, 182, 182, 182, 183, 183, 183, 183, - 184, 184, 184, 184, 185, 185, 185, 186, 186, 186, - 187, 187, 187, 187, 187, 188, 188, 188, 189, 189, - 190, 190, 191, 191, 192, 192, 193, 193, 194, 194, - 195, 195, 196, 196, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 198, 198, 199, 200, 200, - 200, 200, 201, 202, 202, 203, 203, 204, 205, 205, - 205, 206, 206, 207, 207, 207, 207, 207, 207, 208, - 208, 208, 209, 210, 210, 210, 210, 210, 211, 211, - 211, 211, 211, 211, 211, 212, 212, 213, 214, 214, - 215, 215, 215, 216, 216, 216, 217, 217, 218, 218, - 219, 219, 219, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 221, 221, 221, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 223, 223, 223, 223, 223, 224, 224, - 224, 224, 225, 225, 226, 226, 226, 227, 227, 227, - 228, 228, 228, 229, 229, 230, 230, 231, 232, 232, - 233, 233, 234, 234, 234, 235, 235, 236, 237, 237, - 238, 238, 238, 238, 238, 238, 238, 239, 240, 239, - 241, 241, 242, 242, 243, 243, 243, 244, 244, 245, - 246, 246, 247, 247, 248, 249, 249, 250, 250, 251, - 251, 252, 252, 253, 253, 254, 254, 254, 255, 255, - 256, 256, 257, 257, 258, 258, 258, 258, 258, 259, - 260, 260, 260, 260, 260, 261, 262, 262, 262, 263, - 264, 264, 264, 264, 264, 265, 265, 265, 266, 266, - 267, 268, 268, 269, 269, 270, 270, 271, 271, 272, - 272, 272, 272 -}; - -/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ -static const yytype_int8 yyr2[] = -{ - 0, 2, 0, 4, 0, 3, 4, 2, 2, 2, - 2, 2, 2, 2, 0, 2, 1, 1, 1, 5, - 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 4, 1, 3, 2, 2, - 1, 1, 1, 2, 2, 2, 1, 2, 3, 2, - 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, - 1, 3, 3, 3, 1, 3, 3, 1, 3, 3, - 1, 3, 3, 3, 3, 1, 3, 3, 1, 3, - 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, - 1, 5, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, - 4, 1, 2, 1, 1, 2, 3, 3, 2, 3, - 3, 2, 2, 0, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 3, 4, 6, 5, 1, 2, - 3, 5, 4, 2, 2, 1, 2, 4, 1, 3, - 1, 3, 1, 1, 1, 1, 1, 4, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 3, 4, 1, 2, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 5, 4, 1, 2, 3, 1, 3, - 1, 2, 1, 3, 4, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 0, 4, - 1, 1, 2, 3, 1, 2, 2, 1, 2, 5, - 3, 1, 1, 4, 5, 2, 3, 3, 2, 1, - 2, 2, 2, 1, 2, 5, 7, 6, 1, 1, - 1, 0, 2, 3, 2, 2, 2, 3, 2, 2, - 1, 1, 1, 1, 1, 2, 1, 2, 2, 7, - 1, 1, 1, 1, 2, 0, 1, 2, 1, 2, - 3, 2, 3, 2, 3, 2, 3, 2, 3, 1, - 1, 1, 1 -}; - - -enum { YYENOMEM = -2 }; - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab -#define YYNOMEM goto yyexhaustedlab - - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (&yylloc, state, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) - -/* Backward compatibility with an undocumented macro. - Use YYerror or YYUNDEF. */ -#define YYERRCODE YYUNDEF - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - - -/* YYLOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -# ifndef YYLOCATION_PRINT - -# if defined YY_LOCATION_PRINT - - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc)) - -# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - -/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ - -YY_ATTRIBUTE_UNUSED -static int -yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) -{ - int res = 0; - int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; - if (0 <= yylocp->first_line) - { - res += YYFPRINTF (yyo, "%d", yylocp->first_line); - if (0 <= yylocp->first_column) - res += YYFPRINTF (yyo, ".%d", yylocp->first_column); - } - if (0 <= yylocp->last_line) - { - if (yylocp->first_line < yylocp->last_line) - { - res += YYFPRINTF (yyo, "-%d", yylocp->last_line); - if (0 <= end_col) - res += YYFPRINTF (yyo, ".%d", end_col); - } - else if (0 <= end_col && yylocp->first_column < end_col) - res += YYFPRINTF (yyo, "-%d", end_col); - } - return res; -} - -# define YYLOCATION_PRINT yy_location_print_ - - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc)) - -# else - -# define YYLOCATION_PRINT(File, Loc) ((void) 0) - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YY_LOCATION_PRINT YYLOCATION_PRINT - -# endif -# endif /* !defined YYLOCATION_PRINT */ - - -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Kind, Value, Location, state); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ - -static void -yy_symbol_value_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct _mesa_glsl_parse_state *state) -{ - FILE *yyoutput = yyo; - YY_USE (yyoutput); - YY_USE (yylocationp); - YY_USE (state); - if (!yyvaluep) - return; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ - -static void -yy_symbol_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct _mesa_glsl_parse_state *state) -{ - YYFPRINTF (yyo, "%s %s (", - yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - - YYLOCATION_PRINT (yyo, yylocationp); - YYFPRINTF (yyo, ": "); - yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, state); - YYFPRINTF (yyo, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -static void -yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -static void -yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, - int yyrule, struct _mesa_glsl_parse_state *state) -{ - int yylno = yyrline[yyrule]; - int yynrhs = yyr2[yyrule]; - int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), - &yyvsp[(yyi + 1) - (yynrhs)], - &(yylsp[(yyi + 1) - (yynrhs)]), state); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, yylsp, Rule, state); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) ((void) 0) -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -/* Context of a parse error. */ -typedef struct -{ - yy_state_t *yyssp; - yysymbol_kind_t yytoken; - YYLTYPE *yylloc; -} yypcontext_t; - -/* Put in YYARG at most YYARGN of the expected tokens given the - current YYCTX, and return the number of tokens stored in YYARG. If - YYARG is null, return the number of expected tokens (guaranteed to - be less than YYNTOKENS). Return YYENOMEM on memory exhaustion. - Return 0 if there are more than YYARGN expected tokens, yet fill - YYARG up to YYARGN. */ -static int -yypcontext_expected_tokens (const yypcontext_t *yyctx, - yysymbol_kind_t yyarg[], int yyargn) -{ - /* Actual size of YYARG. */ - int yycount = 0; - int yyn = yypact[+*yyctx->yyssp]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (!yyarg) - ++yycount; - else if (yycount == yyargn) - return 0; - else - yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx); - } - } - if (yyarg && yycount == 0 && 0 < yyargn) - yyarg[0] = YYSYMBOL_YYEMPTY; - return yycount; -} - - - - -#ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) -# else -/* Return the length of YYSTR. */ -static YYPTRDIFF_T -yystrlen (const char *yystr) -{ - YYPTRDIFF_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -#endif - -#ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -#endif - -#ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYPTRDIFF_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYPTRDIFF_T yyn = 0; - char const *yyp = yystr; - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - else - goto append; - - append: - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (yyres) - return yystpcpy (yyres, yystr) - yyres; - else - return yystrlen (yystr); -} -#endif - - -static int -yy_syntax_error_arguments (const yypcontext_t *yyctx, - yysymbol_kind_t yyarg[], int yyargn) -{ - /* Actual size of YYARG. */ - int yycount = 0; - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yyctx->yytoken != YYSYMBOL_YYEMPTY) - { - int yyn; - if (yyarg) - yyarg[yycount] = yyctx->yytoken; - ++yycount; - yyn = yypcontext_expected_tokens (yyctx, - yyarg ? yyarg + 1 : yyarg, yyargn - 1); - if (yyn == YYENOMEM) - return YYENOMEM; - else - yycount += yyn; - } - return yycount; -} - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return -1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return YYENOMEM if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, - const yypcontext_t *yyctx) -{ - enum { YYARGS_MAX = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat: reported tokens (one for the "unexpected", - one per "expected"). */ - yysymbol_kind_t yyarg[YYARGS_MAX]; - /* Cumulated lengths of YYARG. */ - YYPTRDIFF_T yysize = 0; - - /* Actual size of YYARG. */ - int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX); - if (yycount == YYENOMEM) - return YYENOMEM; - - switch (yycount) - { -#define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - default: /* Avoid compiler warnings. */ - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -#undef YYCASE_ - } - - /* Compute error message size. Don't count the "%s"s, but reserve - room for the terminator. */ - yysize = yystrlen (yyformat) - 2 * yycount + 1; - { - int yyi; - for (yyi = 0; yyi < yycount; ++yyi) - { - YYPTRDIFF_T yysize1 - = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]); - if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) - yysize = yysize1; - else - return YYENOMEM; - } - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return -1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]); - yyformat += 2; - } - else - { - ++yyp; - ++yyformat; - } - } - return 0; -} - - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -static void -yydestruct (const char *yymsg, - yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct _mesa_glsl_parse_state *state) -{ - YY_USE (yyvaluep); - YY_USE (yylocationp); - YY_USE (state); - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - - - - - -/*----------. -| yyparse. | -`----------*/ - -int -yyparse (struct _mesa_glsl_parse_state *state) -{ -/* Lookahead token kind. */ -int yychar; - - -/* The semantic value of the lookahead symbol. */ -/* Default value used for initialization, for pacifying older GCCs - or non-GCC compilers. */ -YY_INITIAL_VALUE (static YYSTYPE yyval_default;) -YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); - -/* Location data for the lookahead symbol. */ -static YYLTYPE yyloc_default -# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - = { 1, 1, 1, 1 } -# endif -; -YYLTYPE yylloc = yyloc_default; - - /* Number of syntax errors so far. */ - int yynerrs = 0; - - yy_state_fast_t yystate = 0; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus = 0; - - /* Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* Their size. */ - YYPTRDIFF_T yystacksize = YYINITDEPTH; - - /* The state stack: array, bottom, top. */ - yy_state_t yyssa[YYINITDEPTH]; - yy_state_t *yyss = yyssa; - yy_state_t *yyssp = yyss; - - /* The semantic value stack: array, bottom, top. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp = yyvs; - - /* The location stack: array, bottom, top. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp = yyls; - - int yyn; - /* The return value of yyparse. */ - int yyresult; - /* Lookahead symbol kind. */ - yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - YYLTYPE yyloc; - - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[3]; - - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yychar = YYEMPTY; /* Cause a token to be read. */ - - -/* User initialization code. */ -#line 89 "../src/compiler/glsl/glsl_parser.yy" -{ - yylloc.first_line = 1; - yylloc.first_column = 1; - yylloc.last_line = 1; - yylloc.last_column = 1; - yylloc.source = 0; - yylloc.path = NULL; -} - -#line 2439 "src/compiler/glsl/glsl_parser.cpp" - - yylsp[0] = yylloc; - goto yysetstate; - - -/*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | -`------------------------------------------------------------*/ -yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - -/*--------------------------------------------------------------------. -| yysetstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - YY_IGNORE_USELESS_CAST_BEGIN - *yyssp = YY_CAST (yy_state_t, yystate); - YY_IGNORE_USELESS_CAST_END - YY_STACK_PRINT (yyss, yyssp); - - if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - YYNOMEM; -#else - { - /* Get the current used size of the three stacks, in elements. */ - YYPTRDIFF_T yysize = yyssp - yyss + 1; - -# if defined yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - yy_state_t *yyss1 = yyss; - YYSTYPE *yyvs1 = yyvs; - YYLTYPE *yyls1 = yyls; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * YYSIZEOF (*yyssp), - &yyvs1, yysize * YYSIZEOF (*yyvsp), - &yyls1, yysize * YYSIZEOF (*yylsp), - &yystacksize); - yyss = yyss1; - yyvs = yyvs1; - yyls = yyls1; - } -# else /* defined YYSTACK_RELOCATE */ - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - YYNOMEM; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yy_state_t *yyss1 = yyss; - union yyalloc *yyptr = - YY_CAST (union yyalloc *, - YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); - if (! yyptr) - YYNOMEM; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); - YYSTACK_RELOCATE (yyls_alloc, yyls); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - yylsp = yyls + yysize - 1; - - YY_IGNORE_USELESS_CAST_BEGIN - YYDPRINTF ((stderr, "Stack size increased to %ld\n", - YY_CAST (long, yystacksize))); - YY_IGNORE_USELESS_CAST_END - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token\n")); - yychar = yylex (&yylval, &yylloc, state); - } - - if (yychar <= YYEOF) - { - yychar = YYEOF; - yytoken = YYSYMBOL_YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else if (yychar == YYerror) - { - /* The scanner already issued an error message, process directly - to error recovery. But do not keep the error token as - lookahead, it is too special and may lead us to an endless - loop in error recovery. */ - yychar = YYUNDEF; - yytoken = YYSYMBOL_YYerror; - yyerror_range[1] = yylloc; - goto yyerrlab1; - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - *++yylsp = yylloc; - - /* Discard the shifted token. */ - yychar = YYEMPTY; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - /* Default location. */ - YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); - yyerror_range[1] = yyloc; - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: /* $@1: %empty */ -#line 295 "../src/compiler/glsl/glsl_parser.yy" - { - _mesa_glsl_initialize_types(state); - } -#line 2654 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 3: /* translation_unit: version_statement extension_statement_list $@1 external_declaration_list */ -#line 299 "../src/compiler/glsl/glsl_parser.yy" - { - delete state->symbols; - state->symbols = new(ralloc_parent(state)) glsl_symbol_table; - if (state->es_shader) { - if (state->stage == MESA_SHADER_FRAGMENT) { - state->symbols->add_default_precision_qualifier("int", ast_precision_medium); - } else { - state->symbols->add_default_precision_qualifier("float", ast_precision_high); - state->symbols->add_default_precision_qualifier("int", ast_precision_high); - } - state->symbols->add_default_precision_qualifier("sampler2D", ast_precision_low); - state->symbols->add_default_precision_qualifier("samplerExternalOES", ast_precision_low); - state->symbols->add_default_precision_qualifier("samplerCube", ast_precision_low); - state->symbols->add_default_precision_qualifier("atomic_uint", ast_precision_high); - } - _mesa_glsl_initialize_types(state); - } -#line 2676 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 5: /* version_statement: VERSION_TOK INTCONSTANT EOL */ -#line 321 "../src/compiler/glsl/glsl_parser.yy" - { - state->process_version_directive(&(yylsp[-1]), (yyvsp[-1].n), NULL); - if (state->error) { - YYERROR; - } - } -#line 2687 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 6: /* version_statement: VERSION_TOK INTCONSTANT any_identifier EOL */ -#line 328 "../src/compiler/glsl/glsl_parser.yy" - { - state->process_version_directive(&(yylsp[-2]), (yyvsp[-2].n), (yyvsp[-1].identifier)); - if (state->error) { - YYERROR; - } - } -#line 2698 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 7: /* pragma_statement: PRAGMA_DEBUG_ON EOL */ -#line 337 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = NULL; } -#line 2704 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 8: /* pragma_statement: PRAGMA_DEBUG_OFF EOL */ -#line 338 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = NULL; } -#line 2710 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 9: /* pragma_statement: PRAGMA_OPTIMIZE_ON EOL */ -#line 339 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = NULL; } -#line 2716 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 10: /* pragma_statement: PRAGMA_OPTIMIZE_OFF EOL */ -#line 340 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = NULL; } -#line 2722 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 11: /* pragma_statement: PRAGMA_INVARIANT_ALL EOL */ -#line 342 "../src/compiler/glsl/glsl_parser.yy" - { - /* Pragma invariant(all) cannot be used in a fragment shader. - * - * Page 27 of the GLSL 1.20 spec, Page 53 of the GLSL ES 3.00 spec: - * - * "It is an error to use this pragma in a fragment shader." - */ - if (state->is_version(120, 300) && - state->stage == MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& (yylsp[-1]), state, - "pragma `invariant(all)' cannot be used " - "in a fragment shader."); - } else if (!state->is_version(120, 100)) { - _mesa_glsl_warning(& (yylsp[-1]), state, - "pragma `invariant(all)' not supported in %s " - "(GLSL ES 1.00 or GLSL 1.20 required)", - state->get_version_string()); - } else { - state->all_invariant = true; - } - - (yyval.node) = NULL; - } -#line 2750 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 12: /* pragma_statement: PRAGMA_WARNING_ON EOL */ -#line 366 "../src/compiler/glsl/glsl_parser.yy" - { - void *mem_ctx = state->linalloc; - (yyval.node) = new(mem_ctx) ast_warnings_toggle(true); - } -#line 2759 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 13: /* pragma_statement: PRAGMA_WARNING_OFF EOL */ -#line 371 "../src/compiler/glsl/glsl_parser.yy" - { - void *mem_ctx = state->linalloc; - (yyval.node) = new(mem_ctx) ast_warnings_toggle(false); - } -#line 2768 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 19: /* extension_statement: EXTENSION any_identifier COLON any_identifier EOL */ -#line 390 "../src/compiler/glsl/glsl_parser.yy" - { - if (!_mesa_glsl_process_extension((yyvsp[-3].identifier), & (yylsp[-3]), (yyvsp[-1].identifier), & (yylsp[-1]), state)) { - YYERROR; - } - } -#line 2778 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 20: /* external_declaration_list: external_declaration */ -#line 399 "../src/compiler/glsl/glsl_parser.yy" - { - /* FINISHME: The NULL test is required because pragmas are set to - * FINISHME: NULL. (See production rule for external_declaration.) - */ - if ((yyvsp[0].node) != NULL) - state->translation_unit.push_tail(& (yyvsp[0].node)->link); - } -#line 2790 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 21: /* external_declaration_list: external_declaration_list external_declaration */ -#line 407 "../src/compiler/glsl/glsl_parser.yy" - { - /* FINISHME: The NULL test is required because pragmas are set to - * FINISHME: NULL. (See production rule for external_declaration.) - */ - if ((yyvsp[0].node) != NULL) - state->translation_unit.push_tail(& (yyvsp[0].node)->link); - } -#line 2802 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 22: /* external_declaration_list: external_declaration_list extension_statement */ -#line 414 "../src/compiler/glsl/glsl_parser.yy" - { - if (!state->allow_extension_directive_midshader) { - _mesa_glsl_error(& (yylsp[0]), state, - "#extension directive is not allowed " - "in the middle of a shader"); - YYERROR; - } - } -#line 2815 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 25: /* primary_expression: variable_identifier */ -#line 431 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.identifier = (yyvsp[0].identifier); - } -#line 2826 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 26: /* primary_expression: INTCONSTANT */ -#line 438 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.int_constant = (yyvsp[0].n); - } -#line 2837 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 27: /* primary_expression: UINTCONSTANT */ -#line 445 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.uint_constant = (yyvsp[0].n); - } -#line 2848 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 28: /* primary_expression: INT64CONSTANT */ -#line 452 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_int64_constant, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.int64_constant = (yyvsp[0].n64); - } -#line 2859 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 29: /* primary_expression: UINT64CONSTANT */ -#line 459 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_uint64_constant, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.uint64_constant = (yyvsp[0].n64); - } -#line 2870 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 30: /* primary_expression: FLOATCONSTANT */ -#line 466 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.float_constant = (yyvsp[0].real); - } -#line 2881 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 31: /* primary_expression: DOUBLECONSTANT */ -#line 473 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_double_constant, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.double_constant = (yyvsp[0].dreal); - } -#line 2892 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 32: /* primary_expression: BOOLCONSTANT */ -#line 480 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->primary_expression.bool_constant = (yyvsp[0].n); - } -#line 2903 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 33: /* primary_expression: '(' expression ')' */ -#line 487 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.expression) = (yyvsp[-1].expression); - } -#line 2911 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 35: /* postfix_expression: postfix_expression '[' integer_expression ']' */ -#line 495 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_array_index, (yyvsp[-3].expression), (yyvsp[-1].expression), NULL); - (yyval.expression)->set_location_range((yylsp[-3]), (yylsp[0])); - } -#line 2921 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 36: /* postfix_expression: function_call */ -#line 501 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.expression) = (yyvsp[0].expression); - } -#line 2929 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 37: /* postfix_expression: postfix_expression DOT_TOK FIELD_SELECTION */ -#line 505 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[-2].expression), NULL, NULL); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - (yyval.expression)->primary_expression.identifier = (yyvsp[0].identifier); - } -#line 2940 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 38: /* postfix_expression: postfix_expression INC_OP */ -#line 512 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_post_inc, (yyvsp[-1].expression), NULL, NULL); - (yyval.expression)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 2950 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 39: /* postfix_expression: postfix_expression DEC_OP */ -#line 518 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_post_dec, (yyvsp[-1].expression), NULL, NULL); - (yyval.expression)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 2960 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 47: /* function_call_header_with_parameters: function_call_header assignment_expression */ -#line 549 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.expression) = (yyvsp[-1].expression); - (yyval.expression)->set_location((yylsp[-1])); - (yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link); - } -#line 2970 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 48: /* function_call_header_with_parameters: function_call_header_with_parameters ',' assignment_expression */ -#line 555 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.expression) = (yyvsp[-2].expression); - (yyval.expression)->set_location((yylsp[-2])); - (yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link); - } -#line 2980 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 50: /* function_identifier: type_specifier */ -#line 571 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_function_expression((yyvsp[0].type_specifier)); - (yyval.expression)->set_location((yylsp[0])); - } -#line 2990 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 51: /* function_identifier: postfix_expression */ -#line 577 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_function_expression((yyvsp[0].expression)); - (yyval.expression)->set_location((yylsp[0])); - } -#line 3000 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 53: /* unary_expression: INC_OP unary_expression */ -#line 592 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_pre_inc, (yyvsp[0].expression), NULL, NULL); - (yyval.expression)->set_location((yylsp[-1])); - } -#line 3010 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 54: /* unary_expression: DEC_OP unary_expression */ -#line 598 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_pre_dec, (yyvsp[0].expression), NULL, NULL); - (yyval.expression)->set_location((yylsp[-1])); - } -#line 3020 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 55: /* unary_expression: unary_operator unary_expression */ -#line 604 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression((yyvsp[-1].n), (yyvsp[0].expression), NULL, NULL); - (yyval.expression)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 3030 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 56: /* unary_operator: '+' */ -#line 613 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_plus; } -#line 3036 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 57: /* unary_operator: '-' */ -#line 614 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_neg; } -#line 3042 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 58: /* unary_operator: '!' */ -#line 615 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_logic_not; } -#line 3048 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 59: /* unary_operator: '~' */ -#line 616 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_bit_not; } -#line 3054 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 61: /* multiplicative_expression: multiplicative_expression '*' unary_expression */ -#line 622 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_mul, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3064 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 62: /* multiplicative_expression: multiplicative_expression '/' unary_expression */ -#line 628 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_div, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3074 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 63: /* multiplicative_expression: multiplicative_expression '%' unary_expression */ -#line 634 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_mod, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3084 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 65: /* additive_expression: additive_expression '+' multiplicative_expression */ -#line 644 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_add, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3094 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 66: /* additive_expression: additive_expression '-' multiplicative_expression */ -#line 650 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_sub, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3104 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 68: /* shift_expression: shift_expression LEFT_OP additive_expression */ -#line 660 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_lshift, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3114 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 69: /* shift_expression: shift_expression RIGHT_OP additive_expression */ -#line 666 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_rshift, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3124 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 71: /* relational_expression: relational_expression '<' shift_expression */ -#line 676 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_less, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3134 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 72: /* relational_expression: relational_expression '>' shift_expression */ -#line 682 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_greater, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3144 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 73: /* relational_expression: relational_expression LE_OP shift_expression */ -#line 688 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_lequal, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3154 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 74: /* relational_expression: relational_expression GE_OP shift_expression */ -#line 694 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_gequal, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3164 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 76: /* equality_expression: equality_expression EQ_OP relational_expression */ -#line 704 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_equal, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3174 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 77: /* equality_expression: equality_expression NE_OP relational_expression */ -#line 710 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_nequal, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3184 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 79: /* and_expression: and_expression '&' equality_expression */ -#line 720 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_and, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3194 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 81: /* exclusive_or_expression: exclusive_or_expression '^' and_expression */ -#line 730 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_xor, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3204 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 83: /* inclusive_or_expression: inclusive_or_expression '|' exclusive_or_expression */ -#line 740 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3214 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 85: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ -#line 750 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_and, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3224 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 87: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ -#line 760 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_xor, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3234 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 89: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ -#line 770 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression_bin(ast_logic_or, (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3244 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 91: /* conditional_expression: logical_or_expression '?' expression ':' assignment_expression */ -#line 780 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression(ast_conditional, (yyvsp[-4].expression), (yyvsp[-2].expression), (yyvsp[0].expression)); - (yyval.expression)->set_location_range((yylsp[-4]), (yylsp[0])); - } -#line 3254 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 93: /* assignment_expression: unary_expression assignment_operator assignment_expression */ -#line 790 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_expression((yyvsp[-1].n), (yyvsp[-2].expression), (yyvsp[0].expression), NULL); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 3264 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 94: /* assignment_operator: '=' */ -#line 798 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_assign; } -#line 3270 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 95: /* assignment_operator: MUL_ASSIGN */ -#line 799 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_mul_assign; } -#line 3276 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 96: /* assignment_operator: DIV_ASSIGN */ -#line 800 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_div_assign; } -#line 3282 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 97: /* assignment_operator: MOD_ASSIGN */ -#line 801 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_mod_assign; } -#line 3288 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 98: /* assignment_operator: ADD_ASSIGN */ -#line 802 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_add_assign; } -#line 3294 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 99: /* assignment_operator: SUB_ASSIGN */ -#line 803 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_sub_assign; } -#line 3300 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 100: /* assignment_operator: LEFT_ASSIGN */ -#line 804 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_ls_assign; } -#line 3306 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 101: /* assignment_operator: RIGHT_ASSIGN */ -#line 805 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_rs_assign; } -#line 3312 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 102: /* assignment_operator: AND_ASSIGN */ -#line 806 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_and_assign; } -#line 3318 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 103: /* assignment_operator: XOR_ASSIGN */ -#line 807 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_xor_assign; } -#line 3324 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 104: /* assignment_operator: OR_ASSIGN */ -#line 808 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.n) = ast_or_assign; } -#line 3330 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 105: /* expression: assignment_expression */ -#line 813 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.expression) = (yyvsp[0].expression); - } -#line 3338 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 106: /* expression: expression ',' assignment_expression */ -#line 817 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - if ((yyvsp[-2].expression)->oper != ast_sequence) { - (yyval.expression) = new(ctx) ast_expression(ast_sequence, NULL, NULL, NULL); - (yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0])); - (yyval.expression)->expressions.push_tail(& (yyvsp[-2].expression)->link); - } else { - (yyval.expression) = (yyvsp[-2].expression); - } - - (yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link); - } -#line 3355 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 108: /* declaration: function_prototype ';' */ -#line 837 "../src/compiler/glsl/glsl_parser.yy" - { - state->symbols->pop_scope(); - (yyval.node) = (yyvsp[-1].function); - } -#line 3364 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 109: /* declaration: init_declarator_list ';' */ -#line 842 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = (yyvsp[-1].declarator_list); - } -#line 3372 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 110: /* declaration: PRECISION precision_qualifier type_specifier ';' */ -#line 846 "../src/compiler/glsl/glsl_parser.yy" - { - (yyvsp[-1].type_specifier)->default_precision = (yyvsp[-2].n); - (yyval.node) = (yyvsp[-1].type_specifier); - } -#line 3381 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 111: /* declaration: interface_block */ -#line 851 "../src/compiler/glsl/glsl_parser.yy" - { - ast_interface_block *block = (ast_interface_block *) (yyvsp[0].node); - if (block->layout.has_layout() || block->layout.has_memory()) { - if (!block->default_layout.merge_qualifier(& (yylsp[0]), state, block->layout, false)) { - YYERROR; - } - } - block->layout = block->default_layout; - if (!block->layout.push_to_global(& (yylsp[0]), state)) { - YYERROR; - } - (yyval.node) = (yyvsp[0].node); - } -#line 3399 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 115: /* function_header_with_parameters: function_header parameter_declaration */ -#line 877 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.function) = (yyvsp[-1].function); - (yyval.function)->parameters.push_tail(& (yyvsp[0].parameter_declarator)->link); - } -#line 3408 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 116: /* function_header_with_parameters: function_header_with_parameters ',' parameter_declaration */ -#line 882 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.function) = (yyvsp[-2].function); - (yyval.function)->parameters.push_tail(& (yyvsp[0].parameter_declarator)->link); - } -#line 3417 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 117: /* function_header: fully_specified_type variable_identifier '(' */ -#line 890 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.function) = new(ctx) ast_function(); - (yyval.function)->set_location((yylsp[-1])); - (yyval.function)->return_type = (yyvsp[-2].fully_specified_type); - (yyval.function)->identifier = (yyvsp[-1].identifier); - - if ((yyvsp[-2].fully_specified_type)->qualifier.is_subroutine_decl()) { - /* add type for IDENTIFIER search */ - state->symbols->add_type((yyvsp[-1].identifier), glsl_type::get_subroutine_instance((yyvsp[-1].identifier))); - } else - state->symbols->add_function(new(state) ir_function((yyvsp[-1].identifier))); - state->symbols->push_scope(); - } -#line 3436 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 118: /* parameter_declarator: type_specifier any_identifier */ -#line 908 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator(); - (yyval.parameter_declarator)->set_location_range((yylsp[-1]), (yylsp[0])); - (yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type(); - (yyval.parameter_declarator)->type->set_location((yylsp[-1])); - (yyval.parameter_declarator)->type->specifier = (yyvsp[-1].type_specifier); - (yyval.parameter_declarator)->identifier = (yyvsp[0].identifier); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[0].identifier), ir_var_auto)); - } -#line 3451 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 119: /* parameter_declarator: layout_qualifier type_specifier any_identifier */ -#line 919 "../src/compiler/glsl/glsl_parser.yy" - { - _mesa_glsl_error(&(yylsp[-2]), state, "is is not allowed on function parameter"); - YYERROR; - } -#line 3460 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 120: /* parameter_declarator: type_specifier any_identifier array_specifier */ -#line 924 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator(); - (yyval.parameter_declarator)->set_location_range((yylsp[-2]), (yylsp[0])); - (yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type(); - (yyval.parameter_declarator)->type->set_location((yylsp[-2])); - (yyval.parameter_declarator)->type->specifier = (yyvsp[-2].type_specifier); - (yyval.parameter_declarator)->identifier = (yyvsp[-1].identifier); - (yyval.parameter_declarator)->array_specifier = (yyvsp[0].array_specifier); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-1].identifier), ir_var_auto)); - } -#line 3476 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 121: /* parameter_declaration: parameter_qualifier parameter_declarator */ -#line 939 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.parameter_declarator) = (yyvsp[0].parameter_declarator); - (yyval.parameter_declarator)->type->qualifier = (yyvsp[-1].type_qualifier); - if (!(yyval.parameter_declarator)->type->qualifier.push_to_global(& (yylsp[-1]), state)) { - YYERROR; - } - } -#line 3488 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 122: /* parameter_declaration: parameter_qualifier parameter_type_specifier */ -#line 947 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.parameter_declarator) = new(ctx) ast_parameter_declarator(); - (yyval.parameter_declarator)->set_location((yylsp[0])); - (yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type(); - (yyval.parameter_declarator)->type->set_location_range((yylsp[-1]), (yylsp[0])); - (yyval.parameter_declarator)->type->qualifier = (yyvsp[-1].type_qualifier); - if (!(yyval.parameter_declarator)->type->qualifier.push_to_global(& (yylsp[-1]), state)) { - YYERROR; - } - (yyval.parameter_declarator)->type->specifier = (yyvsp[0].type_specifier); - } -#line 3505 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 123: /* parameter_qualifier: %empty */ -#line 963 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - } -#line 3513 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 124: /* parameter_qualifier: CONST_TOK parameter_qualifier */ -#line 967 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type_qualifier).flags.q.constant) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate const qualifier"); - - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - (yyval.type_qualifier).flags.q.constant = 1; - } -#line 3525 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 125: /* parameter_qualifier: PRECISE parameter_qualifier */ -#line 975 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type_qualifier).flags.q.precise) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate precise qualifier"); - - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - (yyval.type_qualifier).flags.q.precise = 1; - } -#line 3537 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 126: /* parameter_qualifier: parameter_direction_qualifier parameter_qualifier */ -#line 983 "../src/compiler/glsl/glsl_parser.yy" - { - if (((yyvsp[-1].type_qualifier).flags.q.in || (yyvsp[-1].type_qualifier).flags.q.out) && ((yyvsp[0].type_qualifier).flags.q.in || (yyvsp[0].type_qualifier).flags.q.out)) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate in/out/inout qualifier"); - - if (!state->has_420pack_or_es31() && (yyvsp[0].type_qualifier).flags.q.constant) - _mesa_glsl_error(&(yylsp[-1]), state, "in/out/inout must come after const " - "or precise"); - - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false); - } -#line 3553 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 127: /* parameter_qualifier: precision_qualifier parameter_qualifier */ -#line 995 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type_qualifier).precision != ast_precision_none) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate precision qualifier"); - - if (!state->has_420pack_or_es31() && - (yyvsp[0].type_qualifier).flags.i != 0) - _mesa_glsl_error(&(yylsp[-1]), state, "precision qualifiers must come last"); - - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - (yyval.type_qualifier).precision = (yyvsp[-1].n); - } -#line 3569 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 128: /* parameter_qualifier: memory_qualifier parameter_qualifier */ -#line 1007 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false); - } -#line 3578 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 129: /* parameter_direction_qualifier: IN_TOK */ -#line 1014 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.in = 1; - } -#line 3587 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 130: /* parameter_direction_qualifier: OUT_TOK */ -#line 1019 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.out = 1; - } -#line 3596 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 131: /* parameter_direction_qualifier: INOUT_TOK */ -#line 1024 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.in = 1; - (yyval.type_qualifier).flags.q.out = 1; - } -#line 3606 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 134: /* init_declarator_list: init_declarator_list ',' any_identifier */ -#line 1038 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL); - decl->set_location((yylsp[0])); - - (yyval.declarator_list) = (yyvsp[-2].declarator_list); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[0].identifier), ir_var_auto)); - } -#line 3620 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 135: /* init_declarator_list: init_declarator_list ',' any_identifier array_specifier */ -#line 1048 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-1].identifier), (yyvsp[0].array_specifier), NULL); - decl->set_location_range((yylsp[-1]), (yylsp[0])); - - (yyval.declarator_list) = (yyvsp[-3].declarator_list); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-1].identifier), ir_var_auto)); - } -#line 3634 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 136: /* init_declarator_list: init_declarator_list ',' any_identifier array_specifier '=' initializer */ -#line 1058 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-3].identifier), (yyvsp[-2].array_specifier), (yyvsp[0].expression)); - decl->set_location_range((yylsp[-3]), (yylsp[-2])); - - (yyval.declarator_list) = (yyvsp[-5].declarator_list); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-3].identifier), ir_var_auto)); - } -#line 3648 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 137: /* init_declarator_list: init_declarator_list ',' any_identifier '=' initializer */ -#line 1068 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-2].identifier), NULL, (yyvsp[0].expression)); - decl->set_location((yylsp[-2])); - - (yyval.declarator_list) = (yyvsp[-4].declarator_list); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-2].identifier), ir_var_auto)); - } -#line 3662 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 138: /* single_declaration: fully_specified_type */ -#line 1082 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - /* Empty declaration list is valid. */ - (yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[0].fully_specified_type)); - (yyval.declarator_list)->set_location((yylsp[0])); - } -#line 3673 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 139: /* single_declaration: fully_specified_type any_identifier */ -#line 1089 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL); - decl->set_location((yylsp[0])); - - (yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-1].fully_specified_type)); - (yyval.declarator_list)->set_location_range((yylsp[-1]), (yylsp[0])); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[0].identifier), ir_var_auto)); - } -#line 3688 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 140: /* single_declaration: fully_specified_type any_identifier array_specifier */ -#line 1100 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-1].identifier), (yyvsp[0].array_specifier), NULL); - decl->set_location_range((yylsp[-1]), (yylsp[0])); - - (yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-2].fully_specified_type)); - (yyval.declarator_list)->set_location_range((yylsp[-2]), (yylsp[0])); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-1].identifier), ir_var_auto)); - } -#line 3703 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 141: /* single_declaration: fully_specified_type any_identifier array_specifier '=' initializer */ -#line 1111 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-3].identifier), (yyvsp[-2].array_specifier), (yyvsp[0].expression)); - decl->set_location_range((yylsp[-3]), (yylsp[-2])); - - (yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-4].fully_specified_type)); - (yyval.declarator_list)->set_location_range((yylsp[-4]), (yylsp[-2])); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-3].identifier), ir_var_auto)); - } -#line 3718 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 142: /* single_declaration: fully_specified_type any_identifier '=' initializer */ -#line 1122 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-2].identifier), NULL, (yyvsp[0].expression)); - decl->set_location((yylsp[-2])); - - (yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-3].fully_specified_type)); - (yyval.declarator_list)->set_location_range((yylsp[-3]), (yylsp[-2])); - (yyval.declarator_list)->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-2].identifier), ir_var_auto)); - } -#line 3733 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 143: /* single_declaration: INVARIANT variable_identifier */ -#line 1133 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL); - decl->set_location((yylsp[0])); - - (yyval.declarator_list) = new(ctx) ast_declarator_list(NULL); - (yyval.declarator_list)->set_location_range((yylsp[-1]), (yylsp[0])); - (yyval.declarator_list)->invariant = true; - - (yyval.declarator_list)->declarations.push_tail(&decl->link); - } -#line 3749 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 144: /* single_declaration: PRECISE variable_identifier */ -#line 1145 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL); - decl->set_location((yylsp[0])); - - (yyval.declarator_list) = new(ctx) ast_declarator_list(NULL); - (yyval.declarator_list)->set_location_range((yylsp[-1]), (yylsp[0])); - (yyval.declarator_list)->precise = true; - - (yyval.declarator_list)->declarations.push_tail(&decl->link); - } -#line 3765 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 145: /* fully_specified_type: type_specifier */ -#line 1160 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type(); - (yyval.fully_specified_type)->set_location((yylsp[0])); - (yyval.fully_specified_type)->specifier = (yyvsp[0].type_specifier); - } -#line 3776 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 146: /* fully_specified_type: type_qualifier type_specifier */ -#line 1167 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.fully_specified_type) = new(ctx) ast_fully_specified_type(); - (yyval.fully_specified_type)->set_location_range((yylsp[-1]), (yylsp[0])); - (yyval.fully_specified_type)->qualifier = (yyvsp[-1].type_qualifier); - if (!(yyval.fully_specified_type)->qualifier.push_to_global(& (yylsp[-1]), state)) { - YYERROR; - } - (yyval.fully_specified_type)->specifier = (yyvsp[0].type_specifier); - if ((yyval.fully_specified_type)->specifier->structure != NULL && - (yyval.fully_specified_type)->specifier->structure->is_declaration) { - (yyval.fully_specified_type)->specifier->structure->layout = &(yyval.fully_specified_type)->qualifier; - } - } -#line 3795 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 147: /* layout_qualifier: LAYOUT_TOK '(' layout_qualifier_id_list ')' */ -#line 1185 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - } -#line 3803 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 149: /* layout_qualifier_id_list: layout_qualifier_id_list ',' layout_qualifier_id */ -#line 1193 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-2].type_qualifier); - if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[0]), state, (yyvsp[0].type_qualifier), true)) { - YYERROR; - } - } -#line 3814 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 150: /* layout_qualifier_id: any_identifier */ -#line 1203 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - - /* Layout qualifiers for ARB_fragment_coord_conventions. */ - if (!(yyval.type_qualifier).flags.i && (state->ARB_fragment_coord_conventions_enable || - state->is_version(150, 0))) { - if (match_layout_qualifier((yyvsp[0].identifier), "origin_upper_left", state) == 0) { - (yyval.type_qualifier).flags.q.origin_upper_left = 1; - } else if (match_layout_qualifier((yyvsp[0].identifier), "pixel_center_integer", - state) == 0) { - (yyval.type_qualifier).flags.q.pixel_center_integer = 1; - } - - if ((yyval.type_qualifier).flags.i && state->ARB_fragment_coord_conventions_warn) { - _mesa_glsl_warning(& (yylsp[0]), state, - "GL_ARB_fragment_coord_conventions layout " - "identifier `%s' used", (yyvsp[0].identifier)); - } - } - - /* Layout qualifiers for AMD/ARB_conservative_depth. */ - if (!(yyval.type_qualifier).flags.i && - (state->AMD_conservative_depth_enable || - state->ARB_conservative_depth_enable || - state->is_version(420, 0))) { - if (match_layout_qualifier((yyvsp[0].identifier), "depth_any", state) == 0) { - (yyval.type_qualifier).flags.q.depth_type = 1; - (yyval.type_qualifier).depth_type = ast_depth_any; - } else if (match_layout_qualifier((yyvsp[0].identifier), "depth_greater", state) == 0) { - (yyval.type_qualifier).flags.q.depth_type = 1; - (yyval.type_qualifier).depth_type = ast_depth_greater; - } else if (match_layout_qualifier((yyvsp[0].identifier), "depth_less", state) == 0) { - (yyval.type_qualifier).flags.q.depth_type = 1; - (yyval.type_qualifier).depth_type = ast_depth_less; - } else if (match_layout_qualifier((yyvsp[0].identifier), "depth_unchanged", - state) == 0) { - (yyval.type_qualifier).flags.q.depth_type = 1; - (yyval.type_qualifier).depth_type = ast_depth_unchanged; - } - - if ((yyval.type_qualifier).flags.i && state->AMD_conservative_depth_warn) { - _mesa_glsl_warning(& (yylsp[0]), state, - "GL_AMD_conservative_depth " - "layout qualifier `%s' is used", (yyvsp[0].identifier)); - } - if ((yyval.type_qualifier).flags.i && state->ARB_conservative_depth_warn) { - _mesa_glsl_warning(& (yylsp[0]), state, - "GL_ARB_conservative_depth " - "layout qualifier `%s' is used", (yyvsp[0].identifier)); - } - } - - /* See also interface_block_layout_qualifier. */ - if (!(yyval.type_qualifier).flags.i && state->has_uniform_buffer_objects()) { - if (match_layout_qualifier((yyvsp[0].identifier), "std140", state) == 0) { - (yyval.type_qualifier).flags.q.std140 = 1; - } else if (match_layout_qualifier((yyvsp[0].identifier), "shared", state) == 0) { - (yyval.type_qualifier).flags.q.shared = 1; - } else if (match_layout_qualifier((yyvsp[0].identifier), "std430", state) == 0) { - (yyval.type_qualifier).flags.q.std430 = 1; - } else if (match_layout_qualifier((yyvsp[0].identifier), "column_major", state) == 0) { - (yyval.type_qualifier).flags.q.column_major = 1; - /* "row_major" is a reserved word in GLSL 1.30+. Its token is parsed - * below in the interface_block_layout_qualifier rule. - * - * It is not a reserved word in GLSL ES 3.00, so it's handled here as - * an identifier. - * - * Also, this takes care of alternate capitalizations of - * "row_major" (which is necessary because layout qualifiers - * are case-insensitive in desktop GLSL). - */ - } else if (match_layout_qualifier((yyvsp[0].identifier), "row_major", state) == 0) { - (yyval.type_qualifier).flags.q.row_major = 1; - /* "packed" is a reserved word in GLSL, and its token is - * parsed below in the interface_block_layout_qualifier rule. - * However, we must take care of alternate capitalizations of - * "packed", because layout qualifiers are case-insensitive - * in desktop GLSL. - */ - } else if (match_layout_qualifier((yyvsp[0].identifier), "packed", state) == 0) { - (yyval.type_qualifier).flags.q.packed = 1; - } - - if ((yyval.type_qualifier).flags.i && state->ARB_uniform_buffer_object_warn) { - _mesa_glsl_warning(& (yylsp[0]), state, - "#version 140 / GL_ARB_uniform_buffer_object " - "layout qualifier `%s' is used", (yyvsp[0].identifier)); - } - } - - /* Layout qualifiers for GLSL 1.50 geometry shaders. */ - if (!(yyval.type_qualifier).flags.i) { - static const struct { - const char *s; - GLenum e; - } map[] = { - { "points", GL_POINTS }, - { "lines", GL_LINES }, - { "lines_adjacency", GL_LINES_ADJACENCY }, - { "line_strip", GL_LINE_STRIP }, - { "triangles", GL_TRIANGLES }, - { "triangles_adjacency", GL_TRIANGLES_ADJACENCY }, - { "triangle_strip", GL_TRIANGLE_STRIP }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) { - (yyval.type_qualifier).flags.q.prim_type = 1; - (yyval.type_qualifier).prim_type = map[i].e; - break; - } - } - - if ((yyval.type_qualifier).flags.i && !state->has_geometry_shader() && - !state->has_tessellation_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, "#version 150 layout " - "qualifier `%s' used", (yyvsp[0].identifier)); - } - } - - /* Layout qualifiers for ARB_shader_image_load_store. */ - if (state->has_shader_image_load_store()) { - if (!(yyval.type_qualifier).flags.i) { - static const struct { - const char *name; - enum pipe_format format; - glsl_base_type base_type; - /** Minimum desktop GLSL version required for the image - * format. Use 130 if already present in the original - * ARB extension. - */ - unsigned required_glsl; - /** Minimum GLSL ES version required for the image format. */ - unsigned required_essl; - /* NV_image_formats */ - bool nv_image_formats; - bool ext_qualifiers; - } map[] = { - { "rgba32f", PIPE_FORMAT_R32G32B32A32_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rgba16f", PIPE_FORMAT_R16G16B16A16_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rg32f", PIPE_FORMAT_R32G32_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rg16f", PIPE_FORMAT_R16G16_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r11f_g11f_b10f", PIPE_FORMAT_R11G11B10_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r32f", PIPE_FORMAT_R32_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "r16f", PIPE_FORMAT_R16_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba32ui", PIPE_FORMAT_R32G32B32A32_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "rgba16ui", PIPE_FORMAT_R16G16B16A16_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "rgb10_a2ui", PIPE_FORMAT_R10G10B10A2_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rgba8ui", PIPE_FORMAT_R8G8B8A8_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "rg32ui", PIPE_FORMAT_R32G32_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rg16ui", PIPE_FORMAT_R16G16_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rg8ui", PIPE_FORMAT_R8G8_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "r32ui", PIPE_FORMAT_R32_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "r16ui", PIPE_FORMAT_R16_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "r8ui", PIPE_FORMAT_R8_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rgba32i", PIPE_FORMAT_R32G32B32A32_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "rgba16i", PIPE_FORMAT_R16G16B16A16_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "rgba8i", PIPE_FORMAT_R8G8B8A8_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "rg32i", PIPE_FORMAT_R32G32_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "rg16i", PIPE_FORMAT_R16G16_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "rg8i", PIPE_FORMAT_R8G8_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "r32i", PIPE_FORMAT_R32_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "r16i", PIPE_FORMAT_R16_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "r8i", PIPE_FORMAT_R8_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "rgba16", PIPE_FORMAT_R16G16B16A16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgb10_a2", PIPE_FORMAT_R10G10B10A2_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba8", PIPE_FORMAT_R8G8B8A8_UNORM, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rg16", PIPE_FORMAT_R16G16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rg8", PIPE_FORMAT_R8G8_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r16", PIPE_FORMAT_R16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r8", PIPE_FORMAT_R8_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba16_snorm", PIPE_FORMAT_R16G16B16A16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba8_snorm", PIPE_FORMAT_R8G8B8A8_SNORM, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rg16_snorm", PIPE_FORMAT_R16G16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rg8_snorm", PIPE_FORMAT_R8G8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r16_snorm", PIPE_FORMAT_R16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r8_snorm", PIPE_FORMAT_R8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - - /* From GL_EXT_shader_image_load_store: */ - /* base_type is incorrect but it'll be patched later when we know - * the variable type. See ast_to_hir.cpp */ - { "size1x8", PIPE_FORMAT_R8_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size1x16", PIPE_FORMAT_R16_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size1x32", PIPE_FORMAT_R32_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size2x32", PIPE_FORMAT_R32G32_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size4x32", PIPE_FORMAT_R32G32B32A32_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - }; - - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if ((state->is_version(map[i].required_glsl, - map[i].required_essl) || - (state->NV_image_formats_enable && - map[i].nv_image_formats)) && - match_layout_qualifier((yyvsp[0].identifier), map[i].name, state) == 0) { - /* Skip ARB_shader_image_load_store qualifiers if not enabled */ - if (!map[i].ext_qualifiers && !(state->ARB_shader_image_load_store_enable || - state->is_version(420, 310))) { - continue; - } - /* Skip EXT_shader_image_load_store qualifiers if not enabled */ - if (map[i].ext_qualifiers && !state->EXT_shader_image_load_store_enable) { - continue; - } - (yyval.type_qualifier).flags.q.explicit_image_format = 1; - (yyval.type_qualifier).image_format = map[i].format; - (yyval.type_qualifier).image_base_type = map[i].base_type; - break; - } - } - } - } - - if (!(yyval.type_qualifier).flags.i) { - if (match_layout_qualifier((yyvsp[0].identifier), "early_fragment_tests", state) == 0) { - /* From section 4.4.1.3 of the GLSL 4.50 specification - * (Fragment Shader Inputs): - * - * "Fragment shaders also allow the following layout - * qualifier on in only (not with variable declarations) - * layout-qualifier-id - * early_fragment_tests - * [...]" - */ - if (state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& (yylsp[0]), state, - "early_fragment_tests layout qualifier only " - "valid in fragment shaders"); - } - - (yyval.type_qualifier).flags.q.early_fragment_tests = 1; - } - - if (match_layout_qualifier((yyvsp[0].identifier), "inner_coverage", state) == 0) { - if (state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& (yylsp[0]), state, - "inner_coverage layout qualifier only " - "valid in fragment shaders"); - } - - if (state->INTEL_conservative_rasterization_enable) { - (yyval.type_qualifier).flags.q.inner_coverage = 1; - } else { - _mesa_glsl_error(& (yylsp[0]), state, - "inner_coverage layout qualifier present, " - "but the INTEL_conservative_rasterization extension " - "is not enabled."); - } - } - - if (match_layout_qualifier((yyvsp[0].identifier), "post_depth_coverage", state) == 0) { - if (state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& (yylsp[0]), state, - "post_depth_coverage layout qualifier only " - "valid in fragment shaders"); - } - - if (state->ARB_post_depth_coverage_enable || - state->INTEL_conservative_rasterization_enable) { - (yyval.type_qualifier).flags.q.post_depth_coverage = 1; - } else { - _mesa_glsl_error(& (yylsp[0]), state, - "post_depth_coverage layout qualifier present, " - "but the GL_ARB_post_depth_coverage extension " - "is not enabled."); - } - } - - if ((yyval.type_qualifier).flags.q.post_depth_coverage && (yyval.type_qualifier).flags.q.inner_coverage) { - _mesa_glsl_error(& (yylsp[0]), state, - "post_depth_coverage & inner_coverage layout qualifiers " - "are mutually exclusive"); - } - } - - const bool pixel_interlock_ordered = match_layout_qualifier((yyvsp[0].identifier), - "pixel_interlock_ordered", state) == 0; - const bool pixel_interlock_unordered = match_layout_qualifier((yyvsp[0].identifier), - "pixel_interlock_unordered", state) == 0; - const bool sample_interlock_ordered = match_layout_qualifier((yyvsp[0].identifier), - "sample_interlock_ordered", state) == 0; - const bool sample_interlock_unordered = match_layout_qualifier((yyvsp[0].identifier), - "sample_interlock_unordered", state) == 0; - - if (pixel_interlock_ordered + pixel_interlock_unordered + - sample_interlock_ordered + sample_interlock_unordered > 0 && - state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& (yylsp[0]), state, "interlock layout qualifiers: " - "pixel_interlock_ordered, pixel_interlock_unordered, " - "sample_interlock_ordered and sample_interlock_unordered, " - "only valid in fragment shader input layout declaration."); - } else if (pixel_interlock_ordered + pixel_interlock_unordered + - sample_interlock_ordered + sample_interlock_unordered > 0 && - !state->ARB_fragment_shader_interlock_enable && - !state->NV_fragment_shader_interlock_enable) { - _mesa_glsl_error(& (yylsp[0]), state, - "interlock layout qualifier present, but the " - "GL_ARB_fragment_shader_interlock or " - "GL_NV_fragment_shader_interlock extension is not " - "enabled."); - } else { - (yyval.type_qualifier).flags.q.pixel_interlock_ordered = pixel_interlock_ordered; - (yyval.type_qualifier).flags.q.pixel_interlock_unordered = pixel_interlock_unordered; - (yyval.type_qualifier).flags.q.sample_interlock_ordered = sample_interlock_ordered; - (yyval.type_qualifier).flags.q.sample_interlock_unordered = sample_interlock_unordered; - } - - /* Layout qualifiers for tessellation evaluation shaders. */ - if (!(yyval.type_qualifier).flags.i) { - static const struct { - const char *s; - GLenum e; - } map[] = { - /* triangles already parsed by gs-specific code */ - { "quads", GL_QUADS }, - { "isolines", GL_ISOLINES }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) { - (yyval.type_qualifier).flags.q.prim_type = 1; - (yyval.type_qualifier).prim_type = map[i].e; - break; - } - } - - if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, - "primitive mode qualifier `%s' requires " - "GLSL 4.00 or ARB_tessellation_shader", (yyvsp[0].identifier)); - } - } - if (!(yyval.type_qualifier).flags.i) { - static const struct { - const char *s; - enum gl_tess_spacing e; - } map[] = { - { "equal_spacing", TESS_SPACING_EQUAL }, - { "fractional_odd_spacing", TESS_SPACING_FRACTIONAL_ODD }, - { "fractional_even_spacing", TESS_SPACING_FRACTIONAL_EVEN }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) { - (yyval.type_qualifier).flags.q.vertex_spacing = 1; - (yyval.type_qualifier).vertex_spacing = map[i].e; - break; - } - } - - if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, - "vertex spacing qualifier `%s' requires " - "GLSL 4.00 or ARB_tessellation_shader", (yyvsp[0].identifier)); - } - } - if (!(yyval.type_qualifier).flags.i) { - if (match_layout_qualifier((yyvsp[0].identifier), "cw", state) == 0) { - (yyval.type_qualifier).flags.q.ordering = 1; - (yyval.type_qualifier).ordering = GL_CW; - } else if (match_layout_qualifier((yyvsp[0].identifier), "ccw", state) == 0) { - (yyval.type_qualifier).flags.q.ordering = 1; - (yyval.type_qualifier).ordering = GL_CCW; - } - - if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, - "ordering qualifier `%s' requires " - "GLSL 4.00 or ARB_tessellation_shader", (yyvsp[0].identifier)); - } - } - if (!(yyval.type_qualifier).flags.i) { - if (match_layout_qualifier((yyvsp[0].identifier), "point_mode", state) == 0) { - (yyval.type_qualifier).flags.q.point_mode = 1; - (yyval.type_qualifier).point_mode = true; - } - - if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, - "qualifier `point_mode' requires " - "GLSL 4.00 or ARB_tessellation_shader"); - } - } - - if (!(yyval.type_qualifier).flags.i) { - static const struct { - const char *s; - uint32_t mask; - } map[] = { - { "blend_support_multiply", BITFIELD_BIT(BLEND_MULTIPLY) }, - { "blend_support_screen", BITFIELD_BIT(BLEND_SCREEN) }, - { "blend_support_overlay", BITFIELD_BIT(BLEND_OVERLAY) }, - { "blend_support_darken", BITFIELD_BIT(BLEND_DARKEN) }, - { "blend_support_lighten", BITFIELD_BIT(BLEND_LIGHTEN) }, - { "blend_support_colordodge", BITFIELD_BIT(BLEND_COLORDODGE) }, - { "blend_support_colorburn", BITFIELD_BIT(BLEND_COLORBURN) }, - { "blend_support_hardlight", BITFIELD_BIT(BLEND_HARDLIGHT) }, - { "blend_support_softlight", BITFIELD_BIT(BLEND_SOFTLIGHT) }, - { "blend_support_difference", BITFIELD_BIT(BLEND_DIFFERENCE) }, - { "blend_support_exclusion", BITFIELD_BIT(BLEND_EXCLUSION) }, - { "blend_support_hsl_hue", BITFIELD_BIT(BLEND_HSL_HUE) }, - { "blend_support_hsl_saturation", BITFIELD_BIT(BLEND_HSL_SATURATION) }, - { "blend_support_hsl_color", BITFIELD_BIT(BLEND_HSL_COLOR) }, - { "blend_support_hsl_luminosity", BITFIELD_BIT(BLEND_HSL_LUMINOSITY) }, - { "blend_support_all_equations", (1u << (BLEND_HSL_LUMINOSITY + 1)) - 2 }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) { - (yyval.type_qualifier).flags.q.blend_support = 1; - state->fs_blend_support |= map[i].mask; - break; - } - } - - if ((yyval.type_qualifier).flags.i && - !state->KHR_blend_equation_advanced_enable && - !state->is_version(0, 320)) { - _mesa_glsl_error(& (yylsp[0]), state, - "advanced blending layout qualifiers require " - "ESSL 3.20 or KHR_blend_equation_advanced"); - } - - if ((yyval.type_qualifier).flags.i && state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& (yylsp[0]), state, - "advanced blending layout qualifiers only " - "valid in fragment shaders"); - } - } - - /* Layout qualifiers for ARB_compute_variable_group_size. */ - if (!(yyval.type_qualifier).flags.i) { - if (match_layout_qualifier((yyvsp[0].identifier), "local_size_variable", state) == 0) { - (yyval.type_qualifier).flags.q.local_size_variable = 1; - } - - if ((yyval.type_qualifier).flags.i && !state->ARB_compute_variable_group_size_enable) { - _mesa_glsl_error(& (yylsp[0]), state, - "qualifier `local_size_variable` requires " - "ARB_compute_variable_group_size"); - } - } - - /* Layout qualifiers for ARB_bindless_texture. */ - if (!(yyval.type_qualifier).flags.i) { - if (match_layout_qualifier((yyvsp[0].identifier), "bindless_sampler", state) == 0) - (yyval.type_qualifier).flags.q.bindless_sampler = 1; - if (match_layout_qualifier((yyvsp[0].identifier), "bound_sampler", state) == 0) - (yyval.type_qualifier).flags.q.bound_sampler = 1; - - if (state->has_shader_image_load_store()) { - if (match_layout_qualifier((yyvsp[0].identifier), "bindless_image", state) == 0) - (yyval.type_qualifier).flags.q.bindless_image = 1; - if (match_layout_qualifier((yyvsp[0].identifier), "bound_image", state) == 0) - (yyval.type_qualifier).flags.q.bound_image = 1; - } - - if ((yyval.type_qualifier).flags.i && !state->has_bindless()) { - _mesa_glsl_error(& (yylsp[0]), state, - "qualifier `%s` requires " - "ARB_bindless_texture", (yyvsp[0].identifier)); - } - } - - if (!(yyval.type_qualifier).flags.i && - state->EXT_shader_framebuffer_fetch_non_coherent_enable) { - if (match_layout_qualifier((yyvsp[0].identifier), "noncoherent", state) == 0) - (yyval.type_qualifier).flags.q.non_coherent = 1; - } - - // Layout qualifiers for NV_compute_shader_derivatives. - if (!(yyval.type_qualifier).flags.i) { - if (match_layout_qualifier((yyvsp[0].identifier), "derivative_group_quadsNV", state) == 0) { - (yyval.type_qualifier).flags.q.derivative_group = 1; - (yyval.type_qualifier).derivative_group = DERIVATIVE_GROUP_QUADS; - } else if (match_layout_qualifier((yyvsp[0].identifier), "derivative_group_linearNV", state) == 0) { - (yyval.type_qualifier).flags.q.derivative_group = 1; - (yyval.type_qualifier).derivative_group = DERIVATIVE_GROUP_LINEAR; - } - - if ((yyval.type_qualifier).flags.i) { - if (!state->has_compute_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, - "qualifier `%s' requires " - "a compute shader", (yyvsp[0].identifier)); - } - - if (!state->NV_compute_shader_derivatives_enable) { - _mesa_glsl_error(& (yylsp[0]), state, - "qualifier `%s' requires " - "NV_compute_shader_derivatives", (yyvsp[0].identifier)); - } - - if (state->NV_compute_shader_derivatives_warn) { - _mesa_glsl_warning(& (yylsp[0]), state, - "NV_compute_shader_derivatives layout " - "qualifier `%s' used", (yyvsp[0].identifier)); - } - } - } - - /* Layout qualifier for NV_viewport_array2. */ - if (!(yyval.type_qualifier).flags.i && state->stage != MESA_SHADER_FRAGMENT) { - if (match_layout_qualifier((yyvsp[0].identifier), "viewport_relative", state) == 0) { - (yyval.type_qualifier).flags.q.viewport_relative = 1; - } - - if ((yyval.type_qualifier).flags.i && !state->NV_viewport_array2_enable) { - _mesa_glsl_error(& (yylsp[0]), state, - "qualifier `%s' requires " - "GL_NV_viewport_array2", (yyvsp[0].identifier)); - } - - if ((yyval.type_qualifier).flags.i && state->NV_viewport_array2_warn) { - _mesa_glsl_warning(& (yylsp[0]), state, - "GL_NV_viewport_array2 layout " - "identifier `%s' used", (yyvsp[0].identifier)); - } - } - - if (!(yyval.type_qualifier).flags.i) { - _mesa_glsl_error(& (yylsp[0]), state, "unrecognized layout identifier " - "`%s'", (yyvsp[0].identifier)); - YYERROR; - } - } -#line 4341 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 151: /* layout_qualifier_id: any_identifier '=' constant_expression */ -#line 1726 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - void *ctx = state->linalloc; - - if ((yyvsp[0].expression)->oper != ast_int_constant && - (yyvsp[0].expression)->oper != ast_uint_constant && - !state->has_enhanced_layouts()) { - _mesa_glsl_error(& (yylsp[-2]), state, - "compile-time constant expressions require " - "GLSL 4.40 or ARB_enhanced_layouts"); - } - - if (match_layout_qualifier("align", (yyvsp[-2].identifier), state) == 0) { - if (!state->has_enhanced_layouts()) { - _mesa_glsl_error(& (yylsp[-2]), state, - "align qualifier requires " - "GLSL 4.40 or ARB_enhanced_layouts"); - } else { - (yyval.type_qualifier).flags.q.explicit_align = 1; - (yyval.type_qualifier).align = (yyvsp[0].expression); - } - } - - if (match_layout_qualifier("location", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.explicit_location = 1; - - if ((yyval.type_qualifier).flags.q.attribute == 1 && - state->ARB_explicit_attrib_location_warn) { - _mesa_glsl_warning(& (yylsp[-2]), state, - "GL_ARB_explicit_attrib_location layout " - "identifier `%s' used", (yyvsp[-2].identifier)); - } - (yyval.type_qualifier).location = (yyvsp[0].expression); - } - - if (match_layout_qualifier("component", (yyvsp[-2].identifier), state) == 0) { - if (!state->has_enhanced_layouts()) { - _mesa_glsl_error(& (yylsp[-2]), state, - "component qualifier requires " - "GLSL 4.40 or ARB_enhanced_layouts"); - } else { - (yyval.type_qualifier).flags.q.explicit_component = 1; - (yyval.type_qualifier).component = (yyvsp[0].expression); - } - } - - if (match_layout_qualifier("index", (yyvsp[-2].identifier), state) == 0) { - if (state->es_shader && !state->EXT_blend_func_extended_enable) { - _mesa_glsl_error(& (yylsp[0]), state, "index layout qualifier requires EXT_blend_func_extended"); - YYERROR; - } - - (yyval.type_qualifier).flags.q.explicit_index = 1; - (yyval.type_qualifier).index = (yyvsp[0].expression); - } - - if ((state->has_420pack_or_es31() || - state->has_atomic_counters() || - state->has_shader_storage_buffer_objects()) && - match_layout_qualifier("binding", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.explicit_binding = 1; - (yyval.type_qualifier).binding = (yyvsp[0].expression); - } - - if ((state->has_atomic_counters() || - state->has_enhanced_layouts()) && - match_layout_qualifier("offset", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.explicit_offset = 1; - (yyval.type_qualifier).offset = (yyvsp[0].expression); - } - - if (match_layout_qualifier("max_vertices", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.max_vertices = 1; - (yyval.type_qualifier).max_vertices = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression)); - if (!state->has_geometry_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, - "#version 150 max_vertices qualifier " - "specified", (yyvsp[0].expression)); - } - } - - if (state->stage == MESA_SHADER_GEOMETRY) { - if (match_layout_qualifier("stream", (yyvsp[-2].identifier), state) == 0 && - state->check_explicit_attrib_stream_allowed(& (yylsp[0]))) { - (yyval.type_qualifier).flags.q.stream = 1; - (yyval.type_qualifier).flags.q.explicit_stream = 1; - (yyval.type_qualifier).stream = (yyvsp[0].expression); - } - } - - if (state->has_enhanced_layouts()) { - if (match_layout_qualifier("xfb_buffer", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.xfb_buffer = 1; - (yyval.type_qualifier).flags.q.explicit_xfb_buffer = 1; - (yyval.type_qualifier).xfb_buffer = (yyvsp[0].expression); - } - - if (match_layout_qualifier("xfb_offset", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.explicit_xfb_offset = 1; - (yyval.type_qualifier).offset = (yyvsp[0].expression); - } - - if (match_layout_qualifier("xfb_stride", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.xfb_stride = 1; - (yyval.type_qualifier).flags.q.explicit_xfb_stride = 1; - (yyval.type_qualifier).xfb_stride = (yyvsp[0].expression); - } - } - - static const char * const local_size_qualifiers[3] = { - "local_size_x", - "local_size_y", - "local_size_z", - }; - for (int i = 0; i < 3; i++) { - if (match_layout_qualifier(local_size_qualifiers[i], (yyvsp[-2].identifier), - state) == 0) { - if (!state->has_compute_shader()) { - _mesa_glsl_error(& (yylsp[0]), state, - "%s qualifier requires GLSL 4.30 or " - "GLSL ES 3.10 or ARB_compute_shader", - local_size_qualifiers[i]); - YYERROR; - } else { - (yyval.type_qualifier).flags.q.local_size |= (1 << i); - (yyval.type_qualifier).local_size[i] = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression)); - } - break; - } - } - - if (match_layout_qualifier("invocations", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.invocations = 1; - (yyval.type_qualifier).invocations = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression)); - if (!state->is_version(400, 320) && - !state->ARB_gpu_shader5_enable && - !state->OES_geometry_shader_enable && - !state->EXT_geometry_shader_enable) { - _mesa_glsl_error(& (yylsp[0]), state, - "GL_ARB_gpu_shader5 invocations " - "qualifier specified"); - } - } - - /* Layout qualifiers for tessellation control shaders. */ - if (match_layout_qualifier("vertices", (yyvsp[-2].identifier), state) == 0) { - (yyval.type_qualifier).flags.q.vertices = 1; - (yyval.type_qualifier).vertices = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression)); - if (!state->has_tessellation_shader()) { - _mesa_glsl_error(& (yylsp[-2]), state, - "vertices qualifier requires GLSL 4.00 or " - "ARB_tessellation_shader"); - } - } - - /* If the identifier didn't match any known layout identifiers, - * emit an error. - */ - if (!(yyval.type_qualifier).flags.i) { - _mesa_glsl_error(& (yylsp[-2]), state, "unrecognized layout identifier " - "`%s'", (yyvsp[-2].identifier)); - YYERROR; - } - } -#line 4510 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 152: /* layout_qualifier_id: interface_block_layout_qualifier */ -#line 1891 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - /* Layout qualifiers for ARB_uniform_buffer_object. */ - if ((yyval.type_qualifier).flags.q.uniform && !state->has_uniform_buffer_objects()) { - _mesa_glsl_error(& (yylsp[0]), state, - "#version 140 / GL_ARB_uniform_buffer_object " - "layout qualifier `uniform' is used"); - } else if ((yyval.type_qualifier).flags.q.uniform && state->ARB_uniform_buffer_object_warn) { - _mesa_glsl_warning(& (yylsp[0]), state, - "#version 140 / GL_ARB_uniform_buffer_object " - "layout qualifier `uniform' is used"); - } - } -#line 4528 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 153: /* interface_block_layout_qualifier: ROW_MAJOR */ -#line 1917 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.row_major = 1; - } -#line 4537 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 154: /* interface_block_layout_qualifier: PACKED_TOK */ -#line 1922 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.packed = 1; - } -#line 4546 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 155: /* interface_block_layout_qualifier: SHARED */ -#line 1927 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.shared = 1; - } -#line 4555 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 156: /* subroutine_qualifier: SUBROUTINE */ -#line 1935 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.subroutine = 1; - } -#line 4564 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 157: /* subroutine_qualifier: SUBROUTINE '(' subroutine_type_list ')' */ -#line 1940 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.subroutine = 1; - (yyval.type_qualifier).subroutine_list = (yyvsp[-1].subroutine_list); - } -#line 4574 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 158: /* subroutine_type_list: any_identifier */ -#line 1949 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL); - decl->set_location((yylsp[0])); - - (yyval.subroutine_list) = new(ctx) ast_subroutine_list(); - (yyval.subroutine_list)->declarations.push_tail(&decl->link); - } -#line 4587 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 159: /* subroutine_type_list: subroutine_type_list ',' any_identifier */ -#line 1958 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL); - decl->set_location((yylsp[0])); - - (yyval.subroutine_list) = (yyvsp[-2].subroutine_list); - (yyval.subroutine_list)->declarations.push_tail(&decl->link); - } -#line 4600 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 160: /* interpolation_qualifier: SMOOTH */ -#line 1970 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.smooth = 1; - } -#line 4609 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 161: /* interpolation_qualifier: FLAT */ -#line 1975 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.flat = 1; - } -#line 4618 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 162: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1980 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.noperspective = 1; - } -#line 4627 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 163: /* type_qualifier: INVARIANT */ -#line 1989 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.invariant = 1; - } -#line 4636 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 164: /* type_qualifier: PRECISE */ -#line 1994 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.precise = 1; - } -#line 4645 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 171: /* type_qualifier: precision_qualifier */ -#line 2005 "../src/compiler/glsl/glsl_parser.yy" - { - memset(&(yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).precision = (yyvsp[0].n); - } -#line 4654 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 172: /* type_qualifier: PRECISE type_qualifier */ -#line 2023 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type_qualifier).flags.q.precise) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate \"precise\" qualifier"); - - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - (yyval.type_qualifier).flags.q.precise = 1; - } -#line 4666 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 173: /* type_qualifier: INVARIANT type_qualifier */ -#line 2031 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type_qualifier).flags.q.invariant) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate \"invariant\" qualifier"); - - if (!state->has_420pack_or_es31() && (yyvsp[0].type_qualifier).flags.q.precise) - _mesa_glsl_error(&(yylsp[-1]), state, - "\"invariant\" must come after \"precise\""); - - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - (yyval.type_qualifier).flags.q.invariant = 1; - - /* GLSL ES 3.00 spec, section 4.6.1 "The Invariant Qualifier": - * - * "Only variables output from a shader can be candidates for invariance. - * This includes user-defined output variables and the built-in output - * variables. As only outputs can be declared as invariant, an invariant - * output from one shader stage will still match an input of a subsequent - * stage without the input being declared as invariant." - * - * On the desktop side, this text first appears in GLSL 4.20. - */ - if (state->is_version(420, 300) && (yyval.type_qualifier).flags.q.in) - _mesa_glsl_error(&(yylsp[-1]), state, "invariant qualifiers cannot be used with shader inputs"); - } -#line 4695 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 174: /* type_qualifier: interpolation_qualifier type_qualifier */ -#line 2056 "../src/compiler/glsl/glsl_parser.yy" - { - /* Section 4.3 of the GLSL 1.40 specification states: - * "...qualified with one of these interpolation qualifiers" - * - * GLSL 1.30 claims to allow "one or more", but insists that: - * "These interpolation qualifiers may only precede the qualifiers in, - * centroid in, out, or centroid out in a declaration." - * - * ...which means that e.g. smooth can't precede smooth, so there can be - * only one after all, and the 1.40 text is a clarification, not a change. - */ - if ((yyvsp[0].type_qualifier).has_interpolation()) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate interpolation qualifier"); - - if (!state->has_420pack_or_es31() && - ((yyvsp[0].type_qualifier).flags.q.precise || (yyvsp[0].type_qualifier).flags.q.invariant)) { - _mesa_glsl_error(&(yylsp[-1]), state, "interpolation qualifiers must come " - "after \"precise\" or \"invariant\""); - } - - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false); - } -#line 4723 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 175: /* type_qualifier: layout_qualifier type_qualifier */ -#line 2080 "../src/compiler/glsl/glsl_parser.yy" - { - /* In the absence of ARB_shading_language_420pack, layout qualifiers may - * appear no later than auxiliary storage qualifiers. There is no - * particularly clear spec language mandating this, but in all examples - * the layout qualifier precedes the storage qualifier. - * - * We allow combinations of layout with interpolation, invariant or - * precise qualifiers since these are useful in ARB_separate_shader_objects. - * There is no clear spec guidance on this either. - */ - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, (yyvsp[0].type_qualifier).has_layout()); - } -#line 4741 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 176: /* type_qualifier: subroutine_qualifier type_qualifier */ -#line 2094 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false); - } -#line 4750 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 177: /* type_qualifier: auxiliary_storage_qualifier type_qualifier */ -#line 2099 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type_qualifier).has_auxiliary_storage()) { - _mesa_glsl_error(&(yylsp[-1]), state, - "duplicate auxiliary storage qualifier (centroid or sample)"); - } - - if ((!state->has_420pack_or_es31() && !state->EXT_gpu_shader4_enable) && - ((yyvsp[0].type_qualifier).flags.q.precise || (yyvsp[0].type_qualifier).flags.q.invariant || - (yyvsp[0].type_qualifier).has_interpolation() || (yyvsp[0].type_qualifier).has_layout())) { - _mesa_glsl_error(&(yylsp[-1]), state, "auxiliary storage qualifiers must come " - "just before storage qualifiers"); - } - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false); - } -#line 4770 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 178: /* type_qualifier: storage_qualifier type_qualifier */ -#line 2115 "../src/compiler/glsl/glsl_parser.yy" - { - /* Section 4.3 of the GLSL 1.20 specification states: - * "Variable declarations may have a storage qualifier specified..." - * 1.30 clarifies this to "may have one storage qualifier". - * - * GL_EXT_gpu_shader4 allows "varying out" in fragment shaders. - */ - if ((yyvsp[0].type_qualifier).has_storage() && - (!state->EXT_gpu_shader4_enable || - state->stage != MESA_SHADER_FRAGMENT || - !(yyvsp[-1].type_qualifier).flags.q.varying || !(yyvsp[0].type_qualifier).flags.q.out)) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate storage qualifier"); - - if (!state->has_420pack_or_es31() && - ((yyvsp[0].type_qualifier).flags.q.precise || (yyvsp[0].type_qualifier).flags.q.invariant || (yyvsp[0].type_qualifier).has_interpolation() || - (yyvsp[0].type_qualifier).has_layout() || (yyvsp[0].type_qualifier).has_auxiliary_storage())) { - _mesa_glsl_error(&(yylsp[-1]), state, "storage qualifiers must come after " - "precise, invariant, interpolation, layout and auxiliary " - "storage qualifiers"); - } - - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false); - } -#line 4799 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 179: /* type_qualifier: precision_qualifier type_qualifier */ -#line 2140 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type_qualifier).precision != ast_precision_none) - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate precision qualifier"); - - if (!(state->has_420pack_or_es31()) && - (yyvsp[0].type_qualifier).flags.i != 0) - _mesa_glsl_error(&(yylsp[-1]), state, "precision qualifiers must come last"); - - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - (yyval.type_qualifier).precision = (yyvsp[-1].n); - } -#line 4815 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 180: /* type_qualifier: memory_qualifier type_qualifier */ -#line 2152 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - (yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false); - } -#line 4824 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 181: /* auxiliary_storage_qualifier: CENTROID */ -#line 2160 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.centroid = 1; - } -#line 4833 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 182: /* auxiliary_storage_qualifier: SAMPLE */ -#line 2165 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.sample = 1; - } -#line 4842 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 183: /* auxiliary_storage_qualifier: PATCH */ -#line 2170 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.patch = 1; - } -#line 4851 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 184: /* storage_qualifier: CONST_TOK */ -#line 2177 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.constant = 1; - } -#line 4860 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 185: /* storage_qualifier: ATTRIBUTE */ -#line 2182 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.attribute = 1; - } -#line 4869 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 186: /* storage_qualifier: VARYING */ -#line 2187 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.varying = 1; - } -#line 4878 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 187: /* storage_qualifier: IN_TOK */ -#line 2192 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.in = 1; - } -#line 4887 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 188: /* storage_qualifier: OUT_TOK */ -#line 2197 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.out = 1; - - if (state->stage == MESA_SHADER_GEOMETRY && - state->has_explicit_attrib_stream()) { - /* Section 4.3.8.2 (Output Layout Qualifiers) of the GLSL 4.00 - * spec says: - * - * "If the block or variable is declared with the stream - * identifier, it is associated with the specified stream; - * otherwise, it is associated with the current default stream." - */ - (yyval.type_qualifier).flags.q.stream = 1; - (yyval.type_qualifier).flags.q.explicit_stream = 0; - (yyval.type_qualifier).stream = state->out_qualifier->stream; - } - - if (state->has_enhanced_layouts() && state->exts->ARB_transform_feedback3) { - (yyval.type_qualifier).flags.q.xfb_buffer = 1; - (yyval.type_qualifier).flags.q.explicit_xfb_buffer = 0; - (yyval.type_qualifier).xfb_buffer = state->out_qualifier->xfb_buffer; - } - } -#line 4916 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 189: /* storage_qualifier: INOUT_TOK */ -#line 2222 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.in = 1; - (yyval.type_qualifier).flags.q.out = 1; - - if (!state->has_framebuffer_fetch() || - !state->is_version(130, 300) || - state->stage != MESA_SHADER_FRAGMENT) - _mesa_glsl_error(&(yylsp[0]), state, "A single interface variable cannot be " - "declared as both input and output"); - } -#line 4932 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 190: /* storage_qualifier: UNIFORM */ -#line 2234 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.uniform = 1; - } -#line 4941 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 191: /* storage_qualifier: BUFFER */ -#line 2239 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.buffer = 1; - } -#line 4950 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 192: /* storage_qualifier: SHARED */ -#line 2244 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.shared_storage = 1; - } -#line 4959 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 193: /* memory_qualifier: COHERENT */ -#line 2252 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.coherent = 1; - } -#line 4968 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 194: /* memory_qualifier: VOLATILE */ -#line 2257 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q._volatile = 1; - } -#line 4977 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 195: /* memory_qualifier: RESTRICT */ -#line 2262 "../src/compiler/glsl/glsl_parser.yy" - { - STATIC_ASSERT(sizeof((yyval.type_qualifier).flags.q) <= sizeof((yyval.type_qualifier).flags.i)); - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.restrict_flag = 1; - } -#line 4987 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 196: /* memory_qualifier: READONLY */ -#line 2268 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.read_only = 1; - } -#line 4996 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 197: /* memory_qualifier: WRITEONLY */ -#line 2273 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.write_only = 1; - } -#line 5005 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 198: /* array_specifier: '[' ']' */ -#line 2281 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.array_specifier) = new(ctx) ast_array_specifier((yylsp[-1]), new(ctx) ast_expression( - ast_unsized_array_dim, NULL, - NULL, NULL)); - (yyval.array_specifier)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 5017 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 199: /* array_specifier: '[' constant_expression ']' */ -#line 2289 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.array_specifier) = new(ctx) ast_array_specifier((yylsp[-2]), (yyvsp[-1].expression)); - (yyval.array_specifier)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 5027 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 200: /* array_specifier: array_specifier '[' ']' */ -#line 2295 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.array_specifier) = (yyvsp[-2].array_specifier); - - if (state->check_arrays_of_arrays_allowed(& (yylsp[-2]))) { - (yyval.array_specifier)->add_dimension(new(ctx) ast_expression(ast_unsized_array_dim, NULL, - NULL, NULL)); - } - } -#line 5041 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 201: /* array_specifier: array_specifier '[' constant_expression ']' */ -#line 2305 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.array_specifier) = (yyvsp[-3].array_specifier); - - if (state->check_arrays_of_arrays_allowed(& (yylsp[-3]))) { - (yyval.array_specifier)->add_dimension((yyvsp[-1].expression)); - } - } -#line 5053 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 203: /* type_specifier: type_specifier_nonarray array_specifier */ -#line 2317 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_specifier) = (yyvsp[-1].type_specifier); - (yyval.type_specifier)->array_specifier = (yyvsp[0].array_specifier); - } -#line 5062 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 204: /* type_specifier_nonarray: basic_type_specifier_nonarray */ -#line 2325 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[0].type)); - (yyval.type_specifier)->set_location((yylsp[0])); - } -#line 5072 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 205: /* type_specifier_nonarray: struct_specifier */ -#line 2331 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[0].struct_specifier)); - (yyval.type_specifier)->set_location((yylsp[0])); - } -#line 5082 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 206: /* type_specifier_nonarray: TYPE_IDENTIFIER */ -#line 2337 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[0].identifier)); - (yyval.type_specifier)->set_location((yylsp[0])); - } -#line 5092 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 207: /* basic_type_specifier_nonarray: VOID_TOK */ -#line 2345 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.type) = glsl_type::void_type; } -#line 5098 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 208: /* basic_type_specifier_nonarray: BASIC_TYPE_TOK */ -#line 2346 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.type) = (yyvsp[0].type); } -#line 5104 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 209: /* basic_type_specifier_nonarray: UNSIGNED BASIC_TYPE_TOK */ -#line 2348 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].type) == glsl_type::int_type) { - (yyval.type) = glsl_type::uint_type; - } else { - _mesa_glsl_error(&(yylsp[-1]), state, - "\"unsigned\" is only allowed before \"int\""); - } - } -#line 5117 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 210: /* precision_qualifier: HIGHP */ -#line 2360 "../src/compiler/glsl/glsl_parser.yy" - { - state->check_precision_qualifiers_allowed(&(yylsp[0])); - (yyval.n) = ast_precision_high; - } -#line 5126 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 211: /* precision_qualifier: MEDIUMP */ -#line 2365 "../src/compiler/glsl/glsl_parser.yy" - { - state->check_precision_qualifiers_allowed(&(yylsp[0])); - (yyval.n) = ast_precision_medium; - } -#line 5135 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 212: /* precision_qualifier: LOWP */ -#line 2370 "../src/compiler/glsl/glsl_parser.yy" - { - state->check_precision_qualifiers_allowed(&(yylsp[0])); - (yyval.n) = ast_precision_low; - } -#line 5144 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 213: /* struct_specifier: STRUCT any_identifier '{' struct_declaration_list '}' */ -#line 2378 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[-3].identifier), (yyvsp[-1].declarator_list)); - (yyval.struct_specifier)->set_location_range((yylsp[-3]), (yylsp[0])); - state->symbols->add_type((yyvsp[-3].identifier), glsl_type::void_type); - } -#line 5155 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 214: /* struct_specifier: STRUCT '{' struct_declaration_list '}' */ -#line 2385 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - - /* All anonymous structs have the same name. This simplifies matching of - * globals whose type is an unnamed struct. - * - * It also avoids a memory leak when the same shader is compiled over and - * over again. - */ - (yyval.struct_specifier) = new(ctx) ast_struct_specifier("#anon_struct", (yyvsp[-1].declarator_list)); - - (yyval.struct_specifier)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 5173 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 215: /* struct_declaration_list: struct_declaration */ -#line 2402 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.declarator_list) = (yyvsp[0].declarator_list); - (yyvsp[0].declarator_list)->link.self_link(); - } -#line 5182 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 216: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 2407 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.declarator_list) = (yyvsp[-1].declarator_list); - (yyval.declarator_list)->link.insert_before(& (yyvsp[0].declarator_list)->link); - } -#line 5191 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 217: /* struct_declaration: fully_specified_type struct_declarator_list ';' */ -#line 2415 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_fully_specified_type *const type = (yyvsp[-2].fully_specified_type); - type->set_location((yylsp[-2])); - - if (state->has_bindless()) { - ast_type_qualifier input_layout_mask; - - /* Allow to declare qualifiers for images. */ - input_layout_mask.flags.i = 0; - input_layout_mask.flags.q.coherent = 1; - input_layout_mask.flags.q._volatile = 1; - input_layout_mask.flags.q.restrict_flag = 1; - input_layout_mask.flags.q.read_only = 1; - input_layout_mask.flags.q.write_only = 1; - input_layout_mask.flags.q.explicit_image_format = 1; - - if ((type->qualifier.flags.i & ~input_layout_mask.flags.i) != 0) { - _mesa_glsl_error(&(yylsp[-2]), state, - "only precision and image qualifiers may be " - "applied to structure members"); - } - } else { - if (type->qualifier.flags.i != 0) - _mesa_glsl_error(&(yylsp[-2]), state, - "only precision qualifiers may be applied to " - "structure members"); - } - - (yyval.declarator_list) = new(ctx) ast_declarator_list(type); - (yyval.declarator_list)->set_location((yylsp[-1])); - - (yyval.declarator_list)->declarations.push_degenerate_list_at_head(& (yyvsp[-1].declaration)->link); - } -#line 5230 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 218: /* struct_declarator_list: struct_declarator */ -#line 2453 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.declaration) = (yyvsp[0].declaration); - (yyvsp[0].declaration)->link.self_link(); - } -#line 5239 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 219: /* struct_declarator_list: struct_declarator_list ',' struct_declarator */ -#line 2458 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.declaration) = (yyvsp[-2].declaration); - (yyval.declaration)->link.insert_before(& (yyvsp[0].declaration)->link); - } -#line 5248 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 220: /* struct_declarator: any_identifier */ -#line 2466 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.declaration) = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL); - (yyval.declaration)->set_location((yylsp[0])); - } -#line 5258 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 221: /* struct_declarator: any_identifier array_specifier */ -#line 2472 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.declaration) = new(ctx) ast_declaration((yyvsp[-1].identifier), (yyvsp[0].array_specifier), NULL); - (yyval.declaration)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 5268 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 223: /* initializer: '{' initializer_list '}' */ -#line 2482 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.expression) = (yyvsp[-1].expression); - } -#line 5276 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 224: /* initializer: '{' initializer_list ',' '}' */ -#line 2486 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.expression) = (yyvsp[-2].expression); - } -#line 5284 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 225: /* initializer_list: initializer */ -#line 2493 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.expression) = new(ctx) ast_aggregate_initializer(); - (yyval.expression)->set_location((yylsp[0])); - (yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link); - } -#line 5295 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 226: /* initializer_list: initializer_list ',' initializer */ -#line 2500 "../src/compiler/glsl/glsl_parser.yy" - { - (yyvsp[-2].expression)->expressions.push_tail(& (yyvsp[0].expression)->link); - } -#line 5303 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 228: /* statement: compound_statement */ -#line 2512 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = (ast_node *) (yyvsp[0].compound_statement); } -#line 5309 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 237: /* compound_statement: '{' '}' */ -#line 2528 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.compound_statement) = new(ctx) ast_compound_statement(true, NULL); - (yyval.compound_statement)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 5319 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 238: /* $@2: %empty */ -#line 2534 "../src/compiler/glsl/glsl_parser.yy" - { - state->symbols->push_scope(); - } -#line 5327 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 239: /* compound_statement: '{' $@2 statement_list '}' */ -#line 2538 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[-1].node)); - (yyval.compound_statement)->set_location_range((yylsp[-3]), (yylsp[0])); - state->symbols->pop_scope(); - } -#line 5338 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 240: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 2547 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = (ast_node *) (yyvsp[0].compound_statement); } -#line 5344 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 242: /* compound_statement_no_new_scope: '{' '}' */ -#line 2553 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.compound_statement) = new(ctx) ast_compound_statement(false, NULL); - (yyval.compound_statement)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 5354 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 243: /* compound_statement_no_new_scope: '{' statement_list '}' */ -#line 2559 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.compound_statement) = new(ctx) ast_compound_statement(false, (yyvsp[-1].node)); - (yyval.compound_statement)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 5364 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 244: /* statement_list: statement */ -#line 2568 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].node) == NULL) { - _mesa_glsl_error(& (yylsp[0]), state, " statement"); - assert((yyvsp[0].node) != NULL); - } - - (yyval.node) = (yyvsp[0].node); - (yyval.node)->link.self_link(); - } -#line 5378 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 245: /* statement_list: statement_list statement */ -#line 2578 "../src/compiler/glsl/glsl_parser.yy" - { - if ((yyvsp[0].node) == NULL) { - _mesa_glsl_error(& (yylsp[0]), state, " statement"); - assert((yyvsp[0].node) != NULL); - } - (yyval.node) = (yyvsp[-1].node); - (yyval.node)->link.insert_before(& (yyvsp[0].node)->link); - } -#line 5391 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 246: /* statement_list: statement_list extension_statement */ -#line 2587 "../src/compiler/glsl/glsl_parser.yy" - { - if (!state->allow_extension_directive_midshader) { - _mesa_glsl_error(& (yylsp[-1]), state, - "#extension directive is not allowed " - "in the middle of a shader"); - YYERROR; - } - } -#line 5404 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 247: /* expression_statement: ';' */ -#line 2599 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_expression_statement(NULL); - (yyval.node)->set_location((yylsp[0])); - } -#line 5414 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 248: /* expression_statement: expression ';' */ -#line 2605 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_expression_statement((yyvsp[-1].expression)); - (yyval.node)->set_location((yylsp[-1])); - } -#line 5424 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 249: /* selection_statement: IF '(' expression ')' selection_rest_statement */ -#line 2614 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = new(state->linalloc) ast_selection_statement((yyvsp[-2].expression), (yyvsp[0].selection_rest_statement).then_statement, - (yyvsp[0].selection_rest_statement).else_statement); - (yyval.node)->set_location_range((yylsp[-4]), (yylsp[0])); - } -#line 5434 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 250: /* selection_rest_statement: statement ELSE statement */ -#line 2623 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.selection_rest_statement).then_statement = (yyvsp[-2].node); - (yyval.selection_rest_statement).else_statement = (yyvsp[0].node); - } -#line 5443 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 251: /* selection_rest_statement: statement */ -#line 2628 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.selection_rest_statement).then_statement = (yyvsp[0].node); - (yyval.selection_rest_statement).else_statement = NULL; - } -#line 5452 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 252: /* condition: expression */ -#line 2636 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = (ast_node *) (yyvsp[0].expression); - } -#line 5460 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 253: /* condition: fully_specified_type any_identifier '=' initializer */ -#line 2640 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-2].identifier), NULL, (yyvsp[0].expression)); - ast_declarator_list *declarator = new(ctx) ast_declarator_list((yyvsp[-3].fully_specified_type)); - decl->set_location_range((yylsp[-2]), (yylsp[0])); - declarator->set_location((yylsp[-3])); - - declarator->declarations.push_tail(&decl->link); - (yyval.node) = declarator; - } -#line 5475 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 254: /* switch_statement: SWITCH '(' expression ')' switch_body */ -#line 2658 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = new(state->linalloc) ast_switch_statement((yyvsp[-2].expression), (yyvsp[0].switch_body)); - (yyval.node)->set_location_range((yylsp[-4]), (yylsp[0])); - } -#line 5484 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 255: /* switch_body: '{' '}' */ -#line 2666 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.switch_body) = new(state->linalloc) ast_switch_body(NULL); - (yyval.switch_body)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 5493 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 256: /* switch_body: '{' case_statement_list '}' */ -#line 2671 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.switch_body) = new(state->linalloc) ast_switch_body((yyvsp[-1].case_statement_list)); - (yyval.switch_body)->set_location_range((yylsp[-2]), (yylsp[0])); - } -#line 5502 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 257: /* case_label: CASE expression ':' */ -#line 2679 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.case_label) = new(state->linalloc) ast_case_label((yyvsp[-1].expression)); - (yyval.case_label)->set_location((yylsp[-1])); - } -#line 5511 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 258: /* case_label: DEFAULT ':' */ -#line 2684 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.case_label) = new(state->linalloc) ast_case_label(NULL); - (yyval.case_label)->set_location((yylsp[0])); - } -#line 5520 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 259: /* case_label_list: case_label */ -#line 2692 "../src/compiler/glsl/glsl_parser.yy" - { - ast_case_label_list *labels = new(state->linalloc) ast_case_label_list(); - - labels->labels.push_tail(& (yyvsp[0].case_label)->link); - (yyval.case_label_list) = labels; - (yyval.case_label_list)->set_location((yylsp[0])); - } -#line 5532 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 260: /* case_label_list: case_label_list case_label */ -#line 2700 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.case_label_list) = (yyvsp[-1].case_label_list); - (yyval.case_label_list)->labels.push_tail(& (yyvsp[0].case_label)->link); - } -#line 5541 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 261: /* case_statement: case_label_list statement */ -#line 2708 "../src/compiler/glsl/glsl_parser.yy" - { - ast_case_statement *stmts = new(state->linalloc) ast_case_statement((yyvsp[-1].case_label_list)); - stmts->set_location((yylsp[0])); - - stmts->stmts.push_tail(& (yyvsp[0].node)->link); - (yyval.case_statement) = stmts; - } -#line 5553 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 262: /* case_statement: case_statement statement */ -#line 2716 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.case_statement) = (yyvsp[-1].case_statement); - (yyval.case_statement)->stmts.push_tail(& (yyvsp[0].node)->link); - } -#line 5562 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 263: /* case_statement_list: case_statement */ -#line 2724 "../src/compiler/glsl/glsl_parser.yy" - { - ast_case_statement_list *cases= new(state->linalloc) ast_case_statement_list(); - cases->set_location((yylsp[0])); - - cases->cases.push_tail(& (yyvsp[0].case_statement)->link); - (yyval.case_statement_list) = cases; - } -#line 5574 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 264: /* case_statement_list: case_statement_list case_statement */ -#line 2732 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.case_statement_list) = (yyvsp[-1].case_statement_list); - (yyval.case_statement_list)->cases.push_tail(& (yyvsp[0].case_statement)->link); - } -#line 5583 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 265: /* iteration_statement: WHILE '(' condition ')' statement_no_new_scope */ -#line 2740 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while, - NULL, (yyvsp[-2].node), NULL, (yyvsp[0].node)); - (yyval.node)->set_location_range((yylsp[-4]), (yylsp[-1])); - } -#line 5594 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 266: /* iteration_statement: DO statement_no_new_scope WHILE '(' expression ')' ';' */ -#line 2747 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while, - NULL, (yyvsp[-2].expression), NULL, (yyvsp[-5].node)); - (yyval.node)->set_location_range((yylsp[-6]), (yylsp[-1])); - } -#line 5605 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 267: /* iteration_statement: FOR '(' for_init_statement for_rest_statement ')' statement_no_new_scope */ -#line 2754 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for, - (yyvsp[-3].node), (yyvsp[-2].for_rest_statement).cond, (yyvsp[-2].for_rest_statement).rest, (yyvsp[0].node)); - (yyval.node)->set_location_range((yylsp[-5]), (yylsp[0])); - } -#line 5616 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 271: /* conditionopt: %empty */ -#line 2770 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = NULL; - } -#line 5624 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 272: /* for_rest_statement: conditionopt ';' */ -#line 2777 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.for_rest_statement).cond = (yyvsp[-1].node); - (yyval.for_rest_statement).rest = NULL; - } -#line 5633 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 273: /* for_rest_statement: conditionopt ';' expression */ -#line 2782 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.for_rest_statement).cond = (yyvsp[-2].node); - (yyval.for_rest_statement).rest = (yyvsp[0].expression); - } -#line 5642 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 274: /* jump_statement: CONTINUE ';' */ -#line 2791 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL); - (yyval.node)->set_location((yylsp[-1])); - } -#line 5652 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 275: /* jump_statement: BREAK ';' */ -#line 2797 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL); - (yyval.node)->set_location((yylsp[-1])); - } -#line 5662 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 276: /* jump_statement: RETURN ';' */ -#line 2803 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL); - (yyval.node)->set_location((yylsp[-1])); - } -#line 5672 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 277: /* jump_statement: RETURN expression ';' */ -#line 2809 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, (yyvsp[-1].expression)); - (yyval.node)->set_location_range((yylsp[-2]), (yylsp[-1])); - } -#line 5682 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 278: /* jump_statement: DISCARD ';' */ -#line 2815 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL); - (yyval.node)->set_location((yylsp[-1])); - } -#line 5692 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 279: /* demote_statement: DEMOTE ';' */ -#line 2824 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.node) = new(ctx) ast_demote_statement(); - (yyval.node)->set_location((yylsp[-1])); - } -#line 5702 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 280: /* external_declaration: function_definition */ -#line 2832 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = (yyvsp[0].function_definition); } -#line 5708 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 281: /* external_declaration: declaration */ -#line 2833 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = (yyvsp[0].node); } -#line 5714 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 282: /* external_declaration: pragma_statement */ -#line 2834 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = (yyvsp[0].node); } -#line 5720 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 283: /* external_declaration: layout_defaults */ -#line 2835 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = (yyvsp[0].node); } -#line 5726 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 284: /* external_declaration: ';' */ -#line 2836 "../src/compiler/glsl/glsl_parser.yy" - { (yyval.node) = NULL; } -#line 5732 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 285: /* function_definition: function_prototype compound_statement_no_new_scope */ -#line 2841 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - (yyval.function_definition) = new(ctx) ast_function_definition(); - (yyval.function_definition)->set_location_range((yylsp[-1]), (yylsp[0])); - (yyval.function_definition)->prototype = (yyvsp[-1].function); - (yyval.function_definition)->body = (yyvsp[0].compound_statement); - - state->symbols->pop_scope(); - } -#line 5746 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 286: /* interface_block: basic_interface_block */ -#line 2855 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = (yyvsp[0].interface_block); - } -#line 5754 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 287: /* interface_block: layout_qualifier interface_block */ -#line 2859 "../src/compiler/glsl/glsl_parser.yy" - { - ast_interface_block *block = (ast_interface_block *) (yyvsp[0].node); - - if (!(yyvsp[-1].type_qualifier).merge_qualifier(& (yylsp[-1]), state, block->layout, false, - block->layout.has_layout())) { - YYERROR; - } - - block->layout = (yyvsp[-1].type_qualifier); - - (yyval.node) = block; - } -#line 5771 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 288: /* interface_block: memory_qualifier interface_block */ -#line 2872 "../src/compiler/glsl/glsl_parser.yy" - { - ast_interface_block *block = (ast_interface_block *)(yyvsp[0].node); - - if (!block->default_layout.flags.q.buffer) { - _mesa_glsl_error(& (yylsp[-1]), state, - "memory qualifiers can only be used in the " - "declaration of shader storage blocks"); - } - if (!(yyvsp[-1].type_qualifier).merge_qualifier(& (yylsp[-1]), state, block->layout, false)) { - YYERROR; - } - block->layout = (yyvsp[-1].type_qualifier); - (yyval.node) = block; - } -#line 5790 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 289: /* basic_interface_block: interface_qualifier NEW_IDENTIFIER '{' member_list '}' instance_name_opt ';' */ -#line 2890 "../src/compiler/glsl/glsl_parser.yy" - { - ast_interface_block *const block = (yyvsp[-1].interface_block); - - if ((yyvsp[-6].type_qualifier).flags.q.uniform) { - block->default_layout = *state->default_uniform_qualifier; - } else if ((yyvsp[-6].type_qualifier).flags.q.buffer) { - block->default_layout = *state->default_shader_storage_qualifier; - } - block->block_name = (yyvsp[-5].identifier); - block->declarations.push_degenerate_list_at_head(& (yyvsp[-3].declarator_list)->link); - - _mesa_ast_process_interface_block(& (yylsp[-6]), state, block, (yyvsp[-6].type_qualifier)); - - (yyval.interface_block) = block; - } -#line 5810 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 290: /* interface_qualifier: IN_TOK */ -#line 2909 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.in = 1; - } -#line 5819 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 291: /* interface_qualifier: OUT_TOK */ -#line 2914 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.out = 1; - } -#line 5828 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 292: /* interface_qualifier: UNIFORM */ -#line 2919 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.uniform = 1; - } -#line 5837 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 293: /* interface_qualifier: BUFFER */ -#line 2924 "../src/compiler/glsl/glsl_parser.yy" - { - memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier))); - (yyval.type_qualifier).flags.q.buffer = 1; - } -#line 5846 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 294: /* interface_qualifier: auxiliary_storage_qualifier interface_qualifier */ -#line 2929 "../src/compiler/glsl/glsl_parser.yy" - { - if (!(yyvsp[-1].type_qualifier).flags.q.patch) { - _mesa_glsl_error(&(yylsp[-1]), state, "invalid interface qualifier"); - } - if ((yyvsp[0].type_qualifier).has_auxiliary_storage()) { - _mesa_glsl_error(&(yylsp[-1]), state, "duplicate patch qualifier"); - } - (yyval.type_qualifier) = (yyvsp[0].type_qualifier); - (yyval.type_qualifier).flags.q.patch = 1; - } -#line 5861 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 295: /* instance_name_opt: %empty */ -#line 2943 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.interface_block) = new(state->linalloc) ast_interface_block(NULL, NULL); - } -#line 5869 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 296: /* instance_name_opt: NEW_IDENTIFIER */ -#line 2947 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.interface_block) = new(state->linalloc) ast_interface_block((yyvsp[0].identifier), NULL); - (yyval.interface_block)->set_location((yylsp[0])); - } -#line 5878 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 297: /* instance_name_opt: NEW_IDENTIFIER array_specifier */ -#line 2952 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.interface_block) = new(state->linalloc) ast_interface_block((yyvsp[-1].identifier), (yyvsp[0].array_specifier)); - (yyval.interface_block)->set_location_range((yylsp[-1]), (yylsp[0])); - } -#line 5887 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 298: /* member_list: member_declaration */ -#line 2960 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.declarator_list) = (yyvsp[0].declarator_list); - (yyvsp[0].declarator_list)->link.self_link(); - } -#line 5896 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 299: /* member_list: member_declaration member_list */ -#line 2965 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.declarator_list) = (yyvsp[-1].declarator_list); - (yyvsp[0].declarator_list)->link.insert_before(& (yyval.declarator_list)->link); - } -#line 5905 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 300: /* member_declaration: fully_specified_type struct_declarator_list ';' */ -#line 2973 "../src/compiler/glsl/glsl_parser.yy" - { - void *ctx = state->linalloc; - ast_fully_specified_type *type = (yyvsp[-2].fully_specified_type); - type->set_location((yylsp[-2])); - - if (type->qualifier.flags.q.attribute) { - _mesa_glsl_error(& (yylsp[-2]), state, - "keyword 'attribute' cannot be used with " - "interface block member"); - } else if (type->qualifier.flags.q.varying) { - _mesa_glsl_error(& (yylsp[-2]), state, - "keyword 'varying' cannot be used with " - "interface block member"); - } - - (yyval.declarator_list) = new(ctx) ast_declarator_list(type); - (yyval.declarator_list)->set_location((yylsp[-1])); - - (yyval.declarator_list)->declarations.push_degenerate_list_at_head(& (yyvsp[-1].declaration)->link); - } -#line 5930 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 301: /* layout_uniform_defaults: layout_qualifier layout_uniform_defaults */ -#line 2997 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) { - YYERROR; - } - } -#line 5941 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 303: /* layout_buffer_defaults: layout_qualifier layout_buffer_defaults */ -#line 3008 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) { - YYERROR; - } - } -#line 5952 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 305: /* layout_in_defaults: layout_qualifier layout_in_defaults */ -#line 3019 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) { - YYERROR; - } - if (!(yyval.type_qualifier).validate_in_qualifier(& (yylsp[-1]), state)) { - YYERROR; - } - } -#line 5966 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 306: /* layout_in_defaults: layout_qualifier IN_TOK ';' */ -#line 3029 "../src/compiler/glsl/glsl_parser.yy" - { - if (!(yyvsp[-2].type_qualifier).validate_in_qualifier(& (yylsp[-2]), state)) { - YYERROR; - } - } -#line 5976 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 307: /* layout_out_defaults: layout_qualifier layout_out_defaults */ -#line 3038 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.type_qualifier) = (yyvsp[-1].type_qualifier); - if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) { - YYERROR; - } - if (!(yyval.type_qualifier).validate_out_qualifier(& (yylsp[-1]), state)) { - YYERROR; - } - } -#line 5990 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 308: /* layout_out_defaults: layout_qualifier OUT_TOK ';' */ -#line 3048 "../src/compiler/glsl/glsl_parser.yy" - { - if (!(yyvsp[-2].type_qualifier).validate_out_qualifier(& (yylsp[-2]), state)) { - YYERROR; - } - } -#line 6000 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 309: /* layout_defaults: layout_uniform_defaults */ -#line 3057 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = NULL; - if (!state->default_uniform_qualifier-> - merge_qualifier(& (yylsp[0]), state, (yyvsp[0].type_qualifier), false)) { - YYERROR; - } - if (!state->default_uniform_qualifier-> - push_to_global(& (yylsp[0]), state)) { - YYERROR; - } - } -#line 6016 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 310: /* layout_defaults: layout_buffer_defaults */ -#line 3069 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = NULL; - if (!state->default_shader_storage_qualifier-> - merge_qualifier(& (yylsp[0]), state, (yyvsp[0].type_qualifier), false)) { - YYERROR; - } - if (!state->default_shader_storage_qualifier-> - push_to_global(& (yylsp[0]), state)) { - YYERROR; - } - - /* From the GLSL 4.50 spec, section 4.4.5: - * - * "It is a compile-time error to specify the binding identifier for - * the global scope or for block member declarations." - */ - if (state->default_shader_storage_qualifier->flags.q.explicit_binding) { - _mesa_glsl_error(& (yylsp[0]), state, - "binding qualifier cannot be set for default layout"); - } - } -#line 6042 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 311: /* layout_defaults: layout_in_defaults */ -#line 3091 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = NULL; - if (!(yyvsp[0].type_qualifier).merge_into_in_qualifier(& (yylsp[0]), state, (yyval.node))) { - YYERROR; - } - if (!state->in_qualifier->push_to_global(& (yylsp[0]), state)) { - YYERROR; - } - } -#line 6056 "src/compiler/glsl/glsl_parser.cpp" - break; - - case 312: /* layout_defaults: layout_out_defaults */ -#line 3101 "../src/compiler/glsl/glsl_parser.yy" - { - (yyval.node) = NULL; - if (!(yyvsp[0].type_qualifier).merge_into_out_qualifier(& (yylsp[0]), state, (yyval.node))) { - YYERROR; - } - if (!state->out_qualifier->push_to_global(& (yylsp[0]), state)) { - YYERROR; - } - - (void)yynerrs; - } -#line 6072 "src/compiler/glsl/glsl_parser.cpp" - break; - - -#line 6076 "src/compiler/glsl/glsl_parser.cpp" - - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - - *++yyvsp = yyval; - *++yylsp = yyloc; - - /* Now 'shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } - - goto yynewstate; - - -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; - { - yypcontext_t yyctx - = {yyssp, yytoken, &yylloc}; - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == -1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = YY_CAST (char *, - YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); - if (yymsg) - { - yysyntax_error_status - = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); - yymsgp = yymsg; - } - else - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = YYENOMEM; - } - } - yyerror (&yylloc, state, yymsgp); - if (yysyntax_error_status == YYENOMEM) - YYNOMEM; - } - } - - yyerror_range[1] = yylloc; - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval, &yylloc, state); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; - ++yynerrs; - - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - /* Pop stack until we find a state that shifts the error token. */ - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYSYMBOL_YYerror; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - yyerror_range[1] = *yylsp; - yydestruct ("Error: popping", - YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, state); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - yyerror_range[2] = yylloc; - ++yylsp; - YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturnlab; - - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturnlab; - - -/*-----------------------------------------------------------. -| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | -`-----------------------------------------------------------*/ -yyexhaustedlab: - yyerror (&yylloc, state, YY_("memory exhausted")); - yyresult = 2; - goto yyreturnlab; - - -/*----------------------------------------------------------. -| yyreturnlab -- parsing is finished, clean up and return. | -`----------------------------------------------------------*/ -yyreturnlab: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, &yylloc, state); - } - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, state); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - return yyresult; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.h deleted file mode 100644 index 6c70bf0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.h +++ /dev/null @@ -1,270 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ - -/* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - -#ifndef YY__MESA_GLSL_SRC_COMPILER_GLSL_GLSL_PARSER_H_INCLUDED -# define YY__MESA_GLSL_SRC_COMPILER_GLSL_GLSL_PARSER_H_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int _mesa_glsl_debug; -#endif - -/* Token kinds. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - YYEMPTY = -2, - YYEOF = 0, /* "end of file" */ - YYerror = 256, /* error */ - YYUNDEF = 257, /* "invalid token" */ - ATTRIBUTE = 258, /* ATTRIBUTE */ - CONST_TOK = 259, /* CONST_TOK */ - BASIC_TYPE_TOK = 260, /* BASIC_TYPE_TOK */ - BREAK = 261, /* BREAK */ - BUFFER = 262, /* BUFFER */ - CONTINUE = 263, /* CONTINUE */ - DO = 264, /* DO */ - ELSE = 265, /* ELSE */ - FOR = 266, /* FOR */ - IF = 267, /* IF */ - DEMOTE = 268, /* DEMOTE */ - DISCARD = 269, /* DISCARD */ - RETURN = 270, /* RETURN */ - SWITCH = 271, /* SWITCH */ - CASE = 272, /* CASE */ - DEFAULT = 273, /* DEFAULT */ - CENTROID = 274, /* CENTROID */ - IN_TOK = 275, /* IN_TOK */ - OUT_TOK = 276, /* OUT_TOK */ - INOUT_TOK = 277, /* INOUT_TOK */ - UNIFORM = 278, /* UNIFORM */ - VARYING = 279, /* VARYING */ - SAMPLE = 280, /* SAMPLE */ - NOPERSPECTIVE = 281, /* NOPERSPECTIVE */ - FLAT = 282, /* FLAT */ - SMOOTH = 283, /* SMOOTH */ - IMAGE1DSHADOW = 284, /* IMAGE1DSHADOW */ - IMAGE2DSHADOW = 285, /* IMAGE2DSHADOW */ - IMAGE1DARRAYSHADOW = 286, /* IMAGE1DARRAYSHADOW */ - IMAGE2DARRAYSHADOW = 287, /* IMAGE2DARRAYSHADOW */ - COHERENT = 288, /* COHERENT */ - VOLATILE = 289, /* VOLATILE */ - RESTRICT = 290, /* RESTRICT */ - READONLY = 291, /* READONLY */ - WRITEONLY = 292, /* WRITEONLY */ - SHARED = 293, /* SHARED */ - STRUCT = 294, /* STRUCT */ - VOID_TOK = 295, /* VOID_TOK */ - WHILE = 296, /* WHILE */ - IDENTIFIER = 297, /* IDENTIFIER */ - TYPE_IDENTIFIER = 298, /* TYPE_IDENTIFIER */ - NEW_IDENTIFIER = 299, /* NEW_IDENTIFIER */ - FLOATCONSTANT = 300, /* FLOATCONSTANT */ - DOUBLECONSTANT = 301, /* DOUBLECONSTANT */ - INTCONSTANT = 302, /* INTCONSTANT */ - UINTCONSTANT = 303, /* UINTCONSTANT */ - BOOLCONSTANT = 304, /* BOOLCONSTANT */ - INT64CONSTANT = 305, /* INT64CONSTANT */ - UINT64CONSTANT = 306, /* UINT64CONSTANT */ - FIELD_SELECTION = 307, /* FIELD_SELECTION */ - LEFT_OP = 308, /* LEFT_OP */ - RIGHT_OP = 309, /* RIGHT_OP */ - INC_OP = 310, /* INC_OP */ - DEC_OP = 311, /* DEC_OP */ - LE_OP = 312, /* LE_OP */ - GE_OP = 313, /* GE_OP */ - EQ_OP = 314, /* EQ_OP */ - NE_OP = 315, /* NE_OP */ - AND_OP = 316, /* AND_OP */ - OR_OP = 317, /* OR_OP */ - XOR_OP = 318, /* XOR_OP */ - MUL_ASSIGN = 319, /* MUL_ASSIGN */ - DIV_ASSIGN = 320, /* DIV_ASSIGN */ - ADD_ASSIGN = 321, /* ADD_ASSIGN */ - MOD_ASSIGN = 322, /* MOD_ASSIGN */ - LEFT_ASSIGN = 323, /* LEFT_ASSIGN */ - RIGHT_ASSIGN = 324, /* RIGHT_ASSIGN */ - AND_ASSIGN = 325, /* AND_ASSIGN */ - XOR_ASSIGN = 326, /* XOR_ASSIGN */ - OR_ASSIGN = 327, /* OR_ASSIGN */ - SUB_ASSIGN = 328, /* SUB_ASSIGN */ - INVARIANT = 329, /* INVARIANT */ - PRECISE = 330, /* PRECISE */ - LOWP = 331, /* LOWP */ - MEDIUMP = 332, /* MEDIUMP */ - HIGHP = 333, /* HIGHP */ - SUPERP = 334, /* SUPERP */ - PRECISION = 335, /* PRECISION */ - VERSION_TOK = 336, /* VERSION_TOK */ - EXTENSION = 337, /* EXTENSION */ - LINE = 338, /* LINE */ - COLON = 339, /* COLON */ - EOL = 340, /* EOL */ - INTERFACE_TOK = 341, /* INTERFACE_TOK */ - OUTPUT = 342, /* OUTPUT */ - PRAGMA_DEBUG_ON = 343, /* PRAGMA_DEBUG_ON */ - PRAGMA_DEBUG_OFF = 344, /* PRAGMA_DEBUG_OFF */ - PRAGMA_OPTIMIZE_ON = 345, /* PRAGMA_OPTIMIZE_ON */ - PRAGMA_OPTIMIZE_OFF = 346, /* PRAGMA_OPTIMIZE_OFF */ - PRAGMA_WARNING_ON = 347, /* PRAGMA_WARNING_ON */ - PRAGMA_WARNING_OFF = 348, /* PRAGMA_WARNING_OFF */ - PRAGMA_INVARIANT_ALL = 349, /* PRAGMA_INVARIANT_ALL */ - LAYOUT_TOK = 350, /* LAYOUT_TOK */ - DOT_TOK = 351, /* DOT_TOK */ - ASM = 352, /* ASM */ - CLASS = 353, /* CLASS */ - UNION = 354, /* UNION */ - ENUM = 355, /* ENUM */ - TYPEDEF = 356, /* TYPEDEF */ - TEMPLATE = 357, /* TEMPLATE */ - THIS = 358, /* THIS */ - PACKED_TOK = 359, /* PACKED_TOK */ - GOTO = 360, /* GOTO */ - INLINE_TOK = 361, /* INLINE_TOK */ - NOINLINE = 362, /* NOINLINE */ - PUBLIC_TOK = 363, /* PUBLIC_TOK */ - STATIC = 364, /* STATIC */ - EXTERN = 365, /* EXTERN */ - EXTERNAL = 366, /* EXTERNAL */ - LONG_TOK = 367, /* LONG_TOK */ - SHORT_TOK = 368, /* SHORT_TOK */ - HALF = 369, /* HALF */ - FIXED_TOK = 370, /* FIXED_TOK */ - UNSIGNED = 371, /* UNSIGNED */ - INPUT_TOK = 372, /* INPUT_TOK */ - HVEC2 = 373, /* HVEC2 */ - HVEC3 = 374, /* HVEC3 */ - HVEC4 = 375, /* HVEC4 */ - FVEC2 = 376, /* FVEC2 */ - FVEC3 = 377, /* FVEC3 */ - FVEC4 = 378, /* FVEC4 */ - SAMPLER3DRECT = 379, /* SAMPLER3DRECT */ - SIZEOF = 380, /* SIZEOF */ - CAST = 381, /* CAST */ - NAMESPACE = 382, /* NAMESPACE */ - USING = 383, /* USING */ - RESOURCE = 384, /* RESOURCE */ - PATCH = 385, /* PATCH */ - SUBROUTINE = 386, /* SUBROUTINE */ - ERROR_TOK = 387, /* ERROR_TOK */ - COMMON = 388, /* COMMON */ - PARTITION = 389, /* PARTITION */ - ACTIVE = 390, /* ACTIVE */ - FILTER = 391, /* FILTER */ - ROW_MAJOR = 392, /* ROW_MAJOR */ - THEN = 393 /* THEN */ - }; - typedef enum yytokentype yytoken_kind_t; -#endif - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE -{ -#line 101 "../src/compiler/glsl/glsl_parser.yy" - - int n; - int64_t n64; - float real; - double dreal; - const char *identifier; - - struct ast_type_qualifier type_qualifier; - - ast_node *node; - ast_type_specifier *type_specifier; - ast_array_specifier *array_specifier; - ast_fully_specified_type *fully_specified_type; - ast_function *function; - ast_parameter_declarator *parameter_declarator; - ast_function_definition *function_definition; - ast_compound_statement *compound_statement; - ast_expression *expression; - ast_declarator_list *declarator_list; - ast_struct_specifier *struct_specifier; - ast_declaration *declaration; - ast_switch_body *switch_body; - ast_case_label *case_label; - ast_case_label_list *case_label_list; - ast_case_statement *case_statement; - ast_case_statement_list *case_statement_list; - ast_interface_block *interface_block; - ast_subroutine_list *subroutine_list; - struct { - ast_node *cond; - ast_expression *rest; - } for_rest_statement; - - struct { - ast_node *then_statement; - ast_node *else_statement; - } selection_rest_statement; - - const glsl_type *type; - -#line 243 "src/compiler/glsl/glsl_parser.h" - -}; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - -/* Location type. */ -#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED -typedef struct YYLTYPE YYLTYPE; -struct YYLTYPE -{ - int first_line; - int first_column; - int last_line; - int last_column; -}; -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 -#endif - - - - -int _mesa_glsl_parse (struct _mesa_glsl_parse_state *state); - - -#endif /* !YY__MESA_GLSL_SRC_COMPILER_GLSL_GLSL_PARSER_H_INCLUDED */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.yy b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.yy deleted file mode 100644 index 1371ecd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser.yy +++ /dev/null @@ -1,3112 +0,0 @@ -%{ -/* - * Copyright © 2008, 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include -#include -#ifndef _MSC_VER -#include -#endif -#include - -#include "ast.h" -#include "glsl_parser_extras.h" -#include "compiler/glsl_types.h" -#include "util/u_string.h" -#include "util/format/u_format.h" -#include "main/consts_exts.h" - -#ifdef _MSC_VER -#pragma warning( disable : 4065 ) // switch statement contains 'default' but no 'case' labels -#endif - -#undef yyerror - -static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg) -{ - _mesa_glsl_error(loc, st, "%s", msg); -} - -static int -_mesa_glsl_lex(YYSTYPE *val, YYLTYPE *loc, _mesa_glsl_parse_state *state) -{ - return _mesa_glsl_lexer_lex(val, loc, state->scanner); -} - -static bool match_layout_qualifier(const char *s1, const char *s2, - _mesa_glsl_parse_state *state) -{ - /* From the GLSL 1.50 spec, section 4.3.8 (Layout Qualifiers): - * - * "The tokens in any layout-qualifier-id-list ... are not case - * sensitive, unless explicitly noted otherwise." - * - * The text "unless explicitly noted otherwise" appears to be - * vacuous--no desktop GLSL spec (up through GLSL 4.40) notes - * otherwise. - * - * However, the GLSL ES 3.00 spec says, in section 4.3.8 (Layout - * Qualifiers): - * - * "As for other identifiers, they are case sensitive." - * - * So we need to do a case-sensitive or a case-insensitive match, - * depending on whether we are compiling for GLSL ES. - */ - if (state->es_shader) - return strcmp(s1, s2); - else - return strcasecmp(s1, s2); -} -%} - -%expect 0 - -%pure-parser -%error-verbose - -%locations -%initial-action { - @$.first_line = 1; - @$.first_column = 1; - @$.last_line = 1; - @$.last_column = 1; - @$.source = 0; - @$.path = NULL; -} - -%lex-param {struct _mesa_glsl_parse_state *state} -%parse-param {struct _mesa_glsl_parse_state *state} - -%union { - int n; - int64_t n64; - float real; - double dreal; - const char *identifier; - - struct ast_type_qualifier type_qualifier; - - ast_node *node; - ast_type_specifier *type_specifier; - ast_array_specifier *array_specifier; - ast_fully_specified_type *fully_specified_type; - ast_function *function; - ast_parameter_declarator *parameter_declarator; - ast_function_definition *function_definition; - ast_compound_statement *compound_statement; - ast_expression *expression; - ast_declarator_list *declarator_list; - ast_struct_specifier *struct_specifier; - ast_declaration *declaration; - ast_switch_body *switch_body; - ast_case_label *case_label; - ast_case_label_list *case_label_list; - ast_case_statement *case_statement; - ast_case_statement_list *case_statement_list; - ast_interface_block *interface_block; - ast_subroutine_list *subroutine_list; - struct { - ast_node *cond; - ast_expression *rest; - } for_rest_statement; - - struct { - ast_node *then_statement; - ast_node *else_statement; - } selection_rest_statement; - - const glsl_type *type; -} - -%token ATTRIBUTE CONST_TOK -%token BASIC_TYPE_TOK -%token BREAK BUFFER CONTINUE DO ELSE FOR IF DEMOTE DISCARD RETURN SWITCH CASE DEFAULT -%token CENTROID IN_TOK OUT_TOK INOUT_TOK UNIFORM VARYING SAMPLE -%token NOPERSPECTIVE FLAT SMOOTH -%token IMAGE1DSHADOW IMAGE2DSHADOW IMAGE1DARRAYSHADOW IMAGE2DARRAYSHADOW -%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY -%token SHARED -%token STRUCT VOID_TOK WHILE -%token IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER -%type any_identifier -%type instance_name_opt -%token FLOATCONSTANT -%token DOUBLECONSTANT -%token INTCONSTANT UINTCONSTANT BOOLCONSTANT -%token INT64CONSTANT UINT64CONSTANT -%token FIELD_SELECTION -%token LEFT_OP RIGHT_OP -%token INC_OP DEC_OP LE_OP GE_OP EQ_OP NE_OP -%token AND_OP OR_OP XOR_OP MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN -%token MOD_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN XOR_ASSIGN OR_ASSIGN -%token SUB_ASSIGN -%token INVARIANT PRECISE -%token LOWP MEDIUMP HIGHP SUPERP PRECISION - -%token VERSION_TOK EXTENSION LINE COLON EOL INTERFACE_TOK OUTPUT -%token PRAGMA_DEBUG_ON PRAGMA_DEBUG_OFF -%token PRAGMA_OPTIMIZE_ON PRAGMA_OPTIMIZE_OFF -%token PRAGMA_WARNING_ON PRAGMA_WARNING_OFF -%token PRAGMA_INVARIANT_ALL -%token LAYOUT_TOK -%token DOT_TOK - /* Reserved words that are not actually used in the grammar. - */ -%token ASM CLASS UNION ENUM TYPEDEF TEMPLATE THIS PACKED_TOK GOTO -%token INLINE_TOK NOINLINE PUBLIC_TOK STATIC EXTERN EXTERNAL -%token LONG_TOK SHORT_TOK HALF FIXED_TOK UNSIGNED INPUT_TOK -%token HVEC2 HVEC3 HVEC4 FVEC2 FVEC3 FVEC4 -%token SAMPLER3DRECT -%token SIZEOF CAST NAMESPACE USING -%token RESOURCE PATCH -%token SUBROUTINE - -%token ERROR_TOK - -%token COMMON PARTITION ACTIVE FILTER ROW_MAJOR - -%type variable_identifier -%type statement -%type statement_list -%type simple_statement -%type precision_qualifier -%type type_qualifier -%type auxiliary_storage_qualifier -%type storage_qualifier -%type interpolation_qualifier -%type layout_qualifier -%type layout_qualifier_id_list layout_qualifier_id -%type interface_block_layout_qualifier -%type memory_qualifier -%type subroutine_qualifier -%type subroutine_type_list -%type interface_qualifier -%type type_specifier -%type type_specifier_nonarray -%type array_specifier -%type basic_type_specifier_nonarray -%type fully_specified_type -%type function_prototype -%type function_header -%type function_header_with_parameters -%type function_declarator -%type parameter_declarator -%type parameter_declaration -%type parameter_qualifier -%type parameter_direction_qualifier -%type parameter_type_specifier -%type function_definition -%type compound_statement_no_new_scope -%type compound_statement -%type statement_no_new_scope -%type expression_statement -%type expression -%type primary_expression -%type assignment_expression -%type conditional_expression -%type logical_or_expression -%type logical_xor_expression -%type logical_and_expression -%type inclusive_or_expression -%type exclusive_or_expression -%type and_expression -%type equality_expression -%type relational_expression -%type shift_expression -%type additive_expression -%type multiplicative_expression -%type unary_expression -%type constant_expression -%type integer_expression -%type postfix_expression -%type function_call_header_with_parameters -%type function_call_header_no_parameters -%type function_call_header -%type function_call_generic -%type function_call_or_method -%type function_call -%type assignment_operator -%type unary_operator -%type function_identifier -%type external_declaration -%type pragma_statement -%type init_declarator_list -%type single_declaration -%type initializer -%type initializer_list -%type declaration -%type declaration_statement -%type jump_statement -%type demote_statement -%type interface_block -%type basic_interface_block -%type struct_specifier -%type struct_declaration_list -%type struct_declaration -%type struct_declarator -%type struct_declarator_list -%type member_list -%type member_declaration -%type selection_statement -%type selection_rest_statement -%type switch_statement -%type switch_body -%type case_label_list -%type case_label -%type case_statement -%type case_statement_list -%type iteration_statement -%type condition -%type conditionopt -%type for_init_statement -%type for_rest_statement -%type layout_defaults -%type layout_uniform_defaults -%type layout_buffer_defaults -%type layout_in_defaults -%type layout_out_defaults - -%right THEN ELSE -%% - -translation_unit: - version_statement extension_statement_list - { - _mesa_glsl_initialize_types(state); - } - external_declaration_list - { - delete state->symbols; - state->symbols = new(ralloc_parent(state)) glsl_symbol_table; - if (state->es_shader) { - if (state->stage == MESA_SHADER_FRAGMENT) { - state->symbols->add_default_precision_qualifier("int", ast_precision_medium); - } else { - state->symbols->add_default_precision_qualifier("float", ast_precision_high); - state->symbols->add_default_precision_qualifier("int", ast_precision_high); - } - state->symbols->add_default_precision_qualifier("sampler2D", ast_precision_low); - state->symbols->add_default_precision_qualifier("samplerExternalOES", ast_precision_low); - state->symbols->add_default_precision_qualifier("samplerCube", ast_precision_low); - state->symbols->add_default_precision_qualifier("atomic_uint", ast_precision_high); - } - _mesa_glsl_initialize_types(state); - } - ; - -version_statement: - /* blank - no #version specified: defaults are already set */ - | VERSION_TOK INTCONSTANT EOL - { - state->process_version_directive(&@2, $2, NULL); - if (state->error) { - YYERROR; - } - } - | VERSION_TOK INTCONSTANT any_identifier EOL - { - state->process_version_directive(&@2, $2, $3); - if (state->error) { - YYERROR; - } - } - ; - -pragma_statement: - PRAGMA_DEBUG_ON EOL { $$ = NULL; } - | PRAGMA_DEBUG_OFF EOL { $$ = NULL; } - | PRAGMA_OPTIMIZE_ON EOL { $$ = NULL; } - | PRAGMA_OPTIMIZE_OFF EOL { $$ = NULL; } - | PRAGMA_INVARIANT_ALL EOL - { - /* Pragma invariant(all) cannot be used in a fragment shader. - * - * Page 27 of the GLSL 1.20 spec, Page 53 of the GLSL ES 3.00 spec: - * - * "It is an error to use this pragma in a fragment shader." - */ - if (state->is_version(120, 300) && - state->stage == MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& @1, state, - "pragma `invariant(all)' cannot be used " - "in a fragment shader."); - } else if (!state->is_version(120, 100)) { - _mesa_glsl_warning(& @1, state, - "pragma `invariant(all)' not supported in %s " - "(GLSL ES 1.00 or GLSL 1.20 required)", - state->get_version_string()); - } else { - state->all_invariant = true; - } - - $$ = NULL; - } - | PRAGMA_WARNING_ON EOL - { - void *mem_ctx = state->linalloc; - $$ = new(mem_ctx) ast_warnings_toggle(true); - } - | PRAGMA_WARNING_OFF EOL - { - void *mem_ctx = state->linalloc; - $$ = new(mem_ctx) ast_warnings_toggle(false); - } - ; - -extension_statement_list: - - | extension_statement_list extension_statement - ; - -any_identifier: - IDENTIFIER - | TYPE_IDENTIFIER - | NEW_IDENTIFIER - ; - -extension_statement: - EXTENSION any_identifier COLON any_identifier EOL - { - if (!_mesa_glsl_process_extension($2, & @2, $4, & @4, state)) { - YYERROR; - } - } - ; - -external_declaration_list: - external_declaration - { - /* FINISHME: The NULL test is required because pragmas are set to - * FINISHME: NULL. (See production rule for external_declaration.) - */ - if ($1 != NULL) - state->translation_unit.push_tail(& $1->link); - } - | external_declaration_list external_declaration - { - /* FINISHME: The NULL test is required because pragmas are set to - * FINISHME: NULL. (See production rule for external_declaration.) - */ - if ($2 != NULL) - state->translation_unit.push_tail(& $2->link); - } - | external_declaration_list extension_statement { - if (!state->allow_extension_directive_midshader) { - _mesa_glsl_error(& @2, state, - "#extension directive is not allowed " - "in the middle of a shader"); - YYERROR; - } - } - ; - -variable_identifier: - IDENTIFIER - | NEW_IDENTIFIER - ; - -primary_expression: - variable_identifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.identifier = $1; - } - | INTCONSTANT - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.int_constant = $1; - } - | UINTCONSTANT - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.uint_constant = $1; - } - | INT64CONSTANT - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_int64_constant, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.int64_constant = $1; - } - | UINT64CONSTANT - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_uint64_constant, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.uint64_constant = $1; - } - | FLOATCONSTANT - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.float_constant = $1; - } - | DOUBLECONSTANT - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_double_constant, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.double_constant = $1; - } - | BOOLCONSTANT - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL); - $$->set_location(@1); - $$->primary_expression.bool_constant = $1; - } - | '(' expression ')' - { - $$ = $2; - } - ; - -postfix_expression: - primary_expression - | postfix_expression '[' integer_expression ']' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_array_index, $1, $3, NULL); - $$->set_location_range(@1, @4); - } - | function_call - { - $$ = $1; - } - | postfix_expression DOT_TOK FIELD_SELECTION - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_field_selection, $1, NULL, NULL); - $$->set_location_range(@1, @3); - $$->primary_expression.identifier = $3; - } - | postfix_expression INC_OP - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_post_inc, $1, NULL, NULL); - $$->set_location_range(@1, @2); - } - | postfix_expression DEC_OP - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_post_dec, $1, NULL, NULL); - $$->set_location_range(@1, @2); - } - ; - -integer_expression: - expression - ; - -function_call: - function_call_or_method - ; - -function_call_or_method: - function_call_generic - ; - -function_call_generic: - function_call_header_with_parameters ')' - | function_call_header_no_parameters ')' - ; - -function_call_header_no_parameters: - function_call_header VOID_TOK - | function_call_header - ; - -function_call_header_with_parameters: - function_call_header assignment_expression - { - $$ = $1; - $$->set_location(@1); - $$->expressions.push_tail(& $2->link); - } - | function_call_header_with_parameters ',' assignment_expression - { - $$ = $1; - $$->set_location(@1); - $$->expressions.push_tail(& $3->link); - } - ; - - // Grammar Note: Constructors look like functions, but lexical - // analysis recognized most of them as keywords. They are now - // recognized through "type_specifier". -function_call_header: - function_identifier '(' - ; - -function_identifier: - type_specifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_function_expression($1); - $$->set_location(@1); - } - | postfix_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_function_expression($1); - $$->set_location(@1); - } - ; - - // Grammar Note: Constructors look like methods, but lexical - // analysis recognized most of them as keywords. They are now - // recognized through "type_specifier". - - // Grammar Note: No traditional style type casts. -unary_expression: - postfix_expression - | INC_OP unary_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_pre_inc, $2, NULL, NULL); - $$->set_location(@1); - } - | DEC_OP unary_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_pre_dec, $2, NULL, NULL); - $$->set_location(@1); - } - | unary_operator unary_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression($1, $2, NULL, NULL); - $$->set_location_range(@1, @2); - } - ; - - // Grammar Note: No '*' or '&' unary ops. Pointers are not supported. -unary_operator: - '+' { $$ = ast_plus; } - | '-' { $$ = ast_neg; } - | '!' { $$ = ast_logic_not; } - | '~' { $$ = ast_bit_not; } - ; - -multiplicative_expression: - unary_expression - | multiplicative_expression '*' unary_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_mul, $1, $3); - $$->set_location_range(@1, @3); - } - | multiplicative_expression '/' unary_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_div, $1, $3); - $$->set_location_range(@1, @3); - } - | multiplicative_expression '%' unary_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_mod, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -additive_expression: - multiplicative_expression - | additive_expression '+' multiplicative_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_add, $1, $3); - $$->set_location_range(@1, @3); - } - | additive_expression '-' multiplicative_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_sub, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -shift_expression: - additive_expression - | shift_expression LEFT_OP additive_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_lshift, $1, $3); - $$->set_location_range(@1, @3); - } - | shift_expression RIGHT_OP additive_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_rshift, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -relational_expression: - shift_expression - | relational_expression '<' shift_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_less, $1, $3); - $$->set_location_range(@1, @3); - } - | relational_expression '>' shift_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_greater, $1, $3); - $$->set_location_range(@1, @3); - } - | relational_expression LE_OP shift_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_lequal, $1, $3); - $$->set_location_range(@1, @3); - } - | relational_expression GE_OP shift_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_gequal, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -equality_expression: - relational_expression - | equality_expression EQ_OP relational_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_equal, $1, $3); - $$->set_location_range(@1, @3); - } - | equality_expression NE_OP relational_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_nequal, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -and_expression: - equality_expression - | and_expression '&' equality_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_bit_and, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -exclusive_or_expression: - and_expression - | exclusive_or_expression '^' and_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_bit_xor, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -inclusive_or_expression: - exclusive_or_expression - | inclusive_or_expression '|' exclusive_or_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_bit_or, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -logical_and_expression: - inclusive_or_expression - | logical_and_expression AND_OP inclusive_or_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_logic_and, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -logical_xor_expression: - logical_and_expression - | logical_xor_expression XOR_OP logical_and_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_logic_xor, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -logical_or_expression: - logical_xor_expression - | logical_or_expression OR_OP logical_xor_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_bin(ast_logic_or, $1, $3); - $$->set_location_range(@1, @3); - } - ; - -conditional_expression: - logical_or_expression - | logical_or_expression '?' expression ':' assignment_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression(ast_conditional, $1, $3, $5); - $$->set_location_range(@1, @5); - } - ; - -assignment_expression: - conditional_expression - | unary_expression assignment_operator assignment_expression - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression($2, $1, $3, NULL); - $$->set_location_range(@1, @3); - } - ; - -assignment_operator: - '=' { $$ = ast_assign; } - | MUL_ASSIGN { $$ = ast_mul_assign; } - | DIV_ASSIGN { $$ = ast_div_assign; } - | MOD_ASSIGN { $$ = ast_mod_assign; } - | ADD_ASSIGN { $$ = ast_add_assign; } - | SUB_ASSIGN { $$ = ast_sub_assign; } - | LEFT_ASSIGN { $$ = ast_ls_assign; } - | RIGHT_ASSIGN { $$ = ast_rs_assign; } - | AND_ASSIGN { $$ = ast_and_assign; } - | XOR_ASSIGN { $$ = ast_xor_assign; } - | OR_ASSIGN { $$ = ast_or_assign; } - ; - -expression: - assignment_expression - { - $$ = $1; - } - | expression ',' assignment_expression - { - void *ctx = state->linalloc; - if ($1->oper != ast_sequence) { - $$ = new(ctx) ast_expression(ast_sequence, NULL, NULL, NULL); - $$->set_location_range(@1, @3); - $$->expressions.push_tail(& $1->link); - } else { - $$ = $1; - } - - $$->expressions.push_tail(& $3->link); - } - ; - -constant_expression: - conditional_expression - ; - -declaration: - function_prototype ';' - { - state->symbols->pop_scope(); - $$ = $1; - } - | init_declarator_list ';' - { - $$ = $1; - } - | PRECISION precision_qualifier type_specifier ';' - { - $3->default_precision = $2; - $$ = $3; - } - | interface_block - { - ast_interface_block *block = (ast_interface_block *) $1; - if (block->layout.has_layout() || block->layout.has_memory()) { - if (!block->default_layout.merge_qualifier(& @1, state, block->layout, false)) { - YYERROR; - } - } - block->layout = block->default_layout; - if (!block->layout.push_to_global(& @1, state)) { - YYERROR; - } - $$ = $1; - } - ; - -function_prototype: - function_declarator ')' - ; - -function_declarator: - function_header - | function_header_with_parameters - ; - -function_header_with_parameters: - function_header parameter_declaration - { - $$ = $1; - $$->parameters.push_tail(& $2->link); - } - | function_header_with_parameters ',' parameter_declaration - { - $$ = $1; - $$->parameters.push_tail(& $3->link); - } - ; - -function_header: - fully_specified_type variable_identifier '(' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_function(); - $$->set_location(@2); - $$->return_type = $1; - $$->identifier = $2; - - if ($1->qualifier.is_subroutine_decl()) { - /* add type for IDENTIFIER search */ - state->symbols->add_type($2, glsl_type::get_subroutine_instance($2)); - } else - state->symbols->add_function(new(state) ir_function($2)); - state->symbols->push_scope(); - } - ; - -parameter_declarator: - type_specifier any_identifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_parameter_declarator(); - $$->set_location_range(@1, @2); - $$->type = new(ctx) ast_fully_specified_type(); - $$->type->set_location(@1); - $$->type->specifier = $1; - $$->identifier = $2; - state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); - } - | layout_qualifier type_specifier any_identifier - { - _mesa_glsl_error(&@1, state, "is is not allowed on function parameter"); - YYERROR; - } - | type_specifier any_identifier array_specifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_parameter_declarator(); - $$->set_location_range(@1, @3); - $$->type = new(ctx) ast_fully_specified_type(); - $$->type->set_location(@1); - $$->type->specifier = $1; - $$->identifier = $2; - $$->array_specifier = $3; - state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); - } - ; - -parameter_declaration: - parameter_qualifier parameter_declarator - { - $$ = $2; - $$->type->qualifier = $1; - if (!$$->type->qualifier.push_to_global(& @1, state)) { - YYERROR; - } - } - | parameter_qualifier parameter_type_specifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_parameter_declarator(); - $$->set_location(@2); - $$->type = new(ctx) ast_fully_specified_type(); - $$->type->set_location_range(@1, @2); - $$->type->qualifier = $1; - if (!$$->type->qualifier.push_to_global(& @1, state)) { - YYERROR; - } - $$->type->specifier = $2; - } - ; - -parameter_qualifier: - /* empty */ - { - memset(& $$, 0, sizeof($$)); - } - | CONST_TOK parameter_qualifier - { - if ($2.flags.q.constant) - _mesa_glsl_error(&@1, state, "duplicate const qualifier"); - - $$ = $2; - $$.flags.q.constant = 1; - } - | PRECISE parameter_qualifier - { - if ($2.flags.q.precise) - _mesa_glsl_error(&@1, state, "duplicate precise qualifier"); - - $$ = $2; - $$.flags.q.precise = 1; - } - | parameter_direction_qualifier parameter_qualifier - { - if (($1.flags.q.in || $1.flags.q.out) && ($2.flags.q.in || $2.flags.q.out)) - _mesa_glsl_error(&@1, state, "duplicate in/out/inout qualifier"); - - if (!state->has_420pack_or_es31() && $2.flags.q.constant) - _mesa_glsl_error(&@1, state, "in/out/inout must come after const " - "or precise"); - - $$ = $1; - $$.merge_qualifier(&@1, state, $2, false); - } - | precision_qualifier parameter_qualifier - { - if ($2.precision != ast_precision_none) - _mesa_glsl_error(&@1, state, "duplicate precision qualifier"); - - if (!state->has_420pack_or_es31() && - $2.flags.i != 0) - _mesa_glsl_error(&@1, state, "precision qualifiers must come last"); - - $$ = $2; - $$.precision = $1; - } - | memory_qualifier parameter_qualifier - { - $$ = $1; - $$.merge_qualifier(&@1, state, $2, false); - } - -parameter_direction_qualifier: - IN_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.in = 1; - } - | OUT_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.out = 1; - } - | INOUT_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.in = 1; - $$.flags.q.out = 1; - } - ; - -parameter_type_specifier: - type_specifier - ; - -init_declarator_list: - single_declaration - | init_declarator_list ',' any_identifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($3, NULL, NULL); - decl->set_location(@3); - - $$ = $1; - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $3, ir_var_auto)); - } - | init_declarator_list ',' any_identifier array_specifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($3, $4, NULL); - decl->set_location_range(@3, @4); - - $$ = $1; - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $3, ir_var_auto)); - } - | init_declarator_list ',' any_identifier array_specifier '=' initializer - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($3, $4, $6); - decl->set_location_range(@3, @4); - - $$ = $1; - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $3, ir_var_auto)); - } - | init_declarator_list ',' any_identifier '=' initializer - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($3, NULL, $5); - decl->set_location(@3); - - $$ = $1; - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $3, ir_var_auto)); - } - ; - - // Grammar Note: No 'enum', or 'typedef'. -single_declaration: - fully_specified_type - { - void *ctx = state->linalloc; - /* Empty declaration list is valid. */ - $$ = new(ctx) ast_declarator_list($1); - $$->set_location(@1); - } - | fully_specified_type any_identifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($2, NULL, NULL); - decl->set_location(@2); - - $$ = new(ctx) ast_declarator_list($1); - $$->set_location_range(@1, @2); - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); - } - | fully_specified_type any_identifier array_specifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($2, $3, NULL); - decl->set_location_range(@2, @3); - - $$ = new(ctx) ast_declarator_list($1); - $$->set_location_range(@1, @3); - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); - } - | fully_specified_type any_identifier array_specifier '=' initializer - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($2, $3, $5); - decl->set_location_range(@2, @3); - - $$ = new(ctx) ast_declarator_list($1); - $$->set_location_range(@1, @3); - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); - } - | fully_specified_type any_identifier '=' initializer - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($2, NULL, $4); - decl->set_location(@2); - - $$ = new(ctx) ast_declarator_list($1); - $$->set_location_range(@1, @2); - $$->declarations.push_tail(&decl->link); - state->symbols->add_variable(new(state) ir_variable(NULL, $2, ir_var_auto)); - } - | INVARIANT variable_identifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($2, NULL, NULL); - decl->set_location(@2); - - $$ = new(ctx) ast_declarator_list(NULL); - $$->set_location_range(@1, @2); - $$->invariant = true; - - $$->declarations.push_tail(&decl->link); - } - | PRECISE variable_identifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($2, NULL, NULL); - decl->set_location(@2); - - $$ = new(ctx) ast_declarator_list(NULL); - $$->set_location_range(@1, @2); - $$->precise = true; - - $$->declarations.push_tail(&decl->link); - } - ; - -fully_specified_type: - type_specifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_fully_specified_type(); - $$->set_location(@1); - $$->specifier = $1; - } - | type_qualifier type_specifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_fully_specified_type(); - $$->set_location_range(@1, @2); - $$->qualifier = $1; - if (!$$->qualifier.push_to_global(& @1, state)) { - YYERROR; - } - $$->specifier = $2; - if ($$->specifier->structure != NULL && - $$->specifier->structure->is_declaration) { - $$->specifier->structure->layout = &$$->qualifier; - } - } - ; - -layout_qualifier: - LAYOUT_TOK '(' layout_qualifier_id_list ')' - { - $$ = $3; - } - ; - -layout_qualifier_id_list: - layout_qualifier_id - | layout_qualifier_id_list ',' layout_qualifier_id - { - $$ = $1; - if (!$$.merge_qualifier(& @3, state, $3, true)) { - YYERROR; - } - } - ; - -layout_qualifier_id: - any_identifier - { - memset(& $$, 0, sizeof($$)); - - /* Layout qualifiers for ARB_fragment_coord_conventions. */ - if (!$$.flags.i && (state->ARB_fragment_coord_conventions_enable || - state->is_version(150, 0))) { - if (match_layout_qualifier($1, "origin_upper_left", state) == 0) { - $$.flags.q.origin_upper_left = 1; - } else if (match_layout_qualifier($1, "pixel_center_integer", - state) == 0) { - $$.flags.q.pixel_center_integer = 1; - } - - if ($$.flags.i && state->ARB_fragment_coord_conventions_warn) { - _mesa_glsl_warning(& @1, state, - "GL_ARB_fragment_coord_conventions layout " - "identifier `%s' used", $1); - } - } - - /* Layout qualifiers for AMD/ARB_conservative_depth. */ - if (!$$.flags.i && - (state->AMD_conservative_depth_enable || - state->ARB_conservative_depth_enable || - state->is_version(420, 0))) { - if (match_layout_qualifier($1, "depth_any", state) == 0) { - $$.flags.q.depth_type = 1; - $$.depth_type = ast_depth_any; - } else if (match_layout_qualifier($1, "depth_greater", state) == 0) { - $$.flags.q.depth_type = 1; - $$.depth_type = ast_depth_greater; - } else if (match_layout_qualifier($1, "depth_less", state) == 0) { - $$.flags.q.depth_type = 1; - $$.depth_type = ast_depth_less; - } else if (match_layout_qualifier($1, "depth_unchanged", - state) == 0) { - $$.flags.q.depth_type = 1; - $$.depth_type = ast_depth_unchanged; - } - - if ($$.flags.i && state->AMD_conservative_depth_warn) { - _mesa_glsl_warning(& @1, state, - "GL_AMD_conservative_depth " - "layout qualifier `%s' is used", $1); - } - if ($$.flags.i && state->ARB_conservative_depth_warn) { - _mesa_glsl_warning(& @1, state, - "GL_ARB_conservative_depth " - "layout qualifier `%s' is used", $1); - } - } - - /* See also interface_block_layout_qualifier. */ - if (!$$.flags.i && state->has_uniform_buffer_objects()) { - if (match_layout_qualifier($1, "std140", state) == 0) { - $$.flags.q.std140 = 1; - } else if (match_layout_qualifier($1, "shared", state) == 0) { - $$.flags.q.shared = 1; - } else if (match_layout_qualifier($1, "std430", state) == 0) { - $$.flags.q.std430 = 1; - } else if (match_layout_qualifier($1, "column_major", state) == 0) { - $$.flags.q.column_major = 1; - /* "row_major" is a reserved word in GLSL 1.30+. Its token is parsed - * below in the interface_block_layout_qualifier rule. - * - * It is not a reserved word in GLSL ES 3.00, so it's handled here as - * an identifier. - * - * Also, this takes care of alternate capitalizations of - * "row_major" (which is necessary because layout qualifiers - * are case-insensitive in desktop GLSL). - */ - } else if (match_layout_qualifier($1, "row_major", state) == 0) { - $$.flags.q.row_major = 1; - /* "packed" is a reserved word in GLSL, and its token is - * parsed below in the interface_block_layout_qualifier rule. - * However, we must take care of alternate capitalizations of - * "packed", because layout qualifiers are case-insensitive - * in desktop GLSL. - */ - } else if (match_layout_qualifier($1, "packed", state) == 0) { - $$.flags.q.packed = 1; - } - - if ($$.flags.i && state->ARB_uniform_buffer_object_warn) { - _mesa_glsl_warning(& @1, state, - "#version 140 / GL_ARB_uniform_buffer_object " - "layout qualifier `%s' is used", $1); - } - } - - /* Layout qualifiers for GLSL 1.50 geometry shaders. */ - if (!$$.flags.i) { - static const struct { - const char *s; - GLenum e; - } map[] = { - { "points", GL_POINTS }, - { "lines", GL_LINES }, - { "lines_adjacency", GL_LINES_ADJACENCY }, - { "line_strip", GL_LINE_STRIP }, - { "triangles", GL_TRIANGLES }, - { "triangles_adjacency", GL_TRIANGLES_ADJACENCY }, - { "triangle_strip", GL_TRIANGLE_STRIP }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier($1, map[i].s, state) == 0) { - $$.flags.q.prim_type = 1; - $$.prim_type = map[i].e; - break; - } - } - - if ($$.flags.i && !state->has_geometry_shader() && - !state->has_tessellation_shader()) { - _mesa_glsl_error(& @1, state, "#version 150 layout " - "qualifier `%s' used", $1); - } - } - - /* Layout qualifiers for ARB_shader_image_load_store. */ - if (state->has_shader_image_load_store()) { - if (!$$.flags.i) { - static const struct { - const char *name; - enum pipe_format format; - glsl_base_type base_type; - /** Minimum desktop GLSL version required for the image - * format. Use 130 if already present in the original - * ARB extension. - */ - unsigned required_glsl; - /** Minimum GLSL ES version required for the image format. */ - unsigned required_essl; - /* NV_image_formats */ - bool nv_image_formats; - bool ext_qualifiers; - } map[] = { - { "rgba32f", PIPE_FORMAT_R32G32B32A32_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rgba16f", PIPE_FORMAT_R16G16B16A16_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rg32f", PIPE_FORMAT_R32G32_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rg16f", PIPE_FORMAT_R16G16_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r11f_g11f_b10f", PIPE_FORMAT_R11G11B10_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r32f", PIPE_FORMAT_R32_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "r16f", PIPE_FORMAT_R16_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba32ui", PIPE_FORMAT_R32G32B32A32_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "rgba16ui", PIPE_FORMAT_R16G16B16A16_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "rgb10_a2ui", PIPE_FORMAT_R10G10B10A2_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rgba8ui", PIPE_FORMAT_R8G8B8A8_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "rg32ui", PIPE_FORMAT_R32G32_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rg16ui", PIPE_FORMAT_R16G16_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rg8ui", PIPE_FORMAT_R8G8_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "r32ui", PIPE_FORMAT_R32_UINT, GLSL_TYPE_UINT, 130, 310, false, false }, - { "r16ui", PIPE_FORMAT_R16_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "r8ui", PIPE_FORMAT_R8_UINT, GLSL_TYPE_UINT, 130, 0, true, false }, - { "rgba32i", PIPE_FORMAT_R32G32B32A32_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "rgba16i", PIPE_FORMAT_R16G16B16A16_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "rgba8i", PIPE_FORMAT_R8G8B8A8_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "rg32i", PIPE_FORMAT_R32G32_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "rg16i", PIPE_FORMAT_R16G16_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "rg8i", PIPE_FORMAT_R8G8_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "r32i", PIPE_FORMAT_R32_SINT, GLSL_TYPE_INT, 130, 310, false, false }, - { "r16i", PIPE_FORMAT_R16_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "r8i", PIPE_FORMAT_R8_SINT, GLSL_TYPE_INT, 130, 0, true, false }, - { "rgba16", PIPE_FORMAT_R16G16B16A16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgb10_a2", PIPE_FORMAT_R10G10B10A2_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba8", PIPE_FORMAT_R8G8B8A8_UNORM, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rg16", PIPE_FORMAT_R16G16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rg8", PIPE_FORMAT_R8G8_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r16", PIPE_FORMAT_R16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r8", PIPE_FORMAT_R8_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba16_snorm", PIPE_FORMAT_R16G16B16A16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rgba8_snorm", PIPE_FORMAT_R8G8B8A8_SNORM, GLSL_TYPE_FLOAT, 130, 310, false, false }, - { "rg16_snorm", PIPE_FORMAT_R16G16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "rg8_snorm", PIPE_FORMAT_R8G8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r16_snorm", PIPE_FORMAT_R16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - { "r8_snorm", PIPE_FORMAT_R8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false }, - - /* From GL_EXT_shader_image_load_store: */ - /* base_type is incorrect but it'll be patched later when we know - * the variable type. See ast_to_hir.cpp */ - { "size1x8", PIPE_FORMAT_R8_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size1x16", PIPE_FORMAT_R16_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size1x32", PIPE_FORMAT_R32_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size2x32", PIPE_FORMAT_R32G32_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - { "size4x32", PIPE_FORMAT_R32G32B32A32_SINT, GLSL_TYPE_VOID, 130, 0, false, true }, - }; - - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if ((state->is_version(map[i].required_glsl, - map[i].required_essl) || - (state->NV_image_formats_enable && - map[i].nv_image_formats)) && - match_layout_qualifier($1, map[i].name, state) == 0) { - /* Skip ARB_shader_image_load_store qualifiers if not enabled */ - if (!map[i].ext_qualifiers && !(state->ARB_shader_image_load_store_enable || - state->is_version(420, 310))) { - continue; - } - /* Skip EXT_shader_image_load_store qualifiers if not enabled */ - if (map[i].ext_qualifiers && !state->EXT_shader_image_load_store_enable) { - continue; - } - $$.flags.q.explicit_image_format = 1; - $$.image_format = map[i].format; - $$.image_base_type = map[i].base_type; - break; - } - } - } - } - - if (!$$.flags.i) { - if (match_layout_qualifier($1, "early_fragment_tests", state) == 0) { - /* From section 4.4.1.3 of the GLSL 4.50 specification - * (Fragment Shader Inputs): - * - * "Fragment shaders also allow the following layout - * qualifier on in only (not with variable declarations) - * layout-qualifier-id - * early_fragment_tests - * [...]" - */ - if (state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& @1, state, - "early_fragment_tests layout qualifier only " - "valid in fragment shaders"); - } - - $$.flags.q.early_fragment_tests = 1; - } - - if (match_layout_qualifier($1, "inner_coverage", state) == 0) { - if (state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& @1, state, - "inner_coverage layout qualifier only " - "valid in fragment shaders"); - } - - if (state->INTEL_conservative_rasterization_enable) { - $$.flags.q.inner_coverage = 1; - } else { - _mesa_glsl_error(& @1, state, - "inner_coverage layout qualifier present, " - "but the INTEL_conservative_rasterization extension " - "is not enabled."); - } - } - - if (match_layout_qualifier($1, "post_depth_coverage", state) == 0) { - if (state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& @1, state, - "post_depth_coverage layout qualifier only " - "valid in fragment shaders"); - } - - if (state->ARB_post_depth_coverage_enable || - state->INTEL_conservative_rasterization_enable) { - $$.flags.q.post_depth_coverage = 1; - } else { - _mesa_glsl_error(& @1, state, - "post_depth_coverage layout qualifier present, " - "but the GL_ARB_post_depth_coverage extension " - "is not enabled."); - } - } - - if ($$.flags.q.post_depth_coverage && $$.flags.q.inner_coverage) { - _mesa_glsl_error(& @1, state, - "post_depth_coverage & inner_coverage layout qualifiers " - "are mutually exclusive"); - } - } - - const bool pixel_interlock_ordered = match_layout_qualifier($1, - "pixel_interlock_ordered", state) == 0; - const bool pixel_interlock_unordered = match_layout_qualifier($1, - "pixel_interlock_unordered", state) == 0; - const bool sample_interlock_ordered = match_layout_qualifier($1, - "sample_interlock_ordered", state) == 0; - const bool sample_interlock_unordered = match_layout_qualifier($1, - "sample_interlock_unordered", state) == 0; - - if (pixel_interlock_ordered + pixel_interlock_unordered + - sample_interlock_ordered + sample_interlock_unordered > 0 && - state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& @1, state, "interlock layout qualifiers: " - "pixel_interlock_ordered, pixel_interlock_unordered, " - "sample_interlock_ordered and sample_interlock_unordered, " - "only valid in fragment shader input layout declaration."); - } else if (pixel_interlock_ordered + pixel_interlock_unordered + - sample_interlock_ordered + sample_interlock_unordered > 0 && - !state->ARB_fragment_shader_interlock_enable && - !state->NV_fragment_shader_interlock_enable) { - _mesa_glsl_error(& @1, state, - "interlock layout qualifier present, but the " - "GL_ARB_fragment_shader_interlock or " - "GL_NV_fragment_shader_interlock extension is not " - "enabled."); - } else { - $$.flags.q.pixel_interlock_ordered = pixel_interlock_ordered; - $$.flags.q.pixel_interlock_unordered = pixel_interlock_unordered; - $$.flags.q.sample_interlock_ordered = sample_interlock_ordered; - $$.flags.q.sample_interlock_unordered = sample_interlock_unordered; - } - - /* Layout qualifiers for tessellation evaluation shaders. */ - if (!$$.flags.i) { - static const struct { - const char *s; - GLenum e; - } map[] = { - /* triangles already parsed by gs-specific code */ - { "quads", GL_QUADS }, - { "isolines", GL_ISOLINES }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier($1, map[i].s, state) == 0) { - $$.flags.q.prim_type = 1; - $$.prim_type = map[i].e; - break; - } - } - - if ($$.flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& @1, state, - "primitive mode qualifier `%s' requires " - "GLSL 4.00 or ARB_tessellation_shader", $1); - } - } - if (!$$.flags.i) { - static const struct { - const char *s; - enum gl_tess_spacing e; - } map[] = { - { "equal_spacing", TESS_SPACING_EQUAL }, - { "fractional_odd_spacing", TESS_SPACING_FRACTIONAL_ODD }, - { "fractional_even_spacing", TESS_SPACING_FRACTIONAL_EVEN }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier($1, map[i].s, state) == 0) { - $$.flags.q.vertex_spacing = 1; - $$.vertex_spacing = map[i].e; - break; - } - } - - if ($$.flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& @1, state, - "vertex spacing qualifier `%s' requires " - "GLSL 4.00 or ARB_tessellation_shader", $1); - } - } - if (!$$.flags.i) { - if (match_layout_qualifier($1, "cw", state) == 0) { - $$.flags.q.ordering = 1; - $$.ordering = GL_CW; - } else if (match_layout_qualifier($1, "ccw", state) == 0) { - $$.flags.q.ordering = 1; - $$.ordering = GL_CCW; - } - - if ($$.flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& @1, state, - "ordering qualifier `%s' requires " - "GLSL 4.00 or ARB_tessellation_shader", $1); - } - } - if (!$$.flags.i) { - if (match_layout_qualifier($1, "point_mode", state) == 0) { - $$.flags.q.point_mode = 1; - $$.point_mode = true; - } - - if ($$.flags.i && !state->has_tessellation_shader()) { - _mesa_glsl_error(& @1, state, - "qualifier `point_mode' requires " - "GLSL 4.00 or ARB_tessellation_shader"); - } - } - - if (!$$.flags.i) { - static const struct { - const char *s; - uint32_t mask; - } map[] = { - { "blend_support_multiply", BITFIELD_BIT(BLEND_MULTIPLY) }, - { "blend_support_screen", BITFIELD_BIT(BLEND_SCREEN) }, - { "blend_support_overlay", BITFIELD_BIT(BLEND_OVERLAY) }, - { "blend_support_darken", BITFIELD_BIT(BLEND_DARKEN) }, - { "blend_support_lighten", BITFIELD_BIT(BLEND_LIGHTEN) }, - { "blend_support_colordodge", BITFIELD_BIT(BLEND_COLORDODGE) }, - { "blend_support_colorburn", BITFIELD_BIT(BLEND_COLORBURN) }, - { "blend_support_hardlight", BITFIELD_BIT(BLEND_HARDLIGHT) }, - { "blend_support_softlight", BITFIELD_BIT(BLEND_SOFTLIGHT) }, - { "blend_support_difference", BITFIELD_BIT(BLEND_DIFFERENCE) }, - { "blend_support_exclusion", BITFIELD_BIT(BLEND_EXCLUSION) }, - { "blend_support_hsl_hue", BITFIELD_BIT(BLEND_HSL_HUE) }, - { "blend_support_hsl_saturation", BITFIELD_BIT(BLEND_HSL_SATURATION) }, - { "blend_support_hsl_color", BITFIELD_BIT(BLEND_HSL_COLOR) }, - { "blend_support_hsl_luminosity", BITFIELD_BIT(BLEND_HSL_LUMINOSITY) }, - { "blend_support_all_equations", (1u << (BLEND_HSL_LUMINOSITY + 1)) - 2 }, - }; - for (unsigned i = 0; i < ARRAY_SIZE(map); i++) { - if (match_layout_qualifier($1, map[i].s, state) == 0) { - $$.flags.q.blend_support = 1; - state->fs_blend_support |= map[i].mask; - break; - } - } - - if ($$.flags.i && - !state->KHR_blend_equation_advanced_enable && - !state->is_version(0, 320)) { - _mesa_glsl_error(& @1, state, - "advanced blending layout qualifiers require " - "ESSL 3.20 or KHR_blend_equation_advanced"); - } - - if ($$.flags.i && state->stage != MESA_SHADER_FRAGMENT) { - _mesa_glsl_error(& @1, state, - "advanced blending layout qualifiers only " - "valid in fragment shaders"); - } - } - - /* Layout qualifiers for ARB_compute_variable_group_size. */ - if (!$$.flags.i) { - if (match_layout_qualifier($1, "local_size_variable", state) == 0) { - $$.flags.q.local_size_variable = 1; - } - - if ($$.flags.i && !state->ARB_compute_variable_group_size_enable) { - _mesa_glsl_error(& @1, state, - "qualifier `local_size_variable` requires " - "ARB_compute_variable_group_size"); - } - } - - /* Layout qualifiers for ARB_bindless_texture. */ - if (!$$.flags.i) { - if (match_layout_qualifier($1, "bindless_sampler", state) == 0) - $$.flags.q.bindless_sampler = 1; - if (match_layout_qualifier($1, "bound_sampler", state) == 0) - $$.flags.q.bound_sampler = 1; - - if (state->has_shader_image_load_store()) { - if (match_layout_qualifier($1, "bindless_image", state) == 0) - $$.flags.q.bindless_image = 1; - if (match_layout_qualifier($1, "bound_image", state) == 0) - $$.flags.q.bound_image = 1; - } - - if ($$.flags.i && !state->has_bindless()) { - _mesa_glsl_error(& @1, state, - "qualifier `%s` requires " - "ARB_bindless_texture", $1); - } - } - - if (!$$.flags.i && - state->EXT_shader_framebuffer_fetch_non_coherent_enable) { - if (match_layout_qualifier($1, "noncoherent", state) == 0) - $$.flags.q.non_coherent = 1; - } - - // Layout qualifiers for NV_compute_shader_derivatives. - if (!$$.flags.i) { - if (match_layout_qualifier($1, "derivative_group_quadsNV", state) == 0) { - $$.flags.q.derivative_group = 1; - $$.derivative_group = DERIVATIVE_GROUP_QUADS; - } else if (match_layout_qualifier($1, "derivative_group_linearNV", state) == 0) { - $$.flags.q.derivative_group = 1; - $$.derivative_group = DERIVATIVE_GROUP_LINEAR; - } - - if ($$.flags.i) { - if (!state->has_compute_shader()) { - _mesa_glsl_error(& @1, state, - "qualifier `%s' requires " - "a compute shader", $1); - } - - if (!state->NV_compute_shader_derivatives_enable) { - _mesa_glsl_error(& @1, state, - "qualifier `%s' requires " - "NV_compute_shader_derivatives", $1); - } - - if (state->NV_compute_shader_derivatives_warn) { - _mesa_glsl_warning(& @1, state, - "NV_compute_shader_derivatives layout " - "qualifier `%s' used", $1); - } - } - } - - /* Layout qualifier for NV_viewport_array2. */ - if (!$$.flags.i && state->stage != MESA_SHADER_FRAGMENT) { - if (match_layout_qualifier($1, "viewport_relative", state) == 0) { - $$.flags.q.viewport_relative = 1; - } - - if ($$.flags.i && !state->NV_viewport_array2_enable) { - _mesa_glsl_error(& @1, state, - "qualifier `%s' requires " - "GL_NV_viewport_array2", $1); - } - - if ($$.flags.i && state->NV_viewport_array2_warn) { - _mesa_glsl_warning(& @1, state, - "GL_NV_viewport_array2 layout " - "identifier `%s' used", $1); - } - } - - if (!$$.flags.i) { - _mesa_glsl_error(& @1, state, "unrecognized layout identifier " - "`%s'", $1); - YYERROR; - } - } - | any_identifier '=' constant_expression - { - memset(& $$, 0, sizeof($$)); - void *ctx = state->linalloc; - - if ($3->oper != ast_int_constant && - $3->oper != ast_uint_constant && - !state->has_enhanced_layouts()) { - _mesa_glsl_error(& @1, state, - "compile-time constant expressions require " - "GLSL 4.40 or ARB_enhanced_layouts"); - } - - if (match_layout_qualifier("align", $1, state) == 0) { - if (!state->has_enhanced_layouts()) { - _mesa_glsl_error(& @1, state, - "align qualifier requires " - "GLSL 4.40 or ARB_enhanced_layouts"); - } else { - $$.flags.q.explicit_align = 1; - $$.align = $3; - } - } - - if (match_layout_qualifier("location", $1, state) == 0) { - $$.flags.q.explicit_location = 1; - - if ($$.flags.q.attribute == 1 && - state->ARB_explicit_attrib_location_warn) { - _mesa_glsl_warning(& @1, state, - "GL_ARB_explicit_attrib_location layout " - "identifier `%s' used", $1); - } - $$.location = $3; - } - - if (match_layout_qualifier("component", $1, state) == 0) { - if (!state->has_enhanced_layouts()) { - _mesa_glsl_error(& @1, state, - "component qualifier requires " - "GLSL 4.40 or ARB_enhanced_layouts"); - } else { - $$.flags.q.explicit_component = 1; - $$.component = $3; - } - } - - if (match_layout_qualifier("index", $1, state) == 0) { - if (state->es_shader && !state->EXT_blend_func_extended_enable) { - _mesa_glsl_error(& @3, state, "index layout qualifier requires EXT_blend_func_extended"); - YYERROR; - } - - $$.flags.q.explicit_index = 1; - $$.index = $3; - } - - if ((state->has_420pack_or_es31() || - state->has_atomic_counters() || - state->has_shader_storage_buffer_objects()) && - match_layout_qualifier("binding", $1, state) == 0) { - $$.flags.q.explicit_binding = 1; - $$.binding = $3; - } - - if ((state->has_atomic_counters() || - state->has_enhanced_layouts()) && - match_layout_qualifier("offset", $1, state) == 0) { - $$.flags.q.explicit_offset = 1; - $$.offset = $3; - } - - if (match_layout_qualifier("max_vertices", $1, state) == 0) { - $$.flags.q.max_vertices = 1; - $$.max_vertices = new(ctx) ast_layout_expression(@1, $3); - if (!state->has_geometry_shader()) { - _mesa_glsl_error(& @3, state, - "#version 150 max_vertices qualifier " - "specified", $3); - } - } - - if (state->stage == MESA_SHADER_GEOMETRY) { - if (match_layout_qualifier("stream", $1, state) == 0 && - state->check_explicit_attrib_stream_allowed(& @3)) { - $$.flags.q.stream = 1; - $$.flags.q.explicit_stream = 1; - $$.stream = $3; - } - } - - if (state->has_enhanced_layouts()) { - if (match_layout_qualifier("xfb_buffer", $1, state) == 0) { - $$.flags.q.xfb_buffer = 1; - $$.flags.q.explicit_xfb_buffer = 1; - $$.xfb_buffer = $3; - } - - if (match_layout_qualifier("xfb_offset", $1, state) == 0) { - $$.flags.q.explicit_xfb_offset = 1; - $$.offset = $3; - } - - if (match_layout_qualifier("xfb_stride", $1, state) == 0) { - $$.flags.q.xfb_stride = 1; - $$.flags.q.explicit_xfb_stride = 1; - $$.xfb_stride = $3; - } - } - - static const char * const local_size_qualifiers[3] = { - "local_size_x", - "local_size_y", - "local_size_z", - }; - for (int i = 0; i < 3; i++) { - if (match_layout_qualifier(local_size_qualifiers[i], $1, - state) == 0) { - if (!state->has_compute_shader()) { - _mesa_glsl_error(& @3, state, - "%s qualifier requires GLSL 4.30 or " - "GLSL ES 3.10 or ARB_compute_shader", - local_size_qualifiers[i]); - YYERROR; - } else { - $$.flags.q.local_size |= (1 << i); - $$.local_size[i] = new(ctx) ast_layout_expression(@1, $3); - } - break; - } - } - - if (match_layout_qualifier("invocations", $1, state) == 0) { - $$.flags.q.invocations = 1; - $$.invocations = new(ctx) ast_layout_expression(@1, $3); - if (!state->is_version(400, 320) && - !state->ARB_gpu_shader5_enable && - !state->OES_geometry_shader_enable && - !state->EXT_geometry_shader_enable) { - _mesa_glsl_error(& @3, state, - "GL_ARB_gpu_shader5 invocations " - "qualifier specified"); - } - } - - /* Layout qualifiers for tessellation control shaders. */ - if (match_layout_qualifier("vertices", $1, state) == 0) { - $$.flags.q.vertices = 1; - $$.vertices = new(ctx) ast_layout_expression(@1, $3); - if (!state->has_tessellation_shader()) { - _mesa_glsl_error(& @1, state, - "vertices qualifier requires GLSL 4.00 or " - "ARB_tessellation_shader"); - } - } - - /* If the identifier didn't match any known layout identifiers, - * emit an error. - */ - if (!$$.flags.i) { - _mesa_glsl_error(& @1, state, "unrecognized layout identifier " - "`%s'", $1); - YYERROR; - } - } - | interface_block_layout_qualifier - { - $$ = $1; - /* Layout qualifiers for ARB_uniform_buffer_object. */ - if ($$.flags.q.uniform && !state->has_uniform_buffer_objects()) { - _mesa_glsl_error(& @1, state, - "#version 140 / GL_ARB_uniform_buffer_object " - "layout qualifier `uniform' is used"); - } else if ($$.flags.q.uniform && state->ARB_uniform_buffer_object_warn) { - _mesa_glsl_warning(& @1, state, - "#version 140 / GL_ARB_uniform_buffer_object " - "layout qualifier `uniform' is used"); - } - } - ; - -/* This is a separate language rule because we parse these as tokens - * (due to them being reserved keywords) instead of identifiers like - * most qualifiers. See the any_identifier path of - * layout_qualifier_id for the others. - * - * Note that since layout qualifiers are case-insensitive in desktop - * GLSL, all of these qualifiers need to be handled as identifiers as - * well (by the any_identifier path of layout_qualifier_id). - */ -interface_block_layout_qualifier: - ROW_MAJOR - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.row_major = 1; - } - | PACKED_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.packed = 1; - } - | SHARED - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.shared = 1; - } - ; - -subroutine_qualifier: - SUBROUTINE - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.subroutine = 1; - } - | SUBROUTINE '(' subroutine_type_list ')' - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.subroutine = 1; - $$.subroutine_list = $3; - } - ; - -subroutine_type_list: - any_identifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($1, NULL, NULL); - decl->set_location(@1); - - $$ = new(ctx) ast_subroutine_list(); - $$->declarations.push_tail(&decl->link); - } - | subroutine_type_list ',' any_identifier - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($3, NULL, NULL); - decl->set_location(@3); - - $$ = $1; - $$->declarations.push_tail(&decl->link); - } - ; - -interpolation_qualifier: - SMOOTH - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.smooth = 1; - } - | FLAT - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.flat = 1; - } - | NOPERSPECTIVE - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.noperspective = 1; - } - ; - -type_qualifier: - /* Single qualifiers */ - INVARIANT - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.invariant = 1; - } - | PRECISE - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.precise = 1; - } - | auxiliary_storage_qualifier - | storage_qualifier - | interpolation_qualifier - | layout_qualifier - | memory_qualifier - | subroutine_qualifier - | precision_qualifier - { - memset(&$$, 0, sizeof($$)); - $$.precision = $1; - } - - /* Multiple qualifiers: - * In GLSL 4.20, these can be specified in any order. In earlier versions, - * they appear in this order (see GLSL 1.50 section 4.7 & comments below): - * - * invariant interpolation auxiliary storage precision ...or... - * layout storage precision - * - * Each qualifier's rule ensures that the accumulated qualifiers on the right - * side don't contain any that must appear on the left hand side. - * For example, when processing a storage qualifier, we check that there are - * no auxiliary, interpolation, layout, invariant, or precise qualifiers to the right. - */ - | PRECISE type_qualifier - { - if ($2.flags.q.precise) - _mesa_glsl_error(&@1, state, "duplicate \"precise\" qualifier"); - - $$ = $2; - $$.flags.q.precise = 1; - } - | INVARIANT type_qualifier - { - if ($2.flags.q.invariant) - _mesa_glsl_error(&@1, state, "duplicate \"invariant\" qualifier"); - - if (!state->has_420pack_or_es31() && $2.flags.q.precise) - _mesa_glsl_error(&@1, state, - "\"invariant\" must come after \"precise\""); - - $$ = $2; - $$.flags.q.invariant = 1; - - /* GLSL ES 3.00 spec, section 4.6.1 "The Invariant Qualifier": - * - * "Only variables output from a shader can be candidates for invariance. - * This includes user-defined output variables and the built-in output - * variables. As only outputs can be declared as invariant, an invariant - * output from one shader stage will still match an input of a subsequent - * stage without the input being declared as invariant." - * - * On the desktop side, this text first appears in GLSL 4.20. - */ - if (state->is_version(420, 300) && $$.flags.q.in) - _mesa_glsl_error(&@1, state, "invariant qualifiers cannot be used with shader inputs"); - } - | interpolation_qualifier type_qualifier - { - /* Section 4.3 of the GLSL 1.40 specification states: - * "...qualified with one of these interpolation qualifiers" - * - * GLSL 1.30 claims to allow "one or more", but insists that: - * "These interpolation qualifiers may only precede the qualifiers in, - * centroid in, out, or centroid out in a declaration." - * - * ...which means that e.g. smooth can't precede smooth, so there can be - * only one after all, and the 1.40 text is a clarification, not a change. - */ - if ($2.has_interpolation()) - _mesa_glsl_error(&@1, state, "duplicate interpolation qualifier"); - - if (!state->has_420pack_or_es31() && - ($2.flags.q.precise || $2.flags.q.invariant)) { - _mesa_glsl_error(&@1, state, "interpolation qualifiers must come " - "after \"precise\" or \"invariant\""); - } - - $$ = $1; - $$.merge_qualifier(&@1, state, $2, false); - } - | layout_qualifier type_qualifier - { - /* In the absence of ARB_shading_language_420pack, layout qualifiers may - * appear no later than auxiliary storage qualifiers. There is no - * particularly clear spec language mandating this, but in all examples - * the layout qualifier precedes the storage qualifier. - * - * We allow combinations of layout with interpolation, invariant or - * precise qualifiers since these are useful in ARB_separate_shader_objects. - * There is no clear spec guidance on this either. - */ - $$ = $1; - $$.merge_qualifier(& @1, state, $2, false, $2.has_layout()); - } - | subroutine_qualifier type_qualifier - { - $$ = $1; - $$.merge_qualifier(&@1, state, $2, false); - } - | auxiliary_storage_qualifier type_qualifier - { - if ($2.has_auxiliary_storage()) { - _mesa_glsl_error(&@1, state, - "duplicate auxiliary storage qualifier (centroid or sample)"); - } - - if ((!state->has_420pack_or_es31() && !state->EXT_gpu_shader4_enable) && - ($2.flags.q.precise || $2.flags.q.invariant || - $2.has_interpolation() || $2.has_layout())) { - _mesa_glsl_error(&@1, state, "auxiliary storage qualifiers must come " - "just before storage qualifiers"); - } - $$ = $1; - $$.merge_qualifier(&@1, state, $2, false); - } - | storage_qualifier type_qualifier - { - /* Section 4.3 of the GLSL 1.20 specification states: - * "Variable declarations may have a storage qualifier specified..." - * 1.30 clarifies this to "may have one storage qualifier". - * - * GL_EXT_gpu_shader4 allows "varying out" in fragment shaders. - */ - if ($2.has_storage() && - (!state->EXT_gpu_shader4_enable || - state->stage != MESA_SHADER_FRAGMENT || - !$1.flags.q.varying || !$2.flags.q.out)) - _mesa_glsl_error(&@1, state, "duplicate storage qualifier"); - - if (!state->has_420pack_or_es31() && - ($2.flags.q.precise || $2.flags.q.invariant || $2.has_interpolation() || - $2.has_layout() || $2.has_auxiliary_storage())) { - _mesa_glsl_error(&@1, state, "storage qualifiers must come after " - "precise, invariant, interpolation, layout and auxiliary " - "storage qualifiers"); - } - - $$ = $1; - $$.merge_qualifier(&@1, state, $2, false); - } - | precision_qualifier type_qualifier - { - if ($2.precision != ast_precision_none) - _mesa_glsl_error(&@1, state, "duplicate precision qualifier"); - - if (!(state->has_420pack_or_es31()) && - $2.flags.i != 0) - _mesa_glsl_error(&@1, state, "precision qualifiers must come last"); - - $$ = $2; - $$.precision = $1; - } - | memory_qualifier type_qualifier - { - $$ = $1; - $$.merge_qualifier(&@1, state, $2, false); - } - ; - -auxiliary_storage_qualifier: - CENTROID - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.centroid = 1; - } - | SAMPLE - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.sample = 1; - } - | PATCH - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.patch = 1; - } - -storage_qualifier: - CONST_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.constant = 1; - } - | ATTRIBUTE - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.attribute = 1; - } - | VARYING - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.varying = 1; - } - | IN_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.in = 1; - } - | OUT_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.out = 1; - - if (state->stage == MESA_SHADER_GEOMETRY && - state->has_explicit_attrib_stream()) { - /* Section 4.3.8.2 (Output Layout Qualifiers) of the GLSL 4.00 - * spec says: - * - * "If the block or variable is declared with the stream - * identifier, it is associated with the specified stream; - * otherwise, it is associated with the current default stream." - */ - $$.flags.q.stream = 1; - $$.flags.q.explicit_stream = 0; - $$.stream = state->out_qualifier->stream; - } - - if (state->has_enhanced_layouts() && state->exts->ARB_transform_feedback3) { - $$.flags.q.xfb_buffer = 1; - $$.flags.q.explicit_xfb_buffer = 0; - $$.xfb_buffer = state->out_qualifier->xfb_buffer; - } - } - | INOUT_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.in = 1; - $$.flags.q.out = 1; - - if (!state->has_framebuffer_fetch() || - !state->is_version(130, 300) || - state->stage != MESA_SHADER_FRAGMENT) - _mesa_glsl_error(&@1, state, "A single interface variable cannot be " - "declared as both input and output"); - } - | UNIFORM - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.uniform = 1; - } - | BUFFER - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.buffer = 1; - } - | SHARED - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.shared_storage = 1; - } - ; - -memory_qualifier: - COHERENT - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.coherent = 1; - } - | VOLATILE - { - memset(& $$, 0, sizeof($$)); - $$.flags.q._volatile = 1; - } - | RESTRICT - { - STATIC_ASSERT(sizeof($$.flags.q) <= sizeof($$.flags.i)); - memset(& $$, 0, sizeof($$)); - $$.flags.q.restrict_flag = 1; - } - | READONLY - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.read_only = 1; - } - | WRITEONLY - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.write_only = 1; - } - ; - -array_specifier: - '[' ']' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_array_specifier(@1, new(ctx) ast_expression( - ast_unsized_array_dim, NULL, - NULL, NULL)); - $$->set_location_range(@1, @2); - } - | '[' constant_expression ']' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_array_specifier(@1, $2); - $$->set_location_range(@1, @3); - } - | array_specifier '[' ']' - { - void *ctx = state->linalloc; - $$ = $1; - - if (state->check_arrays_of_arrays_allowed(& @1)) { - $$->add_dimension(new(ctx) ast_expression(ast_unsized_array_dim, NULL, - NULL, NULL)); - } - } - | array_specifier '[' constant_expression ']' - { - $$ = $1; - - if (state->check_arrays_of_arrays_allowed(& @1)) { - $$->add_dimension($3); - } - } - ; - -type_specifier: - type_specifier_nonarray - | type_specifier_nonarray array_specifier - { - $$ = $1; - $$->array_specifier = $2; - } - ; - -type_specifier_nonarray: - basic_type_specifier_nonarray - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_type_specifier($1); - $$->set_location(@1); - } - | struct_specifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_type_specifier($1); - $$->set_location(@1); - } - | TYPE_IDENTIFIER - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_type_specifier($1); - $$->set_location(@1); - } - ; - -basic_type_specifier_nonarray: - VOID_TOK { $$ = glsl_type::void_type; } - | BASIC_TYPE_TOK { $$ = $1; } - | UNSIGNED BASIC_TYPE_TOK - { - if ($2 == glsl_type::int_type) { - $$ = glsl_type::uint_type; - } else { - _mesa_glsl_error(&@1, state, - "\"unsigned\" is only allowed before \"int\""); - } - } - ; - -precision_qualifier: - HIGHP - { - state->check_precision_qualifiers_allowed(&@1); - $$ = ast_precision_high; - } - | MEDIUMP - { - state->check_precision_qualifiers_allowed(&@1); - $$ = ast_precision_medium; - } - | LOWP - { - state->check_precision_qualifiers_allowed(&@1); - $$ = ast_precision_low; - } - ; - -struct_specifier: - STRUCT any_identifier '{' struct_declaration_list '}' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_struct_specifier($2, $4); - $$->set_location_range(@2, @5); - state->symbols->add_type($2, glsl_type::void_type); - } - | STRUCT '{' struct_declaration_list '}' - { - void *ctx = state->linalloc; - - /* All anonymous structs have the same name. This simplifies matching of - * globals whose type is an unnamed struct. - * - * It also avoids a memory leak when the same shader is compiled over and - * over again. - */ - $$ = new(ctx) ast_struct_specifier("#anon_struct", $3); - - $$->set_location_range(@2, @4); - } - ; - -struct_declaration_list: - struct_declaration - { - $$ = $1; - $1->link.self_link(); - } - | struct_declaration_list struct_declaration - { - $$ = $1; - $$->link.insert_before(& $2->link); - } - ; - -struct_declaration: - fully_specified_type struct_declarator_list ';' - { - void *ctx = state->linalloc; - ast_fully_specified_type *const type = $1; - type->set_location(@1); - - if (state->has_bindless()) { - ast_type_qualifier input_layout_mask; - - /* Allow to declare qualifiers for images. */ - input_layout_mask.flags.i = 0; - input_layout_mask.flags.q.coherent = 1; - input_layout_mask.flags.q._volatile = 1; - input_layout_mask.flags.q.restrict_flag = 1; - input_layout_mask.flags.q.read_only = 1; - input_layout_mask.flags.q.write_only = 1; - input_layout_mask.flags.q.explicit_image_format = 1; - - if ((type->qualifier.flags.i & ~input_layout_mask.flags.i) != 0) { - _mesa_glsl_error(&@1, state, - "only precision and image qualifiers may be " - "applied to structure members"); - } - } else { - if (type->qualifier.flags.i != 0) - _mesa_glsl_error(&@1, state, - "only precision qualifiers may be applied to " - "structure members"); - } - - $$ = new(ctx) ast_declarator_list(type); - $$->set_location(@2); - - $$->declarations.push_degenerate_list_at_head(& $2->link); - } - ; - -struct_declarator_list: - struct_declarator - { - $$ = $1; - $1->link.self_link(); - } - | struct_declarator_list ',' struct_declarator - { - $$ = $1; - $$->link.insert_before(& $3->link); - } - ; - -struct_declarator: - any_identifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_declaration($1, NULL, NULL); - $$->set_location(@1); - } - | any_identifier array_specifier - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_declaration($1, $2, NULL); - $$->set_location_range(@1, @2); - } - ; - -initializer: - assignment_expression - | '{' initializer_list '}' - { - $$ = $2; - } - | '{' initializer_list ',' '}' - { - $$ = $2; - } - ; - -initializer_list: - initializer - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_aggregate_initializer(); - $$->set_location(@1); - $$->expressions.push_tail(& $1->link); - } - | initializer_list ',' initializer - { - $1->expressions.push_tail(& $3->link); - } - ; - -declaration_statement: - declaration - ; - - // Grammar Note: labeled statements for SWITCH only; 'goto' is not - // supported. -statement: - compound_statement { $$ = (ast_node *) $1; } - | simple_statement - ; - -simple_statement: - declaration_statement - | expression_statement - | selection_statement - | switch_statement - | iteration_statement - | jump_statement - | demote_statement - ; - -compound_statement: - '{' '}' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_compound_statement(true, NULL); - $$->set_location_range(@1, @2); - } - | '{' - { - state->symbols->push_scope(); - } - statement_list '}' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_compound_statement(true, $3); - $$->set_location_range(@1, @4); - state->symbols->pop_scope(); - } - ; - -statement_no_new_scope: - compound_statement_no_new_scope { $$ = (ast_node *) $1; } - | simple_statement - ; - -compound_statement_no_new_scope: - '{' '}' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_compound_statement(false, NULL); - $$->set_location_range(@1, @2); - } - | '{' statement_list '}' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_compound_statement(false, $2); - $$->set_location_range(@1, @3); - } - ; - -statement_list: - statement - { - if ($1 == NULL) { - _mesa_glsl_error(& @1, state, " statement"); - assert($1 != NULL); - } - - $$ = $1; - $$->link.self_link(); - } - | statement_list statement - { - if ($2 == NULL) { - _mesa_glsl_error(& @2, state, " statement"); - assert($2 != NULL); - } - $$ = $1; - $$->link.insert_before(& $2->link); - } - | statement_list extension_statement - { - if (!state->allow_extension_directive_midshader) { - _mesa_glsl_error(& @1, state, - "#extension directive is not allowed " - "in the middle of a shader"); - YYERROR; - } - } - ; - -expression_statement: - ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_statement(NULL); - $$->set_location(@1); - } - | expression ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_expression_statement($1); - $$->set_location(@1); - } - ; - -selection_statement: - IF '(' expression ')' selection_rest_statement - { - $$ = new(state->linalloc) ast_selection_statement($3, $5.then_statement, - $5.else_statement); - $$->set_location_range(@1, @5); - } - ; - -selection_rest_statement: - statement ELSE statement - { - $$.then_statement = $1; - $$.else_statement = $3; - } - | statement %prec THEN - { - $$.then_statement = $1; - $$.else_statement = NULL; - } - ; - -condition: - expression - { - $$ = (ast_node *) $1; - } - | fully_specified_type any_identifier '=' initializer - { - void *ctx = state->linalloc; - ast_declaration *decl = new(ctx) ast_declaration($2, NULL, $4); - ast_declarator_list *declarator = new(ctx) ast_declarator_list($1); - decl->set_location_range(@2, @4); - declarator->set_location(@1); - - declarator->declarations.push_tail(&decl->link); - $$ = declarator; - } - ; - -/* - * switch_statement grammar is based on the syntax described in the body - * of the GLSL spec, not in it's appendix!!! - */ -switch_statement: - SWITCH '(' expression ')' switch_body - { - $$ = new(state->linalloc) ast_switch_statement($3, $5); - $$->set_location_range(@1, @5); - } - ; - -switch_body: - '{' '}' - { - $$ = new(state->linalloc) ast_switch_body(NULL); - $$->set_location_range(@1, @2); - } - | '{' case_statement_list '}' - { - $$ = new(state->linalloc) ast_switch_body($2); - $$->set_location_range(@1, @3); - } - ; - -case_label: - CASE expression ':' - { - $$ = new(state->linalloc) ast_case_label($2); - $$->set_location(@2); - } - | DEFAULT ':' - { - $$ = new(state->linalloc) ast_case_label(NULL); - $$->set_location(@2); - } - ; - -case_label_list: - case_label - { - ast_case_label_list *labels = new(state->linalloc) ast_case_label_list(); - - labels->labels.push_tail(& $1->link); - $$ = labels; - $$->set_location(@1); - } - | case_label_list case_label - { - $$ = $1; - $$->labels.push_tail(& $2->link); - } - ; - -case_statement: - case_label_list statement - { - ast_case_statement *stmts = new(state->linalloc) ast_case_statement($1); - stmts->set_location(@2); - - stmts->stmts.push_tail(& $2->link); - $$ = stmts; - } - | case_statement statement - { - $$ = $1; - $$->stmts.push_tail(& $2->link); - } - ; - -case_statement_list: - case_statement - { - ast_case_statement_list *cases= new(state->linalloc) ast_case_statement_list(); - cases->set_location(@1); - - cases->cases.push_tail(& $1->link); - $$ = cases; - } - | case_statement_list case_statement - { - $$ = $1; - $$->cases.push_tail(& $2->link); - } - ; - -iteration_statement: - WHILE '(' condition ')' statement_no_new_scope - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while, - NULL, $3, NULL, $5); - $$->set_location_range(@1, @4); - } - | DO statement_no_new_scope WHILE '(' expression ')' ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while, - NULL, $5, NULL, $2); - $$->set_location_range(@1, @6); - } - | FOR '(' for_init_statement for_rest_statement ')' statement_no_new_scope - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for, - $3, $4.cond, $4.rest, $6); - $$->set_location_range(@1, @6); - } - ; - -for_init_statement: - expression_statement - | declaration_statement - ; - -conditionopt: - condition - | /* empty */ - { - $$ = NULL; - } - ; - -for_rest_statement: - conditionopt ';' - { - $$.cond = $1; - $$.rest = NULL; - } - | conditionopt ';' expression - { - $$.cond = $1; - $$.rest = $3; - } - ; - - // Grammar Note: No 'goto'. Gotos are not supported. -jump_statement: - CONTINUE ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL); - $$->set_location(@1); - } - | BREAK ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL); - $$->set_location(@1); - } - | RETURN ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL); - $$->set_location(@1); - } - | RETURN expression ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, $2); - $$->set_location_range(@1, @2); - } - | DISCARD ';' // Fragment shader only. - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL); - $$->set_location(@1); - } - ; - -demote_statement: - DEMOTE ';' - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_demote_statement(); - $$->set_location(@1); - } - ; - -external_declaration: - function_definition { $$ = $1; } - | declaration { $$ = $1; } - | pragma_statement { $$ = $1; } - | layout_defaults { $$ = $1; } - | ';' { $$ = NULL; } - ; - -function_definition: - function_prototype compound_statement_no_new_scope - { - void *ctx = state->linalloc; - $$ = new(ctx) ast_function_definition(); - $$->set_location_range(@1, @2); - $$->prototype = $1; - $$->body = $2; - - state->symbols->pop_scope(); - } - ; - -/* layout_qualifieropt is packed into this rule */ -interface_block: - basic_interface_block - { - $$ = $1; - } - | layout_qualifier interface_block - { - ast_interface_block *block = (ast_interface_block *) $2; - - if (!$1.merge_qualifier(& @1, state, block->layout, false, - block->layout.has_layout())) { - YYERROR; - } - - block->layout = $1; - - $$ = block; - } - | memory_qualifier interface_block - { - ast_interface_block *block = (ast_interface_block *)$2; - - if (!block->default_layout.flags.q.buffer) { - _mesa_glsl_error(& @1, state, - "memory qualifiers can only be used in the " - "declaration of shader storage blocks"); - } - if (!$1.merge_qualifier(& @1, state, block->layout, false)) { - YYERROR; - } - block->layout = $1; - $$ = block; - } - ; - -basic_interface_block: - interface_qualifier NEW_IDENTIFIER '{' member_list '}' instance_name_opt ';' - { - ast_interface_block *const block = $6; - - if ($1.flags.q.uniform) { - block->default_layout = *state->default_uniform_qualifier; - } else if ($1.flags.q.buffer) { - block->default_layout = *state->default_shader_storage_qualifier; - } - block->block_name = $2; - block->declarations.push_degenerate_list_at_head(& $4->link); - - _mesa_ast_process_interface_block(& @1, state, block, $1); - - $$ = block; - } - ; - -interface_qualifier: - IN_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.in = 1; - } - | OUT_TOK - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.out = 1; - } - | UNIFORM - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.uniform = 1; - } - | BUFFER - { - memset(& $$, 0, sizeof($$)); - $$.flags.q.buffer = 1; - } - | auxiliary_storage_qualifier interface_qualifier - { - if (!$1.flags.q.patch) { - _mesa_glsl_error(&@1, state, "invalid interface qualifier"); - } - if ($2.has_auxiliary_storage()) { - _mesa_glsl_error(&@1, state, "duplicate patch qualifier"); - } - $$ = $2; - $$.flags.q.patch = 1; - } - ; - -instance_name_opt: - /* empty */ - { - $$ = new(state->linalloc) ast_interface_block(NULL, NULL); - } - | NEW_IDENTIFIER - { - $$ = new(state->linalloc) ast_interface_block($1, NULL); - $$->set_location(@1); - } - | NEW_IDENTIFIER array_specifier - { - $$ = new(state->linalloc) ast_interface_block($1, $2); - $$->set_location_range(@1, @2); - } - ; - -member_list: - member_declaration - { - $$ = $1; - $1->link.self_link(); - } - | member_declaration member_list - { - $$ = $1; - $2->link.insert_before(& $$->link); - } - ; - -member_declaration: - fully_specified_type struct_declarator_list ';' - { - void *ctx = state->linalloc; - ast_fully_specified_type *type = $1; - type->set_location(@1); - - if (type->qualifier.flags.q.attribute) { - _mesa_glsl_error(& @1, state, - "keyword 'attribute' cannot be used with " - "interface block member"); - } else if (type->qualifier.flags.q.varying) { - _mesa_glsl_error(& @1, state, - "keyword 'varying' cannot be used with " - "interface block member"); - } - - $$ = new(ctx) ast_declarator_list(type); - $$->set_location(@2); - - $$->declarations.push_degenerate_list_at_head(& $2->link); - } - ; - -layout_uniform_defaults: - layout_qualifier layout_uniform_defaults - { - $$ = $1; - if (!$$.merge_qualifier(& @1, state, $2, false, true)) { - YYERROR; - } - } - | layout_qualifier UNIFORM ';' - ; - -layout_buffer_defaults: - layout_qualifier layout_buffer_defaults - { - $$ = $1; - if (!$$.merge_qualifier(& @1, state, $2, false, true)) { - YYERROR; - } - } - | layout_qualifier BUFFER ';' - ; - -layout_in_defaults: - layout_qualifier layout_in_defaults - { - $$ = $1; - if (!$$.merge_qualifier(& @1, state, $2, false, true)) { - YYERROR; - } - if (!$$.validate_in_qualifier(& @1, state)) { - YYERROR; - } - } - | layout_qualifier IN_TOK ';' - { - if (!$1.validate_in_qualifier(& @1, state)) { - YYERROR; - } - } - ; - -layout_out_defaults: - layout_qualifier layout_out_defaults - { - $$ = $1; - if (!$$.merge_qualifier(& @1, state, $2, false, true)) { - YYERROR; - } - if (!$$.validate_out_qualifier(& @1, state)) { - YYERROR; - } - } - | layout_qualifier OUT_TOK ';' - { - if (!$1.validate_out_qualifier(& @1, state)) { - YYERROR; - } - } - ; - -layout_defaults: - layout_uniform_defaults - { - $$ = NULL; - if (!state->default_uniform_qualifier-> - merge_qualifier(& @1, state, $1, false)) { - YYERROR; - } - if (!state->default_uniform_qualifier-> - push_to_global(& @1, state)) { - YYERROR; - } - } - | layout_buffer_defaults - { - $$ = NULL; - if (!state->default_shader_storage_qualifier-> - merge_qualifier(& @1, state, $1, false)) { - YYERROR; - } - if (!state->default_shader_storage_qualifier-> - push_to_global(& @1, state)) { - YYERROR; - } - - /* From the GLSL 4.50 spec, section 4.4.5: - * - * "It is a compile-time error to specify the binding identifier for - * the global scope or for block member declarations." - */ - if (state->default_shader_storage_qualifier->flags.q.explicit_binding) { - _mesa_glsl_error(& @1, state, - "binding qualifier cannot be set for default layout"); - } - } - | layout_in_defaults - { - $$ = NULL; - if (!$1.merge_into_in_qualifier(& @1, state, $$)) { - YYERROR; - } - if (!state->in_qualifier->push_to_global(& @1, state)) { - YYERROR; - } - } - | layout_out_defaults - { - $$ = NULL; - if (!$1.merge_into_out_qualifier(& @1, state, $$)) { - YYERROR; - } - if (!state->out_qualifier->push_to_global(& @1, state)) { - YYERROR; - } - - (void)yynerrs; - } - ; diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser_extras.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser_extras.cpp deleted file mode 100644 index a77f580..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser_extras.cpp +++ /dev/null @@ -1,2418 +0,0 @@ -/* - * Copyright © 2008, 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include /* for PRIx64 macro */ -#include -#include -#include -#include - -#include "../../mesa/main/context.h" -#include "../../mesa/main/debug_output.h" -#include "../../mesa/main/formats.h" -#include "../../mesa/main/shaderobj.h" -#include "../../util/u_atomic.h" /* for p_atomic_cmpxchg */ -#include "../../util/ralloc.h" -#include "../../util/disk_cache.h" -#include "../../util/mesa-sha1.h" -#include "ast.h" -#include "glsl_parser_extras.h" -#include "glsl_parser.h" -#include "ir_optimization.h" -#include "builtin_functions.h" -#include "../../util/compiler.h" - -/** - * Format a short human-readable description of the given GLSL version. - */ -const char * -glsl_compute_version_string(void *mem_ctx, bool is_es, unsigned version) -{ - return ralloc_asprintf(mem_ctx, "GLSL%s %d.%02d", is_es ? " ES" : "", - version / 100, version % 100); -} - - -static const unsigned known_desktop_glsl_versions[] = - { 110, 120, 130, 140, 150, 330, 400, 410, 420, 430, 440, 450, 460 }; -static const unsigned known_desktop_gl_versions[] = - { 20, 21, 30, 31, 32, 33, 40, 41, 42, 43, 44, 45, 46 }; - - -_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, - gl_shader_stage stage, - void *mem_ctx) - : ctx(_ctx), exts(&_ctx->Extensions), consts(&_ctx->Const), - api(_ctx->API), cs_input_local_size_specified(false), cs_input_local_size(), - switch_state(), warnings_enabled(true) -{ - assert(stage < MESA_SHADER_STAGES); - this->stage = stage; - - this->scanner = NULL; - this->translation_unit.make_empty(); - this->symbols = new(mem_ctx) glsl_symbol_table; - - this->linalloc = linear_alloc_parent(this, 0); - - this->info_log = ralloc_strdup(mem_ctx, ""); - this->error = false; - this->loop_nesting_ast = NULL; - - this->uses_builtin_functions = true; - - /* Set default language version and extensions */ - this->language_version = 110; - this->forced_language_version = ctx->Const.ForceGLSLVersion; - if (ctx->Const.GLSLZeroInit == 1) { - this->zero_init = (1u << ir_var_auto) | (1u << ir_var_temporary) | (1u << ir_var_shader_out); - } else if (ctx->Const.GLSLZeroInit == 2) { - this->zero_init = (1u << ir_var_auto) | (1u << ir_var_temporary) | (1u << ir_var_function_out); - } else { - this->zero_init = 0; - } - this->gl_version = 20; - this->compat_shader = true; - this->es_shader = false; - this->ARB_texture_rectangle_enable = true; - - /* OpenGL ES 2.0 has different defaults from desktop GL. */ - if (_mesa_is_gles2(ctx)) { - this->language_version = 100; - this->es_shader = true; - this->ARB_texture_rectangle_enable = false; - } - - this->extensions = &ctx->Extensions; - - this->Const.MaxLights = ctx->Const.MaxLights; - this->Const.MaxClipPlanes = ctx->Const.MaxClipPlanes; - this->Const.MaxTextureUnits = ctx->Const.MaxTextureUnits; - this->Const.MaxTextureCoords = ctx->Const.MaxTextureCoordUnits; - this->Const.MaxVertexAttribs = ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs; - this->Const.MaxVertexUniformComponents = ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents; - this->Const.MaxVertexTextureImageUnits = ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits; - this->Const.MaxCombinedTextureImageUnits = ctx->Const.MaxCombinedTextureImageUnits; - this->Const.MaxTextureImageUnits = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits; - this->Const.MaxFragmentUniformComponents = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents; - this->Const.MinProgramTexelOffset = ctx->Const.MinProgramTexelOffset; - this->Const.MaxProgramTexelOffset = ctx->Const.MaxProgramTexelOffset; - - this->Const.MaxDrawBuffers = ctx->Const.MaxDrawBuffers; - - this->Const.MaxDualSourceDrawBuffers = ctx->Const.MaxDualSourceDrawBuffers; - - /* 1.50 constants */ - this->Const.MaxVertexOutputComponents = ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents; - this->Const.MaxGeometryInputComponents = ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxInputComponents; - this->Const.MaxGeometryOutputComponents = ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxOutputComponents; - this->Const.MaxGeometryShaderInvocations = ctx->Const.MaxGeometryShaderInvocations; - this->Const.MaxFragmentInputComponents = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents; - this->Const.MaxGeometryTextureImageUnits = ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxTextureImageUnits; - this->Const.MaxGeometryOutputVertices = ctx->Const.MaxGeometryOutputVertices; - this->Const.MaxGeometryTotalOutputComponents = ctx->Const.MaxGeometryTotalOutputComponents; - this->Const.MaxGeometryUniformComponents = ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxUniformComponents; - - this->Const.MaxVertexAtomicCounters = ctx->Const.Program[MESA_SHADER_VERTEX].MaxAtomicCounters; - this->Const.MaxTessControlAtomicCounters = ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxAtomicCounters; - this->Const.MaxTessEvaluationAtomicCounters = ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxAtomicCounters; - this->Const.MaxGeometryAtomicCounters = ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxAtomicCounters; - this->Const.MaxFragmentAtomicCounters = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters; - this->Const.MaxComputeAtomicCounters = ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicCounters; - this->Const.MaxCombinedAtomicCounters = ctx->Const.MaxCombinedAtomicCounters; - this->Const.MaxAtomicBufferBindings = ctx->Const.MaxAtomicBufferBindings; - this->Const.MaxVertexAtomicCounterBuffers = - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAtomicBuffers; - this->Const.MaxTessControlAtomicCounterBuffers = - ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxAtomicBuffers; - this->Const.MaxTessEvaluationAtomicCounterBuffers = - ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxAtomicBuffers; - this->Const.MaxGeometryAtomicCounterBuffers = - ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxAtomicBuffers; - this->Const.MaxFragmentAtomicCounterBuffers = - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers; - this->Const.MaxComputeAtomicCounterBuffers = - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxAtomicBuffers; - this->Const.MaxCombinedAtomicCounterBuffers = - ctx->Const.MaxCombinedAtomicBuffers; - this->Const.MaxAtomicCounterBufferSize = - ctx->Const.MaxAtomicBufferSize; - - /* ARB_enhanced_layouts constants */ - this->Const.MaxTransformFeedbackBuffers = ctx->Const.MaxTransformFeedbackBuffers; - this->Const.MaxTransformFeedbackInterleavedComponents = ctx->Const.MaxTransformFeedbackInterleavedComponents; - - /* Compute shader constants */ - for (unsigned i = 0; i < ARRAY_SIZE(this->Const.MaxComputeWorkGroupCount); i++) - this->Const.MaxComputeWorkGroupCount[i] = ctx->Const.MaxComputeWorkGroupCount[i]; - for (unsigned i = 0; i < ARRAY_SIZE(this->Const.MaxComputeWorkGroupSize); i++) - this->Const.MaxComputeWorkGroupSize[i] = ctx->Const.MaxComputeWorkGroupSize[i]; - - this->Const.MaxComputeTextureImageUnits = ctx->Const.Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits; - this->Const.MaxComputeUniformComponents = ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents; - - this->Const.MaxImageUnits = ctx->Const.MaxImageUnits; - this->Const.MaxCombinedShaderOutputResources = ctx->Const.MaxCombinedShaderOutputResources; - this->Const.MaxImageSamples = ctx->Const.MaxImageSamples; - this->Const.MaxVertexImageUniforms = ctx->Const.Program[MESA_SHADER_VERTEX].MaxImageUniforms; - this->Const.MaxTessControlImageUniforms = ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxImageUniforms; - this->Const.MaxTessEvaluationImageUniforms = ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxImageUniforms; - this->Const.MaxGeometryImageUniforms = ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxImageUniforms; - this->Const.MaxFragmentImageUniforms = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxImageUniforms; - this->Const.MaxComputeImageUniforms = ctx->Const.Program[MESA_SHADER_COMPUTE].MaxImageUniforms; - this->Const.MaxCombinedImageUniforms = ctx->Const.MaxCombinedImageUniforms; - - /* ARB_viewport_array */ - this->Const.MaxViewports = ctx->Const.MaxViewports; - - /* tessellation shader constants */ - this->Const.MaxPatchVertices = ctx->Const.MaxPatchVertices; - this->Const.MaxTessGenLevel = ctx->Const.MaxTessGenLevel; - this->Const.MaxTessControlInputComponents = ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxInputComponents; - this->Const.MaxTessControlOutputComponents = ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxOutputComponents; - this->Const.MaxTessControlTextureImageUnits = ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxTextureImageUnits; - this->Const.MaxTessEvaluationInputComponents = ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxInputComponents; - this->Const.MaxTessEvaluationOutputComponents = ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxOutputComponents; - this->Const.MaxTessEvaluationTextureImageUnits = ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxTextureImageUnits; - this->Const.MaxTessPatchComponents = ctx->Const.MaxTessPatchComponents; - this->Const.MaxTessControlTotalOutputComponents = ctx->Const.MaxTessControlTotalOutputComponents; - this->Const.MaxTessControlUniformComponents = ctx->Const.Program[MESA_SHADER_TESS_CTRL].MaxUniformComponents; - this->Const.MaxTessEvaluationUniformComponents = ctx->Const.Program[MESA_SHADER_TESS_EVAL].MaxUniformComponents; - - /* GL 4.5 / OES_sample_variables */ - this->Const.MaxSamples = ctx->Const.MaxSamples; - - this->current_function = NULL; - this->toplevel_ir = NULL; - this->found_return = false; - this->found_begin_interlock = false; - this->found_end_interlock = false; - this->all_invariant = false; - this->user_structures = NULL; - this->num_user_structures = 0; - this->num_subroutines = 0; - this->subroutines = NULL; - this->num_subroutine_types = 0; - this->subroutine_types = NULL; - - /* supported_versions should be large enough to support the known desktop - * GLSL versions plus 4 GLES versions (ES 1.00, ES 3.00, ES 3.10, ES 3.20) - */ - STATIC_ASSERT((ARRAY_SIZE(known_desktop_glsl_versions) + 4) == - ARRAY_SIZE(this->supported_versions)); - - /* Populate the list of supported GLSL versions */ - /* FINISHME: Once the OpenGL 3.0 'forward compatible' context or - * the OpenGL 3.2 Core context is supported, this logic will need - * change. Older versions of GLSL are no longer supported - * outside the compatibility contexts of 3.x. - */ - this->num_supported_versions = 0; - if (_mesa_is_desktop_gl(ctx)) { - for (unsigned i = 0; i < ARRAY_SIZE(known_desktop_glsl_versions); i++) { - if (known_desktop_glsl_versions[i] <= ctx->Const.GLSLVersion) { - this->supported_versions[this->num_supported_versions].ver - = known_desktop_glsl_versions[i]; - this->supported_versions[this->num_supported_versions].gl_ver - = known_desktop_gl_versions[i]; - this->supported_versions[this->num_supported_versions].es = false; - this->num_supported_versions++; - } - } - } - if (_mesa_is_gles2(ctx) || ctx->Extensions.ARB_ES2_compatibility) { - this->supported_versions[this->num_supported_versions].ver = 100; - this->supported_versions[this->num_supported_versions].gl_ver = 20; - this->supported_versions[this->num_supported_versions].es = true; - this->num_supported_versions++; - } - if (_mesa_is_gles3(ctx) || ctx->Extensions.ARB_ES3_compatibility) { - this->supported_versions[this->num_supported_versions].ver = 300; - this->supported_versions[this->num_supported_versions].gl_ver = 30; - this->supported_versions[this->num_supported_versions].es = true; - this->num_supported_versions++; - } - if (_mesa_is_gles31(ctx) || ctx->Extensions.ARB_ES3_1_compatibility) { - this->supported_versions[this->num_supported_versions].ver = 310; - this->supported_versions[this->num_supported_versions].gl_ver = 31; - this->supported_versions[this->num_supported_versions].es = true; - this->num_supported_versions++; - } - if (_mesa_is_gles32(ctx) || - ctx->Extensions.ARB_ES3_2_compatibility) { - this->supported_versions[this->num_supported_versions].ver = 320; - this->supported_versions[this->num_supported_versions].gl_ver = 32; - this->supported_versions[this->num_supported_versions].es = true; - this->num_supported_versions++; - } - - /* Create a string for use in error messages to tell the user which GLSL - * versions are supported. - */ - char *supported = ralloc_strdup(this, ""); - for (unsigned i = 0; i < this->num_supported_versions; i++) { - unsigned ver = this->supported_versions[i].ver; - const char *const prefix = (i == 0) - ? "" - : ((i == this->num_supported_versions - 1) ? ", and " : ", "); - const char *const suffix = (this->supported_versions[i].es) ? " ES" : ""; - - ralloc_asprintf_append(& supported, "%s%u.%02u%s", - prefix, - ver / 100, ver % 100, - suffix); - } - - this->supported_version_string = supported; - - if (ctx->Const.ForceGLSLExtensionsWarn) - _mesa_glsl_process_extension("all", NULL, "warn", NULL, this); - - this->default_uniform_qualifier = new(this) ast_type_qualifier(); - this->default_uniform_qualifier->flags.q.shared = 1; - this->default_uniform_qualifier->flags.q.column_major = 1; - - this->default_shader_storage_qualifier = new(this) ast_type_qualifier(); - this->default_shader_storage_qualifier->flags.q.shared = 1; - this->default_shader_storage_qualifier->flags.q.column_major = 1; - - this->fs_uses_gl_fragcoord = false; - this->fs_redeclares_gl_fragcoord = false; - this->fs_origin_upper_left = false; - this->fs_pixel_center_integer = false; - this->fs_redeclares_gl_fragcoord_with_no_layout_qualifiers = false; - - this->gs_input_prim_type_specified = false; - this->tcs_output_vertices_specified = false; - this->gs_input_size = 0; - this->in_qualifier = new(this) ast_type_qualifier(); - this->out_qualifier = new(this) ast_type_qualifier(); - this->fs_early_fragment_tests = false; - this->fs_inner_coverage = false; - this->fs_post_depth_coverage = false; - this->fs_pixel_interlock_ordered = false; - this->fs_pixel_interlock_unordered = false; - this->fs_sample_interlock_ordered = false; - this->fs_sample_interlock_unordered = false; - this->fs_blend_support = 0; - memset(this->atomic_counter_offsets, 0, - sizeof(this->atomic_counter_offsets)); - this->allow_extension_directive_midshader = - ctx->Const.AllowGLSLExtensionDirectiveMidShader; - this->allow_glsl_120_subset_in_110 = - ctx->Const.AllowGLSL120SubsetIn110; - this->allow_builtin_variable_redeclaration = - ctx->Const.AllowGLSLBuiltinVariableRedeclaration; - this->ignore_write_to_readonly_var = - ctx->Const.GLSLIgnoreWriteToReadonlyVar; - - this->cs_input_local_size_variable_specified = false; - - /* ARB_bindless_texture */ - this->bindless_sampler_specified = false; - this->bindless_image_specified = false; - this->bound_sampler_specified = false; - this->bound_image_specified = false; - - this->language_version = this->forced_language_version ? - this->forced_language_version : this->language_version; - set_valid_gl_and_glsl_versions(NULL); -} - -/** - * Determine whether the current GLSL version is sufficiently high to support - * a certain feature, and generate an error message if it isn't. - * - * \param required_glsl_version and \c required_glsl_es_version are - * interpreted as they are in _mesa_glsl_parse_state::is_version(). - * - * \param locp is the parser location where the error should be reported. - * - * \param fmt (and additional arguments) constitute a printf-style error - * message to report if the version check fails. Information about the - * current and required GLSL versions will be appended. So, for example, if - * the GLSL version being compiled is 1.20, and check_version(130, 300, locp, - * "foo unsupported") is called, the error message will be "foo unsupported in - * GLSL 1.20 (GLSL 1.30 or GLSL 3.00 ES required)". - */ -bool -_mesa_glsl_parse_state::check_version(unsigned required_glsl_version, - unsigned required_glsl_es_version, - YYLTYPE *locp, const char *fmt, ...) -{ - if (this->is_version(required_glsl_version, required_glsl_es_version)) - return true; - - va_list args; - va_start(args, fmt); - char *problem = ralloc_vasprintf(this, fmt, args); - va_end(args); - const char *glsl_version_string - = glsl_compute_version_string(this, false, required_glsl_version); - const char *glsl_es_version_string - = glsl_compute_version_string(this, true, required_glsl_es_version); - const char *requirement_string = ""; - if (required_glsl_version && required_glsl_es_version) { - requirement_string = ralloc_asprintf(this, " (%s or %s required)", - glsl_version_string, - glsl_es_version_string); - } else if (required_glsl_version) { - requirement_string = ralloc_asprintf(this, " (%s required)", - glsl_version_string); - } else if (required_glsl_es_version) { - requirement_string = ralloc_asprintf(this, " (%s required)", - glsl_es_version_string); - } - _mesa_glsl_error(locp, this, "%s in %s%s", - problem, this->get_version_string(), - requirement_string); - - return false; -} - -/** - * This makes sure any GLSL versions defined or overridden are valid. If not it - * sets a valid value. - */ -void -_mesa_glsl_parse_state::set_valid_gl_and_glsl_versions(YYLTYPE *locp) -{ - bool supported = false; - for (unsigned i = 0; i < this->num_supported_versions; i++) { - if (this->supported_versions[i].ver == this->language_version - && this->supported_versions[i].es == this->es_shader) { - this->gl_version = this->supported_versions[i].gl_ver; - supported = true; - break; - } - } - - if (!supported) { - if (locp) { - _mesa_glsl_error(locp, this, "%s is not supported. " - "Supported versions are: %s", - this->get_version_string(), - this->supported_version_string); - } - - /* On exit, the language_version must be set to a valid value. - * Later calls to _mesa_glsl_initialize_types will misbehave if - * the version is invalid. - */ - switch (this->api) { - case API_OPENGL_COMPAT: - case API_OPENGL_CORE: - this->language_version = this->consts->GLSLVersion; - break; - - case API_OPENGLES: - break; - - case API_OPENGLES2: - this->language_version = 100; - break; - } - } -} - -/** - * Process a GLSL #version directive. - * - * \param version is the integer that follows the #version token. - * - * \param ident is a string identifier that follows the integer, if any is - * present. Otherwise NULL. - */ -void -_mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version, - const char *ident) -{ - bool es_token_present = false; - bool compat_token_present = false; - if (ident) { - if (strcmp(ident, "es") == 0) { - es_token_present = true; - } else if (version >= 150) { - if (strcmp(ident, "core") == 0) { - /* Accept the token. There's no need to record that this is - * a core profile shader since that's the only profile we support. - */ - } else if (strcmp(ident, "compatibility") == 0) { - compat_token_present = true; - - if (this->api != API_OPENGL_COMPAT && - !this->consts->AllowGLSLCompatShaders) { - _mesa_glsl_error(locp, this, - "the compatibility profile is not supported"); - } - } else { - _mesa_glsl_error(locp, this, - "\"%s\" is not a valid shading language profile; " - "if present, it must be \"core\"", ident); - } - } else { - _mesa_glsl_error(locp, this, - "illegal text following version number"); - } - } - - this->es_shader = es_token_present; - if (version == 100) { - if (es_token_present) { - _mesa_glsl_error(locp, this, - "GLSL 1.00 ES should be selected using " - "`#version 100'"); - } else { - this->es_shader = true; - } - } - - if (this->es_shader) { - this->ARB_texture_rectangle_enable = false; - } - - if (this->forced_language_version) - this->language_version = this->forced_language_version; - else - this->language_version = version; - - this->compat_shader = compat_token_present || - this->consts->ForceCompatShaders || - (this->api == API_OPENGL_COMPAT && - this->language_version == 140) || - (!this->es_shader && this->language_version < 140); - - set_valid_gl_and_glsl_versions(locp); -} - - -/* This helper function will append the given message to the shader's - info log and report it via GL_ARB_debug_output. Per that extension, - 'type' is one of the enum values classifying the message, and - 'id' is the implementation-defined ID of the given message. */ -static void -_mesa_glsl_msg(const YYLTYPE *locp, _mesa_glsl_parse_state *state, - GLenum type, const char *fmt, va_list ap) -{ - bool error = (type == MESA_DEBUG_TYPE_ERROR); - GLuint msg_id = 0; - - assert(state->info_log != NULL); - - /* Get the offset that the new message will be written to. */ - int msg_offset = strlen(state->info_log); - - if (locp->path) { - ralloc_asprintf_append(&state->info_log, "\"%s\"", locp->path); - } else { - ralloc_asprintf_append(&state->info_log, "%u", locp->source); - } - ralloc_asprintf_append(&state->info_log, ":%u(%u): %s: ", - locp->first_line, locp->first_column, - error ? "error" : "warning"); - - ralloc_vasprintf_append(&state->info_log, fmt, ap); - - const char *const msg = &state->info_log[msg_offset]; - struct gl_context *ctx = state->ctx; - - /* Report the error via GL_ARB_debug_output. */ - _mesa_shader_debug(ctx, type, &msg_id, msg); - - ralloc_strcat(&state->info_log, "\n"); -} - -void -_mesa_glsl_error(YYLTYPE *locp, _mesa_glsl_parse_state *state, - const char *fmt, ...) -{ - va_list ap; - - state->error = true; - - va_start(ap, fmt); - _mesa_glsl_msg(locp, state, MESA_DEBUG_TYPE_ERROR, fmt, ap); - va_end(ap); -} - - -void -_mesa_glsl_warning(const YYLTYPE *locp, _mesa_glsl_parse_state *state, - const char *fmt, ...) -{ - if (state->warnings_enabled) { - va_list ap; - - va_start(ap, fmt); - _mesa_glsl_msg(locp, state, MESA_DEBUG_TYPE_OTHER, fmt, ap); - va_end(ap); - } -} - - -/** - * Enum representing the possible behaviors that can be specified in - * an #extension directive. - */ -enum ext_behavior { - extension_disable, - extension_enable, - extension_require, - extension_warn -}; - -/** - * Element type for _mesa_glsl_supported_extensions - */ -struct _mesa_glsl_extension { - /** - * Name of the extension when referred to in a GLSL extension - * statement - */ - const char *name; - - /** - * Whether this extension is a part of AEP - */ - bool aep; - - /** - * Predicate that checks whether the relevant extension is available for - * this context. - */ - bool (*available_pred)(const struct gl_extensions *, - gl_api api, uint8_t version); - - /** - * Flag in the _mesa_glsl_parse_state struct that should be set - * when this extension is enabled. - * - * See note in _mesa_glsl_extension::supported_flag about "pointer - * to member" types. - */ - bool _mesa_glsl_parse_state::* enable_flag; - - /** - * Flag in the _mesa_glsl_parse_state struct that should be set - * when the shader requests "warn" behavior for this extension. - * - * See note in _mesa_glsl_extension::supported_flag about "pointer - * to member" types. - */ - bool _mesa_glsl_parse_state::* warn_flag; - - - bool compatible_with_state(const _mesa_glsl_parse_state *state, - gl_api api, uint8_t gl_version) const; - void set_flags(_mesa_glsl_parse_state *state, ext_behavior behavior) const; -}; - -/** Checks if the context supports a user-facing extension */ -#define EXT(name_str, driver_cap, ...) \ -static UNUSED bool \ -has_##name_str(const struct gl_extensions *exts, gl_api api, uint8_t version) \ -{ \ - return exts->driver_cap && (version >= \ - _mesa_extension_table[MESA_EXTENSION_##name_str].version[api]); \ -} -#include "../../mesa/main/extensions_table.h" -#undef EXT - -#define EXT(NAME) \ - { "GL_" #NAME, false, has_##NAME, \ - &_mesa_glsl_parse_state::NAME##_enable, \ - &_mesa_glsl_parse_state::NAME##_warn } - -#define EXT_AEP(NAME) \ - { "GL_" #NAME, true, has_##NAME, \ - &_mesa_glsl_parse_state::NAME##_enable, \ - &_mesa_glsl_parse_state::NAME##_warn } - -/** - * Table of extensions that can be enabled/disabled within a shader, - * and the conditions under which they are supported. - */ -static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = { - /* ARB extensions go here, sorted alphabetically. - */ - EXT(ARB_ES3_1_compatibility), - EXT(ARB_ES3_2_compatibility), - EXT(ARB_arrays_of_arrays), - EXT(ARB_bindless_texture), - EXT(ARB_compatibility), - EXT(ARB_compute_shader), - EXT(ARB_compute_variable_group_size), - EXT(ARB_conservative_depth), - EXT(ARB_cull_distance), - EXT(ARB_derivative_control), - EXT(ARB_draw_buffers), - EXT(ARB_draw_instanced), - EXT(ARB_enhanced_layouts), - EXT(ARB_explicit_attrib_location), - EXT(ARB_explicit_uniform_location), - EXT(ARB_fragment_coord_conventions), - EXT(ARB_fragment_layer_viewport), - EXT(ARB_fragment_shader_interlock), - EXT(ARB_gpu_shader5), - EXT(ARB_gpu_shader_fp64), - EXT(ARB_gpu_shader_int64), - EXT(ARB_post_depth_coverage), - EXT(ARB_sample_shading), - EXT(ARB_separate_shader_objects), - EXT(ARB_shader_atomic_counter_ops), - EXT(ARB_shader_atomic_counters), - EXT(ARB_shader_ballot), - EXT(ARB_shader_bit_encoding), - EXT(ARB_shader_clock), - EXT(ARB_shader_draw_parameters), - EXT(ARB_shader_group_vote), - EXT(ARB_shader_image_load_store), - EXT(ARB_shader_image_size), - EXT(ARB_shader_precision), - EXT(ARB_shader_stencil_export), - EXT(ARB_shader_storage_buffer_object), - EXT(ARB_shader_subroutine), - EXT(ARB_shader_texture_image_samples), - EXT(ARB_shader_texture_lod), - EXT(ARB_shader_viewport_layer_array), - EXT(ARB_shading_language_420pack), - EXT(ARB_shading_language_include), - EXT(ARB_shading_language_packing), - EXT(ARB_sparse_texture2), - EXT(ARB_sparse_texture_clamp), - EXT(ARB_tessellation_shader), - EXT(ARB_texture_cube_map_array), - EXT(ARB_texture_gather), - EXT(ARB_texture_multisample), - EXT(ARB_texture_query_levels), - EXT(ARB_texture_query_lod), - EXT(ARB_texture_rectangle), - EXT(ARB_uniform_buffer_object), - EXT(ARB_vertex_attrib_64bit), - EXT(ARB_viewport_array), - - /* KHR extensions go here, sorted alphabetically. - */ - EXT_AEP(KHR_blend_equation_advanced), - - /* OES extensions go here, sorted alphabetically. - */ - EXT(OES_EGL_image_external), - EXT(OES_EGL_image_external_essl3), - EXT(OES_geometry_point_size), - EXT(OES_geometry_shader), - EXT(OES_gpu_shader5), - EXT(OES_primitive_bounding_box), - EXT_AEP(OES_sample_variables), - EXT_AEP(OES_shader_image_atomic), - EXT(OES_shader_io_blocks), - EXT_AEP(OES_shader_multisample_interpolation), - EXT(OES_standard_derivatives), - EXT(OES_tessellation_point_size), - EXT(OES_tessellation_shader), - EXT(OES_texture_3D), - EXT(OES_texture_buffer), - EXT(OES_texture_cube_map_array), - EXT_AEP(OES_texture_storage_multisample_2d_array), - EXT(OES_viewport_array), - - /* All other extensions go here, sorted alphabetically. - */ - EXT(AMD_conservative_depth), - EXT(AMD_gpu_shader_int64), - EXT(AMD_shader_stencil_export), - EXT(AMD_shader_trinary_minmax), - EXT(AMD_texture_texture4), - EXT(AMD_vertex_shader_layer), - EXT(AMD_vertex_shader_viewport_index), - EXT(ANDROID_extension_pack_es31a), - EXT(ARM_shader_framebuffer_fetch_depth_stencil), - EXT(EXT_blend_func_extended), - EXT(EXT_demote_to_helper_invocation), - EXT(EXT_frag_depth), - EXT(EXT_draw_buffers), - EXT(EXT_draw_instanced), - EXT(EXT_clip_cull_distance), - EXT(EXT_geometry_point_size), - EXT_AEP(EXT_geometry_shader), - EXT(EXT_gpu_shader4), - EXT_AEP(EXT_gpu_shader5), - EXT_AEP(EXT_primitive_bounding_box), - EXT(EXT_separate_shader_objects), - EXT(EXT_shader_framebuffer_fetch), - EXT(EXT_shader_framebuffer_fetch_non_coherent), - EXT(EXT_shader_group_vote), - EXT(EXT_shader_image_load_formatted), - EXT(EXT_shader_image_load_store), - EXT(EXT_shader_implicit_conversions), - EXT(EXT_shader_integer_mix), - EXT_AEP(EXT_shader_io_blocks), - EXT(EXT_shader_samples_identical), - EXT(EXT_tessellation_point_size), - EXT_AEP(EXT_tessellation_shader), - EXT(EXT_texture_array), - EXT_AEP(EXT_texture_buffer), - EXT_AEP(EXT_texture_cube_map_array), - EXT(EXT_texture_query_lod), - EXT(EXT_texture_shadow_lod), - EXT(INTEL_conservative_rasterization), - EXT(INTEL_shader_atomic_float_minmax), - EXT(INTEL_shader_integer_functions2), - EXT(MESA_shader_integer_functions), - EXT(NV_compute_shader_derivatives), - EXT(NV_fragment_shader_interlock), - EXT(NV_image_formats), - EXT(NV_shader_atomic_float), - EXT(NV_shader_atomic_int64), - EXT(NV_shader_noperspective_interpolation), - EXT(NV_viewport_array2), -}; - -#undef EXT - - -/** - * Determine whether a given extension is compatible with the target, - * API, and extension information in the current parser state. - */ -bool _mesa_glsl_extension::compatible_with_state( - const _mesa_glsl_parse_state *state, gl_api api, uint8_t gl_version) const -{ - return this->available_pred(state->exts, api, gl_version); -} - -/** - * Set the appropriate flags in the parser state to establish the - * given behavior for this extension. - */ -void _mesa_glsl_extension::set_flags(_mesa_glsl_parse_state *state, - ext_behavior behavior) const -{ - /* Note: the ->* operator indexes into state by the - * offsets this->enable_flag and this->warn_flag. See - * _mesa_glsl_extension::supported_flag for more info. - */ - state->*(this->enable_flag) = (behavior != extension_disable); - state->*(this->warn_flag) = (behavior == extension_warn); -} - -/** - * Find an extension by name in _mesa_glsl_supported_extensions. If - * the name is not found, return NULL. - */ -static const _mesa_glsl_extension *find_extension(const char *name) -{ - for (unsigned i = 0; i < ARRAY_SIZE(_mesa_glsl_supported_extensions); ++i) { - if (strcmp(name, _mesa_glsl_supported_extensions[i].name) == 0) { - return &_mesa_glsl_supported_extensions[i]; - } - } - return NULL; -} - -bool -_mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp, - const char *behavior_string, YYLTYPE *behavior_locp, - _mesa_glsl_parse_state *state) -{ - uint8_t gl_version = state->exts->Version; - gl_api api = state->api; - ext_behavior behavior; - if (strcmp(behavior_string, "warn") == 0) { - behavior = extension_warn; - } else if (strcmp(behavior_string, "require") == 0) { - behavior = extension_require; - } else if (strcmp(behavior_string, "enable") == 0) { - behavior = extension_enable; - } else if (strcmp(behavior_string, "disable") == 0) { - behavior = extension_disable; - } else { - _mesa_glsl_error(behavior_locp, state, - "unknown extension behavior `%s'", - behavior_string); - return false; - } - - /* If we're in a desktop context but with an ES shader, use an ES API enum - * to verify extension availability. - */ - if (state->es_shader && api != API_OPENGLES2) - api = API_OPENGLES2; - /* Use the language-version derived GL version to extension checks, unless - * we're using meta, which sets the version to the max. - */ - if (gl_version != 0xff) - gl_version = state->gl_version; - - if (strcmp(name, "all") == 0) { - if ((behavior == extension_enable) || (behavior == extension_require)) { - _mesa_glsl_error(name_locp, state, "cannot %s all extensions", - (behavior == extension_enable) - ? "enable" : "require"); - return false; - } else { - for (unsigned i = 0; - i < ARRAY_SIZE(_mesa_glsl_supported_extensions); ++i) { - const _mesa_glsl_extension *extension - = &_mesa_glsl_supported_extensions[i]; - if (extension->compatible_with_state(state, api, gl_version)) { - _mesa_glsl_supported_extensions[i].set_flags(state, behavior); - } - } - } - } else { - const _mesa_glsl_extension *extension = find_extension(name); - if (extension && - (extension->compatible_with_state(state, api, gl_version) || - (state->consts->AllowGLSLCompatShaders && - extension->compatible_with_state(state, API_OPENGL_COMPAT, gl_version)))) { - extension->set_flags(state, behavior); - if (extension->available_pred == has_ANDROID_extension_pack_es31a) { - for (unsigned i = 0; - i < ARRAY_SIZE(_mesa_glsl_supported_extensions); ++i) { - const _mesa_glsl_extension *extension = - &_mesa_glsl_supported_extensions[i]; - - if (!extension->aep) - continue; - /* AEP should not be enabled if all of the sub-extensions can't - * also be enabled. This is not the proper layer to do such - * error-checking though. - */ - assert(extension->compatible_with_state(state, api, gl_version)); - extension->set_flags(state, behavior); - } - } - } else { - static const char fmt[] = "extension `%s' unsupported in %s shader"; - - if (behavior == extension_require) { - _mesa_glsl_error(name_locp, state, fmt, - name, _mesa_shader_stage_to_string(state->stage)); - return false; - } else { - _mesa_glsl_warning(name_locp, state, fmt, - name, _mesa_shader_stage_to_string(state->stage)); - } - } - } - - return true; -} - - -/** - * Recurses through and if is an aggregate initializer - * and sets 's field to . Gives later functions - * (process_array_constructor, et al) sufficient information to do type - * checking. - * - * Operates on assignments involving an aggregate initializer. E.g., - * - * vec4 pos = {1.0, -1.0, 0.0, 1.0}; - * - * or more ridiculously, - * - * struct S { - * vec4 v[2]; - * }; - * - * struct { - * S a[2], b; - * int c; - * } aggregate = { - * { - * { - * { - * {1.0, 2.0, 3.0, 4.0}, // a[0].v[0] - * {5.0, 6.0, 7.0, 8.0} // a[0].v[1] - * } // a[0].v - * }, // a[0] - * { - * { - * {1.0, 2.0, 3.0, 4.0}, // a[1].v[0] - * {5.0, 6.0, 7.0, 8.0} // a[1].v[1] - * } // a[1].v - * } // a[1] - * }, // a - * { - * { - * {1.0, 2.0, 3.0, 4.0}, // b.v[0] - * {5.0, 6.0, 7.0, 8.0} // b.v[1] - * } // b.v - * }, // b - * 4 // c - * }; - * - * This pass is necessary because the right-hand side of e = { ... } - * doesn't contain sufficient information to determine if the types match. - */ -void -_mesa_ast_set_aggregate_type(const glsl_type *type, - ast_expression *expr) -{ - ast_aggregate_initializer *ai = (ast_aggregate_initializer *)expr; - ai->constructor_type = type; - - /* If the aggregate is an array, recursively set its elements' types. */ - if (type->is_array()) { - /* Each array element has the type type->fields.array. - * - * E.g., if if struct S[2] we want to set each element's type to - * struct S. - */ - for (exec_node *expr_node = ai->expressions.get_head_raw(); - !expr_node->is_tail_sentinel(); - expr_node = expr_node->next) { - ast_expression *expr = exec_node_data(ast_expression, expr_node, - link); - - if (expr->oper == ast_aggregate) - _mesa_ast_set_aggregate_type(type->fields.array, expr); - } - - /* If the aggregate is a struct, recursively set its fields' types. */ - } else if (type->is_struct()) { - exec_node *expr_node = ai->expressions.get_head_raw(); - - /* Iterate through the struct's fields. */ - for (unsigned i = 0; !expr_node->is_tail_sentinel() && i < type->length; - i++, expr_node = expr_node->next) { - ast_expression *expr = exec_node_data(ast_expression, expr_node, - link); - - if (expr->oper == ast_aggregate) { - _mesa_ast_set_aggregate_type(type->fields.structure[i].type, expr); - } - } - /* If the aggregate is a matrix, set its columns' types. */ - } else if (type->is_matrix()) { - for (exec_node *expr_node = ai->expressions.get_head_raw(); - !expr_node->is_tail_sentinel(); - expr_node = expr_node->next) { - ast_expression *expr = exec_node_data(ast_expression, expr_node, - link); - - if (expr->oper == ast_aggregate) - _mesa_ast_set_aggregate_type(type->column_type(), expr); - } - } -} - -void -_mesa_ast_process_interface_block(YYLTYPE *locp, - _mesa_glsl_parse_state *state, - ast_interface_block *const block, - const struct ast_type_qualifier &q) -{ - if (q.flags.q.buffer) { - if (!state->has_shader_storage_buffer_objects()) { - _mesa_glsl_error(locp, state, - "#version 430 / GL_ARB_shader_storage_buffer_object " - "required for defining shader storage blocks"); - } else if (state->ARB_shader_storage_buffer_object_warn) { - _mesa_glsl_warning(locp, state, - "#version 430 / GL_ARB_shader_storage_buffer_object " - "required for defining shader storage blocks"); - } - } else if (q.flags.q.uniform) { - if (!state->has_uniform_buffer_objects()) { - _mesa_glsl_error(locp, state, - "#version 140 / GL_ARB_uniform_buffer_object " - "required for defining uniform blocks"); - } else if (state->ARB_uniform_buffer_object_warn) { - _mesa_glsl_warning(locp, state, - "#version 140 / GL_ARB_uniform_buffer_object " - "required for defining uniform blocks"); - } - } else { - if (!state->has_shader_io_blocks()) { - if (state->es_shader) { - _mesa_glsl_error(locp, state, - "GL_OES_shader_io_blocks or #version 320 " - "required for using interface blocks"); - } else { - _mesa_glsl_error(locp, state, - "#version 150 required for using " - "interface blocks"); - } - } - } - - /* From the GLSL 1.50.11 spec, section 4.3.7 ("Interface Blocks"): - * "It is illegal to have an input block in a vertex shader - * or an output block in a fragment shader" - */ - if ((state->stage == MESA_SHADER_VERTEX) && q.flags.q.in) { - _mesa_glsl_error(locp, state, - "`in' interface block is not allowed for " - "a vertex shader"); - } else if ((state->stage == MESA_SHADER_FRAGMENT) && q.flags.q.out) { - _mesa_glsl_error(locp, state, - "`out' interface block is not allowed for " - "a fragment shader"); - } - - /* Since block arrays require names, and both features are added in - * the same language versions, we don't have to explicitly - * version-check both things. - */ - if (block->instance_name != NULL) { - state->check_version(150, 300, locp, "interface blocks with " - "an instance name are not allowed"); - } - - ast_type_qualifier::bitset_t interface_type_mask; - struct ast_type_qualifier temp_type_qualifier; - - /* Get a bitmask containing only the in/out/uniform/buffer - * flags, allowing us to ignore other irrelevant flags like - * interpolation qualifiers. - */ - temp_type_qualifier.flags.i = 0; - temp_type_qualifier.flags.q.uniform = true; - temp_type_qualifier.flags.q.in = true; - temp_type_qualifier.flags.q.out = true; - temp_type_qualifier.flags.q.buffer = true; - temp_type_qualifier.flags.q.patch = true; - interface_type_mask = temp_type_qualifier.flags.i; - - /* Get the block's interface qualifier. The interface_qualifier - * production rule guarantees that only one bit will be set (and - * it will be in/out/uniform). - */ - ast_type_qualifier::bitset_t block_interface_qualifier = q.flags.i; - - block->default_layout.flags.i |= block_interface_qualifier; - - if (state->stage == MESA_SHADER_GEOMETRY && - state->has_explicit_attrib_stream() && - block->default_layout.flags.q.out) { - /* Assign global layout's stream value. */ - block->default_layout.flags.q.stream = 1; - block->default_layout.flags.q.explicit_stream = 0; - block->default_layout.stream = state->out_qualifier->stream; - } - - if (state->has_enhanced_layouts() && block->default_layout.flags.q.out && - state->exts->ARB_transform_feedback3) { - /* Assign global layout's xfb_buffer value. */ - block->default_layout.flags.q.xfb_buffer = 1; - block->default_layout.flags.q.explicit_xfb_buffer = 0; - block->default_layout.xfb_buffer = state->out_qualifier->xfb_buffer; - } - - foreach_list_typed (ast_declarator_list, member, link, &block->declarations) { - ast_type_qualifier& qualifier = member->type->qualifier; - if ((qualifier.flags.i & interface_type_mask) == 0) { - /* GLSLangSpec.1.50.11, 4.3.7 (Interface Blocks): - * "If no optional qualifier is used in a member declaration, the - * qualifier of the variable is just in, out, or uniform as declared - * by interface-qualifier." - */ - qualifier.flags.i |= block_interface_qualifier; - } else if ((qualifier.flags.i & interface_type_mask) != - block_interface_qualifier) { - /* GLSLangSpec.1.50.11, 4.3.7 (Interface Blocks): - * "If optional qualifiers are used, they can include interpolation - * and storage qualifiers and they must declare an input, output, - * or uniform variable consistent with the interface qualifier of - * the block." - */ - _mesa_glsl_error(locp, state, - "uniform/in/out qualifier on " - "interface block member does not match " - "the interface block"); - } - - if (!(q.flags.q.in || q.flags.q.out) && qualifier.flags.q.invariant) - _mesa_glsl_error(locp, state, - "invariant qualifiers can be used only " - "in interface block members for shader " - "inputs or outputs"); - } -} - -static void -_mesa_ast_type_qualifier_print(const struct ast_type_qualifier *q) -{ - if (q->is_subroutine_decl()) - printf("subroutine "); - - if (q->subroutine_list) { - printf("subroutine ("); - q->subroutine_list->print(); - printf(")"); - } - - if (q->flags.q.constant) - printf("const "); - - if (q->flags.q.invariant) - printf("invariant "); - - if (q->flags.q.attribute) - printf("attribute "); - - if (q->flags.q.varying) - printf("varying "); - - if (q->flags.q.in && q->flags.q.out) - printf("inout "); - else { - if (q->flags.q.in) - printf("in "); - - if (q->flags.q.out) - printf("out "); - } - - if (q->flags.q.centroid) - printf("centroid "); - if (q->flags.q.sample) - printf("sample "); - if (q->flags.q.patch) - printf("patch "); - if (q->flags.q.uniform) - printf("uniform "); - if (q->flags.q.buffer) - printf("buffer "); - if (q->flags.q.smooth) - printf("smooth "); - if (q->flags.q.flat) - printf("flat "); - if (q->flags.q.noperspective) - printf("noperspective "); -} - - -void -ast_node::print(void) const -{ - printf("unhandled node "); -} - - -ast_node::ast_node(void) -{ - this->location.path = NULL; - this->location.source = 0; - this->location.first_line = 0; - this->location.first_column = 0; - this->location.last_line = 0; - this->location.last_column = 0; -} - - -static void -ast_opt_array_dimensions_print(const ast_array_specifier *array_specifier) -{ - if (array_specifier) - array_specifier->print(); -} - - -void -ast_compound_statement::print(void) const -{ - printf("{\n"); - - foreach_list_typed(ast_node, ast, link, &this->statements) { - ast->print(); - } - - printf("}\n"); -} - - -ast_compound_statement::ast_compound_statement(int new_scope, - ast_node *statements) -{ - this->new_scope = new_scope; - - if (statements != NULL) { - this->statements.push_degenerate_list_at_head(&statements->link); - } -} - - -void -ast_expression::print(void) const -{ - switch (oper) { - case ast_assign: - case ast_mul_assign: - case ast_div_assign: - case ast_mod_assign: - case ast_add_assign: - case ast_sub_assign: - case ast_ls_assign: - case ast_rs_assign: - case ast_and_assign: - case ast_xor_assign: - case ast_or_assign: - subexpressions[0]->print(); - printf("%s ", operator_string(oper)); - subexpressions[1]->print(); - break; - - case ast_field_selection: - subexpressions[0]->print(); - printf(". %s ", primary_expression.identifier); - break; - - case ast_plus: - case ast_neg: - case ast_bit_not: - case ast_logic_not: - case ast_pre_inc: - case ast_pre_dec: - printf("%s ", operator_string(oper)); - subexpressions[0]->print(); - break; - - case ast_post_inc: - case ast_post_dec: - subexpressions[0]->print(); - printf("%s ", operator_string(oper)); - break; - - case ast_conditional: - subexpressions[0]->print(); - printf("? "); - subexpressions[1]->print(); - printf(": "); - subexpressions[2]->print(); - break; - - case ast_array_index: - subexpressions[0]->print(); - printf("[ "); - subexpressions[1]->print(); - printf("] "); - break; - - case ast_function_call: { - subexpressions[0]->print(); - printf("( "); - - foreach_list_typed (ast_node, ast, link, &this->expressions) { - if (&ast->link != this->expressions.get_head()) - printf(", "); - - ast->print(); - } - - printf(") "); - break; - } - - case ast_identifier: - printf("%s ", primary_expression.identifier); - break; - - case ast_int_constant: - printf("%d ", primary_expression.int_constant); - break; - - case ast_uint_constant: - printf("%u ", primary_expression.uint_constant); - break; - - case ast_float_constant: - printf("%f ", primary_expression.float_constant); - break; - - case ast_double_constant: - printf("%f ", primary_expression.double_constant); - break; - - case ast_int64_constant: - printf("%" PRId64 " ", primary_expression.int64_constant); - break; - - case ast_uint64_constant: - printf("%" PRIu64 " ", primary_expression.uint64_constant); - break; - - case ast_bool_constant: - printf("%s ", - primary_expression.bool_constant - ? "true" : "false"); - break; - - case ast_sequence: { - printf("( "); - foreach_list_typed (ast_node, ast, link, & this->expressions) { - if (&ast->link != this->expressions.get_head()) - printf(", "); - - ast->print(); - } - printf(") "); - break; - } - - case ast_aggregate: { - printf("{ "); - foreach_list_typed (ast_node, ast, link, & this->expressions) { - if (&ast->link != this->expressions.get_head()) - printf(", "); - - ast->print(); - } - printf("} "); - break; - } - - default: - assert(0); - break; - } -} - -ast_expression::ast_expression(int oper, - ast_expression *ex0, - ast_expression *ex1, - ast_expression *ex2) : - primary_expression() -{ - this->oper = ast_operators(oper); - this->subexpressions[0] = ex0; - this->subexpressions[1] = ex1; - this->subexpressions[2] = ex2; - this->non_lvalue_description = NULL; - this->is_lhs = false; -} - - -void -ast_expression_statement::print(void) const -{ - if (expression) - expression->print(); - - printf("; "); -} - - -ast_expression_statement::ast_expression_statement(ast_expression *ex) : - expression(ex) -{ - /* empty */ -} - - -void -ast_function::print(void) const -{ - return_type->print(); - printf(" %s (", identifier); - - foreach_list_typed(ast_node, ast, link, & this->parameters) { - ast->print(); - } - - printf(")"); -} - - -ast_function::ast_function(void) - : return_type(NULL), identifier(NULL), is_definition(false), - signature(NULL) -{ - /* empty */ -} - - -void -ast_fully_specified_type::print(void) const -{ - _mesa_ast_type_qualifier_print(& qualifier); - specifier->print(); -} - - -void -ast_parameter_declarator::print(void) const -{ - type->print(); - if (identifier) - printf("%s ", identifier); - ast_opt_array_dimensions_print(array_specifier); -} - - -void -ast_function_definition::print(void) const -{ - prototype->print(); - body->print(); -} - - -void -ast_declaration::print(void) const -{ - printf("%s ", identifier); - ast_opt_array_dimensions_print(array_specifier); - - if (initializer) { - printf("= "); - initializer->print(); - } -} - - -ast_declaration::ast_declaration(const char *identifier, - ast_array_specifier *array_specifier, - ast_expression *initializer) -{ - this->identifier = identifier; - this->array_specifier = array_specifier; - this->initializer = initializer; -} - - -void -ast_declarator_list::print(void) const -{ - assert(type || invariant); - - if (type) - type->print(); - else if (invariant) - printf("invariant "); - else - printf("precise "); - - foreach_list_typed (ast_node, ast, link, & this->declarations) { - if (&ast->link != this->declarations.get_head()) - printf(", "); - - ast->print(); - } - - printf("; "); -} - - -ast_declarator_list::ast_declarator_list(ast_fully_specified_type *type) -{ - this->type = type; - this->invariant = false; - this->precise = false; -} - -void -ast_jump_statement::print(void) const -{ - switch (mode) { - case ast_continue: - printf("continue; "); - break; - case ast_break: - printf("break; "); - break; - case ast_return: - printf("return "); - if (opt_return_value) - opt_return_value->print(); - - printf("; "); - break; - case ast_discard: - printf("discard; "); - break; - } -} - - -ast_jump_statement::ast_jump_statement(int mode, ast_expression *return_value) - : opt_return_value(NULL) -{ - this->mode = ast_jump_modes(mode); - - if (mode == ast_return) - opt_return_value = return_value; -} - - -void -ast_demote_statement::print(void) const -{ - printf("demote; "); -} - - -void -ast_selection_statement::print(void) const -{ - printf("if ( "); - condition->print(); - printf(") "); - - then_statement->print(); - - if (else_statement) { - printf("else "); - else_statement->print(); - } -} - - -ast_selection_statement::ast_selection_statement(ast_expression *condition, - ast_node *then_statement, - ast_node *else_statement) -{ - this->condition = condition; - this->then_statement = then_statement; - this->else_statement = else_statement; -} - - -void -ast_switch_statement::print(void) const -{ - printf("switch ( "); - test_expression->print(); - printf(") "); - - body->print(); -} - - -ast_switch_statement::ast_switch_statement(ast_expression *test_expression, - ast_node *body) -{ - this->test_expression = test_expression; - this->body = body; - this->test_val = NULL; -} - - -void -ast_switch_body::print(void) const -{ - printf("{\n"); - if (stmts != NULL) { - stmts->print(); - } - printf("}\n"); -} - - -ast_switch_body::ast_switch_body(ast_case_statement_list *stmts) -{ - this->stmts = stmts; -} - - -void ast_case_label::print(void) const -{ - if (test_value != NULL) { - printf("case "); - test_value->print(); - printf(": "); - } else { - printf("default: "); - } -} - - -ast_case_label::ast_case_label(ast_expression *test_value) -{ - this->test_value = test_value; -} - - -void ast_case_label_list::print(void) const -{ - foreach_list_typed(ast_node, ast, link, & this->labels) { - ast->print(); - } - printf("\n"); -} - - -ast_case_label_list::ast_case_label_list(void) -{ -} - - -void ast_case_statement::print(void) const -{ - labels->print(); - foreach_list_typed(ast_node, ast, link, & this->stmts) { - ast->print(); - printf("\n"); - } -} - - -ast_case_statement::ast_case_statement(ast_case_label_list *labels) -{ - this->labels = labels; -} - - -void ast_case_statement_list::print(void) const -{ - foreach_list_typed(ast_node, ast, link, & this->cases) { - ast->print(); - } -} - - -ast_case_statement_list::ast_case_statement_list(void) -{ -} - - -void -ast_iteration_statement::print(void) const -{ - switch (mode) { - case ast_for: - printf("for( "); - if (init_statement) - init_statement->print(); - printf("; "); - - if (condition) - condition->print(); - printf("; "); - - if (rest_expression) - rest_expression->print(); - printf(") "); - - body->print(); - break; - - case ast_while: - printf("while ( "); - if (condition) - condition->print(); - printf(") "); - body->print(); - break; - - case ast_do_while: - printf("do "); - body->print(); - printf("while ( "); - if (condition) - condition->print(); - printf("); "); - break; - } -} - - -ast_iteration_statement::ast_iteration_statement(int mode, - ast_node *init, - ast_node *condition, - ast_expression *rest_expression, - ast_node *body) -{ - this->mode = ast_iteration_modes(mode); - this->init_statement = init; - this->condition = condition; - this->rest_expression = rest_expression; - this->body = body; -} - - -void -ast_struct_specifier::print(void) const -{ - printf("struct %s { ", name); - foreach_list_typed(ast_node, ast, link, &this->declarations) { - ast->print(); - } - printf("} "); -} - - -ast_struct_specifier::ast_struct_specifier(const char *identifier, - ast_declarator_list *declarator_list) - : name(identifier), layout(NULL), declarations(), is_declaration(true), - type(NULL) -{ - this->declarations.push_degenerate_list_at_head(&declarator_list->link); -} - -void ast_subroutine_list::print(void) const -{ - foreach_list_typed (ast_node, ast, link, & this->declarations) { - if (&ast->link != this->declarations.get_head()) - printf(", "); - ast->print(); - } -} - -static void -set_shader_inout_layout(struct gl_shader *shader, - struct _mesa_glsl_parse_state *state) -{ - /* Should have been prevented by the parser. */ - if (shader->Stage != MESA_SHADER_GEOMETRY && - shader->Stage != MESA_SHADER_TESS_EVAL && - shader->Stage != MESA_SHADER_COMPUTE) { - assert(!state->in_qualifier->flags.i); - } - - if (shader->Stage != MESA_SHADER_COMPUTE) { - /* Should have been prevented by the parser. */ - assert(!state->cs_input_local_size_specified); - assert(!state->cs_input_local_size_variable_specified); - assert(state->cs_derivative_group == DERIVATIVE_GROUP_NONE); - } - - if (shader->Stage != MESA_SHADER_FRAGMENT) { - /* Should have been prevented by the parser. */ - assert(!state->fs_uses_gl_fragcoord); - assert(!state->fs_redeclares_gl_fragcoord); - assert(!state->fs_pixel_center_integer); - assert(!state->fs_origin_upper_left); - assert(!state->fs_early_fragment_tests); - assert(!state->fs_inner_coverage); - assert(!state->fs_post_depth_coverage); - assert(!state->fs_pixel_interlock_ordered); - assert(!state->fs_pixel_interlock_unordered); - assert(!state->fs_sample_interlock_ordered); - assert(!state->fs_sample_interlock_unordered); - } - - for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) { - if (state->out_qualifier->out_xfb_stride[i]) { - unsigned xfb_stride; - if (state->out_qualifier->out_xfb_stride[i]-> - process_qualifier_constant(state, "xfb_stride", &xfb_stride, - true)) { - shader->TransformFeedbackBufferStride[i] = xfb_stride; - } - } - } - - switch (shader->Stage) { - case MESA_SHADER_TESS_CTRL: - shader->info.TessCtrl.VerticesOut = 0; - if (state->tcs_output_vertices_specified) { - unsigned vertices; - if (state->out_qualifier->vertices-> - process_qualifier_constant(state, "vertices", &vertices, - false)) { - - YYLTYPE loc = state->out_qualifier->vertices->get_location(); - if (vertices > state->Const.MaxPatchVertices) { - _mesa_glsl_error(&loc, state, "vertices (%d) exceeds " - "GL_MAX_PATCH_VERTICES", vertices); - } - shader->info.TessCtrl.VerticesOut = vertices; - } - } - break; - case MESA_SHADER_TESS_EVAL: - shader->OES_tessellation_point_size_enable = state->OES_tessellation_point_size_enable || state->EXT_tessellation_point_size_enable; - shader->info.TessEval._PrimitiveMode = TESS_PRIMITIVE_UNSPECIFIED; - if (state->in_qualifier->flags.q.prim_type) { - switch (state->in_qualifier->prim_type) { - case GL_TRIANGLES: - shader->info.TessEval._PrimitiveMode = TESS_PRIMITIVE_TRIANGLES; - break; - case GL_QUADS: - shader->info.TessEval._PrimitiveMode = TESS_PRIMITIVE_QUADS; - break; - case GL_ISOLINES: - shader->info.TessEval._PrimitiveMode = TESS_PRIMITIVE_ISOLINES; - break; - } - } - - shader->info.TessEval.Spacing = TESS_SPACING_UNSPECIFIED; - if (state->in_qualifier->flags.q.vertex_spacing) - shader->info.TessEval.Spacing = state->in_qualifier->vertex_spacing; - - shader->info.TessEval.VertexOrder = 0; - if (state->in_qualifier->flags.q.ordering) - shader->info.TessEval.VertexOrder = state->in_qualifier->ordering; - - shader->info.TessEval.PointMode = -1; - if (state->in_qualifier->flags.q.point_mode) - shader->info.TessEval.PointMode = state->in_qualifier->point_mode; - break; - case MESA_SHADER_GEOMETRY: - shader->OES_geometry_point_size_enable = state->OES_geometry_point_size_enable || state->EXT_geometry_point_size_enable; - shader->info.Geom.VerticesOut = -1; - if (state->out_qualifier->flags.q.max_vertices) { - unsigned qual_max_vertices; - if (state->out_qualifier->max_vertices-> - process_qualifier_constant(state, "max_vertices", - &qual_max_vertices, true)) { - - if (qual_max_vertices > state->Const.MaxGeometryOutputVertices) { - YYLTYPE loc = state->out_qualifier->max_vertices->get_location(); - _mesa_glsl_error(&loc, state, - "maximum output vertices (%d) exceeds " - "GL_MAX_GEOMETRY_OUTPUT_VERTICES", - qual_max_vertices); - } - shader->info.Geom.VerticesOut = qual_max_vertices; - } - } - - if (state->gs_input_prim_type_specified) { - shader->info.Geom.InputType = (enum shader_prim)state->in_qualifier->prim_type; - } else { - shader->info.Geom.InputType = SHADER_PRIM_UNKNOWN; - } - - if (state->out_qualifier->flags.q.prim_type) { - shader->info.Geom.OutputType = (enum shader_prim)state->out_qualifier->prim_type; - } else { - shader->info.Geom.OutputType = SHADER_PRIM_UNKNOWN; - } - - shader->info.Geom.Invocations = 0; - if (state->in_qualifier->flags.q.invocations) { - unsigned invocations; - if (state->in_qualifier->invocations-> - process_qualifier_constant(state, "invocations", - &invocations, false)) { - - YYLTYPE loc = state->in_qualifier->invocations->get_location(); - if (invocations > state->Const.MaxGeometryShaderInvocations) { - _mesa_glsl_error(&loc, state, - "invocations (%d) exceeds " - "GL_MAX_GEOMETRY_SHADER_INVOCATIONS", - invocations); - } - shader->info.Geom.Invocations = invocations; - } - } - break; - - case MESA_SHADER_COMPUTE: - if (state->cs_input_local_size_specified) { - for (int i = 0; i < 3; i++) - shader->info.Comp.LocalSize[i] = state->cs_input_local_size[i]; - } else { - for (int i = 0; i < 3; i++) - shader->info.Comp.LocalSize[i] = 0; - } - - shader->info.Comp.LocalSizeVariable = - state->cs_input_local_size_variable_specified; - - shader->info.Comp.DerivativeGroup = state->cs_derivative_group; - - if (state->NV_compute_shader_derivatives_enable) { - /* We allow multiple cs_input_layout nodes, but do not store them in - * a convenient place, so for now live with an empty location error. - */ - YYLTYPE loc = {0}; - if (shader->info.Comp.DerivativeGroup == DERIVATIVE_GROUP_QUADS) { - if (shader->info.Comp.LocalSize[0] % 2 != 0) { - _mesa_glsl_error(&loc, state, "derivative_group_quadsNV must be used with a " - "local group size whose first dimension " - "is a multiple of 2\n"); - } - if (shader->info.Comp.LocalSize[1] % 2 != 0) { - _mesa_glsl_error(&loc, state, "derivative_group_quadsNV must be used with a " - "local group size whose second dimension " - "is a multiple of 2\n"); - } - } else if (shader->info.Comp.DerivativeGroup == DERIVATIVE_GROUP_LINEAR) { - if ((shader->info.Comp.LocalSize[0] * - shader->info.Comp.LocalSize[1] * - shader->info.Comp.LocalSize[2]) % 4 != 0) { - _mesa_glsl_error(&loc, state, "derivative_group_linearNV must be used with a " - "local group size whose total number of invocations " - "is a multiple of 4\n"); - } - } - } - - break; - - case MESA_SHADER_FRAGMENT: - shader->redeclares_gl_fragcoord = state->fs_redeclares_gl_fragcoord; - shader->uses_gl_fragcoord = state->fs_uses_gl_fragcoord; - shader->pixel_center_integer = state->fs_pixel_center_integer; - shader->origin_upper_left = state->fs_origin_upper_left; - shader->ARB_fragment_coord_conventions_enable = - state->ARB_fragment_coord_conventions_enable; - shader->EarlyFragmentTests = state->fs_early_fragment_tests; - shader->InnerCoverage = state->fs_inner_coverage; - shader->PostDepthCoverage = state->fs_post_depth_coverage; - shader->PixelInterlockOrdered = state->fs_pixel_interlock_ordered; - shader->PixelInterlockUnordered = state->fs_pixel_interlock_unordered; - shader->SampleInterlockOrdered = state->fs_sample_interlock_ordered; - shader->SampleInterlockUnordered = state->fs_sample_interlock_unordered; - shader->BlendSupport = state->fs_blend_support; - break; - - default: - /* Nothing to do. */ - break; - } - - shader->bindless_sampler = state->bindless_sampler_specified; - shader->bindless_image = state->bindless_image_specified; - shader->bound_sampler = state->bound_sampler_specified; - shader->bound_image = state->bound_image_specified; - shader->redeclares_gl_layer = state->redeclares_gl_layer; - shader->layer_viewport_relative = state->layer_viewport_relative; -} - -/* src can be NULL if only the symbols found in the exec_list should be - * copied - */ -void -_mesa_glsl_copy_symbols_from_table(struct exec_list *shader_ir, - struct glsl_symbol_table *src, - struct glsl_symbol_table *dest) -{ - foreach_in_list (ir_instruction, ir, shader_ir) { - switch (ir->ir_type) { - case ir_type_function: - dest->add_function((ir_function *) ir); - break; - case ir_type_variable: { - ir_variable *const var = (ir_variable *) ir; - - if (var->data.mode != ir_var_temporary) - dest->add_variable(var); - break; - } - default: - break; - } - } - - if (src != NULL) { - /* Explicitly copy the gl_PerVertex interface definitions because these - * are needed to check they are the same during the interstage link. - * They can’t necessarily be found via the exec_list because the members - * might not be referenced. The GL spec still requires that they match - * in that case. - */ - const glsl_type *iface = - src->get_interface("gl_PerVertex", ir_var_shader_in); - if (iface) - dest->add_interface(iface->name, iface, ir_var_shader_in); - - iface = src->get_interface("gl_PerVertex", ir_var_shader_out); - if (iface) - dest->add_interface(iface->name, iface, ir_var_shader_out); - } -} - -extern "C" { - -static void -assign_subroutine_indexes(struct _mesa_glsl_parse_state *state) -{ - int j, k; - int index = 0; - - for (j = 0; j < state->num_subroutines; j++) { - while (state->subroutines[j]->subroutine_index == -1) { - for (k = 0; k < state->num_subroutines; k++) { - if (state->subroutines[k]->subroutine_index == index) - break; - else if (k == state->num_subroutines - 1) { - state->subroutines[j]->subroutine_index = index; - } - } - index++; - } - } -} - -void -add_builtin_defines(struct _mesa_glsl_parse_state *state, - void (*add_builtin_define)(struct glcpp_parser *, const char *, int), - struct glcpp_parser *data, - unsigned version, - bool es) -{ - unsigned gl_version = state->exts->Version; - gl_api api = state->api; - - if (gl_version != 0xff) { - unsigned i; - for (i = 0; i < state->num_supported_versions; i++) { - if (state->supported_versions[i].ver == version && - state->supported_versions[i].es == es) { - gl_version = state->supported_versions[i].gl_ver; - break; - } - } - - if (i == state->num_supported_versions) - return; - } - - if (es) - api = API_OPENGLES2; - - for (unsigned i = 0; - i < ARRAY_SIZE(_mesa_glsl_supported_extensions); ++i) { - const _mesa_glsl_extension *extension - = &_mesa_glsl_supported_extensions[i]; - if (extension->compatible_with_state(state, api, gl_version)) { - add_builtin_define(data, extension->name, 1); - } - } -} - -/* Implements parsing checks that we can't do during parsing */ -static void -do_late_parsing_checks(struct _mesa_glsl_parse_state *state) -{ - if (state->stage == MESA_SHADER_COMPUTE && !state->has_compute_shader()) { - YYLTYPE loc; - memset(&loc, 0, sizeof(loc)); - _mesa_glsl_error(&loc, state, "Compute shaders require " - "GLSL 4.30 or GLSL ES 3.10"); - } -} - -static void -opt_shader_and_create_symbol_table(const struct gl_constants *consts, - struct glsl_symbol_table *source_symbols, - struct gl_shader *shader) -{ - assert(shader->CompileStatus != COMPILE_FAILURE && - !shader->ir->is_empty()); - - const struct gl_shader_compiler_options *options = - &consts->ShaderCompilerOptions[shader->Stage]; - - /* Do some optimization at compile time to reduce shader IR size - * and reduce later work if the same shader is linked multiple times. - * - * Run it just once, since NIR will do the real optimization. - */ - do_common_optimization(shader->ir, false, options, consts->NativeIntegers); - - validate_ir_tree(shader->ir); - - enum ir_variable_mode other; - switch (shader->Stage) { - case MESA_SHADER_VERTEX: - other = ir_var_shader_in; - break; - case MESA_SHADER_FRAGMENT: - other = ir_var_shader_out; - break; - default: - /* Something invalid to ensure optimize_dead_builtin_uniforms - * doesn't remove anything other than uniforms or constants. - */ - other = ir_var_mode_count; - break; - } - - optimize_dead_builtin_variables(shader->ir, other); - - validate_ir_tree(shader->ir); - - /* Retain any live IR, but trash the rest. */ - reparent_ir(shader->ir, shader->ir); - - /* Destroy the symbol table. Create a new symbol table that contains only - * the variables and functions that still exist in the IR. The symbol - * table will be used later during linking. - * - * There must NOT be any freed objects still referenced by the symbol - * table. That could cause the linker to dereference freed memory. - * - * We don't have to worry about types or interface-types here because those - * are fly-weights that are looked up by glsl_type. - */ - _mesa_glsl_copy_symbols_from_table(shader->ir, source_symbols, - shader->symbols); -} - -static bool -can_skip_compile(struct gl_context *ctx, struct gl_shader *shader, - const char *source, - const uint8_t source_sha1[SHA1_DIGEST_LENGTH], - bool force_recompile, bool source_has_shader_include) -{ - if (!force_recompile) { - if (ctx->Cache) { - char buf[41]; - disk_cache_compute_key(ctx->Cache, source, strlen(source), - shader->disk_cache_sha1); - if (disk_cache_has_key(ctx->Cache, shader->disk_cache_sha1)) { - /* We've seen this shader before and know it compiles */ - if (ctx->_Shader->Flags & GLSL_CACHE_INFO) { - _mesa_sha1_format(buf, shader->disk_cache_sha1); - fprintf(stderr, "deferring compile of shader: %s\n", buf); - } - shader->CompileStatus = COMPILE_SKIPPED; - - free((void *)shader->FallbackSource); - - /* Copy pre-processed shader include to fallback source otherwise - * we have no guarantee the shader include source tree has not - * changed. - */ - if (source_has_shader_include) { - shader->FallbackSource = strdup(source); - memcpy(shader->fallback_source_sha1, source_sha1, - SHA1_DIGEST_LENGTH); - } else { - shader->FallbackSource = NULL; - } - memcpy(shader->compiled_source_sha1, source_sha1, - SHA1_DIGEST_LENGTH); - return true; - } - } - } else { - /* We should only ever end up here if a re-compile has been forced by a - * shader cache miss. In which case we can skip the compile if its - * already been done by a previous fallback or the initial compile call. - */ - if (shader->CompileStatus == COMPILE_SUCCESS) - return true; - } - - return false; -} - -void -_mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, - bool dump_ast, bool dump_hir, bool force_recompile) -{ - const char *source; - const uint8_t *source_sha1; - - if (force_recompile && shader->FallbackSource) { - source = shader->FallbackSource; - source_sha1 = shader->fallback_source_sha1; - } else { - source = shader->Source; - source_sha1 = shader->source_sha1; - } - - /* Note this will be true for shaders the have #include inside comments - * however that should be rare enough not to worry about. - */ - bool source_has_shader_include = - strstr(source, "#include") == NULL ? false : true; - - /* If there was no shader include we can check the shader cache and skip - * compilation before we run the preprocessor. We never skip compiling - * shaders that use ARB_shading_language_include because we would need to - * keep duplicate copies of the shader include source tree and paths. - */ - if (!source_has_shader_include && - can_skip_compile(ctx, shader, source, source_sha1, force_recompile, - false)) - return; - - struct _mesa_glsl_parse_state *state = - new(shader) _mesa_glsl_parse_state(ctx, shader->Stage, shader); - - if (ctx->Const.GenerateTemporaryNames) - (void) p_atomic_cmpxchg(&ir_variable::temporaries_allocate_names, - false, true); - - if (!source_has_shader_include || !force_recompile) { - state->error = glcpp_preprocess(state, &source, &state->info_log, - add_builtin_defines, state, ctx); - } - - /* Now that we have run the preprocessor we can check the shader cache and - * skip compilation if possible for those shaders that contained a shader - * include. - */ - if (source_has_shader_include && - can_skip_compile(ctx, shader, source, source_sha1, force_recompile, - true)) - return; - - if (!state->error) { - _mesa_glsl_lexer_ctor(state, source); - _mesa_glsl_parse(state); - _mesa_glsl_lexer_dtor(state); - do_late_parsing_checks(state); - } - - if (dump_ast) { - foreach_list_typed(ast_node, ast, link, &state->translation_unit) { - ast->print(); - } - printf("\n\n"); - } - - ralloc_free(shader->ir); - shader->ir = new(shader) exec_list; - if (!state->error && !state->translation_unit.is_empty()) - _mesa_ast_to_hir(shader->ir, state); - - if (!state->error) { - validate_ir_tree(shader->ir); - - /* Print out the unoptimized IR. */ - if (dump_hir) { - _mesa_print_ir(stdout, shader->ir, state); - } - } - - if (shader->InfoLog) - ralloc_free(shader->InfoLog); - - if (!state->error) - set_shader_inout_layout(shader, state); - - shader->symbols = new(shader->ir) glsl_symbol_table; - shader->CompileStatus = state->error ? COMPILE_FAILURE : COMPILE_SUCCESS; - shader->InfoLog = state->info_log; - shader->Version = state->language_version; - shader->IsES = state->es_shader; - - struct gl_shader_compiler_options *options = - &ctx->Const.ShaderCompilerOptions[shader->Stage]; - - if (!state->error && !shader->ir->is_empty()) { - if (state->es_shader && - (options->LowerPrecisionFloat16 || options->LowerPrecisionInt16)) - lower_precision(options, shader->ir); - lower_builtins(shader->ir); - assign_subroutine_indexes(state); - lower_subroutine(shader->ir, state); - opt_shader_and_create_symbol_table(&ctx->Const, state->symbols, shader); - } - - if (!force_recompile) { - free((void *)shader->FallbackSource); - - /* Copy pre-processed shader include to fallback source otherwise we - * have no guarantee the shader include source tree has not changed. - */ - if (source_has_shader_include) { - shader->FallbackSource = strdup(source); - memcpy(shader->fallback_source_sha1, source_sha1, SHA1_DIGEST_LENGTH); - } else { - shader->FallbackSource = NULL; - } - } - - delete state->symbols; - ralloc_free(state); - - if (shader->CompileStatus == COMPILE_SUCCESS) - memcpy(shader->compiled_source_sha1, source_sha1, SHA1_DIGEST_LENGTH); - - if (ctx->Cache && shader->CompileStatus == COMPILE_SUCCESS) { - char sha1_buf[41]; - disk_cache_put_key(ctx->Cache, shader->disk_cache_sha1); - if (ctx->_Shader->Flags & GLSL_CACHE_INFO) { - _mesa_sha1_format(sha1_buf, shader->disk_cache_sha1); - fprintf(stderr, "marking shader: %s\n", sha1_buf); - } - } -} - -} /* extern "C" */ -/** - * Do the set of common optimizations passes - * - * \param ir List of instructions to be optimized - * \param linked Is the shader linked? This enables - * optimizations passes that remove code at - * global scope and could cause linking to - * fail. - * \param uniform_locations_assigned Have locations already been assigned for - * uniforms? This prevents the declarations - * of unused uniforms from being removed. - * The setting of this flag only matters if - * \c linked is \c true. - * \param options The driver's preferred shader options. - * \param native_integers Selects optimizations that depend on the - * implementations supporting integers - * natively (as opposed to supporting - * integers in floating point registers). - */ -bool -do_common_optimization(exec_list *ir, bool linked, - const struct gl_shader_compiler_options *options, - bool native_integers) -{ - const bool debug = false; - bool progress = false; - -#define OPT(PASS, ...) do { \ - if (debug) { \ - fprintf(stderr, "START GLSL optimization %s\n", #PASS); \ - const bool opt_progress = PASS(__VA_ARGS__); \ - progress = opt_progress || progress; \ - if (opt_progress) \ - _mesa_print_ir(stderr, ir, NULL); \ - fprintf(stderr, "GLSL optimization %s: %s progress\n", \ - #PASS, opt_progress ? "made" : "no"); \ - } else { \ - progress = PASS(__VA_ARGS__) || progress; \ - } \ - } while (false) - - if (linked) { - OPT(do_function_inlining, ir); - OPT(do_dead_functions, ir); - } - OPT(propagate_invariance, ir); - OPT(do_if_simplification, ir); - OPT(opt_flatten_nested_if_blocks, ir); - - if (options->OptimizeForAOS && !linked) - OPT(opt_flip_matrices, ir); - - if (linked) - OPT(do_dead_code, ir); - else - OPT(do_dead_code_unlinked, ir); - OPT(do_dead_code_local, ir); - OPT(do_tree_grafting, ir); - OPT(do_minmax_prune, ir); - OPT(do_rebalance_tree, ir); - OPT(do_algebraic, ir, native_integers, options); - OPT(do_lower_jumps, ir, true, true, options->EmitNoMainReturn, - options->EmitNoCont); - - /* If an optimization pass fails to preserve the invariant flag, calling - * the pass only once earlier may result in incorrect code generation. Always call - * propagate_invariance() last to avoid this possibility. - */ - OPT(propagate_invariance, ir); - -#undef OPT - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser_extras.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser_extras.h deleted file mode 100644 index ed26721..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_parser_extras.h +++ /dev/null @@ -1,1094 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_PARSER_EXTRAS_H -#define GLSL_PARSER_EXTRAS_H - -/* - * Most of the definitions here only apply to C++ - */ -#ifdef __cplusplus - - -#include -#include "glsl_symbol_table.h" - -#ifdef __cplusplus -extern "C" { -#endif -extern void add_builtin_defines(struct _mesa_glsl_parse_state *state, - void(*add_builtin_define)(struct glcpp_parser *, const char *, int), - struct glcpp_parser *data, - unsigned version, - bool es); -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* THIS is a macro defined somewhere deep in the Windows MSVC header files. - * Undefine it here to avoid collision with the lexer's THIS token. - */ -#undef THIS - -struct gl_context; - -struct glsl_switch_state { - /** Temporary variables needed for switch statement. */ - ir_variable *test_var; - ir_variable *is_fallthru_var; - class ast_switch_statement *switch_nesting_ast; - - /** Used to detect if 'continue' was called inside a switch. */ - ir_variable *continue_inside; - - /** Used to set condition if 'default' label should be chosen. */ - ir_variable *run_default; - - /** Table of constant values already used in case labels */ - struct hash_table *labels_ht; - class ast_case_label *previous_default; - - bool is_switch_innermost; // if switch stmt is closest to break, ... -}; - -const char * -glsl_compute_version_string(void *mem_ctx, bool is_es, unsigned version); - -typedef struct YYLTYPE { - int first_line; - int first_column; - int last_line; - int last_column; - unsigned source; - /* Path for ARB_shading_language_include include source */ - char *path; -} YYLTYPE; -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 - -extern void _mesa_glsl_error(YYLTYPE *locp, _mesa_glsl_parse_state *state, - const char *fmt, ...); - - -struct _mesa_glsl_parse_state { - _mesa_glsl_parse_state(struct gl_context *_ctx, gl_shader_stage stage, - void *mem_ctx); - - DECLARE_RZALLOC_CXX_OPERATORS(_mesa_glsl_parse_state); - - /** - * Generate a string representing the GLSL version currently being compiled - * (useful for error messages). - */ - const char *get_version_string() - { - return glsl_compute_version_string(this, this->es_shader, - this->language_version); - } - - /** - * Determine whether the current GLSL version is sufficiently high to - * support a certain feature. - * - * \param required_glsl_version is the desktop GLSL version that is - * required to support the feature, or 0 if no version of desktop GLSL - * supports the feature. - * - * \param required_glsl_es_version is the GLSL ES version that is required - * to support the feature, or 0 if no version of GLSL ES supports the - * feature. - */ - bool is_version(unsigned required_glsl_version, - unsigned required_glsl_es_version) const - { - unsigned required_version = this->es_shader ? - required_glsl_es_version : required_glsl_version; - unsigned this_version = this->forced_language_version - ? this->forced_language_version : this->language_version; - return required_version != 0 - && this_version >= required_version; - } - - bool check_version(unsigned required_glsl_version, - unsigned required_glsl_es_version, - YYLTYPE *locp, const char *fmt, ...) PRINTFLIKE(5, 6); - - bool check_arrays_of_arrays_allowed(YYLTYPE *locp) - { - if (!(ARB_arrays_of_arrays_enable || is_version(430, 310))) { - const char *const requirement = this->es_shader - ? "GLSL ES 3.10" - : "GL_ARB_arrays_of_arrays or GLSL 4.30"; - _mesa_glsl_error(locp, this, - "%s required for defining arrays of arrays.", - requirement); - return false; - } - return true; - } - - bool check_precision_qualifiers_allowed(YYLTYPE *locp) - { - return check_version(100, 100, locp, - "precision qualifiers are forbidden"); - } - - bool check_bitwise_operations_allowed(YYLTYPE *locp) - { - return EXT_gpu_shader4_enable || - check_version(130, 300, locp, "bit-wise operations are forbidden"); - } - - bool check_explicit_attrib_stream_allowed(YYLTYPE *locp) - { - if (!this->has_explicit_attrib_stream()) { - const char *const requirement = "GL_ARB_gpu_shader5 extension or GLSL 4.00"; - - _mesa_glsl_error(locp, this, "explicit stream requires %s", - requirement); - return false; - } - - return true; - } - - bool check_explicit_attrib_location_allowed(YYLTYPE *locp, - const ir_variable *var) - { - if (!this->has_explicit_attrib_location()) { - const char *const requirement = this->es_shader - ? "GLSL ES 3.00" - : "GL_ARB_explicit_attrib_location extension or GLSL 3.30"; - - _mesa_glsl_error(locp, this, "%s explicit location requires %s", - mode_string(var), requirement); - return false; - } - - return true; - } - - bool check_separate_shader_objects_allowed(YYLTYPE *locp, - const ir_variable *var) - { - if (!this->has_separate_shader_objects()) { - const char *const requirement = this->es_shader - ? "GL_EXT_separate_shader_objects extension or GLSL ES 3.10" - : "GL_ARB_separate_shader_objects extension or GLSL 4.20"; - - _mesa_glsl_error(locp, this, "%s explicit location requires %s", - mode_string(var), requirement); - return false; - } - - return true; - } - - bool check_explicit_uniform_location_allowed(YYLTYPE *locp, - const ir_variable *) - { - if (!this->has_explicit_attrib_location() || - !this->has_explicit_uniform_location()) { - const char *const requirement = this->es_shader - ? "GLSL ES 3.10" - : "GL_ARB_explicit_uniform_location and either " - "GL_ARB_explicit_attrib_location or GLSL 3.30."; - - _mesa_glsl_error(locp, this, - "uniform explicit location requires %s", - requirement); - return false; - } - - return true; - } - - bool has_atomic_counters() const - { - return ARB_shader_atomic_counters_enable || is_version(420, 310); - } - - bool has_enhanced_layouts() const - { - return ARB_enhanced_layouts_enable || is_version(440, 0); - } - - bool has_explicit_attrib_stream() const - { - return ARB_gpu_shader5_enable || is_version(400, 0); - } - - bool has_explicit_attrib_location() const - { - return ARB_explicit_attrib_location_enable || is_version(330, 300); - } - - bool has_explicit_uniform_location() const - { - return ARB_explicit_uniform_location_enable || is_version(430, 310); - } - - bool has_uniform_buffer_objects() const - { - return ARB_uniform_buffer_object_enable || is_version(140, 300); - } - - bool has_shader_storage_buffer_objects() const - { - return ARB_shader_storage_buffer_object_enable || is_version(430, 310); - } - - bool has_separate_shader_objects() const - { - return ARB_separate_shader_objects_enable || is_version(410, 310) - || EXT_separate_shader_objects_enable; - } - - bool has_double() const - { - return ARB_gpu_shader_fp64_enable || is_version(400, 0); - } - - bool has_int64() const - { - return ARB_gpu_shader_int64_enable || - AMD_gpu_shader_int64_enable; - } - - bool has_420pack() const - { - return ARB_shading_language_420pack_enable || is_version(420, 0); - } - - bool has_420pack_or_es31() const - { - return ARB_shading_language_420pack_enable || is_version(420, 310); - } - - bool has_compute_shader() const - { - return ARB_compute_shader_enable || is_version(430, 310); - } - - bool has_shader_io_blocks() const - { - /* The OES_geometry_shader_specification says: - * - * "If the OES_geometry_shader extension is enabled, the - * OES_shader_io_blocks extension is also implicitly enabled." - * - * The OES_tessellation_shader extension has similar wording. - */ - return OES_shader_io_blocks_enable || - EXT_shader_io_blocks_enable || - OES_geometry_shader_enable || - EXT_geometry_shader_enable || - OES_tessellation_shader_enable || - EXT_tessellation_shader_enable || - - is_version(150, 320); - } - - bool has_geometry_shader() const - { - return OES_geometry_shader_enable || EXT_geometry_shader_enable || - is_version(150, 320); - } - - bool has_tessellation_shader() const - { - return ARB_tessellation_shader_enable || - OES_tessellation_shader_enable || - EXT_tessellation_shader_enable || - is_version(400, 320); - } - - bool has_clip_distance() const - { - return EXT_clip_cull_distance_enable || is_version(130, 0); - } - - bool has_cull_distance() const - { - return EXT_clip_cull_distance_enable || - ARB_cull_distance_enable || - is_version(450, 0); - } - - bool has_framebuffer_fetch() const - { - return EXT_shader_framebuffer_fetch_enable || - EXT_shader_framebuffer_fetch_non_coherent_enable; - } - - bool has_framebuffer_fetch_zs() const - { - return ARM_shader_framebuffer_fetch_depth_stencil_enable; - } - - bool has_texture_cube_map_array() const - { - return ARB_texture_cube_map_array_enable || - EXT_texture_cube_map_array_enable || - OES_texture_cube_map_array_enable || - is_version(400, 320); - } - - bool has_shader_image_load_store() const - { - return ARB_shader_image_load_store_enable || - EXT_shader_image_load_store_enable || - is_version(420, 310); - } - - bool has_bindless() const - { - return ARB_bindless_texture_enable; - } - - bool has_image_load_formatted() const - { - return EXT_shader_image_load_formatted_enable; - } - - bool has_implicit_conversions() const - { - return EXT_shader_implicit_conversions_enable || - is_version(allow_glsl_120_subset_in_110 ? 110 : 120, 0); - } - - bool has_implicit_int_to_uint_conversion() const - { - return ARB_gpu_shader5_enable || - MESA_shader_integer_functions_enable || - EXT_shader_implicit_conversions_enable || - is_version(400, 0); - } - - void set_valid_gl_and_glsl_versions(YYLTYPE *locp); - - void process_version_directive(YYLTYPE *locp, int version, - const char *ident); - - struct gl_context *const ctx; /* only to be used for debug callback. */ - const struct gl_extensions *exts; - const struct gl_constants *consts; - gl_api api; - void *scanner; - exec_list translation_unit; - glsl_symbol_table *symbols; - - void *linalloc; - - unsigned num_supported_versions; - struct { - unsigned ver; - uint8_t gl_ver; - bool es; - } supported_versions[17]; - - bool es_shader; - bool compat_shader; - unsigned language_version; - unsigned forced_language_version; - unsigned original_language_version; - /* Bitfield of ir_variable_mode to zero init */ - uint32_t zero_init; - unsigned gl_version; - gl_shader_stage stage; - - /** - * Default uniform layout qualifiers tracked during parsing. - * Currently affects uniform blocks and uniform buffer variables in - * those blocks. - */ - struct ast_type_qualifier *default_uniform_qualifier; - - /** - * Default shader storage layout qualifiers tracked during parsing. - * Currently affects shader storage blocks and shader storage buffer - * variables in those blocks. - */ - struct ast_type_qualifier *default_shader_storage_qualifier; - - /** - * Variables to track different cases if a fragment shader redeclares - * built-in variable gl_FragCoord. - * - * Note: These values are computed at ast_to_hir time rather than at parse - * time. - */ - bool fs_redeclares_gl_fragcoord; - bool fs_origin_upper_left; - bool fs_pixel_center_integer; - bool fs_redeclares_gl_fragcoord_with_no_layout_qualifiers; - - /** - * True if a geometry shader input primitive type or tessellation control - * output vertices were specified using a layout directive. - * - * Note: these values are computed at ast_to_hir time rather than at parse - * time. - */ - bool gs_input_prim_type_specified; - bool tcs_output_vertices_specified; - - /** - * Input layout qualifiers from GLSL 1.50 (geometry shader controls), - * and GLSL 4.00 (tessellation evaluation shader) - */ - struct ast_type_qualifier *in_qualifier; - - /** - * True if a compute shader input local size was specified using a layout - * directive. - * - * Note: this value is computed at ast_to_hir time rather than at parse - * time. - */ - bool cs_input_local_size_specified; - - /** - * If cs_input_local_size_specified is true, the local size that was - * specified. Otherwise ignored. - */ - unsigned cs_input_local_size[3]; - - /** - * True if a compute shader input local variable size was specified using - * a layout directive as specified by ARB_compute_variable_group_size. - */ - bool cs_input_local_size_variable_specified; - - /** - * Arrangement of invocations used to calculate derivatives in a compute - * shader. From NV_compute_shader_derivatives. - */ - enum gl_derivative_group cs_derivative_group; - - /** - * True if a shader declare bindless_sampler/bindless_image, and - * respectively bound_sampler/bound_image at global scope as specified by - * ARB_bindless_texture. - */ - bool bindless_sampler_specified; - bool bindless_image_specified; - bool bound_sampler_specified; - bool bound_image_specified; - - /** - * Output layout qualifiers from GLSL 1.50 (geometry shader controls), - * and GLSL 4.00 (tessellation control shader). - */ - struct ast_type_qualifier *out_qualifier; - - /** - * Printable list of GLSL versions supported by the current context - * - * \note - * This string should probably be generated per-context instead of per - * invokation of the compiler. This should be changed when the method of - * tracking supported GLSL versions changes. - */ - const char *supported_version_string; - - /** - * Implementation defined limits that affect built-in variables, etc. - * - * \sa struct gl_constants (in mtypes.h) - */ - struct { - /* 1.10 */ - unsigned MaxLights; - unsigned MaxClipPlanes; - unsigned MaxTextureUnits; - unsigned MaxTextureCoords; - unsigned MaxVertexAttribs; - unsigned MaxVertexUniformComponents; - unsigned MaxVertexTextureImageUnits; - unsigned MaxCombinedTextureImageUnits; - unsigned MaxTextureImageUnits; - unsigned MaxFragmentUniformComponents; - - /* ARB_draw_buffers */ - unsigned MaxDrawBuffers; - - /* ARB_enhanced_layouts */ - unsigned MaxTransformFeedbackBuffers; - unsigned MaxTransformFeedbackInterleavedComponents; - - /* ARB_blend_func_extended */ - unsigned MaxDualSourceDrawBuffers; - - /* 3.00 ES */ - int MinProgramTexelOffset; - int MaxProgramTexelOffset; - - /* 1.50 */ - unsigned MaxVertexOutputComponents; - unsigned MaxGeometryInputComponents; - unsigned MaxGeometryOutputComponents; - unsigned MaxGeometryShaderInvocations; - unsigned MaxFragmentInputComponents; - unsigned MaxGeometryTextureImageUnits; - unsigned MaxGeometryOutputVertices; - unsigned MaxGeometryTotalOutputComponents; - unsigned MaxGeometryUniformComponents; - - /* ARB_shader_atomic_counters */ - unsigned MaxVertexAtomicCounters; - unsigned MaxTessControlAtomicCounters; - unsigned MaxTessEvaluationAtomicCounters; - unsigned MaxGeometryAtomicCounters; - unsigned MaxFragmentAtomicCounters; - unsigned MaxCombinedAtomicCounters; - unsigned MaxAtomicBufferBindings; - - /* These are also atomic counter related, but they weren't added to - * until atomic counters were added to core in GLSL 4.20 and GLSL ES - * 3.10. - */ - unsigned MaxVertexAtomicCounterBuffers; - unsigned MaxTessControlAtomicCounterBuffers; - unsigned MaxTessEvaluationAtomicCounterBuffers; - unsigned MaxGeometryAtomicCounterBuffers; - unsigned MaxFragmentAtomicCounterBuffers; - unsigned MaxCombinedAtomicCounterBuffers; - unsigned MaxAtomicCounterBufferSize; - - /* ARB_compute_shader */ - unsigned MaxComputeAtomicCounterBuffers; - unsigned MaxComputeAtomicCounters; - unsigned MaxComputeImageUniforms; - unsigned MaxComputeTextureImageUnits; - unsigned MaxComputeUniformComponents; - unsigned MaxComputeWorkGroupCount[3]; - unsigned MaxComputeWorkGroupSize[3]; - - /* ARB_shader_image_load_store */ - unsigned MaxImageUnits; - unsigned MaxCombinedShaderOutputResources; - unsigned MaxImageSamples; - unsigned MaxVertexImageUniforms; - unsigned MaxTessControlImageUniforms; - unsigned MaxTessEvaluationImageUniforms; - unsigned MaxGeometryImageUniforms; - unsigned MaxFragmentImageUniforms; - unsigned MaxCombinedImageUniforms; - - /* ARB_viewport_array */ - unsigned MaxViewports; - - /* ARB_tessellation_shader */ - unsigned MaxPatchVertices; - unsigned MaxTessGenLevel; - unsigned MaxTessControlInputComponents; - unsigned MaxTessControlOutputComponents; - unsigned MaxTessControlTextureImageUnits; - unsigned MaxTessEvaluationInputComponents; - unsigned MaxTessEvaluationOutputComponents; - unsigned MaxTessEvaluationTextureImageUnits; - unsigned MaxTessPatchComponents; - unsigned MaxTessControlTotalOutputComponents; - unsigned MaxTessControlUniformComponents; - unsigned MaxTessEvaluationUniformComponents; - - /* GL 4.5 / OES_sample_variables */ - unsigned MaxSamples; - } Const; - - /** - * During AST to IR conversion, pointer to current IR function - * - * Will be \c NULL whenever the AST to IR conversion is not inside a - * function definition. - */ - class ir_function_signature *current_function; - - /** - * During AST to IR conversion, pointer to the toplevel IR - * instruction list being generated. - */ - exec_list *toplevel_ir; - - /** Have we found a return statement in this function? */ - bool found_return; - - /** Have we found the interlock builtins in this function? */ - bool found_begin_interlock; - bool found_end_interlock; - - /** Was there an error during compilation? */ - bool error; - - /** - * Are all shader inputs / outputs invariant? - * - * This is set when the 'STDGL invariant(all)' pragma is used. - */ - bool all_invariant; - - /** Loop or switch statement containing the current instructions. */ - class ast_iteration_statement *loop_nesting_ast; - - struct glsl_switch_state switch_state; - - /** List of structures defined in user code. */ - const glsl_type **user_structures; - unsigned num_user_structures; - - char *info_log; - - /** - * Are warnings enabled? - * - * Emission of warngins is controlled by '#pragma warning(...)'. - */ - bool warnings_enabled; - - /** - * \name Enable bits for GLSL extensions - */ - /*@{*/ - /* ARB extensions go here, sorted alphabetically. - */ - bool ARB_ES3_1_compatibility_enable; - bool ARB_ES3_1_compatibility_warn; - bool ARB_ES3_2_compatibility_enable; - bool ARB_ES3_2_compatibility_warn; - bool ARB_arrays_of_arrays_enable; - bool ARB_arrays_of_arrays_warn; - bool ARB_bindless_texture_enable; - bool ARB_bindless_texture_warn; - bool ARB_compatibility_enable; - bool ARB_compatibility_warn; - bool ARB_compute_shader_enable; - bool ARB_compute_shader_warn; - bool ARB_compute_variable_group_size_enable; - bool ARB_compute_variable_group_size_warn; - bool ARB_conservative_depth_enable; - bool ARB_conservative_depth_warn; - bool ARB_cull_distance_enable; - bool ARB_cull_distance_warn; - bool ARB_derivative_control_enable; - bool ARB_derivative_control_warn; - bool ARB_draw_buffers_enable; - bool ARB_draw_buffers_warn; - bool ARB_draw_instanced_enable; - bool ARB_draw_instanced_warn; - bool ARB_enhanced_layouts_enable; - bool ARB_enhanced_layouts_warn; - bool ARB_explicit_attrib_location_enable; - bool ARB_explicit_attrib_location_warn; - bool ARB_explicit_uniform_location_enable; - bool ARB_explicit_uniform_location_warn; - bool ARB_fragment_coord_conventions_enable; - bool ARB_fragment_coord_conventions_warn; - bool ARB_fragment_layer_viewport_enable; - bool ARB_fragment_layer_viewport_warn; - bool ARB_fragment_shader_interlock_enable; - bool ARB_fragment_shader_interlock_warn; - bool ARB_gpu_shader5_enable; - bool ARB_gpu_shader5_warn; - bool ARB_gpu_shader_fp64_enable; - bool ARB_gpu_shader_fp64_warn; - bool ARB_gpu_shader_int64_enable; - bool ARB_gpu_shader_int64_warn; - bool ARB_post_depth_coverage_enable; - bool ARB_post_depth_coverage_warn; - bool ARB_sample_shading_enable; - bool ARB_sample_shading_warn; - bool ARB_separate_shader_objects_enable; - bool ARB_separate_shader_objects_warn; - bool ARB_shader_atomic_counter_ops_enable; - bool ARB_shader_atomic_counter_ops_warn; - bool ARB_shader_atomic_counters_enable; - bool ARB_shader_atomic_counters_warn; - bool ARB_shader_ballot_enable; - bool ARB_shader_ballot_warn; - bool ARB_shader_bit_encoding_enable; - bool ARB_shader_bit_encoding_warn; - bool ARB_shader_clock_enable; - bool ARB_shader_clock_warn; - bool ARB_shader_draw_parameters_enable; - bool ARB_shader_draw_parameters_warn; - bool ARB_shader_group_vote_enable; - bool ARB_shader_group_vote_warn; - bool ARB_shader_image_load_store_enable; - bool ARB_shader_image_load_store_warn; - bool ARB_shader_image_size_enable; - bool ARB_shader_image_size_warn; - bool ARB_shader_precision_enable; - bool ARB_shader_precision_warn; - bool ARB_shader_stencil_export_enable; - bool ARB_shader_stencil_export_warn; - bool ARB_shader_storage_buffer_object_enable; - bool ARB_shader_storage_buffer_object_warn; - bool ARB_shader_subroutine_enable; - bool ARB_shader_subroutine_warn; - bool ARB_shader_texture_image_samples_enable; - bool ARB_shader_texture_image_samples_warn; - bool ARB_shader_texture_lod_enable; - bool ARB_shader_texture_lod_warn; - bool ARB_shader_viewport_layer_array_enable; - bool ARB_shader_viewport_layer_array_warn; - bool ARB_shading_language_420pack_enable; - bool ARB_shading_language_420pack_warn; - bool ARB_shading_language_include_enable; - bool ARB_shading_language_include_warn; - bool ARB_shading_language_packing_enable; - bool ARB_shading_language_packing_warn; - bool ARB_sparse_texture2_enable; - bool ARB_sparse_texture2_warn; - bool ARB_sparse_texture_clamp_enable; - bool ARB_sparse_texture_clamp_warn; - bool ARB_tessellation_shader_enable; - bool ARB_tessellation_shader_warn; - bool ARB_texture_cube_map_array_enable; - bool ARB_texture_cube_map_array_warn; - bool ARB_texture_gather_enable; - bool ARB_texture_gather_warn; - bool ARB_texture_multisample_enable; - bool ARB_texture_multisample_warn; - bool ARB_texture_query_levels_enable; - bool ARB_texture_query_levels_warn; - bool ARB_texture_query_lod_enable; - bool ARB_texture_query_lod_warn; - bool ARB_texture_rectangle_enable; - bool ARB_texture_rectangle_warn; - bool ARB_uniform_buffer_object_enable; - bool ARB_uniform_buffer_object_warn; - bool ARB_vertex_attrib_64bit_enable; - bool ARB_vertex_attrib_64bit_warn; - bool ARB_viewport_array_enable; - bool ARB_viewport_array_warn; - - /* KHR extensions go here, sorted alphabetically. - */ - bool KHR_blend_equation_advanced_enable; - bool KHR_blend_equation_advanced_warn; - - /* OES extensions go here, sorted alphabetically. - */ - bool OES_EGL_image_external_enable; - bool OES_EGL_image_external_warn; - bool OES_EGL_image_external_essl3_enable; - bool OES_EGL_image_external_essl3_warn; - bool OES_geometry_point_size_enable; - bool OES_geometry_point_size_warn; - bool OES_geometry_shader_enable; - bool OES_geometry_shader_warn; - bool OES_gpu_shader5_enable; - bool OES_gpu_shader5_warn; - bool OES_primitive_bounding_box_enable; - bool OES_primitive_bounding_box_warn; - bool OES_sample_variables_enable; - bool OES_sample_variables_warn; - bool OES_shader_image_atomic_enable; - bool OES_shader_image_atomic_warn; - bool OES_shader_io_blocks_enable; - bool OES_shader_io_blocks_warn; - bool OES_shader_multisample_interpolation_enable; - bool OES_shader_multisample_interpolation_warn; - bool OES_standard_derivatives_enable; - bool OES_standard_derivatives_warn; - bool OES_tessellation_point_size_enable; - bool OES_tessellation_point_size_warn; - bool OES_tessellation_shader_enable; - bool OES_tessellation_shader_warn; - bool OES_texture_3D_enable; - bool OES_texture_3D_warn; - bool OES_texture_buffer_enable; - bool OES_texture_buffer_warn; - bool OES_texture_cube_map_array_enable; - bool OES_texture_cube_map_array_warn; - bool OES_texture_storage_multisample_2d_array_enable; - bool OES_texture_storage_multisample_2d_array_warn; - bool OES_viewport_array_enable; - bool OES_viewport_array_warn; - - /* All other extensions go here, sorted alphabetically. - */ - bool AMD_conservative_depth_enable; - bool AMD_conservative_depth_warn; - bool AMD_gpu_shader_int64_enable; - bool AMD_gpu_shader_int64_warn; - bool AMD_shader_stencil_export_enable; - bool AMD_shader_stencil_export_warn; - bool AMD_shader_trinary_minmax_enable; - bool AMD_shader_trinary_minmax_warn; - bool AMD_texture_texture4_enable; - bool AMD_texture_texture4_warn; - bool AMD_vertex_shader_layer_enable; - bool AMD_vertex_shader_layer_warn; - bool AMD_vertex_shader_viewport_index_enable; - bool AMD_vertex_shader_viewport_index_warn; - bool ANDROID_extension_pack_es31a_enable; - bool ANDROID_extension_pack_es31a_warn; - bool ARM_shader_framebuffer_fetch_depth_stencil_enable; - bool ARM_shader_framebuffer_fetch_depth_stencil_warn; - bool EXT_blend_func_extended_enable; - bool EXT_blend_func_extended_warn; - bool EXT_clip_cull_distance_enable; - bool EXT_clip_cull_distance_warn; - bool EXT_demote_to_helper_invocation_enable; - bool EXT_demote_to_helper_invocation_warn; - bool EXT_draw_buffers_enable; - bool EXT_draw_buffers_warn; - bool EXT_draw_instanced_enable; - bool EXT_draw_instanced_warn; - bool EXT_frag_depth_enable; - bool EXT_frag_depth_warn; - bool EXT_geometry_point_size_enable; - bool EXT_geometry_point_size_warn; - bool EXT_geometry_shader_enable; - bool EXT_geometry_shader_warn; - bool EXT_gpu_shader4_enable; - bool EXT_gpu_shader4_warn; - bool EXT_gpu_shader5_enable; - bool EXT_gpu_shader5_warn; - bool EXT_primitive_bounding_box_enable; - bool EXT_primitive_bounding_box_warn; - bool EXT_separate_shader_objects_enable; - bool EXT_separate_shader_objects_warn; - bool EXT_shader_framebuffer_fetch_enable; - bool EXT_shader_framebuffer_fetch_warn; - bool EXT_shader_framebuffer_fetch_non_coherent_enable; - bool EXT_shader_framebuffer_fetch_non_coherent_warn; - bool EXT_shader_group_vote_enable; - bool EXT_shader_group_vote_warn; - bool EXT_shader_image_load_formatted_enable; - bool EXT_shader_image_load_formatted_warn; - bool EXT_shader_image_load_store_enable; - bool EXT_shader_image_load_store_warn; - bool EXT_shader_implicit_conversions_enable; - bool EXT_shader_implicit_conversions_warn; - bool EXT_shader_integer_mix_enable; - bool EXT_shader_integer_mix_warn; - bool EXT_shader_io_blocks_enable; - bool EXT_shader_io_blocks_warn; - bool EXT_shader_samples_identical_enable; - bool EXT_shader_samples_identical_warn; - bool EXT_tessellation_point_size_enable; - bool EXT_tessellation_point_size_warn; - bool EXT_tessellation_shader_enable; - bool EXT_tessellation_shader_warn; - bool EXT_texture_array_enable; - bool EXT_texture_array_warn; - bool EXT_texture_buffer_enable; - bool EXT_texture_buffer_warn; - bool EXT_texture_cube_map_array_enable; - bool EXT_texture_cube_map_array_warn; - bool EXT_texture_query_lod_enable; - bool EXT_texture_query_lod_warn; - bool EXT_texture_shadow_lod_enable; - bool EXT_texture_shadow_lod_warn; - bool INTEL_conservative_rasterization_enable; - bool INTEL_conservative_rasterization_warn; - bool INTEL_shader_atomic_float_minmax_enable; - bool INTEL_shader_atomic_float_minmax_warn; - bool INTEL_shader_integer_functions2_enable; - bool INTEL_shader_integer_functions2_warn; - bool MESA_shader_integer_functions_enable; - bool MESA_shader_integer_functions_warn; - bool NV_compute_shader_derivatives_enable; - bool NV_compute_shader_derivatives_warn; - bool NV_fragment_shader_interlock_enable; - bool NV_fragment_shader_interlock_warn; - bool NV_image_formats_enable; - bool NV_image_formats_warn; - bool NV_shader_atomic_float_enable; - bool NV_shader_atomic_float_warn; - bool NV_shader_atomic_int64_enable; - bool NV_shader_atomic_int64_warn; - bool NV_shader_noperspective_interpolation_enable; - bool NV_shader_noperspective_interpolation_warn; - bool NV_viewport_array2_enable; - bool NV_viewport_array2_warn; - /*@}*/ - - /** Extensions supported by the OpenGL implementation. */ - const struct gl_extensions *extensions; - - bool uses_builtin_functions; - bool fs_uses_gl_fragcoord; - - /** - * For geometry shaders, size of the most recently seen input declaration - * that was a sized array, or 0 if no sized input array declarations have - * been seen. - * - * Unused for other shader types. - */ - unsigned gs_input_size; - - bool fs_early_fragment_tests; - - bool fs_inner_coverage; - - bool fs_post_depth_coverage; - - bool fs_pixel_interlock_ordered; - bool fs_pixel_interlock_unordered; - bool fs_sample_interlock_ordered; - bool fs_sample_interlock_unordered; - - unsigned fs_blend_support; - - /** - * For tessellation control shaders, size of the most recently seen output - * declaration that was a sized array, or 0 if no sized output array - * declarations have been seen. - * - * Unused for other shader types. - */ - unsigned tcs_output_size; - - /** Atomic counter offsets by binding */ - unsigned atomic_counter_offsets[MAX_COMBINED_ATOMIC_BUFFERS]; - - /** Whether gl_Layer output is viewport-relative. */ - bool redeclares_gl_layer; - bool layer_viewport_relative; - - bool allow_extension_directive_midshader; - bool allow_glsl_120_subset_in_110; - bool allow_builtin_variable_redeclaration; - bool ignore_write_to_readonly_var; - - /** - * Known subroutine type declarations. - */ - int num_subroutine_types; - ir_function **subroutine_types; - - /** - * Functions that are associated with - * subroutine types. - */ - int num_subroutines; - ir_function **subroutines; - - /** - * field selection temporary parser storage - - * did the parser just parse a dot. - */ - bool is_field; - - /** - * seen values for clip/cull distance sizes - * so we can check totals aren't too large. - */ - unsigned clip_dist_size, cull_dist_size; -}; - -# define YYLLOC_DEFAULT(Current, Rhs, N) \ -do { \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC(Rhs, N).last_column; \ - (Current).path = YYRHSLOC(Rhs, N).path; \ - (Current).source = YYRHSLOC(Rhs, N).source; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC(Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC(Rhs, 0).last_column; \ - (Current).path = YYRHSLOC(Rhs, 0).path; \ - (Current).source = YYRHSLOC(Rhs, 0).source; \ - } \ -} while (0) - -/** - * Emit a warning to the shader log - * - * \sa _mesa_glsl_error - */ -extern void _mesa_glsl_warning(const YYLTYPE *locp, - _mesa_glsl_parse_state *state, - const char *fmt, ...); - -extern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, - const char *string); - -extern void _mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state); - -union YYSTYPE; -extern int _mesa_glsl_lexer_lex(union YYSTYPE *yylval, YYLTYPE *yylloc, - void *scanner); - -extern int _mesa_glsl_parse(struct _mesa_glsl_parse_state *); - -/** - * Process elements of the #extension directive - * - * \return - * If \c name and \c behavior are valid, \c true is returned. Otherwise - * \c false is returned. - */ -extern bool _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp, - const char *behavior, - YYLTYPE *behavior_locp, - _mesa_glsl_parse_state *state); - -#endif /* __cplusplus */ - - -/* - * These definitions apply to C and C++ - */ -#ifdef __cplusplus -extern "C" { -#endif - -struct glcpp_parser; -struct _mesa_glsl_parse_state; - -typedef void (*glcpp_extension_iterator)( - struct _mesa_glsl_parse_state *state, - void (*add_builtin_define)(struct glcpp_parser *, const char *, int), - struct glcpp_parser *data, - unsigned version, - bool es); - -extern int glcpp_preprocess(void *ctx, const char **shader, char **info_log, - glcpp_extension_iterator extensions, - struct _mesa_glsl_parse_state *state, - struct gl_context *gl_ctx); - -extern void -_mesa_glsl_copy_symbols_from_table(struct exec_list *shader_ir, - struct glsl_symbol_table *src, - struct glsl_symbol_table *dest); - -#ifdef __cplusplus -} -#endif - - -#endif /* GLSL_PARSER_EXTRAS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_symbol_table.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_symbol_table.cpp deleted file mode 100644 index 9bfcde5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_symbol_table.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "glsl_symbol_table.h" -#include "ast.h" - -class symbol_table_entry { -public: - DECLARE_LINEAR_ALLOC_CXX_OPERATORS(symbol_table_entry); - - bool add_interface(const glsl_type *i, enum ir_variable_mode mode) - { - const glsl_type **dest; - - switch (mode) { - case ir_var_uniform: - dest = &ibu; - break; - case ir_var_shader_storage: - dest = &iss; - break; - case ir_var_shader_in: - dest = &ibi; - break; - case ir_var_shader_out: - dest = &ibo; - break; - default: - assert(!"Unsupported interface variable mode!"); - return false; - } - - if (*dest != NULL) { - return false; - } else { - *dest = i; - return true; - } - } - - const glsl_type *get_interface(enum ir_variable_mode mode) - { - switch (mode) { - case ir_var_uniform: - return ibu; - case ir_var_shader_storage: - return iss; - case ir_var_shader_in: - return ibi; - case ir_var_shader_out: - return ibo; - default: - assert(!"Unsupported interface variable mode!"); - return NULL; - } - } - - symbol_table_entry(ir_variable *v) : - v(v), f(0), t(0), ibu(0), iss(0), ibi(0), ibo(0), a(0) {} - symbol_table_entry(ir_function *f) : - v(0), f(f), t(0), ibu(0), iss(0), ibi(0), ibo(0), a(0) {} - symbol_table_entry(const glsl_type *t) : - v(0), f(0), t(t), ibu(0), iss(0), ibi(0), ibo(0), a(0) {} - symbol_table_entry(const glsl_type *t, enum ir_variable_mode mode) : - v(0), f(0), t(0), ibu(0), iss(0), ibi(0), ibo(0), a(0) - { - assert(t->is_interface()); - add_interface(t, mode); - } - symbol_table_entry(const class ast_type_specifier *a): - v(0), f(0), t(0), ibu(0), iss(0), ibi(0), ibo(0), a(a) {} - - ir_variable *v; - ir_function *f; - const glsl_type *t; - const glsl_type *ibu; - const glsl_type *iss; - const glsl_type *ibi; - const glsl_type *ibo; - const class ast_type_specifier *a; -}; - -glsl_symbol_table::glsl_symbol_table() -{ - this->separate_function_namespace = false; - this->table = _mesa_symbol_table_ctor(); - this->mem_ctx = ralloc_context(NULL); - this->linalloc = linear_alloc_parent(this->mem_ctx, 0); -} - -glsl_symbol_table::~glsl_symbol_table() -{ - _mesa_symbol_table_dtor(table); - ralloc_free(mem_ctx); -} - -void glsl_symbol_table::push_scope() -{ - _mesa_symbol_table_push_scope(table); -} - -void glsl_symbol_table::pop_scope() -{ - _mesa_symbol_table_pop_scope(table); -} - -bool glsl_symbol_table::name_declared_this_scope(const char *name) -{ - return _mesa_symbol_table_symbol_scope(table, name) == 0; -} - -bool glsl_symbol_table::add_variable(ir_variable *v) -{ - assert(v->data.mode != ir_var_temporary); - - if (this->separate_function_namespace) { - /* In 1.10, functions and variables have separate namespaces. */ - symbol_table_entry *existing = get_entry(v->name); - if (name_declared_this_scope(v->name)) { - /* If there's already an existing function (not a constructor!) in - * the current scope, just update the existing entry to include 'v'. - */ - if (existing->v == NULL && existing->t == NULL) { - existing->v = v; - return true; - } - } else { - /* If not declared at this scope, add a new entry. But if an existing - * entry includes a function, propagate that to this block - otherwise - * the new variable declaration would shadow the function. - */ - symbol_table_entry *entry = new(linalloc) symbol_table_entry(v); - if (existing != NULL) - entry->f = existing->f; - int added = _mesa_symbol_table_add_symbol(table, v->name, entry); - assert(added == 0); - (void)added; - return true; - } - return false; - } - - /* 1.20+ rules: */ - symbol_table_entry *entry = new(linalloc) symbol_table_entry(v); - return _mesa_symbol_table_add_symbol(table, v->name, entry) == 0; -} - -bool glsl_symbol_table::add_type(const char *name, const glsl_type *t) -{ - symbol_table_entry *entry = new(linalloc) symbol_table_entry(t); - return _mesa_symbol_table_add_symbol(table, name, entry) == 0; -} - -bool glsl_symbol_table::add_interface(const char *name, const glsl_type *i, - enum ir_variable_mode mode) -{ - assert(i->is_interface()); - symbol_table_entry *entry = get_entry(name); - if (entry == NULL) { - symbol_table_entry *entry = - new(linalloc) symbol_table_entry(i, mode); - bool add_interface_symbol_result = - _mesa_symbol_table_add_symbol(table, name, entry) == 0; - assert(add_interface_symbol_result); - return add_interface_symbol_result; - } else { - return entry->add_interface(i, mode); - } -} - -bool glsl_symbol_table::add_function(ir_function *f) -{ - if (this->separate_function_namespace && name_declared_this_scope(f->name)) { - /* In 1.10, functions and variables have separate namespaces. */ - symbol_table_entry *existing = get_entry(f->name); - if ((existing->f == NULL) && (existing->t == NULL)) { - existing->f = f; - return true; - } - } - symbol_table_entry *entry = new(linalloc) symbol_table_entry(f); - return _mesa_symbol_table_add_symbol(table, f->name, entry) == 0; -} - -bool glsl_symbol_table::add_default_precision_qualifier(const char *type_name, - int precision) -{ - char *name = ralloc_asprintf(mem_ctx, "#default_precision_%s", type_name); - - ast_type_specifier *default_specifier = new(linalloc) ast_type_specifier(name); - default_specifier->default_precision = precision; - - symbol_table_entry *entry = - new(linalloc) symbol_table_entry(default_specifier); - - if (!get_entry(name)) - return _mesa_symbol_table_add_symbol(table, name, entry) == 0; - - return _mesa_symbol_table_replace_symbol(table, name, entry) == 0; -} - -void glsl_symbol_table::add_global_function(ir_function *f) -{ - symbol_table_entry *entry = new(linalloc) symbol_table_entry(f); - int added = _mesa_symbol_table_add_global_symbol(table, f->name, entry); - assert(added == 0); - (void)added; -} - -ir_variable *glsl_symbol_table::get_variable(const char *name) -{ - symbol_table_entry *entry = get_entry(name); - return entry != NULL ? entry->v : NULL; -} - -const glsl_type *glsl_symbol_table::get_type(const char *name) -{ - symbol_table_entry *entry = get_entry(name); - return entry != NULL ? entry->t : NULL; -} - -const glsl_type *glsl_symbol_table::get_interface(const char *name, - enum ir_variable_mode mode) -{ - symbol_table_entry *entry = get_entry(name); - return entry != NULL ? entry->get_interface(mode) : NULL; -} - -ir_function *glsl_symbol_table::get_function(const char *name) -{ - symbol_table_entry *entry = get_entry(name); - return entry != NULL ? entry->f : NULL; -} - -int glsl_symbol_table::get_default_precision_qualifier(const char *type_name) -{ - char *name = ralloc_asprintf(mem_ctx, "#default_precision_%s", type_name); - symbol_table_entry *entry = get_entry(name); - if (!entry) - return ast_precision_none; - return entry->a->default_precision; -} - -symbol_table_entry *glsl_symbol_table::get_entry(const char *name) -{ - return (symbol_table_entry *) - _mesa_symbol_table_find_symbol(table, name); -} - -void -glsl_symbol_table::disable_variable(const char *name) -{ - /* Ideally we would remove the variable's entry from the symbol table, but - * that would be difficult. Fortunately, since this is only used for - * built-in variables, it won't be possible for the shader to re-introduce - * the variable later, so all we really need to do is to make sure that - * further attempts to access it using get_variable() will return NULL. - */ - symbol_table_entry *entry = get_entry(name); - if (entry != NULL) { - entry->v = NULL; - } -} - -void -glsl_symbol_table::replace_variable(const char *name, - ir_variable *v) -{ - symbol_table_entry *entry = get_entry(name); - if (entry != NULL) { - entry->v = v; - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_symbol_table.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_symbol_table.h deleted file mode 100644 index 9e424e1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_symbol_table.h +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_SYMBOL_TABLE -#define GLSL_SYMBOL_TABLE - -#include - -#include "../../mesa/program/symbol_table.h" -#include "ir.h" - -class symbol_table_entry; -struct glsl_type; - -/** - * Facade class for _mesa_symbol_table - * - * Wraps the existing \c _mesa_symbol_table data structure to enforce some - * type safe and some symbol table invariants. - */ -struct glsl_symbol_table { - DECLARE_RALLOC_CXX_OPERATORS(glsl_symbol_table) - - glsl_symbol_table(); - ~glsl_symbol_table(); - - /* In 1.10, functions and variables have separate namespaces. */ - bool separate_function_namespace; - - void push_scope(); - void pop_scope(); - - /** - * Determine whether a name was declared at the current scope - */ - bool name_declared_this_scope(const char *name); - - /** - * \name Methods to add symbols to the table - * - * There is some temptation to rename all these functions to \c add_symbol - * or similar. However, this breaks symmetry with the getter functions and - * reduces the clarity of the intention of code that uses these methods. - */ - /*@{*/ - bool add_variable(ir_variable *v); - bool add_type(const char *name, const glsl_type *t); - bool add_function(ir_function *f); - bool add_interface(const char *name, const glsl_type *i, - enum ir_variable_mode mode); - bool add_default_precision_qualifier(const char *type_name, int precision); - /*@}*/ - - /** - * Add an function at global scope without checking for scoping conflicts. - */ - void add_global_function(ir_function *f); - - /** - * \name Methods to get symbols from the table - */ - /*@{*/ - ir_variable *get_variable(const char *name); - const glsl_type *get_type(const char *name); - ir_function *get_function(const char *name); - const glsl_type *get_interface(const char *name, - enum ir_variable_mode mode); - int get_default_precision_qualifier(const char *type_name); - /*@}*/ - - /** - * Disable a previously-added variable so that it no longer appears to be - * in the symbol table. This is necessary when gl_PerVertex is redeclared, - * to ensure that previously-available built-in variables are no longer - * available. - */ - void disable_variable(const char *name); - - /** - * Replaces the variable in the entry by the new variable. - */ - void replace_variable(const char *name, ir_variable *v); - -private: - symbol_table_entry *get_entry(const char *name); - - struct _mesa_symbol_table *table; - void *mem_ctx; - void *linalloc; -}; - -#endif /* GLSL_SYMBOL_TABLE */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_to_nir.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_to_nir.cpp deleted file mode 100644 index 86c0a83..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_to_nir.cpp +++ /dev/null @@ -1,2808 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "float64_glsl.h" -#include "glsl_to_nir.h" -#include "ir_visitor.h" -#include "ir_hierarchical_visitor.h" -#include "ir.h" -#include "ir_optimization.h" -#include "program.h" -#include "../nir/nir_control_flow.h" -#include "../nir/nir_builder.h" -#include "../nir/nir_builtin_builder.h" -#include "../nir/nir_deref.h" -#include "../../mesa/main/errors.h" -#include "../../mesa/main/mtypes.h" -#include "../../mesa/main/shaderobj.h" -#include "../../util/u_math.h" - -/* - * pass to lower GLSL IR to NIR - * - * This will lower variable dereferences to loads/stores of corresponding - * variables in NIR - the variables will be converted to registers in a later - * pass. - */ - -namespace { - -class nir_visitor : public ir_visitor -{ -public: - nir_visitor(const struct gl_constants *consts, nir_shader *shader); - ~nir_visitor(); - - virtual void visit(ir_variable *); - virtual void visit(ir_function *); - virtual void visit(ir_function_signature *); - virtual void visit(ir_loop *); - virtual void visit(ir_if *); - virtual void visit(ir_discard *); - virtual void visit(ir_demote *); - virtual void visit(ir_loop_jump *); - virtual void visit(ir_return *); - virtual void visit(ir_call *); - virtual void visit(ir_assignment *); - virtual void visit(ir_emit_vertex *); - virtual void visit(ir_end_primitive *); - virtual void visit(ir_expression *); - virtual void visit(ir_swizzle *); - virtual void visit(ir_texture *); - virtual void visit(ir_constant *); - virtual void visit(ir_dereference_variable *); - virtual void visit(ir_dereference_record *); - virtual void visit(ir_dereference_array *); - virtual void visit(ir_barrier *); - - void create_function(ir_function_signature *ir); - -private: - void add_instr(nir_instr *instr, unsigned num_components, unsigned bit_size); - nir_ssa_def *evaluate_rvalue(ir_rvalue *ir); - - nir_alu_instr *emit(nir_op op, unsigned dest_size, nir_ssa_def **srcs); - nir_alu_instr *emit(nir_op op, unsigned dest_size, nir_ssa_def *src1); - nir_alu_instr *emit(nir_op op, unsigned dest_size, nir_ssa_def *src1, - nir_ssa_def *src2); - nir_alu_instr *emit(nir_op op, unsigned dest_size, nir_ssa_def *src1, - nir_ssa_def *src2, nir_ssa_def *src3); - - bool supports_std430; - - nir_shader *shader; - nir_function_impl *impl; - nir_builder b; - nir_ssa_def *result; /* result of the expression tree last visited */ - - nir_deref_instr *evaluate_deref(ir_instruction *ir); - - nir_constant *constant_copy(ir_constant *ir, void *mem_ctx); - - /* most recent deref instruction created */ - nir_deref_instr *deref; - - /* whether the IR we're operating on is per-function or global */ - bool is_global; - - ir_function_signature *sig; - - /* map of ir_variable -> nir_variable */ - struct hash_table *var_table; - - /* map of ir_function_signature -> nir_function_overload */ - struct hash_table *overload_table; - - /* set of nir_variable hold sparse result */ - struct set *sparse_variable_set; - - void adjust_sparse_variable(nir_deref_instr *var_deref, const glsl_type *type, - nir_ssa_def *dest); - - const struct gl_constants *consts; -}; - -/* - * This visitor runs before the main visitor, calling create_function() for - * each function so that the main visitor can resolve forward references in - * calls. - */ - -class nir_function_visitor : public ir_hierarchical_visitor -{ -public: - nir_function_visitor(nir_visitor *v) : visitor(v) - { - } - virtual ir_visitor_status visit_enter(ir_function *); - -private: - nir_visitor *visitor; -}; - -/* glsl_to_nir can only handle converting certain function paramaters - * to NIR. This visitor checks for parameters it can't currently handle. - */ -class ir_function_param_visitor : public ir_hierarchical_visitor -{ -public: - ir_function_param_visitor() - : unsupported(false) - { - } - - virtual ir_visitor_status visit_enter(ir_function_signature *ir) - { - - if (ir->is_intrinsic()) - return visit_continue; - - foreach_in_list(ir_variable, param, &ir->parameters) { - if (!param->type->is_vector() || !param->type->is_scalar()) { - unsupported = true; - return visit_stop; - } - - if (param->data.mode == ir_var_function_inout) { - unsupported = true; - return visit_stop; - } - } - - if (!glsl_type_is_vector_or_scalar(ir->return_type) && - !ir->return_type->is_void()) { - unsupported = true; - return visit_stop; - } - - return visit_continue; - } - - bool unsupported; -}; - -} /* end of anonymous namespace */ - - -static bool -has_unsupported_function_param(exec_list *ir) -{ - ir_function_param_visitor visitor; - visit_list_elements(&visitor, ir); - return visitor.unsupported; -} - -nir_shader * -glsl_to_nir(const struct gl_constants *consts, - const struct gl_shader_program *shader_prog, - gl_shader_stage stage, - const nir_shader_compiler_options *options) -{ - struct gl_linked_shader *sh = shader_prog->_LinkedShaders[stage]; - - const struct gl_shader_compiler_options *gl_options = - &consts->ShaderCompilerOptions[stage]; - - /* glsl_to_nir can only handle converting certain function paramaters - * to NIR. If we find something we can't handle then we get the GLSL IR - * opts to remove it before we continue on. - * - * TODO: add missing glsl ir to nir support and remove this loop. - */ - while (has_unsupported_function_param(sh->ir)) { - do_common_optimization(sh->ir, true, gl_options, consts->NativeIntegers); - } - - nir_shader *shader = nir_shader_create(NULL, stage, options, - &sh->Program->info); - - nir_visitor v1(consts, shader); - nir_function_visitor v2(&v1); - v2.run(sh->ir); - visit_exec_list(sh->ir, &v1); - - /* The GLSL IR won't be needed anymore. */ - ralloc_free(sh->ir); - sh->ir = NULL; - - nir_validate_shader(shader, "after glsl to nir, before function inline"); - if (should_print_nir(shader)) { - printf("glsl_to_nir\n"); - nir_print_shader(shader, stdout); - } - - /* We have to lower away local constant initializers right before we - * inline functions. That way they get properly initialized at the top - * of the function and not at the top of its caller. - */ - NIR_PASS_V(shader, nir_lower_variable_initializers, nir_var_all); - NIR_PASS_V(shader, nir_lower_returns); - NIR_PASS_V(shader, nir_inline_functions); - NIR_PASS_V(shader, nir_opt_deref); - - nir_validate_shader(shader, "after function inlining and return lowering"); - - /* Now that we have inlined everything remove all of the functions except - * main(). - */ - foreach_list_typed_safe(nir_function, function, node, &(shader)->functions){ - if (strcmp("main", function->name) != 0) { - exec_node_remove(&function->node); - } - } - - shader->info.name = ralloc_asprintf(shader, "GLSL%d", shader_prog->Name); - if (shader_prog->Label) - shader->info.label = ralloc_strdup(shader, shader_prog->Label); - - shader->info.subgroup_size = SUBGROUP_SIZE_UNIFORM; - - if (shader->info.stage == MESA_SHADER_FRAGMENT) { - shader->info.fs.pixel_center_integer = sh->Program->info.fs.pixel_center_integer; - shader->info.fs.origin_upper_left = sh->Program->info.fs.origin_upper_left; - shader->info.fs.advanced_blend_modes = sh->Program->info.fs.advanced_blend_modes; - - nir_foreach_variable_in_shader(var, shader) { - if (var->data.mode == nir_var_system_value && - (var->data.location == SYSTEM_VALUE_SAMPLE_ID || - var->data.location == SYSTEM_VALUE_SAMPLE_POS)) - shader->info.fs.uses_sample_shading = true; - - if (var->data.mode == nir_var_shader_in && var->data.sample) - shader->info.fs.uses_sample_shading = true; - - if (var->data.mode == nir_var_shader_out && var->data.fb_fetch_output) - shader->info.fs.uses_sample_shading = true; - } - } - - return shader; -} - -nir_visitor::nir_visitor(const struct gl_constants *consts, nir_shader *shader) -{ - this->consts = consts; - this->supports_std430 = consts->UseSTD430AsDefaultPacking; - this->shader = shader; - this->is_global = true; - this->var_table = _mesa_pointer_hash_table_create(NULL); - this->overload_table = _mesa_pointer_hash_table_create(NULL); - this->sparse_variable_set = _mesa_pointer_set_create(NULL); - this->result = NULL; - this->impl = NULL; - this->deref = NULL; - this->sig = NULL; - memset(&this->b, 0, sizeof(this->b)); -} - -nir_visitor::~nir_visitor() -{ - _mesa_hash_table_destroy(this->var_table, NULL); - _mesa_hash_table_destroy(this->overload_table, NULL); - _mesa_set_destroy(this->sparse_variable_set, NULL); -} - -nir_deref_instr * -nir_visitor::evaluate_deref(ir_instruction *ir) -{ - ir->accept(this); - return this->deref; -} - -nir_constant * -nir_visitor::constant_copy(ir_constant *ir, void *mem_ctx) -{ - if (ir == NULL) - return NULL; - - nir_constant *ret = rzalloc(mem_ctx, nir_constant); - - const unsigned rows = ir->type->vector_elements; - const unsigned cols = ir->type->matrix_columns; - unsigned i; - - ret->num_elements = 0; - switch (ir->type->base_type) { - case GLSL_TYPE_UINT: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (unsigned r = 0; r < rows; r++) - ret->values[r].u32 = ir->value.u[r]; - - break; - - case GLSL_TYPE_UINT16: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (unsigned r = 0; r < rows; r++) - ret->values[r].u16 = ir->value.u16[r]; - break; - - case GLSL_TYPE_INT: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (unsigned r = 0; r < rows; r++) - ret->values[r].i32 = ir->value.i[r]; - - break; - - case GLSL_TYPE_INT16: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (unsigned r = 0; r < rows; r++) - ret->values[r].i16 = ir->value.i16[r]; - break; - - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - if (cols > 1) { - ret->elements = ralloc_array(mem_ctx, nir_constant *, cols); - ret->num_elements = cols; - for (unsigned c = 0; c < cols; c++) { - nir_constant *col_const = rzalloc(mem_ctx, nir_constant); - col_const->num_elements = 0; - switch (ir->type->base_type) { - case GLSL_TYPE_FLOAT: - for (unsigned r = 0; r < rows; r++) - col_const->values[r].f32 = ir->value.f[c * rows + r]; - break; - - case GLSL_TYPE_FLOAT16: - for (unsigned r = 0; r < rows; r++) - col_const->values[r].u16 = ir->value.f16[c * rows + r]; - break; - - case GLSL_TYPE_DOUBLE: - for (unsigned r = 0; r < rows; r++) - col_const->values[r].f64 = ir->value.d[c * rows + r]; - break; - - default: - unreachable("Cannot get here from the first level switch"); - } - ret->elements[c] = col_const; - } - } else { - switch (ir->type->base_type) { - case GLSL_TYPE_FLOAT: - for (unsigned r = 0; r < rows; r++) - ret->values[r].f32 = ir->value.f[r]; - break; - - case GLSL_TYPE_FLOAT16: - for (unsigned r = 0; r < rows; r++) - ret->values[r].u16 = ir->value.f16[r]; - break; - - case GLSL_TYPE_DOUBLE: - for (unsigned r = 0; r < rows; r++) - ret->values[r].f64 = ir->value.d[r]; - break; - - default: - unreachable("Cannot get here from the first level switch"); - } - } - break; - - case GLSL_TYPE_UINT64: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (unsigned r = 0; r < rows; r++) - ret->values[r].u64 = ir->value.u64[r]; - break; - - case GLSL_TYPE_INT64: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (unsigned r = 0; r < rows; r++) - ret->values[r].i64 = ir->value.i64[r]; - break; - - case GLSL_TYPE_BOOL: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (unsigned r = 0; r < rows; r++) - ret->values[r].b = ir->value.b[r]; - - break; - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_ARRAY: - ret->elements = ralloc_array(mem_ctx, nir_constant *, - ir->type->length); - ret->num_elements = ir->type->length; - - for (i = 0; i < ir->type->length; i++) - ret->elements[i] = constant_copy(ir->const_elements[i], mem_ctx); - break; - - default: - unreachable("not reached"); - } - - return ret; -} - -void -nir_visitor::adjust_sparse_variable(nir_deref_instr *var_deref, const glsl_type *type, - nir_ssa_def *dest) -{ - const glsl_type *texel_type = type->field_type("texel"); - assert(texel_type); - - assert(var_deref->deref_type == nir_deref_type_var); - nir_variable *var = var_deref->var; - - /* Adjust nir_variable type to align with sparse nir instructions. - * Because the nir_variable is created with struct type from ir_variable, - * but sparse nir instructions output with vector dest. - */ - var->type = glsl_type::get_instance(texel_type->get_base_type()->base_type, - dest->num_components, 1); - - var_deref->type = var->type; - - /* Record the adjusted variable. */ - _mesa_set_add(this->sparse_variable_set, var); -} - -static unsigned -get_nir_how_declared(unsigned how_declared) -{ - if (how_declared == ir_var_hidden) - return nir_var_hidden; - - return nir_var_declared_normally; -} - -void -nir_visitor::visit(ir_variable *ir) -{ - /* FINISHME: inout parameters */ - assert(ir->data.mode != ir_var_function_inout); - - if (ir->data.mode == ir_var_function_out) - return; - - nir_variable *var = rzalloc(shader, nir_variable); - var->type = ir->type; - var->name = ralloc_strdup(var, ir->name); - - var->data.assigned = ir->data.assigned; - var->data.always_active_io = ir->data.always_active_io; - var->data.read_only = ir->data.read_only; - var->data.centroid = ir->data.centroid; - var->data.sample = ir->data.sample; - var->data.patch = ir->data.patch; - var->data.how_declared = get_nir_how_declared(ir->data.how_declared); - var->data.invariant = ir->data.invariant; - var->data.location = ir->data.location; - var->data.must_be_shader_input = ir->data.must_be_shader_input; - var->data.stream = ir->data.stream; - if (ir->data.stream & (1u << 31)) - var->data.stream |= NIR_STREAM_PACKED; - - var->data.precision = ir->data.precision; - var->data.explicit_location = ir->data.explicit_location; - var->data.matrix_layout = ir->data.matrix_layout; - var->data.from_named_ifc_block = ir->data.from_named_ifc_block; - var->data.compact = false; - - switch(ir->data.mode) { - case ir_var_auto: - case ir_var_temporary: - if (is_global) - var->data.mode = nir_var_shader_temp; - else - var->data.mode = nir_var_function_temp; - break; - - case ir_var_function_in: - case ir_var_const_in: - var->data.mode = nir_var_function_temp; - break; - - case ir_var_shader_in: - if (shader->info.stage == MESA_SHADER_GEOMETRY && - ir->data.location == VARYING_SLOT_PRIMITIVE_ID) { - /* For whatever reason, GLSL IR makes gl_PrimitiveIDIn an input */ - var->data.location = SYSTEM_VALUE_PRIMITIVE_ID; - var->data.mode = nir_var_system_value; - } else { - var->data.mode = nir_var_shader_in; - - if (shader->info.stage == MESA_SHADER_TESS_EVAL && - (ir->data.location == VARYING_SLOT_TESS_LEVEL_INNER || - ir->data.location == VARYING_SLOT_TESS_LEVEL_OUTER)) { - var->data.compact = ir->type->without_array()->is_scalar(); - } - - if (shader->info.stage > MESA_SHADER_VERTEX && - ir->data.location >= VARYING_SLOT_CLIP_DIST0 && - ir->data.location <= VARYING_SLOT_CULL_DIST1) { - var->data.compact = ir->type->without_array()->is_scalar(); - } - } - break; - - case ir_var_shader_out: - var->data.mode = nir_var_shader_out; - if (shader->info.stage == MESA_SHADER_TESS_CTRL && - (ir->data.location == VARYING_SLOT_TESS_LEVEL_INNER || - ir->data.location == VARYING_SLOT_TESS_LEVEL_OUTER)) { - var->data.compact = ir->type->without_array()->is_scalar(); - } - - if (shader->info.stage <= MESA_SHADER_GEOMETRY && - ir->data.location >= VARYING_SLOT_CLIP_DIST0 && - ir->data.location <= VARYING_SLOT_CULL_DIST1) { - var->data.compact = ir->type->without_array()->is_scalar(); - } - break; - - case ir_var_uniform: - if (ir->get_interface_type()) - var->data.mode = nir_var_mem_ubo; - else if (ir->type->contains_image() && !ir->data.bindless) - var->data.mode = nir_var_image; - else - var->data.mode = nir_var_uniform; - break; - - case ir_var_shader_storage: - var->data.mode = nir_var_mem_ssbo; - break; - - case ir_var_system_value: - var->data.mode = nir_var_system_value; - break; - - case ir_var_shader_shared: - var->data.mode = nir_var_mem_shared; - break; - - default: - unreachable("not reached"); - } - - unsigned mem_access = 0; - if (ir->data.memory_read_only) - mem_access |= ACCESS_NON_WRITEABLE; - if (ir->data.memory_write_only) - mem_access |= ACCESS_NON_READABLE; - if (ir->data.memory_coherent) - mem_access |= ACCESS_COHERENT; - if (ir->data.memory_volatile) - mem_access |= ACCESS_VOLATILE; - if (ir->data.memory_restrict) - mem_access |= ACCESS_RESTRICT; - - var->interface_type = ir->get_interface_type(); - - /* For UBO and SSBO variables, we need explicit types */ - if (var->data.mode & (nir_var_mem_ubo | nir_var_mem_ssbo)) { - const glsl_type *explicit_ifc_type = - ir->get_interface_type()->get_explicit_interface_type(supports_std430); - - var->interface_type = explicit_ifc_type; - - if (ir->type->without_array()->is_interface()) { - /* If the type contains the interface, wrap the explicit type in the - * right number of arrays. - */ - var->type = glsl_type_wrap_in_arrays(explicit_ifc_type, ir->type); - } else { - /* Otherwise, this variable is one entry in the interface */ - UNUSED bool found = false; - for (unsigned i = 0; i < explicit_ifc_type->length; i++) { - const glsl_struct_field *field = - &explicit_ifc_type->fields.structure[i]; - if (strcmp(ir->name, field->name) != 0) - continue; - - var->type = field->type; - if (field->memory_read_only) - mem_access |= ACCESS_NON_WRITEABLE; - if (field->memory_write_only) - mem_access |= ACCESS_NON_READABLE; - if (field->memory_coherent) - mem_access |= ACCESS_COHERENT; - if (field->memory_volatile) - mem_access |= ACCESS_VOLATILE; - if (field->memory_restrict) - mem_access |= ACCESS_RESTRICT; - - found = true; - break; - } - assert(found); - } - } - - var->data.interpolation = ir->data.interpolation; - var->data.location_frac = ir->data.location_frac; - - switch (ir->data.depth_layout) { - case ir_depth_layout_none: - var->data.depth_layout = nir_depth_layout_none; - break; - case ir_depth_layout_any: - var->data.depth_layout = nir_depth_layout_any; - break; - case ir_depth_layout_greater: - var->data.depth_layout = nir_depth_layout_greater; - break; - case ir_depth_layout_less: - var->data.depth_layout = nir_depth_layout_less; - break; - case ir_depth_layout_unchanged: - var->data.depth_layout = nir_depth_layout_unchanged; - break; - default: - unreachable("not reached"); - } - - var->data.index = ir->data.index; - var->data.descriptor_set = 0; - var->data.binding = ir->data.binding; - var->data.explicit_binding = ir->data.explicit_binding; - var->data.explicit_offset = ir->data.explicit_xfb_offset; - var->data.bindless = ir->data.bindless; - var->data.offset = ir->data.offset; - var->data.access = (gl_access_qualifier)mem_access; - - if (var->type->without_array()->is_image()) { - var->data.image.format = ir->data.image_format; - } else if (var->data.mode == nir_var_shader_out) { - var->data.xfb.buffer = ir->data.xfb_buffer; - var->data.xfb.stride = ir->data.xfb_stride; - } - - var->data.fb_fetch_output = ir->data.fb_fetch_output; - var->data.explicit_xfb_buffer = ir->data.explicit_xfb_buffer; - var->data.explicit_xfb_stride = ir->data.explicit_xfb_stride; - - var->num_state_slots = ir->get_num_state_slots(); - if (var->num_state_slots > 0) { - var->state_slots = rzalloc_array(var, nir_state_slot, - var->num_state_slots); - - ir_state_slot *state_slots = ir->get_state_slots(); - for (unsigned i = 0; i < var->num_state_slots; i++) { - for (unsigned j = 0; j < 4; j++) - var->state_slots[i].tokens[j] = state_slots[i].tokens[j]; - var->state_slots[i].swizzle = state_slots[i].swizzle; - } - } else { - var->state_slots = NULL; - } - - /* Values declared const will have ir->constant_value instead of - * ir->constant_initializer. - */ - if (ir->constant_initializer) - var->constant_initializer = constant_copy(ir->constant_initializer, var); - else - var->constant_initializer = constant_copy(ir->constant_value, var); - - if (var->data.mode == nir_var_function_temp) - nir_function_impl_add_variable(impl, var); - else - nir_shader_add_variable(shader, var); - - _mesa_hash_table_insert(var_table, ir, var); -} - -ir_visitor_status -nir_function_visitor::visit_enter(ir_function *ir) -{ - foreach_in_list(ir_function_signature, sig, &ir->signatures) { - visitor->create_function(sig); - } - return visit_continue_with_parent; -} - -void -nir_visitor::create_function(ir_function_signature *ir) -{ - if (ir->is_intrinsic()) - return; - - nir_function *func = nir_function_create(shader, ir->function_name()); - if (strcmp(ir->function_name(), "main") == 0) - func->is_entrypoint = true; - - func->num_params = ir->parameters.length() + - (ir->return_type != glsl_type::void_type); - func->params = ralloc_array(shader, nir_parameter, func->num_params); - - unsigned np = 0; - - if (ir->return_type != glsl_type::void_type) { - /* The return value is a variable deref (basically an out parameter) */ - func->params[np].num_components = 1; - func->params[np].bit_size = 32; - np++; - } - - foreach_in_list(ir_variable, param, &ir->parameters) { - /* FINISHME: pass arrays, structs, etc by reference? */ - assert(param->type->is_vector() || param->type->is_scalar()); - - if (param->data.mode == ir_var_function_in) { - func->params[np].num_components = param->type->vector_elements; - func->params[np].bit_size = glsl_get_bit_size(param->type); - } else { - func->params[np].num_components = 1; - func->params[np].bit_size = 32; - } - np++; - } - assert(np == func->num_params); - - _mesa_hash_table_insert(this->overload_table, ir, func); -} - -void -nir_visitor::visit(ir_function *ir) -{ - foreach_in_list(ir_function_signature, sig, &ir->signatures) - sig->accept(this); -} - -void -nir_visitor::visit(ir_function_signature *ir) -{ - if (ir->is_intrinsic()) - return; - - this->sig = ir; - - struct hash_entry *entry = - _mesa_hash_table_search(this->overload_table, ir); - - assert(entry); - nir_function *func = (nir_function *) entry->data; - - if (ir->is_defined) { - nir_function_impl *impl = nir_function_impl_create(func); - this->impl = impl; - - this->is_global = false; - - nir_builder_init(&b, impl); - b.cursor = nir_after_cf_list(&impl->body); - - unsigned i = (ir->return_type != glsl_type::void_type) ? 1 : 0; - - foreach_in_list(ir_variable, param, &ir->parameters) { - nir_variable *var = - nir_local_variable_create(impl, param->type, param->name); - - if (param->data.mode == ir_var_function_in) { - nir_store_var(&b, var, nir_load_param(&b, i), ~0); - } - - _mesa_hash_table_insert(var_table, param, var); - i++; - } - - visit_exec_list(&ir->body, this); - - this->is_global = true; - } else { - func->impl = NULL; - } -} - -void -nir_visitor::visit(ir_loop *ir) -{ - nir_push_loop(&b); - visit_exec_list(&ir->body_instructions, this); - nir_pop_loop(&b, NULL); -} - -void -nir_visitor::visit(ir_if *ir) -{ - nir_push_if(&b, evaluate_rvalue(ir->condition)); - visit_exec_list(&ir->then_instructions, this); - nir_push_else(&b, NULL); - visit_exec_list(&ir->else_instructions, this); - nir_pop_if(&b, NULL); -} - -void -nir_visitor::visit(ir_discard *ir) -{ - /* - * discards aren't treated as control flow, because before we lower them - * they can appear anywhere in the shader and the stuff after them may still - * be executed (yay, crazy GLSL rules!). However, after lowering, all the - * discards will be immediately followed by a return. - */ - - if (ir->condition) - nir_discard_if(&b, evaluate_rvalue(ir->condition)); - else - nir_discard(&b); -} - -void -nir_visitor::visit(ir_demote *ir) -{ - nir_demote(&b); -} - -void -nir_visitor::visit(ir_emit_vertex *ir) -{ - nir_emit_vertex(&b, (unsigned)ir->stream_id()); -} - -void -nir_visitor::visit(ir_end_primitive *ir) -{ - nir_end_primitive(&b, (unsigned)ir->stream_id()); -} - -void -nir_visitor::visit(ir_loop_jump *ir) -{ - nir_jump_type type; - switch (ir->mode) { - case ir_loop_jump::jump_break: - type = nir_jump_break; - break; - case ir_loop_jump::jump_continue: - type = nir_jump_continue; - break; - default: - unreachable("not reached"); - } - - nir_jump_instr *instr = nir_jump_instr_create(this->shader, type); - nir_builder_instr_insert(&b, &instr->instr); -} - -void -nir_visitor::visit(ir_return *ir) -{ - if (ir->value != NULL) { - nir_deref_instr *ret_deref = - nir_build_deref_cast(&b, nir_load_param(&b, 0), - nir_var_function_temp, ir->value->type, 0); - - nir_ssa_def *val = evaluate_rvalue(ir->value); - nir_store_deref(&b, ret_deref, val, ~0); - } - - nir_jump_instr *instr = nir_jump_instr_create(this->shader, nir_jump_return); - nir_builder_instr_insert(&b, &instr->instr); -} - -static void -intrinsic_set_std430_align(nir_intrinsic_instr *intrin, const glsl_type *type) -{ - unsigned bit_size = type->is_boolean() ? 32 : glsl_get_bit_size(type); - unsigned pow2_components = util_next_power_of_two(type->vector_elements); - nir_intrinsic_set_align(intrin, (bit_size / 8) * pow2_components, 0); -} - -/* Accumulate any qualifiers along the deref chain to get the actual - * load/store qualifier. - */ - -static enum gl_access_qualifier -deref_get_qualifier(nir_deref_instr *deref) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - unsigned qualifiers = path.path[0]->var->data.access; - - const glsl_type *parent_type = path.path[0]->type; - for (nir_deref_instr **cur_ptr = &path.path[1]; *cur_ptr; cur_ptr++) { - nir_deref_instr *cur = *cur_ptr; - - if (parent_type->is_interface()) { - const struct glsl_struct_field *field = - &parent_type->fields.structure[cur->strct.index]; - if (field->memory_read_only) - qualifiers |= ACCESS_NON_WRITEABLE; - if (field->memory_write_only) - qualifiers |= ACCESS_NON_READABLE; - if (field->memory_coherent) - qualifiers |= ACCESS_COHERENT; - if (field->memory_volatile) - qualifiers |= ACCESS_VOLATILE; - if (field->memory_restrict) - qualifiers |= ACCESS_RESTRICT; - } - - parent_type = cur->type; - } - - nir_deref_path_finish(&path); - - return (gl_access_qualifier) qualifiers; -} - -void -nir_visitor::visit(ir_call *ir) -{ - if (ir->callee->is_intrinsic()) { - nir_intrinsic_op op; - - switch (ir->callee->intrinsic_id) { - case ir_intrinsic_generic_atomic_add: - op = ir->return_deref->type->is_integer_32_64() - ? nir_intrinsic_deref_atomic_add : nir_intrinsic_deref_atomic_fadd; - break; - case ir_intrinsic_generic_atomic_and: - op = nir_intrinsic_deref_atomic_and; - break; - case ir_intrinsic_generic_atomic_or: - op = nir_intrinsic_deref_atomic_or; - break; - case ir_intrinsic_generic_atomic_xor: - op = nir_intrinsic_deref_atomic_xor; - break; - case ir_intrinsic_generic_atomic_min: - assert(ir->return_deref); - if (ir->return_deref->type == glsl_type::int_type || - ir->return_deref->type == glsl_type::int64_t_type) - op = nir_intrinsic_deref_atomic_imin; - else if (ir->return_deref->type == glsl_type::uint_type || - ir->return_deref->type == glsl_type::uint64_t_type) - op = nir_intrinsic_deref_atomic_umin; - else if (ir->return_deref->type == glsl_type::float_type) - op = nir_intrinsic_deref_atomic_fmin; - else - unreachable("Invalid type"); - break; - case ir_intrinsic_generic_atomic_max: - assert(ir->return_deref); - if (ir->return_deref->type == glsl_type::int_type || - ir->return_deref->type == glsl_type::int64_t_type) - op = nir_intrinsic_deref_atomic_imax; - else if (ir->return_deref->type == glsl_type::uint_type || - ir->return_deref->type == glsl_type::uint64_t_type) - op = nir_intrinsic_deref_atomic_umax; - else if (ir->return_deref->type == glsl_type::float_type) - op = nir_intrinsic_deref_atomic_fmax; - else - unreachable("Invalid type"); - break; - case ir_intrinsic_generic_atomic_exchange: - op = nir_intrinsic_deref_atomic_exchange; - break; - case ir_intrinsic_generic_atomic_comp_swap: - op = ir->return_deref->type->is_integer_32_64() - ? nir_intrinsic_deref_atomic_comp_swap - : nir_intrinsic_deref_atomic_fcomp_swap; - break; - case ir_intrinsic_atomic_counter_read: - op = nir_intrinsic_atomic_counter_read_deref; - break; - case ir_intrinsic_atomic_counter_increment: - op = nir_intrinsic_atomic_counter_inc_deref; - break; - case ir_intrinsic_atomic_counter_predecrement: - op = nir_intrinsic_atomic_counter_pre_dec_deref; - break; - case ir_intrinsic_atomic_counter_add: - op = nir_intrinsic_atomic_counter_add_deref; - break; - case ir_intrinsic_atomic_counter_and: - op = nir_intrinsic_atomic_counter_and_deref; - break; - case ir_intrinsic_atomic_counter_or: - op = nir_intrinsic_atomic_counter_or_deref; - break; - case ir_intrinsic_atomic_counter_xor: - op = nir_intrinsic_atomic_counter_xor_deref; - break; - case ir_intrinsic_atomic_counter_min: - op = nir_intrinsic_atomic_counter_min_deref; - break; - case ir_intrinsic_atomic_counter_max: - op = nir_intrinsic_atomic_counter_max_deref; - break; - case ir_intrinsic_atomic_counter_exchange: - op = nir_intrinsic_atomic_counter_exchange_deref; - break; - case ir_intrinsic_atomic_counter_comp_swap: - op = nir_intrinsic_atomic_counter_comp_swap_deref; - break; - case ir_intrinsic_image_load: - op = nir_intrinsic_image_deref_load; - break; - case ir_intrinsic_image_store: - op = nir_intrinsic_image_deref_store; - break; - case ir_intrinsic_image_atomic_add: - op = ir->return_deref->type->is_integer_32_64() - ? nir_intrinsic_image_deref_atomic_add - : nir_intrinsic_image_deref_atomic_fadd; - break; - case ir_intrinsic_image_atomic_min: - if (ir->return_deref->type == glsl_type::int_type) - op = nir_intrinsic_image_deref_atomic_imin; - else if (ir->return_deref->type == glsl_type::uint_type) - op = nir_intrinsic_image_deref_atomic_umin; - else - unreachable("Invalid type"); - break; - case ir_intrinsic_image_atomic_max: - if (ir->return_deref->type == glsl_type::int_type) - op = nir_intrinsic_image_deref_atomic_imax; - else if (ir->return_deref->type == glsl_type::uint_type) - op = nir_intrinsic_image_deref_atomic_umax; - else - unreachable("Invalid type"); - break; - case ir_intrinsic_image_atomic_and: - op = nir_intrinsic_image_deref_atomic_and; - break; - case ir_intrinsic_image_atomic_or: - op = nir_intrinsic_image_deref_atomic_or; - break; - case ir_intrinsic_image_atomic_xor: - op = nir_intrinsic_image_deref_atomic_xor; - break; - case ir_intrinsic_image_atomic_exchange: - op = nir_intrinsic_image_deref_atomic_exchange; - break; - case ir_intrinsic_image_atomic_comp_swap: - op = nir_intrinsic_image_deref_atomic_comp_swap; - break; - case ir_intrinsic_image_atomic_inc_wrap: - op = nir_intrinsic_image_deref_atomic_inc_wrap; - break; - case ir_intrinsic_image_atomic_dec_wrap: - op = nir_intrinsic_image_deref_atomic_dec_wrap; - break; - case ir_intrinsic_memory_barrier: - op = shader->options->use_scoped_barrier - ? nir_intrinsic_scoped_barrier - : nir_intrinsic_memory_barrier; - break; - case ir_intrinsic_image_size: - op = nir_intrinsic_image_deref_size; - break; - case ir_intrinsic_image_samples: - op = nir_intrinsic_image_deref_samples; - break; - case ir_intrinsic_image_sparse_load: - op = nir_intrinsic_image_deref_sparse_load; - break; - case ir_intrinsic_shader_clock: - op = nir_intrinsic_shader_clock; - break; - case ir_intrinsic_begin_invocation_interlock: - op = nir_intrinsic_begin_invocation_interlock; - break; - case ir_intrinsic_end_invocation_interlock: - op = nir_intrinsic_end_invocation_interlock; - break; - case ir_intrinsic_group_memory_barrier: - op = shader->options->use_scoped_barrier - ? nir_intrinsic_scoped_barrier - : nir_intrinsic_group_memory_barrier; - break; - case ir_intrinsic_memory_barrier_atomic_counter: - op = shader->options->use_scoped_barrier - ? nir_intrinsic_scoped_barrier - : nir_intrinsic_memory_barrier_atomic_counter; - break; - case ir_intrinsic_memory_barrier_buffer: - op = shader->options->use_scoped_barrier - ? nir_intrinsic_scoped_barrier - : nir_intrinsic_memory_barrier_buffer; - break; - case ir_intrinsic_memory_barrier_image: - op = shader->options->use_scoped_barrier - ? nir_intrinsic_scoped_barrier - : nir_intrinsic_memory_barrier_image; - break; - case ir_intrinsic_memory_barrier_shared: - op = shader->options->use_scoped_barrier - ? nir_intrinsic_scoped_barrier - : nir_intrinsic_memory_barrier_shared; - break; - case ir_intrinsic_shared_load: - op = nir_intrinsic_load_shared; - break; - case ir_intrinsic_shared_store: - op = nir_intrinsic_store_shared; - break; - case ir_intrinsic_shared_atomic_add: - op = ir->return_deref->type->is_integer_32_64() - ? nir_intrinsic_shared_atomic_add - : nir_intrinsic_shared_atomic_fadd; - break; - case ir_intrinsic_shared_atomic_and: - op = nir_intrinsic_shared_atomic_and; - break; - case ir_intrinsic_shared_atomic_or: - op = nir_intrinsic_shared_atomic_or; - break; - case ir_intrinsic_shared_atomic_xor: - op = nir_intrinsic_shared_atomic_xor; - break; - case ir_intrinsic_shared_atomic_min: - assert(ir->return_deref); - if (ir->return_deref->type == glsl_type::int_type || - ir->return_deref->type == glsl_type::int64_t_type) - op = nir_intrinsic_shared_atomic_imin; - else if (ir->return_deref->type == glsl_type::uint_type || - ir->return_deref->type == glsl_type::uint64_t_type) - op = nir_intrinsic_shared_atomic_umin; - else if (ir->return_deref->type == glsl_type::float_type) - op = nir_intrinsic_shared_atomic_fmin; - else - unreachable("Invalid type"); - break; - case ir_intrinsic_shared_atomic_max: - assert(ir->return_deref); - if (ir->return_deref->type == glsl_type::int_type || - ir->return_deref->type == glsl_type::int64_t_type) - op = nir_intrinsic_shared_atomic_imax; - else if (ir->return_deref->type == glsl_type::uint_type || - ir->return_deref->type == glsl_type::uint64_t_type) - op = nir_intrinsic_shared_atomic_umax; - else if (ir->return_deref->type == glsl_type::float_type) - op = nir_intrinsic_shared_atomic_fmax; - else - unreachable("Invalid type"); - break; - case ir_intrinsic_shared_atomic_exchange: - op = nir_intrinsic_shared_atomic_exchange; - break; - case ir_intrinsic_shared_atomic_comp_swap: - op = ir->return_deref->type->is_integer_32_64() - ? nir_intrinsic_shared_atomic_comp_swap - : nir_intrinsic_shared_atomic_fcomp_swap; - break; - case ir_intrinsic_vote_any: - op = nir_intrinsic_vote_any; - break; - case ir_intrinsic_vote_all: - op = nir_intrinsic_vote_all; - break; - case ir_intrinsic_vote_eq: - op = nir_intrinsic_vote_ieq; - break; - case ir_intrinsic_ballot: - op = nir_intrinsic_ballot; - break; - case ir_intrinsic_read_invocation: - op = nir_intrinsic_read_invocation; - break; - case ir_intrinsic_read_first_invocation: - op = nir_intrinsic_read_first_invocation; - break; - case ir_intrinsic_helper_invocation: - op = nir_intrinsic_is_helper_invocation; - break; - case ir_intrinsic_is_sparse_texels_resident: - op = nir_intrinsic_is_sparse_texels_resident; - break; - default: - unreachable("not reached"); - } - - nir_intrinsic_instr *instr = nir_intrinsic_instr_create(shader, op); - nir_ssa_def *ret = &instr->dest.ssa; - - switch (op) { - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_fcomp_swap: { - int param_count = ir->actual_parameters.length(); - assert(param_count == 2 || param_count == 3); - - /* Deref */ - exec_node *param = ir->actual_parameters.get_head(); - ir_rvalue *rvalue = (ir_rvalue *) param; - ir_dereference *deref = rvalue->as_dereference(); - ir_swizzle *swizzle = NULL; - if (!deref) { - /* We may have a swizzle to pick off a single vec4 component */ - swizzle = rvalue->as_swizzle(); - assert(swizzle && swizzle->type->vector_elements == 1); - deref = swizzle->val->as_dereference(); - assert(deref); - } - nir_deref_instr *nir_deref = evaluate_deref(deref); - if (swizzle) { - nir_deref = nir_build_deref_array_imm(&b, nir_deref, - swizzle->mask.x); - } - instr->src[0] = nir_src_for_ssa(&nir_deref->dest.ssa); - - nir_intrinsic_set_access(instr, deref_get_qualifier(nir_deref)); - - /* data1 parameter (this is always present) */ - param = param->get_next(); - ir_instruction *inst = (ir_instruction *) param; - instr->src[1] = nir_src_for_ssa(evaluate_rvalue(inst->as_rvalue())); - - /* data2 parameter (only with atomic_comp_swap) */ - if (param_count == 3) { - assert(op == nir_intrinsic_deref_atomic_comp_swap || - op == nir_intrinsic_deref_atomic_fcomp_swap); - param = param->get_next(); - inst = (ir_instruction *) param; - instr->src[2] = nir_src_for_ssa(evaluate_rvalue(inst->as_rvalue())); - } - - /* Atomic result */ - assert(ir->return_deref); - if (ir->return_deref->type->is_integer_64()) { - nir_ssa_dest_init(&instr->instr, &instr->dest, - ir->return_deref->type->vector_elements, 64, NULL); - } else { - nir_ssa_dest_init(&instr->instr, &instr->dest, - ir->return_deref->type->vector_elements, 32, NULL); - } - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_atomic_counter_read_deref: - case nir_intrinsic_atomic_counter_inc_deref: - case nir_intrinsic_atomic_counter_pre_dec_deref: - case nir_intrinsic_atomic_counter_add_deref: - case nir_intrinsic_atomic_counter_min_deref: - case nir_intrinsic_atomic_counter_max_deref: - case nir_intrinsic_atomic_counter_and_deref: - case nir_intrinsic_atomic_counter_or_deref: - case nir_intrinsic_atomic_counter_xor_deref: - case nir_intrinsic_atomic_counter_exchange_deref: - case nir_intrinsic_atomic_counter_comp_swap_deref: { - /* Set the counter variable dereference. */ - exec_node *param = ir->actual_parameters.get_head(); - ir_dereference *counter = (ir_dereference *)param; - - instr->src[0] = nir_src_for_ssa(&evaluate_deref(counter)->dest.ssa); - param = param->get_next(); - - /* Set the intrinsic destination. */ - if (ir->return_deref) { - nir_ssa_dest_init(&instr->instr, &instr->dest, 1, 32, NULL); - } - - /* Set the intrinsic parameters. */ - if (!param->is_tail_sentinel()) { - instr->src[1] = - nir_src_for_ssa(evaluate_rvalue((ir_dereference *)param)); - param = param->get_next(); - } - - if (!param->is_tail_sentinel()) { - instr->src[2] = - nir_src_for_ssa(evaluate_rvalue((ir_dereference *)param)); - param = param->get_next(); - } - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_image_deref_atomic_inc_wrap: - case nir_intrinsic_image_deref_atomic_dec_wrap: - case nir_intrinsic_image_deref_sparse_load: { - /* Set the image variable dereference. */ - exec_node *param = ir->actual_parameters.get_head(); - ir_dereference *image = (ir_dereference *)param; - nir_deref_instr *deref = evaluate_deref(image); - const glsl_type *type = deref->type; - - nir_intrinsic_set_access(instr, deref_get_qualifier(deref)); - - instr->src[0] = nir_src_for_ssa(&deref->dest.ssa); - param = param->get_next(); - nir_intrinsic_set_image_dim(instr, - (glsl_sampler_dim)type->sampler_dimensionality); - nir_intrinsic_set_image_array(instr, type->sampler_array); - - /* Set the intrinsic destination. */ - if (ir->return_deref) { - unsigned num_components; - if (op == nir_intrinsic_image_deref_sparse_load) { - const glsl_type *dest_type = - ir->return_deref->type->field_type("texel"); - /* One extra component to hold residency code. */ - num_components = dest_type->vector_elements + 1; - } else - num_components = ir->return_deref->type->vector_elements; - - nir_ssa_dest_init(&instr->instr, &instr->dest, - num_components, 32, NULL); - } - - if (op == nir_intrinsic_image_deref_size) { - instr->num_components = instr->dest.ssa.num_components; - } else if (op == nir_intrinsic_image_deref_load || - op == nir_intrinsic_image_deref_sparse_load) { - instr->num_components = instr->dest.ssa.num_components; - nir_intrinsic_set_dest_type(instr, - nir_get_nir_type_for_glsl_base_type(type->sampled_type)); - } else if (op == nir_intrinsic_image_deref_store) { - instr->num_components = 4; - nir_intrinsic_set_src_type(instr, - nir_get_nir_type_for_glsl_base_type(type->sampled_type)); - } - - if (op == nir_intrinsic_image_deref_size || - op == nir_intrinsic_image_deref_samples) { - /* image_deref_size takes an LOD parameter which is always 0 - * coming from GLSL. - */ - if (op == nir_intrinsic_image_deref_size) - instr->src[1] = nir_src_for_ssa(nir_imm_int(&b, 0)); - nir_builder_instr_insert(&b, &instr->instr); - break; - } - - /* Set the address argument, extending the coordinate vector to four - * components. - */ - nir_ssa_def *src_addr = - evaluate_rvalue((ir_dereference *)param); - nir_ssa_def *srcs[4]; - - for (int i = 0; i < 4; i++) { - if (i < type->coordinate_components()) - srcs[i] = nir_channel(&b, src_addr, i); - else - srcs[i] = nir_ssa_undef(&b, 1, 32); - } - - instr->src[1] = nir_src_for_ssa(nir_vec(&b, srcs, 4)); - param = param->get_next(); - - /* Set the sample argument, which is undefined for single-sample - * images. - */ - if (type->sampler_dimensionality == GLSL_SAMPLER_DIM_MS) { - instr->src[2] = - nir_src_for_ssa(evaluate_rvalue((ir_dereference *)param)); - param = param->get_next(); - } else { - instr->src[2] = nir_src_for_ssa(nir_ssa_undef(&b, 1, 32)); - } - - /* Set the intrinsic parameters. */ - if (!param->is_tail_sentinel()) { - instr->src[3] = - nir_src_for_ssa(evaluate_rvalue((ir_dereference *)param)); - param = param->get_next(); - } else if (op == nir_intrinsic_image_deref_load || - op == nir_intrinsic_image_deref_sparse_load) { - instr->src[3] = nir_src_for_ssa(nir_imm_int(&b, 0)); /* LOD */ - } - - if (!param->is_tail_sentinel()) { - instr->src[4] = - nir_src_for_ssa(evaluate_rvalue((ir_dereference *)param)); - param = param->get_next(); - } else if (op == nir_intrinsic_image_deref_store) { - instr->src[4] = nir_src_for_ssa(nir_imm_int(&b, 0)); /* LOD */ - } - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_memory_barrier: - case nir_intrinsic_group_memory_barrier: - case nir_intrinsic_memory_barrier_atomic_counter: - case nir_intrinsic_memory_barrier_buffer: - case nir_intrinsic_memory_barrier_image: - case nir_intrinsic_memory_barrier_shared: - nir_builder_instr_insert(&b, &instr->instr); - break; - case nir_intrinsic_scoped_barrier: { - /* The nir_intrinsic_scoped_barrier follows the general - * semantics of SPIR-V memory barriers, so this and other memory - * barriers use the mapping based on GLSL->SPIR-V from - * - * https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gl_spirv.txt - */ - nir_scope scope; - unsigned modes; - switch (ir->callee->intrinsic_id) { - case ir_intrinsic_memory_barrier: - scope = NIR_SCOPE_DEVICE; - modes = nir_var_image | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global; - break; - case ir_intrinsic_memory_barrier_buffer: - scope = NIR_SCOPE_DEVICE; - modes = nir_var_mem_ssbo | - nir_var_mem_global; - break; - case ir_intrinsic_memory_barrier_image: - scope = NIR_SCOPE_DEVICE; - modes = nir_var_image; - break; - case ir_intrinsic_memory_barrier_shared: - /* Both ARB_gl_spirv and glslang lower this to Device scope, so - * follow their lead. Note GL_KHR_vulkan_glsl also does - * something similar. - */ - scope = NIR_SCOPE_DEVICE; - modes = nir_var_mem_shared; - break; - case ir_intrinsic_group_memory_barrier: - scope = NIR_SCOPE_WORKGROUP; - modes = nir_var_image | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global; - break; - case ir_intrinsic_memory_barrier_atomic_counter: - /* There's no nir_var_atomic_counter, but since atomic counters are lowered - * to SSBOs, we use nir_var_mem_ssbo instead. - */ - scope = NIR_SCOPE_DEVICE; - modes = nir_var_mem_ssbo; - break; - default: - unreachable("invalid intrinsic id for memory barrier"); - } - - nir_scoped_memory_barrier(&b, scope, NIR_MEMORY_ACQ_REL, - (nir_variable_mode)modes); - break; - } - case nir_intrinsic_shader_clock: - nir_ssa_dest_init(&instr->instr, &instr->dest, 2, 32, NULL); - nir_intrinsic_set_memory_scope(instr, NIR_SCOPE_SUBGROUP); - nir_builder_instr_insert(&b, &instr->instr); - break; - case nir_intrinsic_begin_invocation_interlock: - nir_builder_instr_insert(&b, &instr->instr); - break; - case nir_intrinsic_end_invocation_interlock: - nir_builder_instr_insert(&b, &instr->instr); - break; - case nir_intrinsic_store_ssbo: { - exec_node *param = ir->actual_parameters.get_head(); - ir_rvalue *block = ((ir_instruction *)param)->as_rvalue(); - - param = param->get_next(); - ir_rvalue *offset = ((ir_instruction *)param)->as_rvalue(); - - param = param->get_next(); - ir_rvalue *val = ((ir_instruction *)param)->as_rvalue(); - - param = param->get_next(); - ir_constant *write_mask = ((ir_instruction *)param)->as_constant(); - assert(write_mask); - - nir_ssa_def *nir_val = evaluate_rvalue(val); - if (val->type->is_boolean()) - nir_val = nir_b2i32(&b, nir_val); - - instr->src[0] = nir_src_for_ssa(nir_val); - instr->src[1] = nir_src_for_ssa(evaluate_rvalue(block)); - instr->src[2] = nir_src_for_ssa(evaluate_rvalue(offset)); - intrinsic_set_std430_align(instr, val->type); - nir_intrinsic_set_write_mask(instr, write_mask->value.u[0]); - instr->num_components = val->type->vector_elements; - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_load_shared: { - exec_node *param = ir->actual_parameters.get_head(); - ir_rvalue *offset = ((ir_instruction *)param)->as_rvalue(); - - nir_intrinsic_set_base(instr, 0); - instr->src[0] = nir_src_for_ssa(evaluate_rvalue(offset)); - - const glsl_type *type = ir->return_deref->var->type; - instr->num_components = type->vector_elements; - intrinsic_set_std430_align(instr, type); - - /* Setup destination register */ - unsigned bit_size = type->is_boolean() ? 32 : glsl_get_bit_size(type); - nir_ssa_dest_init(&instr->instr, &instr->dest, - type->vector_elements, bit_size, NULL); - - nir_builder_instr_insert(&b, &instr->instr); - - /* The value in shared memory is a 32-bit value */ - if (type->is_boolean()) - ret = nir_b2b1(&b, &instr->dest.ssa); - break; - } - case nir_intrinsic_store_shared: { - exec_node *param = ir->actual_parameters.get_head(); - ir_rvalue *offset = ((ir_instruction *)param)->as_rvalue(); - - param = param->get_next(); - ir_rvalue *val = ((ir_instruction *)param)->as_rvalue(); - - param = param->get_next(); - ir_constant *write_mask = ((ir_instruction *)param)->as_constant(); - assert(write_mask); - - nir_intrinsic_set_base(instr, 0); - instr->src[1] = nir_src_for_ssa(evaluate_rvalue(offset)); - - nir_intrinsic_set_write_mask(instr, write_mask->value.u[0]); - - nir_ssa_def *nir_val = evaluate_rvalue(val); - /* The value in shared memory is a 32-bit value */ - if (val->type->is_boolean()) - nir_val = nir_b2b32(&b, nir_val); - - instr->src[0] = nir_src_for_ssa(nir_val); - instr->num_components = val->type->vector_elements; - intrinsic_set_std430_align(instr, val->type); - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_shared_atomic_add: - case nir_intrinsic_shared_atomic_imin: - case nir_intrinsic_shared_atomic_umin: - case nir_intrinsic_shared_atomic_imax: - case nir_intrinsic_shared_atomic_umax: - case nir_intrinsic_shared_atomic_and: - case nir_intrinsic_shared_atomic_or: - case nir_intrinsic_shared_atomic_xor: - case nir_intrinsic_shared_atomic_exchange: - case nir_intrinsic_shared_atomic_comp_swap: - case nir_intrinsic_shared_atomic_fadd: - case nir_intrinsic_shared_atomic_fmin: - case nir_intrinsic_shared_atomic_fmax: - case nir_intrinsic_shared_atomic_fcomp_swap: { - int param_count = ir->actual_parameters.length(); - assert(param_count == 2 || param_count == 3); - - /* Offset */ - exec_node *param = ir->actual_parameters.get_head(); - ir_instruction *inst = (ir_instruction *) param; - instr->src[0] = nir_src_for_ssa(evaluate_rvalue(inst->as_rvalue())); - - /* data1 parameter (this is always present) */ - param = param->get_next(); - inst = (ir_instruction *) param; - instr->src[1] = nir_src_for_ssa(evaluate_rvalue(inst->as_rvalue())); - - /* data2 parameter (only with atomic_comp_swap) */ - if (param_count == 3) { - assert(op == nir_intrinsic_shared_atomic_comp_swap || - op == nir_intrinsic_shared_atomic_fcomp_swap); - param = param->get_next(); - inst = (ir_instruction *) param; - instr->src[2] = - nir_src_for_ssa(evaluate_rvalue(inst->as_rvalue())); - } - - /* Atomic result */ - assert(ir->return_deref); - unsigned bit_size = glsl_get_bit_size(ir->return_deref->type); - nir_ssa_dest_init(&instr->instr, &instr->dest, - ir->return_deref->type->vector_elements, - bit_size, NULL); - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_vote_ieq: - instr->num_components = 1; - - case nir_intrinsic_vote_any: - case nir_intrinsic_vote_all: { - nir_ssa_dest_init(&instr->instr, &instr->dest, 1, 1, NULL); - - ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); - instr->src[0] = nir_src_for_ssa(evaluate_rvalue(value)); - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - - case nir_intrinsic_ballot: { - nir_ssa_dest_init(&instr->instr, &instr->dest, - ir->return_deref->type->vector_elements, 64, NULL); - instr->num_components = ir->return_deref->type->vector_elements; - - ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); - instr->src[0] = nir_src_for_ssa(evaluate_rvalue(value)); - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_read_invocation: { - nir_ssa_dest_init(&instr->instr, &instr->dest, - ir->return_deref->type->vector_elements, 32, NULL); - instr->num_components = ir->return_deref->type->vector_elements; - - ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); - instr->src[0] = nir_src_for_ssa(evaluate_rvalue(value)); - - ir_rvalue *invocation = (ir_rvalue *) ir->actual_parameters.get_head()->next; - instr->src[1] = nir_src_for_ssa(evaluate_rvalue(invocation)); - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_read_first_invocation: { - nir_ssa_dest_init(&instr->instr, &instr->dest, - ir->return_deref->type->vector_elements, 32, NULL); - instr->num_components = ir->return_deref->type->vector_elements; - - ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); - instr->src[0] = nir_src_for_ssa(evaluate_rvalue(value)); - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_is_helper_invocation: { - nir_ssa_dest_init(&instr->instr, &instr->dest, 1, 1, NULL); - nir_builder_instr_insert(&b, &instr->instr); - break; - } - case nir_intrinsic_is_sparse_texels_resident: { - nir_ssa_dest_init(&instr->instr, &instr->dest, 1, 1, NULL); - - ir_rvalue *value = (ir_rvalue *) ir->actual_parameters.get_head(); - instr->src[0] = nir_src_for_ssa(evaluate_rvalue(value)); - - nir_builder_instr_insert(&b, &instr->instr); - break; - } - default: - unreachable("not reached"); - } - - if (ir->return_deref) { - nir_deref_instr *ret_deref = evaluate_deref(ir->return_deref); - - if (op == nir_intrinsic_image_deref_sparse_load) - adjust_sparse_variable(ret_deref, ir->return_deref->type, ret); - - nir_store_deref(&b, ret_deref, ret, ~0); - } - - return; - } - - struct hash_entry *entry = - _mesa_hash_table_search(this->overload_table, ir->callee); - assert(entry); - nir_function *callee = (nir_function *) entry->data; - - nir_call_instr *call = nir_call_instr_create(this->shader, callee); - - unsigned i = 0; - nir_deref_instr *ret_deref = NULL; - if (ir->return_deref) { - nir_variable *ret_tmp = - nir_local_variable_create(this->impl, ir->return_deref->type, - "return_tmp"); - ret_deref = nir_build_deref_var(&b, ret_tmp); - call->params[i++] = nir_src_for_ssa(&ret_deref->dest.ssa); - } - - foreach_two_lists(formal_node, &ir->callee->parameters, - actual_node, &ir->actual_parameters) { - ir_rvalue *param_rvalue = (ir_rvalue *) actual_node; - ir_variable *sig_param = (ir_variable *) formal_node; - - if (sig_param->data.mode == ir_var_function_out) { - nir_deref_instr *out_deref = evaluate_deref(param_rvalue); - call->params[i] = nir_src_for_ssa(&out_deref->dest.ssa); - } else if (sig_param->data.mode == ir_var_function_in) { - nir_ssa_def *val = evaluate_rvalue(param_rvalue); - nir_src src = nir_src_for_ssa(val); - - nir_src_copy(&call->params[i], &src, &call->instr); - } else if (sig_param->data.mode == ir_var_function_inout) { - unreachable("unimplemented: inout parameters"); - } - - i++; - } - - nir_builder_instr_insert(&b, &call->instr); - - if (ir->return_deref) - nir_store_deref(&b, evaluate_deref(ir->return_deref), nir_load_deref(&b, ret_deref), ~0); -} - -void -nir_visitor::visit(ir_assignment *ir) -{ - unsigned num_components = ir->lhs->type->vector_elements; - unsigned write_mask = ir->write_mask; - - b.exact = ir->lhs->variable_referenced()->data.invariant || - ir->lhs->variable_referenced()->data.precise; - - if ((ir->rhs->as_dereference() || ir->rhs->as_constant()) && - (write_mask == BITFIELD_MASK(num_components) || write_mask == 0)) { - nir_deref_instr *lhs = evaluate_deref(ir->lhs); - nir_deref_instr *rhs = evaluate_deref(ir->rhs); - enum gl_access_qualifier lhs_qualifiers = deref_get_qualifier(lhs); - enum gl_access_qualifier rhs_qualifiers = deref_get_qualifier(rhs); - - nir_copy_deref_with_access(&b, lhs, rhs, lhs_qualifiers, - rhs_qualifiers); - return; - } - - ir_texture *tex = ir->rhs->as_texture(); - bool is_sparse = tex && tex->is_sparse; - - if (!is_sparse) - assert(ir->rhs->type->is_scalar() || ir->rhs->type->is_vector()); - - ir->lhs->accept(this); - nir_deref_instr *lhs_deref = this->deref; - nir_ssa_def *src = evaluate_rvalue(ir->rhs); - - if (is_sparse) { - adjust_sparse_variable(lhs_deref, tex->type, src); - - /* correct component and mask because they are 0 for struct */ - num_components = src->num_components; - write_mask = BITFIELD_MASK(num_components); - } - - if (write_mask != BITFIELD_MASK(num_components) && write_mask != 0) { - /* GLSL IR will give us the input to the write-masked assignment in a - * single packed vector. So, for example, if the writemask is xzw, then - * we have to swizzle x -> x, y -> z, and z -> w and get the y component - * from the load. - */ - unsigned swiz[4]; - unsigned component = 0; - for (unsigned i = 0; i < 4; i++) { - swiz[i] = write_mask & (1 << i) ? component++ : 0; - } - src = nir_swizzle(&b, src, swiz, num_components); - } - - enum gl_access_qualifier qualifiers = deref_get_qualifier(lhs_deref); - - nir_store_deref_with_access(&b, lhs_deref, src, write_mask, - qualifiers); -} - -/* - * Given an instruction, returns a pointer to its destination or NULL if there - * is no destination. - * - * Note that this only handles instructions we generate at this level. - */ -static nir_dest * -get_instr_dest(nir_instr *instr) -{ - nir_alu_instr *alu_instr; - nir_intrinsic_instr *intrinsic_instr; - nir_tex_instr *tex_instr; - - switch (instr->type) { - case nir_instr_type_alu: - alu_instr = nir_instr_as_alu(instr); - return &alu_instr->dest.dest; - - case nir_instr_type_intrinsic: - intrinsic_instr = nir_instr_as_intrinsic(instr); - if (nir_intrinsic_infos[intrinsic_instr->intrinsic].has_dest) - return &intrinsic_instr->dest; - else - return NULL; - - case nir_instr_type_tex: - tex_instr = nir_instr_as_tex(instr); - return &tex_instr->dest; - - default: - unreachable("not reached"); - } - - return NULL; -} - -void -nir_visitor::add_instr(nir_instr *instr, unsigned num_components, - unsigned bit_size) -{ - nir_dest *dest = get_instr_dest(instr); - - if (dest) - nir_ssa_dest_init(instr, dest, num_components, bit_size, NULL); - - nir_builder_instr_insert(&b, instr); - - if (dest) { - assert(dest->is_ssa); - this->result = &dest->ssa; - } -} - -nir_ssa_def * -nir_visitor::evaluate_rvalue(ir_rvalue* ir) -{ - ir->accept(this); - if (ir->as_dereference() || ir->as_constant()) { - /* - * A dereference is being used on the right hand side, which means we - * must emit a variable load. - */ - - enum gl_access_qualifier access = deref_get_qualifier(this->deref); - this->result = nir_load_deref_with_access(&b, this->deref, access); - } - - return this->result; -} - -static bool -type_is_float(glsl_base_type type) -{ - return type == GLSL_TYPE_FLOAT || type == GLSL_TYPE_DOUBLE || - type == GLSL_TYPE_FLOAT16; -} - -static bool -type_is_signed(glsl_base_type type) -{ - return type == GLSL_TYPE_INT || type == GLSL_TYPE_INT64 || - type == GLSL_TYPE_INT16; -} - -void -nir_visitor::visit(ir_expression *ir) -{ - /* Some special cases */ - switch (ir->operation) { - case ir_unop_interpolate_at_centroid: - case ir_binop_interpolate_at_offset: - case ir_binop_interpolate_at_sample: { - ir_dereference *deref = ir->operands[0]->as_dereference(); - ir_swizzle *swizzle = NULL; - if (!deref) { - /* the api does not allow a swizzle here, but the varying packing code - * may have pushed one into here. - */ - swizzle = ir->operands[0]->as_swizzle(); - assert(swizzle); - deref = swizzle->val->as_dereference(); - assert(deref); - } - - deref->accept(this); - - assert(nir_deref_mode_is(this->deref, nir_var_shader_in)); - nir_intrinsic_op op; - switch (ir->operation) { - case ir_unop_interpolate_at_centroid: - op = nir_intrinsic_interp_deref_at_centroid; - break; - case ir_binop_interpolate_at_offset: - op = nir_intrinsic_interp_deref_at_offset; - break; - case ir_binop_interpolate_at_sample: - op = nir_intrinsic_interp_deref_at_sample; - break; - default: - unreachable("Invalid interpolation intrinsic"); - } - - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create(shader, op); - intrin->num_components = deref->type->vector_elements; - intrin->src[0] = nir_src_for_ssa(&this->deref->dest.ssa); - - if (intrin->intrinsic == nir_intrinsic_interp_deref_at_offset || - intrin->intrinsic == nir_intrinsic_interp_deref_at_sample) - intrin->src[1] = nir_src_for_ssa(evaluate_rvalue(ir->operands[1])); - - unsigned bit_size = glsl_get_bit_size(deref->type); - add_instr(&intrin->instr, deref->type->vector_elements, bit_size); - - if (swizzle) { - unsigned swiz[4] = { - swizzle->mask.x, swizzle->mask.y, swizzle->mask.z, swizzle->mask.w - }; - - result = nir_swizzle(&b, result, swiz, - swizzle->type->vector_elements); - } - - return; - } - - case ir_unop_ssbo_unsized_array_length: { - nir_intrinsic_instr *intrin = - nir_intrinsic_instr_create(b.shader, - nir_intrinsic_deref_buffer_array_length); - - ir_dereference *deref = ir->operands[0]->as_dereference(); - intrin->src[0] = nir_src_for_ssa(&evaluate_deref(deref)->dest.ssa); - - add_instr(&intrin->instr, 1, 32); - return; - } - - case ir_binop_ubo_load: - /* UBO loads should only have been lowered in GLSL IR for non-nir drivers, - * NIR drivers make use of gl_nir_lower_buffers() instead. - */ - unreachable("Invalid operation nir doesn't want lowered ubo loads"); - default: - break; - } - - nir_ssa_def *srcs[4]; - for (unsigned i = 0; i < ir->num_operands; i++) - srcs[i] = evaluate_rvalue(ir->operands[i]); - - glsl_base_type types[4]; - for (unsigned i = 0; i < ir->num_operands; i++) - types[i] = ir->operands[i]->type->base_type; - - glsl_base_type out_type = ir->type->base_type; - - switch (ir->operation) { - case ir_unop_bit_not: result = nir_inot(&b, srcs[0]); break; - case ir_unop_logic_not: - result = nir_inot(&b, srcs[0]); - break; - case ir_unop_neg: - result = type_is_float(types[0]) ? nir_fneg(&b, srcs[0]) - : nir_ineg(&b, srcs[0]); - break; - case ir_unop_abs: - result = type_is_float(types[0]) ? nir_fabs(&b, srcs[0]) - : nir_iabs(&b, srcs[0]); - break; - case ir_unop_clz: - result = nir_uclz(&b, srcs[0]); - break; - case ir_unop_saturate: - assert(type_is_float(types[0])); - result = nir_fsat(&b, srcs[0]); - break; - case ir_unop_sign: - result = type_is_float(types[0]) ? nir_fsign(&b, srcs[0]) - : nir_isign(&b, srcs[0]); - break; - case ir_unop_rcp: result = nir_frcp(&b, srcs[0]); break; - - case ir_unop_rsq: - if (consts->ForceGLSLAbsSqrt) - srcs[0] = nir_fabs(&b, srcs[0]); - result = nir_frsq(&b, srcs[0]); - break; - - case ir_unop_sqrt: - if (consts->ForceGLSLAbsSqrt) - srcs[0] = nir_fabs(&b, srcs[0]); - result = nir_fsqrt(&b, srcs[0]); - break; - - case ir_unop_exp: result = nir_fexp2(&b, nir_fmul_imm(&b, srcs[0], M_LOG2E)); break; - case ir_unop_log: result = nir_fmul_imm(&b, nir_flog2(&b, srcs[0]), 1.0 / M_LOG2E); break; - case ir_unop_exp2: result = nir_fexp2(&b, srcs[0]); break; - case ir_unop_log2: result = nir_flog2(&b, srcs[0]); break; - case ir_unop_i2f: - case ir_unop_u2f: - case ir_unop_b2f: - case ir_unop_f2i: - case ir_unop_f2u: - case ir_unop_f2b: - case ir_unop_i2b: - case ir_unop_b2i: - case ir_unop_b2i64: - case ir_unop_d2f: - case ir_unop_f2d: - case ir_unop_f162f: - case ir_unop_f2f16: - case ir_unop_f162b: - case ir_unop_b2f16: - case ir_unop_i2i: - case ir_unop_u2u: - case ir_unop_d2i: - case ir_unop_d2u: - case ir_unop_d2b: - case ir_unop_i2d: - case ir_unop_u2d: - case ir_unop_i642i: - case ir_unop_i642u: - case ir_unop_i642f: - case ir_unop_i642b: - case ir_unop_i642d: - case ir_unop_u642i: - case ir_unop_u642u: - case ir_unop_u642f: - case ir_unop_u642d: - case ir_unop_i2i64: - case ir_unop_u2i64: - case ir_unop_f2i64: - case ir_unop_d2i64: - case ir_unop_i2u64: - case ir_unop_u2u64: - case ir_unop_f2u64: - case ir_unop_d2u64: - case ir_unop_i2u: - case ir_unop_u2i: - case ir_unop_i642u64: - case ir_unop_u642i64: { - nir_alu_type src_type = nir_get_nir_type_for_glsl_base_type(types[0]); - nir_alu_type dst_type = nir_get_nir_type_for_glsl_base_type(out_type); - result = nir_type_convert(&b, srcs[0], src_type, dst_type, - nir_rounding_mode_undef); - /* b2i and b2f don't have fixed bit-size versions so the builder will - * just assume 32 and we have to fix it up here. - */ - result->bit_size = nir_alu_type_get_type_size(dst_type); - break; - } - - case ir_unop_f2fmp: { - result = nir_build_alu(&b, nir_op_f2fmp, srcs[0], NULL, NULL, NULL); - break; - } - - case ir_unop_i2imp: { - result = nir_build_alu(&b, nir_op_i2imp, srcs[0], NULL, NULL, NULL); - break; - } - - case ir_unop_u2ump: { - result = nir_build_alu(&b, nir_op_i2imp, srcs[0], NULL, NULL, NULL); - break; - } - - case ir_unop_bitcast_i2f: - case ir_unop_bitcast_f2i: - case ir_unop_bitcast_u2f: - case ir_unop_bitcast_f2u: - case ir_unop_bitcast_i642d: - case ir_unop_bitcast_d2i64: - case ir_unop_bitcast_u642d: - case ir_unop_bitcast_d2u64: - case ir_unop_subroutine_to_int: - /* no-op */ - result = nir_mov(&b, srcs[0]); - break; - case ir_unop_trunc: result = nir_ftrunc(&b, srcs[0]); break; - case ir_unop_ceil: result = nir_fceil(&b, srcs[0]); break; - case ir_unop_floor: result = nir_ffloor(&b, srcs[0]); break; - case ir_unop_fract: result = nir_ffract(&b, srcs[0]); break; - case ir_unop_frexp_exp: result = nir_frexp_exp(&b, srcs[0]); break; - case ir_unop_frexp_sig: result = nir_frexp_sig(&b, srcs[0]); break; - case ir_unop_round_even: result = nir_fround_even(&b, srcs[0]); break; - case ir_unop_sin: result = nir_fsin(&b, srcs[0]); break; - case ir_unop_cos: result = nir_fcos(&b, srcs[0]); break; - case ir_unop_dFdx: result = nir_fddx(&b, srcs[0]); break; - case ir_unop_dFdy: result = nir_fddy(&b, srcs[0]); break; - case ir_unop_dFdx_fine: result = nir_fddx_fine(&b, srcs[0]); break; - case ir_unop_dFdy_fine: result = nir_fddy_fine(&b, srcs[0]); break; - case ir_unop_dFdx_coarse: result = nir_fddx_coarse(&b, srcs[0]); break; - case ir_unop_dFdy_coarse: result = nir_fddy_coarse(&b, srcs[0]); break; - case ir_unop_pack_snorm_2x16: - result = nir_pack_snorm_2x16(&b, srcs[0]); - break; - case ir_unop_pack_snorm_4x8: - result = nir_pack_snorm_4x8(&b, srcs[0]); - break; - case ir_unop_pack_unorm_2x16: - result = nir_pack_unorm_2x16(&b, srcs[0]); - break; - case ir_unop_pack_unorm_4x8: - result = nir_pack_unorm_4x8(&b, srcs[0]); - break; - case ir_unop_pack_half_2x16: - result = nir_pack_half_2x16(&b, srcs[0]); - break; - case ir_unop_unpack_snorm_2x16: - result = nir_unpack_snorm_2x16(&b, srcs[0]); - break; - case ir_unop_unpack_snorm_4x8: - result = nir_unpack_snorm_4x8(&b, srcs[0]); - break; - case ir_unop_unpack_unorm_2x16: - result = nir_unpack_unorm_2x16(&b, srcs[0]); - break; - case ir_unop_unpack_unorm_4x8: - result = nir_unpack_unorm_4x8(&b, srcs[0]); - break; - case ir_unop_unpack_half_2x16: - result = nir_unpack_half_2x16(&b, srcs[0]); - break; - case ir_unop_pack_sampler_2x32: - case ir_unop_pack_image_2x32: - case ir_unop_pack_double_2x32: - case ir_unop_pack_int_2x32: - case ir_unop_pack_uint_2x32: - result = nir_pack_64_2x32(&b, srcs[0]); - break; - case ir_unop_unpack_sampler_2x32: - case ir_unop_unpack_image_2x32: - case ir_unop_unpack_double_2x32: - case ir_unop_unpack_int_2x32: - case ir_unop_unpack_uint_2x32: - result = nir_unpack_64_2x32(&b, srcs[0]); - break; - case ir_unop_bitfield_reverse: - result = nir_bitfield_reverse(&b, srcs[0]); - break; - case ir_unop_bit_count: - result = nir_bit_count(&b, srcs[0]); - break; - case ir_unop_find_msb: - switch (types[0]) { - case GLSL_TYPE_UINT: - result = nir_ufind_msb(&b, srcs[0]); - break; - case GLSL_TYPE_INT: - result = nir_ifind_msb(&b, srcs[0]); - break; - default: - unreachable("Invalid type for findMSB()"); - } - break; - case ir_unop_find_lsb: - result = nir_find_lsb(&b, srcs[0]); - break; - - case ir_unop_get_buffer_size: { - nir_intrinsic_instr *load = nir_intrinsic_instr_create( - this->shader, - nir_intrinsic_get_ssbo_size); - load->num_components = ir->type->vector_elements; - load->src[0] = nir_src_for_ssa(evaluate_rvalue(ir->operands[0])); - unsigned bit_size = glsl_get_bit_size(ir->type); - add_instr(&load->instr, ir->type->vector_elements, bit_size); - return; - } - - case ir_unop_atan: - result = nir_atan(&b, srcs[0]); - break; - - case ir_binop_add: - result = type_is_float(out_type) ? nir_fadd(&b, srcs[0], srcs[1]) - : nir_iadd(&b, srcs[0], srcs[1]); - break; - case ir_binop_add_sat: - result = type_is_signed(out_type) ? nir_iadd_sat(&b, srcs[0], srcs[1]) - : nir_uadd_sat(&b, srcs[0], srcs[1]); - break; - case ir_binop_sub: - result = type_is_float(out_type) ? nir_fsub(&b, srcs[0], srcs[1]) - : nir_isub(&b, srcs[0], srcs[1]); - break; - case ir_binop_sub_sat: - result = type_is_signed(out_type) ? nir_isub_sat(&b, srcs[0], srcs[1]) - : nir_usub_sat(&b, srcs[0], srcs[1]); - break; - case ir_binop_abs_sub: - /* out_type is always unsigned for ir_binop_abs_sub, so we have to key - * on the type of the sources. - */ - result = type_is_signed(types[0]) ? nir_uabs_isub(&b, srcs[0], srcs[1]) - : nir_uabs_usub(&b, srcs[0], srcs[1]); - break; - case ir_binop_avg: - result = type_is_signed(out_type) ? nir_ihadd(&b, srcs[0], srcs[1]) - : nir_uhadd(&b, srcs[0], srcs[1]); - break; - case ir_binop_avg_round: - result = type_is_signed(out_type) ? nir_irhadd(&b, srcs[0], srcs[1]) - : nir_urhadd(&b, srcs[0], srcs[1]); - break; - case ir_binop_mul_32x16: - result = type_is_signed(out_type) ? nir_imul_32x16(&b, srcs[0], srcs[1]) - : nir_umul_32x16(&b, srcs[0], srcs[1]); - break; - case ir_binop_mul: - if (type_is_float(out_type)) - result = nir_fmul(&b, srcs[0], srcs[1]); - else if (out_type == GLSL_TYPE_INT64 && - (ir->operands[0]->type->base_type == GLSL_TYPE_INT || - ir->operands[1]->type->base_type == GLSL_TYPE_INT)) - result = nir_imul_2x32_64(&b, srcs[0], srcs[1]); - else if (out_type == GLSL_TYPE_UINT64 && - (ir->operands[0]->type->base_type == GLSL_TYPE_UINT || - ir->operands[1]->type->base_type == GLSL_TYPE_UINT)) - result = nir_umul_2x32_64(&b, srcs[0], srcs[1]); - else - result = nir_imul(&b, srcs[0], srcs[1]); - break; - case ir_binop_div: - if (type_is_float(out_type)) - result = nir_fdiv(&b, srcs[0], srcs[1]); - else if (type_is_signed(out_type)) - result = nir_idiv(&b, srcs[0], srcs[1]); - else - result = nir_udiv(&b, srcs[0], srcs[1]); - break; - case ir_binop_mod: - result = type_is_float(out_type) ? nir_fmod(&b, srcs[0], srcs[1]) - : nir_umod(&b, srcs[0], srcs[1]); - break; - case ir_binop_min: - if (type_is_float(out_type)) - result = nir_fmin(&b, srcs[0], srcs[1]); - else if (type_is_signed(out_type)) - result = nir_imin(&b, srcs[0], srcs[1]); - else - result = nir_umin(&b, srcs[0], srcs[1]); - break; - case ir_binop_max: - if (type_is_float(out_type)) - result = nir_fmax(&b, srcs[0], srcs[1]); - else if (type_is_signed(out_type)) - result = nir_imax(&b, srcs[0], srcs[1]); - else - result = nir_umax(&b, srcs[0], srcs[1]); - break; - case ir_binop_pow: result = nir_fpow(&b, srcs[0], srcs[1]); break; - case ir_binop_bit_and: result = nir_iand(&b, srcs[0], srcs[1]); break; - case ir_binop_bit_or: result = nir_ior(&b, srcs[0], srcs[1]); break; - case ir_binop_bit_xor: result = nir_ixor(&b, srcs[0], srcs[1]); break; - case ir_binop_logic_and: - result = nir_iand(&b, srcs[0], srcs[1]); - break; - case ir_binop_logic_or: - result = nir_ior(&b, srcs[0], srcs[1]); - break; - case ir_binop_logic_xor: - result = nir_ixor(&b, srcs[0], srcs[1]); - break; - case ir_binop_lshift: result = nir_ishl(&b, srcs[0], nir_u2u32(&b, srcs[1])); break; - case ir_binop_rshift: - result = (type_is_signed(out_type)) ? nir_ishr(&b, srcs[0], nir_u2u32(&b, srcs[1])) - : nir_ushr(&b, srcs[0], nir_u2u32(&b, srcs[1])); - break; - case ir_binop_imul_high: - result = (out_type == GLSL_TYPE_INT) ? nir_imul_high(&b, srcs[0], srcs[1]) - : nir_umul_high(&b, srcs[0], srcs[1]); - break; - case ir_binop_carry: result = nir_uadd_carry(&b, srcs[0], srcs[1]); break; - case ir_binop_borrow: result = nir_usub_borrow(&b, srcs[0], srcs[1]); break; - case ir_binop_less: - if (type_is_float(types[0])) - result = nir_flt(&b, srcs[0], srcs[1]); - else if (type_is_signed(types[0])) - result = nir_ilt(&b, srcs[0], srcs[1]); - else - result = nir_ult(&b, srcs[0], srcs[1]); - break; - case ir_binop_gequal: - if (type_is_float(types[0])) - result = nir_fge(&b, srcs[0], srcs[1]); - else if (type_is_signed(types[0])) - result = nir_ige(&b, srcs[0], srcs[1]); - else - result = nir_uge(&b, srcs[0], srcs[1]); - break; - case ir_binop_equal: - if (type_is_float(types[0])) - result = nir_feq(&b, srcs[0], srcs[1]); - else - result = nir_ieq(&b, srcs[0], srcs[1]); - break; - case ir_binop_nequal: - if (type_is_float(types[0])) - result = nir_fneu(&b, srcs[0], srcs[1]); - else - result = nir_ine(&b, srcs[0], srcs[1]); - break; - case ir_binop_all_equal: - if (type_is_float(types[0])) { - switch (ir->operands[0]->type->vector_elements) { - case 1: result = nir_feq(&b, srcs[0], srcs[1]); break; - case 2: result = nir_ball_fequal2(&b, srcs[0], srcs[1]); break; - case 3: result = nir_ball_fequal3(&b, srcs[0], srcs[1]); break; - case 4: result = nir_ball_fequal4(&b, srcs[0], srcs[1]); break; - default: - unreachable("not reached"); - } - } else { - switch (ir->operands[0]->type->vector_elements) { - case 1: result = nir_ieq(&b, srcs[0], srcs[1]); break; - case 2: result = nir_ball_iequal2(&b, srcs[0], srcs[1]); break; - case 3: result = nir_ball_iequal3(&b, srcs[0], srcs[1]); break; - case 4: result = nir_ball_iequal4(&b, srcs[0], srcs[1]); break; - default: - unreachable("not reached"); - } - } - break; - case ir_binop_any_nequal: - if (type_is_float(types[0])) { - switch (ir->operands[0]->type->vector_elements) { - case 1: result = nir_fneu(&b, srcs[0], srcs[1]); break; - case 2: result = nir_bany_fnequal2(&b, srcs[0], srcs[1]); break; - case 3: result = nir_bany_fnequal3(&b, srcs[0], srcs[1]); break; - case 4: result = nir_bany_fnequal4(&b, srcs[0], srcs[1]); break; - default: - unreachable("not reached"); - } - } else { - switch (ir->operands[0]->type->vector_elements) { - case 1: result = nir_ine(&b, srcs[0], srcs[1]); break; - case 2: result = nir_bany_inequal2(&b, srcs[0], srcs[1]); break; - case 3: result = nir_bany_inequal3(&b, srcs[0], srcs[1]); break; - case 4: result = nir_bany_inequal4(&b, srcs[0], srcs[1]); break; - default: - unreachable("not reached"); - } - } - break; - case ir_binop_dot: - result = nir_fdot(&b, srcs[0], srcs[1]); - break; - - case ir_binop_vector_extract: - result = nir_vector_extract(&b, srcs[0], srcs[1]); - break; - case ir_triop_vector_insert: - result = nir_vector_insert(&b, srcs[0], srcs[1], srcs[2]); - break; - - case ir_binop_atan2: - result = nir_atan2(&b, srcs[0], srcs[1]); - break; - - case ir_binop_ldexp: result = nir_ldexp(&b, srcs[0], srcs[1]); break; - case ir_triop_fma: - result = nir_ffma(&b, srcs[0], srcs[1], srcs[2]); - break; - case ir_triop_lrp: - result = nir_flrp(&b, srcs[0], srcs[1], srcs[2]); - break; - case ir_triop_csel: - result = nir_bcsel(&b, srcs[0], srcs[1], srcs[2]); - break; - case ir_triop_bitfield_extract: - result = ir->type->is_int_16_32() ? - nir_ibitfield_extract(&b, nir_i2i32(&b, srcs[0]), nir_i2i32(&b, srcs[1]), nir_i2i32(&b, srcs[2])) : - nir_ubitfield_extract(&b, nir_u2u32(&b, srcs[0]), nir_i2i32(&b, srcs[1]), nir_i2i32(&b, srcs[2])); - - if (ir->type->base_type == GLSL_TYPE_INT16) { - result = nir_i2i16(&b, result); - } else if (ir->type->base_type == GLSL_TYPE_UINT16) { - result = nir_u2u16(&b, result); - } - - break; - case ir_quadop_bitfield_insert: - result = nir_bitfield_insert(&b, - nir_u2u32(&b, srcs[0]), nir_u2u32(&b, srcs[1]), - nir_i2i32(&b, srcs[2]), nir_i2i32(&b, srcs[3])); - - if (ir->type->base_type == GLSL_TYPE_INT16) { - result = nir_i2i16(&b, result); - } else if (ir->type->base_type == GLSL_TYPE_UINT16) { - result = nir_u2u16(&b, result); - } - - break; - case ir_quadop_vector: - result = nir_vec(&b, srcs, ir->type->vector_elements); - break; - - default: - unreachable("not reached"); - } - - /* The bit-size of the NIR SSA value must match the bit-size of the - * original GLSL IR expression. - */ - assert(result->bit_size == glsl_base_type_get_bit_size(ir->type->base_type)); -} - -void -nir_visitor::visit(ir_swizzle *ir) -{ - unsigned swizzle[4] = { ir->mask.x, ir->mask.y, ir->mask.z, ir->mask.w }; - result = nir_swizzle(&b, evaluate_rvalue(ir->val), swizzle, - ir->type->vector_elements); -} - -void -nir_visitor::visit(ir_texture *ir) -{ - unsigned num_srcs; - nir_texop op; - switch (ir->op) { - case ir_tex: - op = nir_texop_tex; - num_srcs = 1; /* coordinate */ - break; - - case ir_txb: - case ir_txl: - op = (ir->op == ir_txb) ? nir_texop_txb : nir_texop_txl; - num_srcs = 2; /* coordinate, bias/lod */ - break; - - case ir_txd: - op = nir_texop_txd; /* coordinate, dPdx, dPdy */ - num_srcs = 3; - break; - - case ir_txf: - op = nir_texop_txf; - if (ir->lod_info.lod != NULL) - num_srcs = 2; /* coordinate, lod */ - else - num_srcs = 1; /* coordinate */ - break; - - case ir_txf_ms: - op = nir_texop_txf_ms; - num_srcs = 2; /* coordinate, sample_index */ - break; - - case ir_txs: - op = nir_texop_txs; - if (ir->lod_info.lod != NULL) - num_srcs = 1; /* lod */ - else - num_srcs = 0; - break; - - case ir_lod: - op = nir_texop_lod; - num_srcs = 1; /* coordinate */ - break; - - case ir_tg4: - op = nir_texop_tg4; - num_srcs = 1; /* coordinate */ - break; - - case ir_query_levels: - op = nir_texop_query_levels; - num_srcs = 0; - break; - - case ir_texture_samples: - op = nir_texop_texture_samples; - num_srcs = 0; - break; - - case ir_samples_identical: - op = nir_texop_samples_identical; - num_srcs = 1; /* coordinate */ - break; - - default: - unreachable("not reached"); - } - - if (ir->projector != NULL) - num_srcs++; - if (ir->shadow_comparator != NULL) - num_srcs++; - /* offsets are constants we store inside nir_tex_intrs.offsets */ - if (ir->offset != NULL && !ir->offset->type->is_array()) - num_srcs++; - if (ir->clamp != NULL) - num_srcs++; - - /* Add one for the texture deref */ - num_srcs += 2; - - nir_tex_instr *instr = nir_tex_instr_create(this->shader, num_srcs); - - instr->op = op; - instr->sampler_dim = - (glsl_sampler_dim) ir->sampler->type->sampler_dimensionality; - instr->is_array = ir->sampler->type->sampler_array; - instr->is_shadow = ir->sampler->type->sampler_shadow; - - const glsl_type *dest_type - = ir->is_sparse ? ir->type->field_type("texel") : ir->type; - assert(dest_type != glsl_type::error_type); - if (instr->is_shadow) - instr->is_new_style_shadow = (dest_type->vector_elements == 1); - instr->dest_type = nir_get_nir_type_for_glsl_type(dest_type); - instr->is_sparse = ir->is_sparse; - - nir_deref_instr *sampler_deref = evaluate_deref(ir->sampler); - - /* check for bindless handles */ - if (!nir_deref_mode_is(sampler_deref, nir_var_uniform) || - nir_deref_instr_get_variable(sampler_deref)->data.bindless) { - nir_ssa_def *load = nir_load_deref(&b, sampler_deref); - instr->src[0].src = nir_src_for_ssa(load); - instr->src[0].src_type = nir_tex_src_texture_handle; - instr->src[1].src = nir_src_for_ssa(load); - instr->src[1].src_type = nir_tex_src_sampler_handle; - } else { - instr->src[0].src = nir_src_for_ssa(&sampler_deref->dest.ssa); - instr->src[0].src_type = nir_tex_src_texture_deref; - instr->src[1].src = nir_src_for_ssa(&sampler_deref->dest.ssa); - instr->src[1].src_type = nir_tex_src_sampler_deref; - } - - unsigned src_number = 2; - - if (ir->coordinate != NULL) { - instr->coord_components = ir->coordinate->type->vector_elements; - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->coordinate)); - instr->src[src_number].src_type = nir_tex_src_coord; - src_number++; - } - - if (ir->projector != NULL) { - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->projector)); - instr->src[src_number].src_type = nir_tex_src_projector; - src_number++; - } - - if (ir->shadow_comparator != NULL) { - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->shadow_comparator)); - instr->src[src_number].src_type = nir_tex_src_comparator; - src_number++; - } - - if (ir->offset != NULL) { - if (ir->offset->type->is_array()) { - for (int i = 0; i < ir->offset->type->array_size(); i++) { - const ir_constant *c = - ir->offset->as_constant()->get_array_element(i); - - for (unsigned j = 0; j < 2; ++j) { - int val = c->get_int_component(j); - instr->tg4_offsets[i][j] = val; - } - } - } else { - assert(ir->offset->type->is_vector() || ir->offset->type->is_scalar()); - - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->offset)); - instr->src[src_number].src_type = nir_tex_src_offset; - src_number++; - } - } - - if (ir->clamp) { - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->clamp)); - instr->src[src_number].src_type = nir_tex_src_min_lod; - src_number++; - } - - switch (ir->op) { - case ir_txb: - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->lod_info.bias)); - instr->src[src_number].src_type = nir_tex_src_bias; - src_number++; - break; - - case ir_txl: - case ir_txf: - case ir_txs: - if (ir->lod_info.lod != NULL) { - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->lod_info.lod)); - instr->src[src_number].src_type = nir_tex_src_lod; - src_number++; - } - break; - - case ir_txd: - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->lod_info.grad.dPdx)); - instr->src[src_number].src_type = nir_tex_src_ddx; - src_number++; - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->lod_info.grad.dPdy)); - instr->src[src_number].src_type = nir_tex_src_ddy; - src_number++; - break; - - case ir_txf_ms: - instr->src[src_number].src = - nir_src_for_ssa(evaluate_rvalue(ir->lod_info.sample_index)); - instr->src[src_number].src_type = nir_tex_src_ms_index; - src_number++; - break; - - case ir_tg4: - instr->component = ir->lod_info.component->as_constant()->value.u[0]; - break; - - default: - break; - } - - assert(src_number == num_srcs); - - unsigned bit_size = glsl_get_bit_size(dest_type); - add_instr(&instr->instr, nir_tex_instr_dest_size(instr), bit_size); -} - -void -nir_visitor::visit(ir_constant *ir) -{ - /* - * We don't know if this variable is an array or struct that gets - * dereferenced, so do the safe thing an make it a variable with a - * constant initializer and return a dereference. - */ - - nir_variable *var = - nir_local_variable_create(this->impl, ir->type, "const_temp"); - var->data.read_only = true; - var->constant_initializer = constant_copy(ir, var); - - this->deref = nir_build_deref_var(&b, var); -} - -void -nir_visitor::visit(ir_dereference_variable *ir) -{ - if (ir->variable_referenced()->data.mode == ir_var_function_out) { - unsigned i = (sig->return_type != glsl_type::void_type) ? 1 : 0; - - foreach_in_list(ir_variable, param, &sig->parameters) { - if (param == ir->variable_referenced()) { - break; - } - i++; - } - - this->deref = nir_build_deref_cast(&b, nir_load_param(&b, i), - nir_var_function_temp, ir->type, 0); - return; - } - - assert(ir->variable_referenced()->data.mode != ir_var_function_inout); - - struct hash_entry *entry = - _mesa_hash_table_search(this->var_table, ir->var); - assert(entry); - nir_variable *var = (nir_variable *) entry->data; - - this->deref = nir_build_deref_var(&b, var); -} - -void -nir_visitor::visit(ir_dereference_record *ir) -{ - ir->record->accept(this); - - int field_index = ir->field_idx; - assert(field_index >= 0); - - /* sparse texture variable is a struct for ir_variable, but it has been - * converted to a vector for nir_variable. - */ - if (this->deref->deref_type == nir_deref_type_var && - _mesa_set_search(this->sparse_variable_set, this->deref->var)) { - nir_ssa_def *load = nir_load_deref(&b, this->deref); - assert(load->num_components >= 2); - - nir_ssa_def *ssa; - const glsl_type *type = ir->record->type; - if (field_index == type->field_index("code")) { - /* last channel holds residency code */ - ssa = nir_channel(&b, load, load->num_components - 1); - } else { - assert(field_index == type->field_index("texel")); - - unsigned mask = BITFIELD_MASK(load->num_components - 1); - ssa = nir_channels(&b, load, mask); - } - - /* still need to create a deref for return */ - nir_variable *tmp = - nir_local_variable_create(this->impl, ir->type, "deref_tmp"); - this->deref = nir_build_deref_var(&b, tmp); - nir_store_deref(&b, this->deref, ssa, ~0); - } else - this->deref = nir_build_deref_struct(&b, this->deref, field_index); -} - -void -nir_visitor::visit(ir_dereference_array *ir) -{ - nir_ssa_def *index = evaluate_rvalue(ir->array_index); - - ir->array->accept(this); - - this->deref = nir_build_deref_array(&b, this->deref, index); -} - -void -nir_visitor::visit(ir_barrier *) -{ - if (shader->options->use_scoped_barrier) { - if (shader->info.stage == MESA_SHADER_COMPUTE) { - nir_scoped_barrier(&b, NIR_SCOPE_WORKGROUP, NIR_SCOPE_WORKGROUP, - NIR_MEMORY_ACQ_REL, nir_var_mem_shared); - } else if (shader->info.stage == MESA_SHADER_TESS_CTRL) { - nir_scoped_barrier(&b, NIR_SCOPE_WORKGROUP, NIR_SCOPE_WORKGROUP, - NIR_MEMORY_ACQ_REL, nir_var_shader_out); - } - } else { - if (shader->info.stage == MESA_SHADER_COMPUTE) - nir_memory_barrier_shared(&b); - else if (shader->info.stage == MESA_SHADER_TESS_CTRL) - nir_memory_barrier_tcs_patch(&b); - - nir_control_barrier(&b); - } -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_to_nir.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_to_nir.h deleted file mode 100644 index 5d6a260..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/glsl_to_nir.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#ifndef GLSL_TO_NIR_H -#define GLSL_TO_NIR_H - -#include "../nir/nir.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; -struct gl_constants; -struct gl_shader_program; - -nir_shader *glsl_to_nir(const struct gl_constants *consts, - const struct gl_shader_program *shader_prog, - gl_shader_stage stage, - const nir_shader_compiler_options *options); - - -#ifdef __cplusplus -} -#endif - -#endif /* GLSL_TO_NIR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/hir_field_selection.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/hir_field_selection.cpp deleted file mode 100644 index 3569656..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/hir_field_selection.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" -#include "glsl_parser_extras.h" -#include "ast.h" -#include "../glsl_types.h" - -ir_rvalue * -_mesa_ast_field_selection_to_hir(const ast_expression *expr, - exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - void *ctx = state; - ir_rvalue *result = NULL; - ir_rvalue *op; - - op = expr->subexpressions[0]->hir(instructions, state); - - /* There are two kinds of field selection. There is the selection of a - * specific field from a structure, and there is the selection of a - * swizzle / mask from a vector. Which is which is determined entirely - * by the base type of the thing to which the field selection operator is - * being applied. - */ - YYLTYPE loc = expr->get_location(); - if (op->type->is_error()) { - /* silently propagate the error */ - } else if (op->type->is_struct() || op->type->is_interface()) { - result = new(ctx) ir_dereference_record(op, - expr->primary_expression.identifier); - - if (result->type->is_error()) { - _mesa_glsl_error(& loc, state, "cannot access field `%s' of " - "structure", - expr->primary_expression.identifier); - } - } else if (op->type->is_vector() || - (state->has_420pack() && op->type->is_scalar())) { - ir_swizzle *swiz = ir_swizzle::create(op, - expr->primary_expression.identifier, - op->type->vector_elements); - if (swiz != NULL) { - result = swiz; - } else { - /* FINISHME: Logging of error messages should be moved into - * FINISHME: ir_swizzle::create. This allows the generation of more - * FINISHME: specific error messages. - */ - _mesa_glsl_error(& loc, state, "invalid swizzle / mask `%s'", - expr->primary_expression.identifier); - } - } else { - _mesa_glsl_error(& loc, state, "cannot access field `%s' of " - "non-structure / non-vector", - expr->primary_expression.identifier); - } - - return result ? result : ir_rvalue::error_value(ctx); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/int64.glsl b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/int64.glsl deleted file mode 100644 index 7b826ae..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/int64.glsl +++ /dev/null @@ -1,99 +0,0 @@ -/* Compile with: - * - * glsl_compiler --version 400 --dump-builder int64.glsl > builtin_int64.h - * - * Version 4.00+ is required for umulExtended. - */ -#version 400 -#extension GL_ARB_gpu_shader_int64: require -#extension GL_ARB_shading_language_420pack: require - -uvec4 -udivmod64(uvec2 n, uvec2 d) -{ - uvec2 quot = uvec2(0U, 0U); - int log2_denom = findMSB(d.y) + 32; - - /* If the upper 32 bits of denom are non-zero, it is impossible for shifts - * greater than 32 bits to occur. If the upper 32 bits of the numerator - * are zero, it is impossible for (denom << [63, 32]) <= numer unless - * denom == 0. - */ - if (d.y == 0 && n.y >= d.x) { - log2_denom = findMSB(d.x); - - /* Since the upper 32 bits of denom are zero, log2_denom <= 31 and we - * don't have to compare log2_denom inside the loop as is done in the - * general case (below). - */ - for (int i = 31; i >= 1; i--) { - if (log2_denom <= 31 - i && (d.x << i) <= n.y) { - n.y -= d.x << i; - quot.y |= 1U << i; - } - } - - /* log2_denom is always <= 31, so manually peel the last loop - * iteration. - */ - if (d.x <= n.y) { - n.y -= d.x; - quot.y |= 1U; - } - } - - uint64_t d64 = packUint2x32(d); - uint64_t n64 = packUint2x32(n); - for (int i = 31; i >= 1; i--) { - if (log2_denom <= 63 - i && (d64 << i) <= n64) { - n64 -= d64 << i; - quot.x |= 1U << i; - } - } - - /* log2_denom is always <= 63, so manually peel the last loop - * iteration. - */ - if (d64 <= n64) { - n64 -= d64; - quot.x |= 1U; - } - - return uvec4(quot, unpackUint2x32(n64)); -} - -uvec2 -udiv64(uvec2 n, uvec2 d) -{ - return udivmod64(n, d).xy; -} - -ivec2 -idiv64(ivec2 _n, ivec2 _d) -{ - const bool negate = (_n.y < 0) != (_d.y < 0); - uvec2 n = unpackUint2x32(uint64_t(abs(packInt2x32(_n)))); - uvec2 d = unpackUint2x32(uint64_t(abs(packInt2x32(_d)))); - - uvec2 quot = udivmod64(n, d).xy; - - return negate ? unpackInt2x32(-int64_t(packUint2x32(quot))) : ivec2(quot); -} - -uvec2 -umod64(uvec2 n, uvec2 d) -{ - return udivmod64(n, d).zw; -} - -ivec2 -imod64(ivec2 _n, ivec2 _d) -{ - const bool negate = (_n.y < 0) != (_d.y < 0); - uvec2 n = unpackUint2x32(uint64_t(abs(packInt2x32(_n)))); - uvec2 d = unpackUint2x32(uint64_t(abs(packInt2x32(_d)))); - - uvec2 rem = udivmod64(n, d).zw; - - return negate ? unpackInt2x32(-int64_t(packUint2x32(rem))) : ivec2(rem); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir.cpp deleted file mode 100644 index b0b38b2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir.cpp +++ /dev/null @@ -1,2358 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include "ir.h" -#include "../../util/half_float.h" -#include "../../util/bitscan.h" -#include "../glsl_types.h" -#include "glsl_parser_extras.h" - - -ir_rvalue::ir_rvalue(enum ir_node_type t) - : ir_instruction(t) -{ - this->type = glsl_type::error_type; -} - -bool ir_rvalue::is_zero() const -{ - return false; -} - -bool ir_rvalue::is_one() const -{ - return false; -} - -bool ir_rvalue::is_negative_one() const -{ - return false; -} - -/** - * Modify the swizzle make to move one component to another - * - * \param m IR swizzle to be modified - * \param from Component in the RHS that is to be swizzled - * \param to Desired swizzle location of \c from - */ -static void -update_rhs_swizzle(ir_swizzle_mask &m, unsigned from, unsigned to) -{ - switch (to) { - case 0: m.x = from; break; - case 1: m.y = from; break; - case 2: m.z = from; break; - case 3: m.w = from; break; - default: assert(!"Should not get here."); - } -} - -void -ir_assignment::set_lhs(ir_rvalue *lhs) -{ - void *mem_ctx = this; - bool swizzled = false; - - while (lhs != NULL) { - ir_swizzle *swiz = lhs->as_swizzle(); - - if (swiz == NULL) - break; - - unsigned write_mask = 0; - ir_swizzle_mask rhs_swiz = { 0, 0, 0, 0, 0, 0 }; - - for (unsigned i = 0; i < swiz->mask.num_components; i++) { - unsigned c = 0; - - switch (i) { - case 0: c = swiz->mask.x; break; - case 1: c = swiz->mask.y; break; - case 2: c = swiz->mask.z; break; - case 3: c = swiz->mask.w; break; - default: assert(!"Should not get here."); - } - - write_mask |= (((this->write_mask >> i) & 1) << c); - update_rhs_swizzle(rhs_swiz, i, c); - rhs_swiz.num_components = swiz->val->type->vector_elements; - } - - this->write_mask = write_mask; - lhs = swiz->val; - - this->rhs = new(mem_ctx) ir_swizzle(this->rhs, rhs_swiz); - swizzled = true; - } - - if (swizzled) { - /* Now, RHS channels line up with the LHS writemask. Collapse it - * to just the channels that will be written. - */ - ir_swizzle_mask rhs_swiz = { 0, 0, 0, 0, 0, 0 }; - int rhs_chan = 0; - for (int i = 0; i < 4; i++) { - if (write_mask & (1 << i)) - update_rhs_swizzle(rhs_swiz, i, rhs_chan++); - } - rhs_swiz.num_components = rhs_chan; - this->rhs = new(mem_ctx) ir_swizzle(this->rhs, rhs_swiz); - } - - assert((lhs == NULL) || lhs->as_dereference()); - - this->lhs = (ir_dereference *) lhs; -} - -ir_variable * -ir_assignment::whole_variable_written() -{ - ir_variable *v = this->lhs->whole_variable_referenced(); - - if (v == NULL) - return NULL; - - if (v->type->is_scalar()) - return v; - - if (v->type->is_vector()) { - const unsigned mask = (1U << v->type->vector_elements) - 1; - - if (mask != this->write_mask) - return NULL; - } - - /* Either all the vector components are assigned or the variable is some - * composite type (and the whole thing is assigned. - */ - return v; -} - -ir_assignment::ir_assignment(ir_dereference *lhs, ir_rvalue *rhs, - unsigned write_mask) - : ir_instruction(ir_type_assignment) -{ - this->rhs = rhs; - this->lhs = lhs; - this->write_mask = write_mask; - - if (lhs->type->is_scalar() || lhs->type->is_vector()) - assert(util_bitcount(write_mask) == this->rhs->type->vector_elements); -} - -ir_assignment::ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs) - : ir_instruction(ir_type_assignment) -{ - this->rhs = rhs; - - /* If the RHS is a vector type, assume that all components of the vector - * type are being written to the LHS. The write mask comes from the RHS - * because we can have a case where the LHS is a vec4 and the RHS is a - * vec3. In that case, the assignment is: - * - * (assign (...) (xyz) (var_ref lhs) (var_ref rhs)) - */ - if (rhs->type->is_vector()) - this->write_mask = (1U << rhs->type->vector_elements) - 1; - else if (rhs->type->is_scalar()) - this->write_mask = 1; - else - this->write_mask = 0; - - this->set_lhs(lhs); -} - -ir_expression::ir_expression(int op, const struct glsl_type *type, - ir_rvalue *op0, ir_rvalue *op1, - ir_rvalue *op2, ir_rvalue *op3) - : ir_rvalue(ir_type_expression) -{ - this->type = type; - this->operation = ir_expression_operation(op); - this->operands[0] = op0; - this->operands[1] = op1; - this->operands[2] = op2; - this->operands[3] = op3; - init_num_operands(); - -#ifndef NDEBUG - for (unsigned i = num_operands; i < 4; i++) { - assert(this->operands[i] == NULL); - } - - for (unsigned i = 0; i < num_operands; i++) { - assert(this->operands[i] != NULL); - } -#endif -} - -ir_expression::ir_expression(int op, ir_rvalue *op0) - : ir_rvalue(ir_type_expression) -{ - this->operation = ir_expression_operation(op); - this->operands[0] = op0; - this->operands[1] = NULL; - this->operands[2] = NULL; - this->operands[3] = NULL; - - assert(op <= ir_last_unop); - init_num_operands(); - assert(num_operands == 1); - assert(this->operands[0]); - - switch (this->operation) { - case ir_unop_bit_not: - case ir_unop_logic_not: - case ir_unop_neg: - case ir_unop_abs: - case ir_unop_sign: - case ir_unop_rcp: - case ir_unop_rsq: - case ir_unop_sqrt: - case ir_unop_exp: - case ir_unop_log: - case ir_unop_exp2: - case ir_unop_log2: - case ir_unop_trunc: - case ir_unop_ceil: - case ir_unop_floor: - case ir_unop_fract: - case ir_unop_round_even: - case ir_unop_sin: - case ir_unop_cos: - case ir_unop_dFdx: - case ir_unop_dFdx_coarse: - case ir_unop_dFdx_fine: - case ir_unop_dFdy: - case ir_unop_dFdy_coarse: - case ir_unop_dFdy_fine: - case ir_unop_bitfield_reverse: - case ir_unop_interpolate_at_centroid: - case ir_unop_clz: - case ir_unop_saturate: - case ir_unop_atan: - this->type = op0->type; - break; - - case ir_unop_f2i: - case ir_unop_b2i: - case ir_unop_u2i: - case ir_unop_d2i: - case ir_unop_bitcast_f2i: - case ir_unop_bit_count: - case ir_unop_find_msb: - case ir_unop_find_lsb: - case ir_unop_subroutine_to_int: - case ir_unop_i642i: - case ir_unop_u642i: - this->type = glsl_type::get_instance(GLSL_TYPE_INT, - op0->type->vector_elements, 1); - break; - - case ir_unop_b2f: - case ir_unop_i2f: - case ir_unop_u2f: - case ir_unop_d2f: - case ir_unop_f162f: - case ir_unop_bitcast_i2f: - case ir_unop_bitcast_u2f: - case ir_unop_i642f: - case ir_unop_u642f: - this->type = glsl_type::get_instance(GLSL_TYPE_FLOAT, - op0->type->vector_elements, 1); - break; - - case ir_unop_f2f16: - case ir_unop_f2fmp: - case ir_unop_b2f16: - this->type = glsl_type::get_instance(GLSL_TYPE_FLOAT16, - op0->type->vector_elements, 1); - break; - - case ir_unop_i2imp: - this->type = glsl_type::get_instance(GLSL_TYPE_INT16, - op0->type->vector_elements, 1); - break; - - case ir_unop_i2i: - if (op0->type->base_type == GLSL_TYPE_INT) { - this->type = glsl_type::get_instance(GLSL_TYPE_INT16, - op0->type->vector_elements, 1); - } else { - assert(op0->type->base_type == GLSL_TYPE_INT16); - this->type = glsl_type::get_instance(GLSL_TYPE_INT, - op0->type->vector_elements, 1); - } - break; - - case ir_unop_u2u: - if (op0->type->base_type == GLSL_TYPE_UINT) { - this->type = glsl_type::get_instance(GLSL_TYPE_UINT16, - op0->type->vector_elements, 1); - } else { - assert(op0->type->base_type == GLSL_TYPE_UINT16); - this->type = glsl_type::get_instance(GLSL_TYPE_UINT, - op0->type->vector_elements, 1); - } - break; - - case ir_unop_u2ump: - this->type = glsl_type::get_instance(GLSL_TYPE_UINT16, - op0->type->vector_elements, 1); - break; - - case ir_unop_f2b: - case ir_unop_i2b: - case ir_unop_d2b: - case ir_unop_f162b: - case ir_unop_i642b: - this->type = glsl_type::get_instance(GLSL_TYPE_BOOL, - op0->type->vector_elements, 1); - break; - - case ir_unop_f2d: - case ir_unop_i2d: - case ir_unop_u2d: - case ir_unop_i642d: - case ir_unop_u642d: - this->type = glsl_type::get_instance(GLSL_TYPE_DOUBLE, - op0->type->vector_elements, 1); - break; - - case ir_unop_i2u: - case ir_unop_f2u: - case ir_unop_d2u: - case ir_unop_bitcast_f2u: - case ir_unop_i642u: - case ir_unop_u642u: - this->type = glsl_type::get_instance(GLSL_TYPE_UINT, - op0->type->vector_elements, 1); - break; - - case ir_unop_i2i64: - case ir_unop_u2i64: - case ir_unop_b2i64: - case ir_unop_f2i64: - case ir_unop_d2i64: - case ir_unop_u642i64: - this->type = glsl_type::get_instance(GLSL_TYPE_INT64, - op0->type->vector_elements, 1); - break; - - case ir_unop_i2u64: - case ir_unop_u2u64: - case ir_unop_f2u64: - case ir_unop_d2u64: - case ir_unop_i642u64: - this->type = glsl_type::get_instance(GLSL_TYPE_UINT64, - op0->type->vector_elements, 1); - break; - - case ir_unop_unpack_double_2x32: - case ir_unop_unpack_uint_2x32: - this->type = glsl_type::uvec2_type; - break; - - case ir_unop_unpack_int_2x32: - this->type = glsl_type::ivec2_type; - break; - - case ir_unop_pack_snorm_2x16: - case ir_unop_pack_snorm_4x8: - case ir_unop_pack_unorm_2x16: - case ir_unop_pack_unorm_4x8: - case ir_unop_pack_half_2x16: - this->type = glsl_type::uint_type; - break; - - case ir_unop_pack_double_2x32: - this->type = glsl_type::double_type; - break; - - case ir_unop_pack_int_2x32: - this->type = glsl_type::int64_t_type; - break; - - case ir_unop_pack_uint_2x32: - this->type = glsl_type::uint64_t_type; - break; - - case ir_unop_unpack_snorm_2x16: - case ir_unop_unpack_unorm_2x16: - case ir_unop_unpack_half_2x16: - this->type = glsl_type::vec2_type; - break; - - case ir_unop_unpack_snorm_4x8: - case ir_unop_unpack_unorm_4x8: - this->type = glsl_type::vec4_type; - break; - - case ir_unop_unpack_sampler_2x32: - case ir_unop_unpack_image_2x32: - this->type = glsl_type::uvec2_type; - break; - - case ir_unop_pack_sampler_2x32: - case ir_unop_pack_image_2x32: - this->type = op0->type; - break; - - case ir_unop_frexp_sig: - this->type = op0->type; - break; - case ir_unop_frexp_exp: - this->type = glsl_type::get_instance(GLSL_TYPE_INT, - op0->type->vector_elements, 1); - break; - - case ir_unop_get_buffer_size: - case ir_unop_ssbo_unsized_array_length: - case ir_unop_implicitly_sized_array_length: - this->type = glsl_type::int_type; - break; - - case ir_unop_bitcast_i642d: - case ir_unop_bitcast_u642d: - this->type = glsl_type::get_instance(GLSL_TYPE_DOUBLE, - op0->type->vector_elements, 1); - break; - - case ir_unop_bitcast_d2i64: - this->type = glsl_type::get_instance(GLSL_TYPE_INT64, - op0->type->vector_elements, 1); - break; - case ir_unop_bitcast_d2u64: - this->type = glsl_type::get_instance(GLSL_TYPE_UINT64, - op0->type->vector_elements, 1); - break; - - default: - assert(!"not reached: missing automatic type setup for ir_expression"); - this->type = op0->type; - break; - } -} - -ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1) - : ir_rvalue(ir_type_expression) -{ - this->operation = ir_expression_operation(op); - this->operands[0] = op0; - this->operands[1] = op1; - this->operands[2] = NULL; - this->operands[3] = NULL; - - assert(op > ir_last_unop); - init_num_operands(); - assert(num_operands == 2); - for (unsigned i = 0; i < num_operands; i++) { - assert(this->operands[i] != NULL); - } - - switch (this->operation) { - case ir_binop_all_equal: - case ir_binop_any_nequal: - this->type = glsl_type::bool_type; - break; - - case ir_binop_add: - case ir_binop_sub: - case ir_binop_min: - case ir_binop_max: - case ir_binop_pow: - case ir_binop_mul: - case ir_binop_div: - case ir_binop_mod: - case ir_binop_atan2: - if (op0->type->is_scalar()) { - this->type = op1->type; - } else if (op1->type->is_scalar()) { - this->type = op0->type; - } else { - if (this->operation == ir_binop_mul) { - this->type = glsl_type::get_mul_type(op0->type, op1->type); - } else { - assert(op0->type == op1->type); - this->type = op0->type; - } - } - break; - - case ir_binop_logic_and: - case ir_binop_logic_xor: - case ir_binop_logic_or: - case ir_binop_bit_and: - case ir_binop_bit_xor: - case ir_binop_bit_or: - assert(!op0->type->is_matrix()); - assert(!op1->type->is_matrix()); - if (op0->type->is_scalar()) { - this->type = op1->type; - } else if (op1->type->is_scalar()) { - this->type = op0->type; - } else { - assert(op0->type->vector_elements == op1->type->vector_elements); - this->type = op0->type; - } - break; - - case ir_binop_equal: - case ir_binop_nequal: - case ir_binop_gequal: - case ir_binop_less: - assert(op0->type == op1->type); - this->type = glsl_type::get_instance(GLSL_TYPE_BOOL, - op0->type->vector_elements, 1); - break; - - case ir_binop_dot: - this->type = op0->type->get_base_type(); - break; - - case ir_binop_imul_high: - case ir_binop_mul_32x16: - case ir_binop_carry: - case ir_binop_borrow: - case ir_binop_lshift: - case ir_binop_rshift: - case ir_binop_ldexp: - case ir_binop_interpolate_at_offset: - case ir_binop_interpolate_at_sample: - this->type = op0->type; - break; - - case ir_binop_add_sat: - case ir_binop_sub_sat: - case ir_binop_avg: - case ir_binop_avg_round: - assert(op0->type == op1->type); - this->type = op0->type; - break; - - case ir_binop_abs_sub: { - enum glsl_base_type base; - - assert(op0->type == op1->type); - - switch (op0->type->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - base = GLSL_TYPE_UINT; - break; - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - base = GLSL_TYPE_UINT8; - break; - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - base = GLSL_TYPE_UINT16; - break; - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - base = GLSL_TYPE_UINT64; - break; - default: - unreachable("Invalid base type."); - } - - this->type = glsl_type::get_instance(base, op0->type->vector_elements, 1); - break; - } - - case ir_binop_vector_extract: - this->type = op0->type->get_scalar_type(); - break; - - default: - assert(!"not reached: missing automatic type setup for ir_expression"); - this->type = glsl_type::float_type; - } -} - -ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1, - ir_rvalue *op2) - : ir_rvalue(ir_type_expression) -{ - this->operation = ir_expression_operation(op); - this->operands[0] = op0; - this->operands[1] = op1; - this->operands[2] = op2; - this->operands[3] = NULL; - - assert(op > ir_last_binop && op <= ir_last_triop); - init_num_operands(); - assert(num_operands == 3); - for (unsigned i = 0; i < num_operands; i++) { - assert(this->operands[i] != NULL); - } - - switch (this->operation) { - case ir_triop_fma: - case ir_triop_lrp: - case ir_triop_bitfield_extract: - case ir_triop_vector_insert: - this->type = op0->type; - break; - - case ir_triop_csel: - this->type = op1->type; - break; - - default: - assert(!"not reached: missing automatic type setup for ir_expression"); - this->type = glsl_type::float_type; - } -} - -/** - * This is only here for ir_reader to used for testing purposes. Please use - * the precomputed num_operands field if you need the number of operands. - */ -unsigned -ir_expression::get_num_operands(ir_expression_operation op) -{ - assert(op <= ir_last_opcode); - - if (op <= ir_last_unop) - return 1; - - if (op <= ir_last_binop) - return 2; - - if (op <= ir_last_triop) - return 3; - - if (op <= ir_last_quadop) - return 4; - - unreachable("Could not calculate number of operands"); -} - -#include "ir_expression_operation_strings.h" - -const char* -depth_layout_string(ir_depth_layout layout) -{ - switch(layout) { - case ir_depth_layout_none: return ""; - case ir_depth_layout_any: return "depth_any"; - case ir_depth_layout_greater: return "depth_greater"; - case ir_depth_layout_less: return "depth_less"; - case ir_depth_layout_unchanged: return "depth_unchanged"; - - default: - assert(0); - return ""; - } -} - -ir_expression_operation -ir_expression::get_operator(const char *str) -{ - for (int op = 0; op <= int(ir_last_opcode); op++) { - if (strcmp(str, ir_expression_operation_strings[op]) == 0) - return (ir_expression_operation) op; - } - return (ir_expression_operation) -1; -} - -ir_variable * -ir_expression::variable_referenced() const -{ - switch (operation) { - case ir_binop_vector_extract: - case ir_triop_vector_insert: - /* We get these for things like a[0] where a is a vector type. In these - * cases we want variable_referenced() to return the actual vector - * variable this is wrapping. - */ - return operands[0]->variable_referenced(); - default: - return ir_rvalue::variable_referenced(); - } -} - -ir_constant::ir_constant() - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; -} - -ir_constant::ir_constant(const struct glsl_type *type, - const ir_constant_data *data) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - - assert((type->base_type >= GLSL_TYPE_UINT) - && (type->base_type <= GLSL_TYPE_IMAGE)); - - this->type = type; - memcpy(& this->value, data, sizeof(this->value)); -} - -ir_constant::ir_constant(float16_t f16, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_FLOAT16, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.f16[i] = f16.bits; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.f[i] = 0; - } -} - -ir_constant::ir_constant(float f, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_FLOAT, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.f[i] = f; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.f[i] = 0; - } -} - -ir_constant::ir_constant(double d, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_DOUBLE, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.d[i] = d; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.d[i] = 0.0; - } -} - -ir_constant::ir_constant(int16_t i16, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_INT16, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.i16[i] = i16; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.i16[i] = 0; - } -} - -ir_constant::ir_constant(uint16_t u16, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_UINT16, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.u16[i] = u16; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.u16[i] = 0; - } -} - -ir_constant::ir_constant(unsigned int u, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_UINT, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.u[i] = u; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.u[i] = 0; - } -} - -ir_constant::ir_constant(int integer, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_INT, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.i[i] = integer; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.i[i] = 0; - } -} - -ir_constant::ir_constant(uint64_t u64, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_UINT64, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.u64[i] = u64; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.u64[i] = 0; - } -} - -ir_constant::ir_constant(int64_t int64, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_INT64, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.i64[i] = int64; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.i64[i] = 0; - } -} - -ir_constant::ir_constant(bool b, unsigned vector_elements) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - assert(vector_elements <= 4); - this->type = glsl_type::get_instance(GLSL_TYPE_BOOL, vector_elements, 1); - for (unsigned i = 0; i < vector_elements; i++) { - this->value.b[i] = b; - } - for (unsigned i = vector_elements; i < 16; i++) { - this->value.b[i] = false; - } -} - -ir_constant::ir_constant(const ir_constant *c, unsigned i) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - this->type = c->type->get_base_type(); - - /* Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 spec says: - * - * In the subsections described above for array, vector, matrix and - * structure accesses, any out-of-bounds access produced undefined - * behavior....Out-of-bounds reads return undefined values, which - * include values from other variables of the active program or zero. - * - * GL_KHR_robustness and GL_ARB_robustness encourage us to return zero. - */ - if (i >= c->type->vector_elements) { - this->value = { { 0 } }; - return; - } - - switch (this->type->base_type) { - case GLSL_TYPE_UINT16: this->value.u16[0] = c->value.u16[i]; break; - case GLSL_TYPE_INT16: this->value.i16[0] = c->value.i16[i]; break; - case GLSL_TYPE_UINT: this->value.u[0] = c->value.u[i]; break; - case GLSL_TYPE_INT: this->value.i[0] = c->value.i[i]; break; - case GLSL_TYPE_FLOAT: this->value.f[0] = c->value.f[i]; break; - case GLSL_TYPE_FLOAT16: this->value.f16[0] = c->value.f16[i]; break; - case GLSL_TYPE_BOOL: this->value.b[0] = c->value.b[i]; break; - case GLSL_TYPE_DOUBLE: this->value.d[0] = c->value.d[i]; break; - default: assert(!"Should not get here."); break; - } -} - -ir_constant::ir_constant(const struct glsl_type *type, exec_list *value_list) - : ir_rvalue(ir_type_constant) -{ - this->const_elements = NULL; - this->type = type; - - assert(type->is_scalar() || type->is_vector() || type->is_matrix() - || type->is_struct() || type->is_array()); - - /* If the constant is a record, the types of each of the entries in - * value_list must be a 1-for-1 match with the structure components. Each - * entry must also be a constant. Just move the nodes from the value_list - * to the list in the ir_constant. - */ - if (type->is_array() || type->is_struct()) { - this->const_elements = ralloc_array(this, ir_constant *, type->length); - unsigned i = 0; - foreach_in_list(ir_constant, value, value_list) { - assert(value->as_constant() != NULL); - - this->const_elements[i++] = value; - } - return; - } - - for (unsigned i = 0; i < 16; i++) { - this->value.u[i] = 0; - } - - ir_constant *value = (ir_constant *) (value_list->get_head_raw()); - - /* Constructors with exactly one scalar argument are special for vectors - * and matrices. For vectors, the scalar value is replicated to fill all - * the components. For matrices, the scalar fills the components of the - * diagonal while the rest is filled with 0. - */ - if (value->type->is_scalar() && value->next->is_tail_sentinel()) { - if (type->is_matrix()) { - /* Matrix - fill diagonal (rest is already set to 0) */ - for (unsigned i = 0; i < type->matrix_columns; i++) { - switch (type->base_type) { - case GLSL_TYPE_FLOAT: - this->value.f[i * type->vector_elements + i] = - value->value.f[0]; - break; - case GLSL_TYPE_DOUBLE: - this->value.d[i * type->vector_elements + i] = - value->value.d[0]; - break; - case GLSL_TYPE_FLOAT16: - this->value.f16[i * type->vector_elements + i] = - value->value.f16[0]; - break; - default: - assert(!"unexpected matrix base type"); - } - } - } else { - /* Vector or scalar - fill all components */ - switch (type->base_type) { - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - for (unsigned i = 0; i < type->components(); i++) - this->value.u16[i] = value->value.u16[0]; - break; - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - for (unsigned i = 0; i < type->components(); i++) - this->value.u[i] = value->value.u[0]; - break; - case GLSL_TYPE_FLOAT: - for (unsigned i = 0; i < type->components(); i++) - this->value.f[i] = value->value.f[0]; - break; - case GLSL_TYPE_FLOAT16: - for (unsigned i = 0; i < type->components(); i++) - this->value.f16[i] = value->value.f16[0]; - break; - case GLSL_TYPE_DOUBLE: - for (unsigned i = 0; i < type->components(); i++) - this->value.d[i] = value->value.d[0]; - break; - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - for (unsigned i = 0; i < type->components(); i++) - this->value.u64[i] = value->value.u64[0]; - break; - case GLSL_TYPE_BOOL: - for (unsigned i = 0; i < type->components(); i++) - this->value.b[i] = value->value.b[0]; - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - this->value.u64[0] = value->value.u64[0]; - break; - default: - assert(!"Should not get here."); - break; - } - } - return; - } - - if (type->is_matrix() && value->type->is_matrix()) { - assert(value->next->is_tail_sentinel()); - - /* From section 5.4.2 of the GLSL 1.20 spec: - * "If a matrix is constructed from a matrix, then each component - * (column i, row j) in the result that has a corresponding component - * (column i, row j) in the argument will be initialized from there." - */ - unsigned cols = MIN2(type->matrix_columns, value->type->matrix_columns); - unsigned rows = MIN2(type->vector_elements, value->type->vector_elements); - for (unsigned i = 0; i < cols; i++) { - for (unsigned j = 0; j < rows; j++) { - const unsigned src = i * value->type->vector_elements + j; - const unsigned dst = i * type->vector_elements + j; - this->value.f[dst] = value->value.f[src]; - } - } - - /* "All other components will be initialized to the identity matrix." */ - for (unsigned i = cols; i < type->matrix_columns; i++) - this->value.f[i * type->vector_elements + i] = 1.0; - - return; - } - - /* Use each component from each entry in the value_list to initialize one - * component of the constant being constructed. - */ - unsigned i = 0; - for (;;) { - assert(value->as_constant() != NULL); - assert(!value->is_tail_sentinel()); - - for (unsigned j = 0; j < value->type->components(); j++) { - switch (type->base_type) { - case GLSL_TYPE_UINT16: - this->value.u16[i] = value->get_uint16_component(j); - break; - case GLSL_TYPE_INT16: - this->value.i16[i] = value->get_int16_component(j); - break; - case GLSL_TYPE_UINT: - this->value.u[i] = value->get_uint_component(j); - break; - case GLSL_TYPE_INT: - this->value.i[i] = value->get_int_component(j); - break; - case GLSL_TYPE_FLOAT: - this->value.f[i] = value->get_float_component(j); - break; - case GLSL_TYPE_FLOAT16: - this->value.f16[i] = value->get_float16_component(j); - break; - case GLSL_TYPE_BOOL: - this->value.b[i] = value->get_bool_component(j); - break; - case GLSL_TYPE_DOUBLE: - this->value.d[i] = value->get_double_component(j); - break; - case GLSL_TYPE_UINT64: - this->value.u64[i] = value->get_uint64_component(j); - break; - case GLSL_TYPE_INT64: - this->value.i64[i] = value->get_int64_component(j); - break; - default: - /* FINISHME: What to do? Exceptions are not the answer. - */ - break; - } - - i++; - if (i >= type->components()) - break; - } - - if (i >= type->components()) - break; /* avoid downcasting a list sentinel */ - value = (ir_constant *) value->next; - } -} - -ir_constant * -ir_constant::zero(void *mem_ctx, const glsl_type *type) -{ - assert(type->is_scalar() || type->is_vector() || type->is_matrix() - || type->is_struct() || type->is_array()); - - ir_constant *c = new(mem_ctx) ir_constant; - c->type = type; - memset(&c->value, 0, sizeof(c->value)); - - if (type->is_array()) { - c->const_elements = ralloc_array(c, ir_constant *, type->length); - - for (unsigned i = 0; i < type->length; i++) - c->const_elements[i] = ir_constant::zero(c, type->fields.array); - } - - if (type->is_struct()) { - c->const_elements = ralloc_array(c, ir_constant *, type->length); - - for (unsigned i = 0; i < type->length; i++) { - c->const_elements[i] = - ir_constant::zero(mem_ctx, type->fields.structure[i].type); - } - } - - return c; -} - -bool -ir_constant::get_bool_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return this->value.u16[i] != 0; - case GLSL_TYPE_INT16: return this->value.i16[i] != 0; - case GLSL_TYPE_UINT: return this->value.u[i] != 0; - case GLSL_TYPE_INT: return this->value.i[i] != 0; - case GLSL_TYPE_FLOAT: return ((int)this->value.f[i]) != 0; - case GLSL_TYPE_FLOAT16: return ((int)_mesa_half_to_float(this->value.f16[i])) != 0; - case GLSL_TYPE_BOOL: return this->value.b[i]; - case GLSL_TYPE_DOUBLE: return this->value.d[i] != 0.0; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return this->value.u64[i] != 0; - case GLSL_TYPE_INT64: return this->value.i64[i] != 0; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return false; -} - -float -ir_constant::get_float_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return (float) this->value.u16[i]; - case GLSL_TYPE_INT16: return (float) this->value.i16[i]; - case GLSL_TYPE_UINT: return (float) this->value.u[i]; - case GLSL_TYPE_INT: return (float) this->value.i[i]; - case GLSL_TYPE_FLOAT: return this->value.f[i]; - case GLSL_TYPE_FLOAT16: return _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1.0f : 0.0f; - case GLSL_TYPE_DOUBLE: return (float) this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return (float) this->value.u64[i]; - case GLSL_TYPE_INT64: return (float) this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0.0; -} - -uint16_t -ir_constant::get_float16_component(unsigned i) const -{ - if (this->type->base_type == GLSL_TYPE_FLOAT16) - return this->value.f16[i]; - else - return _mesa_float_to_half(get_float_component(i)); -} - -double -ir_constant::get_double_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return (double) this->value.u16[i]; - case GLSL_TYPE_INT16: return (double) this->value.i16[i]; - case GLSL_TYPE_UINT: return (double) this->value.u[i]; - case GLSL_TYPE_INT: return (double) this->value.i[i]; - case GLSL_TYPE_FLOAT: return (double) this->value.f[i]; - case GLSL_TYPE_FLOAT16: return (double) _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1.0 : 0.0; - case GLSL_TYPE_DOUBLE: return this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return (double) this->value.u64[i]; - case GLSL_TYPE_INT64: return (double) this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0.0; -} - -int16_t -ir_constant::get_int16_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return this->value.u16[i]; - case GLSL_TYPE_INT16: return this->value.i16[i]; - case GLSL_TYPE_UINT: return this->value.u[i]; - case GLSL_TYPE_INT: return this->value.i[i]; - case GLSL_TYPE_FLOAT: return (int16_t) this->value.f[i]; - case GLSL_TYPE_FLOAT16: return (int16_t) _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1 : 0; - case GLSL_TYPE_DOUBLE: return (int16_t) this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return (int16_t) this->value.u64[i]; - case GLSL_TYPE_INT64: return (int16_t) this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0; -} - -uint16_t -ir_constant::get_uint16_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return this->value.u16[i]; - case GLSL_TYPE_INT16: return this->value.i16[i]; - case GLSL_TYPE_UINT: return this->value.u[i]; - case GLSL_TYPE_INT: return this->value.i[i]; - case GLSL_TYPE_FLOAT: return (uint16_t) this->value.f[i]; - case GLSL_TYPE_FLOAT16: return (uint16_t) _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1 : 0; - case GLSL_TYPE_DOUBLE: return (uint16_t) this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return (uint16_t) this->value.u64[i]; - case GLSL_TYPE_INT64: return (uint16_t) this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0; -} - -int -ir_constant::get_int_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return this->value.u16[i]; - case GLSL_TYPE_INT16: return this->value.i16[i]; - case GLSL_TYPE_UINT: return this->value.u[i]; - case GLSL_TYPE_INT: return this->value.i[i]; - case GLSL_TYPE_FLOAT: return (int) this->value.f[i]; - case GLSL_TYPE_FLOAT16: return (int) _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1 : 0; - case GLSL_TYPE_DOUBLE: return (int) this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return (int) this->value.u64[i]; - case GLSL_TYPE_INT64: return (int) this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0; -} - -unsigned -ir_constant::get_uint_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return this->value.u16[i]; - case GLSL_TYPE_INT16: return this->value.i16[i]; - case GLSL_TYPE_UINT: return this->value.u[i]; - case GLSL_TYPE_INT: return this->value.i[i]; - case GLSL_TYPE_FLOAT: return (unsigned) this->value.f[i]; - case GLSL_TYPE_FLOAT16: return (unsigned) _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1 : 0; - case GLSL_TYPE_DOUBLE: return (unsigned) this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return (unsigned) this->value.u64[i]; - case GLSL_TYPE_INT64: return (unsigned) this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0; -} - -int64_t -ir_constant::get_int64_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return this->value.u16[i]; - case GLSL_TYPE_INT16: return this->value.i16[i]; - case GLSL_TYPE_UINT: return this->value.u[i]; - case GLSL_TYPE_INT: return this->value.i[i]; - case GLSL_TYPE_FLOAT: return (int64_t) this->value.f[i]; - case GLSL_TYPE_FLOAT16: return (int64_t) _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1 : 0; - case GLSL_TYPE_DOUBLE: return (int64_t) this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return (int64_t) this->value.u64[i]; - case GLSL_TYPE_INT64: return this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0; -} - -uint64_t -ir_constant::get_uint64_component(unsigned i) const -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16:return this->value.u16[i]; - case GLSL_TYPE_INT16: return this->value.i16[i]; - case GLSL_TYPE_UINT: return this->value.u[i]; - case GLSL_TYPE_INT: return this->value.i[i]; - case GLSL_TYPE_FLOAT: return (uint64_t) this->value.f[i]; - case GLSL_TYPE_FLOAT16: return (uint64_t) _mesa_half_to_float(this->value.f16[i]); - case GLSL_TYPE_BOOL: return this->value.b[i] ? 1 : 0; - case GLSL_TYPE_DOUBLE: return (uint64_t) this->value.d[i]; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: return this->value.u64[i]; - case GLSL_TYPE_INT64: return (uint64_t) this->value.i64[i]; - default: assert(!"Should not get here."); break; - } - - /* Must return something to make the compiler happy. This is clearly an - * error case. - */ - return 0; -} - -ir_constant * -ir_constant::get_array_element(unsigned i) const -{ - assert(this->type->is_array()); - - /* From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: - * - * "Behavior is undefined if a shader subscripts an array with an index - * less than 0 or greater than or equal to the size the array was - * declared with." - * - * Most out-of-bounds accesses are removed before things could get this far. - * There are cases where non-constant array index values can get constant - * folded. - */ - if (int(i) < 0) - i = 0; - else if (i >= this->type->length) - i = this->type->length - 1; - - return const_elements[i]; -} - -ir_constant * -ir_constant::get_record_field(int idx) -{ - assert(this->type->is_struct()); - assert(idx >= 0 && (unsigned) idx < this->type->length); - - return const_elements[idx]; -} - -void -ir_constant::copy_offset(ir_constant *src, int offset) -{ - switch (this->type->base_type) { - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - case GLSL_TYPE_BOOL: { - unsigned int size = src->type->components(); - assert (size <= this->type->components() - offset); - for (unsigned int i=0; itype->base_type) { - case GLSL_TYPE_UINT16: - value.u16[i+offset] = src->get_uint16_component(i); - break; - case GLSL_TYPE_INT16: - value.i16[i+offset] = src->get_int16_component(i); - break; - case GLSL_TYPE_UINT: - value.u[i+offset] = src->get_uint_component(i); - break; - case GLSL_TYPE_INT: - value.i[i+offset] = src->get_int_component(i); - break; - case GLSL_TYPE_FLOAT: - value.f[i+offset] = src->get_float_component(i); - break; - case GLSL_TYPE_FLOAT16: - value.f16[i+offset] = src->get_float16_component(i); - break; - case GLSL_TYPE_BOOL: - value.b[i+offset] = src->get_bool_component(i); - break; - case GLSL_TYPE_DOUBLE: - value.d[i+offset] = src->get_double_component(i); - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: - value.u64[i+offset] = src->get_uint64_component(i); - break; - case GLSL_TYPE_INT64: - value.i64[i+offset] = src->get_int64_component(i); - break; - default: // Shut up the compiler - break; - } - } - break; - } - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_ARRAY: { - assert (src->type == this->type); - for (unsigned i = 0; i < this->type->length; i++) { - this->const_elements[i] = src->const_elements[i]->clone(this, NULL); - } - break; - } - - default: - assert(!"Should not get here."); - break; - } -} - -void -ir_constant::copy_masked_offset(ir_constant *src, int offset, unsigned int mask) -{ - assert (!type->is_array() && !type->is_struct()); - - if (!type->is_vector() && !type->is_matrix()) { - offset = 0; - mask = 1; - } - - int id = 0; - for (int i=0; i<4; i++) { - if (mask & (1 << i)) { - switch (this->type->base_type) { - case GLSL_TYPE_UINT16: - value.u16[i+offset] = src->get_uint16_component(id++); - break; - case GLSL_TYPE_INT16: - value.i16[i+offset] = src->get_int16_component(id++); - break; - case GLSL_TYPE_UINT: - value.u[i+offset] = src->get_uint_component(id++); - break; - case GLSL_TYPE_INT: - value.i[i+offset] = src->get_int_component(id++); - break; - case GLSL_TYPE_FLOAT: - value.f[i+offset] = src->get_float_component(id++); - break; - case GLSL_TYPE_FLOAT16: - value.f16[i+offset] = src->get_float16_component(id++); - break; - case GLSL_TYPE_BOOL: - value.b[i+offset] = src->get_bool_component(id++); - break; - case GLSL_TYPE_DOUBLE: - value.d[i+offset] = src->get_double_component(id++); - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: - value.u64[i+offset] = src->get_uint64_component(id++); - break; - case GLSL_TYPE_INT64: - value.i64[i+offset] = src->get_int64_component(id++); - break; - default: - assert(!"Should not get here."); - return; - } - } - } -} - -bool -ir_constant::has_value(const ir_constant *c) const -{ - if (this->type != c->type) - return false; - - if (this->type->is_array() || this->type->is_struct()) { - for (unsigned i = 0; i < this->type->length; i++) { - if (!this->const_elements[i]->has_value(c->const_elements[i])) - return false; - } - return true; - } - - for (unsigned i = 0; i < this->type->components(); i++) { - switch (this->type->base_type) { - case GLSL_TYPE_UINT16: - if (this->value.u16[i] != c->value.u16[i]) - return false; - break; - case GLSL_TYPE_INT16: - if (this->value.i16[i] != c->value.i16[i]) - return false; - break; - case GLSL_TYPE_UINT: - if (this->value.u[i] != c->value.u[i]) - return false; - break; - case GLSL_TYPE_INT: - if (this->value.i[i] != c->value.i[i]) - return false; - break; - case GLSL_TYPE_FLOAT: - if (this->value.f[i] != c->value.f[i]) - return false; - break; - case GLSL_TYPE_FLOAT16: - /* Convert to float to make sure NaN and ±0.0 compares correctly */ - if (_mesa_half_to_float(this->value.f16[i]) != - _mesa_half_to_float(c->value.f16[i])) - return false; - break; - case GLSL_TYPE_BOOL: - if (this->value.b[i] != c->value.b[i]) - return false; - break; - case GLSL_TYPE_DOUBLE: - if (this->value.d[i] != c->value.d[i]) - return false; - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: - if (this->value.u64[i] != c->value.u64[i]) - return false; - break; - case GLSL_TYPE_INT64: - if (this->value.i64[i] != c->value.i64[i]) - return false; - break; - default: - assert(!"Should not get here."); - return false; - } - } - - return true; -} - -bool -ir_constant::is_value(float f, int i) const -{ - if (!this->type->is_scalar() && !this->type->is_vector()) - return false; - - /* Only accept boolean values for 0/1. */ - if (int(bool(i)) != i && this->type->is_boolean()) - return false; - - for (unsigned c = 0; c < this->type->vector_elements; c++) { - switch (this->type->base_type) { - case GLSL_TYPE_FLOAT: - if (this->value.f[c] != f) - return false; - break; - case GLSL_TYPE_FLOAT16: - if (_mesa_half_to_float(this->value.f16[c]) != f) - return false; - break; - case GLSL_TYPE_INT16: - if (this->value.i16[c] != int16_t(i)) - return false; - break; - case GLSL_TYPE_UINT16: - if (this->value.u16[c] != uint16_t(i)) - return false; - break; - case GLSL_TYPE_INT: - if (this->value.i[c] != i) - return false; - break; - case GLSL_TYPE_UINT: - if (this->value.u[c] != unsigned(i)) - return false; - break; - case GLSL_TYPE_BOOL: - if (this->value.b[c] != bool(i)) - return false; - break; - case GLSL_TYPE_DOUBLE: - if (this->value.d[c] != double(f)) - return false; - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: - if (this->value.u64[c] != uint64_t(i)) - return false; - break; - case GLSL_TYPE_INT64: - if (this->value.i64[c] != i) - return false; - break; - default: - /* The only other base types are structures, arrays, and samplers. - * Samplers cannot be constants, and the others should have been - * filtered out above. - */ - assert(!"Should not get here."); - return false; - } - } - - return true; -} - -bool -ir_constant::is_zero() const -{ - return is_value(0.0, 0); -} - -bool -ir_constant::is_one() const -{ - return is_value(1.0, 1); -} - -bool -ir_constant::is_negative_one() const -{ - return is_value(-1.0, -1); -} - -bool -ir_constant::is_uint16_constant() const -{ - if (!type->is_integer_32()) - return false; - - return value.u[0] < (1 << 16); -} - -ir_loop::ir_loop() - : ir_instruction(ir_type_loop) -{ -} - - -ir_dereference_variable::ir_dereference_variable(ir_variable *var) - : ir_dereference(ir_type_dereference_variable) -{ - assert(var != NULL); - - this->var = var; - this->type = var->type; -} - - -ir_dereference_array::ir_dereference_array(ir_rvalue *value, - ir_rvalue *array_index) - : ir_dereference(ir_type_dereference_array) -{ - this->array_index = array_index; - this->set_array(value); -} - - -ir_dereference_array::ir_dereference_array(ir_variable *var, - ir_rvalue *array_index) - : ir_dereference(ir_type_dereference_array) -{ - void *ctx = ralloc_parent(var); - - this->array_index = array_index; - this->set_array(new(ctx) ir_dereference_variable(var)); -} - - -void -ir_dereference_array::set_array(ir_rvalue *value) -{ - assert(value != NULL); - - this->array = value; - - const glsl_type *const vt = this->array->type; - - if (vt->is_array()) { - type = vt->fields.array; - } else if (vt->is_matrix()) { - type = vt->column_type(); - } else if (vt->is_vector()) { - type = vt->get_base_type(); - } -} - - -ir_dereference_record::ir_dereference_record(ir_rvalue *value, - const char *field) - : ir_dereference(ir_type_dereference_record) -{ - assert(value != NULL); - - this->record = value; - this->type = this->record->type->field_type(field); - this->field_idx = this->record->type->field_index(field); -} - - -ir_dereference_record::ir_dereference_record(ir_variable *var, - const char *field) - : ir_dereference(ir_type_dereference_record) -{ - void *ctx = ralloc_parent(var); - - this->record = new(ctx) ir_dereference_variable(var); - this->type = this->record->type->field_type(field); - this->field_idx = this->record->type->field_index(field); -} - -bool -ir_dereference::is_lvalue(const struct _mesa_glsl_parse_state *state) const -{ - ir_variable *var = this->variable_referenced(); - - /* Every l-value dereference chain eventually ends in a variable. - */ - if ((var == NULL) || var->data.read_only) - return false; - - /* From section 4.1.7 of the ARB_bindless_texture spec: - * - * "Samplers can be used as l-values, so can be assigned into and used as - * "out" and "inout" function parameters." - * - * From section 4.1.X of the ARB_bindless_texture spec: - * - * "Images can be used as l-values, so can be assigned into and used as - * "out" and "inout" function parameters." - */ - if ((!state || state->has_bindless()) && - (this->type->contains_sampler() || this->type->contains_image())) - return true; - - /* From section 4.1.7 of the GLSL 4.40 spec: - * - * "Opaque variables cannot be treated as l-values; hence cannot - * be used as out or inout function parameters, nor can they be - * assigned into." - */ - if (this->type->contains_opaque()) - return false; - - return true; -} - - -static const char * const tex_opcode_strs[] = { "tex", "txb", "txl", "txd", "txf", "txf_ms", "txs", "lod", "tg4", "query_levels", "texture_samples", "samples_identical" }; - -const char *ir_texture::opcode_string() -{ - assert((unsigned int) op < ARRAY_SIZE(tex_opcode_strs)); - return tex_opcode_strs[op]; -} - -ir_texture_opcode -ir_texture::get_opcode(const char *str) -{ - const int count = sizeof(tex_opcode_strs) / sizeof(tex_opcode_strs[0]); - for (int op = 0; op < count; op++) { - if (strcmp(str, tex_opcode_strs[op]) == 0) - return (ir_texture_opcode) op; - } - return (ir_texture_opcode) -1; -} - - -void -ir_texture::set_sampler(ir_dereference *sampler, const glsl_type *type) -{ - assert(sampler != NULL); - assert(type != NULL); - this->sampler = sampler; - - if (this->is_sparse) { - /* code holds residency info */ - glsl_struct_field fields[2] = { - glsl_struct_field(glsl_type::int_type, "code"), - glsl_struct_field(type, "texel"), - }; - this->type = glsl_type::get_struct_instance(fields, 2, "struct"); - } else - this->type = type; - - if (this->op == ir_txs || this->op == ir_query_levels || - this->op == ir_texture_samples) { - assert(type->base_type == GLSL_TYPE_INT); - } else if (this->op == ir_lod) { - assert(type->vector_elements == 2); - assert(type->is_float()); - } else if (this->op == ir_samples_identical) { - assert(type == glsl_type::bool_type); - assert(sampler->type->is_sampler()); - assert(sampler->type->sampler_dimensionality == GLSL_SAMPLER_DIM_MS); - } else { - assert(sampler->type->sampled_type == (int) type->base_type); - if (sampler->type->sampler_shadow) - assert(type->vector_elements == 4 || type->vector_elements == 1); - else - assert(type->vector_elements == 4); - } -} - - -void -ir_swizzle::init_mask(const unsigned *comp, unsigned count) -{ - assert((count >= 1) && (count <= 4)); - - memset(&this->mask, 0, sizeof(this->mask)); - this->mask.num_components = count; - - unsigned dup_mask = 0; - switch (count) { - case 4: - assert(comp[3] <= 3); - dup_mask |= (1U << comp[3]) - & ((1U << comp[0]) | (1U << comp[1]) | (1U << comp[2])); - this->mask.w = comp[3]; - - case 3: - assert(comp[2] <= 3); - dup_mask |= (1U << comp[2]) - & ((1U << comp[0]) | (1U << comp[1])); - this->mask.z = comp[2]; - - case 2: - assert(comp[1] <= 3); - dup_mask |= (1U << comp[1]) - & ((1U << comp[0])); - this->mask.y = comp[1]; - - case 1: - assert(comp[0] <= 3); - this->mask.x = comp[0]; - } - - this->mask.has_duplicates = dup_mask != 0; - - /* Based on the number of elements in the swizzle and the base type - * (i.e., float, int, unsigned, or bool) of the vector being swizzled, - * generate the type of the resulting value. - */ - type = glsl_type::get_instance(val->type->base_type, mask.num_components, 1); -} - -ir_swizzle::ir_swizzle(ir_rvalue *val, unsigned x, unsigned y, unsigned z, - unsigned w, unsigned count) - : ir_rvalue(ir_type_swizzle), val(val) -{ - const unsigned components[4] = { x, y, z, w }; - this->init_mask(components, count); -} - -ir_swizzle::ir_swizzle(ir_rvalue *val, const unsigned *comp, - unsigned count) - : ir_rvalue(ir_type_swizzle), val(val) -{ - this->init_mask(comp, count); -} - -ir_swizzle::ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask) - : ir_rvalue(ir_type_swizzle), val(val), mask(mask) -{ - this->type = glsl_type::get_instance(val->type->base_type, - mask.num_components, 1); -} - -#define X 1 -#define R 5 -#define S 9 -#define I 13 - -ir_swizzle * -ir_swizzle::create(ir_rvalue *val, const char *str, unsigned vector_length) -{ - void *ctx = ralloc_parent(val); - - /* For each possible swizzle character, this table encodes the value in - * \c idx_map that represents the 0th element of the vector. For invalid - * swizzle characters (e.g., 'k'), a special value is used that will allow - * detection of errors. - */ - static const unsigned char base_idx[26] = { - /* a b c d e f g h i j k l m */ - R, R, I, I, I, I, R, I, I, I, I, I, I, - /* n o p q r s t u v w x y z */ - I, I, S, S, R, S, S, I, I, X, X, X, X - }; - - /* Each valid swizzle character has an entry in the previous table. This - * table encodes the base index encoded in the previous table plus the actual - * index of the swizzle character. When processing swizzles, the first - * character in the string is indexed in the previous table. Each character - * in the string is indexed in this table, and the value found there has the - * value form the first table subtracted. The result must be on the range - * [0,3]. - * - * For example, the string "wzyx" will get X from the first table. Each of - * the charcaters will get X+3, X+2, X+1, and X+0 from this table. After - * subtraction, the swizzle values are { 3, 2, 1, 0 }. - * - * The string "wzrg" will get X from the first table. Each of the characters - * will get X+3, X+2, R+0, and R+1 from this table. After subtraction, the - * swizzle values are { 3, 2, 4, 5 }. Since 4 and 5 are outside the range - * [0,3], the error is detected. - */ - static const unsigned char idx_map[26] = { - /* a b c d e f g h i j k l m */ - R+3, R+2, 0, 0, 0, 0, R+1, 0, 0, 0, 0, 0, 0, - /* n o p q r s t u v w x y z */ - 0, 0, S+2, S+3, R+0, S+0, S+1, 0, 0, X+3, X+0, X+1, X+2 - }; - - int swiz_idx[4] = { 0, 0, 0, 0 }; - unsigned i; - - - /* Validate the first character in the swizzle string and look up the base - * index value as described above. - */ - if ((str[0] < 'a') || (str[0] > 'z')) - return NULL; - - const unsigned base = base_idx[str[0] - 'a']; - - - for (i = 0; (i < 4) && (str[i] != '\0'); i++) { - /* Validate the next character, and, as described above, convert it to a - * swizzle index. - */ - if ((str[i] < 'a') || (str[i] > 'z')) - return NULL; - - swiz_idx[i] = idx_map[str[i] - 'a'] - base; - if ((swiz_idx[i] < 0) || (swiz_idx[i] >= (int) vector_length)) - return NULL; - } - - if (str[i] != '\0') - return NULL; - - return new(ctx) ir_swizzle(val, swiz_idx[0], swiz_idx[1], swiz_idx[2], - swiz_idx[3], i); -} - -#undef X -#undef R -#undef S -#undef I - -ir_variable * -ir_swizzle::variable_referenced() const -{ - return this->val->variable_referenced(); -} - - -bool ir_variable::temporaries_allocate_names = false; - -const char ir_variable::tmp_name[] = "compiler_temp"; - -ir_variable::ir_variable(const struct glsl_type *type, const char *name, - ir_variable_mode mode) - : ir_instruction(ir_type_variable) -{ - this->type = type; - - if (mode == ir_var_temporary && !ir_variable::temporaries_allocate_names) - name = NULL; - - /* The ir_variable clone method may call this constructor with name set to - * tmp_name. - */ - assert(name != NULL - || mode == ir_var_temporary - || mode == ir_var_function_in - || mode == ir_var_function_out - || mode == ir_var_function_inout); - assert(name != ir_variable::tmp_name - || mode == ir_var_temporary); - if (mode == ir_var_temporary - && (name == NULL || name == ir_variable::tmp_name)) { - this->name = ir_variable::tmp_name; - } else if (name == NULL || - strlen(name) < ARRAY_SIZE(this->name_storage)) { - strcpy(this->name_storage, name ? name : ""); - this->name = this->name_storage; - } else { - this->name = ralloc_strdup(this, name); - } - - this->u.max_ifc_array_access = NULL; - - this->data.explicit_location = false; - this->data.explicit_index = false; - this->data.explicit_binding = false; - this->data.explicit_component = false; - this->data.has_initializer = false; - this->data.is_implicit_initializer = false; - this->data.is_xfb = false; - this->data.is_xfb_only = false; - this->data.explicit_xfb_buffer = false; - this->data.explicit_xfb_offset = false; - this->data.explicit_xfb_stride = false; - this->data.location = -1; - this->data.location_frac = 0; - this->data.matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; - this->data.from_named_ifc_block = false; - this->data.must_be_shader_input = false; - this->data.index = 0; - this->data.binding = 0; - this->data.warn_extension_index = 0; - this->constant_value = NULL; - this->constant_initializer = NULL; - this->data.depth_layout = ir_depth_layout_none; - this->data.used = false; - this->data.assigned = false; - this->data.always_active_io = false; - this->data.read_only = false; - this->data.centroid = false; - this->data.sample = false; - this->data.patch = false; - this->data.explicit_invariant = false; - this->data.invariant = false; - this->data.precise = false; - this->data.how_declared = ir_var_declared_normally; - this->data.mode = mode; - this->data.interpolation = INTERP_MODE_NONE; - this->data.max_array_access = -1; - this->data.offset = 0; - this->data.precision = GLSL_PRECISION_NONE; - this->data.memory_read_only = false; - this->data.memory_write_only = false; - this->data.memory_coherent = false; - this->data.memory_volatile = false; - this->data.memory_restrict = false; - this->data.from_ssbo_unsized_array = false; - this->data.implicit_sized_array = false; - this->data.fb_fetch_output = false; - this->data.bindless = false; - this->data.bound = false; - this->data.image_format = PIPE_FORMAT_NONE; - this->data._num_state_slots = 0; - this->data.param_index = 0; - this->data.stream = 0; - this->data.xfb_buffer = -1; - this->data.xfb_stride = -1; - this->data.implicit_conversion_prohibited = false; - - this->interface_type = NULL; - - if (type != NULL) { - if (type->is_interface()) - this->init_interface_type(type); - else if (type->without_array()->is_interface()) - this->init_interface_type(type->without_array()); - } -} - - -const char * -interpolation_string(unsigned interpolation) -{ - switch (interpolation) { - case INTERP_MODE_NONE: return "no"; - case INTERP_MODE_SMOOTH: return "smooth"; - case INTERP_MODE_FLAT: return "flat"; - case INTERP_MODE_NOPERSPECTIVE: return "noperspective"; - } - - assert(!"Should not get here."); - return ""; -} - -const char *const ir_variable::warn_extension_table[] = { - "", - "GL_ARB_shader_stencil_export", - "GL_AMD_shader_stencil_export", -}; - -void -ir_variable::enable_extension_warning(const char *extension) -{ - for (unsigned i = 0; i < ARRAY_SIZE(warn_extension_table); i++) { - if (strcmp(warn_extension_table[i], extension) == 0) { - this->data.warn_extension_index = i; - return; - } - } - - assert(!"Should not get here."); - this->data.warn_extension_index = 0; -} - -const char * -ir_variable::get_extension_warning() const -{ - return this->data.warn_extension_index == 0 - ? NULL : warn_extension_table[this->data.warn_extension_index]; -} - -ir_function_signature::ir_function_signature(const glsl_type *return_type, - builtin_available_predicate b) - : ir_instruction(ir_type_function_signature), - return_type(return_type), is_defined(false), - return_precision(GLSL_PRECISION_NONE), - intrinsic_id(ir_intrinsic_invalid), builtin_avail(b), _function(NULL) -{ - this->origin = NULL; -} - - -bool -ir_function_signature::is_builtin() const -{ - return builtin_avail != NULL; -} - - -bool -ir_function_signature::is_builtin_available(const _mesa_glsl_parse_state *state) const -{ - /* We can't call the predicate without a state pointer, so just say that - * the signature is available. At compile time, we need the filtering, - * but also receive a valid state pointer. At link time, we're resolving - * imported built-in prototypes to their definitions, which will always - * be an exact match. So we can skip the filtering. - */ - if (state == NULL) - return true; - - assert(builtin_avail != NULL); - return builtin_avail(state); -} - - -static bool -modes_match(unsigned a, unsigned b) -{ - if (a == b) - return true; - - /* Accept "in" vs. "const in" */ - if ((a == ir_var_const_in && b == ir_var_function_in) || - (b == ir_var_const_in && a == ir_var_function_in)) - return true; - - return false; -} - - -const char * -ir_function_signature::qualifiers_match(exec_list *params) -{ - /* check that the qualifiers match. */ - foreach_two_lists(a_node, &this->parameters, b_node, params) { - ir_variable *a = (ir_variable *) a_node; - ir_variable *b = (ir_variable *) b_node; - - if (a->data.read_only != b->data.read_only || - !modes_match(a->data.mode, b->data.mode) || - a->data.interpolation != b->data.interpolation || - a->data.centroid != b->data.centroid || - a->data.sample != b->data.sample || - a->data.patch != b->data.patch || - a->data.memory_read_only != b->data.memory_read_only || - a->data.memory_write_only != b->data.memory_write_only || - a->data.memory_coherent != b->data.memory_coherent || - a->data.memory_volatile != b->data.memory_volatile || - a->data.memory_restrict != b->data.memory_restrict) { - - /* parameter a's qualifiers don't match */ - return a->name; - } - } - return NULL; -} - - -void -ir_function_signature::replace_parameters(exec_list *new_params) -{ - /* Destroy all of the previous parameter information. If the previous - * parameter information comes from the function prototype, it may either - * specify incorrect parameter names or not have names at all. - */ - new_params->move_nodes_to(¶meters); -} - - -ir_function::ir_function(const char *name) - : ir_instruction(ir_type_function) -{ - this->subroutine_index = -1; - this->name = ralloc_strdup(this, name); -} - - -bool -ir_function::has_user_signature() -{ - foreach_in_list(ir_function_signature, sig, &this->signatures) { - if (!sig->is_builtin()) - return true; - } - return false; -} - - -ir_rvalue * -ir_rvalue::error_value(void *mem_ctx) -{ - ir_rvalue *v = new(mem_ctx) ir_rvalue(ir_type_unset); - - v->type = glsl_type::error_type; - return v; -} - - -void -visit_exec_list(exec_list *list, ir_visitor *visitor) -{ - foreach_in_list_safe(ir_instruction, node, list) { - node->accept(visitor); - } -} - - -static void -steal_memory(ir_instruction *ir, void *new_ctx) -{ - ir_variable *var = ir->as_variable(); - ir_function *fn = ir->as_function(); - ir_constant *constant = ir->as_constant(); - if (var != NULL && var->constant_value != NULL) - steal_memory(var->constant_value, ir); - - if (var != NULL && var->constant_initializer != NULL) - steal_memory(var->constant_initializer, ir); - - if (fn != NULL && fn->subroutine_types) - ralloc_steal(new_ctx, fn->subroutine_types); - - /* The components of aggregate constants are not visited by the normal - * visitor, so steal their values by hand. - */ - if (constant != NULL && - (constant->type->is_array() || constant->type->is_struct())) { - for (unsigned int i = 0; i < constant->type->length; i++) { - steal_memory(constant->const_elements[i], ir); - } - } - - ralloc_steal(new_ctx, ir); -} - - -void -reparent_ir(exec_list *list, void *mem_ctx) -{ - foreach_in_list(ir_instruction, node, list) { - visit_tree(node, steal_memory, mem_ctx); - } -} - -unsigned -vertices_per_prim(GLenum prim) -{ - switch (prim) { - case GL_POINTS: - return 1; - case GL_LINES: - return 2; - case GL_TRIANGLES: - return 3; - case GL_LINES_ADJACENCY: - return 4; - case GL_TRIANGLES_ADJACENCY: - return 6; - default: - assert(!"Bad primitive"); - return 3; - } -} - -/** - * Generate a string describing the mode of a variable - */ -const char * -mode_string(const ir_variable *var) -{ - switch (var->data.mode) { - case ir_var_auto: - return (var->data.read_only) ? "global constant" : "global variable"; - - case ir_var_uniform: - return "uniform"; - - case ir_var_shader_storage: - return "buffer"; - - case ir_var_shader_in: - return "shader input"; - - case ir_var_shader_out: - return "shader output"; - - case ir_var_function_in: - case ir_var_const_in: - return "function input"; - - case ir_var_function_out: - return "function output"; - - case ir_var_function_inout: - return "function inout"; - - case ir_var_system_value: - return "shader input"; - - case ir_var_temporary: - return "compiler temporary"; - - case ir_var_mode_count: - break; - } - - assert(!"Should not get here."); - return "invalid variable"; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir.h deleted file mode 100644 index 147e493..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir.h +++ /dev/null @@ -1,2547 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_H -#define IR_H - -#include -#include - -#include "../../util/ralloc.h" -#include "../../util/format/u_format.h" -#include "../../util/half_float.h" -#include "../glsl_types.h" -#include "list.h" -#include "ir_visitor.h" -#include "ir_hierarchical_visitor.h" - -#ifdef __cplusplus - -/** - * \defgroup IR Intermediate representation nodes - * - * @{ - */ - -/** - * Class tags - * - * Each concrete class derived from \c ir_instruction has a value in this - * enumerant. The value for the type is stored in \c ir_instruction::ir_type - * by the constructor. While using type tags is not very C++, it is extremely - * convenient. For example, during debugging you can simply inspect - * \c ir_instruction::ir_type to find out the actual type of the object. - * - * In addition, it is possible to use a switch-statement based on \c - * \c ir_instruction::ir_type to select different behavior for different object - * types. For functions that have only slight differences for several object - * types, this allows writing very straightforward, readable code. - */ -enum ir_node_type { - ir_type_dereference_array, - ir_type_dereference_record, - ir_type_dereference_variable, - ir_type_constant, - ir_type_expression, - ir_type_swizzle, - ir_type_texture, - ir_type_variable, - ir_type_assignment, - ir_type_call, - ir_type_function, - ir_type_function_signature, - ir_type_if, - ir_type_loop, - ir_type_loop_jump, - ir_type_return, - ir_type_discard, - ir_type_demote, - ir_type_emit_vertex, - ir_type_end_primitive, - ir_type_barrier, - ir_type_max, /**< maximum ir_type enum number, for validation */ - ir_type_unset = ir_type_max -}; - - -/** - * Base class of all IR instructions - */ -class ir_instruction : public exec_node { -public: - enum ir_node_type ir_type; - - /** - * GCC 4.7+ and clang warn when deleting an ir_instruction unless - * there's a virtual destructor present. Because we almost - * universally use ralloc for our memory management of - * ir_instructions, the destructor doesn't need to do any work. - */ - virtual ~ir_instruction() - { - } - - /** ir_print_visitor helper for debugging. */ - void print(void) const; - void fprint(FILE *f) const; - - virtual void accept(ir_visitor *) = 0; - virtual ir_visitor_status accept(ir_hierarchical_visitor *) = 0; - virtual ir_instruction *clone(void *mem_ctx, - struct hash_table *ht) const = 0; - - bool is_rvalue() const - { - return ir_type == ir_type_dereference_array || - ir_type == ir_type_dereference_record || - ir_type == ir_type_dereference_variable || - ir_type == ir_type_constant || - ir_type == ir_type_expression || - ir_type == ir_type_swizzle || - ir_type == ir_type_texture; - } - - bool is_dereference() const - { - return ir_type == ir_type_dereference_array || - ir_type == ir_type_dereference_record || - ir_type == ir_type_dereference_variable; - } - - bool is_jump() const - { - return ir_type == ir_type_loop_jump || - ir_type == ir_type_return || - ir_type == ir_type_discard; - } - - /** - * \name IR instruction downcast functions - * - * These functions either cast the object to a derived class or return - * \c NULL if the object's type does not match the specified derived class. - * Additional downcast functions will be added as needed. - */ - /*@{*/ - #define AS_BASE(TYPE) \ - class ir_##TYPE *as_##TYPE() \ - { \ - return is_##TYPE() ? (ir_##TYPE *) this : NULL; \ - } \ - const class ir_##TYPE *as_##TYPE() const \ - { \ - return is_##TYPE() ? (ir_##TYPE *) this : NULL; \ - } - - AS_BASE(rvalue) - AS_BASE(dereference) - AS_BASE(jump) - #undef AS_BASE - - #define AS_CHILD(TYPE) \ - class ir_##TYPE * as_##TYPE() \ - { \ - return ir_type == ir_type_##TYPE ? (ir_##TYPE *) this : NULL; \ - } \ - const class ir_##TYPE * as_##TYPE() const \ - { \ - return ir_type == ir_type_##TYPE ? (const ir_##TYPE *) this : NULL; \ - } - AS_CHILD(variable) - AS_CHILD(function) - AS_CHILD(dereference_array) - AS_CHILD(dereference_variable) - AS_CHILD(dereference_record) - AS_CHILD(expression) - AS_CHILD(loop) - AS_CHILD(assignment) - AS_CHILD(call) - AS_CHILD(return) - AS_CHILD(if) - AS_CHILD(swizzle) - AS_CHILD(texture) - AS_CHILD(constant) - AS_CHILD(discard) - #undef AS_CHILD - /*@}*/ - - /** - * IR equality method: Return true if the referenced instruction would - * return the same value as this one. - * - * This intended to be used for CSE and algebraic optimizations, on rvalues - * in particular. No support for other instruction types (assignments, - * jumps, calls, etc.) is planned. - */ - virtual bool equals(const ir_instruction *ir, - enum ir_node_type ignore = ir_type_unset) const; - -protected: - ir_instruction(enum ir_node_type t) - : ir_type(t) - { - } - -private: - ir_instruction() - { - assert(!"Should not get here."); - } -}; - - -/** - * The base class for all "values"/expression trees. - */ -class ir_rvalue : public ir_instruction { -public: - const struct glsl_type *type; - - virtual ir_rvalue *clone(void *mem_ctx, struct hash_table *) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - virtual bool is_lvalue(const struct _mesa_glsl_parse_state * = NULL) const - { - return false; - } - - /** - * Get the variable that is ultimately referenced by an r-value - */ - virtual ir_variable *variable_referenced() const - { - return NULL; - } - - - /** - * If an r-value is a reference to a whole variable, get that variable - * - * \return - * Pointer to a variable that is completely dereferenced by the r-value. If - * the r-value is not a dereference or the dereference does not access the - * entire variable (i.e., it's just one array element, struct field), \c NULL - * is returned. - */ - virtual ir_variable *whole_variable_referenced() - { - return NULL; - } - - /** - * Determine if an r-value has the value zero - * - * The base implementation of this function always returns \c false. The - * \c ir_constant class over-rides this function to return \c true \b only - * for vector and scalar types that have all elements set to the value - * zero (or \c false for booleans). - * - * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one - */ - virtual bool is_zero() const; - - /** - * Determine if an r-value has the value one - * - * The base implementation of this function always returns \c false. The - * \c ir_constant class over-rides this function to return \c true \b only - * for vector and scalar types that have all elements set to the value - * one (or \c true for booleans). - * - * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one - */ - virtual bool is_one() const; - - /** - * Determine if an r-value has the value negative one - * - * The base implementation of this function always returns \c false. The - * \c ir_constant class over-rides this function to return \c true \b only - * for vector and scalar types that have all elements set to the value - * negative one. For boolean types, the result is always \c false. - * - * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one - */ - virtual bool is_negative_one() const; - - /** - * Determine if an r-value is an unsigned integer constant which can be - * stored in 16 bits. - * - * \sa ir_constant::is_uint16_constant. - */ - virtual bool is_uint16_constant() const { return false; } - - /** - * Return a generic value of error_type. - * - * Allocation will be performed with 'mem_ctx' as ralloc owner. - */ - static ir_rvalue *error_value(void *mem_ctx); - -protected: - ir_rvalue(enum ir_node_type t); -}; - - -/** - * Variable storage classes - */ -enum ir_variable_mode { - ir_var_auto = 0, /**< Function local variables and globals. */ - ir_var_uniform, /**< Variable declared as a uniform. */ - ir_var_shader_storage, /**< Variable declared as an ssbo. */ - ir_var_shader_shared, /**< Variable declared as shared. */ - ir_var_shader_in, - ir_var_shader_out, - ir_var_function_in, - ir_var_function_out, - ir_var_function_inout, - ir_var_const_in, /**< "in" param that must be a constant expression */ - ir_var_system_value, /**< Ex: front-face, instance-id, etc. */ - ir_var_temporary, /**< Temporary variable generated during compilation. */ - ir_var_mode_count /**< Number of variable modes */ -}; - -/** - * Enum keeping track of how a variable was declared. For error checking of - * the gl_PerVertex redeclaration rules. - */ -enum ir_var_declaration_type { - /** - * Normal declaration (for most variables, this means an explicit - * declaration. Exception: temporaries are always implicitly declared, but - * they still use ir_var_declared_normally). - * - * Note: an ir_variable that represents a named interface block uses - * ir_var_declared_normally. - */ - ir_var_declared_normally = 0, - - /** - * Variable was explicitly declared (or re-declared) in an unnamed - * interface block. - */ - ir_var_declared_in_block, - - /** - * Variable is an implicitly declared built-in that has not been explicitly - * re-declared by the shader. - */ - ir_var_declared_implicitly, - - /** - * Variable is implicitly generated by the compiler and should not be - * visible via the API. - */ - ir_var_hidden, -}; - -/** - * \brief Layout qualifiers for gl_FragDepth. - * - * The AMD/ARB_conservative_depth extensions allow gl_FragDepth to be redeclared - * with a layout qualifier. - */ -enum ir_depth_layout { - ir_depth_layout_none, /**< No depth layout is specified. */ - ir_depth_layout_any, - ir_depth_layout_greater, - ir_depth_layout_less, - ir_depth_layout_unchanged -}; - -/** - * \brief Convert depth layout qualifier to string. - */ -const char* -depth_layout_string(ir_depth_layout layout); - -/** - * Description of built-in state associated with a uniform - * - * \sa ir_variable::state_slots - */ -struct ir_state_slot { - gl_state_index16 tokens[STATE_LENGTH]; - int swizzle; -}; - - -/** - * Get the string value for an interpolation qualifier - * - * \return The string that would be used in a shader to specify \c - * mode will be returned. - * - * This function is used to generate error messages of the form "shader - * uses %s interpolation qualifier", so in the case where there is no - * interpolation qualifier, it returns "no". - * - * This function should only be used on a shader input or output variable. - */ -const char *interpolation_string(unsigned interpolation); - - -class ir_variable : public ir_instruction { -public: - ir_variable(const struct glsl_type *, const char *, ir_variable_mode); - - virtual ir_variable *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - - /** - * Determine whether or not a variable is part of a uniform or - * shader storage block. - */ - inline bool is_in_buffer_block() const - { - return (this->data.mode == ir_var_uniform || - this->data.mode == ir_var_shader_storage) && - this->interface_type != NULL; - } - - /** - * Determine whether or not a variable is part of a shader storage block. - */ - inline bool is_in_shader_storage_block() const - { - return this->data.mode == ir_var_shader_storage && - this->interface_type != NULL; - } - - /** - * Determine whether or not a variable is part of an uniform block. - */ - inline bool is_in_uniform_block() const - { - return this->data.mode == ir_var_uniform && - this->interface_type != NULL; - } - - /** - * Determine whether or not a variable is the declaration of an interface - * block - * - * For the first declaration below, there will be an \c ir_variable named - * "instance" whose type and whose instance_type will be the same - * \c glsl_type. For the second declaration, there will be an \c ir_variable - * named "f" whose type is float and whose instance_type is B2. - * - * "instance" is an interface instance variable, but "f" is not. - * - * uniform B1 { - * float f; - * } instance; - * - * uniform B2 { - * float f; - * }; - */ - inline bool is_interface_instance() const - { - return this->type->without_array() == this->interface_type; - } - - /** - * Return whether this variable contains a bindless sampler/image. - */ - inline bool contains_bindless() const - { - if (!this->type->contains_sampler() && !this->type->contains_image()) - return false; - - return this->data.bindless || this->data.mode != ir_var_uniform; - } - - /** - * Set this->interface_type on a newly created variable. - */ - void init_interface_type(const struct glsl_type *type) - { - assert(this->interface_type == NULL); - this->interface_type = type; - if (this->is_interface_instance()) { - this->u.max_ifc_array_access = - ralloc_array(this, int, type->length); - for (unsigned i = 0; i < type->length; i++) { - this->u.max_ifc_array_access[i] = -1; - } - } - } - - /** - * Change this->interface_type on a variable that previously had a - * different, but compatible, interface_type. This is used during linking - * to set the size of arrays in interface blocks. - */ - void change_interface_type(const struct glsl_type *type) - { - if (this->u.max_ifc_array_access != NULL) { - /* max_ifc_array_access has already been allocated, so make sure the - * new interface has the same number of fields as the old one. - */ - assert(this->interface_type->length == type->length); - } - this->interface_type = type; - } - - /** - * Change this->interface_type on a variable that previously had a - * different, and incompatible, interface_type. This is used during - * compilation to handle redeclaration of the built-in gl_PerVertex - * interface block. - */ - void reinit_interface_type(const struct glsl_type *type) - { - if (this->u.max_ifc_array_access != NULL) { -#ifndef NDEBUG - /* Redeclaring gl_PerVertex is only allowed if none of the built-ins - * it defines have been accessed yet; so it's safe to throw away the - * old max_ifc_array_access pointer, since all of its values are - * zero. - */ - for (unsigned i = 0; i < this->interface_type->length; i++) - assert(this->u.max_ifc_array_access[i] == -1); -#endif - ralloc_free(this->u.max_ifc_array_access); - this->u.max_ifc_array_access = NULL; - } - this->interface_type = NULL; - init_interface_type(type); - } - - const glsl_type *get_interface_type() const - { - return this->interface_type; - } - - enum glsl_interface_packing get_interface_type_packing() const - { - return this->interface_type->get_interface_packing(); - } - /** - * Get the max_ifc_array_access pointer - * - * A "set" function is not needed because the array is dynamically allocated - * as necessary. - */ - inline int *get_max_ifc_array_access() - { - assert(this->data._num_state_slots == 0); - return this->u.max_ifc_array_access; - } - - inline unsigned get_num_state_slots() const - { - assert(!this->is_interface_instance() - || this->data._num_state_slots == 0); - return this->data._num_state_slots; - } - - inline void set_num_state_slots(unsigned n) - { - assert(!this->is_interface_instance() - || n == 0); - this->data._num_state_slots = n; - } - - inline ir_state_slot *get_state_slots() - { - return this->is_interface_instance() ? NULL : this->u.state_slots; - } - - inline const ir_state_slot *get_state_slots() const - { - return this->is_interface_instance() ? NULL : this->u.state_slots; - } - - inline ir_state_slot *allocate_state_slots(unsigned n) - { - assert(!this->is_interface_instance()); - - this->u.state_slots = ralloc_array(this, ir_state_slot, n); - this->data._num_state_slots = 0; - - if (this->u.state_slots != NULL) - this->data._num_state_slots = n; - - return this->u.state_slots; - } - - inline bool is_interpolation_flat() const - { - return this->data.interpolation == INTERP_MODE_FLAT || - this->type->contains_integer() || - this->type->contains_double(); - } - - inline bool is_name_ralloced() const - { - return this->name != ir_variable::tmp_name && - this->name != this->name_storage; - } - - inline bool is_fb_fetch_color_output() const - { - return this->data.fb_fetch_output && - this->data.location != FRAG_RESULT_DEPTH && - this->data.location != FRAG_RESULT_STENCIL; - } - - /** - * Enable emitting extension warnings for this variable - */ - void enable_extension_warning(const char *extension); - - /** - * Get the extension warning string for this variable - * - * If warnings are not enabled, \c NULL is returned. - */ - const char *get_extension_warning() const; - - /** - * Declared type of the variable - */ - const struct glsl_type *type; - - /** - * Declared name of the variable - */ - const char *name; - -private: - /** - * If the name length fits into name_storage, it's used, otherwise - * the name is ralloc'd. shader-db mining showed that 70% of variables - * fit here. This is a win over ralloc where only ralloc_header has - * 20 bytes on 64-bit (28 bytes with DEBUG), and we can also skip malloc. - */ - char name_storage[16]; - -public: - struct ir_variable_data { - - /** - * Is the variable read-only? - * - * This is set for variables declared as \c const, shader inputs, - * and uniforms. - */ - unsigned read_only:1; - unsigned centroid:1; - unsigned sample:1; - unsigned patch:1; - /** - * Was an 'invariant' qualifier explicitly set in the shader? - * - * This is used to cross validate qualifiers. - */ - unsigned explicit_invariant:1; - /** - * Is the variable invariant? - * - * It can happen either by having the 'invariant' qualifier - * explicitly set in the shader or by being used in calculations - * of other invariant variables. - */ - unsigned invariant:1; - unsigned precise:1; - - /** - * Has this variable been used for reading or writing? - * - * Several GLSL semantic checks require knowledge of whether or not a - * variable has been used. For example, it is an error to redeclare a - * variable as invariant after it has been used. - * - * This is maintained in the ast_to_hir.cpp path and during linking, - * but not in Mesa's fixed function or ARB program paths. - */ - unsigned used:1; - - /** - * Has this variable been statically assigned? - * - * This answers whether the variable was assigned in any path of - * the shader during ast_to_hir. This doesn't answer whether it is - * still written after dead code removal, nor is it maintained in - * non-ast_to_hir.cpp (GLSL parsing) paths. - */ - unsigned assigned:1; - - /** - * When separate shader programs are enabled, only input/outputs between - * the stages of a multi-stage separate program can be safely removed - * from the shader interface. Other input/outputs must remains active. - */ - unsigned always_active_io:1; - - /** - * Enum indicating how the variable was declared. See - * ir_var_declaration_type. - * - * This is used to detect certain kinds of illegal variable redeclarations. - */ - unsigned how_declared:2; - - /** - * Storage class of the variable. - * - * \sa ir_variable_mode - */ - unsigned mode:4; - - /** - * Interpolation mode for shader inputs / outputs - * - * \sa glsl_interp_mode - */ - unsigned interpolation:2; - - /** - * Was the location explicitly set in the shader? - * - * If the location is explicitly set in the shader, it \b cannot be changed - * by the linker or by the API (e.g., calls to \c glBindAttribLocation have - * no effect). - */ - unsigned explicit_location:1; - unsigned explicit_index:1; - - /** - * Was an initial binding explicitly set in the shader? - * - * If so, constant_value contains an integer ir_constant representing the - * initial binding point. - */ - unsigned explicit_binding:1; - - /** - * Was an initial component explicitly set in the shader? - */ - unsigned explicit_component:1; - - /** - * Does this variable have an initializer? - * - * This is used by the linker to cross-validiate initializers of global - * variables. - */ - unsigned has_initializer:1; - - /** - * Is the initializer created by the compiler (glsl_zero_init) - */ - unsigned is_implicit_initializer:1; - - /** - * Is this varying used by transform feedback? - * - * This is used by the linker to decide if it's safe to pack the varying. - */ - unsigned is_xfb:1; - - /** - * Is this varying used only by transform feedback? - * - * This is used by the linker to decide if its safe to pack the varying. - */ - unsigned is_xfb_only:1; - - /** - * Was a transform feedback buffer set in the shader? - */ - unsigned explicit_xfb_buffer:1; - - /** - * Was a transform feedback offset set in the shader? - */ - unsigned explicit_xfb_offset:1; - - /** - * Was a transform feedback stride set in the shader? - */ - unsigned explicit_xfb_stride:1; - - /** - * If non-zero, then this variable may be packed along with other variables - * into a single varying slot, so this offset should be applied when - * accessing components. For example, an offset of 1 means that the x - * component of this variable is actually stored in component y of the - * location specified by \c location. - */ - unsigned location_frac:2; - - /** - * Layout of the matrix. Uses glsl_matrix_layout values. - */ - unsigned matrix_layout:2; - - /** - * Non-zero if this variable was created by lowering a named interface - * block. - */ - unsigned from_named_ifc_block:1; - - /** - * Non-zero if the variable must be a shader input. This is useful for - * constraints on function parameters. - */ - unsigned must_be_shader_input:1; - - /** - * Output index for dual source blending. - * - * \note - * The GLSL spec only allows the values 0 or 1 for the index in \b dual - * source blending. - */ - unsigned index:1; - - /** - * Precision qualifier. - * - * In desktop GLSL we do not care about precision qualifiers at all, in - * fact, the spec says that precision qualifiers are ignored. - * - * To make things easy, we make it so that this field is always - * GLSL_PRECISION_NONE on desktop shaders. This way all the variables - * have the same precision value and the checks we add in the compiler - * for this field will never break a desktop shader compile. - */ - unsigned precision:2; - - /** - * \brief Layout qualifier for gl_FragDepth. - * - * This is not equal to \c ir_depth_layout_none if and only if this - * variable is \c gl_FragDepth and a layout qualifier is specified. - */ - ir_depth_layout depth_layout:3; - - /** - * Memory qualifiers. - */ - unsigned memory_read_only:1; /**< "readonly" qualifier. */ - unsigned memory_write_only:1; /**< "writeonly" qualifier. */ - unsigned memory_coherent:1; - unsigned memory_volatile:1; - unsigned memory_restrict:1; - - /** - * ARB_shader_storage_buffer_object - */ - unsigned from_ssbo_unsized_array:1; /**< unsized array buffer variable. */ - - unsigned implicit_sized_array:1; - - /** - * Whether this is a fragment shader output implicitly initialized with - * the previous contents of the specified render target at the - * framebuffer location corresponding to this shader invocation. - */ - unsigned fb_fetch_output:1; - - /** - * Non-zero if this variable is considered bindless as defined by - * ARB_bindless_texture. - */ - unsigned bindless:1; - - /** - * Non-zero if this variable is considered bound as defined by - * ARB_bindless_texture. - */ - unsigned bound:1; - - /** - * Non-zero if the variable shall not be implicitly converted during - * functions matching. - */ - unsigned implicit_conversion_prohibited:1; - - /** - * Emit a warning if this variable is accessed. - */ - private: - uint8_t warn_extension_index; - - public: - /** - * Image internal format if specified explicitly, otherwise - * PIPE_FORMAT_NONE. - */ - enum pipe_format image_format; - - private: - /** - * Number of state slots used - * - * \note - * This could be stored in as few as 7-bits, if necessary. If it is made - * smaller, add an assertion to \c ir_variable::allocate_state_slots to - * be safe. - */ - uint16_t _num_state_slots; - - public: - /** - * Initial binding point for a sampler, atomic, or UBO. - * - * For array types, this represents the binding point for the first element. - */ - uint16_t binding; - - /** - * Storage location of the base of this variable - * - * The precise meaning of this field depends on the nature of the variable. - * - * - Vertex shader input: one of the values from \c gl_vert_attrib. - * - Vertex shader output: one of the values from \c gl_varying_slot. - * - Geometry shader input: one of the values from \c gl_varying_slot. - * - Geometry shader output: one of the values from \c gl_varying_slot. - * - Fragment shader input: one of the values from \c gl_varying_slot. - * - Fragment shader output: one of the values from \c gl_frag_result. - * - Uniforms: Per-stage uniform slot number for default uniform block. - * - Uniforms: Index within the uniform block definition for UBO members. - * - Non-UBO Uniforms: explicit location until linking then reused to - * store uniform slot number. - * - Other: This field is not currently used. - * - * If the variable is a uniform, shader input, or shader output, and the - * slot has not been assigned, the value will be -1. - */ - int location; - - /** - * for glsl->tgsi/mesa IR we need to store the index into the - * parameters for uniforms, initially the code overloaded location - * but this causes problems with indirect samplers and AoA. - * This is assigned in _mesa_generate_parameters_list_for_uniforms. - */ - int param_index; - - /** - * Vertex stream output identifier. - * - * For packed outputs, bit 31 is set and bits [2*i+1,2*i] indicate the - * stream of the i-th component. - */ - unsigned stream; - - /** - * Atomic, transform feedback or block member offset. - */ - unsigned offset; - - /** - * Highest element accessed with a constant expression array index - * - * Not used for non-array variables. -1 is never accessed. - */ - int max_array_access; - - /** - * Transform feedback buffer. - */ - unsigned xfb_buffer; - - /** - * Transform feedback stride. - */ - unsigned xfb_stride; - - /** - * Allow (only) ir_variable direct access private members. - */ - friend class ir_variable; - } data; - - /** - * Value assigned in the initializer of a variable declared "const" - */ - ir_constant *constant_value; - - /** - * Constant expression assigned in the initializer of the variable - * - * \warning - * This field and \c ::constant_value are distinct. Even if the two fields - * refer to constants with the same value, they must point to separate - * objects. - */ - ir_constant *constant_initializer; - -private: - static const char *const warn_extension_table[]; - - union { - /** - * For variables which satisfy the is_interface_instance() predicate, - * this points to an array of integers such that if the ith member of - * the interface block is an array, max_ifc_array_access[i] is the - * maximum array element of that member that has been accessed. If the - * ith member of the interface block is not an array, - * max_ifc_array_access[i] is unused. - * - * For variables whose type is not an interface block, this pointer is - * NULL. - */ - int *max_ifc_array_access; - - /** - * Built-in state that backs this uniform - * - * Once set at variable creation, \c state_slots must remain invariant. - * - * If the variable is not a uniform, \c _num_state_slots will be zero - * and \c state_slots will be \c NULL. - */ - ir_state_slot *state_slots; - } u; - - /** - * For variables that are in an interface block or are an instance of an - * interface block, this is the \c GLSL_TYPE_INTERFACE type for that block. - * - * \sa ir_variable::location - */ - const glsl_type *interface_type; - - /** - * Name used for anonymous compiler temporaries - */ - static const char tmp_name[]; - -public: - /** - * Should the construct keep names for ir_var_temporary variables? - * - * When this global is false, names passed to the constructor for - * \c ir_var_temporary variables will be dropped. Instead, the variable will - * be named "compiler_temp". This name will be in static storage. - * - * \warning - * \b NEVER change the mode of an \c ir_var_temporary. - * - * \warning - * This variable is \b not thread-safe. It is global, \b not - * per-context. It begins life false. A context can, at some point, make - * it true. From that point on, it will be true forever. This should be - * okay since it will only be set true while debugging. - */ - static bool temporaries_allocate_names; -}; - -/** - * A function that returns whether a built-in function is available in the - * current shading language (based on version, ES or desktop, and extensions). - */ -typedef bool (*builtin_available_predicate)(const _mesa_glsl_parse_state *); - -#define MAKE_INTRINSIC_FOR_TYPE(op, t) \ - ir_intrinsic_generic_ ## op - ir_intrinsic_generic_load + ir_intrinsic_ ## t ## _ ## load - -#define MAP_INTRINSIC_TO_TYPE(i, t) \ - ir_intrinsic_id(int(i) - int(ir_intrinsic_generic_load) + int(ir_intrinsic_ ## t ## _ ## load)) - -enum ir_intrinsic_id { - ir_intrinsic_invalid = 0, - - /** - * \name Generic intrinsics - * - * Each of these intrinsics has a specific version for shared variables and - * SSBOs. - */ - /*@{*/ - ir_intrinsic_generic_load, - ir_intrinsic_generic_store, - ir_intrinsic_generic_atomic_add, - ir_intrinsic_generic_atomic_and, - ir_intrinsic_generic_atomic_or, - ir_intrinsic_generic_atomic_xor, - ir_intrinsic_generic_atomic_min, - ir_intrinsic_generic_atomic_max, - ir_intrinsic_generic_atomic_exchange, - ir_intrinsic_generic_atomic_comp_swap, - /*@}*/ - - ir_intrinsic_atomic_counter_read, - ir_intrinsic_atomic_counter_increment, - ir_intrinsic_atomic_counter_predecrement, - ir_intrinsic_atomic_counter_add, - ir_intrinsic_atomic_counter_and, - ir_intrinsic_atomic_counter_or, - ir_intrinsic_atomic_counter_xor, - ir_intrinsic_atomic_counter_min, - ir_intrinsic_atomic_counter_max, - ir_intrinsic_atomic_counter_exchange, - ir_intrinsic_atomic_counter_comp_swap, - - ir_intrinsic_image_load, - ir_intrinsic_image_store, - ir_intrinsic_image_atomic_add, - ir_intrinsic_image_atomic_and, - ir_intrinsic_image_atomic_or, - ir_intrinsic_image_atomic_xor, - ir_intrinsic_image_atomic_min, - ir_intrinsic_image_atomic_max, - ir_intrinsic_image_atomic_exchange, - ir_intrinsic_image_atomic_comp_swap, - ir_intrinsic_image_size, - ir_intrinsic_image_samples, - ir_intrinsic_image_atomic_inc_wrap, - ir_intrinsic_image_atomic_dec_wrap, - ir_intrinsic_image_sparse_load, - - ir_intrinsic_memory_barrier, - ir_intrinsic_shader_clock, - ir_intrinsic_group_memory_barrier, - ir_intrinsic_memory_barrier_atomic_counter, - ir_intrinsic_memory_barrier_buffer, - ir_intrinsic_memory_barrier_image, - ir_intrinsic_memory_barrier_shared, - ir_intrinsic_begin_invocation_interlock, - ir_intrinsic_end_invocation_interlock, - - ir_intrinsic_vote_all, - ir_intrinsic_vote_any, - ir_intrinsic_vote_eq, - ir_intrinsic_ballot, - ir_intrinsic_read_invocation, - ir_intrinsic_read_first_invocation, - - ir_intrinsic_helper_invocation, - - ir_intrinsic_shared_load, - ir_intrinsic_shared_store = MAKE_INTRINSIC_FOR_TYPE(store, shared), - ir_intrinsic_shared_atomic_add = MAKE_INTRINSIC_FOR_TYPE(atomic_add, shared), - ir_intrinsic_shared_atomic_and = MAKE_INTRINSIC_FOR_TYPE(atomic_and, shared), - ir_intrinsic_shared_atomic_or = MAKE_INTRINSIC_FOR_TYPE(atomic_or, shared), - ir_intrinsic_shared_atomic_xor = MAKE_INTRINSIC_FOR_TYPE(atomic_xor, shared), - ir_intrinsic_shared_atomic_min = MAKE_INTRINSIC_FOR_TYPE(atomic_min, shared), - ir_intrinsic_shared_atomic_max = MAKE_INTRINSIC_FOR_TYPE(atomic_max, shared), - ir_intrinsic_shared_atomic_exchange = MAKE_INTRINSIC_FOR_TYPE(atomic_exchange, shared), - ir_intrinsic_shared_atomic_comp_swap = MAKE_INTRINSIC_FOR_TYPE(atomic_comp_swap, shared), - - ir_intrinsic_is_sparse_texels_resident, -}; - -/*@{*/ -/** - * The representation of a function instance; may be the full definition or - * simply a prototype. - */ -class ir_function_signature : public ir_instruction { - /* An ir_function_signature will be part of the list of signatures in - * an ir_function. - */ -public: - ir_function_signature(const glsl_type *return_type, - builtin_available_predicate builtin_avail = NULL); - - virtual ir_function_signature *clone(void *mem_ctx, - struct hash_table *ht) const; - ir_function_signature *clone_prototype(void *mem_ctx, - struct hash_table *ht) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - /** - * Attempt to evaluate this function as a constant expression, - * given a list of the actual parameters and the variable context. - * Returns NULL for non-built-ins. - */ - ir_constant *constant_expression_value(void *mem_ctx, - exec_list *actual_parameters, - struct hash_table *variable_context); - - /** - * Get the name of the function for which this is a signature - */ - const char *function_name() const; - - /** - * Get a handle to the function for which this is a signature - * - * There is no setter function, this function returns a \c const pointer, - * and \c ir_function_signature::_function is private for a reason. The - * only way to make a connection between a function and function signature - * is via \c ir_function::add_signature. This helps ensure that certain - * invariants (i.e., a function signature is in the list of signatures for - * its \c _function) are met. - * - * \sa ir_function::add_signature - */ - inline const class ir_function *function() const - { - return this->_function; - } - - /** - * Check whether the qualifiers match between this signature's parameters - * and the supplied parameter list. If not, returns the name of the first - * parameter with mismatched qualifiers (for use in error messages). - */ - const char *qualifiers_match(exec_list *params); - - /** - * Replace the current parameter list with the given one. This is useful - * if the current information came from a prototype, and either has invalid - * or missing parameter names. - */ - void replace_parameters(exec_list *new_params); - - /** - * Function return type. - * - * \note The precision qualifier is stored separately in return_precision. - */ - const struct glsl_type *return_type; - - /** - * List of ir_variable of function parameters. - * - * This represents the storage. The paramaters passed in a particular - * call will be in ir_call::actual_paramaters. - */ - struct exec_list parameters; - - /** Whether or not this function has a body (which may be empty). */ - unsigned is_defined:1; - - /* - * Precision qualifier for the return type. - * - * See the comment for ir_variable_data::precision for more details. - */ - unsigned return_precision:2; - - /** Whether or not this function signature is a built-in. */ - bool is_builtin() const; - - /** - * Whether or not this function is an intrinsic to be implemented - * by the driver. - */ - inline bool is_intrinsic() const - { - return intrinsic_id != ir_intrinsic_invalid; - } - - /** Identifier for this intrinsic. */ - enum ir_intrinsic_id intrinsic_id; - - /** Whether or not a built-in is available for this shader. */ - bool is_builtin_available(const _mesa_glsl_parse_state *state) const; - - /** Body of instructions in the function. */ - struct exec_list body; - -private: - /** - * A function pointer to a predicate that answers whether a built-in - * function is available in the current shader. NULL if not a built-in. - */ - builtin_available_predicate builtin_avail; - - /** Function of which this signature is one overload. */ - class ir_function *_function; - - /** Function signature of which this one is a prototype clone */ - const ir_function_signature *origin; - - friend class ir_function; - - /** - * Helper function to run a list of instructions for constant - * expression evaluation. - * - * The hash table represents the values of the visible variables. - * There are no scoping issues because the table is indexed on - * ir_variable pointers, not variable names. - * - * Returns false if the expression is not constant, true otherwise, - * and the value in *result if result is non-NULL. - */ - bool constant_expression_evaluate_expression_list(void *mem_ctx, - const struct exec_list &body, - struct hash_table *variable_context, - ir_constant **result); -}; - - -/** - * Header for tracking multiple overloaded functions with the same name. - * Contains a list of ir_function_signatures representing each of the - * actual functions. - */ -class ir_function : public ir_instruction { -public: - ir_function(const char *name); - - virtual ir_function *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - void add_signature(ir_function_signature *sig) - { - sig->_function = this; - this->signatures.push_tail(sig); - } - - /** - * Find a signature that matches a set of actual parameters, taking implicit - * conversions into account. Also flags whether the match was exact. - */ - ir_function_signature *matching_signature(_mesa_glsl_parse_state *state, - const exec_list *actual_param, - bool allow_builtins, - bool *match_is_exact); - - /** - * Find a signature that matches a set of actual parameters, taking implicit - * conversions into account. - */ - ir_function_signature *matching_signature(_mesa_glsl_parse_state *state, - const exec_list *actual_param, - bool allow_builtins); - - /** - * Find a signature that exactly matches a set of actual parameters without - * any implicit type conversions. - */ - ir_function_signature *exact_matching_signature(_mesa_glsl_parse_state *state, - const exec_list *actual_ps); - - /** - * Name of the function. - */ - const char *name; - - /** Whether or not this function has a signature that isn't a built-in. */ - bool has_user_signature(); - - /** - * List of ir_function_signature for each overloaded function with this name. - */ - struct exec_list signatures; - - /** - * is this function a subroutine type declaration - * e.g. subroutine void type1(float arg1); - */ - bool is_subroutine; - - /** - * is this function associated to a subroutine type - * e.g. subroutine (type1, type2) function_name { function_body }; - * would have num_subroutine_types 2, - * and pointers to the type1 and type2 types. - */ - int num_subroutine_types; - const struct glsl_type **subroutine_types; - - int subroutine_index; -}; - -inline const char *ir_function_signature::function_name() const -{ - return this->_function->name; -} -/*@}*/ - - -/** - * IR instruction representing high-level if-statements - */ -class ir_if : public ir_instruction { -public: - ir_if(ir_rvalue *condition) - : ir_instruction(ir_type_if), condition(condition) - { - } - - virtual ir_if *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - ir_rvalue *condition; - /** List of ir_instruction for the body of the then branch */ - exec_list then_instructions; - /** List of ir_instruction for the body of the else branch */ - exec_list else_instructions; -}; - - -/** - * IR instruction representing a high-level loop structure. - */ -class ir_loop : public ir_instruction { -public: - ir_loop(); - - virtual ir_loop *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - /** List of ir_instruction that make up the body of the loop. */ - exec_list body_instructions; -}; - - -class ir_assignment : public ir_instruction { -public: - ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs); - - /** - * Construct an assignment with an explicit write mask - * - * \note - * Since a write mask is supplied, the LHS must already be a bare - * \c ir_dereference. The cannot be any swizzles in the LHS. - */ - ir_assignment(ir_dereference *lhs, ir_rvalue *rhs, unsigned write_mask); - - virtual ir_assignment *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - /** - * Get a whole variable written by an assignment - * - * If the LHS of the assignment writes a whole variable, the variable is - * returned. Otherwise \c NULL is returned. Examples of whole-variable - * assignment are: - * - * - Assigning to a scalar - * - Assigning to all components of a vector - * - Whole array (or matrix) assignment - * - Whole structure assignment - */ - ir_variable *whole_variable_written(); - - /** - * Set the LHS of an assignment - */ - void set_lhs(ir_rvalue *lhs); - - /** - * Left-hand side of the assignment. - * - * This should be treated as read only. If you need to set the LHS of an - * assignment, use \c ir_assignment::set_lhs. - */ - ir_dereference *lhs; - - /** - * Value being assigned - */ - ir_rvalue *rhs; - - /** - * Component mask written - * - * For non-vector types in the LHS, this field will be zero. For vector - * types, a bit will be set for each component that is written. Note that - * for \c vec2 and \c vec3 types only the lower bits will ever be set. - * - * A partially-set write mask means that each enabled channel gets - * the value from a consecutive channel of the rhs. For example, - * to write just .xyw of gl_FrontColor with color: - * - * (assign (constant bool (1)) (xyw) - * (var_ref gl_FragColor) - * (swiz xyw (var_ref color))) - */ - unsigned write_mask:4; -}; - -#include "../ir_expression_operation.h" - -extern const char *const ir_expression_operation_strings[ir_last_opcode + 1]; -extern const char *const ir_expression_operation_enum_strings[ir_last_opcode + 1]; - -class ir_expression : public ir_rvalue { -public: - ir_expression(int op, const struct glsl_type *type, - ir_rvalue *op0, ir_rvalue *op1 = NULL, - ir_rvalue *op2 = NULL, ir_rvalue *op3 = NULL); - - /** - * Constructor for unary operation expressions - */ - ir_expression(int op, ir_rvalue *); - - /** - * Constructor for binary operation expressions - */ - ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1); - - /** - * Constructor for ternary operation expressions - */ - ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1, ir_rvalue *op2); - - virtual bool equals(const ir_instruction *ir, - enum ir_node_type ignore = ir_type_unset) const; - - virtual ir_expression *clone(void *mem_ctx, struct hash_table *ht) const; - - /** - * Attempt to constant-fold the expression - * - * The "variable_context" hash table links ir_variable * to ir_constant * - * that represent the variables' values. \c NULL represents an empty - * context. - * - * If the expression cannot be constant folded, this method will return - * \c NULL. - */ - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - /** - * This is only here for ir_reader to used for testing purposes please use - * the precomputed num_operands field if you need the number of operands. - */ - static unsigned get_num_operands(ir_expression_operation); - - /** - * Return whether the expression operates on vectors horizontally. - */ - bool is_horizontal() const - { - return operation == ir_binop_all_equal || - operation == ir_binop_any_nequal || - operation == ir_binop_dot || - operation == ir_binop_vector_extract || - operation == ir_triop_vector_insert || - operation == ir_binop_ubo_load || - operation == ir_quadop_vector; - } - - /** - * Do a reverse-lookup to translate the given string into an operator. - */ - static ir_expression_operation get_operator(const char *); - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - virtual ir_variable *variable_referenced() const; - - /** - * Determine the number of operands used by an expression - */ - void init_num_operands() - { - if (operation == ir_quadop_vector) { - num_operands = this->type->vector_elements; - } else { - num_operands = get_num_operands(operation); - } - } - - ir_expression_operation operation; - ir_rvalue *operands[4]; - uint8_t num_operands; -}; - - -/** - * HIR instruction representing a high-level function call, containing a list - * of parameters and returning a value in the supplied temporary. - */ -class ir_call : public ir_instruction { -public: - ir_call(ir_function_signature *callee, - ir_dereference_variable *return_deref, - exec_list *actual_parameters) - : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee), sub_var(NULL), array_idx(NULL) - { - assert(callee->return_type != NULL); - actual_parameters->move_nodes_to(& this->actual_parameters); - } - - ir_call(ir_function_signature *callee, - ir_dereference_variable *return_deref, - exec_list *actual_parameters, - ir_variable *var, ir_rvalue *array_idx) - : ir_instruction(ir_type_call), return_deref(return_deref), callee(callee), sub_var(var), array_idx(array_idx) - { - assert(callee->return_type != NULL); - actual_parameters->move_nodes_to(& this->actual_parameters); - } - - virtual ir_call *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - /** - * Get the name of the function being called. - */ - const char *callee_name() const - { - return callee->function_name(); - } - - /** - * Generates an inline version of the function before @ir, - * storing the return value in return_deref. - */ - void generate_inline(ir_instruction *ir); - - /** - * Storage for the function's return value. - * This must be NULL if the return type is void. - */ - ir_dereference_variable *return_deref; - - /** - * The specific function signature being called. - */ - ir_function_signature *callee; - - /* List of ir_rvalue of paramaters passed in this call. */ - exec_list actual_parameters; - - /* - * ARB_shader_subroutine support - - * the subroutine uniform variable and array index - * rvalue to be used in the lowering pass later. - */ - ir_variable *sub_var; - ir_rvalue *array_idx; -}; - - -/** - * \name Jump-like IR instructions. - * - * These include \c break, \c continue, \c return, and \c discard. - */ -/*@{*/ -class ir_jump : public ir_instruction { -protected: - ir_jump(enum ir_node_type t) - : ir_instruction(t) - { - } -}; - -class ir_return : public ir_jump { -public: - ir_return() - : ir_jump(ir_type_return), value(NULL) - { - } - - ir_return(ir_rvalue *value) - : ir_jump(ir_type_return), value(value) - { - } - - virtual ir_return *clone(void *mem_ctx, struct hash_table *) const; - - ir_rvalue *get_value() const - { - return value; - } - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - ir_rvalue *value; -}; - - -/** - * Jump instructions used inside loops - * - * These include \c break and \c continue. The \c break within a loop is - * different from the \c break within a switch-statement. - * - * \sa ir_switch_jump - */ -class ir_loop_jump : public ir_jump { -public: - enum jump_mode { - jump_break, - jump_continue - }; - - ir_loop_jump(jump_mode mode) - : ir_jump(ir_type_loop_jump) - { - this->mode = mode; - } - - virtual ir_loop_jump *clone(void *mem_ctx, struct hash_table *) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - bool is_break() const - { - return mode == jump_break; - } - - bool is_continue() const - { - return mode == jump_continue; - } - - /** Mode selector for the jump instruction. */ - enum jump_mode mode; -}; - -/** - * IR instruction representing discard statements. - */ -class ir_discard : public ir_jump { -public: - ir_discard() - : ir_jump(ir_type_discard) - { - this->condition = NULL; - } - - ir_discard(ir_rvalue *cond) - : ir_jump(ir_type_discard) - { - this->condition = cond; - } - - virtual ir_discard *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - ir_rvalue *condition; -}; -/*@}*/ - - -/** - * IR instruction representing demote statements from - * GL_EXT_demote_to_helper_invocation. - */ -class ir_demote : public ir_instruction { -public: - ir_demote() - : ir_instruction(ir_type_demote) - { - } - - virtual ir_demote *clone(void *mem_ctx, struct hash_table *ht) const; - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); -}; - - -/** - * Texture sampling opcodes used in ir_texture - */ -enum ir_texture_opcode { - ir_tex, /**< Regular texture look-up */ - ir_txb, /**< Texture look-up with LOD bias */ - ir_txl, /**< Texture look-up with explicit LOD */ - ir_txd, /**< Texture look-up with partial derivatives */ - ir_txf, /**< Texel fetch with explicit LOD */ - ir_txf_ms, /**< Multisample texture fetch */ - ir_txs, /**< Texture size */ - ir_lod, /**< Texture lod query */ - ir_tg4, /**< Texture gather */ - ir_query_levels, /**< Texture levels query */ - ir_texture_samples, /**< Texture samples query */ - ir_samples_identical, /**< Query whether all samples are definitely identical. */ -}; - - -/** - * IR instruction to sample a texture - * - * The specific form of the IR instruction depends on the \c mode value - * selected from \c ir_texture_opcodes. In the printed IR, these will - * appear as: - * - * Texel offset (0 or an expression) - * | Projection divisor - * | | Shadow comparator - * | | | Lod clamp - * | | | | - * v v v v - * (tex 0 1 ( ) ( )) - * (txb 0 1 ( ) ( ) ) - * (txl 0 1 ( ) ) - * (txd 0 1 ( ) ( ) (dPdx dPdy)) - * (txf 0 ) - * (txf_ms - * ) - * (txs ) - * (lod ) - * (tg4 ) - * (query_levels ) - * (samples_identical ) - */ -class ir_texture : public ir_rvalue { -public: - ir_texture(enum ir_texture_opcode op, bool sparse = false) - : ir_rvalue(ir_type_texture), - op(op), sampler(NULL), coordinate(NULL), projector(NULL), - shadow_comparator(NULL), offset(NULL), clamp(NULL), - is_sparse(sparse) - { - memset(&lod_info, 0, sizeof(lod_info)); - } - - virtual ir_texture *clone(void *mem_ctx, struct hash_table *) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - virtual bool equals(const ir_instruction *ir, - enum ir_node_type ignore = ir_type_unset) const; - - /** - * Return a string representing the ir_texture_opcode. - */ - const char *opcode_string(); - - /** Set the sampler and type. */ - void set_sampler(ir_dereference *sampler, const glsl_type *type); - - /** - * Do a reverse-lookup to translate a string into an ir_texture_opcode. - */ - static ir_texture_opcode get_opcode(const char *); - - enum ir_texture_opcode op; - - /** Sampler to use for the texture access. */ - ir_dereference *sampler; - - /** Texture coordinate to sample */ - ir_rvalue *coordinate; - - /** - * Value used for projective divide. - * - * If there is no projective divide (the common case), this will be - * \c NULL. Optimization passes should check for this to point to a constant - * of 1.0 and replace that with \c NULL. - */ - ir_rvalue *projector; - - /** - * Coordinate used for comparison on shadow look-ups. - * - * If there is no shadow comparison, this will be \c NULL. For the - * \c ir_txf opcode, this *must* be \c NULL. - */ - ir_rvalue *shadow_comparator; - - /** Texel offset. */ - ir_rvalue *offset; - - /** Lod clamp. */ - ir_rvalue *clamp; - - union { - ir_rvalue *lod; /**< Floating point LOD */ - ir_rvalue *bias; /**< Floating point LOD bias */ - ir_rvalue *sample_index; /**< MSAA sample index */ - ir_rvalue *component; /**< Gather component selector */ - struct { - ir_rvalue *dPdx; /**< Partial derivative of coordinate wrt X */ - ir_rvalue *dPdy; /**< Partial derivative of coordinate wrt Y */ - } grad; - } lod_info; - - /* Whether a sparse texture */ - bool is_sparse; -}; - - -struct ir_swizzle_mask { - unsigned x:2; - unsigned y:2; - unsigned z:2; - unsigned w:2; - - /** - * Number of components in the swizzle. - */ - unsigned num_components:3; - - /** - * Does the swizzle contain duplicate components? - * - * L-value swizzles cannot contain duplicate components. - */ - unsigned has_duplicates:1; -}; - - -class ir_swizzle : public ir_rvalue { -public: - ir_swizzle(ir_rvalue *, unsigned x, unsigned y, unsigned z, unsigned w, - unsigned count); - - ir_swizzle(ir_rvalue *val, const unsigned *components, unsigned count); - - ir_swizzle(ir_rvalue *val, ir_swizzle_mask mask); - - virtual ir_swizzle *clone(void *mem_ctx, struct hash_table *) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - /** - * Construct an ir_swizzle from the textual representation. Can fail. - */ - static ir_swizzle *create(ir_rvalue *, const char *, unsigned vector_length); - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - virtual bool equals(const ir_instruction *ir, - enum ir_node_type ignore = ir_type_unset) const; - - bool is_lvalue(const struct _mesa_glsl_parse_state *state) const - { - return val->is_lvalue(state) && !mask.has_duplicates; - } - - /** - * Get the variable that is ultimately referenced by an r-value - */ - virtual ir_variable *variable_referenced() const; - - ir_rvalue *val; - ir_swizzle_mask mask; - -private: - /** - * Initialize the mask component of a swizzle - * - * This is used by the \c ir_swizzle constructors. - */ - void init_mask(const unsigned *components, unsigned count); -}; - - -class ir_dereference : public ir_rvalue { -public: - virtual ir_dereference *clone(void *mem_ctx, struct hash_table *) const = 0; - - bool is_lvalue(const struct _mesa_glsl_parse_state *state) const; - - /** - * Get the variable that is ultimately referenced by an r-value - */ - virtual ir_variable *variable_referenced() const = 0; - - /** - * Get the precision. This can either come from the eventual variable that - * is dereferenced, or from a record member. - */ - virtual int precision() const = 0; - -protected: - ir_dereference(enum ir_node_type t) - : ir_rvalue(t) - { - } -}; - - -class ir_dereference_variable : public ir_dereference { -public: - ir_dereference_variable(ir_variable *var); - - virtual ir_dereference_variable *clone(void *mem_ctx, - struct hash_table *) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - virtual bool equals(const ir_instruction *ir, - enum ir_node_type ignore = ir_type_unset) const; - - /** - * Get the variable that is ultimately referenced by an r-value - */ - virtual ir_variable *variable_referenced() const - { - return this->var; - } - - virtual int precision() const - { - return this->var->data.precision; - } - - virtual ir_variable *whole_variable_referenced() - { - /* ir_dereference_variable objects always dereference the entire - * variable. However, if this dereference is dereferenced by anything - * else, the complete dereference chain is not a whole-variable - * dereference. This method should only be called on the top most - * ir_rvalue in a dereference chain. - */ - return this->var; - } - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - /** - * Object being dereferenced. - */ - ir_variable *var; -}; - - -class ir_dereference_array : public ir_dereference { -public: - ir_dereference_array(ir_rvalue *value, ir_rvalue *array_index); - - ir_dereference_array(ir_variable *var, ir_rvalue *array_index); - - virtual ir_dereference_array *clone(void *mem_ctx, - struct hash_table *) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - virtual bool equals(const ir_instruction *ir, - enum ir_node_type ignore = ir_type_unset) const; - - /** - * Get the variable that is ultimately referenced by an r-value - */ - virtual ir_variable *variable_referenced() const - { - return this->array->variable_referenced(); - } - - virtual int precision() const - { - ir_dereference *deref = this->array->as_dereference(); - - if (deref == NULL) - return GLSL_PRECISION_NONE; - else - return deref->precision(); - } - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - ir_rvalue *array; - ir_rvalue *array_index; - -private: - void set_array(ir_rvalue *value); -}; - - -class ir_dereference_record : public ir_dereference { -public: - ir_dereference_record(ir_rvalue *value, const char *field); - - ir_dereference_record(ir_variable *var, const char *field); - - virtual ir_dereference_record *clone(void *mem_ctx, - struct hash_table *) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - /** - * Get the variable that is ultimately referenced by an r-value - */ - virtual ir_variable *variable_referenced() const - { - return this->record->variable_referenced(); - } - - virtual int precision() const - { - glsl_struct_field *field = record->type->fields.structure + field_idx; - - return field->precision; - } - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - ir_rvalue *record; - int field_idx; -}; - - -/** - * Data stored in an ir_constant - */ -union ir_constant_data { - unsigned u[16]; - int i[16]; - float f[16]; - bool b[16]; - double d[16]; - uint16_t f16[16]; - uint16_t u16[16]; - int16_t i16[16]; - uint64_t u64[16]; - int64_t i64[16]; -}; - - -class ir_constant : public ir_rvalue { -public: - ir_constant(const struct glsl_type *type, const ir_constant_data *data); - ir_constant(bool b, unsigned vector_elements=1); - ir_constant(int16_t i16, unsigned vector_elements=1); - ir_constant(uint16_t u16, unsigned vector_elements=1); - ir_constant(unsigned int u, unsigned vector_elements=1); - ir_constant(int i, unsigned vector_elements=1); - ir_constant(float16_t f16, unsigned vector_elements=1); - ir_constant(float f, unsigned vector_elements=1); - ir_constant(double d, unsigned vector_elements=1); - ir_constant(uint64_t u64, unsigned vector_elements=1); - ir_constant(int64_t i64, unsigned vector_elements=1); - - /** - * Construct an ir_constant from a list of ir_constant values - */ - ir_constant(const struct glsl_type *type, exec_list *values); - - /** - * Construct an ir_constant from a scalar component of another ir_constant - * - * The new \c ir_constant inherits the type of the component from the - * source constant. - * - * \note - * In the case of a matrix constant, the new constant is a scalar, \b not - * a vector. - */ - ir_constant(const ir_constant *c, unsigned i); - - /** - * Return a new ir_constant of the specified type containing all zeros. - */ - static ir_constant *zero(void *mem_ctx, const glsl_type *type); - - virtual ir_constant *clone(void *mem_ctx, struct hash_table *) const; - - virtual ir_constant *constant_expression_value(void *mem_ctx, - struct hash_table *variable_context = NULL); - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - virtual bool equals(const ir_instruction *ir, - enum ir_node_type ignore = ir_type_unset) const; - - /** - * Get a particular component of a constant as a specific type - * - * This is useful, for example, to get a value from an integer constant - * as a float or bool. This appears frequently when constructors are - * called with all constant parameters. - */ - /*@{*/ - bool get_bool_component(unsigned i) const; - float get_float_component(unsigned i) const; - uint16_t get_float16_component(unsigned i) const; - double get_double_component(unsigned i) const; - int16_t get_int16_component(unsigned i) const; - uint16_t get_uint16_component(unsigned i) const; - int get_int_component(unsigned i) const; - unsigned get_uint_component(unsigned i) const; - int64_t get_int64_component(unsigned i) const; - uint64_t get_uint64_component(unsigned i) const; - /*@}*/ - - ir_constant *get_array_element(unsigned i) const; - - ir_constant *get_record_field(int idx); - - /** - * Copy the values on another constant at a given offset. - * - * The offset is ignored for array or struct copies, it's only for - * scalars or vectors into vectors or matrices. - * - * With identical types on both sides and zero offset it's clone() - * without creating a new object. - */ - - void copy_offset(ir_constant *src, int offset); - - /** - * Copy the values on another constant at a given offset and - * following an assign-like mask. - * - * The mask is ignored for scalars. - * - * Note that this function only handles what assign can handle, - * i.e. at most a vector as source and a column of a matrix as - * destination. - */ - - void copy_masked_offset(ir_constant *src, int offset, unsigned int mask); - - /** - * Determine whether a constant has the same value as another constant - * - * \sa ir_constant::is_zero, ir_constant::is_one, - * ir_constant::is_negative_one - */ - bool has_value(const ir_constant *) const; - - /** - * Return true if this ir_constant represents the given value. - * - * For vectors, this checks that each component is the given value. - */ - virtual bool is_value(float f, int i) const; - virtual bool is_zero() const; - virtual bool is_one() const; - virtual bool is_negative_one() const; - - /** - * Return true for constants that could be stored as 16-bit unsigned values. - * - * Note that this will return true even for signed integer ir_constants, as - * long as the value is non-negative and fits in 16-bits. - */ - virtual bool is_uint16_constant() const; - - /** - * Value of the constant. - * - * The field used to back the values supplied by the constant is determined - * by the type associated with the \c ir_instruction. Constants may be - * scalars, vectors, or matrices. - */ - union ir_constant_data value; - - /* Array elements and structure fields */ - ir_constant **const_elements; - -private: - /** - * Parameterless constructor only used by the clone method - */ - ir_constant(void); -}; - -/** - * IR instruction to emit a vertex in a geometry shader. - */ -class ir_emit_vertex : public ir_instruction { -public: - ir_emit_vertex(ir_rvalue *stream) - : ir_instruction(ir_type_emit_vertex), - stream(stream) - { - assert(stream); - } - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_emit_vertex *clone(void *mem_ctx, struct hash_table *ht) const - { - return new(mem_ctx) ir_emit_vertex(this->stream->clone(mem_ctx, ht)); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - int stream_id() const - { - return stream->as_constant()->value.i[0]; - } - - ir_rvalue *stream; -}; - -/** - * IR instruction to complete the current primitive and start a new one in a - * geometry shader. - */ -class ir_end_primitive : public ir_instruction { -public: - ir_end_primitive(ir_rvalue *stream) - : ir_instruction(ir_type_end_primitive), - stream(stream) - { - assert(stream); - } - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_end_primitive *clone(void *mem_ctx, struct hash_table *ht) const - { - return new(mem_ctx) ir_end_primitive(this->stream->clone(mem_ctx, ht)); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); - - int stream_id() const - { - return stream->as_constant()->value.i[0]; - } - - ir_rvalue *stream; -}; - -/** - * IR instruction for tessellation control and compute shader barrier. - */ -class ir_barrier : public ir_instruction { -public: - ir_barrier() - : ir_instruction(ir_type_barrier) - { - } - - virtual void accept(ir_visitor *v) - { - v->visit(this); - } - - virtual ir_barrier *clone(void *mem_ctx, struct hash_table *) const - { - return new(mem_ctx) ir_barrier(); - } - - virtual ir_visitor_status accept(ir_hierarchical_visitor *); -}; - -/*@}*/ - -/** - * Apply a visitor to each IR node in a list - */ -void -visit_exec_list(exec_list *list, ir_visitor *visitor); - -/** - * Validate invariants on each IR node in a list - */ -void validate_ir_tree(exec_list *instructions); - -struct _mesa_glsl_parse_state; -struct gl_shader_program; - -/** - * Detect whether an unlinked shader contains static recursion - * - * If the list of instructions is determined to contain static recursion, - * \c _mesa_glsl_error will be called to emit error messages for each function - * that is in the recursion cycle. - */ -void -detect_recursion_unlinked(struct _mesa_glsl_parse_state *state, - exec_list *instructions); - -/** - * Detect whether a linked shader contains static recursion - * - * If the list of instructions is determined to contain static recursion, - * \c link_error_printf will be called to emit error messages for each function - * that is in the recursion cycle. In addition, - * \c gl_shader_program::LinkStatus will be set to false. - */ -void -detect_recursion_linked(struct gl_shader_program *prog, - exec_list *instructions); - -/** - * Make a clone of each IR instruction in a list - * - * \param in List of IR instructions that are to be cloned - * \param out List to hold the cloned instructions - */ -void -clone_ir_list(void *mem_ctx, exec_list *out, const exec_list *in); - -extern void -_mesa_glsl_initialize_variables(exec_list *instructions, - struct _mesa_glsl_parse_state *state); - -extern void -reparent_ir(exec_list *list, void *mem_ctx); - -extern char * -prototype_string(const glsl_type *return_type, const char *name, - exec_list *parameters); - -const char * -mode_string(const ir_variable *var); - -/** - * Built-in / reserved GL variables names start with "gl_" - */ -static inline bool -is_gl_identifier(const char *s) -{ - return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_'; -} - -extern "C" { -#endif /* __cplusplus */ - -extern void _mesa_print_ir(FILE *f, struct exec_list *instructions, - struct _mesa_glsl_parse_state *state); - -extern void -fprint_ir(FILE *f, const void *instruction); - -extern const struct gl_builtin_uniform_desc * -_mesa_glsl_get_builtin_uniform_desc(const char *name); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -unsigned -vertices_per_prim(GLenum prim); - -#endif /* IR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_array_refcount.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_array_refcount.cpp deleted file mode 100644 index 00afe4a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_array_refcount.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_array_refcount.cpp - * - * Provides a visitor which produces a list of variables referenced. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_array_refcount.h" -#include "../glsl_types.h" -#include "../../util/hash_table.h" - -ir_array_refcount_visitor::ir_array_refcount_visitor() - : last_array_deref(0), derefs(0), num_derefs(0), derefs_size(0) -{ - this->mem_ctx = ralloc_context(NULL); - this->ht = _mesa_pointer_hash_table_create(NULL); -} - -static void -free_entry(struct hash_entry *entry) -{ - ir_array_refcount_entry *ivre = (ir_array_refcount_entry *) entry->data; - delete ivre; -} - -ir_array_refcount_visitor::~ir_array_refcount_visitor() -{ - ralloc_free(this->mem_ctx); - _mesa_hash_table_destroy(this->ht, free_entry); -} - -ir_array_refcount_entry::ir_array_refcount_entry(ir_variable *var) - : var(var), is_referenced(false) -{ - num_bits = MAX2(1, var->type->arrays_of_arrays_size()); - bits = new BITSET_WORD[BITSET_WORDS(num_bits)]; - memset(bits, 0, BITSET_WORDS(num_bits) * sizeof(bits[0])); - - /* Count the "depth" of the arrays-of-arrays. */ - array_depth = 0; - for (const glsl_type *type = var->type; - type->is_array(); - type = type->fields.array) { - array_depth++; - } -} - - -ir_array_refcount_entry::~ir_array_refcount_entry() -{ - delete [] bits; -} - -ir_array_refcount_entry * -ir_array_refcount_visitor::get_variable_entry(ir_variable *var) -{ - assert(var); - - struct hash_entry *e = _mesa_hash_table_search(this->ht, var); - if (e) - return (ir_array_refcount_entry *)e->data; - - ir_array_refcount_entry *entry = new ir_array_refcount_entry(var); - _mesa_hash_table_insert(this->ht, var, entry); - - return entry; -} - - -array_deref_range * -ir_array_refcount_visitor::get_array_deref() -{ - if ((num_derefs + 1) * sizeof(array_deref_range) > derefs_size) { - void *ptr = reralloc_size(mem_ctx, derefs, derefs_size + 4096); - - if (ptr == NULL) - return NULL; - - derefs_size += 4096; - derefs = (array_deref_range *)ptr; - } - - array_deref_range *d = &derefs[num_derefs]; - num_derefs++; - - return d; -} - -ir_visitor_status -ir_array_refcount_visitor::visit_enter(ir_dereference_array *ir) -{ - /* It could also be a vector or a matrix. Individual elements of vectors - * are natrices are not tracked, so bail. - */ - if (!ir->array->type->is_array()) - return visit_continue; - - /* If this array dereference is a child of an array dereference that was - * already visited, just continue on. Otherwise, for an arrays-of-arrays - * dereference like x[1][2][3][4], we'd process the [1][2][3][4] sequence, - * the [1][2][3] sequence, the [1][2] sequence, and the [1] sequence. This - * ensures that we only process the full sequence. - */ - if (last_array_deref && last_array_deref->array == ir) { - last_array_deref = ir; - return visit_continue; - } - - last_array_deref = ir; - - num_derefs = 0; - - ir_rvalue *rv = ir; - while (rv->ir_type == ir_type_dereference_array) { - ir_dereference_array *const deref = rv->as_dereference_array(); - - assert(deref != NULL); - assert(deref->array->type->is_array()); - - ir_rvalue *const array = deref->array; - const ir_constant *const idx = deref->array_index->as_constant(); - array_deref_range *const dr = get_array_deref(); - - dr->size = array->type->array_size(); - - if (idx != NULL) { - dr->index = idx->get_int_component(0); - } else { - /* An unsized array can occur at the end of an SSBO. We can't track - * accesses to such an array, so bail. - */ - if (array->type->array_size() == 0) - return visit_continue; - - dr->index = dr->size; - } - - rv = array; - } - - ir_dereference_variable *const var_deref = rv->as_dereference_variable(); - - /* If the array being dereferenced is not a variable, bail. At the very - * least, ir_constant and ir_dereference_record are possible. - */ - if (var_deref == NULL) - return visit_continue; - - ir_array_refcount_entry *const entry = - this->get_variable_entry(var_deref->var); - - if (entry == NULL) - return visit_stop; - - link_util_mark_array_elements_referenced(derefs, num_derefs, - entry->array_depth, - entry->bits); - - return visit_continue; -} - - -ir_visitor_status -ir_array_refcount_visitor::visit(ir_dereference_variable *ir) -{ - ir_variable *const var = ir->variable_referenced(); - ir_array_refcount_entry *entry = this->get_variable_entry(var); - - entry->is_referenced = true; - - return visit_continue; -} - - -ir_visitor_status -ir_array_refcount_visitor::visit_enter(ir_function_signature *ir) -{ - /* We don't want to descend into the function parameters and - * dead-code eliminate them, so just accept the body here. - */ - visit_list_elements(this, &ir->body); - return visit_continue_with_parent; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_array_refcount.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_array_refcount.h deleted file mode 100644 index a428aac..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_array_refcount.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_array_refcount.h - * - * Provides a visitor which produces a list of variables referenced. - */ - -#ifndef GLSL_IR_ARRAY_REFCOUNT_H -#define GLSL_IR_ARRAY_REFCOUNT_H - -#include "ir.h" -#include "ir_visitor.h" -#include "linker_util.h" -#include "../glsl_types.h" -#include "../../util/bitset.h" - -class ir_array_refcount_entry -{ -public: - ir_array_refcount_entry(ir_variable *var); - ~ir_array_refcount_entry(); - - ir_variable *var; /* The key: the variable's pointer. */ - - /** Has the variable been referenced? */ - bool is_referenced; - - /** Count of nested arrays in the type. */ - unsigned array_depth; - - /** Set of bit-flags to note which array elements have been accessed. */ - BITSET_WORD *bits; - - /** Has a linearized array index been referenced? */ - bool is_linearized_index_referenced(unsigned linearized_index) const - { - assert(bits != 0); - assert(linearized_index <= num_bits); - - return BITSET_TEST(bits, linearized_index); - } - -private: - - /** - * Total number of bits referenced by \c bits. - * - * Also the total number of array(s-of-arrays) elements of \c var. - */ - unsigned num_bits; - - friend class array_refcount_test; -}; - -class ir_array_refcount_visitor : public ir_hierarchical_visitor { -public: - ir_array_refcount_visitor(void); - ~ir_array_refcount_visitor(void); - - virtual ir_visitor_status visit(ir_dereference_variable *); - - virtual ir_visitor_status visit_enter(ir_function_signature *); - virtual ir_visitor_status visit_enter(ir_dereference_array *); - - /** - * Find variable in the hash table, and insert it if not present - */ - ir_array_refcount_entry *get_variable_entry(ir_variable *var); - - /** - * Hash table mapping ir_variable to ir_array_refcount_entry. - */ - struct hash_table *ht; - - void *mem_ctx; - -private: - /** Get an array_deref_range element from private tracking. */ - array_deref_range *get_array_deref(); - - /** - * Last ir_dereference_array that was visited - * - * Used to prevent some redundant calculations. - * - * \sa ::visit_enter(ir_dereference_array *) - */ - ir_dereference_array *last_array_deref; - - /** - * \name array_deref_range tracking - */ - /*@{*/ - /** Currently allocated block of derefs. */ - array_deref_range *derefs; - - /** Number of derefs used in current processing. */ - unsigned num_derefs; - - /** Size of the derefs buffer in bytes. */ - unsigned derefs_size; - /*@}*/ -}; - -#endif /* GLSL_IR_ARRAY_REFCOUNT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_basic_block.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_basic_block.cpp deleted file mode 100644 index fa1aeb7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_basic_block.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_basic_block.cpp - * - * Basic block analysis of instruction streams. - */ - -#include "ir.h" -#include "ir_basic_block.h" - -/** - * Calls a user function for every basic block in the instruction stream. - * - * Basic block analysis is pretty easy in our IR thanks to the lack of - * unstructured control flow. We've got: - * - * ir_loop (for () {}, while () {}, do {} while ()) - * ir_loop_jump ( - * ir_if () {} - * ir_return - * ir_call() - * - * Note that the basic blocks returned by this don't encompass all - * operations performed by the program -- for example, if conditions - * don't get returned, nor do the assignments that will be generated - * for ir_call parameters. - */ -void call_for_basic_blocks(exec_list *instructions, - void (*callback)(ir_instruction *first, - ir_instruction *last, - void *data), - void *data) -{ - ir_instruction *leader = NULL; - ir_instruction *last = NULL; - - foreach_in_list(ir_instruction, ir, instructions) { - ir_if *ir_if; - ir_loop *ir_loop; - ir_function *ir_function; - - if (!leader) - leader = ir; - - if ((ir_if = ir->as_if())) { - callback(leader, ir, data); - leader = NULL; - - call_for_basic_blocks(&ir_if->then_instructions, callback, data); - call_for_basic_blocks(&ir_if->else_instructions, callback, data); - } else if ((ir_loop = ir->as_loop())) { - callback(leader, ir, data); - leader = NULL; - call_for_basic_blocks(&ir_loop->body_instructions, callback, data); - } else if (ir->as_jump() || ir->as_call()) { - callback(leader, ir, data); - leader = NULL; - } else if ((ir_function = ir->as_function())) { - /* A function definition doesn't interrupt our basic block - * since execution doesn't go into it. We should process the - * bodies of its signatures for BBs, though. - * - * Note that we miss an opportunity for producing more - * maximal BBs between the instructions that precede main() - * and the body of main(). Perhaps those instructions ought - * to live inside of main(). - */ - foreach_in_list(ir_function_signature, ir_sig, &ir_function->signatures) { - call_for_basic_blocks(&ir_sig->body, callback, data); - } - } - last = ir; - } - if (leader) { - callback(leader, last, data); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_basic_block.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_basic_block.h deleted file mode 100644 index 3d32e4e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_basic_block.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_IR_BASIC_BLOCK_H -#define GLSL_IR_BASIC_BLOCK_H - -void call_for_basic_blocks(exec_list *instructions, - void (*callback)(ir_instruction *first, - ir_instruction *last, - void *data), - void *data); - -#endif /* GLSL_IR_BASIC_BLOCK_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder.cpp deleted file mode 100644 index 92034dc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder.cpp +++ /dev/null @@ -1,635 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir_builder.h" -#include "../../mesa/program/prog_instruction.h" - -using namespace ir_builder; - -namespace ir_builder { - -void -ir_factory::emit(ir_instruction *ir) -{ - instructions->push_tail(ir); -} - -ir_variable * -ir_factory::make_temp(const glsl_type *type, const char *name) -{ - ir_variable *var; - - var = new(mem_ctx) ir_variable(type, name, ir_var_temporary); - emit(var); - - return var; -} - -ir_assignment * -assign(deref lhs, operand rhs) -{ - return assign(lhs, rhs, (1 << lhs.val->type->vector_elements) - 1); -} - -ir_assignment * -assign(deref lhs, operand rhs, int writemask) -{ - void *mem_ctx = ralloc_parent(lhs.val); - - ir_assignment *assign = new(mem_ctx) ir_assignment(lhs.val, - rhs.val, - writemask); - - return assign; -} - -ir_return * -ret(operand retval) -{ - void *mem_ctx = ralloc_parent(retval.val); - return new(mem_ctx) ir_return(retval.val); -} - -ir_swizzle * -swizzle(operand a, int swizzle, int components) -{ - void *mem_ctx = ralloc_parent(a.val); - - return new(mem_ctx) ir_swizzle(a.val, - GET_SWZ(swizzle, 0), - GET_SWZ(swizzle, 1), - GET_SWZ(swizzle, 2), - GET_SWZ(swizzle, 3), - components); -} - -ir_swizzle * -swizzle_for_size(operand a, unsigned components) -{ - void *mem_ctx = ralloc_parent(a.val); - - if (a.val->type->vector_elements < components) - components = a.val->type->vector_elements; - - unsigned s[4] = { 0, 1, 2, 3 }; - for (int i = components; i < 4; i++) - s[i] = components - 1; - - return new(mem_ctx) ir_swizzle(a.val, s, components); -} - -ir_swizzle * -swizzle_xxxx(operand a) -{ - return swizzle(a, SWIZZLE_XXXX, 4); -} - -ir_swizzle * -swizzle_yyyy(operand a) -{ - return swizzle(a, SWIZZLE_YYYY, 4); -} - -ir_swizzle * -swizzle_zzzz(operand a) -{ - return swizzle(a, SWIZZLE_ZZZZ, 4); -} - -ir_swizzle * -swizzle_wwww(operand a) -{ - return swizzle(a, SWIZZLE_WWWW, 4); -} - -ir_swizzle * -swizzle_x(operand a) -{ - return swizzle(a, SWIZZLE_XXXX, 1); -} - -ir_swizzle * -swizzle_y(operand a) -{ - return swizzle(a, SWIZZLE_YYYY, 1); -} - -ir_swizzle * -swizzle_z(operand a) -{ - return swizzle(a, SWIZZLE_ZZZZ, 1); -} - -ir_swizzle * -swizzle_w(operand a) -{ - return swizzle(a, SWIZZLE_WWWW, 1); -} - -ir_swizzle * -swizzle_xy(operand a) -{ - return swizzle(a, SWIZZLE_XYZW, 2); -} - -ir_swizzle * -swizzle_xyz(operand a) -{ - return swizzle(a, SWIZZLE_XYZW, 3); -} - -ir_swizzle * -swizzle_xyzw(operand a) -{ - return swizzle(a, SWIZZLE_XYZW, 4); -} - -ir_expression * -expr(ir_expression_operation op, operand a) -{ - void *mem_ctx = ralloc_parent(a.val); - - return new(mem_ctx) ir_expression(op, a.val); -} - -ir_expression * -expr(ir_expression_operation op, operand a, operand b) -{ - void *mem_ctx = ralloc_parent(a.val); - - return new(mem_ctx) ir_expression(op, a.val, b.val); -} - -ir_expression * -expr(ir_expression_operation op, operand a, operand b, operand c) -{ - void *mem_ctx = ralloc_parent(a.val); - - return new(mem_ctx) ir_expression(op, a.val, b.val, c.val); -} - -ir_expression *add(operand a, operand b) -{ - return expr(ir_binop_add, a, b); -} - -ir_expression *sub(operand a, operand b) -{ - return expr(ir_binop_sub, a, b); -} - -ir_expression *min2(operand a, operand b) -{ - return expr(ir_binop_min, a, b); -} - -ir_expression *max2(operand a, operand b) -{ - return expr(ir_binop_max, a, b); -} - -ir_expression *mul(operand a, operand b) -{ - return expr(ir_binop_mul, a, b); -} - -ir_expression *imul_high(operand a, operand b) -{ - return expr(ir_binop_imul_high, a, b); -} - -ir_expression *div(operand a, operand b) -{ - return expr(ir_binop_div, a, b); -} - -ir_expression *carry(operand a, operand b) -{ - return expr(ir_binop_carry, a, b); -} - -ir_expression *borrow(operand a, operand b) -{ - return expr(ir_binop_borrow, a, b); -} - -ir_expression *trunc(operand a) -{ - return expr(ir_unop_trunc, a); -} - -ir_expression *round_even(operand a) -{ - return expr(ir_unop_round_even, a); -} - -ir_expression *fract(operand a) -{ - return expr(ir_unop_fract, a); -} - -/* dot for vectors, mul for scalars */ -ir_expression *dot(operand a, operand b) -{ - assert(a.val->type == b.val->type); - - if (a.val->type->vector_elements == 1) - return expr(ir_binop_mul, a, b); - - return expr(ir_binop_dot, a, b); -} - -ir_expression* -clamp(operand a, operand b, operand c) -{ - return expr(ir_binop_min, expr(ir_binop_max, a, b), c); -} - -ir_expression * -saturate(operand a) -{ - return expr(ir_unop_saturate, a); -} - -ir_expression * -abs(operand a) -{ - return expr(ir_unop_abs, a); -} - -ir_expression * -neg(operand a) -{ - return expr(ir_unop_neg, a); -} - -ir_expression * -sin(operand a) -{ - return expr(ir_unop_sin, a); -} - -ir_expression * -cos(operand a) -{ - return expr(ir_unop_cos, a); -} - -ir_expression * -exp(operand a) -{ - return expr(ir_unop_exp, a); -} - -ir_expression * -rcp(operand a) -{ - return expr(ir_unop_rcp, a); -} - -ir_expression * -rsq(operand a) -{ - return expr(ir_unop_rsq, a); -} - -ir_expression * -sqrt(operand a) -{ - return expr(ir_unop_sqrt, a); -} - -ir_expression * -log(operand a) -{ - return expr(ir_unop_log, a); -} - -ir_expression * -sign(operand a) -{ - return expr(ir_unop_sign, a); -} - -ir_expression * -subr_to_int(operand a) -{ - return expr(ir_unop_subroutine_to_int, a); -} - -ir_expression* -equal(operand a, operand b) -{ - return expr(ir_binop_equal, a, b); -} - -ir_expression* -nequal(operand a, operand b) -{ - return expr(ir_binop_nequal, a, b); -} - -ir_expression* -less(operand a, operand b) -{ - return expr(ir_binop_less, a, b); -} - -ir_expression* -greater(operand a, operand b) -{ - return expr(ir_binop_less, b, a); -} - -ir_expression* -lequal(operand a, operand b) -{ - return expr(ir_binop_gequal, b, a); -} - -ir_expression* -gequal(operand a, operand b) -{ - return expr(ir_binop_gequal, a, b); -} - -ir_expression* -logic_not(operand a) -{ - return expr(ir_unop_logic_not, a); -} - -ir_expression* -logic_and(operand a, operand b) -{ - return expr(ir_binop_logic_and, a, b); -} - -ir_expression* -logic_or(operand a, operand b) -{ - return expr(ir_binop_logic_or, a, b); -} - -ir_expression* -bit_not(operand a) -{ - return expr(ir_unop_bit_not, a); -} - -ir_expression* -bit_and(operand a, operand b) -{ - return expr(ir_binop_bit_and, a, b); -} - -ir_expression* -bit_or(operand a, operand b) -{ - return expr(ir_binop_bit_or, a, b); -} - -ir_expression* -bit_xor(operand a, operand b) -{ - return expr(ir_binop_bit_xor, a, b); -} - -ir_expression* -lshift(operand a, operand b) -{ - return expr(ir_binop_lshift, a, b); -} - -ir_expression* -rshift(operand a, operand b) -{ - return expr(ir_binop_rshift, a, b); -} - -ir_expression* -f2i(operand a) -{ - return expr(ir_unop_f2i, a); -} - -ir_expression* -bitcast_f2i(operand a) -{ - return expr(ir_unop_bitcast_f2i, a); -} - -ir_expression* -i2f(operand a) -{ - return expr(ir_unop_i2f, a); -} - -ir_expression* -bitcast_i2f(operand a) -{ - return expr(ir_unop_bitcast_i2f, a); -} - -ir_expression* -i2u(operand a) -{ - return expr(ir_unop_i2u, a); -} - -ir_expression* -u2i(operand a) -{ - return expr(ir_unop_u2i, a); -} - -ir_expression* -f2u(operand a) -{ - return expr(ir_unop_f2u, a); -} - -ir_expression* -bitcast_f2u(operand a) -{ - return expr(ir_unop_bitcast_f2u, a); -} - -ir_expression* -u2f(operand a) -{ - return expr(ir_unop_u2f, a); -} - -ir_expression* -bitcast_u2f(operand a) -{ - return expr(ir_unop_bitcast_u2f, a); -} - -ir_expression* -i2b(operand a) -{ - return expr(ir_unop_i2b, a); -} - -ir_expression* -b2i(operand a) -{ - return expr(ir_unop_b2i, a); -} - -ir_expression * -f2b(operand a) -{ - return expr(ir_unop_f2b, a); -} - -ir_expression * -b2f(operand a) -{ - return expr(ir_unop_b2f, a); -} - -ir_expression* -bitcast_d2i64(operand a) -{ - return expr(ir_unop_bitcast_d2i64, a); -} - -ir_expression* -bitcast_d2u64(operand a) -{ - return expr(ir_unop_bitcast_d2u64, a); -} - -ir_expression* -bitcast_i642d(operand a) -{ - return expr(ir_unop_bitcast_i642d, a); -} - -ir_expression* -bitcast_u642d(operand a) -{ - return expr(ir_unop_bitcast_u642d, a); -} - -ir_expression * -interpolate_at_centroid(operand a) -{ - return expr(ir_unop_interpolate_at_centroid, a); -} - -ir_expression * -interpolate_at_offset(operand a, operand b) -{ - return expr(ir_binop_interpolate_at_offset, a, b); -} - -ir_expression * -interpolate_at_sample(operand a, operand b) -{ - return expr(ir_binop_interpolate_at_sample, a, b); -} - -ir_expression * -f2d(operand a) -{ - return expr(ir_unop_f2d, a); -} - -ir_expression * -i2d(operand a) -{ - return expr(ir_unop_i2d, a); -} - -ir_expression * -u2d(operand a) -{ - return expr(ir_unop_u2d, a); -} - -ir_expression * -fma(operand a, operand b, operand c) -{ - return expr(ir_triop_fma, a, b, c); -} - -ir_expression * -lrp(operand x, operand y, operand a) -{ - return expr(ir_triop_lrp, x, y, a); -} - -ir_expression * -csel(operand a, operand b, operand c) -{ - return expr(ir_triop_csel, a, b, c); -} - -ir_expression * -bitfield_extract(operand a, operand b, operand c) -{ - return expr(ir_triop_bitfield_extract, a, b, c); -} - -ir_expression * -bitfield_insert(operand a, operand b, operand c, operand d) -{ - void *mem_ctx = ralloc_parent(a.val); - return new(mem_ctx) ir_expression(ir_quadop_bitfield_insert, - a.val->type, a.val, b.val, c.val, d.val); -} - -ir_if* -if_tree(operand condition, - ir_instruction *then_branch) -{ - assert(then_branch != NULL); - - void *mem_ctx = ralloc_parent(condition.val); - - ir_if *result = new(mem_ctx) ir_if(condition.val); - result->then_instructions.push_tail(then_branch); - return result; -} - -ir_if* -if_tree(operand condition, - ir_instruction *then_branch, - ir_instruction *else_branch) -{ - assert(then_branch != NULL); - assert(else_branch != NULL); - - void *mem_ctx = ralloc_parent(condition.val); - - ir_if *result = new(mem_ctx) ir_if(condition.val); - result->then_instructions.push_tail(then_branch); - result->else_instructions.push_tail(else_branch); - return result; -} - -} /* namespace ir_builder */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder.h deleted file mode 100644 index 0fb8242..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder.h +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_BUILDER_H -#define IR_BUILDER_H - -#include "ir.h" - -namespace ir_builder { - -#ifndef WRITEMASK_X -enum writemask { - WRITEMASK_X = 0x1, - WRITEMASK_Y = 0x2, - WRITEMASK_Z = 0x4, - WRITEMASK_W = 0x8, -}; -#endif - -/** - * This little class exists to let the helper expression generators - * take either an ir_rvalue * or an ir_variable * to be automatically - * dereferenced, while still providing compile-time type checking. - * - * You don't have to explicitly call the constructor -- C++ will see - * that you passed an ir_variable, and silently call the - * operand(ir_variable *var) constructor behind your back. - */ -class operand { -public: - operand(ir_rvalue *val) - : val(val) - { - } - - operand(ir_variable *var) - { - void *mem_ctx = ralloc_parent(var); - val = new(mem_ctx) ir_dereference_variable(var); - } - - ir_rvalue *val; -}; - -/** Automatic generator for ir_dereference_variable on assignment LHS. - * - * \sa operand - */ -class deref { -public: - deref(ir_dereference *val) - : val(val) - { - } - - deref(ir_variable *var) - { - void *mem_ctx = ralloc_parent(var); - val = new(mem_ctx) ir_dereference_variable(var); - } - - - ir_dereference *val; -}; - -class ir_factory { -public: - ir_factory(exec_list *instructions = NULL, void *mem_ctx = NULL) - : instructions(instructions), - mem_ctx(mem_ctx) - { - return; - } - - void emit(ir_instruction *ir); - ir_variable *make_temp(const glsl_type *type, const char *name); - - ir_constant* - constant(float f) - { - return new(mem_ctx) ir_constant(f); - } - - ir_constant* - constant(int i) - { - return new(mem_ctx) ir_constant(i); - } - - ir_constant* - constant(unsigned u) - { - return new(mem_ctx) ir_constant(u); - } - - ir_constant* - constant(bool b) - { - return new(mem_ctx) ir_constant(b); - } - - exec_list *instructions; - void *mem_ctx; -}; - -ir_assignment *assign(deref lhs, operand rhs); -ir_assignment *assign(deref lhs, operand rhs, int writemask); - -ir_return *ret(operand retval); - -ir_expression *expr(ir_expression_operation op, operand a); -ir_expression *expr(ir_expression_operation op, operand a, operand b); -ir_expression *expr(ir_expression_operation op, operand a, operand b, operand c); -ir_expression *add(operand a, operand b); -ir_expression *sub(operand a, operand b); -ir_expression *mul(operand a, operand b); -ir_expression *imul_high(operand a, operand b); -ir_expression *div(operand a, operand b); -ir_expression *carry(operand a, operand b); -ir_expression *borrow(operand a, operand b); -ir_expression *trunc(operand a); -ir_expression *round_even(operand a); -ir_expression *fract(operand a); -ir_expression *dot(operand a, operand b); -ir_expression *clamp(operand a, operand b, operand c); -ir_expression *saturate(operand a); -ir_expression *abs(operand a); -ir_expression *neg(operand a); -ir_expression *sin(operand a); -ir_expression *cos(operand a); -ir_expression *exp(operand a); -ir_expression *rcp(operand a); -ir_expression *rsq(operand a); -ir_expression *sqrt(operand a); -ir_expression *log(operand a); -ir_expression *sign(operand a); - -ir_expression *subr_to_int(operand a); -ir_expression *equal(operand a, operand b); -ir_expression *nequal(operand a, operand b); -ir_expression *less(operand a, operand b); -ir_expression *greater(operand a, operand b); -ir_expression *lequal(operand a, operand b); -ir_expression *gequal(operand a, operand b); - -ir_expression *logic_not(operand a); -ir_expression *logic_and(operand a, operand b); -ir_expression *logic_or(operand a, operand b); - -ir_expression *bit_not(operand a); -ir_expression *bit_or(operand a, operand b); -ir_expression *bit_and(operand a, operand b); -ir_expression *bit_xor(operand a, operand b); -ir_expression *lshift(operand a, operand b); -ir_expression *rshift(operand a, operand b); - -ir_expression *f2i(operand a); -ir_expression *bitcast_f2i(operand a); -ir_expression *i2f(operand a); -ir_expression *bitcast_i2f(operand a); -ir_expression *f2u(operand a); -ir_expression *bitcast_f2u(operand a); -ir_expression *u2f(operand a); -ir_expression *bitcast_u2f(operand a); -ir_expression *i2u(operand a); -ir_expression *u2i(operand a); -ir_expression *b2i(operand a); -ir_expression *i2b(operand a); -ir_expression *f2b(operand a); -ir_expression *b2f(operand a); - -ir_expression *f2d(operand a); -ir_expression *i2d(operand a); -ir_expression *u2d(operand a); - -ir_expression *bitcast_d2i64(operand a); -ir_expression *bitcast_d2u64(operand a); - -ir_expression *bitcast_i642d(operand a); -ir_expression *bitcast_u642d(operand a); - -ir_expression *min2(operand a, operand b); -ir_expression *max2(operand a, operand b); - -ir_expression *interpolate_at_centroid(operand a); -ir_expression *interpolate_at_offset(operand a, operand b); -ir_expression *interpolate_at_sample(operand a, operand b); - -ir_expression *fma(operand a, operand b, operand c); -ir_expression *lrp(operand x, operand y, operand a); -ir_expression *csel(operand a, operand b, operand c); -ir_expression *bitfield_extract(operand a, operand b, operand c); -ir_expression *bitfield_insert(operand a, operand b, operand c, operand d); - -ir_swizzle *swizzle(operand a, int swizzle, int components); -/** - * Swizzle away later components, but preserve the ordering. - */ -ir_swizzle *swizzle_for_size(operand a, unsigned components); - -ir_swizzle *swizzle_xxxx(operand a); -ir_swizzle *swizzle_yyyy(operand a); -ir_swizzle *swizzle_zzzz(operand a); -ir_swizzle *swizzle_wwww(operand a); -ir_swizzle *swizzle_x(operand a); -ir_swizzle *swizzle_y(operand a); -ir_swizzle *swizzle_z(operand a); -ir_swizzle *swizzle_w(operand a); -ir_swizzle *swizzle_xy(operand a); -ir_swizzle *swizzle_xyz(operand a); -ir_swizzle *swizzle_xyzw(operand a); - -ir_if *if_tree(operand condition, - ir_instruction *then_branch); -ir_if *if_tree(operand condition, - ir_instruction *then_branch, - ir_instruction *else_branch); - -} /* namespace ir_builder */ - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp deleted file mode 100644 index dbb4da5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp +++ /dev/null @@ -1,775 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include /* for PRIx64 macro */ -#include "ir.h" -#include "ir_hierarchical_visitor.h" -#include "ir_builder_print_visitor.h" -#include "../glsl_types.h" -#include "glsl_parser_extras.h" -#include "../../util/macros.h" -#include "../../util/hash_table.h" -#include "../../util/u_string.h" - -class ir_builder_print_visitor : public ir_hierarchical_visitor { -public: - ir_builder_print_visitor(FILE *f); - virtual ~ir_builder_print_visitor(); - - void indent(void); - - virtual ir_visitor_status visit(class ir_variable *); - virtual ir_visitor_status visit(class ir_dereference_variable *); - virtual ir_visitor_status visit(class ir_constant *); - virtual ir_visitor_status visit(class ir_loop_jump *); - - virtual ir_visitor_status visit_enter(class ir_if *); - - virtual ir_visitor_status visit_enter(class ir_loop *); - virtual ir_visitor_status visit_leave(class ir_loop *); - - virtual ir_visitor_status visit_enter(class ir_function_signature *); - virtual ir_visitor_status visit_leave(class ir_function_signature *); - - virtual ir_visitor_status visit_enter(class ir_expression *); - - virtual ir_visitor_status visit_enter(class ir_assignment *); - virtual ir_visitor_status visit_leave(class ir_assignment *); - - virtual ir_visitor_status visit_leave(class ir_call *); - virtual ir_visitor_status visit_leave(class ir_swizzle *); - virtual ir_visitor_status visit_leave(class ir_return *); - - virtual ir_visitor_status visit_enter(ir_texture *ir); - -private: - void print_with_indent(const char *fmt, ...); - void print_without_indent(const char *fmt, ...); - - void print_without_declaration(const ir_rvalue *ir); - void print_without_declaration(const ir_constant *ir); - void print_without_declaration(const ir_dereference_variable *ir); - void print_without_declaration(const ir_swizzle *ir); - void print_without_declaration(const ir_expression *ir); - - unsigned next_ir_index; - - /** - * Mapping from ir_instruction * -> index used in the generated C code - * variable name. - */ - hash_table *index_map; - - FILE *f; - - int indentation; -}; - -/* An operand is "simple" if it can be compactly printed on one line. - */ -static bool -is_simple_operand(const ir_rvalue *ir, unsigned depth = 1) -{ - if (depth == 0) - return false; - - switch (ir->ir_type) { - case ir_type_dereference_variable: - return true; - - case ir_type_constant: { - if (ir->type == glsl_type::uint_type || - ir->type == glsl_type::int_type || - ir->type == glsl_type::float_type || - ir->type == glsl_type::bool_type) - return true; - - const ir_constant *const c = (ir_constant *) ir; - ir_constant_data all_zero; - memset(&all_zero, 0, sizeof(all_zero)); - - return memcmp(&c->value, &all_zero, sizeof(all_zero)) == 0; - } - - case ir_type_swizzle: { - const ir_swizzle *swiz = (ir_swizzle *) ir; - return swiz->mask.num_components == 1 && - is_simple_operand(swiz->val, depth); - } - - case ir_type_expression: { - const ir_expression *expr = (ir_expression *) ir; - - for (unsigned i = 0; i < expr->num_operands; i++) { - if (!is_simple_operand(expr->operands[i], depth - 1)) - return false; - } - - return true; - } - - default: - return false; - } -} - -void -_mesa_print_builder_for_ir(FILE *f, exec_list *instructions) -{ - ir_builder_print_visitor v(f); - v.run(instructions); -} - -ir_builder_print_visitor::ir_builder_print_visitor(FILE *f) - : next_ir_index(1), f(f), indentation(0) -{ - index_map = _mesa_pointer_hash_table_create(NULL); -} - -ir_builder_print_visitor::~ir_builder_print_visitor() -{ - _mesa_hash_table_destroy(index_map, NULL); -} - -void ir_builder_print_visitor::indent(void) -{ - for (int i = 0; i < indentation; i++) - fprintf(f, " "); -} - -void -ir_builder_print_visitor::print_with_indent(const char *fmt, ...) -{ - va_list ap; - - indent(); - - va_start(ap, fmt); - vfprintf(f, fmt, ap); - va_end(ap); -} - -void -ir_builder_print_visitor::print_without_indent(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - vfprintf(f, fmt, ap); - va_end(ap); -} - -void -ir_builder_print_visitor::print_without_declaration(const ir_rvalue *ir) -{ - switch (ir->ir_type) { - case ir_type_dereference_variable: - print_without_declaration((ir_dereference_variable *) ir); - break; - case ir_type_constant: - print_without_declaration((ir_constant *) ir); - break; - case ir_type_swizzle: - print_without_declaration((ir_swizzle *) ir); - break; - case ir_type_expression: - print_without_declaration((ir_expression *) ir); - break; - default: - unreachable("Invalid IR type."); - } -} - -ir_visitor_status -ir_builder_print_visitor::visit(ir_variable *ir) -{ - const unsigned my_index = next_ir_index++; - - _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index); - - const char *mode_str; - switch (ir->data.mode) { - case ir_var_auto: mode_str = "ir_var_auto"; break; - case ir_var_uniform: mode_str = "ir_var_uniform"; break; - case ir_var_shader_storage: mode_str = "ir_var_shader_storage"; break; - case ir_var_shader_shared: mode_str = "ir_var_shader_shared"; break; - case ir_var_shader_in: mode_str = "ir_var_shader_in"; break; - case ir_var_shader_out: mode_str = "ir_var_shader_out"; break; - case ir_var_function_in: mode_str = "ir_var_function_in"; break; - case ir_var_function_out: mode_str = "ir_var_function_out"; break; - case ir_var_function_inout: mode_str = "ir_var_function_inout"; break; - case ir_var_const_in: mode_str = "ir_var_const_in"; break; - case ir_var_system_value: mode_str = "ir_var_system_value"; break; - case ir_var_temporary: mode_str = "ir_var_temporary"; break; - default: - unreachable("Invalid variable mode"); - } - - if (ir->data.mode == ir_var_temporary) { - print_with_indent("ir_variable *const r%04X = body.make_temp(glsl_type::%s_type, \"%s\");\n", - my_index, - ir->type->name, - ir->name); - } else { - print_with_indent("ir_variable *const r%04X = new(mem_ctx) ir_variable(glsl_type::%s_type, \"%s\", %s);\n", - my_index, - ir->type->name, - ir->name, - mode_str); - - switch (ir->data.mode) { - case ir_var_function_in: - case ir_var_function_out: - case ir_var_function_inout: - case ir_var_const_in: - print_with_indent("sig_parameters.push_tail(r%04X);\n", my_index); - break; - default: - print_with_indent("body.emit(r%04X);\n", my_index); - break; - } - } - - return visit_continue; -} - -void -ir_builder_print_visitor::print_without_declaration(const ir_dereference_variable *ir) -{ - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir->var); - - print_without_indent("r%04X", (unsigned)(uintptr_t) he->data); -} - -ir_visitor_status -ir_builder_print_visitor::visit(ir_dereference_variable *ir) -{ - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir->var); - - if (he != NULL) - _mesa_hash_table_insert(index_map, ir, he->data); - - return visit_continue; -} - -ir_visitor_status -ir_builder_print_visitor::visit_enter(ir_function_signature *ir) -{ - if (!ir->is_defined) - return visit_continue_with_parent; - - print_with_indent("ir_function_signature *\n" - "%s(void *mem_ctx, builtin_available_predicate avail)\n" - "{\n", - ir->function_name()); - indentation++; - print_with_indent("ir_function_signature *const sig =\n"); - print_with_indent(" new(mem_ctx) ir_function_signature(glsl_type::%s_type, avail);\n", - ir->return_type->name); - - print_with_indent("ir_factory body(&sig->body, mem_ctx);\n"); - print_with_indent("sig->is_defined = true;\n\n"); - - if (!ir->parameters.is_empty()) - print_with_indent("exec_list sig_parameters;\n\n"); - - return visit_continue; -} - -ir_visitor_status -ir_builder_print_visitor::visit_leave(ir_function_signature *ir) -{ - if (!ir->parameters.is_empty()) - print_with_indent("sig->replace_parameters(&sig_parameters);\n"); - - print_with_indent("return sig;\n"); - indentation--; - print_with_indent("}\n"); - return visit_continue; -} - -void -ir_builder_print_visitor::print_without_declaration(const ir_constant *ir) -{ - if (ir->type->is_scalar()) { - switch (ir->type->base_type) { - case GLSL_TYPE_UINT: - print_without_indent("body.constant(%uu)", ir->value.u[0]); - return; - case GLSL_TYPE_INT: - print_without_indent("body.constant(int(%d))", ir->value.i[0]); - return; - case GLSL_TYPE_FLOAT: - print_without_indent("body.constant(%ff)", ir->value.f[0]); - return; - case GLSL_TYPE_BOOL: - print_without_indent("body.constant(%s)", - ir->value.i[0] != 0 ? "true" : "false"); - return; - default: - break; - } - } - - ir_constant_data all_zero; - memset(&all_zero, 0, sizeof(all_zero)); - - if (memcmp(&ir->value, &all_zero, sizeof(all_zero)) == 0) { - print_without_indent("ir_constant::zero(mem_ctx, glsl_type::%s_type)", - ir->type->name); - } -} - -ir_visitor_status -ir_builder_print_visitor::visit(ir_constant *ir) -{ - const unsigned my_index = next_ir_index++; - - _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index); - - if (ir->type == glsl_type::uint_type || - ir->type == glsl_type::int_type || - ir->type == glsl_type::float_type || - ir->type == glsl_type::bool_type) { - print_with_indent("ir_constant *const r%04X = ", my_index); - print_without_declaration(ir); - print_without_indent(";\n"); - return visit_continue; - } - - ir_constant_data all_zero; - memset(&all_zero, 0, sizeof(all_zero)); - - if (memcmp(&ir->value, &all_zero, sizeof(all_zero)) == 0) { - print_with_indent("ir_constant *const r%04X = ", my_index); - print_without_declaration(ir); - print_without_indent(";\n"); - } else { - print_with_indent("ir_constant_data r%04X_data;\n", my_index); - print_with_indent("memset(&r%04X_data, 0, sizeof(ir_constant_data));\n", - my_index); - for (unsigned i = 0; i < 16; i++) { - switch (ir->type->base_type) { - case GLSL_TYPE_UINT: - if (ir->value.u[i] != 0) - print_with_indent("r%04X_data.u[%u] = %u;\n", - my_index, i, ir->value.u[i]); - break; - case GLSL_TYPE_INT: - if (ir->value.i[i] != 0) - print_with_indent("r%04X_data.i[%u] = %i;\n", - my_index, i, ir->value.i[i]); - break; - case GLSL_TYPE_FLOAT: - if (ir->value.u[i] != 0) - print_with_indent("r%04X_data.u[%u] = 0x%08x; /* %f */\n", - my_index, - i, - ir->value.u[i], - ir->value.f[i]); - break; - case GLSL_TYPE_DOUBLE: { - uint64_t v; - - STATIC_ASSERT(sizeof(double) == sizeof(uint64_t)); - - memcpy(&v, &ir->value.d[i], sizeof(v)); - if (v != 0) - print_with_indent("r%04X_data.u64[%u] = 0x%016" PRIx64 "; /* %g */\n", - my_index, i, v, ir->value.d[i]); - break; - } - case GLSL_TYPE_UINT64: - if (ir->value.u64[i] != 0) - print_with_indent("r%04X_data.u64[%u] = %" PRIu64 ";\n", - my_index, - i, - ir->value.u64[i]); - break; - case GLSL_TYPE_INT64: - if (ir->value.i64[i] != 0) - print_with_indent("r%04X_data.i64[%u] = %" PRId64 ";\n", - my_index, - i, - ir->value.i64[i]); - break; - case GLSL_TYPE_BOOL: - if (ir->value.u[i] != 0) - print_with_indent("r%04X_data.u[%u] = 1;\n", my_index, i); - break; - default: - unreachable("Invalid constant type"); - } - } - - print_with_indent("ir_constant *const r%04X = new(mem_ctx) ir_constant(glsl_type::%s_type, &r%04X_data);\n", - my_index, - ir->type->name, - my_index); - } - - return visit_continue; -} - -void -ir_builder_print_visitor::print_without_declaration(const ir_swizzle *ir) -{ - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir->val); - - if (ir->mask.num_components == 1) { - static const char swiz[4] = { 'x', 'y', 'z', 'w' }; - - if (is_simple_operand(ir->val)) { - print_without_indent("swizzle_%c(", swiz[ir->mask.x]); - print_without_declaration(ir->val); - print_without_indent(")"); - } else { - assert(he); - print_without_indent("swizzle_%c(r%04X)", - swiz[ir->mask.x], - (unsigned)(uintptr_t) he->data); - } - } else { - static const char swiz[4] = { 'X', 'Y', 'Z', 'W' }; - - assert(he); - print_without_indent("swizzle(r%04X, MAKE_SWIZZLE4(SWIZZLE_%c, SWIZZLE_%c, SWIZZLE_%c, SWIZZLE_%c), %u)", - (unsigned)(uintptr_t) he->data, - swiz[ir->mask.x], - swiz[ir->mask.y], - swiz[ir->mask.z], - swiz[ir->mask.w], - ir->mask.num_components); - } -} - -ir_visitor_status -ir_builder_print_visitor::visit_leave(ir_swizzle *ir) -{ - const unsigned my_index = next_ir_index++; - - _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index); - - print_with_indent("ir_swizzle *const r%04X = ", my_index); - print_without_declaration(ir); - print_without_indent(";\n"); - - return visit_continue; -} - -ir_visitor_status -ir_builder_print_visitor::visit_enter(ir_assignment *ir) -{ - ir_expression *const rhs_expr = ir->rhs->as_expression(); - - if (!is_simple_operand(ir->rhs) && rhs_expr == NULL) - return visit_continue; - - if (rhs_expr != NULL) { - const unsigned num_op = rhs_expr->num_operands; - - for (unsigned i = 0; i < num_op; i++) { - if (is_simple_operand(rhs_expr->operands[i])) - continue; - - rhs_expr->operands[i]->accept(this); - } - } - - ir_visitor_status s; - - this->in_assignee = true; - s = ir->lhs->accept(this); - this->in_assignee = false; - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - const struct hash_entry *const he_lhs = - _mesa_hash_table_search(index_map, ir->lhs); - - print_with_indent("body.emit(assign(r%04X, ", - (unsigned)(uintptr_t) he_lhs->data); - print_without_declaration(ir->rhs); - print_without_indent(", 0x%02x));\n\n", ir->write_mask); - - return visit_continue_with_parent; -} - -ir_visitor_status -ir_builder_print_visitor::visit_leave(ir_assignment *ir) -{ - const struct hash_entry *const he_lhs = - _mesa_hash_table_search(index_map, ir->lhs); - - const struct hash_entry *const he_rhs = - _mesa_hash_table_search(index_map, ir->rhs); - - assert(ir->lhs && ir->rhs); - - print_with_indent("body.emit(assign(r%04X, r%04X, 0x%02x));\n\n", - (unsigned)(uintptr_t) he_lhs->data, - (unsigned)(uintptr_t) he_rhs->data, - ir->write_mask); - - return visit_continue; -} - -void -ir_builder_print_visitor::print_without_declaration(const ir_expression *ir) -{ - const unsigned num_op = ir->num_operands; - - static const char *const arity[] = { - "", "unop", "binop", "triop", "quadop" - }; - - switch (ir->operation) { - case ir_unop_neg: - case ir_binop_add: - case ir_binop_sub: - case ir_binop_mul: - case ir_binop_imul_high: - case ir_binop_less: - case ir_binop_gequal: - case ir_binop_equal: - case ir_binop_nequal: - case ir_binop_lshift: - case ir_binop_rshift: - case ir_binop_bit_and: - case ir_binop_bit_xor: - case ir_binop_bit_or: - case ir_binop_logic_and: - case ir_binop_logic_xor: - case ir_binop_logic_or: - print_without_indent("%s(", - ir_expression_operation_enum_strings[ir->operation]); - break; - default: - print_without_indent("expr(ir_%s_%s, ", - arity[num_op], - ir_expression_operation_enum_strings[ir->operation]); - break; - } - - for (unsigned i = 0; i < num_op; i++) { - if (is_simple_operand(ir->operands[i])) - print_without_declaration(ir->operands[i]); - else { - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir->operands[i]); - - print_without_indent("r%04X", (unsigned)(uintptr_t) he->data); - } - - if (i < num_op - 1) - print_without_indent(", "); - } - - print_without_indent(")"); -} - -ir_visitor_status -ir_builder_print_visitor::visit_enter(ir_expression *ir) -{ - const unsigned num_op = ir->num_operands; - - for (unsigned i = 0; i < num_op; i++) { - if (is_simple_operand(ir->operands[i])) - continue; - - ir->operands[i]->accept(this); - } - - const unsigned my_index = next_ir_index++; - - _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index); - - print_with_indent("ir_expression *const r%04X = ", my_index); - print_without_declaration(ir); - print_without_indent(";\n"); - - return visit_continue_with_parent; -} - -ir_visitor_status -ir_builder_print_visitor::visit_enter(ir_if *ir) -{ - const unsigned my_index = next_ir_index++; - - print_with_indent("/* IF CONDITION */\n"); - - ir_visitor_status s = ir->condition->accept(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir->condition); - - print_with_indent("ir_if *f%04X = new(mem_ctx) ir_if(operand(r%04X).val);\n", - my_index, - (unsigned)(uintptr_t) he->data); - print_with_indent("exec_list *const f%04X_parent_instructions = body.instructions;\n\n", - my_index); - - indentation++; - print_with_indent("/* THEN INSTRUCTIONS */\n"); - print_with_indent("body.instructions = &f%04X->then_instructions;\n\n", - my_index); - - if (s != visit_continue_with_parent) { - s = visit_list_elements(this, &ir->then_instructions); - if (s == visit_stop) - return s; - } - - print_without_indent("\n"); - - if (!ir->else_instructions.is_empty()) { - print_with_indent("/* ELSE INSTRUCTIONS */\n"); - print_with_indent("body.instructions = &f%04X->else_instructions;\n\n", - my_index); - - if (s != visit_continue_with_parent) { - s = visit_list_elements(this, &ir->else_instructions); - if (s == visit_stop) - return s; - } - - print_without_indent("\n"); - } - - indentation--; - - print_with_indent("body.instructions = f%04X_parent_instructions;\n", - my_index); - print_with_indent("body.emit(f%04X);\n\n", - my_index); - print_with_indent("/* END IF */\n\n"); - - return visit_continue_with_parent; -} - -ir_visitor_status -ir_builder_print_visitor::visit_leave(ir_return *ir) -{ - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir->value); - - print_with_indent("body.emit(ret(r%04X));\n\n", - (unsigned)(uintptr_t) he->data); - - return visit_continue; -} - -ir_visitor_status -ir_builder_print_visitor::visit_enter(ir_texture *ir) -{ - print_with_indent("\nUnsupported IR is encountered: texture functions are not supported. Exiting.\n"); - - return visit_stop; -} - -ir_visitor_status -ir_builder_print_visitor::visit_leave(ir_call *ir) -{ - const unsigned my_index = next_ir_index++; - - print_without_indent("\n"); - print_with_indent("/* CALL %s */\n", ir->callee_name()); - print_with_indent("exec_list r%04X_parameters;\n", my_index); - - foreach_in_list(ir_dereference_variable, param, &ir->actual_parameters) { - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, param); - - print_with_indent("r%04X_parameters.push_tail(operand(r%04X).val);\n", - my_index, - (unsigned)(uintptr_t) he->data); - } - - char return_deref_string[32]; - if (ir->return_deref) { - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir->return_deref); - - snprintf(return_deref_string, sizeof(return_deref_string), - "operand(r%04X).val", (unsigned)(uintptr_t) he->data); - } else { - strcpy(return_deref_string, "NULL"); - } - - print_with_indent("body.emit(new(mem_ctx) ir_call(shader->symbols->get_function(\"%s\"),\n", - ir->callee_name()); - print_with_indent(" %s, &r%04X_parameters);\n\n", - return_deref_string, - my_index); - return visit_continue; -} - -ir_visitor_status -ir_builder_print_visitor::visit_enter(ir_loop *ir) -{ - const unsigned my_index = next_ir_index++; - - _mesa_hash_table_insert(index_map, ir, (void *)(uintptr_t) my_index); - - print_with_indent("/* LOOP BEGIN */\n"); - print_with_indent("ir_loop *f%04X = new(mem_ctx) ir_loop();\n", my_index); - print_with_indent("exec_list *const f%04X_parent_instructions = body.instructions;\n\n", - my_index); - - indentation++; - - print_with_indent("body.instructions = &f%04X->body_instructions;\n\n", - my_index); - - return visit_continue; -} - -ir_visitor_status -ir_builder_print_visitor::visit_leave(ir_loop *ir) -{ - const struct hash_entry *const he = - _mesa_hash_table_search(index_map, ir); - - indentation--; - - print_with_indent("/* LOOP END */\n\n"); - print_with_indent("body.instructions = f%04X_parent_instructions;\n", - (unsigned)(uintptr_t) he->data); - print_with_indent("body.emit(f%04X);\n\n", - (unsigned)(uintptr_t) he->data); - - return visit_continue; -} - -ir_visitor_status -ir_builder_print_visitor::visit(ir_loop_jump *ir) -{ - print_with_indent("body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_%s));\n\n", - ir->is_break() ? "break" : "continue"); - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder_print_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder_print_visitor.h deleted file mode 100644 index bd54015..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_builder_print_visitor.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_BUILDER_PRINT_VISITOR_H -#define IR_BUILDER_PRINT_VISITOR_H - -extern void -_mesa_print_builder_for_ir(FILE *f, exec_list *instructions); - -#endif /* IR_BUILDER_PRINT_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_clone.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_clone.cpp deleted file mode 100644 index 080588e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_clone.cpp +++ /dev/null @@ -1,438 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include "../../util/compiler.h" -#include "ir.h" -#include "../glsl_types.h" -#include "../../util/hash_table.h" - -ir_rvalue * -ir_rvalue::clone(void *mem_ctx, struct hash_table *) const -{ - /* The only possible instantiation is the generic error value. */ - return error_value(mem_ctx); -} - -/** - * Duplicate an IR variable - */ -ir_variable * -ir_variable::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_variable *var = new(mem_ctx) ir_variable(this->type, this->name, - (ir_variable_mode) this->data.mode); - - var->data.max_array_access = this->data.max_array_access; - if (this->is_interface_instance()) { - var->u.max_ifc_array_access = - rzalloc_array(var, int, this->interface_type->length); - memcpy(var->u.max_ifc_array_access, this->u.max_ifc_array_access, - this->interface_type->length * sizeof(unsigned)); - } - - memcpy(&var->data, &this->data, sizeof(var->data)); - - if (this->get_state_slots()) { - ir_state_slot *s = var->allocate_state_slots(this->get_num_state_slots()); - memcpy(s, this->get_state_slots(), - sizeof(s[0]) * var->get_num_state_slots()); - } - - if (this->constant_value) - var->constant_value = this->constant_value->clone(mem_ctx, ht); - - if (this->constant_initializer) - var->constant_initializer = - this->constant_initializer->clone(mem_ctx, ht); - - var->interface_type = this->interface_type; - - if (ht) - _mesa_hash_table_insert(ht, (void *)const_cast(this), var); - - return var; -} - -ir_swizzle * -ir_swizzle::clone(void *mem_ctx, struct hash_table *ht) const -{ - return new(mem_ctx) ir_swizzle(this->val->clone(mem_ctx, ht), this->mask); -} - -ir_return * -ir_return::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_rvalue *new_value = NULL; - - if (this->value) - new_value = this->value->clone(mem_ctx, ht); - - return new(mem_ctx) ir_return(new_value); -} - -ir_discard * -ir_discard::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_rvalue *new_condition = NULL; - - if (this->condition != NULL) - new_condition = this->condition->clone(mem_ctx, ht); - - return new(mem_ctx) ir_discard(new_condition); -} - -ir_demote * -ir_demote::clone(void *mem_ctx, struct hash_table *ht) const -{ - return new(mem_ctx) ir_demote(); -} - -ir_loop_jump * -ir_loop_jump::clone(void *mem_ctx, struct hash_table *ht) const -{ - (void)ht; - - return new(mem_ctx) ir_loop_jump(this->mode); -} - -ir_if * -ir_if::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_if *new_if = new(mem_ctx) ir_if(this->condition->clone(mem_ctx, ht)); - - foreach_in_list(ir_instruction, ir, &this->then_instructions) { - new_if->then_instructions.push_tail(ir->clone(mem_ctx, ht)); - } - - foreach_in_list(ir_instruction, ir, &this->else_instructions) { - new_if->else_instructions.push_tail(ir->clone(mem_ctx, ht)); - } - - return new_if; -} - -ir_loop * -ir_loop::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_loop *new_loop = new(mem_ctx) ir_loop(); - - foreach_in_list(ir_instruction, ir, &this->body_instructions) { - new_loop->body_instructions.push_tail(ir->clone(mem_ctx, ht)); - } - - return new_loop; -} - -ir_call * -ir_call::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_dereference_variable *new_return_ref = NULL; - if (this->return_deref != NULL) - new_return_ref = this->return_deref->clone(mem_ctx, ht); - - exec_list new_parameters; - - foreach_in_list(ir_instruction, ir, &this->actual_parameters) { - new_parameters.push_tail(ir->clone(mem_ctx, ht)); - } - - return new(mem_ctx) ir_call(this->callee, new_return_ref, &new_parameters); -} - -ir_expression * -ir_expression::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_rvalue *op[ARRAY_SIZE(this->operands)] = { NULL, }; - unsigned int i; - - for (i = 0; i < num_operands; i++) { - op[i] = this->operands[i]->clone(mem_ctx, ht); - } - - return new(mem_ctx) ir_expression(this->operation, this->type, - op[0], op[1], op[2], op[3]); -} - -ir_dereference_variable * -ir_dereference_variable::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_variable *new_var; - - if (ht) { - hash_entry *entry = _mesa_hash_table_search(ht, this->var); - new_var = entry ? (ir_variable *) entry->data : this->var; - } else { - new_var = this->var; - } - - return new(mem_ctx) ir_dereference_variable(new_var); -} - -ir_dereference_array * -ir_dereference_array::clone(void *mem_ctx, struct hash_table *ht) const -{ - return new(mem_ctx) ir_dereference_array(this->array->clone(mem_ctx, ht), - this->array_index->clone(mem_ctx, - ht)); -} - -ir_dereference_record * -ir_dereference_record::clone(void *mem_ctx, struct hash_table *ht) const -{ - assert(this->field_idx >= 0); - const char *field_name = - this->record->type->fields.structure[this->field_idx].name; - return new(mem_ctx) ir_dereference_record(this->record->clone(mem_ctx, ht), - field_name); -} - -ir_texture * -ir_texture::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_texture *new_tex = new(mem_ctx) ir_texture(this->op, this->is_sparse); - new_tex->type = this->type; - - new_tex->sampler = this->sampler->clone(mem_ctx, ht); - if (this->coordinate) - new_tex->coordinate = this->coordinate->clone(mem_ctx, ht); - if (this->projector) - new_tex->projector = this->projector->clone(mem_ctx, ht); - if (this->shadow_comparator) - new_tex->shadow_comparator = this->shadow_comparator->clone(mem_ctx, ht); - if (this->clamp) - new_tex->clamp = this->clamp->clone(mem_ctx, ht); - - if (this->offset != NULL) - new_tex->offset = this->offset->clone(mem_ctx, ht); - - switch (this->op) { - case ir_tex: - case ir_lod: - case ir_query_levels: - case ir_texture_samples: - case ir_samples_identical: - break; - case ir_txb: - new_tex->lod_info.bias = this->lod_info.bias->clone(mem_ctx, ht); - break; - case ir_txl: - case ir_txf: - case ir_txs: - new_tex->lod_info.lod = this->lod_info.lod->clone(mem_ctx, ht); - break; - case ir_txf_ms: - new_tex->lod_info.sample_index = this->lod_info.sample_index->clone(mem_ctx, ht); - break; - case ir_txd: - new_tex->lod_info.grad.dPdx = this->lod_info.grad.dPdx->clone(mem_ctx, ht); - new_tex->lod_info.grad.dPdy = this->lod_info.grad.dPdy->clone(mem_ctx, ht); - break; - case ir_tg4: - new_tex->lod_info.component = this->lod_info.component->clone(mem_ctx, ht); - break; - } - - return new_tex; -} - -ir_assignment * -ir_assignment::clone(void *mem_ctx, struct hash_table *ht) const -{ - return new(mem_ctx) ir_assignment(this->lhs->clone(mem_ctx, ht), - this->rhs->clone(mem_ctx, ht), - this->write_mask); -} - -ir_function * -ir_function::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_function *copy = new(mem_ctx) ir_function(this->name); - - copy->is_subroutine = this->is_subroutine; - copy->subroutine_index = this->subroutine_index; - copy->num_subroutine_types = this->num_subroutine_types; - copy->subroutine_types = ralloc_array(mem_ctx, const struct glsl_type *, copy->num_subroutine_types); - for (int i = 0; i < copy->num_subroutine_types; i++) - copy->subroutine_types[i] = this->subroutine_types[i]; - - foreach_in_list(const ir_function_signature, sig, &this->signatures) { - ir_function_signature *sig_copy = sig->clone(mem_ctx, ht); - copy->add_signature(sig_copy); - - if (ht != NULL) { - _mesa_hash_table_insert(ht, - (void *)const_cast(sig), sig_copy); - } - } - - return copy; -} - -ir_function_signature * -ir_function_signature::clone(void *mem_ctx, struct hash_table *ht) const -{ - ir_function_signature *copy = this->clone_prototype(mem_ctx, ht); - - copy->is_defined = this->is_defined; - - /* Clone the instruction list. - */ - foreach_in_list(const ir_instruction, inst, &this->body) { - ir_instruction *const inst_copy = inst->clone(mem_ctx, ht); - copy->body.push_tail(inst_copy); - } - - return copy; -} - -ir_function_signature * -ir_function_signature::clone_prototype(void *mem_ctx, struct hash_table *ht) const -{ - ir_function_signature *copy = - new(mem_ctx) ir_function_signature(this->return_type); - - copy->is_defined = false; - copy->builtin_avail = this->builtin_avail; - copy->origin = this; - - /* Clone the parameter list, but NOT the body. - */ - foreach_in_list(const ir_variable, param, &this->parameters) { - assert(const_cast(param)->as_variable() != NULL); - - ir_variable *const param_copy = param->clone(mem_ctx, ht); - copy->parameters.push_tail(param_copy); - } - - return copy; -} - -ir_constant * -ir_constant::clone(void *mem_ctx, struct hash_table *ht) const -{ - (void)ht; - - switch (this->type->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_BOOL: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - return new(mem_ctx) ir_constant(this->type, &this->value); - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_ARRAY: { - ir_constant *c = new(mem_ctx) ir_constant; - - c->type = this->type; - c->const_elements = ralloc_array(c, ir_constant *, this->type->length); - for (unsigned i = 0; i < this->type->length; i++) { - c->const_elements[i] = this->const_elements[i]->clone(mem_ctx, NULL); - } - return c; - } - - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_FUNCTION: - assert(!"Should not get here."); - break; - } - - return NULL; -} - - -class fixup_ir_call_visitor : public ir_hierarchical_visitor { -public: - fixup_ir_call_visitor(struct hash_table *ht) - { - this->ht = ht; - } - - virtual ir_visitor_status visit_enter(ir_call *ir) - { - /* Try to find the function signature referenced by the ir_call in the - * table. If it is found, replace it with the value from the table. - */ - ir_function_signature *sig; - hash_entry *entry = _mesa_hash_table_search(this->ht, ir->callee); - - if (entry != NULL) { - sig = (ir_function_signature *) entry->data; - ir->callee = sig; - } - - /* Since this may be used before function call parameters are flattened, - * the children also need to be processed. - */ - return visit_continue; - } - -private: - struct hash_table *ht; -}; - - -static void -fixup_function_calls(struct hash_table *ht, exec_list *instructions) -{ - fixup_ir_call_visitor v(ht); - v.run(instructions); -} - - -void -clone_ir_list(void *mem_ctx, exec_list *out, const exec_list *in) -{ - struct hash_table *ht = _mesa_pointer_hash_table_create(NULL); - - foreach_in_list(const ir_instruction, original, in) { - ir_instruction *copy = original->clone(mem_ctx, ht); - - out->push_tail(copy); - } - - /* Make a pass over the cloned tree to fix up ir_call nodes to point to the - * cloned ir_function_signature nodes. This cannot be done automatically - * during cloning because the ir_call might be a forward reference (i.e., - * the function signature that it references may not have been cloned yet). - */ - fixup_function_calls(ht, out); - - _mesa_hash_table_destroy(ht, NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_constant_expression.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_constant_expression.cpp deleted file mode 100644 index 387db21..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_constant_expression.cpp +++ /dev/null @@ -1,1235 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_constant_expression.cpp - * Evaluate and process constant valued expressions - * - * In GLSL, constant valued expressions are used in several places. These - * must be processed and evaluated very early in the compilation process. - * - * * Sizes of arrays - * * Initializers for uniforms - * * Initializers for \c const variables - */ - -#include -#include "../../util/rounding.h" /* for _mesa_roundeven */ -#include "../../util/half_float.h" -#include "ir.h" -#include "../glsl_types.h" -#include "../../util/hash_table.h" -#include "../../util/u_math.h" - -static float -dot_f(ir_constant *op0, ir_constant *op1) -{ - assert(op0->type->is_float() && op1->type->is_float()); - - float result = 0; - for (unsigned c = 0; c < op0->type->components(); c++) - result += op0->value.f[c] * op1->value.f[c]; - - return result; -} - -static double -dot_d(ir_constant *op0, ir_constant *op1) -{ - assert(op0->type->is_double() && op1->type->is_double()); - - double result = 0; - for (unsigned c = 0; c < op0->type->components(); c++) - result += op0->value.d[c] * op1->value.d[c]; - - return result; -} - -/* This method is the only one supported by gcc. Unions in particular - * are iffy, and read-through-converted-pointer is killed by strict - * aliasing. OTOH, the compiler sees through the memcpy, so the - * resulting asm is reasonable. - */ -static float -bitcast_u2f(unsigned int u) -{ - static_assert(sizeof(float) == sizeof(unsigned int), - "float and unsigned int size mismatch"); - float f; - memcpy(&f, &u, sizeof(f)); - return f; -} - -static unsigned int -bitcast_f2u(float f) -{ - static_assert(sizeof(float) == sizeof(unsigned int), - "float and unsigned int size mismatch"); - unsigned int u; - memcpy(&u, &f, sizeof(f)); - return u; -} - -static double -bitcast_u642d(uint64_t u) -{ - static_assert(sizeof(double) == sizeof(uint64_t), - "double and uint64_t size mismatch"); - double d; - memcpy(&d, &u, sizeof(d)); - return d; -} - -static double -bitcast_i642d(int64_t i) -{ - static_assert(sizeof(double) == sizeof(int64_t), - "double and int64_t size mismatch"); - double d; - memcpy(&d, &i, sizeof(d)); - return d; -} - -static uint64_t -bitcast_d2u64(double d) -{ - static_assert(sizeof(double) == sizeof(uint64_t), - "double and uint64_t size mismatch"); - uint64_t u; - memcpy(&u, &d, sizeof(d)); - return u; -} - -static int64_t -bitcast_d2i64(double d) -{ - static_assert(sizeof(double) == sizeof(int64_t), - "double and int64_t size mismatch"); - int64_t i; - memcpy(&i, &d, sizeof(d)); - return i; -} - -/** - * Evaluate one component of a floating-point 4x8 unpacking function. - */ -typedef uint8_t -(*pack_1x8_func_t)(float); - -/** - * Evaluate one component of a floating-point 2x16 unpacking function. - */ -typedef uint16_t -(*pack_1x16_func_t)(float); - -/** - * Evaluate one component of a floating-point 4x8 unpacking function. - */ -typedef float -(*unpack_1x8_func_t)(uint8_t); - -/** - * Evaluate one component of a floating-point 2x16 unpacking function. - */ -typedef float -(*unpack_1x16_func_t)(uint16_t); - -/** - * Evaluate a 2x16 floating-point packing function. - */ -static uint32_t -pack_2x16(pack_1x16_func_t pack_1x16, - float x, float y) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * packSnorm2x16 - * ------------- - * The first component of the vector will be written to the least - * significant bits of the output; the last component will be written to - * the most significant bits. - * - * The specifications for the other packing functions contain similar - * language. - */ - uint32_t u = 0; - u |= ((uint32_t) pack_1x16(x) << 0); - u |= ((uint32_t) pack_1x16(y) << 16); - return u; -} - -/** - * Evaluate a 4x8 floating-point packing function. - */ -static uint32_t -pack_4x8(pack_1x8_func_t pack_1x8, - float x, float y, float z, float w) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * packSnorm4x8 - * ------------ - * The first component of the vector will be written to the least - * significant bits of the output; the last component will be written to - * the most significant bits. - * - * The specifications for the other packing functions contain similar - * language. - */ - uint32_t u = 0; - u |= ((uint32_t) pack_1x8(x) << 0); - u |= ((uint32_t) pack_1x8(y) << 8); - u |= ((uint32_t) pack_1x8(z) << 16); - u |= ((uint32_t) pack_1x8(w) << 24); - return u; -} - -/** - * Evaluate a 2x16 floating-point unpacking function. - */ -static void -unpack_2x16(unpack_1x16_func_t unpack_1x16, - uint32_t u, - float *x, float *y) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * unpackSnorm2x16 - * --------------- - * The first component of the returned vector will be extracted from - * the least significant bits of the input; the last component will be - * extracted from the most significant bits. - * - * The specifications for the other unpacking functions contain similar - * language. - */ - *x = unpack_1x16((uint16_t) (u & 0xffff)); - *y = unpack_1x16((uint16_t) (u >> 16)); -} - -/** - * Evaluate a 4x8 floating-point unpacking function. - */ -static void -unpack_4x8(unpack_1x8_func_t unpack_1x8, uint32_t u, - float *x, float *y, float *z, float *w) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * unpackSnorm4x8 - * -------------- - * The first component of the returned vector will be extracted from - * the least significant bits of the input; the last component will be - * extracted from the most significant bits. - * - * The specifications for the other unpacking functions contain similar - * language. - */ - *x = unpack_1x8((uint8_t) (u & 0xff)); - *y = unpack_1x8((uint8_t) (u >> 8)); - *z = unpack_1x8((uint8_t) (u >> 16)); - *w = unpack_1x8((uint8_t) (u >> 24)); -} - -/** - * Evaluate one component of packSnorm4x8. - */ -static uint8_t -pack_snorm_1x8(float x) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * packSnorm4x8 - * ------------ - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - */ - return (uint8_t) - _mesa_lroundevenf(CLAMP(x, -1.0f, +1.0f) * 127.0f); -} - -/** - * Evaluate one component of packSnorm2x16. - */ -static uint16_t -pack_snorm_1x16(float x) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * packSnorm2x16 - * ------------- - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm2x16: round(clamp(c, -1, +1) * 32767.0) - */ - return (uint16_t) - _mesa_lroundevenf(CLAMP(x, -1.0f, +1.0f) * 32767.0f); -} - -/** - * Evaluate one component of unpackSnorm4x8. - */ -static float -unpack_snorm_1x8(uint8_t u) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * unpackSnorm4x8 - * -------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm4x8: clamp(f / 127.0, -1, +1) - */ - return CLAMP((int8_t) u / 127.0f, -1.0f, +1.0f); -} - -/** - * Evaluate one component of unpackSnorm2x16. - */ -static float -unpack_snorm_1x16(uint16_t u) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * unpackSnorm2x16 - * --------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - */ - return CLAMP((int16_t) u / 32767.0f, -1.0f, +1.0f); -} - -/** - * Evaluate one component packUnorm4x8. - */ -static uint8_t -pack_unorm_1x8(float x) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * packUnorm4x8 - * ------------ - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - */ - return (uint8_t) (int) _mesa_roundevenf(SATURATE(x) * 255.0f); -} - -/** - * Evaluate one component packUnorm2x16. - */ -static uint16_t -pack_unorm_1x16(float x) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * packUnorm2x16 - * ------------- - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - */ - return (uint16_t) (int) - _mesa_roundevenf(SATURATE(x) * 65535.0f); -} - -/** - * Evaluate one component of unpackUnorm4x8. - */ -static float -unpack_unorm_1x8(uint8_t u) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * unpackUnorm4x8 - * -------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm4x8: f / 255.0 - */ - return (float) u / 255.0f; -} - -/** - * Evaluate one component of unpackUnorm2x16. - */ -static float -unpack_unorm_1x16(uint16_t u) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * unpackUnorm2x16 - * --------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm2x16: f / 65535.0 - */ - return (float) u / 65535.0f; -} - -/** - * Evaluate one component of packHalf2x16. - */ -static uint16_t -pack_half_1x16(float x) -{ - return _mesa_float_to_half(x); -} - -/** - * Evaluate one component of unpackHalf2x16. - */ -static float -unpack_half_1x16(uint16_t u) -{ - return _mesa_half_to_float(u); -} - -static int32_t -iadd_saturate(int32_t a, int32_t b) -{ - return CLAMP(int64_t(a) + int64_t(b), INT32_MIN, INT32_MAX); -} - -static int64_t -iadd64_saturate(int64_t a, int64_t b) -{ - if (a < 0 && b < INT64_MIN - a) - return INT64_MIN; - - if (a > 0 && b > INT64_MAX - a) - return INT64_MAX; - - return a + b; -} - -static int32_t -isub_saturate(int32_t a, int32_t b) -{ - return CLAMP(int64_t(a) - int64_t(b), INT32_MIN, INT32_MAX); -} - -static int64_t -isub64_saturate(int64_t a, int64_t b) -{ - if (b > 0 && a < INT64_MIN + b) - return INT64_MIN; - - if (b < 0 && a > INT64_MAX + b) - return INT64_MAX; - - return a - b; -} - -static uint64_t -pack_2x32(uint32_t a, uint32_t b) -{ - uint64_t v = a; - v |= (uint64_t)b << 32; - return v; -} - -static void -unpack_2x32(uint64_t p, uint32_t *a, uint32_t *b) -{ - *a = p & 0xffffffff; - *b = (p >> 32); -} - -/** - * Get the constant that is ultimately referenced by an r-value, in a constant - * expression evaluation context. - * - * The offset is used when the reference is to a specific column of a matrix. - */ -static bool -constant_referenced(const ir_dereference *deref, - struct hash_table *variable_context, - ir_constant *&store, int &offset) -{ - store = NULL; - offset = 0; - - if (variable_context == NULL) - return false; - - switch (deref->ir_type) { - case ir_type_dereference_array: { - const ir_dereference_array *const da = - (const ir_dereference_array *) deref; - - ir_constant *const index_c = - da->array_index->constant_expression_value(variable_context); - - if (!index_c || !index_c->type->is_scalar() || - !index_c->type->is_integer_32()) - break; - - const int index = index_c->type->base_type == GLSL_TYPE_INT ? - index_c->get_int_component(0) : - index_c->get_uint_component(0); - - ir_constant *substore; - int suboffset; - - const ir_dereference *const deref = da->array->as_dereference(); - if (!deref) - break; - - if (!constant_referenced(deref, variable_context, substore, suboffset)) - break; - - const glsl_type *const vt = da->array->type; - if (vt->is_array()) { - store = substore->get_array_element(index); - offset = 0; - } else if (vt->is_matrix()) { - store = substore; - offset = index * vt->vector_elements; - } else if (vt->is_vector()) { - store = substore; - offset = suboffset + index; - } - - break; - } - - case ir_type_dereference_record: { - const ir_dereference_record *const dr = - (const ir_dereference_record *) deref; - - const ir_dereference *const deref = dr->record->as_dereference(); - if (!deref) - break; - - ir_constant *substore; - int suboffset; - - if (!constant_referenced(deref, variable_context, substore, suboffset)) - break; - - /* Since we're dropping it on the floor... - */ - assert(suboffset == 0); - - store = substore->get_record_field(dr->field_idx); - break; - } - - case ir_type_dereference_variable: { - const ir_dereference_variable *const dv = - (const ir_dereference_variable *) deref; - - hash_entry *entry = _mesa_hash_table_search(variable_context, dv->var); - if (entry) - store = (ir_constant *) entry->data; - break; - } - - default: - assert(!"Should not get here."); - break; - } - - return store != NULL; -} - - -ir_constant * -ir_rvalue::constant_expression_value(void *, struct hash_table *) -{ - assert(this->type->is_error()); - return NULL; -} - -static uint32_t -bitfield_reverse(uint32_t v) -{ - /* http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious */ - uint32_t r = v; // r will be reversed bits of v; first get LSB of v - int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end - - for (v >>= 1; v; v >>= 1) { - r <<= 1; - r |= v & 1; - s--; - } - r <<= s; // shift when v's highest bits are zero - - return r; -} - -static int -find_msb_uint(uint32_t v) -{ - int count = 0; - - /* If v == 0, then the loop will terminate when count == 32. In that case - * 31-count will produce the -1 result required by GLSL findMSB(). - */ - while (((v & (1u << 31)) == 0) && count != 32) { - count++; - v <<= 1; - } - - return 31 - count; -} - -static int -find_msb_int(int32_t v) -{ - /* If v is signed, findMSB() returns the position of the most significant - * zero bit. - */ - return find_msb_uint(v < 0 ? ~v : v); -} - -static float -ldexpf_flush_subnormal(float x, int exp) -{ - const float result = ldexpf(x, exp); - - /* Flush subnormal values to zero. */ - return !isnormal(result) ? copysignf(0.0f, x) : result; -} - -static double -ldexp_flush_subnormal(double x, int exp) -{ - const double result = ldexp(x, exp); - - /* Flush subnormal values to zero. */ - return !isnormal(result) ? copysign(0.0, x) : result; -} - -static uint32_t -bitfield_extract_uint(uint32_t value, int offset, int bits) -{ - if (bits == 0) - return 0; - else if (offset < 0 || bits < 0) - return 0; /* Undefined, per spec. */ - else if (offset + bits > 32) - return 0; /* Undefined, per spec. */ - else { - value <<= 32 - bits - offset; - value >>= 32 - bits; - return value; - } -} - -static int32_t -bitfield_extract_int(int32_t value, int offset, int bits) -{ - if (bits == 0) - return 0; - else if (offset < 0 || bits < 0) - return 0; /* Undefined, per spec. */ - else if (offset + bits > 32) - return 0; /* Undefined, per spec. */ - else { - value <<= 32 - bits - offset; - value >>= 32 - bits; - return value; - } -} - -static uint32_t -bitfield_insert(uint32_t base, uint32_t insert, int offset, int bits) -{ - if (bits == 0) - return base; - else if (offset < 0 || bits < 0) - return 0; /* Undefined, per spec. */ - else if (offset + bits > 32) - return 0; /* Undefined, per spec. */ - else { - unsigned insert_mask = ((1ull << bits) - 1) << offset; - - insert <<= offset; - insert &= insert_mask; - base &= ~insert_mask; - - return base | insert; - } -} - -ir_constant * -ir_expression::constant_expression_value(void *mem_ctx, - struct hash_table *variable_context) -{ - assert(mem_ctx); - - if (this->type->is_error()) - return NULL; - - const glsl_type *return_type = this->type; - ir_constant *op[ARRAY_SIZE(this->operands)] = { NULL, }; - ir_constant_data data; - - memset(&data, 0, sizeof(data)); - - for (unsigned operand = 0; operand < this->num_operands; operand++) { - op[operand] = - this->operands[operand]->constant_expression_value(mem_ctx, - variable_context); - if (!op[operand]) - return NULL; - } - - for (unsigned operand = 0; operand < this->num_operands; operand++) { - switch (op[operand]->type->base_type) { - case GLSL_TYPE_FLOAT16: { - const struct glsl_type *float_type = - glsl_type::get_instance(GLSL_TYPE_FLOAT, - op[operand]->type->vector_elements, - op[operand]->type->matrix_columns, - op[operand]->type->explicit_stride, - op[operand]->type->interface_row_major); - - ir_constant_data f; - for (unsigned i = 0; i < ARRAY_SIZE(f.f); i++) - f.f[i] = _mesa_half_to_float(op[operand]->value.f16[i]); - - op[operand] = new(mem_ctx) ir_constant(float_type, &f); - break; - } - case GLSL_TYPE_INT16: { - const struct glsl_type *int_type = - glsl_type::get_instance(GLSL_TYPE_INT, - op[operand]->type->vector_elements, - op[operand]->type->matrix_columns, - op[operand]->type->explicit_stride, - op[operand]->type->interface_row_major); - - ir_constant_data d; - for (unsigned i = 0; i < ARRAY_SIZE(d.i); i++) - d.i[i] = op[operand]->value.i16[i]; - - op[operand] = new(mem_ctx) ir_constant(int_type, &d); - break; - } - case GLSL_TYPE_UINT16: { - const struct glsl_type *uint_type = - glsl_type::get_instance(GLSL_TYPE_UINT, - op[operand]->type->vector_elements, - op[operand]->type->matrix_columns, - op[operand]->type->explicit_stride, - op[operand]->type->interface_row_major); - - ir_constant_data d; - for (unsigned i = 0; i < ARRAY_SIZE(d.u); i++) - d.u[i] = op[operand]->value.u16[i]; - - op[operand] = new(mem_ctx) ir_constant(uint_type, &d); - break; - } - default: - /* nothing to do */ - break; - } - } - - switch (return_type->base_type) { - case GLSL_TYPE_FLOAT16: - return_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, - return_type->vector_elements, - return_type->matrix_columns, - return_type->explicit_stride, - return_type->interface_row_major); - break; - case GLSL_TYPE_INT16: - return_type = glsl_type::get_instance(GLSL_TYPE_INT, - return_type->vector_elements, - return_type->matrix_columns, - return_type->explicit_stride, - return_type->interface_row_major); - break; - case GLSL_TYPE_UINT16: - return_type = glsl_type::get_instance(GLSL_TYPE_UINT, - return_type->vector_elements, - return_type->matrix_columns, - return_type->explicit_stride, - return_type->interface_row_major); - break; - default: - /* nothing to do */ - break; - } - - if (op[1] != NULL) - switch (this->operation) { - case ir_binop_lshift: - case ir_binop_rshift: - case ir_binop_ldexp: - case ir_binop_interpolate_at_offset: - case ir_binop_interpolate_at_sample: - case ir_binop_vector_extract: - case ir_triop_csel: - case ir_triop_bitfield_extract: - break; - - default: - assert(op[0]->type->base_type == op[1]->type->base_type); - break; - } - - bool op0_scalar = op[0]->type->is_scalar(); - bool op1_scalar = op[1] != NULL && op[1]->type->is_scalar(); - - /* When iterating over a vector or matrix's components, we want to increase - * the loop counter. However, for scalars, we want to stay at 0. - */ - unsigned c0_inc = op0_scalar ? 0 : 1; - unsigned c1_inc = op1_scalar ? 0 : 1; - unsigned components; - if (op1_scalar || !op[1]) { - components = op[0]->type->components(); - } else { - components = op[1]->type->components(); - } - - /* Handle array operations here, rather than below. */ - if (op[0]->type->is_array()) { - assert(op[1] != NULL && op[1]->type->is_array()); - switch (this->operation) { - case ir_binop_all_equal: - return new(mem_ctx) ir_constant(op[0]->has_value(op[1])); - case ir_binop_any_nequal: - return new(mem_ctx) ir_constant(!op[0]->has_value(op[1])); - default: - break; - } - return NULL; - } - -#include "ir_expression_operation_constant.h" - - switch (type->base_type) { - case GLSL_TYPE_FLOAT16: { - ir_constant_data f; - for (unsigned i = 0; i < ARRAY_SIZE(f.f16); i++) - f.f16[i] = _mesa_float_to_half(data.f[i]); - - return new(mem_ctx) ir_constant(this->type, &f); - } - case GLSL_TYPE_INT16: { - ir_constant_data d; - for (unsigned i = 0; i < ARRAY_SIZE(d.i16); i++) - d.i16[i] = data.i[i]; - - return new(mem_ctx) ir_constant(this->type, &d); - } - case GLSL_TYPE_UINT16: { - ir_constant_data d; - for (unsigned i = 0; i < ARRAY_SIZE(d.u16); i++) - d.u16[i] = data.u[i]; - - return new(mem_ctx) ir_constant(this->type, &d); - } - default: - return new(mem_ctx) ir_constant(this->type, &data); - } -} - - -ir_constant * -ir_texture::constant_expression_value(void *, struct hash_table *) -{ - /* texture lookups aren't constant expressions */ - return NULL; -} - - -ir_constant * -ir_swizzle::constant_expression_value(void *mem_ctx, - struct hash_table *variable_context) -{ - assert(mem_ctx); - - ir_constant *v = this->val->constant_expression_value(mem_ctx, - variable_context); - - if (v != NULL) { - ir_constant_data data = { { 0 } }; - - const unsigned swiz_idx[4] = { - this->mask.x, this->mask.y, this->mask.z, this->mask.w - }; - - for (unsigned i = 0; i < this->mask.num_components; i++) { - switch (v->type->base_type) { - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: data.u16[i] = v->value.u16[swiz_idx[i]]; break; - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: data.u[i] = v->value.u[swiz_idx[i]]; break; - case GLSL_TYPE_FLOAT: data.f[i] = v->value.f[swiz_idx[i]]; break; - case GLSL_TYPE_FLOAT16: data.f16[i] = v->value.f16[swiz_idx[i]]; break; - case GLSL_TYPE_BOOL: data.b[i] = v->value.b[swiz_idx[i]]; break; - case GLSL_TYPE_DOUBLE:data.d[i] = v->value.d[swiz_idx[i]]; break; - case GLSL_TYPE_UINT64:data.u64[i] = v->value.u64[swiz_idx[i]]; break; - case GLSL_TYPE_INT64: data.i64[i] = v->value.i64[swiz_idx[i]]; break; - default: assert(!"Should not get here."); break; - } - } - - return new(mem_ctx) ir_constant(this->type, &data); - } - return NULL; -} - - -ir_constant * -ir_dereference_variable::constant_expression_value(void *mem_ctx, - struct hash_table *variable_context) -{ - assert(var); - assert(mem_ctx); - - /* Give priority to the context hashtable, if it exists */ - if (variable_context) { - hash_entry *entry = _mesa_hash_table_search(variable_context, var); - - if(entry) - return (ir_constant *) entry->data; - } - - /* The constant_value of a uniform variable is its initializer, - * not the lifetime constant value of the uniform. - */ - if (var->data.mode == ir_var_uniform) - return NULL; - - if (!var->constant_value) - return NULL; - - return var->constant_value->clone(mem_ctx, NULL); -} - - -ir_constant * -ir_dereference_array::constant_expression_value(void *mem_ctx, - struct hash_table *variable_context) -{ - assert(mem_ctx); - - ir_constant *array = this->array->constant_expression_value(mem_ctx, variable_context); - ir_constant *idx = this->array_index->constant_expression_value(mem_ctx, variable_context); - - if ((array != NULL) && (idx != NULL)) { - if (array->type->is_matrix()) { - /* Array access of a matrix results in a vector. - */ - const unsigned column = idx->value.u[0]; - - const glsl_type *const column_type = array->type->column_type(); - - /* Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 spec says: - * - * In the subsections described above for array, vector, matrix and - * structure accesses, any out-of-bounds access produced undefined - * behavior....Out-of-bounds reads return undefined values, which - * include values from other variables of the active program or zero. - */ - if (idx->value.i[0] < 0 || column >= array->type->matrix_columns) { - ir_constant_data data = { { 0 } }; - - return new(mem_ctx) ir_constant(column_type, &data); - } - - /* Offset in the constant matrix to the first element of the column - * to be extracted. - */ - const unsigned mat_idx = column * column_type->vector_elements; - - ir_constant_data data = { { 0 } }; - - switch (column_type->base_type) { - case GLSL_TYPE_FLOAT16: - for (unsigned i = 0; i < column_type->vector_elements; i++) - data.f16[i] = array->value.f16[mat_idx + i]; - - break; - - case GLSL_TYPE_FLOAT: - for (unsigned i = 0; i < column_type->vector_elements; i++) - data.f[i] = array->value.f[mat_idx + i]; - - break; - - case GLSL_TYPE_DOUBLE: - for (unsigned i = 0; i < column_type->vector_elements; i++) - data.d[i] = array->value.d[mat_idx + i]; - - break; - - default: - unreachable("Matrix types are either float or double."); - } - - return new(mem_ctx) ir_constant(column_type, &data); - } else if (array->type->is_vector()) { - const unsigned component = idx->value.u[0]; - - return new(mem_ctx) ir_constant(array, component); - } else if (array->type->is_array()) { - const unsigned index = idx->value.u[0]; - return array->get_array_element(index)->clone(mem_ctx, NULL); - } - } - return NULL; -} - - -ir_constant * -ir_dereference_record::constant_expression_value(void *mem_ctx, - struct hash_table *) -{ - assert(mem_ctx); - - ir_constant *v = this->record->constant_expression_value(mem_ctx); - - return (v != NULL) ? v->get_record_field(this->field_idx) : NULL; -} - - -ir_constant * -ir_assignment::constant_expression_value(void *, struct hash_table *) -{ - /* FINISHME: Handle CEs involving assignment (return RHS) */ - return NULL; -} - - -ir_constant * -ir_constant::constant_expression_value(void *, struct hash_table *) -{ - return this; -} - - -ir_constant * -ir_call::constant_expression_value(void *mem_ctx, struct hash_table *variable_context) -{ - assert(mem_ctx); - - return this->callee->constant_expression_value(mem_ctx, - &this->actual_parameters, - variable_context); -} - - -bool ir_function_signature::constant_expression_evaluate_expression_list(void *mem_ctx, - const struct exec_list &body, - struct hash_table *variable_context, - ir_constant **result) -{ - assert(mem_ctx); - - foreach_in_list(ir_instruction, inst, &body) { - switch(inst->ir_type) { - - /* (declare () type symbol) */ - case ir_type_variable: { - ir_variable *var = inst->as_variable(); - _mesa_hash_table_insert(variable_context, var, ir_constant::zero(this, var->type)); - break; - } - - /* (assign [condition] (write-mask) (ref) (value)) */ - case ir_type_assignment: { - ir_assignment *asg = inst->as_assignment(); - ir_constant *store = NULL; - int offset = 0; - - if (!constant_referenced(asg->lhs, variable_context, store, offset)) - return false; - - ir_constant *value = - asg->rhs->constant_expression_value(mem_ctx, variable_context); - - if (!value) - return false; - - store->copy_masked_offset(value, offset, asg->write_mask); - break; - } - - /* (return (expression)) */ - case ir_type_return: - assert (result); - *result = - inst->as_return()->value->constant_expression_value(mem_ctx, - variable_context); - return *result != NULL; - - /* (call name (ref) (params))*/ - case ir_type_call: { - ir_call *call = inst->as_call(); - - /* Just say no to void functions in constant expressions. We - * don't need them at that point. - */ - - if (!call->return_deref) - return false; - - ir_constant *store = NULL; - int offset = 0; - - if (!constant_referenced(call->return_deref, variable_context, - store, offset)) - return false; - - ir_constant *value = - call->constant_expression_value(mem_ctx, variable_context); - - if(!value) - return false; - - store->copy_offset(value, offset); - break; - } - - /* (if condition (then-instructions) (else-instructions)) */ - case ir_type_if: { - ir_if *iif = inst->as_if(); - - ir_constant *cond = - iif->condition->constant_expression_value(mem_ctx, - variable_context); - if (!cond || !cond->type->is_boolean()) - return false; - - exec_list &branch = cond->get_bool_component(0) ? iif->then_instructions : iif->else_instructions; - - *result = NULL; - if (!constant_expression_evaluate_expression_list(mem_ctx, branch, - variable_context, - result)) - return false; - - /* If there was a return in the branch chosen, drop out now. */ - if (*result) - return true; - - break; - } - - /* Every other expression type, we drop out. */ - default: - return false; - } - } - - /* Reaching the end of the block is not an error condition */ - if (result) - *result = NULL; - - return true; -} - -ir_constant * -ir_function_signature::constant_expression_value(void *mem_ctx, - exec_list *actual_parameters, - struct hash_table *variable_context) -{ - assert(mem_ctx); - - const glsl_type *type = this->return_type; - if (type == glsl_type::void_type) - return NULL; - - /* From the GLSL 1.20 spec, page 23: - * "Function calls to user-defined functions (non-built-in functions) - * cannot be used to form constant expressions." - */ - if (!this->is_builtin()) - return NULL; - - /* - * Of the builtin functions, only the texture lookups and the noise - * ones must not be used in constant expressions. Texture instructions - * include special ir_texture opcodes which can't be constant-folded (see - * ir_texture::constant_expression_value). Noise functions, however, we - * have to special case here. - */ - if (strcmp(this->function_name(), "noise1") == 0 || - strcmp(this->function_name(), "noise2") == 0 || - strcmp(this->function_name(), "noise3") == 0 || - strcmp(this->function_name(), "noise4") == 0) - return NULL; - - /* Initialize the table of dereferencable names with the function - * parameters. Verify their const-ness on the way. - * - * We expect the correctness of the number of parameters to have - * been checked earlier. - */ - hash_table *deref_hash = _mesa_pointer_hash_table_create(NULL); - - /* If "origin" is non-NULL, then the function body is there. So we - * have to use the variable objects from the object with the body, - * but the parameter instanciation on the current object. - */ - const exec_node *parameter_info = origin ? origin->parameters.get_head_raw() : parameters.get_head_raw(); - - foreach_in_list(ir_rvalue, n, actual_parameters) { - ir_constant *constant = - n->constant_expression_value(mem_ctx, variable_context); - if (constant == NULL) { - _mesa_hash_table_destroy(deref_hash, NULL); - return NULL; - } - - - ir_variable *var = (ir_variable *)parameter_info; - _mesa_hash_table_insert(deref_hash, var, constant); - - parameter_info = parameter_info->next; - } - - ir_constant *result = NULL; - - /* Now run the builtin function until something non-constant - * happens or we get the result. - */ - if (constant_expression_evaluate_expression_list(mem_ctx, origin ? origin->body : body, deref_hash, &result) && - result) - result = result->clone(mem_ctx, NULL); - - _mesa_hash_table_destroy(deref_hash, NULL); - - return result; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_equals.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_equals.cpp deleted file mode 100644 index 199cd30..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_equals.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" - -/** - * Helper for checking equality when one instruction might be NULL, since you - * can't access a's vtable in that case. - */ -static bool -possibly_null_equals(const ir_instruction *a, const ir_instruction *b, - enum ir_node_type ignore) -{ - if (!a || !b) - return !a && !b; - - return a->equals(b, ignore); -} - -/** - * The base equality function: Return not equal for anything we don't know - * about. - */ -bool -ir_instruction::equals(const ir_instruction *, enum ir_node_type) const -{ - return false; -} - -bool -ir_constant::equals(const ir_instruction *ir, enum ir_node_type) const -{ - const ir_constant *other = ir->as_constant(); - if (!other) - return false; - - if (type != other->type) - return false; - - for (unsigned i = 0; i < type->components(); i++) { - if (type->is_double()) { - if (value.d[i] != other->value.d[i]) - return false; - } else { - if (value.u[i] != other->value.u[i]) - return false; - } - } - - return true; -} - -bool -ir_dereference_variable::equals(const ir_instruction *ir, - enum ir_node_type) const -{ - const ir_dereference_variable *other = ir->as_dereference_variable(); - if (!other) - return false; - - return var == other->var; -} - -bool -ir_dereference_array::equals(const ir_instruction *ir, - enum ir_node_type ignore) const -{ - const ir_dereference_array *other = ir->as_dereference_array(); - if (!other) - return false; - - if (type != other->type) - return false; - - if (!array->equals(other->array, ignore)) - return false; - - if (!array_index->equals(other->array_index, ignore)) - return false; - - return true; -} - -bool -ir_swizzle::equals(const ir_instruction *ir, - enum ir_node_type ignore) const -{ - const ir_swizzle *other = ir->as_swizzle(); - if (!other) - return false; - - if (type != other->type) - return false; - - if (ignore != ir_type_swizzle) { - if (mask.x != other->mask.x || - mask.y != other->mask.y || - mask.z != other->mask.z || - mask.w != other->mask.w) { - return false; - } - } - - return val->equals(other->val, ignore); -} - -bool -ir_texture::equals(const ir_instruction *ir, enum ir_node_type ignore) const -{ - const ir_texture *other = ir->as_texture(); - if (!other) - return false; - - if (type != other->type) - return false; - - if (op != other->op) - return false; - - if (is_sparse != other->is_sparse) - return false; - - if (!possibly_null_equals(coordinate, other->coordinate, ignore)) - return false; - - if (!possibly_null_equals(projector, other->projector, ignore)) - return false; - - if (!possibly_null_equals(shadow_comparator, other->shadow_comparator, ignore)) - return false; - - if (!possibly_null_equals(offset, other->offset, ignore)) - return false; - - if (!possibly_null_equals(clamp, other->clamp, ignore)) - return false; - - if (!sampler->equals(other->sampler, ignore)) - return false; - - switch (op) { - case ir_tex: - case ir_lod: - case ir_query_levels: - case ir_texture_samples: - case ir_samples_identical: - break; - case ir_txb: - if (!lod_info.bias->equals(other->lod_info.bias, ignore)) - return false; - break; - case ir_txl: - case ir_txf: - case ir_txs: - if (!lod_info.lod->equals(other->lod_info.lod, ignore)) - return false; - break; - case ir_txd: - if (!lod_info.grad.dPdx->equals(other->lod_info.grad.dPdx, ignore) || - !lod_info.grad.dPdy->equals(other->lod_info.grad.dPdy, ignore)) - return false; - break; - case ir_txf_ms: - if (!lod_info.sample_index->equals(other->lod_info.sample_index, ignore)) - return false; - break; - case ir_tg4: - if (!lod_info.component->equals(other->lod_info.component, ignore)) - return false; - break; - default: - assert(!"Unrecognized texture op"); - } - - return true; -} - -bool -ir_expression::equals(const ir_instruction *ir, enum ir_node_type ignore) const -{ - const ir_expression *other = ir->as_expression(); - if (!other) - return false; - - if (type != other->type) - return false; - - if (operation != other->operation) - return false; - - for (unsigned i = 0; i < num_operands; i++) { - if (!operands[i]->equals(other->operands[i], ignore)) - return false; - } - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_flattening.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_flattening.cpp deleted file mode 100644 index c457395..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_flattening.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_expression_flattening.cpp - * - * Takes the leaves of expression trees and makes them dereferences of - * assignments of the leaves to temporaries, according to a predicate. - * - * This is used for breaking down matrix operations, where it's easier to - * create a temporary and work on each of its vector components individually. - */ - -#include "ir.h" -#include "ir_rvalue_visitor.h" -#include "ir_expression_flattening.h" - -class ir_expression_flattening_visitor : public ir_rvalue_visitor { -public: - ir_expression_flattening_visitor(bool (*predicate)(ir_instruction *ir)) - { - this->predicate = predicate; - } - - virtual ~ir_expression_flattening_visitor() - { - /* empty */ - } - - void handle_rvalue(ir_rvalue **rvalue); - bool (*predicate)(ir_instruction *ir); -}; - -void -do_expression_flattening(exec_list *instructions, - bool (*predicate)(ir_instruction *ir)) -{ - ir_expression_flattening_visitor v(predicate); - - foreach_in_list(ir_instruction, ir, instructions) { - ir->accept(&v); - } -} - -void -ir_expression_flattening_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - ir_variable *var; - ir_assignment *assign; - ir_rvalue *ir = *rvalue; - - if (!ir || !this->predicate(ir)) - return; - - void *ctx = ralloc_parent(ir); - - var = new(ctx) ir_variable(ir->type, "flattening_tmp", ir_var_temporary); - base_ir->insert_before(var); - - assign = new(ctx) ir_assignment(new(ctx) ir_dereference_variable(var), ir); - base_ir->insert_before(assign); - - *rvalue = new(ctx) ir_dereference_variable(var); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_flattening.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_flattening.h deleted file mode 100644 index e75bdfd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_flattening.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_expression_flattening.h - * - * Takes the leaves of expression trees and makes them dereferences of - * assignments of the leaves to temporaries, according to a predicate. - * - * This is used for automatic function inlining, where we want to take - * an expression containing a call and move the call out to its own - * assignment so that we can inline it at the appropriate place in the - * instruction stream. - */ - -#ifndef GLSL_IR_EXPRESSION_FLATTENING_H -#define GLSL_IR_EXPRESSION_FLATTENING_H - -void do_expression_flattening(exec_list *instructions, - bool (*predicate)(ir_instruction *ir)); - -#endif /* GLSL_IR_EXPRESSION_FLATTENING_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation.py deleted file mode 100644 index fa3118b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation.py +++ /dev/null @@ -1,861 +0,0 @@ -# -# Copyright (C) 2015 Intel Corporation -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. - -import mako.template -import sys -import itertools - -class type(object): - def __init__(self, c_type, union_field, glsl_type): - self.c_type = c_type - self.union_field = union_field - self.glsl_type = glsl_type - - -class type_signature_iter(object): - """Basic iterator for a set of type signatures. Various kinds of sequences of - types come in, and an iteration of type_signature objects come out. - - """ - - def __init__(self, source_types, num_operands): - """Initialize an iterator from a sequence of input types and a number - operands. This is for signatures where all the operands have the same - type and the result type of the operation is the same as the input type. - - """ - self.dest_type = None - self.source_types = source_types - self.num_operands = num_operands - self.i = 0 - - def __init__(self, dest_type, source_types, num_operands): - """Initialize an iterator from a result tpye, a sequence of input types and a - number operands. This is for signatures where all the operands have the - same type but the result type of the operation is different from the - input type. - - """ - self.dest_type = dest_type - self.source_types = source_types - self.num_operands = num_operands - self.i = 0 - - def __iter__(self): - return self - - def __next__(self): - if self.i < len(self.source_types): - i = self.i - self.i += 1 - - if self.dest_type is None: - dest_type = self.source_types[i] - else: - dest_type = self.dest_type - - return (dest_type, self.num_operands * (self.source_types[i],)) - else: - raise StopIteration() - - next = __next__ - - -uint_type = type("unsigned", "u", "GLSL_TYPE_UINT") -int_type = type("int", "i", "GLSL_TYPE_INT") -uint64_type = type("uint64_t", "u64", "GLSL_TYPE_UINT64") -int64_type = type("int64_t", "i64", "GLSL_TYPE_INT64") -float_type = type("float", "f", "GLSL_TYPE_FLOAT") -double_type = type("double", "d", "GLSL_TYPE_DOUBLE") -bool_type = type("bool", "b", "GLSL_TYPE_BOOL") - -all_types = (uint_type, int_type, float_type, double_type, uint64_type, int64_type, bool_type) -numeric_types = (uint_type, int_type, float_type, double_type, uint64_type, int64_type) -signed_numeric_types = (int_type, float_type, double_type, int64_type) -integer_types = (uint_type, int_type, uint64_type, int64_type) -real_types = (float_type, double_type) - -# This template is for operations that can have operands of a several -# different types, and each type may or may not has a different C expression. -# This is used by most operations. -constant_template_common = mako.template.Template("""\ - case ${op.get_enum_name()}: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types)}; - break; - % endfor - default: - unreachable("invalid type"); - } - } - break;""") - -# This template is for binary operations that can operate on some combination -# of scalar and vector operands where both source types are the same. -constant_template_vector_scalar = mako.template.Template("""\ - case ${op.get_enum_name()}: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c0", "c1", "c2"))}; - break; - % endfor - default: - unreachable("invalid type"); - } - } - break;""") - -# This template is for binary operations that can operate on some combination -# of scalar and vector operands where the source types can be mixed. -constant_template_vector_scalar_mixed = mako.template.Template("""\ - case ${op.get_enum_name()}: - % for i in range(op.num_operands): - assert(op[${i}]->type->base_type == ${op.source_types[0].glsl_type} || - % for src_type in op.source_types[1:-1]: - op[${i}]->type->base_type == ${src_type.glsl_type} || - % endfor - op[${i}]->type->base_type == ${op.source_types[-1].glsl_type}); - % endfor - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - <% - first_sig_dst_type, first_sig_src_types = op.signatures()[0] - last_sig_dst_type, last_sig_src_types = op.signatures()[-1] - %> - if (op[0]->type->base_type == ${first_sig_src_types[0].glsl_type} && - op[1]->type->base_type == ${first_sig_src_types[1].glsl_type}) { - data.${first_sig_dst_type.union_field}[c] = ${op.get_c_expression(first_sig_src_types, ("c0", "c1", "c2"))}; - % for dst_type, src_types in op.signatures()[1:-1]: - } else if (op[0]->type->base_type == ${src_types[0].glsl_type} && - op[1]->type->base_type == ${src_types[1].glsl_type}) { - data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c0", "c1", "c2"))}; - % endfor - } else if (op[0]->type->base_type == ${last_sig_src_types[0].glsl_type} && - op[1]->type->base_type == ${last_sig_src_types[1].glsl_type}) { - data.${last_sig_dst_type.union_field}[c] = ${op.get_c_expression(last_sig_src_types, ("c0", "c1", "c2"))}; - } else { - unreachable("invalid types"); - } - } - break;""") - -# This template is for multiplication. It is unique because it has to support -# matrix * vector and matrix * matrix operations, and those are just different. -constant_template_mul = mako.template.Template("""\ - case ${op.get_enum_name()}: - /* Check for equal types, or unequal types involving scalars */ - if ((op[0]->type == op[1]->type && !op[0]->type->is_matrix()) - || op0_scalar || op1_scalar) { - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c0", "c1", "c2"))}; - break; - % endfor - default: - unreachable("invalid type"); - } - } - } else { - assert(op[0]->type->is_matrix() || op[1]->type->is_matrix()); - - /* Multiply an N-by-M matrix with an M-by-P matrix. Since either - * matrix can be a GLSL vector, either N or P can be 1. - * - * For vec*mat, the vector is treated as a row vector. This - * means the vector is a 1-row x M-column matrix. - * - * For mat*vec, the vector is treated as a column vector. Since - * matrix_columns is 1 for vectors, this just works. - */ - const unsigned n = op[0]->type->is_vector() - ? 1 : op[0]->type->vector_elements; - const unsigned m = op[1]->type->vector_elements; - const unsigned p = op[1]->type->matrix_columns; - for (unsigned j = 0; j < p; j++) { - for (unsigned i = 0; i < n; i++) { - for (unsigned k = 0; k < m; k++) { - if (op[0]->type->is_double()) - data.d[i+n*j] += op[0]->value.d[i+n*k]*op[1]->value.d[k+m*j]; - else - data.f[i+n*j] += op[0]->value.f[i+n*k]*op[1]->value.f[k+m*j]; - } - } - } - } - break;""") - -# This template is for operations that are horizontal and either have only a -# single type or the implementation for all types is identical. That is, the -# operation consumes a vector and produces a scalar. -constant_template_horizontal_single_implementation = mako.template.Template("""\ - case ${op.get_enum_name()}: - data.${op.dest_type.union_field}[0] = ${op.c_expression['default']}; - break;""") - -# This template is for operations that are horizontal and do not assign the -# result. The various unpack operations are examples. -constant_template_horizontal_nonassignment = mako.template.Template("""\ - case ${op.get_enum_name()}: - ${op.c_expression['default']}; - break;""") - -# This template is for binary operations that are horizontal. That is, the -# operation consumes a vector and produces a scalar. -constant_template_horizontal = mako.template.Template("""\ - case ${op.get_enum_name()}: - switch (op[0]->type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[0] = ${op.get_c_expression(src_types)}; - break; - % endfor - default: - unreachable("invalid type"); - } - break;""") - -# This template is for ir_binop_vector_extract. -constant_template_vector_extract = mako.template.Template("""\ - case ${op.get_enum_name()}: { - const int c = CLAMP(op[1]->value.i[0], 0, - (int) op[0]->type->vector_elements - 1); - - switch (op[0]->type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[0] = op[0]->value.${src_types[0].union_field}[c]; - break; - % endfor - default: - unreachable("invalid type"); - } - break; - }""") - -# This template is for ir_triop_vector_insert. -constant_template_vector_insert = mako.template.Template("""\ - case ${op.get_enum_name()}: { - const unsigned idx = op[2]->value.u[0]; - - memcpy(&data, &op[0]->value, sizeof(data)); - - switch (return_type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[idx] = op[1]->value.${src_types[0].union_field}[0]; - break; - % endfor - default: - unreachable("invalid type"); - } - break; - }""") - -# This template is for ir_quadop_vector. -constant_template_vector = mako.template.Template("""\ - case ${op.get_enum_name()}: - for (unsigned c = 0; c < return_type->vector_elements; c++) { - switch (return_type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[c] = op[c]->value.${src_types[0].union_field}[0]; - break; - % endfor - default: - unreachable("invalid type"); - } - } - break;""") - -# This template is for ir_triop_lrp. -constant_template_lrp = mako.template.Template("""\ - case ${op.get_enum_name()}: { - assert(op[0]->type->is_float() || op[0]->type->is_double()); - assert(op[1]->type->is_float() || op[1]->type->is_double()); - assert(op[2]->type->is_float() || op[2]->type->is_double()); - - unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; - for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) { - switch (return_type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[0].glsl_type}: - data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types, ("c", "c", "c2"))}; - break; - % endfor - default: - unreachable("invalid type"); - } - } - break; - }""") - -# This template is for ir_triop_csel. This expression is really unique -# because not all of the operands are the same type, and the second operand -# determines the type of the expression (instead of the first). -constant_template_csel = mako.template.Template("""\ - case ${op.get_enum_name()}: - for (unsigned c = 0; c < components; c++) { - switch (return_type->base_type) { - % for dst_type, src_types in op.signatures(): - case ${src_types[1].glsl_type}: - data.${dst_type.union_field}[c] = ${op.get_c_expression(src_types)}; - break; - % endfor - default: - unreachable("invalid type"); - } - } - break;""") - - -vector_scalar_operation = "vector-scalar" -horizontal_operation = "horizontal" -types_identical_operation = "identical" -non_assign_operation = "nonassign" -mixed_type_operation = "mixed" - -class operation(object): - def __init__(self, name, num_operands, printable_name = None, source_types = None, dest_type = None, c_expression = None, flags = None, all_signatures = None): - self.name = name - self.num_operands = num_operands - - if printable_name is None: - self.printable_name = name - else: - self.printable_name = printable_name - - self.all_signatures = all_signatures - - if source_types is None: - self.source_types = tuple() - else: - self.source_types = source_types - - self.dest_type = dest_type - - if c_expression is None: - self.c_expression = None - elif isinstance(c_expression, str): - self.c_expression = {'default': c_expression} - else: - self.c_expression = c_expression - - if flags is None: - self.flags = frozenset() - elif isinstance(flags, str): - self.flags = frozenset([flags]) - else: - self.flags = frozenset(flags) - - - def get_enum_name(self): - return "ir_{0}op_{1}".format(("un", "bin", "tri", "quad")[self.num_operands-1], self.name) - - - def get_template(self): - if self.c_expression is None: - return None - - if horizontal_operation in self.flags: - if non_assign_operation in self.flags: - return constant_template_horizontal_nonassignment.render(op=self) - elif types_identical_operation in self.flags: - return constant_template_horizontal_single_implementation.render(op=self) - else: - return constant_template_horizontal.render(op=self) - - if self.num_operands == 2: - if self.name == "mul": - return constant_template_mul.render(op=self) - elif self.name == "vector_extract": - return constant_template_vector_extract.render(op=self) - elif vector_scalar_operation in self.flags: - if mixed_type_operation in self.flags: - return constant_template_vector_scalar_mixed.render(op=self) - else: - return constant_template_vector_scalar.render(op=self) - elif self.num_operands == 3: - if self.name == "vector_insert": - return constant_template_vector_insert.render(op=self) - elif self.name == "lrp": - return constant_template_lrp.render(op=self) - elif self.name == "csel": - return constant_template_csel.render(op=self) - elif self.num_operands == 4: - if self.name == "vector": - return constant_template_vector.render(op=self) - - return constant_template_common.render(op=self) - - - def get_c_expression(self, types, indices=("c", "c", "c")): - src0 = "op[0]->value.{0}[{1}]".format(types[0].union_field, indices[0]) - src1 = "op[1]->value.{0}[{1}]".format(types[1].union_field, indices[1]) if len(types) >= 2 else "ERROR" - src2 = "op[2]->value.{0}[{1}]".format(types[2].union_field, indices[2]) if len(types) >= 3 else "ERROR" - src3 = "op[3]->value.{0}[c]".format(types[3].union_field) if len(types) >= 4 else "ERROR" - - expr = self.c_expression[types[0].union_field] if types[0].union_field in self.c_expression else self.c_expression['default'] - - return expr.format(src0=src0, - src1=src1, - src2=src2, - src3=src3) - - - def signatures(self): - if self.all_signatures is not None: - return self.all_signatures - else: - return type_signature_iter(self.dest_type, self.source_types, self.num_operands) - - -ir_expression_operation = [ - operation("bit_not", 1, printable_name="~", source_types=integer_types, c_expression="~ {src0}"), - operation("logic_not", 1, printable_name="!", source_types=(bool_type,), c_expression="!{src0}"), - operation("neg", 1, source_types=numeric_types, c_expression={'u': "-((int) {src0})", 'u64': "-((int64_t) {src0})", 'default': "-{src0}"}), - operation("abs", 1, source_types=signed_numeric_types, c_expression={'i': "{src0} < 0 ? -{src0} : {src0}", 'f': "fabsf({src0})", 'd': "fabs({src0})", 'i64': "{src0} < 0 ? -{src0} : {src0}"}), - operation("sign", 1, source_types=signed_numeric_types, c_expression={'i': "({src0} > 0) - ({src0} < 0)", 'f': "float(({src0} > 0.0F) - ({src0} < 0.0F))", 'd': "double(({src0} > 0.0) - ({src0} < 0.0))", 'i64': "({src0} > 0) - ({src0} < 0)"}), - operation("rcp", 1, source_types=real_types, c_expression={'f': "1.0F / {src0}", 'd': "1.0 / {src0}"}), - operation("rsq", 1, source_types=real_types, c_expression={'f': "1.0F / sqrtf({src0})", 'd': "1.0 / sqrt({src0})"}), - operation("sqrt", 1, source_types=real_types, c_expression={'f': "sqrtf({src0})", 'd': "sqrt({src0})"}), - operation("exp", 1, source_types=(float_type,), c_expression="expf({src0})"), # Log base e on gentype - operation("log", 1, source_types=(float_type,), c_expression="logf({src0})"), # Natural log on gentype - operation("exp2", 1, source_types=(float_type,), c_expression="exp2f({src0})"), - operation("log2", 1, source_types=(float_type,), c_expression="log2f({src0})"), - - # Float-to-integer conversion. - operation("f2i", 1, source_types=(float_type,), dest_type=int_type, c_expression="(int) {src0}"), - # Float-to-unsigned conversion. - operation("f2u", 1, source_types=(float_type,), dest_type=uint_type, c_expression="(unsigned) {src0}"), - # Integer-to-float conversion. - operation("i2f", 1, source_types=(int_type,), dest_type=float_type, c_expression="(float) {src0}"), - # Float-to-boolean conversion - operation("f2b", 1, source_types=(float_type,), dest_type=bool_type, c_expression="{src0} != 0.0F ? true : false"), - # Boolean-to-float conversion - operation("b2f", 1, source_types=(bool_type,), dest_type=float_type, c_expression="{src0} ? 1.0F : 0.0F"), - # Boolean-to-float16 conversion - operation("b2f16", 1, source_types=(bool_type,), dest_type=float_type, c_expression="{src0} ? 1.0F : 0.0F"), - # int-to-boolean conversion - operation("i2b", 1, source_types=(uint_type, int_type), dest_type=bool_type, c_expression="{src0} ? true : false"), - # Boolean-to-int conversion - operation("b2i", 1, source_types=(bool_type,), dest_type=int_type, c_expression="{src0} ? 1 : 0"), - # Unsigned-to-float conversion. - operation("u2f", 1, source_types=(uint_type,), dest_type=float_type, c_expression="(float) {src0}"), - # Integer-to-unsigned conversion. - operation("i2u", 1, source_types=(int_type,), dest_type=uint_type, c_expression="{src0}"), - # Unsigned-to-integer conversion. - operation("u2i", 1, source_types=(uint_type,), dest_type=int_type, c_expression="{src0}"), - # Double-to-float conversion. - operation("d2f", 1, source_types=(double_type,), dest_type=float_type, c_expression="{src0}"), - # Float-to-double conversion. - operation("f2d", 1, source_types=(float_type,), dest_type=double_type, c_expression="{src0}"), - # Half-float conversions. These all operate on and return float types, - # since the framework expands half to full float before calling in. We - # still have to handle them here so that we can constant propagate through - # them, but they are no-ops. - operation("f2f16", 1, source_types=(float_type,), dest_type=float_type, c_expression="{src0}"), - operation("f2fmp", 1, source_types=(float_type,), dest_type=float_type, c_expression="{src0}"), - operation("f162f", 1, source_types=(float_type,), dest_type=float_type, c_expression="{src0}"), - # int16<->int32 conversion. - operation("i2i", 1, source_types=(int_type,), dest_type=int_type, c_expression="{src0}"), - operation("i2imp", 1, source_types=(int_type,), dest_type=int_type, c_expression="{src0}"), - operation("u2u", 1, source_types=(uint_type,), dest_type=uint_type, c_expression="{src0}"), - operation("u2ump", 1, source_types=(uint_type,), dest_type=uint_type, c_expression="{src0}"), - # Double-to-integer conversion. - operation("d2i", 1, source_types=(double_type,), dest_type=int_type, c_expression="{src0}"), - # Integer-to-double conversion. - operation("i2d", 1, source_types=(int_type,), dest_type=double_type, c_expression="{src0}"), - # Double-to-unsigned conversion. - operation("d2u", 1, source_types=(double_type,), dest_type=uint_type, c_expression="{src0}"), - # Unsigned-to-double conversion. - operation("u2d", 1, source_types=(uint_type,), dest_type=double_type, c_expression="{src0}"), - # Double-to-boolean conversion. - operation("d2b", 1, source_types=(double_type,), dest_type=bool_type, c_expression="{src0} != 0.0"), - # Float16-to-boolean conversion. - operation("f162b", 1, source_types=(float_type,), dest_type=bool_type, c_expression="{src0} != 0.0"), - # 'Bit-identical int-to-float "conversion" - operation("bitcast_i2f", 1, source_types=(int_type,), dest_type=float_type, c_expression="bitcast_u2f({src0})"), - # 'Bit-identical float-to-int "conversion" - operation("bitcast_f2i", 1, source_types=(float_type,), dest_type=int_type, c_expression="bitcast_f2u({src0})"), - # 'Bit-identical uint-to-float "conversion" - operation("bitcast_u2f", 1, source_types=(uint_type,), dest_type=float_type, c_expression="bitcast_u2f({src0})"), - # 'Bit-identical float-to-uint "conversion" - operation("bitcast_f2u", 1, source_types=(float_type,), dest_type=uint_type, c_expression="bitcast_f2u({src0})"), - # Bit-identical u64-to-double "conversion" - operation("bitcast_u642d", 1, source_types=(uint64_type,), dest_type=double_type, c_expression="bitcast_u642d({src0})"), - # Bit-identical i64-to-double "conversion" - operation("bitcast_i642d", 1, source_types=(int64_type,), dest_type=double_type, c_expression="bitcast_i642d({src0})"), - # Bit-identical double-to_u64 "conversion" - operation("bitcast_d2u64", 1, source_types=(double_type,), dest_type=uint64_type, c_expression="bitcast_d2u64({src0})"), - # Bit-identical double-to-i64 "conversion" - operation("bitcast_d2i64", 1, source_types=(double_type,), dest_type=int64_type, c_expression="bitcast_d2i64({src0})"), - # i64-to-i32 conversion - operation("i642i", 1, source_types=(int64_type,), dest_type=int_type, c_expression="{src0}"), - # ui64-to-i32 conversion - operation("u642i", 1, source_types=(uint64_type,), dest_type=int_type, c_expression="{src0}"), - operation("i642u", 1, source_types=(int64_type,), dest_type=uint_type, c_expression="{src0}"), - operation("u642u", 1, source_types=(uint64_type,), dest_type=uint_type, c_expression="{src0}"), - operation("i642b", 1, source_types=(int64_type,), dest_type=bool_type, c_expression="{src0} != 0"), - operation("i642f", 1, source_types=(int64_type,), dest_type=float_type, c_expression="{src0}"), - operation("u642f", 1, source_types=(uint64_type,), dest_type=float_type, c_expression="{src0}"), - operation("i642d", 1, source_types=(int64_type,), dest_type=double_type, c_expression="{src0}"), - operation("u642d", 1, source_types=(uint64_type,), dest_type=double_type, c_expression="{src0}"), - operation("i2i64", 1, source_types=(int_type,), dest_type=int64_type, c_expression="{src0}"), - operation("u2i64", 1, source_types=(uint_type,), dest_type=int64_type, c_expression="{src0}"), - operation("b2i64", 1, source_types=(bool_type,), dest_type=int64_type, c_expression="{src0}"), - operation("f2i64", 1, source_types=(float_type,), dest_type=int64_type, c_expression="{src0}"), - operation("d2i64", 1, source_types=(double_type,), dest_type=int64_type, c_expression="{src0}"), - operation("i2u64", 1, source_types=(int_type,), dest_type=uint64_type, c_expression="{src0}"), - operation("u2u64", 1, source_types=(uint_type,), dest_type=uint64_type, c_expression="{src0}"), - operation("f2u64", 1, source_types=(float_type,), dest_type=uint64_type, c_expression="{src0}"), - operation("d2u64", 1, source_types=(double_type,), dest_type=uint64_type, c_expression="{src0}"), - operation("u642i64", 1, source_types=(uint64_type,), dest_type=int64_type, c_expression="{src0}"), - operation("i642u64", 1, source_types=(int64_type,), dest_type=uint64_type, c_expression="{src0}"), - - - # Unary floating-point rounding operations. - operation("trunc", 1, source_types=real_types, c_expression={'f': "truncf({src0})", 'd': "trunc({src0})"}), - operation("ceil", 1, source_types=real_types, c_expression={'f': "ceilf({src0})", 'd': "ceil({src0})"}), - operation("floor", 1, source_types=real_types, c_expression={'f': "floorf({src0})", 'd': "floor({src0})"}), - operation("fract", 1, source_types=real_types, c_expression={'f': "{src0} - floorf({src0})", 'd': "{src0} - floor({src0})"}), - operation("round_even", 1, source_types=real_types, c_expression={'f': "_mesa_roundevenf({src0})", 'd': "_mesa_roundeven({src0})"}), - - # Trigonometric operations. - operation("sin", 1, source_types=(float_type,), c_expression="sinf({src0})"), - operation("cos", 1, source_types=(float_type,), c_expression="cosf({src0})"), - operation("atan", 1, source_types=(float_type,), c_expression="atan({src0})"), - - # Partial derivatives. - operation("dFdx", 1, source_types=(float_type,), c_expression="0.0f"), - operation("dFdx_coarse", 1, printable_name="dFdxCoarse", source_types=(float_type,), c_expression="0.0f"), - operation("dFdx_fine", 1, printable_name="dFdxFine", source_types=(float_type,), c_expression="0.0f"), - operation("dFdy", 1, source_types=(float_type,), c_expression="0.0f"), - operation("dFdy_coarse", 1, printable_name="dFdyCoarse", source_types=(float_type,), c_expression="0.0f"), - operation("dFdy_fine", 1, printable_name="dFdyFine", source_types=(float_type,), c_expression="0.0f"), - - # Floating point pack and unpack operations. - operation("pack_snorm_2x16", 1, printable_name="packSnorm2x16", source_types=(float_type,), dest_type=uint_type, c_expression="pack_2x16(pack_snorm_1x16, op[0]->value.f[0], op[0]->value.f[1])", flags=horizontal_operation), - operation("pack_snorm_4x8", 1, printable_name="packSnorm4x8", source_types=(float_type,), dest_type=uint_type, c_expression="pack_4x8(pack_snorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3])", flags=horizontal_operation), - operation("pack_unorm_2x16", 1, printable_name="packUnorm2x16", source_types=(float_type,), dest_type=uint_type, c_expression="pack_2x16(pack_unorm_1x16, op[0]->value.f[0], op[0]->value.f[1])", flags=horizontal_operation), - operation("pack_unorm_4x8", 1, printable_name="packUnorm4x8", source_types=(float_type,), dest_type=uint_type, c_expression="pack_4x8(pack_unorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3])", flags=horizontal_operation), - operation("pack_half_2x16", 1, printable_name="packHalf2x16", source_types=(float_type,), dest_type=uint_type, c_expression="pack_2x16(pack_half_1x16, op[0]->value.f[0], op[0]->value.f[1])", flags=horizontal_operation), - operation("unpack_snorm_2x16", 1, printable_name="unpackSnorm2x16", source_types=(uint_type,), dest_type=float_type, c_expression="unpack_2x16(unpack_snorm_1x16, op[0]->value.u[0], &data.f[0], &data.f[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_snorm_4x8", 1, printable_name="unpackSnorm4x8", source_types=(uint_type,), dest_type=float_type, c_expression="unpack_4x8(unpack_snorm_1x8, op[0]->value.u[0], &data.f[0], &data.f[1], &data.f[2], &data.f[3])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_unorm_2x16", 1, printable_name="unpackUnorm2x16", source_types=(uint_type,), dest_type=float_type, c_expression="unpack_2x16(unpack_unorm_1x16, op[0]->value.u[0], &data.f[0], &data.f[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_unorm_4x8", 1, printable_name="unpackUnorm4x8", source_types=(uint_type,), dest_type=float_type, c_expression="unpack_4x8(unpack_unorm_1x8, op[0]->value.u[0], &data.f[0], &data.f[1], &data.f[2], &data.f[3])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_half_2x16", 1, printable_name="unpackHalf2x16", source_types=(uint_type,), dest_type=float_type, c_expression="unpack_2x16(unpack_half_1x16, op[0]->value.u[0], &data.f[0], &data.f[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - - # Bit operations, part of ARB_gpu_shader5. - operation("bitfield_reverse", 1, source_types=(uint_type, int_type), c_expression="bitfield_reverse({src0})"), - operation("bit_count", 1, source_types=(uint_type, int_type), dest_type=int_type, c_expression="util_bitcount({src0})"), - operation("find_msb", 1, source_types=(uint_type, int_type), dest_type=int_type, c_expression={'u': "find_msb_uint({src0})", 'i': "find_msb_int({src0})"}), - operation("find_lsb", 1, source_types=(uint_type, int_type), dest_type=int_type, c_expression="find_msb_uint({src0} & -{src0})"), - operation("clz", 1, source_types=(uint_type,), dest_type=uint_type, c_expression="(unsigned)(31 - find_msb_uint({src0}))"), - - operation("saturate", 1, printable_name="sat", source_types=(float_type,), c_expression="CLAMP({src0}, 0.0f, 1.0f)"), - - # Double packing, part of ARB_gpu_shader_fp64. - operation("pack_double_2x32", 1, printable_name="packDouble2x32", source_types=(uint_type,), dest_type=double_type, c_expression="data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_double_2x32", 1, printable_name="unpackDouble2x32", source_types=(double_type,), dest_type=uint_type, c_expression="unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - - # Sampler/Image packing, part of ARB_bindless_texture. - operation("pack_sampler_2x32", 1, printable_name="packSampler2x32", source_types=(uint_type,), dest_type=uint64_type, c_expression="data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("pack_image_2x32", 1, printable_name="packImage2x32", source_types=(uint_type,), dest_type=uint64_type, c_expression="data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_sampler_2x32", 1, printable_name="unpackSampler2x32", source_types=(uint64_type,), dest_type=uint_type, c_expression="unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_image_2x32", 1, printable_name="unpackImage2x32", source_types=(uint64_type,), dest_type=uint_type, c_expression="unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - - operation("frexp_sig", 1), - operation("frexp_exp", 1), - - operation("subroutine_to_int", 1), - - # Interpolate fs input at centroid - # - # operand0 is the fs input. - operation("interpolate_at_centroid", 1), - - # Ask the driver for the total size of a buffer block. - # operand0 is the ir_constant buffer block index in the linked shader. - operation("get_buffer_size", 1), - - # Calculate length of an unsized array inside a buffer block. - # This opcode is going to be replaced in a lowering pass inside - # the linker. - # - # operand0 is the unsized array's ir_value for the calculation - # of its length. - operation("ssbo_unsized_array_length", 1), - - # Calculate length of an implicitly sized array. - # This opcode is going to be replaced with a constant expression at link - # time. - operation("implicitly_sized_array_length", 1), - - # 64-bit integer packing ops. - operation("pack_int_2x32", 1, printable_name="packInt2x32", source_types=(int_type,), dest_type=int64_type, c_expression="data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("pack_uint_2x32", 1, printable_name="packUint2x32", source_types=(uint_type,), dest_type=uint64_type, c_expression="data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_int_2x32", 1, printable_name="unpackInt2x32", source_types=(int64_type,), dest_type=int_type, c_expression="unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - operation("unpack_uint_2x32", 1, printable_name="unpackUint2x32", source_types=(uint64_type,), dest_type=uint_type, c_expression="unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1])", flags=frozenset((horizontal_operation, non_assign_operation))), - - operation("add", 2, printable_name="+", source_types=numeric_types, c_expression="{src0} + {src1}", flags=vector_scalar_operation), - operation("sub", 2, printable_name="-", source_types=numeric_types, c_expression="{src0} - {src1}", flags=vector_scalar_operation), - operation("add_sat", 2, printable_name="add_sat", source_types=integer_types, c_expression={ - 'u': "({src0} + {src1}) < {src0} ? UINT32_MAX : ({src0} + {src1})", - 'i': "iadd_saturate({src0}, {src1})", - 'u64': "({src0} + {src1}) < {src0} ? UINT64_MAX : ({src0} + {src1})", - 'i64': "iadd64_saturate({src0}, {src1})" - }), - operation("sub_sat", 2, printable_name="sub_sat", source_types=integer_types, c_expression={ - 'u': "({src1} > {src0}) ? 0 : {src0} - {src1}", - 'i': "isub_saturate({src0}, {src1})", - 'u64': "({src1} > {src0}) ? 0 : {src0} - {src1}", - 'i64': "isub64_saturate({src0}, {src1})" - }), - operation("abs_sub", 2, printable_name="abs_sub", source_types=integer_types, c_expression={ - 'u': "({src1} > {src0}) ? {src1} - {src0} : {src0} - {src1}", - 'i': "({src1} > {src0}) ? (unsigned){src1} - (unsigned){src0} : (unsigned){src0} - (unsigned){src1}", - 'u64': "({src1} > {src0}) ? {src1} - {src0} : {src0} - {src1}", - 'i64': "({src1} > {src0}) ? (uint64_t){src1} - (uint64_t){src0} : (uint64_t){src0} - (uint64_t){src1}", - }), - operation("avg", 2, printable_name="average", source_types=integer_types, c_expression="({src0} >> 1) + ({src1} >> 1) + (({src0} & {src1}) & 1)"), - operation("avg_round", 2, printable_name="average_rounded", source_types=integer_types, c_expression="({src0} >> 1) + ({src1} >> 1) + (({src0} | {src1}) & 1)"), - - # "Floating-point or low 32-bit integer multiply." - operation("mul", 2, printable_name="*", source_types=numeric_types, c_expression="{src0} * {src1}"), - operation("mul_32x16", 2, printable_name="*", source_types=(uint_type, int_type), c_expression={ - 'u': "{src0} * (uint16_t){src1}", - 'i': "{src0} * (int16_t){src0}" - }), - operation("imul_high", 2), # Calculates the high 32-bits of a 64-bit multiply. - operation("div", 2, printable_name="/", source_types=numeric_types, c_expression={'u': "{src1} == 0 ? 0 : {src0} / {src1}", 'i': "{src1} == 0 ? 0 : {src0} / {src1}", 'u64': "{src1} == 0 ? 0 : {src0} / {src1}", 'i64': "{src1} == 0 ? 0 : {src0} / {src1}", 'default': "{src0} / {src1}"}, flags=vector_scalar_operation), - - # Returns the carry resulting from the addition of the two arguments. - operation("carry", 2), - - # Returns the borrow resulting from the subtraction of the second argument - # from the first argument. - operation("borrow", 2), - - # Either (vector % vector) or (vector % scalar) - # - # We don't use fmod because it rounds toward zero; GLSL specifies the use - # of floor. - operation("mod", 2, printable_name="%", source_types=numeric_types, c_expression={'u': "{src1} == 0 ? 0 : {src0} % {src1}", 'i': "{src1} == 0 ? 0 : {src0} % {src1}", 'f': "{src0} - {src1} * floorf({src0} / {src1})", 'd': "{src0} - {src1} * floor({src0} / {src1})", 'u64': "{src1} == 0 ? 0 : {src0} % {src1}", 'i64': "{src1} == 0 ? 0 : {src0} % {src1}"}, flags=vector_scalar_operation), - - # Binary comparison operators which return a boolean vector. - # The type of both operands must be equal. - operation("less", 2, printable_name="<", source_types=numeric_types, dest_type=bool_type, c_expression="{src0} < {src1}"), - operation("gequal", 2, printable_name=">=", source_types=numeric_types, dest_type=bool_type, c_expression="{src0} >= {src1}"), - operation("equal", 2, printable_name="==", source_types=all_types, dest_type=bool_type, c_expression="{src0} == {src1}"), - operation("nequal", 2, printable_name="!=", source_types=all_types, dest_type=bool_type, c_expression="{src0} != {src1}"), - - # Returns single boolean for whether all components of operands[0] - # equal the components of operands[1]. - operation("all_equal", 2, source_types=all_types, dest_type=bool_type, c_expression="op[0]->has_value(op[1])", flags=frozenset((horizontal_operation, types_identical_operation))), - - # Returns single boolean for whether any component of operands[0] - # is not equal to the corresponding component of operands[1]. - operation("any_nequal", 2, source_types=all_types, dest_type=bool_type, c_expression="!op[0]->has_value(op[1])", flags=frozenset((horizontal_operation, types_identical_operation))), - - # Bit-wise binary operations. - operation("lshift", 2, - printable_name="<<", all_signatures=list((src_sig[0], src_sig) for src_sig in itertools.product(integer_types, repeat=2)), - source_types=integer_types, c_expression="{src0} << {src1}", flags=frozenset((vector_scalar_operation, mixed_type_operation))), - operation("rshift", 2, - printable_name=">>", all_signatures=list((src_sig[0], src_sig) for src_sig in itertools.product(integer_types, repeat=2)), - source_types=integer_types, c_expression="{src0} >> {src1}", flags=frozenset((vector_scalar_operation, mixed_type_operation))), - operation("bit_and", 2, printable_name="&", source_types=integer_types, c_expression="{src0} & {src1}", flags=vector_scalar_operation), - operation("bit_xor", 2, printable_name="^", source_types=integer_types, c_expression="{src0} ^ {src1}", flags=vector_scalar_operation), - operation("bit_or", 2, printable_name="|", source_types=integer_types, c_expression="{src0} | {src1}", flags=vector_scalar_operation), - - operation("logic_and", 2, printable_name="&&", source_types=(bool_type,), c_expression="{src0} && {src1}"), - operation("logic_xor", 2, printable_name="^^", source_types=(bool_type,), c_expression="{src0} != {src1}"), - operation("logic_or", 2, printable_name="||", source_types=(bool_type,), c_expression="{src0} || {src1}"), - - operation("dot", 2, source_types=real_types, c_expression={'f': "dot_f(op[0], op[1])", 'd': "dot_d(op[0], op[1])"}, flags=horizontal_operation), - operation("min", 2, source_types=numeric_types, c_expression="MIN2({src0}, {src1})", flags=vector_scalar_operation), - operation("max", 2, source_types=numeric_types, c_expression="MAX2({src0}, {src1})", flags=vector_scalar_operation), - - operation("pow", 2, source_types=(float_type,), c_expression="powf({src0}, {src1})"), - - # Load a value the size of a given GLSL type from a uniform block. - # - # operand0 is the ir_constant uniform block index in the linked shader. - # operand1 is a byte offset within the uniform block. - operation("ubo_load", 2), - - # Multiplies a number by two to a power, part of ARB_gpu_shader5. - operation("ldexp", 2, - all_signatures=((float_type, (float_type, int_type)), - (double_type, (double_type, int_type))), - c_expression={'f': "ldexpf_flush_subnormal({src0}, {src1})", - 'd': "ldexp_flush_subnormal({src0}, {src1})"}), - - # Extract a scalar from a vector - # - # operand0 is the vector - # operand1 is the index of the field to read from operand0 - operation("vector_extract", 2, source_types=all_types, c_expression="anything-except-None"), - - # Interpolate fs input at offset - # - # operand0 is the fs input - # operand1 is the offset from the pixel center - operation("interpolate_at_offset", 2), - - # Interpolate fs input at sample position - # - # operand0 is the fs input - # operand1 is the sample ID - operation("interpolate_at_sample", 2), - - operation("atan2", 2, source_types=(float_type,), c_expression="atan2({src0}, {src1})"), - - # Fused floating-point multiply-add, part of ARB_gpu_shader5. - operation("fma", 3, source_types=real_types, c_expression="{src0} * {src1} + {src2}"), - - operation("lrp", 3, source_types=real_types, c_expression={'f': "{src0} * (1.0f - {src2}) + ({src1} * {src2})", 'd': "{src0} * (1.0 - {src2}) + ({src1} * {src2})"}), - - # Conditional Select - # - # A vector conditional select instruction (like ?:, but operating per- - # component on vectors). - # - # See also lower_instructions_visitor::ldexp_to_arith - operation("csel", 3, - all_signatures=zip(all_types, zip(len(all_types) * (bool_type,), all_types, all_types)), - c_expression="{src0} ? {src1} : {src2}"), - - operation("bitfield_extract", 3, - all_signatures=((int_type, (uint_type, int_type, int_type)), - (int_type, (int_type, int_type, int_type))), - c_expression={'u': "bitfield_extract_uint({src0}, {src1}, {src2})", - 'i': "bitfield_extract_int({src0}, {src1}, {src2})"}), - - # Generate a value with one field of a vector changed - # - # operand0 is the vector - # operand1 is the value to write into the vector result - # operand2 is the index in operand0 to be modified - operation("vector_insert", 3, source_types=all_types, c_expression="anything-except-None"), - - operation("bitfield_insert", 4, - all_signatures=((uint_type, (uint_type, uint_type, int_type, int_type)), - (int_type, (int_type, int_type, int_type, int_type))), - c_expression="bitfield_insert({src0}, {src1}, {src2}, {src3})"), - - operation("vector", 4, source_types=all_types, c_expression="anything-except-None"), -] - - -if __name__ == "__main__": - copyright = """/* - * Copyright (C) 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -""" - enum_template = mako.template.Template(copyright + """ -enum ir_expression_operation { -% for item in values: - ${item.get_enum_name()}, -% endfor - - /* Sentinels marking the last of each kind of operation. */ -% for item in lasts: - ir_last_${("un", "bin", "tri", "quad")[item.num_operands - 1]}op = ${item.get_enum_name()}, -% endfor - ir_last_opcode = ir_quadop_${lasts[3].name} -};""") - - strings_template = mako.template.Template(copyright + """ -const char *const ir_expression_operation_strings[] = { -% for item in values: - "${item.printable_name}", -% endfor -}; - -const char *const ir_expression_operation_enum_strings[] = { -% for item in values: - "${item.name}", -% endfor -};""") - - constant_template = mako.template.Template("""\ - switch (this->operation) { -% for op in values: - % if op.c_expression is not None: -${op.get_template()} - - % endif -% endfor - default: - /* FINISHME: Should handle all expression types. */ - return NULL; - } -""") - - if sys.argv[1] == "enum": - lasts = [None, None, None, None] - for item in reversed(ir_expression_operation): - i = item.num_operands - 1 - if lasts[i] is None: - lasts[i] = item - - print(enum_template.render(values=ir_expression_operation, - lasts=lasts)) - elif sys.argv[1] == "strings": - print(strings_template.render(values=ir_expression_operation)) - elif sys.argv[1] == "constant": - print(constant_template.render(values=ir_expression_operation)) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation_constant.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation_constant.h deleted file mode 100644 index 0133c00..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation_constant.h +++ /dev/null @@ -1,2205 +0,0 @@ - switch (this->operation) { - case ir_unop_bit_not: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = ~ op[0]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.i[c] = ~ op[0]->value.i[c]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = ~ op[0]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = ~ op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_logic_not: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.b[c] = !op[0]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_neg: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = -((int) op[0]->value.u[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = -op[0]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = -op[0]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = -op[0]->value.d[c]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = -((int64_t) op[0]->value.u64[c]); - break; - case GLSL_TYPE_INT64: - data.i64[c] = -op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_abs: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c] < 0 ? -op[0]->value.i[c] : op[0]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = fabsf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = fabs(op[0]->value.d[c]); - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.i64[c] < 0 ? -op[0]->value.i64[c] : op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_sign: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.i[c] = (op[0]->value.i[c] > 0) - (op[0]->value.i[c] < 0); - break; - case GLSL_TYPE_FLOAT: - data.f[c] = float((op[0]->value.f[c] > 0.0F) - (op[0]->value.f[c] < 0.0F)); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = double((op[0]->value.d[c] > 0.0) - (op[0]->value.d[c] < 0.0)); - break; - case GLSL_TYPE_INT64: - data.i64[c] = (op[0]->value.i64[c] > 0) - (op[0]->value.i64[c] < 0); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_rcp: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 1.0F / op[0]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = 1.0 / op[0]->value.d[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_rsq: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 1.0F / sqrtf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = 1.0 / sqrt(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_sqrt: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = sqrtf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = sqrt(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_exp: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = expf(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_log: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = logf(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_exp2: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = exp2f(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_log2: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = log2f(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.i[c] = (int) op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2u: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u[c] = (unsigned) op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.f[c] = (float) op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2b: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] != 0.0F ? true : false; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_b2f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_b2f16: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2b: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] ? true : false; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] ? true : false; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_b2i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.i[c] = op[0]->value.b[c] ? 1 : 0; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u2f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.f[c] = (float) op[0]->value.u[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2u: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.u[c] = op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u2i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.i[c] = op[0]->value.u[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_d2f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.f[c] = op[0]->value.d[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2d: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.d[c] = op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2f16: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2fmp: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f162f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2imp: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u2u: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u2ump: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_d2i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.i[c] = op[0]->value.d[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2d: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.d[c] = op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_d2u: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.u[c] = op[0]->value.d[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u2d: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.d[c] = op[0]->value.u[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_d2b: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.b[c] = op[0]->value.d[c] != 0.0; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f162b: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] != 0.0; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_i2f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.f[c] = bitcast_u2f(op[0]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_f2i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.i[c] = bitcast_f2u(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_u2f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.f[c] = bitcast_u2f(op[0]->value.u[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_f2u: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u[c] = bitcast_f2u(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_u642d: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT64: - data.d[c] = bitcast_u642d(op[0]->value.u64[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_i642d: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT64: - data.d[c] = bitcast_i642d(op[0]->value.i64[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_d2u64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.u64[c] = bitcast_d2u64(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bitcast_d2i64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.i64[c] = bitcast_d2i64(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i642i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT64: - data.i[c] = op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u642i: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT64: - data.i[c] = op[0]->value.u64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i642u: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT64: - data.u[c] = op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u642u: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT64: - data.u[c] = op[0]->value.u64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i642b: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT64: - data.b[c] = op[0]->value.i64[c] != 0; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i642f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT64: - data.f[c] = op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u642f: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT64: - data.f[c] = op[0]->value.u64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i642d: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT64: - data.d[c] = op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u642d: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT64: - data.d[c] = op[0]->value.u64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2i64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.i64[c] = op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u2i64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.i64[c] = op[0]->value.u[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_b2i64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.i64[c] = op[0]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2i64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.i64[c] = op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_d2i64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.i64[c] = op[0]->value.d[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i2u64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT: - data.u64[c] = op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u2u64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u64[c] = op[0]->value.u[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_f2u64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u64[c] = op[0]->value.f[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_d2u64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_DOUBLE: - data.u64[c] = op[0]->value.d[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_u642i64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT64: - data.i64[c] = op[0]->value.u64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_i642u64: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_INT64: - data.u64[c] = op[0]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_trunc: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = truncf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = trunc(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_ceil: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = ceilf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = ceil(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_floor: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = floorf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = floor(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_fract: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c] - floorf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c] - floor(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_round_even: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = _mesa_roundevenf(op[0]->value.f[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = _mesa_roundeven(op[0]->value.d[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_sin: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = sinf(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_cos: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = cosf(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_atan: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = atan(op[0]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_dFdx: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 0.0f; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_dFdx_coarse: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 0.0f; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_dFdx_fine: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 0.0f; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_dFdy: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 0.0f; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_dFdy_coarse: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 0.0f; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_dFdy_fine: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = 0.0f; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_pack_snorm_2x16: - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u[0] = pack_2x16(pack_snorm_1x16, op[0]->value.f[0], op[0]->value.f[1]); - break; - default: - unreachable("invalid type"); - } - break; - - case ir_unop_pack_snorm_4x8: - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u[0] = pack_4x8(pack_snorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]); - break; - default: - unreachable("invalid type"); - } - break; - - case ir_unop_pack_unorm_2x16: - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u[0] = pack_2x16(pack_unorm_1x16, op[0]->value.f[0], op[0]->value.f[1]); - break; - default: - unreachable("invalid type"); - } - break; - - case ir_unop_pack_unorm_4x8: - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u[0] = pack_4x8(pack_unorm_1x8, op[0]->value.f[0], op[0]->value.f[1], op[0]->value.f[2], op[0]->value.f[3]); - break; - default: - unreachable("invalid type"); - } - break; - - case ir_unop_pack_half_2x16: - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.u[0] = pack_2x16(pack_half_1x16, op[0]->value.f[0], op[0]->value.f[1]); - break; - default: - unreachable("invalid type"); - } - break; - - case ir_unop_unpack_snorm_2x16: - unpack_2x16(unpack_snorm_1x16, op[0]->value.u[0], &data.f[0], &data.f[1]); - break; - - case ir_unop_unpack_snorm_4x8: - unpack_4x8(unpack_snorm_1x8, op[0]->value.u[0], &data.f[0], &data.f[1], &data.f[2], &data.f[3]); - break; - - case ir_unop_unpack_unorm_2x16: - unpack_2x16(unpack_unorm_1x16, op[0]->value.u[0], &data.f[0], &data.f[1]); - break; - - case ir_unop_unpack_unorm_4x8: - unpack_4x8(unpack_unorm_1x8, op[0]->value.u[0], &data.f[0], &data.f[1], &data.f[2], &data.f[3]); - break; - - case ir_unop_unpack_half_2x16: - unpack_2x16(unpack_half_1x16, op[0]->value.u[0], &data.f[0], &data.f[1]); - break; - - case ir_unop_bitfield_reverse: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = bitfield_reverse(op[0]->value.u[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = bitfield_reverse(op[0]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_bit_count: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.i[c] = util_bitcount(op[0]->value.u[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = util_bitcount(op[0]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_find_msb: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.i[c] = find_msb_uint(op[0]->value.u[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = find_msb_int(op[0]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_find_lsb: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.i[c] = find_msb_uint(op[0]->value.u[c] & -op[0]->value.u[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = find_msb_uint(op[0]->value.i[c] & -op[0]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_clz: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = (unsigned)(31 - find_msb_uint(op[0]->value.u[c])); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_saturate: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = CLAMP(op[0]->value.f[c], 0.0f, 1.0f); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_unop_pack_double_2x32: - data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1]); - break; - - case ir_unop_unpack_double_2x32: - unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1]); - break; - - case ir_unop_pack_sampler_2x32: - data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1]); - break; - - case ir_unop_pack_image_2x32: - data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1]); - break; - - case ir_unop_unpack_sampler_2x32: - unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1]); - break; - - case ir_unop_unpack_image_2x32: - unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1]); - break; - - case ir_unop_pack_int_2x32: - data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1]); - break; - - case ir_unop_pack_uint_2x32: - data.u64[0] = pack_2x32(op[0]->value.u[0], op[0]->value.u[1]); - break; - - case ir_unop_unpack_int_2x32: - unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1]); - break; - - case ir_unop_unpack_uint_2x32: - unpack_2x32(op[0]->value.u64[0], &data.u[0], &data.u[1]); - break; - - case ir_binop_add: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c0] + op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c0] + op[1]->value.i[c1]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c0] + op[1]->value.f[c1]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c0] + op[1]->value.d[c1]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[0]->value.u64[c0] + op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.i64[c0] + op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_sub: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c0] - op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c0] - op[1]->value.i[c1]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c0] - op[1]->value.f[c1]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c0] - op[1]->value.d[c1]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[0]->value.u64[c0] - op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.i64[c0] - op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_add_sat: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = (op[0]->value.u[c] + op[1]->value.u[c]) < op[0]->value.u[c] ? UINT32_MAX : (op[0]->value.u[c] + op[1]->value.u[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = iadd_saturate(op[0]->value.i[c], op[1]->value.i[c]); - break; - case GLSL_TYPE_UINT64: - data.u64[c] = (op[0]->value.u64[c] + op[1]->value.u64[c]) < op[0]->value.u64[c] ? UINT64_MAX : (op[0]->value.u64[c] + op[1]->value.u64[c]); - break; - case GLSL_TYPE_INT64: - data.i64[c] = iadd64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_sub_sat: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? 0 : op[0]->value.u[c] - op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.i[c] = isub_saturate(op[0]->value.i[c], op[1]->value.i[c]); - break; - case GLSL_TYPE_UINT64: - data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? 0 : op[0]->value.u64[c] - op[1]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = isub64_saturate(op[0]->value.i64[c], op[1]->value.i64[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_abs_sub: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = (op[1]->value.u[c] > op[0]->value.u[c]) ? op[1]->value.u[c] - op[0]->value.u[c] : op[0]->value.u[c] - op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.i[c] = (op[1]->value.i[c] > op[0]->value.i[c]) ? (unsigned)op[1]->value.i[c] - (unsigned)op[0]->value.i[c] : (unsigned)op[0]->value.i[c] - (unsigned)op[1]->value.i[c]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = (op[1]->value.u64[c] > op[0]->value.u64[c]) ? op[1]->value.u64[c] - op[0]->value.u64[c] : op[0]->value.u64[c] - op[1]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = (op[1]->value.i64[c] > op[0]->value.i64[c]) ? (uint64_t)op[1]->value.i64[c] - (uint64_t)op[0]->value.i64[c] : (uint64_t)op[0]->value.i64[c] - (uint64_t)op[1]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_avg: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] & op[1]->value.u[c]) & 1); - break; - case GLSL_TYPE_INT: - data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] & op[1]->value.i[c]) & 1); - break; - case GLSL_TYPE_UINT64: - data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] & op[1]->value.u64[c]) & 1); - break; - case GLSL_TYPE_INT64: - data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] & op[1]->value.i64[c]) & 1); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_avg_round: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = (op[0]->value.u[c] >> 1) + (op[1]->value.u[c] >> 1) + ((op[0]->value.u[c] | op[1]->value.u[c]) & 1); - break; - case GLSL_TYPE_INT: - data.i[c] = (op[0]->value.i[c] >> 1) + (op[1]->value.i[c] >> 1) + ((op[0]->value.i[c] | op[1]->value.i[c]) & 1); - break; - case GLSL_TYPE_UINT64: - data.u64[c] = (op[0]->value.u64[c] >> 1) + (op[1]->value.u64[c] >> 1) + ((op[0]->value.u64[c] | op[1]->value.u64[c]) & 1); - break; - case GLSL_TYPE_INT64: - data.i64[c] = (op[0]->value.i64[c] >> 1) + (op[1]->value.i64[c] >> 1) + ((op[0]->value.i64[c] | op[1]->value.i64[c]) & 1); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_mul: - /* Check for equal types, or unequal types involving scalars */ - if ((op[0]->type == op[1]->type && !op[0]->type->is_matrix()) - || op0_scalar || op1_scalar) { - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c0] * op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c0] * op[1]->value.i[c1]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c0] * op[1]->value.f[c1]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c0] * op[1]->value.d[c1]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[0]->value.u64[c0] * op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.i64[c0] * op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - } else { - assert(op[0]->type->is_matrix() || op[1]->type->is_matrix()); - - /* Multiply an N-by-M matrix with an M-by-P matrix. Since either - * matrix can be a GLSL vector, either N or P can be 1. - * - * For vec*mat, the vector is treated as a row vector. This - * means the vector is a 1-row x M-column matrix. - * - * For mat*vec, the vector is treated as a column vector. Since - * matrix_columns is 1 for vectors, this just works. - */ - const unsigned n = op[0]->type->is_vector() - ? 1 : op[0]->type->vector_elements; - const unsigned m = op[1]->type->vector_elements; - const unsigned p = op[1]->type->matrix_columns; - for (unsigned j = 0; j < p; j++) { - for (unsigned i = 0; i < n; i++) { - for (unsigned k = 0; k < m; k++) { - if (op[0]->type->is_double()) - data.d[i+n*j] += op[0]->value.d[i+n*k]*op[1]->value.d[k+m*j]; - else - data.f[i+n*j] += op[0]->value.f[i+n*k]*op[1]->value.f[k+m*j]; - } - } - } - } - break; - - case ir_binop_mul_32x16: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c] * (uint16_t)op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c] * (int16_t)op[0]->value.i[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_div: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[1]->value.u[c1] == 0 ? 0 : op[0]->value.u[c0] / op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[1]->value.i[c1] == 0 ? 0 : op[0]->value.i[c0] / op[1]->value.i[c1]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c0] / op[1]->value.f[c1]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c0] / op[1]->value.d[c1]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[1]->value.u64[c1] == 0 ? 0 : op[0]->value.u64[c0] / op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] / op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_mod: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[1]->value.u[c1] == 0 ? 0 : op[0]->value.u[c0] % op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[1]->value.i[c1] == 0 ? 0 : op[0]->value.i[c0] % op[1]->value.i[c1]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c0] - op[1]->value.f[c1] * floorf(op[0]->value.f[c0] / op[1]->value.f[c1]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c0] - op[1]->value.d[c1] * floor(op[0]->value.d[c0] / op[1]->value.d[c1]); - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[1]->value.u64[c1] == 0 ? 0 : op[0]->value.u64[c0] % op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[1]->value.i64[c1] == 0 ? 0 : op[0]->value.i64[c0] % op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_less: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] < op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] < op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] < op[1]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.b[c] = op[0]->value.d[c] < op[1]->value.d[c]; - break; - case GLSL_TYPE_UINT64: - data.b[c] = op[0]->value.u64[c] < op[1]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.b[c] = op[0]->value.i64[c] < op[1]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_gequal: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] >= op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] >= op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] >= op[1]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.b[c] = op[0]->value.d[c] >= op[1]->value.d[c]; - break; - case GLSL_TYPE_UINT64: - data.b[c] = op[0]->value.u64[c] >= op[1]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.b[c] = op[0]->value.i64[c] >= op[1]->value.i64[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_equal: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] == op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] == op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] == op[1]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.b[c] = op[0]->value.d[c] == op[1]->value.d[c]; - break; - case GLSL_TYPE_UINT64: - data.b[c] = op[0]->value.u64[c] == op[1]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.b[c] = op[0]->value.i64[c] == op[1]->value.i64[c]; - break; - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] == op[1]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_nequal: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.b[c] = op[0]->value.u[c] != op[1]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.b[c] = op[0]->value.i[c] != op[1]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.b[c] = op[0]->value.f[c] != op[1]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.b[c] = op[0]->value.d[c] != op[1]->value.d[c]; - break; - case GLSL_TYPE_UINT64: - data.b[c] = op[0]->value.u64[c] != op[1]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.b[c] = op[0]->value.i64[c] != op[1]->value.i64[c]; - break; - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] != op[1]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_all_equal: - data.b[0] = op[0]->has_value(op[1]); - break; - - case ir_binop_any_nequal: - data.b[0] = !op[0]->has_value(op[1]); - break; - - case ir_binop_lshift: - assert(op[0]->type->base_type == GLSL_TYPE_UINT || - op[0]->type->base_type == GLSL_TYPE_INT || - op[0]->type->base_type == GLSL_TYPE_UINT64 || - op[0]->type->base_type == GLSL_TYPE_INT64); - assert(op[1]->type->base_type == GLSL_TYPE_UINT || - op[1]->type->base_type == GLSL_TYPE_INT || - op[1]->type->base_type == GLSL_TYPE_UINT64 || - op[1]->type->base_type == GLSL_TYPE_INT64); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.u[c] = op[0]->value.u[c0] << op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.u[c] = op[0]->value.u[c0] << op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.u[c] = op[0]->value.u[c0] << op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.u[c] = op[0]->value.u[c0] << op[1]->value.i64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.i[c] = op[0]->value.i[c0] << op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.i[c] = op[0]->value.i[c0] << op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.i[c] = op[0]->value.i[c0] << op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.i[c] = op[0]->value.i[c0] << op[1]->value.i64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.u64[c] = op[0]->value.u64[c0] << op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.u64[c] = op[0]->value.u64[c0] << op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.u64[c] = op[0]->value.u64[c0] << op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.u64[c] = op[0]->value.u64[c0] << op[1]->value.i64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.i64[c] = op[0]->value.i64[c0] << op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.i64[c] = op[0]->value.i64[c0] << op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.i64[c] = op[0]->value.i64[c0] << op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.i64[c] = op[0]->value.i64[c0] << op[1]->value.i64[c1]; - } else { - unreachable("invalid types"); - } - } - break; - - case ir_binop_rshift: - assert(op[0]->type->base_type == GLSL_TYPE_UINT || - op[0]->type->base_type == GLSL_TYPE_INT || - op[0]->type->base_type == GLSL_TYPE_UINT64 || - op[0]->type->base_type == GLSL_TYPE_INT64); - assert(op[1]->type->base_type == GLSL_TYPE_UINT || - op[1]->type->base_type == GLSL_TYPE_INT || - op[1]->type->base_type == GLSL_TYPE_UINT64 || - op[1]->type->base_type == GLSL_TYPE_INT64); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.u[c] = op[0]->value.u[c0] >> op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.u[c] = op[0]->value.u[c0] >> op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.u[c] = op[0]->value.u[c0] >> op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.u[c] = op[0]->value.u[c0] >> op[1]->value.i64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.i[c] = op[0]->value.i[c0] >> op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.i[c] = op[0]->value.i[c0] >> op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.i[c] = op[0]->value.i[c0] >> op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.i[c] = op[0]->value.i[c0] >> op[1]->value.i64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.u64[c] = op[0]->value.u64[c0] >> op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.u64[c] = op[0]->value.u64[c0] >> op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.u64[c] = op[0]->value.u64[c0] >> op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_UINT64 && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.u64[c] = op[0]->value.u64[c0] >> op[1]->value.i64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_UINT) { - data.i64[c] = op[0]->value.i64[c0] >> op[1]->value.u[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_INT) { - data.i64[c] = op[0]->value.i64[c0] >> op[1]->value.i[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_UINT64) { - data.i64[c] = op[0]->value.i64[c0] >> op[1]->value.u64[c1]; - } else if (op[0]->type->base_type == GLSL_TYPE_INT64 && - op[1]->type->base_type == GLSL_TYPE_INT64) { - data.i64[c] = op[0]->value.i64[c0] >> op[1]->value.i64[c1]; - } else { - unreachable("invalid types"); - } - } - break; - - case ir_binop_bit_and: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c0] & op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c0] & op[1]->value.i[c1]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[0]->value.u64[c0] & op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.i64[c0] & op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_bit_xor: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c0] ^ op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c0] ^ op[1]->value.i[c1]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[0]->value.u64[c0] ^ op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.i64[c0] ^ op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_bit_or: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.u[c0] | op[1]->value.u[c1]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.i[c0] | op[1]->value.i[c1]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[0]->value.u64[c0] | op[1]->value.u64[c1]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.i64[c0] | op[1]->value.i64[c1]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_logic_and: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] && op[1]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_logic_xor: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] != op[1]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_logic_or: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] || op[1]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_dot: - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[0] = dot_f(op[0], op[1]); - break; - case GLSL_TYPE_DOUBLE: - data.d[0] = dot_d(op[0], op[1]); - break; - default: - unreachable("invalid type"); - } - break; - - case ir_binop_min: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = MIN2(op[0]->value.u[c0], op[1]->value.u[c1]); - break; - case GLSL_TYPE_INT: - data.i[c] = MIN2(op[0]->value.i[c0], op[1]->value.i[c1]); - break; - case GLSL_TYPE_FLOAT: - data.f[c] = MIN2(op[0]->value.f[c0], op[1]->value.f[c1]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = MIN2(op[0]->value.d[c0], op[1]->value.d[c1]); - break; - case GLSL_TYPE_UINT64: - data.u64[c] = MIN2(op[0]->value.u64[c0], op[1]->value.u64[c1]); - break; - case GLSL_TYPE_INT64: - data.i64[c] = MIN2(op[0]->value.i64[c0], op[1]->value.i64[c1]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_max: - assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar); - for (unsigned c = 0, c0 = 0, c1 = 0; - c < components; - c0 += c0_inc, c1 += c1_inc, c++) { - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = MAX2(op[0]->value.u[c0], op[1]->value.u[c1]); - break; - case GLSL_TYPE_INT: - data.i[c] = MAX2(op[0]->value.i[c0], op[1]->value.i[c1]); - break; - case GLSL_TYPE_FLOAT: - data.f[c] = MAX2(op[0]->value.f[c0], op[1]->value.f[c1]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = MAX2(op[0]->value.d[c0], op[1]->value.d[c1]); - break; - case GLSL_TYPE_UINT64: - data.u64[c] = MAX2(op[0]->value.u64[c0], op[1]->value.u64[c1]); - break; - case GLSL_TYPE_INT64: - data.i64[c] = MAX2(op[0]->value.i64[c0], op[1]->value.i64[c1]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_pow: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = powf(op[0]->value.f[c], op[1]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_ldexp: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = ldexpf_flush_subnormal(op[0]->value.f[c], op[1]->value.i[c]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = ldexp_flush_subnormal(op[0]->value.d[c], op[1]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_binop_vector_extract: { - const int c = CLAMP(op[1]->value.i[0], 0, - (int) op[0]->type->vector_elements - 1); - - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[0] = op[0]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.i[0] = op[0]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.f[0] = op[0]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.d[0] = op[0]->value.d[c]; - break; - case GLSL_TYPE_UINT64: - data.u64[0] = op[0]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.i64[0] = op[0]->value.i64[c]; - break; - case GLSL_TYPE_BOOL: - data.b[0] = op[0]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - break; - } - - case ir_binop_atan2: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = atan2(op[0]->value.f[c], op[1]->value.f[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_triop_fma: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c] * op[1]->value.f[c] + op[2]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c] * op[1]->value.d[c] + op[2]->value.d[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_triop_lrp: { - assert(op[0]->type->is_float() || op[0]->type->is_double()); - assert(op[1]->type->is_float() || op[1]->type->is_double()); - assert(op[2]->type->is_float() || op[2]->type->is_double()); - - unsigned c2_inc = op[2]->type->is_scalar() ? 0 : 1; - for (unsigned c = 0, c2 = 0; c < components; c2 += c2_inc, c++) { - switch (return_type->base_type) { - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.f[c] * (1.0f - op[2]->value.f[c2]) + (op[1]->value.f[c] * op[2]->value.f[c2]); - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.d[c] * (1.0 - op[2]->value.d[c2]) + (op[1]->value.d[c] * op[2]->value.d[c2]); - break; - default: - unreachable("invalid type"); - } - } - break; - } - - case ir_triop_csel: - for (unsigned c = 0; c < components; c++) { - switch (return_type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[0]->value.b[c] ? op[1]->value.u[c] : op[2]->value.u[c]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[0]->value.b[c] ? op[1]->value.i[c] : op[2]->value.i[c]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = op[0]->value.b[c] ? op[1]->value.f[c] : op[2]->value.f[c]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[0]->value.b[c] ? op[1]->value.d[c] : op[2]->value.d[c]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[0]->value.b[c] ? op[1]->value.u64[c] : op[2]->value.u64[c]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[0]->value.b[c] ? op[1]->value.i64[c] : op[2]->value.i64[c]; - break; - case GLSL_TYPE_BOOL: - data.b[c] = op[0]->value.b[c] ? op[1]->value.b[c] : op[2]->value.b[c]; - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_triop_bitfield_extract: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.i[c] = bitfield_extract_uint(op[0]->value.u[c], op[1]->value.i[c], op[2]->value.i[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = bitfield_extract_int(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_triop_vector_insert: { - const unsigned idx = op[2]->value.u[0]; - - memcpy(&data, &op[0]->value, sizeof(data)); - - switch (return_type->base_type) { - case GLSL_TYPE_UINT: - data.u[idx] = op[1]->value.u[0]; - break; - case GLSL_TYPE_INT: - data.i[idx] = op[1]->value.i[0]; - break; - case GLSL_TYPE_FLOAT: - data.f[idx] = op[1]->value.f[0]; - break; - case GLSL_TYPE_DOUBLE: - data.d[idx] = op[1]->value.d[0]; - break; - case GLSL_TYPE_UINT64: - data.u64[idx] = op[1]->value.u64[0]; - break; - case GLSL_TYPE_INT64: - data.i64[idx] = op[1]->value.i64[0]; - break; - case GLSL_TYPE_BOOL: - data.b[idx] = op[1]->value.b[0]; - break; - default: - unreachable("invalid type"); - } - break; - } - - case ir_quadop_bitfield_insert: - for (unsigned c = 0; c < op[0]->type->components(); c++) { - switch (op[0]->type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = bitfield_insert(op[0]->value.u[c], op[1]->value.u[c], op[2]->value.i[c], op[3]->value.i[c]); - break; - case GLSL_TYPE_INT: - data.i[c] = bitfield_insert(op[0]->value.i[c], op[1]->value.i[c], op[2]->value.i[c], op[3]->value.i[c]); - break; - default: - unreachable("invalid type"); - } - } - break; - - case ir_quadop_vector: - for (unsigned c = 0; c < return_type->vector_elements; c++) { - switch (return_type->base_type) { - case GLSL_TYPE_UINT: - data.u[c] = op[c]->value.u[0]; - break; - case GLSL_TYPE_INT: - data.i[c] = op[c]->value.i[0]; - break; - case GLSL_TYPE_FLOAT: - data.f[c] = op[c]->value.f[0]; - break; - case GLSL_TYPE_DOUBLE: - data.d[c] = op[c]->value.d[0]; - break; - case GLSL_TYPE_UINT64: - data.u64[c] = op[c]->value.u64[0]; - break; - case GLSL_TYPE_INT64: - data.i64[c] = op[c]->value.i64[0]; - break; - case GLSL_TYPE_BOOL: - data.b[c] = op[c]->value.b[0]; - break; - default: - unreachable("invalid type"); - } - } - break; - - default: - /* FINISHME: Should handle all expression types. */ - return NULL; - } - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation_strings.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation_strings.h deleted file mode 100644 index ef90c1a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_expression_operation_strings.h +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (C) 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -const char *const ir_expression_operation_strings[] = { - "~", - "!", - "neg", - "abs", - "sign", - "rcp", - "rsq", - "sqrt", - "exp", - "log", - "exp2", - "log2", - "f2i", - "f2u", - "i2f", - "f2b", - "b2f", - "b2f16", - "i2b", - "b2i", - "u2f", - "i2u", - "u2i", - "d2f", - "f2d", - "f2f16", - "f2fmp", - "f162f", - "i2i", - "i2imp", - "u2u", - "u2ump", - "d2i", - "i2d", - "d2u", - "u2d", - "d2b", - "f162b", - "bitcast_i2f", - "bitcast_f2i", - "bitcast_u2f", - "bitcast_f2u", - "bitcast_u642d", - "bitcast_i642d", - "bitcast_d2u64", - "bitcast_d2i64", - "i642i", - "u642i", - "i642u", - "u642u", - "i642b", - "i642f", - "u642f", - "i642d", - "u642d", - "i2i64", - "u2i64", - "b2i64", - "f2i64", - "d2i64", - "i2u64", - "u2u64", - "f2u64", - "d2u64", - "u642i64", - "i642u64", - "trunc", - "ceil", - "floor", - "fract", - "round_even", - "sin", - "cos", - "atan", - "dFdx", - "dFdxCoarse", - "dFdxFine", - "dFdy", - "dFdyCoarse", - "dFdyFine", - "packSnorm2x16", - "packSnorm4x8", - "packUnorm2x16", - "packUnorm4x8", - "packHalf2x16", - "unpackSnorm2x16", - "unpackSnorm4x8", - "unpackUnorm2x16", - "unpackUnorm4x8", - "unpackHalf2x16", - "bitfield_reverse", - "bit_count", - "find_msb", - "find_lsb", - "clz", - "sat", - "packDouble2x32", - "unpackDouble2x32", - "packSampler2x32", - "packImage2x32", - "unpackSampler2x32", - "unpackImage2x32", - "frexp_sig", - "frexp_exp", - "subroutine_to_int", - "interpolate_at_centroid", - "get_buffer_size", - "ssbo_unsized_array_length", - "implicitly_sized_array_length", - "packInt2x32", - "packUint2x32", - "unpackInt2x32", - "unpackUint2x32", - "+", - "-", - "add_sat", - "sub_sat", - "abs_sub", - "average", - "average_rounded", - "*", - "*", - "imul_high", - "/", - "carry", - "borrow", - "%", - "<", - ">=", - "==", - "!=", - "all_equal", - "any_nequal", - "<<", - ">>", - "&", - "^", - "|", - "&&", - "^^", - "||", - "dot", - "min", - "max", - "pow", - "ubo_load", - "ldexp", - "vector_extract", - "interpolate_at_offset", - "interpolate_at_sample", - "atan2", - "fma", - "lrp", - "csel", - "bitfield_extract", - "vector_insert", - "bitfield_insert", - "vector", -}; - -const char *const ir_expression_operation_enum_strings[] = { - "bit_not", - "logic_not", - "neg", - "abs", - "sign", - "rcp", - "rsq", - "sqrt", - "exp", - "log", - "exp2", - "log2", - "f2i", - "f2u", - "i2f", - "f2b", - "b2f", - "b2f16", - "i2b", - "b2i", - "u2f", - "i2u", - "u2i", - "d2f", - "f2d", - "f2f16", - "f2fmp", - "f162f", - "i2i", - "i2imp", - "u2u", - "u2ump", - "d2i", - "i2d", - "d2u", - "u2d", - "d2b", - "f162b", - "bitcast_i2f", - "bitcast_f2i", - "bitcast_u2f", - "bitcast_f2u", - "bitcast_u642d", - "bitcast_i642d", - "bitcast_d2u64", - "bitcast_d2i64", - "i642i", - "u642i", - "i642u", - "u642u", - "i642b", - "i642f", - "u642f", - "i642d", - "u642d", - "i2i64", - "u2i64", - "b2i64", - "f2i64", - "d2i64", - "i2u64", - "u2u64", - "f2u64", - "d2u64", - "u642i64", - "i642u64", - "trunc", - "ceil", - "floor", - "fract", - "round_even", - "sin", - "cos", - "atan", - "dFdx", - "dFdx_coarse", - "dFdx_fine", - "dFdy", - "dFdy_coarse", - "dFdy_fine", - "pack_snorm_2x16", - "pack_snorm_4x8", - "pack_unorm_2x16", - "pack_unorm_4x8", - "pack_half_2x16", - "unpack_snorm_2x16", - "unpack_snorm_4x8", - "unpack_unorm_2x16", - "unpack_unorm_4x8", - "unpack_half_2x16", - "bitfield_reverse", - "bit_count", - "find_msb", - "find_lsb", - "clz", - "saturate", - "pack_double_2x32", - "unpack_double_2x32", - "pack_sampler_2x32", - "pack_image_2x32", - "unpack_sampler_2x32", - "unpack_image_2x32", - "frexp_sig", - "frexp_exp", - "subroutine_to_int", - "interpolate_at_centroid", - "get_buffer_size", - "ssbo_unsized_array_length", - "implicitly_sized_array_length", - "pack_int_2x32", - "pack_uint_2x32", - "unpack_int_2x32", - "unpack_uint_2x32", - "add", - "sub", - "add_sat", - "sub_sat", - "abs_sub", - "avg", - "avg_round", - "mul", - "mul_32x16", - "imul_high", - "div", - "carry", - "borrow", - "mod", - "less", - "gequal", - "equal", - "nequal", - "all_equal", - "any_nequal", - "lshift", - "rshift", - "bit_and", - "bit_xor", - "bit_or", - "logic_and", - "logic_xor", - "logic_or", - "dot", - "min", - "max", - "pow", - "ubo_load", - "ldexp", - "vector_extract", - "interpolate_at_offset", - "interpolate_at_sample", - "atan2", - "fma", - "lrp", - "csel", - "bitfield_extract", - "vector_insert", - "bitfield_insert", - "vector", -}; diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function.cpp deleted file mode 100644 index 44edf8b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../glsl_types.h" -#include "ir.h" -#include "glsl_parser_extras.h" -#include "../../mesa/main/errors.h" - -typedef enum { - PARAMETER_LIST_NO_MATCH, - PARAMETER_LIST_EXACT_MATCH, - PARAMETER_LIST_INEXACT_MATCH /*< Match requires implicit conversion. */ -} parameter_list_match_t; - -/** - * \brief Check if two parameter lists match. - * - * \param list_a Parameters of the function definition. - * \param list_b Actual parameters passed to the function. - * \see matching_signature() - */ -static parameter_list_match_t -parameter_lists_match(_mesa_glsl_parse_state *state, - const exec_list *list_a, const exec_list *list_b) -{ - const exec_node *node_a = list_a->get_head_raw(); - const exec_node *node_b = list_b->get_head_raw(); - - /* This is set to true if there is an inexact match requiring an implicit - * conversion. */ - bool inexact_match = false; - - for (/* empty */ - ; !node_a->is_tail_sentinel() - ; node_a = node_a->next, node_b = node_b->next) { - /* If all of the parameters from the other parameter list have been - * exhausted, the lists have different length and, by definition, - * do not match. - */ - if (node_b->is_tail_sentinel()) - return PARAMETER_LIST_NO_MATCH; - - - const ir_variable *const param = (ir_variable *) node_a; - const ir_rvalue *const actual = (ir_rvalue *) node_b; - - if (param->type == actual->type) - continue; - - /* Try to find an implicit conversion from actual to param. */ - inexact_match = true; - switch ((enum ir_variable_mode)(param->data.mode)) { - case ir_var_auto: - case ir_var_uniform: - case ir_var_shader_storage: - case ir_var_temporary: - /* These are all error conditions. It is invalid for a parameter to - * a function to be declared as auto (not in, out, or inout) or - * as uniform. - */ - assert(0); - return PARAMETER_LIST_NO_MATCH; - - case ir_var_const_in: - case ir_var_function_in: - if (param->data.implicit_conversion_prohibited || - !actual->type->can_implicitly_convert_to(param->type, state)) - return PARAMETER_LIST_NO_MATCH; - break; - - case ir_var_function_out: - if (!param->type->can_implicitly_convert_to(actual->type, state)) - return PARAMETER_LIST_NO_MATCH; - break; - - case ir_var_function_inout: - /* Since there are no bi-directional automatic conversions (e.g., - * there is int -> float but no float -> int), inout parameters must - * be exact matches. - */ - return PARAMETER_LIST_NO_MATCH; - - default: - assert(false); - return PARAMETER_LIST_NO_MATCH; - } - } - - /* If all of the parameters from the other parameter list have been - * exhausted, the lists have different length and, by definition, do not - * match. - */ - if (!node_b->is_tail_sentinel()) - return PARAMETER_LIST_NO_MATCH; - - if (inexact_match) - return PARAMETER_LIST_INEXACT_MATCH; - else - return PARAMETER_LIST_EXACT_MATCH; -} - - -/* Classes of parameter match, sorted (mostly) best matches first. - * See is_better_parameter_match() below for the exceptions. - * */ -typedef enum { - PARAMETER_EXACT_MATCH, - PARAMETER_FLOAT_TO_DOUBLE, - PARAMETER_INT_TO_FLOAT, - PARAMETER_INT_TO_DOUBLE, - PARAMETER_OTHER_CONVERSION, -} parameter_match_t; - - -static parameter_match_t -get_parameter_match_type(const ir_variable *param, - const ir_rvalue *actual) -{ - const glsl_type *from_type; - const glsl_type *to_type; - - if (param->data.mode == ir_var_function_out) { - from_type = param->type; - to_type = actual->type; - } else { - from_type = actual->type; - to_type = param->type; - } - - if (from_type == to_type) - return PARAMETER_EXACT_MATCH; - - if (to_type->is_double()) { - if (from_type->is_float()) - return PARAMETER_FLOAT_TO_DOUBLE; - return PARAMETER_INT_TO_DOUBLE; - } - - if (to_type->is_float()) - return PARAMETER_INT_TO_FLOAT; - - /* int -> uint and any other oddball conversions */ - return PARAMETER_OTHER_CONVERSION; -} - - -static bool -is_better_parameter_match(parameter_match_t a_match, - parameter_match_t b_match) -{ - /* From section 6.1 of the GLSL 4.00 spec (and the ARB_gpu_shader5 spec): - * - * 1. An exact match is better than a match involving any implicit - * conversion. - * - * 2. A match involving an implicit conversion from float to double - * is better than match involving any other implicit conversion. - * - * [XXX: Not in GLSL 4.0: Only in ARB_gpu_shader5: - * 3. A match involving an implicit conversion from either int or uint - * to float is better than a match involving an implicit conversion - * from either int or uint to double.] - * - * If none of the rules above apply to a particular pair of conversions, - * neither conversion is considered better than the other. - * - * -- - * - * Notably, the int->uint conversion is *not* considered to be better - * or worse than int/uint->float or int/uint->double. - */ - - if (a_match >= PARAMETER_INT_TO_FLOAT && b_match == PARAMETER_OTHER_CONVERSION) - return false; - - return a_match < b_match; -} - - -static bool -is_best_inexact_overload(const exec_list *actual_parameters, - ir_function_signature **matches, - int num_matches, - ir_function_signature *sig) -{ - /* From section 6.1 of the GLSL 4.00 spec (and the ARB_gpu_shader5 spec): - * - * "A function definition A is considered a better - * match than function definition B if: - * - * * for at least one function argument, the conversion for that argument - * in A is better than the corresponding conversion in B; and - * - * * there is no function argument for which the conversion in B is better - * than the corresponding conversion in A. - * - * If a single function definition is considered a better match than every - * other matching function definition, it will be used. Otherwise, a - * semantic error occurs and the shader will fail to compile." - */ - for (ir_function_signature **other = matches; - other < matches + num_matches; other++) { - if (*other == sig) - continue; - - const exec_node *node_a = sig->parameters.get_head_raw(); - const exec_node *node_b = (*other)->parameters.get_head_raw(); - const exec_node *node_p = actual_parameters->get_head_raw(); - - bool better_for_some_parameter = false; - - for (/* empty */ - ; !node_a->is_tail_sentinel() - ; node_a = node_a->next, - node_b = node_b->next, - node_p = node_p->next) { - parameter_match_t a_match = get_parameter_match_type( - (const ir_variable *)node_a, - (const ir_rvalue *)node_p); - parameter_match_t b_match = get_parameter_match_type( - (const ir_variable *)node_b, - (const ir_rvalue *)node_p); - - if (is_better_parameter_match(a_match, b_match)) - better_for_some_parameter = true; - - if (is_better_parameter_match(b_match, a_match)) - return false; /* B is better for this parameter */ - } - - if (!better_for_some_parameter) - return false; /* A must be better than B for some parameter */ - - } - - return true; -} - - -static ir_function_signature * -choose_best_inexact_overload(_mesa_glsl_parse_state *state, - const exec_list *actual_parameters, - ir_function_signature **matches, - int num_matches) -{ - if (num_matches == 0) - return NULL; - - if (num_matches == 1) - return *matches; - - /* Without GLSL 4.0, ARB_gpu_shader5, or MESA_shader_integer_functions, - * there is no overload resolution among multiple inexact matches. Note - * that state may be NULL here if called from the linker; in that case we - * assume everything supported in any GLSL version is available. - */ - if (!state || state->is_version(400, 0) || state->ARB_gpu_shader5_enable || - state->MESA_shader_integer_functions_enable || - state->EXT_shader_implicit_conversions_enable) { - for (ir_function_signature **sig = matches; sig < matches + num_matches; sig++) { - if (is_best_inexact_overload(actual_parameters, matches, num_matches, *sig)) - return *sig; - } - } - - return NULL; /* no best candidate */ -} - - -ir_function_signature * -ir_function::matching_signature(_mesa_glsl_parse_state *state, - const exec_list *actual_parameters, - bool allow_builtins) -{ - bool is_exact; - return matching_signature(state, actual_parameters, allow_builtins, - &is_exact); -} - -ir_function_signature * -ir_function::matching_signature(_mesa_glsl_parse_state *state, - const exec_list *actual_parameters, - bool allow_builtins, - bool *is_exact) -{ - ir_function_signature **inexact_matches = NULL; - ir_function_signature **inexact_matches_temp; - ir_function_signature *match = NULL; - int num_inexact_matches = 0; - - /* From page 42 (page 49 of the PDF) of the GLSL 1.20 spec: - * - * "If an exact match is found, the other signatures are ignored, and - * the exact match is used. Otherwise, if no exact match is found, then - * the implicit conversions in Section 4.1.10 "Implicit Conversions" will - * be applied to the calling arguments if this can make their types match - * a signature. In this case, it is a semantic error if there are - * multiple ways to apply these conversions to the actual arguments of a - * call such that the call can be made to match multiple signatures." - */ - foreach_in_list(ir_function_signature, sig, &this->signatures) { - /* Skip over any built-ins that aren't available in this shader. */ - if (sig->is_builtin() && (!allow_builtins || - !sig->is_builtin_available(state))) - continue; - - switch (parameter_lists_match(state, & sig->parameters, actual_parameters)) { - case PARAMETER_LIST_EXACT_MATCH: - *is_exact = true; - free(inexact_matches); - return sig; - case PARAMETER_LIST_INEXACT_MATCH: - /* Subroutine signatures must match exactly */ - if (this->is_subroutine) - continue; - inexact_matches_temp = (ir_function_signature **) - realloc(inexact_matches, - sizeof(*inexact_matches) * - (num_inexact_matches + 1)); - if (inexact_matches_temp == NULL) { - _mesa_error_no_memory(__func__); - free(inexact_matches); - return NULL; - } - inexact_matches = inexact_matches_temp; - inexact_matches[num_inexact_matches++] = sig; - continue; - case PARAMETER_LIST_NO_MATCH: - continue; - default: - assert(false); - return NULL; - } - } - - /* There is no exact match (we would have returned it by now). If there - * are multiple inexact matches, the call is ambiguous, which is an error. - * - * FINISHME: Report a decent error. Returning NULL will likely result in - * FINISHME: a "no matching signature" error; it should report that the - * FINISHME: call is ambiguous. But reporting errors from here is hard. - */ - *is_exact = false; - - match = choose_best_inexact_overload(state, actual_parameters, - inexact_matches, num_inexact_matches); - - free(inexact_matches); - return match; -} - - -static bool -parameter_lists_match_exact(const exec_list *list_a, const exec_list *list_b) -{ - const exec_node *node_a = list_a->get_head_raw(); - const exec_node *node_b = list_b->get_head_raw(); - - for (/* empty */ - ; !node_a->is_tail_sentinel() && !node_b->is_tail_sentinel() - ; node_a = node_a->next, node_b = node_b->next) { - ir_variable *a = (ir_variable *) node_a; - ir_variable *b = (ir_variable *) node_b; - - /* If the types of the parameters do not match, the parameters lists - * are different. - */ - if (a->type != b->type) - return false; - } - - /* Unless both lists are exhausted, they differ in length and, by - * definition, do not match. - */ - return (node_a->is_tail_sentinel() == node_b->is_tail_sentinel()); -} - -ir_function_signature * -ir_function::exact_matching_signature(_mesa_glsl_parse_state *state, - const exec_list *actual_parameters) -{ - foreach_in_list(ir_function_signature, sig, &this->signatures) { - /* Skip over any built-ins that aren't available in this shader. */ - if (sig->is_builtin() && !sig->is_builtin_available(state)) - continue; - - if (parameter_lists_match_exact(&sig->parameters, actual_parameters)) - return sig; - } - return NULL; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_can_inline.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_can_inline.cpp deleted file mode 100644 index a246872..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_can_inline.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_function_can_inline.cpp - * - * Determines if we can inline a function call using ir_function_inlining.cpp. - * - * The primary restriction is that we can't return from the function other - * than as the last instruction. In lower_jumps.cpp, we can lower return - * statements not at the end of the function to other control flow in order to - * deal with this restriction. - */ - -#include "ir.h" - -class ir_function_can_inline_visitor : public ir_hierarchical_visitor { -public: - ir_function_can_inline_visitor() - { - this->num_returns = 0; - } - - virtual ir_visitor_status visit_enter(ir_return *); - - int num_returns; -}; - -ir_visitor_status -ir_function_can_inline_visitor::visit_enter(ir_return *ir) -{ - (void) ir; - this->num_returns++; - return visit_continue; -} - -bool -can_inline(ir_call *call) -{ - ir_function_can_inline_visitor v; - const ir_function_signature *callee = call->callee; - if (!callee->is_defined) - return false; - - v.run((exec_list *) &callee->body); - - /* If the function is empty (no last instruction) or does not end with a - * return statement, we need to count the implicit return. - */ - ir_instruction *last = (ir_instruction *)callee->body.get_tail(); - if (last == NULL || !last->as_return()) - v.num_returns++; - - return v.num_returns == 1; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp deleted file mode 100644 index 2931b2a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_function_detect_recursion.cpp - * Determine whether a shader contains static recursion. - * - * Consider the (possibly disjoint) graph of function calls in a shader. If a - * program contains recursion, this graph will contain a cycle. If a function - * is part of a cycle, it will have a caller and it will have a callee (it - * calls another function). - * - * To detect recursion, the function call graph is constructed. The graph is - * repeatedly reduced by removing any function that either has no callees - * (leaf functions) or has no caller. Eventually the only functions that - * remain will be the functions in the cycles. - * - * The GLSL spec is a bit wishy-washy about recursion. - * - * From page 39 (page 45 of the PDF) of the GLSL 1.10 spec: - * - * "Behavior is undefined if recursion is used. Recursion means having any - * function appearing more than once at any one time in the run-time stack - * of function calls. That is, a function may not call itself either - * directly or indirectly. Compilers may give diagnostic messages when - * this is detectable at compile time, but not all such cases can be - * detected at compile time." - * - * From page 79 (page 85 of the PDF): - * - * "22) Should recursion be supported? - * - * DISCUSSION: Probably not necessary, but another example of limiting - * the language based on how it would directly map to hardware. One - * thought is that recursion would benefit ray tracing shaders. On the - * other hand, many recursion operations can also be implemented with the - * user managing the recursion through arrays. RenderMan doesn't support - * recursion. This could be added at a later date, if it proved to be - * necessary. - * - * RESOLVED on September 10, 2002: Implementations are not required to - * support recursion. - * - * CLOSED on September 10, 2002." - * - * From page 79 (page 85 of the PDF): - * - * "56) Is it an error for an implementation to support recursion if the - * specification says recursion is not supported? - * - * ADDED on September 10, 2002. - * - * DISCUSSION: This issues is related to Issue (22). If we say that - * recursion (or some other piece of functionality) is not supported, is - * it an error for an implementation to support it? Perhaps the - * specification should remain silent on these kind of things so that they - * could be gracefully added later as an extension or as part of the - * standard. - * - * RESOLUTION: Languages, in general, have programs that are not - * well-formed in ways a compiler cannot detect. Portability is only - * ensured for well-formed programs. Detecting recursion is an example of - * this. The language will say a well-formed program may not recurse, but - * compilers are not forced to detect that recursion may happen. - * - * CLOSED: November 29, 2002." - * - * In GLSL 1.10 the behavior of recursion is undefined. Compilers don't have - * to reject shaders (at compile-time or link-time) that contain recursion. - * Instead they could work, or crash, or kill a kitten. - * - * From page 44 (page 50 of the PDF) of the GLSL 1.20 spec: - * - * "Recursion is not allowed, not even statically. Static recursion is - * present if the static function call graph of the program contains - * cycles." - * - * This langauge clears things up a bit, but it still leaves a lot of - * questions unanswered. - * - * - Is the error generated at compile-time or link-time? - * - * - Is it an error to have a recursive function that is never statically - * called by main or any function called directly or indirectly by main? - * Technically speaking, such a function is not in the "static function - * call graph of the program" at all. - * - * \bug - * If a shader has multiple cycles, this algorithm may erroneously complain - * about functions that aren't in any cycle, but are in the part of the call - * tree that connects them. For example, if the call graph consists of a - * cycle between A and B, and a cycle between D and E, and B also calls C - * which calls D, then this algorithm will report C as a function which "has - * static recursion" even though it is not part of any cycle. - * - * A better algorithm for cycle detection that doesn't have this drawback can - * be found here: - * - * http://en.wikipedia.org/wiki/Tarjan%E2%80%99s_strongly_connected_components_algorithm - * - * \author Ian Romanick - */ -#include "ir.h" -#include "glsl_parser_extras.h" -#include "linker.h" -#include "../../util/hash_table.h" -#include "program.h" - -namespace { - -struct call_node : public exec_node { - class function *func; -}; - -class function { -public: - function(ir_function_signature *sig) - : sig(sig) - { - /* empty */ - } - - DECLARE_RALLOC_CXX_OPERATORS(function) - - ir_function_signature *sig; - - /** List of functions called by this function. */ - exec_list callees; - - /** List of functions that call this function. */ - exec_list callers; -}; - -class has_recursion_visitor : public ir_hierarchical_visitor { -public: - has_recursion_visitor() - : current(NULL) - { - progress = false; - this->mem_ctx = ralloc_context(NULL); - this->function_hash = _mesa_pointer_hash_table_create(NULL); - } - - ~has_recursion_visitor() - { - _mesa_hash_table_destroy(this->function_hash, NULL); - ralloc_free(this->mem_ctx); - } - - function *get_function(ir_function_signature *sig) - { - function *f; - hash_entry *entry = _mesa_hash_table_search(this->function_hash, sig); - if (entry == NULL) { - f = new(mem_ctx) function(sig); - _mesa_hash_table_insert(this->function_hash, sig, f); - } else { - f = (function *) entry->data; - } - - return f; - } - - virtual ir_visitor_status visit_enter(ir_function_signature *sig) - { - this->current = this->get_function(sig); - return visit_continue; - } - - virtual ir_visitor_status visit_leave(ir_function_signature *sig) - { - (void) sig; - this->current = NULL; - return visit_continue; - } - - virtual ir_visitor_status visit_enter(ir_call *call) - { - /* At global scope this->current will be NULL. Since there is no way to - * call global scope, it can never be part of a cycle. Don't bother - * adding calls from global scope to the graph. - */ - if (this->current == NULL) - return visit_continue; - - function *const target = this->get_function(call->callee); - - /* Create a link from the caller to the callee. - */ - call_node *node = new(mem_ctx) call_node; - node->func = target; - this->current->callees.push_tail(node); - - /* Create a link from the callee to the caller. - */ - node = new(mem_ctx) call_node; - node->func = this->current; - target->callers.push_tail(node); - return visit_continue; - } - - function *current; - struct hash_table *function_hash; - void *mem_ctx; - bool progress; -}; - -} /* anonymous namespace */ - -static void -destroy_links(exec_list *list, function *f) -{ - foreach_in_list_safe(call_node, node, list) { - /* If this is the right function, remove it. Note that the loop cannot - * terminate now. There can be multiple links to a function if it is - * either called multiple times or calls multiple times. - */ - if (node->func == f) - node->remove(); - } -} - - -/** - * Remove a function if it has either no in or no out links - */ -static void -remove_unlinked_functions(const void *key, void *data, void *closure) -{ - has_recursion_visitor *visitor = (has_recursion_visitor *) closure; - function *f = (function *) data; - - if (f->callers.is_empty() || f->callees.is_empty()) { - while (!f->callers.is_empty()) { - struct call_node *n = (struct call_node *) f->callers.pop_head(); - destroy_links(& n->func->callees, f); - } - - while (!f->callees.is_empty()) { - struct call_node *n = (struct call_node *) f->callees.pop_head(); - destroy_links(& n->func->callers, f); - } - - hash_entry *entry = _mesa_hash_table_search(visitor->function_hash, key); - _mesa_hash_table_remove(visitor->function_hash, entry); - visitor->progress = true; - } -} - - -static void -emit_errors_unlinked(const void *key, void *data, void *closure) -{ - struct _mesa_glsl_parse_state *state = - (struct _mesa_glsl_parse_state *) closure; - function *f = (function *) data; - YYLTYPE loc; - - (void) key; - - char *proto = prototype_string(f->sig->return_type, - f->sig->function_name(), - &f->sig->parameters); - - memset(&loc, 0, sizeof(loc)); - _mesa_glsl_error(&loc, state, - "function `%s' has static recursion", - proto); - ralloc_free(proto); -} - - -static void -emit_errors_linked(const void *key, void *data, void *closure) -{ - struct gl_shader_program *prog = - (struct gl_shader_program *) closure; - function *f = (function *) data; - - (void) key; - - char *proto = prototype_string(f->sig->return_type, - f->sig->function_name(), - &f->sig->parameters); - - linker_error(prog, "function `%s' has static recursion.\n", proto); - ralloc_free(proto); -} - - -void -detect_recursion_unlinked(struct _mesa_glsl_parse_state *state, - exec_list *instructions) -{ - has_recursion_visitor v; - - /* Collect all of the information about which functions call which other - * functions. - */ - v.run(instructions); - - /* Remove from the set all of the functions that either have no caller or - * call no other functions. Repeat until no functions are removed. - */ - do { - v.progress = false; - hash_table_call_foreach(v.function_hash, remove_unlinked_functions, & v); - } while (v.progress); - - - /* At this point any functions still in the hash must be part of a cycle. - */ - hash_table_call_foreach(v.function_hash, emit_errors_unlinked, state); -} - - -void -detect_recursion_linked(struct gl_shader_program *prog, - exec_list *instructions) -{ - has_recursion_visitor v; - - /* Collect all of the information about which functions call which other - * functions. - */ - v.run(instructions); - - /* Remove from the set all of the functions that either have no caller or - * call no other functions. Repeat until no functions are removed. - */ - do { - v.progress = false; - hash_table_call_foreach(v.function_hash, remove_unlinked_functions, & v); - } while (v.progress); - - - /* At this point any functions still in the hash must be part of a cycle. - */ - hash_table_call_foreach(v.function_hash, emit_errors_linked, prog); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_inlining.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_inlining.h deleted file mode 100644 index 2af33fa..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_function_inlining.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_function_inlining.h - * - * Replaces calls to functions with the body of the function. - */ - -#ifndef GLSL_IR_FUNCTION_INLINING_H -#define GLSL_IR_FUNCTION_INLINING_H - -bool can_inline(ir_call *call); - -#endif /* GLSL_IR_FUNCTION_INLINING_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp deleted file mode 100644 index ca973d5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" -#include "ir_hierarchical_visitor.h" - -ir_hierarchical_visitor::ir_hierarchical_visitor() -{ - this->base_ir = NULL; - this->callback_enter = NULL; - this->callback_leave = NULL; - this->data_enter = NULL; - this->data_leave = NULL; - this->in_assignee = false; -} - -ir_visitor_status -ir_hierarchical_visitor::visit(ir_rvalue *ir) -{ - call_enter_leave_callbacks(ir); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit(ir_variable *ir) -{ - call_enter_leave_callbacks(ir); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit(ir_constant *ir) -{ - call_enter_leave_callbacks(ir); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit(ir_loop_jump *ir) -{ - call_enter_leave_callbacks(ir); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit(ir_dereference_variable *ir) -{ - call_enter_leave_callbacks(ir); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit(ir_barrier *ir) -{ - call_enter_leave_callbacks(ir); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_loop *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_loop *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_function_signature *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_function_signature *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_function *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_function *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_expression *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_expression *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_texture *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_texture *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_swizzle *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_swizzle *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_dereference_array *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_dereference_array *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_dereference_record *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_dereference_record *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_assignment *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_assignment *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_call *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_call *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_return *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_return *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_discard *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_discard *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_demote *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_demote *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_if *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_if *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_emit_vertex *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_emit_vertex *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_enter(ir_end_primitive *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_hierarchical_visitor::visit_leave(ir_end_primitive *ir) -{ - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); - - return visit_continue; -} - -void -ir_hierarchical_visitor::run(exec_list *instructions) -{ - visit_list_elements(this, instructions); -} - -void -ir_hierarchical_visitor::call_enter_leave_callbacks(class ir_instruction *ir) -{ - if (this->callback_enter != NULL) - this->callback_enter(ir, this->data_enter); - if (this->callback_leave != NULL) - this->callback_leave(ir, this->data_leave); -} - -void -visit_tree(ir_instruction *ir, - void (*callback_enter)(class ir_instruction *ir, void *data), - void *data_enter, - void (*callback_leave)(class ir_instruction *ir, void *data), - void *data_leave) -{ - ir_hierarchical_visitor v; - - v.callback_enter = callback_enter; - v.callback_leave = callback_leave; - v.data_enter = data_enter; - v.data_leave = data_leave; - - ir->accept(&v); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hierarchical_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hierarchical_visitor.h deleted file mode 100644 index dff6a39..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hierarchical_visitor.h +++ /dev/null @@ -1,216 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_HIERARCHICAL_VISITOR_H -#define IR_HIERARCHICAL_VISITOR_H - -/** - * Enumeration values returned by visit methods to guide processing - */ -enum ir_visitor_status { - visit_continue, /**< Continue visiting as normal. */ - visit_continue_with_parent, /**< Don't visit siblings, continue w/parent. */ - visit_stop /**< Stop visiting immediately. */ -}; - - -#ifdef __cplusplus -/** - * Base class of hierarchical visitors of IR instruction trees - * - * Hierarchical visitors differ from traditional visitors in a couple of - * important ways. Rather than having a single \c visit method for each - * subclass in the composite, there are three kinds of visit methods. - * Leaf-node classes have a traditional \c visit method. Internal-node - * classes have a \c visit_enter method, which is invoked just before - * processing child nodes, and a \c visit_leave method which is invoked just - * after processing child nodes. - * - * In addition, each visit method and the \c accept methods in the composite - * have a return value which guides the navigation. Any of the visit methods - * can choose to continue visiting the tree as normal (by returning \c - * visit_continue), terminate visiting any further nodes immediately (by - * returning \c visit_stop), or stop visiting sibling nodes (by returning \c - * visit_continue_with_parent). - * - * These two changes combine to allow navigation of children to be implemented - * in the composite's \c accept method. The \c accept method for a leaf-node - * class will simply call the \c visit method, as usual, and pass its return - * value on. The \c accept method for internal-node classes will call the \c - * visit_enter method, call the \c accept method of each child node, and, - * finally, call the \c visit_leave method. If any of these return a value - * other that \c visit_continue, the correct action must be taken. - * - * The final benefit is that the hierarchical visitor base class need not be - * abstract. Default implementations of every \c visit, \c visit_enter, and - * \c visit_leave method can be provided. By default each of these methods - * simply returns \c visit_continue. This allows a significant reduction in - * derived class code. - * - * For more information about hierarchical visitors, see: - * - * http://c2.com/cgi/wiki?HierarchicalVisitorPattern - * http://c2.com/cgi/wiki?HierarchicalVisitorDiscussion - */ - -class ir_hierarchical_visitor { -public: - ir_hierarchical_visitor(); - - /** - * \name Visit methods for leaf-node classes - */ - /*@{*/ - virtual ir_visitor_status visit(class ir_rvalue *); - virtual ir_visitor_status visit(class ir_variable *); - virtual ir_visitor_status visit(class ir_constant *); - virtual ir_visitor_status visit(class ir_loop_jump *); - virtual ir_visitor_status visit(class ir_barrier *); - - /** - * ir_dereference_variable isn't technically a leaf, but it is treated as a - * leaf here for a couple reasons. By not automatically visiting the one - * child ir_variable node from the ir_dereference_variable, ir_variable - * nodes can always be handled as variable declarations. Code that used - * non-hierarchical visitors had to set an "in a dereference" flag to - * determine how to handle an ir_variable. By forcing the visitor to - * handle the ir_variable within the ir_dereference_variable visitor, this - * kludge can be avoided. - * - * In addition, I can envision no use for having separate enter and leave - * methods. Anything that could be done in the enter and leave methods - * that couldn't just be done in the visit method. - */ - virtual ir_visitor_status visit(class ir_dereference_variable *); - /*@}*/ - - /** - * \name Visit methods for internal-node classes - */ - /*@{*/ - virtual ir_visitor_status visit_enter(class ir_loop *); - virtual ir_visitor_status visit_leave(class ir_loop *); - virtual ir_visitor_status visit_enter(class ir_function_signature *); - virtual ir_visitor_status visit_leave(class ir_function_signature *); - virtual ir_visitor_status visit_enter(class ir_function *); - virtual ir_visitor_status visit_leave(class ir_function *); - virtual ir_visitor_status visit_enter(class ir_expression *); - virtual ir_visitor_status visit_leave(class ir_expression *); - virtual ir_visitor_status visit_enter(class ir_texture *); - virtual ir_visitor_status visit_leave(class ir_texture *); - virtual ir_visitor_status visit_enter(class ir_swizzle *); - virtual ir_visitor_status visit_leave(class ir_swizzle *); - virtual ir_visitor_status visit_enter(class ir_dereference_array *); - virtual ir_visitor_status visit_leave(class ir_dereference_array *); - virtual ir_visitor_status visit_enter(class ir_dereference_record *); - virtual ir_visitor_status visit_leave(class ir_dereference_record *); - virtual ir_visitor_status visit_enter(class ir_assignment *); - virtual ir_visitor_status visit_leave(class ir_assignment *); - virtual ir_visitor_status visit_enter(class ir_call *); - virtual ir_visitor_status visit_leave(class ir_call *); - virtual ir_visitor_status visit_enter(class ir_return *); - virtual ir_visitor_status visit_leave(class ir_return *); - virtual ir_visitor_status visit_enter(class ir_discard *); - virtual ir_visitor_status visit_leave(class ir_discard *); - virtual ir_visitor_status visit_enter(class ir_demote *); - virtual ir_visitor_status visit_leave(class ir_demote *); - virtual ir_visitor_status visit_enter(class ir_if *); - virtual ir_visitor_status visit_leave(class ir_if *); - virtual ir_visitor_status visit_enter(class ir_emit_vertex *); - virtual ir_visitor_status visit_leave(class ir_emit_vertex *); - virtual ir_visitor_status visit_enter(class ir_end_primitive *); - virtual ir_visitor_status visit_leave(class ir_end_primitive *); - /*@}*/ - - - /** - * Utility function to process a linked list of instructions with a visitor - */ - void run(struct exec_list *instructions); - - /** - * Utility function to call both the leave and enter callback functions. - * This is used for leaf nodes. - */ - void call_enter_leave_callbacks(class ir_instruction *ir); - - /* Some visitors may need to insert new variable declarations and - * assignments for portions of a subtree, which means they need a - * pointer to the current instruction in the stream, not just their - * node in the tree rooted at that instruction. - * - * This is implemented by visit_list_elements -- if the visitor is - * not called by it, nothing good will happen. - */ - class ir_instruction *base_ir; - - /** - * Callback function that is invoked on entry to each node visited. - * - * \warning - * Visitor classes derived from \c ir_hierarchical_visitor \b may \b not - * invoke this function. This can be used, for example, to cause the - * callback to be invoked on every node type except one. - */ - void (*callback_enter)(class ir_instruction *ir, void *data); - - /** - * Callback function that is invoked on exit of each node visited. - * - * \warning - * Visitor classes derived from \c ir_hierarchical_visitor \b may \b not - * invoke this function. This can be used, for example, to cause the - * callback to be invoked on every node type except one. - */ - void (*callback_leave)(class ir_instruction *ir, void *data); - - /** - * Extra data parameter passed to the per-node callback_enter function - */ - void *data_enter; - - /** - * Extra data parameter passed to the per-node callback_leave function - */ - void *data_leave; - - /** - * Currently in the LHS of an assignment? - * - * This is set and cleared by the \c ir_assignment::accept method. - */ - bool in_assignee; -}; - -void visit_tree(ir_instruction *ir, - void (*callback_enter)(class ir_instruction *ir, void *data), - void *data_enter, - void (*callback_leave)(class ir_instruction *ir, void *data) = NULL, - void *data_leave = NULL); - -ir_visitor_status visit_list_elements(ir_hierarchical_visitor *v, exec_list *l, - bool statement_list = true); -#endif /* __cplusplus */ - -#endif /* IR_HIERARCHICAL_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hv_accept.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hv_accept.cpp deleted file mode 100644 index ebe8446..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_hv_accept.cpp +++ /dev/null @@ -1,457 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" - -/** - * \file ir_hv_accept.cpp - * Implementations of all hierarchical visitor accept methods for IR - * instructions. - */ - -/** - * Process a list of nodes using a hierarchical vistor. - * - * If statement_list is true (the default), this is a list of statements, so - * v->base_ir will be set to point to each statement just before iterating - * over it, and restored after iteration is complete. If statement_list is - * false, this is a list that appears inside a statement (e.g. a parameter - * list), so v->base_ir will be left alone. - * - * \warning - * This function will operate correctly if a node being processed is removed - * from the list. However, if nodes are added to the list after the node being - * processed, some of the added nodes may not be processed. - */ -ir_visitor_status -visit_list_elements(ir_hierarchical_visitor *v, exec_list *l, - bool statement_list) -{ - ir_instruction *prev_base_ir = v->base_ir; - - foreach_in_list_safe(ir_instruction, ir, l) { - if (statement_list) - v->base_ir = ir; - ir_visitor_status s = ir->accept(v); - - if (s != visit_continue) - return s; - } - if (statement_list) - v->base_ir = prev_base_ir; - - return visit_continue; -} - - -ir_visitor_status -ir_rvalue::accept(ir_hierarchical_visitor *v) -{ - return v->visit(this); -} - - -ir_visitor_status -ir_variable::accept(ir_hierarchical_visitor *v) -{ - return v->visit(this); -} - - -ir_visitor_status -ir_loop::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = visit_list_elements(v, &this->body_instructions); - if (s == visit_stop) - return s; - - return v->visit_leave(this); -} - - -ir_visitor_status -ir_loop_jump::accept(ir_hierarchical_visitor *v) -{ - return v->visit(this); -} - - -ir_visitor_status -ir_function_signature::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = visit_list_elements(v, &this->parameters); - if (s == visit_stop) - return s; - - s = visit_list_elements(v, &this->body); - return (s == visit_stop) ? s : v->visit_leave(this); -} - - -ir_visitor_status -ir_function::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = visit_list_elements(v, &this->signatures, false); - return (s == visit_stop) ? s : v->visit_leave(this); -} - - -ir_visitor_status -ir_expression::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - for (unsigned i = 0; i < this->num_operands; i++) { - switch (this->operands[i]->accept(v)) { - case visit_continue: - break; - - case visit_continue_with_parent: - // I wish for Java's labeled break-statement here. - goto done; - - case visit_stop: - return visit_stop; - } - } - -done: - return v->visit_leave(this); -} - -ir_visitor_status -ir_texture::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->sampler->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - if (this->coordinate) { - s = this->coordinate->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - if (this->projector) { - s = this->projector->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - if (this->shadow_comparator) { - s = this->shadow_comparator->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - if (this->offset) { - s = this->offset->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - if (this->clamp) { - s = this->clamp->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - switch (this->op) { - case ir_tex: - case ir_lod: - case ir_query_levels: - case ir_texture_samples: - case ir_samples_identical: - break; - case ir_txb: - s = this->lod_info.bias->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - break; - case ir_txl: - case ir_txf: - case ir_txs: - s = this->lod_info.lod->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - break; - case ir_txf_ms: - s = this->lod_info.sample_index->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - break; - case ir_txd: - s = this->lod_info.grad.dPdx->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->lod_info.grad.dPdy->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - break; - case ir_tg4: - s = this->lod_info.component->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - break; - } - - assert(s == visit_continue); - return v->visit_leave(this); -} - - -ir_visitor_status -ir_swizzle::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->val->accept(v); - return (s == visit_stop) ? s : v->visit_leave(this); -} - - -ir_visitor_status -ir_dereference_variable::accept(ir_hierarchical_visitor *v) -{ - return v->visit(this); -} - - -ir_visitor_status -ir_dereference_array::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - /* The array index is not the target of the assignment, so clear the - * 'in_assignee' flag. Restore it after returning from the array index. - */ - const bool was_in_assignee = v->in_assignee; - v->in_assignee = false; - s = this->array_index->accept(v); - v->in_assignee = was_in_assignee; - - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->array->accept(v); - return (s == visit_stop) ? s : v->visit_leave(this); -} - - -ir_visitor_status -ir_dereference_record::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->record->accept(v); - return (s == visit_stop) ? s : v->visit_leave(this); -} - - -ir_visitor_status -ir_assignment::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - v->in_assignee = true; - s = this->lhs->accept(v); - v->in_assignee = false; - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->rhs->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - return (s == visit_stop) ? s : v->visit_leave(this); -} - - -ir_visitor_status -ir_constant::accept(ir_hierarchical_visitor *v) -{ - return v->visit(this); -} - - -ir_visitor_status -ir_call::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - if (this->return_deref != NULL) { - v->in_assignee = true; - s = this->return_deref->accept(v); - v->in_assignee = false; - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - s = visit_list_elements(v, &this->actual_parameters, false); - if (s == visit_stop) - return s; - - return v->visit_leave(this); -} - - -ir_visitor_status -ir_return::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - ir_rvalue *val = this->get_value(); - if (val) { - s = val->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - return v->visit_leave(this); -} - - -ir_visitor_status -ir_discard::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - if (this->condition != NULL) { - s = this->condition->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - } - - return v->visit_leave(this); -} - - -ir_visitor_status -ir_demote::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - return v->visit_leave(this); -} - - -ir_visitor_status -ir_if::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->condition->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - if (s != visit_continue_with_parent) { - s = visit_list_elements(v, &this->then_instructions); - if (s == visit_stop) - return s; - } - - if (s != visit_continue_with_parent) { - s = visit_list_elements(v, &this->else_instructions); - if (s == visit_stop) - return s; - } - - return v->visit_leave(this); -} - -ir_visitor_status -ir_emit_vertex::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->stream->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - assert(s == visit_continue); - return v->visit_leave(this); -} - - -ir_visitor_status -ir_end_primitive::accept(ir_hierarchical_visitor *v) -{ - ir_visitor_status s = v->visit_enter(this); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - s = this->stream->accept(v); - if (s != visit_continue) - return (s == visit_continue_with_parent) ? visit_continue : s; - - assert(s == visit_continue); - return v->visit_leave(this); -} - -ir_visitor_status -ir_barrier::accept(ir_hierarchical_visitor *v) -{ - return v->visit(this); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_optimization.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_optimization.h deleted file mode 100644 index 8e56a84..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_optimization.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_optimization.h - * - * Prototypes for optimization passes to be called by the compiler and drivers. - */ - -#ifndef GLSL_IR_OPTIMIZATION_H -#define GLSL_IR_OPTIMIZATION_H - -struct gl_linked_shader; -struct gl_shader_program; - -/* Operations for lower_64bit_integer_instructions() */ -#define DIV64 (1U << 0) -#define MOD64 (1U << 1) - -bool do_common_optimization(exec_list *ir, bool linked, - const struct gl_shader_compiler_options *options, - bool native_integers); - -bool do_rebalance_tree(exec_list *instructions); -bool do_algebraic(exec_list *instructions, bool native_integers, - const struct gl_shader_compiler_options *options); -bool do_dead_code(exec_list *instructions); -bool do_dead_code_local(exec_list *instructions); -bool do_dead_code_unlinked(exec_list *instructions); -bool do_dead_functions(exec_list *instructions); -bool opt_flip_matrices(exec_list *instructions); -bool do_function_inlining(exec_list *instructions); -bool do_lower_jumps(exec_list *instructions, bool pull_out_jumps = true, bool lower_sub_return = true, bool lower_main_return = false, bool lower_continue = false); -bool do_if_simplification(exec_list *instructions); -bool opt_flatten_nested_if_blocks(exec_list *instructions); -bool do_mat_op_to_vec(exec_list *instructions); -bool do_minmax_prune(exec_list *instructions); -bool do_tree_grafting(exec_list *instructions); -bool do_vec_index_to_cond_assign(exec_list *instructions); -bool lower_discard(exec_list *instructions); -void lower_discard_flow(exec_list *instructions); -bool lower_instructions(exec_list *instructions, - bool have_dround, - bool have_gpu_shader5); -bool lower_clip_cull_distance(struct gl_shader_program *prog, - gl_linked_shader *shader); -bool lower_packing_builtins(exec_list *instructions, - bool has_shading_language_packing, - bool has_gpu_shader5, - bool has_half_float_packing); -bool lower_vector_derefs(gl_linked_shader *shader); -void lower_named_interface_blocks(void *mem_ctx, gl_linked_shader *shader); -void optimize_dead_builtin_variables(exec_list *instructions, - enum ir_variable_mode other); - -bool lower_blend_equation_advanced(gl_linked_shader *shader, bool coherent); - -bool lower_builtins(exec_list *instructions); -bool lower_subroutine(exec_list *instructions, struct _mesa_glsl_parse_state *state); -bool propagate_invariance(exec_list *instructions); - -namespace ir_builder { class ir_factory; }; - -bool lower_64bit_integer_instructions(exec_list *instructions, - unsigned what_to_lower); - -void lower_precision(const struct gl_shader_compiler_options *options, - exec_list *instructions); - -#endif /* GLSL_IR_OPTIMIZATION_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_print_visitor.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_print_visitor.cpp deleted file mode 100644 index a146b99..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_print_visitor.cpp +++ /dev/null @@ -1,670 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include /* for PRIx64 macro */ -#include "ir_print_visitor.h" -#include "../glsl_types.h" -#include "glsl_parser_extras.h" -#include "../../util/macros.h" -#include "../../util/hash_table.h" -#include "../../util/u_string.h" -#include "../../util/half_float.h" - -void -ir_instruction::print(void) const -{ - this->fprint(stdout); -} - -void -ir_instruction::fprint(FILE *f) const -{ - ir_instruction *deconsted = const_cast(this); - - ir_print_visitor v(f); - deconsted->accept(&v); -} - -extern "C" { -void -_mesa_print_ir(FILE *f, exec_list *instructions, - struct _mesa_glsl_parse_state *state) -{ - if (state) { - for (unsigned i = 0; i < state->num_user_structures; i++) { - const glsl_type *const s = state->user_structures[i]; - - fprintf(f, "(structure (%s) (%s@%p) (%u) (\n", - s->name, s->name, (void *) s, s->length); - - for (unsigned j = 0; j < s->length; j++) { - fprintf(f, "\t(("); - glsl_print_type(f, s->fields.structure[j].type); - fprintf(f, ")(%s))\n", s->fields.structure[j].name); - } - - fprintf(f, ")\n"); - } - } - - fprintf(f, "(\n"); - foreach_in_list(ir_instruction, ir, instructions) { - ir->fprint(f); - if (ir->ir_type != ir_type_function) - fprintf(f, "\n"); - } - fprintf(f, ")\n"); -} - -void -fprint_ir(FILE *f, const void *instruction) -{ - const ir_instruction *ir = (const ir_instruction *)instruction; - ir->fprint(f); -} - -} /* extern "C" */ - -ir_print_visitor::ir_print_visitor(FILE *f) - : f(f) -{ - indentation = 0; - printable_names = _mesa_pointer_hash_table_create(NULL); - symbols = _mesa_symbol_table_ctor(); - mem_ctx = ralloc_context(NULL); -} - -ir_print_visitor::~ir_print_visitor() -{ - _mesa_hash_table_destroy(printable_names, NULL); - _mesa_symbol_table_dtor(symbols); - ralloc_free(mem_ctx); -} - -void ir_print_visitor::indent(void) -{ - for (int i = 0; i < indentation; i++) - fprintf(f, " "); -} - -const char * -ir_print_visitor::unique_name(ir_variable *var) -{ - /* var->name can be NULL in function prototypes when a type is given for a - * parameter but no name is given. In that case, just return an empty - * string. Don't worry about tracking the generated name in the printable - * names hash because this is the only scope where it can ever appear. - */ - if (var->name == NULL) { - static unsigned arg = 1; - return ralloc_asprintf(this->mem_ctx, "parameter@%u", arg++); - } - - /* Do we already have a name for this variable? */ - struct hash_entry * entry = - _mesa_hash_table_search(this->printable_names, var); - - if (entry != NULL) { - return (const char *) entry->data; - } - - /* If there's no conflict, just use the original name */ - const char* name = NULL; - if (_mesa_symbol_table_find_symbol(this->symbols, var->name) == NULL) { - name = var->name; - } else { - static unsigned i = 1; - name = ralloc_asprintf(this->mem_ctx, "%s@%u", var->name, ++i); - } - _mesa_hash_table_insert(this->printable_names, var, (void *) name); - _mesa_symbol_table_add_symbol(this->symbols, name, var); - return name; -} - -void ir_print_visitor::visit(ir_rvalue *) -{ - fprintf(f, "error"); -} - -void ir_print_visitor::visit(ir_variable *ir) -{ - fprintf(f, "(declare "); - - char binding[32] = {0}; - if (ir->data.binding) - snprintf(binding, sizeof(binding), "binding=%i ", ir->data.binding); - - char loc[32] = {0}; - if (ir->data.location != -1) - snprintf(loc, sizeof(loc), "location=%i ", ir->data.location); - - char component[32] = {0}; - if (ir->data.explicit_component || ir->data.location_frac != 0) - snprintf(component, sizeof(component), "component=%i ", - ir->data.location_frac); - - char stream[32] = {0}; - if (ir->data.stream & (1u << 31)) { - if (ir->data.stream & ~(1u << 31)) { - snprintf(stream, sizeof(stream), "stream(%u,%u,%u,%u) ", - ir->data.stream & 3, (ir->data.stream >> 2) & 3, - (ir->data.stream >> 4) & 3, (ir->data.stream >> 6) & 3); - } - } else if (ir->data.stream) { - snprintf(stream, sizeof(stream), "stream%u ", ir->data.stream); - } - - char image_format[32] = {0}; - if (ir->data.image_format) { - snprintf(image_format, sizeof(image_format), "format=%x ", - ir->data.image_format); - } - - const char *const cent = (ir->data.centroid) ? "centroid " : ""; - const char *const samp = (ir->data.sample) ? "sample " : ""; - const char *const patc = (ir->data.patch) ? "patch " : ""; - const char *const inv = (ir->data.invariant) ? "invariant " : ""; - const char *const explicit_inv = (ir->data.explicit_invariant) ? "explicit_invariant " : ""; - const char *const prec = (ir->data.precise) ? "precise " : ""; - const char *const bindless = (ir->data.bindless) ? "bindless " : ""; - const char *const bound = (ir->data.bound) ? "bound " : ""; - const char *const memory_read_only = (ir->data.memory_read_only) ? "readonly " : ""; - const char *const memory_write_only = (ir->data.memory_write_only) ? "writeonly " : ""; - const char *const memory_coherent = (ir->data.memory_coherent) ? "coherent " : ""; - const char *const memory_volatile = (ir->data.memory_volatile) ? "volatile " : ""; - const char *const memory_restrict = (ir->data.memory_restrict) ? "restrict " : ""; - const char *const mode[] = { "", "uniform ", "shader_storage ", - "shader_shared ", "shader_in ", "shader_out ", - "in ", "out ", "inout ", - "const_in ", "sys ", "temporary " }; - STATIC_ASSERT(ARRAY_SIZE(mode) == ir_var_mode_count); - const char *const interp[] = { "", "smooth", "flat", "noperspective", "explicit", "color" }; - STATIC_ASSERT(ARRAY_SIZE(interp) == INTERP_MODE_COUNT); - const char *const precision[] = { "", "highp ", "mediump ", "lowp "}; - - fprintf(f, "(%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s) ", - binding, loc, component, cent, bindless, bound, - image_format, memory_read_only, memory_write_only, - memory_coherent, memory_volatile, memory_restrict, - samp, patc, inv, explicit_inv, prec, mode[ir->data.mode], - stream, - interp[ir->data.interpolation], precision[ir->data.precision]); - - glsl_print_type(f, ir->type); - fprintf(f, " %s)", unique_name(ir)); - - if (ir->constant_initializer) { - fprintf(f, " "); - visit(ir->constant_initializer); - } - - if (ir->constant_value) { - fprintf(f, " "); - visit(ir->constant_value); - } -} - - -void ir_print_visitor::visit(ir_function_signature *ir) -{ - _mesa_symbol_table_push_scope(symbols); - fprintf(f, "(signature "); - indentation++; - - glsl_print_type(f, ir->return_type); - fprintf(f, "\n"); - indent(); - - fprintf(f, "(parameters\n"); - indentation++; - - foreach_in_list(ir_variable, inst, &ir->parameters) { - indent(); - inst->accept(this); - fprintf(f, "\n"); - } - indentation--; - - indent(); - fprintf(f, ")\n"); - - indent(); - - fprintf(f, "(\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->body) { - indent(); - inst->accept(this); - fprintf(f, "\n"); - } - indentation--; - indent(); - fprintf(f, "))\n"); - indentation--; - _mesa_symbol_table_pop_scope(symbols); -} - - -void ir_print_visitor::visit(ir_function *ir) -{ - fprintf(f, "(%s function %s\n", ir->is_subroutine ? "subroutine" : "", ir->name); - indentation++; - foreach_in_list(ir_function_signature, sig, &ir->signatures) { - indent(); - sig->accept(this); - fprintf(f, "\n"); - } - indentation--; - indent(); - fprintf(f, ")\n\n"); -} - - -void ir_print_visitor::visit(ir_expression *ir) -{ - fprintf(f, "(expression "); - - glsl_print_type(f, ir->type); - - fprintf(f, " %s ", ir_expression_operation_strings[ir->operation]); - - for (unsigned i = 0; i < ir->num_operands; i++) { - ir->operands[i]->accept(this); - } - - fprintf(f, ") "); -} - - -void ir_print_visitor::visit(ir_texture *ir) -{ - fprintf(f, "(%s ", ir->opcode_string()); - - if (ir->op == ir_samples_identical) { - ir->sampler->accept(this); - fprintf(f, " "); - ir->coordinate->accept(this); - fprintf(f, ")"); - return; - } - - glsl_print_type(f, ir->type); - fprintf(f, " "); - - ir->sampler->accept(this); - fprintf(f, " "); - - if (ir->op != ir_txs && ir->op != ir_query_levels && - ir->op != ir_texture_samples) { - ir->coordinate->accept(this); - - fprintf(f, " "); - - if (ir->op != ir_lod && ir->op != ir_samples_identical) - fprintf(f, "%d ", ir->is_sparse); - - if (ir->offset != NULL) { - ir->offset->accept(this); - } else { - fprintf(f, "0"); - } - - fprintf(f, " "); - } - - if (ir->op != ir_txf && ir->op != ir_txf_ms && - ir->op != ir_txs && ir->op != ir_tg4 && - ir->op != ir_query_levels && ir->op != ir_texture_samples) { - if (ir->projector) - ir->projector->accept(this); - else - fprintf(f, "1"); - - if (ir->shadow_comparator) { - fprintf(f, " "); - ir->shadow_comparator->accept(this); - } else { - fprintf(f, " ()"); - } - } - - if (ir->op == ir_tex || ir->op == ir_txb || ir->op == ir_txd) { - if (ir->clamp) { - fprintf(f, " "); - ir->clamp->accept(this); - } else { - fprintf(f, " ()"); - } - } - - fprintf(f, " "); - switch (ir->op) - { - case ir_tex: - case ir_lod: - case ir_query_levels: - case ir_texture_samples: - break; - case ir_txb: - ir->lod_info.bias->accept(this); - break; - case ir_txl: - case ir_txf: - case ir_txs: - ir->lod_info.lod->accept(this); - break; - case ir_txf_ms: - ir->lod_info.sample_index->accept(this); - break; - case ir_txd: - fprintf(f, "("); - ir->lod_info.grad.dPdx->accept(this); - fprintf(f, " "); - ir->lod_info.grad.dPdy->accept(this); - fprintf(f, ")"); - break; - case ir_tg4: - ir->lod_info.component->accept(this); - break; - case ir_samples_identical: - unreachable("ir_samples_identical was already handled"); - }; - fprintf(f, ")"); -} - - -void ir_print_visitor::visit(ir_swizzle *ir) -{ - const unsigned swiz[4] = { - ir->mask.x, - ir->mask.y, - ir->mask.z, - ir->mask.w, - }; - - fprintf(f, "(swiz "); - for (unsigned i = 0; i < ir->mask.num_components; i++) { - fprintf(f, "%c", "xyzw"[swiz[i]]); - } - fprintf(f, " "); - ir->val->accept(this); - fprintf(f, ")"); -} - - -void ir_print_visitor::visit(ir_dereference_variable *ir) -{ - ir_variable *var = ir->variable_referenced(); - fprintf(f, "(var_ref %s) ", unique_name(var)); -} - - -void ir_print_visitor::visit(ir_dereference_array *ir) -{ - fprintf(f, "(array_ref "); - ir->array->accept(this); - ir->array_index->accept(this); - fprintf(f, ") "); -} - - -void ir_print_visitor::visit(ir_dereference_record *ir) -{ - fprintf(f, "(record_ref "); - ir->record->accept(this); - - const char *field_name = - ir->record->type->fields.structure[ir->field_idx].name; - fprintf(f, " %s) ", field_name); -} - - -void ir_print_visitor::visit(ir_assignment *ir) -{ - fprintf(f, "(assign "); - - char mask[5]; - unsigned j = 0; - - for (unsigned i = 0; i < 4; i++) { - if ((ir->write_mask & (1 << i)) != 0) { - mask[j] = "xyzw"[i]; - j++; - } - } - mask[j] = '\0'; - - fprintf(f, " (%s) ", mask); - - ir->lhs->accept(this); - - fprintf(f, " "); - - ir->rhs->accept(this); - fprintf(f, ") "); -} - -static void -print_float_constant(FILE *f, float val) -{ - if (val == 0.0f) - /* 0.0 == -0.0, so print with %f to get the proper sign. */ - fprintf(f, "%f", val); - else if (fabs(val) < 0.000001f) - fprintf(f, "%a", val); - else if (fabs(val) > 1000000.0f) - fprintf(f, "%e", val); - else - fprintf(f, "%f", val); -} - -void ir_print_visitor::visit(ir_constant *ir) -{ - fprintf(f, "(constant "); - glsl_print_type(f, ir->type); - fprintf(f, " ("); - - if (ir->type->is_array()) { - for (unsigned i = 0; i < ir->type->length; i++) - ir->get_array_element(i)->accept(this); - } else if (ir->type->is_struct()) { - for (unsigned i = 0; i < ir->type->length; i++) { - fprintf(f, "(%s ", ir->type->fields.structure[i].name); - ir->get_record_field(i)->accept(this); - fprintf(f, ")"); - } - } else { - for (unsigned i = 0; i < ir->type->components(); i++) { - if (i != 0) - fprintf(f, " "); - switch (ir->type->base_type) { - case GLSL_TYPE_UINT16:fprintf(f, "%u", ir->value.u16[i]); break; - case GLSL_TYPE_INT16: fprintf(f, "%d", ir->value.i16[i]); break; - case GLSL_TYPE_UINT: fprintf(f, "%u", ir->value.u[i]); break; - case GLSL_TYPE_INT: fprintf(f, "%d", ir->value.i[i]); break; - case GLSL_TYPE_FLOAT: - print_float_constant(f, ir->value.f[i]); - break; - case GLSL_TYPE_FLOAT16: - print_float_constant(f, _mesa_half_to_float(ir->value.f16[i])); - break; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_UINT64: - fprintf(f, "%" PRIu64, ir->value.u64[i]); - break; - case GLSL_TYPE_INT64: fprintf(f, "%" PRIi64, ir->value.i64[i]); break; - case GLSL_TYPE_BOOL: fprintf(f, "%d", ir->value.b[i]); break; - case GLSL_TYPE_DOUBLE: - if (ir->value.d[i] == 0.0) - /* 0.0 == -0.0, so print with %f to get the proper sign. */ - fprintf(f, "%.1f", ir->value.d[i]); - else if (fabs(ir->value.d[i]) < 0.000001) - fprintf(f, "%a", ir->value.d[i]); - else if (fabs(ir->value.d[i]) > 1000000.0) - fprintf(f, "%e", ir->value.d[i]); - else - fprintf(f, "%f", ir->value.d[i]); - break; - default: - unreachable("Invalid constant type"); - } - } - } - fprintf(f, ")) "); -} - - -void -ir_print_visitor::visit(ir_call *ir) -{ - fprintf(f, "(call %s ", ir->callee_name()); - if (ir->return_deref) - ir->return_deref->accept(this); - fprintf(f, " ("); - foreach_in_list(ir_rvalue, param, &ir->actual_parameters) { - param->accept(this); - } - fprintf(f, "))\n"); -} - - -void -ir_print_visitor::visit(ir_return *ir) -{ - fprintf(f, "(return"); - - ir_rvalue *const value = ir->get_value(); - if (value) { - fprintf(f, " "); - value->accept(this); - } - - fprintf(f, ")"); -} - - -void -ir_print_visitor::visit(ir_discard *ir) -{ - fprintf(f, "(discard "); - - if (ir->condition != NULL) { - fprintf(f, " "); - ir->condition->accept(this); - } - - fprintf(f, ")"); -} - - -void -ir_print_visitor::visit(ir_demote *ir) -{ - fprintf(f, "(demote)"); -} - - -void -ir_print_visitor::visit(ir_if *ir) -{ - fprintf(f, "(if "); - ir->condition->accept(this); - - fprintf(f, "(\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->then_instructions) { - indent(); - inst->accept(this); - fprintf(f, "\n"); - } - - indentation--; - indent(); - fprintf(f, ")\n"); - - indent(); - if (!ir->else_instructions.is_empty()) { - fprintf(f, "(\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->else_instructions) { - indent(); - inst->accept(this); - fprintf(f, "\n"); - } - indentation--; - indent(); - fprintf(f, "))\n"); - } else { - fprintf(f, "())\n"); - } -} - - -void -ir_print_visitor::visit(ir_loop *ir) -{ - fprintf(f, "(loop (\n"); - indentation++; - - foreach_in_list(ir_instruction, inst, &ir->body_instructions) { - indent(); - inst->accept(this); - fprintf(f, "\n"); - } - indentation--; - indent(); - fprintf(f, "))\n"); -} - - -void -ir_print_visitor::visit(ir_loop_jump *ir) -{ - fprintf(f, "%s", ir->is_break() ? "break" : "continue"); -} - -void -ir_print_visitor::visit(ir_emit_vertex *ir) -{ - fprintf(f, "(emit-vertex "); - ir->stream->accept(this); - fprintf(f, ")\n"); -} - -void -ir_print_visitor::visit(ir_end_primitive *ir) -{ - fprintf(f, "(end-primitive "); - ir->stream->accept(this); - fprintf(f, ")\n"); -} - -void -ir_print_visitor::visit(ir_barrier *) -{ - fprintf(f, "(barrier)\n"); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_print_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_print_visitor.h deleted file mode 100644 index b07c2da..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_print_visitor.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_PRINT_VISITOR_H -#define IR_PRINT_VISITOR_H - -#include "ir.h" -#include "ir_visitor.h" - -#include "../../mesa/program/symbol_table.h" - -/** - * Abstract base class of visitors of IR instruction trees - */ -class ir_print_visitor : public ir_visitor { -public: - ir_print_visitor(FILE *f); - virtual ~ir_print_visitor(); - - void indent(void); - - /** - * \name Visit methods - * - * As typical for the visitor pattern, there must be one \c visit method for - * each concrete subclass of \c ir_instruction. Virtual base classes within - * the hierarchy should not have \c visit methods. - */ - /*@{*/ - virtual void visit(ir_rvalue *); - virtual void visit(ir_variable *); - virtual void visit(ir_function_signature *); - virtual void visit(ir_function *); - virtual void visit(ir_expression *); - virtual void visit(ir_texture *); - virtual void visit(ir_swizzle *); - virtual void visit(ir_dereference_variable *); - virtual void visit(ir_dereference_array *); - virtual void visit(ir_dereference_record *); - virtual void visit(ir_assignment *); - virtual void visit(ir_constant *); - virtual void visit(ir_call *); - virtual void visit(ir_return *); - virtual void visit(ir_discard *); - virtual void visit(ir_demote *); - virtual void visit(ir_if *); - virtual void visit(ir_loop *); - virtual void visit(ir_loop_jump *); - virtual void visit(ir_emit_vertex *); - virtual void visit(ir_end_primitive *); - virtual void visit(ir_barrier *); - /*@}*/ - -private: - /** - * Fetch/generate a unique name for ir_variable. - * - * GLSL IR permits multiple ir_variables to share the same name. This works - * fine until we try to print it, when we really need a unique one. - */ - const char *unique_name(ir_variable *var); - - /** A mapping from ir_variable * -> unique printable names. */ - hash_table *printable_names; - _mesa_symbol_table *symbols; - - void *mem_ctx; - FILE *f; - - int indentation; -}; - -#endif /* IR_PRINT_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_reader.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_reader.cpp deleted file mode 100644 index 71c98dc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_reader.cpp +++ /dev/null @@ -1,1211 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir_reader.h" -#include "glsl_parser_extras.h" -#include "../glsl_types.h" -#include "s_expression.h" - -static const bool debug = false; - -namespace { - -class ir_reader { -public: - ir_reader(_mesa_glsl_parse_state *); - - void read(exec_list *instructions, const char *src, bool scan_for_protos); - -private: - void *mem_ctx; - _mesa_glsl_parse_state *state; - - void ir_read_error(s_expression *, const char *fmt, ...); - - const glsl_type *read_type(s_expression *); - - void scan_for_prototypes(exec_list *, s_expression *); - ir_function *read_function(s_expression *, bool skip_body); - void read_function_sig(ir_function *, s_expression *, bool skip_body); - - void read_instructions(exec_list *, s_expression *, ir_loop *); - ir_instruction *read_instruction(s_expression *, ir_loop *); - ir_variable *read_declaration(s_expression *); - ir_if *read_if(s_expression *, ir_loop *); - ir_loop *read_loop(s_expression *); - ir_call *read_call(s_expression *); - ir_return *read_return(s_expression *); - ir_rvalue *read_rvalue(s_expression *); - ir_assignment *read_assignment(s_expression *); - ir_expression *read_expression(s_expression *); - ir_swizzle *read_swizzle(s_expression *); - ir_constant *read_constant(s_expression *); - ir_texture *read_texture(s_expression *); - ir_emit_vertex *read_emit_vertex(s_expression *); - ir_end_primitive *read_end_primitive(s_expression *); - ir_barrier *read_barrier(s_expression *); - - ir_dereference *read_dereference(s_expression *); - ir_dereference_variable *read_var_ref(s_expression *); -}; - -} /* anonymous namespace */ - -ir_reader::ir_reader(_mesa_glsl_parse_state *state) : state(state) -{ - this->mem_ctx = state; -} - -void -_mesa_glsl_read_ir(_mesa_glsl_parse_state *state, exec_list *instructions, - const char *src, bool scan_for_protos) -{ - ir_reader r(state); - r.read(instructions, src, scan_for_protos); -} - -void -ir_reader::read(exec_list *instructions, const char *src, bool scan_for_protos) -{ - void *sx_mem_ctx = ralloc_context(NULL); - s_expression *expr = s_expression::read_expression(sx_mem_ctx, src); - if (expr == NULL) { - ir_read_error(NULL, "couldn't parse S-Expression."); - return; - } - - if (scan_for_protos) { - scan_for_prototypes(instructions, expr); - if (state->error) - return; - } - - read_instructions(instructions, expr, NULL); - ralloc_free(sx_mem_ctx); - - if (debug) - validate_ir_tree(instructions); -} - -void -ir_reader::ir_read_error(s_expression *expr, const char *fmt, ...) -{ - va_list ap; - - state->error = true; - - if (state->current_function != NULL) - ralloc_asprintf_append(&state->info_log, "In function %s:\n", - state->current_function->function_name()); - ralloc_strcat(&state->info_log, "error: "); - - va_start(ap, fmt); - ralloc_vasprintf_append(&state->info_log, fmt, ap); - va_end(ap); - ralloc_strcat(&state->info_log, "\n"); - - if (expr != NULL) { - ralloc_strcat(&state->info_log, "...in this context:\n "); - expr->print(); - ralloc_strcat(&state->info_log, "\n\n"); - } -} - -const glsl_type * -ir_reader::read_type(s_expression *expr) -{ - s_expression *s_base_type; - s_int *s_size; - - s_pattern pat[] = { "array", s_base_type, s_size }; - if (MATCH(expr, pat)) { - const glsl_type *base_type = read_type(s_base_type); - if (base_type == NULL) { - ir_read_error(NULL, "when reading base type of array type"); - return NULL; - } - - return glsl_type::get_array_instance(base_type, s_size->value()); - } - - s_symbol *type_sym = SX_AS_SYMBOL(expr); - if (type_sym == NULL) { - ir_read_error(expr, "expected "); - return NULL; - } - - const glsl_type *type = state->symbols->get_type(type_sym->value()); - if (type == NULL) - ir_read_error(expr, "invalid type: %s", type_sym->value()); - - return type; -} - - -void -ir_reader::scan_for_prototypes(exec_list *instructions, s_expression *expr) -{ - s_list *list = SX_AS_LIST(expr); - if (list == NULL) { - ir_read_error(expr, "Expected ( ...); found an atom."); - return; - } - - foreach_in_list(s_list, sub, &list->subexpressions) { - if (!sub->is_list()) - continue; // not a (function ...); ignore it. - - s_symbol *tag = SX_AS_SYMBOL(sub->subexpressions.get_head()); - if (tag == NULL || strcmp(tag->value(), "function") != 0) - continue; // not a (function ...); ignore it. - - ir_function *f = read_function(sub, true); - if (f == NULL) - return; - instructions->push_tail(f); - } -} - -ir_function * -ir_reader::read_function(s_expression *expr, bool skip_body) -{ - bool added = false; - s_symbol *name; - - s_pattern pat[] = { "function", name }; - if (!PARTIAL_MATCH(expr, pat)) { - ir_read_error(expr, "Expected (function (signature ...) ...)"); - return NULL; - } - - ir_function *f = state->symbols->get_function(name->value()); - if (f == NULL) { - f = new(mem_ctx) ir_function(name->value()); - added = state->symbols->add_function(f); - assert(added); - } - - /* Skip over "function" tag and function name (which are guaranteed to be - * present by the above PARTIAL_MATCH call). - */ - exec_node *node = ((s_list *) expr)->subexpressions.get_head_raw()->next->next; - for (/* nothing */; !node->is_tail_sentinel(); node = node->next) { - s_expression *s_sig = (s_expression *) node; - read_function_sig(f, s_sig, skip_body); - } - return added ? f : NULL; -} - -static bool -always_available(const _mesa_glsl_parse_state *) -{ - return true; -} - -void -ir_reader::read_function_sig(ir_function *f, s_expression *expr, bool skip_body) -{ - s_expression *type_expr; - s_list *paramlist; - s_list *body_list; - - s_pattern pat[] = { "signature", type_expr, paramlist, body_list }; - if (!MATCH(expr, pat)) { - ir_read_error(expr, "Expected (signature (parameters ...) " - "( ...))"); - return; - } - - const glsl_type *return_type = read_type(type_expr); - if (return_type == NULL) - return; - - s_symbol *paramtag = SX_AS_SYMBOL(paramlist->subexpressions.get_head()); - if (paramtag == NULL || strcmp(paramtag->value(), "parameters") != 0) { - ir_read_error(paramlist, "Expected (parameters ...)"); - return; - } - - // Read the parameters list into a temporary place. - exec_list hir_parameters; - state->symbols->push_scope(); - - /* Skip over the "parameters" tag. */ - exec_node *node = paramlist->subexpressions.get_head_raw()->next; - for (/* nothing */; !node->is_tail_sentinel(); node = node->next) { - ir_variable *var = read_declaration((s_expression *) node); - if (var == NULL) - return; - - hir_parameters.push_tail(var); - } - - ir_function_signature *sig = - f->exact_matching_signature(state, &hir_parameters); - if (sig == NULL && skip_body) { - /* If scanning for prototypes, generate a new signature. */ - /* ir_reader doesn't know what languages support a given built-in, so - * just say that they're always available. For now, other mechanisms - * guarantee the right built-ins are available. - */ - sig = new(mem_ctx) ir_function_signature(return_type, always_available); - f->add_signature(sig); - } else if (sig != NULL) { - const char *badvar = sig->qualifiers_match(&hir_parameters); - if (badvar != NULL) { - ir_read_error(expr, "function `%s' parameter `%s' qualifiers " - "don't match prototype", f->name, badvar); - return; - } - - if (sig->return_type != return_type) { - ir_read_error(expr, "function `%s' return type doesn't " - "match prototype", f->name); - return; - } - } else { - /* No prototype for this body exists - skip it. */ - state->symbols->pop_scope(); - return; - } - assert(sig != NULL); - - sig->replace_parameters(&hir_parameters); - - if (!skip_body && !body_list->subexpressions.is_empty()) { - if (sig->is_defined) { - ir_read_error(expr, "function %s redefined", f->name); - return; - } - state->current_function = sig; - read_instructions(&sig->body, body_list, NULL); - state->current_function = NULL; - sig->is_defined = true; - } - - state->symbols->pop_scope(); -} - -void -ir_reader::read_instructions(exec_list *instructions, s_expression *expr, - ir_loop *loop_ctx) -{ - // Read in a list of instructions - s_list *list = SX_AS_LIST(expr); - if (list == NULL) { - ir_read_error(expr, "Expected ( ...); found an atom."); - return; - } - - foreach_in_list(s_expression, sub, &list->subexpressions) { - ir_instruction *ir = read_instruction(sub, loop_ctx); - if (ir != NULL) { - /* Global variable declarations should be moved to the top, before - * any functions that might use them. Functions are added to the - * instruction stream when scanning for prototypes, so without this - * hack, they always appear before variable declarations. - */ - if (state->current_function == NULL && ir->as_variable() != NULL) - instructions->push_head(ir); - else - instructions->push_tail(ir); - } - } -} - - -ir_instruction * -ir_reader::read_instruction(s_expression *expr, ir_loop *loop_ctx) -{ - s_symbol *symbol = SX_AS_SYMBOL(expr); - if (symbol != NULL) { - if (strcmp(symbol->value(), "break") == 0 && loop_ctx != NULL) - return new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break); - if (strcmp(symbol->value(), "continue") == 0 && loop_ctx != NULL) - return new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_continue); - } - - s_list *list = SX_AS_LIST(expr); - if (list == NULL || list->subexpressions.is_empty()) { - ir_read_error(expr, "Invalid instruction.\n"); - return NULL; - } - - s_symbol *tag = SX_AS_SYMBOL(list->subexpressions.get_head()); - if (tag == NULL) { - ir_read_error(expr, "expected instruction tag"); - return NULL; - } - - ir_instruction *inst = NULL; - if (strcmp(tag->value(), "declare") == 0) { - inst = read_declaration(list); - } else if (strcmp(tag->value(), "assign") == 0) { - inst = read_assignment(list); - } else if (strcmp(tag->value(), "if") == 0) { - inst = read_if(list, loop_ctx); - } else if (strcmp(tag->value(), "loop") == 0) { - inst = read_loop(list); - } else if (strcmp(tag->value(), "call") == 0) { - inst = read_call(list); - } else if (strcmp(tag->value(), "return") == 0) { - inst = read_return(list); - } else if (strcmp(tag->value(), "function") == 0) { - inst = read_function(list, false); - } else if (strcmp(tag->value(), "emit-vertex") == 0) { - inst = read_emit_vertex(list); - } else if (strcmp(tag->value(), "end-primitive") == 0) { - inst = read_end_primitive(list); - } else if (strcmp(tag->value(), "barrier") == 0) { - inst = read_barrier(list); - } else { - inst = read_rvalue(list); - if (inst == NULL) - ir_read_error(NULL, "when reading instruction"); - } - return inst; -} - -ir_variable * -ir_reader::read_declaration(s_expression *expr) -{ - s_list *s_quals; - s_expression *s_type; - s_symbol *s_name; - - s_pattern pat[] = { "declare", s_quals, s_type, s_name }; - if (!MATCH(expr, pat)) { - ir_read_error(expr, "expected (declare () )"); - return NULL; - } - - const glsl_type *type = read_type(s_type); - if (type == NULL) - return NULL; - - ir_variable *var = new(mem_ctx) ir_variable(type, s_name->value(), - ir_var_auto); - - foreach_in_list(s_symbol, qualifier, &s_quals->subexpressions) { - if (!qualifier->is_symbol()) { - ir_read_error(expr, "qualifier list must contain only symbols"); - return NULL; - } - - // FINISHME: Check for duplicate/conflicting qualifiers. - if (strcmp(qualifier->value(), "centroid") == 0) { - var->data.centroid = 1; - } else if (strcmp(qualifier->value(), "sample") == 0) { - var->data.sample = 1; - } else if (strcmp(qualifier->value(), "patch") == 0) { - var->data.patch = 1; - } else if (strcmp(qualifier->value(), "explicit_invariant") == 0) { - var->data.explicit_invariant = true; - } else if (strcmp(qualifier->value(), "invariant") == 0) { - var->data.invariant = true; - } else if (strcmp(qualifier->value(), "uniform") == 0) { - var->data.mode = ir_var_uniform; - } else if (strcmp(qualifier->value(), "shader_storage") == 0) { - var->data.mode = ir_var_shader_storage; - } else if (strcmp(qualifier->value(), "auto") == 0) { - var->data.mode = ir_var_auto; - } else if (strcmp(qualifier->value(), "in") == 0) { - var->data.mode = ir_var_function_in; - } else if (strcmp(qualifier->value(), "shader_in") == 0) { - var->data.mode = ir_var_shader_in; - } else if (strcmp(qualifier->value(), "const_in") == 0) { - var->data.mode = ir_var_const_in; - } else if (strcmp(qualifier->value(), "out") == 0) { - var->data.mode = ir_var_function_out; - } else if (strcmp(qualifier->value(), "shader_out") == 0) { - var->data.mode = ir_var_shader_out; - } else if (strcmp(qualifier->value(), "inout") == 0) { - var->data.mode = ir_var_function_inout; - } else if (strcmp(qualifier->value(), "temporary") == 0) { - var->data.mode = ir_var_temporary; - } else if (strcmp(qualifier->value(), "stream1") == 0) { - var->data.stream = 1; - } else if (strcmp(qualifier->value(), "stream2") == 0) { - var->data.stream = 2; - } else if (strcmp(qualifier->value(), "stream3") == 0) { - var->data.stream = 3; - } else if (strcmp(qualifier->value(), "smooth") == 0) { - var->data.interpolation = INTERP_MODE_SMOOTH; - } else if (strcmp(qualifier->value(), "flat") == 0) { - var->data.interpolation = INTERP_MODE_FLAT; - } else if (strcmp(qualifier->value(), "noperspective") == 0) { - var->data.interpolation = INTERP_MODE_NOPERSPECTIVE; - } else { - ir_read_error(expr, "unknown qualifier: %s", qualifier->value()); - return NULL; - } - } - - // Add the variable to the symbol table - state->symbols->add_variable(var); - - return var; -} - - -ir_if * -ir_reader::read_if(s_expression *expr, ir_loop *loop_ctx) -{ - s_expression *s_cond; - s_expression *s_then; - s_expression *s_else; - - s_pattern pat[] = { "if", s_cond, s_then, s_else }; - if (!MATCH(expr, pat)) { - ir_read_error(expr, "expected (if (...) (...))"); - return NULL; - } - - ir_rvalue *condition = read_rvalue(s_cond); - if (condition == NULL) { - ir_read_error(NULL, "when reading condition of (if ...)"); - return NULL; - } - - ir_if *iff = new(mem_ctx) ir_if(condition); - - read_instructions(&iff->then_instructions, s_then, loop_ctx); - read_instructions(&iff->else_instructions, s_else, loop_ctx); - if (state->error) { - delete iff; - iff = NULL; - } - return iff; -} - - -ir_loop * -ir_reader::read_loop(s_expression *expr) -{ - s_expression *s_body; - - s_pattern loop_pat[] = { "loop", s_body }; - if (!MATCH(expr, loop_pat)) { - ir_read_error(expr, "expected (loop )"); - return NULL; - } - - ir_loop *loop = new(mem_ctx) ir_loop; - - read_instructions(&loop->body_instructions, s_body, loop); - if (state->error) { - delete loop; - loop = NULL; - } - return loop; -} - - -ir_return * -ir_reader::read_return(s_expression *expr) -{ - s_expression *s_retval; - - s_pattern return_value_pat[] = { "return", s_retval}; - s_pattern return_void_pat[] = { "return" }; - if (MATCH(expr, return_value_pat)) { - ir_rvalue *retval = read_rvalue(s_retval); - if (retval == NULL) { - ir_read_error(NULL, "when reading return value"); - return NULL; - } - return new(mem_ctx) ir_return(retval); - } else if (MATCH(expr, return_void_pat)) { - return new(mem_ctx) ir_return; - } else { - ir_read_error(expr, "expected (return ) or (return)"); - return NULL; - } -} - - -ir_rvalue * -ir_reader::read_rvalue(s_expression *expr) -{ - s_list *list = SX_AS_LIST(expr); - if (list == NULL || list->subexpressions.is_empty()) - return NULL; - - s_symbol *tag = SX_AS_SYMBOL(list->subexpressions.get_head()); - if (tag == NULL) { - ir_read_error(expr, "expected rvalue tag"); - return NULL; - } - - ir_rvalue *rvalue = read_dereference(list); - if (rvalue != NULL || state->error) - return rvalue; - else if (strcmp(tag->value(), "swiz") == 0) { - rvalue = read_swizzle(list); - } else if (strcmp(tag->value(), "expression") == 0) { - rvalue = read_expression(list); - } else if (strcmp(tag->value(), "constant") == 0) { - rvalue = read_constant(list); - } else { - rvalue = read_texture(list); - if (rvalue == NULL && !state->error) - ir_read_error(expr, "unrecognized rvalue tag: %s", tag->value()); - } - - return rvalue; -} - -ir_assignment * -ir_reader::read_assignment(s_expression *expr) -{ - s_expression *cond_expr = NULL; - s_expression *lhs_expr, *rhs_expr; - s_list *mask_list; - - s_pattern pat4[] = { "assign", mask_list, lhs_expr, rhs_expr }; - s_pattern pat5[] = { "assign", cond_expr, mask_list, lhs_expr, rhs_expr }; - if (!MATCH(expr, pat4) && !MATCH(expr, pat5)) { - ir_read_error(expr, "expected (assign () )"); - return NULL; - } - - if (cond_expr != NULL) { - ir_rvalue *condition = read_rvalue(cond_expr); - if (condition == NULL) - ir_read_error(NULL, "when reading condition of assignment"); - else - ir_read_error(expr, "conditional assignemnts are deprecated"); - - return NULL; - } - - unsigned mask = 0; - - s_symbol *mask_symbol; - s_pattern mask_pat[] = { mask_symbol }; - if (MATCH(mask_list, mask_pat)) { - const char *mask_str = mask_symbol->value(); - unsigned mask_length = strlen(mask_str); - if (mask_length > 4) { - ir_read_error(expr, "invalid write mask: %s", mask_str); - return NULL; - } - - const unsigned idx_map[] = { 3, 0, 1, 2 }; /* w=bit 3, x=0, y=1, z=2 */ - - for (unsigned i = 0; i < mask_length; i++) { - if (mask_str[i] < 'w' || mask_str[i] > 'z') { - ir_read_error(expr, "write mask contains invalid character: %c", - mask_str[i]); - return NULL; - } - mask |= 1 << idx_map[mask_str[i] - 'w']; - } - } else if (!mask_list->subexpressions.is_empty()) { - ir_read_error(mask_list, "expected () or ()"); - return NULL; - } - - ir_dereference *lhs = read_dereference(lhs_expr); - if (lhs == NULL) { - ir_read_error(NULL, "when reading left-hand side of assignment"); - return NULL; - } - - ir_rvalue *rhs = read_rvalue(rhs_expr); - if (rhs == NULL) { - ir_read_error(NULL, "when reading right-hand side of assignment"); - return NULL; - } - - if (mask == 0 && (lhs->type->is_vector() || lhs->type->is_scalar())) { - ir_read_error(expr, "non-zero write mask required."); - return NULL; - } - - return new(mem_ctx) ir_assignment(lhs, rhs, mask); -} - -ir_call * -ir_reader::read_call(s_expression *expr) -{ - s_symbol *name; - s_list *params; - s_list *s_return = NULL; - - ir_dereference_variable *return_deref = NULL; - - s_pattern void_pat[] = { "call", name, params }; - s_pattern non_void_pat[] = { "call", name, s_return, params }; - if (MATCH(expr, non_void_pat)) { - return_deref = read_var_ref(s_return); - if (return_deref == NULL) { - ir_read_error(s_return, "when reading a call's return storage"); - return NULL; - } - } else if (!MATCH(expr, void_pat)) { - ir_read_error(expr, "expected (call [] ( ...))"); - return NULL; - } - - exec_list parameters; - - foreach_in_list(s_expression, e, ¶ms->subexpressions) { - ir_rvalue *param = read_rvalue(e); - if (param == NULL) { - ir_read_error(e, "when reading parameter to function call"); - return NULL; - } - parameters.push_tail(param); - } - - ir_function *f = state->symbols->get_function(name->value()); - if (f == NULL) { - ir_read_error(expr, "found call to undefined function %s", - name->value()); - return NULL; - } - - ir_function_signature *callee = - f->matching_signature(state, ¶meters, true); - if (callee == NULL) { - ir_read_error(expr, "couldn't find matching signature for function " - "%s", name->value()); - return NULL; - } - - if (callee->return_type == glsl_type::void_type && return_deref) { - ir_read_error(expr, "call has return value storage but void type"); - return NULL; - } else if (callee->return_type != glsl_type::void_type && !return_deref) { - ir_read_error(expr, "call has non-void type but no return value storage"); - return NULL; - } - - return new(mem_ctx) ir_call(callee, return_deref, ¶meters); -} - -ir_expression * -ir_reader::read_expression(s_expression *expr) -{ - s_expression *s_type; - s_symbol *s_op; - s_expression *s_arg[4] = {NULL}; - - s_pattern pat[] = { "expression", s_type, s_op, s_arg[0] }; - if (!PARTIAL_MATCH(expr, pat)) { - ir_read_error(expr, "expected (expression " - " [] [] [])"); - return NULL; - } - s_arg[1] = (s_expression *) s_arg[0]->next; // may be tail sentinel - s_arg[2] = (s_expression *) s_arg[1]->next; // may be tail sentinel or NULL - if (s_arg[2]) - s_arg[3] = (s_expression *) s_arg[2]->next; // may be tail sentinel or NULL - - const glsl_type *type = read_type(s_type); - if (type == NULL) - return NULL; - - /* Read the operator */ - ir_expression_operation op = ir_expression::get_operator(s_op->value()); - if (op == (ir_expression_operation) -1) { - ir_read_error(expr, "invalid operator: %s", s_op->value()); - return NULL; - } - - /* Skip "expression" by subtracting 3. */ - int num_operands = (int) ((s_list *) expr)->subexpressions.length() - 3; - - int expected_operands = ir_expression::get_num_operands(op); - if (num_operands != expected_operands) { - ir_read_error(expr, "found %d expression operands, expected %d", - num_operands, expected_operands); - return NULL; - } - - ir_rvalue *arg[4] = {NULL}; - for (int i = 0; i < num_operands; i++) { - arg[i] = read_rvalue(s_arg[i]); - if (arg[i] == NULL) { - ir_read_error(NULL, "when reading operand #%d of %s", i, s_op->value()); - return NULL; - } - } - - return new(mem_ctx) ir_expression(op, type, arg[0], arg[1], arg[2], arg[3]); -} - -ir_swizzle * -ir_reader::read_swizzle(s_expression *expr) -{ - s_symbol *swiz; - s_expression *sub; - - s_pattern pat[] = { "swiz", swiz, sub }; - if (!MATCH(expr, pat)) { - ir_read_error(expr, "expected (swiz )"); - return NULL; - } - - if (strlen(swiz->value()) > 4) { - ir_read_error(expr, "expected a valid swizzle; found %s", swiz->value()); - return NULL; - } - - ir_rvalue *rvalue = read_rvalue(sub); - if (rvalue == NULL) - return NULL; - - ir_swizzle *ir = ir_swizzle::create(rvalue, swiz->value(), - rvalue->type->vector_elements); - if (ir == NULL) - ir_read_error(expr, "invalid swizzle"); - - return ir; -} - -ir_constant * -ir_reader::read_constant(s_expression *expr) -{ - s_expression *type_expr; - s_list *values; - - s_pattern pat[] = { "constant", type_expr, values }; - if (!MATCH(expr, pat)) { - ir_read_error(expr, "expected (constant (...))"); - return NULL; - } - - const glsl_type *type = read_type(type_expr); - if (type == NULL) - return NULL; - - if (values == NULL) { - ir_read_error(expr, "expected (constant (...))"); - return NULL; - } - - if (type->is_array()) { - unsigned elements_supplied = 0; - exec_list elements; - foreach_in_list(s_expression, elt, &values->subexpressions) { - ir_constant *ir_elt = read_constant(elt); - if (ir_elt == NULL) - return NULL; - elements.push_tail(ir_elt); - elements_supplied++; - } - - if (elements_supplied != type->length) { - ir_read_error(values, "expected exactly %u array elements, " - "given %u", type->length, elements_supplied); - return NULL; - } - return new(mem_ctx) ir_constant(type, &elements); - } - - ir_constant_data data = { { 0 } }; - - // Read in list of values (at most 16). - unsigned k = 0; - foreach_in_list(s_expression, expr, &values->subexpressions) { - if (k >= 16) { - ir_read_error(values, "expected at most 16 numbers"); - return NULL; - } - - if (type->is_float()) { - s_number *value = SX_AS_NUMBER(expr); - if (value == NULL) { - ir_read_error(values, "expected numbers"); - return NULL; - } - data.f[k] = value->fvalue(); - } else { - s_int *value = SX_AS_INT(expr); - if (value == NULL) { - ir_read_error(values, "expected integers"); - return NULL; - } - - switch (type->base_type) { - case GLSL_TYPE_UINT: { - data.u[k] = value->value(); - break; - } - case GLSL_TYPE_INT: { - data.i[k] = value->value(); - break; - } - case GLSL_TYPE_BOOL: { - data.b[k] = value->value(); - break; - } - default: - ir_read_error(values, "unsupported constant type"); - return NULL; - } - } - ++k; - } - if (k != type->components()) { - ir_read_error(values, "expected %u constant values, found %u", - type->components(), k); - return NULL; - } - - return new(mem_ctx) ir_constant(type, &data); -} - -ir_dereference_variable * -ir_reader::read_var_ref(s_expression *expr) -{ - s_symbol *s_var; - s_pattern var_pat[] = { "var_ref", s_var }; - - if (MATCH(expr, var_pat)) { - ir_variable *var = state->symbols->get_variable(s_var->value()); - if (var == NULL) { - ir_read_error(expr, "undeclared variable: %s", s_var->value()); - return NULL; - } - return new(mem_ctx) ir_dereference_variable(var); - } - return NULL; -} - -ir_dereference * -ir_reader::read_dereference(s_expression *expr) -{ - s_expression *s_subject; - s_expression *s_index; - s_symbol *s_field; - - s_pattern array_pat[] = { "array_ref", s_subject, s_index }; - s_pattern record_pat[] = { "record_ref", s_subject, s_field }; - - ir_dereference_variable *var_ref = read_var_ref(expr); - if (var_ref != NULL) { - return var_ref; - } else if (MATCH(expr, array_pat)) { - ir_rvalue *subject = read_rvalue(s_subject); - if (subject == NULL) { - ir_read_error(NULL, "when reading the subject of an array_ref"); - return NULL; - } - - ir_rvalue *idx = read_rvalue(s_index); - if (idx == NULL) { - ir_read_error(NULL, "when reading the index of an array_ref"); - return NULL; - } - return new(mem_ctx) ir_dereference_array(subject, idx); - } else if (MATCH(expr, record_pat)) { - ir_rvalue *subject = read_rvalue(s_subject); - if (subject == NULL) { - ir_read_error(NULL, "when reading the subject of a record_ref"); - return NULL; - } - return new(mem_ctx) ir_dereference_record(subject, s_field->value()); - } - return NULL; -} - -ir_texture * -ir_reader::read_texture(s_expression *expr) -{ - s_symbol *tag = NULL; - s_expression *s_sparse = NULL; - s_expression *s_type = NULL; - s_expression *s_sampler = NULL; - s_expression *s_coord = NULL; - s_expression *s_offset = NULL; - s_expression *s_proj = NULL; - s_list *s_shadow = NULL; - s_list *s_clamp = NULL; - s_expression *s_lod = NULL; - s_expression *s_sample_index = NULL; - s_expression *s_component = NULL; - - ir_texture_opcode op = ir_tex; /* silence warning */ - - s_pattern tex_pattern[] = - { "tex", s_type, s_sampler, s_coord, s_sparse, s_offset, s_proj, s_shadow, s_clamp }; - s_pattern txb_pattern[] = - { "txb", s_type, s_sampler, s_coord, s_sparse, s_offset, s_proj, s_shadow, s_clamp, s_lod }; - s_pattern txd_pattern[] = - { "txd", s_type, s_sampler, s_coord, s_sparse, s_offset, s_proj, s_shadow, s_clamp, s_lod }; - s_pattern lod_pattern[] = - { "lod", s_type, s_sampler, s_coord }; - s_pattern txf_pattern[] = - { "txf", s_type, s_sampler, s_coord, s_sparse, s_offset, s_lod }; - s_pattern txf_ms_pattern[] = - { "txf_ms", s_type, s_sampler, s_coord, s_sparse, s_sample_index }; - s_pattern txs_pattern[] = - { "txs", s_type, s_sampler, s_lod }; - s_pattern tg4_pattern[] = - { "tg4", s_type, s_sampler, s_coord, s_sparse, s_offset, s_component }; - s_pattern query_levels_pattern[] = - { "query_levels", s_type, s_sampler }; - s_pattern texture_samples_pattern[] = - { "samples", s_type, s_sampler }; - s_pattern other_pattern[] = - { tag, s_type, s_sampler, s_coord, s_sparse, s_offset, s_proj, s_shadow, s_lod }; - - if (MATCH(expr, lod_pattern)) { - op = ir_lod; - } else if (MATCH(expr, tex_pattern)) { - op = ir_tex; - } else if (MATCH(expr, txb_pattern)) { - op = ir_txb; - } else if (MATCH(expr, txd_pattern)) { - op = ir_txd; - } else if (MATCH(expr, txf_pattern)) { - op = ir_txf; - } else if (MATCH(expr, txf_ms_pattern)) { - op = ir_txf_ms; - } else if (MATCH(expr, txs_pattern)) { - op = ir_txs; - } else if (MATCH(expr, tg4_pattern)) { - op = ir_tg4; - } else if (MATCH(expr, query_levels_pattern)) { - op = ir_query_levels; - } else if (MATCH(expr, texture_samples_pattern)) { - op = ir_texture_samples; - } else if (MATCH(expr, other_pattern)) { - op = ir_texture::get_opcode(tag->value()); - if (op == (ir_texture_opcode) -1) - return NULL; - } else { - ir_read_error(NULL, "unexpected texture pattern %s", tag->value()); - return NULL; - } - - bool is_sparse = false; - if (s_sparse) { - s_int *sparse = SX_AS_INT(s_sparse); - if (sparse == NULL) { - ir_read_error(NULL, "when reading sparse"); - return NULL; - } - is_sparse = sparse->value(); - } - - ir_texture *tex = new(mem_ctx) ir_texture(op, is_sparse); - - // Read return type - const glsl_type *type = read_type(s_type); - if (type == NULL) { - ir_read_error(NULL, "when reading type in (%s ...)", - tex->opcode_string()); - return NULL; - } - - // Read sampler (must be a deref) - ir_dereference *sampler = read_dereference(s_sampler); - if (sampler == NULL) { - ir_read_error(NULL, "when reading sampler in (%s ...)", - tex->opcode_string()); - return NULL; - } - - if (is_sparse) { - const glsl_type *texel = type->field_type("texel"); - if (texel == glsl_type::error_type) { - ir_read_error(NULL, "invalid type for sparse texture"); - return NULL; - } - type = texel; - } - tex->set_sampler(sampler, type); - - if (op != ir_txs) { - // Read coordinate (any rvalue) - tex->coordinate = read_rvalue(s_coord); - if (tex->coordinate == NULL) { - ir_read_error(NULL, "when reading coordinate in (%s ...)", - tex->opcode_string()); - return NULL; - } - - if (op != ir_txf_ms && op != ir_lod) { - // Read texel offset - either 0 or an rvalue. - s_int *si_offset = SX_AS_INT(s_offset); - if (si_offset == NULL || si_offset->value() != 0) { - tex->offset = read_rvalue(s_offset); - if (tex->offset == NULL) { - ir_read_error(s_offset, "expected 0 or an expression"); - return NULL; - } - } - } - } - - if (op != ir_txf && op != ir_txf_ms && - op != ir_txs && op != ir_lod && op != ir_tg4 && - op != ir_query_levels && op != ir_texture_samples) { - s_int *proj_as_int = SX_AS_INT(s_proj); - if (proj_as_int && proj_as_int->value() == 1) { - tex->projector = NULL; - } else { - tex->projector = read_rvalue(s_proj); - if (tex->projector == NULL) { - ir_read_error(NULL, "when reading projective divide in (%s ..)", - tex->opcode_string()); - return NULL; - } - } - - if (s_shadow->subexpressions.is_empty()) { - tex->shadow_comparator = NULL; - } else { - tex->shadow_comparator = read_rvalue(s_shadow); - if (tex->shadow_comparator == NULL) { - ir_read_error(NULL, "when reading shadow comparator in (%s ..)", - tex->opcode_string()); - return NULL; - } - } - } - - if (op == ir_tex || op == ir_txb || op == ir_txd) { - if (s_clamp->subexpressions.is_empty()) { - tex->clamp = NULL; - } else { - tex->clamp = read_rvalue(s_clamp); - if (tex->clamp == NULL) { - ir_read_error(NULL, "when reading clamp in (%s ..)", - tex->opcode_string()); - return NULL; - } - } - } - - switch (op) { - case ir_txb: - tex->lod_info.bias = read_rvalue(s_lod); - if (tex->lod_info.bias == NULL) { - ir_read_error(NULL, "when reading LOD bias in (txb ...)"); - return NULL; - } - break; - case ir_txl: - case ir_txf: - case ir_txs: - tex->lod_info.lod = read_rvalue(s_lod); - if (tex->lod_info.lod == NULL) { - ir_read_error(NULL, "when reading LOD in (%s ...)", - tex->opcode_string()); - return NULL; - } - break; - case ir_txf_ms: - tex->lod_info.sample_index = read_rvalue(s_sample_index); - if (tex->lod_info.sample_index == NULL) { - ir_read_error(NULL, "when reading sample_index in (txf_ms ...)"); - return NULL; - } - break; - case ir_txd: { - s_expression *s_dx, *s_dy; - s_pattern dxdy_pat[] = { s_dx, s_dy }; - if (!MATCH(s_lod, dxdy_pat)) { - ir_read_error(s_lod, "expected (dPdx dPdy) in (txd ...)"); - return NULL; - } - tex->lod_info.grad.dPdx = read_rvalue(s_dx); - if (tex->lod_info.grad.dPdx == NULL) { - ir_read_error(NULL, "when reading dPdx in (txd ...)"); - return NULL; - } - tex->lod_info.grad.dPdy = read_rvalue(s_dy); - if (tex->lod_info.grad.dPdy == NULL) { - ir_read_error(NULL, "when reading dPdy in (txd ...)"); - return NULL; - } - break; - } - case ir_tg4: - tex->lod_info.component = read_rvalue(s_component); - if (tex->lod_info.component == NULL) { - ir_read_error(NULL, "when reading component in (tg4 ...)"); - return NULL; - } - break; - default: - // tex and lod don't have any extra parameters. - break; - }; - return tex; -} - -ir_emit_vertex * -ir_reader::read_emit_vertex(s_expression *expr) -{ - s_expression *s_stream = NULL; - - s_pattern pat[] = { "emit-vertex", s_stream }; - - if (MATCH(expr, pat)) { - ir_rvalue *stream = read_dereference(s_stream); - if (stream == NULL) { - ir_read_error(NULL, "when reading stream info in emit-vertex"); - return NULL; - } - return new(mem_ctx) ir_emit_vertex(stream); - } - ir_read_error(NULL, "when reading emit-vertex"); - return NULL; -} - -ir_end_primitive * -ir_reader::read_end_primitive(s_expression *expr) -{ - s_expression *s_stream = NULL; - - s_pattern pat[] = { "end-primitive", s_stream }; - - if (MATCH(expr, pat)) { - ir_rvalue *stream = read_dereference(s_stream); - if (stream == NULL) { - ir_read_error(NULL, "when reading stream info in end-primitive"); - return NULL; - } - return new(mem_ctx) ir_end_primitive(stream); - } - ir_read_error(NULL, "when reading end-primitive"); - return NULL; -} - -ir_barrier * -ir_reader::read_barrier(s_expression *expr) -{ - s_pattern pat[] = { "barrier" }; - - if (MATCH(expr, pat)) { - return new(mem_ctx) ir_barrier(); - } - ir_read_error(NULL, "when reading barrier"); - return NULL; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_reader.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_reader.h deleted file mode 100644 index 133e1c3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_reader.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_READER_H -#define IR_READER_H - -#include "ir.h" - -void _mesa_glsl_read_ir(_mesa_glsl_parse_state *state, exec_list *instructions, - const char *src, bool scan_for_prototypes); - -#endif /* IR_READER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp deleted file mode 100644 index 4fc96c4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_rvalue_visitor.cpp - * - * Generic class to implement the common pattern we have of wanting to - * visit each ir_rvalue * and possibly change that node to a different - * class. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_rvalue_visitor.h" -#include "../glsl_types.h" - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_expression *ir) -{ - unsigned int operand; - - for (operand = 0; operand < ir->num_operands; operand++) { - handle_rvalue(&ir->operands[operand]); - } - - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_texture *ir) -{ - handle_rvalue(&ir->coordinate); - handle_rvalue(&ir->projector); - handle_rvalue(&ir->shadow_comparator); - handle_rvalue(&ir->offset); - handle_rvalue(&ir->clamp); - - switch (ir->op) { - case ir_tex: - case ir_lod: - case ir_query_levels: - case ir_texture_samples: - case ir_samples_identical: - break; - case ir_txb: - handle_rvalue(&ir->lod_info.bias); - break; - case ir_txf: - case ir_txl: - case ir_txs: - handle_rvalue(&ir->lod_info.lod); - break; - case ir_txf_ms: - handle_rvalue(&ir->lod_info.sample_index); - break; - case ir_txd: - handle_rvalue(&ir->lod_info.grad.dPdx); - handle_rvalue(&ir->lod_info.grad.dPdy); - break; - case ir_tg4: - handle_rvalue(&ir->lod_info.component); - break; - } - - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_swizzle *ir) -{ - handle_rvalue(&ir->val); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_dereference_array *ir) -{ - /* The array index is not the target of the assignment, so clear the - * 'in_assignee' flag. Restore it after returning from the array index. - */ - const bool was_in_assignee = this->in_assignee; - this->in_assignee = false; - handle_rvalue(&ir->array_index); - this->in_assignee = was_in_assignee; - - handle_rvalue(&ir->array); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_dereference_record *ir) -{ - handle_rvalue(&ir->record); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_assignment *ir) -{ - handle_rvalue(&ir->rhs); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_call *ir) -{ - foreach_in_list_safe(ir_rvalue, param, &ir->actual_parameters) { - ir_rvalue *new_param = param; - handle_rvalue(&new_param); - - if (new_param != param) { - param->replace_with(new_param); - } - } - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_discard *ir) -{ - handle_rvalue(&ir->condition); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_return *ir) -{ - handle_rvalue(&ir->value); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_if *ir) -{ - handle_rvalue(&ir->condition); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_emit_vertex *ir) -{ - handle_rvalue(&ir->stream); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_base_visitor::rvalue_visit(ir_end_primitive *ir) -{ - handle_rvalue(&ir->stream); - return visit_continue; -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_expression *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_texture *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_swizzle *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_dereference_array *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_dereference_record *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_assignment *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_call *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_discard *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_return *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_if *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_emit_vertex *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_visitor::visit_leave(ir_end_primitive *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_expression *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_texture *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_swizzle *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_dereference_array *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_dereference_record *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_assignment *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_call *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_discard *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_return *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_if *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_emit_vertex *ir) -{ - return rvalue_visit(ir); -} - -ir_visitor_status -ir_rvalue_enter_visitor::visit_enter(ir_end_primitive *ir) -{ - return rvalue_visit(ir); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_rvalue_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_rvalue_visitor.h deleted file mode 100644 index 73d1885..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_rvalue_visitor.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_rvalue_visitor.h - * - * Generic class to implement the common pattern we have of wanting to - * visit each ir_rvalue * and possibly change that node to a different - * class. Just implement handle_rvalue() and you will be called with - * a pointer to each rvalue in the tree. - */ - -#ifndef GLSL_IR_RVALUE_VISITOR_H -#define GLSL_IR_RVALUE_VISITOR_H - -class ir_rvalue_base_visitor : public ir_hierarchical_visitor { -public: - ir_visitor_status rvalue_visit(ir_assignment *); - ir_visitor_status rvalue_visit(ir_call *); - ir_visitor_status rvalue_visit(ir_dereference_array *); - ir_visitor_status rvalue_visit(ir_dereference_record *); - ir_visitor_status rvalue_visit(ir_discard *); - ir_visitor_status rvalue_visit(ir_expression *); - ir_visitor_status rvalue_visit(ir_if *); - ir_visitor_status rvalue_visit(ir_return *); - ir_visitor_status rvalue_visit(ir_swizzle *); - ir_visitor_status rvalue_visit(ir_texture *); - ir_visitor_status rvalue_visit(ir_emit_vertex *); - ir_visitor_status rvalue_visit(ir_end_primitive *); - - virtual void handle_rvalue(ir_rvalue **rvalue) = 0; -}; - -class ir_rvalue_visitor : public ir_rvalue_base_visitor { -public: - - virtual ir_visitor_status visit_leave(ir_assignment *); - virtual ir_visitor_status visit_leave(ir_call *); - virtual ir_visitor_status visit_leave(ir_dereference_array *); - virtual ir_visitor_status visit_leave(ir_dereference_record *); - virtual ir_visitor_status visit_leave(ir_discard *); - virtual ir_visitor_status visit_leave(ir_expression *); - virtual ir_visitor_status visit_leave(ir_if *); - virtual ir_visitor_status visit_leave(ir_return *); - virtual ir_visitor_status visit_leave(ir_swizzle *); - virtual ir_visitor_status visit_leave(ir_texture *); - virtual ir_visitor_status visit_leave(ir_emit_vertex *); - virtual ir_visitor_status visit_leave(ir_end_primitive *); -}; - -class ir_rvalue_enter_visitor : public ir_rvalue_base_visitor { -public: - - virtual ir_visitor_status visit_enter(ir_assignment *); - virtual ir_visitor_status visit_enter(ir_call *); - virtual ir_visitor_status visit_enter(ir_dereference_array *); - virtual ir_visitor_status visit_enter(ir_dereference_record *); - virtual ir_visitor_status visit_enter(ir_discard *); - virtual ir_visitor_status visit_enter(ir_expression *); - virtual ir_visitor_status visit_enter(ir_if *); - virtual ir_visitor_status visit_enter(ir_return *); - virtual ir_visitor_status visit_enter(ir_swizzle *); - virtual ir_visitor_status visit_enter(ir_texture *); - virtual ir_visitor_status visit_enter(ir_emit_vertex *); - virtual ir_visitor_status visit_enter(ir_end_primitive *); -}; - -#endif /* GLSL_IR_RVALUE_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_uniform.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_uniform.h deleted file mode 100644 index cd91e82..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_uniform.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_UNIFORM_H -#define IR_UNIFORM_H - - -/* stdbool.h is necessary because this file is included in both C and C++ code. - */ -#include -#include "../../util/macros.h" -#include "../../mesa/program/prog_parameter.h" /* For union gl_constant_value. */ - -/** - * Used by GL_ARB_explicit_uniform_location extension code in the linker - * and glUniform* functions to identify inactive explicit uniform locations. - */ -#define INACTIVE_UNIFORM_EXPLICIT_LOCATION ((gl_uniform_storage *) -1) - -#ifdef __cplusplus -extern "C" { -#endif - -enum PACKED gl_uniform_driver_format { - uniform_native = 0, /**< Store data in the native format. */ - uniform_int_float, /**< Store integer data as floats. */ -}; - -struct gl_uniform_driver_storage { - /** - * Number of bytes from one array element to the next. - */ - uint8_t element_stride; - - /** - * Number of bytes from one vector in a matrix to the next. - */ - uint8_t vector_stride; - - /** - * Base format of the stored data. - */ - enum gl_uniform_driver_format format; - - /** - * Pointer to the base of the data. - */ - void *data; -}; - -struct gl_opaque_uniform_index { - /** - * Base opaque uniform index - * - * If \c gl_uniform_storage::base_type is an opaque type, this - * represents its uniform index. If \c - * gl_uniform_storage::array_elements is not zero, the array will - * use opaque uniform indices \c index through \c index + \c - * gl_uniform_storage::array_elements - 1, inclusive. - * - * Note that the index may be different in each shader stage. - */ - uint8_t index; - - /** - * Whether this opaque uniform is used in this shader stage. - */ - bool active; -}; - -struct gl_resource_name -{ - char *string; - int length; /* strlen(string) or 0 */ - int last_square_bracket; /* (strrchr(name, '[') - name) or -1 */ - bool suffix_is_zero_square_bracketed; /* suffix is [0] */ -}; - -struct gl_uniform_storage { - struct gl_resource_name name; - - /** Type of this uniform data stored. - * - * In the case of an array, it's the type of a single array element. - */ - const struct glsl_type *type; - - /** - * The number of elements in this uniform. - * - * For non-arrays, this is always 0. For arrays, the value is the size of - * the array. - */ - unsigned array_elements; - - struct gl_opaque_uniform_index opaque[MESA_SHADER_STAGES]; - - /** - * Mask of shader stages (1 << MESA_SHADER_xxx) where this uniform is used. - */ - unsigned active_shader_mask; - - /** - * Storage used by the driver for the uniform - */ - unsigned num_driver_storage; - struct gl_uniform_driver_storage *driver_storage; - - /** - * Storage used by Mesa for the uniform - * - * This form of the uniform is used by Mesa's implementation of \c - * glGetUniform. It can also be used by drivers to obtain the value of the - * uniform if the \c ::driver_storage interface is not used. - */ - union gl_constant_value *storage; - - /** Fields for GL_ARB_uniform_buffer_object - * @{ - */ - - /** - * GL_UNIFORM_BLOCK_INDEX: index of the uniform block containing - * the uniform, or -1 for the default uniform block. Note that the - * index is into the linked program's UniformBlocks[] array, not - * the linked shader's. - */ - int block_index; - - /** GL_UNIFORM_OFFSET: byte offset within the uniform block, or -1. */ - int offset; - - /** - * GL_UNIFORM_MATRIX_STRIDE: byte stride between columns or rows of - * a matrix. Set to 0 for non-matrices in UBOs, or -1 for uniforms - * in the default uniform block. - */ - int matrix_stride; - - /** - * GL_UNIFORM_ARRAY_STRIDE: byte stride between elements of the - * array. Set to zero for non-arrays in UBOs, or -1 for uniforms - * in the default uniform block. - */ - int array_stride; - - /** GL_UNIFORM_ROW_MAJOR: true iff it's a row-major matrix in a UBO */ - bool row_major; - - /** @} */ - - /** - * This is a compiler-generated uniform that should not be advertised - * via the API. - */ - bool hidden; - - /** - * This is a built-in uniform that should not be modified through any gl API. - */ - bool builtin; - - /** - * This is a shader storage buffer variable, not an uniform. - */ - bool is_shader_storage; - - /** - * Index within gl_shader_program::AtomicBuffers[] of the atomic - * counter buffer this uniform is stored in, or -1 if this is not - * an atomic counter. - */ - int atomic_buffer_index; - - /** - * The 'base location' for this uniform in the uniform remap table. For - * arrays this is the first element in the array. - * for subroutines this is in shader subroutine uniform remap table. - */ - unsigned remap_location; - - /** - * The number of compatible subroutines with this subroutine uniform. - */ - unsigned num_compatible_subroutines; - - /** - * A single integer identifying the number of active array elements of - * the top-level shader storage block member (GL_TOP_LEVEL_ARRAY_SIZE). - */ - unsigned top_level_array_size; - - /** - * A single integer identifying the stride between array elements of the - * top-level shader storage block member. (GL_TOP_LEVEL_ARRAY_STRIDE). - */ - unsigned top_level_array_stride; - - /** - * Whether this uniform variable has the bindless_sampler or bindless_image - * layout qualifier as specified by ARB_bindless_texture. - */ - bool is_bindless; -}; - -void -resource_name_updated(struct gl_resource_name *name); - -#ifdef __cplusplus -} -#endif - -#endif /* IR_UNIFORM_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_validate.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_validate.cpp deleted file mode 100644 index 3a20942..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_validate.cpp +++ /dev/null @@ -1,1226 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_validate.cpp - * - * Attempts to verify that various invariants of the IR tree are true. - * - * In particular, at the moment it makes sure that no single - * ir_instruction node except for ir_variable appears multiple times - * in the ir tree. ir_variable does appear multiple times: Once as a - * declaration in an exec_list, and multiple times as the endpoint of - * a dereference chain. - */ - -#include "ir.h" -#include "ir_hierarchical_visitor.h" -#include "../../util/u_debug.h" -#include "../../util/hash_table.h" -#include "../../util/macros.h" -#include "../../util/set.h" -#include "../glsl_types.h" - -namespace { - -class ir_validate : public ir_hierarchical_visitor { -public: - ir_validate() - { - this->ir_set = _mesa_pointer_set_create(NULL); - - this->current_function = NULL; - - this->callback_enter = ir_validate::validate_ir; - this->data_enter = ir_set; - } - - ~ir_validate() - { - _mesa_set_destroy(this->ir_set, NULL); - } - - virtual ir_visitor_status visit(ir_variable *v); - virtual ir_visitor_status visit(ir_dereference_variable *ir); - - virtual ir_visitor_status visit_enter(ir_discard *ir); - virtual ir_visitor_status visit_enter(ir_if *ir); - - virtual ir_visitor_status visit_enter(ir_function *ir); - virtual ir_visitor_status visit_leave(ir_function *ir); - virtual ir_visitor_status visit_enter(ir_function_signature *ir); - virtual ir_visitor_status visit_enter(ir_return *ir); - - virtual ir_visitor_status visit_leave(ir_expression *ir); - virtual ir_visitor_status visit_leave(ir_swizzle *ir); - - virtual ir_visitor_status visit_enter(class ir_dereference_array *); - virtual ir_visitor_status visit_enter(class ir_dereference_record *); - - virtual ir_visitor_status visit_enter(ir_assignment *ir); - virtual ir_visitor_status visit_enter(ir_call *ir); - - static void validate_ir(ir_instruction *ir, void *data); - - ir_function *current_function; - - struct set *ir_set; -}; - -} /* anonymous namespace */ - -ir_visitor_status -ir_validate::visit(ir_dereference_variable *ir) -{ - if ((ir->var == NULL) || (ir->var->as_variable() == NULL)) { - printf("ir_dereference_variable @ %p does not specify a variable %p\n", - (void *) ir, (void *) ir->var); - abort(); - } - - /* Compare types without arrays, because one side can be sized and - * the other unsized. - */ - if (ir->var->type->without_array() != ir->type->without_array()) { - printf("ir_dereference_variable type is not equal to variable type: "); - ir->print(); - printf("\n"); - abort(); - } - - if (_mesa_set_search(ir_set, ir->var) == NULL) { - printf("ir_dereference_variable @ %p specifies undeclared variable " - "`%s' @ %p\n", - (void *) ir, ir->var->name, (void *) ir->var); - abort(); - } - - this->validate_ir(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(class ir_dereference_array *ir) -{ - if (!ir->array->type->is_array() && !ir->array->type->is_matrix() && - !ir->array->type->is_vector()) { - printf("ir_dereference_array @ %p does not specify an array, a vector " - "or a matrix\n", - (void *) ir); - ir->print(); - printf("\n"); - abort(); - } - - if (ir->array->type->is_array()) { - if (ir->array->type->fields.array != ir->type) { - printf("ir_dereference_array type is not equal to the array " - "element type: "); - ir->print(); - printf("\n"); - abort(); - } - } else if (ir->array->type->base_type != ir->type->base_type) { - printf("ir_dereference_array base types are not equal: "); - ir->print(); - printf("\n"); - abort(); - } - - if (!ir->array_index->type->is_scalar()) { - printf("ir_dereference_array @ %p does not have scalar index: %s\n", - (void *) ir, ir->array_index->type->name); - abort(); - } - - if (!ir->array_index->type->is_integer_16_32()) { - printf("ir_dereference_array @ %p does not have integer index: %s\n", - (void *) ir, ir->array_index->type->name); - abort(); - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(class ir_dereference_record *ir) -{ - if (!ir->record->type->is_struct() && !ir->record->type->is_interface()) { - printf("ir_dereference_record @ %p does not specify a record\n", - (void *) ir); - ir->print(); - printf("\n"); - abort(); - } - - if (ir->record->type->fields.structure[ir->field_idx].type != ir->type) { - printf("ir_dereference_record type is not equal to the record " - "field type: "); - ir->print(); - printf("\n"); - abort(); - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(ir_discard *ir) -{ - if (ir->condition && ir->condition->type != glsl_type::bool_type) { - printf("ir_discard condition %s type instead of bool.\n", - ir->condition->type->name); - ir->print(); - printf("\n"); - abort(); - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(ir_if *ir) -{ - if (ir->condition->type != glsl_type::bool_type) { - printf("ir_if condition %s type instead of bool.\n", - ir->condition->type->name); - ir->print(); - printf("\n"); - abort(); - } - - return visit_continue; -} - - -ir_visitor_status -ir_validate::visit_enter(ir_function *ir) -{ - /* Function definitions cannot be nested. - */ - if (this->current_function != NULL) { - printf("Function definition nested inside another function " - "definition:\n"); - printf("%s %p inside %s %p\n", - ir->name, (void *) ir, - this->current_function->name, (void *) this->current_function); - abort(); - } - - /* Store the current function hierarchy being traversed. This is used - * by the function signature visitor to ensure that the signatures are - * linked with the correct functions. - */ - this->current_function = ir; - - this->validate_ir(ir, this->data_enter); - - /* Verify that all of the things stored in the list of signatures are, - * in fact, function signatures. - */ - foreach_in_list(ir_instruction, sig, &ir->signatures) { - if (sig->ir_type != ir_type_function_signature) { - printf("Non-signature in signature list of function `%s'\n", - ir->name); - abort(); - } - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_leave(ir_function *ir) -{ - assert(ralloc_parent(ir->name) == ir); - - this->current_function = NULL; - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(ir_function_signature *ir) -{ - if (this->current_function != ir->function()) { - printf("Function signature nested inside wrong function " - "definition:\n"); - printf("%p inside %s %p instead of %s %p\n", - (void *) ir, - this->current_function->name, (void *) this->current_function, - ir->function_name(), (void *) ir->function()); - abort(); - } - - if (ir->return_type == NULL) { - printf("Function signature %p for function %s has NULL return type.\n", - (void *) ir, ir->function_name()); - abort(); - } - - this->validate_ir(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(ir_return *ir) -{ - if (!this->current_function) { - printf("Return statement outside of a function\n"); - abort(); - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_leave(ir_expression *ir) -{ - for (unsigned i = ir->num_operands; i < 4; i++) { - assert(ir->operands[i] == NULL); - } - - for (unsigned i = 0; i < ir->num_operands; i++) { - assert(ir->operands[i] != NULL); - } - - switch (ir->operation) { - case ir_unop_bit_not: - assert(ir->operands[0]->type == ir->type); - break; - case ir_unop_logic_not: - assert(ir->type->is_boolean()); - assert(ir->operands[0]->type->is_boolean()); - break; - - case ir_unop_neg: - assert(ir->type == ir->operands[0]->type); - break; - - case ir_unop_abs: - case ir_unop_sign: - assert(ir->operands[0]->type->is_int_16_32_64() || - ir->operands[0]->type->is_float_16_32_64()); - assert(ir->type == ir->operands[0]->type); - break; - - case ir_unop_rcp: - case ir_unop_rsq: - case ir_unop_sqrt: - assert(ir->type->is_float_16_32_64()); - assert(ir->type == ir->operands[0]->type); - break; - - case ir_unop_exp: - case ir_unop_log: - case ir_unop_exp2: - case ir_unop_log2: - case ir_unop_saturate: - assert(ir->operands[0]->type->is_float_16_32()); - assert(ir->type == ir->operands[0]->type); - break; - - case ir_unop_f2i: - assert(ir->operands[0]->type->is_float_16_32()); - assert(ir->type->is_int_16_32()); - break; - case ir_unop_f2u: - assert(ir->operands[0]->type->is_float_16_32()); - assert(ir->type->is_uint_16_32()); - break; - case ir_unop_i2f: - assert(ir->operands[0]->type->is_int_16_32()); - assert(ir->type->is_float_16_32()); - break; - case ir_unop_f2b: - assert(ir->operands[0]->type->is_float_16_32()); - assert(ir->type->is_boolean()); - break; - case ir_unop_f162b: - assert(ir->operands[0]->type->base_type == - GLSL_TYPE_FLOAT16); - assert(ir->type->is_boolean()); - break; - case ir_unop_b2f: - assert(ir->operands[0]->type->is_boolean()); - assert(ir->type->is_float_16_32()); - break; - case ir_unop_b2f16: - assert(ir->operands[0]->type->is_boolean()); - assert(ir->type->base_type == GLSL_TYPE_FLOAT16); - break; - case ir_unop_i2b: - assert(ir->operands[0]->type->is_int_16_32()); - assert(ir->type->is_boolean()); - break; - case ir_unop_b2i: - assert(ir->operands[0]->type->is_boolean()); - assert(ir->type->is_int_16_32()); - break; - case ir_unop_u2f: - assert(ir->operands[0]->type->is_uint_16_32()); - assert(ir->type->is_float_16_32()); - break; - case ir_unop_i2u: - assert(ir->operands[0]->type->is_int_16_32()); - assert(ir->type->is_uint_16_32()); - break; - case ir_unop_u2i: - assert(ir->operands[0]->type->is_uint_16_32()); - assert(ir->type->is_int_16_32()); - break; - case ir_unop_bitcast_i2f: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); - assert(ir->type->base_type == GLSL_TYPE_FLOAT); - break; - case ir_unop_bitcast_f2i: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); - assert(ir->type->base_type == GLSL_TYPE_INT); - break; - case ir_unop_bitcast_u2f: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); - assert(ir->type->base_type == GLSL_TYPE_FLOAT); - break; - case ir_unop_bitcast_f2u: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT); - assert(ir->type->base_type == GLSL_TYPE_UINT); - break; - - case ir_unop_bitcast_u642d: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT64); - assert(ir->type->is_double()); - break; - case ir_unop_bitcast_i642d: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT64); - assert(ir->type->is_double()); - break; - case ir_unop_bitcast_d2u64: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->base_type == GLSL_TYPE_UINT64); - break; - case ir_unop_bitcast_d2i64: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->base_type == GLSL_TYPE_INT64); - break; - case ir_unop_i642i: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT64); - assert(ir->type->is_int_16_32()); - break; - case ir_unop_u642i: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT64); - assert(ir->type->is_int_16_32()); - break; - case ir_unop_i642u: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT64); - assert(ir->type->is_uint_16_32()); - break; - case ir_unop_u642u: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT64); - assert(ir->type->is_uint_16_32()); - break; - case ir_unop_i642b: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT64); - assert(ir->type->is_boolean()); - break; - case ir_unop_i642f: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT64); - assert(ir->type->is_float()); - break; - case ir_unop_u642f: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT64); - assert(ir->type->is_float()); - break; - case ir_unop_i642d: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT64); - assert(ir->type->is_double()); - break; - case ir_unop_u642d: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT64); - assert(ir->type->is_double()); - break; - case ir_unop_i2i64: - assert(ir->operands[0]->type->is_int_16_32()); - assert(ir->type->base_type == GLSL_TYPE_INT64); - break; - case ir_unop_u2i64: - assert(ir->operands[0]->type->is_uint_16_32()); - assert(ir->type->base_type == GLSL_TYPE_INT64); - break; - case ir_unop_b2i64: - assert(ir->operands[0]->type->is_boolean()); - assert(ir->type->base_type == GLSL_TYPE_INT64); - break; - case ir_unop_f2i64: - assert(ir->operands[0]->type->is_float()); - assert(ir->type->base_type == GLSL_TYPE_INT64); - break; - case ir_unop_d2i64: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->base_type == GLSL_TYPE_INT64); - break; - case ir_unop_i2u64: - assert(ir->operands[0]->type->is_int_16_32()); - assert(ir->type->base_type == GLSL_TYPE_UINT64); - break; - case ir_unop_u2u64: - assert(ir->operands[0]->type->is_uint_16_32()); - assert(ir->type->base_type == GLSL_TYPE_UINT64); - break; - case ir_unop_f2u64: - assert(ir->operands[0]->type->is_float()); - assert(ir->type->base_type == GLSL_TYPE_UINT64); - break; - case ir_unop_d2u64: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->base_type == GLSL_TYPE_UINT64); - break; - case ir_unop_u642i64: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT64); - assert(ir->type->base_type == GLSL_TYPE_INT64); - break; - case ir_unop_i642u64: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT64); - assert(ir->type->base_type == GLSL_TYPE_UINT64); - break; - case ir_unop_trunc: - case ir_unop_round_even: - case ir_unop_ceil: - case ir_unop_floor: - case ir_unop_fract: - assert(ir->operands[0]->type->is_float_16_32_64()); - assert(ir->operands[0]->type == ir->type); - break; - case ir_unop_sin: - case ir_unop_cos: - case ir_unop_dFdx: - case ir_unop_dFdx_coarse: - case ir_unop_dFdx_fine: - case ir_unop_dFdy: - case ir_unop_dFdy_coarse: - case ir_unop_dFdy_fine: - assert(ir->operands[0]->type->is_float_16_32()); - assert(ir->operands[0]->type == ir->type); - break; - - case ir_unop_pack_snorm_2x16: - case ir_unop_pack_unorm_2x16: - case ir_unop_pack_half_2x16: - assert(ir->type == glsl_type::uint_type); - assert(ir->operands[0]->type == glsl_type::vec2_type); - break; - - case ir_unop_pack_snorm_4x8: - case ir_unop_pack_unorm_4x8: - assert(ir->type == glsl_type::uint_type); - assert(ir->operands[0]->type == glsl_type::vec4_type); - break; - - case ir_unop_pack_double_2x32: - assert(ir->type == glsl_type::double_type); - assert(ir->operands[0]->type == glsl_type::uvec2_type); - break; - - case ir_unop_pack_int_2x32: - assert(ir->type == glsl_type::int64_t_type); - assert(ir->operands[0]->type == glsl_type::ivec2_type); - break; - - case ir_unop_pack_uint_2x32: - assert(ir->type == glsl_type::uint64_t_type); - assert(ir->operands[0]->type == glsl_type::uvec2_type); - break; - - case ir_unop_pack_sampler_2x32: - assert(ir->type->is_sampler()); - assert(ir->operands[0]->type == glsl_type::uvec2_type); - break; - - case ir_unop_pack_image_2x32: - assert(ir->type->is_image()); - assert(ir->operands[0]->type == glsl_type::uvec2_type); - break; - - case ir_unop_unpack_snorm_2x16: - case ir_unop_unpack_unorm_2x16: - case ir_unop_unpack_half_2x16: - assert(ir->type == glsl_type::vec2_type); - assert(ir->operands[0]->type == glsl_type::uint_type); - break; - - case ir_unop_unpack_snorm_4x8: - case ir_unop_unpack_unorm_4x8: - assert(ir->type == glsl_type::vec4_type); - assert(ir->operands[0]->type == glsl_type::uint_type); - break; - - case ir_unop_unpack_double_2x32: - assert(ir->type == glsl_type::uvec2_type); - assert(ir->operands[0]->type == glsl_type::double_type); - break; - - case ir_unop_unpack_int_2x32: - assert(ir->type == glsl_type::ivec2_type); - assert(ir->operands[0]->type == glsl_type::int64_t_type); - break; - - case ir_unop_unpack_uint_2x32: - assert(ir->type == glsl_type::uvec2_type); - assert(ir->operands[0]->type == glsl_type::uint64_t_type); - break; - - case ir_unop_unpack_sampler_2x32: - assert(ir->type == glsl_type::uvec2_type); - assert(ir->operands[0]->type->is_sampler()); - break; - - case ir_unop_unpack_image_2x32: - assert(ir->type == glsl_type::uvec2_type); - assert(ir->operands[0]->type->is_image()); - break; - - case ir_unop_bitfield_reverse: - assert(ir->operands[0]->type == ir->type); - assert(ir->type->is_integer_32()); - break; - - case ir_unop_bit_count: - case ir_unop_find_msb: - case ir_unop_find_lsb: - assert(ir->operands[0]->type->vector_elements == ir->type->vector_elements); - assert(ir->operands[0]->type->is_integer_16_32()); - assert(ir->type->is_int_16_32()); - break; - - case ir_unop_clz: - assert(ir->operands[0]->type == ir->type); - assert(ir->type->is_uint_16_32()); - break; - - case ir_unop_interpolate_at_centroid: - assert(ir->operands[0]->type == ir->type); - assert(ir->operands[0]->type->is_float_16_32()); - break; - - case ir_unop_get_buffer_size: - assert(ir->type == glsl_type::int_type); - assert(ir->operands[0]->type == glsl_type::uint_type); - break; - - case ir_unop_ssbo_unsized_array_length: - assert(ir->type == glsl_type::int_type); - assert(ir->operands[0]->type->is_array()); - assert(ir->operands[0]->type->is_unsized_array()); - break; - - case ir_unop_implicitly_sized_array_length: - assert(ir->type == glsl_type::int_type); - assert(ir->operands[0]->type->is_array()); - break; - - case ir_unop_d2f: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->is_float()); - break; - case ir_unop_f2d: - assert(ir->operands[0]->type->is_float()); - assert(ir->type->is_double()); - break; - case ir_unop_f162f: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT16); - assert(ir->type->is_float()); - break; - case ir_unop_f2f16: - case ir_unop_f2fmp: - assert(ir->operands[0]->type->is_float()); - assert(ir->type->base_type == GLSL_TYPE_FLOAT16); - break; - case ir_unop_i2i: - assert(ir->operands[0]->type->is_int_16_32()); - assert(ir->type->is_int_16_32()); - assert(ir->type->base_type != ir->operands[0]->type->base_type); - break; - case ir_unop_u2u: - assert(ir->operands[0]->type->is_uint_16_32()); - assert(ir->type->is_uint_16_32()); - assert(ir->type->base_type != ir->operands[0]->type->base_type); - break; - case ir_unop_i2imp: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); - assert(ir->type->base_type == GLSL_TYPE_INT16); - break; - case ir_unop_u2ump: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); - assert(ir->type->base_type == GLSL_TYPE_UINT16); - break; - case ir_unop_d2i: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->is_int_16_32()); - break; - case ir_unop_i2d: - assert(ir->operands[0]->type->is_int_16_32()); - assert(ir->type->is_double()); - break; - case ir_unop_d2u: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->is_uint_16_32()); - break; - case ir_unop_u2d: - assert(ir->operands[0]->type->is_uint_16_32()); - assert(ir->type->is_double()); - break; - case ir_unop_d2b: - assert(ir->operands[0]->type->is_double()); - assert(ir->type->is_boolean()); - break; - - case ir_unop_frexp_sig: - assert(ir->operands[0]->type->is_float_32_64()); - break; - case ir_unop_frexp_exp: - assert(ir->operands[0]->type->is_float_32_64()); - assert(ir->type->base_type == GLSL_TYPE_INT); - break; - case ir_unop_subroutine_to_int: - assert(ir->operands[0]->type->base_type == GLSL_TYPE_SUBROUTINE); - assert(ir->type->base_type == GLSL_TYPE_INT); - break; - - case ir_unop_atan: - assert(ir->operands[0]->type->is_float_16_32_64()); - assert(ir->type == ir->operands[0]->type); - break; - - case ir_binop_add: - case ir_binop_sub: - case ir_binop_mul: - case ir_binop_div: - case ir_binop_mod: - case ir_binop_min: - case ir_binop_max: - case ir_binop_pow: - assert(ir->operands[0]->type->base_type == - ir->operands[1]->type->base_type); - - if (ir->operation == ir_binop_mul && - (ir->type->base_type == GLSL_TYPE_UINT64 || - ir->type->base_type == GLSL_TYPE_INT64) && - (ir->operands[0]->type->is_int_16_32()|| - ir->operands[1]->type->is_int_16_32()|| - ir->operands[0]->type->is_uint_16_32() || - ir->operands[1]->type->is_uint_16_32())) { - assert(ir->operands[0]->type == ir->operands[1]->type); - break; - } - - if (ir->operands[0]->type->is_scalar()) - assert(ir->operands[1]->type == ir->type); - else if (ir->operands[1]->type->is_scalar()) - assert(ir->operands[0]->type == ir->type); - else if (ir->operands[0]->type->is_vector() && - ir->operands[1]->type->is_vector()) { - assert(ir->operands[0]->type == ir->operands[1]->type); - assert(ir->operands[0]->type == ir->type); - } - break; - - case ir_binop_abs_sub: - assert(ir->operands[0]->type == ir->operands[1]->type); - assert(ir->operands[0]->type->is_integer_16_32_64()); - assert(ir->operands[0]->type->vector_elements == - ir->type->vector_elements); - assert(ir->type->is_uint_16_32_64()); - break; - - case ir_binop_add_sat: - case ir_binop_sub_sat: - case ir_binop_avg: - case ir_binop_avg_round: - assert(ir->type == ir->operands[0]->type); - assert(ir->type == ir->operands[1]->type); - assert(ir->type->is_integer_16_32_64()); - break; - - case ir_binop_mul_32x16: - case ir_binop_imul_high: - assert(ir->type == ir->operands[0]->type); - assert(ir->type == ir->operands[1]->type); - assert(ir->type->is_integer_32()); - break; - - case ir_binop_carry: - case ir_binop_borrow: - assert(ir->type == ir->operands[0]->type); - assert(ir->type == ir->operands[1]->type); - assert(ir->type->base_type == GLSL_TYPE_UINT); - break; - - case ir_binop_less: - case ir_binop_gequal: - case ir_binop_equal: - case ir_binop_nequal: - /* The semantics of the IR operators differ from the GLSL <, >, <=, >=, - * ==, and != operators. The IR operators perform a component-wise - * comparison on scalar or vector types and return a boolean scalar or - * vector type of the same size. - */ - assert(ir->type->is_boolean()); - assert(ir->operands[0]->type == ir->operands[1]->type); - assert(ir->operands[0]->type->is_vector() - || ir->operands[0]->type->is_scalar()); - assert(ir->operands[0]->type->vector_elements - == ir->type->vector_elements); - break; - - case ir_binop_all_equal: - case ir_binop_any_nequal: - /* GLSL == and != operate on scalars, vectors, matrices and arrays, and - * return a scalar boolean. The IR matches that. - */ - assert(ir->type == glsl_type::bool_type); - assert(ir->operands[0]->type == ir->operands[1]->type); - break; - - case ir_binop_lshift: - case ir_binop_rshift: - assert(ir->operands[0]->type->is_integer_16_32_64() && - ir->operands[1]->type->is_integer_16_32_64()); - if (ir->operands[0]->type->is_scalar()) { - assert(ir->operands[1]->type->is_scalar()); - } - if (ir->operands[0]->type->is_vector() && - ir->operands[1]->type->is_vector()) { - assert(ir->operands[0]->type->components() == - ir->operands[1]->type->components()); - } - assert(ir->type == ir->operands[0]->type); - break; - - case ir_binop_bit_and: - case ir_binop_bit_xor: - case ir_binop_bit_or: - assert(ir->operands[0]->type->base_type == - ir->operands[1]->type->base_type); - assert(ir->type->is_integer_16_32_64()); - if (ir->operands[0]->type->is_vector() && - ir->operands[1]->type->is_vector()) { - assert(ir->operands[0]->type->vector_elements == - ir->operands[1]->type->vector_elements); - } - break; - - case ir_binop_logic_and: - case ir_binop_logic_xor: - case ir_binop_logic_or: - assert(ir->type->is_boolean()); - assert(ir->operands[0]->type->is_boolean()); - assert(ir->operands[1]->type->is_boolean()); - break; - - case ir_binop_dot: - assert(ir->type == glsl_type::float_type || - ir->type == glsl_type::double_type || - ir->type == glsl_type::float16_t_type); - assert(ir->operands[0]->type->is_float_16_32_64()); - assert(ir->operands[0]->type->is_vector()); - assert(ir->operands[0]->type == ir->operands[1]->type); - break; - - case ir_binop_ubo_load: - assert(ir->operands[0]->type == glsl_type::uint_type); - - assert(ir->operands[1]->type == glsl_type::uint_type); - break; - - case ir_binop_ldexp: - assert(ir->operands[0]->type == ir->type); - assert(ir->operands[0]->type->is_float_32_64()); - assert(ir->operands[1]->type->base_type == GLSL_TYPE_INT); - assert(ir->operands[0]->type->components() == - ir->operands[1]->type->components()); - break; - - case ir_binop_vector_extract: - assert(ir->operands[0]->type->is_vector()); - assert(ir->operands[1]->type->is_scalar() - && ir->operands[1]->type->is_integer_16_32()); - break; - - case ir_binop_interpolate_at_offset: - assert(ir->operands[0]->type == ir->type); - assert(ir->operands[0]->type->is_float_16_32()); - assert(ir->operands[1]->type->components() == 2); - assert(ir->operands[1]->type->is_float_16_32()); - break; - - case ir_binop_interpolate_at_sample: - assert(ir->operands[0]->type == ir->type); - assert(ir->operands[0]->type->is_float_16_32()); - assert(ir->operands[1]->type == glsl_type::int_type || - ir->operands[1]->type == glsl_type::int16_t_type); - break; - - case ir_binop_atan2: - assert(ir->operands[0]->type->is_float_16_32_64()); - assert(ir->operands[1]->type == ir->operands[0]->type); - assert(ir->type == ir->operands[0]->type); - break; - - case ir_triop_fma: - assert(ir->type->is_float_16_32_64()); - assert(ir->type == ir->operands[0]->type); - assert(ir->type == ir->operands[1]->type); - assert(ir->type == ir->operands[2]->type); - break; - - case ir_triop_lrp: - assert(ir->operands[0]->type->is_float_16_32_64()); - assert(ir->operands[0]->type == ir->operands[1]->type); - assert(ir->operands[2]->type == ir->operands[0]->type || - ir->operands[2]->type == glsl_type::float_type || - ir->operands[2]->type == glsl_type::double_type || - ir->operands[2]->type == glsl_type::float16_t_type); - break; - - case ir_triop_csel: - assert(ir->operands[0]->type->is_boolean()); - assert(ir->type->vector_elements == ir->operands[0]->type->vector_elements); - assert(ir->type == ir->operands[1]->type); - assert(ir->type == ir->operands[2]->type); - break; - - case ir_triop_bitfield_extract: - assert(ir->type->is_integer_16_32()); - assert(ir->operands[0]->type == ir->type); - assert(ir->operands[1]->type == ir->type); - assert(ir->operands[2]->type == ir->type); - break; - - case ir_triop_vector_insert: - assert(ir->operands[0]->type->is_vector()); - assert(ir->operands[1]->type->is_scalar()); - assert(ir->operands[0]->type->base_type == ir->operands[1]->type->base_type); - assert(ir->operands[2]->type->is_scalar() - && ir->operands[2]->type->is_integer_16_32()); - assert(ir->type == ir->operands[0]->type); - break; - - case ir_quadop_bitfield_insert: - assert(ir->type->is_integer_16_32()); - assert(ir->operands[0]->type == ir->type); - assert(ir->operands[1]->type == ir->type); - assert(ir->operands[2]->type == ir->type); - assert(ir->operands[3]->type == ir->type); - break; - - case ir_quadop_vector: - /* The vector operator collects some number of scalars and generates a - * vector from them. - * - * - All of the operands must be scalar. - * - Number of operands must matche the size of the resulting vector. - * - Base type of the operands must match the base type of the result. - */ - switch (ir->type->vector_elements) { - case 1: - assert(ir->operands[0]->type->is_scalar()); - assert(ir->operands[0]->type->base_type == ir->type->base_type); - assert(ir->operands[1] == NULL); - assert(ir->operands[2] == NULL); - assert(ir->operands[3] == NULL); - break; - case 2: - assert(ir->operands[0]->type->is_scalar()); - assert(ir->operands[0]->type->base_type == ir->type->base_type); - assert(ir->operands[1]->type->is_scalar()); - assert(ir->operands[1]->type->base_type == ir->type->base_type); - assert(ir->operands[2] == NULL); - assert(ir->operands[3] == NULL); - break; - case 3: - assert(ir->operands[0]->type->is_scalar()); - assert(ir->operands[0]->type->base_type == ir->type->base_type); - assert(ir->operands[1]->type->is_scalar()); - assert(ir->operands[1]->type->base_type == ir->type->base_type); - assert(ir->operands[2]->type->is_scalar()); - assert(ir->operands[2]->type->base_type == ir->type->base_type); - assert(ir->operands[3] == NULL); - break; - case 4: - assert(ir->operands[0]->type->is_scalar()); - assert(ir->operands[0]->type->base_type == ir->type->base_type); - assert(ir->operands[1]->type->is_scalar()); - assert(ir->operands[1]->type->base_type == ir->type->base_type); - assert(ir->operands[2]->type->is_scalar()); - assert(ir->operands[2]->type->base_type == ir->type->base_type); - assert(ir->operands[3]->type->is_scalar()); - assert(ir->operands[3]->type->base_type == ir->type->base_type); - break; - default: - /* The is_vector assertion above should prevent execution from ever - * getting here. - */ - assert(!"Should not get here."); - break; - } - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_leave(ir_swizzle *ir) -{ - unsigned int chans[4] = {ir->mask.x, ir->mask.y, ir->mask.z, ir->mask.w}; - - for (unsigned int i = 0; i < ir->type->vector_elements; i++) { - if (chans[i] >= ir->val->type->vector_elements) { - printf("ir_swizzle @ %p specifies a channel not present " - "in the value.\n", (void *) ir); - ir->print(); - abort(); - } - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit(ir_variable *ir) -{ - /* An ir_variable is the one thing that can (and will) appear multiple times - * in an IR tree. It is added to the hashtable so that it can be used - * in the ir_dereference_variable handler to ensure that a variable is - * declared before it is dereferenced. - */ - if (ir->name && ir->is_name_ralloced()) - assert(ralloc_parent(ir->name) == ir); - - _mesa_set_add(ir_set, ir); - - /* If a variable is an array, verify that the maximum array index is in - * bounds. There was once an error in AST-to-HIR conversion that set this - * to be out of bounds. - */ - if (ir->type->array_size() > 0) { - if (ir->data.max_array_access >= (int)ir->type->length) { - printf("ir_variable has maximum access out of bounds (%d vs %d)\n", - ir->data.max_array_access, ir->type->length - 1); - ir->print(); - abort(); - } - } - - /* If a variable is an interface block (or an array of interface blocks), - * verify that the maximum array index for each interface member is in - * bounds. - */ - if (ir->is_interface_instance()) { - const glsl_struct_field *fields = - ir->get_interface_type()->fields.structure; - for (unsigned i = 0; i < ir->get_interface_type()->length; i++) { - if (fields[i].type->array_size() > 0 && - !fields[i].implicit_sized_array) { - const int *const max_ifc_array_access = - ir->get_max_ifc_array_access(); - - assert(max_ifc_array_access != NULL); - - if (max_ifc_array_access[i] >= (int)fields[i].type->length) { - printf("ir_variable has maximum access out of bounds for " - "field %s (%d vs %d)\n", fields[i].name, - max_ifc_array_access[i], fields[i].type->length); - ir->print(); - abort(); - } - } - } - } - - if (ir->constant_initializer != NULL && !ir->data.has_initializer) { - printf("ir_variable didn't have an initializer, but has a constant " - "initializer value.\n"); - ir->print(); - abort(); - } - - if (ir->data.mode == ir_var_uniform - && is_gl_identifier(ir->name) - && ir->get_state_slots() == NULL) { - printf("built-in uniform has no state\n"); - ir->print(); - abort(); - } - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(ir_assignment *ir) -{ - const ir_dereference *const lhs = ir->lhs; - if (lhs->type->is_scalar() || lhs->type->is_vector()) { - if (ir->write_mask == 0) { - printf("Assignment LHS is %s, but write mask is 0:\n", - lhs->type->is_scalar() ? "scalar" : "vector"); - ir->print(); - abort(); - } - - int lhs_components = 0; - for (int i = 0; i < 4; i++) { - if (ir->write_mask & (1 << i)) - lhs_components++; - } - - if (lhs_components != ir->rhs->type->vector_elements) { - printf("Assignment count of LHS write mask channels enabled not\n" - "matching RHS vector size (%d LHS, %d RHS).\n", - lhs_components, ir->rhs->type->vector_elements); - ir->print(); - abort(); - } - } - - if (lhs->type->base_type != ir->rhs->type->base_type) { - printf("Assignment LHS and RHS base types are different:\n"); - lhs->print(); - printf("\n"); - ir->rhs->print(); - printf("\n"); - abort(); - } - - this->validate_ir(ir, this->data_enter); - - return visit_continue; -} - -ir_visitor_status -ir_validate::visit_enter(ir_call *ir) -{ - ir_function_signature *const callee = ir->callee; - - if (callee->ir_type != ir_type_function_signature) { - printf("IR called by ir_call is not ir_function_signature!\n"); - abort(); - } - - if (ir->return_deref) { - if (ir->return_deref->type != callee->return_type) { - printf("callee type %s does not match return storage type %s\n", - callee->return_type->name, ir->return_deref->type->name); - abort(); - } - } else if (callee->return_type != glsl_type::void_type) { - printf("ir_call has non-void callee but no return storage\n"); - abort(); - } - - const exec_node *formal_param_node = callee->parameters.get_head_raw(); - const exec_node *actual_param_node = ir->actual_parameters.get_head_raw(); - while (true) { - if (formal_param_node->is_tail_sentinel() - != actual_param_node->is_tail_sentinel()) { - printf("ir_call has the wrong number of parameters:\n"); - goto dump_ir; - } - if (formal_param_node->is_tail_sentinel()) { - break; - } - const ir_variable *formal_param - = (const ir_variable *) formal_param_node; - const ir_rvalue *actual_param - = (const ir_rvalue *) actual_param_node; - if (formal_param->type != actual_param->type) { - printf("ir_call parameter type mismatch:\n"); - goto dump_ir; - } - if (formal_param->data.mode == ir_var_function_out - || formal_param->data.mode == ir_var_function_inout) { - if (!actual_param->is_lvalue()) { - printf("ir_call out/inout parameters must be lvalues:\n"); - goto dump_ir; - } - } - formal_param_node = formal_param_node->next; - actual_param_node = actual_param_node->next; - } - - return visit_continue; - -dump_ir: - ir->print(); - printf("callee:\n"); - callee->print(); - abort(); - return visit_stop; -} - -void -ir_validate::validate_ir(ir_instruction *ir, void *data) -{ - struct set *ir_set = (struct set *) data; - - if (_mesa_set_search(ir_set, ir)) { - printf("Instruction node present twice in ir tree:\n"); - ir->print(); - printf("\n"); - abort(); - } - _mesa_set_add(ir_set, ir); -} - -static void -check_node_type(ir_instruction *ir, void *data) -{ - (void) data; - - if (ir->ir_type >= ir_type_max) { - printf("Instruction node with unset type\n"); - ir->print(); printf("\n"); - } - ir_rvalue *value = ir->as_rvalue(); - if (value != NULL) - assert(value->type != glsl_type::error_type); -} - -void -validate_ir_tree(exec_list *instructions) -{ - /* We shouldn't have any reason to validate IR in a release build, - * and it's half composed of assert()s anyway which wouldn't do - * anything. - */ -#ifndef DEBUG - if (!debug_get_bool_option("GLSL_VALIDATE", false)) - return; -#endif - ir_validate v; - - v.run(instructions); - - foreach_in_list(ir_instruction, ir, instructions) { - visit_tree(ir, check_node_type, NULL); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_variable_refcount.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_variable_refcount.cpp deleted file mode 100644 index 252e9a7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_variable_refcount.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_variable_refcount.cpp - * - * Provides a visitor which produces a list of variables referenced, - * how many times they were referenced and assigned, and whether they - * were defined in the scope. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_variable_refcount.h" -#include "../glsl_types.h" -#include "../../util/hash_table.h" - -ir_variable_refcount_visitor::ir_variable_refcount_visitor() -{ - this->mem_ctx = ralloc_context(NULL); - this->ht = _mesa_pointer_hash_table_create(NULL); -} - -static void -free_entry(struct hash_entry *entry) -{ - ir_variable_refcount_entry *ivre = (ir_variable_refcount_entry *) entry->data; - - /* Free assignment list */ - exec_node *n; - while ((n = ivre->assign_list.pop_head()) != NULL) { - struct assignment_entry *assignment_entry = - exec_node_data(struct assignment_entry, n, link); - free(assignment_entry); - } - - delete ivre; -} - -ir_variable_refcount_visitor::~ir_variable_refcount_visitor() -{ - ralloc_free(this->mem_ctx); - _mesa_hash_table_destroy(this->ht, free_entry); -} - -// constructor -ir_variable_refcount_entry::ir_variable_refcount_entry(ir_variable *var) -{ - this->var = var; - assigned_count = 0; - declaration = false; - referenced_count = 0; -} - - -ir_variable_refcount_entry * -ir_variable_refcount_visitor::get_variable_entry(ir_variable *var) -{ - assert(var); - - struct hash_entry *e = _mesa_hash_table_search(this->ht, var); - if (e) - return (ir_variable_refcount_entry *)e->data; - - ir_variable_refcount_entry *entry = new ir_variable_refcount_entry(var); - assert(entry->referenced_count == 0); - _mesa_hash_table_insert(this->ht, var, entry); - - return entry; -} - - -ir_visitor_status -ir_variable_refcount_visitor::visit(ir_variable *ir) -{ - ir_variable_refcount_entry *entry = this->get_variable_entry(ir); - if (entry) - entry->declaration = true; - - return visit_continue; -} - - -ir_visitor_status -ir_variable_refcount_visitor::visit(ir_dereference_variable *ir) -{ - ir_variable *const var = ir->variable_referenced(); - ir_variable_refcount_entry *entry = this->get_variable_entry(var); - - if (entry) - entry->referenced_count++; - - return visit_continue; -} - - -ir_visitor_status -ir_variable_refcount_visitor::visit_enter(ir_function_signature *ir) -{ - /* We don't want to descend into the function parameters and - * dead-code eliminate them, so just accept the body here. - */ - visit_list_elements(this, &ir->body); - return visit_continue_with_parent; -} - - -ir_visitor_status -ir_variable_refcount_visitor::visit_leave(ir_assignment *ir) -{ - ir_variable_refcount_entry *entry; - entry = this->get_variable_entry(ir->lhs->variable_referenced()); - if (entry) { - entry->assigned_count++; - - /* Build a list for dead code optimisation. Don't add assignment if it - * was declared out of scope (outside the instruction stream). Also don't - * bother adding any more to the list if there are more references than - * assignments as this means the variable is used and won't be optimised - * out. - */ - assert(entry->referenced_count >= entry->assigned_count); - if (entry->referenced_count == entry->assigned_count) { - struct assignment_entry *assignment_entry = - (struct assignment_entry *)calloc(1, sizeof(*assignment_entry)); - assignment_entry->assign = ir; - entry->assign_list.push_head(&assignment_entry->link); - } - } - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_variable_refcount.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_variable_refcount.h deleted file mode 100644 index 67b17ef..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_variable_refcount.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ir_variable_refcount.h - * - * Provides a visitor which produces a list of variables referenced, - * how many times they were referenced and assigned, and whether they - * were defined in the scope. - */ - -#ifndef GLSL_IR_VARIABLE_REFCOUNT_H -#define GLSL_IR_VARIABLE_REFCOUNT_H - -#include "ir.h" -#include "ir_visitor.h" -#include "../glsl_types.h" - -struct assignment_entry { - exec_node link; - ir_assignment *assign; -}; - -class ir_variable_refcount_entry -{ -public: - ir_variable_refcount_entry(ir_variable *var); - - ir_variable *var; /* The key: the variable's pointer. */ - - /** - * List of assignments to the variable, if any. - * This is intended to be used for dead code optimisation and may - * not be a complete list. - */ - exec_list assign_list; - - /** Number of times the variable is referenced, including assignments. */ - unsigned referenced_count; - - /** Number of times the variable is assigned. */ - unsigned assigned_count; - - bool declaration; /* If the variable had a decl in the instruction stream */ -}; - -class ir_variable_refcount_visitor : public ir_hierarchical_visitor { -public: - ir_variable_refcount_visitor(void); - ~ir_variable_refcount_visitor(void); - - virtual ir_visitor_status visit(ir_variable *); - virtual ir_visitor_status visit(ir_dereference_variable *); - - virtual ir_visitor_status visit_enter(ir_function_signature *); - virtual ir_visitor_status visit_leave(ir_assignment *); - - /** - * Find variable in the hash table, and insert it if not present - */ - ir_variable_refcount_entry *get_variable_entry(ir_variable *var); - - /** - * Hash table mapping ir_variable to ir_variable_refcount_entry. - */ - struct hash_table *ht; - - void *mem_ctx; -}; - -#endif /* GLSL_IR_VARIABLE_REFCOUNT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_visitor.h deleted file mode 100644 index b06e310..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/ir_visitor.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_VISITOR_H -#define IR_VISITOR_H - -#ifdef __cplusplus -/** - * Abstract base class of visitors of IR instruction trees - */ -class ir_visitor { -public: - virtual ~ir_visitor() - { - /* empty */ - } - - /** - * \name Visit methods - * - * As typical for the visitor pattern, there must be one \c visit method for - * each concrete subclass of \c ir_instruction. Virtual base classes within - * the hierarchy should not have \c visit methods. - */ - /*@{*/ - virtual void visit(class ir_rvalue *) { assert(!"unhandled error_type"); } - virtual void visit(class ir_variable *) = 0; - virtual void visit(class ir_function_signature *) = 0; - virtual void visit(class ir_function *) = 0; - virtual void visit(class ir_expression *) = 0; - virtual void visit(class ir_texture *) = 0; - virtual void visit(class ir_swizzle *) = 0; - virtual void visit(class ir_dereference_variable *) = 0; - virtual void visit(class ir_dereference_array *) = 0; - virtual void visit(class ir_dereference_record *) = 0; - virtual void visit(class ir_assignment *) = 0; - virtual void visit(class ir_constant *) = 0; - virtual void visit(class ir_call *) = 0; - virtual void visit(class ir_return *) = 0; - virtual void visit(class ir_discard *) = 0; - virtual void visit(class ir_demote *) = 0; - virtual void visit(class ir_if *) = 0; - virtual void visit(class ir_loop *) = 0; - virtual void visit(class ir_loop_jump *) = 0; - virtual void visit(class ir_emit_vertex *) = 0; - virtual void visit(class ir_end_primitive *) = 0; - virtual void visit(class ir_barrier *) = 0; - /*@}*/ -}; - -/* NOTE: function calls may never return due to discards inside them - * This is usually not an issue, but if it is, keep it in mind - */ -class ir_control_flow_visitor : public ir_visitor { -public: - virtual void visit(class ir_variable *) {} - virtual void visit(class ir_expression *) {} - virtual void visit(class ir_texture *) {} - virtual void visit(class ir_swizzle *) {} - virtual void visit(class ir_dereference_variable *) {} - virtual void visit(class ir_dereference_array *) {} - virtual void visit(class ir_dereference_record *) {} - virtual void visit(class ir_assignment *) {} - virtual void visit(class ir_constant *) {} - virtual void visit(class ir_call *) {} - virtual void visit(class ir_demote *) {} - virtual void visit(class ir_emit_vertex *) {} - virtual void visit(class ir_end_primitive *) {} - virtual void visit(class ir_barrier *) {} -}; -#endif /* __cplusplus */ - -#endif /* IR_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_functions.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_functions.cpp deleted file mode 100644 index 9f44137..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_functions.cpp +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "glsl_symbol_table.h" -#include "glsl_parser_extras.h" -#include "ir.h" -#include "program.h" -#include "../../util/set.h" -#include "../../util/hash_table.h" -#include "linker.h" -#include "../../mesa/main/shader_types.h" -#include "builtin_functions.h" - -static ir_function_signature * -find_matching_signature(const char *name, const exec_list *actual_parameters, - glsl_symbol_table *symbols); - -namespace { - -class call_link_visitor : public ir_hierarchical_visitor { -public: - call_link_visitor(gl_shader_program *prog, gl_linked_shader *linked, - gl_shader **shader_list, unsigned num_shaders) - { - this->prog = prog; - this->shader_list = shader_list; - this->num_shaders = num_shaders; - this->success = true; - this->linked = linked; - - this->locals = _mesa_pointer_set_create(NULL); - } - - ~call_link_visitor() - { - _mesa_set_destroy(this->locals, NULL); - } - - virtual ir_visitor_status visit(ir_variable *ir) - { - _mesa_set_add(locals, ir); - return visit_continue; - } - - virtual ir_visitor_status visit_enter(ir_call *ir) - { - /* If ir is an ir_call from a function that was imported from another - * shader callee will point to an ir_function_signature in the original - * shader. In this case the function signature MUST NOT BE MODIFIED. - * Doing so will modify the original shader. This may prevent that - * shader from being linkable in other programs. - */ - const ir_function_signature *const callee = ir->callee; - assert(callee != NULL); - const char *const name = callee->function_name(); - - /* We don't actually need to find intrinsics; they're not real */ - if (callee->is_intrinsic()) - return visit_continue; - - /* Determine if the requested function signature already exists in the - * final linked shader. If it does, use it as the target of the call. - */ - ir_function_signature *sig = - find_matching_signature(name, &callee->parameters, linked->symbols); - if (sig != NULL) { - ir->callee = sig; - return visit_continue; - } - - /* Try to find the signature in one of the other shaders that is being - * linked. If it's not found there, return an error. - */ - for (unsigned i = 0; i < num_shaders; i++) { - sig = find_matching_signature(name, &ir->actual_parameters, - shader_list[i]->symbols); - if (sig) - break; - } - - if(sig == NULL) { - sig = find_matching_signature(name, &ir->actual_parameters, _mesa_glsl_get_builtin_function_shader()->symbols); - if(sig) - return visit_continue; - } - - if (sig == NULL) { - /* FINISHME: Log the full signature of unresolved function. - */ - linker_error(this->prog, "unresolved reference to function `%s'\n", - name); - this->success = false; - return visit_stop; - } - - /* Find the prototype information in the linked shader. Generate any - * details that may be missing. - */ - ir_function *f = linked->symbols->get_function(name); - if (f == NULL) { - f = new(linked) ir_function(name); - - /* Add the new function to the linked IR. Put it at the end - * so that it comes after any global variable declarations - * that it refers to. - */ - linked->symbols->add_function(f); - linked->ir->push_tail(f); - } - - ir_function_signature *linked_sig = - f->exact_matching_signature(NULL, &callee->parameters); - if (linked_sig == NULL) { - linked_sig = new(linked) ir_function_signature(callee->return_type); - f->add_signature(linked_sig); - } - - /* At this point linked_sig and called may be the same. If ir is an - * ir_call from linked then linked_sig and callee will be - * ir_function_signatures that have no definitions (is_defined is false). - */ - assert(!linked_sig->is_defined); - assert(linked_sig->body.is_empty()); - - /* Create an in-place clone of the function definition. This multistep - * process introduces some complexity here, but it has some advantages. - * The parameter list and the and function body are cloned separately. - * The clone of the parameter list is used to prime the hashtable used - * to replace variable references in the cloned body. - * - * The big advantage is that the ir_function_signature does not change. - * This means that we don't have to process the rest of the IR tree to - * patch ir_call nodes. In addition, there is no way to remove or - * replace signature stored in a function. One could easily be added, - * but this avoids the need. - */ - struct hash_table *ht = _mesa_pointer_hash_table_create(NULL); - - exec_list formal_parameters; - foreach_in_list(const ir_instruction, original, &sig->parameters) { - assert(const_cast(original)->as_variable()); - - ir_instruction *copy = original->clone(linked, ht); - formal_parameters.push_tail(copy); - } - - linked_sig->replace_parameters(&formal_parameters); - - linked_sig->intrinsic_id = sig->intrinsic_id; - - if (sig->is_defined) { - foreach_in_list(const ir_instruction, original, &sig->body) { - ir_instruction *copy = original->clone(linked, ht); - linked_sig->body.push_tail(copy); - } - - linked_sig->is_defined = true; - } - - _mesa_hash_table_destroy(ht, NULL); - - /* Patch references inside the function to things outside the function - * (i.e., function calls and global variables). - */ - linked_sig->accept(this); - - ir->callee = linked_sig; - - return visit_continue; - } - - virtual ir_visitor_status visit_leave(ir_call *ir) - { - /* Traverse list of function parameters, and for array parameters - * propagate max_array_access. Otherwise arrays that are only referenced - * from inside functions via function parameters will be incorrectly - * optimized. This will lead to incorrect code being generated (or worse). - * Do it when leaving the node so the children would propagate their - * array accesses first. - */ - - const exec_node *formal_param_node = ir->callee->parameters.get_head(); - if (formal_param_node) { - const exec_node *actual_param_node = ir->actual_parameters.get_head(); - while (!actual_param_node->is_tail_sentinel()) { - ir_variable *formal_param = (ir_variable *) formal_param_node; - ir_rvalue *actual_param = (ir_rvalue *) actual_param_node; - - formal_param_node = formal_param_node->get_next(); - actual_param_node = actual_param_node->get_next(); - - if (formal_param->type->is_array()) { - ir_dereference_variable *deref = actual_param->as_dereference_variable(); - if (deref && deref->var && deref->var->type->is_array()) { - deref->var->data.max_array_access = - MAX2(formal_param->data.max_array_access, - deref->var->data.max_array_access); - } - } - } - } - return visit_continue; - } - - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - if (_mesa_set_search(locals, ir->var) == NULL) { - /* The non-function variable must be a global, so try to find the - * variable in the shader's symbol table. If the variable is not - * found, then it's a global that *MUST* be defined in the original - * shader. - */ - ir_variable *var = linked->symbols->get_variable(ir->var->name); - if (var == NULL) { - /* Clone the ir_variable that the dereference already has and add - * it to the linked shader. - */ - var = ir->var->clone(linked, NULL); - linked->symbols->add_variable(var); - linked->ir->push_head(var); - } else { - if (var->type->is_array()) { - /* It is possible to have a global array declared in multiple - * shaders without a size. The array is implicitly sized by - * the maximal access to it in *any* shader. Because of this, - * we need to track the maximal access to the array as linking - * pulls more functions in that access the array. - */ - var->data.max_array_access = - MAX2(var->data.max_array_access, - ir->var->data.max_array_access); - - if (var->type->length == 0 && ir->var->type->length != 0) - var->type = ir->var->type; - } - if (var->is_interface_instance()) { - /* Similarly, we need implicit sizes of arrays within interface - * blocks to be sized by the maximal access in *any* shader. - */ - int *const linked_max_ifc_array_access = - var->get_max_ifc_array_access(); - int *const ir_max_ifc_array_access = - ir->var->get_max_ifc_array_access(); - - assert(linked_max_ifc_array_access != NULL); - assert(ir_max_ifc_array_access != NULL); - - for (unsigned i = 0; i < var->get_interface_type()->length; - i++) { - linked_max_ifc_array_access[i] = - MAX2(linked_max_ifc_array_access[i], - ir_max_ifc_array_access[i]); - } - } - } - - ir->var = var; - } - - return visit_continue; - } - - /** Was function linking successful? */ - bool success; - -private: - /** - * Shader program being linked - * - * This is only used for logging error messages. - */ - gl_shader_program *prog; - - /** List of shaders available for linking. */ - gl_shader **shader_list; - - /** Number of shaders available for linking. */ - unsigned num_shaders; - - /** - * Final linked shader - * - * This is used two ways. It is used to find global variables in the - * linked shader that are accessed by the function. It is also used to add - * global variables from the shader where the function originated. - */ - gl_linked_shader *linked; - - /** - * Table of variables local to the function. - */ - set *locals; -}; - -} /* anonymous namespace */ - -/** - * Searches a list of shaders for a particular function definition - */ -ir_function_signature * -find_matching_signature(const char *name, const exec_list *actual_parameters, - glsl_symbol_table *symbols) -{ - ir_function *const f = symbols->get_function(name); - - if (f) { - ir_function_signature *sig = - f->matching_signature(NULL, actual_parameters, true); - - if (sig && (sig->is_defined || sig->is_intrinsic())) - return sig; - } - - return NULL; -} - - -bool -link_function_calls(gl_shader_program *prog, gl_linked_shader *main, - gl_shader **shader_list, unsigned num_shaders) -{ - call_link_visitor v(prog, main, shader_list, num_shaders); - - v.run(main->ir); - return v.success; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_interface_blocks.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_interface_blocks.cpp deleted file mode 100644 index 430bc10..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_interface_blocks.cpp +++ /dev/null @@ -1,552 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 link_interface_blocks.cpp - * Linker support for GLSL's interface blocks. - */ - -#include "ir.h" -#include "glsl_symbol_table.h" -#include "linker.h" -#include "../../util/macros.h" -#include "../../mesa/main/shader_types.h" -#include "../../util/hash_table.h" -#include "../../util/u_string.h" - - -namespace { - -/** - * Return true if interface members mismatch and its not allowed by GLSL. - */ -static bool -interstage_member_mismatch(struct gl_shader_program *prog, - const glsl_type *c, const glsl_type *p) { - - if (c->length != p->length) - return true; - - for (unsigned i = 0; i < c->length; i++) { - if (c->fields.structure[i].type != p->fields.structure[i].type) - return true; - if (strcmp(c->fields.structure[i].name, - p->fields.structure[i].name) != 0) - return true; - if (c->fields.structure[i].location != - p->fields.structure[i].location) - return true; - if (c->fields.structure[i].component != - p->fields.structure[i].component) - return true; - if (c->fields.structure[i].patch != - p->fields.structure[i].patch) - return true; - - /* From Section 4.5 (Interpolation Qualifiers) of the GLSL 4.40 spec: - * - * "It is a link-time error if, within the same stage, the - * interpolation qualifiers of variables of the same name do not - * match." - */ - if (prog->IsES || prog->GLSL_Version < 440) - if (c->fields.structure[i].interpolation != - p->fields.structure[i].interpolation) - return true; - - /* From Section 4.3.4 (Input Variables) of the GLSL ES 3.0 spec: - * - * "The output of the vertex shader and the input of the fragment - * shader form an interface. For this interface, vertex shader - * output variables and fragment shader input variables of the same - * name must match in type and qualification (other than precision - * and out matching to in). - * - * The table in Section 9.2.1 Linked Shaders of the GLSL ES 3.1 spec - * says that centroid no longer needs to match for varyings. - * - * The table in Section 9.2.1 Linked Shaders of the GLSL ES 3.2 spec - * says that sample need not match for varyings. - */ - if (!prog->IsES || prog->GLSL_Version < 310) - if (c->fields.structure[i].centroid != - p->fields.structure[i].centroid) - return true; - if (!prog->IsES) - if (c->fields.structure[i].sample != - p->fields.structure[i].sample) - return true; - } - - return false; -} - -/** - * Check if two interfaces match, according to intrastage interface matching - * rules. If they do, and the first interface uses an unsized array, it will - * be updated to reflect the array size declared in the second interface. - */ -bool -intrastage_match(ir_variable *a, - ir_variable *b, - struct gl_shader_program *prog, - bool match_precision) -{ - /* From section 4.7 "Precision and Precision Qualifiers" in GLSL 4.50: - * - * "For the purposes of determining if an output from one shader - * stage matches an input of the next stage, the precision qualifier - * need not match." - */ - bool interface_type_match = - (prog->IsES ? - a->get_interface_type() == b->get_interface_type() : - a->get_interface_type()->compare_no_precision(b->get_interface_type())); - - /* Types must match. */ - if (!interface_type_match) { - /* Exception: if both the interface blocks are implicitly declared, - * don't force their types to match. They might mismatch due to the two - * shaders using different GLSL versions, and that's ok. - */ - if ((a->data.how_declared != ir_var_declared_implicitly || - b->data.how_declared != ir_var_declared_implicitly) && - (!prog->IsES || - interstage_member_mismatch(prog, a->get_interface_type(), - b->get_interface_type()))) - return false; - } - - /* Presence/absence of interface names must match. */ - if (a->is_interface_instance() != b->is_interface_instance()) - return false; - - /* For uniforms, instance names need not match. For shader ins/outs, - * it's not clear from the spec whether they need to match, but - * Mesa's implementation relies on them matching. - */ - if (a->is_interface_instance() && b->data.mode != ir_var_uniform && - b->data.mode != ir_var_shader_storage && - strcmp(a->name, b->name) != 0) { - return false; - } - - bool type_match = (match_precision ? - a->type == b->type : - a->type->compare_no_precision(b->type)); - - /* If a block is an array then it must match across the shader. - * Unsized arrays are also processed and matched agaist sized arrays. - */ - if (!type_match && (b->type->is_array() || a->type->is_array()) && - (b->is_interface_instance() || a->is_interface_instance()) && - !validate_intrastage_arrays(prog, b, a, match_precision)) - return false; - - return true; -} - -/** - * Check if two interfaces match, according to interstage (in/out) interface - * matching rules. - * - * If \c extra_array_level is true, the consumer interface is required to be - * an array and the producer interface is required to be a non-array. - * This is used for tessellation control and geometry shader consumers. - */ -static bool -interstage_match(struct gl_shader_program *prog, ir_variable *producer, - ir_variable *consumer, bool extra_array_level) -{ - /* Types must match. */ - if (consumer->get_interface_type() != producer->get_interface_type()) { - /* Exception: if both the interface blocks are implicitly declared, - * don't force their types to match. They might mismatch due to the two - * shaders using different GLSL versions, and that's ok. - * - * Also we store some member information such as interpolation in - * glsl_type that doesn't always have to match across shader stages. - * Therefore we make a pass over the members glsl_struct_field to make - * sure we don't reject shaders where fields don't need to match. - */ - if ((consumer->data.how_declared != ir_var_declared_implicitly || - producer->data.how_declared != ir_var_declared_implicitly) && - interstage_member_mismatch(prog, consumer->get_interface_type(), - producer->get_interface_type())) - return false; - } - - /* Ignore outermost array if geom shader */ - const glsl_type *consumer_instance_type; - if (extra_array_level) { - consumer_instance_type = consumer->type->fields.array; - } else { - consumer_instance_type = consumer->type; - } - - /* If a block is an array then it must match across shaders. - * Since unsized arrays have been ruled out, we can check this by just - * making sure the types are equal. - */ - if ((consumer->is_interface_instance() && - consumer_instance_type->is_array()) || - (producer->is_interface_instance() && - producer->type->is_array())) { - if (consumer_instance_type != producer->type) - return false; - } - - return true; -} - - -/** - * This class keeps track of a mapping from an interface block name to the - * necessary information about that interface block to determine whether to - * generate a link error. - * - * Note: this class is expected to be short lived, so it doesn't make copies - * of the strings it references; it simply borrows the pointers from the - * ir_variable class. - */ -class interface_block_definitions -{ -public: - interface_block_definitions() - : mem_ctx(ralloc_context(NULL)), - ht(_mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal)) - { - } - - ~interface_block_definitions() - { - ralloc_free(mem_ctx); - _mesa_hash_table_destroy(ht, NULL); - } - - /** - * Lookup the interface definition. Return NULL if none is found. - */ - ir_variable *lookup(ir_variable *var) - { - if (var->data.explicit_location && - var->data.location >= VARYING_SLOT_VAR0) { - char location_str[11]; - snprintf(location_str, 11, "%d", var->data.location); - - const struct hash_entry *entry = - _mesa_hash_table_search(ht, location_str); - return entry ? (ir_variable *) entry->data : NULL; - } else { - const struct hash_entry *entry = - _mesa_hash_table_search(ht, - var->get_interface_type()->without_array()->name); - return entry ? (ir_variable *) entry->data : NULL; - } - } - - /** - * Add a new interface definition. - */ - void store(ir_variable *var) - { - if (var->data.explicit_location && - var->data.location >= VARYING_SLOT_VAR0) { - /* If explicit location is given then lookup the variable by location. - * We turn the location into a string and use this as the hash key - * rather than the name. Note: We allocate enough space for a 32-bit - * unsigned location value which is overkill but future proof. - */ - char location_str[11]; - snprintf(location_str, 11, "%d", var->data.location); - _mesa_hash_table_insert(ht, ralloc_strdup(mem_ctx, location_str), var); - } else { - _mesa_hash_table_insert(ht, - var->get_interface_type()->without_array()->name, var); - } - } - -private: - /** - * Ralloc context for data structures allocated by this class. - */ - void *mem_ctx; - - /** - * Hash table mapping interface block name to an \c - * ir_variable. - */ - hash_table *ht; -}; - - -}; /* anonymous namespace */ - - -void -validate_intrastage_interface_blocks(struct gl_shader_program *prog, - const gl_shader **shader_list, - unsigned num_shaders) -{ - interface_block_definitions in_interfaces; - interface_block_definitions out_interfaces; - interface_block_definitions uniform_interfaces; - interface_block_definitions buffer_interfaces; - - for (unsigned int i = 0; i < num_shaders; i++) { - if (shader_list[i] == NULL) - continue; - - foreach_in_list(ir_instruction, node, shader_list[i]->ir) { - ir_variable *var = node->as_variable(); - if (!var) - continue; - - const glsl_type *iface_type = var->get_interface_type(); - - if (iface_type == NULL) - continue; - - interface_block_definitions *definitions; - switch (var->data.mode) { - case ir_var_shader_in: - definitions = &in_interfaces; - break; - case ir_var_shader_out: - definitions = &out_interfaces; - break; - case ir_var_uniform: - definitions = &uniform_interfaces; - break; - case ir_var_shader_storage: - definitions = &buffer_interfaces; - break; - default: - /* Only in, out, and uniform interfaces are legal, so we should - * never get here. - */ - assert(!"illegal interface type"); - continue; - } - - ir_variable *prev_def = definitions->lookup(var); - if (prev_def == NULL) { - /* This is the first time we've seen the interface, so save - * it into the appropriate data structure. - */ - definitions->store(var); - } else if (!intrastage_match(prev_def, var, prog, - true /* match_precision */)) { - linker_error(prog, "definitions of interface block `%s' do not" - " match\n", iface_type->name); - return; - } - } - } -} - -static bool -is_builtin_gl_in_block(ir_variable *var, int consumer_stage) -{ - return !strcmp(var->name, "gl_in") && - (consumer_stage == MESA_SHADER_TESS_CTRL || - consumer_stage == MESA_SHADER_TESS_EVAL || - consumer_stage == MESA_SHADER_GEOMETRY); -} - -void -validate_interstage_inout_blocks(struct gl_shader_program *prog, - const gl_linked_shader *producer, - const gl_linked_shader *consumer) -{ - interface_block_definitions definitions; - /* VS -> GS, VS -> TCS, VS -> TES, TES -> GS */ - const bool extra_array_level = (producer->Stage == MESA_SHADER_VERTEX && - consumer->Stage != MESA_SHADER_FRAGMENT) || - consumer->Stage == MESA_SHADER_GEOMETRY; - - /* Check that block re-declarations of gl_PerVertex are compatible - * across shaders: From OpenGL Shading Language 4.5, section - * "7.1 Built-In Language Variables", page 130 of the PDF: - * - * "If multiple shaders using members of a built-in block belonging - * to the same interface are linked together in the same program, - * they must all redeclare the built-in block in the same way, as - * described in section 4.3.9 “Interface Blocks” for interface-block - * matching, or a link-time error will result." - * - * This is done explicitly outside of iterating the member variable - * declarations because it is possible that the variables are not used and - * so they would have been optimised out. - */ - const glsl_type *consumer_iface = - consumer->symbols->get_interface("gl_PerVertex", - ir_var_shader_in); - - const glsl_type *producer_iface = - producer->symbols->get_interface("gl_PerVertex", - ir_var_shader_out); - - if (producer_iface && consumer_iface && - interstage_member_mismatch(prog, consumer_iface, producer_iface)) { - linker_error(prog, "Incompatible or missing gl_PerVertex re-declaration " - "in consecutive shaders"); - return; - } - - /* Desktop OpenGL requires redeclaration of the built-in interfaces for - * SSO programs. Passes above implement following rules: - * - * From Section 7.4 (Program Pipeline Objects) of the OpenGL 4.6 Core - * spec: - * - * "To use any built-in input or output in the gl_PerVertex and - * gl_PerFragment blocks in separable program objects, shader code - * must redeclare those blocks prior to use. A separable program - * will fail to link if: - * - * it contains multiple shaders of a single type with different - * redeclarations of these built-in input and output blocks; or - * - * any shader uses a built-in block member not found in the - * redeclaration of that block." - * - * ARB_separate_shader_objects issues section (issue #28) states that - * redeclaration is not required for GLSL shaders using #version 140 or - * earlier (since interface blocks are not possible with older versions). - * - * From Section 7.4.1 (Shader Interface Matching) of the OpenGL ES 3.1 - * spec: - * - * "Built-in inputs or outputs do not affect interface matching." - * - * GL_OES_shader_io_blocks adds following: - * - * "When using any built-in input or output in the gl_PerVertex block - * in separable program objects, shader code may redeclare that block - * prior to use. If the shader does not redeclare the block, the - * intrinsically declared definition of that block will be used." - */ - - /* Add output interfaces from the producer to the symbol table. */ - foreach_in_list(ir_instruction, node, producer->ir) { - ir_variable *var = node->as_variable(); - if (!var || !var->get_interface_type() || var->data.mode != ir_var_shader_out) - continue; - - /* Built-in interface redeclaration check. */ - if (prog->SeparateShader && !prog->IsES && prog->GLSL_Version >= 150 && - var->data.how_declared == ir_var_declared_implicitly && - var->data.used && !producer_iface) { - linker_error(prog, "missing output builtin block %s redeclaration " - "in separable shader program", - var->get_interface_type()->name); - return; - } - - definitions.store(var); - } - - /* Verify that the consumer's input interfaces match. */ - foreach_in_list(ir_instruction, node, consumer->ir) { - ir_variable *var = node->as_variable(); - if (!var || !var->get_interface_type() || var->data.mode != ir_var_shader_in) - continue; - - ir_variable *producer_def = definitions.lookup(var); - - /* Built-in interface redeclaration check. */ - if (prog->SeparateShader && !prog->IsES && prog->GLSL_Version >= 150 && - var->data.how_declared == ir_var_declared_implicitly && - var->data.used && !producer_iface) { - linker_error(prog, "missing input builtin block %s redeclaration " - "in separable shader program", - var->get_interface_type()->name); - return; - } - - /* The producer doesn't generate this input: fail to link. Skip built-in - * 'gl_in[]' since that may not be present if the producer does not - * write to any of the pre-defined outputs (e.g. if the vertex shader - * does not write to gl_Position, etc), which is allowed and results in - * undefined behavior. - * - * From Section 4.3.4 (Inputs) of the GLSL 1.50 spec: - * - * "Only the input variables that are actually read need to be written - * by the previous stage; it is allowed to have superfluous - * declarations of input variables." - */ - if (producer_def == NULL && - !is_builtin_gl_in_block(var, consumer->Stage) && var->data.used) { - linker_error(prog, "Input block `%s' is not an output of " - "the previous stage\n", var->get_interface_type()->name); - return; - } - - if (producer_def && - !interstage_match(prog, producer_def, var, extra_array_level)) { - linker_error(prog, "definitions of interface block `%s' do not " - "match\n", var->get_interface_type()->name); - return; - } - } -} - - -void -validate_interstage_uniform_blocks(struct gl_shader_program *prog, - gl_linked_shader **stages) -{ - interface_block_definitions definitions; - - for (int i = 0; i < MESA_SHADER_STAGES; i++) { - if (stages[i] == NULL) - continue; - - const gl_linked_shader *stage = stages[i]; - foreach_in_list(ir_instruction, node, stage->ir) { - ir_variable *var = node->as_variable(); - if (!var || !var->get_interface_type() || - (var->data.mode != ir_var_uniform && - var->data.mode != ir_var_shader_storage)) - continue; - - ir_variable *old_def = definitions.lookup(var); - if (old_def == NULL) { - definitions.store(var); - } else { - /* Interstage uniform matching rules are the same as intrastage - * uniform matchin rules (for uniforms, it is as though all - * shaders are in the same shader stage). - */ - if (!intrastage_match(old_def, var, prog, false /* precision */)) { - linker_error(prog, "definitions of uniform block `%s' do not " - "match\n", var->get_interface_type()->name); - return; - } - } - } - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp deleted file mode 100644 index e365966..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "link_uniform_block_active_visitor.h" -#include "program.h" -#include "linker_util.h" - -static link_uniform_block_active * -process_block(void *mem_ctx, struct hash_table *ht, ir_variable *var) -{ - const hash_entry *const existing_block = - _mesa_hash_table_search(ht, var->get_interface_type()->name); - - const glsl_type *const block_type = var->is_interface_instance() - ? var->type : var->get_interface_type(); - - - /* If a block with this block-name has not previously been seen, add it. - * If a block with this block-name has been seen, it must be identical to - * the block currently being examined. - */ - if (existing_block == NULL) { - link_uniform_block_active *const b = - rzalloc(mem_ctx, struct link_uniform_block_active); - - b->type = block_type; - b->has_instance_name = var->is_interface_instance(); - b->is_shader_storage = var->data.mode == ir_var_shader_storage; - - if (var->data.explicit_binding) { - b->has_binding = true; - b->binding = var->data.binding; - } else { - b->has_binding = false; - b->binding = 0; - } - - _mesa_hash_table_insert(ht, var->get_interface_type()->name, (void *) b); - return b; - } else { - link_uniform_block_active *const b = - (link_uniform_block_active *) existing_block->data; - - if (b->type != block_type - || b->has_instance_name != var->is_interface_instance()) - return NULL; - else - return b; - } - - assert(!"Should not get here."); - return NULL; -} - -/* For arrays of arrays this function will give us a middle ground between - * detecting inactive uniform blocks and structuring them in a way that makes - * it easy to calculate the offset for indirect indexing. - * - * For example given the shader: - * - * uniform ArraysOfArraysBlock - * { - * vec4 a; - * } i[3][4][5]; - * - * void main() - * { - * vec4 b = i[0][1][1].a; - * gl_Position = i[2][2][3].a + b; - * } - * - * There are only 2 active blocks above but for the sake of indirect indexing - * and not over complicating the code we will end up with a count of 8. Here - * each dimension has 2 different indices counted so we end up with 2*2*2 - */ -static struct uniform_block_array_elements ** -process_arrays(void *mem_ctx, ir_dereference_array *ir, - struct link_uniform_block_active *block) -{ - if (ir) { - struct uniform_block_array_elements **ub_array_ptr = - process_arrays(mem_ctx, ir->array->as_dereference_array(), block); - if (*ub_array_ptr == NULL) { - *ub_array_ptr = rzalloc(mem_ctx, struct uniform_block_array_elements); - (*ub_array_ptr)->ir = ir; - (*ub_array_ptr)->aoa_size = - ir->array->type->arrays_of_arrays_size(); - } - - struct uniform_block_array_elements *ub_array = *ub_array_ptr; - ir_constant *c = ir->array_index->as_constant(); - if (c) { - /* Index is a constant, so mark just that element used, if not - * already. - */ - const unsigned idx = c->get_uint_component(0); - - unsigned i; - for (i = 0; i < ub_array->num_array_elements; i++) { - if (ub_array->array_elements[i] == idx) - break; - } - - assert(i <= ub_array->num_array_elements); - - if (i == ub_array->num_array_elements) { - ub_array->array_elements = reralloc(mem_ctx, - ub_array->array_elements, - unsigned, - ub_array->num_array_elements + 1); - - ub_array->array_elements[ub_array->num_array_elements] = idx; - - ub_array->num_array_elements++; - } - } else { - /* The array index is not a constant, so mark the entire array used. */ - assert(ir->array->type->is_array()); - if (ub_array->num_array_elements < ir->array->type->length) { - ub_array->num_array_elements = ir->array->type->length; - ub_array->array_elements = reralloc(mem_ctx, - ub_array->array_elements, - unsigned, - ub_array->num_array_elements); - - for (unsigned i = 0; i < ub_array->num_array_elements; i++) { - ub_array->array_elements[i] = i; - } - } - } - - return &ub_array->array; - } else { - return &block->array; - } -} - -ir_visitor_status -link_uniform_block_active_visitor::visit(ir_variable *var) -{ - if (!var->is_in_buffer_block()) - return visit_continue; - - /* Section 2.11.6 (Uniform Variables) of the OpenGL ES 3.0.3 spec says: - * - * "All members of a named uniform block declared with a shared or - * std140 layout qualifier are considered active, even if they are not - * referenced in any shader in the program. The uniform block itself is - * also considered active, even if no member of the block is - * referenced." - */ - if (var->get_interface_type_packing() == GLSL_INTERFACE_PACKING_PACKED) - return visit_continue; - - /* Process the block. Bail if there was an error. */ - link_uniform_block_active *const b = - process_block(this->mem_ctx, this->ht, var); - if (b == NULL) { - linker_error(this->prog, - "uniform block `%s' has mismatching definitions", - var->get_interface_type()->name); - this->success = false; - return visit_stop; - } - - assert(b->array == NULL); - assert(b->type != NULL); - assert(!b->type->is_array() || b->has_instance_name); - - /* For uniform block arrays declared with a shared or std140 layout - * qualifier, mark all its instances as used. - */ - const glsl_type *type = b->type; - struct uniform_block_array_elements **ub_array = &b->array; - while (type->is_array()) { - assert(b->type->length > 0); - - *ub_array = rzalloc(this->mem_ctx, struct uniform_block_array_elements); - (*ub_array)->num_array_elements = type->length; - (*ub_array)->array_elements = reralloc(this->mem_ctx, - (*ub_array)->array_elements, - unsigned, - (*ub_array)->num_array_elements); - (*ub_array)->aoa_size = type->arrays_of_arrays_size(); - - for (unsigned i = 0; i < (*ub_array)->num_array_elements; i++) { - (*ub_array)->array_elements[i] = i; - } - ub_array = &(*ub_array)->array; - type = type->fields.array; - } - - return visit_continue; -} - -ir_visitor_status -link_uniform_block_active_visitor::visit_enter(ir_dereference_array *ir) -{ - /* cycle through arrays of arrays */ - ir_dereference_array *base_ir = ir; - while (base_ir->array->ir_type == ir_type_dereference_array) - base_ir = base_ir->array->as_dereference_array(); - - ir_dereference_variable *const d = - base_ir->array->as_dereference_variable(); - ir_variable *const var = (d == NULL) ? NULL : d->var; - - /* If the r-value being dereferenced is not a variable (e.g., a field of a - * structure) or is not a uniform block instance, continue. - * - * WARNING: It is not enough for the variable to be part of uniform block. - * It must represent the entire block. Arrays (or matrices) inside blocks - * that lack an instance name are handled by the ir_dereference_variable - * function. - */ - if (var == NULL - || !var->is_in_buffer_block() - || !var->is_interface_instance()) - return visit_continue; - - /* Process the block. Bail if there was an error. */ - link_uniform_block_active *const b = - process_block(this->mem_ctx, this->ht, var); - if (b == NULL) { - linker_error(prog, - "uniform block `%s' has mismatching definitions", - var->get_interface_type()->name); - this->success = false; - return visit_stop; - } - - /* Block arrays must be declared with an instance name. - */ - assert(b->has_instance_name); - assert(b->type != NULL); - - /* If the block array was declared with a shared or std140 layout - * qualifier, all its instances have been already marked as used in - * link_uniform_block_active_visitor::visit(ir_variable *). - */ - if (var->get_interface_type_packing() == GLSL_INTERFACE_PACKING_PACKED) { - b->var = var; - process_arrays(this->mem_ctx, ir, b); - } - - return visit_continue_with_parent; -} - -ir_visitor_status -link_uniform_block_active_visitor::visit(ir_dereference_variable *ir) -{ - ir_variable *var = ir->var; - - if (!var->is_in_buffer_block()) - return visit_continue; - - assert(!var->is_interface_instance() || !var->type->is_array()); - - /* Process the block. Bail if there was an error. */ - link_uniform_block_active *const b = - process_block(this->mem_ctx, this->ht, var); - if (b == NULL) { - linker_error(this->prog, - "uniform block `%s' has mismatching definitions", - var->get_interface_type()->name); - this->success = false; - return visit_stop; - } - - assert(b->array == NULL); - assert(b->type != NULL); - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h deleted file mode 100644 index 7949aeb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef LINK_UNIFORM_BLOCK_ACTIVE_VISITOR_H -#define LINK_UNIFORM_BLOCK_ACTIVE_VISITOR_H - -#include "ir.h" -#include "../../util/hash_table.h" - -struct uniform_block_array_elements { - unsigned *array_elements; - unsigned num_array_elements; - /** - * Size of the array before array-trimming optimizations. - * - * Locations are only assigned to active array elements, but the location - * values are calculated as if all elements are active. The total number - * of elements in an array including the elements in arrays of arrays before - * inactive elements are removed is needed to be perform that calculation. - */ - unsigned aoa_size; - - ir_dereference_array *ir; - - struct uniform_block_array_elements *array; -}; - -struct link_uniform_block_active { - const glsl_type *type; - ir_variable *var; - - struct uniform_block_array_elements *array; - - unsigned binding; - - bool has_instance_name; - bool has_binding; - bool is_shader_storage; -}; - -class link_uniform_block_active_visitor : public ir_hierarchical_visitor { -public: - link_uniform_block_active_visitor(void *mem_ctx, struct hash_table *ht, - struct gl_shader_program *prog) - : success(true), prog(prog), ht(ht), mem_ctx(mem_ctx) - { - /* empty */ - } - - virtual ir_visitor_status visit_enter(ir_dereference_array *); - virtual ir_visitor_status visit(ir_dereference_variable *); - virtual ir_visitor_status visit(ir_variable *); - - bool success; - -private: - struct gl_shader_program *prog; - struct hash_table *ht; - void *mem_ctx; -}; - -#endif /* LINK_UNIFORM_BLOCK_ACTIVE_VISITOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_blocks.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_blocks.cpp deleted file mode 100644 index 8c7954e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniform_blocks.cpp +++ /dev/null @@ -1,578 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" -#include "linker.h" -#include "ir_uniform.h" -#include "link_uniform_block_active_visitor.h" -#include "../../util/hash_table.h" -#include "program.h" -#include "../../mesa/main/errors.h" -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/consts_exts.h" - -namespace { - -class ubo_visitor : public program_resource_visitor { -public: - ubo_visitor(void *mem_ctx, gl_uniform_buffer_variable *variables, - unsigned num_variables, struct gl_shader_program *prog, - bool use_std430_as_default) - : index(0), offset(0), buffer_size(0), variables(variables), - num_variables(num_variables), mem_ctx(mem_ctx), - is_array_instance(false), prog(prog), - use_std430_as_default(use_std430_as_default) - { - /* empty */ - } - - void process(const glsl_type *type, const char *name) - { - this->offset = 0; - this->buffer_size = 0; - this->is_array_instance = strchr(name, ']') != NULL; - this->program_resource_visitor::process(type, name, - use_std430_as_default); - } - - unsigned index; - unsigned offset; - unsigned buffer_size; - gl_uniform_buffer_variable *variables; - unsigned num_variables; - void *mem_ctx; - bool is_array_instance; - struct gl_shader_program *prog; - -private: - virtual void enter_record(const glsl_type *type, const char *, - bool row_major, - const enum glsl_interface_packing packing) - { - assert(type->is_struct()); - if (packing == GLSL_INTERFACE_PACKING_STD430) - this->offset = glsl_align( - this->offset, type->std430_base_alignment(row_major)); - else - this->offset = glsl_align( - this->offset, type->std140_base_alignment(row_major)); - } - - virtual void leave_record(const glsl_type *type, const char *, - bool row_major, - const enum glsl_interface_packing packing) - { - assert(type->is_struct()); - - /* If this is the last field of a structure, apply rule #9. The - * ARB_uniform_buffer_object spec says: - * - * The structure may have padding at the end; the base offset of the - * member following the sub-structure is rounded up to the next - * multiple of the base alignment of the structure. - */ - if (packing == GLSL_INTERFACE_PACKING_STD430) - this->offset = glsl_align( - this->offset, type->std430_base_alignment(row_major)); - else - this->offset = glsl_align( - this->offset, type->std140_base_alignment(row_major)); - } - - virtual void set_buffer_offset(unsigned offset) - { - this->offset = offset; - } - - virtual void visit_field(const glsl_type *type, const char *name, - bool row_major, const glsl_type *, - const enum glsl_interface_packing packing, - bool last_field) - { - assert(this->index < this->num_variables); - - gl_uniform_buffer_variable *v = &this->variables[this->index++]; - - v->Name = ralloc_strdup(mem_ctx, name); - v->Type = type; - v->RowMajor = type->without_array()->is_matrix() && row_major; - - if (this->is_array_instance) { - v->IndexName = ralloc_strdup(mem_ctx, name); - - char *open_bracket = strchr(v->IndexName, '['); - assert(open_bracket != NULL); - - char *close_bracket = strchr(open_bracket, '.') - 1; - assert(close_bracket != NULL); - - /* Length of the tail without the ']' but with the NUL. - */ - unsigned len = strlen(close_bracket + 1) + 1; - - memmove(open_bracket, close_bracket + 1, len); - } else { - v->IndexName = v->Name; - } - - unsigned alignment = 0; - unsigned size = 0; - - /* The ARB_program_interface_query spec says: - * - * If the final member of an active shader storage block is array - * with no declared size, the minimum buffer size is computed - * assuming the array was declared as an array with one element. - * - * For that reason, we use the base type of the unsized array to - * calculate its size. We don't need to check if the unsized array is - * the last member of a shader storage block (that check was already - * done by the parser). - */ - const glsl_type *type_for_size = type; - if (type->is_unsized_array()) { - if (!last_field) { - linker_error(prog, "unsized array `%s' definition: " - "only last member of a shader storage block " - "can be defined as unsized array", - name); - } - - type_for_size = type->without_array(); - } - - if (packing == GLSL_INTERFACE_PACKING_STD430) { - alignment = type->std430_base_alignment(v->RowMajor); - size = type_for_size->std430_size(v->RowMajor); - } else { - alignment = type->std140_base_alignment(v->RowMajor); - size = type_for_size->std140_size(v->RowMajor); - } - - this->offset = glsl_align(this->offset, alignment); - v->Offset = this->offset; - - this->offset += size; - - /* The ARB_uniform_buffer_object spec says: - * - * For uniform blocks laid out according to [std140] rules, the - * minimum buffer object size returned by the UNIFORM_BLOCK_DATA_SIZE - * query is derived by taking the offset of the last basic machine - * unit consumed by the last uniform of the uniform block (including - * any end-of-array or end-of-structure padding), adding one, and - * rounding up to the next multiple of the base alignment required - * for a vec4. - */ - this->buffer_size = glsl_align(this->offset, 16); - } - - bool use_std430_as_default; -}; - -class count_block_size : public program_resource_visitor { -public: - count_block_size() : num_active_uniforms(0) - { - /* empty */ - } - - unsigned num_active_uniforms; - -private: - virtual void visit_field(const glsl_type * /* type */, - const char * /* name */, - bool /* row_major */, - const glsl_type * /* record_type */, - const enum glsl_interface_packing, - bool /* last_field */) - { - this->num_active_uniforms++; - } -}; - -} /* anonymous namespace */ - -struct block { - const glsl_type *type; - bool has_instance_name; -}; - -static void process_block_array_leaf(const char *name, gl_uniform_block *blocks, - ubo_visitor *parcel, - gl_uniform_buffer_variable *variables, - const struct link_uniform_block_active *const b, - unsigned *block_index, - unsigned binding_offset, - unsigned linearized_index, - const struct gl_constants *consts, - struct gl_shader_program *prog); - -/** - * - * \param first_index Value of \c block_index for the first element of the - * array. - */ -static void -process_block_array(struct uniform_block_array_elements *ub_array, char **name, - size_t name_length, gl_uniform_block *blocks, - ubo_visitor *parcel, gl_uniform_buffer_variable *variables, - const struct link_uniform_block_active *const b, - unsigned *block_index, unsigned binding_offset, - const struct gl_constants *consts, - struct gl_shader_program *prog, - unsigned first_index) -{ - for (unsigned j = 0; j < ub_array->num_array_elements; j++) { - size_t new_length = name_length; - - unsigned int element_idx = ub_array->array_elements[j]; - /* Append the subscript to the current variable name */ - ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", element_idx); - - if (ub_array->array) { - unsigned binding_stride = binding_offset + (element_idx * - ub_array->array->aoa_size); - process_block_array(ub_array->array, name, new_length, blocks, - parcel, variables, b, block_index, - binding_stride, consts, prog, first_index); - } else { - process_block_array_leaf(*name, blocks, - parcel, variables, b, block_index, - binding_offset + element_idx, - *block_index - first_index, consts, prog); - } - } -} - -static void -process_block_array_leaf(const char *name, - gl_uniform_block *blocks, - ubo_visitor *parcel, gl_uniform_buffer_variable *variables, - const struct link_uniform_block_active *const b, - unsigned *block_index, unsigned binding_offset, - unsigned linearized_index, - const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - unsigned i = *block_index; - const glsl_type *type = b->type->without_array(); - - blocks[i].name.string = ralloc_strdup(blocks, name); - resource_name_updated(&blocks[i].name); - blocks[i].Uniforms = &variables[(*parcel).index]; - - /* The ARB_shading_language_420pack spec says: - * - * If the binding identifier is used with a uniform block instanced as - * an array then the first element of the array takes the specified - * block binding and each subsequent element takes the next consecutive - * uniform block binding point. - */ - blocks[i].Binding = (b->has_binding) ? b->binding + binding_offset : 0; - - blocks[i].UniformBufferSize = 0; - blocks[i]._Packing = glsl_interface_packing(type->interface_packing); - blocks[i]._RowMajor = type->get_interface_row_major(); - blocks[i].linearized_array_index = linearized_index; - - parcel->process(type, b->has_instance_name ? blocks[i].name.string : ""); - - blocks[i].UniformBufferSize = parcel->buffer_size; - - /* Check SSBO size is lower than maximum supported size for SSBO */ - if (b->is_shader_storage && - parcel->buffer_size > consts->MaxShaderStorageBlockSize) { - linker_error(prog, "shader storage block `%s' has size %d, " - "which is larger than the maximum allowed (%d)", - b->type->name, - parcel->buffer_size, - consts->MaxShaderStorageBlockSize); - } - blocks[i].NumUniforms = - (unsigned)(ptrdiff_t)(&variables[parcel->index] - blocks[i].Uniforms); - - *block_index = *block_index + 1; -} - -/* This function resizes the array types of the block so that later we can use - * this new size to correctly calculate the offest for indirect indexing. - */ -static const glsl_type * -resize_block_array(const glsl_type *type, - struct uniform_block_array_elements *ub_array) -{ - if (type->is_array()) { - struct uniform_block_array_elements *child_array = - type->fields.array->is_array() ? ub_array->array : NULL; - const glsl_type *new_child_type = - resize_block_array(type->fields.array, child_array); - - const glsl_type *new_type = - glsl_type::get_array_instance(new_child_type, - ub_array->num_array_elements); - ub_array->ir->array->type = new_type; - return new_type; - } else { - return type; - } -} - -static void -create_buffer_blocks(void *mem_ctx, const struct gl_constants *consts, - struct gl_shader_program *prog, - struct gl_uniform_block **out_blks, unsigned num_blocks, - struct hash_table *block_hash, unsigned num_variables, - bool create_ubo_blocks) -{ - if (num_blocks == 0) { - assert(num_variables == 0); - return; - } - - assert(num_variables != 0); - - /* Allocate storage to hold all of the information related to uniform - * blocks that can be queried through the API. - */ - struct gl_uniform_block *blocks = - rzalloc_array(mem_ctx, gl_uniform_block, num_blocks); - gl_uniform_buffer_variable *variables = - ralloc_array(blocks, gl_uniform_buffer_variable, num_variables); - - /* Add each variable from each uniform block to the API tracking - * structures. - */ - ubo_visitor parcel(blocks, variables, num_variables, prog, - consts->UseSTD430AsDefaultPacking); - - unsigned i = 0; - hash_table_foreach (block_hash, entry) { - const struct link_uniform_block_active *const b = - (const struct link_uniform_block_active *) entry->data; - const glsl_type *block_type = b->type; - - if ((create_ubo_blocks && !b->is_shader_storage) || - (!create_ubo_blocks && b->is_shader_storage)) { - - if (b->array != NULL) { - char *name = ralloc_strdup(NULL, - block_type->without_array()->name); - size_t name_length = strlen(name); - - assert(b->has_instance_name); - process_block_array(b->array, &name, name_length, blocks, &parcel, - variables, b, &i, 0, consts, prog, - i); - ralloc_free(name); - } else { - process_block_array_leaf(block_type->name, blocks, &parcel, - variables, b, &i, 0, - 0, consts, prog); - } - } - } - - *out_blks = blocks; - - assert(parcel.index == num_variables); -} - -void -link_uniform_blocks(void *mem_ctx, - const struct gl_constants *consts, - struct gl_shader_program *prog, - struct gl_linked_shader *shader, - struct gl_uniform_block **ubo_blocks, - unsigned *num_ubo_blocks, - struct gl_uniform_block **ssbo_blocks, - unsigned *num_ssbo_blocks) -{ - /* This hash table will track all of the uniform blocks that have been - * encountered. Since blocks with the same block-name must be the same, - * the hash is organized by block-name. - */ - struct hash_table *block_hash = - _mesa_hash_table_create(mem_ctx, _mesa_hash_string, - _mesa_key_string_equal); - - if (block_hash == NULL) { - _mesa_error_no_memory(__func__); - linker_error(prog, "out of memory\n"); - return; - } - - /* Determine which uniform blocks are active. */ - link_uniform_block_active_visitor v(mem_ctx, block_hash, prog); - visit_list_elements(&v, shader->ir); - - /* Count the number of active uniform blocks. Count the total number of - * active slots in those uniform blocks. - */ - unsigned num_ubo_variables = 0; - unsigned num_ssbo_variables = 0; - count_block_size block_size; - - hash_table_foreach (block_hash, entry) { - struct link_uniform_block_active *const b = - (struct link_uniform_block_active *) entry->data; - - assert((b->array != NULL) == b->type->is_array()); - - if (b->array != NULL && - (b->type->without_array()->interface_packing == - GLSL_INTERFACE_PACKING_PACKED)) { - b->type = resize_block_array(b->type, b->array); - b->var->type = b->type; - b->var->data.max_array_access = b->type->length - 1; - } - - block_size.num_active_uniforms = 0; - block_size.process(b->type->without_array(), "", - consts->UseSTD430AsDefaultPacking); - - if (b->array != NULL) { - unsigned aoa_size = b->type->arrays_of_arrays_size(); - if (b->is_shader_storage) { - *num_ssbo_blocks += aoa_size; - num_ssbo_variables += aoa_size * block_size.num_active_uniforms; - } else { - *num_ubo_blocks += aoa_size; - num_ubo_variables += aoa_size * block_size.num_active_uniforms; - } - } else { - if (b->is_shader_storage) { - (*num_ssbo_blocks)++; - num_ssbo_variables += block_size.num_active_uniforms; - } else { - (*num_ubo_blocks)++; - num_ubo_variables += block_size.num_active_uniforms; - } - } - - } - - create_buffer_blocks(mem_ctx, consts, prog, ubo_blocks, *num_ubo_blocks, - block_hash, num_ubo_variables, true); - create_buffer_blocks(mem_ctx, consts, prog, ssbo_blocks, *num_ssbo_blocks, - block_hash, num_ssbo_variables, false); - - _mesa_hash_table_destroy(block_hash, NULL); -} - -static bool -link_uniform_blocks_are_compatible(const gl_uniform_block *a, - const gl_uniform_block *b) -{ - assert(strcmp(a->name.string, b->name.string) == 0); - - /* Page 35 (page 42 of the PDF) in section 4.3.7 of the GLSL 1.50 spec says: - * - * Matched block names within an interface (as defined above) must match - * in terms of having the same number of declarations with the same - * sequence of types and the same sequence of member names, as well as - * having the same member-wise layout qualification....if a matching - * block is declared as an array, then the array sizes must also - * match... Any mismatch will generate a link error. - * - * Arrays are not yet supported, so there is no check for that. - */ - if (a->NumUniforms != b->NumUniforms) - return false; - - if (a->_Packing != b->_Packing) - return false; - - if (a->_RowMajor != b->_RowMajor) - return false; - - if (a->Binding != b->Binding) - return false; - - for (unsigned i = 0; i < a->NumUniforms; i++) { - if (strcmp(a->Uniforms[i].Name, b->Uniforms[i].Name) != 0) - return false; - - if (a->Uniforms[i].Type != b->Uniforms[i].Type) - return false; - - if (a->Uniforms[i].RowMajor != b->Uniforms[i].RowMajor) - return false; - } - - return true; -} - -/** - * Merges a uniform block into an array of uniform blocks that may or - * may not already contain a copy of it. - * - * Returns the index of the new block in the array. - */ -int -link_cross_validate_uniform_block(void *mem_ctx, - struct gl_uniform_block **linked_blocks, - unsigned int *num_linked_blocks, - struct gl_uniform_block *new_block) -{ - for (unsigned int i = 0; i < *num_linked_blocks; i++) { - struct gl_uniform_block *old_block = &(*linked_blocks)[i]; - - if (strcmp(old_block->name.string, new_block->name.string) == 0) - return link_uniform_blocks_are_compatible(old_block, new_block) - ? i : -1; - } - - *linked_blocks = reralloc(mem_ctx, *linked_blocks, - struct gl_uniform_block, - *num_linked_blocks + 1); - int linked_block_index = (*num_linked_blocks)++; - struct gl_uniform_block *linked_block = &(*linked_blocks)[linked_block_index]; - - memcpy(linked_block, new_block, sizeof(*new_block)); - linked_block->Uniforms = ralloc_array(*linked_blocks, - struct gl_uniform_buffer_variable, - linked_block->NumUniforms); - - memcpy(linked_block->Uniforms, - new_block->Uniforms, - sizeof(*linked_block->Uniforms) * linked_block->NumUniforms); - - linked_block->name.string = ralloc_strdup(*linked_blocks, linked_block->name.string); - resource_name_updated(&linked_block->name); - - for (unsigned int i = 0; i < linked_block->NumUniforms; i++) { - struct gl_uniform_buffer_variable *ubo_var = - &linked_block->Uniforms[i]; - - if (ubo_var->Name == ubo_var->IndexName) { - ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name); - ubo_var->IndexName = ubo_var->Name; - } else { - ubo_var->Name = ralloc_strdup(*linked_blocks, ubo_var->Name); - ubo_var->IndexName = ralloc_strdup(*linked_blocks, ubo_var->IndexName); - } - } - - return linked_block_index; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniforms.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniforms.cpp deleted file mode 100644 index 234a00c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_uniforms.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" -#include "linker.h" -#include "ir_uniform.h" -#include "glsl_symbol_table.h" -#include "program.h" -#include "string_to_uint_map.h" -#include "ir_array_refcount.h" - -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/consts_exts.h" -#include "../../util/strndup.h" - -/** - * \file link_uniforms.cpp - * Assign locations for GLSL uniforms. - * - * \author Ian Romanick - */ - -void -program_resource_visitor::process(const glsl_type *type, const char *name, - bool use_std430_as_default) -{ - assert(type->without_array()->is_struct() - || type->without_array()->is_interface()); - - unsigned record_array_count = 1; - char *name_copy = ralloc_strdup(NULL, name); - - enum glsl_interface_packing packing = - type->get_internal_ifc_packing(use_std430_as_default); - - recursion(type, &name_copy, strlen(name), false, NULL, packing, false, - record_array_count, NULL); - ralloc_free(name_copy); -} - -void -program_resource_visitor::process(ir_variable *var, bool use_std430_as_default) -{ - const glsl_type *t = - var->data.from_named_ifc_block ? var->get_interface_type() : var->type; - process(var, t, use_std430_as_default); -} - -void -program_resource_visitor::process(ir_variable *var, const glsl_type *var_type, - bool use_std430_as_default) -{ - unsigned record_array_count = 1; - const bool row_major = - var->data.matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR; - - enum glsl_interface_packing packing = var->get_interface_type() ? - var->get_interface_type()-> - get_internal_ifc_packing(use_std430_as_default) : - var->type->get_internal_ifc_packing(use_std430_as_default); - - const glsl_type *t = var_type; - const glsl_type *t_without_array = t->without_array(); - - /* false is always passed for the row_major parameter to the other - * processing functions because no information is available to do - * otherwise. See the warning in linker.h. - */ - if (t_without_array->is_struct() || - (t->is_array() && t->fields.array->is_array())) { - char *name = ralloc_strdup(NULL, var->name); - recursion(var->type, &name, strlen(name), row_major, NULL, packing, - false, record_array_count, NULL); - ralloc_free(name); - } else if (t_without_array->is_interface()) { - char *name = ralloc_strdup(NULL, t_without_array->name); - const glsl_struct_field *ifc_member = var->data.from_named_ifc_block ? - &t_without_array-> - fields.structure[t_without_array->field_index(var->name)] : NULL; - - recursion(t, &name, strlen(name), row_major, NULL, packing, - false, record_array_count, ifc_member); - ralloc_free(name); - } else { - this->set_record_array_count(record_array_count); - this->visit_field(t, var->name, row_major, NULL, packing, false); - } -} - -void -program_resource_visitor::recursion(const glsl_type *t, char **name, - size_t name_length, bool row_major, - const glsl_type *record_type, - const enum glsl_interface_packing packing, - bool last_field, - unsigned record_array_count, - const glsl_struct_field *named_ifc_member) -{ - /* Records need to have each field processed individually. - * - * Arrays of records need to have each array element processed - * individually, then each field of the resulting array elements processed - * individually. - */ - if (t->is_interface() && named_ifc_member) { - ralloc_asprintf_rewrite_tail(name, &name_length, ".%s", - named_ifc_member->name); - recursion(named_ifc_member->type, name, name_length, row_major, NULL, - packing, false, record_array_count, NULL); - } else if (t->is_struct() || t->is_interface()) { - if (record_type == NULL && t->is_struct()) - record_type = t; - - if (t->is_struct()) - this->enter_record(t, *name, row_major, packing); - - for (unsigned i = 0; i < t->length; i++) { - const char *field = t->fields.structure[i].name; - size_t new_length = name_length; - - if (t->is_interface() && t->fields.structure[i].offset != -1) - this->set_buffer_offset(t->fields.structure[i].offset); - - /* Append '.field' to the current variable name. */ - if (name_length == 0) { - ralloc_asprintf_rewrite_tail(name, &new_length, "%s", field); - } else { - ralloc_asprintf_rewrite_tail(name, &new_length, ".%s", field); - } - - /* The layout of structures at the top level of the block is set - * during parsing. For matrices contained in multiple levels of - * structures in the block, the inner structures have no layout. - * These cases must potentially inherit the layout from the outer - * levels. - */ - bool field_row_major = row_major; - const enum glsl_matrix_layout matrix_layout = - glsl_matrix_layout(t->fields.structure[i].matrix_layout); - if (matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } else if (matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } - - recursion(t->fields.structure[i].type, name, new_length, - field_row_major, - record_type, - packing, - (i + 1) == t->length, record_array_count, NULL); - - /* Only the first leaf-field of the record gets called with the - * record type pointer. - */ - record_type = NULL; - } - - if (t->is_struct()) { - (*name)[name_length] = '\0'; - this->leave_record(t, *name, row_major, packing); - } - } else if (t->without_array()->is_struct() || - t->without_array()->is_interface() || - (t->is_array() && t->fields.array->is_array())) { - if (record_type == NULL && t->fields.array->is_struct()) - record_type = t->fields.array; - - unsigned length = t->length; - - /* Shader storage block unsized arrays: add subscript [0] to variable - * names. - */ - if (t->is_unsized_array()) - length = 1; - - record_array_count *= length; - - for (unsigned i = 0; i < length; i++) { - size_t new_length = name_length; - - /* Append the subscript to the current variable name */ - ralloc_asprintf_rewrite_tail(name, &new_length, "[%u]", i); - - recursion(t->fields.array, name, new_length, row_major, - record_type, - packing, - (i + 1) == t->length, record_array_count, - named_ifc_member); - - /* Only the first leaf-field of the record gets called with the - * record type pointer. - */ - record_type = NULL; - } - } else { - this->set_record_array_count(record_array_count); - this->visit_field(t, *name, row_major, record_type, packing, last_field); - } -} - -void -program_resource_visitor::enter_record(const glsl_type *, const char *, bool, - const enum glsl_interface_packing) -{ -} - -void -program_resource_visitor::leave_record(const glsl_type *, const char *, bool, - const enum glsl_interface_packing) -{ -} - -void -program_resource_visitor::set_buffer_offset(unsigned) -{ -} - -void -program_resource_visitor::set_record_array_count(unsigned) -{ -} - -unsigned -link_calculate_matrix_stride(const glsl_type *matrix, bool row_major, - enum glsl_interface_packing packing) -{ - const unsigned N = matrix->is_double() ? 8 : 4; - const unsigned items = - row_major ? matrix->matrix_columns : matrix->vector_elements; - - assert(items <= 4); - - /* Matrix stride for std430 mat2xY matrices are not rounded up to - * vec4 size. - * - * Section 7.6.2.2 "Standard Uniform Block Layout" of the OpenGL 4.3 spec - * says: - * - * 2. If the member is a two- or four-component vector with components - * consuming N basic machine units, the base alignment is 2N or 4N, - * respectively. - * ... - * 4. If the member is an array of scalars or vectors, the base - * alignment and array stride are set to match the base alignment of - * a single array element, according to rules (1), (2), and (3), and - * rounded up to the base alignment of a vec4. - * ... - * 7. If the member is a row-major matrix with C columns and R rows, the - * matrix is stored identically to an array of R row vectors with C - * components each, according to rule (4). - * ... - * - * When using the std430 storage layout, shader storage blocks will be - * laid out in buffer storage identically to uniform and shader storage - * blocks using the std140 layout, except that the base alignment and - * stride of arrays of scalars and vectors in rule 4 and of structures - * in rule 9 are not rounded up a multiple of the base alignment of a - * vec4. - */ - return packing == GLSL_INTERFACE_PACKING_STD430 - ? (items < 3 ? items * N : glsl_align(items * N, 16)) - : glsl_align(items * N, 16); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_varyings.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_varyings.cpp deleted file mode 100644 index c3e194c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_varyings.cpp +++ /dev/null @@ -1,804 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 link_varyings.cpp - * - * Linker functions related specifically to linking varyings between shader - * stages. - */ - - -#include "../../mesa/main/errors.h" -#include "../../mesa/main/consts_exts.h" -#include "../../mesa/main/shader_types.h" -#include "glsl_symbol_table.h" -#include "ir.h" -#include "linker.h" -#include "link_varyings.h" - - -/** - * Get the varying type stripped of the outermost array if we're processing - * a stage whose varyings are arrays indexed by a vertex number (such as - * geometry shader inputs). - */ -static const glsl_type * -get_varying_type(const ir_variable *var, gl_shader_stage stage) -{ - const glsl_type *type = var->type; - - if (!var->data.patch && - ((var->data.mode == ir_var_shader_out && - stage == MESA_SHADER_TESS_CTRL) || - (var->data.mode == ir_var_shader_in && - (stage == MESA_SHADER_TESS_CTRL || stage == MESA_SHADER_TESS_EVAL || - stage == MESA_SHADER_GEOMETRY)))) { - assert(type->is_array()); - type = type->fields.array; - } - - return type; -} - -/** - * Validate the types and qualifiers of an output from one stage against the - * matching input to another stage. - */ -static void -cross_validate_types_and_qualifiers(const struct gl_constants *consts, - struct gl_shader_program *prog, - const ir_variable *input, - const ir_variable *output, - gl_shader_stage consumer_stage, - gl_shader_stage producer_stage) -{ - /* Check that the types match between stages. - */ - const glsl_type *type_to_match = input->type; - - /* VS -> GS, VS -> TCS, VS -> TES, TES -> GS */ - const bool extra_array_level = (producer_stage == MESA_SHADER_VERTEX && - consumer_stage != MESA_SHADER_FRAGMENT) || - consumer_stage == MESA_SHADER_GEOMETRY; - if (extra_array_level) { - assert(type_to_match->is_array()); - type_to_match = type_to_match->fields.array; - } - - if (type_to_match != output->type) { - if (output->type->is_struct()) { - /* Structures across shader stages can have different name - * and considered to match in type if and only if structure - * members match in name, type, qualification, and declaration - * order. The precision doesn’t need to match. - */ - if (!output->type->record_compare(type_to_match, - false, /* match_name */ - true, /* match_locations */ - false /* match_precision */)) { - linker_error(prog, - "%s shader output `%s' declared as struct `%s', " - "doesn't match in type with %s shader input " - "declared as struct `%s'\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - output->type->name, - _mesa_shader_stage_to_string(consumer_stage), - input->type->name); - } - } else if (!output->type->is_array() || !is_gl_identifier(output->name)) { - /* There is a bit of a special case for gl_TexCoord. This - * built-in is unsized by default. Applications that variable - * access it must redeclare it with a size. There is some - * language in the GLSL spec that implies the fragment shader - * and vertex shader do not have to agree on this size. Other - * driver behave this way, and one or two applications seem to - * rely on it. - * - * Neither declaration needs to be modified here because the array - * sizes are fixed later when update_array_sizes is called. - * - * From page 48 (page 54 of the PDF) of the GLSL 1.10 spec: - * - * "Unlike user-defined varying variables, the built-in - * varying variables don't have a strict one-to-one - * correspondence between the vertex language and the - * fragment language." - */ - linker_error(prog, - "%s shader output `%s' declared as type `%s', " - "but %s shader input declared as type `%s'\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - output->type->name, - _mesa_shader_stage_to_string(consumer_stage), - input->type->name); - return; - } - } - - /* Check that all of the qualifiers match between stages. - */ - - /* According to the OpenGL and OpenGLES GLSL specs, the centroid qualifier - * should match until OpenGL 4.3 and OpenGLES 3.1. The OpenGLES 3.0 - * conformance test suite does not verify that the qualifiers must match. - * The deqp test suite expects the opposite (OpenGLES 3.1) behavior for - * OpenGLES 3.0 drivers, so we relax the checking in all cases. - */ - if (false /* always skip the centroid check */ && - prog->GLSL_Version < (prog->IsES ? 310 : 430) && - input->data.centroid != output->data.centroid) { - linker_error(prog, - "%s shader output `%s' %s centroid qualifier, " - "but %s shader input %s centroid qualifier\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - (output->data.centroid) ? "has" : "lacks", - _mesa_shader_stage_to_string(consumer_stage), - (input->data.centroid) ? "has" : "lacks"); - return; - } - - if (input->data.sample != output->data.sample) { - linker_error(prog, - "%s shader output `%s' %s sample qualifier, " - "but %s shader input %s sample qualifier\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - (output->data.sample) ? "has" : "lacks", - _mesa_shader_stage_to_string(consumer_stage), - (input->data.sample) ? "has" : "lacks"); - return; - } - - if (input->data.patch != output->data.patch) { - linker_error(prog, - "%s shader output `%s' %s patch qualifier, " - "but %s shader input %s patch qualifier\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - (output->data.patch) ? "has" : "lacks", - _mesa_shader_stage_to_string(consumer_stage), - (input->data.patch) ? "has" : "lacks"); - return; - } - - /* The GLSL 4.20 and GLSL ES 3.00 specifications say: - * - * "As only outputs need be declared with invariant, an output from - * one shader stage will still match an input of a subsequent stage - * without the input being declared as invariant." - * - * while GLSL 4.10 says: - * - * "For variables leaving one shader and coming into another shader, - * the invariant keyword has to be used in both shaders, or a link - * error will result." - * - * and GLSL ES 1.00 section 4.6.4 "Invariance and Linking" says: - * - * "The invariance of varyings that are declared in both the vertex - * and fragment shaders must match." - */ - if (input->data.explicit_invariant != output->data.explicit_invariant && - prog->GLSL_Version < (prog->IsES ? 300 : 420)) { - linker_error(prog, - "%s shader output `%s' %s invariant qualifier, " - "but %s shader input %s invariant qualifier\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - (output->data.explicit_invariant) ? "has" : "lacks", - _mesa_shader_stage_to_string(consumer_stage), - (input->data.explicit_invariant) ? "has" : "lacks"); - return; - } - - /* GLSL >= 4.40 removes text requiring interpolation qualifiers - * to match cross stage, they must only match within the same stage. - * - * From page 84 (page 90 of the PDF) of the GLSL 4.40 spec: - * - * "It is a link-time error if, within the same stage, the interpolation - * qualifiers of variables of the same name do not match. - * - * Section 4.3.9 (Interpolation) of the GLSL ES 3.00 spec says: - * - * "When no interpolation qualifier is present, smooth interpolation - * is used." - * - * So we match variables where one is smooth and the other has no explicit - * qualifier. - */ - unsigned input_interpolation = input->data.interpolation; - unsigned output_interpolation = output->data.interpolation; - if (prog->IsES) { - if (input_interpolation == INTERP_MODE_NONE) - input_interpolation = INTERP_MODE_SMOOTH; - if (output_interpolation == INTERP_MODE_NONE) - output_interpolation = INTERP_MODE_SMOOTH; - } - if (input_interpolation != output_interpolation && - prog->GLSL_Version < 440) { - if (!consts->AllowGLSLCrossStageInterpolationMismatch) { - linker_error(prog, - "%s shader output `%s' specifies %s " - "interpolation qualifier, " - "but %s shader input specifies %s " - "interpolation qualifier\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - interpolation_string(output->data.interpolation), - _mesa_shader_stage_to_string(consumer_stage), - interpolation_string(input->data.interpolation)); - return; - } else { - linker_warning(prog, - "%s shader output `%s' specifies %s " - "interpolation qualifier, " - "but %s shader input specifies %s " - "interpolation qualifier\n", - _mesa_shader_stage_to_string(producer_stage), - output->name, - interpolation_string(output->data.interpolation), - _mesa_shader_stage_to_string(consumer_stage), - interpolation_string(input->data.interpolation)); - } - } -} - -/** - * Validate front and back color outputs against single color input - */ -static void -cross_validate_front_and_back_color(const struct gl_constants *consts, - struct gl_shader_program *prog, - const ir_variable *input, - const ir_variable *front_color, - const ir_variable *back_color, - gl_shader_stage consumer_stage, - gl_shader_stage producer_stage) -{ - if (front_color != NULL && front_color->data.assigned) - cross_validate_types_and_qualifiers(consts, prog, input, front_color, - consumer_stage, producer_stage); - - if (back_color != NULL && back_color->data.assigned) - cross_validate_types_and_qualifiers(consts, prog, input, back_color, - consumer_stage, producer_stage); -} - -static unsigned -compute_variable_location_slot(ir_variable *var, gl_shader_stage stage) -{ - unsigned location_start = VARYING_SLOT_VAR0; - - switch (stage) { - case MESA_SHADER_VERTEX: - if (var->data.mode == ir_var_shader_in) - location_start = VERT_ATTRIB_GENERIC0; - break; - case MESA_SHADER_TESS_CTRL: - case MESA_SHADER_TESS_EVAL: - if (var->data.patch) - location_start = VARYING_SLOT_PATCH0; - break; - case MESA_SHADER_FRAGMENT: - if (var->data.mode == ir_var_shader_out) - location_start = FRAG_RESULT_DATA0; - break; - default: - break; - } - - return var->data.location - location_start; -} - -struct explicit_location_info { - ir_variable *var; - bool base_type_is_integer; - unsigned base_type_bit_size; - unsigned interpolation; - bool centroid; - bool sample; - bool patch; -}; - -static bool -check_location_aliasing(struct explicit_location_info explicit_locations[][4], - ir_variable *var, - unsigned location, - unsigned component, - unsigned location_limit, - const glsl_type *type, - unsigned interpolation, - bool centroid, - bool sample, - bool patch, - gl_shader_program *prog, - gl_shader_stage stage) -{ - unsigned last_comp; - unsigned base_type_bit_size; - const glsl_type *type_without_array = type->without_array(); - const bool base_type_is_integer = - glsl_base_type_is_integer(type_without_array->base_type); - const bool is_struct = type_without_array->is_struct(); - if (is_struct) { - /* structs don't have a defined underlying base type so just treat all - * component slots as used and set the bit size to 0. If there is - * location aliasing, we'll fail anyway later. - */ - last_comp = 4; - base_type_bit_size = 0; - } else { - unsigned dmul = type_without_array->is_64bit() ? 2 : 1; - last_comp = component + type_without_array->vector_elements * dmul; - base_type_bit_size = - glsl_base_type_get_bit_size(type_without_array->base_type); - } - - while (location < location_limit) { - unsigned comp = 0; - while (comp < 4) { - struct explicit_location_info *info = - &explicit_locations[location][comp]; - - if (info->var) { - if (info->var->type->without_array()->is_struct() || is_struct) { - /* Structs cannot share location since they are incompatible - * with any other underlying numerical type. - */ - linker_error(prog, - "%s shader has multiple %sputs sharing the " - "same location that don't have the same " - "underlying numerical type. Struct variable '%s', " - "location %u\n", - _mesa_shader_stage_to_string(stage), - var->data.mode == ir_var_shader_in ? "in" : "out", - is_struct ? var->name : info->var->name, - location); - return false; - } else if (comp >= component && comp < last_comp) { - /* Component aliasing is not allowed */ - linker_error(prog, - "%s shader has multiple %sputs explicitly " - "assigned to location %d and component %d\n", - _mesa_shader_stage_to_string(stage), - var->data.mode == ir_var_shader_in ? "in" : "out", - location, comp); - return false; - } else { - /* From the OpenGL 4.60.5 spec, section 4.4.1 Input Layout - * Qualifiers, Page 67, (Location aliasing): - * - * " Further, when location aliasing, the aliases sharing the - * location must have the same underlying numerical type - * and bit width (floating-point or integer, 32-bit versus - * 64-bit, etc.) and the same auxiliary storage and - * interpolation qualification." - */ - - /* If the underlying numerical type isn't integer, implicitly - * it will be float or else we would have failed by now. - */ - if (info->base_type_is_integer != base_type_is_integer) { - linker_error(prog, - "%s shader has multiple %sputs sharing the " - "same location that don't have the same " - "underlying numerical type. Location %u " - "component %u.\n", - _mesa_shader_stage_to_string(stage), - var->data.mode == ir_var_shader_in ? - "in" : "out", location, comp); - return false; - } - - if (info->base_type_bit_size != base_type_bit_size) { - linker_error(prog, - "%s shader has multiple %sputs sharing the " - "same location that don't have the same " - "underlying numerical bit size. Location %u " - "component %u.\n", - _mesa_shader_stage_to_string(stage), - var->data.mode == ir_var_shader_in ? - "in" : "out", location, comp); - return false; - } - - if (info->interpolation != interpolation) { - linker_error(prog, - "%s shader has multiple %sputs sharing the " - "same location that don't have the same " - "interpolation qualification. Location %u " - "component %u.\n", - _mesa_shader_stage_to_string(stage), - var->data.mode == ir_var_shader_in ? - "in" : "out", location, comp); - return false; - } - - if (info->centroid != centroid || - info->sample != sample || - info->patch != patch) { - linker_error(prog, - "%s shader has multiple %sputs sharing the " - "same location that don't have the same " - "auxiliary storage qualification. Location %u " - "component %u.\n", - _mesa_shader_stage_to_string(stage), - var->data.mode == ir_var_shader_in ? - "in" : "out", location, comp); - return false; - } - } - } else if (comp >= component && comp < last_comp) { - info->var = var; - info->base_type_is_integer = base_type_is_integer; - info->base_type_bit_size = base_type_bit_size; - info->interpolation = interpolation; - info->centroid = centroid; - info->sample = sample; - info->patch = patch; - } - - comp++; - - /* We need to do some special handling for doubles as dvec3 and - * dvec4 consume two consecutive locations. We don't need to - * worry about components beginning at anything other than 0 as - * the spec does not allow this for dvec3 and dvec4. - */ - if (comp == 4 && last_comp > 4) { - last_comp = last_comp - 4; - /* Bump location index and reset the component index */ - location++; - comp = 0; - component = 0; - } - } - - location++; - } - - return true; -} - -static bool -validate_explicit_variable_location(const struct gl_constants *consts, - struct explicit_location_info explicit_locations[][4], - ir_variable *var, - gl_shader_program *prog, - gl_linked_shader *sh) -{ - const glsl_type *type = get_varying_type(var, sh->Stage); - unsigned num_elements = type->count_attribute_slots(false); - unsigned idx = compute_variable_location_slot(var, sh->Stage); - unsigned slot_limit = idx + num_elements; - - /* Vertex shader inputs and fragment shader outputs are validated in - * assign_attribute_or_color_locations() so we should not attempt to - * validate them again here. - */ - unsigned slot_max; - if (var->data.mode == ir_var_shader_out) { - assert(sh->Stage != MESA_SHADER_FRAGMENT); - slot_max = - consts->Program[sh->Stage].MaxOutputComponents / 4; - } else { - assert(var->data.mode == ir_var_shader_in); - assert(sh->Stage != MESA_SHADER_VERTEX); - slot_max = - consts->Program[sh->Stage].MaxInputComponents / 4; - } - - if (slot_limit > slot_max) { - linker_error(prog, - "Invalid location %u in %s shader\n", - idx, _mesa_shader_stage_to_string(sh->Stage)); - return false; - } - - const glsl_type *type_without_array = type->without_array(); - if (type_without_array->is_interface()) { - for (unsigned i = 0; i < type_without_array->length; i++) { - glsl_struct_field *field = &type_without_array->fields.structure[i]; - unsigned field_location = field->location - - (field->patch ? VARYING_SLOT_PATCH0 : VARYING_SLOT_VAR0); - unsigned field_slots = field->type->count_attribute_slots(false); - if (!check_location_aliasing(explicit_locations, var, - field_location, - 0, - field_location + field_slots, - field->type, - field->interpolation, - field->centroid, - field->sample, - field->patch, - prog, sh->Stage)) { - return false; - } - } - } else if (!check_location_aliasing(explicit_locations, var, - idx, var->data.location_frac, - slot_limit, type, - var->data.interpolation, - var->data.centroid, - var->data.sample, - var->data.patch, - prog, sh->Stage)) { - return false; - } - - return true; -} - -/** - * Validate explicit locations for the inputs to the first stage and the - * outputs of the last stage in a program, if those are not the VS and FS - * shaders. - */ -void -validate_first_and_last_interface_explicit_locations(const struct gl_constants *consts, - struct gl_shader_program *prog, - gl_shader_stage first_stage, - gl_shader_stage last_stage) -{ - /* VS inputs and FS outputs are validated in - * assign_attribute_or_color_locations() - */ - bool validate_first_stage = first_stage != MESA_SHADER_VERTEX; - bool validate_last_stage = last_stage != MESA_SHADER_FRAGMENT; - if (!validate_first_stage && !validate_last_stage) - return; - - struct explicit_location_info explicit_locations[MAX_VARYING][4]; - - gl_shader_stage stages[2] = { first_stage, last_stage }; - bool validate_stage[2] = { validate_first_stage, validate_last_stage }; - ir_variable_mode var_direction[2] = { ir_var_shader_in, ir_var_shader_out }; - - for (unsigned i = 0; i < 2; i++) { - if (!validate_stage[i]) - continue; - - gl_shader_stage stage = stages[i]; - - gl_linked_shader *sh = prog->_LinkedShaders[stage]; - assert(sh); - - memset(explicit_locations, 0, sizeof(explicit_locations)); - - foreach_in_list(ir_instruction, node, sh->ir) { - ir_variable *const var = node->as_variable(); - - if (var == NULL || - !var->data.explicit_location || - var->data.location < VARYING_SLOT_VAR0 || - var->data.mode != var_direction[i]) - continue; - - if (!validate_explicit_variable_location( - consts, explicit_locations, var, prog, sh)) { - return; - } - } - } -} - -/** - * Check if we should force input / output matching between shader - * interfaces. - * - * Section 4.3.4 (Inputs) of the GLSL 4.10 specifications say: - * - * "Only the input variables that are actually read need to be - * written by the previous stage; it is allowed to have - * superfluous declarations of input variables." - * - * However it's not defined anywhere as to how we should handle - * inputs that are not written in the previous stage and it's not - * clear what "actually read" means. - * - * The GLSL 4.20 spec however is much clearer: - * - * "Only the input variables that are statically read need to - * be written by the previous stage; it is allowed to have - * superfluous declarations of input variables." - * - * It also has a table that states it is an error to statically - * read an input that is not defined in the previous stage. While - * it is not an error to not statically write to the output (it - * just needs to be defined to not be an error). - * - * The text in the GLSL 4.20 spec was an attempt to clarify the - * previous spec iterations. However given the difference in spec - * and that some applications seem to depend on not erroring when - * the input is not actually read in control flow we only apply - * this rule to GLSL 4.20 and higher. GLSL 4.10 shaders have been - * seen in the wild that depend on the less strict interpretation. - */ -static bool -static_input_output_matching(struct gl_shader_program *prog) -{ - return prog->GLSL_Version >= (prog->IsES ? 0 : 420); -} - -/** - * Validate that outputs from one stage match inputs of another - */ -void -cross_validate_outputs_to_inputs(const struct gl_constants *consts, - struct gl_shader_program *prog, - gl_linked_shader *producer, - gl_linked_shader *consumer) -{ - glsl_symbol_table parameters; - struct explicit_location_info output_explicit_locations[MAX_VARYING][4] = {}; - struct explicit_location_info input_explicit_locations[MAX_VARYING][4] = {}; - - /* Find all shader outputs in the "producer" stage. - */ - foreach_in_list(ir_instruction, node, producer->ir) { - ir_variable *const var = node->as_variable(); - - if (var == NULL || var->data.mode != ir_var_shader_out) - continue; - - if (!var->data.explicit_location - || var->data.location < VARYING_SLOT_VAR0) - parameters.add_variable(var); - else { - /* User-defined varyings with explicit locations are handled - * differently because they do not need to have matching names. - */ - if (!validate_explicit_variable_location(consts, - output_explicit_locations, - var, prog, producer)) { - return; - } - } - } - - - /* Find all shader inputs in the "consumer" stage. Any variables that have - * matching outputs already in the symbol table must have the same type and - * qualifiers. - * - * Exception: if the consumer is the geometry shader, then the inputs - * should be arrays and the type of the array element should match the type - * of the corresponding producer output. - */ - foreach_in_list(ir_instruction, node, consumer->ir) { - ir_variable *const input = node->as_variable(); - - if (input == NULL || input->data.mode != ir_var_shader_in) - continue; - - if (strcmp(input->name, "gl_Color") == 0 && input->data.used) { - const ir_variable *const front_color = - parameters.get_variable("gl_FrontColor"); - - const ir_variable *const back_color = - parameters.get_variable("gl_BackColor"); - - cross_validate_front_and_back_color(consts, prog, input, - front_color, back_color, - consumer->Stage, producer->Stage); - } else if (strcmp(input->name, "gl_SecondaryColor") == 0 && input->data.used) { - const ir_variable *const front_color = - parameters.get_variable("gl_FrontSecondaryColor"); - - const ir_variable *const back_color = - parameters.get_variable("gl_BackSecondaryColor"); - - cross_validate_front_and_back_color(consts, prog, input, - front_color, back_color, - consumer->Stage, producer->Stage); - } else { - /* The rules for connecting inputs and outputs change in the presence - * of explicit locations. In this case, we no longer care about the - * names of the variables. Instead, we care only about the - * explicitly assigned location. - */ - ir_variable *output = NULL; - if (input->data.explicit_location - && input->data.location >= VARYING_SLOT_VAR0) { - - const glsl_type *type = get_varying_type(input, consumer->Stage); - unsigned num_elements = type->count_attribute_slots(false); - unsigned idx = - compute_variable_location_slot(input, consumer->Stage); - unsigned slot_limit = idx + num_elements; - - if (!validate_explicit_variable_location(consts, - input_explicit_locations, - input, prog, consumer)) { - return; - } - - while (idx < slot_limit) { - if (idx >= MAX_VARYING) { - linker_error(prog, - "Invalid location %u in %s shader\n", idx, - _mesa_shader_stage_to_string(consumer->Stage)); - return; - } - - output = output_explicit_locations[idx][input->data.location_frac].var; - - if (output == NULL) { - /* A linker failure should only happen when there is no - * output declaration and there is Static Use of the - * declared input. - */ - if (input->data.used && static_input_output_matching(prog)) { - linker_error(prog, - "%s shader input `%s' with explicit location " - "has no matching output\n", - _mesa_shader_stage_to_string(consumer->Stage), - input->name); - break; - } - } else if (input->data.location != output->data.location) { - linker_error(prog, - "%s shader input `%s' with explicit location " - "has no matching output\n", - _mesa_shader_stage_to_string(consumer->Stage), - input->name); - break; - } - idx++; - } - } else { - output = parameters.get_variable(input->name); - } - - if (output != NULL) { - /* Interface blocks have their own validation elsewhere so don't - * try validating them here. - */ - if (!(input->get_interface_type() && - output->get_interface_type())) - cross_validate_types_and_qualifiers(consts, prog, input, output, - consumer->Stage, - producer->Stage); - } else { - /* Check for input vars with unmatched output vars in prev stage - * taking into account that interface blocks could have a matching - * output but with different name, so we ignore them. - */ - assert(!input->data.assigned); - if (input->data.used && !input->get_interface_type() && - !input->data.explicit_location && - static_input_output_matching(prog)) - linker_error(prog, - "%s shader input `%s' " - "has no matching output in the previous stage\n", - _mesa_shader_stage_to_string(consumer->Stage), - input->name); - } - } - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_varyings.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_varyings.h deleted file mode 100644 index 90fa922..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/link_varyings.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_LINK_VARYINGS_H -#define GLSL_LINK_VARYINGS_H - -/** - * \file link_varyings.h - * - * Linker functions related specifically to linking varyings between shader - * stages. - */ - -struct gl_shader_program; - -void -validate_first_and_last_interface_explicit_locations(const struct gl_constants *consts, - struct gl_shader_program *prog, - gl_shader_stage first, - gl_shader_stage last); - -void -cross_validate_outputs_to_inputs(const struct gl_constants *consts, - struct gl_shader_program *prog, - gl_linked_shader *producer, - gl_linked_shader *consumer); - -#endif /* GLSL_LINK_VARYINGS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker.cpp deleted file mode 100644 index cf145fd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker.cpp +++ /dev/null @@ -1,3577 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 linker.cpp - * GLSL linker implementation - * - * Given a set of shaders that are to be linked to generate a final program, - * there are three distinct stages. - * - * In the first stage shaders are partitioned into groups based on the shader - * type. All shaders of a particular type (e.g., vertex shaders) are linked - * together. - * - * - Undefined references in each shader are resolve to definitions in - * another shader. - * - Types and qualifiers of uniforms, outputs, and global variables defined - * in multiple shaders with the same name are verified to be the same. - * - Initializers for uniforms and global variables defined - * in multiple shaders with the same name are verified to be the same. - * - * The result, in the terminology of the GLSL spec, is a set of shader - * executables for each processing unit. - * - * After the first stage is complete, a series of semantic checks are performed - * on each of the shader executables. - * - * - Each shader executable must define a \c main function. - * - Each vertex shader executable must write to \c gl_Position. - * - Each fragment shader executable must write to either \c gl_FragData or - * \c gl_FragColor. - * - * In the final stage individual shader executables are linked to create a - * complete exectuable. - * - * - Types of uniforms defined in multiple shader stages with the same name - * are verified to be the same. - * - Initializers for uniforms defined in multiple shader stages with the - * same name are verified to be the same. - * - Types and qualifiers of outputs defined in one stage are verified to - * be the same as the types and qualifiers of inputs defined with the same - * name in a later stage. - * - * \author Ian Romanick - */ - -#include -#include "../../util/strndup.h" -#include "glsl_symbol_table.h" -#include "glsl_parser_extras.h" -#include "ir.h" -#include "../nir/nir.h" -#include "program.h" -#include "../../mesa/program/prog_instruction.h" -#include "program.h" -#include "../../util/mesa-sha1.h" -#include "../../util/set.h" -#include "string_to_uint_map.h" -#include "linker.h" -#include "linker_util.h" -#include "link_varyings.h" -#include "ir_optimization.h" -#include "ir_rvalue_visitor.h" -#include "ir_uniform.h" -#include "builtin_functions.h" - -#include "../../util/u_string.h" -#include "../../util/u_math.h" - - -#include "../../mesa/main/shaderobj.h" -#include "../../mesa/main/enums.h" -#include "../../mesa/main/mtypes.h" -#include "../../mesa/main/context.h" - - -namespace { - -struct find_variable { - const char *name; - bool found; - - find_variable(const char *name) : name(name), found(false) {} -}; - -/** - * Visitor that determines whether or not a variable is ever written. - * Note: this is only considering if the variable is statically written - * (= regardless of the runtime flow of control) - * - * Use \ref find_assignments for convenience. - */ -class find_assignment_visitor : public ir_hierarchical_visitor { -public: - find_assignment_visitor(unsigned num_vars, - find_variable * const *vars) - : num_variables(num_vars), num_found(0), variables(vars) - { - } - - virtual ir_visitor_status visit_enter(ir_assignment *ir) - { - ir_variable *const var = ir->lhs->variable_referenced(); - - return check_variable_name(var->name); - } - - virtual ir_visitor_status visit_enter(ir_call *ir) - { - foreach_two_lists(formal_node, &ir->callee->parameters, - actual_node, &ir->actual_parameters) { - ir_rvalue *param_rval = (ir_rvalue *) actual_node; - ir_variable *sig_param = (ir_variable *) formal_node; - - if (sig_param->data.mode == ir_var_function_out || - sig_param->data.mode == ir_var_function_inout) { - ir_variable *var = param_rval->variable_referenced(); - if (var && check_variable_name(var->name) == visit_stop) - return visit_stop; - } - } - - if (ir->return_deref != NULL) { - ir_variable *const var = ir->return_deref->variable_referenced(); - - if (check_variable_name(var->name) == visit_stop) - return visit_stop; - } - - return visit_continue_with_parent; - } - -private: - ir_visitor_status check_variable_name(const char *name) - { - for (unsigned i = 0; i < num_variables; ++i) { - if (strcmp(variables[i]->name, name) == 0) { - if (!variables[i]->found) { - variables[i]->found = true; - - assert(num_found < num_variables); - if (++num_found == num_variables) - return visit_stop; - } - break; - } - } - - return visit_continue_with_parent; - } - -private: - unsigned num_variables; /**< Number of variables to find */ - unsigned num_found; /**< Number of variables already found */ - find_variable * const *variables; /**< Variables to find */ -}; - -/** - * Determine whether or not any of NULL-terminated list of variables is ever - * written to. - */ -static void -find_assignments(exec_list *ir, find_variable * const *vars) -{ - unsigned num_variables = 0; - - for (find_variable * const *v = vars; *v; ++v) - num_variables++; - - find_assignment_visitor visitor(num_variables, vars); - visitor.run(ir); -} - -/** - * Determine whether or not the given variable is ever written to. - */ -static void -find_assignments(exec_list *ir, find_variable *var) -{ - find_assignment_visitor visitor(1, &var); - visitor.run(ir); -} - -/** - * Visitor that determines whether or not a variable is ever read. - */ -class find_deref_visitor : public ir_hierarchical_visitor { -public: - find_deref_visitor(const char *name) - : name(name), found(false) - { - /* empty */ - } - - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - if (strcmp(this->name, ir->var->name) == 0) { - this->found = true; - return visit_stop; - } - - return visit_continue; - } - - bool variable_found() const - { - return this->found; - } - -private: - const char *name; /**< Find writes to a variable with this name. */ - bool found; /**< Was a write to the variable found? */ -}; - - -/** - * A visitor helper that provides methods for updating the types of - * ir_dereferences. Classes that update variable types (say, updating - * array sizes) will want to use this so that dereference types stay in sync. - */ -class deref_type_updater : public ir_hierarchical_visitor { -public: - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - ir->type = ir->var->type; - return visit_continue; - } - - virtual ir_visitor_status visit_leave(ir_dereference_array *ir) - { - const glsl_type *const vt = ir->array->type; - if (vt->is_array()) - ir->type = vt->fields.array; - return visit_continue; - } - - virtual ir_visitor_status visit_leave(ir_dereference_record *ir) - { - ir->type = ir->record->type->fields.structure[ir->field_idx].type; - return visit_continue; - } -}; - - -class array_resize_visitor : public deref_type_updater { -public: - using deref_type_updater::visit; - - unsigned num_vertices; - gl_shader_program *prog; - gl_shader_stage stage; - - array_resize_visitor(unsigned num_vertices, - gl_shader_program *prog, - gl_shader_stage stage) - { - this->num_vertices = num_vertices; - this->prog = prog; - this->stage = stage; - } - - virtual ~array_resize_visitor() - { - /* empty */ - } - - virtual ir_visitor_status visit(ir_variable *var) - { - if (!var->type->is_array() || var->data.mode != ir_var_shader_in || - var->data.patch) - return visit_continue; - - unsigned size = var->type->length; - - if (stage == MESA_SHADER_GEOMETRY) { - /* Generate a link error if the shader has declared this array with - * an incorrect size. - */ - if (!var->data.implicit_sized_array && - size && size != this->num_vertices) { - linker_error(this->prog, "size of array %s declared as %u, " - "but number of input vertices is %u\n", - var->name, size, this->num_vertices); - return visit_continue; - } - - /* Generate a link error if the shader attempts to access an input - * array using an index too large for its actual size assigned at - * link time. - */ - if (var->data.max_array_access >= (int)this->num_vertices) { - linker_error(this->prog, "%s shader accesses element %i of " - "%s, but only %i input vertices\n", - _mesa_shader_stage_to_string(this->stage), - var->data.max_array_access, var->name, this->num_vertices); - return visit_continue; - } - } - - var->type = glsl_type::get_array_instance(var->type->fields.array, - this->num_vertices); - var->data.max_array_access = this->num_vertices - 1; - - return visit_continue; - } -}; - -class array_length_to_const_visitor : public ir_rvalue_visitor { -public: - array_length_to_const_visitor() - { - this->progress = false; - } - - virtual ~array_length_to_const_visitor() - { - /* empty */ - } - - bool progress; - - virtual void handle_rvalue(ir_rvalue **rvalue) - { - if (*rvalue == NULL || (*rvalue)->ir_type != ir_type_expression) - return; - - ir_expression *expr = (*rvalue)->as_expression(); - if (expr) { - if (expr->operation == ir_unop_implicitly_sized_array_length) { - assert(!expr->operands[0]->type->is_unsized_array()); - ir_constant *constant = new(expr) - ir_constant(expr->operands[0]->type->array_size()); - if (constant) { - *rvalue = constant; - } - } - } - } -}; - -/** - * Visitor that determines the highest stream id to which a (geometry) shader - * emits vertices. It also checks whether End{Stream}Primitive is ever called. - */ -class find_emit_vertex_visitor : public ir_hierarchical_visitor { -public: - find_emit_vertex_visitor(int max_allowed) - : max_stream_allowed(max_allowed), - invalid_stream_id(0), - invalid_stream_id_from_emit_vertex(false), - end_primitive_found(false), - used_streams(0) - { - /* empty */ - } - - virtual ir_visitor_status visit_leave(ir_emit_vertex *ir) - { - int stream_id = ir->stream_id(); - - if (stream_id < 0) { - invalid_stream_id = stream_id; - invalid_stream_id_from_emit_vertex = true; - return visit_stop; - } - - if (stream_id > max_stream_allowed) { - invalid_stream_id = stream_id; - invalid_stream_id_from_emit_vertex = true; - return visit_stop; - } - - used_streams |= 1 << stream_id; - - return visit_continue; - } - - virtual ir_visitor_status visit_leave(ir_end_primitive *ir) - { - end_primitive_found = true; - - int stream_id = ir->stream_id(); - - if (stream_id < 0) { - invalid_stream_id = stream_id; - invalid_stream_id_from_emit_vertex = false; - return visit_stop; - } - - if (stream_id > max_stream_allowed) { - invalid_stream_id = stream_id; - invalid_stream_id_from_emit_vertex = false; - return visit_stop; - } - - used_streams |= 1 << stream_id; - - return visit_continue; - } - - bool error() - { - return invalid_stream_id != 0; - } - - const char *error_func() - { - return invalid_stream_id_from_emit_vertex ? - "EmitStreamVertex" : "EndStreamPrimitive"; - } - - int error_stream() - { - return invalid_stream_id; - } - - unsigned active_stream_mask() - { - return used_streams; - } - - bool uses_end_primitive() - { - return end_primitive_found; - } - -private: - int max_stream_allowed; - int invalid_stream_id; - bool invalid_stream_id_from_emit_vertex; - bool end_primitive_found; - unsigned used_streams; -}; - -} /* anonymous namespace */ - -void -linker_error(gl_shader_program *prog, const char *fmt, ...) -{ - va_list ap; - - ralloc_strcat(&prog->data->InfoLog, "error: "); - va_start(ap, fmt); - ralloc_vasprintf_append(&prog->data->InfoLog, fmt, ap); - va_end(ap); - - prog->data->LinkStatus = LINKING_FAILURE; -} - - -void -linker_warning(gl_shader_program *prog, const char *fmt, ...) -{ - va_list ap; - - ralloc_strcat(&prog->data->InfoLog, "warning: "); - va_start(ap, fmt); - ralloc_vasprintf_append(&prog->data->InfoLog, fmt, ap); - va_end(ap); - -} - - -void -link_invalidate_variable_locations(exec_list *ir) -{ - foreach_in_list(ir_instruction, node, ir) { - ir_variable *const var = node->as_variable(); - - if (var == NULL) - continue; - - /* Only assign locations for variables that lack an explicit location. - * Explicit locations are set for all built-in variables, generic vertex - * shader inputs (via layout(location=...)), and generic fragment shader - * outputs (also via layout(location=...)). - */ - if (!var->data.explicit_location) { - var->data.location = -1; - var->data.location_frac = 0; - } - } -} - - -/** - * Set clip_distance_array_size based and cull_distance_array_size on the given - * shader. - * - * Also check for errors based on incorrect usage of gl_ClipVertex and - * gl_ClipDistance and gl_CullDistance. - * Additionally test whether the arrays gl_ClipDistance and gl_CullDistance - * exceed the maximum size defined by gl_MaxCombinedClipAndCullDistances. - * - * Return false if an error was reported. - */ -static void -analyze_clip_cull_usage(struct gl_shader_program *prog, - struct gl_linked_shader *shader, - const struct gl_constants *consts, - struct shader_info *info) -{ - if (consts->DoDCEBeforeClipCullAnalysis) { - /* Remove dead functions to avoid raising an error (eg: dead function - * writes to gl_ClipVertex, and main() writes to gl_ClipDistance). - */ - do_dead_functions(shader->ir); - } - - info->clip_distance_array_size = 0; - info->cull_distance_array_size = 0; - - if (prog->GLSL_Version >= (prog->IsES ? 300 : 130)) { - /* From section 7.1 (Vertex Shader Special Variables) of the - * GLSL 1.30 spec: - * - * "It is an error for a shader to statically write both - * gl_ClipVertex and gl_ClipDistance." - * - * This does not apply to GLSL ES shaders, since GLSL ES defines neither - * gl_ClipVertex nor gl_ClipDistance. However with - * GL_EXT_clip_cull_distance, this functionality is exposed in ES 3.0. - */ - find_variable gl_ClipDistance("gl_ClipDistance"); - find_variable gl_CullDistance("gl_CullDistance"); - find_variable gl_ClipVertex("gl_ClipVertex"); - find_variable * const variables[] = { - &gl_ClipDistance, - &gl_CullDistance, - !prog->IsES ? &gl_ClipVertex : NULL, - NULL - }; - find_assignments(shader->ir, variables); - - /* From the ARB_cull_distance spec: - * - * It is a compile-time or link-time error for the set of shaders forming - * a program to statically read or write both gl_ClipVertex and either - * gl_ClipDistance or gl_CullDistance. - * - * This does not apply to GLSL ES shaders, since GLSL ES doesn't define - * gl_ClipVertex. - */ - if (!prog->IsES) { - if (gl_ClipVertex.found && gl_ClipDistance.found) { - linker_error(prog, "%s shader writes to both `gl_ClipVertex' " - "and `gl_ClipDistance'\n", - _mesa_shader_stage_to_string(shader->Stage)); - return; - } - if (gl_ClipVertex.found && gl_CullDistance.found) { - linker_error(prog, "%s shader writes to both `gl_ClipVertex' " - "and `gl_CullDistance'\n", - _mesa_shader_stage_to_string(shader->Stage)); - return; - } - } - - if (gl_ClipDistance.found) { - ir_variable *clip_distance_var = - shader->symbols->get_variable("gl_ClipDistance"); - assert(clip_distance_var); - info->clip_distance_array_size = clip_distance_var->type->length; - } - if (gl_CullDistance.found) { - ir_variable *cull_distance_var = - shader->symbols->get_variable("gl_CullDistance"); - assert(cull_distance_var); - info->cull_distance_array_size = cull_distance_var->type->length; - } - /* From the ARB_cull_distance spec: - * - * It is a compile-time or link-time error for the set of shaders forming - * a program to have the sum of the sizes of the gl_ClipDistance and - * gl_CullDistance arrays to be larger than - * gl_MaxCombinedClipAndCullDistances. - */ - if ((uint32_t)(info->clip_distance_array_size + info->cull_distance_array_size) > - consts->MaxClipPlanes) { - linker_error(prog, "%s shader: the combined size of " - "'gl_ClipDistance' and 'gl_CullDistance' size cannot " - "be larger than " - "gl_MaxCombinedClipAndCullDistances (%u)", - _mesa_shader_stage_to_string(shader->Stage), - consts->MaxClipPlanes); - } - } -} - - -/** - * Verify that a vertex shader executable meets all semantic requirements. - * - * Also sets info.clip_distance_array_size and - * info.cull_distance_array_size as a side effect. - * - * \param shader Vertex shader executable to be verified - */ -static void -validate_vertex_shader_executable(struct gl_shader_program *prog, - struct gl_linked_shader *shader, - const struct gl_constants *consts) -{ - if (shader == NULL) - return; - - /* From the GLSL 1.10 spec, page 48: - * - * "The variable gl_Position is available only in the vertex - * language and is intended for writing the homogeneous vertex - * position. All executions of a well-formed vertex shader - * executable must write a value into this variable. [...] The - * variable gl_Position is available only in the vertex - * language and is intended for writing the homogeneous vertex - * position. All executions of a well-formed vertex shader - * executable must write a value into this variable." - * - * while in GLSL 1.40 this text is changed to: - * - * "The variable gl_Position is available only in the vertex - * language and is intended for writing the homogeneous vertex - * position. It can be written at any time during shader - * execution. It may also be read back by a vertex shader - * after being written. This value will be used by primitive - * assembly, clipping, culling, and other fixed functionality - * operations, if present, that operate on primitives after - * vertex processing has occurred. Its value is undefined if - * the vertex shader executable does not write gl_Position." - * - * All GLSL ES Versions are similar to GLSL 1.40--failing to write to - * gl_Position is not an error. - */ - if (prog->GLSL_Version < (prog->IsES ? 300 : 140)) { - find_variable gl_Position("gl_Position"); - find_assignments(shader->ir, &gl_Position); - if (!gl_Position.found) { - if (prog->IsES) { - linker_warning(prog, - "vertex shader does not write to `gl_Position'. " - "Its value is undefined. \n"); - } else { - linker_error(prog, - "vertex shader does not write to `gl_Position'. \n"); - } - return; - } - } - - analyze_clip_cull_usage(prog, shader, consts, &shader->Program->info); -} - -static void -validate_tess_eval_shader_executable(struct gl_shader_program *prog, - struct gl_linked_shader *shader, - const struct gl_constants *consts) -{ - if (shader == NULL) - return; - - analyze_clip_cull_usage(prog, shader, consts, &shader->Program->info); -} - - -/** - * Verify that a fragment shader executable meets all semantic requirements - * - * \param shader Fragment shader executable to be verified - */ -static void -validate_fragment_shader_executable(struct gl_shader_program *prog, - struct gl_linked_shader *shader) -{ - if (shader == NULL) - return; - - find_variable gl_FragColor("gl_FragColor"); - find_variable gl_FragData("gl_FragData"); - find_variable * const variables[] = { &gl_FragColor, &gl_FragData, NULL }; - find_assignments(shader->ir, variables); - - if (gl_FragColor.found && gl_FragData.found) { - linker_error(prog, "fragment shader writes to both " - "`gl_FragColor' and `gl_FragData'\n"); - } -} - -/** - * Verify that a geometry shader executable meets all semantic requirements - * - * Also sets prog->Geom.VerticesIn, and info.clip_distance_array_sizeand - * info.cull_distance_array_size as a side effect. - * - * \param shader Geometry shader executable to be verified - */ -static void -validate_geometry_shader_executable(struct gl_shader_program *prog, - struct gl_linked_shader *shader, - const struct gl_constants *consts) -{ - if (shader == NULL) - return; - - unsigned num_vertices = - vertices_per_prim(shader->Program->info.gs.input_primitive); - prog->Geom.VerticesIn = num_vertices; - - analyze_clip_cull_usage(prog, shader, consts, &shader->Program->info); -} - -/** - * Check if geometry shaders emit to non-zero streams and do corresponding - * validations. - */ -static void -validate_geometry_shader_emissions(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - struct gl_linked_shader *sh = prog->_LinkedShaders[MESA_SHADER_GEOMETRY]; - - if (sh != NULL) { - find_emit_vertex_visitor emit_vertex(consts->MaxVertexStreams - 1); - emit_vertex.run(sh->ir); - if (emit_vertex.error()) { - linker_error(prog, "Invalid call %s(%d). Accepted values for the " - "stream parameter are in the range [0, %d].\n", - emit_vertex.error_func(), - emit_vertex.error_stream(), - consts->MaxVertexStreams - 1); - } - prog->Geom.ActiveStreamMask = emit_vertex.active_stream_mask(); - prog->Geom.UsesEndPrimitive = emit_vertex.uses_end_primitive(); - - /* From the ARB_gpu_shader5 spec: - * - * "Multiple vertex streams are supported only if the output primitive - * type is declared to be "points". A program will fail to link if it - * contains a geometry shader calling EmitStreamVertex() or - * EndStreamPrimitive() if its output primitive type is not "points". - * - * However, in the same spec: - * - * "The function EmitVertex() is equivalent to calling EmitStreamVertex() - * with set to zero." - * - * And: - * - * "The function EndPrimitive() is equivalent to calling - * EndStreamPrimitive() with set to zero." - * - * Since we can call EmitVertex() and EndPrimitive() when we output - * primitives other than points, calling EmitStreamVertex(0) or - * EmitEndPrimitive(0) should not produce errors. This it also what Nvidia - * does. We can use prog->Geom.ActiveStreamMask to check whether only the - * first (zero) stream is active. - * stream. - */ - if (prog->Geom.ActiveStreamMask & ~(1 << 0) && - sh->Program->info.gs.output_primitive != GL_POINTS) { - linker_error(prog, "EmitStreamVertex(n) and EndStreamPrimitive(n) " - "with n>0 requires point output\n"); - } - } -} - -bool -validate_intrastage_arrays(struct gl_shader_program *prog, - ir_variable *const var, - ir_variable *const existing, - bool match_precision) -{ - /* Consider the types to be "the same" if both types are arrays - * of the same type and one of the arrays is implicitly sized. - * In addition, set the type of the linked variable to the - * explicitly sized array. - */ - if (var->type->is_array() && existing->type->is_array()) { - const glsl_type *no_array_var = var->type->fields.array; - const glsl_type *no_array_existing = existing->type->fields.array; - bool type_matches; - - type_matches = (match_precision ? - no_array_var == no_array_existing : - no_array_var->compare_no_precision(no_array_existing)); - - if (type_matches && - ((var->type->length == 0)|| (existing->type->length == 0))) { - if (var->type->length != 0) { - if ((int)var->type->length <= existing->data.max_array_access) { - linker_error(prog, "%s `%s' declared as type " - "`%s' but outermost dimension has an index" - " of `%i'\n", - mode_string(var), - var->name, var->type->name, - existing->data.max_array_access); - } - existing->type = var->type; - return true; - } else if (existing->type->length != 0) { - if((int)existing->type->length <= var->data.max_array_access && - !existing->data.from_ssbo_unsized_array) { - linker_error(prog, "%s `%s' declared as type " - "`%s' but outermost dimension has an index" - " of `%i'\n", - mode_string(var), - var->name, existing->type->name, - var->data.max_array_access); - } - return true; - } - } - } - return false; -} - - -/** - * Perform validation of global variables used across multiple shaders - */ -static void -cross_validate_globals(const struct gl_constants *consts, - struct gl_shader_program *prog, - struct exec_list *ir, glsl_symbol_table *variables, - bool uniforms_only) -{ - foreach_in_list(ir_instruction, node, ir) { - ir_variable *const var = node->as_variable(); - - if (var == NULL) - continue; - - if (uniforms_only && (var->data.mode != ir_var_uniform && var->data.mode != ir_var_shader_storage)) - continue; - - /* don't cross validate subroutine uniforms */ - if (var->type->contains_subroutine()) - continue; - - /* Don't cross validate interface instances. These are only relevant - * inside a shader. The cross validation is done at the Interface Block - * name level. - */ - if (var->is_interface_instance()) - continue; - - /* Don't cross validate temporaries that are at global scope. These - * will eventually get pulled into the shaders 'main'. - */ - if (var->data.mode == ir_var_temporary) - continue; - - /* If a global with this name has already been seen, verify that the - * new instance has the same type. In addition, if the globals have - * initializers, the values of the initializers must be the same. - */ - ir_variable *const existing = variables->get_variable(var->name); - if (existing != NULL) { - /* Check if types match. */ - if (var->type != existing->type) { - if (!validate_intrastage_arrays(prog, var, existing)) { - /* If it is an unsized array in a Shader Storage Block, - * two different shaders can access to different elements. - * Because of that, they might be converted to different - * sized arrays, then check that they are compatible but - * ignore the array size. - */ - if (!(var->data.mode == ir_var_shader_storage && - var->data.from_ssbo_unsized_array && - existing->data.mode == ir_var_shader_storage && - existing->data.from_ssbo_unsized_array && - var->type->gl_type == existing->type->gl_type)) { - linker_error(prog, "%s `%s' declared as type " - "`%s' and type `%s'\n", - mode_string(var), - var->name, var->type->name, - existing->type->name); - return; - } - } - } - - if (var->data.explicit_location) { - if (existing->data.explicit_location - && (var->data.location != existing->data.location)) { - linker_error(prog, "explicit locations for %s " - "`%s' have differing values\n", - mode_string(var), var->name); - return; - } - - if (var->data.location_frac != existing->data.location_frac) { - linker_error(prog, "explicit components for %s `%s' have " - "differing values\n", mode_string(var), var->name); - return; - } - - existing->data.location = var->data.location; - existing->data.explicit_location = true; - } else { - /* Check if uniform with implicit location was marked explicit - * by earlier shader stage. If so, mark it explicit in this stage - * too to make sure later processing does not treat it as - * implicit one. - */ - if (existing->data.explicit_location) { - var->data.location = existing->data.location; - var->data.explicit_location = true; - } - } - - /* From the GLSL 4.20 specification: - * "A link error will result if two compilation units in a program - * specify different integer-constant bindings for the same - * opaque-uniform name. However, it is not an error to specify a - * binding on some but not all declarations for the same name" - */ - if (var->data.explicit_binding) { - if (existing->data.explicit_binding && - var->data.binding != existing->data.binding) { - linker_error(prog, "explicit bindings for %s " - "`%s' have differing values\n", - mode_string(var), var->name); - return; - } - - existing->data.binding = var->data.binding; - existing->data.explicit_binding = true; - } - - if (var->type->contains_atomic() && - var->data.offset != existing->data.offset) { - linker_error(prog, "offset specifications for %s " - "`%s' have differing values\n", - mode_string(var), var->name); - return; - } - - /* Validate layout qualifiers for gl_FragDepth. - * - * From the AMD/ARB_conservative_depth specs: - * - * "If gl_FragDepth is redeclared in any fragment shader in a - * program, it must be redeclared in all fragment shaders in - * that program that have static assignments to - * gl_FragDepth. All redeclarations of gl_FragDepth in all - * fragment shaders in a single program must have the same set - * of qualifiers." - */ - if (strcmp(var->name, "gl_FragDepth") == 0) { - bool layout_declared = var->data.depth_layout != ir_depth_layout_none; - bool layout_differs = - var->data.depth_layout != existing->data.depth_layout; - - if (layout_declared && layout_differs) { - linker_error(prog, - "All redeclarations of gl_FragDepth in all " - "fragment shaders in a single program must have " - "the same set of qualifiers.\n"); - } - - if (var->data.used && layout_differs) { - linker_error(prog, - "If gl_FragDepth is redeclared with a layout " - "qualifier in any fragment shader, it must be " - "redeclared with the same layout qualifier in " - "all fragment shaders that have assignments to " - "gl_FragDepth\n"); - } - } - - /* Page 35 (page 41 of the PDF) of the GLSL 4.20 spec says: - * - * "If a shared global has multiple initializers, the - * initializers must all be constant expressions, and they - * must all have the same value. Otherwise, a link error will - * result. (A shared global having only one initializer does - * not require that initializer to be a constant expression.)" - * - * Previous to 4.20 the GLSL spec simply said that initializers - * must have the same value. In this case of non-constant - * initializers, this was impossible to determine. As a result, - * no vendor actually implemented that behavior. The 4.20 - * behavior matches the implemented behavior of at least one other - * vendor, so we'll implement that for all GLSL versions. - * If (at least) one of these constant expressions is implicit, - * because it was added by glsl_zero_init, we skip the verification. - */ - if (var->constant_initializer != NULL) { - if (existing->constant_initializer != NULL && - !existing->data.is_implicit_initializer && - !var->data.is_implicit_initializer) { - if (!var->constant_initializer->has_value(existing->constant_initializer)) { - linker_error(prog, "initializers for %s " - "`%s' have differing values\n", - mode_string(var), var->name); - return; - } - } else { - /* If the first-seen instance of a particular uniform did - * not have an initializer but a later instance does, - * replace the former with the later. - */ - if (!var->data.is_implicit_initializer) - variables->replace_variable(existing->name, var); - } - } - - if (var->data.has_initializer) { - if (existing->data.has_initializer - && (var->constant_initializer == NULL - || existing->constant_initializer == NULL)) { - linker_error(prog, - "shared global variable `%s' has multiple " - "non-constant initializers.\n", - var->name); - return; - } - } - - if (existing->data.explicit_invariant != var->data.explicit_invariant) { - linker_error(prog, "declarations for %s `%s' have " - "mismatching invariant qualifiers\n", - mode_string(var), var->name); - return; - } - if (existing->data.centroid != var->data.centroid) { - linker_error(prog, "declarations for %s `%s' have " - "mismatching centroid qualifiers\n", - mode_string(var), var->name); - return; - } - if (existing->data.sample != var->data.sample) { - linker_error(prog, "declarations for %s `%s` have " - "mismatching sample qualifiers\n", - mode_string(var), var->name); - return; - } - if (existing->data.image_format != var->data.image_format) { - linker_error(prog, "declarations for %s `%s` have " - "mismatching image format qualifiers\n", - mode_string(var), var->name); - return; - } - - /* Check the precision qualifier matches for uniform variables on - * GLSL ES. - */ - if (!consts->AllowGLSLRelaxedES && - prog->IsES && !var->get_interface_type() && - existing->data.precision != var->data.precision) { - if ((existing->data.used && var->data.used) || - prog->GLSL_Version >= 300) { - linker_error(prog, "declarations for %s `%s` have " - "mismatching precision qualifiers\n", - mode_string(var), var->name); - return; - } else { - linker_warning(prog, "declarations for %s `%s` have " - "mismatching precision qualifiers\n", - mode_string(var), var->name); - } - } - - /* In OpenGL GLSL 3.20 spec, section 4.3.9: - * - * "It is a link-time error if any particular shader interface - * contains: - * - * - two different blocks, each having no instance name, and each - * having a member of the same name, or - * - * - a variable outside a block, and a block with no instance name, - * where the variable has the same name as a member in the block." - */ - const glsl_type *var_itype = var->get_interface_type(); - const glsl_type *existing_itype = existing->get_interface_type(); - if (var_itype != existing_itype) { - if (!var_itype || !existing_itype) { - linker_error(prog, "declarations for %s `%s` are inside block " - "`%s` and outside a block", - mode_string(var), var->name, - var_itype ? var_itype->name : existing_itype->name); - return; - } else if (strcmp(var_itype->name, existing_itype->name) != 0) { - linker_error(prog, "declarations for %s `%s` are inside blocks " - "`%s` and `%s`", - mode_string(var), var->name, - existing_itype->name, - var_itype->name); - return; - } - } - } else - variables->add_variable(var); - } -} - - -/** - * Perform validation of uniforms used across multiple shader stages - */ -static void -cross_validate_uniforms(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - glsl_symbol_table variables; - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i] == NULL) - continue; - - cross_validate_globals(consts, prog, prog->_LinkedShaders[i]->ir, - &variables, true); - } -} - -/** - * Accumulates the array of buffer blocks and checks that all definitions of - * blocks agree on their contents. - */ -static bool -interstage_cross_validate_uniform_blocks(struct gl_shader_program *prog, - bool validate_ssbo) -{ - int *ifc_blk_stage_idx[MESA_SHADER_STAGES]; - struct gl_uniform_block *blks = NULL; - unsigned *num_blks = validate_ssbo ? &prog->data->NumShaderStorageBlocks : - &prog->data->NumUniformBlocks; - - unsigned max_num_buffer_blocks = 0; - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i]) { - if (validate_ssbo) { - max_num_buffer_blocks += - prog->_LinkedShaders[i]->Program->info.num_ssbos; - } else { - max_num_buffer_blocks += - prog->_LinkedShaders[i]->Program->info.num_ubos; - } - } - } - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - - ifc_blk_stage_idx[i] = - (int *) malloc(sizeof(int) * max_num_buffer_blocks); - for (unsigned int j = 0; j < max_num_buffer_blocks; j++) - ifc_blk_stage_idx[i][j] = -1; - - if (sh == NULL) - continue; - - unsigned sh_num_blocks; - struct gl_uniform_block **sh_blks; - if (validate_ssbo) { - sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ssbos; - sh_blks = sh->Program->sh.ShaderStorageBlocks; - } else { - sh_num_blocks = prog->_LinkedShaders[i]->Program->info.num_ubos; - sh_blks = sh->Program->sh.UniformBlocks; - } - - for (unsigned int j = 0; j < sh_num_blocks; j++) { - int index = link_cross_validate_uniform_block(prog->data, &blks, - num_blks, sh_blks[j]); - - if (index == -1) { - linker_error(prog, "buffer block `%s' has mismatching " - "definitions\n", sh_blks[j]->name.string); - - for (unsigned k = 0; k <= i; k++) { - free(ifc_blk_stage_idx[k]); - } - - /* Reset the block count. This will help avoid various segfaults - * from api calls that assume the array exists due to the count - * being non-zero. - */ - *num_blks = 0; - return false; - } - - ifc_blk_stage_idx[i][index] = j; - } - } - - /* Update per stage block pointers to point to the program list. - * FIXME: We should be able to free the per stage blocks here. - */ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - for (unsigned j = 0; j < *num_blks; j++) { - int stage_index = ifc_blk_stage_idx[i][j]; - - if (stage_index != -1) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - - struct gl_uniform_block **sh_blks = validate_ssbo ? - sh->Program->sh.ShaderStorageBlocks : - sh->Program->sh.UniformBlocks; - - blks[j].stageref |= sh_blks[stage_index]->stageref; - sh_blks[stage_index] = &blks[j]; - } - } - } - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - free(ifc_blk_stage_idx[i]); - } - - if (validate_ssbo) - prog->data->ShaderStorageBlocks = blks; - else - prog->data->UniformBlocks = blks; - - return true; -} - -/** - * Verifies the invariance of built-in special variables. - */ -static bool -validate_invariant_builtins(struct gl_shader_program *prog, - const gl_linked_shader *vert, - const gl_linked_shader *frag) -{ - const ir_variable *var_vert; - const ir_variable *var_frag; - - if (!vert || !frag) - return true; - - /* - * From OpenGL ES Shading Language 1.0 specification - * (4.6.4 Invariance and Linkage): - * "The invariance of varyings that are declared in both the vertex and - * fragment shaders must match. For the built-in special variables, - * gl_FragCoord can only be declared invariant if and only if - * gl_Position is declared invariant. Similarly gl_PointCoord can only - * be declared invariant if and only if gl_PointSize is declared - * invariant. It is an error to declare gl_FrontFacing as invariant. - * The invariance of gl_FrontFacing is the same as the invariance of - * gl_Position." - */ - var_frag = frag->symbols->get_variable("gl_FragCoord"); - if (var_frag && var_frag->data.invariant) { - var_vert = vert->symbols->get_variable("gl_Position"); - if (var_vert && !var_vert->data.invariant) { - linker_error(prog, - "fragment shader built-in `%s' has invariant qualifier, " - "but vertex shader built-in `%s' lacks invariant qualifier\n", - var_frag->name, var_vert->name); - return false; - } - } - - var_frag = frag->symbols->get_variable("gl_PointCoord"); - if (var_frag && var_frag->data.invariant) { - var_vert = vert->symbols->get_variable("gl_PointSize"); - if (var_vert && !var_vert->data.invariant) { - linker_error(prog, - "fragment shader built-in `%s' has invariant qualifier, " - "but vertex shader built-in `%s' lacks invariant qualifier\n", - var_frag->name, var_vert->name); - return false; - } - } - - var_frag = frag->symbols->get_variable("gl_FrontFacing"); - if (var_frag && var_frag->data.invariant) { - linker_error(prog, - "fragment shader built-in `%s' can not be declared as invariant\n", - var_frag->name); - return false; - } - - return true; -} - -/** - * Populates a shaders symbol table with all global declarations - */ -static void -populate_symbol_table(gl_linked_shader *sh, glsl_symbol_table *symbols) -{ - sh->symbols = new(sh) glsl_symbol_table; - - _mesa_glsl_copy_symbols_from_table(sh->ir, symbols, sh->symbols); -} - - -/** - * Remap variables referenced in an instruction tree - * - * This is used when instruction trees are cloned from one shader and placed in - * another. These trees will contain references to \c ir_variable nodes that - * do not exist in the target shader. This function finds these \c ir_variable - * references and replaces the references with matching variables in the target - * shader. - * - * If there is no matching variable in the target shader, a clone of the - * \c ir_variable is made and added to the target shader. The new variable is - * added to \b both the instruction stream and the symbol table. - * - * \param inst IR tree that is to be processed. - * \param symbols Symbol table containing global scope symbols in the - * linked shader. - * \param instructions Instruction stream where new variable declarations - * should be added. - */ -static void -remap_variables(ir_instruction *inst, struct gl_linked_shader *target, - hash_table *temps) -{ - class remap_visitor : public ir_hierarchical_visitor { - public: - remap_visitor(struct gl_linked_shader *target, hash_table *temps) - { - this->target = target; - this->symbols = target->symbols; - this->instructions = target->ir; - this->temps = temps; - } - - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - if (ir->var->data.mode == ir_var_temporary) { - hash_entry *entry = _mesa_hash_table_search(temps, ir->var); - ir_variable *var = entry ? (ir_variable *) entry->data : NULL; - - assert(var != NULL); - ir->var = var; - return visit_continue; - } - - ir_variable *const existing = - this->symbols->get_variable(ir->var->name); - if (existing != NULL) - ir->var = existing; - else { - ir_variable *copy = ir->var->clone(this->target, NULL); - - this->symbols->add_variable(copy); - this->instructions->push_head(copy); - ir->var = copy; - } - - return visit_continue; - } - - private: - struct gl_linked_shader *target; - glsl_symbol_table *symbols; - exec_list *instructions; - hash_table *temps; - }; - - remap_visitor v(target, temps); - - inst->accept(&v); -} - - -/** - * Move non-declarations from one instruction stream to another - * - * The intended usage pattern of this function is to pass the pointer to the - * head sentinel of a list (i.e., a pointer to the list cast to an \c exec_node - * pointer) for \c last and \c false for \c make_copies on the first - * call. Successive calls pass the return value of the previous call for - * \c last and \c true for \c make_copies. - * - * \param instructions Source instruction stream - * \param last Instruction after which new instructions should be - * inserted in the target instruction stream - * \param make_copies Flag selecting whether instructions in \c instructions - * should be copied (via \c ir_instruction::clone) into the - * target list or moved. - * - * \return - * The new "last" instruction in the target instruction stream. This pointer - * is suitable for use as the \c last parameter of a later call to this - * function. - */ -static exec_node * -move_non_declarations(exec_list *instructions, exec_node *last, - bool make_copies, gl_linked_shader *target) -{ - hash_table *temps = NULL; - - if (make_copies) - temps = _mesa_pointer_hash_table_create(NULL); - - foreach_in_list_safe(ir_instruction, inst, instructions) { - if (inst->as_function()) - continue; - - ir_variable *var = inst->as_variable(); - if ((var != NULL) && (var->data.mode != ir_var_temporary)) - continue; - - assert(inst->as_assignment() - || inst->as_call() - || inst->as_if() /* for initializers with the ?: operator */ - || ((var != NULL) && (var->data.mode == ir_var_temporary))); - - if (make_copies) { - inst = inst->clone(target, NULL); - - if (var != NULL) - _mesa_hash_table_insert(temps, var, inst); - else - remap_variables(inst, target, temps); - } else { - inst->remove(); - } - - last->insert_after(inst); - last = inst; - } - - if (make_copies) - _mesa_hash_table_destroy(temps, NULL); - - return last; -} - - -/** - * This class is only used in link_intrastage_shaders() below but declaring - * it inside that function leads to compiler warnings with some versions of - * gcc. - */ -class array_sizing_visitor : public deref_type_updater { -public: - using deref_type_updater::visit; - - array_sizing_visitor() - : mem_ctx(ralloc_context(NULL)), - unnamed_interfaces(_mesa_pointer_hash_table_create(NULL)) - { - } - - ~array_sizing_visitor() - { - _mesa_hash_table_destroy(this->unnamed_interfaces, NULL); - ralloc_free(this->mem_ctx); - } - - virtual ir_visitor_status visit(ir_variable *var) - { - const glsl_type *type_without_array; - bool implicit_sized_array = var->data.implicit_sized_array; - fixup_type(&var->type, var->data.max_array_access, - var->data.from_ssbo_unsized_array, - &implicit_sized_array); - var->data.implicit_sized_array = implicit_sized_array; - type_without_array = var->type->without_array(); - if (var->type->is_interface()) { - if (interface_contains_unsized_arrays(var->type)) { - const glsl_type *new_type = - resize_interface_members(var->type, - var->get_max_ifc_array_access(), - var->is_in_shader_storage_block()); - var->type = new_type; - var->change_interface_type(new_type); - } - } else if (type_without_array->is_interface()) { - if (interface_contains_unsized_arrays(type_without_array)) { - const glsl_type *new_type = - resize_interface_members(type_without_array, - var->get_max_ifc_array_access(), - var->is_in_shader_storage_block()); - var->change_interface_type(new_type); - var->type = update_interface_members_array(var->type, new_type); - } - } else if (const glsl_type *ifc_type = var->get_interface_type()) { - /* Store a pointer to the variable in the unnamed_interfaces - * hashtable. - */ - hash_entry *entry = - _mesa_hash_table_search(this->unnamed_interfaces, - ifc_type); - - ir_variable **interface_vars = entry ? (ir_variable **) entry->data : NULL; - - if (interface_vars == NULL) { - interface_vars = rzalloc_array(mem_ctx, ir_variable *, - ifc_type->length); - _mesa_hash_table_insert(this->unnamed_interfaces, ifc_type, - interface_vars); - } - unsigned index = ifc_type->field_index(var->name); - assert(index < ifc_type->length); - assert(interface_vars[index] == NULL); - interface_vars[index] = var; - } - return visit_continue; - } - - /** - * For each unnamed interface block that was discovered while running the - * visitor, adjust the interface type to reflect the newly assigned array - * sizes, and fix up the ir_variable nodes to point to the new interface - * type. - */ - void fixup_unnamed_interface_types() - { - hash_table_call_foreach(this->unnamed_interfaces, - fixup_unnamed_interface_type, NULL); - } - -private: - /** - * If the type pointed to by \c type represents an unsized array, replace - * it with a sized array whose size is determined by max_array_access. - */ - static void fixup_type(const glsl_type **type, unsigned max_array_access, - bool from_ssbo_unsized_array, bool *implicit_sized) - { - if (!from_ssbo_unsized_array && (*type)->is_unsized_array()) { - *type = glsl_type::get_array_instance((*type)->fields.array, - max_array_access + 1); - *implicit_sized = true; - assert(*type != NULL); - } - } - - static const glsl_type * - update_interface_members_array(const glsl_type *type, - const glsl_type *new_interface_type) - { - const glsl_type *element_type = type->fields.array; - if (element_type->is_array()) { - const glsl_type *new_array_type = - update_interface_members_array(element_type, new_interface_type); - return glsl_type::get_array_instance(new_array_type, type->length); - } else { - return glsl_type::get_array_instance(new_interface_type, - type->length); - } - } - - /** - * Determine whether the given interface type contains unsized arrays (if - * it doesn't, array_sizing_visitor doesn't need to process it). - */ - static bool interface_contains_unsized_arrays(const glsl_type *type) - { - for (unsigned i = 0; i < type->length; i++) { - const glsl_type *elem_type = type->fields.structure[i].type; - if (elem_type->is_unsized_array()) - return true; - } - return false; - } - - /** - * Create a new interface type based on the given type, with unsized arrays - * replaced by sized arrays whose size is determined by - * max_ifc_array_access. - */ - static const glsl_type * - resize_interface_members(const glsl_type *type, - const int *max_ifc_array_access, - bool is_ssbo) - { - unsigned num_fields = type->length; - glsl_struct_field *fields = new glsl_struct_field[num_fields]; - memcpy(fields, type->fields.structure, - num_fields * sizeof(*fields)); - for (unsigned i = 0; i < num_fields; i++) { - bool implicit_sized_array = fields[i].implicit_sized_array; - /* If SSBO last member is unsized array, we don't replace it by a sized - * array. - */ - if (is_ssbo && i == (num_fields - 1)) - fixup_type(&fields[i].type, max_ifc_array_access[i], - true, &implicit_sized_array); - else - fixup_type(&fields[i].type, max_ifc_array_access[i], - false, &implicit_sized_array); - fields[i].implicit_sized_array = implicit_sized_array; - } - glsl_interface_packing packing = - (glsl_interface_packing) type->interface_packing; - bool row_major = (bool) type->interface_row_major; - const glsl_type *new_ifc_type = - glsl_type::get_interface_instance(fields, num_fields, - packing, row_major, type->name); - delete [] fields; - return new_ifc_type; - } - - static void fixup_unnamed_interface_type(const void *key, void *data, - void *) - { - const glsl_type *ifc_type = (const glsl_type *) key; - ir_variable **interface_vars = (ir_variable **) data; - unsigned num_fields = ifc_type->length; - glsl_struct_field *fields = new glsl_struct_field[num_fields]; - memcpy(fields, ifc_type->fields.structure, - num_fields * sizeof(*fields)); - bool interface_type_changed = false; - for (unsigned i = 0; i < num_fields; i++) { - if (interface_vars[i] != NULL && - fields[i].type != interface_vars[i]->type) { - fields[i].type = interface_vars[i]->type; - interface_type_changed = true; - } - } - if (!interface_type_changed) { - delete [] fields; - return; - } - glsl_interface_packing packing = - (glsl_interface_packing) ifc_type->interface_packing; - bool row_major = (bool) ifc_type->interface_row_major; - const glsl_type *new_ifc_type = - glsl_type::get_interface_instance(fields, num_fields, packing, - row_major, ifc_type->name); - delete [] fields; - for (unsigned i = 0; i < num_fields; i++) { - if (interface_vars[i] != NULL) - interface_vars[i]->change_interface_type(new_ifc_type); - } - } - - /** - * Memory context used to allocate the data in \c unnamed_interfaces. - */ - void *mem_ctx; - - /** - * Hash table from const glsl_type * to an array of ir_variable *'s - * pointing to the ir_variables constituting each unnamed interface block. - */ - hash_table *unnamed_interfaces; -}; - -static bool -validate_xfb_buffer_stride(const struct gl_constants *consts, unsigned idx, - struct gl_shader_program *prog) -{ - /* We will validate doubles at a later stage */ - if (prog->TransformFeedback.BufferStride[idx] % 4) { - linker_error(prog, "invalid qualifier xfb_stride=%d must be a " - "multiple of 4 or if its applied to a type that is " - "or contains a double a multiple of 8.", - prog->TransformFeedback.BufferStride[idx]); - return false; - } - - if (prog->TransformFeedback.BufferStride[idx] / 4 > - consts->MaxTransformFeedbackInterleavedComponents) { - linker_error(prog, "The MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS " - "limit has been exceeded."); - return false; - } - - return true; -} - -/** - * Check for conflicting xfb_stride default qualifiers and store buffer stride - * for later use. - */ -static void -link_xfb_stride_layout_qualifiers(const struct gl_constants *consts, - struct gl_shader_program *prog, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) { - prog->TransformFeedback.BufferStride[i] = 0; - } - - for (unsigned i = 0; i < num_shaders; i++) { - struct gl_shader *shader = shader_list[i]; - - for (unsigned j = 0; j < MAX_FEEDBACK_BUFFERS; j++) { - if (shader->TransformFeedbackBufferStride[j]) { - if (prog->TransformFeedback.BufferStride[j] == 0) { - prog->TransformFeedback.BufferStride[j] = - shader->TransformFeedbackBufferStride[j]; - if (!validate_xfb_buffer_stride(consts, j, prog)) - return; - } else if (prog->TransformFeedback.BufferStride[j] != - shader->TransformFeedbackBufferStride[j]){ - linker_error(prog, - "intrastage shaders defined with conflicting " - "xfb_stride for buffer %d (%d and %d)\n", j, - prog->TransformFeedback.BufferStride[j], - shader->TransformFeedbackBufferStride[j]); - return; - } - } - } - } -} - -/** - * Check for conflicting bindless/bound sampler/image layout qualifiers at - * global scope. - */ -static void -link_bindless_layout_qualifiers(struct gl_shader_program *prog, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - bool bindless_sampler, bindless_image; - bool bound_sampler, bound_image; - - bindless_sampler = bindless_image = false; - bound_sampler = bound_image = false; - - for (unsigned i = 0; i < num_shaders; i++) { - struct gl_shader *shader = shader_list[i]; - - if (shader->bindless_sampler) - bindless_sampler = true; - if (shader->bindless_image) - bindless_image = true; - if (shader->bound_sampler) - bound_sampler = true; - if (shader->bound_image) - bound_image = true; - - if ((bindless_sampler && bound_sampler) || - (bindless_image && bound_image)) { - /* From section 4.4.6 of the ARB_bindless_texture spec: - * - * "If both bindless_sampler and bound_sampler, or bindless_image - * and bound_image, are declared at global scope in any - * compilation unit, a link- time error will be generated." - */ - linker_error(prog, "both bindless_sampler and bound_sampler, or " - "bindless_image and bound_image, can't be declared at " - "global scope"); - } - } -} - -/** - * Check for conflicting viewport_relative settings across shaders, and sets - * the value for the linked shader. - */ -static void -link_layer_viewport_relative_qualifier(struct gl_shader_program *prog, - struct gl_program *gl_prog, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - unsigned i; - - /* Find first shader with explicit layer declaration */ - for (i = 0; i < num_shaders; i++) { - if (shader_list[i]->redeclares_gl_layer) { - gl_prog->info.layer_viewport_relative = - shader_list[i]->layer_viewport_relative; - break; - } - } - - /* Now make sure that each subsequent shader's explicit layer declaration - * matches the first one's. - */ - for (; i < num_shaders; i++) { - if (shader_list[i]->redeclares_gl_layer && - shader_list[i]->layer_viewport_relative != - gl_prog->info.layer_viewport_relative) { - linker_error(prog, "all gl_Layer redeclarations must have identical " - "viewport_relative settings"); - } - } -} - -/** - * Performs the cross-validation of tessellation control shader vertices and - * layout qualifiers for the attached tessellation control shaders, - * and propagates them to the linked TCS and linked shader program. - */ -static void -link_tcs_out_layout_qualifiers(struct gl_shader_program *prog, - struct gl_program *gl_prog, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - if (gl_prog->info.stage != MESA_SHADER_TESS_CTRL) - return; - - gl_prog->info.tess.tcs_vertices_out = 0; - - /* From the GLSL 4.0 spec (chapter 4.3.8.2): - * - * "All tessellation control shader layout declarations in a program - * must specify the same output patch vertex count. There must be at - * least one layout qualifier specifying an output patch vertex count - * in any program containing tessellation control shaders; however, - * such a declaration is not required in all tessellation control - * shaders." - */ - - for (unsigned i = 0; i < num_shaders; i++) { - struct gl_shader *shader = shader_list[i]; - - if (shader->info.TessCtrl.VerticesOut != 0) { - if (gl_prog->info.tess.tcs_vertices_out != 0 && - gl_prog->info.tess.tcs_vertices_out != - (unsigned) shader->info.TessCtrl.VerticesOut) { - linker_error(prog, "tessellation control shader defined with " - "conflicting output vertex count (%d and %d)\n", - gl_prog->info.tess.tcs_vertices_out, - shader->info.TessCtrl.VerticesOut); - return; - } - gl_prog->info.tess.tcs_vertices_out = - shader->info.TessCtrl.VerticesOut; - } - } - - /* Just do the intrastage -> interstage propagation right now, - * since we already know we're in the right type of shader program - * for doing it. - */ - if (gl_prog->info.tess.tcs_vertices_out == 0) { - linker_error(prog, "tessellation control shader didn't declare " - "vertices out layout qualifier\n"); - return; - } -} - - -/** - * Performs the cross-validation of tessellation evaluation shader - * primitive type, vertex spacing, ordering and point_mode layout qualifiers - * for the attached tessellation evaluation shaders, and propagates them - * to the linked TES and linked shader program. - */ -static void -link_tes_in_layout_qualifiers(struct gl_shader_program *prog, - struct gl_program *gl_prog, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - if (gl_prog->info.stage != MESA_SHADER_TESS_EVAL) - return; - - int point_mode = -1; - unsigned vertex_order = 0; - - gl_prog->info.tess._primitive_mode = TESS_PRIMITIVE_UNSPECIFIED; - gl_prog->info.tess.spacing = TESS_SPACING_UNSPECIFIED; - - /* From the GLSL 4.0 spec (chapter 4.3.8.1): - * - * "At least one tessellation evaluation shader (compilation unit) in - * a program must declare a primitive mode in its input layout. - * Declaration vertex spacing, ordering, and point mode identifiers is - * optional. It is not required that all tessellation evaluation - * shaders in a program declare a primitive mode. If spacing or - * vertex ordering declarations are omitted, the tessellation - * primitive generator will use equal spacing or counter-clockwise - * vertex ordering, respectively. If a point mode declaration is - * omitted, the tessellation primitive generator will produce lines or - * triangles according to the primitive mode." - */ - - for (unsigned i = 0; i < num_shaders; i++) { - struct gl_shader *shader = shader_list[i]; - - if (shader->info.TessEval._PrimitiveMode != TESS_PRIMITIVE_UNSPECIFIED) { - if (gl_prog->info.tess._primitive_mode != TESS_PRIMITIVE_UNSPECIFIED && - gl_prog->info.tess._primitive_mode != - shader->info.TessEval._PrimitiveMode) { - linker_error(prog, "tessellation evaluation shader defined with " - "conflicting input primitive modes.\n"); - return; - } - gl_prog->info.tess._primitive_mode = - shader->info.TessEval._PrimitiveMode; - } - - if (shader->info.TessEval.Spacing != 0) { - if (gl_prog->info.tess.spacing != 0 && gl_prog->info.tess.spacing != - shader->info.TessEval.Spacing) { - linker_error(prog, "tessellation evaluation shader defined with " - "conflicting vertex spacing.\n"); - return; - } - gl_prog->info.tess.spacing = shader->info.TessEval.Spacing; - } - - if (shader->info.TessEval.VertexOrder != 0) { - if (vertex_order != 0 && - vertex_order != shader->info.TessEval.VertexOrder) { - linker_error(prog, "tessellation evaluation shader defined with " - "conflicting ordering.\n"); - return; - } - vertex_order = shader->info.TessEval.VertexOrder; - } - - if (shader->info.TessEval.PointMode != -1) { - if (point_mode != -1 && - point_mode != shader->info.TessEval.PointMode) { - linker_error(prog, "tessellation evaluation shader defined with " - "conflicting point modes.\n"); - return; - } - point_mode = shader->info.TessEval.PointMode; - } - - } - - /* Just do the intrastage -> interstage propagation right now, - * since we already know we're in the right type of shader program - * for doing it. - */ - if (gl_prog->info.tess._primitive_mode == TESS_PRIMITIVE_UNSPECIFIED) { - linker_error(prog, - "tessellation evaluation shader didn't declare input " - "primitive modes.\n"); - return; - } - - if (gl_prog->info.tess.spacing == TESS_SPACING_UNSPECIFIED) - gl_prog->info.tess.spacing = TESS_SPACING_EQUAL; - - if (vertex_order == 0 || vertex_order == GL_CCW) - gl_prog->info.tess.ccw = true; - else - gl_prog->info.tess.ccw = false; - - - if (point_mode == -1 || point_mode == GL_FALSE) - gl_prog->info.tess.point_mode = false; - else - gl_prog->info.tess.point_mode = true; -} - - -/** - * Performs the cross-validation of layout qualifiers specified in - * redeclaration of gl_FragCoord for the attached fragment shaders, - * and propagates them to the linked FS and linked shader program. - */ -static void -link_fs_inout_layout_qualifiers(struct gl_shader_program *prog, - struct gl_linked_shader *linked_shader, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - bool redeclares_gl_fragcoord = false; - bool uses_gl_fragcoord = false; - bool origin_upper_left = false; - bool pixel_center_integer = false; - - if (linked_shader->Stage != MESA_SHADER_FRAGMENT || - (prog->GLSL_Version < 150 && - !prog->ARB_fragment_coord_conventions_enable)) - return; - - for (unsigned i = 0; i < num_shaders; i++) { - struct gl_shader *shader = shader_list[i]; - /* From the GLSL 1.50 spec, page 39: - * - * "If gl_FragCoord is redeclared in any fragment shader in a program, - * it must be redeclared in all the fragment shaders in that program - * that have a static use gl_FragCoord." - */ - if ((redeclares_gl_fragcoord && !shader->redeclares_gl_fragcoord && - shader->uses_gl_fragcoord) - || (shader->redeclares_gl_fragcoord && !redeclares_gl_fragcoord && - uses_gl_fragcoord)) { - linker_error(prog, "fragment shader defined with conflicting " - "layout qualifiers for gl_FragCoord\n"); - } - - /* From the GLSL 1.50 spec, page 39: - * - * "All redeclarations of gl_FragCoord in all fragment shaders in a - * single program must have the same set of qualifiers." - */ - if (redeclares_gl_fragcoord && shader->redeclares_gl_fragcoord && - (shader->origin_upper_left != origin_upper_left || - shader->pixel_center_integer != pixel_center_integer)) { - linker_error(prog, "fragment shader defined with conflicting " - "layout qualifiers for gl_FragCoord\n"); - } - - /* Update the linked shader state. Note that uses_gl_fragcoord should - * accumulate the results. The other values should replace. If there - * are multiple redeclarations, all the fields except uses_gl_fragcoord - * are already known to be the same. - */ - if (shader->redeclares_gl_fragcoord || shader->uses_gl_fragcoord) { - redeclares_gl_fragcoord = shader->redeclares_gl_fragcoord; - uses_gl_fragcoord |= shader->uses_gl_fragcoord; - origin_upper_left = shader->origin_upper_left; - pixel_center_integer = shader->pixel_center_integer; - } - - linked_shader->Program->info.fs.early_fragment_tests |= - shader->EarlyFragmentTests || shader->PostDepthCoverage; - linked_shader->Program->info.fs.inner_coverage |= shader->InnerCoverage; - linked_shader->Program->info.fs.post_depth_coverage |= - shader->PostDepthCoverage; - linked_shader->Program->info.fs.pixel_interlock_ordered |= - shader->PixelInterlockOrdered; - linked_shader->Program->info.fs.pixel_interlock_unordered |= - shader->PixelInterlockUnordered; - linked_shader->Program->info.fs.sample_interlock_ordered |= - shader->SampleInterlockOrdered; - linked_shader->Program->info.fs.sample_interlock_unordered |= - shader->SampleInterlockUnordered; - linked_shader->Program->info.fs.advanced_blend_modes |= shader->BlendSupport; - } - - linked_shader->Program->info.fs.pixel_center_integer = pixel_center_integer; - linked_shader->Program->info.fs.origin_upper_left = origin_upper_left; -} - -/** - * Performs the cross-validation of geometry shader max_vertices and - * primitive type layout qualifiers for the attached geometry shaders, - * and propagates them to the linked GS and linked shader program. - */ -static void -link_gs_inout_layout_qualifiers(struct gl_shader_program *prog, - struct gl_program *gl_prog, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - /* No in/out qualifiers defined for anything but GLSL 1.50+ - * geometry shaders so far. - */ - if (gl_prog->info.stage != MESA_SHADER_GEOMETRY || prog->GLSL_Version < 150) - return; - - int vertices_out = -1; - - gl_prog->info.gs.invocations = 0; - gl_prog->info.gs.input_primitive = SHADER_PRIM_UNKNOWN; - gl_prog->info.gs.output_primitive = SHADER_PRIM_UNKNOWN; - - /* From the GLSL 1.50 spec, page 46: - * - * "All geometry shader output layout declarations in a program - * must declare the same layout and same value for - * max_vertices. There must be at least one geometry output - * layout declaration somewhere in a program, but not all - * geometry shaders (compilation units) are required to - * declare it." - */ - - for (unsigned i = 0; i < num_shaders; i++) { - struct gl_shader *shader = shader_list[i]; - - if (shader->info.Geom.InputType != SHADER_PRIM_UNKNOWN) { - if (gl_prog->info.gs.input_primitive != SHADER_PRIM_UNKNOWN && - gl_prog->info.gs.input_primitive != - shader->info.Geom.InputType) { - linker_error(prog, "geometry shader defined with conflicting " - "input types\n"); - return; - } - gl_prog->info.gs.input_primitive = (enum shader_prim)shader->info.Geom.InputType; - } - - if (shader->info.Geom.OutputType != SHADER_PRIM_UNKNOWN) { - if (gl_prog->info.gs.output_primitive != SHADER_PRIM_UNKNOWN && - gl_prog->info.gs.output_primitive != - shader->info.Geom.OutputType) { - linker_error(prog, "geometry shader defined with conflicting " - "output types\n"); - return; - } - gl_prog->info.gs.output_primitive = (enum shader_prim)shader->info.Geom.OutputType; - } - - if (shader->info.Geom.VerticesOut != -1) { - if (vertices_out != -1 && - vertices_out != shader->info.Geom.VerticesOut) { - linker_error(prog, "geometry shader defined with conflicting " - "output vertex count (%d and %d)\n", - vertices_out, shader->info.Geom.VerticesOut); - return; - } - vertices_out = shader->info.Geom.VerticesOut; - } - - if (shader->info.Geom.Invocations != 0) { - if (gl_prog->info.gs.invocations != 0 && - gl_prog->info.gs.invocations != - (unsigned) shader->info.Geom.Invocations) { - linker_error(prog, "geometry shader defined with conflicting " - "invocation count (%d and %d)\n", - gl_prog->info.gs.invocations, - shader->info.Geom.Invocations); - return; - } - gl_prog->info.gs.invocations = shader->info.Geom.Invocations; - } - } - - /* Just do the intrastage -> interstage propagation right now, - * since we already know we're in the right type of shader program - * for doing it. - */ - if (gl_prog->info.gs.input_primitive == SHADER_PRIM_UNKNOWN) { - linker_error(prog, - "geometry shader didn't declare primitive input type\n"); - return; - } - - if (gl_prog->info.gs.output_primitive == SHADER_PRIM_UNKNOWN) { - linker_error(prog, - "geometry shader didn't declare primitive output type\n"); - return; - } - - if (vertices_out == -1) { - linker_error(prog, - "geometry shader didn't declare max_vertices\n"); - return; - } else { - gl_prog->info.gs.vertices_out = vertices_out; - } - - if (gl_prog->info.gs.invocations == 0) - gl_prog->info.gs.invocations = 1; -} - - -/** - * Perform cross-validation of compute shader local_size_{x,y,z} layout and - * derivative arrangement qualifiers for the attached compute shaders, and - * propagate them to the linked CS and linked shader program. - */ -static void -link_cs_input_layout_qualifiers(struct gl_shader_program *prog, - struct gl_program *gl_prog, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - /* This function is called for all shader stages, but it only has an effect - * for compute shaders. - */ - if (gl_prog->info.stage != MESA_SHADER_COMPUTE) - return; - - for (int i = 0; i < 3; i++) - gl_prog->info.workgroup_size[i] = 0; - - gl_prog->info.workgroup_size_variable = false; - - gl_prog->info.cs.derivative_group = DERIVATIVE_GROUP_NONE; - - /* From the ARB_compute_shader spec, in the section describing local size - * declarations: - * - * If multiple compute shaders attached to a single program object - * declare local work-group size, the declarations must be identical; - * otherwise a link-time error results. Furthermore, if a program - * object contains any compute shaders, at least one must contain an - * input layout qualifier specifying the local work sizes of the - * program, or a link-time error will occur. - */ - for (unsigned sh = 0; sh < num_shaders; sh++) { - struct gl_shader *shader = shader_list[sh]; - - if (shader->info.Comp.LocalSize[0] != 0) { - if (gl_prog->info.workgroup_size[0] != 0) { - for (int i = 0; i < 3; i++) { - if (gl_prog->info.workgroup_size[i] != - shader->info.Comp.LocalSize[i]) { - linker_error(prog, "compute shader defined with conflicting " - "local sizes\n"); - return; - } - } - } - for (int i = 0; i < 3; i++) { - gl_prog->info.workgroup_size[i] = - shader->info.Comp.LocalSize[i]; - } - } else if (shader->info.Comp.LocalSizeVariable) { - if (gl_prog->info.workgroup_size[0] != 0) { - /* The ARB_compute_variable_group_size spec says: - * - * If one compute shader attached to a program declares a - * variable local group size and a second compute shader - * attached to the same program declares a fixed local group - * size, a link-time error results. - */ - linker_error(prog, "compute shader defined with both fixed and " - "variable local group size\n"); - return; - } - gl_prog->info.workgroup_size_variable = true; - } - - enum gl_derivative_group group = shader->info.Comp.DerivativeGroup; - if (group != DERIVATIVE_GROUP_NONE) { - if (gl_prog->info.cs.derivative_group != DERIVATIVE_GROUP_NONE && - gl_prog->info.cs.derivative_group != group) { - linker_error(prog, "compute shader defined with conflicting " - "derivative groups\n"); - return; - } - gl_prog->info.cs.derivative_group = group; - } - } - - /* Just do the intrastage -> interstage propagation right now, - * since we already know we're in the right type of shader program - * for doing it. - */ - if (gl_prog->info.workgroup_size[0] == 0 && - !gl_prog->info.workgroup_size_variable) { - linker_error(prog, "compute shader must contain a fixed or a variable " - "local group size\n"); - return; - } - - if (gl_prog->info.cs.derivative_group == DERIVATIVE_GROUP_QUADS) { - if (gl_prog->info.workgroup_size[0] % 2 != 0) { - linker_error(prog, "derivative_group_quadsNV must be used with a " - "local group size whose first dimension " - "is a multiple of 2\n"); - return; - } - if (gl_prog->info.workgroup_size[1] % 2 != 0) { - linker_error(prog, "derivative_group_quadsNV must be used with a local" - "group size whose second dimension " - "is a multiple of 2\n"); - return; - } - } else if (gl_prog->info.cs.derivative_group == DERIVATIVE_GROUP_LINEAR) { - if ((gl_prog->info.workgroup_size[0] * - gl_prog->info.workgroup_size[1] * - gl_prog->info.workgroup_size[2]) % 4 != 0) { - linker_error(prog, "derivative_group_linearNV must be used with a " - "local group size whose total number of invocations " - "is a multiple of 4\n"); - return; - } - } -} - -/** - * Link all out variables on a single stage which are not - * directly used in a shader with the main function. - */ -static void -link_output_variables(struct gl_linked_shader *linked_shader, - struct gl_shader **shader_list, - unsigned num_shaders) -{ - struct glsl_symbol_table *symbols = linked_shader->symbols; - - for (unsigned i = 0; i < num_shaders; i++) { - - /* Skip shader object with main function */ - if (shader_list[i]->symbols->get_function("main")) - continue; - - foreach_in_list(ir_instruction, ir, shader_list[i]->ir) { - if (ir->ir_type != ir_type_variable) - continue; - - ir_variable *var = (ir_variable *) ir; - - if (var->data.mode == ir_var_shader_out && - !symbols->get_variable(var->name)) { - var = var->clone(linked_shader, NULL); - symbols->add_variable(var); - linked_shader->ir->push_head(var); - } - } - } - - return; -} - - -/** - * Combine a group of shaders for a single stage to generate a linked shader - * - * \note - * If this function is supplied a single shader, it is cloned, and the new - * shader is returned. - */ -struct gl_linked_shader * -link_intrastage_shaders(void *mem_ctx, - struct gl_context *ctx, - struct gl_shader_program *prog, - struct gl_shader **shader_list, - unsigned num_shaders, - bool allow_missing_main) -{ - struct gl_uniform_block *ubo_blocks = NULL; - struct gl_uniform_block *ssbo_blocks = NULL; - unsigned num_ubo_blocks = 0; - unsigned num_ssbo_blocks = 0; - - /* Check that global variables defined in multiple shaders are consistent. - */ - glsl_symbol_table variables; - for (unsigned i = 0; i < num_shaders; i++) { - if (shader_list[i] == NULL) - continue; - cross_validate_globals(&ctx->Const, prog, shader_list[i]->ir, &variables, - false); - } - - if (!prog->data->LinkStatus) - return NULL; - - /* Check that interface blocks defined in multiple shaders are consistent. - */ - validate_intrastage_interface_blocks(prog, (const gl_shader **)shader_list, - num_shaders); - if (!prog->data->LinkStatus) - return NULL; - - /* Check that there is only a single definition of each function signature - * across all shaders. - */ - for (unsigned i = 0; i < (num_shaders - 1); i++) { - foreach_in_list(ir_instruction, node, shader_list[i]->ir) { - ir_function *const f = node->as_function(); - - if (f == NULL) - continue; - - for (unsigned j = i + 1; j < num_shaders; j++) { - ir_function *const other = - shader_list[j]->symbols->get_function(f->name); - - /* If the other shader has no function (and therefore no function - * signatures) with the same name, skip to the next shader. - */ - if (other == NULL) - continue; - - foreach_in_list(ir_function_signature, sig, &f->signatures) { - if (!sig->is_defined) - continue; - - ir_function_signature *other_sig = - other->exact_matching_signature(NULL, &sig->parameters); - - if (other_sig != NULL && other_sig->is_defined) { - linker_error(prog, "function `%s' is multiply defined\n", - f->name); - return NULL; - } - } - } - } - } - - /* Find the shader that defines main, and make a clone of it. - * - * Starting with the clone, search for undefined references. If one is - * found, find the shader that defines it. Clone the reference and add - * it to the shader. Repeat until there are no undefined references or - * until a reference cannot be resolved. - */ - gl_shader *main = NULL; - for (unsigned i = 0; i < num_shaders; i++) { - if (_mesa_get_main_function_signature(shader_list[i]->symbols)) { - main = shader_list[i]; - break; - } - } - - if (main == NULL && allow_missing_main) - main = shader_list[0]; - - if (main == NULL) { - linker_error(prog, "%s shader lacks `main'\n", - _mesa_shader_stage_to_string(shader_list[0]->Stage)); - return NULL; - } - - gl_linked_shader *linked = rzalloc(NULL, struct gl_linked_shader); - linked->Stage = shader_list[0]->Stage; - - /* Create program and attach it to the linked shader */ - struct gl_program *gl_prog = - ctx->Driver.NewProgram(ctx, shader_list[0]->Stage, prog->Name, false); - if (!gl_prog) { - prog->data->LinkStatus = LINKING_FAILURE; - _mesa_delete_linked_shader(ctx, linked); - return NULL; - } - - _mesa_reference_shader_program_data(&gl_prog->sh.data, prog->data); - - /* Don't use _mesa_reference_program() just take ownership */ - linked->Program = gl_prog; - - linked->ir = new(linked) exec_list; - clone_ir_list(mem_ctx, linked->ir, main->ir); - - link_fs_inout_layout_qualifiers(prog, linked, shader_list, num_shaders); - link_tcs_out_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); - link_tes_in_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); - link_gs_inout_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); - link_cs_input_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); - - if (linked->Stage != MESA_SHADER_FRAGMENT) - link_xfb_stride_layout_qualifiers(&ctx->Const, prog, shader_list, num_shaders); - - link_bindless_layout_qualifiers(prog, shader_list, num_shaders); - - link_layer_viewport_relative_qualifier(prog, gl_prog, shader_list, num_shaders); - - populate_symbol_table(linked, shader_list[0]->symbols); - - /* The pointer to the main function in the final linked shader (i.e., the - * copy of the original shader that contained the main function). - */ - ir_function_signature *const main_sig = - _mesa_get_main_function_signature(linked->symbols); - - /* Move any instructions other than variable declarations or function - * declarations into main. - */ - if (main_sig != NULL) { - exec_node *insertion_point = - move_non_declarations(linked->ir, &main_sig->body.head_sentinel, false, - linked); - - for (unsigned i = 0; i < num_shaders; i++) { - if (shader_list[i] == main) - continue; - - insertion_point = move_non_declarations(shader_list[i]->ir, - insertion_point, true, linked); - } - } - - if (!link_function_calls(prog, linked, shader_list, num_shaders)) { - _mesa_delete_linked_shader(ctx, linked); - return NULL; - } - - if (linked->Stage != MESA_SHADER_FRAGMENT) - link_output_variables(linked, shader_list, num_shaders); - - /* Make a pass over all variable declarations to ensure that arrays with - * unspecified sizes have a size specified. The size is inferred from the - * max_array_access field. - */ - array_sizing_visitor v; - v.run(linked->ir); - v.fixup_unnamed_interface_types(); - - /* Now that we know the sizes of all the arrays, we can replace .length() - * calls with a constant expression. - */ - array_length_to_const_visitor len_v; - len_v.run(linked->ir); - - /* Link up uniform blocks defined within this stage. */ - link_uniform_blocks(mem_ctx, &ctx->Const, prog, linked, &ubo_blocks, - &num_ubo_blocks, &ssbo_blocks, &num_ssbo_blocks); - - const unsigned max_uniform_blocks = - ctx->Const.Program[linked->Stage].MaxUniformBlocks; - if (num_ubo_blocks > max_uniform_blocks) { - linker_error(prog, "Too many %s uniform blocks (%d/%d)\n", - _mesa_shader_stage_to_string(linked->Stage), - num_ubo_blocks, max_uniform_blocks); - } - - const unsigned max_shader_storage_blocks = - ctx->Const.Program[linked->Stage].MaxShaderStorageBlocks; - if (num_ssbo_blocks > max_shader_storage_blocks) { - linker_error(prog, "Too many %s shader storage blocks (%d/%d)\n", - _mesa_shader_stage_to_string(linked->Stage), - num_ssbo_blocks, max_shader_storage_blocks); - } - - if (!prog->data->LinkStatus) { - _mesa_delete_linked_shader(ctx, linked); - return NULL; - } - - /* Copy ubo blocks to linked shader list */ - linked->Program->sh.UniformBlocks = - ralloc_array(linked, gl_uniform_block *, num_ubo_blocks); - ralloc_steal(linked, ubo_blocks); - for (unsigned i = 0; i < num_ubo_blocks; i++) { - linked->Program->sh.UniformBlocks[i] = &ubo_blocks[i]; - } - linked->Program->sh.NumUniformBlocks = num_ubo_blocks; - linked->Program->info.num_ubos = num_ubo_blocks; - - /* Copy ssbo blocks to linked shader list */ - linked->Program->sh.ShaderStorageBlocks = - ralloc_array(linked, gl_uniform_block *, num_ssbo_blocks); - ralloc_steal(linked, ssbo_blocks); - for (unsigned i = 0; i < num_ssbo_blocks; i++) { - linked->Program->sh.ShaderStorageBlocks[i] = &ssbo_blocks[i]; - } - linked->Program->info.num_ssbos = num_ssbo_blocks; - - /* At this point linked should contain all of the linked IR, so - * validate it to make sure nothing went wrong. - */ - validate_ir_tree(linked->ir); - - /* Set the size of geometry shader input arrays */ - if (linked->Stage == MESA_SHADER_GEOMETRY) { - unsigned num_vertices = - vertices_per_prim(gl_prog->info.gs.input_primitive); - array_resize_visitor input_resize_visitor(num_vertices, prog, - MESA_SHADER_GEOMETRY); - foreach_in_list(ir_instruction, ir, linked->ir) { - ir->accept(&input_resize_visitor); - } - } - - /* Set the linked source SHA1. */ - if (num_shaders == 1) { - memcpy(linked->linked_source_sha1, shader_list[0]->compiled_source_sha1, - SHA1_DIGEST_LENGTH); - } else { - struct mesa_sha1 sha1_ctx; - _mesa_sha1_init(&sha1_ctx); - - for (unsigned i = 0; i < num_shaders; i++) { - if (shader_list[i] == NULL) - continue; - - _mesa_sha1_update(&sha1_ctx, shader_list[i]->compiled_source_sha1, - SHA1_DIGEST_LENGTH); - } - _mesa_sha1_final(&sha1_ctx, linked->linked_source_sha1); - } - - return linked; -} - -/** - * Resize tessellation evaluation per-vertex inputs to the size of - * tessellation control per-vertex outputs. - */ -static void -resize_tes_inputs(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - if (prog->_LinkedShaders[MESA_SHADER_TESS_EVAL] == NULL) - return; - - gl_linked_shader *const tcs = prog->_LinkedShaders[MESA_SHADER_TESS_CTRL]; - gl_linked_shader *const tes = prog->_LinkedShaders[MESA_SHADER_TESS_EVAL]; - - /* If no control shader is present, then the TES inputs are statically - * sized to MaxPatchVertices; the actual size of the arrays won't be - * known until draw time. - */ - const int num_vertices = tcs - ? tcs->Program->info.tess.tcs_vertices_out - : consts->MaxPatchVertices; - - array_resize_visitor input_resize_visitor(num_vertices, prog, - MESA_SHADER_TESS_EVAL); - foreach_in_list(ir_instruction, ir, tes->ir) { - ir->accept(&input_resize_visitor); - } - - if (tcs) { - /* Convert the gl_PatchVerticesIn system value into a constant, since - * the value is known at this point. - */ - foreach_in_list(ir_instruction, ir, tes->ir) { - ir_variable *var = ir->as_variable(); - if (var && var->data.mode == ir_var_system_value && - var->data.location == SYSTEM_VALUE_VERTICES_IN) { - void *mem_ctx = ralloc_parent(var); - var->data.location = 0; - var->data.explicit_location = false; - var->data.mode = ir_var_auto; - var->constant_value = new(mem_ctx) ir_constant(num_vertices); - } - } - } -} - -/** - * Find a contiguous set of available bits in a bitmask. - * - * \param used_mask Bits representing used (1) and unused (0) locations - * \param needed_count Number of contiguous bits needed. - * - * \return - * Base location of the available bits on success or -1 on failure. - */ -static int -find_available_slots(unsigned used_mask, unsigned needed_count) -{ - unsigned needed_mask = (1 << needed_count) - 1; - const int max_bit_to_test = (8 * sizeof(used_mask)) - needed_count; - - /* The comparison to 32 is redundant, but without it GCC emits "warning: - * cannot optimize possibly infinite loops" for the loop below. - */ - if ((needed_count == 0) || (max_bit_to_test < 0) || (max_bit_to_test > 32)) - return -1; - - for (int i = 0; i <= max_bit_to_test; i++) { - if ((needed_mask & ~used_mask) == needed_mask) - return i; - - needed_mask <<= 1; - } - - return -1; -} - - -#define SAFE_MASK_FROM_INDEX(i) (((i) >= 32) ? ~0 : ((1 << (i)) - 1)) - -/** - * Assign locations for either VS inputs or FS outputs. - * - * \param mem_ctx Temporary ralloc context used for linking. - * \param prog Shader program whose variables need locations - * assigned. - * \param constants Driver specific constant values for the program. - * \param target_index Selector for the program target to receive location - * assignmnets. Must be either \c MESA_SHADER_VERTEX or - * \c MESA_SHADER_FRAGMENT. - * \param do_assignment Whether we are actually marking the assignment or we - * are just doing a dry-run checking. - * - * \return - * If locations are (or can be, in case of dry-running) successfully assigned, - * true is returned. Otherwise an error is emitted to the shader link log and - * false is returned. - */ -static bool -assign_attribute_or_color_locations(void *mem_ctx, - gl_shader_program *prog, - const struct gl_constants *constants, - unsigned target_index, - bool do_assignment) -{ - /* Maximum number of generic locations. This corresponds to either the - * maximum number of draw buffers or the maximum number of generic - * attributes. - */ - unsigned max_index = (target_index == MESA_SHADER_VERTEX) ? - constants->Program[target_index].MaxAttribs : - MAX2(constants->MaxDrawBuffers, constants->MaxDualSourceDrawBuffers); - - /* Mark invalid locations as being used. - */ - unsigned used_locations = ~SAFE_MASK_FROM_INDEX(max_index); - unsigned double_storage_locations = 0; - - assert((target_index == MESA_SHADER_VERTEX) - || (target_index == MESA_SHADER_FRAGMENT)); - - gl_linked_shader *const sh = prog->_LinkedShaders[target_index]; - if (sh == NULL) - return true; - - /* Operate in a total of four passes. - * - * 1. Invalidate the location assignments for all vertex shader inputs. - * - * 2. Assign locations for inputs that have user-defined (via - * glBindVertexAttribLocation) locations and outputs that have - * user-defined locations (via glBindFragDataLocation). - * - * 3. Sort the attributes without assigned locations by number of slots - * required in decreasing order. Fragmentation caused by attribute - * locations assigned by the application may prevent large attributes - * from having enough contiguous space. - * - * 4. Assign locations to any inputs without assigned locations. - */ - - const int generic_base = (target_index == MESA_SHADER_VERTEX) - ? (int) VERT_ATTRIB_GENERIC0 : (int) FRAG_RESULT_DATA0; - - const enum ir_variable_mode direction = - (target_index == MESA_SHADER_VERTEX) - ? ir_var_shader_in : ir_var_shader_out; - - - /* Temporary storage for the set of attributes that need locations assigned. - */ - struct temp_attr { - unsigned slots; - ir_variable *var; - - /* Used below in the call to qsort. */ - static int compare(const void *a, const void *b) - { - const temp_attr *const l = (const temp_attr *) a; - const temp_attr *const r = (const temp_attr *) b; - - /* Reversed because we want a descending order sort below. */ - return r->slots - l->slots; - } - } to_assign[32]; - assert(max_index <= 32); - - /* Temporary array for the set of attributes that have locations assigned, - * for the purpose of checking overlapping slots/components of (non-ES) - * fragment shader outputs. - */ - ir_variable *assigned[12 * 4]; /* (max # of FS outputs) * # components */ - unsigned assigned_attr = 0; - - unsigned num_attr = 0; - - foreach_in_list(ir_instruction, node, sh->ir) { - ir_variable *const var = node->as_variable(); - - if ((var == NULL) || (var->data.mode != (unsigned) direction)) - continue; - - if (var->data.explicit_location) { - if ((var->data.location >= (int)(max_index + generic_base)) - || (var->data.location < 0)) { - linker_error(prog, - "invalid explicit location %d specified for `%s'\n", - (var->data.location < 0) - ? var->data.location - : var->data.location - generic_base, - var->name); - return false; - } - } else if (target_index == MESA_SHADER_VERTEX) { - unsigned binding; - - if (prog->AttributeBindings->get(binding, var->name)) { - assert(binding >= VERT_ATTRIB_GENERIC0); - var->data.location = binding; - } - } else if (target_index == MESA_SHADER_FRAGMENT) { - unsigned binding; - unsigned index; - const char *name = var->name; - const glsl_type *type = var->type; - - while (type) { - /* Check if there's a binding for the variable name */ - if (prog->FragDataBindings->get(binding, name)) { - assert(binding >= FRAG_RESULT_DATA0); - var->data.location = binding; - - if (prog->FragDataIndexBindings->get(index, name)) { - var->data.index = index; - } - break; - } - - /* If not, but it's an array type, look for name[0] */ - if (type->is_array()) { - name = ralloc_asprintf(mem_ctx, "%s[0]", name); - type = type->fields.array; - continue; - } - - break; - } - } - - if (strcmp(var->name, "gl_LastFragData") == 0) - continue; - - /* From GL4.5 core spec, section 15.2 (Shader Execution): - * - * "Output binding assignments will cause LinkProgram to fail: - * ... - * If the program has an active output assigned to a location greater - * than or equal to the value of MAX_DUAL_SOURCE_DRAW_BUFFERS and has - * an active output assigned an index greater than or equal to one;" - */ - if (target_index == MESA_SHADER_FRAGMENT && var->data.index >= 1 && - var->data.location - generic_base >= - (int) constants->MaxDualSourceDrawBuffers) { - linker_error(prog, - "output location %d >= GL_MAX_DUAL_SOURCE_DRAW_BUFFERS " - "with index %u for %s\n", - var->data.location - generic_base, var->data.index, - var->name); - return false; - } - - const unsigned slots = var->type->count_attribute_slots(target_index == MESA_SHADER_VERTEX); - - /* If the variable is not a built-in and has a location statically - * assigned in the shader (presumably via a layout qualifier), make sure - * that it doesn't collide with other assigned locations. Otherwise, - * add it to the list of variables that need linker-assigned locations. - */ - if (var->data.location != -1) { - if (var->data.location >= generic_base && var->data.index < 1) { - /* From page 61 of the OpenGL 4.0 spec: - * - * "LinkProgram will fail if the attribute bindings assigned - * by BindAttribLocation do not leave not enough space to - * assign a location for an active matrix attribute or an - * active attribute array, both of which require multiple - * contiguous generic attributes." - * - * I think above text prohibits the aliasing of explicit and - * automatic assignments. But, aliasing is allowed in manual - * assignments of attribute locations. See below comments for - * the details. - * - * From OpenGL 4.0 spec, page 61: - * - * "It is possible for an application to bind more than one - * attribute name to the same location. This is referred to as - * aliasing. This will only work if only one of the aliased - * attributes is active in the executable program, or if no - * path through the shader consumes more than one attribute of - * a set of attributes aliased to the same location. A link - * error can occur if the linker determines that every path - * through the shader consumes multiple aliased attributes, - * but implementations are not required to generate an error - * in this case." - * - * From GLSL 4.30 spec, page 54: - * - * "A program will fail to link if any two non-vertex shader - * input variables are assigned to the same location. For - * vertex shaders, multiple input variables may be assigned - * to the same location using either layout qualifiers or via - * the OpenGL API. However, such aliasing is intended only to - * support vertex shaders where each execution path accesses - * at most one input per each location. Implementations are - * permitted, but not required, to generate link-time errors - * if they detect that every path through the vertex shader - * executable accesses multiple inputs assigned to any single - * location. For all shader types, a program will fail to link - * if explicit location assignments leave the linker unable - * to find space for other variables without explicit - * assignments." - * - * From OpenGL ES 3.0 spec, page 56: - * - * "Binding more than one attribute name to the same location - * is referred to as aliasing, and is not permitted in OpenGL - * ES Shading Language 3.00 vertex shaders. LinkProgram will - * fail when this condition exists. However, aliasing is - * possible in OpenGL ES Shading Language 1.00 vertex shaders. - * This will only work if only one of the aliased attributes - * is active in the executable program, or if no path through - * the shader consumes more than one attribute of a set of - * attributes aliased to the same location. A link error can - * occur if the linker determines that every path through the - * shader consumes multiple aliased attributes, but implemen- - * tations are not required to generate an error in this case." - * - * After looking at above references from OpenGL, OpenGL ES and - * GLSL specifications, we allow aliasing of vertex input variables - * in: OpenGL 2.0 (and above) and OpenGL ES 2.0. - * - * NOTE: This is not required by the spec but its worth mentioning - * here that we're not doing anything to make sure that no path - * through the vertex shader executable accesses multiple inputs - * assigned to any single location. - */ - - /* Mask representing the contiguous slots that will be used by - * this attribute. - */ - const unsigned attr = var->data.location - generic_base; - const unsigned use_mask = (1 << slots) - 1; - const char *const string = (target_index == MESA_SHADER_VERTEX) - ? "vertex shader input" : "fragment shader output"; - - /* Generate a link error if the requested locations for this - * attribute exceed the maximum allowed attribute location. - */ - if (attr + slots > max_index) { - linker_error(prog, - "insufficient contiguous locations " - "available for %s `%s' %d %d %d\n", string, - var->name, used_locations, use_mask, attr); - return false; - } - - /* Generate a link error if the set of bits requested for this - * attribute overlaps any previously allocated bits. - */ - if ((~(use_mask << attr) & used_locations) != used_locations) { - if (target_index == MESA_SHADER_FRAGMENT && !prog->IsES) { - /* From section 4.4.2 (Output Layout Qualifiers) of the GLSL - * 4.40 spec: - * - * "Additionally, for fragment shader outputs, if two - * variables are placed within the same location, they - * must have the same underlying type (floating-point or - * integer). No component aliasing of output variables or - * members is allowed. - */ - for (unsigned i = 0; i < assigned_attr; i++) { - unsigned assigned_slots = - assigned[i]->type->count_attribute_slots(false); - unsigned assig_attr = - assigned[i]->data.location - generic_base; - unsigned assigned_use_mask = (1 << assigned_slots) - 1; - - if ((assigned_use_mask << assig_attr) & - (use_mask << attr)) { - - const glsl_type *assigned_type = - assigned[i]->type->without_array(); - const glsl_type *type = var->type->without_array(); - if (assigned_type->base_type != type->base_type) { - linker_error(prog, "types do not match for aliased" - " %ss %s and %s\n", string, - assigned[i]->name, var->name); - return false; - } - - unsigned assigned_component_mask = - ((1 << assigned_type->vector_elements) - 1) << - assigned[i]->data.location_frac; - unsigned component_mask = - ((1 << type->vector_elements) - 1) << - var->data.location_frac; - if (assigned_component_mask & component_mask) { - linker_error(prog, "overlapping component is " - "assigned to %ss %s and %s " - "(component=%d)\n", - string, assigned[i]->name, var->name, - var->data.location_frac); - return false; - } - } - } - } else if (target_index == MESA_SHADER_FRAGMENT || - (prog->IsES && prog->GLSL_Version >= 300)) { - linker_error(prog, "overlapping location is assigned " - "to %s `%s' %d %d %d\n", string, var->name, - used_locations, use_mask, attr); - return false; - } else { - linker_warning(prog, "overlapping location is assigned " - "to %s `%s' %d %d %d\n", string, var->name, - used_locations, use_mask, attr); - } - } - - if (target_index == MESA_SHADER_FRAGMENT && !prog->IsES) { - /* Only track assigned variables for non-ES fragment shaders - * to avoid overflowing the array. - * - * At most one variable per fragment output component should - * reach this. - */ - assert(assigned_attr < ARRAY_SIZE(assigned)); - assigned[assigned_attr] = var; - assigned_attr++; - } - - used_locations |= (use_mask << attr); - - /* From the GL 4.5 core spec, section 11.1.1 (Vertex Attributes): - * - * "A program with more than the value of MAX_VERTEX_ATTRIBS - * active attribute variables may fail to link, unless - * device-dependent optimizations are able to make the program - * fit within available hardware resources. For the purposes - * of this test, attribute variables of the type dvec3, dvec4, - * dmat2x3, dmat2x4, dmat3, dmat3x4, dmat4x3, and dmat4 may - * count as consuming twice as many attributes as equivalent - * single-precision types. While these types use the same number - * of generic attributes as their single-precision equivalents, - * implementations are permitted to consume two single-precision - * vectors of internal storage for each three- or four-component - * double-precision vector." - * - * Mark this attribute slot as taking up twice as much space - * so we can count it properly against limits. According to - * issue (3) of the GL_ARB_vertex_attrib_64bit behavior, this - * is optional behavior, but it seems preferable. - */ - if (var->type->without_array()->is_dual_slot()) - double_storage_locations |= (use_mask << attr); - } - - continue; - } - - if (num_attr >= max_index) { - linker_error(prog, "too many %s (max %u)", - target_index == MESA_SHADER_VERTEX ? - "vertex shader inputs" : "fragment shader outputs", - max_index); - return false; - } - to_assign[num_attr].slots = slots; - to_assign[num_attr].var = var; - num_attr++; - } - - if (!do_assignment) - return true; - - if (target_index == MESA_SHADER_VERTEX) { - unsigned total_attribs_size = - util_bitcount(used_locations & SAFE_MASK_FROM_INDEX(max_index)) + - util_bitcount(double_storage_locations); - if (total_attribs_size > max_index) { - linker_error(prog, - "attempt to use %d vertex attribute slots only %d available ", - total_attribs_size, max_index); - return false; - } - } - - /* If all of the attributes were assigned locations by the application (or - * are built-in attributes with fixed locations), return early. This should - * be the common case. - */ - if (num_attr == 0) - return true; - - qsort(to_assign, num_attr, sizeof(to_assign[0]), temp_attr::compare); - - if (target_index == MESA_SHADER_VERTEX) { - /* VERT_ATTRIB_GENERIC0 is a pseudo-alias for VERT_ATTRIB_POS. It can - * only be explicitly assigned by via glBindAttribLocation. Mark it as - * reserved to prevent it from being automatically allocated below. - */ - find_deref_visitor find("gl_Vertex"); - find.run(sh->ir); - if (find.variable_found()) - used_locations |= (1 << 0); - } - - for (unsigned i = 0; i < num_attr; i++) { - /* Mask representing the contiguous slots that will be used by this - * attribute. - */ - const unsigned use_mask = (1 << to_assign[i].slots) - 1; - - int location = find_available_slots(used_locations, to_assign[i].slots); - - if (location < 0) { - const char *const string = (target_index == MESA_SHADER_VERTEX) - ? "vertex shader input" : "fragment shader output"; - - linker_error(prog, - "insufficient contiguous locations " - "available for %s `%s'\n", - string, to_assign[i].var->name); - return false; - } - - to_assign[i].var->data.location = generic_base + location; - used_locations |= (use_mask << location); - - if (to_assign[i].var->type->without_array()->is_dual_slot()) - double_storage_locations |= (use_mask << location); - } - - /* Now that we have all the locations, from the GL 4.5 core spec, section - * 11.1.1 (Vertex Attributes), dvec3, dvec4, dmat2x3, dmat2x4, dmat3, - * dmat3x4, dmat4x3, and dmat4 count as consuming twice as many attributes - * as equivalent single-precision types. - */ - if (target_index == MESA_SHADER_VERTEX) { - unsigned total_attribs_size = - util_bitcount(used_locations & SAFE_MASK_FROM_INDEX(max_index)) + - util_bitcount(double_storage_locations); - if (total_attribs_size > max_index) { - linker_error(prog, - "attempt to use %d vertex attribute slots only %d available ", - total_attribs_size, max_index); - return false; - } - } - - return true; -} - -/** - * Store the gl_FragDepth layout in the gl_shader_program struct. - */ -static void -store_fragdepth_layout(struct gl_shader_program *prog) -{ - if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) { - return; - } - - struct exec_list *ir = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]->ir; - - /* We don't look up the gl_FragDepth symbol directly because if - * gl_FragDepth is not used in the shader, it's removed from the IR. - * However, the symbol won't be removed from the symbol table. - * - * We're only interested in the cases where the variable is NOT removed - * from the IR. - */ - foreach_in_list(ir_instruction, node, ir) { - ir_variable *const var = node->as_variable(); - - if (var == NULL || var->data.mode != ir_var_shader_out) { - continue; - } - - if (strcmp(var->name, "gl_FragDepth") == 0) { - switch (var->data.depth_layout) { - case ir_depth_layout_none: - prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_NONE; - return; - case ir_depth_layout_any: - prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_ANY; - return; - case ir_depth_layout_greater: - prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_GREATER; - return; - case ir_depth_layout_less: - prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_LESS; - return; - case ir_depth_layout_unchanged: - prog->FragDepthLayout = FRAG_DEPTH_LAYOUT_UNCHANGED; - return; - default: - assert(0); - return; - } - } - } -} - - -/** - * Initializes explicit location slots to INACTIVE_UNIFORM_EXPLICIT_LOCATION - * for a variable, checks for overlaps between other uniforms using explicit - * locations. - */ -static int -reserve_explicit_locations(struct gl_shader_program *prog, - string_to_uint_map *map, ir_variable *var) -{ - unsigned slots = var->type->uniform_locations(); - unsigned max_loc = var->data.location + slots - 1; - unsigned return_value = slots; - - /* Resize remap table if locations do not fit in the current one. */ - if (max_loc + 1 > prog->NumUniformRemapTable) { - prog->UniformRemapTable = - reralloc(prog, prog->UniformRemapTable, - gl_uniform_storage *, - max_loc + 1); - - if (!prog->UniformRemapTable) { - linker_error(prog, "Out of memory during linking.\n"); - return -1; - } - - /* Initialize allocated space. */ - for (unsigned i = prog->NumUniformRemapTable; i < max_loc + 1; i++) - prog->UniformRemapTable[i] = NULL; - - prog->NumUniformRemapTable = max_loc + 1; - } - - for (unsigned i = 0; i < slots; i++) { - unsigned loc = var->data.location + i; - - /* Check if location is already used. */ - if (prog->UniformRemapTable[loc] == INACTIVE_UNIFORM_EXPLICIT_LOCATION) { - - /* Possibly same uniform from a different stage, this is ok. */ - unsigned hash_loc; - if (map->get(hash_loc, var->name) && hash_loc == loc - i) { - return_value = 0; - continue; - } - - /* ARB_explicit_uniform_location specification states: - * - * "No two default-block uniform variables in the program can have - * the same location, even if they are unused, otherwise a compiler - * or linker error will be generated." - */ - linker_error(prog, - "location qualifier for uniform %s overlaps " - "previously used location\n", - var->name); - return -1; - } - - /* Initialize location as inactive before optimization - * rounds and location assignment. - */ - prog->UniformRemapTable[loc] = INACTIVE_UNIFORM_EXPLICIT_LOCATION; - } - - /* Note, base location used for arrays. */ - map->put(var->data.location, var->name); - - return return_value; -} - -static bool -reserve_subroutine_explicit_locations(struct gl_shader_program *prog, - struct gl_program *p, - ir_variable *var) -{ - unsigned slots = var->type->uniform_locations(); - unsigned max_loc = var->data.location + slots - 1; - - /* Resize remap table if locations do not fit in the current one. */ - if (max_loc + 1 > p->sh.NumSubroutineUniformRemapTable) { - p->sh.SubroutineUniformRemapTable = - reralloc(p, p->sh.SubroutineUniformRemapTable, - gl_uniform_storage *, - max_loc + 1); - - if (!p->sh.SubroutineUniformRemapTable) { - linker_error(prog, "Out of memory during linking.\n"); - return false; - } - - /* Initialize allocated space. */ - for (unsigned i = p->sh.NumSubroutineUniformRemapTable; i < max_loc + 1; i++) - p->sh.SubroutineUniformRemapTable[i] = NULL; - - p->sh.NumSubroutineUniformRemapTable = max_loc + 1; - } - - for (unsigned i = 0; i < slots; i++) { - unsigned loc = var->data.location + i; - - /* Check if location is already used. */ - if (p->sh.SubroutineUniformRemapTable[loc] == INACTIVE_UNIFORM_EXPLICIT_LOCATION) { - - /* ARB_explicit_uniform_location specification states: - * "No two subroutine uniform variables can have the same location - * in the same shader stage, otherwise a compiler or linker error - * will be generated." - */ - linker_error(prog, - "location qualifier for uniform %s overlaps " - "previously used location\n", - var->name); - return false; - } - - /* Initialize location as inactive before optimization - * rounds and location assignment. - */ - p->sh.SubroutineUniformRemapTable[loc] = INACTIVE_UNIFORM_EXPLICIT_LOCATION; - } - - return true; -} -/** - * Check and reserve all explicit uniform locations, called before - * any optimizations happen to handle also inactive uniforms and - * inactive array elements that may get trimmed away. - */ -static void -check_explicit_uniform_locations(const struct gl_extensions *exts, - struct gl_shader_program *prog) -{ - prog->NumExplicitUniformLocations = 0; - - if (!exts->ARB_explicit_uniform_location) - return; - - /* This map is used to detect if overlapping explicit locations - * occur with the same uniform (from different stage) or a different one. - */ - string_to_uint_map *uniform_map = new string_to_uint_map; - - if (!uniform_map) { - linker_error(prog, "Out of memory during linking.\n"); - return; - } - - unsigned entries_total = 0; - unsigned mask = prog->data->linked_stages; - while (mask) { - const int i = u_bit_scan(&mask); - struct gl_program *p = prog->_LinkedShaders[i]->Program; - - foreach_in_list(ir_instruction, node, prog->_LinkedShaders[i]->ir) { - ir_variable *var = node->as_variable(); - if (!var || var->data.mode != ir_var_uniform) - continue; - - if (var->data.explicit_location) { - bool ret = false; - if (var->type->without_array()->is_subroutine()) - ret = reserve_subroutine_explicit_locations(prog, p, var); - else { - int slots = reserve_explicit_locations(prog, uniform_map, - var); - if (slots != -1) { - ret = true; - entries_total += slots; - } - } - if (!ret) { - delete uniform_map; - return; - } - } - } - } - - link_util_update_empty_uniform_locations(prog); - - delete uniform_map; - prog->NumExplicitUniformLocations = entries_total; -} - -static void -link_assign_subroutine_types(struct gl_shader_program *prog) -{ - unsigned mask = prog->data->linked_stages; - while (mask) { - const int i = u_bit_scan(&mask); - gl_program *p = prog->_LinkedShaders[i]->Program; - - p->sh.MaxSubroutineFunctionIndex = 0; - foreach_in_list(ir_instruction, node, prog->_LinkedShaders[i]->ir) { - ir_function *fn = node->as_function(); - if (!fn) - continue; - - if (fn->is_subroutine) - p->sh.NumSubroutineUniformTypes++; - - if (!fn->num_subroutine_types) - continue; - - /* these should have been calculated earlier. */ - assert(fn->subroutine_index != -1); - if (p->sh.NumSubroutineFunctions + 1 > MAX_SUBROUTINES) { - linker_error(prog, "Too many subroutine functions declared.\n"); - return; - } - p->sh.SubroutineFunctions = reralloc(p, p->sh.SubroutineFunctions, - struct gl_subroutine_function, - p->sh.NumSubroutineFunctions + 1); - p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].name.string = ralloc_strdup(p, fn->name); - resource_name_updated(&p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].name); - p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].num_compat_types = fn->num_subroutine_types; - p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].types = - ralloc_array(p, const struct glsl_type *, - fn->num_subroutine_types); - - /* From Section 4.4.4(Subroutine Function Layout Qualifiers) of the - * GLSL 4.5 spec: - * - * "Each subroutine with an index qualifier in the shader must be - * given a unique index, otherwise a compile or link error will be - * generated." - */ - for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) { - if (p->sh.SubroutineFunctions[j].index != -1 && - p->sh.SubroutineFunctions[j].index == fn->subroutine_index) { - linker_error(prog, "each subroutine index qualifier in the " - "shader must be unique\n"); - return; - } - } - p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].index = - fn->subroutine_index; - - if (fn->subroutine_index > (int)p->sh.MaxSubroutineFunctionIndex) - p->sh.MaxSubroutineFunctionIndex = fn->subroutine_index; - - for (int j = 0; j < fn->num_subroutine_types; j++) - p->sh.SubroutineFunctions[p->sh.NumSubroutineFunctions].types[j] = fn->subroutine_types[j]; - p->sh.NumSubroutineFunctions++; - } - } -} - -static void -verify_subroutine_associated_funcs(struct gl_shader_program *prog) -{ - unsigned mask = prog->data->linked_stages; - while (mask) { - const int i = u_bit_scan(&mask); - gl_program *p = prog->_LinkedShaders[i]->Program; - glsl_symbol_table *symbols = prog->_LinkedShaders[i]->symbols; - - /* Section 6.1.2 (Subroutines) of the GLSL 4.00 spec says: - * - * "A program will fail to compile or link if any shader - * or stage contains two or more functions with the same - * name if the name is associated with a subroutine type." - */ - for (unsigned j = 0; j < p->sh.NumSubroutineFunctions; j++) { - unsigned definitions = 0; - char *name = p->sh.SubroutineFunctions[j].name.string; - ir_function *fn = symbols->get_function(name); - - /* Calculate number of function definitions with the same name */ - foreach_in_list(ir_function_signature, sig, &fn->signatures) { - if (sig->is_defined) { - if (++definitions > 1) { - linker_error(prog, "%s shader contains two or more function " - "definitions with name `%s', which is " - "associated with a subroutine type.\n", - _mesa_shader_stage_to_string(i), - fn->name); - return; - } - } - } - } - } -} - - -static void -set_always_active_io(exec_list *ir, ir_variable_mode io_mode) -{ - assert(io_mode == ir_var_shader_in || io_mode == ir_var_shader_out); - - foreach_in_list(ir_instruction, node, ir) { - ir_variable *const var = node->as_variable(); - - if (var == NULL || var->data.mode != io_mode) - continue; - - /* Don't set always active on builtins that haven't been redeclared */ - if (var->data.how_declared == ir_var_declared_implicitly) - continue; - - var->data.always_active_io = true; - } -} - -/** - * When separate shader programs are enabled, only input/outputs between - * the stages of a multi-stage separate program can be safely removed - * from the shader interface. Other inputs/outputs must remain active. - */ -static void -disable_varying_optimizations_for_sso(struct gl_shader_program *prog) -{ - unsigned first, last; - assert(prog->SeparateShader); - - first = MESA_SHADER_STAGES; - last = 0; - - /* Determine first and last stage. Excluding the compute stage */ - for (unsigned i = 0; i < MESA_SHADER_COMPUTE; i++) { - if (!prog->_LinkedShaders[i]) - continue; - if (first == MESA_SHADER_STAGES) - first = i; - last = i; - } - - if (first == MESA_SHADER_STAGES) - return; - - for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) { - gl_linked_shader *sh = prog->_LinkedShaders[stage]; - if (!sh) - continue; - - /* Prevent the removal of inputs to the first and outputs from the last - * stage, unless they are the initial pipeline inputs or final pipeline - * outputs, respectively. - * - * The removal of IO between shaders in the same program is always - * allowed. - */ - if (stage == first && stage != MESA_SHADER_VERTEX) - set_always_active_io(sh->ir, ir_var_shader_in); - if (stage == last && stage != MESA_SHADER_FRAGMENT) - set_always_active_io(sh->ir, ir_var_shader_out); - } -} - -static bool -link_varyings(const struct gl_constants *consts, struct gl_shader_program *prog, - void *mem_ctx) -{ - /* Mark all generic shader inputs and outputs as unpaired. */ - for (unsigned i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) { - if (prog->_LinkedShaders[i] != NULL) { - link_invalidate_variable_locations(prog->_LinkedShaders[i]->ir); - } - } - - if (!assign_attribute_or_color_locations(mem_ctx, prog, consts, - MESA_SHADER_VERTEX, true)) { - return false; - } - - if (!assign_attribute_or_color_locations(mem_ctx, prog, consts, - MESA_SHADER_FRAGMENT, true)) { - return false; - } - - prog->last_vert_prog = NULL; - for (int i = MESA_SHADER_GEOMETRY; i >= MESA_SHADER_VERTEX; i--) { - if (prog->_LinkedShaders[i] == NULL) - continue; - - prog->last_vert_prog = prog->_LinkedShaders[i]->Program; - break; - } - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (prog->_LinkedShaders[i] == NULL) - continue; - - lower_vector_derefs(prog->_LinkedShaders[i]); - } - - return true; -} - - - -void -resource_name_updated(struct gl_resource_name *name) -{ - if (name->string) { - name->length = strlen(name->string); - - const char *last_square_bracket = strrchr(name->string, '['); - if (last_square_bracket) { - name->last_square_bracket = last_square_bracket - name->string; - name->suffix_is_zero_square_bracketed = - strcmp(last_square_bracket, "[0]") == 0; - } else { - name->last_square_bracket = -1; - name->suffix_is_zero_square_bracketed = false; - } - } else { - name->length = 0; - name->last_square_bracket = -1; - name->suffix_is_zero_square_bracketed = false; - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker.h deleted file mode 100644 index c0df0ff..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker.h +++ /dev/null @@ -1,198 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_LINKER_H -#define GLSL_LINKER_H - -#include "linker_util.h" - -struct gl_shader_program; -struct gl_shader; -struct gl_linked_shader; - -extern bool -link_function_calls(gl_shader_program *prog, gl_linked_shader *main, - gl_shader **shader_list, unsigned num_shaders); - -extern int -link_cross_validate_uniform_block(void *mem_ctx, - struct gl_uniform_block **linked_blocks, - unsigned int *num_linked_blocks, - struct gl_uniform_block *new_block); - -extern void -link_uniform_blocks(void *mem_ctx, - const struct gl_constants *consts, - struct gl_shader_program *prog, - struct gl_linked_shader *shader, - struct gl_uniform_block **ubo_blocks, - unsigned *num_ubo_blocks, - struct gl_uniform_block **ssbo_blocks, - unsigned *num_ssbo_blocks); - -bool -validate_intrastage_arrays(struct gl_shader_program *prog, - ir_variable *const var, - ir_variable *const existing, - bool match_precision = true); - -void -validate_intrastage_interface_blocks(struct gl_shader_program *prog, - const gl_shader **shader_list, - unsigned num_shaders); - -void -validate_interstage_inout_blocks(struct gl_shader_program *prog, - const gl_linked_shader *producer, - const gl_linked_shader *consumer); - -void -validate_interstage_uniform_blocks(struct gl_shader_program *prog, - gl_linked_shader **stages); - -extern struct gl_linked_shader * -link_intrastage_shaders(void *mem_ctx, - struct gl_context *ctx, - struct gl_shader_program *prog, - struct gl_shader **shader_list, - unsigned num_shaders, - bool allow_missing_main); - -extern unsigned -link_calculate_matrix_stride(const glsl_type *matrix, bool row_major, - enum glsl_interface_packing packing); - -/** - * Class for processing all of the leaf fields of a variable that corresponds - * to a program resource. - * - * The leaf fields are all the parts of the variable that the application - * could query using \c glGetProgramResourceIndex (or that could be returned - * by \c glGetProgramResourceName). - * - * Classes my derive from this class to implement specific functionality. - * This class only provides the mechanism to iterate over the leaves. Derived - * classes must implement \c ::visit_field and may override \c ::process. - */ -class program_resource_visitor { -public: - /** - * Begin processing a variable - * - * Classes that overload this function should call \c ::process from the - * base class to start the recursive processing of the variable. - * - * \param var The variable that is to be processed - * - * Calls \c ::visit_field for each leaf of the variable. - * - * \warning - * When processing a uniform block, this entry should only be used in cases - * where the row / column ordering of matrices in the block does not - * matter. For example, enumerating the names of members of the block, but - * not for determining the offsets of members. - */ - void process(ir_variable *var, bool use_std430_as_default); - - /** - * Begin processing a variable - * - * Classes that overload this function should call \c ::process from the - * base class to start the recursive processing of the variable. - * - * \param var The variable that is to be processed - * \param var_type The glsl_type reference of the variable - * - * Calls \c ::visit_field for each leaf of the variable. - * - * \warning - * When processing a uniform block, this entry should only be used in cases - * where the row / column ordering of matrices in the block does not - * matter. For example, enumerating the names of members of the block, but - * not for determining the offsets of members. - */ - void process(ir_variable *var, const glsl_type *var_type, - bool use_std430_as_default); - - /** - * Begin processing a variable of a structured type. - * - * This flavor of \c process should be used to handle structured types - * (i.e., structures, interfaces, or arrays there of) that need special - * name handling. A common usage is to handle cases where the block name - * (instead of the instance name) is used for an interface block. - * - * \param type Type that is to be processed, associated with \c name - * \param name Base name of the structured variable being processed - * - * \note - * \c type must be \c GLSL_TYPE_RECORD, \c GLSL_TYPE_INTERFACE, or an array - * there of. - */ - void process(const glsl_type *type, const char *name, - bool use_std430_as_default); - -protected: - /** - * Method invoked for each leaf of the variable - * - * \param type Type of the field. - * \param name Fully qualified name of the field. - * \param row_major For a matrix type, is it stored row-major. - * \param record_type Type of the record containing the field. - * \param last_field Set if \c name is the last field of the structure - * containing it. This will always be false for items - * not contained in a structure or interface block. - */ - virtual void visit_field(const glsl_type *type, const char *name, - bool row_major, const glsl_type *record_type, - const enum glsl_interface_packing packing, - bool last_field) = 0; - - virtual void enter_record(const glsl_type *type, const char *name, - bool row_major, const enum glsl_interface_packing packing); - - virtual void leave_record(const glsl_type *type, const char *name, - bool row_major, const enum glsl_interface_packing packing); - - virtual void set_buffer_offset(unsigned offset); - - virtual void set_record_array_count(unsigned record_array_count); - -private: - /** - * \param name_length Length of the current name \b not including the - * terminating \c NUL character. - * \param last_field Set if \c name is the last field of the structure - * containing it. This will always be false for items - * not contained in a structure or interface block. - */ - void recursion(const glsl_type *t, char **name, size_t name_length, - bool row_major, const glsl_type *record_type, - const enum glsl_interface_packing packing, - bool last_field, unsigned record_array_count, - const glsl_struct_field *named_ifc_member); -}; - -#endif /* GLSL_LINKER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker_util.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker_util.cpp deleted file mode 100644 index ad9c4f3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker_util.cpp +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ -#include - -#include "../glsl_types.h" -#include "linker_util.h" -#include "../../util/bitscan.h" -#include "../../util/set.h" -#include "ir_uniform.h" /* for gl_uniform_storage */ -#include "../../mesa/main/shader_types.h" -#include "../../mesa/main/consts_exts.h" - -/** - * Given a string identifying a program resource, break it into a base name - * and an optional array index in square brackets. - * - * If an array index is present, \c out_base_name_end is set to point to the - * "[" that precedes the array index, and the array index itself is returned - * as a long. - * - * If no array index is present (or if the array index is negative or - * mal-formed), \c out_base_name_end, is set to point to the null terminator - * at the end of the input string, and -1 is returned. - * - * Only the final array index is parsed; if the string contains other array - * indices (or structure field accesses), they are left in the base name. - * - * No attempt is made to check that the base name is properly formed; - * typically the caller will look up the base name in a hash table, so - * ill-formed base names simply turn into hash table lookup failures. - */ -long -link_util_parse_program_resource_name(const GLchar *name, const size_t len, - const GLchar **out_base_name_end) -{ - /* Section 7.3.1 ("Program Interfaces") of the OpenGL 4.3 spec says: - * - * "When an integer array element or block instance number is part of - * the name string, it will be specified in decimal form without a "+" - * or "-" sign or any extra leading zeroes. Additionally, the name - * string will not include white space anywhere in the string." - */ - - *out_base_name_end = name + len; - - if (len == 0 || name[len-1] != ']') - return -1; - - /* Walk backwards over the string looking for a non-digit character. This - * had better be the opening bracket for an array index. - * - * Initially, i specifies the location of the ']'. Since the string may - * contain only the ']' charcater, walk backwards very carefully. - */ - unsigned i; - for (i = len - 1; (i > 0) && isdigit(name[i-1]); --i) - /* empty */ ; - - if ((i == 0) || name[i-1] != '[') - return -1; - - long array_index = strtol(&name[i], NULL, 10); - if (array_index < 0) - return -1; - - /* Check for leading zero */ - if (name[i] == '0' && name[i+1] != ']') - return -1; - - *out_base_name_end = name + (i - 1); - return array_index; -} - -/* Utility methods shared between the GLSL IR and the NIR */ - -/* From the OpenGL 4.6 specification, 7.3.1.1 Naming Active Resources: - * - * "For an active shader storage block member declared as an array of an - * aggregate type, an entry will be generated only for the first array - * element, regardless of its type. Such block members are referred to as - * top-level arrays. If the block member is an aggregate type, the - * enumeration rules are then applied recursively." - */ -bool -link_util_should_add_buffer_variable(struct gl_shader_program *prog, - struct gl_uniform_storage *uniform, - int top_level_array_base_offset, - int top_level_array_size_in_bytes, - int second_element_offset, - int block_index) -{ - /* If the uniform is not a shader storage buffer or is not an array return - * true. - */ - if (!uniform->is_shader_storage || top_level_array_size_in_bytes == 0) - return true; - - int after_top_level_array = top_level_array_base_offset + - top_level_array_size_in_bytes; - - /* Check for a new block, or that we are not dealing with array elements of - * a top member array other than the first element. - */ - if (block_index != uniform->block_index || - uniform->offset >= after_top_level_array || - uniform->offset < second_element_offset) { - return true; - } - - return false; -} - -bool -link_util_add_program_resource(struct gl_shader_program *prog, - struct set *resource_set, - GLenum type, const void *data, uint8_t stages) -{ - assert(data); - - /* If resource already exists, do not add it again. */ - if (_mesa_set_search(resource_set, data)) - return true; - - prog->data->ProgramResourceList = - reralloc(prog->data, - prog->data->ProgramResourceList, - gl_program_resource, - prog->data->NumProgramResourceList + 1); - - if (!prog->data->ProgramResourceList) { - linker_error(prog, "Out of memory during linking.\n"); - return false; - } - - struct gl_program_resource *res = - &prog->data->ProgramResourceList[prog->data->NumProgramResourceList]; - - res->Type = type; - res->Data = data; - res->StageReferences = stages; - - prog->data->NumProgramResourceList++; - - _mesa_set_add(resource_set, data); - - return true; -} - -/** - * Search through the list of empty blocks to find one that fits the current - * uniform. - */ -int -link_util_find_empty_block(struct gl_shader_program *prog, - struct gl_uniform_storage *uniform) -{ - const unsigned entries = MAX2(1, uniform->array_elements); - - foreach_list_typed(struct empty_uniform_block, block, link, - &prog->EmptyUniformLocations) { - /* Found a block with enough slots to fit the uniform */ - if (block->slots == entries) { - unsigned start = block->start; - exec_node_remove(&block->link); - ralloc_free(block); - - return start; - /* Found a block with more slots than needed. It can still be used. */ - } else if (block->slots > entries) { - unsigned start = block->start; - block->start += entries; - block->slots -= entries; - - return start; - } - } - - return -1; -} - -void -link_util_update_empty_uniform_locations(struct gl_shader_program *prog) -{ - struct empty_uniform_block *current_block = NULL; - - for (unsigned i = 0; i < prog->NumUniformRemapTable; i++) { - /* We found empty space in UniformRemapTable. */ - if (prog->UniformRemapTable[i] == NULL) { - /* We've found the beginning of a new continous block of empty slots */ - if (!current_block || current_block->start + current_block->slots != i) { - current_block = rzalloc(prog, struct empty_uniform_block); - current_block->start = i; - exec_list_push_tail(&prog->EmptyUniformLocations, - ¤t_block->link); - } - - /* The current block continues, so we simply increment its slots */ - current_block->slots++; - } - } -} - -void -link_util_check_subroutine_resources(struct gl_shader_program *prog) -{ - unsigned mask = prog->data->linked_stages; - while (mask) { - const int i = u_bit_scan(&mask); - struct gl_program *p = prog->_LinkedShaders[i]->Program; - - if (p->sh.NumSubroutineUniformRemapTable > MAX_SUBROUTINE_UNIFORM_LOCATIONS) { - linker_error(prog, "Too many %s shader subroutine uniforms\n", - _mesa_shader_stage_to_string(i)); - } - } -} - -/** - * Validate uniform resources used by a program versus the implementation limits - */ -void -link_util_check_uniform_resources(const struct gl_constants *consts, - struct gl_shader_program *prog) -{ - unsigned total_uniform_blocks = 0; - unsigned total_shader_storage_blocks = 0; - - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - struct gl_linked_shader *sh = prog->_LinkedShaders[i]; - - if (sh == NULL) - continue; - - if (sh->num_uniform_components > - consts->Program[i].MaxUniformComponents) { - if (consts->GLSLSkipStrictMaxUniformLimitCheck) { - linker_warning(prog, "Too many %s shader default uniform block " - "components, but the driver will try to optimize " - "them out; this is non-portable out-of-spec " - "behavior\n", - _mesa_shader_stage_to_string(i)); - } else { - linker_error(prog, "Too many %s shader default uniform block " - "components\n", - _mesa_shader_stage_to_string(i)); - } - } - - if (sh->num_combined_uniform_components > - consts->Program[i].MaxCombinedUniformComponents) { - if (consts->GLSLSkipStrictMaxUniformLimitCheck) { - linker_warning(prog, "Too many %s shader uniform components, " - "but the driver will try to optimize them out; " - "this is non-portable out-of-spec behavior\n", - _mesa_shader_stage_to_string(i)); - } else { - linker_error(prog, "Too many %s shader uniform components\n", - _mesa_shader_stage_to_string(i)); - } - } - - total_shader_storage_blocks += sh->Program->info.num_ssbos; - total_uniform_blocks += sh->Program->info.num_ubos; - } - - if (total_uniform_blocks > consts->MaxCombinedUniformBlocks) { - linker_error(prog, "Too many combined uniform blocks (%d/%d)\n", - total_uniform_blocks, consts->MaxCombinedUniformBlocks); - } - - if (total_shader_storage_blocks > consts->MaxCombinedShaderStorageBlocks) { - linker_error(prog, "Too many combined shader storage blocks (%d/%d)\n", - total_shader_storage_blocks, - consts->MaxCombinedShaderStorageBlocks); - } - - for (unsigned i = 0; i < prog->data->NumUniformBlocks; i++) { - if (prog->data->UniformBlocks[i].UniformBufferSize > - consts->MaxUniformBlockSize) { - linker_error(prog, "Uniform block %s too big (%d/%d)\n", - prog->data->UniformBlocks[i].name.string, - prog->data->UniformBlocks[i].UniformBufferSize, - consts->MaxUniformBlockSize); - } - } - - for (unsigned i = 0; i < prog->data->NumShaderStorageBlocks; i++) { - if (prog->data->ShaderStorageBlocks[i].UniformBufferSize > - consts->MaxShaderStorageBlockSize) { - linker_error(prog, "Shader storage block %s too big (%d/%d)\n", - prog->data->ShaderStorageBlocks[i].name.string, - prog->data->ShaderStorageBlocks[i].UniformBufferSize, - consts->MaxShaderStorageBlockSize); - } - } -} - -void -link_util_calculate_subroutine_compat(struct gl_shader_program *prog) -{ - unsigned mask = prog->data->linked_stages; - while (mask) { - const int i = u_bit_scan(&mask); - struct gl_program *p = prog->_LinkedShaders[i]->Program; - - for (unsigned j = 0; j < p->sh.NumSubroutineUniformRemapTable; j++) { - if (p->sh.SubroutineUniformRemapTable[j] == INACTIVE_UNIFORM_EXPLICIT_LOCATION) - continue; - - struct gl_uniform_storage *uni = p->sh.SubroutineUniformRemapTable[j]; - - if (!uni) - continue; - - int count = 0; - if (p->sh.NumSubroutineFunctions == 0) { - linker_error(prog, "subroutine uniform %s defined but no valid functions found\n", uni->type->name); - continue; - } - for (unsigned f = 0; f < p->sh.NumSubroutineFunctions; f++) { - struct gl_subroutine_function *fn = &p->sh.SubroutineFunctions[f]; - for (int k = 0; k < fn->num_compat_types; k++) { - if (fn->types[k] == uni->type) { - count++; - break; - } - } - } - uni->num_compatible_subroutines = count; - } - } -} - -/** - * Recursive part of the public mark_array_elements_referenced function. - * - * The recursion occurs when an entire array-of- is accessed. See the - * implementation for more details. - * - * \param dr List of array_deref_range elements to be - * processed. - * \param count Number of array_deref_range elements to be - * processed. - * \param scale Current offset scale. - * \param linearized_index Current accumulated linearized array index. - */ -void -_mark_array_elements_referenced(const struct array_deref_range *dr, - unsigned count, unsigned scale, - unsigned linearized_index, - BITSET_WORD *bits) -{ - /* Walk through the list of array dereferences in least- to - * most-significant order. Along the way, accumulate the current - * linearized offset and the scale factor for each array-of-. - */ - for (unsigned i = 0; i < count; i++) { - if (dr[i].index < dr[i].size) { - linearized_index += dr[i].index * scale; - scale *= dr[i].size; - } else { - /* For each element in the current array, update the count and - * offset, then recurse to process the remaining arrays. - * - * There is some inefficency here if the last eBITSET_WORD *bitslement in the - * array_deref_range list specifies the entire array. In that case, - * the loop will make recursive calls with count == 0. In the call, - * all that will happen is the bit will be set. - */ - for (unsigned j = 0; j < dr[i].size; j++) { - _mark_array_elements_referenced(&dr[i + 1], - count - (i + 1), - scale * dr[i].size, - linearized_index + (j * scale), - bits); - } - - return; - } - } - - BITSET_SET(bits, linearized_index); -} - -/** - * Mark a set of array elements as accessed. - * - * If every \c array_deref_range is for a single index, only a single - * element will be marked. If any \c array_deref_range is for an entire - * array-of-, then multiple elements will be marked. - * - * Items in the \c array_deref_range list appear in least- to - * most-significant order. This is the \b opposite order the indices - * appear in the GLSL shader text. An array access like - * - * x = y[1][i][3]; - * - * would appear as - * - * { { 3, n }, { m, m }, { 1, p } } - * - * where n, m, and p are the sizes of the arrays-of-arrays. - * - * The set of marked array elements can later be queried by - * \c ::is_linearized_index_referenced. - * - * \param dr List of array_deref_range elements to be processed. - * \param count Number of array_deref_range elements to be processed. - */ -void -link_util_mark_array_elements_referenced(const struct array_deref_range *dr, - unsigned count, unsigned array_depth, - BITSET_WORD *bits) -{ - if (count != array_depth) - return; - - _mark_array_elements_referenced(dr, count, 1, 0, bits); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker_util.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker_util.h deleted file mode 100644 index 84124a7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/linker_util.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_LINKER_UTIL_H -#define GLSL_LINKER_UTIL_H - -#include "../../util/bitset.h" -#include "../../util/glheader.h" -#include "list.h" - -struct gl_constants; -struct gl_shader_program; -struct gl_uniform_storage; - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Sometimes there are empty slots left over in UniformRemapTable after we - * allocate slots to explicit locations. This struct represents a single - * continouous block of empty slots in UniformRemapTable. - */ -struct empty_uniform_block { - struct exec_node link; - /* The start location of the block */ - unsigned start; - /* The number of slots in the block */ - unsigned slots; -}; - -/** - * Describes an access of an array element or an access of the whole array - */ -struct array_deref_range { - /** - * Index that was accessed. - * - * All valid array indices are less than the size of the array. If index - * is equal to the size of the array, this means the entire array has been - * accessed (e.g., due to use of a non-constant index). - */ - unsigned index; - - /** Size of the array. Used for offset calculations. */ - unsigned size; -}; - -void -linker_error(struct gl_shader_program *prog, const char *fmt, ...); - -void -linker_warning(struct gl_shader_program *prog, const char *fmt, ...); - -long -link_util_parse_program_resource_name(const GLchar *name, const size_t len, - const GLchar **out_base_name_end); - -bool -link_util_should_add_buffer_variable(struct gl_shader_program *prog, - struct gl_uniform_storage *uniform, - int top_level_array_base_offset, - int top_level_array_size_in_bytes, - int second_element_offset, - int block_index); - -bool -link_util_add_program_resource(struct gl_shader_program *prog, - struct set *resource_set, - GLenum type, const void *data, uint8_t stages); - -int -link_util_find_empty_block(struct gl_shader_program *prog, - struct gl_uniform_storage *uniform); - -void -link_util_update_empty_uniform_locations(struct gl_shader_program *prog); - -void -link_util_check_subroutine_resources(struct gl_shader_program *prog); - -void -link_util_check_uniform_resources(const struct gl_constants *consts, - struct gl_shader_program *prog); - -void -link_util_calculate_subroutine_compat(struct gl_shader_program *prog); - -void -link_util_mark_array_elements_referenced(const struct array_deref_range *dr, - unsigned count, unsigned array_depth, - BITSET_WORD *bits); - -#ifdef __cplusplus -} -#endif - -#endif /* GLSL_LINKER_UTIL_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/list.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/list.h deleted file mode 100644 index 4cbf9c1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/list.h +++ /dev/null @@ -1,777 +0,0 @@ -/* - * Copyright © 2008, 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 list.h - * \brief Doubly-linked list abstract container type. - * - * Each doubly-linked list has a sentinel head and tail node. These nodes - * contain no data. The head sentinel can be identified by its \c prev - * pointer being \c NULL. The tail sentinel can be identified by its - * \c next pointer being \c NULL. - * - * A list is empty if either the head sentinel's \c next pointer points to the - * tail sentinel or the tail sentinel's \c prev poiner points to the head - * sentinel. The head sentinel and tail sentinel nodes are allocated within the - * list structure. - * - * Do note that this means that the list nodes will contain pointers into the - * list structure itself and as a result you may not \c realloc() an \c - * exec_list or any structure in which an \c exec_list is embedded. - */ - -#ifndef LIST_CONTAINER_H -#define LIST_CONTAINER_H - -#ifndef __cplusplus -#include -#endif -#include - -#include "../../util/ralloc.h" - -struct exec_node { - struct exec_node *next; - struct exec_node *prev; - -#ifdef __cplusplus - DECLARE_RZALLOC_CXX_OPERATORS(exec_node) - - exec_node() : next(NULL), prev(NULL) - { - /* empty */ - } - - const exec_node *get_next() const; - exec_node *get_next(); - - const exec_node *get_prev() const; - exec_node *get_prev(); - - void remove(); - - /** - * Link a node with itself - * - * This creates a sort of degenerate list that is occasionally useful. - */ - void self_link(); - - /** - * Insert a node in the list after the current node - */ - void insert_after(exec_node *after); - - /** - * Insert another list in the list after the current node - */ - void insert_after(struct exec_list *after); - - /** - * Insert a node in the list before the current node - */ - void insert_before(exec_node *before); - - /** - * Insert another list in the list before the current node - */ - void insert_before(struct exec_list *before); - - /** - * Replace the current node with the given node. - */ - void replace_with(exec_node *replacement); - - /** - * Is this the sentinel at the tail of the list? - */ - bool is_tail_sentinel() const; - - /** - * Is this the sentinel at the head of the list? - */ - bool is_head_sentinel() const; -#endif -}; - -static inline void -exec_node_init(struct exec_node *n) -{ - n->next = NULL; - n->prev = NULL; -} - -static inline const struct exec_node * -exec_node_get_next_const(const struct exec_node *n) -{ - return n->next; -} - -static inline struct exec_node * -exec_node_get_next(struct exec_node *n) -{ - return n->next; -} - -static inline const struct exec_node * -exec_node_get_prev_const(const struct exec_node *n) -{ - return n->prev; -} - -static inline struct exec_node * -exec_node_get_prev(struct exec_node *n) -{ - return n->prev; -} - -static inline void -exec_node_remove(struct exec_node *n) -{ - n->next->prev = n->prev; - n->prev->next = n->next; - n->next = NULL; - n->prev = NULL; -} - -static inline void -exec_node_self_link(struct exec_node *n) -{ - n->next = n; - n->prev = n; -} - -static inline void -exec_node_insert_after(struct exec_node *n, struct exec_node *after) -{ - after->next = n->next; - after->prev = n; - - n->next->prev = after; - n->next = after; -} - -static inline void -exec_node_insert_node_before(struct exec_node *n, struct exec_node *before) -{ - before->next = n; - before->prev = n->prev; - - n->prev->next = before; - n->prev = before; -} - -static inline void -exec_node_replace_with(struct exec_node *n, struct exec_node *replacement) -{ - replacement->prev = n->prev; - replacement->next = n->next; - - n->prev->next = replacement; - n->next->prev = replacement; -} - -static inline bool -exec_node_is_tail_sentinel(const struct exec_node *n) -{ - return n->next == NULL; -} - -static inline bool -exec_node_is_head_sentinel(const struct exec_node *n) -{ - return n->prev == NULL; -} - -#ifdef __cplusplus -inline const exec_node *exec_node::get_next() const -{ - return exec_node_get_next_const(this); -} - -inline exec_node *exec_node::get_next() -{ - return exec_node_get_next(this); -} - -inline const exec_node *exec_node::get_prev() const -{ - return exec_node_get_prev_const(this); -} - -inline exec_node *exec_node::get_prev() -{ - return exec_node_get_prev(this); -} - -inline void exec_node::remove() -{ - exec_node_remove(this); -} - -inline void exec_node::self_link() -{ - exec_node_self_link(this); -} - -inline void exec_node::insert_after(exec_node *after) -{ - exec_node_insert_after(this, after); -} - -inline void exec_node::insert_before(exec_node *before) -{ - exec_node_insert_node_before(this, before); -} - -inline void exec_node::replace_with(exec_node *replacement) -{ - exec_node_replace_with(this, replacement); -} - -inline bool exec_node::is_tail_sentinel() const -{ - return exec_node_is_tail_sentinel(this); -} - -inline bool exec_node::is_head_sentinel() const -{ - return exec_node_is_head_sentinel(this); -} -#endif - -#ifdef __cplusplus -/* This macro will not work correctly if `t' uses virtual inheritance. If you - * are using virtual inheritance, you deserve a slow and painful death. Enjoy! - */ -#define exec_list_offsetof(t, f, p) \ - (((char *) &((t *) p)->f) - ((char *) p)) -#else -#define exec_list_offsetof(t, f, p) offsetof(t, f) -#endif - -/** - * Get a pointer to the structure containing an exec_node - * - * Given a pointer to an \c exec_node embedded in a structure, get a pointer to - * the containing structure. - * - * \param type Base type of the structure containing the node - * \param node Pointer to the \c exec_node - * \param field Name of the field in \c type that is the embedded \c exec_node - */ -#define exec_node_data(type, node, field) \ - ((type *) (((uintptr_t) node) - exec_list_offsetof(type, field, node))) - -#ifdef __cplusplus -struct exec_node; -#endif - -struct exec_list { - struct exec_node head_sentinel; - struct exec_node tail_sentinel; - -#ifdef __cplusplus - DECLARE_RALLOC_CXX_OPERATORS(exec_list) - - exec_list() - { - make_empty(); - } - - void make_empty(); - - bool is_empty() const; - - const exec_node *get_head() const; - exec_node *get_head(); - const exec_node *get_head_raw() const; - exec_node *get_head_raw(); - - const exec_node *get_tail() const; - exec_node *get_tail(); - const exec_node *get_tail_raw() const; - exec_node *get_tail_raw(); - - unsigned length() const; - - void push_head(exec_node *n); - void push_tail(exec_node *n); - void push_degenerate_list_at_head(exec_node *n); - - /** - * Remove the first node from a list and return it - * - * \return - * The first node in the list or \c NULL if the list is empty. - * - * \sa exec_list::get_head - */ - exec_node *pop_head(); - - /** - * Move all of the nodes from this list to the target list - */ - void move_nodes_to(exec_list *target); - - /** - * Append all nodes from the source list to the end of the target list - */ - void append_list(exec_list *source); - - /** - * Prepend all nodes from the source list to the beginning of the target - * list - */ - void prepend_list(exec_list *source); -#endif -}; - -static inline void -exec_list_make_empty(struct exec_list *list) -{ - list->head_sentinel.next = &list->tail_sentinel; - list->head_sentinel.prev = NULL; - list->tail_sentinel.next = NULL; - list->tail_sentinel.prev = &list->head_sentinel; -} - -static inline bool -exec_list_is_empty(const struct exec_list *list) -{ - /* There are three ways to test whether a list is empty or not. - * - * - Check to see if the head sentinel's \c next is the tail sentinel. - * - Check to see if the tail sentinel's \c prev is the head sentinel. - * - Check to see if the head is the sentinel node by test whether its - * \c next pointer is \c NULL. - * - * The first two methods tend to generate better code on modern systems - * because they save a pointer dereference. - */ - return list->head_sentinel.next == &list->tail_sentinel; -} - -static inline bool -exec_list_is_singular(const struct exec_list *list) -{ - return !exec_list_is_empty(list) && - list->head_sentinel.next->next == &list->tail_sentinel; -} - -static inline const struct exec_node * -exec_list_get_head_const(const struct exec_list *list) -{ - return !exec_list_is_empty(list) ? list->head_sentinel.next : NULL; -} - -static inline struct exec_node * -exec_list_get_head(struct exec_list *list) -{ - return !exec_list_is_empty(list) ? list->head_sentinel.next : NULL; -} - -static inline const struct exec_node * -exec_list_get_head_raw_const(const struct exec_list *list) -{ - return list->head_sentinel.next; -} - -static inline struct exec_node * -exec_list_get_head_raw(struct exec_list *list) -{ - return list->head_sentinel.next; -} - -static inline const struct exec_node * -exec_list_get_tail_const(const struct exec_list *list) -{ - return !exec_list_is_empty(list) ? list->tail_sentinel.prev : NULL; -} - -static inline struct exec_node * -exec_list_get_tail(struct exec_list *list) -{ - return !exec_list_is_empty(list) ? list->tail_sentinel.prev : NULL; -} - -static inline const struct exec_node * -exec_list_get_tail_raw_const(const struct exec_list *list) -{ - return list->tail_sentinel.prev; -} - -static inline struct exec_node * -exec_list_get_tail_raw(struct exec_list *list) -{ - return list->tail_sentinel.prev; -} - -static inline unsigned -exec_list_length(const struct exec_list *list) -{ - unsigned size = 0; - struct exec_node *node; - - for (node = list->head_sentinel.next; node->next != NULL; node = node->next) { - size++; - } - - return size; -} - -static inline void -exec_list_push_head(struct exec_list *list, struct exec_node *n) -{ - n->next = list->head_sentinel.next; - n->prev = &list->head_sentinel; - - n->next->prev = n; - list->head_sentinel.next = n; -} - -static inline void -exec_list_push_tail(struct exec_list *list, struct exec_node *n) -{ - n->next = &list->tail_sentinel; - n->prev = list->tail_sentinel.prev; - - n->prev->next = n; - list->tail_sentinel.prev = n; -} - -static inline void -exec_list_push_degenerate_list_at_head(struct exec_list *list, struct exec_node *n) -{ - assert(n->prev->next == n); - - n->prev->next = list->head_sentinel.next; - list->head_sentinel.next->prev = n->prev; - n->prev = &list->head_sentinel; - list->head_sentinel.next = n; -} - -static inline struct exec_node * -exec_list_pop_head(struct exec_list *list) -{ - struct exec_node *const n = exec_list_get_head(list); - if (n != NULL) - exec_node_remove(n); - - return n; -} - -static inline void -exec_list_move_nodes_to(struct exec_list *list, struct exec_list *target) -{ - if (exec_list_is_empty(list)) { - exec_list_make_empty(target); - } else { - target->head_sentinel.next = list->head_sentinel.next; - target->head_sentinel.prev = NULL; - target->tail_sentinel.next = NULL; - target->tail_sentinel.prev = list->tail_sentinel.prev; - - target->head_sentinel.next->prev = &target->head_sentinel; - target->tail_sentinel.prev->next = &target->tail_sentinel; - - exec_list_make_empty(list); - } -} - -static inline void -exec_list_append(struct exec_list *list, struct exec_list *source) -{ - if (exec_list_is_empty(source)) - return; - - /* Link the first node of the source with the last node of the target list. - */ - list->tail_sentinel.prev->next = source->head_sentinel.next; - source->head_sentinel.next->prev = list->tail_sentinel.prev; - - /* Make the tail of the source list be the tail of the target list. - */ - list->tail_sentinel.prev = source->tail_sentinel.prev; - list->tail_sentinel.prev->next = &list->tail_sentinel; - - /* Make the source list empty for good measure. - */ - exec_list_make_empty(source); -} - -static inline void -exec_node_insert_list_after(struct exec_node *n, struct exec_list *after) -{ - if (exec_list_is_empty(after)) - return; - - after->tail_sentinel.prev->next = n->next; - after->head_sentinel.next->prev = n; - - n->next->prev = after->tail_sentinel.prev; - n->next = after->head_sentinel.next; - - exec_list_make_empty(after); -} - -static inline void -exec_list_prepend(struct exec_list *list, struct exec_list *source) -{ - exec_list_append(source, list); - exec_list_move_nodes_to(source, list); -} - -static inline void -exec_node_insert_list_before(struct exec_node *n, struct exec_list *before) -{ - if (exec_list_is_empty(before)) - return; - - before->tail_sentinel.prev->next = n; - before->head_sentinel.next->prev = n->prev; - - n->prev->next = before->head_sentinel.next; - n->prev = before->tail_sentinel.prev; - - exec_list_make_empty(before); -} - -static inline void -exec_list_validate(const struct exec_list *list) -{ - const struct exec_node *node; - - assert(list->head_sentinel.next->prev == &list->head_sentinel); - assert(list->head_sentinel.prev == NULL); - assert(list->tail_sentinel.next == NULL); - assert(list->tail_sentinel.prev->next == &list->tail_sentinel); - - /* We could try to use one of the interators below for this but they all - * either require C++ or assume the exec_node is embedded in a structure - * which is not the case for this function. - */ - for (node = list->head_sentinel.next; node->next != NULL; node = node->next) { - assert(node->next->prev == node); - assert(node->prev->next == node); - } -} - -#ifdef __cplusplus -inline void exec_list::make_empty() -{ - exec_list_make_empty(this); -} - -inline bool exec_list::is_empty() const -{ - return exec_list_is_empty(this); -} - -inline const exec_node *exec_list::get_head() const -{ - return exec_list_get_head_const(this); -} - -inline exec_node *exec_list::get_head() -{ - return exec_list_get_head(this); -} - -inline const exec_node *exec_list::get_head_raw() const -{ - return exec_list_get_head_raw_const(this); -} - -inline exec_node *exec_list::get_head_raw() -{ - return exec_list_get_head_raw(this); -} - -inline const exec_node *exec_list::get_tail() const -{ - return exec_list_get_tail_const(this); -} - -inline exec_node *exec_list::get_tail() -{ - return exec_list_get_tail(this); -} - -inline const exec_node *exec_list::get_tail_raw() const -{ - return exec_list_get_tail_raw_const(this); -} - -inline exec_node *exec_list::get_tail_raw() -{ - return exec_list_get_tail_raw(this); -} - -inline unsigned exec_list::length() const -{ - return exec_list_length(this); -} - -inline void exec_list::push_head(exec_node *n) -{ - exec_list_push_head(this, n); -} - -inline void exec_list::push_tail(exec_node *n) -{ - exec_list_push_tail(this, n); -} - -inline void exec_list::push_degenerate_list_at_head(exec_node *n) -{ - exec_list_push_degenerate_list_at_head(this, n); -} - -inline exec_node *exec_list::pop_head() -{ - return exec_list_pop_head(this); -} - -inline void exec_list::move_nodes_to(exec_list *target) -{ - exec_list_move_nodes_to(this, target); -} - -inline void exec_list::append_list(exec_list *source) -{ - exec_list_append(this, source); -} - -inline void exec_node::insert_after(exec_list *after) -{ - exec_node_insert_list_after(this, after); -} - -inline void exec_list::prepend_list(exec_list *source) -{ - exec_list_prepend(this, source); -} - -inline void exec_node::insert_before(exec_list *before) -{ - exec_node_insert_list_before(this, before); -} -#endif - -#define exec_node_typed_forward(__node, __type) \ - (!exec_node_is_tail_sentinel(__node) ? (__type) (__node) : NULL) - -#define exec_node_typed_backward(__node, __type) \ - (!exec_node_is_head_sentinel(__node) ? (__type) (__node) : NULL) - -#define foreach_in_list(__type, __inst, __list) \ - for (__type *__inst = exec_node_typed_forward((__list)->head_sentinel.next, __type *); \ - (__inst) != NULL; \ - (__inst) = exec_node_typed_forward((__inst)->next, __type *)) - -#define foreach_in_list_reverse(__type, __inst, __list) \ - for (__type *__inst = exec_node_typed_backward((__list)->tail_sentinel.prev, __type *); \ - (__inst) != NULL; \ - (__inst) = exec_node_typed_backward((__inst)->prev, __type *)) - -/** - * This version is safe even if the current node is removed. - */ - -#define foreach_in_list_safe(__type, __node, __list) \ - for (__type *__node = exec_node_typed_forward((__list)->head_sentinel.next, __type *), \ - *__next = (__node) ? exec_node_typed_forward((__list)->head_sentinel.next->next, __type *) : NULL; \ - (__node) != NULL; \ - (__node) = __next, __next = __next ? exec_node_typed_forward(__next->next, __type *) : NULL) - -#define foreach_in_list_reverse_safe(__type, __node, __list) \ - for (__type *__node = exec_node_typed_backward((__list)->tail_sentinel.prev, __type *), \ - *__prev = (__node) ? exec_node_typed_backward((__list)->tail_sentinel.prev->prev, __type *) : NULL; \ - (__node) != NULL; \ - (__node) = __prev, __prev = __prev ? exec_node_typed_backward(__prev->prev, __type *) : NULL) - -#define foreach_in_list_use_after(__type, __inst, __list) \ - __type *__inst; \ - for ((__inst) = exec_node_typed_forward((__list)->head_sentinel.next, __type *); \ - (__inst) != NULL; \ - (__inst) = exec_node_typed_forward((__inst)->next, __type *)) - -/** - * Iterate through two lists at once. Stops at the end of the shorter list. - * - * This is safe against either current node being removed or replaced. - */ -#define foreach_two_lists(__node1, __list1, __node2, __list2) \ - for (struct exec_node * __node1 = (__list1)->head_sentinel.next, \ - * __node2 = (__list2)->head_sentinel.next, \ - * __next1 = __node1->next, \ - * __next2 = __node2->next \ - ; __next1 != NULL && __next2 != NULL \ - ; __node1 = __next1, \ - __node2 = __next2, \ - __next1 = __next1->next, \ - __next2 = __next2->next) - -#define exec_node_data_forward(type, node, field) \ - (!exec_node_is_tail_sentinel(node) ? exec_node_data(type, node, field) : NULL) - -#define exec_node_data_backward(type, node, field) \ - (!exec_node_is_head_sentinel(node) ? exec_node_data(type, node, field) : NULL) - -#define foreach_list_typed(__type, __node, __field, __list) \ - for (__type * __node = \ - exec_node_data_forward(__type, (__list)->head_sentinel.next, __field); \ - (__node) != NULL; \ - (__node) = exec_node_data_forward(__type, (__node)->__field.next, __field)) - -#define foreach_list_typed_from(__type, __node, __field, __list, __start) \ - for (__type * __node = exec_node_data_forward(__type, (__start), __field); \ - (__node) != NULL; \ - (__node) = exec_node_data_forward(__type, (__node)->__field.next, __field)) - -#define foreach_list_typed_reverse(__type, __node, __field, __list) \ - for (__type * __node = \ - exec_node_data_backward(__type, (__list)->tail_sentinel.prev, __field); \ - (__node) != NULL; \ - (__node) = exec_node_data_backward(__type, (__node)->__field.prev, __field)) - -#define foreach_list_typed_safe(__type, __node, __field, __list) \ - for (__type * __node = \ - exec_node_data_forward(__type, (__list)->head_sentinel.next, __field), \ - * __next = (__node) ? \ - exec_node_data_forward(__type, (__node)->__field.next, __field) : NULL; \ - (__node) != NULL; \ - (__node) = __next, __next = (__next && (__next)->__field.next) ? \ - exec_node_data_forward(__type, (__next)->__field.next, __field) : NULL) - -#define foreach_list_typed_reverse_safe(__type, __node, __field, __list) \ - for (__type * __node = \ - exec_node_data_backward(__type, (__list)->tail_sentinel.prev, __field), \ - * __prev = (__node) ? \ - exec_node_data_backward(__type, (__node)->__field.prev, __field) : NULL; \ - (__node) != NULL; \ - (__node) = __prev, __prev = (__prev && (__prev)->__field.prev) ? \ - exec_node_data_backward(__type, (__prev)->__field.prev, __field) : NULL) - -#endif /* LIST_CONTAINER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/loop_analysis.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/loop_analysis.cpp deleted file mode 100644 index 33ccc61..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/loop_analysis.cpp +++ /dev/null @@ -1,845 +0,0 @@ - -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../glsl_types.h" -#include "loop_analysis.h" -#include "ir_hierarchical_visitor.h" - -static void try_add_loop_terminator(loop_variable_state *ls, ir_if *ir); - -static bool all_expression_operands_are_loop_constant(ir_rvalue *, - hash_table *); - -static ir_rvalue *get_basic_induction_increment(ir_assignment *, hash_table *); - -/** - * Find an initializer of a variable outside a loop - * - * Works backwards from the loop to find the pre-loop value of the variable. - * This is used, for example, to find the initial value of loop induction - * variables. - * - * \param loop Loop where \c var is an induction variable - * \param var Variable whose initializer is to be found - * - * \return - * The \c ir_rvalue assigned to the variable outside the loop. May return - * \c NULL if no initializer can be found. - */ -static ir_rvalue * -find_initial_value(ir_loop *loop, ir_variable *var) -{ - for (exec_node *node = loop->prev; !node->is_head_sentinel(); - node = node->prev) { - ir_instruction *ir = (ir_instruction *) node; - - switch (ir->ir_type) { - case ir_type_call: - case ir_type_loop: - case ir_type_loop_jump: - case ir_type_return: - case ir_type_if: - return NULL; - - case ir_type_function: - case ir_type_function_signature: - assert(!"Should not get here."); - return NULL; - - case ir_type_assignment: { - ir_assignment *assign = ir->as_assignment(); - ir_variable *assignee = assign->lhs->whole_variable_referenced(); - - if (assignee == var) - return (assign->rhs != NULL) ? NULL : assign->rhs; - //return (assign->condition != NULL) ? NULL : assign->rhs; - - break; - } - - default: - break; - } - } - - return NULL; -} - - -static int -calculate_iterations(ir_rvalue *from, ir_rvalue *to, ir_rvalue *increment, - enum ir_expression_operation op, bool continue_from_then, - bool swap_compare_operands, bool inc_before_terminator) -{ - if (from == NULL || to == NULL || increment == NULL) - return -1; - - void *mem_ctx = ralloc_context(NULL); - - ir_expression *const sub = - new(mem_ctx) ir_expression(ir_binop_sub, from->type, to, from); - - ir_expression *const div = - new(mem_ctx) ir_expression(ir_binop_div, sub->type, sub, increment); - - ir_constant *iter = div->constant_expression_value(mem_ctx); - if (iter == NULL) { - ralloc_free(mem_ctx); - return -1; - } - - if (!iter->type->is_integer_32()) { - const ir_expression_operation op = iter->type->is_double() - ? ir_unop_d2i : ir_unop_f2i; - ir_rvalue *cast = - new(mem_ctx) ir_expression(op, glsl_type::int_type, iter, NULL); - - iter = cast->constant_expression_value(mem_ctx); - } - - int iter_value = iter->get_int_component(0); - - /* Code after this block works under assumption that iterator will be - * incremented or decremented until it hits the limit, - * however the loop condition can be false on the first iteration. - * Handle such loops first. - */ - { - ir_rvalue *first_value = from; - if (inc_before_terminator) { - first_value = - new(mem_ctx) ir_expression(ir_binop_add, from->type, from, increment); - } - - ir_expression *cmp = swap_compare_operands - ? new(mem_ctx) ir_expression(op, glsl_type::bool_type, to, first_value) - : new(mem_ctx) ir_expression(op, glsl_type::bool_type, first_value, to); - if (continue_from_then) - cmp = new(mem_ctx) ir_expression(ir_unop_logic_not, cmp); - - ir_constant *const cmp_result = cmp->constant_expression_value(mem_ctx); - assert(cmp_result != NULL); - if (cmp_result->get_bool_component(0)) { - ralloc_free(mem_ctx); - return 0; - } - } - - /* Make sure that the calculated number of iterations satisfies the exit - * condition. This is needed to catch off-by-one errors and some types of - * ill-formed loops. For example, we need to detect that the following - * loop does not have a maximum iteration count. - * - * for (float x = 0.0; x != 0.9; x += 0.2) - * ; - */ - const int bias[] = { -1, 0, 1 }; - bool valid_loop = false; - - for (unsigned i = 0; i < ARRAY_SIZE(bias); i++) { - /* Increment may be of type int, uint or float. */ - switch (increment->type->base_type) { - case GLSL_TYPE_INT: - iter = new(mem_ctx) ir_constant(iter_value + bias[i]); - break; - case GLSL_TYPE_UINT: - iter = new(mem_ctx) ir_constant(unsigned(iter_value + bias[i])); - break; - case GLSL_TYPE_FLOAT: - iter = new(mem_ctx) ir_constant(float(iter_value + bias[i])); - break; - case GLSL_TYPE_DOUBLE: - iter = new(mem_ctx) ir_constant(double(iter_value + bias[i])); - break; - default: - unreachable("Unsupported type for loop iterator."); - } - - ir_expression *const mul = - new(mem_ctx) ir_expression(ir_binop_mul, increment->type, iter, - increment); - - ir_expression *const add = - new(mem_ctx) ir_expression(ir_binop_add, mul->type, mul, from); - - ir_expression *cmp = swap_compare_operands - ? new(mem_ctx) ir_expression(op, glsl_type::bool_type, to, add) - : new(mem_ctx) ir_expression(op, glsl_type::bool_type, add, to); - if (continue_from_then) - cmp = new(mem_ctx) ir_expression(ir_unop_logic_not, cmp); - - ir_constant *const cmp_result = cmp->constant_expression_value(mem_ctx); - - assert(cmp_result != NULL); - if (cmp_result->get_bool_component(0)) { - iter_value += bias[i]; - valid_loop = true; - break; - } - } - - ralloc_free(mem_ctx); - - if (inc_before_terminator) { - iter_value--; - } - - return (valid_loop) ? iter_value : -1; -} - -static bool -incremented_before_terminator(ir_loop *loop, ir_variable *var, - ir_if *terminator) -{ - for (exec_node *node = loop->body_instructions.get_head(); - !node->is_tail_sentinel(); - node = node->get_next()) { - ir_instruction *ir = (ir_instruction *) node; - - switch (ir->ir_type) { - case ir_type_if: - if (ir->as_if() == terminator) - return false; - break; - - case ir_type_assignment: { - ir_assignment *assign = ir->as_assignment(); - ir_variable *assignee = assign->lhs->whole_variable_referenced(); - - if (assignee == var) { - //assert(assign->condition == NULL); - return true; - } - - break; - } - - default: - break; - } - } - - unreachable("Unable to find induction variable"); -} - -/** - * Record the fact that the given loop variable was referenced inside the loop. - * - * \arg in_assignee is true if the reference was on the LHS of an assignment. - * - * \arg in_conditional_code_or_nested_loop is true if the reference occurred - * inside an if statement or a nested loop. - * - * \arg current_assignment is the ir_assignment node that the loop variable is - * on the LHS of, if any (ignored if \c in_assignee is false). - */ -void -loop_variable::record_reference(bool in_assignee, - bool in_conditional_code_or_nested_loop, - ir_assignment *current_assignment) -{ - if (in_assignee) { - assert(current_assignment != NULL); - - if (in_conditional_code_or_nested_loop /*|| current_assignment->condition != NULL*/) { - this->conditional_or_nested_assignment = true; - } - - if (this->first_assignment == NULL) { - assert(this->num_assignments == 0); - - this->first_assignment = current_assignment; - } - - this->num_assignments++; - } else if (this->first_assignment == current_assignment) { - /* This catches the case where the variable is used in the RHS of an - * assignment where it is also in the LHS. - */ - this->read_before_write = true; - } -} - - -loop_state::loop_state() -{ - this->ht = _mesa_pointer_hash_table_create(NULL); - this->mem_ctx = ralloc_context(NULL); - this->loop_found = false; -} - - -loop_state::~loop_state() -{ - _mesa_hash_table_destroy(this->ht, NULL); - ralloc_free(this->mem_ctx); -} - - -loop_variable_state * -loop_state::insert(ir_loop *ir) -{ - loop_variable_state *ls = new(this->mem_ctx) loop_variable_state; - - _mesa_hash_table_insert(this->ht, ir, ls); - this->loop_found = true; - - return ls; -} - - -loop_variable_state * -loop_state::get(const ir_loop *ir) -{ - hash_entry *entry = _mesa_hash_table_search(this->ht, ir); - return entry ? (loop_variable_state *) entry->data : NULL; -} - - -loop_variable * -loop_variable_state::get(const ir_variable *ir) -{ - if (ir == NULL) - return NULL; - - hash_entry *entry = _mesa_hash_table_search(this->var_hash, ir); - return entry ? (loop_variable *) entry->data : NULL; -} - - -loop_variable * -loop_variable_state::insert(ir_variable *var) -{ - void *mem_ctx = ralloc_parent(this); - loop_variable *lv = rzalloc(mem_ctx, loop_variable); - - lv->var = var; - - _mesa_hash_table_insert(this->var_hash, lv->var, lv); - this->variables.push_tail(lv); - - return lv; -} - - -loop_terminator * -loop_variable_state::insert(ir_if *if_stmt, bool continue_from_then) -{ - void *mem_ctx = ralloc_parent(this); - loop_terminator *t = new(mem_ctx) loop_terminator(); - - t->ir = if_stmt; - t->continue_from_then = continue_from_then; - - this->terminators.push_tail(t); - - return t; -} - - -/** - * If the given variable already is recorded in the state for this loop, - * return the corresponding loop_variable object that records information - * about it. - * - * Otherwise, create a new loop_variable object to record information about - * the variable, and set its \c read_before_write field appropriately based on - * \c in_assignee. - * - * \arg in_assignee is true if this variable was encountered on the LHS of an - * assignment. - */ -loop_variable * -loop_variable_state::get_or_insert(ir_variable *var, bool in_assignee) -{ - loop_variable *lv = this->get(var); - - if (lv == NULL) { - lv = this->insert(var); - lv->read_before_write = !in_assignee; - } - - return lv; -} - - -namespace { - - class loop_analysis : public ir_hierarchical_visitor { - public: - loop_analysis(loop_state *loops); - - virtual ir_visitor_status visit(ir_loop_jump *); - virtual ir_visitor_status visit(ir_dereference_variable *); - - virtual ir_visitor_status visit_enter(ir_call *); - - virtual ir_visitor_status visit_enter(ir_loop *); - virtual ir_visitor_status visit_leave(ir_loop *); - virtual ir_visitor_status visit_enter(ir_assignment *); - virtual ir_visitor_status visit_leave(ir_assignment *); - virtual ir_visitor_status visit_enter(ir_if *); - virtual ir_visitor_status visit_leave(ir_if *); - - loop_state *loops; - - int if_statement_depth; - - ir_assignment *current_assignment; - - exec_list state; - }; - -} /* anonymous namespace */ - -loop_analysis::loop_analysis(loop_state *loops) - : loops(loops), if_statement_depth(0), current_assignment(NULL) -{ - /* empty */ -} - - -ir_visitor_status -loop_analysis::visit(ir_loop_jump *ir) -{ - (void) ir; - - assert(!this->state.is_empty()); - - loop_variable_state *const ls = - (loop_variable_state *) this->state.get_head(); - - ls->num_loop_jumps++; - - return visit_continue; -} - - -ir_visitor_status -loop_analysis::visit_enter(ir_call *) -{ - /* Mark every loop that we're currently analyzing as containing an ir_call - * (even those at outer nesting levels). - */ - foreach_in_list(loop_variable_state, ls, &this->state) { - ls->contains_calls = true; - } - - return visit_continue_with_parent; -} - - -ir_visitor_status -loop_analysis::visit(ir_dereference_variable *ir) -{ - /* If we're not somewhere inside a loop, there's nothing to do. - */ - if (this->state.is_empty()) - return visit_continue; - - bool nested = false; - - foreach_in_list(loop_variable_state, ls, &this->state) { - ir_variable *var = ir->variable_referenced(); - loop_variable *lv = ls->get_or_insert(var, this->in_assignee); - - lv->record_reference(this->in_assignee, - nested || this->if_statement_depth > 0, - this->current_assignment); - nested = true; - } - - return visit_continue; -} - -ir_visitor_status -loop_analysis::visit_enter(ir_loop *ir) -{ - loop_variable_state *ls = this->loops->insert(ir); - this->state.push_head(ls); - - return visit_continue; -} - -ir_visitor_status -loop_analysis::visit_leave(ir_loop *ir) -{ - loop_variable_state *const ls = - (loop_variable_state *) this->state.pop_head(); - - /* Function calls may contain side effects. These could alter any of our - * variables in ways that cannot be known, and may even terminate shader - * execution (say, calling discard in the fragment shader). So we can't - * rely on any of our analysis about assignments to variables. - * - * We could perform some conservative analysis (prove there's no statically - * possible assignment, etc.) but it isn't worth it for now; function - * inlining will allow us to unroll loops anyway. - */ - if (ls->contains_calls) - return visit_continue; - - foreach_in_list(ir_instruction, node, &ir->body_instructions) { - /* Skip over declarations at the start of a loop. - */ - if (node->as_variable()) - continue; - - ir_if *if_stmt = ((ir_instruction *) node)->as_if(); - - if (if_stmt != NULL) - try_add_loop_terminator(ls, if_stmt); - } - - - foreach_in_list_safe(loop_variable, lv, &ls->variables) { - /* Move variables that are already marked as being loop constant to - * a separate list. These trivially don't need to be tested. - */ - if (lv->is_loop_constant()) { - lv->remove(); - ls->constants.push_tail(lv); - } - } - - /* Each variable assigned in the loop that isn't already marked as being loop - * constant might still be loop constant. The requirements at this point - * are: - * - * - Variable is written before it is read. - * - * - Only one assignment to the variable. - * - * - All operands on the RHS of the assignment are also loop constants. - * - * The last requirement is the reason for the progress loop. A variable - * marked as a loop constant on one pass may allow other variables to be - * marked as loop constant on following passes. - */ - bool progress; - do { - progress = false; - - foreach_in_list_safe(loop_variable, lv, &ls->variables) { - if (lv->conditional_or_nested_assignment || (lv->num_assignments > 1)) - continue; - - /* Process the RHS of the assignment. If all of the variables - * accessed there are loop constants, then add this - */ - ir_rvalue *const rhs = lv->first_assignment->rhs; - if (all_expression_operands_are_loop_constant(rhs, ls->var_hash)) { - lv->rhs_clean = true; - - if (lv->is_loop_constant()) { - progress = true; - - lv->remove(); - ls->constants.push_tail(lv); - } - } - } - } while (progress); - - /* The remaining variables that are not loop invariant might be loop - * induction variables. - */ - foreach_in_list_safe(loop_variable, lv, &ls->variables) { - /* If there is more than one assignment to a variable, it cannot be a - * loop induction variable. This isn't strictly true, but this is a - * very simple induction variable detector, and it can't handle more - * complex cases. - */ - if (lv->num_assignments > 1) - continue; - - /* All of the variables with zero assignments in the loop are loop - * invariant, and they should have already been filtered out. - */ - assert(lv->num_assignments == 1); - assert(lv->first_assignment != NULL); - - /* The assignment to the variable in the loop must be unconditional and - * not inside a nested loop. - */ - if (lv->conditional_or_nested_assignment) - continue; - - /* Basic loop induction variables have a single assignment in the loop - * that has the form 'VAR = VAR + i' or 'VAR = VAR - i' where i is a - * loop invariant. - */ - ir_rvalue *const inc = - get_basic_induction_increment(lv->first_assignment, ls->var_hash); - if (inc != NULL) { - lv->increment = inc; - - lv->remove(); - ls->induction_variables.push_tail(lv); - } - } - - /* Search the loop terminating conditions for those of the form 'i < c' - * where i is a loop induction variable, c is a constant, and < is any - * relative operator. From each of these we can infer an iteration count. - * Also figure out which terminator (if any) produces the smallest - * iteration count--this is the limiting terminator. - */ - foreach_in_list(loop_terminator, t, &ls->terminators) { - ir_if *if_stmt = t->ir; - - /* If-statements can be either 'if (expr)' or 'if (deref)'. We only care - * about the former here. - */ - ir_expression *cond = if_stmt->condition->as_expression(); - if (cond == NULL) - continue; - - switch (cond->operation) { - case ir_binop_less: - case ir_binop_gequal: { - /* The expressions that we care about will either be of the form - * 'counter < limit' or 'limit < counter'. Figure out which is - * which. - */ - ir_rvalue *counter = cond->operands[0]->as_dereference_variable(); - ir_constant *limit = cond->operands[1]->as_constant(); - enum ir_expression_operation cmp = cond->operation; - bool swap_compare_operands = false; - - if (limit == NULL) { - counter = cond->operands[1]->as_dereference_variable(); - limit = cond->operands[0]->as_constant(); - swap_compare_operands = true; - } - - if ((counter == NULL) || (limit == NULL)) - break; - - ir_variable *var = counter->variable_referenced(); - - ir_rvalue *init = find_initial_value(ir, var); - - loop_variable *lv = ls->get(var); - if (lv != NULL && lv->is_induction_var()) { - bool inc_before_terminator = - incremented_before_terminator(ir, var, t->ir); - - t->iterations = calculate_iterations(init, limit, lv->increment, - cmp, t->continue_from_then, - swap_compare_operands, - inc_before_terminator); - - if (t->iterations >= 0 && - (ls->limiting_terminator == NULL || - t->iterations < ls->limiting_terminator->iterations)) { - ls->limiting_terminator = t; - } - } - break; - } - - default: - break; - } - } - - return visit_continue; -} - -ir_visitor_status -loop_analysis::visit_enter(ir_if *ir) -{ - (void) ir; - - if (!this->state.is_empty()) - this->if_statement_depth++; - - return visit_continue; -} - -ir_visitor_status -loop_analysis::visit_leave(ir_if *ir) -{ - (void) ir; - - if (!this->state.is_empty()) - this->if_statement_depth--; - - return visit_continue; -} - -ir_visitor_status -loop_analysis::visit_enter(ir_assignment *ir) -{ - /* If we're not somewhere inside a loop, there's nothing to do. - */ - if (this->state.is_empty()) - return visit_continue_with_parent; - - this->current_assignment = ir; - - return visit_continue; -} - -ir_visitor_status -loop_analysis::visit_leave(ir_assignment *ir) -{ - /* Since the visit_enter exits with visit_continue_with_parent for this - * case, the loop state stack should never be empty here. - */ - assert(!this->state.is_empty()); - - assert(this->current_assignment == ir); - this->current_assignment = NULL; - - return visit_continue; -} - - -class examine_rhs : public ir_hierarchical_visitor { -public: - examine_rhs(hash_table *loop_variables) - { - this->only_uses_loop_constants = true; - this->loop_variables = loop_variables; - } - - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - hash_entry *entry = _mesa_hash_table_search(this->loop_variables, - ir->var); - loop_variable *lv = entry ? (loop_variable *) entry->data : NULL; - - assert(lv != NULL); - - if (lv->is_loop_constant()) { - return visit_continue; - } else { - this->only_uses_loop_constants = false; - return visit_stop; - } - } - - hash_table *loop_variables; - bool only_uses_loop_constants; -}; - - -bool -all_expression_operands_are_loop_constant(ir_rvalue *ir, hash_table *variables) -{ - examine_rhs v(variables); - - ir->accept(&v); - - return v.only_uses_loop_constants; -} - - -ir_rvalue * -get_basic_induction_increment(ir_assignment *ir, hash_table *var_hash) -{ - /* The RHS must be a binary expression. - */ - ir_expression *const rhs = ir->rhs->as_expression(); - if ((rhs == NULL) - || ((rhs->operation != ir_binop_add) - && (rhs->operation != ir_binop_sub))) - return NULL; - - /* One of the of operands of the expression must be the variable assigned. - * If the operation is subtraction, the variable in question must be the - * "left" operand. - */ - ir_variable *const var = ir->lhs->variable_referenced(); - - ir_variable *const op0 = rhs->operands[0]->variable_referenced(); - ir_variable *const op1 = rhs->operands[1]->variable_referenced(); - - if (((op0 != var) && (op1 != var)) - || ((op1 == var) && (rhs->operation == ir_binop_sub))) - return NULL; - - ir_rvalue *inc = (op0 == var) ? rhs->operands[1] : rhs->operands[0]; - - if (inc->as_constant() == NULL) { - ir_variable *const inc_var = inc->variable_referenced(); - if (inc_var != NULL) { - hash_entry *entry = _mesa_hash_table_search(var_hash, inc_var); - loop_variable *lv = entry ? (loop_variable *) entry->data : NULL; - - if (lv == NULL || !lv->is_loop_constant()) { - assert(lv != NULL); - inc = NULL; - } - } else - inc = NULL; - } - - if ((inc != NULL) && (rhs->operation == ir_binop_sub)) { - void *mem_ctx = ralloc_parent(ir); - - inc = new(mem_ctx) ir_expression(ir_unop_neg, - inc->type, - inc->clone(mem_ctx, NULL), - NULL); - } - - return inc; -} - - -/** - * Detect whether an if-statement is a loop terminating condition, if so - * add it to the list of loop terminators. - * - * Detects if-statements of the form - * - * (if (expression bool ...) (...then_instrs...break)) - * - * or - * - * (if (expression bool ...) ... (...else_instrs...break)) - */ -void -try_add_loop_terminator(loop_variable_state *ls, ir_if *ir) -{ - ir_instruction *inst = (ir_instruction *) ir->then_instructions.get_tail(); - ir_instruction *else_inst = - (ir_instruction *) ir->else_instructions.get_tail(); - - if (is_break(inst) || is_break(else_inst)) - ls->insert(ir, is_break(else_inst)); -} - -loop_state * -analyze_loop_variables(exec_list *instructions) -{ - loop_state *loops = new loop_state; - loop_analysis v(loops); - - v.run(instructions); - return v.loops; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/loop_analysis.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/loop_analysis.h deleted file mode 100644 index b31ea81..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/loop_analysis.h +++ /dev/null @@ -1,244 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef LOOP_ANALYSIS_H -#define LOOP_ANALYSIS_H - -#include "ir.h" -#include "../../util/hash_table.h" - -/** - * Analyze and classify all variables used in all loops in the instruction list - */ -extern class loop_state * -analyze_loop_variables(exec_list *instructions); - -static inline bool -is_break(ir_instruction *ir) -{ - return ir != NULL && ir->ir_type == ir_type_loop_jump && - ((ir_loop_jump *) ir)->is_break(); -} - - -extern bool -unroll_loops(exec_list *instructions, loop_state *ls, - const struct gl_shader_compiler_options *options); - - -/** - * Tracking for all variables used in a loop - */ -class loop_variable_state : public exec_node { -public: - class loop_variable *get(const ir_variable *); - class loop_variable *insert(ir_variable *); - class loop_variable *get_or_insert(ir_variable *, bool in_assignee); - class loop_terminator *insert(ir_if *, bool continue_from_then); - - - /** - * Variables that have not yet been classified - */ - exec_list variables; - - /** - * Variables whose values are constant within the body of the loop - * - * This list contains \c loop_variable objects. - */ - exec_list constants; - - /** - * Induction variables for this loop - * - * This list contains \c loop_variable objects. - */ - exec_list induction_variables; - - /** - * Simple if-statements that lead to the termination of the loop - * - * This list contains \c loop_terminator objects. - * - * \sa is_loop_terminator - */ - exec_list terminators; - - /** - * If any of the terminators in \c terminators leads to termination of the - * loop after a constant number of iterations, this is the terminator that - * leads to termination after the smallest number of iterations. Otherwise - * NULL. - */ - loop_terminator *limiting_terminator; - - /** - * Hash table containing all variables accessed in this loop - */ - hash_table *var_hash; - - /** - * Number of ir_loop_jump instructions that operate on this loop - */ - unsigned num_loop_jumps; - - /** - * Whether this loop contains any function calls. - */ - bool contains_calls; - - loop_variable_state() - { - this->num_loop_jumps = 0; - this->contains_calls = false; - this->var_hash = _mesa_pointer_hash_table_create(NULL); - this->limiting_terminator = NULL; - } - - ~loop_variable_state() - { - _mesa_hash_table_destroy(this->var_hash, NULL); - } - - DECLARE_RALLOC_CXX_OPERATORS(loop_variable_state) -}; - - -class loop_variable : public exec_node { -public: - /** The variable in question. */ - ir_variable *var; - - /** Is the variable read in the loop before it is written? */ - bool read_before_write; - - /** Are all variables in the RHS of the assignment loop constants? */ - bool rhs_clean; - - /** - * Is there an assignment to the variable that is conditional, or inside a - * nested loop? - */ - bool conditional_or_nested_assignment; - - /** Reference to the first assignment to the variable in the loop body. */ - ir_assignment *first_assignment; - - /** Number of assignments to the variable in the loop body. */ - unsigned num_assignments; - - /** - * Increment value for a loop induction variable - * - * If this is a loop induction variable, the amount by which the variable - * is incremented on each iteration through the loop. - * - * If this is not a loop induction variable, NULL. - */ - ir_rvalue *increment; - - - inline bool is_induction_var() const - { - /* Induction variables always have a non-null increment, and vice - * versa. - */ - return this->increment != NULL; - } - - - inline bool is_loop_constant() const - { - const bool is_const = (this->num_assignments == 0) - || (((this->num_assignments == 1) - && !this->conditional_or_nested_assignment - && !this->read_before_write - && this->rhs_clean) || this->var->data.read_only); - - /* If the RHS of *the* assignment is clean, then there must be exactly - * one assignment of the variable. - */ - assert((this->rhs_clean && (this->num_assignments == 1)) - || !this->rhs_clean); - - return is_const; - } - - void record_reference(bool in_assignee, - bool in_conditional_code_or_nested_loop, - ir_assignment *current_assignment); -}; - - -class loop_terminator : public exec_node { -public: - loop_terminator() - : ir(NULL), iterations(-1) - { - } - - /** - * Statement which terminates the loop. - */ - ir_if *ir; - - /** - * The number of iterations after which the terminator is known to - * terminate the loop (if that is a fixed value). Otherwise -1. - */ - int iterations; - - /* Does the if continue from the then branch or the else branch */ - bool continue_from_then; -}; - - -class loop_state { -public: - ~loop_state(); - - /** - * Get the loop variable state data for a particular loop - */ - loop_variable_state *get(const ir_loop *); - - loop_variable_state *insert(ir_loop *ir); - - bool loop_found; - -private: - loop_state(); - - /** - * Hash table containing all loops that have been analyzed. - */ - hash_table *ht; - - void *mem_ctx; - - friend loop_state *analyze_loop_variables(exec_list *instructions); -}; - -#endif /* LOOP_ANALYSIS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp deleted file mode 100644 index f08fa27..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp +++ /dev/null @@ -1,567 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" -#include "ir_builder.h" -#include "ir_optimization.h" -#include "../../mesa/program/prog_instruction.h" -#include "../../mesa/main/shader_types.h" - -using namespace ir_builder; - -#define imm1(x) new(mem_ctx) ir_constant((float) (x), 1) -#define imm3(x) new(mem_ctx) ir_constant((float) (x), 3) - -static ir_rvalue * -blend_multiply(ir_variable *src, ir_variable *dst) -{ - /* f(Cs,Cd) = Cs*Cd */ - return mul(src, dst); -} - -static ir_rvalue * -blend_screen(ir_variable *src, ir_variable *dst) -{ - /* f(Cs,Cd) = Cs+Cd-Cs*Cd */ - return sub(add(src, dst), mul(src, dst)); -} - -static ir_rvalue * -blend_overlay(ir_variable *src, ir_variable *dst) -{ - void *mem_ctx = ralloc_parent(src); - - /* f(Cs,Cd) = 2*Cs*Cd, if Cd <= 0.5 - * 1-2*(1-Cs)*(1-Cd), otherwise - */ - ir_rvalue *rule_1 = mul(imm3(2), mul(src, dst)); - ir_rvalue *rule_2 = - sub(imm3(1), mul(imm3(2), mul(sub(imm3(1), src), sub(imm3(1), dst)))); - return csel(lequal(dst, imm3(0.5f)), rule_1, rule_2); -} - -static ir_rvalue * -blend_darken(ir_variable *src, ir_variable *dst) -{ - /* f(Cs,Cd) = min(Cs,Cd) */ - return min2(src, dst); -} - -static ir_rvalue * -blend_lighten(ir_variable *src, ir_variable *dst) -{ - /* f(Cs,Cd) = max(Cs,Cd) */ - return max2(src, dst); -} - -static ir_rvalue * -blend_colordodge(ir_variable *src, ir_variable *dst) -{ - void *mem_ctx = ralloc_parent(src); - - /* f(Cs,Cd) = - * 0, if Cd <= 0 - * min(1,Cd/(1-Cs)), if Cd > 0 and Cs < 1 - * 1, if Cd > 0 and Cs >= 1 - */ - return csel(lequal(dst, imm3(0)), imm3(0), - csel(gequal(src, imm3(1)), imm3(1), - min2(imm3(1), div(dst, sub(imm3(1), src))))); -} - -static ir_rvalue * -blend_colorburn(ir_variable *src, ir_variable *dst) -{ - void *mem_ctx = ralloc_parent(src); - - /* f(Cs,Cd) = - * 1, if Cd >= 1 - * 1 - min(1,(1-Cd)/Cs), if Cd < 1 and Cs > 0 - * 0, if Cd < 1 and Cs <= 0 - */ - return csel(gequal(dst, imm3(1)), imm3(1), - csel(lequal(src, imm3(0)), imm3(0), - sub(imm3(1), min2(imm3(1), div(sub(imm3(1), dst), src))))); -} - -static ir_rvalue * -blend_hardlight(ir_variable *src, ir_variable *dst) -{ - void *mem_ctx = ralloc_parent(src); - - /* f(Cs,Cd) = 2*Cs*Cd, if Cs <= 0.5 - * 1-2*(1-Cs)*(1-Cd), otherwise - */ - ir_rvalue *rule_1 = mul(imm3(2), mul(src, dst)); - ir_rvalue *rule_2 = - sub(imm3(1), mul(imm3(2), mul(sub(imm3(1), src), sub(imm3(1), dst)))); - return csel(lequal(src, imm3(0.5f)), rule_1, rule_2); -} - -static ir_rvalue * -blend_softlight(ir_variable *src, ir_variable *dst) -{ - void *mem_ctx = ralloc_parent(src); - - /* f(Cs,Cd) = - * Cd-(1-2*Cs)*Cd*(1-Cd), - * if Cs <= 0.5 - * Cd+(2*Cs-1)*Cd*((16*Cd-12)*Cd+3), - * if Cs > 0.5 and Cd <= 0.25 - * Cd+(2*Cs-1)*(sqrt(Cd)-Cd), - * if Cs > 0.5 and Cd > 0.25 - * - * We can simplify this to - * - * f(Cs,Cd) = Cd+(2*Cs-1)*g(Cs,Cd) where - * g(Cs,Cd) = Cd*Cd-Cd if Cs <= 0.5 - * Cd*((16*Cd-12)*Cd+3) if Cs > 0.5 and Cd <= 0.25 - * sqrt(Cd)-Cd, otherwise - */ - ir_rvalue *factor_1 = mul(dst, sub(imm3(1), dst)); - ir_rvalue *factor_2 = - mul(dst, add(mul(sub(mul(imm3(16), dst), imm3(12)), dst), imm3(3))); - ir_rvalue *factor_3 = sub(sqrt(dst), dst); - ir_rvalue *factor = csel(lequal(src, imm3(0.5f)), factor_1, - csel(lequal(dst, imm3(0.25f)), - factor_2, factor_3)); - return add(dst, mul(sub(mul(imm3(2), src), imm3(1)), factor)); -} - -static ir_rvalue * -blend_difference(ir_variable *src, ir_variable *dst) -{ - return abs(sub(dst, src)); -} - -static ir_rvalue * -blend_exclusion(ir_variable *src, ir_variable *dst) -{ - void *mem_ctx = ralloc_parent(src); - - return add(src, sub(dst, mul(imm3(2), mul(src, dst)))); -} - -/* Return the minimum of a vec3's components */ -static ir_rvalue * -minv3(ir_variable *v) -{ - return min2(min2(swizzle_x(v), swizzle_y(v)), swizzle_z(v)); -} - -/* Return the maximum of a vec3's components */ -static ir_rvalue * -maxv3(ir_variable *v) -{ - return max2(max2(swizzle_x(v), swizzle_y(v)), swizzle_z(v)); -} - -static ir_rvalue * -lumv3(ir_variable *c) -{ - ir_constant_data data; - data.f[0] = 0.30; - data.f[1] = 0.59; - data.f[2] = 0.11; - - void *mem_ctx = ralloc_parent(c); - - /* dot(c, vec3(0.30, 0.59, 0.11)) */ - return dot(c, new(mem_ctx) ir_constant(glsl_type::vec3_type, &data)); -} - -static ir_rvalue * -satv3(ir_variable *c) -{ - return sub(maxv3(c), minv3(c)); -} - -/* Take the base RGB color and override its luminosity with that - * of the RGB color . - * - * This follows the equations given in the ES 3.2 (June 15th, 2016) - * specification. Revision 16 of GL_KHR_blend_equation_advanced and - * revision 9 of GL_NV_blend_equation_advanced specify a different set - * of equations. Older revisions match ES 3.2's text, and dEQP expects - * the ES 3.2 rules implemented here. - */ -static void -set_lum(ir_factory *f, - ir_variable *color, - ir_variable *cbase, - ir_variable *clum) -{ - void *mem_ctx = f->mem_ctx; - f->emit(assign(color, add(cbase, sub(lumv3(clum), lumv3(cbase))))); - - ir_variable *llum = f->make_temp(glsl_type::float_type, "__blend_lum"); - ir_variable *mincol = f->make_temp(glsl_type::float_type, "__blend_mincol"); - ir_variable *maxcol = f->make_temp(glsl_type::float_type, "__blend_maxcol"); - - f->emit(assign(llum, lumv3(color))); - f->emit(assign(mincol, minv3(color))); - f->emit(assign(maxcol, maxv3(color))); - - f->emit(if_tree(less(mincol, imm1(0)), - assign(color, add(llum, div(mul(sub(color, llum), llum), - sub(llum, mincol)))), - if_tree(greater(maxcol, imm1(1)), - assign(color, add(llum, div(mul(sub(color, llum), - sub(imm3(1), llum)), - sub(maxcol, llum))))))); - -} - -/* Take the base RGB color and override its saturation with - * that of the RGB color . The override the luminosity of the - * result with that of the RGB color . - */ -static void -set_lum_sat(ir_factory *f, - ir_variable *color, - ir_variable *cbase, - ir_variable *csat, - ir_variable *clum) -{ - void *mem_ctx = f->mem_ctx; - - ir_rvalue *minbase = minv3(cbase); - ir_rvalue *ssat = satv3(csat); - - ir_variable *sbase = f->make_temp(glsl_type::float_type, "__blend_sbase"); - f->emit(assign(sbase, satv3(cbase))); - - /* Equivalent (modulo rounding errors) to setting the - * smallest (R,G,B) component to 0, the largest to , - * and interpolating the "middle" component based on its - * original value relative to the smallest/largest. - */ - f->emit(if_tree(greater(sbase, imm1(0)), - assign(color, div(mul(sub(cbase, minbase), ssat), sbase)), - assign(color, imm3(0)))); - set_lum(f, color, color, clum); -} - -static ir_rvalue * -is_mode(ir_variable *mode, enum gl_advanced_blend_mode q) -{ - return equal(mode, new(ralloc_parent(mode)) ir_constant(unsigned(q))); -} - -static ir_variable * -calc_blend_result(ir_factory f, - ir_variable *mode, - ir_variable *fb, - ir_rvalue *blend_src, - GLbitfield blend_qualifiers) -{ - void *mem_ctx = f.mem_ctx; - ir_variable *result = f.make_temp(glsl_type::vec4_type, "__blend_result"); - - /* Save blend_src to a temporary so we can reference it multiple times. */ - ir_variable *src = f.make_temp(glsl_type::vec4_type, "__blend_src"); - f.emit(assign(src, blend_src)); - - /* If we're not doing advanced blending, just write the original value. */ - ir_if *if_blending = new(mem_ctx) ir_if(is_mode(mode, BLEND_NONE)); - f.emit(if_blending); - if_blending->then_instructions.push_tail(assign(result, src)); - - f.instructions = &if_blending->else_instructions; - - /* (Rs', Gs', Bs') = - * (0, 0, 0), if As == 0 - * (Rs/As, Gs/As, Bs/As), otherwise - */ - ir_variable *src_rgb = f.make_temp(glsl_type::vec3_type, "__blend_src_rgb"); - ir_variable *src_alpha = f.make_temp(glsl_type::float_type, "__blend_src_a"); - - /* (Rd', Gd', Bd') = - * (0, 0, 0), if Ad == 0 - * (Rd/Ad, Gd/Ad, Bd/Ad), otherwise - */ - ir_variable *dst_rgb = f.make_temp(glsl_type::vec3_type, "__blend_dst_rgb"); - ir_variable *dst_alpha = f.make_temp(glsl_type::float_type, "__blend_dst_a"); - - f.emit(assign(dst_alpha, swizzle_w(fb))); - f.emit(if_tree(equal(dst_alpha, imm1(0)), - assign(dst_rgb, imm3(0)), - assign(dst_rgb, csel(equal(swizzle_xyz(fb), - swizzle(fb, SWIZZLE_WWWW, 3)), - imm3(1), - div(swizzle_xyz(fb), dst_alpha))))); - - f.emit(assign(src_alpha, swizzle_w(src))); - f.emit(if_tree(equal(src_alpha, imm1(0)), - assign(src_rgb, imm3(0)), - assign(src_rgb, csel(equal(swizzle_xyz(src), - swizzle(src, SWIZZLE_WWWW, 3)), - imm3(1), - div(swizzle_xyz(src), src_alpha))))); - - ir_variable *factor = f.make_temp(glsl_type::vec3_type, "__blend_factor"); - - ir_factory casefactory = f; - - unsigned choices = blend_qualifiers; - while (choices) { - enum gl_advanced_blend_mode choice = (enum gl_advanced_blend_mode)u_bit_scan(&choices); - - ir_if *iff = new(mem_ctx) ir_if(is_mode(mode, choice)); - casefactory.emit(iff); - casefactory.instructions = &iff->then_instructions; - - ir_rvalue *val = NULL; - - switch (choice) { - case BLEND_MULTIPLY: - val = blend_multiply(src_rgb, dst_rgb); - break; - case BLEND_SCREEN: - val = blend_screen(src_rgb, dst_rgb); - break; - case BLEND_OVERLAY: - val = blend_overlay(src_rgb, dst_rgb); - break; - case BLEND_DARKEN: - val = blend_darken(src_rgb, dst_rgb); - break; - case BLEND_LIGHTEN: - val = blend_lighten(src_rgb, dst_rgb); - break; - case BLEND_COLORDODGE: - val = blend_colordodge(src_rgb, dst_rgb); - break; - case BLEND_COLORBURN: - val = blend_colorburn(src_rgb, dst_rgb); - break; - case BLEND_HARDLIGHT: - val = blend_hardlight(src_rgb, dst_rgb); - break; - case BLEND_SOFTLIGHT: - val = blend_softlight(src_rgb, dst_rgb); - break; - case BLEND_DIFFERENCE: - val = blend_difference(src_rgb, dst_rgb); - break; - case BLEND_EXCLUSION: - val = blend_exclusion(src_rgb, dst_rgb); - break; - case BLEND_HSL_HUE: - set_lum_sat(&casefactory, factor, src_rgb, dst_rgb, dst_rgb); - break; - case BLEND_HSL_SATURATION: - set_lum_sat(&casefactory, factor, dst_rgb, src_rgb, dst_rgb); - break; - case BLEND_HSL_COLOR: - set_lum(&casefactory, factor, src_rgb, dst_rgb); - break; - case BLEND_HSL_LUMINOSITY: - set_lum(&casefactory, factor, dst_rgb, src_rgb); - break; - case BLEND_NONE: - unreachable("not real cases"); - } - - if (val) - casefactory.emit(assign(factor, val)); - - casefactory.instructions = &iff->else_instructions; - } - - /* p0(As,Ad) = As*Ad - * p1(As,Ad) = As*(1-Ad) - * p2(As,Ad) = Ad*(1-As) - */ - ir_variable *p0 = f.make_temp(glsl_type::float_type, "__blend_p0"); - ir_variable *p1 = f.make_temp(glsl_type::float_type, "__blend_p1"); - ir_variable *p2 = f.make_temp(glsl_type::float_type, "__blend_p2"); - - f.emit(assign(p0, mul(src_alpha, dst_alpha))); - f.emit(assign(p1, mul(src_alpha, sub(imm1(1), dst_alpha)))); - f.emit(assign(p2, mul(dst_alpha, sub(imm1(1), src_alpha)))); - - /* R = f(Rs',Rd')*p0(As,Ad) + Y*Rs'*p1(As,Ad) + Z*Rd'*p2(As,Ad) - * G = f(Gs',Gd')*p0(As,Ad) + Y*Gs'*p1(As,Ad) + Z*Gd'*p2(As,Ad) - * B = f(Bs',Bd')*p0(As,Ad) + Y*Bs'*p1(As,Ad) + Z*Bd'*p2(As,Ad) - * A = X*p0(As,Ad) + Y*p1(As,Ad) + Z*p2(As,Ad) - * - * is always <1, 1, 1>, so we can ignore it. - * - * In vector form, this is: - * RGB = factor * p0 + Cs * p1 + Cd * p2 - * A = p0 + p1 + p2 - */ - f.emit(assign(result, - add(add(mul(factor, p0), mul(src_rgb, p1)), mul(dst_rgb, p2)), - WRITEMASK_XYZ)); - f.emit(assign(result, add(add(p0, p1), p2), WRITEMASK_W)); - - return result; -} - -/** - * Dereference var, or var[0] if it's an array. - */ -static ir_dereference * -deref_output(ir_variable *var) -{ - void *mem_ctx = ralloc_parent(var); - - ir_dereference *val = new(mem_ctx) ir_dereference_variable(var); - if (val->type->is_array()) { - ir_constant *index = new(mem_ctx) ir_constant(0); - val = new(mem_ctx) ir_dereference_array(val, index); - } - - return val; -} - -static ir_function_signature * -get_main(gl_linked_shader *sh) -{ - ir_function_signature *sig = NULL; - /* We can't use _mesa_get_main_function_signature() because we don't - * have a symbol table at this point. Just go find main() by hand. - */ - foreach_in_list(ir_instruction, ir, sh->ir) { - ir_function *f = ir->as_function(); - if (f && strcmp(f->name, "main") == 0) { - exec_list void_parameters; - sig = f->matching_signature(NULL, &void_parameters, false); - break; - } - } - assert(sig != NULL); /* main() must exist */ - return sig; -} - -bool -lower_blend_equation_advanced(struct gl_linked_shader *sh, bool coherent) -{ - assert(sh->Stage == MESA_SHADER_FRAGMENT); - - if (sh->Program->info.fs.advanced_blend_modes == 0) - return false; - - /* Lower early returns in main() so there's a single exit point - * where we can insert our lowering code. - */ - do_lower_jumps(sh->ir, false, false, true, false); - - void *mem_ctx = ralloc_parent(sh->ir); - - ir_variable *fb = new(mem_ctx) ir_variable(glsl_type::vec4_type, - "__blend_fb_fetch", - ir_var_shader_out); - fb->data.location = FRAG_RESULT_DATA0; - fb->data.read_only = 1; - fb->data.fb_fetch_output = 1; - fb->data.memory_coherent = coherent; - fb->data.how_declared = ir_var_hidden; - - ir_variable *mode = new(mem_ctx) ir_variable(glsl_type::uint_type, - "gl_AdvancedBlendModeMESA", - ir_var_uniform); - mode->data.how_declared = ir_var_hidden; - mode->allocate_state_slots(1); - ir_state_slot *slot0 = &mode->get_state_slots()[0]; - slot0->swizzle = SWIZZLE_XXXX; - slot0->tokens[0] = STATE_ADVANCED_BLENDING_MODE; - for (int i = 1; i < STATE_LENGTH; i++) - slot0->tokens[i] = 0; - - sh->ir->push_head(fb); - sh->ir->push_head(mode); - - /* Gather any output variables referring to render target 0. - * - * ARB_enhanced_layouts irritatingly allows the shader to specify - * multiple output variables for the same render target, each of - * which writes a subset of the components, starting at location_frac. - * The variables can't overlap, thankfully. - */ - ir_variable *outputs[4] = { NULL, NULL, NULL, NULL }; - foreach_in_list(ir_instruction, ir, sh->ir) { - ir_variable *var = ir->as_variable(); - if (!var || var->data.mode != ir_var_shader_out) - continue; - - if (var->data.location == FRAG_RESULT_DATA0 || - var->data.location == FRAG_RESULT_COLOR) { - const int components = var->type->without_array()->vector_elements; - - for (int i = 0; i < components; i++) { - outputs[var->data.location_frac + i] = var; - } - } - } - - /* Combine values written to outputs into a single RGBA blend source. - * We assign <0, 0, 0, 1> to any components with no corresponding output. - */ - ir_rvalue *blend_source; - if (outputs[0] && outputs[0]->type->without_array()->vector_elements == 4) { - blend_source = deref_output(outputs[0]); - } else { - ir_rvalue *blend_comps[4]; - for (int i = 0; i < 4; i++) { - ir_variable *var = outputs[i]; - if (var) { - blend_comps[i] = swizzle(deref_output(outputs[i]), - i - outputs[i]->data.location_frac, 1); - } else { - blend_comps[i] = new(mem_ctx) ir_constant(i < 3 ? 0.0f : 1.0f); - } - } - - blend_source = - new(mem_ctx) ir_expression(ir_quadop_vector, glsl_type::vec4_type, - blend_comps[0], blend_comps[1], - blend_comps[2], blend_comps[3]); - } - - ir_function_signature *main = get_main(sh); - ir_factory f(&main->body, mem_ctx); - - ir_variable *result_dest = - calc_blend_result(f, mode, fb, blend_source, - sh->Program->info.fs.advanced_blend_modes); - - /* Copy the result back to the original values. It would be simpler - * to demote the program's output variables, and create a new vec4 - * output for our result, but this pass runs before we create the - * ARB_program_interface_query resource list. So we have to leave - * the original outputs in place and use them. - */ - for (int i = 0; i < 4; i++) { - if (!outputs[i]) - continue; - - f.emit(assign(deref_output(outputs[i]), swizzle(result_dest, i, 1), - 1 << i)); - } - - validate_ir_tree(sh->ir); - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_builtins.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_builtins.cpp deleted file mode 100644 index 3b6013d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_builtins.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2019 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_builtins.cpp - * - * Inline calls to builtin functions. - */ - -#include "ir.h" -#include "ir_optimization.h" - -namespace { - -class lower_builtins_visitor : public ir_hierarchical_visitor { -public: - lower_builtins_visitor() : progress(false) { } - ir_visitor_status visit_leave(ir_call *); - bool progress; -}; - -} - -bool -lower_builtins(exec_list *instructions) -{ - lower_builtins_visitor v; - visit_list_elements(&v, instructions); - return v.progress; -} - -ir_visitor_status -lower_builtins_visitor::visit_leave(ir_call *ir) -{ - /* lower_precision() also inlines some intrinsics, which can't be inlined - * further. - */ - if (!ir->callee->is_builtin() || ir->callee->is_intrinsic()) - return visit_continue; - - ir->generate_inline(ir); - ir->remove(); - - this->progress = true; - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_discard.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_discard.cpp deleted file mode 100644 index 99be03d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_discard.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_discard.cpp - * - * This pass moves discards out of if-statements. - * - * Case 1: The "then" branch contains a conditional discard: - * --------------------------------------------------------- - * - * if (cond1) { - * s1; - * discard cond2; - * s2; - * } else { - * s3; - * } - * - * becomes: - * - * temp = false; - * if (cond1) { - * s1; - * temp = cond2; - * s2; - * } else { - * s3; - * } - * discard temp; - * - * Case 2: The "else" branch contains a conditional discard: - * --------------------------------------------------------- - * - * if (cond1) { - * s1; - * } else { - * s2; - * discard cond2; - * s3; - * } - * - * becomes: - * - * temp = false; - * if (cond1) { - * s1; - * } else { - * s2; - * temp = cond2; - * s3; - * } - * discard temp; - * - * Case 3: Both branches contain a conditional discard: - * ---------------------------------------------------- - * - * if (cond1) { - * s1; - * discard cond2; - * s2; - * } else { - * s3; - * discard cond3; - * s4; - * } - * - * becomes: - * - * temp = false; - * if (cond1) { - * s1; - * temp = cond2; - * s2; - * } else { - * s3; - * temp = cond3; - * s4; - * } - * discard temp; - * - * If there are multiple conditional discards, we need only deal with one of - * them. Repeatedly applying this pass will take care of the others. - * - * Unconditional discards are treated as having a condition of "true". - */ - -#include "../glsl_types.h" -#include "ir.h" - -namespace { - -class lower_discard_visitor : public ir_hierarchical_visitor { -public: - lower_discard_visitor() - { - this->progress = false; - } - - ir_visitor_status visit_leave(ir_if *); - - bool progress; -}; - -} /* anonymous namespace */ - -bool -lower_discard(exec_list *instructions) -{ - lower_discard_visitor v; - - visit_list_elements(&v, instructions); - - return v.progress; -} - - -static ir_discard * -find_discard(exec_list &instructions) -{ - foreach_in_list(ir_instruction, node, &instructions) { - ir_discard *ir = node->as_discard(); - if (ir != NULL) - return ir; - } - return NULL; -} - - -static void -replace_discard(void *mem_ctx, ir_variable *var, ir_discard *ir) -{ - ir_rvalue *condition = ir->condition; - - /* For unconditional discards, use "true" as the condition. */ - if (condition == NULL) - condition = new(mem_ctx) ir_constant(true); - - ir_assignment *assignment = - new(mem_ctx) ir_assignment(new(mem_ctx) ir_dereference_variable(var), - condition); - - ir->replace_with(assignment); -} - - -ir_visitor_status -lower_discard_visitor::visit_leave(ir_if *ir) -{ - ir_discard *then_discard = find_discard(ir->then_instructions); - ir_discard *else_discard = find_discard(ir->else_instructions); - - if (then_discard == NULL && else_discard == NULL) - return visit_continue; - - void *mem_ctx = ralloc_parent(ir); - - ir_variable *temp = new(mem_ctx) ir_variable(glsl_type::bool_type, - "discard_cond_temp", - ir_var_temporary); - ir_assignment *temp_initializer = - new(mem_ctx) ir_assignment(new(mem_ctx) ir_dereference_variable(temp), - new(mem_ctx) ir_constant(false)); - - ir->insert_before(temp); - ir->insert_before(temp_initializer); - - if (then_discard != NULL) - replace_discard(mem_ctx, temp, then_discard); - - if (else_discard != NULL) - replace_discard(mem_ctx, temp, else_discard); - - ir_discard *discard = then_discard != NULL ? then_discard : else_discard; - discard->condition = new(mem_ctx) ir_dereference_variable(temp); - ir->insert_after(discard); - - this->progress = true; - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_discard_flow.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_discard_flow.cpp deleted file mode 100644 index d15a8b4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_discard_flow.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_discard_flow.cpp - * - * Implements the GLSL 1.30 revision 9 rule for fragment shader - * discard handling: - * - * "Control flow exits the shader, and subsequent implicit or - * explicit derivatives are undefined when this control flow is - * non-uniform (meaning different fragments within the primitive - * take different control paths)." - * - * There seem to be two conflicting things here. "Control flow exits - * the shader" sounds like the discarded fragments should effectively - * jump to the end of the shader, but that breaks derivatives in the - * case of uniform control flow and causes rendering failure in the - * bushes in Unigine Tropics. - * - * The question, then, is whether the intent was "loops stop at the - * point that the only active channels left are discarded pixels" or - * "discarded pixels become inactive at the point that control flow - * returns to the top of a loop". This implements the second - * interpretation. - */ - -#include "../glsl_types.h" -#include "ir.h" - -namespace { - -class lower_discard_flow_visitor : public ir_hierarchical_visitor { -public: - lower_discard_flow_visitor(ir_variable *discarded) - : discarded(discarded) - { - mem_ctx = ralloc_parent(discarded); - } - - ~lower_discard_flow_visitor() - { - } - - ir_visitor_status visit(ir_loop_jump *ir); - ir_visitor_status visit_enter(ir_discard *ir); - ir_visitor_status visit_enter(ir_loop *ir); - ir_visitor_status visit_enter(ir_function_signature *ir); - - ir_if *generate_discard_break(); - - ir_variable *discarded; - void *mem_ctx; -}; - -} /* anonymous namespace */ - -ir_visitor_status -lower_discard_flow_visitor::visit(ir_loop_jump *ir) -{ - if (ir->mode != ir_loop_jump::jump_continue) - return visit_continue; - - ir->insert_before(generate_discard_break()); - - return visit_continue; -} - -ir_visitor_status -lower_discard_flow_visitor::visit_enter(ir_discard *ir) -{ - ir_dereference *lhs = new(mem_ctx) ir_dereference_variable(discarded); - ir_rvalue *rhs; - if (ir->condition) { - /* discarded <- condition, use (var_ref discarded) as the condition */ - rhs = ir->condition; - ir->condition = new(mem_ctx) ir_dereference_variable(discarded); - } else { - rhs = new(mem_ctx) ir_constant(true); - } - ir_assignment *assign = new(mem_ctx) ir_assignment(lhs, rhs); - ir->insert_before(assign); - - return visit_continue; -} - -ir_visitor_status -lower_discard_flow_visitor::visit_enter(ir_loop *ir) -{ - ir->body_instructions.push_tail(generate_discard_break()); - - return visit_continue; -} - -ir_visitor_status -lower_discard_flow_visitor::visit_enter(ir_function_signature *ir) -{ - if (strcmp(ir->function_name(), "main") != 0) - return visit_continue; - - ir_dereference *lhs = new(mem_ctx) ir_dereference_variable(discarded); - ir_rvalue *rhs = new(mem_ctx) ir_constant(false); - ir_assignment *assign = new(mem_ctx) ir_assignment(lhs, rhs); - ir->body.push_head(assign); - - return visit_continue; -} - -ir_if * -lower_discard_flow_visitor::generate_discard_break() -{ - ir_rvalue *if_condition = new(mem_ctx) ir_dereference_variable(discarded); - ir_if *if_inst = new(mem_ctx) ir_if(if_condition); - - ir_instruction *br = new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break); - if_inst->then_instructions.push_tail(br); - - return if_inst; -} - -void -lower_discard_flow(exec_list *ir) -{ - void *mem_ctx = ir; - - ir_variable *var = new(mem_ctx) ir_variable(glsl_type::bool_type, - "discarded", - ir_var_temporary); - - ir->push_head(var); - - lower_discard_flow_visitor v(var); - - visit_list_elements(&v, ir); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_distance.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_distance.cpp deleted file mode 100644 index 6307d0b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_distance.cpp +++ /dev/null @@ -1,686 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_distance.cpp - * - * This pass accounts for the difference between the way - * gl_ClipDistance is declared in standard GLSL (as an array of - * floats), and the way it is frequently implemented in hardware (as - * a pair of vec4s, with four clip distances packed into each). - * - * The declaration of gl_ClipDistance is replaced with a declaration - * of gl_ClipDistanceMESA, and any references to gl_ClipDistance are - * translated to refer to gl_ClipDistanceMESA with the appropriate - * swizzling of array indices. For instance: - * - * gl_ClipDistance[i] - * - * is translated into: - * - * gl_ClipDistanceMESA[i>>2][i&3] - * - * Since some hardware may not internally represent gl_ClipDistance as a pair - * of vec4's, this lowering pass is optional. To enable it, set the - * LowerCombinedClipCullDistance flag in gl_shader_compiler_options to true. - */ - -#include "../../util/macros.h" -#include "glsl_symbol_table.h" -#include "ir_rvalue_visitor.h" -#include "ir.h" -#include "../../mesa/program/prog_instruction.h" /* For WRITEMASK_* */ -#include "../../mesa/main/shader_types.h" - -#define GLSL_CLIP_VAR_NAME "gl_ClipDistanceMESA" - -namespace { - -class lower_distance_visitor : public ir_rvalue_visitor { -public: - explicit lower_distance_visitor(gl_shader_stage shader_stage, - const char *in_name, int total_size, - int offset) - : progress(false), old_distance_out_var(NULL), - old_distance_in_var(NULL), new_distance_out_var(NULL), - new_distance_in_var(NULL), shader_stage(shader_stage), - in_name(in_name), total_size(total_size), offset(offset) - { - } - - explicit lower_distance_visitor(gl_shader_stage shader_stage, - const char *in_name, - const lower_distance_visitor *orig, - int offset) - : progress(false), - old_distance_out_var(NULL), - old_distance_in_var(NULL), - new_distance_out_var(orig->new_distance_out_var), - new_distance_in_var(orig->new_distance_in_var), - shader_stage(shader_stage), - in_name(in_name), - total_size(orig->total_size), - offset(offset) - { - } - - virtual ir_visitor_status visit(ir_variable *); - void create_indices(ir_rvalue*, ir_rvalue *&, ir_rvalue *&); - bool is_distance_vec8(ir_rvalue *ir); - ir_rvalue *lower_distance_vec8(ir_rvalue *ir); - virtual ir_visitor_status visit_leave(ir_assignment *); - void visit_new_assignment(ir_assignment *ir); - virtual ir_visitor_status visit_leave(ir_call *); - - virtual void handle_rvalue(ir_rvalue **rvalue); - - void fix_lhs(ir_assignment *); - - bool progress; - - /** - * Pointer to the declaration of gl_ClipDistance, if found. - * - * Note: - * - * - the in_var is for geometry and both tessellation shader inputs only. - * - * - since gl_ClipDistance is available in tessellation control, - * tessellation evaluation and geometry shaders as both an input - * and an output, it's possible for both old_distance_out_var - * and old_distance_in_var to be non-null. - */ - ir_variable *old_distance_out_var; - ir_variable *old_distance_in_var; - - /** - * Pointer to the newly-created gl_ClipDistanceMESA variable. - */ - ir_variable *new_distance_out_var; - ir_variable *new_distance_in_var; - - /** - * Type of shader we are compiling (e.g. MESA_SHADER_VERTEX) - */ - const gl_shader_stage shader_stage; - const char *in_name; - int total_size; - int offset; -}; - -} /* anonymous namespace */ - -/** - * Replace any declaration of 'in_name' as an array of floats with a - * declaration of gl_ClipDistanceMESA as an array of vec4's. - */ -ir_visitor_status -lower_distance_visitor::visit(ir_variable *ir) -{ - ir_variable **old_var; - ir_variable **new_var; - - if (!ir->name || strcmp(ir->name, in_name) != 0) - return visit_continue; - assert (ir->type->is_array()); - - if (ir->data.mode == ir_var_shader_out) { - if (this->old_distance_out_var) - return visit_continue; - old_var = &old_distance_out_var; - new_var = &new_distance_out_var; - } else if (ir->data.mode == ir_var_shader_in) { - if (this->old_distance_in_var) - return visit_continue; - old_var = &old_distance_in_var; - new_var = &new_distance_in_var; - } else { - unreachable("not reached"); - } - - this->progress = true; - - *old_var = ir; - - if (!(*new_var)) { - unsigned new_size = (total_size + 3) / 4; - - /* Clone the old var so that we inherit all of its properties */ - *new_var = ir->clone(ralloc_parent(ir), NULL); - (*new_var)->name = ralloc_strdup(*new_var, GLSL_CLIP_VAR_NAME); - (*new_var)->data.location = VARYING_SLOT_CLIP_DIST0; - (*new_var)->data.assigned = true; - - if (!ir->type->fields.array->is_array()) { - /* gl_ClipDistance (used for vertex, tessellation evaluation and - * geometry output, and fragment input). - */ - assert((ir->data.mode == ir_var_shader_in && - this->shader_stage == MESA_SHADER_FRAGMENT) || - (ir->data.mode == ir_var_shader_out && - (this->shader_stage == MESA_SHADER_VERTEX || - this->shader_stage == MESA_SHADER_TESS_EVAL || - this->shader_stage == MESA_SHADER_GEOMETRY))); - - assert (ir->type->fields.array == glsl_type::float_type); - (*new_var)->data.max_array_access = new_size - 1; - - /* And change the properties that we need to change */ - (*new_var)->type = glsl_type::get_array_instance(glsl_type::vec4_type, - new_size); - } else { - /* 2D gl_ClipDistance (used for tessellation control, tessellation - * evaluation and geometry input, and tessellation control output). - */ - assert((ir->data.mode == ir_var_shader_in && - (this->shader_stage == MESA_SHADER_GEOMETRY || - this->shader_stage == MESA_SHADER_TESS_EVAL)) || - this->shader_stage == MESA_SHADER_TESS_CTRL); - - assert (ir->type->fields.array->fields.array == glsl_type::float_type); - - /* And change the properties that we need to change */ - (*new_var)->type = glsl_type::get_array_instance( - glsl_type::get_array_instance(glsl_type::vec4_type, - new_size), - ir->type->array_size()); - } - ir->replace_with(*new_var); - } else { - ir->remove(); - } - - return visit_continue; -} - - -/** - * Create the necessary GLSL rvalues to index into gl_ClipDistanceMESA based - * on the rvalue previously used to index into gl_ClipDistance. - * - * \param array_index Selects one of the vec4's in gl_ClipDistanceMESA - * \param swizzle_index Selects a component within the vec4 selected by - * array_index. - */ -void -lower_distance_visitor::create_indices(ir_rvalue *old_index, - ir_rvalue *&array_index, - ir_rvalue *&swizzle_index) -{ - void *ctx = ralloc_parent(old_index); - - /* Make sure old_index is a signed int so that the bitwise "shift" and - * "and" operations below type check properly. - */ - if (old_index->type != glsl_type::int_type) { - assert (old_index->type == glsl_type::uint_type); - old_index = new(ctx) ir_expression(ir_unop_u2i, old_index); - } - - ir_constant *old_index_constant = - old_index->constant_expression_value(ctx); - if (old_index_constant) { - /* gl_ClipDistance is being accessed via a constant index. Don't bother - * creating expressions to calculate the lowered indices. Just create - * constants. - */ - int const_val = old_index_constant->get_int_component(0) + offset; - array_index = new(ctx) ir_constant(const_val / 4); - swizzle_index = new(ctx) ir_constant(const_val % 4); - } else { - /* Create a variable to hold the value of old_index (so that we - * don't compute it twice). - */ - ir_variable *old_index_var = new(ctx) ir_variable( - glsl_type::int_type, "distance_index", ir_var_temporary); - this->base_ir->insert_before(old_index_var); - this->base_ir->insert_before(new(ctx) ir_assignment( - new(ctx) ir_dereference_variable(old_index_var), old_index)); - - /* Create the expression distance_index / 4. Do this as a bit - * shift because that's likely to be more efficient. - */ - array_index = new(ctx) ir_expression( - ir_binop_rshift, - new(ctx) ir_expression(ir_binop_add, - new(ctx) ir_dereference_variable(old_index_var), - new(ctx) ir_constant(offset)), - new(ctx) ir_constant(2)); - - /* Create the expression distance_index % 4. Do this as a bitwise - * AND because that's likely to be more efficient. - */ - swizzle_index = new(ctx) ir_expression( - ir_binop_bit_and, - new(ctx) ir_expression(ir_binop_add, - new(ctx) ir_dereference_variable(old_index_var), - new(ctx) ir_constant(offset)), - new(ctx) ir_constant(3)); - } -} - - -/** - * Determine whether the given rvalue describes an array of 8 floats that - * needs to be lowered to an array of 2 vec4's; that is, determine whether it - * matches one of the following patterns: - * - * - gl_ClipDistance (if gl_ClipDistance is 1D) - * - gl_ClipDistance[i] (if gl_ClipDistance is 2D) - */ -bool -lower_distance_visitor::is_distance_vec8(ir_rvalue *ir) -{ - /* Note that geometry shaders contain gl_ClipDistance both as an input - * (which is a 2D array) and an output (which is a 1D array), so it's - * possible for both this->old_distance_out_var and - * this->old_distance_in_var to be non-NULL in the same shader. - */ - - if (!ir->type->is_array()) - return false; - if (ir->type->fields.array != glsl_type::float_type) - return false; - - if (this->old_distance_out_var) { - if (ir->variable_referenced() == this->old_distance_out_var) - return true; - } - if (this->old_distance_in_var) { - assert(this->shader_stage == MESA_SHADER_TESS_CTRL || - this->shader_stage == MESA_SHADER_TESS_EVAL || - this->shader_stage == MESA_SHADER_GEOMETRY || - this->shader_stage == MESA_SHADER_FRAGMENT); - - if (ir->variable_referenced() == this->old_distance_in_var) - return true; - } - return false; -} - - -/** - * If the given ir satisfies is_distance_vec8(), return new ir - * representing its lowered equivalent. That is, map: - * - * - gl_ClipDistance => gl_ClipDistanceMESA (if gl_ClipDistance is 1D) - * - gl_ClipDistance[i] => gl_ClipDistanceMESA[i] (if gl_ClipDistance is 2D) - * - * Otherwise return NULL. - */ -ir_rvalue * -lower_distance_visitor::lower_distance_vec8(ir_rvalue *ir) -{ - if (!ir->type->is_array()) - return NULL; - if (ir->type->fields.array != glsl_type::float_type) - return NULL; - - ir_variable **new_var = NULL; - if (this->old_distance_out_var) { - if (ir->variable_referenced() == this->old_distance_out_var) - new_var = &this->new_distance_out_var; - } - if (this->old_distance_in_var) { - if (ir->variable_referenced() == this->old_distance_in_var) - new_var = &this->new_distance_in_var; - } - if (new_var == NULL) - return NULL; - - if (ir->as_dereference_variable()) { - return new(ralloc_parent(ir)) ir_dereference_variable(*new_var); - } else { - ir_dereference_array *array_ref = ir->as_dereference_array(); - assert(array_ref); - assert(array_ref->array->as_dereference_variable()); - - return new(ralloc_parent(ir)) - ir_dereference_array(*new_var, array_ref->array_index); - } -} - - -void -lower_distance_visitor::handle_rvalue(ir_rvalue **rv) -{ - if (*rv == NULL) - return; - - ir_dereference_array *const array_deref = (*rv)->as_dereference_array(); - if (array_deref == NULL) - return; - - /* Replace any expression that indexes one of the floats in gl_ClipDistance - * with an expression that indexes into one of the vec4's in - * gl_ClipDistanceMESA and accesses the appropriate component. - */ - ir_rvalue *lowered_vec8 = - this->lower_distance_vec8(array_deref->array); - if (lowered_vec8 != NULL) { - this->progress = true; - ir_rvalue *array_index; - ir_rvalue *swizzle_index; - this->create_indices(array_deref->array_index, array_index, swizzle_index); - void *mem_ctx = ralloc_parent(array_deref); - - ir_dereference_array *const new_array_deref = - new(mem_ctx) ir_dereference_array(lowered_vec8, array_index); - - ir_expression *const expr = - new(mem_ctx) ir_expression(ir_binop_vector_extract, - new_array_deref, - swizzle_index); - - *rv = expr; - } -} - -void -lower_distance_visitor::fix_lhs(ir_assignment *ir) -{ - if (ir->lhs->ir_type == ir_type_expression) { - void *mem_ctx = ralloc_parent(ir); - ir_expression *const expr = (ir_expression *) ir->lhs; - - /* The expression must be of the form: - * - * (vector_extract gl_ClipDistanceMESA[i], j). - */ - assert(expr->operation == ir_binop_vector_extract); - assert(expr->operands[0]->ir_type == ir_type_dereference_array); - assert(expr->operands[0]->type == glsl_type::vec4_type); - - ir_dereference *const new_lhs = (ir_dereference *) expr->operands[0]; - ir->rhs = new(mem_ctx) ir_expression(ir_triop_vector_insert, - glsl_type::vec4_type, - new_lhs->clone(mem_ctx, NULL), - ir->rhs, - expr->operands[1]); - ir->set_lhs(new_lhs); - ir->write_mask = WRITEMASK_XYZW; - } -} - -/** - * Replace any assignment having the 1D gl_ClipDistance (undereferenced) as - * its LHS or RHS with a sequence of assignments, one for each component of - * the array. Each of these assignments is lowered to refer to - * gl_ClipDistanceMESA as appropriate. - * - * We need to do a similar replacement for 2D gl_ClipDistance, however since - * it's an input, the only case we need to address is where a 1D slice of it - * is the entire RHS of an assignment, e.g.: - * - * foo = gl_in[i].gl_ClipDistance - */ -ir_visitor_status -lower_distance_visitor::visit_leave(ir_assignment *ir) -{ - /* First invoke the base class visitor. This causes handle_rvalue() to be - * called on ir->rhs and ir->condition. - */ - ir_rvalue_visitor::visit_leave(ir); - - if (this->is_distance_vec8(ir->lhs) || - this->is_distance_vec8(ir->rhs)) { - /* LHS or RHS of the assignment is the entire 1D gl_ClipDistance array - * (or a 1D slice of a 2D gl_ClipDistance input array). Since we are - * reshaping gl_ClipDistance from an array of floats to an array of - * vec4's, this isn't going to work as a bulk assignment anymore, so - * unroll it to element-by-element assignments and lower each of them. - * - * Note: to unroll into element-by-element assignments, we need to make - * clones of the LHS and RHS. This is safe because expressions and - * l-values are side-effect free. - */ - void *ctx = ralloc_parent(ir); - int array_size = ir->lhs->type->array_size(); - for (int i = 0; i < array_size; ++i) { - ir_dereference_array *new_lhs = new(ctx) ir_dereference_array( - ir->lhs->clone(ctx, NULL), new(ctx) ir_constant(i)); - ir_dereference_array *new_rhs = new(ctx) ir_dereference_array( - ir->rhs->clone(ctx, NULL), new(ctx) ir_constant(i)); - this->handle_rvalue((ir_rvalue **) &new_rhs); - - /* Handle the LHS after creating the new assignment. This must - * happen in this order because handle_rvalue may replace the old LHS - * with an ir_expression of ir_binop_vector_extract. Since this is - * not a valide l-value, this will cause an assertion in the - * ir_assignment constructor to fail. - * - * If this occurs, replace the mangled LHS with a dereference of the - * vector, and replace the RHS with an ir_triop_vector_insert. - */ - ir_assignment *const assign = new(ctx) ir_assignment(new_lhs, new_rhs); - this->handle_rvalue((ir_rvalue **) &assign->lhs); - this->fix_lhs(assign); - - this->base_ir->insert_before(assign); - } - ir->remove(); - - return visit_continue; - } - - /* Handle the LHS as if it were an r-value. Normally - * rvalue_visit(ir_assignment *) only visits the RHS, but we need to lower - * expressions in the LHS as well. - * - * This may cause the LHS to get replaced with an ir_expression of - * ir_binop_vector_extract. If this occurs, replace it with a dereference - * of the vector, and replace the RHS with an ir_triop_vector_insert. - */ - handle_rvalue((ir_rvalue **)&ir->lhs); - this->fix_lhs(ir); - - return rvalue_visit(ir); -} - - -/** - * Set up base_ir properly and call visit_leave() on a newly created - * ir_assignment node. This is used in cases where we have to insert an - * ir_assignment in a place where we know the hierarchical visitor won't see - * it. - */ -void -lower_distance_visitor::visit_new_assignment(ir_assignment *ir) -{ - ir_instruction *old_base_ir = this->base_ir; - this->base_ir = ir; - ir->accept(this); - this->base_ir = old_base_ir; -} - - -/** - * If a 1D gl_ClipDistance variable appears as an argument in an ir_call - * expression, replace it with a temporary variable, and make sure the ir_call - * is preceded and/or followed by assignments that copy the contents of the - * temporary variable to and/or from gl_ClipDistance. Each of these - * assignments is then lowered to refer to gl_ClipDistanceMESA. - * - * We need to do a similar replacement for 2D gl_ClipDistance, however since - * it's an input, the only case we need to address is where a 1D slice of it - * is passed as an "in" parameter to an ir_call, e.g.: - * - * foo(gl_in[i].gl_ClipDistance) - */ -ir_visitor_status -lower_distance_visitor::visit_leave(ir_call *ir) -{ - void *ctx = ralloc_parent(ir); - - const exec_node *formal_param_node = ir->callee->parameters.get_head_raw(); - const exec_node *actual_param_node = ir->actual_parameters.get_head_raw(); - while (!actual_param_node->is_tail_sentinel()) { - ir_variable *formal_param = (ir_variable *) formal_param_node; - ir_rvalue *actual_param = (ir_rvalue *) actual_param_node; - - /* Advance formal_param_node and actual_param_node now so that we can - * safely replace actual_param with another node, if necessary, below. - */ - formal_param_node = formal_param_node->next; - actual_param_node = actual_param_node->next; - - if (this->is_distance_vec8(actual_param)) { - /* User is trying to pass the whole 1D gl_ClipDistance array (or a 1D - * slice of a 2D gl_ClipDistance array) to a function call. Since we - * are reshaping gl_ClipDistance from an array of floats to an array - * of vec4's, this isn't going to work anymore, so use a temporary - * array instead. - */ - ir_variable *temp_clip_distance = new(ctx) ir_variable( - actual_param->type, "temp_clip_distance", ir_var_temporary); - this->base_ir->insert_before(temp_clip_distance); - actual_param->replace_with( - new(ctx) ir_dereference_variable(temp_clip_distance)); - if (formal_param->data.mode == ir_var_function_in - || formal_param->data.mode == ir_var_function_inout) { - /* Copy from gl_ClipDistance to the temporary before the call. - * Since we are going to insert this copy before the current - * instruction, we need to visit it afterwards to make sure it - * gets lowered. - */ - ir_assignment *new_assignment = new(ctx) ir_assignment( - new(ctx) ir_dereference_variable(temp_clip_distance), - actual_param->clone(ctx, NULL)); - this->base_ir->insert_before(new_assignment); - this->visit_new_assignment(new_assignment); - } - if (formal_param->data.mode == ir_var_function_out - || formal_param->data.mode == ir_var_function_inout) { - /* Copy from the temporary to gl_ClipDistance after the call. - * Since visit_list_elements() has already decided which - * instruction it's going to visit next, we need to visit - * afterwards to make sure it gets lowered. - */ - ir_assignment *new_assignment = new(ctx) ir_assignment( - actual_param->clone(ctx, NULL), - new(ctx) ir_dereference_variable(temp_clip_distance)); - this->base_ir->insert_after(new_assignment); - this->visit_new_assignment(new_assignment); - } - } - } - - return rvalue_visit(ir); -} - -namespace { -class lower_distance_visitor_counter : public ir_rvalue_visitor { -public: - explicit lower_distance_visitor_counter(void) - : in_clip_size(0), in_cull_size(0), - out_clip_size(0), out_cull_size(0) - { - } - - virtual ir_visitor_status visit(ir_variable *); - virtual void handle_rvalue(ir_rvalue **rvalue); - - int in_clip_size; - int in_cull_size; - int out_clip_size; - int out_cull_size; -}; - -} -/** - * Count gl_ClipDistance and gl_CullDistance sizes. - */ -ir_visitor_status -lower_distance_visitor_counter::visit(ir_variable *ir) -{ - int *clip_size, *cull_size; - - if (!ir->name) - return visit_continue; - - if (ir->data.mode == ir_var_shader_out) { - clip_size = &out_clip_size; - cull_size = &out_cull_size; - } else if (ir->data.mode == ir_var_shader_in) { - clip_size = &in_clip_size; - cull_size = &in_cull_size; - } else - return visit_continue; - - if (ir->type->is_unsized_array()) - return visit_continue; - - if (*clip_size == 0) { - if (!strcmp(ir->name, "gl_ClipDistance")) { - if (!ir->type->fields.array->is_array()) - *clip_size = ir->type->array_size(); - else - *clip_size = ir->type->fields.array->array_size(); - } - } - - if (*cull_size == 0) { - if (!strcmp(ir->name, "gl_CullDistance")) { - if (!ir->type->fields.array->is_array()) - *cull_size = ir->type->array_size(); - else - *cull_size = ir->type->fields.array->array_size(); - } - } - return visit_continue; -} - -void -lower_distance_visitor_counter::handle_rvalue(ir_rvalue **) -{ - return; -} - -bool -lower_clip_cull_distance(struct gl_shader_program *prog, - struct gl_linked_shader *shader) -{ - int clip_size, cull_size; - - lower_distance_visitor_counter count; - visit_list_elements(&count, shader->ir); - - clip_size = MAX2(count.in_clip_size, count.out_clip_size); - cull_size = MAX2(count.in_cull_size, count.out_cull_size); - - if (clip_size == 0 && cull_size == 0) - return false; - - lower_distance_visitor v(shader->Stage, "gl_ClipDistance", clip_size + cull_size, 0); - visit_list_elements(&v, shader->ir); - - lower_distance_visitor v2(shader->Stage, "gl_CullDistance", &v, clip_size); - visit_list_elements(&v2, shader->ir); - - if (v2.new_distance_out_var) - shader->symbols->add_variable(v2.new_distance_out_var); - if (v2.new_distance_in_var) - shader->symbols->add_variable(v2.new_distance_in_var); - - return v2.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_instructions.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_instructions.cpp deleted file mode 100644 index ecfca87..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_instructions.cpp +++ /dev/null @@ -1,709 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_instructions.cpp - * - * Many GPUs lack native instructions for certain expression operations, and - * must replace them with some other expression tree. This pass lowers some - * of the most common cases, allowing the lowering code to be implemented once - * rather than in each driver backend. - * - * Currently supported transformations: - * - DOPS_TO_DFRAC - * - * DOPS_TO_DFRAC: - * -------------- - * Converts double trunc, ceil, floor, round to fract - */ - -#include "../../mesa/program/prog_instruction.h" /* for swizzle */ -#include "../glsl_types.h" -#include "ir.h" -#include "ir_builder.h" -#include "ir_optimization.h" -#include "../../util/half_float.h" - -#include - -/* Operations for lower_instructions() */ -#define DOPS_TO_DFRAC 0x800 -#define FIND_LSB_TO_FLOAT_CAST 0x20000 -#define FIND_MSB_TO_FLOAT_CAST 0x40000 -#define IMUL_HIGH_TO_MUL 0x80000 - -using namespace ir_builder; - -namespace { - -class lower_instructions_visitor : public ir_hierarchical_visitor { -public: - lower_instructions_visitor(unsigned lower) - : progress(false), lower(lower) { } - - ir_visitor_status visit_leave(ir_expression *); - - bool progress; - -private: - unsigned lower; /** Bitfield of which operations to lower */ - - void double_dot_to_fma(ir_expression *); - void double_lrp(ir_expression *); - void dceil_to_dfrac(ir_expression *); - void dfloor_to_dfrac(ir_expression *); - void dround_even_to_dfrac(ir_expression *); - void dtrunc_to_dfrac(ir_expression *); - void dsign_to_csel(ir_expression *); - void find_lsb_to_float_cast(ir_expression *ir); - void find_msb_to_float_cast(ir_expression *ir); - void imul_high_to_mul(ir_expression *ir); - - ir_expression *_carry(operand a, operand b); - - static ir_constant *_imm_fp(void *mem_ctx, - const glsl_type *type, - double f, - unsigned vector_elements=1); -}; - -} /* anonymous namespace */ - -/** - * Determine if a particular type of lowering should occur - */ -#define lowering(x) (this->lower & x) - -bool -lower_instructions(exec_list *instructions, - bool have_dround, bool have_gpu_shader5) -{ - unsigned what_to_lower = - (have_dround ? 0 : DOPS_TO_DFRAC) | - /* Assume that if ARB_gpu_shader5 is not supported then all of the - * extended integer functions need lowering. It may be necessary to add - * some caps for individual instructions. - */ - (!have_gpu_shader5 ? FIND_LSB_TO_FLOAT_CAST | - FIND_MSB_TO_FLOAT_CAST | - IMUL_HIGH_TO_MUL : 0); - - lower_instructions_visitor v(what_to_lower); - - visit_list_elements(&v, instructions); - return v.progress; -} - -void -lower_instructions_visitor::double_dot_to_fma(ir_expression *ir) -{ - ir_variable *temp = new(ir) ir_variable(ir->operands[0]->type->get_base_type(), "dot_res", - ir_var_temporary); - this->base_ir->insert_before(temp); - - int nc = ir->operands[0]->type->components(); - for (int i = nc - 1; i >= 1; i--) { - ir_assignment *assig; - if (i == (nc - 1)) { - assig = assign(temp, mul(swizzle(ir->operands[0]->clone(ir, NULL), i, 1), - swizzle(ir->operands[1]->clone(ir, NULL), i, 1))); - } else { - assig = assign(temp, fma(swizzle(ir->operands[0]->clone(ir, NULL), i, 1), - swizzle(ir->operands[1]->clone(ir, NULL), i, 1), - temp)); - } - this->base_ir->insert_before(assig); - } - - ir->operation = ir_triop_fma; - ir->init_num_operands(); - ir->operands[0] = swizzle(ir->operands[0], 0, 1); - ir->operands[1] = swizzle(ir->operands[1], 0, 1); - ir->operands[2] = new(ir) ir_dereference_variable(temp); - - this->progress = true; - -} - -void -lower_instructions_visitor::double_lrp(ir_expression *ir) -{ - int swizval; - ir_rvalue *op0 = ir->operands[0], *op2 = ir->operands[2]; - ir_constant *one = new(ir) ir_constant(1.0, op2->type->vector_elements); - - switch (op2->type->vector_elements) { - case 1: - swizval = SWIZZLE_XXXX; - break; - default: - assert(op0->type->vector_elements == op2->type->vector_elements); - swizval = SWIZZLE_XYZW; - break; - } - - ir->operation = ir_triop_fma; - ir->init_num_operands(); - ir->operands[0] = swizzle(op2, swizval, op0->type->vector_elements); - ir->operands[2] = mul(sub(one, op2->clone(ir, NULL)), op0); - - this->progress = true; -} - -void -lower_instructions_visitor::dceil_to_dfrac(ir_expression *ir) -{ - /* - * frtemp = frac(x); - * temp = sub(x, frtemp); - * result = temp + ((frtemp != 0.0) ? 1.0 : 0.0); - */ - ir_instruction &i = *base_ir; - ir_constant *zero = new(ir) ir_constant(0.0, ir->operands[0]->type->vector_elements); - ir_constant *one = new(ir) ir_constant(1.0, ir->operands[0]->type->vector_elements); - ir_variable *frtemp = new(ir) ir_variable(ir->operands[0]->type, "frtemp", - ir_var_temporary); - - i.insert_before(frtemp); - i.insert_before(assign(frtemp, fract(ir->operands[0]))); - - ir->operation = ir_binop_add; - ir->init_num_operands(); - ir->operands[0] = sub(ir->operands[0]->clone(ir, NULL), frtemp); - ir->operands[1] = csel(nequal(frtemp, zero), one, zero->clone(ir, NULL)); - - this->progress = true; -} - -void -lower_instructions_visitor::dfloor_to_dfrac(ir_expression *ir) -{ - /* - * frtemp = frac(x); - * result = sub(x, frtemp); - */ - ir->operation = ir_binop_sub; - ir->init_num_operands(); - ir->operands[1] = fract(ir->operands[0]->clone(ir, NULL)); - - this->progress = true; -} -void -lower_instructions_visitor::dround_even_to_dfrac(ir_expression *ir) -{ - /* - * insane but works - * temp = x + 0.5; - * frtemp = frac(temp); - * t2 = sub(temp, frtemp); - * if (frac(x) == 0.5) - * result = frac(t2 * 0.5) == 0 ? t2 : t2 - 1; - * else - * result = t2; - - */ - ir_instruction &i = *base_ir; - ir_variable *frtemp = new(ir) ir_variable(ir->operands[0]->type, "frtemp", - ir_var_temporary); - ir_variable *temp = new(ir) ir_variable(ir->operands[0]->type, "temp", - ir_var_temporary); - ir_variable *t2 = new(ir) ir_variable(ir->operands[0]->type, "t2", - ir_var_temporary); - ir_constant *p5 = new(ir) ir_constant(0.5, ir->operands[0]->type->vector_elements); - ir_constant *one = new(ir) ir_constant(1.0, ir->operands[0]->type->vector_elements); - ir_constant *zero = new(ir) ir_constant(0.0, ir->operands[0]->type->vector_elements); - - i.insert_before(temp); - i.insert_before(assign(temp, add(ir->operands[0], p5))); - - i.insert_before(frtemp); - i.insert_before(assign(frtemp, fract(temp))); - - i.insert_before(t2); - i.insert_before(assign(t2, sub(temp, frtemp))); - - ir->operation = ir_triop_csel; - ir->init_num_operands(); - ir->operands[0] = equal(fract(ir->operands[0]->clone(ir, NULL)), - p5->clone(ir, NULL)); - ir->operands[1] = csel(equal(fract(mul(t2, p5->clone(ir, NULL))), - zero), - t2, - sub(t2, one)); - ir->operands[2] = new(ir) ir_dereference_variable(t2); - - this->progress = true; -} - -void -lower_instructions_visitor::dtrunc_to_dfrac(ir_expression *ir) -{ - /* - * frtemp = frac(x); - * temp = sub(x, frtemp); - * result = x >= 0 ? temp : temp + (frtemp == 0.0) ? 0 : 1; - */ - ir_rvalue *arg = ir->operands[0]; - ir_instruction &i = *base_ir; - - ir_constant *zero = new(ir) ir_constant(0.0, arg->type->vector_elements); - ir_constant *one = new(ir) ir_constant(1.0, arg->type->vector_elements); - ir_variable *frtemp = new(ir) ir_variable(arg->type, "frtemp", - ir_var_temporary); - ir_variable *temp = new(ir) ir_variable(ir->operands[0]->type, "temp", - ir_var_temporary); - - i.insert_before(frtemp); - i.insert_before(assign(frtemp, fract(arg))); - i.insert_before(temp); - i.insert_before(assign(temp, sub(arg->clone(ir, NULL), frtemp))); - - ir->operation = ir_triop_csel; - ir->init_num_operands(); - ir->operands[0] = gequal(arg->clone(ir, NULL), zero); - ir->operands[1] = new (ir) ir_dereference_variable(temp); - ir->operands[2] = add(temp, - csel(equal(frtemp, zero->clone(ir, NULL)), - zero->clone(ir, NULL), - one)); - - this->progress = true; -} - -void -lower_instructions_visitor::dsign_to_csel(ir_expression *ir) -{ - /* - * temp = x > 0.0 ? 1.0 : 0.0; - * result = x < 0.0 ? -1.0 : temp; - */ - ir_rvalue *arg = ir->operands[0]; - ir_constant *zero = new(ir) ir_constant(0.0, arg->type->vector_elements); - ir_constant *one = new(ir) ir_constant(1.0, arg->type->vector_elements); - ir_constant *neg_one = new(ir) ir_constant(-1.0, arg->type->vector_elements); - - ir->operation = ir_triop_csel; - ir->init_num_operands(); - ir->operands[0] = less(arg->clone(ir, NULL), - zero->clone(ir, NULL)); - ir->operands[1] = neg_one; - ir->operands[2] = csel(greater(arg, zero), - one, - zero->clone(ir, NULL)); - - this->progress = true; -} - -void -lower_instructions_visitor::find_lsb_to_float_cast(ir_expression *ir) -{ - /* For more details, see: - * - * http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightFloatCast - */ - const unsigned elements = ir->operands[0]->type->vector_elements; - ir_constant *c0 = new(ir) ir_constant(unsigned(0), elements); - ir_constant *cminus1 = new(ir) ir_constant(int(-1), elements); - ir_constant *c23 = new(ir) ir_constant(int(23), elements); - ir_constant *c7F = new(ir) ir_constant(int(0x7F), elements); - ir_variable *temp = - new(ir) ir_variable(glsl_type::ivec(elements), "temp", ir_var_temporary); - ir_variable *lsb_only = - new(ir) ir_variable(glsl_type::uvec(elements), "lsb_only", ir_var_temporary); - ir_variable *as_float = - new(ir) ir_variable(glsl_type::vec(elements), "as_float", ir_var_temporary); - ir_variable *lsb = - new(ir) ir_variable(glsl_type::ivec(elements), "lsb", ir_var_temporary); - - ir_instruction &i = *base_ir; - - i.insert_before(temp); - - if (ir->operands[0]->type->base_type == GLSL_TYPE_INT) { - i.insert_before(assign(temp, ir->operands[0])); - } else { - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); - i.insert_before(assign(temp, u2i(ir->operands[0]))); - } - - /* The int-to-float conversion is lossless because (value & -value) is - * either a power of two or zero. We don't use the result in the zero - * case. The uint() cast is necessary so that 0x80000000 does not - * generate a negative value. - * - * uint lsb_only = uint(value & -value); - * float as_float = float(lsb_only); - */ - i.insert_before(lsb_only); - i.insert_before(assign(lsb_only, i2u(bit_and(temp, neg(temp))))); - - i.insert_before(as_float); - i.insert_before(assign(as_float, u2f(lsb_only))); - - /* This is basically an open-coded frexp. Implementations that have a - * native frexp instruction would be better served by that. This is - * optimized versus a full-featured open-coded implementation in two ways: - * - * - We don't care about a correct result from subnormal numbers (including - * 0.0), so the raw exponent can always be safely unbiased. - * - * - The value cannot be negative, so it does not need to be masked off to - * extract the exponent. - * - * int lsb = (floatBitsToInt(as_float) >> 23) - 0x7f; - */ - i.insert_before(lsb); - i.insert_before(assign(lsb, sub(rshift(bitcast_f2i(as_float), c23), c7F))); - - /* Use lsb_only in the comparison instead of temp so that the & (far above) - * can possibly generate the result without an explicit comparison. - * - * (lsb_only == 0) ? -1 : lsb; - * - * Since our input values are all integers, the unbiased exponent must not - * be negative. It will only be negative (-0x7f, in fact) if lsb_only is - * 0. Instead of using (lsb_only == 0), we could use (lsb >= 0). Which is - * better is likely GPU dependent. Either way, the difference should be - * small. - */ - ir->operation = ir_triop_csel; - ir->init_num_operands(); - ir->operands[0] = equal(lsb_only, c0); - ir->operands[1] = cminus1; - ir->operands[2] = new(ir) ir_dereference_variable(lsb); - - this->progress = true; -} - -void -lower_instructions_visitor::find_msb_to_float_cast(ir_expression *ir) -{ - /* For more details, see: - * - * http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightFloatCast - */ - const unsigned elements = ir->operands[0]->type->vector_elements; - ir_constant *c0 = new(ir) ir_constant(int(0), elements); - ir_constant *cminus1 = new(ir) ir_constant(int(-1), elements); - ir_constant *c23 = new(ir) ir_constant(int(23), elements); - ir_constant *c7F = new(ir) ir_constant(int(0x7F), elements); - ir_constant *c000000FF = new(ir) ir_constant(0x000000FFu, elements); - ir_constant *cFFFFFF00 = new(ir) ir_constant(0xFFFFFF00u, elements); - ir_variable *temp = - new(ir) ir_variable(glsl_type::uvec(elements), "temp", ir_var_temporary); - ir_variable *as_float = - new(ir) ir_variable(glsl_type::vec(elements), "as_float", ir_var_temporary); - ir_variable *msb = - new(ir) ir_variable(glsl_type::ivec(elements), "msb", ir_var_temporary); - - ir_instruction &i = *base_ir; - - i.insert_before(temp); - - if (ir->operands[0]->type->base_type == GLSL_TYPE_UINT) { - i.insert_before(assign(temp, ir->operands[0])); - } else { - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); - - /* findMSB(uint(abs(some_int))) almost always does the right thing. - * There are two problem values: - * - * * 0x80000000. Since abs(0x80000000) == 0x80000000, findMSB returns - * 31. However, findMSB(int(0x80000000)) == 30. - * - * * 0xffffffff. Since abs(0xffffffff) == 1, findMSB returns - * 31. Section 8.8 (Integer Functions) of the GLSL 4.50 spec says: - * - * For a value of zero or negative one, -1 will be returned. - * - * For all negative number cases, including 0x80000000 and 0xffffffff, - * the correct value is obtained from findMSB if instead of negating the - * (already negative) value the logical-not is used. A conditonal - * logical-not can be achieved in two instructions. - */ - ir_variable *as_int = - new(ir) ir_variable(glsl_type::ivec(elements), "as_int", ir_var_temporary); - ir_constant *c31 = new(ir) ir_constant(int(31), elements); - - i.insert_before(as_int); - i.insert_before(assign(as_int, ir->operands[0])); - i.insert_before(assign(temp, i2u(expr(ir_binop_bit_xor, - as_int, - rshift(as_int, c31))))); - } - - /* The int-to-float conversion is lossless because bits are conditionally - * masked off the bottom of temp to ensure the value has at most 24 bits of - * data or is zero. We don't use the result in the zero case. The uint() - * cast is necessary so that 0x80000000 does not generate a negative value. - * - * float as_float = float(temp > 255 ? temp & ~255 : temp); - */ - i.insert_before(as_float); - i.insert_before(assign(as_float, u2f(csel(greater(temp, c000000FF), - bit_and(temp, cFFFFFF00), - temp)))); - - /* This is basically an open-coded frexp. Implementations that have a - * native frexp instruction would be better served by that. This is - * optimized versus a full-featured open-coded implementation in two ways: - * - * - We don't care about a correct result from subnormal numbers (including - * 0.0), so the raw exponent can always be safely unbiased. - * - * - The value cannot be negative, so it does not need to be masked off to - * extract the exponent. - * - * int msb = (floatBitsToInt(as_float) >> 23) - 0x7f; - */ - i.insert_before(msb); - i.insert_before(assign(msb, sub(rshift(bitcast_f2i(as_float), c23), c7F))); - - /* Use msb in the comparison instead of temp so that the subtract can - * possibly generate the result without an explicit comparison. - * - * (msb < 0) ? -1 : msb; - * - * Since our input values are all integers, the unbiased exponent must not - * be negative. It will only be negative (-0x7f, in fact) if temp is 0. - */ - ir->operation = ir_triop_csel; - ir->init_num_operands(); - ir->operands[0] = less(msb, c0); - ir->operands[1] = cminus1; - ir->operands[2] = new(ir) ir_dereference_variable(msb); - - this->progress = true; -} - -ir_expression * -lower_instructions_visitor::_carry(operand a, operand b) -{ - return i2u(b2i(less(add(a, b), - a.val->clone(ralloc_parent(a.val), NULL)))); -} - -void -lower_instructions_visitor::imul_high_to_mul(ir_expression *ir) -{ - /* ABCD - * * EFGH - * ====== - * (GH * CD) + (GH * AB) << 16 + (EF * CD) << 16 + (EF * AB) << 32 - * - * In GLSL, (a * b) becomes - * - * uint m1 = (a & 0x0000ffffu) * (b & 0x0000ffffu); - * uint m2 = (a & 0x0000ffffu) * (b >> 16); - * uint m3 = (a >> 16) * (b & 0x0000ffffu); - * uint m4 = (a >> 16) * (b >> 16); - * - * uint c1; - * uint c2; - * uint lo_result; - * uint hi_result; - * - * lo_result = uaddCarry(m1, m2 << 16, c1); - * hi_result = m4 + c1; - * lo_result = uaddCarry(lo_result, m3 << 16, c2); - * hi_result = hi_result + c2; - * hi_result = hi_result + (m2 >> 16) + (m3 >> 16); - */ - const unsigned elements = ir->operands[0]->type->vector_elements; - ir_variable *src1 = - new(ir) ir_variable(glsl_type::uvec(elements), "src1", ir_var_temporary); - ir_variable *src1h = - new(ir) ir_variable(glsl_type::uvec(elements), "src1h", ir_var_temporary); - ir_variable *src1l = - new(ir) ir_variable(glsl_type::uvec(elements), "src1l", ir_var_temporary); - ir_variable *src2 = - new(ir) ir_variable(glsl_type::uvec(elements), "src2", ir_var_temporary); - ir_variable *src2h = - new(ir) ir_variable(glsl_type::uvec(elements), "src2h", ir_var_temporary); - ir_variable *src2l = - new(ir) ir_variable(glsl_type::uvec(elements), "src2l", ir_var_temporary); - ir_variable *t1 = - new(ir) ir_variable(glsl_type::uvec(elements), "t1", ir_var_temporary); - ir_variable *t2 = - new(ir) ir_variable(glsl_type::uvec(elements), "t2", ir_var_temporary); - ir_variable *lo = - new(ir) ir_variable(glsl_type::uvec(elements), "lo", ir_var_temporary); - ir_variable *hi = - new(ir) ir_variable(glsl_type::uvec(elements), "hi", ir_var_temporary); - ir_variable *different_signs = NULL; - ir_constant *c0000FFFF = new(ir) ir_constant(0x0000FFFFu, elements); - ir_constant *c16 = new(ir) ir_constant(16u, elements); - - ir_instruction &i = *base_ir; - - i.insert_before(src1); - i.insert_before(src2); - i.insert_before(src1h); - i.insert_before(src2h); - i.insert_before(src1l); - i.insert_before(src2l); - - if (ir->operands[0]->type->base_type == GLSL_TYPE_UINT) { - i.insert_before(assign(src1, ir->operands[0])); - i.insert_before(assign(src2, ir->operands[1])); - } else { - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); - - ir_variable *itmp1 = - new(ir) ir_variable(glsl_type::ivec(elements), "itmp1", ir_var_temporary); - ir_variable *itmp2 = - new(ir) ir_variable(glsl_type::ivec(elements), "itmp2", ir_var_temporary); - ir_constant *c0 = new(ir) ir_constant(int(0), elements); - - i.insert_before(itmp1); - i.insert_before(itmp2); - i.insert_before(assign(itmp1, ir->operands[0])); - i.insert_before(assign(itmp2, ir->operands[1])); - - different_signs = - new(ir) ir_variable(glsl_type::bvec(elements), "different_signs", - ir_var_temporary); - - i.insert_before(different_signs); - i.insert_before(assign(different_signs, expr(ir_binop_logic_xor, - less(itmp1, c0), - less(itmp2, c0->clone(ir, NULL))))); - - i.insert_before(assign(src1, i2u(abs(itmp1)))); - i.insert_before(assign(src2, i2u(abs(itmp2)))); - } - - i.insert_before(assign(src1l, bit_and(src1, c0000FFFF))); - i.insert_before(assign(src2l, bit_and(src2, c0000FFFF->clone(ir, NULL)))); - i.insert_before(assign(src1h, rshift(src1, c16))); - i.insert_before(assign(src2h, rshift(src2, c16->clone(ir, NULL)))); - - i.insert_before(lo); - i.insert_before(hi); - i.insert_before(t1); - i.insert_before(t2); - - i.insert_before(assign(lo, mul(src1l, src2l))); - i.insert_before(assign(t1, mul(src1l, src2h))); - i.insert_before(assign(t2, mul(src1h, src2l))); - i.insert_before(assign(hi, mul(src1h, src2h))); - - i.insert_before(assign(hi, add(hi, _carry(lo, lshift(t1, c16->clone(ir, NULL)))))); - i.insert_before(assign(lo, add(lo, lshift(t1, c16->clone(ir, NULL))))); - - i.insert_before(assign(hi, add(hi, _carry(lo, lshift(t2, c16->clone(ir, NULL)))))); - i.insert_before(assign(lo, add(lo, lshift(t2, c16->clone(ir, NULL))))); - - if (different_signs == NULL) { - assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT); - - ir->operation = ir_binop_add; - ir->init_num_operands(); - ir->operands[0] = add(hi, rshift(t1, c16->clone(ir, NULL))); - ir->operands[1] = rshift(t2, c16->clone(ir, NULL)); - } else { - assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT); - - i.insert_before(assign(hi, add(add(hi, rshift(t1, c16->clone(ir, NULL))), - rshift(t2, c16->clone(ir, NULL))))); - - /* For channels where different_signs is set we have to perform a 64-bit - * negation. This is *not* the same as just negating the high 32-bits. - * Consider -3 * 2. The high 32-bits is 0, but the desired result is - * -1, not -0! Recall -x == ~x + 1. - */ - ir_variable *neg_hi = - new(ir) ir_variable(glsl_type::ivec(elements), "neg_hi", ir_var_temporary); - ir_constant *c1 = new(ir) ir_constant(1u, elements); - - i.insert_before(neg_hi); - i.insert_before(assign(neg_hi, add(bit_not(u2i(hi)), - u2i(_carry(bit_not(lo), c1))))); - - ir->operation = ir_triop_csel; - ir->init_num_operands(); - ir->operands[0] = new(ir) ir_dereference_variable(different_signs); - ir->operands[1] = new(ir) ir_dereference_variable(neg_hi); - ir->operands[2] = u2i(hi); - } -} - -ir_visitor_status -lower_instructions_visitor::visit_leave(ir_expression *ir) -{ - switch (ir->operation) { - case ir_binop_dot: - if (ir->operands[0]->type->is_double()) - double_dot_to_fma(ir); - break; - case ir_triop_lrp: - if (ir->operands[0]->type->is_double()) - double_lrp(ir); - break; - - case ir_unop_trunc: - if (lowering(DOPS_TO_DFRAC) && ir->type->is_double()) - dtrunc_to_dfrac(ir); - break; - - case ir_unop_ceil: - if (lowering(DOPS_TO_DFRAC) && ir->type->is_double()) - dceil_to_dfrac(ir); - break; - - case ir_unop_floor: - if (lowering(DOPS_TO_DFRAC) && ir->type->is_double()) - dfloor_to_dfrac(ir); - break; - - case ir_unop_round_even: - if (lowering(DOPS_TO_DFRAC) && ir->type->is_double()) - dround_even_to_dfrac(ir); - break; - - case ir_unop_sign: - if (lowering(DOPS_TO_DFRAC) && ir->type->is_double()) - dsign_to_csel(ir); - break; - - case ir_unop_find_lsb: - if (lowering(FIND_LSB_TO_FLOAT_CAST)) - find_lsb_to_float_cast(ir); - break; - - case ir_unop_find_msb: - if (lowering(FIND_MSB_TO_FLOAT_CAST)) - find_msb_to_float_cast(ir); - break; - - case ir_binop_imul_high: - if (lowering(IMUL_HIGH_TO_MUL)) - imul_high_to_mul(ir); - break; - - default: - return visit_continue; - } - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_int64.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_int64.cpp deleted file mode 100644 index 1c097a4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_int64.cpp +++ /dev/null @@ -1,379 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_int64.cpp - * - * Lower 64-bit operations to 32-bit operations. Each 64-bit value is lowered - * to a uvec2. For each operation that can be lowered, there is a function - * called __builtin_foo with the same number of parameters that takes uvec2 - * sources and produces uvec2 results. An operation like - * - * uint64_t(x) / uint64_t(y) - * - * becomes - * - * packUint2x32(__builtin_udiv64(unpackUint2x32(x), unpackUint2x32(y))); - */ - -#include "../../util/macros.h" -#include "../glsl_types.h" -#include "ir.h" -#include "ir_rvalue_visitor.h" -#include "ir_builder.h" -#include "ir_optimization.h" -#include "../../util/hash_table.h" -#include "builtin_functions.h" - -typedef ir_function_signature *(*function_generator)(void *mem_ctx, - builtin_available_predicate avail); - -using namespace ir_builder; - -namespace lower_64bit { -void expand_source(ir_factory &, ir_rvalue *val, ir_variable **expanded_src); - -ir_dereference_variable *compact_destination(ir_factory &, - const glsl_type *type, - ir_variable *result[4]); - -ir_rvalue *lower_op_to_function_call(ir_instruction *base_ir, - ir_expression *ir, - ir_function_signature *callee); -}; - -using namespace lower_64bit; - -namespace { - -class lower_64bit_visitor : public ir_rvalue_visitor { -public: - lower_64bit_visitor(void *mem_ctx, exec_list *instructions, unsigned lower) - : progress(false), lower(lower), - function_list(), added_functions(&function_list, mem_ctx) - { - functions = _mesa_hash_table_create(mem_ctx, - _mesa_hash_string, - _mesa_key_string_equal); - - foreach_in_list(ir_instruction, node, instructions) { - ir_function *const f = node->as_function(); - - if (f == NULL || strncmp(f->name, "__builtin_", 10) != 0) - continue; - - add_function(f); - } - } - - ~lower_64bit_visitor() - { - _mesa_hash_table_destroy(functions, NULL); - } - - void handle_rvalue(ir_rvalue **rvalue); - - void add_function(ir_function *f) - { - _mesa_hash_table_insert(functions, f->name, f); - } - - ir_function *find_function(const char *name) - { - struct hash_entry *const entry = - _mesa_hash_table_search(functions, name); - - return entry != NULL ? (ir_function *) entry->data : NULL; - } - - bool progress; - -private: - unsigned lower; /** Bitfield of which operations to lower */ - - /** Hashtable containing all of the known functions in the IR */ - struct hash_table *functions; - -public: - exec_list function_list; - -private: - ir_factory added_functions; - - ir_rvalue *handle_op(ir_expression *ir, const char *function_name, - function_generator generator); -}; - -} /* anonymous namespace */ - -/** - * Determine if a particular type of lowering should occur - */ -#define lowering(x) (this->lower & x) - -bool -lower_64bit_integer_instructions(exec_list *instructions, - unsigned what_to_lower) -{ - if (instructions->is_empty()) - return false; - - ir_instruction *first_inst = (ir_instruction *) instructions->get_head_raw(); - void *const mem_ctx = ralloc_parent(first_inst); - lower_64bit_visitor v(mem_ctx, instructions, what_to_lower); - - visit_list_elements(&v, instructions); - - if (v.progress && !v.function_list.is_empty()) { - /* Move all of the nodes from function_list to the head if the incoming - * instruction list. - */ - exec_node *const after = &instructions->head_sentinel; - exec_node *const before = instructions->head_sentinel.next; - exec_node *const head = v.function_list.head_sentinel.next; - exec_node *const tail = v.function_list.tail_sentinel.prev; - - before->next = head; - head->prev = before; - - after->prev = tail; - tail->next = after; - } - - return v.progress; -} - - -/** - * Expand individual 64-bit values to uvec2 values - * - * Each operation is in one of a few forms. - * - * vector op vector - * vector op scalar - * scalar op vector - * scalar op scalar - * - * In the 'vector op vector' case, the two vectors must have the same size. - * In a way, the 'scalar op scalar' form is special case of the 'vector op - * vector' form. - * - * This method generates a new set of uvec2 values for each element of a - * single operand. If the operand is a scalar, the uvec2 is replicated - * multiple times. A value like - * - * u64vec3(a) + u64vec3(b) - * - * becomes - * - * u64vec3 tmp0 = u64vec3(a) + u64vec3(b); - * uvec2 tmp1 = unpackUint2x32(tmp0.x); - * uvec2 tmp2 = unpackUint2x32(tmp0.y); - * uvec2 tmp3 = unpackUint2x32(tmp0.z); - * - * and the returned operands array contains ir_variable pointers to - * - * { tmp1, tmp2, tmp3, tmp1 } - */ -void -lower_64bit::expand_source(ir_factory &body, - ir_rvalue *val, - ir_variable **expanded_src) -{ - assert(val->type->is_integer_64()); - - ir_variable *const temp = body.make_temp(val->type, "tmp"); - - body.emit(assign(temp, val)); - - const ir_expression_operation unpack_opcode = - val->type->base_type == GLSL_TYPE_UINT64 - ? ir_unop_unpack_uint_2x32 : ir_unop_unpack_int_2x32; - - const glsl_type *const type = - val->type->base_type == GLSL_TYPE_UINT64 - ? glsl_type::uvec2_type : glsl_type::ivec2_type; - - unsigned i; - for (i = 0; i < val->type->vector_elements; i++) { - expanded_src[i] = body.make_temp(type, "expanded_64bit_source"); - - body.emit(assign(expanded_src[i], - expr(unpack_opcode, swizzle(temp, i, 1)))); - } - - for (/* empty */; i < 4; i++) - expanded_src[i] = expanded_src[0]; -} - -/** - * Convert a series of uvec2 results into a single 64-bit integer vector - */ -ir_dereference_variable * -lower_64bit::compact_destination(ir_factory &body, - const glsl_type *type, - ir_variable *result[4]) -{ - const ir_expression_operation pack_opcode = - type->base_type == GLSL_TYPE_UINT64 - ? ir_unop_pack_uint_2x32 : ir_unop_pack_int_2x32; - - ir_variable *const compacted_result = - body.make_temp(type, "compacted_64bit_result"); - - for (unsigned i = 0; i < type->vector_elements; i++) { - body.emit(assign(compacted_result, - expr(pack_opcode, result[i]), - 1U << i)); - } - - void *const mem_ctx = ralloc_parent(compacted_result); - return new(mem_ctx) ir_dereference_variable(compacted_result); -} - -ir_rvalue * -lower_64bit::lower_op_to_function_call(ir_instruction *base_ir, - ir_expression *ir, - ir_function_signature *callee) -{ - const unsigned num_operands = ir->num_operands; - ir_variable *src[4][4]; - ir_variable *dst[4]; - void *const mem_ctx = ralloc_parent(ir); - exec_list instructions; - unsigned source_components = 0; - const glsl_type *const result_type = - ir->type->base_type == GLSL_TYPE_UINT64 - ? glsl_type::uvec2_type : glsl_type::ivec2_type; - - ir_factory body(&instructions, mem_ctx); - - for (unsigned i = 0; i < num_operands; i++) { - expand_source(body, ir->operands[i], src[i]); - - if (ir->operands[i]->type->vector_elements > source_components) - source_components = ir->operands[i]->type->vector_elements; - } - - for (unsigned i = 0; i < source_components; i++) { - dst[i] = body.make_temp(result_type, "expanded_64bit_result"); - - exec_list parameters; - - for (unsigned j = 0; j < num_operands; j++) - parameters.push_tail(new(mem_ctx) ir_dereference_variable(src[j][i])); - - ir_dereference_variable *const return_deref = - new(mem_ctx) ir_dereference_variable(dst[i]); - - ir_call *const c = new(mem_ctx) ir_call(callee, - return_deref, - ¶meters); - - body.emit(c); - } - - ir_rvalue *const rv = compact_destination(body, ir->type, dst); - - /* Move all of the nodes from instructions between base_ir and the - * instruction before it. - */ - exec_node *const after = base_ir; - exec_node *const before = after->prev; - exec_node *const head = instructions.head_sentinel.next; - exec_node *const tail = instructions.tail_sentinel.prev; - - before->next = head; - head->prev = before; - - after->prev = tail; - tail->next = after; - - return rv; -} - -ir_rvalue * -lower_64bit_visitor::handle_op(ir_expression *ir, - const char *function_name, - function_generator generator) -{ - for (unsigned i = 0; i < ir->num_operands; i++) - if (!ir->operands[i]->type->is_integer_64()) - return ir; - - /* Get a handle to the correct ir_function_signature for the core - * operation. - */ - ir_function_signature *callee = NULL; - ir_function *f = find_function(function_name); - - if (f != NULL) { - callee = (ir_function_signature *) f->signatures.get_head(); - assert(callee != NULL && callee->ir_type == ir_type_function_signature); - } else { - f = new(base_ir) ir_function(function_name); - callee = generator(base_ir, NULL); - - f->add_signature(callee); - - add_function(f); - } - - this->progress = true; - return lower_op_to_function_call(this->base_ir, ir, callee); -} - -void -lower_64bit_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - if (*rvalue == NULL || (*rvalue)->ir_type != ir_type_expression) - return; - - ir_expression *const ir = (*rvalue)->as_expression(); - assert(ir != NULL); - - switch (ir->operation) { - case ir_binop_div: - if (lowering(DIV64)) { - if (ir->type->base_type == GLSL_TYPE_UINT64) { - *rvalue = handle_op(ir, "__builtin_udiv64", generate_ir::udiv64); - } else { - *rvalue = handle_op(ir, "__builtin_idiv64", generate_ir::idiv64); - } - } - break; - - case ir_binop_mod: - if (lowering(MOD64)) { - if (ir->type->base_type == GLSL_TYPE_UINT64) { - *rvalue = handle_op(ir, "__builtin_umod64", generate_ir::umod64); - } else { - *rvalue = handle_op(ir, "__builtin_imod64", generate_ir::imod64); - } - } - break; - - default: - break; - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_jumps.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_jumps.cpp deleted file mode 100644 index f5203f4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_jumps.cpp +++ /dev/null @@ -1,937 +0,0 @@ -/* - * Copyright © 2010 Luca Barbieri - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_jumps.cpp - * - * This pass lowers jumps (break, continue, and return) to if/else structures. - * - * It can be asked to: - * 1. Pull jumps out of ifs where possible - * 2. Remove all "continue"s, replacing them with an "execute flag" - * 3. Replace all "break" with a single conditional one at the end of the loop - * 4. Replace all "return"s with a single return at the end of the function, - * for the main function and/or other functions - * - * Applying this pass gives several benefits: - * 1. All functions can be inlined. - * 2. nv40 and other pre-DX10 chips without "continue" can be supported - * 3. nv30 and other pre-DX10 chips with no control flow at all are better - * supported - * - * Continues are lowered by adding a per-loop "execute flag", initialized to - * true, that when cleared inhibits all execution until the end of the loop. - * - * Breaks are lowered to continues, plus setting a "break flag" that is checked - * at the end of the loop, and trigger the unique "break". - * - * Returns are lowered to breaks/continues, plus adding a "return flag" that - * causes loops to break again out of their enclosing loops until all the - * loops are exited: then the "execute flag" logic will ignore everything - * until the end of the function. - * - * Note that "continue" and "return" can also be implemented by adding - * a dummy loop and using break. - * However, this is bad for hardware with limited nesting depth, and - * prevents further optimization, and thus is not currently performed. - */ - -#include "../glsl_types.h" -#include -#include "ir.h" - -/** - * Enum recording the result of analyzing how control flow might exit - * an IR node. - * - * Each possible value of jump_strength indicates a strictly stronger - * guarantee on control flow than the previous value. - * - * The ordering of strengths roughly reflects the way jumps are - * lowered: jumps with higher strength tend to be lowered to jumps of - * lower strength. Accordingly, strength is used as a heuristic to - * determine which lowering to perform first. - * - * This enum is also used by get_jump_strength() to categorize - * instructions as either break, continue, return, or other. When - * used in this fashion, strength_always_clears_execute_flag is not - * used. - * - * The control flow analysis made by this optimization pass makes two - * simplifying assumptions: - * - * - It ignores discard instructions, since they are lowered by a - * separate pass (lower_discard.cpp). - * - * - It assumes it is always possible for control to flow from a loop - * to the instruction immediately following it. Technically, this - * is not true (since all execution paths through the loop might - * jump back to the top, or return from the function). - * - * Both of these simplifying assumtions are safe, since they can never - * cause reachable code to be incorrectly classified as unreachable; - * they can only do the opposite. - */ -enum jump_strength -{ - /** - * Analysis has produced no guarantee on how control flow might - * exit this IR node. It might fall out the bottom (with or - * without clearing the execute flag, if present), or it might - * continue to the top of the innermost enclosing loop, break out - * of it, or return from the function. - */ - strength_none, - - /** - * The only way control can fall out the bottom of this node is - * through a code path that clears the execute flag. It might also - * continue to the top of the innermost enclosing loop, break out - * of it, or return from the function. - */ - strength_always_clears_execute_flag, - - /** - * Control cannot fall out the bottom of this node. It might - * continue to the top of the innermost enclosing loop, break out - * of it, or return from the function. - */ - strength_continue, - - /** - * Control cannot fall out the bottom of this node, or continue the - * top of the innermost enclosing loop. It can only break out of - * it or return from the function. - */ - strength_break, - - /** - * Control cannot fall out the bottom of this node, continue to the - * top of the innermost enclosing loop, or break out of it. It can - * only return from the function. - */ - strength_return -}; - -namespace { - -struct block_record -{ - /* minimum jump strength (of lowered IR, not pre-lowering IR) - * - * If the block ends with a jump, must be the strength of the jump. - * Otherwise, the jump would be dead and have been deleted before) - * - * If the block doesn't end with a jump, it can be different than strength_none if all paths before it lead to some jump - * (e.g. an if with a return in one branch, and a break in the other, while not lowering them) - * Note that identical jumps are usually unified though. - */ - jump_strength min_strength; - - /* can anything clear the execute flag? */ - bool may_clear_execute_flag; - - block_record() - { - this->min_strength = strength_none; - this->may_clear_execute_flag = false; - } -}; - -struct loop_record -{ - ir_function_signature* signature; - ir_loop* loop; - - /* used to avoid lowering the break used to represent lowered breaks */ - unsigned nesting_depth; - bool in_if_at_the_end_of_the_loop; - - bool may_set_return_flag; - - ir_variable* execute_flag; /* cleared to emulate continue */ - - loop_record(ir_function_signature* p_signature = 0, ir_loop* p_loop = 0) - { - this->signature = p_signature; - this->loop = p_loop; - this->nesting_depth = 0; - this->in_if_at_the_end_of_the_loop = false; - this->may_set_return_flag = false; - this->execute_flag = 0; - } - - ir_variable* get_execute_flag() - { - /* also supported for the "function loop" */ - if(!this->execute_flag) { - exec_list& list = this->loop ? this->loop->body_instructions : signature->body; - this->execute_flag = new(this->signature) ir_variable(glsl_type::bool_type, "execute_flag", ir_var_temporary); - list.push_head(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(execute_flag), new(this->signature) ir_constant(true))); - list.push_head(this->execute_flag); - } - return this->execute_flag; - } -}; - -struct function_record -{ - ir_function_signature* signature; - ir_variable* return_flag; /* used to break out of all loops and then jump to the return instruction */ - ir_variable* return_value; - bool lower_return; - unsigned nesting_depth; - - function_record(ir_function_signature* p_signature = 0, - bool lower_return = false) - { - this->signature = p_signature; - this->return_flag = 0; - this->return_value = 0; - this->nesting_depth = 0; - this->lower_return = lower_return; - } - - ir_variable* get_return_flag() - { - if(!this->return_flag) { - this->return_flag = new(this->signature) ir_variable(glsl_type::bool_type, "return_flag", ir_var_temporary); - this->signature->body.push_head(new(this->signature) ir_assignment(new(this->signature) ir_dereference_variable(return_flag), new(this->signature) ir_constant(false))); - this->signature->body.push_head(this->return_flag); - } - return this->return_flag; - } - - ir_variable* get_return_value() - { - if(!this->return_value) { - assert(!this->signature->return_type->is_void()); - return_value = new(this->signature) ir_variable(this->signature->return_type, "return_value", ir_var_temporary); - this->signature->body.push_head(this->return_value); - } - return this->return_value; - } -}; - -struct ir_lower_jumps_visitor : public ir_control_flow_visitor { - /* Postconditions: on exit of any visit() function: - * - * ANALYSIS: this->block.min_strength, - * this->block.may_clear_execute_flag, and - * this->loop.may_set_return_flag are updated to reflect the - * characteristics of the visited statement. - * - * DEAD_CODE_ELIMINATION: If this->block.min_strength is not - * strength_none, the visited node is at the end of its exec_list. - * In other words, any unreachable statements that follow the - * visited statement in its exec_list have been removed. - * - * CONTAINED_JUMPS_LOWERED: If the visited statement contains other - * statements, then should_lower_jump() is false for all of the - * return, break, or continue statements it contains. - * - * Note that visiting a jump does not lower it. That is the - * responsibility of the statement (or function signature) that - * contains the jump. - */ - - using ir_control_flow_visitor::visit; - - bool progress; - - struct function_record function; - struct loop_record loop; - struct block_record block; - - bool pull_out_jumps; - bool lower_continue; - bool lower_sub_return; - bool lower_main_return; - - ir_lower_jumps_visitor() - : progress(false), - pull_out_jumps(false), - lower_continue(false), - lower_sub_return(false), - lower_main_return(false) - { - } - - void truncate_after_instruction(exec_node *ir) - { - if (!ir) - return; - - while (!ir->get_next()->is_tail_sentinel()) { - ((ir_instruction *)ir->get_next())->remove(); - this->progress = true; - } - } - - void move_outer_block_inside(ir_instruction *ir, exec_list *inner_block) - { - while (!ir->get_next()->is_tail_sentinel()) { - ir_instruction *move_ir = (ir_instruction *)ir->get_next(); - - move_ir->remove(); - inner_block->push_tail(move_ir); - } - } - - /** - * Insert the instructions necessary to lower a return statement, - * before the given return instruction. - */ - void insert_lowered_return(ir_return *ir) - { - ir_variable* return_flag = this->function.get_return_flag(); - if(!this->function.signature->return_type->is_void()) { - ir_variable* return_value = this->function.get_return_value(); - ir->insert_before( - new(ir) ir_assignment( - new (ir) ir_dereference_variable(return_value), - ir->value)); - } - ir->insert_before( - new(ir) ir_assignment( - new (ir) ir_dereference_variable(return_flag), - new (ir) ir_constant(true))); - this->loop.may_set_return_flag = true; - } - - /** - * If the given instruction is a return, lower it to instructions - * that store the return value (if there is one), set the return - * flag, and then break. - * - * It is safe to pass NULL to this function. - */ - void lower_return_unconditionally(ir_instruction *ir) - { - if (get_jump_strength(ir) != strength_return) { - return; - } - insert_lowered_return((ir_return*)ir); - ir->replace_with(new(ir) ir_loop_jump(ir_loop_jump::jump_break)); - } - - virtual void visit(class ir_loop_jump * ir) - { - /* Eliminate all instructions after each one, since they are - * unreachable. This satisfies the DEAD_CODE_ELIMINATION - * postcondition. - */ - truncate_after_instruction(ir); - - /* Set this->block.min_strength based on this instruction. This - * satisfies the ANALYSIS postcondition. It is not necessary to - * update this->block.may_clear_execute_flag or - * this->loop.may_set_return_flag, because an unlowered jump - * instruction can't change any flags. - */ - this->block.min_strength = ir->is_break() ? strength_break : strength_continue; - - /* The CONTAINED_JUMPS_LOWERED postcondition is already - * satisfied, because jump statements can't contain other - * statements. - */ - } - - virtual void visit(class ir_return * ir) - { - /* Eliminate all instructions after each one, since they are - * unreachable. This satisfies the DEAD_CODE_ELIMINATION - * postcondition. - */ - truncate_after_instruction(ir); - - /* Set this->block.min_strength based on this instruction. This - * satisfies the ANALYSIS postcondition. It is not necessary to - * update this->block.may_clear_execute_flag or - * this->loop.may_set_return_flag, because an unlowered return - * instruction can't change any flags. - */ - this->block.min_strength = strength_return; - - /* The CONTAINED_JUMPS_LOWERED postcondition is already - * satisfied, because jump statements can't contain other - * statements. - */ - } - - virtual void visit(class ir_discard * ir) - { - /* Nothing needs to be done. The ANALYSIS and - * DEAD_CODE_ELIMINATION postconditions are already satisfied, - * because discard statements are ignored by this optimization - * pass. The CONTAINED_JUMPS_LOWERED postcondition is already - * satisfied, because discard statements can't contain other - * statements. - */ - (void) ir; - } - - enum jump_strength get_jump_strength(ir_instruction* ir) - { - if(!ir) - return strength_none; - else if(ir->ir_type == ir_type_loop_jump) { - if(((ir_loop_jump*)ir)->is_break()) - return strength_break; - else - return strength_continue; - } else if(ir->ir_type == ir_type_return) - return strength_return; - else - return strength_none; - } - - bool should_lower_jump(ir_jump* ir) - { - unsigned strength = get_jump_strength(ir); - bool lower; - switch(strength) - { - case strength_none: - lower = false; /* don't change this, code relies on it */ - break; - case strength_continue: - lower = lower_continue; - break; - case strength_break: - lower = false; - break; - case strength_return: - /* never lower return at the end of a this->function */ - if(this->function.nesting_depth == 0 && ir->get_next()->is_tail_sentinel()) - lower = false; - else - lower = this->function.lower_return; - break; - } - return lower; - } - - block_record visit_block(exec_list* list) - { - /* Note: since visiting a node may change that node's next - * pointer, we can't use visit_exec_list(), because - * visit_exec_list() caches the node's next pointer before - * visiting it. So we use foreach_in_list() instead. - * - * foreach_in_list() isn't safe if the node being visited gets - * removed, but fortunately this visitor doesn't do that. - */ - - block_record saved_block = this->block; - this->block = block_record(); - foreach_in_list(ir_instruction, node, list) { - node->accept(this); - } - block_record ret = this->block; - this->block = saved_block; - return ret; - } - - virtual void visit(ir_if *ir) - { - if(this->loop.nesting_depth == 0 && ir->get_next()->is_tail_sentinel()) - this->loop.in_if_at_the_end_of_the_loop = true; - - ++this->function.nesting_depth; - ++this->loop.nesting_depth; - - block_record block_records[2]; - ir_jump* jumps[2]; - - /* Recursively lower nested jumps. This satisfies the - * CONTAINED_JUMPS_LOWERED postcondition, except in the case of - * unconditional jumps at the end of ir->then_instructions and - * ir->else_instructions, which are handled below. - */ - block_records[0] = visit_block(&ir->then_instructions); - block_records[1] = visit_block(&ir->else_instructions); - -retry: /* we get here if we put code after the if inside a branch */ - - /* Determine which of ir->then_instructions and - * ir->else_instructions end with an unconditional jump. - */ - for(unsigned i = 0; i < 2; ++i) { - exec_list& list = i ? ir->else_instructions : ir->then_instructions; - jumps[i] = 0; - if(!list.is_empty() && get_jump_strength((ir_instruction*)list.get_tail())) - jumps[i] = (ir_jump*)list.get_tail(); - } - - /* Loop until we have satisfied the CONTAINED_JUMPS_LOWERED - * postcondition by lowering jumps in both then_instructions and - * else_instructions. - */ - for(;;) { - /* Determine the types of the jumps that terminate - * ir->then_instructions and ir->else_instructions. - */ - jump_strength jump_strengths[2]; - - for(unsigned i = 0; i < 2; ++i) { - if(jumps[i]) { - jump_strengths[i] = block_records[i].min_strength; - assert(jump_strengths[i] == get_jump_strength(jumps[i])); - } else - jump_strengths[i] = strength_none; - } - - /* If both code paths end in a jump, and the jumps are the - * same, and we are pulling out jumps, replace them with a - * single jump that comes after the if instruction. The new - * jump will be visited next, and it will be lowered if - * necessary by the loop or conditional that encloses it. - */ - if(pull_out_jumps && jump_strengths[0] == jump_strengths[1]) { - bool unify = true; - if(jump_strengths[0] == strength_continue) - ir->insert_after(new(ir) ir_loop_jump(ir_loop_jump::jump_continue)); - else if(jump_strengths[0] == strength_break) - ir->insert_after(new(ir) ir_loop_jump(ir_loop_jump::jump_break)); - /* FINISHME: unify returns with identical expressions */ - else if(jump_strengths[0] == strength_return && this->function.signature->return_type->is_void()) - ir->insert_after(new(ir) ir_return(NULL)); - else - unify = false; - - if(unify) { - jumps[0]->remove(); - jumps[1]->remove(); - this->progress = true; - - /* Update jumps[] to reflect the fact that the jumps - * are gone, and update block_records[] to reflect the - * fact that control can now flow to the next - * instruction. - */ - jumps[0] = 0; - jumps[1] = 0; - block_records[0].min_strength = strength_none; - block_records[1].min_strength = strength_none; - - /* The CONTAINED_JUMPS_LOWERED postcondition is now - * satisfied, so we can break out of the loop. - */ - break; - } - } - - /* lower a jump: if both need to lowered, start with the strongest one, so that - * we might later unify the lowered version with the other one - */ - bool should_lower[2]; - for(unsigned i = 0; i < 2; ++i) - should_lower[i] = should_lower_jump(jumps[i]); - - int lower; - if(should_lower[1] && should_lower[0]) - lower = jump_strengths[1] > jump_strengths[0]; - else if(should_lower[0]) - lower = 0; - else if(should_lower[1]) - lower = 1; - else - /* Neither code path ends in a jump that needs to be - * lowered, so the CONTAINED_JUMPS_LOWERED postcondition - * is satisfied and we can break out of the loop. - */ - break; - - if(jump_strengths[lower] == strength_return) { - /* To lower a return, we create a return flag (if the - * function doesn't have one already) and add instructions - * that: 1. store the return value (if this function has a - * non-void return) and 2. set the return flag - */ - insert_lowered_return((ir_return*)jumps[lower]); - if(this->loop.loop) { - /* If we are in a loop, replace the return instruction - * with a break instruction, and then loop so that the - * break instruction can be lowered if necessary. - */ - ir_loop_jump* lowered = 0; - lowered = new(ir) ir_loop_jump(ir_loop_jump::jump_break); - /* Note: we must update block_records and jumps to - * reflect the fact that the control path has been - * altered from a return to a break. - */ - block_records[lower].min_strength = strength_break; - jumps[lower]->replace_with(lowered); - jumps[lower] = lowered; - } else { - /* If we are not in a loop, we then proceed as we would - * for a continue statement (set the execute flag to - * false to prevent the rest of the function from - * executing). - */ - goto lower_continue; - } - this->progress = true; - } else if(jump_strengths[lower] == strength_break) { - unreachable("no lowering of breaks any more"); - } else if(jump_strengths[lower] == strength_continue) { -lower_continue: - /* To lower a continue, we create an execute flag (if the - * loop doesn't have one already) and replace the continue - * with an instruction that clears it. - * - * Note that this code path gets exercised when lowering - * return statements that are not inside a loop, so - * this->loop must be initialized even outside of loops. - */ - ir_variable* execute_flag = this->loop.get_execute_flag(); - jumps[lower]->replace_with(new(ir) ir_assignment(new (ir) ir_dereference_variable(execute_flag), new (ir) ir_constant(false))); - /* Note: we must update block_records and jumps to reflect - * the fact that the control path has been altered to an - * instruction that clears the execute flag. - */ - jumps[lower] = 0; - block_records[lower].min_strength = strength_always_clears_execute_flag; - block_records[lower].may_clear_execute_flag = true; - this->progress = true; - - /* Let the loop run again, in case the other branch of the - * if needs to be lowered too. - */ - } - } - - /* move out a jump out if possible */ - if(pull_out_jumps) { - /* If one of the branches ends in a jump, and control cannot - * fall out the bottom of the other branch, then we can move - * the jump after the if. - * - * Set move_out to the branch we are moving a jump out of. - */ - int move_out = -1; - if(jumps[0] && block_records[1].min_strength >= strength_continue) - move_out = 0; - else if(jumps[1] && block_records[0].min_strength >= strength_continue) - move_out = 1; - - if(move_out >= 0) - { - jumps[move_out]->remove(); - ir->insert_after(jumps[move_out]); - /* Note: we must update block_records and jumps to reflect - * the fact that the jump has been moved out of the if. - */ - jumps[move_out] = 0; - block_records[move_out].min_strength = strength_none; - this->progress = true; - } - } - - /* Now satisfy the ANALYSIS postcondition by setting - * this->block.min_strength and - * this->block.may_clear_execute_flag based on the - * characteristics of the two branches. - */ - if(block_records[0].min_strength < block_records[1].min_strength) - this->block.min_strength = block_records[0].min_strength; - else - this->block.min_strength = block_records[1].min_strength; - this->block.may_clear_execute_flag = this->block.may_clear_execute_flag || block_records[0].may_clear_execute_flag || block_records[1].may_clear_execute_flag; - - /* Now we need to clean up the instructions that follow the - * if. - * - * If those instructions are unreachable, then satisfy the - * DEAD_CODE_ELIMINATION postcondition by eliminating them. - * Otherwise that postcondition is already satisfied. - */ - if(this->block.min_strength) - truncate_after_instruction(ir); - else if(this->block.may_clear_execute_flag) - { - /* If the "if" instruction might clear the execute flag, then - * we need to guard any instructions that follow so that they - * are only executed if the execute flag is set. - * - * If one of the branches of the "if" always clears the - * execute flag, and the other branch never clears it, then - * this is easy: just move all the instructions following the - * "if" into the branch that never clears it. - */ - int move_into = -1; - if(block_records[0].min_strength && !block_records[1].may_clear_execute_flag) - move_into = 1; - else if(block_records[1].min_strength && !block_records[0].may_clear_execute_flag) - move_into = 0; - - if(move_into >= 0) { - assert(!block_records[move_into].min_strength && !block_records[move_into].may_clear_execute_flag); /* otherwise, we just truncated */ - - exec_list* list = move_into ? &ir->else_instructions : &ir->then_instructions; - exec_node* next = ir->get_next(); - if(!next->is_tail_sentinel()) { - move_outer_block_inside(ir, list); - - /* If any instructions moved, then we need to visit - * them (since they are now inside the "if"). Since - * block_records[move_into] is in its default state - * (see assertion above), we can safely replace - * block_records[move_into] with the result of this - * analysis. - */ - exec_list list; - list.head_sentinel.next = next; - block_records[move_into] = visit_block(&list); - - /* - * Then we need to re-start our jump lowering, since one - * of the instructions we moved might be a jump that - * needs to be lowered. - */ - this->progress = true; - goto retry; - } - } else { - /* If we get here, then the simple case didn't apply; we - * need to actually guard the instructions that follow. - * - * To avoid creating unnecessarily-deep nesting, first - * look through the instructions that follow and unwrap - * any instructions that that are already wrapped in the - * appropriate guard. - */ - ir_instruction* ir_after; - for(ir_after = (ir_instruction*)ir->get_next(); !ir_after->is_tail_sentinel();) - { - ir_if* ir_if = ir_after->as_if(); - if(ir_if && ir_if->else_instructions.is_empty()) { - ir_dereference_variable* ir_if_cond_deref = ir_if->condition->as_dereference_variable(); - if(ir_if_cond_deref && ir_if_cond_deref->var == this->loop.execute_flag) { - ir_instruction* ir_next = (ir_instruction*)ir_after->get_next(); - ir_after->insert_before(&ir_if->then_instructions); - ir_after->remove(); - ir_after = ir_next; - continue; - } - } - ir_after = (ir_instruction*)ir_after->get_next(); - - /* only set this if we find any unprotected instruction */ - this->progress = true; - } - - /* Then, wrap all the instructions that follow in a single - * guard. - */ - if(!ir->get_next()->is_tail_sentinel()) { - assert(this->loop.execute_flag); - ir_if* if_execute = new(ir) ir_if(new(ir) ir_dereference_variable(this->loop.execute_flag)); - move_outer_block_inside(ir, &if_execute->then_instructions); - ir->insert_after(if_execute); - } - } - } - --this->loop.nesting_depth; - --this->function.nesting_depth; - } - - virtual void visit(ir_loop *ir) - { - /* Visit the body of the loop, with a fresh data structure in - * this->loop so that the analysis we do here won't bleed into - * enclosing loops. - * - * We assume that all code after a loop is reachable from the - * loop (see comments on enum jump_strength), so the - * DEAD_CODE_ELIMINATION postcondition is automatically - * satisfied, as is the block.min_strength portion of the - * ANALYSIS postcondition. - * - * The block.may_clear_execute_flag portion of the ANALYSIS - * postcondition is automatically satisfied because execute - * flags do not propagate outside of loops. - * - * The loop.may_set_return_flag portion of the ANALYSIS - * postcondition is handled below. - */ - ++this->function.nesting_depth; - loop_record saved_loop = this->loop; - this->loop = loop_record(this->function.signature, ir); - - /* Recursively lower nested jumps. This satisfies the - * CONTAINED_JUMPS_LOWERED postcondition, except in the case of - * an unconditional continue or return at the bottom of the - * loop, which are handled below. - */ - block_record body = visit_block(&ir->body_instructions); - - /* If the loop ends in an unconditional continue, eliminate it - * because it is redundant. - */ - ir_instruction *ir_last - = (ir_instruction *) ir->body_instructions.get_tail(); - if (get_jump_strength(ir_last) == strength_continue) { - ir_last->remove(); - } - - /* If the loop ends in an unconditional return, and we are - * lowering returns, lower it. - */ - if (this->function.lower_return) - lower_return_unconditionally(ir_last); - - if(body.min_strength >= strength_break) { - /* FINISHME: If the min_strength of the loop body is - * strength_break or strength_return, that means that it - * isn't a loop at all, since control flow always leaves the - * body of the loop via break or return. In principle the - * loop could be eliminated in this case. This optimization - * is not implemented yet. - */ - } - - - /* If the body of the loop may set the return flag, then at - * least one return was lowered to a break, so we need to ensure - * that the return flag is checked after the body of the loop is - * executed. - */ - if(this->loop.may_set_return_flag) { - assert(this->function.return_flag); - /* Generate the if statement to check the return flag */ - ir_if* return_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->function.return_flag)); - /* Note: we also need to propagate the knowledge that the - * return flag may get set to the outer context. This - * satisfies the loop.may_set_return_flag part of the - * ANALYSIS postcondition. - */ - saved_loop.may_set_return_flag = true; - if(saved_loop.loop) - /* If this loop is nested inside another one, then the if - * statement that we generated should break out of that - * loop if the return flag is set. Caller will lower that - * break statement if necessary. - */ - return_if->then_instructions.push_tail(new(ir) ir_loop_jump(ir_loop_jump::jump_break)); - else { - /* Otherwise, ensure that the instructions that follow are only - * executed if the return flag is clear. We can do that by moving - * those instructions into the else clause of the generated if - * statement. - */ - move_outer_block_inside(ir, &return_if->else_instructions); - - /* In case the loop is embedded inside an if add a new return to - * the return flag then branch and let a future pass tidy it up. - */ - if (this->function.signature->return_type->is_void()) - return_if->then_instructions.push_tail(new(ir) ir_return(NULL)); - else { - assert(this->function.return_value); - ir_variable* return_value = this->function.return_value; - return_if->then_instructions.push_tail( - new(ir) ir_return(new(ir) ir_dereference_variable(return_value))); - } - } - - ir->insert_after(return_if); - } - - this->loop = saved_loop; - --this->function.nesting_depth; - } - - virtual void visit(ir_function_signature *ir) - { - /* these are not strictly necessary */ - assert(!this->function.signature); - assert(!this->loop.loop); - - bool lower_return; - if (strcmp(ir->function_name(), "main") == 0) - lower_return = lower_main_return; - else - lower_return = lower_sub_return; - - function_record saved_function = this->function; - loop_record saved_loop = this->loop; - this->function = function_record(ir, lower_return); - this->loop = loop_record(ir); - - assert(!this->loop.loop); - - /* Visit the body of the function to lower any jumps that occur - * in it, except possibly an unconditional return statement at - * the end of it. - */ - visit_block(&ir->body); - - /* If the body ended in an unconditional return of non-void, - * then we don't need to lower it because it's the one canonical - * return. - * - * If the body ended in a return of void, eliminate it because - * it is redundant. - */ - if (ir->return_type->is_void() && - get_jump_strength((ir_instruction *) ir->body.get_tail())) { - ir_jump *jump = (ir_jump *) ir->body.get_tail(); - assert (jump->ir_type == ir_type_return); - jump->remove(); - } - - if(this->function.return_value) - ir->body.push_tail(new(ir) ir_return(new (ir) ir_dereference_variable(this->function.return_value))); - - this->loop = saved_loop; - this->function = saved_function; - } - - virtual void visit(class ir_function * ir) - { - visit_block(&ir->signatures); - } -}; - -} /* anonymous namespace */ - -bool -do_lower_jumps(exec_list *instructions, bool pull_out_jumps, bool lower_sub_return, bool lower_main_return, bool lower_continue) -{ - ir_lower_jumps_visitor v; - v.pull_out_jumps = pull_out_jumps; - v.lower_continue = lower_continue; - v.lower_sub_return = lower_sub_return; - v.lower_main_return = lower_main_return; - - bool progress_ever = false; - do { - v.progress = false; - visit_exec_list(instructions, &v); - progress_ever = v.progress || progress_ever; - } while (v.progress); - - return progress_ever; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp deleted file mode 100644 index 4745c5f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp +++ /dev/null @@ -1,441 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_mat_op_to_vec.cpp - * - * Breaks matrix operation expressions down to a series of vector operations. - * - * Generally this is how we have to codegen matrix operations for a - * GPU, so this gives us the chance to constant fold operations on a - * column or row. - */ - -#include "ir.h" -#include "ir_expression_flattening.h" -#include "../glsl_types.h" - -namespace { - -class ir_mat_op_to_vec_visitor : public ir_hierarchical_visitor { -public: - ir_mat_op_to_vec_visitor() - { - this->made_progress = false; - this->mem_ctx = NULL; - } - - ir_visitor_status visit_leave(ir_assignment *); - - ir_dereference *get_column(ir_dereference *val, int col); - ir_rvalue *get_element(ir_dereference *val, int col, int row); - - void do_mul_mat_mat(ir_dereference *result, - ir_dereference *a, ir_dereference *b); - void do_mul_mat_vec(ir_dereference *result, - ir_dereference *a, ir_dereference *b); - void do_mul_vec_mat(ir_dereference *result, - ir_dereference *a, ir_dereference *b); - void do_mul_mat_scalar(ir_dereference *result, - ir_dereference *a, ir_dereference *b); - void do_equal_mat_mat(ir_dereference *result, ir_dereference *a, - ir_dereference *b, bool test_equal); - - void *mem_ctx; - bool made_progress; -}; - -} /* anonymous namespace */ - -static bool -mat_op_to_vec_predicate(ir_instruction *ir) -{ - ir_expression *expr = ir->as_expression(); - unsigned int i; - - if (!expr) - return false; - - for (i = 0; i < expr->num_operands; i++) { - if (expr->operands[i]->type->is_matrix()) - return true; - } - - return false; -} - -bool -do_mat_op_to_vec(exec_list *instructions) -{ - ir_mat_op_to_vec_visitor v; - - /* Pull out any matrix expression to a separate assignment to a - * temp. This will make our handling of the breakdown to - * operations on the matrix's vector components much easier. - */ - do_expression_flattening(instructions, mat_op_to_vec_predicate); - - visit_list_elements(&v, instructions); - - return v.made_progress; -} - -ir_rvalue * -ir_mat_op_to_vec_visitor::get_element(ir_dereference *val, int col, int row) -{ - val = get_column(val, col); - - return new(mem_ctx) ir_swizzle(val, row, 0, 0, 0, 1); -} - -ir_dereference * -ir_mat_op_to_vec_visitor::get_column(ir_dereference *val, int row) -{ - val = val->clone(mem_ctx, NULL); - - if (val->type->is_matrix()) { - val = new(mem_ctx) ir_dereference_array(val, - new(mem_ctx) ir_constant(row)); - } - - return val; -} - -void -ir_mat_op_to_vec_visitor::do_mul_mat_mat(ir_dereference *result, - ir_dereference *a, - ir_dereference *b) -{ - unsigned b_col, i; - ir_assignment *assign; - ir_expression *expr; - - for (b_col = 0; b_col < b->type->matrix_columns; b_col++) { - /* first column */ - expr = new(mem_ctx) ir_expression(ir_binop_mul, - get_column(a, 0), - get_element(b, b_col, 0)); - - /* following columns */ - for (i = 1; i < a->type->matrix_columns; i++) { - ir_expression *mul_expr; - - mul_expr = new(mem_ctx) ir_expression(ir_binop_mul, - get_column(a, i), - get_element(b, b_col, i)); - expr = new(mem_ctx) ir_expression(ir_binop_add, - expr, - mul_expr); - } - - assign = new(mem_ctx) ir_assignment(get_column(result, b_col), expr); - base_ir->insert_before(assign); - } -} - -void -ir_mat_op_to_vec_visitor::do_mul_mat_vec(ir_dereference *result, - ir_dereference *a, - ir_dereference *b) -{ - unsigned i; - ir_assignment *assign; - ir_expression *expr; - - /* first column */ - expr = new(mem_ctx) ir_expression(ir_binop_mul, - get_column(a, 0), - get_element(b, 0, 0)); - - /* following columns */ - for (i = 1; i < a->type->matrix_columns; i++) { - ir_expression *mul_expr; - - mul_expr = new(mem_ctx) ir_expression(ir_binop_mul, - get_column(a, i), - get_element(b, 0, i)); - expr = new(mem_ctx) ir_expression(ir_binop_add, expr, mul_expr); - } - - result = result->clone(mem_ctx, NULL); - assign = new(mem_ctx) ir_assignment(result, expr); - base_ir->insert_before(assign); -} - -void -ir_mat_op_to_vec_visitor::do_mul_vec_mat(ir_dereference *result, - ir_dereference *a, - ir_dereference *b) -{ - unsigned i; - - for (i = 0; i < b->type->matrix_columns; i++) { - ir_rvalue *column_result; - ir_expression *column_expr; - ir_assignment *column_assign; - - column_result = result->clone(mem_ctx, NULL); - column_result = new(mem_ctx) ir_swizzle(column_result, i, 0, 0, 0, 1); - - column_expr = new(mem_ctx) ir_expression(ir_binop_dot, - a->clone(mem_ctx, NULL), - get_column(b, i)); - - column_assign = new(mem_ctx) ir_assignment(column_result, - column_expr); - base_ir->insert_before(column_assign); - } -} - -void -ir_mat_op_to_vec_visitor::do_mul_mat_scalar(ir_dereference *result, - ir_dereference *a, - ir_dereference *b) -{ - unsigned i; - - for (i = 0; i < a->type->matrix_columns; i++) { - ir_expression *column_expr; - ir_assignment *column_assign; - - column_expr = new(mem_ctx) ir_expression(ir_binop_mul, - get_column(a, i), - b->clone(mem_ctx, NULL)); - - column_assign = new(mem_ctx) ir_assignment(get_column(result, i), - column_expr); - base_ir->insert_before(column_assign); - } -} - -void -ir_mat_op_to_vec_visitor::do_equal_mat_mat(ir_dereference *result, - ir_dereference *a, - ir_dereference *b, - bool test_equal) -{ - /* This essentially implements the following GLSL: - * - * bool equal(mat4 a, mat4 b) - * { - * return !any(bvec4(a[0] != b[0], - * a[1] != b[1], - * a[2] != b[2], - * a[3] != b[3]); - * } - * - * bool nequal(mat4 a, mat4 b) - * { - * return any(bvec4(a[0] != b[0], - * a[1] != b[1], - * a[2] != b[2], - * a[3] != b[3]); - * } - */ - const unsigned columns = a->type->matrix_columns; - const glsl_type *const bvec_type = - glsl_type::get_instance(GLSL_TYPE_BOOL, columns, 1); - - ir_variable *const tmp_bvec = - new(this->mem_ctx) ir_variable(bvec_type, "mat_cmp_bvec", - ir_var_temporary); - this->base_ir->insert_before(tmp_bvec); - - for (unsigned i = 0; i < columns; i++) { - ir_expression *const cmp = - new(this->mem_ctx) ir_expression(ir_binop_any_nequal, - get_column(a, i), - get_column(b, i)); - - ir_dereference *const lhs = - new(this->mem_ctx) ir_dereference_variable(tmp_bvec); - - ir_assignment *const assign = - new(this->mem_ctx) ir_assignment(lhs, cmp, 1U << i); - - this->base_ir->insert_before(assign); - } - - ir_rvalue *const val = new(this->mem_ctx) ir_dereference_variable(tmp_bvec); - uint8_t vec_elems = val->type->vector_elements; - ir_expression *any = - new(this->mem_ctx) ir_expression(ir_binop_any_nequal, val, - new(this->mem_ctx) ir_constant(false, - vec_elems)); - - if (test_equal) - any = new(this->mem_ctx) ir_expression(ir_unop_logic_not, any); - - ir_assignment *const assign = - new(mem_ctx) ir_assignment(result->clone(mem_ctx, NULL), any); - base_ir->insert_before(assign); -} - -static bool -has_matrix_operand(const ir_expression *expr, unsigned &columns) -{ - for (unsigned i = 0; i < expr->num_operands; i++) { - if (expr->operands[i]->type->is_matrix()) { - columns = expr->operands[i]->type->matrix_columns; - return true; - } - } - - return false; -} - - -ir_visitor_status -ir_mat_op_to_vec_visitor::visit_leave(ir_assignment *orig_assign) -{ - ir_expression *orig_expr = orig_assign->rhs->as_expression(); - unsigned int i, matrix_columns = 1; - ir_dereference *op[2]; - - if (!orig_expr) - return visit_continue; - - if (!has_matrix_operand(orig_expr, matrix_columns)) - return visit_continue; - - assert(orig_expr->num_operands <= 2); - - mem_ctx = ralloc_parent(orig_assign); - - ir_dereference_variable *result = - orig_assign->lhs->as_dereference_variable(); - assert(result); - - /* Store the expression operands in temps so we can use them - * multiple times. - */ - for (i = 0; i < orig_expr->num_operands; i++) { - ir_assignment *assign; - ir_dereference *deref = orig_expr->operands[i]->as_dereference(); - - /* Avoid making a temporary if we don't need to to avoid aliasing. */ - if (deref && - deref->variable_referenced() != result->variable_referenced()) { - op[i] = deref; - continue; - } - - /* Otherwise, store the operand in a temporary generally if it's - * not a dereference. - */ - ir_variable *var = new(mem_ctx) ir_variable(orig_expr->operands[i]->type, - "mat_op_to_vec", - ir_var_temporary); - base_ir->insert_before(var); - - /* Note that we use this dereference for the assignment. That means - * that others that want to use op[i] have to clone the deref. - */ - op[i] = new(mem_ctx) ir_dereference_variable(var); - assign = new(mem_ctx) ir_assignment(op[i], orig_expr->operands[i]); - base_ir->insert_before(assign); - } - - /* OK, time to break down this matrix operation. */ - switch (orig_expr->operation) { - case ir_unop_d2f: - case ir_unop_f2d: - case ir_unop_f2f16: - case ir_unop_f2fmp: - case ir_unop_f162f: - case ir_unop_neg: { - /* Apply the operation to each column.*/ - for (i = 0; i < matrix_columns; i++) { - ir_expression *column_expr; - ir_assignment *column_assign; - - column_expr = new(mem_ctx) ir_expression(orig_expr->operation, - get_column(op[0], i)); - - column_assign = new(mem_ctx) ir_assignment(get_column(result, i), - column_expr); - assert(column_assign->write_mask != 0); - base_ir->insert_before(column_assign); - } - break; - } - case ir_binop_add: - case ir_binop_sub: - case ir_binop_div: - case ir_binop_mod: { - /* For most operations, the matrix version is just going - * column-wise through and applying the operation to each column - * if available. - */ - for (i = 0; i < matrix_columns; i++) { - ir_expression *column_expr; - ir_assignment *column_assign; - - column_expr = new(mem_ctx) ir_expression(orig_expr->operation, - get_column(op[0], i), - get_column(op[1], i)); - - column_assign = new(mem_ctx) ir_assignment(get_column(result, i), - column_expr); - assert(column_assign->write_mask != 0); - base_ir->insert_before(column_assign); - } - break; - } - case ir_binop_mul: - if (op[0]->type->is_matrix()) { - if (op[1]->type->is_matrix()) { - do_mul_mat_mat(result, op[0], op[1]); - } else if (op[1]->type->is_vector()) { - do_mul_mat_vec(result, op[0], op[1]); - } else { - assert(op[1]->type->is_scalar()); - do_mul_mat_scalar(result, op[0], op[1]); - } - } else { - assert(op[1]->type->is_matrix()); - if (op[0]->type->is_vector()) { - do_mul_vec_mat(result, op[0], op[1]); - } else { - assert(op[0]->type->is_scalar()); - do_mul_mat_scalar(result, op[1], op[0]); - } - } - break; - - case ir_binop_all_equal: - case ir_binop_any_nequal: - do_equal_mat_mat(result, op[1], op[0], - (orig_expr->operation == ir_binop_all_equal)); - break; - - default: - printf("FINISHME: Handle matrix operation for %s\n", - ir_expression_operation_strings[orig_expr->operation]); - abort(); - } - orig_assign->remove(); - this->made_progress = true; - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp deleted file mode 100644 index ca0def3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright (c) 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_named_interface_blocks.cpp - * - * This lowering pass converts all interface blocks with instance names - * into interface blocks without an instance name. - * - * For example, the following shader: - * - * out block { - * float block_var; - * } inst_name; - * - * main() - * { - * inst_name.block_var = 0.0; - * } - * - * Is rewritten to: - * - * out block { - * float block_var; - * }; - * - * main() - * { - * block_var = 0.0; - * } - * - * This takes place after the shader code has already been verified with - * the interface name in place. - * - * The linking phase will use the interface block name rather than the - * interface's instance name when linking interfaces. - * - * This modification to the ir allows our currently existing dead code - * elimination to work with interface blocks without changes. - */ - -#include "glsl_symbol_table.h" -#include "ir.h" -#include "ir_optimization.h" -#include "ir_rvalue_visitor.h" -#include "../../util/hash_table.h" -#include "../../mesa/main/shader_types.h" - -static const glsl_type * -process_array_type(const glsl_type *type, unsigned idx) -{ - const glsl_type *element_type = type->fields.array; - if (element_type->is_array()) { - const glsl_type *new_array_type = process_array_type(element_type, idx); - return glsl_type::get_array_instance(new_array_type, type->length); - } else { - return glsl_type::get_array_instance( - element_type->fields.structure[idx].type, type->length); - } -} - -static ir_rvalue * -process_array_ir(void * const mem_ctx, - ir_dereference_array *deref_array_prev, - ir_rvalue *deref_var) -{ - ir_dereference_array *deref_array = - deref_array_prev->array->as_dereference_array(); - - if (deref_array == NULL) { - return new(mem_ctx) ir_dereference_array(deref_var, - deref_array_prev->array_index); - } else { - deref_array = (ir_dereference_array *) process_array_ir(mem_ctx, - deref_array, - deref_var); - return new(mem_ctx) ir_dereference_array(deref_array, - deref_array_prev->array_index); - } -} - -namespace { - -class flatten_named_interface_blocks_declarations : public ir_rvalue_visitor -{ -public: - void * const mem_ctx; - hash_table *interface_namespace; - - flatten_named_interface_blocks_declarations(void *mem_ctx) - : mem_ctx(mem_ctx), - interface_namespace(NULL) - { - } - - void run(exec_list *instructions); - - virtual ir_visitor_status visit_leave(ir_assignment *); - virtual ir_visitor_status visit_leave(ir_expression *); - virtual void handle_rvalue(ir_rvalue **rvalue); -}; - -} /* anonymous namespace */ - -void -flatten_named_interface_blocks_declarations::run(exec_list *instructions) -{ - interface_namespace = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - - /* First pass: adjust instance block variables with an instance name - * to not have an instance name. - * - * The interface block variables are stored in the interface_namespace - * hash table so they can be used in the second pass. - */ - foreach_in_list_safe(ir_instruction, node, instructions) { - ir_variable *var = node->as_variable(); - if (!var || !var->is_interface_instance()) - continue; - - /* It should be possible to handle uniforms during this pass, - * but, this will require changes to the other uniform block - * support code. - */ - if (var->data.mode == ir_var_uniform || - var->data.mode == ir_var_shader_storage) - continue; - - const glsl_type * iface_t = var->type->without_array(); - exec_node *insert_pos = var; - - assert (iface_t->is_interface()); - - for (unsigned i = 0; i < iface_t->length; i++) { - const char * field_name = iface_t->fields.structure[i].name; - char *iface_field_name = - ralloc_asprintf(mem_ctx, "%s %s.%s.%s", - var->data.mode == ir_var_shader_in ? "in" : "out", - iface_t->name, var->name, field_name); - - hash_entry *entry = _mesa_hash_table_search(interface_namespace, - iface_field_name); - ir_variable *found_var = entry ? (ir_variable *) entry->data : NULL; - if (!found_var) { - ir_variable *new_var; - char *var_name = - ralloc_strdup(mem_ctx, iface_t->fields.structure[i].name); - if (!var->type->is_array()) { - new_var = - new(mem_ctx) ir_variable(iface_t->fields.structure[i].type, - var_name, - (ir_variable_mode) var->data.mode); - } else { - const glsl_type *new_array_type = - process_array_type(var->type, i); - new_var = - new(mem_ctx) ir_variable(new_array_type, - var_name, - (ir_variable_mode) var->data.mode); - } - new_var->data.location = iface_t->fields.structure[i].location; - new_var->data.location_frac = - iface_t->fields.structure[i].component >= 0 ? - iface_t->fields.structure[i].component : 0; - new_var->data.explicit_location = (new_var->data.location >= 0); - new_var->data.explicit_component = - (iface_t->fields.structure[i].component >= 0); - new_var->data.offset = iface_t->fields.structure[i].offset; - new_var->data.explicit_xfb_offset = - (iface_t->fields.structure[i].offset >= 0); - new_var->data.xfb_buffer = - iface_t->fields.structure[i].xfb_buffer; - new_var->data.explicit_xfb_buffer = - iface_t->fields.structure[i].explicit_xfb_buffer; - new_var->data.interpolation = - iface_t->fields.structure[i].interpolation; - new_var->data.centroid = iface_t->fields.structure[i].centroid; - new_var->data.sample = iface_t->fields.structure[i].sample; - new_var->data.patch = iface_t->fields.structure[i].patch; - new_var->data.stream = var->data.stream; - new_var->data.how_declared = var->data.how_declared; - new_var->data.from_named_ifc_block = 1; - - new_var->init_interface_type(var->type); - _mesa_hash_table_insert(interface_namespace, iface_field_name, - new_var); - insert_pos->insert_after(new_var); - insert_pos = new_var; - } - } - var->remove(); - } - - /* Second pass: visit all ir_dereference_record instances, and if they - * reference an interface block, then flatten the refererence out. - */ - visit_list_elements(this, instructions); - _mesa_hash_table_destroy(interface_namespace, NULL); - interface_namespace = NULL; -} - -ir_visitor_status -flatten_named_interface_blocks_declarations::visit_leave(ir_assignment *ir) -{ - ir_dereference_record *lhs_rec = ir->lhs->as_dereference_record(); - - ir_variable *lhs_var = ir->lhs->variable_referenced(); - if (lhs_var && lhs_var->get_interface_type()) { - lhs_var->data.assigned = 1; - } - - if (lhs_rec) { - ir_rvalue *lhs_rec_tmp = lhs_rec; - handle_rvalue(&lhs_rec_tmp); - if (lhs_rec_tmp != lhs_rec) { - ir->set_lhs(lhs_rec_tmp); - } - - ir_variable *lhs_var = lhs_rec_tmp->variable_referenced(); - if (lhs_var) { - lhs_var->data.assigned = 1; - } - } - return rvalue_visit(ir); -} - -ir_visitor_status -flatten_named_interface_blocks_declarations::visit_leave(ir_expression *ir) -{ - ir_visitor_status status = rvalue_visit(ir); - - if (ir->operation == ir_unop_interpolate_at_centroid || - ir->operation == ir_binop_interpolate_at_offset || - ir->operation == ir_binop_interpolate_at_sample) { - const ir_rvalue *val = ir->operands[0]; - - /* This disables varying packing for this input. */ - val->variable_referenced()->data.must_be_shader_input = 1; - } - - return status; -} - -void -flatten_named_interface_blocks_declarations::handle_rvalue(ir_rvalue **rvalue) -{ - if (*rvalue == NULL) - return; - - ir_dereference_record *ir = (*rvalue)->as_dereference_record(); - if (ir == NULL) - return; - - ir_variable *var = ir->variable_referenced(); - if (var == NULL) - return; - - if (!var->is_interface_instance()) - return; - - /* It should be possible to handle uniforms during this pass, - * but, this will require changes to the other uniform block - * support code. - */ - if (var->data.mode == ir_var_uniform || var->data.mode == ir_var_shader_storage) - return; - - if (var->get_interface_type() != NULL) { - char *iface_field_name = - ralloc_asprintf(mem_ctx, "%s %s.%s.%s", - var->data.mode == ir_var_shader_in ? "in" : "out", - var->get_interface_type()->name, - var->name, - ir->record->type->fields.structure[ir->field_idx].name); - - /* Find the variable in the set of flattened interface blocks */ - hash_entry *entry = _mesa_hash_table_search(interface_namespace, - iface_field_name); - assert(entry); - ir_variable *found_var = (ir_variable *) entry->data; - - ir_dereference_variable *deref_var = - new(mem_ctx) ir_dereference_variable(found_var); - - ir_dereference_array *deref_array = - ir->record->as_dereference_array(); - if (deref_array != NULL) { - *rvalue = process_array_ir(mem_ctx, deref_array, - (ir_rvalue *)deref_var); - } else { - *rvalue = deref_var; - } - } -} - -void -lower_named_interface_blocks(void *mem_ctx, gl_linked_shader *shader) -{ - flatten_named_interface_blocks_declarations v_decl(mem_ctx); - v_decl.run(shader->ir); -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_packing_builtins.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_packing_builtins.cpp deleted file mode 100644 index a9e5a30..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_packing_builtins.cpp +++ /dev/null @@ -1,1352 +0,0 @@ -/* - * Copyright © 2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" -#include "ir_builder.h" -#include "ir_optimization.h" -#include "ir_rvalue_visitor.h" - -enum lower_packing_builtins_op { - LOWER_PACK_UNPACK_NONE = 0x0000, - - LOWER_PACK_SNORM_2x16 = 0x0001, - LOWER_UNPACK_SNORM_2x16 = 0x0002, - - LOWER_PACK_UNORM_2x16 = 0x0004, - LOWER_UNPACK_UNORM_2x16 = 0x0008, - - LOWER_PACK_HALF_2x16 = 0x0010, - LOWER_UNPACK_HALF_2x16 = 0x0020, - - LOWER_PACK_SNORM_4x8 = 0x0040, - LOWER_UNPACK_SNORM_4x8 = 0x0080, - - LOWER_PACK_UNORM_4x8 = 0x0100, - LOWER_UNPACK_UNORM_4x8 = 0x0200, - - LOWER_PACK_USE_BFI = 0x0400, - LOWER_PACK_USE_BFE = 0x0800, -}; - -namespace { - -using namespace ir_builder; - -/** - * A visitor that lowers built-in floating-point pack/unpack expressions - * such packSnorm2x16. - */ -class lower_packing_builtins_visitor : public ir_rvalue_visitor { -public: - /** - * \param op_mask is a bitmask of `enum lower_packing_builtins_op` - */ - explicit lower_packing_builtins_visitor(int op_mask) - : op_mask(op_mask), - progress(false) - { - factory.instructions = &factory_instructions; - } - - virtual ~lower_packing_builtins_visitor() - { - assert(factory_instructions.is_empty()); - } - - bool get_progress() { return progress; } - - void handle_rvalue(ir_rvalue **rvalue) - { - if (!*rvalue) - return; - - ir_expression *expr = (*rvalue)->as_expression(); - if (!expr) - return; - - enum lower_packing_builtins_op lowering_op = - choose_lowering_op(expr->operation); - - if (lowering_op == LOWER_PACK_UNPACK_NONE) - return; - - setup_factory(ralloc_parent(expr)); - - ir_rvalue *op0 = expr->operands[0]; - ralloc_steal(factory.mem_ctx, op0); - - switch (lowering_op) { - case LOWER_PACK_SNORM_2x16: - *rvalue = lower_pack_snorm_2x16(op0); - break; - case LOWER_PACK_SNORM_4x8: - *rvalue = lower_pack_snorm_4x8(op0); - break; - case LOWER_PACK_UNORM_2x16: - *rvalue = lower_pack_unorm_2x16(op0); - break; - case LOWER_PACK_UNORM_4x8: - *rvalue = lower_pack_unorm_4x8(op0); - break; - case LOWER_PACK_HALF_2x16: - *rvalue = lower_pack_half_2x16(op0); - break; - case LOWER_UNPACK_SNORM_2x16: - *rvalue = lower_unpack_snorm_2x16(op0); - break; - case LOWER_UNPACK_SNORM_4x8: - *rvalue = lower_unpack_snorm_4x8(op0); - break; - case LOWER_UNPACK_UNORM_2x16: - *rvalue = lower_unpack_unorm_2x16(op0); - break; - case LOWER_UNPACK_UNORM_4x8: - *rvalue = lower_unpack_unorm_4x8(op0); - break; - case LOWER_UNPACK_HALF_2x16: - *rvalue = lower_unpack_half_2x16(op0); - break; - case LOWER_PACK_UNPACK_NONE: - case LOWER_PACK_USE_BFI: - case LOWER_PACK_USE_BFE: - assert(!"not reached"); - break; - } - - teardown_factory(); - progress = true; - } - -private: - const int op_mask; - bool progress; - ir_factory factory; - exec_list factory_instructions; - - /** - * Determine the needed lowering operation by filtering \a expr_op - * through \ref op_mask. - */ - enum lower_packing_builtins_op - choose_lowering_op(ir_expression_operation expr_op) - { - /* C++ regards int and enum as fundamentally different types. - * So, we can't simply return from each case; we must cast the return - * value. - */ - int result; - - switch (expr_op) { - case ir_unop_pack_snorm_2x16: - result = op_mask & LOWER_PACK_SNORM_2x16; - break; - case ir_unop_pack_snorm_4x8: - result = op_mask & LOWER_PACK_SNORM_4x8; - break; - case ir_unop_pack_unorm_2x16: - result = op_mask & LOWER_PACK_UNORM_2x16; - break; - case ir_unop_pack_unorm_4x8: - result = op_mask & LOWER_PACK_UNORM_4x8; - break; - case ir_unop_pack_half_2x16: - result = op_mask & LOWER_PACK_HALF_2x16; - break; - case ir_unop_unpack_snorm_2x16: - result = op_mask & LOWER_UNPACK_SNORM_2x16; - break; - case ir_unop_unpack_snorm_4x8: - result = op_mask & LOWER_UNPACK_SNORM_4x8; - break; - case ir_unop_unpack_unorm_2x16: - result = op_mask & LOWER_UNPACK_UNORM_2x16; - break; - case ir_unop_unpack_unorm_4x8: - result = op_mask & LOWER_UNPACK_UNORM_4x8; - break; - case ir_unop_unpack_half_2x16: - result = op_mask & LOWER_UNPACK_HALF_2x16; - break; - default: - result = LOWER_PACK_UNPACK_NONE; - break; - } - - return static_cast(result); - } - - void - setup_factory(void *mem_ctx) - { - assert(factory.mem_ctx == NULL); - assert(factory.instructions->is_empty()); - - factory.mem_ctx = mem_ctx; - } - - void - teardown_factory() - { - base_ir->insert_before(factory.instructions); - assert(factory.instructions->is_empty()); - factory.mem_ctx = NULL; - } - - template - ir_constant* - constant(T x) - { - return factory.constant(x); - } - - /** - * \brief Pack two uint16's into a single uint32. - * - * Interpret the given uvec2 as a uint16 pair. Pack the pair into a uint32 - * where the least significant bits specify the first element of the pair. - * Return the uint32. - */ - ir_rvalue* - pack_uvec2_to_uint(ir_rvalue *uvec2_rval) - { - assert(uvec2_rval->type == glsl_type::uvec2_type); - - /* uvec2 u = UVEC2_RVAL; */ - ir_variable *u = factory.make_temp(glsl_type::uvec2_type, - "tmp_pack_uvec2_to_uint"); - factory.emit(assign(u, uvec2_rval)); - - if (op_mask & LOWER_PACK_USE_BFI) { - return bitfield_insert(bit_and(swizzle_x(u), constant(0xffffu)), - swizzle_y(u), - constant(16u), - constant(16u)); - } - - /* return (u.y << 16) | (u.x & 0xffff); */ - return bit_or(lshift(swizzle_y(u), constant(16u)), - bit_and(swizzle_x(u), constant(0xffffu))); - } - - /** - * \brief Pack four uint8's into a single uint32. - * - * Interpret the given uvec4 as a uint32 4-typle. Pack the 4-tuple into a - * uint32 where the least significant bits specify the first element of the - * 4-tuple. Return the uint32. - */ - ir_rvalue* - pack_uvec4_to_uint(ir_rvalue *uvec4_rval) - { - assert(uvec4_rval->type == glsl_type::uvec4_type); - - ir_variable *u = factory.make_temp(glsl_type::uvec4_type, - "tmp_pack_uvec4_to_uint"); - - if (op_mask & LOWER_PACK_USE_BFI) { - /* uvec4 u = UVEC4_RVAL; */ - factory.emit(assign(u, uvec4_rval)); - - return bitfield_insert(bitfield_insert( - bitfield_insert( - bit_and(swizzle_x(u), constant(0xffu)), - swizzle_y(u), constant(8u), constant(8u)), - swizzle_z(u), constant(16u), constant(8u)), - swizzle_w(u), constant(24u), constant(8u)); - } - - /* uvec4 u = UVEC4_RVAL & 0xff */ - factory.emit(assign(u, bit_and(uvec4_rval, constant(0xffu)))); - - /* return (u.w << 24) | (u.z << 16) | (u.y << 8) | u.x; */ - return bit_or(bit_or(lshift(swizzle_w(u), constant(24u)), - lshift(swizzle_z(u), constant(16u))), - bit_or(lshift(swizzle_y(u), constant(8u)), - swizzle_x(u))); - } - - /** - * \brief Unpack a uint32 into two uint16's. - * - * Interpret the given uint32 as a uint16 pair where the uint32's least - * significant bits specify the pair's first element. Return the uint16 - * pair as a uvec2. - */ - ir_rvalue* - unpack_uint_to_uvec2(ir_rvalue *uint_rval) - { - assert(uint_rval->type == glsl_type::uint_type); - - /* uint u = UINT_RVAL; */ - ir_variable *u = factory.make_temp(glsl_type::uint_type, - "tmp_unpack_uint_to_uvec2_u"); - factory.emit(assign(u, uint_rval)); - - /* uvec2 u2; */ - ir_variable *u2 = factory.make_temp(glsl_type::uvec2_type, - "tmp_unpack_uint_to_uvec2_u2"); - - /* u2.x = u & 0xffffu; */ - factory.emit(assign(u2, bit_and(u, constant(0xffffu)), WRITEMASK_X)); - - /* u2.y = u >> 16u; */ - factory.emit(assign(u2, rshift(u, constant(16u)), WRITEMASK_Y)); - - return deref(u2).val; - } - - /** - * \brief Unpack a uint32 into two int16's. - * - * Specifically each 16-bit value is sign-extended to the full width of an - * int32 on return. - */ - ir_rvalue * - unpack_uint_to_ivec2(ir_rvalue *uint_rval) - { - assert(uint_rval->type == glsl_type::uint_type); - - if (!(op_mask & LOWER_PACK_USE_BFE)) { - return rshift(lshift(u2i(unpack_uint_to_uvec2(uint_rval)), - constant(16u)), - constant(16u)); - } - - ir_variable *i = factory.make_temp(glsl_type::int_type, - "tmp_unpack_uint_to_ivec2_i"); - factory.emit(assign(i, u2i(uint_rval))); - - /* ivec2 i2; */ - ir_variable *i2 = factory.make_temp(glsl_type::ivec2_type, - "tmp_unpack_uint_to_ivec2_i2"); - - factory.emit(assign(i2, bitfield_extract(i, constant(0), constant(16)), - WRITEMASK_X)); - factory.emit(assign(i2, bitfield_extract(i, constant(16), constant(16)), - WRITEMASK_Y)); - - return deref(i2).val; - } - - /** - * \brief Unpack a uint32 into four uint8's. - * - * Interpret the given uint32 as a uint8 4-tuple where the uint32's least - * significant bits specify the 4-tuple's first element. Return the uint8 - * 4-tuple as a uvec4. - */ - ir_rvalue* - unpack_uint_to_uvec4(ir_rvalue *uint_rval) - { - assert(uint_rval->type == glsl_type::uint_type); - - /* uint u = UINT_RVAL; */ - ir_variable *u = factory.make_temp(glsl_type::uint_type, - "tmp_unpack_uint_to_uvec4_u"); - factory.emit(assign(u, uint_rval)); - - /* uvec4 u4; */ - ir_variable *u4 = factory.make_temp(glsl_type::uvec4_type, - "tmp_unpack_uint_to_uvec4_u4"); - - /* u4.x = u & 0xffu; */ - factory.emit(assign(u4, bit_and(u, constant(0xffu)), WRITEMASK_X)); - - if (op_mask & LOWER_PACK_USE_BFE) { - /* u4.y = bitfield_extract(u, 8, 8); */ - factory.emit(assign(u4, bitfield_extract(u, constant(8u), constant(8u)), - WRITEMASK_Y)); - - /* u4.z = bitfield_extract(u, 16, 8); */ - factory.emit(assign(u4, bitfield_extract(u, constant(16u), constant(8u)), - WRITEMASK_Z)); - } else { - /* u4.y = (u >> 8u) & 0xffu; */ - factory.emit(assign(u4, bit_and(rshift(u, constant(8u)), - constant(0xffu)), WRITEMASK_Y)); - - /* u4.z = (u >> 16u) & 0xffu; */ - factory.emit(assign(u4, bit_and(rshift(u, constant(16u)), - constant(0xffu)), WRITEMASK_Z)); - } - - /* u4.w = (u >> 24u) */ - factory.emit(assign(u4, rshift(u, constant(24u)), WRITEMASK_W)); - - return deref(u4).val; - } - - /** - * \brief Unpack a uint32 into four int8's. - * - * Specifically each 8-bit value is sign-extended to the full width of an - * int32 on return. - */ - ir_rvalue * - unpack_uint_to_ivec4(ir_rvalue *uint_rval) - { - assert(uint_rval->type == glsl_type::uint_type); - - if (!(op_mask & LOWER_PACK_USE_BFE)) { - return rshift(lshift(u2i(unpack_uint_to_uvec4(uint_rval)), - constant(24u)), - constant(24u)); - } - - ir_variable *i = factory.make_temp(glsl_type::int_type, - "tmp_unpack_uint_to_ivec4_i"); - factory.emit(assign(i, u2i(uint_rval))); - - /* ivec4 i4; */ - ir_variable *i4 = factory.make_temp(glsl_type::ivec4_type, - "tmp_unpack_uint_to_ivec4_i4"); - - factory.emit(assign(i4, bitfield_extract(i, constant(0), constant(8)), - WRITEMASK_X)); - factory.emit(assign(i4, bitfield_extract(i, constant(8), constant(8)), - WRITEMASK_Y)); - factory.emit(assign(i4, bitfield_extract(i, constant(16), constant(8)), - WRITEMASK_Z)); - factory.emit(assign(i4, bitfield_extract(i, constant(24), constant(8)), - WRITEMASK_W)); - - return deref(i4).val; - } - - /** - * \brief Lower a packSnorm2x16 expression. - * - * \param vec2_rval is packSnorm2x16's input - * \return packSnorm2x16's output as a uint rvalue - */ - ir_rvalue* - lower_pack_snorm_2x16(ir_rvalue *vec2_rval) - { - /* From page 88 (94 of pdf) of the GLSL ES 3.00 spec: - * - * highp uint packSnorm2x16(vec2 v) - * -------------------------------- - * First, converts each component of the normalized floating-point value - * v into 16-bit integer values. Then, the results are packed into the - * returned 32-bit unsigned integer. - * - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm2x16: round(clamp(c, -1, +1) * 32767.0) - * - * The first component of the vector will be written to the least - * significant bits of the output; the last component will be written to - * the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return pack_uvec2_to_uint( - * uvec2(ivec2( - * round(clamp(VEC2_RVALUE, -1.0f, 1.0f) * 32767.0f)))); - * - * It is necessary to first convert the vec2 to ivec2 rather than directly - * converting vec2 to uvec2 because the latter conversion is undefined. - * From page 56 (62 of pdf) of the GLSL ES 3.00 spec: "It is undefined to - * convert a negative floating point value to an uint". - */ - assert(vec2_rval->type == glsl_type::vec2_type); - - ir_rvalue *result = pack_uvec2_to_uint( - i2u(f2i(round_even(mul(clamp(vec2_rval, - constant(-1.0f), - constant(1.0f)), - constant(32767.0f)))))); - - assert(result->type == glsl_type::uint_type); - return result; - } - - /** - * \brief Lower a packSnorm4x8 expression. - * - * \param vec4_rval is packSnorm4x8's input - * \return packSnorm4x8's output as a uint rvalue - */ - ir_rvalue* - lower_pack_snorm_4x8(ir_rvalue *vec4_rval) - { - /* From page 137 (143 of pdf) of the GLSL 4.30 spec: - * - * highp uint packSnorm4x8(vec4 v) - * ------------------------------- - * First, converts each component of the normalized floating-point value - * v into 8-bit integer values. Then, the results are packed into the - * returned 32-bit unsigned integer. - * - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - * - * The first component of the vector will be written to the least - * significant bits of the output; the last component will be written to - * the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return pack_uvec4_to_uint( - * uvec4(ivec4( - * round(clamp(VEC4_RVALUE, -1.0f, 1.0f) * 127.0f)))); - * - * It is necessary to first convert the vec4 to ivec4 rather than directly - * converting vec4 to uvec4 because the latter conversion is undefined. - * From page 87 (93 of pdf) of the GLSL 4.30 spec: "It is undefined to - * convert a negative floating point value to an uint". - */ - assert(vec4_rval->type == glsl_type::vec4_type); - - ir_rvalue *result = pack_uvec4_to_uint( - i2u(f2i(round_even(mul(clamp(vec4_rval, - constant(-1.0f), - constant(1.0f)), - constant(127.0f)))))); - - assert(result->type == glsl_type::uint_type); - return result; - } - - /** - * \brief Lower an unpackSnorm2x16 expression. - * - * \param uint_rval is unpackSnorm2x16's input - * \return unpackSnorm2x16's output as a vec2 rvalue - */ - ir_rvalue* - lower_unpack_snorm_2x16(ir_rvalue *uint_rval) - { - /* From page 88 (94 of pdf) of the GLSL ES 3.00 spec: - * - * highp vec2 unpackSnorm2x16 (highp uint p) - * ----------------------------------------- - * First, unpacks a single 32-bit unsigned integer p into a pair of - * 16-bit unsigned integers. Then, each component is converted to - * a normalized floating-point value to generate the returned - * two-component vector. - * - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm2x16: clamp(f / 32767.0, -1,+1) - * - * The first component of the returned vector will be extracted from the - * least significant bits of the input; the last component will be - * extracted from the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return clamp( - * ((ivec2(unpack_uint_to_uvec2(UINT_RVALUE)) << 16) >> 16) / 32767.0f, - * -1.0f, 1.0f); - * - * The above IR may appear unnecessarily complex, but the intermediate - * conversion to ivec2 and the bit shifts are necessary to correctly unpack - * negative floats. - * - * To see why, consider packing and then unpacking vec2(-1.0, 0.0). - * packSnorm2x16 encodes -1.0 as the int16 0xffff. During unpacking, we - * place that int16 into an int32, which results in the *positive* integer - * 0x0000ffff. The int16's sign bit becomes, in the int32, the rather - * unimportant bit 16. We must now extend the int16's sign bit into bits - * 17-32, which is accomplished by left-shifting then right-shifting. - */ - - assert(uint_rval->type == glsl_type::uint_type); - - ir_rvalue *result = - clamp(div(i2f(unpack_uint_to_ivec2(uint_rval)), - constant(32767.0f)), - constant(-1.0f), - constant(1.0f)); - - assert(result->type == glsl_type::vec2_type); - return result; - } - - /** - * \brief Lower an unpackSnorm4x8 expression. - * - * \param uint_rval is unpackSnorm4x8's input - * \return unpackSnorm4x8's output as a vec4 rvalue - */ - ir_rvalue* - lower_unpack_snorm_4x8(ir_rvalue *uint_rval) - { - /* From page 137 (143 of pdf) of the GLSL 4.30 spec: - * - * highp vec4 unpackSnorm4x8 (highp uint p) - * ---------------------------------------- - * First, unpacks a single 32-bit unsigned integer p into four - * 8-bit unsigned integers. Then, each component is converted to - * a normalized floating-point value to generate the returned - * four-component vector. - * - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm4x8: clamp(f / 127.0, -1, +1) - * - * The first component of the returned vector will be extracted from the - * least significant bits of the input; the last component will be - * extracted from the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return clamp( - * ((ivec4(unpack_uint_to_uvec4(UINT_RVALUE)) << 24) >> 24) / 127.0f, - * -1.0f, 1.0f); - * - * The above IR may appear unnecessarily complex, but the intermediate - * conversion to ivec4 and the bit shifts are necessary to correctly unpack - * negative floats. - * - * To see why, consider packing and then unpacking vec4(-1.0, 0.0, 0.0, - * 0.0). packSnorm4x8 encodes -1.0 as the int8 0xff. During unpacking, we - * place that int8 into an int32, which results in the *positive* integer - * 0x000000ff. The int8's sign bit becomes, in the int32, the rather - * unimportant bit 8. We must now extend the int8's sign bit into bits - * 9-32, which is accomplished by left-shifting then right-shifting. - */ - - assert(uint_rval->type == glsl_type::uint_type); - - ir_rvalue *result = - clamp(div(i2f(unpack_uint_to_ivec4(uint_rval)), - constant(127.0f)), - constant(-1.0f), - constant(1.0f)); - - assert(result->type == glsl_type::vec4_type); - return result; - } - - /** - * \brief Lower a packUnorm2x16 expression. - * - * \param vec2_rval is packUnorm2x16's input - * \return packUnorm2x16's output as a uint rvalue - */ - ir_rvalue* - lower_pack_unorm_2x16(ir_rvalue *vec2_rval) - { - /* From page 88 (94 of pdf) of the GLSL ES 3.00 spec: - * - * highp uint packUnorm2x16 (vec2 v) - * --------------------------------- - * First, converts each component of the normalized floating-point value - * v into 16-bit integer values. Then, the results are packed into the - * returned 32-bit unsigned integer. - * - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - * - * The first component of the vector will be written to the least - * significant bits of the output; the last component will be written to - * the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return pack_uvec2_to_uint(uvec2( - * round(clamp(VEC2_RVALUE, 0.0f, 1.0f) * 65535.0f))); - * - * Here it is safe to directly convert the vec2 to uvec2 because the vec2 - * has been clamped to a non-negative range. - */ - - assert(vec2_rval->type == glsl_type::vec2_type); - - ir_rvalue *result = pack_uvec2_to_uint( - f2u(round_even(mul(saturate(vec2_rval), constant(65535.0f))))); - - assert(result->type == glsl_type::uint_type); - return result; - } - - /** - * \brief Lower a packUnorm4x8 expression. - * - * \param vec4_rval is packUnorm4x8's input - * \return packUnorm4x8's output as a uint rvalue - */ - ir_rvalue* - lower_pack_unorm_4x8(ir_rvalue *vec4_rval) - { - /* From page 137 (143 of pdf) of the GLSL 4.30 spec: - * - * highp uint packUnorm4x8 (vec4 v) - * -------------------------------- - * First, converts each component of the normalized floating-point value - * v into 8-bit integer values. Then, the results are packed into the - * returned 32-bit unsigned integer. - * - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - * - * The first component of the vector will be written to the least - * significant bits of the output; the last component will be written to - * the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return pack_uvec4_to_uint(uvec4( - * round(clamp(VEC2_RVALUE, 0.0f, 1.0f) * 255.0f))); - * - * Here it is safe to directly convert the vec4 to uvec4 because the vec4 - * has been clamped to a non-negative range. - */ - - assert(vec4_rval->type == glsl_type::vec4_type); - - ir_rvalue *result = pack_uvec4_to_uint( - f2u(round_even(mul(saturate(vec4_rval), constant(255.0f))))); - - assert(result->type == glsl_type::uint_type); - return result; - } - - /** - * \brief Lower an unpackUnorm2x16 expression. - * - * \param uint_rval is unpackUnorm2x16's input - * \return unpackUnorm2x16's output as a vec2 rvalue - */ - ir_rvalue* - lower_unpack_unorm_2x16(ir_rvalue *uint_rval) - { - /* From page 89 (95 of pdf) of the GLSL ES 3.00 spec: - * - * highp vec2 unpackUnorm2x16 (highp uint p) - * ----------------------------------------- - * First, unpacks a single 32-bit unsigned integer p into a pair of - * 16-bit unsigned integers. Then, each component is converted to - * a normalized floating-point value to generate the returned - * two-component vector. - * - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm2x16: f / 65535.0 - * - * The first component of the returned vector will be extracted from the - * least significant bits of the input; the last component will be - * extracted from the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return vec2(unpack_uint_to_uvec2(UINT_RVALUE)) / 65535.0; - */ - - assert(uint_rval->type == glsl_type::uint_type); - - ir_rvalue *result = div(u2f(unpack_uint_to_uvec2(uint_rval)), - constant(65535.0f)); - - assert(result->type == glsl_type::vec2_type); - return result; - } - - /** - * \brief Lower an unpackUnorm4x8 expression. - * - * \param uint_rval is unpackUnorm4x8's input - * \return unpackUnorm4x8's output as a vec4 rvalue - */ - ir_rvalue* - lower_unpack_unorm_4x8(ir_rvalue *uint_rval) - { - /* From page 137 (143 of pdf) of the GLSL 4.30 spec: - * - * highp vec4 unpackUnorm4x8 (highp uint p) - * ---------------------------------------- - * First, unpacks a single 32-bit unsigned integer p into four - * 8-bit unsigned integers. Then, each component is converted to - * a normalized floating-point value to generate the returned - * two-component vector. - * - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm4x8: f / 255.0 - * - * The first component of the returned vector will be extracted from the - * least significant bits of the input; the last component will be - * extracted from the most significant bits. - * - * This function generates IR that approximates the following pseudo-GLSL: - * - * return vec4(unpack_uint_to_uvec4(UINT_RVALUE)) / 255.0; - */ - - assert(uint_rval->type == glsl_type::uint_type); - - ir_rvalue *result = div(u2f(unpack_uint_to_uvec4(uint_rval)), - constant(255.0f)); - - assert(result->type == glsl_type::vec4_type); - return result; - } - - /** - * \brief Lower the component-wise calculation of packHalf2x16. - * - * \param f_rval is one component of packHafl2x16's input - * \param e_rval is the unshifted exponent bits of f_rval - * \param m_rval is the unshifted mantissa bits of f_rval - * - * \return a uint rvalue that encodes a float16 in its lower 16 bits - */ - ir_rvalue* - pack_half_1x16_nosign(ir_rvalue *f_rval, - ir_rvalue *e_rval, - ir_rvalue *m_rval) - { - assert(e_rval->type == glsl_type::uint_type); - assert(m_rval->type == glsl_type::uint_type); - - /* uint u16; */ - ir_variable *u16 = factory.make_temp(glsl_type::uint_type, - "tmp_pack_half_1x16_u16"); - - /* float f = FLOAT_RVAL; */ - ir_variable *f = factory.make_temp(glsl_type::float_type, - "tmp_pack_half_1x16_f"); - factory.emit(assign(f, f_rval)); - - /* uint e = E_RVAL; */ - ir_variable *e = factory.make_temp(glsl_type::uint_type, - "tmp_pack_half_1x16_e"); - factory.emit(assign(e, e_rval)); - - /* uint m = M_RVAL; */ - ir_variable *m = factory.make_temp(glsl_type::uint_type, - "tmp_pack_half_1x16_m"); - factory.emit(assign(m, m_rval)); - - /* Preliminaries - * ------------- - * - * For a float16, the bit layout is: - * - * sign: 15 - * exponent: 10:14 - * mantissa: 0:9 - * - * Let f16 be a float16 value. The sign, exponent, and mantissa - * determine its value thus: - * - * if e16 = 0 and m16 = 0, then zero: (-1)^s16 * 0 (1) - * if e16 = 0 and m16!= 0, then subnormal: (-1)^s16 * 2^(e16 - 14) * (m16 / 2^10) (2) - * if 0 < e16 < 31, then normal: (-1)^s16 * 2^(e16 - 15) * (1 + m16 / 2^10) (3) - * if e16 = 31 and m16 = 0, then infinite: (-1)^s16 * inf (4) - * if e16 = 31 and m16 != 0, then NaN (5) - * - * where 0 <= m16 < 2^10. - * - * For a float32, the bit layout is: - * - * sign: 31 - * exponent: 23:30 - * mantissa: 0:22 - * - * Let f32 be a float32 value. The sign, exponent, and mantissa - * determine its value thus: - * - * if e32 = 0 and m32 = 0, then zero: (-1)^s * 0 (10) - * if e32 = 0 and m32 != 0, then subnormal: (-1)^s * 2^(e32 - 126) * (m32 / 2^23) (11) - * if 0 < e32 < 255, then normal: (-1)^s * 2^(e32 - 127) * (1 + m32 / 2^23) (12) - * if e32 = 255 and m32 = 0, then infinite: (-1)^s * inf (13) - * if e32 = 255 and m32 != 0, then NaN (14) - * - * where 0 <= m32 < 2^23. - * - * The minimum and maximum normal float16 values are - * - * min_norm16 = 2^(1 - 15) * (1 + 0 / 2^10) = 2^(-14) (20) - * max_norm16 = 2^(30 - 15) * (1 + 1023 / 2^10) (21) - * - * The step at max_norm16 is - * - * max_step16 = 2^5 (22) - * - * Observe that the float16 boundary values in equations 20-21 lie in the - * range of normal float32 values. - * - * - * Rounding Behavior - * ----------------- - * Not all float32 values can be exactly represented as a float16. We - * round all such intermediate float32 values to the nearest float16; if - * the float32 is exactly between to float16 values, we round to the one - * with an even mantissa. This rounding behavior has several benefits: - * - * - It has no sign bias. - * - * - It reproduces the behavior of real hardware: opcode F32TO16 in Intel's - * GPU ISA. - * - * - By reproducing the behavior of the GPU (at least on Intel hardware), - * compile-time evaluation of constant packHalf2x16 GLSL expressions will - * result in the same value as if the expression were executed on the - * GPU. - * - * Calculation - * ----------- - * Our task is to compute s16, e16, m16 given f32. Since this function - * ignores the sign bit, assume that s32 = s16 = 0. There are several - * cases consider. - */ - - factory.emit( - - /* Case 1) f32 is NaN - * - * The resultant f16 will also be NaN. - */ - - /* if (e32 == 255 && m32 != 0) { */ - if_tree(logic_and(equal(e, constant(0xffu << 23u)), - logic_not(equal(m, constant(0u)))), - - assign(u16, constant(0x7fffu)), - - /* Case 2) f32 lies in the range [0, min_norm16). - * - * The resultant float16 will be either zero, subnormal, or normal. - * - * Solving - * - * f32 = min_norm16 (30) - * - * gives - * - * e32 = 113 and m32 = 0 (31) - * - * Therefore this case occurs if and only if - * - * e32 < 113 (32) - */ - - /* } else if (e32 < 113) { */ - if_tree(less(e, constant(113u << 23u)), - - /* u16 = uint(round_to_even(abs(f32) * float(1u << 24u))); */ - assign(u16, f2u(round_even(mul(expr(ir_unop_abs, f), - constant((float) (1 << 24)))))), - - /* Case 3) f32 lies in the range - * [min_norm16, max_norm16 + max_step16). - * - * The resultant float16 will be either normal or infinite. - * - * Solving - * - * f32 = max_norm16 + max_step16 (40) - * = 2^15 * (1 + 1023 / 2^10) + 2^5 (41) - * = 2^16 (42) - * gives - * - * e32 = 143 and m32 = 0 (43) - * - * We already solved the boundary condition f32 = min_norm16 above - * in equation 31. Therefore this case occurs if and only if - * - * 113 <= e32 and e32 < 143 - */ - - /* } else if (e32 < 143) { */ - if_tree(less(e, constant(143u << 23u)), - - /* The addition below handles the case where the mantissa rounds - * up to 1024 and bumps the exponent. - * - * u16 = ((e - (112u << 23u)) >> 13u) - * + round_to_even((float(m) / (1u << 13u)); - */ - assign(u16, add(rshift(sub(e, constant(112u << 23u)), - constant(13u)), - f2u(round_even( - div(u2f(m), constant((float) (1 << 13))))))), - - /* Case 4) f32 lies in the range [max_norm16 + max_step16, inf]. - * - * The resultant float16 will be infinite. - * - * The cases above caught all float32 values in the range - * [0, max_norm16 + max_step16), so this is the fall-through case. - */ - - /* } else { */ - - assign(u16, constant(31u << 10u)))))); - - /* } */ - - return deref(u16).val; - } - - /** - * \brief Lower a packHalf2x16 expression. - * - * \param vec2_rval is packHalf2x16's input - * \return packHalf2x16's output as a uint rvalue - */ - ir_rvalue* - lower_pack_half_2x16(ir_rvalue *vec2_rval) - { - /* From page 89 (95 of pdf) of the GLSL ES 3.00 spec: - * - * highp uint packHalf2x16 (mediump vec2 v) - * ---------------------------------------- - * Returns an unsigned integer obtained by converting the components of - * a two-component floating-point vector to the 16-bit floating-point - * representation found in the OpenGL ES Specification, and then packing - * these two 16-bit integers into a 32-bit unsigned integer. - * - * The first vector component specifies the 16 least- significant bits - * of the result; the second component specifies the 16 most-significant - * bits. - */ - - assert(vec2_rval->type == glsl_type::vec2_type); - - /* vec2 f = VEC2_RVAL; */ - ir_variable *f = factory.make_temp(glsl_type::vec2_type, - "tmp_pack_half_2x16_f"); - factory.emit(assign(f, vec2_rval)); - - /* uvec2 f32 = bitcast_f2u(f); */ - ir_variable *f32 = factory.make_temp(glsl_type::uvec2_type, - "tmp_pack_half_2x16_f32"); - factory.emit(assign(f32, expr(ir_unop_bitcast_f2u, f))); - - /* uvec2 f16; */ - ir_variable *f16 = factory.make_temp(glsl_type::uvec2_type, - "tmp_pack_half_2x16_f16"); - - /* Get f32's unshifted exponent bits. - * - * uvec2 e = f32 & 0x7f800000u; - */ - ir_variable *e = factory.make_temp(glsl_type::uvec2_type, - "tmp_pack_half_2x16_e"); - factory.emit(assign(e, bit_and(f32, constant(0x7f800000u)))); - - /* Get f32's unshifted mantissa bits. - * - * uvec2 m = f32 & 0x007fffffu; - */ - ir_variable *m = factory.make_temp(glsl_type::uvec2_type, - "tmp_pack_half_2x16_m"); - factory.emit(assign(m, bit_and(f32, constant(0x007fffffu)))); - - /* Set f16's exponent and mantissa bits. - * - * f16.x = pack_half_1x16_nosign(e.x, m.x); - * f16.y = pack_half_1y16_nosign(e.y, m.y); - */ - factory.emit(assign(f16, pack_half_1x16_nosign(swizzle_x(f), - swizzle_x(e), - swizzle_x(m)), - WRITEMASK_X)); - factory.emit(assign(f16, pack_half_1x16_nosign(swizzle_y(f), - swizzle_y(e), - swizzle_y(m)), - WRITEMASK_Y)); - - /* Set f16's sign bits. - * - * f16 |= (f32 & (1u << 31u) >> 16u; - */ - factory.emit( - assign(f16, bit_or(f16, - rshift(bit_and(f32, constant(1u << 31u)), - constant(16u))))); - - - /* return (f16.y << 16u) | f16.x; */ - ir_rvalue *result = bit_or(lshift(swizzle_y(f16), - constant(16u)), - swizzle_x(f16)); - - assert(result->type == glsl_type::uint_type); - return result; - } - - /** - * \brief Lower the component-wise calculation of unpackHalf2x16. - * - * Given a uint that encodes a float16 in its lower 16 bits, this function - * returns a uint that encodes a float32 with the same value. The sign bit - * of the float16 is ignored. - * - * \param e_rval is the unshifted exponent bits of a float16 - * \param m_rval is the unshifted mantissa bits of a float16 - * \param a uint rvalue that encodes a float32 - */ - ir_rvalue* - unpack_half_1x16_nosign(ir_rvalue *e_rval, ir_rvalue *m_rval) - { - assert(e_rval->type == glsl_type::uint_type); - assert(m_rval->type == glsl_type::uint_type); - - /* uint u32; */ - ir_variable *u32 = factory.make_temp(glsl_type::uint_type, - "tmp_unpack_half_1x16_u32"); - - /* uint e = E_RVAL; */ - ir_variable *e = factory.make_temp(glsl_type::uint_type, - "tmp_unpack_half_1x16_e"); - factory.emit(assign(e, e_rval)); - - /* uint m = M_RVAL; */ - ir_variable *m = factory.make_temp(glsl_type::uint_type, - "tmp_unpack_half_1x16_m"); - factory.emit(assign(m, m_rval)); - - /* Preliminaries - * ------------- - * - * For a float16, the bit layout is: - * - * sign: 15 - * exponent: 10:14 - * mantissa: 0:9 - * - * Let f16 be a float16 value. The sign, exponent, and mantissa - * determine its value thus: - * - * if e16 = 0 and m16 = 0, then zero: (-1)^s16 * 0 (1) - * if e16 = 0 and m16!= 0, then subnormal: (-1)^s16 * 2^(e16 - 14) * (m16 / 2^10) (2) - * if 0 < e16 < 31, then normal: (-1)^s16 * 2^(e16 - 15) * (1 + m16 / 2^10) (3) - * if e16 = 31 and m16 = 0, then infinite: (-1)^s16 * inf (4) - * if e16 = 31 and m16 != 0, then NaN (5) - * - * where 0 <= m16 < 2^10. - * - * For a float32, the bit layout is: - * - * sign: 31 - * exponent: 23:30 - * mantissa: 0:22 - * - * Let f32 be a float32 value. The sign, exponent, and mantissa - * determine its value thus: - * - * if e32 = 0 and m32 = 0, then zero: (-1)^s * 0 (10) - * if e32 = 0 and m32 != 0, then subnormal: (-1)^s * 2^(e32 - 126) * (m32 / 2^23) (11) - * if 0 < e32 < 255, then normal: (-1)^s * 2^(e32 - 127) * (1 + m32 / 2^23) (12) - * if e32 = 255 and m32 = 0, then infinite: (-1)^s * inf (13) - * if e32 = 255 and m32 != 0, then NaN (14) - * - * where 0 <= m32 < 2^23. - * - * Calculation - * ----------- - * Our task is to compute s32, e32, m32 given f16. Since this function - * ignores the sign bit, assume that s32 = s16 = 0. There are several - * cases consider. - */ - - factory.emit( - - /* Case 1) f16 is zero or subnormal. - * - * The simplest method of calcuating f32 in this case is - * - * f32 = f16 (20) - * = 2^(-14) * (m16 / 2^10) (21) - * = m16 / 2^(-24) (22) - */ - - /* if (e16 == 0) { */ - if_tree(equal(e, constant(0u)), - - /* u32 = bitcast_f2u(float(m) / float(1 << 24)); */ - assign(u32, expr(ir_unop_bitcast_f2u, - div(u2f(m), constant((float)(1 << 24))))), - - /* Case 2) f16 is normal. - * - * The equation - * - * f32 = f16 (30) - * 2^(e32 - 127) * (1 + m32 / 2^23) = (31) - * 2^(e16 - 15) * (1 + m16 / 2^10) - * - * can be decomposed into two - * - * 2^(e32 - 127) = 2^(e16 - 15) (32) - * 1 + m32 / 2^23 = 1 + m16 / 2^10 (33) - * - * which solve to - * - * e32 = e16 + 112 (34) - * m32 = m16 * 2^13 (35) - */ - - /* } else if (e16 < 31)) { */ - if_tree(less(e, constant(31u << 10u)), - - /* u32 = ((e + (112 << 10)) | m) << 13; - */ - assign(u32, lshift(bit_or(add(e, constant(112u << 10u)), m), - constant(13u))), - - - /* Case 3) f16 is infinite. */ - if_tree(equal(m, constant(0u)), - - assign(u32, constant(255u << 23u)), - - /* Case 4) f16 is NaN. */ - /* } else { */ - - assign(u32, constant(0x7fffffffu)))))); - - /* } */ - - return deref(u32).val; - } - - /** - * \brief Lower an unpackHalf2x16 expression. - * - * \param uint_rval is unpackHalf2x16's input - * \return unpackHalf2x16's output as a vec2 rvalue - */ - ir_rvalue* - lower_unpack_half_2x16(ir_rvalue *uint_rval) - { - /* From page 89 (95 of pdf) of the GLSL ES 3.00 spec: - * - * mediump vec2 unpackHalf2x16 (highp uint v) - * ------------------------------------------ - * Returns a two-component floating-point vector with components - * obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit - * values, interpreting those values as 16-bit floating-point numbers - * according to the OpenGL ES Specification, and converting them to - * 32-bit floating-point values. - * - * The first component of the vector is obtained from the - * 16 least-significant bits of v; the second component is obtained - * from the 16 most-significant bits of v. - */ - assert(uint_rval->type == glsl_type::uint_type); - - /* uint u = RVALUE; - * uvec2 f16 = uvec2(u.x & 0xffff, u.y >> 16); - */ - ir_variable *f16 = factory.make_temp(glsl_type::uvec2_type, - "tmp_unpack_half_2x16_f16"); - factory.emit(assign(f16, unpack_uint_to_uvec2(uint_rval))); - - /* uvec2 f32; */ - ir_variable *f32 = factory.make_temp(glsl_type::uvec2_type, - "tmp_unpack_half_2x16_f32"); - - /* Get f16's unshifted exponent bits. - * - * uvec2 e = f16 & 0x7c00u; - */ - ir_variable *e = factory.make_temp(glsl_type::uvec2_type, - "tmp_unpack_half_2x16_e"); - factory.emit(assign(e, bit_and(f16, constant(0x7c00u)))); - - /* Get f16's unshifted mantissa bits. - * - * uvec2 m = f16 & 0x03ffu; - */ - ir_variable *m = factory.make_temp(glsl_type::uvec2_type, - "tmp_unpack_half_2x16_m"); - factory.emit(assign(m, bit_and(f16, constant(0x03ffu)))); - - /* Set f32's exponent and mantissa bits. - * - * f32.x = unpack_half_1x16_nosign(e.x, m.x); - * f32.y = unpack_half_1x16_nosign(e.y, m.y); - */ - factory.emit(assign(f32, unpack_half_1x16_nosign(swizzle_x(e), - swizzle_x(m)), - WRITEMASK_X)); - factory.emit(assign(f32, unpack_half_1x16_nosign(swizzle_y(e), - swizzle_y(m)), - WRITEMASK_Y)); - - /* Set f32's sign bit. - * - * f32 |= (f16 & 0x8000u) << 16u; - */ - factory.emit(assign(f32, bit_or(f32, - lshift(bit_and(f16, - constant(0x8000u)), - constant(16u))))); - - /* return bitcast_u2f(f32); */ - ir_rvalue *result = expr(ir_unop_bitcast_u2f, f32); - assert(result->type == glsl_type::vec2_type); - return result; - } -}; - -} // namespace anonymous - -/** - * \brief Lower the builtin packing functions. - */ -bool -lower_packing_builtins(exec_list *instructions, - bool has_shading_language_packing, - bool has_gpu_shader5, - bool has_half_float_packing) -{ - if (!has_shading_language_packing) - return false; - - int op_mask = LOWER_PACK_SNORM_2x16 | - LOWER_UNPACK_SNORM_2x16 | - LOWER_PACK_UNORM_2x16 | - LOWER_UNPACK_UNORM_2x16 | - LOWER_PACK_SNORM_4x8 | - LOWER_UNPACK_SNORM_4x8 | - LOWER_UNPACK_UNORM_4x8 | - LOWER_PACK_UNORM_4x8; - - if (has_gpu_shader5) - op_mask |= LOWER_PACK_USE_BFI | LOWER_PACK_USE_BFE; - - if (!has_half_float_packing) - op_mask |= LOWER_PACK_HALF_2x16 | LOWER_UNPACK_HALF_2x16; - - lower_packing_builtins_visitor v(op_mask); - visit_list_elements(&v, instructions, true); - return v.get_progress(); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_precision.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_precision.cpp deleted file mode 100644 index addb7d6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_precision.cpp +++ /dev/null @@ -1,1350 +0,0 @@ -/* - * Copyright © 2019 Google, Inc - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_precision.cpp - */ - -#include "../../util/macros.h" -#include "../../mesa/main/consts_exts.h" -#include "../glsl_types.h" -#include "ir.h" -#include "ir_builder.h" -#include "ir_optimization.h" -#include "ir_rvalue_visitor.h" -#include "../../util/half_float.h" -#include "../../util/set.h" -#include "../../util/hash_table.h" -#include - -namespace { - -class find_precision_visitor : public ir_rvalue_enter_visitor { -public: - find_precision_visitor(const struct gl_shader_compiler_options *options); - ~find_precision_visitor(); - - virtual void handle_rvalue(ir_rvalue **rvalue); - virtual ir_visitor_status visit_enter(ir_call *ir); - - ir_function_signature *map_builtin(ir_function_signature *sig); - - /* Set of rvalues that can be lowered. This will be filled in by - * find_lowerable_rvalues_visitor. Only the root node of a lowerable section - * will be added to this set. - */ - struct set *lowerable_rvalues; - - /** - * A mapping of builtin signature functions to lowered versions. This is - * filled in lazily when a lowered version is needed. - */ - struct hash_table *lowered_builtins; - /** - * A temporary hash table only used in order to clone functions. - */ - struct hash_table *clone_ht; - - void *lowered_builtin_mem_ctx; - - const struct gl_shader_compiler_options *options; -}; - -class find_lowerable_rvalues_visitor : public ir_hierarchical_visitor { -public: - enum can_lower_state { - UNKNOWN, - CANT_LOWER, - SHOULD_LOWER, - }; - - enum parent_relation { - /* The parent performs a further operation involving the result from the - * child and can be lowered along with it. - */ - COMBINED_OPERATION, - /* The parent instruction’s operation is independent of the child type so - * the child should be lowered separately. - */ - INDEPENDENT_OPERATION, - }; - - struct stack_entry { - ir_instruction *instr; - enum can_lower_state state; - /* List of child rvalues that can be lowered. When this stack entry is - * popped, if this node itself can’t be lowered than all of the children - * are root nodes to lower so we will add them to lowerable_rvalues. - * Otherwise if this node can also be lowered then we won’t add the - * children because we only want to add the topmost lowerable nodes to - * lowerable_rvalues and the children will be lowered as part of lowering - * this node. - */ - std::vector lowerable_children; - }; - - find_lowerable_rvalues_visitor(struct set *result, - const struct gl_shader_compiler_options *options); - - static void stack_enter(class ir_instruction *ir, void *data); - static void stack_leave(class ir_instruction *ir, void *data); - - virtual ir_visitor_status visit(ir_constant *ir); - virtual ir_visitor_status visit(ir_dereference_variable *ir); - - virtual ir_visitor_status visit_enter(ir_dereference_record *ir); - virtual ir_visitor_status visit_enter(ir_dereference_array *ir); - virtual ir_visitor_status visit_enter(ir_texture *ir); - virtual ir_visitor_status visit_enter(ir_expression *ir); - - virtual ir_visitor_status visit_leave(ir_assignment *ir); - virtual ir_visitor_status visit_leave(ir_call *ir); - - can_lower_state handle_precision(const glsl_type *type, - int precision) const; - - static parent_relation get_parent_relation(ir_instruction *parent, - ir_instruction *child); - - std::vector stack; - struct set *lowerable_rvalues; - const struct gl_shader_compiler_options *options; - - void pop_stack_entry(); - void add_lowerable_children(const stack_entry &entry); -}; - -class lower_precision_visitor : public ir_rvalue_visitor { -public: - virtual void handle_rvalue(ir_rvalue **rvalue); - virtual ir_visitor_status visit_enter(ir_dereference_array *); - virtual ir_visitor_status visit_enter(ir_dereference_record *); - virtual ir_visitor_status visit_enter(ir_call *ir); - virtual ir_visitor_status visit_enter(ir_texture *ir); - virtual ir_visitor_status visit_leave(ir_expression *); -}; - -static bool -can_lower_type(const struct gl_shader_compiler_options *options, - const glsl_type *type) -{ - /* Don’t lower any expressions involving non-float types except bool and - * texture samplers. This will rule out operations that change the type such - * as conversion to ints. Instead it will end up lowering the arguments - * instead and adding a final conversion to float32. We want to handle - * boolean types so that it will do comparisons as 16-bit. - */ - - switch (type->without_array()->base_type) { - /* TODO: should we do anything for these two with regard to Int16 vs FP16 - * support? - */ - case GLSL_TYPE_BOOL: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - return true; - - case GLSL_TYPE_FLOAT: - return options->LowerPrecisionFloat16; - - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - return options->LowerPrecisionInt16; - - default: - return false; - } -} - -find_lowerable_rvalues_visitor::find_lowerable_rvalues_visitor(struct set *res, - const struct gl_shader_compiler_options *opts) -{ - lowerable_rvalues = res; - options = opts; - callback_enter = stack_enter; - callback_leave = stack_leave; - data_enter = this; - data_leave = this; -} - -void -find_lowerable_rvalues_visitor::stack_enter(class ir_instruction *ir, - void *data) -{ - find_lowerable_rvalues_visitor *state = - (find_lowerable_rvalues_visitor *) data; - - /* Add a new stack entry for this instruction */ - stack_entry entry; - - entry.instr = ir; - entry.state = state->in_assignee ? CANT_LOWER : UNKNOWN; - - state->stack.push_back(entry); -} - -void -find_lowerable_rvalues_visitor::add_lowerable_children(const stack_entry &entry) -{ - /* We can’t lower this node so if there were any pending children then they - * are all root lowerable nodes and we should add them to the set. - */ - for (auto &it : entry.lowerable_children) - _mesa_set_add(lowerable_rvalues, it); -} - -void -find_lowerable_rvalues_visitor::pop_stack_entry() -{ - const stack_entry &entry = stack.back(); - - if (stack.size() >= 2) { - /* Combine this state into the parent state, unless the parent operation - * doesn’t have any relation to the child operations - */ - stack_entry &parent = stack.end()[-2]; - parent_relation rel = get_parent_relation(parent.instr, entry.instr); - - if (rel == COMBINED_OPERATION) { - switch (entry.state) { - case CANT_LOWER: - parent.state = CANT_LOWER; - break; - case SHOULD_LOWER: - if (parent.state == UNKNOWN) - parent.state = SHOULD_LOWER; - break; - case UNKNOWN: - break; - } - } - } - - if (entry.state == SHOULD_LOWER) { - ir_rvalue *rv = entry.instr->as_rvalue(); - - if (rv == NULL) { - add_lowerable_children(entry); - } else if (stack.size() >= 2) { - stack_entry &parent = stack.end()[-2]; - - switch (get_parent_relation(parent.instr, rv)) { - case COMBINED_OPERATION: - /* We only want to add the toplevel lowerable instructions to the - * lowerable set. Therefore if there is a parent then instead of - * adding this instruction to the set we will queue depending on - * the result of the parent instruction. - */ - parent.lowerable_children.push_back(entry.instr); - break; - case INDEPENDENT_OPERATION: - _mesa_set_add(lowerable_rvalues, rv); - break; - } - } else { - /* This is a toplevel node so add it directly to the lowerable - * set. - */ - _mesa_set_add(lowerable_rvalues, rv); - } - } else if (entry.state == CANT_LOWER) { - add_lowerable_children(entry); - } - - stack.pop_back(); -} - -void -find_lowerable_rvalues_visitor::stack_leave(class ir_instruction *ir, - void *data) -{ - find_lowerable_rvalues_visitor *state = - (find_lowerable_rvalues_visitor *) data; - - state->pop_stack_entry(); -} - -enum find_lowerable_rvalues_visitor::can_lower_state -find_lowerable_rvalues_visitor::handle_precision(const glsl_type *type, - int precision) const -{ - if (!can_lower_type(options, type)) - return CANT_LOWER; - - switch (precision) { - case GLSL_PRECISION_NONE: - return UNKNOWN; - case GLSL_PRECISION_HIGH: - return CANT_LOWER; - case GLSL_PRECISION_MEDIUM: - case GLSL_PRECISION_LOW: - return SHOULD_LOWER; - } - - return CANT_LOWER; -} - -enum find_lowerable_rvalues_visitor::parent_relation -find_lowerable_rvalues_visitor::get_parent_relation(ir_instruction *parent, - ir_instruction *child) -{ - /* If the parent is a dereference instruction then the only child could be - * for example an array dereference and that should be lowered independently - * of the parent. - */ - if (parent->as_dereference()) - return INDEPENDENT_OPERATION; - - /* The precision of texture sampling depend on the precision of the sampler. - * The rest of the arguments don’t matter so we can treat it as an - * independent operation. - */ - if (parent->as_texture()) - return INDEPENDENT_OPERATION; - - return COMBINED_OPERATION; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit(ir_constant *ir) -{ - stack_enter(ir, this); - - if (!can_lower_type(options, ir->type)) - stack.back().state = CANT_LOWER; - - stack_leave(ir, this); - - return visit_continue; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit(ir_dereference_variable *ir) -{ - stack_enter(ir, this); - - if (stack.back().state == UNKNOWN) - stack.back().state = handle_precision(ir->type, ir->precision()); - - stack_leave(ir, this); - - return visit_continue; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit_enter(ir_dereference_record *ir) -{ - ir_hierarchical_visitor::visit_enter(ir); - - if (stack.back().state == UNKNOWN) - stack.back().state = handle_precision(ir->type, ir->precision()); - - return visit_continue; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit_enter(ir_dereference_array *ir) -{ - ir_hierarchical_visitor::visit_enter(ir); - - if (stack.back().state == UNKNOWN) - stack.back().state = handle_precision(ir->type, ir->precision()); - - return visit_continue; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit_enter(ir_texture *ir) -{ - ir_hierarchical_visitor::visit_enter(ir); - - /* The precision of the sample value depends on the precision of the - * sampler. - */ - stack.back().state = handle_precision(ir->type, - ir->sampler->precision()); - return visit_continue; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit_enter(ir_expression *ir) -{ - ir_hierarchical_visitor::visit_enter(ir); - - if (!can_lower_type(options, ir->type)) - stack.back().state = CANT_LOWER; - - /* Don't lower precision for derivative calculations */ - if (!options->LowerPrecisionDerivatives && - (ir->operation == ir_unop_dFdx || - ir->operation == ir_unop_dFdx_coarse || - ir->operation == ir_unop_dFdx_fine || - ir->operation == ir_unop_dFdy || - ir->operation == ir_unop_dFdy_coarse || - ir->operation == ir_unop_dFdy_fine)) { - stack.back().state = CANT_LOWER; - } - - return visit_continue; -} - -static unsigned -handle_call(ir_call *ir, const struct set *lowerable_rvalues) -{ - /* The intrinsic call is inside the wrapper imageLoad function that will - * be inlined. We have to handle both of them. - */ - if (ir->callee->intrinsic_id == ir_intrinsic_image_load || - (ir->callee->is_builtin() && - !strcmp(ir->callee_name(), "imageLoad"))) { - ir_rvalue *param = (ir_rvalue*)ir->actual_parameters.get_head(); - ir_variable *resource = param->variable_referenced(); - - assert(ir->callee->return_precision == GLSL_PRECISION_HIGH); - assert(resource->type->without_array()->is_image()); - - /* GLSL ES 3.20 requires that images have a precision modifier, but if - * you set one, it doesn't do anything, because all intrinsics are - * defined with highp. This seems to be a spec bug. - * - * In theory we could set the return value to mediump if the image - * format has a lower precision. This appears to be the most sensible - * thing to do. - */ - const struct util_format_description *desc = - util_format_description(resource->data.image_format); - int i = - util_format_get_first_non_void_channel(resource->data.image_format); - bool mediump; - - assert(i >= 0); - - if (desc->channel[i].pure_integer || - desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) - mediump = desc->channel[i].size <= 16; - else - mediump = desc->channel[i].size <= 10; /* unorm/snorm */ - - return mediump ? GLSL_PRECISION_MEDIUM : GLSL_PRECISION_HIGH; - } - - /* Return the declared precision for user-defined functions. */ - if (!ir->callee->is_builtin() || ir->callee->return_precision != GLSL_PRECISION_NONE) - return ir->callee->return_precision; - - /* Handle special calls. */ - if (ir->callee->is_builtin() && ir->actual_parameters.length()) { - ir_rvalue *param = (ir_rvalue*)ir->actual_parameters.get_head(); - ir_variable *var = param->variable_referenced(); - - /* Handle builtin wrappers around ir_texture opcodes. These wrappers will - * be inlined by lower_precision() if we return true here, so that we can - * get to ir_texture later and do proper lowering. - * - * We should lower the type of the return value if the sampler type - * uses lower precision. The function parameters don't matter. - */ - if (var && var->type->without_array()->is_sampler()) { - /* textureGatherOffsets always takes a highp array of constants. As - * per the discussion https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16547#note_1393704 - * trying to lower the precision results in segfault later on - * in the compiler as textureGatherOffsets will end up being passed - * a temp when its expecting a constant as required by the spec. - */ - if (!strcmp(ir->callee_name(), "textureGatherOffsets")) - return GLSL_PRECISION_HIGH; - - return var->data.precision; - } - } - - if (ir->callee->return_precision != GLSL_PRECISION_NONE) - return ir->callee->return_precision; - - if (/* Parameters are always implicitly promoted to highp: */ - !strcmp(ir->callee_name(), "floatBitsToInt") || - !strcmp(ir->callee_name(), "floatBitsToUint") || - !strcmp(ir->callee_name(), "intBitsToFloat") || - !strcmp(ir->callee_name(), "uintBitsToFloat")) - return GLSL_PRECISION_HIGH; - - /* Number of parameters to check if they are lowerable. */ - unsigned check_parameters = ir->actual_parameters.length(); - - /* "For the interpolateAt* functions, the call will return a precision - * qualification matching the precision of the interpolant argument to the - * function call." - * - * and - * - * "The precision qualification of the value returned from bitfieldExtract() - * matches the precision qualification of the call's input argument - * “value”." - */ - if (!strcmp(ir->callee_name(), "interpolateAtOffset") || - !strcmp(ir->callee_name(), "interpolateAtSample") || - !strcmp(ir->callee_name(), "bitfieldExtract")) { - check_parameters = 1; - } else if (!strcmp(ir->callee_name(), "bitfieldInsert")) { - /* "The precision qualification of the value returned from bitfieldInsert - * matches the highest precision qualification of the call's input - * arguments “base” and “insert”." - */ - check_parameters = 2; - } - - /* If the call is to a builtin, then the function won’t have a return - * precision and we should determine it from the precision of the arguments. - */ - foreach_in_list(ir_rvalue, param, &ir->actual_parameters) { - if (!check_parameters) - break; - - if (!param->as_constant() && - _mesa_set_search(lowerable_rvalues, param) == NULL) - return GLSL_PRECISION_HIGH; - - --check_parameters; - } - - return GLSL_PRECISION_MEDIUM; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit_leave(ir_call *ir) -{ - ir_hierarchical_visitor::visit_leave(ir); - - /* Special case for handling temporary variables generated by the compiler - * for function calls. If we assign to one of these using a function call - * that has a lowerable return type then we can assume the temporary - * variable should have a medium precision too. - */ - - /* Do nothing if the return type is void. */ - if (!ir->return_deref) - return visit_continue; - - ir_variable *var = ir->return_deref->variable_referenced(); - - assert(var->data.mode == ir_var_temporary); - - unsigned return_precision = handle_call(ir, lowerable_rvalues); - - can_lower_state lower_state = - handle_precision(var->type, return_precision); - - if (lower_state == SHOULD_LOWER) { - /* Function calls always write to a temporary return value in the caller, - * which has no other users. That temp may start with the precision of - * the function's signature, but if we're inferring the precision of an - * unqualified builtin operation (particularly the imageLoad overrides!) - * then we need to update it. - */ - var->data.precision = GLSL_PRECISION_MEDIUM; - } else { - var->data.precision = GLSL_PRECISION_HIGH; - } - - return visit_continue; -} - -ir_visitor_status -find_lowerable_rvalues_visitor::visit_leave(ir_assignment *ir) -{ - ir_hierarchical_visitor::visit_leave(ir); - - /* Special case for handling temporary variables generated by the compiler. - * If we assign to one of these using a lowered precision then we can assume - * the temporary variable should have a medium precision too. - */ - ir_variable *var = ir->lhs->variable_referenced(); - - if (var->data.mode == ir_var_temporary) { - if (_mesa_set_search(lowerable_rvalues, ir->rhs)) { - /* Only override the precision if this is the first assignment. For - * temporaries such as the ones generated for the ?: operator there - * can be multiple assignments with different precisions. This way we - * get the highest precision of all of the assignments. - */ - if (var->data.precision == GLSL_PRECISION_NONE) - var->data.precision = GLSL_PRECISION_MEDIUM; - } else if (!ir->rhs->as_constant()) { - var->data.precision = GLSL_PRECISION_HIGH; - } - } - - return visit_continue; -} - -void -find_lowerable_rvalues(const struct gl_shader_compiler_options *options, - exec_list *instructions, - struct set *result) -{ - find_lowerable_rvalues_visitor v(result, options); - - visit_list_elements(&v, instructions); - - assert(v.stack.empty()); -} - -static const glsl_type * -convert_type(bool up, const glsl_type *type) -{ - if (type->is_array()) { - return glsl_type::get_array_instance(convert_type(up, type->fields.array), - type->array_size(), - type->explicit_stride); - } - - glsl_base_type new_base_type; - - if (up) { - switch (type->base_type) { - case GLSL_TYPE_FLOAT16: - new_base_type = GLSL_TYPE_FLOAT; - break; - case GLSL_TYPE_INT16: - new_base_type = GLSL_TYPE_INT; - break; - case GLSL_TYPE_UINT16: - new_base_type = GLSL_TYPE_UINT; - break; - default: - unreachable("invalid type"); - return NULL; - } - } else { - switch (type->base_type) { - case GLSL_TYPE_FLOAT: - new_base_type = GLSL_TYPE_FLOAT16; - break; - case GLSL_TYPE_INT: - new_base_type = GLSL_TYPE_INT16; - break; - case GLSL_TYPE_UINT: - new_base_type = GLSL_TYPE_UINT16; - break; - default: - unreachable("invalid type"); - return NULL; - } - } - - return glsl_type::get_instance(new_base_type, - type->vector_elements, - type->matrix_columns, - type->explicit_stride, - type->interface_row_major); -} - -static const glsl_type * -lower_glsl_type(const glsl_type *type) -{ - return convert_type(false, type); -} - -static ir_rvalue * -convert_precision(bool up, ir_rvalue *ir) -{ - unsigned op; - - if (up) { - switch (ir->type->base_type) { - case GLSL_TYPE_FLOAT16: - op = ir_unop_f162f; - break; - case GLSL_TYPE_INT16: - op = ir_unop_i2i; - break; - case GLSL_TYPE_UINT16: - op = ir_unop_u2u; - break; - default: - unreachable("invalid type"); - return NULL; - } - } else { - switch (ir->type->base_type) { - case GLSL_TYPE_FLOAT: - op = ir_unop_f2fmp; - break; - case GLSL_TYPE_INT: - op = ir_unop_i2imp; - break; - case GLSL_TYPE_UINT: - op = ir_unop_u2ump; - break; - default: - unreachable("invalid type"); - return NULL; - } - } - - const glsl_type *desired_type = convert_type(up, ir->type); - void *mem_ctx = ralloc_parent(ir); - return new(mem_ctx) ir_expression(op, desired_type, ir, NULL); -} - -void -lower_precision_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - ir_rvalue *ir = *rvalue; - - if (ir == NULL) - return; - - if (ir->as_dereference()) { - if (!ir->type->is_boolean()) - *rvalue = convert_precision(false, ir); - } else if (ir->type->is_32bit()) { - ir->type = lower_glsl_type(ir->type); - - ir_constant *const_ir = ir->as_constant(); - - if (const_ir) { - ir_constant_data value; - - if (ir->type->base_type == GLSL_TYPE_FLOAT16) { - for (unsigned i = 0; i < ARRAY_SIZE(value.f16); i++) - value.f16[i] = _mesa_float_to_half(const_ir->value.f[i]); - } else if (ir->type->base_type == GLSL_TYPE_INT16) { - for (unsigned i = 0; i < ARRAY_SIZE(value.i16); i++) - value.i16[i] = const_ir->value.i[i]; - } else if (ir->type->base_type == GLSL_TYPE_UINT16) { - for (unsigned i = 0; i < ARRAY_SIZE(value.u16); i++) - value.u16[i] = const_ir->value.u[i]; - } else { - unreachable("invalid type"); - } - - const_ir->value = value; - } - } -} - -ir_visitor_status -lower_precision_visitor::visit_enter(ir_dereference_record *ir) -{ - /* We don’t want to lower the variable */ - return visit_continue_with_parent; -} - -ir_visitor_status -lower_precision_visitor::visit_enter(ir_dereference_array *ir) -{ - /* We don’t want to convert the array index or the variable. If the array - * index itself is lowerable that will be handled separately. - */ - return visit_continue_with_parent; -} - -ir_visitor_status -lower_precision_visitor::visit_enter(ir_call *ir) -{ - /* We don’t want to convert the arguments. These will be handled separately. - */ - return visit_continue_with_parent; -} - -ir_visitor_status -lower_precision_visitor::visit_enter(ir_texture *ir) -{ - /* We don’t want to convert the arguments. These will be handled separately. - */ - return visit_continue_with_parent; -} - -ir_visitor_status -lower_precision_visitor::visit_leave(ir_expression *ir) -{ - ir_rvalue_visitor::visit_leave(ir); - - /* If the expression is a conversion operation to or from bool then fix the - * operation. - */ - switch (ir->operation) { - case ir_unop_b2f: - ir->operation = ir_unop_b2f16; - break; - case ir_unop_f2b: - ir->operation = ir_unop_f162b; - break; - case ir_unop_b2i: - case ir_unop_i2b: - /* Nothing to do - they both support int16. */ - break; - default: - break; - } - - return visit_continue; -} - -void -find_precision_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - /* Checking the precision of rvalue can be lowered first throughout - * find_lowerable_rvalues_visitor. - * Once it found the precision of rvalue can be lowered, then we can - * add conversion f2fmp, etc. through lower_precision_visitor. - */ - if (*rvalue == NULL) - return; - - struct set_entry *entry = _mesa_set_search(lowerable_rvalues, *rvalue); - - if (!entry) - return; - - _mesa_set_remove(lowerable_rvalues, entry); - - /* If the entire expression is just a variable dereference then trying to - * lower it will just directly add pointless to and from conversions without - * any actual operation in-between. Although these will eventually get - * optimised out, avoiding generating them here also avoids breaking inout - * parameters to functions. - */ - if ((*rvalue)->as_dereference()) - return; - - lower_precision_visitor v; - - (*rvalue)->accept(&v); - v.handle_rvalue(rvalue); - - /* We don’t need to add the final conversion if the final type has been - * converted to bool - */ - if ((*rvalue)->type->base_type != GLSL_TYPE_BOOL) { - *rvalue = convert_precision(true, *rvalue); - } -} - -ir_visitor_status -find_precision_visitor::visit_enter(ir_call *ir) -{ - ir_rvalue_enter_visitor::visit_enter(ir); - - ir_variable *return_var = - ir->return_deref ? ir->return_deref->variable_referenced() : NULL; - - /* Don't do anything for image_load here. We have only changed the return - * value to mediump/lowp, so that following instructions can use reduced - * precision. - * - * The return value type of the intrinsic itself isn't changed here, but - * can be changed in NIR if all users use the *2*mp opcode. - */ - if (ir->callee->intrinsic_id == ir_intrinsic_image_load) - return visit_continue; - - /* If this is a call to a builtin and the find_lowerable_rvalues_visitor - * overrode the precision of the temporary return variable, then we can - * replace the builtin implementation with a lowered version. - */ - - if (!ir->callee->is_builtin() || - ir->callee->is_intrinsic() || - return_var == NULL || - (return_var->data.precision != GLSL_PRECISION_MEDIUM && - return_var->data.precision != GLSL_PRECISION_LOW)) - return visit_continue; - - ir->callee = map_builtin(ir->callee); - ir->generate_inline(ir); - ir->remove(); - - return visit_continue_with_parent; -} - -ir_function_signature * -find_precision_visitor::map_builtin(ir_function_signature *sig) -{ - if (lowered_builtins == NULL) { - lowered_builtins = _mesa_pointer_hash_table_create(NULL); - clone_ht =_mesa_pointer_hash_table_create(NULL); - lowered_builtin_mem_ctx = ralloc_context(NULL); - } else { - struct hash_entry *entry = _mesa_hash_table_search(lowered_builtins, sig); - if (entry) - return (ir_function_signature *) entry->data; - } - - ir_function_signature *lowered_sig = - sig->clone(lowered_builtin_mem_ctx, clone_ht); - - /* If we're lowering the output precision of the function, then also lower - * the precision of its inputs unless they have a specific qualifier. The - * exception is bitCount, which doesn't declare its arguments highp but - * should not be lowering the args to mediump just because the output is - * lowp. - */ - if (strcmp(sig->function_name(), "bitCount") != 0) { - foreach_in_list(ir_variable, param, &lowered_sig->parameters) { - /* Demote the precision of unqualified function arguments. */ - if (param->data.precision == GLSL_PRECISION_NONE) - param->data.precision = GLSL_PRECISION_MEDIUM; - } - } - - lower_precision(options, &lowered_sig->body); - - _mesa_hash_table_clear(clone_ht, NULL); - - _mesa_hash_table_insert(lowered_builtins, sig, lowered_sig); - - return lowered_sig; -} - -find_precision_visitor::find_precision_visitor(const struct gl_shader_compiler_options *options) - : lowerable_rvalues(_mesa_pointer_set_create(NULL)), - lowered_builtins(NULL), - clone_ht(NULL), - lowered_builtin_mem_ctx(NULL), - options(options) -{ -} - -find_precision_visitor::~find_precision_visitor() -{ - _mesa_set_destroy(lowerable_rvalues, NULL); - - if (lowered_builtins) { - _mesa_hash_table_destroy(lowered_builtins, NULL); - _mesa_hash_table_destroy(clone_ht, NULL); - ralloc_free(lowered_builtin_mem_ctx); - } -} - -/* Lowering opcodes to 16 bits is not enough for programs with control flow - * (and the ?: operator, which is represented by if-then-else in the IR), - * because temporary variables, which are used for passing values between - * code blocks, are not lowered, resulting in 32-bit phis in NIR. - * - * First change the variable types to 16 bits, then change all ir_dereference - * types to 16 bits. - */ -class lower_variables_visitor : public ir_rvalue_enter_visitor { -public: - lower_variables_visitor(const struct gl_shader_compiler_options *options) - : options(options) { - lower_vars = _mesa_pointer_set_create(NULL); - } - - virtual ~lower_variables_visitor() - { - _mesa_set_destroy(lower_vars, NULL); - } - - virtual ir_visitor_status visit(ir_variable *var); - virtual ir_visitor_status visit_enter(ir_assignment *ir); - virtual ir_visitor_status visit_enter(ir_return *ir); - virtual ir_visitor_status visit_enter(ir_call *ir); - virtual void handle_rvalue(ir_rvalue **rvalue); - - void fix_types_in_deref_chain(ir_dereference *ir); - void convert_split_assignment(ir_dereference *lhs, ir_rvalue *rhs, - bool insert_before); - - const struct gl_shader_compiler_options *options; - set *lower_vars; -}; - -static void -lower_constant(ir_constant *ir) -{ - if (ir->type->is_array()) { - for (int i = 0; i < ir->type->array_size(); i++) - lower_constant(ir->get_array_element(i)); - - ir->type = lower_glsl_type(ir->type); - return; - } - - ir->type = lower_glsl_type(ir->type); - ir_constant_data value; - - if (ir->type->base_type == GLSL_TYPE_FLOAT16) { - for (unsigned i = 0; i < ARRAY_SIZE(value.f16); i++) - value.f16[i] = _mesa_float_to_half(ir->value.f[i]); - } else if (ir->type->base_type == GLSL_TYPE_INT16) { - for (unsigned i = 0; i < ARRAY_SIZE(value.i16); i++) - value.i16[i] = ir->value.i[i]; - } else if (ir->type->base_type == GLSL_TYPE_UINT16) { - for (unsigned i = 0; i < ARRAY_SIZE(value.u16); i++) - value.u16[i] = ir->value.u[i]; - } else { - unreachable("invalid type"); - } - - ir->value = value; -} - -ir_visitor_status -lower_variables_visitor::visit(ir_variable *var) -{ - if ((var->data.mode != ir_var_temporary && - var->data.mode != ir_var_auto && - /* Lower uniforms but not UBOs. */ - (var->data.mode != ir_var_uniform || - var->is_in_buffer_block() || - !(options->LowerPrecisionFloat16Uniforms && - var->type->without_array()->base_type == GLSL_TYPE_FLOAT))) || - !var->type->without_array()->is_32bit() || - (var->data.precision != GLSL_PRECISION_MEDIUM && - var->data.precision != GLSL_PRECISION_LOW) || - !can_lower_type(options, var->type)) - return visit_continue; - - /* Lower constant initializers. */ - if (var->constant_value && - var->type == var->constant_value->type) { - if (!options->LowerPrecisionConstants) - return visit_continue; - var->constant_value = - var->constant_value->clone(ralloc_parent(var), NULL); - lower_constant(var->constant_value); - } - - if (var->constant_initializer && - var->type == var->constant_initializer->type) { - if (!options->LowerPrecisionConstants) - return visit_continue; - var->constant_initializer = - var->constant_initializer->clone(ralloc_parent(var), NULL); - lower_constant(var->constant_initializer); - } - - var->type = lower_glsl_type(var->type); - _mesa_set_add(lower_vars, var); - - return visit_continue; -} - -void -lower_variables_visitor::fix_types_in_deref_chain(ir_dereference *ir) -{ - assert(ir->type->without_array()->is_32bit()); - assert(_mesa_set_search(lower_vars, ir->variable_referenced())); - - /* Fix the type in the dereference node. */ - ir->type = lower_glsl_type(ir->type); - - /* If it's an array, fix the types in the whole dereference chain. */ - for (ir_dereference_array *deref_array = ir->as_dereference_array(); - deref_array; - deref_array = deref_array->array->as_dereference_array()) { - assert(deref_array->array->type->without_array()->is_32bit()); - deref_array->array->type = lower_glsl_type(deref_array->array->type); - } -} - -void -lower_variables_visitor::convert_split_assignment(ir_dereference *lhs, - ir_rvalue *rhs, - bool insert_before) -{ - void *mem_ctx = ralloc_parent(lhs); - - if (lhs->type->is_array()) { - for (unsigned i = 0; i < lhs->type->length; i++) { - ir_dereference *l, *r; - - l = new(mem_ctx) ir_dereference_array(lhs->clone(mem_ctx, NULL), - new(mem_ctx) ir_constant(i)); - r = new(mem_ctx) ir_dereference_array(rhs->clone(mem_ctx, NULL), - new(mem_ctx) ir_constant(i)); - convert_split_assignment(l, r, insert_before); - } - return; - } - - assert(lhs->type->is_16bit() || lhs->type->is_32bit()); - assert(rhs->type->is_16bit() || rhs->type->is_32bit()); - assert(lhs->type->is_16bit() != rhs->type->is_16bit()); - - ir_assignment *assign = - new(mem_ctx) ir_assignment(lhs, convert_precision(lhs->type->is_32bit(), rhs)); - - if (insert_before) - base_ir->insert_before(assign); - else - base_ir->insert_after(assign); -} - -ir_visitor_status -lower_variables_visitor::visit_enter(ir_assignment *ir) -{ - ir_dereference *lhs = ir->lhs; - ir_variable *var = lhs->variable_referenced(); - ir_dereference *rhs_deref = ir->rhs->as_dereference(); - ir_variable *rhs_var = rhs_deref ? rhs_deref->variable_referenced() : NULL; - ir_constant *rhs_const = ir->rhs->as_constant(); - - /* Legalize array assignments between lowered and non-lowered variables. */ - if (lhs->type->is_array() && - (rhs_var || rhs_const) && - (!rhs_var || - (var && - var->type->without_array()->is_16bit() != - rhs_var->type->without_array()->is_16bit())) && - (!rhs_const || - (var && - var->type->without_array()->is_16bit() && - rhs_const->type->without_array()->is_32bit()))) { - assert(ir->rhs->type->is_array()); - - /* Fix array assignments from lowered to non-lowered. */ - if (rhs_var && _mesa_set_search(lower_vars, rhs_var)) { - fix_types_in_deref_chain(rhs_deref); - /* Convert to 32 bits for LHS. */ - convert_split_assignment(lhs, rhs_deref, true); - ir->remove(); - return visit_continue; - } - - /* Fix array assignments from non-lowered to lowered. */ - if (var && - _mesa_set_search(lower_vars, var) && - ir->rhs->type->without_array()->is_32bit()) { - fix_types_in_deref_chain(lhs); - /* Convert to 16 bits for LHS. */ - convert_split_assignment(lhs, ir->rhs, true); - ir->remove(); - return visit_continue; - } - } - - /* Fix assignment types. */ - if (var && - _mesa_set_search(lower_vars, var)) { - /* Fix the LHS type. */ - if (lhs->type->without_array()->is_32bit()) - fix_types_in_deref_chain(lhs); - - /* Fix the RHS type if it's a lowered variable. */ - if (rhs_var && - _mesa_set_search(lower_vars, rhs_var) && - rhs_deref->type->without_array()->is_32bit()) - fix_types_in_deref_chain(rhs_deref); - - /* Fix the RHS type if it's a non-array expression. */ - if (ir->rhs->type->is_32bit()) { - ir_expression *expr = ir->rhs->as_expression(); - - /* Convert the RHS to the LHS type. */ - if (expr && - (expr->operation == ir_unop_f162f || - expr->operation == ir_unop_i2i || - expr->operation == ir_unop_u2u) && - expr->operands[0]->type->is_16bit()) { - /* If there is an "up" conversion, just remove it. - * This is optional. We could as well execute the else statement and - * let NIR eliminate the up+down conversions. - */ - ir->rhs = expr->operands[0]; - } else { - /* Add a "down" conversion operation to fix the type of RHS. */ - ir->rhs = convert_precision(false, ir->rhs); - } - } - } - - return ir_rvalue_enter_visitor::visit_enter(ir); -} - -ir_visitor_status -lower_variables_visitor::visit_enter(ir_return *ir) -{ - void *mem_ctx = ralloc_parent(ir); - - ir_dereference *deref = ir->value ? ir->value->as_dereference() : NULL; - if (deref) { - ir_variable *var = deref->variable_referenced(); - - /* Fix the type of the return value. */ - if (var && - _mesa_set_search(lower_vars, var) && - deref->type->without_array()->is_32bit()) { - /* Create a 32-bit temporary variable. */ - ir_variable *new_var = - new(mem_ctx) ir_variable(deref->type, "lowerp", ir_var_temporary); - base_ir->insert_before(new_var); - - /* Fix types in dereferences. */ - fix_types_in_deref_chain(deref); - - /* Convert to 32 bits for the return value. */ - convert_split_assignment(new(mem_ctx) ir_dereference_variable(new_var), - deref, true); - ir->value = new(mem_ctx) ir_dereference_variable(new_var); - } - } - - return ir_rvalue_enter_visitor::visit_enter(ir); -} - -void lower_variables_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - ir_rvalue *ir = *rvalue; - - if (in_assignee || ir == NULL) - return; - - ir_expression *expr = ir->as_expression(); - ir_dereference *expr_op0_deref = expr ? expr->operands[0]->as_dereference() : NULL; - - /* Remove f2fmp(float16). Same for int16 and uint16. */ - if (expr && - expr_op0_deref && - (expr->operation == ir_unop_f2fmp || - expr->operation == ir_unop_i2imp || - expr->operation == ir_unop_u2ump || - expr->operation == ir_unop_f2f16 || - expr->operation == ir_unop_i2i || - expr->operation == ir_unop_u2u) && - expr->type->without_array()->is_16bit() && - expr_op0_deref->type->without_array()->is_32bit() && - expr_op0_deref->variable_referenced() && - _mesa_set_search(lower_vars, expr_op0_deref->variable_referenced())) { - fix_types_in_deref_chain(expr_op0_deref); - - /* Remove f2fmp/i2imp/u2ump. */ - *rvalue = expr_op0_deref; - return; - } - - ir_dereference *deref = ir->as_dereference(); - - if (deref) { - ir_variable *var = deref->variable_referenced(); - - /* var can be NULL if we are dereferencing ir_constant. */ - if (var && - _mesa_set_search(lower_vars, var) && - deref->type->without_array()->is_32bit()) { - void *mem_ctx = ralloc_parent(ir); - - /* Create a 32-bit temporary variable. */ - ir_variable *new_var = - new(mem_ctx) ir_variable(deref->type, "lowerp", ir_var_temporary); - base_ir->insert_before(new_var); - - /* Fix types in dereferences. */ - fix_types_in_deref_chain(deref); - - /* Convert to 32 bits for the rvalue. */ - convert_split_assignment(new(mem_ctx) ir_dereference_variable(new_var), - deref, true); - *rvalue = new(mem_ctx) ir_dereference_variable(new_var); - } - } -} - -ir_visitor_status -lower_variables_visitor::visit_enter(ir_call *ir) -{ - void *mem_ctx = ralloc_parent(ir); - - /* We can't pass 16-bit variables as 32-bit inout/out parameters. */ - foreach_two_lists(formal_node, &ir->callee->parameters, - actual_node, &ir->actual_parameters) { - ir_dereference *param_deref = - ((ir_rvalue *)actual_node)->as_dereference(); - ir_variable *param = (ir_variable *)formal_node; - - if (!param_deref) - continue; - - ir_variable *var = param_deref->variable_referenced(); - - /* var can be NULL if we are dereferencing ir_constant. */ - if (var && - _mesa_set_search(lower_vars, var) && - param->type->without_array()->is_32bit()) { - fix_types_in_deref_chain(param_deref); - - /* Create a 32-bit temporary variable for the parameter. */ - ir_variable *new_var = - new(mem_ctx) ir_variable(param->type, "lowerp", ir_var_temporary); - base_ir->insert_before(new_var); - - /* Replace the parameter. */ - actual_node->replace_with(new(mem_ctx) ir_dereference_variable(new_var)); - - if (param->data.mode == ir_var_function_in || - param->data.mode == ir_var_function_inout) { - /* Convert to 32 bits for passing in. */ - convert_split_assignment(new(mem_ctx) ir_dereference_variable(new_var), - param_deref->clone(mem_ctx, NULL), true); - } - if (param->data.mode == ir_var_function_out || - param->data.mode == ir_var_function_inout) { - /* Convert to 16 bits after returning. */ - convert_split_assignment(param_deref, - new(mem_ctx) ir_dereference_variable(new_var), - false); - } - } - } - - /* Fix the type of return value dereferencies. */ - ir_dereference_variable *ret_deref = ir->return_deref; - ir_variable *ret_var = ret_deref ? ret_deref->variable_referenced() : NULL; - - if (ret_var && - _mesa_set_search(lower_vars, ret_var) && - ret_deref->type->without_array()->is_32bit()) { - /* Create a 32-bit temporary variable. */ - ir_variable *new_var = - new(mem_ctx) ir_variable(ir->callee->return_type, "lowerp", - ir_var_temporary); - base_ir->insert_before(new_var); - - /* Replace the return variable. */ - ret_deref->var = new_var; - - /* Convert to 16 bits after returning. */ - convert_split_assignment(new(mem_ctx) ir_dereference_variable(ret_var), - new(mem_ctx) ir_dereference_variable(new_var), - false); - } - - return ir_rvalue_enter_visitor::visit_enter(ir); -} - -} - -void -lower_precision(const struct gl_shader_compiler_options *options, - exec_list *instructions) -{ - find_precision_visitor v(options); - find_lowerable_rvalues(options, instructions, v.lowerable_rvalues); - visit_list_elements(&v, instructions); - - lower_variables_visitor vars(options); - visit_list_elements(&vars, instructions); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_subroutine.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_subroutine.cpp deleted file mode 100644 index 8729897..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_subroutine.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_subroutine.cpp - * - * lowers subroutines to an if ladder. - */ - -#include "../glsl_types.h" -#include "glsl_parser_extras.h" -#include "ir.h" -#include "ir_builder.h" - -using namespace ir_builder; -namespace { - -class lower_subroutine_visitor : public ir_hierarchical_visitor { -public: - lower_subroutine_visitor(struct _mesa_glsl_parse_state *state) - : state(state) - { - this->progress = false; - } - - ir_visitor_status visit_leave(ir_call *); - ir_call *call_clone(ir_call *call, ir_function_signature *callee); - bool progress; - struct _mesa_glsl_parse_state *state; -}; - -} - -bool -lower_subroutine(exec_list *instructions, struct _mesa_glsl_parse_state *state) -{ - lower_subroutine_visitor v(state); - visit_list_elements(&v, instructions); - return v.progress; -} - -ir_call * -lower_subroutine_visitor::call_clone(ir_call *call, ir_function_signature *callee) -{ - void *mem_ctx = ralloc_parent(call); - ir_dereference_variable *new_return_ref = NULL; - if (call->return_deref != NULL) - new_return_ref = call->return_deref->clone(mem_ctx, NULL); - - exec_list new_parameters; - - foreach_in_list(ir_instruction, ir, &call->actual_parameters) { - new_parameters.push_tail(ir->clone(mem_ctx, NULL)); - } - - return new(mem_ctx) ir_call(callee, new_return_ref, &new_parameters); -} - -ir_visitor_status -lower_subroutine_visitor::visit_leave(ir_call *ir) -{ - if (!ir->sub_var) - return visit_continue; - - void *mem_ctx = ralloc_parent(ir); - ir_if *last_branch = NULL; - - for (int s = this->state->num_subroutines - 1; s >= 0; s--) { - ir_rvalue *var; - ir_function *fn = this->state->subroutines[s]; - ir_constant *lc = new(mem_ctx)ir_constant(fn->subroutine_index); - - bool is_compat = false; - - for (int i = 0; i < fn->num_subroutine_types; i++) { - if (ir->sub_var->type->without_array() == fn->subroutine_types[i]) { - is_compat = true; - break; - } - } - if (is_compat == false) - continue; - - if (ir->array_idx != NULL) - var = ir->array_idx->clone(mem_ctx, NULL); - else - var = new(mem_ctx) ir_dereference_variable(ir->sub_var); - - ir_function_signature *sub_sig = - fn->exact_matching_signature(this->state, - &ir->actual_parameters); - - ir_call *new_call = call_clone(ir, sub_sig); - if (!last_branch) - last_branch = if_tree(equal(subr_to_int(var), lc), new_call); - else - last_branch = if_tree(equal(subr_to_int(var), lc), new_call, last_branch); - } - if (last_branch) - ir->insert_before(last_branch); - ir->remove(); - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp deleted file mode 100644 index 380ff9f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 lower_vec_index_to_cond_assign.cpp - * - * Turns indexing into vector types to a series of conditional moves - * of each channel's swizzle into a temporary. - * - * Most GPUs don't have a native way to do this operation, and this - * works around that. For drivers using both this pass and - * ir_vec_index_to_swizzle, there's a risk that this pass will happen - * before sufficient constant folding to find that the array index is - * constant. However, we hope that other optimization passes, - * particularly constant folding of assignment conditions and copy - * propagation, will result in the same code in the end. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_optimization.h" -#include "../glsl_types.h" -#include "ir_builder.h" -#include "../../mesa/program/prog_instruction.h" - -using namespace ir_builder; - -namespace { - -/** - * Visitor class for replacing expressions with ir_constant values. - */ - -class ir_vec_index_to_cond_assign_visitor : public ir_hierarchical_visitor { -public: - ir_vec_index_to_cond_assign_visitor() - : progress(false) - { - /* empty */ - } - - ir_rvalue *convert_vector_extract_to_cond_assign(ir_rvalue *ir); - - virtual ir_visitor_status visit_enter(ir_expression *); - virtual ir_visitor_status visit_enter(ir_swizzle *); - virtual ir_visitor_status visit_leave(ir_assignment *); - virtual ir_visitor_status visit_enter(ir_return *); - virtual ir_visitor_status visit_enter(ir_call *); - virtual ir_visitor_status visit_enter(ir_if *); - - bool progress; -}; - -} /* anonymous namespace */ - -ir_rvalue * -ir_vec_index_to_cond_assign_visitor::convert_vector_extract_to_cond_assign(ir_rvalue *ir) -{ - ir_expression *const expr = ir->as_expression(); - - if (expr == NULL) - return ir; - - if (expr->operation == ir_unop_interpolate_at_centroid || - expr->operation == ir_binop_interpolate_at_offset || - expr->operation == ir_binop_interpolate_at_sample) { - /* Lower interpolateAtXxx(some_vec[idx], ...) to - * interpolateAtXxx(some_vec, ...)[idx] before lowering to conditional - * assignments, to maintain the rule that the interpolant is an l-value - * referring to a (part of a) shader input. - * - * This is required when idx is dynamic (otherwise it gets lowered to - * a swizzle). - */ - ir_expression *const interpolant = expr->operands[0]->as_expression(); - if (!interpolant || interpolant->operation != ir_binop_vector_extract) - return ir; - - ir_rvalue *vec_input = interpolant->operands[0]; - ir_expression *const vec_interpolate = - new(base_ir) ir_expression(expr->operation, vec_input->type, - vec_input, expr->operands[1]); - - this->progress = true; - return new(base_ir) ir_expression(ir_binop_vector_extract, ir->type, - vec_interpolate, - interpolant->operands[1]); - } - - return ir; -} - -ir_visitor_status -ir_vec_index_to_cond_assign_visitor::visit_enter(ir_expression *ir) -{ - for (unsigned i = 0; i < ir->num_operands; i++) - ir->operands[i] = convert_vector_extract_to_cond_assign(ir->operands[i]); - - return visit_continue; -} - -ir_visitor_status -ir_vec_index_to_cond_assign_visitor::visit_enter(ir_swizzle *ir) -{ - /* Can't be hit from normal GLSL, since you can't swizzle a scalar (which - * the result of indexing a vector is. But maybe at some point we'll end up - * using swizzling of scalars for vector construction. - */ - ir->val = convert_vector_extract_to_cond_assign(ir->val); - - return visit_continue; -} - -ir_visitor_status -ir_vec_index_to_cond_assign_visitor::visit_leave(ir_assignment *ir) -{ - ir->rhs = convert_vector_extract_to_cond_assign(ir->rhs); - - return visit_continue; -} - -ir_visitor_status -ir_vec_index_to_cond_assign_visitor::visit_enter(ir_call *ir) -{ - foreach_in_list_safe(ir_rvalue, param, &ir->actual_parameters) { - ir_rvalue *new_param = convert_vector_extract_to_cond_assign(param); - - if (new_param != param) { - param->replace_with(new_param); - } - } - - return visit_continue; -} - -ir_visitor_status -ir_vec_index_to_cond_assign_visitor::visit_enter(ir_return *ir) -{ - if (ir->value) - ir->value = convert_vector_extract_to_cond_assign(ir->value); - - return visit_continue; -} - -ir_visitor_status -ir_vec_index_to_cond_assign_visitor::visit_enter(ir_if *ir) -{ - ir->condition = convert_vector_extract_to_cond_assign(ir->condition); - - return visit_continue; -} - -bool -do_vec_index_to_cond_assign(exec_list *instructions) -{ - ir_vec_index_to_cond_assign_visitor v; - - visit_list_elements(&v, instructions); - - return v.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_vector_derefs.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_vector_derefs.cpp deleted file mode 100644 index c921676..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/lower_vector_derefs.cpp +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include "ir.h" -#include "ir_builder.h" -#include "ir_rvalue_visitor.h" -#include "ir_optimization.h" -#include "../../mesa/main/shader_types.h" - -using namespace ir_builder; - -namespace { - -class vector_deref_visitor : public ir_rvalue_enter_visitor { -public: - vector_deref_visitor(void *mem_ctx, gl_shader_stage shader_stage) - : progress(false), shader_stage(shader_stage), - factory(&factory_instructions, mem_ctx) - { - } - - virtual ~vector_deref_visitor() - { - } - - virtual void handle_rvalue(ir_rvalue **rv); - virtual ir_visitor_status visit_enter(ir_assignment *ir); - - bool progress; - gl_shader_stage shader_stage; - exec_list factory_instructions; - ir_factory factory; -}; - -} /* anonymous namespace */ - -ir_visitor_status -vector_deref_visitor::visit_enter(ir_assignment *ir) -{ - if (!ir->lhs || ir->lhs->ir_type != ir_type_dereference_array) - return ir_rvalue_enter_visitor::visit_enter(ir); - - ir_dereference_array *const deref = (ir_dereference_array *) ir->lhs; - if (!deref->array->type->is_vector()) - return ir_rvalue_enter_visitor::visit_enter(ir); - - /* SSBOs and shared variables are backed by memory and may be accessed by - * multiple threads simultaneously. It's not safe to lower a single - * component store to a load-vec-store because it may race with writes to - * other components. - */ - ir_variable *var = deref->variable_referenced(); - if (var->data.mode == ir_var_shader_storage || - var->data.mode == ir_var_shader_shared) - return ir_rvalue_enter_visitor::visit_enter(ir); - - ir_rvalue *const new_lhs = deref->array; - - void *mem_ctx = ralloc_parent(ir); - ir_constant *old_index_constant = - deref->array_index->constant_expression_value(mem_ctx); - if (!old_index_constant) { - if (shader_stage == MESA_SHADER_TESS_CTRL && - deref->variable_referenced()->data.mode == ir_var_shader_out) { - /* Tessellation control shader outputs act as if they have memory - * backing them and if we have writes from multiple threads - * targeting the same vec4 (this can happen for patch outputs), the - * load-vec-store pattern of ir_triop_vector_insert doesn't work. - * Instead, we have to lower to a series of conditional write-masked - * assignments. - */ - ir_variable *const src_temp = - factory.make_temp(ir->rhs->type, "scalar_tmp"); - - /* The newly created variable declaration goes before the assignment - * because we're going to set it as the new LHS. - */ - ir->insert_before(factory.instructions); - ir->set_lhs(new(mem_ctx) ir_dereference_variable(src_temp)); - - ir_variable *const arr_index = - factory.make_temp(deref->array_index->type, "index_tmp"); - factory.emit(assign(arr_index, deref->array_index)); - - for (unsigned i = 0; i < new_lhs->type->vector_elements; i++) { - ir_constant *const cmp_index = - ir_constant::zero(factory.mem_ctx, deref->array_index->type); - cmp_index->value.u[0] = i; - - ir_rvalue *const lhs_clone = new_lhs->clone(factory.mem_ctx, NULL); - ir_dereference_variable *const src_temp_deref = - new(mem_ctx) ir_dereference_variable(src_temp); - - if (new_lhs->ir_type != ir_type_swizzle) { - assert(lhs_clone->as_dereference()); - - factory.emit(if_tree(equal(arr_index, cmp_index), - assign(lhs_clone->as_dereference(), - src_temp_deref, - WRITEMASK_X << i))); - } else { - ir_assignment *cond_assign = - new(mem_ctx) ir_assignment(swizzle(lhs_clone, i, 1), - src_temp_deref); - - factory.emit(if_tree(equal(arr_index, cmp_index), cond_assign)); - } - } - ir->insert_after(factory.instructions); - } else { - ir->rhs = new(mem_ctx) ir_expression(ir_triop_vector_insert, - new_lhs->type, - new_lhs->clone(mem_ctx, NULL), - ir->rhs, - deref->array_index); - ir->write_mask = (1 << new_lhs->type->vector_elements) - 1; - ir->set_lhs(new_lhs); - } - } else { - unsigned index = old_index_constant->get_uint_component(0); - - if (index >= new_lhs->type->vector_elements) { - /* Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 spec says: - * - * In the subsections described above for array, vector, matrix and - * structure accesses, any out-of-bounds access produced undefined - * behavior.... Out-of-bounds writes may be discarded or overwrite - * other variables of the active program. - */ - ir->remove(); - return visit_continue; - } - - if (new_lhs->ir_type != ir_type_swizzle) { - ir->set_lhs(new_lhs); - ir->write_mask = 1 << index; - } else { - /* If the "new" LHS is a swizzle, use the set_lhs helper to instead - * swizzle the RHS. - */ - unsigned component[1] = { index }; - ir->set_lhs(new(mem_ctx) ir_swizzle(new_lhs, component, 1)); - } - } - - return ir_rvalue_enter_visitor::visit_enter(ir); -} - -void -vector_deref_visitor::handle_rvalue(ir_rvalue **rv) -{ - if (*rv == NULL || (*rv)->ir_type != ir_type_dereference_array) - return; - - ir_dereference_array *const deref = (ir_dereference_array *) *rv; - if (!deref->array->type->is_vector()) - return; - - /* Back-ends need to be able to handle derefs on vectors for SSBOs, UBOs, - * and shared variables. They have to handle it for writes anyway so we - * may as well require it for reads. - */ - ir_variable *var = deref->variable_referenced(); - if (var && (var->data.mode == ir_var_shader_storage || - var->data.mode == ir_var_shader_shared || - (var->data.mode == ir_var_uniform && - var->get_interface_type()))) - return; - - void *mem_ctx = ralloc_parent(deref); - *rv = new(mem_ctx) ir_expression(ir_binop_vector_extract, - deref->array, - deref->array_index); -} - -bool -lower_vector_derefs(gl_linked_shader *shader) -{ - vector_deref_visitor v(shader->ir, shader->Stage); - - visit_list_elements(&v, shader->ir); - - return v.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/meson.build b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/meson.build deleted file mode 100644 index 003547f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/meson.build +++ /dev/null @@ -1,288 +0,0 @@ -# Copyright © 2017 Intel Corporation - -# 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 THE -# AUTHORS OR COPYRIGHT HOLDERS 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. - -libglsl_util = static_library( - 'glsl_util', - glsl_util_files, - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - dependencies : dep_valgrind, - gnu_symbol_visibility : 'hidden', - build_by_default : false, -) - -subdir('glcpp') - -bison_command = [] -if yacc_is_bison - bison_command = [ - prog_bison, '-o', '@OUTPUT0@', '-p', '_mesa_glsl_', '--defines=@OUTPUT1@', - '@INPUT@', - ] -else - bison_command = [ - prog_bison, '-o', '@OUTPUT0@', '-p', '_mesa_glsl_', '-H', '@OUTPUT1@', - '@INPUT@', - ] -endif - -glsl_parser = custom_target( - 'glsl_parser', - input : 'glsl_parser.yy', - output : ['glsl_parser.cpp', 'glsl_parser.h'], - command : bison_command -) - -glsl_lexer_cpp = custom_target( - 'glsl_lexer_cpp', - input : 'glsl_lexer.ll', - output : 'glsl_lexer.cpp', - command : [prog_flex_cpp, '-o', '@OUTPUT@', '@INPUT@'], -) - -ir_expression_operation_constant_h = custom_target( - 'ir_expression_operation_constant.h', - input : 'ir_expression_operation.py', - output : 'ir_expression_operation_constant.h', - command : [prog_python, '@INPUT@', 'constant'], - capture : true, -) - -ir_expression_operation_strings_h = custom_target( - 'ir_expression_operation_strings.h', - input : 'ir_expression_operation.py', - output : 'ir_expression_operation_strings.h', - command : [prog_python, '@INPUT@', 'strings'], - capture : true, -) - -float64_glsl_h = custom_target( - 'float64_glsl.h', - input : [files_xxd, 'float64.glsl'], - output : 'float64_glsl.h', - command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'float64_source'], -) - -cross_platform_settings_piece_all_h = custom_target( - 'cross_platform_settings_piece_all.h', - input : [files_xxd, 'CrossPlatformSettings_piece_all.glsl'], - output : 'cross_platform_settings_piece_all.h', - command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'cross_platform_settings_piece_all_header'], -) - -bc1_glsl_h = custom_target( - 'bc1_glsl.h', - input : [files_xxd, 'bc1.glsl'], - output : 'bc1_glsl.h', - command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'bc1_source'], -) - -bc4_glsl_h = custom_target( - 'bc4_glsl.h', - input : [files_xxd, 'bc4.glsl'], - output : 'bc4_glsl.h', - command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'bc4_source'], -) - -etc2_rgba_stitch_glsl_h = custom_target( - 'etc2_rgba_stitch_glsl.h', - input : [files_xxd, 'etc2_rgba_stitch.glsl'], - output : 'etc2_rgba_stitch_glsl.h', - command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'etc2_rgba_stitch_source'], -) - -astc_glsl_h = custom_target( - 'astc_glsl.h', - input : [files_xxd, 'astc_decoder.glsl'], - output : 'astc_glsl.h', - command : [prog_python, '@INPUT@', '@OUTPUT@', '-n', 'astc_source'], -) - -files_libglsl = files( - 'ast.h', - 'ast_array_index.cpp', - 'ast_expr.cpp', - 'ast_function.cpp', - 'ast_to_hir.cpp', - 'ast_type.cpp', - 'builtin_functions.cpp', - 'builtin_functions.h', - 'builtin_int64.h', - 'builtin_types.cpp', - 'builtin_variables.cpp', - 'generate_ir.cpp', - 'gl_nir_lower_atomics.c', - 'gl_nir_lower_images.c', - 'gl_nir_lower_buffers.c', - 'gl_nir_lower_packed_varyings.c', - 'gl_nir_lower_samplers.c', - 'gl_nir_lower_samplers_as_deref.c', - 'gl_nir_lower_xfb_varying.c', - 'gl_nir_link_atomics.c', - 'gl_nir_link_uniform_blocks.c', - 'gl_nir_link_uniform_initializers.c', - 'gl_nir_link_uniforms.c', - 'gl_nir_link_varyings.c', - 'gl_nir_link_varyings.h', - 'gl_nir_link_xfb.c', - 'gl_nir_linker.c', - 'gl_nir_linker.h', - 'gl_nir_opt_dead_builtin_varyings.c', - 'gl_nir.h', - 'glsl_parser_extras.cpp', - 'glsl_parser_extras.h', - 'glsl_symbol_table.cpp', - 'glsl_symbol_table.h', - 'glsl_to_nir.cpp', - 'glsl_to_nir.h', - 'hir_field_selection.cpp', - 'ir_array_refcount.cpp', - 'ir_array_refcount.h', - 'ir_basic_block.cpp', - 'ir_basic_block.h', - 'ir_builder.cpp', - 'ir_builder.h', - 'ir_clone.cpp', - 'ir_constant_expression.cpp', - 'ir.cpp', - 'ir.h', - 'ir_equals.cpp', - 'ir_expression_flattening.cpp', - 'ir_expression_flattening.h', - 'ir_function_can_inline.cpp', - 'ir_function_detect_recursion.cpp', - 'ir_function_inlining.h', - 'ir_function.cpp', - 'ir_hierarchical_visitor.cpp', - 'ir_hierarchical_visitor.h', - 'ir_hv_accept.cpp', - 'ir_optimization.h', - 'ir_print_visitor.cpp', - 'ir_print_visitor.h', - 'ir_reader.cpp', - 'ir_reader.h', - 'ir_rvalue_visitor.cpp', - 'ir_rvalue_visitor.h', - 'ir_uniform.h', - 'ir_validate.cpp', - 'ir_variable_refcount.cpp', - 'ir_variable_refcount.h', - 'ir_visitor.h', - 'linker.cpp', - 'linker.h', - 'linker_util.h', - 'linker_util.cpp', - 'link_functions.cpp', - 'link_interface_blocks.cpp', - 'link_uniforms.cpp', - 'link_uniform_block_active_visitor.cpp', - 'link_uniform_block_active_visitor.h', - 'link_uniform_blocks.cpp', - 'link_varyings.cpp', - 'link_varyings.h', - 'list.h', - 'lower_blend_equation_advanced.cpp', - 'lower_builtins.cpp', - 'lower_discard.cpp', - 'lower_discard_flow.cpp', - 'lower_distance.cpp', - 'lower_instructions.cpp', - 'lower_int64.cpp', - 'lower_jumps.cpp', - 'lower_mat_op_to_vec.cpp', - 'lower_named_interface_blocks.cpp', - 'lower_packing_builtins.cpp', - 'lower_precision.cpp', - 'lower_subroutine.cpp', - 'lower_vec_index_to_cond_assign.cpp', - 'lower_vector_derefs.cpp', - 'opt_algebraic.cpp', - 'opt_dead_builtin_variables.cpp', - 'opt_dead_code.cpp', - 'opt_dead_code_local.cpp', - 'opt_dead_functions.cpp', - 'opt_flatten_nested_if_blocks.cpp', - 'opt_flip_matrices.cpp', - 'opt_function_inlining.cpp', - 'opt_if_simplification.cpp', - 'opt_minmax.cpp', - 'opt_rebalance_tree.cpp', - 'opt_tree_grafting.cpp', - 'program.h', - 'propagate_invariance.cpp', - 's_expression.cpp', - 's_expression.h', - 'string_to_uint_map.cpp', - 'string_to_uint_map.h', - 'serialize.cpp', - 'serialize.h', - 'shader_cache.cpp', - 'shader_cache.h', -) - -files_libglsl_standalone = files( - 'ir_builder_print_visitor.cpp', - 'ir_builder_print_visitor.h', - 'opt_add_neg_to_sub.h', - 'standalone_scaffolding.cpp', - 'standalone_scaffolding.h', - 'standalone.cpp', - 'standalone.h', -) - -libglsl = static_library( - 'glsl', - [files_libglsl, glsl_parser, glsl_lexer_cpp, ir_expression_operation_h, - ir_expression_operation_strings_h, ir_expression_operation_constant_h, - float64_glsl_h, cross_platform_settings_piece_all_h, bc1_glsl_h, bc4_glsl_h, - etc2_rgba_stitch_glsl_h, astc_glsl_h], - c_args : [c_msvc_compat_args, no_override_init_args], - cpp_args : [cpp_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - link_with : libglcpp, - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_compiler], - dependencies : idep_nir, - build_by_default : false, -) - -libglsl_standalone = static_library( - 'glsl_standalone', - [files_libglsl_standalone, ir_expression_operation_h], - c_args : [c_msvc_compat_args, no_override_init_args], - cpp_args : [cpp_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - link_with : [libglsl, libglsl_util, libglcpp_standalone], - dependencies : [idep_mesautil, idep_getopt], - build_by_default : false, -) - -glsl_compiler = executable( - 'glsl_compiler', - 'main.cpp', - c_args : [c_msvc_compat_args, no_override_init_args], - cpp_args : [cpp_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - dependencies : [dep_clock, dep_thread, idep_getopt, idep_mesautil], - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - link_with : [libglsl_standalone], - build_by_default : with_tools.contains('glsl'), - install : with_tools.contains('glsl'), -) - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_add_neg_to_sub.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_add_neg_to_sub.h deleted file mode 100644 index 2ebfc45..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_add_neg_to_sub.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef OPT_ADD_NEG_TO_SUB_H -#define OPT_ADD_NEG_TO_SUB_H - -#include "ir.h" -#include "ir_hierarchical_visitor.h" - -class add_neg_to_sub_visitor : public ir_hierarchical_visitor { -public: - add_neg_to_sub_visitor() - { - /* empty */ - } - - ir_visitor_status visit_leave(ir_expression *ir) - { - if (ir->operation != ir_binop_add) - return visit_continue; - - for (unsigned i = 0; i < 2; i++) { - ir_expression *const op = ir->operands[i]->as_expression(); - - if (op != NULL && op->operation == ir_unop_neg) { - ir->operation = ir_binop_sub; - - /* This ensures that -a + b becomes b - a. */ - if (i == 0) - ir->operands[0] = ir->operands[1]; - - ir->operands[1] = op->operands[0]; - break; - } - } - - return visit_continue; - } -}; - -#endif /* OPT_ADD_NEG_TO_SUB_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_algebraic.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_algebraic.cpp deleted file mode 100644 index 4fe3553..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_algebraic.cpp +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_algebraic.cpp - * - * Takes advantage of association, commutivity, and other algebraic - * properties to simplify expressions. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_rvalue_visitor.h" -#include "ir_optimization.h" -#include "ir_builder.h" -#include "../glsl_types.h" -#include "../../mesa/main/consts_exts.h" - -using namespace ir_builder; - -namespace { - -/** - * Visitor class for replacing expressions with ir_constant values. - */ - -class ir_algebraic_visitor : public ir_rvalue_visitor { -public: - ir_algebraic_visitor(bool native_integers, - const struct gl_shader_compiler_options *options) - : options(options) - { - this->progress = false; - this->mem_ctx = NULL; - this->native_integers = native_integers; - } - - virtual ~ir_algebraic_visitor() - { - } - - virtual ir_visitor_status visit_enter(ir_assignment *ir); - - ir_rvalue *handle_expression(ir_expression *ir); - void handle_rvalue(ir_rvalue **rvalue); - bool reassociate_constant(ir_expression *ir1, - int const_index, - ir_constant *constant, - ir_expression *ir2); - void reassociate_operands(ir_expression *ir1, - int op1, - ir_expression *ir2, - int op2); - ir_rvalue *swizzle_if_required(ir_expression *expr, - ir_rvalue *operand); - - const struct gl_shader_compiler_options *options; - void *mem_ctx; - - bool native_integers; - bool progress; -}; - -} /* unnamed namespace */ - -ir_visitor_status -ir_algebraic_visitor::visit_enter(ir_assignment *ir) -{ - ir_variable *var = ir->lhs->variable_referenced(); - if (var->data.invariant || var->data.precise) { - /* If we're assigning to an invariant or precise variable, just bail. - * Most of the algebraic optimizations aren't precision-safe. - * - * FINISHME: Find out which optimizations are precision-safe and enable - * then only for invariant or precise trees. - */ - return visit_continue_with_parent; - } else { - return visit_continue; - } -} - -static inline bool -is_valid_vec_const(ir_constant *ir) -{ - if (ir == NULL) - return false; - - if (!ir->type->is_scalar() && !ir->type->is_vector()) - return false; - - return true; -} - -static inline bool -is_less_than_one(ir_constant *ir) -{ - assert(ir->type->is_float()); - - if (!is_valid_vec_const(ir)) - return false; - - unsigned component = 0; - for (int c = 0; c < ir->type->vector_elements; c++) { - if (ir->get_float_component(c) < 1.0f) - component++; - } - - return (component == ir->type->vector_elements); -} - -static inline bool -is_greater_than_zero(ir_constant *ir) -{ - assert(ir->type->is_float()); - - if (!is_valid_vec_const(ir)) - return false; - - unsigned component = 0; - for (int c = 0; c < ir->type->vector_elements; c++) { - if (ir->get_float_component(c) > 0.0f) - component++; - } - - return (component == ir->type->vector_elements); -} - -static void -update_type(ir_expression *ir) -{ - if (ir->operands[0]->type->is_vector()) - ir->type = ir->operands[0]->type; - else - ir->type = ir->operands[1]->type; -} - -void -ir_algebraic_visitor::reassociate_operands(ir_expression *ir1, - int op1, - ir_expression *ir2, - int op2) -{ - ir_rvalue *temp = ir2->operands[op2]; - ir2->operands[op2] = ir1->operands[op1]; - ir1->operands[op1] = temp; - - /* Update the type of ir2. The type of ir1 won't have changed -- - * base types matched, and at least one of the operands of the 2 - * binops is still a vector if any of them were. - */ - update_type(ir2); - - this->progress = true; -} - -/** - * Reassociates a constant down a tree of adds or multiplies. - * - * Consider (2 * (a * (b * 0.5))). We want to end up with a * b. - */ -bool -ir_algebraic_visitor::reassociate_constant(ir_expression *ir1, int const_index, - ir_constant *constant, - ir_expression *ir2) -{ - if (!ir2 || ir1->operation != ir2->operation) - return false; - - /* Don't want to even think about matrices. */ - if (ir1->operands[0]->type->is_matrix() || - ir1->operands[1]->type->is_matrix() || - ir2->operands[0]->type->is_matrix() || - ir2->operands[1]->type->is_matrix()) - return false; - - void *mem_ctx = ralloc_parent(ir2); - - ir_constant *ir2_const[2]; - ir2_const[0] = ir2->operands[0]->constant_expression_value(mem_ctx); - ir2_const[1] = ir2->operands[1]->constant_expression_value(mem_ctx); - - if (ir2_const[0] && ir2_const[1]) - return false; - - if (ir2_const[0]) { - reassociate_operands(ir1, const_index, ir2, 1); - return true; - } else if (ir2_const[1]) { - reassociate_operands(ir1, const_index, ir2, 0); - return true; - } - - if (reassociate_constant(ir1, const_index, constant, - ir2->operands[0]->as_expression())) { - update_type(ir2); - return true; - } - - if (reassociate_constant(ir1, const_index, constant, - ir2->operands[1]->as_expression())) { - update_type(ir2); - return true; - } - - return false; -} - -/* When eliminating an expression and just returning one of its operands, - * we may need to swizzle that operand out to a vector if the expression was - * vector type. - */ -ir_rvalue * -ir_algebraic_visitor::swizzle_if_required(ir_expression *expr, - ir_rvalue *operand) -{ - if (expr->type->is_vector() && operand->type->is_scalar()) { - return new(mem_ctx) ir_swizzle(operand, 0, 0, 0, 0, - expr->type->vector_elements); - } else - return operand; -} - -ir_rvalue * -ir_algebraic_visitor::handle_expression(ir_expression *ir) -{ - ir_constant *op_const[4] = {NULL, NULL, NULL, NULL}; - ir_expression *op_expr[4] = {NULL, NULL, NULL, NULL}; - - if (ir->operation == ir_binop_mul && - ir->operands[0]->type->is_matrix() && - ir->operands[1]->type->is_vector()) { - ir_expression *matrix_mul = ir->operands[0]->as_expression(); - - if (matrix_mul && matrix_mul->operation == ir_binop_mul && - matrix_mul->operands[0]->type->is_matrix() && - matrix_mul->operands[1]->type->is_matrix()) { - - return mul(matrix_mul->operands[0], - mul(matrix_mul->operands[1], ir->operands[1])); - } - } - - assert(ir->num_operands <= 4); - for (unsigned i = 0; i < ir->num_operands; i++) { - if (ir->operands[i]->type->is_matrix()) - return ir; - - op_const[i] = - ir->operands[i]->constant_expression_value(ralloc_parent(ir)); - op_expr[i] = ir->operands[i]->as_expression(); - } - - if (this->mem_ctx == NULL) - this->mem_ctx = ralloc_parent(ir); - - switch (ir->operation) { - case ir_binop_add: - /* Reassociate addition of constants so that we can do constant - * folding. - */ - if (op_const[0] && !op_const[1]) - reassociate_constant(ir, 0, op_const[0], op_expr[1]); - if (op_const[1] && !op_const[0]) - reassociate_constant(ir, 1, op_const[1], op_expr[0]); - - break; - - case ir_binop_mul: - /* Reassociate multiplication of constants so that we can do - * constant folding. - */ - if (op_const[0] && !op_const[1]) - reassociate_constant(ir, 0, op_const[0], op_expr[1]); - if (op_const[1] && !op_const[0]) - reassociate_constant(ir, 1, op_const[1], op_expr[0]); - break; - - case ir_binop_min: - case ir_binop_max: - if (!ir->type->is_float()) - break; - - /* Replace min(max) operations and its commutative combinations with - * a saturate operation - */ - for (int op = 0; op < 2; op++) { - ir_expression *inner_expr = op_expr[op]; - ir_constant *outer_const = op_const[1 - op]; - ir_expression_operation op_cond = (ir->operation == ir_binop_max) ? - ir_binop_min : ir_binop_max; - - if (!inner_expr || !outer_const || (inner_expr->operation != op_cond)) - continue; - - /* One of these has to be a constant */ - if (!inner_expr->operands[0]->as_constant() && - !inner_expr->operands[1]->as_constant()) - break; - - /* Found a min(max) combination. Now try to see if its operands - * meet our conditions that we can do just a single saturate operation - */ - for (int minmax_op = 0; minmax_op < 2; minmax_op++) { - ir_rvalue *x = inner_expr->operands[minmax_op]; - ir_rvalue *y = inner_expr->operands[1 - minmax_op]; - - ir_constant *inner_const = y->as_constant(); - if (!inner_const) - continue; - - /* min(max(x, 0.0), 1.0) is sat(x) */ - if (ir->operation == ir_binop_min && - inner_const->is_zero() && - outer_const->is_one()) - return saturate(x); - - /* max(min(x, 1.0), 0.0) is sat(x) */ - if (ir->operation == ir_binop_max && - inner_const->is_one() && - outer_const->is_zero()) - return saturate(x); - - /* min(max(x, 0.0), b) where b < 1.0 is sat(min(x, b)) */ - if (ir->operation == ir_binop_min && - inner_const->is_zero() && - is_less_than_one(outer_const)) - return saturate(expr(ir_binop_min, x, outer_const)); - - /* max(min(x, b), 0.0) where b < 1.0 is sat(min(x, b)) */ - if (ir->operation == ir_binop_max && - is_less_than_one(inner_const) && - outer_const->is_zero()) - return saturate(expr(ir_binop_min, x, inner_const)); - - /* max(min(x, 1.0), b) where b > 0.0 is sat(max(x, b)) */ - if (ir->operation == ir_binop_max && - inner_const->is_one() && - is_greater_than_zero(outer_const)) - return saturate(expr(ir_binop_max, x, outer_const)); - - /* min(max(x, b), 1.0) where b > 0.0 is sat(max(x, b)) */ - if (ir->operation == ir_binop_min && - is_greater_than_zero(inner_const) && - outer_const->is_one()) - return saturate(expr(ir_binop_max, x, inner_const)); - } - } - - break; - - /* Remove interpolateAt* instructions for demoted inputs. They are - * assigned a constant expression to facilitate this. - */ - case ir_unop_interpolate_at_centroid: - case ir_binop_interpolate_at_offset: - case ir_binop_interpolate_at_sample: - if (op_const[0]) - return ir->operands[0]; - break; - - default: - break; - } - - return ir; -} - -void -ir_algebraic_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - if (!*rvalue) - return; - - ir_expression *expr = (*rvalue)->as_expression(); - if (!expr || expr->operation == ir_quadop_vector) - return; - - ir_rvalue *new_rvalue = handle_expression(expr); - if (new_rvalue == *rvalue) - return; - - /* If the expr used to be some vec OP scalar returning a vector, and the - * optimization gave us back a scalar, we still need to turn it into a - * vector. - */ - *rvalue = swizzle_if_required(expr, new_rvalue); - - this->progress = true; -} - -bool -do_algebraic(exec_list *instructions, bool native_integers, - const struct gl_shader_compiler_options *options) -{ - ir_algebraic_visitor v(native_integers, options); - - visit_list_elements(&v, instructions); - - return v.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp deleted file mode 100644 index 13515a5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_optimization.h" - -/** - * Pre-linking, optimize unused built-in variables - * - * Uniforms, constants, system values, inputs (vertex shader only), and - * outputs (fragment shader only) that are not used can be removed. - */ -void -optimize_dead_builtin_variables(exec_list *instructions, - enum ir_variable_mode other) -{ - foreach_in_list_safe(ir_variable, var, instructions) { - if (var->ir_type != ir_type_variable || var->data.used) - continue; - - if (var->data.mode != ir_var_uniform - && var->data.mode != ir_var_auto - && var->data.mode != ir_var_system_value - && var->data.mode != other) - continue; - - /* So that linker rules can later be enforced, we cannot elimate - * variables that were redeclared in the shader code. - */ - if ((var->data.mode == other || var->data.mode == ir_var_system_value) - && var->data.how_declared != ir_var_declared_implicitly) - continue; - - if (!is_gl_identifier(var->name)) - continue; - - /* gl_ModelViewProjectionMatrix and gl_Vertex are special because they - * are used by ftransform. No other built-in variable is used by a - * built-in function. The forward declarations of these variables in - * the built-in function shader does not have the "state slot" - * information, so removing these variables from the user shader will - * cause problems later. - * - * Matrix uniforms with "Transpose" are not eliminated because there's - * an optimization pass that can turn references to the regular matrix - * into references to the transpose matrix. Eliminating the transpose - * matrix would cause that pass to generate references to undeclareds - * variables (thank you, ir_validate). - * - * It doesn't seem worth the effort to track when the transpose could be - * eliminated (i.e., when the non-transpose was eliminated). - */ - if (strcmp(var->name, "gl_ModelViewProjectionMatrix") == 0 - || strcmp(var->name, "gl_Vertex") == 0 - || strstr(var->name, "Transpose") != NULL) - continue; - - var->remove(); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_code.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_code.cpp deleted file mode 100644 index f875bc6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_code.cpp +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_dead_code.cpp - * - * Eliminates dead assignments and variable declarations from the code. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_variable_refcount.h" -#include "../glsl_types.h" -#include "../../util/hash_table.h" - -static bool debug = false; - -/** - * Do a dead code pass over instructions and everything that instructions - * references. - * - * Note that this will remove assignments to globals, so it is not suitable - * for usage on an unlinked instruction stream. - */ -bool -do_dead_code(exec_list *instructions) -{ - ir_variable_refcount_visitor v; - bool progress = false; - - v.run(instructions); - - hash_table_foreach(v.ht, e) { - ir_variable_refcount_entry *entry = (ir_variable_refcount_entry *)e->data; - - /* Since each assignment is a reference, the refereneced count must be - * greater than or equal to the assignment count. If they are equal, - * then all of the references are assignments, and the variable is - * dead. - * - * Note that if the variable is neither assigned nor referenced, both - * counts will be zero and will be caught by the equality test. - */ - assert(entry->referenced_count >= entry->assigned_count); - - if (debug) { - printf("%s@%p: %d refs, %d assigns, %sdeclared in our scope\n", - entry->var->name, (void *) entry->var, - entry->referenced_count, entry->assigned_count, - entry->declaration ? "" : "not "); - } - - if ((entry->referenced_count > entry->assigned_count) - || !entry->declaration) - continue; - - /* Section 7.4.1 (Shader Interface Matching) of the OpenGL 4.5 - * (Core Profile) spec says: - * - * "With separable program objects, interfaces between shader - * stages may involve the outputs from one program object and the - * inputs from a second program object. For such interfaces, it is - * not possible to detect mismatches at link time, because the - * programs are linked separately. When each such program is - * linked, all inputs or outputs interfacing with another program - * stage are treated as active." - */ - if (entry->var->data.always_active_io) - continue; - - if (!entry->assign_list.is_empty()) { - /* Remove all the dead assignments to the variable we found. - * Don't do so if it's a shader or function output, though. - */ - if (entry->var->data.mode != ir_var_function_out && - entry->var->data.mode != ir_var_function_inout && - entry->var->data.mode != ir_var_shader_out && - entry->var->data.mode != ir_var_shader_storage) { - - while (!entry->assign_list.is_empty()) { - struct assignment_entry *assignment_entry = - exec_node_data(struct assignment_entry, - entry->assign_list.get_head_raw(), link); - - assignment_entry->assign->remove(); - - if (debug) { - printf("Removed assignment to %s@%p\n", - entry->var->name, (void *) entry->var); - } - - assignment_entry->link.remove(); - free(assignment_entry); - } - progress = true; - } - } - - if (entry->assign_list.is_empty()) { - /* If there are no assignments or references to the variable left, - * then we can remove its declaration. - */ - - /* uniform initializers are precious, and could get used by another - * stage. - */ - if (entry->var->data.mode == ir_var_uniform || - entry->var->data.mode == ir_var_shader_storage) { - if (entry->var->constant_initializer) - continue; - - /* Section 2.11.6 (Uniform Variables) of the OpenGL ES 3.0.3 spec - * says: - * - * "All members of a named uniform block declared with a - * shared or std140 layout qualifier are considered active, - * even if they are not referenced in any shader in the - * program. The uniform block itself is also considered - * active, even if no member of the block is referenced." - * - * If the variable is in a uniform block with one of those - * layouts, do not eliminate it. - */ - if (entry->var->is_in_buffer_block()) { - if (entry->var->get_interface_type_packing() != - GLSL_INTERFACE_PACKING_PACKED) { - /* Set used to false so it doesn't get set as referenced by - * the shader in the program resource list. This will also - * help avoid the state being unnecessarily flushed for the - * shader stage. - */ - entry->var->data.used = false; - continue; - } - } - - if (entry->var->type->is_subroutine()) - continue; - } - - entry->var->remove(); - progress = true; - - if (debug) { - printf("Removed declaration of %s@%p\n", - entry->var->name, (void *) entry->var); - } - } - } - - return progress; -} - -/** - * Does a dead code pass on the functions present in the instruction stream. - * - * This is suitable for use while the program is not linked, as it will - * ignore variable declarations (and the assignments to them) for variables - * with global scope. - */ -bool -do_dead_code_unlinked(exec_list *instructions) -{ - bool progress = false; - - foreach_in_list(ir_instruction, ir, instructions) { - ir_function *f = ir->as_function(); - if (f) { - foreach_in_list(ir_function_signature, sig, &f->signatures) { - if (do_dead_code(&sig->body)) - progress = true; - } - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_code_local.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_code_local.cpp deleted file mode 100644 index c17e4f6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_code_local.cpp +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_dead_code_local.cpp - * - * Eliminates local dead assignments from the code. - * - * This operates on basic blocks, tracking assignments and finding if - * they're used before the variable is completely reassigned. - * - * Compare this to ir_dead_code.cpp, which operates globally looking - * for assignments to variables that are never read. - */ - -#include "ir.h" -#include "ir_basic_block.h" -#include "ir_optimization.h" -#include "../glsl_types.h" - -static bool debug = false; - -namespace { - -class assignment_entry : public exec_node -{ -public: - /* override operator new from exec_node */ - DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(assignment_entry) - - assignment_entry(ir_variable *lhs, ir_assignment *ir) - { - assert(lhs); - assert(ir); - this->lhs = lhs; - this->ir = ir; - this->unused = ir->write_mask; - } - - ir_variable *lhs; - ir_assignment *ir; - - /* bitmask of xyzw channels written that haven't been used so far. */ - int unused; -}; - -class kill_for_derefs_visitor : public ir_hierarchical_visitor { -public: - using ir_hierarchical_visitor::visit; - - kill_for_derefs_visitor(exec_list *assignments) - { - this->assignments = assignments; - } - - void use_channels(ir_variable *const var, int used) - { - foreach_in_list_safe(assignment_entry, entry, this->assignments) { - if (entry->lhs == var) { - if (var->type->is_scalar() || var->type->is_vector()) { - if (debug) - printf("used %s (0x%01x - 0x%01x)\n", entry->lhs->name, - entry->unused, used & 0xf); - entry->unused &= ~used; - if (!entry->unused) - entry->remove(); - } else { - if (debug) - printf("used %s\n", entry->lhs->name); - entry->remove(); - } - } - } - } - - virtual ir_visitor_status visit(ir_dereference_variable *ir) - { - use_channels(ir->var, ~0); - - return visit_continue; - } - - virtual ir_visitor_status visit(ir_swizzle *ir) - { - ir_dereference_variable *deref = ir->val->as_dereference_variable(); - if (!deref) - return visit_continue; - - int used = 0; - used |= 1 << ir->mask.x; - if (ir->mask.num_components > 1) - used |= 1 << ir->mask.y; - if (ir->mask.num_components > 2) - used |= 1 << ir->mask.z; - if (ir->mask.num_components > 3) - used |= 1 << ir->mask.w; - - use_channels(deref->var, used); - - return visit_continue_with_parent; - } - - virtual ir_visitor_status visit_leave(ir_emit_vertex *) - { - /* For the purpose of dead code elimination, emitting a vertex counts as - * "reading" all of the currently assigned output variables. - */ - foreach_in_list_safe(assignment_entry, entry, this->assignments) { - if (entry->lhs->data.mode == ir_var_shader_out) { - if (debug) - printf("kill %s\n", entry->lhs->name); - entry->remove(); - } - } - - return visit_continue; - } - -private: - exec_list *assignments; -}; - -class array_index_visit : public ir_hierarchical_visitor { -public: - array_index_visit(ir_hierarchical_visitor *v) - { - this->visitor = v; - } - - virtual ir_visitor_status visit_enter(class ir_dereference_array *ir) - { - ir->array_index->accept(visitor); - return visit_continue; - } - - static void run(ir_instruction *ir, ir_hierarchical_visitor *v) - { - array_index_visit top_visit(v); - ir->accept(& top_visit); - } - - ir_hierarchical_visitor *visitor; -}; - -} /* unnamed namespace */ - -/** - * Adds an entry to the available copy list if it's a plain assignment - * of a variable to a variable. - */ -static bool -process_assignment(void *lin_ctx, ir_assignment *ir, exec_list *assignments) -{ - ir_variable *var = NULL; - bool progress = false; - kill_for_derefs_visitor v(assignments); - - /* If this is an assignment of the form "foo = foo;", remove the whole - * instruction and be done with it. - */ - const ir_variable *const lhs_var = ir->whole_variable_written(); - if (lhs_var != NULL && lhs_var == ir->rhs->whole_variable_referenced()) { - ir->remove(); - return true; - } - - /* Kill assignment entries for things used to produce this assignment. */ - ir->rhs->accept(&v); - - /* Kill assignment enties used as array indices. - */ - array_index_visit::run(ir->lhs, &v); - var = ir->lhs->variable_referenced(); - assert(var); - - /* Now, check if we did a whole-variable assignment. */ - ir_dereference_variable *deref_var = ir->lhs->as_dereference_variable(); - - /* If it's a vector type, we can do per-channel elimination of - * use of the RHS. - */ - if (deref_var && (deref_var->var->type->is_scalar() || - deref_var->var->type->is_vector())) { - - if (debug) - printf("looking for %s.0x%01x to remove\n", var->name, - ir->write_mask); - - foreach_in_list_safe(assignment_entry, entry, assignments) { - if (entry->lhs != var) - continue; - - /* Skip if the assignment we're trying to eliminate isn't a plain - * variable deref. */ - if (entry->ir->lhs->ir_type != ir_type_dereference_variable) - continue; - - int remove = entry->unused & ir->write_mask; - if (debug) { - printf("%s 0x%01x - 0x%01x = 0x%01x\n", - var->name, - entry->ir->write_mask, - remove, entry->ir->write_mask & ~remove); - } - if (remove) { - progress = true; - - if (debug) { - printf("rewriting:\n "); - entry->ir->print(); - printf("\n"); - } - - entry->ir->write_mask &= ~remove; - entry->unused &= ~remove; - if (entry->ir->write_mask == 0) { - /* Delete the dead assignment. */ - entry->ir->remove(); - entry->remove(); - } else { - void *mem_ctx = ralloc_parent(entry->ir); - /* Reswizzle the RHS arguments according to the new - * write_mask. - */ - unsigned components[4]; - unsigned channels = 0; - unsigned next = 0; - - for (int i = 0; i < 4; i++) { - if ((entry->ir->write_mask | remove) & (1 << i)) { - if (!(remove & (1 << i))) - components[channels++] = next; - next++; - } - } - - entry->ir->rhs = new(mem_ctx) ir_swizzle(entry->ir->rhs, - components, - channels); - if (debug) { - printf("to:\n "); - entry->ir->print(); - printf("\n"); - } - } - } - } - } else if (ir->whole_variable_written() != NULL) { - /* We did a whole-variable assignment. So, any instruction in - * the assignment list with the same LHS is dead. - */ - if (debug) - printf("looking for %s to remove\n", var->name); - foreach_in_list_safe(assignment_entry, entry, assignments) { - if (entry->lhs == var) { - if (debug) - printf("removing %s\n", var->name); - entry->ir->remove(); - entry->remove(); - progress = true; - } - } - } - - /* Add this instruction to the assignment list available to be removed. */ - assignment_entry *entry = new(lin_ctx) assignment_entry(var, ir); - assignments->push_tail(entry); - - if (debug) { - printf("add %s\n", var->name); - - printf("current entries\n"); - foreach_in_list(assignment_entry, entry, assignments) { - printf(" %s (0x%01x)\n", entry->lhs->name, entry->unused); - } - } - - return progress; -} - -static void -dead_code_local_basic_block(ir_instruction *first, - ir_instruction *last, - void *data) -{ - ir_instruction *ir, *ir_next; - /* List of avaialble_copy */ - exec_list assignments; - bool *out_progress = (bool *)data; - bool progress = false; - - void *ctx = ralloc_context(NULL); - void *lin_ctx = linear_alloc_parent(ctx, 0); - - /* Safe looping, since process_assignment */ - for (ir = first, ir_next = (ir_instruction *)first->next;; - ir = ir_next, ir_next = (ir_instruction *)ir->next) { - ir_assignment *ir_assign = ir->as_assignment(); - - if (debug) { - ir->print(); - printf("\n"); - } - - if (ir_assign) { - progress = process_assignment(lin_ctx, ir_assign, &assignments) || - progress; - } else { - kill_for_derefs_visitor kill(&assignments); - ir->accept(&kill); - } - - if (ir == last) - break; - } - *out_progress = progress; - ralloc_free(ctx); -} - -/** - * Does a copy propagation pass on the code present in the instruction stream. - */ -bool -do_dead_code_local(exec_list *instructions) -{ - bool progress = false; - - call_for_basic_blocks(instructions, dead_code_local_basic_block, &progress); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_functions.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_functions.cpp deleted file mode 100644 index 1a1cdcb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_dead_functions.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_dead_functions.cpp - * - * Eliminates unused functions from the linked program. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_expression_flattening.h" -#include "../glsl_types.h" - -namespace { - -class signature_entry : public exec_node -{ -public: - signature_entry(ir_function_signature *sig) - { - this->signature = sig; - this->used = false; - } - - ir_function_signature *signature; - bool used; -}; - -class ir_dead_functions_visitor : public ir_hierarchical_visitor { -public: - ir_dead_functions_visitor() - { - this->mem_ctx = ralloc_context(NULL); - } - - ~ir_dead_functions_visitor() - { - ralloc_free(this->mem_ctx); - } - - virtual ir_visitor_status visit_enter(ir_function_signature *); - virtual ir_visitor_status visit_enter(ir_call *); - - signature_entry *get_signature_entry(ir_function_signature *var); - - /* List of signature_entry */ - exec_list signature_list; - void *mem_ctx; -}; - -} /* unnamed namespace */ - -signature_entry * -ir_dead_functions_visitor::get_signature_entry(ir_function_signature *sig) -{ - foreach_in_list(signature_entry, entry, &this->signature_list) { - if (entry->signature == sig) - return entry; - } - - signature_entry *entry = new(mem_ctx) signature_entry(sig); - this->signature_list.push_tail(entry); - return entry; -} - - -ir_visitor_status -ir_dead_functions_visitor::visit_enter(ir_function_signature *ir) -{ - signature_entry *entry = this->get_signature_entry(ir); - - if (strcmp(ir->function_name(), "main") == 0) { - entry->used = true; - } - - - - return visit_continue; -} - - -ir_visitor_status -ir_dead_functions_visitor::visit_enter(ir_call *ir) -{ - signature_entry *entry = this->get_signature_entry(ir->callee); - - entry->used = true; - - return visit_continue; -} - -bool -do_dead_functions(exec_list *instructions) -{ - ir_dead_functions_visitor v; - bool progress = false; - - visit_list_elements(&v, instructions); - - /* Now that we've figured out which function signatures are used, remove - * the unused ones, and remove function definitions that have no more - * signatures. - */ - foreach_in_list_safe(signature_entry, entry, &v.signature_list) { - if (!entry->used) { - entry->signature->remove(); - delete entry->signature; - progress = true; - } - delete(entry); - } - - /* We don't just do this above when we nuked a signature because of - * const pointers. - */ - foreach_in_list_safe(ir_instruction, ir, instructions) { - ir_function *func = ir->as_function(); - - if (func && func->signatures.is_empty()) { - /* At this point (post-linking), the symbol table is no - * longer in use, so not removing the function from the - * symbol table should be OK. - */ - func->remove(); - delete func; - progress = true; - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp deleted file mode 100644 index f62bec6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_flatten_nested_if_blocks.cpp - * - * Flattens nested if blocks such as: - * - * if (x) { - * if (y) { - * ... - * } - * } - * - * into a single if block with a combined condition: - * - * if (x && y) { - * ... - * } - */ - -#include "ir.h" -#include "ir_builder.h" - -using namespace ir_builder; - -namespace { - -class nested_if_flattener : public ir_hierarchical_visitor { -public: - nested_if_flattener() - { - progress = false; - } - - ir_visitor_status visit_leave(ir_if *); - ir_visitor_status visit_enter(ir_assignment *); - - bool progress; -}; - -} /* unnamed namespace */ - -/* We only care about the top level "if" instructions, so don't - * descend into expressions. - */ -ir_visitor_status -nested_if_flattener::visit_enter(ir_assignment *ir) -{ - (void) ir; - return visit_continue_with_parent; -} - -bool -opt_flatten_nested_if_blocks(exec_list *instructions) -{ - nested_if_flattener v; - - v.run(instructions); - return v.progress; -} - - -ir_visitor_status -nested_if_flattener::visit_leave(ir_if *ir) -{ - /* Only handle a single ir_if within the then clause of an ir_if. No extra - * instructions, no else clauses, nothing. - */ - if (ir->then_instructions.is_empty() || !ir->else_instructions.is_empty()) - return visit_continue; - - ir_if *inner = ((ir_instruction *) ir->then_instructions.get_head_raw())->as_if(); - if (!inner || !inner->next->is_tail_sentinel() || - !inner->else_instructions.is_empty()) - return visit_continue; - - ir->condition = logic_and(ir->condition, inner->condition); - inner->then_instructions.move_nodes_to(&ir->then_instructions); - - progress = true; - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_flip_matrices.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_flip_matrices.cpp deleted file mode 100644 index 083e476..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_flip_matrices.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_flip_matrices.cpp - * - * Convert (matrix * vector) operations to (vector * matrixTranspose), - * which can be done using dot products rather than multiplies and adds. - * On some hardware, this is more efficient. - * - * This currently only does the conversion for built-in matrices which - * already have transposed equivalents. Namely, gl_ModelViewProjectionMatrix - * and gl_TextureMatrix. - */ -#include "ir.h" -#include "ir_optimization.h" -#include "../../util/macros.h" - -namespace { -class matrix_flipper : public ir_hierarchical_visitor { -public: - matrix_flipper(exec_list *instructions) - { - progress = false; - mvp_transpose = NULL; - texmat_transpose = NULL; - - foreach_in_list(ir_instruction, ir, instructions) { - ir_variable *var = ir->as_variable(); - if (!var) - continue; - if (strcmp(var->name, "gl_ModelViewProjectionMatrixTranspose") == 0) - mvp_transpose = var; - if (strcmp(var->name, "gl_TextureMatrixTranspose") == 0) - texmat_transpose = var; - } - } - - ir_visitor_status visit_enter(ir_expression *ir); - - bool progress; - -private: - ir_variable *mvp_transpose; - ir_variable *texmat_transpose; -}; -} - -ir_visitor_status -matrix_flipper::visit_enter(ir_expression *ir) -{ - if (ir->operation != ir_binop_mul || - !ir->operands[0]->type->is_matrix() || - !ir->operands[1]->type->is_vector()) - return visit_continue; - - ir_variable *mat_var = ir->operands[0]->variable_referenced(); - if (!mat_var) - return visit_continue; - - if (mvp_transpose && - strcmp(mat_var->name, "gl_ModelViewProjectionMatrix") == 0) { -#ifndef NDEBUG - ir_dereference_variable *deref = ir->operands[0]->as_dereference_variable(); - assert(deref && deref->var == mat_var); -#endif - - void *mem_ctx = ralloc_parent(ir); - - ir->operands[0] = ir->operands[1]; - ir->operands[1] = new(mem_ctx) ir_dereference_variable(mvp_transpose); - - progress = true; - } else if (texmat_transpose && - strcmp(mat_var->name, "gl_TextureMatrix") == 0) { - ir_dereference_array *array_ref = ir->operands[0]->as_dereference_array(); - assert(array_ref != NULL); - ir_dereference_variable *var_ref = array_ref->array->as_dereference_variable(); - assert(var_ref && var_ref->var == mat_var); - - ir->operands[0] = ir->operands[1]; - ir->operands[1] = array_ref; - - var_ref->var = texmat_transpose; - - texmat_transpose->data.max_array_access = - MAX2(texmat_transpose->data.max_array_access, mat_var->data.max_array_access); - - progress = true; - } - - return visit_continue; -} - -bool -opt_flip_matrices(struct exec_list *instructions) -{ - matrix_flipper v(instructions); - - visit_list_elements(&v, instructions); - - return v.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_function_inlining.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_function_inlining.cpp deleted file mode 100644 index 7e85820..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_function_inlining.cpp +++ /dev/null @@ -1,461 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_function_inlining.cpp - * - * Replaces calls to functions with the body of the function. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_rvalue_visitor.h" -#include "ir_function_inlining.h" -#include "ir_expression_flattening.h" -#include "../glsl_types.h" -#include "../../util/hash_table.h" - -static void -do_variable_replacement(exec_list *instructions, - ir_variable *orig, - ir_rvalue *repl); - -namespace { - -class ir_function_inlining_visitor : public ir_hierarchical_visitor { -public: - ir_function_inlining_visitor() - { - progress = false; - } - - virtual ~ir_function_inlining_visitor() - { - /* empty */ - } - - virtual ir_visitor_status visit_enter(ir_expression *); - virtual ir_visitor_status visit_enter(ir_call *); - virtual ir_visitor_status visit_enter(ir_return *); - virtual ir_visitor_status visit_enter(ir_texture *); - virtual ir_visitor_status visit_enter(ir_swizzle *); - - bool progress; -}; - -class ir_save_lvalue_visitor : public ir_hierarchical_visitor { -public: - virtual ir_visitor_status visit_enter(ir_dereference_array *); -}; - -} /* unnamed namespace */ - -bool -do_function_inlining(exec_list *instructions) -{ - ir_function_inlining_visitor v; - - v.run(instructions); - - return v.progress; -} - -static void -replace_return_with_assignment(ir_instruction *ir, void *data) -{ - void *ctx = ralloc_parent(ir); - ir_dereference *orig_deref = (ir_dereference *) data; - ir_return *ret = ir->as_return(); - - if (ret) { - if (ret->value) { - ir_rvalue *lhs = orig_deref->clone(ctx, NULL); - ret->replace_with(new(ctx) ir_assignment(lhs, ret->value)); - } else { - /* un-valued return has to be the last return, or we shouldn't - * have reached here. (see can_inline()). - */ - assert(ret->next->is_tail_sentinel()); - ret->remove(); - } - } -} - -/* Save the given lvalue before the given instruction. - * - * This is done by adding temporary variables into which the current value - * of any array indices are saved, and then modifying the dereference chain - * in-place to point to those temporary variables. - * - * The hierarchical visitor is only used to traverse the left-hand-side chain - * of derefs. - */ -ir_visitor_status -ir_save_lvalue_visitor::visit_enter(ir_dereference_array *deref) -{ - if (deref->array_index->ir_type != ir_type_constant) { - void *ctx = ralloc_parent(deref); - ir_variable *index; - ir_assignment *assignment; - - index = new(ctx) ir_variable(deref->array_index->type, "saved_idx", ir_var_temporary); - base_ir->insert_before(index); - - assignment = new(ctx) ir_assignment(new(ctx) ir_dereference_variable(index), - deref->array_index); - base_ir->insert_before(assignment); - - deref->array_index = new(ctx) ir_dereference_variable(index); - } - - deref->array->accept(this); - return visit_stop; -} - -static bool -should_replace_variable(ir_variable *sig_param, ir_rvalue *param, - bool is_builtin) { - - if (sig_param->data.mode != ir_var_function_in && - sig_param->data.mode != ir_var_const_in) - return false; - - /* Some places in glsl_to_nir() expect images to always be copied to a temp - * first. - */ - if (sig_param->type->without_array()->is_image() && !param->is_dereference()) - return false; - - /* SSBO and shared vars might be passed to a built-in such as an atomic - * memory function, where copying these to a temp before passing to the - * atomic function is not valid so we must replace these instead. Also, - * shader inputs for interpolateAt funtions also need to be replaced. - * - * Our builtins should always use temps and not the inputs themselves to - * store temporay values so just checking is_builtin rather than string - * comparing the function name for e.g atomic* should always be safe. - */ - if (is_builtin) - return true; - - /* For opaque types, we want the inlined variable references - * referencing the passed in variable, since that will have - * the location information, which an assignment of an opaque - * variable wouldn't. - */ - return sig_param->type->contains_opaque(); -} - -void -ir_call::generate_inline(ir_instruction *next_ir) -{ - void *ctx = ralloc_parent(this); - ir_variable **parameters; - unsigned num_parameters; - int i; - struct hash_table *ht; - - ht = _mesa_pointer_hash_table_create(NULL); - - num_parameters = this->callee->parameters.length(); - parameters = new ir_variable *[num_parameters]; - - /* Generate the declarations for the parameters to our inlined code, - * and set up the mapping of real function body variables to ours. - */ - i = 0; - foreach_two_lists(formal_node, &this->callee->parameters, - actual_node, &this->actual_parameters) { - ir_variable *sig_param = (ir_variable *) formal_node; - ir_rvalue *param = (ir_rvalue *) actual_node; - - /* Generate a new variable for the parameter. */ - if (should_replace_variable(sig_param, param, - this->callee->is_builtin())) { - /* Actual replacement happens below */ - parameters[i] = NULL; - } else { - parameters[i] = sig_param->clone(ctx, ht); - parameters[i]->data.mode = ir_var_temporary; - - /* Remove the read-only decoration because we're going to write - * directly to this variable. If the cloned variable is left - * read-only and the inlined function is inside a loop, the loop - * analysis code will get confused. - */ - parameters[i]->data.read_only = false; - next_ir->insert_before(parameters[i]); - } - - /* Section 6.1.1 (Function Calling Conventions) of the OpenGL Shading - * Language 4.5 spec says: - * - * "All arguments are evaluated at call time, exactly once, in order, - * from left to right. [...] Evaluation of an out parameter results - * in an l-value that is used to copy out a value when the function - * returns." - * - * I.e., we have to take temporary copies of any relevant array indices - * before the function body is executed. - * - * This ensures that - * (a) if an array index expressions refers to a variable that is - * modified by the execution of the function body, we use the - * original value as intended, and - * (b) if an array index expression has side effects, those side effects - * are only executed once and at the right time. - */ - if (parameters[i]) { - if (sig_param->data.mode == ir_var_function_in || - sig_param->data.mode == ir_var_const_in) { - ir_assignment *assign; - - assign = new(ctx) ir_assignment(new(ctx) ir_dereference_variable(parameters[i]), - param); - next_ir->insert_before(assign); - } else { - assert(sig_param->data.mode == ir_var_function_out || - sig_param->data.mode == ir_var_function_inout); - assert(param->is_lvalue()); - - ir_save_lvalue_visitor v; - v.base_ir = next_ir; - - param->accept(&v); - - if (sig_param->data.mode == ir_var_function_inout) { - ir_assignment *assign; - - assign = new(ctx) ir_assignment(new(ctx) ir_dereference_variable(parameters[i]), - param->clone(ctx, NULL)->as_rvalue()); - next_ir->insert_before(assign); - } - } - } - - ++i; - } - - exec_list new_instructions; - - /* Generate the inlined body of the function to a new list */ - foreach_in_list(ir_instruction, ir, &callee->body) { - ir_instruction *new_ir = ir->clone(ctx, ht); - - new_instructions.push_tail(new_ir); - visit_tree(new_ir, replace_return_with_assignment, this->return_deref); - } - - /* If any opaque types were passed in, replace any deref of the - * opaque variable with a deref of the argument. - */ - foreach_two_lists(formal_node, &this->callee->parameters, - actual_node, &this->actual_parameters) { - ir_rvalue *const param = (ir_rvalue *) actual_node; - ir_variable *sig_param = (ir_variable *) formal_node; - - if (should_replace_variable(sig_param, param, - this->callee->is_builtin())) { - do_variable_replacement(&new_instructions, sig_param, param); - } - } - - /* Now push those new instructions in. */ - next_ir->insert_before(&new_instructions); - - /* Copy back the value of any 'out' parameters from the function body - * variables to our own. - */ - i = 0; - foreach_two_lists(formal_node, &this->callee->parameters, - actual_node, &this->actual_parameters) { - ir_rvalue *const param = (ir_rvalue *) actual_node; - const ir_variable *const sig_param = (ir_variable *) formal_node; - - /* Move our param variable into the actual param if it's an 'out' type. */ - if (parameters[i] && (sig_param->data.mode == ir_var_function_out || - sig_param->data.mode == ir_var_function_inout)) { - ir_assignment *assign; - - assign = new(ctx) ir_assignment(param, - new(ctx) ir_dereference_variable(parameters[i])); - next_ir->insert_before(assign); - } - - ++i; - } - - delete [] parameters; - - _mesa_hash_table_destroy(ht, NULL); -} - - -ir_visitor_status -ir_function_inlining_visitor::visit_enter(ir_expression *ir) -{ - (void) ir; - return visit_continue_with_parent; -} - - -ir_visitor_status -ir_function_inlining_visitor::visit_enter(ir_return *ir) -{ - (void) ir; - return visit_continue_with_parent; -} - - -ir_visitor_status -ir_function_inlining_visitor::visit_enter(ir_texture *ir) -{ - (void) ir; - return visit_continue_with_parent; -} - - -ir_visitor_status -ir_function_inlining_visitor::visit_enter(ir_swizzle *ir) -{ - (void) ir; - return visit_continue_with_parent; -} - - -ir_visitor_status -ir_function_inlining_visitor::visit_enter(ir_call *ir) -{ - if (can_inline(ir)) { - ir->generate_inline(ir); - ir->remove(); - this->progress = true; - } - - return visit_continue; -} - - -/** - * Replaces references to the "orig" variable with a clone of "repl." - * - * From the spec, opaque types can appear in the tree as function - * (non-out) parameters and as the result of array indexing and - * structure field selection. In our builtin implementation, they - * also appear in the sampler field of an ir_tex instruction. - */ - -class ir_variable_replacement_visitor : public ir_rvalue_visitor { -public: - ir_variable_replacement_visitor(ir_variable *orig, ir_rvalue *repl) - { - this->orig = orig; - this->repl = repl; - } - - virtual ~ir_variable_replacement_visitor() - { - } - - virtual ir_visitor_status visit_leave(ir_call *); - virtual ir_visitor_status visit_leave(ir_texture *); - virtual ir_visitor_status visit_leave(ir_assignment *); - - void handle_rvalue(ir_rvalue **rvalue); - void replace_deref(ir_dereference **deref); - void replace_rvalue(ir_rvalue **rvalue); - - ir_variable *orig; - ir_rvalue *repl; -}; - -void -ir_variable_replacement_visitor::replace_deref(ir_dereference **deref) -{ - ir_dereference_variable *deref_var = (*deref)->as_dereference_variable(); - if (deref_var && deref_var->var == this->orig) - *deref = this->repl->as_dereference()->clone(ralloc_parent(*deref), NULL); -} - -void -ir_variable_replacement_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - replace_rvalue(rvalue); -} - -void -ir_variable_replacement_visitor::replace_rvalue(ir_rvalue **rvalue) -{ - if (!*rvalue) - return; - - ir_dereference *deref = (*rvalue)->as_dereference(); - - if (!deref) - return; - - ir_dereference_variable *deref_var = (deref)->as_dereference_variable(); - if (deref_var && deref_var->var == this->orig) - *rvalue = this->repl->clone(ralloc_parent(deref), NULL); -} - -ir_visitor_status -ir_variable_replacement_visitor::visit_leave(ir_texture *ir) -{ - replace_deref(&ir->sampler); - - return rvalue_visit(ir); -} - -ir_visitor_status -ir_variable_replacement_visitor::visit_leave(ir_assignment *ir) -{ - replace_deref(&ir->lhs); - replace_rvalue(&ir->rhs); - - return visit_continue; -} - -ir_visitor_status -ir_variable_replacement_visitor::visit_leave(ir_call *ir) -{ - foreach_in_list_safe(ir_rvalue, param, &ir->actual_parameters) { - ir_rvalue *new_param = param; - replace_rvalue(&new_param); - - if (new_param != param) { - param->replace_with(new_param); - } - } - return visit_continue; -} - -static void -do_variable_replacement(exec_list *instructions, - ir_variable *orig, - ir_rvalue *repl) -{ - ir_variable_replacement_visitor v(orig, repl); - - visit_list_elements(&v, instructions); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_if_simplification.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_if_simplification.cpp deleted file mode 100644 index e1015bb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_if_simplification.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_if_simplification.cpp - * - * Moves constant branches of if statements out to the surrounding - * instruction stream, and inverts if conditionals to avoid empty - * "then" blocks. - */ - -#include "ir.h" - -namespace { - -class ir_if_simplification_visitor : public ir_hierarchical_visitor { -public: - ir_if_simplification_visitor() - { - this->made_progress = false; - } - - ir_visitor_status visit_leave(ir_if *); - ir_visitor_status visit_enter(ir_assignment *); - - bool made_progress; -}; - -} /* unnamed namespace */ - -/* We only care about the top level "if" instructions, so don't - * descend into expressions. - */ -ir_visitor_status -ir_if_simplification_visitor::visit_enter(ir_assignment *ir) -{ - (void) ir; - return visit_continue_with_parent; -} - -bool -do_if_simplification(exec_list *instructions) -{ - ir_if_simplification_visitor v; - - v.run(instructions); - return v.made_progress; -} - - -ir_visitor_status -ir_if_simplification_visitor::visit_leave(ir_if *ir) -{ - /* If the if statement has nothing on either side, remove it. */ - if (ir->then_instructions.is_empty() && - ir->else_instructions.is_empty()) { - ir->remove(); - this->made_progress = true; - return visit_continue; - } - - /* FINISHME: Ideally there would be a way to note that the condition results - * FINISHME: in a constant before processing both of the other subtrees. - * FINISHME: This can probably be done with some flags, but it would take - * FINISHME: some work to get right. - */ - ir_constant *condition_constant = - ir->condition->constant_expression_value(ralloc_parent(ir)); - if (condition_constant) { - /* Move the contents of the one branch of the conditional - * that matters out. - */ - if (condition_constant->value.b[0]) { - ir->insert_before(&ir->then_instructions); - } else { - ir->insert_before(&ir->else_instructions); - } - ir->remove(); - this->made_progress = true; - return visit_continue; - } - - /* Turn: - * - * if (cond) { - * } else { - * do_work(); - * } - * - * into : - * - * if (!cond) - * do_work(); - * - * which avoids control flow for "else" (which is usually more - * expensive than normal operations), and the "not" can usually be - * folded into the generation of "cond" anyway. - */ - if (ir->then_instructions.is_empty()) { - ir->condition = new(ralloc_parent(ir->condition)) - ir_expression(ir_unop_logic_not, ir->condition); - ir->else_instructions.move_nodes_to(&ir->then_instructions); - this->made_progress = true; - } - - return visit_continue; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_minmax.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_minmax.cpp deleted file mode 100644 index a9d0f36..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_minmax.cpp +++ /dev/null @@ -1,533 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_minmax.cpp - * - * Drop operands from an expression tree of only min/max operations if they - * can be proven to not contribute to the final result. - * - * The algorithm is similar to alpha-beta pruning on a minmax search. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_rvalue_visitor.h" -#include "ir_optimization.h" -#include "ir_builder.h" -#include "../../mesa/program/prog_instruction.h" -#include "../glsl_types.h" -#include "../../util/macros.h" -#include "../../util/half_float.h" - -using namespace ir_builder; - -namespace { - -enum compare_components_result { - LESS, - LESS_OR_EQUAL, - EQUAL, - GREATER_OR_EQUAL, - GREATER, - MIXED -}; - -class minmax_range { -public: - minmax_range(ir_constant *low = NULL, ir_constant *high = NULL) - { - this->low = low; - this->high = high; - } - - /* low is the lower limit of the range, high is the higher limit. NULL on - * low means negative infinity (unlimited) and on high positive infinity - * (unlimited). Because of the two interpretations of the value NULL, - * arbitrary comparison between ir_constants is impossible. - */ - ir_constant *low; - ir_constant *high; -}; - -class ir_minmax_visitor : public ir_rvalue_enter_visitor { -public: - ir_minmax_visitor() - : progress(false) - { - } - - ir_rvalue *prune_expression(ir_expression *expr, minmax_range baserange); - - void handle_rvalue(ir_rvalue **rvalue); - - bool progress; -}; - -/* - * Returns LESS if all vector components of `a' are strictly lower than of `b', - * GREATER if all vector components of `a' are strictly greater than of `b', - * MIXED if some vector components of `a' are strictly lower than of `b' while - * others are strictly greater, or EQUAL otherwise. - */ -static enum compare_components_result -compare_components(ir_constant *a, ir_constant *b) -{ - assert(a != NULL); - assert(b != NULL); - - assert(a->type->base_type == b->type->base_type); - - unsigned a_inc = a->type->is_scalar() ? 0 : 1; - unsigned b_inc = b->type->is_scalar() ? 0 : 1; - unsigned components = MAX2(a->type->components(), b->type->components()); - - bool foundless = false; - bool foundgreater = false; - bool foundequal = false; - - for (unsigned i = 0, c0 = 0, c1 = 0; - i < components; - c0 += a_inc, c1 += b_inc, ++i) { - switch (a->type->base_type) { - case GLSL_TYPE_UINT16: - if (a->value.u16[c0] < b->value.u16[c1]) - foundless = true; - else if (a->value.u16[c0] > b->value.u16[c1]) - foundgreater = true; - else - foundequal = true; - break; - case GLSL_TYPE_INT16: - if (a->value.i16[c0] < b->value.i16[c1]) - foundless = true; - else if (a->value.i16[c0] > b->value.i16[c1]) - foundgreater = true; - else - foundequal = true; - break; - case GLSL_TYPE_UINT: - if (a->value.u[c0] < b->value.u[c1]) - foundless = true; - else if (a->value.u[c0] > b->value.u[c1]) - foundgreater = true; - else - foundequal = true; - break; - case GLSL_TYPE_INT: - if (a->value.i[c0] < b->value.i[c1]) - foundless = true; - else if (a->value.i[c0] > b->value.i[c1]) - foundgreater = true; - else - foundequal = true; - break; - case GLSL_TYPE_FLOAT16: { - float af = _mesa_half_to_float(a->value.f16[c0]); - float bf = _mesa_half_to_float(b->value.f16[c1]); - if (af < bf) - foundless = true; - else if (af > bf) - foundgreater = true; - else - foundequal = true; - break; - } - case GLSL_TYPE_FLOAT: - if (a->value.f[c0] < b->value.f[c1]) - foundless = true; - else if (a->value.f[c0] > b->value.f[c1]) - foundgreater = true; - else - foundequal = true; - break; - case GLSL_TYPE_DOUBLE: - if (a->value.d[c0] < b->value.d[c1]) - foundless = true; - else if (a->value.d[c0] > b->value.d[c1]) - foundgreater = true; - else - foundequal = true; - break; - default: - unreachable("not reached"); - } - } - - if (foundless && foundgreater) { - /* Some components are strictly lower, others are strictly greater */ - return MIXED; - } - - if (foundequal) { - /* It is not mixed, but it is not strictly lower or greater */ - if (foundless) - return LESS_OR_EQUAL; - if (foundgreater) - return GREATER_OR_EQUAL; - return EQUAL; - } - - /* All components are strictly lower or strictly greater */ - return foundless ? LESS : GREATER; -} - -static ir_constant * -combine_constant(bool ismin, ir_constant *a, ir_constant *b) -{ - void *mem_ctx = ralloc_parent(a); - ir_constant *c = a->clone(mem_ctx, NULL); - for (unsigned i = 0; i < c->type->components(); i++) { - switch (c->type->base_type) { - case GLSL_TYPE_UINT16: - if ((ismin && b->value.u16[i] < c->value.u16[i]) || - (!ismin && b->value.u16[i] > c->value.u16[i])) - c->value.u16[i] = b->value.u16[i]; - break; - case GLSL_TYPE_INT16: - if ((ismin && b->value.i16[i] < c->value.i16[i]) || - (!ismin && b->value.i16[i] > c->value.i16[i])) - c->value.i16[i] = b->value.i16[i]; - break; - case GLSL_TYPE_UINT: - if ((ismin && b->value.u[i] < c->value.u[i]) || - (!ismin && b->value.u[i] > c->value.u[i])) - c->value.u[i] = b->value.u[i]; - break; - case GLSL_TYPE_INT: - if ((ismin && b->value.i[i] < c->value.i[i]) || - (!ismin && b->value.i[i] > c->value.i[i])) - c->value.i[i] = b->value.i[i]; - break; - case GLSL_TYPE_FLOAT16: { - float bf = _mesa_half_to_float(b->value.f16[i]); - float cf = _mesa_half_to_float(c->value.f16[i]); - if ((ismin && bf < cf) || (!ismin && bf > cf)) - c->value.f16[i] = b->value.f16[i]; - break; - } - case GLSL_TYPE_FLOAT: - if ((ismin && b->value.f[i] < c->value.f[i]) || - (!ismin && b->value.f[i] > c->value.f[i])) - c->value.f[i] = b->value.f[i]; - break; - case GLSL_TYPE_DOUBLE: - if ((ismin && b->value.d[i] < c->value.d[i]) || - (!ismin && b->value.d[i] > c->value.d[i])) - c->value.d[i] = b->value.d[i]; - break; - default: - assert(!"not reached"); - } - } - return c; -} - -static ir_constant * -smaller_constant(ir_constant *a, ir_constant *b) -{ - assert(a != NULL); - assert(b != NULL); - - enum compare_components_result ret = compare_components(a, b); - if (ret == MIXED) - return combine_constant(true, a, b); - else if (ret < EQUAL) - return a; - else - return b; -} - -static ir_constant * -larger_constant(ir_constant *a, ir_constant *b) -{ - assert(a != NULL); - assert(b != NULL); - - enum compare_components_result ret = compare_components(a, b); - if (ret == MIXED) - return combine_constant(false, a, b); - else if (ret < EQUAL) - return b; - else - return a; -} - -/* Combines two ranges by doing an element-wise min() / max() depending on the - * operation. - */ -static minmax_range -combine_range(minmax_range r0, minmax_range r1, bool ismin) -{ - minmax_range ret; - - if (!r0.low) { - ret.low = ismin ? r0.low : r1.low; - } else if (!r1.low) { - ret.low = ismin ? r1.low : r0.low; - } else { - ret.low = ismin ? smaller_constant(r0.low, r1.low) : - larger_constant(r0.low, r1.low); - } - - if (!r0.high) { - ret.high = ismin ? r1.high : r0.high; - } else if (!r1.high) { - ret.high = ismin ? r0.high : r1.high; - } else { - ret.high = ismin ? smaller_constant(r0.high, r1.high) : - larger_constant(r0.high, r1.high); - } - - return ret; -} - -/* Returns a range so that lower limit is the larger of the two lower limits, - * and higher limit is the smaller of the two higher limits. - */ -static minmax_range -range_intersection(minmax_range r0, minmax_range r1) -{ - minmax_range ret; - - if (!r0.low) - ret.low = r1.low; - else if (!r1.low) - ret.low = r0.low; - else - ret.low = larger_constant(r0.low, r1.low); - - if (!r0.high) - ret.high = r1.high; - else if (!r1.high) - ret.high = r0.high; - else - ret.high = smaller_constant(r0.high, r1.high); - - return ret; -} - -static minmax_range -get_range(ir_rvalue *rval) -{ - ir_expression *expr = rval->as_expression(); - if (expr && (expr->operation == ir_binop_min || - expr->operation == ir_binop_max)) { - minmax_range r0 = get_range(expr->operands[0]); - minmax_range r1 = get_range(expr->operands[1]); - return combine_range(r0, r1, expr->operation == ir_binop_min); - } - - ir_constant *c = rval->as_constant(); - if (c) { - return minmax_range(c, c); - } - - return minmax_range(); -} - -/** - * Prunes a min/max expression considering the base range of the parent - * min/max expression. - * - * @param baserange the range that the parents of this min/max expression - * in the min/max tree will clamp its value to. - */ -ir_rvalue * -ir_minmax_visitor::prune_expression(ir_expression *expr, minmax_range baserange) -{ - assert(expr->operation == ir_binop_min || - expr->operation == ir_binop_max); - - bool ismin = expr->operation == ir_binop_min; - minmax_range limits[2]; - - /* Recurse to get the ranges for each of the subtrees of this - * expression. We need to do this as a separate step because we need to - * know the ranges of each of the subtrees before we prune either one. - * Consider something like this: - * - * max - * / \ - * max max - * / \ / \ - * 3 a b 2 - * - * We would like to prune away the max on the bottom-right, but to do so - * we need to know the range of the expression on the left beforehand, - * and there's no guarantee that we will visit either subtree in a - * particular order. - */ - for (unsigned i = 0; i < 2; ++i) - limits[i] = get_range(expr->operands[i]); - - for (unsigned i = 0; i < 2; ++i) { - bool is_redundant = false; - - enum compare_components_result cr = LESS; - if (ismin) { - /* If this operand will always be greater than the other one, it's - * redundant. - */ - if (limits[i].low && limits[1 - i].high) { - cr = compare_components(limits[i].low, limits[1 - i].high); - if (cr >= EQUAL && cr != MIXED) - is_redundant = true; - } - /* If this operand is always greater than baserange, then even if - * it's smaller than the other one it'll get clamped, so it's - * redundant. - */ - if (!is_redundant && limits[i].low && baserange.high) { - cr = compare_components(limits[i].low, baserange.high); - if (cr > EQUAL && cr != MIXED) - is_redundant = true; - } - } else { - /* If this operand will always be lower than the other one, it's - * redundant. - */ - if (limits[i].high && limits[1 - i].low) { - cr = compare_components(limits[i].high, limits[1 - i].low); - if (cr <= EQUAL) - is_redundant = true; - } - /* If this operand is always lower than baserange, then even if - * it's greater than the other one it'll get clamped, so it's - * redundant. - */ - if (!is_redundant && limits[i].high && baserange.low) { - cr = compare_components(limits[i].high, baserange.low); - if (cr < EQUAL) - is_redundant = true; - } - } - - if (is_redundant) { - progress = true; - - /* Recurse if necessary. */ - ir_expression *op_expr = expr->operands[1 - i]->as_expression(); - if (op_expr && (op_expr->operation == ir_binop_min || - op_expr->operation == ir_binop_max)) { - return prune_expression(op_expr, baserange); - } - - return expr->operands[1 - i]; - } else if (cr == MIXED) { - /* If we have mixed vector operands, we can try to resolve the minmax - * expression by doing a component-wise minmax: - * - * min min - * / \ / \ - * min a ===> [1,1] a - * / \ - * [1,3] [3,1] - * - */ - ir_constant *a = expr->operands[0]->as_constant(); - ir_constant *b = expr->operands[1]->as_constant(); - if (a && b) - return combine_constant(ismin, a, b); - } - } - - /* Now recurse to operands giving them the proper baserange. The baserange - * to pass is the intersection of our baserange and the other operand's - * limit with one of the ranges unlimited. If we can't compute a valid - * intersection, we use the current baserange. - */ - for (unsigned i = 0; i < 2; ++i) { - ir_expression *op_expr = expr->operands[i]->as_expression(); - if (op_expr && (op_expr->operation == ir_binop_min || - op_expr->operation == ir_binop_max)) { - /* We can only compute a new baserange for this operand if we managed - * to compute a valid range for the other operand. - */ - if (ismin) - limits[1 - i].low = NULL; - else - limits[1 - i].high = NULL; - minmax_range base = range_intersection(limits[1 - i], baserange); - expr->operands[i] = prune_expression(op_expr, base); - } - } - - /* If we got here we could not discard any of the operands of the minmax - * expression, but we can still try to resolve the expression if both - * operands are constant. We do this after the loop above, to make sure - * that if our operands are minmax expressions we have tried to prune them - * first (hopefully reducing them to constants). - */ - ir_constant *a = expr->operands[0]->as_constant(); - ir_constant *b = expr->operands[1]->as_constant(); - if (a && b) - return combine_constant(ismin, a, b); - - return expr; -} - -static ir_rvalue * -swizzle_if_required(ir_expression *expr, ir_rvalue *rval) -{ - if (expr->type->is_vector() && rval->type->is_scalar()) { - return swizzle(rval, SWIZZLE_XXXX, expr->type->vector_elements); - } else { - return rval; - } -} - -void -ir_minmax_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - if (!*rvalue) - return; - - ir_expression *expr = (*rvalue)->as_expression(); - if (!expr || (expr->operation != ir_binop_min && - expr->operation != ir_binop_max)) - return; - - ir_rvalue *new_rvalue = prune_expression(expr, minmax_range()); - if (new_rvalue == *rvalue) - return; - - /* If the expression type is a vector and the optimization leaves a scalar - * as the result, we need to turn it into a vector. - */ - *rvalue = swizzle_if_required(expr, new_rvalue); - - progress = true; -} - -} - -bool -do_minmax_prune(exec_list *instructions) -{ - ir_minmax_visitor v; - - visit_list_elements(&v, instructions); - - return v.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_rebalance_tree.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_rebalance_tree.cpp deleted file mode 100644 index 6cbecd5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_rebalance_tree.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_rebalance_tree.cpp - * - * Rebalances a reduction expression tree. - * - * For reduction operations (e.g., x + y + z + w) we generate an expression - * tree like - * - * + - * / \ - * + w - * / \ - * + z - * / \ - * x y - * - * which we can rebalance into - * - * + - * / \ - * / \ - * + + - * / \ / \ - * x y z w - * - * to get a better instruction scheduling. - * - * See "Tree Rebalancing in Optimal Editor Time and Space" by Quentin F. Stout - * and Bette L. Warren. - * - * Also see http://penguin.ewu.edu/~trolfe/DSWpaper/ for a very readable - * explanation of the of the tree_to_vine() (rightward rotation) and - * vine_to_tree() (leftward rotation) algorithms. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_rvalue_visitor.h" -#include "ir_optimization.h" -#include "../../util/macros.h" /* for MAX2 */ - -/* The DSW algorithm generates a degenerate tree (really, a linked list) in - * tree_to_vine(). We'd rather not leave a binary expression with only one - * operand, so trivial modifications (the ternary operators below) are needed - * to ensure that we only rotate around the ir_expression nodes of the tree. - */ -static unsigned -tree_to_vine(ir_expression *root) -{ - unsigned size = 0; - ir_rvalue *vine_tail = root; - ir_rvalue *remainder = root->operands[1]; - - while (remainder != NULL) { - ir_expression *remainder_temp = remainder->as_expression(); - ir_expression *remainder_left = remainder_temp ? - remainder_temp->operands[0]->as_expression() : NULL; - - if (remainder_left == NULL) { - /* move vine_tail down one */ - vine_tail = remainder; - remainder = remainder->as_expression() ? - ((ir_expression *)remainder)->operands[1] : NULL; - size++; - } else { - /* rotate */ - ir_expression *tempptr = remainder_left; - ((ir_expression *)remainder)->operands[0] = tempptr->operands[1]; - tempptr->operands[1] = remainder; - remainder = tempptr; - ((ir_expression *)vine_tail)->operands[1] = tempptr; - } - } - - return size; -} - -static void -compression(ir_expression *root, unsigned count) -{ - ir_expression *scanner = root; - - for (unsigned i = 0; i < count; i++) { - ir_expression *child = (ir_expression *)scanner->operands[1]; - scanner->operands[1] = child->operands[1]; - scanner = (ir_expression *)scanner->operands[1]; - child->operands[1] = scanner->operands[0]; - scanner->operands[0] = child; - } -} - -static void -vine_to_tree(ir_expression *root, unsigned size) -{ - int n = size - 1; - for (int m = n / 2; m > 0; m = n / 2) { - compression(root, m); - n -= m + 1; - } -} - -namespace { - -class ir_rebalance_visitor : public ir_rvalue_enter_visitor { -public: - ir_rebalance_visitor() - { - progress = false; - } - - virtual ir_visitor_status visit_enter(ir_assignment *ir); - - void handle_rvalue(ir_rvalue **rvalue); - - bool progress; -}; - -struct is_reduction_data { - ir_expression_operation operation; - const glsl_type *type; - unsigned num_expr; - bool is_reduction; - bool contains_constant; -}; - -} /* anonymous namespace */ - -ir_visitor_status -ir_rebalance_visitor::visit_enter(ir_assignment *ir) -{ - ir_variable *var = ir->lhs->variable_referenced(); - if (var->data.invariant || var->data.precise) { - /* If we're assigning to an invariant variable, just bail. Tree - * rebalancing (reassociation) isn't precision-safe. - */ - return visit_continue_with_parent; - } else { - return visit_continue; - } -} - -static bool -is_reduction_operation(ir_expression_operation operation) -{ - switch (operation) { - case ir_binop_add: - case ir_binop_mul: - case ir_binop_bit_and: - case ir_binop_bit_xor: - case ir_binop_bit_or: - case ir_binop_logic_and: - case ir_binop_logic_xor: - case ir_binop_logic_or: - case ir_binop_min: - case ir_binop_max: - return true; - default: - return false; - } -} - -/* Note that this function does not attempt to recognize that reduction trees - * are already balanced. - * - * We return false from this function for a number of reasons other than an - * expression tree not being a mathematical reduction. Namely, - * - * - if the tree contains multiple constants that we may be able to combine. - * - if the tree contains matrices: - * - they might contain vec4's with many constant components that we can - * simplify after splitting. - * - applying the matrix chain ordering optimization is more than just - * balancing an expression tree. - * - if the tree contains operations on multiple types. - * - if the tree contains ir_dereference_{array,record}, since foo[a+b] + c - * would trick the visiting pass. - */ -static void -is_reduction(ir_instruction *ir, void *data) -{ - struct is_reduction_data *ird = (struct is_reduction_data *)data; - if (!ird->is_reduction) - return; - - /* We don't want to balance a tree that contains multiple constants, since - * we'll be able to constant fold them if they're not in separate subtrees. - */ - if (ir->as_constant()) { - if (ird->contains_constant) { - ird->is_reduction = false; - } - ird->contains_constant = true; - return; - } - - /* Array/record dereferences have subtrees that are not part of the expr - * tree we're balancing. Skip trees containing them. - */ - if (ir->ir_type == ir_type_dereference_array || - ir->ir_type == ir_type_dereference_record) { - ird->is_reduction = false; - return; - } - - ir_expression *expr = ir->as_expression(); - if (!expr) - return; - - /* Non-constant matrices might still contain constant vec4 that we can - * constant fold once split up. Handling matrices will need some more - * work. - */ - if (expr->type->is_matrix() || - expr->operands[0]->type->is_matrix() || - (expr->operands[1] && expr->operands[1]->type->is_matrix())) { - ird->is_reduction = false; - return; - } - - if (ird->type != NULL && ird->type != expr->type) { - ird->is_reduction = false; - return; - } - ird->type = expr->type; - - ird->num_expr++; - if (is_reduction_operation(expr->operation)) { - if (ird->operation != 0 && ird->operation != expr->operation) - ird->is_reduction = false; - ird->operation = expr->operation; - } else { - ird->is_reduction = false; - } -} - -static ir_rvalue * -handle_expression(ir_expression *expr) -{ - struct is_reduction_data ird; - ird.operation = (ir_expression_operation)0; - ird.type = NULL; - ird.num_expr = 0; - ird.is_reduction = true; - ird.contains_constant = false; - - visit_tree(expr, is_reduction, (void *)&ird); - - if (ird.is_reduction && ird.num_expr > 2) { - ir_constant z = ir_constant(0.0f); - ir_expression pseudo_root = ir_expression(ir_binop_add, &z, expr); - - unsigned size = tree_to_vine(&pseudo_root); - vine_to_tree(&pseudo_root, size); - - expr = (ir_expression *)pseudo_root.operands[1]; - } - return expr; -} - -static void -update_types(ir_instruction *ir, void *) -{ - ir_expression *expr = ir->as_expression(); - if (!expr) - return; - - const glsl_type *const new_type = - glsl_type::get_instance(expr->type->base_type, - MAX2(expr->operands[0]->type->vector_elements, - expr->operands[1]->type->vector_elements), - 1); - assert(new_type != glsl_type::error_type); - expr->type = new_type; -} - -void -ir_rebalance_visitor::handle_rvalue(ir_rvalue **rvalue) -{ - if (!*rvalue) - return; - - ir_expression *expr = (*rvalue)->as_expression(); - if (!expr || !is_reduction_operation(expr->operation)) - return; - - ir_rvalue *new_rvalue = handle_expression(expr); - - /* If we failed to rebalance the tree (e.g., because it wasn't a reduction, - * or some other set of cases) new_rvalue will point to the same root as - * before. - * - * Similarly, if the tree rooted at *rvalue was a reduction and was already - * balanced, the algorithm will rearrange the tree but will ultimately - * return an identical tree, so this check will handle that as well and - * will not set progress = true. - */ - if (new_rvalue == *rvalue) - return; - - visit_tree(new_rvalue, NULL, NULL, update_types); - - *rvalue = new_rvalue; - this->progress = true; -} - -bool -do_rebalance_tree(exec_list *instructions) -{ - ir_rebalance_visitor v; - - v.run(instructions); - - return v.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_tree_grafting.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_tree_grafting.cpp deleted file mode 100644 index 32f0b85..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/opt_tree_grafting.cpp +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 opt_tree_grafting.cpp - * - * Takes assignments to variables that are dereferenced only once and - * pastes the RHS expression into where the variable is dereferenced. - * - * In the process of various operations like function inlining and - * tertiary op handling, we'll end up with our expression trees having - * been chopped up into a series of assignments of short expressions - * to temps. Other passes like ir_algebraic.cpp would prefer to see - * the deepest expression trees they can to try to optimize them. - * - * This is a lot like copy propagaton. In comparison, copy - * propagation only acts on plain copies, not arbitrary expressions on - * the RHS. Generally, we wouldn't want to go pasting some - * complicated expression everywhere it got used, though, so we don't - * handle expressions in that pass. - * - * The hard part is making sure we don't move an expression across - * some other assignments that would change the value of the - * expression. So we split this into two passes: First, find the - * variables in our scope which are written to once and read once, and - * then go through basic blocks seeing if we find an opportunity to - * move those expressions safely. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_variable_refcount.h" -#include "ir_basic_block.h" -#include "ir_optimization.h" -#include "../glsl_types.h" - -namespace { - -static bool debug = false; - -class ir_tree_grafting_visitor : public ir_hierarchical_visitor { -public: - ir_tree_grafting_visitor(ir_assignment *graft_assign, - ir_variable *graft_var) - { - this->progress = false; - this->graft_assign = graft_assign; - this->graft_var = graft_var; - } - - virtual ir_visitor_status visit_leave(class ir_assignment *); - virtual ir_visitor_status visit_enter(class ir_call *); - virtual ir_visitor_status visit_enter(class ir_expression *); - virtual ir_visitor_status visit_enter(class ir_function *); - virtual ir_visitor_status visit_enter(class ir_function_signature *); - virtual ir_visitor_status visit_enter(class ir_if *); - virtual ir_visitor_status visit_enter(class ir_loop *); - virtual ir_visitor_status visit_enter(class ir_swizzle *); - virtual ir_visitor_status visit_enter(class ir_texture *); - - ir_visitor_status check_graft(ir_instruction *ir, ir_variable *var); - - bool do_graft(ir_rvalue **rvalue); - - bool progress; - ir_variable *graft_var; - ir_assignment *graft_assign; -}; - -struct find_deref_info { - ir_variable *var; - bool found; -}; - -void -dereferences_variable_callback(ir_instruction *ir, void *data) -{ - struct find_deref_info *info = (struct find_deref_info *)data; - ir_dereference_variable *deref = ir->as_dereference_variable(); - - if (deref && deref->var == info->var) - info->found = true; -} - -static bool -dereferences_variable(ir_instruction *ir, ir_variable *var) -{ - struct find_deref_info info; - - info.var = var; - info.found = false; - - visit_tree(ir, dereferences_variable_callback, &info); - - return info.found; -} - -bool -ir_tree_grafting_visitor::do_graft(ir_rvalue **rvalue) -{ - if (!*rvalue) - return false; - - ir_dereference_variable *deref = (*rvalue)->as_dereference_variable(); - - if (!deref || deref->var != this->graft_var) - return false; - - if (debug) { - fprintf(stderr, "GRAFTING:\n"); - this->graft_assign->fprint(stderr); - fprintf(stderr, "\n"); - fprintf(stderr, "TO:\n"); - (*rvalue)->fprint(stderr); - fprintf(stderr, "\n"); - } - - this->graft_assign->remove(); - *rvalue = this->graft_assign->rhs; - - this->progress = true; - return true; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_loop *ir) -{ - (void)ir; - /* Do not traverse into the body of the loop since that is a - * different basic block. - */ - return visit_stop; -} - -/** - * Check if we can continue grafting after writing to a variable. If the - * expression we're trying to graft references the variable, we must stop. - * - * \param ir An instruction that writes to a variable. - * \param var The variable being updated. - */ -ir_visitor_status -ir_tree_grafting_visitor::check_graft(ir_instruction *ir, ir_variable *var) -{ - if (dereferences_variable(this->graft_assign->rhs, var)) { - if (debug) { - fprintf(stderr, "graft killed by: "); - ir->fprint(stderr); - fprintf(stderr, "\n"); - } - return visit_stop; - } - - return visit_continue; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_leave(ir_assignment *ir) -{ - if (do_graft(&ir->rhs)) - return visit_stop; - - /* If this assignment updates a variable used in the assignment - * we're trying to graft, then we're done. - */ - return check_graft(ir, ir->lhs->variable_referenced()); -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_function *ir) -{ - (void) ir; - return visit_continue_with_parent; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_function_signature *ir) -{ - (void)ir; - return visit_continue_with_parent; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_call *ir) -{ - foreach_two_lists(formal_node, &ir->callee->parameters, - actual_node, &ir->actual_parameters) { - ir_variable *sig_param = (ir_variable *) formal_node; - ir_rvalue *ir = (ir_rvalue *) actual_node; - ir_rvalue *new_ir = ir; - - if (sig_param->data.mode != ir_var_function_in - && sig_param->data.mode != ir_var_const_in) { - if (check_graft(ir, sig_param) == visit_stop) - return visit_stop; - continue; - } - - if (do_graft(&new_ir)) { - ir->replace_with(new_ir); - return visit_stop; - } - } - - if (ir->return_deref && check_graft(ir, ir->return_deref->var) == visit_stop) - return visit_stop; - - return visit_continue; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_expression *ir) -{ - for (unsigned int i = 0; i < ir->num_operands; i++) { - if (do_graft(&ir->operands[i])) - return visit_stop; - } - - return visit_continue; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_if *ir) -{ - if (do_graft(&ir->condition)) - return visit_stop; - - /* Do not traverse into the body of the if-statement since that is a - * different basic block. - */ - return visit_continue_with_parent; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_swizzle *ir) -{ - if (do_graft(&ir->val)) - return visit_stop; - - return visit_continue; -} - -ir_visitor_status -ir_tree_grafting_visitor::visit_enter(ir_texture *ir) -{ - if (do_graft(&ir->coordinate) || - do_graft(&ir->projector) || - do_graft(&ir->offset) || - do_graft(&ir->shadow_comparator) || - do_graft(&ir->clamp)) - return visit_stop; - - switch (ir->op) { - case ir_tex: - case ir_lod: - case ir_query_levels: - case ir_texture_samples: - case ir_samples_identical: - break; - case ir_txb: - if (do_graft(&ir->lod_info.bias)) - return visit_stop; - break; - case ir_txf: - case ir_txl: - case ir_txs: - if (do_graft(&ir->lod_info.lod)) - return visit_stop; - break; - case ir_txf_ms: - if (do_graft(&ir->lod_info.sample_index)) - return visit_stop; - break; - case ir_txd: - if (do_graft(&ir->lod_info.grad.dPdx) || - do_graft(&ir->lod_info.grad.dPdy)) - return visit_stop; - break; - case ir_tg4: - if (do_graft(&ir->lod_info.component)) - return visit_stop; - break; - } - - return visit_continue; -} - -struct tree_grafting_info { - ir_variable_refcount_visitor *refs; - bool progress; -}; - -static bool -try_tree_grafting(ir_assignment *start, - ir_variable *lhs_var, - ir_instruction *bb_last) -{ - ir_tree_grafting_visitor v(start, lhs_var); - - if (debug) { - fprintf(stderr, "trying to graft: "); - lhs_var->fprint(stderr); - fprintf(stderr, "\n"); - } - - for (ir_instruction *ir = (ir_instruction *)start->next; - ir != bb_last->next; - ir = (ir_instruction *)ir->next) { - - if (debug) { - fprintf(stderr, "- "); - ir->fprint(stderr); - fprintf(stderr, "\n"); - } - - ir_visitor_status s = ir->accept(&v); - if (s == visit_stop) - return v.progress; - } - - return false; -} - -static void -tree_grafting_basic_block(ir_instruction *bb_first, - ir_instruction *bb_last, - void *data) -{ - struct tree_grafting_info *info = (struct tree_grafting_info *)data; - ir_instruction *ir, *next; - - for (ir = bb_first, next = (ir_instruction *)ir->next; - ir != bb_last->next; - ir = next, next = (ir_instruction *)ir->next) { - ir_assignment *assign = ir->as_assignment(); - - if (!assign) - continue; - - ir_variable *lhs_var = assign->whole_variable_written(); - if (!lhs_var) - continue; - - if (lhs_var->data.mode == ir_var_function_out || - lhs_var->data.mode == ir_var_function_inout || - lhs_var->data.mode == ir_var_shader_out || - lhs_var->data.mode == ir_var_shader_storage || - lhs_var->data.mode == ir_var_shader_shared) - continue; - - if (lhs_var->data.precise) - continue; - - /* Do not graft sampler and image variables. This is a workaround to - * st/glsl_to_tgsi being unable to handle expression parameters to image - * intrinsics. - * - * Note that if this is ever fixed, we still need to skip grafting when - * any image layout qualifiers (including the image format) are set, - * since we must not lose those. - */ - if (lhs_var->type->is_sampler() || lhs_var->type->is_image()) - continue; - - ir_variable_refcount_entry *entry = info->refs->get_variable_entry(lhs_var); - - if (!entry->declaration || - entry->assigned_count != 1 || - entry->referenced_count != 2) - continue; - - /* Found a possibly graftable assignment. Now, walk through the - * rest of the BB seeing if the deref is here, and if nothing interfered with - * pasting its expression's values in between. - */ - info->progress |= try_tree_grafting(assign, lhs_var, bb_last); - } -} - -} /* unnamed namespace */ - -/** - * Does a copy propagation pass on the code present in the instruction stream. - */ -bool -do_tree_grafting(exec_list *instructions) -{ - ir_variable_refcount_visitor refs; - struct tree_grafting_info info; - - info.progress = false; - info.refs = &refs; - - visit_list_elements(info.refs, instructions); - - call_for_basic_blocks(instructions, tree_grafting_basic_block, &info); - - return info.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/program.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/program.h deleted file mode 100644 index 8429d08..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/program.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. All Rights Reserved. - * Copyright © 2010 Intel Corporation - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_PROGRAM_H -#define GLSL_PROGRAM_H - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; -struct gl_shader; -struct gl_shader_program; - -extern void -_mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, - bool dump_ast, bool dump_hir, bool force_recompile); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -extern void -link_shaders(struct gl_context *ctx, struct gl_shader_program *prog); - -#endif /* GLSL_PROGRAM_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/propagate_invariance.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/propagate_invariance.cpp deleted file mode 100644 index ab8ae79..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/propagate_invariance.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 propagate_invariance.cpp - * Propagate the "invariant" and "precise" qualifiers to variables used to - * compute invariant or precise values. - * - * The GLSL spec (depending on what version you read) says, among the - * conditions for getting bit-for-bit the same values on an invariant output: - * - * "All operations in the consuming expressions and any intermediate - * expressions must be the same, with the same order of operands and same - * associativity, to give the same order of evaluation." - * - * This effectively means that if a variable is used to compute an invariant - * value then that variable becomes invariant. The same should apply to the - * "precise" qualifier. - */ - -#include "ir.h" -#include "ir_visitor.h" -#include "ir_rvalue_visitor.h" -#include "ir_optimization.h" -#include "../glsl_types.h" - -namespace { - -class ir_invariance_propagation_visitor : public ir_hierarchical_visitor { -public: - ir_invariance_propagation_visitor() - { - this->progress = false; - this->dst_var = NULL; - } - - virtual ~ir_invariance_propagation_visitor() - { - /* empty */ - } - - virtual ir_visitor_status visit_enter(ir_assignment *ir); - virtual ir_visitor_status visit_leave(ir_assignment *ir); - virtual ir_visitor_status visit(ir_dereference_variable *ir); - - ir_variable *dst_var; - bool progress; -}; - -} /* unnamed namespace */ - -ir_visitor_status -ir_invariance_propagation_visitor::visit_enter(ir_assignment *ir) -{ - assert(this->dst_var == NULL); - ir_variable *var = ir->lhs->variable_referenced(); - if (var->data.invariant || var->data.precise) { - this->dst_var = var; - return visit_continue; - } else { - return visit_continue_with_parent; - } -} - -ir_visitor_status -ir_invariance_propagation_visitor::visit_leave(ir_assignment *) -{ - this->dst_var = NULL; - - return visit_continue; -} - -ir_visitor_status -ir_invariance_propagation_visitor::visit(ir_dereference_variable *ir) -{ - if (this->dst_var == NULL) - return visit_continue; - - if (this->dst_var->data.invariant) { - if (!ir->var->data.invariant) - this->progress = true; - - ir->var->data.invariant = true; - } - - if (this->dst_var->data.precise) { - if (!ir->var->data.precise) - this->progress = true; - - ir->var->data.precise = true; - } - - return visit_continue; -} - -bool -propagate_invariance(exec_list *instructions) -{ - ir_invariance_propagation_visitor visitor; - bool progress = false; - - do { - visitor.progress = false; - visit_list_elements(&visitor, instructions); - progress = progress || visitor.progress; - } while (visitor.progress); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/s_expression.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/s_expression.cpp deleted file mode 100644 index 62daab4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/s_expression.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include -#include -#include -#include "s_expression.h" - -s_symbol::s_symbol(const char *str, size_t n) -{ - /* Assume the given string is already nul-terminated and in memory that - * will live as long as this node. - */ - assert(str[n] == '\0'); - this->str = str; -} - -s_list::s_list() -{ -} - -static void -skip_whitespace(const char *&src, char *&symbol_buffer) -{ - size_t n = strspn(src, " \v\t\r\n"); - src += n; - symbol_buffer += n; - /* Also skip Scheme-style comments: semi-colon 'til end of line */ - if (src[0] == ';') { - n = strcspn(src, "\n"); - src += n; - symbol_buffer += n; - skip_whitespace(src, symbol_buffer); - } -} - -static s_expression * -read_atom(void *ctx, const char *&src, char *&symbol_buffer) -{ - s_expression *expr = NULL; - - skip_whitespace(src, symbol_buffer); - - size_t n = strcspn(src, "( \v\t\r\n);"); - if (n == 0) - return NULL; // no atom - - // Check for the special symbol '+INF', which means +Infinity. Note: C99 - // requires strtof to parse '+INF' as +Infinity, but we still support some - // non-C99-compliant compilers (e.g. MSVC). - if (n == 4 && strncmp(src, "+INF", 4) == 0) { - expr = new(ctx) s_float(INFINITY); - } else { - // Check if the atom is a number. - char *float_end = NULL; - float f = _mesa_strtof(src, &float_end); - if (float_end != src) { - char *int_end = NULL; - int i = strtol(src, &int_end, 10); - // If strtof matched more characters, it must have a decimal part - if (float_end > int_end) - expr = new(ctx) s_float(f); - else - expr = new(ctx) s_int(i); - } else { - // Not a number; return a symbol. - symbol_buffer[n] = '\0'; - expr = new(ctx) s_symbol(symbol_buffer, n); - } - } - - src += n; - symbol_buffer += n; - - return expr; -} - -static s_expression * -__read_expression(void *ctx, const char *&src, char *&symbol_buffer) -{ - s_expression *atom = read_atom(ctx, src, symbol_buffer); - if (atom != NULL) - return atom; - - skip_whitespace(src, symbol_buffer); - if (src[0] == '(') { - ++src; - ++symbol_buffer; - - s_list *list = new(ctx) s_list; - s_expression *expr; - - while ((expr = __read_expression(ctx, src, symbol_buffer)) != NULL) { - list->subexpressions.push_tail(expr); - } - skip_whitespace(src, symbol_buffer); - if (src[0] != ')') { - printf("Unclosed expression (check your parenthesis).\n"); - return NULL; - } - ++src; - ++symbol_buffer; - return list; - } - return NULL; -} - -s_expression * -s_expression::read_expression(void *ctx, const char *&src) -{ - assert(src != NULL); - - /* When we encounter a Symbol, we need to save a nul-terminated copy of - * the string. However, ralloc_strndup'ing every individual Symbol is - * extremely expensive. We could avoid this by simply overwriting the - * next character (guaranteed to be whitespace, parens, or semicolon) with - * a nul-byte. But overwriting non-whitespace would mess up parsing. - * - * So, just copy the whole buffer ahead of time. Walk both, leaving the - * original source string unmodified, and altering the copy to contain the - * necessary nul-bytes whenever we encounter a symbol. - */ - char *symbol_buffer = ralloc_strdup(ctx, src); - return __read_expression(ctx, src, symbol_buffer); -} - -void s_int::print() -{ - printf("%d", this->val); -} - -void s_float::print() -{ - printf("%f", this->val); -} - -void s_symbol::print() -{ - printf("%s", this->str); -} - -void s_list::print() -{ - printf("("); - foreach_in_list(s_expression, expr, &this->subexpressions) { - expr->print(); - if (!expr->next->is_tail_sentinel()) - printf(" "); - } - printf(")"); -} - -// -------------------------------------------------- - -bool -s_pattern::match(s_expression *expr) -{ - switch (type) - { - case EXPR: *p_expr = expr; break; - case LIST: if (expr->is_list()) *p_list = (s_list *) expr; break; - case SYMBOL: if (expr->is_symbol()) *p_symbol = (s_symbol *) expr; break; - case NUMBER: if (expr->is_number()) *p_number = (s_number *) expr; break; - case INT: if (expr->is_int()) *p_int = (s_int *) expr; break; - case STRING: - s_symbol *sym = SX_AS_SYMBOL(expr); - if (sym != NULL && strcmp(sym->value(), literal) == 0) - return true; - return false; - }; - - return *p_expr == expr; -} - -bool -s_match(s_expression *top, unsigned n, s_pattern *pattern, bool partial) -{ - s_list *list = SX_AS_LIST(top); - if (list == NULL) - return false; - - unsigned i = 0; - foreach_in_list(s_expression, expr, &list->subexpressions) { - if (i >= n) - return partial; /* More actual items than the pattern expected */ - - if (expr == NULL || !pattern[i].match(expr)) - return false; - - i++; - } - - if (i < n) - return false; /* Less actual items than the pattern expected */ - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/s_expression.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/s_expression.h deleted file mode 100644 index 8c106c4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/s_expression.h +++ /dev/null @@ -1,178 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef S_EXPRESSION_H -#define S_EXPRESSION_H - -#include "../../util/strtod.h" -#include "list.h" - -/* Type-safe downcasting macros (also safe to pass NULL) */ -#define SX_AS_(t,x) ((x) && ((s_expression*) x)->is_##t()) ? ((s_##t*) (x)) \ - : NULL -#define SX_AS_LIST(x) SX_AS_(list, x) -#define SX_AS_SYMBOL(x) SX_AS_(symbol, x) -#define SX_AS_NUMBER(x) SX_AS_(number, x) -#define SX_AS_INT(x) SX_AS_(int, x) - -/* Pattern matching macros */ -#define MATCH(list, pat) s_match(list, ARRAY_SIZE(pat), pat, false) -#define PARTIAL_MATCH(list, pat) s_match(list, ARRAY_SIZE(pat), pat, true) - -/* For our purposes, S-Expressions are: - * - - * - - * - symbol - * - (expr1 expr2 ... exprN) where exprN is an S-Expression - * - * Unlike LISP/Scheme, we do not support (foo . bar) pairs. - */ -class s_expression : public exec_node -{ -public: - /** - * Read an S-Expression from the given string. - * Advances the supplied pointer to just after the expression read. - * - * Any allocation will be performed with 'ctx' as the ralloc owner. - */ - static s_expression *read_expression(void *ctx, const char *&src); - - /** - * Print out an S-Expression. Useful for debugging. - */ - virtual void print() = 0; - - virtual bool is_list() const { return false; } - virtual bool is_symbol() const { return false; } - virtual bool is_number() const { return false; } - virtual bool is_int() const { return false; } - -protected: - s_expression() { } -}; - -/* Atoms */ - -class s_number : public s_expression -{ -public: - bool is_number() const { return true; } - - virtual float fvalue() = 0; - -protected: - s_number() { } -}; - -class s_int : public s_number -{ -public: - s_int(int x) : val(x) { } - - bool is_int() const { return true; } - - float fvalue() { return float(this->val); } - int value() { return this->val; } - - void print(); - -private: - int val; -}; - -class s_float : public s_number -{ -public: - s_float(float x) : val(x) { } - - float fvalue() { return this->val; } - - void print(); - -private: - float val; -}; - -class s_symbol : public s_expression -{ -public: - s_symbol(const char *, size_t); - - bool is_symbol() const { return true; } - - const char *value() { return this->str; } - - void print(); - -private: - const char *str; -}; - -/* Lists of expressions: (expr1 ... exprN) */ -class s_list : public s_expression -{ -public: - s_list(); - - virtual bool is_list() const { return true; } - - void print(); - - exec_list subexpressions; -}; - -// ------------------------------------------------------------ - -/** - * Part of a pattern to match - essentially a record holding a pointer to the - * storage for the component to match, along with the appropriate type. - */ -class s_pattern { -public: - s_pattern(s_expression *&s) : p_expr(&s), type(EXPR) { } - s_pattern(s_list *&s) : p_list(&s), type(LIST) { } - s_pattern(s_symbol *&s) : p_symbol(&s), type(SYMBOL) { } - s_pattern(s_number *&s) : p_number(&s), type(NUMBER) { } - s_pattern(s_int *&s) : p_int(&s), type(INT) { } - s_pattern(const char *str) : literal(str), type(STRING) { } - - bool match(s_expression *expr); - -private: - union { - s_expression **p_expr; - s_list **p_list; - s_symbol **p_symbol; - s_number **p_number; - s_int **p_int; - const char *literal; - }; - enum { EXPR, LIST, SYMBOL, NUMBER, INT, STRING } type; -}; - -bool -s_match(s_expression *top, unsigned n, s_pattern *pattern, bool partial); - -#endif /* S_EXPRESSION_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/standalone_scaffolding.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/standalone_scaffolding.cpp deleted file mode 100644 index 8a4c99a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/standalone_scaffolding.cpp +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* This file declares stripped-down versions of functions that - * normally exist outside of the glsl folder, so that they can be used - * when running the GLSL compiler standalone (for unit testing or - * compiling builtins). - */ - -#include "standalone_scaffolding.h" - -#include -#include -#include -#include "../../util/ralloc.h" -#include "../../util/strtod.h" -#include "../../mesa/main/mtypes.h" -#include "string_to_uint_map.h" - - -void -_mesa_reference_shader_program_data(struct gl_shader_program_data **ptr, - struct gl_shader_program_data *data) -{ - *ptr = data; -} - - -void -_mesa_reference_program_(struct gl_context *ctx, struct gl_program **ptr, - struct gl_program *prog) -{ - (void) ctx; - *ptr = prog; -} - - - -struct gl_shader * -_mesa_new_shader(GLuint name, gl_shader_stage stage) -{ - struct gl_shader *shader; - - assert(stage == MESA_SHADER_FRAGMENT || stage == MESA_SHADER_VERTEX); - shader = rzalloc(NULL, struct gl_shader); - if (shader) { - shader->Stage = stage; - shader->Name = name; - shader->RefCount = 1; - } - return shader; -} - -GLbitfield -_mesa_program_state_flags(UNUSED const gl_state_index16 state[STATE_LENGTH]) -{ - return 0; -} - -char * -_mesa_program_state_string(UNUSED const gl_state_index16 state[STATE_LENGTH]) -{ - return NULL; -} - -void -_mesa_delete_shader(struct gl_context *, struct gl_shader *sh) -{ - free((void *)sh->Source); - free(sh->Label); - ralloc_free(sh); -} - -void -_mesa_delete_linked_shader(struct gl_context *, - struct gl_linked_shader *sh) -{ - ralloc_free(sh->Program); - ralloc_free(sh); -} - -void -_mesa_clear_shader_program_data(struct gl_context *ctx, - struct gl_shader_program *shProg) -{ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (shProg->_LinkedShaders[i] != NULL) { - _mesa_delete_linked_shader(ctx, shProg->_LinkedShaders[i]); - shProg->_LinkedShaders[i] = NULL; - } - } - - shProg->data->NumUniformStorage = 0; - shProg->data->UniformStorage = NULL; - shProg->NumUniformRemapTable = 0; - shProg->UniformRemapTable = NULL; - shProg->UniformHash = NULL; - - ralloc_free(shProg->data->InfoLog); - shProg->data->InfoLog = ralloc_strdup(shProg->data, ""); - - ralloc_free(shProg->data->UniformBlocks); - shProg->data->UniformBlocks = NULL; - shProg->data->NumUniformBlocks = 0; - - ralloc_free(shProg->data->ShaderStorageBlocks); - shProg->data->ShaderStorageBlocks = NULL; - shProg->data->NumShaderStorageBlocks = 0; - - ralloc_free(shProg->data->AtomicBuffers); - shProg->data->AtomicBuffers = NULL; - shProg->data->NumAtomicBuffers = 0; -} - - -static void -init_gl_program(struct gl_program *prog, bool is_arb_asm, gl_shader_stage stage) -{ - prog->RefCount = 1; - prog->Format = GL_PROGRAM_FORMAT_ASCII_ARB; - prog->info.use_legacy_math_rules = is_arb_asm; - prog->info.stage = stage; -} - -static struct gl_program * -standalone_new_program(UNUSED struct gl_context *ctx, gl_shader_stage stage, - UNUSED GLuint id, bool is_arb_asm) -{ - struct gl_program *prog = rzalloc(NULL, struct gl_program); - init_gl_program(prog, is_arb_asm, stage); - return prog; -} - -void initialize_context_to_defaults(struct gl_context *ctx, gl_api api) -{ - memset(ctx, 0, sizeof(*ctx)); - - ctx->API = api; - - ctx->Extensions.dummy_true = true; - ctx->Extensions.ARB_compute_shader = true; - ctx->Extensions.ARB_compute_variable_group_size = true; - ctx->Extensions.ARB_conservative_depth = true; - ctx->Extensions.ARB_draw_instanced = true; - ctx->Extensions.ARB_ES2_compatibility = true; - ctx->Extensions.ARB_ES3_compatibility = true; - ctx->Extensions.ARB_explicit_attrib_location = true; - ctx->Extensions.ARB_fragment_coord_conventions = true; - ctx->Extensions.ARB_fragment_layer_viewport = true; - ctx->Extensions.ARB_gpu_shader5 = true; - ctx->Extensions.ARB_gpu_shader_fp64 = true; - ctx->Extensions.ARB_gpu_shader_int64 = true; - ctx->Extensions.ARB_sample_shading = true; - ctx->Extensions.ARB_shader_bit_encoding = true; - ctx->Extensions.ARB_shader_draw_parameters = true; - ctx->Extensions.ARB_shader_stencil_export = true; - ctx->Extensions.ARB_shader_texture_lod = true; - ctx->Extensions.ARB_shading_language_420pack = true; - ctx->Extensions.ARB_shading_language_packing = true; - ctx->Extensions.ARB_tessellation_shader = true; - ctx->Extensions.ARB_texture_cube_map_array = true; - ctx->Extensions.ARB_texture_gather = true; - ctx->Extensions.ARB_texture_multisample = true; - ctx->Extensions.ARB_texture_query_levels = true; - ctx->Extensions.ARB_texture_query_lod = true; - ctx->Extensions.ARB_uniform_buffer_object = true; - ctx->Extensions.ARB_viewport_array = true; - ctx->Extensions.ARB_cull_distance = true; - ctx->Extensions.ARB_bindless_texture = true; - - ctx->Extensions.OES_EGL_image_external = true; - ctx->Extensions.OES_standard_derivatives = true; - ctx->Extensions.OES_texture_3D = true; - - ctx->Extensions.EXT_gpu_shader4 = true; - ctx->Extensions.EXT_shader_integer_mix = true; - ctx->Extensions.EXT_texture_array = true; - - ctx->Extensions.MESA_shader_integer_functions = true; - - ctx->Extensions.NV_texture_rectangle = true; - - ctx->Const.GLSLVersion = 120; - - /* 1.20 minimums. */ - ctx->Const.MaxLights = 8; - ctx->Const.MaxClipPlanes = 6; - ctx->Const.MaxTextureUnits = 2; - ctx->Const.MaxTextureCoordUnits = 2; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs = 16; - - ctx->Const.Program[MESA_SHADER_VERTEX].MaxUniformComponents = 512; - ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents = 32; - ctx->Const.MaxVarying = 8; /* == gl_MaxVaryingFloats / 4 */ - ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits = 0; - ctx->Const.MaxCombinedTextureImageUnits = 2; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits = 2; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxUniformComponents = 64; - ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents = 32; - - ctx->Const.MaxDrawBuffers = 1; - ctx->Const.MaxComputeWorkGroupCount[0] = 65535; - ctx->Const.MaxComputeWorkGroupCount[1] = 65535; - ctx->Const.MaxComputeWorkGroupCount[2] = 65535; - ctx->Const.MaxComputeWorkGroupSize[0] = 1024; - ctx->Const.MaxComputeWorkGroupSize[1] = 1024; - ctx->Const.MaxComputeWorkGroupSize[2] = 64; - ctx->Const.MaxComputeWorkGroupInvocations = 1024; - ctx->Const.MaxComputeVariableGroupSize[0] = 512; - ctx->Const.MaxComputeVariableGroupSize[1] = 512; - ctx->Const.MaxComputeVariableGroupSize[2] = 64; - ctx->Const.MaxComputeVariableGroupInvocations = 512; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxTextureImageUnits = 16; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxUniformComponents = 1024; - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxInputComponents = 0; /* not used */ - ctx->Const.Program[MESA_SHADER_COMPUTE].MaxOutputComponents = 0; /* not used */ - - /* Set up default shader compiler options. */ - struct gl_shader_compiler_options options; - memset(&options, 0, sizeof(options)); - options.MaxIfDepth = UINT_MAX; - - for (int sh = 0; sh < MESA_SHADER_STAGES; ++sh) - memcpy(&ctx->Const.ShaderCompilerOptions[sh], &options, sizeof(options)); - - _mesa_locale_init(); - - ctx->Driver.NewProgram = standalone_new_program; -} - -struct gl_shader_program * -standalone_create_shader_program(void) -{ - struct gl_shader_program *whole_program; - - whole_program = rzalloc (NULL, struct gl_shader_program); - assert(whole_program != NULL); - whole_program->data = rzalloc(whole_program, struct gl_shader_program_data); - assert(whole_program->data != NULL); - whole_program->data->InfoLog = ralloc_strdup(whole_program->data, ""); - - /* Created just to avoid segmentation faults */ - whole_program->AttributeBindings = new string_to_uint_map; - whole_program->FragDataBindings = new string_to_uint_map; - whole_program->FragDataIndexBindings = new string_to_uint_map; - - return whole_program; -} - -void -standalone_destroy_shader_program(struct gl_shader_program *whole_program) -{ - for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { - if (whole_program->_LinkedShaders[i]) - _mesa_delete_linked_shader(NULL, whole_program->_LinkedShaders[i]); - } - - delete whole_program->AttributeBindings; - delete whole_program->FragDataBindings; - delete whole_program->FragDataIndexBindings; - delete whole_program->UniformHash; - - ralloc_free(whole_program); -} - -struct gl_shader * -standalone_add_shader_source(struct gl_context *ctx, struct gl_shader_program *whole_program, GLenum type, const char *source) -{ - struct gl_shader *shader = rzalloc(whole_program, gl_shader); - shader->Type = type; - shader->Stage = _mesa_shader_enum_to_shader_stage(type); - shader->Source = source; - - whole_program->Shaders = reralloc(whole_program, whole_program->Shaders, - struct gl_shader *, whole_program->NumShaders + 1); - assert(whole_program->Shaders != NULL); - - whole_program->Shaders[whole_program->NumShaders] = shader; - whole_program->NumShaders++; - - return shader; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/standalone_scaffolding.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/standalone_scaffolding.h deleted file mode 100644 index 1d6989b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/standalone_scaffolding.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* This file declares stripped-down versions of functions that - * normally exist outside of the glsl folder, so that they can be used - * when running the GLSL compiler standalone (for unit testing or - * compiling builtins). - */ - -#ifndef STANDALONE_SCAFFOLDING_H -#define STANDALONE_SCAFFOLDING_H - -#include -#include "../../mesa/main/menums.h" -#include "../../mesa/program/prog_statevars.h" - - -extern "C" void -_mesa_reference_shader_program_data(struct gl_shader_program_data **ptr, - struct gl_shader_program_data *data); - -extern "C" void -_mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, - struct gl_shader *sh); - -extern "C" void -_mesa_reference_program_(struct gl_context *ctx, struct gl_program **ptr, - struct gl_program *prog); - -extern "C" struct gl_shader * -_mesa_new_shader(GLuint name, gl_shader_stage stage); - -extern "C" void -_mesa_delete_shader(struct gl_context *ctx, struct gl_shader *sh); - -extern "C" void -_mesa_delete_linked_shader(struct gl_context *ctx, - struct gl_linked_shader *sh); - -extern "C" void -_mesa_clear_shader_program_data(struct gl_context *ctx, - struct gl_shader_program *); - -extern "C" void -_mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint *id, - const char *msg); - -extern "C" GLbitfield -_mesa_program_state_flags(const gl_state_index16 state[STATE_LENGTH]); - - -extern "C" char * -_mesa_program_state_string(const gl_state_index16 state[STATE_LENGTH]); - -static inline gl_shader_stage -_mesa_shader_enum_to_shader_stage(GLenum v) -{ - switch (v) { - case GL_VERTEX_SHADER: - return MESA_SHADER_VERTEX; - case GL_FRAGMENT_SHADER: - return MESA_SHADER_FRAGMENT; - case GL_GEOMETRY_SHADER: - return MESA_SHADER_GEOMETRY; - case GL_TESS_CONTROL_SHADER: - return MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_SHADER: - return MESA_SHADER_TESS_EVAL; - case GL_COMPUTE_SHADER: - return MESA_SHADER_COMPUTE; - default: - assert(!"bad value in _mesa_shader_enum_to_shader_stage()"); - return MESA_SHADER_VERTEX; - } -} - -/** - * Initialize the given gl_context structure to a reasonable set of - * defaults representing the minimum capabilities required by the - * OpenGL spec. - * - * This is used when compiling builtin functions and in testing, when - * we don't have a connection to an actual driver. - */ -void initialize_context_to_defaults(struct gl_context *ctx, gl_api api); - -struct gl_shader_program * -standalone_create_shader_program(void); -void -standalone_destroy_shader_program(struct gl_shader_program *whole_program); -struct gl_shader * -standalone_add_shader_source(struct gl_context *ctx, struct gl_shader_program *whole_program, GLenum type, const char *source); - -#endif /* STANDALONE_SCAFFOLDING_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/string_to_uint_map.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/string_to_uint_map.cpp deleted file mode 100644 index 777d00c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/string_to_uint_map.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright © 2011 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 string_to_uint_map.cpp - * \brief Dumb wrapprs so that C code can create and destroy maps. - * - * \author Ian Romanick - */ -#include "string_to_uint_map.h" - -extern "C" struct string_to_uint_map * -string_to_uint_map_ctor() -{ - return new string_to_uint_map; -} - -extern "C" void -string_to_uint_map_dtor(struct string_to_uint_map *map) -{ - delete map; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/string_to_uint_map.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/string_to_uint_map.h deleted file mode 100644 index 988f7e8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl/string_to_uint_map.h +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright © 2008 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#ifndef STRING_TO_UINT_MAP_H -#define STRING_TO_UINT_MAP_H - -#include -#include -#include "../../util/hash_table.h" - -struct string_to_uint_map; - -#ifdef __cplusplus -extern "C" { -#endif - -struct string_to_uint_map * -string_to_uint_map_ctor(); - -void -string_to_uint_map_dtor(struct string_to_uint_map *); - - -#ifdef __cplusplus -} - -struct string_map_iterate_wrapper_closure { - void (*callback)(const char *key, unsigned value, void *closure); - void *closure; -}; - -/** - * Map from a string (name) to an unsigned integer value - * - * \note - * Because of the way this class interacts with the \c hash_table - * implementation, values of \c UINT_MAX cannot be stored in the map. - */ -struct string_to_uint_map { -public: - string_to_uint_map() - { - this->ht = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - } - - ~string_to_uint_map() - { - hash_table_call_foreach(this->ht, delete_key, NULL); - _mesa_hash_table_destroy(this->ht, NULL); - } - - /** - * Remove all mappings from this map. - */ - void clear() - { - hash_table_call_foreach(this->ht, delete_key, NULL); - _mesa_hash_table_clear(this->ht, NULL); - } - - /** - * Runs a passed callback for the hash - */ - void iterate(void (*func)(const char *, unsigned, void *), void *closure) - { - struct string_map_iterate_wrapper_closure *wrapper; - - wrapper = (struct string_map_iterate_wrapper_closure *) - malloc(sizeof(struct string_map_iterate_wrapper_closure)); - if (wrapper == NULL) - return; - - wrapper->callback = func; - wrapper->closure = closure; - - hash_table_call_foreach(this->ht, subtract_one_wrapper, wrapper); - free(wrapper); - } - - /** - * Get the value associated with a particular key - * - * \return - * If \c key is found in the map, \c true is returned. Otherwise \c false - * is returned. - * - * \note - * If \c key is not found in the table, \c value is not modified. - */ - bool get(unsigned &value, const char *key) - { - hash_entry *entry = _mesa_hash_table_search(this->ht, - (const void *) key); - - if (!entry) - return false; - - const intptr_t v = (intptr_t) entry->data; - value = (unsigned)(v - 1); - return true; - } - - void put(unsigned value, const char *key) - { - /* The low-level hash table structure returns NULL if key is not in the - * hash table. However, users of this map might want to store zero as a - * valid value in the table. Bias the value by +1 so that a - * user-specified zero is stored as 1. This enables ::get to tell the - * difference between a user-specified zero (returned as 1 by - * _mesa_hash_table_search) and the key not in the table (returned as 0 by - * _mesa_hash_table_search). - * - * The net effect is that we can't store UINT_MAX in the table. This is - * because UINT_MAX+1 = 0. - */ - assert(value != UINT_MAX); - char *dup_key = strdup(key); - - struct hash_entry *entry = _mesa_hash_table_search(this->ht, dup_key); - if (entry) { - entry->data = (void *) (intptr_t) (value + 1); - } else { - _mesa_hash_table_insert(this->ht, dup_key, - (void *) (intptr_t) (value + 1)); - } - - if (entry) - free(dup_key); - } - -private: - static void delete_key(const void *key, void *data, void *closure) - { - (void) data; - (void) closure; - - free((char *)key); - } - - static void subtract_one_wrapper(const void *key, void *data, void *closure) - { - struct string_map_iterate_wrapper_closure *wrapper = - (struct string_map_iterate_wrapper_closure *) closure; - unsigned value = (intptr_t) data; - - value -= 1; - - wrapper->callback((const char *) key, value, wrapper->closure); - } - - struct hash_table *ht; -}; - -#endif /* __cplusplus */ -#endif /* STRING_TO_UINT_MAP_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl_types.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl_types.cpp deleted file mode 100644 index 97a95a9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl_types.cpp +++ /dev/null @@ -1,3419 +0,0 @@ -/* - * Copyright © 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include "../util/macros.h" -#include "./glsl/glsl_parser_extras.h" -#include "glsl_types.h" -#include "../util/hash_table.h" -#include "../util/u_string.h" - - -simple_mtx_t glsl_type::hash_mutex = SIMPLE_MTX_INITIALIZER; -hash_table *glsl_type::explicit_matrix_types = NULL; -hash_table *glsl_type::array_types = NULL; -hash_table *glsl_type::struct_types = NULL; -hash_table *glsl_type::interface_types = NULL; -hash_table *glsl_type::function_types = NULL; -hash_table *glsl_type::subroutine_types = NULL; - -/* There might be multiple users for types (e.g. application using OpenGL - * and Vulkan simultaneously or app using multiple Vulkan instances). Counter - * is used to make sure we don't release the types if a user is still present. - */ -static uint32_t glsl_type_users = 0; - -glsl_type::glsl_type(GLenum gl_type, - glsl_base_type base_type, unsigned vector_elements, - unsigned matrix_columns, const char *name, - unsigned explicit_stride, bool row_major, - unsigned explicit_alignment) : - gl_type(gl_type), - base_type(base_type), sampled_type(GLSL_TYPE_VOID), - sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), - interface_packing(0), interface_row_major(row_major), packed(0), - vector_elements(vector_elements), matrix_columns(matrix_columns), - length(0), explicit_stride(explicit_stride), - explicit_alignment(explicit_alignment) -{ - /* Values of these types must fit in the two bits of - * glsl_type::sampled_type. - */ - STATIC_ASSERT((unsigned(GLSL_TYPE_UINT) & 3) == unsigned(GLSL_TYPE_UINT)); - STATIC_ASSERT((unsigned(GLSL_TYPE_INT) & 3) == unsigned(GLSL_TYPE_INT)); - STATIC_ASSERT((unsigned(GLSL_TYPE_FLOAT) & 3) == unsigned(GLSL_TYPE_FLOAT)); - - ASSERT_BITFIELD_SIZE(glsl_type, base_type, GLSL_TYPE_ERROR); - ASSERT_BITFIELD_SIZE(glsl_type, sampled_type, GLSL_TYPE_ERROR); - ASSERT_BITFIELD_SIZE(glsl_type, sampler_dimensionality, - GLSL_SAMPLER_DIM_SUBPASS_MS); - - this->mem_ctx = ralloc_context(NULL); - assert(this->mem_ctx != NULL); - - assert(name != NULL); - this->name = ralloc_strdup(this->mem_ctx, name); - - /* Neither dimension is zero or both dimensions are zero. - */ - assert((vector_elements == 0) == (matrix_columns == 0)); - assert(util_is_power_of_two_or_zero(explicit_alignment)); - memset(& fields, 0, sizeof(fields)); -} - -glsl_type::glsl_type(GLenum gl_type, glsl_base_type base_type, - enum glsl_sampler_dim dim, bool shadow, bool array, - glsl_base_type type, const char *name) : - gl_type(gl_type), - base_type(base_type), sampled_type(type), - sampler_dimensionality(dim), sampler_shadow(shadow), - sampler_array(array), interface_packing(0), - interface_row_major(0), packed(0), - length(0), explicit_stride(0), explicit_alignment(0) -{ - this->mem_ctx = ralloc_context(NULL); - assert(this->mem_ctx != NULL); - - assert(name != NULL); - this->name = ralloc_strdup(this->mem_ctx, name); - - memset(& fields, 0, sizeof(fields)); - - matrix_columns = vector_elements = 1; -} - -glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields, - const char *name, bool packed, - unsigned explicit_alignment) : - gl_type(0), - base_type(GLSL_TYPE_STRUCT), sampled_type(GLSL_TYPE_VOID), - sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), - interface_packing(0), interface_row_major(0), packed(packed), - vector_elements(0), matrix_columns(0), - length(num_fields), explicit_stride(0), - explicit_alignment(explicit_alignment) -{ - unsigned int i; - - assert(util_is_power_of_two_or_zero(explicit_alignment)); - - this->mem_ctx = ralloc_context(NULL); - assert(this->mem_ctx != NULL); - - assert(name != NULL); - this->name = ralloc_strdup(this->mem_ctx, name); - /* Zero-fill to prevent spurious Valgrind errors when serializing NIR - * due to uninitialized unused bits in bit fields. */ - this->fields.structure = rzalloc_array(this->mem_ctx, - glsl_struct_field, length); - - for (i = 0; i < length; i++) { - this->fields.structure[i] = fields[i]; - this->fields.structure[i].name = ralloc_strdup(this->fields.structure, - fields[i].name); - } -} - -glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields, - enum glsl_interface_packing packing, - bool row_major, const char *name) : - gl_type(0), - base_type(GLSL_TYPE_INTERFACE), sampled_type(GLSL_TYPE_VOID), - sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), - interface_packing((unsigned) packing), - interface_row_major((unsigned) row_major), packed(0), - vector_elements(0), matrix_columns(0), - length(num_fields), explicit_stride(0), explicit_alignment(0) -{ - unsigned int i; - - this->mem_ctx = ralloc_context(NULL); - assert(this->mem_ctx != NULL); - - assert(name != NULL); - this->name = ralloc_strdup(this->mem_ctx, name); - this->fields.structure = rzalloc_array(this->mem_ctx, - glsl_struct_field, length); - for (i = 0; i < length; i++) { - this->fields.structure[i] = fields[i]; - this->fields.structure[i].name = ralloc_strdup(this->fields.structure, - fields[i].name); - } -} - -glsl_type::glsl_type(const glsl_type *return_type, - const glsl_function_param *params, unsigned num_params) : - gl_type(0), - base_type(GLSL_TYPE_FUNCTION), sampled_type(GLSL_TYPE_VOID), - sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), - interface_packing(0), interface_row_major(0), packed(0), - vector_elements(0), matrix_columns(0), - length(num_params), explicit_stride(0), explicit_alignment(0) -{ - unsigned int i; - - this->mem_ctx = ralloc_context(NULL); - assert(this->mem_ctx != NULL); - - this->name = ralloc_strdup(this->mem_ctx, ""); - - this->fields.parameters = rzalloc_array(this->mem_ctx, - glsl_function_param, num_params + 1); - - /* We store the return type as the first parameter */ - this->fields.parameters[0].type = return_type; - this->fields.parameters[0].in = false; - this->fields.parameters[0].out = true; - - /* We store the i'th parameter in slot i+1 */ - for (i = 0; i < length; i++) { - this->fields.parameters[i + 1].type = params[i].type; - this->fields.parameters[i + 1].in = params[i].in; - this->fields.parameters[i + 1].out = params[i].out; - } -} - -glsl_type::glsl_type(const char *subroutine_name) : - gl_type(0), - base_type(GLSL_TYPE_SUBROUTINE), sampled_type(GLSL_TYPE_VOID), - sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), - interface_packing(0), interface_row_major(0), packed(0), - vector_elements(1), matrix_columns(1), - length(0), explicit_stride(0), explicit_alignment(0) -{ - this->mem_ctx = ralloc_context(NULL); - assert(this->mem_ctx != NULL); - - assert(subroutine_name != NULL); - this->name = ralloc_strdup(this->mem_ctx, subroutine_name); -} - -glsl_type::~glsl_type() -{ - ralloc_free(this->mem_ctx); -} - -bool -glsl_type::contains_sampler() const -{ - if (this->is_array()) { - return this->fields.array->contains_sampler(); - } else if (this->is_struct() || this->is_interface()) { - for (unsigned int i = 0; i < this->length; i++) { - if (this->fields.structure[i].type->contains_sampler()) - return true; - } - return false; - } else { - return this->is_sampler(); - } -} - -bool -glsl_type::contains_array() const -{ - if (this->is_struct() || this->is_interface()) { - for (unsigned int i = 0; i < this->length; i++) { - if (this->fields.structure[i].type->contains_array()) - return true; - } - return false; - } else { - return this->is_array(); - } -} - -bool -glsl_type::contains_integer() const -{ - if (this->is_array()) { - return this->fields.array->contains_integer(); - } else if (this->is_struct() || this->is_interface()) { - for (unsigned int i = 0; i < this->length; i++) { - if (this->fields.structure[i].type->contains_integer()) - return true; - } - return false; - } else { - return this->is_integer(); - } -} - -bool -glsl_type::contains_double() const -{ - if (this->is_array()) { - return this->fields.array->contains_double(); - } else if (this->is_struct() || this->is_interface()) { - for (unsigned int i = 0; i < this->length; i++) { - if (this->fields.structure[i].type->contains_double()) - return true; - } - return false; - } else { - return this->is_double(); - } -} - -bool -glsl_type::contains_64bit() const -{ - if (this->is_array()) { - return this->fields.array->contains_64bit(); - } else if (this->is_struct() || this->is_interface()) { - for (unsigned int i = 0; i < this->length; i++) { - if (this->fields.structure[i].type->contains_64bit()) - return true; - } - return false; - } else { - return this->is_64bit(); - } -} - -bool -glsl_type::contains_opaque() const { - switch (base_type) { - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_ATOMIC_UINT: - return true; - case GLSL_TYPE_ARRAY: - return fields.array->contains_opaque(); - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: - for (unsigned int i = 0; i < length; i++) { - if (fields.structure[i].type->contains_opaque()) - return true; - } - return false; - default: - return false; - } -} - -bool -glsl_type::contains_subroutine() const -{ - if (this->is_array()) { - return this->fields.array->contains_subroutine(); - } else if (this->is_struct() || this->is_interface()) { - for (unsigned int i = 0; i < this->length; i++) { - if (this->fields.structure[i].type->contains_subroutine()) - return true; - } - return false; - } else { - return this->is_subroutine(); - } -} - -gl_texture_index -glsl_type::sampler_index() const -{ - const glsl_type *const t = (this->is_array()) ? this->fields.array : this; - - assert(t->is_sampler() || t->is_image()); - - switch (t->sampler_dimensionality) { - case GLSL_SAMPLER_DIM_1D: - return (t->sampler_array) ? TEXTURE_1D_ARRAY_INDEX : TEXTURE_1D_INDEX; - case GLSL_SAMPLER_DIM_2D: - return (t->sampler_array) ? TEXTURE_2D_ARRAY_INDEX : TEXTURE_2D_INDEX; - case GLSL_SAMPLER_DIM_3D: - return TEXTURE_3D_INDEX; - case GLSL_SAMPLER_DIM_CUBE: - return (t->sampler_array) ? TEXTURE_CUBE_ARRAY_INDEX : TEXTURE_CUBE_INDEX; - case GLSL_SAMPLER_DIM_RECT: - return TEXTURE_RECT_INDEX; - case GLSL_SAMPLER_DIM_BUF: - return TEXTURE_BUFFER_INDEX; - case GLSL_SAMPLER_DIM_EXTERNAL: - return TEXTURE_EXTERNAL_INDEX; - case GLSL_SAMPLER_DIM_MS: - return (t->sampler_array) ? TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX : TEXTURE_2D_MULTISAMPLE_INDEX; - default: - assert(!"Should not get here."); - return TEXTURE_BUFFER_INDEX; - } -} - -bool -glsl_type::contains_image() const -{ - if (this->is_array()) { - return this->fields.array->contains_image(); - } else if (this->is_struct() || this->is_interface()) { - for (unsigned int i = 0; i < this->length; i++) { - if (this->fields.structure[i].type->contains_image()) - return true; - } - return false; - } else { - return this->is_image(); - } -} - -const glsl_type *glsl_type::get_base_type() const -{ - switch (base_type) { - case GLSL_TYPE_UINT: - return uint_type; - case GLSL_TYPE_UINT16: - return uint16_t_type; - case GLSL_TYPE_UINT8: - return uint8_t_type; - case GLSL_TYPE_INT: - return int_type; - case GLSL_TYPE_INT16: - return int16_t_type; - case GLSL_TYPE_INT8: - return int8_t_type; - case GLSL_TYPE_FLOAT: - return float_type; - case GLSL_TYPE_FLOAT16: - return float16_t_type; - case GLSL_TYPE_DOUBLE: - return double_type; - case GLSL_TYPE_BOOL: - return bool_type; - case GLSL_TYPE_UINT64: - return uint64_t_type; - case GLSL_TYPE_INT64: - return int64_t_type; - default: - return error_type; - } -} - - -const glsl_type *glsl_type::get_scalar_type() const -{ - const glsl_type *type = this; - - /* Handle arrays */ - while (type->base_type == GLSL_TYPE_ARRAY) - type = type->fields.array; - - const glsl_type *scalar_type = type->get_base_type(); - if (scalar_type == error_type) - return type; - - return scalar_type; -} - - -const glsl_type *glsl_type::get_bare_type() const -{ - switch (this->base_type) { - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_BOOL: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - return get_instance(this->base_type, this->vector_elements, - this->matrix_columns); - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: { - glsl_struct_field *bare_fields = new glsl_struct_field[this->length]; - for (unsigned i = 0; i < this->length; i++) { - bare_fields[i].type = this->fields.structure[i].type->get_bare_type(); - bare_fields[i].name = this->fields.structure[i].name; - } - const glsl_type *bare_type = - get_struct_instance(bare_fields, this->length, this->name); - delete[] bare_fields; - return bare_type; - } - - case GLSL_TYPE_ARRAY: - return get_array_instance(this->fields.array->get_bare_type(), - this->length); - - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_VOID: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_ERROR: - return this; - } - - unreachable("Invalid base type"); -} - -const glsl_type *glsl_type::get_float16_type() const -{ - assert(this->base_type == GLSL_TYPE_FLOAT); - - return get_instance(GLSL_TYPE_FLOAT16, - this->vector_elements, - this->matrix_columns, - this->explicit_stride, - this->interface_row_major); -} - -const glsl_type *glsl_type::get_int16_type() const -{ - assert(this->base_type == GLSL_TYPE_INT); - - return get_instance(GLSL_TYPE_INT16, - this->vector_elements, - this->matrix_columns, - this->explicit_stride, - this->interface_row_major); -} - -const glsl_type *glsl_type::get_uint16_type() const -{ - assert(this->base_type == GLSL_TYPE_UINT); - - return get_instance(GLSL_TYPE_UINT16, - this->vector_elements, - this->matrix_columns, - this->explicit_stride, - this->interface_row_major); -} - -static void -hash_free_type_function(struct hash_entry *entry) -{ - glsl_type *type = (glsl_type *) entry->data; - - if (type->is_array()) - free((void*)entry->key); - - delete type; -} - -void -glsl_type_singleton_init_or_ref() -{ - simple_mtx_lock(&glsl_type::hash_mutex); - glsl_type_users++; - simple_mtx_unlock(&glsl_type::hash_mutex); -} - -void -glsl_type_singleton_decref() -{ - simple_mtx_lock(&glsl_type::hash_mutex); - assert(glsl_type_users > 0); - - /* Do not release glsl_types if they are still used. */ - if (--glsl_type_users) { - simple_mtx_unlock(&glsl_type::hash_mutex); - return; - } - - if (glsl_type::explicit_matrix_types != NULL) { - _mesa_hash_table_destroy(glsl_type::explicit_matrix_types, - hash_free_type_function); - glsl_type::explicit_matrix_types = NULL; - } - - if (glsl_type::array_types != NULL) { - _mesa_hash_table_destroy(glsl_type::array_types, hash_free_type_function); - glsl_type::array_types = NULL; - } - - if (glsl_type::struct_types != NULL) { - _mesa_hash_table_destroy(glsl_type::struct_types, hash_free_type_function); - glsl_type::struct_types = NULL; - } - - if (glsl_type::interface_types != NULL) { - _mesa_hash_table_destroy(glsl_type::interface_types, hash_free_type_function); - glsl_type::interface_types = NULL; - } - - if (glsl_type::function_types != NULL) { - _mesa_hash_table_destroy(glsl_type::function_types, hash_free_type_function); - glsl_type::function_types = NULL; - } - - if (glsl_type::subroutine_types != NULL) { - _mesa_hash_table_destroy(glsl_type::subroutine_types, hash_free_type_function); - glsl_type::subroutine_types = NULL; - } - - simple_mtx_unlock(&glsl_type::hash_mutex); -} - - -glsl_type::glsl_type(const glsl_type *array, unsigned length, - unsigned explicit_stride) : - base_type(GLSL_TYPE_ARRAY), sampled_type(GLSL_TYPE_VOID), - sampler_dimensionality(0), sampler_shadow(0), sampler_array(0), - interface_packing(0), interface_row_major(0), packed(0), - vector_elements(0), matrix_columns(0), - length(length), name(NULL), explicit_stride(explicit_stride), - explicit_alignment(array->explicit_alignment) -{ - this->fields.array = array; - /* Inherit the gl type of the base. The GL type is used for - * uniform/statevar handling in Mesa and the arrayness of the type - * is represented by the size rather than the type. - */ - this->gl_type = array->gl_type; - - /* Allow a maximum of 10 characters for the array size. This is enough - * for 32-bits of ~0. The extra 3 are for the '[', ']', and terminating - * NUL. - */ - const unsigned name_length = strlen(array->name) + 10 + 3; - - this->mem_ctx = ralloc_context(NULL); - assert(this->mem_ctx != NULL); - - char *const n = (char *) ralloc_size(this->mem_ctx, name_length); - - if (length == 0) - snprintf(n, name_length, "%s[]", array->name); - else { - /* insert outermost dimensions in the correct spot - * otherwise the dimension order will be backwards - */ - const char *pos = strchr(array->name, '['); - if (pos) { - int idx = pos - array->name; - snprintf(n, idx+1, "%s", array->name); - snprintf(n + idx, name_length - idx, "[%u]%s", - length, array->name + idx); - } else { - snprintf(n, name_length, "%s[%u]", array->name, length); - } - } - - this->name = n; -} - -const glsl_type * -glsl_type::vec(unsigned components, const glsl_type *const ts[]) -{ - unsigned n = components; - - if (components == 8) - n = 6; - else if (components == 16) - n = 7; - - if (n == 0 || n > 7) - return error_type; - - return ts[n - 1]; -} - -#define VECN(components, sname, vname) \ -const glsl_type * \ -glsl_type:: vname (unsigned components) \ -{ \ - static const glsl_type *const ts[] = { \ - sname ## _type, vname ## 2_type, \ - vname ## 3_type, vname ## 4_type, \ - vname ## 5_type, \ - vname ## 8_type, vname ## 16_type, \ - }; \ - return glsl_type::vec(components, ts); \ -} - -VECN(components, float, vec) -VECN(components, float16_t, f16vec) -VECN(components, double, dvec) -VECN(components, int, ivec) -VECN(components, uint, uvec) -VECN(components, bool, bvec) -VECN(components, int64_t, i64vec) -VECN(components, uint64_t, u64vec) -VECN(components, int16_t, i16vec) -VECN(components, uint16_t, u16vec) -VECN(components, int8_t, i8vec) -VECN(components, uint8_t, u8vec) - -const glsl_type * -glsl_type::get_instance(unsigned base_type, unsigned rows, unsigned columns, - unsigned explicit_stride, bool row_major, - unsigned explicit_alignment) -{ - if (base_type == GLSL_TYPE_VOID) { - assert(explicit_stride == 0 && explicit_alignment == 0 && !row_major); - return void_type; - } - - /* Matrix and vector types with explicit strides or alignment have to be - * looked up in a table so they're handled separately. - */ - if (explicit_stride > 0 || explicit_alignment > 0) { - if (explicit_alignment > 0) { - assert(util_is_power_of_two_nonzero(explicit_alignment)); - assert(explicit_stride % explicit_alignment == 0); - } - - const glsl_type *bare_type = get_instance(base_type, rows, columns); - - assert(columns > 1 || (rows > 1 && !row_major)); - - char name[128]; - snprintf(name, sizeof(name), "%sx%ua%uB%s", bare_type->name, - explicit_stride, explicit_alignment, row_major ? "RM" : ""); - - simple_mtx_lock(&glsl_type::hash_mutex); - assert(glsl_type_users > 0); - - if (explicit_matrix_types == NULL) { - explicit_matrix_types = - _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - } - - const struct hash_entry *entry = - _mesa_hash_table_search(explicit_matrix_types, name); - if (entry == NULL) { - const glsl_type *t = new glsl_type(bare_type->gl_type, - (glsl_base_type)base_type, - rows, columns, name, - explicit_stride, row_major, - explicit_alignment); - - entry = _mesa_hash_table_insert(explicit_matrix_types, - t->name, (void *)t); - } - - assert(((glsl_type *) entry->data)->base_type == base_type); - assert(((glsl_type *) entry->data)->vector_elements == rows); - assert(((glsl_type *) entry->data)->matrix_columns == columns); - assert(((glsl_type *) entry->data)->explicit_stride == explicit_stride); - assert(((glsl_type *) entry->data)->explicit_alignment == explicit_alignment); - - const glsl_type *t = (const glsl_type *) entry->data; - - simple_mtx_unlock(&glsl_type::hash_mutex); - - return t; - } - - assert(!row_major); - - /* Treat GLSL vectors as Nx1 matrices. - */ - if (columns == 1) { - switch (base_type) { - case GLSL_TYPE_UINT: - return uvec(rows); - case GLSL_TYPE_INT: - return ivec(rows); - case GLSL_TYPE_FLOAT: - return vec(rows); - case GLSL_TYPE_FLOAT16: - return f16vec(rows); - case GLSL_TYPE_DOUBLE: - return dvec(rows); - case GLSL_TYPE_BOOL: - return bvec(rows); - case GLSL_TYPE_UINT64: - return u64vec(rows); - case GLSL_TYPE_INT64: - return i64vec(rows); - case GLSL_TYPE_UINT16: - return u16vec(rows); - case GLSL_TYPE_INT16: - return i16vec(rows); - case GLSL_TYPE_UINT8: - return u8vec(rows); - case GLSL_TYPE_INT8: - return i8vec(rows); - default: - return error_type; - } - } else { - if ((base_type != GLSL_TYPE_FLOAT && - base_type != GLSL_TYPE_DOUBLE && - base_type != GLSL_TYPE_FLOAT16) || (rows == 1)) - return error_type; - - /* GLSL matrix types are named mat{COLUMNS}x{ROWS}. Only the following - * combinations are valid: - * - * 1 2 3 4 - * 1 - * 2 x x x - * 3 x x x - * 4 x x x - */ -#define IDX(c,r) (((c-1)*3) + (r-1)) - - switch (base_type) { - case GLSL_TYPE_DOUBLE: { - switch (IDX(columns, rows)) { - case IDX(2,2): return dmat2_type; - case IDX(2,3): return dmat2x3_type; - case IDX(2,4): return dmat2x4_type; - case IDX(3,2): return dmat3x2_type; - case IDX(3,3): return dmat3_type; - case IDX(3,4): return dmat3x4_type; - case IDX(4,2): return dmat4x2_type; - case IDX(4,3): return dmat4x3_type; - case IDX(4,4): return dmat4_type; - default: return error_type; - } - } - case GLSL_TYPE_FLOAT: { - switch (IDX(columns, rows)) { - case IDX(2,2): return mat2_type; - case IDX(2,3): return mat2x3_type; - case IDX(2,4): return mat2x4_type; - case IDX(3,2): return mat3x2_type; - case IDX(3,3): return mat3_type; - case IDX(3,4): return mat3x4_type; - case IDX(4,2): return mat4x2_type; - case IDX(4,3): return mat4x3_type; - case IDX(4,4): return mat4_type; - default: return error_type; - } - } - case GLSL_TYPE_FLOAT16: { - switch (IDX(columns, rows)) { - case IDX(2,2): return f16mat2_type; - case IDX(2,3): return f16mat2x3_type; - case IDX(2,4): return f16mat2x4_type; - case IDX(3,2): return f16mat3x2_type; - case IDX(3,3): return f16mat3_type; - case IDX(3,4): return f16mat3x4_type; - case IDX(4,2): return f16mat4x2_type; - case IDX(4,3): return f16mat4x3_type; - case IDX(4,4): return f16mat4_type; - default: return error_type; - } - } - default: return error_type; - } - } - - assert(!"Should not get here."); - return error_type; -} - -const glsl_type * -glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, - bool shadow, - bool array, - glsl_base_type type) -{ - switch (type) { - case GLSL_TYPE_FLOAT: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - if (shadow) - return (array ? sampler1DArrayShadow_type : sampler1DShadow_type); - else - return (array ? sampler1DArray_type : sampler1D_type); - case GLSL_SAMPLER_DIM_2D: - if (shadow) - return (array ? sampler2DArrayShadow_type : sampler2DShadow_type); - else - return (array ? sampler2DArray_type : sampler2D_type); - case GLSL_SAMPLER_DIM_3D: - if (shadow || array) - return error_type; - else - return sampler3D_type; - case GLSL_SAMPLER_DIM_CUBE: - if (shadow) - return (array ? samplerCubeArrayShadow_type : samplerCubeShadow_type); - else - return (array ? samplerCubeArray_type : samplerCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - if (shadow) - return sampler2DRectShadow_type; - else - return sampler2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (shadow || array) - return error_type; - else - return samplerBuffer_type; - case GLSL_SAMPLER_DIM_MS: - if (shadow) - return error_type; - return (array ? sampler2DMSArray_type : sampler2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: - if (shadow || array) - return error_type; - else - return samplerExternalOES_type; - case GLSL_SAMPLER_DIM_SUBPASS: - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return error_type; - } - case GLSL_TYPE_INT: - if (shadow) - return error_type; - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? isampler1DArray_type : isampler1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? isampler2DArray_type : isampler2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return isampler3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? isamplerCubeArray_type : isamplerCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return isampler2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return isamplerBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? isampler2DMSArray_type : isampler2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - case GLSL_SAMPLER_DIM_SUBPASS: - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return error_type; - } - case GLSL_TYPE_UINT: - if (shadow) - return error_type; - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? usampler1DArray_type : usampler1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? usampler2DArray_type : usampler2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return usampler3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? usamplerCubeArray_type : usamplerCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return usampler2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return usamplerBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? usampler2DMSArray_type : usampler2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - case GLSL_SAMPLER_DIM_SUBPASS: - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return error_type; - } - case GLSL_TYPE_VOID: - return shadow ? samplerShadow_type : sampler_type; - default: - return error_type; - } - - unreachable("switch statement above should be complete"); -} - -const glsl_type * -glsl_type::get_texture_instance(enum glsl_sampler_dim dim, - bool array, glsl_base_type type) -{ - switch (type) { - case GLSL_TYPE_FLOAT: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? texture1DArray_type : texture1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? texture2DArray_type : texture2D_type); - case GLSL_SAMPLER_DIM_3D: - return texture3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? textureCubeArray_type : textureCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - else - return texture2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - else - return textureBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? texture2DMSArray_type : texture2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - return textureSubpassInput_type; - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return textureSubpassInputMS_type; - case GLSL_SAMPLER_DIM_EXTERNAL: - if (array) - return error_type; - else - return textureExternalOES_type; - } - case GLSL_TYPE_INT: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? itexture1DArray_type : itexture1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? itexture2DArray_type : itexture2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return itexture3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? itextureCubeArray_type : itextureCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return itexture2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return itextureBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? itexture2DMSArray_type : itexture2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - return itextureSubpassInput_type; - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return itextureSubpassInputMS_type; - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - } - case GLSL_TYPE_UINT: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? utexture1DArray_type : utexture1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? utexture2DArray_type : utexture2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return utexture3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? utextureCubeArray_type : utextureCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return utexture2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return utextureBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? utexture2DMSArray_type : utexture2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - return utextureSubpassInput_type; - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return utextureSubpassInputMS_type; - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - } - case GLSL_TYPE_VOID: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? vtexture1DArray_type : vtexture1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? vtexture2DArray_type : vtexture2D_type); - case GLSL_SAMPLER_DIM_3D: - return (array ? error_type : vtexture3D_type); - case GLSL_SAMPLER_DIM_BUF: - return (array ? error_type : vtextureBuffer_type); - default: - return error_type; - } - default: - return error_type; - } - - unreachable("switch statement above should be complete"); -} - -const glsl_type * -glsl_type::get_image_instance(enum glsl_sampler_dim dim, - bool array, glsl_base_type type) -{ - switch (type) { - case GLSL_TYPE_FLOAT: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? image1DArray_type : image1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? image2DArray_type : image2D_type); - case GLSL_SAMPLER_DIM_3D: - return image3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? imageCubeArray_type : imageCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - else - return image2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - else - return imageBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? image2DMSArray_type : image2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - return subpassInput_type; - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return subpassInputMS_type; - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - } - case GLSL_TYPE_INT: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? iimage1DArray_type : iimage1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? iimage2DArray_type : iimage2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return iimage3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? iimageCubeArray_type : iimageCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return iimage2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return iimageBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? iimage2DMSArray_type : iimage2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - return isubpassInput_type; - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return isubpassInputMS_type; - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - } - case GLSL_TYPE_UINT: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? uimage1DArray_type : uimage1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? uimage2DArray_type : uimage2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return uimage3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? uimageCubeArray_type : uimageCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return uimage2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return uimageBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? uimage2DMSArray_type : uimage2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - return usubpassInput_type; - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return usubpassInputMS_type; - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - } - case GLSL_TYPE_INT64: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? i64image1DArray_type : i64image1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? i64image2DArray_type : i64image2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return i64image3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? i64imageCubeArray_type : i64imageCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return i64image2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return i64imageBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? i64image2DMSArray_type : i64image2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - case GLSL_SAMPLER_DIM_SUBPASS_MS: - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - } - case GLSL_TYPE_UINT64: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? u64image1DArray_type : u64image1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? u64image2DArray_type : u64image2D_type); - case GLSL_SAMPLER_DIM_3D: - if (array) - return error_type; - return u64image3D_type; - case GLSL_SAMPLER_DIM_CUBE: - return (array ? u64imageCubeArray_type : u64imageCube_type); - case GLSL_SAMPLER_DIM_RECT: - if (array) - return error_type; - return u64image2DRect_type; - case GLSL_SAMPLER_DIM_BUF: - if (array) - return error_type; - return u64imageBuffer_type; - case GLSL_SAMPLER_DIM_MS: - return (array ? u64image2DMSArray_type : u64image2DMS_type); - case GLSL_SAMPLER_DIM_SUBPASS: - case GLSL_SAMPLER_DIM_SUBPASS_MS: - case GLSL_SAMPLER_DIM_EXTERNAL: - return error_type; - } - case GLSL_TYPE_VOID: - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - return (array ? vimage1DArray_type : vimage1D_type); - case GLSL_SAMPLER_DIM_2D: - return (array ? vimage2DArray_type : vimage2D_type); - case GLSL_SAMPLER_DIM_3D: - return (array ? error_type : vimage3D_type); - case GLSL_SAMPLER_DIM_BUF: - return (array ? error_type : vbuffer_type); - default: - return error_type; - } - default: - return error_type; - } - - unreachable("switch statement above should be complete"); -} - -const glsl_type * -glsl_type::get_array_instance(const glsl_type *base, - unsigned array_size, - unsigned explicit_stride) -{ - /* Generate a name using the base type pointer in the key. This is - * done because the name of the base type may not be unique across - * shaders. For example, two shaders may have different record types - * named 'foo'. - */ - char key[128]; - snprintf(key, sizeof(key), "%p[%u]x%uB", (void *) base, array_size, - explicit_stride); - - simple_mtx_lock(&glsl_type::hash_mutex); - assert(glsl_type_users > 0); - - if (array_types == NULL) { - array_types = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - } - - const struct hash_entry *entry = _mesa_hash_table_search(array_types, key); - if (entry == NULL) { - const glsl_type *t = new glsl_type(base, array_size, explicit_stride); - - entry = _mesa_hash_table_insert(array_types, - strdup(key), - (void *) t); - } - - assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_ARRAY); - assert(((glsl_type *) entry->data)->length == array_size); - assert(((glsl_type *) entry->data)->fields.array == base); - - glsl_type *t = (glsl_type *) entry->data; - - simple_mtx_unlock(&glsl_type::hash_mutex); - - return t; -} - -bool -glsl_type::compare_no_precision(const glsl_type *b) const -{ - if (this == b) - return true; - - if (this->is_array()) { - if (!b->is_array() || this->length != b->length) - return false; - - const glsl_type *b_no_array = b->fields.array; - - return this->fields.array->compare_no_precision(b_no_array); - } - - if (this->is_struct()) { - if (!b->is_struct()) - return false; - } else if (this->is_interface()) { - if (!b->is_interface()) - return false; - } else { - return false; - } - - return record_compare(b, - true, /* match_name */ - true, /* match_locations */ - false /* match_precision */); -} - -bool -glsl_type::record_compare(const glsl_type *b, bool match_name, - bool match_locations, bool match_precision) const -{ - if (this->length != b->length) - return false; - - if (this->interface_packing != b->interface_packing) - return false; - - if (this->interface_row_major != b->interface_row_major) - return false; - - if (this->explicit_alignment != b->explicit_alignment) - return false; - - if (this->packed != b->packed) - return false; - - /* From the GLSL 4.20 specification (Sec 4.2): - * - * "Structures must have the same name, sequence of type names, and - * type definitions, and field names to be considered the same type." - * - * GLSL ES behaves the same (Ver 1.00 Sec 4.2.4, Ver 3.00 Sec 4.2.5). - * - * Section 7.4.1 (Shader Interface Matching) of the OpenGL 4.30 spec says: - * - * "Variables or block members declared as structures are considered - * to match in type if and only if structure members match in name, - * type, qualification, and declaration order." - */ - if (match_name) - if (strcmp(this->name, b->name) != 0) - return false; - - for (unsigned i = 0; i < this->length; i++) { - if (match_precision) { - if (this->fields.structure[i].type != b->fields.structure[i].type) - return false; - } else { - const glsl_type *ta = this->fields.structure[i].type; - const glsl_type *tb = b->fields.structure[i].type; - if (!ta->compare_no_precision(tb)) - return false; - } - if (strcmp(this->fields.structure[i].name, - b->fields.structure[i].name) != 0) - return false; - if (this->fields.structure[i].matrix_layout - != b->fields.structure[i].matrix_layout) - return false; - if (match_locations && this->fields.structure[i].location - != b->fields.structure[i].location) - return false; - if (this->fields.structure[i].component - != b->fields.structure[i].component) - return false; - if (this->fields.structure[i].offset - != b->fields.structure[i].offset) - return false; - if (this->fields.structure[i].interpolation - != b->fields.structure[i].interpolation) - return false; - if (this->fields.structure[i].centroid - != b->fields.structure[i].centroid) - return false; - if (this->fields.structure[i].sample - != b->fields.structure[i].sample) - return false; - if (this->fields.structure[i].patch - != b->fields.structure[i].patch) - return false; - if (this->fields.structure[i].memory_read_only - != b->fields.structure[i].memory_read_only) - return false; - if (this->fields.structure[i].memory_write_only - != b->fields.structure[i].memory_write_only) - return false; - if (this->fields.structure[i].memory_coherent - != b->fields.structure[i].memory_coherent) - return false; - if (this->fields.structure[i].memory_volatile - != b->fields.structure[i].memory_volatile) - return false; - if (this->fields.structure[i].memory_restrict - != b->fields.structure[i].memory_restrict) - return false; - if (this->fields.structure[i].image_format - != b->fields.structure[i].image_format) - return false; - if (match_precision && - this->fields.structure[i].precision - != b->fields.structure[i].precision) - return false; - if (this->fields.structure[i].explicit_xfb_buffer - != b->fields.structure[i].explicit_xfb_buffer) - return false; - if (this->fields.structure[i].xfb_buffer - != b->fields.structure[i].xfb_buffer) - return false; - if (this->fields.structure[i].xfb_stride - != b->fields.structure[i].xfb_stride) - return false; - } - - return true; -} - - -bool -glsl_type::record_key_compare(const void *a, const void *b) -{ - const glsl_type *const key1 = (glsl_type *) a; - const glsl_type *const key2 = (glsl_type *) b; - - return strcmp(key1->name, key2->name) == 0 && - key1->record_compare(key2, true); -} - - -/** - * Generate an integer hash value for a glsl_type structure type. - */ -unsigned -glsl_type::record_key_hash(const void *a) -{ - const glsl_type *const key = (glsl_type *) a; - uintptr_t hash = key->length; - unsigned retval; - - for (unsigned i = 0; i < key->length; i++) { - /* casting pointer to uintptr_t */ - hash = (hash * 13 ) + (uintptr_t) key->fields.structure[i].type; - } - - if (sizeof(hash) == 8) - retval = (hash & 0xffffffff) ^ ((uint64_t) hash >> 32); - else - retval = hash; - - return retval; -} - - -const glsl_type * -glsl_type::get_struct_instance(const glsl_struct_field *fields, - unsigned num_fields, - const char *name, - bool packed, unsigned explicit_alignment) -{ - const glsl_type key(fields, num_fields, name, packed, explicit_alignment); - - simple_mtx_lock(&glsl_type::hash_mutex); - assert(glsl_type_users > 0); - - if (struct_types == NULL) { - struct_types = _mesa_hash_table_create(NULL, record_key_hash, - record_key_compare); - } - - const struct hash_entry *entry = _mesa_hash_table_search(struct_types, - &key); - if (entry == NULL) { - const glsl_type *t = new glsl_type(fields, num_fields, name, packed, - explicit_alignment); - - entry = _mesa_hash_table_insert(struct_types, t, (void *) t); - } - - assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_STRUCT); - assert(((glsl_type *) entry->data)->length == num_fields); - assert(strcmp(((glsl_type *) entry->data)->name, name) == 0); - assert(((glsl_type *) entry->data)->packed == packed); - assert(((glsl_type *) entry->data)->explicit_alignment == explicit_alignment); - - glsl_type *t = (glsl_type *) entry->data; - - simple_mtx_unlock(&glsl_type::hash_mutex); - - return t; -} - - -const glsl_type * -glsl_type::get_interface_instance(const glsl_struct_field *fields, - unsigned num_fields, - enum glsl_interface_packing packing, - bool row_major, - const char *block_name) -{ - const glsl_type key(fields, num_fields, packing, row_major, block_name); - - simple_mtx_lock(&glsl_type::hash_mutex); - assert(glsl_type_users > 0); - - if (interface_types == NULL) { - interface_types = _mesa_hash_table_create(NULL, record_key_hash, - record_key_compare); - } - - const struct hash_entry *entry = _mesa_hash_table_search(interface_types, - &key); - if (entry == NULL) { - const glsl_type *t = new glsl_type(fields, num_fields, - packing, row_major, block_name); - - entry = _mesa_hash_table_insert(interface_types, t, (void *) t); - } - - assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_INTERFACE); - assert(((glsl_type *) entry->data)->length == num_fields); - assert(strcmp(((glsl_type *) entry->data)->name, block_name) == 0); - - glsl_type *t = (glsl_type *) entry->data; - - simple_mtx_unlock(&glsl_type::hash_mutex); - - return t; -} - -const glsl_type * -glsl_type::get_subroutine_instance(const char *subroutine_name) -{ - const glsl_type key(subroutine_name); - - simple_mtx_lock(&glsl_type::hash_mutex); - assert(glsl_type_users > 0); - - if (subroutine_types == NULL) { - subroutine_types = _mesa_hash_table_create(NULL, record_key_hash, - record_key_compare); - } - - const struct hash_entry *entry = _mesa_hash_table_search(subroutine_types, - &key); - if (entry == NULL) { - const glsl_type *t = new glsl_type(subroutine_name); - - entry = _mesa_hash_table_insert(subroutine_types, t, (void *) t); - } - - assert(((glsl_type *) entry->data)->base_type == GLSL_TYPE_SUBROUTINE); - assert(strcmp(((glsl_type *) entry->data)->name, subroutine_name) == 0); - - glsl_type *t = (glsl_type *) entry->data; - - simple_mtx_unlock(&glsl_type::hash_mutex); - - return t; -} - - -static bool -function_key_compare(const void *a, const void *b) -{ - const glsl_type *const key1 = (glsl_type *) a; - const glsl_type *const key2 = (glsl_type *) b; - - if (key1->length != key2->length) - return false; - - return memcmp(key1->fields.parameters, key2->fields.parameters, - (key1->length + 1) * sizeof(*key1->fields.parameters)) == 0; -} - - -static uint32_t -function_key_hash(const void *a) -{ - const glsl_type *const key = (glsl_type *) a; - return _mesa_hash_data(key->fields.parameters, - (key->length + 1) * sizeof(*key->fields.parameters)); -} - -const glsl_type * -glsl_type::get_function_instance(const glsl_type *return_type, - const glsl_function_param *params, - unsigned num_params) -{ - const glsl_type key(return_type, params, num_params); - - simple_mtx_lock(&glsl_type::hash_mutex); - assert(glsl_type_users > 0); - - if (function_types == NULL) { - function_types = _mesa_hash_table_create(NULL, function_key_hash, - function_key_compare); - } - - struct hash_entry *entry = _mesa_hash_table_search(function_types, &key); - if (entry == NULL) { - const glsl_type *t = new glsl_type(return_type, params, num_params); - - entry = _mesa_hash_table_insert(function_types, t, (void *) t); - } - - const glsl_type *t = (const glsl_type *)entry->data; - - assert(t->base_type == GLSL_TYPE_FUNCTION); - assert(t->length == num_params); - - simple_mtx_unlock(&glsl_type::hash_mutex); - - return t; -} - - -const glsl_type * -glsl_type::get_mul_type(const glsl_type *type_a, const glsl_type *type_b) -{ - if (type_a->is_matrix() && type_b->is_matrix()) { - /* Matrix multiply. The columns of A must match the rows of B. Given - * the other previously tested constraints, this means the vector type - * of a row from A must be the same as the vector type of a column from - * B. - */ - if (type_a->row_type() == type_b->column_type()) { - /* The resulting matrix has the number of columns of matrix B and - * the number of rows of matrix A. We get the row count of A by - * looking at the size of a vector that makes up a column. The - * transpose (size of a row) is done for B. - */ - const glsl_type *const type = - get_instance(type_a->base_type, - type_a->column_type()->vector_elements, - type_b->row_type()->vector_elements); - assert(type != error_type); - - return type; - } - } else if (type_a == type_b) { - return type_a; - } else if (type_a->is_matrix()) { - /* A is a matrix and B is a column vector. Columns of A must match - * rows of B. Given the other previously tested constraints, this - * means the vector type of a row from A must be the same as the - * vector the type of B. - */ - if (type_a->row_type() == type_b) { - /* The resulting vector has a number of elements equal to - * the number of rows of matrix A. */ - const glsl_type *const type = - get_instance(type_a->base_type, - type_a->column_type()->vector_elements, - 1); - assert(type != error_type); - - return type; - } - } else { - assert(type_b->is_matrix()); - - /* A is a row vector and B is a matrix. Columns of A must match rows - * of B. Given the other previously tested constraints, this means - * the type of A must be the same as the vector type of a column from - * B. - */ - if (type_a == type_b->column_type()) { - /* The resulting vector has a number of elements equal to - * the number of columns of matrix B. */ - const glsl_type *const type = - get_instance(type_a->base_type, - type_b->row_type()->vector_elements, - 1); - assert(type != error_type); - - return type; - } - } - - return error_type; -} - - -const glsl_type * -glsl_type::field_type(const char *name) const -{ - if (this->base_type != GLSL_TYPE_STRUCT - && this->base_type != GLSL_TYPE_INTERFACE) - return error_type; - - for (unsigned i = 0; i < this->length; i++) { - if (strcmp(name, this->fields.structure[i].name) == 0) - return this->fields.structure[i].type; - } - - return error_type; -} - - -int -glsl_type::field_index(const char *name) const -{ - if (this->base_type != GLSL_TYPE_STRUCT - && this->base_type != GLSL_TYPE_INTERFACE) - return -1; - - for (unsigned i = 0; i < this->length; i++) { - if (strcmp(name, this->fields.structure[i].name) == 0) - return i; - } - - return -1; -} - - -unsigned -glsl_type::component_slots() const -{ - switch (this->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_BOOL: - return this->components(); - - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - return 2 * this->components(); - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: { - unsigned size = 0; - - for (unsigned i = 0; i < this->length; i++) - size += this->fields.structure[i].type->component_slots(); - - return size; - } - - case GLSL_TYPE_ARRAY: - return this->length * this->fields.array->component_slots(); - - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - return 2; - - case GLSL_TYPE_SUBROUTINE: - return 1; - - case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - break; - } - - return 0; -} - -unsigned -glsl_type::component_slots_aligned(unsigned offset) const -{ - /* Align 64bit type only if it crosses attribute slot boundary. */ - switch (this->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_BOOL: - return this->components(); - - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: { - unsigned size = 2 * this->components(); - if (offset % 2 == 1 && (offset % 4 + size) > 4) { - size++; - } - - return size; - } - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: { - unsigned size = 0; - - for (unsigned i = 0; i < this->length; i++) { - const glsl_type *member = this->fields.structure[i].type; - size += member->component_slots_aligned(size + offset); - } - - return size; - } - - case GLSL_TYPE_ARRAY: { - unsigned size = 0; - - for (unsigned i = 0; i < this->length; i++) { - size += this->fields.array->component_slots_aligned(size + offset); - } - - return size; - } - - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - return 2 + ((offset % 4) == 3 ? 1 : 0); - - case GLSL_TYPE_SUBROUTINE: - return 1; - - case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - break; - } - - return 0; -} - -unsigned -glsl_type::struct_location_offset(unsigned length) const -{ - unsigned offset = 0; - const glsl_type *t = this->without_array(); - if (t->is_struct()) { - assert(length <= t->length); - - for (unsigned i = 0; i < length; i++) { - const glsl_type *st = t->fields.structure[i].type; - const glsl_type *wa = st->without_array(); - if (wa->is_struct()) { - unsigned r_offset = wa->struct_location_offset(wa->length); - offset += st->is_array() ? - st->arrays_of_arrays_size() * r_offset : r_offset; - } else if (st->is_array() && st->fields.array->is_array()) { - unsigned outer_array_size = st->length; - const glsl_type *base_type = st->fields.array; - - /* For arrays of arrays the outer arrays take up a uniform - * slot for each element. The innermost array elements share a - * single slot so we ignore the innermost array when calculating - * the offset. - */ - while (base_type->fields.array->is_array()) { - outer_array_size = outer_array_size * base_type->length; - base_type = base_type->fields.array; - } - offset += outer_array_size; - } else { - /* We dont worry about arrays here because unless the array - * contains a structure or another array it only takes up a single - * uniform slot. - */ - offset += 1; - } - } - } - return offset; -} - -unsigned -glsl_type::uniform_locations() const -{ - unsigned size = 0; - - switch (this->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT16: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - case GLSL_TYPE_BOOL: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_SUBROUTINE: - return 1; - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: - for (unsigned i = 0; i < this->length; i++) - size += this->fields.structure[i].type->uniform_locations(); - return size; - case GLSL_TYPE_ARRAY: - return this->length * this->fields.array->uniform_locations(); - default: - return 0; - } -} - -unsigned -glsl_type::varying_count() const -{ - unsigned size = 0; - - switch (this->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_BOOL: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT16: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - return 1; - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: - for (unsigned i = 0; i < this->length; i++) - size += this->fields.structure[i].type->varying_count(); - return size; - case GLSL_TYPE_ARRAY: - /* Don't count innermost array elements */ - if (this->without_array()->is_struct() || - this->without_array()->is_interface() || - this->fields.array->is_array()) - return this->length * this->fields.array->varying_count(); - else - return this->fields.array->varying_count(); - default: - assert(!"unsupported varying type"); - return 0; - } -} - -bool -glsl_type::can_implicitly_convert_to(const glsl_type *desired, - _mesa_glsl_parse_state *state) const -{ - if (this == desired) - return true; - - /* GLSL 1.10 and ESSL do not allow implicit conversions. If there is no - * state, we're doing intra-stage function linking where these checks have - * already been done. - */ - if (state && !state->has_implicit_conversions()) - return false; - - /* There is no conversion among matrix types. */ - if (this->matrix_columns > 1 || desired->matrix_columns > 1) - return false; - - /* Vector size must match. */ - if (this->vector_elements != desired->vector_elements) - return false; - - /* int and uint can be converted to float. */ - if (desired->is_float() && this->is_integer_32()) - return true; - - /* With GLSL 4.0, ARB_gpu_shader5, or MESA_shader_integer_functions, int - * can be converted to uint. Note that state may be NULL here, when - * resolving function calls in the linker. By this time, all the - * state-dependent checks have already happened though, so allow anything - * that's allowed in any shader version. - */ - if ((!state || state->has_implicit_int_to_uint_conversion()) && - desired->base_type == GLSL_TYPE_UINT && this->base_type == GLSL_TYPE_INT) - return true; - - /* No implicit conversions from double. */ - if ((!state || state->has_double()) && this->is_double()) - return false; - - /* Conversions from different types to double. */ - if ((!state || state->has_double()) && desired->is_double()) { - if (this->is_float()) - return true; - if (this->is_integer_32()) - return true; - } - - return false; -} - -unsigned -glsl_type::std140_base_alignment(bool row_major) const -{ - unsigned N = is_64bit() ? 8 : 4; - - /* (1) If the member is a scalar consuming basic machine units, the - * base alignment is . - * - * (2) If the member is a two- or four-component vector with components - * consuming basic machine units, the base alignment is 2 or - * 4, respectively. - * - * (3) If the member is a three-component vector with components consuming - * basic machine units, the base alignment is 4. - */ - if (this->is_scalar() || this->is_vector()) { - switch (this->vector_elements) { - case 1: - return N; - case 2: - return 2 * N; - case 3: - case 4: - return 4 * N; - } - } - - /* (4) If the member is an array of scalars or vectors, the base alignment - * and array stride are set to match the base alignment of a single - * array element, according to rules (1), (2), and (3), and rounded up - * to the base alignment of a vec4. The array may have padding at the - * end; the base offset of the member following the array is rounded up - * to the next multiple of the base alignment. - * - * (6) If the member is an array of column-major matrices with - * columns and rows, the matrix is stored identically to a row of - * * column vectors with components each, according to rule - * (4). - * - * (8) If the member is an array of row-major matrices with columns - * and rows, the matrix is stored identically to a row of * - * row vectors with components each, according to rule (4). - * - * (10) If the member is an array of structures, the elements of - * the array are laid out in order, according to rule (9). - */ - if (this->is_array()) { - if (this->fields.array->is_scalar() || - this->fields.array->is_vector() || - this->fields.array->is_matrix()) { - return MAX2(this->fields.array->std140_base_alignment(row_major), 16); - } else { - assert(this->fields.array->is_struct() || - this->fields.array->is_array()); - return this->fields.array->std140_base_alignment(row_major); - } - } - - /* (5) If the member is a column-major matrix with columns and - * rows, the matrix is stored identically to an array of - * column vectors with components each, according to - * rule (4). - * - * (7) If the member is a row-major matrix with columns and - * rows, the matrix is stored identically to an array of - * row vectors with components each, according to rule (4). - */ - if (this->is_matrix()) { - const struct glsl_type *vec_type, *array_type; - int c = this->matrix_columns; - int r = this->vector_elements; - - if (row_major) { - vec_type = get_instance(base_type, c, 1); - array_type = glsl_type::get_array_instance(vec_type, r); - } else { - vec_type = get_instance(base_type, r, 1); - array_type = glsl_type::get_array_instance(vec_type, c); - } - - return array_type->std140_base_alignment(false); - } - - /* (9) If the member is a structure, the base alignment of the - * structure is , where is the largest base alignment - * value of any of its members, and rounded up to the base - * alignment of a vec4. The individual members of this - * sub-structure are then assigned offsets by applying this set - * of rules recursively, where the base offset of the first - * member of the sub-structure is equal to the aligned offset - * of the structure. The structure may have padding at the end; - * the base offset of the member following the sub-structure is - * rounded up to the next multiple of the base alignment of the - * structure. - */ - if (this->is_struct()) { - unsigned base_alignment = 16; - for (unsigned i = 0; i < this->length; i++) { - bool field_row_major = row_major; - const enum glsl_matrix_layout matrix_layout = - glsl_matrix_layout(this->fields.structure[i].matrix_layout); - if (matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } else if (matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } - - const struct glsl_type *field_type = this->fields.structure[i].type; - base_alignment = MAX2(base_alignment, - field_type->std140_base_alignment(field_row_major)); - } - return base_alignment; - } - - assert(!"not reached"); - return -1; -} - -unsigned -glsl_type::std140_size(bool row_major) const -{ - unsigned N = is_64bit() ? 8 : 4; - - /* (1) If the member is a scalar consuming basic machine units, the - * base alignment is . - * - * (2) If the member is a two- or four-component vector with components - * consuming basic machine units, the base alignment is 2 or - * 4, respectively. - * - * (3) If the member is a three-component vector with components consuming - * basic machine units, the base alignment is 4. - */ - if (this->is_scalar() || this->is_vector()) { - assert(this->explicit_stride == 0); - return this->vector_elements * N; - } - - /* (5) If the member is a column-major matrix with columns and - * rows, the matrix is stored identically to an array of - * column vectors with components each, according to - * rule (4). - * - * (6) If the member is an array of column-major matrices with - * columns and rows, the matrix is stored identically to a row of - * * column vectors with components each, according to rule - * (4). - * - * (7) If the member is a row-major matrix with columns and - * rows, the matrix is stored identically to an array of - * row vectors with components each, according to rule (4). - * - * (8) If the member is an array of row-major matrices with columns - * and rows, the matrix is stored identically to a row of * - * row vectors with components each, according to rule (4). - */ - if (this->without_array()->is_matrix()) { - const struct glsl_type *element_type; - const struct glsl_type *vec_type; - unsigned int array_len; - - if (this->is_array()) { - element_type = this->without_array(); - array_len = this->arrays_of_arrays_size(); - } else { - element_type = this; - array_len = 1; - } - - if (row_major) { - vec_type = get_instance(element_type->base_type, - element_type->matrix_columns, 1); - - array_len *= element_type->vector_elements; - } else { - vec_type = get_instance(element_type->base_type, - element_type->vector_elements, 1); - array_len *= element_type->matrix_columns; - } - const glsl_type *array_type = glsl_type::get_array_instance(vec_type, - array_len); - - return array_type->std140_size(false); - } - - /* (4) If the member is an array of scalars or vectors, the base alignment - * and array stride are set to match the base alignment of a single - * array element, according to rules (1), (2), and (3), and rounded up - * to the base alignment of a vec4. The array may have padding at the - * end; the base offset of the member following the array is rounded up - * to the next multiple of the base alignment. - * - * (10) If the member is an array of structures, the elements of - * the array are laid out in order, according to rule (9). - */ - if (this->is_array()) { - unsigned stride; - if (this->without_array()->is_struct()) { - stride = this->without_array()->std140_size(row_major); - } else { - unsigned element_base_align = - this->without_array()->std140_base_alignment(row_major); - stride = MAX2(element_base_align, 16); - } - - unsigned size = this->arrays_of_arrays_size() * stride; - assert(this->explicit_stride == 0 || - size == this->length * this->explicit_stride); - return size; - } - - /* (9) If the member is a structure, the base alignment of the - * structure is , where is the largest base alignment - * value of any of its members, and rounded up to the base - * alignment of a vec4. The individual members of this - * sub-structure are then assigned offsets by applying this set - * of rules recursively, where the base offset of the first - * member of the sub-structure is equal to the aligned offset - * of the structure. The structure may have padding at the end; - * the base offset of the member following the sub-structure is - * rounded up to the next multiple of the base alignment of the - * structure. - */ - if (this->is_struct() || this->is_interface()) { - unsigned size = 0; - unsigned max_align = 0; - - for (unsigned i = 0; i < this->length; i++) { - bool field_row_major = row_major; - const enum glsl_matrix_layout matrix_layout = - glsl_matrix_layout(this->fields.structure[i].matrix_layout); - if (matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } else if (matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } - - const struct glsl_type *field_type = this->fields.structure[i].type; - unsigned align = field_type->std140_base_alignment(field_row_major); - - /* Ignore unsized arrays when calculating size */ - if (field_type->is_unsized_array()) - continue; - - size = glsl_align(size, align); - size += field_type->std140_size(field_row_major); - - max_align = MAX2(align, max_align); - - if (field_type->is_struct() && (i + 1 < this->length)) - size = glsl_align(size, 16); - } - size = glsl_align(size, MAX2(max_align, 16)); - return size; - } - - assert(!"not reached"); - return -1; -} - -const glsl_type * -glsl_type::get_explicit_std140_type(bool row_major) const -{ - if (this->is_vector() || this->is_scalar()) { - return this; - } else if (this->is_matrix()) { - const glsl_type *vec_type; - if (row_major) - vec_type = get_instance(this->base_type, this->matrix_columns, 1); - else - vec_type = get_instance(this->base_type, this->vector_elements, 1); - unsigned elem_size = vec_type->std140_size(false); - unsigned stride = glsl_align(elem_size, 16); - return get_instance(this->base_type, this->vector_elements, - this->matrix_columns, stride, row_major); - } else if (this->is_array()) { - unsigned elem_size = this->fields.array->std140_size(row_major); - const glsl_type *elem_type = - this->fields.array->get_explicit_std140_type(row_major); - unsigned stride = glsl_align(elem_size, 16); - return get_array_instance(elem_type, this->length, stride); - } else if (this->is_struct() || this->is_interface()) { - glsl_struct_field *fields = new glsl_struct_field[this->length]; - unsigned offset = 0; - for (unsigned i = 0; i < length; i++) { - fields[i] = this->fields.structure[i]; - - bool field_row_major = row_major; - if (fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } else if (fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } - fields[i].type = - fields[i].type->get_explicit_std140_type(field_row_major); - - unsigned fsize = fields[i].type->std140_size(field_row_major); - unsigned falign = fields[i].type->std140_base_alignment(field_row_major); - /* From the GLSL 460 spec section "Uniform and Shader Storage Block - * Layout Qualifiers": - * - * "The actual offset of a member is computed as follows: If - * offset was declared, start with that offset, otherwise start - * with the next available offset. If the resulting offset is not - * a multiple of the actual alignment, increase it to the first - * offset that is a multiple of the actual alignment. This results - * in the actual offset the member will have." - */ - if (fields[i].offset >= 0) { - assert((unsigned)fields[i].offset >= offset); - offset = fields[i].offset; - } - offset = glsl_align(offset, falign); - fields[i].offset = offset; - offset += fsize; - } - - const glsl_type *type; - if (this->is_struct()) - type = get_struct_instance(fields, this->length, this->name); - else - type = get_interface_instance(fields, this->length, - (enum glsl_interface_packing)this->interface_packing, - this->interface_row_major, - this->name); - - delete[] fields; - return type; - } else { - unreachable("Invalid type for UBO or SSBO"); - } -} - -unsigned -glsl_type::std430_base_alignment(bool row_major) const -{ - - unsigned N = is_64bit() ? 8 : 4; - - /* (1) If the member is a scalar consuming basic machine units, the - * base alignment is . - * - * (2) If the member is a two- or four-component vector with components - * consuming basic machine units, the base alignment is 2 or - * 4, respectively. - * - * (3) If the member is a three-component vector with components consuming - * basic machine units, the base alignment is 4. - */ - if (this->is_scalar() || this->is_vector()) { - switch (this->vector_elements) { - case 1: - return N; - case 2: - return 2 * N; - case 3: - case 4: - return 4 * N; - } - } - - /* OpenGL 4.30 spec, section 7.6.2.2 "Standard Uniform Block Layout": - * - * "When using the std430 storage layout, shader storage blocks will be - * laid out in buffer storage identically to uniform and shader storage - * blocks using the std140 layout, except that the base alignment and - * stride of arrays of scalars and vectors in rule 4 and of structures - * in rule 9 are not rounded up a multiple of the base alignment of a vec4. - */ - - /* (1) If the member is a scalar consuming basic machine units, the - * base alignment is . - * - * (2) If the member is a two- or four-component vector with components - * consuming basic machine units, the base alignment is 2 or - * 4, respectively. - * - * (3) If the member is a three-component vector with components consuming - * basic machine units, the base alignment is 4. - */ - if (this->is_array()) - return this->fields.array->std430_base_alignment(row_major); - - /* (5) If the member is a column-major matrix with columns and - * rows, the matrix is stored identically to an array of - * column vectors with components each, according to - * rule (4). - * - * (7) If the member is a row-major matrix with columns and - * rows, the matrix is stored identically to an array of - * row vectors with components each, according to rule (4). - */ - if (this->is_matrix()) { - const struct glsl_type *vec_type, *array_type; - int c = this->matrix_columns; - int r = this->vector_elements; - - if (row_major) { - vec_type = get_instance(base_type, c, 1); - array_type = glsl_type::get_array_instance(vec_type, r); - } else { - vec_type = get_instance(base_type, r, 1); - array_type = glsl_type::get_array_instance(vec_type, c); - } - - return array_type->std430_base_alignment(false); - } - - /* (9) If the member is a structure, the base alignment of the - * structure is , where is the largest base alignment - * value of any of its members, and rounded up to the base - * alignment of a vec4. The individual members of this - * sub-structure are then assigned offsets by applying this set - * of rules recursively, where the base offset of the first - * member of the sub-structure is equal to the aligned offset - * of the structure. The structure may have padding at the end; - * the base offset of the member following the sub-structure is - * rounded up to the next multiple of the base alignment of the - * structure. - */ - if (this->is_struct()) { - unsigned base_alignment = 0; - for (unsigned i = 0; i < this->length; i++) { - bool field_row_major = row_major; - const enum glsl_matrix_layout matrix_layout = - glsl_matrix_layout(this->fields.structure[i].matrix_layout); - if (matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } else if (matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } - - const struct glsl_type *field_type = this->fields.structure[i].type; - base_alignment = MAX2(base_alignment, - field_type->std430_base_alignment(field_row_major)); - } - assert(base_alignment > 0); - return base_alignment; - } - assert(!"not reached"); - return -1; -} - -unsigned -glsl_type::std430_array_stride(bool row_major) const -{ - unsigned N = is_64bit() ? 8 : 4; - - /* Notice that the array stride of a vec3 is not 3 * N but 4 * N. - * See OpenGL 4.30 spec, section 7.6.2.2 "Standard Uniform Block Layout" - * - * (3) If the member is a three-component vector with components consuming - * basic machine units, the base alignment is 4. - */ - if (this->is_vector() && this->vector_elements == 3) - return 4 * N; - - /* By default use std430_size(row_major) */ - unsigned stride = this->std430_size(row_major); - assert(this->explicit_stride == 0 || this->explicit_stride == stride); - return stride; -} - -/* Note that the value returned by this method is only correct if the - * explit offset, and stride values are set, so only with SPIR-V shaders. - * Should not be used with GLSL shaders. - */ - -unsigned -glsl_type::explicit_size(bool align_to_stride) const -{ - if (this->is_struct() || this->is_interface()) { - if (this->length > 0) { - unsigned size = 0; - - for (unsigned i = 0; i < this->length; i++) { - assert(this->fields.structure[i].offset >= 0); - unsigned last_byte = this->fields.structure[i].offset + - this->fields.structure[i].type->explicit_size(); - size = MAX2(size, last_byte); - } - - return size; - } else { - return 0; - } - } else if (this->is_array()) { - /* From ARB_program_interface_query spec: - * - * "For the property of BUFFER_DATA_SIZE, then the implementation-dependent - * minimum total buffer object size, in basic machine units, required to - * hold all active variables associated with an active uniform block, shader - * storage block, or atomic counter buffer is written to . If the - * final member of an active shader storage block is array with no declared - * size, the minimum buffer size is computed assuming the array was declared - * as an array with one element." - * - */ - if (this->is_unsized_array()) - return this->explicit_stride; - - assert(this->length > 0); - unsigned elem_size = align_to_stride ? this->explicit_stride : this->fields.array->explicit_size(); - assert(this->explicit_stride == 0 || this->explicit_stride >= elem_size); - - return this->explicit_stride * (this->length - 1) + elem_size; - } else if (this->is_matrix()) { - const struct glsl_type *elem_type; - unsigned length; - - if (this->interface_row_major) { - elem_type = get_instance(this->base_type, - this->matrix_columns, 1); - length = this->vector_elements; - } else { - elem_type = get_instance(this->base_type, - this->vector_elements, 1); - length = this->matrix_columns; - } - - unsigned elem_size = align_to_stride ? this->explicit_stride : elem_type->explicit_size(); - - assert(this->explicit_stride); - return this->explicit_stride * (length - 1) + elem_size; - } - - unsigned N = this->bit_size() / 8; - - return this->vector_elements * N; -} - -unsigned -glsl_type::std430_size(bool row_major) const -{ - unsigned N = is_64bit() ? 8 : 4; - - /* OpenGL 4.30 spec, section 7.6.2.2 "Standard Uniform Block Layout": - * - * "When using the std430 storage layout, shader storage blocks will be - * laid out in buffer storage identically to uniform and shader storage - * blocks using the std140 layout, except that the base alignment and - * stride of arrays of scalars and vectors in rule 4 and of structures - * in rule 9 are not rounded up a multiple of the base alignment of a vec4. - */ - if (this->is_scalar() || this->is_vector()) { - assert(this->explicit_stride == 0); - return this->vector_elements * N; - } - - if (this->without_array()->is_matrix()) { - const struct glsl_type *element_type; - const struct glsl_type *vec_type; - unsigned int array_len; - - if (this->is_array()) { - element_type = this->without_array(); - array_len = this->arrays_of_arrays_size(); - } else { - element_type = this; - array_len = 1; - } - - if (row_major) { - vec_type = get_instance(element_type->base_type, - element_type->matrix_columns, 1); - - array_len *= element_type->vector_elements; - } else { - vec_type = get_instance(element_type->base_type, - element_type->vector_elements, 1); - array_len *= element_type->matrix_columns; - } - const glsl_type *array_type = glsl_type::get_array_instance(vec_type, - array_len); - - return array_type->std430_size(false); - } - - if (this->is_array()) { - unsigned stride; - if (this->without_array()->is_struct()) - stride = this->without_array()->std430_size(row_major); - else - stride = this->without_array()->std430_base_alignment(row_major); - - unsigned size = this->arrays_of_arrays_size() * stride; - assert(this->explicit_stride == 0 || - size == this->length * this->explicit_stride); - return size; - } - - if (this->is_struct() || this->is_interface()) { - unsigned size = 0; - unsigned max_align = 0; - - for (unsigned i = 0; i < this->length; i++) { - bool field_row_major = row_major; - const enum glsl_matrix_layout matrix_layout = - glsl_matrix_layout(this->fields.structure[i].matrix_layout); - if (matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } else if (matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } - - const struct glsl_type *field_type = this->fields.structure[i].type; - unsigned align = field_type->std430_base_alignment(field_row_major); - size = glsl_align(size, align); - size += field_type->std430_size(field_row_major); - - max_align = MAX2(align, max_align); - } - size = glsl_align(size, max_align); - return size; - } - - assert(!"not reached"); - return -1; -} - -const glsl_type * -glsl_type::get_explicit_std430_type(bool row_major) const -{ - if (this->is_vector() || this->is_scalar()) { - return this; - } else if (this->is_matrix()) { - const glsl_type *vec_type; - if (row_major) - vec_type = get_instance(this->base_type, this->matrix_columns, 1); - else - vec_type = get_instance(this->base_type, this->vector_elements, 1); - unsigned stride = vec_type->std430_array_stride(false); - return get_instance(this->base_type, this->vector_elements, - this->matrix_columns, stride, row_major); - } else if (this->is_array()) { - const glsl_type *elem_type = - this->fields.array->get_explicit_std430_type(row_major); - unsigned stride = this->fields.array->std430_array_stride(row_major); - return get_array_instance(elem_type, this->length, stride); - } else if (this->is_struct() || this->is_interface()) { - glsl_struct_field *fields = new glsl_struct_field[this->length]; - unsigned offset = 0; - for (unsigned i = 0; i < length; i++) { - fields[i] = this->fields.structure[i]; - - bool field_row_major = row_major; - if (fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_COLUMN_MAJOR) { - field_row_major = false; - } else if (fields[i].matrix_layout == GLSL_MATRIX_LAYOUT_ROW_MAJOR) { - field_row_major = true; - } - fields[i].type = - fields[i].type->get_explicit_std430_type(field_row_major); - - unsigned fsize = fields[i].type->std430_size(field_row_major); - unsigned falign = fields[i].type->std430_base_alignment(field_row_major); - /* From the GLSL 460 spec section "Uniform and Shader Storage Block - * Layout Qualifiers": - * - * "The actual offset of a member is computed as follows: If - * offset was declared, start with that offset, otherwise start - * with the next available offset. If the resulting offset is not - * a multiple of the actual alignment, increase it to the first - * offset that is a multiple of the actual alignment. This results - * in the actual offset the member will have." - */ - if (fields[i].offset >= 0) { - assert((unsigned)fields[i].offset >= offset); - offset = fields[i].offset; - } - offset = glsl_align(offset, falign); - fields[i].offset = offset; - offset += fsize; - } - - const glsl_type *type; - if (this->is_struct()) - type = get_struct_instance(fields, this->length, this->name); - else - type = get_interface_instance(fields, this->length, - (enum glsl_interface_packing)this->interface_packing, - this->interface_row_major, - this->name); - - delete[] fields; - return type; - } else { - unreachable("Invalid type for SSBO"); - } -} - -const glsl_type * -glsl_type::get_explicit_interface_type(bool supports_std430) const -{ - enum glsl_interface_packing packing = - this->get_internal_ifc_packing(supports_std430); - if (packing == GLSL_INTERFACE_PACKING_STD140) { - return this->get_explicit_std140_type(this->interface_row_major); - } else { - assert(packing == GLSL_INTERFACE_PACKING_STD430); - return this->get_explicit_std430_type(this->interface_row_major); - } -} - -static unsigned -explicit_type_scalar_byte_size(const glsl_type *type) -{ - if (type->base_type == GLSL_TYPE_BOOL) - return 4; - else - return glsl_base_type_get_bit_size(type->base_type) / 8; -} - -/* This differs from get_explicit_std430_type() in that it: - * - can size arrays slightly smaller ("stride * (len - 1) + elem_size" instead - * of "stride * len") - * - consumes a glsl_type_size_align_func which allows 8 and 16-bit values to be - * packed more tightly - * - overrides any struct field offsets but get_explicit_std430_type() tries to - * respect any existing ones - */ -const glsl_type * -glsl_type::get_explicit_type_for_size_align(glsl_type_size_align_func type_info, - unsigned *size, unsigned *alignment) const -{ - if (this->is_image() || this->is_sampler()) { - type_info(this, size, alignment); - assert(*alignment > 0); - return this; - } else if (this->is_scalar()) { - type_info(this, size, alignment); - assert(*size == explicit_type_scalar_byte_size(this)); - assert(*alignment == explicit_type_scalar_byte_size(this)); - return this; - } else if (this->is_vector()) { - type_info(this, size, alignment); - assert(*alignment > 0); - assert(*alignment % explicit_type_scalar_byte_size(this) == 0); - return glsl_type::get_instance(this->base_type, this->vector_elements, - 1, 0, false, *alignment); - } else if (this->is_array()) { - unsigned elem_size, elem_align; - const struct glsl_type *explicit_element = - this->fields.array->get_explicit_type_for_size_align(type_info, &elem_size, &elem_align); - - unsigned stride = align(elem_size, elem_align); - - *size = stride * (this->length - 1) + elem_size; - *alignment = elem_align; - return glsl_type::get_array_instance(explicit_element, this->length, stride); - } else if (this->is_struct() || this->is_interface()) { - struct glsl_struct_field *fields = (struct glsl_struct_field *) - malloc(sizeof(struct glsl_struct_field) * this->length); - - *size = 0; - *alignment = 0; - for (unsigned i = 0; i < this->length; i++) { - fields[i] = this->fields.structure[i]; - assert(fields[i].matrix_layout != GLSL_MATRIX_LAYOUT_ROW_MAJOR); - - unsigned field_size, field_align; - fields[i].type = - fields[i].type->get_explicit_type_for_size_align(type_info, &field_size, &field_align); - field_align = this->packed ? 1 : field_align; - fields[i].offset = align(*size, field_align); - - *size = fields[i].offset + field_size; - *alignment = MAX2(*alignment, field_align); - } - /* - * "The alignment of the struct is the alignment of the most-aligned - * field in it." - * - * "Finally, the size of the struct is the current offset rounded up to - * the nearest multiple of the struct's alignment." - * - * https://doc.rust-lang.org/reference/type-layout.html#reprc-structs - */ - *size = align(*size, *alignment); - - const glsl_type *type; - if (this->is_struct()) { - type = get_struct_instance(fields, this->length, this->name, - this->packed, *alignment); - } else { - assert(!this->packed); - type = get_interface_instance(fields, this->length, - (enum glsl_interface_packing)this->interface_packing, - this->interface_row_major, - this->name); - } - free(fields); - return type; - } else if (this->is_matrix()) { - unsigned col_size, col_align; - type_info(this->column_type(), &col_size, &col_align); - unsigned stride = align(col_size, col_align); - - *size = this->matrix_columns * stride; - /* Matrix and column alignments match. See glsl_type::column_type() */ - assert(col_align > 0); - *alignment = col_align; - return glsl_type::get_instance(this->base_type, this->vector_elements, - this->matrix_columns, stride, false, *alignment); - } else { - unreachable("Unhandled type."); - } -} - -const glsl_type * -glsl_type::replace_vec3_with_vec4() const -{ - if (this->is_scalar() || this->is_vector() || this->is_matrix()) { - if (this->interface_row_major) { - if (this->matrix_columns == 3) { - return glsl_type::get_instance(this->base_type, - this->vector_elements, - 4, /* matrix columns */ - this->explicit_stride, - this->interface_row_major, - this->explicit_alignment); - } else { - return this; - } - } else { - if (this->vector_elements == 3) { - return glsl_type::get_instance(this->base_type, - 4, /* vector elements */ - this->matrix_columns, - this->explicit_stride, - this->interface_row_major, - this->explicit_alignment); - } else { - return this; - } - } - } else if (this->is_array()) { - const glsl_type *vec4_elem_type = - this->fields.array->replace_vec3_with_vec4(); - if (vec4_elem_type == this->fields.array) - return this; - return glsl_type::get_array_instance(vec4_elem_type, - this->length, - this->explicit_stride); - } else if (this->is_struct() || this->is_interface()) { - struct glsl_struct_field *fields = (struct glsl_struct_field *) - malloc(sizeof(struct glsl_struct_field) * this->length); - - bool needs_new_type = false; - for (unsigned i = 0; i < this->length; i++) { - fields[i] = this->fields.structure[i]; - assert(fields[i].matrix_layout != GLSL_MATRIX_LAYOUT_ROW_MAJOR); - fields[i].type = fields[i].type->replace_vec3_with_vec4(); - if (fields[i].type != this->fields.structure[i].type) - needs_new_type = true; - } - - const glsl_type *type; - if (!needs_new_type) { - type = this; - } else if (this->is_struct()) { - type = get_struct_instance(fields, this->length, this->name, - this->packed, this->explicit_alignment); - } else { - assert(!this->packed); - type = get_interface_instance(fields, this->length, - (enum glsl_interface_packing)this->interface_packing, - this->interface_row_major, - this->name); - } - free(fields); - return type; - } else { - unreachable("Unhandled type."); - } -} - -unsigned -glsl_type::count_vec4_slots(bool is_gl_vertex_input, bool is_bindless) const -{ - /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec: - * - * "A scalar input counts the same amount against this limit as a vec4, - * so applications may want to consider packing groups of four - * unrelated float inputs together into a vector to better utilize the - * capabilities of the underlying hardware. A matrix input will use up - * multiple locations. The number of locations used will equal the - * number of columns in the matrix." - * - * The spec does not explicitly say how arrays are counted. However, it - * should be safe to assume the total number of slots consumed by an array - * is the number of entries in the array multiplied by the number of slots - * consumed by a single element of the array. - * - * The spec says nothing about how structs are counted, because vertex - * attributes are not allowed to be (or contain) structs. However, Mesa - * allows varying structs, the number of varying slots taken up by a - * varying struct is simply equal to the sum of the number of slots taken - * up by each element. - * - * Doubles are counted different depending on whether they are vertex - * inputs or everything else. Vertex inputs from ARB_vertex_attrib_64bit - * take one location no matter what size they are, otherwise dvec3/4 - * take two locations. - */ - switch (this->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_BOOL: - return this->matrix_columns; - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - if (this->vector_elements > 2 && !is_gl_vertex_input) - return this->matrix_columns * 2; - else - return this->matrix_columns; - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: { - unsigned size = 0; - - for (unsigned i = 0; i < this->length; i++) { - const glsl_type *member_type = this->fields.structure[i].type; - size += member_type->count_vec4_slots(is_gl_vertex_input, is_bindless); - } - - return size; - } - - case GLSL_TYPE_ARRAY: { - const glsl_type *element = this->fields.array; - return this->length * element->count_vec4_slots(is_gl_vertex_input, - is_bindless); - } - - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - if (!is_bindless) - return 0; - else - return 1; - - case GLSL_TYPE_SUBROUTINE: - return 1; - - case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - break; - } - - assert(!"Unexpected type in count_attribute_slots()"); - - return 0; -} - -unsigned -glsl_type::count_dword_slots(bool is_bindless) const -{ - switch (this->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_BOOL: - return this->components(); - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT16: - return DIV_ROUND_UP(this->vector_elements, 2) * this->matrix_columns; - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - return DIV_ROUND_UP(this->components(), 4); - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - if (!is_bindless) - return 0; - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - return this->components() * 2; - case GLSL_TYPE_ARRAY: - return this->fields.array->count_dword_slots(is_bindless) * - this->length; - - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_STRUCT: { - unsigned size = 0; - for (unsigned i = 0; i < this->length; i++) { - size += this->fields.structure[i].type->count_dword_slots(is_bindless); - } - return size; - } - - case GLSL_TYPE_ATOMIC_UINT: - return 0; - case GLSL_TYPE_SUBROUTINE: - return 1; - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - case GLSL_TYPE_FUNCTION: - default: - unreachable("invalid type in st_glsl_type_dword_size()"); - } - - return 0; -} - -int -glsl_type::coordinate_components() const -{ - enum glsl_sampler_dim dim = (enum glsl_sampler_dim)sampler_dimensionality; - int size = glsl_get_sampler_dim_coordinate_components(dim); - - /* Array textures need an additional component for the array index, except - * for cubemap array images that behave like a 2D array of interleaved - * cubemap faces. - */ - if (sampler_array && - !(is_image() && sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE)) - size += 1; - - return size; -} - -/** - * Declarations of type flyweights (glsl_type::_foo_type) and - * convenience pointers (glsl_type::foo_type). - * @{ - */ -#define DECL_TYPE(NAME, ...) \ - const glsl_type glsl_type::_##NAME##_type = glsl_type(__VA_ARGS__, #NAME); \ - const glsl_type *const glsl_type::NAME##_type = &glsl_type::_##NAME##_type; - -#define STRUCT_TYPE(NAME) - -#include "builtin_type_macros.h" -/** @} */ - -union packed_type { - uint32_t u32; - struct { - unsigned base_type:5; - unsigned interface_row_major:1; - unsigned vector_elements:3; - unsigned matrix_columns:3; - unsigned explicit_stride:16; - unsigned explicit_alignment:4; - } basic; - struct { - unsigned base_type:5; - unsigned dimensionality:4; - unsigned shadow:1; - unsigned array:1; - unsigned sampled_type:5; - unsigned _pad:16; - } sampler; - struct { - unsigned base_type:5; - unsigned length:13; - unsigned explicit_stride:14; - } array; - struct { - unsigned base_type:5; - unsigned interface_packing_or_packed:2; - unsigned interface_row_major:1; - unsigned length:20; - unsigned explicit_alignment:4; - } strct; -}; - -static void -encode_glsl_struct_field(blob *blob, const glsl_struct_field *struct_field) -{ - encode_type_to_blob(blob, struct_field->type); - blob_write_string(blob, struct_field->name); - blob_write_uint32(blob, struct_field->location); - blob_write_uint32(blob, struct_field->component); - blob_write_uint32(blob, struct_field->offset); - blob_write_uint32(blob, struct_field->xfb_buffer); - blob_write_uint32(blob, struct_field->xfb_stride); - blob_write_uint32(blob, struct_field->image_format); - blob_write_uint32(blob, struct_field->flags); -} - -static void -decode_glsl_struct_field_from_blob(blob_reader *blob, glsl_struct_field *struct_field) -{ - struct_field->type = decode_type_from_blob(blob); - struct_field->name = blob_read_string(blob); - struct_field->location = blob_read_uint32(blob); - struct_field->component = blob_read_uint32(blob); - struct_field->offset = blob_read_uint32(blob); - struct_field->xfb_buffer = blob_read_uint32(blob); - struct_field->xfb_stride = blob_read_uint32(blob); - struct_field->image_format = (pipe_format)blob_read_uint32(blob); - struct_field->flags = blob_read_uint32(blob); -} - -void -encode_type_to_blob(struct blob *blob, const glsl_type *type) -{ - if (!type) { - blob_write_uint32(blob, 0); - return; - } - - STATIC_ASSERT(sizeof(union packed_type) == 4); - union packed_type encoded; - encoded.u32 = 0; - encoded.basic.base_type = type->base_type; - - switch (type->base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - case GLSL_TYPE_BOOL: - encoded.basic.interface_row_major = type->interface_row_major; - assert(type->matrix_columns < 8); - if (type->vector_elements <= 5) - encoded.basic.vector_elements = type->vector_elements; - else if (type->vector_elements == 8) - encoded.basic.vector_elements = 6; - else if (type->vector_elements == 16) - encoded.basic.vector_elements = 7; - encoded.basic.matrix_columns = type->matrix_columns; - encoded.basic.explicit_stride = MIN2(type->explicit_stride, 0xffff); - encoded.basic.explicit_alignment = - MIN2(ffs(type->explicit_alignment), 0xf); - blob_write_uint32(blob, encoded.u32); - /* If we don't have enough bits for explicit_stride, store it - * separately. - */ - if (encoded.basic.explicit_stride == 0xffff) - blob_write_uint32(blob, type->explicit_stride); - if (encoded.basic.explicit_alignment == 0xf) - blob_write_uint32(blob, type->explicit_alignment); - return; - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - encoded.sampler.dimensionality = type->sampler_dimensionality; - if (type->base_type == GLSL_TYPE_SAMPLER) - encoded.sampler.shadow = type->sampler_shadow; - else - assert(!type->sampler_shadow); - encoded.sampler.array = type->sampler_array; - encoded.sampler.sampled_type = type->sampled_type; - break; - case GLSL_TYPE_SUBROUTINE: - blob_write_uint32(blob, encoded.u32); - blob_write_string(blob, type->name); - return; - case GLSL_TYPE_ATOMIC_UINT: - break; - case GLSL_TYPE_ARRAY: - encoded.array.length = MIN2(type->length, 0x1fff); - encoded.array.explicit_stride = MIN2(type->explicit_stride, 0x3fff); - blob_write_uint32(blob, encoded.u32); - /* If we don't have enough bits for length or explicit_stride, store it - * separately. - */ - if (encoded.array.length == 0x1fff) - blob_write_uint32(blob, type->length); - if (encoded.array.explicit_stride == 0x3fff) - blob_write_uint32(blob, type->explicit_stride); - encode_type_to_blob(blob, type->fields.array); - return; - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: - encoded.strct.length = MIN2(type->length, 0xfffff); - encoded.strct.explicit_alignment = - MIN2(ffs(type->explicit_alignment), 0xf); - if (type->is_interface()) { - encoded.strct.interface_packing_or_packed = type->interface_packing; - encoded.strct.interface_row_major = type->interface_row_major; - } else { - encoded.strct.interface_packing_or_packed = type->packed; - } - blob_write_uint32(blob, encoded.u32); - blob_write_string(blob, type->name); - - /* If we don't have enough bits for length, store it separately. */ - if (encoded.strct.length == 0xfffff) - blob_write_uint32(blob, type->length); - if (encoded.strct.explicit_alignment == 0xf) - blob_write_uint32(blob, type->explicit_alignment); - - for (unsigned i = 0; i < type->length; i++) - encode_glsl_struct_field(blob, &type->fields.structure[i]); - return; - case GLSL_TYPE_VOID: - break; - case GLSL_TYPE_ERROR: - default: - assert(!"Cannot encode type!"); - encoded.u32 = 0; - break; - } - - blob_write_uint32(blob, encoded.u32); -} - -const glsl_type * -decode_type_from_blob(struct blob_reader *blob) -{ - union packed_type encoded; - encoded.u32 = blob_read_uint32(blob); - - if (encoded.u32 == 0) { - return NULL; - } - - glsl_base_type base_type = (glsl_base_type)encoded.basic.base_type; - - switch (base_type) { - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - case GLSL_TYPE_BOOL: { - unsigned explicit_stride = encoded.basic.explicit_stride; - if (explicit_stride == 0xffff) - explicit_stride = blob_read_uint32(blob); - unsigned explicit_alignment = encoded.basic.explicit_alignment; - if (explicit_alignment == 0xf) - explicit_alignment = blob_read_uint32(blob); - else if (explicit_alignment > 0) - explicit_alignment = 1 << (explicit_alignment - 1); - uint32_t vector_elements = encoded.basic.vector_elements; - if (vector_elements == 6) - vector_elements = 8; - else if (vector_elements == 7) - vector_elements = 16; - return glsl_type::get_instance(base_type, vector_elements, - encoded.basic.matrix_columns, - explicit_stride, - encoded.basic.interface_row_major, - explicit_alignment); - } - case GLSL_TYPE_SAMPLER: - return glsl_type::get_sampler_instance((enum glsl_sampler_dim)encoded.sampler.dimensionality, - encoded.sampler.shadow, - encoded.sampler.array, - (glsl_base_type) encoded.sampler.sampled_type); - case GLSL_TYPE_TEXTURE: - return glsl_type::get_texture_instance((enum glsl_sampler_dim)encoded.sampler.dimensionality, - encoded.sampler.array, - (glsl_base_type) encoded.sampler.sampled_type); - case GLSL_TYPE_SUBROUTINE: - return glsl_type::get_subroutine_instance(blob_read_string(blob)); - case GLSL_TYPE_IMAGE: - return glsl_type::get_image_instance((enum glsl_sampler_dim)encoded.sampler.dimensionality, - encoded.sampler.array, - (glsl_base_type) encoded.sampler.sampled_type); - case GLSL_TYPE_ATOMIC_UINT: - return glsl_type::atomic_uint_type; - case GLSL_TYPE_ARRAY: { - unsigned length = encoded.array.length; - if (length == 0x1fff) - length = blob_read_uint32(blob); - unsigned explicit_stride = encoded.array.explicit_stride; - if (explicit_stride == 0x3fff) - explicit_stride = blob_read_uint32(blob); - return glsl_type::get_array_instance(decode_type_from_blob(blob), - length, explicit_stride); - } - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: { - char *name = blob_read_string(blob); - unsigned num_fields = encoded.strct.length; - if (num_fields == 0xfffff) - num_fields = blob_read_uint32(blob); - unsigned explicit_alignment = encoded.strct.explicit_alignment; - if (explicit_alignment == 0xf) - explicit_alignment = blob_read_uint32(blob); - else if (explicit_alignment > 0) - explicit_alignment = 1 << (explicit_alignment - 1); - - glsl_struct_field *fields = - (glsl_struct_field *) malloc(sizeof(glsl_struct_field) * num_fields); - for (unsigned i = 0; i < num_fields; i++) - decode_glsl_struct_field_from_blob(blob, &fields[i]); - - const glsl_type *t; - if (base_type == GLSL_TYPE_INTERFACE) { - assert(explicit_alignment == 0); - enum glsl_interface_packing packing = - (glsl_interface_packing) encoded.strct.interface_packing_or_packed; - bool row_major = encoded.strct.interface_row_major; - t = glsl_type::get_interface_instance(fields, num_fields, packing, - row_major, name); - } else { - unsigned packed = encoded.strct.interface_packing_or_packed; - t = glsl_type::get_struct_instance(fields, num_fields, name, packed, - explicit_alignment); - } - - free(fields); - return t; - } - case GLSL_TYPE_VOID: - return glsl_type::void_type; - case GLSL_TYPE_ERROR: - default: - assert(!"Cannot decode type!"); - return NULL; - } -} - -unsigned -glsl_type::cl_alignment() const -{ - /* vectors unlike arrays are aligned to their size */ - if (this->is_scalar() || this->is_vector()) - return this->cl_size(); - else if (this->is_array()) - return this->fields.array->cl_alignment(); - else if (this->is_struct()) { - /* Packed Structs are 0x1 aligned despite their size. */ - if (this->packed) - return 1; - - unsigned res = 1; - for (unsigned i = 0; i < this->length; ++i) { - struct glsl_struct_field &field = this->fields.structure[i]; - res = MAX2(res, field.type->cl_alignment()); - } - return res; - } - return 1; -} - -unsigned -glsl_type::cl_size() const -{ - if (this->is_scalar() || this->is_vector()) { - return util_next_power_of_two(this->vector_elements) * - explicit_type_scalar_byte_size(this); - } else if (this->is_array()) { - unsigned size = this->fields.array->cl_size(); - return size * this->length; - } else if (this->is_struct()) { - unsigned size = 0; - unsigned max_alignment = 1; - for (unsigned i = 0; i < this->length; ++i) { - struct glsl_struct_field &field = this->fields.structure[i]; - /* if a struct is packed, members don't get aligned */ - if (!this->packed) { - unsigned alignment = field.type->cl_alignment(); - max_alignment = MAX2(max_alignment, alignment); - size = align(size, alignment); - } - size += field.type->cl_size(); - } - - /* Size of C structs are aligned to the biggest alignment of its fields */ - size = align(size, max_alignment); - return size; - } - return 1; -} - -extern "C" { - -int -glsl_get_sampler_dim_coordinate_components(enum glsl_sampler_dim dim) -{ - switch (dim) { - case GLSL_SAMPLER_DIM_1D: - case GLSL_SAMPLER_DIM_BUF: - return 1; - case GLSL_SAMPLER_DIM_2D: - case GLSL_SAMPLER_DIM_RECT: - case GLSL_SAMPLER_DIM_MS: - case GLSL_SAMPLER_DIM_EXTERNAL: - case GLSL_SAMPLER_DIM_SUBPASS: - case GLSL_SAMPLER_DIM_SUBPASS_MS: - return 2; - case GLSL_SAMPLER_DIM_3D: - case GLSL_SAMPLER_DIM_CUBE: - return 3; - default: - unreachable("Unknown sampler dim"); - } -} - -void -glsl_print_type(FILE *f, const glsl_type *t) -{ - if (t->is_array()) { - fprintf(f, "(array "); - glsl_print_type(f, t->fields.array); - fprintf(f, " %u)", t->length); - } else if (t->is_struct() && !is_gl_identifier(t->name)) { - fprintf(f, "%s@%p", t->name, (void *) t); - } else { - fprintf(f, "%s", t->name); - } -} - -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl_types.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl_types.h deleted file mode 100644 index 00e9c43..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/glsl_types.h +++ /dev/null @@ -1,1527 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright © 2009 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef GLSL_TYPES_H -#define GLSL_TYPES_H - -#include -#include -#include - -#include "shader_enums.h" -//#include "../../include/c11/threads.h" -#include "../util/blob.h" -#include "../util/format/u_format.h" -#include "../util/macros.h" -#include "../util/simple_mtx.h" - -#ifdef __cplusplus -#include "../mesa/main/config.h" -#include "../mesa/main/menums.h" /* for gl_texture_index, C++'s enum rules are broken */ -#include "../util/glheader.h" -#include "../util/ralloc.h" -#endif - -struct glsl_type; - -#ifdef __cplusplus -extern "C" { -#endif - -struct _mesa_glsl_parse_state; -struct glsl_symbol_table; - -extern void -glsl_type_singleton_init_or_ref(); - -extern void -glsl_type_singleton_decref(); - -extern void -_mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state); - -void -glsl_print_type(FILE *f, const struct glsl_type *t); - -void encode_type_to_blob(struct blob *blob, const struct glsl_type *type); - -const struct glsl_type *decode_type_from_blob(struct blob_reader *blob); - -typedef void (*glsl_type_size_align_func)(const struct glsl_type *type, - unsigned *size, unsigned *align); - -enum glsl_base_type { - /* Note: GLSL_TYPE_UINT, GLSL_TYPE_INT, and GLSL_TYPE_FLOAT must be 0, 1, - * and 2 so that they will fit in the 2 bits of glsl_type::sampled_type. - */ - GLSL_TYPE_UINT = 0, - GLSL_TYPE_INT, - GLSL_TYPE_FLOAT, - GLSL_TYPE_FLOAT16, - GLSL_TYPE_DOUBLE, - GLSL_TYPE_UINT8, - GLSL_TYPE_INT8, - GLSL_TYPE_UINT16, - GLSL_TYPE_INT16, - GLSL_TYPE_UINT64, - GLSL_TYPE_INT64, - GLSL_TYPE_BOOL, - GLSL_TYPE_SAMPLER, - GLSL_TYPE_TEXTURE, - GLSL_TYPE_IMAGE, - GLSL_TYPE_ATOMIC_UINT, - GLSL_TYPE_STRUCT, - GLSL_TYPE_INTERFACE, - GLSL_TYPE_ARRAY, - GLSL_TYPE_VOID, - GLSL_TYPE_SUBROUTINE, - GLSL_TYPE_FUNCTION, - GLSL_TYPE_ERROR -}; - -/* Return the bit size of a type. Note that this differs from - * glsl_get_bit_size in that it returns 32 bits for bools, whereas at - * the NIR level we would want to return 1 bit for bools. - */ -static unsigned glsl_base_type_bit_size(enum glsl_base_type type) -{ - switch (type) { - case GLSL_TYPE_BOOL: - case GLSL_TYPE_INT: - case GLSL_TYPE_UINT: - case GLSL_TYPE_FLOAT: /* TODO handle mediump */ - case GLSL_TYPE_SUBROUTINE: - return 32; - - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - return 16; - - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - return 8; - - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_INT64: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_SAMPLER: - return 64; - - default: - /* For GLSL_TYPE_STRUCT etc, it should be ok to return 0. This usually - * happens when calling this method through is_64bit and is_16bit - * methods - */ - return 0; - } - - return 0; -} - -static inline bool glsl_base_type_is_16bit(enum glsl_base_type type) -{ - return glsl_base_type_bit_size(type) == 16; -} - -static inline bool glsl_base_type_is_64bit(enum glsl_base_type type) -{ - return glsl_base_type_bit_size(type) == 64; -} - -static inline bool glsl_base_type_is_integer(enum glsl_base_type type) -{ - return type == GLSL_TYPE_UINT8 || - type == GLSL_TYPE_INT8 || - type == GLSL_TYPE_UINT16 || - type == GLSL_TYPE_INT16 || - type == GLSL_TYPE_UINT || - type == GLSL_TYPE_INT || - type == GLSL_TYPE_UINT64 || - type == GLSL_TYPE_INT64 || - type == GLSL_TYPE_BOOL || - type == GLSL_TYPE_SAMPLER || - type == GLSL_TYPE_TEXTURE || - type == GLSL_TYPE_IMAGE; -} - -static inline unsigned int -glsl_base_type_get_bit_size(const enum glsl_base_type base_type) -{ - switch (base_type) { - case GLSL_TYPE_BOOL: - return 1; - - case GLSL_TYPE_INT: - case GLSL_TYPE_UINT: - case GLSL_TYPE_FLOAT: /* TODO handle mediump */ - case GLSL_TYPE_SUBROUTINE: - return 32; - - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - return 16; - - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - return 8; - - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_INT64: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - return 64; - - default: - unreachable("unknown base type"); - } - - return 0; -} - -static inline enum glsl_base_type -glsl_unsigned_base_type_of(enum glsl_base_type type) -{ - switch (type) { - case GLSL_TYPE_INT: - return GLSL_TYPE_UINT; - case GLSL_TYPE_INT8: - return GLSL_TYPE_UINT8; - case GLSL_TYPE_INT16: - return GLSL_TYPE_UINT16; - case GLSL_TYPE_INT64: - return GLSL_TYPE_UINT64; - default: - assert(type == GLSL_TYPE_UINT || - type == GLSL_TYPE_UINT8 || - type == GLSL_TYPE_UINT16 || - type == GLSL_TYPE_UINT64); - return type; - } -} - -static inline enum glsl_base_type -glsl_signed_base_type_of(enum glsl_base_type type) -{ - switch (type) { - case GLSL_TYPE_UINT: - return GLSL_TYPE_INT; - case GLSL_TYPE_UINT8: - return GLSL_TYPE_INT8; - case GLSL_TYPE_UINT16: - return GLSL_TYPE_INT16; - case GLSL_TYPE_UINT64: - return GLSL_TYPE_INT64; - default: - assert(type == GLSL_TYPE_INT || - type == GLSL_TYPE_INT8 || - type == GLSL_TYPE_INT16 || - type == GLSL_TYPE_INT64); - return type; - } -} - -enum glsl_sampler_dim { - GLSL_SAMPLER_DIM_1D = 0, - GLSL_SAMPLER_DIM_2D, - GLSL_SAMPLER_DIM_3D, - GLSL_SAMPLER_DIM_CUBE, - GLSL_SAMPLER_DIM_RECT, - GLSL_SAMPLER_DIM_BUF, - GLSL_SAMPLER_DIM_EXTERNAL, - GLSL_SAMPLER_DIM_MS, - GLSL_SAMPLER_DIM_SUBPASS, /* for vulkan input attachments */ - GLSL_SAMPLER_DIM_SUBPASS_MS, /* for multisampled vulkan input attachments */ -}; - -int -glsl_get_sampler_dim_coordinate_components(enum glsl_sampler_dim dim); - -enum glsl_matrix_layout { - /** - * The layout of the matrix is inherited from the object containing the - * matrix (the top level structure or the uniform block). - */ - GLSL_MATRIX_LAYOUT_INHERITED, - - /** - * Explicit column-major layout - * - * If a uniform block doesn't have an explicit layout set, it will default - * to this layout. - */ - GLSL_MATRIX_LAYOUT_COLUMN_MAJOR, - - /** - * Row-major layout - */ - GLSL_MATRIX_LAYOUT_ROW_MAJOR -}; - -enum { - GLSL_PRECISION_NONE = 0, - GLSL_PRECISION_HIGH, - GLSL_PRECISION_MEDIUM, - GLSL_PRECISION_LOW -}; - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* C++ struct types for glsl */ -#ifdef __cplusplus - -struct glsl_type { - GLenum gl_type; - glsl_base_type base_type:8; - - glsl_base_type sampled_type:8; /**< Type of data returned using this - * sampler or image. Only \c - * GLSL_TYPE_FLOAT, \c GLSL_TYPE_INT, - * and \c GLSL_TYPE_UINT are valid. - */ - - unsigned sampler_dimensionality:4; /**< \see glsl_sampler_dim */ - unsigned sampler_shadow:1; - unsigned sampler_array:1; - unsigned interface_packing:2; - unsigned interface_row_major:1; - - /** - * For \c GLSL_TYPE_STRUCT this specifies if the struct is packed or not. - * - * Only used for Compute kernels - */ - unsigned packed:1; - -private: - glsl_type() : mem_ctx(NULL) - { - // Dummy constructor, just for the sake of ASSERT_BITFIELD_SIZE. - } - -public: - /** - * \name Vector and matrix element counts - * - * For scalars, each of these values will be 1. For non-numeric types - * these will be 0. - */ - /*@{*/ - uint8_t vector_elements; /**< 1, 2, 3, or 4 vector elements. */ - uint8_t matrix_columns; /**< 1, 2, 3, or 4 matrix columns. */ - /*@}*/ - - /** - * For \c GLSL_TYPE_ARRAY, this is the length of the array. For - * \c GLSL_TYPE_STRUCT or \c GLSL_TYPE_INTERFACE, it is the number of - * elements in the structure and the number of values pointed to by - * \c fields.structure (below). - */ - unsigned length; - - /** - * Name of the data type - * - * Will never be \c NULL. - */ - const char *name; - - /** - * Explicit array, matrix, or vector stride. This is used to communicate - * explicit array layouts from SPIR-V. Should be 0 if the type has no - * explicit stride. - */ - unsigned explicit_stride; - - /** - * Explicit alignment. This is used to communicate explicit alignment - * constraints. Should be 0 if the type has no explicit alignment - * constraint. - */ - unsigned explicit_alignment; - - /** - * Subtype of composite data types. - */ - union { - const struct glsl_type *array; /**< Type of array elements. */ - struct glsl_function_param *parameters; /**< Parameters to function. */ - struct glsl_struct_field *structure; /**< List of struct fields. */ - } fields; - - /** - * \name Pointers to various public type singletons - */ - /*@{*/ -#undef DECL_TYPE -#define DECL_TYPE(NAME, ...) \ - static const glsl_type *const NAME##_type; -#undef STRUCT_TYPE -#define STRUCT_TYPE(NAME) \ - static const glsl_type *const struct_##NAME##_type; -#include "builtin_type_macros.h" - /*@}*/ - - /** - * Convenience accessors for vector types (shorter than get_instance()). - * @{ - */ - static const glsl_type *vec(unsigned components, const glsl_type *const ts[]); - static const glsl_type *vec(unsigned components); - static const glsl_type *f16vec(unsigned components); - static const glsl_type *dvec(unsigned components); - static const glsl_type *ivec(unsigned components); - static const glsl_type *uvec(unsigned components); - static const glsl_type *bvec(unsigned components); - static const glsl_type *i64vec(unsigned components); - static const glsl_type *u64vec(unsigned components); - static const glsl_type *i16vec(unsigned components); - static const glsl_type *u16vec(unsigned components); - static const glsl_type *i8vec(unsigned components); - static const glsl_type *u8vec(unsigned components); - /**@}*/ - - /** - * For numeric and boolean derived types returns the basic scalar type - * - * If the type is a numeric or boolean scalar, vector, or matrix type, - * this function gets the scalar type of the individual components. For - * all other types, including arrays of numeric or boolean types, the - * error type is returned. - */ - const glsl_type *get_base_type() const; - - /** - * Get the basic scalar type which this type aggregates. - * - * If the type is a numeric or boolean scalar, vector, or matrix, or an - * array of any of those, this function gets the scalar type of the - * individual components. For structs and arrays of structs, this function - * returns the struct type. For samplers and arrays of samplers, this - * function returns the sampler type. - */ - const glsl_type *get_scalar_type() const; - - /** - * Gets the "bare" type without any decorations or layout information. - */ - const glsl_type *get_bare_type() const; - - /** - * Gets the float16 version of this type. - */ - const glsl_type *get_float16_type() const; - - /** - * Gets the int16 version of this type. - */ - const glsl_type *get_int16_type() const; - - /** - * Gets the uint16 version of this type. - */ - const glsl_type *get_uint16_type() const; - - /** - * Get the instance of a built-in scalar, vector, or matrix type - */ - static const glsl_type *get_instance(unsigned base_type, unsigned rows, - unsigned columns, - unsigned explicit_stride = 0, - bool row_major = false, - unsigned explicit_alignment = 0); - - /** - * Get the instance of a sampler type - */ - static const glsl_type *get_sampler_instance(enum glsl_sampler_dim dim, - bool shadow, - bool array, - glsl_base_type type); - - static const glsl_type *get_texture_instance(enum glsl_sampler_dim dim, - bool array, - glsl_base_type type); - - static const glsl_type *get_image_instance(enum glsl_sampler_dim dim, - bool array, glsl_base_type type); - - /** - * Get the instance of an array type - */ - static const glsl_type *get_array_instance(const glsl_type *base, - unsigned elements, - unsigned explicit_stride = 0); - - /** - * Get the instance of a record type - */ - static const glsl_type *get_struct_instance(const glsl_struct_field *fields, - unsigned num_fields, - const char *name, - bool packed = false, - unsigned explicit_alignment = 0); - - /** - * Get the instance of an interface block type - */ - static const glsl_type *get_interface_instance(const glsl_struct_field *fields, - unsigned num_fields, - enum glsl_interface_packing packing, - bool row_major, - const char *block_name); - - /** - * Get the instance of an subroutine type - */ - static const glsl_type *get_subroutine_instance(const char *subroutine_name); - - /** - * Get the instance of a function type - */ - static const glsl_type *get_function_instance(const struct glsl_type *return_type, - const glsl_function_param *parameters, - unsigned num_params); - - /** - * Get the type resulting from a multiplication of \p type_a * \p type_b - */ - static const glsl_type *get_mul_type(const glsl_type *type_a, - const glsl_type *type_b); - - /** - * Query the total number of scalars that make up a scalar, vector or matrix - */ - unsigned components() const - { - return vector_elements * matrix_columns; - } - - /** - * Calculate the number of components slots required to hold this type - * - * This is used to determine how many uniform or varying locations a type - * might occupy. - */ - unsigned component_slots() const; - - unsigned component_slots_aligned(unsigned offset) const; - - /** - * Calculate offset between the base location of the struct in - * uniform storage and a struct member. - * For the initial call, length is the index of the member to find the - * offset for. - */ - unsigned struct_location_offset(unsigned length) const; - - /** - * Calculate the number of unique values from glGetUniformLocation for the - * elements of the type. - * - * This is used to allocate slots in the UniformRemapTable, the amount of - * locations may not match with actual used storage space by the driver. - */ - unsigned uniform_locations() const; - - /** - * Used to count the number of varyings contained in the type ignoring - * innermost array elements. - */ - unsigned varying_count() const; - - /** - * Calculate the number of vec4 slots required to hold this type. - * - * This is the underlying recursive type_size function for - * count_attribute_slots() (vertex inputs and varyings) but also for - * gallium's !PIPE_CAP_PACKED_UNIFORMS case. - */ - unsigned count_vec4_slots(bool is_gl_vertex_input, bool bindless) const; - - /** - * Calculate the number of vec4 slots required to hold this type. - * - * This is the underlying recursive type_size function for - * gallium's PIPE_CAP_PACKED_UNIFORMS case. - */ - unsigned count_dword_slots(bool bindless) const; - - /** - * Calculate the number of attribute slots required to hold this type - * - * This implements the language rules of GLSL 1.50 for counting the number - * of slots used by a vertex attribute. It also determines the number of - * varying slots the type will use up in the absence of varying packing - * (and thus, it can be used to measure the number of varying slots used by - * the varyings that are generated by lower_packed_varyings). - * - * For vertex shader attributes - doubles only take one slot. - * For inter-shader varyings - dvec3/dvec4 take two slots. - * - * Vulkan doesn’t make this distinction so the argument should always be - * false. - */ - unsigned count_attribute_slots(bool is_gl_vertex_input) const { - return count_vec4_slots(is_gl_vertex_input, true); - } - - /** - * Alignment in bytes of the start of this type in a std140 uniform - * block. - */ - unsigned std140_base_alignment(bool row_major) const; - - /** Size in bytes of this type in a std140 uniform block. - * - * Note that this is not GL_UNIFORM_SIZE (which is the number of - * elements in the array) - */ - unsigned std140_size(bool row_major) const; - - /** - * Gets an explicitly laid out type with the std140 layout. - */ - const glsl_type *get_explicit_std140_type(bool row_major) const; - - /** - * Alignment in bytes of the start of this type in a std430 shader - * storage block. - */ - unsigned std430_base_alignment(bool row_major) const; - - /** - * Calculate array stride in bytes of this type in a std430 shader storage - * block. - */ - unsigned std430_array_stride(bool row_major) const; - - /** - * Size in bytes of this type in a std430 shader storage block. - * - * Note that this is not GL_BUFFER_SIZE - */ - unsigned std430_size(bool row_major) const; - - /** - * Gets an explicitly laid out type with the std430 layout. - */ - const glsl_type *get_explicit_std430_type(bool row_major) const; - - /** - * Gets an explicitly laid out interface type. - */ - const glsl_type *get_explicit_interface_type(bool supports_std430) const; - - /** Returns an explicitly laid out type given a type and size/align func - * - * The size/align func is only called for scalar and vector types and the - * returned type is otherwise laid out in the natural way as follows: - * - * - Arrays and matrices have a stride of ALIGN(elem_size, elem_align). - * - * - Structure types have their elements in-order and as tightly packed as - * possible following the alignment required by the size/align func. - * - * - All composite types (structures, matrices, and arrays) have an - * alignment equal to the highest alignment of any member of the composite. - * - * The types returned by this function are likely not suitable for most UBO - * or SSBO layout because they do not add the extra array and substructure - * alignment that is required by std140 and std430. - */ - const glsl_type *get_explicit_type_for_size_align(glsl_type_size_align_func type_info, - unsigned *size, unsigned *align) const; - - const glsl_type *replace_vec3_with_vec4() const; - - /** - * Alignment in bytes of the start of this type in OpenCL memory. - */ - unsigned cl_alignment() const; - - /** - * Size in bytes of this type in OpenCL memory - */ - unsigned cl_size() const; - - /** - * Size in bytes of this type based on its explicit data. - * - * When using SPIR-V shaders (ARB_gl_spirv), memory layouts are expressed - * through explicit offset, stride and matrix layout, so the size - * can/should be computed used those values. - * - * Note that the value returned by this method is only correct if such - * values are set, so only with SPIR-V shaders. Should not be used with - * GLSL shaders. - */ - unsigned explicit_size(bool align_to_stride=false) const; - - /** - * \brief Can this type be implicitly converted to another? - * - * \return True if the types are identical or if this type can be converted - * to \c desired according to Section 4.1.10 of the GLSL spec. - * - * \verbatim - * From page 25 (31 of the pdf) of the GLSL 1.50 spec, Section 4.1.10 - * Implicit Conversions: - * - * In some situations, an expression and its type will be implicitly - * converted to a different type. The following table shows all allowed - * implicit conversions: - * - * Type of expression | Can be implicitly converted to - * -------------------------------------------------- - * int float - * uint - * - * ivec2 vec2 - * uvec2 - * - * ivec3 vec3 - * uvec3 - * - * ivec4 vec4 - * uvec4 - * - * There are no implicit array or structure conversions. For example, - * an array of int cannot be implicitly converted to an array of float. - * There are no implicit conversions between signed and unsigned - * integers. - * \endverbatim - */ - bool can_implicitly_convert_to(const glsl_type *desired, - _mesa_glsl_parse_state *state) const; - - /** - * Query whether or not a type is a scalar (non-vector and non-matrix). - */ - bool is_scalar() const - { - return (vector_elements == 1) - && (base_type >= GLSL_TYPE_UINT) - && (base_type <= GLSL_TYPE_IMAGE); - } - - /** - * Query whether or not a type is a vector - */ - bool is_vector() const - { - return (vector_elements > 1) - && (matrix_columns == 1) - && (base_type >= GLSL_TYPE_UINT) - && (base_type <= GLSL_TYPE_BOOL); - } - - /** - * Query whether or not a type is a matrix - */ - bool is_matrix() const - { - /* GLSL only has float matrices. */ - return (matrix_columns > 1) && (base_type == GLSL_TYPE_FLOAT || - base_type == GLSL_TYPE_DOUBLE || - base_type == GLSL_TYPE_FLOAT16); - } - - /** - * Query whether or not a type is a non-array numeric type - */ - bool is_numeric() const - { - return (base_type >= GLSL_TYPE_UINT) && (base_type <= GLSL_TYPE_INT64); - } - - /** - * Query whether or not a type is an integer. - */ - bool is_integer() const - { - return glsl_base_type_is_integer(base_type); - } - - /** - * Query whether or not a type is a 16-bit integer. - */ - bool is_integer_16() const - { - return base_type == GLSL_TYPE_UINT16 || base_type == GLSL_TYPE_INT16; - } - - /** - * Query whether or not a type is an 32-bit integer. - */ - bool is_integer_32() const - { - return (base_type == GLSL_TYPE_UINT) || (base_type == GLSL_TYPE_INT); - } - - /** - * Query whether or not a type is a 64-bit integer. - */ - bool is_integer_64() const - { - return base_type == GLSL_TYPE_UINT64 || base_type == GLSL_TYPE_INT64; - } - - /** - * Query whether or not a type is a 32-bit or 64-bit integer - */ - bool is_integer_32_64() const - { - return is_integer_32() || is_integer_64(); - } - - /** - * Query whether or not a type is a 16-bit or 32-bit integer - */ - bool is_integer_16_32() const - { - return is_integer_16() || is_integer_32(); - } - - /** - * Query whether or not a type is a 16-bit, 32-bit or 64-bit integer - */ - bool is_integer_16_32_64() const - { - return is_integer_16() || is_integer_32() || is_integer_64(); - } - - /** - * Query whether or not type is an integral type, or for struct and array - * types, contains an integral type. - */ - bool contains_integer() const; - - /** - * Query whether or not type is a double type, or for struct, interface and - * array types, contains a double type. - */ - bool contains_double() const; - - /** - * Query whether or not type is a 64-bit type, or for struct, interface and - * array types, contains a double type. - */ - bool contains_64bit() const; - - /** - * Query whether or not a type is a float type - */ - bool is_float() const - { - return base_type == GLSL_TYPE_FLOAT; - } - - /** - * Query whether or not a type is a half-float or float type - */ - bool is_float_16_32() const - { - return base_type == GLSL_TYPE_FLOAT16 || is_float(); - } - - /** - * Query whether or not a type is a half-float, float or double - */ - bool is_float_16_32_64() const - { - return base_type == GLSL_TYPE_FLOAT16 || is_float() || is_double(); - } - - /** - * Query whether or not a type is a float or double - */ - bool is_float_32_64() const - { - return is_float() || is_double(); - } - - bool is_int_16_32_64() const - { - return base_type == GLSL_TYPE_INT16 || - base_type == GLSL_TYPE_INT || - base_type == GLSL_TYPE_INT64; - } - - bool is_uint_16_32_64() const - { - return base_type == GLSL_TYPE_UINT16 || - base_type == GLSL_TYPE_UINT || - base_type == GLSL_TYPE_UINT64; - } - - bool is_int_16_32() const - { - return base_type == GLSL_TYPE_INT || - base_type == GLSL_TYPE_INT16; - } - - bool is_uint_16_32() const - { - return base_type == GLSL_TYPE_UINT || - base_type == GLSL_TYPE_UINT16; - } - - /** - * Query whether or not a type is a double type - */ - bool is_double() const - { - return base_type == GLSL_TYPE_DOUBLE; - } - - /** - * Query whether a 64-bit type takes two slots. - */ - bool is_dual_slot() const - { - return is_64bit() && vector_elements > 2; - } - - /** - * Query whether or not a type is 64-bit - */ - bool is_64bit() const - { - return glsl_base_type_is_64bit(base_type); - } - - /** - * Query whether or not a type is 16-bit - */ - bool is_16bit() const - { - return glsl_base_type_is_16bit(base_type); - } - - /** - * Query whether or not a type is 32-bit - */ - bool is_32bit() const - { - return base_type == GLSL_TYPE_UINT || - base_type == GLSL_TYPE_INT || - base_type == GLSL_TYPE_FLOAT; - } - - /** - * Query whether or not a type is a non-array boolean type - */ - bool is_boolean() const - { - return base_type == GLSL_TYPE_BOOL; - } - - /** - * Query whether or not a type is a sampler - */ - bool is_sampler() const - { - return base_type == GLSL_TYPE_SAMPLER; - } - - /** - * Query whether or not a type is a texture - */ - bool is_texture() const - { - return base_type == GLSL_TYPE_TEXTURE; - } - - /** - * Query whether or not type is a sampler, or for struct, interface and - * array types, contains a sampler. - */ - bool contains_sampler() const; - - /** - * Query whether or not type is an array or for struct, interface and - * array types, contains an array. - */ - bool contains_array() const; - - /** - * Get the Mesa texture target index for a sampler type. - */ - gl_texture_index sampler_index() const; - - /** - * Query whether or not type is an image, or for struct, interface and - * array types, contains an image. - */ - bool contains_image() const; - - /** - * Query whether or not a type is an image - */ - bool is_image() const - { - return base_type == GLSL_TYPE_IMAGE; - } - - /** - * Query whether or not a type is an array - */ - bool is_array() const - { - return base_type == GLSL_TYPE_ARRAY; - } - - bool is_array_of_arrays() const - { - return is_array() && fields.array->is_array(); - } - - /** - * Query whether or not a type is a record - */ - bool is_struct() const - { - return base_type == GLSL_TYPE_STRUCT; - } - - /** - * Query whether or not a type is an interface - */ - bool is_interface() const - { - return base_type == GLSL_TYPE_INTERFACE; - } - - /** - * Query whether or not a type is the void type singleton. - */ - bool is_void() const - { - return base_type == GLSL_TYPE_VOID; - } - - /** - * Query whether or not a type is the error type singleton. - */ - bool is_error() const - { - return base_type == GLSL_TYPE_ERROR; - } - - /** - * Query if a type is unnamed/anonymous (named by the parser) - */ - - bool is_subroutine() const - { - return base_type == GLSL_TYPE_SUBROUTINE; - } - bool contains_subroutine() const; - - bool is_anonymous() const - { - return !strncmp(name, "#anon", 5); - } - - /** - * Get the type stripped of any arrays - * - * \return - * Pointer to the type of elements of the first non-array type for array - * types, or pointer to itself for non-array types. - */ - const glsl_type *without_array() const - { - const glsl_type *t = this; - - while (t->is_array()) - t = t->fields.array; - - return t; - } - - /** - * Return the total number of elements in an array including the elements - * in arrays of arrays. - */ - unsigned arrays_of_arrays_size() const - { - if (!is_array()) - return 0; - - unsigned size = length; - const glsl_type *array_base_type = fields.array; - - while (array_base_type->is_array()) { - size = size * array_base_type->length; - array_base_type = array_base_type->fields.array; - } - return size; - } - - /** - * Return bit size for this type. - */ - unsigned bit_size() const - { - return glsl_base_type_bit_size(this->base_type); - } - - - /** - * Query whether or not a type is an atomic_uint. - */ - bool is_atomic_uint() const - { - return base_type == GLSL_TYPE_ATOMIC_UINT; - } - - /** - * Return the amount of atomic counter storage required for a type. - */ - unsigned atomic_size() const - { - if (is_atomic_uint()) - return ATOMIC_COUNTER_SIZE; - else if (is_array()) - return length * fields.array->atomic_size(); - else - return 0; - } - - /** - * Return whether a type contains any atomic counters. - */ - bool contains_atomic() const - { - return atomic_size() > 0; - } - - /** - * Return whether a type contains any opaque types. - */ - bool contains_opaque() const; - - /** - * Query the full type of a matrix row - * - * \return - * If the type is not a matrix, \c glsl_type::error_type is returned. - * Otherwise a type matching the rows of the matrix is returned. - */ - const glsl_type *row_type() const - { - if (!is_matrix()) - return error_type; - - if (explicit_stride && !interface_row_major) - return get_instance(base_type, matrix_columns, 1, explicit_stride); - else - return get_instance(base_type, matrix_columns, 1); - } - - /** - * Query the full type of a matrix column - * - * \return - * If the type is not a matrix, \c glsl_type::error_type is returned. - * Otherwise a type matching the columns of the matrix is returned. - */ - const glsl_type *column_type() const - { - if (!is_matrix()) - return error_type; - - if (interface_row_major) { - /* If we're row-major, the vector element stride is the same as the - * matrix stride and we have no alignment (i.e. component-aligned). - */ - return get_instance(base_type, vector_elements, 1, - explicit_stride, false, 0); - } else { - /* Otherwise, the vector is tightly packed (stride=0). For - * alignment, we treat a matrix as an array of columns make the same - * assumption that the alignment of the column is the same as the - * alignment of the whole matrix. - */ - return get_instance(base_type, vector_elements, 1, - 0, false, explicit_alignment); - } - } - - /** - * Get the type of a structure field - * - * \return - * Pointer to the type of the named field. If the type is not a structure - * or the named field does not exist, \c glsl_type::error_type is returned. - */ - const glsl_type *field_type(const char *name) const; - - /** - * Get the location of a field within a record type - */ - int field_index(const char *name) const; - - /** - * Query the number of elements in an array type - * - * \return - * The number of elements in the array for array types or -1 for non-array - * types. If the number of elements in the array has not yet been declared, - * zero is returned. - */ - int array_size() const - { - return is_array() ? length : -1; - } - - /** - * Query whether the array size for all dimensions has been declared. - */ - bool is_unsized_array() const - { - return is_array() && length == 0; - } - - /** - * Return the number of coordinate components needed for this - * sampler or image type. - * - * This is based purely on the sampler's dimensionality. For example, this - * returns 1 for sampler1D, and 3 for sampler2DArray. - * - * Note that this is often different than actual coordinate type used in - * a texturing built-in function, since those pack additional values (such - * as the shadow comparator or projector) into the coordinate type. - */ - int coordinate_components() const; - - /** - * Compares whether this type matches another type without taking into - * account the precision in structures. - * - * This is applied recursively so that structures containing structure - * members can also ignore the precision. - */ - bool compare_no_precision(const glsl_type *b) const; - - /** - * Compare a record type against another record type. - * - * This is useful for matching record types declared on the same shader - * stage as well as across different shader stages. - * The option to not match name is needed for matching record types - * declared across different shader stages. - * The option to not match locations is to deal with places where the - * same struct is defined in a block which has a location set on it. - */ - bool record_compare(const glsl_type *b, bool match_name, - bool match_locations = true, - bool match_precision = true) const; - - /** - * Get the type interface packing. - */ - enum glsl_interface_packing get_interface_packing() const - { - return (enum glsl_interface_packing)interface_packing; - } - - /** - * Get the type interface packing used internally. For shared and packing - * layouts this is implementation defined. - */ - enum glsl_interface_packing get_internal_ifc_packing(bool std430_supported) const - { - enum glsl_interface_packing packing = this->get_interface_packing(); - if (packing == GLSL_INTERFACE_PACKING_STD140 || - (!std430_supported && - (packing == GLSL_INTERFACE_PACKING_SHARED || - packing == GLSL_INTERFACE_PACKING_PACKED))) { - return GLSL_INTERFACE_PACKING_STD140; - } else { - assert(packing == GLSL_INTERFACE_PACKING_STD430 || - (std430_supported && - (packing == GLSL_INTERFACE_PACKING_SHARED || - packing == GLSL_INTERFACE_PACKING_PACKED))); - return GLSL_INTERFACE_PACKING_STD430; - } - } - - /** - * Check if the type interface is row major - */ - bool get_interface_row_major() const - { - return (bool) interface_row_major; - } - - ~glsl_type(); - -private: - - static simple_mtx_t hash_mutex; - - /** - * ralloc context for the type itself. - */ - void *mem_ctx; - - /** Constructor for vector and matrix types */ - glsl_type(GLenum gl_type, - glsl_base_type base_type, unsigned vector_elements, - unsigned matrix_columns, const char *name, - unsigned explicit_stride = 0, bool row_major = false, - unsigned explicit_alignment = 0); - - /** Constructor for sampler or image types */ - glsl_type(GLenum gl_type, glsl_base_type base_type, - enum glsl_sampler_dim dim, bool shadow, bool array, - glsl_base_type type, const char *name); - - /** Constructor for record types */ - glsl_type(const glsl_struct_field *fields, unsigned num_fields, - const char *name, bool packed = false, - unsigned explicit_alignment = 0); - - /** Constructor for interface types */ - glsl_type(const glsl_struct_field *fields, unsigned num_fields, - enum glsl_interface_packing packing, - bool row_major, const char *name); - - /** Constructor for interface types */ - glsl_type(const glsl_type *return_type, - const glsl_function_param *params, unsigned num_params); - - /** Constructors for array types */ - glsl_type(const glsl_type *array, unsigned length, unsigned explicit_stride); - - /** Constructor for subroutine types */ - glsl_type(const char *name); - - /** Hash table containing the known explicit matrix and vector types. */ - static struct hash_table *explicit_matrix_types; - - /** Hash table containing the known array types. */ - static struct hash_table *array_types; - - /** Hash table containing the known struct types. */ - static struct hash_table *struct_types; - - /** Hash table containing the known interface types. */ - static struct hash_table *interface_types; - - /** Hash table containing the known subroutine types. */ - static struct hash_table *subroutine_types; - - /** Hash table containing the known function types. */ - static struct hash_table *function_types; - - static bool record_key_compare(const void *a, const void *b); - static unsigned record_key_hash(const void *key); - - /** - * \name Built-in type flyweights - */ - /*@{*/ -#undef DECL_TYPE -#define DECL_TYPE(NAME, ...) static const glsl_type _##NAME##_type; -#undef STRUCT_TYPE -#define STRUCT_TYPE(NAME) static const glsl_type _struct_##NAME##_type; -#include "builtin_type_macros.h" - /*@}*/ - - /** - * \name Friend functions. - * - * These functions are friends because they must have C linkage and the - * need to call various private methods or access various private static - * data. - */ - /*@{*/ - friend void glsl_type_singleton_init_or_ref(void); - friend void glsl_type_singleton_decref(void); - friend void _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *); - /*@}*/ -}; - -#undef DECL_TYPE -#undef STRUCT_TYPE -#endif /* __cplusplus */ - -struct glsl_struct_field { - const struct glsl_type *type; - const char *name; - - /** - * For interface blocks, gl_varying_slot corresponding to the input/output - * if this is a built-in input/output (i.e. a member of the built-in - * gl_PerVertex interface block); -1 otherwise. - * - * Ignored for structs. - */ - int location; - - /** - * For interface blocks, members may explicitly assign the component used - * by a varying. Ignored for structs. - */ - int component; - - /** - * For interface blocks, members may have an explicit byte offset - * specified; -1 otherwise. Also used for xfb_offset layout qualifier. - * - * Unless used for xfb_offset this field is ignored for structs. - */ - int offset; - - /** - * For interface blocks, members may define a transform feedback buffer; - * -1 otherwise. - */ - int xfb_buffer; - - /** - * For interface blocks, members may define a transform feedback stride; - * -1 otherwise. - */ - int xfb_stride; - - /** - * Layout format, applicable to image variables only. - */ - enum pipe_format image_format; - - union { - struct { - /** - * For interface blocks, the interpolation mode (as in - * ir_variable::interpolation). 0 otherwise. - */ - unsigned interpolation:3; - - /** - * For interface blocks, 1 if this variable uses centroid interpolation (as - * in ir_variable::centroid). 0 otherwise. - */ - unsigned centroid:1; - - /** - * For interface blocks, 1 if this variable uses sample interpolation (as - * in ir_variable::sample). 0 otherwise. - */ - unsigned sample:1; - - /** - * Layout of the matrix. Uses glsl_matrix_layout values. - */ - unsigned matrix_layout:2; - - /** - * For interface blocks, 1 if this variable is a per-patch input or output - * (as in ir_variable::patch). 0 otherwise. - */ - unsigned patch:1; - - /** - * Precision qualifier - */ - unsigned precision:2; - - /** - * Memory qualifiers, applicable to buffer variables defined in shader - * storage buffer objects (SSBOs) - */ - unsigned memory_read_only:1; - unsigned memory_write_only:1; - unsigned memory_coherent:1; - unsigned memory_volatile:1; - unsigned memory_restrict:1; - - /** - * Any of the xfb_* qualifiers trigger the shader to be in transform - * feedback mode so we need to keep track of whether the buffer was - * explicitly set or if its just been assigned the default global value. - */ - unsigned explicit_xfb_buffer:1; - - unsigned implicit_sized_array:1; - }; - unsigned flags; - }; -#ifdef __cplusplus -#define DEFAULT_CONSTRUCTORS(_type, _name) \ - type(_type), name(_name), location(-1), component(-1), offset(-1), \ - xfb_buffer(0), xfb_stride(0), image_format(PIPE_FORMAT_NONE), flags(0) \ - - glsl_struct_field(const struct glsl_type *_type, - int _precision, - const char *_name) - : DEFAULT_CONSTRUCTORS(_type, _name) - { - matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; - precision = _precision; - } - - glsl_struct_field(const struct glsl_type *_type, const char *_name) - : DEFAULT_CONSTRUCTORS(_type, _name) - { - matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; - precision = GLSL_PRECISION_NONE; - } - - glsl_struct_field() - : DEFAULT_CONSTRUCTORS(NULL, NULL) - { - matrix_layout = GLSL_MATRIX_LAYOUT_INHERITED; - precision = GLSL_PRECISION_NONE; - } -#undef DEFAULT_CONSTRUCTORS -#endif -}; - -struct glsl_function_param { - const struct glsl_type *type; - - bool in; - bool out; -}; - -static inline unsigned int -glsl_align(unsigned int a, unsigned int align) -{ - return (a + align - 1) / align * align; -} - -#endif /* GLSL_TYPES_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/ir_expression_operation.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/ir_expression_operation.h deleted file mode 100644 index 995d415..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/ir_expression_operation.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (C) 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -enum ir_expression_operation { - ir_unop_bit_not, - ir_unop_logic_not, - ir_unop_neg, - ir_unop_abs, - ir_unop_sign, - ir_unop_rcp, - ir_unop_rsq, - ir_unop_sqrt, - ir_unop_exp, - ir_unop_log, - ir_unop_exp2, - ir_unop_log2, - ir_unop_f2i, - ir_unop_f2u, - ir_unop_i2f, - ir_unop_f2b, - ir_unop_b2f, - ir_unop_b2f16, - ir_unop_i2b, - ir_unop_b2i, - ir_unop_u2f, - ir_unop_i2u, - ir_unop_u2i, - ir_unop_d2f, - ir_unop_f2d, - ir_unop_f2f16, - ir_unop_f2fmp, - ir_unop_f162f, - ir_unop_i2i, - ir_unop_i2imp, - ir_unop_u2u, - ir_unop_u2ump, - ir_unop_d2i, - ir_unop_i2d, - ir_unop_d2u, - ir_unop_u2d, - ir_unop_d2b, - ir_unop_f162b, - ir_unop_bitcast_i2f, - ir_unop_bitcast_f2i, - ir_unop_bitcast_u2f, - ir_unop_bitcast_f2u, - ir_unop_bitcast_u642d, - ir_unop_bitcast_i642d, - ir_unop_bitcast_d2u64, - ir_unop_bitcast_d2i64, - ir_unop_i642i, - ir_unop_u642i, - ir_unop_i642u, - ir_unop_u642u, - ir_unop_i642b, - ir_unop_i642f, - ir_unop_u642f, - ir_unop_i642d, - ir_unop_u642d, - ir_unop_i2i64, - ir_unop_u2i64, - ir_unop_b2i64, - ir_unop_f2i64, - ir_unop_d2i64, - ir_unop_i2u64, - ir_unop_u2u64, - ir_unop_f2u64, - ir_unop_d2u64, - ir_unop_u642i64, - ir_unop_i642u64, - ir_unop_trunc, - ir_unop_ceil, - ir_unop_floor, - ir_unop_fract, - ir_unop_round_even, - ir_unop_sin, - ir_unop_cos, - ir_unop_atan, - ir_unop_dFdx, - ir_unop_dFdx_coarse, - ir_unop_dFdx_fine, - ir_unop_dFdy, - ir_unop_dFdy_coarse, - ir_unop_dFdy_fine, - ir_unop_pack_snorm_2x16, - ir_unop_pack_snorm_4x8, - ir_unop_pack_unorm_2x16, - ir_unop_pack_unorm_4x8, - ir_unop_pack_half_2x16, - ir_unop_unpack_snorm_2x16, - ir_unop_unpack_snorm_4x8, - ir_unop_unpack_unorm_2x16, - ir_unop_unpack_unorm_4x8, - ir_unop_unpack_half_2x16, - ir_unop_bitfield_reverse, - ir_unop_bit_count, - ir_unop_find_msb, - ir_unop_find_lsb, - ir_unop_clz, - ir_unop_saturate, - ir_unop_pack_double_2x32, - ir_unop_unpack_double_2x32, - ir_unop_pack_sampler_2x32, - ir_unop_pack_image_2x32, - ir_unop_unpack_sampler_2x32, - ir_unop_unpack_image_2x32, - ir_unop_frexp_sig, - ir_unop_frexp_exp, - ir_unop_subroutine_to_int, - ir_unop_interpolate_at_centroid, - ir_unop_get_buffer_size, - ir_unop_ssbo_unsized_array_length, - ir_unop_implicitly_sized_array_length, - ir_unop_pack_int_2x32, - ir_unop_pack_uint_2x32, - ir_unop_unpack_int_2x32, - ir_unop_unpack_uint_2x32, - ir_binop_add, - ir_binop_sub, - ir_binop_add_sat, - ir_binop_sub_sat, - ir_binop_abs_sub, - ir_binop_avg, - ir_binop_avg_round, - ir_binop_mul, - ir_binop_mul_32x16, - ir_binop_imul_high, - ir_binop_div, - ir_binop_carry, - ir_binop_borrow, - ir_binop_mod, - ir_binop_less, - ir_binop_gequal, - ir_binop_equal, - ir_binop_nequal, - ir_binop_all_equal, - ir_binop_any_nequal, - ir_binop_lshift, - ir_binop_rshift, - ir_binop_bit_and, - ir_binop_bit_xor, - ir_binop_bit_or, - ir_binop_logic_and, - ir_binop_logic_xor, - ir_binop_logic_or, - ir_binop_dot, - ir_binop_min, - ir_binop_max, - ir_binop_pow, - ir_binop_ubo_load, - ir_binop_ldexp, - ir_binop_vector_extract, - ir_binop_interpolate_at_offset, - ir_binop_interpolate_at_sample, - ir_binop_atan2, - ir_triop_fma, - ir_triop_lrp, - ir_triop_csel, - ir_triop_bitfield_extract, - ir_triop_vector_insert, - ir_quadop_bitfield_insert, - ir_quadop_vector, - - /* Sentinels marking the last of each kind of operation. */ - ir_last_unop = ir_unop_unpack_uint_2x32, - ir_last_binop = ir_binop_atan2, - ir_last_triop = ir_triop_vector_insert, - ir_last_quadop = ir_quadop_vector, - ir_last_opcode = ir_quadop_vector -}; diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/meson.build b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/meson.build deleted file mode 100644 index 50138f0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/meson.build +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright © 2017 Intel Corporation - -# 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 THE -# AUTHORS OR COPYRIGHT HOLDERS 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. - -inc_compiler = include_directories('.') -inc_glsl = include_directories('glsl') -#inc_spirv = include_directories('spirv') - -float64_glsl_file = files('glsl/float64.glsl') - -files_libcompiler = files( - 'builtin_type_macros.h', - 'glsl_types.cpp', - 'glsl_types.h', - 'nir_types.cpp', - 'nir_types.h', - 'shader_enums.c', - 'shader_enums.h', - 'shader_info.h', -) - -ir_expression_operation_h = custom_target( - 'ir_expression_operation.h', - input : 'glsl/ir_expression_operation.py', - output : 'ir_expression_operation.h', - command : [prog_python, '@INPUT@', 'enum'], - capture : true, -) - -libcompiler = static_library( - 'compiler', - [files_libcompiler, ir_expression_operation_h], - include_directories : [inc_mapi, inc_mesa, inc_compiler, inc_include, inc_src, inc_gallium, inc_gallium_aux], - c_args : [c_msvc_compat_args, no_override_init_args], - cpp_args : [cpp_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - dependencies : [dep_valgrind], - build_by_default : false, -) - -#subdir('spirv') - -subdir('nir') - - - -if with_clc - subdir('clc') -endif -subdir('glsl') diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/README b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/README deleted file mode 100644 index 7b312a3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/README +++ /dev/null @@ -1,118 +0,0 @@ -New IR, or NIR, is an IR for Mesa intended to sit below GLSL IR and Mesa IR. -Its design inherits from the various IRs that Mesa has used in the past, as -well as Direct3D assembly, and it includes a few new ideas as well. It is a -flat (in terms of using instructions instead of expressions), typeless IR, -similar to TGSI and Mesa IR. It also supports SSA (although it doesn't require -it). - -Variables -========= - -NIR includes support for source-level GLSL variables through a structure mostly -copied from GLSL IR. These will be used for linking and conversion from GLSL IR -(and later, from an AST), but for the most part, they will be lowered to -registers (see below) and loads/stores. - -Registers -========= - -Registers are light-weight; they consist of a structure that only contains its -size, its index for liveness analysis, and an optional name for debugging. In -addition, registers can be local to a function or global to the entire shader; -the latter will be used in ARB_shader_subroutine for passing parameters and -getting return values from subroutines. Registers can also be an array, in which -case they can be accessed indirectly. Each ALU instruction (add, subtract, etc.) -works directly with registers or SSA values (see below). - -SSA -======== - -Everywhere a register can be loaded/stored, an SSA value can be used instead. -The only exception is that arrays/indirect addressing are not supported with -SSA; although research has been done on extensions of SSA to arrays before, it's -usually for the purpose of parallelization (which we're not interested in), and -adds some overhead in the form of adding copies or extra arrays (which is much -more expensive than introducing copies between non-array registers). SSA uses -point directly to their corresponding definition, which in turn points to the -instruction it is part of. This creates an implicit use-def chain and avoids the -need for an external structure for each SSA register. - -Functions -========= - -Support for function calls is mostly similar to GLSL IR. Each shader contains a -list of functions, and each function has a list of overloads. Each overload -contains a list of parameters, and may contain an implementation which specifies -the variables that correspond to the parameters and return value. Inlining a -function, assuming it has a single return point, is as simple as copying its -instructions, registers, and local variables into the target function and then -inserting copies to and from the new parameters as appropriate. After functions -are inlined and any non-subroutine functions are deleted, parameters and return -variables will be converted to global variables and then global registers. We -don't do this lowering earlier (i.e. the fortranizer idea) for a few reasons: - -- If we want to do optimizations before link time, we need to have the function -signature available during link-time. - -- If we do any inlining before link time, then we might wind up with the -inlined function and the non-inlined function using the same global -variables/registers which would preclude optimization. - -Intrinsics -========= - -Any operation (other than function calls and textures) which touches a variable -or is not referentially transparent is represented by an intrinsic. Intrinsics -are similar to the idea of a "builtin function," i.e. a function declaration -whose implementation is provided by the backend, except they are more powerful -in the following ways: - -- They can also load and store registers when appropriate, which limits the -number of variables needed in later stages of the IR while obviating the need -for a separate load/store variable instruction. - -- Intrinsics can be marked as side-effect free, which permits them to be -treated like any other instruction when it comes to optimizations. This allows -load intrinsics to be represented as intrinsics while still being optimized -away by dead code elimination, common subexpression elimination, etc. - -Intrinsics are used for: - -- Atomic operations -- Memory barriers -- Subroutine calls -- Geometry shader emitVertex and endPrimitive -- Loading and storing variables (before lowering) -- Loading and storing uniforms, shader inputs and outputs, etc (after lowering) -- Copying variables (cases where in GLSL the destination is a structure or -array) -- The kitchen sink -- ... - -Textures -========= - -Unfortunately, there are far too many texture operations to represent each one -of them with an intrinsic, so there's a special texture instruction similar to -the GLSL IR one. The biggest difference is that, while the texture instruction -has a sampler dereference field used just like in GLSL IR, this gets lowered to -a texture unit index (with a possible indirect offset) while the type -information of the original sampler is kept around for backends. Also, all the -non-constant sources are stored in a single array to make it easier for -optimization passes to iterate over all the sources. - -Control Flow -========= - -Like in GLSL IR, control flow consists of a tree of "control flow nodes", which -include if statements and loops, and jump instructions (break, continue, and -return). Unlike GLSL IR, though, the leaves of the tree aren't statements but -basic blocks. Each basic block also keeps track of its successors and -predecessors, and function implementations keep track of the beginning basic -block (the first basic block of the function) and the ending basic block (a fake -basic block that every return statement points to). Together, these elements -make up the control flow graph, in this case a redundant piece of information on -top of the control flow tree that will be used by almost all the optimizations. -There are helper functions to add and remove control flow nodes that also update -the control flow graph, and so usually it doesn't need to be touched by passes -that modify control flow nodes. diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/meson.build b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/meson.build deleted file mode 100644 index 071d6a8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/meson.build +++ /dev/null @@ -1,376 +0,0 @@ -# Copyright © 2017 Intel Corporation - -# 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 THE -# AUTHORS OR COPYRIGHT HOLDERS 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. - -nir_depends = files('nir_opcodes.py', 'nir_intrinsics.py') - -nir_algebraic_depends = files('nir_opcodes.py', 'nir_algebraic.py') - -nir_builder_opcodes_h = custom_target( - 'nir_builder_opcodes.h', - input : 'nir_builder_opcodes_h.py', - output : 'nir_builder_opcodes.h', - command : [prog_python, '@INPUT@'], - capture : true, - depend_files : nir_depends, -) - -nir_constant_expressions_c = custom_target( - 'nir_constant_expressions.c', - input : 'nir_constant_expressions.py', - output : 'nir_constant_expressions.c', - command : [prog_python, '@INPUT@'], - capture : true, - depend_files : nir_depends, -) - -nir_opcodes_h = custom_target( - 'nir_opcodes.h', - input : 'nir_opcodes_h.py', - output : 'nir_opcodes.h', - command : [prog_python, '@INPUT@'], - capture : true, - depend_files : nir_depends, -) - -nir_opcodes_c = custom_target( - 'nir_opcodes.c', - input : 'nir_opcodes_c.py', - output : 'nir_opcodes.c', - command : [prog_python, '@INPUT@'], - capture : true, - depend_files : nir_depends, -) - -nir_opt_algebraic_c = custom_target( - 'nir_opt_algebraic.c', - input : 'nir_opt_algebraic.py', - output : 'nir_opt_algebraic.c', - command : [prog_python, '@INPUT@'], - capture : true, - depend_files : nir_algebraic_depends, -) - -nir_intrinsics_h = custom_target( - 'nir_intrinsics.h', - input : 'nir_intrinsics_h.py', - output : 'nir_intrinsics.h', - command : [prog_python, '@INPUT@', '--outdir', meson.current_build_dir()], - capture : false, - depend_files : files('nir_intrinsics.py'), -) - -nir_intrinsics_indices_h = custom_target( - 'nir_intrinsics_indices.h', - input : 'nir_intrinsics_indices_h.py', - output : 'nir_intrinsics_indices.h', - command : [prog_python, '@INPUT@', '--outdir', meson.current_build_dir()], - capture : false, - depend_files : files('nir_intrinsics.py'), -) - -nir_intrinsics_c = custom_target( - 'nir_intrinsic.c', - input : 'nir_intrinsics_c.py', - output : 'nir_intrinsics.c', - command : [prog_python, '@INPUT@', '--outdir', meson.current_build_dir()], - capture: false, - depend_files : files('nir_intrinsics.py'), -) - -files_libnir = files( - 'nir.c', - 'nir.h', - 'nir_builder.c', - 'nir_builder.h', - 'nir_builtin_builder.c', - 'nir_builtin_builder.h', - 'nir_conversion_builder.h', - 'nir_clone.c', - 'nir_constant_expressions.h', - 'nir_control_flow.c', - 'nir_control_flow.h', - 'nir_control_flow_private.h', - 'nir_convert_ycbcr.c', - 'nir_deref.c', - 'nir_deref.h', - 'nir_divergence_analysis.c', - 'nir_dominance.c', - 'nir_format_convert.h', - 'nir_from_ssa.c', - 'nir_gather_info.c', - 'nir_gather_ssa_types.c', - 'nir_gather_xfb_info.c', - 'nir_group_loads.c', - 'nir_gs_count_vertices.c', - 'nir_inline_functions.c', - 'nir_inline_uniforms.c', - 'nir_instr_set.c', - 'nir_instr_set.h', - 'nir_linking_helpers.c', - 'nir_liveness.c', - 'nir_loop_analyze.c', - 'nir_loop_analyze.h', - 'nir_lower_alu.c', - 'nir_lower_alu_width.c', - 'nir_lower_alpha_test.c', - 'nir_lower_amul.c', - 'nir_lower_array_deref_of_vec.c', - 'nir_lower_atomics_to_ssbo.c', - 'nir_lower_bitmap.c', - 'nir_lower_blend.c', - 'nir_lower_bool_to_bitsize.c', - 'nir_lower_bool_to_float.c', - 'nir_lower_bool_to_int32.c', - 'nir_lower_cl_images.c', - 'nir_lower_clamp_color_outputs.c', - 'nir_lower_clip.c', - 'nir_lower_clip_cull_distance_arrays.c', - 'nir_lower_clip_disable.c', - 'nir_lower_clip_halfz.c', - 'nir_lower_const_arrays_to_uniforms.c', - 'nir_lower_continue_constructs.c', - 'nir_lower_convert_alu_types.c', - 'nir_lower_variable_initializers.c', - 'nir_lower_discard_if.c', - 'nir_lower_discard_or_demote.c', - 'nir_lower_double_ops.c', - 'nir_lower_drawpixels.c', - 'nir_lower_fb_read.c', - 'nir_lower_flatshade.c', - 'nir_lower_flrp.c', - 'nir_lower_fp16_conv.c', - 'nir_lower_fragcoord_wtrans.c', - 'nir_lower_fragcolor.c', - 'nir_lower_frexp.c', - 'nir_lower_global_vars_to_local.c', - 'nir_lower_goto_ifs.c', - 'nir_lower_gs_intrinsics.c', - 'nir_lower_helper_writes.c', - 'nir_lower_load_const_to_scalar.c', - 'nir_lower_locals_to_regs.c', - 'nir_lower_idiv.c', - 'nir_lower_image.c', - 'nir_lower_indirect_derefs.c', - 'nir_lower_input_attachments.c', - 'nir_lower_int64.c', - 'nir_lower_interpolation.c', - 'nir_lower_int_to_float.c', - 'nir_lower_io.c', - 'nir_lower_io_arrays_to_elements.c', - 'nir_lower_io_to_temporaries.c', - 'nir_lower_io_to_scalar.c', - 'nir_lower_io_to_vector.c', - 'nir_lower_is_helper_invocation.c', - 'nir_lower_multiview.c', - 'nir_lower_mediump.c', - 'nir_lower_mem_access_bit_sizes.c', - 'nir_lower_memcpy.c', - 'nir_lower_memory_model.c', - 'nir_lower_non_uniform_access.c', - 'nir_lower_packing.c', - 'nir_lower_passthrough_edgeflags.c', - 'nir_lower_patch_vertices.c', - 'nir_lower_phis_to_scalar.c', - 'nir_lower_pntc_ytransform.c', - 'nir_lower_point_size.c', - 'nir_lower_point_size_mov.c', - 'nir_lower_point_smooth.c', - 'nir_lower_poly_line_smooth.c', - 'nir_lower_printf.c', - 'nir_lower_regs_to_ssa.c', - 'nir_lower_readonly_images_to_tex.c', - 'nir_lower_returns.c', - 'nir_lower_samplers.c', - 'nir_lower_scratch.c', - 'nir_lower_shader_calls.c', - 'nir_lower_single_sampled.c', - 'nir_lower_ssbo.c', - 'nir_lower_subgroups.c', - 'nir_lower_system_values.c', - 'nir_lower_task_shader.c', - 'nir_lower_tex_shadow.c', - 'nir_lower_tex.c', - 'nir_lower_texcoord_replace.c', - 'nir_lower_texcoord_replace_late.c', - 'nir_lower_to_source_mods.c', - 'nir_lower_two_sided_color.c', - 'nir_lower_undef_to_zero.c', - 'nir_lower_vars_to_ssa.c', - 'nir_lower_var_copies.c', - 'nir_lower_vec_to_movs.c', - 'nir_lower_vec3_to_vec4.c', - 'nir_lower_viewport_transform.c', - 'nir_lower_wpos_center.c', - 'nir_lower_wpos_ytransform.c', - 'nir_lower_wrmasks.c', - 'nir_lower_bit_size.c', - 'nir_lower_ubo_vec4.c', - 'nir_lower_uniforms_to_ubo.c', - 'nir_lower_sysvals_to_varyings.c', - 'nir_metadata.c', - 'nir_mod_analysis.c', - 'nir_move_vec_src_uses_to_dest.c', - 'nir_normalize_cubemap_coords.c', - 'nir_opt_access.c', - 'nir_opt_barriers.c', - 'nir_opt_combine_stores.c', - 'nir_opt_comparison_pre.c', - 'nir_opt_conditional_discard.c', - 'nir_opt_constant_folding.c', - 'nir_opt_copy_prop_vars.c', - 'nir_opt_copy_propagate.c', - 'nir_opt_cse.c', - 'nir_opt_dce.c', - 'nir_opt_dead_cf.c', - 'nir_opt_dead_write_vars.c', - 'nir_opt_find_array_copies.c', - 'nir_opt_fragdepth.c', - 'nir_opt_gcm.c', - 'nir_opt_idiv_const.c', - 'nir_opt_if.c', - 'nir_opt_intrinsics.c', - 'nir_opt_large_constants.c', - 'nir_opt_load_store_vectorize.c', - 'nir_opt_loop_unroll.c', - 'nir_opt_memcpy.c', - 'nir_opt_move.c', - 'nir_opt_move_discards_to_top.c', - 'nir_opt_non_uniform_access.c', - 'nir_opt_offsets.c', - 'nir_opt_peephole_select.c', - 'nir_opt_phi_precision.c', - 'nir_opt_preamble.c', - 'nir_opt_ray_queries.c', - 'nir_opt_rematerialize_compares.c', - 'nir_opt_remove_phis.c', - 'nir_opt_shrink_stores.c', - 'nir_opt_shrink_vectors.c', - 'nir_opt_sink.c', - 'nir_opt_trivial_continues.c', - 'nir_opt_undef.c', - 'nir_opt_uniform_atomics.c', - 'nir_opt_vectorize.c', - 'nir_passthrough_gs.c', - 'nir_passthrough_tcs.c', - 'nir_phi_builder.c', - 'nir_phi_builder.h', - 'nir_print.c', - 'nir_propagate_invariant.c', - 'nir_range_analysis.c', - 'nir_range_analysis.h', - 'nir_remove_dead_variables.c', - 'nir_repair_ssa.c', - 'nir_scale_fdiv.c', - 'nir_schedule.c', - 'nir_schedule.h', - 'nir_search.c', - 'nir_search.h', - 'nir_search_helpers.h', - 'nir_serialize.c', - 'nir_serialize.h', - 'nir_split_64bit_vec3_and_vec4.c', - 'nir_split_per_member_structs.c', - 'nir_split_var_copies.c', - 'nir_split_vars.c', - 'nir_sweep.c', - 'nir_to_lcssa.c', - 'nir_validate.c', - 'nir_vla.h', - 'nir_vulkan.h', - 'nir_worklist.c', - 'nir_worklist.h', - 'nir_xfb_info.h', -) - -_libnir_args = [] -if dep_clc.found() - _basedir = dep_clc.get_variable(pkgconfig : 'libexecdir') - - _static_libclc = get_option('static-libclc') - if _static_libclc.length() > 0 - if _static_libclc.contains('all') - #_static_libclc = ['spirv', 'spirv64'] - endif - - prog_zstd = find_program('zstd', required : false) - _zstd_static_libclc = dep_zstd.found() and prog_zstd.found() - if _zstd_static_libclc - _libnir_args += '-DHAVE_STATIC_LIBCLC_ZSTD' - endif - - foreach s : _static_libclc - _libnir_args += '-DHAVE_STATIC_LIBCLC_@0@'.format(s.to_upper()) - f = '@0@-mesa3d-.spv'.format(s) - _libclc_file = _basedir / f - - if _zstd_static_libclc - _libclc_file = custom_target( - '@0@.zstd'.format(f), - command : [prog_zstd, '-f', '@INPUT@', '-o', '@OUTPUT@'], - input : [_libclc_file], - output : '@0@.zstd'.format(f), - ) - endif - - files_libnir += custom_target( - '@0@.h'.format(f), - command : [ - prog_python, files_xxd, '-b', '@INPUT@', '@OUTPUT@', - '-n', 'libclc_@0@_mesa3d_spv'.format(s), - ], - input : [_libclc_file], - output : '@0@.h'.format(f), - depend_files : files_xxd, - ) - endforeach - else - _libnir_args += ['-DDYNAMIC_LIBCLC_PATH="@0@/"'.format(_basedir)] - if not cc.has_function('mmap') - error('mmap required for dynamic libCLC loading') - endif - endif -endif - -_libnir = static_library( - 'nir', - [files_libnir, nir_opt_algebraic_c, nir_opcodes_c, - nir_opcodes_h, nir_constant_expressions_c, nir_builder_opcodes_h, - nir_intrinsics_c, nir_intrinsics_h, nir_intrinsics_indices_h], - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_compiler], - c_args : [c_msvc_compat_args, no_override_init_args, _libnir_args], - gnu_symbol_visibility : 'hidden', - dependencies : dep_valgrind, - link_with : libcompiler, - build_by_default : false, -) - -inc_nir = include_directories('.') - -# Headers-only dependency -idep_nir_headers = declare_dependency( - sources : [nir_opcodes_h, nir_builder_opcodes_h, nir_intrinsics_h, nir_intrinsics_indices_h], - include_directories : inc_nir, -) - -# Also link with nir -idep_nir = declare_dependency( - dependencies : [idep_nir_headers, idep_mesautil], - link_with : _libnir, -) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir.c deleted file mode 100644 index 10943ea..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir.c +++ /dev/null @@ -1,3537 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_control_flow_private.h" -#include "nir_worklist.h" -#include "../../util/half_float.h" -#include -#include -#include -#include "../../util/u_math.h" -#include "../../util/u_qsort.h" - -#include "../../mesa/main/menums.h" /* BITFIELD64_MASK */ - -#ifndef NDEBUG -uint32_t nir_debug = 0; -bool nir_debug_print_shader[MESA_SHADER_KERNEL + 1] = { 0 }; - -static const struct debug_named_value nir_debug_control[] = { - { "clone", NIR_DEBUG_CLONE, - "Test cloning a shader at each successful lowering/optimization call" }, - { "serialize", NIR_DEBUG_SERIALIZE, - "Test serialize and deserialize shader at each successful lowering/optimization call" }, - { "novalidate", NIR_DEBUG_NOVALIDATE, - "Disable shader validation at each successful lowering/optimization call" }, - { "validate_ssa_dominance", NIR_DEBUG_VALIDATE_SSA_DOMINANCE, - "Validate SSA dominance in shader at each successful lowering/optimization call" }, - { "tgsi", NIR_DEBUG_TGSI, - "Dump NIR/TGSI shaders when doing a NIR<->TGSI translation" }, - { "print", NIR_DEBUG_PRINT, - "Dump resulting shader after each successful lowering/optimization call" }, - { "print_vs", NIR_DEBUG_PRINT_VS, - "Dump resulting vertex shader after each successful lowering/optimization call" }, - { "print_tcs", NIR_DEBUG_PRINT_TCS, - "Dump resulting tessellation control shader after each successful lowering/optimization call" }, - { "print_tes", NIR_DEBUG_PRINT_TES, - "Dump resulting tessellation evaluation shader after each successful lowering/optimization call" }, - { "print_gs", NIR_DEBUG_PRINT_GS, - "Dump resulting geometry shader after each successful lowering/optimization call" }, - { "print_fs", NIR_DEBUG_PRINT_FS, - "Dump resulting fragment shader after each successful lowering/optimization call" }, - { "print_cs", NIR_DEBUG_PRINT_CS, - "Dump resulting compute shader after each successful lowering/optimization call" }, - { "print_ts", NIR_DEBUG_PRINT_TS, - "Dump resulting task shader after each successful lowering/optimization call" }, - { "print_ms", NIR_DEBUG_PRINT_MS, - "Dump resulting mesh shader after each successful lowering/optimization call" }, - { "print_rgs", NIR_DEBUG_PRINT_RGS, - "Dump resulting raygen shader after each successful lowering/optimization call" }, - { "print_ahs", NIR_DEBUG_PRINT_AHS, - "Dump resulting any-hit shader after each successful lowering/optimization call" }, - { "print_chs", NIR_DEBUG_PRINT_CHS, - "Dump resulting closest-hit shader after each successful lowering/optimization call" }, - { "print_mhs", NIR_DEBUG_PRINT_MHS, - "Dump resulting miss-hit shader after each successful lowering/optimization call" }, - { "print_is", NIR_DEBUG_PRINT_IS, - "Dump resulting intersection shader after each successful lowering/optimization call" }, - { "print_cbs", NIR_DEBUG_PRINT_CBS, - "Dump resulting callable shader after each successful lowering/optimization call" }, - { "print_ks", NIR_DEBUG_PRINT_KS, - "Dump resulting kernel shader after each successful lowering/optimization call" }, - { "print_consts", NIR_DEBUG_PRINT_CONSTS, - "Print const value near each use of const SSA variable" }, - { "print_internal", NIR_DEBUG_PRINT_INTERNAL, - "Print shaders even if they are marked as internal" }, - DEBUG_NAMED_VALUE_END -}; - -DEBUG_GET_ONCE_FLAGS_OPTION(nir_debug, "NIR_DEBUG", nir_debug_control, 0) - -static void -nir_process_debug_variable_once(void) -{ - nir_debug = debug_get_option_nir_debug(); - nir_debug_print_shader[MESA_SHADER_VERTEX] = NIR_DEBUG(PRINT_VS); - nir_debug_print_shader[MESA_SHADER_TESS_CTRL] = NIR_DEBUG(PRINT_TCS); - nir_debug_print_shader[MESA_SHADER_TESS_EVAL] = NIR_DEBUG(PRINT_TES); - nir_debug_print_shader[MESA_SHADER_GEOMETRY] = NIR_DEBUG(PRINT_GS); - nir_debug_print_shader[MESA_SHADER_FRAGMENT] = NIR_DEBUG(PRINT_FS); - nir_debug_print_shader[MESA_SHADER_COMPUTE] = NIR_DEBUG(PRINT_CS); - nir_debug_print_shader[MESA_SHADER_TASK] = NIR_DEBUG(PRINT_TS); - nir_debug_print_shader[MESA_SHADER_MESH] = NIR_DEBUG(PRINT_MS); - nir_debug_print_shader[MESA_SHADER_RAYGEN] = NIR_DEBUG(PRINT_RGS); - nir_debug_print_shader[MESA_SHADER_ANY_HIT] = NIR_DEBUG(PRINT_AHS); - nir_debug_print_shader[MESA_SHADER_CLOSEST_HIT] = NIR_DEBUG(PRINT_CHS); - nir_debug_print_shader[MESA_SHADER_MISS] = NIR_DEBUG(PRINT_MHS); - nir_debug_print_shader[MESA_SHADER_INTERSECTION] = NIR_DEBUG(PRINT_IS); - nir_debug_print_shader[MESA_SHADER_CALLABLE] = NIR_DEBUG(PRINT_CBS); - nir_debug_print_shader[MESA_SHADER_KERNEL] = NIR_DEBUG(PRINT_KS); -} - -void -nir_process_debug_variable(void) -{ - static once_flag flag = ONCE_FLAG_INIT; - call_once(&flag, nir_process_debug_variable_once); -} -#endif - -/** Return true if the component mask "mask" with bit size "old_bit_size" can - * be re-interpreted to be used with "new_bit_size". - */ -bool -nir_component_mask_can_reinterpret(nir_component_mask_t mask, - unsigned old_bit_size, - unsigned new_bit_size) -{ - assert(util_is_power_of_two_nonzero(old_bit_size)); - assert(util_is_power_of_two_nonzero(new_bit_size)); - - if (old_bit_size == new_bit_size) - return true; - - if (old_bit_size == 1 || new_bit_size == 1) - return false; - - if (old_bit_size > new_bit_size) { - unsigned ratio = old_bit_size / new_bit_size; - return util_last_bit(mask) * ratio <= NIR_MAX_VEC_COMPONENTS; - } - - unsigned iter = mask; - while (iter) { - int start, count; - u_bit_scan_consecutive_range(&iter, &start, &count); - start *= old_bit_size; - count *= old_bit_size; - if (start % new_bit_size != 0) - return false; - if (count % new_bit_size != 0) - return false; - } - return true; -} - -/** Re-interprets a component mask "mask" with bit size "old_bit_size" so that - * it can be used can be used with "new_bit_size". - */ -nir_component_mask_t -nir_component_mask_reinterpret(nir_component_mask_t mask, - unsigned old_bit_size, - unsigned new_bit_size) -{ - assert(nir_component_mask_can_reinterpret(mask, old_bit_size, new_bit_size)); - - if (old_bit_size == new_bit_size) - return mask; - - nir_component_mask_t new_mask = 0; - unsigned iter = mask; - while (iter) { - int start, count; - u_bit_scan_consecutive_range(&iter, &start, &count); - start = start * old_bit_size / new_bit_size; - count = count * old_bit_size / new_bit_size; - new_mask |= BITFIELD_RANGE(start, count); - } - return new_mask; -} - -nir_shader * -nir_shader_create(void *mem_ctx, - gl_shader_stage stage, - const nir_shader_compiler_options *options, - shader_info *si) -{ - nir_shader *shader = rzalloc(mem_ctx, nir_shader); - - shader->gctx = gc_context(shader); - -#ifndef NDEBUG - nir_process_debug_variable(); -#endif - - exec_list_make_empty(&shader->variables); - - shader->options = options; - - if (si) { - assert(si->stage == stage); - shader->info = *si; - } else { - shader->info.stage = stage; - } - - exec_list_make_empty(&shader->functions); - - shader->num_inputs = 0; - shader->num_outputs = 0; - shader->num_uniforms = 0; - - return shader; -} - -static nir_register * -reg_create(void *mem_ctx, struct exec_list *list) -{ - nir_register *reg = ralloc(mem_ctx, nir_register); - - list_inithead(®->uses); - list_inithead(®->defs); - - reg->num_components = 0; - reg->bit_size = 32; - reg->num_array_elems = 0; - reg->divergent = false; - - exec_list_push_tail(list, ®->node); - - return reg; -} - -nir_register * -nir_local_reg_create(nir_function_impl *impl) -{ - nir_register *reg = reg_create(ralloc_parent(impl), &impl->registers); - reg->index = impl->reg_alloc++; - - return reg; -} - -void -nir_reg_remove(nir_register *reg) -{ - exec_node_remove(®->node); -} - -void -nir_shader_add_variable(nir_shader *shader, nir_variable *var) -{ - switch (var->data.mode) { - case nir_var_function_temp: - assert(!"nir_shader_add_variable cannot be used for local variables"); - return; - - case nir_var_shader_temp: - case nir_var_shader_in: - case nir_var_shader_out: - case nir_var_uniform: - case nir_var_mem_ubo: - case nir_var_mem_ssbo: - case nir_var_image: - case nir_var_mem_shared: - case nir_var_system_value: - case nir_var_mem_push_const: - case nir_var_mem_constant: - case nir_var_shader_call_data: - case nir_var_ray_hit_attrib: - case nir_var_mem_task_payload: - case nir_var_mem_global: - break; - - default: - assert(!"invalid mode"); - return; - } - - exec_list_push_tail(&shader->variables, &var->node); -} - -nir_variable * -nir_variable_create(nir_shader *shader, nir_variable_mode mode, - const struct glsl_type *type, const char *name) -{ - nir_variable *var = rzalloc(shader, nir_variable); - var->name = ralloc_strdup(var, name); - var->type = type; - var->data.mode = mode; - var->data.how_declared = nir_var_declared_normally; - - if ((mode == nir_var_shader_in && - shader->info.stage != MESA_SHADER_VERTEX && - shader->info.stage != MESA_SHADER_KERNEL) || - (mode == nir_var_shader_out && - shader->info.stage != MESA_SHADER_FRAGMENT)) - var->data.interpolation = INTERP_MODE_SMOOTH; - - if (mode == nir_var_shader_in || mode == nir_var_uniform) - var->data.read_only = true; - - nir_shader_add_variable(shader, var); - - return var; -} - -nir_variable * -nir_local_variable_create(nir_function_impl *impl, - const struct glsl_type *type, const char *name) -{ - nir_variable *var = rzalloc(impl->function->shader, nir_variable); - var->name = ralloc_strdup(var, name); - var->type = type; - var->data.mode = nir_var_function_temp; - - nir_function_impl_add_variable(impl, var); - - return var; -} - -nir_variable * -nir_find_variable_with_location(nir_shader *shader, - nir_variable_mode mode, - unsigned location) -{ - assert(util_bitcount(mode) == 1 && mode != nir_var_function_temp); - nir_foreach_variable_with_modes(var, shader, mode) { - if (var->data.location == location) - return var; - } - return NULL; -} - -nir_variable * -nir_find_variable_with_driver_location(nir_shader *shader, - nir_variable_mode mode, - unsigned location) -{ - assert(util_bitcount(mode) == 1 && mode != nir_var_function_temp); - nir_foreach_variable_with_modes(var, shader, mode) { - if (var->data.driver_location == location) - return var; - } - return NULL; -} - -/* Annoyingly, qsort_r is not in the C standard library and, in particular, we - * can't count on it on MSV and Android. So we stuff the CMP function into - * each array element. It's a bit messy and burns more memory but the list of - * variables should hever be all that long. - */ -struct var_cmp { - nir_variable *var; - int (*cmp)(const nir_variable *, const nir_variable *); -}; - -static int -var_sort_cmp(const void *_a, const void *_b, void *_cmp) -{ - const struct var_cmp *a = _a; - const struct var_cmp *b = _b; - assert(a->cmp == b->cmp); - return a->cmp(a->var, b->var); -} - -void -nir_sort_variables_with_modes(nir_shader *shader, - int (*cmp)(const nir_variable *, - const nir_variable *), - nir_variable_mode modes) -{ - unsigned num_vars = 0; - nir_foreach_variable_with_modes(var, shader, modes) { - ++num_vars; - } - struct var_cmp *vars = ralloc_array(shader, struct var_cmp, num_vars); - unsigned i = 0; - nir_foreach_variable_with_modes_safe(var, shader, modes) { - exec_node_remove(&var->node); - vars[i++] = (struct var_cmp){ - .var = var, - .cmp = cmp, - }; - } - assert(i == num_vars); - - util_qsort_r(vars, num_vars, sizeof(*vars), var_sort_cmp, cmp); - - for (i = 0; i < num_vars; i++) - exec_list_push_tail(&shader->variables, &vars[i].var->node); - - ralloc_free(vars); -} - -nir_function * -nir_function_create(nir_shader *shader, const char *name) -{ - nir_function *func = ralloc(shader, nir_function); - - exec_list_push_tail(&shader->functions, &func->node); - - func->name = ralloc_strdup(func, name); - func->shader = shader; - func->num_params = 0; - func->params = NULL; - func->impl = NULL; - func->is_entrypoint = false; - func->is_preamble = false; - - return func; -} - -static bool src_has_indirect(nir_src *src) -{ - return !src->is_ssa && src->reg.indirect; -} - -static void src_free_indirects(nir_src *src) -{ - if (src_has_indirect(src)) { - assert(src->reg.indirect->is_ssa || !src->reg.indirect->reg.indirect); - gc_free(src->reg.indirect); - src->reg.indirect = NULL; - } -} - -static void dest_free_indirects(nir_dest *dest) -{ - if (!dest->is_ssa && dest->reg.indirect) { - assert(dest->reg.indirect->is_ssa || !dest->reg.indirect->reg.indirect); - gc_free(dest->reg.indirect); - dest->reg.indirect = NULL; - } -} - -static void -src_copy(nir_src *dest, const nir_src *src, gc_ctx *ctx) -{ - src_free_indirects(dest); - - dest->is_ssa = src->is_ssa; - if (src->is_ssa) { - dest->ssa = src->ssa; - } else { - dest->reg.base_offset = src->reg.base_offset; - dest->reg.reg = src->reg.reg; - if (src->reg.indirect) { - dest->reg.indirect = gc_zalloc(ctx, nir_src, 1); - src_copy(dest->reg.indirect, src->reg.indirect, ctx); - } else { - dest->reg.indirect = NULL; - } - } -} - -/* NOTE: if the instruction you are copying a src to is already added - * to the IR, use nir_instr_rewrite_src() instead. - */ -void nir_src_copy(nir_src *dest, const nir_src *src, nir_instr *instr) -{ - src_copy(dest, src, instr ? gc_get_context(instr) : NULL); -} - -void nir_dest_copy(nir_dest *dest, const nir_dest *src, nir_instr *instr) -{ - /* Copying an SSA definition makes no sense whatsoever. */ - assert(!src->is_ssa); - - dest_free_indirects(dest); - - dest->is_ssa = false; - - dest->reg.base_offset = src->reg.base_offset; - dest->reg.reg = src->reg.reg; - if (src->reg.indirect) { - dest->reg.indirect = gc_zalloc(gc_get_context(instr), nir_src, 1); - nir_src_copy(dest->reg.indirect, src->reg.indirect, instr); - } else { - dest->reg.indirect = NULL; - } -} - -void -nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src, - nir_alu_instr *instr) -{ - nir_src_copy(&dest->src, &src->src, instr ? &instr->instr : NULL); - dest->abs = src->abs; - dest->negate = src->negate; - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) - dest->swizzle[i] = src->swizzle[i]; -} - -void -nir_alu_dest_copy(nir_alu_dest *dest, const nir_alu_dest *src, - nir_alu_instr *instr) -{ - nir_dest_copy(&dest->dest, &src->dest, &instr->instr); - dest->write_mask = src->write_mask; - dest->saturate = src->saturate; -} - -bool -nir_alu_src_is_trivial_ssa(const nir_alu_instr *alu, unsigned srcn) -{ - static uint8_t trivial_swizzle[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; - STATIC_ASSERT(ARRAY_SIZE(trivial_swizzle) == NIR_MAX_VEC_COMPONENTS); - - const nir_alu_src *src = &alu->src[srcn]; - unsigned num_components = nir_ssa_alu_instr_src_components(alu, srcn); - - return src->src.is_ssa && (src->src.ssa->num_components == num_components) && - !src->abs && !src->negate && - (memcmp(src->swizzle, trivial_swizzle, num_components) == 0); -} - - -static void -cf_init(nir_cf_node *node, nir_cf_node_type type) -{ - exec_node_init(&node->node); - node->parent = NULL; - node->type = type; -} - -nir_function_impl * -nir_function_impl_create_bare(nir_shader *shader) -{ - nir_function_impl *impl = ralloc(shader, nir_function_impl); - - impl->function = NULL; - impl->preamble = NULL; - - cf_init(&impl->cf_node, nir_cf_node_function); - - exec_list_make_empty(&impl->body); - exec_list_make_empty(&impl->registers); - exec_list_make_empty(&impl->locals); - impl->reg_alloc = 0; - impl->ssa_alloc = 0; - impl->num_blocks = 0; - impl->valid_metadata = nir_metadata_none; - impl->structured = true; - - /* create start & end blocks */ - nir_block *start_block = nir_block_create(shader); - nir_block *end_block = nir_block_create(shader); - start_block->cf_node.parent = &impl->cf_node; - end_block->cf_node.parent = &impl->cf_node; - impl->end_block = end_block; - - exec_list_push_tail(&impl->body, &start_block->cf_node.node); - - start_block->successors[0] = end_block; - _mesa_set_add(end_block->predecessors, start_block); - return impl; -} - -nir_function_impl * -nir_function_impl_create(nir_function *function) -{ - assert(function->impl == NULL); - - nir_function_impl *impl = nir_function_impl_create_bare(function->shader); - - function->impl = impl; - impl->function = function; - - return impl; -} - -nir_block * -nir_block_create(nir_shader *shader) -{ - nir_block *block = rzalloc(shader, nir_block); - - cf_init(&block->cf_node, nir_cf_node_block); - - block->successors[0] = block->successors[1] = NULL; - block->predecessors = _mesa_pointer_set_create(block); - block->imm_dom = NULL; - /* XXX maybe it would be worth it to defer allocation? This - * way it doesn't get allocated for shader refs that never run - * nir_calc_dominance? For example, state-tracker creates an - * initial IR, clones that, runs appropriate lowering pass, passes - * to driver which does common lowering/opt, and then stores ref - * which is later used to do state specific lowering and futher - * opt. Do any of the references not need dominance metadata? - */ - block->dom_frontier = _mesa_pointer_set_create(block); - - exec_list_make_empty(&block->instr_list); - - return block; -} - -static inline void -src_init(nir_src *src) -{ - src->is_ssa = false; - src->reg.reg = NULL; - src->reg.indirect = NULL; - src->reg.base_offset = 0; -} - -nir_if * -nir_if_create(nir_shader *shader) -{ - nir_if *if_stmt = ralloc(shader, nir_if); - - if_stmt->control = nir_selection_control_none; - - cf_init(&if_stmt->cf_node, nir_cf_node_if); - src_init(&if_stmt->condition); - - nir_block *then = nir_block_create(shader); - exec_list_make_empty(&if_stmt->then_list); - exec_list_push_tail(&if_stmt->then_list, &then->cf_node.node); - then->cf_node.parent = &if_stmt->cf_node; - - nir_block *else_stmt = nir_block_create(shader); - exec_list_make_empty(&if_stmt->else_list); - exec_list_push_tail(&if_stmt->else_list, &else_stmt->cf_node.node); - else_stmt->cf_node.parent = &if_stmt->cf_node; - - return if_stmt; -} - -nir_loop * -nir_loop_create(nir_shader *shader) -{ - nir_loop *loop = rzalloc(shader, nir_loop); - - cf_init(&loop->cf_node, nir_cf_node_loop); - /* Assume that loops are divergent until proven otherwise */ - loop->divergent = true; - - nir_block *body = nir_block_create(shader); - exec_list_make_empty(&loop->body); - exec_list_push_tail(&loop->body, &body->cf_node.node); - body->cf_node.parent = &loop->cf_node; - - body->successors[0] = body; - _mesa_set_add(body->predecessors, body); - - exec_list_make_empty(&loop->continue_list); - - return loop; -} - -static void -instr_init(nir_instr *instr, nir_instr_type type) -{ - instr->type = type; - instr->block = NULL; - exec_node_init(&instr->node); -} - -static void -dest_init(nir_dest *dest) -{ - dest->is_ssa = false; - dest->reg.reg = NULL; - dest->reg.indirect = NULL; - dest->reg.base_offset = 0; -} - -static void -alu_dest_init(nir_alu_dest *dest) -{ - dest_init(&dest->dest); - dest->saturate = false; - dest->write_mask = 0xf; -} - -static void -alu_src_init(nir_alu_src *src) -{ - src_init(&src->src); - src->abs = src->negate = false; - for (int i = 0; i < NIR_MAX_VEC_COMPONENTS; ++i) - src->swizzle[i] = i; -} - -nir_alu_instr * -nir_alu_instr_create(nir_shader *shader, nir_op op) -{ - unsigned num_srcs = nir_op_infos[op].num_inputs; - /* TODO: don't use calloc */ - nir_alu_instr *instr = gc_zalloc_zla(shader->gctx, nir_alu_instr, nir_alu_src, num_srcs); - - instr_init(&instr->instr, nir_instr_type_alu); - instr->op = op; - alu_dest_init(&instr->dest); - for (unsigned i = 0; i < num_srcs; i++) - alu_src_init(&instr->src[i]); - - return instr; -} - -nir_deref_instr * -nir_deref_instr_create(nir_shader *shader, nir_deref_type deref_type) -{ - nir_deref_instr *instr = gc_zalloc(shader->gctx, nir_deref_instr, 1); - - instr_init(&instr->instr, nir_instr_type_deref); - - instr->deref_type = deref_type; - if (deref_type != nir_deref_type_var) - src_init(&instr->parent); - - if (deref_type == nir_deref_type_array || - deref_type == nir_deref_type_ptr_as_array) - src_init(&instr->arr.index); - - dest_init(&instr->dest); - - return instr; -} - -nir_jump_instr * -nir_jump_instr_create(nir_shader *shader, nir_jump_type type) -{ - nir_jump_instr *instr = gc_alloc(shader->gctx, nir_jump_instr, 1); - instr_init(&instr->instr, nir_instr_type_jump); - src_init(&instr->condition); - instr->type = type; - instr->target = NULL; - instr->else_target = NULL; - - return instr; -} - -nir_load_const_instr * -nir_load_const_instr_create(nir_shader *shader, unsigned num_components, - unsigned bit_size) -{ - nir_load_const_instr *instr = - gc_zalloc_zla(shader->gctx, nir_load_const_instr, nir_const_value, num_components); - instr_init(&instr->instr, nir_instr_type_load_const); - - nir_ssa_def_init(&instr->instr, &instr->def, num_components, bit_size); - - return instr; -} - -nir_intrinsic_instr * -nir_intrinsic_instr_create(nir_shader *shader, nir_intrinsic_op op) -{ - unsigned num_srcs = nir_intrinsic_infos[op].num_srcs; - /* TODO: don't use calloc */ - nir_intrinsic_instr *instr = - gc_zalloc_zla(shader->gctx, nir_intrinsic_instr, nir_src, num_srcs); - - instr_init(&instr->instr, nir_instr_type_intrinsic); - instr->intrinsic = op; - - if (nir_intrinsic_infos[op].has_dest) - dest_init(&instr->dest); - - for (unsigned i = 0; i < num_srcs; i++) - src_init(&instr->src[i]); - - return instr; -} - -nir_call_instr * -nir_call_instr_create(nir_shader *shader, nir_function *callee) -{ - const unsigned num_params = callee->num_params; - nir_call_instr *instr = - gc_zalloc_zla(shader->gctx, nir_call_instr, nir_src, num_params); - - instr_init(&instr->instr, nir_instr_type_call); - instr->callee = callee; - instr->num_params = num_params; - for (unsigned i = 0; i < num_params; i++) - src_init(&instr->params[i]); - - return instr; -} - -static int8_t default_tg4_offsets[4][2] = -{ - { 0, 1 }, - { 1, 1 }, - { 1, 0 }, - { 0, 0 }, -}; - -nir_tex_instr * -nir_tex_instr_create(nir_shader *shader, unsigned num_srcs) -{ - nir_tex_instr *instr = gc_zalloc(shader->gctx, nir_tex_instr, 1); - instr_init(&instr->instr, nir_instr_type_tex); - - dest_init(&instr->dest); - - instr->num_srcs = num_srcs; - instr->src = gc_alloc(shader->gctx, nir_tex_src, num_srcs); - for (unsigned i = 0; i < num_srcs; i++) - src_init(&instr->src[i].src); - - instr->texture_index = 0; - instr->sampler_index = 0; - memcpy(instr->tg4_offsets, default_tg4_offsets, sizeof(instr->tg4_offsets)); - - return instr; -} - -void -nir_tex_instr_add_src(nir_tex_instr *tex, - nir_tex_src_type src_type, - nir_src src) -{ - nir_tex_src *new_srcs = gc_zalloc(gc_get_context(tex), nir_tex_src, tex->num_srcs + 1); - - for (unsigned i = 0; i < tex->num_srcs; i++) { - new_srcs[i].src_type = tex->src[i].src_type; - nir_instr_move_src(&tex->instr, &new_srcs[i].src, - &tex->src[i].src); - } - - gc_free(tex->src); - tex->src = new_srcs; - - tex->src[tex->num_srcs].src_type = src_type; - nir_instr_rewrite_src(&tex->instr, &tex->src[tex->num_srcs].src, src); - tex->num_srcs++; -} - -void -nir_tex_instr_remove_src(nir_tex_instr *tex, unsigned src_idx) -{ - assert(src_idx < tex->num_srcs); - - /* First rewrite the source to NIR_SRC_INIT */ - nir_instr_rewrite_src(&tex->instr, &tex->src[src_idx].src, NIR_SRC_INIT); - - /* Now, move all of the other sources down */ - for (unsigned i = src_idx + 1; i < tex->num_srcs; i++) { - tex->src[i-1].src_type = tex->src[i].src_type; - nir_instr_move_src(&tex->instr, &tex->src[i-1].src, &tex->src[i].src); - } - tex->num_srcs--; -} - -bool -nir_tex_instr_has_explicit_tg4_offsets(nir_tex_instr *tex) -{ - if (tex->op != nir_texop_tg4) - return false; - return memcmp(tex->tg4_offsets, default_tg4_offsets, - sizeof(tex->tg4_offsets)) != 0; -} - -nir_phi_instr * -nir_phi_instr_create(nir_shader *shader) -{ - nir_phi_instr *instr = gc_alloc(shader->gctx, nir_phi_instr, 1); - instr_init(&instr->instr, nir_instr_type_phi); - - dest_init(&instr->dest); - exec_list_make_empty(&instr->srcs); - - return instr; -} - -/** - * Adds a new source to a NIR instruction. - * - * Note that this does not update the def/use relationship for src, assuming - * that the instr is not in the shader. If it is, you have to do: - * - * list_addtail(&phi_src->src.use_link, &src.ssa->uses); - */ -nir_phi_src * -nir_phi_instr_add_src(nir_phi_instr *instr, nir_block *pred, nir_src src) -{ - nir_phi_src *phi_src; - - phi_src = gc_zalloc(gc_get_context(instr), nir_phi_src, 1); - phi_src->pred = pred; - phi_src->src = src; - nir_src_set_parent_instr(&phi_src->src, &instr->instr); - exec_list_push_tail(&instr->srcs, &phi_src->node); - - return phi_src; -} - -nir_parallel_copy_instr * -nir_parallel_copy_instr_create(nir_shader *shader) -{ - nir_parallel_copy_instr *instr = gc_alloc(shader->gctx, nir_parallel_copy_instr, 1); - instr_init(&instr->instr, nir_instr_type_parallel_copy); - - exec_list_make_empty(&instr->entries); - - return instr; -} - -nir_ssa_undef_instr * -nir_ssa_undef_instr_create(nir_shader *shader, - unsigned num_components, - unsigned bit_size) -{ - nir_ssa_undef_instr *instr = gc_alloc(shader->gctx, nir_ssa_undef_instr, 1); - instr_init(&instr->instr, nir_instr_type_ssa_undef); - - nir_ssa_def_init(&instr->instr, &instr->def, num_components, bit_size); - - return instr; -} - -static nir_const_value -const_value_float(double d, unsigned bit_size) -{ - nir_const_value v; - memset(&v, 0, sizeof(v)); - switch (bit_size) { - case 16: v.u16 = _mesa_float_to_half(d); break; - case 32: v.f32 = d; break; - case 64: v.f64 = d; break; - default: - unreachable("Invalid bit size"); - } - return v; -} - -static nir_const_value -const_value_int(int64_t i, unsigned bit_size) -{ - nir_const_value v; - memset(&v, 0, sizeof(v)); - switch (bit_size) { - case 1: v.b = i & 1; break; - case 8: v.i8 = i; break; - case 16: v.i16 = i; break; - case 32: v.i32 = i; break; - case 64: v.i64 = i; break; - default: - unreachable("Invalid bit size"); - } - return v; -} - -nir_const_value -nir_alu_binop_identity(nir_op binop, unsigned bit_size) -{ - const int64_t max_int = (1ull << (bit_size - 1)) - 1; - const int64_t min_int = -max_int - 1; - switch (binop) { - case nir_op_iadd: - return const_value_int(0, bit_size); - case nir_op_fadd: - return const_value_float(0, bit_size); - case nir_op_imul: - return const_value_int(1, bit_size); - case nir_op_fmul: - return const_value_float(1, bit_size); - case nir_op_imin: - return const_value_int(max_int, bit_size); - case nir_op_umin: - return const_value_int(~0ull, bit_size); - case nir_op_fmin: - return const_value_float(INFINITY, bit_size); - case nir_op_imax: - return const_value_int(min_int, bit_size); - case nir_op_umax: - return const_value_int(0, bit_size); - case nir_op_fmax: - return const_value_float(-INFINITY, bit_size); - case nir_op_iand: - return const_value_int(~0ull, bit_size); - case nir_op_ior: - return const_value_int(0, bit_size); - case nir_op_ixor: - return const_value_int(0, bit_size); - default: - unreachable("Invalid reduction operation"); - } -} - -nir_function_impl * -nir_cf_node_get_function(nir_cf_node *node) -{ - while (node->type != nir_cf_node_function) { - node = node->parent; - } - - return nir_cf_node_as_function(node); -} - -/* Reduces a cursor by trying to convert everything to after and trying to - * go up to block granularity when possible. - */ -static nir_cursor -reduce_cursor(nir_cursor cursor) -{ - switch (cursor.option) { - case nir_cursor_before_block: - if (exec_list_is_empty(&cursor.block->instr_list)) { - /* Empty block. After is as good as before. */ - cursor.option = nir_cursor_after_block; - } - return cursor; - - case nir_cursor_after_block: - return cursor; - - case nir_cursor_before_instr: { - nir_instr *prev_instr = nir_instr_prev(cursor.instr); - if (prev_instr) { - /* Before this instruction is after the previous */ - cursor.instr = prev_instr; - cursor.option = nir_cursor_after_instr; - } else { - /* No previous instruction. Switch to before block */ - cursor.block = cursor.instr->block; - cursor.option = nir_cursor_before_block; - } - return reduce_cursor(cursor); - } - - case nir_cursor_after_instr: - if (nir_instr_next(cursor.instr) == NULL) { - /* This is the last instruction, switch to after block */ - cursor.option = nir_cursor_after_block; - cursor.block = cursor.instr->block; - } - return cursor; - - default: - unreachable("Inavlid cursor option"); - } -} - -bool -nir_cursors_equal(nir_cursor a, nir_cursor b) -{ - /* Reduced cursors should be unique */ - a = reduce_cursor(a); - b = reduce_cursor(b); - - return a.block == b.block && a.option == b.option; -} - -static bool -add_use_cb(nir_src *src, void *state) -{ - nir_instr *instr = state; - - nir_src_set_parent_instr(src, instr); - list_addtail(&src->use_link, - src->is_ssa ? &src->ssa->uses : &src->reg.reg->uses); - - return true; -} - -static bool -add_ssa_def_cb(nir_ssa_def *def, void *state) -{ - nir_instr *instr = state; - - if (instr->block && def->index == UINT_MAX) { - nir_function_impl *impl = - nir_cf_node_get_function(&instr->block->cf_node); - - def->index = impl->ssa_alloc++; - - impl->valid_metadata &= ~nir_metadata_live_ssa_defs; - } - - return true; -} - -static bool -add_reg_def_cb(nir_dest *dest, void *state) -{ - nir_instr *instr = state; - - if (!dest->is_ssa) { - dest->reg.parent_instr = instr; - list_addtail(&dest->reg.def_link, &dest->reg.reg->defs); - } - - return true; -} - -static void -add_defs_uses(nir_instr *instr) -{ - nir_foreach_src(instr, add_use_cb, instr); - nir_foreach_dest(instr, add_reg_def_cb, instr); - nir_foreach_ssa_def(instr, add_ssa_def_cb, instr); -} - -void -nir_instr_insert(nir_cursor cursor, nir_instr *instr) -{ - switch (cursor.option) { - case nir_cursor_before_block: - /* Only allow inserting jumps into empty blocks. */ - if (instr->type == nir_instr_type_jump) - assert(exec_list_is_empty(&cursor.block->instr_list)); - - instr->block = cursor.block; - add_defs_uses(instr); - exec_list_push_head(&cursor.block->instr_list, &instr->node); - break; - case nir_cursor_after_block: { - /* Inserting instructions after a jump is illegal. */ - nir_instr *last = nir_block_last_instr(cursor.block); - assert(last == NULL || last->type != nir_instr_type_jump); - (void) last; - - instr->block = cursor.block; - add_defs_uses(instr); - exec_list_push_tail(&cursor.block->instr_list, &instr->node); - break; - } - case nir_cursor_before_instr: - assert(instr->type != nir_instr_type_jump); - instr->block = cursor.instr->block; - add_defs_uses(instr); - exec_node_insert_node_before(&cursor.instr->node, &instr->node); - break; - case nir_cursor_after_instr: - /* Inserting instructions after a jump is illegal. */ - assert(cursor.instr->type != nir_instr_type_jump); - - /* Only allow inserting jumps at the end of the block. */ - if (instr->type == nir_instr_type_jump) - assert(cursor.instr == nir_block_last_instr(cursor.instr->block)); - - instr->block = cursor.instr->block; - add_defs_uses(instr); - exec_node_insert_after(&cursor.instr->node, &instr->node); - break; - } - - if (instr->type == nir_instr_type_jump) - nir_handle_add_jump(instr->block); - - nir_function_impl *impl = nir_cf_node_get_function(&instr->block->cf_node); - impl->valid_metadata &= ~nir_metadata_instr_index; -} - -bool -nir_instr_move(nir_cursor cursor, nir_instr *instr) -{ - /* If the cursor happens to refer to this instruction (either before or - * after), don't do anything. - */ - if ((cursor.option == nir_cursor_before_instr || - cursor.option == nir_cursor_after_instr) && - cursor.instr == instr) - return false; - - nir_instr_remove(instr); - nir_instr_insert(cursor, instr); - return true; -} - -static bool -src_is_valid(const nir_src *src) -{ - return src->is_ssa ? (src->ssa != NULL) : (src->reg.reg != NULL); -} - -static bool -remove_use_cb(nir_src *src, void *state) -{ - (void) state; - - if (src_is_valid(src)) - list_del(&src->use_link); - - return true; -} - -static bool -remove_def_cb(nir_dest *dest, void *state) -{ - (void) state; - - if (!dest->is_ssa) - list_del(&dest->reg.def_link); - - return true; -} - -static void -remove_defs_uses(nir_instr *instr) -{ - nir_foreach_dest(instr, remove_def_cb, instr); - nir_foreach_src(instr, remove_use_cb, instr); -} - -void nir_instr_remove_v(nir_instr *instr) -{ - remove_defs_uses(instr); - exec_node_remove(&instr->node); - - if (instr->type == nir_instr_type_jump) { - nir_jump_instr *jump_instr = nir_instr_as_jump(instr); - nir_handle_remove_jump(instr->block, jump_instr->type); - } -} - -static bool free_src_indirects_cb(nir_src *src, void *state) -{ - src_free_indirects(src); - return true; -} - -static bool free_dest_indirects_cb(nir_dest *dest, void *state) -{ - dest_free_indirects(dest); - return true; -} - -void nir_instr_free(nir_instr *instr) -{ - nir_foreach_src(instr, free_src_indirects_cb, NULL); - nir_foreach_dest(instr, free_dest_indirects_cb, NULL); - - switch (instr->type) { - case nir_instr_type_tex: - gc_free(nir_instr_as_tex(instr)->src); - break; - - case nir_instr_type_phi: { - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_foreach_phi_src_safe(phi_src, phi) - gc_free(phi_src); - break; - } - - default: - break; - } - - gc_free(instr); -} - -void -nir_instr_free_list(struct exec_list *list) -{ - struct exec_node *node; - while ((node = exec_list_pop_head(list))) { - nir_instr *removed_instr = exec_node_data(nir_instr, node, node); - nir_instr_free(removed_instr); - } -} - -static bool nir_instr_free_and_dce_live_cb(nir_ssa_def *def, void *state) -{ - bool *live = state; - - if (!nir_ssa_def_is_unused(def)) { - *live = true; - return false; - } else { - return true; - } -} - -static bool nir_instr_free_and_dce_is_live(nir_instr *instr) -{ - /* Note: don't have to worry about jumps because they don't have dests to - * become unused. - */ - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - const nir_intrinsic_info *info = &nir_intrinsic_infos[intr->intrinsic]; - if (!(info->flags & NIR_INTRINSIC_CAN_ELIMINATE)) - return true; - } - - bool live = false; - nir_foreach_ssa_def(instr, nir_instr_free_and_dce_live_cb, &live); - return live; -} - -static bool -nir_instr_dce_add_dead_srcs_cb(nir_src *src, void *state) -{ - nir_instr_worklist *wl = state; - - if (src->is_ssa) { - list_del(&src->use_link); - if (!nir_instr_free_and_dce_is_live(src->ssa->parent_instr)) - nir_instr_worklist_push_tail(wl, src->ssa->parent_instr); - - /* Stop nir_instr_remove from trying to delete the link again. */ - src->ssa = NULL; - } - - return true; -} - -static void -nir_instr_dce_add_dead_ssa_srcs(nir_instr_worklist *wl, nir_instr *instr) -{ - nir_foreach_src(instr, nir_instr_dce_add_dead_srcs_cb, wl); -} - -/** - * Frees an instruction and any SSA defs that it used that are now dead, - * returning a nir_cursor where the instruction previously was. - */ -nir_cursor -nir_instr_free_and_dce(nir_instr *instr) -{ - nir_instr_worklist *worklist = nir_instr_worklist_create(); - - nir_instr_dce_add_dead_ssa_srcs(worklist, instr); - nir_cursor c = nir_instr_remove(instr); - - struct exec_list to_free; - exec_list_make_empty(&to_free); - - nir_instr *dce_instr; - while ((dce_instr = nir_instr_worklist_pop_head(worklist))) { - nir_instr_dce_add_dead_ssa_srcs(worklist, dce_instr); - - /* If we're removing the instr where our cursor is, then we have to - * point the cursor elsewhere. - */ - if ((c.option == nir_cursor_before_instr || - c.option == nir_cursor_after_instr) && - c.instr == dce_instr) - c = nir_instr_remove(dce_instr); - else - nir_instr_remove(dce_instr); - exec_list_push_tail(&to_free, &dce_instr->node); - } - - nir_instr_free_list(&to_free); - - nir_instr_worklist_destroy(worklist); - - return c; -} - -/*@}*/ - -void -nir_index_local_regs(nir_function_impl *impl) -{ - unsigned index = 0; - foreach_list_typed(nir_register, reg, node, &impl->registers) { - reg->index = index++; - } - impl->reg_alloc = index; -} - -struct foreach_ssa_def_state { - nir_foreach_ssa_def_cb cb; - void *client_state; -}; - -static inline bool -nir_ssa_def_visitor(nir_dest *dest, void *void_state) -{ - struct foreach_ssa_def_state *state = void_state; - - if (dest->is_ssa) - return state->cb(&dest->ssa, state->client_state); - else - return true; -} - -bool -nir_foreach_ssa_def(nir_instr *instr, nir_foreach_ssa_def_cb cb, void *state) -{ - switch (instr->type) { - case nir_instr_type_alu: - case nir_instr_type_deref: - case nir_instr_type_tex: - case nir_instr_type_intrinsic: - case nir_instr_type_phi: - case nir_instr_type_parallel_copy: { - struct foreach_ssa_def_state foreach_state = {cb, state}; - return nir_foreach_dest(instr, nir_ssa_def_visitor, &foreach_state); - } - - case nir_instr_type_load_const: - return cb(&nir_instr_as_load_const(instr)->def, state); - case nir_instr_type_ssa_undef: - return cb(&nir_instr_as_ssa_undef(instr)->def, state); - case nir_instr_type_call: - case nir_instr_type_jump: - return true; - default: - unreachable("Invalid instruction type"); - } -} - -nir_ssa_def * -nir_instr_ssa_def(nir_instr *instr) -{ - switch (instr->type) { - case nir_instr_type_alu: - assert(nir_instr_as_alu(instr)->dest.dest.is_ssa); - return &nir_instr_as_alu(instr)->dest.dest.ssa; - - case nir_instr_type_deref: - assert(nir_instr_as_deref(instr)->dest.is_ssa); - return &nir_instr_as_deref(instr)->dest.ssa; - - case nir_instr_type_tex: - assert(nir_instr_as_tex(instr)->dest.is_ssa); - return &nir_instr_as_tex(instr)->dest.ssa; - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (nir_intrinsic_infos[intrin->intrinsic].has_dest) { - assert(intrin->dest.is_ssa); - return &intrin->dest.ssa; - } else { - return NULL; - } - } - - case nir_instr_type_phi: - assert(nir_instr_as_phi(instr)->dest.is_ssa); - return &nir_instr_as_phi(instr)->dest.ssa; - - case nir_instr_type_parallel_copy: - unreachable("Parallel copies are unsupported by this function"); - - case nir_instr_type_load_const: - return &nir_instr_as_load_const(instr)->def; - - case nir_instr_type_ssa_undef: - return &nir_instr_as_ssa_undef(instr)->def; - - case nir_instr_type_call: - case nir_instr_type_jump: - return NULL; - } - - unreachable("Invalid instruction type"); -} - -bool -nir_instr_def_is_register(nir_instr *instr) -{ - switch (instr->type) { - case nir_instr_type_alu: - return !nir_instr_as_alu(instr)->dest.dest.is_ssa; - - case nir_instr_type_deref: - return !nir_instr_as_deref(instr)->dest.is_ssa; - - case nir_instr_type_tex: - return !nir_instr_as_tex(instr)->dest.is_ssa; - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - return nir_intrinsic_infos[intrin->intrinsic].has_dest && - !intrin->dest.is_ssa; - } - - case nir_instr_type_phi: - return !nir_instr_as_phi(instr)->dest.is_ssa; - - case nir_instr_type_parallel_copy: - unreachable("Parallel copies are unsupported by this function"); - - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: - return false; - - case nir_instr_type_call: - case nir_instr_type_jump: - return false; - } - - unreachable("Invalid instruction type"); -} - -bool -nir_foreach_phi_src_leaving_block(nir_block *block, - nir_foreach_src_cb cb, - void *state) -{ - for (unsigned i = 0; i < ARRAY_SIZE(block->successors); i++) { - if (block->successors[i] == NULL) - continue; - - nir_foreach_instr(instr, block->successors[i]) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_foreach_phi_src(phi_src, phi) { - if (phi_src->pred == block) { - if (!cb(&phi_src->src, state)) - return false; - } - } - } - } - - return true; -} - -nir_const_value -nir_const_value_for_float(double f, unsigned bit_size) -{ - nir_const_value v; - memset(&v, 0, sizeof(v)); - - switch (bit_size) { - case 16: - v.u16 = _mesa_float_to_half(f); - break; - case 32: - v.f32 = f; - break; - case 64: - v.f64 = f; - break; - default: - unreachable("Invalid bit size"); - } - - return v; -} - -double -nir_const_value_as_float(nir_const_value value, unsigned bit_size) -{ - switch (bit_size) { - case 16: return _mesa_half_to_float(value.u16); - case 32: return value.f32; - case 64: return value.f64; - default: - unreachable("Invalid bit size"); - } -} - -nir_const_value * -nir_src_as_const_value(nir_src src) -{ - if (!src.is_ssa) - return NULL; - - if (src.ssa->parent_instr->type != nir_instr_type_load_const) - return NULL; - - nir_load_const_instr *load = nir_instr_as_load_const(src.ssa->parent_instr); - - return load->value; -} - -/** - * Returns true if the source is known to be always uniform. Otherwise it - * returns false which means it may or may not be uniform but it can't be - * determined. - * - * For a more precise analysis of uniform values, use nir_divergence_analysis. - */ -bool -nir_src_is_always_uniform(nir_src src) -{ - if (!src.is_ssa) - return false; - - /* Constants are trivially uniform */ - if (src.ssa->parent_instr->type == nir_instr_type_load_const) - return true; - - if (src.ssa->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(src.ssa->parent_instr); - /* As are uniform variables */ - if (intr->intrinsic == nir_intrinsic_load_uniform && - nir_src_is_always_uniform(intr->src[0])) - return true; - /* From the Vulkan specification 15.6.1. Push Constant Interface: - * "Any member of a push constant block that is declared as an array must - * only be accessed with dynamically uniform indices." - */ - if (intr->intrinsic == nir_intrinsic_load_push_constant) - return true; - if (intr->intrinsic == nir_intrinsic_load_deref && - nir_deref_mode_is(nir_src_as_deref(intr->src[0]), nir_var_mem_push_const)) - return true; - } - - /* Operating together uniform expressions produces a uniform result */ - if (src.ssa->parent_instr->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(src.ssa->parent_instr); - for (int i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (!nir_src_is_always_uniform(alu->src[i].src)) - return false; - } - - return true; - } - - /* XXX: this could have many more tests, such as when a sampler function is - * called with uniform arguments. - */ - return false; -} - -static void -src_remove_all_uses(nir_src *src) -{ - for (; src; src = src->is_ssa ? NULL : src->reg.indirect) { - if (!src_is_valid(src)) - continue; - - list_del(&src->use_link); - } -} - -static void -src_add_all_uses(nir_src *src, nir_instr *parent_instr, nir_if *parent_if) -{ - for (; src; src = src->is_ssa ? NULL : src->reg.indirect) { - if (!src_is_valid(src)) - continue; - - if (parent_instr) { - nir_src_set_parent_instr(src, parent_instr); - } else { - assert(parent_if); - nir_src_set_parent_if(src, parent_if); - } - - if (src->is_ssa) - list_addtail(&src->use_link, &src->ssa->uses); - else - list_addtail(&src->use_link, &src->reg.reg->uses); - } -} - -void -nir_instr_rewrite_src(nir_instr *instr, nir_src *src, nir_src new_src) -{ - assert(!src_is_valid(src) || src->parent_instr == instr); - - src_remove_all_uses(src); - nir_src_copy(src, &new_src, instr); - src_add_all_uses(src, instr, NULL); -} - -void -nir_instr_move_src(nir_instr *dest_instr, nir_src *dest, nir_src *src) -{ - assert(!src_is_valid(dest) || dest->parent_instr == dest_instr); - - src_remove_all_uses(dest); - src_free_indirects(dest); - src_remove_all_uses(src); - *dest = *src; - *src = NIR_SRC_INIT; - src_add_all_uses(dest, dest_instr, NULL); -} - -void -nir_if_rewrite_condition(nir_if *if_stmt, nir_src new_src) -{ - nir_shader *shader = ralloc_parent(if_stmt); - nir_src *src = &if_stmt->condition; - assert(!src_is_valid(src) || (src->is_if && src->parent_if == if_stmt)); - - src_remove_all_uses(src); - src_copy(src, &new_src, shader->gctx); - src_add_all_uses(src, NULL, if_stmt); -} - -void -nir_instr_rewrite_dest(nir_instr *instr, nir_dest *dest, nir_dest new_dest) -{ - if (dest->is_ssa) { - /* We can only overwrite an SSA destination if it has no uses. */ - assert(nir_ssa_def_is_unused(&dest->ssa)); - } else { - list_del(&dest->reg.def_link); - if (dest->reg.indirect) - src_remove_all_uses(dest->reg.indirect); - } - - /* We can't re-write with an SSA def */ - assert(!new_dest.is_ssa); - - nir_dest_copy(dest, &new_dest, instr); - - dest->reg.parent_instr = instr; - list_addtail(&dest->reg.def_link, &new_dest.reg.reg->defs); - - if (dest->reg.indirect) - src_add_all_uses(dest->reg.indirect, instr, NULL); -} - -/* note: does *not* take ownership of 'name' */ -void -nir_ssa_def_init(nir_instr *instr, nir_ssa_def *def, - unsigned num_components, - unsigned bit_size) -{ - def->parent_instr = instr; - list_inithead(&def->uses); - def->num_components = num_components; - def->bit_size = bit_size; - def->divergent = true; /* This is the safer default */ - - if (instr->block) { - nir_function_impl *impl = - nir_cf_node_get_function(&instr->block->cf_node); - - def->index = impl->ssa_alloc++; - - impl->valid_metadata &= ~nir_metadata_live_ssa_defs; - } else { - def->index = UINT_MAX; - } -} - -/* note: does *not* take ownership of 'name' */ -void -nir_ssa_dest_init(nir_instr *instr, nir_dest *dest, - unsigned num_components, unsigned bit_size, - const char *name) -{ - dest->is_ssa = true; - nir_ssa_def_init(instr, &dest->ssa, num_components, bit_size); -} - -void -nir_ssa_def_rewrite_uses(nir_ssa_def *def, nir_ssa_def *new_ssa) -{ - assert(def != new_ssa); - nir_foreach_use_including_if_safe(use_src, def) { - nir_src_rewrite_ssa(use_src, new_ssa); - } -} - -void -nir_ssa_def_rewrite_uses_src(nir_ssa_def *def, nir_src new_src) -{ - if (new_src.is_ssa) { - nir_ssa_def_rewrite_uses(def, new_src.ssa); - } else { - nir_foreach_use_including_if_safe(use_src, def) { - if (use_src->is_if) - nir_if_rewrite_condition(use_src->parent_if, new_src); - else - nir_instr_rewrite_src(use_src->parent_instr, use_src, new_src); - } - } -} - -static bool -is_instr_between(nir_instr *start, nir_instr *end, nir_instr *between) -{ - assert(start->block == end->block); - - if (between->block != start->block) - return false; - - /* Search backwards looking for "between" */ - while (start != end) { - if (between == end) - return true; - - end = nir_instr_prev(end); - assert(end); - } - - return false; -} - -/* Replaces all uses of the given SSA def with the given source but only if - * the use comes after the after_me instruction. This can be useful if you - * are emitting code to fix up the result of some instruction: you can freely - * use the result in that code and then call rewrite_uses_after and pass the - * last fixup instruction as after_me and it will replace all of the uses you - * want without touching the fixup code. - * - * This function assumes that after_me is in the same block as - * def->parent_instr and that after_me comes after def->parent_instr. - */ -void -nir_ssa_def_rewrite_uses_after(nir_ssa_def *def, nir_ssa_def *new_ssa, - nir_instr *after_me) -{ - if (def == new_ssa) - return; - - nir_foreach_use_including_if_safe(use_src, def) { - if (!use_src->is_if) { - assert(use_src->parent_instr != def->parent_instr); - - /* Since def already dominates all of its uses, the only way a use can - * not be dominated by after_me is if it is between def and after_me in - * the instruction list. - */ - if (is_instr_between(def->parent_instr, after_me, use_src->parent_instr)) - continue; - } - - nir_src_rewrite_ssa(use_src, new_ssa); - } -} - -static nir_ssa_def * -get_store_value(nir_intrinsic_instr *intrin) -{ - assert(nir_intrinsic_has_write_mask(intrin)); - /* deref stores have the deref in src[0] and the store value in src[1] */ - if (intrin->intrinsic == nir_intrinsic_store_deref || - intrin->intrinsic == nir_intrinsic_store_deref_block_intel) - return intrin->src[1].ssa; - - /* all other stores have the store value in src[0] */ - return intrin->src[0].ssa; -} - -nir_component_mask_t -nir_src_components_read(const nir_src *src) -{ - assert(src->is_ssa && src->parent_instr); - - if (src->parent_instr->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(src->parent_instr); - nir_alu_src *alu_src = exec_node_data(nir_alu_src, src, src); - int src_idx = alu_src - &alu->src[0]; - assert(src_idx >= 0 && src_idx < nir_op_infos[alu->op].num_inputs); - return nir_alu_instr_src_read_mask(alu, src_idx); - } else if (src->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(src->parent_instr); - if (nir_intrinsic_has_write_mask(intrin) && src->ssa == get_store_value(intrin)) - return nir_intrinsic_write_mask(intrin); - else - return (1 << src->ssa->num_components) - 1; - } else { - return (1 << src->ssa->num_components) - 1; - } -} - -nir_component_mask_t -nir_ssa_def_components_read(const nir_ssa_def *def) -{ - nir_component_mask_t read_mask = 0; - - nir_foreach_use_including_if(use, def) { - read_mask |= use->is_if ? 1 : nir_src_components_read(use); - - if (read_mask == (1 << def->num_components) - 1) - return read_mask; - } - - return read_mask; -} - -nir_block * -nir_block_unstructured_next(nir_block *block) -{ - if (block == NULL) { - /* nir_foreach_block_unstructured_safe() will call this function on a - * NULL block after the last iteration, but it won't use the result so - * just return NULL here. - */ - return NULL; - } - - nir_cf_node *cf_next = nir_cf_node_next(&block->cf_node); - if (cf_next == NULL && block->cf_node.parent->type == nir_cf_node_function) - return NULL; - - if (cf_next && cf_next->type == nir_cf_node_block) - return nir_cf_node_as_block(cf_next); - - return nir_block_cf_tree_next(block); -} - -nir_block * -nir_unstructured_start_block(nir_function_impl *impl) -{ - return nir_start_block(impl); -} - -nir_block * -nir_block_cf_tree_next(nir_block *block) -{ - if (block == NULL) { - /* nir_foreach_block_safe() will call this function on a NULL block - * after the last iteration, but it won't use the result so just return - * NULL here. - */ - return NULL; - } - - assert(nir_cf_node_get_function(&block->cf_node)->structured); - - nir_cf_node *cf_next = nir_cf_node_next(&block->cf_node); - if (cf_next) - return nir_cf_node_cf_tree_first(cf_next); - - nir_cf_node *parent = block->cf_node.parent; - if (parent->type == nir_cf_node_function) - return NULL; - - /* Is this the last block of a cf_node? Return the following block */ - if (block == nir_cf_node_cf_tree_last(parent)) - return nir_cf_node_as_block(nir_cf_node_next(parent)); - - switch (parent->type) { - case nir_cf_node_if: { - /* We are at the end of the if. Go to the beginning of the else */ - nir_if *if_stmt = nir_cf_node_as_if(parent); - assert(block == nir_if_last_then_block(if_stmt)); - return nir_if_first_else_block(if_stmt); - } - - case nir_cf_node_loop: { - /* We are at the end of the body and there is a continue construct */ - nir_loop *loop = nir_cf_node_as_loop(parent); - assert(block == nir_loop_last_block(loop) && - nir_loop_has_continue_construct(loop)); - return nir_loop_first_continue_block(loop); - } - - default: - unreachable("unknown cf node type"); - } -} - -nir_block * -nir_block_cf_tree_prev(nir_block *block) -{ - if (block == NULL) { - /* do this for consistency with nir_block_cf_tree_next() */ - return NULL; - } - - assert(nir_cf_node_get_function(&block->cf_node)->structured); - - nir_cf_node *cf_prev = nir_cf_node_prev(&block->cf_node); - if (cf_prev) - return nir_cf_node_cf_tree_last(cf_prev); - - nir_cf_node *parent = block->cf_node.parent; - if (parent->type == nir_cf_node_function) - return NULL; - - /* Is this the first block of a cf_node? Return the previous block */ - if (block == nir_cf_node_cf_tree_first(parent)) - return nir_cf_node_as_block(nir_cf_node_prev(parent)); - - switch (parent->type) { - case nir_cf_node_if: { - /* We are at the beginning of the else. Go to the end of the if */ - nir_if *if_stmt = nir_cf_node_as_if(parent); - assert(block == nir_if_first_else_block(if_stmt)); - return nir_if_last_then_block(if_stmt); - } - case nir_cf_node_loop: { - /* We are at the beginning of the continue construct. */ - nir_loop *loop = nir_cf_node_as_loop(parent); - assert(nir_loop_has_continue_construct(loop) && - block == nir_loop_first_continue_block(loop)); - return nir_loop_last_block(loop); - } - - default: - unreachable("unknown cf node type"); - } -} - -nir_block *nir_cf_node_cf_tree_first(nir_cf_node *node) -{ - switch (node->type) { - case nir_cf_node_function: { - nir_function_impl *impl = nir_cf_node_as_function(node); - return nir_start_block(impl); - } - - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(node); - return nir_if_first_then_block(if_stmt); - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - return nir_loop_first_block(loop); - } - - case nir_cf_node_block: { - return nir_cf_node_as_block(node); - } - - default: - unreachable("unknown node type"); - } -} - -nir_block *nir_cf_node_cf_tree_last(nir_cf_node *node) -{ - switch (node->type) { - case nir_cf_node_function: { - nir_function_impl *impl = nir_cf_node_as_function(node); - return nir_impl_last_block(impl); - } - - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(node); - return nir_if_last_else_block(if_stmt); - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - if (nir_loop_has_continue_construct(loop)) - return nir_loop_last_continue_block(loop); - else - return nir_loop_last_block(loop); - } - - case nir_cf_node_block: { - return nir_cf_node_as_block(node); - } - - default: - unreachable("unknown node type"); - } -} - -nir_block *nir_cf_node_cf_tree_next(nir_cf_node *node) -{ - if (node->type == nir_cf_node_block) - return nir_block_cf_tree_next(nir_cf_node_as_block(node)); - else if (node->type == nir_cf_node_function) - return NULL; - else - return nir_cf_node_as_block(nir_cf_node_next(node)); -} - -nir_if * -nir_block_get_following_if(nir_block *block) -{ - if (exec_node_is_tail_sentinel(&block->cf_node.node)) - return NULL; - - if (nir_cf_node_is_last(&block->cf_node)) - return NULL; - - nir_cf_node *next_node = nir_cf_node_next(&block->cf_node); - - if (next_node->type != nir_cf_node_if) - return NULL; - - return nir_cf_node_as_if(next_node); -} - -nir_loop * -nir_block_get_following_loop(nir_block *block) -{ - if (exec_node_is_tail_sentinel(&block->cf_node.node)) - return NULL; - - if (nir_cf_node_is_last(&block->cf_node)) - return NULL; - - nir_cf_node *next_node = nir_cf_node_next(&block->cf_node); - - if (next_node->type != nir_cf_node_loop) - return NULL; - - return nir_cf_node_as_loop(next_node); -} - -static int -compare_block_index(const void *p1, const void *p2) -{ - const nir_block *block1 = *((const nir_block **) p1); - const nir_block *block2 = *((const nir_block **) p2); - - return (int) block1->index - (int) block2->index; -} - -nir_block ** -nir_block_get_predecessors_sorted(const nir_block *block, void *mem_ctx) -{ - nir_block **preds = - ralloc_array(mem_ctx, nir_block *, block->predecessors->entries); - - unsigned i = 0; - set_foreach(block->predecessors, entry) - preds[i++] = (nir_block *) entry->key; - assert(i == block->predecessors->entries); - - qsort(preds, block->predecessors->entries, sizeof(nir_block *), - compare_block_index); - - return preds; -} - -void -nir_index_blocks(nir_function_impl *impl) -{ - unsigned index = 0; - - if (impl->valid_metadata & nir_metadata_block_index) - return; - - nir_foreach_block_unstructured(block, impl) { - block->index = index++; - } - - /* The end_block isn't really part of the program, which is why its index - * is >= num_blocks. - */ - impl->num_blocks = impl->end_block->index = index; -} - -static bool -index_ssa_def_cb(nir_ssa_def *def, void *state) -{ - unsigned *index = (unsigned *) state; - def->index = (*index)++; - - return true; -} - -/** - * The indices are applied top-to-bottom which has the very nice property - * that, if A dominates B, then A->index <= B->index. - */ -void -nir_index_ssa_defs(nir_function_impl *impl) -{ - unsigned index = 0; - - impl->valid_metadata &= ~nir_metadata_live_ssa_defs; - - nir_foreach_block_unstructured(block, impl) { - nir_foreach_instr(instr, block) - nir_foreach_ssa_def(instr, index_ssa_def_cb, &index); - } - - impl->ssa_alloc = index; -} - -/** - * The indices are applied top-to-bottom which has the very nice property - * that, if A dominates B, then A->index <= B->index. - */ -unsigned -nir_index_instrs(nir_function_impl *impl) -{ - unsigned index = 0; - - nir_foreach_block(block, impl) { - block->start_ip = index++; - - nir_foreach_instr(instr, block) - instr->index = index++; - - block->end_ip = index++; - } - - return index; -} - -unsigned -nir_shader_index_vars(nir_shader *shader, nir_variable_mode modes) -{ - unsigned count = 0; - nir_foreach_variable_with_modes(var, shader, modes) - var->index = count++; - return count; -} - -unsigned -nir_function_impl_index_vars(nir_function_impl *impl) -{ - unsigned count = 0; - nir_foreach_function_temp_variable(var, impl) - var->index = count++; - return count; -} - -static nir_instr * -cursor_next_instr(nir_cursor cursor) -{ - switch (cursor.option) { - case nir_cursor_before_block: - for (nir_block *block = cursor.block; block; - block = nir_block_cf_tree_next(block)) { - nir_instr *instr = nir_block_first_instr(block); - if (instr) - return instr; - } - return NULL; - - case nir_cursor_after_block: - cursor.block = nir_block_cf_tree_next(cursor.block); - if (cursor.block == NULL) - return NULL; - - cursor.option = nir_cursor_before_block; - return cursor_next_instr(cursor); - - case nir_cursor_before_instr: - return cursor.instr; - - case nir_cursor_after_instr: - if (nir_instr_next(cursor.instr)) - return nir_instr_next(cursor.instr); - - cursor.option = nir_cursor_after_block; - cursor.block = cursor.instr->block; - return cursor_next_instr(cursor); - } - - unreachable("Inavlid cursor option"); -} - -ASSERTED static bool -dest_is_ssa(nir_dest *dest, void *_state) -{ - (void) _state; - return dest->is_ssa; -} - -bool -nir_function_impl_lower_instructions(nir_function_impl *impl, - nir_instr_filter_cb filter, - nir_lower_instr_cb lower, - void *cb_data) -{ - nir_builder b; - nir_builder_init(&b, impl); - - nir_metadata preserved = nir_metadata_block_index | - nir_metadata_dominance; - - bool progress = false; - nir_cursor iter = nir_before_cf_list(&impl->body); - nir_instr *instr; - while ((instr = cursor_next_instr(iter)) != NULL) { - if (filter && !filter(instr, cb_data)) { - iter = nir_after_instr(instr); - continue; - } - - assert(nir_foreach_dest(instr, dest_is_ssa, NULL)); - nir_ssa_def *old_def = nir_instr_ssa_def(instr); - struct list_head old_uses; - if (old_def != NULL) { - /* We're about to ask the callback to generate a replacement for instr. - * Save off the uses from instr's SSA def so we know what uses to - * rewrite later. If we use nir_ssa_def_rewrite_uses, it fails in the - * case where the generated replacement code uses the result of instr - * itself. If we use nir_ssa_def_rewrite_uses_after (which is the - * normal solution to this problem), it doesn't work well if control- - * flow is inserted as part of the replacement, doesn't handle cases - * where the replacement is something consumed by instr, and suffers - * from performance issues. This is the only way to 100% guarantee - * that we rewrite the correct set efficiently. - */ - - list_replace(&old_def->uses, &old_uses); - list_inithead(&old_def->uses); - } - - b.cursor = nir_after_instr(instr); - nir_ssa_def *new_def = lower(&b, instr, cb_data); - if (new_def && new_def != NIR_LOWER_INSTR_PROGRESS && - new_def != NIR_LOWER_INSTR_PROGRESS_REPLACE) { - assert(old_def != NULL); - if (new_def->parent_instr->block != instr->block) - preserved = nir_metadata_none; - - nir_src new_src = nir_src_for_ssa(new_def); - list_for_each_entry_safe(nir_src, use_src, &old_uses, use_link) { - if (use_src->is_if) - nir_if_rewrite_condition(use_src->parent_if, new_src); - else - nir_instr_rewrite_src(use_src->parent_instr, use_src, new_src); - } - - if (nir_ssa_def_is_unused(old_def)) { - iter = nir_instr_free_and_dce(instr); - } else { - iter = nir_after_instr(instr); - } - progress = true; - } else { - /* We didn't end up lowering after all. Put the uses back */ - if (old_def) - list_replace(&old_uses, &old_def->uses); - - if (new_def == NIR_LOWER_INSTR_PROGRESS_REPLACE) { - /* Only instructions without a return value can be removed like this */ - assert(!old_def); - iter = nir_instr_free_and_dce(instr); - progress = true; - } else - iter = nir_after_instr(instr); - - if (new_def == NIR_LOWER_INSTR_PROGRESS) - progress = true; - } - } - - if (progress) { - nir_metadata_preserve(impl, preserved); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_shader_lower_instructions(nir_shader *shader, - nir_instr_filter_cb filter, - nir_lower_instr_cb lower, - void *cb_data) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && - nir_function_impl_lower_instructions(function->impl, - filter, lower, cb_data)) - progress = true; - } - - return progress; -} - -/** - * Returns true if the shader supports quad-based implicit derivatives on - * texture sampling. - */ -bool nir_shader_supports_implicit_lod(nir_shader *shader) -{ - return (shader->info.stage == MESA_SHADER_FRAGMENT || - (shader->info.stage == MESA_SHADER_COMPUTE && - shader->info.cs.derivative_group != DERIVATIVE_GROUP_NONE)); -} - -nir_intrinsic_op -nir_intrinsic_from_system_value(gl_system_value val) -{ - switch (val) { - case SYSTEM_VALUE_VERTEX_ID: - return nir_intrinsic_load_vertex_id; - case SYSTEM_VALUE_INSTANCE_ID: - return nir_intrinsic_load_instance_id; - case SYSTEM_VALUE_DRAW_ID: - return nir_intrinsic_load_draw_id; - case SYSTEM_VALUE_BASE_INSTANCE: - return nir_intrinsic_load_base_instance; - case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE: - return nir_intrinsic_load_vertex_id_zero_base; - case SYSTEM_VALUE_IS_INDEXED_DRAW: - return nir_intrinsic_load_is_indexed_draw; - case SYSTEM_VALUE_FIRST_VERTEX: - return nir_intrinsic_load_first_vertex; - case SYSTEM_VALUE_BASE_VERTEX: - return nir_intrinsic_load_base_vertex; - case SYSTEM_VALUE_INVOCATION_ID: - return nir_intrinsic_load_invocation_id; - case SYSTEM_VALUE_FRAG_COORD: - return nir_intrinsic_load_frag_coord; - case SYSTEM_VALUE_POINT_COORD: - return nir_intrinsic_load_point_coord; - case SYSTEM_VALUE_LINE_COORD: - return nir_intrinsic_load_line_coord; - case SYSTEM_VALUE_FRONT_FACE: - return nir_intrinsic_load_front_face; - case SYSTEM_VALUE_SAMPLE_ID: - return nir_intrinsic_load_sample_id; - case SYSTEM_VALUE_SAMPLE_POS: - return nir_intrinsic_load_sample_pos; - case SYSTEM_VALUE_SAMPLE_POS_OR_CENTER: - return nir_intrinsic_load_sample_pos_or_center; - case SYSTEM_VALUE_SAMPLE_MASK_IN: - return nir_intrinsic_load_sample_mask_in; - case SYSTEM_VALUE_LOCAL_INVOCATION_ID: - return nir_intrinsic_load_local_invocation_id; - case SYSTEM_VALUE_LOCAL_INVOCATION_INDEX: - return nir_intrinsic_load_local_invocation_index; - case SYSTEM_VALUE_WORKGROUP_ID: - return nir_intrinsic_load_workgroup_id; - case SYSTEM_VALUE_WORKGROUP_INDEX: - return nir_intrinsic_load_workgroup_index; - case SYSTEM_VALUE_NUM_WORKGROUPS: - return nir_intrinsic_load_num_workgroups; - case SYSTEM_VALUE_PRIMITIVE_ID: - return nir_intrinsic_load_primitive_id; - case SYSTEM_VALUE_TESS_COORD: - return nir_intrinsic_load_tess_coord; - case SYSTEM_VALUE_TESS_LEVEL_OUTER: - return nir_intrinsic_load_tess_level_outer; - case SYSTEM_VALUE_TESS_LEVEL_INNER: - return nir_intrinsic_load_tess_level_inner; - case SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT: - return nir_intrinsic_load_tess_level_outer_default; - case SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT: - return nir_intrinsic_load_tess_level_inner_default; - case SYSTEM_VALUE_VERTICES_IN: - return nir_intrinsic_load_patch_vertices_in; - case SYSTEM_VALUE_HELPER_INVOCATION: - return nir_intrinsic_load_helper_invocation; - case SYSTEM_VALUE_COLOR0: - return nir_intrinsic_load_color0; - case SYSTEM_VALUE_COLOR1: - return nir_intrinsic_load_color1; - case SYSTEM_VALUE_VIEW_INDEX: - return nir_intrinsic_load_view_index; - case SYSTEM_VALUE_SUBGROUP_SIZE: - return nir_intrinsic_load_subgroup_size; - case SYSTEM_VALUE_SUBGROUP_INVOCATION: - return nir_intrinsic_load_subgroup_invocation; - case SYSTEM_VALUE_SUBGROUP_EQ_MASK: - return nir_intrinsic_load_subgroup_eq_mask; - case SYSTEM_VALUE_SUBGROUP_GE_MASK: - return nir_intrinsic_load_subgroup_ge_mask; - case SYSTEM_VALUE_SUBGROUP_GT_MASK: - return nir_intrinsic_load_subgroup_gt_mask; - case SYSTEM_VALUE_SUBGROUP_LE_MASK: - return nir_intrinsic_load_subgroup_le_mask; - case SYSTEM_VALUE_SUBGROUP_LT_MASK: - return nir_intrinsic_load_subgroup_lt_mask; - case SYSTEM_VALUE_NUM_SUBGROUPS: - return nir_intrinsic_load_num_subgroups; - case SYSTEM_VALUE_SUBGROUP_ID: - return nir_intrinsic_load_subgroup_id; - case SYSTEM_VALUE_WORKGROUP_SIZE: - return nir_intrinsic_load_workgroup_size; - case SYSTEM_VALUE_GLOBAL_INVOCATION_ID: - return nir_intrinsic_load_global_invocation_id; - case SYSTEM_VALUE_BASE_GLOBAL_INVOCATION_ID: - return nir_intrinsic_load_base_global_invocation_id; - case SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX: - return nir_intrinsic_load_global_invocation_index; - case SYSTEM_VALUE_WORK_DIM: - return nir_intrinsic_load_work_dim; - case SYSTEM_VALUE_USER_DATA_AMD: - return nir_intrinsic_load_user_data_amd; - case SYSTEM_VALUE_RAY_LAUNCH_ID: - return nir_intrinsic_load_ray_launch_id; - case SYSTEM_VALUE_RAY_LAUNCH_SIZE: - return nir_intrinsic_load_ray_launch_size; - case SYSTEM_VALUE_RAY_LAUNCH_SIZE_ADDR_AMD: - return nir_intrinsic_load_ray_launch_size_addr_amd; - case SYSTEM_VALUE_RAY_WORLD_ORIGIN: - return nir_intrinsic_load_ray_world_origin; - case SYSTEM_VALUE_RAY_WORLD_DIRECTION: - return nir_intrinsic_load_ray_world_direction; - case SYSTEM_VALUE_RAY_OBJECT_ORIGIN: - return nir_intrinsic_load_ray_object_origin; - case SYSTEM_VALUE_RAY_OBJECT_DIRECTION: - return nir_intrinsic_load_ray_object_direction; - case SYSTEM_VALUE_RAY_T_MIN: - return nir_intrinsic_load_ray_t_min; - case SYSTEM_VALUE_RAY_T_MAX: - return nir_intrinsic_load_ray_t_max; - case SYSTEM_VALUE_RAY_OBJECT_TO_WORLD: - return nir_intrinsic_load_ray_object_to_world; - case SYSTEM_VALUE_RAY_WORLD_TO_OBJECT: - return nir_intrinsic_load_ray_world_to_object; - case SYSTEM_VALUE_RAY_HIT_KIND: - return nir_intrinsic_load_ray_hit_kind; - case SYSTEM_VALUE_RAY_FLAGS: - return nir_intrinsic_load_ray_flags; - case SYSTEM_VALUE_RAY_GEOMETRY_INDEX: - return nir_intrinsic_load_ray_geometry_index; - case SYSTEM_VALUE_RAY_INSTANCE_CUSTOM_INDEX: - return nir_intrinsic_load_ray_instance_custom_index; - case SYSTEM_VALUE_CULL_MASK: - return nir_intrinsic_load_cull_mask; - case SYSTEM_VALUE_MESH_VIEW_COUNT: - return nir_intrinsic_load_mesh_view_count; - case SYSTEM_VALUE_FRAG_SHADING_RATE: - return nir_intrinsic_load_frag_shading_rate; - case SYSTEM_VALUE_FULLY_COVERED: - return nir_intrinsic_load_fully_covered; - case SYSTEM_VALUE_FRAG_SIZE: - return nir_intrinsic_load_frag_size; - case SYSTEM_VALUE_FRAG_INVOCATION_COUNT: - return nir_intrinsic_load_frag_invocation_count; - default: - unreachable("system value does not directly correspond to intrinsic"); - } -} - -gl_system_value -nir_system_value_from_intrinsic(nir_intrinsic_op intrin) -{ - switch (intrin) { - case nir_intrinsic_load_vertex_id: - return SYSTEM_VALUE_VERTEX_ID; - case nir_intrinsic_load_instance_id: - return SYSTEM_VALUE_INSTANCE_ID; - case nir_intrinsic_load_draw_id: - return SYSTEM_VALUE_DRAW_ID; - case nir_intrinsic_load_base_instance: - return SYSTEM_VALUE_BASE_INSTANCE; - case nir_intrinsic_load_vertex_id_zero_base: - return SYSTEM_VALUE_VERTEX_ID_ZERO_BASE; - case nir_intrinsic_load_first_vertex: - return SYSTEM_VALUE_FIRST_VERTEX; - case nir_intrinsic_load_is_indexed_draw: - return SYSTEM_VALUE_IS_INDEXED_DRAW; - case nir_intrinsic_load_base_vertex: - return SYSTEM_VALUE_BASE_VERTEX; - case nir_intrinsic_load_invocation_id: - return SYSTEM_VALUE_INVOCATION_ID; - case nir_intrinsic_load_frag_coord: - return SYSTEM_VALUE_FRAG_COORD; - case nir_intrinsic_load_point_coord: - return SYSTEM_VALUE_POINT_COORD; - case nir_intrinsic_load_line_coord: - return SYSTEM_VALUE_LINE_COORD; - case nir_intrinsic_load_front_face: - return SYSTEM_VALUE_FRONT_FACE; - case nir_intrinsic_load_sample_id: - return SYSTEM_VALUE_SAMPLE_ID; - case nir_intrinsic_load_sample_pos: - return SYSTEM_VALUE_SAMPLE_POS; - case nir_intrinsic_load_sample_pos_or_center: - return SYSTEM_VALUE_SAMPLE_POS_OR_CENTER; - case nir_intrinsic_load_sample_mask_in: - return SYSTEM_VALUE_SAMPLE_MASK_IN; - case nir_intrinsic_load_local_invocation_id: - return SYSTEM_VALUE_LOCAL_INVOCATION_ID; - case nir_intrinsic_load_local_invocation_index: - return SYSTEM_VALUE_LOCAL_INVOCATION_INDEX; - case nir_intrinsic_load_num_workgroups: - return SYSTEM_VALUE_NUM_WORKGROUPS; - case nir_intrinsic_load_workgroup_id: - return SYSTEM_VALUE_WORKGROUP_ID; - case nir_intrinsic_load_workgroup_index: - return SYSTEM_VALUE_WORKGROUP_INDEX; - case nir_intrinsic_load_primitive_id: - return SYSTEM_VALUE_PRIMITIVE_ID; - case nir_intrinsic_load_tess_coord: - return SYSTEM_VALUE_TESS_COORD; - case nir_intrinsic_load_tess_level_outer: - return SYSTEM_VALUE_TESS_LEVEL_OUTER; - case nir_intrinsic_load_tess_level_inner: - return SYSTEM_VALUE_TESS_LEVEL_INNER; - case nir_intrinsic_load_tess_level_outer_default: - return SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT; - case nir_intrinsic_load_tess_level_inner_default: - return SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT; - case nir_intrinsic_load_patch_vertices_in: - return SYSTEM_VALUE_VERTICES_IN; - case nir_intrinsic_load_helper_invocation: - return SYSTEM_VALUE_HELPER_INVOCATION; - case nir_intrinsic_load_color0: - return SYSTEM_VALUE_COLOR0; - case nir_intrinsic_load_color1: - return SYSTEM_VALUE_COLOR1; - case nir_intrinsic_load_view_index: - return SYSTEM_VALUE_VIEW_INDEX; - case nir_intrinsic_load_subgroup_size: - return SYSTEM_VALUE_SUBGROUP_SIZE; - case nir_intrinsic_load_subgroup_invocation: - return SYSTEM_VALUE_SUBGROUP_INVOCATION; - case nir_intrinsic_load_subgroup_eq_mask: - return SYSTEM_VALUE_SUBGROUP_EQ_MASK; - case nir_intrinsic_load_subgroup_ge_mask: - return SYSTEM_VALUE_SUBGROUP_GE_MASK; - case nir_intrinsic_load_subgroup_gt_mask: - return SYSTEM_VALUE_SUBGROUP_GT_MASK; - case nir_intrinsic_load_subgroup_le_mask: - return SYSTEM_VALUE_SUBGROUP_LE_MASK; - case nir_intrinsic_load_subgroup_lt_mask: - return SYSTEM_VALUE_SUBGROUP_LT_MASK; - case nir_intrinsic_load_num_subgroups: - return SYSTEM_VALUE_NUM_SUBGROUPS; - case nir_intrinsic_load_subgroup_id: - return SYSTEM_VALUE_SUBGROUP_ID; - case nir_intrinsic_load_workgroup_size: - return SYSTEM_VALUE_WORKGROUP_SIZE; - case nir_intrinsic_load_global_invocation_id: - return SYSTEM_VALUE_GLOBAL_INVOCATION_ID; - case nir_intrinsic_load_base_global_invocation_id: - return SYSTEM_VALUE_BASE_GLOBAL_INVOCATION_ID; - case nir_intrinsic_load_global_invocation_index: - return SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX; - case nir_intrinsic_load_work_dim: - return SYSTEM_VALUE_WORK_DIM; - case nir_intrinsic_load_user_data_amd: - return SYSTEM_VALUE_USER_DATA_AMD; - case nir_intrinsic_load_barycentric_model: - return SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL; - case nir_intrinsic_load_gs_header_ir3: - return SYSTEM_VALUE_GS_HEADER_IR3; - case nir_intrinsic_load_tcs_header_ir3: - return SYSTEM_VALUE_TCS_HEADER_IR3; - case nir_intrinsic_load_ray_launch_id: - return SYSTEM_VALUE_RAY_LAUNCH_ID; - case nir_intrinsic_load_ray_launch_size: - return SYSTEM_VALUE_RAY_LAUNCH_SIZE; - case nir_intrinsic_load_ray_launch_size_addr_amd: - return SYSTEM_VALUE_RAY_LAUNCH_SIZE_ADDR_AMD; - case nir_intrinsic_load_ray_world_origin: - return SYSTEM_VALUE_RAY_WORLD_ORIGIN; - case nir_intrinsic_load_ray_world_direction: - return SYSTEM_VALUE_RAY_WORLD_DIRECTION; - case nir_intrinsic_load_ray_object_origin: - return SYSTEM_VALUE_RAY_OBJECT_ORIGIN; - case nir_intrinsic_load_ray_object_direction: - return SYSTEM_VALUE_RAY_OBJECT_DIRECTION; - case nir_intrinsic_load_ray_t_min: - return SYSTEM_VALUE_RAY_T_MIN; - case nir_intrinsic_load_ray_t_max: - return SYSTEM_VALUE_RAY_T_MAX; - case nir_intrinsic_load_ray_object_to_world: - return SYSTEM_VALUE_RAY_OBJECT_TO_WORLD; - case nir_intrinsic_load_ray_world_to_object: - return SYSTEM_VALUE_RAY_WORLD_TO_OBJECT; - case nir_intrinsic_load_ray_hit_kind: - return SYSTEM_VALUE_RAY_HIT_KIND; - case nir_intrinsic_load_ray_flags: - return SYSTEM_VALUE_RAY_FLAGS; - case nir_intrinsic_load_ray_geometry_index: - return SYSTEM_VALUE_RAY_GEOMETRY_INDEX; - case nir_intrinsic_load_ray_instance_custom_index: - return SYSTEM_VALUE_RAY_INSTANCE_CUSTOM_INDEX; - case nir_intrinsic_load_cull_mask: - return SYSTEM_VALUE_CULL_MASK; - case nir_intrinsic_load_frag_shading_rate: - return SYSTEM_VALUE_FRAG_SHADING_RATE; - case nir_intrinsic_load_mesh_view_count: - return SYSTEM_VALUE_MESH_VIEW_COUNT; - case nir_intrinsic_load_fully_covered: - return SYSTEM_VALUE_FULLY_COVERED; - case nir_intrinsic_load_frag_size: - return SYSTEM_VALUE_FRAG_SIZE; - case nir_intrinsic_load_frag_invocation_count: - return SYSTEM_VALUE_FRAG_INVOCATION_COUNT; - default: - unreachable("intrinsic doesn't produce a system value"); - } -} - -/* OpenGL utility method that remaps the location attributes if they are - * doubles. Not needed for vulkan due the differences on the input location - * count for doubles on vulkan vs OpenGL - * - * The bitfield returned in dual_slot is one bit for each double input slot in - * the original OpenGL single-slot input numbering. The mapping from old - * locations to new locations is as follows: - * - * new_loc = loc + util_bitcount(dual_slot & BITFIELD64_MASK(loc)) - */ -void -nir_remap_dual_slot_attributes(nir_shader *shader, uint64_t *dual_slot) -{ - assert(shader->info.stage == MESA_SHADER_VERTEX); - - *dual_slot = 0; - nir_foreach_shader_in_variable(var, shader) { - if (glsl_type_is_dual_slot(glsl_without_array(var->type))) { - unsigned slots = glsl_count_attribute_slots(var->type, true); - *dual_slot |= BITFIELD64_MASK(slots) << var->data.location; - } - } - - nir_foreach_shader_in_variable(var, shader) { - var->data.location += - util_bitcount64(*dual_slot & BITFIELD64_MASK(var->data.location)); - } -} - -/* Returns an attribute mask that has been re-compacted using the given - * dual_slot mask. - */ -uint64_t -nir_get_single_slot_attribs_mask(uint64_t attribs, uint64_t dual_slot) -{ - while (dual_slot) { - unsigned loc = u_bit_scan64(&dual_slot); - /* mask of all bits up to and including loc */ - uint64_t mask = BITFIELD64_MASK(loc + 1); - attribs = (attribs & mask) | ((attribs & ~mask) >> 1); - } - return attribs; -} - -void -nir_rewrite_image_intrinsic(nir_intrinsic_instr *intrin, nir_ssa_def *src, - bool bindless) -{ - enum gl_access_qualifier access = nir_intrinsic_access(intrin); - - /* Image intrinsics only have one of these */ - assert(!nir_intrinsic_has_src_type(intrin) || - !nir_intrinsic_has_dest_type(intrin)); - - nir_alu_type data_type = nir_type_invalid; - if (nir_intrinsic_has_src_type(intrin)) - data_type = nir_intrinsic_src_type(intrin); - if (nir_intrinsic_has_dest_type(intrin)) - data_type = nir_intrinsic_dest_type(intrin); - - switch (intrin->intrinsic) { -#define CASE(op) \ - case nir_intrinsic_image_deref_##op: \ - intrin->intrinsic = bindless ? nir_intrinsic_bindless_image_##op \ - : nir_intrinsic_image_##op; \ - break; - CASE(load) - CASE(sparse_load) - CASE(store) - CASE(atomic_add) - CASE(atomic_imin) - CASE(atomic_umin) - CASE(atomic_imax) - CASE(atomic_umax) - CASE(atomic_and) - CASE(atomic_or) - CASE(atomic_xor) - CASE(atomic_exchange) - CASE(atomic_comp_swap) - CASE(atomic_fadd) - CASE(atomic_fmin) - CASE(atomic_fmax) - CASE(atomic_inc_wrap) - CASE(atomic_dec_wrap) - CASE(size) - CASE(samples) - CASE(load_raw_intel) - CASE(store_raw_intel) - CASE(fragment_mask_load_amd) -#undef CASE - default: - unreachable("Unhanded image intrinsic"); - } - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - /* Only update the format if the intrinsic doesn't have one set */ - if (nir_intrinsic_format(intrin) == PIPE_FORMAT_NONE) - nir_intrinsic_set_format(intrin, var->data.image.format); - - nir_intrinsic_set_access(intrin, access | var->data.access); - if (nir_intrinsic_has_src_type(intrin)) - nir_intrinsic_set_src_type(intrin, data_type); - if (nir_intrinsic_has_dest_type(intrin)) - nir_intrinsic_set_dest_type(intrin, data_type); - - nir_instr_rewrite_src(&intrin->instr, &intrin->src[0], - nir_src_for_ssa(src)); -} - -unsigned -nir_image_intrinsic_coord_components(const nir_intrinsic_instr *instr) -{ - enum glsl_sampler_dim dim = nir_intrinsic_image_dim(instr); - int coords = glsl_get_sampler_dim_coordinate_components(dim); - if (dim == GLSL_SAMPLER_DIM_CUBE) - return coords; - else - return coords + nir_intrinsic_image_array(instr); -} - -nir_src * -nir_get_shader_call_payload_src(nir_intrinsic_instr *call) -{ - switch (call->intrinsic) { - case nir_intrinsic_trace_ray: - case nir_intrinsic_rt_trace_ray: - return &call->src[10]; - case nir_intrinsic_execute_callable: - case nir_intrinsic_rt_execute_callable: - return &call->src[1]; - default: - unreachable("Not a call intrinsic"); - return NULL; - } -} - -nir_binding nir_chase_binding(nir_src rsrc) -{ - nir_binding res = {0}; - if (rsrc.ssa->parent_instr->type == nir_instr_type_deref) { - const struct glsl_type *type = glsl_without_array(nir_src_as_deref(rsrc)->type); - bool is_image = glsl_type_is_image(type) || glsl_type_is_sampler(type); - while (rsrc.ssa->parent_instr->type == nir_instr_type_deref) { - nir_deref_instr *deref = nir_src_as_deref(rsrc); - - if (deref->deref_type == nir_deref_type_var) { - res.success = true; - res.var = deref->var; - res.desc_set = deref->var->data.descriptor_set; - res.binding = deref->var->data.binding; - return res; - } else if (deref->deref_type == nir_deref_type_array && is_image) { - if (res.num_indices == ARRAY_SIZE(res.indices)) - return (nir_binding){0}; - res.indices[res.num_indices++] = deref->arr.index; - } - - rsrc = deref->parent; - } - } - - /* Skip copies and trimming. Trimming can appear as nir_op_mov instructions - * when removing the offset from addresses. We also consider nir_op_is_vec() - * instructions to skip trimming of vec2_index_32bit_offset addresses after - * lowering ALU to scalar. - */ - unsigned num_components = nir_src_num_components(rsrc); - while (true) { - nir_alu_instr *alu = nir_src_as_alu_instr(rsrc); - nir_intrinsic_instr *intrin = nir_src_as_intrinsic(rsrc); - if (alu && alu->op == nir_op_mov) { - for (unsigned i = 0; i < num_components; i++) { - if (alu->src[0].swizzle[i] != i) - return (nir_binding){0}; - } - rsrc = alu->src[0].src; - } else if (alu && nir_op_is_vec(alu->op)) { - for (unsigned i = 0; i < num_components; i++) { - if (alu->src[i].swizzle[0] != i || alu->src[i].src.ssa != alu->src[0].src.ssa) - return (nir_binding){0}; - } - rsrc = alu->src[0].src; - } else if (intrin && intrin->intrinsic == nir_intrinsic_read_first_invocation) { - /* The caller might want to be aware if only the first invocation of - * the indices are used. - */ - res.read_first_invocation = true; - rsrc = intrin->src[0]; - } else { - break; - } - } - - if (nir_src_is_const(rsrc)) { - /* GL binding model after deref lowering */ - res.success = true; - /* Can't use just nir_src_as_uint. Vulkan resource index produces a - * vec2. Some drivers lower it to vec1 (to handle get_ssbo_size for - * example) but others just keep it around as a vec2 (v3dv). - */ - res.binding = nir_src_comp_as_uint(rsrc, 0); - return res; - } - - /* otherwise, must be Vulkan binding model after deref lowering or GL bindless */ - - nir_intrinsic_instr *intrin = nir_src_as_intrinsic(rsrc); - if (!intrin) - return (nir_binding){0}; - - /* skip load_vulkan_descriptor */ - if (intrin->intrinsic == nir_intrinsic_load_vulkan_descriptor) { - intrin = nir_src_as_intrinsic(intrin->src[0]); - if (!intrin) - return (nir_binding){0}; - } - - if (intrin->intrinsic != nir_intrinsic_vulkan_resource_index) - return (nir_binding){0}; - - assert(res.num_indices == 0); - res.success = true; - res.desc_set = nir_intrinsic_desc_set(intrin); - res.binding = nir_intrinsic_binding(intrin); - res.num_indices = 1; - res.indices[0] = intrin->src[0]; - return res; -} - -nir_variable *nir_get_binding_variable(nir_shader *shader, nir_binding binding) -{ - nir_variable *binding_var = NULL; - unsigned count = 0; - - if (!binding.success) - return NULL; - - if (binding.var) - return binding.var; - - nir_foreach_variable_with_modes(var, shader, nir_var_mem_ubo | nir_var_mem_ssbo) { - if (var->data.descriptor_set == binding.desc_set && var->data.binding == binding.binding) { - binding_var = var; - count++; - } - } - - /* Be conservative if another variable is using the same binding/desc_set - * because the access mask might be different and we can't get it reliably. - */ - if (count > 1) - return NULL; - - return binding_var; -} - -bool -nir_alu_instr_is_copy(nir_alu_instr *instr) -{ - assert(instr->src[0].src.is_ssa); - - if (instr->op == nir_op_mov) { - return !instr->dest.saturate && - !instr->src[0].abs && - !instr->src[0].negate; - } else if (nir_op_is_vec(instr->op)) { - for (unsigned i = 0; i < instr->dest.dest.ssa.num_components; i++) { - if (instr->src[i].abs || instr->src[i].negate) - return false; - } - return !instr->dest.saturate; - } else { - return false; - } -} - -nir_ssa_scalar -nir_ssa_scalar_chase_movs(nir_ssa_scalar s) -{ - while (nir_ssa_scalar_is_alu(s)) { - nir_alu_instr *alu = nir_instr_as_alu(s.def->parent_instr); - if (!nir_alu_instr_is_copy(alu)) - break; - - if (alu->op == nir_op_mov) { - s.def = alu->src[0].src.ssa; - s.comp = alu->src[0].swizzle[s.comp]; - } else { - assert(nir_op_is_vec(alu->op)); - s.def = alu->src[s.comp].src.ssa; - s.comp = alu->src[s.comp].swizzle[0]; - } - } - - return s; -} - -nir_alu_type -nir_get_nir_type_for_glsl_base_type(enum glsl_base_type base_type) -{ - switch (base_type) { - case GLSL_TYPE_BOOL: - return nir_type_bool1; - break; - case GLSL_TYPE_UINT: - return nir_type_uint32; - break; - case GLSL_TYPE_INT: - return nir_type_int32; - break; - case GLSL_TYPE_UINT16: - return nir_type_uint16; - break; - case GLSL_TYPE_INT16: - return nir_type_int16; - break; - case GLSL_TYPE_UINT8: - return nir_type_uint8; - case GLSL_TYPE_INT8: - return nir_type_int8; - case GLSL_TYPE_UINT64: - return nir_type_uint64; - break; - case GLSL_TYPE_INT64: - return nir_type_int64; - break; - case GLSL_TYPE_FLOAT: - return nir_type_float32; - break; - case GLSL_TYPE_FLOAT16: - return nir_type_float16; - break; - case GLSL_TYPE_DOUBLE: - return nir_type_float64; - break; - - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_ARRAY: - case GLSL_TYPE_VOID: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_FUNCTION: - case GLSL_TYPE_ERROR: - return nir_type_invalid; - } - - unreachable("unknown type"); -} - -enum glsl_base_type -nir_get_glsl_base_type_for_nir_type(nir_alu_type base_type) -{ - switch (base_type) { - case nir_type_bool1: - return GLSL_TYPE_BOOL; - case nir_type_uint32: - return GLSL_TYPE_UINT; - case nir_type_int32: - return GLSL_TYPE_INT; - case nir_type_uint16: - return GLSL_TYPE_UINT16; - case nir_type_int16: - return GLSL_TYPE_INT16; - case nir_type_uint8: - return GLSL_TYPE_UINT8; - case nir_type_int8: - return GLSL_TYPE_INT8; - case nir_type_uint64: - return GLSL_TYPE_UINT64; - case nir_type_int64: - return GLSL_TYPE_INT64; - case nir_type_float32: - return GLSL_TYPE_FLOAT; - case nir_type_float16: - return GLSL_TYPE_FLOAT16; - case nir_type_float64: - return GLSL_TYPE_DOUBLE; - - default: unreachable("Not a sized nir_alu_type"); - } -} - -nir_op -nir_op_vec(unsigned components) -{ - switch (components) { - case 1: return nir_op_mov; - case 2: return nir_op_vec2; - case 3: return nir_op_vec3; - case 4: return nir_op_vec4; - case 5: return nir_op_vec5; - case 8: return nir_op_vec8; - case 16: return nir_op_vec16; - default: unreachable("bad component count"); - } -} - -bool -nir_op_is_vec(nir_op op) -{ - switch (op) { - case nir_op_mov: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_vec5: - case nir_op_vec8: - case nir_op_vec16: - return true; - default: - return false; - } -} - -bool -nir_alu_instr_channel_used(const nir_alu_instr *instr, unsigned src, - unsigned channel) -{ - if (nir_op_infos[instr->op].input_sizes[src] > 0) - return channel < nir_op_infos[instr->op].input_sizes[src]; - - return (instr->dest.write_mask >> channel) & 1; -} - -nir_component_mask_t -nir_alu_instr_src_read_mask(const nir_alu_instr *instr, unsigned src) -{ - nir_component_mask_t read_mask = 0; - for (unsigned c = 0; c < NIR_MAX_VEC_COMPONENTS; c++) { - if (!nir_alu_instr_channel_used(instr, src, c)) - continue; - - read_mask |= (1 << instr->src[src].swizzle[c]); - } - return read_mask; -} - -unsigned -nir_ssa_alu_instr_src_components(const nir_alu_instr *instr, unsigned src) -{ - if (nir_op_infos[instr->op].input_sizes[src] > 0) - return nir_op_infos[instr->op].input_sizes[src]; - - return nir_dest_num_components(instr->dest.dest); -} - -#define CASE_ALL_SIZES(op) \ - case op: \ - case op ## 8: \ - case op ## 16: \ - case op ## 32: \ - -bool -nir_alu_instr_is_comparison(const nir_alu_instr *instr) -{ - switch (instr->op) { - CASE_ALL_SIZES(nir_op_flt) - CASE_ALL_SIZES(nir_op_fge) - CASE_ALL_SIZES(nir_op_feq) - CASE_ALL_SIZES(nir_op_fneu) - CASE_ALL_SIZES(nir_op_ilt) - CASE_ALL_SIZES(nir_op_ult) - CASE_ALL_SIZES(nir_op_ige) - CASE_ALL_SIZES(nir_op_uge) - CASE_ALL_SIZES(nir_op_ieq) - CASE_ALL_SIZES(nir_op_ine) - case nir_op_inot: - return true; - default: - return false; - } -} - -#undef CASE_ALL_SIZES - -unsigned -nir_intrinsic_src_components(const nir_intrinsic_instr *intr, unsigned srcn) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[intr->intrinsic]; - assert(srcn < info->num_srcs); - if (info->src_components[srcn] > 0) - return info->src_components[srcn]; - else if (info->src_components[srcn] == 0) - return intr->num_components; - else - return nir_src_num_components(intr->src[srcn]); -} - -unsigned -nir_intrinsic_dest_components(nir_intrinsic_instr *intr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[intr->intrinsic]; - if (!info->has_dest) - return 0; - else if (info->dest_components) - return info->dest_components; - else - return intr->num_components; -} - -/** - * Helper to copy const_index[] from src to dst, without assuming they - * match in order. - */ -void -nir_intrinsic_copy_const_indices(nir_intrinsic_instr *dst, nir_intrinsic_instr *src) -{ - if (src->intrinsic == dst->intrinsic) { - memcpy(dst->const_index, src->const_index, sizeof(dst->const_index)); - return; - } - - const nir_intrinsic_info *src_info = &nir_intrinsic_infos[src->intrinsic]; - const nir_intrinsic_info *dst_info = &nir_intrinsic_infos[dst->intrinsic]; - - for (unsigned i = 0; i < NIR_INTRINSIC_NUM_INDEX_FLAGS; i++) { - if (src_info->index_map[i] == 0) - continue; - - /* require that dst instruction also uses the same const_index[]: */ - assert(dst_info->index_map[i] > 0); - - dst->const_index[dst_info->index_map[i] - 1] = - src->const_index[src_info->index_map[i] - 1]; - } -} - - -bool -nir_tex_instr_need_sampler(const nir_tex_instr *instr) -{ - switch (instr->op) { - case nir_texop_txf: - case nir_texop_txf_ms: - case nir_texop_txs: - case nir_texop_query_levels: - case nir_texop_texture_samples: - case nir_texop_samples_identical: - case nir_texop_descriptor_amd: - return false; - default: - return true; - } -} - -unsigned -nir_tex_instr_result_size(const nir_tex_instr *instr) -{ - switch (instr->op) { - case nir_texop_txs: { - unsigned ret; - switch (instr->sampler_dim) { - case GLSL_SAMPLER_DIM_1D: - case GLSL_SAMPLER_DIM_BUF: - ret = 1; - break; - case GLSL_SAMPLER_DIM_2D: - case GLSL_SAMPLER_DIM_CUBE: - case GLSL_SAMPLER_DIM_MS: - case GLSL_SAMPLER_DIM_RECT: - case GLSL_SAMPLER_DIM_EXTERNAL: - case GLSL_SAMPLER_DIM_SUBPASS: - ret = 2; - break; - case GLSL_SAMPLER_DIM_3D: - ret = 3; - break; - default: - unreachable("not reached"); - } - if (instr->is_array) - ret++; - return ret; - } - - case nir_texop_lod: - return 2; - - case nir_texop_texture_samples: - case nir_texop_query_levels: - case nir_texop_samples_identical: - case nir_texop_fragment_mask_fetch_amd: - case nir_texop_lod_bias_agx: - return 1; - - case nir_texop_descriptor_amd: - return instr->sampler_dim == GLSL_SAMPLER_DIM_BUF ? 4 : 8; - - case nir_texop_sampler_descriptor_amd: - return 4; - - default: - if (instr->is_shadow && instr->is_new_style_shadow) - return 1; - - return 4; - } -} - -bool -nir_tex_instr_is_query(const nir_tex_instr *instr) -{ - switch (instr->op) { - case nir_texop_txs: - case nir_texop_lod: - case nir_texop_texture_samples: - case nir_texop_query_levels: - case nir_texop_descriptor_amd: - case nir_texop_sampler_descriptor_amd: - case nir_texop_lod_bias_agx: - return true; - case nir_texop_tex: - case nir_texop_txb: - case nir_texop_txl: - case nir_texop_txd: - case nir_texop_txf: - case nir_texop_txf_ms: - case nir_texop_txf_ms_fb: - case nir_texop_txf_ms_mcs_intel: - case nir_texop_tg4: - case nir_texop_samples_identical: - case nir_texop_fragment_mask_fetch_amd: - case nir_texop_fragment_fetch_amd: - return false; - default: - unreachable("Invalid texture opcode"); - } -} - -bool -nir_tex_instr_has_implicit_derivative(const nir_tex_instr *instr) -{ - switch (instr->op) { - case nir_texop_tex: - case nir_texop_txb: - case nir_texop_lod: - return true; - default: - return false; - } -} - -nir_alu_type -nir_tex_instr_src_type(const nir_tex_instr *instr, unsigned src) -{ - switch (instr->src[src].src_type) { - case nir_tex_src_coord: - switch (instr->op) { - case nir_texop_txf: - case nir_texop_txf_ms: - case nir_texop_txf_ms_fb: - case nir_texop_txf_ms_mcs_intel: - case nir_texop_samples_identical: - case nir_texop_fragment_fetch_amd: - case nir_texop_fragment_mask_fetch_amd: - return nir_type_int; - - default: - return nir_type_float; - } - - case nir_tex_src_lod: - switch (instr->op) { - case nir_texop_txs: - case nir_texop_txf: - case nir_texop_txf_ms: - case nir_texop_fragment_fetch_amd: - case nir_texop_fragment_mask_fetch_amd: - return nir_type_int; - - default: - return nir_type_float; - } - - case nir_tex_src_projector: - case nir_tex_src_comparator: - case nir_tex_src_bias: - case nir_tex_src_min_lod: - case nir_tex_src_ddx: - case nir_tex_src_ddy: - case nir_tex_src_backend1: - case nir_tex_src_backend2: - return nir_type_float; - - case nir_tex_src_offset: - case nir_tex_src_ms_index: - case nir_tex_src_plane: - return nir_type_int; - - case nir_tex_src_ms_mcs_intel: - case nir_tex_src_texture_deref: - case nir_tex_src_sampler_deref: - case nir_tex_src_texture_offset: - case nir_tex_src_sampler_offset: - case nir_tex_src_texture_handle: - case nir_tex_src_sampler_handle: - return nir_type_uint; - - case nir_num_tex_src_types: - unreachable("nir_num_tex_src_types is not a valid source type"); - } - - unreachable("Invalid texture source type"); -} - -unsigned -nir_tex_instr_src_size(const nir_tex_instr *instr, unsigned src) -{ - if (instr->src[src].src_type == nir_tex_src_coord) - return instr->coord_components; - - /* The MCS value is expected to be a vec4 returned by a txf_ms_mcs_intel */ - if (instr->src[src].src_type == nir_tex_src_ms_mcs_intel) - return 4; - - if (instr->src[src].src_type == nir_tex_src_ddx || - instr->src[src].src_type == nir_tex_src_ddy) { - - if (instr->is_array && !instr->array_is_lowered_cube) - return instr->coord_components - 1; - else - return instr->coord_components; - } - - if (instr->src[src].src_type == nir_tex_src_offset) { - if (instr->is_array) - return instr->coord_components - 1; - else - return instr->coord_components; - } - - if (instr->src[src].src_type == nir_tex_src_backend1 || - instr->src[src].src_type == nir_tex_src_backend2) - return nir_src_num_components(instr->src[src].src); - - /* For AMD, this can be a vec8/vec4 image/sampler descriptor. */ - if (instr->src[src].src_type == nir_tex_src_texture_handle || - instr->src[src].src_type == nir_tex_src_sampler_handle) - return 0; - - return 1; -} - -/** - * Return which components are written into transform feedback buffers. - * The result is relative to 0, not "component". - */ -unsigned -nir_instr_xfb_write_mask(nir_intrinsic_instr *instr) -{ - unsigned mask = 0; - - if (nir_intrinsic_has_io_xfb(instr)) { - unsigned wr_mask = nir_intrinsic_write_mask(instr) << - nir_intrinsic_component(instr); - assert((wr_mask & ~0xf) == 0); /* only 4 components allowed */ - - unsigned iter_mask = wr_mask; - while (iter_mask) { - unsigned i = u_bit_scan(&iter_mask); - nir_io_xfb xfb = i < 2 ? nir_intrinsic_io_xfb(instr) : - nir_intrinsic_io_xfb2(instr); - if (xfb.out[i % 2].num_components) - mask |= BITFIELD_RANGE(i, xfb.out[i % 2].num_components) & wr_mask; - } - } - - return mask; -} - -/** - * Whether an output slot is consumed by fixed-function logic. - */ -bool -nir_slot_is_sysval_output(gl_varying_slot slot) -{ - return slot == VARYING_SLOT_POS || - slot == VARYING_SLOT_PSIZ || - slot == VARYING_SLOT_EDGE || - slot == VARYING_SLOT_CLIP_VERTEX || - slot == VARYING_SLOT_CLIP_DIST0 || - slot == VARYING_SLOT_CLIP_DIST1 || - slot == VARYING_SLOT_CULL_DIST0 || - slot == VARYING_SLOT_CULL_DIST1 || - slot == VARYING_SLOT_LAYER || - slot == VARYING_SLOT_VIEWPORT || - slot == VARYING_SLOT_TESS_LEVEL_OUTER || - slot == VARYING_SLOT_TESS_LEVEL_INNER || - slot == VARYING_SLOT_BOUNDING_BOX0 || - slot == VARYING_SLOT_BOUNDING_BOX1 || - slot == VARYING_SLOT_VIEW_INDEX || - slot == VARYING_SLOT_VIEWPORT_MASK || - slot == VARYING_SLOT_PRIMITIVE_SHADING_RATE || - slot == VARYING_SLOT_PRIMITIVE_COUNT || - slot == VARYING_SLOT_PRIMITIVE_INDICES || - slot == VARYING_SLOT_TASK_COUNT; -} - -/** - * Whether an input/output slot is consumed by the next shader stage, - * or written by the previous shader stage. - */ -bool -nir_slot_is_varying(gl_varying_slot slot) -{ - return slot >= VARYING_SLOT_VAR0 || - slot == VARYING_SLOT_COL0 || - slot == VARYING_SLOT_COL1 || - slot == VARYING_SLOT_BFC0 || - slot == VARYING_SLOT_BFC1 || - slot == VARYING_SLOT_FOGC || - (slot >= VARYING_SLOT_TEX0 && slot <= VARYING_SLOT_TEX7) || - slot == VARYING_SLOT_PNTC || - slot == VARYING_SLOT_CLIP_DIST0 || - slot == VARYING_SLOT_CLIP_DIST1 || - slot == VARYING_SLOT_CULL_DIST0 || - slot == VARYING_SLOT_CULL_DIST1 || - slot == VARYING_SLOT_PRIMITIVE_ID || - slot == VARYING_SLOT_LAYER || - slot == VARYING_SLOT_VIEWPORT || - slot == VARYING_SLOT_TESS_LEVEL_OUTER || - slot == VARYING_SLOT_TESS_LEVEL_INNER; -} - -bool -nir_slot_is_sysval_output_and_varying(gl_varying_slot slot) -{ - return nir_slot_is_sysval_output(slot) && - nir_slot_is_varying(slot); -} - -/** - * This marks the output store instruction as not feeding the next shader - * stage. If the instruction has no other use, it's removed. - */ -void nir_remove_varying(nir_intrinsic_instr *intr) -{ - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - - if ((!sem.no_sysval_output && nir_slot_is_sysval_output(sem.location)) || - nir_instr_xfb_write_mask(intr)) { - /* Demote the store instruction. */ - sem.no_varying = true; - nir_intrinsic_set_io_semantics(intr, sem); - } else { - nir_instr_remove(&intr->instr); - } -} - -/** - * This marks the output store instruction as not feeding fixed-function - * logic. If the instruction has no other use, it's removed. - */ -void nir_remove_sysval_output(nir_intrinsic_instr *intr) -{ - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - - if ((!sem.no_varying && nir_slot_is_varying(sem.location)) || - nir_instr_xfb_write_mask(intr)) { - /* Demote the store instruction. */ - sem.no_sysval_output = true; - nir_intrinsic_set_io_semantics(intr, sem); - } else { - nir_instr_remove(&intr->instr); - } -} - -void nir_remove_non_entrypoints(nir_shader *nir) -{ - foreach_list_typed_safe(nir_function, func, node, &nir->functions) { - if (!func->is_entrypoint) - exec_node_remove(&func->node); - } - assert(exec_list_length(&nir->functions) == 1); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir.h deleted file mode 100644 index 20f962d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir.h +++ /dev/null @@ -1,6016 +0,0 @@ -/* - * Copyright © 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#ifndef NIR_H -#define NIR_H - -#include "../../util/hash_table.h" -#include "../../util/list.h" -#include "../glsl/list.h" -#include "../../util/log.h" -#include "../../util/ralloc.h" -#include "../../util/set.h" -#include "../../util/bitscan.h" -#include "../../util/bitset.h" -#include "../../util/compiler.h" -#include "../../util/enum_operators.h" -#include "../../util/macros.h" -#include "../../util/u_printf.h" -#include "../../util/format/u_format.h" -#include "../nir_types.h" -#include "../shader_enums.h" -#include "../shader_info.h" -#define XXH_INLINE_ALL -#include "../../util/xxhash.h" -#include - -#ifndef NDEBUG -#include "../../util/u_debug.h" -#endif /* NDEBUG */ - -#include "nir_opcodes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint32_t nir_debug; -extern bool nir_debug_print_shader[MESA_SHADER_KERNEL + 1]; - -#ifndef NDEBUG -#define NIR_DEBUG(flag) unlikely(nir_debug & (NIR_DEBUG_ ## flag)) -#else -#define NIR_DEBUG(flag) false -#endif - -#define NIR_DEBUG_CLONE (1u << 0) -#define NIR_DEBUG_SERIALIZE (1u << 1) -#define NIR_DEBUG_NOVALIDATE (1u << 2) -#define NIR_DEBUG_VALIDATE_SSA_DOMINANCE (1u << 3) -#define NIR_DEBUG_TGSI (1u << 4) -#define NIR_DEBUG_PRINT_VS (1u << 5) -#define NIR_DEBUG_PRINT_TCS (1u << 6) -#define NIR_DEBUG_PRINT_TES (1u << 7) -#define NIR_DEBUG_PRINT_GS (1u << 8) -#define NIR_DEBUG_PRINT_FS (1u << 9) -#define NIR_DEBUG_PRINT_CS (1u << 10) -#define NIR_DEBUG_PRINT_TS (1u << 11) -#define NIR_DEBUG_PRINT_MS (1u << 12) -#define NIR_DEBUG_PRINT_RGS (1u << 13) -#define NIR_DEBUG_PRINT_AHS (1u << 14) -#define NIR_DEBUG_PRINT_CHS (1u << 15) -#define NIR_DEBUG_PRINT_MHS (1u << 16) -#define NIR_DEBUG_PRINT_IS (1u << 17) -#define NIR_DEBUG_PRINT_CBS (1u << 18) -#define NIR_DEBUG_PRINT_KS (1u << 19) -#define NIR_DEBUG_PRINT_CONSTS (1u << 20) -#define NIR_DEBUG_PRINT_INTERNAL (1u << 21) - -#define NIR_DEBUG_PRINT (NIR_DEBUG_PRINT_VS | \ - NIR_DEBUG_PRINT_TCS | \ - NIR_DEBUG_PRINT_TES | \ - NIR_DEBUG_PRINT_GS | \ - NIR_DEBUG_PRINT_FS | \ - NIR_DEBUG_PRINT_CS | \ - NIR_DEBUG_PRINT_TS | \ - NIR_DEBUG_PRINT_MS | \ - NIR_DEBUG_PRINT_RGS | \ - NIR_DEBUG_PRINT_AHS | \ - NIR_DEBUG_PRINT_CHS | \ - NIR_DEBUG_PRINT_MHS | \ - NIR_DEBUG_PRINT_IS | \ - NIR_DEBUG_PRINT_CBS | \ - NIR_DEBUG_PRINT_KS) - -#define NIR_FALSE 0u -#define NIR_TRUE (~0u) -#define NIR_MAX_VEC_COMPONENTS 16 -#define NIR_MAX_MATRIX_COLUMNS 4 -#define NIR_STREAM_PACKED (1 << 8) -typedef uint16_t nir_component_mask_t; - -static inline bool -nir_num_components_valid(unsigned num_components) -{ - return (num_components >= 1 && - num_components <= 5) || - num_components == 8 || - num_components == 16; -} - -static inline nir_component_mask_t -nir_component_mask(unsigned num_components) -{ - assert(nir_num_components_valid(num_components)); - return (1u << num_components) - 1; -} - -void -nir_process_debug_variable(void); - -bool nir_component_mask_can_reinterpret(nir_component_mask_t mask, - unsigned old_bit_size, - unsigned new_bit_size); -nir_component_mask_t -nir_component_mask_reinterpret(nir_component_mask_t mask, - unsigned old_bit_size, - unsigned new_bit_size); - -/** Defines a cast function - * - * This macro defines a cast function from in_type to out_type where - * out_type is some structure type that contains a field of type out_type. - * - * Note that you have to be a bit careful as the generated cast function - * destroys constness. - */ -#define NIR_DEFINE_CAST(name, in_type, out_type, field, \ - type_field, type_value) \ -static inline out_type * \ -name(const in_type *parent) \ -{ \ - assert(parent && parent->type_field == type_value); \ - return exec_node_data(out_type, parent, field); \ -} - -struct nir_function; -struct nir_shader; -struct nir_instr; -struct nir_builder; -struct nir_xfb_info; - - -/** - * Description of built-in state associated with a uniform - * - * \sa nir_variable::state_slots - */ -typedef struct { - gl_state_index16 tokens[STATE_LENGTH]; - uint16_t swizzle; -} nir_state_slot; - -typedef enum { - nir_var_system_value = (1 << 0), - nir_var_uniform = (1 << 1), - nir_var_shader_in = (1 << 2), - nir_var_shader_out = (1 << 3), - nir_var_image = (1 << 4), - /** Incoming call or ray payload data for ray-tracing shaders */ - nir_var_shader_call_data = (1 << 5), - /** Ray hit attributes */ - nir_var_ray_hit_attrib = (1 << 6), - - /* Modes named nir_var_mem_* have explicit data layout */ - nir_var_mem_ubo = (1 << 7), - nir_var_mem_push_const = (1 << 8), - nir_var_mem_ssbo = (1 << 9), - nir_var_mem_constant = (1 << 10), - nir_var_mem_task_payload = (1 << 11), - - /* Generic modes intentionally come last. See encode_dref_modes() in - * nir_serialize.c for more details. - */ - nir_var_shader_temp = (1 << 12), - nir_var_function_temp = (1 << 13), - nir_var_mem_shared = (1 << 14), - nir_var_mem_global = (1 << 15), - - nir_var_mem_generic = (nir_var_shader_temp | - nir_var_function_temp | - nir_var_mem_shared | - nir_var_mem_global), - - nir_var_read_only_modes = nir_var_shader_in | nir_var_uniform | - nir_var_system_value | nir_var_mem_constant | - nir_var_mem_ubo, - /* Modes where vector derefs can be indexed as arrays. nir_var_shader_out is only for mesh - * stages. - */ - nir_var_vec_indexable_modes = nir_var_mem_ubo | nir_var_mem_ssbo | - nir_var_mem_shared | nir_var_mem_global | - nir_var_mem_push_const | nir_var_mem_task_payload | - nir_var_shader_out, - nir_num_variable_modes = 16, - nir_var_all = (1 << nir_num_variable_modes) - 1, -} nir_variable_mode; -MESA_DEFINE_CPP_ENUM_BITFIELD_OPERATORS(nir_variable_mode) - -/** - * Rounding modes. - */ -typedef enum { - nir_rounding_mode_undef = 0, - nir_rounding_mode_rtne = 1, /* round to nearest even */ - nir_rounding_mode_ru = 2, /* round up */ - nir_rounding_mode_rd = 3, /* round down */ - nir_rounding_mode_rtz = 4, /* round towards zero */ -} nir_rounding_mode; - -/** - * Ray query values that can read from a RayQueryKHR object. - */ -typedef enum { - nir_ray_query_value_intersection_type, - nir_ray_query_value_intersection_t, - nir_ray_query_value_intersection_instance_custom_index, - nir_ray_query_value_intersection_instance_id, - nir_ray_query_value_intersection_instance_sbt_index, - nir_ray_query_value_intersection_geometry_index, - nir_ray_query_value_intersection_primitive_index, - nir_ray_query_value_intersection_barycentrics, - nir_ray_query_value_intersection_front_face, - nir_ray_query_value_intersection_object_ray_direction, - nir_ray_query_value_intersection_object_ray_origin, - nir_ray_query_value_intersection_object_to_world, - nir_ray_query_value_intersection_world_to_object, - nir_ray_query_value_intersection_candidate_aabb_opaque, - nir_ray_query_value_tmin, - nir_ray_query_value_flags, - nir_ray_query_value_world_ray_direction, - nir_ray_query_value_world_ray_origin, -} nir_ray_query_value; - -typedef union { - bool b; - float f32; - double f64; - int8_t i8; - uint8_t u8; - int16_t i16; - uint16_t u16; - int32_t i32; - uint32_t u32; - int64_t i64; - uint64_t u64; -} nir_const_value; - -#define nir_const_value_to_array(arr, c, components, m) \ -{ \ - for (unsigned i = 0; i < components; ++i) \ - arr[i] = c[i].m; \ -} while (false) - -static inline nir_const_value -nir_const_value_for_raw_uint(uint64_t x, unsigned bit_size) -{ - nir_const_value v; - memset(&v, 0, sizeof(v)); - - switch (bit_size) { - case 1: v.b = x; break; - case 8: v.u8 = x; break; - case 16: v.u16 = x; break; - case 32: v.u32 = x; break; - case 64: v.u64 = x; break; - default: - unreachable("Invalid bit size"); - } - - return v; -} - -static inline nir_const_value -nir_const_value_for_int(int64_t i, unsigned bit_size) -{ - nir_const_value v; - memset(&v, 0, sizeof(v)); - - assert(bit_size <= 64); - if (bit_size < 64) { - assert(i >= (-(1ll << (bit_size - 1)))); - assert(i < (1ll << (bit_size - 1))); - } - - return nir_const_value_for_raw_uint(i, bit_size); -} - -static inline nir_const_value -nir_const_value_for_uint(uint64_t u, unsigned bit_size) -{ - nir_const_value v; - memset(&v, 0, sizeof(v)); - - assert(bit_size <= 64); - if (bit_size < 64) - assert(u < (1ull << bit_size)); - - return nir_const_value_for_raw_uint(u, bit_size); -} - -static inline nir_const_value -nir_const_value_for_bool(bool b, unsigned bit_size) -{ - /* Booleans use a 0/-1 convention */ - return nir_const_value_for_int(-(int)b, bit_size); -} - -/* This one isn't inline because it requires half-float conversion */ -nir_const_value nir_const_value_for_float(double b, unsigned bit_size); - -static inline int64_t -nir_const_value_as_int(nir_const_value value, unsigned bit_size) -{ - switch (bit_size) { - /* int1_t uses 0/-1 convention */ - case 1: return -(int)value.b; - case 8: return value.i8; - case 16: return value.i16; - case 32: return value.i32; - case 64: return value.i64; - default: - unreachable("Invalid bit size"); - } -} - -static inline uint64_t -nir_const_value_as_uint(nir_const_value value, unsigned bit_size) -{ - switch (bit_size) { - case 1: return value.b; - case 8: return value.u8; - case 16: return value.u16; - case 32: return value.u32; - case 64: return value.u64; - default: - unreachable("Invalid bit size"); - } -} - -static inline bool -nir_const_value_as_bool(nir_const_value value, unsigned bit_size) -{ - int64_t i = nir_const_value_as_int(value, bit_size); - - /* Booleans of any size use 0/-1 convention */ - assert(i == 0 || i == -1); - - return i; -} - -/* This one isn't inline because it requires half-float conversion */ -double nir_const_value_as_float(nir_const_value value, unsigned bit_size); - -typedef struct nir_constant { - /** - * Value of the constant. - * - * The field used to back the values supplied by the constant is determined - * by the type associated with the \c nir_variable. Constants may be - * scalars, vectors, or matrices. - */ - nir_const_value values[NIR_MAX_VEC_COMPONENTS]; - - /* we could get this from the var->type but makes clone *much* easier to - * not have to care about the type. - */ - unsigned num_elements; - - /* Array elements / Structure Fields */ - struct nir_constant **elements; -} nir_constant; - -/** - * \brief Layout qualifiers for gl_FragDepth. - * - * The AMD/ARB_conservative_depth extensions allow gl_FragDepth to be redeclared - * with a layout qualifier. - */ -typedef enum { - nir_depth_layout_none, /**< No depth layout is specified. */ - nir_depth_layout_any, - nir_depth_layout_greater, - nir_depth_layout_less, - nir_depth_layout_unchanged -} nir_depth_layout; - -/** - * Enum keeping track of how a variable was declared. - */ -typedef enum { - /** - * Normal declaration. - */ - nir_var_declared_normally = 0, - - /** - * Variable is implicitly generated by the compiler and should not be - * visible via the API. - */ - nir_var_hidden, -} nir_var_declaration_type; - -/** - * Either a uniform, global variable, shader input, or shader output. Based on - * ir_variable - it should be easy to translate between the two. - */ - -typedef struct nir_variable { - struct exec_node node; - - /** - * Declared type of the variable - */ - const struct glsl_type *type; - - /** - * Declared name of the variable - */ - char *name; - - struct nir_variable_data { - /** - * Storage class of the variable. - * - * \sa nir_variable_mode - */ - unsigned mode:16; - - /** - * Is the variable read-only? - * - * This is set for variables declared as \c const, shader inputs, - * and uniforms. - */ - unsigned read_only:1; - unsigned centroid:1; - unsigned sample:1; - unsigned patch:1; - unsigned invariant:1; - - /** - * Is the variable a ray query? - */ - unsigned ray_query:1; - - /** - * Precision qualifier. - * - * In desktop GLSL we do not care about precision qualifiers at all, in - * fact, the spec says that precision qualifiers are ignored. - * - * To make things easy, we make it so that this field is always - * GLSL_PRECISION_NONE on desktop shaders. This way all the variables - * have the same precision value and the checks we add in the compiler - * for this field will never break a desktop shader compile. - */ - unsigned precision:2; - - /** - * Has this variable been statically assigned? - * - * This answers whether the variable was assigned in any path of - * the shader during ast_to_hir. This doesn't answer whether it is - * still written after dead code removal, nor is it maintained in - * non-ast_to_hir.cpp (GLSL parsing) paths. - */ - unsigned assigned:1; - - /** - * Can this variable be coalesced with another? - * - * This is set by nir_lower_io_to_temporaries to say that any - * copies involving this variable should stay put. Propagating it can - * duplicate the resulting load/store, which is not wanted, and may - * result in a load/store of the variable with an indirect offset which - * the backend may not be able to handle. - */ - unsigned cannot_coalesce:1; - - /** - * When separate shader programs are enabled, only input/outputs between - * the stages of a multi-stage separate program can be safely removed - * from the shader interface. Other input/outputs must remains active. - * - * This is also used to make sure xfb varyings that are unused by the - * fragment shader are not removed. - */ - unsigned always_active_io:1; - - /** - * Interpolation mode for shader inputs / outputs - * - * \sa glsl_interp_mode - */ - unsigned interpolation:3; - - /** - * If non-zero, then this variable may be packed along with other variables - * into a single varying slot, so this offset should be applied when - * accessing components. For example, an offset of 1 means that the x - * component of this variable is actually stored in component y of the - * location specified by \c location. - */ - unsigned location_frac:2; - - /** - * If true, this variable represents an array of scalars that should - * be tightly packed. In other words, consecutive array elements - * should be stored one component apart, rather than one slot apart. - */ - unsigned compact:1; - - /** - * Whether this is a fragment shader output implicitly initialized with - * the previous contents of the specified render target at the - * framebuffer location corresponding to this shader invocation. - */ - unsigned fb_fetch_output:1; - - /** - * Non-zero if this variable is considered bindless as defined by - * ARB_bindless_texture. - */ - unsigned bindless:1; - - /** - * Was an explicit binding set in the shader? - */ - unsigned explicit_binding:1; - - /** - * Was the location explicitly set in the shader? - * - * If the location is explicitly set in the shader, it \b cannot be changed - * by the linker or by the API (e.g., calls to \c glBindAttribLocation have - * no effect). - */ - unsigned explicit_location:1; - - /** - * Is this varying used by transform feedback? - * - * This is used by the linker to decide if it's safe to pack the varying. - */ - unsigned is_xfb:1; - - /** - * Is this varying used only by transform feedback? - * - * This is used by the linker to decide if its safe to pack the varying. - */ - unsigned is_xfb_only:1; - - /** - * Was a transfer feedback buffer set in the shader? - */ - unsigned explicit_xfb_buffer:1; - - /** - * Was a transfer feedback stride set in the shader? - */ - unsigned explicit_xfb_stride:1; - - /** - * Was an explicit offset set in the shader? - */ - unsigned explicit_offset:1; - - /** - * Layout of the matrix. Uses glsl_matrix_layout values. - */ - unsigned matrix_layout:2; - - /** - * Non-zero if this variable was created by lowering a named interface - * block. - */ - unsigned from_named_ifc_block:1; - - /** - * Non-zero if the variable must be a shader input. This is useful for - * constraints on function parameters. - */ - unsigned must_be_shader_input:1; - - /** - * How the variable was declared. See nir_var_declaration_type. - * - * This is used to detect variables generated by the compiler, so should - * not be visible via the API. - */ - unsigned how_declared:2; - - /** - * Is this variable per-view? If so, we know it must be an array with - * size corresponding to the number of views. - */ - unsigned per_view:1; - - /** - * Whether the variable is per-primitive. - * Can be use by Mesh Shader outputs and corresponding Fragment Shader inputs. - */ - unsigned per_primitive:1; - - /** - * \brief Layout qualifier for gl_FragDepth. See nir_depth_layout. - * - * This is not equal to \c ir_depth_layout_none if and only if this - * variable is \c gl_FragDepth and a layout qualifier is specified. - */ - unsigned depth_layout:3; - - /** - * Vertex stream output identifier. - * - * For packed outputs, NIR_STREAM_PACKED is set and bits [2*i+1,2*i] - * indicate the stream of the i-th component. - */ - unsigned stream:9; - - /** - * See gl_access_qualifier. - * - * Access flags for memory variables (SSBO/global), image uniforms, and - * bindless images in uniforms/inputs/outputs. - */ - unsigned access:9; - - /** - * Descriptor set binding for sampler or UBO. - */ - unsigned descriptor_set:5; - - /** - * output index for dual source blending. - */ - unsigned index; - - /** - * Initial binding point for a sampler or UBO. - * - * For array types, this represents the binding point for the first element. - */ - unsigned binding; - - /** - * Storage location of the base of this variable - * - * The precise meaning of this field depends on the nature of the variable. - * - * - Vertex shader input: one of the values from \c gl_vert_attrib. - * - Vertex shader output: one of the values from \c gl_varying_slot. - * - Geometry shader input: one of the values from \c gl_varying_slot. - * - Geometry shader output: one of the values from \c gl_varying_slot. - * - Fragment shader input: one of the values from \c gl_varying_slot. - * - Fragment shader output: one of the values from \c gl_frag_result. - * - Task shader output: one of the values from \c gl_varying_slot. - * - Mesh shader input: one of the values from \c gl_varying_slot. - * - Mesh shader output: one of the values from \c gl_varying_slot. - * - Uniforms: Per-stage uniform slot number for default uniform block. - * - Uniforms: Index within the uniform block definition for UBO members. - * - Non-UBO Uniforms: uniform slot number. - * - Other: This field is not currently used. - * - * If the variable is a uniform, shader input, or shader output, and the - * slot has not been assigned, the value will be -1. - */ - int location; - - /** - * The actual location of the variable in the IR. Only valid for inputs, - * outputs, uniforms (including samplers and images), and for UBO and SSBO - * variables in GLSL. - */ - unsigned driver_location; - - /** - * Location an atomic counter or transform feedback is stored at. - */ - unsigned offset; - - union { - struct { - /** Image internal format if specified explicitly, otherwise PIPE_FORMAT_NONE. */ - enum pipe_format format; - } image; - - struct { - /** - * For OpenCL inline samplers. See cl_sampler_addressing_mode and cl_sampler_filter_mode - */ - unsigned is_inline_sampler : 1; - unsigned addressing_mode : 3; - unsigned normalized_coordinates : 1; - unsigned filter_mode : 1; - } sampler; - - struct { - /** - * Transform feedback buffer. - */ - uint16_t buffer:2; - - /** - * Transform feedback stride. - */ - uint16_t stride; - } xfb; - }; - } data; - - /** - * Identifier for this variable generated by nir_index_vars() that is unique - * among other variables in the same exec_list. - */ - unsigned index; - - /* Number of nir_variable_data members */ - uint16_t num_members; - - /** - * Built-in state that backs this uniform - * - * Once set at variable creation, \c state_slots must remain invariant. - * This is because, ideally, this array would be shared by all clones of - * this variable in the IR tree. In other words, we'd really like for it - * to be a fly-weight. - * - * If the variable is not a uniform, \c num_state_slots will be zero and - * \c state_slots will be \c NULL. - */ - /*@{*/ - uint16_t num_state_slots; /**< Number of state slots used */ - nir_state_slot *state_slots; /**< State descriptors. */ - /*@}*/ - - /** - * Constant expression assigned in the initializer of the variable - * - * This field should only be used temporarily by creators of NIR shaders - * and then nir_lower_variable_initializers can be used to get rid of them. - * Most of the rest of NIR ignores this field or asserts that it's NULL. - */ - nir_constant *constant_initializer; - - /** - * Global variable assigned in the initializer of the variable - * This field should only be used temporarily by creators of NIR shaders - * and then nir_lower_variable_initializers can be used to get rid of them. - * Most of the rest of NIR ignores this field or asserts that it's NULL. - */ - struct nir_variable *pointer_initializer; - - /** - * For variables that are in an interface block or are an instance of an - * interface block, this is the \c GLSL_TYPE_INTERFACE type for that block. - * - * \sa ir_variable::location - */ - const struct glsl_type *interface_type; - - /** - * Description of per-member data for per-member struct variables - * - * This is used for variables which are actually an amalgamation of - * multiple entities such as a struct of built-in values or a struct of - * inputs each with their own layout specifier. This is only allowed on - * variables with a struct or array of array of struct type. - */ - struct nir_variable_data *members; -} nir_variable; - -static inline bool -_nir_shader_variable_has_mode(nir_variable *var, unsigned modes) -{ - /* This isn't a shader variable */ - assert(!(modes & nir_var_function_temp)); - return var->data.mode & modes; -} - -#define nir_foreach_variable_in_list(var, var_list) \ - foreach_list_typed(nir_variable, var, node, var_list) - -#define nir_foreach_variable_in_list_safe(var, var_list) \ - foreach_list_typed_safe(nir_variable, var, node, var_list) - -#define nir_foreach_variable_in_shader(var, shader) \ - nir_foreach_variable_in_list(var, &(shader)->variables) - -#define nir_foreach_variable_in_shader_safe(var, shader) \ - nir_foreach_variable_in_list_safe(var, &(shader)->variables) - -#define nir_foreach_variable_with_modes(var, shader, modes) \ - nir_foreach_variable_in_shader(var, shader) \ - if (_nir_shader_variable_has_mode(var, modes)) - -#define nir_foreach_variable_with_modes_safe(var, shader, modes) \ - nir_foreach_variable_in_shader_safe(var, shader) \ - if (_nir_shader_variable_has_mode(var, modes)) - -#define nir_foreach_shader_in_variable(var, shader) \ - nir_foreach_variable_with_modes(var, shader, nir_var_shader_in) - -#define nir_foreach_shader_in_variable_safe(var, shader) \ - nir_foreach_variable_with_modes_safe(var, shader, nir_var_shader_in) - -#define nir_foreach_shader_out_variable(var, shader) \ - nir_foreach_variable_with_modes(var, shader, nir_var_shader_out) - -#define nir_foreach_shader_out_variable_safe(var, shader) \ - nir_foreach_variable_with_modes_safe(var, shader, nir_var_shader_out) - -#define nir_foreach_uniform_variable(var, shader) \ - nir_foreach_variable_with_modes(var, shader, nir_var_uniform) - -#define nir_foreach_uniform_variable_safe(var, shader) \ - nir_foreach_variable_with_modes_safe(var, shader, nir_var_uniform) - -#define nir_foreach_image_variable(var, shader) \ - nir_foreach_variable_with_modes(var, shader, nir_var_image) - -#define nir_foreach_image_variable_safe(var, shader) \ - nir_foreach_variable_with_modes_safe(var, shader, nir_var_image) - -static inline bool -nir_variable_is_global(const nir_variable *var) -{ - return var->data.mode != nir_var_function_temp; -} - -typedef struct nir_register { - struct exec_node node; - - unsigned num_components; /** < number of vector components */ - unsigned num_array_elems; /** < size of array (0 for no array) */ - - /* The bit-size of each channel; must be one of 8, 16, 32, or 64 */ - uint8_t bit_size; - - /** - * True if this register may have different values in different SIMD - * invocations of the shader. - */ - bool divergent; - - /** generic register index. */ - unsigned index; - - /** set of nir_srcs where this register is used (read from) */ - struct list_head uses; - - /** set of nir_dests where this register is defined (written to) */ - struct list_head defs; -} nir_register; - -#define nir_foreach_register(reg, reg_list) \ - foreach_list_typed(nir_register, reg, node, reg_list) -#define nir_foreach_register_safe(reg, reg_list) \ - foreach_list_typed_safe(nir_register, reg, node, reg_list) - -typedef enum PACKED { - nir_instr_type_alu, - nir_instr_type_deref, - nir_instr_type_call, - nir_instr_type_tex, - nir_instr_type_intrinsic, - nir_instr_type_load_const, - nir_instr_type_jump, - nir_instr_type_ssa_undef, - nir_instr_type_phi, - nir_instr_type_parallel_copy, -} nir_instr_type; - -typedef struct nir_instr { - struct exec_node node; - struct nir_block *block; - nir_instr_type type; - - /* A temporary for optimization and analysis passes to use for storing - * flags. For instance, DCE uses this to store the "dead/live" info. - */ - uint8_t pass_flags; - - /** generic instruction index. */ - uint32_t index; -} nir_instr; - -static inline nir_instr * -nir_instr_next(nir_instr *instr) -{ - struct exec_node *next = exec_node_get_next(&instr->node); - if (exec_node_is_tail_sentinel(next)) - return NULL; - else - return exec_node_data(nir_instr, next, node); -} - -static inline nir_instr * -nir_instr_prev(nir_instr *instr) -{ - struct exec_node *prev = exec_node_get_prev(&instr->node); - if (exec_node_is_head_sentinel(prev)) - return NULL; - else - return exec_node_data(nir_instr, prev, node); -} - -static inline bool -nir_instr_is_first(const nir_instr *instr) -{ - return exec_node_is_head_sentinel(exec_node_get_prev_const(&instr->node)); -} - -static inline bool -nir_instr_is_last(const nir_instr *instr) -{ - return exec_node_is_tail_sentinel(exec_node_get_next_const(&instr->node)); -} - -typedef struct nir_ssa_def { - /** Instruction which produces this SSA value. */ - nir_instr *parent_instr; - - /** set of nir_instrs where this register is used (read from) */ - struct list_head uses; - - /** generic SSA definition index. */ - unsigned index; - - uint8_t num_components; - - /* The bit-size of each channel; must be one of 8, 16, 32, or 64 */ - uint8_t bit_size; - - /** - * True if this SSA value may have different values in different SIMD - * invocations of the shader. This is set by nir_divergence_analysis. - */ - bool divergent; -} nir_ssa_def; - -struct nir_src; - -typedef struct { - nir_register *reg; - struct nir_src *indirect; /** < NULL for no indirect offset */ - unsigned base_offset; - - /* TODO use-def chain goes here */ -} nir_reg_src; - -typedef struct { - nir_instr *parent_instr; - struct list_head def_link; - - nir_register *reg; - struct nir_src *indirect; /** < NULL for no indirect offset */ - unsigned base_offset; - - /* TODO def-use chain goes here */ -} nir_reg_dest; - -struct nir_if; - -typedef struct nir_src { - union { - /** Instruction that consumes this value as a source. */ - nir_instr *parent_instr; - struct nir_if *parent_if; - }; - - struct list_head use_link; - - union { - nir_reg_src reg; - nir_ssa_def *ssa; - }; - - bool is_ssa; - bool is_if; -} nir_src; - -static inline void -nir_src_set_parent_instr(nir_src *src, nir_instr *parent_instr) -{ - src->is_if = false; - src->parent_instr = parent_instr; -} - -static inline void -nir_src_set_parent_if(nir_src *src, struct nir_if *parent_if) -{ - src->is_if = true; - src->parent_if = parent_if; -} - -static inline nir_src -nir_src_init(void) -{ - nir_src src = { { NULL } }; - return src; -} - -#define NIR_SRC_INIT nir_src_init() - -#define nir_foreach_use_including_if(src, reg_or_ssa_def) \ - list_for_each_entry(nir_src, src, &(reg_or_ssa_def)->uses, use_link) - -#define nir_foreach_use_including_if_safe(src, reg_or_ssa_def) \ - list_for_each_entry_safe(nir_src, src, &(reg_or_ssa_def)->uses, use_link) - -#define nir_foreach_use(src, reg_or_ssa_def) \ - nir_foreach_use_including_if(src, reg_or_ssa_def) \ - if (!src->is_if) - -#define nir_foreach_use_safe(src, reg_or_ssa_def) \ - nir_foreach_use_including_if_safe(src, reg_or_ssa_def) \ - if (!src->is_if) - -#define nir_foreach_if_use(src, reg_or_ssa_def) \ - nir_foreach_use_including_if(src, reg_or_ssa_def) \ - if (src->is_if) - -#define nir_foreach_if_use_safe(src, reg_or_ssa_def) \ - nir_foreach_use_including_if_safe(src, reg_or_ssa_def) \ - if (src->is_if) - -static inline bool -nir_ssa_def_used_by_if(const nir_ssa_def *def) -{ - nir_foreach_if_use(_, def) - return true; - - return false; -} - -typedef struct { - union { - nir_reg_dest reg; - nir_ssa_def ssa; - }; - - bool is_ssa; -} nir_dest; - -static inline nir_dest -nir_dest_init(void) -{ - nir_dest dest = { { { NULL } } }; - return dest; -} - -#define NIR_DEST_INIT nir_dest_init() - -#define nir_foreach_def(dest, reg) \ - list_for_each_entry(nir_dest, dest, &(reg)->defs, reg.def_link) - -#define nir_foreach_def_safe(dest, reg) \ - list_for_each_entry_safe(nir_dest, dest, &(reg)->defs, reg.def_link) - -static inline nir_src -nir_src_for_ssa(nir_ssa_def *def) -{ - nir_src src = NIR_SRC_INIT; - - src.is_ssa = true; - src.ssa = def; - - return src; -} - -static inline nir_src -nir_src_for_reg(nir_register *reg) -{ - nir_src src = NIR_SRC_INIT; - - src.is_ssa = false; - src.reg.reg = reg; - src.reg.indirect = NULL; - src.reg.base_offset = 0; - - return src; -} - -static inline nir_dest -nir_dest_for_reg(nir_register *reg) -{ - nir_dest dest = NIR_DEST_INIT; - - dest.reg.reg = reg; - - return dest; -} - -static inline unsigned -nir_src_bit_size(nir_src src) -{ - return src.is_ssa ? src.ssa->bit_size : src.reg.reg->bit_size; -} - -static inline unsigned -nir_src_num_components(nir_src src) -{ - return src.is_ssa ? src.ssa->num_components : src.reg.reg->num_components; -} - -static inline bool -nir_src_is_const(nir_src src) -{ - return src.is_ssa && - src.ssa->parent_instr->type == nir_instr_type_load_const; -} - -static inline bool -nir_src_is_undef(nir_src src) -{ - return src.is_ssa && - src.ssa->parent_instr->type == nir_instr_type_ssa_undef; -} - -static inline bool -nir_src_is_divergent(nir_src src) -{ - return src.is_ssa ? src.ssa->divergent : src.reg.reg->divergent; -} - -static inline unsigned -nir_dest_bit_size(nir_dest dest) -{ - return dest.is_ssa ? dest.ssa.bit_size : dest.reg.reg->bit_size; -} - -static inline unsigned -nir_dest_num_components(nir_dest dest) -{ - return dest.is_ssa ? dest.ssa.num_components : dest.reg.reg->num_components; -} - -static inline bool -nir_dest_is_divergent(nir_dest dest) -{ - return dest.is_ssa ? dest.ssa.divergent : dest.reg.reg->divergent; -} - -/* Are all components the same, ie. .xxxx */ -static inline bool -nir_is_same_comp_swizzle(uint8_t *swiz, unsigned nr_comp) -{ - for (unsigned i = 1; i < nr_comp; i++) - if (swiz[i] != swiz[0]) - return false; - return true; -} - -/* Are all components sequential, ie. .yzw */ -static inline bool -nir_is_sequential_comp_swizzle(uint8_t *swiz, unsigned nr_comp) -{ - for (unsigned i = 1; i < nr_comp; i++) - if (swiz[i] != (swiz[0] + i)) - return false; - return true; -} - -void nir_src_copy(nir_src *dest, const nir_src *src, nir_instr *instr); -void nir_dest_copy(nir_dest *dest, const nir_dest *src, nir_instr *instr); - -typedef struct { - /** Base source */ - nir_src src; - - /** - * \name input modifiers - */ - /*@{*/ - /** - * For inputs interpreted as floating point, flips the sign bit. For - * inputs interpreted as integers, performs the two's complement negation. - */ - bool negate; - - /** - * Clears the sign bit for floating point values, and computes the integer - * absolute value for integers. Note that the negate modifier acts after - * the absolute value modifier, therefore if both are set then all inputs - * will become negative. - */ - bool abs; - /*@}*/ - - /** - * For each input component, says which component of the register it is - * chosen from. - * - * Note that which elements of the swizzle are used and which are ignored - * are based on the write mask for most opcodes - for example, a statement - * like "foo.xzw = bar.zyx" would have a writemask of 1101b and a swizzle - * of {2, 1, x, 0} where x means "don't care." - */ - uint8_t swizzle[NIR_MAX_VEC_COMPONENTS]; -} nir_alu_src; - -typedef struct { - /** Base destination */ - nir_dest dest; - - /** - * Saturate output modifier - * - * Only valid for opcodes that output floating-point numbers. Clamps the - * output to between 0.0 and 1.0 inclusive. - */ - bool saturate; - - /** - * Write-mask - * - * Ignored if dest.is_ssa is true - */ - nir_component_mask_t write_mask; -} nir_alu_dest; - -/** NIR sized and unsized types - * - * The values in this enum are carefully chosen so that the sized type is - * just the unsized type OR the number of bits. - */ -typedef enum PACKED { - nir_type_invalid = 0, /* Not a valid type */ - nir_type_int = 2, - nir_type_uint = 4, - nir_type_bool = 6, - nir_type_float = 128, - nir_type_bool1 = 1 | nir_type_bool, - nir_type_bool8 = 8 | nir_type_bool, - nir_type_bool16 = 16 | nir_type_bool, - nir_type_bool32 = 32 | nir_type_bool, - nir_type_int1 = 1 | nir_type_int, - nir_type_int8 = 8 | nir_type_int, - nir_type_int16 = 16 | nir_type_int, - nir_type_int32 = 32 | nir_type_int, - nir_type_int64 = 64 | nir_type_int, - nir_type_uint1 = 1 | nir_type_uint, - nir_type_uint8 = 8 | nir_type_uint, - nir_type_uint16 = 16 | nir_type_uint, - nir_type_uint32 = 32 | nir_type_uint, - nir_type_uint64 = 64 | nir_type_uint, - nir_type_float16 = 16 | nir_type_float, - nir_type_float32 = 32 | nir_type_float, - nir_type_float64 = 64 | nir_type_float, -} nir_alu_type; - -#define NIR_ALU_TYPE_SIZE_MASK 0x79 -#define NIR_ALU_TYPE_BASE_TYPE_MASK 0x86 - -static inline unsigned -nir_alu_type_get_type_size(nir_alu_type type) -{ - return type & NIR_ALU_TYPE_SIZE_MASK; -} - -static inline nir_alu_type -nir_alu_type_get_base_type(nir_alu_type type) -{ - return (nir_alu_type)(type & NIR_ALU_TYPE_BASE_TYPE_MASK); -} - -nir_alu_type -nir_get_nir_type_for_glsl_base_type(enum glsl_base_type base_type); - -static inline nir_alu_type -nir_get_nir_type_for_glsl_type(const struct glsl_type *type) -{ - return nir_get_nir_type_for_glsl_base_type(glsl_get_base_type(type)); -} - -enum glsl_base_type -nir_get_glsl_base_type_for_nir_type(nir_alu_type base_type); - -nir_op nir_type_conversion_op(nir_alu_type src, nir_alu_type dst, - nir_rounding_mode rnd); - -nir_op -nir_op_vec(unsigned components); - -bool -nir_op_is_vec(nir_op op); - -static inline bool -nir_is_float_control_signed_zero_inf_nan_preserve(unsigned execution_mode, unsigned bit_size) -{ - return (16 == bit_size && execution_mode & FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP16) || - (32 == bit_size && execution_mode & FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP32) || - (64 == bit_size && execution_mode & FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP64); -} - -static inline bool -nir_is_denorm_flush_to_zero(unsigned execution_mode, unsigned bit_size) -{ - return (16 == bit_size && execution_mode & FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP16) || - (32 == bit_size && execution_mode & FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP32) || - (64 == bit_size && execution_mode & FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP64); -} - -static inline bool -nir_is_denorm_preserve(unsigned execution_mode, unsigned bit_size) -{ - return (16 == bit_size && execution_mode & FLOAT_CONTROLS_DENORM_PRESERVE_FP16) || - (32 == bit_size && execution_mode & FLOAT_CONTROLS_DENORM_PRESERVE_FP32) || - (64 == bit_size && execution_mode & FLOAT_CONTROLS_DENORM_PRESERVE_FP64); -} - -static inline bool -nir_is_rounding_mode_rtne(unsigned execution_mode, unsigned bit_size) -{ - return (16 == bit_size && execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP16) || - (32 == bit_size && execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP32) || - (64 == bit_size && execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP64); -} - -static inline bool -nir_is_rounding_mode_rtz(unsigned execution_mode, unsigned bit_size) -{ - return (16 == bit_size && execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP16) || - (32 == bit_size && execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP32) || - (64 == bit_size && execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP64); -} - -static inline bool -nir_has_any_rounding_mode_rtz(unsigned execution_mode) -{ - return (execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP16) || - (execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP32) || - (execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP64); -} - -static inline bool -nir_has_any_rounding_mode_rtne(unsigned execution_mode) -{ - return (execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP16) || - (execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP32) || - (execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP64); -} - -static inline nir_rounding_mode -nir_get_rounding_mode_from_float_controls(unsigned execution_mode, - nir_alu_type type) -{ - if (nir_alu_type_get_base_type(type) != nir_type_float) - return nir_rounding_mode_undef; - - unsigned bit_size = nir_alu_type_get_type_size(type); - - if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) - return nir_rounding_mode_rtz; - if (nir_is_rounding_mode_rtne(execution_mode, bit_size)) - return nir_rounding_mode_rtne; - return nir_rounding_mode_undef; -} - -static inline bool -nir_has_any_rounding_mode_enabled(unsigned execution_mode) -{ - bool result = - nir_has_any_rounding_mode_rtne(execution_mode) || - nir_has_any_rounding_mode_rtz(execution_mode); - return result; -} - -typedef enum { - /** - * Operation where the first two sources are commutative. - * - * For 2-source operations, this just mathematical commutativity. Some - * 3-source operations, like ffma, are only commutative in the first two - * sources. - */ - NIR_OP_IS_2SRC_COMMUTATIVE = (1 << 0), - - /** - * Operation is associative - */ - NIR_OP_IS_ASSOCIATIVE = (1 << 1), - - /** - * Operation where src[0] is used to select src[1] on true or src[2] false. - * src[0] may be Boolean, or it may be another type used in an implicit - * comparison. - */ - NIR_OP_IS_SELECTION = (1 << 2), -} nir_op_algebraic_property; - -/* vec16 is the widest ALU op in NIR, making the max number of input of ALU - * instructions to be the same as NIR_MAX_VEC_COMPONENTS. - */ -#define NIR_ALU_MAX_INPUTS NIR_MAX_VEC_COMPONENTS - -typedef struct nir_op_info { - /** Name of the NIR ALU opcode */ - const char *name; - - /** Number of inputs (sources) */ - uint8_t num_inputs; - - /** - * The number of components in the output - * - * If non-zero, this is the size of the output and input sizes are - * explicitly given; swizzle and writemask are still in effect, but if - * the output component is masked out, then the input component may - * still be in use. - * - * If zero, the opcode acts in the standard, per-component manner; the - * operation is performed on each component (except the ones that are - * masked out) with the input being taken from the input swizzle for - * that component. - * - * The size of some of the inputs may be given (i.e. non-zero) even - * though output_size is zero; in that case, the inputs with a zero - * size act per-component, while the inputs with non-zero size don't. - */ - uint8_t output_size; - - /** - * The type of vector that the instruction outputs. Note that the - * staurate modifier is only allowed on outputs with the float type. - */ - nir_alu_type output_type; - - /** - * The number of components in each input - * - * See nir_op_infos::output_size for more detail about the relationship - * between input and output sizes. - */ - uint8_t input_sizes[NIR_ALU_MAX_INPUTS]; - - /** - * The type of vector that each input takes. Note that negate and - * absolute value are only allowed on inputs with int or float type and - * behave differently on the two. - */ - nir_alu_type input_types[NIR_ALU_MAX_INPUTS]; - - /** Algebraic properties of this opcode */ - nir_op_algebraic_property algebraic_properties; - - /** Whether this represents a numeric conversion opcode */ - bool is_conversion; -} nir_op_info; - -/** Metadata for each nir_op, indexed by opcode */ -extern const nir_op_info nir_op_infos[nir_num_opcodes]; - -static inline bool -nir_op_is_selection(nir_op op) -{ - return (nir_op_infos[op].algebraic_properties & NIR_OP_IS_SELECTION) != 0; -} - -typedef struct nir_alu_instr { - /** Base instruction */ - nir_instr instr; - - /** Opcode */ - nir_op op; - - /** Indicates that this ALU instruction generates an exact value - * - * This is kind of a mixture of GLSL "precise" and "invariant" and not - * really equivalent to either. This indicates that the value generated by - * this operation is high-precision and any code transformations that touch - * it must ensure that the resulting value is bit-for-bit identical to the - * original. - */ - bool exact:1; - - /** - * Indicates that this instruction doese not cause signed integer wrapping - * to occur, in the form of overflow or underflow. - */ - bool no_signed_wrap:1; - - /** - * Indicates that this instruction does not cause unsigned integer wrapping - * to occur, in the form of overflow or underflow. - */ - bool no_unsigned_wrap:1; - - /** Destination */ - nir_alu_dest dest; - - /** Sources - * - * The size of the array is given by nir_op_info::num_inputs. - */ - nir_alu_src src[]; -} nir_alu_instr; - -void nir_alu_src_copy(nir_alu_src *dest, const nir_alu_src *src, - nir_alu_instr *instr); -void nir_alu_dest_copy(nir_alu_dest *dest, const nir_alu_dest *src, - nir_alu_instr *instr); - -bool nir_alu_instr_is_copy(nir_alu_instr *instr); - -/* is this source channel used? */ -bool -nir_alu_instr_channel_used(const nir_alu_instr *instr, unsigned src, - unsigned channel); -nir_component_mask_t -nir_alu_instr_src_read_mask(const nir_alu_instr *instr, unsigned src); -/** - * Get the number of channels used for a source - */ -unsigned -nir_ssa_alu_instr_src_components(const nir_alu_instr *instr, unsigned src); - -bool -nir_alu_instr_is_comparison(const nir_alu_instr *instr); - -bool nir_const_value_negative_equal(nir_const_value c1, nir_const_value c2, - nir_alu_type full_type); - -bool nir_alu_srcs_equal(const nir_alu_instr *alu1, const nir_alu_instr *alu2, - unsigned src1, unsigned src2); - -bool nir_alu_srcs_negative_equal(const nir_alu_instr *alu1, - const nir_alu_instr *alu2, - unsigned src1, unsigned src2); - -bool nir_alu_src_is_trivial_ssa(const nir_alu_instr *alu, unsigned srcn); - -typedef enum { - nir_deref_type_var, - nir_deref_type_array, - nir_deref_type_array_wildcard, - nir_deref_type_ptr_as_array, - nir_deref_type_struct, - nir_deref_type_cast, -} nir_deref_type; - -typedef struct { - nir_instr instr; - - /** The type of this deref instruction */ - nir_deref_type deref_type; - - /** Bitmask what modes the underlying variable might be - * - * For OpenCL-style generic pointers, we may not know exactly what mode it - * is at any given point in time in the compile process. This bitfield - * contains the set of modes which it MAY be. - * - * Generally, this field should not be accessed directly. Use one of the - * nir_deref_mode_ helpers instead. - */ - nir_variable_mode modes; - - /** The dereferenced type of the resulting pointer value */ - const struct glsl_type *type; - - union { - /** Variable being dereferenced if deref_type is a deref_var */ - nir_variable *var; - - /** Parent deref if deref_type is not deref_var */ - nir_src parent; - }; - - /** Additional deref parameters */ - union { - struct { - nir_src index; - bool in_bounds; - } arr; - - struct { - unsigned index; - } strct; - - struct { - unsigned ptr_stride; - unsigned align_mul; - unsigned align_offset; - } cast; - }; - - /** Destination to store the resulting "pointer" */ - nir_dest dest; -} nir_deref_instr; - -/** Returns true if deref might have one of the given modes - * - * For multi-mode derefs, this returns true if any of the possible modes for - * the deref to have any of the specified modes. This function returning true - * does NOT mean that the deref definitely has one of those modes. It simply - * means that, with the best information we have at the time, it might. - */ -static inline bool -nir_deref_mode_may_be(const nir_deref_instr *deref, nir_variable_mode modes) -{ - assert(!(modes & ~nir_var_all)); - assert(deref->modes != 0); - return deref->modes & modes; -} - -/** Returns true if deref must have one of the given modes - * - * For multi-mode derefs, this returns true if NIR can prove that the given - * deref has one of the specified modes. This function returning false does - * NOT mean that deref doesn't have one of the given mode. It very well may - * have one of those modes, we just don't have enough information to prove - * that it does for sure. - */ -static inline bool -nir_deref_mode_must_be(const nir_deref_instr *deref, nir_variable_mode modes) -{ - assert(!(modes & ~nir_var_all)); - assert(deref->modes != 0); - return !(deref->modes & ~modes); -} - -/** Returns true if deref has the given mode - * - * This returns true if the deref has exactly the mode specified. If the - * deref may have that mode but may also have a different mode (i.e. modes has - * multiple bits set), this will assert-fail. - * - * If you're confused about which nir_deref_mode_ helper to use, use this one - * or nir_deref_mode_is_one_of below. - */ -static inline bool -nir_deref_mode_is(const nir_deref_instr *deref, nir_variable_mode mode) -{ - assert(util_bitcount(mode) == 1 && (mode & nir_var_all)); - assert(deref->modes != 0); - - /* This is only for "simple" cases so, if modes might interact with this - * deref then the deref has to have a single mode. - */ - if (nir_deref_mode_may_be(deref, mode)) { - assert(util_bitcount(deref->modes) == 1); - assert(deref->modes == mode); - } - - return deref->modes == mode; -} - -/** Returns true if deref has one of the given modes - * - * This returns true if the deref has exactly one possible mode and that mode - * is one of the modes specified. If the deref may have one of those modes - * but may also have a different mode (i.e. modes has multiple bits set), this - * will assert-fail. - */ -static inline bool -nir_deref_mode_is_one_of(const nir_deref_instr *deref, nir_variable_mode modes) -{ - /* This is only for "simple" cases so, if modes might interact with this - * deref then the deref has to have a single mode. - */ - if (nir_deref_mode_may_be(deref, modes)) { - assert(util_bitcount(deref->modes) == 1); - assert(nir_deref_mode_must_be(deref, modes)); - } - - return nir_deref_mode_may_be(deref, modes); -} - -/** Returns true if deref's possible modes lie in the given set of modes - * - * This returns true if the deref's modes lie in the given set of modes. If - * the deref's modes overlap with the specified modes but aren't entirely - * contained in the specified set of modes, this will assert-fail. In - * particular, if this is used in a generic pointers scenario, the specified - * modes has to contain all or none of the possible generic pointer modes. - * - * This is intended mostly for mass-lowering of derefs which might have - * generic pointers. - */ -static inline bool -nir_deref_mode_is_in_set(const nir_deref_instr *deref, nir_variable_mode modes) -{ - if (nir_deref_mode_may_be(deref, modes)) - assert(nir_deref_mode_must_be(deref, modes)); - - return nir_deref_mode_may_be(deref, modes); -} - -static inline nir_deref_instr *nir_src_as_deref(nir_src src); - -static inline nir_deref_instr * -nir_deref_instr_parent(const nir_deref_instr *instr) -{ - if (instr->deref_type == nir_deref_type_var) - return NULL; - else - return nir_src_as_deref(instr->parent); -} - -static inline nir_variable * -nir_deref_instr_get_variable(const nir_deref_instr *instr) -{ - while (instr->deref_type != nir_deref_type_var) { - if (instr->deref_type == nir_deref_type_cast) - return NULL; - - instr = nir_deref_instr_parent(instr); - } - - return instr->var; -} - -bool nir_deref_instr_has_indirect(nir_deref_instr *instr); -bool nir_deref_instr_is_known_out_of_bounds(nir_deref_instr *instr); - -typedef enum { - nir_deref_instr_has_complex_use_allow_memcpy_src = (1 << 0), - nir_deref_instr_has_complex_use_allow_memcpy_dst = (1 << 1), -} nir_deref_instr_has_complex_use_options; - -bool nir_deref_instr_has_complex_use(nir_deref_instr *instr, - nir_deref_instr_has_complex_use_options opts); - -bool nir_deref_instr_remove_if_unused(nir_deref_instr *instr); - -unsigned nir_deref_instr_array_stride(nir_deref_instr *instr); - -typedef struct { - nir_instr instr; - - struct nir_function *callee; - - unsigned num_params; - nir_src params[]; -} nir_call_instr; - -#include "nir_intrinsics.h" - -#define NIR_INTRINSIC_MAX_CONST_INDEX 7 - -/** Represents an intrinsic - * - * An intrinsic is an instruction type for handling things that are - * more-or-less regular operations but don't just consume and produce SSA - * values like ALU operations do. Intrinsics are not for things that have - * special semantic meaning such as phi nodes and parallel copies. - * Examples of intrinsics include variable load/store operations, system - * value loads, and the like. Even though texturing more-or-less falls - * under this category, texturing is its own instruction type because - * trying to represent texturing with intrinsics would lead to a - * combinatorial explosion of intrinsic opcodes. - * - * By having a single instruction type for handling a lot of different - * cases, optimization passes can look for intrinsics and, for the most - * part, completely ignore them. Each intrinsic type also has a few - * possible flags that govern whether or not they can be reordered or - * eliminated. That way passes like dead code elimination can still work - * on intrisics without understanding the meaning of each. - * - * Each intrinsic has some number of constant indices, some number of - * variables, and some number of sources. What these sources, variables, - * and indices mean depends on the intrinsic and is documented with the - * intrinsic declaration in nir_intrinsics.h. Intrinsics and texture - * instructions are the only types of instruction that can operate on - * variables. - */ -typedef struct { - nir_instr instr; - - nir_intrinsic_op intrinsic; - - nir_dest dest; - - /** number of components if this is a vectorized intrinsic - * - * Similarly to ALU operations, some intrinsics are vectorized. - * An intrinsic is vectorized if nir_intrinsic_infos.dest_components == 0. - * For vectorized intrinsics, the num_components field specifies the - * number of destination components and the number of source components - * for all sources with nir_intrinsic_infos.src_components[i] == 0. - */ - uint8_t num_components; - - int const_index[NIR_INTRINSIC_MAX_CONST_INDEX]; - - nir_src src[]; -} nir_intrinsic_instr; - -static inline nir_variable * -nir_intrinsic_get_var(nir_intrinsic_instr *intrin, unsigned i) -{ - return nir_deref_instr_get_variable(nir_src_as_deref(intrin->src[i])); -} - -typedef enum { - /* Memory ordering. */ - NIR_MEMORY_ACQUIRE = 1 << 0, - NIR_MEMORY_RELEASE = 1 << 1, - NIR_MEMORY_ACQ_REL = NIR_MEMORY_ACQUIRE | NIR_MEMORY_RELEASE, - - /* Memory visibility operations. */ - NIR_MEMORY_MAKE_AVAILABLE = 1 << 2, - NIR_MEMORY_MAKE_VISIBLE = 1 << 3, -} nir_memory_semantics; - -typedef enum { - NIR_SCOPE_NONE, - NIR_SCOPE_INVOCATION, - NIR_SCOPE_SUBGROUP, - NIR_SCOPE_SHADER_CALL, - NIR_SCOPE_WORKGROUP, - NIR_SCOPE_QUEUE_FAMILY, - NIR_SCOPE_DEVICE, -} nir_scope; - -/** - * \name NIR intrinsics semantic flags - * - * information about what the compiler can do with the intrinsics. - * - * \sa nir_intrinsic_info::flags - */ -typedef enum { - /** - * whether the intrinsic can be safely eliminated if none of its output - * value is not being used. - */ - NIR_INTRINSIC_CAN_ELIMINATE = (1 << 0), - - /** - * Whether the intrinsic can be reordered with respect to any other - * intrinsic, i.e. whether the only reordering dependencies of the - * intrinsic are due to the register reads/writes. - */ - NIR_INTRINSIC_CAN_REORDER = (1 << 1), -} nir_intrinsic_semantic_flag; - -/** - * Maximum valid value for a nir align_mul value (in intrinsics or derefs). - * - * Offsets can be signed, so this is the largest power of two in int32_t. - */ -#define NIR_ALIGN_MUL_MAX 0x40000000 - -typedef struct nir_io_semantics { - unsigned location:7; /* gl_vert_attrib, gl_varying_slot, or gl_frag_result */ - unsigned num_slots:6; /* max 32, may be pessimistic with const indexing */ - unsigned dual_source_blend_index:1; - unsigned fb_fetch_output:1; /* for GL_KHR_blend_equation_advanced */ - unsigned gs_streams:8; /* xxyyzzww: 2-bit stream index for each component */ - unsigned medium_precision:1; /* GLSL mediump qualifier */ - unsigned per_view:1; - unsigned high_16bits:1; /* whether accessing low or high half of the slot */ - unsigned invariant:1; /* The variable has the invariant flag set */ - /* CLIP_DISTn, LAYER, VIEWPORT, and TESS_LEVEL_* have up to 3 uses: - * - an output consumed by the next stage - * - a system value output affecting fixed-func hardware, e.g. the clipper - * - a transform feedback output written to memory - * The following fields disable the first two. Transform feedback is disabled - * by transform feedback info. - */ - unsigned no_varying:1; /* whether this output isn't consumed by the next stage */ - unsigned no_sysval_output:1; /* whether this system value output has no - effect due to current pipeline states */ - unsigned _pad:3; -} nir_io_semantics; - -/* Transform feedback info for 2 outputs. nir_intrinsic_store_output contains - * this structure twice to support up to 4 outputs. The structure is limited - * to 32 bits because it's stored in nir_intrinsic_instr::const_index[]. - */ -typedef struct nir_io_xfb { - struct { - /* start_component is equal to the index of out[]; add 2 for io_xfb2 */ - /* start_component is not relative to nir_intrinsic_component */ - /* get the stream index from nir_io_semantics */ - uint8_t num_components:4; /* max 4; if this is 0, xfb is disabled */ - uint8_t buffer:4; /* buffer index, max 3 */ - uint8_t offset; /* transform feedback buffer offset in dwords, - max (1K - 4) bytes */ - } out[2]; -} nir_io_xfb; - -unsigned -nir_instr_xfb_write_mask(nir_intrinsic_instr *instr); - -#define NIR_INTRINSIC_MAX_INPUTS 11 - -typedef struct { - const char *name; - - uint8_t num_srcs; /** < number of register/SSA inputs */ - - /** number of components of each input register - * - * If this value is 0, the number of components is given by the - * num_components field of nir_intrinsic_instr. If this value is -1, the - * intrinsic consumes however many components are provided and it is not - * validated at all. - */ - int8_t src_components[NIR_INTRINSIC_MAX_INPUTS]; - - bool has_dest; - - /** number of components of the output register - * - * If this value is 0, the number of components is given by the - * num_components field of nir_intrinsic_instr. - */ - uint8_t dest_components; - - /** bitfield of legal bit sizes */ - uint8_t dest_bit_sizes; - - /** source which the destination bit size must match - * - * Some intrinsics, such as subgroup intrinsics, are data manipulation - * intrinsics and they have similar bit-size rules to ALU ops. This enables - * validation to validate a bit more and enables auto-generated builder code - * to properly determine destination bit sizes automatically. - */ - int8_t bit_size_src; - - /** the number of constant indices used by the intrinsic */ - uint8_t num_indices; - - /** list of indices */ - uint8_t indices[NIR_INTRINSIC_MAX_CONST_INDEX]; - - /** indicates the usage of intr->const_index[n] */ - uint8_t index_map[NIR_INTRINSIC_NUM_INDEX_FLAGS]; - - /** semantic flags for calls to this intrinsic */ - nir_intrinsic_semantic_flag flags; -} nir_intrinsic_info; - -extern const nir_intrinsic_info nir_intrinsic_infos[nir_num_intrinsics]; - -unsigned -nir_intrinsic_src_components(const nir_intrinsic_instr *intr, unsigned srcn); - -unsigned -nir_intrinsic_dest_components(nir_intrinsic_instr *intr); - -/** - * Helper to copy const_index[] from src to dst, without assuming they - * match in order. - */ -void nir_intrinsic_copy_const_indices(nir_intrinsic_instr *dst, nir_intrinsic_instr *src); - -#include "nir_intrinsics_indices.h" -#include "../../util/vma.h" - -static inline void -nir_intrinsic_set_align(nir_intrinsic_instr *intrin, - unsigned align_mul, unsigned align_offset) -{ - assert(util_is_power_of_two_nonzero(align_mul)); - assert(align_offset < align_mul); - nir_intrinsic_set_align_mul(intrin, align_mul); - nir_intrinsic_set_align_offset(intrin, align_offset); -} - -/** Returns a simple alignment for an align_mul/offset pair - * - * This helper converts from the full mul+offset alignment scheme used by - * most NIR intrinsics to a simple alignment. The returned value is the - * largest power of two which divides both align_mul and align_offset. - * For any offset X which satisfies the complex alignment described by - * align_mul/offset, X % align == 0. - */ -static inline uint32_t -nir_combined_align(uint32_t align_mul, uint32_t align_offset) -{ - assert(util_is_power_of_two_nonzero(align_mul)); - assert(align_offset < align_mul); - return align_offset ? 1 << (ffs(align_offset) - 1) : align_mul; -} - -/** Returns a simple alignment for a load/store intrinsic offset - * - * Instead of the full mul+offset alignment scheme provided by the ALIGN_MUL - * and ALIGN_OFFSET parameters, this helper takes both into account and - * provides a single simple alignment parameter. The offset X is guaranteed - * to satisfy X % align == 0. - */ -static inline unsigned -nir_intrinsic_align(const nir_intrinsic_instr *intrin) -{ - return nir_combined_align(nir_intrinsic_align_mul(intrin), - nir_intrinsic_align_offset(intrin)); -} - -static inline bool -nir_intrinsic_has_align(const nir_intrinsic_instr *intrin) -{ - return nir_intrinsic_has_align_mul(intrin) && - nir_intrinsic_has_align_offset(intrin); -} - -unsigned -nir_image_intrinsic_coord_components(const nir_intrinsic_instr *instr); - -/* Converts a image_deref_* intrinsic into a image_* one */ -void nir_rewrite_image_intrinsic(nir_intrinsic_instr *instr, - nir_ssa_def *handle, bool bindless); - -/* Determine if an intrinsic can be arbitrarily reordered and eliminated. */ -static inline bool -nir_intrinsic_can_reorder(nir_intrinsic_instr *instr) -{ - if (nir_intrinsic_has_access(instr) && - nir_intrinsic_access(instr) & ACCESS_VOLATILE) - return false; - - if (instr->intrinsic == nir_intrinsic_load_deref) { - nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - return nir_deref_mode_is_in_set(deref, nir_var_read_only_modes) || - (nir_intrinsic_access(instr) & ACCESS_CAN_REORDER); - } else if (instr->intrinsic == nir_intrinsic_load_ssbo || - instr->intrinsic == nir_intrinsic_bindless_image_load || - instr->intrinsic == nir_intrinsic_image_deref_load || - instr->intrinsic == nir_intrinsic_image_load) { - return nir_intrinsic_access(instr) & ACCESS_CAN_REORDER; - } else { - const nir_intrinsic_info *info = - &nir_intrinsic_infos[instr->intrinsic]; - return (info->flags & NIR_INTRINSIC_CAN_ELIMINATE) && - (info->flags & NIR_INTRINSIC_CAN_REORDER); - } -} - -bool nir_intrinsic_writes_external_memory(const nir_intrinsic_instr *instr); - -static inline bool -nir_intrinsic_is_ray_query(nir_intrinsic_op intrinsic) -{ - switch (intrinsic) { - case nir_intrinsic_rq_confirm_intersection: - case nir_intrinsic_rq_generate_intersection: - case nir_intrinsic_rq_initialize: - case nir_intrinsic_rq_load: - case nir_intrinsic_rq_proceed: - case nir_intrinsic_rq_terminate: - return true; - default: - return false; - } -} - -/** Texture instruction source type */ -typedef enum { - /** Texture coordinate - * - * Must have nir_tex_instr::coord_components components. - */ - nir_tex_src_coord, - - /** Projector - * - * The texture coordinate (except for the array component, if any) is - * divided by this value before LOD computation and sampling. - * - * Must be a float scalar. - */ - nir_tex_src_projector, - - /** Shadow comparator - * - * For shadow sampling, the fetched texel values are compared against the - * shadow comparator using the compare op specified by the sampler object - * and converted to 1.0 if the comparison succeeds and 0.0 if it fails. - * Interpolation happens after this conversion so the actual result may be - * anywhere in the range [0.0, 1.0]. - * - * Only valid if nir_tex_instr::is_shadow and must be a float scalar. - */ - nir_tex_src_comparator, - - /** Coordinate offset - * - * An integer value that is added to the texel address before sampling. - * This is only allowed with operations that take an explicit LOD as it is - * applied in integer texel space after LOD selection and not normalized - * coordinate space. - */ - nir_tex_src_offset, - - /** LOD bias - * - * This value is added to the computed LOD before mip-mapping. - */ - nir_tex_src_bias, - - /** Explicit LOD */ - nir_tex_src_lod, - - /** Min LOD - * - * The computed LOD is clamped to be at least as large as min_lod before - * mip-mapping. - */ - nir_tex_src_min_lod, - - /** MSAA sample index */ - nir_tex_src_ms_index, - - /** Intel-specific MSAA compression data */ - nir_tex_src_ms_mcs_intel, - - /** Explicit horizontal (X-major) coordinate derivative */ - nir_tex_src_ddx, - - /** Explicit vertical (Y-major) coordinate derivative */ - nir_tex_src_ddy, - - /** Texture variable dereference */ - nir_tex_src_texture_deref, - - /** Sampler variable dereference */ - nir_tex_src_sampler_deref, - - /** Texture index offset - * - * This is added to nir_tex_instr::texture_index. Unless - * nir_tex_instr::texture_non_uniform is set, this is guaranteed to be - * dynamically uniform. - */ - nir_tex_src_texture_offset, - - /** Dynamically uniform sampler index offset - * - * This is added to nir_tex_instr::sampler_index. Unless - * nir_tex_instr::sampler_non_uniform is set, this is guaranteed to be - * dynamically uniform. This should not be present until GLSL ES 3.20, GLSL - * 4.00, or ARB_gpu_shader5, because in ES 3.10 and GL 3.30 samplers said - * "When aggregated into arrays within a shader, samplers can only be indexed - * with a constant integral expression." - */ - nir_tex_src_sampler_offset, - - /** Bindless texture handle - * - * This is, unfortunately, a bit overloaded at the moment. There are - * generally two types of bindless handles: - * - * 1. For GL_ARB_bindless bindless handles. These are part of the - * GL/Gallium-level API and are always a 64-bit integer. - * - * 2. HW-specific handles. GL_ARB_bindless handles may be lowered to - * these. Also, these are used by many Vulkan drivers to implement - * descriptor sets, especially for UPDATE_AFTER_BIND descriptors. - * The details of hardware handles (bit size, format, etc.) is - * HW-specific. - * - * Because of this overloading and the resulting ambiguity, we currently - * don't validate anything for these. - */ - nir_tex_src_texture_handle, - - /** Bindless sampler handle - * - * See nir_tex_src_texture_handle, - */ - nir_tex_src_sampler_handle, - - /** Plane index for multi-plane YCbCr textures */ - nir_tex_src_plane, - - /** - * Backend-specific vec4 tex src argument. - * - * Can be used to have NIR optimization (copy propagation, lower_vec_to_movs) - * apply to the packing of the tex srcs. This lowering must only happen - * after nir_lower_tex(). - * - * The nir_tex_instr_src_type() of this argument is float, so no lowering - * will happen if nir_lower_int_to_float is used. - */ - nir_tex_src_backend1, - - /** Second backend-specific vec4 tex src argument, see nir_tex_src_backend1. */ - nir_tex_src_backend2, - - nir_num_tex_src_types -} nir_tex_src_type; - -/** A texture instruction source */ -typedef struct { - /** Base source */ - nir_src src; - - /** Type of this source */ - nir_tex_src_type src_type; -} nir_tex_src; - -/** Texture instruction opcode */ -typedef enum { - nir_texop_tex, /**< Regular texture look-up */ - nir_texop_txb, /**< Texture look-up with LOD bias */ - nir_texop_txl, /**< Texture look-up with explicit LOD */ - nir_texop_txd, /**< Texture look-up with partial derivatives */ - nir_texop_txf, /**< Texel fetch with explicit LOD */ - nir_texop_txf_ms, /**< Multisample texture fetch */ - nir_texop_txf_ms_fb, /**< Multisample texture fetch from framebuffer */ - nir_texop_txf_ms_mcs_intel, /**< Multisample compression value fetch */ - nir_texop_txs, /**< Texture size */ - nir_texop_lod, /**< Texture lod query */ - nir_texop_tg4, /**< Texture gather */ - nir_texop_query_levels, /**< Texture levels query */ - nir_texop_texture_samples, /**< Texture samples query */ - nir_texop_samples_identical, /**< Query whether all samples are definitely - * identical. - */ - nir_texop_tex_prefetch, /**< Regular texture look-up, eligible for pre-dispatch */ - nir_texop_fragment_fetch_amd, /**< Multisample fragment color texture fetch */ - nir_texop_fragment_mask_fetch_amd, /**< Multisample fragment mask texture fetch */ - nir_texop_descriptor_amd, /**< Returns a buffer or image descriptor. */ - nir_texop_sampler_descriptor_amd, /**< Returns a sampler descriptor. */ - nir_texop_lod_bias_agx, /**< Returns the sampler's LOD bias */ -} nir_texop; - -/** Represents a texture instruction */ -typedef struct { - /** Base instruction */ - nir_instr instr; - - /** Dimensionality of the texture operation - * - * This will typically match the dimensionality of the texture deref type - * if a nir_tex_src_texture_deref is present. However, it may not if - * texture lowering has occurred. - */ - enum glsl_sampler_dim sampler_dim; - - /** ALU type of the destination - * - * This is the canonical sampled type for this texture operation and may - * not exactly match the sampled type of the deref type when a - * nir_tex_src_texture_deref is present. For OpenCL, the sampled type of - * the texture deref will be GLSL_TYPE_VOID and this is allowed to be - * anything. With SPIR-V, the signedness of integer types is allowed to - * differ. For all APIs, the bit size may differ if the driver has done - * any sort of mediump or similar lowering since texture types always have - * 32-bit sampled types. - */ - nir_alu_type dest_type; - - /** Texture opcode */ - nir_texop op; - - /** Destination */ - nir_dest dest; - - /** Array of sources - * - * This array has nir_tex_instr::num_srcs elements - */ - nir_tex_src *src; - - /** Number of sources */ - unsigned num_srcs; - - /** Number of components in the coordinate, if any */ - unsigned coord_components; - - /** True if the texture instruction acts on an array texture */ - bool is_array; - - /** True if the texture instruction performs a shadow comparison - * - * If this is true, the texture instruction must have a - * nir_tex_src_comparator. - */ - bool is_shadow; - - /** - * If is_shadow is true, whether this is the old-style shadow that outputs - * 4 components or the new-style shadow that outputs 1 component. - */ - bool is_new_style_shadow; - - /** - * True if this texture instruction should return a sparse residency code. - * The code is in the last component of the result. - */ - bool is_sparse; - - /** nir_texop_tg4 component selector - * - * This determines which RGBA component is gathered. - */ - unsigned component : 2; - - /** Validation needs to know this for gradient component count */ - unsigned array_is_lowered_cube : 1; - - /** Gather offsets */ - int8_t tg4_offsets[4][2]; - - /** True if the texture index or handle is not dynamically uniform */ - bool texture_non_uniform; - - /** True if the sampler index or handle is not dynamically uniform. - * - * This may be set when VK_EXT_descriptor_indexing is supported and the - * appropriate capability is enabled. - * - * This should always be false in GLSL (GLSL ES 3.20 says "When aggregated - * into arrays within a shader, opaque types can only be indexed with a - * dynamically uniform integral expression", and GLSL 4.60 says "When - * aggregated into arrays within a shader, [texture, sampler, and - * samplerShadow] types can only be indexed with a dynamically uniform - * expression, or texture lookup will result in undefined values."). - */ - bool sampler_non_uniform; - - /** The texture index - * - * If this texture instruction has a nir_tex_src_texture_offset source, - * then the texture index is given by texture_index + texture_offset. - */ - unsigned texture_index; - - /** The sampler index - * - * The following operations do not require a sampler and, as such, this - * field should be ignored: - * - nir_texop_txf - * - nir_texop_txf_ms - * - nir_texop_txs - * - nir_texop_query_levels - * - nir_texop_texture_samples - * - nir_texop_samples_identical - * - * If this texture instruction has a nir_tex_src_sampler_offset source, - * then the sampler index is given by sampler_index + sampler_offset. - */ - unsigned sampler_index; -} nir_tex_instr; - -/** - * Returns true if the texture operation requires a sampler as a general rule - * - * Note that the specific hw/driver backend could require to a sampler - * object/configuration packet in any case, for some other reason. - * - * @see nir_tex_instr::sampler_index. - */ -bool nir_tex_instr_need_sampler(const nir_tex_instr *instr); - -/** Returns the number of components returned by this nir_tex_instr - * - * Useful for code building texture instructions when you don't want to think - * about how many components a particular texture op returns. This does not - * include the sparse residency code. - */ -unsigned -nir_tex_instr_result_size(const nir_tex_instr *instr); - -/** - * Returns the destination size of this nir_tex_instr including the sparse - * residency code, if any. - */ -static inline unsigned -nir_tex_instr_dest_size(const nir_tex_instr *instr) -{ - /* One more component is needed for the residency code. */ - return nir_tex_instr_result_size(instr) + instr->is_sparse; -} - -/** - * Returns true if this texture operation queries something about the texture - * rather than actually sampling it. - */ -bool -nir_tex_instr_is_query(const nir_tex_instr *instr); - -/** Returns true if this texture instruction does implicit derivatives - * - * This is important as there are extra control-flow rules around derivatives - * and texture instructions which perform them implicitly. - */ -bool -nir_tex_instr_has_implicit_derivative(const nir_tex_instr *instr); - -/** Returns the ALU type of the given texture instruction source */ -nir_alu_type -nir_tex_instr_src_type(const nir_tex_instr *instr, unsigned src); - -/** - * Returns the number of components required by the given texture instruction - * source - */ -unsigned -nir_tex_instr_src_size(const nir_tex_instr *instr, unsigned src); - -/** - * Returns the index of the texture instruction source with the given - * nir_tex_src_type or -1 if no such source exists. - */ -static inline int -nir_tex_instr_src_index(const nir_tex_instr *instr, nir_tex_src_type type) -{ - for (unsigned i = 0; i < instr->num_srcs; i++) - if (instr->src[i].src_type == type) - return (int) i; - - return -1; -} - -/** Adds a source to a texture instruction */ -void nir_tex_instr_add_src(nir_tex_instr *tex, - nir_tex_src_type src_type, - nir_src src); - -/** Removes a source from a texture instruction */ -void nir_tex_instr_remove_src(nir_tex_instr *tex, unsigned src_idx); - -bool nir_tex_instr_has_explicit_tg4_offsets(nir_tex_instr *tex); - -typedef struct { - nir_instr instr; - - nir_ssa_def def; - - nir_const_value value[]; -} nir_load_const_instr; - -typedef enum { - /** Return from a function - * - * This instruction is a classic function return. It jumps to - * nir_function_impl::end_block. No return value is provided in this - * instruction. Instead, the function is expected to write any return - * data to a deref passed in from the caller. - */ - nir_jump_return, - - /** Immediately exit the current shader - * - * This instruction is roughly the equivalent of C's "exit()" in that it - * immediately terminates the current shader invocation. From a CFG - * perspective, it looks like a jump to nir_function_impl::end_block but - * it actually jumps to the end block of the shader entrypoint. A halt - * instruction in the shader entrypoint itself is semantically identical - * to a return. - * - * For shaders with built-in I/O, any outputs written prior to a halt - * instruction remain written and any outputs not written prior to the - * halt have undefined values. It does NOT cause an implicit discard of - * written results. If one wants discard results in a fragment shader, - * for instance, a discard or demote intrinsic is required. - */ - nir_jump_halt, - - /** Break out of the inner-most loop - * - * This has the same semantics as C's "break" statement. - */ - nir_jump_break, - - /** Jump back to the top of the inner-most loop - * - * This has the same semantics as C's "continue" statement assuming that a - * NIR loop is implemented as "while (1) { body }". - */ - nir_jump_continue, - - /** Jumps for unstructured CFG. - * - * As within an unstructured CFG we can't rely on block ordering we need to - * place explicit jumps at the end of every block. - */ - nir_jump_goto, - nir_jump_goto_if, -} nir_jump_type; - -typedef struct { - nir_instr instr; - nir_jump_type type; - nir_src condition; - struct nir_block *target; - struct nir_block *else_target; -} nir_jump_instr; - -/* creates a new SSA variable in an undefined state */ - -typedef struct { - nir_instr instr; - nir_ssa_def def; -} nir_ssa_undef_instr; - -typedef struct { - struct exec_node node; - - /* The predecessor block corresponding to this source */ - struct nir_block *pred; - - nir_src src; -} nir_phi_src; - -#define nir_foreach_phi_src(phi_src, phi) \ - foreach_list_typed(nir_phi_src, phi_src, node, &(phi)->srcs) -#define nir_foreach_phi_src_safe(phi_src, phi) \ - foreach_list_typed_safe(nir_phi_src, phi_src, node, &(phi)->srcs) - -typedef struct { - nir_instr instr; - - struct exec_list srcs; /** < list of nir_phi_src */ - - nir_dest dest; -} nir_phi_instr; - -static inline nir_phi_src * -nir_phi_get_src_from_block(nir_phi_instr *phi, struct nir_block *block) -{ - nir_foreach_phi_src(src, phi) { - if (src->pred == block) - return src; - } - - assert(!"Block is not a predecessor of phi."); - return NULL; -} - -typedef struct { - struct exec_node node; - nir_src src; - nir_dest dest; -} nir_parallel_copy_entry; - -#define nir_foreach_parallel_copy_entry(entry, pcopy) \ - foreach_list_typed(nir_parallel_copy_entry, entry, node, &(pcopy)->entries) - -typedef struct { - nir_instr instr; - - /* A list of nir_parallel_copy_entrys. The sources of all of the - * entries are copied to the corresponding destinations "in parallel". - * In other words, if we have two entries: a -> b and b -> a, the values - * get swapped. - */ - struct exec_list entries; -} nir_parallel_copy_instr; - -NIR_DEFINE_CAST(nir_instr_as_alu, nir_instr, nir_alu_instr, instr, - type, nir_instr_type_alu) -NIR_DEFINE_CAST(nir_instr_as_deref, nir_instr, nir_deref_instr, instr, - type, nir_instr_type_deref) -NIR_DEFINE_CAST(nir_instr_as_call, nir_instr, nir_call_instr, instr, - type, nir_instr_type_call) -NIR_DEFINE_CAST(nir_instr_as_jump, nir_instr, nir_jump_instr, instr, - type, nir_instr_type_jump) -NIR_DEFINE_CAST(nir_instr_as_tex, nir_instr, nir_tex_instr, instr, - type, nir_instr_type_tex) -NIR_DEFINE_CAST(nir_instr_as_intrinsic, nir_instr, nir_intrinsic_instr, instr, - type, nir_instr_type_intrinsic) -NIR_DEFINE_CAST(nir_instr_as_load_const, nir_instr, nir_load_const_instr, instr, - type, nir_instr_type_load_const) -NIR_DEFINE_CAST(nir_instr_as_ssa_undef, nir_instr, nir_ssa_undef_instr, instr, - type, nir_instr_type_ssa_undef) -NIR_DEFINE_CAST(nir_instr_as_phi, nir_instr, nir_phi_instr, instr, - type, nir_instr_type_phi) -NIR_DEFINE_CAST(nir_instr_as_parallel_copy, nir_instr, - nir_parallel_copy_instr, instr, - type, nir_instr_type_parallel_copy) - - -#define NIR_DEFINE_SRC_AS_CONST(type, suffix) \ -static inline type \ -nir_src_comp_as_##suffix(nir_src src, unsigned comp) \ -{ \ - assert(nir_src_is_const(src)); \ - nir_load_const_instr *load = \ - nir_instr_as_load_const(src.ssa->parent_instr); \ - assert(comp < load->def.num_components); \ - return nir_const_value_as_##suffix(load->value[comp], \ - load->def.bit_size); \ -} \ - \ -static inline type \ -nir_src_as_##suffix(nir_src src) \ -{ \ - assert(nir_src_num_components(src) == 1); \ - return nir_src_comp_as_##suffix(src, 0); \ -} - -NIR_DEFINE_SRC_AS_CONST(int64_t, int) -NIR_DEFINE_SRC_AS_CONST(uint64_t, uint) -NIR_DEFINE_SRC_AS_CONST(bool, bool) -NIR_DEFINE_SRC_AS_CONST(double, float) - -#undef NIR_DEFINE_SRC_AS_CONST - - -typedef struct { - nir_ssa_def *def; - unsigned comp; -} nir_ssa_scalar; - -static inline bool -nir_ssa_scalar_is_const(nir_ssa_scalar s) -{ - return s.def->parent_instr->type == nir_instr_type_load_const; -} - -static inline bool -nir_ssa_scalar_is_undef(nir_ssa_scalar s) -{ - return s.def->parent_instr->type == nir_instr_type_ssa_undef; -} - -static inline nir_const_value -nir_ssa_scalar_as_const_value(nir_ssa_scalar s) -{ - assert(s.comp < s.def->num_components); - nir_load_const_instr *load = nir_instr_as_load_const(s.def->parent_instr); - return load->value[s.comp]; -} - -#define NIR_DEFINE_SCALAR_AS_CONST(type, suffix) \ -static inline type \ -nir_ssa_scalar_as_##suffix(nir_ssa_scalar s) \ -{ \ - return nir_const_value_as_##suffix( \ - nir_ssa_scalar_as_const_value(s), s.def->bit_size); \ -} - -NIR_DEFINE_SCALAR_AS_CONST(int64_t, int) -NIR_DEFINE_SCALAR_AS_CONST(uint64_t, uint) -NIR_DEFINE_SCALAR_AS_CONST(bool, bool) -NIR_DEFINE_SCALAR_AS_CONST(double, float) - -#undef NIR_DEFINE_SCALAR_AS_CONST - -static inline bool -nir_ssa_scalar_is_alu(nir_ssa_scalar s) -{ - return s.def->parent_instr->type == nir_instr_type_alu; -} - -static inline nir_op -nir_ssa_scalar_alu_op(nir_ssa_scalar s) -{ - return nir_instr_as_alu(s.def->parent_instr)->op; -} - -static inline nir_ssa_scalar -nir_ssa_scalar_chase_alu_src(nir_ssa_scalar s, unsigned alu_src_idx) -{ - nir_ssa_scalar out = { NULL, 0 }; - - nir_alu_instr *alu = nir_instr_as_alu(s.def->parent_instr); - assert(alu_src_idx < nir_op_infos[alu->op].num_inputs); - - /* Our component must be written */ - assert(s.comp < s.def->num_components); - assert(alu->dest.write_mask & (1u << s.comp)); - - assert(alu->src[alu_src_idx].src.is_ssa); - out.def = alu->src[alu_src_idx].src.ssa; - - if (nir_op_infos[alu->op].input_sizes[alu_src_idx] == 0) { - /* The ALU src is unsized so the source component follows the - * destination component. - */ - out.comp = alu->src[alu_src_idx].swizzle[s.comp]; - } else { - /* This is a sized source so all source components work together to - * produce all the destination components. Since we need to return a - * scalar, this only works if the source is a scalar. - */ - assert(nir_op_infos[alu->op].input_sizes[alu_src_idx] == 1); - out.comp = alu->src[alu_src_idx].swizzle[0]; - } - assert(out.comp < out.def->num_components); - - return out; -} - -nir_ssa_scalar nir_ssa_scalar_chase_movs(nir_ssa_scalar s); - -static inline nir_ssa_scalar -nir_get_ssa_scalar(nir_ssa_def *def, unsigned channel) -{ - nir_ssa_scalar s = { def, channel }; - return s; -} - -/** Returns a nir_ssa_scalar where we've followed the bit-exact mov/vec use chain to the original definition */ -static inline nir_ssa_scalar -nir_ssa_scalar_resolved(nir_ssa_def *def, unsigned channel) -{ - return nir_ssa_scalar_chase_movs(nir_get_ssa_scalar(def, channel)); -} - - -typedef struct { - bool success; - - nir_variable *var; - unsigned desc_set; - unsigned binding; - unsigned num_indices; - nir_src indices[4]; - bool read_first_invocation; -} nir_binding; - -nir_binding nir_chase_binding(nir_src rsrc); -nir_variable *nir_get_binding_variable(struct nir_shader *shader, nir_binding binding); - - -/* - * Control flow - * - * Control flow consists of a tree of control flow nodes, which include - * if-statements and loops. The leaves of the tree are basic blocks, lists of - * instructions that always run start-to-finish. Each basic block also keeps - * track of its successors (blocks which may run immediately after the current - * block) and predecessors (blocks which could have run immediately before the - * current block). Each function also has a start block and an end block which - * all return statements point to (which is always empty). Together, all the - * blocks with their predecessors and successors make up the control flow - * graph (CFG) of the function. There are helpers that modify the tree of - * control flow nodes while modifying the CFG appropriately; these should be - * used instead of modifying the tree directly. - */ - -typedef enum { - nir_cf_node_block, - nir_cf_node_if, - nir_cf_node_loop, - nir_cf_node_function -} nir_cf_node_type; - -typedef struct nir_cf_node { - struct exec_node node; - nir_cf_node_type type; - struct nir_cf_node *parent; -} nir_cf_node; - -typedef struct nir_block { - nir_cf_node cf_node; - - struct exec_list instr_list; /** < list of nir_instr */ - - /** generic block index; generated by nir_index_blocks */ - unsigned index; - - /* - * Each block can only have up to 2 successors, so we put them in a simple - * array - no need for anything more complicated. - */ - struct nir_block *successors[2]; - - /* Set of nir_block predecessors in the CFG */ - struct set *predecessors; - - /* - * this node's immediate dominator in the dominance tree - set to NULL for - * the start block. - */ - struct nir_block *imm_dom; - - /* This node's children in the dominance tree */ - unsigned num_dom_children; - struct nir_block **dom_children; - - /* Set of nir_blocks on the dominance frontier of this block */ - struct set *dom_frontier; - - /* - * These two indices have the property that dom_{pre,post}_index for each - * child of this block in the dominance tree will always be between - * dom_pre_index and dom_post_index for this block, which makes testing if - * a given block is dominated by another block an O(1) operation. - */ - uint32_t dom_pre_index, dom_post_index; - - /** - * Value just before the first nir_instr->index in the block, but after - * end_ip that of any predecessor block. - */ - uint32_t start_ip; - /** - * Value just after the last nir_instr->index in the block, but before the - * start_ip of any successor block. - */ - uint32_t end_ip; - - /* SSA def live in and out for this block; used for liveness analysis. - * Indexed by ssa_def->index - */ - BITSET_WORD *live_in; - BITSET_WORD *live_out; -} nir_block; - -static inline bool -nir_block_is_reachable(nir_block *b) -{ - /* See also nir_block_dominates */ - return b->dom_post_index != 0; -} - -static inline nir_instr * -nir_block_first_instr(nir_block *block) -{ - struct exec_node *head = exec_list_get_head(&block->instr_list); - return exec_node_data(nir_instr, head, node); -} - -static inline nir_instr * -nir_block_last_instr(nir_block *block) -{ - struct exec_node *tail = exec_list_get_tail(&block->instr_list); - return exec_node_data(nir_instr, tail, node); -} - -static inline bool -nir_block_ends_in_jump(nir_block *block) -{ - return !exec_list_is_empty(&block->instr_list) && - nir_block_last_instr(block)->type == nir_instr_type_jump; -} - -static inline bool -nir_block_ends_in_return_or_halt(nir_block *block) -{ - if (exec_list_is_empty(&block->instr_list)) - return false; - - nir_instr *instr = nir_block_last_instr(block); - if (instr->type != nir_instr_type_jump) - return false; - - nir_jump_instr *jump_instr = nir_instr_as_jump(instr); - return jump_instr->type == nir_jump_return || - jump_instr->type == nir_jump_halt; -} - -static inline bool -nir_block_ends_in_break(nir_block *block) -{ - if (exec_list_is_empty(&block->instr_list)) - return false; - - nir_instr *instr = nir_block_last_instr(block); - return instr->type == nir_instr_type_jump && - nir_instr_as_jump(instr)->type == nir_jump_break; -} - -#define nir_foreach_instr(instr, block) \ - foreach_list_typed(nir_instr, instr, node, &(block)->instr_list) -#define nir_foreach_instr_reverse(instr, block) \ - foreach_list_typed_reverse(nir_instr, instr, node, &(block)->instr_list) -#define nir_foreach_instr_safe(instr, block) \ - foreach_list_typed_safe(nir_instr, instr, node, &(block)->instr_list) -#define nir_foreach_instr_reverse_safe(instr, block) \ - foreach_list_typed_reverse_safe(nir_instr, instr, node, &(block)->instr_list) - -static inline nir_phi_instr * -nir_block_last_phi_instr(nir_block *block) -{ - nir_phi_instr *last_phi = NULL; - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_phi) - last_phi = nir_instr_as_phi(instr); - else - return last_phi; - } - return last_phi; -} - -typedef enum { - nir_selection_control_none = 0x0, - - /** - * Defined by SPIR-V spec 3.22 "Selection Control". - * The application prefers to remove control flow. - */ - nir_selection_control_flatten = 0x1, - - /** - * Defined by SPIR-V spec 3.22 "Selection Control". - * The application prefers to keep control flow. - */ - nir_selection_control_dont_flatten = 0x2, - - /** - * May be applied by the compiler stack when it knows - * that a branch is divergent, and: - * - either both the if and else are always taken - * - the if or else is empty and the other is always taken - */ - nir_selection_control_divergent_always_taken = 0x3, -} nir_selection_control; - -typedef struct nir_if { - nir_cf_node cf_node; - nir_src condition; - nir_selection_control control; - - struct exec_list then_list; /** < list of nir_cf_node */ - struct exec_list else_list; /** < list of nir_cf_node */ -} nir_if; - -typedef struct { - nir_if *nif; - - /** Instruction that generates nif::condition. */ - nir_instr *conditional_instr; - - /** Block within ::nif that has the break instruction. */ - nir_block *break_block; - - /** Last block for the then- or else-path that does not contain the break. */ - nir_block *continue_from_block; - - /** True when ::break_block is in the else-path of ::nif. */ - bool continue_from_then; - bool induction_rhs; - - /* This is true if the terminators exact trip count is unknown. For - * example: - * - * for (int i = 0; i < imin(x, 4); i++) - * ... - * - * Here loop analysis would have set a max_trip_count of 4 however we dont - * know for sure that this is the exact trip count. - */ - bool exact_trip_count_unknown; - - struct list_head loop_terminator_link; -} nir_loop_terminator; - -typedef struct { - /* Induction variable. */ - nir_ssa_def *def; - - /* Init statement with only uniform. */ - nir_src *init_src; - - /* Update statement with only uniform. */ - nir_alu_src *update_src; -} nir_loop_induction_variable; - -typedef struct { - /* Estimated cost (in number of instructions) of the loop */ - unsigned instr_cost; - - /* Contains fp64 ops that will be lowered */ - bool has_soft_fp64; - - /* Guessed trip count based on array indexing */ - unsigned guessed_trip_count; - - /* Maximum number of times the loop is run (if known) */ - unsigned max_trip_count; - - /* Do we know the exact number of times the loop will be run */ - bool exact_trip_count_known; - - /* Unroll the loop regardless of its size */ - bool force_unroll; - - /* Does the loop contain complex loop terminators, continues or other - * complex behaviours? If this is true we can't rely on - * loop_terminator_list to be complete or accurate. - */ - bool complex_loop; - - nir_loop_terminator *limiting_terminator; - - /* A list of loop_terminators terminating this loop. */ - struct list_head loop_terminator_list; - - /* array of induction variables for this loop */ - nir_loop_induction_variable *induction_vars; - unsigned num_induction_vars; -} nir_loop_info; - -typedef enum { - nir_loop_control_none = 0x0, - nir_loop_control_unroll = 0x1, - nir_loop_control_dont_unroll = 0x2, -} nir_loop_control; - -typedef struct { - nir_cf_node cf_node; - - struct exec_list body; /** < list of nir_cf_node */ - struct exec_list continue_list; /** < (optional) list of nir_cf_node */ - - nir_loop_info *info; - nir_loop_control control; - bool partially_unrolled; - bool divergent; -} nir_loop; - -/** - * Various bits of metadata that can may be created or required by - * optimization and analysis passes - */ -typedef enum { - nir_metadata_none = 0x0, - - /** Indicates that nir_block::index values are valid. - * - * The start block has index 0 and they increase through a natural walk of - * the CFG. nir_function_impl::num_blocks is the number of blocks and - * every block index is in the range [0, nir_function_impl::num_blocks]. - * - * A pass can preserve this metadata type if it doesn't touch the CFG. - */ - nir_metadata_block_index = 0x1, - - /** Indicates that block dominance information is valid - * - * This includes: - * - * - nir_block::num_dom_children - * - nir_block::dom_children - * - nir_block::dom_frontier - * - nir_block::dom_pre_index - * - nir_block::dom_post_index - * - * A pass can preserve this metadata type if it doesn't touch the CFG. - */ - nir_metadata_dominance = 0x2, - - /** Indicates that SSA def data-flow liveness information is valid - * - * This includes: - * - * - nir_block::live_in - * - nir_block::live_out - * - * A pass can preserve this metadata type if it never adds or removes any - * SSA defs or uses of SSA defs (most passes shouldn't preserve this - * metadata type). - */ - nir_metadata_live_ssa_defs = 0x4, - - /** A dummy metadata value to track when a pass forgot to call - * nir_metadata_preserve. - * - * A pass should always clear this value even if it doesn't make any - * progress to indicate that it thought about preserving metadata. - */ - nir_metadata_not_properly_reset = 0x8, - - /** Indicates that loop analysis information is valid. - * - * This includes everything pointed to by nir_loop::info. - * - * A pass can preserve this metadata type if it is guaranteed to not affect - * any loop metadata. However, since loop metadata includes things like - * loop counts which depend on arithmetic in the loop, this is very hard to - * determine. Most passes shouldn't preserve this metadata type. - */ - nir_metadata_loop_analysis = 0x10, - - /** Indicates that nir_instr::index values are valid. - * - * The start instruction has index 0 and they increase through a natural - * walk of instructions in blocks in the CFG. The indices my have holes - * after passes such as DCE. - * - * A pass can preserve this metadata type if it never adds or moves any - * instructions (most passes shouldn't preserve this metadata type), but - * can preserve it if it only removes instructions. - */ - nir_metadata_instr_index = 0x20, - - /** All metadata - * - * This includes all nir_metadata flags except not_properly_reset. Passes - * which do not change the shader in any way should call - * - * nir_metadata_preserve(impl, nir_metadata_all); - */ - nir_metadata_all = ~nir_metadata_not_properly_reset, -} nir_metadata; -MESA_DEFINE_CPP_ENUM_BITFIELD_OPERATORS(nir_metadata) - -typedef struct { - nir_cf_node cf_node; - - /** pointer to the function of which this is an implementation */ - struct nir_function *function; - - /** - * For entrypoints, a pointer to a nir_function_impl which runs before - * it, once per draw or dispatch, communicating via store_preamble and - * load_preamble intrinsics. If NULL then there is no preamble. - */ - struct nir_function *preamble; - - struct exec_list body; /** < list of nir_cf_node */ - - nir_block *end_block; - - /** list for all local variables in the function */ - struct exec_list locals; - - /** list of local registers in the function */ - struct exec_list registers; - - /** next available local register index */ - unsigned reg_alloc; - - /** next available SSA value index */ - unsigned ssa_alloc; - - /* total number of basic blocks, only valid when block_index_dirty = false */ - unsigned num_blocks; - - /** True if this nir_function_impl uses structured control-flow - * - * Structured nir_function_impls have different validation rules. - */ - bool structured; - - nir_metadata valid_metadata; -} nir_function_impl; - -#define nir_foreach_function_temp_variable(var, impl) \ - foreach_list_typed(nir_variable, var, node, &(impl)->locals) - -#define nir_foreach_function_temp_variable_safe(var, impl) \ - foreach_list_typed_safe(nir_variable, var, node, &(impl)->locals) - -ATTRIBUTE_RETURNS_NONNULL static inline nir_block * -nir_start_block(nir_function_impl *impl) -{ - return (nir_block *) impl->body.head_sentinel.next; -} - -ATTRIBUTE_RETURNS_NONNULL static inline nir_block * -nir_impl_last_block(nir_function_impl *impl) -{ - return (nir_block *) impl->body.tail_sentinel.prev; -} - -static inline nir_cf_node * -nir_cf_node_next(nir_cf_node *node) -{ - struct exec_node *next = exec_node_get_next(&node->node); - if (exec_node_is_tail_sentinel(next)) - return NULL; - else - return exec_node_data(nir_cf_node, next, node); -} - -static inline nir_cf_node * -nir_cf_node_prev(nir_cf_node *node) -{ - struct exec_node *prev = exec_node_get_prev(&node->node); - if (exec_node_is_head_sentinel(prev)) - return NULL; - else - return exec_node_data(nir_cf_node, prev, node); -} - -static inline bool -nir_cf_node_is_first(const nir_cf_node *node) -{ - return exec_node_is_head_sentinel(node->node.prev); -} - -static inline bool -nir_cf_node_is_last(const nir_cf_node *node) -{ - return exec_node_is_tail_sentinel(node->node.next); -} - -NIR_DEFINE_CAST(nir_cf_node_as_block, nir_cf_node, nir_block, cf_node, - type, nir_cf_node_block) -NIR_DEFINE_CAST(nir_cf_node_as_if, nir_cf_node, nir_if, cf_node, - type, nir_cf_node_if) -NIR_DEFINE_CAST(nir_cf_node_as_loop, nir_cf_node, nir_loop, cf_node, - type, nir_cf_node_loop) -NIR_DEFINE_CAST(nir_cf_node_as_function, nir_cf_node, - nir_function_impl, cf_node, type, nir_cf_node_function) - -static inline nir_block * -nir_if_first_then_block(nir_if *if_stmt) -{ - struct exec_node *head = exec_list_get_head(&if_stmt->then_list); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, head, node)); -} - -static inline nir_block * -nir_if_last_then_block(nir_if *if_stmt) -{ - struct exec_node *tail = exec_list_get_tail(&if_stmt->then_list); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, tail, node)); -} - -static inline nir_block * -nir_if_first_else_block(nir_if *if_stmt) -{ - struct exec_node *head = exec_list_get_head(&if_stmt->else_list); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, head, node)); -} - -static inline nir_block * -nir_if_last_else_block(nir_if *if_stmt) -{ - struct exec_node *tail = exec_list_get_tail(&if_stmt->else_list); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, tail, node)); -} - -static inline nir_block * -nir_loop_first_block(nir_loop *loop) -{ - struct exec_node *head = exec_list_get_head(&loop->body); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, head, node)); -} - -static inline nir_block * -nir_loop_last_block(nir_loop *loop) -{ - struct exec_node *tail = exec_list_get_tail(&loop->body); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, tail, node)); -} - -static inline bool -nir_loop_has_continue_construct(const nir_loop *loop) -{ - return !exec_list_is_empty(&loop->continue_list); -} - -static inline nir_block * -nir_loop_first_continue_block(nir_loop *loop) -{ - assert(nir_loop_has_continue_construct(loop)); - struct exec_node *head = exec_list_get_head(&loop->continue_list); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, head, node)); -} - -static inline nir_block * -nir_loop_last_continue_block(nir_loop *loop) -{ - assert(nir_loop_has_continue_construct(loop)); - struct exec_node *tail = exec_list_get_tail(&loop->continue_list); - return nir_cf_node_as_block(exec_node_data(nir_cf_node, tail, node)); -} - -/** - * Return the target block of a nir_jump_continue statement - */ -static inline nir_block * -nir_loop_continue_target(nir_loop *loop) -{ - if (nir_loop_has_continue_construct(loop)) - return nir_loop_first_continue_block(loop); - else - return nir_loop_first_block(loop); -} - -/** - * Return true if this list of cf_nodes contains a single empty block. - */ -static inline bool -nir_cf_list_is_empty_block(struct exec_list *cf_list) -{ - if (exec_list_is_singular(cf_list)) { - struct exec_node *head = exec_list_get_head(cf_list); - nir_block *block = - nir_cf_node_as_block(exec_node_data(nir_cf_node, head, node)); - return exec_list_is_empty(&block->instr_list); - } - return false; -} - -typedef struct { - uint8_t num_components; - uint8_t bit_size; -} nir_parameter; - -typedef struct nir_function { - struct exec_node node; - - const char *name; - struct nir_shader *shader; - - unsigned num_params; - nir_parameter *params; - - /** The implementation of this function. - * - * If the function is only declared and not implemented, this is NULL. - */ - nir_function_impl *impl; - - bool is_entrypoint; - bool is_preamble; -} nir_function; - -typedef enum { - nir_lower_imul64 = (1 << 0), - nir_lower_isign64 = (1 << 1), - /** Lower all int64 modulus and division opcodes */ - nir_lower_divmod64 = (1 << 2), - /** Lower all 64-bit umul_high and imul_high opcodes */ - nir_lower_imul_high64 = (1 << 3), - nir_lower_mov64 = (1 << 4), - nir_lower_icmp64 = (1 << 5), - nir_lower_iadd64 = (1 << 6), - nir_lower_iabs64 = (1 << 7), - nir_lower_ineg64 = (1 << 8), - nir_lower_logic64 = (1 << 9), - nir_lower_minmax64 = (1 << 10), - nir_lower_shift64 = (1 << 11), - nir_lower_imul_2x32_64 = (1 << 12), - nir_lower_extract64 = (1 << 13), - nir_lower_ufind_msb64 = (1 << 14), - nir_lower_bit_count64 = (1 << 15), - nir_lower_subgroup_shuffle64 = (1 << 16), - nir_lower_scan_reduce_bitwise64 = (1 << 17), - nir_lower_scan_reduce_iadd64 = (1 << 18), - nir_lower_vote_ieq64 = (1 << 19), - nir_lower_usub_sat64 = (1 << 20), - nir_lower_iadd_sat64 = (1 << 21), - nir_lower_find_lsb64 = (1 << 22), -} nir_lower_int64_options; - -typedef enum { - nir_lower_drcp = (1 << 0), - nir_lower_dsqrt = (1 << 1), - nir_lower_drsq = (1 << 2), - nir_lower_dtrunc = (1 << 3), - nir_lower_dfloor = (1 << 4), - nir_lower_dceil = (1 << 5), - nir_lower_dfract = (1 << 6), - nir_lower_dround_even = (1 << 7), - nir_lower_dmod = (1 << 8), - nir_lower_dsub = (1 << 9), - nir_lower_ddiv = (1 << 10), - nir_lower_fp64_full_software = (1 << 11), -} nir_lower_doubles_options; - -typedef enum { - nir_divergence_single_prim_per_subgroup = (1 << 0), - nir_divergence_single_patch_per_tcs_subgroup = (1 << 1), - nir_divergence_single_patch_per_tes_subgroup = (1 << 2), - nir_divergence_view_index_uniform = (1 << 3), - nir_divergence_single_frag_shading_rate_per_subgroup = (1 << 4), - nir_divergence_multiple_workgroup_per_compute_subgroup = (1 << 5), - nir_divergence_shader_record_ptr_uniform = (1 << 6), -} nir_divergence_options; - -typedef enum { - nir_pack_varying_interp_mode_none = (1 << 0), - nir_pack_varying_interp_mode_smooth = (1 << 1), - nir_pack_varying_interp_mode_flat = (1 << 2), - nir_pack_varying_interp_mode_noperspective = (1 << 3), - nir_pack_varying_interp_loc_sample = (1 << 16), - nir_pack_varying_interp_loc_centroid = (1 << 17), - nir_pack_varying_interp_loc_center = (1 << 18), -} nir_pack_varying_options; - -/** An instruction filtering callback - * - * Returns true if the instruction should be processed and false otherwise. - */ -typedef bool (*nir_instr_filter_cb)(const nir_instr *, const void *); - -/** A vectorization width callback - * - * Returns the maximum vectorization width per instruction. - * 0, if the instruction must not be modified. - * - * The vectorization width must be a power of 2. - */ -typedef uint8_t (*nir_vectorize_cb)(const nir_instr *, const void *); - -typedef struct nir_shader_compiler_options { - bool lower_fdiv; - bool lower_ffma16; - bool lower_ffma32; - bool lower_ffma64; - bool fuse_ffma16; - bool fuse_ffma32; - bool fuse_ffma64; - bool lower_flrp16; - bool lower_flrp32; - /** Lowers flrp when it does not support doubles */ - bool lower_flrp64; - bool lower_fpow; - bool lower_fsat; - bool lower_fsqrt; - bool lower_sincos; - bool lower_fmod; - /** Lowers ibitfield_extract/ubitfield_extract to ibfe/ubfe. */ - bool lower_bitfield_extract; - /** Lowers ibitfield_extract/ubitfield_extract to compares, shifts. */ - bool lower_bitfield_extract_to_shifts; - /** Lowers bitfield_insert to bfi/bfm */ - bool lower_bitfield_insert; - /** Lowers bitfield_insert to compares, and shifts. */ - bool lower_bitfield_insert_to_shifts; - /** Lowers bitfield_insert to bfm/bitfield_select. */ - bool lower_bitfield_insert_to_bitfield_select; - /** Lowers bitfield_reverse to shifts. */ - bool lower_bitfield_reverse; - /** Lowers bit_count to shifts. */ - bool lower_bit_count; - /** Lowers ifind_msb to compare and ufind_msb */ - bool lower_ifind_msb; - /** Lowers ifind_msb and ufind_msb to reverse variants */ - bool lower_find_msb_to_reverse; - /** Lowers ifind_msb to uclz and logic ops*/ - bool lower_ifind_msb_to_uclz; - /** Lowers ufind_msb to 31-uclz */ - bool lower_ufind_msb_to_uclz; - /** Lowers find_lsb to ufind_msb and logic ops */ - bool lower_find_lsb; - bool lower_uadd_carry; - bool lower_usub_borrow; - /** Lowers imul_high/umul_high to 16-bit multiplies and carry operations. */ - bool lower_mul_high; - /** lowers fneg to fmul(x, -1.0). Driver must call nir_opt_algebraic_late() */ - bool lower_fneg; - /** lowers ineg to isub. Driver must call nir_opt_algebraic_late(). */ - bool lower_ineg; - /** lowers fisnormal to alu ops. */ - bool lower_fisnormal; - - /* lower {slt,sge,seq,sne} to {flt,fge,feq,fneu} + b2f: */ - bool lower_scmp; - - /* lower b/fall_equalN/b/fany_nequalN (ex:fany_nequal4 to sne+fdot4+fsat) */ - bool lower_vector_cmp; - - /** enable rules to avoid bit ops */ - bool lower_bitops; - - /** enables rules to lower isign to imin+imax */ - bool lower_isign; - - /** enables rules to lower fsign to fsub and flt */ - bool lower_fsign; - - /** enables rules to lower iabs to ineg+imax */ - bool lower_iabs; - - /** enable rules that avoid generating umax from signed integer ops */ - bool lower_umax; - - /** enable rules that avoid generating umin from signed integer ops */ - bool lower_umin; - - /* lower fdph to fdot4 */ - bool lower_fdph; - - /** lower fdot to fmul and fsum/fadd. */ - bool lower_fdot; - - /* Does the native fdot instruction replicate its result for four - * components? If so, then opt_algebraic_late will turn all fdotN - * instructions into fdotN_replicated instructions. - */ - bool fdot_replicates; - - /** lowers ffloor to fsub+ffract: */ - bool lower_ffloor; - - /** lowers ffract to fsub+ffloor: */ - bool lower_ffract; - - /** lowers fceil to fneg+ffloor+fneg: */ - bool lower_fceil; - - bool lower_ftrunc; - - /** Lowers fround_even to ffract+feq+csel. - * - * Not correct in that it doesn't correctly handle the "_even" part of the - * rounding, but good enough for DX9 array indexing handling on DX9-class - * hardware. - */ - bool lower_fround_even; - - bool lower_ldexp; - - bool lower_pack_half_2x16; - bool lower_pack_unorm_2x16; - bool lower_pack_snorm_2x16; - bool lower_pack_unorm_4x8; - bool lower_pack_snorm_4x8; - bool lower_pack_64_2x32; - bool lower_pack_64_4x16; - bool lower_pack_32_2x16; - bool lower_pack_64_2x32_split; - bool lower_pack_32_2x16_split; - bool lower_unpack_half_2x16; - bool lower_unpack_unorm_2x16; - bool lower_unpack_snorm_2x16; - bool lower_unpack_unorm_4x8; - bool lower_unpack_snorm_4x8; - bool lower_unpack_64_2x32_split; - bool lower_unpack_32_2x16_split; - - bool lower_pack_split; - - bool lower_extract_byte; - bool lower_extract_word; - bool lower_insert_byte; - bool lower_insert_word; - - bool lower_all_io_to_temps; - bool lower_all_io_to_elements; - - /* Indicates that the driver only has zero-based vertex id */ - bool vertex_id_zero_based; - - /** - * If enabled, gl_BaseVertex will be lowered as: - * is_indexed_draw (~0/0) & firstvertex - */ - bool lower_base_vertex; - - /** - * If enabled, gl_HelperInvocation will be lowered as: - * - * !((1 << sample_id) & sample_mask_in)) - * - * This depends on some possibly hw implementation details, which may - * not be true for all hw. In particular that the FS is only executed - * for covered samples or for helper invocations. So, do not blindly - * enable this option. - * - * Note: See also issue #22 in ARB_shader_image_load_store - */ - bool lower_helper_invocation; - - /** - * Convert gl_SampleMaskIn to gl_HelperInvocation as follows: - * - * gl_SampleMaskIn == 0 ---> gl_HelperInvocation - * gl_SampleMaskIn != 0 ---> !gl_HelperInvocation - */ - bool optimize_sample_mask_in; - - bool lower_cs_local_index_to_id; - bool lower_cs_local_id_to_index; - - /* Prevents lowering global_invocation_id to be in terms of workgroup_id */ - bool has_cs_global_id; - - bool lower_device_index_to_zero; - - /* Set if nir_lower_pntc_ytransform() should invert gl_PointCoord. - * Either when frame buffer is flipped or GL_POINT_SPRITE_COORD_ORIGIN - * is GL_LOWER_LEFT. - */ - bool lower_wpos_pntc; - - /** - * Set if nir_op_[iu]hadd and nir_op_[iu]rhadd instructions should be - * lowered to simple arithmetic. - * - * If this flag is set, the lowering will be applied to all bit-sizes of - * these instructions. - * - * \sa ::lower_hadd64 - */ - bool lower_hadd; - - /** - * Set if only 64-bit nir_op_[iu]hadd and nir_op_[iu]rhadd instructions - * should be lowered to simple arithmetic. - * - * If this flag is set, the lowering will be applied to only 64-bit - * versions of these instructions. - * - * \sa ::lower_hadd - */ - bool lower_hadd64; - - /** - * Set if nir_op_uadd_sat should be lowered to simple arithmetic. - * - * If this flag is set, the lowering will be applied to all bit-sizes of - * these instructions. - */ - bool lower_uadd_sat; - - /** - * Set if nir_op_usub_sat should be lowered to simple arithmetic. - * - * If this flag is set, the lowering will be applied to all bit-sizes of - * these instructions. - */ - bool lower_usub_sat; - - /** - * Set if nir_op_iadd_sat and nir_op_isub_sat should be lowered to simple - * arithmetic. - * - * If this flag is set, the lowering will be applied to all bit-sizes of - * these instructions. - */ - bool lower_iadd_sat; - - /** - * Set if imul_32x16 and umul_32x16 should be lowered to simple - * arithmetic. - */ - bool lower_mul_32x16; - - /** - * Set if uclz should be lowered to find_msb_rev. - */ - bool lower_uclz; - - /** - * Should IO be re-vectorized? Some scalar ISAs still operate on vec4's - * for IO purposes and would prefer loads/stores be vectorized. - */ - bool vectorize_io; - bool vectorize_tess_levels; - bool lower_to_scalar; - nir_instr_filter_cb lower_to_scalar_filter; - - /** - * Disables potentially harmful algebraic transformations for architectures - * with SIMD-within-a-register semantics. - * - * Note, to actually vectorize 16bit instructions, use nir_opt_vectorize() - * with a suitable callback function. - */ - bool vectorize_vec2_16bit; - - /** - * Should the linker unify inputs_read/outputs_written between adjacent - * shader stages which are linked into a single program? - */ - bool unify_interfaces; - - /** - * Should nir_lower_io() create load_interpolated_input intrinsics? - * - * If not, it generates regular load_input intrinsics and interpolation - * information must be inferred from the list of input nir_variables. - */ - bool use_interpolated_input_intrinsics; - - - /** - * Whether nir_lower_io() will lower interpolateAt functions to - * load_interpolated_input intrinsics. - * - * Unlike use_interpolated_input_intrinsics this will only lower these - * functions and leave input load intrinsics untouched. - */ - bool lower_interpolate_at; - - /* Lowers when 32x32->64 bit multiplication is not supported */ - bool lower_mul_2x32_64; - - /* Lowers when rotate instruction is not supported */ - bool lower_rotate; - - /** Backend supports ternary addition */ - bool has_iadd3; - - /** - * Backend supports imul24, and would like to use it (when possible) - * for address/offset calculation. If true, driver should call - * nir_lower_amul(). (If not set, amul will automatically be lowered - * to imul.) - */ - bool has_imul24; - - /** Backend supports umul24, if not set umul24 will automatically be lowered - * to imul with masked inputs */ - bool has_umul24; - - /** Backend supports umad24, if not set umad24 will automatically be lowered - * to imul with masked inputs and iadd */ - bool has_umad24; - - /* Backend supports fused comapre against zero and csel */ - bool has_fused_comp_and_csel; - - /** Backend supports fsub, if not set fsub will automatically be lowered to - * fadd(x, fneg(y)). If true, driver should call nir_opt_algebraic_late(). */ - bool has_fsub; - - /** Backend supports isub, if not set isub will automatically be lowered to - * iadd(x, ineg(y)). If true, driver should call nir_opt_algebraic_late(). */ - bool has_isub; - - /** Backend supports pack_32_4x8 or pack_32_4x8_split. */ - bool has_pack_32_4x8; - - /** Backend supports txs, if not nir_lower_tex(..) uses txs-free variants - * for rect texture lowering. */ - bool has_txs; - - /** Backend supports sdot_4x8 opcodes. */ - bool has_sdot_4x8; - - /** Backend supports udot_4x8 opcodes. */ - bool has_udot_4x8; - - /** Backend supports sudot_4x8 opcodes. */ - bool has_sudot_4x8; - - /** Backend supports sdot_2x16 and udot_2x16 opcodes. */ - bool has_dot_2x16; - - /* Whether to generate only scoped_barrier intrinsics instead of the set of - * memory and control barrier intrinsics based on GLSL. - */ - bool use_scoped_barrier; - - /** Backend supports fmulz (and ffmaz if lower_ffma32=false) */ - bool has_fmulz; - - /** Backend supports 32bit ufind_msb_rev and ifind_msb_rev. */ - bool has_find_msb_rev; - - /** Backend supports pack_half_2x16_rtz_split. */ - bool has_pack_half_2x16_rtz; - - /** - * Is this the Intel vec4 backend? - * - * Used to inhibit algebraic optimizations that are known to be harmful on - * the Intel vec4 backend. This is generally applicable to any - * optimization that might cause more immediate values to be used in - * 3-source (e.g., ffma and flrp) instructions. - */ - bool intel_vec4; - - /** - * For most Intel GPUs, all ternary operations such as FMA and BFE cannot - * have immediates, so two to three instructions may eventually be needed. - */ - bool avoid_ternary_with_two_constants; - - /** Whether 8-bit ALU is supported. */ - bool support_8bit_alu; - - /** Whether 16-bit ALU is supported. */ - bool support_16bit_alu; - - unsigned max_unroll_iterations; - unsigned max_unroll_iterations_aggressive; - unsigned max_unroll_iterations_fp64; - - bool lower_uniforms_to_ubo; - - /* If the precision is ignored, backends that don't handle - * different precisions when passing data between stages and use - * vectorized IO can pack more varyings when linking. */ - bool linker_ignore_precision; - - /* Specifies if indirect sampler array access will trigger forced loop - * unrolling. - */ - bool force_indirect_unrolling_sampler; - - /* Some older drivers don't support GLSL versions with the concept of flat - * varyings and also don't support integers. This setting helps us avoid - * marking varyings as flat and potentially having them changed to ints via - * varying packing. - */ - bool no_integers; - - /** - * Specifies which type of indirectly accessed variables should force - * loop unrolling. - */ - nir_variable_mode force_indirect_unrolling; - - nir_lower_int64_options lower_int64_options; - nir_lower_doubles_options lower_doubles_options; - nir_divergence_options divergence_analysis_options; - - /** - * Support pack varyings with different interpolation location - * (center, centroid, sample) and mode (flat, noperspective, smooth) - * into same slot. - */ - nir_pack_varying_options pack_varying_options; - - /** - * Lower load_deref/store_deref of inputs and outputs into - * load_input/store_input intrinsics. This is used by nir_lower_io_passes. - */ - bool lower_io_variables; - - /** - * Lower color inputs to load_colorN that are kind of like system values - * if lower_io_variables is also set. shader_info will contain - * the interpolation settings. This is used by nir_lower_io_passes. - */ - bool lower_fs_color_inputs; - - /** - * The masks of shader stages that support indirect indexing with - * load_input and store_output intrinsics. It's used when - * lower_io_variables is true. This is used by nir_lower_io_passes. - */ - uint8_t support_indirect_inputs; - uint8_t support_indirect_outputs; - - /** - * Remove varying loaded from uniform, let fragment shader load the - * uniform directly. GPU passing varying by memory can benifit from it - * for sure; but GPU passing varying by on chip resource may not. - * Because it saves on chip resource but may increase memory pressure when - * fragment task is far more than vertex one, so better left it disabled. - */ - bool lower_varying_from_uniform; - - /** store the variable offset into the instrinsic range_base instead - * of adding it to the image index. - */ - bool lower_image_offset_to_range_base; - - /** store the variable offset into the instrinsic range_base instead - * of adding it to the atomic source - */ - bool lower_atomic_offset_to_range_base; -} nir_shader_compiler_options; - -typedef struct nir_shader { - gc_ctx *gctx; - - /** list of uniforms (nir_variable) */ - struct exec_list variables; - - /** Set of driver-specific options for the shader. - * - * The memory for the options is expected to be kept in a single static - * copy by the driver. - */ - const struct nir_shader_compiler_options *options; - - /** Various bits of compile-time information about a given shader */ - struct shader_info info; - - struct exec_list functions; /** < list of nir_function */ - - /** - * The size of the variable space for load_input_*, load_uniform_*, etc. - * intrinsics. This is in back-end specific units which is likely one of - * bytes, dwords, or vec4s depending on context and back-end. - */ - unsigned num_inputs, num_uniforms, num_outputs; - - /** Size in bytes of required implicitly bound global memory */ - unsigned global_mem_size; - - /** Size in bytes of required scratch space */ - unsigned scratch_size; - - /** Constant data associated with this shader. - * - * Constant data is loaded through load_constant intrinsics (as compared to - * the NIR load_const instructions which have the constant value inlined - * into them). This is usually generated by nir_opt_large_constants (so - * shaders don't have to load_const into a temporary array when they want - * to indirect on a const array). - */ - void *constant_data; - /** Size of the constant data associated with the shader, in bytes */ - unsigned constant_data_size; - - struct nir_xfb_info *xfb_info; - - unsigned printf_info_count; - u_printf_info *printf_info; -} nir_shader; - -#define nir_foreach_function(func, shader) \ - foreach_list_typed(nir_function, func, node, &(shader)->functions) - -static inline nir_function * -nir_first_function_with_impl(const nir_shader *shader) -{ - foreach_list_typed(nir_function, func, node, &shader->functions) { - if (func->impl != NULL) - return func; - } - - return NULL; -} - -static inline nir_function_impl * -_nir_foreach_function_impl_next(const nir_function **it) -{ - foreach_list_typed_from(nir_function, func, node, _, (*it)->node.next) { - if (func->impl != NULL) { - *it = func; - return func->impl; - } - } - - return NULL; -} - -/* Equivalent to - * - * nir_foreach_function(func, shader) { - * if (func->impl != NULL) { - * ... - * } - * } - * - * Carefully written to ensure break/continue work in the user code. - */ - -#define nir_foreach_function_impl(it, shader) \ - for (const nir_function *_func_##it = nir_first_function_with_impl(shader); \ - _func_##it != NULL; \ - _func_##it = NULL) \ - \ - for (nir_function_impl *it = (_func_##it)->impl; \ - it != NULL; \ - it = _nir_foreach_function_impl_next(&_func_##it)) \ - -static inline nir_function_impl * -nir_shader_get_entrypoint(const nir_shader *shader) -{ - nir_function *func = NULL; - - nir_foreach_function(function, shader) { - assert(func == NULL); - if (function->is_entrypoint) { - func = function; -#ifndef NDEBUG - break; -#endif - } - } - - if (!func) - return NULL; - - assert(func->num_params == 0); - assert(func->impl); - return func->impl; -} - -static inline nir_function * -nir_shader_get_function_for_name(const nir_shader *shader, const char *name) -{ - nir_foreach_function(func, shader) { - if (strcmp(func->name, name) == 0) - return func; - } - - return NULL; -} - -void nir_remove_non_entrypoints(nir_shader *shader); - -nir_shader *nir_shader_create(void *mem_ctx, - gl_shader_stage stage, - const nir_shader_compiler_options *options, - shader_info *si); - -nir_register *nir_local_reg_create(nir_function_impl *impl); - -void nir_reg_remove(nir_register *reg); - -/** Adds a variable to the appropriate list in nir_shader */ -void nir_shader_add_variable(nir_shader *shader, nir_variable *var); - -static inline void -nir_function_impl_add_variable(nir_function_impl *impl, nir_variable *var) -{ - assert(var->data.mode == nir_var_function_temp); - exec_list_push_tail(&impl->locals, &var->node); -} - -/** creates a variable, sets a few defaults, and adds it to the list */ -nir_variable *nir_variable_create(nir_shader *shader, - nir_variable_mode mode, - const struct glsl_type *type, - const char *name); -/** creates a local variable and adds it to the list */ -nir_variable *nir_local_variable_create(nir_function_impl *impl, - const struct glsl_type *type, - const char *name); - -nir_variable *nir_find_variable_with_location(nir_shader *shader, - nir_variable_mode mode, - unsigned location); - -nir_variable *nir_find_variable_with_driver_location(nir_shader *shader, - nir_variable_mode mode, - unsigned location); - -void nir_sort_variables_with_modes(nir_shader *shader, - int (*compar)(const nir_variable *, - const nir_variable *), - nir_variable_mode modes); - -/** creates a function and adds it to the shader's list of functions */ -nir_function *nir_function_create(nir_shader *shader, const char *name); - -nir_function_impl *nir_function_impl_create(nir_function *func); -/** creates a function_impl that isn't tied to any particular function */ -nir_function_impl *nir_function_impl_create_bare(nir_shader *shader); - -nir_block *nir_block_create(nir_shader *shader); -nir_if *nir_if_create(nir_shader *shader); -nir_loop *nir_loop_create(nir_shader *shader); - -nir_function_impl *nir_cf_node_get_function(nir_cf_node *node); - -/** requests that the given pieces of metadata be generated */ -void nir_metadata_require(nir_function_impl *impl, nir_metadata required, ...); -/** dirties all but the preserved metadata */ -void nir_metadata_preserve(nir_function_impl *impl, nir_metadata preserved); -/** Preserves all metadata for the given shader */ -void nir_shader_preserve_all_metadata(nir_shader *shader); - -/** creates an instruction with default swizzle/writemask/etc. with NULL registers */ -nir_alu_instr *nir_alu_instr_create(nir_shader *shader, nir_op op); - -nir_deref_instr *nir_deref_instr_create(nir_shader *shader, - nir_deref_type deref_type); - -nir_jump_instr *nir_jump_instr_create(nir_shader *shader, nir_jump_type type); - -nir_load_const_instr *nir_load_const_instr_create(nir_shader *shader, - unsigned num_components, - unsigned bit_size); - -nir_intrinsic_instr *nir_intrinsic_instr_create(nir_shader *shader, - nir_intrinsic_op op); - -nir_call_instr *nir_call_instr_create(nir_shader *shader, - nir_function *callee); - -/** Creates a NIR texture instruction */ -nir_tex_instr *nir_tex_instr_create(nir_shader *shader, unsigned num_srcs); - -nir_phi_instr *nir_phi_instr_create(nir_shader *shader); -nir_phi_src *nir_phi_instr_add_src(nir_phi_instr *instr, nir_block *pred, nir_src src); - -nir_parallel_copy_instr *nir_parallel_copy_instr_create(nir_shader *shader); - -nir_ssa_undef_instr *nir_ssa_undef_instr_create(nir_shader *shader, - unsigned num_components, - unsigned bit_size); - -nir_const_value nir_alu_binop_identity(nir_op binop, unsigned bit_size); - -/** - * NIR Cursors and Instruction Insertion API - * @{ - * - * A tiny struct representing a point to insert/extract instructions or - * control flow nodes. Helps reduce the combinatorial explosion of possible - * points to insert/extract. - * - * \sa nir_control_flow.h - */ -typedef enum { - nir_cursor_before_block, - nir_cursor_after_block, - nir_cursor_before_instr, - nir_cursor_after_instr, -} nir_cursor_option; - -typedef struct { - nir_cursor_option option; - union { - nir_block *block; - nir_instr *instr; - }; -} nir_cursor; - -static inline nir_block * -nir_cursor_current_block(nir_cursor cursor) -{ - if (cursor.option == nir_cursor_before_instr || - cursor.option == nir_cursor_after_instr) { - return cursor.instr->block; - } else { - return cursor.block; - } -} - -bool nir_cursors_equal(nir_cursor a, nir_cursor b); - -static inline nir_cursor -nir_before_block(nir_block *block) -{ - nir_cursor cursor; - cursor.option = nir_cursor_before_block; - cursor.block = block; - return cursor; -} - -static inline nir_cursor -nir_after_block(nir_block *block) -{ - nir_cursor cursor; - cursor.option = nir_cursor_after_block; - cursor.block = block; - return cursor; -} - -static inline nir_cursor -nir_before_instr(nir_instr *instr) -{ - nir_cursor cursor; - cursor.option = nir_cursor_before_instr; - cursor.instr = instr; - return cursor; -} - -static inline nir_cursor -nir_after_instr(nir_instr *instr) -{ - nir_cursor cursor; - cursor.option = nir_cursor_after_instr; - cursor.instr = instr; - return cursor; -} - -static inline nir_cursor -nir_before_block_after_phis(nir_block *block) -{ - nir_phi_instr *last_phi = nir_block_last_phi_instr(block); - if (last_phi) - return nir_after_instr(&last_phi->instr); - else - return nir_before_block(block); -} - -static inline nir_cursor -nir_after_block_before_jump(nir_block *block) -{ - nir_instr *last_instr = nir_block_last_instr(block); - if (last_instr && last_instr->type == nir_instr_type_jump) { - return nir_before_instr(last_instr); - } else { - return nir_after_block(block); - } -} - -static inline nir_cursor -nir_before_src(nir_src *src) -{ - if (src->is_if) { - nir_block *prev_block = - nir_cf_node_as_block(nir_cf_node_prev(&src->parent_if->cf_node)); - return nir_after_block(prev_block); - } else if (src->parent_instr->type == nir_instr_type_phi) { -#ifndef NDEBUG - nir_phi_instr *cond_phi = nir_instr_as_phi(src->parent_instr); - bool found = false; - nir_foreach_phi_src(phi_src, cond_phi) { - if (phi_src->src.ssa == src->ssa) { - found = true; - break; - } - } - assert(found); -#endif - /* The list_entry() macro is a generic container-of macro, it just happens - * to have a more specific name. - */ - nir_phi_src *phi_src = list_entry(src, nir_phi_src, src); - return nir_after_block_before_jump(phi_src->pred); - } else { - return nir_before_instr(src->parent_instr); - } -} - -static inline nir_cursor -nir_before_cf_node(nir_cf_node *node) -{ - if (node->type == nir_cf_node_block) - return nir_before_block(nir_cf_node_as_block(node)); - - return nir_after_block(nir_cf_node_as_block(nir_cf_node_prev(node))); -} - -static inline nir_cursor -nir_after_cf_node(nir_cf_node *node) -{ - if (node->type == nir_cf_node_block) - return nir_after_block(nir_cf_node_as_block(node)); - - return nir_before_block(nir_cf_node_as_block(nir_cf_node_next(node))); -} - -static inline nir_cursor -nir_after_phis(nir_block *block) -{ - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_phi) - return nir_before_instr(instr); - } - return nir_after_block(block); -} - -static inline nir_cursor -nir_after_instr_and_phis(nir_instr *instr) -{ - if (instr->type == nir_instr_type_phi) - return nir_after_phis(instr->block); - else - return nir_after_instr(instr); -} - -static inline nir_cursor -nir_after_cf_node_and_phis(nir_cf_node *node) -{ - if (node->type == nir_cf_node_block) - return nir_after_block(nir_cf_node_as_block(node)); - - nir_block *block = nir_cf_node_as_block(nir_cf_node_next(node)); - - return nir_after_phis(block); -} - -static inline nir_cursor -nir_before_cf_list(struct exec_list *cf_list) -{ - nir_cf_node *first_node = exec_node_data(nir_cf_node, - exec_list_get_head(cf_list), node); - return nir_before_cf_node(first_node); -} - -static inline nir_cursor -nir_after_cf_list(struct exec_list *cf_list) -{ - nir_cf_node *last_node = exec_node_data(nir_cf_node, - exec_list_get_tail(cf_list), node); - return nir_after_cf_node(last_node); -} - -/** - * Insert a NIR instruction at the given cursor. - * - * Note: This does not update the cursor. - */ -void nir_instr_insert(nir_cursor cursor, nir_instr *instr); - -bool nir_instr_move(nir_cursor cursor, nir_instr *instr); - -static inline void -nir_instr_insert_before(nir_instr *instr, nir_instr *before) -{ - nir_instr_insert(nir_before_instr(instr), before); -} - -static inline void -nir_instr_insert_after(nir_instr *instr, nir_instr *after) -{ - nir_instr_insert(nir_after_instr(instr), after); -} - -static inline void -nir_instr_insert_before_block(nir_block *block, nir_instr *before) -{ - nir_instr_insert(nir_before_block(block), before); -} - -static inline void -nir_instr_insert_after_block(nir_block *block, nir_instr *after) -{ - nir_instr_insert(nir_after_block(block), after); -} - -static inline void -nir_instr_insert_before_cf(nir_cf_node *node, nir_instr *before) -{ - nir_instr_insert(nir_before_cf_node(node), before); -} - -static inline void -nir_instr_insert_after_cf(nir_cf_node *node, nir_instr *after) -{ - nir_instr_insert(nir_after_cf_node(node), after); -} - -static inline void -nir_instr_insert_before_cf_list(struct exec_list *list, nir_instr *before) -{ - nir_instr_insert(nir_before_cf_list(list), before); -} - -static inline void -nir_instr_insert_after_cf_list(struct exec_list *list, nir_instr *after) -{ - nir_instr_insert(nir_after_cf_list(list), after); -} - -void nir_instr_remove_v(nir_instr *instr); -void nir_instr_free(nir_instr *instr); -void nir_instr_free_list(struct exec_list *list); - -static inline nir_cursor -nir_instr_remove(nir_instr *instr) -{ - nir_cursor cursor; - nir_instr *prev = nir_instr_prev(instr); - if (prev) { - cursor = nir_after_instr(prev); - } else { - cursor = nir_before_block(instr->block); - } - nir_instr_remove_v(instr); - return cursor; -} - -nir_cursor nir_instr_free_and_dce(nir_instr *instr); - -/** @} */ - -nir_ssa_def *nir_instr_ssa_def(nir_instr *instr); -bool nir_instr_def_is_register(nir_instr *instr); - -typedef bool (*nir_foreach_ssa_def_cb)(nir_ssa_def *def, void *state); -typedef bool (*nir_foreach_dest_cb)(nir_dest *dest, void *state); -typedef bool (*nir_foreach_src_cb)(nir_src *src, void *state); -bool nir_foreach_ssa_def(nir_instr *instr, nir_foreach_ssa_def_cb cb, - void *state); -static inline bool nir_foreach_dest(nir_instr *instr, nir_foreach_dest_cb cb, void *state); -static inline bool nir_foreach_src(nir_instr *instr, nir_foreach_src_cb cb, void *state); -bool nir_foreach_phi_src_leaving_block(nir_block *instr, - nir_foreach_src_cb cb, - void *state); - -nir_const_value *nir_src_as_const_value(nir_src src); - -#define NIR_SRC_AS_(name, c_type, type_enum, cast_macro) \ -static inline c_type * \ -nir_src_as_ ## name (nir_src src) \ -{ \ - return src.is_ssa && src.ssa->parent_instr->type == type_enum \ - ? cast_macro(src.ssa->parent_instr) : NULL; \ -} - -NIR_SRC_AS_(alu_instr, nir_alu_instr, nir_instr_type_alu, nir_instr_as_alu) -NIR_SRC_AS_(intrinsic, nir_intrinsic_instr, - nir_instr_type_intrinsic, nir_instr_as_intrinsic) -NIR_SRC_AS_(deref, nir_deref_instr, nir_instr_type_deref, nir_instr_as_deref) - -bool nir_src_is_always_uniform(nir_src src); -bool nir_srcs_equal(nir_src src1, nir_src src2); -bool nir_instrs_equal(const nir_instr *instr1, const nir_instr *instr2); - -static inline void -nir_src_rewrite_ssa(nir_src *src, nir_ssa_def *new_ssa) -{ - assert(src->is_ssa && src->ssa); - assert(src->is_if ? (src->parent_if != NULL) : (src->parent_instr != NULL)); - list_del(&src->use_link); - src->ssa = new_ssa; - list_addtail(&src->use_link, &new_ssa->uses); -} - -static inline void -nir_instr_rewrite_src_ssa(ASSERTED nir_instr *instr, - nir_src *src, nir_ssa_def *new_ssa) -{ - assert(!src->is_if); - assert(src->parent_instr == instr); - nir_src_rewrite_ssa(src, new_ssa); -} - -void nir_instr_rewrite_src(nir_instr *instr, nir_src *src, nir_src new_src); -void nir_instr_move_src(nir_instr *dest_instr, nir_src *dest, nir_src *src); - -void nir_if_rewrite_condition(nir_if *if_stmt, nir_src new_src); -void nir_instr_rewrite_dest(nir_instr *instr, nir_dest *dest, - nir_dest new_dest); - -void nir_ssa_dest_init(nir_instr *instr, nir_dest *dest, - unsigned num_components, unsigned bit_size, - const char *name); -void nir_ssa_def_init(nir_instr *instr, nir_ssa_def *def, - unsigned num_components, unsigned bit_size); -static inline void -nir_ssa_dest_init_for_type(nir_instr *instr, nir_dest *dest, - const struct glsl_type *type, - const char *name) -{ - assert(glsl_type_is_vector_or_scalar(type)); - nir_ssa_dest_init(instr, dest, glsl_get_components(type), - glsl_get_bit_size(type), name); -} -void nir_ssa_def_rewrite_uses(nir_ssa_def *def, nir_ssa_def *new_ssa); -void nir_ssa_def_rewrite_uses_src(nir_ssa_def *def, nir_src new_src); -void nir_ssa_def_rewrite_uses_after(nir_ssa_def *def, nir_ssa_def *new_ssa, - nir_instr *after_me); - -nir_component_mask_t nir_src_components_read(const nir_src *src); -nir_component_mask_t nir_ssa_def_components_read(const nir_ssa_def *def); - -static inline bool -nir_ssa_def_is_unused(nir_ssa_def *ssa) -{ - return list_is_empty(&ssa->uses); -} - - -/** Returns the next block, disregarding structure - * - * The ordering is deterministic but has no guarantees beyond that. In - * particular, it is not guaranteed to be dominance-preserving. - */ -nir_block *nir_block_unstructured_next(nir_block *block); -nir_block *nir_unstructured_start_block(nir_function_impl *impl); - -#define nir_foreach_block_unstructured(block, impl) \ - for (nir_block *block = nir_unstructured_start_block(impl); block != NULL; \ - block = nir_block_unstructured_next(block)) - -#define nir_foreach_block_unstructured_safe(block, impl) \ - for (nir_block *block = nir_unstructured_start_block(impl), \ - *next = nir_block_unstructured_next(block); \ - block != NULL; \ - block = next, next = nir_block_unstructured_next(block)) - -/* - * finds the next basic block in source-code order, returns NULL if there is - * none - */ - -nir_block *nir_block_cf_tree_next(nir_block *block); - -/* Performs the opposite of nir_block_cf_tree_next() */ - -nir_block *nir_block_cf_tree_prev(nir_block *block); - -/* Gets the first block in a CF node in source-code order */ - -nir_block *nir_cf_node_cf_tree_first(nir_cf_node *node); - -/* Gets the last block in a CF node in source-code order */ - -nir_block *nir_cf_node_cf_tree_last(nir_cf_node *node); - -/* Gets the next block after a CF node in source-code order */ - -nir_block *nir_cf_node_cf_tree_next(nir_cf_node *node); - -/* Macros for loops that visit blocks in source-code order */ - -#define nir_foreach_block(block, impl) \ - for (nir_block *block = nir_start_block(impl); block != NULL; \ - block = nir_block_cf_tree_next(block)) - -#define nir_foreach_block_safe(block, impl) \ - for (nir_block *block = nir_start_block(impl), \ - *next = nir_block_cf_tree_next(block); \ - block != NULL; \ - block = next, next = nir_block_cf_tree_next(block)) - -#define nir_foreach_block_reverse(block, impl) \ - for (nir_block *block = nir_impl_last_block(impl); block != NULL; \ - block = nir_block_cf_tree_prev(block)) - -#define nir_foreach_block_reverse_safe(block, impl) \ - for (nir_block *block = nir_impl_last_block(impl), \ - *prev = nir_block_cf_tree_prev(block); \ - block != NULL; \ - block = prev, prev = nir_block_cf_tree_prev(block)) - -#define nir_foreach_block_in_cf_node(block, node) \ - for (nir_block *block = nir_cf_node_cf_tree_first(node); \ - block != nir_cf_node_cf_tree_next(node); \ - block = nir_block_cf_tree_next(block)) - -/* If the following CF node is an if, this function returns that if. - * Otherwise, it returns NULL. - */ -nir_if *nir_block_get_following_if(nir_block *block); - -nir_loop *nir_block_get_following_loop(nir_block *block); - -nir_block **nir_block_get_predecessors_sorted(const nir_block *block, void *mem_ctx); - -void nir_index_local_regs(nir_function_impl *impl); -void nir_index_ssa_defs(nir_function_impl *impl); -unsigned nir_index_instrs(nir_function_impl *impl); - -void nir_index_blocks(nir_function_impl *impl); - -unsigned nir_shader_index_vars(nir_shader *shader, nir_variable_mode modes); -unsigned nir_function_impl_index_vars(nir_function_impl *impl); - -void nir_print_shader(nir_shader *shader, FILE *fp); -void nir_print_shader_annotated(nir_shader *shader, FILE *fp, struct hash_table *errors); -void nir_print_instr(const nir_instr *instr, FILE *fp); -void nir_print_deref(const nir_deref_instr *deref, FILE *fp); -#define nir_log_shadere(s) nir_log_shader_annotated_tagged(MESA_LOG_ERROR, (MESA_LOG_TAG), (s), NULL) -#define nir_log_shaderw(s) nir_log_shader_annotated_tagged(MESA_LOG_WARN, (MESA_LOG_TAG), (s), NULL) -#define nir_log_shaderi(s) nir_log_shader_annotated_tagged(MESA_LOG_INFO, (MESA_LOG_TAG), (s), NULL) -#define nir_log_shader_annotated(s, annotations) nir_log_shader_annotated_tagged(MESA_LOG_ERROR, (MESA_LOG_TAG), (s), annotations) - - -/** Shallow clone of a single instruction. */ -nir_instr *nir_instr_clone(nir_shader *s, const nir_instr *orig); - -/** Clone a single instruction, including a remap table to rewrite sources. */ -nir_instr *nir_instr_clone_deep(nir_shader *s, const nir_instr *orig, - struct hash_table *remap_table); - -/** Shallow clone of a single ALU instruction. */ -nir_alu_instr *nir_alu_instr_clone(nir_shader *s, const nir_alu_instr *orig); - -nir_shader *nir_shader_clone(void *mem_ctx, const nir_shader *s); -nir_function_impl *nir_function_impl_clone(nir_shader *shader, - const nir_function_impl *fi); -nir_constant *nir_constant_clone(const nir_constant *c, nir_variable *var); -nir_variable *nir_variable_clone(const nir_variable *c, nir_shader *shader); - -void nir_shader_replace(nir_shader *dest, nir_shader *src); - -void nir_shader_serialize_deserialize(nir_shader *s); - -#ifndef NDEBUG -void nir_validate_shader(nir_shader *shader, const char *when); -void nir_validate_ssa_dominance(nir_shader *shader, const char *when); -void nir_metadata_set_validation_flag(nir_shader *shader); -void nir_metadata_check_validation_flag(nir_shader *shader); - -static inline bool -should_skip_nir(const char *name) -{ - static const char *list = NULL; - if (!list) { - /* Comma separated list of names to skip. */ - list = getenv("NIR_SKIP"); - if (!list) - list = ""; - } - - if (!list[0]) - return false; - - return comma_separated_list_contains(list, name); -} - -static inline bool -should_print_nir(nir_shader *shader) -{ - if ((shader->info.internal && !NIR_DEBUG(PRINT_INTERNAL)) || - shader->info.stage < 0 || - shader->info.stage > MESA_SHADER_KERNEL) - return false; - - return unlikely(nir_debug_print_shader[shader->info.stage]); -} -#else -static inline void nir_validate_shader(nir_shader *shader, const char *when) { (void) shader; (void)when; } -static inline void nir_validate_ssa_dominance(nir_shader *shader, const char *when) { (void) shader; (void)when; } -static inline void nir_metadata_set_validation_flag(nir_shader *shader) { (void) shader; } -static inline void nir_metadata_check_validation_flag(nir_shader *shader) { (void) shader; } -static inline bool should_skip_nir(UNUSED const char *pass_name) { return false; } -static inline bool should_print_nir(UNUSED nir_shader *shader) { return false; } -#endif /* NDEBUG */ - -#define _PASS(pass, nir, do_pass) do { \ - if (should_skip_nir(#pass)) { \ - printf("skipping %s\n", #pass); \ - break; \ - } \ - do_pass \ - if (NIR_DEBUG(CLONE)) { \ - nir_shader *clone = nir_shader_clone(ralloc_parent(nir), nir); \ - nir_shader_replace(nir, clone); \ - } \ - if (NIR_DEBUG(SERIALIZE)) { \ - nir_shader_serialize_deserialize(nir); \ - } \ -} while (0) - -#define NIR_PASS(progress, nir, pass, ...) _PASS(pass, nir, \ - nir_metadata_set_validation_flag(nir); \ - if (should_print_nir(nir)) \ - printf("%s\n", #pass); \ - if (pass(nir, ##__VA_ARGS__)) { \ - nir_validate_shader(nir, "after " #pass " in " __FILE__); \ - UNUSED bool _; \ - progress = true; \ - if (should_print_nir(nir)) \ - nir_print_shader(nir, stdout); \ - nir_metadata_check_validation_flag(nir); \ - } \ -) - -#define NIR_PASS_V(nir, pass, ...) _PASS(pass, nir, \ - if (should_print_nir(nir)) \ - printf("%s\n", #pass); \ - pass(nir, ##__VA_ARGS__); \ - nir_validate_shader(nir, "after " #pass " in " __FILE__); \ - if (should_print_nir(nir)) \ - nir_print_shader(nir, stdout); \ -) - -#define NIR_SKIP(name) should_skip_nir(#name) - -/** An instruction filtering callback with writemask - * - * Returns true if the instruction should be processed with the associated - * writemask and false otherwise. - */ -typedef bool (*nir_instr_writemask_filter_cb)(const nir_instr *, - unsigned writemask, const void *); - -/** A simple instruction lowering callback - * - * Many instruction lowering passes can be written as a simple function which - * takes an instruction as its input and returns a sequence of instructions - * that implement the consumed instruction. This function type represents - * such a lowering function. When called, a function with this prototype - * should either return NULL indicating that no lowering needs to be done or - * emit a sequence of instructions using the provided builder (whose cursor - * will already be placed after the instruction to be lowered) and return the - * resulting nir_ssa_def. - */ -typedef nir_ssa_def *(*nir_lower_instr_cb)(struct nir_builder *, - nir_instr *, void *); - -/** - * Special return value for nir_lower_instr_cb when some progress occurred - * (like changing an input to the instr) that didn't result in a replacement - * SSA def being generated. - */ -#define NIR_LOWER_INSTR_PROGRESS ((nir_ssa_def *)(uintptr_t)1) - -/** - * Special return value for nir_lower_instr_cb when some progress occurred - * that should remove the current instruction that doesn't create an output - * (like a store) - */ - -#define NIR_LOWER_INSTR_PROGRESS_REPLACE ((nir_ssa_def *)(uintptr_t)2) - -/** Iterate over all the instructions in a nir_function_impl and lower them - * using the provided callbacks - * - * This function implements the guts of a standard lowering pass for you. It - * iterates over all of the instructions in a nir_function_impl and calls the - * filter callback on each one. If the filter callback returns true, it then - * calls the lowering call back on the instruction. (Splitting it this way - * allows us to avoid some save/restore work for instructions we know won't be - * lowered.) If the instruction is dead after the lowering is complete, it - * will be removed. If new instructions are added, the lowering callback will - * also be called on them in case multiple lowerings are required. - * - * If the callback indicates that the original instruction is replaced (either - * through a new SSA def or NIR_LOWER_INSTR_PROGRESS_REPLACE), then the - * instruction is removed along with any now-dead SSA defs it used. - * - * The metadata for the nir_function_impl will also be updated. If any blocks - * are added (they cannot be removed), dominance and block indices will be - * invalidated. - */ -bool nir_function_impl_lower_instructions(nir_function_impl *impl, - nir_instr_filter_cb filter, - nir_lower_instr_cb lower, - void *cb_data); -bool nir_shader_lower_instructions(nir_shader *shader, - nir_instr_filter_cb filter, - nir_lower_instr_cb lower, - void *cb_data); - -void nir_calc_dominance_impl(nir_function_impl *impl); -void nir_calc_dominance(nir_shader *shader); - -nir_block *nir_dominance_lca(nir_block *b1, nir_block *b2); -bool nir_block_dominates(nir_block *parent, nir_block *child); -bool nir_block_is_unreachable(nir_block *block); - -void nir_dump_dom_tree_impl(nir_function_impl *impl, FILE *fp); -void nir_dump_dom_tree(nir_shader *shader, FILE *fp); - -void nir_dump_dom_frontier_impl(nir_function_impl *impl, FILE *fp); -void nir_dump_dom_frontier(nir_shader *shader, FILE *fp); - -void nir_dump_cfg_impl(nir_function_impl *impl, FILE *fp); -void nir_dump_cfg(nir_shader *shader, FILE *fp); - -void nir_gs_count_vertices_and_primitives(const nir_shader *shader, - int *out_vtxcnt, - int *out_prmcnt, - unsigned num_streams); - -typedef enum { - nir_group_all, - nir_group_same_resource_only, -} nir_load_grouping; - -void nir_group_loads(nir_shader *shader, nir_load_grouping grouping, - unsigned max_distance); - -bool nir_shrink_vec_array_vars(nir_shader *shader, nir_variable_mode modes); -bool nir_split_array_vars(nir_shader *shader, nir_variable_mode modes); -bool nir_split_var_copies(nir_shader *shader); -bool nir_split_per_member_structs(nir_shader *shader); -bool nir_split_struct_vars(nir_shader *shader, nir_variable_mode modes); - -bool nir_lower_returns_impl(nir_function_impl *impl); -bool nir_lower_returns(nir_shader *shader); - -void nir_inline_function_impl(struct nir_builder *b, - const nir_function_impl *impl, - nir_ssa_def **params, - struct hash_table *shader_var_remap); -bool nir_inline_functions(nir_shader *shader); - -void nir_find_inlinable_uniforms(nir_shader *shader); -void nir_inline_uniforms(nir_shader *shader, unsigned num_uniforms, - const uint32_t *uniform_values, - const uint16_t *uniform_dw_offsets); -bool nir_collect_src_uniforms(const nir_src *src, int component, - uint32_t *uni_offsets, uint8_t *num_offsets, - unsigned max_num_bo, unsigned max_offset); -void nir_add_inlinable_uniforms(const nir_src *cond, nir_loop_info *info, - uint32_t *uni_offsets, uint8_t *num_offsets, - unsigned max_num_bo, unsigned max_offset); - -bool nir_propagate_invariant(nir_shader *shader, bool invariant_prim); - -void nir_lower_var_copy_instr(nir_intrinsic_instr *copy, nir_shader *shader); -void nir_lower_deref_copy_instr(struct nir_builder *b, - nir_intrinsic_instr *copy); -bool nir_lower_var_copies(nir_shader *shader); - -bool nir_opt_memcpy(nir_shader *shader); -bool nir_lower_memcpy(nir_shader *shader); - -void nir_fixup_deref_modes(nir_shader *shader); - -bool nir_lower_global_vars_to_local(nir_shader *shader); - -typedef enum { - nir_lower_direct_array_deref_of_vec_load = (1 << 0), - nir_lower_indirect_array_deref_of_vec_load = (1 << 1), - nir_lower_direct_array_deref_of_vec_store = (1 << 2), - nir_lower_indirect_array_deref_of_vec_store = (1 << 3), -} nir_lower_array_deref_of_vec_options; - -bool nir_lower_array_deref_of_vec(nir_shader *shader, nir_variable_mode modes, - nir_lower_array_deref_of_vec_options options); - -bool nir_lower_indirect_derefs(nir_shader *shader, nir_variable_mode modes, - uint32_t max_lower_array_len); - -bool nir_lower_indirect_var_derefs(nir_shader *shader, - const struct set *vars); - -bool nir_lower_locals_to_regs(nir_shader *shader); - -void nir_lower_io_to_temporaries(nir_shader *shader, - nir_function_impl *entrypoint, - bool outputs, bool inputs); - -bool nir_lower_vars_to_scratch(nir_shader *shader, - nir_variable_mode modes, - int size_threshold, - glsl_type_size_align_func size_align); - -void nir_lower_clip_halfz(nir_shader *shader); - -void nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint); - -void nir_gather_ssa_types(nir_function_impl *impl, - BITSET_WORD *float_types, - BITSET_WORD *int_types); - -void nir_assign_var_locations(nir_shader *shader, nir_variable_mode mode, - unsigned *size, - int (*type_size)(const struct glsl_type *, bool)); - -/* Some helpers to do very simple linking */ -bool nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer); -bool nir_remove_unused_io_vars(nir_shader *shader, nir_variable_mode mode, - uint64_t *used_by_other_stage, - uint64_t *used_by_other_stage_patches); -void nir_compact_varyings(nir_shader *producer, nir_shader *consumer, - bool default_to_smooth_interp); -void nir_link_xfb_varyings(nir_shader *producer, nir_shader *consumer); -bool nir_link_opt_varyings(nir_shader *producer, nir_shader *consumer); -void nir_link_varying_precision(nir_shader *producer, nir_shader *consumer); - -bool nir_slot_is_sysval_output(gl_varying_slot slot); -bool nir_slot_is_varying(gl_varying_slot slot); -bool nir_slot_is_sysval_output_and_varying(gl_varying_slot slot); -void nir_remove_varying(nir_intrinsic_instr *intr); -void nir_remove_sysval_output(nir_intrinsic_instr *intr); - -bool nir_lower_amul(nir_shader *shader, - int (*type_size)(const struct glsl_type *, bool)); - -bool nir_lower_ubo_vec4(nir_shader *shader); - -void nir_assign_io_var_locations(nir_shader *shader, - nir_variable_mode mode, - unsigned *size, - gl_shader_stage stage); - -typedef struct { - uint8_t num_linked_io_vars; - uint8_t num_linked_patch_io_vars; -} nir_linked_io_var_info; - -nir_linked_io_var_info -nir_assign_linked_io_var_locations(nir_shader *producer, - nir_shader *consumer); - -typedef enum { - /* If set, this causes all 64-bit IO operations to be lowered on-the-fly - * to 32-bit operations. This is only valid for nir_var_shader_in/out - * modes. - */ - nir_lower_io_lower_64bit_to_32 = (1 << 0), -} nir_lower_io_options; -bool nir_lower_io(nir_shader *shader, - nir_variable_mode modes, - int (*type_size)(const struct glsl_type *, bool), - nir_lower_io_options); - -bool nir_io_add_const_offset_to_base(nir_shader *nir, nir_variable_mode modes); - -void -nir_lower_io_passes(nir_shader *nir); - -bool nir_io_add_intrinsic_xfb_info(nir_shader *nir); - -bool -nir_lower_vars_to_explicit_types(nir_shader *shader, - nir_variable_mode modes, - glsl_type_size_align_func type_info); -void -nir_gather_explicit_io_initializers(nir_shader *shader, - void *dst, size_t dst_size, - nir_variable_mode mode); - -bool nir_lower_vec3_to_vec4(nir_shader *shader, nir_variable_mode modes); - -typedef enum { - /** - * An address format which is a simple 32-bit global GPU address. - */ - nir_address_format_32bit_global, - - /** - * An address format which is a simple 64-bit global GPU address. - */ - nir_address_format_64bit_global, - - /** - * An address format which is a 64-bit global GPU address encoded as a - * 2x32-bit vector. - */ - nir_address_format_2x32bit_global, - - /** - * An address format which is a 64-bit global base address and a 32-bit - * offset. - * - * This is identical to 64bit_bounded_global except that bounds checking - * is not applied when lowering to global access. Even though the size is - * never used for an actual bounds check, it needs to be valid so we can - * lower deref_buffer_array_length properly. - */ - nir_address_format_64bit_global_32bit_offset, - - /** - * An address format which is a bounds-checked 64-bit global GPU address. - * - * The address is comprised as a 32-bit vec4 where .xy are a uint64_t base - * address stored with the low bits in .x and high bits in .y, .z is a - * size, and .w is an offset. When the final I/O operation is lowered, .w - * is checked against .z and the operation is predicated on the result. - */ - nir_address_format_64bit_bounded_global, - - /** - * An address format which is comprised of a vec2 where the first - * component is a buffer index and the second is an offset. - */ - nir_address_format_32bit_index_offset, - - /** - * An address format which is a 64-bit value, where the high 32 bits - * are a buffer index, and the low 32 bits are an offset. - */ - nir_address_format_32bit_index_offset_pack64, - - /** - * An address format which is comprised of a vec3 where the first two - * components specify the buffer and the third is an offset. - */ - nir_address_format_vec2_index_32bit_offset, - - /** - * An address format which represents generic pointers with a 62-bit - * pointer and a 2-bit enum in the top two bits. The top two bits have - * the following meanings: - * - * - 0x0: Global memory - * - 0x1: Shared memory - * - 0x2: Scratch memory - * - 0x3: Global memory - * - * The redundancy between 0x0 and 0x3 is because of Intel sign-extension of - * addresses. Valid global memory addresses may naturally have either 0 or - * ~0 as their high bits. - * - * Shared and scratch pointers are represented as 32-bit offsets with the - * top 32 bits only being used for the enum. This allows us to avoid - * 64-bit address calculations in a bunch of cases. - */ - nir_address_format_62bit_generic, - - /** - * An address format which is a simple 32-bit offset. - */ - nir_address_format_32bit_offset, - - /** - * An address format which is a simple 32-bit offset cast to 64-bit. - */ - nir_address_format_32bit_offset_as_64bit, - - /** - * An address format representing a purely logical addressing model. In - * this model, all deref chains must be complete from the dereference - * operation to the variable. Cast derefs are not allowed. These - * addresses will be 32-bit scalars but the format is immaterial because - * you can always chase the chain. - */ - nir_address_format_logical, -} nir_address_format; - -unsigned -nir_address_format_bit_size(nir_address_format addr_format); - -unsigned -nir_address_format_num_components(nir_address_format addr_format); - -static inline const struct glsl_type * -nir_address_format_to_glsl_type(nir_address_format addr_format) -{ - unsigned bit_size = nir_address_format_bit_size(addr_format); - assert(bit_size == 32 || bit_size == 64); - return glsl_vector_type(bit_size == 32 ? GLSL_TYPE_UINT : GLSL_TYPE_UINT64, - nir_address_format_num_components(addr_format)); -} - -const nir_const_value *nir_address_format_null_value(nir_address_format addr_format); - -nir_ssa_def *nir_build_addr_ieq(struct nir_builder *b, nir_ssa_def *addr0, nir_ssa_def *addr1, - nir_address_format addr_format); - -nir_ssa_def *nir_build_addr_isub(struct nir_builder *b, nir_ssa_def *addr0, nir_ssa_def *addr1, - nir_address_format addr_format); - -nir_ssa_def * nir_explicit_io_address_from_deref(struct nir_builder *b, - nir_deref_instr *deref, - nir_ssa_def *base_addr, - nir_address_format addr_format); - -bool nir_get_explicit_deref_align(nir_deref_instr *deref, - bool default_to_type_align, - uint32_t *align_mul, - uint32_t *align_offset); - -void nir_lower_explicit_io_instr(struct nir_builder *b, - nir_intrinsic_instr *io_instr, - nir_ssa_def *addr, - nir_address_format addr_format); - -bool nir_lower_explicit_io(nir_shader *shader, - nir_variable_mode modes, - nir_address_format); - -typedef struct { - uint8_t num_components; - uint8_t bit_size; - uint16_t align; -} nir_mem_access_size_align; - -typedef nir_mem_access_size_align - (*nir_lower_mem_access_bit_sizes_cb)(nir_intrinsic_op intrin, - uint8_t bytes, - uint32_t align_mul, - uint32_t align_offset, - bool offset_is_const, - const void *cb_data); - -bool nir_lower_mem_access_bit_sizes(nir_shader *shader, - nir_variable_mode modes, - nir_lower_mem_access_bit_sizes_cb cb, - const void *cb_data); - -typedef bool (*nir_should_vectorize_mem_func)(unsigned align_mul, - unsigned align_offset, - unsigned bit_size, - unsigned num_components, - nir_intrinsic_instr *low, nir_intrinsic_instr *high, - void *data); - -typedef struct { - nir_should_vectorize_mem_func callback; - nir_variable_mode modes; - nir_variable_mode robust_modes; - void *cb_data; - bool has_shared2_amd; -} nir_load_store_vectorize_options; - -bool nir_opt_load_store_vectorize(nir_shader *shader, const nir_load_store_vectorize_options *options); - -typedef struct nir_lower_shader_calls_options { - /* Address format used for load/store operations on the call stack. */ - nir_address_format address_format; - - /* Stack alignment */ - unsigned stack_alignment; - - /* Put loads from the stack as close as possible from where they're needed. - * You might want to disable combined_loads for best effects. - */ - bool localized_loads; - - /* If this function pointer is not NULL, lower_shader_calls will run - * nir_opt_load_store_vectorize for stack load/store operations. Otherwise - * the optimizaion is not run. - */ - nir_should_vectorize_mem_func vectorizer_callback; - - /* Data passed to vectorizer_callback */ - void *vectorizer_data; -} nir_lower_shader_calls_options; - -bool -nir_lower_shader_calls(nir_shader *shader, - const nir_lower_shader_calls_options *options, - nir_shader ***resume_shaders_out, - uint32_t *num_resume_shaders_out, - void *mem_ctx); - -nir_src *nir_get_io_offset_src(nir_intrinsic_instr *instr); -nir_src *nir_get_io_arrayed_index_src(nir_intrinsic_instr *instr); -nir_src *nir_get_shader_call_payload_src(nir_intrinsic_instr *call); - -bool nir_is_arrayed_io(const nir_variable *var, gl_shader_stage stage); - -bool nir_lower_regs_to_ssa_impl(nir_function_impl *impl); -bool nir_lower_regs_to_ssa(nir_shader *shader); -bool nir_lower_vars_to_ssa(nir_shader *shader); - -bool nir_remove_dead_derefs(nir_shader *shader); -bool nir_remove_dead_derefs_impl(nir_function_impl *impl); - -typedef struct nir_remove_dead_variables_options { - bool (*can_remove_var)(nir_variable *var, void *data); - void *can_remove_var_data; -} nir_remove_dead_variables_options; - -bool nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes, - const nir_remove_dead_variables_options *options); - -bool nir_lower_variable_initializers(nir_shader *shader, - nir_variable_mode modes); -bool nir_zero_initialize_shared_memory(nir_shader *shader, - const unsigned shared_size, - const unsigned chunk_size); - -bool nir_move_vec_src_uses_to_dest(nir_shader *shader); -bool nir_lower_vec_to_movs(nir_shader *shader, nir_instr_writemask_filter_cb cb, - const void *_data); -void nir_lower_alpha_test(nir_shader *shader, enum compare_func func, - bool alpha_to_one, - const gl_state_index16 *alpha_ref_state_tokens); -bool nir_lower_alu(nir_shader *shader); - -bool nir_lower_flrp(nir_shader *shader, unsigned lowering_mask, - bool always_precise); - -bool nir_scale_fdiv(nir_shader *shader); - -bool nir_lower_alu_to_scalar(nir_shader *shader, nir_instr_filter_cb cb, const void *data); -bool nir_lower_alu_width(nir_shader *shader, nir_vectorize_cb cb, const void *data); -bool nir_lower_bool_to_bitsize(nir_shader *shader); -bool nir_lower_bool_to_float(nir_shader *shader, bool has_fcsel_ne); -bool nir_lower_bool_to_int32(nir_shader *shader); -bool nir_opt_simplify_convert_alu_types(nir_shader *shader); -bool nir_lower_const_arrays_to_uniforms(nir_shader *shader, - unsigned max_uniform_components); -bool nir_lower_convert_alu_types(nir_shader *shader, - bool (*should_lower)(nir_intrinsic_instr *)); -bool nir_lower_constant_convert_alu_types(nir_shader *shader); -bool nir_lower_alu_conversion_to_intrinsic(nir_shader *shader); -bool nir_lower_int_to_float(nir_shader *shader); -bool nir_lower_load_const_to_scalar(nir_shader *shader); -bool nir_lower_read_invocation_to_scalar(nir_shader *shader); -bool nir_lower_phis_to_scalar(nir_shader *shader, bool lower_all); -void nir_lower_io_arrays_to_elements(nir_shader *producer, nir_shader *consumer); -void nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader, - bool outputs_only); -bool nir_lower_io_to_scalar(nir_shader *shader, nir_variable_mode mask); -bool nir_lower_io_to_scalar_early(nir_shader *shader, nir_variable_mode mask); -bool nir_lower_io_to_vector(nir_shader *shader, nir_variable_mode mask); -bool nir_vectorize_tess_levels(nir_shader *shader); -nir_shader * nir_create_passthrough_tcs_impl(const nir_shader_compiler_options *options, - unsigned *locations, unsigned num_locations, - uint8_t patch_vertices); -nir_shader * nir_create_passthrough_tcs(const nir_shader_compiler_options *options, - const nir_shader *vs, uint8_t patch_vertices); -nir_shader * nir_create_passthrough_gs(const nir_shader_compiler_options *options, - const nir_shader *prev_stage, - enum shader_prim primitive_type, - int flat_interp_mask_offset, - int last_pv_vert_offset, - bool emulate_edgeflags, - bool force_line_strip_out); - -bool nir_lower_fragcolor(nir_shader *shader, unsigned max_cbufs); -bool nir_lower_fragcoord_wtrans(nir_shader *shader); -void nir_lower_viewport_transform(nir_shader *shader); -bool nir_lower_uniforms_to_ubo(nir_shader *shader, bool dword_packed, bool load_vec4); - -bool nir_lower_is_helper_invocation(nir_shader *shader); - -bool nir_lower_single_sampled(nir_shader *shader); - -typedef struct nir_lower_subgroups_options { - uint8_t subgroup_size; - uint8_t ballot_bit_size; - uint8_t ballot_components; - bool lower_to_scalar:1; - bool lower_vote_trivial:1; - bool lower_vote_eq:1; - bool lower_subgroup_masks:1; - bool lower_relative_shuffle:1; - bool lower_shuffle_to_32bit:1; - bool lower_shuffle_to_swizzle_amd:1; - bool lower_shuffle:1; - bool lower_quad:1; - bool lower_quad_broadcast_dynamic:1; - bool lower_quad_broadcast_dynamic_to_const:1; - bool lower_elect:1; - bool lower_read_invocation_to_cond:1; - bool lower_rotate_to_shuffle:1; -} nir_lower_subgroups_options; - -bool nir_lower_subgroups(nir_shader *shader, - const nir_lower_subgroups_options *options); - -bool nir_lower_system_values(nir_shader *shader); - -nir_ssa_def * -nir_build_lowered_load_helper_invocation(struct nir_builder *b); - -typedef struct nir_lower_compute_system_values_options { - bool has_base_global_invocation_id:1; - bool has_base_workgroup_id:1; - bool shuffle_local_ids_for_quad_derivatives:1; - bool lower_local_invocation_index:1; - bool lower_cs_local_id_to_index:1; - bool lower_workgroup_id_to_index:1; -} nir_lower_compute_system_values_options; - -bool nir_lower_compute_system_values(nir_shader *shader, - const nir_lower_compute_system_values_options *options); - -struct nir_lower_sysvals_to_varyings_options { - bool frag_coord:1; - bool front_face:1; - bool point_coord:1; -}; - -bool -nir_lower_sysvals_to_varyings(nir_shader *shader, - const struct nir_lower_sysvals_to_varyings_options *options); - -enum PACKED nir_lower_tex_packing { - /** No packing */ - nir_lower_tex_packing_none = 0, - /** - * The sampler returns up to 2 32-bit words of half floats or 16-bit signed - * or unsigned ints based on the sampler type - */ - nir_lower_tex_packing_16, - /** The sampler returns 1 32-bit word of 4x8 unorm */ - nir_lower_tex_packing_8, -}; - -typedef struct nir_lower_tex_options { - /** - * bitmask of (1 << GLSL_SAMPLER_DIM_x) to control for which - * sampler types a texture projector is lowered. - */ - unsigned lower_txp; - - /** - * If true, lower texture projector for any array sampler dims - */ - bool lower_txp_array; - - /** - * If true, lower away nir_tex_src_offset for all texelfetch instructions. - */ - bool lower_txf_offset; - - /** - * If true, lower away nir_tex_src_offset for all rect textures. - */ - bool lower_rect_offset; - - /** - * If not NULL, this filter will return true for tex instructions that - * should lower away nir_tex_src_offset. - */ - nir_instr_filter_cb lower_offset_filter; - - /** - * If true, lower rect textures to 2D, using txs to fetch the - * texture dimensions and dividing the texture coords by the - * texture dims to normalize. - */ - bool lower_rect; - - /** - * If true, convert yuv to rgb. - */ - unsigned lower_y_uv_external; - unsigned lower_y_u_v_external; - unsigned lower_yx_xuxv_external; - unsigned lower_xy_uxvx_external; - unsigned lower_ayuv_external; - unsigned lower_xyuv_external; - unsigned lower_yuv_external; - unsigned lower_yu_yv_external; - unsigned lower_y41x_external; - unsigned bt709_external; - unsigned bt2020_external; - unsigned yuv_full_range_external; - - /** - * To emulate certain texture wrap modes, this can be used - * to saturate the specified tex coord to [0.0, 1.0]. The - * bits are according to sampler #, ie. if, for example: - * - * (conf->saturate_s & (1 << n)) - * - * is true, then the s coord for sampler n is saturated. - * - * Note that clamping must happen *after* projector lowering - * so any projected texture sample instruction with a clamped - * coordinate gets automatically lowered, regardless of the - * 'lower_txp' setting. - */ - unsigned saturate_s; - unsigned saturate_t; - unsigned saturate_r; - - /* Bitmask of textures that need swizzling. - * - * If (swizzle_result & (1 << texture_index)), then the swizzle in - * swizzles[texture_index] is applied to the result of the texturing - * operation. - */ - unsigned swizzle_result; - - /* A swizzle for each texture. Values 0-3 represent x, y, z, or w swizzles - * while 4 and 5 represent 0 and 1 respectively. - * - * Indexed by texture-id. - */ - uint8_t swizzles[32][4]; - - /* Can be used to scale sampled values in range required by the - * format. - * - * Indexed by texture-id. - */ - float scale_factors[32]; - - /** - * Bitmap of textures that need srgb to linear conversion. If - * (lower_srgb & (1 << texture_index)) then the rgb (xyz) components - * of the texture are lowered to linear. - */ - unsigned lower_srgb; - - /** - * If true, lower nir_texop_txd on cube maps with nir_texop_txl. - */ - bool lower_txd_cube_map; - - /** - * If true, lower nir_texop_txd on 3D surfaces with nir_texop_txl. - */ - bool lower_txd_3d; - - /** - * If true, lower nir_texop_txd any array surfaces with nir_texop_txl. - */ - bool lower_txd_array; - - /** - * If true, lower nir_texop_txd on shadow samplers (except cube maps) - * with nir_texop_txl. Notice that cube map shadow samplers are lowered - * with lower_txd_cube_map. - */ - bool lower_txd_shadow; - - /** - * If true, lower nir_texop_txd on all samplers to a nir_texop_txl. - * Implies lower_txd_cube_map and lower_txd_shadow. - */ - bool lower_txd; - - /** - * If true, lower nir_texop_txb that try to use shadow compare and min_lod - * at the same time to a nir_texop_lod, some math, and nir_texop_tex. - */ - bool lower_txb_shadow_clamp; - - /** - * If true, lower nir_texop_txd on shadow samplers when it uses min_lod - * with nir_texop_txl. This includes cube maps. - */ - bool lower_txd_shadow_clamp; - - /** - * If true, lower nir_texop_txd on when it uses both offset and min_lod - * with nir_texop_txl. This includes cube maps. - */ - bool lower_txd_offset_clamp; - - /** - * If true, lower nir_texop_txd with min_lod to a nir_texop_txl if the - * sampler is bindless. - */ - bool lower_txd_clamp_bindless_sampler; - - /** - * If true, lower nir_texop_txd with min_lod to a nir_texop_txl if the - * sampler index is not statically determinable to be less than 16. - */ - bool lower_txd_clamp_if_sampler_index_not_lt_16; - - /** - * If true, lower nir_texop_txs with a non-0-lod into nir_texop_txs with - * 0-lod followed by a nir_ishr. - */ - bool lower_txs_lod; - - /** - * If true, lower nir_texop_txs for cube arrays to a nir_texop_txs with a - * 2D array type followed by a nir_idiv by 6. - */ - bool lower_txs_cube_array; - - /** - * If true, apply a .bagr swizzle on tg4 results to handle Broadcom's - * mixed-up tg4 locations. - */ - bool lower_tg4_broadcom_swizzle; - - /** - * If true, lowers tg4 with 4 constant offsets to 4 tg4 calls - */ - bool lower_tg4_offsets; - - /** - * Lower txf_ms to fragment_mask_fetch and fragment_fetch and samples_identical to - * fragment_mask_fetch. - */ - bool lower_to_fragment_fetch_amd; - - /** - * To lower packed sampler return formats. - * - * Indexed by sampler-id. - */ - enum nir_lower_tex_packing lower_tex_packing[32]; - - /** - * If true, lower nir_texop_lod to return -FLT_MAX if the sum of the - * absolute values of derivatives is 0 for all coordinates. - */ - bool lower_lod_zero_width; - - /* Turns nir_op_tex and other ops with an implicit derivative, in stages - * without implicit derivatives (like the vertex shader) to have an explicit - * LOD with a value of 0. - */ - bool lower_invalid_implicit_lod; - - /* If true, round the layer component of the coordinates source to the nearest - * integer for all array ops. - */ - bool lower_array_layer_round_even; - - /* If true, texture_index (sampler_index) will be zero if a texture_offset - * (sampler_offset) source is present. This is convenient for backends that - * support indirect indexing of textures (samplers) but not offsetting it. - */ - bool lower_index_to_offset; - - /** - * Payload data to be sent to callback / filter functions. - */ - void *callback_data; -} nir_lower_tex_options; - -/** Lowers complex texture instructions to simpler ones */ -bool nir_lower_tex(nir_shader *shader, - const nir_lower_tex_options *options); - - -typedef struct nir_lower_tex_shadow_swizzle { - unsigned swizzle_r:3; - unsigned swizzle_g:3; - unsigned swizzle_b:3; - unsigned swizzle_a:3; -} nir_lower_tex_shadow_swizzle; - -bool -nir_lower_tex_shadow(nir_shader *s, - unsigned n_states, - enum compare_func *compare_func, - nir_lower_tex_shadow_swizzle *tex_swizzles); - -typedef struct nir_lower_image_options { - /** - * If true, lower cube size operations. - */ - bool lower_cube_size; - - /** - * Lower multi sample image load and samples_identical to use fragment_mask_load. - */ - bool lower_to_fragment_mask_load_amd; - - /** - * Lower image_samples to a constant in case the driver doesn't support multisampled - * images. - */ - bool lower_image_samples_to_one; -} nir_lower_image_options; - -bool nir_lower_image(nir_shader *nir, - const nir_lower_image_options *options); - -bool nir_lower_readonly_images_to_tex(nir_shader *shader, bool per_variable); - -enum nir_lower_non_uniform_access_type { - nir_lower_non_uniform_ubo_access = (1 << 0), - nir_lower_non_uniform_ssbo_access = (1 << 1), - nir_lower_non_uniform_texture_access = (1 << 2), - nir_lower_non_uniform_image_access = (1 << 3), -}; - -/* Given the nir_src used for the resource, return the channels which might be non-uniform. */ -typedef nir_component_mask_t (*nir_lower_non_uniform_access_callback)(const nir_src *, void *); - -typedef struct nir_lower_non_uniform_access_options { - enum nir_lower_non_uniform_access_type types; - nir_lower_non_uniform_access_callback callback; - void *callback_data; -} nir_lower_non_uniform_access_options; - -bool nir_has_non_uniform_access(nir_shader *shader, enum nir_lower_non_uniform_access_type types); -bool nir_opt_non_uniform_access(nir_shader *shader); -bool nir_lower_non_uniform_access(nir_shader *shader, - const nir_lower_non_uniform_access_options *options); - -typedef struct { - /* Whether 16-bit floating point arithmetic should be allowed in 8-bit - * division lowering - */ - bool allow_fp16; -} nir_lower_idiv_options; - -bool nir_lower_idiv(nir_shader *shader, const nir_lower_idiv_options *options); - -typedef struct nir_input_attachment_options { - bool use_fragcoord_sysval; - bool use_layer_id_sysval; - bool use_view_id_for_layer; -} nir_input_attachment_options; - -bool nir_lower_input_attachments(nir_shader *shader, - const nir_input_attachment_options *options); - -bool nir_lower_clip_vs(nir_shader *shader, unsigned ucp_enables, - bool use_vars, - bool use_clipdist_array, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]); -bool nir_lower_clip_gs(nir_shader *shader, unsigned ucp_enables, - bool use_clipdist_array, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]); -bool nir_lower_clip_fs(nir_shader *shader, unsigned ucp_enables, - bool use_clipdist_array); -bool nir_lower_clip_cull_distance_arrays(nir_shader *nir); -bool nir_lower_clip_disable(nir_shader *shader, unsigned clip_plane_enable); - -void nir_lower_point_size_mov(nir_shader *shader, - const gl_state_index16 *pointsize_state_tokens); - -bool nir_lower_frexp(nir_shader *nir); - -void nir_lower_two_sided_color(nir_shader *shader, bool face_sysval); - -bool nir_lower_clamp_color_outputs(nir_shader *shader); - -bool nir_lower_flatshade(nir_shader *shader); - -void nir_lower_passthrough_edgeflags(nir_shader *shader); -bool nir_lower_patch_vertices(nir_shader *nir, unsigned static_count, - const gl_state_index16 *uniform_state_tokens); - -typedef struct nir_lower_wpos_ytransform_options { - gl_state_index16 state_tokens[STATE_LENGTH]; - bool fs_coord_origin_upper_left :1; - bool fs_coord_origin_lower_left :1; - bool fs_coord_pixel_center_integer :1; - bool fs_coord_pixel_center_half_integer :1; -} nir_lower_wpos_ytransform_options; - -bool nir_lower_wpos_ytransform(nir_shader *shader, - const nir_lower_wpos_ytransform_options *options); -bool nir_lower_wpos_center(nir_shader *shader); - -bool nir_lower_pntc_ytransform(nir_shader *shader, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]); - -bool nir_lower_wrmasks(nir_shader *shader, nir_instr_filter_cb cb, const void *data); - -bool nir_lower_fb_read(nir_shader *shader); - -typedef struct nir_lower_drawpixels_options { - gl_state_index16 texcoord_state_tokens[STATE_LENGTH]; - gl_state_index16 scale_state_tokens[STATE_LENGTH]; - gl_state_index16 bias_state_tokens[STATE_LENGTH]; - unsigned drawpix_sampler; - unsigned pixelmap_sampler; - bool pixel_maps :1; - bool scale_and_bias :1; -} nir_lower_drawpixels_options; - -void nir_lower_drawpixels(nir_shader *shader, - const nir_lower_drawpixels_options *options); - -typedef struct nir_lower_bitmap_options { - unsigned sampler; - bool swizzle_xxxx; -} nir_lower_bitmap_options; - -void nir_lower_bitmap(nir_shader *shader, const nir_lower_bitmap_options *options); - -bool nir_lower_atomics_to_ssbo(nir_shader *shader, unsigned offset_align_state); - -typedef enum { - nir_lower_int_source_mods = 1 << 0, - nir_lower_fabs_source_mods = 1 << 1, - nir_lower_fneg_source_mods = 1 << 2, - nir_lower_64bit_source_mods = 1 << 3, - nir_lower_triop_abs = 1 << 4, - nir_lower_all_source_mods = (1 << 5) - 1 -} nir_lower_to_source_mods_flags; - -#define nir_lower_float_source_mods (nir_lower_fabs_source_mods | nir_lower_fneg_source_mods) - -bool nir_lower_to_source_mods(nir_shader *shader, nir_lower_to_source_mods_flags options); - -typedef enum { - nir_lower_gs_intrinsics_per_stream = 1 << 0, - nir_lower_gs_intrinsics_count_primitives = 1 << 1, - nir_lower_gs_intrinsics_count_vertices_per_primitive = 1 << 2, - nir_lower_gs_intrinsics_overwrite_incomplete = 1 << 3, -} nir_lower_gs_intrinsics_flags; - -bool nir_lower_gs_intrinsics(nir_shader *shader, nir_lower_gs_intrinsics_flags options); - -typedef struct { - bool payload_to_shared_for_atomics : 1; - bool payload_to_shared_for_small_types : 1; - uint32_t payload_offset_in_bytes; -} nir_lower_task_shader_options; - -bool nir_lower_task_shader(nir_shader *shader, nir_lower_task_shader_options options); - -typedef unsigned (*nir_lower_bit_size_callback)(const nir_instr *, void *); - -bool nir_lower_bit_size(nir_shader *shader, - nir_lower_bit_size_callback callback, - void *callback_data); -bool nir_lower_64bit_phis(nir_shader *shader); - -bool nir_split_64bit_vec3_and_vec4(nir_shader *shader); - -nir_lower_int64_options nir_lower_int64_op_to_options_mask(nir_op opcode); -bool nir_lower_int64(nir_shader *shader); - -nir_lower_doubles_options nir_lower_doubles_op_to_options_mask(nir_op opcode); -bool nir_lower_doubles(nir_shader *shader, const nir_shader *softfp64, - nir_lower_doubles_options options); -bool nir_lower_pack(nir_shader *shader); - -bool nir_recompute_io_bases(nir_shader *nir, nir_variable_mode modes); -bool nir_lower_mediump_vars(nir_shader *nir, nir_variable_mode modes); -bool nir_lower_mediump_io(nir_shader *nir, nir_variable_mode modes, - uint64_t varying_mask, bool use_16bit_slots); -bool nir_force_mediump_io(nir_shader *nir, nir_variable_mode modes, - nir_alu_type types); -bool nir_unpack_16bit_varying_slots(nir_shader *nir, nir_variable_mode modes); - -struct nir_fold_tex_srcs_options { - unsigned sampler_dims; - unsigned src_types; -}; - -struct nir_fold_16bit_tex_image_options { - nir_rounding_mode rounding_mode; - nir_alu_type fold_tex_dest_types; - nir_alu_type fold_image_dest_types; - bool fold_image_store_data; - bool fold_image_srcs; - unsigned fold_srcs_options_count; - struct nir_fold_tex_srcs_options *fold_srcs_options; -}; - -bool nir_fold_16bit_tex_image(nir_shader *nir, - struct nir_fold_16bit_tex_image_options *options); - -typedef struct { - bool legalize_type; /* whether this src should be legalized */ - uint8_t bit_size; /* bit_size to enforce */ - nir_tex_src_type match_src; /* if bit_size is 0, match bit size of this */ -} nir_tex_src_type_constraint, nir_tex_src_type_constraints[nir_num_tex_src_types]; - -bool nir_legalize_16bit_sampler_srcs(nir_shader *nir, - nir_tex_src_type_constraints constraints); - -bool nir_lower_point_size(nir_shader *shader, float min, float max); - -void nir_lower_texcoord_replace(nir_shader *s, unsigned coord_replace, - bool point_coord_is_sysval, bool yinvert); - -void nir_lower_texcoord_replace_late(nir_shader *s, unsigned coord_replace, - bool point_coord_is_sysval); - -typedef enum { - nir_lower_interpolation_at_sample = (1 << 1), - nir_lower_interpolation_at_offset = (1 << 2), - nir_lower_interpolation_centroid = (1 << 3), - nir_lower_interpolation_pixel = (1 << 4), - nir_lower_interpolation_sample = (1 << 5), -} nir_lower_interpolation_options; - -bool nir_lower_interpolation(nir_shader *shader, - nir_lower_interpolation_options options); - -typedef enum { - nir_lower_discard_if_to_cf = (1 << 0), - nir_lower_demote_if_to_cf = (1 << 1), - nir_lower_terminate_if_to_cf = (1 << 2), -} nir_lower_discard_if_options; - -bool nir_lower_discard_if(nir_shader *shader, nir_lower_discard_if_options options); - -bool nir_lower_discard_or_demote(nir_shader *shader, - bool force_correct_quad_ops_after_discard); - -bool nir_lower_memory_model(nir_shader *shader); - -bool nir_lower_goto_ifs(nir_shader *shader); -bool nir_lower_continue_constructs(nir_shader *shader); - -bool nir_shader_uses_view_index(nir_shader *shader); -bool nir_can_lower_multiview(nir_shader *shader); -bool nir_lower_multiview(nir_shader *shader, uint32_t view_mask); - -typedef enum { - nir_lower_fp16_rtz = (1 << 0), - nir_lower_fp16_rtne = (1 << 1), - nir_lower_fp16_ru = (1 << 2), - nir_lower_fp16_rd = (1 << 3), - nir_lower_fp16_all = 0xf, -} nir_lower_fp16_cast_options; -bool nir_lower_fp16_casts(nir_shader *shader, nir_lower_fp16_cast_options options); -bool nir_normalize_cubemap_coords(nir_shader *shader); - -bool nir_shader_supports_implicit_lod(nir_shader *shader); - -void nir_live_ssa_defs_impl(nir_function_impl *impl); - -const BITSET_WORD *nir_get_live_ssa_defs(nir_cursor cursor, void *mem_ctx); - -void nir_loop_analyze_impl(nir_function_impl *impl, - nir_variable_mode indirect_mask, - bool force_unroll_sampler_indirect); - -bool nir_ssa_defs_interfere(nir_ssa_def *a, nir_ssa_def *b); - -bool nir_repair_ssa_impl(nir_function_impl *impl); -bool nir_repair_ssa(nir_shader *shader); - -void nir_convert_loop_to_lcssa(nir_loop *loop); -bool nir_convert_to_lcssa(nir_shader *shader, bool skip_invariants, bool skip_bool_invariants); -void nir_divergence_analysis(nir_shader *shader); -bool nir_update_instr_divergence(nir_shader *shader, nir_instr *instr); -bool nir_has_divergent_loop(nir_shader *shader); - -/* If phi_webs_only is true, only convert SSA values involved in phi nodes to - * registers. If false, convert all values (even those not involved in a phi - * node) to registers. - */ -bool nir_convert_from_ssa(nir_shader *shader, bool phi_webs_only); - -bool nir_lower_phis_to_regs_block(nir_block *block); -bool nir_lower_ssa_defs_to_regs_block(nir_block *block); -bool nir_rematerialize_derefs_in_use_blocks_impl(nir_function_impl *impl); - -bool nir_lower_samplers(nir_shader *shader); -bool nir_lower_cl_images(nir_shader *shader, bool lower_image_derefs, bool lower_sampler_derefs); -bool nir_dedup_inline_samplers(nir_shader *shader); -bool nir_lower_ssbo(nir_shader *shader); -bool nir_lower_helper_writes(nir_shader *shader, bool lower_plain_stores); - -typedef struct nir_lower_printf_options { - bool treat_doubles_as_floats : 1; - unsigned max_buffer_size; -} nir_lower_printf_options; - -bool nir_lower_printf(nir_shader *nir, const nir_lower_printf_options *options); - -/* This is here for unit tests. */ -bool nir_opt_comparison_pre_impl(nir_function_impl *impl); - -bool nir_opt_comparison_pre(nir_shader *shader); - -typedef struct nir_opt_access_options { - bool is_vulkan; -} nir_opt_access_options; - -bool nir_opt_access(nir_shader *shader, const nir_opt_access_options *options); -bool nir_opt_algebraic(nir_shader *shader); -bool nir_opt_algebraic_before_ffma(nir_shader *shader); -bool nir_opt_algebraic_late(nir_shader *shader); -bool nir_opt_algebraic_distribute_src_mods(nir_shader *shader); -bool nir_opt_constant_folding(nir_shader *shader); - -/* Try to combine a and b into a. Return true if combination was possible, - * which will result in b being removed by the pass. Return false if - * combination wasn't possible. - */ -typedef bool (*nir_combine_barrier_cb)( - nir_intrinsic_instr *a, nir_intrinsic_instr *b, void *data); - -bool nir_opt_combine_barriers(nir_shader *shader, - nir_combine_barrier_cb combine_cb, - void *data); - -bool nir_opt_combine_stores(nir_shader *shader, nir_variable_mode modes); - -bool nir_copy_prop_impl(nir_function_impl *impl); -bool nir_copy_prop(nir_shader *shader); - -bool nir_opt_copy_prop_vars(nir_shader *shader); - -bool nir_opt_cse(nir_shader *shader); - -bool nir_opt_dce(nir_shader *shader); - -bool nir_opt_dead_cf(nir_shader *shader); - -bool nir_opt_dead_write_vars(nir_shader *shader); - -bool nir_opt_deref_impl(nir_function_impl *impl); -bool nir_opt_deref(nir_shader *shader); - -bool nir_opt_find_array_copies(nir_shader *shader); - -bool nir_opt_fragdepth(nir_shader *shader); - -bool nir_opt_gcm(nir_shader *shader, bool value_number); - -bool nir_opt_idiv_const(nir_shader *shader, unsigned min_bit_size); - -typedef enum { - nir_opt_if_aggressive_last_continue = (1 << 0), - nir_opt_if_optimize_phi_true_false = (1 << 1), -} nir_opt_if_options; - -bool nir_opt_if(nir_shader *shader, nir_opt_if_options options); - -bool nir_opt_intrinsics(nir_shader *shader); - -bool nir_opt_large_constants(nir_shader *shader, - glsl_type_size_align_func size_align, - unsigned threshold); - -bool nir_opt_loop_unroll(nir_shader *shader); - -typedef enum { - nir_move_const_undef = (1 << 0), - nir_move_load_ubo = (1 << 1), - nir_move_load_input = (1 << 2), - nir_move_comparisons = (1 << 3), - nir_move_copies = (1 << 4), - nir_move_load_ssbo = (1 << 5), - nir_move_load_uniform = (1 << 6), -} nir_move_options; - -bool nir_can_move_instr(nir_instr *instr, nir_move_options options); - -bool nir_opt_sink(nir_shader *shader, nir_move_options options); - -bool nir_opt_move(nir_shader *shader, nir_move_options options); - -typedef struct { - /** nir_load_uniform max base offset */ - uint32_t uniform_max; - - /** nir_load_ubo_vec4 max base offset */ - uint32_t ubo_vec4_max; - - /** nir_var_mem_shared max base offset */ - uint32_t shared_max; - - /** nir_load/store_buffer_amd max base offset */ - uint32_t buffer_max; -} nir_opt_offsets_options; - -bool nir_opt_offsets(nir_shader *shader, const nir_opt_offsets_options *options); - -bool nir_opt_peephole_select(nir_shader *shader, unsigned limit, - bool indirect_load_ok, bool expensive_alu_ok); - -bool nir_opt_rematerialize_compares(nir_shader *shader); - -bool nir_opt_remove_phis(nir_shader *shader); -bool nir_opt_remove_phis_block(nir_block *block); - -bool nir_opt_phi_precision(nir_shader *shader); - -bool nir_opt_shrink_stores(nir_shader *shader, bool shrink_image_store); - -bool nir_opt_shrink_vectors(nir_shader *shader); - -bool nir_opt_trivial_continues(nir_shader *shader); - -bool nir_opt_undef(nir_shader *shader); - -bool nir_lower_undef_to_zero(nir_shader *shader); - -bool nir_opt_uniform_atomics(nir_shader *shader); - -bool nir_opt_vectorize(nir_shader *shader, nir_vectorize_cb filter, - void *data); - -bool nir_opt_conditional_discard(nir_shader *shader); -bool nir_opt_move_discards_to_top(nir_shader *shader); - -bool nir_opt_ray_queries(nir_shader *shader); - -bool nir_opt_ray_query_ranges(nir_shader *shader); - -void nir_sweep(nir_shader *shader); - -void nir_remap_dual_slot_attributes(nir_shader *shader, - uint64_t *dual_slot_inputs); -uint64_t nir_get_single_slot_attribs_mask(uint64_t attribs, uint64_t dual_slot); - -nir_intrinsic_op nir_intrinsic_from_system_value(gl_system_value val); -gl_system_value nir_system_value_from_intrinsic(nir_intrinsic_op intrin); - -static inline bool -nir_variable_is_in_ubo(const nir_variable *var) -{ - return (var->data.mode == nir_var_mem_ubo && - var->interface_type != NULL); -} - -static inline bool -nir_variable_is_in_ssbo(const nir_variable *var) -{ - return (var->data.mode == nir_var_mem_ssbo && - var->interface_type != NULL); -} - -static inline bool -nir_variable_is_in_block(const nir_variable *var) -{ - return nir_variable_is_in_ubo(var) || nir_variable_is_in_ssbo(var); -} - -/* See default_ub_config in nir_range_analysis.c for documentation. */ -typedef struct nir_unsigned_upper_bound_config { - unsigned min_subgroup_size; - unsigned max_subgroup_size; - unsigned max_workgroup_invocations; - unsigned max_workgroup_count[3]; - unsigned max_workgroup_size[3]; - - uint32_t vertex_attrib_max[32]; -} nir_unsigned_upper_bound_config; - -uint32_t -nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, - nir_ssa_scalar scalar, - const nir_unsigned_upper_bound_config *config); - -bool -nir_addition_might_overflow(nir_shader *shader, struct hash_table *range_ht, - nir_ssa_scalar ssa, unsigned const_val, - const nir_unsigned_upper_bound_config *config); - -typedef struct { - /* True if gl_DrawID is considered uniform, i.e. if the preamble is run - * at least once per "internal" draw rather than per user-visible draw. - */ - bool drawid_uniform; - - /* True if the subgroup size is uniform. */ - bool subgroup_size_uniform; - - /* size/align for load/store_preamble. */ - void (*def_size)(nir_ssa_def *def, unsigned *size, unsigned *align); - - /* Total available size for load/store_preamble storage, in units - * determined by def_size. - */ - unsigned preamble_storage_size; - - /* Give the cost for an instruction. nir_opt_preamble will prioritize - * instructions with higher costs. Instructions with cost 0 may still be - * lifted, but only when required to lift other instructions with non-0 - * cost (e.g. a load_const source of an expression). - */ - float (*instr_cost_cb)(nir_instr *instr, const void *data); - - /* Give the cost of rewriting the instruction to use load_preamble. This - * may happen from inserting move instructions, etc. If the benefit doesn't - * exceed the cost here then we won't rewrite it. - */ - float (*rewrite_cost_cb)(nir_ssa_def *def, const void *data); - - /* Instructions whose definitions should not be rewritten. These could - * still be moved to the preamble, but they shouldn't be the root of a - * replacement expression. Instructions with cost 0 and derefs are - * automatically included by the pass. - */ - nir_instr_filter_cb avoid_instr_cb; - - const void *cb_data; -} nir_opt_preamble_options; - -bool -nir_opt_preamble(nir_shader *shader, - const nir_opt_preamble_options *options, - unsigned *size); - -nir_function_impl *nir_shader_get_preamble(nir_shader *shader); - -bool nir_lower_point_smooth(nir_shader *shader); -bool nir_lower_poly_line_smooth(nir_shader *shader, unsigned num_smooth_aa_sample); - -bool nir_mod_analysis(nir_ssa_scalar val, nir_alu_type val_type, unsigned div, unsigned *mod); - -#include "nir_inline_helpers.h" - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* NIR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_algebraic.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_algebraic.py deleted file mode 100644 index 21ef9d7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_algebraic.py +++ /dev/null @@ -1,1287 +0,0 @@ -# -# Copyright (C) 2014 Intel Corporation -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. - -import ast -from collections import defaultdict -import itertools -import struct -import sys -import mako.template -import re -import traceback - -from nir_opcodes import opcodes, type_sizes - -# This should be the same as NIR_SEARCH_MAX_COMM_OPS in nir_search.c -nir_search_max_comm_ops = 8 - -# These opcodes are only employed by nir_search. This provides a mapping from -# opcode to destination type. -conv_opcode_types = { - 'i2f' : 'float', - 'u2f' : 'float', - 'f2f' : 'float', - 'f2u' : 'uint', - 'f2i' : 'int', - 'u2u' : 'uint', - 'i2i' : 'int', - 'b2f' : 'float', - 'b2i' : 'int', - 'i2b' : 'bool', - 'f2b' : 'bool', -} - -def get_cond_index(conds, cond): - if cond: - if cond in conds: - return conds[cond] - else: - cond_index = len(conds) - conds[cond] = cond_index - return cond_index - else: - return -1 - -def get_c_opcode(op): - if op in conv_opcode_types: - return 'nir_search_op_' + op - else: - return 'nir_op_' + op - -_type_re = re.compile(r"(?Pint|uint|bool|float)?(?P\d+)?") - -def type_bits(type_str): - m = _type_re.match(type_str) - assert m.group('type') - - if m.group('bits') is None: - return 0 - else: - return int(m.group('bits')) - -# Represents a set of variables, each with a unique id -class VarSet(object): - def __init__(self): - self.names = {} - self.ids = itertools.count() - self.immutable = False; - - def __getitem__(self, name): - if name not in self.names: - assert not self.immutable, "Unknown replacement variable: " + name - self.names[name] = next(self.ids) - - return self.names[name] - - def lock(self): - self.immutable = True - -class SearchExpression(object): - def __init__(self, expr): - self.opcode = expr[0] - self.sources = expr[1:] - self.ignore_exact = False - - @staticmethod - def create(val): - if isinstance(val, tuple): - return SearchExpression(val) - else: - assert(isinstance(val, SearchExpression)) - return val - - def __repr__(self): - l = [self.opcode, *self.sources] - if self.ignore_exact: - l.append('ignore_exact') - return repr((*l,)) - -class Value(object): - @staticmethod - def create(val, name_base, varset, algebraic_pass): - if isinstance(val, bytes): - val = val.decode('utf-8') - - if isinstance(val, tuple) or isinstance(val, SearchExpression): - return Expression(val, name_base, varset, algebraic_pass) - elif isinstance(val, Expression): - return val - elif isinstance(val, str): - return Variable(val, name_base, varset, algebraic_pass) - elif isinstance(val, (bool, float, int)): - return Constant(val, name_base) - - def __init__(self, val, name, type_str): - self.in_val = str(val) - self.name = name - self.type_str = type_str - - def __str__(self): - return self.in_val - - def get_bit_size(self): - """Get the physical bit-size that has been chosen for this value, or if - there is none, the canonical value which currently represents this - bit-size class. Variables will be preferred, i.e. if there are any - variables in the equivalence class, the canonical value will be a - variable. We do this since we'll need to know which variable each value - is equivalent to when constructing the replacement expression. This is - the "find" part of the union-find algorithm. - """ - bit_size = self - - while isinstance(bit_size, Value): - if bit_size._bit_size is None: - break - bit_size = bit_size._bit_size - - if bit_size is not self: - self._bit_size = bit_size - return bit_size - - def set_bit_size(self, other): - """Make self.get_bit_size() return what other.get_bit_size() return - before calling this, or just "other" if it's a concrete bit-size. This is - the "union" part of the union-find algorithm. - """ - - self_bit_size = self.get_bit_size() - other_bit_size = other if isinstance(other, int) else other.get_bit_size() - - if self_bit_size == other_bit_size: - return - - self_bit_size._bit_size = other_bit_size - - @property - def type_enum(self): - return "nir_search_value_" + self.type_str - - @property - def c_bit_size(self): - bit_size = self.get_bit_size() - if isinstance(bit_size, int): - return bit_size - elif isinstance(bit_size, Variable): - return -bit_size.index - 1 - else: - # If the bit-size class is neither a variable, nor an actual bit-size, then - # - If it's in the search expression, we don't need to check anything - # - If it's in the replace expression, either it's ambiguous (in which - # case we'd reject it), or it equals the bit-size of the search value - # We represent these cases with a 0 bit-size. - return 0 - - __template = mako.template.Template(""" { .${val.type_str} = { - { ${val.type_enum}, ${val.c_bit_size} }, -% if isinstance(val, Constant): - ${val.type()}, { ${val.hex()} /* ${val.value} */ }, -% elif isinstance(val, Variable): - ${val.index}, /* ${val.var_name} */ - ${'true' if val.is_constant else 'false'}, - ${val.type() or 'nir_type_invalid' }, - ${val.cond_index}, - ${val.swizzle()}, -% elif isinstance(val, Expression): - ${'true' if val.inexact else 'false'}, - ${'true' if val.exact else 'false'}, - ${'true' if val.ignore_exact else 'false'}, - ${val.c_opcode()}, - ${val.comm_expr_idx}, ${val.comm_exprs}, - { ${', '.join(src.array_index for src in val.sources)} }, - ${val.cond_index}, -% endif - } }, -""") - - def render(self, cache): - struct_init = self.__template.render(val=self, - Constant=Constant, - Variable=Variable, - Expression=Expression) - if struct_init in cache: - # If it's in the cache, register a name remap in the cache and render - # only a comment saying it's been remapped - self.array_index = cache[struct_init] - return " /* {} -> {} in the cache */\n".format(self.name, - cache[struct_init]) - else: - self.array_index = str(cache["next_index"]) - cache[struct_init] = self.array_index - cache["next_index"] += 1 - return struct_init - -_constant_re = re.compile(r"(?P[^@\(]+)(?:@(?P\d+))?") - -class Constant(Value): - def __init__(self, val, name): - Value.__init__(self, val, name, "constant") - - if isinstance(val, (str)): - m = _constant_re.match(val) - self.value = ast.literal_eval(m.group('value')) - self._bit_size = int(m.group('bits')) if m.group('bits') else None - else: - self.value = val - self._bit_size = None - - if isinstance(self.value, bool): - assert self._bit_size is None or self._bit_size == 1 - self._bit_size = 1 - - def hex(self): - if isinstance(self.value, (bool)): - return 'NIR_TRUE' if self.value else 'NIR_FALSE' - if isinstance(self.value, int): - return hex(self.value) - elif isinstance(self.value, float): - return hex(struct.unpack('Q', struct.pack('d', self.value))[0]) - else: - assert False - - def type(self): - if isinstance(self.value, (bool)): - return "nir_type_bool" - elif isinstance(self.value, int): - return "nir_type_int" - elif isinstance(self.value, float): - return "nir_type_float" - - def equivalent(self, other): - """Check that two constants are equivalent. - - This is check is much weaker than equality. One generally cannot be - used in place of the other. Using this implementation for the __eq__ - will break BitSizeValidator. - - """ - if not isinstance(other, type(self)): - return False - - return self.value == other.value - -# The $ at the end forces there to be an error if any part of the string -# doesn't match one of the field patterns. -_var_name_re = re.compile(r"(?P#)?(?P\w+)" - r"(?:@(?Pint|uint|bool|float)?(?P\d+)?)?" - r"(?P\([^\)]+\))?" - r"(?P\.[xyzwabcdefghijklmnop]+)?" - r"$") - -class Variable(Value): - def __init__(self, val, name, varset, algebraic_pass): - Value.__init__(self, val, name, "variable") - - m = _var_name_re.match(val) - assert m and m.group('name') is not None, \ - "Malformed variable name \"{}\".".format(val) - - self.var_name = m.group('name') - - # Prevent common cases where someone puts quotes around a literal - # constant. If we want to support names that have numeric or - # punctuation characters, we can me the first assertion more flexible. - assert self.var_name.isalpha() - assert self.var_name != 'True' - assert self.var_name != 'False' - - self.is_constant = m.group('const') is not None - self.cond_index = get_cond_index(algebraic_pass.variable_cond, m.group('cond')) - self.required_type = m.group('type') - self._bit_size = int(m.group('bits')) if m.group('bits') else None - self.swiz = m.group('swiz') - - if self.required_type == 'bool': - if self._bit_size is not None: - assert self._bit_size in type_sizes(self.required_type) - else: - self._bit_size = 1 - - if self.required_type is not None: - assert self.required_type in ('float', 'bool', 'int', 'uint') - - self.index = varset[self.var_name] - - def type(self): - if self.required_type == 'bool': - return "nir_type_bool" - elif self.required_type in ('int', 'uint'): - return "nir_type_int" - elif self.required_type == 'float': - return "nir_type_float" - - def equivalent(self, other): - """Check that two variables are equivalent. - - This is check is much weaker than equality. One generally cannot be - used in place of the other. Using this implementation for the __eq__ - will break BitSizeValidator. - - """ - if not isinstance(other, type(self)): - return False - - return self.index == other.index - - def swizzle(self): - if self.swiz is not None: - swizzles = {'x' : 0, 'y' : 1, 'z' : 2, 'w' : 3, - 'a' : 0, 'b' : 1, 'c' : 2, 'd' : 3, - 'e' : 4, 'f' : 5, 'g' : 6, 'h' : 7, - 'i' : 8, 'j' : 9, 'k' : 10, 'l' : 11, - 'm' : 12, 'n' : 13, 'o' : 14, 'p' : 15 } - return '{' + ', '.join([str(swizzles[c]) for c in self.swiz[1:]]) + '}' - return '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}' - -_opcode_re = re.compile(r"(?P~)?(?P!)?(?P\w+)(?:@(?P\d+))?" - r"(?P\([^\)]+\))?") - -class Expression(Value): - def __init__(self, expr, name_base, varset, algebraic_pass): - Value.__init__(self, expr, name_base, "expression") - - expr = SearchExpression.create(expr) - - m = _opcode_re.match(expr.opcode) - assert m and m.group('opcode') is not None - - self.opcode = m.group('opcode') - self._bit_size = int(m.group('bits')) if m.group('bits') else None - self.inexact = m.group('inexact') is not None - self.exact = m.group('exact') is not None - self.ignore_exact = expr.ignore_exact - self.cond = m.group('cond') - - assert not self.inexact or not self.exact, \ - 'Expression cannot be both exact and inexact.' - - # "many-comm-expr" isn't really a condition. It's notification to the - # generator that this pattern is known to have too many commutative - # expressions, and an error should not be generated for this case. - self.many_commutative_expressions = False - if self.cond and self.cond.find("many-comm-expr") >= 0: - # Split the condition into a comma-separated list. Remove - # "many-comm-expr". If there is anything left, put it back together. - c = self.cond[1:-1].split(",") - c.remove("many-comm-expr") - assert(len(c) <= 1) - - self.cond = c[0] if c else None - self.many_commutative_expressions = True - - # Deduplicate references to the condition functions for the expressions - # and save the index for the order they were added. - self.cond_index = get_cond_index(algebraic_pass.expression_cond, self.cond) - - self.sources = [ Value.create(src, "{0}_{1}".format(name_base, i), varset, algebraic_pass) - for (i, src) in enumerate(expr.sources) ] - - # nir_search_expression::srcs is hard-coded to 4 - assert len(self.sources) <= 4 - - if self.opcode in conv_opcode_types: - assert self._bit_size is None, \ - 'Expression cannot use an unsized conversion opcode with ' \ - 'an explicit size; that\'s silly.' - - self.__index_comm_exprs(0) - - def equivalent(self, other): - """Check that two variables are equivalent. - - This is check is much weaker than equality. One generally cannot be - used in place of the other. Using this implementation for the __eq__ - will break BitSizeValidator. - - This implementation does not check for equivalence due to commutativity, - but it could. - - """ - if not isinstance(other, type(self)): - return False - - if len(self.sources) != len(other.sources): - return False - - if self.opcode != other.opcode: - return False - - return all(s.equivalent(o) for s, o in zip(self.sources, other.sources)) - - def __index_comm_exprs(self, base_idx): - """Recursively count and index commutative expressions - """ - self.comm_exprs = 0 - - # A note about the explicit "len(self.sources)" check. The list of - # sources comes from user input, and that input might be bad. Check - # that the expected second source exists before accessing it. Without - # this check, a unit test that does "('iadd', 'a')" will crash. - if self.opcode not in conv_opcode_types and \ - "2src_commutative" in opcodes[self.opcode].algebraic_properties and \ - len(self.sources) >= 2 and \ - not self.sources[0].equivalent(self.sources[1]): - self.comm_expr_idx = base_idx - self.comm_exprs += 1 - else: - self.comm_expr_idx = -1 - - for s in self.sources: - if isinstance(s, Expression): - s.__index_comm_exprs(base_idx + self.comm_exprs) - self.comm_exprs += s.comm_exprs - - return self.comm_exprs - - def c_opcode(self): - return get_c_opcode(self.opcode) - - def render(self, cache): - srcs = "".join(src.render(cache) for src in self.sources) - return srcs + super(Expression, self).render(cache) - -class BitSizeValidator(object): - """A class for validating bit sizes of expressions. - - NIR supports multiple bit-sizes on expressions in order to handle things - such as fp64. The source and destination of every ALU operation is - assigned a type and that type may or may not specify a bit size. Sources - and destinations whose type does not specify a bit size are considered - "unsized" and automatically take on the bit size of the corresponding - register or SSA value. NIR has two simple rules for bit sizes that are - validated by nir_validator: - - 1) A given SSA def or register has a single bit size that is respected by - everything that reads from it or writes to it. - - 2) The bit sizes of all unsized inputs/outputs on any given ALU - instruction must match. They need not match the sized inputs or - outputs but they must match each other. - - In order to keep nir_algebraic relatively simple and easy-to-use, - nir_search supports a type of bit-size inference based on the two rules - above. This is similar to type inference in many common programming - languages. If, for instance, you are constructing an add operation and you - know the second source is 16-bit, then you know that the other source and - the destination must also be 16-bit. There are, however, cases where this - inference can be ambiguous or contradictory. Consider, for instance, the - following transformation: - - (('usub_borrow', a, b), ('b2i@32', ('ult', a, b))) - - This transformation can potentially cause a problem because usub_borrow is - well-defined for any bit-size of integer. However, b2i always generates a - 32-bit result so it could end up replacing a 64-bit expression with one - that takes two 64-bit values and produces a 32-bit value. As another - example, consider this expression: - - (('bcsel', a, b, 0), ('iand', a, b)) - - In this case, in the search expression a must be 32-bit but b can - potentially have any bit size. If we had a 64-bit b value, we would end up - trying to and a 32-bit value with a 64-bit value which would be invalid - - This class solves that problem by providing a validation layer that proves - that a given search-and-replace operation is 100% well-defined before we - generate any code. This ensures that bugs are caught at compile time - rather than at run time. - - Each value maintains a "bit-size class", which is either an actual bit size - or an equivalence class with other values that must have the same bit size. - The validator works by combining bit-size classes with each other according - to the NIR rules outlined above, checking that there are no inconsistencies. - When doing this for the replacement expression, we make sure to never change - the equivalence class of any of the search values. We could make the example - transforms above work by doing some extra run-time checking of the search - expression, but we make the user specify those constraints themselves, to - avoid any surprises. Since the replacement bitsizes can only be connected to - the source bitsize via variables (variables must have the same bitsize in - the source and replacment expressions) or the roots of the expression (the - replacement expression must produce the same bit size as the search - expression), we prevent merging a variable with anything when processing the - replacement expression, or specializing the search bitsize - with anything. The former prevents - - (('bcsel', a, b, 0), ('iand', a, b)) - - from being allowed, since we'd have to merge the bitsizes for a and b due to - the 'iand', while the latter prevents - - (('usub_borrow', a, b), ('b2i@32', ('ult', a, b))) - - from being allowed, since the search expression has the bit size of a and b, - which can't be specialized to 32 which is the bitsize of the replace - expression. It also prevents something like: - - (('b2i', ('i2b', a)), ('ineq', a, 0)) - - since the bitsize of 'b2i', which can be anything, can't be specialized to - the bitsize of a. - - After doing all this, we check that every subexpression of the replacement - was assigned a constant bitsize, the bitsize of a variable, or the bitsize - of the search expresssion, since those are the things that are known when - constructing the replacement expresssion. Finally, we record the bitsize - needed in nir_search_value so that we know what to do when building the - replacement expression. - """ - - def __init__(self, varset): - self._var_classes = [None] * len(varset.names) - - def compare_bitsizes(self, a, b): - """Determines which bitsize class is a specialization of the other, or - whether neither is. When we merge two different bitsizes, the - less-specialized bitsize always points to the more-specialized one, so - that calling get_bit_size() always gets you the most specialized bitsize. - The specialization partial order is given by: - - Physical bitsizes are always the most specialized, and a different - bitsize can never specialize another. - - In the search expression, variables can always be specialized to each - other and to physical bitsizes. In the replace expression, we disallow - this to avoid adding extra constraints to the search expression that - the user didn't specify. - - Expressions and constants without a bitsize can always be specialized to - each other and variables, but not the other way around. - - We return -1 if a <= b (b can be specialized to a), 0 if a = b, 1 if a >= b, - and None if they are not comparable (neither a <= b nor b <= a). - """ - if isinstance(a, int): - if isinstance(b, int): - return 0 if a == b else None - elif isinstance(b, Variable): - return -1 if self.is_search else None - else: - return -1 - elif isinstance(a, Variable): - if isinstance(b, int): - return 1 if self.is_search else None - elif isinstance(b, Variable): - return 0 if self.is_search or a.index == b.index else None - else: - return -1 - else: - if isinstance(b, int): - return 1 - elif isinstance(b, Variable): - return 1 - else: - return 0 - - def unify_bit_size(self, a, b, error_msg): - """Record that a must have the same bit-size as b. If both - have been assigned conflicting physical bit-sizes, call "error_msg" with - the bit-sizes of self and other to get a message and raise an error. - In the replace expression, disallow merging variables with other - variables and physical bit-sizes as well. - """ - a_bit_size = a.get_bit_size() - b_bit_size = b if isinstance(b, int) else b.get_bit_size() - - cmp_result = self.compare_bitsizes(a_bit_size, b_bit_size) - - assert cmp_result is not None, \ - error_msg(a_bit_size, b_bit_size) - - if cmp_result < 0: - b_bit_size.set_bit_size(a) - elif not isinstance(a_bit_size, int): - a_bit_size.set_bit_size(b) - - def merge_variables(self, val): - """Perform the first part of type inference by merging all the different - uses of the same variable. We always do this as if we're in the search - expression, even if we're actually not, since otherwise we'd get errors - if the search expression specified some constraint but the replace - expression didn't, because we'd be merging a variable and a constant. - """ - if isinstance(val, Variable): - if self._var_classes[val.index] is None: - self._var_classes[val.index] = val - else: - other = self._var_classes[val.index] - self.unify_bit_size(other, val, - lambda other_bit_size, bit_size: - 'Variable {} has conflicting bit size requirements: ' \ - 'it must have bit size {} and {}'.format( - val.var_name, other_bit_size, bit_size)) - elif isinstance(val, Expression): - for src in val.sources: - self.merge_variables(src) - - def validate_value(self, val): - """Validate the an expression by performing classic Hindley-Milner - type inference on bitsizes. This will detect if there are any conflicting - requirements, and unify variables so that we know which variables must - have the same bitsize. If we're operating on the replace expression, we - will refuse to merge different variables together or merge a variable - with a constant, in order to prevent surprises due to rules unexpectedly - not matching at runtime. - """ - if not isinstance(val, Expression): - return - - # Generic conversion ops are special in that they have a single unsized - # source and an unsized destination and the two don't have to match. - # This means there's no validation or unioning to do here besides the - # len(val.sources) check. - if val.opcode in conv_opcode_types: - assert len(val.sources) == 1, \ - "Expression {} has {} sources, expected 1".format( - val, len(val.sources)) - self.validate_value(val.sources[0]) - return - - nir_op = opcodes[val.opcode] - assert len(val.sources) == nir_op.num_inputs, \ - "Expression {} has {} sources, expected {}".format( - val, len(val.sources), nir_op.num_inputs) - - for src in val.sources: - self.validate_value(src) - - dst_type_bits = type_bits(nir_op.output_type) - - # First, unify all the sources. That way, an error coming up because two - # sources have an incompatible bit-size won't produce an error message - # involving the destination. - first_unsized_src = None - for src_type, src in zip(nir_op.input_types, val.sources): - src_type_bits = type_bits(src_type) - if src_type_bits == 0: - if first_unsized_src is None: - first_unsized_src = src - continue - - if self.is_search: - self.unify_bit_size(first_unsized_src, src, - lambda first_unsized_src_bit_size, src_bit_size: - 'Source {} of {} must have bit size {}, while source {} ' \ - 'must have incompatible bit size {}'.format( - first_unsized_src, val, first_unsized_src_bit_size, - src, src_bit_size)) - else: - self.unify_bit_size(first_unsized_src, src, - lambda first_unsized_src_bit_size, src_bit_size: - 'Sources {} (bit size of {}) and {} (bit size of {}) ' \ - 'of {} may not have the same bit size when building the ' \ - 'replacement expression.'.format( - first_unsized_src, first_unsized_src_bit_size, src, - src_bit_size, val)) - else: - if self.is_search: - self.unify_bit_size(src, src_type_bits, - lambda src_bit_size, unused: - '{} must have {} bits, but as a source of nir_op_{} '\ - 'it must have {} bits'.format( - src, src_bit_size, nir_op.name, src_type_bits)) - else: - self.unify_bit_size(src, src_type_bits, - lambda src_bit_size, unused: - '{} has the bit size of {}, but as a source of ' \ - 'nir_op_{} it must have {} bits, which may not be the ' \ - 'same'.format( - src, src_bit_size, nir_op.name, src_type_bits)) - - if dst_type_bits == 0: - if first_unsized_src is not None: - if self.is_search: - self.unify_bit_size(val, first_unsized_src, - lambda val_bit_size, src_bit_size: - '{} must have the bit size of {}, while its source {} ' \ - 'must have incompatible bit size {}'.format( - val, val_bit_size, first_unsized_src, src_bit_size)) - else: - self.unify_bit_size(val, first_unsized_src, - lambda val_bit_size, src_bit_size: - '{} must have {} bits, but its source {} ' \ - '(bit size of {}) may not have that bit size ' \ - 'when building the replacement.'.format( - val, val_bit_size, first_unsized_src, src_bit_size)) - else: - self.unify_bit_size(val, dst_type_bits, - lambda dst_bit_size, unused: - '{} must have {} bits, but as a destination of nir_op_{} ' \ - 'it must have {} bits'.format( - val, dst_bit_size, nir_op.name, dst_type_bits)) - - def validate_replace(self, val, search): - bit_size = val.get_bit_size() - assert isinstance(bit_size, int) or isinstance(bit_size, Variable) or \ - bit_size == search.get_bit_size(), \ - 'Ambiguous bit size for replacement value {}: ' \ - 'it cannot be deduced from a variable, a fixed bit size ' \ - 'somewhere, or the search expression.'.format(val) - - if isinstance(val, Expression): - for src in val.sources: - self.validate_replace(src, search) - elif isinstance(val, Variable): - # These catch problems when someone copies and pastes the search - # into the replacement. - assert not val.is_constant, \ - 'Replacement variables must not be marked constant.' - - assert val.cond_index == -1, \ - 'Replacement variables must not have a condition.' - - assert not val.required_type, \ - 'Replacement variables must not have a required type.' - - def validate(self, search, replace): - self.is_search = True - self.merge_variables(search) - self.merge_variables(replace) - self.validate_value(search) - - self.is_search = False - self.validate_value(replace) - - # Check that search is always more specialized than replace. Note that - # we're doing this in replace mode, disallowing merging variables. - search_bit_size = search.get_bit_size() - replace_bit_size = replace.get_bit_size() - cmp_result = self.compare_bitsizes(search_bit_size, replace_bit_size) - - assert cmp_result is not None and cmp_result <= 0, \ - 'The search expression bit size {} and replace expression ' \ - 'bit size {} may not be the same'.format( - search_bit_size, replace_bit_size) - - replace.set_bit_size(search) - - self.validate_replace(replace, search) - -_optimization_ids = itertools.count() - -condition_list = ['true'] - -class SearchAndReplace(object): - def __init__(self, transform, algebraic_pass): - self.id = next(_optimization_ids) - - search = transform[0] - replace = transform[1] - if len(transform) > 2: - self.condition = transform[2] - else: - self.condition = 'true' - - if self.condition not in condition_list: - condition_list.append(self.condition) - self.condition_index = condition_list.index(self.condition) - - varset = VarSet() - if isinstance(search, Expression): - self.search = search - else: - self.search = Expression(search, "search{0}".format(self.id), varset, algebraic_pass) - - varset.lock() - - if isinstance(replace, Value): - self.replace = replace - else: - self.replace = Value.create(replace, "replace{0}".format(self.id), varset, algebraic_pass) - - BitSizeValidator(varset).validate(self.search, self.replace) - -class TreeAutomaton(object): - """This class calculates a bottom-up tree automaton to quickly search for - the left-hand sides of tranforms. Tree automatons are a generalization of - classical NFA's and DFA's, where the transition function determines the - state of the parent node based on the state of its children. We construct a - deterministic automaton to match patterns, using a similar algorithm to the - classical NFA to DFA construction. At the moment, it only matches opcodes - and constants (without checking the actual value), leaving more detailed - checking to the search function which actually checks the leaves. The - automaton acts as a quick filter for the search function, requiring only n - + 1 table lookups for each n-source operation. The implementation is based - on the theory described in "Tree Automatons: Two Taxonomies and a Toolkit." - In the language of that reference, this is a frontier-to-root deterministic - automaton using only symbol filtering. The filtering is crucial to reduce - both the time taken to generate the tables and the size of the tables. - """ - def __init__(self, transforms): - self.patterns = [t.search for t in transforms] - self._compute_items() - self._build_table() - #print('num items: {}'.format(len(set(self.items.values())))) - #print('num states: {}'.format(len(self.states))) - #for state, patterns in zip(self.states, self.patterns): - # print('{}: num patterns: {}'.format(state, len(patterns))) - - class IndexMap(object): - """An indexed list of objects, where one can either lookup an object by - index or find the index associated to an object quickly using a hash - table. Compared to a list, it has a constant time index(). Compared to a - set, it provides a stable iteration order. - """ - def __init__(self, iterable=()): - self.objects = [] - self.map = {} - for obj in iterable: - self.add(obj) - - def __getitem__(self, i): - return self.objects[i] - - def __contains__(self, obj): - return obj in self.map - - def __len__(self): - return len(self.objects) - - def __iter__(self): - return iter(self.objects) - - def clear(self): - self.objects = [] - self.map.clear() - - def index(self, obj): - return self.map[obj] - - def add(self, obj): - if obj in self.map: - return self.map[obj] - else: - index = len(self.objects) - self.objects.append(obj) - self.map[obj] = index - return index - - def __repr__(self): - return 'IndexMap([' + ', '.join(repr(e) for e in self.objects) + '])' - - class Item(object): - """This represents an "item" in the language of "Tree Automatons." This - is just a subtree of some pattern, which represents a potential partial - match at runtime. We deduplicate them, so that identical subtrees of - different patterns share the same object, and store some extra - information needed for the main algorithm as well. - """ - def __init__(self, opcode, children): - self.opcode = opcode - self.children = children - # These are the indices of patterns for which this item is the root node. - self.patterns = [] - # This the set of opcodes for parents of this item. Used to speed up - # filtering. - self.parent_ops = set() - - def __str__(self): - return '(' + ', '.join([self.opcode] + [str(c) for c in self.children]) + ')' - - def __repr__(self): - return str(self) - - def _compute_items(self): - """Build a set of all possible items, deduplicating them.""" - # This is a map from (opcode, sources) to item. - self.items = {} - - # The set of all opcodes used by the patterns. Used later to avoid - # building and emitting all the tables for opcodes that aren't used. - self.opcodes = self.IndexMap() - - def get_item(opcode, children, pattern=None): - commutative = len(children) >= 2 \ - and "2src_commutative" in opcodes[opcode].algebraic_properties - item = self.items.setdefault((opcode, children), - self.Item(opcode, children)) - if commutative: - self.items[opcode, (children[1], children[0]) + children[2:]] = item - if pattern is not None: - item.patterns.append(pattern) - return item - - self.wildcard = get_item("__wildcard", ()) - self.const = get_item("__const", ()) - - def process_subpattern(src, pattern=None): - if isinstance(src, Constant): - # Note: we throw away the actual constant value! - return self.const - elif isinstance(src, Variable): - if src.is_constant: - return self.const - else: - # Note: we throw away which variable it is here! This special - # item is equivalent to nu in "Tree Automatons." - return self.wildcard - else: - assert isinstance(src, Expression) - opcode = src.opcode - stripped = opcode.rstrip('0123456789') - if stripped in conv_opcode_types: - # Matches that use conversion opcodes with a specific type, - # like f2i1, are tricky. Either we construct the automaton to - # match specific NIR opcodes like nir_op_f2i1, in which case we - # need to create separate items for each possible NIR opcode - # for patterns that have a generic opcode like f2i, or we - # construct it to match the search opcode, in which case we - # need to map f2i1 to f2i when constructing the automaton. Here - # we do the latter. - opcode = stripped - self.opcodes.add(opcode) - children = tuple(process_subpattern(c) for c in src.sources) - item = get_item(opcode, children, pattern) - for i, child in enumerate(children): - child.parent_ops.add(opcode) - return item - - for i, pattern in enumerate(self.patterns): - process_subpattern(pattern, i) - - def _build_table(self): - """This is the core algorithm which builds up the transition table. It - is based off of Algorithm 5.7.38 "Reachability-based tabulation of Cl . - Comp_a and Filt_{a,i} using integers to identify match sets." It - simultaneously builds up a list of all possible "match sets" or - "states", where each match set represents the set of Item's that match a - given instruction, and builds up the transition table between states. - """ - # Map from opcode + filtered state indices to transitioned state. - self.table = defaultdict(dict) - # Bijection from state to index. q in the original algorithm is - # len(self.states) - self.states = self.IndexMap() - # Lists of pattern matches separated by None - self.state_patterns = [None] - # Offset in the ->transforms table for each state index - self.state_pattern_offsets = [] - # Map from state index to filtered state index for each opcode. - self.filter = defaultdict(list) - # Bijections from filtered state to filtered state index for each - # opcode, called the "representor sets" in the original algorithm. - # q_{a,j} in the original algorithm is len(self.rep[op]). - self.rep = defaultdict(self.IndexMap) - - # Everything in self.states with a index at least worklist_index is part - # of the worklist of newly created states. There is also a worklist of - # newly fitered states for each opcode, for which worklist_indices - # serves a similar purpose. worklist_index corresponds to p in the - # original algorithm, while worklist_indices is p_{a,j} (although since - # we only filter by opcode/symbol, it's really just p_a). - self.worklist_index = 0 - worklist_indices = defaultdict(lambda: 0) - - # This is the set of opcodes for which the filtered worklist is non-empty. - # It's used to avoid scanning opcodes for which there is nothing to - # process when building the transition table. It corresponds to new_a in - # the original algorithm. - new_opcodes = self.IndexMap() - - # Process states on the global worklist, filtering them for each opcode, - # updating the filter tables, and updating the filtered worklists if any - # new filtered states are found. Similar to ComputeRepresenterSets() in - # the original algorithm, although that only processes a single state. - def process_new_states(): - while self.worklist_index < len(self.states): - state = self.states[self.worklist_index] - # Calculate pattern matches for this state. Each pattern is - # assigned to a unique item, so we don't have to worry about - # deduplicating them here. However, we do have to sort them so - # that they're visited at runtime in the order they're specified - # in the source. - patterns = list(sorted(p for item in state for p in item.patterns)) - - if patterns: - # Add our patterns to the global table. - self.state_pattern_offsets.append(len(self.state_patterns)) - self.state_patterns.extend(patterns) - self.state_patterns.append(None) - else: - # Point to the initial sentinel in the global table. - self.state_pattern_offsets.append(0) - - # calculate filter table for this state, and update filtered - # worklists. - for op in self.opcodes: - filt = self.filter[op] - rep = self.rep[op] - filtered = frozenset(item for item in state if \ - op in item.parent_ops) - if filtered in rep: - rep_index = rep.index(filtered) - else: - rep_index = rep.add(filtered) - new_opcodes.add(op) - assert len(filt) == self.worklist_index - filt.append(rep_index) - self.worklist_index += 1 - - # There are two start states: one which can only match as a wildcard, - # and one which can match as a wildcard or constant. These will be the - # states of intrinsics/other instructions and load_const instructions, - # respectively. The indices of these must match the definitions of - # WILDCARD_STATE and CONST_STATE below, so that the runtime C code can - # initialize things correctly. - self.states.add(frozenset((self.wildcard,))) - self.states.add(frozenset((self.const,self.wildcard))) - process_new_states() - - while len(new_opcodes) > 0: - for op in new_opcodes: - rep = self.rep[op] - table = self.table[op] - op_worklist_index = worklist_indices[op] - if op in conv_opcode_types: - num_srcs = 1 - else: - num_srcs = opcodes[op].num_inputs - - # Iterate over all possible source combinations where at least one - # is on the worklist. - for src_indices in itertools.product(range(len(rep)), repeat=num_srcs): - if all(src_idx < op_worklist_index for src_idx in src_indices): - continue - - srcs = tuple(rep[src_idx] for src_idx in src_indices) - - # Try all possible pairings of source items and add the - # corresponding parent items. This is Comp_a from the paper. - parent = set(self.items[op, item_srcs] for item_srcs in - itertools.product(*srcs) if (op, item_srcs) in self.items) - - # We could always start matching something else with a - # wildcard. This is Cl from the paper. - parent.add(self.wildcard) - - table[src_indices] = self.states.add(frozenset(parent)) - worklist_indices[op] = len(rep) - new_opcodes.clear() - process_new_states() - -_algebraic_pass_template = mako.template.Template(""" -#include "nir.h" -#include "nir_builder.h" -#include "nir_search.h" -#include "nir_search_helpers.h" - -/* What follows is NIR algebraic transform code for the following ${len(xforms)} - * transforms: -% for xform in xforms: - * ${xform.search} => ${xform.replace} -% endfor - */ - -<% cache = {"next_index": 0} %> -static const nir_search_value_union ${pass_name}_values[] = { -% for xform in xforms: - /* ${xform.search} => ${xform.replace} */ -${xform.search.render(cache)} -${xform.replace.render(cache)} -% endfor -}; - -% if expression_cond: -static const nir_search_expression_cond ${pass_name}_expression_cond[] = { -% for cond in expression_cond: - ${cond[0]}, -% endfor -}; -% endif - -% if variable_cond: -static const nir_search_variable_cond ${pass_name}_variable_cond[] = { -% for cond in variable_cond: - ${cond[0]}, -% endfor -}; -% endif - -static const struct transform ${pass_name}_transforms[] = { -% for i in automaton.state_patterns: -% if i is not None: - { ${xforms[i].search.array_index}, ${xforms[i].replace.array_index}, ${xforms[i].condition_index} }, -% else: - { ~0, ~0, ~0 }, /* Sentinel */ - -% endif -% endfor -}; - -static const struct per_op_table ${pass_name}_pass_op_table[nir_num_search_ops] = { -% for op in automaton.opcodes: - [${get_c_opcode(op)}] = { -% if all(e == 0 for e in automaton.filter[op]): - .filter = NULL, -% else: - .filter = (const uint16_t []) { - % for e in automaton.filter[op]: - ${e}, - % endfor - }, -% endif - <% - num_filtered = len(automaton.rep[op]) - %> - .num_filtered_states = ${num_filtered}, - .table = (const uint16_t []) { - <% - num_srcs = len(next(iter(automaton.table[op]))) - %> - % for indices in itertools.product(range(num_filtered), repeat=num_srcs): - ${automaton.table[op][indices]}, - % endfor - }, - }, -% endfor -}; - -/* Mapping from state index to offset in transforms (0 being no transforms) */ -static const uint16_t ${pass_name}_transform_offsets[] = { -% for offset in automaton.state_pattern_offsets: - ${offset}, -% endfor -}; - -static const nir_algebraic_table ${pass_name}_table = { - .transforms = ${pass_name}_transforms, - .transform_offsets = ${pass_name}_transform_offsets, - .pass_op_table = ${pass_name}_pass_op_table, - .values = ${pass_name}_values, - .expression_cond = ${ pass_name + "_expression_cond" if expression_cond else "NULL" }, - .variable_cond = ${ pass_name + "_variable_cond" if variable_cond else "NULL" }, -}; - -bool -${pass_name}(nir_shader *shader) -{ - bool progress = false; - bool condition_flags[${len(condition_list)}]; - const nir_shader_compiler_options *options = shader->options; - const shader_info *info = &shader->info; - (void) options; - (void) info; - - /* This is not a great place for this, but it seems to be the best place - * for it. Check that at most one kind of lowering is requested for - * bitfield extract and bitfield insert. Otherwise the lowering can fight - * with each other and optimizations. - */ - assert((int)options->lower_bitfield_extract + - (int)options->lower_bitfield_extract_to_shifts <= 1); - assert((int)options->lower_bitfield_insert + - (int)options->lower_bitfield_insert_to_shifts + - (int)options->lower_bitfield_insert_to_bitfield_select <= 1); - - - STATIC_ASSERT(${str(cache["next_index"])} == ARRAY_SIZE(${pass_name}_values)); - % for index, condition in enumerate(condition_list): - condition_flags[${index}] = ${condition}; - % endfor - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_algebraic_impl(function->impl, condition_flags, - &${pass_name}_table); - } - } - - return progress; -} -""") - - -class AlgebraicPass(object): - def __init__(self, pass_name, transforms): - self.xforms = [] - self.opcode_xforms = defaultdict(lambda : []) - self.pass_name = pass_name - self.expression_cond = {} - self.variable_cond = {} - - error = False - - for xform in transforms: - if not isinstance(xform, SearchAndReplace): - try: - xform = SearchAndReplace(xform, self) - except: - print("Failed to parse transformation:", file=sys.stderr) - print(" " + str(xform), file=sys.stderr) - traceback.print_exc(file=sys.stderr) - print('', file=sys.stderr) - error = True - continue - - self.xforms.append(xform) - if xform.search.opcode in conv_opcode_types: - dst_type = conv_opcode_types[xform.search.opcode] - for size in type_sizes(dst_type): - sized_opcode = xform.search.opcode + str(size) - self.opcode_xforms[sized_opcode].append(xform) - else: - self.opcode_xforms[xform.search.opcode].append(xform) - - # Check to make sure the search pattern does not unexpectedly contain - # more commutative expressions than match_expression (nir_search.c) - # can handle. - comm_exprs = xform.search.comm_exprs - - if xform.search.many_commutative_expressions: - if comm_exprs <= nir_search_max_comm_ops: - print("Transform expected to have too many commutative " \ - "expression but did not " \ - "({} <= {}).".format(comm_exprs, nir_search_max_comm_op), - file=sys.stderr) - print(" " + str(xform), file=sys.stderr) - traceback.print_exc(file=sys.stderr) - print('', file=sys.stderr) - error = True - else: - if comm_exprs > nir_search_max_comm_ops: - print("Transformation with too many commutative expressions " \ - "({} > {}). Modify pattern or annotate with " \ - "\"many-comm-expr\".".format(comm_exprs, - nir_search_max_comm_ops), - file=sys.stderr) - print(" " + str(xform.search), file=sys.stderr) - print("{}".format(xform.search.cond), file=sys.stderr) - error = True - - self.automaton = TreeAutomaton(self.xforms) - - if error: - sys.exit(1) - - - def render(self): - return _algebraic_pass_template.render(pass_name=self.pass_name, - xforms=self.xforms, - opcode_xforms=self.opcode_xforms, - condition_list=condition_list, - automaton=self.automaton, - expression_cond = sorted(self.expression_cond.items(), key=lambda kv: kv[1]), - variable_cond = sorted(self.variable_cond.items(), key=lambda kv: kv[1]), - get_c_opcode=get_c_opcode, - itertools=itertools) - -# The replacement expression isn't necessarily exact if the search expression is exact. -def ignore_exact(*expr): - expr = SearchExpression.create(expr) - expr.ignore_exact = True - return expr diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder.c deleted file mode 100644 index 5db10dd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder.c +++ /dev/null @@ -1,649 +0,0 @@ -/* - * Copyright © 2014-2015 Broadcom - * Copyright © 2021 Google - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -void -nir_builder_init(nir_builder *build, nir_function_impl *impl) -{ - memset(build, 0, sizeof(*build)); - build->exact = false; - build->impl = impl; - build->shader = impl->function->shader; -} - -nir_builder MUST_CHECK PRINTFLIKE(3, 4) -nir_builder_init_simple_shader(gl_shader_stage stage, - const nir_shader_compiler_options *options, - const char *name, ...) -{ - nir_builder b; - - memset(&b, 0, sizeof(b)); - b.shader = nir_shader_create(NULL, stage, options, NULL); - - if (name) { - va_list args; - va_start(args, name); - b.shader->info.name = ralloc_vasprintf(b.shader, name, args); - va_end(args); - } - - nir_function *func = nir_function_create(b.shader, "main"); - func->is_entrypoint = true; - b.exact = false; - b.impl = nir_function_impl_create(func); - b.cursor = nir_after_cf_list(&b.impl->body); - - /* Simple shaders are typically internal, e.g. blit shaders */ - b.shader->info.internal = true; - - return b; -} - -nir_ssa_def * -nir_builder_alu_instr_finish_and_insert(nir_builder *build, nir_alu_instr *instr) -{ - const nir_op_info *op_info = &nir_op_infos[instr->op]; - - instr->exact = build->exact; - - /* Guess the number of components the destination temporary should have - * based on our input sizes, if it's not fixed for the op. - */ - unsigned num_components = op_info->output_size; - if (num_components == 0) { - for (unsigned i = 0; i < op_info->num_inputs; i++) { - if (op_info->input_sizes[i] == 0) - num_components = MAX2(num_components, - instr->src[i].src.ssa->num_components); - } - } - assert(num_components != 0); - - /* Figure out the bitwidth based on the source bitwidth if the instruction - * is variable-width. - */ - unsigned bit_size = nir_alu_type_get_type_size(op_info->output_type); - if (bit_size == 0) { - for (unsigned i = 0; i < op_info->num_inputs; i++) { - unsigned src_bit_size = instr->src[i].src.ssa->bit_size; - if (nir_alu_type_get_type_size(op_info->input_types[i]) == 0) { - if (bit_size) - assert(src_bit_size == bit_size); - else - bit_size = src_bit_size; - } else { - assert(src_bit_size == - nir_alu_type_get_type_size(op_info->input_types[i])); - } - } - } - - /* When in doubt, assume 32. */ - if (bit_size == 0) - bit_size = 32; - - /* Make sure we don't swizzle from outside of our source vector (like if a - * scalar value was passed into a multiply with a vector). - */ - for (unsigned i = 0; i < op_info->num_inputs; i++) { - for (unsigned j = instr->src[i].src.ssa->num_components; - j < NIR_MAX_VEC_COMPONENTS; j++) { - instr->src[i].swizzle[j] = instr->src[i].src.ssa->num_components - 1; - } - } - - nir_ssa_dest_init(&instr->instr, &instr->dest.dest, num_components, - bit_size, NULL); - instr->dest.write_mask = nir_component_mask(num_components); - - nir_builder_instr_insert(build, &instr->instr); - - return &instr->dest.dest.ssa; -} - -nir_ssa_def * -nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - nir_alu_instr *instr = nir_alu_instr_create(build->shader, op); - if (!instr) - return NULL; - - instr->src[0].src = nir_src_for_ssa(src0); - if (src1) - instr->src[1].src = nir_src_for_ssa(src1); - if (src2) - instr->src[2].src = nir_src_for_ssa(src2); - if (src3) - instr->src[3].src = nir_src_for_ssa(src3); - - return nir_builder_alu_instr_finish_and_insert(build, instr); -} - -nir_ssa_def * -nir_build_alu1(nir_builder *build, nir_op op, nir_ssa_def *src0) -{ - nir_alu_instr *instr = nir_alu_instr_create(build->shader, op); - if (!instr) - return NULL; - - instr->src[0].src = nir_src_for_ssa(src0); - - return nir_builder_alu_instr_finish_and_insert(build, instr); -} - -nir_ssa_def * -nir_build_alu2(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1) -{ - nir_alu_instr *instr = nir_alu_instr_create(build->shader, op); - if (!instr) - return NULL; - - instr->src[0].src = nir_src_for_ssa(src0); - instr->src[1].src = nir_src_for_ssa(src1); - - return nir_builder_alu_instr_finish_and_insert(build, instr); -} - -nir_ssa_def * -nir_build_alu3(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_alu_instr *instr = nir_alu_instr_create(build->shader, op); - if (!instr) - return NULL; - - instr->src[0].src = nir_src_for_ssa(src0); - instr->src[1].src = nir_src_for_ssa(src1); - instr->src[2].src = nir_src_for_ssa(src2); - - return nir_builder_alu_instr_finish_and_insert(build, instr); -} - -nir_ssa_def * -nir_build_alu4(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - nir_alu_instr *instr = nir_alu_instr_create(build->shader, op); - if (!instr) - return NULL; - - instr->src[0].src = nir_src_for_ssa(src0); - instr->src[1].src = nir_src_for_ssa(src1); - instr->src[2].src = nir_src_for_ssa(src2); - instr->src[3].src = nir_src_for_ssa(src3); - - return nir_builder_alu_instr_finish_and_insert(build, instr); -} - -/* for the couple special cases with more than 4 src args: */ -nir_ssa_def * -nir_build_alu_src_arr(nir_builder *build, nir_op op, nir_ssa_def **srcs) -{ - const nir_op_info *op_info = &nir_op_infos[op]; - nir_alu_instr *instr = nir_alu_instr_create(build->shader, op); - if (!instr) - return NULL; - - for (unsigned i = 0; i < op_info->num_inputs; i++) - instr->src[i].src = nir_src_for_ssa(srcs[i]); - - return nir_builder_alu_instr_finish_and_insert(build, instr); -} - -nir_ssa_def * -nir_build_tex_deref_instr(nir_builder *build, nir_texop op, - nir_deref_instr *texture, - nir_deref_instr *sampler, - unsigned num_extra_srcs, - const nir_tex_src *extra_srcs) -{ - assert(texture != NULL); - assert(glsl_type_is_texture(texture->type) || - glsl_type_is_sampler(texture->type)); - - const unsigned num_srcs = 1 + (sampler != NULL) + num_extra_srcs; - - nir_tex_instr *tex = nir_tex_instr_create(build->shader, num_srcs); - tex->op = op; - tex->sampler_dim = glsl_get_sampler_dim(texture->type); - tex->is_array = glsl_sampler_type_is_array(texture->type); - tex->is_shadow = false; - - switch (op) { - case nir_texop_txs: - case nir_texop_texture_samples: - case nir_texop_query_levels: - case nir_texop_txf_ms_mcs_intel: - case nir_texop_fragment_mask_fetch_amd: - case nir_texop_descriptor_amd: - tex->dest_type = nir_type_int32; - break; - case nir_texop_lod: - tex->dest_type = nir_type_float32; - break; - case nir_texop_samples_identical: - tex->dest_type = nir_type_bool1; - break; - default: - assert(!nir_tex_instr_is_query(tex)); - tex->dest_type = nir_get_nir_type_for_glsl_base_type( - glsl_get_sampler_result_type(texture->type)); - break; - } - - unsigned src_idx = 0; - tex->src[src_idx++] = (nir_tex_src) { - .src_type = nir_tex_src_texture_deref, - .src = nir_src_for_ssa(&texture->dest.ssa), - }; - if (sampler != NULL) { - assert(glsl_type_is_sampler(sampler->type)); - tex->src[src_idx++] = (nir_tex_src) { - .src_type = nir_tex_src_sampler_deref, - .src = nir_src_for_ssa(&sampler->dest.ssa), - }; - } - for (unsigned i = 0; i < num_extra_srcs; i++) { - switch (extra_srcs[i].src_type) { - case nir_tex_src_coord: - tex->coord_components = nir_src_num_components(extra_srcs[i].src); - assert(tex->coord_components == tex->is_array + - glsl_get_sampler_dim_coordinate_components(tex->sampler_dim)); - break; - - case nir_tex_src_lod: - assert(tex->sampler_dim == GLSL_SAMPLER_DIM_1D || - tex->sampler_dim == GLSL_SAMPLER_DIM_2D || - tex->sampler_dim == GLSL_SAMPLER_DIM_3D || - tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE); - break; - - case nir_tex_src_ms_index: - assert(tex->sampler_dim == GLSL_SAMPLER_DIM_MS); - break; - - case nir_tex_src_comparator: - /* Assume 1-component shadow for the builder helper */ - tex->is_shadow = true; - tex->is_new_style_shadow = true; - break; - - case nir_tex_src_texture_deref: - case nir_tex_src_sampler_deref: - case nir_tex_src_texture_offset: - case nir_tex_src_sampler_offset: - case nir_tex_src_texture_handle: - case nir_tex_src_sampler_handle: - unreachable("Texture and sampler must be provided directly as derefs"); - break; - - default: - break; - } - - tex->src[src_idx++] = extra_srcs[i]; - } - assert(src_idx == num_srcs); - - nir_ssa_dest_init(&tex->instr, &tex->dest, - nir_tex_instr_dest_size(tex), - nir_alu_type_get_type_size(tex->dest_type), - NULL); - nir_builder_instr_insert(build, &tex->instr); - - return &tex->dest.ssa; -} - -nir_ssa_def * -nir_vec_scalars(nir_builder *build, nir_ssa_scalar *comp, unsigned num_components) -{ - nir_op op = nir_op_vec(num_components); - nir_alu_instr *instr = nir_alu_instr_create(build->shader, op); - if (!instr) - return NULL; - - for (unsigned i = 0; i < num_components; i++) { - instr->src[i].src = nir_src_for_ssa(comp[i].def); - instr->src[i].swizzle[0] = comp[i].comp; - } - instr->exact = build->exact; - - /* Note: not reusing nir_builder_alu_instr_finish_and_insert() because it - * can't re-guess the num_components when num_components == 1 (nir_op_mov). - */ - nir_ssa_dest_init(&instr->instr, &instr->dest.dest, num_components, - comp[0].def->bit_size, NULL); - instr->dest.write_mask = nir_component_mask(num_components); - - nir_builder_instr_insert(build, &instr->instr); - - return &instr->dest.dest.ssa; -} - -/** - * Turns a nir_src into a nir_ssa_def * so it can be passed to - * nir_build_alu()-based builder calls. - * - * See nir_ssa_for_alu_src() for alu instructions. - */ -nir_ssa_def * -nir_ssa_for_src(nir_builder *build, nir_src src, int num_components) -{ - if (src.is_ssa && src.ssa->num_components == num_components) - return src.ssa; - - assert((unsigned)num_components <= nir_src_num_components(src)); - - nir_alu_src alu = { NIR_SRC_INIT }; - alu.src = src; - for (int j = 0; j < NIR_MAX_VEC_COMPONENTS; j++) - alu.swizzle[j] = j; - - return nir_mov_alu(build, alu, num_components); -} - -/** - * Similar to nir_ssa_for_src(), but for alu srcs, respecting the - * nir_alu_src's swizzle. - */ -nir_ssa_def * -nir_ssa_for_alu_src(nir_builder *build, nir_alu_instr *instr, unsigned srcn) -{ - if (nir_alu_src_is_trivial_ssa(instr, srcn)) - return instr->src[srcn].src.ssa; - - nir_alu_src *src = &instr->src[srcn]; - unsigned num_components = nir_ssa_alu_instr_src_components(instr, srcn); - return nir_mov_alu(build, *src, num_components); -} - -/* Generic builder for system values. */ -nir_ssa_def * -nir_load_system_value(nir_builder *build, nir_intrinsic_op op, int index, - unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *load = nir_intrinsic_instr_create(build->shader, op); - if (nir_intrinsic_infos[op].dest_components > 0) - assert(num_components == nir_intrinsic_infos[op].dest_components); - else - load->num_components = num_components; - load->const_index[0] = index; - - nir_ssa_dest_init(&load->instr, &load->dest, - num_components, bit_size, NULL); - nir_builder_instr_insert(build, &load->instr); - return &load->dest.ssa; -} - -void -nir_builder_instr_insert(nir_builder *build, nir_instr *instr) -{ - nir_instr_insert(build->cursor, instr); - - if (build->update_divergence) - nir_update_instr_divergence(build->shader, instr); - - /* Move the cursor forward. */ - build->cursor = nir_after_instr(instr); -} - -void -nir_builder_cf_insert(nir_builder *build, nir_cf_node *cf) -{ - nir_cf_node_insert(build->cursor, cf); -} - -bool -nir_builder_is_inside_cf(nir_builder *build, nir_cf_node *cf_node) -{ - nir_block *block = nir_cursor_current_block(build->cursor); - for (nir_cf_node *n = &block->cf_node; n; n = n->parent) { - if (n == cf_node) - return true; - } - return false; -} - -nir_if * -nir_push_if_src(nir_builder *build, nir_src condition) -{ - nir_if *nif = nir_if_create(build->shader); - nif->condition = condition; - nir_builder_cf_insert(build, &nif->cf_node); - build->cursor = nir_before_cf_list(&nif->then_list); - return nif; -} - -nir_if * -nir_push_if(nir_builder *build, nir_ssa_def *condition) -{ - return nir_push_if_src(build, nir_src_for_ssa(condition)); -} - -nir_if * -nir_push_else(nir_builder *build, nir_if *nif) -{ - if (nif) { - assert(nir_builder_is_inside_cf(build, &nif->cf_node)); - } else { - nir_block *block = nir_cursor_current_block(build->cursor); - nif = nir_cf_node_as_if(block->cf_node.parent); - } - build->cursor = nir_before_cf_list(&nif->else_list); - return nif; -} - -void -nir_pop_if(nir_builder *build, nir_if *nif) -{ - if (nif) { - assert(nir_builder_is_inside_cf(build, &nif->cf_node)); - } else { - nir_block *block = nir_cursor_current_block(build->cursor); - nif = nir_cf_node_as_if(block->cf_node.parent); - } - build->cursor = nir_after_cf_node(&nif->cf_node); -} - -nir_ssa_def * -nir_if_phi(nir_builder *build, nir_ssa_def *then_def, nir_ssa_def *else_def) -{ - nir_block *block = nir_cursor_current_block(build->cursor); - nir_if *nif = nir_cf_node_as_if(nir_cf_node_prev(&block->cf_node)); - - nir_phi_instr *phi = nir_phi_instr_create(build->shader); - nir_phi_instr_add_src(phi, nir_if_last_then_block(nif), nir_src_for_ssa(then_def)); - nir_phi_instr_add_src(phi, nir_if_last_else_block(nif), nir_src_for_ssa(else_def)); - - assert(then_def->num_components == else_def->num_components); - assert(then_def->bit_size == else_def->bit_size); - nir_ssa_dest_init(&phi->instr, &phi->dest, - then_def->num_components, then_def->bit_size, NULL); - - nir_builder_instr_insert(build, &phi->instr); - - return &phi->dest.ssa; -} - -nir_loop * -nir_push_loop(nir_builder *build) -{ - nir_loop *loop = nir_loop_create(build->shader); - nir_builder_cf_insert(build, &loop->cf_node); - build->cursor = nir_before_cf_list(&loop->body); - return loop; -} - -nir_loop * -nir_push_continue(nir_builder *build, nir_loop *loop) -{ - if (loop) { - assert(nir_builder_is_inside_cf(build, &loop->cf_node)); - } else { - nir_block *block = nir_cursor_current_block(build->cursor); - loop = nir_cf_node_as_loop(block->cf_node.parent); - } - - nir_loop_add_continue_construct(loop); - - build->cursor = nir_before_cf_list(&loop->continue_list); - return loop; -} - -void -nir_pop_loop(nir_builder *build, nir_loop *loop) -{ - if (loop) { - assert(nir_builder_is_inside_cf(build, &loop->cf_node)); - } else { - nir_block *block = nir_cursor_current_block(build->cursor); - loop = nir_cf_node_as_loop(block->cf_node.parent); - } - build->cursor = nir_after_cf_node(&loop->cf_node); -} - -nir_ssa_def * -nir_compare_func(nir_builder *b, enum compare_func func, - nir_ssa_def *src0, nir_ssa_def *src1) -{ - switch (func) { - case COMPARE_FUNC_NEVER: - return nir_imm_int(b, 0); - case COMPARE_FUNC_ALWAYS: - return nir_imm_int(b, ~0); - case COMPARE_FUNC_EQUAL: - return nir_feq(b, src0, src1); - case COMPARE_FUNC_NOTEQUAL: - return nir_fneu(b, src0, src1); - case COMPARE_FUNC_GREATER: - return nir_flt(b, src1, src0); - case COMPARE_FUNC_GEQUAL: - return nir_fge(b, src0, src1); - case COMPARE_FUNC_LESS: - return nir_flt(b, src0, src1); - case COMPARE_FUNC_LEQUAL: - return nir_fge(b, src1, src0); - } - unreachable("bad compare func"); -} - -nir_ssa_def * -nir_type_convert(nir_builder *b, - nir_ssa_def *src, - nir_alu_type src_type, - nir_alu_type dest_type, - nir_rounding_mode rnd) -{ - assert(nir_alu_type_get_type_size(src_type) == 0 || - nir_alu_type_get_type_size(src_type) == src->bit_size); - - const nir_alu_type dst_base = - (nir_alu_type) nir_alu_type_get_base_type(dest_type); - - const nir_alu_type src_base = - (nir_alu_type) nir_alu_type_get_base_type(src_type); - - /* b2b uses the regular type conversion path, but i2b and f2b are - * implemented as src != 0. - */ - if (dst_base == nir_type_bool && src_base != nir_type_bool) { - nir_op opcode; - - const unsigned dst_bit_size = nir_alu_type_get_type_size(dest_type); - - if (src_base == nir_type_float) { - switch (dst_bit_size) { - case 1: opcode = nir_op_fneu; break; - case 8: opcode = nir_op_fneu8; break; - case 16: opcode = nir_op_fneu16; break; - case 32: opcode = nir_op_fneu32; break; - default: unreachable("Invalid Boolean size."); - } - } else { - assert(src_base == nir_type_int || src_base == nir_type_uint); - - switch (dst_bit_size) { - case 1: opcode = nir_op_ine; break; - case 8: opcode = nir_op_ine8; break; - case 16: opcode = nir_op_ine16; break; - case 32: opcode = nir_op_ine32; break; - default: unreachable("Invalid Boolean size."); - } - } - - return nir_build_alu(b, opcode, src, - nir_imm_zero(b, src->num_components, src->bit_size), - NULL, NULL); - } else { - src_type = (nir_alu_type) (src_type | src->bit_size); - - nir_op opcode = - nir_type_conversion_op(src_type, dest_type, rnd); - if (opcode == nir_op_mov) - return src; - - return nir_build_alu(b, opcode, src, NULL, NULL, NULL); - } -} - -nir_ssa_def * -nir_gen_rect_vertices(nir_builder *b, nir_ssa_def *z, nir_ssa_def *w) -{ - if (!z) - z = nir_imm_float(b, 0.0); - if (!w) - w = nir_imm_float(b, 1.0); - - nir_ssa_def *vertex_id; - if (b->shader->options->vertex_id_zero_based) - vertex_id = nir_load_vertex_id_zero_base(b); - else - vertex_id = nir_load_vertex_id(b); - - /* vertex 0: -1.0, -1.0 - * vertex 1: -1.0, 1.0 - * vertex 2: 1.0, -1.0 - * vertex 3: 1.0, 1.0 - * - * so: - * - * channel 0 is vertex_id < 2 ? -1.0 : 1.0 - * channel 1 is vertex_id & 1 ? 1.0 : -1.0 - */ - - nir_ssa_def *c0cmp = nir_ilt(b, vertex_id, nir_imm_int(b, 2)); - nir_ssa_def *c1cmp = nir_test_mask(b, vertex_id, 1); - - nir_ssa_def *comp[4]; - comp[0] = nir_bcsel(b, c0cmp, nir_imm_float(b, -1.0), nir_imm_float(b, 1.0)); - comp[1] = nir_bcsel(b, c1cmp, nir_imm_float(b, 1.0), nir_imm_float(b, -1.0)); - comp[2] = z; - comp[3] = w; - - return nir_vec(b, comp, 4); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder.h deleted file mode 100644 index 32632e0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder.h +++ /dev/null @@ -1,1807 +0,0 @@ -/* - * Copyright © 2014-2015 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_BUILDER_H -#define NIR_BUILDER_H - -#include "nir_control_flow.h" -#include "../../util/bitscan.h" -#include "../../util/half_float.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct exec_list; - -typedef struct nir_builder { - nir_cursor cursor; - - /* Whether new ALU instructions will be marked "exact" */ - bool exact; - - /* Whether to run divergence analysis on inserted instructions (loop merge - * and header phis are not updated). */ - bool update_divergence; - - nir_shader *shader; - nir_function_impl *impl; -} nir_builder; - -void nir_builder_init(nir_builder *build, nir_function_impl *impl); - -nir_builder MUST_CHECK PRINTFLIKE(3, 4) -nir_builder_init_simple_shader(gl_shader_stage stage, - const nir_shader_compiler_options *options, - const char *name, ...); - -typedef bool (*nir_instr_pass_cb)(struct nir_builder *, nir_instr *, void *); - -/** - * Iterates over all the instructions in a NIR shader and calls the given pass - * on them. - * - * The pass should return true if it modified the shader. In that case, only - * the preserved metadata flags will be preserved in the function impl. - * - * The builder will be initialized to point at the function impl, but its - * cursor is unset. - */ -static inline bool -nir_shader_instructions_pass(nir_shader *shader, - nir_instr_pass_cb pass, - nir_metadata preserved, - void *cb_data) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - bool func_progress = false; - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_foreach_block_safe(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - func_progress |= pass(&b, instr, cb_data); - } - } - - if (func_progress) { - nir_metadata_preserve(function->impl, preserved); - progress = true; - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} - -void nir_builder_instr_insert(nir_builder *build, nir_instr *instr); - -static inline nir_instr * -nir_builder_last_instr(nir_builder *build) -{ - assert(build->cursor.option == nir_cursor_after_instr); - return build->cursor.instr; -} - -/* General nir_build_alu() taking a variable arg count with NULLs for the rest. */ -nir_ssa_def * -nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3); - -/* Fixed-arg-count variants to reduce size of codegen. */ -nir_ssa_def * -nir_build_alu1(nir_builder *build, nir_op op, nir_ssa_def *src0); -nir_ssa_def * -nir_build_alu2(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1); -nir_ssa_def * -nir_build_alu3(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1, nir_ssa_def *src2); -nir_ssa_def * -nir_build_alu4(nir_builder *build, nir_op op, nir_ssa_def *src0, - nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3); - -nir_ssa_def *nir_build_alu_src_arr(nir_builder *build, nir_op op, nir_ssa_def **srcs); - -nir_ssa_def * -nir_build_tex_deref_instr(nir_builder *build, nir_texop op, - nir_deref_instr *texture, - nir_deref_instr *sampler, - unsigned num_extra_srcs, - const nir_tex_src *extra_srcs); - -nir_instr *nir_builder_last_instr(nir_builder *build); - -void nir_builder_cf_insert(nir_builder *build, nir_cf_node *cf); - -bool nir_builder_is_inside_cf(nir_builder *build, nir_cf_node *cf_node); - -nir_if * -nir_push_if_src(nir_builder *build, nir_src condition); - -nir_if * -nir_push_if(nir_builder *build, nir_ssa_def *condition); - -nir_if * -nir_push_else(nir_builder *build, nir_if *nif); - -void nir_pop_if(nir_builder *build, nir_if *nif); - -nir_ssa_def * -nir_if_phi(nir_builder *build, nir_ssa_def *then_def, nir_ssa_def *else_def); - -nir_loop * -nir_push_loop(nir_builder *build); - -nir_loop * -nir_push_continue(nir_builder *build, nir_loop *loop); - -void nir_pop_loop(nir_builder *build, nir_loop *loop); - -static inline nir_ssa_def * -nir_ssa_undef(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_ssa_undef_instr *undef = - nir_ssa_undef_instr_create(build->shader, num_components, bit_size); - if (!undef) - return NULL; - - nir_instr_insert(nir_before_cf_list(&build->impl->body), &undef->instr); - if (build->update_divergence) - nir_update_instr_divergence(build->shader, &undef->instr); - - return &undef->def; -} - -static inline nir_ssa_def * -nir_build_imm(nir_builder *build, unsigned num_components, - unsigned bit_size, const nir_const_value *value) -{ - nir_load_const_instr *load_const = - nir_load_const_instr_create(build->shader, num_components, bit_size); - if (!load_const) - return NULL; - - memcpy(load_const->value, value, sizeof(nir_const_value) * num_components); - - nir_builder_instr_insert(build, &load_const->instr); - - return &load_const->def; -} - -static inline nir_ssa_def * -nir_imm_zero(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_load_const_instr *load_const = - nir_load_const_instr_create(build->shader, num_components, bit_size); - - /* nir_load_const_instr_create uses rzalloc so it's already zero */ - - nir_builder_instr_insert(build, &load_const->instr); - - return &load_const->def; -} - -static inline nir_ssa_def * -nir_imm_boolN_t(nir_builder *build, bool x, unsigned bit_size) -{ - nir_const_value v = nir_const_value_for_bool(x, bit_size); - return nir_build_imm(build, 1, bit_size, &v); -} - -static inline nir_ssa_def * -nir_imm_bool(nir_builder *build, bool x) -{ - return nir_imm_boolN_t(build, x, 1); -} - -static inline nir_ssa_def * -nir_imm_true(nir_builder *build) -{ - return nir_imm_bool(build, true); -} - -static inline nir_ssa_def * -nir_imm_false(nir_builder *build) -{ - return nir_imm_bool(build, false); -} - -static inline nir_ssa_def * -nir_imm_floatN_t(nir_builder *build, double x, unsigned bit_size) -{ - nir_const_value v = nir_const_value_for_float(x, bit_size); - return nir_build_imm(build, 1, bit_size, &v); -} - -static inline nir_ssa_def * -nir_imm_float16(nir_builder *build, float x) -{ - return nir_imm_floatN_t(build, x, 16); -} - -static inline nir_ssa_def * -nir_imm_float(nir_builder *build, float x) -{ - return nir_imm_floatN_t(build, x, 32); -} - -static inline nir_ssa_def * -nir_imm_double(nir_builder *build, double x) -{ - return nir_imm_floatN_t(build, x, 64); -} - -static inline nir_ssa_def * -nir_imm_vec2(nir_builder *build, float x, float y) -{ - nir_const_value v[2] = { - nir_const_value_for_float(x, 32), - nir_const_value_for_float(y, 32), - }; - return nir_build_imm(build, 2, 32, v); -} - -static inline nir_ssa_def * -nir_imm_vec3(nir_builder *build, float x, float y, float z) -{ - nir_const_value v[3] = { - nir_const_value_for_float(x, 32), - nir_const_value_for_float(y, 32), - nir_const_value_for_float(z, 32), - }; - return nir_build_imm(build, 3, 32, v); -} - -static inline nir_ssa_def * -nir_imm_vec4(nir_builder *build, float x, float y, float z, float w) -{ - nir_const_value v[4] = { - nir_const_value_for_float(x, 32), - nir_const_value_for_float(y, 32), - nir_const_value_for_float(z, 32), - nir_const_value_for_float(w, 32), - }; - - return nir_build_imm(build, 4, 32, v); -} - -static inline nir_ssa_def * -nir_imm_vec4_16(nir_builder *build, float x, float y, float z, float w) -{ - nir_const_value v[4] = { - nir_const_value_for_float(x, 16), - nir_const_value_for_float(y, 16), - nir_const_value_for_float(z, 16), - nir_const_value_for_float(w, 16), - }; - - return nir_build_imm(build, 4, 16, v); -} - -static inline nir_ssa_def * -nir_imm_intN_t(nir_builder *build, uint64_t x, unsigned bit_size) -{ - nir_const_value v = nir_const_value_for_raw_uint(x, bit_size); - return nir_build_imm(build, 1, bit_size, &v); -} - -static inline nir_ssa_def * -nir_imm_int(nir_builder *build, int x) -{ - return nir_imm_intN_t(build, x, 32); -} - -static inline nir_ssa_def * -nir_imm_int64(nir_builder *build, int64_t x) -{ - return nir_imm_intN_t(build, x, 64); -} - -static inline nir_ssa_def * -nir_imm_ivec2(nir_builder *build, int x, int y) -{ - nir_const_value v[2] = { - nir_const_value_for_int(x, 32), - nir_const_value_for_int(y, 32), - }; - - return nir_build_imm(build, 2, 32, v); -} - -static inline nir_ssa_def * -nir_imm_ivec3(nir_builder *build, int x, int y, int z) -{ - nir_const_value v[3] = { - nir_const_value_for_int(x, 32), - nir_const_value_for_int(y, 32), - nir_const_value_for_int(z, 32), - }; - - return nir_build_imm(build, 3, 32, v); -} - -static inline nir_ssa_def * -nir_imm_ivec4(nir_builder *build, int x, int y, int z, int w) -{ - nir_const_value v[4] = { - nir_const_value_for_int(x, 32), - nir_const_value_for_int(y, 32), - nir_const_value_for_int(z, 32), - nir_const_value_for_int(w, 32), - }; - - return nir_build_imm(build, 4, 32, v); -} - -nir_ssa_def * -nir_builder_alu_instr_finish_and_insert(nir_builder *build, nir_alu_instr *instr); - -/* for the couple special cases with more than 4 src args: */ -nir_ssa_def * -nir_build_alu_src_arr(nir_builder *build, nir_op op, nir_ssa_def **srcs); - -/* Generic builder for system values. */ -nir_ssa_def * -nir_load_system_value(nir_builder *build, nir_intrinsic_op op, int index, - unsigned num_components, unsigned bit_size); - -#include "nir_builder_opcodes.h" -#undef nir_deref_mode_is - -nir_ssa_def * -nir_type_convert(nir_builder *b, - nir_ssa_def *src, - nir_alu_type src_type, - nir_alu_type dest_type, - nir_rounding_mode rnd); - -static inline nir_ssa_def * -nir_convert_to_bit_size(nir_builder *b, - nir_ssa_def *src, - nir_alu_type type, - unsigned bit_size) -{ - return nir_type_convert(b, src, type, (nir_alu_type) (type | bit_size), - nir_rounding_mode_undef); -} - -static inline nir_ssa_def * -nir_i2iN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_convert_to_bit_size(b, src, nir_type_int, bit_size); -} - -static inline nir_ssa_def * -nir_u2uN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_convert_to_bit_size(b, src, nir_type_uint, bit_size); -} - -static inline nir_ssa_def * -nir_b2bN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_convert_to_bit_size(b, src, nir_type_bool, bit_size); -} - -static inline nir_ssa_def * -nir_f2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_convert_to_bit_size(b, src, nir_type_float, bit_size); -} - -static inline nir_ssa_def * -nir_i2b(nir_builder *b, nir_ssa_def *src) -{ - return nir_ine(b, src, nir_imm_intN_t(b, 0, src->bit_size)); -} - -static inline nir_ssa_def * -nir_b2iN(nir_builder *b, nir_ssa_def *src, uint32_t bit_size) -{ - return nir_type_convert(b, src, nir_type_bool, - (nir_alu_type) (nir_type_int | bit_size), - nir_rounding_mode_undef); -} - -static inline nir_ssa_def * -nir_b2fN(nir_builder *b, nir_ssa_def *src, uint32_t bit_size) -{ - return nir_type_convert(b, src, nir_type_bool, - (nir_alu_type) (nir_type_float | bit_size), - nir_rounding_mode_undef); -} - -static inline nir_ssa_def * -nir_i2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_type_convert(b, src, nir_type_int, - (nir_alu_type) (nir_type_float | bit_size), - nir_rounding_mode_undef); -} - -static inline nir_ssa_def * -nir_u2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_type_convert(b, src, nir_type_uint, - (nir_alu_type) (nir_type_float | bit_size), - nir_rounding_mode_undef); -} - -static inline nir_ssa_def * -nir_f2uN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_type_convert(b, src, nir_type_float, - (nir_alu_type) (nir_type_uint | bit_size), - nir_rounding_mode_undef); -} - -static inline nir_ssa_def * -nir_f2iN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) -{ - return nir_type_convert(b, src, nir_type_float, - (nir_alu_type) (nir_type_int | bit_size), - nir_rounding_mode_undef); -} - -static inline nir_ssa_def * -nir_vec(nir_builder *build, nir_ssa_def **comp, unsigned num_components) -{ - return nir_build_alu_src_arr(build, nir_op_vec(num_components), comp); -} - -nir_ssa_def * -nir_vec_scalars(nir_builder *build, nir_ssa_scalar *comp, unsigned num_components); - -static inline nir_ssa_def * -nir_mov_alu(nir_builder *build, nir_alu_src src, unsigned num_components) -{ - assert(!src.abs && !src.negate); - if (src.src.is_ssa && src.src.ssa->num_components == num_components) { - bool any_swizzles = false; - for (unsigned i = 0; i < num_components; i++) { - if (src.swizzle[i] != i) - any_swizzles = true; - } - if (!any_swizzles) - return src.src.ssa; - } - - nir_alu_instr *mov = nir_alu_instr_create(build->shader, nir_op_mov); - nir_ssa_dest_init(&mov->instr, &mov->dest.dest, num_components, - nir_src_bit_size(src.src), NULL); - mov->exact = build->exact; - mov->dest.write_mask = (1 << num_components) - 1; - mov->src[0] = src; - nir_builder_instr_insert(build, &mov->instr); - - return &mov->dest.dest.ssa; -} - -/** - * Construct a mov that reswizzles the source's components. - */ -static inline nir_ssa_def * -nir_swizzle(nir_builder *build, nir_ssa_def *src, const unsigned *swiz, - unsigned num_components) -{ - assert(num_components <= NIR_MAX_VEC_COMPONENTS); - nir_alu_src alu_src = { NIR_SRC_INIT }; - alu_src.src = nir_src_for_ssa(src); - - bool is_identity_swizzle = true; - for (unsigned i = 0; i < num_components && i < NIR_MAX_VEC_COMPONENTS; i++) { - if (swiz[i] != i) - is_identity_swizzle = false; - alu_src.swizzle[i] = swiz[i]; - } - - if (num_components == src->num_components && is_identity_swizzle) - return src; - - return nir_mov_alu(build, alu_src, num_components); -} - -/* Selects the right fdot given the number of components in each source. */ -static inline nir_ssa_def * -nir_fdot(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - assert(src0->num_components == src1->num_components); - switch (src0->num_components) { - case 1: return nir_fmul(build, src0, src1); - case 2: return nir_fdot2(build, src0, src1); - case 3: return nir_fdot3(build, src0, src1); - case 4: return nir_fdot4(build, src0, src1); - case 5: return nir_fdot5(build, src0, src1); - case 8: return nir_fdot8(build, src0, src1); - case 16: return nir_fdot16(build, src0, src1); - default: - unreachable("bad component size"); - } - - return NULL; -} - -static inline nir_ssa_def * -nir_ball_iequal(nir_builder *b, nir_ssa_def *src0, nir_ssa_def *src1) -{ - switch (src0->num_components) { - case 1: return nir_ieq(b, src0, src1); - case 2: return nir_ball_iequal2(b, src0, src1); - case 3: return nir_ball_iequal3(b, src0, src1); - case 4: return nir_ball_iequal4(b, src0, src1); - case 5: return nir_ball_iequal5(b, src0, src1); - case 8: return nir_ball_iequal8(b, src0, src1); - case 16: return nir_ball_iequal16(b, src0, src1); - default: - unreachable("bad component size"); - } -} - -static inline nir_ssa_def * -nir_ball(nir_builder *b, nir_ssa_def *src) -{ - return nir_ball_iequal(b, src, nir_imm_true(b)); -} - -static inline nir_ssa_def * -nir_bany_inequal(nir_builder *b, nir_ssa_def *src0, nir_ssa_def *src1) -{ - switch (src0->num_components) { - case 1: return nir_ine(b, src0, src1); - case 2: return nir_bany_inequal2(b, src0, src1); - case 3: return nir_bany_inequal3(b, src0, src1); - case 4: return nir_bany_inequal4(b, src0, src1); - case 5: return nir_bany_inequal5(b, src0, src1); - case 8: return nir_bany_inequal8(b, src0, src1); - case 16: return nir_bany_inequal16(b, src0, src1); - default: - unreachable("bad component size"); - } -} - -static inline nir_ssa_def * -nir_bany(nir_builder *b, nir_ssa_def *src) -{ - return nir_bany_inequal(b, src, nir_imm_false(b)); -} - -static inline nir_ssa_def * -nir_channel(nir_builder *b, nir_ssa_def *def, unsigned c) -{ - return nir_swizzle(b, def, &c, 1); -} - -static inline nir_ssa_def * -nir_channels(nir_builder *b, nir_ssa_def *def, nir_component_mask_t mask) -{ - unsigned num_channels = 0, swizzle[NIR_MAX_VEC_COMPONENTS] = { 0 }; - - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - if ((mask & (1 << i)) == 0) - continue; - swizzle[num_channels++] = i; - } - - return nir_swizzle(b, def, swizzle, num_channels); -} - -static inline nir_ssa_def * -_nir_select_from_array_helper(nir_builder *b, nir_ssa_def **arr, - nir_ssa_def *idx, - unsigned start, unsigned end) -{ - if (start == end - 1) { - return arr[start]; - } else { - unsigned mid = start + (end - start) / 2; - return nir_bcsel(b, nir_ilt(b, idx, nir_imm_intN_t(b, mid, idx->bit_size)), - _nir_select_from_array_helper(b, arr, idx, start, mid), - _nir_select_from_array_helper(b, arr, idx, mid, end)); - } -} - -static inline nir_ssa_def * -nir_select_from_ssa_def_array(nir_builder *b, nir_ssa_def **arr, - unsigned arr_len, nir_ssa_def *idx) -{ - return _nir_select_from_array_helper(b, arr, idx, 0, arr_len); -} - -static inline nir_ssa_def * -nir_vector_extract(nir_builder *b, nir_ssa_def *vec, nir_ssa_def *c) -{ - nir_src c_src = nir_src_for_ssa(c); - if (nir_src_is_const(c_src)) { - uint64_t c_const = nir_src_as_uint(c_src); - if (c_const < vec->num_components) - return nir_channel(b, vec, c_const); - else - return nir_ssa_undef(b, 1, vec->bit_size); - } else { - nir_ssa_def *comps[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < vec->num_components; i++) - comps[i] = nir_channel(b, vec, i); - return nir_select_from_ssa_def_array(b, comps, vec->num_components, c); - } -} - -/** Replaces the component of `vec` specified by `c` with `scalar` */ -static inline nir_ssa_def * -nir_vector_insert_imm(nir_builder *b, nir_ssa_def *vec, - nir_ssa_def *scalar, unsigned c) -{ - assert(scalar->num_components == 1); - assert(c < vec->num_components); - - nir_op vec_op = nir_op_vec(vec->num_components); - nir_alu_instr *vec_instr = nir_alu_instr_create(b->shader, vec_op); - - for (unsigned i = 0; i < vec->num_components; i++) { - if (i == c) { - vec_instr->src[i].src = nir_src_for_ssa(scalar); - vec_instr->src[i].swizzle[0] = 0; - } else { - vec_instr->src[i].src = nir_src_for_ssa(vec); - vec_instr->src[i].swizzle[0] = i; - } - } - - return nir_builder_alu_instr_finish_and_insert(b, vec_instr); -} - -/** Replaces the component of `vec` specified by `c` with `scalar` */ -static inline nir_ssa_def * -nir_vector_insert(nir_builder *b, nir_ssa_def *vec, nir_ssa_def *scalar, - nir_ssa_def *c) -{ - assert(scalar->num_components == 1); - assert(c->num_components == 1); - - nir_src c_src = nir_src_for_ssa(c); - if (nir_src_is_const(c_src)) { - uint64_t c_const = nir_src_as_uint(c_src); - if (c_const < vec->num_components) - return nir_vector_insert_imm(b, vec, scalar, c_const); - else - return vec; - } else { - nir_const_value per_comp_idx_const[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) - per_comp_idx_const[i] = nir_const_value_for_int(i, c->bit_size); - nir_ssa_def *per_comp_idx = - nir_build_imm(b, vec->num_components, - c->bit_size, per_comp_idx_const); - - /* nir_builder will automatically splat out scalars to vectors so an - * insert is as simple as "if I'm the channel, replace me with the - * scalar." - */ - return nir_bcsel(b, nir_ieq(b, c, per_comp_idx), scalar, vec); - } -} - -static inline nir_ssa_def * -nir_iadd_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - assert(x->bit_size <= 64); - y &= BITFIELD64_MASK(x->bit_size); - - if (y == 0) { - return x; - } else { - return nir_iadd(build, x, nir_imm_intN_t(build, y, x->bit_size)); - } -} - -static inline nir_ssa_def * -nir_iadd_imm_nuw(nir_builder *b, nir_ssa_def *x, uint64_t y) -{ - nir_ssa_def *d = nir_iadd_imm(b, x, y); - if (d != x && d->parent_instr->type == nir_instr_type_alu) - nir_instr_as_alu(d->parent_instr)->no_unsigned_wrap = true; - return d; -} - -static inline nir_ssa_def * -nir_iadd_nuw(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *d = nir_iadd(b, x, y); - nir_instr_as_alu(d->parent_instr)->no_unsigned_wrap = true; - return d; -} - -static inline nir_ssa_def * -nir_ieq_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - return nir_ieq(build, x, nir_imm_intN_t(build, y, x->bit_size)); -} - -static inline nir_ssa_def * -nir_ine_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - return nir_ine(build, x, nir_imm_intN_t(build, y, x->bit_size)); -} - -/* Use nir_iadd(x, -y) for reversing parameter ordering */ -static inline nir_ssa_def * -nir_isub_imm(nir_builder *build, uint64_t y, nir_ssa_def *x) -{ - return nir_isub(build, nir_imm_intN_t(build, y, x->bit_size), x); -} - -static inline nir_ssa_def * -_nir_mul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y, bool amul) -{ - assert(x->bit_size <= 64); - y &= BITFIELD64_MASK(x->bit_size); - - if (y == 0) { - return nir_imm_intN_t(build, 0, x->bit_size); - } else if (y == 1) { - return x; - } else if (!build->shader->options->lower_bitops && - util_is_power_of_two_or_zero64(y)) { - return nir_ishl(build, x, nir_imm_int(build, ffsll(y) - 1)); - } else if (amul) { - return nir_amul(build, x, nir_imm_intN_t(build, y, x->bit_size)); - } else { - return nir_imul(build, x, nir_imm_intN_t(build, y, x->bit_size)); - } -} - -static inline nir_ssa_def * -nir_imul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - return _nir_mul_imm(build, x, y, false); -} - -static inline nir_ssa_def * -nir_amul_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - return _nir_mul_imm(build, x, y, true); -} - -static inline nir_ssa_def * -nir_fadd_imm(nir_builder *build, nir_ssa_def *x, double y) -{ - return nir_fadd(build, x, nir_imm_floatN_t(build, y, x->bit_size)); -} - -static inline nir_ssa_def * -nir_fmul_imm(nir_builder *build, nir_ssa_def *x, double y) -{ - return nir_fmul(build, x, nir_imm_floatN_t(build, y, x->bit_size)); -} - -static inline nir_ssa_def * -nir_iand_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - assert(x->bit_size <= 64); - y &= BITFIELD64_MASK(x->bit_size); - - if (y == 0) { - return nir_imm_intN_t(build, 0, x->bit_size); - } else if (y == BITFIELD64_MASK(x->bit_size)) { - return x; - } else { - return nir_iand(build, x, nir_imm_intN_t(build, y, x->bit_size)); - } -} - -static inline nir_ssa_def * -nir_test_mask(nir_builder *build, nir_ssa_def *x, uint64_t mask) -{ - assert(mask <= BITFIELD64_MASK(x->bit_size)); - return nir_ine_imm(build, nir_iand_imm(build, x, mask), 0); -} - -static inline nir_ssa_def * -nir_ior_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - assert(x->bit_size <= 64); - y &= BITFIELD64_MASK(x->bit_size); - - if (y == 0) { - return x; - } else if (y == BITFIELD64_MASK(x->bit_size)) { - return nir_imm_intN_t(build, y, x->bit_size); - } else - return nir_ior(build, x, nir_imm_intN_t(build, y, x->bit_size)); -} - -static inline nir_ssa_def * -nir_ishl_imm(nir_builder *build, nir_ssa_def *x, uint32_t y) -{ - if (y == 0) { - return x; - } else { - assert (y < x->bit_size); - return nir_ishl(build, x, nir_imm_int(build, y)); - } -} - -static inline nir_ssa_def * -nir_ishr_imm(nir_builder *build, nir_ssa_def *x, uint32_t y) -{ - if (y == 0) { - return x; - } else { - return nir_ishr(build, x, nir_imm_int(build, y)); - } -} - -static inline nir_ssa_def * -nir_ushr_imm(nir_builder *build, nir_ssa_def *x, uint32_t y) -{ - if (y == 0) { - return x; - } else { - return nir_ushr(build, x, nir_imm_int(build, y)); - } -} - -static inline nir_ssa_def * -nir_udiv_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - assert(x->bit_size <= 64); - y &= BITFIELD64_MASK(x->bit_size); - - if (y == 1) { - return x; - } else if (util_is_power_of_two_nonzero(y)) { - return nir_ushr_imm(build, x, ffsll(y) - 1); - } else { - return nir_udiv(build, x, nir_imm_intN_t(build, y, x->bit_size)); - } -} - -static inline nir_ssa_def * -nir_umod_imm(nir_builder *build, nir_ssa_def *x, uint64_t y) -{ - assert(y > 0 && y <= u_uintN_max(x->bit_size)); - - if (util_is_power_of_two_nonzero(y)) { - return nir_iand_imm(build, x, y - 1); - } else { - return nir_umod(build, x, nir_imm_intN_t(build, y, x->bit_size)); - } -} - -static inline nir_ssa_def * -nir_ibfe_imm(nir_builder *build, nir_ssa_def *x, uint32_t offset, uint32_t size) -{ - return nir_ibfe(build, x, nir_imm_int(build, offset), nir_imm_int(build, size)); -} - -static inline nir_ssa_def * -nir_ubfe_imm(nir_builder *build, nir_ssa_def *x, uint32_t offset, uint32_t size) -{ - return nir_ubfe(build, x, nir_imm_int(build, offset), nir_imm_int(build, size)); -} - -static inline nir_ssa_def * -nir_fclamp(nir_builder *b, - nir_ssa_def *x, nir_ssa_def *min_val, nir_ssa_def *max_val) -{ - return nir_fmin(b, nir_fmax(b, x, min_val), max_val); -} - -static inline nir_ssa_def * -nir_iclamp(nir_builder *b, - nir_ssa_def *x, nir_ssa_def *min_val, nir_ssa_def *max_val) -{ - return nir_imin(b, nir_imax(b, x, min_val), max_val); -} - -static inline nir_ssa_def * -nir_uclamp(nir_builder *b, - nir_ssa_def *x, nir_ssa_def *min_val, nir_ssa_def *max_val) -{ - return nir_umin(b, nir_umax(b, x, min_val), max_val); -} - -static inline nir_ssa_def * -nir_ffma_imm12(nir_builder *build, nir_ssa_def *src0, double src1, double src2) -{ - if (build->shader->options->avoid_ternary_with_two_constants) - return nir_fadd_imm(build, nir_fmul_imm(build, src0, src1), src2); - else - return nir_ffma(build, src0, nir_imm_floatN_t(build, src1, src0->bit_size), - nir_imm_floatN_t(build, src2, src0->bit_size)); -} - -static inline nir_ssa_def * -nir_ffma_imm1(nir_builder *build, nir_ssa_def *src0, double src1, nir_ssa_def *src2) -{ - return nir_ffma(build, src0, nir_imm_floatN_t(build, src1, src0->bit_size), src2); -} - -static inline nir_ssa_def * -nir_ffma_imm2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, double src2) -{ - return nir_ffma(build, src0, src1, nir_imm_floatN_t(build, src2, src0->bit_size)); -} - -static inline nir_ssa_def * -nir_a_minus_bc(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, - nir_ssa_def *src2) -{ - return nir_ffma(build, nir_fneg(build, src1), src2, src0); -} - -static inline nir_ssa_def * -nir_pack_bits(nir_builder *b, nir_ssa_def *src, unsigned dest_bit_size) -{ - assert(src->num_components * src->bit_size == dest_bit_size); - - switch (dest_bit_size) { - case 64: - switch (src->bit_size) { - case 32: return nir_pack_64_2x32(b, src); - case 16: return nir_pack_64_4x16(b, src); - default: break; - } - break; - - case 32: - if (src->bit_size == 16) - return nir_pack_32_2x16(b, src); - break; - - default: - break; - } - - /* If we got here, we have no dedicated unpack opcode. */ - nir_ssa_def *dest = nir_imm_intN_t(b, 0, dest_bit_size); - for (unsigned i = 0; i < src->num_components; i++) { - nir_ssa_def *val = nir_u2uN(b, nir_channel(b, src, i), dest_bit_size); - val = nir_ishl(b, val, nir_imm_int(b, i * src->bit_size)); - dest = nir_ior(b, dest, val); - } - return dest; -} - -static inline nir_ssa_def * -nir_unpack_bits(nir_builder *b, nir_ssa_def *src, unsigned dest_bit_size) -{ - assert(src->num_components == 1); - assert(src->bit_size > dest_bit_size); - const unsigned dest_num_components = src->bit_size / dest_bit_size; - assert(dest_num_components <= NIR_MAX_VEC_COMPONENTS); - - switch (src->bit_size) { - case 64: - switch (dest_bit_size) { - case 32: return nir_unpack_64_2x32(b, src); - case 16: return nir_unpack_64_4x16(b, src); - default: break; - } - break; - - case 32: - if (dest_bit_size == 16) - return nir_unpack_32_2x16(b, src); - break; - - default: - break; - } - - /* If we got here, we have no dedicated unpack opcode. */ - nir_ssa_def *dest_comps[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < dest_num_components; i++) { - nir_ssa_def *val = nir_ushr_imm(b, src, i * dest_bit_size); - dest_comps[i] = nir_u2uN(b, val, dest_bit_size); - } - return nir_vec(b, dest_comps, dest_num_components); -} - -/** - * Treats srcs as if it's one big blob of bits and extracts the range of bits - * given by - * - * [first_bit, first_bit + dest_num_components * dest_bit_size) - * - * The range can have any alignment or size as long as it's an integer number - * of destination components and fits inside the concatenated sources. - * - * TODO: The one caveat here is that we can't handle byte alignment if 64-bit - * values are involved because that would require pack/unpack to/from a vec8 - * which NIR currently does not support. - */ -static inline nir_ssa_def * -nir_extract_bits(nir_builder *b, nir_ssa_def **srcs, unsigned num_srcs, - unsigned first_bit, - unsigned dest_num_components, unsigned dest_bit_size) -{ - const unsigned num_bits = dest_num_components * dest_bit_size; - - /* Figure out the common bit size */ - unsigned common_bit_size = dest_bit_size; - for (unsigned i = 0; i < num_srcs; i++) - common_bit_size = MIN2(common_bit_size, srcs[i]->bit_size); - if (first_bit > 0) - common_bit_size = MIN2(common_bit_size, (1u << (ffs(first_bit) - 1))); - - /* We don't want to have to deal with 1-bit values */ - assert(common_bit_size >= 8); - - nir_ssa_def *common_comps[NIR_MAX_VEC_COMPONENTS * sizeof(uint64_t)]; - assert(num_bits / common_bit_size <= ARRAY_SIZE(common_comps)); - - /* First, unpack to the common bit size and select the components from the - * source. - */ - int src_idx = -1; - unsigned src_start_bit = 0; - unsigned src_end_bit = 0; - for (unsigned i = 0; i < num_bits / common_bit_size; i++) { - const unsigned bit = first_bit + (i * common_bit_size); - while (bit >= src_end_bit) { - src_idx++; - assert(src_idx < (int) num_srcs); - src_start_bit = src_end_bit; - src_end_bit += srcs[src_idx]->bit_size * - srcs[src_idx]->num_components; - } - assert(bit >= src_start_bit); - assert(bit + common_bit_size <= src_end_bit); - const unsigned rel_bit = bit - src_start_bit; - const unsigned src_bit_size = srcs[src_idx]->bit_size; - - nir_ssa_def *comp = nir_channel(b, srcs[src_idx], - rel_bit / src_bit_size); - if (srcs[src_idx]->bit_size > common_bit_size) { - nir_ssa_def *unpacked = nir_unpack_bits(b, comp, common_bit_size); - comp = nir_channel(b, unpacked, (rel_bit % src_bit_size) / - common_bit_size); - } - common_comps[i] = comp; - } - - /* Now, re-pack the destination if we have to */ - if (dest_bit_size > common_bit_size) { - unsigned common_per_dest = dest_bit_size / common_bit_size; - nir_ssa_def *dest_comps[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < dest_num_components; i++) { - nir_ssa_def *unpacked = nir_vec(b, common_comps + i * common_per_dest, - common_per_dest); - dest_comps[i] = nir_pack_bits(b, unpacked, dest_bit_size); - } - return nir_vec(b, dest_comps, dest_num_components); - } else { - assert(dest_bit_size == common_bit_size); - return nir_vec(b, common_comps, dest_num_components); - } -} - -static inline nir_ssa_def * -nir_bitcast_vector(nir_builder *b, nir_ssa_def *src, unsigned dest_bit_size) -{ - assert((src->bit_size * src->num_components) % dest_bit_size == 0); - const unsigned dest_num_components = - (src->bit_size * src->num_components) / dest_bit_size; - assert(dest_num_components <= NIR_MAX_VEC_COMPONENTS); - - return nir_extract_bits(b, &src, 1, 0, dest_num_components, dest_bit_size); -} - -static inline nir_ssa_def * -nir_trim_vector(nir_builder *b, nir_ssa_def *src, unsigned num_components) -{ - assert(src->num_components >= num_components); - if (src->num_components == num_components) - return src; - - return nir_channels(b, src, nir_component_mask(num_components)); -} - -/** - * Pad a value to N components with undefs of matching bit size. - * If the value already contains >= num_components, it is returned without change. - */ -static inline nir_ssa_def * -nir_pad_vector(nir_builder *b, nir_ssa_def *src, unsigned num_components) -{ - assert(src->num_components <= num_components); - if (src->num_components == num_components) - return src; - - nir_ssa_scalar components[NIR_MAX_VEC_COMPONENTS]; - nir_ssa_scalar undef = nir_get_ssa_scalar(nir_ssa_undef(b, 1, src->bit_size), 0); - unsigned i = 0; - for (; i < src->num_components; i++) - components[i] = nir_get_ssa_scalar(src, i); - for (; i < num_components; i++) - components[i] = undef; - - return nir_vec_scalars(b, components, num_components); -} - -/** - * Pad a value to N components with copies of the given immediate of matching - * bit size. If the value already contains >= num_components, it is returned - * without change. - */ -static inline nir_ssa_def * -nir_pad_vector_imm_int(nir_builder *b, nir_ssa_def *src, uint64_t imm_val, - unsigned num_components) -{ - assert(src->num_components <= num_components); - if (src->num_components == num_components) - return src; - - nir_ssa_scalar components[NIR_MAX_VEC_COMPONENTS]; - nir_ssa_scalar imm = nir_get_ssa_scalar(nir_imm_intN_t(b, imm_val, src->bit_size), 0); - unsigned i = 0; - for (; i < src->num_components; i++) - components[i] = nir_get_ssa_scalar(src, i); - for (; i < num_components; i++) - components[i] = imm; - - return nir_vec_scalars(b, components, num_components); -} - -/** - * Pad a value to 4 components with undefs of matching bit size. - * If the value already contains >= 4 components, it is returned without change. - */ -static inline nir_ssa_def * -nir_pad_vec4(nir_builder *b, nir_ssa_def *src) -{ - return nir_pad_vector(b, src, 4); -} - -/** - * Resizes a vector by either trimming off components or adding undef - * components, as needed. Only use this helper if it's actually what you - * need. Prefer nir_pad_vector() or nir_trim_vector() instead if you know a - * priori which direction you're resizing. - */ -static inline nir_ssa_def * -nir_resize_vector(nir_builder *b, nir_ssa_def *src, unsigned num_components) -{ - if (src->num_components < num_components) - return nir_pad_vector(b, src, num_components); - else - return nir_trim_vector(b, src, num_components); -} - -nir_ssa_def * -nir_ssa_for_src(nir_builder *build, nir_src src, int num_components); - -nir_ssa_def * -nir_ssa_for_alu_src(nir_builder *build, nir_alu_instr *instr, unsigned srcn); - -static inline unsigned -nir_get_ptr_bitsize(nir_shader *shader) -{ - if (shader->info.stage == MESA_SHADER_KERNEL) - return shader->info.cs.ptr_size; - return 32; -} - -static inline nir_deref_instr * -nir_build_deref_var(nir_builder *build, nir_variable *var) -{ - nir_deref_instr *deref = - nir_deref_instr_create(build->shader, nir_deref_type_var); - - deref->modes = (nir_variable_mode)var->data.mode; - deref->type = var->type; - deref->var = var; - - nir_ssa_dest_init(&deref->instr, &deref->dest, 1, - nir_get_ptr_bitsize(build->shader), NULL); - - nir_builder_instr_insert(build, &deref->instr); - - return deref; -} - -static inline nir_deref_instr * -nir_build_deref_array(nir_builder *build, nir_deref_instr *parent, - nir_ssa_def *index) -{ - assert(glsl_type_is_array(parent->type) || - glsl_type_is_matrix(parent->type) || - glsl_type_is_vector(parent->type)); - - assert(index->bit_size == parent->dest.ssa.bit_size); - - nir_deref_instr *deref = - nir_deref_instr_create(build->shader, nir_deref_type_array); - - deref->modes = parent->modes; - deref->type = glsl_get_array_element(parent->type); - deref->parent = nir_src_for_ssa(&parent->dest.ssa); - deref->arr.index = nir_src_for_ssa(index); - - nir_ssa_dest_init(&deref->instr, &deref->dest, - parent->dest.ssa.num_components, - parent->dest.ssa.bit_size, NULL); - - nir_builder_instr_insert(build, &deref->instr); - - return deref; -} - -static inline nir_deref_instr * -nir_build_deref_array_imm(nir_builder *build, nir_deref_instr *parent, - int64_t index) -{ - assert(parent->dest.is_ssa); - nir_ssa_def *idx_ssa = nir_imm_intN_t(build, index, - parent->dest.ssa.bit_size); - - return nir_build_deref_array(build, parent, idx_ssa); -} - -static inline nir_deref_instr * -nir_build_deref_ptr_as_array(nir_builder *build, nir_deref_instr *parent, - nir_ssa_def *index) -{ - assert(parent->deref_type == nir_deref_type_array || - parent->deref_type == nir_deref_type_ptr_as_array || - parent->deref_type == nir_deref_type_cast); - - assert(index->bit_size == parent->dest.ssa.bit_size); - - nir_deref_instr *deref = - nir_deref_instr_create(build->shader, nir_deref_type_ptr_as_array); - - deref->modes = parent->modes; - deref->type = parent->type; - deref->parent = nir_src_for_ssa(&parent->dest.ssa); - deref->arr.index = nir_src_for_ssa(index); - - nir_ssa_dest_init(&deref->instr, &deref->dest, - parent->dest.ssa.num_components, - parent->dest.ssa.bit_size, NULL); - - nir_builder_instr_insert(build, &deref->instr); - - return deref; -} - -static inline nir_deref_instr * -nir_build_deref_array_wildcard(nir_builder *build, nir_deref_instr *parent) -{ - assert(glsl_type_is_array(parent->type) || - glsl_type_is_matrix(parent->type)); - - nir_deref_instr *deref = - nir_deref_instr_create(build->shader, nir_deref_type_array_wildcard); - - deref->modes = parent->modes; - deref->type = glsl_get_array_element(parent->type); - deref->parent = nir_src_for_ssa(&parent->dest.ssa); - - nir_ssa_dest_init(&deref->instr, &deref->dest, - parent->dest.ssa.num_components, - parent->dest.ssa.bit_size, NULL); - - nir_builder_instr_insert(build, &deref->instr); - - return deref; -} - -static inline nir_deref_instr * -nir_build_deref_struct(nir_builder *build, nir_deref_instr *parent, - unsigned index) -{ - assert(glsl_type_is_struct_or_ifc(parent->type)); - - nir_deref_instr *deref = - nir_deref_instr_create(build->shader, nir_deref_type_struct); - - deref->modes = parent->modes; - deref->type = glsl_get_struct_field(parent->type, index); - deref->parent = nir_src_for_ssa(&parent->dest.ssa); - deref->strct.index = index; - - nir_ssa_dest_init(&deref->instr, &deref->dest, - parent->dest.ssa.num_components, - parent->dest.ssa.bit_size, NULL); - - nir_builder_instr_insert(build, &deref->instr); - - return deref; -} - -static inline nir_deref_instr * -nir_build_deref_cast(nir_builder *build, nir_ssa_def *parent, - nir_variable_mode modes, const struct glsl_type *type, - unsigned ptr_stride) -{ - nir_deref_instr *deref = - nir_deref_instr_create(build->shader, nir_deref_type_cast); - - deref->modes = modes; - deref->type = type; - deref->parent = nir_src_for_ssa(parent); - deref->cast.ptr_stride = ptr_stride; - - nir_ssa_dest_init(&deref->instr, &deref->dest, - parent->num_components, parent->bit_size, NULL); - - nir_builder_instr_insert(build, &deref->instr); - - return deref; -} - -static inline nir_deref_instr * -nir_alignment_deref_cast(nir_builder *build, nir_deref_instr *parent, - uint32_t align_mul, uint32_t align_offset) -{ - nir_deref_instr *deref = - nir_deref_instr_create(build->shader, nir_deref_type_cast); - - deref->modes = parent->modes; - deref->type = parent->type; - deref->parent = nir_src_for_ssa(&parent->dest.ssa); - deref->cast.ptr_stride = nir_deref_instr_array_stride(deref); - deref->cast.align_mul = align_mul; - deref->cast.align_offset = align_offset; - - nir_ssa_dest_init(&deref->instr, &deref->dest, - parent->dest.ssa.num_components, - parent->dest.ssa.bit_size, NULL); - - nir_builder_instr_insert(build, &deref->instr); - - return deref; -} - -/** Returns a deref that follows another but starting from the given parent - * - * The new deref will be the same type and take the same array or struct index - * as the leader deref but it may have a different parent. This is very - * useful for walking deref paths. - */ -static inline nir_deref_instr * -nir_build_deref_follower(nir_builder *b, nir_deref_instr *parent, - nir_deref_instr *leader) -{ - /* If the derefs would have the same parent, don't make a new one */ - assert(leader->parent.is_ssa); - if (leader->parent.ssa == &parent->dest.ssa) - return leader; - - UNUSED nir_deref_instr *leader_parent = nir_src_as_deref(leader->parent); - - switch (leader->deref_type) { - case nir_deref_type_var: - unreachable("A var dereference cannot have a parent"); - break; - - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - assert(glsl_type_is_matrix(parent->type) || - glsl_type_is_array(parent->type) || - (leader->deref_type == nir_deref_type_array && - glsl_type_is_vector(parent->type))); - assert(glsl_get_length(parent->type) == - glsl_get_length(leader_parent->type)); - - if (leader->deref_type == nir_deref_type_array) { - assert(leader->arr.index.is_ssa); - nir_ssa_def *index = nir_i2iN(b, leader->arr.index.ssa, - parent->dest.ssa.bit_size); - return nir_build_deref_array(b, parent, index); - } else { - return nir_build_deref_array_wildcard(b, parent); - } - - case nir_deref_type_struct: - assert(glsl_type_is_struct_or_ifc(parent->type)); - assert(glsl_get_length(parent->type) == - glsl_get_length(leader_parent->type)); - - return nir_build_deref_struct(b, parent, leader->strct.index); - - default: - unreachable("Invalid deref instruction type"); - } -} - -static inline nir_ssa_def * -nir_load_reg(nir_builder *build, nir_register *reg) -{ - return nir_ssa_for_src(build, nir_src_for_reg(reg), reg->num_components); -} - -static inline void -nir_store_reg(nir_builder *build, nir_register *reg, - nir_ssa_def *def, nir_component_mask_t write_mask) -{ - assert(reg->num_components == def->num_components); - assert(reg->bit_size == def->bit_size); - - nir_alu_instr *mov = nir_alu_instr_create(build->shader, nir_op_mov); - mov->src[0].src = nir_src_for_ssa(def); - mov->dest.dest = nir_dest_for_reg(reg); - mov->dest.write_mask = write_mask & BITFIELD_MASK(reg->num_components); - nir_builder_instr_insert(build, &mov->instr); -} - -static inline nir_ssa_def * -nir_load_deref_with_access(nir_builder *build, nir_deref_instr *deref, - enum gl_access_qualifier access) -{ - return nir_build_load_deref(build, glsl_get_vector_elements(deref->type), - glsl_get_bit_size(deref->type), &deref->dest.ssa, - access); -} - -#undef nir_load_deref -static inline nir_ssa_def * -nir_load_deref(nir_builder *build, nir_deref_instr *deref) -{ - return nir_load_deref_with_access(build, deref, (enum gl_access_qualifier)0); -} - -static inline void -nir_store_deref_with_access(nir_builder *build, nir_deref_instr *deref, - nir_ssa_def *value, unsigned writemask, - enum gl_access_qualifier access) -{ - writemask &= (1u << value->num_components) - 1u; - nir_build_store_deref(build, &deref->dest.ssa, value, writemask, access); -} - -#undef nir_store_deref -static inline void -nir_store_deref(nir_builder *build, nir_deref_instr *deref, - nir_ssa_def *value, unsigned writemask) -{ - nir_store_deref_with_access(build, deref, value, writemask, - (enum gl_access_qualifier)0); -} - -static inline void -nir_copy_deref_with_access(nir_builder *build, nir_deref_instr *dest, - nir_deref_instr *src, - enum gl_access_qualifier dest_access, - enum gl_access_qualifier src_access) -{ - nir_build_copy_deref(build, &dest->dest.ssa, &src->dest.ssa, dest_access, src_access); -} - -#undef nir_copy_deref -static inline void -nir_copy_deref(nir_builder *build, nir_deref_instr *dest, nir_deref_instr *src) -{ - nir_copy_deref_with_access(build, dest, src, - (enum gl_access_qualifier) 0, - (enum gl_access_qualifier) 0); -} - -static inline void -nir_memcpy_deref_with_access(nir_builder *build, nir_deref_instr *dest, - nir_deref_instr *src, nir_ssa_def *size, - enum gl_access_qualifier dest_access, - enum gl_access_qualifier src_access) -{ - nir_build_memcpy_deref(build, &dest->dest.ssa, &src->dest.ssa, - size, dest_access, src_access); -} - -#undef nir_memcpy_deref -static inline void -nir_memcpy_deref(nir_builder *build, nir_deref_instr *dest, - nir_deref_instr *src, nir_ssa_def *size) -{ - nir_memcpy_deref_with_access(build, dest, src, size, - (enum gl_access_qualifier)0, - (enum gl_access_qualifier)0); -} - -static inline nir_ssa_def * -nir_load_var(nir_builder *build, nir_variable *var) -{ - return nir_load_deref(build, nir_build_deref_var(build, var)); -} - -static inline void -nir_store_var(nir_builder *build, nir_variable *var, nir_ssa_def *value, - unsigned writemask) -{ - nir_store_deref(build, nir_build_deref_var(build, var), value, writemask); -} - -static inline void -nir_copy_var(nir_builder *build, nir_variable *dest, nir_variable *src) -{ - nir_copy_deref(build, nir_build_deref_var(build, dest), - nir_build_deref_var(build, src)); -} - -static inline nir_ssa_def * -nir_load_array_var(nir_builder *build, nir_variable *var, nir_ssa_def *index) -{ - nir_deref_instr *deref = - nir_build_deref_array(build, nir_build_deref_var(build, var), index); - return nir_load_deref(build, deref); -} - -static inline nir_ssa_def * -nir_load_array_var_imm(nir_builder *build, nir_variable *var, int64_t index) -{ - nir_deref_instr *deref = - nir_build_deref_array_imm(build, nir_build_deref_var(build, var), index); - return nir_load_deref(build, deref); -} - -static inline void -nir_store_array_var(nir_builder *build, nir_variable *var, nir_ssa_def *index, - nir_ssa_def *value, unsigned writemask) -{ - nir_deref_instr *deref = - nir_build_deref_array(build, nir_build_deref_var(build, var), index); - nir_store_deref(build, deref, value, writemask); -} - -static inline void -nir_store_array_var_imm(nir_builder *build, nir_variable *var, int64_t index, - nir_ssa_def *value, unsigned writemask) -{ - nir_deref_instr *deref = - nir_build_deref_array_imm(build, nir_build_deref_var(build, var), index); - nir_store_deref(build, deref, value, writemask); -} - -#undef nir_load_global -static inline nir_ssa_def * -nir_load_global(nir_builder *build, nir_ssa_def *addr, unsigned align, - unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *load = - nir_intrinsic_instr_create(build->shader, nir_intrinsic_load_global); - load->num_components = num_components; - load->src[0] = nir_src_for_ssa(addr); - nir_intrinsic_set_align(load, align, 0); - nir_ssa_dest_init(&load->instr, &load->dest, - num_components, bit_size, NULL); - nir_builder_instr_insert(build, &load->instr); - return &load->dest.ssa; -} - -#undef nir_store_global -static inline void -nir_store_global(nir_builder *build, nir_ssa_def *addr, unsigned align, - nir_ssa_def *value, nir_component_mask_t write_mask) -{ - nir_intrinsic_instr *store = - nir_intrinsic_instr_create(build->shader, nir_intrinsic_store_global); - store->num_components = value->num_components; - store->src[0] = nir_src_for_ssa(value); - store->src[1] = nir_src_for_ssa(addr); - nir_intrinsic_set_write_mask(store, - write_mask & BITFIELD_MASK(value->num_components)); - nir_intrinsic_set_align(store, align, 0); - nir_builder_instr_insert(build, &store->instr); -} - -#undef nir_load_global_constant -static inline nir_ssa_def * -nir_load_global_constant(nir_builder *build, nir_ssa_def *addr, unsigned align, - unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *load = - nir_intrinsic_instr_create(build->shader, nir_intrinsic_load_global_constant); - load->num_components = num_components; - load->src[0] = nir_src_for_ssa(addr); - nir_intrinsic_set_align(load, align, 0); - nir_ssa_dest_init(&load->instr, &load->dest, - num_components, bit_size, NULL); - nir_builder_instr_insert(build, &load->instr); - return &load->dest.ssa; -} - -#undef nir_load_param -static inline nir_ssa_def * -nir_load_param(nir_builder *build, uint32_t param_idx) -{ - assert(param_idx < build->impl->function->num_params); - nir_parameter *param = &build->impl->function->params[param_idx]; - return nir_build_load_param(build, param->num_components, param->bit_size, param_idx); -} - -static inline nir_ssa_def * -nir_tex_deref(nir_builder *b, nir_deref_instr *t, nir_deref_instr *s, - nir_ssa_def *coord) -{ - nir_tex_src srcs[1] = {{ - nir_src_for_ssa(coord), - nir_tex_src_coord, - }}; - - return nir_build_tex_deref_instr(b, nir_texop_tex, t, s, - ARRAY_SIZE(srcs), srcs); -} - -static inline nir_ssa_def * -nir_txl_deref(nir_builder *b, nir_deref_instr *t, nir_deref_instr *s, - nir_ssa_def *coord, nir_ssa_def *lod) -{ - nir_tex_src srcs[2] = {{ - nir_src_for_ssa(coord), - nir_tex_src_coord, - }, { - nir_src_for_ssa(lod), - nir_tex_src_lod, - }}; - - return nir_build_tex_deref_instr(b, nir_texop_txl, t, s, - ARRAY_SIZE(srcs), srcs); -} - -static inline nir_ssa_def * -nir_txl_zero_deref(nir_builder *b, nir_deref_instr *t, nir_deref_instr *s, - nir_ssa_def *coord) -{ - return nir_txl_deref(b, t, s, coord, nir_imm_float(b, 0)); -} - -static inline nir_ssa_def * -nir_txf_deref(nir_builder *b, nir_deref_instr *t, - nir_ssa_def *coord, nir_ssa_def *lod) -{ - nir_tex_src srcs[2]; - unsigned num_srcs = 0; - - srcs[num_srcs].src_type = nir_tex_src_coord; - srcs[num_srcs].src = nir_src_for_ssa(coord); - num_srcs++; - - if (lod == NULL) { - switch (glsl_get_sampler_dim(t->type)) { - case GLSL_SAMPLER_DIM_1D: - case GLSL_SAMPLER_DIM_2D: - case GLSL_SAMPLER_DIM_3D: - case GLSL_SAMPLER_DIM_CUBE: - lod = nir_imm_int(b, 0); - break; - default: - break; - } - } - - if (lod != NULL) { - srcs[num_srcs].src_type = nir_tex_src_lod; - srcs[num_srcs].src = nir_src_for_ssa(lod); - num_srcs++; - } - - return nir_build_tex_deref_instr(b, nir_texop_txf, t, NULL, - num_srcs, srcs); -} - -static inline nir_ssa_def * -nir_txf_ms_deref(nir_builder *b, nir_deref_instr *t, - nir_ssa_def *coord, nir_ssa_def *ms_index) -{ - nir_tex_src srcs[2] = {{ - nir_src_for_ssa(coord), - nir_tex_src_coord, - }, { - nir_src_for_ssa(ms_index), - nir_tex_src_ms_index, - }}; - - return nir_build_tex_deref_instr(b, nir_texop_txf_ms, t, NULL, - ARRAY_SIZE(srcs), srcs); -} - -static inline nir_ssa_def * -nir_samples_identical_deref(nir_builder *b, nir_deref_instr *t, - nir_ssa_def *coord) -{ - nir_tex_src srcs[1] = {{ - nir_src_for_ssa(coord), - nir_tex_src_coord, - }}; - - return nir_build_tex_deref_instr(b, nir_texop_samples_identical, t, NULL, - ARRAY_SIZE(srcs), srcs); -} - -/* calculate a `(1 << value) - 1` in ssa without overflows */ -static inline nir_ssa_def * -nir_mask(nir_builder *b, nir_ssa_def *bits, unsigned dst_bit_size) -{ - return nir_ushr(b, nir_imm_intN_t(b, -1, dst_bit_size), - nir_isub_imm(b, dst_bit_size, nir_u2u32(b, bits))); -} - -static inline nir_ssa_def * -nir_load_barycentric(nir_builder *build, nir_intrinsic_op op, - unsigned interp_mode) -{ - unsigned num_components = op == nir_intrinsic_load_barycentric_model ? 3 : 2; - nir_intrinsic_instr *bary = nir_intrinsic_instr_create(build->shader, op); - nir_ssa_dest_init(&bary->instr, &bary->dest, num_components, 32, NULL); - nir_intrinsic_set_interp_mode(bary, interp_mode); - nir_builder_instr_insert(build, &bary->instr); - return &bary->dest.ssa; -} - -static inline void -nir_jump(nir_builder *build, nir_jump_type jump_type) -{ - assert(jump_type != nir_jump_goto && jump_type != nir_jump_goto_if); - nir_jump_instr *jump = nir_jump_instr_create(build->shader, jump_type); - nir_builder_instr_insert(build, &jump->instr); -} - -static inline void -nir_goto(nir_builder *build, struct nir_block *target) -{ - assert(!build->impl->structured); - nir_jump_instr *jump = nir_jump_instr_create(build->shader, nir_jump_goto); - jump->target = target; - nir_builder_instr_insert(build, &jump->instr); -} - -static inline void -nir_goto_if(nir_builder *build, struct nir_block *target, nir_src cond, - struct nir_block *else_target) -{ - assert(!build->impl->structured); - nir_jump_instr *jump = nir_jump_instr_create(build->shader, nir_jump_goto_if); - jump->condition = cond; - jump->target = target; - jump->else_target = else_target; - nir_builder_instr_insert(build, &jump->instr); -} - -nir_ssa_def * -nir_compare_func(nir_builder *b, enum compare_func func, - nir_ssa_def *src0, nir_ssa_def *src1); - -static inline void -nir_scoped_memory_barrier(nir_builder *b, - nir_scope scope, - nir_memory_semantics semantics, - nir_variable_mode modes) -{ - nir_scoped_barrier(b, NIR_SCOPE_NONE, scope, semantics, modes); -} - -nir_ssa_def * -nir_gen_rect_vertices(nir_builder *b, nir_ssa_def *z, nir_ssa_def *w); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* NIR_BUILDER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder_opcodes.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder_opcodes.h deleted file mode 100644 index cebefe5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder_opcodes.h +++ /dev/null @@ -1,17596 +0,0 @@ -/* Copyright (C) 2015 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_BUILDER_OPCODES_ -#define _NIR_BUILDER_OPCODES_ - - - -static inline nir_ssa_def * -nir_amul(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_amul, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_fequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_fequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_fequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_fequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_fequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_fequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_fequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_fequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_fequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_fequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_fequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_fequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_iequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_iequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_iequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_iequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_iequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_iequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_iequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_iequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_iequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_iequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b16all_iequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16all_iequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_fnequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_fnequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_fnequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_fnequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_fnequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_fnequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_fnequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_fnequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_fnequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_fnequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_fnequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_fnequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_inequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_inequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_inequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_inequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_inequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_inequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_inequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_inequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_inequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_inequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b16any_inequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b16any_inequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b16csel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_b16csel, src0, src1, src2); -} -static inline nir_ssa_def * -nir_b2b1(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 1) - return src0; - return nir_build_alu1(build, nir_op_b2b1, src0); -} -static inline nir_ssa_def * -nir_b2b16(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 16) - return src0; - return nir_build_alu1(build, nir_op_b2b16, src0); -} -static inline nir_ssa_def * -nir_b2b32(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 32) - return src0; - return nir_build_alu1(build, nir_op_b2b32, src0); -} -static inline nir_ssa_def * -nir_b2b8(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 8) - return src0; - return nir_build_alu1(build, nir_op_b2b8, src0); -} -static inline nir_ssa_def * -nir_b2f16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2f16, src0); -} -static inline nir_ssa_def * -nir_b2f32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2f32, src0); -} -static inline nir_ssa_def * -nir_b2f64(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2f64, src0); -} -static inline nir_ssa_def * -nir_b2i1(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2i1, src0); -} -static inline nir_ssa_def * -nir_b2i16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2i16, src0); -} -static inline nir_ssa_def * -nir_b2i32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2i32, src0); -} -static inline nir_ssa_def * -nir_b2i64(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2i64, src0); -} -static inline nir_ssa_def * -nir_b2i8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_b2i8, src0); -} -static inline nir_ssa_def * -nir_b32all_fequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_fequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_fequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_fequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_fequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_fequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_fequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_fequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_fequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_fequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_fequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_fequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_iequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_iequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_iequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_iequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_iequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_iequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_iequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_iequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_iequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_iequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b32all_iequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32all_iequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_fnequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_fnequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_fnequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_fnequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_fnequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_fnequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_fnequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_fnequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_fnequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_fnequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_fnequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_fnequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_inequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_inequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_inequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_inequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_inequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_inequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_inequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_inequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_inequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_inequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b32any_inequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b32any_inequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b32csel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_b32csel, src0, src1, src2); -} -static inline nir_ssa_def * -nir_b8all_fequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_fequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_fequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_fequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_fequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_fequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_fequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_fequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_fequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_fequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_fequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_fequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_iequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_iequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_iequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_iequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_iequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_iequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_iequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_iequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_iequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_iequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b8all_iequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8all_iequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_fnequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_fnequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_fnequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_fnequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_fnequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_fnequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_fnequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_fnequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_fnequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_fnequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_fnequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_fnequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_inequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_inequal16, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_inequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_inequal2, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_inequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_inequal3, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_inequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_inequal4, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_inequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_inequal5, src0, src1); -} -static inline nir_ssa_def * -nir_b8any_inequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_b8any_inequal8, src0, src1); -} -static inline nir_ssa_def * -nir_b8csel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_b8csel, src0, src1, src2); -} -static inline nir_ssa_def * -nir_ball_fequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_fequal16, src0, src1); -} -static inline nir_ssa_def * -nir_ball_fequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_fequal2, src0, src1); -} -static inline nir_ssa_def * -nir_ball_fequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_fequal3, src0, src1); -} -static inline nir_ssa_def * -nir_ball_fequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_fequal4, src0, src1); -} -static inline nir_ssa_def * -nir_ball_fequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_fequal5, src0, src1); -} -static inline nir_ssa_def * -nir_ball_fequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_fequal8, src0, src1); -} -static inline nir_ssa_def * -nir_ball_iequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_iequal16, src0, src1); -} -static inline nir_ssa_def * -nir_ball_iequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_iequal2, src0, src1); -} -static inline nir_ssa_def * -nir_ball_iequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_iequal3, src0, src1); -} -static inline nir_ssa_def * -nir_ball_iequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_iequal4, src0, src1); -} -static inline nir_ssa_def * -nir_ball_iequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_iequal5, src0, src1); -} -static inline nir_ssa_def * -nir_ball_iequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ball_iequal8, src0, src1); -} -static inline nir_ssa_def * -nir_bany_fnequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_fnequal16, src0, src1); -} -static inline nir_ssa_def * -nir_bany_fnequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_fnequal2, src0, src1); -} -static inline nir_ssa_def * -nir_bany_fnequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_fnequal3, src0, src1); -} -static inline nir_ssa_def * -nir_bany_fnequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_fnequal4, src0, src1); -} -static inline nir_ssa_def * -nir_bany_fnequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_fnequal5, src0, src1); -} -static inline nir_ssa_def * -nir_bany_fnequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_fnequal8, src0, src1); -} -static inline nir_ssa_def * -nir_bany_inequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_inequal16, src0, src1); -} -static inline nir_ssa_def * -nir_bany_inequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_inequal2, src0, src1); -} -static inline nir_ssa_def * -nir_bany_inequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_inequal3, src0, src1); -} -static inline nir_ssa_def * -nir_bany_inequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_inequal4, src0, src1); -} -static inline nir_ssa_def * -nir_bany_inequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_inequal5, src0, src1); -} -static inline nir_ssa_def * -nir_bany_inequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bany_inequal8, src0, src1); -} -static inline nir_ssa_def * -nir_bcsel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_bcsel, src0, src1, src2); -} -static inline nir_ssa_def * -nir_bfi(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_bfi, src0, src1, src2); -} -static inline nir_ssa_def * -nir_bfm(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_bfm, src0, src1); -} -static inline nir_ssa_def * -nir_bit_count(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_bit_count, src0); -} -static inline nir_ssa_def * -nir_bitfield_insert(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - return nir_build_alu4(build, nir_op_bitfield_insert, src0, src1, src2, src3); -} -static inline nir_ssa_def * -nir_bitfield_reverse(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_bitfield_reverse, src0); -} -static inline nir_ssa_def * -nir_bitfield_select(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_bitfield_select, src0, src1, src2); -} -static inline nir_ssa_def * -nir_cube_face_coord_amd(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_cube_face_coord_amd, src0); -} -static inline nir_ssa_def * -nir_cube_face_index_amd(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_cube_face_index_amd, src0); -} -static inline nir_ssa_def * -nir_cube_r600(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_cube_r600, src0); -} -static inline nir_ssa_def * -nir_extr_agx(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - return nir_build_alu4(build, nir_op_extr_agx, src0, src1, src2, src3); -} -static inline nir_ssa_def * -nir_extract_i16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_extract_i16, src0, src1); -} -static inline nir_ssa_def * -nir_extract_i8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_extract_i8, src0, src1); -} -static inline nir_ssa_def * -nir_extract_u16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_extract_u16, src0, src1); -} -static inline nir_ssa_def * -nir_extract_u8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_extract_u8, src0, src1); -} -static inline nir_ssa_def * -nir_f2f16(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 16) - return src0; - return nir_build_alu1(build, nir_op_f2f16, src0); -} -static inline nir_ssa_def * -nir_f2f16_rtne(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 16) - return src0; - return nir_build_alu1(build, nir_op_f2f16_rtne, src0); -} -static inline nir_ssa_def * -nir_f2f16_rtz(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 16) - return src0; - return nir_build_alu1(build, nir_op_f2f16_rtz, src0); -} -static inline nir_ssa_def * -nir_f2f32(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 32) - return src0; - return nir_build_alu1(build, nir_op_f2f32, src0); -} -static inline nir_ssa_def * -nir_f2f64(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 64) - return src0; - return nir_build_alu1(build, nir_op_f2f64, src0); -} -static inline nir_ssa_def * -nir_f2fmp(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2fmp, src0); -} -static inline nir_ssa_def * -nir_f2i1(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2i1, src0); -} -static inline nir_ssa_def * -nir_f2i16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2i16, src0); -} -static inline nir_ssa_def * -nir_f2i32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2i32, src0); -} -static inline nir_ssa_def * -nir_f2i64(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2i64, src0); -} -static inline nir_ssa_def * -nir_f2i8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2i8, src0); -} -static inline nir_ssa_def * -nir_f2imp(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2imp, src0); -} -static inline nir_ssa_def * -nir_f2u1(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2u1, src0); -} -static inline nir_ssa_def * -nir_f2u16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2u16, src0); -} -static inline nir_ssa_def * -nir_f2u32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2u32, src0); -} -static inline nir_ssa_def * -nir_f2u64(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2u64, src0); -} -static inline nir_ssa_def * -nir_f2u8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2u8, src0); -} -static inline nir_ssa_def * -nir_f2ump(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_f2ump, src0); -} -static inline nir_ssa_def * -nir_fabs(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fabs, src0); -} -static inline nir_ssa_def * -nir_fadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fadd, src0, src1); -} -static inline nir_ssa_def * -nir_fall_equal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fall_equal16, src0, src1); -} -static inline nir_ssa_def * -nir_fall_equal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fall_equal2, src0, src1); -} -static inline nir_ssa_def * -nir_fall_equal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fall_equal3, src0, src1); -} -static inline nir_ssa_def * -nir_fall_equal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fall_equal4, src0, src1); -} -static inline nir_ssa_def * -nir_fall_equal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fall_equal5, src0, src1); -} -static inline nir_ssa_def * -nir_fall_equal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fall_equal8, src0, src1); -} -static inline nir_ssa_def * -nir_fany_nequal16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fany_nequal16, src0, src1); -} -static inline nir_ssa_def * -nir_fany_nequal2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fany_nequal2, src0, src1); -} -static inline nir_ssa_def * -nir_fany_nequal3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fany_nequal3, src0, src1); -} -static inline nir_ssa_def * -nir_fany_nequal4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fany_nequal4, src0, src1); -} -static inline nir_ssa_def * -nir_fany_nequal5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fany_nequal5, src0, src1); -} -static inline nir_ssa_def * -nir_fany_nequal8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fany_nequal8, src0, src1); -} -static inline nir_ssa_def * -nir_fceil(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fceil, src0); -} -static inline nir_ssa_def * -nir_fclamp_pos_mali(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fclamp_pos_mali, src0); -} -static inline nir_ssa_def * -nir_fcos(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fcos, src0); -} -static inline nir_ssa_def * -nir_fcos_amd(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fcos_amd, src0); -} -static inline nir_ssa_def * -nir_fcos_mdg(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fcos_mdg, src0); -} -static inline nir_ssa_def * -nir_fcsel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_fcsel, src0, src1, src2); -} -static inline nir_ssa_def * -nir_fcsel_ge(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_fcsel_ge, src0, src1, src2); -} -static inline nir_ssa_def * -nir_fcsel_gt(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_fcsel_gt, src0, src1, src2); -} -static inline nir_ssa_def * -nir_fddx(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddx, src0); -} -static inline nir_ssa_def * -nir_fddx_coarse(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddx_coarse, src0); -} -static inline nir_ssa_def * -nir_fddx_fine(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddx_fine, src0); -} -static inline nir_ssa_def * -nir_fddx_must_abs_mali(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddx_must_abs_mali, src0); -} -static inline nir_ssa_def * -nir_fddy(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddy, src0); -} -static inline nir_ssa_def * -nir_fddy_coarse(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddy_coarse, src0); -} -static inline nir_ssa_def * -nir_fddy_fine(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddy_fine, src0); -} -static inline nir_ssa_def * -nir_fddy_must_abs_mali(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fddy_must_abs_mali, src0); -} -static inline nir_ssa_def * -nir_fdiv(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdiv, src0, src1); -} -static inline nir_ssa_def * -nir_fdot16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdot16, src0, src1); -} -static inline nir_ssa_def * -nir_fdot2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdot2, src0, src1); -} -static inline nir_ssa_def * -nir_fdot3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdot3, src0, src1); -} -static inline nir_ssa_def * -nir_fdot4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdot4, src0, src1); -} -static inline nir_ssa_def * -nir_fdot5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdot5, src0, src1); -} -static inline nir_ssa_def * -nir_fdot8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdot8, src0, src1); -} -static inline nir_ssa_def * -nir_fdph(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fdph, src0, src1); -} -static inline nir_ssa_def * -nir_feq(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_feq, src0, src1); -} -static inline nir_ssa_def * -nir_feq16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_feq16, src0, src1); -} -static inline nir_ssa_def * -nir_feq32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_feq32, src0, src1); -} -static inline nir_ssa_def * -nir_feq8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_feq8, src0, src1); -} -static inline nir_ssa_def * -nir_fexp2(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fexp2, src0); -} -static inline nir_ssa_def * -nir_ffloor(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ffloor, src0); -} -static inline nir_ssa_def * -nir_ffma(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_ffma, src0, src1, src2); -} -static inline nir_ssa_def * -nir_ffmaz(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_ffmaz, src0, src1, src2); -} -static inline nir_ssa_def * -nir_ffract(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ffract, src0); -} -static inline nir_ssa_def * -nir_fge(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fge, src0, src1); -} -static inline nir_ssa_def * -nir_fge16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fge16, src0, src1); -} -static inline nir_ssa_def * -nir_fge32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fge32, src0, src1); -} -static inline nir_ssa_def * -nir_fge8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fge8, src0, src1); -} -static inline nir_ssa_def * -nir_find_lsb(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_find_lsb, src0); -} -static inline nir_ssa_def * -nir_fisfinite(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fisfinite, src0); -} -static inline nir_ssa_def * -nir_fisfinite32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fisfinite32, src0); -} -static inline nir_ssa_def * -nir_fisnormal(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fisnormal, src0); -} -static inline nir_ssa_def * -nir_flog2(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_flog2, src0); -} -static inline nir_ssa_def * -nir_flrp(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_flrp, src0, src1, src2); -} -static inline nir_ssa_def * -nir_flt(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_flt, src0, src1); -} -static inline nir_ssa_def * -nir_flt16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_flt16, src0, src1); -} -static inline nir_ssa_def * -nir_flt32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_flt32, src0, src1); -} -static inline nir_ssa_def * -nir_flt8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_flt8, src0, src1); -} -static inline nir_ssa_def * -nir_fmax(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fmax, src0, src1); -} -static inline nir_ssa_def * -nir_fmin(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fmin, src0, src1); -} -static inline nir_ssa_def * -nir_fmod(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fmod, src0, src1); -} -static inline nir_ssa_def * -nir_fmul(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fmul, src0, src1); -} -static inline nir_ssa_def * -nir_fmulz(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fmulz, src0, src1); -} -static inline nir_ssa_def * -nir_fneg(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fneg, src0); -} -static inline nir_ssa_def * -nir_fneu(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fneu, src0, src1); -} -static inline nir_ssa_def * -nir_fneu16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fneu16, src0, src1); -} -static inline nir_ssa_def * -nir_fneu32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fneu32, src0, src1); -} -static inline nir_ssa_def * -nir_fneu8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fneu8, src0, src1); -} -static inline nir_ssa_def * -nir_fpow(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fpow, src0, src1); -} -static inline nir_ssa_def * -nir_fquantize2f16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fquantize2f16, src0); -} -static inline nir_ssa_def * -nir_frcp(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_frcp, src0); -} -static inline nir_ssa_def * -nir_frem(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_frem, src0, src1); -} -static inline nir_ssa_def * -nir_frexp_exp(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_frexp_exp, src0); -} -static inline nir_ssa_def * -nir_frexp_sig(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_frexp_sig, src0); -} -static inline nir_ssa_def * -nir_fround_even(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fround_even, src0); -} -static inline nir_ssa_def * -nir_frsq(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_frsq, src0); -} -static inline nir_ssa_def * -nir_fsat(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsat, src0); -} -static inline nir_ssa_def * -nir_fsat_signed_mali(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsat_signed_mali, src0); -} -static inline nir_ssa_def * -nir_fsign(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsign, src0); -} -static inline nir_ssa_def * -nir_fsin(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsin, src0); -} -static inline nir_ssa_def * -nir_fsin_agx(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsin_agx, src0); -} -static inline nir_ssa_def * -nir_fsin_amd(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsin_amd, src0); -} -static inline nir_ssa_def * -nir_fsin_mdg(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsin_mdg, src0); -} -static inline nir_ssa_def * -nir_fsqrt(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsqrt, src0); -} -static inline nir_ssa_def * -nir_fsub(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_fsub, src0, src1); -} -static inline nir_ssa_def * -nir_fsum2(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsum2, src0); -} -static inline nir_ssa_def * -nir_fsum3(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsum3, src0); -} -static inline nir_ssa_def * -nir_fsum4(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_fsum4, src0); -} -static inline nir_ssa_def * -nir_ftrunc(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ftrunc, src0); -} -static inline nir_ssa_def * -nir_i2f16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_i2f16, src0); -} -static inline nir_ssa_def * -nir_i2f32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_i2f32, src0); -} -static inline nir_ssa_def * -nir_i2f64(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_i2f64, src0); -} -static inline nir_ssa_def * -nir_i2fmp(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_i2fmp, src0); -} -static inline nir_ssa_def * -nir_i2i1(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 1) - return src0; - return nir_build_alu1(build, nir_op_i2i1, src0); -} -static inline nir_ssa_def * -nir_i2i16(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 16) - return src0; - return nir_build_alu1(build, nir_op_i2i16, src0); -} -static inline nir_ssa_def * -nir_i2i32(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 32) - return src0; - return nir_build_alu1(build, nir_op_i2i32, src0); -} -static inline nir_ssa_def * -nir_i2i64(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 64) - return src0; - return nir_build_alu1(build, nir_op_i2i64, src0); -} -static inline nir_ssa_def * -nir_i2i8(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 8) - return src0; - return nir_build_alu1(build, nir_op_i2i8, src0); -} -static inline nir_ssa_def * -nir_i2imp(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_i2imp, src0); -} -static inline nir_ssa_def * -nir_i32csel_ge(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_i32csel_ge, src0, src1, src2); -} -static inline nir_ssa_def * -nir_i32csel_gt(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_i32csel_gt, src0, src1, src2); -} -static inline nir_ssa_def * -nir_iabs(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_iabs, src0); -} -static inline nir_ssa_def * -nir_iadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_iadd, src0, src1); -} -static inline nir_ssa_def * -nir_iadd3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_iadd3, src0, src1, src2); -} -static inline nir_ssa_def * -nir_iadd_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_iadd_sat, src0, src1); -} -static inline nir_ssa_def * -nir_iand(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_iand, src0, src1); -} -static inline nir_ssa_def * -nir_ibfe(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_ibfe, src0, src1, src2); -} -static inline nir_ssa_def * -nir_ibitfield_extract(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_ibitfield_extract, src0, src1, src2); -} -static inline nir_ssa_def * -nir_idiv(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_idiv, src0, src1); -} -static inline nir_ssa_def * -nir_ieq(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ieq, src0, src1); -} -static inline nir_ssa_def * -nir_ieq16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ieq16, src0, src1); -} -static inline nir_ssa_def * -nir_ieq32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ieq32, src0, src1); -} -static inline nir_ssa_def * -nir_ieq8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ieq8, src0, src1); -} -static inline nir_ssa_def * -nir_ifind_msb(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ifind_msb, src0); -} -static inline nir_ssa_def * -nir_ifind_msb_rev(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ifind_msb_rev, src0); -} -static inline nir_ssa_def * -nir_ige(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ige, src0, src1); -} -static inline nir_ssa_def * -nir_ige16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ige16, src0, src1); -} -static inline nir_ssa_def * -nir_ige32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ige32, src0, src1); -} -static inline nir_ssa_def * -nir_ige8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ige8, src0, src1); -} -static inline nir_ssa_def * -nir_ihadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ihadd, src0, src1); -} -static inline nir_ssa_def * -nir_ilt(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ilt, src0, src1); -} -static inline nir_ssa_def * -nir_ilt16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ilt16, src0, src1); -} -static inline nir_ssa_def * -nir_ilt32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ilt32, src0, src1); -} -static inline nir_ssa_def * -nir_ilt8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ilt8, src0, src1); -} -static inline nir_ssa_def * -nir_imad24_ir3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_imad24_ir3, src0, src1, src2); -} -static inline nir_ssa_def * -nir_imadsh_mix16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_imadsh_mix16, src0, src1, src2); -} -static inline nir_ssa_def * -nir_imax(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imax, src0, src1); -} -static inline nir_ssa_def * -nir_imin(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imin, src0, src1); -} -static inline nir_ssa_def * -nir_imod(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imod, src0, src1); -} -static inline nir_ssa_def * -nir_imul(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imul, src0, src1); -} -static inline nir_ssa_def * -nir_imul24(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imul24, src0, src1); -} -static inline nir_ssa_def * -nir_imul24_relaxed(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imul24_relaxed, src0, src1); -} -static inline nir_ssa_def * -nir_imul_2x32_64(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imul_2x32_64, src0, src1); -} -static inline nir_ssa_def * -nir_imul_32x16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imul_32x16, src0, src1); -} -static inline nir_ssa_def * -nir_imul_high(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_imul_high, src0, src1); -} -static inline nir_ssa_def * -nir_ine(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ine, src0, src1); -} -static inline nir_ssa_def * -nir_ine16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ine16, src0, src1); -} -static inline nir_ssa_def * -nir_ine32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ine32, src0, src1); -} -static inline nir_ssa_def * -nir_ine8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ine8, src0, src1); -} -static inline nir_ssa_def * -nir_ineg(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ineg, src0); -} -static inline nir_ssa_def * -nir_inot(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_inot, src0); -} -static inline nir_ssa_def * -nir_insert_u16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_insert_u16, src0, src1); -} -static inline nir_ssa_def * -nir_insert_u8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_insert_u8, src0, src1); -} -static inline nir_ssa_def * -nir_ior(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ior, src0, src1); -} -static inline nir_ssa_def * -nir_irem(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_irem, src0, src1); -} -static inline nir_ssa_def * -nir_irhadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_irhadd, src0, src1); -} -static inline nir_ssa_def * -nir_ishl(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ishl, src0, src1); -} -static inline nir_ssa_def * -nir_ishr(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ishr, src0, src1); -} -static inline nir_ssa_def * -nir_isign(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_isign, src0); -} -static inline nir_ssa_def * -nir_isub(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_isub, src0, src1); -} -static inline nir_ssa_def * -nir_isub_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_isub_sat, src0, src1); -} -static inline nir_ssa_def * -nir_ixor(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ixor, src0, src1); -} -static inline nir_ssa_def * -nir_ldexp(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ldexp, src0, src1); -} -static inline nir_ssa_def * -nir_mov(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_mov, src0); -} -static inline nir_ssa_def * -nir_pack_32_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_32_2x16, src0); -} -static inline nir_ssa_def * -nir_pack_32_2x16_split(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_pack_32_2x16_split, src0, src1); -} -static inline nir_ssa_def * -nir_pack_32_4x8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_32_4x8, src0); -} -static inline nir_ssa_def * -nir_pack_32_4x8_split(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - return nir_build_alu4(build, nir_op_pack_32_4x8_split, src0, src1, src2, src3); -} -static inline nir_ssa_def * -nir_pack_64_2x32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_64_2x32, src0); -} -static inline nir_ssa_def * -nir_pack_64_2x32_split(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_pack_64_2x32_split, src0, src1); -} -static inline nir_ssa_def * -nir_pack_64_4x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_64_4x16, src0); -} -static inline nir_ssa_def * -nir_pack_double_2x32_dxil(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_double_2x32_dxil, src0); -} -static inline nir_ssa_def * -nir_pack_half_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_half_2x16, src0); -} -static inline nir_ssa_def * -nir_pack_half_2x16_rtz_split(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_pack_half_2x16_rtz_split, src0, src1); -} -static inline nir_ssa_def * -nir_pack_half_2x16_split(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_pack_half_2x16_split, src0, src1); -} -static inline nir_ssa_def * -nir_pack_sint_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_sint_2x16, src0); -} -static inline nir_ssa_def * -nir_pack_snorm_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_snorm_2x16, src0); -} -static inline nir_ssa_def * -nir_pack_snorm_4x8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_snorm_4x8, src0); -} -static inline nir_ssa_def * -nir_pack_uint_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_uint_2x16, src0); -} -static inline nir_ssa_def * -nir_pack_unorm_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_unorm_2x16, src0); -} -static inline nir_ssa_def * -nir_pack_unorm_4x8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_unorm_4x8, src0); -} -static inline nir_ssa_def * -nir_pack_uvec2_to_uint(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_uvec2_to_uint, src0); -} -static inline nir_ssa_def * -nir_pack_uvec4_to_uint(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_pack_uvec4_to_uint, src0); -} -static inline nir_ssa_def * -nir_sad_u8x4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_sad_u8x4, src0, src1, src2); -} -static inline nir_ssa_def * -nir_sdot_2x16_iadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_sdot_2x16_iadd, src0, src1, src2); -} -static inline nir_ssa_def * -nir_sdot_2x16_iadd_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_sdot_2x16_iadd_sat, src0, src1, src2); -} -static inline nir_ssa_def * -nir_sdot_4x8_iadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_sdot_4x8_iadd, src0, src1, src2); -} -static inline nir_ssa_def * -nir_sdot_4x8_iadd_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_sdot_4x8_iadd_sat, src0, src1, src2); -} -static inline nir_ssa_def * -nir_seq(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_seq, src0, src1); -} -static inline nir_ssa_def * -nir_sge(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_sge, src0, src1); -} -static inline nir_ssa_def * -nir_slt(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_slt, src0, src1); -} -static inline nir_ssa_def * -nir_sne(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_sne, src0, src1); -} -static inline nir_ssa_def * -nir_sudot_4x8_iadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_sudot_4x8_iadd, src0, src1, src2); -} -static inline nir_ssa_def * -nir_sudot_4x8_iadd_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_sudot_4x8_iadd_sat, src0, src1, src2); -} -static inline nir_ssa_def * -nir_u2f16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_u2f16, src0); -} -static inline nir_ssa_def * -nir_u2f32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_u2f32, src0); -} -static inline nir_ssa_def * -nir_u2f64(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_u2f64, src0); -} -static inline nir_ssa_def * -nir_u2fmp(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_u2fmp, src0); -} -static inline nir_ssa_def * -nir_u2u1(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 1) - return src0; - return nir_build_alu1(build, nir_op_u2u1, src0); -} -static inline nir_ssa_def * -nir_u2u16(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 16) - return src0; - return nir_build_alu1(build, nir_op_u2u16, src0); -} -static inline nir_ssa_def * -nir_u2u32(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 32) - return src0; - return nir_build_alu1(build, nir_op_u2u32, src0); -} -static inline nir_ssa_def * -nir_u2u64(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 64) - return src0; - return nir_build_alu1(build, nir_op_u2u64, src0); -} -static inline nir_ssa_def * -nir_u2u8(nir_builder *build, nir_ssa_def *src0) -{ - if (src0->bit_size == 8) - return src0; - return nir_build_alu1(build, nir_op_u2u8, src0); -} -static inline nir_ssa_def * -nir_uabs_isub(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uabs_isub, src0, src1); -} -static inline nir_ssa_def * -nir_uabs_usub(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uabs_usub, src0, src1); -} -static inline nir_ssa_def * -nir_uadd_carry(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uadd_carry, src0, src1); -} -static inline nir_ssa_def * -nir_uadd_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uadd_sat, src0, src1); -} -static inline nir_ssa_def * -nir_ubfe(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_ubfe, src0, src1, src2); -} -static inline nir_ssa_def * -nir_ubitfield_extract(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_ubitfield_extract, src0, src1, src2); -} -static inline nir_ssa_def * -nir_uclz(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_uclz, src0); -} -static inline nir_ssa_def * -nir_udiv(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_udiv, src0, src1); -} -static inline nir_ssa_def * -nir_udot_2x16_uadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_udot_2x16_uadd, src0, src1, src2); -} -static inline nir_ssa_def * -nir_udot_2x16_uadd_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_udot_2x16_uadd_sat, src0, src1, src2); -} -static inline nir_ssa_def * -nir_udot_4x8_uadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_udot_4x8_uadd, src0, src1, src2); -} -static inline nir_ssa_def * -nir_udot_4x8_uadd_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_udot_4x8_uadd_sat, src0, src1, src2); -} -static inline nir_ssa_def * -nir_ufind_msb(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ufind_msb, src0); -} -static inline nir_ssa_def * -nir_ufind_msb_rev(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_ufind_msb_rev, src0); -} -static inline nir_ssa_def * -nir_uge(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uge, src0, src1); -} -static inline nir_ssa_def * -nir_uge16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uge16, src0, src1); -} -static inline nir_ssa_def * -nir_uge32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uge32, src0, src1); -} -static inline nir_ssa_def * -nir_uge8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uge8, src0, src1); -} -static inline nir_ssa_def * -nir_uhadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uhadd, src0, src1); -} -static inline nir_ssa_def * -nir_ult(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ult, src0, src1); -} -static inline nir_ssa_def * -nir_ult16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ult16, src0, src1); -} -static inline nir_ssa_def * -nir_ult32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ult32, src0, src1); -} -static inline nir_ssa_def * -nir_ult8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ult8, src0, src1); -} -static inline nir_ssa_def * -nir_umad24(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_umad24, src0, src1, src2); -} -static inline nir_ssa_def * -nir_umad24_relaxed(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_umad24_relaxed, src0, src1, src2); -} -static inline nir_ssa_def * -nir_umax(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umax, src0, src1); -} -static inline nir_ssa_def * -nir_umax_4x8_vc4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umax_4x8_vc4, src0, src1); -} -static inline nir_ssa_def * -nir_umin(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umin, src0, src1); -} -static inline nir_ssa_def * -nir_umin_4x8_vc4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umin_4x8_vc4, src0, src1); -} -static inline nir_ssa_def * -nir_umod(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umod, src0, src1); -} -static inline nir_ssa_def * -nir_umul24(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umul24, src0, src1); -} -static inline nir_ssa_def * -nir_umul24_relaxed(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umul24_relaxed, src0, src1); -} -static inline nir_ssa_def * -nir_umul_2x32_64(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umul_2x32_64, src0, src1); -} -static inline nir_ssa_def * -nir_umul_32x16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umul_32x16, src0, src1); -} -static inline nir_ssa_def * -nir_umul_high(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umul_high, src0, src1); -} -static inline nir_ssa_def * -nir_umul_low(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umul_low, src0, src1); -} -static inline nir_ssa_def * -nir_umul_unorm_4x8_vc4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_umul_unorm_4x8_vc4, src0, src1); -} -static inline nir_ssa_def * -nir_unpack_32_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_32_2x16, src0); -} -static inline nir_ssa_def * -nir_unpack_32_2x16_split_x(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_32_2x16_split_x, src0); -} -static inline nir_ssa_def * -nir_unpack_32_2x16_split_y(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_32_2x16_split_y, src0); -} -static inline nir_ssa_def * -nir_unpack_32_4x8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_32_4x8, src0); -} -static inline nir_ssa_def * -nir_unpack_64_2x32(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_64_2x32, src0); -} -static inline nir_ssa_def * -nir_unpack_64_2x32_split_x(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_64_2x32_split_x, src0); -} -static inline nir_ssa_def * -nir_unpack_64_2x32_split_y(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_64_2x32_split_y, src0); -} -static inline nir_ssa_def * -nir_unpack_64_4x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_64_4x16, src0); -} -static inline nir_ssa_def * -nir_unpack_double_2x32_dxil(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_double_2x32_dxil, src0); -} -static inline nir_ssa_def * -nir_unpack_half_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_half_2x16, src0); -} -static inline nir_ssa_def * -nir_unpack_half_2x16_flush_to_zero(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_half_2x16_flush_to_zero, src0); -} -static inline nir_ssa_def * -nir_unpack_half_2x16_split_x(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_half_2x16_split_x, src0); -} -static inline nir_ssa_def * -nir_unpack_half_2x16_split_x_flush_to_zero(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_half_2x16_split_x_flush_to_zero, src0); -} -static inline nir_ssa_def * -nir_unpack_half_2x16_split_y(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_half_2x16_split_y, src0); -} -static inline nir_ssa_def * -nir_unpack_half_2x16_split_y_flush_to_zero(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_half_2x16_split_y_flush_to_zero, src0); -} -static inline nir_ssa_def * -nir_unpack_snorm_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_snorm_2x16, src0); -} -static inline nir_ssa_def * -nir_unpack_snorm_4x8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_snorm_4x8, src0); -} -static inline nir_ssa_def * -nir_unpack_unorm_2x16(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_unorm_2x16, src0); -} -static inline nir_ssa_def * -nir_unpack_unorm_4x8(nir_builder *build, nir_ssa_def *src0) -{ - return nir_build_alu1(build, nir_op_unpack_unorm_4x8, src0); -} -static inline nir_ssa_def * -nir_urhadd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_urhadd, src0, src1); -} -static inline nir_ssa_def * -nir_urol(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_urol, src0, src1); -} -static inline nir_ssa_def * -nir_uror(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_uror, src0, src1); -} -static inline nir_ssa_def * -nir_usadd_4x8_vc4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_usadd_4x8_vc4, src0, src1); -} -static inline nir_ssa_def * -nir_ushr(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ushr, src0, src1); -} -static inline nir_ssa_def * -nir_ussub_4x8_vc4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_ussub_4x8_vc4, src0, src1); -} -static inline nir_ssa_def * -nir_usub_borrow(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_usub_borrow, src0, src1); -} -static inline nir_ssa_def * -nir_usub_sat(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_usub_sat, src0, src1); -} -static inline nir_ssa_def * -nir_vec16(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, nir_ssa_def *src5, nir_ssa_def *src6, nir_ssa_def *src7, nir_ssa_def *src8, nir_ssa_def *src9, nir_ssa_def *src10, nir_ssa_def *src11, nir_ssa_def *src12, nir_ssa_def *src13, nir_ssa_def *src14, nir_ssa_def *src15) -{ - nir_ssa_def *srcs[16] = {src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15}; - return nir_build_alu_src_arr(build, nir_op_vec16, srcs); -} -static inline nir_ssa_def * -nir_vec2(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - return nir_build_alu2(build, nir_op_vec2, src0, src1); -} -static inline nir_ssa_def * -nir_vec3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_build_alu3(build, nir_op_vec3, src0, src1, src2); -} -static inline nir_ssa_def * -nir_vec4(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - return nir_build_alu4(build, nir_op_vec4, src0, src1, src2, src3); -} -static inline nir_ssa_def * -nir_vec5(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4) -{ - nir_ssa_def *srcs[5] = {src0, src1, src2, src3, src4}; - return nir_build_alu_src_arr(build, nir_op_vec5, srcs); -} -static inline nir_ssa_def * -nir_vec8(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, nir_ssa_def *src5, nir_ssa_def *src6, nir_ssa_def *src7) -{ - nir_ssa_def *srcs[8] = {src0, src1, src2, src3, src4, src5, src6, src7}; - return nir_build_alu_src_arr(build, nir_op_vec8, srcs); -} - -struct _nir_accept_ray_intersection_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_addr_mode_is_indices { - int _; /* exists to avoid empty initializers */ - nir_variable_mode memory_modes; -}; -struct _nir_alloc_vertices_and_primitives_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_add_gen_prim_count_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_atomic_add_gs_emit_prim_count_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_add_gs_invocation_count_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_add_xfb_prim_count_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_atomic_counter_add_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_add_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_and_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_and_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_comp_swap_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_exchange_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_exchange_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_inc_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_inc_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_max_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_max_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_min_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_min_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_or_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_or_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_post_dec_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_post_dec_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_pre_dec_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_pre_dec_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_read_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_read_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_atomic_counter_xor_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range_base; -}; -struct _nir_atomic_counter_xor_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ballot_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ballot_bit_count_exclusive_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ballot_bit_count_inclusive_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ballot_bit_count_reduce_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ballot_bitfield_extract_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ballot_find_lsb_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ballot_find_msb_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_begin_invocation_interlock_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_bindless_image_atomic_add_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_and_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_dec_wrap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_inc_wrap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_or_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_descriptor_amd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_format_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_fragment_mask_load_amd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_load_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - nir_alu_type dest_type; -}; -struct _nir_bindless_image_load_raw_intel_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_order_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_samples_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_samples_identical_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_size_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_image_sparse_load_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - nir_alu_type dest_type; -}; -struct _nir_bindless_image_store_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - nir_alu_type src_type; -}; -struct _nir_bindless_image_store_raw_intel_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_bindless_resource_ir3_indices { - int _; /* exists to avoid empty initializers */ - unsigned desc_set; -}; -struct _nir_block_image_store_agx_indices { - int _; /* exists to avoid empty initializers */ - enum pipe_format format; - enum glsl_sampler_dim image_dim; -}; -struct _nir_btd_retire_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_btd_spawn_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_btd_stack_push_intel_indices { - int _; /* exists to avoid empty initializers */ - unsigned stack_size; -}; -struct _nir_buffer_atomic_add_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_bvh64_intersect_ray_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_cond_end_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_control_barrier_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_convert_alu_types_indices { - int _; /* exists to avoid empty initializers */ - nir_alu_type src_type; - nir_alu_type dest_type; - nir_rounding_mode rounding_mode; - unsigned saturate; -}; -struct _nir_copy_deref_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier dst_access; - enum gl_access_qualifier src_access; -}; -struct _nir_copy_ubo_to_uniform_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range; -}; -struct _nir_demote_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_demote_if_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_deref_atomic_add_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_and_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_fcomp_swap_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_or_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_buffer_array_length_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_deref_mode_is_indices { - int _; /* exists to avoid empty initializers */ - nir_variable_mode memory_modes; -}; -struct _nir_discard_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_discard_if_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_elect_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_emit_vertex_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_emit_vertex_with_counter_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_end_invocation_interlock_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_end_patch_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_end_primitive_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_end_primitive_with_counter_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_exclusive_scan_indices { - int _; /* exists to avoid empty initializers */ - unsigned reduction_op; -}; -struct _nir_execute_callable_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_execute_closest_hit_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_execute_miss_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_export_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - unsigned flags; -}; -struct _nir_first_invocation_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_gds_atomic_add_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_get_ssbo_size_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_get_ubo_size_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_add_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_add_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_add_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_add_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_and_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_and_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_and_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_and_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_comp_swap_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_comp_swap_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_comp_swap_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_exchange_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_exchange_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_exchange_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fadd_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fadd_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_fcomp_swap_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fcomp_swap_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fcomp_swap_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fmax_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fmax_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fmin_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_fmin_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_imax_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_imax_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_imax_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_imin_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_imin_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_imin_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_or_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_or_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_or_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_or_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_umax_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_umax_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_umax_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_umin_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_umin_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_umin_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_xor_2x32_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_global_atomic_xor_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_global_atomic_xor_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_group_memory_barrier_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ignore_ray_intersection_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_image_atomic_add_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_and_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_dec_wrap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_inc_wrap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_or_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_deref_atomic_add_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_and_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_dec_wrap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_inc_wrap_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_or_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_descriptor_amd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_format_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_fragment_mask_load_amd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_load_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - nir_alu_type dest_type; -}; -struct _nir_image_deref_load_param_intel_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_image_deref_load_raw_intel_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_order_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_samples_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_samples_identical_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_size_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_deref_sparse_load_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - nir_alu_type dest_type; -}; -struct _nir_image_deref_store_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - nir_alu_type src_type; -}; -struct _nir_image_deref_store_raw_intel_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; -}; -struct _nir_image_descriptor_amd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_format_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_fragment_mask_load_amd_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_load_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; - nir_alu_type dest_type; -}; -struct _nir_image_load_raw_intel_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_order_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_samples_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_samples_identical_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_size_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_image_sparse_load_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; - nir_alu_type dest_type; -}; -struct _nir_image_store_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; - nir_alu_type src_type; -}; -struct _nir_image_store_raw_intel_indices { - int _; /* exists to avoid empty initializers */ - enum glsl_sampler_dim image_dim; - bool image_array; - enum pipe_format format; - enum gl_access_qualifier access; - unsigned range_base; -}; -struct _nir_inclusive_scan_indices { - int _; /* exists to avoid empty initializers */ - unsigned reduction_op; -}; -struct _nir_interp_deref_at_centroid_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_interp_deref_at_offset_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_interp_deref_at_sample_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_interp_deref_at_vertex_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_is_helper_invocation_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_is_sparse_texels_resident_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_is_subgroup_invocation_lt_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_lane_permute_16_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_last_invocation_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_launch_mesh_workgroups_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range; -}; -struct _nir_launch_mesh_workgroups_with_payload_deref_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_aa_line_width_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_accel_struct_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_agx_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - int base; - enum pipe_format format; - bool sign_extend; -}; -struct _nir_load_alpha_reference_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_back_face_agx_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_barycentric_at_offset_indices { - int _; /* exists to avoid empty initializers */ - unsigned interp_mode; -}; -struct _nir_load_barycentric_at_sample_indices { - int _; /* exists to avoid empty initializers */ - unsigned interp_mode; -}; -struct _nir_load_barycentric_centroid_indices { - int _; /* exists to avoid empty initializers */ - unsigned interp_mode; -}; -struct _nir_load_barycentric_model_indices { - int _; /* exists to avoid empty initializers */ - unsigned interp_mode; -}; -struct _nir_load_barycentric_pixel_indices { - int _; /* exists to avoid empty initializers */ - unsigned interp_mode; -}; -struct _nir_load_barycentric_sample_indices { - int _; /* exists to avoid empty initializers */ - unsigned interp_mode; -}; -struct _nir_load_base_global_invocation_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_base_instance_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_base_vertex_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_base_workgroup_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_blend_const_color_a_float_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_blend_const_color_aaaa8888_unorm_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_blend_const_color_b_float_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_blend_const_color_g_float_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_blend_const_color_r_float_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_blend_const_color_rgba_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_blend_const_color_rgba8888_unorm_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_btd_global_arg_addr_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_btd_local_arg_addr_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_btd_resume_sbt_addr_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_btd_shader_type_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_btd_stack_id_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_buffer_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - nir_variable_mode memory_modes; - enum gl_access_qualifier access; -}; -struct _nir_load_callable_sbt_addr_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_callable_sbt_stride_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_clamp_vertex_color_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_clip_half_line_width_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_color0_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_color1_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_constant_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_constant_agx_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - int base; - enum pipe_format format; - bool sign_extend; -}; -struct _nir_load_constant_base_ptr_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_converted_output_pan_indices { - int _; /* exists to avoid empty initializers */ - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_coverage_mask_pan_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_any_enabled_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_back_face_enabled_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_ccw_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_front_face_enabled_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_mask_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_mask_and_flags_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_small_prim_precision_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_cull_small_primitives_enabled_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_deref_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_load_deref_block_intel_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_load_desc_set_address_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_draw_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_esgs_vertex_stride_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_fb_layers_v3d_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_first_vertex_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_force_vrs_rates_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_frag_coord_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_frag_invocation_count_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_frag_shading_rate_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_frag_size_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_front_face_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_fs_input_interp_deltas_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_fully_covered_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_global_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_global_2x32_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_global_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_global_base_ptr_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_global_block_intel_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_global_const_block_intel_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_global_constant_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_global_constant_bounded_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_global_constant_offset_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_global_invocation_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_global_invocation_id_zero_base_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_global_invocation_index_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_global_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_gs_header_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_gs_vertex_offset_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_helper_invocation_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_hit_attrib_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_hs_out_patch_data_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_hs_patch_stride_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_initial_edgeflags_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_input_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_input_vertex_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_instance_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_interpolated_input_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_intersection_opaque_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_invocation_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_is_indexed_draw_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_kernel_input_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_layer_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_lds_ngg_gs_out_vertex_base_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_lds_ngg_scratch_base_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_leaf_opaque_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_leaf_procedural_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_line_coord_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_line_width_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_local_invocation_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_local_invocation_index_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_local_pixel_agx_indices { - int _; /* exists to avoid empty initializers */ - int base; - enum pipe_format format; -}; -struct _nir_load_local_shared_r600_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_lshs_vertex_stride_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_merged_wave_info_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_mesh_inline_data_intel_indices { - int _; /* exists to avoid empty initializers */ - unsigned align_offset; -}; -struct _nir_load_mesh_view_count_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_mesh_view_indices_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range; -}; -struct _nir_load_multisampled_pan_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_num_subgroups_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_num_vertices_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_num_vertices_per_primitive_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_num_workgroups_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ordered_id_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_output_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_packed_passthrough_primitive_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_param_indices { - int _; /* exists to avoid empty initializers */ - unsigned param_idx; -}; -struct _nir_load_patch_vertices_in_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_per_primitive_output_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_per_vertex_input_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_per_vertex_output_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type dest_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_load_persp_center_rhw_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_pipeline_stat_query_enabled_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_point_coord_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_point_coord_maybe_flipped_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_preamble_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_prim_gen_query_enabled_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_prim_xfb_query_enabled_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_primitive_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_primitive_location_ir3_indices { - int _; /* exists to avoid empty initializers */ - unsigned driver_location; -}; -struct _nir_load_printf_buffer_address_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_provoking_vtx_in_prim_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ptr_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_push_constant_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_rasterization_samples_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_raw_output_pan_indices { - int _; /* exists to avoid empty initializers */ - struct nir_io_semantics io_semantics; -}; -struct _nir_load_ray_base_mem_addr_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_flags_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_geometry_index_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_hit_kind_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_hit_sbt_addr_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_hit_sbt_stride_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_hw_stack_size_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_instance_custom_index_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_launch_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_launch_size_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_launch_size_addr_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_miss_sbt_addr_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_miss_sbt_stride_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_num_dss_rt_stacks_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_object_direction_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_object_origin_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_object_to_world_indices { - int _; /* exists to avoid empty initializers */ - unsigned column; -}; -struct _nir_load_ray_query_global_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_sw_stack_size_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_t_max_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_t_min_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_world_direction_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_world_origin_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ray_world_to_object_indices { - int _; /* exists to avoid empty initializers */ - unsigned column; -}; -struct _nir_load_rel_patch_id_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_reloc_const_intel_indices { - int _; /* exists to avoid empty initializers */ - unsigned param_idx; -}; -struct _nir_load_ring_attr_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_attr_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_es2gs_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_esgs_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_gs2vs_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_gsvs_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_load_ring_mesh_scratch_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_mesh_scratch_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_task_draw_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_task_payload_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_tess_factors_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_tess_factors_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_tess_offchip_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ring_tess_offchip_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_rt_arg_scratch_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_rt_conversion_pan_indices { - int _; /* exists to avoid empty initializers */ - int base; - nir_alu_type src_type; -}; -struct _nir_load_rt_dynamic_callable_stack_base_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_id_no_per_sample_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_mask_in_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_pos_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_pos_from_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_pos_or_center_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_positions_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sample_positions_pan_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sampler_lod_parameters_pan_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sbt_base_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sbt_offset_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_sbt_stride_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_scalar_arg_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned arg_upper_bound_u32_amd; -}; -struct _nir_load_scratch_indices { - int _; /* exists to avoid empty initializers */ - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_scratch_base_ptr_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_scratch_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_shader_record_ptr_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_shared_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_shared2_amd_indices { - int _; /* exists to avoid empty initializers */ - uint8_t offset0; - uint8_t offset1; - bool st64; -}; -struct _nir_load_shared_base_ptr_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_shared_block_intel_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_shared_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_shared_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_shared_uniform_block_intel_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_simd_width_intel_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_smem_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_smem_buffer_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_ssbo_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_ssbo_address_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ssbo_block_intel_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_ssbo_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_ssbo_uniform_block_intel_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_stack_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; - unsigned call_idx; - unsigned value_id; -}; -struct _nir_load_streamout_buffer_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_streamout_config_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_streamout_offset_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_streamout_write_index_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_eq_mask_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_ge_mask_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_gt_mask_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_id_shift_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_invocation_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_le_mask_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_lt_mask_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_subgroup_size_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_task_payload_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_task_ring_entry_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tcs_header_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tcs_in_param_base_r600_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tcs_num_patches_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tcs_out_param_base_r600_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tcs_rel_patch_id_r600_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tcs_tess_factor_base_r600_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_coord_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_coord_r600_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_factor_base_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_level_inner_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_level_inner_default_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_level_outer_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_level_outer_default_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_param_base_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tess_rel_patch_id_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_texture_base_agx_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_texture_rect_scaling_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_tlb_color_v3d_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; -}; -struct _nir_load_topology_id_intel_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_load_typed_buffer_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - nir_variable_mode memory_modes; - enum gl_access_qualifier access; - enum pipe_format format; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_load_ubo_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; - unsigned range_base; - unsigned range; -}; -struct _nir_load_ubo_base_agx_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ubo_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_ubo_vec4_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - int base; - unsigned component; -}; -struct _nir_load_uniform_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned range; - nir_alu_type dest_type; -}; -struct _nir_load_user_clip_plane_indices { - int _; /* exists to avoid empty initializers */ - unsigned ucp_id; -}; -struct _nir_load_user_data_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_vbo_base_agx_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_vector_arg_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned arg_upper_bound_u32_amd; -}; -struct _nir_load_vertex_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_vertex_id_zero_base_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_view_index_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_offset_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_scale_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_x_offset_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_x_scale_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_xy_scale_and_offset_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_y_offset_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_y_scale_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_z_offset_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_viewport_z_scale_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_vs_primitive_stride_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_vs_vertex_stride_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_vulkan_descriptor_indices { - int _; /* exists to avoid empty initializers */ - unsigned desc_type; -}; -struct _nir_load_work_dim_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_workgroup_id_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_workgroup_id_zero_base_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_workgroup_index_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_workgroup_num_input_primitives_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_workgroup_num_input_vertices_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_workgroup_size_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_load_xfb_address_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_masked_swizzle_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned swizzle_mask; -}; -struct _nir_mbcnt_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_memcpy_deref_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier dst_access; - enum gl_access_qualifier src_access; -}; -struct _nir_memory_barrier_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_memory_barrier_atomic_counter_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_memory_barrier_buffer_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_memory_barrier_image_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_memory_barrier_shared_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_memory_barrier_tcs_patch_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_nop_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_optimization_barrier_vgpr_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ordered_xfb_counter_add_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; -}; -struct _nir_overwrite_tes_arguments_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_overwrite_vs_arguments_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_preamble_end_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_preamble_start_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_printf_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_quad_broadcast_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_quad_swap_diagonal_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_quad_swap_horizontal_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_quad_swap_vertical_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_quad_swizzle_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned swizzle_mask; -}; -struct _nir_read_first_invocation_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_read_invocation_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_read_invocation_cond_ir3_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_reduce_indices { - int _; /* exists to avoid empty initializers */ - unsigned reduction_op; - unsigned cluster_size; -}; -struct _nir_report_ray_intersection_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_rotate_indices { - int _; /* exists to avoid empty initializers */ - nir_scope execution_scope; - unsigned cluster_size; -}; -struct _nir_rq_confirm_intersection_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_rq_generate_intersection_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_rq_initialize_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_rq_load_indices { - int _; /* exists to avoid empty initializers */ - nir_ray_query_value ray_query_value; - unsigned column; -}; -struct _nir_rq_proceed_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_rq_terminate_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_rt_execute_callable_indices { - int _; /* exists to avoid empty initializers */ - unsigned call_idx; - unsigned stack_size; -}; -struct _nir_rt_resume_indices { - int _; /* exists to avoid empty initializers */ - unsigned call_idx; - unsigned stack_size; -}; -struct _nir_rt_return_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_rt_trace_ray_indices { - int _; /* exists to avoid empty initializers */ - unsigned call_idx; - unsigned stack_size; -}; -struct _nir_scoped_barrier_indices { - int _; /* exists to avoid empty initializers */ - nir_scope execution_scope; - nir_scope memory_scope; - nir_memory_semantics memory_semantics; - nir_variable_mode memory_modes; -}; -struct _nir_set_vertex_and_primitive_count_indices { - int _; /* exists to avoid empty initializers */ - unsigned stream_id; -}; -struct _nir_shader_clock_indices { - int _; /* exists to avoid empty initializers */ - nir_scope memory_scope; -}; -struct _nir_shared_atomic_add_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_add_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_and_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_and_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_comp_swap_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_exchange_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_fcomp_swap_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_imax_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_imin_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_or_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_or_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_umax_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_umin_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shared_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_shared_atomic_xor_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shuffle_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shuffle_down_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shuffle_up_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_shuffle_xor_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_sparse_residency_code_and_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_ssbo_atomic_add_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_add_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_and_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_and_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_comp_swap_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_exchange_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_fcomp_swap_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_imax_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_imin_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_or_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_or_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_umax_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_umin_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_ssbo_atomic_xor_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; -}; -struct _nir_store_agx_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - int base; - enum pipe_format format; - bool sign_extend; -}; -struct _nir_store_buffer_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - nir_variable_mode memory_modes; - enum gl_access_qualifier access; -}; -struct _nir_store_combined_output_pan_indices { - int _; /* exists to avoid empty initializers */ - struct nir_io_semantics io_semantics; - unsigned component; - nir_alu_type src_type; - nir_alu_type dest_type; -}; -struct _nir_store_deref_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; -}; -struct _nir_store_deref_block_intel_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; -}; -struct _nir_store_global_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_global_2x32_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_global_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; - unsigned write_mask; -}; -struct _nir_store_global_block_intel_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_global_ir3_indices { - int _; /* exists to avoid empty initializers */ - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_hit_attrib_amd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_store_local_pixel_agx_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - enum pipe_format format; -}; -struct _nir_store_local_shared_r600_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; -}; -struct _nir_store_output_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - unsigned component; - nir_alu_type src_type; - struct nir_io_semantics io_semantics; - struct nir_io_xfb io_xfb; - struct nir_io_xfb io_xfb2; -}; -struct _nir_store_per_primitive_output_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - unsigned component; - nir_alu_type src_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_store_per_vertex_output_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - unsigned component; - nir_alu_type src_type; - struct nir_io_semantics io_semantics; -}; -struct _nir_store_preamble_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_store_raw_output_pan_indices { - int _; /* exists to avoid empty initializers */ - struct nir_io_semantics io_semantics; - int base; -}; -struct _nir_store_scratch_indices { - int _; /* exists to avoid empty initializers */ - unsigned align_mul; - unsigned align_offset; - unsigned write_mask; -}; -struct _nir_store_scratch_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_store_shared_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_shared2_amd_indices { - int _; /* exists to avoid empty initializers */ - uint8_t offset0; - uint8_t offset1; - bool st64; -}; -struct _nir_store_shared_block_intel_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_shared_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_store_shared_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_shared_masked_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_store_ssbo_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_ssbo_block_intel_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_ssbo_ir3_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; - enum gl_access_qualifier access; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_ssbo_masked_dxil_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_store_stack_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned align_mul; - unsigned align_offset; - unsigned write_mask; - unsigned call_idx; - unsigned value_id; -}; -struct _nir_store_task_payload_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned write_mask; - unsigned align_mul; - unsigned align_offset; -}; -struct _nir_store_tf_r600_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_store_tlb_sample_color_v3d_indices { - int _; /* exists to avoid empty initializers */ - int base; - unsigned component; - nir_alu_type src_type; -}; -struct _nir_store_uniform_ir3_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_store_zs_agx_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_add_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_and_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_comp_swap_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_exchange_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_fadd_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_fcomp_swap_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_fmax_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_fmin_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_imax_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_imin_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_or_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_umax_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_umin_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_task_payload_atomic_xor_indices { - int _; /* exists to avoid empty initializers */ - int base; -}; -struct _nir_terminate_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_terminate_if_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_terminate_ray_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_trace_ray_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_trace_ray_intel_indices { - int _; /* exists to avoid empty initializers */ - bool synchronous; -}; -struct _nir_vote_all_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_vote_any_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_vote_feq_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_vote_ieq_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_vulkan_resource_index_indices { - int _; /* exists to avoid empty initializers */ - unsigned desc_set; - unsigned binding; - unsigned desc_type; -}; -struct _nir_vulkan_resource_reindex_indices { - int _; /* exists to avoid empty initializers */ - unsigned desc_type; -}; -struct _nir_write_invocation_amd_indices { - int _; /* exists to avoid empty initializers */ -}; -struct _nir_xfb_counter_sub_amd_indices { - int _; /* exists to avoid empty initializers */ - unsigned write_mask; -}; - - - -static inline nir_intrinsic_instr * -_nir_build_accept_ray_intersection(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_accept_ray_intersection); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_addr_mode_is(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_addr_mode_is_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_addr_mode_is); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_memory_modes(intrin, indices.memory_modes); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_alloc_vertices_and_primitives_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_alloc_vertices_and_primitives_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_atomic_add_gen_prim_count_amd(nir_builder *build, nir_ssa_def *src0, struct _nir_atomic_add_gen_prim_count_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_add_gen_prim_count_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_atomic_add_gs_emit_prim_count_amd(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_add_gs_emit_prim_count_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_atomic_add_gs_invocation_count_amd(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_add_gs_invocation_count_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_atomic_add_xfb_prim_count_amd(nir_builder *build, nir_ssa_def *src0, struct _nir_atomic_add_xfb_prim_count_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_add_xfb_prim_count_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_atomic_counter_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_add_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_add_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_atomic_counter_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_and_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_and_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_atomic_counter_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_comp_swap_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_comp_swap_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_atomic_counter_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_exchange_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_exchange_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_inc(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_atomic_counter_inc_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_inc); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_inc_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_inc_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_max(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_atomic_counter_max_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_max); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_max_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_max_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_min(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_atomic_counter_min_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_min); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_min_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_min_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_atomic_counter_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_or_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_or_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_post_dec(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_atomic_counter_post_dec_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_post_dec); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_post_dec_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_post_dec_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_pre_dec(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_atomic_counter_pre_dec_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_pre_dec); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_pre_dec_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_pre_dec_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_read(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_atomic_counter_read_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_read); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_read_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_read_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_atomic_counter_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_atomic_counter_xor_deref(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_atomic_counter_xor_deref); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ballot(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ballot); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ballot_bit_count_exclusive(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ballot_bit_count_exclusive); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ballot_bit_count_inclusive(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ballot_bit_count_inclusive); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ballot_bit_count_reduce(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ballot_bit_count_reduce); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ballot_bitfield_extract(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ballot_bitfield_extract); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ballot_find_lsb(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ballot_find_lsb); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ballot_find_msb(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ballot_find_msb); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_begin_invocation_interlock(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_begin_invocation_interlock); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_bindless_image_atomic_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_dec_wrap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_dec_wrap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_dec_wrap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_fadd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_fmax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_fmin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_imax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_imin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_inc_wrap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_inc_wrap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_inc_wrap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_umax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_umin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_atomic_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_descriptor_amd(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_bindless_image_descriptor_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_descriptor_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_format(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_bindless_image_format_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_format); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_fragment_mask_load_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_bindless_image_fragment_mask_load_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_fragment_mask_load_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_load(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_load_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_load); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_load_raw_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_bindless_image_load_raw_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_load_raw_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_order(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_bindless_image_order_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_order); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_samples(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_bindless_image_samples_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_samples); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_samples_identical(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_bindless_image_samples_identical_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_samples_identical); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_size(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_bindless_image_size_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_size); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bindless_image_sparse_load(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_bindless_image_sparse_load_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_sparse_load); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_bindless_image_store(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_bindless_image_store_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_store); - - intrin->num_components = src3->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_src_type(intrin, indices.src_type); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_bindless_image_store_raw_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_bindless_image_store_raw_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_image_store_raw_intel); - - intrin->num_components = src2->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_bindless_resource_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_bindless_resource_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bindless_resource_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_desc_set(intrin, indices.desc_set); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_block_image_store_agx(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_block_image_store_agx_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_block_image_store_agx); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_btd_retire_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_btd_retire_intel); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_btd_spawn_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_btd_spawn_intel); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_btd_stack_push_intel(nir_builder *build, struct _nir_btd_stack_push_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_btd_stack_push_intel); - - nir_intrinsic_set_stack_size(intrin, indices.stack_size); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_buffer_atomic_add_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_buffer_atomic_add_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_buffer_atomic_add_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_bvh64_intersect_ray_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, nir_ssa_def *src5) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_bvh64_intersect_ray_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - intrin->src[5] = nir_src_for_ssa(src5); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_cond_end_ir3(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_cond_end_ir3); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_control_barrier(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_control_barrier); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_convert_alu_types(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_convert_alu_types_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_convert_alu_types); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_src_type(intrin, indices.src_type); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_rounding_mode(intrin, indices.rounding_mode); - nir_intrinsic_set_saturate(intrin, indices.saturate); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_copy_deref(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_copy_deref_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_copy_deref); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_dst_access(intrin, indices.dst_access); - nir_intrinsic_set_src_access(intrin, indices.src_access); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_copy_ubo_to_uniform_ir3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_copy_ubo_to_uniform_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_copy_ubo_to_uniform_ir3); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range(intrin, indices.range); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_demote(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_demote); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_demote_if(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_demote_if); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_deref_atomic_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_fadd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_fcomp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_deref_atomic_fcomp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_fcomp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_fmax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_fmin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_imax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_imin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_umax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_umin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_deref_atomic_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_buffer_array_length(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_deref_buffer_array_length_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_buffer_array_length); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_deref_mode_is(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_deref_mode_is_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_deref_mode_is); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_memory_modes(intrin, indices.memory_modes); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_discard(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_discard); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_discard_if(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_discard_if); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_elect(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_elect); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_emit_vertex(nir_builder *build, struct _nir_emit_vertex_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_emit_vertex); - - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_emit_vertex_with_counter(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_emit_vertex_with_counter_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_emit_vertex_with_counter); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_end_invocation_interlock(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_end_invocation_interlock); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_end_patch_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_end_patch_ir3); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_end_primitive(nir_builder *build, struct _nir_end_primitive_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_end_primitive); - - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_end_primitive_with_counter(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_end_primitive_with_counter_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_end_primitive_with_counter); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_exclusive_scan(nir_builder *build, nir_ssa_def *src0, struct _nir_exclusive_scan_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_exclusive_scan); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_reduction_op(intrin, indices.reduction_op); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_execute_callable(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_execute_callable); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_execute_closest_hit_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, nir_ssa_def *src5) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_execute_closest_hit_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - intrin->src[5] = nir_src_for_ssa(src5); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_execute_miss_amd(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_execute_miss_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_export_amd(nir_builder *build, nir_ssa_def *src0, struct _nir_export_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_export_amd); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_flags(intrin, indices.flags); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_first_invocation(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_first_invocation); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_gds_atomic_add_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_gds_atomic_add_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_gds_atomic_add_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_get_ssbo_size(nir_builder *build, nir_ssa_def *src0, struct _nir_get_ssbo_size_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_get_ssbo_size); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_get_ubo_size(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_get_ubo_size); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_add_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_add_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_add_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_add_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_add_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_add_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_add_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_add_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_and_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_and_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_and_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_and_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_and_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_and_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_and_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_and_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_comp_swap_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_comp_swap_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_comp_swap_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_global_atomic_comp_swap_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_comp_swap_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_comp_swap_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_comp_swap_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_comp_swap_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_exchange_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_exchange_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_exchange_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_exchange_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_exchange_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_exchange_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_exchange_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_exchange_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fadd_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fadd_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fadd_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_fadd_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fadd_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fcomp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fcomp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fcomp_swap_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fcomp_swap_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fcomp_swap_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_global_atomic_fcomp_swap_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fcomp_swap_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fmax_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fmax_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fmax_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_fmax_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fmax_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fmin_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fmin_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_fmin_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_fmin_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_fmin_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imax_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imax_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imax_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_imax_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imax_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imax_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_imax_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imax_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imin_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imin_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imin_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_imin_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imin_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_imin_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_imin_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_imin_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_or_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_or_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_or_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_or_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_or_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_or_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_or_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_or_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umax_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umax_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umax_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_umax_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umax_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umax_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_umax_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umax_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umin_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umin_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umin_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_umin_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umin_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_umin_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_umin_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_umin_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_xor_2x32(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_xor_2x32); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_xor_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_global_atomic_xor_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_xor_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_global_atomic_xor_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_global_atomic_xor_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_global_atomic_xor_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_group_memory_barrier(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_group_memory_barrier); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_ignore_ray_intersection(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ignore_ray_intersection); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_image_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_image_atomic_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_dec_wrap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_dec_wrap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_dec_wrap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_fadd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_fmax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_fmin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_imax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_imin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_inc_wrap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_inc_wrap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_inc_wrap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_umax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_umin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_atomic_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_image_deref_atomic_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_dec_wrap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_dec_wrap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_dec_wrap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_fadd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_fmax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_fmin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_imax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_imin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_inc_wrap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_inc_wrap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_inc_wrap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_umax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_umin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_atomic_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_descriptor_amd(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_deref_descriptor_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_descriptor_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_format(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_deref_format_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_format); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_fragment_mask_load_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_deref_fragment_mask_load_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_fragment_mask_load_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_load(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_load_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_load); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_load_param_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_deref_load_param_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_load_param_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_load_raw_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_deref_load_raw_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_load_raw_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_order(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_deref_order_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_order); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_samples(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_deref_samples_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_samples); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_samples_identical(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_deref_samples_identical_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_samples_identical); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_size(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_deref_size_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_size); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_deref_sparse_load(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_deref_sparse_load_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_sparse_load); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_image_deref_store(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_image_deref_store_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_store); - - intrin->num_components = src3->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_src_type(intrin, indices.src_type); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_image_deref_store_raw_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_image_deref_store_raw_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_deref_store_raw_intel); - - intrin->num_components = src2->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_image_descriptor_amd(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_descriptor_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_descriptor_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_format(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_format_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_format); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_fragment_mask_load_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_fragment_mask_load_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_fragment_mask_load_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_load(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_load_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_load); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_load_raw_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_load_raw_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_load_raw_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_order(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_order_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_order); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_samples(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_image_samples_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_samples); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_samples_identical(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_samples_identical_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_samples_identical); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_size(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_image_size_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_size); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_image_sparse_load(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_image_sparse_load_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_sparse_load); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_image_store(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_image_store_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_store); - - intrin->num_components = src3->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - nir_intrinsic_set_src_type(intrin, indices.src_type); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_image_store_raw_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_image_store_raw_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_image_store_raw_intel); - - intrin->num_components = src2->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_image_dim(intrin, indices.image_dim); - nir_intrinsic_set_image_array(intrin, indices.image_array); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_range_base(intrin, indices.range_base); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_inclusive_scan(nir_builder *build, nir_ssa_def *src0, struct _nir_inclusive_scan_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_inclusive_scan); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_reduction_op(intrin, indices.reduction_op); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_interp_deref_at_centroid(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_interp_deref_at_centroid); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_interp_deref_at_offset(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_interp_deref_at_offset); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_interp_deref_at_sample(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_interp_deref_at_sample); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_interp_deref_at_vertex(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_interp_deref_at_vertex); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_is_helper_invocation(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_is_helper_invocation); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_is_sparse_texels_resident(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_is_sparse_texels_resident); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_is_subgroup_invocation_lt_amd(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_is_subgroup_invocation_lt_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_lane_permute_16_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_lane_permute_16_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_last_invocation(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_last_invocation); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_launch_mesh_workgroups(nir_builder *build, nir_ssa_def *src0, struct _nir_launch_mesh_workgroups_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_launch_mesh_workgroups); - - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range(intrin, indices.range); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_launch_mesh_workgroups_with_payload_deref(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_launch_mesh_workgroups_with_payload_deref); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_load_aa_line_width(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_aa_line_width); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_accel_struct_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_accel_struct_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_agx(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_agx_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_agx); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_sign_extend(intrin, indices.sign_extend); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_alpha_reference_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_alpha_reference_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_back_face_agx(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_back_face_agx); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_barycentric_at_offset(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_barycentric_at_offset_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_barycentric_at_offset); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_interp_mode(intrin, indices.interp_mode); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_barycentric_at_sample(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_barycentric_at_sample_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_barycentric_at_sample); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_interp_mode(intrin, indices.interp_mode); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_barycentric_centroid(nir_builder *build, unsigned bit_size, struct _nir_load_barycentric_centroid_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_barycentric_centroid); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - nir_intrinsic_set_interp_mode(intrin, indices.interp_mode); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_barycentric_model(nir_builder *build, unsigned bit_size, struct _nir_load_barycentric_model_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_barycentric_model); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - nir_intrinsic_set_interp_mode(intrin, indices.interp_mode); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_barycentric_pixel(nir_builder *build, unsigned bit_size, struct _nir_load_barycentric_pixel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_barycentric_pixel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - nir_intrinsic_set_interp_mode(intrin, indices.interp_mode); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_barycentric_sample(nir_builder *build, unsigned bit_size, struct _nir_load_barycentric_sample_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_barycentric_sample); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - nir_intrinsic_set_interp_mode(intrin, indices.interp_mode); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_base_global_invocation_id(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_base_global_invocation_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_base_instance(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_base_instance); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_base_vertex(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_base_vertex); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_base_workgroup_id(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_base_workgroup_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_blend_const_color_a_float(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_blend_const_color_a_float); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_blend_const_color_aaaa8888_unorm(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_blend_const_color_aaaa8888_unorm); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_blend_const_color_b_float(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_blend_const_color_b_float); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_blend_const_color_g_float(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_blend_const_color_g_float); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_blend_const_color_r_float(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_blend_const_color_r_float); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_blend_const_color_rgba(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_blend_const_color_rgba); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_blend_const_color_rgba8888_unorm(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_blend_const_color_rgba8888_unorm); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_btd_global_arg_addr_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_btd_global_arg_addr_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_btd_local_arg_addr_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_btd_local_arg_addr_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_btd_resume_sbt_addr_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_btd_resume_sbt_addr_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_btd_shader_type_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_btd_shader_type_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_btd_stack_id_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_btd_stack_id_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_buffer_amd(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_load_buffer_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_buffer_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_memory_modes(intrin, indices.memory_modes); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_callable_sbt_addr_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_callable_sbt_addr_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_callable_sbt_stride_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_callable_sbt_stride_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 16, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_clamp_vertex_color_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_clamp_vertex_color_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_clip_half_line_width_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_clip_half_line_width_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_color0(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_color0); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_color1(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_color1); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_constant(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_constant_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_constant); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range(intrin, indices.range); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_constant_agx(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_constant_agx_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_constant_agx); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_sign_extend(intrin, indices.sign_extend); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_constant_base_ptr(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_constant_base_ptr); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_converted_output_pan(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_converted_output_pan_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_converted_output_pan); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_coverage_mask_pan(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_coverage_mask_pan); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_any_enabled_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_any_enabled_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_back_face_enabled_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_back_face_enabled_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_ccw_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_ccw_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_front_face_enabled_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_front_face_enabled_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_mask(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_mask); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_mask_and_flags_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_mask_and_flags_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_small_prim_precision_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_small_prim_precision_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_cull_small_primitives_enabled_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_cull_small_primitives_enabled_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_deref(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_deref_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_deref); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_deref_block_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_deref_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_deref_block_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_desc_set_address_intel(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_desc_set_address_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_draw_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_draw_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_esgs_vertex_stride_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_esgs_vertex_stride_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_fb_layers_v3d(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_fb_layers_v3d); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_first_vertex(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_first_vertex); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_force_vrs_rates_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_force_vrs_rates_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_frag_coord(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_frag_coord); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_frag_invocation_count(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_frag_invocation_count); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_frag_shading_rate(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_frag_shading_rate); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_frag_size(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_frag_size); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_front_face(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_front_face); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_fs_input_interp_deltas(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_fs_input_interp_deltas_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_fs_input_interp_deltas); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_fully_covered(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_fully_covered); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_global_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_2x32(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_global_2x32_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_2x32); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_amd(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_global_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_base_ptr(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_base_ptr); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_block_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_global_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_block_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_const_block_intel(nir_builder *build, unsigned num_components, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_global_const_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_const_block_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_constant(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_global_constant_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_constant); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_constant_bounded(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_load_global_constant_bounded_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_constant_bounded); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_constant_offset(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_global_constant_offset_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_constant_offset); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_invocation_id(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_invocation_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_invocation_id_zero_base(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_invocation_id_zero_base); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_invocation_index(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_invocation_index); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_global_ir3(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_global_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_global_ir3); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_gs_header_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_gs_header_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_gs_vertex_offset_amd(nir_builder *build, struct _nir_load_gs_vertex_offset_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_gs_vertex_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_helper_invocation(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_helper_invocation); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_hit_attrib_amd(nir_builder *build, struct _nir_load_hit_attrib_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_hit_attrib_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_hs_out_patch_data_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_hs_out_patch_data_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_hs_patch_stride_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_hs_patch_stride_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_initial_edgeflags_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_initial_edgeflags_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_input(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_input_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_input); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_input_vertex(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_input_vertex_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_input_vertex); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_instance_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_instance_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_interpolated_input(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_interpolated_input_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_interpolated_input); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_intersection_opaque_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_intersection_opaque_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_invocation_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_invocation_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_is_indexed_draw(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_is_indexed_draw); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_kernel_input(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_kernel_input_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_kernel_input); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range(intrin, indices.range); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_layer_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_layer_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_lds_ngg_gs_out_vertex_base_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_lds_ngg_gs_out_vertex_base_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_lds_ngg_scratch_base_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_lds_ngg_scratch_base_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_leaf_opaque_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_leaf_opaque_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_leaf_procedural_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_leaf_procedural_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_line_coord(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_line_coord); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_line_width(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_line_width); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_local_invocation_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_local_invocation_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_local_invocation_index(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_local_invocation_index); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_local_pixel_agx(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_local_pixel_agx_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_local_pixel_agx); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_format(intrin, indices.format); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_local_shared_r600(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_local_shared_r600); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_lshs_vertex_stride_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_lshs_vertex_stride_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_merged_wave_info_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_merged_wave_info_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_mesh_inline_data_intel(nir_builder *build, unsigned bit_size, struct _nir_load_mesh_inline_data_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_mesh_inline_data_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_mesh_view_count(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_mesh_view_count); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_mesh_view_indices(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_mesh_view_indices_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_mesh_view_indices); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range(intrin, indices.range); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_multisampled_pan(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_multisampled_pan); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_num_subgroups(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_num_subgroups); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_num_vertices(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_num_vertices); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_num_vertices_per_primitive_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_num_vertices_per_primitive_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_num_workgroups(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_num_workgroups); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ordered_id_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ordered_id_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_output(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_output_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_output); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_packed_passthrough_primitive_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_packed_passthrough_primitive_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_param(nir_builder *build, unsigned num_components, unsigned bit_size, struct _nir_load_param_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_param); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - nir_intrinsic_set_param_idx(intrin, indices.param_idx); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_patch_vertices_in(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_patch_vertices_in); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_per_primitive_output(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_per_primitive_output_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_per_primitive_output); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_per_vertex_input(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_per_vertex_input_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_per_vertex_input); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_per_vertex_output(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_per_vertex_output_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_per_vertex_output); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_persp_center_rhw_ir3(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_persp_center_rhw_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_pipeline_stat_query_enabled_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_pipeline_stat_query_enabled_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_point_coord(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_point_coord); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_point_coord_maybe_flipped(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_point_coord_maybe_flipped); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_preamble(nir_builder *build, unsigned num_components, unsigned bit_size, struct _nir_load_preamble_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_preamble); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_prim_gen_query_enabled_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_prim_gen_query_enabled_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_prim_xfb_query_enabled_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_prim_xfb_query_enabled_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 1, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_primitive_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_primitive_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_primitive_location_ir3(nir_builder *build, struct _nir_load_primitive_location_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_primitive_location_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - nir_intrinsic_set_driver_location(intrin, indices.driver_location); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_printf_buffer_address(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_printf_buffer_address); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_provoking_vtx_in_prim_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_provoking_vtx_in_prim_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ptr_dxil(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ptr_dxil); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_push_constant(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_push_constant_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_push_constant); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range(intrin, indices.range); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_rasterization_samples_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_rasterization_samples_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_raw_output_pan(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_raw_output_pan_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_raw_output_pan); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_base_mem_addr_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_base_mem_addr_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_flags(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_flags); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_geometry_index(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_geometry_index); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_hit_kind(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_hit_kind); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_hit_sbt_addr_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_hit_sbt_addr_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_hit_sbt_stride_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_hit_sbt_stride_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 16, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_hw_stack_size_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_hw_stack_size_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_instance_custom_index(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_instance_custom_index); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_launch_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_launch_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_launch_size(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_launch_size); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_launch_size_addr_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_launch_size_addr_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_miss_sbt_addr_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_miss_sbt_addr_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_miss_sbt_stride_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_miss_sbt_stride_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 16, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_num_dss_rt_stacks_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_num_dss_rt_stacks_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_object_direction(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_object_direction); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_object_origin(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_object_origin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_object_to_world(nir_builder *build, struct _nir_load_ray_object_to_world_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_object_to_world); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - nir_intrinsic_set_column(intrin, indices.column); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_query_global_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_query_global_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_sw_stack_size_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_sw_stack_size_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_t_max(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_t_max); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_t_min(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_t_min); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_world_direction(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_world_direction); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_world_origin(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_world_origin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ray_world_to_object(nir_builder *build, struct _nir_load_ray_world_to_object_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ray_world_to_object); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - nir_intrinsic_set_column(intrin, indices.column); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_rel_patch_id_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_rel_patch_id_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_reloc_const_intel(nir_builder *build, struct _nir_load_reloc_const_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_reloc_const_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - nir_intrinsic_set_param_idx(intrin, indices.param_idx); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_attr_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_attr_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_attr_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_attr_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_es2gs_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_es2gs_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_esgs_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_esgs_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_gs2vs_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_gs2vs_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_gsvs_amd(nir_builder *build, struct _nir_load_ring_gsvs_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_gsvs_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_mesh_scratch_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_mesh_scratch_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_mesh_scratch_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_mesh_scratch_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_task_draw_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_task_draw_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_task_payload_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_task_payload_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_tess_factors_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_tess_factors_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_tess_factors_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_tess_factors_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_tess_offchip_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_tess_offchip_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ring_tess_offchip_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ring_tess_offchip_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_rt_arg_scratch_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_rt_arg_scratch_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_rt_conversion_pan(nir_builder *build, struct _nir_load_rt_conversion_pan_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_rt_conversion_pan); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_src_type(intrin, indices.src_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_rt_dynamic_callable_stack_base_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_rt_dynamic_callable_stack_base_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_id_no_per_sample(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_id_no_per_sample); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_mask_in(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_mask_in); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_pos(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_pos); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_pos_from_id(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_pos_from_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_pos_or_center(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_pos_or_center); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_positions_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_positions_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sample_positions_pan(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sample_positions_pan); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sampler_lod_parameters_pan(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sampler_lod_parameters_pan); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sbt_base_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sbt_base_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sbt_offset_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sbt_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_sbt_stride_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_sbt_stride_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_scalar_arg_amd(nir_builder *build, unsigned num_components, struct _nir_load_scalar_arg_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_scalar_arg_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_arg_upper_bound_u32_amd(intrin, indices.arg_upper_bound_u32_amd); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_scratch(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_scratch_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_scratch); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_scratch_base_ptr(nir_builder *build, unsigned num_components, unsigned bit_size, struct _nir_load_scratch_base_ptr_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_scratch_base_ptr); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_scratch_dxil(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_scratch_dxil); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shader_record_ptr(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shader_record_ptr); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shared(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_shared_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shared); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shared2_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_shared2_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shared2_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_offset0(intrin, indices.offset0); - nir_intrinsic_set_offset1(intrin, indices.offset1); - nir_intrinsic_set_st64(intrin, indices.st64); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shared_base_ptr(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shared_base_ptr); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shared_block_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_shared_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shared_block_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shared_dxil(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shared_dxil); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shared_ir3(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_shared_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shared_ir3); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_shared_uniform_block_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_shared_uniform_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_shared_uniform_block_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_simd_width_intel(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_simd_width_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_smem_amd(nir_builder *build, unsigned num_components, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_smem_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_smem_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_smem_buffer_amd(nir_builder *build, unsigned num_components, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_smem_buffer_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_smem_buffer_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ssbo(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_ssbo_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ssbo); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ssbo_address(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ssbo_address); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ssbo_block_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_ssbo_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ssbo_block_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ssbo_ir3(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_load_ssbo_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ssbo_ir3); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ssbo_uniform_block_intel(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_ssbo_uniform_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ssbo_uniform_block_intel); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_stack(nir_builder *build, unsigned num_components, unsigned bit_size, struct _nir_load_stack_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_stack); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - nir_intrinsic_set_call_idx(intrin, indices.call_idx); - nir_intrinsic_set_value_id(intrin, indices.value_id); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_streamout_buffer_amd(nir_builder *build, struct _nir_load_streamout_buffer_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_streamout_buffer_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_streamout_config_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_streamout_config_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_streamout_offset_amd(nir_builder *build, struct _nir_load_streamout_offset_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_streamout_offset_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_streamout_write_index_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_streamout_write_index_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_eq_mask(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_eq_mask); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_ge_mask(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_ge_mask); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_gt_mask(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_gt_mask); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_id_shift_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_id_shift_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_invocation(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_invocation); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_le_mask(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_le_mask); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_lt_mask(nir_builder *build, unsigned num_components, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_lt_mask); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_subgroup_size(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_subgroup_size); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_task_payload(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_task_payload_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_task_payload); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_task_ring_entry_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_task_ring_entry_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tcs_header_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tcs_header_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tcs_in_param_base_r600(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tcs_in_param_base_r600); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tcs_num_patches_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tcs_num_patches_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tcs_out_param_base_r600(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tcs_out_param_base_r600); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tcs_rel_patch_id_r600(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tcs_rel_patch_id_r600); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tcs_tess_factor_base_r600(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tcs_tess_factor_base_r600); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_coord(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_coord); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_coord_r600(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_coord_r600); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_factor_base_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_factor_base_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_level_inner(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_level_inner); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_level_inner_default(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_level_inner_default); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_level_outer(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_level_outer); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_level_outer_default(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_level_outer_default); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_param_base_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_param_base_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tess_rel_patch_id_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tess_rel_patch_id_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_texture_base_agx(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_texture_base_agx); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_texture_rect_scaling(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_texture_rect_scaling); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_tlb_color_v3d(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_tlb_color_v3d_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_tlb_color_v3d); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_topology_id_intel(nir_builder *build, struct _nir_load_topology_id_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_topology_id_intel); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_typed_buffer_amd(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_load_typed_buffer_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_typed_buffer_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_memory_modes(intrin, indices.memory_modes); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ubo(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_ubo_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ubo); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - nir_intrinsic_set_range_base(intrin, indices.range_base); - nir_intrinsic_set_range(intrin, indices.range); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ubo_base_agx(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ubo_base_agx); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ubo_dxil(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ubo_dxil); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_ubo_vec4(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_load_ubo_vec4_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_ubo_vec4); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_uniform(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_uniform_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_uniform); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_range(intrin, indices.range); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_user_clip_plane(nir_builder *build, struct _nir_load_user_clip_plane_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_user_clip_plane); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - nir_intrinsic_set_ucp_id(intrin, indices.ucp_id); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_user_data_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_user_data_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_vbo_base_agx(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_vbo_base_agx); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 64, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_vector_arg_amd(nir_builder *build, unsigned num_components, struct _nir_load_vector_arg_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_vector_arg_amd); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, 32, NULL); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_arg_upper_bound_u32_amd(intrin, indices.arg_upper_bound_u32_amd); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_vertex_id(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_vertex_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_vertex_id_zero_base(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_vertex_id_zero_base); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_view_index(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_view_index); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_offset(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_offset); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_scale(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_scale); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_x_offset(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_x_offset); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_x_scale(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_x_scale); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_xy_scale_and_offset(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_xy_scale_and_offset); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 4, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_y_offset(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_y_offset); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_y_scale(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_y_scale); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_z_offset(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_z_offset); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_viewport_z_scale(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_viewport_z_scale); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_vs_primitive_stride_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_vs_primitive_stride_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_vs_vertex_stride_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_vs_vertex_stride_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_vulkan_descriptor(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_load_vulkan_descriptor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_vulkan_descriptor); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_desc_type(intrin, indices.desc_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_work_dim(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_work_dim); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_workgroup_id(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_workgroup_id); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_workgroup_id_zero_base(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_workgroup_id_zero_base); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_workgroup_index(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_workgroup_index); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_workgroup_num_input_primitives_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_workgroup_num_input_primitives_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_workgroup_num_input_vertices_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_workgroup_num_input_vertices_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_workgroup_size(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_workgroup_size); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 3, 32, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_load_xfb_address(nir_builder *build, unsigned bit_size, struct _nir_load_xfb_address_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_load_xfb_address); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_masked_swizzle_amd(nir_builder *build, nir_ssa_def *src0, struct _nir_masked_swizzle_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_masked_swizzle_amd); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_swizzle_mask(intrin, indices.swizzle_mask); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_mbcnt_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_mbcnt_amd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_memcpy_deref(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_memcpy_deref_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_memcpy_deref); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_dst_access(intrin, indices.dst_access); - nir_intrinsic_set_src_access(intrin, indices.src_access); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_memory_barrier(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_memory_barrier); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_memory_barrier_atomic_counter(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_memory_barrier_atomic_counter); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_memory_barrier_buffer(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_memory_barrier_buffer); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_memory_barrier_image(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_memory_barrier_image); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_memory_barrier_shared(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_memory_barrier_shared); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_memory_barrier_tcs_patch(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_memory_barrier_tcs_patch); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_nop(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_nop); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_optimization_barrier_vgpr_amd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_optimization_barrier_vgpr_amd); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ordered_xfb_counter_add_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_ordered_xfb_counter_add_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ordered_xfb_counter_add_amd); - - intrin->num_components = src1->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_overwrite_tes_arguments_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_overwrite_tes_arguments_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_overwrite_vs_arguments_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_overwrite_vs_arguments_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_preamble_end_ir3(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_preamble_end_ir3); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_preamble_start_ir3(nir_builder *build, unsigned bit_size) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_preamble_start_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_printf(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_printf); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_quad_broadcast(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_quad_broadcast); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_quad_swap_diagonal(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_quad_swap_diagonal); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_quad_swap_horizontal(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_quad_swap_horizontal); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_quad_swap_vertical(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_quad_swap_vertical); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_quad_swizzle_amd(nir_builder *build, nir_ssa_def *src0, struct _nir_quad_swizzle_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_quad_swizzle_amd); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_swizzle_mask(intrin, indices.swizzle_mask); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_read_first_invocation(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_read_first_invocation); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_read_invocation(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_read_invocation); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_read_invocation_cond_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_read_invocation_cond_ir3); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_reduce(nir_builder *build, nir_ssa_def *src0, struct _nir_reduce_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_reduce); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_reduction_op(intrin, indices.reduction_op); - nir_intrinsic_set_cluster_size(intrin, indices.cluster_size); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_report_ray_intersection(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_report_ray_intersection); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_rotate(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_rotate_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rotate); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_execution_scope(intrin, indices.execution_scope); - nir_intrinsic_set_cluster_size(intrin, indices.cluster_size); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_rq_confirm_intersection(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rq_confirm_intersection); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_rq_generate_intersection(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rq_generate_intersection); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_rq_initialize(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, nir_ssa_def *src5, nir_ssa_def *src6, nir_ssa_def *src7) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rq_initialize); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - intrin->src[5] = nir_src_for_ssa(src5); - intrin->src[6] = nir_src_for_ssa(src6); - intrin->src[7] = nir_src_for_ssa(src7); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_rq_load(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_rq_load_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rq_load); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_ray_query_value(intrin, indices.ray_query_value); - nir_intrinsic_set_column(intrin, indices.column); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_rq_proceed(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rq_proceed); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_rq_terminate(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rq_terminate); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_rt_execute_callable(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_rt_execute_callable_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rt_execute_callable); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_call_idx(intrin, indices.call_idx); - nir_intrinsic_set_stack_size(intrin, indices.stack_size); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_rt_resume(nir_builder *build, struct _nir_rt_resume_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rt_resume); - - nir_intrinsic_set_call_idx(intrin, indices.call_idx); - nir_intrinsic_set_stack_size(intrin, indices.stack_size); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_rt_return_amd(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rt_return_amd); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_rt_trace_ray(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, nir_ssa_def *src5, nir_ssa_def *src6, nir_ssa_def *src7, nir_ssa_def *src8, nir_ssa_def *src9, nir_ssa_def *src10, struct _nir_rt_trace_ray_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_rt_trace_ray); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - intrin->src[5] = nir_src_for_ssa(src5); - intrin->src[6] = nir_src_for_ssa(src6); - intrin->src[7] = nir_src_for_ssa(src7); - intrin->src[8] = nir_src_for_ssa(src8); - intrin->src[9] = nir_src_for_ssa(src9); - intrin->src[10] = nir_src_for_ssa(src10); - nir_intrinsic_set_call_idx(intrin, indices.call_idx); - nir_intrinsic_set_stack_size(intrin, indices.stack_size); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_scoped_barrier(nir_builder *build, struct _nir_scoped_barrier_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_scoped_barrier); - - nir_intrinsic_set_execution_scope(intrin, indices.execution_scope); - nir_intrinsic_set_memory_scope(intrin, indices.memory_scope); - nir_intrinsic_set_memory_semantics(intrin, indices.memory_semantics); - nir_intrinsic_set_memory_modes(intrin, indices.memory_modes); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_set_vertex_and_primitive_count(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_set_vertex_and_primitive_count_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_set_vertex_and_primitive_count); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_stream_id(intrin, indices.stream_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_shader_clock(nir_builder *build, struct _nir_shader_clock_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shader_clock); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 2, 32, NULL); - nir_intrinsic_set_memory_scope(intrin, indices.memory_scope); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_add_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_add_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_and_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_and_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_shared_atomic_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_comp_swap_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_comp_swap_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_exchange_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_exchange_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_fadd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_fcomp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_shared_atomic_fcomp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_fcomp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_fmax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_fmin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_imax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_imax_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_imax_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_imin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_imin_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_imin_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_or_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_or_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_umax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_umax_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_umax_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_umin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_umin_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_umin_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_shared_atomic_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shared_atomic_xor_dxil(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shared_atomic_xor_dxil); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shuffle(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shuffle); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shuffle_down(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shuffle_down); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shuffle_up(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shuffle_up); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_shuffle_xor(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_shuffle_xor); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_sparse_residency_code_and(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_sparse_residency_code_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, 32, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_add_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_add_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_add_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_and_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_and_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_and_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_comp_swap_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_ssbo_atomic_comp_swap_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_comp_swap_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_exchange_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_exchange_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_exchange_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_fadd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_fcomp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_fcomp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_fcomp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_fmax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_fmin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_imax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_imax_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_imax_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_imax_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_imin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_imin_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_imin_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_imin_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_or_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_or_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_or_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_umax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_umax_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_umax_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_umax_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_umin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_umin_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_umin_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_umin_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_ssbo_atomic_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_ssbo_atomic_xor_ir3(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_ssbo_atomic_xor_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_ssbo_atomic_xor_ir3); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_store_agx(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_agx_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_agx); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_format(intrin, indices.format); - nir_intrinsic_set_sign_extend(intrin, indices.sign_extend); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_buffer_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_store_buffer_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_buffer_amd); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_memory_modes(intrin, indices.memory_modes); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_combined_output_pan(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, struct _nir_store_combined_output_pan_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_combined_output_pan); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_src_type(intrin, indices.src_type); - nir_intrinsic_set_dest_type(intrin, indices.dest_type); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_deref(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_deref_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_deref); - - intrin->num_components = src1->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_deref_block_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_deref_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_deref_block_intel); - - intrin->num_components = src1->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_global(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_global_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_global); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_global_2x32(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_global_2x32_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_global_2x32); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_global_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_global_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_global_amd); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_global_block_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_global_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_global_block_intel); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_global_ir3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_global_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_global_ir3); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_hit_attrib_amd(nir_builder *build, nir_ssa_def *src0, struct _nir_store_hit_attrib_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_hit_attrib_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_local_pixel_agx(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_local_pixel_agx_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_local_pixel_agx); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_format(intrin, indices.format); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_local_shared_r600(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_local_shared_r600_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_local_shared_r600); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_output(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_output_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_output); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_src_type(intrin, indices.src_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - nir_intrinsic_set_io_xfb(intrin, indices.io_xfb); - nir_intrinsic_set_io_xfb2(intrin, indices.io_xfb2); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_per_primitive_output(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_per_primitive_output_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_per_primitive_output); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_src_type(intrin, indices.src_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_per_vertex_output(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_per_vertex_output_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_per_vertex_output); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_src_type(intrin, indices.src_type); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_preamble(nir_builder *build, nir_ssa_def *src0, struct _nir_store_preamble_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_preamble); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_raw_output_pan(nir_builder *build, nir_ssa_def *src0, struct _nir_store_raw_output_pan_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_raw_output_pan); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_io_semantics(intrin, indices.io_semantics); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_scratch(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_scratch_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_scratch); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_scratch_dxil(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_scratch_dxil); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_shared(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_shared_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_shared); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_shared2_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_shared2_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_shared2_amd); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_offset0(intrin, indices.offset0); - nir_intrinsic_set_offset1(intrin, indices.offset1); - nir_intrinsic_set_st64(intrin, indices.st64); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_shared_block_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_shared_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_shared_block_intel); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_shared_dxil(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_shared_dxil); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_shared_ir3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_shared_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_shared_ir3); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_shared_masked_dxil(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_shared_masked_dxil); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_ssbo(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_ssbo_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_ssbo); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_ssbo_block_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_ssbo_block_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_ssbo_block_intel); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_ssbo_ir3(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, struct _nir_store_ssbo_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_ssbo_ir3); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_access(intrin, indices.access); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_ssbo_masked_dxil(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_ssbo_masked_dxil); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_stack(nir_builder *build, nir_ssa_def *src0, struct _nir_store_stack_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_stack); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_call_idx(intrin, indices.call_idx); - nir_intrinsic_set_value_id(intrin, indices.value_id); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_task_payload(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_task_payload_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_task_payload); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - if (!indices.align_mul) - indices.align_mul = src0->bit_size / 8u; - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - nir_intrinsic_set_align_mul(intrin, indices.align_mul); - nir_intrinsic_set_align_offset(intrin, indices.align_offset); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_tf_r600(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_tf_r600); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_tlb_sample_color_v3d(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_store_tlb_sample_color_v3d_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_tlb_sample_color_v3d); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - nir_intrinsic_set_component(intrin, indices.component); - nir_intrinsic_set_src_type(intrin, indices.src_type); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_uniform_ir3(nir_builder *build, nir_ssa_def *src0, struct _nir_store_uniform_ir3_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_uniform_ir3); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_store_zs_agx(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_store_zs_agx_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_store_zs_agx); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_add(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_add_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_add); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_and(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_and_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_and); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_comp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_task_payload_atomic_comp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_comp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_exchange(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_exchange_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_exchange); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_fadd(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_fadd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_fadd); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_fcomp_swap(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_task_payload_atomic_fcomp_swap_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_fcomp_swap); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_fmax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_fmax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_fmax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_fmin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_fmin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_fmin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_imax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_imax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_imax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_imin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_imin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_imin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_or(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_or_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_or); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_umax(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_umax_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_umax); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_umin(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_umin_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_umin); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_task_payload_atomic_xor(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_task_payload_atomic_xor_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_task_payload_atomic_xor); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_base(intrin, indices.base); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_terminate(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_terminate); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_terminate_if(nir_builder *build, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_terminate_if); - - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_terminate_ray(nir_builder *build) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_terminate_ray); - - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_trace_ray(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, nir_ssa_def *src3, nir_ssa_def *src4, nir_ssa_def *src5, nir_ssa_def *src6, nir_ssa_def *src7, nir_ssa_def *src8, nir_ssa_def *src9, nir_ssa_def *src10) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_trace_ray); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - intrin->src[3] = nir_src_for_ssa(src3); - intrin->src[4] = nir_src_for_ssa(src4); - intrin->src[5] = nir_src_for_ssa(src5); - intrin->src[6] = nir_src_for_ssa(src6); - intrin->src[7] = nir_src_for_ssa(src7); - intrin->src[8] = nir_src_for_ssa(src8); - intrin->src[9] = nir_src_for_ssa(src9); - intrin->src[10] = nir_src_for_ssa(src10); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_intrinsic_instr * -_nir_build_trace_ray_intel(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2, struct _nir_trace_ray_intel_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_trace_ray_intel); - - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - nir_intrinsic_set_synchronous(intrin, indices.synchronous); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} -static inline nir_ssa_def * -_nir_build_vote_all(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_vote_all); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_vote_any(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_vote_any); - - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_vote_feq(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_vote_feq); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_vote_ieq(nir_builder *build, unsigned bit_size, nir_ssa_def *src0) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_vote_ieq); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_vulkan_resource_index(nir_builder *build, unsigned num_components, unsigned bit_size, nir_ssa_def *src0, struct _nir_vulkan_resource_index_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_vulkan_resource_index); - - intrin->num_components = num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - nir_intrinsic_set_desc_set(intrin, indices.desc_set); - nir_intrinsic_set_binding(intrin, indices.binding); - nir_intrinsic_set_desc_type(intrin, indices.desc_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_vulkan_resource_reindex(nir_builder *build, unsigned bit_size, nir_ssa_def *src0, nir_ssa_def *src1, struct _nir_vulkan_resource_reindex_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_vulkan_resource_reindex); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - nir_intrinsic_set_desc_type(intrin, indices.desc_type); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_ssa_def * -_nir_build_write_invocation_amd(nir_builder *build, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_write_invocation_amd); - - intrin->num_components = src0->num_components; - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, src0->bit_size, NULL); - intrin->src[0] = nir_src_for_ssa(src0); - intrin->src[1] = nir_src_for_ssa(src1); - intrin->src[2] = nir_src_for_ssa(src2); - - nir_builder_instr_insert(build, &intrin->instr); - return &intrin->dest.ssa; -} -static inline nir_intrinsic_instr * -_nir_build_xfb_counter_sub_amd(nir_builder *build, nir_ssa_def *src0, struct _nir_xfb_counter_sub_amd_indices indices) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_xfb_counter_sub_amd); - - intrin->num_components = src0->num_components; - intrin->src[0] = nir_src_for_ssa(src0); - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - nir_intrinsic_set_write_mask(intrin, indices.write_mask); - - nir_builder_instr_insert(build, &intrin->instr); - return intrin; -} - -#define nir_build_accept_ray_intersection _nir_build_accept_ray_intersection -#define nir_accept_ray_intersection nir_build_accept_ray_intersection -#ifdef __cplusplus -#define nir_build_addr_mode_is(build, bit_size, src0, ...) \ -_nir_build_addr_mode_is(build, bit_size, src0, _nir_addr_mode_is_indices{0, __VA_ARGS__}) -#else -#define nir_build_addr_mode_is(build, bit_size, src0, ...) \ -_nir_build_addr_mode_is(build, bit_size, src0, (struct _nir_addr_mode_is_indices){0, __VA_ARGS__}) -#endif -#define nir_addr_mode_is nir_build_addr_mode_is -#define nir_build_alloc_vertices_and_primitives_amd _nir_build_alloc_vertices_and_primitives_amd -#define nir_alloc_vertices_and_primitives_amd nir_build_alloc_vertices_and_primitives_amd -#ifdef __cplusplus -#define nir_build_atomic_add_gen_prim_count_amd(build, src0, ...) \ -_nir_build_atomic_add_gen_prim_count_amd(build, src0, _nir_atomic_add_gen_prim_count_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_add_gen_prim_count_amd(build, src0, ...) \ -_nir_build_atomic_add_gen_prim_count_amd(build, src0, (struct _nir_atomic_add_gen_prim_count_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_add_gen_prim_count_amd nir_build_atomic_add_gen_prim_count_amd -#define nir_build_atomic_add_gs_emit_prim_count_amd _nir_build_atomic_add_gs_emit_prim_count_amd -#define nir_atomic_add_gs_emit_prim_count_amd nir_build_atomic_add_gs_emit_prim_count_amd -#define nir_build_atomic_add_gs_invocation_count_amd _nir_build_atomic_add_gs_invocation_count_amd -#define nir_atomic_add_gs_invocation_count_amd nir_build_atomic_add_gs_invocation_count_amd -#ifdef __cplusplus -#define nir_build_atomic_add_xfb_prim_count_amd(build, src0, ...) \ -_nir_build_atomic_add_xfb_prim_count_amd(build, src0, _nir_atomic_add_xfb_prim_count_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_add_xfb_prim_count_amd(build, src0, ...) \ -_nir_build_atomic_add_xfb_prim_count_amd(build, src0, (struct _nir_atomic_add_xfb_prim_count_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_add_xfb_prim_count_amd nir_build_atomic_add_xfb_prim_count_amd -#ifdef __cplusplus -#define nir_build_atomic_counter_add(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_add(build, bit_size, src0, src1, _nir_atomic_counter_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_add(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_add(build, bit_size, src0, src1, (struct _nir_atomic_counter_add_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_add nir_build_atomic_counter_add -#define nir_build_atomic_counter_add_deref _nir_build_atomic_counter_add_deref -#define nir_atomic_counter_add_deref nir_build_atomic_counter_add_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_and(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_and(build, bit_size, src0, src1, _nir_atomic_counter_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_and(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_and(build, bit_size, src0, src1, (struct _nir_atomic_counter_and_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_and nir_build_atomic_counter_and -#define nir_build_atomic_counter_and_deref _nir_build_atomic_counter_and_deref -#define nir_atomic_counter_and_deref nir_build_atomic_counter_and_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_atomic_counter_comp_swap(build, bit_size, src0, src1, src2, _nir_atomic_counter_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_atomic_counter_comp_swap(build, bit_size, src0, src1, src2, (struct _nir_atomic_counter_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_comp_swap nir_build_atomic_counter_comp_swap -#define nir_build_atomic_counter_comp_swap_deref _nir_build_atomic_counter_comp_swap_deref -#define nir_atomic_counter_comp_swap_deref nir_build_atomic_counter_comp_swap_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_exchange(build, bit_size, src0, src1, _nir_atomic_counter_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_exchange(build, bit_size, src0, src1, (struct _nir_atomic_counter_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_exchange nir_build_atomic_counter_exchange -#define nir_build_atomic_counter_exchange_deref _nir_build_atomic_counter_exchange_deref -#define nir_atomic_counter_exchange_deref nir_build_atomic_counter_exchange_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_inc(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_inc(build, bit_size, src0, _nir_atomic_counter_inc_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_inc(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_inc(build, bit_size, src0, (struct _nir_atomic_counter_inc_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_inc nir_build_atomic_counter_inc -#define nir_build_atomic_counter_inc_deref _nir_build_atomic_counter_inc_deref -#define nir_atomic_counter_inc_deref nir_build_atomic_counter_inc_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_max(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_max(build, bit_size, src0, src1, _nir_atomic_counter_max_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_max(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_max(build, bit_size, src0, src1, (struct _nir_atomic_counter_max_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_max nir_build_atomic_counter_max -#define nir_build_atomic_counter_max_deref _nir_build_atomic_counter_max_deref -#define nir_atomic_counter_max_deref nir_build_atomic_counter_max_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_min(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_min(build, bit_size, src0, src1, _nir_atomic_counter_min_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_min(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_min(build, bit_size, src0, src1, (struct _nir_atomic_counter_min_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_min nir_build_atomic_counter_min -#define nir_build_atomic_counter_min_deref _nir_build_atomic_counter_min_deref -#define nir_atomic_counter_min_deref nir_build_atomic_counter_min_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_or(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_or(build, bit_size, src0, src1, _nir_atomic_counter_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_or(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_or(build, bit_size, src0, src1, (struct _nir_atomic_counter_or_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_or nir_build_atomic_counter_or -#define nir_build_atomic_counter_or_deref _nir_build_atomic_counter_or_deref -#define nir_atomic_counter_or_deref nir_build_atomic_counter_or_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_post_dec(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_post_dec(build, bit_size, src0, _nir_atomic_counter_post_dec_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_post_dec(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_post_dec(build, bit_size, src0, (struct _nir_atomic_counter_post_dec_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_post_dec nir_build_atomic_counter_post_dec -#define nir_build_atomic_counter_post_dec_deref _nir_build_atomic_counter_post_dec_deref -#define nir_atomic_counter_post_dec_deref nir_build_atomic_counter_post_dec_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_pre_dec(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_pre_dec(build, bit_size, src0, _nir_atomic_counter_pre_dec_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_pre_dec(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_pre_dec(build, bit_size, src0, (struct _nir_atomic_counter_pre_dec_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_pre_dec nir_build_atomic_counter_pre_dec -#define nir_build_atomic_counter_pre_dec_deref _nir_build_atomic_counter_pre_dec_deref -#define nir_atomic_counter_pre_dec_deref nir_build_atomic_counter_pre_dec_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_read(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_read(build, bit_size, src0, _nir_atomic_counter_read_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_read(build, bit_size, src0, ...) \ -_nir_build_atomic_counter_read(build, bit_size, src0, (struct _nir_atomic_counter_read_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_read nir_build_atomic_counter_read -#define nir_build_atomic_counter_read_deref _nir_build_atomic_counter_read_deref -#define nir_atomic_counter_read_deref nir_build_atomic_counter_read_deref -#ifdef __cplusplus -#define nir_build_atomic_counter_xor(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_xor(build, bit_size, src0, src1, _nir_atomic_counter_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_atomic_counter_xor(build, bit_size, src0, src1, ...) \ -_nir_build_atomic_counter_xor(build, bit_size, src0, src1, (struct _nir_atomic_counter_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_atomic_counter_xor nir_build_atomic_counter_xor -#define nir_build_atomic_counter_xor_deref _nir_build_atomic_counter_xor_deref -#define nir_atomic_counter_xor_deref nir_build_atomic_counter_xor_deref -#define nir_build_ballot _nir_build_ballot -#define nir_ballot nir_build_ballot -#define nir_build_ballot_bit_count_exclusive _nir_build_ballot_bit_count_exclusive -#define nir_ballot_bit_count_exclusive nir_build_ballot_bit_count_exclusive -#define nir_build_ballot_bit_count_inclusive _nir_build_ballot_bit_count_inclusive -#define nir_ballot_bit_count_inclusive nir_build_ballot_bit_count_inclusive -#define nir_build_ballot_bit_count_reduce _nir_build_ballot_bit_count_reduce -#define nir_ballot_bit_count_reduce nir_build_ballot_bit_count_reduce -#define nir_build_ballot_bitfield_extract _nir_build_ballot_bitfield_extract -#define nir_ballot_bitfield_extract nir_build_ballot_bitfield_extract -#define nir_build_ballot_find_lsb _nir_build_ballot_find_lsb -#define nir_ballot_find_lsb nir_build_ballot_find_lsb -#define nir_build_ballot_find_msb _nir_build_ballot_find_msb -#define nir_ballot_find_msb nir_build_ballot_find_msb -#define nir_build_begin_invocation_interlock _nir_build_begin_invocation_interlock -#define nir_begin_invocation_interlock nir_build_begin_invocation_interlock -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_add(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_add(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_add(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_add(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_add_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_add nir_build_bindless_image_atomic_add -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_and(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_and(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_and(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_and(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_and_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_and nir_build_bindless_image_atomic_and -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_bindless_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, _nir_bindless_image_atomic_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_bindless_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, (struct _nir_bindless_image_atomic_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_comp_swap nir_build_bindless_image_atomic_comp_swap -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_dec_wrap_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_dec_wrap_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_dec_wrap nir_build_bindless_image_atomic_dec_wrap -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_exchange nir_build_bindless_image_atomic_exchange -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_fadd_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_fadd_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_fadd nir_build_bindless_image_atomic_fadd -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_fmax_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_fmax_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_fmax nir_build_bindless_image_atomic_fmax -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_fmin_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_fmin_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_fmin nir_build_bindless_image_atomic_fmin -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_imax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_imax(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_imax_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_imax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_imax(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_imax_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_imax nir_build_bindless_image_atomic_imax -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_imin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_imin(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_imin_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_imin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_imin(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_imin_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_imin nir_build_bindless_image_atomic_imin -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_inc_wrap_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_inc_wrap_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_inc_wrap nir_build_bindless_image_atomic_inc_wrap -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_or(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_or(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_or(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_or(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_or_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_or nir_build_bindless_image_atomic_or -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_umax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_umax(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_umax_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_umax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_umax(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_umax_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_umax nir_build_bindless_image_atomic_umax -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_umin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_umin(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_umin_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_umin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_umin(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_umin_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_umin nir_build_bindless_image_atomic_umin -#ifdef __cplusplus -#define nir_build_bindless_image_atomic_xor(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_xor(build, bit_size, src0, src1, src2, src3, _nir_bindless_image_atomic_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_atomic_xor(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_atomic_xor(build, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_atomic_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_atomic_xor nir_build_bindless_image_atomic_xor -#ifdef __cplusplus -#define nir_build_bindless_image_descriptor_amd(build, num_components, bit_size, src0, ...) \ -_nir_build_bindless_image_descriptor_amd(build, num_components, bit_size, src0, _nir_bindless_image_descriptor_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_descriptor_amd(build, num_components, bit_size, src0, ...) \ -_nir_build_bindless_image_descriptor_amd(build, num_components, bit_size, src0, (struct _nir_bindless_image_descriptor_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_descriptor_amd nir_build_bindless_image_descriptor_amd -#ifdef __cplusplus -#define nir_build_bindless_image_format(build, bit_size, src0, ...) \ -_nir_build_bindless_image_format(build, bit_size, src0, _nir_bindless_image_format_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_format(build, bit_size, src0, ...) \ -_nir_build_bindless_image_format(build, bit_size, src0, (struct _nir_bindless_image_format_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_format nir_build_bindless_image_format -#ifdef __cplusplus -#define nir_build_bindless_image_fragment_mask_load_amd(build, src0, src1, ...) \ -_nir_build_bindless_image_fragment_mask_load_amd(build, src0, src1, _nir_bindless_image_fragment_mask_load_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_fragment_mask_load_amd(build, src0, src1, ...) \ -_nir_build_bindless_image_fragment_mask_load_amd(build, src0, src1, (struct _nir_bindless_image_fragment_mask_load_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_fragment_mask_load_amd nir_build_bindless_image_fragment_mask_load_amd -#ifdef __cplusplus -#define nir_build_bindless_image_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_load(build, num_components, bit_size, src0, src1, src2, src3, _nir_bindless_image_load_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_load(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_load_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_load nir_build_bindless_image_load -#ifdef __cplusplus -#define nir_build_bindless_image_load_raw_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_bindless_image_load_raw_intel(build, num_components, bit_size, src0, src1, _nir_bindless_image_load_raw_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_load_raw_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_bindless_image_load_raw_intel(build, num_components, bit_size, src0, src1, (struct _nir_bindless_image_load_raw_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_load_raw_intel nir_build_bindless_image_load_raw_intel -#ifdef __cplusplus -#define nir_build_bindless_image_order(build, bit_size, src0, ...) \ -_nir_build_bindless_image_order(build, bit_size, src0, _nir_bindless_image_order_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_order(build, bit_size, src0, ...) \ -_nir_build_bindless_image_order(build, bit_size, src0, (struct _nir_bindless_image_order_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_order nir_build_bindless_image_order -#ifdef __cplusplus -#define nir_build_bindless_image_samples(build, bit_size, src0, ...) \ -_nir_build_bindless_image_samples(build, bit_size, src0, _nir_bindless_image_samples_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_samples(build, bit_size, src0, ...) \ -_nir_build_bindless_image_samples(build, bit_size, src0, (struct _nir_bindless_image_samples_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_samples nir_build_bindless_image_samples -#ifdef __cplusplus -#define nir_build_bindless_image_samples_identical(build, bit_size, src0, src1, ...) \ -_nir_build_bindless_image_samples_identical(build, bit_size, src0, src1, _nir_bindless_image_samples_identical_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_samples_identical(build, bit_size, src0, src1, ...) \ -_nir_build_bindless_image_samples_identical(build, bit_size, src0, src1, (struct _nir_bindless_image_samples_identical_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_samples_identical nir_build_bindless_image_samples_identical -#ifdef __cplusplus -#define nir_build_bindless_image_size(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_bindless_image_size(build, num_components, bit_size, src0, src1, _nir_bindless_image_size_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_size(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_bindless_image_size(build, num_components, bit_size, src0, src1, (struct _nir_bindless_image_size_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_size nir_build_bindless_image_size -#ifdef __cplusplus -#define nir_build_bindless_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, _nir_bindless_image_sparse_load_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_bindless_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_bindless_image_sparse_load_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_sparse_load nir_build_bindless_image_sparse_load -#ifdef __cplusplus -#define nir_build_bindless_image_store(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_bindless_image_store(build, src0, src1, src2, src3, src4, _nir_bindless_image_store_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_store(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_bindless_image_store(build, src0, src1, src2, src3, src4, (struct _nir_bindless_image_store_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_store nir_build_bindless_image_store -#ifdef __cplusplus -#define nir_build_bindless_image_store_raw_intel(build, src0, src1, src2, ...) \ -_nir_build_bindless_image_store_raw_intel(build, src0, src1, src2, _nir_bindless_image_store_raw_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_image_store_raw_intel(build, src0, src1, src2, ...) \ -_nir_build_bindless_image_store_raw_intel(build, src0, src1, src2, (struct _nir_bindless_image_store_raw_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_image_store_raw_intel nir_build_bindless_image_store_raw_intel -#ifdef __cplusplus -#define nir_build_bindless_resource_ir3(build, bit_size, src0, ...) \ -_nir_build_bindless_resource_ir3(build, bit_size, src0, _nir_bindless_resource_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_bindless_resource_ir3(build, bit_size, src0, ...) \ -_nir_build_bindless_resource_ir3(build, bit_size, src0, (struct _nir_bindless_resource_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_bindless_resource_ir3 nir_build_bindless_resource_ir3 -#ifdef __cplusplus -#define nir_build_block_image_store_agx(build, src0, src1, ...) \ -_nir_build_block_image_store_agx(build, src0, src1, _nir_block_image_store_agx_indices{0, __VA_ARGS__}) -#else -#define nir_build_block_image_store_agx(build, src0, src1, ...) \ -_nir_build_block_image_store_agx(build, src0, src1, (struct _nir_block_image_store_agx_indices){0, __VA_ARGS__}) -#endif -#define nir_block_image_store_agx nir_build_block_image_store_agx -#define nir_build_btd_retire_intel _nir_build_btd_retire_intel -#define nir_btd_retire_intel nir_build_btd_retire_intel -#define nir_build_btd_spawn_intel _nir_build_btd_spawn_intel -#define nir_btd_spawn_intel nir_build_btd_spawn_intel -#ifdef __cplusplus -#define nir_build_btd_stack_push_intel(build, ...) \ -_nir_build_btd_stack_push_intel(build, _nir_btd_stack_push_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_btd_stack_push_intel(build, ...) \ -_nir_build_btd_stack_push_intel(build, (struct _nir_btd_stack_push_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_btd_stack_push_intel nir_build_btd_stack_push_intel -#ifdef __cplusplus -#define nir_build_buffer_atomic_add_amd(build, bit_size, src0, src1, ...) \ -_nir_build_buffer_atomic_add_amd(build, bit_size, src0, src1, _nir_buffer_atomic_add_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_buffer_atomic_add_amd(build, bit_size, src0, src1, ...) \ -_nir_build_buffer_atomic_add_amd(build, bit_size, src0, src1, (struct _nir_buffer_atomic_add_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_buffer_atomic_add_amd nir_build_buffer_atomic_add_amd -#define nir_build_bvh64_intersect_ray_amd _nir_build_bvh64_intersect_ray_amd -#define nir_bvh64_intersect_ray_amd nir_build_bvh64_intersect_ray_amd -#define nir_build_cond_end_ir3 _nir_build_cond_end_ir3 -#define nir_cond_end_ir3 nir_build_cond_end_ir3 -#define nir_build_control_barrier _nir_build_control_barrier -#define nir_control_barrier nir_build_control_barrier -#ifdef __cplusplus -#define nir_build_convert_alu_types(build, bit_size, src0, ...) \ -_nir_build_convert_alu_types(build, bit_size, src0, _nir_convert_alu_types_indices{0, __VA_ARGS__}) -#else -#define nir_build_convert_alu_types(build, bit_size, src0, ...) \ -_nir_build_convert_alu_types(build, bit_size, src0, (struct _nir_convert_alu_types_indices){0, __VA_ARGS__}) -#endif -#define nir_convert_alu_types nir_build_convert_alu_types -#ifdef __cplusplus -#define nir_build_copy_deref(build, src0, src1, ...) \ -_nir_build_copy_deref(build, src0, src1, _nir_copy_deref_indices{0, __VA_ARGS__}) -#else -#define nir_build_copy_deref(build, src0, src1, ...) \ -_nir_build_copy_deref(build, src0, src1, (struct _nir_copy_deref_indices){0, __VA_ARGS__}) -#endif -#define nir_copy_deref nir_build_copy_deref -#ifdef __cplusplus -#define nir_build_copy_ubo_to_uniform_ir3(build, src0, src1, ...) \ -_nir_build_copy_ubo_to_uniform_ir3(build, src0, src1, _nir_copy_ubo_to_uniform_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_copy_ubo_to_uniform_ir3(build, src0, src1, ...) \ -_nir_build_copy_ubo_to_uniform_ir3(build, src0, src1, (struct _nir_copy_ubo_to_uniform_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_copy_ubo_to_uniform_ir3 nir_build_copy_ubo_to_uniform_ir3 -#define nir_build_demote _nir_build_demote -#define nir_demote nir_build_demote -#define nir_build_demote_if _nir_build_demote_if -#define nir_demote_if nir_build_demote_if -#ifdef __cplusplus -#define nir_build_deref_atomic_add(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_add(build, bit_size, src0, src1, _nir_deref_atomic_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_add(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_add(build, bit_size, src0, src1, (struct _nir_deref_atomic_add_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_add nir_build_deref_atomic_add -#ifdef __cplusplus -#define nir_build_deref_atomic_and(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_and(build, bit_size, src0, src1, _nir_deref_atomic_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_and(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_and(build, bit_size, src0, src1, (struct _nir_deref_atomic_and_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_and nir_build_deref_atomic_and -#ifdef __cplusplus -#define nir_build_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, _nir_deref_atomic_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, (struct _nir_deref_atomic_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_comp_swap nir_build_deref_atomic_comp_swap -#ifdef __cplusplus -#define nir_build_deref_atomic_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_exchange(build, bit_size, src0, src1, _nir_deref_atomic_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_exchange(build, bit_size, src0, src1, (struct _nir_deref_atomic_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_exchange nir_build_deref_atomic_exchange -#ifdef __cplusplus -#define nir_build_deref_atomic_fadd(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_fadd(build, bit_size, src0, src1, _nir_deref_atomic_fadd_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_fadd(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_fadd(build, bit_size, src0, src1, (struct _nir_deref_atomic_fadd_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_fadd nir_build_deref_atomic_fadd -#ifdef __cplusplus -#define nir_build_deref_atomic_fcomp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_deref_atomic_fcomp_swap(build, bit_size, src0, src1, src2, _nir_deref_atomic_fcomp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_fcomp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_deref_atomic_fcomp_swap(build, bit_size, src0, src1, src2, (struct _nir_deref_atomic_fcomp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_fcomp_swap nir_build_deref_atomic_fcomp_swap -#ifdef __cplusplus -#define nir_build_deref_atomic_fmax(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_fmax(build, bit_size, src0, src1, _nir_deref_atomic_fmax_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_fmax(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_fmax(build, bit_size, src0, src1, (struct _nir_deref_atomic_fmax_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_fmax nir_build_deref_atomic_fmax -#ifdef __cplusplus -#define nir_build_deref_atomic_fmin(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_fmin(build, bit_size, src0, src1, _nir_deref_atomic_fmin_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_fmin(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_fmin(build, bit_size, src0, src1, (struct _nir_deref_atomic_fmin_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_fmin nir_build_deref_atomic_fmin -#ifdef __cplusplus -#define nir_build_deref_atomic_imax(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_imax(build, bit_size, src0, src1, _nir_deref_atomic_imax_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_imax(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_imax(build, bit_size, src0, src1, (struct _nir_deref_atomic_imax_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_imax nir_build_deref_atomic_imax -#ifdef __cplusplus -#define nir_build_deref_atomic_imin(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_imin(build, bit_size, src0, src1, _nir_deref_atomic_imin_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_imin(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_imin(build, bit_size, src0, src1, (struct _nir_deref_atomic_imin_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_imin nir_build_deref_atomic_imin -#ifdef __cplusplus -#define nir_build_deref_atomic_or(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_or(build, bit_size, src0, src1, _nir_deref_atomic_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_or(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_or(build, bit_size, src0, src1, (struct _nir_deref_atomic_or_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_or nir_build_deref_atomic_or -#ifdef __cplusplus -#define nir_build_deref_atomic_umax(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_umax(build, bit_size, src0, src1, _nir_deref_atomic_umax_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_umax(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_umax(build, bit_size, src0, src1, (struct _nir_deref_atomic_umax_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_umax nir_build_deref_atomic_umax -#ifdef __cplusplus -#define nir_build_deref_atomic_umin(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_umin(build, bit_size, src0, src1, _nir_deref_atomic_umin_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_umin(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_umin(build, bit_size, src0, src1, (struct _nir_deref_atomic_umin_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_umin nir_build_deref_atomic_umin -#ifdef __cplusplus -#define nir_build_deref_atomic_xor(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_xor(build, bit_size, src0, src1, _nir_deref_atomic_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_atomic_xor(build, bit_size, src0, src1, ...) \ -_nir_build_deref_atomic_xor(build, bit_size, src0, src1, (struct _nir_deref_atomic_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_atomic_xor nir_build_deref_atomic_xor -#ifdef __cplusplus -#define nir_build_deref_buffer_array_length(build, bit_size, src0, ...) \ -_nir_build_deref_buffer_array_length(build, bit_size, src0, _nir_deref_buffer_array_length_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_buffer_array_length(build, bit_size, src0, ...) \ -_nir_build_deref_buffer_array_length(build, bit_size, src0, (struct _nir_deref_buffer_array_length_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_buffer_array_length nir_build_deref_buffer_array_length -#ifdef __cplusplus -#define nir_build_deref_mode_is(build, bit_size, src0, ...) \ -_nir_build_deref_mode_is(build, bit_size, src0, _nir_deref_mode_is_indices{0, __VA_ARGS__}) -#else -#define nir_build_deref_mode_is(build, bit_size, src0, ...) \ -_nir_build_deref_mode_is(build, bit_size, src0, (struct _nir_deref_mode_is_indices){0, __VA_ARGS__}) -#endif -#define nir_deref_mode_is nir_build_deref_mode_is -#define nir_build_discard _nir_build_discard -#define nir_discard nir_build_discard -#define nir_build_discard_if _nir_build_discard_if -#define nir_discard_if nir_build_discard_if -#define nir_build_elect _nir_build_elect -#define nir_elect nir_build_elect -#ifdef __cplusplus -#define nir_build_emit_vertex(build, ...) \ -_nir_build_emit_vertex(build, _nir_emit_vertex_indices{0, __VA_ARGS__}) -#else -#define nir_build_emit_vertex(build, ...) \ -_nir_build_emit_vertex(build, (struct _nir_emit_vertex_indices){0, __VA_ARGS__}) -#endif -#define nir_emit_vertex nir_build_emit_vertex -#ifdef __cplusplus -#define nir_build_emit_vertex_with_counter(build, src0, src1, ...) \ -_nir_build_emit_vertex_with_counter(build, src0, src1, _nir_emit_vertex_with_counter_indices{0, __VA_ARGS__}) -#else -#define nir_build_emit_vertex_with_counter(build, src0, src1, ...) \ -_nir_build_emit_vertex_with_counter(build, src0, src1, (struct _nir_emit_vertex_with_counter_indices){0, __VA_ARGS__}) -#endif -#define nir_emit_vertex_with_counter nir_build_emit_vertex_with_counter -#define nir_build_end_invocation_interlock _nir_build_end_invocation_interlock -#define nir_end_invocation_interlock nir_build_end_invocation_interlock -#define nir_build_end_patch_ir3 _nir_build_end_patch_ir3 -#define nir_end_patch_ir3 nir_build_end_patch_ir3 -#ifdef __cplusplus -#define nir_build_end_primitive(build, ...) \ -_nir_build_end_primitive(build, _nir_end_primitive_indices{0, __VA_ARGS__}) -#else -#define nir_build_end_primitive(build, ...) \ -_nir_build_end_primitive(build, (struct _nir_end_primitive_indices){0, __VA_ARGS__}) -#endif -#define nir_end_primitive nir_build_end_primitive -#ifdef __cplusplus -#define nir_build_end_primitive_with_counter(build, src0, src1, ...) \ -_nir_build_end_primitive_with_counter(build, src0, src1, _nir_end_primitive_with_counter_indices{0, __VA_ARGS__}) -#else -#define nir_build_end_primitive_with_counter(build, src0, src1, ...) \ -_nir_build_end_primitive_with_counter(build, src0, src1, (struct _nir_end_primitive_with_counter_indices){0, __VA_ARGS__}) -#endif -#define nir_end_primitive_with_counter nir_build_end_primitive_with_counter -#ifdef __cplusplus -#define nir_build_exclusive_scan(build, src0, ...) \ -_nir_build_exclusive_scan(build, src0, _nir_exclusive_scan_indices{0, __VA_ARGS__}) -#else -#define nir_build_exclusive_scan(build, src0, ...) \ -_nir_build_exclusive_scan(build, src0, (struct _nir_exclusive_scan_indices){0, __VA_ARGS__}) -#endif -#define nir_exclusive_scan nir_build_exclusive_scan -#define nir_build_execute_callable _nir_build_execute_callable -#define nir_execute_callable nir_build_execute_callable -#define nir_build_execute_closest_hit_amd _nir_build_execute_closest_hit_amd -#define nir_execute_closest_hit_amd nir_build_execute_closest_hit_amd -#define nir_build_execute_miss_amd _nir_build_execute_miss_amd -#define nir_execute_miss_amd nir_build_execute_miss_amd -#ifdef __cplusplus -#define nir_build_export_amd(build, src0, ...) \ -_nir_build_export_amd(build, src0, _nir_export_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_export_amd(build, src0, ...) \ -_nir_build_export_amd(build, src0, (struct _nir_export_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_export_amd nir_build_export_amd -#define nir_build_first_invocation _nir_build_first_invocation -#define nir_first_invocation nir_build_first_invocation -#ifdef __cplusplus -#define nir_build_gds_atomic_add_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_gds_atomic_add_amd(build, bit_size, src0, src1, src2, _nir_gds_atomic_add_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_gds_atomic_add_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_gds_atomic_add_amd(build, bit_size, src0, src1, src2, (struct _nir_gds_atomic_add_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_gds_atomic_add_amd nir_build_gds_atomic_add_amd -#ifdef __cplusplus -#define nir_build_get_ssbo_size(build, src0, ...) \ -_nir_build_get_ssbo_size(build, src0, _nir_get_ssbo_size_indices{0, __VA_ARGS__}) -#else -#define nir_build_get_ssbo_size(build, src0, ...) \ -_nir_build_get_ssbo_size(build, src0, (struct _nir_get_ssbo_size_indices){0, __VA_ARGS__}) -#endif -#define nir_get_ssbo_size nir_build_get_ssbo_size -#define nir_build_get_ubo_size _nir_build_get_ubo_size -#define nir_get_ubo_size nir_build_get_ubo_size -#define nir_build_global_atomic_add _nir_build_global_atomic_add -#define nir_global_atomic_add nir_build_global_atomic_add -#define nir_build_global_atomic_add_2x32 _nir_build_global_atomic_add_2x32 -#define nir_global_atomic_add_2x32 nir_build_global_atomic_add_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_add_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_add_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_add_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_add_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_add_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_add_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_add_amd nir_build_global_atomic_add_amd -#ifdef __cplusplus -#define nir_build_global_atomic_add_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_add_ir3(build, bit_size, src0, src1, _nir_global_atomic_add_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_add_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_add_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_add_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_add_ir3 nir_build_global_atomic_add_ir3 -#define nir_build_global_atomic_and _nir_build_global_atomic_and -#define nir_global_atomic_and nir_build_global_atomic_and -#define nir_build_global_atomic_and_2x32 _nir_build_global_atomic_and_2x32 -#define nir_global_atomic_and_2x32 nir_build_global_atomic_and_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_and_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_and_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_and_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_and_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_and_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_and_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_and_amd nir_build_global_atomic_and_amd -#ifdef __cplusplus -#define nir_build_global_atomic_and_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_and_ir3(build, bit_size, src0, src1, _nir_global_atomic_and_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_and_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_and_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_and_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_and_ir3 nir_build_global_atomic_and_ir3 -#define nir_build_global_atomic_comp_swap _nir_build_global_atomic_comp_swap -#define nir_global_atomic_comp_swap nir_build_global_atomic_comp_swap -#define nir_build_global_atomic_comp_swap_2x32 _nir_build_global_atomic_comp_swap_2x32 -#define nir_global_atomic_comp_swap_2x32 nir_build_global_atomic_comp_swap_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_comp_swap_amd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_global_atomic_comp_swap_amd(build, bit_size, src0, src1, src2, src3, _nir_global_atomic_comp_swap_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_comp_swap_amd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_global_atomic_comp_swap_amd(build, bit_size, src0, src1, src2, src3, (struct _nir_global_atomic_comp_swap_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_comp_swap_amd nir_build_global_atomic_comp_swap_amd -#ifdef __cplusplus -#define nir_build_global_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, _nir_global_atomic_comp_swap_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_comp_swap_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_comp_swap_ir3 nir_build_global_atomic_comp_swap_ir3 -#define nir_build_global_atomic_exchange _nir_build_global_atomic_exchange -#define nir_global_atomic_exchange nir_build_global_atomic_exchange -#define nir_build_global_atomic_exchange_2x32 _nir_build_global_atomic_exchange_2x32 -#define nir_global_atomic_exchange_2x32 nir_build_global_atomic_exchange_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_exchange_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_exchange_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_exchange_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_exchange_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_exchange_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_exchange_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_exchange_amd nir_build_global_atomic_exchange_amd -#ifdef __cplusplus -#define nir_build_global_atomic_exchange_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_exchange_ir3(build, bit_size, src0, src1, _nir_global_atomic_exchange_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_exchange_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_exchange_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_exchange_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_exchange_ir3 nir_build_global_atomic_exchange_ir3 -#define nir_build_global_atomic_fadd _nir_build_global_atomic_fadd -#define nir_global_atomic_fadd nir_build_global_atomic_fadd -#define nir_build_global_atomic_fadd_2x32 _nir_build_global_atomic_fadd_2x32 -#define nir_global_atomic_fadd_2x32 nir_build_global_atomic_fadd_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_fadd_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_fadd_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_fadd_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_fadd_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_fadd_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_fadd_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_fadd_amd nir_build_global_atomic_fadd_amd -#define nir_build_global_atomic_fcomp_swap _nir_build_global_atomic_fcomp_swap -#define nir_global_atomic_fcomp_swap nir_build_global_atomic_fcomp_swap -#define nir_build_global_atomic_fcomp_swap_2x32 _nir_build_global_atomic_fcomp_swap_2x32 -#define nir_global_atomic_fcomp_swap_2x32 nir_build_global_atomic_fcomp_swap_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_fcomp_swap_amd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_global_atomic_fcomp_swap_amd(build, bit_size, src0, src1, src2, src3, _nir_global_atomic_fcomp_swap_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_fcomp_swap_amd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_global_atomic_fcomp_swap_amd(build, bit_size, src0, src1, src2, src3, (struct _nir_global_atomic_fcomp_swap_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_fcomp_swap_amd nir_build_global_atomic_fcomp_swap_amd -#define nir_build_global_atomic_fmax _nir_build_global_atomic_fmax -#define nir_global_atomic_fmax nir_build_global_atomic_fmax -#define nir_build_global_atomic_fmax_2x32 _nir_build_global_atomic_fmax_2x32 -#define nir_global_atomic_fmax_2x32 nir_build_global_atomic_fmax_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_fmax_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_fmax_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_fmax_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_fmax_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_fmax_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_fmax_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_fmax_amd nir_build_global_atomic_fmax_amd -#define nir_build_global_atomic_fmin _nir_build_global_atomic_fmin -#define nir_global_atomic_fmin nir_build_global_atomic_fmin -#define nir_build_global_atomic_fmin_2x32 _nir_build_global_atomic_fmin_2x32 -#define nir_global_atomic_fmin_2x32 nir_build_global_atomic_fmin_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_fmin_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_fmin_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_fmin_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_fmin_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_fmin_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_fmin_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_fmin_amd nir_build_global_atomic_fmin_amd -#define nir_build_global_atomic_imax _nir_build_global_atomic_imax -#define nir_global_atomic_imax nir_build_global_atomic_imax -#define nir_build_global_atomic_imax_2x32 _nir_build_global_atomic_imax_2x32 -#define nir_global_atomic_imax_2x32 nir_build_global_atomic_imax_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_imax_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_imax_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_imax_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_imax_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_imax_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_imax_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_imax_amd nir_build_global_atomic_imax_amd -#ifdef __cplusplus -#define nir_build_global_atomic_imax_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_imax_ir3(build, bit_size, src0, src1, _nir_global_atomic_imax_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_imax_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_imax_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_imax_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_imax_ir3 nir_build_global_atomic_imax_ir3 -#define nir_build_global_atomic_imin _nir_build_global_atomic_imin -#define nir_global_atomic_imin nir_build_global_atomic_imin -#define nir_build_global_atomic_imin_2x32 _nir_build_global_atomic_imin_2x32 -#define nir_global_atomic_imin_2x32 nir_build_global_atomic_imin_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_imin_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_imin_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_imin_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_imin_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_imin_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_imin_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_imin_amd nir_build_global_atomic_imin_amd -#ifdef __cplusplus -#define nir_build_global_atomic_imin_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_imin_ir3(build, bit_size, src0, src1, _nir_global_atomic_imin_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_imin_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_imin_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_imin_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_imin_ir3 nir_build_global_atomic_imin_ir3 -#define nir_build_global_atomic_or _nir_build_global_atomic_or -#define nir_global_atomic_or nir_build_global_atomic_or -#define nir_build_global_atomic_or_2x32 _nir_build_global_atomic_or_2x32 -#define nir_global_atomic_or_2x32 nir_build_global_atomic_or_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_or_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_or_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_or_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_or_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_or_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_or_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_or_amd nir_build_global_atomic_or_amd -#ifdef __cplusplus -#define nir_build_global_atomic_or_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_or_ir3(build, bit_size, src0, src1, _nir_global_atomic_or_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_or_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_or_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_or_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_or_ir3 nir_build_global_atomic_or_ir3 -#define nir_build_global_atomic_umax _nir_build_global_atomic_umax -#define nir_global_atomic_umax nir_build_global_atomic_umax -#define nir_build_global_atomic_umax_2x32 _nir_build_global_atomic_umax_2x32 -#define nir_global_atomic_umax_2x32 nir_build_global_atomic_umax_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_umax_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_umax_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_umax_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_umax_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_umax_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_umax_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_umax_amd nir_build_global_atomic_umax_amd -#ifdef __cplusplus -#define nir_build_global_atomic_umax_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_umax_ir3(build, bit_size, src0, src1, _nir_global_atomic_umax_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_umax_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_umax_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_umax_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_umax_ir3 nir_build_global_atomic_umax_ir3 -#define nir_build_global_atomic_umin _nir_build_global_atomic_umin -#define nir_global_atomic_umin nir_build_global_atomic_umin -#define nir_build_global_atomic_umin_2x32 _nir_build_global_atomic_umin_2x32 -#define nir_global_atomic_umin_2x32 nir_build_global_atomic_umin_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_umin_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_umin_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_umin_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_umin_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_umin_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_umin_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_umin_amd nir_build_global_atomic_umin_amd -#ifdef __cplusplus -#define nir_build_global_atomic_umin_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_umin_ir3(build, bit_size, src0, src1, _nir_global_atomic_umin_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_umin_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_umin_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_umin_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_umin_ir3 nir_build_global_atomic_umin_ir3 -#define nir_build_global_atomic_xor _nir_build_global_atomic_xor -#define nir_global_atomic_xor nir_build_global_atomic_xor -#define nir_build_global_atomic_xor_2x32 _nir_build_global_atomic_xor_2x32 -#define nir_global_atomic_xor_2x32 nir_build_global_atomic_xor_2x32 -#ifdef __cplusplus -#define nir_build_global_atomic_xor_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_xor_amd(build, bit_size, src0, src1, src2, _nir_global_atomic_xor_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_xor_amd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_global_atomic_xor_amd(build, bit_size, src0, src1, src2, (struct _nir_global_atomic_xor_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_xor_amd nir_build_global_atomic_xor_amd -#ifdef __cplusplus -#define nir_build_global_atomic_xor_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_xor_ir3(build, bit_size, src0, src1, _nir_global_atomic_xor_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_global_atomic_xor_ir3(build, bit_size, src0, src1, ...) \ -_nir_build_global_atomic_xor_ir3(build, bit_size, src0, src1, (struct _nir_global_atomic_xor_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_global_atomic_xor_ir3 nir_build_global_atomic_xor_ir3 -#define nir_build_group_memory_barrier _nir_build_group_memory_barrier -#define nir_group_memory_barrier nir_build_group_memory_barrier -#define nir_build_ignore_ray_intersection _nir_build_ignore_ray_intersection -#define nir_ignore_ray_intersection nir_build_ignore_ray_intersection -#ifdef __cplusplus -#define nir_build_image_atomic_add(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_add(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_add(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_add(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_add_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_add nir_build_image_atomic_add -#ifdef __cplusplus -#define nir_build_image_atomic_and(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_and(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_and(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_and(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_and_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_and nir_build_image_atomic_and -#ifdef __cplusplus -#define nir_build_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, _nir_image_atomic_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, (struct _nir_image_atomic_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_comp_swap nir_build_image_atomic_comp_swap -#ifdef __cplusplus -#define nir_build_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_dec_wrap_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_dec_wrap_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_dec_wrap nir_build_image_atomic_dec_wrap -#ifdef __cplusplus -#define nir_build_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_exchange(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_exchange nir_build_image_atomic_exchange -#ifdef __cplusplus -#define nir_build_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_fadd_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_fadd(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_fadd_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_fadd nir_build_image_atomic_fadd -#ifdef __cplusplus -#define nir_build_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_fmax_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_fmax(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_fmax_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_fmax nir_build_image_atomic_fmax -#ifdef __cplusplus -#define nir_build_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_fmin_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_fmin(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_fmin_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_fmin nir_build_image_atomic_fmin -#ifdef __cplusplus -#define nir_build_image_atomic_imax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_imax(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_imax_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_imax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_imax(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_imax_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_imax nir_build_image_atomic_imax -#ifdef __cplusplus -#define nir_build_image_atomic_imin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_imin(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_imin_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_imin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_imin(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_imin_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_imin nir_build_image_atomic_imin -#ifdef __cplusplus -#define nir_build_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_inc_wrap_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_inc_wrap_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_inc_wrap nir_build_image_atomic_inc_wrap -#ifdef __cplusplus -#define nir_build_image_atomic_or(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_or(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_or(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_or(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_or_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_or nir_build_image_atomic_or -#ifdef __cplusplus -#define nir_build_image_atomic_umax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_umax(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_umax_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_umax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_umax(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_umax_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_umax nir_build_image_atomic_umax -#ifdef __cplusplus -#define nir_build_image_atomic_umin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_umin(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_umin_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_umin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_umin(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_umin_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_umin nir_build_image_atomic_umin -#ifdef __cplusplus -#define nir_build_image_atomic_xor(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_xor(build, bit_size, src0, src1, src2, src3, _nir_image_atomic_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_atomic_xor(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_atomic_xor(build, bit_size, src0, src1, src2, src3, (struct _nir_image_atomic_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_image_atomic_xor nir_build_image_atomic_xor -#ifdef __cplusplus -#define nir_build_image_deref_atomic_add(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_add(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_add(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_add(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_add_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_add nir_build_image_deref_atomic_add -#ifdef __cplusplus -#define nir_build_image_deref_atomic_and(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_and(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_and(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_and(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_and_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_and nir_build_image_deref_atomic_and -#ifdef __cplusplus -#define nir_build_image_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, _nir_image_deref_atomic_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_deref_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, src4, (struct _nir_image_deref_atomic_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_comp_swap nir_build_image_deref_atomic_comp_swap -#ifdef __cplusplus -#define nir_build_image_deref_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_dec_wrap_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_dec_wrap(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_dec_wrap_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_dec_wrap nir_build_image_deref_atomic_dec_wrap -#ifdef __cplusplus -#define nir_build_image_deref_atomic_exchange(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_exchange(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_exchange(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_exchange(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_exchange nir_build_image_deref_atomic_exchange -#ifdef __cplusplus -#define nir_build_image_deref_atomic_fadd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_fadd(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_fadd_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_fadd(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_fadd(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_fadd_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_fadd nir_build_image_deref_atomic_fadd -#ifdef __cplusplus -#define nir_build_image_deref_atomic_fmax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_fmax(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_fmax_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_fmax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_fmax(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_fmax_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_fmax nir_build_image_deref_atomic_fmax -#ifdef __cplusplus -#define nir_build_image_deref_atomic_fmin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_fmin(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_fmin_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_fmin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_fmin(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_fmin_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_fmin nir_build_image_deref_atomic_fmin -#ifdef __cplusplus -#define nir_build_image_deref_atomic_imax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_imax(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_imax_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_imax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_imax(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_imax_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_imax nir_build_image_deref_atomic_imax -#ifdef __cplusplus -#define nir_build_image_deref_atomic_imin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_imin(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_imin_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_imin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_imin(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_imin_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_imin nir_build_image_deref_atomic_imin -#ifdef __cplusplus -#define nir_build_image_deref_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_inc_wrap_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_inc_wrap(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_inc_wrap_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_inc_wrap nir_build_image_deref_atomic_inc_wrap -#ifdef __cplusplus -#define nir_build_image_deref_atomic_or(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_or(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_or(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_or(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_or_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_or nir_build_image_deref_atomic_or -#ifdef __cplusplus -#define nir_build_image_deref_atomic_umax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_umax(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_umax_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_umax(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_umax(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_umax_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_umax nir_build_image_deref_atomic_umax -#ifdef __cplusplus -#define nir_build_image_deref_atomic_umin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_umin(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_umin_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_umin(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_umin(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_umin_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_umin nir_build_image_deref_atomic_umin -#ifdef __cplusplus -#define nir_build_image_deref_atomic_xor(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_xor(build, bit_size, src0, src1, src2, src3, _nir_image_deref_atomic_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_atomic_xor(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_atomic_xor(build, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_atomic_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_atomic_xor nir_build_image_deref_atomic_xor -#ifdef __cplusplus -#define nir_build_image_deref_descriptor_amd(build, num_components, bit_size, src0, ...) \ -_nir_build_image_deref_descriptor_amd(build, num_components, bit_size, src0, _nir_image_deref_descriptor_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_descriptor_amd(build, num_components, bit_size, src0, ...) \ -_nir_build_image_deref_descriptor_amd(build, num_components, bit_size, src0, (struct _nir_image_deref_descriptor_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_descriptor_amd nir_build_image_deref_descriptor_amd -#ifdef __cplusplus -#define nir_build_image_deref_format(build, bit_size, src0, ...) \ -_nir_build_image_deref_format(build, bit_size, src0, _nir_image_deref_format_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_format(build, bit_size, src0, ...) \ -_nir_build_image_deref_format(build, bit_size, src0, (struct _nir_image_deref_format_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_format nir_build_image_deref_format -#ifdef __cplusplus -#define nir_build_image_deref_fragment_mask_load_amd(build, src0, src1, ...) \ -_nir_build_image_deref_fragment_mask_load_amd(build, src0, src1, _nir_image_deref_fragment_mask_load_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_fragment_mask_load_amd(build, src0, src1, ...) \ -_nir_build_image_deref_fragment_mask_load_amd(build, src0, src1, (struct _nir_image_deref_fragment_mask_load_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_fragment_mask_load_amd nir_build_image_deref_fragment_mask_load_amd -#ifdef __cplusplus -#define nir_build_image_deref_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_load(build, num_components, bit_size, src0, src1, src2, src3, _nir_image_deref_load_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_load(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_load_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_load nir_build_image_deref_load -#ifdef __cplusplus -#define nir_build_image_deref_load_param_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_image_deref_load_param_intel(build, num_components, bit_size, src0, _nir_image_deref_load_param_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_load_param_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_image_deref_load_param_intel(build, num_components, bit_size, src0, (struct _nir_image_deref_load_param_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_load_param_intel nir_build_image_deref_load_param_intel -#ifdef __cplusplus -#define nir_build_image_deref_load_raw_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_deref_load_raw_intel(build, num_components, bit_size, src0, src1, _nir_image_deref_load_raw_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_load_raw_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_deref_load_raw_intel(build, num_components, bit_size, src0, src1, (struct _nir_image_deref_load_raw_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_load_raw_intel nir_build_image_deref_load_raw_intel -#ifdef __cplusplus -#define nir_build_image_deref_order(build, bit_size, src0, ...) \ -_nir_build_image_deref_order(build, bit_size, src0, _nir_image_deref_order_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_order(build, bit_size, src0, ...) \ -_nir_build_image_deref_order(build, bit_size, src0, (struct _nir_image_deref_order_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_order nir_build_image_deref_order -#ifdef __cplusplus -#define nir_build_image_deref_samples(build, bit_size, src0, ...) \ -_nir_build_image_deref_samples(build, bit_size, src0, _nir_image_deref_samples_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_samples(build, bit_size, src0, ...) \ -_nir_build_image_deref_samples(build, bit_size, src0, (struct _nir_image_deref_samples_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_samples nir_build_image_deref_samples -#ifdef __cplusplus -#define nir_build_image_deref_samples_identical(build, bit_size, src0, src1, ...) \ -_nir_build_image_deref_samples_identical(build, bit_size, src0, src1, _nir_image_deref_samples_identical_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_samples_identical(build, bit_size, src0, src1, ...) \ -_nir_build_image_deref_samples_identical(build, bit_size, src0, src1, (struct _nir_image_deref_samples_identical_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_samples_identical nir_build_image_deref_samples_identical -#ifdef __cplusplus -#define nir_build_image_deref_size(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_deref_size(build, num_components, bit_size, src0, src1, _nir_image_deref_size_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_size(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_deref_size(build, num_components, bit_size, src0, src1, (struct _nir_image_deref_size_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_size nir_build_image_deref_size -#ifdef __cplusplus -#define nir_build_image_deref_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, _nir_image_deref_sparse_load_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_deref_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_image_deref_sparse_load_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_sparse_load nir_build_image_deref_sparse_load -#ifdef __cplusplus -#define nir_build_image_deref_store(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_deref_store(build, src0, src1, src2, src3, src4, _nir_image_deref_store_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_store(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_deref_store(build, src0, src1, src2, src3, src4, (struct _nir_image_deref_store_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_store nir_build_image_deref_store -#ifdef __cplusplus -#define nir_build_image_deref_store_raw_intel(build, src0, src1, src2, ...) \ -_nir_build_image_deref_store_raw_intel(build, src0, src1, src2, _nir_image_deref_store_raw_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_deref_store_raw_intel(build, src0, src1, src2, ...) \ -_nir_build_image_deref_store_raw_intel(build, src0, src1, src2, (struct _nir_image_deref_store_raw_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_image_deref_store_raw_intel nir_build_image_deref_store_raw_intel -#ifdef __cplusplus -#define nir_build_image_descriptor_amd(build, num_components, bit_size, src0, ...) \ -_nir_build_image_descriptor_amd(build, num_components, bit_size, src0, _nir_image_descriptor_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_descriptor_amd(build, num_components, bit_size, src0, ...) \ -_nir_build_image_descriptor_amd(build, num_components, bit_size, src0, (struct _nir_image_descriptor_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_image_descriptor_amd nir_build_image_descriptor_amd -#ifdef __cplusplus -#define nir_build_image_format(build, bit_size, src0, ...) \ -_nir_build_image_format(build, bit_size, src0, _nir_image_format_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_format(build, bit_size, src0, ...) \ -_nir_build_image_format(build, bit_size, src0, (struct _nir_image_format_indices){0, __VA_ARGS__}) -#endif -#define nir_image_format nir_build_image_format -#ifdef __cplusplus -#define nir_build_image_fragment_mask_load_amd(build, src0, src1, ...) \ -_nir_build_image_fragment_mask_load_amd(build, src0, src1, _nir_image_fragment_mask_load_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_fragment_mask_load_amd(build, src0, src1, ...) \ -_nir_build_image_fragment_mask_load_amd(build, src0, src1, (struct _nir_image_fragment_mask_load_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_image_fragment_mask_load_amd nir_build_image_fragment_mask_load_amd -#ifdef __cplusplus -#define nir_build_image_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_load(build, num_components, bit_size, src0, src1, src2, src3, _nir_image_load_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_load(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_image_load_indices){0, __VA_ARGS__}) -#endif -#define nir_image_load nir_build_image_load -#ifdef __cplusplus -#define nir_build_image_load_raw_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_load_raw_intel(build, num_components, bit_size, src0, src1, _nir_image_load_raw_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_load_raw_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_load_raw_intel(build, num_components, bit_size, src0, src1, (struct _nir_image_load_raw_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_image_load_raw_intel nir_build_image_load_raw_intel -#ifdef __cplusplus -#define nir_build_image_order(build, bit_size, src0, ...) \ -_nir_build_image_order(build, bit_size, src0, _nir_image_order_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_order(build, bit_size, src0, ...) \ -_nir_build_image_order(build, bit_size, src0, (struct _nir_image_order_indices){0, __VA_ARGS__}) -#endif -#define nir_image_order nir_build_image_order -#ifdef __cplusplus -#define nir_build_image_samples(build, bit_size, src0, ...) \ -_nir_build_image_samples(build, bit_size, src0, _nir_image_samples_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_samples(build, bit_size, src0, ...) \ -_nir_build_image_samples(build, bit_size, src0, (struct _nir_image_samples_indices){0, __VA_ARGS__}) -#endif -#define nir_image_samples nir_build_image_samples -#ifdef __cplusplus -#define nir_build_image_samples_identical(build, bit_size, src0, src1, ...) \ -_nir_build_image_samples_identical(build, bit_size, src0, src1, _nir_image_samples_identical_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_samples_identical(build, bit_size, src0, src1, ...) \ -_nir_build_image_samples_identical(build, bit_size, src0, src1, (struct _nir_image_samples_identical_indices){0, __VA_ARGS__}) -#endif -#define nir_image_samples_identical nir_build_image_samples_identical -#ifdef __cplusplus -#define nir_build_image_size(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_size(build, num_components, bit_size, src0, src1, _nir_image_size_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_size(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_image_size(build, num_components, bit_size, src0, src1, (struct _nir_image_size_indices){0, __VA_ARGS__}) -#endif -#define nir_image_size nir_build_image_size -#ifdef __cplusplus -#define nir_build_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, _nir_image_sparse_load_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_image_sparse_load(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_image_sparse_load_indices){0, __VA_ARGS__}) -#endif -#define nir_image_sparse_load nir_build_image_sparse_load -#ifdef __cplusplus -#define nir_build_image_store(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_store(build, src0, src1, src2, src3, src4, _nir_image_store_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_store(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_image_store(build, src0, src1, src2, src3, src4, (struct _nir_image_store_indices){0, __VA_ARGS__}) -#endif -#define nir_image_store nir_build_image_store -#ifdef __cplusplus -#define nir_build_image_store_raw_intel(build, src0, src1, src2, ...) \ -_nir_build_image_store_raw_intel(build, src0, src1, src2, _nir_image_store_raw_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_image_store_raw_intel(build, src0, src1, src2, ...) \ -_nir_build_image_store_raw_intel(build, src0, src1, src2, (struct _nir_image_store_raw_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_image_store_raw_intel nir_build_image_store_raw_intel -#ifdef __cplusplus -#define nir_build_inclusive_scan(build, src0, ...) \ -_nir_build_inclusive_scan(build, src0, _nir_inclusive_scan_indices{0, __VA_ARGS__}) -#else -#define nir_build_inclusive_scan(build, src0, ...) \ -_nir_build_inclusive_scan(build, src0, (struct _nir_inclusive_scan_indices){0, __VA_ARGS__}) -#endif -#define nir_inclusive_scan nir_build_inclusive_scan -#define nir_build_interp_deref_at_centroid _nir_build_interp_deref_at_centroid -#define nir_interp_deref_at_centroid nir_build_interp_deref_at_centroid -#define nir_build_interp_deref_at_offset _nir_build_interp_deref_at_offset -#define nir_interp_deref_at_offset nir_build_interp_deref_at_offset -#define nir_build_interp_deref_at_sample _nir_build_interp_deref_at_sample -#define nir_interp_deref_at_sample nir_build_interp_deref_at_sample -#define nir_build_interp_deref_at_vertex _nir_build_interp_deref_at_vertex -#define nir_interp_deref_at_vertex nir_build_interp_deref_at_vertex -#define nir_build_is_helper_invocation _nir_build_is_helper_invocation -#define nir_is_helper_invocation nir_build_is_helper_invocation -#define nir_build_is_sparse_texels_resident _nir_build_is_sparse_texels_resident -#define nir_is_sparse_texels_resident nir_build_is_sparse_texels_resident -#define nir_build_is_subgroup_invocation_lt_amd _nir_build_is_subgroup_invocation_lt_amd -#define nir_is_subgroup_invocation_lt_amd nir_build_is_subgroup_invocation_lt_amd -#define nir_build_lane_permute_16_amd _nir_build_lane_permute_16_amd -#define nir_lane_permute_16_amd nir_build_lane_permute_16_amd -#define nir_build_last_invocation _nir_build_last_invocation -#define nir_last_invocation nir_build_last_invocation -#ifdef __cplusplus -#define nir_build_launch_mesh_workgroups(build, src0, ...) \ -_nir_build_launch_mesh_workgroups(build, src0, _nir_launch_mesh_workgroups_indices{0, __VA_ARGS__}) -#else -#define nir_build_launch_mesh_workgroups(build, src0, ...) \ -_nir_build_launch_mesh_workgroups(build, src0, (struct _nir_launch_mesh_workgroups_indices){0, __VA_ARGS__}) -#endif -#define nir_launch_mesh_workgroups nir_build_launch_mesh_workgroups -#define nir_build_launch_mesh_workgroups_with_payload_deref _nir_build_launch_mesh_workgroups_with_payload_deref -#define nir_launch_mesh_workgroups_with_payload_deref nir_build_launch_mesh_workgroups_with_payload_deref -#define nir_build_load_aa_line_width _nir_build_load_aa_line_width -#define nir_load_aa_line_width nir_build_load_aa_line_width -#define nir_build_load_accel_struct_amd _nir_build_load_accel_struct_amd -#define nir_load_accel_struct_amd nir_build_load_accel_struct_amd -#ifdef __cplusplus -#define nir_build_load_agx(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_agx(build, num_components, bit_size, src0, src1, _nir_load_agx_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_agx(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_agx(build, num_components, bit_size, src0, src1, (struct _nir_load_agx_indices){0, __VA_ARGS__}) -#endif -#define nir_load_agx nir_build_load_agx -#define nir_build_load_alpha_reference_amd _nir_build_load_alpha_reference_amd -#define nir_load_alpha_reference_amd nir_build_load_alpha_reference_amd -#define nir_build_load_back_face_agx _nir_build_load_back_face_agx -#define nir_load_back_face_agx nir_build_load_back_face_agx -#ifdef __cplusplus -#define nir_build_load_barycentric_at_offset(build, bit_size, src0, ...) \ -_nir_build_load_barycentric_at_offset(build, bit_size, src0, _nir_load_barycentric_at_offset_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_barycentric_at_offset(build, bit_size, src0, ...) \ -_nir_build_load_barycentric_at_offset(build, bit_size, src0, (struct _nir_load_barycentric_at_offset_indices){0, __VA_ARGS__}) -#endif -#define nir_load_barycentric_at_offset nir_build_load_barycentric_at_offset -#ifdef __cplusplus -#define nir_build_load_barycentric_at_sample(build, bit_size, src0, ...) \ -_nir_build_load_barycentric_at_sample(build, bit_size, src0, _nir_load_barycentric_at_sample_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_barycentric_at_sample(build, bit_size, src0, ...) \ -_nir_build_load_barycentric_at_sample(build, bit_size, src0, (struct _nir_load_barycentric_at_sample_indices){0, __VA_ARGS__}) -#endif -#define nir_load_barycentric_at_sample nir_build_load_barycentric_at_sample -#ifdef __cplusplus -#define nir_build_load_barycentric_centroid(build, bit_size, ...) \ -_nir_build_load_barycentric_centroid(build, bit_size, _nir_load_barycentric_centroid_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_barycentric_centroid(build, bit_size, ...) \ -_nir_build_load_barycentric_centroid(build, bit_size, (struct _nir_load_barycentric_centroid_indices){0, __VA_ARGS__}) -#endif -#define nir_load_barycentric_centroid nir_build_load_barycentric_centroid -#ifdef __cplusplus -#define nir_build_load_barycentric_model(build, bit_size, ...) \ -_nir_build_load_barycentric_model(build, bit_size, _nir_load_barycentric_model_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_barycentric_model(build, bit_size, ...) \ -_nir_build_load_barycentric_model(build, bit_size, (struct _nir_load_barycentric_model_indices){0, __VA_ARGS__}) -#endif -#define nir_load_barycentric_model nir_build_load_barycentric_model -#ifdef __cplusplus -#define nir_build_load_barycentric_pixel(build, bit_size, ...) \ -_nir_build_load_barycentric_pixel(build, bit_size, _nir_load_barycentric_pixel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_barycentric_pixel(build, bit_size, ...) \ -_nir_build_load_barycentric_pixel(build, bit_size, (struct _nir_load_barycentric_pixel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_barycentric_pixel nir_build_load_barycentric_pixel -#ifdef __cplusplus -#define nir_build_load_barycentric_sample(build, bit_size, ...) \ -_nir_build_load_barycentric_sample(build, bit_size, _nir_load_barycentric_sample_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_barycentric_sample(build, bit_size, ...) \ -_nir_build_load_barycentric_sample(build, bit_size, (struct _nir_load_barycentric_sample_indices){0, __VA_ARGS__}) -#endif -#define nir_load_barycentric_sample nir_build_load_barycentric_sample -#define nir_build_load_base_global_invocation_id _nir_build_load_base_global_invocation_id -#define nir_load_base_global_invocation_id nir_build_load_base_global_invocation_id -#define nir_build_load_base_instance _nir_build_load_base_instance -#define nir_load_base_instance nir_build_load_base_instance -#define nir_build_load_base_vertex _nir_build_load_base_vertex -#define nir_load_base_vertex nir_build_load_base_vertex -#define nir_build_load_base_workgroup_id _nir_build_load_base_workgroup_id -#define nir_load_base_workgroup_id nir_build_load_base_workgroup_id -#define nir_build_load_blend_const_color_a_float _nir_build_load_blend_const_color_a_float -#define nir_load_blend_const_color_a_float nir_build_load_blend_const_color_a_float -#define nir_build_load_blend_const_color_aaaa8888_unorm _nir_build_load_blend_const_color_aaaa8888_unorm -#define nir_load_blend_const_color_aaaa8888_unorm nir_build_load_blend_const_color_aaaa8888_unorm -#define nir_build_load_blend_const_color_b_float _nir_build_load_blend_const_color_b_float -#define nir_load_blend_const_color_b_float nir_build_load_blend_const_color_b_float -#define nir_build_load_blend_const_color_g_float _nir_build_load_blend_const_color_g_float -#define nir_load_blend_const_color_g_float nir_build_load_blend_const_color_g_float -#define nir_build_load_blend_const_color_r_float _nir_build_load_blend_const_color_r_float -#define nir_load_blend_const_color_r_float nir_build_load_blend_const_color_r_float -#define nir_build_load_blend_const_color_rgba _nir_build_load_blend_const_color_rgba -#define nir_load_blend_const_color_rgba nir_build_load_blend_const_color_rgba -#define nir_build_load_blend_const_color_rgba8888_unorm _nir_build_load_blend_const_color_rgba8888_unorm -#define nir_load_blend_const_color_rgba8888_unorm nir_build_load_blend_const_color_rgba8888_unorm -#define nir_build_load_btd_global_arg_addr_intel _nir_build_load_btd_global_arg_addr_intel -#define nir_load_btd_global_arg_addr_intel nir_build_load_btd_global_arg_addr_intel -#define nir_build_load_btd_local_arg_addr_intel _nir_build_load_btd_local_arg_addr_intel -#define nir_load_btd_local_arg_addr_intel nir_build_load_btd_local_arg_addr_intel -#define nir_build_load_btd_resume_sbt_addr_intel _nir_build_load_btd_resume_sbt_addr_intel -#define nir_load_btd_resume_sbt_addr_intel nir_build_load_btd_resume_sbt_addr_intel -#define nir_build_load_btd_shader_type_intel _nir_build_load_btd_shader_type_intel -#define nir_load_btd_shader_type_intel nir_build_load_btd_shader_type_intel -#define nir_build_load_btd_stack_id_intel _nir_build_load_btd_stack_id_intel -#define nir_load_btd_stack_id_intel nir_build_load_btd_stack_id_intel -#ifdef __cplusplus -#define nir_build_load_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_load_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, _nir_load_buffer_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_load_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_load_buffer_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_buffer_amd nir_build_load_buffer_amd -#define nir_build_load_callable_sbt_addr_intel _nir_build_load_callable_sbt_addr_intel -#define nir_load_callable_sbt_addr_intel nir_build_load_callable_sbt_addr_intel -#define nir_build_load_callable_sbt_stride_intel _nir_build_load_callable_sbt_stride_intel -#define nir_load_callable_sbt_stride_intel nir_build_load_callable_sbt_stride_intel -#define nir_build_load_clamp_vertex_color_amd _nir_build_load_clamp_vertex_color_amd -#define nir_load_clamp_vertex_color_amd nir_build_load_clamp_vertex_color_amd -#define nir_build_load_clip_half_line_width_amd _nir_build_load_clip_half_line_width_amd -#define nir_load_clip_half_line_width_amd nir_build_load_clip_half_line_width_amd -#define nir_build_load_color0 _nir_build_load_color0 -#define nir_load_color0 nir_build_load_color0 -#define nir_build_load_color1 _nir_build_load_color1 -#define nir_load_color1 nir_build_load_color1 -#ifdef __cplusplus -#define nir_build_load_constant(build, num_components, bit_size, src0, ...) \ -_nir_build_load_constant(build, num_components, bit_size, src0, _nir_load_constant_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_constant(build, num_components, bit_size, src0, ...) \ -_nir_build_load_constant(build, num_components, bit_size, src0, (struct _nir_load_constant_indices){0, __VA_ARGS__}) -#endif -#define nir_load_constant nir_build_load_constant -#ifdef __cplusplus -#define nir_build_load_constant_agx(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_constant_agx(build, num_components, bit_size, src0, src1, _nir_load_constant_agx_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_constant_agx(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_constant_agx(build, num_components, bit_size, src0, src1, (struct _nir_load_constant_agx_indices){0, __VA_ARGS__}) -#endif -#define nir_load_constant_agx nir_build_load_constant_agx -#define nir_build_load_constant_base_ptr _nir_build_load_constant_base_ptr -#define nir_load_constant_base_ptr nir_build_load_constant_base_ptr -#ifdef __cplusplus -#define nir_build_load_converted_output_pan(build, num_components, bit_size, src0, ...) \ -_nir_build_load_converted_output_pan(build, num_components, bit_size, src0, _nir_load_converted_output_pan_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_converted_output_pan(build, num_components, bit_size, src0, ...) \ -_nir_build_load_converted_output_pan(build, num_components, bit_size, src0, (struct _nir_load_converted_output_pan_indices){0, __VA_ARGS__}) -#endif -#define nir_load_converted_output_pan nir_build_load_converted_output_pan -#define nir_build_load_coverage_mask_pan _nir_build_load_coverage_mask_pan -#define nir_load_coverage_mask_pan nir_build_load_coverage_mask_pan -#define nir_build_load_cull_any_enabled_amd _nir_build_load_cull_any_enabled_amd -#define nir_load_cull_any_enabled_amd nir_build_load_cull_any_enabled_amd -#define nir_build_load_cull_back_face_enabled_amd _nir_build_load_cull_back_face_enabled_amd -#define nir_load_cull_back_face_enabled_amd nir_build_load_cull_back_face_enabled_amd -#define nir_build_load_cull_ccw_amd _nir_build_load_cull_ccw_amd -#define nir_load_cull_ccw_amd nir_build_load_cull_ccw_amd -#define nir_build_load_cull_front_face_enabled_amd _nir_build_load_cull_front_face_enabled_amd -#define nir_load_cull_front_face_enabled_amd nir_build_load_cull_front_face_enabled_amd -#define nir_build_load_cull_mask _nir_build_load_cull_mask -#define nir_load_cull_mask nir_build_load_cull_mask -#define nir_build_load_cull_mask_and_flags_amd _nir_build_load_cull_mask_and_flags_amd -#define nir_load_cull_mask_and_flags_amd nir_build_load_cull_mask_and_flags_amd -#define nir_build_load_cull_small_prim_precision_amd _nir_build_load_cull_small_prim_precision_amd -#define nir_load_cull_small_prim_precision_amd nir_build_load_cull_small_prim_precision_amd -#define nir_build_load_cull_small_primitives_enabled_amd _nir_build_load_cull_small_primitives_enabled_amd -#define nir_load_cull_small_primitives_enabled_amd nir_build_load_cull_small_primitives_enabled_amd -#ifdef __cplusplus -#define nir_build_load_deref(build, num_components, bit_size, src0, ...) \ -_nir_build_load_deref(build, num_components, bit_size, src0, _nir_load_deref_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_deref(build, num_components, bit_size, src0, ...) \ -_nir_build_load_deref(build, num_components, bit_size, src0, (struct _nir_load_deref_indices){0, __VA_ARGS__}) -#endif -#define nir_load_deref nir_build_load_deref -#ifdef __cplusplus -#define nir_build_load_deref_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_deref_block_intel(build, num_components, bit_size, src0, _nir_load_deref_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_deref_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_deref_block_intel(build, num_components, bit_size, src0, (struct _nir_load_deref_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_deref_block_intel nir_build_load_deref_block_intel -#define nir_build_load_desc_set_address_intel _nir_build_load_desc_set_address_intel -#define nir_load_desc_set_address_intel nir_build_load_desc_set_address_intel -#define nir_build_load_draw_id _nir_build_load_draw_id -#define nir_load_draw_id nir_build_load_draw_id -#define nir_build_load_esgs_vertex_stride_amd _nir_build_load_esgs_vertex_stride_amd -#define nir_load_esgs_vertex_stride_amd nir_build_load_esgs_vertex_stride_amd -#define nir_build_load_fb_layers_v3d _nir_build_load_fb_layers_v3d -#define nir_load_fb_layers_v3d nir_build_load_fb_layers_v3d -#define nir_build_load_first_vertex _nir_build_load_first_vertex -#define nir_load_first_vertex nir_build_load_first_vertex -#define nir_build_load_force_vrs_rates_amd _nir_build_load_force_vrs_rates_amd -#define nir_load_force_vrs_rates_amd nir_build_load_force_vrs_rates_amd -#define nir_build_load_frag_coord _nir_build_load_frag_coord -#define nir_load_frag_coord nir_build_load_frag_coord -#define nir_build_load_frag_invocation_count _nir_build_load_frag_invocation_count -#define nir_load_frag_invocation_count nir_build_load_frag_invocation_count -#define nir_build_load_frag_shading_rate _nir_build_load_frag_shading_rate -#define nir_load_frag_shading_rate nir_build_load_frag_shading_rate -#define nir_build_load_frag_size _nir_build_load_frag_size -#define nir_load_frag_size nir_build_load_frag_size -#define nir_build_load_front_face _nir_build_load_front_face -#define nir_load_front_face nir_build_load_front_face -#ifdef __cplusplus -#define nir_build_load_fs_input_interp_deltas(build, bit_size, src0, ...) \ -_nir_build_load_fs_input_interp_deltas(build, bit_size, src0, _nir_load_fs_input_interp_deltas_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_fs_input_interp_deltas(build, bit_size, src0, ...) \ -_nir_build_load_fs_input_interp_deltas(build, bit_size, src0, (struct _nir_load_fs_input_interp_deltas_indices){0, __VA_ARGS__}) -#endif -#define nir_load_fs_input_interp_deltas nir_build_load_fs_input_interp_deltas -#define nir_build_load_fully_covered _nir_build_load_fully_covered -#define nir_load_fully_covered nir_build_load_fully_covered -#ifdef __cplusplus -#define nir_build_load_global(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global(build, num_components, bit_size, src0, _nir_load_global_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global(build, num_components, bit_size, src0, (struct _nir_load_global_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global nir_build_load_global -#ifdef __cplusplus -#define nir_build_load_global_2x32(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global_2x32(build, num_components, bit_size, src0, _nir_load_global_2x32_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_2x32(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global_2x32(build, num_components, bit_size, src0, (struct _nir_load_global_2x32_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_2x32 nir_build_load_global_2x32 -#ifdef __cplusplus -#define nir_build_load_global_amd(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_global_amd(build, num_components, bit_size, src0, src1, _nir_load_global_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_amd(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_global_amd(build, num_components, bit_size, src0, src1, (struct _nir_load_global_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_amd nir_build_load_global_amd -#define nir_build_load_global_base_ptr _nir_build_load_global_base_ptr -#define nir_load_global_base_ptr nir_build_load_global_base_ptr -#ifdef __cplusplus -#define nir_build_load_global_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global_block_intel(build, num_components, bit_size, src0, _nir_load_global_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global_block_intel(build, num_components, bit_size, src0, (struct _nir_load_global_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_block_intel nir_build_load_global_block_intel -#ifdef __cplusplus -#define nir_build_load_global_const_block_intel(build, num_components, src0, src1, ...) \ -_nir_build_load_global_const_block_intel(build, num_components, src0, src1, _nir_load_global_const_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_const_block_intel(build, num_components, src0, src1, ...) \ -_nir_build_load_global_const_block_intel(build, num_components, src0, src1, (struct _nir_load_global_const_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_const_block_intel nir_build_load_global_const_block_intel -#ifdef __cplusplus -#define nir_build_load_global_constant(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global_constant(build, num_components, bit_size, src0, _nir_load_global_constant_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_constant(build, num_components, bit_size, src0, ...) \ -_nir_build_load_global_constant(build, num_components, bit_size, src0, (struct _nir_load_global_constant_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_constant nir_build_load_global_constant -#ifdef __cplusplus -#define nir_build_load_global_constant_bounded(build, num_components, bit_size, src0, src1, src2, ...) \ -_nir_build_load_global_constant_bounded(build, num_components, bit_size, src0, src1, src2, _nir_load_global_constant_bounded_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_constant_bounded(build, num_components, bit_size, src0, src1, src2, ...) \ -_nir_build_load_global_constant_bounded(build, num_components, bit_size, src0, src1, src2, (struct _nir_load_global_constant_bounded_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_constant_bounded nir_build_load_global_constant_bounded -#ifdef __cplusplus -#define nir_build_load_global_constant_offset(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_global_constant_offset(build, num_components, bit_size, src0, src1, _nir_load_global_constant_offset_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_constant_offset(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_global_constant_offset(build, num_components, bit_size, src0, src1, (struct _nir_load_global_constant_offset_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_constant_offset nir_build_load_global_constant_offset -#define nir_build_load_global_invocation_id _nir_build_load_global_invocation_id -#define nir_load_global_invocation_id nir_build_load_global_invocation_id -#define nir_build_load_global_invocation_id_zero_base _nir_build_load_global_invocation_id_zero_base -#define nir_load_global_invocation_id_zero_base nir_build_load_global_invocation_id_zero_base -#define nir_build_load_global_invocation_index _nir_build_load_global_invocation_index -#define nir_load_global_invocation_index nir_build_load_global_invocation_index -#ifdef __cplusplus -#define nir_build_load_global_ir3(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_global_ir3(build, num_components, bit_size, src0, src1, _nir_load_global_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_global_ir3(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_global_ir3(build, num_components, bit_size, src0, src1, (struct _nir_load_global_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_load_global_ir3 nir_build_load_global_ir3 -#define nir_build_load_gs_header_ir3 _nir_build_load_gs_header_ir3 -#define nir_load_gs_header_ir3 nir_build_load_gs_header_ir3 -#ifdef __cplusplus -#define nir_build_load_gs_vertex_offset_amd(build, ...) \ -_nir_build_load_gs_vertex_offset_amd(build, _nir_load_gs_vertex_offset_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_gs_vertex_offset_amd(build, ...) \ -_nir_build_load_gs_vertex_offset_amd(build, (struct _nir_load_gs_vertex_offset_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_gs_vertex_offset_amd nir_build_load_gs_vertex_offset_amd -#define nir_build_load_helper_invocation _nir_build_load_helper_invocation -#define nir_load_helper_invocation nir_build_load_helper_invocation -#ifdef __cplusplus -#define nir_build_load_hit_attrib_amd(build, ...) \ -_nir_build_load_hit_attrib_amd(build, _nir_load_hit_attrib_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_hit_attrib_amd(build, ...) \ -_nir_build_load_hit_attrib_amd(build, (struct _nir_load_hit_attrib_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_hit_attrib_amd nir_build_load_hit_attrib_amd -#define nir_build_load_hs_out_patch_data_offset_amd _nir_build_load_hs_out_patch_data_offset_amd -#define nir_load_hs_out_patch_data_offset_amd nir_build_load_hs_out_patch_data_offset_amd -#define nir_build_load_hs_patch_stride_ir3 _nir_build_load_hs_patch_stride_ir3 -#define nir_load_hs_patch_stride_ir3 nir_build_load_hs_patch_stride_ir3 -#define nir_build_load_initial_edgeflags_amd _nir_build_load_initial_edgeflags_amd -#define nir_load_initial_edgeflags_amd nir_build_load_initial_edgeflags_amd -#ifdef __cplusplus -#define nir_build_load_input(build, num_components, bit_size, src0, ...) \ -_nir_build_load_input(build, num_components, bit_size, src0, _nir_load_input_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_input(build, num_components, bit_size, src0, ...) \ -_nir_build_load_input(build, num_components, bit_size, src0, (struct _nir_load_input_indices){0, __VA_ARGS__}) -#endif -#define nir_load_input nir_build_load_input -#ifdef __cplusplus -#define nir_build_load_input_vertex(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_input_vertex(build, num_components, bit_size, src0, src1, _nir_load_input_vertex_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_input_vertex(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_input_vertex(build, num_components, bit_size, src0, src1, (struct _nir_load_input_vertex_indices){0, __VA_ARGS__}) -#endif -#define nir_load_input_vertex nir_build_load_input_vertex -#define nir_build_load_instance_id _nir_build_load_instance_id -#define nir_load_instance_id nir_build_load_instance_id -#ifdef __cplusplus -#define nir_build_load_interpolated_input(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_interpolated_input(build, num_components, bit_size, src0, src1, _nir_load_interpolated_input_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_interpolated_input(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_interpolated_input(build, num_components, bit_size, src0, src1, (struct _nir_load_interpolated_input_indices){0, __VA_ARGS__}) -#endif -#define nir_load_interpolated_input nir_build_load_interpolated_input -#define nir_build_load_intersection_opaque_amd _nir_build_load_intersection_opaque_amd -#define nir_load_intersection_opaque_amd nir_build_load_intersection_opaque_amd -#define nir_build_load_invocation_id _nir_build_load_invocation_id -#define nir_load_invocation_id nir_build_load_invocation_id -#define nir_build_load_is_indexed_draw _nir_build_load_is_indexed_draw -#define nir_load_is_indexed_draw nir_build_load_is_indexed_draw -#ifdef __cplusplus -#define nir_build_load_kernel_input(build, num_components, bit_size, src0, ...) \ -_nir_build_load_kernel_input(build, num_components, bit_size, src0, _nir_load_kernel_input_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_kernel_input(build, num_components, bit_size, src0, ...) \ -_nir_build_load_kernel_input(build, num_components, bit_size, src0, (struct _nir_load_kernel_input_indices){0, __VA_ARGS__}) -#endif -#define nir_load_kernel_input nir_build_load_kernel_input -#define nir_build_load_layer_id _nir_build_load_layer_id -#define nir_load_layer_id nir_build_load_layer_id -#define nir_build_load_lds_ngg_gs_out_vertex_base_amd _nir_build_load_lds_ngg_gs_out_vertex_base_amd -#define nir_load_lds_ngg_gs_out_vertex_base_amd nir_build_load_lds_ngg_gs_out_vertex_base_amd -#define nir_build_load_lds_ngg_scratch_base_amd _nir_build_load_lds_ngg_scratch_base_amd -#define nir_load_lds_ngg_scratch_base_amd nir_build_load_lds_ngg_scratch_base_amd -#define nir_build_load_leaf_opaque_intel _nir_build_load_leaf_opaque_intel -#define nir_load_leaf_opaque_intel nir_build_load_leaf_opaque_intel -#define nir_build_load_leaf_procedural_intel _nir_build_load_leaf_procedural_intel -#define nir_load_leaf_procedural_intel nir_build_load_leaf_procedural_intel -#define nir_build_load_line_coord _nir_build_load_line_coord -#define nir_load_line_coord nir_build_load_line_coord -#define nir_build_load_line_width _nir_build_load_line_width -#define nir_load_line_width nir_build_load_line_width -#define nir_build_load_local_invocation_id _nir_build_load_local_invocation_id -#define nir_load_local_invocation_id nir_build_load_local_invocation_id -#define nir_build_load_local_invocation_index _nir_build_load_local_invocation_index -#define nir_load_local_invocation_index nir_build_load_local_invocation_index -#ifdef __cplusplus -#define nir_build_load_local_pixel_agx(build, num_components, bit_size, src0, ...) \ -_nir_build_load_local_pixel_agx(build, num_components, bit_size, src0, _nir_load_local_pixel_agx_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_local_pixel_agx(build, num_components, bit_size, src0, ...) \ -_nir_build_load_local_pixel_agx(build, num_components, bit_size, src0, (struct _nir_load_local_pixel_agx_indices){0, __VA_ARGS__}) -#endif -#define nir_load_local_pixel_agx nir_build_load_local_pixel_agx -#define nir_build_load_local_shared_r600 _nir_build_load_local_shared_r600 -#define nir_load_local_shared_r600 nir_build_load_local_shared_r600 -#define nir_build_load_lshs_vertex_stride_amd _nir_build_load_lshs_vertex_stride_amd -#define nir_load_lshs_vertex_stride_amd nir_build_load_lshs_vertex_stride_amd -#define nir_build_load_merged_wave_info_amd _nir_build_load_merged_wave_info_amd -#define nir_load_merged_wave_info_amd nir_build_load_merged_wave_info_amd -#ifdef __cplusplus -#define nir_build_load_mesh_inline_data_intel(build, bit_size, ...) \ -_nir_build_load_mesh_inline_data_intel(build, bit_size, _nir_load_mesh_inline_data_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_mesh_inline_data_intel(build, bit_size, ...) \ -_nir_build_load_mesh_inline_data_intel(build, bit_size, (struct _nir_load_mesh_inline_data_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_mesh_inline_data_intel nir_build_load_mesh_inline_data_intel -#define nir_build_load_mesh_view_count _nir_build_load_mesh_view_count -#define nir_load_mesh_view_count nir_build_load_mesh_view_count -#ifdef __cplusplus -#define nir_build_load_mesh_view_indices(build, num_components, bit_size, src0, ...) \ -_nir_build_load_mesh_view_indices(build, num_components, bit_size, src0, _nir_load_mesh_view_indices_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_mesh_view_indices(build, num_components, bit_size, src0, ...) \ -_nir_build_load_mesh_view_indices(build, num_components, bit_size, src0, (struct _nir_load_mesh_view_indices_indices){0, __VA_ARGS__}) -#endif -#define nir_load_mesh_view_indices nir_build_load_mesh_view_indices -#define nir_build_load_multisampled_pan _nir_build_load_multisampled_pan -#define nir_load_multisampled_pan nir_build_load_multisampled_pan -#define nir_build_load_num_subgroups _nir_build_load_num_subgroups -#define nir_load_num_subgroups nir_build_load_num_subgroups -#define nir_build_load_num_vertices _nir_build_load_num_vertices -#define nir_load_num_vertices nir_build_load_num_vertices -#define nir_build_load_num_vertices_per_primitive_amd _nir_build_load_num_vertices_per_primitive_amd -#define nir_load_num_vertices_per_primitive_amd nir_build_load_num_vertices_per_primitive_amd -#define nir_build_load_num_workgroups _nir_build_load_num_workgroups -#define nir_load_num_workgroups nir_build_load_num_workgroups -#define nir_build_load_ordered_id_amd _nir_build_load_ordered_id_amd -#define nir_load_ordered_id_amd nir_build_load_ordered_id_amd -#ifdef __cplusplus -#define nir_build_load_output(build, num_components, bit_size, src0, ...) \ -_nir_build_load_output(build, num_components, bit_size, src0, _nir_load_output_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_output(build, num_components, bit_size, src0, ...) \ -_nir_build_load_output(build, num_components, bit_size, src0, (struct _nir_load_output_indices){0, __VA_ARGS__}) -#endif -#define nir_load_output nir_build_load_output -#define nir_build_load_packed_passthrough_primitive_amd _nir_build_load_packed_passthrough_primitive_amd -#define nir_load_packed_passthrough_primitive_amd nir_build_load_packed_passthrough_primitive_amd -#ifdef __cplusplus -#define nir_build_load_param(build, num_components, bit_size, ...) \ -_nir_build_load_param(build, num_components, bit_size, _nir_load_param_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_param(build, num_components, bit_size, ...) \ -_nir_build_load_param(build, num_components, bit_size, (struct _nir_load_param_indices){0, __VA_ARGS__}) -#endif -#define nir_load_param nir_build_load_param -#define nir_build_load_patch_vertices_in _nir_build_load_patch_vertices_in -#define nir_load_patch_vertices_in nir_build_load_patch_vertices_in -#ifdef __cplusplus -#define nir_build_load_per_primitive_output(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_per_primitive_output(build, num_components, bit_size, src0, src1, _nir_load_per_primitive_output_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_per_primitive_output(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_per_primitive_output(build, num_components, bit_size, src0, src1, (struct _nir_load_per_primitive_output_indices){0, __VA_ARGS__}) -#endif -#define nir_load_per_primitive_output nir_build_load_per_primitive_output -#ifdef __cplusplus -#define nir_build_load_per_vertex_input(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_per_vertex_input(build, num_components, bit_size, src0, src1, _nir_load_per_vertex_input_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_per_vertex_input(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_per_vertex_input(build, num_components, bit_size, src0, src1, (struct _nir_load_per_vertex_input_indices){0, __VA_ARGS__}) -#endif -#define nir_load_per_vertex_input nir_build_load_per_vertex_input -#ifdef __cplusplus -#define nir_build_load_per_vertex_output(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_per_vertex_output(build, num_components, bit_size, src0, src1, _nir_load_per_vertex_output_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_per_vertex_output(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_per_vertex_output(build, num_components, bit_size, src0, src1, (struct _nir_load_per_vertex_output_indices){0, __VA_ARGS__}) -#endif -#define nir_load_per_vertex_output nir_build_load_per_vertex_output -#define nir_build_load_persp_center_rhw_ir3 _nir_build_load_persp_center_rhw_ir3 -#define nir_load_persp_center_rhw_ir3 nir_build_load_persp_center_rhw_ir3 -#define nir_build_load_pipeline_stat_query_enabled_amd _nir_build_load_pipeline_stat_query_enabled_amd -#define nir_load_pipeline_stat_query_enabled_amd nir_build_load_pipeline_stat_query_enabled_amd -#define nir_build_load_point_coord _nir_build_load_point_coord -#define nir_load_point_coord nir_build_load_point_coord -#define nir_build_load_point_coord_maybe_flipped _nir_build_load_point_coord_maybe_flipped -#define nir_load_point_coord_maybe_flipped nir_build_load_point_coord_maybe_flipped -#ifdef __cplusplus -#define nir_build_load_preamble(build, num_components, bit_size, ...) \ -_nir_build_load_preamble(build, num_components, bit_size, _nir_load_preamble_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_preamble(build, num_components, bit_size, ...) \ -_nir_build_load_preamble(build, num_components, bit_size, (struct _nir_load_preamble_indices){0, __VA_ARGS__}) -#endif -#define nir_load_preamble nir_build_load_preamble -#define nir_build_load_prim_gen_query_enabled_amd _nir_build_load_prim_gen_query_enabled_amd -#define nir_load_prim_gen_query_enabled_amd nir_build_load_prim_gen_query_enabled_amd -#define nir_build_load_prim_xfb_query_enabled_amd _nir_build_load_prim_xfb_query_enabled_amd -#define nir_load_prim_xfb_query_enabled_amd nir_build_load_prim_xfb_query_enabled_amd -#define nir_build_load_primitive_id _nir_build_load_primitive_id -#define nir_load_primitive_id nir_build_load_primitive_id -#ifdef __cplusplus -#define nir_build_load_primitive_location_ir3(build, ...) \ -_nir_build_load_primitive_location_ir3(build, _nir_load_primitive_location_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_primitive_location_ir3(build, ...) \ -_nir_build_load_primitive_location_ir3(build, (struct _nir_load_primitive_location_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_load_primitive_location_ir3 nir_build_load_primitive_location_ir3 -#define nir_build_load_printf_buffer_address _nir_build_load_printf_buffer_address -#define nir_load_printf_buffer_address nir_build_load_printf_buffer_address -#define nir_build_load_provoking_vtx_in_prim_amd _nir_build_load_provoking_vtx_in_prim_amd -#define nir_load_provoking_vtx_in_prim_amd nir_build_load_provoking_vtx_in_prim_amd -#define nir_build_load_ptr_dxil _nir_build_load_ptr_dxil -#define nir_load_ptr_dxil nir_build_load_ptr_dxil -#ifdef __cplusplus -#define nir_build_load_push_constant(build, num_components, bit_size, src0, ...) \ -_nir_build_load_push_constant(build, num_components, bit_size, src0, _nir_load_push_constant_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_push_constant(build, num_components, bit_size, src0, ...) \ -_nir_build_load_push_constant(build, num_components, bit_size, src0, (struct _nir_load_push_constant_indices){0, __VA_ARGS__}) -#endif -#define nir_load_push_constant nir_build_load_push_constant -#define nir_build_load_rasterization_samples_amd _nir_build_load_rasterization_samples_amd -#define nir_load_rasterization_samples_amd nir_build_load_rasterization_samples_amd -#ifdef __cplusplus -#define nir_build_load_raw_output_pan(build, num_components, bit_size, src0, ...) \ -_nir_build_load_raw_output_pan(build, num_components, bit_size, src0, _nir_load_raw_output_pan_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_raw_output_pan(build, num_components, bit_size, src0, ...) \ -_nir_build_load_raw_output_pan(build, num_components, bit_size, src0, (struct _nir_load_raw_output_pan_indices){0, __VA_ARGS__}) -#endif -#define nir_load_raw_output_pan nir_build_load_raw_output_pan -#define nir_build_load_ray_base_mem_addr_intel _nir_build_load_ray_base_mem_addr_intel -#define nir_load_ray_base_mem_addr_intel nir_build_load_ray_base_mem_addr_intel -#define nir_build_load_ray_flags _nir_build_load_ray_flags -#define nir_load_ray_flags nir_build_load_ray_flags -#define nir_build_load_ray_geometry_index _nir_build_load_ray_geometry_index -#define nir_load_ray_geometry_index nir_build_load_ray_geometry_index -#define nir_build_load_ray_hit_kind _nir_build_load_ray_hit_kind -#define nir_load_ray_hit_kind nir_build_load_ray_hit_kind -#define nir_build_load_ray_hit_sbt_addr_intel _nir_build_load_ray_hit_sbt_addr_intel -#define nir_load_ray_hit_sbt_addr_intel nir_build_load_ray_hit_sbt_addr_intel -#define nir_build_load_ray_hit_sbt_stride_intel _nir_build_load_ray_hit_sbt_stride_intel -#define nir_load_ray_hit_sbt_stride_intel nir_build_load_ray_hit_sbt_stride_intel -#define nir_build_load_ray_hw_stack_size_intel _nir_build_load_ray_hw_stack_size_intel -#define nir_load_ray_hw_stack_size_intel nir_build_load_ray_hw_stack_size_intel -#define nir_build_load_ray_instance_custom_index _nir_build_load_ray_instance_custom_index -#define nir_load_ray_instance_custom_index nir_build_load_ray_instance_custom_index -#define nir_build_load_ray_launch_id _nir_build_load_ray_launch_id -#define nir_load_ray_launch_id nir_build_load_ray_launch_id -#define nir_build_load_ray_launch_size _nir_build_load_ray_launch_size -#define nir_load_ray_launch_size nir_build_load_ray_launch_size -#define nir_build_load_ray_launch_size_addr_amd _nir_build_load_ray_launch_size_addr_amd -#define nir_load_ray_launch_size_addr_amd nir_build_load_ray_launch_size_addr_amd -#define nir_build_load_ray_miss_sbt_addr_intel _nir_build_load_ray_miss_sbt_addr_intel -#define nir_load_ray_miss_sbt_addr_intel nir_build_load_ray_miss_sbt_addr_intel -#define nir_build_load_ray_miss_sbt_stride_intel _nir_build_load_ray_miss_sbt_stride_intel -#define nir_load_ray_miss_sbt_stride_intel nir_build_load_ray_miss_sbt_stride_intel -#define nir_build_load_ray_num_dss_rt_stacks_intel _nir_build_load_ray_num_dss_rt_stacks_intel -#define nir_load_ray_num_dss_rt_stacks_intel nir_build_load_ray_num_dss_rt_stacks_intel -#define nir_build_load_ray_object_direction _nir_build_load_ray_object_direction -#define nir_load_ray_object_direction nir_build_load_ray_object_direction -#define nir_build_load_ray_object_origin _nir_build_load_ray_object_origin -#define nir_load_ray_object_origin nir_build_load_ray_object_origin -#ifdef __cplusplus -#define nir_build_load_ray_object_to_world(build, ...) \ -_nir_build_load_ray_object_to_world(build, _nir_load_ray_object_to_world_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ray_object_to_world(build, ...) \ -_nir_build_load_ray_object_to_world(build, (struct _nir_load_ray_object_to_world_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ray_object_to_world nir_build_load_ray_object_to_world -#define nir_build_load_ray_query_global_intel _nir_build_load_ray_query_global_intel -#define nir_load_ray_query_global_intel nir_build_load_ray_query_global_intel -#define nir_build_load_ray_sw_stack_size_intel _nir_build_load_ray_sw_stack_size_intel -#define nir_load_ray_sw_stack_size_intel nir_build_load_ray_sw_stack_size_intel -#define nir_build_load_ray_t_max _nir_build_load_ray_t_max -#define nir_load_ray_t_max nir_build_load_ray_t_max -#define nir_build_load_ray_t_min _nir_build_load_ray_t_min -#define nir_load_ray_t_min nir_build_load_ray_t_min -#define nir_build_load_ray_world_direction _nir_build_load_ray_world_direction -#define nir_load_ray_world_direction nir_build_load_ray_world_direction -#define nir_build_load_ray_world_origin _nir_build_load_ray_world_origin -#define nir_load_ray_world_origin nir_build_load_ray_world_origin -#ifdef __cplusplus -#define nir_build_load_ray_world_to_object(build, ...) \ -_nir_build_load_ray_world_to_object(build, _nir_load_ray_world_to_object_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ray_world_to_object(build, ...) \ -_nir_build_load_ray_world_to_object(build, (struct _nir_load_ray_world_to_object_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ray_world_to_object nir_build_load_ray_world_to_object -#define nir_build_load_rel_patch_id_ir3 _nir_build_load_rel_patch_id_ir3 -#define nir_load_rel_patch_id_ir3 nir_build_load_rel_patch_id_ir3 -#ifdef __cplusplus -#define nir_build_load_reloc_const_intel(build, ...) \ -_nir_build_load_reloc_const_intel(build, _nir_load_reloc_const_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_reloc_const_intel(build, ...) \ -_nir_build_load_reloc_const_intel(build, (struct _nir_load_reloc_const_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_reloc_const_intel nir_build_load_reloc_const_intel -#define nir_build_load_ring_attr_amd _nir_build_load_ring_attr_amd -#define nir_load_ring_attr_amd nir_build_load_ring_attr_amd -#define nir_build_load_ring_attr_offset_amd _nir_build_load_ring_attr_offset_amd -#define nir_load_ring_attr_offset_amd nir_build_load_ring_attr_offset_amd -#define nir_build_load_ring_es2gs_offset_amd _nir_build_load_ring_es2gs_offset_amd -#define nir_load_ring_es2gs_offset_amd nir_build_load_ring_es2gs_offset_amd -#define nir_build_load_ring_esgs_amd _nir_build_load_ring_esgs_amd -#define nir_load_ring_esgs_amd nir_build_load_ring_esgs_amd -#define nir_build_load_ring_gs2vs_offset_amd _nir_build_load_ring_gs2vs_offset_amd -#define nir_load_ring_gs2vs_offset_amd nir_build_load_ring_gs2vs_offset_amd -#ifdef __cplusplus -#define nir_build_load_ring_gsvs_amd(build, ...) \ -_nir_build_load_ring_gsvs_amd(build, _nir_load_ring_gsvs_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ring_gsvs_amd(build, ...) \ -_nir_build_load_ring_gsvs_amd(build, (struct _nir_load_ring_gsvs_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ring_gsvs_amd nir_build_load_ring_gsvs_amd -#define nir_build_load_ring_mesh_scratch_amd _nir_build_load_ring_mesh_scratch_amd -#define nir_load_ring_mesh_scratch_amd nir_build_load_ring_mesh_scratch_amd -#define nir_build_load_ring_mesh_scratch_offset_amd _nir_build_load_ring_mesh_scratch_offset_amd -#define nir_load_ring_mesh_scratch_offset_amd nir_build_load_ring_mesh_scratch_offset_amd -#define nir_build_load_ring_task_draw_amd _nir_build_load_ring_task_draw_amd -#define nir_load_ring_task_draw_amd nir_build_load_ring_task_draw_amd -#define nir_build_load_ring_task_payload_amd _nir_build_load_ring_task_payload_amd -#define nir_load_ring_task_payload_amd nir_build_load_ring_task_payload_amd -#define nir_build_load_ring_tess_factors_amd _nir_build_load_ring_tess_factors_amd -#define nir_load_ring_tess_factors_amd nir_build_load_ring_tess_factors_amd -#define nir_build_load_ring_tess_factors_offset_amd _nir_build_load_ring_tess_factors_offset_amd -#define nir_load_ring_tess_factors_offset_amd nir_build_load_ring_tess_factors_offset_amd -#define nir_build_load_ring_tess_offchip_amd _nir_build_load_ring_tess_offchip_amd -#define nir_load_ring_tess_offchip_amd nir_build_load_ring_tess_offchip_amd -#define nir_build_load_ring_tess_offchip_offset_amd _nir_build_load_ring_tess_offchip_offset_amd -#define nir_load_ring_tess_offchip_offset_amd nir_build_load_ring_tess_offchip_offset_amd -#define nir_build_load_rt_arg_scratch_offset_amd _nir_build_load_rt_arg_scratch_offset_amd -#define nir_load_rt_arg_scratch_offset_amd nir_build_load_rt_arg_scratch_offset_amd -#ifdef __cplusplus -#define nir_build_load_rt_conversion_pan(build, ...) \ -_nir_build_load_rt_conversion_pan(build, _nir_load_rt_conversion_pan_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_rt_conversion_pan(build, ...) \ -_nir_build_load_rt_conversion_pan(build, (struct _nir_load_rt_conversion_pan_indices){0, __VA_ARGS__}) -#endif -#define nir_load_rt_conversion_pan nir_build_load_rt_conversion_pan -#define nir_build_load_rt_dynamic_callable_stack_base_amd _nir_build_load_rt_dynamic_callable_stack_base_amd -#define nir_load_rt_dynamic_callable_stack_base_amd nir_build_load_rt_dynamic_callable_stack_base_amd -#define nir_build_load_sample_id _nir_build_load_sample_id -#define nir_load_sample_id nir_build_load_sample_id -#define nir_build_load_sample_id_no_per_sample _nir_build_load_sample_id_no_per_sample -#define nir_load_sample_id_no_per_sample nir_build_load_sample_id_no_per_sample -#define nir_build_load_sample_mask_in _nir_build_load_sample_mask_in -#define nir_load_sample_mask_in nir_build_load_sample_mask_in -#define nir_build_load_sample_pos _nir_build_load_sample_pos -#define nir_load_sample_pos nir_build_load_sample_pos -#define nir_build_load_sample_pos_from_id _nir_build_load_sample_pos_from_id -#define nir_load_sample_pos_from_id nir_build_load_sample_pos_from_id -#define nir_build_load_sample_pos_or_center _nir_build_load_sample_pos_or_center -#define nir_load_sample_pos_or_center nir_build_load_sample_pos_or_center -#define nir_build_load_sample_positions_amd _nir_build_load_sample_positions_amd -#define nir_load_sample_positions_amd nir_build_load_sample_positions_amd -#define nir_build_load_sample_positions_pan _nir_build_load_sample_positions_pan -#define nir_load_sample_positions_pan nir_build_load_sample_positions_pan -#define nir_build_load_sampler_lod_parameters_pan _nir_build_load_sampler_lod_parameters_pan -#define nir_load_sampler_lod_parameters_pan nir_build_load_sampler_lod_parameters_pan -#define nir_build_load_sbt_base_amd _nir_build_load_sbt_base_amd -#define nir_load_sbt_base_amd nir_build_load_sbt_base_amd -#define nir_build_load_sbt_offset_amd _nir_build_load_sbt_offset_amd -#define nir_load_sbt_offset_amd nir_build_load_sbt_offset_amd -#define nir_build_load_sbt_stride_amd _nir_build_load_sbt_stride_amd -#define nir_load_sbt_stride_amd nir_build_load_sbt_stride_amd -#ifdef __cplusplus -#define nir_build_load_scalar_arg_amd(build, num_components, ...) \ -_nir_build_load_scalar_arg_amd(build, num_components, _nir_load_scalar_arg_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_scalar_arg_amd(build, num_components, ...) \ -_nir_build_load_scalar_arg_amd(build, num_components, (struct _nir_load_scalar_arg_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_scalar_arg_amd nir_build_load_scalar_arg_amd -#ifdef __cplusplus -#define nir_build_load_scratch(build, num_components, bit_size, src0, ...) \ -_nir_build_load_scratch(build, num_components, bit_size, src0, _nir_load_scratch_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_scratch(build, num_components, bit_size, src0, ...) \ -_nir_build_load_scratch(build, num_components, bit_size, src0, (struct _nir_load_scratch_indices){0, __VA_ARGS__}) -#endif -#define nir_load_scratch nir_build_load_scratch -#ifdef __cplusplus -#define nir_build_load_scratch_base_ptr(build, num_components, bit_size, ...) \ -_nir_build_load_scratch_base_ptr(build, num_components, bit_size, _nir_load_scratch_base_ptr_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_scratch_base_ptr(build, num_components, bit_size, ...) \ -_nir_build_load_scratch_base_ptr(build, num_components, bit_size, (struct _nir_load_scratch_base_ptr_indices){0, __VA_ARGS__}) -#endif -#define nir_load_scratch_base_ptr nir_build_load_scratch_base_ptr -#define nir_build_load_scratch_dxil _nir_build_load_scratch_dxil -#define nir_load_scratch_dxil nir_build_load_scratch_dxil -#define nir_build_load_shader_record_ptr _nir_build_load_shader_record_ptr -#define nir_load_shader_record_ptr nir_build_load_shader_record_ptr -#ifdef __cplusplus -#define nir_build_load_shared(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared(build, num_components, bit_size, src0, _nir_load_shared_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_shared(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared(build, num_components, bit_size, src0, (struct _nir_load_shared_indices){0, __VA_ARGS__}) -#endif -#define nir_load_shared nir_build_load_shared -#ifdef __cplusplus -#define nir_build_load_shared2_amd(build, bit_size, src0, ...) \ -_nir_build_load_shared2_amd(build, bit_size, src0, _nir_load_shared2_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_shared2_amd(build, bit_size, src0, ...) \ -_nir_build_load_shared2_amd(build, bit_size, src0, (struct _nir_load_shared2_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_shared2_amd nir_build_load_shared2_amd -#define nir_build_load_shared_base_ptr _nir_build_load_shared_base_ptr -#define nir_load_shared_base_ptr nir_build_load_shared_base_ptr -#ifdef __cplusplus -#define nir_build_load_shared_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared_block_intel(build, num_components, bit_size, src0, _nir_load_shared_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_shared_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared_block_intel(build, num_components, bit_size, src0, (struct _nir_load_shared_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_shared_block_intel nir_build_load_shared_block_intel -#define nir_build_load_shared_dxil _nir_build_load_shared_dxil -#define nir_load_shared_dxil nir_build_load_shared_dxil -#ifdef __cplusplus -#define nir_build_load_shared_ir3(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared_ir3(build, num_components, bit_size, src0, _nir_load_shared_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_shared_ir3(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared_ir3(build, num_components, bit_size, src0, (struct _nir_load_shared_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_load_shared_ir3 nir_build_load_shared_ir3 -#ifdef __cplusplus -#define nir_build_load_shared_uniform_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared_uniform_block_intel(build, num_components, bit_size, src0, _nir_load_shared_uniform_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_shared_uniform_block_intel(build, num_components, bit_size, src0, ...) \ -_nir_build_load_shared_uniform_block_intel(build, num_components, bit_size, src0, (struct _nir_load_shared_uniform_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_shared_uniform_block_intel nir_build_load_shared_uniform_block_intel -#define nir_build_load_simd_width_intel _nir_build_load_simd_width_intel -#define nir_load_simd_width_intel nir_build_load_simd_width_intel -#ifdef __cplusplus -#define nir_build_load_smem_amd(build, num_components, src0, src1, ...) \ -_nir_build_load_smem_amd(build, num_components, src0, src1, _nir_load_smem_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_smem_amd(build, num_components, src0, src1, ...) \ -_nir_build_load_smem_amd(build, num_components, src0, src1, (struct _nir_load_smem_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_smem_amd nir_build_load_smem_amd -#ifdef __cplusplus -#define nir_build_load_smem_buffer_amd(build, num_components, src0, src1, ...) \ -_nir_build_load_smem_buffer_amd(build, num_components, src0, src1, _nir_load_smem_buffer_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_smem_buffer_amd(build, num_components, src0, src1, ...) \ -_nir_build_load_smem_buffer_amd(build, num_components, src0, src1, (struct _nir_load_smem_buffer_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_smem_buffer_amd nir_build_load_smem_buffer_amd -#ifdef __cplusplus -#define nir_build_load_ssbo(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ssbo(build, num_components, bit_size, src0, src1, _nir_load_ssbo_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ssbo(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ssbo(build, num_components, bit_size, src0, src1, (struct _nir_load_ssbo_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ssbo nir_build_load_ssbo -#define nir_build_load_ssbo_address _nir_build_load_ssbo_address -#define nir_load_ssbo_address nir_build_load_ssbo_address -#ifdef __cplusplus -#define nir_build_load_ssbo_block_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ssbo_block_intel(build, num_components, bit_size, src0, src1, _nir_load_ssbo_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ssbo_block_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ssbo_block_intel(build, num_components, bit_size, src0, src1, (struct _nir_load_ssbo_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ssbo_block_intel nir_build_load_ssbo_block_intel -#ifdef __cplusplus -#define nir_build_load_ssbo_ir3(build, num_components, bit_size, src0, src1, src2, ...) \ -_nir_build_load_ssbo_ir3(build, num_components, bit_size, src0, src1, src2, _nir_load_ssbo_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ssbo_ir3(build, num_components, bit_size, src0, src1, src2, ...) \ -_nir_build_load_ssbo_ir3(build, num_components, bit_size, src0, src1, src2, (struct _nir_load_ssbo_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ssbo_ir3 nir_build_load_ssbo_ir3 -#ifdef __cplusplus -#define nir_build_load_ssbo_uniform_block_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ssbo_uniform_block_intel(build, num_components, bit_size, src0, src1, _nir_load_ssbo_uniform_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ssbo_uniform_block_intel(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ssbo_uniform_block_intel(build, num_components, bit_size, src0, src1, (struct _nir_load_ssbo_uniform_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ssbo_uniform_block_intel nir_build_load_ssbo_uniform_block_intel -#ifdef __cplusplus -#define nir_build_load_stack(build, num_components, bit_size, ...) \ -_nir_build_load_stack(build, num_components, bit_size, _nir_load_stack_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_stack(build, num_components, bit_size, ...) \ -_nir_build_load_stack(build, num_components, bit_size, (struct _nir_load_stack_indices){0, __VA_ARGS__}) -#endif -#define nir_load_stack nir_build_load_stack -#ifdef __cplusplus -#define nir_build_load_streamout_buffer_amd(build, ...) \ -_nir_build_load_streamout_buffer_amd(build, _nir_load_streamout_buffer_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_streamout_buffer_amd(build, ...) \ -_nir_build_load_streamout_buffer_amd(build, (struct _nir_load_streamout_buffer_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_streamout_buffer_amd nir_build_load_streamout_buffer_amd -#define nir_build_load_streamout_config_amd _nir_build_load_streamout_config_amd -#define nir_load_streamout_config_amd nir_build_load_streamout_config_amd -#ifdef __cplusplus -#define nir_build_load_streamout_offset_amd(build, ...) \ -_nir_build_load_streamout_offset_amd(build, _nir_load_streamout_offset_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_streamout_offset_amd(build, ...) \ -_nir_build_load_streamout_offset_amd(build, (struct _nir_load_streamout_offset_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_streamout_offset_amd nir_build_load_streamout_offset_amd -#define nir_build_load_streamout_write_index_amd _nir_build_load_streamout_write_index_amd -#define nir_load_streamout_write_index_amd nir_build_load_streamout_write_index_amd -#define nir_build_load_subgroup_eq_mask _nir_build_load_subgroup_eq_mask -#define nir_load_subgroup_eq_mask nir_build_load_subgroup_eq_mask -#define nir_build_load_subgroup_ge_mask _nir_build_load_subgroup_ge_mask -#define nir_load_subgroup_ge_mask nir_build_load_subgroup_ge_mask -#define nir_build_load_subgroup_gt_mask _nir_build_load_subgroup_gt_mask -#define nir_load_subgroup_gt_mask nir_build_load_subgroup_gt_mask -#define nir_build_load_subgroup_id _nir_build_load_subgroup_id -#define nir_load_subgroup_id nir_build_load_subgroup_id -#define nir_build_load_subgroup_id_shift_ir3 _nir_build_load_subgroup_id_shift_ir3 -#define nir_load_subgroup_id_shift_ir3 nir_build_load_subgroup_id_shift_ir3 -#define nir_build_load_subgroup_invocation _nir_build_load_subgroup_invocation -#define nir_load_subgroup_invocation nir_build_load_subgroup_invocation -#define nir_build_load_subgroup_le_mask _nir_build_load_subgroup_le_mask -#define nir_load_subgroup_le_mask nir_build_load_subgroup_le_mask -#define nir_build_load_subgroup_lt_mask _nir_build_load_subgroup_lt_mask -#define nir_load_subgroup_lt_mask nir_build_load_subgroup_lt_mask -#define nir_build_load_subgroup_size _nir_build_load_subgroup_size -#define nir_load_subgroup_size nir_build_load_subgroup_size -#ifdef __cplusplus -#define nir_build_load_task_payload(build, num_components, bit_size, src0, ...) \ -_nir_build_load_task_payload(build, num_components, bit_size, src0, _nir_load_task_payload_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_task_payload(build, num_components, bit_size, src0, ...) \ -_nir_build_load_task_payload(build, num_components, bit_size, src0, (struct _nir_load_task_payload_indices){0, __VA_ARGS__}) -#endif -#define nir_load_task_payload nir_build_load_task_payload -#define nir_build_load_task_ring_entry_amd _nir_build_load_task_ring_entry_amd -#define nir_load_task_ring_entry_amd nir_build_load_task_ring_entry_amd -#define nir_build_load_tcs_header_ir3 _nir_build_load_tcs_header_ir3 -#define nir_load_tcs_header_ir3 nir_build_load_tcs_header_ir3 -#define nir_build_load_tcs_in_param_base_r600 _nir_build_load_tcs_in_param_base_r600 -#define nir_load_tcs_in_param_base_r600 nir_build_load_tcs_in_param_base_r600 -#define nir_build_load_tcs_num_patches_amd _nir_build_load_tcs_num_patches_amd -#define nir_load_tcs_num_patches_amd nir_build_load_tcs_num_patches_amd -#define nir_build_load_tcs_out_param_base_r600 _nir_build_load_tcs_out_param_base_r600 -#define nir_load_tcs_out_param_base_r600 nir_build_load_tcs_out_param_base_r600 -#define nir_build_load_tcs_rel_patch_id_r600 _nir_build_load_tcs_rel_patch_id_r600 -#define nir_load_tcs_rel_patch_id_r600 nir_build_load_tcs_rel_patch_id_r600 -#define nir_build_load_tcs_tess_factor_base_r600 _nir_build_load_tcs_tess_factor_base_r600 -#define nir_load_tcs_tess_factor_base_r600 nir_build_load_tcs_tess_factor_base_r600 -#define nir_build_load_tess_coord _nir_build_load_tess_coord -#define nir_load_tess_coord nir_build_load_tess_coord -#define nir_build_load_tess_coord_r600 _nir_build_load_tess_coord_r600 -#define nir_load_tess_coord_r600 nir_build_load_tess_coord_r600 -#define nir_build_load_tess_factor_base_ir3 _nir_build_load_tess_factor_base_ir3 -#define nir_load_tess_factor_base_ir3 nir_build_load_tess_factor_base_ir3 -#define nir_build_load_tess_level_inner _nir_build_load_tess_level_inner -#define nir_load_tess_level_inner nir_build_load_tess_level_inner -#define nir_build_load_tess_level_inner_default _nir_build_load_tess_level_inner_default -#define nir_load_tess_level_inner_default nir_build_load_tess_level_inner_default -#define nir_build_load_tess_level_outer _nir_build_load_tess_level_outer -#define nir_load_tess_level_outer nir_build_load_tess_level_outer -#define nir_build_load_tess_level_outer_default _nir_build_load_tess_level_outer_default -#define nir_load_tess_level_outer_default nir_build_load_tess_level_outer_default -#define nir_build_load_tess_param_base_ir3 _nir_build_load_tess_param_base_ir3 -#define nir_load_tess_param_base_ir3 nir_build_load_tess_param_base_ir3 -#define nir_build_load_tess_rel_patch_id_amd _nir_build_load_tess_rel_patch_id_amd -#define nir_load_tess_rel_patch_id_amd nir_build_load_tess_rel_patch_id_amd -#define nir_build_load_texture_base_agx _nir_build_load_texture_base_agx -#define nir_load_texture_base_agx nir_build_load_texture_base_agx -#define nir_build_load_texture_rect_scaling _nir_build_load_texture_rect_scaling -#define nir_load_texture_rect_scaling nir_build_load_texture_rect_scaling -#ifdef __cplusplus -#define nir_build_load_tlb_color_v3d(build, num_components, bit_size, src0, ...) \ -_nir_build_load_tlb_color_v3d(build, num_components, bit_size, src0, _nir_load_tlb_color_v3d_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_tlb_color_v3d(build, num_components, bit_size, src0, ...) \ -_nir_build_load_tlb_color_v3d(build, num_components, bit_size, src0, (struct _nir_load_tlb_color_v3d_indices){0, __VA_ARGS__}) -#endif -#define nir_load_tlb_color_v3d nir_build_load_tlb_color_v3d -#ifdef __cplusplus -#define nir_build_load_topology_id_intel(build, ...) \ -_nir_build_load_topology_id_intel(build, _nir_load_topology_id_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_topology_id_intel(build, ...) \ -_nir_build_load_topology_id_intel(build, (struct _nir_load_topology_id_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_load_topology_id_intel nir_build_load_topology_id_intel -#ifdef __cplusplus -#define nir_build_load_typed_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_load_typed_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, _nir_load_typed_buffer_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_typed_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_load_typed_buffer_amd(build, num_components, bit_size, src0, src1, src2, src3, (struct _nir_load_typed_buffer_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_typed_buffer_amd nir_build_load_typed_buffer_amd -#ifdef __cplusplus -#define nir_build_load_ubo(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ubo(build, num_components, bit_size, src0, src1, _nir_load_ubo_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ubo(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ubo(build, num_components, bit_size, src0, src1, (struct _nir_load_ubo_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ubo nir_build_load_ubo -#define nir_build_load_ubo_base_agx _nir_build_load_ubo_base_agx -#define nir_load_ubo_base_agx nir_build_load_ubo_base_agx -#define nir_build_load_ubo_dxil _nir_build_load_ubo_dxil -#define nir_load_ubo_dxil nir_build_load_ubo_dxil -#ifdef __cplusplus -#define nir_build_load_ubo_vec4(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ubo_vec4(build, num_components, bit_size, src0, src1, _nir_load_ubo_vec4_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_ubo_vec4(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_load_ubo_vec4(build, num_components, bit_size, src0, src1, (struct _nir_load_ubo_vec4_indices){0, __VA_ARGS__}) -#endif -#define nir_load_ubo_vec4 nir_build_load_ubo_vec4 -#ifdef __cplusplus -#define nir_build_load_uniform(build, num_components, bit_size, src0, ...) \ -_nir_build_load_uniform(build, num_components, bit_size, src0, _nir_load_uniform_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_uniform(build, num_components, bit_size, src0, ...) \ -_nir_build_load_uniform(build, num_components, bit_size, src0, (struct _nir_load_uniform_indices){0, __VA_ARGS__}) -#endif -#define nir_load_uniform nir_build_load_uniform -#ifdef __cplusplus -#define nir_build_load_user_clip_plane(build, ...) \ -_nir_build_load_user_clip_plane(build, _nir_load_user_clip_plane_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_user_clip_plane(build, ...) \ -_nir_build_load_user_clip_plane(build, (struct _nir_load_user_clip_plane_indices){0, __VA_ARGS__}) -#endif -#define nir_load_user_clip_plane nir_build_load_user_clip_plane -#define nir_build_load_user_data_amd _nir_build_load_user_data_amd -#define nir_load_user_data_amd nir_build_load_user_data_amd -#define nir_build_load_vbo_base_agx _nir_build_load_vbo_base_agx -#define nir_load_vbo_base_agx nir_build_load_vbo_base_agx -#ifdef __cplusplus -#define nir_build_load_vector_arg_amd(build, num_components, ...) \ -_nir_build_load_vector_arg_amd(build, num_components, _nir_load_vector_arg_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_vector_arg_amd(build, num_components, ...) \ -_nir_build_load_vector_arg_amd(build, num_components, (struct _nir_load_vector_arg_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_load_vector_arg_amd nir_build_load_vector_arg_amd -#define nir_build_load_vertex_id _nir_build_load_vertex_id -#define nir_load_vertex_id nir_build_load_vertex_id -#define nir_build_load_vertex_id_zero_base _nir_build_load_vertex_id_zero_base -#define nir_load_vertex_id_zero_base nir_build_load_vertex_id_zero_base -#define nir_build_load_view_index _nir_build_load_view_index -#define nir_load_view_index nir_build_load_view_index -#define nir_build_load_viewport_offset _nir_build_load_viewport_offset -#define nir_load_viewport_offset nir_build_load_viewport_offset -#define nir_build_load_viewport_scale _nir_build_load_viewport_scale -#define nir_load_viewport_scale nir_build_load_viewport_scale -#define nir_build_load_viewport_x_offset _nir_build_load_viewport_x_offset -#define nir_load_viewport_x_offset nir_build_load_viewport_x_offset -#define nir_build_load_viewport_x_scale _nir_build_load_viewport_x_scale -#define nir_load_viewport_x_scale nir_build_load_viewport_x_scale -#define nir_build_load_viewport_xy_scale_and_offset _nir_build_load_viewport_xy_scale_and_offset -#define nir_load_viewport_xy_scale_and_offset nir_build_load_viewport_xy_scale_and_offset -#define nir_build_load_viewport_y_offset _nir_build_load_viewport_y_offset -#define nir_load_viewport_y_offset nir_build_load_viewport_y_offset -#define nir_build_load_viewport_y_scale _nir_build_load_viewport_y_scale -#define nir_load_viewport_y_scale nir_build_load_viewport_y_scale -#define nir_build_load_viewport_z_offset _nir_build_load_viewport_z_offset -#define nir_load_viewport_z_offset nir_build_load_viewport_z_offset -#define nir_build_load_viewport_z_scale _nir_build_load_viewport_z_scale -#define nir_load_viewport_z_scale nir_build_load_viewport_z_scale -#define nir_build_load_vs_primitive_stride_ir3 _nir_build_load_vs_primitive_stride_ir3 -#define nir_load_vs_primitive_stride_ir3 nir_build_load_vs_primitive_stride_ir3 -#define nir_build_load_vs_vertex_stride_ir3 _nir_build_load_vs_vertex_stride_ir3 -#define nir_load_vs_vertex_stride_ir3 nir_build_load_vs_vertex_stride_ir3 -#ifdef __cplusplus -#define nir_build_load_vulkan_descriptor(build, num_components, bit_size, src0, ...) \ -_nir_build_load_vulkan_descriptor(build, num_components, bit_size, src0, _nir_load_vulkan_descriptor_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_vulkan_descriptor(build, num_components, bit_size, src0, ...) \ -_nir_build_load_vulkan_descriptor(build, num_components, bit_size, src0, (struct _nir_load_vulkan_descriptor_indices){0, __VA_ARGS__}) -#endif -#define nir_load_vulkan_descriptor nir_build_load_vulkan_descriptor -#define nir_build_load_work_dim _nir_build_load_work_dim -#define nir_load_work_dim nir_build_load_work_dim -#define nir_build_load_workgroup_id _nir_build_load_workgroup_id -#define nir_load_workgroup_id nir_build_load_workgroup_id -#define nir_build_load_workgroup_id_zero_base _nir_build_load_workgroup_id_zero_base -#define nir_load_workgroup_id_zero_base nir_build_load_workgroup_id_zero_base -#define nir_build_load_workgroup_index _nir_build_load_workgroup_index -#define nir_load_workgroup_index nir_build_load_workgroup_index -#define nir_build_load_workgroup_num_input_primitives_amd _nir_build_load_workgroup_num_input_primitives_amd -#define nir_load_workgroup_num_input_primitives_amd nir_build_load_workgroup_num_input_primitives_amd -#define nir_build_load_workgroup_num_input_vertices_amd _nir_build_load_workgroup_num_input_vertices_amd -#define nir_load_workgroup_num_input_vertices_amd nir_build_load_workgroup_num_input_vertices_amd -#define nir_build_load_workgroup_size _nir_build_load_workgroup_size -#define nir_load_workgroup_size nir_build_load_workgroup_size -#ifdef __cplusplus -#define nir_build_load_xfb_address(build, bit_size, ...) \ -_nir_build_load_xfb_address(build, bit_size, _nir_load_xfb_address_indices{0, __VA_ARGS__}) -#else -#define nir_build_load_xfb_address(build, bit_size, ...) \ -_nir_build_load_xfb_address(build, bit_size, (struct _nir_load_xfb_address_indices){0, __VA_ARGS__}) -#endif -#define nir_load_xfb_address nir_build_load_xfb_address -#ifdef __cplusplus -#define nir_build_masked_swizzle_amd(build, src0, ...) \ -_nir_build_masked_swizzle_amd(build, src0, _nir_masked_swizzle_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_masked_swizzle_amd(build, src0, ...) \ -_nir_build_masked_swizzle_amd(build, src0, (struct _nir_masked_swizzle_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_masked_swizzle_amd nir_build_masked_swizzle_amd -#define nir_build_mbcnt_amd _nir_build_mbcnt_amd -#define nir_mbcnt_amd nir_build_mbcnt_amd -#ifdef __cplusplus -#define nir_build_memcpy_deref(build, src0, src1, src2, ...) \ -_nir_build_memcpy_deref(build, src0, src1, src2, _nir_memcpy_deref_indices{0, __VA_ARGS__}) -#else -#define nir_build_memcpy_deref(build, src0, src1, src2, ...) \ -_nir_build_memcpy_deref(build, src0, src1, src2, (struct _nir_memcpy_deref_indices){0, __VA_ARGS__}) -#endif -#define nir_memcpy_deref nir_build_memcpy_deref -#define nir_build_memory_barrier _nir_build_memory_barrier -#define nir_memory_barrier nir_build_memory_barrier -#define nir_build_memory_barrier_atomic_counter _nir_build_memory_barrier_atomic_counter -#define nir_memory_barrier_atomic_counter nir_build_memory_barrier_atomic_counter -#define nir_build_memory_barrier_buffer _nir_build_memory_barrier_buffer -#define nir_memory_barrier_buffer nir_build_memory_barrier_buffer -#define nir_build_memory_barrier_image _nir_build_memory_barrier_image -#define nir_memory_barrier_image nir_build_memory_barrier_image -#define nir_build_memory_barrier_shared _nir_build_memory_barrier_shared -#define nir_memory_barrier_shared nir_build_memory_barrier_shared -#define nir_build_memory_barrier_tcs_patch _nir_build_memory_barrier_tcs_patch -#define nir_memory_barrier_tcs_patch nir_build_memory_barrier_tcs_patch -#define nir_build_nop _nir_build_nop -#define nir_nop nir_build_nop -#define nir_build_optimization_barrier_vgpr_amd _nir_build_optimization_barrier_vgpr_amd -#define nir_optimization_barrier_vgpr_amd nir_build_optimization_barrier_vgpr_amd -#ifdef __cplusplus -#define nir_build_ordered_xfb_counter_add_amd(build, src0, src1, ...) \ -_nir_build_ordered_xfb_counter_add_amd(build, src0, src1, _nir_ordered_xfb_counter_add_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_ordered_xfb_counter_add_amd(build, src0, src1, ...) \ -_nir_build_ordered_xfb_counter_add_amd(build, src0, src1, (struct _nir_ordered_xfb_counter_add_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_ordered_xfb_counter_add_amd nir_build_ordered_xfb_counter_add_amd -#define nir_build_overwrite_tes_arguments_amd _nir_build_overwrite_tes_arguments_amd -#define nir_overwrite_tes_arguments_amd nir_build_overwrite_tes_arguments_amd -#define nir_build_overwrite_vs_arguments_amd _nir_build_overwrite_vs_arguments_amd -#define nir_overwrite_vs_arguments_amd nir_build_overwrite_vs_arguments_amd -#define nir_build_preamble_end_ir3 _nir_build_preamble_end_ir3 -#define nir_preamble_end_ir3 nir_build_preamble_end_ir3 -#define nir_build_preamble_start_ir3 _nir_build_preamble_start_ir3 -#define nir_preamble_start_ir3 nir_build_preamble_start_ir3 -#define nir_build_printf _nir_build_printf -#define nir_printf nir_build_printf -#define nir_build_quad_broadcast _nir_build_quad_broadcast -#define nir_quad_broadcast nir_build_quad_broadcast -#define nir_build_quad_swap_diagonal _nir_build_quad_swap_diagonal -#define nir_quad_swap_diagonal nir_build_quad_swap_diagonal -#define nir_build_quad_swap_horizontal _nir_build_quad_swap_horizontal -#define nir_quad_swap_horizontal nir_build_quad_swap_horizontal -#define nir_build_quad_swap_vertical _nir_build_quad_swap_vertical -#define nir_quad_swap_vertical nir_build_quad_swap_vertical -#ifdef __cplusplus -#define nir_build_quad_swizzle_amd(build, src0, ...) \ -_nir_build_quad_swizzle_amd(build, src0, _nir_quad_swizzle_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_quad_swizzle_amd(build, src0, ...) \ -_nir_build_quad_swizzle_amd(build, src0, (struct _nir_quad_swizzle_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_quad_swizzle_amd nir_build_quad_swizzle_amd -#define nir_build_read_first_invocation _nir_build_read_first_invocation -#define nir_read_first_invocation nir_build_read_first_invocation -#define nir_build_read_invocation _nir_build_read_invocation -#define nir_read_invocation nir_build_read_invocation -#define nir_build_read_invocation_cond_ir3 _nir_build_read_invocation_cond_ir3 -#define nir_read_invocation_cond_ir3 nir_build_read_invocation_cond_ir3 -#ifdef __cplusplus -#define nir_build_reduce(build, src0, ...) \ -_nir_build_reduce(build, src0, _nir_reduce_indices{0, __VA_ARGS__}) -#else -#define nir_build_reduce(build, src0, ...) \ -_nir_build_reduce(build, src0, (struct _nir_reduce_indices){0, __VA_ARGS__}) -#endif -#define nir_reduce nir_build_reduce -#define nir_build_report_ray_intersection _nir_build_report_ray_intersection -#define nir_report_ray_intersection nir_build_report_ray_intersection -#ifdef __cplusplus -#define nir_build_rotate(build, src0, src1, ...) \ -_nir_build_rotate(build, src0, src1, _nir_rotate_indices{0, __VA_ARGS__}) -#else -#define nir_build_rotate(build, src0, src1, ...) \ -_nir_build_rotate(build, src0, src1, (struct _nir_rotate_indices){0, __VA_ARGS__}) -#endif -#define nir_rotate nir_build_rotate -#define nir_build_rq_confirm_intersection _nir_build_rq_confirm_intersection -#define nir_rq_confirm_intersection nir_build_rq_confirm_intersection -#define nir_build_rq_generate_intersection _nir_build_rq_generate_intersection -#define nir_rq_generate_intersection nir_build_rq_generate_intersection -#define nir_build_rq_initialize _nir_build_rq_initialize -#define nir_rq_initialize nir_build_rq_initialize -#ifdef __cplusplus -#define nir_build_rq_load(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_rq_load(build, num_components, bit_size, src0, src1, _nir_rq_load_indices{0, __VA_ARGS__}) -#else -#define nir_build_rq_load(build, num_components, bit_size, src0, src1, ...) \ -_nir_build_rq_load(build, num_components, bit_size, src0, src1, (struct _nir_rq_load_indices){0, __VA_ARGS__}) -#endif -#define nir_rq_load nir_build_rq_load -#define nir_build_rq_proceed _nir_build_rq_proceed -#define nir_rq_proceed nir_build_rq_proceed -#define nir_build_rq_terminate _nir_build_rq_terminate -#define nir_rq_terminate nir_build_rq_terminate -#ifdef __cplusplus -#define nir_build_rt_execute_callable(build, src0, src1, ...) \ -_nir_build_rt_execute_callable(build, src0, src1, _nir_rt_execute_callable_indices{0, __VA_ARGS__}) -#else -#define nir_build_rt_execute_callable(build, src0, src1, ...) \ -_nir_build_rt_execute_callable(build, src0, src1, (struct _nir_rt_execute_callable_indices){0, __VA_ARGS__}) -#endif -#define nir_rt_execute_callable nir_build_rt_execute_callable -#ifdef __cplusplus -#define nir_build_rt_resume(build, ...) \ -_nir_build_rt_resume(build, _nir_rt_resume_indices{0, __VA_ARGS__}) -#else -#define nir_build_rt_resume(build, ...) \ -_nir_build_rt_resume(build, (struct _nir_rt_resume_indices){0, __VA_ARGS__}) -#endif -#define nir_rt_resume nir_build_rt_resume -#define nir_build_rt_return_amd _nir_build_rt_return_amd -#define nir_rt_return_amd nir_build_rt_return_amd -#ifdef __cplusplus -#define nir_build_rt_trace_ray(build, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, ...) \ -_nir_build_rt_trace_ray(build, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, _nir_rt_trace_ray_indices{0, __VA_ARGS__}) -#else -#define nir_build_rt_trace_ray(build, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, ...) \ -_nir_build_rt_trace_ray(build, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, (struct _nir_rt_trace_ray_indices){0, __VA_ARGS__}) -#endif -#define nir_rt_trace_ray nir_build_rt_trace_ray -#ifdef __cplusplus -#define nir_build_scoped_barrier(build, ...) \ -_nir_build_scoped_barrier(build, _nir_scoped_barrier_indices{0, __VA_ARGS__}) -#else -#define nir_build_scoped_barrier(build, ...) \ -_nir_build_scoped_barrier(build, (struct _nir_scoped_barrier_indices){0, __VA_ARGS__}) -#endif -#define nir_scoped_barrier nir_build_scoped_barrier -#ifdef __cplusplus -#define nir_build_set_vertex_and_primitive_count(build, src0, src1, ...) \ -_nir_build_set_vertex_and_primitive_count(build, src0, src1, _nir_set_vertex_and_primitive_count_indices{0, __VA_ARGS__}) -#else -#define nir_build_set_vertex_and_primitive_count(build, src0, src1, ...) \ -_nir_build_set_vertex_and_primitive_count(build, src0, src1, (struct _nir_set_vertex_and_primitive_count_indices){0, __VA_ARGS__}) -#endif -#define nir_set_vertex_and_primitive_count nir_build_set_vertex_and_primitive_count -#ifdef __cplusplus -#define nir_build_shader_clock(build, ...) \ -_nir_build_shader_clock(build, _nir_shader_clock_indices{0, __VA_ARGS__}) -#else -#define nir_build_shader_clock(build, ...) \ -_nir_build_shader_clock(build, (struct _nir_shader_clock_indices){0, __VA_ARGS__}) -#endif -#define nir_shader_clock nir_build_shader_clock -#ifdef __cplusplus -#define nir_build_shared_atomic_add(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_add(build, bit_size, src0, src1, _nir_shared_atomic_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_add(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_add(build, bit_size, src0, src1, (struct _nir_shared_atomic_add_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_add nir_build_shared_atomic_add -#define nir_build_shared_atomic_add_dxil _nir_build_shared_atomic_add_dxil -#define nir_shared_atomic_add_dxil nir_build_shared_atomic_add_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_and(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_and(build, bit_size, src0, src1, _nir_shared_atomic_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_and(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_and(build, bit_size, src0, src1, (struct _nir_shared_atomic_and_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_and nir_build_shared_atomic_and -#define nir_build_shared_atomic_and_dxil _nir_build_shared_atomic_and_dxil -#define nir_shared_atomic_and_dxil nir_build_shared_atomic_and_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_shared_atomic_comp_swap(build, bit_size, src0, src1, src2, _nir_shared_atomic_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_shared_atomic_comp_swap(build, bit_size, src0, src1, src2, (struct _nir_shared_atomic_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_comp_swap nir_build_shared_atomic_comp_swap -#define nir_build_shared_atomic_comp_swap_dxil _nir_build_shared_atomic_comp_swap_dxil -#define nir_shared_atomic_comp_swap_dxil nir_build_shared_atomic_comp_swap_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_exchange(build, bit_size, src0, src1, _nir_shared_atomic_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_exchange(build, bit_size, src0, src1, (struct _nir_shared_atomic_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_exchange nir_build_shared_atomic_exchange -#define nir_build_shared_atomic_exchange_dxil _nir_build_shared_atomic_exchange_dxil -#define nir_shared_atomic_exchange_dxil nir_build_shared_atomic_exchange_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_fadd(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_fadd(build, bit_size, src0, src1, _nir_shared_atomic_fadd_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_fadd(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_fadd(build, bit_size, src0, src1, (struct _nir_shared_atomic_fadd_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_fadd nir_build_shared_atomic_fadd -#ifdef __cplusplus -#define nir_build_shared_atomic_fcomp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_shared_atomic_fcomp_swap(build, bit_size, src0, src1, src2, _nir_shared_atomic_fcomp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_fcomp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_shared_atomic_fcomp_swap(build, bit_size, src0, src1, src2, (struct _nir_shared_atomic_fcomp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_fcomp_swap nir_build_shared_atomic_fcomp_swap -#ifdef __cplusplus -#define nir_build_shared_atomic_fmax(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_fmax(build, bit_size, src0, src1, _nir_shared_atomic_fmax_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_fmax(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_fmax(build, bit_size, src0, src1, (struct _nir_shared_atomic_fmax_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_fmax nir_build_shared_atomic_fmax -#ifdef __cplusplus -#define nir_build_shared_atomic_fmin(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_fmin(build, bit_size, src0, src1, _nir_shared_atomic_fmin_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_fmin(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_fmin(build, bit_size, src0, src1, (struct _nir_shared_atomic_fmin_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_fmin nir_build_shared_atomic_fmin -#ifdef __cplusplus -#define nir_build_shared_atomic_imax(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_imax(build, bit_size, src0, src1, _nir_shared_atomic_imax_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_imax(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_imax(build, bit_size, src0, src1, (struct _nir_shared_atomic_imax_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_imax nir_build_shared_atomic_imax -#define nir_build_shared_atomic_imax_dxil _nir_build_shared_atomic_imax_dxil -#define nir_shared_atomic_imax_dxil nir_build_shared_atomic_imax_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_imin(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_imin(build, bit_size, src0, src1, _nir_shared_atomic_imin_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_imin(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_imin(build, bit_size, src0, src1, (struct _nir_shared_atomic_imin_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_imin nir_build_shared_atomic_imin -#define nir_build_shared_atomic_imin_dxil _nir_build_shared_atomic_imin_dxil -#define nir_shared_atomic_imin_dxil nir_build_shared_atomic_imin_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_or(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_or(build, bit_size, src0, src1, _nir_shared_atomic_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_or(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_or(build, bit_size, src0, src1, (struct _nir_shared_atomic_or_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_or nir_build_shared_atomic_or -#define nir_build_shared_atomic_or_dxil _nir_build_shared_atomic_or_dxil -#define nir_shared_atomic_or_dxil nir_build_shared_atomic_or_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_umax(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_umax(build, bit_size, src0, src1, _nir_shared_atomic_umax_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_umax(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_umax(build, bit_size, src0, src1, (struct _nir_shared_atomic_umax_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_umax nir_build_shared_atomic_umax -#define nir_build_shared_atomic_umax_dxil _nir_build_shared_atomic_umax_dxil -#define nir_shared_atomic_umax_dxil nir_build_shared_atomic_umax_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_umin(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_umin(build, bit_size, src0, src1, _nir_shared_atomic_umin_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_umin(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_umin(build, bit_size, src0, src1, (struct _nir_shared_atomic_umin_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_umin nir_build_shared_atomic_umin -#define nir_build_shared_atomic_umin_dxil _nir_build_shared_atomic_umin_dxil -#define nir_shared_atomic_umin_dxil nir_build_shared_atomic_umin_dxil -#ifdef __cplusplus -#define nir_build_shared_atomic_xor(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_xor(build, bit_size, src0, src1, _nir_shared_atomic_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_shared_atomic_xor(build, bit_size, src0, src1, ...) \ -_nir_build_shared_atomic_xor(build, bit_size, src0, src1, (struct _nir_shared_atomic_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_shared_atomic_xor nir_build_shared_atomic_xor -#define nir_build_shared_atomic_xor_dxil _nir_build_shared_atomic_xor_dxil -#define nir_shared_atomic_xor_dxil nir_build_shared_atomic_xor_dxil -#define nir_build_shuffle _nir_build_shuffle -#define nir_shuffle nir_build_shuffle -#define nir_build_shuffle_down _nir_build_shuffle_down -#define nir_shuffle_down nir_build_shuffle_down -#define nir_build_shuffle_up _nir_build_shuffle_up -#define nir_shuffle_up nir_build_shuffle_up -#define nir_build_shuffle_xor _nir_build_shuffle_xor -#define nir_shuffle_xor nir_build_shuffle_xor -#define nir_build_sparse_residency_code_and _nir_build_sparse_residency_code_and -#define nir_sparse_residency_code_and nir_build_sparse_residency_code_and -#ifdef __cplusplus -#define nir_build_ssbo_atomic_add(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_add(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_add(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_add(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_add_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_add nir_build_ssbo_atomic_add -#ifdef __cplusplus -#define nir_build_ssbo_atomic_add_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_add_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_add_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_add_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_add_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_add_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_add_ir3 nir_build_ssbo_atomic_add_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_and(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_and(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_and(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_and(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_and_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_and nir_build_ssbo_atomic_and -#ifdef __cplusplus -#define nir_build_ssbo_atomic_and_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_and_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_and_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_and_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_and_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_and_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_and_ir3 nir_build_ssbo_atomic_and_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_comp_swap(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_comp_swap nir_build_ssbo_atomic_comp_swap -#ifdef __cplusplus -#define nir_build_ssbo_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_ssbo_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, src3, src4, _nir_ssbo_atomic_comp_swap_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, src3, src4, ...) \ -_nir_build_ssbo_atomic_comp_swap_ir3(build, bit_size, src0, src1, src2, src3, src4, (struct _nir_ssbo_atomic_comp_swap_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_comp_swap_ir3 nir_build_ssbo_atomic_comp_swap_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_exchange(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_exchange(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_exchange(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_exchange(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_exchange nir_build_ssbo_atomic_exchange -#ifdef __cplusplus -#define nir_build_ssbo_atomic_exchange_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_exchange_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_exchange_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_exchange_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_exchange_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_exchange_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_exchange_ir3 nir_build_ssbo_atomic_exchange_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_fadd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_fadd(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_fadd_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_fadd(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_fadd(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_fadd_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_fadd nir_build_ssbo_atomic_fadd -#ifdef __cplusplus -#define nir_build_ssbo_atomic_fcomp_swap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_fcomp_swap(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_fcomp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_fcomp_swap(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_fcomp_swap(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_fcomp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_fcomp_swap nir_build_ssbo_atomic_fcomp_swap -#ifdef __cplusplus -#define nir_build_ssbo_atomic_fmax(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_fmax(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_fmax_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_fmax(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_fmax(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_fmax_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_fmax nir_build_ssbo_atomic_fmax -#ifdef __cplusplus -#define nir_build_ssbo_atomic_fmin(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_fmin(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_fmin_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_fmin(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_fmin(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_fmin_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_fmin nir_build_ssbo_atomic_fmin -#ifdef __cplusplus -#define nir_build_ssbo_atomic_imax(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_imax(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_imax_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_imax(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_imax(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_imax_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_imax nir_build_ssbo_atomic_imax -#ifdef __cplusplus -#define nir_build_ssbo_atomic_imax_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_imax_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_imax_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_imax_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_imax_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_imax_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_imax_ir3 nir_build_ssbo_atomic_imax_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_imin(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_imin(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_imin_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_imin(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_imin(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_imin_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_imin nir_build_ssbo_atomic_imin -#ifdef __cplusplus -#define nir_build_ssbo_atomic_imin_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_imin_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_imin_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_imin_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_imin_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_imin_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_imin_ir3 nir_build_ssbo_atomic_imin_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_or(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_or(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_or(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_or(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_or_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_or nir_build_ssbo_atomic_or -#ifdef __cplusplus -#define nir_build_ssbo_atomic_or_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_or_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_or_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_or_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_or_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_or_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_or_ir3 nir_build_ssbo_atomic_or_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_umax(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_umax(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_umax_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_umax(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_umax(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_umax_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_umax nir_build_ssbo_atomic_umax -#ifdef __cplusplus -#define nir_build_ssbo_atomic_umax_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_umax_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_umax_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_umax_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_umax_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_umax_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_umax_ir3 nir_build_ssbo_atomic_umax_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_umin(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_umin(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_umin_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_umin(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_umin(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_umin_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_umin nir_build_ssbo_atomic_umin -#ifdef __cplusplus -#define nir_build_ssbo_atomic_umin_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_umin_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_umin_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_umin_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_umin_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_umin_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_umin_ir3 nir_build_ssbo_atomic_umin_ir3 -#ifdef __cplusplus -#define nir_build_ssbo_atomic_xor(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_xor(build, bit_size, src0, src1, src2, _nir_ssbo_atomic_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_xor(build, bit_size, src0, src1, src2, ...) \ -_nir_build_ssbo_atomic_xor(build, bit_size, src0, src1, src2, (struct _nir_ssbo_atomic_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_xor nir_build_ssbo_atomic_xor -#ifdef __cplusplus -#define nir_build_ssbo_atomic_xor_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_xor_ir3(build, bit_size, src0, src1, src2, src3, _nir_ssbo_atomic_xor_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_ssbo_atomic_xor_ir3(build, bit_size, src0, src1, src2, src3, ...) \ -_nir_build_ssbo_atomic_xor_ir3(build, bit_size, src0, src1, src2, src3, (struct _nir_ssbo_atomic_xor_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_ssbo_atomic_xor_ir3 nir_build_ssbo_atomic_xor_ir3 -#ifdef __cplusplus -#define nir_build_store_agx(build, src0, src1, src2, ...) \ -_nir_build_store_agx(build, src0, src1, src2, _nir_store_agx_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_agx(build, src0, src1, src2, ...) \ -_nir_build_store_agx(build, src0, src1, src2, (struct _nir_store_agx_indices){0, __VA_ARGS__}) -#endif -#define nir_store_agx nir_build_store_agx -#ifdef __cplusplus -#define nir_build_store_buffer_amd(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_store_buffer_amd(build, src0, src1, src2, src3, src4, _nir_store_buffer_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_buffer_amd(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_store_buffer_amd(build, src0, src1, src2, src3, src4, (struct _nir_store_buffer_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_store_buffer_amd nir_build_store_buffer_amd -#ifdef __cplusplus -#define nir_build_store_combined_output_pan(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_store_combined_output_pan(build, src0, src1, src2, src3, src4, _nir_store_combined_output_pan_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_combined_output_pan(build, src0, src1, src2, src3, src4, ...) \ -_nir_build_store_combined_output_pan(build, src0, src1, src2, src3, src4, (struct _nir_store_combined_output_pan_indices){0, __VA_ARGS__}) -#endif -#define nir_store_combined_output_pan nir_build_store_combined_output_pan -#ifdef __cplusplus -#define nir_build_store_deref(build, src0, src1, ...) \ -_nir_build_store_deref(build, src0, src1, _nir_store_deref_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_deref(build, src0, src1, ...) \ -_nir_build_store_deref(build, src0, src1, (struct _nir_store_deref_indices){0, __VA_ARGS__}) -#endif -#define nir_store_deref nir_build_store_deref -#ifdef __cplusplus -#define nir_build_store_deref_block_intel(build, src0, src1, ...) \ -_nir_build_store_deref_block_intel(build, src0, src1, _nir_store_deref_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_deref_block_intel(build, src0, src1, ...) \ -_nir_build_store_deref_block_intel(build, src0, src1, (struct _nir_store_deref_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_store_deref_block_intel nir_build_store_deref_block_intel -#ifdef __cplusplus -#define nir_build_store_global(build, src0, src1, ...) \ -_nir_build_store_global(build, src0, src1, _nir_store_global_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_global(build, src0, src1, ...) \ -_nir_build_store_global(build, src0, src1, (struct _nir_store_global_indices){0, __VA_ARGS__}) -#endif -#define nir_store_global nir_build_store_global -#ifdef __cplusplus -#define nir_build_store_global_2x32(build, src0, src1, ...) \ -_nir_build_store_global_2x32(build, src0, src1, _nir_store_global_2x32_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_global_2x32(build, src0, src1, ...) \ -_nir_build_store_global_2x32(build, src0, src1, (struct _nir_store_global_2x32_indices){0, __VA_ARGS__}) -#endif -#define nir_store_global_2x32 nir_build_store_global_2x32 -#ifdef __cplusplus -#define nir_build_store_global_amd(build, src0, src1, src2, ...) \ -_nir_build_store_global_amd(build, src0, src1, src2, _nir_store_global_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_global_amd(build, src0, src1, src2, ...) \ -_nir_build_store_global_amd(build, src0, src1, src2, (struct _nir_store_global_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_store_global_amd nir_build_store_global_amd -#ifdef __cplusplus -#define nir_build_store_global_block_intel(build, src0, src1, ...) \ -_nir_build_store_global_block_intel(build, src0, src1, _nir_store_global_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_global_block_intel(build, src0, src1, ...) \ -_nir_build_store_global_block_intel(build, src0, src1, (struct _nir_store_global_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_store_global_block_intel nir_build_store_global_block_intel -#ifdef __cplusplus -#define nir_build_store_global_ir3(build, src0, src1, src2, ...) \ -_nir_build_store_global_ir3(build, src0, src1, src2, _nir_store_global_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_global_ir3(build, src0, src1, src2, ...) \ -_nir_build_store_global_ir3(build, src0, src1, src2, (struct _nir_store_global_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_store_global_ir3 nir_build_store_global_ir3 -#ifdef __cplusplus -#define nir_build_store_hit_attrib_amd(build, src0, ...) \ -_nir_build_store_hit_attrib_amd(build, src0, _nir_store_hit_attrib_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_hit_attrib_amd(build, src0, ...) \ -_nir_build_store_hit_attrib_amd(build, src0, (struct _nir_store_hit_attrib_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_store_hit_attrib_amd nir_build_store_hit_attrib_amd -#ifdef __cplusplus -#define nir_build_store_local_pixel_agx(build, src0, src1, ...) \ -_nir_build_store_local_pixel_agx(build, src0, src1, _nir_store_local_pixel_agx_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_local_pixel_agx(build, src0, src1, ...) \ -_nir_build_store_local_pixel_agx(build, src0, src1, (struct _nir_store_local_pixel_agx_indices){0, __VA_ARGS__}) -#endif -#define nir_store_local_pixel_agx nir_build_store_local_pixel_agx -#ifdef __cplusplus -#define nir_build_store_local_shared_r600(build, src0, src1, ...) \ -_nir_build_store_local_shared_r600(build, src0, src1, _nir_store_local_shared_r600_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_local_shared_r600(build, src0, src1, ...) \ -_nir_build_store_local_shared_r600(build, src0, src1, (struct _nir_store_local_shared_r600_indices){0, __VA_ARGS__}) -#endif -#define nir_store_local_shared_r600 nir_build_store_local_shared_r600 -#ifdef __cplusplus -#define nir_build_store_output(build, src0, src1, ...) \ -_nir_build_store_output(build, src0, src1, _nir_store_output_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_output(build, src0, src1, ...) \ -_nir_build_store_output(build, src0, src1, (struct _nir_store_output_indices){0, __VA_ARGS__}) -#endif -#define nir_store_output nir_build_store_output -#ifdef __cplusplus -#define nir_build_store_per_primitive_output(build, src0, src1, src2, ...) \ -_nir_build_store_per_primitive_output(build, src0, src1, src2, _nir_store_per_primitive_output_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_per_primitive_output(build, src0, src1, src2, ...) \ -_nir_build_store_per_primitive_output(build, src0, src1, src2, (struct _nir_store_per_primitive_output_indices){0, __VA_ARGS__}) -#endif -#define nir_store_per_primitive_output nir_build_store_per_primitive_output -#ifdef __cplusplus -#define nir_build_store_per_vertex_output(build, src0, src1, src2, ...) \ -_nir_build_store_per_vertex_output(build, src0, src1, src2, _nir_store_per_vertex_output_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_per_vertex_output(build, src0, src1, src2, ...) \ -_nir_build_store_per_vertex_output(build, src0, src1, src2, (struct _nir_store_per_vertex_output_indices){0, __VA_ARGS__}) -#endif -#define nir_store_per_vertex_output nir_build_store_per_vertex_output -#ifdef __cplusplus -#define nir_build_store_preamble(build, src0, ...) \ -_nir_build_store_preamble(build, src0, _nir_store_preamble_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_preamble(build, src0, ...) \ -_nir_build_store_preamble(build, src0, (struct _nir_store_preamble_indices){0, __VA_ARGS__}) -#endif -#define nir_store_preamble nir_build_store_preamble -#ifdef __cplusplus -#define nir_build_store_raw_output_pan(build, src0, ...) \ -_nir_build_store_raw_output_pan(build, src0, _nir_store_raw_output_pan_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_raw_output_pan(build, src0, ...) \ -_nir_build_store_raw_output_pan(build, src0, (struct _nir_store_raw_output_pan_indices){0, __VA_ARGS__}) -#endif -#define nir_store_raw_output_pan nir_build_store_raw_output_pan -#ifdef __cplusplus -#define nir_build_store_scratch(build, src0, src1, ...) \ -_nir_build_store_scratch(build, src0, src1, _nir_store_scratch_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_scratch(build, src0, src1, ...) \ -_nir_build_store_scratch(build, src0, src1, (struct _nir_store_scratch_indices){0, __VA_ARGS__}) -#endif -#define nir_store_scratch nir_build_store_scratch -#define nir_build_store_scratch_dxil _nir_build_store_scratch_dxil -#define nir_store_scratch_dxil nir_build_store_scratch_dxil -#ifdef __cplusplus -#define nir_build_store_shared(build, src0, src1, ...) \ -_nir_build_store_shared(build, src0, src1, _nir_store_shared_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_shared(build, src0, src1, ...) \ -_nir_build_store_shared(build, src0, src1, (struct _nir_store_shared_indices){0, __VA_ARGS__}) -#endif -#define nir_store_shared nir_build_store_shared -#ifdef __cplusplus -#define nir_build_store_shared2_amd(build, src0, src1, ...) \ -_nir_build_store_shared2_amd(build, src0, src1, _nir_store_shared2_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_shared2_amd(build, src0, src1, ...) \ -_nir_build_store_shared2_amd(build, src0, src1, (struct _nir_store_shared2_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_store_shared2_amd nir_build_store_shared2_amd -#ifdef __cplusplus -#define nir_build_store_shared_block_intel(build, src0, src1, ...) \ -_nir_build_store_shared_block_intel(build, src0, src1, _nir_store_shared_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_shared_block_intel(build, src0, src1, ...) \ -_nir_build_store_shared_block_intel(build, src0, src1, (struct _nir_store_shared_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_store_shared_block_intel nir_build_store_shared_block_intel -#define nir_build_store_shared_dxil _nir_build_store_shared_dxil -#define nir_store_shared_dxil nir_build_store_shared_dxil -#ifdef __cplusplus -#define nir_build_store_shared_ir3(build, src0, src1, ...) \ -_nir_build_store_shared_ir3(build, src0, src1, _nir_store_shared_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_shared_ir3(build, src0, src1, ...) \ -_nir_build_store_shared_ir3(build, src0, src1, (struct _nir_store_shared_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_store_shared_ir3 nir_build_store_shared_ir3 -#define nir_build_store_shared_masked_dxil _nir_build_store_shared_masked_dxil -#define nir_store_shared_masked_dxil nir_build_store_shared_masked_dxil -#ifdef __cplusplus -#define nir_build_store_ssbo(build, src0, src1, src2, ...) \ -_nir_build_store_ssbo(build, src0, src1, src2, _nir_store_ssbo_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_ssbo(build, src0, src1, src2, ...) \ -_nir_build_store_ssbo(build, src0, src1, src2, (struct _nir_store_ssbo_indices){0, __VA_ARGS__}) -#endif -#define nir_store_ssbo nir_build_store_ssbo -#ifdef __cplusplus -#define nir_build_store_ssbo_block_intel(build, src0, src1, src2, ...) \ -_nir_build_store_ssbo_block_intel(build, src0, src1, src2, _nir_store_ssbo_block_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_ssbo_block_intel(build, src0, src1, src2, ...) \ -_nir_build_store_ssbo_block_intel(build, src0, src1, src2, (struct _nir_store_ssbo_block_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_store_ssbo_block_intel nir_build_store_ssbo_block_intel -#ifdef __cplusplus -#define nir_build_store_ssbo_ir3(build, src0, src1, src2, src3, ...) \ -_nir_build_store_ssbo_ir3(build, src0, src1, src2, src3, _nir_store_ssbo_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_ssbo_ir3(build, src0, src1, src2, src3, ...) \ -_nir_build_store_ssbo_ir3(build, src0, src1, src2, src3, (struct _nir_store_ssbo_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_store_ssbo_ir3 nir_build_store_ssbo_ir3 -#define nir_build_store_ssbo_masked_dxil _nir_build_store_ssbo_masked_dxil -#define nir_store_ssbo_masked_dxil nir_build_store_ssbo_masked_dxil -#ifdef __cplusplus -#define nir_build_store_stack(build, src0, ...) \ -_nir_build_store_stack(build, src0, _nir_store_stack_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_stack(build, src0, ...) \ -_nir_build_store_stack(build, src0, (struct _nir_store_stack_indices){0, __VA_ARGS__}) -#endif -#define nir_store_stack nir_build_store_stack -#ifdef __cplusplus -#define nir_build_store_task_payload(build, src0, src1, ...) \ -_nir_build_store_task_payload(build, src0, src1, _nir_store_task_payload_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_task_payload(build, src0, src1, ...) \ -_nir_build_store_task_payload(build, src0, src1, (struct _nir_store_task_payload_indices){0, __VA_ARGS__}) -#endif -#define nir_store_task_payload nir_build_store_task_payload -#define nir_build_store_tf_r600 _nir_build_store_tf_r600 -#define nir_store_tf_r600 nir_build_store_tf_r600 -#ifdef __cplusplus -#define nir_build_store_tlb_sample_color_v3d(build, src0, src1, ...) \ -_nir_build_store_tlb_sample_color_v3d(build, src0, src1, _nir_store_tlb_sample_color_v3d_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_tlb_sample_color_v3d(build, src0, src1, ...) \ -_nir_build_store_tlb_sample_color_v3d(build, src0, src1, (struct _nir_store_tlb_sample_color_v3d_indices){0, __VA_ARGS__}) -#endif -#define nir_store_tlb_sample_color_v3d nir_build_store_tlb_sample_color_v3d -#ifdef __cplusplus -#define nir_build_store_uniform_ir3(build, src0, ...) \ -_nir_build_store_uniform_ir3(build, src0, _nir_store_uniform_ir3_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_uniform_ir3(build, src0, ...) \ -_nir_build_store_uniform_ir3(build, src0, (struct _nir_store_uniform_ir3_indices){0, __VA_ARGS__}) -#endif -#define nir_store_uniform_ir3 nir_build_store_uniform_ir3 -#ifdef __cplusplus -#define nir_build_store_zs_agx(build, src0, src1, src2, ...) \ -_nir_build_store_zs_agx(build, src0, src1, src2, _nir_store_zs_agx_indices{0, __VA_ARGS__}) -#else -#define nir_build_store_zs_agx(build, src0, src1, src2, ...) \ -_nir_build_store_zs_agx(build, src0, src1, src2, (struct _nir_store_zs_agx_indices){0, __VA_ARGS__}) -#endif -#define nir_store_zs_agx nir_build_store_zs_agx -#ifdef __cplusplus -#define nir_build_task_payload_atomic_add(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_add(build, bit_size, src0, src1, _nir_task_payload_atomic_add_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_add(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_add(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_add_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_add nir_build_task_payload_atomic_add -#ifdef __cplusplus -#define nir_build_task_payload_atomic_and(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_and(build, bit_size, src0, src1, _nir_task_payload_atomic_and_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_and(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_and(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_and_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_and nir_build_task_payload_atomic_and -#ifdef __cplusplus -#define nir_build_task_payload_atomic_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_task_payload_atomic_comp_swap(build, bit_size, src0, src1, src2, _nir_task_payload_atomic_comp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_comp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_task_payload_atomic_comp_swap(build, bit_size, src0, src1, src2, (struct _nir_task_payload_atomic_comp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_comp_swap nir_build_task_payload_atomic_comp_swap -#ifdef __cplusplus -#define nir_build_task_payload_atomic_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_exchange(build, bit_size, src0, src1, _nir_task_payload_atomic_exchange_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_exchange(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_exchange(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_exchange_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_exchange nir_build_task_payload_atomic_exchange -#ifdef __cplusplus -#define nir_build_task_payload_atomic_fadd(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_fadd(build, bit_size, src0, src1, _nir_task_payload_atomic_fadd_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_fadd(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_fadd(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_fadd_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_fadd nir_build_task_payload_atomic_fadd -#ifdef __cplusplus -#define nir_build_task_payload_atomic_fcomp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_task_payload_atomic_fcomp_swap(build, bit_size, src0, src1, src2, _nir_task_payload_atomic_fcomp_swap_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_fcomp_swap(build, bit_size, src0, src1, src2, ...) \ -_nir_build_task_payload_atomic_fcomp_swap(build, bit_size, src0, src1, src2, (struct _nir_task_payload_atomic_fcomp_swap_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_fcomp_swap nir_build_task_payload_atomic_fcomp_swap -#ifdef __cplusplus -#define nir_build_task_payload_atomic_fmax(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_fmax(build, bit_size, src0, src1, _nir_task_payload_atomic_fmax_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_fmax(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_fmax(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_fmax_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_fmax nir_build_task_payload_atomic_fmax -#ifdef __cplusplus -#define nir_build_task_payload_atomic_fmin(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_fmin(build, bit_size, src0, src1, _nir_task_payload_atomic_fmin_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_fmin(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_fmin(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_fmin_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_fmin nir_build_task_payload_atomic_fmin -#ifdef __cplusplus -#define nir_build_task_payload_atomic_imax(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_imax(build, bit_size, src0, src1, _nir_task_payload_atomic_imax_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_imax(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_imax(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_imax_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_imax nir_build_task_payload_atomic_imax -#ifdef __cplusplus -#define nir_build_task_payload_atomic_imin(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_imin(build, bit_size, src0, src1, _nir_task_payload_atomic_imin_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_imin(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_imin(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_imin_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_imin nir_build_task_payload_atomic_imin -#ifdef __cplusplus -#define nir_build_task_payload_atomic_or(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_or(build, bit_size, src0, src1, _nir_task_payload_atomic_or_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_or(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_or(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_or_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_or nir_build_task_payload_atomic_or -#ifdef __cplusplus -#define nir_build_task_payload_atomic_umax(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_umax(build, bit_size, src0, src1, _nir_task_payload_atomic_umax_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_umax(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_umax(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_umax_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_umax nir_build_task_payload_atomic_umax -#ifdef __cplusplus -#define nir_build_task_payload_atomic_umin(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_umin(build, bit_size, src0, src1, _nir_task_payload_atomic_umin_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_umin(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_umin(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_umin_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_umin nir_build_task_payload_atomic_umin -#ifdef __cplusplus -#define nir_build_task_payload_atomic_xor(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_xor(build, bit_size, src0, src1, _nir_task_payload_atomic_xor_indices{0, __VA_ARGS__}) -#else -#define nir_build_task_payload_atomic_xor(build, bit_size, src0, src1, ...) \ -_nir_build_task_payload_atomic_xor(build, bit_size, src0, src1, (struct _nir_task_payload_atomic_xor_indices){0, __VA_ARGS__}) -#endif -#define nir_task_payload_atomic_xor nir_build_task_payload_atomic_xor -#define nir_build_terminate _nir_build_terminate -#define nir_terminate nir_build_terminate -#define nir_build_terminate_if _nir_build_terminate_if -#define nir_terminate_if nir_build_terminate_if -#define nir_build_terminate_ray _nir_build_terminate_ray -#define nir_terminate_ray nir_build_terminate_ray -#define nir_build_trace_ray _nir_build_trace_ray -#define nir_trace_ray nir_build_trace_ray -#ifdef __cplusplus -#define nir_build_trace_ray_intel(build, src0, src1, src2, ...) \ -_nir_build_trace_ray_intel(build, src0, src1, src2, _nir_trace_ray_intel_indices{0, __VA_ARGS__}) -#else -#define nir_build_trace_ray_intel(build, src0, src1, src2, ...) \ -_nir_build_trace_ray_intel(build, src0, src1, src2, (struct _nir_trace_ray_intel_indices){0, __VA_ARGS__}) -#endif -#define nir_trace_ray_intel nir_build_trace_ray_intel -#define nir_build_vote_all _nir_build_vote_all -#define nir_vote_all nir_build_vote_all -#define nir_build_vote_any _nir_build_vote_any -#define nir_vote_any nir_build_vote_any -#define nir_build_vote_feq _nir_build_vote_feq -#define nir_vote_feq nir_build_vote_feq -#define nir_build_vote_ieq _nir_build_vote_ieq -#define nir_vote_ieq nir_build_vote_ieq -#ifdef __cplusplus -#define nir_build_vulkan_resource_index(build, num_components, bit_size, src0, ...) \ -_nir_build_vulkan_resource_index(build, num_components, bit_size, src0, _nir_vulkan_resource_index_indices{0, __VA_ARGS__}) -#else -#define nir_build_vulkan_resource_index(build, num_components, bit_size, src0, ...) \ -_nir_build_vulkan_resource_index(build, num_components, bit_size, src0, (struct _nir_vulkan_resource_index_indices){0, __VA_ARGS__}) -#endif -#define nir_vulkan_resource_index nir_build_vulkan_resource_index -#ifdef __cplusplus -#define nir_build_vulkan_resource_reindex(build, bit_size, src0, src1, ...) \ -_nir_build_vulkan_resource_reindex(build, bit_size, src0, src1, _nir_vulkan_resource_reindex_indices{0, __VA_ARGS__}) -#else -#define nir_build_vulkan_resource_reindex(build, bit_size, src0, src1, ...) \ -_nir_build_vulkan_resource_reindex(build, bit_size, src0, src1, (struct _nir_vulkan_resource_reindex_indices){0, __VA_ARGS__}) -#endif -#define nir_vulkan_resource_reindex nir_build_vulkan_resource_reindex -#define nir_build_write_invocation_amd _nir_build_write_invocation_amd -#define nir_write_invocation_amd nir_build_write_invocation_amd -#ifdef __cplusplus -#define nir_build_xfb_counter_sub_amd(build, src0, ...) \ -_nir_build_xfb_counter_sub_amd(build, src0, _nir_xfb_counter_sub_amd_indices{0, __VA_ARGS__}) -#else -#define nir_build_xfb_counter_sub_amd(build, src0, ...) \ -_nir_build_xfb_counter_sub_amd(build, src0, (struct _nir_xfb_counter_sub_amd_indices){0, __VA_ARGS__}) -#endif -#define nir_xfb_counter_sub_amd nir_build_xfb_counter_sub_amd - -#endif /* _NIR_BUILDER_OPCODES_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder_opcodes_h.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder_opcodes_h.py deleted file mode 100644 index 48cd4dc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builder_opcodes_h.py +++ /dev/null @@ -1,181 +0,0 @@ -template = """\ -/* Copyright (C) 2015 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_BUILDER_OPCODES_ -#define _NIR_BUILDER_OPCODES_ - -<% -def src_decl_list(num_srcs): - return ', '.join('nir_ssa_def *src' + str(i) for i in range(num_srcs)) - -def src_list(num_srcs): - return ', '.join('src' + str(i) for i in range(num_srcs)) - -def needs_num_components(opcode): - return "replicated" in opcode.name -%> - -% for name, opcode in sorted(opcodes.items()): -% if not needs_num_components(opcode): -static inline nir_ssa_def * -nir_${name}(nir_builder *build, ${src_decl_list(opcode.num_inputs)}) -{ -% if opcode.is_conversion and \ - type_base_type(opcode.output_type) == opcode.input_types[0]: - if (src0->bit_size == ${type_size(opcode.output_type)}) - return src0; -%endif -% if opcode.num_inputs <= 4: - return nir_build_alu${opcode.num_inputs}(build, nir_op_${name}, ${src_list(opcode.num_inputs)}); -% else: - nir_ssa_def *srcs[${opcode.num_inputs}] = {${src_list(opcode.num_inputs)}}; - return nir_build_alu_src_arr(build, nir_op_${name}, srcs); -% endif -} -% endif -% endfor - -% for name, opcode in sorted(INTR_OPCODES.items()): -struct _nir_${name}_indices { - int _; /* exists to avoid empty initializers */ -% for index in opcode.indices: - ${index.c_data_type} ${index.name}; -% endfor -}; -% endfor - -<% -def intrinsic_decl_list(opcode): - need_components = opcode.dest_components == 0 and \ - 0 not in opcode.src_components - - res = '' - if (opcode.has_dest or opcode.num_srcs) and need_components: - res += ', unsigned num_components' - if opcode.has_dest and len(opcode.bit_sizes) != 1 and opcode.bit_size_src == -1: - res += ', unsigned bit_size' - for i in range(opcode.num_srcs): - res += ', nir_ssa_def *src' + str(i) - if opcode.indices: - res += ', struct _nir_' + opcode.name + '_indices indices' - return res - -def intrinsic_macro_list(opcode): - need_components = opcode.dest_components == 0 and \ - 0 not in opcode.src_components - - res = '' - if (opcode.has_dest or opcode.num_srcs) and need_components: - res += ', num_components' - if opcode.has_dest and len(opcode.bit_sizes) != 1 and opcode.bit_size_src == -1: - res += ', bit_size' - for i in range(opcode.num_srcs): - res += ', src' + str(i) - return res - -def get_intrinsic_bitsize(opcode): - if len(opcode.bit_sizes) == 1: - return str(opcode.bit_sizes[0]) - elif opcode.bit_size_src != -1: - return 'src' + str(opcode.bit_size_src) + '->bit_size' - else: - return 'bit_size' -%> - -% for name, opcode in sorted(INTR_OPCODES.items()): -% if opcode.has_dest: -static inline nir_ssa_def * -% else: -static inline nir_intrinsic_instr * -% endif -_nir_build_${name}(nir_builder *build${intrinsic_decl_list(opcode)}) -{ - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create( - build->shader, nir_intrinsic_${name}); - - % if 0 in opcode.src_components: - intrin->num_components = src${opcode.src_components.index(0)}->num_components; - % elif opcode.dest_components == 0: - intrin->num_components = num_components; - % endif - % if opcode.has_dest: - % if opcode.dest_components == 0: - nir_ssa_dest_init(&intrin->instr, &intrin->dest, intrin->num_components, ${get_intrinsic_bitsize(opcode)}, NULL); - % else: - nir_ssa_dest_init(&intrin->instr, &intrin->dest, ${opcode.dest_components}, ${get_intrinsic_bitsize(opcode)}, NULL); - % endif - % endif - % for i in range(opcode.num_srcs): - intrin->src[${i}] = nir_src_for_ssa(src${i}); - % endfor - % if WRITE_MASK in opcode.indices and 0 in opcode.src_components: - if (!indices.write_mask) - indices.write_mask = BITFIELD_MASK(intrin->num_components); - % endif - % if ALIGN_MUL in opcode.indices and 0 in opcode.src_components: - if (!indices.align_mul) - indices.align_mul = src${opcode.src_components.index(0)}->bit_size / 8u; - % elif ALIGN_MUL in opcode.indices and opcode.dest_components == 0: - if (!indices.align_mul) - indices.align_mul = intrin->dest.ssa.bit_size / 8u; - % endif - % for index in opcode.indices: - nir_intrinsic_set_${index.name}(intrin, indices.${index.name}); - % endfor - - nir_builder_instr_insert(build, &intrin->instr); - % if opcode.has_dest: - return &intrin->dest.ssa; - % else: - return intrin; - % endif -} -% endfor - -% for name, opcode in sorted(INTR_OPCODES.items()): -% if opcode.indices: -#ifdef __cplusplus -#define nir_build_${name}(build${intrinsic_macro_list(opcode)}, ...) ${'\\\\'} -_nir_build_${name}(build${intrinsic_macro_list(opcode)}, _nir_${name}_indices{0, __VA_ARGS__}) -#else -#define nir_build_${name}(build${intrinsic_macro_list(opcode)}, ...) ${'\\\\'} -_nir_build_${name}(build${intrinsic_macro_list(opcode)}, (struct _nir_${name}_indices){0, __VA_ARGS__}) -#endif -% else: -#define nir_build_${name} _nir_build_${name} -% endif -#define nir_${name} nir_build_${name} -% endfor - -#endif /* _NIR_BUILDER_OPCODES_ */""" - -from nir_opcodes import opcodes, type_size, type_base_type -from nir_intrinsics import INTR_OPCODES, WRITE_MASK, ALIGN_MUL -from mako.template import Template - -print(Template(template).render(opcodes=opcodes, - type_size=type_size, - type_base_type=type_base_type, - INTR_OPCODES=INTR_OPCODES, - WRITE_MASK=WRITE_MASK, - ALIGN_MUL=ALIGN_MUL)) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builtin_builder.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builtin_builder.c deleted file mode 100644 index d7d0ba6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builtin_builder.c +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Copyright © 2018 Red Hat Inc. - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include - -#include "nir.h" -#include "nir_builtin_builder.h" - -nir_ssa_def* -nir_cross3(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - unsigned yzx[3] = { 1, 2, 0 }; - unsigned zxy[3] = { 2, 0, 1 }; - - return nir_ffma(b, nir_swizzle(b, x, yzx, 3), - nir_swizzle(b, y, zxy, 3), - nir_fneg(b, nir_fmul(b, nir_swizzle(b, x, zxy, 3), - nir_swizzle(b, y, yzx, 3)))); -} - -nir_ssa_def* -nir_cross4(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *cross = nir_cross3(b, x, y); - - return nir_vec4(b, - nir_channel(b, cross, 0), - nir_channel(b, cross, 1), - nir_channel(b, cross, 2), - nir_imm_intN_t(b, 0, cross->bit_size)); -} - -nir_ssa_def* -nir_fast_length(nir_builder *b, nir_ssa_def *vec) -{ - return nir_fsqrt(b, nir_fdot(b, vec, vec)); -} - -nir_ssa_def* -nir_nextafter(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *zero = nir_imm_intN_t(b, 0, x->bit_size); - nir_ssa_def *one = nir_imm_intN_t(b, 1, x->bit_size); - - nir_ssa_def *condeq = nir_feq(b, x, y); - nir_ssa_def *conddir = nir_flt(b, x, y); - nir_ssa_def *condzero = nir_feq(b, x, zero); - - uint64_t sign_mask = 1ull << (x->bit_size - 1); - uint64_t min_abs = 1; - - if (nir_is_denorm_flush_to_zero(b->shader->info.float_controls_execution_mode, x->bit_size)) { - switch (x->bit_size) { - case 16: - min_abs = 1 << 10; - break; - case 32: - min_abs = 1 << 23; - break; - case 64: - min_abs = 1ULL << 52; - break; - } - - /* Flush denorm to zero to avoid returning a denorm when condeq is true. */ - x = nir_fmul(b, x, nir_imm_floatN_t(b, 1.0, x->bit_size)); - } - - /* beware of: +/-0.0 - 1 == NaN */ - nir_ssa_def *xn = - nir_bcsel(b, - condzero, - nir_imm_intN_t(b, sign_mask | min_abs, x->bit_size), - nir_isub(b, x, one)); - - /* beware of -0.0 + 1 == -0x1p-149 */ - nir_ssa_def *xp = nir_bcsel(b, condzero, - nir_imm_intN_t(b, min_abs, x->bit_size), - nir_iadd(b, x, one)); - - /* nextafter can be implemented by just +/- 1 on the int value */ - nir_ssa_def *res = - nir_bcsel(b, nir_ixor(b, conddir, nir_flt(b, x, zero)), xp, xn); - - return nir_nan_check2(b, x, y, nir_bcsel(b, condeq, x, res)); -} - -nir_ssa_def* -nir_normalize(nir_builder *b, nir_ssa_def *vec) -{ - if (vec->num_components == 1) - return nir_fsign(b, vec); - - nir_ssa_def *f0 = nir_imm_floatN_t(b, 0.0, vec->bit_size); - nir_ssa_def *f1 = nir_imm_floatN_t(b, 1.0, vec->bit_size); - nir_ssa_def *finf = nir_imm_floatN_t(b, INFINITY, vec->bit_size); - - /* scale the input to increase precision */ - nir_ssa_def *maxc = nir_fmax_abs_vec_comp(b, vec); - nir_ssa_def *svec = nir_fdiv(b, vec, maxc); - /* for inf */ - nir_ssa_def *finfvec = nir_copysign(b, nir_bcsel(b, nir_feq(b, vec, finf), f1, f0), f1); - - nir_ssa_def *temp = nir_bcsel(b, nir_feq(b, maxc, finf), finfvec, svec); - nir_ssa_def *res = nir_fmul(b, temp, nir_frsq(b, nir_fdot(b, temp, temp))); - - return nir_bcsel(b, nir_feq(b, maxc, f0), vec, res); -} - -nir_ssa_def* -nir_smoothstep(nir_builder *b, nir_ssa_def *edge0, nir_ssa_def *edge1, nir_ssa_def *x) -{ - nir_ssa_def *f2 = nir_imm_floatN_t(b, 2.0, x->bit_size); - nir_ssa_def *f3 = nir_imm_floatN_t(b, 3.0, x->bit_size); - - /* t = clamp((x - edge0) / (edge1 - edge0), 0, 1) */ - nir_ssa_def *t = - nir_fsat(b, nir_fdiv(b, nir_fsub(b, x, edge0), - nir_fsub(b, edge1, edge0))); - - /* result = t * t * (3 - 2 * t) */ - return nir_fmul(b, t, nir_fmul(b, t, nir_a_minus_bc(b, f3, f2, t))); -} - -nir_ssa_def* -nir_upsample(nir_builder *b, nir_ssa_def *hi, nir_ssa_def *lo) -{ - assert(lo->num_components == hi->num_components); - assert(lo->bit_size == hi->bit_size); - - nir_ssa_def *res[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < lo->num_components; ++i) { - nir_ssa_def *vec = nir_vec2(b, nir_channel(b, lo, i), nir_channel(b, hi, i)); - res[i] = nir_pack_bits(b, vec, vec->bit_size * 2); - } - - return nir_vec(b, res, lo->num_components); -} - -/** - * Compute xs[0] + xs[1] + xs[2] + ... using fadd. - */ -static nir_ssa_def * -build_fsum(nir_builder *b, nir_ssa_def **xs, int terms) -{ - nir_ssa_def *accum = xs[0]; - - for (int i = 1; i < terms; i++) - accum = nir_fadd(b, accum, xs[i]); - - return accum; -} - -nir_ssa_def * -nir_atan(nir_builder *b, nir_ssa_def *y_over_x) -{ - const uint32_t bit_size = y_over_x->bit_size; - - nir_ssa_def *abs_y_over_x = nir_fabs(b, y_over_x); - nir_ssa_def *one = nir_imm_floatN_t(b, 1.0f, bit_size); - - /* - * range-reduction, first step: - * - * / y_over_x if |y_over_x| <= 1.0; - * x = < - * \ 1.0 / y_over_x otherwise - */ - nir_ssa_def *x = nir_fdiv(b, nir_fmin(b, abs_y_over_x, one), - nir_fmax(b, abs_y_over_x, one)); - - /* - * approximate atan by evaluating polynomial: - * - * x * 0.9999793128310355 - x^3 * 0.3326756418091246 + - * x^5 * 0.1938924977115610 - x^7 * 0.1173503194786851 + - * x^9 * 0.0536813784310406 - x^11 * 0.0121323213173444 - */ - nir_ssa_def *x_2 = nir_fmul(b, x, x); - nir_ssa_def *x_3 = nir_fmul(b, x_2, x); - nir_ssa_def *x_5 = nir_fmul(b, x_3, x_2); - nir_ssa_def *x_7 = nir_fmul(b, x_5, x_2); - nir_ssa_def *x_9 = nir_fmul(b, x_7, x_2); - nir_ssa_def *x_11 = nir_fmul(b, x_9, x_2); - - nir_ssa_def *polynomial_terms[] = { - nir_fmul_imm(b, x, 0.9999793128310355f), - nir_fmul_imm(b, x_3, -0.3326756418091246f), - nir_fmul_imm(b, x_5, 0.1938924977115610f), - nir_fmul_imm(b, x_7, -0.1173503194786851f), - nir_fmul_imm(b, x_9, 0.0536813784310406f), - nir_fmul_imm(b, x_11, -0.0121323213173444f), - }; - - nir_ssa_def *tmp = - build_fsum(b, polynomial_terms, ARRAY_SIZE(polynomial_terms)); - - /* range-reduction fixup */ - tmp = nir_ffma(b, - nir_b2fN(b, nir_flt(b, one, abs_y_over_x), bit_size), - nir_ffma_imm12(b, tmp, -2.0f, M_PI_2), - tmp); - - /* sign fixup */ - nir_ssa_def *result = nir_fmul(b, tmp, nir_fsign(b, y_over_x)); - - /* The fmin and fmax above will filter out NaN values. This leads to - * non-NaN results for NaN inputs. Work around this by doing - * - * !isnan(y_over_x) ? ... : y_over_x; - */ - if (b->exact || - nir_is_float_control_signed_zero_inf_nan_preserve(b->shader->info.float_controls_execution_mode, bit_size)) { - const bool exact = b->exact; - - b->exact = true; - nir_ssa_def *is_not_nan = nir_feq(b, y_over_x, y_over_x); - b->exact = exact; - - /* The extra 1.0*y_over_x ensures that subnormal results are flushed to - * zero. - */ - result = nir_bcsel(b, is_not_nan, result, nir_fmul_imm(b, y_over_x, 1.0)); - } - - return result; -} - -nir_ssa_def * -nir_atan2(nir_builder *b, nir_ssa_def *y, nir_ssa_def *x) -{ - assert(y->bit_size == x->bit_size); - const uint32_t bit_size = x->bit_size; - - nir_ssa_def *zero = nir_imm_floatN_t(b, 0, bit_size); - nir_ssa_def *one = nir_imm_floatN_t(b, 1, bit_size); - - /* If we're on the left half-plane rotate the coordinates π/2 clock-wise - * for the y=0 discontinuity to end up aligned with the vertical - * discontinuity of atan(s/t) along t=0. This also makes sure that we - * don't attempt to divide by zero along the vertical line, which may give - * unspecified results on non-GLSL 4.1-capable hardware. - */ - nir_ssa_def *flip = nir_fge(b, zero, x); - nir_ssa_def *s = nir_bcsel(b, flip, nir_fabs(b, x), y); - nir_ssa_def *t = nir_bcsel(b, flip, y, nir_fabs(b, x)); - - /* If the magnitude of the denominator exceeds some huge value, scale down - * the arguments in order to prevent the reciprocal operation from flushing - * its result to zero, which would cause precision problems, and for s - * infinite would cause us to return a NaN instead of the correct finite - * value. - * - * If fmin and fmax are respectively the smallest and largest positive - * normalized floating point values representable by the implementation, - * the constants below should be in agreement with: - * - * huge <= 1 / fmin - * scale <= 1 / fmin / fmax (for |t| >= huge) - * - * In addition scale should be a negative power of two in order to avoid - * loss of precision. The values chosen below should work for most usual - * floating point representations with at least the dynamic range of ATI's - * 24-bit representation. - */ - const double huge_val = bit_size >= 32 ? 1e18 : 16384; - nir_ssa_def *huge = nir_imm_floatN_t(b, huge_val, bit_size); - nir_ssa_def *scale = nir_bcsel(b, nir_fge(b, nir_fabs(b, t), huge), - nir_imm_floatN_t(b, 0.25, bit_size), one); - nir_ssa_def *rcp_scaled_t = nir_frcp(b, nir_fmul(b, t, scale)); - nir_ssa_def *s_over_t = nir_fmul(b, nir_fmul(b, s, scale), rcp_scaled_t); - - /* For |x| = |y| assume tan = 1 even if infinite (i.e. pretend momentarily - * that ∞/∞ = 1) in order to comply with the rather artificial rules - * inherited from IEEE 754-2008, namely: - * - * "atan2(±∞, −∞) is ±3π/4 - * atan2(±∞, +∞) is ±π/4" - * - * Note that this is inconsistent with the rules for the neighborhood of - * zero that are based on iterated limits: - * - * "atan2(±0, −0) is ±π - * atan2(±0, +0) is ±0" - * - * but GLSL specifically allows implementations to deviate from IEEE rules - * at (0,0), so we take that license (i.e. pretend that 0/0 = 1 here as - * well). - */ - nir_ssa_def *tan = nir_bcsel(b, nir_feq(b, nir_fabs(b, x), nir_fabs(b, y)), - one, nir_fabs(b, s_over_t)); - - /* Calculate the arctangent and fix up the result if we had flipped the - * coordinate system. - */ - nir_ssa_def *arc = - nir_ffma_imm1(b, nir_b2fN(b, flip, bit_size), M_PI_2, nir_atan(b, tan)); - - /* Rather convoluted calculation of the sign of the result. When x < 0 we - * cannot use fsign because we need to be able to distinguish between - * negative and positive zero. We don't use bitwise arithmetic tricks for - * consistency with the GLSL front-end. When x >= 0 rcp_scaled_t will - * always be non-negative so this won't be able to distinguish between - * negative and positive zero, but we don't care because atan2 is - * continuous along the whole positive y = 0 half-line, so it won't affect - * the result significantly. - */ - return nir_bcsel(b, nir_flt(b, nir_fmin(b, y, rcp_scaled_t), zero), - nir_fneg(b, arc), arc); -} - -nir_ssa_def * -nir_get_texture_size(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_before_instr(&tex->instr); - - nir_tex_instr *txs; - - unsigned num_srcs = 1; /* One for the LOD */ - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (tex->src[i].src_type == nir_tex_src_texture_deref || - tex->src[i].src_type == nir_tex_src_sampler_deref || - tex->src[i].src_type == nir_tex_src_texture_offset || - tex->src[i].src_type == nir_tex_src_sampler_offset || - tex->src[i].src_type == nir_tex_src_texture_handle || - tex->src[i].src_type == nir_tex_src_sampler_handle) - num_srcs++; - } - - txs = nir_tex_instr_create(b->shader, num_srcs); - txs->op = nir_texop_txs; - txs->sampler_dim = tex->sampler_dim; - txs->is_array = tex->is_array; - txs->is_shadow = tex->is_shadow; - txs->is_new_style_shadow = tex->is_new_style_shadow; - txs->texture_index = tex->texture_index; - txs->sampler_index = tex->sampler_index; - txs->dest_type = nir_type_int32; - - unsigned idx = 0; - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (tex->src[i].src_type == nir_tex_src_texture_deref || - tex->src[i].src_type == nir_tex_src_sampler_deref || - tex->src[i].src_type == nir_tex_src_texture_offset || - tex->src[i].src_type == nir_tex_src_sampler_offset || - tex->src[i].src_type == nir_tex_src_texture_handle || - tex->src[i].src_type == nir_tex_src_sampler_handle) { - nir_src_copy(&txs->src[idx].src, &tex->src[i].src, &txs->instr); - txs->src[idx].src_type = tex->src[i].src_type; - idx++; - } - } - /* Add in an LOD because some back-ends require it */ - txs->src[idx].src = nir_src_for_ssa(nir_imm_int(b, 0)); - txs->src[idx].src_type = nir_tex_src_lod; - - nir_ssa_dest_init(&txs->instr, &txs->dest, - nir_tex_instr_dest_size(txs), 32, NULL); - nir_builder_instr_insert(b, &txs->instr); - - return &txs->dest.ssa; -} - -nir_ssa_def * -nir_get_texture_lod(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_before_instr(&tex->instr); - - nir_tex_instr *tql; - - unsigned num_srcs = 0; - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (tex->src[i].src_type == nir_tex_src_coord || - tex->src[i].src_type == nir_tex_src_texture_deref || - tex->src[i].src_type == nir_tex_src_sampler_deref || - tex->src[i].src_type == nir_tex_src_texture_offset || - tex->src[i].src_type == nir_tex_src_sampler_offset || - tex->src[i].src_type == nir_tex_src_texture_handle || - tex->src[i].src_type == nir_tex_src_sampler_handle) - num_srcs++; - } - - tql = nir_tex_instr_create(b->shader, num_srcs); - tql->op = nir_texop_lod; - tql->coord_components = tex->coord_components; - tql->sampler_dim = tex->sampler_dim; - tql->is_array = tex->is_array; - tql->is_shadow = tex->is_shadow; - tql->is_new_style_shadow = tex->is_new_style_shadow; - tql->texture_index = tex->texture_index; - tql->sampler_index = tex->sampler_index; - tql->dest_type = nir_type_float32; - - unsigned idx = 0; - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (tex->src[i].src_type == nir_tex_src_coord || - tex->src[i].src_type == nir_tex_src_texture_deref || - tex->src[i].src_type == nir_tex_src_sampler_deref || - tex->src[i].src_type == nir_tex_src_texture_offset || - tex->src[i].src_type == nir_tex_src_sampler_offset || - tex->src[i].src_type == nir_tex_src_texture_handle || - tex->src[i].src_type == nir_tex_src_sampler_handle) { - nir_src_copy(&tql->src[idx].src, &tex->src[i].src, &tql->instr); - tql->src[idx].src_type = tex->src[i].src_type; - idx++; - } - } - - nir_ssa_dest_init(&tql->instr, &tql->dest, 2, 32, NULL); - nir_builder_instr_insert(b, &tql->instr); - - /* The LOD is the y component of the result */ - return nir_channel(b, &tql->dest.ssa, 1); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builtin_builder.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builtin_builder.h deleted file mode 100644 index ab40a8c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_builtin_builder.h +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright © 2018 Red Hat Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_BUILTIN_BUILDER_H -#define NIR_BUILTIN_BUILDER_H - -#include "../../util/u_math.h" -#include "nir_builder.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Functions are sorted alphabetically with removed type and "fast" prefix. - * Definitions for functions in the C file come first. - */ - -nir_ssa_def* nir_cross3(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y); -nir_ssa_def* nir_cross4(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y); -nir_ssa_def* nir_fast_length(nir_builder *b, nir_ssa_def *vec); -nir_ssa_def* nir_nextafter(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y); -nir_ssa_def* nir_normalize(nir_builder *b, nir_ssa_def *vec); -nir_ssa_def* nir_smoothstep(nir_builder *b, nir_ssa_def *edge0, - nir_ssa_def *edge1, nir_ssa_def *x); -nir_ssa_def* nir_upsample(nir_builder *b, nir_ssa_def *hi, nir_ssa_def *lo); -nir_ssa_def* nir_atan(nir_builder *b, nir_ssa_def *y_over_x); -nir_ssa_def* nir_atan2(nir_builder *b, nir_ssa_def *y, nir_ssa_def *x); - -nir_ssa_def * -nir_get_texture_lod(nir_builder *b, nir_tex_instr *tex); - -nir_ssa_def * -nir_get_texture_size(nir_builder *b, nir_tex_instr *tex); - -static inline nir_ssa_def * -nir_fisnan(nir_builder *b, nir_ssa_def *x) -{ - bool old_exact = b->exact; - b->exact = true; - nir_ssa_def *res = nir_fneu(b, x, x); - b->exact = old_exact; - return res; -} - -static inline nir_ssa_def * -nir_nan_check2(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *res) -{ - return nir_bcsel(b, nir_fisnan(b, x), x, nir_bcsel(b, nir_fisnan(b, y), y, res)); -} - -static inline nir_ssa_def * -nir_fmax_abs_vec_comp(nir_builder *b, nir_ssa_def *vec) -{ - nir_ssa_def *abs = nir_fabs(b, vec); - nir_ssa_def *res = nir_channel(b, abs, 0); - for (unsigned i = 1; i < vec->num_components; ++i) - res = nir_fmax(b, res, nir_channel(b, abs, i)); - return res; -} - -static inline nir_ssa_def * -nir_iabs_diff(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *cond = nir_ige(b, x, y); - nir_ssa_def *res0 = nir_isub(b, x, y); - nir_ssa_def *res1 = nir_isub(b, y, x); - return nir_bcsel(b, cond, res0, res1); -} - -static inline nir_ssa_def * -nir_uabs_diff(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *cond = nir_uge(b, x, y); - nir_ssa_def *res0 = nir_isub(b, x, y); - nir_ssa_def *res1 = nir_isub(b, y, x); - return nir_bcsel(b, cond, res0, res1); -} - -static inline nir_ssa_def * -nir_fexp(nir_builder *b, nir_ssa_def *x) -{ - return nir_fexp2(b, nir_fmul_imm(b, x, M_LOG2E)); -} - -static inline nir_ssa_def * -nir_flog(nir_builder *b, nir_ssa_def *x) -{ - return nir_fmul_imm(b, nir_flog2(b, x), 1.0 / M_LOG2E); -} - -static inline nir_ssa_def * -nir_imad24(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *z) -{ - nir_ssa_def *temp = nir_imul24(b, x, y); - return nir_iadd(b, temp, z); -} - -static inline nir_ssa_def * -nir_imad_hi(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *z) -{ - nir_ssa_def *temp = nir_imul_high(b, x, y); - return nir_iadd(b, temp, z); -} - -static inline nir_ssa_def * -nir_umad_hi(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *z) -{ - nir_ssa_def *temp = nir_umul_high(b, x, y); - return nir_iadd(b, temp, z); -} - -static inline nir_ssa_def * -nir_bitselect(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *s) -{ - return nir_ior(b, nir_iand(b, nir_inot(b, s), x), nir_iand(b, s, y)); -} - -static inline nir_ssa_def * -nir_copysign(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - uint64_t masks = 1ull << (x->bit_size - 1); - uint64_t maskv = ~masks; - - nir_ssa_def *s = nir_imm_intN_t(b, masks, x->bit_size); - nir_ssa_def *v = nir_imm_intN_t(b, maskv, x->bit_size); - - return nir_ior(b, nir_iand(b, x, v), nir_iand(b, y, s)); -} - -static inline nir_ssa_def * -nir_degrees(nir_builder *b, nir_ssa_def *val) -{ - return nir_fmul_imm(b, val, 180.0 / M_PI); -} - -static inline nir_ssa_def * -nir_fdim(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *cond = nir_flt(b, y, x); - nir_ssa_def *res = nir_fsub(b, x, y); - nir_ssa_def *zero = nir_imm_floatN_t(b, 0.0, x->bit_size); - - // return NaN if either x or y are NaN, else x-y if x>y, else +0.0 - return nir_nan_check2(b, x, y, nir_bcsel(b, cond, res, zero)); -} - -static inline nir_ssa_def * -nir_fast_distance(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - return nir_fast_length(b, nir_fsub(b, x, y)); -} - -static inline nir_ssa_def* -nir_fast_normalize(nir_builder *b, nir_ssa_def *vec) -{ - return nir_fdiv(b, vec, nir_fast_length(b, vec)); -} - -static inline nir_ssa_def* -nir_fmad(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *z) -{ - return nir_fadd(b, nir_fmul(b, x, y), z); -} - -static inline nir_ssa_def* -nir_maxmag(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *xabs = nir_fabs(b, x); - nir_ssa_def *yabs = nir_fabs(b, y); - - nir_ssa_def *condy = nir_flt(b, xabs, yabs); - nir_ssa_def *condx = nir_flt(b, yabs, xabs); - - return nir_bcsel(b, condy, y, nir_bcsel(b, condx, x, nir_fmax(b, x, y))); -} - -static inline nir_ssa_def* -nir_minmag(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *xabs = nir_fabs(b, x); - nir_ssa_def *yabs = nir_fabs(b, y); - - nir_ssa_def *condx = nir_flt(b, xabs, yabs); - nir_ssa_def *condy = nir_flt(b, yabs, xabs); - - return nir_bcsel(b, condy, y, nir_bcsel(b, condx, x, nir_fmin(b, x, y))); -} - -static inline nir_ssa_def* -nir_nan(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *nan = nir_imm_floatN_t(b, NAN, x->bit_size); - if (x->num_components == 1) - return nan; - - nir_ssa_def *nans[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < x->num_components; ++i) - nans[i] = nan; - - return nir_vec(b, nans, x->num_components); -} - -static inline nir_ssa_def * -nir_radians(nir_builder *b, nir_ssa_def *val) -{ - return nir_fmul_imm(b, val, M_PI / 180.0); -} - -static inline nir_ssa_def * -nir_select(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *s) -{ - if (s->num_components != 1) { - uint64_t mask = 1ull << (s->bit_size - 1); - s = nir_iand(b, s, nir_imm_intN_t(b, mask, s->bit_size)); - } - return nir_bcsel(b, nir_ieq_imm(b, s, 0), x, y); -} - -static inline nir_ssa_def * -nir_ftan(nir_builder *b, nir_ssa_def *x) -{ - return nir_fdiv(b, nir_fsin(b, x), nir_fcos(b, x)); -} - -static inline nir_ssa_def * -nir_clz_u(nir_builder *b, nir_ssa_def *a) -{ - nir_ssa_def *val; - val = nir_isub(b, nir_imm_intN_t(b, a->bit_size - 1, 32), - nir_ufind_msb(b, nir_u2uN(b, a, MAX2(a->bit_size, 32)))); - return nir_u2uN(b, val, a->bit_size); -} - -static inline nir_ssa_def * -nir_ctz_u(nir_builder *b, nir_ssa_def *a) -{ - nir_ssa_def *cond = nir_ieq(b, a, nir_imm_intN_t(b, 0, a->bit_size)); - - return nir_bcsel(b, cond, - nir_imm_intN_t(b, a->bit_size, a->bit_size), - nir_u2uN(b, nir_find_lsb(b, a), a->bit_size)); -} - -#ifdef __cplusplus -} -#endif - -#endif /* NIR_BUILTIN_BUILDER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_clone.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_clone.c deleted file mode 100644 index 996135b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_clone.c +++ /dev/null @@ -1,836 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_control_flow.h" -#include "nir_xfb_info.h" - -/* Secret Decoder Ring: - * clone_foo(): - * Allocate and clone a foo. - * __clone_foo(): - * Clone body of foo (ie. parent class, embedded struct, etc) - */ - -typedef struct { - /* True if we are cloning an entire shader. */ - bool global_clone; - - /* If true allows the clone operation to fall back to the original pointer - * if no clone pointer is found in the remap table. This allows us to - * clone a loop body without having to add srcs from outside the loop to - * the remap table. This is useful for loop unrolling. - */ - bool allow_remap_fallback; - - /* maps orig ptr -> cloned ptr: */ - struct hash_table *remap_table; - - /* List of phi sources. */ - struct list_head phi_srcs; - - /* new shader object, used as memctx for just about everything else: */ - nir_shader *ns; -} clone_state; - -static void -init_clone_state(clone_state *state, struct hash_table *remap_table, - bool global, bool allow_remap_fallback) -{ - state->global_clone = global; - state->allow_remap_fallback = allow_remap_fallback; - - if (remap_table) { - state->remap_table = remap_table; - } else { - state->remap_table = _mesa_pointer_hash_table_create(NULL); - } - - list_inithead(&state->phi_srcs); -} - -static void -free_clone_state(clone_state *state) -{ - _mesa_hash_table_destroy(state->remap_table, NULL); -} - -static inline void * -_lookup_ptr(clone_state *state, const void *ptr, bool global) -{ - struct hash_entry *entry; - - if (!ptr) - return NULL; - - if (!state->global_clone && global) - return (void *)ptr; - - if (unlikely(!state->remap_table)) { - assert(state->allow_remap_fallback); - return (void *)ptr; - } - - entry = _mesa_hash_table_search(state->remap_table, ptr); - if (!entry) { - assert(state->allow_remap_fallback); - return (void *)ptr; - } - - return entry->data; -} - -static void -add_remap(clone_state *state, void *nptr, const void *ptr) -{ - _mesa_hash_table_insert(state->remap_table, ptr, nptr); -} - -static void * -remap_local(clone_state *state, const void *ptr) -{ - return _lookup_ptr(state, ptr, false); -} - -static void * -remap_global(clone_state *state, const void *ptr) -{ - return _lookup_ptr(state, ptr, true); -} - -static nir_register * -remap_reg(clone_state *state, const nir_register *reg) -{ - return _lookup_ptr(state, reg, false); -} - -static nir_variable * -remap_var(clone_state *state, const nir_variable *var) -{ - return _lookup_ptr(state, var, nir_variable_is_global(var)); -} - -nir_constant * -nir_constant_clone(const nir_constant *c, nir_variable *nvar) -{ - nir_constant *nc = ralloc(nvar, nir_constant); - - memcpy(nc->values, c->values, sizeof(nc->values)); - nc->num_elements = c->num_elements; - nc->elements = ralloc_array(nvar, nir_constant *, c->num_elements); - for (unsigned i = 0; i < c->num_elements; i++) { - nc->elements[i] = nir_constant_clone(c->elements[i], nvar); - } - - return nc; -} - -/* NOTE: for cloning nir_variables, bypass nir_variable_create to avoid - * having to deal with locals and globals separately: - */ -nir_variable * -nir_variable_clone(const nir_variable *var, nir_shader *shader) -{ - nir_variable *nvar = rzalloc(shader, nir_variable); - - nvar->type = var->type; - nvar->name = ralloc_strdup(nvar, var->name); - nvar->data = var->data; - nvar->num_state_slots = var->num_state_slots; - if (var->num_state_slots) { - nvar->state_slots = ralloc_array(nvar, nir_state_slot, var->num_state_slots); - memcpy(nvar->state_slots, var->state_slots, - var->num_state_slots * sizeof(nir_state_slot)); - } - if (var->constant_initializer) { - nvar->constant_initializer = - nir_constant_clone(var->constant_initializer, nvar); - } - nvar->interface_type = var->interface_type; - - nvar->num_members = var->num_members; - if (var->num_members) { - nvar->members = ralloc_array(nvar, struct nir_variable_data, - var->num_members); - memcpy(nvar->members, var->members, - var->num_members * sizeof(*var->members)); - } - - return nvar; -} - -static nir_variable * -clone_variable(clone_state *state, const nir_variable *var) -{ - nir_variable *nvar = nir_variable_clone(var, state->ns); - add_remap(state, nvar, var); - - return nvar; -} - -/* clone list of nir_variable: */ -static void -clone_var_list(clone_state *state, struct exec_list *dst, - const struct exec_list *list) -{ - exec_list_make_empty(dst); - foreach_list_typed(nir_variable, var, node, list) { - nir_variable *nvar = clone_variable(state, var); - exec_list_push_tail(dst, &nvar->node); - } -} - -/* NOTE: for cloning nir_registers, bypass nir_global/local_reg_create() - * to avoid having to deal with locals and globals separately: - */ -static nir_register * -clone_register(clone_state *state, const nir_register *reg) -{ - nir_register *nreg = rzalloc(state->ns, nir_register); - add_remap(state, nreg, reg); - - nreg->num_components = reg->num_components; - nreg->bit_size = reg->bit_size; - nreg->num_array_elems = reg->num_array_elems; - nreg->index = reg->index; - - /* reconstructing uses/defs handled by nir_instr_insert() */ - list_inithead(&nreg->uses); - list_inithead(&nreg->defs); - - return nreg; -} - -/* clone list of nir_register: */ -static void -clone_reg_list(clone_state *state, struct exec_list *dst, - const struct exec_list *list) -{ - exec_list_make_empty(dst); - foreach_list_typed(nir_register, reg, node, list) { - nir_register *nreg = clone_register(state, reg); - exec_list_push_tail(dst, &nreg->node); - } -} - -static void -__clone_src(clone_state *state, void *ninstr_or_if, - nir_src *nsrc, const nir_src *src) -{ - nsrc->is_ssa = src->is_ssa; - if (src->is_ssa) { - nsrc->ssa = remap_local(state, src->ssa); - } else { - nsrc->reg.reg = remap_reg(state, src->reg.reg); - if (src->reg.indirect) { - nsrc->reg.indirect = gc_alloc(state->ns->gctx, nir_src, 1); - __clone_src(state, ninstr_or_if, nsrc->reg.indirect, src->reg.indirect); - } - nsrc->reg.base_offset = src->reg.base_offset; - } -} - -static void -__clone_dst(clone_state *state, nir_instr *ninstr, - nir_dest *ndst, const nir_dest *dst) -{ - ndst->is_ssa = dst->is_ssa; - if (dst->is_ssa) { - nir_ssa_dest_init(ninstr, ndst, dst->ssa.num_components, - dst->ssa.bit_size, NULL); - if (likely(state->remap_table)) - add_remap(state, &ndst->ssa, &dst->ssa); - } else { - ndst->reg.reg = remap_reg(state, dst->reg.reg); - if (dst->reg.indirect) { - ndst->reg.indirect = gc_alloc(state->ns->gctx, nir_src, 1); - __clone_src(state, ninstr, ndst->reg.indirect, dst->reg.indirect); - } - ndst->reg.base_offset = dst->reg.base_offset; - } -} - -static nir_alu_instr * -clone_alu(clone_state *state, const nir_alu_instr *alu) -{ - nir_alu_instr *nalu = nir_alu_instr_create(state->ns, alu->op); - nalu->exact = alu->exact; - nalu->no_signed_wrap = alu->no_signed_wrap; - nalu->no_unsigned_wrap = alu->no_unsigned_wrap; - - __clone_dst(state, &nalu->instr, &nalu->dest.dest, &alu->dest.dest); - nalu->dest.saturate = alu->dest.saturate; - nalu->dest.write_mask = alu->dest.write_mask; - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - __clone_src(state, &nalu->instr, &nalu->src[i].src, &alu->src[i].src); - nalu->src[i].negate = alu->src[i].negate; - nalu->src[i].abs = alu->src[i].abs; - memcpy(nalu->src[i].swizzle, alu->src[i].swizzle, - sizeof(nalu->src[i].swizzle)); - } - - return nalu; -} - -nir_alu_instr * -nir_alu_instr_clone(nir_shader *shader, const nir_alu_instr *orig) -{ - clone_state state = { - .allow_remap_fallback = true, - .ns = shader, - }; - return clone_alu(&state, orig); -} - -static nir_deref_instr * -clone_deref_instr(clone_state *state, const nir_deref_instr *deref) -{ - nir_deref_instr *nderef = - nir_deref_instr_create(state->ns, deref->deref_type); - - __clone_dst(state, &nderef->instr, &nderef->dest, &deref->dest); - - nderef->modes = deref->modes; - nderef->type = deref->type; - - if (deref->deref_type == nir_deref_type_var) { - nderef->var = remap_var(state, deref->var); - return nderef; - } - - __clone_src(state, &nderef->instr, &nderef->parent, &deref->parent); - - switch (deref->deref_type) { - case nir_deref_type_struct: - nderef->strct.index = deref->strct.index; - break; - - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: - __clone_src(state, &nderef->instr, - &nderef->arr.index, &deref->arr.index); - nderef->arr.in_bounds = deref->arr.in_bounds; - break; - - case nir_deref_type_array_wildcard: - /* Nothing to do */ - break; - - case nir_deref_type_cast: - nderef->cast.ptr_stride = deref->cast.ptr_stride; - nderef->cast.align_mul = deref->cast.align_mul; - nderef->cast.align_offset = deref->cast.align_offset; - break; - - default: - unreachable("Invalid instruction deref type"); - } - - return nderef; -} - -static nir_intrinsic_instr * -clone_intrinsic(clone_state *state, const nir_intrinsic_instr *itr) -{ - nir_intrinsic_instr *nitr = - nir_intrinsic_instr_create(state->ns, itr->intrinsic); - - unsigned num_srcs = nir_intrinsic_infos[itr->intrinsic].num_srcs; - - if (nir_intrinsic_infos[itr->intrinsic].has_dest) - __clone_dst(state, &nitr->instr, &nitr->dest, &itr->dest); - - nitr->num_components = itr->num_components; - memcpy(nitr->const_index, itr->const_index, sizeof(nitr->const_index)); - - for (unsigned i = 0; i < num_srcs; i++) - __clone_src(state, &nitr->instr, &nitr->src[i], &itr->src[i]); - - return nitr; -} - -static nir_load_const_instr * -clone_load_const(clone_state *state, const nir_load_const_instr *lc) -{ - nir_load_const_instr *nlc = - nir_load_const_instr_create(state->ns, lc->def.num_components, - lc->def.bit_size); - - memcpy(&nlc->value, &lc->value, sizeof(*nlc->value) * lc->def.num_components); - - add_remap(state, &nlc->def, &lc->def); - - return nlc; -} - -static nir_ssa_undef_instr * -clone_ssa_undef(clone_state *state, const nir_ssa_undef_instr *sa) -{ - nir_ssa_undef_instr *nsa = - nir_ssa_undef_instr_create(state->ns, sa->def.num_components, - sa->def.bit_size); - - add_remap(state, &nsa->def, &sa->def); - - return nsa; -} - -static nir_tex_instr * -clone_tex(clone_state *state, const nir_tex_instr *tex) -{ - nir_tex_instr *ntex = nir_tex_instr_create(state->ns, tex->num_srcs); - - ntex->sampler_dim = tex->sampler_dim; - ntex->dest_type = tex->dest_type; - ntex->op = tex->op; - __clone_dst(state, &ntex->instr, &ntex->dest, &tex->dest); - for (unsigned i = 0; i < ntex->num_srcs; i++) { - ntex->src[i].src_type = tex->src[i].src_type; - __clone_src(state, &ntex->instr, &ntex->src[i].src, &tex->src[i].src); - } - ntex->coord_components = tex->coord_components; - ntex->is_array = tex->is_array; - ntex->array_is_lowered_cube = tex->array_is_lowered_cube; - ntex->is_shadow = tex->is_shadow; - ntex->is_new_style_shadow = tex->is_new_style_shadow; - ntex->is_sparse = tex->is_sparse; - ntex->component = tex->component; - memcpy(ntex->tg4_offsets, tex->tg4_offsets, sizeof(tex->tg4_offsets)); - - ntex->texture_index = tex->texture_index; - ntex->sampler_index = tex->sampler_index; - - ntex->texture_non_uniform = tex->texture_non_uniform; - ntex->sampler_non_uniform = tex->sampler_non_uniform; - - return ntex; -} - -static nir_phi_instr * -clone_phi(clone_state *state, const nir_phi_instr *phi, nir_block *nblk) -{ - nir_phi_instr *nphi = nir_phi_instr_create(state->ns); - - __clone_dst(state, &nphi->instr, &nphi->dest, &phi->dest); - - /* Cloning a phi node is a bit different from other instructions. The - * sources of phi instructions are the only time where we can use an SSA - * def before it is defined. In order to handle this, we just copy over - * the sources from the old phi instruction directly and then fix them up - * in a second pass once all the instrutions in the function have been - * properly cloned. - * - * In order to ensure that the copied sources (which are the same as the - * old phi instruction's sources for now) don't get inserted into the old - * shader's use-def lists, we have to add the phi instruction *before* we - * set up its sources. - */ - nir_instr_insert_after_block(nblk, &nphi->instr); - - nir_foreach_phi_src(src, phi) { - nir_phi_src *nsrc = nir_phi_instr_add_src(nphi, src->pred, src->src); - - /* Stash it in the list of phi sources. We'll walk this list and fix up - * sources at the very end of clone_function_impl. - */ - list_add(&nsrc->src.use_link, &state->phi_srcs); - } - - return nphi; -} - -static nir_jump_instr * -clone_jump(clone_state *state, const nir_jump_instr *jmp) -{ - /* These aren't handled because they require special block linking */ - assert(jmp->type != nir_jump_goto && jmp->type != nir_jump_goto_if); - - nir_jump_instr *njmp = nir_jump_instr_create(state->ns, jmp->type); - - return njmp; -} - -static nir_call_instr * -clone_call(clone_state *state, const nir_call_instr *call) -{ - nir_function *ncallee = remap_global(state, call->callee); - nir_call_instr *ncall = nir_call_instr_create(state->ns, ncallee); - - for (unsigned i = 0; i < ncall->num_params; i++) - __clone_src(state, ncall, &ncall->params[i], &call->params[i]); - - return ncall; -} - -static nir_instr * -clone_instr(clone_state *state, const nir_instr *instr) -{ - switch (instr->type) { - case nir_instr_type_alu: - return &clone_alu(state, nir_instr_as_alu(instr))->instr; - case nir_instr_type_deref: - return &clone_deref_instr(state, nir_instr_as_deref(instr))->instr; - case nir_instr_type_intrinsic: - return &clone_intrinsic(state, nir_instr_as_intrinsic(instr))->instr; - case nir_instr_type_load_const: - return &clone_load_const(state, nir_instr_as_load_const(instr))->instr; - case nir_instr_type_ssa_undef: - return &clone_ssa_undef(state, nir_instr_as_ssa_undef(instr))->instr; - case nir_instr_type_tex: - return &clone_tex(state, nir_instr_as_tex(instr))->instr; - case nir_instr_type_phi: - unreachable("Cannot clone phis with clone_instr"); - case nir_instr_type_jump: - return &clone_jump(state, nir_instr_as_jump(instr))->instr; - case nir_instr_type_call: - return &clone_call(state, nir_instr_as_call(instr))->instr; - case nir_instr_type_parallel_copy: - unreachable("Cannot clone parallel copies"); - default: - unreachable("bad instr type"); - return NULL; - } -} - -nir_instr * -nir_instr_clone(nir_shader *shader, const nir_instr *orig) -{ - clone_state state = { - .allow_remap_fallback = true, - .ns = shader, - }; - return clone_instr(&state, orig); -} - -nir_instr * -nir_instr_clone_deep(nir_shader *shader, const nir_instr *orig, - struct hash_table *remap_table) -{ - clone_state state = { - .allow_remap_fallback = true, - .ns = shader, - .remap_table = remap_table, - }; - return clone_instr(&state, orig); -} - -static nir_block * -clone_block(clone_state *state, struct exec_list *cf_list, const nir_block *blk) -{ - /* Don't actually create a new block. Just use the one from the tail of - * the list. NIR guarantees that the tail of the list is a block and that - * no two blocks are side-by-side in the IR; It should be empty. - */ - nir_block *nblk = - exec_node_data(nir_block, exec_list_get_tail(cf_list), cf_node.node); - assert(nblk->cf_node.type == nir_cf_node_block); - assert(exec_list_is_empty(&nblk->instr_list)); - - /* We need this for phi sources */ - add_remap(state, nblk, blk); - - nir_foreach_instr(instr, blk) { - if (instr->type == nir_instr_type_phi) { - /* Phi instructions are a bit of a special case when cloning because - * we don't want inserting the instruction to automatically handle - * use/defs for us. Instead, we need to wait until all the - * blocks/instructions are in so that we can set their sources up. - */ - clone_phi(state, nir_instr_as_phi(instr), nblk); - } else { - nir_instr *ninstr = clone_instr(state, instr); - nir_instr_insert_after_block(nblk, ninstr); - } - } - - return nblk; -} - -static void -clone_cf_list(clone_state *state, struct exec_list *dst, - const struct exec_list *list); - -static nir_if * -clone_if(clone_state *state, struct exec_list *cf_list, const nir_if *i) -{ - nir_if *ni = nir_if_create(state->ns); - ni->control = i->control; - - __clone_src(state, ni, &ni->condition, &i->condition); - - nir_cf_node_insert_end(cf_list, &ni->cf_node); - - clone_cf_list(state, &ni->then_list, &i->then_list); - clone_cf_list(state, &ni->else_list, &i->else_list); - - return ni; -} - -static nir_loop * -clone_loop(clone_state *state, struct exec_list *cf_list, const nir_loop *loop) -{ - nir_loop *nloop = nir_loop_create(state->ns); - nloop->control = loop->control; - nloop->partially_unrolled = loop->partially_unrolled; - - nir_cf_node_insert_end(cf_list, &nloop->cf_node); - - clone_cf_list(state, &nloop->body, &loop->body); - if (nir_loop_has_continue_construct(loop)) { - nir_loop_add_continue_construct(nloop); - clone_cf_list(state, &nloop->continue_list, &loop->continue_list); - } - - return nloop; -} - -/* clone list of nir_cf_node: */ -static void -clone_cf_list(clone_state *state, struct exec_list *dst, - const struct exec_list *list) -{ - foreach_list_typed(nir_cf_node, cf, node, list) { - switch (cf->type) { - case nir_cf_node_block: - clone_block(state, dst, nir_cf_node_as_block(cf)); - break; - case nir_cf_node_if: - clone_if(state, dst, nir_cf_node_as_if(cf)); - break; - case nir_cf_node_loop: - clone_loop(state, dst, nir_cf_node_as_loop(cf)); - break; - default: - unreachable("bad cf type"); - } - } -} - -/* After we've cloned almost everything, we have to walk the list of phi - * sources and fix them up. Thanks to loops, the block and SSA value for a - * phi source may not be defined when we first encounter it. Instead, we - * add it to the phi_srcs list and we fix it up here. - */ -static void -fixup_phi_srcs(clone_state *state) -{ - list_for_each_entry_safe(nir_phi_src, src, &state->phi_srcs, src.use_link) { - src->pred = remap_local(state, src->pred); - - /* Remove from this list */ - list_del(&src->src.use_link); - - if (src->src.is_ssa) { - src->src.ssa = remap_local(state, src->src.ssa); - list_addtail(&src->src.use_link, &src->src.ssa->uses); - } else { - src->src.reg.reg = remap_reg(state, src->src.reg.reg); - list_addtail(&src->src.use_link, &src->src.reg.reg->uses); - } - } - assert(list_is_empty(&state->phi_srcs)); -} - -void -nir_cf_list_clone(nir_cf_list *dst, nir_cf_list *src, nir_cf_node *parent, - struct hash_table *remap_table) -{ - exec_list_make_empty(&dst->list); - dst->impl = src->impl; - - if (exec_list_is_empty(&src->list)) - return; - - clone_state state; - init_clone_state(&state, remap_table, false, true); - - /* We use the same shader */ - state.ns = src->impl->function->shader; - - /* The control-flow code assumes that the list of cf_nodes always starts - * and ends with a block. We start by adding an empty block. - */ - nir_block *nblk = nir_block_create(state.ns); - nblk->cf_node.parent = parent; - exec_list_push_tail(&dst->list, &nblk->cf_node.node); - - clone_cf_list(&state, &dst->list, &src->list); - - fixup_phi_srcs(&state); - - if (!remap_table) - free_clone_state(&state); -} - -static nir_function_impl * -clone_function_impl(clone_state *state, const nir_function_impl *fi) -{ - nir_function_impl *nfi = nir_function_impl_create_bare(state->ns); - - if (fi->preamble) - nfi->preamble = remap_global(state, fi->preamble); - - clone_var_list(state, &nfi->locals, &fi->locals); - clone_reg_list(state, &nfi->registers, &fi->registers); - nfi->reg_alloc = fi->reg_alloc; - - assert(list_is_empty(&state->phi_srcs)); - - clone_cf_list(state, &nfi->body, &fi->body); - - fixup_phi_srcs(state); - - /* All metadata is invalidated in the cloning process */ - nfi->valid_metadata = 0; - - return nfi; -} - -nir_function_impl * -nir_function_impl_clone(nir_shader *shader, const nir_function_impl *fi) -{ - clone_state state; - init_clone_state(&state, NULL, false, false); - - state.ns = shader; - - nir_function_impl *nfi = clone_function_impl(&state, fi); - - free_clone_state(&state); - - return nfi; -} - -static nir_function * -clone_function(clone_state *state, const nir_function *fxn, nir_shader *ns) -{ - assert(ns == state->ns); - nir_function *nfxn = nir_function_create(ns, fxn->name); - - /* Needed for call instructions */ - add_remap(state, nfxn, fxn); - - nfxn->num_params = fxn->num_params; - if (fxn->num_params) { - nfxn->params = ralloc_array(state->ns, nir_parameter, fxn->num_params); - memcpy(nfxn->params, fxn->params, sizeof(nir_parameter) * fxn->num_params); - } - nfxn->is_entrypoint = fxn->is_entrypoint; - nfxn->is_preamble = fxn->is_preamble; - - /* At first glance, it looks like we should clone the function_impl here. - * However, call instructions need to be able to reference at least the - * function and those will get processed as we clone the function_impls. - * We stop here and do function_impls as a second pass. - */ - - return nfxn; -} - -nir_shader * -nir_shader_clone(void *mem_ctx, const nir_shader *s) -{ - clone_state state; - init_clone_state(&state, NULL, true, false); - - nir_shader *ns = nir_shader_create(mem_ctx, s->info.stage, s->options, NULL); - state.ns = ns; - - clone_var_list(&state, &ns->variables, &s->variables); - - /* Go through and clone functions */ - foreach_list_typed(nir_function, fxn, node, &s->functions) - clone_function(&state, fxn, ns); - - /* Only after all functions are cloned can we clone the actual function - * implementations. This is because nir_call_instrs and preambles need to - * reference the functions of other functions and we don't know what order - * the functions will have in the list. - */ - nir_foreach_function(fxn, s) { - nir_function *nfxn = remap_global(&state, fxn); - nfxn->impl = clone_function_impl(&state, fxn->impl); - nfxn->impl->function = nfxn; - } - - ns->info = s->info; - ns->info.name = ralloc_strdup(ns, ns->info.name); - if (ns->info.label) - ns->info.label = ralloc_strdup(ns, ns->info.label); - - ns->num_inputs = s->num_inputs; - ns->num_uniforms = s->num_uniforms; - ns->num_outputs = s->num_outputs; - ns->scratch_size = s->scratch_size; - - ns->constant_data_size = s->constant_data_size; - if (s->constant_data_size > 0) { - ns->constant_data = ralloc_size(ns, s->constant_data_size); - memcpy(ns->constant_data, s->constant_data, s->constant_data_size); - } - - if (s->xfb_info) { - size_t size = nir_xfb_info_size(s->xfb_info->output_count); - ns->xfb_info = ralloc_size(ns, size); - memcpy(ns->xfb_info, s->xfb_info, size); - } - - free_clone_state(&state); - - return ns; -} - -/** Overwrites dst and replaces its contents with src - * - * Everything ralloc parented to dst and src itself (but not its children) - * will be freed. - * - * This should only be used by test code which needs to swap out shaders with - * a cloned or deserialized version. - */ -void -nir_shader_replace(nir_shader *dst, nir_shader *src) -{ - /* Delete all of dest's ralloc children */ - void *dead_ctx = ralloc_context(NULL); - ralloc_adopt(dead_ctx, dst); - ralloc_free(dead_ctx); - - /* Re-parent all of src's ralloc children to dst */ - ralloc_adopt(dst, src); - - memcpy(dst, src, sizeof(*dst)); - - /* We have to move all the linked lists over separately because we need the - * pointers in the list elements to point to the lists in dst and not src. - */ - exec_list_move_nodes_to(&src->variables, &dst->variables); - - /* Now move the functions over. This takes a tiny bit more work */ - exec_list_move_nodes_to(&src->functions, &dst->functions); - nir_foreach_function(function, dst) - function->shader = dst; - - ralloc_free(src); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.c deleted file mode 100644 index 3ab16df..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.c +++ /dev/null @@ -1,54397 +0,0 @@ -/* - * Copyright (C) 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include "../../util/rounding.h" /* for _mesa_roundeven */ -#include "../../util/half_float.h" -#include "../../util/double.h" -#include "../../util/softfloat.h" -#include "../../util/bigmath.h" -#include "../../util/format/format_utils.h" -#include "nir_constant_expressions.h" - -/** - * rief Checks if the provided value is a denorm and flushes it to zero. - */ -static void -constant_denorm_flush_to_zero(nir_const_value *value, unsigned bit_size) -{ - switch(bit_size) { - case 64: - if (0 == (value->u64 & 0x7ff0000000000000)) - value->u64 &= 0x8000000000000000; - break; - case 32: - if (0 == (value->u32 & 0x7f800000)) - value->u32 &= 0x80000000; - break; - case 16: - if (0 == (value->u16 & 0x7c00)) - value->u16 &= 0x8000; - } -} - -/** - * Evaluate one component of packSnorm4x8. - */ -static uint8_t -pack_snorm_1x8(float x) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * packSnorm4x8 - * ------------ - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - * - * We must first cast the float to an int, because casting a negative - * float to a uint is undefined. - */ - return (uint8_t) (int) - _mesa_roundevenf(CLAMP(x, -1.0f, +1.0f) * 127.0f); -} - -/** - * Evaluate one component of packSnorm2x16. - */ -static uint16_t -pack_snorm_1x16(float x) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * packSnorm2x16 - * ------------- - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm2x16: round(clamp(c, -1, +1) * 32767.0) - * - * We must first cast the float to an int, because casting a negative - * float to a uint is undefined. - */ - return (uint16_t) (int) - _mesa_roundevenf(CLAMP(x, -1.0f, +1.0f) * 32767.0f); -} - -/** - * Evaluate one component of unpackSnorm4x8. - */ -static float -unpack_snorm_1x8(uint8_t u) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * unpackSnorm4x8 - * -------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm4x8: clamp(f / 127.0, -1, +1) - */ - return CLAMP((int8_t) u / 127.0f, -1.0f, +1.0f); -} - -/** - * Evaluate one component of unpackSnorm2x16. - */ -static float -unpack_snorm_1x16(uint16_t u) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * unpackSnorm2x16 - * --------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - */ - return CLAMP((int16_t) u / 32767.0f, -1.0f, +1.0f); -} - -/** - * Evaluate one component packUnorm4x8. - */ -static uint8_t -pack_unorm_1x8(float x) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * packUnorm4x8 - * ------------ - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - */ - return (uint8_t) (int) - _mesa_roundevenf(CLAMP(x, 0.0f, 1.0f) * 255.0f); -} - -/** - * Evaluate one component packUnorm2x16. - */ -static uint16_t -pack_unorm_1x16(float x) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * packUnorm2x16 - * ------------- - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - */ - return (uint16_t) (int) - _mesa_roundevenf(CLAMP(x, 0.0f, 1.0f) * 65535.0f); -} - -/** - * Evaluate one component of unpackUnorm4x8. - */ -static float -unpack_unorm_1x8(uint8_t u) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * unpackUnorm4x8 - * -------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm4x8: f / 255.0 - */ - return (float) u / 255.0f; -} - -/** - * Evaluate one component of unpackUnorm2x16. - */ -static float -unpack_unorm_1x16(uint16_t u) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * unpackUnorm2x16 - * --------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm2x16: f / 65535.0 - */ - return (float) u / 65535.0f; -} - -/** - * Evaluate one component of packHalf2x16. - */ -static uint16_t -pack_half_1x16(float x) -{ - return _mesa_float_to_half(x); -} - -/** - * Evaluate one component of packHalf2x16, RTZ mode. - */ -static uint16_t -pack_half_1x16_rtz(float x) -{ - return _mesa_float_to_float16_rtz(x); -} - -/** - * Evaluate one component of unpackHalf2x16. - */ -static float -unpack_half_1x16_flush_to_zero(uint16_t u) -{ - if (0 == (u & 0x7c00)) - u &= 0x8000; - return _mesa_half_to_float(u); -} - -/** - * Evaluate one component of unpackHalf2x16. - */ -static float -unpack_half_1x16(uint16_t u) -{ - return _mesa_half_to_float(u); -} - -/* Some typed vector structures to make things like src0.y work */ -typedef int8_t int1_t; -typedef uint8_t uint1_t; -typedef float float16_t; -typedef float float32_t; -typedef double float64_t; -typedef bool bool1_t; -typedef bool bool8_t; -typedef bool bool16_t; -typedef bool bool32_t; -typedef bool bool64_t; -struct float16_vec { - float16_t x; - float16_t y; - float16_t z; - float16_t w; - float16_t e; - float16_t f; - float16_t g; - float16_t h; - float16_t i; - float16_t j; - float16_t k; - float16_t l; - float16_t m; - float16_t n; - float16_t o; - float16_t p; -}; -struct float32_vec { - float32_t x; - float32_t y; - float32_t z; - float32_t w; - float32_t e; - float32_t f; - float32_t g; - float32_t h; - float32_t i; - float32_t j; - float32_t k; - float32_t l; - float32_t m; - float32_t n; - float32_t o; - float32_t p; -}; -struct float64_vec { - float64_t x; - float64_t y; - float64_t z; - float64_t w; - float64_t e; - float64_t f; - float64_t g; - float64_t h; - float64_t i; - float64_t j; - float64_t k; - float64_t l; - float64_t m; - float64_t n; - float64_t o; - float64_t p; -}; -struct int1_vec { - int1_t x; - int1_t y; - int1_t z; - int1_t w; - int1_t e; - int1_t f; - int1_t g; - int1_t h; - int1_t i; - int1_t j; - int1_t k; - int1_t l; - int1_t m; - int1_t n; - int1_t o; - int1_t p; -}; -struct int8_vec { - int8_t x; - int8_t y; - int8_t z; - int8_t w; - int8_t e; - int8_t f; - int8_t g; - int8_t h; - int8_t i; - int8_t j; - int8_t k; - int8_t l; - int8_t m; - int8_t n; - int8_t o; - int8_t p; -}; -struct int16_vec { - int16_t x; - int16_t y; - int16_t z; - int16_t w; - int16_t e; - int16_t f; - int16_t g; - int16_t h; - int16_t i; - int16_t j; - int16_t k; - int16_t l; - int16_t m; - int16_t n; - int16_t o; - int16_t p; -}; -struct int32_vec { - int32_t x; - int32_t y; - int32_t z; - int32_t w; - int32_t e; - int32_t f; - int32_t g; - int32_t h; - int32_t i; - int32_t j; - int32_t k; - int32_t l; - int32_t m; - int32_t n; - int32_t o; - int32_t p; -}; -struct int64_vec { - int64_t x; - int64_t y; - int64_t z; - int64_t w; - int64_t e; - int64_t f; - int64_t g; - int64_t h; - int64_t i; - int64_t j; - int64_t k; - int64_t l; - int64_t m; - int64_t n; - int64_t o; - int64_t p; -}; -struct uint1_vec { - uint1_t x; - uint1_t y; - uint1_t z; - uint1_t w; - uint1_t e; - uint1_t f; - uint1_t g; - uint1_t h; - uint1_t i; - uint1_t j; - uint1_t k; - uint1_t l; - uint1_t m; - uint1_t n; - uint1_t o; - uint1_t p; -}; -struct uint8_vec { - uint8_t x; - uint8_t y; - uint8_t z; - uint8_t w; - uint8_t e; - uint8_t f; - uint8_t g; - uint8_t h; - uint8_t i; - uint8_t j; - uint8_t k; - uint8_t l; - uint8_t m; - uint8_t n; - uint8_t o; - uint8_t p; -}; -struct uint16_vec { - uint16_t x; - uint16_t y; - uint16_t z; - uint16_t w; - uint16_t e; - uint16_t f; - uint16_t g; - uint16_t h; - uint16_t i; - uint16_t j; - uint16_t k; - uint16_t l; - uint16_t m; - uint16_t n; - uint16_t o; - uint16_t p; -}; -struct uint32_vec { - uint32_t x; - uint32_t y; - uint32_t z; - uint32_t w; - uint32_t e; - uint32_t f; - uint32_t g; - uint32_t h; - uint32_t i; - uint32_t j; - uint32_t k; - uint32_t l; - uint32_t m; - uint32_t n; - uint32_t o; - uint32_t p; -}; -struct uint64_vec { - uint64_t x; - uint64_t y; - uint64_t z; - uint64_t w; - uint64_t e; - uint64_t f; - uint64_t g; - uint64_t h; - uint64_t i; - uint64_t j; - uint64_t k; - uint64_t l; - uint64_t m; - uint64_t n; - uint64_t o; - uint64_t p; -}; -struct bool1_vec { - bool1_t x; - bool1_t y; - bool1_t z; - bool1_t w; - bool1_t e; - bool1_t f; - bool1_t g; - bool1_t h; - bool1_t i; - bool1_t j; - bool1_t k; - bool1_t l; - bool1_t m; - bool1_t n; - bool1_t o; - bool1_t p; -}; -struct bool8_vec { - bool8_t x; - bool8_t y; - bool8_t z; - bool8_t w; - bool8_t e; - bool8_t f; - bool8_t g; - bool8_t h; - bool8_t i; - bool8_t j; - bool8_t k; - bool8_t l; - bool8_t m; - bool8_t n; - bool8_t o; - bool8_t p; -}; -struct bool16_vec { - bool16_t x; - bool16_t y; - bool16_t z; - bool16_t w; - bool16_t e; - bool16_t f; - bool16_t g; - bool16_t h; - bool16_t i; - bool16_t j; - bool16_t k; - bool16_t l; - bool16_t m; - bool16_t n; - bool16_t o; - bool16_t p; -}; -struct bool32_vec { - bool32_t x; - bool32_t y; - bool32_t z; - bool32_t w; - bool32_t e; - bool32_t f; - bool32_t g; - bool32_t h; - bool32_t i; - bool32_t j; - bool32_t k; - bool32_t l; - bool32_t m; - bool32_t n; - bool32_t o; - bool32_t p; -}; - - - -static void -evaluate_amul(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = src0 * src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = src0 * src1; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = src0 * src1; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src0 * src1; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = src0 * src1; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_fequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_fequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_fequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_fequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_fequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_fequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_iequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_iequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_iequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_iequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_iequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16all_iequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_fnequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_fnequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_fnequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_fnequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_fnequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_fnequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_inequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_inequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_inequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_inequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_inequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16any_inequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i16 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b16csel(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - const uint1_t src1 = - _src[1][_i].b; - const uint1_t src2 = - _src[2][_i].b; - - uint1_t dst = src0 ? src1 : src2; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - const uint8_t src1 = - _src[1][_i].u8; - const uint8_t src2 = - _src[2][_i].u8; - - uint8_t dst = src0 ? src1 : src2; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - const uint16_t src1 = - _src[1][_i].u16; - const uint16_t src2 = - _src[2][_i].u16; - - uint16_t dst = src0 ? src1 : src2; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst = src0 ? src1 : src2; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - const uint64_t src1 = - _src[1][_i].u64; - const uint64_t src2 = - _src[2][_i].u64; - - uint64_t dst = src0 ? src1 : src2; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2b1(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - bool1_t dst = src0 != 0; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - bool1_t dst = src0 != 0; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - bool1_t dst = src0 != 0; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - bool1_t dst = src0 != 0; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2b16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - bool16_t dst = src0 != 0; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - bool16_t dst = src0 != 0; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - bool16_t dst = src0 != 0; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - bool16_t dst = src0 != 0; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2b32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - bool32_t dst = src0 != 0; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - bool32_t dst = src0 != 0; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - bool32_t dst = src0 != 0; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - bool32_t dst = src0 != 0; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2b8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - bool8_t dst = src0 != 0; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - bool8_t dst = src0 != 0; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - bool8_t dst = src0 != 0; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - bool8_t dst = src0 != 0; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2f16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2f32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2f64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2i1(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2i16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2i32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2i64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b2i8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool16_t src0 = - _src[0][_i].i16; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_fequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_fequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_fequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_fequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_fequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_fequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_iequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_iequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_iequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_iequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_iequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32all_iequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_fnequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_fnequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_fnequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_fnequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_fnequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_fnequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_inequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_inequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_inequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_inequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_inequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32any_inequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i32 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b32csel(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - const uint1_t src1 = - _src[1][_i].b; - const uint1_t src2 = - _src[2][_i].b; - - uint1_t dst = src0 ? src1 : src2; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - const uint8_t src1 = - _src[1][_i].u8; - const uint8_t src2 = - _src[2][_i].u8; - - uint8_t dst = src0 ? src1 : src2; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - const uint16_t src1 = - _src[1][_i].u16; - const uint16_t src2 = - _src[2][_i].u16; - - uint16_t dst = src0 ? src1 : src2; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst = src0 ? src1 : src2; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool32_t src0 = - _src[0][_i].i32; - const uint64_t src1 = - _src[1][_i].u64; - const uint64_t src2 = - _src[2][_i].u64; - - uint64_t dst = src0 ? src1 : src2; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_fequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_fequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_fequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_fequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_fequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_fequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_iequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_iequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_iequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_iequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_iequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8all_iequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_fnequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_fnequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_fnequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_fnequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_fnequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_fnequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_inequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_inequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_inequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_inequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_inequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8any_inequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool8_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].i8 = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_b8csel(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - const uint1_t src1 = - _src[1][_i].b; - const uint1_t src2 = - _src[2][_i].b; - - uint1_t dst = src0 ? src1 : src2; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - const uint8_t src1 = - _src[1][_i].u8; - const uint8_t src2 = - _src[2][_i].u8; - - uint8_t dst = src0 ? src1 : src2; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - const uint16_t src1 = - _src[1][_i].u16; - const uint16_t src2 = - _src[2][_i].u16; - - uint16_t dst = src0 ? src1 : src2; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst = src0 ? src1 : src2; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool8_t src0 = - _src[0][_i].i8; - const uint64_t src1 = - _src[1][_i].u64; - const uint64_t src2 = - _src[2][_i].u64; - - uint64_t dst = src0 ? src1 : src2; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_fequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_fequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_fequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_fequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_fequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_fequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_iequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_iequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_iequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_iequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_iequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ball_iequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_fnequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_fnequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_fnequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_fnequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_fnequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_fnequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_inequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][15].b, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][8].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][9].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][10].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][11].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][12].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][13].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][14].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][15].b, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - _src[0][8].i8, - _src[0][9].i8, - _src[0][10].i8, - _src[0][11].i8, - _src[0][12].i8, - _src[0][13].i8, - _src[0][14].i8, - _src[0][15].i8, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - _src[1][8].i8, - _src[1][9].i8, - _src[1][10].i8, - _src[1][11].i8, - _src[1][12].i8, - _src[1][13].i8, - _src[1][14].i8, - _src[1][15].i8, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - _src[0][8].i16, - _src[0][9].i16, - _src[0][10].i16, - _src[0][11].i16, - _src[0][12].i16, - _src[0][13].i16, - _src[0][14].i16, - _src[0][15].i16, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - _src[1][8].i16, - _src[1][9].i16, - _src[1][10].i16, - _src[1][11].i16, - _src[1][12].i16, - _src[1][13].i16, - _src[1][14].i16, - _src[1][15].i16, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - _src[0][8].i32, - _src[0][9].i32, - _src[0][10].i32, - _src[0][11].i32, - _src[0][12].i32, - _src[0][13].i32, - _src[0][14].i32, - _src[0][15].i32, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - _src[1][8].i32, - _src[1][9].i32, - _src[1][10].i32, - _src[1][11].i32, - _src[1][12].i32, - _src[1][13].i32, - _src[1][14].i32, - _src[1][15].i32, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - _src[0][8].i64, - _src[0][9].i64, - _src[0][10].i64, - _src[0][11].i64, - _src[0][12].i64, - _src[0][13].i64, - _src[0][14].i64, - _src[0][15].i64, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - _src[1][8].i64, - _src[1][9].i64, - _src[1][10].i64, - _src[1][11].i64, - _src[1][12].i64, - _src[1][13].i64, - _src[1][14].i64, - _src[1][15].i64, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_inequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_inequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_inequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_inequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bany_inequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct int1_vec src0 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[0][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int1_vec src1 = { - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][0].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][1].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][2].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][3].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][4].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][5].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][6].b, - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[1][7].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 8: { - - - - - const struct int8_vec src0 = { - _src[0][0].i8, - _src[0][1].i8, - _src[0][2].i8, - _src[0][3].i8, - _src[0][4].i8, - _src[0][5].i8, - _src[0][6].i8, - _src[0][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int8_vec src1 = { - _src[1][0].i8, - _src[1][1].i8, - _src[1][2].i8, - _src[1][3].i8, - _src[1][4].i8, - _src[1][5].i8, - _src[1][6].i8, - _src[1][7].i8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 16: { - - - - - const struct int16_vec src0 = { - _src[0][0].i16, - _src[0][1].i16, - _src[0][2].i16, - _src[0][3].i16, - _src[0][4].i16, - _src[0][5].i16, - _src[0][6].i16, - _src[0][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int16_vec src1 = { - _src[1][0].i16, - _src[1][1].i16, - _src[1][2].i16, - _src[1][3].i16, - _src[1][4].i16, - _src[1][5].i16, - _src[1][6].i16, - _src[1][7].i16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 32: { - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - _src[0][2].i32, - _src[0][3].i32, - _src[0][4].i32, - _src[0][5].i32, - _src[0][6].i32, - _src[0][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int32_vec src1 = { - _src[1][0].i32, - _src[1][1].i32, - _src[1][2].i32, - _src[1][3].i32, - _src[1][4].i32, - _src[1][5].i32, - _src[1][6].i32, - _src[1][7].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - case 64: { - - - - - const struct int64_vec src0 = { - _src[0][0].i64, - _src[0][1].i64, - _src[0][2].i64, - _src[0][3].i64, - _src[0][4].i64, - _src[0][5].i64, - _src[0][6].i64, - _src[0][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct int64_vec src1 = { - _src[1][0].i64, - _src[1][1].i64, - _src[1][2].i64, - _src[1][3].i64, - _src[1][4].i64, - _src[1][5].i64, - _src[1][6].i64, - _src[1][7].i64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct bool1_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)); - - _dst_val[0].b = -(int)dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bcsel(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - const uint1_t src2 = - _src[2][_i].b; - - uint1_t dst = src0 ? src1 : src2; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - const uint8_t src1 = - _src[1][_i].u8; - const uint8_t src2 = - _src[2][_i].u8; - - uint8_t dst = src0 ? src1 : src2; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - const uint16_t src1 = - _src[1][_i].u16; - const uint16_t src2 = - _src[2][_i].u16; - - uint16_t dst = src0 ? src1 : src2; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst = src0 ? src1 : src2; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const bool1_t src0 = - _src[0][_i].b; - const uint64_t src1 = - _src[1][_i].u64; - const uint64_t src2 = - _src[2][_i].u64; - - uint64_t dst = src0 ? src1 : src2; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bfi(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst; - - -unsigned mask = src0, insert = src1, base = src2; -if (mask == 0) { - dst = base; -} else { - unsigned tmp = mask; - while (!(tmp & 1)) { - tmp >>= 1; - insert <<= 1; - } - dst = (base & ~mask) | (insert & mask); -} - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_bfm(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - uint32_t dst; - - -int bits = src0 & 0x1F; -int offset = src1 & 0x1F; -dst = ((1u << bits) - 1) << offset; - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_bit_count(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - uint32_t dst; - - -dst = 0; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) - dst++; -} - - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - uint32_t dst; - - -dst = 0; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) - dst++; -} - - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - uint32_t dst; - - -dst = 0; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) - dst++; -} - - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint32_t dst; - - -dst = 0; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) - dst++; -} - - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint32_t dst; - - -dst = 0; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) - dst++; -} - - - _dst_val[_i].u32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_bitfield_insert(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - const int32_t src3 = - _src[3][_i].i32; - - uint32_t dst; - - -unsigned base = src0, insert = src1; -int offset = src2, bits = src3; -if (bits == 0) { - dst = base; -} else if (offset < 0 || bits < 0 || bits + offset > 32) { - dst = 0; -} else { - unsigned mask = ((1ull << bits) - 1) << offset; - dst = (base & ~mask) | ((insert << offset) & mask); -} - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_bitfield_reverse(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint32_t dst; - - -/* we're not winning any awards for speed here, but that's ok */ -dst = 0; -for (unsigned bit = 0; bit < 32; bit++) - dst |= ((src0 >> bit) & 1) << (31 - bit); - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_bitfield_select(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - const uint1_t src2 = - _src[2][_i].b; - - uint1_t dst = (src0 & src1) | (~src0 & src2); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - const uint8_t src2 = - _src[2][_i].u8; - - uint8_t dst = (src0 & src1) | (~src0 & src2); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - const uint16_t src2 = - _src[2][_i].u16; - - uint16_t dst = (src0 & src1) | (~src0 & src2); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst = (src0 & src1) | (~src0 & src2); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - const uint64_t src2 = - _src[2][_i].u64; - - uint64_t dst = (src0 & src1) | (~src0 & src2); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_cube_face_coord_amd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = dst.y = 0.0; -float absX = fabsf(src0.x); -float absY = fabsf(src0.y); -float absZ = fabsf(src0.z); - -float ma = 0.0; -if (absX >= absY && absX >= absZ) { ma = 2 * src0.x; } -if (absY >= absX && absY >= absZ) { ma = 2 * src0.y; } -if (absZ >= absX && absZ >= absY) { ma = 2 * src0.z; } - -if (src0.x >= 0 && absX >= absY && absX >= absZ) { dst.x = -src0.z; dst.y = -src0.y; } -if (src0.x < 0 && absX >= absY && absX >= absZ) { dst.x = src0.z; dst.y = -src0.y; } -if (src0.y >= 0 && absY >= absX && absY >= absZ) { dst.x = src0.x; dst.y = src0.z; } -if (src0.y < 0 && absY >= absX && absY >= absZ) { dst.x = src0.x; dst.y = -src0.z; } -if (src0.z >= 0 && absZ >= absX && absZ >= absY) { dst.x = src0.x; dst.y = -src0.y; } -if (src0.z < 0 && absZ >= absX && absZ >= absY) { dst.x = -src0.x; dst.y = -src0.y; } - -dst.x = dst.x * (1.0f / ma) + 0.5f; -dst.y = dst.y * (1.0f / ma) + 0.5f; - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - -} -static void -evaluate_cube_face_index_amd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = 0.0; -float absX = fabsf(src0.x); -float absY = fabsf(src0.y); -float absZ = fabsf(src0.z); -if (src0.x >= 0 && absX >= absY && absX >= absZ) dst.x = 0; -if (src0.x < 0 && absX >= absY && absX >= absZ) dst.x = 1; -if (src0.y >= 0 && absY >= absX && absY >= absZ) dst.x = 2; -if (src0.y < 0 && absY >= absX && absY >= absZ) dst.x = 3; -if (src0.z >= 0 && absZ >= absX && absZ >= absY) dst.x = 4; -if (src0.z < 0 && absZ >= absX && absZ >= absY) dst.x = 5; - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_cube_r600(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - - dst.x = dst.y = dst.z = 0.0; - float absX = fabsf(src0.x); - float absY = fabsf(src0.y); - float absZ = fabsf(src0.z); - - if (absX >= absY && absX >= absZ) { dst.z = 2 * src0.x; } - if (absY >= absX && absY >= absZ) { dst.z = 2 * src0.y; } - if (absZ >= absX && absZ >= absY) { dst.z = 2 * src0.z; } - - if (src0.x >= 0 && absX >= absY && absX >= absZ) { - dst.y = -src0.z; dst.x = -src0.y; dst.w = 0; - } - if (src0.x < 0 && absX >= absY && absX >= absZ) { - dst.y = src0.z; dst.x = -src0.y; dst.w = 1; - } - if (src0.y >= 0 && absY >= absX && absY >= absZ) { - dst.y = src0.x; dst.x = src0.z; dst.w = 2; - } - if (src0.y < 0 && absY >= absX && absY >= absZ) { - dst.y = src0.x; dst.x = -src0.z; dst.w = 3; - } - if (src0.z >= 0 && absZ >= absX && absZ >= absY) { - dst.y = src0.x; dst.x = -src0.y; dst.w = 4; - } - if (src0.z < 0 && absZ >= absX && absZ >= absY) { - dst.y = -src0.x; dst.x = -src0.y; dst.w = 5; - } - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - _dst_val[2].f32 = dst.z; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[2], 32); - } - _dst_val[3].f32 = dst.w; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[3], 32); - } - -} -static void -evaluate_extr_agx(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - const uint32_t src3 = - _src[3][_i].u32; - - uint32_t dst; - - - uint32_t mask = 0xFFFFFFFF; - uint8_t shift = src2 & 0x7F; - if (src3 != 0) { - mask = (1 << src3) - 1; - } - if (shift >= 64) { - dst = 0; - } else { - dst = (((((uint64_t) src1) << 32) | (uint64_t) src0) >> shift) & mask; - } - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_extract_i16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = (int16_t)(src0 >> (src1 * 16)); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = (int16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = (int16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = (int16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = (int16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_extract_i8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = (int8_t)(src0 >> (src1 * 8)); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = (int8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = (int8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = (int8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = (int8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_extract_u16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (uint16_t)(src0 >> (src1 * 16)); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (uint16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (uint16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (uint16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (uint16_t)(src0 >> (src1 * 16)); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_extract_u8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (uint8_t)(src0 >> (src1 * 8)); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (uint8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (uint8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (uint8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (uint8_t)(src0 >> (src1 * 8)); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2f16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2f16_rtne(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst; - - - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtne(src0)); - } else { - dst = src0; - } - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float16_t dst; - - - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtne(src0)); - } else { - dst = src0; - } - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float16_t dst; - - - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtne(src0)); - } else { - dst = src0; - } - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2f16_rtz(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst; - - - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtz(src0)); - } else { - dst = src0; - } - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float16_t dst; - - - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtz(src0)); - } else { - dst = src0; - } - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float16_t dst; - - - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtz(src0)); - } else { - dst = src0; - } - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2f32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float32_t dst; - - - if (bit_size > 32 && nir_is_rounding_mode_rtz(execution_mode, 32)) { - dst = _mesa_double_to_float_rtz(src0); - } else { - dst = src0; - } - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst; - - - if (bit_size > 32 && nir_is_rounding_mode_rtz(execution_mode, 32)) { - dst = _mesa_double_to_float_rtz(src0); - } else { - dst = src0; - } - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float32_t dst; - - - if (bit_size > 32 && nir_is_rounding_mode_rtz(execution_mode, 32)) { - dst = _mesa_double_to_float_rtz(src0); - } else { - dst = src0; - } - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2f64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2fmp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - -} -static void -evaluate_f2i1(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2i16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2i32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2i64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2i8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2imp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - -} -static void -evaluate_f2u1(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2u16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2u32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2u64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2u8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_f2ump(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - -} -static void -evaluate_fabs(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = fabs(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = fabs(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = fabs(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_add_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 + (double)src1); -} else { - dst = src0 + src1; -} - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_add_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 + (double)src1); -} else { - dst = src0 + src1; -} - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_add_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 + (double)src1); -} else { - dst = src0 + src1; -} - - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fall_equal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p == src1.p) && (src0.o == src1.o) && (src0.n == src1.n) && (src0.m == src1.m) && (src0.l == src1.l) && (src0.k == src1.k) && (src0.j == src1.j) && (src0.i == src1.i) && (src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fall_equal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y == src1.y) && (src0.x == src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fall_equal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fall_equal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fall_equal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fall_equal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h == src1.h) && (src0.g == src1.g) && (src0.f == src1.f) && (src0.e == src1.e) && (src0.w == src1.w) && (src0.z == src1.z) && (src0.y == src1.y) && (src0.x == src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fany_nequal16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p != src1.p) || (src0.o != src1.o) || (src0.n != src1.n) || (src0.m != src1.m) || (src0.l != src1.l) || (src0.k != src1.k) || (src0.j != src1.j) || (src0.i != src1.i) || (src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fany_nequal2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y != src1.y) || (src0.x != src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fany_nequal3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fany_nequal4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fany_nequal5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fany_nequal8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h != src1.h) || (src0.g != src1.g) || (src0.f != src1.f) || (src0.e != src1.e) || (src0.w != src1.w) || (src0.z != src1.z) || (src0.y != src1.y) || (src0.x != src1.x)) ? 1.0f : 0.0f; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - -} -static void -evaluate_fceil(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? ceil(src0) : ceilf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? ceil(src0) : ceilf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? ceil(src0) : ceilf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fclamp_pos_mali(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = fmax(src0, 0.0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = fmax(src0, 0.0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = fmax(src0, 0.0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fcos(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? cos(src0) : cosf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? cos(src0) : cosf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? cos(src0) : cosf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fcos_amd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = cosf(6.2831853 * src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = cosf(6.2831853 * src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = cosf(6.2831853 * src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fcos_mdg(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = cosf(3.141592653589793 * src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = cosf(3.141592653589793 * src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = cosf(3.141592653589793 * src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fcsel(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - const float32_t src2 = - _src[2][_i].f32; - - float32_t dst = (src0 != 0.0f) ? src1 : src2; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_fcsel_ge(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - const float32_t src2 = - _src[2][_i].f32; - - float32_t dst = (src0 >= 0.0f) ? src1 : src2; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_fcsel_gt(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - const float32_t src2 = - _src[2][_i].f32; - - float32_t dst = (src0 > 0.0f) ? src1 : src2; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_fddx(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fddx_coarse(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fddx_fine(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fddx_must_abs_mali(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fddy(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fddy_coarse(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fddy_fine(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fddy_must_abs_mali(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = 0.0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = 0.0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = 0.0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdiv(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = src0 / src1; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = src0 / src1; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = src0 / src1; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p * src1.p) + (src0.o * src1.o) + (src0.n * src1.n) + (src0.m * src1.m) + (src0.l * src1.l) + (src0.k * src1.k) + (src0.j * src1.j) + (src0.i * src1.i) + (src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p * src1.p) + (src0.o * src1.o) + (src0.n * src1.n) + (src0.m * src1.m) + (src0.l * src1.l) + (src0.k * src1.k) + (src0.j * src1.j) + (src0.i * src1.i) + (src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.p * src1.p) + (src0.o * src1.o) + (src0.n * src1.n) + (src0.m * src1.m) + (src0.l * src1.l) + (src0.k * src1.k) + (src0.j * src1.j) + (src0.i * src1.i) + (src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot16_replicated(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - _mesa_half_to_float(_src[0][8].u16), - _mesa_half_to_float(_src[0][9].u16), - _mesa_half_to_float(_src[0][10].u16), - _mesa_half_to_float(_src[0][11].u16), - _mesa_half_to_float(_src[0][12].u16), - _mesa_half_to_float(_src[0][13].u16), - _mesa_half_to_float(_src[0][14].u16), - _mesa_half_to_float(_src[0][15].u16), - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - _mesa_half_to_float(_src[1][8].u16), - _mesa_half_to_float(_src[1][9].u16), - _mesa_half_to_float(_src[1][10].u16), - _mesa_half_to_float(_src[1][11].u16), - _mesa_half_to_float(_src[1][12].u16), - _mesa_half_to_float(_src[1][13].u16), - _mesa_half_to_float(_src[1][14].u16), - _mesa_half_to_float(_src[1][15].u16), - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = ((src0.p * src1.p) + (src0.o * src1.o) + (src0.n * src1.n) + (src0.m * src1.m) + (src0.l * src1.l) + (src0.k * src1.k) + (src0.j * src1.j) + (src0.i * src1.i) + (src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - _src[0][8].f32, - _src[0][9].f32, - _src[0][10].f32, - _src[0][11].f32, - _src[0][12].f32, - _src[0][13].f32, - _src[0][14].f32, - _src[0][15].f32, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - _src[1][8].f32, - _src[1][9].f32, - _src[1][10].f32, - _src[1][11].f32, - _src[1][12].f32, - _src[1][13].f32, - _src[1][14].f32, - _src[1][15].f32, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = ((src0.p * src1.p) + (src0.o * src1.o) + (src0.n * src1.n) + (src0.m * src1.m) + (src0.l * src1.l) + (src0.k * src1.k) + (src0.j * src1.j) + (src0.i * src1.i) + (src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - _src[0][8].f64, - _src[0][9].f64, - _src[0][10].f64, - _src[0][11].f64, - _src[0][12].f64, - _src[0][13].f64, - _src[0][14].f64, - _src[0][15].f64, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - _src[1][8].f64, - _src[1][9].f64, - _src[1][10].f64, - _src[1][11].f64, - _src[1][12].f64, - _src[1][13].f64, - _src[1][14].f64, - _src[1][15].f64, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = ((src0.p * src1.p) + (src0.o * src1.o) + (src0.n * src1.n) + (src0.m * src1.m) + (src0.l * src1.l) + (src0.k * src1.k) + (src0.j * src1.j) + (src0.i * src1.i) + (src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot2_replicated(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = ((src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = ((src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = ((src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot3_replicated(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = ((src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = ((src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = ((src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot4_replicated(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = ((src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = ((src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = ((src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot5_replicated(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = ((src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = ((src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = ((src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdot8_replicated(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - _mesa_half_to_float(_src[0][4].u16), - _mesa_half_to_float(_src[0][5].u16), - _mesa_half_to_float(_src[0][6].u16), - _mesa_half_to_float(_src[0][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - _mesa_half_to_float(_src[1][4].u16), - _mesa_half_to_float(_src[1][5].u16), - _mesa_half_to_float(_src[1][6].u16), - _mesa_half_to_float(_src[1][7].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = ((src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - _src[0][4].f32, - _src[0][5].f32, - _src[0][6].f32, - _src[0][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - _src[1][4].f32, - _src[1][5].f32, - _src[1][6].f32, - _src[1][7].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = ((src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - _src[0][4].f64, - _src[0][5].f64, - _src[0][6].f64, - _src[0][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - _src[1][4].f64, - _src[1][5].f64, - _src[1][6].f64, - _src[1][7].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = ((src0.h * src1.h) + (src0.g * src1.g) + (src0.f * src1.f) + (src0.e * src1.e) + (src0.w * src1.w) + (src0.z * src1.z) + (src0.y * src1.y) + (src0.x * src1.x)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdph(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w; - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w; - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fdph_replicated(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float16_vec src1 = { - _mesa_half_to_float(_src[1][0].u16), - _mesa_half_to_float(_src[1][1].u16), - _mesa_half_to_float(_src[1][2].u16), - _mesa_half_to_float(_src[1][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float16_t dst = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - _src[1][1].f32, - _src[1][2].f32, - _src[1][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float32_t dst = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float64_vec src1 = { - _src[1][0].f64, - _src[1][1].f64, - _src[1][2].f64, - _src[1][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - for (unsigned _i = 0; _i < num_components; _i++) { - - float64_t dst = src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_feq(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_feq16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_feq32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_feq8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fexp2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = exp2f(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = exp2f(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = exp2f(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ffloor(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? floor(src0) : floorf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? floor(src0) : floorf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? floor(src0) : floorf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ffma(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - const float src2 = - _mesa_half_to_float(_src[2][_i].u16); - - float16_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_fma_rtz(src0, src1, src2); - else if (bit_size == 32) - dst = _mesa_float_fma_rtz(src0, src1, src2); - else - dst = _mesa_double_to_float_rtz(_mesa_double_fma_rtz(src0, src1, src2)); -} else { - if (bit_size == 32) - dst = fmaf(src0, src1, src2); - else - dst = fma(src0, src1, src2); -} - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - const float32_t src2 = - _src[2][_i].f32; - - float32_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_fma_rtz(src0, src1, src2); - else if (bit_size == 32) - dst = _mesa_float_fma_rtz(src0, src1, src2); - else - dst = _mesa_double_to_float_rtz(_mesa_double_fma_rtz(src0, src1, src2)); -} else { - if (bit_size == 32) - dst = fmaf(src0, src1, src2); - else - dst = fma(src0, src1, src2); -} - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - const float64_t src2 = - _src[2][_i].f64; - - float64_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_fma_rtz(src0, src1, src2); - else if (bit_size == 32) - dst = _mesa_float_fma_rtz(src0, src1, src2); - else - dst = _mesa_double_to_float_rtz(_mesa_double_fma_rtz(src0, src1, src2)); -} else { - if (bit_size == 32) - dst = fmaf(src0, src1, src2); - else - dst = fma(src0, src1, src2); -} - - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ffmaz(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - const float32_t src2 = - _src[2][_i].f32; - - float32_t dst; - - -if (src0 == 0.0 || src1 == 0.0) - dst = 0.0 + src2; -else if (nir_is_rounding_mode_rtz(execution_mode, 32)) - dst = _mesa_float_fma_rtz(src0, src1, src2); -else - dst = fmaf(src0, src1, src2); - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_ffract(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = src0 - (bit_size == 64 ? floor(src0) : floorf(src0)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = src0 - (bit_size == 64 ? floor(src0) : floorf(src0)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = src0 - (bit_size == 64 ? floor(src0) : floorf(src0)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fge(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fge16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fge32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fge8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_find_lsb(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int32_t dst; - - -dst = -1; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int32_t dst; - - -dst = -1; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int32_t dst; - - -dst = -1; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst; - - -dst = -1; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int32_t dst; - - -dst = -1; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fisfinite(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - bool1_t dst = isfinite(src0); - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - bool1_t dst = isfinite(src0); - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - bool1_t dst = isfinite(src0); - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fisfinite32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - bool32_t dst = isfinite(src0); - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - bool32_t dst = isfinite(src0); - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - bool32_t dst = isfinite(src0); - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fisnormal(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - bool1_t dst = isnormal(src0); - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - bool1_t dst = isnormal(src0); - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - bool1_t dst = isnormal(src0); - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_flog2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = log2f(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = log2f(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = log2f(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_flrp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - const float src2 = - _mesa_half_to_float(_src[2][_i].u16); - - float16_t dst = src0 * (1 - src2) + src1 * src2; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - const float32_t src2 = - _src[2][_i].f32; - - float32_t dst = src0 * (1 - src2) + src1 * src2; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - const float64_t src2 = - _src[2][_i].f64; - - float64_t dst = src0 * (1 - src2) + src1 * src2; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_flt(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_flt16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_flt32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_flt8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fmax(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = fmax(src0, src1); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = fmax(src0, src1); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = fmax(src0, src1); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fmin(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = fmin(src0, src1); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = fmin(src0, src1); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = fmin(src0, src1); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fmod(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = src0 - src1 * floorf(src0 / src1); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = src0 - src1 * floorf(src0 / src1); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = src0 - src1 * floorf(src0 / src1); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fmul(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_mul_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 * (double)src1); -} else { - dst = src0 * src1; -} - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_mul_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 * (double)src1); -} else { - dst = src0 * src1; -} - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_mul_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 * (double)src1); -} else { - dst = src0 * src1; -} - - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fmulz(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst; - - -if (src0 == 0.0 || src1 == 0.0) - dst = 0.0; -else if (nir_is_rounding_mode_rtz(execution_mode, 32)) - dst = _mesa_double_to_float_rtz((double)src0 * (double)src1); -else - dst = src0 * src1; - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_fneg(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = -src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = -src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = -src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fneu(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fneu16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fneu32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fneu8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fpow(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = bit_size == 64 ? pow(src0, src1) : powf(src0, src1); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = bit_size == 64 ? pow(src0, src1) : powf(src0, src1); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = bit_size == 64 ? pow(src0, src1) : powf(src0, src1); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fquantize2f16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = (fabs(src0) < ldexpf(1.0, -14)) ? copysignf(0.0f, src0) : _mesa_half_to_float(_mesa_float_to_half(src0)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = (fabs(src0) < ldexpf(1.0, -14)) ? copysignf(0.0f, src0) : _mesa_half_to_float(_mesa_float_to_half(src0)); - - _dst_val[_i].f32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = (fabs(src0) < ldexpf(1.0, -14)) ? copysignf(0.0f, src0) : _mesa_half_to_float(_mesa_float_to_half(src0)); - - _dst_val[_i].f64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_frcp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? 1.0 / src0 : 1.0f / src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? 1.0 / src0 : 1.0f / src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? 1.0 / src0 : 1.0f / src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_frem(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = src0 - src1 * truncf(src0 / src1); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = src0 - src1 * truncf(src0 / src1); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = src0 - src1 * truncf(src0 / src1); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_frexp_exp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - int32_t dst; - - frexp(src0, &dst); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - int32_t dst; - - frexp(src0, &dst); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - int32_t dst; - - frexp(src0, &dst); - - _dst_val[_i].i32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_frexp_sig(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst; - - int n; dst = frexp(src0, &n); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst; - - int n; dst = frexp(src0, &n); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst; - - int n; dst = frexp(src0, &n); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fround_even(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? _mesa_roundeven(src0) : _mesa_roundevenf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? _mesa_roundeven(src0) : _mesa_roundevenf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? _mesa_roundeven(src0) : _mesa_roundevenf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_frsq(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? 1.0 / sqrt(src0) : 1.0f / sqrtf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? 1.0 / sqrt(src0) : 1.0f / sqrtf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? 1.0 / sqrt(src0) : 1.0f / sqrtf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC)) -#pragma optimize("", off) /* Temporary work-around for MSVC compiler bug, present in VS2019 16.9.2 */ -#endif -static void -evaluate_fsat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = fmin(fmax(src0, 0.0), 1.0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = fmin(fmax(src0, 0.0), 1.0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = fmin(fmax(src0, 0.0), 1.0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC)) -#pragma optimize("", on) /* Temporary work-around for MSVC compiler bug, present in VS2019 16.9.2 */ -#endif -static void -evaluate_fsat_signed_mali(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = fmin(fmax(src0, -1.0), 1.0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = fmin(fmax(src0, -1.0), 1.0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = fmin(fmax(src0, -1.0), 1.0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsign(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? (isnan(src0) ? 0.0 : ((src0 == 0.0 ) ? src0 : (src0 > 0.0 ) ? 1.0 : -1.0 )) : (isnan(src0) ? 0.0f : ((src0 == 0.0f) ? src0 : (src0 > 0.0f) ? 1.0f : -1.0f)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? (isnan(src0) ? 0.0 : ((src0 == 0.0 ) ? src0 : (src0 > 0.0 ) ? 1.0 : -1.0 )) : (isnan(src0) ? 0.0f : ((src0 == 0.0f) ? src0 : (src0 > 0.0f) ? 1.0f : -1.0f)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? (isnan(src0) ? 0.0 : ((src0 == 0.0 ) ? src0 : (src0 > 0.0 ) ? 1.0 : -1.0 )) : (isnan(src0) ? 0.0f : ((src0 == 0.0f) ? src0 : (src0 > 0.0f) ? 1.0f : -1.0f)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsin(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? sin(src0) : sinf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? sin(src0) : sinf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? sin(src0) : sinf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsin_agx(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = sinf(src0 * (6.2831853/4.0)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = sinf(src0 * (6.2831853/4.0)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = sinf(src0 * (6.2831853/4.0)); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsin_amd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = sinf(6.2831853 * src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = sinf(6.2831853 * src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = sinf(6.2831853 * src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsin_mdg(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = sinf(3.141592653589793 * src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = sinf(3.141592653589793 * src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = sinf(3.141592653589793 * src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsqrt(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? sqrt(src0) : sqrtf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? sqrt(src0) : sqrtf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? sqrt(src0) : sqrtf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsub(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_sub_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 - (double)src1); -} else { - dst = src0 - src1; -} - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_sub_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 - (double)src1); -} else { - dst = src0 - src1; -} - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst; - - -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_sub_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 - (double)src1); -} else { - dst = src0 - src1; -} - - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsum2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsum3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y) + (src0.z)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y) + (src0.z)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y) + (src0.z)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_fsum4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - _mesa_half_to_float(_src[0][2].u16), - _mesa_half_to_float(_src[0][3].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float16_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y) + (src0.z) + (src0.w)); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[0].u16 = _mesa_float_to_float16_rtz(dst.x); - } else { - _dst_val[0].u16 = _mesa_float_to_float16_rtne(dst.x); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[0], 16); - } - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y) + (src0.z) + (src0.w)); - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - _src[0][2].f64, - _src[0][3].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float64_vec dst; - - dst.x = dst.y = dst.z = dst.w = ((src0.x) + (src0.y) + (src0.z) + (src0.w)); - - _dst_val[0].f64 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[0], 64); - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ftrunc(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - - float16_t dst = bit_size == 64 ? trunc(src0) : truncf(src0); - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - - float32_t dst = bit_size == 64 ? trunc(src0) : truncf(src0); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - - float64_t dst = bit_size == 64 ? trunc(src0) : truncf(src0); - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2f16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2f32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2f64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2fmp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - -} -static void -evaluate_i2i1(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2i16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2i32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int32_t dst = src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2i64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int64_t dst = src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2i8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int8_t dst = src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_i2imp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int16_t dst = src0; - - _dst_val[_i].i16 = dst; - - } - -} -static void -evaluate_i32csel_ge(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst = (src0 >= 0) ? src1 : src2; - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_i32csel_gt(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst = (src0 > 0) ? src1 : src2; - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_iabs(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int1_t dst = (src0 < 0) ? -src0 : src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int8_t dst = (src0 < 0) ? -src0 : src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int16_t dst = (src0 < 0) ? -src0 : src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst = (src0 < 0) ? -src0 : src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int64_t dst = (src0 < 0) ? -src0 : src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_iadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = (uint64_t)src0 + (uint64_t)src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = (uint64_t)src0 + (uint64_t)src1; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = (uint64_t)src0 + (uint64_t)src1; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = (uint64_t)src0 + (uint64_t)src1; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = (uint64_t)src0 + (uint64_t)src1; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_iadd3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src2 = -(int1_t)_src[2][_i].b; - - int1_t dst = src0 + src1 + src2; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - const int8_t src2 = - _src[2][_i].i8; - - int8_t dst = src0 + src1 + src2; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - const int16_t src2 = - _src[2][_i].i16; - - int16_t dst = src0 + src1 + src2; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst = src0 + src1 + src2; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - const int64_t src2 = - _src[2][_i].i64; - - int64_t dst = src0 + src1 + src2; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_iadd_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = - src1 > 0 ? - (src0 + src1 < src0 ? u_intN_max(bit_size) : src0 + src1) : - (src0 < src0 + src1 ? u_intN_min(bit_size) : src0 + src1) -; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = - src1 > 0 ? - (src0 + src1 < src0 ? u_intN_max(bit_size) : src0 + src1) : - (src0 < src0 + src1 ? u_intN_min(bit_size) : src0 + src1) -; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = - src1 > 0 ? - (src0 + src1 < src0 ? u_intN_max(bit_size) : src0 + src1) : - (src0 < src0 + src1 ? u_intN_min(bit_size) : src0 + src1) -; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = - src1 > 0 ? - (src0 + src1 < src0 ? u_intN_max(bit_size) : src0 + src1) : - (src0 < src0 + src1 ? u_intN_min(bit_size) : src0 + src1) -; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = - src1 > 0 ? - (src0 + src1 < src0 ? u_intN_max(bit_size) : src0 + src1) : - (src0 < src0 + src1 ? u_intN_min(bit_size) : src0 + src1) -; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_iand(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src0 & src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src0 & src1; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src0 & src1; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 & src1; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src0 & src1; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ibfe(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - int32_t dst; - - -int base = src0; -unsigned offset = src1 & 0x1F; -unsigned bits = src2 & 0x1F; -if (bits == 0) { - dst = 0; -} else if (offset + bits < 32) { - dst = (base << (32 - bits - offset)) >> (32 - bits); -} else { - dst = base >> offset; -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_ibitfield_extract(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - -int base = src0; -int offset = src1, bits = src2; -if (bits == 0) { - dst = 0; -} else if (offset < 0 || bits < 0 || offset + bits > 32) { - dst = 0; -} else { - dst = (base << (32 - offset - bits)) >> (32 - bits); /* use sign-extending shift */ -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_idiv(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = src1 == 0 ? 0 : (src0 / src1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ieq(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool1_t dst = src0 == src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ieq16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool16_t dst = src0 == src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ieq32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool32_t dst = src0 == src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ieq8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool8_t dst = src0 == src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ifind_msb(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst; - - -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - /* If src0 < 0, we're looking for the first 0 bit. - * if src0 >= 0, we're looking for the first 1 bit. - */ - if ((((src0 >> bit) & 1) && (src0 >= 0)) || - (!((src0 >> bit) & 1) && (src0 < 0))) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_ifind_msb_rev(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst; - - -dst = -1; -/* We are looking for the highest bit that's not the same as the sign bit. */ -uint32_t sign = src0 & 0x80000000u; -for (int bit = 0; bit < 32; bit++) { - if (((src0 << bit) & 0x80000000u) != sign) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_ige(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ige16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ige32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ige8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ihadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ilt(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ilt16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ilt32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ilt8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_imad24_ir3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst = (((int32_t)src0 << 8) >> 8) * (((int32_t)src1 << 8) >> 8) + src2; - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_imadsh_mix16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - -dst = ((((src0 & 0xffff0000) >> 16) * (src1 & 0x0000ffff)) << 16) + src2; - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_imax(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = src1 > src0 ? src1 : src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_imin(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = src1 > src0 ? src0 : src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_imod(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = src1 == 0 ? 0 : ((src0 % src1 == 0 || (src0 >= 0) == (src1 >= 0)) ? src0 % src1 : src0 % src1 + src1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = src1 == 0 ? 0 : ((src0 % src1 == 0 || (src0 >= 0) == (src1 >= 0)) ? src0 % src1 : src0 % src1 + src1); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = src1 == 0 ? 0 : ((src0 % src1 == 0 || (src0 >= 0) == (src1 >= 0)) ? src0 % src1 : src0 % src1 + src1); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src1 == 0 ? 0 : ((src0 % src1 == 0 || (src0 >= 0) == (src1 >= 0)) ? src0 % src1 : src0 % src1 + src1); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = src1 == 0 ? 0 : ((src0 % src1 == 0 || (src0 >= 0) == (src1 >= 0)) ? src0 % src1 : src0 % src1 + src1); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_imul(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst; - - - /* Use 64-bit multiplies to prevent overflow of signed arithmetic */ - dst = (uint64_t)src0 * (uint64_t)src1; - - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst; - - - /* Use 64-bit multiplies to prevent overflow of signed arithmetic */ - dst = (uint64_t)src0 * (uint64_t)src1; - - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst; - - - /* Use 64-bit multiplies to prevent overflow of signed arithmetic */ - dst = (uint64_t)src0 * (uint64_t)src1; - - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst; - - - /* Use 64-bit multiplies to prevent overflow of signed arithmetic */ - dst = (uint64_t)src0 * (uint64_t)src1; - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst; - - - /* Use 64-bit multiplies to prevent overflow of signed arithmetic */ - dst = (uint64_t)src0 * (uint64_t)src1; - - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_imul24(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = (((int32_t)src0 << 8) >> 8) * (((int32_t)src1 << 8) >> 8); - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_imul24_relaxed(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src0 * src1; - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_imul_2x32_64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int64_t dst = (int64_t)src0 * (int64_t)src1; - - _dst_val[_i].i64 = dst; - - } - -} -static void -evaluate_imul_32x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src0 * (int16_t) src1; - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_imul_high(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst; - - -if (bit_size == 64) { - /* We need to do a full 128-bit x 128-bit multiply in order for the sign - * extension to work properly. The casts are kind-of annoying but needed - * to prevent compiler warnings. - */ - uint32_t src0_u32[4] = { - src0, - (int64_t)src0 >> 32, - (int64_t)src0 >> 63, - (int64_t)src0 >> 63, - }; - uint32_t src1_u32[4] = { - src1, - (int64_t)src1 >> 32, - (int64_t)src1 >> 63, - (int64_t)src1 >> 63, - }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - /* First, sign-extend to 64-bit, then convert to unsigned to prevent - * potential overflow of signed multiply */ - dst = ((uint64_t)(int64_t)src0 * (uint64_t)(int64_t)src1) >> bit_size; -} - - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst; - - -if (bit_size == 64) { - /* We need to do a full 128-bit x 128-bit multiply in order for the sign - * extension to work properly. The casts are kind-of annoying but needed - * to prevent compiler warnings. - */ - uint32_t src0_u32[4] = { - src0, - (int64_t)src0 >> 32, - (int64_t)src0 >> 63, - (int64_t)src0 >> 63, - }; - uint32_t src1_u32[4] = { - src1, - (int64_t)src1 >> 32, - (int64_t)src1 >> 63, - (int64_t)src1 >> 63, - }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - /* First, sign-extend to 64-bit, then convert to unsigned to prevent - * potential overflow of signed multiply */ - dst = ((uint64_t)(int64_t)src0 * (uint64_t)(int64_t)src1) >> bit_size; -} - - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst; - - -if (bit_size == 64) { - /* We need to do a full 128-bit x 128-bit multiply in order for the sign - * extension to work properly. The casts are kind-of annoying but needed - * to prevent compiler warnings. - */ - uint32_t src0_u32[4] = { - src0, - (int64_t)src0 >> 32, - (int64_t)src0 >> 63, - (int64_t)src0 >> 63, - }; - uint32_t src1_u32[4] = { - src1, - (int64_t)src1 >> 32, - (int64_t)src1 >> 63, - (int64_t)src1 >> 63, - }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - /* First, sign-extend to 64-bit, then convert to unsigned to prevent - * potential overflow of signed multiply */ - dst = ((uint64_t)(int64_t)src0 * (uint64_t)(int64_t)src1) >> bit_size; -} - - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst; - - -if (bit_size == 64) { - /* We need to do a full 128-bit x 128-bit multiply in order for the sign - * extension to work properly. The casts are kind-of annoying but needed - * to prevent compiler warnings. - */ - uint32_t src0_u32[4] = { - src0, - (int64_t)src0 >> 32, - (int64_t)src0 >> 63, - (int64_t)src0 >> 63, - }; - uint32_t src1_u32[4] = { - src1, - (int64_t)src1 >> 32, - (int64_t)src1 >> 63, - (int64_t)src1 >> 63, - }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - /* First, sign-extend to 64-bit, then convert to unsigned to prevent - * potential overflow of signed multiply */ - dst = ((uint64_t)(int64_t)src0 * (uint64_t)(int64_t)src1) >> bit_size; -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst; - - -if (bit_size == 64) { - /* We need to do a full 128-bit x 128-bit multiply in order for the sign - * extension to work properly. The casts are kind-of annoying but needed - * to prevent compiler warnings. - */ - uint32_t src0_u32[4] = { - src0, - (int64_t)src0 >> 32, - (int64_t)src0 >> 63, - (int64_t)src0 >> 63, - }; - uint32_t src1_u32[4] = { - src1, - (int64_t)src1 >> 32, - (int64_t)src1 >> 63, - (int64_t)src1 >> 63, - }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - /* First, sign-extend to 64-bit, then convert to unsigned to prevent - * potential overflow of signed multiply */ - dst = ((uint64_t)(int64_t)src0 * (uint64_t)(int64_t)src1) >> bit_size; -} - - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ine(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool1_t dst = src0 != src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ine16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool16_t dst = src0 != src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ine32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool32_t dst = src0 != src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ine8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - bool8_t dst = src0 != src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ineg(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int1_t dst = -src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int8_t dst = -src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int16_t dst = -src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst = -src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int64_t dst = -src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_inot(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int1_t dst = ~src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int8_t dst = ~src0; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int16_t dst = ~src0; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst = ~src0; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int64_t dst = ~src0; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_insert_u16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (src0 & 0xffff) << (src1 * 16); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (src0 & 0xffff) << (src1 * 16); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (src0 & 0xffff) << (src1 * 16); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (src0 & 0xffff) << (src1 * 16); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (src0 & 0xffff) << (src1 * 16); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_insert_u8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (src0 & 0xff) << (src1 * 8); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (src0 & 0xff) << (src1 * 8); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (src0 & 0xff) << (src1 * 8); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (src0 & 0xff) << (src1 * 8); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (src0 & 0xff) << (src1 * 8); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ior(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src0 | src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src0 | src1; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src0 | src1; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 | src1; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src0 | src1; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_irem(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = src1 == 0 ? 0 : src0 % src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_irhadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ishl(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - const uint32_t src1 = - _src[1][_i].u32; - - int1_t dst = (uint64_t)src0 << (src1 & (sizeof(src0) * 8 - 1)); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const uint32_t src1 = - _src[1][_i].u32; - - int8_t dst = (uint64_t)src0 << (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const uint32_t src1 = - _src[1][_i].u32; - - int16_t dst = (uint64_t)src0 << (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const uint32_t src1 = - _src[1][_i].u32; - - int32_t dst = (uint64_t)src0 << (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const uint32_t src1 = - _src[1][_i].u32; - - int64_t dst = (uint64_t)src0 << (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ishr(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - const uint32_t src1 = - _src[1][_i].u32; - - int1_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const uint32_t src1 = - _src[1][_i].u32; - - int8_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const uint32_t src1 = - _src[1][_i].u32; - - int16_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const uint32_t src1 = - _src[1][_i].u32; - - int32_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const uint32_t src1 = - _src[1][_i].u32; - - int64_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_isign(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - - int1_t dst = (src0 == 0) ? 0 : ((src0 > 0) ? 1 : -1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - - int8_t dst = (src0 == 0) ? 0 : ((src0 > 0) ? 1 : -1); - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - - int16_t dst = (src0 == 0) ? 0 : ((src0 > 0) ? 1 : -1); - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - - int32_t dst = (src0 == 0) ? 0 : ((src0 > 0) ? 1 : -1); - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - - int64_t dst = (src0 == 0) ? 0 : ((src0 > 0) ? 1 : -1); - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_isub(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = src0 - src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = src0 - src1; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = src0 - src1; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = src0 - src1; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = src0 - src1; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_isub_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - int1_t dst = - src1 < 0 ? - (src0 - src1 < src0 ? u_intN_max(bit_size) : src0 - src1) : - (src0 < src0 - src1 ? u_intN_min(bit_size) : src0 - src1) -; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - int8_t dst = - src1 < 0 ? - (src0 - src1 < src0 ? u_intN_max(bit_size) : src0 - src1) : - (src0 < src0 - src1 ? u_intN_min(bit_size) : src0 - src1) -; - - _dst_val[_i].i8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - int16_t dst = - src1 < 0 ? - (src0 - src1 < src0 ? u_intN_max(bit_size) : src0 - src1) : - (src0 < src0 - src1 ? u_intN_min(bit_size) : src0 - src1) -; - - _dst_val[_i].i16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = - src1 < 0 ? - (src0 - src1 < src0 ? u_intN_max(bit_size) : src0 - src1) : - (src0 < src0 - src1 ? u_intN_min(bit_size) : src0 - src1) -; - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - int64_t dst = - src1 < 0 ? - (src0 - src1 < src0 ? u_intN_max(bit_size) : src0 - src1) : - (src0 < src0 - src1 ? u_intN_min(bit_size) : src0 - src1) -; - - _dst_val[_i].i64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ixor(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src0 ^ src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src0 ^ src1; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src0 ^ src1; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 ^ src1; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src0 ^ src1; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ldexp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const int32_t src1 = - _src[1][_i].i32; - - float16_t dst; - - -dst = (bit_size == 64) ? ldexp(src0, src1) : ldexpf(src0, src1); -/* flush denormals to zero. */ -if (!isnormal(dst)) - dst = copysignf(0.0f, src0); - - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const int32_t src1 = - _src[1][_i].i32; - - float32_t dst; - - -dst = (bit_size == 64) ? ldexp(src0, src1) : ldexpf(src0, src1); -/* flush denormals to zero. */ -if (!isnormal(dst)) - dst = copysignf(0.0f, src0); - - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const int32_t src1 = - _src[1][_i].i32; - - float64_t dst; - - -dst = (bit_size == 64) ? ldexp(src0, src1) : ldexpf(src0, src1); -/* flush denormals to zero. */ -if (!isnormal(dst)) - dst = copysignf(0.0f, src0); - - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_mov(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_pack_32_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - _src[0][1].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - dst.x = src0.x | ((uint32_t)src0.y << 16); - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_32_2x16_split(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint32_t dst = src0 | ((uint32_t)src1 << 16); - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_pack_32_4x8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - _src[0][1].u8, - _src[0][2].u8, - _src[0][3].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - dst.x = src0.x | ((uint32_t)src0.y << 8) | ((uint32_t)src0.z << 16) | ((uint32_t)src0.w << 24); - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_32_4x8_split(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - const uint8_t src2 = - _src[2][_i].u8; - const uint8_t src3 = - _src[3][_i].u8; - - uint32_t dst = src0 | ((uint32_t)src1 << 8) | ((uint32_t)src2 << 16) | ((uint32_t)src3 << 24); - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_pack_64_2x32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - _src[0][1].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - dst.x = src0.x | ((uint64_t)src0.y << 32); - - _dst_val[0].u64 = dst.x; - - -} -static void -evaluate_pack_64_2x32_split(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint64_t dst = src0 | ((uint64_t)src1 << 32); - - _dst_val[_i].u64 = dst; - - } - -} -static void -evaluate_pack_64_4x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - _src[0][1].u16, - _src[0][2].u16, - _src[0][3].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - dst.x = src0.x | ((uint64_t)src0.y << 16) | ((uint64_t)src0.z << 32) | ((uint64_t)src0.w << 48); - - _dst_val[0].u64 = dst.x; - - -} -static void -evaluate_pack_double_2x32_dxil(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - _src[0][1].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - dst.x = src0.x | ((uint64_t)src0.y << 32); - - _dst_val[0].u64 = dst.x; - - -} -static void -evaluate_pack_half_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_half_1x16(src0.x); -dst.x |= ((uint32_t) pack_half_1x16(src0.y)) << 16; - - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_half_2x16_rtz_split(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - dst.x = dst.y = dst.z = dst.w = pack_half_1x16_rtz(src0.x) | (pack_half_1x16_rtz(src1.x) << 16); - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_half_2x16_split(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct float32_vec src1 = { - _src[1][0].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - dst.x = dst.y = dst.z = dst.w = pack_half_1x16(src0.x) | (pack_half_1x16(src1.x) << 16); - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_sint_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct int32_vec src0 = { - _src[0][0].i32, - _src[0][1].i32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct int32_vec dst; - - -dst.x = _mesa_signed_to_signed(src0.x, 16) & 0xffff; -dst.x |= _mesa_signed_to_signed(src0.y, 16) << 16; - - - _dst_val[0].i32 = dst.x; - - -} -static void -evaluate_pack_snorm_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_snorm_1x16(src0.x); -dst.x |= ((uint32_t) pack_snorm_1x16(src0.y)) << 16; - - - _dst_val[0].u32 = dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_snorm_1x16(src0.x); -dst.x |= ((uint32_t) pack_snorm_1x16(src0.y)) << 16; - - - _dst_val[0].u32 = dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_snorm_1x16(src0.x); -dst.x |= ((uint32_t) pack_snorm_1x16(src0.y)) << 16; - - - _dst_val[0].u32 = dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_pack_snorm_4x8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_snorm_1x8(src0.x); -dst.x |= ((uint32_t) pack_snorm_1x8(src0.y)) << 8; -dst.x |= ((uint32_t) pack_snorm_1x8(src0.z)) << 16; -dst.x |= ((uint32_t) pack_snorm_1x8(src0.w)) << 24; - - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_uint_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - _src[0][1].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = _mesa_unsigned_to_unsigned(src0.x, 16); -dst.x |= _mesa_unsigned_to_unsigned(src0.y, 16) << 16; - - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_unorm_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - const struct float16_vec src0 = { - _mesa_half_to_float(_src[0][0].u16), - _mesa_half_to_float(_src[0][1].u16), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_unorm_1x16(src0.x); -dst.x |= ((uint32_t) pack_unorm_1x16(src0.y)) << 16; - - - _dst_val[0].u32 = dst.x; - - - break; - } - case 32: { - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_unorm_1x16(src0.x); -dst.x |= ((uint32_t) pack_unorm_1x16(src0.y)) << 16; - - - _dst_val[0].u32 = dst.x; - - - break; - } - case 64: { - - - - - const struct float64_vec src0 = { - _src[0][0].f64, - _src[0][1].f64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_unorm_1x16(src0.x); -dst.x |= ((uint32_t) pack_unorm_1x16(src0.y)) << 16; - - - _dst_val[0].u32 = dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_pack_unorm_4x8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct float32_vec src0 = { - _src[0][0].f32, - _src[0][1].f32, - _src[0][2].f32, - _src[0][3].f32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (uint32_t) pack_unorm_1x8(src0.x); -dst.x |= ((uint32_t) pack_unorm_1x8(src0.y)) << 8; -dst.x |= ((uint32_t) pack_unorm_1x8(src0.z)) << 16; -dst.x |= ((uint32_t) pack_unorm_1x8(src0.w)) << 24; - - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_uvec2_to_uint(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - _src[0][1].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (src0.x & 0xffff) | (src0.y << 16); - - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_pack_uvec4_to_uint(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - _src[0][1].u32, - _src[0][2].u32, - _src[0][3].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = (src0.x << 0) | - (src0.y << 8) | - (src0.z << 16) | - (src0.w << 24); - - - _dst_val[0].u32 = dst.x; - - -} -static void -evaluate_sad_u8x4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct uint1_vec src0 = { - _src[0][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src1 = { - _src[1][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src2 = { - _src[2][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint1_vec dst; - - -uint8_t s0_b0 = (src0.x & 0x000000ff) >> 0; -uint8_t s0_b1 = (src0.x & 0x0000ff00) >> 8; -uint8_t s0_b2 = (src0.x & 0x00ff0000) >> 16; -uint8_t s0_b3 = (src0.x & 0xff000000) >> 24; - -uint8_t s1_b0 = (src1.x & 0x000000ff) >> 0; -uint8_t s1_b1 = (src1.x & 0x0000ff00) >> 8; -uint8_t s1_b2 = (src1.x & 0x00ff0000) >> 16; -uint8_t s1_b3 = (src1.x & 0xff000000) >> 24; - -dst.x = src2.x + - (s0_b0 > s1_b0 ? (s0_b0 - s1_b0) : (s1_b0 - s0_b0)) + - (s0_b1 > s1_b1 ? (s0_b1 - s1_b1) : (s1_b1 - s0_b1)) + - (s0_b2 > s1_b2 ? (s0_b2 - s1_b2) : (s1_b2 - s0_b2)) + - (s0_b3 > s1_b3 ? (s0_b3 - s1_b3) : (s1_b3 - s0_b3)); - - - /* 1-bit integers get truncated */ - _dst_val[0].b = dst.x & 1; - - - break; - } - case 8: { - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src1 = { - _src[1][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src2 = { - _src[2][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - -uint8_t s0_b0 = (src0.x & 0x000000ff) >> 0; -uint8_t s0_b1 = (src0.x & 0x0000ff00) >> 8; -uint8_t s0_b2 = (src0.x & 0x00ff0000) >> 16; -uint8_t s0_b3 = (src0.x & 0xff000000) >> 24; - -uint8_t s1_b0 = (src1.x & 0x000000ff) >> 0; -uint8_t s1_b1 = (src1.x & 0x0000ff00) >> 8; -uint8_t s1_b2 = (src1.x & 0x00ff0000) >> 16; -uint8_t s1_b3 = (src1.x & 0xff000000) >> 24; - -dst.x = src2.x + - (s0_b0 > s1_b0 ? (s0_b0 - s1_b0) : (s1_b0 - s0_b0)) + - (s0_b1 > s1_b1 ? (s0_b1 - s1_b1) : (s1_b1 - s0_b1)) + - (s0_b2 > s1_b2 ? (s0_b2 - s1_b2) : (s1_b2 - s0_b2)) + - (s0_b3 > s1_b3 ? (s0_b3 - s1_b3) : (s1_b3 - s0_b3)); - - - _dst_val[0].u8 = dst.x; - - - break; - } - case 16: { - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src1 = { - _src[1][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src2 = { - _src[2][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - -uint8_t s0_b0 = (src0.x & 0x000000ff) >> 0; -uint8_t s0_b1 = (src0.x & 0x0000ff00) >> 8; -uint8_t s0_b2 = (src0.x & 0x00ff0000) >> 16; -uint8_t s0_b3 = (src0.x & 0xff000000) >> 24; - -uint8_t s1_b0 = (src1.x & 0x000000ff) >> 0; -uint8_t s1_b1 = (src1.x & 0x0000ff00) >> 8; -uint8_t s1_b2 = (src1.x & 0x00ff0000) >> 16; -uint8_t s1_b3 = (src1.x & 0xff000000) >> 24; - -dst.x = src2.x + - (s0_b0 > s1_b0 ? (s0_b0 - s1_b0) : (s1_b0 - s0_b0)) + - (s0_b1 > s1_b1 ? (s0_b1 - s1_b1) : (s1_b1 - s0_b1)) + - (s0_b2 > s1_b2 ? (s0_b2 - s1_b2) : (s1_b2 - s0_b2)) + - (s0_b3 > s1_b3 ? (s0_b3 - s1_b3) : (s1_b3 - s0_b3)); - - - _dst_val[0].u16 = dst.x; - - - break; - } - case 32: { - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src1 = { - _src[1][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src2 = { - _src[2][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -uint8_t s0_b0 = (src0.x & 0x000000ff) >> 0; -uint8_t s0_b1 = (src0.x & 0x0000ff00) >> 8; -uint8_t s0_b2 = (src0.x & 0x00ff0000) >> 16; -uint8_t s0_b3 = (src0.x & 0xff000000) >> 24; - -uint8_t s1_b0 = (src1.x & 0x000000ff) >> 0; -uint8_t s1_b1 = (src1.x & 0x0000ff00) >> 8; -uint8_t s1_b2 = (src1.x & 0x00ff0000) >> 16; -uint8_t s1_b3 = (src1.x & 0xff000000) >> 24; - -dst.x = src2.x + - (s0_b0 > s1_b0 ? (s0_b0 - s1_b0) : (s1_b0 - s0_b0)) + - (s0_b1 > s1_b1 ? (s0_b1 - s1_b1) : (s1_b1 - s0_b1)) + - (s0_b2 > s1_b2 ? (s0_b2 - s1_b2) : (s1_b2 - s0_b2)) + - (s0_b3 > s1_b3 ? (s0_b3 - s1_b3) : (s1_b3 - s0_b3)); - - - _dst_val[0].u32 = dst.x; - - - break; - } - case 64: { - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src1 = { - _src[1][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src2 = { - _src[2][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - -uint8_t s0_b0 = (src0.x & 0x000000ff) >> 0; -uint8_t s0_b1 = (src0.x & 0x0000ff00) >> 8; -uint8_t s0_b2 = (src0.x & 0x00ff0000) >> 16; -uint8_t s0_b3 = (src0.x & 0xff000000) >> 24; - -uint8_t s1_b0 = (src1.x & 0x000000ff) >> 0; -uint8_t s1_b1 = (src1.x & 0x0000ff00) >> 8; -uint8_t s1_b2 = (src1.x & 0x00ff0000) >> 16; -uint8_t s1_b3 = (src1.x & 0xff000000) >> 24; - -dst.x = src2.x + - (s0_b0 > s1_b0 ? (s0_b0 - s1_b0) : (s1_b0 - s0_b0)) + - (s0_b1 > s1_b1 ? (s0_b1 - s1_b1) : (s1_b1 - s0_b1)) + - (s0_b2 > s1_b2 ? (s0_b2 - s1_b2) : (s1_b2 - s0_b2)) + - (s0_b3 > s1_b3 ? (s0_b3 - s1_b3) : (s1_b3 - s0_b3)); - - - _dst_val[0].u64 = dst.x; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_sdot_2x16_iadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const int32_t v0x = (int16_t)(src0 ); - const int32_t v0y = (int16_t)(src0 >> 16); - const int32_t v1x = (int16_t)(src1 ); - const int32_t v1y = (int16_t)(src1 >> 16); - - dst = (v0x * v1x) + (v0y * v1y) + src2; - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_sdot_2x16_iadd_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const int64_t v0x = (int16_t)(src0 ); - const int64_t v0y = (int16_t)(src0 >> 16); - const int64_t v1x = (int16_t)(src1 ); - const int64_t v1y = (int16_t)(src1 >> 16); - - const int64_t tmp = (v0x * v1x) + (v0y * v1y) + src2; - - dst = tmp >= INT32_MAX ? INT32_MAX : (tmp <= INT32_MIN ? INT32_MIN : tmp); - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_sdot_4x8_iadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const int32_t v0x = (int8_t)(src0 ); - const int32_t v0y = (int8_t)(src0 >> 8); - const int32_t v0z = (int8_t)(src0 >> 16); - const int32_t v0w = (int8_t)(src0 >> 24); - const int32_t v1x = (int8_t)(src1 ); - const int32_t v1y = (int8_t)(src1 >> 8); - const int32_t v1z = (int8_t)(src1 >> 16); - const int32_t v1w = (int8_t)(src1 >> 24); - - dst = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_sdot_4x8_iadd_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const int64_t v0x = (int8_t)(src0 ); - const int64_t v0y = (int8_t)(src0 >> 8); - const int64_t v0z = (int8_t)(src0 >> 16); - const int64_t v0w = (int8_t)(src0 >> 24); - const int64_t v1x = (int8_t)(src1 ); - const int64_t v1y = (int8_t)(src1 >> 8); - const int64_t v1z = (int8_t)(src1 >> 16); - const int64_t v1w = (int8_t)(src1 >> 24); - - const int64_t tmp = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - dst = tmp >= INT32_MAX ? INT32_MAX : (tmp <= INT32_MIN ? INT32_MIN : tmp); - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_seq(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = (src0 == src1) ? 1.0f : 0.0f; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = (src0 == src1) ? 1.0f : 0.0f; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = (src0 == src1) ? 1.0f : 0.0f; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_sge(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = (src0 >= src1) ? 1.0f : 0.0f; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = (src0 >= src1) ? 1.0f : 0.0f; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = (src0 >= src1) ? 1.0f : 0.0f; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_slt(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = (src0 < src1) ? 1.0f : 0.0f; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = (src0 < src1) ? 1.0f : 0.0f; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = (src0 < src1) ? 1.0f : 0.0f; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_sne(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float src0 = - _mesa_half_to_float(_src[0][_i].u16); - const float src1 = - _mesa_half_to_float(_src[1][_i].u16); - - float16_t dst = (src0 != src1) ? 1.0f : 0.0f; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float32_t src0 = - _src[0][_i].f32; - const float32_t src1 = - _src[1][_i].f32; - - float32_t dst = (src0 != src1) ? 1.0f : 0.0f; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const float64_t src0 = - _src[0][_i].f64; - const float64_t src1 = - _src[1][_i].f64; - - float64_t dst = (src0 != src1) ? 1.0f : 0.0f; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_sudot_4x8_iadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const int32_t v0x = (int8_t)(src0 ); - const int32_t v0y = (int8_t)(src0 >> 8); - const int32_t v0z = (int8_t)(src0 >> 16); - const int32_t v0w = (int8_t)(src0 >> 24); - const uint32_t v1x = (uint8_t)(src1 ); - const uint32_t v1y = (uint8_t)(src1 >> 8); - const uint32_t v1z = (uint8_t)(src1 >> 16); - const uint32_t v1w = (uint8_t)(src1 >> 24); - - dst = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_sudot_4x8_iadd_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const int64_t v0x = (int8_t)(src0 ); - const int64_t v0y = (int8_t)(src0 >> 8); - const int64_t v0z = (int8_t)(src0 >> 16); - const int64_t v0w = (int8_t)(src0 >> 24); - const uint64_t v1x = (uint8_t)(src1 ); - const uint64_t v1y = (uint8_t)(src1 >> 8); - const uint64_t v1z = (uint8_t)(src1 >> 16); - const uint64_t v1w = (uint8_t)(src1 >> 24); - - const int64_t tmp = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - dst = tmp >= INT32_MAX ? INT32_MAX : (tmp <= INT32_MIN ? INT32_MIN : tmp); - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_u2f16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_u2f32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - float32_t dst = src0; - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_u2f64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - float64_t dst = src0; - - _dst_val[_i].f64 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 64)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 64); - } - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_u2fmp(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float16_t dst = src0; - - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - - if (nir_is_denorm_flush_to_zero(execution_mode, 16)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 16); - } - } - -} -static void -evaluate_u2u1(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint1_t dst = src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_u2u16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_u2u32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_u2u64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint64_t dst = src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_u2u8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint8_t dst = src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uabs_isub(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - /* 1-bit integers use a 0/-1 convention */ - const int1_t src0 = -(int1_t)_src[0][_i].b; - /* 1-bit integers use a 0/-1 convention */ - const int1_t src1 = -(int1_t)_src[1][_i].b; - - uint1_t dst = - src1 > src0 ? (uint64_t) src1 - (uint64_t) src0 - : (uint64_t) src0 - (uint64_t) src1 -; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int8_t src0 = - _src[0][_i].i8; - const int8_t src1 = - _src[1][_i].i8; - - uint8_t dst = - src1 > src0 ? (uint64_t) src1 - (uint64_t) src0 - : (uint64_t) src0 - (uint64_t) src1 -; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int16_t src0 = - _src[0][_i].i16; - const int16_t src1 = - _src[1][_i].i16; - - uint16_t dst = - src1 > src0 ? (uint64_t) src1 - (uint64_t) src0 - : (uint64_t) src0 - (uint64_t) src1 -; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - uint32_t dst = - src1 > src0 ? (uint64_t) src1 - (uint64_t) src0 - : (uint64_t) src0 - (uint64_t) src1 -; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int64_t src0 = - _src[0][_i].i64; - const int64_t src1 = - _src[1][_i].i64; - - uint64_t dst = - src1 > src0 ? (uint64_t) src1 - (uint64_t) src0 - : (uint64_t) src0 - (uint64_t) src1 -; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uabs_usub(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (src1 > src0) ? (src1 - src0) : (src0 - src1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (src1 > src0) ? (src1 - src0) : (src0 - src1); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (src1 > src0) ? (src1 - src0) : (src0 - src1); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (src1 > src0) ? (src1 - src0) : (src0 - src1); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (src1 > src0) ? (src1 - src0) : (src0 - src1); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uadd_carry(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src0 + src1 < src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src0 + src1 < src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src0 + src1 < src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 + src1 < src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src0 + src1 < src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uadd_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (src0 + src1) < src0 ? u_uintN_max(sizeof(src0) * 8) : (src0 + src1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (src0 + src1) < src0 ? u_uintN_max(sizeof(src0) * 8) : (src0 + src1); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (src0 + src1) < src0 ? u_uintN_max(sizeof(src0) * 8) : (src0 + src1); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (src0 + src1) < src0 ? u_uintN_max(sizeof(src0) * 8) : (src0 + src1); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (src0 + src1) < src0 ? u_uintN_max(sizeof(src0) * 8) : (src0 + src1); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ubfe(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst; - - -unsigned base = src0; -unsigned offset = src1 & 0x1F; -unsigned bits = src2 & 0x1F; -if (bits == 0) { - dst = 0; -} else if (offset + bits < 32) { - dst = (base << (32 - bits - offset)) >> (32 - bits); -} else { - dst = base >> offset; -} - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_ubitfield_extract(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const int32_t src1 = - _src[1][_i].i32; - const int32_t src2 = - _src[2][_i].i32; - - uint32_t dst; - - -unsigned base = src0; -int offset = src1, bits = src2; -if (bits == 0) { - dst = 0; -} else if (bits < 0 || offset < 0 || offset + bits > 32) { - dst = 0; /* undefined per the spec */ -} else { - dst = (base >> offset) & ((1ull << bits) - 1); -} - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_uclz(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint32_t dst; - - -int bit; -for (bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 & (1u << bit)) != 0) - break; -} -dst = (unsigned)(bit_size - bit - 1); - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_udiv(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src1 == 0 ? 0 : (src0 / src1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src1 == 0 ? 0 : (src0 / src1); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_udot_2x16_uadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst; - - - const uint32_t v0x = (uint16_t)(src0 ); - const uint32_t v0y = (uint16_t)(src0 >> 16); - const uint32_t v1x = (uint16_t)(src1 ); - const uint32_t v1y = (uint16_t)(src1 >> 16); - - dst = (v0x * v1x) + (v0y * v1y) + src2; - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_udot_2x16_uadd_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const uint64_t v0x = (uint16_t)(src0 ); - const uint64_t v0y = (uint16_t)(src0 >> 16); - const uint64_t v1x = (uint16_t)(src1 ); - const uint64_t v1y = (uint16_t)(src1 >> 16); - - const uint64_t tmp = (v0x * v1x) + (v0y * v1y) + src2; - - dst = tmp >= UINT32_MAX ? UINT32_MAX : tmp; - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_udot_4x8_uadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst; - - - const uint32_t v0x = (uint8_t)(src0 ); - const uint32_t v0y = (uint8_t)(src0 >> 8); - const uint32_t v0z = (uint8_t)(src0 >> 16); - const uint32_t v0w = (uint8_t)(src0 >> 24); - const uint32_t v1x = (uint8_t)(src1 ); - const uint32_t v1y = (uint8_t)(src1 >> 8); - const uint32_t v1z = (uint8_t)(src1 >> 16); - const uint32_t v1w = (uint8_t)(src1 >> 24); - - dst = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_udot_4x8_uadd_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const int32_t src2 = - _src[2][_i].i32; - - int32_t dst; - - - const uint64_t v0x = (uint8_t)(src0 ); - const uint64_t v0y = (uint8_t)(src0 >> 8); - const uint64_t v0z = (uint8_t)(src0 >> 16); - const uint64_t v0w = (uint8_t)(src0 >> 24); - const uint64_t v1x = (uint8_t)(src1 ); - const uint64_t v1y = (uint8_t)(src1 >> 8); - const uint64_t v1z = (uint8_t)(src1 >> 16); - const uint64_t v1w = (uint8_t)(src1 >> 24); - - const uint64_t tmp = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - dst = tmp >= UINT32_MAX ? UINT32_MAX : tmp; - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_ufind_msb(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - int32_t dst; - - -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - int32_t dst; - - -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - int32_t dst; - - -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - int32_t dst; - - -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - int32_t dst; - - -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ufind_msb_rev(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - - int32_t dst; - - -dst = -1; -for (int bit = 0; bit < bit_size; bit++) { - if ((src0 << bit) & 0x80000000) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - - int32_t dst; - - -dst = -1; -for (int bit = 0; bit < bit_size; bit++) { - if ((src0 << bit) & 0x80000000) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - - int32_t dst; - - -dst = -1; -for (int bit = 0; bit < bit_size; bit++) { - if ((src0 << bit) & 0x80000000) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - int32_t dst; - - -dst = -1; -for (int bit = 0; bit < bit_size; bit++) { - if ((src0 << bit) & 0x80000000) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - int32_t dst; - - -dst = -1; -for (int bit = 0; bit < bit_size; bit++) { - if ((src0 << bit) & 0x80000000) { - dst = bit; - break; - } -} - - - _dst_val[_i].i32 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uge(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool1_t dst = src0 >= src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uge16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool16_t dst = src0 >= src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uge32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool32_t dst = src0 >= src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uge8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool8_t dst = src0 >= src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uhadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (src0 & src1) + ((src0 ^ src1) >> 1); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ult(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool1_t dst = src0 < src1; - - _dst_val[_i].b = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ult16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool16_t dst = src0 < src1; - - _dst_val[_i].i16 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ult32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool32_t dst = src0 < src1; - - _dst_val[_i].i32 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ult8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - bool8_t dst = src0 < src1; - - _dst_val[_i].i8 = -(int)dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_umad24(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst = (((uint32_t)src0 << 8) >> 8) * (((uint32_t)src1 << 8) >> 8) + src2; - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_umad24_relaxed(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - const uint32_t src2 = - _src[2][_i].u32; - - uint32_t dst = src0 * src1 + src2; - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_umax(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src1 > src0 ? src1 : src0; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src1 > src0 ? src1 : src0; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_umax_4x8_vc4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst; - - -dst = 0; -for (int i = 0; i < 32; i += 8) { - dst |= MAX2((src0 >> i) & 0xff, (src1 >> i) & 0xff) << i; -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_umin(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src1 > src0 ? src0 : src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src1 > src0 ? src0 : src1; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_umin_4x8_vc4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst; - - -dst = 0; -for (int i = 0; i < 32; i += 8) { - dst |= MIN2((src0 >> i) & 0xff, (src1 >> i) & 0xff) << i; -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_umod(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src1 == 0 ? 0 : src0 % src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src1 == 0 ? 0 : src0 % src1; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_umul24(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst = (((uint32_t)src0 << 8) >> 8) * (((uint32_t)src1 << 8) >> 8); - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_umul24_relaxed(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 * src1; - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_umul_2x32_64(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint64_t dst = (uint64_t)src0 * (uint64_t)src1; - - _dst_val[_i].u64 = dst; - - } - -} -static void -evaluate_umul_32x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 * (uint16_t) src1; - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_umul_high(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst; - - -if (bit_size == 64) { - /* The casts are kind-of annoying but needed to prevent compiler warnings. */ - uint32_t src0_u32[2] = { src0, (uint64_t)src0 >> 32 }; - uint32_t src1_u32[2] = { src1, (uint64_t)src1 >> 32 }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - dst = ((uint64_t)src0 * (uint64_t)src1) >> bit_size; -} - - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst; - - -if (bit_size == 64) { - /* The casts are kind-of annoying but needed to prevent compiler warnings. */ - uint32_t src0_u32[2] = { src0, (uint64_t)src0 >> 32 }; - uint32_t src1_u32[2] = { src1, (uint64_t)src1 >> 32 }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - dst = ((uint64_t)src0 * (uint64_t)src1) >> bit_size; -} - - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst; - - -if (bit_size == 64) { - /* The casts are kind-of annoying but needed to prevent compiler warnings. */ - uint32_t src0_u32[2] = { src0, (uint64_t)src0 >> 32 }; - uint32_t src1_u32[2] = { src1, (uint64_t)src1 >> 32 }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - dst = ((uint64_t)src0 * (uint64_t)src1) >> bit_size; -} - - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst; - - -if (bit_size == 64) { - /* The casts are kind-of annoying but needed to prevent compiler warnings. */ - uint32_t src0_u32[2] = { src0, (uint64_t)src0 >> 32 }; - uint32_t src1_u32[2] = { src1, (uint64_t)src1 >> 32 }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - dst = ((uint64_t)src0 * (uint64_t)src1) >> bit_size; -} - - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst; - - -if (bit_size == 64) { - /* The casts are kind-of annoying but needed to prevent compiler warnings. */ - uint32_t src0_u32[2] = { src0, (uint64_t)src0 >> 32 }; - uint32_t src1_u32[2] = { src1, (uint64_t)src1 >> 32 }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - dst = ((uint64_t)src0 * (uint64_t)src1) >> bit_size; -} - - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_umul_low(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst; - - -uint64_t mask = (1 << (bit_size / 2)) - 1; -dst = ((uint64_t)src0 & mask) * ((uint64_t)src1 & mask); - - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_umul_unorm_4x8_vc4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst; - - -dst = 0; -for (int i = 0; i < 32; i += 8) { - int src0_chan = (src0 >> i) & 0xff; - int src1_chan = (src1 >> i) & 0xff; - dst |= ((src0_chan * src1_chan) / 255) << i; -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_unpack_32_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - dst.x = src0.x; dst.y = src0.x >> 16; - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - -} -static void -evaluate_unpack_32_2x16_split_x(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint16_t dst = src0; - - _dst_val[_i].u16 = dst; - - } - -} -static void -evaluate_unpack_32_2x16_split_y(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - uint16_t dst = src0 >> 16; - - _dst_val[_i].u16 = dst; - - } - -} -static void -evaluate_unpack_32_4x8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - dst.x = src0.x; dst.y = src0.x >> 8; dst.z = src0.x >> 16; dst.w = src0.x >> 24; - - _dst_val[0].u8 = dst.x; - - _dst_val[1].u8 = dst.y; - - _dst_val[2].u8 = dst.z; - - _dst_val[3].u8 = dst.w; - - -} -static void -evaluate_unpack_64_2x32(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - dst.x = src0.x; dst.y = src0.x >> 32; - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - -} -static void -evaluate_unpack_64_2x32_split_x(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint32_t dst = src0; - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_unpack_64_2x32_split_y(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - - uint32_t dst = src0 >> 32; - - _dst_val[_i].u32 = dst; - - } - -} -static void -evaluate_unpack_64_4x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - dst.x = src0.x; dst.y = src0.x >> 16; dst.z = src0.x >> 32; dst.w = src0.x >> 48; - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - _dst_val[2].u16 = dst.z; - - _dst_val[3].u16 = dst.w; - - -} -static void -evaluate_unpack_double_2x32_dxil(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - dst.x = src0.x; dst.y = src0.x >> 32; - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - -} -static void -evaluate_unpack_half_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = unpack_half_1x16((uint16_t)(src0.x & 0xffff)); -dst.y = unpack_half_1x16((uint16_t)(src0.x << 16)); - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - -} -static void -evaluate_unpack_half_2x16_flush_to_zero(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = unpack_half_1x16_flush_to_zero((uint16_t)(src0.x & 0xffff)); -dst.y = unpack_half_1x16_flush_to_zero((uint16_t)(src0.x << 16)); - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - -} -static void -evaluate_unpack_half_2x16_split_x(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float32_t dst = unpack_half_1x16((uint16_t)(src0 & 0xffff)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_unpack_half_2x16_split_x_flush_to_zero(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float32_t dst = unpack_half_1x16_flush_to_zero((uint16_t)(src0 & 0xffff)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_unpack_half_2x16_split_y(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float32_t dst = unpack_half_1x16((uint16_t)(src0 >> 16)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_unpack_half_2x16_split_y_flush_to_zero(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - - float32_t dst = unpack_half_1x16_flush_to_zero((uint16_t)(src0 >> 16)); - - _dst_val[_i].f32 = dst; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[_i], 32); - } - } - -} -static void -evaluate_unpack_snorm_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = unpack_snorm_1x16((uint16_t)(src0.x & 0xffff)); -dst.y = unpack_snorm_1x16((uint16_t)(src0.x << 16)); - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - -} -static void -evaluate_unpack_snorm_4x8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = unpack_snorm_1x8((uint8_t)(src0.x & 0xff)); -dst.y = unpack_snorm_1x8((uint8_t)((src0.x >> 8) & 0xff)); -dst.z = unpack_snorm_1x8((uint8_t)((src0.x >> 16) & 0xff)); -dst.w = unpack_snorm_1x8((uint8_t)(src0.x >> 24)); - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - _dst_val[2].f32 = dst.z; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[2], 32); - } - _dst_val[3].f32 = dst.w; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[3], 32); - } - -} -static void -evaluate_unpack_unorm_2x16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = unpack_unorm_1x16((uint16_t)(src0.x & 0xffff)); -dst.y = unpack_unorm_1x16((uint16_t)(src0.x << 16)); - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - -} -static void -evaluate_unpack_unorm_4x8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct float32_vec dst; - - -dst.x = unpack_unorm_1x8((uint8_t)(src0.x & 0xff)); -dst.y = unpack_unorm_1x8((uint8_t)((src0.x >> 8) & 0xff)); -dst.z = unpack_unorm_1x8((uint8_t)((src0.x >> 16) & 0xff)); -dst.w = unpack_unorm_1x8((uint8_t)(src0.x >> 24)); - - - _dst_val[0].f32 = dst.x; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[0], 32); - } - _dst_val[1].f32 = dst.y; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[1], 32); - } - _dst_val[2].f32 = dst.z; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[2], 32); - } - _dst_val[3].f32 = dst.w; - - if (nir_is_denorm_flush_to_zero(execution_mode, 32)) { - constant_denorm_flush_to_zero(&_dst_val[3], 32); - } - -} -static void -evaluate_urhadd(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = (src0 | src1) - ((src0 ^ src1) >> 1); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_urol(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint32_t src1 = - _src[1][_i].u32; - - uint1_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 << (src1 & rotate_mask)) | - (src0 >> (-src1 & rotate_mask)); - - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint32_t src1 = - _src[1][_i].u32; - - uint8_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 << (src1 & rotate_mask)) | - (src0 >> (-src1 & rotate_mask)); - - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint32_t src1 = - _src[1][_i].u32; - - uint16_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 << (src1 & rotate_mask)) | - (src0 >> (-src1 & rotate_mask)); - - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 << (src1 & rotate_mask)) | - (src0 >> (-src1 & rotate_mask)); - - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint32_t src1 = - _src[1][_i].u32; - - uint64_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 << (src1 & rotate_mask)) | - (src0 >> (-src1 & rotate_mask)); - - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_uror(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint32_t src1 = - _src[1][_i].u32; - - uint1_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 >> (src1 & rotate_mask)) | - (src0 << (-src1 & rotate_mask)); - - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint32_t src1 = - _src[1][_i].u32; - - uint8_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 >> (src1 & rotate_mask)) | - (src0 << (-src1 & rotate_mask)); - - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint32_t src1 = - _src[1][_i].u32; - - uint16_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 >> (src1 & rotate_mask)) | - (src0 << (-src1 & rotate_mask)); - - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 >> (src1 & rotate_mask)) | - (src0 << (-src1 & rotate_mask)); - - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint32_t src1 = - _src[1][_i].u32; - - uint64_t dst; - - - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 >> (src1 & rotate_mask)) | - (src0 << (-src1 & rotate_mask)); - - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_usadd_4x8_vc4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst; - - -dst = 0; -for (int i = 0; i < 32; i += 8) { - dst |= MIN2(((src0 >> i) & 0xff) + ((src1 >> i) & 0xff), 0xff) << i; -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_ushr(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint32_t src1 = - _src[1][_i].u32; - - uint1_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint32_t src1 = - _src[1][_i].u32; - - uint8_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint32_t src1 = - _src[1][_i].u32; - - uint16_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint32_t src1 = - _src[1][_i].u32; - - uint64_t dst = src0 >> (src1 & (sizeof(src0) * 8 - 1)); - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_ussub_4x8_vc4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - UNUSED unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const int32_t src0 = - _src[0][_i].i32; - const int32_t src1 = - _src[1][_i].i32; - - int32_t dst; - - -dst = 0; -for (int i = 0; i < 32; i += 8) { - int src0_chan = (src0 >> i) & 0xff; - int src1_chan = (src1 >> i) & 0xff; - if (src0_chan > src1_chan) - dst |= (src0_chan - src1_chan) << i; -} - - - _dst_val[_i].i32 = dst; - - } - -} -static void -evaluate_usub_borrow(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src0 < src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src0 < src1; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src0 < src1; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 < src1; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src0 < src1; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_usub_sat(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint1_t src0 = - _src[0][_i].b; - const uint1_t src1 = - _src[1][_i].b; - - uint1_t dst = src0 < src1 ? 0 : src0 - src1; - - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - - } - - break; - } - case 8: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint8_t src0 = - _src[0][_i].u8; - const uint8_t src1 = - _src[1][_i].u8; - - uint8_t dst = src0 < src1 ? 0 : src0 - src1; - - _dst_val[_i].u8 = dst; - - } - - break; - } - case 16: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint16_t src0 = - _src[0][_i].u16; - const uint16_t src1 = - _src[1][_i].u16; - - uint16_t dst = src0 < src1 ? 0 : src0 - src1; - - _dst_val[_i].u16 = dst; - - } - - break; - } - case 32: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint32_t src0 = - _src[0][_i].u32; - const uint32_t src1 = - _src[1][_i].u32; - - uint32_t dst = src0 < src1 ? 0 : src0 - src1; - - _dst_val[_i].u32 = dst; - - } - - break; - } - case 64: { - - - - - for (unsigned _i = 0; _i < num_components; _i++) { - const uint64_t src0 = - _src[0][_i].u64; - const uint64_t src1 = - _src[1][_i].u64; - - uint64_t dst = src0 < src1 ? 0 : src0 - src1; - - _dst_val[_i].u64 = dst; - - } - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_vec16(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct uint1_vec src0 = { - _src[0][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src1 = { - _src[1][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src2 = { - _src[2][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src3 = { - _src[3][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src4 = { - _src[4][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src5 = { - _src[5][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src6 = { - _src[6][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src7 = { - _src[7][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src8 = { - _src[8][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src9 = { - _src[9][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src10 = { - _src[10][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src11 = { - _src[11][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src12 = { - _src[12][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src13 = { - _src[13][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src14 = { - _src[14][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src15 = { - _src[15][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint1_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; -dst.i = src8.x; -dst.j = src9.x; -dst.k = src10.x; -dst.l = src11.x; -dst.m = src12.x; -dst.n = src13.x; -dst.o = src14.x; -dst.p = src15.x; - - - /* 1-bit integers get truncated */ - _dst_val[0].b = dst.x & 1; - - /* 1-bit integers get truncated */ - _dst_val[1].b = dst.y & 1; - - /* 1-bit integers get truncated */ - _dst_val[2].b = dst.z & 1; - - /* 1-bit integers get truncated */ - _dst_val[3].b = dst.w & 1; - - /* 1-bit integers get truncated */ - _dst_val[4].b = dst.e & 1; - - /* 1-bit integers get truncated */ - _dst_val[5].b = dst.f & 1; - - /* 1-bit integers get truncated */ - _dst_val[6].b = dst.g & 1; - - /* 1-bit integers get truncated */ - _dst_val[7].b = dst.h & 1; - - /* 1-bit integers get truncated */ - _dst_val[8].b = dst.i & 1; - - /* 1-bit integers get truncated */ - _dst_val[9].b = dst.j & 1; - - /* 1-bit integers get truncated */ - _dst_val[10].b = dst.k & 1; - - /* 1-bit integers get truncated */ - _dst_val[11].b = dst.l & 1; - - /* 1-bit integers get truncated */ - _dst_val[12].b = dst.m & 1; - - /* 1-bit integers get truncated */ - _dst_val[13].b = dst.n & 1; - - /* 1-bit integers get truncated */ - _dst_val[14].b = dst.o & 1; - - /* 1-bit integers get truncated */ - _dst_val[15].b = dst.p & 1; - - - break; - } - case 8: { - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src1 = { - _src[1][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src2 = { - _src[2][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src3 = { - _src[3][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src4 = { - _src[4][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src5 = { - _src[5][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src6 = { - _src[6][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src7 = { - _src[7][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src8 = { - _src[8][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src9 = { - _src[9][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src10 = { - _src[10][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src11 = { - _src[11][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src12 = { - _src[12][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src13 = { - _src[13][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src14 = { - _src[14][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src15 = { - _src[15][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; -dst.i = src8.x; -dst.j = src9.x; -dst.k = src10.x; -dst.l = src11.x; -dst.m = src12.x; -dst.n = src13.x; -dst.o = src14.x; -dst.p = src15.x; - - - _dst_val[0].u8 = dst.x; - - _dst_val[1].u8 = dst.y; - - _dst_val[2].u8 = dst.z; - - _dst_val[3].u8 = dst.w; - - _dst_val[4].u8 = dst.e; - - _dst_val[5].u8 = dst.f; - - _dst_val[6].u8 = dst.g; - - _dst_val[7].u8 = dst.h; - - _dst_val[8].u8 = dst.i; - - _dst_val[9].u8 = dst.j; - - _dst_val[10].u8 = dst.k; - - _dst_val[11].u8 = dst.l; - - _dst_val[12].u8 = dst.m; - - _dst_val[13].u8 = dst.n; - - _dst_val[14].u8 = dst.o; - - _dst_val[15].u8 = dst.p; - - - break; - } - case 16: { - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src1 = { - _src[1][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src2 = { - _src[2][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src3 = { - _src[3][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src4 = { - _src[4][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src5 = { - _src[5][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src6 = { - _src[6][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src7 = { - _src[7][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src8 = { - _src[8][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src9 = { - _src[9][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src10 = { - _src[10][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src11 = { - _src[11][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src12 = { - _src[12][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src13 = { - _src[13][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src14 = { - _src[14][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src15 = { - _src[15][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; -dst.i = src8.x; -dst.j = src9.x; -dst.k = src10.x; -dst.l = src11.x; -dst.m = src12.x; -dst.n = src13.x; -dst.o = src14.x; -dst.p = src15.x; - - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - _dst_val[2].u16 = dst.z; - - _dst_val[3].u16 = dst.w; - - _dst_val[4].u16 = dst.e; - - _dst_val[5].u16 = dst.f; - - _dst_val[6].u16 = dst.g; - - _dst_val[7].u16 = dst.h; - - _dst_val[8].u16 = dst.i; - - _dst_val[9].u16 = dst.j; - - _dst_val[10].u16 = dst.k; - - _dst_val[11].u16 = dst.l; - - _dst_val[12].u16 = dst.m; - - _dst_val[13].u16 = dst.n; - - _dst_val[14].u16 = dst.o; - - _dst_val[15].u16 = dst.p; - - - break; - } - case 32: { - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src1 = { - _src[1][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src2 = { - _src[2][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src3 = { - _src[3][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src4 = { - _src[4][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src5 = { - _src[5][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src6 = { - _src[6][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src7 = { - _src[7][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src8 = { - _src[8][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src9 = { - _src[9][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src10 = { - _src[10][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src11 = { - _src[11][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src12 = { - _src[12][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src13 = { - _src[13][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src14 = { - _src[14][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src15 = { - _src[15][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; -dst.i = src8.x; -dst.j = src9.x; -dst.k = src10.x; -dst.l = src11.x; -dst.m = src12.x; -dst.n = src13.x; -dst.o = src14.x; -dst.p = src15.x; - - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - _dst_val[2].u32 = dst.z; - - _dst_val[3].u32 = dst.w; - - _dst_val[4].u32 = dst.e; - - _dst_val[5].u32 = dst.f; - - _dst_val[6].u32 = dst.g; - - _dst_val[7].u32 = dst.h; - - _dst_val[8].u32 = dst.i; - - _dst_val[9].u32 = dst.j; - - _dst_val[10].u32 = dst.k; - - _dst_val[11].u32 = dst.l; - - _dst_val[12].u32 = dst.m; - - _dst_val[13].u32 = dst.n; - - _dst_val[14].u32 = dst.o; - - _dst_val[15].u32 = dst.p; - - - break; - } - case 64: { - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src1 = { - _src[1][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src2 = { - _src[2][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src3 = { - _src[3][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src4 = { - _src[4][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src5 = { - _src[5][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src6 = { - _src[6][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src7 = { - _src[7][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src8 = { - _src[8][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src9 = { - _src[9][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src10 = { - _src[10][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src11 = { - _src[11][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src12 = { - _src[12][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src13 = { - _src[13][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src14 = { - _src[14][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src15 = { - _src[15][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; -dst.i = src8.x; -dst.j = src9.x; -dst.k = src10.x; -dst.l = src11.x; -dst.m = src12.x; -dst.n = src13.x; -dst.o = src14.x; -dst.p = src15.x; - - - _dst_val[0].u64 = dst.x; - - _dst_val[1].u64 = dst.y; - - _dst_val[2].u64 = dst.z; - - _dst_val[3].u64 = dst.w; - - _dst_val[4].u64 = dst.e; - - _dst_val[5].u64 = dst.f; - - _dst_val[6].u64 = dst.g; - - _dst_val[7].u64 = dst.h; - - _dst_val[8].u64 = dst.i; - - _dst_val[9].u64 = dst.j; - - _dst_val[10].u64 = dst.k; - - _dst_val[11].u64 = dst.l; - - _dst_val[12].u64 = dst.m; - - _dst_val[13].u64 = dst.n; - - _dst_val[14].u64 = dst.o; - - _dst_val[15].u64 = dst.p; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_vec2(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct uint1_vec src0 = { - _src[0][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src1 = { - _src[1][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint1_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; - - - /* 1-bit integers get truncated */ - _dst_val[0].b = dst.x & 1; - - /* 1-bit integers get truncated */ - _dst_val[1].b = dst.y & 1; - - - break; - } - case 8: { - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src1 = { - _src[1][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; - - - _dst_val[0].u8 = dst.x; - - _dst_val[1].u8 = dst.y; - - - break; - } - case 16: { - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src1 = { - _src[1][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; - - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - - break; - } - case 32: { - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src1 = { - _src[1][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; - - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - - break; - } - case 64: { - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src1 = { - _src[1][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; - - - _dst_val[0].u64 = dst.x; - - _dst_val[1].u64 = dst.y; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_vec3(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct uint1_vec src0 = { - _src[0][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src1 = { - _src[1][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src2 = { - _src[2][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint1_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; - - - /* 1-bit integers get truncated */ - _dst_val[0].b = dst.x & 1; - - /* 1-bit integers get truncated */ - _dst_val[1].b = dst.y & 1; - - /* 1-bit integers get truncated */ - _dst_val[2].b = dst.z & 1; - - - break; - } - case 8: { - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src1 = { - _src[1][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src2 = { - _src[2][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; - - - _dst_val[0].u8 = dst.x; - - _dst_val[1].u8 = dst.y; - - _dst_val[2].u8 = dst.z; - - - break; - } - case 16: { - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src1 = { - _src[1][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src2 = { - _src[2][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; - - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - _dst_val[2].u16 = dst.z; - - - break; - } - case 32: { - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src1 = { - _src[1][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src2 = { - _src[2][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; - - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - _dst_val[2].u32 = dst.z; - - - break; - } - case 64: { - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src1 = { - _src[1][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src2 = { - _src[2][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; - - - _dst_val[0].u64 = dst.x; - - _dst_val[1].u64 = dst.y; - - _dst_val[2].u64 = dst.z; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_vec4(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct uint1_vec src0 = { - _src[0][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src1 = { - _src[1][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src2 = { - _src[2][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src3 = { - _src[3][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint1_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; - - - /* 1-bit integers get truncated */ - _dst_val[0].b = dst.x & 1; - - /* 1-bit integers get truncated */ - _dst_val[1].b = dst.y & 1; - - /* 1-bit integers get truncated */ - _dst_val[2].b = dst.z & 1; - - /* 1-bit integers get truncated */ - _dst_val[3].b = dst.w & 1; - - - break; - } - case 8: { - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src1 = { - _src[1][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src2 = { - _src[2][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src3 = { - _src[3][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; - - - _dst_val[0].u8 = dst.x; - - _dst_val[1].u8 = dst.y; - - _dst_val[2].u8 = dst.z; - - _dst_val[3].u8 = dst.w; - - - break; - } - case 16: { - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src1 = { - _src[1][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src2 = { - _src[2][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src3 = { - _src[3][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; - - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - _dst_val[2].u16 = dst.z; - - _dst_val[3].u16 = dst.w; - - - break; - } - case 32: { - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src1 = { - _src[1][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src2 = { - _src[2][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src3 = { - _src[3][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; - - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - _dst_val[2].u32 = dst.z; - - _dst_val[3].u32 = dst.w; - - - break; - } - case 64: { - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src1 = { - _src[1][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src2 = { - _src[2][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src3 = { - _src[3][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; - - - _dst_val[0].u64 = dst.x; - - _dst_val[1].u64 = dst.y; - - _dst_val[2].u64 = dst.z; - - _dst_val[3].u64 = dst.w; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_vec5(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct uint1_vec src0 = { - _src[0][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src1 = { - _src[1][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src2 = { - _src[2][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src3 = { - _src[3][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src4 = { - _src[4][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint1_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; - - - /* 1-bit integers get truncated */ - _dst_val[0].b = dst.x & 1; - - /* 1-bit integers get truncated */ - _dst_val[1].b = dst.y & 1; - - /* 1-bit integers get truncated */ - _dst_val[2].b = dst.z & 1; - - /* 1-bit integers get truncated */ - _dst_val[3].b = dst.w & 1; - - /* 1-bit integers get truncated */ - _dst_val[4].b = dst.e & 1; - - - break; - } - case 8: { - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src1 = { - _src[1][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src2 = { - _src[2][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src3 = { - _src[3][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src4 = { - _src[4][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; - - - _dst_val[0].u8 = dst.x; - - _dst_val[1].u8 = dst.y; - - _dst_val[2].u8 = dst.z; - - _dst_val[3].u8 = dst.w; - - _dst_val[4].u8 = dst.e; - - - break; - } - case 16: { - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src1 = { - _src[1][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src2 = { - _src[2][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src3 = { - _src[3][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src4 = { - _src[4][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; - - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - _dst_val[2].u16 = dst.z; - - _dst_val[3].u16 = dst.w; - - _dst_val[4].u16 = dst.e; - - - break; - } - case 32: { - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src1 = { - _src[1][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src2 = { - _src[2][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src3 = { - _src[3][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src4 = { - _src[4][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; - - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - _dst_val[2].u32 = dst.z; - - _dst_val[3].u32 = dst.w; - - _dst_val[4].u32 = dst.e; - - - break; - } - case 64: { - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src1 = { - _src[1][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src2 = { - _src[2][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src3 = { - _src[3][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src4 = { - _src[4][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; - - - _dst_val[0].u64 = dst.x; - - _dst_val[1].u64 = dst.y; - - _dst_val[2].u64 = dst.z; - - _dst_val[3].u64 = dst.w; - - _dst_val[4].u64 = dst.e; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} -static void -evaluate_vec8(nir_const_value *_dst_val, - UNUSED unsigned num_components, - unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - switch (bit_size) { - case 1: { - - - - - const struct uint1_vec src0 = { - _src[0][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src1 = { - _src[1][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src2 = { - _src[2][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src3 = { - _src[3][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src4 = { - _src[4][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src5 = { - _src[5][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src6 = { - _src[6][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint1_vec src7 = { - _src[7][0].b, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint1_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; - - - /* 1-bit integers get truncated */ - _dst_val[0].b = dst.x & 1; - - /* 1-bit integers get truncated */ - _dst_val[1].b = dst.y & 1; - - /* 1-bit integers get truncated */ - _dst_val[2].b = dst.z & 1; - - /* 1-bit integers get truncated */ - _dst_val[3].b = dst.w & 1; - - /* 1-bit integers get truncated */ - _dst_val[4].b = dst.e & 1; - - /* 1-bit integers get truncated */ - _dst_val[5].b = dst.f & 1; - - /* 1-bit integers get truncated */ - _dst_val[6].b = dst.g & 1; - - /* 1-bit integers get truncated */ - _dst_val[7].b = dst.h & 1; - - - break; - } - case 8: { - - - - - const struct uint8_vec src0 = { - _src[0][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src1 = { - _src[1][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src2 = { - _src[2][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src3 = { - _src[3][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src4 = { - _src[4][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src5 = { - _src[5][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src6 = { - _src[6][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint8_vec src7 = { - _src[7][0].u8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint8_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; - - - _dst_val[0].u8 = dst.x; - - _dst_val[1].u8 = dst.y; - - _dst_val[2].u8 = dst.z; - - _dst_val[3].u8 = dst.w; - - _dst_val[4].u8 = dst.e; - - _dst_val[5].u8 = dst.f; - - _dst_val[6].u8 = dst.g; - - _dst_val[7].u8 = dst.h; - - - break; - } - case 16: { - - - - - const struct uint16_vec src0 = { - _src[0][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src1 = { - _src[1][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src2 = { - _src[2][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src3 = { - _src[3][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src4 = { - _src[4][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src5 = { - _src[5][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src6 = { - _src[6][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint16_vec src7 = { - _src[7][0].u16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint16_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; - - - _dst_val[0].u16 = dst.x; - - _dst_val[1].u16 = dst.y; - - _dst_val[2].u16 = dst.z; - - _dst_val[3].u16 = dst.w; - - _dst_val[4].u16 = dst.e; - - _dst_val[5].u16 = dst.f; - - _dst_val[6].u16 = dst.g; - - _dst_val[7].u16 = dst.h; - - - break; - } - case 32: { - - - - - const struct uint32_vec src0 = { - _src[0][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src1 = { - _src[1][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src2 = { - _src[2][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src3 = { - _src[3][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src4 = { - _src[4][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src5 = { - _src[5][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src6 = { - _src[6][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint32_vec src7 = { - _src[7][0].u32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint32_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; - - - _dst_val[0].u32 = dst.x; - - _dst_val[1].u32 = dst.y; - - _dst_val[2].u32 = dst.z; - - _dst_val[3].u32 = dst.w; - - _dst_val[4].u32 = dst.e; - - _dst_val[5].u32 = dst.f; - - _dst_val[6].u32 = dst.g; - - _dst_val[7].u32 = dst.h; - - - break; - } - case 64: { - - - - - const struct uint64_vec src0 = { - _src[0][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src1 = { - _src[1][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src2 = { - _src[2][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src3 = { - _src[3][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src4 = { - _src[4][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src5 = { - _src[5][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src6 = { - _src[6][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - const struct uint64_vec src7 = { - _src[7][0].u64, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - - struct uint64_vec dst; - - -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; - - - _dst_val[0].u64 = dst.x; - - _dst_val[1].u64 = dst.y; - - _dst_val[2].u64 = dst.z; - - _dst_val[3].u64 = dst.w; - - _dst_val[4].u64 = dst.e; - - _dst_val[5].u64 = dst.f; - - _dst_val[6].u64 = dst.g; - - _dst_val[7].u64 = dst.h; - - - break; - } - - default: - unreachable("unknown bit width"); - } -} - -void -nir_eval_const_opcode(nir_op op, nir_const_value *dest, - unsigned num_components, unsigned bit_width, - nir_const_value **src, - unsigned float_controls_execution_mode) -{ - switch (op) { - case nir_op_amul: - evaluate_amul(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_fequal16: - evaluate_b16all_fequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_fequal2: - evaluate_b16all_fequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_fequal3: - evaluate_b16all_fequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_fequal4: - evaluate_b16all_fequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_fequal5: - evaluate_b16all_fequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_fequal8: - evaluate_b16all_fequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_iequal16: - evaluate_b16all_iequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_iequal2: - evaluate_b16all_iequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_iequal3: - evaluate_b16all_iequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_iequal4: - evaluate_b16all_iequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_iequal5: - evaluate_b16all_iequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16all_iequal8: - evaluate_b16all_iequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_fnequal16: - evaluate_b16any_fnequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_fnequal2: - evaluate_b16any_fnequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_fnequal3: - evaluate_b16any_fnequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_fnequal4: - evaluate_b16any_fnequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_fnequal5: - evaluate_b16any_fnequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_fnequal8: - evaluate_b16any_fnequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_inequal16: - evaluate_b16any_inequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_inequal2: - evaluate_b16any_inequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_inequal3: - evaluate_b16any_inequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_inequal4: - evaluate_b16any_inequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_inequal5: - evaluate_b16any_inequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16any_inequal8: - evaluate_b16any_inequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b16csel: - evaluate_b16csel(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2b1: - evaluate_b2b1(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2b16: - evaluate_b2b16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2b32: - evaluate_b2b32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2b8: - evaluate_b2b8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2f16: - evaluate_b2f16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2f32: - evaluate_b2f32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2f64: - evaluate_b2f64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2i1: - evaluate_b2i1(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2i16: - evaluate_b2i16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2i32: - evaluate_b2i32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2i64: - evaluate_b2i64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b2i8: - evaluate_b2i8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_fequal16: - evaluate_b32all_fequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_fequal2: - evaluate_b32all_fequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_fequal3: - evaluate_b32all_fequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_fequal4: - evaluate_b32all_fequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_fequal5: - evaluate_b32all_fequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_fequal8: - evaluate_b32all_fequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_iequal16: - evaluate_b32all_iequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_iequal2: - evaluate_b32all_iequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_iequal3: - evaluate_b32all_iequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_iequal4: - evaluate_b32all_iequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_iequal5: - evaluate_b32all_iequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32all_iequal8: - evaluate_b32all_iequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_fnequal16: - evaluate_b32any_fnequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_fnequal2: - evaluate_b32any_fnequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_fnequal3: - evaluate_b32any_fnequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_fnequal4: - evaluate_b32any_fnequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_fnequal5: - evaluate_b32any_fnequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_fnequal8: - evaluate_b32any_fnequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_inequal16: - evaluate_b32any_inequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_inequal2: - evaluate_b32any_inequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_inequal3: - evaluate_b32any_inequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_inequal4: - evaluate_b32any_inequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_inequal5: - evaluate_b32any_inequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32any_inequal8: - evaluate_b32any_inequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b32csel: - evaluate_b32csel(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_fequal16: - evaluate_b8all_fequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_fequal2: - evaluate_b8all_fequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_fequal3: - evaluate_b8all_fequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_fequal4: - evaluate_b8all_fequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_fequal5: - evaluate_b8all_fequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_fequal8: - evaluate_b8all_fequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_iequal16: - evaluate_b8all_iequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_iequal2: - evaluate_b8all_iequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_iequal3: - evaluate_b8all_iequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_iequal4: - evaluate_b8all_iequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_iequal5: - evaluate_b8all_iequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8all_iequal8: - evaluate_b8all_iequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_fnequal16: - evaluate_b8any_fnequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_fnequal2: - evaluate_b8any_fnequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_fnequal3: - evaluate_b8any_fnequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_fnequal4: - evaluate_b8any_fnequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_fnequal5: - evaluate_b8any_fnequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_fnequal8: - evaluate_b8any_fnequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_inequal16: - evaluate_b8any_inequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_inequal2: - evaluate_b8any_inequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_inequal3: - evaluate_b8any_inequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_inequal4: - evaluate_b8any_inequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_inequal5: - evaluate_b8any_inequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8any_inequal8: - evaluate_b8any_inequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_b8csel: - evaluate_b8csel(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_fequal16: - evaluate_ball_fequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_fequal2: - evaluate_ball_fequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_fequal3: - evaluate_ball_fequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_fequal4: - evaluate_ball_fequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_fequal5: - evaluate_ball_fequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_fequal8: - evaluate_ball_fequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_iequal16: - evaluate_ball_iequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_iequal2: - evaluate_ball_iequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_iequal3: - evaluate_ball_iequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_iequal4: - evaluate_ball_iequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_iequal5: - evaluate_ball_iequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ball_iequal8: - evaluate_ball_iequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_fnequal16: - evaluate_bany_fnequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_fnequal2: - evaluate_bany_fnequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_fnequal3: - evaluate_bany_fnequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_fnequal4: - evaluate_bany_fnequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_fnequal5: - evaluate_bany_fnequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_fnequal8: - evaluate_bany_fnequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_inequal16: - evaluate_bany_inequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_inequal2: - evaluate_bany_inequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_inequal3: - evaluate_bany_inequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_inequal4: - evaluate_bany_inequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_inequal5: - evaluate_bany_inequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bany_inequal8: - evaluate_bany_inequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bcsel: - evaluate_bcsel(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bfi: - evaluate_bfi(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bfm: - evaluate_bfm(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bit_count: - evaluate_bit_count(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bitfield_insert: - evaluate_bitfield_insert(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bitfield_reverse: - evaluate_bitfield_reverse(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_bitfield_select: - evaluate_bitfield_select(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_cube_face_coord_amd: - evaluate_cube_face_coord_amd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_cube_face_index_amd: - evaluate_cube_face_index_amd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_cube_r600: - evaluate_cube_r600(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_extr_agx: - evaluate_extr_agx(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_extract_i16: - evaluate_extract_i16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_extract_i8: - evaluate_extract_i8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_extract_u16: - evaluate_extract_u16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_extract_u8: - evaluate_extract_u8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2f16: - evaluate_f2f16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2f16_rtne: - evaluate_f2f16_rtne(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2f16_rtz: - evaluate_f2f16_rtz(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2f32: - evaluate_f2f32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2f64: - evaluate_f2f64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2fmp: - evaluate_f2fmp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2i1: - evaluate_f2i1(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2i16: - evaluate_f2i16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2i32: - evaluate_f2i32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2i64: - evaluate_f2i64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2i8: - evaluate_f2i8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2imp: - evaluate_f2imp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2u1: - evaluate_f2u1(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2u16: - evaluate_f2u16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2u32: - evaluate_f2u32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2u64: - evaluate_f2u64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2u8: - evaluate_f2u8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_f2ump: - evaluate_f2ump(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fabs: - evaluate_fabs(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fadd: - evaluate_fadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fall_equal16: - evaluate_fall_equal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fall_equal2: - evaluate_fall_equal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fall_equal3: - evaluate_fall_equal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fall_equal4: - evaluate_fall_equal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fall_equal5: - evaluate_fall_equal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fall_equal8: - evaluate_fall_equal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fany_nequal16: - evaluate_fany_nequal16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fany_nequal2: - evaluate_fany_nequal2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fany_nequal3: - evaluate_fany_nequal3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fany_nequal4: - evaluate_fany_nequal4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fany_nequal5: - evaluate_fany_nequal5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fany_nequal8: - evaluate_fany_nequal8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fceil: - evaluate_fceil(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fclamp_pos_mali: - evaluate_fclamp_pos_mali(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fcos: - evaluate_fcos(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fcos_amd: - evaluate_fcos_amd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fcos_mdg: - evaluate_fcos_mdg(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fcsel: - evaluate_fcsel(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fcsel_ge: - evaluate_fcsel_ge(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fcsel_gt: - evaluate_fcsel_gt(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddx: - evaluate_fddx(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddx_coarse: - evaluate_fddx_coarse(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddx_fine: - evaluate_fddx_fine(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddx_must_abs_mali: - evaluate_fddx_must_abs_mali(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddy: - evaluate_fddy(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddy_coarse: - evaluate_fddy_coarse(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddy_fine: - evaluate_fddy_fine(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fddy_must_abs_mali: - evaluate_fddy_must_abs_mali(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdiv: - evaluate_fdiv(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot16: - evaluate_fdot16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot16_replicated: - evaluate_fdot16_replicated(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot2: - evaluate_fdot2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot2_replicated: - evaluate_fdot2_replicated(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot3: - evaluate_fdot3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot3_replicated: - evaluate_fdot3_replicated(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot4: - evaluate_fdot4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot4_replicated: - evaluate_fdot4_replicated(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot5: - evaluate_fdot5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot5_replicated: - evaluate_fdot5_replicated(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot8: - evaluate_fdot8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdot8_replicated: - evaluate_fdot8_replicated(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdph: - evaluate_fdph(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fdph_replicated: - evaluate_fdph_replicated(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_feq: - evaluate_feq(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_feq16: - evaluate_feq16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_feq32: - evaluate_feq32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_feq8: - evaluate_feq8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fexp2: - evaluate_fexp2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ffloor: - evaluate_ffloor(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ffma: - evaluate_ffma(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ffmaz: - evaluate_ffmaz(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ffract: - evaluate_ffract(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fge: - evaluate_fge(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fge16: - evaluate_fge16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fge32: - evaluate_fge32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fge8: - evaluate_fge8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_find_lsb: - evaluate_find_lsb(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fisfinite: - evaluate_fisfinite(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fisfinite32: - evaluate_fisfinite32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fisnormal: - evaluate_fisnormal(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_flog2: - evaluate_flog2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_flrp: - evaluate_flrp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_flt: - evaluate_flt(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_flt16: - evaluate_flt16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_flt32: - evaluate_flt32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_flt8: - evaluate_flt8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fmax: - evaluate_fmax(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fmin: - evaluate_fmin(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fmod: - evaluate_fmod(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fmul: - evaluate_fmul(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fmulz: - evaluate_fmulz(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fneg: - evaluate_fneg(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fneu: - evaluate_fneu(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fneu16: - evaluate_fneu16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fneu32: - evaluate_fneu32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fneu8: - evaluate_fneu8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fpow: - evaluate_fpow(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fquantize2f16: - evaluate_fquantize2f16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_frcp: - evaluate_frcp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_frem: - evaluate_frem(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_frexp_exp: - evaluate_frexp_exp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_frexp_sig: - evaluate_frexp_sig(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fround_even: - evaluate_fround_even(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_frsq: - evaluate_frsq(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsat: - evaluate_fsat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsat_signed_mali: - evaluate_fsat_signed_mali(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsign: - evaluate_fsign(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsin: - evaluate_fsin(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsin_agx: - evaluate_fsin_agx(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsin_amd: - evaluate_fsin_amd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsin_mdg: - evaluate_fsin_mdg(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsqrt: - evaluate_fsqrt(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsub: - evaluate_fsub(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsum2: - evaluate_fsum2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsum3: - evaluate_fsum3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_fsum4: - evaluate_fsum4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ftrunc: - evaluate_ftrunc(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2f16: - evaluate_i2f16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2f32: - evaluate_i2f32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2f64: - evaluate_i2f64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2fmp: - evaluate_i2fmp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2i1: - evaluate_i2i1(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2i16: - evaluate_i2i16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2i32: - evaluate_i2i32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2i64: - evaluate_i2i64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2i8: - evaluate_i2i8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i2imp: - evaluate_i2imp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i32csel_ge: - evaluate_i32csel_ge(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_i32csel_gt: - evaluate_i32csel_gt(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_iabs: - evaluate_iabs(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_iadd: - evaluate_iadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_iadd3: - evaluate_iadd3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_iadd_sat: - evaluate_iadd_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_iand: - evaluate_iand(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ibfe: - evaluate_ibfe(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ibitfield_extract: - evaluate_ibitfield_extract(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_idiv: - evaluate_idiv(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ieq: - evaluate_ieq(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ieq16: - evaluate_ieq16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ieq32: - evaluate_ieq32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ieq8: - evaluate_ieq8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ifind_msb: - evaluate_ifind_msb(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ifind_msb_rev: - evaluate_ifind_msb_rev(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ige: - evaluate_ige(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ige16: - evaluate_ige16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ige32: - evaluate_ige32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ige8: - evaluate_ige8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ihadd: - evaluate_ihadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ilt: - evaluate_ilt(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ilt16: - evaluate_ilt16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ilt32: - evaluate_ilt32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ilt8: - evaluate_ilt8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imad24_ir3: - evaluate_imad24_ir3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imadsh_mix16: - evaluate_imadsh_mix16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imax: - evaluate_imax(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imin: - evaluate_imin(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imod: - evaluate_imod(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imul: - evaluate_imul(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imul24: - evaluate_imul24(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imul24_relaxed: - evaluate_imul24_relaxed(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imul_2x32_64: - evaluate_imul_2x32_64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imul_32x16: - evaluate_imul_32x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_imul_high: - evaluate_imul_high(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ine: - evaluate_ine(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ine16: - evaluate_ine16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ine32: - evaluate_ine32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ine8: - evaluate_ine8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ineg: - evaluate_ineg(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_inot: - evaluate_inot(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_insert_u16: - evaluate_insert_u16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_insert_u8: - evaluate_insert_u8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ior: - evaluate_ior(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_irem: - evaluate_irem(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_irhadd: - evaluate_irhadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ishl: - evaluate_ishl(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ishr: - evaluate_ishr(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_isign: - evaluate_isign(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_isub: - evaluate_isub(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_isub_sat: - evaluate_isub_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ixor: - evaluate_ixor(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ldexp: - evaluate_ldexp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_mov: - evaluate_mov(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_32_2x16: - evaluate_pack_32_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_32_2x16_split: - evaluate_pack_32_2x16_split(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_32_4x8: - evaluate_pack_32_4x8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_32_4x8_split: - evaluate_pack_32_4x8_split(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_64_2x32: - evaluate_pack_64_2x32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_64_2x32_split: - evaluate_pack_64_2x32_split(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_64_4x16: - evaluate_pack_64_4x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_double_2x32_dxil: - evaluate_pack_double_2x32_dxil(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_half_2x16: - evaluate_pack_half_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_half_2x16_rtz_split: - evaluate_pack_half_2x16_rtz_split(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_half_2x16_split: - evaluate_pack_half_2x16_split(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_sint_2x16: - evaluate_pack_sint_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_snorm_2x16: - evaluate_pack_snorm_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_snorm_4x8: - evaluate_pack_snorm_4x8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_uint_2x16: - evaluate_pack_uint_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_unorm_2x16: - evaluate_pack_unorm_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_unorm_4x8: - evaluate_pack_unorm_4x8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_uvec2_to_uint: - evaluate_pack_uvec2_to_uint(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_pack_uvec4_to_uint: - evaluate_pack_uvec4_to_uint(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sad_u8x4: - evaluate_sad_u8x4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sdot_2x16_iadd: - evaluate_sdot_2x16_iadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sdot_2x16_iadd_sat: - evaluate_sdot_2x16_iadd_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sdot_4x8_iadd: - evaluate_sdot_4x8_iadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sdot_4x8_iadd_sat: - evaluate_sdot_4x8_iadd_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_seq: - evaluate_seq(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sge: - evaluate_sge(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_slt: - evaluate_slt(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sne: - evaluate_sne(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sudot_4x8_iadd: - evaluate_sudot_4x8_iadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_sudot_4x8_iadd_sat: - evaluate_sudot_4x8_iadd_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2f16: - evaluate_u2f16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2f32: - evaluate_u2f32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2f64: - evaluate_u2f64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2fmp: - evaluate_u2fmp(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2u1: - evaluate_u2u1(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2u16: - evaluate_u2u16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2u32: - evaluate_u2u32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2u64: - evaluate_u2u64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_u2u8: - evaluate_u2u8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uabs_isub: - evaluate_uabs_isub(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uabs_usub: - evaluate_uabs_usub(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uadd_carry: - evaluate_uadd_carry(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uadd_sat: - evaluate_uadd_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ubfe: - evaluate_ubfe(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ubitfield_extract: - evaluate_ubitfield_extract(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uclz: - evaluate_uclz(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_udiv: - evaluate_udiv(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_udot_2x16_uadd: - evaluate_udot_2x16_uadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_udot_2x16_uadd_sat: - evaluate_udot_2x16_uadd_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_udot_4x8_uadd: - evaluate_udot_4x8_uadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_udot_4x8_uadd_sat: - evaluate_udot_4x8_uadd_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ufind_msb: - evaluate_ufind_msb(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ufind_msb_rev: - evaluate_ufind_msb_rev(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uge: - evaluate_uge(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uge16: - evaluate_uge16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uge32: - evaluate_uge32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uge8: - evaluate_uge8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uhadd: - evaluate_uhadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ult: - evaluate_ult(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ult16: - evaluate_ult16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ult32: - evaluate_ult32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ult8: - evaluate_ult8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umad24: - evaluate_umad24(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umad24_relaxed: - evaluate_umad24_relaxed(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umax: - evaluate_umax(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umax_4x8_vc4: - evaluate_umax_4x8_vc4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umin: - evaluate_umin(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umin_4x8_vc4: - evaluate_umin_4x8_vc4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umod: - evaluate_umod(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umul24: - evaluate_umul24(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umul24_relaxed: - evaluate_umul24_relaxed(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umul_2x32_64: - evaluate_umul_2x32_64(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umul_32x16: - evaluate_umul_32x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umul_high: - evaluate_umul_high(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umul_low: - evaluate_umul_low(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_umul_unorm_4x8_vc4: - evaluate_umul_unorm_4x8_vc4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_32_2x16: - evaluate_unpack_32_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_32_2x16_split_x: - evaluate_unpack_32_2x16_split_x(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_32_2x16_split_y: - evaluate_unpack_32_2x16_split_y(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_32_4x8: - evaluate_unpack_32_4x8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_64_2x32: - evaluate_unpack_64_2x32(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_64_2x32_split_x: - evaluate_unpack_64_2x32_split_x(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_64_2x32_split_y: - evaluate_unpack_64_2x32_split_y(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_64_4x16: - evaluate_unpack_64_4x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_double_2x32_dxil: - evaluate_unpack_double_2x32_dxil(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_half_2x16: - evaluate_unpack_half_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_half_2x16_flush_to_zero: - evaluate_unpack_half_2x16_flush_to_zero(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_half_2x16_split_x: - evaluate_unpack_half_2x16_split_x(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_half_2x16_split_x_flush_to_zero: - evaluate_unpack_half_2x16_split_x_flush_to_zero(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_half_2x16_split_y: - evaluate_unpack_half_2x16_split_y(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_half_2x16_split_y_flush_to_zero: - evaluate_unpack_half_2x16_split_y_flush_to_zero(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_snorm_2x16: - evaluate_unpack_snorm_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_snorm_4x8: - evaluate_unpack_snorm_4x8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_unorm_2x16: - evaluate_unpack_unorm_2x16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_unpack_unorm_4x8: - evaluate_unpack_unorm_4x8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_urhadd: - evaluate_urhadd(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_urol: - evaluate_urol(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_uror: - evaluate_uror(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_usadd_4x8_vc4: - evaluate_usadd_4x8_vc4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ushr: - evaluate_ushr(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_ussub_4x8_vc4: - evaluate_ussub_4x8_vc4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_usub_borrow: - evaluate_usub_borrow(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_usub_sat: - evaluate_usub_sat(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_vec16: - evaluate_vec16(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_vec2: - evaluate_vec2(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_vec3: - evaluate_vec3(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_vec4: - evaluate_vec4(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_vec5: - evaluate_vec5(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - case nir_op_vec8: - evaluate_vec8(dest, num_components, bit_width, src, float_controls_execution_mode); - return; - default: - unreachable("shouldn't get here"); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.h deleted file mode 100644 index 9fdfb1d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#ifndef NIR_CONSTANT_EXPRESSIONS_H -#define NIR_CONSTANT_EXPRESSIONS_H - -#include "nir.h" - -void nir_eval_const_opcode(nir_op op, nir_const_value *dest, - unsigned num_components, unsigned bit_size, - nir_const_value **src, - unsigned float_controls_execution_mode); - -#endif /* NIR_CONSTANT_EXPRESSIONS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.py deleted file mode 100644 index e6383b6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_constant_expressions.py +++ /dev/null @@ -1,525 +0,0 @@ -import re -from nir_opcodes import opcodes -from nir_opcodes import type_has_size, type_size, type_sizes, type_base_type - -def type_add_size(type_, size): - if type_has_size(type_): - return type_ - return type_ + str(size) - -def op_bit_sizes(op): - sizes = None - if not type_has_size(op.output_type): - sizes = set(type_sizes(op.output_type)) - - for input_type in op.input_types: - if not type_has_size(input_type): - if sizes is None: - sizes = set(type_sizes(input_type)) - else: - sizes = sizes.intersection(set(type_sizes(input_type))) - - return sorted(list(sizes)) if sizes is not None else None - -def get_const_field(type_): - if type_size(type_) == 1: - return 'b' - elif type_base_type(type_) == 'bool': - return 'i' + str(type_size(type_)) - elif type_ == "float16": - return "u16" - else: - return type_base_type(type_)[0] + str(type_size(type_)) - -template = """\ -/* - * Copyright (C) 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include "util/rounding.h" /* for _mesa_roundeven */ -#include "util/half_float.h" -#include "util/double.h" -#include "util/softfloat.h" -#include "util/bigmath.h" -#include "util/format/format_utils.h" -#include "nir_constant_expressions.h" - -/** - * \brief Checks if the provided value is a denorm and flushes it to zero. - */ -static void -constant_denorm_flush_to_zero(nir_const_value *value, unsigned bit_size) -{ - switch(bit_size) { - case 64: - if (0 == (value->u64 & 0x7ff0000000000000)) - value->u64 &= 0x8000000000000000; - break; - case 32: - if (0 == (value->u32 & 0x7f800000)) - value->u32 &= 0x80000000; - break; - case 16: - if (0 == (value->u16 & 0x7c00)) - value->u16 &= 0x8000; - } -} - -/** - * Evaluate one component of packSnorm4x8. - */ -static uint8_t -pack_snorm_1x8(float x) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * packSnorm4x8 - * ------------ - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - * - * We must first cast the float to an int, because casting a negative - * float to a uint is undefined. - */ - return (uint8_t) (int) - _mesa_roundevenf(CLAMP(x, -1.0f, +1.0f) * 127.0f); -} - -/** - * Evaluate one component of packSnorm2x16. - */ -static uint16_t -pack_snorm_1x16(float x) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * packSnorm2x16 - * ------------- - * The conversion for component c of v to fixed point is done as - * follows: - * - * packSnorm2x16: round(clamp(c, -1, +1) * 32767.0) - * - * We must first cast the float to an int, because casting a negative - * float to a uint is undefined. - */ - return (uint16_t) (int) - _mesa_roundevenf(CLAMP(x, -1.0f, +1.0f) * 32767.0f); -} - -/** - * Evaluate one component of unpackSnorm4x8. - */ -static float -unpack_snorm_1x8(uint8_t u) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * unpackSnorm4x8 - * -------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm4x8: clamp(f / 127.0, -1, +1) - */ - return CLAMP((int8_t) u / 127.0f, -1.0f, +1.0f); -} - -/** - * Evaluate one component of unpackSnorm2x16. - */ -static float -unpack_snorm_1x16(uint16_t u) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * unpackSnorm2x16 - * --------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - */ - return CLAMP((int16_t) u / 32767.0f, -1.0f, +1.0f); -} - -/** - * Evaluate one component packUnorm4x8. - */ -static uint8_t -pack_unorm_1x8(float x) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * packUnorm4x8 - * ------------ - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - */ - return (uint8_t) (int) - _mesa_roundevenf(CLAMP(x, 0.0f, 1.0f) * 255.0f); -} - -/** - * Evaluate one component packUnorm2x16. - */ -static uint16_t -pack_unorm_1x16(float x) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * packUnorm2x16 - * ------------- - * The conversion for component c of v to fixed point is done as - * follows: - * - * packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - */ - return (uint16_t) (int) - _mesa_roundevenf(CLAMP(x, 0.0f, 1.0f) * 65535.0f); -} - -/** - * Evaluate one component of unpackUnorm4x8. - */ -static float -unpack_unorm_1x8(uint8_t u) -{ - /* From section 8.4 of the GLSL 4.30 spec: - * - * unpackUnorm4x8 - * -------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm4x8: f / 255.0 - */ - return (float) u / 255.0f; -} - -/** - * Evaluate one component of unpackUnorm2x16. - */ -static float -unpack_unorm_1x16(uint16_t u) -{ - /* From section 8.4 of the GLSL ES 3.00 spec: - * - * unpackUnorm2x16 - * --------------- - * The conversion for unpacked fixed-point value f to floating point is - * done as follows: - * - * unpackUnorm2x16: f / 65535.0 - */ - return (float) u / 65535.0f; -} - -/** - * Evaluate one component of packHalf2x16. - */ -static uint16_t -pack_half_1x16(float x) -{ - return _mesa_float_to_half(x); -} - -/** - * Evaluate one component of packHalf2x16, RTZ mode. - */ -static uint16_t -pack_half_1x16_rtz(float x) -{ - return _mesa_float_to_float16_rtz(x); -} - -/** - * Evaluate one component of unpackHalf2x16. - */ -static float -unpack_half_1x16_flush_to_zero(uint16_t u) -{ - if (0 == (u & 0x7c00)) - u &= 0x8000; - return _mesa_half_to_float(u); -} - -/** - * Evaluate one component of unpackHalf2x16. - */ -static float -unpack_half_1x16(uint16_t u) -{ - return _mesa_half_to_float(u); -} - -/* Some typed vector structures to make things like src0.y work */ -typedef int8_t int1_t; -typedef uint8_t uint1_t; -typedef float float16_t; -typedef float float32_t; -typedef double float64_t; -typedef bool bool1_t; -typedef bool bool8_t; -typedef bool bool16_t; -typedef bool bool32_t; -typedef bool bool64_t; -% for type in ["float", "int", "uint", "bool"]: -% for width in type_sizes(type): -struct ${type}${width}_vec { - ${type}${width}_t x; - ${type}${width}_t y; - ${type}${width}_t z; - ${type}${width}_t w; - ${type}${width}_t e; - ${type}${width}_t f; - ${type}${width}_t g; - ${type}${width}_t h; - ${type}${width}_t i; - ${type}${width}_t j; - ${type}${width}_t k; - ${type}${width}_t l; - ${type}${width}_t m; - ${type}${width}_t n; - ${type}${width}_t o; - ${type}${width}_t p; -}; -% endfor -% endfor - -<%def name="evaluate_op(op, bit_size, execution_mode)"> - <% - output_type = type_add_size(op.output_type, bit_size) - input_types = [type_add_size(type_, bit_size) for type_ in op.input_types] - %> - - ## For each non-per-component input, create a variable srcN that - ## contains x, y, z, and w elements which are filled in with the - ## appropriately-typed values. - % for j in range(op.num_inputs): - % if op.input_sizes[j] == 0: - <% continue %> - % elif "src" + str(j) not in op.const_expr: - ## Avoid unused variable warnings - <% continue %> - %endif - - const struct ${input_types[j]}_vec src${j} = { - % for k in range(op.input_sizes[j]): - % if input_types[j] == "int1": - /* 1-bit integers use a 0/-1 convention */ - -(int1_t)_src[${j}][${k}].b, - % elif input_types[j] == "float16": - _mesa_half_to_float(_src[${j}][${k}].u16), - % else: - _src[${j}][${k}].${get_const_field(input_types[j])}, - % endif - % endfor - % for k in range(op.input_sizes[j], 16): - 0, - % endfor - }; - % endfor - - % if op.output_size == 0: - ## For per-component instructions, we need to iterate over the - ## components and apply the constant expression one component - ## at a time. - for (unsigned _i = 0; _i < num_components; _i++) { - ## For each per-component input, create a variable srcN that - ## contains the value of the current (_i'th) component. - % for j in range(op.num_inputs): - % if op.input_sizes[j] != 0: - <% continue %> - % elif "src" + str(j) not in op.const_expr: - ## Avoid unused variable warnings - <% continue %> - % elif input_types[j] == "int1": - /* 1-bit integers use a 0/-1 convention */ - const int1_t src${j} = -(int1_t)_src[${j}][_i].b; - % elif input_types[j] == "float16": - const float src${j} = - _mesa_half_to_float(_src[${j}][_i].u16); - % else: - const ${input_types[j]}_t src${j} = - _src[${j}][_i].${get_const_field(input_types[j])}; - % endif - % endfor - - ## Create an appropriately-typed variable dst and assign the - ## result of the const_expr to it. If const_expr already contains - ## writes to dst, just include const_expr directly. - % if "dst" in op.const_expr: - ${output_type}_t dst; - - ${op.const_expr} - % else: - ${output_type}_t dst = ${op.const_expr}; - % endif - - ## Store the current component of the actual destination to the - ## value of dst. - % if output_type == "int1" or output_type == "uint1": - /* 1-bit integers get truncated */ - _dst_val[_i].b = dst & 1; - % elif output_type.startswith("bool"): - ## Sanitize the C value to a proper NIR 0/-1 bool - _dst_val[_i].${get_const_field(output_type)} = -(int)dst; - % elif output_type == "float16": - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[_i].u16 = _mesa_float_to_float16_rtz(dst); - } else { - _dst_val[_i].u16 = _mesa_float_to_float16_rtne(dst); - } - % else: - _dst_val[_i].${get_const_field(output_type)} = dst; - % endif - - % if op.name != "fquantize2f16" and type_base_type(output_type) == "float": - % if type_has_size(output_type): - if (nir_is_denorm_flush_to_zero(execution_mode, ${type_size(output_type)})) { - constant_denorm_flush_to_zero(&_dst_val[_i], ${type_size(output_type)}); - } - % else: - if (nir_is_denorm_flush_to_zero(execution_mode, ${bit_size})) { - constant_denorm_flush_to_zero(&_dst_val[i], bit_size); - } - %endif - % endif - } - % else: - ## In the non-per-component case, create a struct dst with - ## appropriately-typed elements x, y, z, and w and assign the result - ## of the const_expr to all components of dst, or include the - ## const_expr directly if it writes to dst already. - struct ${output_type}_vec dst; - - % if "dst" in op.const_expr: - ${op.const_expr} - % else: - ## Splat the value to all components. This way expressions which - ## write the same value to all components don't need to explicitly - ## write to dest. - dst.x = dst.y = dst.z = dst.w = ${op.const_expr}; - % endif - - ## For each component in the destination, copy the value of dst to - ## the actual destination. - % for k in range(op.output_size): - % if output_type == "int1" or output_type == "uint1": - /* 1-bit integers get truncated */ - _dst_val[${k}].b = dst.${"xyzwefghijklmnop"[k]} & 1; - % elif output_type.startswith("bool"): - ## Sanitize the C value to a proper NIR 0/-1 bool - _dst_val[${k}].${get_const_field(output_type)} = -(int)dst.${"xyzwefghijklmnop"[k]}; - % elif output_type == "float16": - if (nir_is_rounding_mode_rtz(execution_mode, 16)) { - _dst_val[${k}].u16 = _mesa_float_to_float16_rtz(dst.${"xyzwefghijklmnop"[k]}); - } else { - _dst_val[${k}].u16 = _mesa_float_to_float16_rtne(dst.${"xyzwefghijklmnop"[k]}); - } - % else: - _dst_val[${k}].${get_const_field(output_type)} = dst.${"xyzwefghijklmnop"[k]}; - % endif - - % if op.name != "fquantize2f16" and type_base_type(output_type) == "float": - % if type_has_size(output_type): - if (nir_is_denorm_flush_to_zero(execution_mode, ${type_size(output_type)})) { - constant_denorm_flush_to_zero(&_dst_val[${k}], ${type_size(output_type)}); - } - % else: - if (nir_is_denorm_flush_to_zero(execution_mode, ${bit_size})) { - constant_denorm_flush_to_zero(&_dst_val[${k}], bit_size); - } - % endif - % endif - % endfor - % endif - - -% for name, op in sorted(opcodes.items()): -% if op.name == "fsat": -#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC)) -#pragma optimize("", off) /* Temporary work-around for MSVC compiler bug, present in VS2019 16.9.2 */ -#endif -% endif -static void -evaluate_${name}(nir_const_value *_dst_val, - UNUSED unsigned num_components, - ${"UNUSED" if op_bit_sizes(op) is None else ""} unsigned bit_size, - UNUSED nir_const_value **_src, - UNUSED unsigned execution_mode) -{ - % if op_bit_sizes(op) is not None: - switch (bit_size) { - % for bit_size in op_bit_sizes(op): - case ${bit_size}: { - ${evaluate_op(op, bit_size, execution_mode)} - break; - } - % endfor - - default: - unreachable("unknown bit width"); - } - % else: - ${evaluate_op(op, 0, execution_mode)} - % endif -} -% if op.name == "fsat": -#if defined(_MSC_VER) && (defined(_M_ARM64) || defined(_M_ARM64EC)) -#pragma optimize("", on) /* Temporary work-around for MSVC compiler bug, present in VS2019 16.9.2 */ -#endif -% endif -% endfor - -void -nir_eval_const_opcode(nir_op op, nir_const_value *dest, - unsigned num_components, unsigned bit_width, - nir_const_value **src, - unsigned float_controls_execution_mode) -{ - switch (op) { -% for name in sorted(opcodes.keys()): - case nir_op_${name}: - evaluate_${name}(dest, num_components, bit_width, src, float_controls_execution_mode); - return; -% endfor - default: - unreachable("shouldn't get here"); - } -}""" - -from mako.template import Template - -print(Template(template).render(opcodes=opcodes, type_sizes=type_sizes, - type_base_type=type_base_type, - type_size=type_size, - type_has_size=type_has_size, - type_add_size=type_add_size, - op_bit_sizes=op_bit_sizes, - get_const_field=get_const_field)) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow.c deleted file mode 100644 index 67bd62d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow.c +++ /dev/null @@ -1,881 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir_control_flow_private.h" - -/** - * \name Control flow modification - * - * These functions modify the control flow tree while keeping the control flow - * graph up-to-date. The invariants respected are: - * 1. Each then statement, else statement, or loop body must have at least one - * control flow node. - * 2. Each if-statement and loop must have one basic block before it and one - * after. - * 3. Two basic blocks cannot be directly next to each other. - * 4. If a basic block has a jump instruction, there must be only one and it - * must be at the end of the block. - * - * The purpose of the second one is so that we have places to insert code during - * GCM, as well as eliminating the possibility of critical edges. - */ -/*@{*/ - -static inline void -block_add_pred(nir_block *block, nir_block *pred) -{ - _mesa_set_add(block->predecessors, pred); -} - -static inline void -block_remove_pred(nir_block *block, nir_block *pred) -{ - struct set_entry *entry = _mesa_set_search(block->predecessors, pred); - - assert(entry); - - _mesa_set_remove(block->predecessors, entry); -} - -static void -link_blocks(nir_block *pred, nir_block *succ1, nir_block *succ2) -{ - pred->successors[0] = succ1; - if (succ1 != NULL) - block_add_pred(succ1, pred); - - pred->successors[1] = succ2; - if (succ2 != NULL) - block_add_pred(succ2, pred); -} - -static void -unlink_blocks(nir_block *pred, nir_block *succ) -{ - if (pred->successors[0] == succ) { - pred->successors[0] = pred->successors[1]; - pred->successors[1] = NULL; - } else { - assert(pred->successors[1] == succ); - pred->successors[1] = NULL; - } - - block_remove_pred(succ, pred); -} - -static void -unlink_block_successors(nir_block *block) -{ - if (block->successors[1] != NULL) - unlink_blocks(block, block->successors[1]); - if (block->successors[0] != NULL) - unlink_blocks(block, block->successors[0]); -} - -static void -link_non_block_to_block(nir_cf_node *node, nir_block *block) -{ - if (node->type == nir_cf_node_if) { - /* - * We're trying to link an if to a block after it; this just means linking - * the last block of the then and else branches. - */ - - nir_if *if_stmt = nir_cf_node_as_if(node); - - nir_block *last_then_block = nir_if_last_then_block(if_stmt); - nir_block *last_else_block = nir_if_last_else_block(if_stmt); - - if (!nir_block_ends_in_jump(last_then_block)) { - unlink_block_successors(last_then_block); - link_blocks(last_then_block, block, NULL); - } - - if (!nir_block_ends_in_jump(last_else_block)) { - unlink_block_successors(last_else_block); - link_blocks(last_else_block, block, NULL); - } - } else { - assert(node->type == nir_cf_node_loop); - } -} - -static void -link_block_to_non_block(nir_block *block, nir_cf_node *node) -{ - if (node->type == nir_cf_node_if) { - /* - * We're trying to link a block to an if after it; this just means linking - * the block to the first block of the then and else branches. - */ - - nir_if *if_stmt = nir_cf_node_as_if(node); - - nir_block *first_then_block = nir_if_first_then_block(if_stmt); - nir_block *first_else_block = nir_if_first_else_block(if_stmt); - - unlink_block_successors(block); - link_blocks(block, first_then_block, first_else_block); - } else if (node->type == nir_cf_node_loop) { - /* - * For similar reasons as the corresponding case in - * link_non_block_to_block(), don't worry about if the loop header has - * any predecessors that need to be unlinked. - */ - - nir_loop *loop = nir_cf_node_as_loop(node); - - nir_block *loop_header_block = nir_loop_first_block(loop); - - unlink_block_successors(block); - link_blocks(block, loop_header_block, NULL); - } - -} - -/** - * Replace a block's successor with a different one. - */ -static void -replace_successor(nir_block *block, nir_block *old_succ, nir_block *new_succ) -{ - if (block->successors[0] == old_succ) { - block->successors[0] = new_succ; - } else { - assert(block->successors[1] == old_succ); - block->successors[1] = new_succ; - } - - block_remove_pred(old_succ, block); - block_add_pred(new_succ, block); -} - -/** - * Takes a basic block and inserts a new empty basic block before it, making its - * predecessors point to the new block. This essentially splits the block into - * an empty header and a body so that another non-block CF node can be inserted - * between the two. Note that this does *not* link the two basic blocks, so - * some kind of cleanup *must* be performed after this call. - */ - -static nir_block * -split_block_beginning(nir_block *block) -{ - nir_block *new_block = nir_block_create(ralloc_parent(block)); - new_block->cf_node.parent = block->cf_node.parent; - exec_node_insert_node_before(&block->cf_node.node, &new_block->cf_node.node); - - set_foreach(block->predecessors, entry) { - nir_block *pred = (nir_block *) entry->key; - replace_successor(pred, block, new_block); - } - - /* Any phi nodes must stay part of the new block, or else their - * sources will be messed up. - */ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - exec_node_remove(&instr->node); - instr->block = new_block; - exec_list_push_tail(&new_block->instr_list, &instr->node); - } - - return new_block; -} - -static void -rewrite_phi_preds(nir_block *block, nir_block *old_pred, nir_block *new_pred) -{ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_foreach_phi_src(src, phi) { - if (src->pred == old_pred) { - src->pred = new_pred; - break; - } - } - } -} - -void -nir_insert_phi_undef(nir_block *block, nir_block *pred) -{ - nir_function_impl *impl = nir_cf_node_get_function(&block->cf_node); - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_ssa_undef_instr *undef = - nir_ssa_undef_instr_create(impl->function->shader, - phi->dest.ssa.num_components, - phi->dest.ssa.bit_size); - nir_instr_insert_before_cf_list(&impl->body, &undef->instr); - nir_phi_src *src = nir_phi_instr_add_src(phi, pred, nir_src_for_ssa(&undef->def)); - list_addtail(&src->src.use_link, &undef->def.uses); - } -} - -/** - * Moves the successors of source to the successors of dest, leaving both - * successors of source NULL. - */ - -static void -move_successors(nir_block *source, nir_block *dest) -{ - nir_block *succ1 = source->successors[0]; - nir_block *succ2 = source->successors[1]; - - if (succ1) { - unlink_blocks(source, succ1); - rewrite_phi_preds(succ1, source, dest); - } - - if (succ2) { - unlink_blocks(source, succ2); - rewrite_phi_preds(succ2, source, dest); - } - - unlink_block_successors(dest); - link_blocks(dest, succ1, succ2); -} - -/* Given a basic block with no successors that has been inserted into the - * control flow tree, gives it the successors it would normally have assuming - * it doesn't end in a jump instruction. Also inserts phi sources with undefs - * if necessary. - */ -static void -block_add_normal_succs(nir_block *block) -{ - if (exec_node_is_tail_sentinel(block->cf_node.node.next)) { - nir_cf_node *parent = block->cf_node.parent; - if (parent->type == nir_cf_node_if) { - nir_cf_node *next = nir_cf_node_next(parent); - nir_block *next_block = nir_cf_node_as_block(next); - - link_blocks(block, next_block, NULL); - } else if (parent->type == nir_cf_node_loop) { - nir_loop *loop = nir_cf_node_as_loop(parent); - - nir_block *cont_block; - if (block == nir_loop_last_block(loop)) { - cont_block = nir_loop_continue_target(loop); - } else { - assert(block == nir_loop_last_continue_block(loop)); - cont_block = nir_loop_first_block(loop); - } - - link_blocks(block, cont_block, NULL); - nir_insert_phi_undef(cont_block, block); - } else { - nir_function_impl *impl = nir_cf_node_as_function(parent); - link_blocks(block, impl->end_block, NULL); - } - } else { - nir_cf_node *next = nir_cf_node_next(&block->cf_node); - if (next->type == nir_cf_node_if) { - nir_if *next_if = nir_cf_node_as_if(next); - - nir_block *first_then_block = nir_if_first_then_block(next_if); - nir_block *first_else_block = nir_if_first_else_block(next_if); - - link_blocks(block, first_then_block, first_else_block); - } else if (next->type == nir_cf_node_loop) { - nir_loop *next_loop = nir_cf_node_as_loop(next); - - nir_block *first_block = nir_loop_first_block(next_loop); - - link_blocks(block, first_block, NULL); - nir_insert_phi_undef(first_block, block); - } - } -} - -static nir_block * -split_block_end(nir_block *block) -{ - nir_block *new_block = nir_block_create(ralloc_parent(block)); - new_block->cf_node.parent = block->cf_node.parent; - exec_node_insert_after(&block->cf_node.node, &new_block->cf_node.node); - - if (nir_block_ends_in_jump(block)) { - /* Figure out what successor block would've had if it didn't have a jump - * instruction, and make new_block have that successor. - */ - block_add_normal_succs(new_block); - } else { - move_successors(block, new_block); - } - - return new_block; -} - -static nir_block * -split_block_before_instr(nir_instr *instr) -{ - assert(instr->type != nir_instr_type_phi); - nir_block *new_block = split_block_beginning(instr->block); - - nir_foreach_instr_safe(cur_instr, instr->block) { - if (cur_instr == instr) - break; - - exec_node_remove(&cur_instr->node); - cur_instr->block = new_block; - exec_list_push_tail(&new_block->instr_list, &cur_instr->node); - } - - return new_block; -} - -/* Splits a basic block at the point specified by the cursor. The "before" and - * "after" arguments are filled out with the blocks resulting from the split - * if non-NULL. Note that the "beginning" of the block is actually interpreted - * as before the first non-phi instruction, and it's illegal to split a block - * before a phi instruction. - */ - -static void -split_block_cursor(nir_cursor cursor, - nir_block **_before, nir_block **_after) -{ - nir_block *before, *after; - switch (cursor.option) { - case nir_cursor_before_block: - after = cursor.block; - before = split_block_beginning(cursor.block); - break; - - case nir_cursor_after_block: - before = cursor.block; - after = split_block_end(cursor.block); - break; - - case nir_cursor_before_instr: - after = cursor.instr->block; - before = split_block_before_instr(cursor.instr); - break; - - case nir_cursor_after_instr: - /* We lower this to split_block_before_instr() so that we can keep the - * after-a-jump-instr case contained to split_block_end(). - */ - if (nir_instr_is_last(cursor.instr)) { - before = cursor.instr->block; - after = split_block_end(cursor.instr->block); - } else { - after = cursor.instr->block; - before = split_block_before_instr(nir_instr_next(cursor.instr)); - } - break; - - default: - unreachable("not reached"); - } - - if (_before) - *_before = before; - if (_after) - *_after = after; -} - -/** - * Inserts a non-basic block between two basic blocks and links them together. - */ - -static void -insert_non_block(nir_block *before, nir_cf_node *node, nir_block *after) -{ - node->parent = before->cf_node.parent; - exec_node_insert_after(&before->cf_node.node, &node->node); - if (!nir_block_ends_in_jump(before)) - link_block_to_non_block(before, node); - link_non_block_to_block(node, after); -} - -/* walk up the control flow tree to find the innermost enclosed loop */ -static nir_loop * -nearest_loop(nir_cf_node *node) -{ - while (node->type != nir_cf_node_loop) { - node = node->parent; - } - - return nir_cf_node_as_loop(node); -} - -void -nir_loop_add_continue_construct(nir_loop *loop) -{ - assert(!nir_loop_has_continue_construct(loop)); - - nir_block *cont = nir_block_create(ralloc_parent(loop)); - exec_list_push_tail(&loop->continue_list, &cont->cf_node.node); - cont->cf_node.parent = &loop->cf_node; - - /* change predecessors and successors */ - nir_block *header = nir_loop_first_block(loop); - nir_block *preheader = nir_block_cf_tree_prev(header); - set_foreach(header->predecessors, entry) { - nir_block *pred = (nir_block *) entry->key; - if (pred != preheader) - replace_successor(pred, header, cont); - } - - link_blocks(cont, header, NULL); -} - -void -nir_loop_remove_continue_construct(nir_loop *loop) -{ - assert(nir_cf_list_is_empty_block(&loop->continue_list)); - - /* change predecessors and successors */ - nir_block *header = nir_loop_first_block(loop); - nir_block *cont = nir_loop_first_continue_block(loop); - set_foreach(cont->predecessors, entry) { - nir_block *pred = (nir_block*) entry->key; - replace_successor(pred, cont, header); - } - block_remove_pred(header, cont); - - exec_node_remove(&cont->cf_node.node); -} - -static void -remove_phi_src(nir_block *block, nir_block *pred) -{ - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_foreach_phi_src_safe(src, phi) { - if (src->pred == pred) { - list_del(&src->src.use_link); - exec_node_remove(&src->node); - gc_free(src); - } - } - } -} - -/* - * update the CFG after a jump instruction has been added to the end of a block - */ - -void -nir_handle_add_jump(nir_block *block) -{ - nir_instr *instr = nir_block_last_instr(block); - nir_jump_instr *jump_instr = nir_instr_as_jump(instr); - - if (block->successors[0]) - remove_phi_src(block->successors[0], block); - if (block->successors[1]) - remove_phi_src(block->successors[1], block); - unlink_block_successors(block); - - nir_function_impl *impl = nir_cf_node_get_function(&block->cf_node); - nir_metadata_preserve(impl, nir_metadata_none); - - switch (jump_instr->type) { - case nir_jump_return: - case nir_jump_halt: - link_blocks(block, impl->end_block, NULL); - break; - - case nir_jump_break: { - nir_loop *loop = nearest_loop(&block->cf_node); - nir_cf_node *after = nir_cf_node_next(&loop->cf_node); - nir_block *after_block = nir_cf_node_as_block(after); - link_blocks(block, after_block, NULL); - break; - } - - case nir_jump_continue: { - nir_loop *loop = nearest_loop(&block->cf_node); - nir_block *cont_block = nir_loop_continue_target(loop); - link_blocks(block, cont_block, NULL); - break; - } - - case nir_jump_goto: - link_blocks(block, jump_instr->target, NULL); - break; - - case nir_jump_goto_if: - link_blocks(block, jump_instr->else_target, jump_instr->target); - break; - - default: - unreachable("Invalid jump type"); - } -} - -/* Removes the successor of a block with a jump. Note that the jump to be - * eliminated may be free-floating. - */ - -static void -unlink_jump(nir_block *block, nir_jump_type type, bool add_normal_successors) -{ - if (block->successors[0]) - remove_phi_src(block->successors[0], block); - if (block->successors[1]) - remove_phi_src(block->successors[1], block); - - unlink_block_successors(block); - if (add_normal_successors) - block_add_normal_succs(block); -} - -void -nir_handle_remove_jump(nir_block *block, nir_jump_type type) -{ - unlink_jump(block, type, true); - - nir_function_impl *impl = nir_cf_node_get_function(&block->cf_node); - nir_metadata_preserve(impl, nir_metadata_none); -} - -static void -update_if_uses(nir_cf_node *node) -{ - if (node->type != nir_cf_node_if) - return; - - nir_if *if_stmt = nir_cf_node_as_if(node); - nir_src_set_parent_if(&if_stmt->condition, if_stmt); - - if (if_stmt->condition.is_ssa) { - list_addtail(&if_stmt->condition.use_link, - &if_stmt->condition.ssa->uses); - } else { - list_addtail(&if_stmt->condition.use_link, - &if_stmt->condition.reg.reg->uses); - } -} - -/** - * Stitch two basic blocks together into one. The aggregate must have the same - * predecessors as the first and the same successors as the second. - * - * Returns a cursor pointing at the end of the before block (i.e.m between the - * two blocks) once stiched together. - */ - -static nir_cursor -stitch_blocks(nir_block *before, nir_block *after) -{ - /* - * We move after into before, so we have to deal with up to 2 successors vs. - * possibly a large number of predecessors. - * - * TODO: special case when before is empty and after isn't? - */ - - if (nir_block_ends_in_jump(before)) { - assert(exec_list_is_empty(&after->instr_list)); - if (after->successors[0]) - remove_phi_src(after->successors[0], after); - if (after->successors[1]) - remove_phi_src(after->successors[1], after); - unlink_block_successors(after); - exec_node_remove(&after->cf_node.node); - - return nir_after_block(before); - } else { - nir_instr *last_before_instr = nir_block_last_instr(before); - - move_successors(after, before); - - foreach_list_typed(nir_instr, instr, node, &after->instr_list) { - instr->block = before; - } - - exec_list_append(&before->instr_list, &after->instr_list); - exec_node_remove(&after->cf_node.node); - - return last_before_instr ? nir_after_instr(last_before_instr) : - nir_before_block(before); - } -} - -void -nir_cf_node_insert(nir_cursor cursor, nir_cf_node *node) -{ - nir_block *before, *after; - - split_block_cursor(cursor, &before, &after); - - if (node->type == nir_cf_node_block) { - nir_block *block = nir_cf_node_as_block(node); - exec_node_insert_after(&before->cf_node.node, &block->cf_node.node); - block->cf_node.parent = before->cf_node.parent; - /* stitch_blocks() assumes that any block that ends with a jump has - * already been setup with the correct successors, so we need to set - * up jumps here as the block is being inserted. - */ - if (nir_block_ends_in_jump(block)) - nir_handle_add_jump(block); - - stitch_blocks(block, after); - stitch_blocks(before, block); - } else { - update_if_uses(node); - insert_non_block(before, node, after); - } -} - -static bool -replace_ssa_def_uses(nir_ssa_def *def, void *void_impl) -{ - nir_function_impl *impl = void_impl; - - nir_ssa_undef_instr *undef = - nir_ssa_undef_instr_create(impl->function->shader, - def->num_components, - def->bit_size); - nir_instr_insert_before_cf_list(&impl->body, &undef->instr); - nir_ssa_def_rewrite_uses(def, &undef->def); - return true; -} - -static void -cleanup_cf_node(nir_cf_node *node, nir_function_impl *impl) -{ - switch (node->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(node); - /* We need to walk the instructions and clean up defs/uses */ - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_jump) { - nir_jump_instr *jump = nir_instr_as_jump(instr); - unlink_jump(block, jump->type, false); - if (jump->type == nir_jump_goto_if) - nir_instr_rewrite_src(instr, &jump->condition, NIR_SRC_INIT); - } else { - nir_foreach_ssa_def(instr, replace_ssa_def_uses, impl); - nir_instr_remove(instr); - } - } - break; - } - - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(node); - foreach_list_typed(nir_cf_node, child, node, &if_stmt->then_list) - cleanup_cf_node(child, impl); - foreach_list_typed(nir_cf_node, child, node, &if_stmt->else_list) - cleanup_cf_node(child, impl); - - list_del(&if_stmt->condition.use_link); - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - foreach_list_typed(nir_cf_node, child, node, &loop->body) - cleanup_cf_node(child, impl); - foreach_list_typed(nir_cf_node, child, node, &loop->continue_list) - cleanup_cf_node(child, impl); - break; - } - case nir_cf_node_function: { - nir_function_impl *impl = nir_cf_node_as_function(node); - foreach_list_typed(nir_cf_node, child, node, &impl->body) - cleanup_cf_node(child, impl); - break; - } - default: - unreachable("Invalid CF node type"); - } -} - -/** - * Extracts everything between two cursors. Returns the cursor which is - * equivalent to the old begin/end curosors. - */ -nir_cursor -nir_cf_extract(nir_cf_list *extracted, nir_cursor begin, nir_cursor end) -{ - nir_block *block_begin, *block_end, *block_before, *block_after; - - if (nir_cursors_equal(begin, end)) { - exec_list_make_empty(&extracted->list); - extracted->impl = NULL; /* we shouldn't need this */ - return begin; - } - - split_block_cursor(begin, &block_before, &block_begin); - - /* Splitting a block twice with two cursors created before either split is - * tricky and there are a couple of places it can go wrong if both cursors - * point to the same block. One is if the second cursor is an block-based - * cursor and, thanks to the split above, it ends up pointing to the wrong - * block. If it's a before_block cursor and it's in the same block as - * begin, then begin must also be a before_block cursor and it should be - * caught by the nir_cursors_equal check above and we won't get here. If - * it's an after_block cursor, we need to re-adjust to ensure that it - * points to the second one of the split blocks, regardless of which it is. - */ - if (end.option == nir_cursor_after_block && end.block == block_before) - end.block = block_begin; - - split_block_cursor(end, &block_end, &block_after); - - /* The second place this can all go wrong is that it could be that the - * second split places the original block after the new block in which case - * the block_begin pointer that we saved off above is pointing to the block - * at the end rather than the block in the middle like it's supposed to be. - * In this case, we have to re-adjust begin_block to point to the middle - * one. - */ - if (block_begin == block_after) - block_begin = block_end; - - extracted->impl = nir_cf_node_get_function(&block_begin->cf_node); - exec_list_make_empty(&extracted->list); - - /* Dominance and other block-related information is toast. */ - nir_metadata_preserve(extracted->impl, nir_metadata_none); - - nir_cf_node *cf_node = &block_begin->cf_node; - nir_cf_node *cf_node_end = &block_end->cf_node; - while (true) { - nir_cf_node *next = nir_cf_node_next(cf_node); - - exec_node_remove(&cf_node->node); - cf_node->parent = NULL; - exec_list_push_tail(&extracted->list, &cf_node->node); - - if (cf_node == cf_node_end) - break; - - cf_node = next; - } - - return stitch_blocks(block_before, block_after); -} - -static void -relink_jump_halt_cf_node(nir_cf_node *node, nir_block *end_block) -{ - switch (node->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(node); - nir_instr *last_instr = nir_block_last_instr(block); - if (last_instr == NULL || last_instr->type != nir_instr_type_jump) - break; - - nir_jump_instr *jump = nir_instr_as_jump(last_instr); - /* We can't move a CF list from one function to another while we still - * have returns. - */ - assert(jump->type != nir_jump_return); - - if (jump->type == nir_jump_halt) { - unlink_block_successors(block); - link_blocks(block, end_block, NULL); - } - break; - } - - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(node); - foreach_list_typed(nir_cf_node, child, node, &if_stmt->then_list) - relink_jump_halt_cf_node(child, end_block); - foreach_list_typed(nir_cf_node, child, node, &if_stmt->else_list) - relink_jump_halt_cf_node(child, end_block); - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - foreach_list_typed(nir_cf_node, child, node, &loop->body) - relink_jump_halt_cf_node(child, end_block); - foreach_list_typed(nir_cf_node, child, node, &loop->continue_list) - relink_jump_halt_cf_node(child, end_block); - break; - } - - case nir_cf_node_function: - unreachable("Cannot insert a function in a function"); - - default: - unreachable("Invalid CF node type"); - } -} - -/** - * Inserts a list at a given cursor. Returns the cursor at the end of the - * insertion (i.e., at the end of the instructions contained in cf_list). - */ -nir_cursor -nir_cf_reinsert(nir_cf_list *cf_list, nir_cursor cursor) -{ - nir_block *before, *after; - - if (exec_list_is_empty(&cf_list->list)) - return cursor; - - nir_function_impl *cursor_impl = - nir_cf_node_get_function(&nir_cursor_current_block(cursor)->cf_node); - if (cf_list->impl != cursor_impl) { - foreach_list_typed(nir_cf_node, node, node, &cf_list->list) - relink_jump_halt_cf_node(node, cursor_impl->end_block); - } - - split_block_cursor(cursor, &before, &after); - - foreach_list_typed_safe(nir_cf_node, node, node, &cf_list->list) { - exec_node_remove(&node->node); - node->parent = before->cf_node.parent; - exec_node_insert_node_before(&after->cf_node.node, &node->node); - } - - stitch_blocks(before, - nir_cf_node_as_block(nir_cf_node_next(&before->cf_node))); - return stitch_blocks(nir_cf_node_as_block(nir_cf_node_prev(&after->cf_node)), - after); -} - -void -nir_cf_delete(nir_cf_list *cf_list) -{ - foreach_list_typed(nir_cf_node, node, node, &cf_list->list) { - cleanup_cf_node(node, cf_list->impl); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow.h deleted file mode 100644 index 818c1b2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#ifndef NIR_CONTROL_FLOW_H -#define NIR_CONTROL_FLOW_H - -#include "nir.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** NIR Control Flow Modification - * - * This file contains various APIs that make modifying control flow in NIR, - * while maintaining the invariants checked by the validator, much easier. - * There are two parts to this: - * - * 1. Inserting control flow (ifs and loops) in various places, for creating - * IR either from scratch or as part of some lowering pass. - * 2. Taking existing pieces of the IR and either moving them around or - * deleting them. - */ - -/** Control flow insertion. */ - -/** puts a control flow node where the cursor is */ -void nir_cf_node_insert(nir_cursor cursor, nir_cf_node *node); - -/** puts a control flow node immediately after another control flow node */ -static inline void -nir_cf_node_insert_after(nir_cf_node *node, nir_cf_node *after) -{ - nir_cf_node_insert(nir_after_cf_node(node), after); -} - -/** puts a control flow node immediately before another control flow node */ -static inline void -nir_cf_node_insert_before(nir_cf_node *node, nir_cf_node *before) -{ - nir_cf_node_insert(nir_before_cf_node(node), before); -} - -/** puts a control flow node at the beginning of a list from an if, loop, or function */ -static inline void -nir_cf_node_insert_begin(struct exec_list *list, nir_cf_node *node) -{ - nir_cf_node_insert(nir_before_cf_list(list), node); -} - -/** puts a control flow node at the end of a list from an if, loop, or function */ -static inline void -nir_cf_node_insert_end(struct exec_list *list, nir_cf_node *node) -{ - nir_cf_node_insert(nir_after_cf_list(list), node); -} - - -/** Control flow motion. - * - * These functions let you take a part of a control flow list (basically - * equivalent to a series of statement in GLSL) and "extract" it from the IR, - * so that it's a free-floating piece of IR that can be either re-inserted - * somewhere else or deleted entirely. A few notes on using it: - * - * 1. Phi nodes are considered attached to the piece of control flow that - * their sources come from. There are three places where phi nodes can - * occur, which are the three places where a block can have multiple - * predecessors: - * - * 1) After an if statement, if neither branch ends in a jump. - * 2) After a loop, if there are multiple breaks. - * 3) At the beginning of a loop. - * - * For #1, the phi node is considered to be part of the if, and for #2 and - * #3 the phi node is considered to be part of the loop. This allows us to - * keep phis intact, but it means that phi nodes cannot be separated from - * the control flow they come from. For example, extracting an if without - * extracting all the phi nodes after it is not allowed, and neither is - * extracting only some of the phi nodes at the beginning of a block. It - * also means that extracting from the beginning of a basic block actually - * means extracting from the first non-phi instruction, since there's no - * situation where extracting phi nodes without extracting what comes - * before them makes any sense. - * - * 2. Phi node sources are guaranteed to remain valid, meaning that they still - * correspond one-to-one with the predecessors of the basic block they're - * part of. In addition, the original sources will be preserved unless they - * correspond to a break or continue that was deleted. However, no attempt - * is made to ensure that SSA form is maintained. In particular, it is - * *not* guaranteed that definitions of SSA values will dominate all their - * uses after all is said and done. Either the caller must ensure that this - * is the case, or it must insert extra phi nodes to restore SSA. - * - * 3. It is invalid to move a piece of IR with a break/continue outside of the - * loop it references. Doing this will result in invalid - * successors/predecessors and phi node sources. - * - * 4. It is invalid to move a piece of IR from one function implementation to - * another. - * - * 5. Extracting a control flow list will leave lots of dangling references to - * and from other pieces of the IR. It also leaves things in a not 100% - * consistent state. This means that some things (e.g. inserting - * instructions) might not work reliably on the extracted control flow. It - * also means that extracting control flow without re-inserting it or - * deleting it is a Bad Thing (tm). - */ - -typedef struct { - struct exec_list list; - nir_function_impl *impl; /* for cleaning up if the list is deleted */ -} nir_cf_list; - -nir_cursor nir_cf_extract(nir_cf_list *extracted, nir_cursor begin, - nir_cursor end); - -nir_cursor nir_cf_reinsert(nir_cf_list *cf_list, nir_cursor cursor); - -void nir_cf_delete(nir_cf_list *cf_list); - -void nir_cf_list_clone(nir_cf_list *dst, nir_cf_list *src, nir_cf_node *parent, - struct hash_table *remap_table); - -static inline void -nir_cf_list_clone_and_reinsert(nir_cf_list *src_list, nir_cf_node *parent, - nir_cursor cursor, - struct hash_table *remap_table) -{ - nir_cf_list list; - nir_cf_list_clone(&list, src_list, parent, remap_table); - nir_cf_reinsert(&list, cursor); -} - -static inline void -nir_cf_list_extract(nir_cf_list *extracted, struct exec_list *cf_list) -{ - nir_cf_extract(extracted, nir_before_cf_list(cf_list), - nir_after_cf_list(cf_list)); -} - -/** removes a control flow node, doing any cleanup necessary */ -static inline void -nir_cf_node_remove(nir_cf_node *node) -{ - nir_cf_list list; - nir_cf_extract(&list, nir_before_cf_node(node), nir_after_cf_node(node)); - nir_cf_delete(&list); -} - -/** inserts undef phi sources from predcessor into phis of the block */ -void nir_insert_phi_undef(nir_block *block, nir_block *pred); - -/** Modify loop continue behavior */ -void nir_loop_add_continue_construct(nir_loop *loop); -void nir_loop_remove_continue_construct(nir_loop *loop); - -#ifdef __cplusplus -} -#endif - -#endif /* NIR_CONTROL_FLOW_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow_private.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow_private.h deleted file mode 100644 index c7f8be6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_control_flow_private.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#ifndef NIR_CONTROL_FLOW_PRIVATE_H -#define NIR_CONTROL_FLOW_PRIVATE_H - -#include "nir_control_flow.h" - - -/* Internal control-flow modification functions used when inserting/removing - * instructions. - */ - -void nir_handle_add_jump(nir_block *block); -void nir_handle_remove_jump(nir_block *block, nir_jump_type type); - -#endif /* NIR_CONTROL_FLOW_PRIVATE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_conversion_builder.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_conversion_builder.h deleted file mode 100644 index 3c08e22..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_conversion_builder.h +++ /dev/null @@ -1,522 +0,0 @@ -/* - * Copyright © 2020 Collabora Ltd. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_CONVERSION_BUILDER_H -#define NIR_CONVERSION_BUILDER_H - -#include "../../util/u_math.h" -#include "nir_builder.h" -#include "nir_builtin_builder.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static inline nir_ssa_def * -nir_round_float_to_int(nir_builder *b, nir_ssa_def *src, - nir_rounding_mode round) -{ - switch (round) { - case nir_rounding_mode_ru: - return nir_fceil(b, src); - - case nir_rounding_mode_rd: - return nir_ffloor(b, src); - - case nir_rounding_mode_rtne: - return nir_fround_even(b, src); - - case nir_rounding_mode_undef: - case nir_rounding_mode_rtz: - break; - } - unreachable("unexpected rounding mode"); -} - -static inline nir_ssa_def * -nir_round_float_to_float(nir_builder *b, nir_ssa_def *src, - unsigned dest_bit_size, - nir_rounding_mode round) -{ - unsigned src_bit_size = src->bit_size; - if (dest_bit_size > src_bit_size) - return src; /* No rounding is needed for an up-convert */ - - nir_op low_conv = nir_type_conversion_op(nir_type_float | src_bit_size, - nir_type_float | dest_bit_size, - nir_rounding_mode_undef); - nir_op high_conv = nir_type_conversion_op(nir_type_float | dest_bit_size, - nir_type_float | src_bit_size, - nir_rounding_mode_undef); - - switch (round) { - case nir_rounding_mode_ru: { - /* If lower-precision conversion results in a lower value, push it - * up one ULP. */ - nir_ssa_def *lower_prec = - nir_build_alu(b, low_conv, src, NULL, NULL, NULL); - nir_ssa_def *roundtrip = - nir_build_alu(b, high_conv, lower_prec, NULL, NULL, NULL); - nir_ssa_def *cmp = nir_flt(b, roundtrip, src); - nir_ssa_def *inf = nir_imm_floatN_t(b, INFINITY, dest_bit_size); - return nir_bcsel(b, cmp, nir_nextafter(b, lower_prec, inf), lower_prec); - } - case nir_rounding_mode_rd: { - /* If lower-precision conversion results in a higher value, push it - * down one ULP. */ - nir_ssa_def *lower_prec = - nir_build_alu(b, low_conv, src, NULL, NULL, NULL); - nir_ssa_def *roundtrip = - nir_build_alu(b, high_conv, lower_prec, NULL, NULL, NULL); - nir_ssa_def *cmp = nir_flt(b, src, roundtrip); - nir_ssa_def *neg_inf = nir_imm_floatN_t(b, -INFINITY, dest_bit_size); - return nir_bcsel(b, cmp, nir_nextafter(b, lower_prec, neg_inf), lower_prec); - } - case nir_rounding_mode_rtz: - return nir_bcsel(b, nir_flt(b, src, nir_imm_zero(b, 1, src->bit_size)), - nir_round_float_to_float(b, src, dest_bit_size, - nir_rounding_mode_ru), - nir_round_float_to_float(b, src, dest_bit_size, - nir_rounding_mode_rd)); - case nir_rounding_mode_rtne: - case nir_rounding_mode_undef: - break; - } - unreachable("unexpected rounding mode"); -} - -static inline nir_ssa_def * -nir_round_int_to_float(nir_builder *b, nir_ssa_def *src, - nir_alu_type src_type, - unsigned dest_bit_size, - nir_rounding_mode round) -{ - /* We only care whether or not its signed */ - src_type = nir_alu_type_get_base_type(src_type); - - unsigned mantissa_bits; - switch (dest_bit_size) { - case 16: - mantissa_bits = 10; - break; - case 32: - mantissa_bits = 23; - break; - case 64: - mantissa_bits = 52; - break; - default: unreachable("Unsupported bit size"); - } - - if (src->bit_size < mantissa_bits) - return src; - - if (src_type == nir_type_int) { - nir_ssa_def *sign = - nir_i2b(b, nir_ishr(b, src, nir_imm_int(b, src->bit_size - 1))); - nir_ssa_def *abs = nir_iabs(b, src); - nir_ssa_def *positive_rounded = - nir_round_int_to_float(b, abs, nir_type_uint, dest_bit_size, round); - nir_ssa_def *max_positive = - nir_imm_intN_t(b, (1ull << (src->bit_size - 1)) - 1, src->bit_size); - switch (round) { - case nir_rounding_mode_rtz: - return nir_bcsel(b, sign, nir_ineg(b, positive_rounded), - positive_rounded); - break; - case nir_rounding_mode_ru: - return nir_bcsel(b, sign, - nir_ineg(b, nir_round_int_to_float(b, abs, nir_type_uint, dest_bit_size, nir_rounding_mode_rd)), - nir_umin(b, positive_rounded, max_positive)); - break; - case nir_rounding_mode_rd: - return nir_bcsel(b, sign, - nir_ineg(b, - nir_umin(b, max_positive, - nir_round_int_to_float(b, abs, nir_type_uint, dest_bit_size, nir_rounding_mode_ru))), - positive_rounded); - case nir_rounding_mode_rtne: - case nir_rounding_mode_undef: - break; - } - unreachable("unexpected rounding mode"); - } else { - nir_ssa_def *mantissa_bit_size = nir_imm_int(b, mantissa_bits); - nir_ssa_def *msb = nir_imax(b, nir_ufind_msb(b, src), mantissa_bit_size); - nir_ssa_def *bits_to_lose = nir_isub(b, msb, mantissa_bit_size); - nir_ssa_def *one = nir_imm_intN_t(b, 1, src->bit_size); - nir_ssa_def *adjust = nir_ishl(b, one, bits_to_lose); - nir_ssa_def *mask = nir_inot(b, nir_isub(b, adjust, one)); - nir_ssa_def *truncated = nir_iand(b, src, mask); - switch (round) { - case nir_rounding_mode_rtz: - case nir_rounding_mode_rd: - return truncated; - break; - case nir_rounding_mode_ru: - return nir_bcsel(b, nir_ieq(b, src, truncated), - src, nir_uadd_sat(b, truncated, adjust)); - case nir_rounding_mode_rtne: - case nir_rounding_mode_undef: - break; - } - unreachable("unexpected rounding mode"); - } -} - -/** Returns true if the representable range of a contains the representable - * range of b. - */ -static inline bool -nir_alu_type_range_contains_type_range(nir_alu_type a, nir_alu_type b) -{ - /* Split types from bit sizes */ - nir_alu_type a_base_type = nir_alu_type_get_base_type(a); - nir_alu_type b_base_type = nir_alu_type_get_base_type(b); - unsigned a_bit_size = nir_alu_type_get_type_size(a); - unsigned b_bit_size = nir_alu_type_get_type_size(b); - - /* This requires sized types */ - assert(a_bit_size > 0 && b_bit_size > 0); - - if (a_base_type == b_base_type && a_bit_size >= b_bit_size) - return true; - - if (a_base_type == nir_type_int && b_base_type == nir_type_uint && - a_bit_size > b_bit_size) - return true; - - /* 16-bit floats fit in 32-bit integers */ - if (a_base_type == nir_type_int && a_bit_size >= 32 && - b == nir_type_float16) - return true; - - /* All signed or unsigned ints can fit in float or above. A uint8 can fit - * in a float16. - */ - if (a_base_type == nir_type_float && b_base_type != nir_type_float && - (a_bit_size >= 32 || b_bit_size == 8)) - return true; - - return false; -} - -/** - * Retrieves limits used for clamping a value of the src type into - * the widest representable range of the dst type via cmp + bcsel - */ -static inline void -nir_get_clamp_limits(nir_builder *b, - nir_alu_type src_type, - nir_alu_type dest_type, - nir_ssa_def **low, nir_ssa_def **high) -{ - /* Split types from bit sizes */ - nir_alu_type src_base_type = nir_alu_type_get_base_type(src_type); - nir_alu_type dest_base_type = nir_alu_type_get_base_type(dest_type); - unsigned src_bit_size = nir_alu_type_get_type_size(src_type); - unsigned dest_bit_size = nir_alu_type_get_type_size(dest_type); - assert(dest_bit_size != 0 && src_bit_size != 0); - - *low = NULL; - *high = NULL; - - /* limits of the destination type, expressed in the source type */ - switch (dest_base_type) { - case nir_type_int: { - int64_t ilow, ihigh; - if (dest_bit_size == 64) { - ilow = INT64_MIN; - ihigh = INT64_MAX; - } else { - ilow = -(1ll << (dest_bit_size - 1)); - ihigh = (1ll << (dest_bit_size - 1)) - 1; - } - - if (src_base_type == nir_type_int) { - *low = nir_imm_intN_t(b, ilow, src_bit_size); - *high = nir_imm_intN_t(b, ihigh, src_bit_size); - } else if (src_base_type == nir_type_uint) { - assert(src_bit_size >= dest_bit_size); - *high = nir_imm_intN_t(b, ihigh, src_bit_size); - } else { - *low = nir_imm_floatN_t(b, ilow, src_bit_size); - *high = nir_imm_floatN_t(b, ihigh, src_bit_size); - } - break; - } - case nir_type_uint: { - uint64_t uhigh = dest_bit_size == 64 ? - ~0ull : (1ull << dest_bit_size) - 1; - if (src_base_type != nir_type_float) { - *low = nir_imm_intN_t(b, 0, src_bit_size); - if (src_base_type == nir_type_uint || src_bit_size > dest_bit_size) - *high = nir_imm_intN_t(b, uhigh, src_bit_size); - } else { - *low = nir_imm_floatN_t(b, 0.0f, src_bit_size); - *high = nir_imm_floatN_t(b, uhigh, src_bit_size); - } - break; - } - case nir_type_float: { - double flow, fhigh; - switch (dest_bit_size) { - case 16: - flow = -65504.0f; - fhigh = 65504.0f; - break; - case 32: - flow = -FLT_MAX; - fhigh = FLT_MAX; - break; - case 64: - flow = -DBL_MAX; - fhigh = DBL_MAX; - break; - default: - unreachable("Unhandled bit size"); - } - - switch (src_base_type) { - case nir_type_int: { - int64_t src_ilow, src_ihigh; - if (src_bit_size == 64) { - src_ilow = INT64_MIN; - src_ihigh = INT64_MAX; - } else { - src_ilow = -(1ll << (src_bit_size - 1)); - src_ihigh = (1ll << (src_bit_size - 1)) - 1; - } - if (src_ilow < flow) - *low = nir_imm_intN_t(b, flow, src_bit_size); - if (src_ihigh > fhigh) - *high = nir_imm_intN_t(b, fhigh, src_bit_size); - break; - } - case nir_type_uint: { - uint64_t src_uhigh = src_bit_size == 64 ? - ~0ull : (1ull << src_bit_size) - 1; - if (src_uhigh > fhigh) - *high = nir_imm_intN_t(b, fhigh, src_bit_size); - break; - } - case nir_type_float: - *low = nir_imm_floatN_t(b, flow, src_bit_size); - *high = nir_imm_floatN_t(b, fhigh, src_bit_size); - break; - default: - unreachable("Clamping from unknown type"); - } - break; - } - default: - unreachable("clamping to unknown type"); - break; - } -} - -/** - * Clamp the value into the widest representatble range of the - * destination type with cmp + bcsel. - * - * val/val_type: The variables used for bcsel - * src/src_type: The variables used for comparison - * dest_type: The type which determines the range used for comparison - */ -static inline nir_ssa_def * -nir_clamp_to_type_range(nir_builder *b, - nir_ssa_def *val, nir_alu_type val_type, - nir_ssa_def *src, nir_alu_type src_type, - nir_alu_type dest_type) -{ - assert(nir_alu_type_get_type_size(src_type) == 0 || - nir_alu_type_get_type_size(src_type) == src->bit_size); - src_type |= src->bit_size; - if (nir_alu_type_range_contains_type_range(dest_type, src_type)) - return val; - - /* limits of the destination type, expressed in the source type */ - nir_ssa_def *low = NULL, *high = NULL; - nir_get_clamp_limits(b, src_type, dest_type, &low, &high); - - nir_ssa_def *low_cond = NULL, *high_cond = NULL; - switch (nir_alu_type_get_base_type(src_type)) { - case nir_type_int: - low_cond = low ? nir_ilt(b, src, low) : NULL; - high_cond = high ? nir_ilt(b, high, src) : NULL; - break; - case nir_type_uint: - low_cond = low ? nir_ult(b, src, low) : NULL; - high_cond = high ? nir_ult(b, high, src) : NULL; - break; - case nir_type_float: - low_cond = low ? nir_fge(b, low, src) : NULL; - high_cond = high ? nir_fge(b, src, high) : NULL; - break; - default: - unreachable("clamping from unknown type"); - } - - nir_ssa_def *val_low = low, *val_high = high; - if (val_type != src_type) { - nir_get_clamp_limits(b, val_type, dest_type, &val_low, &val_high); - } - - nir_ssa_def *res = val; - if (low_cond && val_low) - res = nir_bcsel(b, low_cond, val_low, res); - if (high_cond && val_high) - res = nir_bcsel(b, high_cond, val_high, res); - - return res; -} - -static inline nir_rounding_mode -nir_simplify_conversion_rounding(nir_alu_type src_type, - nir_alu_type dest_type, - nir_rounding_mode rounding) -{ - nir_alu_type src_base_type = nir_alu_type_get_base_type(src_type); - nir_alu_type dest_base_type = nir_alu_type_get_base_type(dest_type); - unsigned src_bit_size = nir_alu_type_get_type_size(src_type); - unsigned dest_bit_size = nir_alu_type_get_type_size(dest_type); - assert(src_bit_size > 0 && dest_bit_size > 0); - - if (rounding == nir_rounding_mode_undef) - return rounding; - - /* Pure integer conversion doesn't have any rounding */ - if (src_base_type != nir_type_float && - dest_base_type != nir_type_float) - return nir_rounding_mode_undef; - - /* Float down-casts don't round */ - if (src_base_type == nir_type_float && - dest_base_type == nir_type_float && - dest_bit_size >= src_bit_size) - return nir_rounding_mode_undef; - - /* Regular float to int conversions are RTZ */ - if (src_base_type == nir_type_float && - dest_base_type != nir_type_float && - rounding == nir_rounding_mode_rtz) - return nir_rounding_mode_undef; - - /* The CL spec requires regular conversions to float to be RTNE */ - if (dest_base_type == nir_type_float && - rounding == nir_rounding_mode_rtne) - return nir_rounding_mode_undef; - - /* Couldn't simplify */ - return rounding; -} - -static inline nir_ssa_def * -nir_convert_with_rounding(nir_builder *b, - nir_ssa_def *src, nir_alu_type src_type, - nir_alu_type dest_type, - nir_rounding_mode round, - bool clamp) -{ - /* Some stuff wants sized types */ - assert(nir_alu_type_get_type_size(src_type) == 0 || - nir_alu_type_get_type_size(src_type) == src->bit_size); - src_type |= src->bit_size; - - /* Split types from bit sizes */ - nir_alu_type src_base_type = nir_alu_type_get_base_type(src_type); - nir_alu_type dest_base_type = nir_alu_type_get_base_type(dest_type); - unsigned dest_bit_size = nir_alu_type_get_type_size(dest_type); - - /* Try to simplify the conversion if we can */ - clamp = clamp && - !nir_alu_type_range_contains_type_range(dest_type, src_type); - round = nir_simplify_conversion_rounding(src_type, dest_type, round); - - /* For float -> int/uint conversions, we might not be able to represent - * the destination range in the source float accurately. For these cases, - * do the comparison in float range, but the bcsel in the destination range. - */ - bool clamp_after_conversion = clamp && - src_base_type == nir_type_float && - dest_base_type != nir_type_float; - - /* - * If we don't care about rounding and clamping, we can just use NIR's - * built-in ops. There is also a special case for SPIR-V in shaders, where - * f32/f64 -> f16 conversions can have one of two rounding modes applied, - * which NIR has built-in opcodes for. - * - * For the rest, we have our own implementation of rounding and clamping. - */ - bool trivial_convert; - if (!clamp && round == nir_rounding_mode_undef) { - trivial_convert = true; - } else if (!clamp && src_type == nir_type_float32 && - dest_type == nir_type_float16 && - (round == nir_rounding_mode_rtne || - round == nir_rounding_mode_rtz)) { - trivial_convert = true; - } else { - trivial_convert = false; - } - - if (trivial_convert) - return nir_type_convert(b, src, src_type, dest_type, round); - - nir_ssa_def *dest = src; - - /* clamp the result into range */ - if (clamp && !clamp_after_conversion) - dest = nir_clamp_to_type_range(b, src, src_type, src, src_type, dest_type); - - /* round with selected rounding mode */ - if (!trivial_convert && round != nir_rounding_mode_undef) { - if (src_base_type == nir_type_float) { - if (dest_base_type == nir_type_float) { - dest = nir_round_float_to_float(b, dest, dest_bit_size, round); - } else { - dest = nir_round_float_to_int(b, dest, round); - } - } else { - dest = nir_round_int_to_float(b, dest, src_type, dest_bit_size, round); - } - - round = nir_rounding_mode_undef; - } - - /* now we can convert the value */ - nir_op op = nir_type_conversion_op(src_type, dest_type, round); - dest = nir_build_alu(b, op, dest, NULL, NULL, NULL); - - if (clamp_after_conversion) - dest = nir_clamp_to_type_range(b, dest, dest_type, src, src_type, dest_type); - - return dest; -} - -#ifdef __cplusplus -} -#endif - -#endif /* NIR_CONVERSION_BUILDER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_deref.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_deref.c deleted file mode 100644 index f2da9d4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_deref.c +++ /dev/null @@ -1,1523 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" -#include "../../util/hash_table.h" - -static bool -is_trivial_deref_cast(nir_deref_instr *cast) -{ - nir_deref_instr *parent = nir_src_as_deref(cast->parent); - if (!parent) - return false; - - return cast->modes == parent->modes && - cast->type == parent->type && - cast->dest.ssa.num_components == parent->dest.ssa.num_components && - cast->dest.ssa.bit_size == parent->dest.ssa.bit_size; -} - -void -nir_deref_path_init(nir_deref_path *path, - nir_deref_instr *deref, void *mem_ctx) -{ - assert(deref != NULL); - - /* The length of the short path is at most ARRAY_SIZE - 1 because we need - * room for the NULL terminator. - */ - static const int max_short_path_len = ARRAY_SIZE(path->_short_path) - 1; - - int count = 0; - - nir_deref_instr **tail = &path->_short_path[max_short_path_len]; - nir_deref_instr **head = tail; - - *tail = NULL; - for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type == nir_deref_type_cast && is_trivial_deref_cast(d)) - continue; - count++; - if (count <= max_short_path_len) - *(--head) = d; - } - - if (count <= max_short_path_len) { - /* If we're under max_short_path_len, just use the short path. */ - path->path = head; - goto done; - } - -#ifndef NDEBUG - /* Just in case someone uses short_path by accident */ - for (unsigned i = 0; i < ARRAY_SIZE(path->_short_path); i++) - path->_short_path[i] = (void *)(uintptr_t)0xdeadbeef; -#endif - - path->path = ralloc_array(mem_ctx, nir_deref_instr *, count + 1); - head = tail = path->path + count; - *tail = NULL; - for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type == nir_deref_type_cast && is_trivial_deref_cast(d)) - continue; - *(--head) = d; - } - -done: - assert(head == path->path); - assert(tail == head + count); - assert(*tail == NULL); -} - -void -nir_deref_path_finish(nir_deref_path *path) -{ - if (path->path < &path->_short_path[0] || - path->path > &path->_short_path[ARRAY_SIZE(path->_short_path) - 1]) - ralloc_free(path->path); -} - -/** - * Recursively removes unused deref instructions - */ -bool -nir_deref_instr_remove_if_unused(nir_deref_instr *instr) -{ - bool progress = false; - - for (nir_deref_instr *d = instr; d; d = nir_deref_instr_parent(d)) { - /* If anyone is using this deref, leave it alone */ - assert(d->dest.is_ssa); - if (!nir_ssa_def_is_unused(&d->dest.ssa)) - break; - - nir_instr_remove(&d->instr); - progress = true; - } - - return progress; -} - -bool -nir_deref_instr_has_indirect(nir_deref_instr *instr) -{ - while (instr->deref_type != nir_deref_type_var) { - /* Consider casts to be indirects */ - if (instr->deref_type == nir_deref_type_cast) - return true; - - if ((instr->deref_type == nir_deref_type_array || - instr->deref_type == nir_deref_type_ptr_as_array) && - !nir_src_is_const(instr->arr.index)) - return true; - - instr = nir_deref_instr_parent(instr); - } - - return false; -} - -bool -nir_deref_instr_is_known_out_of_bounds(nir_deref_instr *instr) -{ - for (; instr; instr = nir_deref_instr_parent(instr)) { - if (instr->deref_type == nir_deref_type_array && - nir_src_is_const(instr->arr.index) && - nir_src_as_uint(instr->arr.index) >= - glsl_get_length(nir_deref_instr_parent(instr)->type)) - return true; - } - - return false; -} - -bool -nir_deref_instr_has_complex_use(nir_deref_instr *deref, - nir_deref_instr_has_complex_use_options opts) -{ - nir_foreach_use_including_if(use_src, &deref->dest.ssa) { - if (use_src->is_if) - return true; - - nir_instr *use_instr = use_src->parent_instr; - - switch (use_instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *use_deref = nir_instr_as_deref(use_instr); - - /* A var deref has no sources */ - assert(use_deref->deref_type != nir_deref_type_var); - - /* If a deref shows up in an array index or something like that, it's - * a complex use. - */ - if (use_src != &use_deref->parent) - return true; - - /* Anything that isn't a basic struct or array deref is considered to - * be a "complex" use. In particular, we don't allow ptr_as_array - * because we assume that opt_deref will turn any non-complex - * ptr_as_array derefs into regular array derefs eventually so passes - * which only want to handle simple derefs will pick them up in a - * later pass. - */ - if (use_deref->deref_type != nir_deref_type_struct && - use_deref->deref_type != nir_deref_type_array_wildcard && - use_deref->deref_type != nir_deref_type_array) - return true; - - if (nir_deref_instr_has_complex_use(use_deref, opts)) - return true; - - continue; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *use_intrin = nir_instr_as_intrinsic(use_instr); - switch (use_intrin->intrinsic) { - case nir_intrinsic_load_deref: - assert(use_src == &use_intrin->src[0]); - continue; - - case nir_intrinsic_copy_deref: - assert(use_src == &use_intrin->src[0] || - use_src == &use_intrin->src[1]); - continue; - - case nir_intrinsic_store_deref: - /* A use in src[1] of a store means we're taking that pointer and - * writing it to a variable. Because we have no idea who will - * read that variable and what they will do with the pointer, it's - * considered a "complex" use. A use in src[0], on the other - * hand, is a simple use because we're just going to dereference - * it and write a value there. - */ - if (use_src == &use_intrin->src[0]) - continue; - return true; - - case nir_intrinsic_memcpy_deref: - if (use_src == &use_intrin->src[0] && - (opts & nir_deref_instr_has_complex_use_allow_memcpy_dst)) - continue; - if (use_src == &use_intrin->src[1] && - (opts & nir_deref_instr_has_complex_use_allow_memcpy_src)) - continue; - return true; - - default: - return true; - } - unreachable("Switch default failed"); - } - - default: - return true; - } - } - - return false; -} - -static unsigned -type_scalar_size_bytes(const struct glsl_type *type) -{ - assert(glsl_type_is_vector_or_scalar(type) || - glsl_type_is_matrix(type)); - return glsl_type_is_boolean(type) ? 4 : glsl_get_bit_size(type) / 8; -} - -unsigned -nir_deref_instr_array_stride(nir_deref_instr *deref) -{ - switch (deref->deref_type) { - case nir_deref_type_array: - case nir_deref_type_array_wildcard: { - const struct glsl_type *arr_type = nir_deref_instr_parent(deref)->type; - unsigned stride = glsl_get_explicit_stride(arr_type); - - if ((glsl_type_is_matrix(arr_type) && - glsl_matrix_type_is_row_major(arr_type)) || - (glsl_type_is_vector(arr_type) && stride == 0)) - stride = type_scalar_size_bytes(arr_type); - - return stride; - } - case nir_deref_type_ptr_as_array: - return nir_deref_instr_array_stride(nir_deref_instr_parent(deref)); - case nir_deref_type_cast: - return deref->cast.ptr_stride; - default: - return 0; - } -} - -static unsigned -type_get_array_stride(const struct glsl_type *elem_type, - glsl_type_size_align_func size_align) -{ - unsigned elem_size, elem_align; - size_align(elem_type, &elem_size, &elem_align); - return ALIGN_POT(elem_size, elem_align); -} - -static unsigned -struct_type_get_field_offset(const struct glsl_type *struct_type, - glsl_type_size_align_func size_align, - unsigned field_idx) -{ - assert(glsl_type_is_struct_or_ifc(struct_type)); - unsigned offset = 0; - for (unsigned i = 0; i <= field_idx; i++) { - unsigned elem_size, elem_align; - size_align(glsl_get_struct_field(struct_type, i), &elem_size, &elem_align); - offset = ALIGN_POT(offset, elem_align); - if (i < field_idx) - offset += elem_size; - } - return offset; -} - -unsigned -nir_deref_instr_get_const_offset(nir_deref_instr *deref, - glsl_type_size_align_func size_align) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - unsigned offset = 0; - for (nir_deref_instr **p = &path.path[1]; *p; p++) { - switch ((*p)->deref_type) { - case nir_deref_type_array: - offset += nir_src_as_uint((*p)->arr.index) * - type_get_array_stride((*p)->type, size_align); - break; - case nir_deref_type_struct: { - /* p starts at path[1], so this is safe */ - nir_deref_instr *parent = *(p - 1); - offset += struct_type_get_field_offset(parent->type, size_align, - (*p)->strct.index); - break; - } - case nir_deref_type_cast: - /* A cast doesn't contribute to the offset */ - break; - default: - unreachable("Unsupported deref type"); - } - } - - nir_deref_path_finish(&path); - - return offset; -} - -nir_ssa_def * -nir_build_deref_offset(nir_builder *b, nir_deref_instr *deref, - glsl_type_size_align_func size_align) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - nir_ssa_def *offset = nir_imm_intN_t(b, 0, deref->dest.ssa.bit_size); - for (nir_deref_instr **p = &path.path[1]; *p; p++) { - switch ((*p)->deref_type) { - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: { - nir_ssa_def *index = nir_ssa_for_src(b, (*p)->arr.index, 1); - int stride = type_get_array_stride((*p)->type, size_align); - offset = nir_iadd(b, offset, nir_amul_imm(b, index, stride)); - break; - } - case nir_deref_type_struct: { - /* p starts at path[1], so this is safe */ - nir_deref_instr *parent = *(p - 1); - unsigned field_offset = - struct_type_get_field_offset(parent->type, size_align, - (*p)->strct.index); - offset = nir_iadd_imm(b, offset, field_offset); - break; - } - case nir_deref_type_cast: - /* A cast doesn't contribute to the offset */ - break; - default: - unreachable("Unsupported deref type"); - } - } - - nir_deref_path_finish(&path); - - return offset; -} - -bool -nir_remove_dead_derefs_impl(nir_function_impl *impl) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_deref && - nir_deref_instr_remove_if_unused(nir_instr_as_deref(instr))) - progress = true; - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_remove_dead_derefs(nir_shader *shader) -{ - bool progress = false; - nir_foreach_function(function, shader) { - if (function->impl && nir_remove_dead_derefs_impl(function->impl)) - progress = true; - } - - return progress; -} - -void -nir_fixup_deref_modes(nir_shader *shader) -{ - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type == nir_deref_type_cast) - continue; - - nir_variable_mode parent_modes; - if (deref->deref_type == nir_deref_type_var) { - parent_modes = deref->var->data.mode; - } else { - assert(deref->parent.is_ssa); - nir_deref_instr *parent = - nir_instr_as_deref(deref->parent.ssa->parent_instr); - parent_modes = parent->modes; - } - - deref->modes = parent_modes; - } - } - } -} - -static bool -modes_may_alias(nir_variable_mode a, nir_variable_mode b) -{ - /* Generic pointers can alias with SSBOs */ - if ((a & (nir_var_mem_ssbo | nir_var_mem_global)) && - (b & (nir_var_mem_ssbo | nir_var_mem_global))) - return true; - - /* Pointers can only alias if they share a mode. */ - return a & b; -} - -ALWAYS_INLINE static nir_deref_compare_result -compare_deref_paths(nir_deref_path *a_path, nir_deref_path *b_path, - unsigned *i, bool (*stop_fn)(const nir_deref_instr *)) -{ - /* Start off assuming they fully compare. We ignore equality for now. In - * the end, we'll determine that by containment. - */ - nir_deref_compare_result result = nir_derefs_may_alias_bit | - nir_derefs_a_contains_b_bit | - nir_derefs_b_contains_a_bit; - - nir_deref_instr **a = a_path->path; - nir_deref_instr **b = b_path->path; - - for (; a[*i] != NULL; (*i)++) { - if (a[*i] != b[*i]) - break; - - if (stop_fn && stop_fn(a[*i])) - break; - } - - /* We're at either the tail or the divergence point between the two deref - * paths. Look to see if either contains cast or a ptr_as_array deref. If - * it does we don't know how to safely make any inferences. Hopefully, - * nir_opt_deref will clean most of these up and we can start inferring - * things again. - * - * In theory, we could do a bit better. For instance, we could detect the - * case where we have exactly one ptr_as_array deref in the chain after the - * divergence point and it's matched in both chains and the two chains have - * different constant indices. - */ - for (unsigned j = *i; a[j] != NULL; j++) { - if (stop_fn && stop_fn(a[j])) - break; - - if (a[j]->deref_type == nir_deref_type_cast || - a[j]->deref_type == nir_deref_type_ptr_as_array) - return nir_derefs_may_alias_bit; - } - for (unsigned j = *i; b[j] != NULL; j++) { - if (stop_fn && stop_fn(b[j])) - break; - - if (b[j]->deref_type == nir_deref_type_cast || - b[j]->deref_type == nir_deref_type_ptr_as_array) - return nir_derefs_may_alias_bit; - } - - for (; a[*i] != NULL && b[*i] != NULL; (*i)++) { - if (stop_fn && (stop_fn(a[*i]) || stop_fn(b[*i]))) - break; - - switch (a[*i]->deref_type) { - case nir_deref_type_array: - case nir_deref_type_array_wildcard: { - assert(b[*i]->deref_type == nir_deref_type_array || - b[*i]->deref_type == nir_deref_type_array_wildcard); - - if (a[*i]->deref_type == nir_deref_type_array_wildcard) { - if (b[*i]->deref_type != nir_deref_type_array_wildcard) - result &= ~nir_derefs_b_contains_a_bit; - } else if (b[*i]->deref_type == nir_deref_type_array_wildcard) { - if (a[*i]->deref_type != nir_deref_type_array_wildcard) - result &= ~nir_derefs_a_contains_b_bit; - } else { - assert(a[*i]->deref_type == nir_deref_type_array && - b[*i]->deref_type == nir_deref_type_array); - assert(a[*i]->arr.index.is_ssa && b[*i]->arr.index.is_ssa); - - if (nir_src_is_const(a[*i]->arr.index) && - nir_src_is_const(b[*i]->arr.index)) { - /* If they're both direct and have different offsets, they - * don't even alias much less anything else. - */ - if (nir_src_as_uint(a[*i]->arr.index) != - nir_src_as_uint(b[*i]->arr.index)) - return nir_derefs_do_not_alias; - } else if (a[*i]->arr.index.ssa == b[*i]->arr.index.ssa) { - /* They're the same indirect, continue on */ - } else { - /* They're not the same index so we can't prove anything about - * containment. - */ - result &= ~(nir_derefs_a_contains_b_bit | nir_derefs_b_contains_a_bit); - } - } - break; - } - - case nir_deref_type_struct: { - /* If they're different struct members, they don't even alias */ - if (a[*i]->strct.index != b[*i]->strct.index) - return nir_derefs_do_not_alias; - break; - } - - default: - unreachable("Invalid deref type"); - } - } - - /* If a is longer than b, then it can't contain b. If neither a[i] nor - * b[i] are NULL then we aren't at the end of the chain and we know nothing - * about containment. - */ - if (a[*i] != NULL) - result &= ~nir_derefs_a_contains_b_bit; - if (b[*i] != NULL) - result &= ~nir_derefs_b_contains_a_bit; - - /* If a contains b and b contains a they must be equal. */ - if ((result & nir_derefs_a_contains_b_bit) && - (result & nir_derefs_b_contains_a_bit)) - result |= nir_derefs_equal_bit; - - return result; -} - -static bool -is_interface_struct_deref(const nir_deref_instr *deref) -{ - if (deref->deref_type == nir_deref_type_struct) { - assert(glsl_type_is_struct_or_ifc(nir_deref_instr_parent(deref)->type)); - return true; - } else { - return false; - } -} - -nir_deref_compare_result -nir_compare_deref_paths(nir_deref_path *a_path, - nir_deref_path *b_path) -{ - if (!modes_may_alias(b_path->path[0]->modes, a_path->path[0]->modes)) - return nir_derefs_do_not_alias; - - if (a_path->path[0]->deref_type != b_path->path[0]->deref_type) - return nir_derefs_may_alias_bit; - - unsigned path_idx = 1; - if (a_path->path[0]->deref_type == nir_deref_type_var) { - const nir_variable *a_var = a_path->path[0]->var; - const nir_variable *b_var = b_path->path[0]->var; - - /* If we got here, the two variables must have the same mode. The - * only way modes_may_alias() can return true for two different modes - * is if one is global and the other ssbo. However, Global variables - * only exist in OpenCL and SSBOs don't exist there. No API allows - * both for variables. - */ - assert(a_var->data.mode == b_var->data.mode); - - switch (a_var->data.mode) { - case nir_var_mem_ssbo: { - nir_deref_compare_result binding_compare; - if (a_var == b_var) { - binding_compare = compare_deref_paths(a_path, b_path, &path_idx, - is_interface_struct_deref); - } else { - binding_compare = nir_derefs_do_not_alias; - } - - if (binding_compare & nir_derefs_equal_bit) - break; - - /* If the binding derefs can't alias and at least one is RESTRICT, - * then we know they can't alias. - */ - if (!(binding_compare & nir_derefs_may_alias_bit) && - ((a_var->data.access & ACCESS_RESTRICT) || - (b_var->data.access & ACCESS_RESTRICT))) - return nir_derefs_do_not_alias; - - return nir_derefs_may_alias_bit; - } - - case nir_var_mem_shared: - if (a_var == b_var) - break; - - /* Per SPV_KHR_workgroup_memory_explicit_layout and - * GL_EXT_shared_memory_block, shared blocks alias each other. - * We will have either all blocks or all non-blocks. - */ - if (glsl_type_is_interface(a_var->type) || - glsl_type_is_interface(b_var->type)) { - assert(glsl_type_is_interface(a_var->type) && - glsl_type_is_interface(b_var->type)); - return nir_derefs_may_alias_bit; - } - - /* Otherwise, distinct shared vars don't alias */ - return nir_derefs_do_not_alias; - - default: - /* For any other variable types, if we can chase them back to the - * variable, and the variables are different, they don't alias. - */ - if (a_var == b_var) - break; - - return nir_derefs_do_not_alias; - } - } else { - assert(a_path->path[0]->deref_type == nir_deref_type_cast); - /* If they're not exactly the same cast, it's hard to compare them so we - * just assume they alias. Comparing casts is tricky as there are lots - * of things such as mode, type, etc. to make sure work out; for now, we - * just assume nit_opt_deref will combine them and compare the deref - * instructions. - * - * TODO: At some point in the future, we could be clever and understand - * that a float[] and int[] have the same layout and aliasing structure - * but double[] and vec3[] do not and we could potentially be a bit - * smarter here. - */ - if (a_path->path[0] != b_path->path[0]) - return nir_derefs_may_alias_bit; - } - - return compare_deref_paths(a_path, b_path, &path_idx, NULL); -} - -nir_deref_compare_result -nir_compare_derefs(nir_deref_instr *a, nir_deref_instr *b) -{ - if (a == b) { - return nir_derefs_equal_bit | nir_derefs_may_alias_bit | - nir_derefs_a_contains_b_bit | nir_derefs_b_contains_a_bit; - } - - nir_deref_path a_path, b_path; - nir_deref_path_init(&a_path, a, NULL); - nir_deref_path_init(&b_path, b, NULL); - assert(a_path.path[0]->deref_type == nir_deref_type_var || - a_path.path[0]->deref_type == nir_deref_type_cast); - assert(b_path.path[0]->deref_type == nir_deref_type_var || - b_path.path[0]->deref_type == nir_deref_type_cast); - - nir_deref_compare_result result = nir_compare_deref_paths(&a_path, &b_path); - - nir_deref_path_finish(&a_path); - nir_deref_path_finish(&b_path); - - return result; -} - -nir_deref_path *nir_get_deref_path(void *mem_ctx, nir_deref_and_path *deref) -{ - if (!deref->_path) { - deref->_path = ralloc(mem_ctx, nir_deref_path); - nir_deref_path_init(deref->_path, deref->instr, mem_ctx); - } - return deref->_path; -} - -nir_deref_compare_result nir_compare_derefs_and_paths(void *mem_ctx, - nir_deref_and_path *a, - nir_deref_and_path *b) -{ - if (a->instr == b->instr) /* nir_compare_derefs has a fast path if a == b */ - return nir_compare_derefs(a->instr, b->instr); - - return nir_compare_deref_paths(nir_get_deref_path(mem_ctx, a), - nir_get_deref_path(mem_ctx, b)); -} - -struct rematerialize_deref_state { - bool progress; - nir_builder builder; - nir_block *block; - struct hash_table *cache; -}; - -static nir_deref_instr * -rematerialize_deref_in_block(nir_deref_instr *deref, - struct rematerialize_deref_state *state) -{ - if (deref->instr.block == state->block) - return deref; - - if (!state->cache) { - state->cache = _mesa_pointer_hash_table_create(NULL); - } - - struct hash_entry *cached = _mesa_hash_table_search(state->cache, deref); - if (cached) - return cached->data; - - nir_builder *b = &state->builder; - nir_deref_instr *new_deref = - nir_deref_instr_create(b->shader, deref->deref_type); - new_deref->modes = deref->modes; - new_deref->type = deref->type; - - if (deref->deref_type == nir_deref_type_var) { - new_deref->var = deref->var; - } else { - nir_deref_instr *parent = nir_src_as_deref(deref->parent); - if (parent) { - parent = rematerialize_deref_in_block(parent, state); - new_deref->parent = nir_src_for_ssa(&parent->dest.ssa); - } else { - nir_src_copy(&new_deref->parent, &deref->parent, &new_deref->instr); - } - } - - switch (deref->deref_type) { - case nir_deref_type_var: - case nir_deref_type_array_wildcard: - /* Nothing more to do */ - break; - - case nir_deref_type_cast: - new_deref->cast.ptr_stride = deref->cast.ptr_stride; - new_deref->cast.align_mul = deref->cast.align_mul; - new_deref->cast.align_offset = deref->cast.align_offset; - break; - - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: - assert(!nir_src_as_deref(deref->arr.index)); - nir_src_copy(&new_deref->arr.index, &deref->arr.index, &new_deref->instr); - break; - - case nir_deref_type_struct: - new_deref->strct.index = deref->strct.index; - break; - - default: - unreachable("Invalid deref instruction type"); - } - - nir_ssa_dest_init(&new_deref->instr, &new_deref->dest, - deref->dest.ssa.num_components, - deref->dest.ssa.bit_size, - NULL); - nir_builder_instr_insert(b, &new_deref->instr); - - return new_deref; -} - -static bool -rematerialize_deref_src(nir_src *src, void *_state) -{ - struct rematerialize_deref_state *state = _state; - - nir_deref_instr *deref = nir_src_as_deref(*src); - if (!deref) - return true; - - nir_deref_instr *block_deref = rematerialize_deref_in_block(deref, state); - if (block_deref != deref) { - nir_instr_rewrite_src(src->parent_instr, src, - nir_src_for_ssa(&block_deref->dest.ssa)); - nir_deref_instr_remove_if_unused(deref); - state->progress = true; - } - - return true; -} - -/** Re-materialize derefs in every block - * - * This pass re-materializes deref instructions in every block in which it is - * used. After this pass has been run, every use of a deref will be of a - * deref in the same block as the use. Also, all unused derefs will be - * deleted as a side-effect. - * - * Derefs used as sources of phi instructions are not rematerialized. - */ -bool -nir_rematerialize_derefs_in_use_blocks_impl(nir_function_impl *impl) -{ - struct rematerialize_deref_state state = { 0 }; - nir_builder_init(&state.builder, impl); - - nir_foreach_block_unstructured(block, impl) { - state.block = block; - - /* Start each block with a fresh cache */ - if (state.cache) - _mesa_hash_table_clear(state.cache, NULL); - - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_deref && - nir_deref_instr_remove_if_unused(nir_instr_as_deref(instr))) - continue; - - /* If a deref is used in a phi, we can't rematerialize it, as the new - * derefs would appear before the phi, which is not valid. - */ - if (instr->type == nir_instr_type_phi) - continue; - - state.builder.cursor = nir_before_instr(instr); - nir_foreach_src(instr, rematerialize_deref_src, &state); - } - -#ifndef NDEBUG - nir_if *following_if = nir_block_get_following_if(block); - if (following_if) - assert(!nir_src_as_deref(following_if->condition)); -#endif - } - - _mesa_hash_table_destroy(state.cache, NULL); - - return state.progress; -} - -static void -nir_deref_instr_fixup_child_types(nir_deref_instr *parent) -{ - nir_foreach_use(use, &parent->dest.ssa) { - if (use->parent_instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *child = nir_instr_as_deref(use->parent_instr); - switch (child->deref_type) { - case nir_deref_type_var: - unreachable("nir_deref_type_var cannot be a child"); - - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - child->type = glsl_get_array_element(parent->type); - break; - - case nir_deref_type_ptr_as_array: - child->type = parent->type; - break; - - case nir_deref_type_struct: - child->type = glsl_get_struct_field(parent->type, - child->strct.index); - break; - - case nir_deref_type_cast: - /* We stop the recursion here */ - continue; - } - - /* Recurse into children */ - nir_deref_instr_fixup_child_types(child); - } -} - -static bool -opt_alu_of_cast(nir_alu_instr *alu) -{ - bool progress = false; - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - assert(alu->src[i].src.is_ssa); - nir_instr *src_instr = alu->src[i].src.ssa->parent_instr; - if (src_instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *src_deref = nir_instr_as_deref(src_instr); - if (src_deref->deref_type != nir_deref_type_cast) - continue; - - assert(src_deref->parent.is_ssa); - nir_instr_rewrite_src_ssa(&alu->instr, &alu->src[i].src, - src_deref->parent.ssa); - progress = true; - } - - return progress; -} - -static bool -is_trivial_array_deref_cast(nir_deref_instr *cast) -{ - assert(is_trivial_deref_cast(cast)); - - nir_deref_instr *parent = nir_src_as_deref(cast->parent); - - if (parent->deref_type == nir_deref_type_array) { - return cast->cast.ptr_stride == - glsl_get_explicit_stride(nir_deref_instr_parent(parent)->type); - } else if (parent->deref_type == nir_deref_type_ptr_as_array) { - return cast->cast.ptr_stride == - nir_deref_instr_array_stride(parent); - } else { - return false; - } -} - -static bool -is_deref_ptr_as_array(nir_instr *instr) -{ - return instr->type == nir_instr_type_deref && - nir_instr_as_deref(instr)->deref_type == nir_deref_type_ptr_as_array; -} - -static bool -opt_remove_restricting_cast_alignments(nir_deref_instr *cast) -{ - assert(cast->deref_type == nir_deref_type_cast); - if (cast->cast.align_mul == 0) - return false; - - nir_deref_instr *parent = nir_src_as_deref(cast->parent); - if (parent == NULL) - return false; - - /* Don't use any default alignment for this check. We don't want to fall - * back to type alignment too early in case we find out later that we're - * somehow a child of a packed struct. - */ - uint32_t parent_mul, parent_offset; - if (!nir_get_explicit_deref_align(parent, false /* default_to_type_align */, - &parent_mul, &parent_offset)) - return false; - - /* If this cast increases the alignment, we want to keep it. - * - * There is a possibility that the larger alignment provided by this cast - * somehow disagrees with the smaller alignment further up the deref chain. - * In that case, we choose to favor the alignment closer to the actual - * memory operation which, in this case, is the cast and not its parent so - * keeping the cast alignment is the right thing to do. - */ - if (parent_mul < cast->cast.align_mul) - return false; - - /* If we've gotten here, we have a parent deref with an align_mul at least - * as large as ours so we can potentially throw away the alignment - * information on this deref. There are two cases to consider here: - * - * 1. We can chase the deref all the way back to the variable. In this - * case, we have "perfect" knowledge, modulo indirect array derefs. - * Unless we've done something wrong in our indirect/wildcard stride - * calculations, our knowledge from the deref walk is better than the - * client's. - * - * 2. We can't chase it all the way back to the variable. In this case, - * because our call to nir_get_explicit_deref_align(parent, ...) above - * above passes default_to_type_align=false, the only way we can even - * get here is if something further up the deref chain has a cast with - * an alignment which can only happen if we get an alignment from the - * client (most likely a decoration in the SPIR-V). If the client has - * provided us with two conflicting alignments in the deref chain, - * that's their fault and we can do whatever we want. - * - * In either case, we should be without our rights, at this point, to throw - * away the alignment information on this deref. However, to be "nice" to - * weird clients, we do one more check. It really shouldn't happen but - * it's possible that the parent's alignment offset disagrees with the - * cast's alignment offset. In this case, we consider the cast as - * providing more information (or at least more valid information) and keep - * it even if the align_mul from the parent is larger. - */ - assert(cast->cast.align_mul <= parent_mul); - if (parent_offset % cast->cast.align_mul != cast->cast.align_offset) - return false; - - /* If we got here, the parent has better alignment information than the - * child and we can get rid of the child alignment information. - */ - cast->cast.align_mul = 0; - cast->cast.align_offset = 0; - return true; -} - -/** - * Remove casts that just wrap other casts. - */ -static bool -opt_remove_cast_cast(nir_deref_instr *cast) -{ - nir_deref_instr *parent = nir_deref_instr_parent(cast); - if (parent == NULL || parent->deref_type != nir_deref_type_cast) - return false; - - /* Copy align info from the parent cast if needed - * - * In the case that align_mul = 0, the alignment for this cast is inhereted - * from the parent deref (if any). If we aren't careful, removing our - * parent cast from the chain may lose alignment information so we need to - * copy the parent's alignment information (if any). - * - * opt_remove_restricting_cast_alignments() above is run before this pass - * and will will have cleared our alignment (set align_mul = 0) in the case - * where the parent's alignment information is somehow superior. - */ - if (cast->cast.align_mul == 0) { - cast->cast.align_mul = parent->cast.align_mul; - cast->cast.align_offset = parent->cast.align_offset; - } - - nir_instr_rewrite_src(&cast->instr, &cast->parent, - nir_src_for_ssa(parent->parent.ssa)); - return true; -} - -/* Restrict variable modes in casts. - * - * If we know from something higher up the deref chain that the deref has a - * specific mode, we can cast to more general and back but we can never cast - * across modes. For non-cast derefs, we should only ever do anything here if - * the parent eventually comes from a cast that we restricted earlier. - */ -static bool -opt_restrict_deref_modes(nir_deref_instr *deref) -{ - if (deref->deref_type == nir_deref_type_var) { - assert(deref->modes == deref->var->data.mode); - return false; - } - - nir_deref_instr *parent = nir_src_as_deref(deref->parent); - if (parent == NULL || parent->modes == deref->modes) - return false; - - assert(parent->modes & deref->modes); - deref->modes &= parent->modes; - return true; -} - -static bool -opt_remove_sampler_cast(nir_deref_instr *cast) -{ - assert(cast->deref_type == nir_deref_type_cast); - nir_deref_instr *parent = nir_src_as_deref(cast->parent); - if (parent == NULL) - return false; - - /* Strip both types down to their non-array type and bail if there are any - * discrepancies in array lengths. - */ - const struct glsl_type *parent_type = parent->type; - const struct glsl_type *cast_type = cast->type; - while (glsl_type_is_array(parent_type) && glsl_type_is_array(cast_type)) { - if (glsl_get_length(parent_type) != glsl_get_length(cast_type)) - return false; - parent_type = glsl_get_array_element(parent_type); - cast_type = glsl_get_array_element(cast_type); - } - - if (!glsl_type_is_sampler(parent_type)) - return false; - - if (cast_type != glsl_bare_sampler_type() && - (glsl_type_is_bare_sampler(parent_type) || - cast_type != glsl_sampler_type_to_texture(parent_type))) - return false; - - /* We're a cast from a more detailed sampler type to a bare sampler or a - * texture type with the same dimensionality. - */ - nir_ssa_def_rewrite_uses(&cast->dest.ssa, - &parent->dest.ssa); - nir_instr_remove(&cast->instr); - - /* Recursively crawl the deref tree and clean up types */ - nir_deref_instr_fixup_child_types(parent); - - return true; -} - -/** - * Is this casting a struct to a contained struct. - * struct a { struct b field0 }; - * ssa_5 is structa; - * deref_cast (structb *)ssa_5 (function_temp structb); - * converts to - * deref_struct &ssa_5->field0 (function_temp structb); - * This allows subsequent copy propagation to work. - */ -static bool -opt_replace_struct_wrapper_cast(nir_builder *b, nir_deref_instr *cast) -{ - nir_deref_instr *parent = nir_src_as_deref(cast->parent); - if (!parent) - return false; - - if (cast->cast.align_mul > 0) - return false; - - if (!glsl_type_is_struct(parent->type)) - return false; - - /* Empty struct */ - if (glsl_get_length(parent->type) < 1) - return false; - - if (glsl_get_struct_field_offset(parent->type, 0) != 0) - return false; - - const struct glsl_type *field_type = glsl_get_struct_field(parent->type, 0); - if (cast->type != field_type) - return false; - - /* we can't drop the stride information */ - if (cast->cast.ptr_stride != glsl_get_explicit_stride(field_type)) - return false; - - nir_deref_instr *replace = nir_build_deref_struct(b, parent, 0); - nir_ssa_def_rewrite_uses(&cast->dest.ssa, &replace->dest.ssa); - nir_deref_instr_remove_if_unused(cast); - return true; -} - -static bool -opt_deref_cast(nir_builder *b, nir_deref_instr *cast) -{ - bool progress = false; - - progress |= opt_remove_restricting_cast_alignments(cast); - - if (opt_replace_struct_wrapper_cast(b, cast)) - return true; - - if (opt_remove_sampler_cast(cast)) - return true; - - progress |= opt_remove_cast_cast(cast); - if (!is_trivial_deref_cast(cast)) - return progress; - - /* If this deref still contains useful alignment information, we don't want - * to delete it. - */ - if (cast->cast.align_mul > 0) - return progress; - - bool trivial_array_cast = is_trivial_array_deref_cast(cast); - - assert(cast->dest.is_ssa); - assert(cast->parent.is_ssa); - - nir_foreach_use_including_if_safe(use_src, &cast->dest.ssa) { - assert(!use_src->is_if && "there cannot be if-uses"); - - /* If this isn't a trivial array cast, we can't propagate into - * ptr_as_array derefs. - */ - if (is_deref_ptr_as_array(use_src->parent_instr) && - !trivial_array_cast) - continue; - - nir_instr_rewrite_src(use_src->parent_instr, use_src, cast->parent); - progress = true; - } - - if (nir_deref_instr_remove_if_unused(cast)) - progress = true; - - return progress; -} - -static bool -opt_deref_ptr_as_array(nir_builder *b, nir_deref_instr *deref) -{ - assert(deref->deref_type == nir_deref_type_ptr_as_array); - - nir_deref_instr *parent = nir_deref_instr_parent(deref); - - if (nir_src_is_const(deref->arr.index) && - nir_src_as_int(deref->arr.index) == 0) { - /* If it's a ptr_as_array deref with an index of 0, it does nothing - * and we can just replace its uses with its parent, unless it has - * alignment information. - * - * The source of a ptr_as_array deref always has a deref_type of - * nir_deref_type_array or nir_deref_type_cast. If it's a cast, it - * may be trivial and we may be able to get rid of that too. Any - * trivial cast of trivial cast cases should be handled already by - * opt_deref_cast() above. - */ - if (parent->deref_type == nir_deref_type_cast && - parent->cast.align_mul == 0 && - is_trivial_deref_cast(parent)) - parent = nir_deref_instr_parent(parent); - nir_ssa_def_rewrite_uses(&deref->dest.ssa, - &parent->dest.ssa); - nir_instr_remove(&deref->instr); - return true; - } - - if (parent->deref_type != nir_deref_type_array && - parent->deref_type != nir_deref_type_ptr_as_array) - return false; - - assert(parent->parent.is_ssa); - assert(parent->arr.index.is_ssa); - assert(deref->arr.index.is_ssa); - - deref->arr.in_bounds &= parent->arr.in_bounds; - - nir_ssa_def *new_idx = nir_iadd(b, parent->arr.index.ssa, - deref->arr.index.ssa); - - deref->deref_type = parent->deref_type; - nir_instr_rewrite_src(&deref->instr, &deref->parent, parent->parent); - nir_instr_rewrite_src(&deref->instr, &deref->arr.index, - nir_src_for_ssa(new_idx)); - return true; -} - -static bool -is_vector_bitcast_deref(nir_deref_instr *cast, - nir_component_mask_t mask, - bool is_write) -{ - if (cast->deref_type != nir_deref_type_cast) - return false; - - /* Don't throw away useful alignment information */ - if (cast->cast.align_mul > 0) - return false; - - /* It has to be a cast of another deref */ - nir_deref_instr *parent = nir_src_as_deref(cast->parent); - if (parent == NULL) - return false; - - /* The parent has to be a vector or scalar */ - if (!glsl_type_is_vector_or_scalar(parent->type)) - return false; - - /* Don't bother with 1-bit types */ - unsigned cast_bit_size = glsl_get_bit_size(cast->type); - unsigned parent_bit_size = glsl_get_bit_size(parent->type); - if (cast_bit_size == 1 || parent_bit_size == 1) - return false; - - /* A strided vector type means it's not tightly packed */ - if (glsl_get_explicit_stride(cast->type) || - glsl_get_explicit_stride(parent->type)) - return false; - - assert(cast_bit_size > 0 && cast_bit_size % 8 == 0); - assert(parent_bit_size > 0 && parent_bit_size % 8 == 0); - unsigned bytes_used = util_last_bit(mask) * (cast_bit_size / 8); - unsigned parent_bytes = glsl_get_vector_elements(parent->type) * - (parent_bit_size / 8); - if (bytes_used > parent_bytes) - return false; - - if (is_write && !nir_component_mask_can_reinterpret(mask, cast_bit_size, - parent_bit_size)) - return false; - - return true; -} - -static nir_ssa_def * -resize_vector(nir_builder *b, nir_ssa_def *data, unsigned num_components) -{ - if (num_components == data->num_components) - return data; - - unsigned swiz[NIR_MAX_VEC_COMPONENTS] = { 0, }; - for (unsigned i = 0; i < MIN2(num_components, data->num_components); i++) - swiz[i] = i; - - return nir_swizzle(b, data, swiz, num_components); -} - -static bool -opt_load_vec_deref(nir_builder *b, nir_intrinsic_instr *load) -{ - nir_deref_instr *deref = nir_src_as_deref(load->src[0]); - nir_component_mask_t read_mask = - nir_ssa_def_components_read(&load->dest.ssa); - - /* LLVM loves take advantage of the fact that vec3s in OpenCL are - * vec4-aligned and so it can just read/write them as vec4s. This - * results in a LOT of vec4->vec3 casts on loads and stores. - */ - if (is_vector_bitcast_deref(deref, read_mask, false)) { - const unsigned old_num_comps = load->dest.ssa.num_components; - const unsigned old_bit_size = load->dest.ssa.bit_size; - - nir_deref_instr *parent = nir_src_as_deref(deref->parent); - const unsigned new_num_comps = glsl_get_vector_elements(parent->type); - const unsigned new_bit_size = glsl_get_bit_size(parent->type); - - /* Stomp it to reference the parent */ - nir_instr_rewrite_src(&load->instr, &load->src[0], - nir_src_for_ssa(&parent->dest.ssa)); - assert(load->dest.is_ssa); - load->dest.ssa.bit_size = new_bit_size; - load->dest.ssa.num_components = new_num_comps; - load->num_components = new_num_comps; - - b->cursor = nir_after_instr(&load->instr); - nir_ssa_def *data = &load->dest.ssa; - if (old_bit_size != new_bit_size) - data = nir_bitcast_vector(b, &load->dest.ssa, old_bit_size); - data = resize_vector(b, data, old_num_comps); - - nir_ssa_def_rewrite_uses_after(&load->dest.ssa, data, - data->parent_instr); - return true; - } - - return false; -} - -static bool -opt_store_vec_deref(nir_builder *b, nir_intrinsic_instr *store) -{ - nir_deref_instr *deref = nir_src_as_deref(store->src[0]); - nir_component_mask_t write_mask = nir_intrinsic_write_mask(store); - - /* LLVM loves take advantage of the fact that vec3s in OpenCL are - * vec4-aligned and so it can just read/write them as vec4s. This - * results in a LOT of vec4->vec3 casts on loads and stores. - */ - if (is_vector_bitcast_deref(deref, write_mask, true)) { - assert(store->src[1].is_ssa); - nir_ssa_def *data = store->src[1].ssa; - - const unsigned old_bit_size = data->bit_size; - - nir_deref_instr *parent = nir_src_as_deref(deref->parent); - const unsigned new_num_comps = glsl_get_vector_elements(parent->type); - const unsigned new_bit_size = glsl_get_bit_size(parent->type); - - nir_instr_rewrite_src(&store->instr, &store->src[0], - nir_src_for_ssa(&parent->dest.ssa)); - - /* Restrict things down as needed so the bitcast doesn't fail */ - data = nir_channels(b, data, (1 << util_last_bit(write_mask)) - 1); - if (old_bit_size != new_bit_size) - data = nir_bitcast_vector(b, data, new_bit_size); - data = resize_vector(b, data, new_num_comps); - nir_instr_rewrite_src(&store->instr, &store->src[1], - nir_src_for_ssa(data)); - store->num_components = new_num_comps; - - /* Adjust the write mask */ - write_mask = nir_component_mask_reinterpret(write_mask, old_bit_size, - new_bit_size); - nir_intrinsic_set_write_mask(store, write_mask); - return true; - } - - return false; -} - -static bool -opt_known_deref_mode_is(nir_builder *b, nir_intrinsic_instr *intrin) -{ - nir_variable_mode modes = nir_intrinsic_memory_modes(intrin); - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (deref == NULL) - return false; - - nir_ssa_def *deref_is = NULL; - - if (nir_deref_mode_must_be(deref, modes)) - deref_is = nir_imm_true(b); - - if (!nir_deref_mode_may_be(deref, modes)) - deref_is = nir_imm_false(b); - - if (deref_is == NULL) - return false; - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, deref_is); - nir_instr_remove(&intrin->instr); - return true; -} - -bool -nir_opt_deref_impl(nir_function_impl *impl) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - b.cursor = nir_before_instr(instr); - - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (opt_alu_of_cast(alu)) - progress = true; - break; - } - - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - - if (opt_restrict_deref_modes(deref)) - progress = true; - - switch (deref->deref_type) { - case nir_deref_type_ptr_as_array: - if (opt_deref_ptr_as_array(&b, deref)) - progress = true; - break; - - case nir_deref_type_cast: - if (opt_deref_cast(&b, deref)) - progress = true; - break; - - default: - /* Do nothing */ - break; - } - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - if (opt_load_vec_deref(&b, intrin)) - progress = true; - break; - - case nir_intrinsic_store_deref: - if (opt_store_vec_deref(&b, intrin)) - progress = true; - break; - - case nir_intrinsic_deref_mode_is: - if (opt_known_deref_mode_is(&b, intrin)) - progress = true; - break; - - default: - /* Do nothing */ - break; - } - break; - } - - default: - /* Do nothing */ - break; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_deref(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(func, shader) { - if (func->impl && nir_opt_deref_impl(func->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_deref.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_deref.h deleted file mode 100644 index 6e80a5f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_deref.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_DEREF_H -#define NIR_DEREF_H - -#include "nir.h" -#include "nir_builder.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - /** Short path so we can keep it on the stack most of the time. */ - nir_deref_instr *_short_path[7]; - - /** A null-terminated array view of a deref chain - * - * The first element of this array will be the variable dereference - * followed by every deref_instr on the path to the final one. The last - * element in the array is a NULL pointer which acts as a terminator. - */ - nir_deref_instr **path; -} nir_deref_path; - -typedef struct { - nir_deref_instr *instr; - nir_deref_path *_path; -} nir_deref_and_path; - -void nir_deref_path_init(nir_deref_path *path, - nir_deref_instr *deref, void *mem_ctx); -void nir_deref_path_finish(nir_deref_path *path); - -unsigned nir_deref_instr_get_const_offset(nir_deref_instr *deref, - glsl_type_size_align_func size_align); - -nir_ssa_def *nir_build_deref_offset(nir_builder *b, nir_deref_instr *deref, - glsl_type_size_align_func size_align); - -nir_deref_path *nir_get_deref_path(void *mem_ctx, nir_deref_and_path *deref); - -typedef enum { - nir_derefs_do_not_alias = 0, - nir_derefs_equal_bit = (1 << 0), - nir_derefs_may_alias_bit = (1 << 1), - nir_derefs_a_contains_b_bit = (1 << 2), - nir_derefs_b_contains_a_bit = (1 << 3), -} nir_deref_compare_result; - -nir_deref_compare_result nir_compare_deref_paths(nir_deref_path *a_path, nir_deref_path *b_path); -nir_deref_compare_result nir_compare_derefs(nir_deref_instr *a, nir_deref_instr *b); -nir_deref_compare_result nir_compare_derefs_and_paths(void *mem_ctx, - nir_deref_and_path *a, - nir_deref_and_path *b); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* NIR_DEREF_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_divergence_analysis.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_divergence_analysis.c deleted file mode 100644 index 15f34df..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_divergence_analysis.c +++ /dev/null @@ -1,1201 +0,0 @@ -/* - * Copyright © 2018 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#include "nir.h" - -/* This pass computes for each ssa definition if it is uniform. - * That is, the variable has the same value for all invocations - * of the group. - * - * This divergence analysis pass expects the shader to be in LCSSA-form. - * - * This algorithm implements "The Simple Divergence Analysis" from - * Diogo Sampaio, Rafael De Souza, Sylvain Collange, Fernando Magno Quintão Pereira. - * Divergence Analysis. ACM Transactions on Programming Languages and Systems (TOPLAS), - * ACM, 2013, 35 (4), pp.13:1-13:36. <10.1145/2523815>. - */ - -struct divergence_state { - const gl_shader_stage stage; - nir_shader *shader; - - /** current control flow state */ - /* True if some loop-active invocations might take a different control-flow path. - * A divergent break does not cause subsequent control-flow to be considered - * divergent because those invocations are no longer active in the loop. - * For a divergent if, both sides are considered divergent flow because - * the other side is still loop-active. */ - bool divergent_loop_cf; - /* True if a divergent continue happened since the loop header */ - bool divergent_loop_continue; - /* True if a divergent break happened since the loop header */ - bool divergent_loop_break; - - /* True if we visit the block for the fist time */ - bool first_visit; -}; - -static bool -visit_cf_list(struct exec_list *list, struct divergence_state *state); - -static bool -visit_alu(nir_alu_instr *instr) -{ - if (instr->dest.dest.ssa.divergent) - return false; - - unsigned num_src = nir_op_infos[instr->op].num_inputs; - - for (unsigned i = 0; i < num_src; i++) { - if (instr->src[i].src.ssa->divergent) { - instr->dest.dest.ssa.divergent = true; - return true; - } - } - - return false; -} - -static bool -visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr) -{ - if (!nir_intrinsic_infos[instr->intrinsic].has_dest) - return false; - - if (instr->dest.ssa.divergent) - return false; - - nir_divergence_options options = shader->options->divergence_analysis_options; - gl_shader_stage stage = shader->info.stage; - bool is_divergent = false; - switch (instr->intrinsic) { - /* Intrinsics which are always uniform */ - case nir_intrinsic_shader_clock: - case nir_intrinsic_ballot: - case nir_intrinsic_read_invocation: - case nir_intrinsic_read_first_invocation: - case nir_intrinsic_vote_any: - case nir_intrinsic_vote_all: - case nir_intrinsic_vote_feq: - case nir_intrinsic_vote_ieq: - case nir_intrinsic_load_push_constant: - case nir_intrinsic_load_work_dim: - case nir_intrinsic_load_num_workgroups: - case nir_intrinsic_load_workgroup_size: - case nir_intrinsic_load_subgroup_id: - case nir_intrinsic_load_num_subgroups: - case nir_intrinsic_load_ray_launch_size: - case nir_intrinsic_load_ray_launch_size_addr_amd: - case nir_intrinsic_load_sbt_base_amd: - case nir_intrinsic_load_subgroup_size: - case nir_intrinsic_load_subgroup_eq_mask: - case nir_intrinsic_load_subgroup_ge_mask: - case nir_intrinsic_load_subgroup_gt_mask: - case nir_intrinsic_load_subgroup_le_mask: - case nir_intrinsic_load_subgroup_lt_mask: - case nir_intrinsic_first_invocation: - case nir_intrinsic_last_invocation: - case nir_intrinsic_load_base_instance: - case nir_intrinsic_load_base_vertex: - case nir_intrinsic_load_first_vertex: - case nir_intrinsic_load_draw_id: - case nir_intrinsic_load_is_indexed_draw: - case nir_intrinsic_load_viewport_scale: - case nir_intrinsic_load_user_clip_plane: - case nir_intrinsic_load_viewport_x_scale: - case nir_intrinsic_load_viewport_y_scale: - case nir_intrinsic_load_viewport_z_scale: - case nir_intrinsic_load_viewport_offset: - case nir_intrinsic_load_viewport_x_offset: - case nir_intrinsic_load_viewport_y_offset: - case nir_intrinsic_load_viewport_z_offset: - case nir_intrinsic_load_viewport_xy_scale_and_offset: - case nir_intrinsic_load_blend_const_color_a_float: - case nir_intrinsic_load_blend_const_color_b_float: - case nir_intrinsic_load_blend_const_color_g_float: - case nir_intrinsic_load_blend_const_color_r_float: - case nir_intrinsic_load_blend_const_color_rgba: - case nir_intrinsic_load_blend_const_color_aaaa8888_unorm: - case nir_intrinsic_load_blend_const_color_rgba8888_unorm: - case nir_intrinsic_load_line_width: - case nir_intrinsic_load_aa_line_width: - case nir_intrinsic_load_xfb_address: - case nir_intrinsic_load_num_vertices: - case nir_intrinsic_load_fb_layers_v3d: - case nir_intrinsic_load_tcs_num_patches_amd: - case nir_intrinsic_load_ring_tess_factors_amd: - case nir_intrinsic_load_ring_tess_offchip_amd: - case nir_intrinsic_load_ring_tess_factors_offset_amd: - case nir_intrinsic_load_ring_tess_offchip_offset_amd: - case nir_intrinsic_load_ring_mesh_scratch_amd: - case nir_intrinsic_load_ring_mesh_scratch_offset_amd: - case nir_intrinsic_load_ring_esgs_amd: - case nir_intrinsic_load_ring_es2gs_offset_amd: - case nir_intrinsic_load_ring_task_draw_amd: - case nir_intrinsic_load_ring_task_payload_amd: - case nir_intrinsic_load_sample_positions_amd: - case nir_intrinsic_load_rasterization_samples_amd: - case nir_intrinsic_load_ring_gsvs_amd: - case nir_intrinsic_load_ring_gs2vs_offset_amd: - case nir_intrinsic_load_streamout_config_amd: - case nir_intrinsic_load_streamout_write_index_amd: - case nir_intrinsic_load_streamout_offset_amd: - case nir_intrinsic_load_task_ring_entry_amd: - case nir_intrinsic_load_ring_attr_amd: - case nir_intrinsic_load_ring_attr_offset_amd: - case nir_intrinsic_load_sample_positions_pan: - case nir_intrinsic_load_workgroup_num_input_vertices_amd: - case nir_intrinsic_load_workgroup_num_input_primitives_amd: - case nir_intrinsic_load_pipeline_stat_query_enabled_amd: - case nir_intrinsic_load_prim_gen_query_enabled_amd: - case nir_intrinsic_load_prim_xfb_query_enabled_amd: - case nir_intrinsic_load_merged_wave_info_amd: - case nir_intrinsic_load_clamp_vertex_color_amd: - case nir_intrinsic_load_cull_front_face_enabled_amd: - case nir_intrinsic_load_cull_back_face_enabled_amd: - case nir_intrinsic_load_cull_ccw_amd: - case nir_intrinsic_load_cull_small_primitives_enabled_amd: - case nir_intrinsic_load_cull_any_enabled_amd: - case nir_intrinsic_load_cull_small_prim_precision_amd: - case nir_intrinsic_load_user_data_amd: - case nir_intrinsic_load_force_vrs_rates_amd: - case nir_intrinsic_load_tess_level_inner_default: - case nir_intrinsic_load_tess_level_outer_default: - case nir_intrinsic_load_scalar_arg_amd: - case nir_intrinsic_load_smem_amd: - case nir_intrinsic_load_smem_buffer_amd: - case nir_intrinsic_load_rt_dynamic_callable_stack_base_amd: - case nir_intrinsic_load_global_const_block_intel: - case nir_intrinsic_load_reloc_const_intel: - case nir_intrinsic_load_global_block_intel: - case nir_intrinsic_load_btd_global_arg_addr_intel: - case nir_intrinsic_load_btd_local_arg_addr_intel: - case nir_intrinsic_load_mesh_inline_data_intel: - case nir_intrinsic_load_ray_num_dss_rt_stacks_intel: - case nir_intrinsic_load_lshs_vertex_stride_amd: - case nir_intrinsic_load_esgs_vertex_stride_amd: - case nir_intrinsic_load_hs_out_patch_data_offset_amd: - case nir_intrinsic_load_clip_half_line_width_amd: - case nir_intrinsic_load_num_vertices_per_primitive_amd: - case nir_intrinsic_load_streamout_buffer_amd: - case nir_intrinsic_load_ordered_id_amd: - case nir_intrinsic_load_provoking_vtx_in_prim_amd: - case nir_intrinsic_load_lds_ngg_scratch_base_amd: - case nir_intrinsic_load_lds_ngg_gs_out_vertex_base_amd: - case nir_intrinsic_load_btd_shader_type_intel: - case nir_intrinsic_load_base_workgroup_id: - case nir_intrinsic_load_alpha_reference_amd: - case nir_intrinsic_load_ssbo_uniform_block_intel: - case nir_intrinsic_load_shared_uniform_block_intel: - is_divergent = false; - break; - - /* Intrinsics with divergence depending on shader stage and hardware */ - case nir_intrinsic_load_shader_record_ptr: - is_divergent = !(options & nir_divergence_shader_record_ptr_uniform); - break; - case nir_intrinsic_load_frag_shading_rate: - is_divergent = !(options & nir_divergence_single_frag_shading_rate_per_subgroup); - break; - case nir_intrinsic_load_input: - is_divergent = instr->src[0].ssa->divergent; - if (stage == MESA_SHADER_FRAGMENT) - is_divergent |= !(options & nir_divergence_single_prim_per_subgroup); - else if (stage == MESA_SHADER_TESS_EVAL) - is_divergent |= !(options & nir_divergence_single_patch_per_tes_subgroup); - else if (stage != MESA_SHADER_MESH) - is_divergent = true; - break; - case nir_intrinsic_load_per_vertex_input: - is_divergent = instr->src[0].ssa->divergent || - instr->src[1].ssa->divergent; - if (stage == MESA_SHADER_TESS_CTRL) - is_divergent |= !(options & nir_divergence_single_patch_per_tcs_subgroup); - if (stage == MESA_SHADER_TESS_EVAL) - is_divergent |= !(options & nir_divergence_single_patch_per_tes_subgroup); - else - is_divergent = true; - break; - case nir_intrinsic_load_input_vertex: - is_divergent = instr->src[1].ssa->divergent; - assert(stage == MESA_SHADER_FRAGMENT); - is_divergent |= !(options & nir_divergence_single_prim_per_subgroup); - break; - case nir_intrinsic_load_output: - is_divergent = instr->src[0].ssa->divergent; - switch (stage) { - case MESA_SHADER_TESS_CTRL: - is_divergent |= !(options & nir_divergence_single_patch_per_tcs_subgroup); - break; - case MESA_SHADER_FRAGMENT: - is_divergent = true; - break; - case MESA_SHADER_TASK: - case MESA_SHADER_MESH: - /* Divergent if src[0] is, so nothing else to do. */ - break; - default: - unreachable("Invalid stage for load_output"); - } - break; - case nir_intrinsic_load_per_vertex_output: - assert(stage == MESA_SHADER_TESS_CTRL || stage == MESA_SHADER_MESH); - is_divergent = instr->src[0].ssa->divergent || - instr->src[1].ssa->divergent || - (stage == MESA_SHADER_TESS_CTRL && - !(options & nir_divergence_single_patch_per_tcs_subgroup)); - break; - case nir_intrinsic_load_per_primitive_output: - assert(stage == MESA_SHADER_MESH); - is_divergent = instr->src[0].ssa->divergent || - instr->src[1].ssa->divergent; - break; - case nir_intrinsic_load_layer_id: - case nir_intrinsic_load_front_face: - assert(stage == MESA_SHADER_FRAGMENT); - is_divergent = !(options & nir_divergence_single_prim_per_subgroup); - break; - case nir_intrinsic_load_view_index: - assert(stage != MESA_SHADER_COMPUTE && stage != MESA_SHADER_KERNEL); - if (options & nir_divergence_view_index_uniform) - is_divergent = false; - else if (stage == MESA_SHADER_FRAGMENT) - is_divergent = !(options & nir_divergence_single_prim_per_subgroup); - break; - case nir_intrinsic_load_fs_input_interp_deltas: - assert(stage == MESA_SHADER_FRAGMENT); - is_divergent = instr->src[0].ssa->divergent; - is_divergent |= !(options & nir_divergence_single_prim_per_subgroup); - break; - case nir_intrinsic_load_primitive_id: - if (stage == MESA_SHADER_FRAGMENT) - is_divergent = !(options & nir_divergence_single_prim_per_subgroup); - else if (stage == MESA_SHADER_TESS_CTRL) - is_divergent = !(options & nir_divergence_single_patch_per_tcs_subgroup); - else if (stage == MESA_SHADER_TESS_EVAL) - is_divergent = !(options & nir_divergence_single_patch_per_tes_subgroup); - else if (stage == MESA_SHADER_GEOMETRY || stage == MESA_SHADER_VERTEX) - is_divergent = true; - else if (stage == MESA_SHADER_ANY_HIT || - stage == MESA_SHADER_CLOSEST_HIT || - stage == MESA_SHADER_INTERSECTION) - is_divergent = true; - else - unreachable("Invalid stage for load_primitive_id"); - break; - case nir_intrinsic_load_tess_level_inner: - case nir_intrinsic_load_tess_level_outer: - if (stage == MESA_SHADER_TESS_CTRL) - is_divergent = !(options & nir_divergence_single_patch_per_tcs_subgroup); - else if (stage == MESA_SHADER_TESS_EVAL) - is_divergent = !(options & nir_divergence_single_patch_per_tes_subgroup); - else - unreachable("Invalid stage for load_primitive_tess_level_*"); - break; - case nir_intrinsic_load_patch_vertices_in: - if (stage == MESA_SHADER_TESS_EVAL) - is_divergent = !(options & nir_divergence_single_patch_per_tes_subgroup); - else - assert(stage == MESA_SHADER_TESS_CTRL); - break; - - case nir_intrinsic_load_workgroup_index: - case nir_intrinsic_load_workgroup_id: - case nir_intrinsic_load_workgroup_id_zero_base: - assert(gl_shader_stage_uses_workgroup(stage)); - if (stage == MESA_SHADER_COMPUTE) - is_divergent |= (options & nir_divergence_multiple_workgroup_per_compute_subgroup); - break; - - /* Clustered reductions are uniform if cluster_size == subgroup_size or - * the source is uniform and the operation is invariant. - * Inclusive scans are uniform if - * the source is uniform and the operation is invariant - */ - case nir_intrinsic_reduce: - if (nir_intrinsic_cluster_size(instr) == 0) - return false; - - case nir_intrinsic_inclusive_scan: { - nir_op op = nir_intrinsic_reduction_op(instr); - is_divergent = instr->src[0].ssa->divergent; - if (op != nir_op_umin && op != nir_op_imin && op != nir_op_fmin && - op != nir_op_umax && op != nir_op_imax && op != nir_op_fmax && - op != nir_op_iand && op != nir_op_ior) - is_divergent = true; - break; - } - - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_ssbo: - is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) || - instr->src[1].ssa->divergent; - break; - - case nir_intrinsic_get_ssbo_size: - case nir_intrinsic_deref_buffer_array_length: - is_divergent = instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM); - break; - - case nir_intrinsic_image_samples_identical: - case nir_intrinsic_image_deref_samples_identical: - case nir_intrinsic_bindless_image_samples_identical: - case nir_intrinsic_image_fragment_mask_load_amd: - case nir_intrinsic_image_deref_fragment_mask_load_amd: - case nir_intrinsic_bindless_image_fragment_mask_load_amd: - is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) || - instr->src[1].ssa->divergent; - break; - - case nir_intrinsic_image_load: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_image_sparse_load: - case nir_intrinsic_image_deref_sparse_load: - case nir_intrinsic_bindless_image_sparse_load: - is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) || - instr->src[1].ssa->divergent || instr->src[2].ssa->divergent || instr->src[3].ssa->divergent; - break; - - case nir_intrinsic_optimization_barrier_vgpr_amd: - is_divergent = instr->src[0].ssa->divergent; - break; - - /* Intrinsics with divergence depending on sources */ - case nir_intrinsic_ballot_bitfield_extract: - case nir_intrinsic_ballot_find_lsb: - case nir_intrinsic_ballot_find_msb: - case nir_intrinsic_ballot_bit_count_reduce: - case nir_intrinsic_rotate: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - case nir_intrinsic_load_deref: - case nir_intrinsic_load_shared: - case nir_intrinsic_load_shared2_amd: - case nir_intrinsic_load_global: - case nir_intrinsic_load_global_2x32: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_global_amd: - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_constant: - case nir_intrinsic_load_sample_pos_from_id: - case nir_intrinsic_load_kernel_input: - case nir_intrinsic_load_task_payload: - case nir_intrinsic_load_buffer_amd: - case nir_intrinsic_load_typed_buffer_amd: - case nir_intrinsic_image_samples: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_bindless_image_samples: - case nir_intrinsic_image_size: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_bindless_image_size: - case nir_intrinsic_image_descriptor_amd: - case nir_intrinsic_image_deref_descriptor_amd: - case nir_intrinsic_bindless_image_descriptor_amd: - case nir_intrinsic_copy_deref: - case nir_intrinsic_vulkan_resource_index: - case nir_intrinsic_vulkan_resource_reindex: - case nir_intrinsic_load_vulkan_descriptor: - case nir_intrinsic_atomic_counter_read: - case nir_intrinsic_atomic_counter_read_deref: - case nir_intrinsic_quad_swizzle_amd: - case nir_intrinsic_masked_swizzle_amd: - case nir_intrinsic_is_sparse_texels_resident: - case nir_intrinsic_sparse_residency_code_and: - case nir_intrinsic_bvh64_intersect_ray_amd: - case nir_intrinsic_image_deref_load_param_intel: - case nir_intrinsic_image_load_raw_intel: - case nir_intrinsic_get_ubo_size: - case nir_intrinsic_load_ssbo_address: - case nir_intrinsic_load_desc_set_address_intel: - case nir_intrinsic_load_global_constant_bounded: - case nir_intrinsic_load_global_constant_offset: { - unsigned num_srcs = nir_intrinsic_infos[instr->intrinsic].num_srcs; - for (unsigned i = 0; i < num_srcs; i++) { - if (instr->src[i].ssa->divergent) { - is_divergent = true; - break; - } - } - break; - } - - case nir_intrinsic_shuffle: - is_divergent = instr->src[0].ssa->divergent && - instr->src[1].ssa->divergent; - break; - - /* Intrinsics which are always divergent */ - case nir_intrinsic_load_color0: - case nir_intrinsic_load_color1: - case nir_intrinsic_load_param: - case nir_intrinsic_load_sample_id: - case nir_intrinsic_load_sample_id_no_per_sample: - case nir_intrinsic_load_sample_mask_in: - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_load_point_coord_maybe_flipped: - case nir_intrinsic_load_barycentric_pixel: - case nir_intrinsic_load_barycentric_centroid: - case nir_intrinsic_load_barycentric_sample: - case nir_intrinsic_load_barycentric_model: - case nir_intrinsic_load_barycentric_at_sample: - case nir_intrinsic_load_barycentric_at_offset: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_vertex: - case nir_intrinsic_load_tess_coord: - case nir_intrinsic_load_point_coord: - case nir_intrinsic_load_line_coord: - case nir_intrinsic_load_frag_coord: - case nir_intrinsic_load_fully_covered: - case nir_intrinsic_load_sample_pos: - case nir_intrinsic_load_sample_pos_or_center: - case nir_intrinsic_load_vertex_id_zero_base: - case nir_intrinsic_load_vertex_id: - case nir_intrinsic_load_instance_id: - case nir_intrinsic_load_invocation_id: - case nir_intrinsic_load_local_invocation_id: - case nir_intrinsic_load_local_invocation_index: - case nir_intrinsic_load_global_invocation_id: - case nir_intrinsic_load_global_invocation_id_zero_base: - case nir_intrinsic_load_global_invocation_index: - case nir_intrinsic_load_subgroup_invocation: - case nir_intrinsic_load_helper_invocation: - case nir_intrinsic_is_helper_invocation: - case nir_intrinsic_load_scratch: - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_fcomp_swap: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_atomic_inc_wrap: - case nir_intrinsic_image_deref_atomic_dec_wrap: - case nir_intrinsic_image_atomic_add: - case nir_intrinsic_image_atomic_imin: - case nir_intrinsic_image_atomic_umin: - case nir_intrinsic_image_atomic_imax: - case nir_intrinsic_image_atomic_umax: - case nir_intrinsic_image_atomic_and: - case nir_intrinsic_image_atomic_or: - case nir_intrinsic_image_atomic_xor: - case nir_intrinsic_image_atomic_exchange: - case nir_intrinsic_image_atomic_comp_swap: - case nir_intrinsic_image_atomic_fadd: - case nir_intrinsic_image_atomic_fmin: - case nir_intrinsic_image_atomic_fmax: - case nir_intrinsic_image_atomic_inc_wrap: - case nir_intrinsic_image_atomic_dec_wrap: - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_fmax: - case nir_intrinsic_bindless_image_atomic_inc_wrap: - case nir_intrinsic_bindless_image_atomic_dec_wrap: - case nir_intrinsic_shared_atomic_add: - case nir_intrinsic_shared_atomic_imin: - case nir_intrinsic_shared_atomic_umin: - case nir_intrinsic_shared_atomic_imax: - case nir_intrinsic_shared_atomic_umax: - case nir_intrinsic_shared_atomic_and: - case nir_intrinsic_shared_atomic_or: - case nir_intrinsic_shared_atomic_xor: - case nir_intrinsic_shared_atomic_exchange: - case nir_intrinsic_shared_atomic_comp_swap: - case nir_intrinsic_shared_atomic_fadd: - case nir_intrinsic_shared_atomic_fmin: - case nir_intrinsic_shared_atomic_fmax: - case nir_intrinsic_shared_atomic_fcomp_swap: - case nir_intrinsic_task_payload_atomic_add: - case nir_intrinsic_task_payload_atomic_imin: - case nir_intrinsic_task_payload_atomic_umin: - case nir_intrinsic_task_payload_atomic_imax: - case nir_intrinsic_task_payload_atomic_umax: - case nir_intrinsic_task_payload_atomic_and: - case nir_intrinsic_task_payload_atomic_or: - case nir_intrinsic_task_payload_atomic_xor: - case nir_intrinsic_task_payload_atomic_exchange: - case nir_intrinsic_task_payload_atomic_comp_swap: - case nir_intrinsic_task_payload_atomic_fadd: - case nir_intrinsic_task_payload_atomic_fmin: - case nir_intrinsic_task_payload_atomic_fmax: - case nir_intrinsic_task_payload_atomic_fcomp_swap: - case nir_intrinsic_global_atomic_add: - case nir_intrinsic_global_atomic_imin: - case nir_intrinsic_global_atomic_umin: - case nir_intrinsic_global_atomic_imax: - case nir_intrinsic_global_atomic_umax: - case nir_intrinsic_global_atomic_and: - case nir_intrinsic_global_atomic_or: - case nir_intrinsic_global_atomic_xor: - case nir_intrinsic_global_atomic_exchange: - case nir_intrinsic_global_atomic_comp_swap: - case nir_intrinsic_global_atomic_fadd: - case nir_intrinsic_global_atomic_fmin: - case nir_intrinsic_global_atomic_fmax: - case nir_intrinsic_global_atomic_fcomp_swap: - case nir_intrinsic_global_atomic_add_amd: - case nir_intrinsic_global_atomic_imin_amd: - case nir_intrinsic_global_atomic_umin_amd: - case nir_intrinsic_global_atomic_imax_amd: - case nir_intrinsic_global_atomic_umax_amd: - case nir_intrinsic_global_atomic_and_amd: - case nir_intrinsic_global_atomic_or_amd: - case nir_intrinsic_global_atomic_xor_amd: - case nir_intrinsic_global_atomic_exchange_amd: - case nir_intrinsic_global_atomic_comp_swap_amd: - case nir_intrinsic_global_atomic_fadd_amd: - case nir_intrinsic_global_atomic_fmin_amd: - case nir_intrinsic_global_atomic_fmax_amd: - case nir_intrinsic_global_atomic_fcomp_swap_amd: - case nir_intrinsic_global_atomic_add_2x32: - case nir_intrinsic_global_atomic_imin_2x32: - case nir_intrinsic_global_atomic_umin_2x32: - case nir_intrinsic_global_atomic_imax_2x32: - case nir_intrinsic_global_atomic_umax_2x32: - case nir_intrinsic_global_atomic_and_2x32: - case nir_intrinsic_global_atomic_or_2x32: - case nir_intrinsic_global_atomic_xor_2x32: - case nir_intrinsic_global_atomic_exchange_2x32: - case nir_intrinsic_global_atomic_comp_swap_2x32: - case nir_intrinsic_global_atomic_fadd_2x32: - case nir_intrinsic_global_atomic_fmin_2x32: - case nir_intrinsic_global_atomic_fmax_2x32: - case nir_intrinsic_global_atomic_fcomp_swap_2x32: - case nir_intrinsic_atomic_counter_add: - case nir_intrinsic_atomic_counter_min: - case nir_intrinsic_atomic_counter_max: - case nir_intrinsic_atomic_counter_and: - case nir_intrinsic_atomic_counter_or: - case nir_intrinsic_atomic_counter_xor: - case nir_intrinsic_atomic_counter_inc: - case nir_intrinsic_atomic_counter_pre_dec: - case nir_intrinsic_atomic_counter_post_dec: - case nir_intrinsic_atomic_counter_exchange: - case nir_intrinsic_atomic_counter_comp_swap: - case nir_intrinsic_atomic_counter_add_deref: - case nir_intrinsic_atomic_counter_min_deref: - case nir_intrinsic_atomic_counter_max_deref: - case nir_intrinsic_atomic_counter_and_deref: - case nir_intrinsic_atomic_counter_or_deref: - case nir_intrinsic_atomic_counter_xor_deref: - case nir_intrinsic_atomic_counter_inc_deref: - case nir_intrinsic_atomic_counter_pre_dec_deref: - case nir_intrinsic_atomic_counter_post_dec_deref: - case nir_intrinsic_atomic_counter_exchange_deref: - case nir_intrinsic_atomic_counter_comp_swap_deref: - case nir_intrinsic_exclusive_scan: - case nir_intrinsic_ballot_bit_count_exclusive: - case nir_intrinsic_ballot_bit_count_inclusive: - case nir_intrinsic_write_invocation_amd: - case nir_intrinsic_mbcnt_amd: - case nir_intrinsic_lane_permute_16_amd: - case nir_intrinsic_elect: - case nir_intrinsic_load_tlb_color_v3d: - case nir_intrinsic_load_tess_rel_patch_id_amd: - case nir_intrinsic_load_gs_vertex_offset_amd: - case nir_intrinsic_is_subgroup_invocation_lt_amd: - case nir_intrinsic_load_packed_passthrough_primitive_amd: - case nir_intrinsic_load_initial_edgeflags_amd: - case nir_intrinsic_gds_atomic_add_amd: - case nir_intrinsic_buffer_atomic_add_amd: - case nir_intrinsic_load_rt_arg_scratch_offset_amd: - case nir_intrinsic_load_intersection_opaque_amd: - case nir_intrinsic_load_vector_arg_amd: - case nir_intrinsic_load_btd_stack_id_intel: - case nir_intrinsic_load_topology_id_intel: - case nir_intrinsic_load_scratch_base_ptr: - case nir_intrinsic_ordered_xfb_counter_add_amd: - case nir_intrinsic_xfb_counter_sub_amd: - case nir_intrinsic_load_stack: - case nir_intrinsic_load_ray_launch_id: - case nir_intrinsic_load_ray_instance_custom_index: - case nir_intrinsic_load_ray_geometry_index: - case nir_intrinsic_load_ray_world_direction: - case nir_intrinsic_load_ray_world_origin: - case nir_intrinsic_load_ray_object_origin: - case nir_intrinsic_load_ray_object_direction: - case nir_intrinsic_load_ray_t_min: - case nir_intrinsic_load_ray_t_max: - case nir_intrinsic_load_ray_object_to_world: - case nir_intrinsic_load_ray_world_to_object: - case nir_intrinsic_load_ray_hit_kind: - case nir_intrinsic_load_ray_flags: - case nir_intrinsic_load_cull_mask: - case nir_intrinsic_report_ray_intersection: - case nir_intrinsic_rq_proceed: - case nir_intrinsic_rq_load: - is_divergent = true; - break; - - default: -#ifdef NDEBUG - is_divergent = true; - break; -#else - nir_print_instr(&instr->instr, stderr); - unreachable("\nNIR divergence analysis: Unhandled intrinsic."); -#endif - } - - instr->dest.ssa.divergent = is_divergent; - return is_divergent; -} - -static bool -visit_tex(nir_tex_instr *instr) -{ - if (instr->dest.ssa.divergent) - return false; - - bool is_divergent = false; - - for (unsigned i = 0; i < instr->num_srcs; i++) { - switch (instr->src[i].src_type) { - case nir_tex_src_sampler_deref: - case nir_tex_src_sampler_handle: - case nir_tex_src_sampler_offset: - is_divergent |= instr->src[i].src.ssa->divergent && - instr->sampler_non_uniform; - break; - case nir_tex_src_texture_deref: - case nir_tex_src_texture_handle: - case nir_tex_src_texture_offset: - is_divergent |= instr->src[i].src.ssa->divergent && - instr->texture_non_uniform; - break; - default: - is_divergent |= instr->src[i].src.ssa->divergent; - break; - } - } - - instr->dest.ssa.divergent = is_divergent; - return is_divergent; -} - -static bool -visit_load_const(nir_load_const_instr *instr) -{ - return false; -} - -static bool -visit_ssa_undef(nir_ssa_undef_instr *instr) -{ - return false; -} - -static bool -nir_variable_mode_is_uniform(nir_variable_mode mode) { - switch (mode) { - case nir_var_uniform: - case nir_var_mem_ubo: - case nir_var_mem_ssbo: - case nir_var_mem_shared: - case nir_var_mem_task_payload: - case nir_var_mem_global: - case nir_var_image: - return true; - default: - return false; - } -} - -static bool -nir_variable_is_uniform(nir_shader *shader, nir_variable *var) -{ - if (nir_variable_mode_is_uniform(var->data.mode)) - return true; - - nir_divergence_options options = shader->options->divergence_analysis_options; - gl_shader_stage stage = shader->info.stage; - - if (stage == MESA_SHADER_FRAGMENT && - (options & nir_divergence_single_prim_per_subgroup) && - var->data.mode == nir_var_shader_in && - var->data.interpolation == INTERP_MODE_FLAT) - return true; - - if (stage == MESA_SHADER_TESS_CTRL && - (options & nir_divergence_single_patch_per_tcs_subgroup) && - var->data.mode == nir_var_shader_out && var->data.patch) - return true; - - if (stage == MESA_SHADER_TESS_EVAL && - (options & nir_divergence_single_patch_per_tes_subgroup) && - var->data.mode == nir_var_shader_in && var->data.patch) - return true; - - return false; -} - -static bool -visit_deref(nir_shader *shader, nir_deref_instr *deref) -{ - if (deref->dest.ssa.divergent) - return false; - - bool is_divergent = false; - switch (deref->deref_type) { - case nir_deref_type_var: - is_divergent = !nir_variable_is_uniform(shader, deref->var); - break; - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: - is_divergent = deref->arr.index.ssa->divergent; - - case nir_deref_type_struct: - case nir_deref_type_array_wildcard: - is_divergent |= deref->parent.ssa->divergent; - break; - case nir_deref_type_cast: - is_divergent = !nir_variable_mode_is_uniform(deref->var->data.mode) || - deref->parent.ssa->divergent; - break; - } - - deref->dest.ssa.divergent = is_divergent; - return is_divergent; -} - -static bool -visit_jump(nir_jump_instr *jump, struct divergence_state *state) -{ - switch (jump->type) { - case nir_jump_continue: - if (state->divergent_loop_continue) - return false; - if (state->divergent_loop_cf) - state->divergent_loop_continue = true; - return state->divergent_loop_continue; - case nir_jump_break: - if (state->divergent_loop_break) - return false; - if (state->divergent_loop_cf) - state->divergent_loop_break = true; - return state->divergent_loop_break; - case nir_jump_halt: - /* This totally kills invocations so it doesn't add divergence */ - break; - case nir_jump_return: - unreachable("NIR divergence analysis: Unsupported return instruction."); - break; - case nir_jump_goto: - case nir_jump_goto_if: - unreachable("NIR divergence analysis: Unsupported goto_if instruction."); - break; - } - return false; -} - -static bool -set_ssa_def_not_divergent(nir_ssa_def *def, UNUSED void *_state) -{ - def->divergent = false; - return true; -} - -static bool -update_instr_divergence(nir_shader *shader, nir_instr *instr) -{ - switch (instr->type) { - case nir_instr_type_alu: - return visit_alu(nir_instr_as_alu(instr)); - case nir_instr_type_intrinsic: - return visit_intrinsic(shader, nir_instr_as_intrinsic(instr)); - case nir_instr_type_tex: - return visit_tex(nir_instr_as_tex(instr)); - case nir_instr_type_load_const: - return visit_load_const(nir_instr_as_load_const(instr)); - case nir_instr_type_ssa_undef: - return visit_ssa_undef(nir_instr_as_ssa_undef(instr)); - case nir_instr_type_deref: - return visit_deref(shader, nir_instr_as_deref(instr)); - case nir_instr_type_jump: - case nir_instr_type_phi: - case nir_instr_type_call: - case nir_instr_type_parallel_copy: - default: - unreachable("NIR divergence analysis: Unsupported instruction type."); - } -} - -static bool -visit_block(nir_block *block, struct divergence_state *state) -{ - bool has_changed = false; - - nir_foreach_instr(instr, block) { - /* phis are handled when processing the branches */ - if (instr->type == nir_instr_type_phi) - continue; - - if (state->first_visit) - nir_foreach_ssa_def(instr, set_ssa_def_not_divergent, NULL); - - if (instr->type == nir_instr_type_jump) - has_changed |= visit_jump(nir_instr_as_jump(instr), state); - else - has_changed |= update_instr_divergence(state->shader, instr); - } - - return has_changed; -} - -/* There are 3 types of phi instructions: - * (1) gamma: represent the joining point of different paths - * created by an “if-then-else” branch. - * The resulting value is divergent if the branch condition - * or any of the source values is divergent. */ -static bool -visit_if_merge_phi(nir_phi_instr *phi, bool if_cond_divergent) -{ - if (phi->dest.ssa.divergent) - return false; - - unsigned defined_srcs = 0; - nir_foreach_phi_src(src, phi) { - /* if any source value is divergent, the resulting value is divergent */ - if (src->src.ssa->divergent) { - phi->dest.ssa.divergent = true; - return true; - } - if (src->src.ssa->parent_instr->type != nir_instr_type_ssa_undef) { - defined_srcs++; - } - } - - /* if the condition is divergent and two sources defined, the definition is divergent */ - if (defined_srcs > 1 && if_cond_divergent) { - phi->dest.ssa.divergent = true; - return true; - } - - return false; -} - -/* There are 3 types of phi instructions: - * (2) mu: which only exist at loop headers, - * merge initial and loop-carried values. - * The resulting value is divergent if any source value - * is divergent or a divergent loop continue condition - * is associated with a different ssa-def. */ -static bool -visit_loop_header_phi(nir_phi_instr *phi, nir_block *preheader, bool divergent_continue) -{ - if (phi->dest.ssa.divergent) - return false; - - nir_ssa_def* same = NULL; - nir_foreach_phi_src(src, phi) { - /* if any source value is divergent, the resulting value is divergent */ - if (src->src.ssa->divergent) { - phi->dest.ssa.divergent = true; - return true; - } - /* if this loop is uniform, we're done here */ - if (!divergent_continue) - continue; - /* skip the loop preheader */ - if (src->pred == preheader) - continue; - /* skip undef values */ - if (nir_src_is_undef(src->src)) - continue; - - /* check if all loop-carried values are from the same ssa-def */ - if (!same) - same = src->src.ssa; - else if (same != src->src.ssa) { - phi->dest.ssa.divergent = true; - return true; - } - } - - return false; -} - -/* There are 3 types of phi instructions: - * (3) eta: represent values that leave a loop. - * The resulting value is divergent if the source value is divergent - * or any loop exit condition is divergent for a value which is - * not loop-invariant. - * (note: there should be no phi for loop-invariant variables.) */ -static bool -visit_loop_exit_phi(nir_phi_instr *phi, bool divergent_break) -{ - if (phi->dest.ssa.divergent) - return false; - - if (divergent_break) { - phi->dest.ssa.divergent = true; - return true; - } - - /* if any source value is divergent, the resulting value is divergent */ - nir_foreach_phi_src(src, phi) { - if (src->src.ssa->divergent) { - phi->dest.ssa.divergent = true; - return true; - } - } - - return false; -} - -static bool -visit_if(nir_if *if_stmt, struct divergence_state *state) -{ - bool progress = false; - - struct divergence_state then_state = *state; - then_state.divergent_loop_cf |= if_stmt->condition.ssa->divergent; - progress |= visit_cf_list(&if_stmt->then_list, &then_state); - - struct divergence_state else_state = *state; - else_state.divergent_loop_cf |= if_stmt->condition.ssa->divergent; - progress |= visit_cf_list(&if_stmt->else_list, &else_state); - - /* handle phis after the IF */ - nir_foreach_instr(instr, nir_cf_node_cf_tree_next(&if_stmt->cf_node)) { - if (instr->type != nir_instr_type_phi) - break; - - if (state->first_visit) - nir_instr_as_phi(instr)->dest.ssa.divergent = false; - progress |= visit_if_merge_phi(nir_instr_as_phi(instr), - if_stmt->condition.ssa->divergent); - } - - /* join loop divergence information from both branch legs */ - state->divergent_loop_continue |= then_state.divergent_loop_continue || - else_state.divergent_loop_continue; - state->divergent_loop_break |= then_state.divergent_loop_break || - else_state.divergent_loop_break; - - /* A divergent continue makes succeeding loop CF divergent: - * not all loop-active invocations participate in the remaining loop-body - * which means that a following break might be taken by some invocations, only */ - state->divergent_loop_cf |= state->divergent_loop_continue; - - return progress; -} - -static bool -visit_loop(nir_loop *loop, struct divergence_state *state) -{ - assert(!nir_loop_has_continue_construct(loop)); - bool progress = false; - nir_block *loop_header = nir_loop_first_block(loop); - nir_block *loop_preheader = nir_block_cf_tree_prev(loop_header); - - /* handle loop header phis first: we have no knowledge yet about - * the loop's control flow or any loop-carried sources. */ - nir_foreach_instr(instr, loop_header) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - if (!state->first_visit && phi->dest.ssa.divergent) - continue; - - nir_foreach_phi_src(src, phi) { - if (src->pred == loop_preheader) { - phi->dest.ssa.divergent = src->src.ssa->divergent; - break; - } - } - progress |= phi->dest.ssa.divergent; - } - - /* setup loop state */ - struct divergence_state loop_state = *state; - loop_state.divergent_loop_cf = false; - loop_state.divergent_loop_continue = false; - loop_state.divergent_loop_break = false; - - /* process loop body until no further changes are made */ - bool repeat; - do { - progress |= visit_cf_list(&loop->body, &loop_state); - repeat = false; - - /* revisit loop header phis to see if something has changed */ - nir_foreach_instr(instr, loop_header) { - if (instr->type != nir_instr_type_phi) - break; - - repeat |= visit_loop_header_phi(nir_instr_as_phi(instr), - loop_preheader, - loop_state.divergent_loop_continue); - } - - loop_state.divergent_loop_cf = false; - loop_state.first_visit = false; - } while (repeat); - - /* handle phis after the loop */ - nir_foreach_instr(instr, nir_cf_node_cf_tree_next(&loop->cf_node)) { - if (instr->type != nir_instr_type_phi) - break; - - if (state->first_visit) - nir_instr_as_phi(instr)->dest.ssa.divergent = false; - progress |= visit_loop_exit_phi(nir_instr_as_phi(instr), - loop_state.divergent_loop_break); - } - - loop->divergent = (loop_state.divergent_loop_break || loop_state.divergent_loop_continue); - - return progress; -} - -static bool -visit_cf_list(struct exec_list *list, struct divergence_state *state) -{ - bool has_changed = false; - - foreach_list_typed(nir_cf_node, node, node, list) { - switch (node->type) { - case nir_cf_node_block: - has_changed |= visit_block(nir_cf_node_as_block(node), state); - break; - case nir_cf_node_if: - has_changed |= visit_if(nir_cf_node_as_if(node), state); - break; - case nir_cf_node_loop: - has_changed |= visit_loop(nir_cf_node_as_loop(node), state); - break; - case nir_cf_node_function: - unreachable("NIR divergence analysis: Unsupported cf_node type."); - } - } - - return has_changed; -} - -void -nir_divergence_analysis(nir_shader *shader) -{ - shader->info.divergence_analysis_run = true; - - struct divergence_state state = { - .stage = shader->info.stage, - .shader = shader, - .divergent_loop_cf = false, - .divergent_loop_continue = false, - .divergent_loop_break = false, - .first_visit = true, - }; - - visit_cf_list(&nir_shader_get_entrypoint(shader)->body, &state); -} - -bool nir_update_instr_divergence(nir_shader *shader, nir_instr *instr) -{ - nir_foreach_ssa_def(instr, set_ssa_def_not_divergent, NULL); - - if (instr->type == nir_instr_type_phi) { - nir_cf_node *prev = nir_cf_node_prev(&instr->block->cf_node); - /* can only update gamma/if phis */ - if (!prev || prev->type != nir_cf_node_if) - return false; - - nir_if *nif = nir_cf_node_as_if(prev); - - visit_if_merge_phi(nir_instr_as_phi(instr), nir_src_is_divergent(nif->condition)); - return true; - } - - update_instr_divergence(shader, instr); - return true; -} - - -bool -nir_has_divergent_loop(nir_shader *shader) -{ - bool divergent_loop = false; - nir_function_impl *func = nir_shader_get_entrypoint(shader); - - foreach_list_typed(nir_cf_node, node, node, &func->body) { - if (node->type == nir_cf_node_loop && nir_cf_node_as_loop(node)->divergent) { - divergent_loop = true; - break; - } - } - - return divergent_loop; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_dominance.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_dominance.c deleted file mode 100644 index 0495809..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_dominance.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" - -/* - * Implements the algorithms for computing the dominance tree and the - * dominance frontier from "A Simple, Fast Dominance Algorithm" by Cooper, - * Harvey, and Kennedy. - */ - -static bool -init_block(nir_block *block, nir_function_impl *impl) -{ - if (block == nir_start_block(impl)) - block->imm_dom = block; - else - block->imm_dom = NULL; - block->num_dom_children = 0; - - /* See nir_block_dominates */ - block->dom_pre_index = UINT32_MAX; - block->dom_post_index = 0; - - _mesa_set_clear(block->dom_frontier, NULL); - - return true; -} - -static nir_block * -intersect(nir_block *b1, nir_block *b2) -{ - while (b1 != b2) { - /* - * Note, the comparisons here are the opposite of what the paper says - * because we index blocks from beginning -> end (i.e. reverse - * post-order) instead of post-order like they assume. - */ - while (b1->index > b2->index) - b1 = b1->imm_dom; - while (b2->index > b1->index) - b2 = b2->imm_dom; - } - - return b1; -} - -static bool -calc_dominance(nir_block *block) -{ - nir_block *new_idom = NULL; - set_foreach(block->predecessors, entry) { - nir_block *pred = (nir_block *) entry->key; - - if (pred->imm_dom) { - if (new_idom) - new_idom = intersect(pred, new_idom); - else - new_idom = pred; - } - } - - if (block->imm_dom != new_idom) { - block->imm_dom = new_idom; - return true; - } - - return false; -} - -static bool -calc_dom_frontier(nir_block *block) -{ - if (block->predecessors->entries > 1) { - set_foreach(block->predecessors, entry) { - nir_block *runner = (nir_block *) entry->key; - - /* Skip unreachable predecessors */ - if (runner->imm_dom == NULL) - continue; - - while (runner != block->imm_dom) { - _mesa_set_add(runner->dom_frontier, block); - runner = runner->imm_dom; - } - } - } - - return true; -} - -/* - * Compute each node's children in the dominance tree from the immediate - * dominator information. We do this in three stages: - * - * 1. Calculate the number of children each node has - * 2. Allocate arrays, setting the number of children to 0 again - * 3. For each node, add itself to its parent's list of children, using - * num_dom_children as an index - at the end of this step, num_dom_children - * for each node will be the same as it was at the end of step #1. - */ - -static void -calc_dom_children(nir_function_impl* impl) -{ - void *mem_ctx = ralloc_parent(impl); - - nir_foreach_block_unstructured(block, impl) { - if (block->imm_dom) - block->imm_dom->num_dom_children++; - } - - nir_foreach_block_unstructured(block, impl) { - block->dom_children = ralloc_array(mem_ctx, nir_block *, - block->num_dom_children); - block->num_dom_children = 0; - } - - nir_foreach_block_unstructured(block, impl) { - if (block->imm_dom) { - block->imm_dom->dom_children[block->imm_dom->num_dom_children++] - = block; - } - } -} - -static void -calc_dfs_indicies(nir_block *block, uint32_t *index) -{ - /* UINT32_MAX has special meaning. See nir_block_dominates. */ - assert(*index < UINT32_MAX - 2); - - block->dom_pre_index = (*index)++; - - for (unsigned i = 0; i < block->num_dom_children; i++) - calc_dfs_indicies(block->dom_children[i], index); - - block->dom_post_index = (*index)++; -} - -void -nir_calc_dominance_impl(nir_function_impl *impl) -{ - if (impl->valid_metadata & nir_metadata_dominance) - return; - - nir_metadata_require(impl, nir_metadata_block_index); - - - nir_foreach_block_unstructured(block, impl) { - init_block(block, impl); - } - - bool progress = true; - while (progress) { - progress = false; - nir_foreach_block_unstructured(block, impl) { - if (block != nir_start_block(impl)) - progress |= calc_dominance(block); - } - } - - nir_foreach_block_unstructured(block, impl) { - calc_dom_frontier(block); - } - - nir_block *start_block = nir_start_block(impl); - start_block->imm_dom = NULL; - - calc_dom_children(impl); - - uint32_t dfs_index = 1; - calc_dfs_indicies(start_block, &dfs_index); -} - -void -nir_calc_dominance(nir_shader *shader) -{ - nir_foreach_function(function, shader) { - if (function->impl) - nir_calc_dominance_impl(function->impl); - } -} - -static nir_block * -block_return_if_reachable(nir_block *b) -{ - return (b && nir_block_is_reachable(b)) ? b : NULL; -} - -/** - * Computes the least common ancestor of two blocks. If one of the blocks - * is null or unreachable, the other block is returned or NULL if it's - * unreachable. - */ -nir_block * -nir_dominance_lca(nir_block *b1, nir_block *b2) -{ - if (b1 == NULL || !nir_block_is_reachable(b1)) - return block_return_if_reachable(b2); - - if (b2 == NULL || !nir_block_is_reachable(b2)) - return block_return_if_reachable(b1); - - assert(nir_cf_node_get_function(&b1->cf_node) == - nir_cf_node_get_function(&b2->cf_node)); - - assert(nir_cf_node_get_function(&b1->cf_node)->valid_metadata & - nir_metadata_dominance); - - return intersect(b1, b2); -} - -/** - * Returns true if parent dominates child according to the following - * definition: - * - * "The block A dominates the block B if every path from the start block - * to block B passes through A." - * - * This means, in particular, that any unreachable block is dominated by every - * other block and an unreachable block does not dominate anything except - * another unreachable block. - */ -bool -nir_block_dominates(nir_block *parent, nir_block *child) -{ - assert(nir_cf_node_get_function(&parent->cf_node) == - nir_cf_node_get_function(&child->cf_node)); - - assert(nir_cf_node_get_function(&parent->cf_node)->valid_metadata & - nir_metadata_dominance); - - /* If a block is unreachable, then nir_block::dom_pre_index == UINT32_MAX - * and nir_block::dom_post_index == 0. This allows us to trivially handle - * unreachable blocks here with zero extra work. - */ - return child->dom_pre_index >= parent->dom_pre_index && - child->dom_post_index <= parent->dom_post_index; -} - -bool -nir_block_is_unreachable(nir_block *block) -{ - assert(nir_cf_node_get_function(&block->cf_node)->valid_metadata & - nir_metadata_dominance); - assert(nir_cf_node_get_function(&block->cf_node)->valid_metadata & - nir_metadata_block_index); - - /* Unreachable blocks have no dominator. The only reachable block with no - * dominator is the start block which has index 0. - */ - return block->index > 0 && block->imm_dom == NULL; -} - -void -nir_dump_dom_tree_impl(nir_function_impl *impl, FILE *fp) -{ - fprintf(fp, "digraph doms_%s {\n", impl->function->name); - - nir_foreach_block_unstructured(block, impl) { - if (block->imm_dom) - fprintf(fp, "\t%u -> %u\n", block->imm_dom->index, block->index); - } - - fprintf(fp, "}\n\n"); -} - -void -nir_dump_dom_tree(nir_shader *shader, FILE *fp) -{ - nir_foreach_function(function, shader) { - if (function->impl) - nir_dump_dom_tree_impl(function->impl, fp); - } -} - -void -nir_dump_dom_frontier_impl(nir_function_impl *impl, FILE *fp) -{ - nir_foreach_block_unstructured(block, impl) { - fprintf(fp, "DF(%u) = {", block->index); - set_foreach(block->dom_frontier, entry) { - nir_block *df = (nir_block *) entry->key; - fprintf(fp, "%u, ", df->index); - } - fprintf(fp, "}\n"); - } -} - -void -nir_dump_dom_frontier(nir_shader *shader, FILE *fp) -{ - nir_foreach_function(function, shader) { - if (function->impl) - nir_dump_dom_frontier_impl(function->impl, fp); - } -} - -void -nir_dump_cfg_impl(nir_function_impl *impl, FILE *fp) -{ - fprintf(fp, "digraph cfg_%s {\n", impl->function->name); - - nir_foreach_block_unstructured(block, impl) { - if (block->successors[0]) - fprintf(fp, "\t%u -> %u\n", block->index, block->successors[0]->index); - if (block->successors[1]) - fprintf(fp, "\t%u -> %u\n", block->index, block->successors[1]->index); - } - - fprintf(fp, "}\n\n"); -} - -void -nir_dump_cfg(nir_shader *shader, FILE *fp) -{ - nir_foreach_function(function, shader) { - if (function->impl) - nir_dump_cfg_impl(function->impl, fp); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_format_convert.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_format_convert.h deleted file mode 100644 index 830b5fb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_format_convert.h +++ /dev/null @@ -1,466 +0,0 @@ -/* - * Copyright © 2017 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -#include "../../util/format_rgb9e5.h" - -static inline nir_ssa_def * -nir_shift_imm(nir_builder *b, nir_ssa_def *value, int left_shift) -{ - if (left_shift > 0) - return nir_ishl(b, value, nir_imm_int(b, left_shift)); - else if (left_shift < 0) - return nir_ushr(b, value, nir_imm_int(b, -left_shift)); - else - return value; -} - -static inline nir_ssa_def * -nir_shift(nir_builder *b, nir_ssa_def *value, nir_ssa_def *left_shift) -{ - return nir_bcsel(b, - nir_ige(b, left_shift, nir_imm_int(b, 0)), - nir_ishl(b, value, left_shift), - nir_ushr(b, value, nir_ineg(b, left_shift))); -} - -static inline nir_ssa_def * -nir_mask_shift(struct nir_builder *b, nir_ssa_def *src, - uint32_t mask, int left_shift) -{ - return nir_shift_imm(b, nir_iand(b, src, nir_imm_int(b, mask)), left_shift); -} - -static inline nir_ssa_def * -nir_mask_shift_or(struct nir_builder *b, nir_ssa_def *dst, nir_ssa_def *src, - uint32_t src_mask, int src_left_shift) -{ - return nir_ior(b, nir_mask_shift(b, src, src_mask, src_left_shift), dst); -} - -static inline nir_ssa_def * -nir_format_mask_uvec(nir_builder *b, nir_ssa_def *src, const unsigned *bits) -{ - nir_const_value mask[NIR_MAX_VEC_COMPONENTS]; - memset(mask, 0, sizeof(mask)); - for (unsigned i = 0; i < src->num_components; i++) { - assert(bits[i] < 32); - mask[i].u32 = (1u << bits[i]) - 1; - } - return nir_iand(b, src, nir_build_imm(b, src->num_components, 32, mask)); -} - -static inline nir_ssa_def * -nir_format_sign_extend_ivec(nir_builder *b, nir_ssa_def *src, - const unsigned *bits) -{ - assert(src->num_components <= 4); - nir_ssa_def *comps[4]; - for (unsigned i = 0; i < src->num_components; i++) { - nir_ssa_def *shift = nir_imm_int(b, src->bit_size - bits[i]); - comps[i] = nir_ishr(b, nir_ishl(b, nir_channel(b, src, i), shift), shift); - } - return nir_vec(b, comps, src->num_components); -} - - -static inline nir_ssa_def * -nir_format_unpack_int(nir_builder *b, nir_ssa_def *packed, - const unsigned *bits, unsigned num_components, - bool sign_extend) -{ - assert(num_components >= 1 && num_components <= 4); - const unsigned bit_size = packed->bit_size; - nir_ssa_def *comps[4]; - - if (bits[0] >= bit_size) { - assert(bits[0] == bit_size); - assert(num_components == 1); - return packed; - } - - unsigned next_chan = 0; - unsigned offset = 0; - for (unsigned i = 0; i < num_components; i++) { - assert(bits[i] < bit_size); - assert(offset + bits[i] <= bit_size); - nir_ssa_def *chan = nir_channel(b, packed, next_chan); - nir_ssa_def *lshift = nir_imm_int(b, bit_size - (offset + bits[i])); - nir_ssa_def *rshift = nir_imm_int(b, bit_size - bits[i]); - if (sign_extend) - comps[i] = nir_ishr(b, nir_ishl(b, chan, lshift), rshift); - else - comps[i] = nir_ushr(b, nir_ishl(b, chan, lshift), rshift); - offset += bits[i]; - if (offset >= bit_size) { - next_chan++; - offset -= bit_size; - } - } - - return nir_vec(b, comps, num_components); -} - -static inline nir_ssa_def * -nir_format_unpack_uint(nir_builder *b, nir_ssa_def *packed, - const unsigned *bits, unsigned num_components) -{ - return nir_format_unpack_int(b, packed, bits, num_components, false); -} - -static inline nir_ssa_def * -nir_format_unpack_sint(nir_builder *b, nir_ssa_def *packed, - const unsigned *bits, unsigned num_components) -{ - return nir_format_unpack_int(b, packed, bits, num_components, true); -} - -static inline nir_ssa_def * -nir_format_pack_uint_unmasked(nir_builder *b, nir_ssa_def *color, - const unsigned *bits, unsigned num_components) -{ - assert(num_components >= 1 && num_components <= 4); - nir_ssa_def *packed = nir_imm_int(b, 0); - unsigned offset = 0; - for (unsigned i = 0; i < num_components; i++) { - packed = nir_ior(b, packed, nir_shift_imm(b, nir_channel(b, color, i), - offset)); - offset += bits[i]; - } - assert(offset <= packed->bit_size); - - return packed; -} - -static inline nir_ssa_def * -nir_format_pack_uint_unmasked_ssa(nir_builder *b, nir_ssa_def *color, - nir_ssa_def *bits) -{ - nir_ssa_def *packed = nir_imm_int(b, 0); - nir_ssa_def *offset = nir_imm_int(b, 0); - for (unsigned i = 0; i < bits->num_components; i++) { - packed = nir_ior(b, packed, nir_ishl(b, nir_channel(b, color, i), offset)); - offset = nir_iadd(b, offset, nir_channel(b, bits, i)); - } - return packed; -} - -static inline nir_ssa_def * -nir_format_pack_uint(nir_builder *b, nir_ssa_def *color, - const unsigned *bits, unsigned num_components) -{ - return nir_format_pack_uint_unmasked(b, nir_format_mask_uvec(b, color, bits), - bits, num_components); -} - -static inline nir_ssa_def * -nir_format_bitcast_uvec_unmasked(nir_builder *b, nir_ssa_def *src, - unsigned src_bits, unsigned dst_bits) -{ - assert(src->bit_size >= src_bits && src->bit_size >= dst_bits); - assert(src_bits == 8 || src_bits == 16 || src_bits == 32); - assert(dst_bits == 8 || dst_bits == 16 || dst_bits == 32); - - if (src_bits == dst_bits) - return src; - - const unsigned dst_components = - DIV_ROUND_UP(src->num_components * src_bits, dst_bits); - assert(dst_components <= 4); - - nir_ssa_def *dst_chan[4] = {0}; - if (dst_bits > src_bits) { - unsigned shift = 0; - unsigned dst_idx = 0; - for (unsigned i = 0; i < src->num_components; i++) { - nir_ssa_def *shifted = nir_ishl(b, nir_channel(b, src, i), - nir_imm_int(b, shift)); - if (shift == 0) { - dst_chan[dst_idx] = shifted; - } else { - dst_chan[dst_idx] = nir_ior(b, dst_chan[dst_idx], shifted); - } - - shift += src_bits; - if (shift >= dst_bits) { - dst_idx++; - shift = 0; - } - } - } else { - nir_ssa_def *mask = nir_imm_int(b, ~0u >> (32 - dst_bits)); - - unsigned src_idx = 0; - unsigned shift = 0; - for (unsigned i = 0; i < dst_components; i++) { - dst_chan[i] = nir_iand(b, nir_ushr_imm(b, nir_channel(b, src, src_idx), - shift), - mask); - shift += dst_bits; - if (shift >= src_bits) { - src_idx++; - shift = 0; - } - } - } - - return nir_vec(b, dst_chan, dst_components); -} - -static inline nir_ssa_def * -_nir_format_norm_factor(nir_builder *b, const unsigned *bits, - unsigned num_components, - bool is_signed) -{ - nir_const_value factor[NIR_MAX_VEC_COMPONENTS]; - memset(factor, 0, sizeof(factor)); - for (unsigned i = 0; i < num_components; i++) { - assert(bits[i] <= 32); - factor[i].f32 = (1ull << (bits[i] - is_signed)) - 1; - } - return nir_build_imm(b, num_components, 32, factor); -} - -static inline nir_ssa_def * -nir_format_unorm_to_float(nir_builder *b, nir_ssa_def *u, const unsigned *bits) -{ - nir_ssa_def *factor = - _nir_format_norm_factor(b, bits, u->num_components, false); - - return nir_fdiv(b, nir_u2f32(b, u), factor); -} - -static inline nir_ssa_def * -nir_format_snorm_to_float(nir_builder *b, nir_ssa_def *s, const unsigned *bits) -{ - nir_ssa_def *factor = - _nir_format_norm_factor(b, bits, s->num_components, true); - - return nir_fmax(b, nir_fdiv(b, nir_i2f32(b, s), factor), - nir_imm_float(b, -1.0f)); -} - -static inline nir_ssa_def * -nir_format_float_to_unorm(nir_builder *b, nir_ssa_def *f, const unsigned *bits) -{ - nir_ssa_def *factor = - _nir_format_norm_factor(b, bits, f->num_components, false); - - /* Clamp to the range [0, 1] */ - f = nir_fsat(b, f); - - return nir_f2u32(b, nir_fround_even(b, nir_fmul(b, f, factor))); -} - -static inline nir_ssa_def * -nir_format_float_to_snorm(nir_builder *b, nir_ssa_def *f, const unsigned *bits) -{ - nir_ssa_def *factor = - _nir_format_norm_factor(b, bits, f->num_components, true); - - /* Clamp to the range [-1, 1] */ - f = nir_fmin(b, nir_fmax(b, f, nir_imm_float(b, -1)), nir_imm_float(b, 1)); - - return nir_f2i32(b, nir_fround_even(b, nir_fmul(b, f, factor))); -} - -/* Converts a vector of floats to a vector of half-floats packed in the low 16 - * bits. - */ -static inline nir_ssa_def * -nir_format_float_to_half(nir_builder *b, nir_ssa_def *f) -{ - nir_ssa_def *zero = nir_imm_float(b, 0); - nir_ssa_def *f16comps[4]; - for (unsigned i = 0; i < f->num_components; i++) - f16comps[i] = nir_pack_half_2x16_split(b, nir_channel(b, f, i), zero); - return nir_vec(b, f16comps, f->num_components); -} - -static inline nir_ssa_def * -nir_format_linear_to_srgb(nir_builder *b, nir_ssa_def *c) -{ - nir_ssa_def *linear = nir_fmul(b, c, nir_imm_float(b, 12.92f)); - nir_ssa_def *curved = - nir_fsub(b, nir_fmul(b, nir_imm_float(b, 1.055f), - nir_fpow(b, c, nir_imm_float(b, 1.0 / 2.4))), - nir_imm_float(b, 0.055f)); - - return nir_fsat(b, nir_bcsel(b, nir_flt(b, c, nir_imm_float(b, 0.0031308f)), - linear, curved)); -} - -static inline nir_ssa_def * -nir_format_srgb_to_linear(nir_builder *b, nir_ssa_def *c) -{ - nir_ssa_def *linear = nir_fdiv(b, c, nir_imm_float(b, 12.92f)); - nir_ssa_def *curved = - nir_fpow(b, nir_fdiv(b, nir_fadd(b, c, nir_imm_float(b, 0.055f)), - nir_imm_float(b, 1.055f)), - nir_imm_float(b, 2.4f)); - - return nir_fsat(b, nir_bcsel(b, nir_fge(b, nir_imm_float(b, 0.04045f), c), - linear, curved)); -} - -/* Clamps a vector of uints so they don't extend beyond the given number of - * bits per channel. - */ -static inline nir_ssa_def * -nir_format_clamp_uint(nir_builder *b, nir_ssa_def *f, const unsigned *bits) -{ - if (bits[0] == 32) - return f; - - nir_const_value max[NIR_MAX_VEC_COMPONENTS]; - memset(max, 0, sizeof(max)); - for (unsigned i = 0; i < f->num_components; i++) { - assert(bits[i] < 32); - max[i].u32 = (1 << bits[i]) - 1; - } - return nir_umin(b, f, nir_build_imm(b, f->num_components, 32, max)); -} - -/* Clamps a vector of sints so they don't extend beyond the given number of - * bits per channel. - */ -static inline nir_ssa_def * -nir_format_clamp_sint(nir_builder *b, nir_ssa_def *f, const unsigned *bits) -{ - if (bits[0] == 32) - return f; - - nir_const_value min[NIR_MAX_VEC_COMPONENTS], max[NIR_MAX_VEC_COMPONENTS]; - memset(min, 0, sizeof(min)); - memset(max, 0, sizeof(max)); - for (unsigned i = 0; i < f->num_components; i++) { - assert(bits[i] < 32); - max[i].i32 = (1 << (bits[i] - 1)) - 1; - min[i].i32 = -(1 << (bits[i] - 1)); - } - f = nir_imin(b, f, nir_build_imm(b, f->num_components, 32, max)); - f = nir_imax(b, f, nir_build_imm(b, f->num_components, 32, min)); - - return f; -} - -static inline nir_ssa_def * -nir_format_unpack_11f11f10f(nir_builder *b, nir_ssa_def *packed) -{ - nir_ssa_def *chans[3]; - chans[0] = nir_mask_shift(b, packed, 0x000007ff, 4); - chans[1] = nir_mask_shift(b, packed, 0x003ff800, -7); - chans[2] = nir_mask_shift(b, packed, 0xffc00000, -17); - - for (unsigned i = 0; i < 3; i++) - chans[i] = nir_unpack_half_2x16_split_x(b, chans[i]); - - return nir_vec(b, chans, 3); -} - -static inline nir_ssa_def * -nir_format_pack_11f11f10f(nir_builder *b, nir_ssa_def *color) -{ - /* 10 and 11-bit floats are unsigned. Clamp to non-negative */ - nir_ssa_def *clamped = nir_fmax(b, color, nir_imm_float(b, 0)); - - nir_ssa_def *undef = nir_ssa_undef(b, 1, color->bit_size); - nir_ssa_def *p1 = nir_pack_half_2x16_split(b, nir_channel(b, clamped, 0), - nir_channel(b, clamped, 1)); - nir_ssa_def *p2 = nir_pack_half_2x16_split(b, nir_channel(b, clamped, 2), - undef); - - /* A 10 or 11-bit float has the same exponent as a 16-bit float but with - * fewer mantissa bits and no sign bit. All we have to do is throw away - * the sign bit and the bottom mantissa bits and shift it into place. - */ - nir_ssa_def *packed = nir_imm_int(b, 0); - packed = nir_mask_shift_or(b, packed, p1, 0x00007ff0, -4); - packed = nir_mask_shift_or(b, packed, p1, 0x7ff00000, -9); - packed = nir_mask_shift_or(b, packed, p2, 0x00007fe0, 17); - - return packed; -} - -static inline nir_ssa_def * -nir_format_pack_r9g9b9e5(nir_builder *b, nir_ssa_def *color) -{ - /* See also float3_to_rgb9e5 */ - - /* First, we need to clamp it to range. */ - nir_ssa_def *clamped = nir_fmin(b, color, nir_imm_float(b, MAX_RGB9E5)); - - /* Get rid of negatives and NaN */ - clamped = nir_bcsel(b, nir_ult(b, nir_imm_int(b, 0x7f800000), color), - nir_imm_float(b, 0), clamped); - - /* maxrgb.u = MAX3(rc.u, gc.u, bc.u); */ - nir_ssa_def *maxu = nir_umax(b, nir_channel(b, clamped, 0), - nir_umax(b, nir_channel(b, clamped, 1), - nir_channel(b, clamped, 2))); - - /* maxrgb.u += maxrgb.u & (1 << (23-9)); */ - maxu = nir_iadd(b, maxu, nir_iand(b, maxu, nir_imm_int(b, 1 << 14))); - - /* exp_shared = MAX2((maxrgb.u >> 23), -RGB9E5_EXP_BIAS - 1 + 127) + - * 1 + RGB9E5_EXP_BIAS - 127; - */ - nir_ssa_def *exp_shared = - nir_iadd(b, nir_umax(b, nir_ushr_imm(b, maxu, 23), - nir_imm_int(b, -RGB9E5_EXP_BIAS - 1 + 127)), - nir_imm_int(b, 1 + RGB9E5_EXP_BIAS - 127)); - - /* revdenom_biasedexp = 127 - (exp_shared - RGB9E5_EXP_BIAS - - * RGB9E5_MANTISSA_BITS) + 1; - */ - nir_ssa_def *revdenom_biasedexp = - nir_isub(b, nir_imm_int(b, 127 + RGB9E5_EXP_BIAS + - RGB9E5_MANTISSA_BITS + 1), - exp_shared); - - /* revdenom.u = revdenom_biasedexp << 23; */ - nir_ssa_def *revdenom = - nir_ishl(b, revdenom_biasedexp, nir_imm_int(b, 23)); - - /* rm = (int) (rc.f * revdenom.f); - * gm = (int) (gc.f * revdenom.f); - * bm = (int) (bc.f * revdenom.f); - */ - nir_ssa_def *mantissa = - nir_f2i32(b, nir_fmul(b, clamped, revdenom)); - - /* rm = (rm & 1) + (rm >> 1); - * gm = (gm & 1) + (gm >> 1); - * bm = (bm & 1) + (bm >> 1); - */ - mantissa = nir_iadd(b, nir_iand_imm(b, mantissa, 1), - nir_ushr_imm(b, mantissa, 1)); - - nir_ssa_def *packed = nir_channel(b, mantissa, 0); - packed = nir_mask_shift_or(b, packed, nir_channel(b, mantissa, 1), ~0, 9); - packed = nir_mask_shift_or(b, packed, nir_channel(b, mantissa, 2), ~0, 18); - packed = nir_mask_shift_or(b, packed, exp_shared, ~0, 27); - - return packed; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_from_ssa.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_from_ssa.c deleted file mode 100644 index a8fb75b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_from_ssa.c +++ /dev/null @@ -1,1140 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_vla.h" - -/* - * This file implements an out-of-SSA pass as described in "Revisiting - * Out-of-SSA Translation for Correctness, Code Quality, and Efficiency" by - * Boissinot et al. - */ - -struct from_ssa_state { - nir_builder builder; - void *dead_ctx; - struct exec_list dead_instrs; - bool phi_webs_only; - struct hash_table *merge_node_table; - nir_instr *instr; - bool progress; -}; - -/* Returns if def @a comes after def @b. - * - * The core observation that makes the Boissinot algorithm efficient - * is that, given two properly sorted sets, we can check for - * interference in these sets via a linear walk. This is accomplished - * by doing single combined walk over union of the two sets in DFS - * order. It doesn't matter what DFS we do so long as we're - * consistent. Fortunately, the dominance algorithm we ran prior to - * this pass did such a walk and recorded the pre- and post-indices in - * the blocks. - * - * We treat SSA undefs as always coming before other instruction types. - */ -static bool -def_after(nir_ssa_def *a, nir_ssa_def *b) -{ - if (a->parent_instr->type == nir_instr_type_ssa_undef) - return false; - - if (b->parent_instr->type == nir_instr_type_ssa_undef) - return true; - - /* If they're in the same block, we can rely on whichever instruction - * comes first in the block. - */ - if (a->parent_instr->block == b->parent_instr->block) - return a->parent_instr->index > b->parent_instr->index; - - /* Otherwise, if blocks are distinct, we sort them in DFS pre-order */ - return a->parent_instr->block->dom_pre_index > - b->parent_instr->block->dom_pre_index; -} - -/* Returns true if a dominates b */ -static bool -ssa_def_dominates(nir_ssa_def *a, nir_ssa_def *b) -{ - if (a->parent_instr->type == nir_instr_type_ssa_undef) { - /* SSA undefs always dominate */ - return true; - } if (def_after(a, b)) { - return false; - } else if (a->parent_instr->block == b->parent_instr->block) { - return def_after(b, a); - } else { - return nir_block_dominates(a->parent_instr->block, - b->parent_instr->block); - } -} - - -/* The following data structure, which I have named merge_set is a way of - * representing a set registers of non-interfering registers. This is - * based on the concept of a "dominance forest" presented in "Fast Copy - * Coalescing and Live-Range Identification" by Budimlic et al. but the - * implementation concept is taken from "Revisiting Out-of-SSA Translation - * for Correctness, Code Quality, and Efficiency" by Boissinot et al. - * - * Each SSA definition is associated with a merge_node and the association - * is represented by a combination of a hash table and the "def" parameter - * in the merge_node structure. The merge_set stores a linked list of - * merge_nodes, ordered by a pre-order DFS walk of the dominance tree. (Since - * the liveness analysis pass indexes the SSA values in dominance order for - * us, this is an easy thing to keep up.) It is assumed that no pair of the - * nodes in a given set interfere. Merging two sets or checking for - * interference can be done in a single linear-time merge-sort walk of the - * two lists of nodes. - */ -struct merge_set; - -typedef struct { - struct exec_node node; - struct merge_set *set; - nir_ssa_def *def; -} merge_node; - -typedef struct merge_set { - struct exec_list nodes; - unsigned size; - bool divergent; - nir_register *reg; -} merge_set; - -#if 0 -static void -merge_set_dump(merge_set *set, FILE *fp) -{ - NIR_VLA(nir_ssa_def *, dom, set->size); - int dom_idx = -1; - - foreach_list_typed(merge_node, node, node, &set->nodes) { - while (dom_idx >= 0 && !ssa_def_dominates(dom[dom_idx], node->def)) - dom_idx--; - - for (int i = 0; i <= dom_idx; i++) - fprintf(fp, " "); - - fprintf(fp, "ssa_%d\n", node->def->index); - - dom[++dom_idx] = node->def; - } -} -#endif - -static merge_node * -get_merge_node(nir_ssa_def *def, struct from_ssa_state *state) -{ - struct hash_entry *entry = - _mesa_hash_table_search(state->merge_node_table, def); - if (entry) - return entry->data; - - merge_set *set = ralloc(state->dead_ctx, merge_set); - exec_list_make_empty(&set->nodes); - set->size = 1; - set->divergent = def->divergent; - set->reg = NULL; - - merge_node *node = ralloc(state->dead_ctx, merge_node); - node->set = set; - node->def = def; - exec_list_push_head(&set->nodes, &node->node); - - _mesa_hash_table_insert(state->merge_node_table, def, node); - - return node; -} - -static bool -merge_nodes_interfere(merge_node *a, merge_node *b) -{ - /* There's no need to check for interference within the same set, - * because we assume, that sets themselves are already - * interference-free. - */ - if (a->set == b->set) - return false; - - return nir_ssa_defs_interfere(a->def, b->def); -} - -/* Merges b into a - * - * This algorithm uses def_after to ensure that the sets always stay in the - * same order as the pre-order DFS done by the liveness algorithm. - */ -static merge_set * -merge_merge_sets(merge_set *a, merge_set *b) -{ - struct exec_node *an = exec_list_get_head(&a->nodes); - struct exec_node *bn = exec_list_get_head(&b->nodes); - while (!exec_node_is_tail_sentinel(bn)) { - merge_node *a_node = exec_node_data(merge_node, an, node); - merge_node *b_node = exec_node_data(merge_node, bn, node); - - if (exec_node_is_tail_sentinel(an) || - def_after(a_node->def, b_node->def)) { - struct exec_node *next = bn->next; - exec_node_remove(bn); - exec_node_insert_node_before(an, bn); - exec_node_data(merge_node, bn, node)->set = a; - bn = next; - } else { - an = an->next; - } - } - - a->size += b->size; - b->size = 0; - a->divergent |= b->divergent; - - return a; -} - -/* Checks for any interference between two merge sets - * - * This is an implementation of Algorithm 2 in "Revisiting Out-of-SSA - * Translation for Correctness, Code Quality, and Efficiency" by - * Boissinot et al. - */ -static bool -merge_sets_interfere(merge_set *a, merge_set *b) -{ - /* List of all the nodes which dominate the current node, in dominance - * order. - */ - NIR_VLA(merge_node *, dom, a->size + b->size); - int dom_idx = -1; - - struct exec_node *an = exec_list_get_head(&a->nodes); - struct exec_node *bn = exec_list_get_head(&b->nodes); - while (!exec_node_is_tail_sentinel(an) || - !exec_node_is_tail_sentinel(bn)) { - - /* We walk the union of the two sets in the same order as the pre-order - * DFS done by liveness analysis. - */ - merge_node *current; - if (exec_node_is_tail_sentinel(an)) { - current = exec_node_data(merge_node, bn, node); - bn = bn->next; - } else if (exec_node_is_tail_sentinel(bn)) { - current = exec_node_data(merge_node, an, node); - an = an->next; - } else { - merge_node *a_node = exec_node_data(merge_node, an, node); - merge_node *b_node = exec_node_data(merge_node, bn, node); - - if (def_after(b_node->def, a_node->def)) { - current = a_node; - an = an->next; - } else { - current = b_node; - bn = bn->next; - } - } - - /* Because our walk is a pre-order DFS, we can maintain the list of - * dominating nodes as a simple stack, pushing every node onto the list - * after we visit it and popping any non-dominating nodes off before we - * visit the current node. - */ - while (dom_idx >= 0 && - !ssa_def_dominates(dom[dom_idx]->def, current->def)) - dom_idx--; - - /* There are three invariants of this algorithm that are important here: - * - * 1. There is no interference within either set a or set b. - * 2. None of the nodes processed up until this point interfere. - * 3. All the dominators of `current` have been processed - * - * Because of these invariants, we only need to check the current node - * against its minimal dominator. If any other node N in the union - * interferes with current, then N must dominate current because we are - * in SSA form. If N dominates current then it must also dominate our - * minimal dominator dom[dom_idx]. Since N is live at current it must - * also be live at the minimal dominator which means N interferes with - * the minimal dominator dom[dom_idx] and, by invariants 2 and 3 above, - * the algorithm would have already terminated. Therefore, if we got - * here, the only node that can possibly interfere with current is the - * minimal dominator dom[dom_idx]. - * - * This is what allows us to do a interference check of the union of the - * two sets with a single linear-time walk. - */ - if (dom_idx >= 0 && merge_nodes_interfere(current, dom[dom_idx])) - return true; - - dom[++dom_idx] = current; - } - - return false; -} - -static bool -add_parallel_copy_to_end_of_block(nir_shader *shader, nir_block *block, void *dead_ctx) -{ - bool need_end_copy = false; - if (block->successors[0]) { - nir_instr *instr = nir_block_first_instr(block->successors[0]); - if (instr && instr->type == nir_instr_type_phi) - need_end_copy = true; - } - - if (block->successors[1]) { - nir_instr *instr = nir_block_first_instr(block->successors[1]); - if (instr && instr->type == nir_instr_type_phi) - need_end_copy = true; - } - - if (need_end_copy) { - /* If one of our successors has at least one phi node, we need to - * create a parallel copy at the end of the block but before the jump - * (if there is one). - */ - nir_parallel_copy_instr *pcopy = - nir_parallel_copy_instr_create(shader); - - nir_instr_insert(nir_after_block_before_jump(block), &pcopy->instr); - } - - return true; -} - -static nir_parallel_copy_instr * -get_parallel_copy_at_end_of_block(nir_block *block) -{ - nir_instr *last_instr = nir_block_last_instr(block); - if (last_instr == NULL) - return NULL; - - /* The last instruction may be a jump in which case the parallel copy is - * right before it. - */ - if (last_instr->type == nir_instr_type_jump) - last_instr = nir_instr_prev(last_instr); - - if (last_instr && last_instr->type == nir_instr_type_parallel_copy) - return nir_instr_as_parallel_copy(last_instr); - else - return NULL; -} - -/** Isolate phi nodes with parallel copies - * - * In order to solve the dependency problems with the sources and - * destinations of phi nodes, we first isolate them by adding parallel - * copies to the beginnings and ends of basic blocks. For every block with - * phi nodes, we add a parallel copy immediately following the last phi - * node that copies the destinations of all of the phi nodes to new SSA - * values. We also add a parallel copy to the end of every block that has - * a successor with phi nodes that, for each phi node in each successor, - * copies the corresponding sorce of the phi node and adjust the phi to - * used the destination of the parallel copy. - * - * In SSA form, each value has exactly one definition. What this does is - * ensure that each value used in a phi also has exactly one use. The - * destinations of phis are only used by the parallel copy immediately - * following the phi nodes and. Thanks to the parallel copy at the end of - * the predecessor block, the sources of phi nodes are are the only use of - * that value. This allows us to immediately assign all the sources and - * destinations of any given phi node to the same register without worrying - * about interference at all. We do coalescing to get rid of the parallel - * copies where possible. - * - * Before this pass can be run, we have to iterate over the blocks with - * add_parallel_copy_to_end_of_block to ensure that the parallel copies at - * the ends of blocks exist. We can create the ones at the beginnings as - * we go, but the ones at the ends of blocks need to be created ahead of - * time because of potential back-edges in the CFG. - */ -static bool -isolate_phi_nodes_block(nir_shader *shader, nir_block *block, void *dead_ctx) -{ - nir_instr *last_phi_instr = NULL; - nir_foreach_instr(instr, block) { - /* Phi nodes only ever come at the start of a block */ - if (instr->type != nir_instr_type_phi) - break; - - last_phi_instr = instr; - } - - /* If we don't have any phis, then there's nothing for us to do. */ - if (last_phi_instr == NULL) - return true; - - /* If we have phi nodes, we need to create a parallel copy at the - * start of this block but after the phi nodes. - */ - nir_parallel_copy_instr *block_pcopy = - nir_parallel_copy_instr_create(shader); - nir_instr_insert_after(last_phi_instr, &block_pcopy->instr); - - nir_foreach_instr(instr, block) { - /* Phi nodes only ever come at the start of a block */ - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - assert(phi->dest.is_ssa); - nir_foreach_phi_src(src, phi) { - if (nir_src_is_undef(src->src)) - continue; - - nir_parallel_copy_instr *pcopy = - get_parallel_copy_at_end_of_block(src->pred); - assert(pcopy); - - nir_parallel_copy_entry *entry = rzalloc(dead_ctx, - nir_parallel_copy_entry); - nir_ssa_dest_init(&pcopy->instr, &entry->dest, - phi->dest.ssa.num_components, - phi->dest.ssa.bit_size, NULL); - entry->dest.ssa.divergent = nir_src_is_divergent(src->src); - exec_list_push_tail(&pcopy->entries, &entry->node); - - assert(src->src.is_ssa); - nir_instr_rewrite_src(&pcopy->instr, &entry->src, src->src); - - nir_instr_rewrite_src(&phi->instr, &src->src, - nir_src_for_ssa(&entry->dest.ssa)); - } - - nir_parallel_copy_entry *entry = rzalloc(dead_ctx, - nir_parallel_copy_entry); - nir_ssa_dest_init(&block_pcopy->instr, &entry->dest, - phi->dest.ssa.num_components, phi->dest.ssa.bit_size, - NULL); - entry->dest.ssa.divergent = phi->dest.ssa.divergent; - exec_list_push_tail(&block_pcopy->entries, &entry->node); - - nir_ssa_def_rewrite_uses(&phi->dest.ssa, - &entry->dest.ssa); - - nir_instr_rewrite_src(&block_pcopy->instr, &entry->src, - nir_src_for_ssa(&phi->dest.ssa)); - } - - return true; -} - -static bool -coalesce_phi_nodes_block(nir_block *block, struct from_ssa_state *state) -{ - nir_foreach_instr(instr, block) { - /* Phi nodes only ever come at the start of a block */ - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - - assert(phi->dest.is_ssa); - merge_node *dest_node = get_merge_node(&phi->dest.ssa, state); - - nir_foreach_phi_src(src, phi) { - assert(src->src.is_ssa); - if (nir_src_is_undef(src->src)) - continue; - - merge_node *src_node = get_merge_node(src->src.ssa, state); - if (src_node->set != dest_node->set) - merge_merge_sets(dest_node->set, src_node->set); - } - } - - return true; -} - -static void -aggressive_coalesce_parallel_copy(nir_parallel_copy_instr *pcopy, - struct from_ssa_state *state) -{ - nir_foreach_parallel_copy_entry(entry, pcopy) { - if (!entry->src.is_ssa) - continue; - - /* Since load_const instructions are SSA only, we can't replace their - * destinations with registers and, therefore, can't coalesce them. - */ - if (entry->src.ssa->parent_instr->type == nir_instr_type_load_const) - continue; - - /* Don't try and coalesce these */ - if (entry->dest.ssa.num_components != entry->src.ssa->num_components) - continue; - - merge_node *src_node = get_merge_node(entry->src.ssa, state); - merge_node *dest_node = get_merge_node(&entry->dest.ssa, state); - - if (src_node->set == dest_node->set) - continue; - - /* TODO: We can probably do better here but for now we should be safe if - * we just don't coalesce things with different divergence. - */ - if (dest_node->set->divergent != src_node->set->divergent) - continue; - - if (!merge_sets_interfere(src_node->set, dest_node->set)) - merge_merge_sets(src_node->set, dest_node->set); - } -} - -static bool -aggressive_coalesce_block(nir_block *block, struct from_ssa_state *state) -{ - nir_parallel_copy_instr *start_pcopy = NULL; - nir_foreach_instr(instr, block) { - /* Phi nodes only ever come at the start of a block */ - if (instr->type != nir_instr_type_phi) { - if (instr->type != nir_instr_type_parallel_copy) - break; /* The parallel copy must be right after the phis */ - - start_pcopy = nir_instr_as_parallel_copy(instr); - - aggressive_coalesce_parallel_copy(start_pcopy, state); - - break; - } - } - - nir_parallel_copy_instr *end_pcopy = - get_parallel_copy_at_end_of_block(block); - - if (end_pcopy && end_pcopy != start_pcopy) - aggressive_coalesce_parallel_copy(end_pcopy, state); - - return true; -} - -static nir_register * -create_reg_for_ssa_def(nir_ssa_def *def, nir_function_impl *impl) -{ - nir_register *reg = nir_local_reg_create(impl); - - reg->num_components = def->num_components; - reg->bit_size = def->bit_size; - reg->num_array_elems = 0; - - return reg; -} - -static bool -rewrite_ssa_def(nir_ssa_def *def, void *void_state) -{ - struct from_ssa_state *state = void_state; - nir_register *reg; - - struct hash_entry *entry = - _mesa_hash_table_search(state->merge_node_table, def); - if (entry) { - /* In this case, we're part of a phi web. Use the web's register. */ - merge_node *node = (merge_node *)entry->data; - - /* If it doesn't have a register yet, create one. Note that all of - * the things in the merge set should be the same so it doesn't - * matter which node's definition we use. - */ - if (node->set->reg == NULL) { - node->set->reg = create_reg_for_ssa_def(def, state->builder.impl); - node->set->reg->divergent = node->set->divergent; - } - - reg = node->set->reg; - } else { - if (state->phi_webs_only) - return true; - - /* We leave load_const SSA values alone. They act as immediates to - * the backend. If it got coalesced into a phi, that's ok. - */ - if (def->parent_instr->type == nir_instr_type_load_const) - return true; - - reg = create_reg_for_ssa_def(def, state->builder.impl); - } - - nir_ssa_def_rewrite_uses_src(def, nir_src_for_reg(reg)); - assert(nir_ssa_def_is_unused(def)); - - if (def->parent_instr->type == nir_instr_type_ssa_undef) { - /* If it's an ssa_undef instruction, remove it since we know we just got - * rid of all its uses. - */ - nir_instr *parent_instr = def->parent_instr; - nir_instr_remove(parent_instr); - exec_list_push_tail(&state->dead_instrs, &parent_instr->node); - state->progress = true; - return true; - } - - assert(def->parent_instr->type != nir_instr_type_load_const); - - /* At this point we know a priori that this SSA def is part of a - * nir_dest. We can use exec_node_data to get the dest pointer. - */ - nir_dest *dest = exec_node_data(nir_dest, def, ssa); - - nir_instr_rewrite_dest(state->instr, dest, nir_dest_for_reg(reg)); - state->progress = true; - return true; -} - -/* Resolves ssa definitions to registers. While we're at it, we also - * remove phi nodes. - */ -static void -resolve_registers_block(nir_block *block, struct from_ssa_state *state) -{ - nir_foreach_instr_safe(instr, block) { - state->instr = instr; - nir_foreach_ssa_def(instr, rewrite_ssa_def, state); - - if (instr->type == nir_instr_type_phi) { - nir_instr_remove(instr); - exec_list_push_tail(&state->dead_instrs, &instr->node); - state->progress = true; - } - } - state->instr = NULL; -} - -static void -emit_copy(nir_builder *b, nir_src src, nir_src dest_src) -{ - assert(!dest_src.is_ssa && - dest_src.reg.indirect == NULL && - dest_src.reg.base_offset == 0); - - assert(!nir_src_is_divergent(src) || nir_src_is_divergent(dest_src)); - - if (src.is_ssa) - assert(src.ssa->num_components >= dest_src.reg.reg->num_components); - else - assert(src.reg.reg->num_components >= dest_src.reg.reg->num_components); - - nir_alu_instr *mov = nir_alu_instr_create(b->shader, nir_op_mov); - nir_src_copy(&mov->src[0].src, &src, &mov->instr); - mov->dest.dest = nir_dest_for_reg(dest_src.reg.reg); - mov->dest.write_mask = (1 << dest_src.reg.reg->num_components) - 1; - - nir_builder_instr_insert(b, &mov->instr); -} - -/* Resolves a single parallel copy operation into a sequence of movs - * - * This is based on Algorithm 1 from "Revisiting Out-of-SSA Translation for - * Correctness, Code Quality, and Efficiency" by Boissinot et al. - * However, I never got the algorithm to work as written, so this version - * is slightly modified. - * - * The algorithm works by playing this little shell game with the values. - * We start by recording where every source value is and which source value - * each destination value should receive. We then grab any copy whose - * destination is "empty", i.e. not used as a source, and do the following: - * - Find where its source value currently lives - * - Emit the move instruction - * - Set the location of the source value to the destination - * - Mark the location containing the source value - * - Mark the destination as no longer needing to be copied - * - * When we run out of "empty" destinations, we have a cycle and so we - * create a temporary register, copy to that register, and mark the value - * we copied as living in that temporary. Now, the cycle is broken, so we - * can continue with the above steps. - */ -static void -resolve_parallel_copy(nir_parallel_copy_instr *pcopy, - struct from_ssa_state *state) -{ - unsigned num_copies = 0; - nir_foreach_parallel_copy_entry(entry, pcopy) { - /* Sources may be SSA */ - if (!entry->src.is_ssa && entry->src.reg.reg == entry->dest.reg.reg) - continue; - - num_copies++; - } - - if (num_copies == 0) { - /* Hooray, we don't need any copies! */ - nir_instr_remove(&pcopy->instr); - exec_list_push_tail(&state->dead_instrs, &pcopy->instr.node); - return; - } - - /* The register/source corresponding to the given index */ - NIR_VLA_ZERO(nir_src, values, num_copies * 2); - - /* The current location of a given piece of data. We will use -1 for "null" */ - NIR_VLA_FILL(int, loc, num_copies * 2, -1); - - /* The piece of data that the given piece of data is to be copied from. We will use -1 for "null" */ - NIR_VLA_FILL(int, pred, num_copies * 2, -1); - - /* The destinations we have yet to properly fill */ - NIR_VLA(int, to_do, num_copies * 2); - int to_do_idx = -1; - - state->builder.cursor = nir_before_instr(&pcopy->instr); - - /* Now we set everything up: - * - All values get assigned a temporary index - * - Current locations are set from sources - * - Predecessors are recorded from sources and destinations - */ - int num_vals = 0; - nir_foreach_parallel_copy_entry(entry, pcopy) { - /* Sources may be SSA */ - if (!entry->src.is_ssa && entry->src.reg.reg == entry->dest.reg.reg) - continue; - - int src_idx = -1; - for (int i = 0; i < num_vals; ++i) { - if (nir_srcs_equal(values[i], entry->src)) - src_idx = i; - } - if (src_idx < 0) { - src_idx = num_vals++; - values[src_idx] = entry->src; - } - - nir_src dest_src = nir_src_for_reg(entry->dest.reg.reg); - - int dest_idx = -1; - for (int i = 0; i < num_vals; ++i) { - if (nir_srcs_equal(values[i], dest_src)) { - /* Each destination of a parallel copy instruction should be - * unique. A destination may get used as a source, so we still - * have to walk the list. However, the predecessor should not, - * at this point, be set yet, so we should have -1 here. - */ - assert(pred[i] == -1); - dest_idx = i; - } - } - if (dest_idx < 0) { - dest_idx = num_vals++; - values[dest_idx] = dest_src; - } - - loc[src_idx] = src_idx; - pred[dest_idx] = src_idx; - - to_do[++to_do_idx] = dest_idx; - } - - /* Currently empty destinations we can go ahead and fill */ - NIR_VLA(int, ready, num_copies * 2); - int ready_idx = -1; - - /* Mark the ones that are ready for copying. We know an index is a - * destination if it has a predecessor and it's ready for copying if - * it's not marked as containing data. - */ - for (int i = 0; i < num_vals; i++) { - if (pred[i] != -1 && loc[i] == -1) - ready[++ready_idx] = i; - } - - while (1) { - while (ready_idx >= 0) { - int b = ready[ready_idx--]; - int a = pred[b]; - emit_copy(&state->builder, values[loc[a]], values[b]); - - /* b has been filled, mark it as not needing to be copied */ - pred[b] = -1; - - /* The next bit only applies if the source and destination have the - * same divergence. If they differ (it must be convergent -> - * divergent), then we can't guarantee we won't need the convergent - * version of it again. - */ - if (nir_src_is_divergent(values[a]) == - nir_src_is_divergent(values[b])) { - /* If a needs to be filled... */ - if (pred[a] != -1) { - /* If any other copies want a they can find it at b */ - loc[a] = b; - - /* It's ready for copying now */ - ready[++ready_idx] = a; - } - } - } - - assert(ready_idx < 0); - if (to_do_idx < 0) - break; - - int b = to_do[to_do_idx--]; - if (pred[b] == -1) - continue; - - /* If we got here, then we don't have any more trivial copies that we - * can do. We have to break a cycle, so we create a new temporary - * register for that purpose. Normally, if going out of SSA after - * register allocation, you would want to avoid creating temporary - * registers. However, we are going out of SSA before register - * allocation, so we would rather not create extra register - * dependencies for the backend to deal with. If it wants, the - * backend can coalesce the (possibly multiple) temporaries. - * - * We can also get here in the case where there is no cycle but our - * source value is convergent, is also used as a destination by another - * element of the parallel copy, and all the destinations of the - * parallel copy which copy from it are divergent. In this case, the - * above loop cannot detect that the value has moved due to all the - * divergent destinations and we'll end up emitting a copy to a - * temporary which never gets used. We can avoid this with additional - * tracking or we can just trust the back-end to dead-code the unused - * temporary (which is trivial). - */ - assert(num_vals < num_copies * 2); - nir_register *reg = nir_local_reg_create(state->builder.impl); - reg->num_array_elems = 0; - reg->num_components = nir_src_num_components(values[b]); - reg->bit_size = nir_src_bit_size(values[b]); - reg->divergent = nir_src_is_divergent(values[b]); - values[num_vals] = nir_src_for_reg(reg); - - emit_copy(&state->builder, values[b], values[num_vals]); - loc[b] = num_vals; - ready[++ready_idx] = b; - num_vals++; - } - - nir_instr_remove(&pcopy->instr); - exec_list_push_tail(&state->dead_instrs, &pcopy->instr.node); -} - -/* Resolves the parallel copies in a block. Each block can have at most - * two: One at the beginning, right after all the phi noces, and one at - * the end (or right before the final jump if it exists). - */ -static bool -resolve_parallel_copies_block(nir_block *block, struct from_ssa_state *state) -{ - /* At this point, we have removed all of the phi nodes. If a parallel - * copy existed right after the phi nodes in this block, it is now the - * first instruction. - */ - nir_instr *first_instr = nir_block_first_instr(block); - if (first_instr == NULL) - return true; /* Empty, nothing to do. */ - - if (first_instr->type == nir_instr_type_parallel_copy) { - nir_parallel_copy_instr *pcopy = nir_instr_as_parallel_copy(first_instr); - - resolve_parallel_copy(pcopy, state); - } - - /* It's possible that the above code already cleaned up the end parallel - * copy. However, doing so removed it form the instructions list so we - * won't find it here. Therefore, it's safe to go ahead and just look - * for one and clean it up if it exists. - */ - nir_parallel_copy_instr *end_pcopy = - get_parallel_copy_at_end_of_block(block); - if (end_pcopy) - resolve_parallel_copy(end_pcopy, state); - - return true; -} - -static bool -nir_convert_from_ssa_impl(nir_function_impl *impl, bool phi_webs_only) -{ - nir_shader *shader = impl->function->shader; - - struct from_ssa_state state; - - nir_builder_init(&state.builder, impl); - state.dead_ctx = ralloc_context(NULL); - state.phi_webs_only = phi_webs_only; - state.merge_node_table = _mesa_pointer_hash_table_create(NULL); - state.progress = false; - exec_list_make_empty(&state.dead_instrs); - - nir_foreach_block(block, impl) { - add_parallel_copy_to_end_of_block(shader, block, state.dead_ctx); - } - - nir_foreach_block(block, impl) { - isolate_phi_nodes_block(shader, block, state.dead_ctx); - } - - /* Mark metadata as dirty before we ask for liveness analysis */ - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - nir_metadata_require(impl, nir_metadata_instr_index | - nir_metadata_live_ssa_defs | - nir_metadata_dominance); - - nir_foreach_block(block, impl) { - coalesce_phi_nodes_block(block, &state); - } - - nir_foreach_block(block, impl) { - aggressive_coalesce_block(block, &state); - } - - nir_foreach_block(block, impl) { - resolve_registers_block(block, &state); - } - - nir_foreach_block(block, impl) { - resolve_parallel_copies_block(block, &state); - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - /* Clean up dead instructions and the hash tables */ - nir_instr_free_list(&state.dead_instrs); - _mesa_hash_table_destroy(state.merge_node_table, NULL); - ralloc_free(state.dead_ctx); - return state.progress; -} - -bool -nir_convert_from_ssa(nir_shader *shader, bool phi_webs_only) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_convert_from_ssa_impl(function->impl, phi_webs_only); - } - - return progress; -} - - -static void -place_phi_read(nir_builder *b, nir_register *reg, - nir_ssa_def *def, nir_block *block, struct set *visited_blocks) -{ - /* Search already visited blocks to avoid back edges in tree */ - if (_mesa_set_search(visited_blocks, block) == NULL) { - /* Try to go up the single-successor tree */ - bool all_single_successors = true; - set_foreach(block->predecessors, entry) { - nir_block *pred = (nir_block *)entry->key; - if (pred->successors[0] && pred->successors[1]) { - all_single_successors = false; - break; - } - } - - if (all_single_successors) { - /* All predecessors of this block have exactly one successor and it - * is this block so they must eventually lead here without - * intersecting each other. Place the reads in the predecessors - * instead of this block. - */ - _mesa_set_add(visited_blocks, block); - - set_foreach(block->predecessors, entry) { - place_phi_read(b, reg, def, (nir_block *)entry->key, visited_blocks); - } - return; - } - } - - b->cursor = nir_after_block_before_jump(block); - nir_store_reg(b, reg, def, ~0); -} - -/** Lower all of the phi nodes in a block to movs to and from a register - * - * This provides a very quick-and-dirty out-of-SSA pass that you can run on a - * single block to convert all of its phis to a register and some movs. - * The code that is generated, while not optimal for actual codegen in a - * back-end, is easy to generate, correct, and will turn into the same set of - * phis after you call regs_to_ssa and do some copy propagation. For each phi - * node we do the following: - * - * 1. For each phi instruction in the block, create a new nir_register - * - * 2. Insert movs at the top of the destination block for each phi and - * rewrite all uses of the phi to use the mov. - * - * 3. For each phi source, insert movs in the predecessor block from the phi - * source to the register associated with the phi. - * - * Correctness is guaranteed by the fact that we create a new register for - * each phi and emit movs on both sides of the control-flow edge. Because all - * the phis have SSA destinations (we assert this) and there is a separate - * temporary for each phi, all movs inserted in any particular block have - * unique destinations so the order of operations does not matter. - * - * The one intelligent thing this pass does is that it places the moves from - * the phi sources as high up the predecessor tree as possible instead of in - * the exact predecessor. This means that, in particular, it will crawl into - * the deepest nesting of any if-ladders. In order to ensure that doing so is - * safe, it stops as soon as one of the predecessors has multiple successors. - */ -bool -nir_lower_phis_to_regs_block(nir_block *block) -{ - nir_builder b; - nir_builder_init(&b, nir_cf_node_get_function(&block->cf_node)); - struct set *visited_blocks = _mesa_set_create(NULL, _mesa_hash_pointer, - _mesa_key_pointer_equal); - - bool progress = false; - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - assert(phi->dest.is_ssa); - - nir_register *reg = create_reg_for_ssa_def(&phi->dest.ssa, b.impl); - - b.cursor = nir_after_instr(&phi->instr); - nir_ssa_def *def = nir_load_reg(&b, reg); - - nir_ssa_def_rewrite_uses(&phi->dest.ssa, def); - - nir_foreach_phi_src(src, phi) { - if (src->src.is_ssa) { - _mesa_set_add(visited_blocks, src->src.ssa->parent_instr->block); - place_phi_read(&b, reg, src->src.ssa, src->pred, visited_blocks); - _mesa_set_clear(visited_blocks, NULL); - } else { - b.cursor = nir_after_block_before_jump(src->pred); - nir_ssa_def *src_ssa = - nir_ssa_for_src(&b, src->src, phi->dest.ssa.num_components); - nir_store_reg(&b, reg, src_ssa, ~0); - } - } - - nir_instr_remove(&phi->instr); - - progress = true; - } - - _mesa_set_destroy(visited_blocks, NULL); - - return progress; -} - -struct ssa_def_to_reg_state { - nir_function_impl *impl; - bool progress; -}; - -static bool -dest_replace_ssa_with_reg(nir_dest *dest, void *void_state) -{ - struct ssa_def_to_reg_state *state = void_state; - - if (!dest->is_ssa) - return true; - - nir_register *reg = create_reg_for_ssa_def(&dest->ssa, state->impl); - - nir_ssa_def_rewrite_uses_src(&dest->ssa, nir_src_for_reg(reg)); - - nir_instr *instr = dest->ssa.parent_instr; - *dest = nir_dest_for_reg(reg); - dest->reg.parent_instr = instr; - list_addtail(&dest->reg.def_link, ®->defs); - - state->progress = true; - - return true; -} - -static bool -ssa_def_is_local_to_block(nir_ssa_def *def, UNUSED void *state) -{ - nir_block *block = def->parent_instr->block; - nir_foreach_use_including_if(use_src, def) { - if (use_src->is_if || - use_src->parent_instr->block != block || - use_src->parent_instr->type == nir_instr_type_phi) { - return false; - } - } - - return true; -} - -/** Lower all of the SSA defs in a block to registers - * - * This performs the very simple operation of blindly replacing all of the SSA - * defs in the given block with registers. If not used carefully, this may - * result in phi nodes with register sources which is technically invalid. - * Fortunately, the register-based into-SSA pass handles them anyway. - */ -bool -nir_lower_ssa_defs_to_regs_block(nir_block *block) -{ - nir_function_impl *impl = nir_cf_node_get_function(&block->cf_node); - nir_shader *shader = impl->function->shader; - - struct ssa_def_to_reg_state state = { - .impl = impl, - .progress = false, - }; - - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_ssa_undef) { - /* Undefs are just a read of something never written. */ - nir_ssa_undef_instr *undef = nir_instr_as_ssa_undef(instr); - nir_register *reg = create_reg_for_ssa_def(&undef->def, state.impl); - nir_ssa_def_rewrite_uses_src(&undef->def, nir_src_for_reg(reg)); - } else if (instr->type == nir_instr_type_load_const) { - /* Constant loads are SSA-only, we need to insert a move */ - nir_load_const_instr *load = nir_instr_as_load_const(instr); - nir_register *reg = create_reg_for_ssa_def(&load->def, state.impl); - nir_ssa_def_rewrite_uses_src(&load->def, nir_src_for_reg(reg)); - - nir_alu_instr *mov = nir_alu_instr_create(shader, nir_op_mov); - mov->src[0].src = nir_src_for_ssa(&load->def); - mov->dest.dest = nir_dest_for_reg(reg); - mov->dest.write_mask = (1 << reg->num_components) - 1; - nir_instr_insert(nir_after_instr(&load->instr), &mov->instr); - } else if (nir_foreach_ssa_def(instr, ssa_def_is_local_to_block, NULL)) { - /* If the SSA def produced by this instruction is only in the block - * in which it is defined and is not used by ifs or phis, then we - * don't have a reason to convert it to a register. - */ - } else { - nir_foreach_dest(instr, dest_replace_ssa_with_reg, &state); - } - } - - return state.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_info.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_info.c deleted file mode 100644 index b262831..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_info.c +++ /dev/null @@ -1,1127 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_deref.h" -#include "../../mesa/main/menums.h" - -#include "../../util/set.h" - -static bool -src_is_invocation_id(const nir_src *src) -{ - assert(src->is_ssa); - nir_ssa_scalar s = nir_ssa_scalar_resolved(src->ssa, 0); - return s.def->parent_instr->type == nir_instr_type_intrinsic && - nir_instr_as_intrinsic(s.def->parent_instr)->intrinsic == - nir_intrinsic_load_invocation_id; -} - -static bool -src_is_local_invocation_index(const nir_src *src) -{ - assert(src->is_ssa); - nir_ssa_scalar s = nir_ssa_scalar_resolved(src->ssa, 0); - return s.def->parent_instr->type == nir_instr_type_intrinsic && - nir_instr_as_intrinsic(s.def->parent_instr)->intrinsic == - nir_intrinsic_load_local_invocation_index; -} - -static void -get_deref_info(nir_shader *shader, nir_variable *var, nir_deref_instr *deref, - bool *cross_invocation, bool *indirect) -{ - *cross_invocation = false; - *indirect = false; - - const bool is_arrayed = nir_is_arrayed_io(var, shader->info.stage); - - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - assert(path.path[0]->deref_type == nir_deref_type_var); - nir_deref_instr **p = &path.path[1]; - - /* Vertex index is the outermost array index. */ - if (is_arrayed) { - assert((*p)->deref_type == nir_deref_type_array); - if (shader->info.stage == MESA_SHADER_TESS_CTRL) - *cross_invocation = !src_is_invocation_id(&(*p)->arr.index); - else if (shader->info.stage == MESA_SHADER_MESH) - *cross_invocation = !src_is_local_invocation_index(&(*p)->arr.index); - p++; - } - - /* We always lower indirect dereferences for "compact" array vars. */ - if (!path.path[0]->var->data.compact) { - /* Non-compact array vars: find out if they are indirect. */ - for (; *p; p++) { - if ((*p)->deref_type == nir_deref_type_array) { - *indirect |= !nir_src_is_const((*p)->arr.index); - } else if ((*p)->deref_type == nir_deref_type_struct) { - /* Struct indices are always constant. */ - } else { - unreachable("Unsupported deref type"); - } - } - } - - nir_deref_path_finish(&path); -} - -static void -set_io_mask(nir_shader *shader, nir_variable *var, int offset, int len, - nir_deref_instr *deref, bool is_output_read) -{ - for (int i = 0; i < len; i++) { - /* Varyings might not have been assigned values yet so abort. */ - if (var->data.location == -1) - return; - - int idx = var->data.location + offset + i; - bool is_patch_generic = var->data.patch && - idx != VARYING_SLOT_TESS_LEVEL_INNER && - idx != VARYING_SLOT_TESS_LEVEL_OUTER && - idx != VARYING_SLOT_BOUNDING_BOX0 && - idx != VARYING_SLOT_BOUNDING_BOX1; - uint64_t bitfield; - - if (is_patch_generic) { - /* Varyings might still have temp locations so abort */ - if (idx < VARYING_SLOT_PATCH0 || idx >= VARYING_SLOT_TESS_MAX) - return; - - bitfield = BITFIELD64_BIT(idx - VARYING_SLOT_PATCH0); - } - else { - /* Varyings might still have temp locations so abort */ - if (idx >= VARYING_SLOT_MAX) - return; - - bitfield = BITFIELD64_BIT(idx); - } - - bool cross_invocation; - bool indirect; - get_deref_info(shader, var, deref, &cross_invocation, &indirect); - - if (var->data.mode == nir_var_shader_in) { - if (is_patch_generic) { - shader->info.patch_inputs_read |= bitfield; - if (indirect) - shader->info.patch_inputs_read_indirectly |= bitfield; - } else { - shader->info.inputs_read |= bitfield; - if (indirect) - shader->info.inputs_read_indirectly |= bitfield; - } - - if (cross_invocation && shader->info.stage == MESA_SHADER_TESS_CTRL) - shader->info.tess.tcs_cross_invocation_inputs_read |= bitfield; - - if (shader->info.stage == MESA_SHADER_FRAGMENT) { - shader->info.fs.uses_sample_qualifier |= var->data.sample; - } - } else { - assert(var->data.mode == nir_var_shader_out); - if (is_output_read) { - if (is_patch_generic) { - shader->info.patch_outputs_read |= bitfield; - if (indirect) - shader->info.patch_outputs_accessed_indirectly |= bitfield; - } else { - shader->info.outputs_read |= bitfield; - if (indirect) - shader->info.outputs_accessed_indirectly |= bitfield; - } - - if (cross_invocation && shader->info.stage == MESA_SHADER_TESS_CTRL) - shader->info.tess.tcs_cross_invocation_outputs_read |= bitfield; - } else { - if (is_patch_generic) { - shader->info.patch_outputs_written |= bitfield; - if (indirect) - shader->info.patch_outputs_accessed_indirectly |= bitfield; - } else if (!var->data.read_only) { - shader->info.outputs_written |= bitfield; - if (indirect) - shader->info.outputs_accessed_indirectly |= bitfield; - } - } - - if (cross_invocation && shader->info.stage == MESA_SHADER_MESH) - shader->info.mesh.ms_cross_invocation_output_access |= bitfield; - - if (var->data.fb_fetch_output) { - shader->info.outputs_read |= bitfield; - if (shader->info.stage == MESA_SHADER_FRAGMENT) { - shader->info.fs.uses_fbfetch_output = true; - shader->info.fs.fbfetch_coherent = var->data.access & ACCESS_COHERENT; - } - } - - if (shader->info.stage == MESA_SHADER_FRAGMENT && - !is_output_read && var->data.index == 1) - shader->info.fs.color_is_dual_source = true; - } - } -} - -/** - * Mark an entire variable as used. Caller must ensure that the variable - * represents a shader input or output. - */ -static void -mark_whole_variable(nir_shader *shader, nir_variable *var, - nir_deref_instr *deref, bool is_output_read) -{ - const struct glsl_type *type = var->type; - - if (nir_is_arrayed_io(var, shader->info.stage) || - /* For NV_mesh_shader. */ - (shader->info.stage == MESA_SHADER_MESH && - var->data.location == VARYING_SLOT_PRIMITIVE_INDICES && - !var->data.per_primitive)) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - if (var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - const unsigned slots = - var->data.compact ? DIV_ROUND_UP(var->data.location_frac + glsl_get_length(type), 4) - : glsl_count_attribute_slots(type, false); - - set_io_mask(shader, var, 0, slots, deref, is_output_read); -} - -static unsigned -get_io_offset(nir_deref_instr *deref, nir_variable *var, bool is_arrayed, - bool skip_non_arrayed) -{ - if (var->data.compact) { - if (deref->deref_type == nir_deref_type_var) { - assert(glsl_type_is_array(var->type)); - return 0; - } - assert(deref->deref_type == nir_deref_type_array); - return nir_src_is_const(deref->arr.index) ? - (nir_src_as_uint(deref->arr.index) + var->data.location_frac) / 4u : - (unsigned)-1; - } - - unsigned offset = 0; - - for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type == nir_deref_type_array) { - if (is_arrayed && nir_deref_instr_parent(d)->deref_type == nir_deref_type_var) - break; - - if (!is_arrayed && skip_non_arrayed) - break; - - if (!nir_src_is_const(d->arr.index)) - return -1; - - offset += glsl_count_attribute_slots(d->type, false) * - nir_src_as_uint(d->arr.index); - } else if (d->deref_type == nir_deref_type_struct) { - const struct glsl_type *parent_type = nir_deref_instr_parent(d)->type; - for (unsigned i = 0; i < d->strct.index; i++) { - const struct glsl_type *field_type = glsl_get_struct_field(parent_type, i); - offset += glsl_count_attribute_slots(field_type, false); - } - } - } - - return offset; -} - -/** - * Try to mark a portion of the given varying as used. Caller must ensure - * that the variable represents a shader input or output. - * - * If the index can't be interpreted as a constant, or some other problem - * occurs, then nothing will be marked and false will be returned. - */ -static bool -try_mask_partial_io(nir_shader *shader, nir_variable *var, - nir_deref_instr *deref, bool is_output_read) -{ - const struct glsl_type *type = var->type; - bool is_arrayed = nir_is_arrayed_io(var, shader->info.stage); - bool skip_non_arrayed = shader->info.stage == MESA_SHADER_MESH; - - if (is_arrayed) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - /* Per view variables will be considered as a whole. */ - if (var->data.per_view) - return false; - - unsigned offset = get_io_offset(deref, var, is_arrayed, skip_non_arrayed); - if (offset == -1) - return false; - - const unsigned slots = - var->data.compact ? DIV_ROUND_UP(var->data.location_frac + glsl_get_length(type), 4) - : glsl_count_attribute_slots(type, false); - - if (offset >= slots) { - /* Constant index outside the bounds of the matrix/array. This could - * arise as a result of constant folding of a legal GLSL program. - * - * Even though the spec says that indexing outside the bounds of a - * matrix/array results in undefined behaviour, we don't want to pass - * out-of-range values to set_io_mask() (since this could result in - * slots that don't exist being marked as used), so just let the caller - * mark the whole variable as used. - */ - return false; - } - - unsigned len = glsl_count_attribute_slots(deref->type, false); - set_io_mask(shader, var, offset, len, deref, is_output_read); - return true; -} - -/** Returns true if the given intrinsic writes external memory - * - * Only returns true for writes to globally visible memory, not scratch and - * not shared. - */ -bool -nir_intrinsic_writes_external_memory(const nir_intrinsic_instr *instr) -{ - switch (instr->intrinsic) { - case nir_intrinsic_atomic_counter_inc: - case nir_intrinsic_atomic_counter_inc_deref: - case nir_intrinsic_atomic_counter_add: - case nir_intrinsic_atomic_counter_add_deref: - case nir_intrinsic_atomic_counter_pre_dec: - case nir_intrinsic_atomic_counter_pre_dec_deref: - case nir_intrinsic_atomic_counter_post_dec: - case nir_intrinsic_atomic_counter_post_dec_deref: - case nir_intrinsic_atomic_counter_min: - case nir_intrinsic_atomic_counter_min_deref: - case nir_intrinsic_atomic_counter_max: - case nir_intrinsic_atomic_counter_max_deref: - case nir_intrinsic_atomic_counter_and: - case nir_intrinsic_atomic_counter_and_deref: - case nir_intrinsic_atomic_counter_or: - case nir_intrinsic_atomic_counter_or_deref: - case nir_intrinsic_atomic_counter_xor: - case nir_intrinsic_atomic_counter_xor_deref: - case nir_intrinsic_atomic_counter_exchange: - case nir_intrinsic_atomic_counter_exchange_deref: - case nir_intrinsic_atomic_counter_comp_swap: - case nir_intrinsic_atomic_counter_comp_swap_deref: - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_dec_wrap: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_inc_wrap: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_bindless_image_store_raw_intel: - case nir_intrinsic_global_atomic_add: - case nir_intrinsic_global_atomic_and: - case nir_intrinsic_global_atomic_comp_swap: - case nir_intrinsic_global_atomic_exchange: - case nir_intrinsic_global_atomic_fadd: - case nir_intrinsic_global_atomic_fcomp_swap: - case nir_intrinsic_global_atomic_fmax: - case nir_intrinsic_global_atomic_fmin: - case nir_intrinsic_global_atomic_imax: - case nir_intrinsic_global_atomic_imin: - case nir_intrinsic_global_atomic_or: - case nir_intrinsic_global_atomic_umax: - case nir_intrinsic_global_atomic_umin: - case nir_intrinsic_global_atomic_xor: - case nir_intrinsic_global_atomic_add_ir3: - case nir_intrinsic_global_atomic_and_ir3: - case nir_intrinsic_global_atomic_comp_swap_ir3: - case nir_intrinsic_global_atomic_exchange_ir3: - case nir_intrinsic_global_atomic_imax_ir3: - case nir_intrinsic_global_atomic_imin_ir3: - case nir_intrinsic_global_atomic_or_ir3: - case nir_intrinsic_global_atomic_umax_ir3: - case nir_intrinsic_global_atomic_umin_ir3: - case nir_intrinsic_global_atomic_xor_ir3: - case nir_intrinsic_image_atomic_add: - case nir_intrinsic_image_atomic_and: - case nir_intrinsic_image_atomic_comp_swap: - case nir_intrinsic_image_atomic_dec_wrap: - case nir_intrinsic_image_atomic_exchange: - case nir_intrinsic_image_atomic_fadd: - case nir_intrinsic_image_atomic_imax: - case nir_intrinsic_image_atomic_imin: - case nir_intrinsic_image_atomic_inc_wrap: - case nir_intrinsic_image_atomic_or: - case nir_intrinsic_image_atomic_umax: - case nir_intrinsic_image_atomic_umin: - case nir_intrinsic_image_atomic_xor: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_dec_wrap: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_inc_wrap: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_store_raw_intel: - case nir_intrinsic_image_store: - case nir_intrinsic_image_store_raw_intel: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_add_ir3: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_and_ir3: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_comp_swap_ir3: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_exchange_ir3: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_imax_ir3: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_imin_ir3: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_or_ir3: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_umax_ir3: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_umin_ir3: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_xor_ir3: - case nir_intrinsic_store_global: - case nir_intrinsic_store_global_ir3: - case nir_intrinsic_store_global_amd: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_store_ssbo_ir3: - return true; - - case nir_intrinsic_store_deref: - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_fcomp_swap: - return nir_deref_mode_may_be(nir_src_as_deref(instr->src[0]), - nir_var_mem_ssbo | nir_var_mem_global); - - default: - return false; - } -} - -static bool -intrinsic_is_bindless(nir_intrinsic_instr *instr) -{ - switch (instr->intrinsic) { - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_dec_wrap: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_fmax: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_inc_wrap: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_descriptor_amd: - case nir_intrinsic_bindless_image_format: - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_bindless_image_load_raw_intel: - case nir_intrinsic_bindless_image_order: - case nir_intrinsic_bindless_image_samples: - case nir_intrinsic_bindless_image_samples_identical: - case nir_intrinsic_bindless_image_size: - case nir_intrinsic_bindless_image_sparse_load: - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_bindless_image_store_raw_intel: - case nir_intrinsic_bindless_resource_ir3: - return true; - default: - break; - } - return false; -} - -static void -gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader, - void *dead_ctx) -{ - uint64_t slot_mask = 0; - uint16_t slot_mask_16bit = 0; - - if (nir_intrinsic_infos[instr->intrinsic].index_map[NIR_INTRINSIC_IO_SEMANTICS] > 0) { - nir_io_semantics semantics = nir_intrinsic_io_semantics(instr); - - if (semantics.location >= VARYING_SLOT_PATCH0 && - semantics.location <= VARYING_SLOT_PATCH31) { - /* Generic per-patch I/O. */ - assert((shader->info.stage == MESA_SHADER_TESS_EVAL && - instr->intrinsic == nir_intrinsic_load_input) || - (shader->info.stage == MESA_SHADER_TESS_CTRL && - (instr->intrinsic == nir_intrinsic_load_output || - instr->intrinsic == nir_intrinsic_store_output))); - - semantics.location -= VARYING_SLOT_PATCH0; - } - - if (semantics.location >= VARYING_SLOT_VAR0_16BIT && - semantics.location <= VARYING_SLOT_VAR15_16BIT) { - /* Convert num_slots from the units of half vectors to full vectors. */ - unsigned num_slots = (semantics.num_slots + semantics.high_16bits + 1) / 2; - slot_mask_16bit = - BITFIELD_RANGE(semantics.location - VARYING_SLOT_VAR0_16BIT, num_slots); - } else { - slot_mask = BITFIELD64_RANGE(semantics.location, semantics.num_slots); - assert(util_bitcount64(slot_mask) == semantics.num_slots); - } - } - - switch (instr->intrinsic) { - case nir_intrinsic_demote: - case nir_intrinsic_demote_if: - shader->info.fs.uses_demote = true; - /* quads with helper lanes only might be discarded entirely */ - case nir_intrinsic_discard: - case nir_intrinsic_discard_if: - case nir_intrinsic_terminate: - case nir_intrinsic_terminate_if: - /* Freedreno uses discard_if() to end GS invocations that don't produce - * a vertex and RADV uses terminate() to end ray-tracing shaders, - * so only set uses_discard for fragment shaders. - */ - if (shader->info.stage == MESA_SHADER_FRAGMENT) - shader->info.fs.uses_discard = true; - break; - - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_vertex: - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: - case nir_intrinsic_copy_deref:{ - nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - if (nir_deref_mode_is_one_of(deref, nir_var_shader_in | - nir_var_shader_out)) { - nir_variable *var = nir_deref_instr_get_variable(deref); - bool is_output_read = false; - if (var->data.mode == nir_var_shader_out && - instr->intrinsic == nir_intrinsic_load_deref) - is_output_read = true; - - if (!try_mask_partial_io(shader, var, deref, is_output_read)) - mark_whole_variable(shader, var, deref, is_output_read); - - /* We need to track which input_reads bits correspond to a - * dvec3/dvec4 input attribute */ - if (shader->info.stage == MESA_SHADER_VERTEX && - var->data.mode == nir_var_shader_in && - glsl_type_is_dual_slot(glsl_without_array(var->type))) { - for (unsigned i = 0; i < glsl_count_attribute_slots(var->type, false); i++) { - int idx = var->data.location + i; - shader->info.vs.double_inputs |= BITFIELD64_BIT(idx); - } - } - } - if (nir_intrinsic_writes_external_memory(instr)) - shader->info.writes_memory = true; - break; - } - case nir_intrinsic_image_deref_load: { - nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - enum glsl_sampler_dim dim = glsl_get_sampler_dim(glsl_without_array(var->type)); - if (dim != GLSL_SAMPLER_DIM_SUBPASS && - dim != GLSL_SAMPLER_DIM_SUBPASS_MS) - break; - - var->data.fb_fetch_output = true; - shader->info.fs.uses_fbfetch_output = true; - break; - } - - case nir_intrinsic_load_input: - case nir_intrinsic_load_per_vertex_input: - case nir_intrinsic_load_input_vertex: - case nir_intrinsic_load_interpolated_input: - if (shader->info.stage == MESA_SHADER_TESS_EVAL && - instr->intrinsic == nir_intrinsic_load_input) { - shader->info.patch_inputs_read |= slot_mask; - if (!nir_src_is_const(*nir_get_io_offset_src(instr))) - shader->info.patch_inputs_read_indirectly |= slot_mask; - } else { - shader->info.inputs_read |= slot_mask; - shader->info.inputs_read_16bit |= slot_mask_16bit; - if (!nir_src_is_const(*nir_get_io_offset_src(instr))) { - shader->info.inputs_read_indirectly |= slot_mask; - shader->info.inputs_read_indirectly_16bit |= slot_mask_16bit; - } - } - - if (shader->info.stage == MESA_SHADER_TESS_CTRL && - instr->intrinsic == nir_intrinsic_load_per_vertex_input && - !src_is_invocation_id(nir_get_io_arrayed_index_src(instr))) - shader->info.tess.tcs_cross_invocation_inputs_read |= slot_mask; - break; - - case nir_intrinsic_load_output: - case nir_intrinsic_load_per_vertex_output: - case nir_intrinsic_load_per_primitive_output: - if (shader->info.stage == MESA_SHADER_TESS_CTRL && - instr->intrinsic == nir_intrinsic_load_output) { - shader->info.patch_outputs_read |= slot_mask; - if (!nir_src_is_const(*nir_get_io_offset_src(instr))) - shader->info.patch_outputs_accessed_indirectly |= slot_mask; - } else { - shader->info.outputs_read |= slot_mask; - shader->info.outputs_read_16bit |= slot_mask_16bit; - if (!nir_src_is_const(*nir_get_io_offset_src(instr))) { - shader->info.outputs_accessed_indirectly |= slot_mask; - shader->info.outputs_accessed_indirectly_16bit |= slot_mask_16bit; - } - } - - if (shader->info.stage == MESA_SHADER_TESS_CTRL && - instr->intrinsic == nir_intrinsic_load_per_vertex_output && - !src_is_invocation_id(nir_get_io_arrayed_index_src(instr))) - shader->info.tess.tcs_cross_invocation_outputs_read |= slot_mask; - - /* NV_mesh_shader: mesh shaders can load their outputs. */ - if (shader->info.stage == MESA_SHADER_MESH && - (instr->intrinsic == nir_intrinsic_load_per_vertex_output || - instr->intrinsic == nir_intrinsic_load_per_primitive_output) && - !src_is_local_invocation_index(nir_get_io_arrayed_index_src(instr))) - shader->info.mesh.ms_cross_invocation_output_access |= slot_mask; - - if (shader->info.stage == MESA_SHADER_FRAGMENT && - nir_intrinsic_io_semantics(instr).fb_fetch_output) - shader->info.fs.uses_fbfetch_output = true; - break; - - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_vertex_output: - case nir_intrinsic_store_per_primitive_output: - if (shader->info.stage == MESA_SHADER_TESS_CTRL && - instr->intrinsic == nir_intrinsic_store_output) { - shader->info.patch_outputs_written |= slot_mask; - if (!nir_src_is_const(*nir_get_io_offset_src(instr))) - shader->info.patch_outputs_accessed_indirectly |= slot_mask; - } else { - shader->info.outputs_written |= slot_mask; - shader->info.outputs_written_16bit |= slot_mask_16bit; - if (!nir_src_is_const(*nir_get_io_offset_src(instr))) { - shader->info.outputs_accessed_indirectly |= slot_mask; - shader->info.outputs_accessed_indirectly_16bit |= slot_mask_16bit; - } - } - - if (shader->info.stage == MESA_SHADER_MESH && - (instr->intrinsic == nir_intrinsic_store_per_vertex_output || - instr->intrinsic == nir_intrinsic_store_per_primitive_output) && - !src_is_local_invocation_index(nir_get_io_arrayed_index_src(instr))) - shader->info.mesh.ms_cross_invocation_output_access |= slot_mask; - - if (shader->info.stage == MESA_SHADER_FRAGMENT && - nir_intrinsic_io_semantics(instr).dual_source_blend_index) - shader->info.fs.color_is_dual_source = true; - break; - - case nir_intrinsic_load_color0: - case nir_intrinsic_load_color1: - shader->info.inputs_read |= - BITFIELD64_BIT(VARYING_SLOT_COL0 << - (instr->intrinsic == nir_intrinsic_load_color1)); - - case nir_intrinsic_load_subgroup_size: - case nir_intrinsic_load_subgroup_invocation: - case nir_intrinsic_load_subgroup_eq_mask: - case nir_intrinsic_load_subgroup_ge_mask: - case nir_intrinsic_load_subgroup_gt_mask: - case nir_intrinsic_load_subgroup_le_mask: - case nir_intrinsic_load_subgroup_lt_mask: - case nir_intrinsic_load_num_subgroups: - case nir_intrinsic_load_subgroup_id: - case nir_intrinsic_load_vertex_id: - case nir_intrinsic_load_instance_id: - case nir_intrinsic_load_vertex_id_zero_base: - case nir_intrinsic_load_base_vertex: - case nir_intrinsic_load_first_vertex: - case nir_intrinsic_load_is_indexed_draw: - case nir_intrinsic_load_base_instance: - case nir_intrinsic_load_draw_id: - case nir_intrinsic_load_invocation_id: - case nir_intrinsic_load_frag_coord: - case nir_intrinsic_load_frag_shading_rate: - case nir_intrinsic_load_fully_covered: - case nir_intrinsic_load_point_coord: - case nir_intrinsic_load_line_coord: - case nir_intrinsic_load_front_face: - case nir_intrinsic_load_sample_id: - case nir_intrinsic_load_sample_pos: - case nir_intrinsic_load_sample_pos_or_center: - case nir_intrinsic_load_sample_mask_in: - case nir_intrinsic_load_helper_invocation: - case nir_intrinsic_load_tess_coord: - case nir_intrinsic_load_patch_vertices_in: - case nir_intrinsic_load_primitive_id: - case nir_intrinsic_load_tess_level_outer: - case nir_intrinsic_load_tess_level_inner: - case nir_intrinsic_load_tess_level_outer_default: - case nir_intrinsic_load_tess_level_inner_default: - case nir_intrinsic_load_local_invocation_id: - case nir_intrinsic_load_local_invocation_index: - case nir_intrinsic_load_global_invocation_id: - case nir_intrinsic_load_base_global_invocation_id: - case nir_intrinsic_load_global_invocation_index: - case nir_intrinsic_load_workgroup_id: - case nir_intrinsic_load_workgroup_index: - case nir_intrinsic_load_num_workgroups: - case nir_intrinsic_load_workgroup_size: - case nir_intrinsic_load_work_dim: - case nir_intrinsic_load_user_data_amd: - case nir_intrinsic_load_view_index: - case nir_intrinsic_load_barycentric_model: - case nir_intrinsic_load_ray_launch_id: - case nir_intrinsic_load_ray_launch_size: - case nir_intrinsic_load_ray_launch_size_addr_amd: - case nir_intrinsic_load_ray_world_origin: - case nir_intrinsic_load_ray_world_direction: - case nir_intrinsic_load_ray_object_origin: - case nir_intrinsic_load_ray_object_direction: - case nir_intrinsic_load_ray_t_min: - case nir_intrinsic_load_ray_t_max: - case nir_intrinsic_load_ray_object_to_world: - case nir_intrinsic_load_ray_world_to_object: - case nir_intrinsic_load_ray_hit_kind: - case nir_intrinsic_load_ray_flags: - case nir_intrinsic_load_ray_geometry_index: - case nir_intrinsic_load_ray_instance_custom_index: - case nir_intrinsic_load_mesh_view_count: - case nir_intrinsic_load_gs_header_ir3: - case nir_intrinsic_load_tcs_header_ir3: - BITSET_SET(shader->info.system_values_read, - nir_system_value_from_intrinsic(instr->intrinsic)); - break; - - case nir_intrinsic_load_barycentric_pixel: - if (nir_intrinsic_interp_mode(instr) == INTERP_MODE_SMOOTH || - nir_intrinsic_interp_mode(instr) == INTERP_MODE_NONE) { - BITSET_SET(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL); - } else if (nir_intrinsic_interp_mode(instr) == INTERP_MODE_NOPERSPECTIVE) { - BITSET_SET(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL); - } - break; - - case nir_intrinsic_load_barycentric_centroid: - if (nir_intrinsic_interp_mode(instr) == INTERP_MODE_SMOOTH || - nir_intrinsic_interp_mode(instr) == INTERP_MODE_NONE) { - BITSET_SET(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID); - } else if (nir_intrinsic_interp_mode(instr) == INTERP_MODE_NOPERSPECTIVE) { - BITSET_SET(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID); - } - break; - - case nir_intrinsic_load_barycentric_sample: - if (nir_intrinsic_interp_mode(instr) == INTERP_MODE_SMOOTH || - nir_intrinsic_interp_mode(instr) == INTERP_MODE_NONE) { - BITSET_SET(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE); - } else if (nir_intrinsic_interp_mode(instr) == INTERP_MODE_NOPERSPECTIVE) { - BITSET_SET(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE); - } - if (shader->info.stage == MESA_SHADER_FRAGMENT) - shader->info.fs.uses_sample_qualifier = true; - break; - - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - case nir_intrinsic_quad_swizzle_amd: - if (shader->info.stage == MESA_SHADER_FRAGMENT) - shader->info.fs.needs_quad_helper_invocations = true; - break; - - case nir_intrinsic_vote_any: - case nir_intrinsic_vote_all: - case nir_intrinsic_vote_feq: - case nir_intrinsic_vote_ieq: - case nir_intrinsic_ballot: - case nir_intrinsic_ballot_bit_count_exclusive: - case nir_intrinsic_ballot_bit_count_inclusive: - case nir_intrinsic_ballot_bitfield_extract: - case nir_intrinsic_ballot_bit_count_reduce: - case nir_intrinsic_ballot_find_lsb: - case nir_intrinsic_ballot_find_msb: - case nir_intrinsic_first_invocation: - case nir_intrinsic_read_invocation: - case nir_intrinsic_read_first_invocation: - case nir_intrinsic_elect: - case nir_intrinsic_reduce: - case nir_intrinsic_inclusive_scan: - case nir_intrinsic_exclusive_scan: - case nir_intrinsic_shuffle: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_write_invocation_amd: - if (shader->info.stage == MESA_SHADER_FRAGMENT) - shader->info.fs.needs_all_helper_invocations = true; - if (shader->info.stage == MESA_SHADER_COMPUTE || - gl_shader_stage_is_mesh(shader->info.stage)) - shader->info.uses_wide_subgroup_intrinsics = true; - break; - - case nir_intrinsic_end_primitive: - case nir_intrinsic_end_primitive_with_counter: - assert(shader->info.stage == MESA_SHADER_GEOMETRY); - shader->info.gs.uses_end_primitive = 1; - - - case nir_intrinsic_emit_vertex: - case nir_intrinsic_emit_vertex_with_counter: - shader->info.gs.active_stream_mask |= 1 << nir_intrinsic_stream_id(instr); - - break; - - case nir_intrinsic_control_barrier: - shader->info.uses_control_barrier = true; - break; - - case nir_intrinsic_scoped_barrier: - shader->info.uses_control_barrier |= - nir_intrinsic_execution_scope(instr) != NIR_SCOPE_NONE; - - shader->info.uses_memory_barrier |= - nir_intrinsic_memory_scope(instr) != NIR_SCOPE_NONE; - break; - - case nir_intrinsic_memory_barrier: - case nir_intrinsic_group_memory_barrier: - case nir_intrinsic_memory_barrier_atomic_counter: - case nir_intrinsic_memory_barrier_buffer: - case nir_intrinsic_memory_barrier_image: - case nir_intrinsic_memory_barrier_shared: - case nir_intrinsic_memory_barrier_tcs_patch: - shader->info.uses_memory_barrier = true; - break; - - case nir_intrinsic_store_zs_agx: - shader->info.outputs_written |= BITFIELD64_BIT(FRAG_RESULT_DEPTH) | - BITFIELD64_BIT(FRAG_RESULT_STENCIL); - break; - - case nir_intrinsic_launch_mesh_workgroups: - case nir_intrinsic_launch_mesh_workgroups_with_payload_deref: { - for (unsigned i = 0; i < 3; ++i) { - nir_ssa_scalar dim = nir_ssa_scalar_resolved(instr->src[0].ssa, i); - if (nir_ssa_scalar_is_const(dim)) - shader->info.mesh.ts_mesh_dispatch_dimensions[i] = - nir_ssa_scalar_as_uint(dim); - } - break; - } - - default: - shader->info.uses_bindless |= intrinsic_is_bindless(instr); - if (nir_intrinsic_writes_external_memory(instr)) - shader->info.writes_memory = true; - - if (instr->intrinsic == nir_intrinsic_image_size || - instr->intrinsic == nir_intrinsic_image_samples || - instr->intrinsic == nir_intrinsic_image_deref_size || - instr->intrinsic == nir_intrinsic_image_deref_samples || - instr->intrinsic == nir_intrinsic_bindless_image_size || - instr->intrinsic == nir_intrinsic_bindless_image_samples) - shader->info.uses_resource_info_query = true; - break; - } -} - -static void -gather_tex_info(nir_tex_instr *instr, nir_shader *shader) -{ - if (shader->info.stage == MESA_SHADER_FRAGMENT && - nir_tex_instr_has_implicit_derivative(instr)) - shader->info.fs.needs_quad_helper_invocations = true; - - if (nir_tex_instr_src_index(instr, nir_tex_src_texture_handle) != -1 || - nir_tex_instr_src_index(instr, nir_tex_src_sampler_handle) != -1) - shader->info.uses_bindless = true; - - switch (instr->op) { - case nir_texop_tg4: - shader->info.uses_texture_gather = true; - break; - case nir_texop_txs: - case nir_texop_query_levels: - case nir_texop_texture_samples: - shader->info.uses_resource_info_query = true; - break; - default: - break; - } -} - -static void -gather_alu_info(nir_alu_instr *instr, nir_shader *shader) -{ - switch (instr->op) { - case nir_op_fddx: - case nir_op_fddy: - shader->info.uses_fddx_fddy = true; - - case nir_op_fddx_fine: - case nir_op_fddy_fine: - case nir_op_fddx_coarse: - case nir_op_fddy_coarse: - if (shader->info.stage == MESA_SHADER_FRAGMENT) - shader->info.fs.needs_quad_helper_invocations = true; - break; - default: - break; - } - - const nir_op_info *info = &nir_op_infos[instr->op]; - - for (unsigned i = 0; i < info->num_inputs; i++) { - if (nir_alu_type_get_base_type(info->input_types[i]) == nir_type_float) - shader->info.bit_sizes_float |= nir_src_bit_size(instr->src[i].src); - else - shader->info.bit_sizes_int |= nir_src_bit_size(instr->src[i].src); - } - if (nir_alu_type_get_base_type(info->output_type) == nir_type_float) - shader->info.bit_sizes_float |= nir_dest_bit_size(instr->dest.dest); - else - shader->info.bit_sizes_int |= nir_dest_bit_size(instr->dest.dest); -} - -static void -gather_func_info(nir_function_impl *func, nir_shader *shader, - struct set *visited_funcs, void *dead_ctx) -{ - if (_mesa_set_search(visited_funcs, func)) - return; - - _mesa_set_add(visited_funcs, func); - - nir_foreach_block(block, func) { - nir_foreach_instr(instr, block) { - switch (instr->type) { - case nir_instr_type_alu: - gather_alu_info(nir_instr_as_alu(instr), shader); - break; - case nir_instr_type_intrinsic: - gather_intrinsic_info(nir_instr_as_intrinsic(instr), shader, dead_ctx); - break; - case nir_instr_type_tex: - gather_tex_info(nir_instr_as_tex(instr), shader); - break; - case nir_instr_type_call: { - nir_call_instr *call = nir_instr_as_call(instr); - nir_function_impl *impl = call->callee->impl; - - assert(impl || !"nir_shader_gather_info only works with linked shaders"); - gather_func_info(impl, shader, visited_funcs, dead_ctx); - break; - } - default: - break; - } - } - } -} - -void -nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint) -{ - shader->info.num_textures = 0; - shader->info.num_images = 0; - shader->info.bit_sizes_float = 0; - shader->info.bit_sizes_int = 0; - shader->info.uses_bindless = false; - - nir_foreach_variable_with_modes(var, shader, nir_var_image | nir_var_uniform) { - if (var->data.bindless) - shader->info.uses_bindless = true; - /* Bindless textures and images don't use non-bindless slots. - * Interface blocks imply inputs, outputs, UBO, or SSBO, which can only - * mean bindless. - */ - if (var->data.bindless || var->interface_type) - continue; - - shader->info.num_textures += glsl_type_get_sampler_count(var->type) + - glsl_type_get_texture_count(var->type); - shader->info.num_images += glsl_type_get_image_count(var->type); - } - - /* these types may not initially be marked bindless */ - nir_foreach_variable_with_modes(var, shader, nir_var_shader_in | nir_var_shader_out) { - const struct glsl_type *type = glsl_without_array(var->type); - if (glsl_type_is_sampler(type) || glsl_type_is_image(type)) - shader->info.uses_bindless = true; - } - - shader->info.inputs_read = 0; - shader->info.outputs_written = 0; - shader->info.outputs_read = 0; - shader->info.inputs_read_16bit = 0; - shader->info.outputs_written_16bit = 0; - shader->info.outputs_read_16bit = 0; - shader->info.inputs_read_indirectly_16bit = 0; - shader->info.outputs_accessed_indirectly_16bit = 0; - shader->info.patch_outputs_read = 0; - shader->info.patch_inputs_read = 0; - shader->info.patch_outputs_written = 0; - BITSET_ZERO(shader->info.system_values_read); - shader->info.inputs_read_indirectly = 0; - shader->info.outputs_accessed_indirectly = 0; - shader->info.patch_inputs_read_indirectly = 0; - shader->info.patch_outputs_accessed_indirectly = 0; - - shader->info.uses_resource_info_query = false; - - if (shader->info.stage == MESA_SHADER_VERTEX) { - shader->info.vs.double_inputs = 0; - } - if (shader->info.stage == MESA_SHADER_FRAGMENT) { - shader->info.fs.uses_sample_qualifier = false; - shader->info.fs.uses_discard = false; - shader->info.fs.uses_demote = false; - shader->info.fs.color_is_dual_source = false; - shader->info.fs.uses_fbfetch_output = false; - shader->info.fs.needs_quad_helper_invocations = false; - shader->info.fs.needs_all_helper_invocations = false; - } - if (shader->info.stage == MESA_SHADER_TESS_CTRL) { - shader->info.tess.tcs_cross_invocation_inputs_read = 0; - shader->info.tess.tcs_cross_invocation_outputs_read = 0; - } - if (shader->info.stage == MESA_SHADER_MESH) { - shader->info.mesh.ms_cross_invocation_output_access = 0; - } - if (shader->info.stage == MESA_SHADER_TASK) { - shader->info.mesh.ts_mesh_dispatch_dimensions[0] = 0; - shader->info.mesh.ts_mesh_dispatch_dimensions[1] = 0; - shader->info.mesh.ts_mesh_dispatch_dimensions[2] = 0; - } - - if (shader->info.stage != MESA_SHADER_FRAGMENT) - shader->info.writes_memory = shader->info.has_transform_feedback_varyings; - - void *dead_ctx = ralloc_context(NULL); - struct set *visited_funcs = _mesa_pointer_set_create(dead_ctx); - gather_func_info(entrypoint, shader, visited_funcs, dead_ctx); - ralloc_free(dead_ctx); - - shader->info.per_primitive_outputs = 0; - shader->info.per_view_outputs = 0; - nir_foreach_shader_out_variable(var, shader) { - if (var->data.per_primitive) { - assert(shader->info.stage == MESA_SHADER_MESH); - assert(nir_is_arrayed_io(var, shader->info.stage)); - const unsigned slots = - glsl_count_attribute_slots(glsl_get_array_element(var->type), false); - shader->info.per_primitive_outputs |= BITFIELD64_RANGE(var->data.location, slots); - } - if (var->data.per_view) { - const unsigned slots = - glsl_count_attribute_slots(glsl_get_array_element(var->type), false); - shader->info.per_view_outputs |= BITFIELD64_RANGE(var->data.location, slots); - } - } - - shader->info.per_primitive_inputs = 0; - if (shader->info.stage == MESA_SHADER_FRAGMENT) { - nir_foreach_shader_in_variable(var, shader) { - if (var->data.per_primitive) { - const unsigned slots = - glsl_count_attribute_slots(var->type, false); - shader->info.per_primitive_inputs |= BITFIELD64_RANGE(var->data.location, slots); - } - } - } - - shader->info.ray_queries = 0; - nir_foreach_variable_in_shader(var, shader) { - if (!var->data.ray_query) - continue; - - shader->info.ray_queries += MAX2(glsl_get_aoa_size(var->type), 1); - } - nir_foreach_function(func, shader) { - if (!func->impl) - continue; - nir_foreach_function_temp_variable(var, func->impl) { - if (!var->data.ray_query) - continue; - - shader->info.ray_queries += MAX2(glsl_get_aoa_size(var->type), 1); - } - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_ssa_types.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_ssa_types.c deleted file mode 100644 index 749dca8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_ssa_types.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "../../util/bitset.h" - -static void -set_type(unsigned idx, nir_alu_type type, BITSET_WORD *float_types, - BITSET_WORD *int_types, bool *progress) -{ - switch (nir_alu_type_get_base_type(type)) { - case nir_type_bool: - case nir_type_int: - case nir_type_uint: - if (int_types && !BITSET_TEST(int_types, idx)) { - *progress = true; - BITSET_SET(int_types, idx); - } - break; - - case nir_type_float: - if (float_types && !BITSET_TEST(float_types, idx)) { - *progress = true; - BITSET_SET(float_types, idx); - } - break; - - default: - unreachable("Invalid base nir_alu_type"); - } -} - -static void -copy_type(unsigned src, unsigned dst, bool src_is_sink, - BITSET_WORD *types, bool *progress) -{ - if (!types) - return; - - if (BITSET_TEST(types, dst)) { - if (BITSET_TEST(types, src)) - return; - BITSET_SET(types, src); - *progress = true; - } else if (BITSET_TEST(types, src) && !src_is_sink) { - BITSET_SET(types, dst); - *progress = true; - } -} - -static void -copy_types(nir_src src, nir_dest *dest, BITSET_WORD *float_types, - BITSET_WORD *int_types, bool *progress) -{ - bool src_is_sink = nir_src_is_const(src) || nir_src_is_undef(src); - copy_type(src.ssa->index, dest->ssa.index, src_is_sink, float_types, progress); - copy_type(src.ssa->index, dest->ssa.index, src_is_sink, int_types, progress); -} - -/** Gather up ALU types for SSA values - * - * This pass attempts to determine, for each SSA value, the type of data (int - * or float) that will be stored in it. The pass is greedy in the sense that - * it just assigns intness or floatness to types without any attempt to sort - * out the interesting cases where a given type may be both. - * - * The output of the pass is a pair of bitsets which has the intness or - * floatness of each SSA value recorded by index. It is the responsibility of - * the caller to index the SSA defs using nir_index_ssa_defs and allocate the - * bitsets. Either bitset is allowed to be NULL in which case no data is - * recorded for that type. - */ -void -nir_gather_ssa_types(nir_function_impl *impl, - BITSET_WORD *float_types, - BITSET_WORD *int_types) -{ - bool progress; - do { - progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - assert(alu->dest.dest.is_ssa); - const nir_op_info *info = &nir_op_infos[alu->op]; - switch (alu->op) { - case nir_op_mov: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_vec5: - case nir_op_vec8: - case nir_op_vec16: - for (unsigned i = 0; i < info->num_inputs; i++) { - copy_types(alu->src[i].src, &alu->dest.dest, - float_types, int_types, &progress); - } - break; - - case nir_op_bcsel: - case nir_op_b32csel: - set_type(alu->src[0].src.ssa->index, nir_type_bool, - float_types, int_types, &progress); - copy_types(alu->src[1].src, &alu->dest.dest, - float_types, int_types, &progress); - copy_types(alu->src[2].src, &alu->dest.dest, - float_types, int_types, &progress); - break; - - default: - for (unsigned i = 0; i < info->num_inputs; i++) { - assert(alu->src[i].src.is_ssa); - set_type(alu->src[i].src.ssa->index, info->input_types[i], - float_types, int_types, &progress); - } - set_type(alu->dest.dest.ssa.index, info->output_type, - float_types, int_types, &progress); - } - break; - } - - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - for (unsigned i = 0; i < tex->num_srcs; i++) { - assert(tex->src[i].src.is_ssa); - set_type(tex->src[i].src.ssa->index, - nir_tex_instr_src_type(tex, i), - float_types, int_types, &progress); - } - assert(tex->dest.is_ssa); - set_type(tex->dest.ssa.index, tex->dest_type, - float_types, int_types, &progress); - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - /* We could go nuts here, but we'll just handle a few simple - * cases and let everything else be untyped. - */ - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - - assert(intrin->dest.is_ssa); - set_type(intrin->dest.ssa.index, - nir_get_nir_type_for_glsl_type(deref->type), - float_types, int_types, &progress); - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - - assert(intrin->src[1].is_ssa); - set_type(intrin->src[1].ssa->index, - nir_get_nir_type_for_glsl_type(deref->type), - float_types, int_types, &progress); - break; - } - - case nir_intrinsic_load_input: - case nir_intrinsic_load_uniform: - assert(intrin->dest.is_ssa); - set_type(intrin->dest.ssa.index, - nir_intrinsic_dest_type(intrin), - float_types, int_types, &progress); - break; - - case nir_intrinsic_store_output: - assert(intrin->src[0].is_ssa); - set_type(intrin->src[0].ssa->index, - nir_intrinsic_src_type(intrin), - float_types, int_types, &progress); - break; - - default: - break; - } - - /* For the most part, we leave other intrinsics alone. Most - * of them don't matter in OpenGL ES 2.0 drivers anyway. - * However, we should at least check if this is some sort of - * IO intrinsic and flag it's offset and index sources. - */ - nir_src *offset_src = nir_get_io_offset_src(intrin); - if (offset_src) { - assert(offset_src->is_ssa); - set_type(offset_src->ssa->index, nir_type_int, - float_types, int_types, &progress); - } - break; - } - - case nir_instr_type_phi: { - nir_phi_instr *phi = nir_instr_as_phi(instr); - assert(phi->dest.is_ssa); - nir_foreach_phi_src(src, phi) { - copy_types(src->src, &phi->dest, - float_types, int_types, &progress); - } - break; - } - - default: - break; - } - } - } - } while (progress); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_xfb_info.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_xfb_info.c deleted file mode 100644 index 81d4809..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gather_xfb_info.c +++ /dev/null @@ -1,487 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_xfb_info.h" - -#include "../../util/u_dynarray.h" -#include "../../util/u_math.h" - -static void -add_var_xfb_varying(nir_xfb_info *xfb, - nir_xfb_varyings_info *varyings, - unsigned buffer, - unsigned offset, - const struct glsl_type *type) -{ - if (varyings == NULL) - return; - - nir_xfb_varying_info *varying = &varyings->varyings[varyings->varying_count++]; - - varying->type = type; - varying->buffer = buffer; - varying->offset = offset; - xfb->buffers[buffer].varying_count++; -} - - -static nir_xfb_info * -nir_xfb_info_create(void *mem_ctx, uint16_t output_count) -{ - return rzalloc_size(mem_ctx, nir_xfb_info_size(output_count)); -} - -static size_t -nir_xfb_varyings_info_size(uint16_t varying_count) -{ - return sizeof(nir_xfb_info) + sizeof(nir_xfb_varying_info) * varying_count; -} - -static nir_xfb_varyings_info * -nir_xfb_varyings_info_create(void *mem_ctx, uint16_t varying_count) -{ - return rzalloc_size(mem_ctx, nir_xfb_varyings_info_size(varying_count)); -} - -static void -add_var_xfb_outputs(nir_xfb_info *xfb, - nir_xfb_varyings_info *varyings, - nir_variable *var, - unsigned buffer, - unsigned *location, - unsigned *offset, - const struct glsl_type *type, - bool varying_added) -{ - /* If this type contains a 64-bit value, align to 8 bytes */ - if (glsl_type_contains_64bit(type)) - *offset = ALIGN_POT(*offset, 8); - - if (glsl_type_is_array_or_matrix(type) && !var->data.compact) { - unsigned length = glsl_get_length(type); - - const struct glsl_type *child_type = glsl_get_array_element(type); - if (!glsl_type_is_array(child_type) && - !glsl_type_is_struct(child_type)) { - - add_var_xfb_varying(xfb, varyings, buffer, *offset, type); - varying_added = true; - } - - for (unsigned i = 0; i < length; i++) - add_var_xfb_outputs(xfb, varyings, var, buffer, location, offset, - child_type, varying_added); - } else if (glsl_type_is_struct_or_ifc(type)) { - unsigned length = glsl_get_length(type); - for (unsigned i = 0; i < length; i++) { - const struct glsl_type *child_type = glsl_get_struct_field(type, i); - add_var_xfb_outputs(xfb, varyings, var, buffer, location, offset, - child_type, varying_added); - } - } else { - assert(buffer < NIR_MAX_XFB_BUFFERS); - if (xfb->buffers_written & (1 << buffer)) { - assert(xfb->buffers[buffer].stride == var->data.xfb.stride); - assert(xfb->buffer_to_stream[buffer] == var->data.stream); - } else { - xfb->buffers_written |= (1 << buffer); - xfb->buffers[buffer].stride = var->data.xfb.stride; - xfb->buffer_to_stream[buffer] = var->data.stream; - } - - assert(var->data.stream < NIR_MAX_XFB_STREAMS); - xfb->streams_written |= (1 << var->data.stream); - - unsigned comp_slots; - if (var->data.compact) { - /* This only happens for clip/cull which are float arrays */ - assert(glsl_without_array(type) == glsl_float_type()); - assert(var->data.location == VARYING_SLOT_CLIP_DIST0 || - var->data.location == VARYING_SLOT_CLIP_DIST1); - comp_slots = glsl_get_length(type); - } else { - comp_slots = glsl_get_component_slots(type); - - UNUSED unsigned attrib_slots = DIV_ROUND_UP(comp_slots, 4); - assert(attrib_slots == glsl_count_attribute_slots(type, false)); - - /* Ensure that we don't have, for instance, a dvec2 with a - * location_frac of 2 which would make it crass a location boundary - * even though it fits in a single slot. However, you can have a - * dvec3 which crosses the slot boundary with a location_frac of 2. - */ - assert(DIV_ROUND_UP(var->data.location_frac + comp_slots, 4) == - attrib_slots); - } - - assert(var->data.location_frac + comp_slots <= 8); - uint8_t comp_mask = ((1 << comp_slots) - 1) << var->data.location_frac; - unsigned comp_offset = var->data.location_frac; - - if (!varying_added) { - add_var_xfb_varying(xfb, varyings, buffer, *offset, type); - } - - while (comp_mask) { - nir_xfb_output_info *output = &xfb->outputs[xfb->output_count++]; - - output->buffer = buffer; - output->offset = *offset; - output->location = *location; - output->component_mask = comp_mask & 0xf; - output->component_offset = comp_offset; - - *offset += util_bitcount(output->component_mask) * 4; - (*location)++; - comp_mask >>= 4; - comp_offset = 0; - } - } -} - -static int -compare_xfb_varying_offsets(const void *_a, const void *_b) -{ - const nir_xfb_varying_info *a = _a, *b = _b; - - if (a->buffer != b->buffer) - return a->buffer - b->buffer; - - return a->offset - b->offset; -} - -static int -compare_xfb_output_offsets(const void *_a, const void *_b) -{ - const nir_xfb_output_info *a = _a, *b = _b; - - return a->offset - b->offset; -} - -void -nir_shader_gather_xfb_info(nir_shader *shader) -{ - nir_gather_xfb_info_with_varyings(shader, NULL, NULL); -} - -void -nir_gather_xfb_info_with_varyings(nir_shader *shader, - void *mem_ctx, - nir_xfb_varyings_info **varyings_info_out) -{ - assert(shader->info.stage == MESA_SHADER_VERTEX || - shader->info.stage == MESA_SHADER_TESS_EVAL || - shader->info.stage == MESA_SHADER_GEOMETRY); - - /* Compute the number of outputs we have. This is simply the number of - * cumulative locations consumed by all the variables. If a location is - * represented by multiple variables, then they each count separately in - * number of outputs. This is only an estimate as some variables may have - * an xfb_buffer but not an output so it may end up larger than we need but - * it should be good enough for allocation. - */ - unsigned num_outputs = 0; - unsigned num_varyings = 0; - nir_xfb_varyings_info *varyings_info = NULL; - nir_foreach_shader_out_variable(var, shader) { - if (var->data.explicit_xfb_buffer) { - num_outputs += glsl_count_attribute_slots(var->type, false); - num_varyings += glsl_varying_count(var->type); - } - } - if (num_outputs == 0 || num_varyings == 0) - return; - - nir_xfb_info *xfb = nir_xfb_info_create(shader, num_outputs); - if (varyings_info_out != NULL) { - *varyings_info_out = nir_xfb_varyings_info_create(mem_ctx, num_varyings); - varyings_info = *varyings_info_out; - } - - /* Walk the list of outputs and add them to the array */ - nir_foreach_shader_out_variable(var, shader) { - if (!var->data.explicit_xfb_buffer) - continue; - - unsigned location = var->data.location; - - /* In order to know if we have a array of blocks can't be done just by - * checking if we have an interface type and is an array, because due - * splitting we could end on a case were we received a split struct - * that contains an array. - */ - bool is_array_block = var->interface_type != NULL && - glsl_type_is_array(var->type) && - glsl_without_array(var->type) == var->interface_type; - - if (var->data.explicit_offset && !is_array_block) { - unsigned offset = var->data.offset; - add_var_xfb_outputs(xfb, varyings_info, var, var->data.xfb.buffer, - &location, &offset, var->type, false); - } else if (is_array_block) { - assert(glsl_type_is_struct_or_ifc(var->interface_type)); - - unsigned aoa_size = glsl_get_aoa_size(var->type); - const struct glsl_type *itype = var->interface_type; - unsigned nfields = glsl_get_length(itype); - for (unsigned b = 0; b < aoa_size; b++) { - for (unsigned f = 0; f < nfields; f++) { - int foffset = glsl_get_struct_field_offset(itype, f); - const struct glsl_type *ftype = glsl_get_struct_field(itype, f); - if (foffset < 0) { - location += glsl_count_attribute_slots(ftype, false); - continue; - } - - unsigned offset = foffset; - add_var_xfb_outputs(xfb, varyings_info, var, var->data.xfb.buffer + b, - &location, &offset, ftype, false); - } - } - } - } - - /* Everything is easier in the state setup code if outputs and varyings are - * sorted in order of output offset (and buffer for varyings). - */ - qsort(xfb->outputs, xfb->output_count, sizeof(xfb->outputs[0]), - compare_xfb_output_offsets); - - if (varyings_info != NULL) { - qsort(varyings_info->varyings, varyings_info->varying_count, - sizeof(varyings_info->varyings[0]), - compare_xfb_varying_offsets); - } - -#ifndef NDEBUG - /* Finally, do a sanity check */ - unsigned max_offset[NIR_MAX_XFB_BUFFERS] = {0}; - for (unsigned i = 0; i < xfb->output_count; i++) { - assert(xfb->outputs[i].offset >= max_offset[xfb->outputs[i].buffer]); - assert(xfb->outputs[i].component_mask != 0); - unsigned slots = util_bitcount(xfb->outputs[i].component_mask); - max_offset[xfb->outputs[i].buffer] = xfb->outputs[i].offset + slots * 4; - } -#endif - - ralloc_free(shader->xfb_info); - shader->xfb_info = xfb; -} - -static int -get_xfb_out_sort_index(const nir_xfb_output_info *a) -{ - /* Return the maximum number to put dummy components at the end. */ - if (!a->component_mask) - return MAX_XFB_BUFFERS << 26; - - return ((uint32_t)a->buffer << 26) | /* 2 bits for the buffer */ - /* 10 bits for the component location (256 * 4) */ - (((uint32_t)a->location * 4 + a->component_offset) << 16) | - /* 16 bits for the offset */ - a->offset; -} - -static int -compare_xfb_out(const void *pa, const void *pb) -{ - const nir_xfb_output_info *a = (const nir_xfb_output_info *)pa; - const nir_xfb_output_info *b = (const nir_xfb_output_info *)pb; - - return get_xfb_out_sort_index(a) - get_xfb_out_sort_index(b); -} - -/** - * Gather transform feedback info from lowered IO intrinsics. - * - * Optionally return slot_to_register, an optional table to translate - * gl_varying_slot to "base" indices. - */ -void -nir_gather_xfb_info_from_intrinsics(nir_shader *nir) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - uint8_t buffer_to_stream[MAX_XFB_BUFFERS] = {0}; - uint8_t buffer_mask = 0; - uint8_t stream_mask = 0; - - /* Gather xfb outputs. */ - struct util_dynarray array = {0}; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic || - !nir_instr_xfb_write_mask(nir_instr_as_intrinsic(instr))) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - unsigned wr_mask = nir_intrinsic_write_mask(intr); - - while (wr_mask) { - unsigned i = u_bit_scan(&wr_mask); - unsigned index = nir_intrinsic_component(intr) + i; - nir_io_xfb xfb = index < 2 ? nir_intrinsic_io_xfb(intr) : - nir_intrinsic_io_xfb2(intr); - - if (xfb.out[index % 2].num_components) { - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - nir_xfb_output_info out; - - out.component_offset = index; - out.component_mask = - BITFIELD_RANGE(index, xfb.out[index % 2].num_components); - out.location = sem.location; - out.high_16bits = sem.high_16bits; - out.buffer = xfb.out[index % 2].buffer; - out.offset = (uint32_t)xfb.out[index % 2].offset * 4; - util_dynarray_append(&array, nir_xfb_output_info, out); - - uint8_t stream = (sem.gs_streams >> (i * 2)) & 0x3; - buffer_to_stream[out.buffer] = stream; - buffer_mask |= BITFIELD_BIT(out.buffer); - stream_mask |= BITFIELD_BIT(stream); - - /* No elements before component_offset are allowed to be set. */ - assert(!(out.component_mask & BITFIELD_MASK(out.component_offset))); - } - } - } - } - - nir_xfb_output_info *outputs = (nir_xfb_output_info *)array.data; - int count = util_dynarray_num_elements(&array, nir_xfb_output_info); - - if (!count) - return; - - if (count > 1) { - /* Sort outputs by buffer, location, and component. */ - qsort(outputs, count, sizeof(nir_xfb_output_info), compare_xfb_out); - - /* Merge outputs referencing the same slot. */ - for (int i = 0; i < count - 1; i++) { - nir_xfb_output_info *cur = &outputs[i]; - - if (!cur->component_mask) - continue; - - /* Outputs referencing the same buffer and location are contiguous. */ - for (int j = i + 1; - j < count && - cur->buffer == outputs[j].buffer && - cur->location == outputs[j].location && - cur->high_16bits == outputs[j].high_16bits; j++) { - if (outputs[j].component_mask && - outputs[j].offset - outputs[j].component_offset * 4 == - cur->offset - cur->component_offset * 4) { - unsigned merged_offset = MIN2(cur->component_offset, - outputs[j].component_offset); - /* component_mask is relative to 0, not component_offset */ - unsigned merged_mask = cur->component_mask | outputs[j].component_mask; - - /* The component mask should have no holes after merging. */ - if (util_is_power_of_two_nonzero((merged_mask >> merged_offset) + 1)) { - /* Merge outputs. */ - cur->component_offset = merged_offset; - cur->component_mask = merged_mask; - cur->offset = (uint32_t)cur->offset - - (uint32_t)cur->component_offset * 4 + - (uint32_t)merged_offset * 4; - /* Disable the other output. */ - outputs[j].component_mask = 0; - } - } - } - } - - /* Sort outputs again to put disabled outputs at the end. */ - qsort(outputs, count, sizeof(nir_xfb_output_info), compare_xfb_out); - - /* Remove disabled outputs. */ - for (int i = count - 1; i >= 0 && !outputs[i].component_mask; i--) - count = i; - } - - for (unsigned i = 0; i < count; i++) - assert(outputs[i].component_mask); - - /* Create nir_xfb_info. */ - nir_xfb_info *info = nir_xfb_info_create(nir, count); - if (!info) { - util_dynarray_fini(&array); - return; - } - - /* Fill nir_xfb_info. */ - info->buffers_written = buffer_mask; - info->streams_written = stream_mask; - memcpy(info->buffer_to_stream, buffer_to_stream, sizeof(buffer_to_stream)); - info->output_count = count; - memcpy(info->outputs, outputs, count * sizeof(outputs[0])); - - /* Set strides. */ - for (unsigned i = 0; i < MAX_XFB_BUFFERS; i++) { - if (buffer_mask & BITFIELD_BIT(i)) - info->buffers[i].stride = nir->info.xfb_stride[i] * 4; - } - - /* Set varying_count. */ - for (unsigned i = 0; i < count; i++) - info->buffers[outputs[i].buffer].varying_count++; - - /* Replace original xfb info. */ - ralloc_free(nir->xfb_info); - nir->xfb_info = info; - - util_dynarray_fini(&array); -} - -void -nir_print_xfb_info(nir_xfb_info *info, FILE *fp) -{ - fprintf(fp, "buffers_written: 0x%x\n", info->buffers_written); - fprintf(fp, "streams_written: 0x%x\n", info->streams_written); - - for (unsigned i = 0; i < NIR_MAX_XFB_BUFFERS; i++) { - if (BITFIELD_BIT(i) & info->buffers_written) { - fprintf(fp, "buffer%u: stride=%u varying_count=%u stream=%u\n", i, - info->buffers[i].stride, - info->buffers[i].varying_count, - info->buffer_to_stream[i]); - } - } - - fprintf(fp, "output_count: %u\n", info->output_count); - - for (unsigned i = 0; i < info->output_count; i++) { - fprintf(fp, "output%u: buffer=%u, offset=%u, location=%u, high_16bits=%u, " - "component_offset=%u, component_mask=0x%x\n", - i, info->outputs[i].buffer, - info->outputs[i].offset, - info->outputs[i].location, - info->outputs[i].high_16bits, - info->outputs[i].component_offset, - info->outputs[i].component_mask); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_group_loads.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_group_loads.c deleted file mode 100644 index 0941aee..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_group_loads.c +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright © 2021 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* This is a new block-level load instruction scheduler where loads are grouped - * according to their indirection level within a basic block. An indirection - * is when a result of one load is used as a source of another load. The result - * is that disjoint ALU opcode groups and load (texture) opcode groups are - * created where each next load group is the next level of indirection. - * It's done by finding the first and last load with the same indirection - * level, and moving all unrelated instructions between them after the last - * load except for load sources, which are moved before the first load. - * It naturally suits hardware that has limits on texture indirections, but - * other hardware can benefit too. Only texture, image, and SSBO load and - * atomic instructions are grouped. - * - * There is an option to group only those loads that use the same resource - * variable. This increases the chance to get more cache hits than if the loads - * were spread out. - * - * The increased register usage is offset by the increase in observed memory - * bandwidth due to more cache hits (dependent on hw behavior) and thus - * decrease the subgroup lifetime, which allows registers to be deallocated - * and reused sooner. In some bandwidth-bound cases, low register usage doesn't - * benefit at all. Doubling the register usage and using those registers to - * amplify observed bandwidth can improve performance a lot. - * - * It's recommended to run a hw-specific instruction scheduler after this to - * prevent spilling. - */ - -#include "nir.h" - -static bool -is_memory_load(nir_instr *instr) -{ - /* Count texture_size too because it has the same latency as cache hits. */ - if (instr->type == nir_instr_type_tex) - return true; - - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - const char *name = nir_intrinsic_infos[intr->intrinsic].name; - - /* TODO: nir_intrinsics.py could do this */ - /* load_ubo is ignored because it's usually cheap. */ - if (!nir_intrinsic_writes_external_memory(intr) && - !strstr(name, "shared") && - (strstr(name, "ssbo") || strstr(name, "image"))) - return true; - } - - return false; -} - -static nir_instr * -get_intrinsic_resource(nir_intrinsic_instr *intr) -{ - /* This is also the list of intrinsics that are grouped. */ - /* load_ubo is ignored because it's usually cheap. */ - switch (intr->intrinsic) { - case nir_intrinsic_image_load: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_sparse_load: - case nir_intrinsic_image_deref_sparse_load: - /* Group image_size too because it has the same latency as cache hits. */ - case nir_intrinsic_image_samples_identical: - case nir_intrinsic_image_deref_samples_identical: - case nir_intrinsic_bindless_image_samples_identical: - case nir_intrinsic_image_size: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_bindless_image_sparse_load: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_image_fragment_mask_load_amd: - case nir_intrinsic_image_deref_fragment_mask_load_amd: - case nir_intrinsic_bindless_image_fragment_mask_load_amd: - return intr->src[0].ssa->parent_instr; - default: - return NULL; - } -} - -/* Track only those that we want to group. */ -static bool -is_grouped_load(nir_instr *instr) -{ - /* Count texture_size too because it has the same latency as cache hits. */ - if (instr->type == nir_instr_type_tex) - return true; - - if (instr->type == nir_instr_type_intrinsic) - return get_intrinsic_resource(nir_instr_as_intrinsic(instr)) != NULL; - - return false; -} - -static bool -can_move(nir_instr *instr, uint8_t current_indirection_level) -{ - /* Grouping is done by moving everything else out of the first/last - * instruction range of the indirection level. - */ - if (is_grouped_load(instr) && instr->pass_flags == current_indirection_level) - return false; - - if (instr->type == nir_instr_type_alu || - instr->type == nir_instr_type_deref || - instr->type == nir_instr_type_tex || - instr->type == nir_instr_type_load_const || - instr->type == nir_instr_type_ssa_undef) - return true; - - if (instr->type == nir_instr_type_intrinsic && - nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr))) - return true; - - return false; -} - -static nir_instr * -get_uniform_inst_resource(nir_instr *instr) -{ - if (instr->type == nir_instr_type_tex) { - nir_tex_instr *tex = nir_instr_as_tex(instr); - - if (tex->texture_non_uniform) - return NULL; - - for (unsigned i = 0; i < tex->num_srcs; i++) { - switch (tex->src[i].src_type) { - case nir_tex_src_texture_deref: - case nir_tex_src_texture_handle: - return tex->src[i].src.ssa->parent_instr; - default: - break; - } - } - return NULL; - } - - if (instr->type == nir_instr_type_intrinsic) - return get_intrinsic_resource(nir_instr_as_intrinsic(instr)); - - return NULL; -} - -struct check_sources_state -{ - nir_block *block; - uint32_t first_index; -}; - -static bool -has_only_sources_less_than(nir_src *src, void *data) -{ - struct check_sources_state *state = (struct check_sources_state *)data; - - /* true if nir_foreach_src should keep going */ - return state->block != src->ssa->parent_instr->block || - src->ssa->parent_instr->index < state->first_index; -} - -static void -group_loads(nir_instr *first, nir_instr *last) -{ - /* Walk the instruction range between the first and last backward, and - * move those that have no uses within the range after the last one. - */ - for (nir_instr *instr = exec_node_data_backward(nir_instr, - last->node.prev, node); - instr != first; - instr = exec_node_data_backward(nir_instr, instr->node.prev, node)) { - /* Only move instructions without side effects. */ - if (!can_move(instr, first->pass_flags)) - continue; - - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (def) { - bool all_uses_after_last = true; - - nir_foreach_use(use, def) { - if (use->parent_instr->block == instr->block && - use->parent_instr->index <= last->index) { - all_uses_after_last = false; - break; - } - } - - if (all_uses_after_last) { - nir_instr *move_instr = instr; - /* Set the last instruction because we'll delete the current one. */ - instr = exec_node_data_forward(nir_instr, instr->node.next, node); - - /* Move the instruction after the last and update its index - * to indicate that it's after it. - */ - nir_instr_move(nir_after_instr(last), move_instr); - move_instr->index = last->index + 1; - } - } - } - - struct check_sources_state state; - state.block = first->block; - state.first_index = first->index; - - /* Walk the instruction range between the first and last forward, and move - * those that have no sources within the range before the first one. - */ - for (nir_instr *instr = exec_node_data_forward(nir_instr, - first->node.next, node); - instr != last; - instr = exec_node_data_forward(nir_instr, instr->node.next, node)) { - /* Only move instructions without side effects. */ - if (!can_move(instr, first->pass_flags)) - continue; - - if (nir_foreach_src(instr, has_only_sources_less_than, &state)) { - nir_instr *move_instr = instr; - /* Set the last instruction because we'll delete the current one. */ - instr = exec_node_data_backward(nir_instr, instr->node.prev, node); - - /* Move the instruction before the first and update its index - * to indicate that it's before it. - */ - nir_instr_move(nir_before_instr(first), move_instr); - move_instr->index = first->index - 1; - } - } -} - -static bool -is_pseudo_inst(nir_instr *instr) -{ - /* Other instructions do not usually contribute to the shader binary size. */ - return instr->type != nir_instr_type_alu && - instr->type != nir_instr_type_call && - instr->type != nir_instr_type_tex && - instr->type != nir_instr_type_intrinsic; -} - -static void -set_instr_indices(nir_block *block) -{ - /* Start with 1 because we'll move instruction before the first one - * and will want to label it 0. - */ - unsigned counter = 1; - nir_instr *last = NULL; - - nir_foreach_instr(instr, block) { - /* Make sure grouped instructions don't have the same index as pseudo - * instructions. - */ - if (last && is_pseudo_inst(last) && is_grouped_load(instr)) - counter++; - - /* Set each instruction's index within the block. */ - instr->index = counter; - - /* Only count non-pseudo instructions. */ - if (!is_pseudo_inst(instr)) - counter++; - - last = instr; - } -} - -static void -handle_load_range(nir_instr **first, nir_instr **last, - nir_instr *current, unsigned max_distance) -{ - if (*first && *last && - (!current || current->index > (*first)->index + max_distance)) { - assert(*first != *last); - group_loads(*first, *last); - set_instr_indices((*first)->block); - *first = NULL; - *last = NULL; - } -} - -static bool -is_barrier(nir_instr *instr) -{ - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - const char *name = nir_intrinsic_infos[intr->intrinsic].name; - - - if (intr->intrinsic == nir_intrinsic_discard || - intr->intrinsic == nir_intrinsic_discard_if || - intr->intrinsic == nir_intrinsic_terminate || - intr->intrinsic == nir_intrinsic_terminate_if || - /* TODO: nir_intrinsics.py could do this */ - strstr(name, "barrier")) - return true; - } - - return false; -} - -struct indirection_state -{ - nir_block *block; - unsigned indirections; -}; - -static unsigned -get_num_indirections(nir_instr *instr); - -static bool -gather_indirections(nir_src *src, void *data) -{ - struct indirection_state *state = (struct indirection_state *)data; - nir_instr *instr = src->ssa->parent_instr; - - /* We only count indirections within the same block. */ - if (instr->block == state->block) { - unsigned indirections = get_num_indirections(src->ssa->parent_instr); - - if (instr->type == nir_instr_type_tex || is_memory_load(instr)) - indirections++; - - state->indirections = MAX2(state->indirections, indirections); - } - - return true; /* whether nir_foreach_src should keep going */ -} - -/* Return the number of load indirections within the block. */ -static unsigned -get_num_indirections(nir_instr *instr) -{ - /* Don't traverse phis because we could end up in an infinite recursion - * if the phi points to the current block (such as a loop body). - */ - if (instr->type == nir_instr_type_phi) - return 0; - - if (instr->index != UINT32_MAX) - return instr->index; /* we've visited this instruction before */ - - struct indirection_state state; - state.block = instr->block; - state.indirections = 0; - - nir_foreach_src(instr, gather_indirections, &state); - - instr->index = state.indirections; - return state.indirections; -} - -static void -process_block(nir_block *block, nir_load_grouping grouping, - unsigned max_distance) -{ - int max_indirection = -1; - unsigned num_inst_per_level[256] = {0}; - - /* UINT32_MAX means the instruction has not been visited. Once - * an instruction has been visited and its indirection level has been - * determined, we'll store the indirection level in the index. The next - * instruction that visits it will use the index instead of recomputing - * the indirection level, which would result in an exponetial time - * complexity. - */ - nir_foreach_instr(instr, block) { - instr->index = UINT32_MAX; /* unknown */ - } - - /* Count the number of load indirections for each load instruction - * within this block. Store it in pass_flags. - */ - nir_foreach_instr(instr, block) { - if (is_grouped_load(instr)) { - unsigned indirections = get_num_indirections(instr); - - /* pass_flags has only 8 bits */ - indirections = MIN2(indirections, 255); - num_inst_per_level[indirections]++; - instr->pass_flags = indirections; - - max_indirection = MAX2(max_indirection, (int)indirections); - } - } - - /* 255 contains all indirection levels >= 255, so ignore them. */ - max_indirection = MIN2(max_indirection, 254); - - /* Each indirection level is grouped. */ - for (int level = 0; level <= max_indirection; level++) { - if (num_inst_per_level[level] <= 1) - continue; - - set_instr_indices(block); - - nir_instr *resource = NULL; - nir_instr *first_load = NULL, *last_load = NULL; - - /* Find the first and last instruction that use the same - * resource and are within a certain distance of each other. - * If found, group them by moving all movable instructions - * between them out. - */ - nir_foreach_instr(current, block) { - /* Don't group across barriers. */ - if (is_barrier(current)) { - /* Group unconditionally. */ - handle_load_range(&first_load, &last_load, NULL, 0); - first_load = NULL; - last_load = NULL; - continue; - } - - /* Only group load instructions with the same indirection level. */ - if (is_grouped_load(current) && current->pass_flags == level) { - nir_instr *current_resource; - - switch (grouping) { - case nir_group_all: - if (!first_load) - first_load = current; - else - last_load = current; - break; - - case nir_group_same_resource_only: - current_resource = get_uniform_inst_resource(current); - - if (current_resource) { - if (!first_load) { - first_load = current; - resource = current_resource; - } else if (current_resource == resource) { - last_load = current; - } - } - } - } - - /* Group only if we exceeded the maximum distance. */ - handle_load_range(&first_load, &last_load, current, max_distance); - } - - /* Group unconditionally. */ - handle_load_range(&first_load, &last_load, NULL, 0); - } -} - -/* max_distance is the maximum distance between the first and last instruction - * in a group. - */ -void -nir_group_loads(nir_shader *shader, nir_load_grouping grouping, - unsigned max_distance) -{ - nir_foreach_function(function, shader) { - if (function->impl) { - nir_foreach_block(block, function->impl) { - process_block(block, grouping, max_distance); - } - - nir_metadata_preserve(function->impl, - nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_loop_analysis); - } - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gs_count_vertices.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gs_count_vertices.c deleted file mode 100644 index 5e89d84..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_gs_count_vertices.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static nir_intrinsic_instr * -as_intrinsic(nir_instr *instr, nir_intrinsic_op op) -{ - if (instr->type != nir_instr_type_intrinsic) - return NULL; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != op) - return NULL; - - return intrin; -} - -static nir_intrinsic_instr * -as_set_vertex_and_primitive_count(nir_instr *instr) -{ - return as_intrinsic(instr, nir_intrinsic_set_vertex_and_primitive_count); -} - -/** - * Count the number of vertices/primitives emitted by a geometry shader per stream. - * If a constant number of vertices is emitted, the output is set to - * that number, otherwise it is unknown at compile time and the - * result will be -1. - * - * This only works if you've used nir_lower_gs_intrinsics() to do vertex - * counting at the NIR level. - */ -void -nir_gs_count_vertices_and_primitives(const nir_shader *shader, - int *out_vtxcnt, - int *out_prmcnt, - unsigned num_streams) -{ - assert(num_streams); - - int vtxcnt_arr[4] = {-1, -1, -1, -1}; - int prmcnt_arr[4] = {-1, -1, -1, -1}; - bool cnt_found[4] = {false, false, false, false}; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - /* set_vertex_and_primitive_count intrinsics only appear in predecessors of the - * end block. So we don't need to walk all of them. - */ - set_foreach(function->impl->end_block->predecessors, entry) { - nir_block *block = (nir_block *) entry->key; - - nir_foreach_instr_reverse(instr, block) { - nir_intrinsic_instr *intrin = as_set_vertex_and_primitive_count(instr); - if (!intrin) - continue; - - unsigned stream = nir_intrinsic_stream_id(intrin); - if (stream >= num_streams) - continue; - - int vtxcnt = -1; - int prmcnt = -1; - - /* If the number of vertices/primitives is compile-time known, we use that, - * otherwise we leave it at -1 which means that it's unknown. - */ - if (nir_src_is_const(intrin->src[0])) - vtxcnt = nir_src_as_int(intrin->src[0]); - if (nir_src_is_const(intrin->src[1])) - prmcnt = nir_src_as_int(intrin->src[1]); - - /* We've found contradictory set_vertex_and_primitive_count intrinsics. - * This can happen if there are early-returns in main() and - * different paths emit different numbers of vertices. - */ - if (cnt_found[stream] && vtxcnt != vtxcnt_arr[stream]) - vtxcnt = -1; - if (cnt_found[stream] && prmcnt != prmcnt_arr[stream]) - prmcnt = -1; - - vtxcnt_arr[stream] = vtxcnt; - prmcnt_arr[stream] = prmcnt; - cnt_found[stream] = true; - } - } - } - - if (out_vtxcnt) - memcpy(out_vtxcnt, vtxcnt_arr, num_streams * sizeof(int)); - if (out_prmcnt) - memcpy(out_prmcnt, prmcnt_arr, num_streams * sizeof(int)); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_functions.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_functions.c deleted file mode 100644 index 81fcf1f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_functions.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_control_flow.h" -#include "nir_vla.h" - -static bool function_ends_in_jump(nir_function_impl *impl) -{ - nir_block *last_block = nir_impl_last_block(impl); - return nir_block_ends_in_jump(last_block); -} - -void nir_inline_function_impl(struct nir_builder *b, - const nir_function_impl *impl, - nir_ssa_def **params, - struct hash_table *shader_var_remap) -{ - nir_function_impl *copy = nir_function_impl_clone(b->shader, impl); - - exec_list_append(&b->impl->locals, ©->locals); - exec_list_append(&b->impl->registers, ©->registers); - - nir_foreach_block(block, copy) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type != nir_deref_type_var) - break; - - /* We don't need to remap function variables. We already cloned - * them as part of nir_function_impl_clone and appended them to - * b->impl->locals. - */ - if (deref->var->data.mode == nir_var_function_temp) - break; - - /* If no map is provided, we assume that there are either no - * shader variables or they already live b->shader (this is the - * case for function inlining within a single shader. - */ - if (shader_var_remap == NULL) - break; - - struct hash_entry *entry = - _mesa_hash_table_search(shader_var_remap, deref->var); - if (entry == NULL) { - nir_variable *nvar = nir_variable_clone(deref->var, b->shader); - nir_shader_add_variable(b->shader, nvar); - entry = _mesa_hash_table_insert(shader_var_remap, - deref->var, nvar); - } - deref->var = entry->data; - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *load = nir_instr_as_intrinsic(instr); - if (load->intrinsic != nir_intrinsic_load_param) - break; - - unsigned param_idx = nir_intrinsic_param_idx(load); - assert(param_idx < impl->function->num_params); - assert(load->dest.is_ssa); - nir_ssa_def_rewrite_uses(&load->dest.ssa, - params[param_idx]); - - /* Remove any left-over load_param intrinsics because they're soon - * to be in another function and therefore no longer valid. - */ - nir_instr_remove(&load->instr); - break; - } - - case nir_instr_type_jump: - /* Returns have to be lowered for this to work */ - assert(nir_instr_as_jump(instr)->type != nir_jump_return); - break; - - default: - break; - } - } - } - - bool nest_if = function_ends_in_jump(copy); - - /* Pluck the body out of the function and place it here */ - nir_cf_list body; - nir_cf_list_extract(&body, ©->body); - - if (nest_if) { - nir_if *cf = nir_push_if(b, nir_imm_bool(b, true)); - nir_cf_reinsert(&body, nir_after_cf_list(&cf->then_list)); - nir_pop_if(b, cf); - } else { - /* Insert a nop at the cursor so we can keep track of where things are as - * we add/remove stuff from the CFG. - */ - nir_intrinsic_instr *nop = nir_nop(b); - nir_cf_reinsert(&body, nir_before_instr(&nop->instr)); - b->cursor = nir_instr_remove(&nop->instr); - } -} - -static bool inline_function_impl(nir_function_impl *impl, struct set *inlined); - -static bool -inline_functions_block(nir_block *block, nir_builder *b, - struct set *inlined) -{ - bool progress = false; - /* This is tricky. We're iterating over instructions in a block but, as - * we go, the block and its instruction list are being split into - * pieces. However, this *should* be safe since foreach_safe always - * stashes the next thing in the iteration. That next thing will - * properly get moved to the next block when it gets split, and we - * continue iterating there. - */ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_call) - continue; - - progress = true; - - nir_call_instr *call = nir_instr_as_call(instr); - assert(call->callee->impl); - - /* Make sure that the function we're calling is already inlined */ - inline_function_impl(call->callee->impl, inlined); - - b->cursor = nir_instr_remove(&call->instr); - - /* Rewrite all of the uses of the callee's parameters to use the call - * instructions sources. In order to ensure that the "load" happens - * here and not later (for register sources), we make sure to convert it - * to an SSA value first. - */ - const unsigned num_params = call->num_params; - NIR_VLA(nir_ssa_def *, params, num_params); - for (unsigned i = 0; i < num_params; i++) { - params[i] = nir_ssa_for_src(b, call->params[i], - call->callee->params[i].num_components); - } - - nir_inline_function_impl(b, call->callee->impl, params, NULL); - } - - return progress; -} - -static bool -inline_function_impl(nir_function_impl *impl, struct set *inlined) -{ - if (_mesa_set_search(inlined, impl)) - return false; /* Already inlined */ - - nir_builder b; - nir_builder_init(&b, impl); - - bool progress = false; - nir_foreach_block_safe(block, impl) { - progress |= inline_functions_block(block, &b, inlined); - } - - if (progress) { - /* SSA and register indices are completely messed up now */ - nir_index_ssa_defs(impl); - nir_index_local_regs(impl); - - nir_metadata_preserve(impl, nir_metadata_none); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - _mesa_set_add(inlined, impl); - - return progress; -} - -/** A pass to inline all functions in a shader into their callers - * - * For most use-cases, function inlining is a multi-step process. The general - * pattern employed by SPIR-V consumers and others is as follows: - * - * 1. nir_lower_variable_initializers(shader, nir_var_function_temp) - * - * This is needed because local variables from the callee are simply added - * to the locals list for the caller and the information about where the - * constant initializer logically happens is lost. If the callee is - * called in a loop, this can cause the variable to go from being - * initialized once per loop iteration to being initialized once at the - * top of the caller and values to persist from one invocation of the - * callee to the next. The simple solution to this problem is to get rid - * of constant initializers before function inlining. - * - * 2. nir_lower_returns(shader) - * - * nir_inline_functions assumes that all functions end "naturally" by - * execution reaching the end of the function without any return - * instructions causing instant jumps to the end. Thanks to NIR being - * structured, we can't represent arbitrary jumps to various points in the - * program which is what an early return in the callee would have to turn - * into when we inline it into the caller. Instead, we require returns to - * be lowered which lets us just copy+paste the callee directly into the - * caller. - * - * 3. nir_inline_functions(shader) - * - * This does the actual function inlining and the resulting shader will - * contain no call instructions. - * - * 4. nir_opt_deref(shader) - * - * Most functions contain pointer parameters where the result of a deref - * instruction is passed in as a parameter, loaded via a load_param - * intrinsic, and then turned back into a deref via a cast. Function - * inlining will get rid of the load_param but we are still left with a - * cast. Running nir_opt_deref gets rid of the intermediate cast and - * results in a whole deref chain again. This is currently required by a - * number of optimizations and lowering passes at least for certain - * variable modes. - * - * 5. Loop over the functions and delete all but the main entrypoint. - * - * In the Intel Vulkan driver this looks like this: - * - * foreach_list_typed_safe(nir_function, func, node, &nir->functions) { - * if (func != entry_point) - * exec_node_remove(&func->node); - * } - * assert(exec_list_length(&nir->functions) == 1); - * - * While nir_inline_functions does get rid of all call instructions, it - * doesn't get rid of any functions because it doesn't know what the "root - * function" is. Instead, it's up to the individual driver to know how to - * decide on a root function and delete the rest. With SPIR-V, - * spirv_to_nir returns the root function and so we can just use == whereas - * with GL, you may have to look for a function named "main". - * - * 6. nir_lower_variable_initializers(shader, ~nir_var_function_temp) - * - * Lowering constant initializers on inputs, outputs, global variables, - * etc. requires that we know the main entrypoint so that we know where to - * initialize them. Otherwise, we would have to assume that anything - * could be a main entrypoint and initialize them at the start of every - * function but that would clearly be wrong if any of those functions were - * ever called within another function. Simply requiring a single- - * entrypoint function shader is the best way to make it well-defined. - */ -bool -nir_inline_functions(nir_shader *shader) -{ - struct set *inlined = _mesa_pointer_set_create(NULL); - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress = inline_function_impl(function->impl, inlined) || progress; - } - - _mesa_set_destroy(inlined, NULL); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_helpers.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_helpers.h deleted file mode 100644 index 125dd8a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_helpers.h +++ /dev/null @@ -1,164 +0,0 @@ -/* _nir_foreach_dest() needs to be ALWAYS_INLINE so that it can inline the - * callback if it was declared with ALWAYS_INLINE. - */ -static ALWAYS_INLINE bool -_nir_foreach_dest(nir_instr *instr, nir_foreach_dest_cb cb, void *state) -{ - switch (instr->type) { - case nir_instr_type_alu: - return cb(&nir_instr_as_alu(instr)->dest.dest, state); - case nir_instr_type_deref: - return cb(&nir_instr_as_deref(instr)->dest, state); - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (nir_intrinsic_infos[intrin->intrinsic].has_dest) - return cb(&intrin->dest, state); - return true; - } - case nir_instr_type_tex: - return cb(&nir_instr_as_tex(instr)->dest, state); - case nir_instr_type_phi: - return cb(&nir_instr_as_phi(instr)->dest, state); - case nir_instr_type_parallel_copy: { - nir_foreach_parallel_copy_entry(entry, nir_instr_as_parallel_copy(instr)) { - if (!cb(&entry->dest, state)) - return false; - } - return true; - } - - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: - case nir_instr_type_call: - case nir_instr_type_jump: - break; - - default: - unreachable("Invalid instruction type"); - break; - } - - return true; -} - -static ALWAYS_INLINE bool -_nir_visit_src(nir_src *src, nir_foreach_src_cb cb, void *state) -{ - if (!cb(src, state)) - return false; - if (!src->is_ssa && src->reg.indirect) - return cb(src->reg.indirect, state); - return true; -} - -typedef struct { - void *state; - nir_foreach_src_cb cb; -} _nir_visit_dest_indirect_state; - -static ALWAYS_INLINE bool -_nir_visit_dest_indirect(nir_dest *dest, void *_state) -{ - _nir_visit_dest_indirect_state *state = (_nir_visit_dest_indirect_state *) _state; - - if (!dest->is_ssa && dest->reg.indirect) - return state->cb(dest->reg.indirect, state->state); - - return true; -} - -static inline bool -nir_foreach_dest(nir_instr *instr, nir_foreach_dest_cb cb, void *state) -{ - return _nir_foreach_dest(instr, cb, state); -} - -static inline bool -nir_foreach_src(nir_instr *instr, nir_foreach_src_cb cb, void *state) -{ - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) - if (!_nir_visit_src(&alu->src[i].src, cb, state)) - return false; - break; - } - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - - if (deref->deref_type != nir_deref_type_var) { - if (!_nir_visit_src(&deref->parent, cb, state)) - return false; - } - - if (deref->deref_type == nir_deref_type_array || - deref->deref_type == nir_deref_type_ptr_as_array) { - if (!_nir_visit_src(&deref->arr.index, cb, state)) - return false; - } - break; - } - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - unsigned num_srcs = nir_intrinsic_infos[intrin->intrinsic].num_srcs; - for (unsigned i = 0; i < num_srcs; i++) { - if (!_nir_visit_src(&intrin->src[i], cb, state)) - return false; - } - break; - } - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (!_nir_visit_src(&tex->src[i].src, cb, state)) - return false; - } - break; - } - case nir_instr_type_call: { - nir_call_instr *call = nir_instr_as_call(instr); - for (unsigned i = 0; i < call->num_params; i++) { - if (!_nir_visit_src(&call->params[i], cb, state)) - return false; - } - break; - } - case nir_instr_type_phi: { - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_foreach_phi_src(src, phi) { - if (!_nir_visit_src(&src->src, cb, state)) - return false; - } - break; - } - case nir_instr_type_parallel_copy: { - nir_parallel_copy_instr *pc = nir_instr_as_parallel_copy(instr); - nir_foreach_parallel_copy_entry(entry, pc) { - if (!_nir_visit_src(&entry->src, cb, state)) - return false; - } - break; - } - case nir_instr_type_jump: { - nir_jump_instr *jump = nir_instr_as_jump(instr); - - if (jump->type == nir_jump_goto_if && !_nir_visit_src(&jump->condition, cb, state)) - return false; - return true; - } - - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: - return true; - - default: - unreachable("Invalid instruction type"); - break; - } - - _nir_visit_dest_indirect_state dest_state; - dest_state.state = state; - dest_state.cb = cb; - return _nir_foreach_dest(instr, _nir_visit_dest_indirect, &dest_state); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_uniforms.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_uniforms.c deleted file mode 100644 index f381618..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_inline_uniforms.c +++ /dev/null @@ -1,483 +0,0 @@ -/* - * Copyright © 2020 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* These passes enable converting uniforms to literals when it's profitable, - * effectively inlining uniform values in the IR. The main benefit is register - * usage decrease leading to better SMT (hyperthreading). It's accomplished - * by targetting uniforms that determine whether a conditional branch is - * taken or a loop can be unrolled. - * - * Only uniforms used in these places are analyzed: - * 1. if condition - * 2. loop terminator - * 3. init and update value of induction variable used in loop terminator - * - * nir_find_inlinable_uniforms finds uniforms that can be inlined and stores - * that information in shader_info. - * - * nir_inline_uniforms inlines uniform values. - * - * (uniforms must be lowered to load_ubo before calling this) - */ - -#include "nir_builder.h" -#include "nir_loop_analyze.h" - -/* Maximum value in shader_info::inlinable_uniform_dw_offsets[] */ -#define MAX_OFFSET (UINT16_MAX * 4) - -#define MAX_NUM_BO 32 - -/** - * Collect uniforms used in a source - * - * Recursively collects all of the UBO loads with constant UBO index and - * constant offset (per the restictions of \c max_num_bo and \c - * max_offset). If any values are discovered that are non-constant, uniforms - * that don't meet the restrictions, or if more than \c - * MAX_INLINEABLE_UNIFORMS are discoverd for any one UBO, false is returned. - * - * When false is returned, the state of \c uni_offsets and \c num_offsets is - * undefined. - * - * \param max_num_bo Maximum number of uniform buffer objects - * \param max_offset Maximum offset within a UBO - * \param uni_offset Array of \c max_num_bo * \c MAX_INLINABLE_UNIFORMS values - * used to store offsets of discovered uniform loads. - * \param num_offsets Array of \c max_num_bo values used to store the number - * of uniforms collected from each UBO. - */ -bool -nir_collect_src_uniforms(const nir_src *src, int component, - uint32_t *uni_offsets, uint8_t *num_offsets, - unsigned max_num_bo, unsigned max_offset) -{ - if (!src->is_ssa) - return false; - - assert(max_num_bo > 0 && max_num_bo <= MAX_NUM_BO); - assert(component < src->ssa->num_components); - - nir_instr *instr = src->ssa->parent_instr; - - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - - /* Vector ops only need to check the corresponding component. */ - if (alu->op == nir_op_mov) { - return nir_collect_src_uniforms(&alu->src[0].src, - alu->src[0].swizzle[component], - uni_offsets, num_offsets, - max_num_bo, max_offset); - } else if (nir_op_is_vec(alu->op)) { - nir_alu_src *alu_src = alu->src + component; - return nir_collect_src_uniforms(&alu_src->src, alu_src->swizzle[0], - uni_offsets, num_offsets, - max_num_bo, max_offset); - } - - /* Return true if all sources return true. */ - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - nir_alu_src *alu_src = alu->src + i; - int input_sizes = nir_op_infos[alu->op].input_sizes[i]; - - if (input_sizes == 0) { - /* For ops which has no input size, each component of dest is - * only determined by the same component of srcs. - */ - if (!nir_collect_src_uniforms(&alu_src->src, alu_src->swizzle[component], - uni_offsets, num_offsets, - max_num_bo, max_offset)) - return false; - } else { - /* For ops which has input size, all components of dest are - * determined by all components of srcs (except vec ops). - */ - for (unsigned j = 0; j < input_sizes; j++) { - if (!nir_collect_src_uniforms(&alu_src->src, alu_src->swizzle[j], - uni_offsets, num_offsets, - max_num_bo, max_offset)) - return false; - } - } - } - return true; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - /* Return true if the intrinsic loads from UBO 0 with a constant - * offset. - */ - if (intr->intrinsic == nir_intrinsic_load_ubo && - nir_src_is_const(intr->src[0]) && - nir_src_as_uint(intr->src[0]) < max_num_bo && - nir_src_is_const(intr->src[1]) && - nir_src_as_uint(intr->src[1]) <= max_offset && - /* TODO: Can't handle other bit sizes for now. */ - intr->dest.ssa.bit_size == 32) { - /* num_offsets can be NULL if-and-only-if uni_offsets is NULL. */ - assert((num_offsets == NULL) == (uni_offsets == NULL)); - - /* If we're just checking that it's a uniform load, don't check (or - * add to) the table. - */ - if (uni_offsets == NULL) - return true; - - uint32_t offset = nir_src_as_uint(intr->src[1]) + component * 4; - assert(offset < MAX_OFFSET); - - const unsigned ubo = nir_src_as_uint(intr->src[0]); - - /* Already recorded by other one */ - for (int i = 0; i < num_offsets[ubo]; i++) { - if (uni_offsets[ubo * MAX_INLINABLE_UNIFORMS + i] == offset) - return true; - } - - /* Exceed uniform number limit */ - if (num_offsets[ubo] == MAX_INLINABLE_UNIFORMS) - return false; - - /* Record the uniform offset. */ - uni_offsets[ubo * MAX_INLINABLE_UNIFORMS + num_offsets[ubo]++] = offset; - return true; - } - return false; - } - - case nir_instr_type_load_const: - /* Always return true for constants. */ - return true; - - default: - return false; - } -} - -static bool -is_induction_variable(const nir_src *src, int component, nir_loop_info *info, - uint32_t *uni_offsets, uint8_t *num_offsets, - unsigned max_num_bo, unsigned max_offset) -{ - if (!src->is_ssa) - return false; - - assert(component < src->ssa->num_components); - - /* Return true for induction variable (ie. i in for loop) */ - for (int i = 0; i < info->num_induction_vars; i++) { - nir_loop_induction_variable *var = info->induction_vars + i; - if (var->def == src->ssa) { - /* Induction variable should have constant initial value (ie. i = 0), - * constant update value (ie. i++) and constant end condition - * (ie. i < 10), so that we know the exact loop count for unrolling - * the loop. - * - * Add uniforms need to be inlined for this induction variable's - * initial and update value to be constant, for example: - * - * for (i = init; i < count; i += step) - * - * We collect uniform "init" and "step" here. - */ - if (var->init_src) { - if (!nir_collect_src_uniforms(var->init_src, component, - uni_offsets, num_offsets, - max_num_bo, max_offset)) - return false; - } - - if (var->update_src) { - nir_alu_src *alu_src = var->update_src; - if (!nir_collect_src_uniforms(&alu_src->src, - alu_src->swizzle[component], - uni_offsets, num_offsets, - max_num_bo, max_offset)) - return false; - } - - return true; - } - } - - return false; -} - -void -nir_add_inlinable_uniforms(const nir_src *cond, nir_loop_info *info, - uint32_t *uni_offsets, uint8_t *num_offsets, - unsigned max_num_bo, unsigned max_offset) -{ - uint8_t new_num[MAX_NUM_BO]; - memcpy(new_num, num_offsets, sizeof(new_num)); - - /* If condition SSA is always scalar, so component is 0. */ - unsigned component = 0; - - /* Allow induction variable which means a loop terminator. */ - if (info) { - nir_ssa_scalar cond_scalar = {cond->ssa, 0}; - - /* Limit terminator condition to loop unroll support case which is a simple - * comparison (ie. "i < count" is supported, but "i + 1 < count" is not). - */ - if (nir_is_supported_terminator_condition(cond_scalar)) { - if (nir_ssa_scalar_alu_op(cond_scalar) == nir_op_inot) - cond_scalar = nir_ssa_scalar_chase_alu_src(cond_scalar, 0); - - nir_alu_instr *alu = nir_instr_as_alu(cond_scalar.def->parent_instr); - - /* One side of comparison is induction variable, the other side is - * only uniform. - */ - for (int i = 0; i < 2; i++) { - if (is_induction_variable(&alu->src[i].src, alu->src[i].swizzle[0], - info, uni_offsets, new_num, - max_num_bo, max_offset)) { - cond = &alu->src[1 - i].src; - component = alu->src[1 - i].swizzle[0]; - break; - } - } - } - } - - /* Only update uniform number when all uniforms in the expression - * can be inlined. Partially inline uniforms can't lower if/loop. - * - * For example, uniform can be inlined for a shader is limited to 4, - * and we have already added 3 uniforms, then want to deal with - * - * if (uniform0 + uniform1 == 10) - * - * only uniform0 can be inlined due to we exceed the 4 limit. But - * unless both uniform0 and uniform1 are inlined, can we eliminate - * the if statement. - * - * This is even possible when we deal with loop if the induction - * variable init and update also contains uniform like - * - * for (i = uniform0; i < uniform1; i+= uniform2) - * - * unless uniform0, uniform1 and uniform2 can be inlined at once, - * can the loop be unrolled. - */ - if (nir_collect_src_uniforms(cond, component, uni_offsets, new_num, - max_num_bo, max_offset)) - memcpy(num_offsets, new_num, sizeof(new_num[0]) * max_num_bo); -} - -static void -process_node(nir_cf_node *node, nir_loop_info *info, - uint32_t *uni_offsets, uint8_t *num_offsets) -{ - switch (node->type) { - case nir_cf_node_if: { - nir_if *if_node = nir_cf_node_as_if(node); - const nir_src *cond = &if_node->condition; - nir_add_inlinable_uniforms(cond, info, uni_offsets, num_offsets, - 1, MAX_OFFSET); - - /* Do not pass loop info down so only alow induction variable - * in loop terminator "if": - * - * for (i = 0; true; i++) - * if (i == count) - * if (i == num) - * - * break - * - * so "num" won't be inlined due to the "if" is not a - * terminator. - */ - info = NULL; - - foreach_list_typed(nir_cf_node, nested_node, node, &if_node->then_list) - process_node(nested_node, info, uni_offsets, num_offsets); - foreach_list_typed(nir_cf_node, nested_node, node, &if_node->else_list) - process_node(nested_node, info, uni_offsets, num_offsets); - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - assert(!nir_loop_has_continue_construct(loop)); - - /* Replace loop info, no nested loop info currently: - * - * for (i = 0; i < count0; i++) - * for (j = 0; j < count1; j++) - * if (i == num) - * - * so "num" won't be inlined due to "i" is an induction - * variable of upper loop. - */ - info = loop->info; - - foreach_list_typed(nir_cf_node, nested_node, node, &loop->body) { - bool is_terminator = false; - list_for_each_entry(nir_loop_terminator, terminator, - &info->loop_terminator_list, - loop_terminator_link) { - if (nested_node == &terminator->nif->cf_node) { - is_terminator = true; - break; - } - } - - /* Allow induction variables for terminator "if" only: - * - * for (i = 0; i < count; i++) - * if (i == num) - * - * - * so "num" won't be inlined due to the "if" is not a - * terminator. - */ - nir_loop_info *use_info = is_terminator ? info : NULL; - process_node(nested_node, use_info, uni_offsets, num_offsets); - } - break; - } - - default: - break; - } -} - -void -nir_find_inlinable_uniforms(nir_shader *shader) -{ - uint32_t uni_offsets[MAX_INLINABLE_UNIFORMS]; - uint8_t num_offsets[MAX_NUM_BO] = {0}; - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_metadata_require(function->impl, nir_metadata_loop_analysis, - nir_var_all, false); - - foreach_list_typed(nir_cf_node, node, node, &function->impl->body) - process_node(node, NULL, uni_offsets, num_offsets); - } - } - - for (int i = 0; i < num_offsets[0]; i++) - shader->info.inlinable_uniform_dw_offsets[i] = uni_offsets[i] / 4; - shader->info.num_inlinable_uniforms = num_offsets[0]; -} - -void -nir_inline_uniforms(nir_shader *shader, unsigned num_uniforms, - const uint32_t *uniform_values, - const uint16_t *uniform_dw_offsets) -{ - if (!num_uniforms) - return; - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder b; - nir_builder_init(&b, function->impl); - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - /* Only replace UBO 0 with constant offsets. */ - if (intr->intrinsic == nir_intrinsic_load_ubo && - nir_src_is_const(intr->src[0]) && - nir_src_as_uint(intr->src[0]) == 0 && - nir_src_is_const(intr->src[1]) && - /* TODO: Can't handle other bit sizes for now. */ - intr->dest.ssa.bit_size == 32) { - int num_components = intr->dest.ssa.num_components; - uint32_t offset = nir_src_as_uint(intr->src[1]) / 4; - - if (num_components == 1) { - /* Just replace the uniform load to constant load. */ - for (unsigned i = 0; i < num_uniforms; i++) { - if (offset == uniform_dw_offsets[i]) { - b.cursor = nir_before_instr(&intr->instr); - nir_ssa_def *def = nir_imm_int(&b, uniform_values[i]); - nir_ssa_def_rewrite_uses(&intr->dest.ssa, def); - nir_instr_remove(&intr->instr); - break; - } - } - } else { - /* Lower vector uniform load to scalar and replace each - * found component load with constant load. - */ - uint32_t max_offset = offset + num_components; - nir_ssa_def *components[NIR_MAX_VEC_COMPONENTS] = {0}; - bool found = false; - - b.cursor = nir_before_instr(&intr->instr); - - /* Find component to replace. */ - for (unsigned i = 0; i < num_uniforms; i++) { - uint32_t uni_offset = uniform_dw_offsets[i]; - if (uni_offset >= offset && uni_offset < max_offset) { - int index = uni_offset - offset; - components[index] = nir_imm_int(&b, uniform_values[i]); - found = true; - } - } - - if (!found) - continue; - - /* Create per-component uniform load. */ - for (unsigned i = 0; i < num_components; i++) { - if (!components[i]) { - uint32_t scalar_offset = (offset + i) * 4; - components[i] = nir_load_ubo(&b, 1, intr->dest.ssa.bit_size, - intr->src[0].ssa, - nir_imm_int(&b, scalar_offset)); - nir_intrinsic_instr *load = - nir_instr_as_intrinsic(components[i]->parent_instr); - nir_intrinsic_set_align(load, NIR_ALIGN_MUL_MAX, scalar_offset); - nir_intrinsic_set_range_base(load, scalar_offset); - nir_intrinsic_set_range(load, 4); - } - } - - /* Replace the original uniform load. */ - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - nir_vec(&b, components, num_components)); - nir_instr_remove(&intr->instr); - } - } - } - } - - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_instr_set.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_instr_set.c deleted file mode 100644 index a8c5833..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_instr_set.c +++ /dev/null @@ -1,864 +0,0 @@ -/* - * Copyright © 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_instr_set.h" -#include "nir_vla.h" -#include "../../util/half_float.h" - -static bool -src_is_ssa(nir_src *src, void *data) -{ - (void) data; - return src->is_ssa; -} - -static bool -dest_is_ssa(nir_dest *dest, void *data) -{ - (void) data; - return dest->is_ssa; -} - -ASSERTED static inline bool -instr_each_src_and_dest_is_ssa(const nir_instr *instr) -{ - if (!nir_foreach_dest((nir_instr *)instr, dest_is_ssa, NULL) || - !nir_foreach_src((nir_instr *)instr, src_is_ssa, NULL)) - return false; - - return true; -} - -/* This function determines if uses of an instruction can safely be rewritten - * to use another identical instruction instead. Note that this function must - * be kept in sync with hash_instr() and nir_instrs_equal() -- only - * instructions that pass this test will be handed on to those functions, and - * conversely they must handle everything that this function returns true for. - */ -static bool -instr_can_rewrite(const nir_instr *instr) -{ - /* We only handle SSA. */ - assert(instr_each_src_and_dest_is_ssa(instr)); - - switch (instr->type) { - case nir_instr_type_alu: - case nir_instr_type_deref: - case nir_instr_type_tex: - case nir_instr_type_load_const: - case nir_instr_type_phi: - return true; - case nir_instr_type_intrinsic: - return nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr)); - case nir_instr_type_call: - case nir_instr_type_jump: - case nir_instr_type_ssa_undef: - return false; - case nir_instr_type_parallel_copy: - default: - unreachable("Invalid instruction type"); - } - - return false; -} - - -#define HASH(hash, data) XXH32(&(data), sizeof(data), hash) - -static uint32_t -hash_src(uint32_t hash, const nir_src *src) -{ - assert(src->is_ssa); - hash = HASH(hash, src->ssa); - return hash; -} - -static uint32_t -hash_alu_src(uint32_t hash, const nir_alu_src *src, unsigned num_components) -{ - hash = HASH(hash, src->abs); - hash = HASH(hash, src->negate); - - for (unsigned i = 0; i < num_components; i++) - hash = HASH(hash, src->swizzle[i]); - - hash = hash_src(hash, &src->src); - return hash; -} - -static uint32_t -hash_alu(uint32_t hash, const nir_alu_instr *instr) -{ - hash = HASH(hash, instr->op); - - /* We explicitly don't hash instr->exact. */ - uint8_t flags = instr->no_signed_wrap | - instr->no_unsigned_wrap << 1; - hash = HASH(hash, flags); - - hash = HASH(hash, instr->dest.dest.ssa.num_components); - hash = HASH(hash, instr->dest.dest.ssa.bit_size); - - if (nir_op_infos[instr->op].algebraic_properties & NIR_OP_IS_2SRC_COMMUTATIVE) { - assert(nir_op_infos[instr->op].num_inputs >= 2); - - uint32_t hash0 = hash_alu_src(hash, &instr->src[0], - nir_ssa_alu_instr_src_components(instr, 0)); - uint32_t hash1 = hash_alu_src(hash, &instr->src[1], - nir_ssa_alu_instr_src_components(instr, 1)); - /* For commutative operations, we need some commutative way of - * combining the hashes. One option would be to XOR them but that - * means that anything with two identical sources will hash to 0 and - * that's common enough we probably don't want the guaranteed - * collision. Either addition or multiplication will also work. - */ - hash = hash0 * hash1; - - for (unsigned i = 2; i < nir_op_infos[instr->op].num_inputs; i++) { - hash = hash_alu_src(hash, &instr->src[i], - nir_ssa_alu_instr_src_components(instr, i)); - } - } else { - for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++) { - hash = hash_alu_src(hash, &instr->src[i], - nir_ssa_alu_instr_src_components(instr, i)); - } - } - - return hash; -} - -static uint32_t -hash_deref(uint32_t hash, const nir_deref_instr *instr) -{ - hash = HASH(hash, instr->deref_type); - hash = HASH(hash, instr->modes); - hash = HASH(hash, instr->type); - - if (instr->deref_type == nir_deref_type_var) - return HASH(hash, instr->var); - - hash = hash_src(hash, &instr->parent); - - switch (instr->deref_type) { - case nir_deref_type_struct: - hash = HASH(hash, instr->strct.index); - break; - - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: - hash = hash_src(hash, &instr->arr.index); - hash = HASH(hash, instr->arr.in_bounds); - break; - - case nir_deref_type_cast: - hash = HASH(hash, instr->cast.ptr_stride); - hash = HASH(hash, instr->cast.align_mul); - hash = HASH(hash, instr->cast.align_offset); - break; - - case nir_deref_type_var: - case nir_deref_type_array_wildcard: - /* Nothing to do */ - break; - - default: - unreachable("Invalid instruction deref type"); - } - - return hash; -} - -static uint32_t -hash_load_const(uint32_t hash, const nir_load_const_instr *instr) -{ - hash = HASH(hash, instr->def.num_components); - - if (instr->def.bit_size == 1) { - for (unsigned i = 0; i < instr->def.num_components; i++) { - uint8_t b = instr->value[i].b; - hash = HASH(hash, b); - } - } else { - unsigned size = instr->def.num_components * sizeof(*instr->value); - hash = XXH32(instr->value, size, hash); - } - - return hash; -} - -static int -cmp_phi_src(const void *data1, const void *data2) -{ - nir_phi_src *src1 = *(nir_phi_src **)data1; - nir_phi_src *src2 = *(nir_phi_src **)data2; - return src1->pred > src2->pred ? 1 : (src1->pred == src2->pred ? 0 : -1); -} - -static uint32_t -hash_phi(uint32_t hash, const nir_phi_instr *instr) -{ - hash = HASH(hash, instr->instr.block); - - /* sort sources by predecessor, since the order shouldn't matter */ - unsigned num_preds = instr->instr.block->predecessors->entries; - NIR_VLA(nir_phi_src *, srcs, num_preds); - unsigned i = 0; - nir_foreach_phi_src(src, instr) { - srcs[i++] = src; - } - - qsort(srcs, num_preds, sizeof(nir_phi_src *), cmp_phi_src); - - for (i = 0; i < num_preds; i++) { - hash = hash_src(hash, &srcs[i]->src); - hash = HASH(hash, srcs[i]->pred); - } - - return hash; -} - -static uint32_t -hash_intrinsic(uint32_t hash, const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - hash = HASH(hash, instr->intrinsic); - - if (info->has_dest) { - hash = HASH(hash, instr->dest.ssa.num_components); - hash = HASH(hash, instr->dest.ssa.bit_size); - } - - hash = XXH32(instr->const_index, info->num_indices * sizeof(instr->const_index[0]), hash); - - for (unsigned i = 0; i < nir_intrinsic_infos[instr->intrinsic].num_srcs; i++) - hash = hash_src(hash, &instr->src[i]); - - return hash; -} - -static uint32_t -hash_tex(uint32_t hash, const nir_tex_instr *instr) -{ - hash = HASH(hash, instr->op); - hash = HASH(hash, instr->num_srcs); - - for (unsigned i = 0; i < instr->num_srcs; i++) { - hash = HASH(hash, instr->src[i].src_type); - hash = hash_src(hash, &instr->src[i].src); - } - - hash = HASH(hash, instr->coord_components); - hash = HASH(hash, instr->sampler_dim); - hash = HASH(hash, instr->is_array); - hash = HASH(hash, instr->is_shadow); - hash = HASH(hash, instr->is_new_style_shadow); - hash = HASH(hash, instr->is_sparse); - unsigned component = instr->component; - hash = HASH(hash, component); - for (unsigned i = 0; i < 4; ++i) - for (unsigned j = 0; j < 2; ++j) - hash = HASH(hash, instr->tg4_offsets[i][j]); - hash = HASH(hash, instr->texture_index); - hash = HASH(hash, instr->sampler_index); - hash = HASH(hash, instr->texture_non_uniform); - hash = HASH(hash, instr->sampler_non_uniform); - - return hash; -} - -/* Computes a hash of an instruction for use in a hash table. Note that this - * will only work for instructions where instr_can_rewrite() returns true, and - * it should return identical hashes for two instructions that are the same - * according nir_instrs_equal(). - */ - -static uint32_t -hash_instr(const void *data) -{ - const nir_instr *instr = data; - uint32_t hash = 0; - - switch (instr->type) { - case nir_instr_type_alu: - hash = hash_alu(hash, nir_instr_as_alu(instr)); - break; - case nir_instr_type_deref: - hash = hash_deref(hash, nir_instr_as_deref(instr)); - break; - case nir_instr_type_load_const: - hash = hash_load_const(hash, nir_instr_as_load_const(instr)); - break; - case nir_instr_type_phi: - hash = hash_phi(hash, nir_instr_as_phi(instr)); - break; - case nir_instr_type_intrinsic: - hash = hash_intrinsic(hash, nir_instr_as_intrinsic(instr)); - break; - case nir_instr_type_tex: - hash = hash_tex(hash, nir_instr_as_tex(instr)); - break; - default: - unreachable("Invalid instruction type"); - } - - return hash; -} - -bool -nir_srcs_equal(nir_src src1, nir_src src2) -{ - if (src1.is_ssa) { - if (src2.is_ssa) { - return src1.ssa == src2.ssa; - } else { - return false; - } - } else { - if (src2.is_ssa) { - return false; - } else { - if ((src1.reg.indirect == NULL) != (src2.reg.indirect == NULL)) - return false; - - if (src1.reg.indirect) { - if (!nir_srcs_equal(*src1.reg.indirect, *src2.reg.indirect)) - return false; - } - - return src1.reg.reg == src2.reg.reg && - src1.reg.base_offset == src2.reg.base_offset; - } - } -} - -/** - * If the \p s is an SSA value that was generated by a negation instruction, - * that instruction is returned as a \c nir_alu_instr. Otherwise \c NULL is - * returned. - */ -static nir_alu_instr * -get_neg_instr(nir_src s) -{ - nir_alu_instr *alu = nir_src_as_alu_instr(s); - - return alu != NULL && (alu->op == nir_op_fneg || alu->op == nir_op_ineg) - ? alu : NULL; -} - -bool -nir_const_value_negative_equal(nir_const_value c1, - nir_const_value c2, - nir_alu_type full_type) -{ - assert(nir_alu_type_get_base_type(full_type) != nir_type_invalid); - assert(nir_alu_type_get_type_size(full_type) != 0); - - switch (full_type) { - case nir_type_float16: - return _mesa_half_to_float(c1.u16) == -_mesa_half_to_float(c2.u16); - - case nir_type_float32: - return c1.f32 == -c2.f32; - - case nir_type_float64: - return c1.f64 == -c2.f64; - - case nir_type_int8: - case nir_type_uint8: - return c1.i8 == -c2.i8; - - case nir_type_int16: - case nir_type_uint16: - return c1.i16 == -c2.i16; - - case nir_type_int32: - case nir_type_uint32: - return c1.i32 == -c2.i32; - - case nir_type_int64: - case nir_type_uint64: - return c1.i64 == -c2.i64; - - default: - break; - } - - return false; -} - -/** - * Shallow compare of ALU srcs to determine if one is the negation of the other - * - * This function detects cases where \p alu1 is a constant and \p alu2 is a - * constant that is its negation. It will also detect cases where \p alu2 is - * an SSA value that is a \c nir_op_fneg applied to \p alu1 (and vice versa). - * - * This function does not detect the general case when \p alu1 and \p alu2 are - * SSA values that are the negations of each other (e.g., \p alu1 represents - * (a * b) and \p alu2 represents (-a * b)). - * - * \warning - * It is the responsibility of the caller to ensure that the component counts, - * write masks, and base types of the sources being compared are compatible. - */ -bool -nir_alu_srcs_negative_equal(const nir_alu_instr *alu1, - const nir_alu_instr *alu2, - unsigned src1, unsigned src2) -{ -#ifndef NDEBUG - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - assert(nir_alu_instr_channel_used(alu1, src1, i) == - nir_alu_instr_channel_used(alu2, src2, i)); - } - - if (nir_alu_type_get_base_type(nir_op_infos[alu1->op].input_types[src1]) == nir_type_float) { - assert(nir_op_infos[alu1->op].input_types[src1] == - nir_op_infos[alu2->op].input_types[src2]); - } else { - assert(nir_op_infos[alu1->op].input_types[src1] == nir_type_int); - assert(nir_op_infos[alu2->op].input_types[src2] == nir_type_int); - } -#endif - - if (alu1->src[src1].abs != alu2->src[src2].abs) - return false; - - bool parity = alu1->src[src1].negate != alu2->src[src2].negate; - - /* Handling load_const instructions is tricky. */ - - const nir_const_value *const const1 = - nir_src_as_const_value(alu1->src[src1].src); - - if (const1 != NULL) { - /* Assume that constant folding will eliminate source mods and unary - * ops. - */ - if (parity) - return false; - - const nir_const_value *const const2 = - nir_src_as_const_value(alu2->src[src2].src); - - if (const2 == NULL) - return false; - - if (nir_src_bit_size(alu1->src[src1].src) != - nir_src_bit_size(alu2->src[src2].src)) - return false; - - const nir_alu_type full_type = nir_op_infos[alu1->op].input_types[src1] | - nir_src_bit_size(alu1->src[src1].src); - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - if (nir_alu_instr_channel_used(alu1, src1, i) && - !nir_const_value_negative_equal(const1[alu1->src[src1].swizzle[i]], - const2[alu2->src[src2].swizzle[i]], - full_type)) - return false; - } - - return true; - } - - uint8_t alu1_swizzle[NIR_MAX_VEC_COMPONENTS] = {0}; - nir_src alu1_actual_src; - nir_alu_instr *neg1 = get_neg_instr(alu1->src[src1].src); - - if (neg1) { - parity = !parity; - alu1_actual_src = neg1->src[0].src; - - for (unsigned i = 0; i < nir_ssa_alu_instr_src_components(neg1, 0); i++) - alu1_swizzle[i] = neg1->src[0].swizzle[i]; - } else { - alu1_actual_src = alu1->src[src1].src; - - for (unsigned i = 0; i < nir_ssa_alu_instr_src_components(alu1, src1); i++) - alu1_swizzle[i] = i; - } - - uint8_t alu2_swizzle[NIR_MAX_VEC_COMPONENTS] = {0}; - nir_src alu2_actual_src; - nir_alu_instr *neg2 = get_neg_instr(alu2->src[src2].src); - - if (neg2) { - parity = !parity; - alu2_actual_src = neg2->src[0].src; - - for (unsigned i = 0; i < nir_ssa_alu_instr_src_components(neg2, 0); i++) - alu2_swizzle[i] = neg2->src[0].swizzle[i]; - } else { - alu2_actual_src = alu2->src[src2].src; - - for (unsigned i = 0; i < nir_ssa_alu_instr_src_components(alu2, src2); i++) - alu2_swizzle[i] = i; - } - - for (unsigned i = 0; i < nir_ssa_alu_instr_src_components(alu1, src1); i++) { - if (alu1_swizzle[alu1->src[src1].swizzle[i]] != - alu2_swizzle[alu2->src[src2].swizzle[i]]) - return false; - } - - return parity && nir_srcs_equal(alu1_actual_src, alu2_actual_src); -} - -bool -nir_alu_srcs_equal(const nir_alu_instr *alu1, const nir_alu_instr *alu2, - unsigned src1, unsigned src2) -{ - if (alu1->src[src1].abs != alu2->src[src2].abs || - alu1->src[src1].negate != alu2->src[src2].negate) - return false; - - for (unsigned i = 0; i < nir_ssa_alu_instr_src_components(alu1, src1); i++) { - if (alu1->src[src1].swizzle[i] != alu2->src[src2].swizzle[i]) - return false; - } - - return nir_srcs_equal(alu1->src[src1].src, alu2->src[src2].src); -} - -/* Returns "true" if two instructions are equal. Note that this will only - * work for the subset of instructions defined by instr_can_rewrite(). Also, - * it should only return "true" for instructions that hash_instr() will return - * the same hash for (ignoring collisions, of course). - */ - -bool -nir_instrs_equal(const nir_instr *instr1, const nir_instr *instr2) -{ - assert(instr_can_rewrite(instr1) && instr_can_rewrite(instr2)); - - if (instr1->type != instr2->type) - return false; - - switch (instr1->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu1 = nir_instr_as_alu(instr1); - nir_alu_instr *alu2 = nir_instr_as_alu(instr2); - - if (alu1->op != alu2->op) - return false; - - /* We explicitly don't compare instr->exact. */ - - if (alu1->no_signed_wrap != alu2->no_signed_wrap) - return false; - - if (alu1->no_unsigned_wrap != alu2->no_unsigned_wrap) - return false; - - /* TODO: We can probably acutally do something more inteligent such - * as allowing different numbers and taking a maximum or something - * here */ - if (alu1->dest.dest.ssa.num_components != alu2->dest.dest.ssa.num_components) - return false; - - if (alu1->dest.dest.ssa.bit_size != alu2->dest.dest.ssa.bit_size) - return false; - - if (nir_op_infos[alu1->op].algebraic_properties & NIR_OP_IS_2SRC_COMMUTATIVE) { - if ((!nir_alu_srcs_equal(alu1, alu2, 0, 0) || - !nir_alu_srcs_equal(alu1, alu2, 1, 1)) && - (!nir_alu_srcs_equal(alu1, alu2, 0, 1) || - !nir_alu_srcs_equal(alu1, alu2, 1, 0))) - return false; - - for (unsigned i = 2; i < nir_op_infos[alu1->op].num_inputs; i++) { - if (!nir_alu_srcs_equal(alu1, alu2, i, i)) - return false; - } - } else { - for (unsigned i = 0; i < nir_op_infos[alu1->op].num_inputs; i++) { - if (!nir_alu_srcs_equal(alu1, alu2, i, i)) - return false; - } - } - return true; - } - case nir_instr_type_deref: { - nir_deref_instr *deref1 = nir_instr_as_deref(instr1); - nir_deref_instr *deref2 = nir_instr_as_deref(instr2); - - if (deref1->deref_type != deref2->deref_type || - deref1->modes != deref2->modes || - deref1->type != deref2->type) - return false; - - if (deref1->deref_type == nir_deref_type_var) - return deref1->var == deref2->var; - - if (!nir_srcs_equal(deref1->parent, deref2->parent)) - return false; - - switch (deref1->deref_type) { - case nir_deref_type_struct: - if (deref1->strct.index != deref2->strct.index) - return false; - break; - - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: - if (!nir_srcs_equal(deref1->arr.index, deref2->arr.index)) - return false; - if (deref1->arr.in_bounds != deref2->arr.in_bounds) - return false; - break; - - case nir_deref_type_cast: - if (deref1->cast.ptr_stride != deref2->cast.ptr_stride || - deref1->cast.align_mul != deref2->cast.align_mul || - deref1->cast.align_offset != deref2->cast.align_offset) - return false; - break; - - case nir_deref_type_var: - case nir_deref_type_array_wildcard: - /* Nothing to do */ - break; - - default: - unreachable("Invalid instruction deref type"); - } - return true; - } - case nir_instr_type_tex: { - nir_tex_instr *tex1 = nir_instr_as_tex(instr1); - nir_tex_instr *tex2 = nir_instr_as_tex(instr2); - - if (tex1->op != tex2->op) - return false; - - if (tex1->num_srcs != tex2->num_srcs) - return false; - for (unsigned i = 0; i < tex1->num_srcs; i++) { - if (tex1->src[i].src_type != tex2->src[i].src_type || - !nir_srcs_equal(tex1->src[i].src, tex2->src[i].src)) { - return false; - } - } - - if (tex1->coord_components != tex2->coord_components || - tex1->sampler_dim != tex2->sampler_dim || - tex1->is_array != tex2->is_array || - tex1->is_shadow != tex2->is_shadow || - tex1->is_new_style_shadow != tex2->is_new_style_shadow || - tex1->component != tex2->component || - tex1->texture_index != tex2->texture_index || - tex1->sampler_index != tex2->sampler_index) { - return false; - } - - if (memcmp(tex1->tg4_offsets, tex2->tg4_offsets, - sizeof(tex1->tg4_offsets))) - return false; - - return true; - } - case nir_instr_type_load_const: { - nir_load_const_instr *load1 = nir_instr_as_load_const(instr1); - nir_load_const_instr *load2 = nir_instr_as_load_const(instr2); - - if (load1->def.num_components != load2->def.num_components) - return false; - - if (load1->def.bit_size != load2->def.bit_size) - return false; - - if (load1->def.bit_size == 1) { - for (unsigned i = 0; i < load1->def.num_components; ++i) { - if (load1->value[i].b != load2->value[i].b) - return false; - } - } else { - unsigned size = load1->def.num_components * sizeof(*load1->value); - if (memcmp(load1->value, load2->value, size) != 0) - return false; - } - return true; - } - case nir_instr_type_phi: { - nir_phi_instr *phi1 = nir_instr_as_phi(instr1); - nir_phi_instr *phi2 = nir_instr_as_phi(instr2); - - if (phi1->instr.block != phi2->instr.block) - return false; - - /* In case of phis with no sources, the dest needs to be checked - * to ensure that phis with incompatible dests won't get merged - * during CSE. */ - if (phi1->dest.ssa.num_components != phi2->dest.ssa.num_components) - return false; - if (phi1->dest.ssa.bit_size != phi2->dest.ssa.bit_size) - return false; - - nir_foreach_phi_src(src1, phi1) { - nir_foreach_phi_src(src2, phi2) { - if (src1->pred == src2->pred) { - if (!nir_srcs_equal(src1->src, src2->src)) - return false; - - break; - } - } - } - - return true; - } - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrinsic1 = nir_instr_as_intrinsic(instr1); - nir_intrinsic_instr *intrinsic2 = nir_instr_as_intrinsic(instr2); - const nir_intrinsic_info *info = - &nir_intrinsic_infos[intrinsic1->intrinsic]; - - if (intrinsic1->intrinsic != intrinsic2->intrinsic || - intrinsic1->num_components != intrinsic2->num_components) - return false; - - if (info->has_dest && intrinsic1->dest.ssa.num_components != - intrinsic2->dest.ssa.num_components) - return false; - - if (info->has_dest && intrinsic1->dest.ssa.bit_size != - intrinsic2->dest.ssa.bit_size) - return false; - - for (unsigned i = 0; i < info->num_srcs; i++) { - if (!nir_srcs_equal(intrinsic1->src[i], intrinsic2->src[i])) - return false; - } - - for (unsigned i = 0; i < info->num_indices; i++) { - if (intrinsic1->const_index[i] != intrinsic2->const_index[i]) - return false; - } - - return true; - } - case nir_instr_type_call: - case nir_instr_type_jump: - case nir_instr_type_ssa_undef: - case nir_instr_type_parallel_copy: - default: - unreachable("Invalid instruction type"); - } - - unreachable("All cases in the above switch should return"); -} - -static nir_ssa_def * -nir_instr_get_dest_ssa_def(nir_instr *instr) -{ - switch (instr->type) { - case nir_instr_type_alu: - assert(nir_instr_as_alu(instr)->dest.dest.is_ssa); - return &nir_instr_as_alu(instr)->dest.dest.ssa; - case nir_instr_type_deref: - assert(nir_instr_as_deref(instr)->dest.is_ssa); - return &nir_instr_as_deref(instr)->dest.ssa; - case nir_instr_type_load_const: - return &nir_instr_as_load_const(instr)->def; - case nir_instr_type_phi: - assert(nir_instr_as_phi(instr)->dest.is_ssa); - return &nir_instr_as_phi(instr)->dest.ssa; - case nir_instr_type_intrinsic: - assert(nir_instr_as_intrinsic(instr)->dest.is_ssa); - return &nir_instr_as_intrinsic(instr)->dest.ssa; - case nir_instr_type_tex: - assert(nir_instr_as_tex(instr)->dest.is_ssa); - return &nir_instr_as_tex(instr)->dest.ssa; - default: - unreachable("We never ask for any of these"); - } -} - -static bool -cmp_func(const void *data1, const void *data2) -{ - return nir_instrs_equal(data1, data2); -} - -struct set * -nir_instr_set_create(void *mem_ctx) -{ - return _mesa_set_create(mem_ctx, hash_instr, cmp_func); -} - -void -nir_instr_set_destroy(struct set *instr_set) -{ - _mesa_set_destroy(instr_set, NULL); -} - -bool -nir_instr_set_add_or_rewrite(struct set *instr_set, nir_instr *instr, - bool (*cond_function) (const nir_instr *a, - const nir_instr *b)) -{ - if (!instr_can_rewrite(instr)) - return false; - - struct set_entry *e = _mesa_set_search_or_add(instr_set, instr, NULL); - nir_instr *match = (nir_instr *) e->key; - if (match == instr) - return false; - - if (!cond_function || cond_function(match, instr)) { - /* rewrite instruction if condition is matched */ - nir_ssa_def *def = nir_instr_get_dest_ssa_def(instr); - nir_ssa_def *new_def = nir_instr_get_dest_ssa_def(match); - - /* It's safe to replace an exact instruction with an inexact one as - * long as we make it exact. If we got here, the two instructions are - * exactly identical in every other way so, once we've set the exact - * bit, they are the same. - */ - if (instr->type == nir_instr_type_alu && nir_instr_as_alu(instr)->exact) - nir_instr_as_alu(match)->exact = true; - - nir_ssa_def_rewrite_uses(def, new_def); - - nir_instr_remove(instr); - - return true; - } else { - /* otherwise, replace hashed instruction */ - e->key = instr; - return false; - } -} - -void -nir_instr_set_remove(struct set *instr_set, nir_instr *instr) -{ - if (!instr_can_rewrite(instr)) - return; - - struct set_entry *entry = _mesa_set_search(instr_set, instr); - if (entry) - _mesa_set_remove(instr_set, entry); -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_instr_set.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_instr_set.h deleted file mode 100644 index 43ea103..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_instr_set.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_INSTR_SET_H -#define NIR_INSTR_SET_H - -#include "nir.h" - -/** - * This file defines functions for creating, destroying, and manipulating an - * "instruction set," which is an abstraction for finding duplicate - * instructions using a hash set. Note that the question of whether an - * instruction is actually a duplicate (e.g. whether it has any side effects) - * is handled transparently. The user can pass any instruction to - * nir_instr_set_add_or_rewrite() and nir_instr_set_remove(), and if the - * instruction isn't safe to rewrite or isn't supported, it's silently - * removed. - */ - -/*@{*/ - -/** Creates an instruction set, using a given ralloc mem_ctx */ -struct set *nir_instr_set_create(void *mem_ctx); - -/** Destroys an instruction set. */ -void nir_instr_set_destroy(struct set *instr_set); - -/** - * Adds an instruction to an instruction set if it doesn't exist. If it - * does already exist, rewrites all uses of it to point to the other - * already-inserted instruction. Returns 'true' if the uses of the instruction - * were rewritten. Otherwise, replaces the already-inserted instruction - * with the new one. - * - * If cond_function() is given, only rewrites uses if - * cond_function(old_instr, new_instr) returns true. - */ -bool nir_instr_set_add_or_rewrite(struct set *instr_set, nir_instr *instr, - bool (*cond_function)(const nir_instr *a, - const nir_instr *b)); - -/** - * Removes an instruction from an instruction set, so that other instructions - * won't be merged with it. - */ -void nir_instr_set_remove(struct set *instr_set, nir_instr *instr); - -/*@}*/ - -#endif /* NIR_INSTR_SET_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.c deleted file mode 100644 index d6574d8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.c +++ /dev/null @@ -1,10983 +0,0 @@ -/* Copyright (C) 2018 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -const nir_intrinsic_info nir_intrinsic_infos[nir_num_intrinsics] = { -{ - .name = "accept_ray_intersection", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "addr_mode_is", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_MEMORY_MODES, - }, - .index_map = { - [NIR_INTRINSIC_MEMORY_MODES] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "alloc_vertices_and_primitives_amd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_add_gen_prim_count_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = 0, -}, -{ - .name = "atomic_add_gs_emit_prim_count_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_add_gs_invocation_count_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_add_xfb_prim_count_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_add", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_add_deref", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_and", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_and_deref", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_comp_swap", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_comp_swap_deref", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_exchange", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_exchange_deref", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_inc", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_inc_deref", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_max", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_max_deref", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_min", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_min_deref", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_or", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_or_deref", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_post_dec", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_post_dec_deref", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_pre_dec", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_pre_dec_deref", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "atomic_counter_read", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "atomic_counter_read_deref", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "atomic_counter_xor", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "atomic_counter_xor_deref", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "ballot", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "ballot_bit_count_exclusive", - .num_srcs = 1, - .src_components = { - 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "ballot_bit_count_inclusive", - .num_srcs = 1, - .src_components = { - 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "ballot_bit_count_reduce", - .num_srcs = 1, - .src_components = { - 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "ballot_bitfield_extract", - .num_srcs = 2, - .src_components = { - 4, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "ballot_find_lsb", - .num_srcs = 1, - .src_components = { - 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "ballot_find_msb", - .num_srcs = 1, - .src_components = { - 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "begin_invocation_interlock", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_add", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_and", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_comp_swap", - .num_srcs = 5, - .src_components = { - -1, 4, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_dec_wrap", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_exchange", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_fadd", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_fmax", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_fmin", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_imax", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_imin", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_inc_wrap", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_or", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_umax", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_umin", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_atomic_xor", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_image_descriptor_amd", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "bindless_image_format", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "bindless_image_fragment_mask_load_amd", - .num_srcs = 2, - .src_components = { - -1, 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "bindless_image_load", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_DEST_TYPE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "bindless_image_load_raw_intel", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "bindless_image_order", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "bindless_image_samples", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "bindless_image_samples_identical", - .num_srcs = 2, - .src_components = { - -1, 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "bindless_image_size", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "bindless_image_sparse_load", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_DEST_TYPE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "bindless_image_store", - .num_srcs = 5, - .src_components = { - -1, 4, 1, 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_SRC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_SRC_TYPE] = 5, - }, - .flags = 0, -}, -{ - .name = "bindless_image_store_raw_intel", - .num_srcs = 3, - .src_components = { - -1, 1, 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "bindless_resource_ir3", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_DESC_SET, - }, - .index_map = { - [NIR_INTRINSIC_DESC_SET] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "block_image_store_agx", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x30, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_IMAGE_DIM, - }, - .index_map = { - [NIR_INTRINSIC_FORMAT] = 1, - [NIR_INTRINSIC_IMAGE_DIM] = 2, - }, - .flags = NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "btd_retire_intel", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "btd_spawn_intel", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "btd_stack_push_intel", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STACK_SIZE, - }, - .index_map = { - [NIR_INTRINSIC_STACK_SIZE] = 1, - }, - .flags = 0, -}, -{ - .name = "buffer_atomic_add_amd", - .num_srcs = 2, - .src_components = { - 4, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "bvh64_intersect_ray_amd", - .num_srcs = 6, - .src_components = { - 4, 2, 1, 3, 3, 3 - }, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "cond_end_ir3", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "control_barrier", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "convert_alu_types", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_SRC_TYPE, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_ROUNDING_MODE, - NIR_INTRINSIC_SATURATE, - }, - .index_map = { - [NIR_INTRINSIC_SRC_TYPE] = 1, - [NIR_INTRINSIC_DEST_TYPE] = 2, - [NIR_INTRINSIC_ROUNDING_MODE] = 3, - [NIR_INTRINSIC_SATURATE] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "copy_deref", - .num_srcs = 2, - .src_components = { - -1, -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_DST_ACCESS, - NIR_INTRINSIC_SRC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_DST_ACCESS] = 1, - [NIR_INTRINSIC_SRC_ACCESS] = 2, - }, - .flags = 0, -}, -{ - .name = "copy_ubo_to_uniform_ir3", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE] = 2, - }, - .flags = 0, -}, -{ - .name = "demote", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "demote_if", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "deref_atomic_add", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_and", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_comp_swap", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_exchange", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_fadd", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_fcomp_swap", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_fmax", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_fmin", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_imax", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_imin", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_or", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_umax", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_umin", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_atomic_xor", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "deref_buffer_array_length", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "deref_mode_is", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_MEMORY_MODES, - }, - .index_map = { - [NIR_INTRINSIC_MEMORY_MODES] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "discard", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "discard_if", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "elect", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "emit_vertex", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = 0, -}, -{ - .name = "emit_vertex_with_counter", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = 0, -}, -{ - .name = "end_invocation_interlock", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "end_patch_ir3", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "end_primitive", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = 0, -}, -{ - .name = "end_primitive_with_counter", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = 0, -}, -{ - .name = "exclusive_scan", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_REDUCTION_OP, - }, - .index_map = { - [NIR_INTRINSIC_REDUCTION_OP] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "execute_callable", - .num_srcs = 2, - .src_components = { - 1, -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "execute_closest_hit_amd", - .num_srcs = 6, - .src_components = { - 1, 1, 1, 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "execute_miss_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "export_amd", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_FLAGS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_FLAGS] = 3, - }, - .flags = 0, -}, -{ - .name = "first_invocation", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "gds_atomic_add_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "get_ssbo_size", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "get_ubo_size", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "global_atomic_add", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_add_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_add_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_add_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_and", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_and_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_and_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_and_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_comp_swap", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_comp_swap_2x32", - .num_srcs = 3, - .src_components = { - 2, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_comp_swap_amd", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_comp_swap_ir3", - .num_srcs = 3, - .src_components = { - 2, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_exchange", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_exchange_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_exchange_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_exchange_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_fadd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fadd_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fadd_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_fcomp_swap", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fcomp_swap_2x32", - .num_srcs = 3, - .src_components = { - 2, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fcomp_swap_amd", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_fmax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fmax_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fmax_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_fmin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fmin_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_fmin_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_imax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_imax_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_imax_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_imax_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_imin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_imin_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_imin_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_imin_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_or", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_or_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_or_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_or_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_umax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_umax_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_umax_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_umax_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_umin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_umin_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_umin_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_umin_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_xor", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_xor_2x32", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "global_atomic_xor_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "global_atomic_xor_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "group_memory_barrier", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "ignore_ray_intersection", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "image_atomic_add", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_and", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_comp_swap", - .num_srcs = 5, - .src_components = { - 1, 4, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_dec_wrap", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_exchange", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_fadd", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_fmax", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_fmin", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_imax", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_imin", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_inc_wrap", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_or", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_umax", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_umin", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_atomic_xor", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_add", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_and", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_comp_swap", - .num_srcs = 5, - .src_components = { - -1, 4, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_dec_wrap", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_exchange", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_fadd", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_fmax", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_fmin", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_imax", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_imin", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_inc_wrap", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_or", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_umax", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_umin", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_atomic_xor", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_deref_descriptor_amd", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_deref_format", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_deref_fragment_mask_load_amd", - .num_srcs = 2, - .src_components = { - -1, 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_deref_load", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_DEST_TYPE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_deref_load_param_intel", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_deref_load_raw_intel", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_deref_order", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_deref_samples", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_deref_samples_identical", - .num_srcs = 2, - .src_components = { - -1, 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_deref_size", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_deref_sparse_load", - .num_srcs = 4, - .src_components = { - -1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_DEST_TYPE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_deref_store", - .num_srcs = 5, - .src_components = { - -1, 4, 1, 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_SRC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_SRC_TYPE] = 5, - }, - .flags = 0, -}, -{ - .name = "image_deref_store_raw_intel", - .num_srcs = 3, - .src_components = { - -1, 1, 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "image_descriptor_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_format", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_fragment_mask_load_amd", - .num_srcs = 2, - .src_components = { - 1, 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_load", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 6, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - [NIR_INTRINSIC_DEST_TYPE] = 6, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_load_raw_intel", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_order", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_samples", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_samples_identical", - .num_srcs = 2, - .src_components = { - 1, 4 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_size", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "image_sparse_load", - .num_srcs = 4, - .src_components = { - 1, 4, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 6, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - [NIR_INTRINSIC_DEST_TYPE] = 6, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "image_store", - .num_srcs = 5, - .src_components = { - 1, 4, 1, 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 6, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - NIR_INTRINSIC_SRC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - [NIR_INTRINSIC_SRC_TYPE] = 6, - }, - .flags = 0, -}, -{ - .name = "image_store_raw_intel", - .num_srcs = 3, - .src_components = { - 1, 1, 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_RANGE_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IMAGE_DIM] = 1, - [NIR_INTRINSIC_IMAGE_ARRAY] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - [NIR_INTRINSIC_RANGE_BASE] = 5, - }, - .flags = 0, -}, -{ - .name = "inclusive_scan", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_REDUCTION_OP, - }, - .index_map = { - [NIR_INTRINSIC_REDUCTION_OP] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "interp_deref_at_centroid", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "interp_deref_at_offset", - .num_srcs = 2, - .src_components = { - 1, 2 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "interp_deref_at_sample", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "interp_deref_at_vertex", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "is_helper_invocation", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "is_sparse_texels_resident", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x21, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "is_subgroup_invocation_lt_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "lane_permute_16_amd", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "last_invocation", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "launch_mesh_workgroups", - .num_srcs = 1, - .src_components = { - 3 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE] = 2, - }, - .flags = 0, -}, -{ - .name = "launch_mesh_workgroups_with_payload_deref", - .num_srcs = 2, - .src_components = { - 3, -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "load_aa_line_width", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_accel_struct_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_agx", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_SIGN_EXTEND, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_BASE] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_SIGN_EXTEND] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_alpha_reference_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_back_face_agx", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x21, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_barycentric_at_offset", - .num_srcs = 1, - .src_components = { - 2 - }, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_INTERP_MODE, - }, - .index_map = { - [NIR_INTRINSIC_INTERP_MODE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_barycentric_at_sample", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_INTERP_MODE, - }, - .index_map = { - [NIR_INTRINSIC_INTERP_MODE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_barycentric_centroid", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_INTERP_MODE, - }, - .index_map = { - [NIR_INTRINSIC_INTERP_MODE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_barycentric_model", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_INTERP_MODE, - }, - .index_map = { - [NIR_INTRINSIC_INTERP_MODE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_barycentric_pixel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_INTERP_MODE, - }, - .index_map = { - [NIR_INTRINSIC_INTERP_MODE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_barycentric_sample", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_INTERP_MODE, - }, - .index_map = { - [NIR_INTRINSIC_INTERP_MODE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_base_global_invocation_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_base_instance", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_base_vertex", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_base_workgroup_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_blend_const_color_a_float", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_blend_const_color_aaaa8888_unorm", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_blend_const_color_b_float", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_blend_const_color_g_float", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_blend_const_color_r_float", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_blend_const_color_rgba", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_blend_const_color_rgba8888_unorm", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_btd_global_arg_addr_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_btd_local_arg_addr_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_btd_resume_sbt_addr_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_btd_shader_type_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_btd_stack_id_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_buffer_amd", - .num_srcs = 4, - .src_components = { - 4, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_MEMORY_MODES, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_MEMORY_MODES] = 2, - [NIR_INTRINSIC_ACCESS] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_callable_sbt_addr_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_callable_sbt_stride_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x10, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_clamp_vertex_color_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_clip_half_line_width_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_color0", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_color1", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_constant", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_constant_agx", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_SIGN_EXTEND, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_BASE] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_SIGN_EXTEND] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_constant_base_ptr", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_converted_output_pan", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_DEST_TYPE] = 1, - [NIR_INTRINSIC_IO_SEMANTICS] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_coverage_mask_pan", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_cull_any_enabled_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_cull_back_face_enabled_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_cull_ccw_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_cull_front_face_enabled_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_cull_mask", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_cull_mask_and_flags_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_cull_small_prim_precision_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_cull_small_primitives_enabled_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_deref", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_deref_block_intel", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_desc_set_address_intel", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_draw_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_esgs_vertex_stride_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_fb_layers_v3d", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_first_vertex", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_force_vrs_rates_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_frag_coord", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_frag_invocation_count", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_frag_shading_rate", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_frag_size", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_front_face", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x21, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_fs_input_interp_deltas", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_IO_SEMANTICS] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_fully_covered", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_global_2x32", - .num_srcs = 1, - .src_components = { - 2 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_global_amd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_global_base_ptr", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_block_intel", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_global_const_block_intel", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_constant", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_constant_bounded", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_constant_offset", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_invocation_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_invocation_id_zero_base", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_invocation_index", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_global_ir3", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_gs_header_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_gs_vertex_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_helper_invocation", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x21, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_hit_attrib_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "load_hs_out_patch_data_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_hs_patch_stride_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_initial_edgeflags_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "load_input", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - [NIR_INTRINSIC_IO_SEMANTICS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_input_vertex", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - [NIR_INTRINSIC_IO_SEMANTICS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_instance_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_interpolated_input", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - [NIR_INTRINSIC_IO_SEMANTICS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_intersection_opaque_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_invocation_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_is_indexed_draw", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_kernel_input", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_layer_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_lds_ngg_gs_out_vertex_base_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_lds_ngg_scratch_base_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_leaf_opaque_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_leaf_procedural_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_line_coord", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_line_width", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_local_invocation_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_local_invocation_index", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_local_pixel_agx", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_FORMAT, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_FORMAT] = 2, - }, - .flags = NIR_INTRINSIC_CAN_REORDER | NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_local_shared_r600", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_lshs_vertex_stride_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_merged_wave_info_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_mesh_inline_data_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ALIGN_OFFSET] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_mesh_view_count", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_mesh_view_indices", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_multisampled_pan", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_num_subgroups", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_num_vertices", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_num_vertices_per_primitive_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_num_workgroups", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ordered_id_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_output", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - [NIR_INTRINSIC_IO_SEMANTICS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_packed_passthrough_primitive_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_param", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_PARAM_IDX, - }, - .index_map = { - [NIR_INTRINSIC_PARAM_IDX] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_patch_vertices_in", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_per_primitive_output", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - [NIR_INTRINSIC_IO_SEMANTICS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_per_vertex_input", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - [NIR_INTRINSIC_IO_SEMANTICS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_per_vertex_output", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - [NIR_INTRINSIC_IO_SEMANTICS] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_persp_center_rhw_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_pipeline_stat_query_enabled_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_point_coord", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_point_coord_maybe_flipped", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "load_preamble", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_prim_gen_query_enabled_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_prim_xfb_query_enabled_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x1, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_primitive_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_primitive_location_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_DRIVER_LOCATION, - }, - .index_map = { - [NIR_INTRINSIC_DRIVER_LOCATION] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_printf_buffer_address", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_provoking_vtx_in_prim_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ptr_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "load_push_constant", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_rasterization_samples_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_raw_output_pan", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_IO_SEMANTICS] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_base_mem_addr_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_flags", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_geometry_index", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_hit_kind", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_hit_sbt_addr_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_hit_sbt_stride_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x10, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_hw_stack_size_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_instance_custom_index", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_launch_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_launch_size", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_launch_size_addr_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_miss_sbt_addr_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_miss_sbt_stride_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x10, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_num_dss_rt_stacks_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_object_direction", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_object_origin", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_object_to_world", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_COLUMN, - }, - .index_map = { - [NIR_INTRINSIC_COLUMN] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_query_global_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_sw_stack_size_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_t_max", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_t_min", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_world_direction", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_world_origin", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ray_world_to_object", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_COLUMN, - }, - .index_map = { - [NIR_INTRINSIC_COLUMN] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_rel_patch_id_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_reloc_const_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_PARAM_IDX, - }, - .index_map = { - [NIR_INTRINSIC_PARAM_IDX] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_attr_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_attr_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_es2gs_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_esgs_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_gs2vs_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_gsvs_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_mesh_scratch_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_mesh_scratch_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_task_draw_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_task_payload_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_tess_factors_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_tess_factors_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_tess_offchip_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ring_tess_offchip_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_rt_arg_scratch_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_rt_conversion_pan", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_SRC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_SRC_TYPE] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_rt_dynamic_callable_stack_base_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_id_no_per_sample", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_mask_in", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_pos", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_pos_from_id", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_pos_or_center", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_positions_amd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sample_positions_pan", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sampler_lod_parameters_pan", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sbt_base_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sbt_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_sbt_stride_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_scalar_arg_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_scratch", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ALIGN_MUL] = 1, - [NIR_INTRINSIC_ALIGN_OFFSET] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_scratch_base_ptr", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_scratch_dxil", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_shader_record_ptr", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_shared", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_shared2_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_OFFSET0, - NIR_INTRINSIC_OFFSET1, - NIR_INTRINSIC_ST64, - }, - .index_map = { - [NIR_INTRINSIC_OFFSET0] = 1, - [NIR_INTRINSIC_OFFSET1] = 2, - [NIR_INTRINSIC_ST64] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_shared_base_ptr", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_shared_block_intel", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_shared_dxil", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_shared_ir3", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_shared_uniform_block_intel", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_simd_width_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_smem_amd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ALIGN_MUL] = 1, - [NIR_INTRINSIC_ALIGN_OFFSET] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_smem_buffer_amd", - .num_srcs = 2, - .src_components = { - 4, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ALIGN_MUL] = 1, - [NIR_INTRINSIC_ALIGN_OFFSET] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ssbo", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_ssbo_address", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ssbo_block_intel", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_ssbo_ir3", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_ssbo_uniform_block_intel", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_stack", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - NIR_INTRINSIC_CALL_IDX, - NIR_INTRINSIC_VALUE_ID, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - [NIR_INTRINSIC_CALL_IDX] = 4, - [NIR_INTRINSIC_VALUE_ID] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_streamout_buffer_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_streamout_config_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_streamout_offset_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_streamout_write_index_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_eq_mask", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_ge_mask", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_gt_mask", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_id_shift_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_invocation", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_le_mask", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_lt_mask", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_subgroup_size", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_task_payload", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_task_ring_entry_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tcs_header_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tcs_in_param_base_r600", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tcs_num_patches_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tcs_out_param_base_r600", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tcs_rel_patch_id_r600", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tcs_tess_factor_base_r600", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_coord", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_coord_r600", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_factor_base_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_level_inner", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_level_inner_default", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_level_outer", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_level_outer_default", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_param_base_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tess_rel_patch_id_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_texture_base_agx", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_texture_rect_scaling", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_tlb_color_v3d", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - }, - .flags = 0, -}, -{ - .name = "load_topology_id_intel", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_typed_buffer_amd", - .num_srcs = 4, - .src_components = { - 4, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 6, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_MEMORY_MODES, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_MEMORY_MODES] = 2, - [NIR_INTRINSIC_ACCESS] = 3, - [NIR_INTRINSIC_FORMAT] = 4, - [NIR_INTRINSIC_ALIGN_MUL] = 5, - [NIR_INTRINSIC_ALIGN_OFFSET] = 6, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "load_ubo", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - NIR_INTRINSIC_RANGE_BASE, - NIR_INTRINSIC_RANGE, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - [NIR_INTRINSIC_RANGE_BASE] = 4, - [NIR_INTRINSIC_RANGE] = 5, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ubo_base_agx", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ubo_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_ubo_vec4", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_BASE] = 2, - [NIR_INTRINSIC_COMPONENT] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_uniform", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_RANGE, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_RANGE] = 2, - [NIR_INTRINSIC_DEST_TYPE] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_user_clip_plane", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_UCP_ID, - }, - .index_map = { - [NIR_INTRINSIC_UCP_ID] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_user_data_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_vbo_base_agx", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x40, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_vector_arg_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_vertex_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_vertex_id_zero_base", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_view_index", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_offset", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_scale", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_x_offset", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_x_scale", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_xy_scale_and_offset", - .num_srcs = 0, - .has_dest = true, - .dest_components = 4, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_y_offset", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_y_scale", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_z_offset", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_viewport_z_scale", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_vs_primitive_stride_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_vs_vertex_stride_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_vulkan_descriptor", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_DESC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_DESC_TYPE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_work_dim", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_workgroup_id", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_workgroup_id_zero_base", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_workgroup_index", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_workgroup_num_input_primitives_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_workgroup_num_input_vertices_amd", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_workgroup_size", - .num_srcs = 0, - .has_dest = true, - .dest_components = 3, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "load_xfb_address", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x60, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "masked_swizzle_amd", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_SWIZZLE_MASK, - }, - .index_map = { - [NIR_INTRINSIC_SWIZZLE_MASK] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "mbcnt_amd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "memcpy_deref", - .num_srcs = 3, - .src_components = { - -1, -1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_DST_ACCESS, - NIR_INTRINSIC_SRC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_DST_ACCESS] = 1, - [NIR_INTRINSIC_SRC_ACCESS] = 2, - }, - .flags = 0, -}, -{ - .name = "memory_barrier", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "memory_barrier_atomic_counter", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "memory_barrier_buffer", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "memory_barrier_image", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "memory_barrier_shared", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "memory_barrier_tcs_patch", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "nop", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "optimization_barrier_vgpr_amd", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "ordered_xfb_counter_add_amd", - .num_srcs = 2, - .src_components = { - 1, 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - }, - .flags = 0, -}, -{ - .name = "overwrite_tes_arguments_amd", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "overwrite_vs_arguments_amd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "preamble_end_ir3", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "preamble_start_ir3", - .num_srcs = 0, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "printf", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "quad_broadcast", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "quad_swap_diagonal", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "quad_swap_horizontal", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "quad_swap_vertical", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "quad_swizzle_amd", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_SWIZZLE_MASK, - }, - .index_map = { - [NIR_INTRINSIC_SWIZZLE_MASK] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "read_first_invocation", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "read_invocation", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "read_invocation_cond_ir3", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "reduce", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_REDUCTION_OP, - NIR_INTRINSIC_CLUSTER_SIZE, - }, - .index_map = { - [NIR_INTRINSIC_REDUCTION_OP] = 1, - [NIR_INTRINSIC_CLUSTER_SIZE] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "report_ray_intersection", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "rotate", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_EXECUTION_SCOPE, - NIR_INTRINSIC_CLUSTER_SIZE, - }, - .index_map = { - [NIR_INTRINSIC_EXECUTION_SCOPE] = 1, - [NIR_INTRINSIC_CLUSTER_SIZE] = 2, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "rq_confirm_intersection", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "rq_generate_intersection", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "rq_initialize", - .num_srcs = 8, - .src_components = { - -1, -1, 1, 1, 3, 1, 3, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "rq_load", - .num_srcs = 2, - .src_components = { - -1, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_RAY_QUERY_VALUE, - NIR_INTRINSIC_COLUMN, - }, - .index_map = { - [NIR_INTRINSIC_RAY_QUERY_VALUE] = 1, - [NIR_INTRINSIC_COLUMN] = 2, - }, - .flags = 0, -}, -{ - .name = "rq_proceed", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "rq_terminate", - .num_srcs = 1, - .src_components = { - -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "rt_execute_callable", - .num_srcs = 2, - .src_components = { - 1, -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_CALL_IDX, - NIR_INTRINSIC_STACK_SIZE, - }, - .index_map = { - [NIR_INTRINSIC_CALL_IDX] = 1, - [NIR_INTRINSIC_STACK_SIZE] = 2, - }, - .flags = 0, -}, -{ - .name = "rt_resume", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_CALL_IDX, - NIR_INTRINSIC_STACK_SIZE, - }, - .index_map = { - [NIR_INTRINSIC_CALL_IDX] = 1, - [NIR_INTRINSIC_STACK_SIZE] = 2, - }, - .flags = 0, -}, -{ - .name = "rt_return_amd", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "rt_trace_ray", - .num_srcs = 11, - .src_components = { - -1, 1, 1, 1, 1, 1, 3, 1, 3, 1, -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_CALL_IDX, - NIR_INTRINSIC_STACK_SIZE, - }, - .index_map = { - [NIR_INTRINSIC_CALL_IDX] = 1, - [NIR_INTRINSIC_STACK_SIZE] = 2, - }, - .flags = 0, -}, -{ - .name = "scoped_barrier", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_EXECUTION_SCOPE, - NIR_INTRINSIC_MEMORY_SCOPE, - NIR_INTRINSIC_MEMORY_SEMANTICS, - NIR_INTRINSIC_MEMORY_MODES, - }, - .index_map = { - [NIR_INTRINSIC_EXECUTION_SCOPE] = 1, - [NIR_INTRINSIC_MEMORY_SCOPE] = 2, - [NIR_INTRINSIC_MEMORY_SEMANTICS] = 3, - [NIR_INTRINSIC_MEMORY_MODES] = 4, - }, - .flags = 0, -}, -{ - .name = "set_vertex_and_primitive_count", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_STREAM_ID, - }, - .index_map = { - [NIR_INTRINSIC_STREAM_ID] = 1, - }, - .flags = 0, -}, -{ - .name = "shader_clock", - .num_srcs = 0, - .has_dest = true, - .dest_components = 2, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_MEMORY_SCOPE, - }, - .index_map = { - [NIR_INTRINSIC_MEMORY_SCOPE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "shared_atomic_add", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_add_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_and", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_and_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_comp_swap", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_comp_swap_dxil", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_exchange", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_exchange_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_fadd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_fcomp_swap", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_fmax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_fmin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_imax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_imax_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_imin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_imin_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_or", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_or_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_umax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_umax_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_umin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_umin_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shared_atomic_xor", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "shared_atomic_xor_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "shuffle", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "shuffle_down", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "shuffle_up", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "shuffle_xor", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "sparse_residency_code_and", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "ssbo_atomic_add", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_add_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_and", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_and_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_comp_swap", - .num_srcs = 4, - .src_components = { - -1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_comp_swap_ir3", - .num_srcs = 5, - .src_components = { - 1, 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_exchange", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_exchange_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_fadd", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_fcomp_swap", - .num_srcs = 4, - .src_components = { - -1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_fmax", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_fmin", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_imax", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_imax_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_imin", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_imin_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_or", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_or_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_umax", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_umax_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_umin", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_umin_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_xor", - .num_srcs = 3, - .src_components = { - -1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "ssbo_atomic_xor_ir3", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - }, - .flags = 0, -}, -{ - .name = "store_agx", - .num_srcs = 3, - .src_components = { - 0, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_SIGN_EXTEND, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_BASE] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - [NIR_INTRINSIC_SIGN_EXTEND] = 4, - }, - .flags = 0, -}, -{ - .name = "store_buffer_amd", - .num_srcs = 5, - .src_components = { - 0, 4, 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_MEMORY_MODES, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_MEMORY_MODES] = 3, - [NIR_INTRINSIC_ACCESS] = 4, - }, - .flags = 0, -}, -{ - .name = "store_combined_output_pan", - .num_srcs = 5, - .src_components = { - 0, 1, 1, 1, 4 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_IO_SEMANTICS, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_SRC_TYPE, - NIR_INTRINSIC_DEST_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_IO_SEMANTICS] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_SRC_TYPE] = 3, - [NIR_INTRINSIC_DEST_TYPE] = 4, - }, - .flags = 0, -}, -{ - .name = "store_deref", - .num_srcs = 2, - .src_components = { - -1, 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - }, - .flags = 0, -}, -{ - .name = "store_deref_block_intel", - .num_srcs = 2, - .src_components = { - -1, 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - }, - .flags = 0, -}, -{ - .name = "store_global", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_global_2x32", - .num_srcs = 2, - .src_components = { - 0, 2 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_global_amd", - .num_srcs = 3, - .src_components = { - 0, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - NIR_INTRINSIC_WRITE_MASK, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - [NIR_INTRINSIC_WRITE_MASK] = 5, - }, - .flags = 0, -}, -{ - .name = "store_global_block_intel", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_global_ir3", - .num_srcs = 3, - .src_components = { - 0, 2, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_ACCESS] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = 0, -}, -{ - .name = "store_hit_attrib_amd", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "store_local_pixel_agx", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_FORMAT, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_FORMAT] = 3, - }, - .flags = NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "store_local_shared_r600", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - }, - .flags = 0, -}, -{ - .name = "store_output", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 7, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_SRC_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - NIR_INTRINSIC_IO_XFB, - NIR_INTRINSIC_IO_XFB2, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_COMPONENT] = 3, - [NIR_INTRINSIC_SRC_TYPE] = 4, - [NIR_INTRINSIC_IO_SEMANTICS] = 5, - [NIR_INTRINSIC_IO_XFB] = 6, - [NIR_INTRINSIC_IO_XFB2] = 7, - }, - .flags = 0, -}, -{ - .name = "store_per_primitive_output", - .num_srcs = 3, - .src_components = { - 0, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_SRC_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_COMPONENT] = 3, - [NIR_INTRINSIC_SRC_TYPE] = 4, - [NIR_INTRINSIC_IO_SEMANTICS] = 5, - }, - .flags = 0, -}, -{ - .name = "store_per_vertex_output", - .num_srcs = 3, - .src_components = { - 0, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 5, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_SRC_TYPE, - NIR_INTRINSIC_IO_SEMANTICS, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_COMPONENT] = 3, - [NIR_INTRINSIC_SRC_TYPE] = 4, - [NIR_INTRINSIC_IO_SEMANTICS] = 5, - }, - .flags = 0, -}, -{ - .name = "store_preamble", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "store_raw_output_pan", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 2, - .indices = { - NIR_INTRINSIC_IO_SEMANTICS, - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_IO_SEMANTICS] = 1, - [NIR_INTRINSIC_BASE] = 2, - }, - .flags = 0, -}, -{ - .name = "store_scratch", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - NIR_INTRINSIC_WRITE_MASK, - }, - .index_map = { - [NIR_INTRINSIC_ALIGN_MUL] = 1, - [NIR_INTRINSIC_ALIGN_OFFSET] = 2, - [NIR_INTRINSIC_WRITE_MASK] = 3, - }, - .flags = 0, -}, -{ - .name = "store_scratch_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "store_shared", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_shared2_amd", - .num_srcs = 2, - .src_components = { - 2, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_OFFSET0, - NIR_INTRINSIC_OFFSET1, - NIR_INTRINSIC_ST64, - }, - .index_map = { - [NIR_INTRINSIC_OFFSET0] = 1, - [NIR_INTRINSIC_OFFSET1] = 2, - [NIR_INTRINSIC_ST64] = 3, - }, - .flags = 0, -}, -{ - .name = "store_shared_block_intel", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_shared_dxil", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "store_shared_ir3", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - }, - .flags = 0, -}, -{ - .name = "store_shared_masked_dxil", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "store_ssbo", - .num_srcs = 3, - .src_components = { - 0, -1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_ssbo_block_intel", - .num_srcs = 3, - .src_components = { - 0, -1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_ssbo_ir3", - .num_srcs = 4, - .src_components = { - 0, 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - [NIR_INTRINSIC_ACCESS] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_ssbo_masked_dxil", - .num_srcs = 4, - .src_components = { - 1, 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "store_stack", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 6, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_CALL_IDX, - NIR_INTRINSIC_VALUE_ID, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_ALIGN_MUL] = 2, - [NIR_INTRINSIC_ALIGN_OFFSET] = 3, - [NIR_INTRINSIC_WRITE_MASK] = 4, - [NIR_INTRINSIC_CALL_IDX] = 5, - [NIR_INTRINSIC_VALUE_ID] = 6, - }, - .flags = 0, -}, -{ - .name = "store_task_payload", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 4, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_WRITE_MASK] = 2, - [NIR_INTRINSIC_ALIGN_MUL] = 3, - [NIR_INTRINSIC_ALIGN_OFFSET] = 4, - }, - .flags = 0, -}, -{ - .name = "store_tf_r600", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "store_tlb_sample_color_v3d", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_SRC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - [NIR_INTRINSIC_COMPONENT] = 2, - [NIR_INTRINSIC_SRC_TYPE] = 3, - }, - .flags = 0, -}, -{ - .name = "store_uniform_ir3", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "store_zs_agx", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_add", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_and", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_comp_swap", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_exchange", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_fadd", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_fcomp_swap", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_fmax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_fmin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_imax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_imin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_or", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_umax", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_umin", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "task_payload_atomic_xor", - .num_srcs = 2, - .src_components = { - 1, 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_BASE, - }, - .index_map = { - [NIR_INTRINSIC_BASE] = 1, - }, - .flags = 0, -}, -{ - .name = "terminate", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "terminate_if", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "terminate_ray", - .num_srcs = 0, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "trace_ray", - .num_srcs = 11, - .src_components = { - -1, 1, 1, 1, 1, 1, 3, 1, 3, 1, -1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = 0, -}, -{ - .name = "trace_ray_intel", - .num_srcs = 3, - .src_components = { - 1, 1, 1 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_SYNCHRONOUS, - }, - .index_map = { - [NIR_INTRINSIC_SYNCHRONOUS] = 1, - }, - .flags = 0, -}, -{ - .name = "vote_all", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "vote_any", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "vote_feq", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "vote_ieq", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = true, - .dest_components = 1, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "vulkan_resource_index", - .num_srcs = 1, - .src_components = { - 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 3, - .indices = { - NIR_INTRINSIC_DESC_SET, - NIR_INTRINSIC_BINDING, - NIR_INTRINSIC_DESC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_DESC_SET] = 1, - [NIR_INTRINSIC_BINDING] = 2, - [NIR_INTRINSIC_DESC_TYPE] = 3, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "vulkan_resource_reindex", - .num_srcs = 2, - .src_components = { - 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_DESC_TYPE, - }, - .index_map = { - [NIR_INTRINSIC_DESC_TYPE] = 1, - }, - .flags = NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER, -}, -{ - .name = "write_invocation_amd", - .num_srcs = 3, - .src_components = { - 0, 0, 1 - }, - .has_dest = true, - .dest_components = 0, - .dest_bit_sizes = 0x0, - .bit_size_src = 0, - .num_indices = 0, - .flags = NIR_INTRINSIC_CAN_ELIMINATE, -}, -{ - .name = "xfb_counter_sub_amd", - .num_srcs = 1, - .src_components = { - 0 - }, - .has_dest = false, - .dest_components = 0, - .dest_bit_sizes = 0x20, - .bit_size_src = -1, - .num_indices = 1, - .indices = { - NIR_INTRINSIC_WRITE_MASK, - }, - .index_map = { - [NIR_INTRINSIC_WRITE_MASK] = 1, - }, - .flags = 0, -}, -}; - -const char *nir_intrinsic_index_names[NIR_INTRINSIC_NUM_INDEX_FLAGS] = { - "base", - "write_mask", - "stream_id", - "ucp_id", - "range_base", - "range", - "desc_set", - "binding", - "component", - "column", - "interp_mode", - "reduction_op", - "cluster_size", - "param_idx", - "image_dim", - "image_array", - "format", - "access", - "call_idx", - "stack_size", - "align_mul", - "align_offset", - "desc_type", - "src_type", - "dest_type", - "swizzle_mask", - "offset0", - "offset1", - "st64", - "arg_upper_bound_u32_amd", - "dst_access", - "src_access", - "driver_location", - "memory_semantics", - "memory_modes", - "memory_scope", - "execution_scope", - "io_semantics", - "io_xfb", - "io_xfb2", - "ray_query_value", - "rounding_mode", - "saturate", - "synchronous", - "value_id", - "sign_extend", - "flags", -}; diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.h deleted file mode 100644 index 41eb50b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.h +++ /dev/null @@ -1,756 +0,0 @@ -/* Copyright (C) 2018 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_INTRINSICS_ -#define _NIR_INTRINSICS_ - - - -typedef enum { - nir_intrinsic_accept_ray_intersection, - nir_intrinsic_addr_mode_is, - nir_intrinsic_alloc_vertices_and_primitives_amd, - nir_intrinsic_atomic_add_gen_prim_count_amd, - nir_intrinsic_atomic_add_gs_emit_prim_count_amd, - nir_intrinsic_atomic_add_gs_invocation_count_amd, - nir_intrinsic_atomic_add_xfb_prim_count_amd, - nir_intrinsic_atomic_counter_add, - nir_intrinsic_atomic_counter_add_deref, - nir_intrinsic_atomic_counter_and, - nir_intrinsic_atomic_counter_and_deref, - nir_intrinsic_atomic_counter_comp_swap, - nir_intrinsic_atomic_counter_comp_swap_deref, - nir_intrinsic_atomic_counter_exchange, - nir_intrinsic_atomic_counter_exchange_deref, - nir_intrinsic_atomic_counter_inc, - nir_intrinsic_atomic_counter_inc_deref, - nir_intrinsic_atomic_counter_max, - nir_intrinsic_atomic_counter_max_deref, - nir_intrinsic_atomic_counter_min, - nir_intrinsic_atomic_counter_min_deref, - nir_intrinsic_atomic_counter_or, - nir_intrinsic_atomic_counter_or_deref, - nir_intrinsic_atomic_counter_post_dec, - nir_intrinsic_atomic_counter_post_dec_deref, - nir_intrinsic_atomic_counter_pre_dec, - nir_intrinsic_atomic_counter_pre_dec_deref, - nir_intrinsic_atomic_counter_read, - nir_intrinsic_atomic_counter_read_deref, - nir_intrinsic_atomic_counter_xor, - nir_intrinsic_atomic_counter_xor_deref, - nir_intrinsic_ballot, - nir_intrinsic_ballot_bit_count_exclusive, - nir_intrinsic_ballot_bit_count_inclusive, - nir_intrinsic_ballot_bit_count_reduce, - nir_intrinsic_ballot_bitfield_extract, - nir_intrinsic_ballot_find_lsb, - nir_intrinsic_ballot_find_msb, - nir_intrinsic_begin_invocation_interlock, - nir_intrinsic_bindless_image_atomic_add, - nir_intrinsic_bindless_image_atomic_and, - nir_intrinsic_bindless_image_atomic_comp_swap, - nir_intrinsic_bindless_image_atomic_dec_wrap, - nir_intrinsic_bindless_image_atomic_exchange, - nir_intrinsic_bindless_image_atomic_fadd, - nir_intrinsic_bindless_image_atomic_fmax, - nir_intrinsic_bindless_image_atomic_fmin, - nir_intrinsic_bindless_image_atomic_imax, - nir_intrinsic_bindless_image_atomic_imin, - nir_intrinsic_bindless_image_atomic_inc_wrap, - nir_intrinsic_bindless_image_atomic_or, - nir_intrinsic_bindless_image_atomic_umax, - nir_intrinsic_bindless_image_atomic_umin, - nir_intrinsic_bindless_image_atomic_xor, - nir_intrinsic_bindless_image_descriptor_amd, - nir_intrinsic_bindless_image_format, - nir_intrinsic_bindless_image_fragment_mask_load_amd, - nir_intrinsic_bindless_image_load, - nir_intrinsic_bindless_image_load_raw_intel, - nir_intrinsic_bindless_image_order, - nir_intrinsic_bindless_image_samples, - nir_intrinsic_bindless_image_samples_identical, - nir_intrinsic_bindless_image_size, - nir_intrinsic_bindless_image_sparse_load, - nir_intrinsic_bindless_image_store, - nir_intrinsic_bindless_image_store_raw_intel, - nir_intrinsic_bindless_resource_ir3, - nir_intrinsic_block_image_store_agx, - nir_intrinsic_btd_retire_intel, - nir_intrinsic_btd_spawn_intel, - nir_intrinsic_btd_stack_push_intel, - nir_intrinsic_buffer_atomic_add_amd, - nir_intrinsic_bvh64_intersect_ray_amd, - nir_intrinsic_cond_end_ir3, - nir_intrinsic_control_barrier, - nir_intrinsic_convert_alu_types, - nir_intrinsic_copy_deref, - nir_intrinsic_copy_ubo_to_uniform_ir3, - nir_intrinsic_demote, - nir_intrinsic_demote_if, - nir_intrinsic_deref_atomic_add, - nir_intrinsic_deref_atomic_and, - nir_intrinsic_deref_atomic_comp_swap, - nir_intrinsic_deref_atomic_exchange, - nir_intrinsic_deref_atomic_fadd, - nir_intrinsic_deref_atomic_fcomp_swap, - nir_intrinsic_deref_atomic_fmax, - nir_intrinsic_deref_atomic_fmin, - nir_intrinsic_deref_atomic_imax, - nir_intrinsic_deref_atomic_imin, - nir_intrinsic_deref_atomic_or, - nir_intrinsic_deref_atomic_umax, - nir_intrinsic_deref_atomic_umin, - nir_intrinsic_deref_atomic_xor, - nir_intrinsic_deref_buffer_array_length, - nir_intrinsic_deref_mode_is, - nir_intrinsic_discard, - nir_intrinsic_discard_if, - nir_intrinsic_elect, - nir_intrinsic_emit_vertex, - nir_intrinsic_emit_vertex_with_counter, - nir_intrinsic_end_invocation_interlock, - nir_intrinsic_end_patch_ir3, - nir_intrinsic_end_primitive, - nir_intrinsic_end_primitive_with_counter, - nir_intrinsic_exclusive_scan, - nir_intrinsic_execute_callable, - nir_intrinsic_execute_closest_hit_amd, - nir_intrinsic_execute_miss_amd, - nir_intrinsic_export_amd, - nir_intrinsic_first_invocation, - nir_intrinsic_gds_atomic_add_amd, - nir_intrinsic_get_ssbo_size, - nir_intrinsic_get_ubo_size, - nir_intrinsic_global_atomic_add, - nir_intrinsic_global_atomic_add_2x32, - nir_intrinsic_global_atomic_add_amd, - nir_intrinsic_global_atomic_add_ir3, - nir_intrinsic_global_atomic_and, - nir_intrinsic_global_atomic_and_2x32, - nir_intrinsic_global_atomic_and_amd, - nir_intrinsic_global_atomic_and_ir3, - nir_intrinsic_global_atomic_comp_swap, - nir_intrinsic_global_atomic_comp_swap_2x32, - nir_intrinsic_global_atomic_comp_swap_amd, - nir_intrinsic_global_atomic_comp_swap_ir3, - nir_intrinsic_global_atomic_exchange, - nir_intrinsic_global_atomic_exchange_2x32, - nir_intrinsic_global_atomic_exchange_amd, - nir_intrinsic_global_atomic_exchange_ir3, - nir_intrinsic_global_atomic_fadd, - nir_intrinsic_global_atomic_fadd_2x32, - nir_intrinsic_global_atomic_fadd_amd, - nir_intrinsic_global_atomic_fcomp_swap, - nir_intrinsic_global_atomic_fcomp_swap_2x32, - nir_intrinsic_global_atomic_fcomp_swap_amd, - nir_intrinsic_global_atomic_fmax, - nir_intrinsic_global_atomic_fmax_2x32, - nir_intrinsic_global_atomic_fmax_amd, - nir_intrinsic_global_atomic_fmin, - nir_intrinsic_global_atomic_fmin_2x32, - nir_intrinsic_global_atomic_fmin_amd, - nir_intrinsic_global_atomic_imax, - nir_intrinsic_global_atomic_imax_2x32, - nir_intrinsic_global_atomic_imax_amd, - nir_intrinsic_global_atomic_imax_ir3, - nir_intrinsic_global_atomic_imin, - nir_intrinsic_global_atomic_imin_2x32, - nir_intrinsic_global_atomic_imin_amd, - nir_intrinsic_global_atomic_imin_ir3, - nir_intrinsic_global_atomic_or, - nir_intrinsic_global_atomic_or_2x32, - nir_intrinsic_global_atomic_or_amd, - nir_intrinsic_global_atomic_or_ir3, - nir_intrinsic_global_atomic_umax, - nir_intrinsic_global_atomic_umax_2x32, - nir_intrinsic_global_atomic_umax_amd, - nir_intrinsic_global_atomic_umax_ir3, - nir_intrinsic_global_atomic_umin, - nir_intrinsic_global_atomic_umin_2x32, - nir_intrinsic_global_atomic_umin_amd, - nir_intrinsic_global_atomic_umin_ir3, - nir_intrinsic_global_atomic_xor, - nir_intrinsic_global_atomic_xor_2x32, - nir_intrinsic_global_atomic_xor_amd, - nir_intrinsic_global_atomic_xor_ir3, - nir_intrinsic_group_memory_barrier, - nir_intrinsic_ignore_ray_intersection, - nir_intrinsic_image_atomic_add, - nir_intrinsic_image_atomic_and, - nir_intrinsic_image_atomic_comp_swap, - nir_intrinsic_image_atomic_dec_wrap, - nir_intrinsic_image_atomic_exchange, - nir_intrinsic_image_atomic_fadd, - nir_intrinsic_image_atomic_fmax, - nir_intrinsic_image_atomic_fmin, - nir_intrinsic_image_atomic_imax, - nir_intrinsic_image_atomic_imin, - nir_intrinsic_image_atomic_inc_wrap, - nir_intrinsic_image_atomic_or, - nir_intrinsic_image_atomic_umax, - nir_intrinsic_image_atomic_umin, - nir_intrinsic_image_atomic_xor, - nir_intrinsic_image_deref_atomic_add, - nir_intrinsic_image_deref_atomic_and, - nir_intrinsic_image_deref_atomic_comp_swap, - nir_intrinsic_image_deref_atomic_dec_wrap, - nir_intrinsic_image_deref_atomic_exchange, - nir_intrinsic_image_deref_atomic_fadd, - nir_intrinsic_image_deref_atomic_fmax, - nir_intrinsic_image_deref_atomic_fmin, - nir_intrinsic_image_deref_atomic_imax, - nir_intrinsic_image_deref_atomic_imin, - nir_intrinsic_image_deref_atomic_inc_wrap, - nir_intrinsic_image_deref_atomic_or, - nir_intrinsic_image_deref_atomic_umax, - nir_intrinsic_image_deref_atomic_umin, - nir_intrinsic_image_deref_atomic_xor, - nir_intrinsic_image_deref_descriptor_amd, - nir_intrinsic_image_deref_format, - nir_intrinsic_image_deref_fragment_mask_load_amd, - nir_intrinsic_image_deref_load, - nir_intrinsic_image_deref_load_param_intel, - nir_intrinsic_image_deref_load_raw_intel, - nir_intrinsic_image_deref_order, - nir_intrinsic_image_deref_samples, - nir_intrinsic_image_deref_samples_identical, - nir_intrinsic_image_deref_size, - nir_intrinsic_image_deref_sparse_load, - nir_intrinsic_image_deref_store, - nir_intrinsic_image_deref_store_raw_intel, - nir_intrinsic_image_descriptor_amd, - nir_intrinsic_image_format, - nir_intrinsic_image_fragment_mask_load_amd, - nir_intrinsic_image_load, - nir_intrinsic_image_load_raw_intel, - nir_intrinsic_image_order, - nir_intrinsic_image_samples, - nir_intrinsic_image_samples_identical, - nir_intrinsic_image_size, - nir_intrinsic_image_sparse_load, - nir_intrinsic_image_store, - nir_intrinsic_image_store_raw_intel, - nir_intrinsic_inclusive_scan, - nir_intrinsic_interp_deref_at_centroid, - nir_intrinsic_interp_deref_at_offset, - nir_intrinsic_interp_deref_at_sample, - nir_intrinsic_interp_deref_at_vertex, - nir_intrinsic_is_helper_invocation, - nir_intrinsic_is_sparse_texels_resident, - nir_intrinsic_is_subgroup_invocation_lt_amd, - nir_intrinsic_lane_permute_16_amd, - nir_intrinsic_last_invocation, - nir_intrinsic_launch_mesh_workgroups, - nir_intrinsic_launch_mesh_workgroups_with_payload_deref, - nir_intrinsic_load_aa_line_width, - nir_intrinsic_load_accel_struct_amd, - nir_intrinsic_load_agx, - nir_intrinsic_load_alpha_reference_amd, - nir_intrinsic_load_back_face_agx, - nir_intrinsic_load_barycentric_at_offset, - nir_intrinsic_load_barycentric_at_sample, - nir_intrinsic_load_barycentric_centroid, - nir_intrinsic_load_barycentric_model, - nir_intrinsic_load_barycentric_pixel, - nir_intrinsic_load_barycentric_sample, - nir_intrinsic_load_base_global_invocation_id, - nir_intrinsic_load_base_instance, - nir_intrinsic_load_base_vertex, - nir_intrinsic_load_base_workgroup_id, - nir_intrinsic_load_blend_const_color_a_float, - nir_intrinsic_load_blend_const_color_aaaa8888_unorm, - nir_intrinsic_load_blend_const_color_b_float, - nir_intrinsic_load_blend_const_color_g_float, - nir_intrinsic_load_blend_const_color_r_float, - nir_intrinsic_load_blend_const_color_rgba, - nir_intrinsic_load_blend_const_color_rgba8888_unorm, - nir_intrinsic_load_btd_global_arg_addr_intel, - nir_intrinsic_load_btd_local_arg_addr_intel, - nir_intrinsic_load_btd_resume_sbt_addr_intel, - nir_intrinsic_load_btd_shader_type_intel, - nir_intrinsic_load_btd_stack_id_intel, - nir_intrinsic_load_buffer_amd, - nir_intrinsic_load_callable_sbt_addr_intel, - nir_intrinsic_load_callable_sbt_stride_intel, - nir_intrinsic_load_clamp_vertex_color_amd, - nir_intrinsic_load_clip_half_line_width_amd, - nir_intrinsic_load_color0, - nir_intrinsic_load_color1, - nir_intrinsic_load_constant, - nir_intrinsic_load_constant_agx, - nir_intrinsic_load_constant_base_ptr, - nir_intrinsic_load_converted_output_pan, - nir_intrinsic_load_coverage_mask_pan, - nir_intrinsic_load_cull_any_enabled_amd, - nir_intrinsic_load_cull_back_face_enabled_amd, - nir_intrinsic_load_cull_ccw_amd, - nir_intrinsic_load_cull_front_face_enabled_amd, - nir_intrinsic_load_cull_mask, - nir_intrinsic_load_cull_mask_and_flags_amd, - nir_intrinsic_load_cull_small_prim_precision_amd, - nir_intrinsic_load_cull_small_primitives_enabled_amd, - nir_intrinsic_load_deref, - nir_intrinsic_load_deref_block_intel, - nir_intrinsic_load_desc_set_address_intel, - nir_intrinsic_load_draw_id, - nir_intrinsic_load_esgs_vertex_stride_amd, - nir_intrinsic_load_fb_layers_v3d, - nir_intrinsic_load_first_vertex, - nir_intrinsic_load_force_vrs_rates_amd, - nir_intrinsic_load_frag_coord, - nir_intrinsic_load_frag_invocation_count, - nir_intrinsic_load_frag_shading_rate, - nir_intrinsic_load_frag_size, - nir_intrinsic_load_front_face, - nir_intrinsic_load_fs_input_interp_deltas, - nir_intrinsic_load_fully_covered, - nir_intrinsic_load_global, - nir_intrinsic_load_global_2x32, - nir_intrinsic_load_global_amd, - nir_intrinsic_load_global_base_ptr, - nir_intrinsic_load_global_block_intel, - nir_intrinsic_load_global_const_block_intel, - nir_intrinsic_load_global_constant, - nir_intrinsic_load_global_constant_bounded, - nir_intrinsic_load_global_constant_offset, - nir_intrinsic_load_global_invocation_id, - nir_intrinsic_load_global_invocation_id_zero_base, - nir_intrinsic_load_global_invocation_index, - nir_intrinsic_load_global_ir3, - nir_intrinsic_load_gs_header_ir3, - nir_intrinsic_load_gs_vertex_offset_amd, - nir_intrinsic_load_helper_invocation, - nir_intrinsic_load_hit_attrib_amd, - nir_intrinsic_load_hs_out_patch_data_offset_amd, - nir_intrinsic_load_hs_patch_stride_ir3, - nir_intrinsic_load_initial_edgeflags_amd, - nir_intrinsic_load_input, - nir_intrinsic_load_input_vertex, - nir_intrinsic_load_instance_id, - nir_intrinsic_load_interpolated_input, - nir_intrinsic_load_intersection_opaque_amd, - nir_intrinsic_load_invocation_id, - nir_intrinsic_load_is_indexed_draw, - nir_intrinsic_load_kernel_input, - nir_intrinsic_load_layer_id, - nir_intrinsic_load_lds_ngg_gs_out_vertex_base_amd, - nir_intrinsic_load_lds_ngg_scratch_base_amd, - nir_intrinsic_load_leaf_opaque_intel, - nir_intrinsic_load_leaf_procedural_intel, - nir_intrinsic_load_line_coord, - nir_intrinsic_load_line_width, - nir_intrinsic_load_local_invocation_id, - nir_intrinsic_load_local_invocation_index, - nir_intrinsic_load_local_pixel_agx, - nir_intrinsic_load_local_shared_r600, - nir_intrinsic_load_lshs_vertex_stride_amd, - nir_intrinsic_load_merged_wave_info_amd, - nir_intrinsic_load_mesh_inline_data_intel, - nir_intrinsic_load_mesh_view_count, - nir_intrinsic_load_mesh_view_indices, - nir_intrinsic_load_multisampled_pan, - nir_intrinsic_load_num_subgroups, - nir_intrinsic_load_num_vertices, - nir_intrinsic_load_num_vertices_per_primitive_amd, - nir_intrinsic_load_num_workgroups, - nir_intrinsic_load_ordered_id_amd, - nir_intrinsic_load_output, - nir_intrinsic_load_packed_passthrough_primitive_amd, - nir_intrinsic_load_param, - nir_intrinsic_load_patch_vertices_in, - nir_intrinsic_load_per_primitive_output, - nir_intrinsic_load_per_vertex_input, - nir_intrinsic_load_per_vertex_output, - nir_intrinsic_load_persp_center_rhw_ir3, - nir_intrinsic_load_pipeline_stat_query_enabled_amd, - nir_intrinsic_load_point_coord, - nir_intrinsic_load_point_coord_maybe_flipped, - nir_intrinsic_load_preamble, - nir_intrinsic_load_prim_gen_query_enabled_amd, - nir_intrinsic_load_prim_xfb_query_enabled_amd, - nir_intrinsic_load_primitive_id, - nir_intrinsic_load_primitive_location_ir3, - nir_intrinsic_load_printf_buffer_address, - nir_intrinsic_load_provoking_vtx_in_prim_amd, - nir_intrinsic_load_ptr_dxil, - nir_intrinsic_load_push_constant, - nir_intrinsic_load_rasterization_samples_amd, - nir_intrinsic_load_raw_output_pan, - nir_intrinsic_load_ray_base_mem_addr_intel, - nir_intrinsic_load_ray_flags, - nir_intrinsic_load_ray_geometry_index, - nir_intrinsic_load_ray_hit_kind, - nir_intrinsic_load_ray_hit_sbt_addr_intel, - nir_intrinsic_load_ray_hit_sbt_stride_intel, - nir_intrinsic_load_ray_hw_stack_size_intel, - nir_intrinsic_load_ray_instance_custom_index, - nir_intrinsic_load_ray_launch_id, - nir_intrinsic_load_ray_launch_size, - nir_intrinsic_load_ray_launch_size_addr_amd, - nir_intrinsic_load_ray_miss_sbt_addr_intel, - nir_intrinsic_load_ray_miss_sbt_stride_intel, - nir_intrinsic_load_ray_num_dss_rt_stacks_intel, - nir_intrinsic_load_ray_object_direction, - nir_intrinsic_load_ray_object_origin, - nir_intrinsic_load_ray_object_to_world, - nir_intrinsic_load_ray_query_global_intel, - nir_intrinsic_load_ray_sw_stack_size_intel, - nir_intrinsic_load_ray_t_max, - nir_intrinsic_load_ray_t_min, - nir_intrinsic_load_ray_world_direction, - nir_intrinsic_load_ray_world_origin, - nir_intrinsic_load_ray_world_to_object, - nir_intrinsic_load_rel_patch_id_ir3, - nir_intrinsic_load_reloc_const_intel, - nir_intrinsic_load_ring_attr_amd, - nir_intrinsic_load_ring_attr_offset_amd, - nir_intrinsic_load_ring_es2gs_offset_amd, - nir_intrinsic_load_ring_esgs_amd, - nir_intrinsic_load_ring_gs2vs_offset_amd, - nir_intrinsic_load_ring_gsvs_amd, - nir_intrinsic_load_ring_mesh_scratch_amd, - nir_intrinsic_load_ring_mesh_scratch_offset_amd, - nir_intrinsic_load_ring_task_draw_amd, - nir_intrinsic_load_ring_task_payload_amd, - nir_intrinsic_load_ring_tess_factors_amd, - nir_intrinsic_load_ring_tess_factors_offset_amd, - nir_intrinsic_load_ring_tess_offchip_amd, - nir_intrinsic_load_ring_tess_offchip_offset_amd, - nir_intrinsic_load_rt_arg_scratch_offset_amd, - nir_intrinsic_load_rt_conversion_pan, - nir_intrinsic_load_rt_dynamic_callable_stack_base_amd, - nir_intrinsic_load_sample_id, - nir_intrinsic_load_sample_id_no_per_sample, - nir_intrinsic_load_sample_mask_in, - nir_intrinsic_load_sample_pos, - nir_intrinsic_load_sample_pos_from_id, - nir_intrinsic_load_sample_pos_or_center, - nir_intrinsic_load_sample_positions_amd, - nir_intrinsic_load_sample_positions_pan, - nir_intrinsic_load_sampler_lod_parameters_pan, - nir_intrinsic_load_sbt_base_amd, - nir_intrinsic_load_sbt_offset_amd, - nir_intrinsic_load_sbt_stride_amd, - nir_intrinsic_load_scalar_arg_amd, - nir_intrinsic_load_scratch, - nir_intrinsic_load_scratch_base_ptr, - nir_intrinsic_load_scratch_dxil, - nir_intrinsic_load_shader_record_ptr, - nir_intrinsic_load_shared, - nir_intrinsic_load_shared2_amd, - nir_intrinsic_load_shared_base_ptr, - nir_intrinsic_load_shared_block_intel, - nir_intrinsic_load_shared_dxil, - nir_intrinsic_load_shared_ir3, - nir_intrinsic_load_shared_uniform_block_intel, - nir_intrinsic_load_simd_width_intel, - nir_intrinsic_load_smem_amd, - nir_intrinsic_load_smem_buffer_amd, - nir_intrinsic_load_ssbo, - nir_intrinsic_load_ssbo_address, - nir_intrinsic_load_ssbo_block_intel, - nir_intrinsic_load_ssbo_ir3, - nir_intrinsic_load_ssbo_uniform_block_intel, - nir_intrinsic_load_stack, - nir_intrinsic_load_streamout_buffer_amd, - nir_intrinsic_load_streamout_config_amd, - nir_intrinsic_load_streamout_offset_amd, - nir_intrinsic_load_streamout_write_index_amd, - nir_intrinsic_load_subgroup_eq_mask, - nir_intrinsic_load_subgroup_ge_mask, - nir_intrinsic_load_subgroup_gt_mask, - nir_intrinsic_load_subgroup_id, - nir_intrinsic_load_subgroup_id_shift_ir3, - nir_intrinsic_load_subgroup_invocation, - nir_intrinsic_load_subgroup_le_mask, - nir_intrinsic_load_subgroup_lt_mask, - nir_intrinsic_load_subgroup_size, - nir_intrinsic_load_task_payload, - nir_intrinsic_load_task_ring_entry_amd, - nir_intrinsic_load_tcs_header_ir3, - nir_intrinsic_load_tcs_in_param_base_r600, - nir_intrinsic_load_tcs_num_patches_amd, - nir_intrinsic_load_tcs_out_param_base_r600, - nir_intrinsic_load_tcs_rel_patch_id_r600, - nir_intrinsic_load_tcs_tess_factor_base_r600, - nir_intrinsic_load_tess_coord, - nir_intrinsic_load_tess_coord_r600, - nir_intrinsic_load_tess_factor_base_ir3, - nir_intrinsic_load_tess_level_inner, - nir_intrinsic_load_tess_level_inner_default, - nir_intrinsic_load_tess_level_outer, - nir_intrinsic_load_tess_level_outer_default, - nir_intrinsic_load_tess_param_base_ir3, - nir_intrinsic_load_tess_rel_patch_id_amd, - nir_intrinsic_load_texture_base_agx, - nir_intrinsic_load_texture_rect_scaling, - nir_intrinsic_load_tlb_color_v3d, - nir_intrinsic_load_topology_id_intel, - nir_intrinsic_load_typed_buffer_amd, - nir_intrinsic_load_ubo, - nir_intrinsic_load_ubo_base_agx, - nir_intrinsic_load_ubo_dxil, - nir_intrinsic_load_ubo_vec4, - nir_intrinsic_load_uniform, - nir_intrinsic_load_user_clip_plane, - nir_intrinsic_load_user_data_amd, - nir_intrinsic_load_vbo_base_agx, - nir_intrinsic_load_vector_arg_amd, - nir_intrinsic_load_vertex_id, - nir_intrinsic_load_vertex_id_zero_base, - nir_intrinsic_load_view_index, - nir_intrinsic_load_viewport_offset, - nir_intrinsic_load_viewport_scale, - nir_intrinsic_load_viewport_x_offset, - nir_intrinsic_load_viewport_x_scale, - nir_intrinsic_load_viewport_xy_scale_and_offset, - nir_intrinsic_load_viewport_y_offset, - nir_intrinsic_load_viewport_y_scale, - nir_intrinsic_load_viewport_z_offset, - nir_intrinsic_load_viewport_z_scale, - nir_intrinsic_load_vs_primitive_stride_ir3, - nir_intrinsic_load_vs_vertex_stride_ir3, - nir_intrinsic_load_vulkan_descriptor, - nir_intrinsic_load_work_dim, - nir_intrinsic_load_workgroup_id, - nir_intrinsic_load_workgroup_id_zero_base, - nir_intrinsic_load_workgroup_index, - nir_intrinsic_load_workgroup_num_input_primitives_amd, - nir_intrinsic_load_workgroup_num_input_vertices_amd, - nir_intrinsic_load_workgroup_size, - nir_intrinsic_load_xfb_address, - nir_intrinsic_masked_swizzle_amd, - nir_intrinsic_mbcnt_amd, - nir_intrinsic_memcpy_deref, - nir_intrinsic_memory_barrier, - nir_intrinsic_memory_barrier_atomic_counter, - nir_intrinsic_memory_barrier_buffer, - nir_intrinsic_memory_barrier_image, - nir_intrinsic_memory_barrier_shared, - nir_intrinsic_memory_barrier_tcs_patch, - nir_intrinsic_nop, - nir_intrinsic_optimization_barrier_vgpr_amd, - nir_intrinsic_ordered_xfb_counter_add_amd, - nir_intrinsic_overwrite_tes_arguments_amd, - nir_intrinsic_overwrite_vs_arguments_amd, - nir_intrinsic_preamble_end_ir3, - nir_intrinsic_preamble_start_ir3, - nir_intrinsic_printf, - nir_intrinsic_quad_broadcast, - nir_intrinsic_quad_swap_diagonal, - nir_intrinsic_quad_swap_horizontal, - nir_intrinsic_quad_swap_vertical, - nir_intrinsic_quad_swizzle_amd, - nir_intrinsic_read_first_invocation, - nir_intrinsic_read_invocation, - nir_intrinsic_read_invocation_cond_ir3, - nir_intrinsic_reduce, - nir_intrinsic_report_ray_intersection, - nir_intrinsic_rotate, - nir_intrinsic_rq_confirm_intersection, - nir_intrinsic_rq_generate_intersection, - nir_intrinsic_rq_initialize, - nir_intrinsic_rq_load, - nir_intrinsic_rq_proceed, - nir_intrinsic_rq_terminate, - nir_intrinsic_rt_execute_callable, - nir_intrinsic_rt_resume, - nir_intrinsic_rt_return_amd, - nir_intrinsic_rt_trace_ray, - nir_intrinsic_scoped_barrier, - nir_intrinsic_set_vertex_and_primitive_count, - nir_intrinsic_shader_clock, - nir_intrinsic_shared_atomic_add, - nir_intrinsic_shared_atomic_add_dxil, - nir_intrinsic_shared_atomic_and, - nir_intrinsic_shared_atomic_and_dxil, - nir_intrinsic_shared_atomic_comp_swap, - nir_intrinsic_shared_atomic_comp_swap_dxil, - nir_intrinsic_shared_atomic_exchange, - nir_intrinsic_shared_atomic_exchange_dxil, - nir_intrinsic_shared_atomic_fadd, - nir_intrinsic_shared_atomic_fcomp_swap, - nir_intrinsic_shared_atomic_fmax, - nir_intrinsic_shared_atomic_fmin, - nir_intrinsic_shared_atomic_imax, - nir_intrinsic_shared_atomic_imax_dxil, - nir_intrinsic_shared_atomic_imin, - nir_intrinsic_shared_atomic_imin_dxil, - nir_intrinsic_shared_atomic_or, - nir_intrinsic_shared_atomic_or_dxil, - nir_intrinsic_shared_atomic_umax, - nir_intrinsic_shared_atomic_umax_dxil, - nir_intrinsic_shared_atomic_umin, - nir_intrinsic_shared_atomic_umin_dxil, - nir_intrinsic_shared_atomic_xor, - nir_intrinsic_shared_atomic_xor_dxil, - nir_intrinsic_shuffle, - nir_intrinsic_shuffle_down, - nir_intrinsic_shuffle_up, - nir_intrinsic_shuffle_xor, - nir_intrinsic_sparse_residency_code_and, - nir_intrinsic_ssbo_atomic_add, - nir_intrinsic_ssbo_atomic_add_ir3, - nir_intrinsic_ssbo_atomic_and, - nir_intrinsic_ssbo_atomic_and_ir3, - nir_intrinsic_ssbo_atomic_comp_swap, - nir_intrinsic_ssbo_atomic_comp_swap_ir3, - nir_intrinsic_ssbo_atomic_exchange, - nir_intrinsic_ssbo_atomic_exchange_ir3, - nir_intrinsic_ssbo_atomic_fadd, - nir_intrinsic_ssbo_atomic_fcomp_swap, - nir_intrinsic_ssbo_atomic_fmax, - nir_intrinsic_ssbo_atomic_fmin, - nir_intrinsic_ssbo_atomic_imax, - nir_intrinsic_ssbo_atomic_imax_ir3, - nir_intrinsic_ssbo_atomic_imin, - nir_intrinsic_ssbo_atomic_imin_ir3, - nir_intrinsic_ssbo_atomic_or, - nir_intrinsic_ssbo_atomic_or_ir3, - nir_intrinsic_ssbo_atomic_umax, - nir_intrinsic_ssbo_atomic_umax_ir3, - nir_intrinsic_ssbo_atomic_umin, - nir_intrinsic_ssbo_atomic_umin_ir3, - nir_intrinsic_ssbo_atomic_xor, - nir_intrinsic_ssbo_atomic_xor_ir3, - nir_intrinsic_store_agx, - nir_intrinsic_store_buffer_amd, - nir_intrinsic_store_combined_output_pan, - nir_intrinsic_store_deref, - nir_intrinsic_store_deref_block_intel, - nir_intrinsic_store_global, - nir_intrinsic_store_global_2x32, - nir_intrinsic_store_global_amd, - nir_intrinsic_store_global_block_intel, - nir_intrinsic_store_global_ir3, - nir_intrinsic_store_hit_attrib_amd, - nir_intrinsic_store_local_pixel_agx, - nir_intrinsic_store_local_shared_r600, - nir_intrinsic_store_output, - nir_intrinsic_store_per_primitive_output, - nir_intrinsic_store_per_vertex_output, - nir_intrinsic_store_preamble, - nir_intrinsic_store_raw_output_pan, - nir_intrinsic_store_scratch, - nir_intrinsic_store_scratch_dxil, - nir_intrinsic_store_shared, - nir_intrinsic_store_shared2_amd, - nir_intrinsic_store_shared_block_intel, - nir_intrinsic_store_shared_dxil, - nir_intrinsic_store_shared_ir3, - nir_intrinsic_store_shared_masked_dxil, - nir_intrinsic_store_ssbo, - nir_intrinsic_store_ssbo_block_intel, - nir_intrinsic_store_ssbo_ir3, - nir_intrinsic_store_ssbo_masked_dxil, - nir_intrinsic_store_stack, - nir_intrinsic_store_task_payload, - nir_intrinsic_store_tf_r600, - nir_intrinsic_store_tlb_sample_color_v3d, - nir_intrinsic_store_uniform_ir3, - nir_intrinsic_store_zs_agx, - nir_intrinsic_task_payload_atomic_add, - nir_intrinsic_task_payload_atomic_and, - nir_intrinsic_task_payload_atomic_comp_swap, - nir_intrinsic_task_payload_atomic_exchange, - nir_intrinsic_task_payload_atomic_fadd, - nir_intrinsic_task_payload_atomic_fcomp_swap, - nir_intrinsic_task_payload_atomic_fmax, - nir_intrinsic_task_payload_atomic_fmin, - nir_intrinsic_task_payload_atomic_imax, - nir_intrinsic_task_payload_atomic_imin, - nir_intrinsic_task_payload_atomic_or, - nir_intrinsic_task_payload_atomic_umax, - nir_intrinsic_task_payload_atomic_umin, - nir_intrinsic_task_payload_atomic_xor, - nir_intrinsic_terminate, - nir_intrinsic_terminate_if, - nir_intrinsic_terminate_ray, - nir_intrinsic_trace_ray, - nir_intrinsic_trace_ray_intel, - nir_intrinsic_vote_all, - nir_intrinsic_vote_any, - nir_intrinsic_vote_feq, - nir_intrinsic_vote_ieq, - nir_intrinsic_vulkan_resource_index, - nir_intrinsic_vulkan_resource_reindex, - nir_intrinsic_write_invocation_amd, - nir_intrinsic_xfb_counter_sub_amd, - - nir_last_intrinsic = nir_intrinsic_xfb_counter_sub_amd, - nir_num_intrinsics = nir_last_intrinsic + 1 -} nir_intrinsic_op; - -typedef enum { - NIR_INTRINSIC_BASE, - NIR_INTRINSIC_WRITE_MASK, - NIR_INTRINSIC_STREAM_ID, - NIR_INTRINSIC_UCP_ID, - NIR_INTRINSIC_RANGE_BASE, - NIR_INTRINSIC_RANGE, - NIR_INTRINSIC_DESC_SET, - NIR_INTRINSIC_BINDING, - NIR_INTRINSIC_COMPONENT, - NIR_INTRINSIC_COLUMN, - NIR_INTRINSIC_INTERP_MODE, - NIR_INTRINSIC_REDUCTION_OP, - NIR_INTRINSIC_CLUSTER_SIZE, - NIR_INTRINSIC_PARAM_IDX, - NIR_INTRINSIC_IMAGE_DIM, - NIR_INTRINSIC_IMAGE_ARRAY, - NIR_INTRINSIC_FORMAT, - NIR_INTRINSIC_ACCESS, - NIR_INTRINSIC_CALL_IDX, - NIR_INTRINSIC_STACK_SIZE, - NIR_INTRINSIC_ALIGN_MUL, - NIR_INTRINSIC_ALIGN_OFFSET, - NIR_INTRINSIC_DESC_TYPE, - NIR_INTRINSIC_SRC_TYPE, - NIR_INTRINSIC_DEST_TYPE, - NIR_INTRINSIC_SWIZZLE_MASK, - NIR_INTRINSIC_OFFSET0, - NIR_INTRINSIC_OFFSET1, - NIR_INTRINSIC_ST64, - NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD, - NIR_INTRINSIC_DST_ACCESS, - NIR_INTRINSIC_SRC_ACCESS, - NIR_INTRINSIC_DRIVER_LOCATION, - NIR_INTRINSIC_MEMORY_SEMANTICS, - NIR_INTRINSIC_MEMORY_MODES, - NIR_INTRINSIC_MEMORY_SCOPE, - NIR_INTRINSIC_EXECUTION_SCOPE, - NIR_INTRINSIC_IO_SEMANTICS, - NIR_INTRINSIC_IO_XFB, - NIR_INTRINSIC_IO_XFB2, - NIR_INTRINSIC_RAY_QUERY_VALUE, - NIR_INTRINSIC_ROUNDING_MODE, - NIR_INTRINSIC_SATURATE, - NIR_INTRINSIC_SYNCHRONOUS, - NIR_INTRINSIC_VALUE_ID, - NIR_INTRINSIC_SIGN_EXTEND, - NIR_INTRINSIC_FLAGS, - NIR_INTRINSIC_NUM_INDEX_FLAGS, -} nir_intrinsic_index_flag; - -extern const char *nir_intrinsic_index_names[NIR_INTRINSIC_NUM_INDEX_FLAGS]; - -#endif /* _NIR_INTRINSICS_ */ \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.py deleted file mode 100644 index 7474afb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics.py +++ /dev/null @@ -1,1813 +0,0 @@ -# -# Copyright (C) 2018 Red Hat -# Copyright (C) 2014 Intel Corporation -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. -# - -# This file defines all the available intrinsics in one place. -# -# The Intrinsic class corresponds one-to-one with nir_intrinsic_info -# structure. - -src0 = ('src', 0) -src1 = ('src', 1) -src2 = ('src', 2) -src3 = ('src', 3) -src4 = ('src', 4) - -class Index(object): - def __init__(self, c_data_type, name): - self.c_data_type = c_data_type - self.name = name - -class Intrinsic(object): - """Class that represents all the information about an intrinsic opcode. - NOTE: this must be kept in sync with nir_intrinsic_info. - """ - def __init__(self, name, src_components, dest_components, - indices, flags, sysval, bit_sizes): - """Parameters: - - - name: the intrinsic name - - src_components: list of the number of components per src, 0 means - vectorized instruction with number of components given in the - num_components field in nir_intrinsic_instr. - - dest_components: number of destination components, -1 means no - dest, 0 means number of components given in num_components field - in nir_intrinsic_instr. - - indices: list of constant indicies - - flags: list of semantic flags - - sysval: is this a system-value intrinsic - - bit_sizes: allowed dest bit_sizes or the source it must match - """ - assert isinstance(name, str) - assert isinstance(src_components, list) - if src_components: - assert isinstance(src_components[0], int) - assert isinstance(dest_components, int) - assert isinstance(indices, list) - if indices: - assert isinstance(indices[0], Index) - assert isinstance(flags, list) - if flags: - assert isinstance(flags[0], str) - assert isinstance(sysval, bool) - if isinstance(bit_sizes, list): - assert not bit_sizes or isinstance(bit_sizes[0], int) - else: - assert isinstance(bit_sizes, tuple) - assert bit_sizes[0] == 'src' - assert isinstance(bit_sizes[1], int) - - self.name = name - self.num_srcs = len(src_components) - self.src_components = src_components - self.has_dest = (dest_components >= 0) - self.dest_components = dest_components - self.num_indices = len(indices) - self.indices = indices - self.flags = flags - self.sysval = sysval - self.bit_sizes = bit_sizes if isinstance(bit_sizes, list) else [] - self.bit_size_src = bit_sizes[1] if isinstance(bit_sizes, tuple) else -1 - -# -# Possible flags: -# - -CAN_ELIMINATE = "NIR_INTRINSIC_CAN_ELIMINATE" -CAN_REORDER = "NIR_INTRINSIC_CAN_REORDER" - -INTR_INDICES = [] -INTR_OPCODES = {} - -def index(c_data_type, name): - idx = Index(c_data_type, name) - INTR_INDICES.append(idx) - globals()[name.upper()] = idx - -# Defines a new NIR intrinsic. By default, the intrinsic will have no sources -# and no destination. -# -# You can set dest_comp=n to enable a destination for the intrinsic, in which -# case it will have that many components, or =0 for "as many components as the -# NIR destination value." -# -# Set src_comp=n to enable sources for the intruction. It can be an array of -# component counts, or (for convenience) a scalar component count if there's -# only one source. If a component count is 0, it will be as many components as -# the intrinsic has based on the dest_comp. -def intrinsic(name, src_comp=[], dest_comp=-1, indices=[], - flags=[], sysval=False, bit_sizes=[]): - assert name not in INTR_OPCODES - INTR_OPCODES[name] = Intrinsic(name, src_comp, dest_comp, - indices, flags, sysval, bit_sizes) - -# -# Possible indices: -# - -# Generally instructions that take a offset src argument, can encode -# a constant 'base' value which is added to the offset. -index("int", "base") - -# For store instructions, a writemask for the store. -index("unsigned", "write_mask") - -# The stream-id for GS emit_vertex/end_primitive intrinsics. -index("unsigned", "stream_id") - -# The clip-plane id for load_user_clip_plane intrinsic. -index("unsigned", "ucp_id") - -# The offset to the start of the NIR_INTRINSIC_RANGE. This is an alternative -# to NIR_INTRINSIC_BASE for describing the valid range in intrinsics that don't -# have the implicit addition of a base to the offset. -# -# If the [range_base, range] is [0, ~0], then we don't know the possible -# range of the access. -index("unsigned", "range_base") - -# The amount of data, starting from BASE or RANGE_BASE, that this -# instruction may access. This is used to provide bounds if the offset is -# not constant. -index("unsigned", "range") - -# The Vulkan descriptor set for vulkan_resource_index intrinsic. -index("unsigned", "desc_set") - -# The Vulkan descriptor set binding for vulkan_resource_index intrinsic. -index("unsigned", "binding") - -# Component offset -index("unsigned", "component") - -# Column index for matrix system values -index("unsigned", "column") - -# Interpolation mode (only meaningful for FS inputs) -index("unsigned", "interp_mode") - -# A binary nir_op to use when performing a reduction or scan operation -index("unsigned", "reduction_op") - -# Cluster size for reduction operations -index("unsigned", "cluster_size") - -# Parameter index for a load_param intrinsic -index("unsigned", "param_idx") - -# Image dimensionality for image intrinsics -index("enum glsl_sampler_dim", "image_dim") - -# Non-zero if we are accessing an array image -index("bool", "image_array") - -# Image format for image intrinsics -# Vertex buffer format for load_typed_buffer_amd -index("enum pipe_format", "format") - -# Access qualifiers for image and memory access intrinsics. ACCESS_RESTRICT is -# not set at the intrinsic if the NIR was created from SPIR-V. -index("enum gl_access_qualifier", "access") - -# call index for split raytracing shaders -index("unsigned", "call_idx") - -# The stack size increment/decrement for split raytracing shaders -index("unsigned", "stack_size") - -# Alignment for offsets and addresses -# -# These two parameters, specify an alignment in terms of a multiplier and -# an offset. The multiplier is always a power of two. The offset or -# address parameter X of the intrinsic is guaranteed to satisfy the -# following: -# -# (X - align_offset) % align_mul == 0 -# -# For constant offset values, align_mul will be NIR_ALIGN_MUL_MAX and the -# align_offset will be modulo that. -index("unsigned", "align_mul") -index("unsigned", "align_offset") - -# The Vulkan descriptor type for a vulkan_resource_[re]index intrinsic. -index("unsigned", "desc_type") - -# The nir_alu_type of input data to a store or conversion -index("nir_alu_type", "src_type") - -# The nir_alu_type of the data output from a load or conversion -index("nir_alu_type", "dest_type") - -# The swizzle mask for quad_swizzle_amd & masked_swizzle_amd -index("unsigned", "swizzle_mask") - -# Offsets for load_shared2_amd/store_shared2_amd -index("uint8_t", "offset0") -index("uint8_t", "offset1") - -# If true, both offsets have an additional stride of 64 dwords (ie. they are multiplied by 256 bytes -# in hardware, instead of 4). -index("bool", "st64") - -# When set, range analysis will use it for nir_unsigned_upper_bound -index("unsigned", "arg_upper_bound_u32_amd") - -# Separate source/dest access flags for copies -index("enum gl_access_qualifier", "dst_access") -index("enum gl_access_qualifier", "src_access") - -# Driver location of attribute -index("unsigned", "driver_location") - -# Ordering and visibility of a memory operation -index("nir_memory_semantics", "memory_semantics") - -# Modes affected by a memory operation -index("nir_variable_mode", "memory_modes") - -# Scope of a memory operation -index("nir_scope", "memory_scope") - -# Scope of a control barrier -index("nir_scope", "execution_scope") - -# Semantics of an IO instruction -index("struct nir_io_semantics", "io_semantics") - -# Transform feedback info -index("struct nir_io_xfb", "io_xfb") -index("struct nir_io_xfb", "io_xfb2") - -# Ray query values accessible from the RayQueryKHR object -index("nir_ray_query_value", "ray_query_value") - -# Rounding mode for conversions -index("nir_rounding_mode", "rounding_mode") - -# Whether or not to saturate in conversions -index("unsigned", "saturate") - -# Whether or not trace_ray_intel is synchronous -index("bool", "synchronous") - -# Value ID to identify SSA value loaded/stored on the stack -index("unsigned", "value_id") - -# Whether to sign-extend offsets in address arithmatic (else zero extend) -index("bool", "sign_extend") - -# Instruction specific flags -index("unsigned", "flags") - -intrinsic("nop", flags=[CAN_ELIMINATE]) - -intrinsic("convert_alu_types", dest_comp=0, src_comp=[0], - indices=[SRC_TYPE, DEST_TYPE, ROUNDING_MODE, SATURATE], - flags=[CAN_ELIMINATE, CAN_REORDER]) - -intrinsic("load_param", dest_comp=0, indices=[PARAM_IDX], flags=[CAN_ELIMINATE]) - -intrinsic("load_deref", dest_comp=0, src_comp=[-1], - indices=[ACCESS], flags=[CAN_ELIMINATE]) -intrinsic("store_deref", src_comp=[-1, 0], indices=[WRITE_MASK, ACCESS]) -intrinsic("copy_deref", src_comp=[-1, -1], indices=[DST_ACCESS, SRC_ACCESS]) -intrinsic("memcpy_deref", src_comp=[-1, -1, 1], indices=[DST_ACCESS, SRC_ACCESS]) - -# Interpolation of input. The interp_deref_at* intrinsics are similar to the -# load_var intrinsic acting on a shader input except that they interpolate the -# input differently. The at_sample, at_offset and at_vertex intrinsics take an -# additional source that is an integer sample id, a vec2 position offset, or a -# vertex ID respectively. - -intrinsic("interp_deref_at_centroid", dest_comp=0, src_comp=[1], - flags=[ CAN_ELIMINATE, CAN_REORDER]) -intrinsic("interp_deref_at_sample", src_comp=[1, 1], dest_comp=0, - flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("interp_deref_at_offset", src_comp=[1, 2], dest_comp=0, - flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("interp_deref_at_vertex", src_comp=[1, 1], dest_comp=0, - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Gets the length of an unsized array at the end of a buffer -intrinsic("deref_buffer_array_length", src_comp=[-1], dest_comp=1, - indices=[ACCESS], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Ask the driver for the size of a given SSBO. It takes the buffer index -# as source. -intrinsic("get_ssbo_size", src_comp=[-1], dest_comp=1, bit_sizes=[32], - indices=[ACCESS], flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("get_ubo_size", src_comp=[-1], dest_comp=1, - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Intrinsics which provide a run-time mode-check. Unlike the compile-time -# mode checks, a pointer can only have exactly one mode at runtime. -intrinsic("deref_mode_is", src_comp=[-1], dest_comp=1, - indices=[MEMORY_MODES], flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("addr_mode_is", src_comp=[-1], dest_comp=1, - indices=[MEMORY_MODES], flags=[CAN_ELIMINATE, CAN_REORDER]) - -intrinsic("is_sparse_texels_resident", dest_comp=1, src_comp=[1], bit_sizes=[1,32], - flags=[CAN_ELIMINATE, CAN_REORDER]) -# result code is resident only if both inputs are resident -intrinsic("sparse_residency_code_and", dest_comp=1, src_comp=[1, 1], bit_sizes=[32], - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# a barrier is an intrinsic with no inputs/outputs but which can't be moved -# around/optimized in general -def barrier(name): - intrinsic(name) - -barrier("discard") - -# Demote fragment shader invocation to a helper invocation. Any stores to -# memory after this instruction are suppressed and the fragment does not write -# outputs to the framebuffer. Unlike discard, demote needs to ensure that -# derivatives will still work for invocations that were not demoted. -# -# As specified by SPV_EXT_demote_to_helper_invocation. -barrier("demote") -intrinsic("is_helper_invocation", dest_comp=1, flags=[CAN_ELIMINATE]) - -# SpvOpTerminateInvocation from SPIR-V. Essentially a discard "for real". -barrier("terminate") - -# A workgroup-level control barrier. Any thread which hits this barrier will -# pause until all threads within the current workgroup have also hit the -# barrier. For compute shaders, the workgroup is defined as the local group. -# For tessellation control shaders, the workgroup is defined as the current -# patch. This intrinsic does not imply any sort of memory barrier. -barrier("control_barrier") - -# Memory barrier with semantics analogous to the memoryBarrier() GLSL -# intrinsic. -barrier("memory_barrier") - -# Control/Memory barrier with explicit scope. Follows the semantics of SPIR-V -# OpMemoryBarrier and OpControlBarrier, used to implement Vulkan Memory Model. -# Storage that the barrier applies is represented using NIR variable modes. -# For an OpMemoryBarrier, set EXECUTION_SCOPE to NIR_SCOPE_NONE. -intrinsic("scoped_barrier", - indices=[EXECUTION_SCOPE, MEMORY_SCOPE, MEMORY_SEMANTICS, MEMORY_MODES]) - -# Shader clock intrinsic with semantics analogous to the clock2x32ARB() -# GLSL intrinsic. -# The latter can be used as code motion barrier, which is currently not -# feasible with NIR. -intrinsic("shader_clock", dest_comp=2, bit_sizes=[32], flags=[CAN_ELIMINATE], - indices=[MEMORY_SCOPE]) - -# Shader ballot intrinsics with semantics analogous to the -# -# ballotARB() -# readInvocationARB() -# readFirstInvocationARB() -# -# GLSL functions from ARB_shader_ballot. -intrinsic("ballot", src_comp=[1], dest_comp=0, flags=[CAN_ELIMINATE]) -intrinsic("read_invocation", src_comp=[0, 1], dest_comp=0, bit_sizes=src0, flags=[CAN_ELIMINATE]) -intrinsic("read_first_invocation", src_comp=[0], dest_comp=0, bit_sizes=src0, flags=[CAN_ELIMINATE]) - -# Returns the value of the first source for the lane where the second source is -# true. The second source must be true for exactly one lane. -intrinsic("read_invocation_cond_ir3", src_comp=[0, 1], dest_comp=0, flags=[CAN_ELIMINATE]) - -# Additional SPIR-V ballot intrinsics -# -# These correspond to the SPIR-V opcodes -# -# OpGroupNonUniformElect -# OpSubgroupFirstInvocationKHR -intrinsic("elect", dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("first_invocation", dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE]) -intrinsic("last_invocation", dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE]) - -# Memory barrier with semantics analogous to the compute shader -# groupMemoryBarrier(), memoryBarrierAtomicCounter(), memoryBarrierBuffer(), -# memoryBarrierImage() and memoryBarrierShared() GLSL intrinsics. -barrier("group_memory_barrier") -barrier("memory_barrier_atomic_counter") -barrier("memory_barrier_buffer") -barrier("memory_barrier_image") -barrier("memory_barrier_shared") -barrier("begin_invocation_interlock") -barrier("end_invocation_interlock") - -# Memory barrier for synchronizing TCS patch outputs -barrier("memory_barrier_tcs_patch") - -# A conditional discard/demote/terminate, with a single boolean source. -intrinsic("discard_if", src_comp=[1]) -intrinsic("demote_if", src_comp=[1]) -intrinsic("terminate_if", src_comp=[1]) - -# ARB_shader_group_vote intrinsics -intrinsic("vote_any", src_comp=[1], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("vote_all", src_comp=[1], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("vote_feq", src_comp=[0], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("vote_ieq", src_comp=[0], dest_comp=1, flags=[CAN_ELIMINATE]) - -# Ballot ALU operations from SPIR-V. -# -# These operations work like their ALU counterparts except that the operate -# on a uvec4 which is treated as a 128bit integer. Also, they are, in -# general, free to ignore any bits which are above the subgroup size. -intrinsic("ballot_bitfield_extract", src_comp=[4, 1], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("ballot_bit_count_reduce", src_comp=[4], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("ballot_bit_count_inclusive", src_comp=[4], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("ballot_bit_count_exclusive", src_comp=[4], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("ballot_find_lsb", src_comp=[4], dest_comp=1, flags=[CAN_ELIMINATE]) -intrinsic("ballot_find_msb", src_comp=[4], dest_comp=1, flags=[CAN_ELIMINATE]) - -# Shuffle operations from SPIR-V. -intrinsic("shuffle", src_comp=[0, 1], dest_comp=0, bit_sizes=src0, flags=[CAN_ELIMINATE]) -intrinsic("shuffle_xor", src_comp=[0, 1], dest_comp=0, bit_sizes=src0, flags=[CAN_ELIMINATE]) -intrinsic("shuffle_up", src_comp=[0, 1], dest_comp=0, bit_sizes=src0, flags=[CAN_ELIMINATE]) -intrinsic("shuffle_down", src_comp=[0, 1], dest_comp=0, bit_sizes=src0, flags=[CAN_ELIMINATE]) - -# Quad operations from SPIR-V. -intrinsic("quad_broadcast", src_comp=[0, 1], dest_comp=0, flags=[CAN_ELIMINATE]) -intrinsic("quad_swap_horizontal", src_comp=[0], dest_comp=0, flags=[CAN_ELIMINATE]) -intrinsic("quad_swap_vertical", src_comp=[0], dest_comp=0, flags=[CAN_ELIMINATE]) -intrinsic("quad_swap_diagonal", src_comp=[0], dest_comp=0, flags=[CAN_ELIMINATE]) - -# Rotate operation from SPIR-V: SpvOpGroupNonUniformRotateKHR. -intrinsic("rotate", src_comp=[0, 1], dest_comp=0, bit_sizes=src0, - indices=[EXECUTION_SCOPE, CLUSTER_SIZE], flags=[CAN_ELIMINATE]); - -intrinsic("reduce", src_comp=[0], dest_comp=0, bit_sizes=src0, - indices=[REDUCTION_OP, CLUSTER_SIZE], flags=[CAN_ELIMINATE]) -intrinsic("inclusive_scan", src_comp=[0], dest_comp=0, bit_sizes=src0, - indices=[REDUCTION_OP], flags=[CAN_ELIMINATE]) -intrinsic("exclusive_scan", src_comp=[0], dest_comp=0, bit_sizes=src0, - indices=[REDUCTION_OP], flags=[CAN_ELIMINATE]) - -# AMD shader ballot operations -intrinsic("quad_swizzle_amd", src_comp=[0], dest_comp=0, bit_sizes=src0, - indices=[SWIZZLE_MASK], flags=[CAN_ELIMINATE]) -intrinsic("masked_swizzle_amd", src_comp=[0], dest_comp=0, bit_sizes=src0, - indices=[SWIZZLE_MASK], flags=[CAN_ELIMINATE]) -intrinsic("write_invocation_amd", src_comp=[0, 0, 1], dest_comp=0, bit_sizes=src0, - flags=[CAN_ELIMINATE]) -# src = [ mask, addition ] -intrinsic("mbcnt_amd", src_comp=[1, 1], dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE]) -# Compiled to v_permlane16_b32. src = [ value, lanesel_lo, lanesel_hi ] -intrinsic("lane_permute_16_amd", src_comp=[1, 1, 1], dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE]) - -# Basic Geometry Shader intrinsics. -# -# emit_vertex implements GLSL's EmitStreamVertex() built-in. It takes a single -# index, which is the stream ID to write to. -# -# end_primitive implements GLSL's EndPrimitive() built-in. -intrinsic("emit_vertex", indices=[STREAM_ID]) -intrinsic("end_primitive", indices=[STREAM_ID]) - -# Geometry Shader intrinsics with a vertex count. -# -# Alternatively, drivers may implement these intrinsics, and use -# nir_lower_gs_intrinsics() to convert from the basic intrinsics. -# -# These contain two additional unsigned integer sources: -# 1. The total number of vertices emitted so far. -# 2. The number of vertices emitted for the current primitive -# so far if we're counting, otherwise undef. -intrinsic("emit_vertex_with_counter", src_comp=[1, 1], indices=[STREAM_ID]) -intrinsic("end_primitive_with_counter", src_comp=[1, 1], indices=[STREAM_ID]) -# Contains the final total vertex and primitive counts in the current GS thread. -intrinsic("set_vertex_and_primitive_count", src_comp=[1, 1], indices=[STREAM_ID]) - -# Launches mesh shader workgroups from a task shader, with explicit task_payload. -# Rules: -# - This is a terminating instruction. -# - May only occur in workgroup-uniform control flow. -# - Dispatch sizes may be divergent (in which case the values -# from the first invocation are used). -# Meaning of indices: -# - BASE: address of the task_payload variable used. -# - RANGE: size of the task_payload variable used. -# -# src[] = {vec(x, y, z)} -intrinsic("launch_mesh_workgroups", src_comp=[3], indices=[BASE, RANGE]) - -# Launches mesh shader workgroups from a task shader, with task_payload variable deref. -# Same rules as launch_mesh_workgroups apply here as well. -# src[] = {vec(x, y, z), payload pointer} -intrinsic("launch_mesh_workgroups_with_payload_deref", src_comp=[3, -1], indices=[]) - -# Trace a ray through an acceleration structure -# -# This instruction has a lot of parameters: -# 0. Acceleration Structure -# 1. Ray Flags -# 2. Cull Mask -# 3. SBT Offset -# 4. SBT Stride -# 5. Miss shader index -# 6. Ray Origin -# 7. Ray Tmin -# 8. Ray Direction -# 9. Ray Tmax -# 10. Payload -intrinsic("trace_ray", src_comp=[-1, 1, 1, 1, 1, 1, 3, 1, 3, 1, -1]) -# src[] = { hit_t, hit_kind } -intrinsic("report_ray_intersection", src_comp=[1, 1], dest_comp=1) -intrinsic("ignore_ray_intersection") -intrinsic("accept_ray_intersection") # Not in SPIR-V; useful for lowering -intrinsic("terminate_ray") -# src[] = { sbt_index, payload } -intrinsic("execute_callable", src_comp=[1, -1]) - -# Initialize a ray query -# -# 0. Ray Query -# 1. Acceleration Structure -# 2. Ray Flags -# 3. Cull Mask -# 4. Ray Origin -# 5. Ray Tmin -# 6. Ray Direction -# 7. Ray Tmax -intrinsic("rq_initialize", src_comp=[-1, -1, 1, 1, 3, 1, 3, 1]) -# src[] = { query } -intrinsic("rq_terminate", src_comp=[-1]) -# src[] = { query } -intrinsic("rq_proceed", src_comp=[-1], dest_comp=1) -# src[] = { query, hit } -intrinsic("rq_generate_intersection", src_comp=[-1, 1]) -# src[] = { query } -intrinsic("rq_confirm_intersection", src_comp=[-1]) -# src[] = { query, committed } -intrinsic("rq_load", src_comp=[-1, 1], dest_comp=0, indices=[RAY_QUERY_VALUE,COLUMN]) - -# Driver independent raytracing helpers - -# rt_resume is a helper that that be the first instruction accesing the -# stack/scratch in a resume shader for a raytracing pipeline. It includes the -# resume index (for nir_lower_shader_calls_internal reasons) and the stack size -# of the variables spilled during the call. The stack size can be use to e.g. -# adjust a stack pointer. -intrinsic("rt_resume", indices=[CALL_IDX, STACK_SIZE]) - -# Lowered version of execute_callabe that includes the index of the resume -# shader, and the amount of scratch space needed for this call (.ie. how much -# to increase a stack pointer by). -# src[] = { sbt_index, payload } -intrinsic("rt_execute_callable", src_comp=[1, -1], indices=[CALL_IDX,STACK_SIZE]) - -# Lowered version of trace_ray in a similar vein to rt_execute_callable. -# src same as trace_ray -intrinsic("rt_trace_ray", src_comp=[-1, 1, 1, 1, 1, 1, 3, 1, 3, 1, -1], - indices=[CALL_IDX, STACK_SIZE]) - - -# Atomic counters -# -# The *_deref variants take an atomic_uint nir_variable, while the other, -# lowered, variants take a buffer index and register offset. The buffer index -# is always constant, as there's no way to declare an array of atomic counter -# buffers. -# -# The register offset may be non-constant but must by dynamically uniform -# ("Atomic counters aggregated into arrays within a shader can only be indexed -# with dynamically uniform integral expressions, otherwise results are -# undefined.") -def atomic(name, flags=[]): - intrinsic(name + "_deref", src_comp=[-1], dest_comp=1, flags=flags) - intrinsic(name, src_comp=[1], dest_comp=1, indices=[BASE, RANGE_BASE], flags=flags) - -def atomic2(name): - intrinsic(name + "_deref", src_comp=[-1, 1], dest_comp=1) - intrinsic(name, src_comp=[1, 1], dest_comp=1, indices=[BASE, RANGE_BASE]) - -def atomic3(name): - intrinsic(name + "_deref", src_comp=[-1, 1, 1], dest_comp=1) - intrinsic(name, src_comp=[1, 1, 1], dest_comp=1, indices=[BASE, RANGE_BASE]) - -atomic("atomic_counter_inc") -atomic("atomic_counter_pre_dec") -atomic("atomic_counter_post_dec") -atomic("atomic_counter_read", flags=[CAN_ELIMINATE]) -atomic2("atomic_counter_add") -atomic2("atomic_counter_min") -atomic2("atomic_counter_max") -atomic2("atomic_counter_and") -atomic2("atomic_counter_or") -atomic2("atomic_counter_xor") -atomic2("atomic_counter_exchange") -atomic3("atomic_counter_comp_swap") - -# Image load, store and atomic intrinsics. -# -# All image intrinsics come in three versions. One which take an image target -# passed as a deref chain as the first source, one which takes an index as the -# first source, and one which takes a bindless handle as the first source. -# In the first version, the image variable contains the memory and layout -# qualifiers that influence the semantics of the intrinsic. In the second and -# third, the image format and access qualifiers are provided as constant -# indices. Up through GLSL ES 3.10, the image index source may only be a -# constant array access. GLSL ES 3.20 and GLSL 4.00 allow dynamically uniform -# indexing. -# -# All image intrinsics take a four-coordinate vector and a sample index as -# 2nd and 3rd sources, determining the location within the image that will be -# accessed by the intrinsic. Components not applicable to the image target -# in use are undefined. Image store takes an additional four-component -# argument with the value to be written, and image atomic operations take -# either one or two additional scalar arguments with the same meaning as in -# the ARB_shader_image_load_store specification. -def image(name, src_comp=[], extra_indices=[], **kwargs): - intrinsic("image_deref_" + name, src_comp=[-1] + src_comp, - indices=[IMAGE_DIM, IMAGE_ARRAY, FORMAT, ACCESS] + extra_indices, **kwargs) - intrinsic("image_" + name, src_comp=[1] + src_comp, - indices=[IMAGE_DIM, IMAGE_ARRAY, FORMAT, ACCESS, RANGE_BASE] + extra_indices, **kwargs) - intrinsic("bindless_image_" + name, src_comp=[-1] + src_comp, - indices=[IMAGE_DIM, IMAGE_ARRAY, FORMAT, ACCESS] + extra_indices, **kwargs) - -image("load", src_comp=[4, 1, 1], extra_indices=[DEST_TYPE], dest_comp=0, flags=[CAN_ELIMINATE]) -image("sparse_load", src_comp=[4, 1, 1], extra_indices=[DEST_TYPE], dest_comp=0, flags=[CAN_ELIMINATE]) -image("store", src_comp=[4, 1, 0, 1], extra_indices=[SRC_TYPE]) -image("atomic_add", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_imin", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_umin", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_imax", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_umax", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_and", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_or", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_xor", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_exchange", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_comp_swap", src_comp=[4, 1, 1, 1], dest_comp=1) -image("atomic_fadd", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_fmin", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_fmax", src_comp=[4, 1, 1], dest_comp=1) -image("size", dest_comp=0, src_comp=[1], flags=[CAN_ELIMINATE, CAN_REORDER]) -image("samples", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) -image("atomic_inc_wrap", src_comp=[4, 1, 1], dest_comp=1) -image("atomic_dec_wrap", src_comp=[4, 1, 1], dest_comp=1) -# This returns true if all samples within the pixel have equal color values. -image("samples_identical", dest_comp=1, src_comp=[4], flags=[CAN_ELIMINATE]) -# Non-uniform access is not lowered for image_descriptor_amd. -# dest_comp can be either 4 (buffer) or 8 (image). -image("descriptor_amd", dest_comp=0, src_comp=[], flags=[CAN_ELIMINATE, CAN_REORDER]) -# CL-specific format queries -image("format", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) -image("order", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) -# Multisample fragment mask load -# src_comp[0] is same as image load src_comp[0] -image("fragment_mask_load_amd", src_comp=[4], dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Vulkan descriptor set intrinsics -# -# The Vulkan API uses a different binding model from GL. In the Vulkan -# API, all external resources are represented by a tuple: -# -# (descriptor set, binding, array index) -# -# where the array index is the only thing allowed to be indirect. The -# vulkan_surface_index intrinsic takes the descriptor set and binding as -# its first two indices and the array index as its source. The third -# index is a nir_variable_mode in case that's useful to the backend. -# -# The intended usage is that the shader will call vulkan_surface_index to -# get an index and then pass that as the buffer index ubo/ssbo calls. -# -# The vulkan_resource_reindex intrinsic takes a resource index in src0 -# (the result of a vulkan_resource_index or vulkan_resource_reindex) which -# corresponds to the tuple (set, binding, index) and computes an index -# corresponding to tuple (set, binding, idx + src1). -intrinsic("vulkan_resource_index", src_comp=[1], dest_comp=0, - indices=[DESC_SET, BINDING, DESC_TYPE], - flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("vulkan_resource_reindex", src_comp=[0, 1], dest_comp=0, - indices=[DESC_TYPE], flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("load_vulkan_descriptor", src_comp=[-1], dest_comp=0, - indices=[DESC_TYPE], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# atomic intrinsics -# -# All of these atomic memory operations read a value from memory, compute a new -# value using one of the operations below, write the new value to memory, and -# return the original value read. -# -# All variable operations take 2 sources except CompSwap that takes 3. These -# sources represent: -# -# 0: A deref to the memory on which to perform the atomic -# 1: The data parameter to the atomic function (i.e. the value to add -# in shared_atomic_add, etc). -# 2: For CompSwap only: the second data parameter. -# -# All SSBO operations take 3 sources except CompSwap that takes 4. These -# sources represent: -# -# 0: The SSBO buffer index (dynamically uniform in GLSL, possibly non-uniform -# with VK_EXT_descriptor_indexing). -# 1: The offset into the SSBO buffer of the variable that the atomic -# operation will operate on. -# 2: The data parameter to the atomic function (i.e. the value to add -# in ssbo_atomic_add, etc). -# 3: For CompSwap only: the second data parameter. -# -# All shared (and task payload) variable operations take 2 sources -# except CompSwap that takes 3. -# These sources represent: -# -# 0: The offset into the shared variable storage region that the atomic -# operation will operate on. -# 1: The data parameter to the atomic function (i.e. the value to add -# in shared_atomic_add, etc). -# 2: For CompSwap only: the second data parameter. -# -# All global operations take 2 sources except CompSwap that takes 3. These -# sources represent: -# -# 0: The memory address that the atomic operation will operate on. -# 1: The data parameter to the atomic function (i.e. the value to add -# in shared_atomic_add, etc). -# 2: For CompSwap only: the second data parameter. -# -# The 2x32 global variants use a vec2 for the memory address where component X -# has the low 32-bit and component Y has the high 32-bit. -# -# IR3 global operations take 32b vec2 as memory address. IR3 doesn't support -# float atomics. - -def memory_atomic_data1(name): - intrinsic("deref_atomic_" + name, src_comp=[-1, 1], dest_comp=1, indices=[ACCESS]) - intrinsic("ssbo_atomic_" + name, src_comp=[-1, 1, 1], dest_comp=1, indices=[ACCESS]) - intrinsic("shared_atomic_" + name, src_comp=[1, 1], dest_comp=1, indices=[BASE]) - intrinsic("task_payload_atomic_" + name, src_comp=[1, 1], dest_comp=1, indices=[BASE]) - intrinsic("global_atomic_" + name, src_comp=[1, 1], dest_comp=1, indices=[]) - intrinsic("global_atomic_" + name + "_2x32", src_comp=[2, 1], dest_comp=1, indices=[]) - intrinsic("global_atomic_" + name + "_amd", src_comp=[1, 1, 1], dest_comp=1, indices=[BASE]) - if not name.startswith('f'): - intrinsic("global_atomic_" + name + "_ir3", src_comp=[2, 1], dest_comp=1, indices=[BASE]) - -def memory_atomic_data2(name): - intrinsic("deref_atomic_" + name, src_comp=[-1, 1, 1], dest_comp=1, indices=[ACCESS]) - intrinsic("ssbo_atomic_" + name, src_comp=[-1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) - intrinsic("shared_atomic_" + name, src_comp=[1, 1, 1], dest_comp=1, indices=[BASE]) - intrinsic("task_payload_atomic_" + name, src_comp=[1, 1, 1], dest_comp=1, indices=[BASE]) - intrinsic("global_atomic_" + name, src_comp=[1, 1, 1], dest_comp=1, indices=[]) - intrinsic("global_atomic_" + name + "_2x32", src_comp=[2, 1, 1], dest_comp=1, indices=[]) - intrinsic("global_atomic_" + name + "_amd", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[BASE]) - if not name.startswith('f'): - intrinsic("global_atomic_" + name + "_ir3", src_comp=[2, 1, 1], dest_comp=1, indices=[BASE]) - -memory_atomic_data1("add") -memory_atomic_data1("imin") -memory_atomic_data1("umin") -memory_atomic_data1("imax") -memory_atomic_data1("umax") -memory_atomic_data1("and") -memory_atomic_data1("or") -memory_atomic_data1("xor") -memory_atomic_data1("exchange") -memory_atomic_data1("fadd") -memory_atomic_data1("fmin") -memory_atomic_data1("fmax") -memory_atomic_data2("comp_swap") -memory_atomic_data2("fcomp_swap") - -def system_value(name, dest_comp, indices=[], bit_sizes=[32]): - intrinsic("load_" + name, [], dest_comp, indices, - flags=[CAN_ELIMINATE, CAN_REORDER], sysval=True, - bit_sizes=bit_sizes) - -system_value("frag_coord", 4) -system_value("point_coord", 2) -system_value("line_coord", 1) -system_value("front_face", 1, bit_sizes=[1, 32]) -system_value("vertex_id", 1) -system_value("vertex_id_zero_base", 1) -system_value("first_vertex", 1) -system_value("is_indexed_draw", 1) -system_value("base_vertex", 1) -system_value("instance_id", 1) -system_value("base_instance", 1) -system_value("draw_id", 1) -system_value("sample_id", 1) -# sample_id_no_per_sample is like sample_id but does not imply per- -# sample shading. See the lower_helper_invocation option. -system_value("sample_id_no_per_sample", 1) -system_value("sample_pos", 2) -# sample_pos_or_center is like sample_pos but does not imply per-sample -# shading. When per-sample dispatch is not enabled, it returns (0.5, 0.5). -system_value("sample_pos_or_center", 2) -system_value("sample_mask_in", 1) -system_value("primitive_id", 1) -system_value("invocation_id", 1) -system_value("tess_coord", 3) -system_value("tess_level_outer", 4) -system_value("tess_level_inner", 2) -system_value("tess_level_outer_default", 4) -system_value("tess_level_inner_default", 2) -system_value("patch_vertices_in", 1) -system_value("local_invocation_id", 3) -system_value("local_invocation_index", 1) -# zero_base indicates it starts from 0 for the current dispatch -# non-zero_base indicates the base is included -system_value("workgroup_id", 3, bit_sizes=[32, 64]) -system_value("workgroup_id_zero_base", 3) -# The workgroup_index is intended for situations when a 3 dimensional -# workgroup_id is not available on the HW, but a 1 dimensional index is. -system_value("workgroup_index", 1) -system_value("base_workgroup_id", 3, bit_sizes=[32, 64]) -system_value("user_clip_plane", 4, indices=[UCP_ID]) -system_value("num_workgroups", 3, bit_sizes=[32, 64]) -system_value("num_vertices", 1) -system_value("helper_invocation", 1, bit_sizes=[1, 32]) -system_value("layer_id", 1) -system_value("view_index", 1) -system_value("subgroup_size", 1) -system_value("subgroup_invocation", 1) -system_value("subgroup_eq_mask", 0, bit_sizes=[32, 64]) -system_value("subgroup_ge_mask", 0, bit_sizes=[32, 64]) -system_value("subgroup_gt_mask", 0, bit_sizes=[32, 64]) -system_value("subgroup_le_mask", 0, bit_sizes=[32, 64]) -system_value("subgroup_lt_mask", 0, bit_sizes=[32, 64]) -system_value("num_subgroups", 1) -system_value("subgroup_id", 1) -system_value("workgroup_size", 3) -# note: the definition of global_invocation_id_zero_base is based on -# (workgroup_id * workgroup_size) + local_invocation_id. -# it is *not* based on workgroup_id_zero_base, meaning the work group -# base is already accounted for, and the global base is additive on top of that -system_value("global_invocation_id", 3, bit_sizes=[32, 64]) -system_value("global_invocation_id_zero_base", 3, bit_sizes=[32, 64]) -system_value("base_global_invocation_id", 3, bit_sizes=[32, 64]) -system_value("global_invocation_index", 1, bit_sizes=[32, 64]) -system_value("work_dim", 1) -system_value("line_width", 1) -system_value("aa_line_width", 1) -# BASE=0 for global/shader, BASE=1 for local/function -system_value("scratch_base_ptr", 0, bit_sizes=[32,64], indices=[BASE]) -system_value("constant_base_ptr", 0, bit_sizes=[32,64]) -system_value("shared_base_ptr", 0, bit_sizes=[32,64]) -system_value("global_base_ptr", 0, bit_sizes=[32,64]) -# Address of a transform feedback buffer, indexed by BASE -system_value("xfb_address", 1, bit_sizes=[32,64], indices=[BASE]) -system_value("frag_size", 2) -system_value("frag_invocation_count", 1) - -# System values for ray tracing. -system_value("ray_launch_id", 3) -system_value("ray_launch_size", 3) -system_value("ray_world_origin", 3) -system_value("ray_world_direction", 3) -system_value("ray_object_origin", 3) -system_value("ray_object_direction", 3) -system_value("ray_t_min", 1) -system_value("ray_t_max", 1) -system_value("ray_object_to_world", 3, indices=[COLUMN]) -system_value("ray_world_to_object", 3, indices=[COLUMN]) -system_value("ray_hit_kind", 1) -system_value("ray_flags", 1) -system_value("ray_geometry_index", 1) -system_value("ray_instance_custom_index", 1) -system_value("shader_record_ptr", 1, bit_sizes=[64]) -system_value("cull_mask", 1) - -# Driver-specific viewport scale/offset parameters. -# -# VC4 and V3D need to emit a scaled version of the position in the vertex -# shaders for binning, and having system values lets us move the math for that -# into NIR. -# -# Panfrost needs to implement all coordinate transformation in the -# vertex shader; system values allow us to share this routine in NIR. -system_value("viewport_x_scale", 1) -system_value("viewport_y_scale", 1) -system_value("viewport_z_scale", 1) -system_value("viewport_x_offset", 1) -system_value("viewport_y_offset", 1) -system_value("viewport_z_offset", 1) -system_value("viewport_scale", 3) -system_value("viewport_offset", 3) -# Pack xy scale and offset into a vec4 load (used by AMD NGG primitive culling) -system_value("viewport_xy_scale_and_offset", 4) - -# Blend constant color values. Float values are clamped. Vectored versions are -# provided as well for driver convenience - -system_value("blend_const_color_r_float", 1) -system_value("blend_const_color_g_float", 1) -system_value("blend_const_color_b_float", 1) -system_value("blend_const_color_a_float", 1) -system_value("blend_const_color_rgba", 4) -system_value("blend_const_color_rgba8888_unorm", 1) -system_value("blend_const_color_aaaa8888_unorm", 1) - -# System values for gl_Color, for radeonsi which interpolates these in the -# shader prolog to handle two-sided color without recompiles and therefore -# doesn't handle these in the main shader part like normal varyings. -system_value("color0", 4) -system_value("color1", 4) - -# System value for internal compute shaders in radeonsi. -system_value("user_data_amd", 4) - -# Barycentric coordinate intrinsics. -# -# These set up the barycentric coordinates for a particular interpolation. -# The first four are for the simple cases: pixel, centroid, per-sample -# (at gl_SampleID), or pull model (1/W, 1/I, 1/J) at the pixel center. The next -# two handle interpolating at a specified sample location, or interpolating -# with a vec2 offset, -# -# The interp_mode index should be either the INTERP_MODE_SMOOTH or -# INTERP_MODE_NOPERSPECTIVE enum values. -# -# The vec2 value produced by these intrinsics is intended for use as the -# barycoord source of a load_interpolated_input intrinsic. - -def barycentric(name, dst_comp, src_comp=[]): - intrinsic("load_barycentric_" + name, src_comp=src_comp, dest_comp=dst_comp, - indices=[INTERP_MODE], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# no sources. -barycentric("pixel", 2) -barycentric("centroid", 2) -barycentric("sample", 2) -barycentric("model", 3) -# src[] = { sample_id }. -barycentric("at_sample", 2, [1]) -# src[] = { offset.xy }. -barycentric("at_offset", 2, [2]) - -# Load sample position: -# -# Takes a sample # and returns a sample position. Used for lowering -# interpolateAtSample() to interpolateAtOffset() -intrinsic("load_sample_pos_from_id", src_comp=[1], dest_comp=2, - flags=[CAN_ELIMINATE, CAN_REORDER]) - -intrinsic("load_persp_center_rhw_ir3", dest_comp=1, - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Load texture scaling values: -# -# Takes a sampler # and returns 1/size values for multiplying to normalize -# texture coordinates. Used for lowering rect textures. -intrinsic("load_texture_rect_scaling", src_comp=[1], dest_comp=2, - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Fragment shader input interpolation delta intrinsic. -# -# For hw where fragment shader input interpolation is handled in shader, the -# load_fs_input_interp deltas intrinsics can be used to load the input deltas -# used for interpolation as follows: -# -# vec3 iid = load_fs_input_interp_deltas(varying_slot) -# vec2 bary = load_barycentric_*(...) -# float result = iid.x + iid.y * bary.y + iid.z * bary.x - -intrinsic("load_fs_input_interp_deltas", src_comp=[1], dest_comp=3, - indices=[BASE, COMPONENT, IO_SEMANTICS], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Load operations pull data from some piece of GPU memory. All load -# operations operate in terms of offsets into some piece of theoretical -# memory. Loads from externally visible memory (UBO and SSBO) simply take a -# byte offset as a source. Loads from opaque memory (uniforms, inputs, etc.) -# take a base+offset pair where the nir_intrinsic_base() gives the location -# of the start of the variable being loaded and and the offset source is a -# offset into that variable. -# -# Uniform load operations have a nir_intrinsic_range() index that specifies the -# range (starting at base) of the data from which we are loading. If -# range == 0, then the range is unknown. -# -# UBO load operations have a nir_intrinsic_range_base() and -# nir_intrinsic_range() that specify the byte range [range_base, -# range_base+range] of the UBO that the src offset access must lie within. -# -# Some load operations such as UBO/SSBO load and per_vertex loads take an -# additional source to specify which UBO/SSBO/vertex to load from. -# -# The exact address type depends on the lowering pass that generates the -# load/store intrinsics. Typically, this is vec4 units for things such as -# varying slots and float units for fragment shader inputs. UBO and SSBO -# offsets are always in bytes. - -def load(name, src_comp, indices=[], flags=[]): - intrinsic("load_" + name, src_comp, dest_comp=0, indices=indices, - flags=flags) - -# src[] = { offset }. -load("uniform", [1], [BASE, RANGE, DEST_TYPE], [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { buffer_index, offset }. -load("ubo", [-1, 1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET, RANGE_BASE, RANGE], flags=[CAN_ELIMINATE, CAN_REORDER]) -# src[] = { buffer_index, offset in vec4 units }. base is also in vec4 units. -load("ubo_vec4", [-1, 1], [ACCESS, BASE, COMPONENT], flags=[CAN_ELIMINATE, CAN_REORDER]) -# src[] = { offset }. -load("input", [1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { vertex_id, offset }. -load("input_vertex", [1, 1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { vertex, offset }. -load("per_vertex_input", [1, 1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { barycoord, offset }. -load("interpolated_input", [2, 1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER]) - -# src[] = { buffer_index, offset }. -load("ssbo", [-1, 1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) -# src[] = { buffer_index } -load("ssbo_address", [1], [], [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { offset }. -load("output", [1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], flags=[CAN_ELIMINATE]) -# src[] = { vertex, offset }. -load("per_vertex_output", [1, 1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], [CAN_ELIMINATE]) -# src[] = { primitive, offset }. -load("per_primitive_output", [1, 1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], [CAN_ELIMINATE]) -# src[] = { offset }. -load("shared", [1], [BASE, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) -# src[] = { offset }. -load("task_payload", [1], [BASE, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) -# src[] = { offset }. -load("push_constant", [1], [BASE, RANGE, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { offset }. -load("constant", [1], [BASE, RANGE, ALIGN_MUL, ALIGN_OFFSET], - [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { address }. -load("global", [1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) -# src[] = { address }. -load("global_2x32", [2], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) -# src[] = { address }. -load("global_constant", [1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], - [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { base_address, offset }. -load("global_constant_offset", [1, 1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], - [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { base_address, offset, bound }. -load("global_constant_bounded", [1, 1, 1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], - [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { address }. -load("kernel_input", [1], [BASE, RANGE, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { offset }. -load("scratch", [1], [ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) - -# Stores work the same way as loads, except now the first source is the value -# to store and the second (and possibly third) source specify where to store -# the value. SSBO and shared memory stores also have a -# nir_intrinsic_write_mask() - -def store(name, srcs, indices=[], flags=[]): - intrinsic("store_" + name, [0] + srcs, indices=indices, flags=flags) - -# src[] = { value, offset }. -store("output", [1], [BASE, WRITE_MASK, COMPONENT, SRC_TYPE, IO_SEMANTICS, IO_XFB, IO_XFB2]) -# src[] = { value, vertex, offset }. -store("per_vertex_output", [1, 1], [BASE, WRITE_MASK, COMPONENT, SRC_TYPE, IO_SEMANTICS]) -# src[] = { value, primitive, offset }. -store("per_primitive_output", [1, 1], [BASE, WRITE_MASK, COMPONENT, SRC_TYPE, IO_SEMANTICS]) -# src[] = { value, block_index, offset } -store("ssbo", [-1, 1], [WRITE_MASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) -# src[] = { value, offset }. -store("shared", [1], [BASE, WRITE_MASK, ALIGN_MUL, ALIGN_OFFSET]) -# src[] = { value, offset }. -store("task_payload", [1], [BASE, WRITE_MASK, ALIGN_MUL, ALIGN_OFFSET]) -# src[] = { value, address }. -store("global", [1], [WRITE_MASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) -# src[] = { value, address }. -store("global_2x32", [2], [WRITE_MASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) -# src[] = { value, offset }. -store("scratch", [1], [ALIGN_MUL, ALIGN_OFFSET, WRITE_MASK]) - -# Intrinsic to load/store from the call stack. -# BASE is the offset relative to the current position of the stack -# src[] = { }. -intrinsic("load_stack", [], dest_comp=0, - indices=[BASE, ALIGN_MUL, ALIGN_OFFSET, CALL_IDX, VALUE_ID], - flags=[CAN_ELIMINATE]) -# src[] = { value }. -intrinsic("store_stack", [0], - indices=[BASE, ALIGN_MUL, ALIGN_OFFSET, WRITE_MASK, CALL_IDX, VALUE_ID]) - - -# A bit field to implement SPIRV FragmentShadingRateKHR -# bit | name | description -# 0 | Vertical2Pixels | Fragment invocation covers 2 pixels vertically -# 1 | Vertical4Pixels | Fragment invocation covers 4 pixels vertically -# 2 | Horizontal2Pixels | Fragment invocation covers 2 pixels horizontally -# 3 | Horizontal4Pixels | Fragment invocation covers 4 pixels horizontally -intrinsic("load_frag_shading_rate", dest_comp=1, bit_sizes=[32], - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Whether the rasterized fragment is fully covered by the generating primitive. -system_value("fully_covered", dest_comp=1, bit_sizes=[1]) - -# OpenCL printf instruction -# First source is a deref to the format string -# Second source is a deref to a struct containing the args -# Dest is success or failure -intrinsic("printf", src_comp=[1, 1], dest_comp=1, bit_sizes=[32]) -# Since most drivers will want to lower to just dumping args -# in a buffer, nir_lower_printf will do that, but requires -# the driver to at least provide a base location -system_value("printf_buffer_address", 1, bit_sizes=[32,64]) - -# Mesh shading MultiView intrinsics -system_value("mesh_view_count", 1) -load("mesh_view_indices", [1], [BASE, RANGE], [CAN_ELIMINATE, CAN_REORDER]) - -# Used to pass values from the preamble to the main shader. -# This should use something similar to Vulkan push constants and load_preamble -# should be relatively cheap. -# For now we only support accesses with a constant offset. -load("preamble", [], indices=[BASE], flags=[CAN_ELIMINATE, CAN_REORDER]) -store("preamble", [], indices=[BASE]) - -# IR3-specific version of most SSBO intrinsics. The only different -# compare to the originals is that they add an extra source to hold -# the dword-offset, which is needed by the backend code apart from -# the byte-offset already provided by NIR in one of the sources. -# -# NIR lowering pass 'ir3_nir_lower_io_offset' will replace the -# original SSBO intrinsics by these, placing the computed -# dword-offset always in the last source. -# -# The float versions are not handled because those are not supported -# by the backend. -store("ssbo_ir3", [1, 1, 1], - indices=[WRITE_MASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) -load("ssbo_ir3", [1, 1, 1], - indices=[ACCESS, ALIGN_MUL, ALIGN_OFFSET], flags=[CAN_ELIMINATE]) -intrinsic("ssbo_atomic_add_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_imin_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_umin_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_imax_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_umax_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_and_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_or_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_xor_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_exchange_ir3", src_comp=[1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) -intrinsic("ssbo_atomic_comp_swap_ir3", src_comp=[1, 1, 1, 1, 1], dest_comp=1, indices=[ACCESS]) - -# System values for freedreno geometry shaders. -system_value("vs_primitive_stride_ir3", 1) -system_value("vs_vertex_stride_ir3", 1) -system_value("gs_header_ir3", 1) -system_value("primitive_location_ir3", 1, indices=[DRIVER_LOCATION]) - -# System values for freedreno tessellation shaders. -system_value("hs_patch_stride_ir3", 1) -system_value("tess_factor_base_ir3", 2) -system_value("tess_param_base_ir3", 2) -system_value("tcs_header_ir3", 1) -system_value("rel_patch_id_ir3", 1) - -# System values for freedreno compute shaders. -system_value("subgroup_id_shift_ir3", 1) - -# IR3-specific intrinsics for tessellation control shaders. cond_end_ir3 end -# the shader when src0 is false and is used to narrow down the TCS shader to -# just thread 0 before writing out tessellation levels. -intrinsic("cond_end_ir3", src_comp=[1]) -# end_patch_ir3 is used just before thread 0 exist the TCS and presumably -# signals the TE that the patch is complete and can be tessellated. -intrinsic("end_patch_ir3") - -# IR3-specific load/store intrinsics. These access a buffer used to pass data -# between geometry stages - perhaps it's explicit access to the vertex cache. - -# src[] = { value, offset }. -store("shared_ir3", [1], [BASE, ALIGN_MUL, ALIGN_OFFSET]) -# src[] = { offset }. -load("shared_ir3", [1], [BASE, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) - -# IR3-specific load/store global intrinsics. They take a 64-bit base address -# and a 32-bit offset. The hardware will add the base and the offset, which -# saves us from doing 64-bit math on the base address. - -# src[] = { value, address(vec2 of hi+lo uint32_t), offset }. -# const_index[] = { write_mask, align_mul, align_offset } -store("global_ir3", [2, 1], indices=[ACCESS, ALIGN_MUL, ALIGN_OFFSET]) -# src[] = { address(vec2 of hi+lo uint32_t), offset }. -# const_index[] = { access, align_mul, align_offset } -load("global_ir3", [2, 1], indices=[ACCESS, ALIGN_MUL, ALIGN_OFFSET], flags=[CAN_ELIMINATE]) - -# IR3-specific bindless handle specifier. Similar to vulkan_resource_index, but -# without the binding because the hardware expects a single flattened index -# rather than a (binding, index) pair. We may also want to use this with GL. -# Note that this doesn't actually turn into a HW instruction. -intrinsic("bindless_resource_ir3", [1], dest_comp=1, indices=[DESC_SET], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# IR3-specific intrinsics for shader preamble. These are meant to be used like -# this: -# -# if (preamble_start()) { -# if (subgroupElect()) { -# // preamble -# ... -# preamble_end(); -# } -# } -# // main shader -# ... - -intrinsic("preamble_start_ir3", [], dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) - -barrier("preamble_end_ir3") - -# IR3-specific intrinsic for stc. Should be used in the shader preamble. -store("uniform_ir3", [], indices=[BASE]) - -# IR3-specific intrinsic for ldc.k. Copies UBO to constant file. -# base is the const file base in components, range is the amount to copy in -# vec4's. -intrinsic("copy_ubo_to_uniform_ir3", [1, 1], indices=[BASE, RANGE]) - -# DXIL specific intrinsics -# src[] = { value, mask, index, offset }. -intrinsic("store_ssbo_masked_dxil", [1, 1, 1, 1]) -# src[] = { value, index }. -intrinsic("store_shared_dxil", [1, 1]) -# src[] = { value, mask, index }. -intrinsic("store_shared_masked_dxil", [1, 1, 1]) -# src[] = { value, index }. -intrinsic("store_scratch_dxil", [1, 1]) -# src[] = { index }. -load("shared_dxil", [1], [], [CAN_ELIMINATE]) -# src[] = { index }. -load("scratch_dxil", [1], [], [CAN_ELIMINATE]) -# src[] = { deref_var, offset } -load("ptr_dxil", [1, 1], [], []) -# src[] = { index, 16-byte-based-offset } -load("ubo_dxil", [1, 1], [], [CAN_ELIMINATE, CAN_REORDER]) - -# DXIL Shared atomic intrinsics -# -# All of the shared variable atomic memory operations read a value from -# memory, compute a new value using one of the operations below, write the -# new value to memory, and return the original value read. -# -# All operations take 2 sources: -# -# 0: The index in the i32 array for by the shared memory region -# 1: The data parameter to the atomic function (i.e. the value to add -# in shared_atomic_add, etc). -intrinsic("shared_atomic_add_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_imin_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_umin_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_imax_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_umax_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_and_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_or_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_xor_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_exchange_dxil", src_comp=[1, 1], dest_comp=1) -intrinsic("shared_atomic_comp_swap_dxil", src_comp=[1, 1, 1], dest_comp=1) - -# Intrinsics used by the Midgard/Bifrost blend pipeline. These are defined -# within a blend shader to read/write the raw value from the tile buffer, -# without applying any format conversion in the process. If the shader needs -# usable pixel values, it must apply format conversions itself. -# -# These definitions are generic, but they are explicitly vendored to prevent -# other drivers from using them, as their semantics is defined in terms of the -# Midgard/Bifrost hardware tile buffer and may not line up with anything sane. -# One notable divergence is sRGB, which is asymmetric: raw_input_pan requires -# an sRGB->linear conversion, but linear values should be written to -# raw_output_pan and the hardware handles linear->sRGB. -# -# store_raw_output_pan is used only for blend shaders, and writes out only a -# single 128-bit chunk. To support multisampling, the BASE index specifies the -# bas sample index written out. - -# src[] = { value } -store("raw_output_pan", [], [IO_SEMANTICS, BASE]) -store("combined_output_pan", [1, 1, 1, 4], [IO_SEMANTICS, COMPONENT, SRC_TYPE, DEST_TYPE]) -load("raw_output_pan", [1], [IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER]) - -# Loads the sampler paramaters -# src[] = { sampler_index } -load("sampler_lod_parameters_pan", [1], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Like load_output but using a specified render target conversion descriptor -load("converted_output_pan", [1], indices=[DEST_TYPE, IO_SEMANTICS], flags=[CAN_ELIMINATE]) - -# Load the render target conversion descriptor for a given render target given -# in the BASE index. Converts to a type with size given by the source type. -# Valid in fragment and blend stages. -system_value("rt_conversion_pan", 1, indices=[BASE, SRC_TYPE], bit_sizes=[32]) - -# Loads the sample position array on Bifrost, in a packed Arm-specific format -system_value("sample_positions_pan", 1, bit_sizes=[64]) - -# In a fragment shader, is the framebuffer single-sampled? 0/~0 bool -system_value("multisampled_pan", 1, bit_sizes=[32]) - -# In a fragment shader, the current coverage mask. Affected by writes. -intrinsic("load_coverage_mask_pan", [], 1, [], flags=[CAN_ELIMINATE], - sysval=True, bit_sizes=[32]) - -# R600 specific instrincs -# -# location where the tesselation data is stored in LDS -system_value("tcs_in_param_base_r600", 4) -system_value("tcs_out_param_base_r600", 4) -system_value("tcs_rel_patch_id_r600", 1) -system_value("tcs_tess_factor_base_r600", 1) - -# the tess coords come as xy only, z has to be calculated -system_value("tess_coord_r600", 2) - -# load as many components as needed giving per-component addresses -intrinsic("load_local_shared_r600", src_comp=[0], dest_comp=0, indices = [], flags = [CAN_ELIMINATE]) - -store("local_shared_r600", [1], [WRITE_MASK]) -store("tf_r600", []) - -# AMD GCN/RDNA specific intrinsics - -# This barrier is a hint that prevents moving the instruction that computes -# src after this barrier. It's a constraint for the instruction scheduler. -# Otherwise it's identical to a move instruction. -# On AMD, it also forces the src value to be stored in a VGPR. -intrinsic("optimization_barrier_vgpr_amd", dest_comp=0, src_comp=[0], - flags=[CAN_ELIMINATE]) - -# Untyped buffer load/store instructions of arbitrary length. -# src[] = { descriptor, vector byte offset, scalar byte offset, index offset } -# The index offset is multiplied by the stride in the descriptor. -# The vector/scalar offsets are in bytes, BASE is a constant byte offset. -intrinsic("load_buffer_amd", src_comp=[4, 1, 1, 1], dest_comp=0, indices=[BASE, MEMORY_MODES, ACCESS], flags=[CAN_ELIMINATE]) -# src[] = { store value, descriptor, vector byte offset, scalar byte offset, index offset } -intrinsic("store_buffer_amd", src_comp=[0, 4, 1, 1, 1], indices=[BASE, WRITE_MASK, MEMORY_MODES, ACCESS]) - -# Typed buffer load of arbitrary length, using a specified format. -# src[] = { descriptor, vector byte offset, scalar byte offset, index offset } -# -# The compiler backend is responsible for emitting correct HW instructions according to alignment, range etc. -# Users of this intrinsic must ensure that the first component being loaded is really the first component -# of the specified format, because range analysis assumes this. -# The size of the specified format also determines the memory range that this instruction is allowed to access. -# -# The index offset is multiplied by the stride in the descriptor, if any. -# The vector/scalar offsets are in bytes, BASE is a constant byte offset. -intrinsic("load_typed_buffer_amd", src_comp=[4, 1, 1, 1], dest_comp=0, indices=[BASE, MEMORY_MODES, ACCESS, FORMAT, ALIGN_MUL, ALIGN_OFFSET], flags=[CAN_ELIMINATE]) - -# src[] = { address, unsigned 32-bit offset }. -load("global_amd", [1, 1], indices=[BASE, ACCESS, ALIGN_MUL, ALIGN_OFFSET], flags=[CAN_ELIMINATE]) -# src[] = { value, address, unsigned 32-bit offset }. -store("global_amd", [1, 1], indices=[BASE, ACCESS, ALIGN_MUL, ALIGN_OFFSET, WRITE_MASK]) - -# Same as shared_atomic_add, but with GDS. src[] = {store_val, gds_addr, m0} -intrinsic("gds_atomic_add_amd", src_comp=[1, 1, 1], dest_comp=1, indices=[BASE]) - -# src[] = { descriptor, add_value } -intrinsic("buffer_atomic_add_amd", src_comp=[4, 1], dest_comp=1, indices=[BASE]) - -# src[] = { sample_id, num_samples } -intrinsic("load_sample_positions_amd", src_comp=[1, 1], dest_comp=2, flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Descriptor where TCS outputs are stored for TES -system_value("ring_tess_offchip_amd", 4) -system_value("ring_tess_offchip_offset_amd", 1) -# Descriptor where TCS outputs are stored for the HW tessellator -system_value("ring_tess_factors_amd", 4) -system_value("ring_tess_factors_offset_amd", 1) -# Descriptor where ES outputs are stored for GS to read on GFX6-8 -system_value("ring_esgs_amd", 4) -system_value("ring_es2gs_offset_amd", 1) -# Address of the task shader draw ring (used for VARYING_SLOT_TASK_COUNT) -system_value("ring_task_draw_amd", 4) -# Address of the task shader payload ring (used for all other outputs) -system_value("ring_task_payload_amd", 4) -# Address of the mesh shader scratch ring (used for excess mesh shader outputs) -system_value("ring_mesh_scratch_amd", 4) -system_value("ring_mesh_scratch_offset_amd", 1) -# Pointer into the draw and payload rings -system_value("task_ring_entry_amd", 1) -# Descriptor where NGG attributes are stored on GFX11. -system_value("ring_attr_amd", 4) -system_value("ring_attr_offset_amd", 1) - -# Number of patches processed by each TCS workgroup -system_value("tcs_num_patches_amd", 1) -# Relative tessellation patch ID within the current workgroup -system_value("tess_rel_patch_id_amd", 1) -# Vertex offsets used for GS per-vertex inputs -system_value("gs_vertex_offset_amd", 1, [BASE]) -# Number of rasterization samples -system_value("rasterization_samples_amd", 1) - -# Descriptor where GS outputs are stored for GS copy shader to read on GFX6-9 -system_value("ring_gsvs_amd", 4, indices=[STREAM_ID]) -# Write offset in gsvs ring for legacy GS shader -system_value("ring_gs2vs_offset_amd", 1) - -# Streamout configuration -system_value("streamout_config_amd", 1) -# Position to write within the streamout buffers -system_value("streamout_write_index_amd", 1) -# Offset to write within a streamout buffer -system_value("streamout_offset_amd", 1, indices=[BASE]) - -# AMD merged shader intrinsics - -# Whether the current invocation index in the subgroup is less than the source. The source must be -# subgroup uniform and bits 0-7 must be less than or equal to the wave size. -intrinsic("is_subgroup_invocation_lt_amd", src_comp=[1], dest_comp=1, bit_sizes=[1], flags=[CAN_ELIMINATE]) - -# AMD NGG intrinsics - -# Number of initial input vertices in the current workgroup. -system_value("workgroup_num_input_vertices_amd", 1) -# Number of initial input primitives in the current workgroup. -system_value("workgroup_num_input_primitives_amd", 1) -# For NGG passthrough mode only. Pre-packed argument for export_primitive_amd. -system_value("packed_passthrough_primitive_amd", 1) -# Whether NGG should execute shader query for pipeline statistics. -system_value("pipeline_stat_query_enabled_amd", dest_comp=1, bit_sizes=[1]) -# Whether NGG should execute shader query for primitive generated. -system_value("prim_gen_query_enabled_amd", dest_comp=1, bit_sizes=[1]) -# Whether NGG should execute shader query for primitive streamouted. -system_value("prim_xfb_query_enabled_amd", dest_comp=1, bit_sizes=[1]) -# Merged wave info. Bits 0-7 are the ES thread count, 8-15 are the GS thread count, 16-24 is the -# GS Wave ID, 24-27 is the wave index in the workgroup, and 28-31 is the workgroup size in waves. -system_value("merged_wave_info_amd", dest_comp=1) -# Whether the shader should clamp vertex color outputs to [0, 1]. -system_value("clamp_vertex_color_amd", dest_comp=1, bit_sizes=[1]) -# Whether the shader should cull front facing triangles. -intrinsic("load_cull_front_face_enabled_amd", dest_comp=1, bit_sizes=[1], flags=[CAN_ELIMINATE]) -# Whether the shader should cull back facing triangles. -intrinsic("load_cull_back_face_enabled_amd", dest_comp=1, bit_sizes=[1], flags=[CAN_ELIMINATE]) -# True if face culling should use CCW (false if CW). -intrinsic("load_cull_ccw_amd", dest_comp=1, bit_sizes=[1], flags=[CAN_ELIMINATE]) -# Whether the shader should cull small primitives that are not visible in a pixel. -intrinsic("load_cull_small_primitives_enabled_amd", dest_comp=1, bit_sizes=[1], flags=[CAN_ELIMINATE]) -# Whether any culling setting is enabled in the shader. -intrinsic("load_cull_any_enabled_amd", dest_comp=1, bit_sizes=[1], flags=[CAN_ELIMINATE]) -# Small primitive culling precision -intrinsic("load_cull_small_prim_precision_amd", dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE, CAN_REORDER]) -# Initial edge flags in a Vertex Shader, packed into the format the HW needs for primitive export. -intrinsic("load_initial_edgeflags_amd", src_comp=[], dest_comp=1, bit_sizes=[32], indices=[]) -# Allocates export space for vertices and primitives. src[] = {num_vertices, num_primitives}. -intrinsic("alloc_vertices_and_primitives_amd", src_comp=[1, 1], indices=[]) -# Overwrites VS input registers, for use with vertex compaction after culling. src = {vertex_id, instance_id}. -intrinsic("overwrite_vs_arguments_amd", src_comp=[1, 1], indices=[]) -# Overwrites TES input registers, for use with vertex compaction after culling. src = {tes_u, tes_v, rel_patch_id, patch_id}. -intrinsic("overwrite_tes_arguments_amd", src_comp=[1, 1, 1, 1], indices=[]) - -# The address of the sbt descriptors. -system_value("sbt_base_amd", 1, bit_sizes=[64]) - -# 1. HW descriptor -# 2. BVH node(64-bit pointer as 2x32 ...) -# 3. ray extent -# 4. ray origin -# 5. ray direction -# 6. inverse ray direction (componentwise 1.0/ray direction) -intrinsic("bvh64_intersect_ray_amd", [4, 2, 1, 3, 3, 3], 4, flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Return of a callable in raytracing pipelines -intrinsic("rt_return_amd") - -# offset into scratch for the input callable data in a raytracing pipeline. -system_value("rt_arg_scratch_offset_amd", 1) - -# Whether to call the anyhit shader for an intersection in an intersection shader. -system_value("intersection_opaque_amd", 1, bit_sizes=[1]) - -# Used for indirect ray tracing. -system_value("ray_launch_size_addr_amd", 1, bit_sizes=[64]) - -# Scratch base of callable stack for ray tracing. -system_value("rt_dynamic_callable_stack_base_amd", 1) - -# Ray Tracing Traversal inputs -system_value("sbt_offset_amd", 1) -system_value("sbt_stride_amd", 1) -system_value("accel_struct_amd", 1, bit_sizes=[64]) -system_value("cull_mask_and_flags_amd", 1) - -# 0. SBT Index -# 1. Ray Tmax -# 2. Primitive Id -# 3. Instance Addr -# 4. Geometry Id and Flags -# 5. Hit Kind -intrinsic("execute_closest_hit_amd", src_comp=[1, 1, 1, 1, 1, 1]) - -# 0. Ray Tmax -intrinsic("execute_miss_amd", src_comp=[1]) - -# Used for saving and restoring hit attribute variables. -# BASE=dword index -intrinsic("load_hit_attrib_amd", dest_comp=1, bit_sizes=[32], indices=[BASE]) -intrinsic("store_hit_attrib_amd", src_comp=[1], indices=[BASE]) - -# Load forced VRS rates. -intrinsic("load_force_vrs_rates_amd", dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE, CAN_REORDER]) - -intrinsic("load_scalar_arg_amd", dest_comp=0, bit_sizes=[32], indices=[BASE, ARG_UPPER_BOUND_U32_AMD], flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("load_vector_arg_amd", dest_comp=0, bit_sizes=[32], indices=[BASE, ARG_UPPER_BOUND_U32_AMD], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# src[] = { 32/64-bit base address, 32-bit offset }. -intrinsic("load_smem_amd", src_comp=[1, 1], dest_comp=0, bit_sizes=[32], - indices=[ALIGN_MUL, ALIGN_OFFSET], - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# src[] = { descriptor, offset } -intrinsic("load_smem_buffer_amd", src_comp=[4, 1], dest_comp=0, bit_sizes=[32], - indices=[ALIGN_MUL, ALIGN_OFFSET], - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# src[] = { offset }. -intrinsic("load_shared2_amd", [1], dest_comp=2, indices=[OFFSET0, OFFSET1, ST64], flags=[CAN_ELIMINATE]) - -# src[] = { value, offset }. -intrinsic("store_shared2_amd", [2, 1], indices=[OFFSET0, OFFSET1, ST64]) - -# Vertex stride in LS-HS buffer -system_value("lshs_vertex_stride_amd", 1) - -# Vertex stride in ES-GS buffer -system_value("esgs_vertex_stride_amd", 1) - -# Per patch data offset in HS VRAM output buffer -system_value("hs_out_patch_data_offset_amd", 1) - -# line_width * 0.5 / abs(viewport_scale[2]) -system_value("clip_half_line_width_amd", 2) - -# Number of vertices in a primitive -system_value("num_vertices_per_primitive_amd", 1) - -# Load streamout buffer desc -# BASE = buffer index -intrinsic("load_streamout_buffer_amd", dest_comp=4, indices=[BASE], bit_sizes=[32], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# An ID for each workgroup ordered by primitve sequence -system_value("ordered_id_amd", 1) - -# Add src1 to global streamout buffer offsets in the specified order -# src[] = { ordered_id, counter } -# WRITE_MASK = mask for counter channel to update -intrinsic("ordered_xfb_counter_add_amd", dest_comp=0, src_comp=[1, 0], indices=[WRITE_MASK], bit_sizes=[32]) -# Subtract from global streamout buffer offsets. Used to fix up the offsets -# when we overflow streamout buffers. -# src[] = { offsets } -# WRITE_MASK = mask of offsets to subtract -intrinsic("xfb_counter_sub_amd", src_comp=[0], indices=[WRITE_MASK], bit_sizes=[32]) - -# Provoking vertex index in a primitive -system_value("provoking_vtx_in_prim_amd", 1) - -# Atomically add current wave's primitive count to query result -# * GS emitted primitive is primitive emitted by any GS stream -# * generated primitive is primitive that has been produced for that stream by VS/TES/GS -# * streamout primitve is primitve that has been written to xfb buffer, may be different -# than generated primitive when xfb buffer is too small to hold more primitives -# src[] = { primitive_count }. -intrinsic("atomic_add_gs_emit_prim_count_amd", [1]) -intrinsic("atomic_add_gen_prim_count_amd", [1], indices=[STREAM_ID]) -intrinsic("atomic_add_xfb_prim_count_amd", [1], indices=[STREAM_ID]) - -# Atomically add current wave's invocation count to query result -# src[] = { invocation_count }. -intrinsic("atomic_add_gs_invocation_count_amd", [1]) - -# LDS offset for scratch section in NGG shader -system_value("lds_ngg_scratch_base_amd", 1) -# LDS offset for NGG GS shader vertex emit -system_value("lds_ngg_gs_out_vertex_base_amd", 1) - -# AMD GPU shader output export instruction -# src[] = { export_value } -# BASE = export target -# FLAGS = AC_EXP_FLAG_* -intrinsic("export_amd", [0], indices=[BASE, WRITE_MASK, FLAGS]) - -# Alpha test reference value -system_value("alpha_reference_amd", 1) - -# V3D-specific instrinc for tile buffer color reads. -# -# The hardware requires that we read the samples and components of a pixel -# in order, so we cannot eliminate or remove any loads in a sequence. -# -# src[] = { render_target } -# BASE = sample index -load("tlb_color_v3d", [1], [BASE, COMPONENT], []) - -# V3D-specific instrinc for per-sample tile buffer color writes. -# -# The driver backend needs to identify per-sample color writes and emit -# specific code for them. -# -# src[] = { value, render_target } -# BASE = sample index -store("tlb_sample_color_v3d", [1], [BASE, COMPONENT, SRC_TYPE], []) - -# V3D-specific intrinsic to load the number of layers attached to -# the target framebuffer -intrinsic("load_fb_layers_v3d", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Load/store a pixel in local memory. This operation is formatted, with -# conversion between the specified format and the implied register format of the -# source/destination (for store/loads respectively). This mostly matters for -# converting between floating-point registers and normalized memory formats. -# -# The format is the pipe_format of the local memory (the source), see -# agx_internal_formats.h for the supported list. -# -# Logically, this loads/stores a single sample. The sample to load is -# specified by the bitfield sample mask source. However, for stores multiple -# bits of the sample mask may be set, which will replicate the value. For -# pixel rate shading, use 0xFF as the mask to store to all samples regardless of -# the sample count. -# -# All calculations are relative to an immediate byte offset into local -# memory, which acts relative to the start of the sample. These instructions -# logically access: -# -# (((((y * tile_width) + x) * nr_samples) + sample) * sample_stride) + offset -# -# src[] = { sample mask } -# base = offset -load("local_pixel_agx", [1], [BASE, FORMAT], [CAN_REORDER, CAN_ELIMINATE]) -# src[] = { value, sample mask } -# base = offset -store("local_pixel_agx", [1], [BASE, WRITE_MASK, FORMAT], [CAN_REORDER]) - -# Combined depth/stencil emit, applying to a mask of samples. base indicates -# which to write (1 = depth, 2 = stencil, 3 = both). -# -# src[] = { sample mask, depth, stencil } -intrinsic("store_zs_agx", [1, 1, 1], indices=[BASE], flags=[]) - -# Store a block from local memory into a bound image. Used to write out render -# targets within the end-of-tile shader, although it is valid in general compute -# kernels. -# -# The format is the pipe_format of the local memory (the source), see -# agx_internal_formats.h for the supported list. The image format is -# specified in the PBE descriptor. -# -# The image dimension is used to distinguish multisampled images from -# non-multisampled images. It must be 2D or MS. -# -# src[] = { image index, logical offset within shared memory } -intrinsic("block_image_store_agx", [1, 1], bit_sizes=[32, 16], - indices=[FORMAT, IMAGE_DIM], flags=[CAN_REORDER]) - -# Formatted load/store. The format is the pipe_format in memory (see -# agx_internal_formats.h for the supported list). This accesses: -# -# address + extend(index) << (format shift + shift) -# -# The nir_intrinsic_base() index encodes the shift. The sign_extend index -# determines whether sign- or zero-extension is used for the index. -# -# All loads and stores on AGX uses these hardware instructions, so while these are -# logically load_global_agx/load_global_constant_agx/store_global_agx, the -# _global is omitted as it adds nothing. -# -# src[] = { address, index }. -load("agx", [1, 1], [ACCESS, BASE, FORMAT, SIGN_EXTEND], [CAN_ELIMINATE]) -load("constant_agx", [1, 1], [ACCESS, BASE, FORMAT, SIGN_EXTEND], - [CAN_ELIMINATE, CAN_REORDER]) -# src[] = { value, address, index }. -store("agx", [1, 1], [ACCESS, BASE, FORMAT, SIGN_EXTEND]) - -# Logical complement of load_front_face, mapping to an AGX system value -system_value("back_face_agx", 1, bit_sizes=[1, 32]) - -# Loads the texture descriptor base for indexed (non-bindless) textures. On G13, -# the referenced array has stride 24. -system_value("texture_base_agx", 1, bit_sizes=[64]) - -# Load the base address of an indexed UBO/VBO (for lowering UBOs/VBOs) -intrinsic("load_ubo_base_agx", src_comp=[1], dest_comp=1, bit_sizes=[64], - flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("load_vbo_base_agx", src_comp=[1], dest_comp=1, bit_sizes=[64], - flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Intel-specific query for loading from the brw_image_param struct passed -# into the shader as a uniform. The variable is a deref to the image -# variable. The const index specifies which of the six parameters to load. -intrinsic("image_deref_load_param_intel", src_comp=[1], dest_comp=0, - indices=[BASE], flags=[CAN_ELIMINATE, CAN_REORDER]) -image("load_raw_intel", src_comp=[1], dest_comp=0, - flags=[CAN_ELIMINATE]) -image("store_raw_intel", src_comp=[1, 0]) - -# Intrinsic to load a block of at least 32B of constant data from a 64-bit -# global memory address. The memory address must be uniform and 32B-aligned. -# The second source is a predicate which indicates whether or not to actually -# do the load. -# src[] = { address, predicate }. -intrinsic("load_global_const_block_intel", src_comp=[1, 1], dest_comp=0, - bit_sizes=[32], indices=[BASE], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# Number of data items being operated on for a SIMD program. -system_value("simd_width_intel", 1) - -# Load a relocatable 32-bit value -intrinsic("load_reloc_const_intel", dest_comp=1, bit_sizes=[32], - indices=[PARAM_IDX], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# 64-bit global address for a Vulkan descriptor set -# src[0] = { set } -intrinsic("load_desc_set_address_intel", dest_comp=1, bit_sizes=[64], - src_comp=[1], flags=[CAN_ELIMINATE, CAN_REORDER]) - -# OpSubgroupBlockReadINTEL and OpSubgroupBlockWriteINTEL from SPV_INTEL_subgroups. -intrinsic("load_deref_block_intel", dest_comp=0, src_comp=[-1], - indices=[ACCESS], flags=[CAN_ELIMINATE]) -intrinsic("store_deref_block_intel", src_comp=[-1, 0], indices=[WRITE_MASK, ACCESS]) - -# src[] = { address }. -load("global_block_intel", [1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) - -# src[] = { buffer_index, offset }. -load("ssbo_block_intel", [-1, 1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) - -# src[] = { offset }. -load("shared_block_intel", [1], [BASE, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) - -# src[] = { value, address }. -store("global_block_intel", [1], [WRITE_MASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) - -# src[] = { value, block_index, offset } -store("ssbo_block_intel", [-1, 1], [WRITE_MASK, ACCESS, ALIGN_MUL, ALIGN_OFFSET]) - -# src[] = { value, offset }. -store("shared_block_intel", [1], [BASE, WRITE_MASK, ALIGN_MUL, ALIGN_OFFSET]) - -# Similar to load_global_const_block_intel but for SSBOs -# offset should be uniform -# src[] = { buffer_index, offset }. -load("ssbo_uniform_block_intel", [-1, 1], [ACCESS, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) - -# Similar to load_global_const_block_intel but for shared memory -# src[] = { offset }. -load("shared_uniform_block_intel", [1], [BASE, ALIGN_MUL, ALIGN_OFFSET], [CAN_ELIMINATE]) - -# Intrinsics for Intel mesh shading -system_value("mesh_inline_data_intel", 1, [ALIGN_OFFSET], bit_sizes=[32, 64]) - -# Intrinsics for Intel bindless thread dispatch -# BASE=brw_topoloy_id -system_value("topology_id_intel", 1, indices=[BASE]) -system_value("btd_stack_id_intel", 1) -system_value("btd_global_arg_addr_intel", 1, bit_sizes=[64]) -system_value("btd_local_arg_addr_intel", 1, bit_sizes=[64]) -system_value("btd_resume_sbt_addr_intel", 1, bit_sizes=[64]) -# src[] = { global_arg_addr, btd_record } -intrinsic("btd_spawn_intel", src_comp=[1, 1]) -# RANGE=stack_size -intrinsic("btd_stack_push_intel", indices=[STACK_SIZE]) -# src[] = { } -intrinsic("btd_retire_intel") - -# Intel-specific ray-tracing intrinsic -# src[] = { globals, level, operation } SYNCHRONOUS=synchronous -intrinsic("trace_ray_intel", src_comp=[1, 1, 1], indices=[SYNCHRONOUS]) - -# System values used for ray-tracing on Intel -system_value("ray_base_mem_addr_intel", 1, bit_sizes=[64]) -system_value("ray_hw_stack_size_intel", 1) -system_value("ray_sw_stack_size_intel", 1) -system_value("ray_num_dss_rt_stacks_intel", 1) -system_value("ray_hit_sbt_addr_intel", 1, bit_sizes=[64]) -system_value("ray_hit_sbt_stride_intel", 1, bit_sizes=[16]) -system_value("ray_miss_sbt_addr_intel", 1, bit_sizes=[64]) -system_value("ray_miss_sbt_stride_intel", 1, bit_sizes=[16]) -system_value("callable_sbt_addr_intel", 1, bit_sizes=[64]) -system_value("callable_sbt_stride_intel", 1, bit_sizes=[16]) -system_value("leaf_opaque_intel", 1, bit_sizes=[1]) -system_value("leaf_procedural_intel", 1, bit_sizes=[1]) -# Values : -# 0: AnyHit -# 1: ClosestHit -# 2: Miss -# 3: Intersection -system_value("btd_shader_type_intel", 1) -system_value("ray_query_global_intel", 1, bit_sizes=[64]) - -# In order to deal with flipped render targets, gl_PointCoord may be flipped -# in the shader requiring a shader key or extra instructions or it may be -# flipped in hardware based on a state bit. This version of gl_PointCoord -# is defined to be whatever thing the hardware can easily give you, so long as -# it's in normalized coordinates in the range [0, 1] across the point. -intrinsic("load_point_coord_maybe_flipped", dest_comp=2, bit_sizes=[32]) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_c.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_c.py deleted file mode 100644 index 79d69df..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_c.py +++ /dev/null @@ -1,88 +0,0 @@ -from functools import reduce -import operator - -template = """\ -/* Copyright (C) 2018 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -const nir_intrinsic_info nir_intrinsic_infos[nir_num_intrinsics] = { -% for name, opcode in sorted(INTR_OPCODES.items()): -{ - .name = "${name}", - .num_srcs = ${opcode.num_srcs}, -% if opcode.src_components: - .src_components = { - ${", ".join(str(comp) for comp in opcode.src_components)} - }, -% endif - .has_dest = ${"true" if opcode.has_dest else "false"}, - .dest_components = ${max(opcode.dest_components, 0)}, - .dest_bit_sizes = ${hex(reduce(operator.or_, opcode.bit_sizes, 0))}, - .bit_size_src = ${opcode.bit_size_src}, - .num_indices = ${opcode.num_indices}, -% if opcode.indices: - .indices = { -% for i in range(len(opcode.indices)): - NIR_INTRINSIC_${opcode.indices[i].name.upper()}, -% endfor - }, - .index_map = { -% for i in range(len(opcode.indices)): - [NIR_INTRINSIC_${opcode.indices[i].name.upper()}] = ${i + 1}, -% endfor - }, -% endif - .flags = ${"0" if len(opcode.flags) == 0 else " | ".join(opcode.flags)}, -}, -% endfor -}; - -const char *nir_intrinsic_index_names[NIR_INTRINSIC_NUM_INDEX_FLAGS] = { -% for index in INTR_INDICES: - "${index.name}", -% endfor -}; -""" - -from nir_intrinsics import INTR_OPCODES, INTR_INDICES -from mako.template import Template -import argparse -import os - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('--outdir', required=True, - help='Directory to put the generated files in') - - args = parser.parse_args() - - path = os.path.join(args.outdir, 'nir_intrinsics.c') - with open(path, 'w') as f: - f.write(Template(template).render( - INTR_OPCODES=INTR_OPCODES, INTR_INDICES=INTR_INDICES, - reduce=reduce, operator=operator)) - -if __name__ == '__main__': - main() - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_h.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_h.py deleted file mode 100644 index e4ebf34..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_h.py +++ /dev/null @@ -1,69 +0,0 @@ - -template = """\ -/* Copyright (C) 2018 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_INTRINSICS_ -#define _NIR_INTRINSICS_ - -<% opcode_names = sorted(INTR_OPCODES) %> - -typedef enum { -% for name in opcode_names: - nir_intrinsic_${name}, -% endfor - - nir_last_intrinsic = nir_intrinsic_${opcode_names[-1]}, - nir_num_intrinsics = nir_last_intrinsic + 1 -} nir_intrinsic_op; - -typedef enum { -% for index in INTR_INDICES: - NIR_INTRINSIC_${index.name.upper()}, -% endfor - NIR_INTRINSIC_NUM_INDEX_FLAGS, -} nir_intrinsic_index_flag; - -extern const char *nir_intrinsic_index_names[NIR_INTRINSIC_NUM_INDEX_FLAGS]; - -#endif /* _NIR_INTRINSICS_ */""" - -from nir_intrinsics import INTR_OPCODES, INTR_INDICES -from mako.template import Template -import argparse -import os - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('--outdir', required=True, - help='Directory to put the generated files in') - - args = parser.parse_args() - - path = os.path.join(args.outdir, 'nir_intrinsics.h') - with open(path, 'w') as f: - f.write(Template(template).render(INTR_OPCODES=INTR_OPCODES, INTR_INDICES=INTR_INDICES)) - -if __name__ == '__main__': - main() - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_indices.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_indices.h deleted file mode 100644 index af3e0df..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_indices.h +++ /dev/null @@ -1,1169 +0,0 @@ -/* Copyright (C) 2018 Red Hat - * Copyright (C) 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_INTRINSICS_INDICES_ -#define _NIR_INTRINSICS_INDICES_ - - - -static inline int -nir_intrinsic_base(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_BASE] > 0); - return (int)instr->const_index[info->index_map[NIR_INTRINSIC_BASE] - 1]; -} - -static inline void -nir_intrinsic_set_base(nir_intrinsic_instr *instr, int val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_BASE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_BASE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_base(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_BASE] > 0; -} - - -static inline unsigned -nir_intrinsic_write_mask(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_WRITE_MASK] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_WRITE_MASK] - 1]; -} - -static inline void -nir_intrinsic_set_write_mask(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_WRITE_MASK] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_WRITE_MASK] - 1] = val; -} - -static inline bool -nir_intrinsic_has_write_mask(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_WRITE_MASK] > 0; -} - - -static inline unsigned -nir_intrinsic_stream_id(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_STREAM_ID] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_STREAM_ID] - 1]; -} - -static inline void -nir_intrinsic_set_stream_id(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_STREAM_ID] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_STREAM_ID] - 1] = val; -} - -static inline bool -nir_intrinsic_has_stream_id(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_STREAM_ID] > 0; -} - - -static inline unsigned -nir_intrinsic_ucp_id(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_UCP_ID] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_UCP_ID] - 1]; -} - -static inline void -nir_intrinsic_set_ucp_id(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_UCP_ID] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_UCP_ID] - 1] = val; -} - -static inline bool -nir_intrinsic_has_ucp_id(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_UCP_ID] > 0; -} - - -static inline unsigned -nir_intrinsic_range_base(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_RANGE_BASE] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_RANGE_BASE] - 1]; -} - -static inline void -nir_intrinsic_set_range_base(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_RANGE_BASE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_RANGE_BASE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_range_base(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_RANGE_BASE] > 0; -} - - -static inline unsigned -nir_intrinsic_range(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_RANGE] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_RANGE] - 1]; -} - -static inline void -nir_intrinsic_set_range(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_RANGE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_RANGE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_range(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_RANGE] > 0; -} - - -static inline unsigned -nir_intrinsic_desc_set(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DESC_SET] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_DESC_SET] - 1]; -} - -static inline void -nir_intrinsic_set_desc_set(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DESC_SET] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_DESC_SET] - 1] = val; -} - -static inline bool -nir_intrinsic_has_desc_set(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_DESC_SET] > 0; -} - - -static inline unsigned -nir_intrinsic_binding(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_BINDING] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_BINDING] - 1]; -} - -static inline void -nir_intrinsic_set_binding(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_BINDING] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_BINDING] - 1] = val; -} - -static inline bool -nir_intrinsic_has_binding(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_BINDING] > 0; -} - - -static inline unsigned -nir_intrinsic_component(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_COMPONENT] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_COMPONENT] - 1]; -} - -static inline void -nir_intrinsic_set_component(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_COMPONENT] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_COMPONENT] - 1] = val; -} - -static inline bool -nir_intrinsic_has_component(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_COMPONENT] > 0; -} - - -static inline unsigned -nir_intrinsic_column(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_COLUMN] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_COLUMN] - 1]; -} - -static inline void -nir_intrinsic_set_column(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_COLUMN] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_COLUMN] - 1] = val; -} - -static inline bool -nir_intrinsic_has_column(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_COLUMN] > 0; -} - - -static inline unsigned -nir_intrinsic_interp_mode(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_INTERP_MODE] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_INTERP_MODE] - 1]; -} - -static inline void -nir_intrinsic_set_interp_mode(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_INTERP_MODE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_INTERP_MODE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_interp_mode(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_INTERP_MODE] > 0; -} - - -static inline unsigned -nir_intrinsic_reduction_op(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_REDUCTION_OP] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_REDUCTION_OP] - 1]; -} - -static inline void -nir_intrinsic_set_reduction_op(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_REDUCTION_OP] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_REDUCTION_OP] - 1] = val; -} - -static inline bool -nir_intrinsic_has_reduction_op(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_REDUCTION_OP] > 0; -} - - -static inline unsigned -nir_intrinsic_cluster_size(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_CLUSTER_SIZE] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_CLUSTER_SIZE] - 1]; -} - -static inline void -nir_intrinsic_set_cluster_size(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_CLUSTER_SIZE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_CLUSTER_SIZE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_cluster_size(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_CLUSTER_SIZE] > 0; -} - - -static inline unsigned -nir_intrinsic_param_idx(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_PARAM_IDX] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_PARAM_IDX] - 1]; -} - -static inline void -nir_intrinsic_set_param_idx(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_PARAM_IDX] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_PARAM_IDX] - 1] = val; -} - -static inline bool -nir_intrinsic_has_param_idx(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_PARAM_IDX] > 0; -} - - -static inline enum glsl_sampler_dim -nir_intrinsic_image_dim(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IMAGE_DIM] > 0); - return (enum glsl_sampler_dim)instr->const_index[info->index_map[NIR_INTRINSIC_IMAGE_DIM] - 1]; -} - -static inline void -nir_intrinsic_set_image_dim(nir_intrinsic_instr *instr, enum glsl_sampler_dim val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IMAGE_DIM] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_IMAGE_DIM] - 1] = val; -} - -static inline bool -nir_intrinsic_has_image_dim(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_IMAGE_DIM] > 0; -} - - -static inline bool -nir_intrinsic_image_array(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IMAGE_ARRAY] > 0); - return (bool)instr->const_index[info->index_map[NIR_INTRINSIC_IMAGE_ARRAY] - 1]; -} - -static inline void -nir_intrinsic_set_image_array(nir_intrinsic_instr *instr, bool val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IMAGE_ARRAY] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_IMAGE_ARRAY] - 1] = val; -} - -static inline bool -nir_intrinsic_has_image_array(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_IMAGE_ARRAY] > 0; -} - - -static inline enum pipe_format -nir_intrinsic_format(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_FORMAT] > 0); - return (enum pipe_format)instr->const_index[info->index_map[NIR_INTRINSIC_FORMAT] - 1]; -} - -static inline void -nir_intrinsic_set_format(nir_intrinsic_instr *instr, enum pipe_format val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_FORMAT] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_FORMAT] - 1] = val; -} - -static inline bool -nir_intrinsic_has_format(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_FORMAT] > 0; -} - - -static inline enum gl_access_qualifier -nir_intrinsic_access(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ACCESS] > 0); - return (enum gl_access_qualifier)instr->const_index[info->index_map[NIR_INTRINSIC_ACCESS] - 1]; -} - -static inline void -nir_intrinsic_set_access(nir_intrinsic_instr *instr, enum gl_access_qualifier val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ACCESS] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_ACCESS] - 1] = val; -} - -static inline bool -nir_intrinsic_has_access(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_ACCESS] > 0; -} - - -static inline unsigned -nir_intrinsic_call_idx(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_CALL_IDX] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_CALL_IDX] - 1]; -} - -static inline void -nir_intrinsic_set_call_idx(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_CALL_IDX] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_CALL_IDX] - 1] = val; -} - -static inline bool -nir_intrinsic_has_call_idx(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_CALL_IDX] > 0; -} - - -static inline unsigned -nir_intrinsic_stack_size(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_STACK_SIZE] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_STACK_SIZE] - 1]; -} - -static inline void -nir_intrinsic_set_stack_size(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_STACK_SIZE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_STACK_SIZE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_stack_size(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_STACK_SIZE] > 0; -} - - -static inline unsigned -nir_intrinsic_align_mul(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ALIGN_MUL] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_ALIGN_MUL] - 1]; -} - -static inline void -nir_intrinsic_set_align_mul(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ALIGN_MUL] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_ALIGN_MUL] - 1] = val; -} - -static inline bool -nir_intrinsic_has_align_mul(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_ALIGN_MUL] > 0; -} - - -static inline unsigned -nir_intrinsic_align_offset(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ALIGN_OFFSET] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_ALIGN_OFFSET] - 1]; -} - -static inline void -nir_intrinsic_set_align_offset(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ALIGN_OFFSET] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_ALIGN_OFFSET] - 1] = val; -} - -static inline bool -nir_intrinsic_has_align_offset(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_ALIGN_OFFSET] > 0; -} - - -static inline unsigned -nir_intrinsic_desc_type(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DESC_TYPE] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_DESC_TYPE] - 1]; -} - -static inline void -nir_intrinsic_set_desc_type(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DESC_TYPE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_DESC_TYPE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_desc_type(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_DESC_TYPE] > 0; -} - - -static inline nir_alu_type -nir_intrinsic_src_type(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SRC_TYPE] > 0); - return (nir_alu_type)instr->const_index[info->index_map[NIR_INTRINSIC_SRC_TYPE] - 1]; -} - -static inline void -nir_intrinsic_set_src_type(nir_intrinsic_instr *instr, nir_alu_type val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SRC_TYPE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_SRC_TYPE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_src_type(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_SRC_TYPE] > 0; -} - - -static inline nir_alu_type -nir_intrinsic_dest_type(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DEST_TYPE] > 0); - return (nir_alu_type)instr->const_index[info->index_map[NIR_INTRINSIC_DEST_TYPE] - 1]; -} - -static inline void -nir_intrinsic_set_dest_type(nir_intrinsic_instr *instr, nir_alu_type val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DEST_TYPE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_DEST_TYPE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_dest_type(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_DEST_TYPE] > 0; -} - - -static inline unsigned -nir_intrinsic_swizzle_mask(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SWIZZLE_MASK] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_SWIZZLE_MASK] - 1]; -} - -static inline void -nir_intrinsic_set_swizzle_mask(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SWIZZLE_MASK] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_SWIZZLE_MASK] - 1] = val; -} - -static inline bool -nir_intrinsic_has_swizzle_mask(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_SWIZZLE_MASK] > 0; -} - - -static inline uint8_t -nir_intrinsic_offset0(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_OFFSET0] > 0); - return (uint8_t)instr->const_index[info->index_map[NIR_INTRINSIC_OFFSET0] - 1]; -} - -static inline void -nir_intrinsic_set_offset0(nir_intrinsic_instr *instr, uint8_t val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_OFFSET0] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_OFFSET0] - 1] = val; -} - -static inline bool -nir_intrinsic_has_offset0(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_OFFSET0] > 0; -} - - -static inline uint8_t -nir_intrinsic_offset1(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_OFFSET1] > 0); - return (uint8_t)instr->const_index[info->index_map[NIR_INTRINSIC_OFFSET1] - 1]; -} - -static inline void -nir_intrinsic_set_offset1(nir_intrinsic_instr *instr, uint8_t val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_OFFSET1] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_OFFSET1] - 1] = val; -} - -static inline bool -nir_intrinsic_has_offset1(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_OFFSET1] > 0; -} - - -static inline bool -nir_intrinsic_st64(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ST64] > 0); - return (bool)instr->const_index[info->index_map[NIR_INTRINSIC_ST64] - 1]; -} - -static inline void -nir_intrinsic_set_st64(nir_intrinsic_instr *instr, bool val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ST64] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_ST64] - 1] = val; -} - -static inline bool -nir_intrinsic_has_st64(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_ST64] > 0; -} - - -static inline unsigned -nir_intrinsic_arg_upper_bound_u32_amd(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD] - 1]; -} - -static inline void -nir_intrinsic_set_arg_upper_bound_u32_amd(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD] - 1] = val; -} - -static inline bool -nir_intrinsic_has_arg_upper_bound_u32_amd(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_ARG_UPPER_BOUND_U32_AMD] > 0; -} - - -static inline enum gl_access_qualifier -nir_intrinsic_dst_access(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DST_ACCESS] > 0); - return (enum gl_access_qualifier)instr->const_index[info->index_map[NIR_INTRINSIC_DST_ACCESS] - 1]; -} - -static inline void -nir_intrinsic_set_dst_access(nir_intrinsic_instr *instr, enum gl_access_qualifier val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DST_ACCESS] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_DST_ACCESS] - 1] = val; -} - -static inline bool -nir_intrinsic_has_dst_access(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_DST_ACCESS] > 0; -} - - -static inline enum gl_access_qualifier -nir_intrinsic_src_access(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SRC_ACCESS] > 0); - return (enum gl_access_qualifier)instr->const_index[info->index_map[NIR_INTRINSIC_SRC_ACCESS] - 1]; -} - -static inline void -nir_intrinsic_set_src_access(nir_intrinsic_instr *instr, enum gl_access_qualifier val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SRC_ACCESS] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_SRC_ACCESS] - 1] = val; -} - -static inline bool -nir_intrinsic_has_src_access(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_SRC_ACCESS] > 0; -} - - -static inline unsigned -nir_intrinsic_driver_location(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DRIVER_LOCATION] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_DRIVER_LOCATION] - 1]; -} - -static inline void -nir_intrinsic_set_driver_location(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_DRIVER_LOCATION] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_DRIVER_LOCATION] - 1] = val; -} - -static inline bool -nir_intrinsic_has_driver_location(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_DRIVER_LOCATION] > 0; -} - - -static inline nir_memory_semantics -nir_intrinsic_memory_semantics(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_MEMORY_SEMANTICS] > 0); - return (nir_memory_semantics)instr->const_index[info->index_map[NIR_INTRINSIC_MEMORY_SEMANTICS] - 1]; -} - -static inline void -nir_intrinsic_set_memory_semantics(nir_intrinsic_instr *instr, nir_memory_semantics val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_MEMORY_SEMANTICS] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_MEMORY_SEMANTICS] - 1] = val; -} - -static inline bool -nir_intrinsic_has_memory_semantics(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_MEMORY_SEMANTICS] > 0; -} - - -static inline nir_variable_mode -nir_intrinsic_memory_modes(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_MEMORY_MODES] > 0); - return (nir_variable_mode)instr->const_index[info->index_map[NIR_INTRINSIC_MEMORY_MODES] - 1]; -} - -static inline void -nir_intrinsic_set_memory_modes(nir_intrinsic_instr *instr, nir_variable_mode val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_MEMORY_MODES] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_MEMORY_MODES] - 1] = val; -} - -static inline bool -nir_intrinsic_has_memory_modes(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_MEMORY_MODES] > 0; -} - - -static inline nir_scope -nir_intrinsic_memory_scope(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_MEMORY_SCOPE] > 0); - return (nir_scope)instr->const_index[info->index_map[NIR_INTRINSIC_MEMORY_SCOPE] - 1]; -} - -static inline void -nir_intrinsic_set_memory_scope(nir_intrinsic_instr *instr, nir_scope val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_MEMORY_SCOPE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_MEMORY_SCOPE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_memory_scope(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_MEMORY_SCOPE] > 0; -} - - -static inline nir_scope -nir_intrinsic_execution_scope(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_EXECUTION_SCOPE] > 0); - return (nir_scope)instr->const_index[info->index_map[NIR_INTRINSIC_EXECUTION_SCOPE] - 1]; -} - -static inline void -nir_intrinsic_set_execution_scope(nir_intrinsic_instr *instr, nir_scope val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_EXECUTION_SCOPE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_EXECUTION_SCOPE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_execution_scope(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_EXECUTION_SCOPE] > 0; -} - - -static inline struct nir_io_semantics -nir_intrinsic_io_semantics(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IO_SEMANTICS] > 0); - struct nir_io_semantics res; - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(res)); - memcpy(&res, &instr->const_index[info->index_map[NIR_INTRINSIC_IO_SEMANTICS] - 1], sizeof(res)); - return res; -} - -static inline void -nir_intrinsic_set_io_semantics(nir_intrinsic_instr *instr, struct nir_io_semantics val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IO_SEMANTICS] > 0); - val._pad = 0; /* clear padding bits */ - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(val)); - memcpy(&instr->const_index[info->index_map[NIR_INTRINSIC_IO_SEMANTICS] - 1], &val, sizeof(val)); -} - -static inline bool -nir_intrinsic_has_io_semantics(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_IO_SEMANTICS] > 0; -} - - -static inline struct nir_io_xfb -nir_intrinsic_io_xfb(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IO_XFB] > 0); - struct nir_io_xfb res; - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(res)); - memcpy(&res, &instr->const_index[info->index_map[NIR_INTRINSIC_IO_XFB] - 1], sizeof(res)); - return res; -} - -static inline void -nir_intrinsic_set_io_xfb(nir_intrinsic_instr *instr, struct nir_io_xfb val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IO_XFB] > 0); - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(val)); - memcpy(&instr->const_index[info->index_map[NIR_INTRINSIC_IO_XFB] - 1], &val, sizeof(val)); -} - -static inline bool -nir_intrinsic_has_io_xfb(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_IO_XFB] > 0; -} - - -static inline struct nir_io_xfb -nir_intrinsic_io_xfb2(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IO_XFB2] > 0); - struct nir_io_xfb res; - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(res)); - memcpy(&res, &instr->const_index[info->index_map[NIR_INTRINSIC_IO_XFB2] - 1], sizeof(res)); - return res; -} - -static inline void -nir_intrinsic_set_io_xfb2(nir_intrinsic_instr *instr, struct nir_io_xfb val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_IO_XFB2] > 0); - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(val)); - memcpy(&instr->const_index[info->index_map[NIR_INTRINSIC_IO_XFB2] - 1], &val, sizeof(val)); -} - -static inline bool -nir_intrinsic_has_io_xfb2(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_IO_XFB2] > 0; -} - - -static inline nir_ray_query_value -nir_intrinsic_ray_query_value(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_RAY_QUERY_VALUE] > 0); - return (nir_ray_query_value)instr->const_index[info->index_map[NIR_INTRINSIC_RAY_QUERY_VALUE] - 1]; -} - -static inline void -nir_intrinsic_set_ray_query_value(nir_intrinsic_instr *instr, nir_ray_query_value val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_RAY_QUERY_VALUE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_RAY_QUERY_VALUE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_ray_query_value(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_RAY_QUERY_VALUE] > 0; -} - - -static inline nir_rounding_mode -nir_intrinsic_rounding_mode(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ROUNDING_MODE] > 0); - return (nir_rounding_mode)instr->const_index[info->index_map[NIR_INTRINSIC_ROUNDING_MODE] - 1]; -} - -static inline void -nir_intrinsic_set_rounding_mode(nir_intrinsic_instr *instr, nir_rounding_mode val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_ROUNDING_MODE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_ROUNDING_MODE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_rounding_mode(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_ROUNDING_MODE] > 0; -} - - -static inline unsigned -nir_intrinsic_saturate(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SATURATE] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_SATURATE] - 1]; -} - -static inline void -nir_intrinsic_set_saturate(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SATURATE] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_SATURATE] - 1] = val; -} - -static inline bool -nir_intrinsic_has_saturate(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_SATURATE] > 0; -} - - -static inline bool -nir_intrinsic_synchronous(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SYNCHRONOUS] > 0); - return (bool)instr->const_index[info->index_map[NIR_INTRINSIC_SYNCHRONOUS] - 1]; -} - -static inline void -nir_intrinsic_set_synchronous(nir_intrinsic_instr *instr, bool val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SYNCHRONOUS] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_SYNCHRONOUS] - 1] = val; -} - -static inline bool -nir_intrinsic_has_synchronous(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_SYNCHRONOUS] > 0; -} - - -static inline unsigned -nir_intrinsic_value_id(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_VALUE_ID] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_VALUE_ID] - 1]; -} - -static inline void -nir_intrinsic_set_value_id(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_VALUE_ID] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_VALUE_ID] - 1] = val; -} - -static inline bool -nir_intrinsic_has_value_id(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_VALUE_ID] > 0; -} - - -static inline bool -nir_intrinsic_sign_extend(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SIGN_EXTEND] > 0); - return (bool)instr->const_index[info->index_map[NIR_INTRINSIC_SIGN_EXTEND] - 1]; -} - -static inline void -nir_intrinsic_set_sign_extend(nir_intrinsic_instr *instr, bool val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_SIGN_EXTEND] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_SIGN_EXTEND] - 1] = val; -} - -static inline bool -nir_intrinsic_has_sign_extend(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_SIGN_EXTEND] > 0; -} - - -static inline unsigned -nir_intrinsic_flags(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_FLAGS] > 0); - return (unsigned)instr->const_index[info->index_map[NIR_INTRINSIC_FLAGS] - 1]; -} - -static inline void -nir_intrinsic_set_flags(nir_intrinsic_instr *instr, unsigned val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[NIR_INTRINSIC_FLAGS] > 0); - instr->const_index[info->index_map[NIR_INTRINSIC_FLAGS] - 1] = val; -} - -static inline bool -nir_intrinsic_has_flags(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[NIR_INTRINSIC_FLAGS] > 0; -} - -#endif /* _NIR_INTRINSICS_INDICES_ */ \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_indices_h.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_indices_h.py deleted file mode 100644 index 25ef1c2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_intrinsics_indices_h.py +++ /dev/null @@ -1,96 +0,0 @@ - -template = """\ -/* Copyright (C) 2018 Red Hat - * Copyright (C) 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_INTRINSICS_INDICES_ -#define _NIR_INTRINSICS_INDICES_ - -% for index in INTR_INDICES: -<% -data_type = index.c_data_type -name = index.name -enum = "NIR_INTRINSIC_" + name.upper() -%> - -static inline ${data_type} -nir_intrinsic_${name}(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[${enum}] > 0); -% if "struct" in data_type: - ${data_type} res; - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(res)); - memcpy(&res, &instr->const_index[info->index_map[${enum}] - 1], sizeof(res)); - return res; -% else: - return (${data_type})instr->const_index[info->index_map[${enum}] - 1]; -% endif -} - -static inline void -nir_intrinsic_set_${name}(nir_intrinsic_instr *instr, ${data_type} val) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - assert(info->index_map[${enum}] > 0); -% if "struct" in data_type: -% if name == "io_semantics": - val._pad = 0; /* clear padding bits */ -% endif - STATIC_ASSERT(sizeof(instr->const_index[0]) == sizeof(val)); - memcpy(&instr->const_index[info->index_map[${enum}] - 1], &val, sizeof(val)); -% else: - instr->const_index[info->index_map[${enum}] - 1] = val; -% endif -} - -static inline bool -nir_intrinsic_has_${name}(const nir_intrinsic_instr *instr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - return info->index_map[${enum}] > 0; -} -% endfor - -#endif /* _NIR_INTRINSICS_INDICES_ */""" - -from nir_intrinsics import INTR_INDICES -from mako.template import Template -import argparse -import os - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('--outdir', required=True, - help='Directory to put the generated files in') - - args = parser.parse_args() - - path = os.path.join(args.outdir, 'nir_intrinsics_indices.h') - with open(path, 'w') as f: - f.write(Template(template).render(INTR_INDICES=INTR_INDICES)) - -if __name__ == '__main__': - main() - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_linking_helpers.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_linking_helpers.c deleted file mode 100644 index 7e18345..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_linking_helpers.c +++ /dev/null @@ -1,1718 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../util/set.h" -#include "../../util/hash_table.h" - -/* This file contains various little helpers for doing simple linking in - * NIR. Eventually, we'll probably want a full-blown varying packing - * implementation in here. Right now, it just deletes unused things. - */ - -/** - * Returns the bits in the inputs_read, or outputs_written - * bitfield corresponding to this variable. - */ -static uint64_t -get_variable_io_mask(nir_variable *var, gl_shader_stage stage) -{ - if (var->data.location < 0) - return 0; - - unsigned location = var->data.patch ? - var->data.location - VARYING_SLOT_PATCH0 : var->data.location; - - assert(var->data.mode == nir_var_shader_in || - var->data.mode == nir_var_shader_out); - assert(var->data.location >= 0); - assert(location < 64); - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - unsigned slots = glsl_count_attribute_slots(type, false); - return BITFIELD64_MASK(slots) << location; -} - -static bool -is_non_generic_patch_var(nir_variable *var) -{ - return var->data.location == VARYING_SLOT_TESS_LEVEL_INNER || - var->data.location == VARYING_SLOT_TESS_LEVEL_OUTER || - var->data.location == VARYING_SLOT_BOUNDING_BOX0 || - var->data.location == VARYING_SLOT_BOUNDING_BOX1; -} - -static uint8_t -get_num_components(nir_variable *var) -{ - if (glsl_type_is_struct_or_ifc(glsl_without_array(var->type))) - return 4; - - return glsl_get_vector_elements(glsl_without_array(var->type)); -} - -static void -tcs_add_output_reads(nir_shader *shader, uint64_t *read, uint64_t *patches_read) -{ - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_shader_out)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - for (unsigned i = 0; i < get_num_components(var); i++) { - if (var->data.patch) { - if (is_non_generic_patch_var(var)) - continue; - - patches_read[var->data.location_frac + i] |= - get_variable_io_mask(var, shader->info.stage); - } else { - read[var->data.location_frac + i] |= - get_variable_io_mask(var, shader->info.stage); - } - } - } - } - } -} - -/** - * Helper for removing unused shader I/O variables, by demoting them to global - * variables (which may then by dead code eliminated). - * - * Example usage is: - * - * progress = nir_remove_unused_io_vars(producer, nir_var_shader_out, - * read, patches_read) || - * progress; - * - * The "used" should be an array of 4 uint64_ts (probably of VARYING_BIT_*) - * representing each .location_frac used. Note that for vector variables, - * only the first channel (.location_frac) is examined for deciding if the - * variable is used! - */ -bool -nir_remove_unused_io_vars(nir_shader *shader, - nir_variable_mode mode, - uint64_t *used_by_other_stage, - uint64_t *used_by_other_stage_patches) -{ - bool progress = false; - uint64_t *used; - - assert(mode == nir_var_shader_in || mode == nir_var_shader_out); - - nir_foreach_variable_with_modes_safe(var, shader, mode) { - if (var->data.patch) - used = used_by_other_stage_patches; - else - used = used_by_other_stage; - - if (var->data.location < VARYING_SLOT_VAR0 && var->data.location >= 0) - if (shader->info.stage != MESA_SHADER_MESH || var->data.location != VARYING_SLOT_PRIMITIVE_ID) - continue; - - if (var->data.always_active_io) - continue; - - if (var->data.explicit_xfb_buffer) - continue; - - uint64_t other_stage = used[var->data.location_frac]; - - if (!(other_stage & get_variable_io_mask(var, shader->info.stage))) { - /* This one is invalid, make it a global variable instead */ - if (shader->info.stage == MESA_SHADER_MESH && - (shader->info.outputs_read & BITFIELD64_BIT(var->data.location))) - var->data.mode = nir_var_mem_shared; - else - var->data.mode = nir_var_shader_temp; - var->data.location = 0; - - progress = true; - } - } - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - if (progress) { - nir_metadata_preserve(impl, nir_metadata_dominance | - nir_metadata_block_index); - nir_fixup_deref_modes(shader); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer) -{ - assert(producer->info.stage != MESA_SHADER_FRAGMENT); - assert(consumer->info.stage != MESA_SHADER_VERTEX); - - uint64_t read[4] = { 0 }, written[4] = { 0 }; - uint64_t patches_read[4] = { 0 }, patches_written[4] = { 0 }; - - nir_foreach_shader_out_variable(var, producer) { - for (unsigned i = 0; i < get_num_components(var); i++) { - if (var->data.patch) { - if (is_non_generic_patch_var(var)) - continue; - - patches_written[var->data.location_frac + i] |= - get_variable_io_mask(var, producer->info.stage); - } else { - written[var->data.location_frac + i] |= - get_variable_io_mask(var, producer->info.stage); - } - } - } - - nir_foreach_shader_in_variable(var, consumer) { - for (unsigned i = 0; i < get_num_components(var); i++) { - if (var->data.patch) { - if (is_non_generic_patch_var(var)) - continue; - - patches_read[var->data.location_frac + i] |= - get_variable_io_mask(var, consumer->info.stage); - } else { - read[var->data.location_frac + i] |= - get_variable_io_mask(var, consumer->info.stage); - } - } - } - - /* Each TCS invocation can read data written by other TCS invocations, - * so even if the outputs are not used by the TES we must also make - * sure they are not read by the TCS before demoting them to globals. - */ - if (producer->info.stage == MESA_SHADER_TESS_CTRL) - tcs_add_output_reads(producer, read, patches_read); - - bool progress = false; - progress = nir_remove_unused_io_vars(producer, nir_var_shader_out, read, - patches_read); - - progress = nir_remove_unused_io_vars(consumer, nir_var_shader_in, written, - patches_written) || progress; - - return progress; -} - -static uint8_t -get_interp_type(nir_variable *var, const struct glsl_type *type, - bool default_to_smooth_interp) -{ - if (var->data.per_primitive) - return INTERP_MODE_NONE; - if (glsl_type_is_integer(type)) - return INTERP_MODE_FLAT; - else if (var->data.interpolation != INTERP_MODE_NONE) - return var->data.interpolation; - else if (default_to_smooth_interp) - return INTERP_MODE_SMOOTH; - else - return INTERP_MODE_NONE; -} - -#define INTERPOLATE_LOC_SAMPLE 0 -#define INTERPOLATE_LOC_CENTROID 1 -#define INTERPOLATE_LOC_CENTER 2 - -static uint8_t -get_interp_loc(nir_variable *var) -{ - if (var->data.sample) - return INTERPOLATE_LOC_SAMPLE; - else if (var->data.centroid) - return INTERPOLATE_LOC_CENTROID; - else - return INTERPOLATE_LOC_CENTER; -} - -static bool -is_packing_supported_for_type(const struct glsl_type *type) -{ - /* We ignore complex types such as arrays, matrices, structs and bitsizes - * other then 32bit. All other vector types should have been split into - * scalar variables by the lower_io_to_scalar pass. The only exception - * should be OpenGL xfb varyings. - * TODO: add support for more complex types? - */ - return glsl_type_is_scalar(type) && glsl_type_is_32bit(type); -} - -struct assigned_comps -{ - uint8_t comps; - uint8_t interp_type; - uint8_t interp_loc; - bool is_32bit; - bool is_mediump; - bool is_per_primitive; -}; - -/* Packing arrays and dual slot varyings is difficult so to avoid complex - * algorithms this function just assigns them their existing location for now. - * TODO: allow better packing of complex types. - */ -static void -get_unmoveable_components_masks(nir_shader *shader, - nir_variable_mode mode, - struct assigned_comps *comps, - gl_shader_stage stage, - bool default_to_smooth_interp) -{ - nir_foreach_variable_with_modes_safe(var, shader, mode) { - assert(var->data.location >= 0); - - /* Only remap things that aren't built-ins. */ - if (var->data.location >= VARYING_SLOT_VAR0 && - var->data.location - VARYING_SLOT_VAR0 < MAX_VARYINGS_INCL_PATCH) { - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - /* If we can pack this varying then don't mark the components as - * used. - */ - if (is_packing_supported_for_type(type) && - !var->data.always_active_io) - continue; - - unsigned location = var->data.location - VARYING_SLOT_VAR0; - - unsigned elements = - glsl_type_is_vector_or_scalar(glsl_without_array(type)) ? - glsl_get_vector_elements(glsl_without_array(type)) : 4; - - bool dual_slot = glsl_type_is_dual_slot(glsl_without_array(type)); - unsigned slots = glsl_count_attribute_slots(type, false); - unsigned dmul = glsl_type_is_64bit(glsl_without_array(type)) ? 2 : 1; - unsigned comps_slot2 = 0; - for (unsigned i = 0; i < slots; i++) { - if (dual_slot) { - if (i & 1) { - comps[location + i].comps |= ((1 << comps_slot2) - 1); - } else { - unsigned num_comps = 4 - var->data.location_frac; - comps_slot2 = (elements * dmul) - num_comps; - - /* Assume ARB_enhanced_layouts packing rules for doubles */ - assert(var->data.location_frac == 0 || - var->data.location_frac == 2); - assert(comps_slot2 <= 4); - - comps[location + i].comps |= - ((1 << num_comps) - 1) << var->data.location_frac; - } - } else { - comps[location + i].comps |= - ((1 << (elements * dmul)) - 1) << var->data.location_frac; - } - - comps[location + i].interp_type = - get_interp_type(var, type, default_to_smooth_interp); - comps[location + i].interp_loc = get_interp_loc(var); - comps[location + i].is_32bit = - glsl_type_is_32bit(glsl_without_array(type)); - comps[location + i].is_mediump = - var->data.precision == GLSL_PRECISION_MEDIUM || - var->data.precision == GLSL_PRECISION_LOW; - comps[location + i].is_per_primitive = var->data.per_primitive; - } - } - } -} - -struct varying_loc -{ - uint8_t component; - uint32_t location; -}; - -static void -mark_all_used_slots(nir_variable *var, uint64_t *slots_used, - uint64_t slots_used_mask, unsigned num_slots) -{ - unsigned loc_offset = var->data.patch ? VARYING_SLOT_PATCH0 : 0; - - slots_used[var->data.patch ? 1 : 0] |= slots_used_mask & - BITFIELD64_RANGE(var->data.location - loc_offset, num_slots); -} - -static void -mark_used_slot(nir_variable *var, uint64_t *slots_used, unsigned offset) -{ - unsigned loc_offset = var->data.patch ? VARYING_SLOT_PATCH0 : 0; - - slots_used[var->data.patch ? 1 : 0] |= - BITFIELD64_BIT(var->data.location - loc_offset + offset); -} - -static void -remap_slots_and_components(nir_shader *shader, nir_variable_mode mode, - struct varying_loc (*remap)[4], - uint64_t *slots_used, uint64_t *out_slots_read, - uint32_t *p_slots_used, uint32_t *p_out_slots_read) - { - const gl_shader_stage stage = shader->info.stage; - uint64_t out_slots_read_tmp[2] = {0}; - uint64_t slots_used_tmp[2] = {0}; - - /* We don't touch builtins so just copy the bitmask */ - slots_used_tmp[0] = *slots_used & BITFIELD64_RANGE(0, VARYING_SLOT_VAR0); - - nir_foreach_variable_with_modes(var, shader, mode) { - assert(var->data.location >= 0); - - /* Only remap things that aren't built-ins */ - if (var->data.location >= VARYING_SLOT_VAR0 && - var->data.location - VARYING_SLOT_VAR0 < MAX_VARYINGS_INCL_PATCH) { - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - unsigned num_slots = glsl_count_attribute_slots(type, false); - bool used_across_stages = false; - bool outputs_read = false; - - unsigned location = var->data.location - VARYING_SLOT_VAR0; - struct varying_loc *new_loc = &remap[location][var->data.location_frac]; - - unsigned loc_offset = var->data.patch ? VARYING_SLOT_PATCH0 : 0; - uint64_t used = var->data.patch ? *p_slots_used : *slots_used; - uint64_t outs_used = - var->data.patch ? *p_out_slots_read : *out_slots_read; - uint64_t slots = - BITFIELD64_RANGE(var->data.location - loc_offset, num_slots); - - if (slots & used) - used_across_stages = true; - - if (slots & outs_used) - outputs_read = true; - - if (new_loc->location) { - var->data.location = new_loc->location; - var->data.location_frac = new_loc->component; - } - - if (var->data.always_active_io) { - /* We can't apply link time optimisations (specifically array - * splitting) to these so we need to copy the existing mask - * otherwise we will mess up the mask for things like partially - * marked arrays. - */ - if (used_across_stages) - mark_all_used_slots(var, slots_used_tmp, used, num_slots); - - if (outputs_read) { - mark_all_used_slots(var, out_slots_read_tmp, outs_used, - num_slots); - } - } else { - for (unsigned i = 0; i < num_slots; i++) { - if (used_across_stages) - mark_used_slot(var, slots_used_tmp, i); - - if (outputs_read) - mark_used_slot(var, out_slots_read_tmp, i); - } - } - } - } - - *slots_used = slots_used_tmp[0]; - *out_slots_read = out_slots_read_tmp[0]; - *p_slots_used = slots_used_tmp[1]; - *p_out_slots_read = out_slots_read_tmp[1]; -} - -struct varying_component { - nir_variable *var; - uint8_t interp_type; - uint8_t interp_loc; - bool is_32bit; - bool is_patch; - bool is_per_primitive; - bool is_mediump; - bool is_intra_stage_only; - bool initialised; -}; - -static int -cmp_varying_component(const void *comp1_v, const void *comp2_v) -{ - struct varying_component *comp1 = (struct varying_component *) comp1_v; - struct varying_component *comp2 = (struct varying_component *) comp2_v; - - /* We want patches to be order at the end of the array */ - if (comp1->is_patch != comp2->is_patch) - return comp1->is_patch ? 1 : -1; - - /* Sort per-primitive outputs after per-vertex ones to allow - * better compaction when they are mixed in the shader's source. - */ - if (comp1->is_per_primitive != comp2->is_per_primitive) - return comp1->is_per_primitive ? 1 : -1; - - /* We want to try to group together TCS outputs that are only read by other - * TCS invocations and not consumed by the follow stage. - */ - if (comp1->is_intra_stage_only != comp2->is_intra_stage_only) - return comp1->is_intra_stage_only ? 1 : -1; - - /* Group mediump varyings together. */ - if (comp1->is_mediump != comp2->is_mediump) - return comp1->is_mediump ? 1 : -1; - - /* We can only pack varyings with matching interpolation types so group - * them together. - */ - if (comp1->interp_type != comp2->interp_type) - return comp1->interp_type - comp2->interp_type; - - /* Interpolation loc must match also. */ - if (comp1->interp_loc != comp2->interp_loc) - return comp1->interp_loc - comp2->interp_loc; - - /* If everything else matches just use the original location to sort */ - const struct nir_variable_data *const data1 = &comp1->var->data; - const struct nir_variable_data *const data2 = &comp2->var->data; - if (data1->location != data2->location) - return data1->location - data2->location; - return (int)data1->location_frac - (int)data2->location_frac; -} - -static void -gather_varying_component_info(nir_shader *producer, nir_shader *consumer, - struct varying_component **varying_comp_info, - unsigned *varying_comp_info_size, - bool default_to_smooth_interp) -{ - unsigned store_varying_info_idx[MAX_VARYINGS_INCL_PATCH][4] = {{0}}; - unsigned num_of_comps_to_pack = 0; - - /* Count the number of varying that can be packed and create a mapping - * of those varyings to the array we will pass to qsort. - */ - nir_foreach_shader_out_variable(var, producer) { - - /* Only remap things that aren't builtins. */ - if (var->data.location >= VARYING_SLOT_VAR0 && - var->data.location - VARYING_SLOT_VAR0 < MAX_VARYINGS_INCL_PATCH) { - - /* We can't repack xfb varyings. */ - if (var->data.always_active_io) - continue; - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, producer->info.stage) || var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - if (!is_packing_supported_for_type(type)) - continue; - - unsigned loc = var->data.location - VARYING_SLOT_VAR0; - store_varying_info_idx[loc][var->data.location_frac] = - ++num_of_comps_to_pack; - } - } - - *varying_comp_info_size = num_of_comps_to_pack; - *varying_comp_info = rzalloc_array(NULL, struct varying_component, - num_of_comps_to_pack); - - nir_function_impl *impl = nir_shader_get_entrypoint(consumer); - - /* Walk over the shader and populate the varying component info array */ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_deref && - intr->intrinsic != nir_intrinsic_interp_deref_at_centroid && - intr->intrinsic != nir_intrinsic_interp_deref_at_sample && - intr->intrinsic != nir_intrinsic_interp_deref_at_offset && - intr->intrinsic != nir_intrinsic_interp_deref_at_vertex) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is(deref, nir_var_shader_in)) - continue; - - /* We only remap things that aren't builtins. */ - nir_variable *in_var = nir_deref_instr_get_variable(deref); - if (in_var->data.location < VARYING_SLOT_VAR0) - continue; - - unsigned location = in_var->data.location - VARYING_SLOT_VAR0; - if (location >= MAX_VARYINGS_INCL_PATCH) - continue; - - unsigned var_info_idx = - store_varying_info_idx[location][in_var->data.location_frac]; - if (!var_info_idx) - continue; - - struct varying_component *vc_info = - &(*varying_comp_info)[var_info_idx-1]; - - if (!vc_info->initialised) { - const struct glsl_type *type = in_var->type; - if (nir_is_arrayed_io(in_var, consumer->info.stage) || - in_var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - vc_info->var = in_var; - vc_info->interp_type = - get_interp_type(in_var, type, default_to_smooth_interp); - vc_info->interp_loc = get_interp_loc(in_var); - vc_info->is_32bit = glsl_type_is_32bit(type); - vc_info->is_patch = in_var->data.patch; - vc_info->is_per_primitive = in_var->data.per_primitive; - vc_info->is_mediump = !producer->options->linker_ignore_precision && - (in_var->data.precision == GLSL_PRECISION_MEDIUM || - in_var->data.precision == GLSL_PRECISION_LOW); - vc_info->is_intra_stage_only = false; - vc_info->initialised = true; - } - } - } - - /* Walk over the shader and populate the varying component info array - * for varyings which are read by other TCS instances but are not consumed - * by the TES. - */ - if (producer->info.stage == MESA_SHADER_TESS_CTRL) { - impl = nir_shader_get_entrypoint(producer); - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is(deref, nir_var_shader_out)) - continue; - - /* We only remap things that aren't builtins. */ - nir_variable *out_var = nir_deref_instr_get_variable(deref); - if (out_var->data.location < VARYING_SLOT_VAR0) - continue; - - unsigned location = out_var->data.location - VARYING_SLOT_VAR0; - if (location >= MAX_VARYINGS_INCL_PATCH) - continue; - - unsigned var_info_idx = - store_varying_info_idx[location][out_var->data.location_frac]; - if (!var_info_idx) { - /* Something went wrong, the shader interfaces didn't match, so - * abandon packing. This can happen for example when the - * inputs are scalars but the outputs are struct members. - */ - *varying_comp_info_size = 0; - break; - } - - struct varying_component *vc_info = - &(*varying_comp_info)[var_info_idx-1]; - - if (!vc_info->initialised) { - const struct glsl_type *type = out_var->type; - if (nir_is_arrayed_io(out_var, producer->info.stage)) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - vc_info->var = out_var; - vc_info->interp_type = - get_interp_type(out_var, type, default_to_smooth_interp); - vc_info->interp_loc = get_interp_loc(out_var); - vc_info->is_32bit = glsl_type_is_32bit(type); - vc_info->is_patch = out_var->data.patch; - vc_info->is_per_primitive = out_var->data.per_primitive; - vc_info->is_mediump = !producer->options->linker_ignore_precision && - (out_var->data.precision == GLSL_PRECISION_MEDIUM || - out_var->data.precision == GLSL_PRECISION_LOW); - vc_info->is_intra_stage_only = true; - vc_info->initialised = true; - } - } - } - } - - for (unsigned i = 0; i < *varying_comp_info_size; i++ ) { - struct varying_component *vc_info = &(*varying_comp_info)[i]; - if (!vc_info->initialised) { - /* Something went wrong, the shader interfaces didn't match, so - * abandon packing. This can happen for example when the outputs are - * scalars but the inputs are struct members. - */ - *varying_comp_info_size = 0; - break; - } - } -} - -static bool -allow_pack_interp_type(nir_pack_varying_options options, int type) -{ - int sel; - - switch (type) { - case INTERP_MODE_NONE: - sel = nir_pack_varying_interp_mode_none; - break; - case INTERP_MODE_SMOOTH: - sel = nir_pack_varying_interp_mode_smooth; - break; - case INTERP_MODE_FLAT: - sel = nir_pack_varying_interp_mode_flat; - break; - case INTERP_MODE_NOPERSPECTIVE: - sel = nir_pack_varying_interp_mode_noperspective; - break; - default: - return false; - } - - return options & sel; -} - -static bool -allow_pack_interp_loc(nir_pack_varying_options options, int loc) -{ - int sel; - - switch (loc) { - case INTERPOLATE_LOC_SAMPLE: - sel = nir_pack_varying_interp_loc_sample; - break; - case INTERPOLATE_LOC_CENTROID: - sel = nir_pack_varying_interp_loc_centroid; - break; - case INTERPOLATE_LOC_CENTER: - sel = nir_pack_varying_interp_loc_center; - break; - default: - return false; - } - - return options & sel; -} - -static void -assign_remap_locations(struct varying_loc (*remap)[4], - struct assigned_comps *assigned_comps, - struct varying_component *info, - unsigned *cursor, unsigned *comp, - unsigned max_location, - nir_pack_varying_options options) -{ - unsigned tmp_cursor = *cursor; - unsigned tmp_comp = *comp; - - for (; tmp_cursor < max_location; tmp_cursor++) { - - if (assigned_comps[tmp_cursor].comps) { - /* Don't pack per-primitive and per-vertex varyings together. */ - if (assigned_comps[tmp_cursor].is_per_primitive != info->is_per_primitive) { - tmp_comp = 0; - continue; - } - - /* We can only pack varyings with matching precision. */ - if (assigned_comps[tmp_cursor].is_mediump != info->is_mediump) { - tmp_comp = 0; - continue; - } - - /* We can only pack varyings with matching interpolation type - * if driver does not support it. - */ - if (assigned_comps[tmp_cursor].interp_type != info->interp_type && - (!allow_pack_interp_type(options, assigned_comps[tmp_cursor].interp_type) || - !allow_pack_interp_type(options, info->interp_type))) { - tmp_comp = 0; - continue; - } - - /* We can only pack varyings with matching interpolation location - * if driver does not support it. - */ - if (assigned_comps[tmp_cursor].interp_loc != info->interp_loc && - (!allow_pack_interp_loc(options, assigned_comps[tmp_cursor].interp_loc) || - !allow_pack_interp_loc(options, info->interp_loc))) { - tmp_comp = 0; - continue; - } - - /* We can only pack varyings with matching types, and the current - * algorithm only supports packing 32-bit. - */ - if (!assigned_comps[tmp_cursor].is_32bit) { - tmp_comp = 0; - continue; - } - - while (tmp_comp < 4 && - (assigned_comps[tmp_cursor].comps & (1 << tmp_comp))) { - tmp_comp++; - } - } - - if (tmp_comp == 4) { - tmp_comp = 0; - continue; - } - - unsigned location = info->var->data.location - VARYING_SLOT_VAR0; - - /* Once we have assigned a location mark it as used */ - assigned_comps[tmp_cursor].comps |= (1 << tmp_comp); - assigned_comps[tmp_cursor].interp_type = info->interp_type; - assigned_comps[tmp_cursor].interp_loc = info->interp_loc; - assigned_comps[tmp_cursor].is_32bit = info->is_32bit; - assigned_comps[tmp_cursor].is_mediump = info->is_mediump; - assigned_comps[tmp_cursor].is_per_primitive = info->is_per_primitive; - - /* Assign remap location */ - remap[location][info->var->data.location_frac].component = tmp_comp++; - remap[location][info->var->data.location_frac].location = - tmp_cursor + VARYING_SLOT_VAR0; - - break; - } - - *cursor = tmp_cursor; - *comp = tmp_comp; -} - -/* If there are empty components in the slot compact the remaining components - * as close to component 0 as possible. This will make it easier to fill the - * empty components with components from a different slot in a following pass. - */ -static void -compact_components(nir_shader *producer, nir_shader *consumer, - struct assigned_comps *assigned_comps, - bool default_to_smooth_interp) -{ - struct varying_loc remap[MAX_VARYINGS_INCL_PATCH][4] = {{{0}, {0}}}; - struct varying_component *varying_comp_info; - unsigned varying_comp_info_size; - - /* Gather varying component info */ - gather_varying_component_info(producer, consumer, &varying_comp_info, - &varying_comp_info_size, - default_to_smooth_interp); - - /* Sort varying components. */ - qsort(varying_comp_info, varying_comp_info_size, - sizeof(struct varying_component), cmp_varying_component); - - nir_pack_varying_options options = consumer->options->pack_varying_options; - - unsigned cursor = 0; - unsigned comp = 0; - - /* Set the remap array based on the sorted components */ - for (unsigned i = 0; i < varying_comp_info_size; i++ ) { - struct varying_component *info = &varying_comp_info[i]; - - assert(info->is_patch || cursor < MAX_VARYING); - if (info->is_patch) { - /* The list should be sorted with all non-patch inputs first followed - * by patch inputs. When we hit our first patch input, we need to - * reset the cursor to MAX_VARYING so we put them in the right slot. - */ - if (cursor < MAX_VARYING) { - cursor = MAX_VARYING; - comp = 0; - } - - assign_remap_locations(remap, assigned_comps, info, - &cursor, &comp, MAX_VARYINGS_INCL_PATCH, - options); - } else { - assign_remap_locations(remap, assigned_comps, info, - &cursor, &comp, MAX_VARYING, - options); - - /* Check if we failed to assign a remap location. This can happen if - * for example there are a bunch of unmovable components with - * mismatching interpolation types causing us to skip over locations - * that would have been useful for packing later components. - * The solution is to iterate over the locations again (this should - * happen very rarely in practice). - */ - if (cursor == MAX_VARYING) { - cursor = 0; - comp = 0; - assign_remap_locations(remap, assigned_comps, info, - &cursor, &comp, MAX_VARYING, - options); - } - } - } - - ralloc_free(varying_comp_info); - - uint64_t zero = 0; - uint32_t zero32 = 0; - remap_slots_and_components(consumer, nir_var_shader_in, remap, - &consumer->info.inputs_read, &zero, - &consumer->info.patch_inputs_read, &zero32); - remap_slots_and_components(producer, nir_var_shader_out, remap, - &producer->info.outputs_written, - &producer->info.outputs_read, - &producer->info.patch_outputs_written, - &producer->info.patch_outputs_read); -} - -/* We assume that this has been called more-or-less directly after - * remove_unused_varyings. At this point, all of the varyings that we - * aren't going to be using have been completely removed and the - * inputs_read and outputs_written fields in nir_shader_info reflect - * this. Therefore, the total set of valid slots is the OR of the two - * sets of varyings; this accounts for varyings which one side may need - * to read/write even if the other doesn't. This can happen if, for - * instance, an array is used indirectly from one side causing it to be - * unsplittable but directly from the other. - */ -void -nir_compact_varyings(nir_shader *producer, nir_shader *consumer, - bool default_to_smooth_interp) -{ - assert(producer->info.stage != MESA_SHADER_FRAGMENT); - assert(consumer->info.stage != MESA_SHADER_VERTEX); - - struct assigned_comps assigned_comps[MAX_VARYINGS_INCL_PATCH] = {{0}}; - - get_unmoveable_components_masks(producer, nir_var_shader_out, - assigned_comps, - producer->info.stage, - default_to_smooth_interp); - get_unmoveable_components_masks(consumer, nir_var_shader_in, - assigned_comps, - consumer->info.stage, - default_to_smooth_interp); - - compact_components(producer, consumer, assigned_comps, - default_to_smooth_interp); -} - -/* - * Mark XFB varyings as always_active_io in the consumer so the linking opts - * don't touch them. - */ -void -nir_link_xfb_varyings(nir_shader *producer, nir_shader *consumer) -{ - nir_variable *input_vars[MAX_VARYING][4] = { 0 }; - - nir_foreach_shader_in_variable(var, consumer) { - if (var->data.location >= VARYING_SLOT_VAR0 && - var->data.location - VARYING_SLOT_VAR0 < MAX_VARYING) { - - unsigned location = var->data.location - VARYING_SLOT_VAR0; - input_vars[location][var->data.location_frac] = var; - } - } - - nir_foreach_shader_out_variable(var, producer) { - if (var->data.location >= VARYING_SLOT_VAR0 && - var->data.location - VARYING_SLOT_VAR0 < MAX_VARYING) { - - if (!var->data.always_active_io) - continue; - - unsigned location = var->data.location - VARYING_SLOT_VAR0; - if (input_vars[location][var->data.location_frac]) { - input_vars[location][var->data.location_frac]->data.always_active_io = true; - } - } - } -} - -static bool -does_varying_match(nir_variable *out_var, nir_variable *in_var) -{ - return in_var->data.location == out_var->data.location && - in_var->data.location_frac == out_var->data.location_frac; -} - -static nir_variable * -get_matching_input_var(nir_shader *consumer, nir_variable *out_var) -{ - nir_foreach_shader_in_variable(var, consumer) { - if (does_varying_match(out_var, var)) - return var; - } - - return NULL; -} - -static bool -can_replace_varying(nir_variable *out_var) -{ - /* Skip types that require more complex handling. - * TODO: add support for these types. - */ - if (glsl_type_is_array(out_var->type) || - glsl_type_is_dual_slot(out_var->type) || - glsl_type_is_matrix(out_var->type) || - glsl_type_is_struct_or_ifc(out_var->type)) - return false; - - /* Limit this pass to scalars for now to keep things simple. Most varyings - * should have been lowered to scalars at this point anyway. - */ - if (!glsl_type_is_scalar(out_var->type)) - return false; - - if (out_var->data.location < VARYING_SLOT_VAR0 || - out_var->data.location - VARYING_SLOT_VAR0 >= MAX_VARYING) - return false; - - return true; -} - -static bool -replace_varying_input_by_constant_load(nir_shader *shader, - nir_intrinsic_instr *store_intr) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_variable *out_var = - nir_deref_instr_get_variable(nir_src_as_deref(store_intr->src[0])); - - bool progress = false; - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *in_deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is(in_deref, nir_var_shader_in)) - continue; - - nir_variable *in_var = nir_deref_instr_get_variable(in_deref); - - if (!does_varying_match(out_var, in_var)) - continue; - - b.cursor = nir_before_instr(instr); - - nir_load_const_instr *out_const = - nir_instr_as_load_const(store_intr->src[1].ssa->parent_instr); - - /* Add new const to replace the input */ - nir_ssa_def *nconst = nir_build_imm(&b, store_intr->num_components, - intr->dest.ssa.bit_size, - out_const->value); - - nir_ssa_def_rewrite_uses(&intr->dest.ssa, nconst); - - progress = true; - } - } - - return progress; -} - -static bool -replace_duplicate_input(nir_shader *shader, nir_variable *input_var, - nir_intrinsic_instr *dup_store_intr) -{ - assert(input_var); - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_variable *dup_out_var = - nir_deref_instr_get_variable(nir_src_as_deref(dup_store_intr->src[0])); - - bool progress = false; - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *in_deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is(in_deref, nir_var_shader_in)) - continue; - - nir_variable *in_var = nir_deref_instr_get_variable(in_deref); - - if (!does_varying_match(dup_out_var, in_var) || - in_var->data.interpolation != input_var->data.interpolation || - get_interp_loc(in_var) != get_interp_loc(input_var)) - continue; - - b.cursor = nir_before_instr(instr); - - nir_ssa_def *load = nir_load_var(&b, input_var); - nir_ssa_def_rewrite_uses(&intr->dest.ssa, load); - - progress = true; - } - } - - return progress; -} - -static bool -is_direct_uniform_load(nir_ssa_def *def, nir_ssa_scalar *s) -{ - /* def is sure to be scalar as can_replace_varying() filter out vector case. */ - assert(def->num_components == 1); - - /* Uniform load may hide behind some move instruction for converting - * vector to scalar: - * - * vec1 32 ssa_1 = deref_var &color (uniform vec3) - * vec3 32 ssa_2 = intrinsic load_deref (ssa_1) (0) - * vec1 32 ssa_3 = mov ssa_2.x - * vec1 32 ssa_4 = deref_var &color_out (shader_out float) - * intrinsic store_deref (ssa_4, ssa_3) (1, 0) - */ - *s = nir_ssa_scalar_resolved(def, 0); - - nir_ssa_def *ssa = s->def; - if (ssa->parent_instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(ssa->parent_instr); - if (intr->intrinsic != nir_intrinsic_load_deref) - return false; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - /* TODO: support nir_var_mem_ubo. */ - if (!nir_deref_mode_is(deref, nir_var_uniform)) - return false; - - /* Does not support indirect uniform load. */ - return !nir_deref_instr_has_indirect(deref); -} - -static nir_variable * -get_uniform_var_in_consumer(nir_shader *consumer, - nir_variable *var_in_producer) -{ - /* Find if uniform already exists in consumer. */ - nir_variable *new_var = NULL; - nir_foreach_uniform_variable(v, consumer) { - if (!strcmp(var_in_producer->name, v->name)) { - new_var = v; - break; - } - } - - /* Create a variable if not exist. */ - if (!new_var) { - new_var = nir_variable_clone(var_in_producer, consumer); - nir_shader_add_variable(consumer, new_var); - } - - return new_var; -} - -static nir_deref_instr * -clone_deref_instr(nir_builder *b, nir_variable *var, nir_deref_instr *deref) -{ - if (deref->deref_type == nir_deref_type_var) - return nir_build_deref_var(b, var); - - nir_deref_instr *parent_deref = nir_deref_instr_parent(deref); - nir_deref_instr *parent = clone_deref_instr(b, var, parent_deref); - - /* Build array and struct deref instruction. - * "deref" instr is sure to be direct (see is_direct_uniform_load()). - */ - switch (deref->deref_type) { - case nir_deref_type_array: { - nir_load_const_instr *index = - nir_instr_as_load_const(deref->arr.index.ssa->parent_instr); - return nir_build_deref_array_imm(b, parent, index->value->i64); - } - case nir_deref_type_ptr_as_array: { - nir_load_const_instr *index = - nir_instr_as_load_const(deref->arr.index.ssa->parent_instr); - nir_ssa_def *ssa = nir_imm_intN_t(b, index->value->i64, - parent->dest.ssa.bit_size); - return nir_build_deref_ptr_as_array(b, parent, ssa); - } - case nir_deref_type_struct: - return nir_build_deref_struct(b, parent, deref->strct.index); - default: - unreachable("invalid type"); - return NULL; - } -} - -static bool -replace_varying_input_by_uniform_load(nir_shader *shader, - nir_intrinsic_instr *store_intr, - nir_ssa_scalar *scalar) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_variable *out_var = - nir_deref_instr_get_variable(nir_src_as_deref(store_intr->src[0])); - - nir_intrinsic_instr *load = nir_instr_as_intrinsic(scalar->def->parent_instr); - nir_deref_instr *deref = nir_src_as_deref(load->src[0]); - nir_variable *uni_var = nir_deref_instr_get_variable(deref); - uni_var = get_uniform_var_in_consumer(shader, uni_var); - - bool progress = false; - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *in_deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is(in_deref, nir_var_shader_in)) - continue; - - nir_variable *in_var = nir_deref_instr_get_variable(in_deref); - - if (!does_varying_match(out_var, in_var)) - continue; - - b.cursor = nir_before_instr(instr); - - /* Clone instructions start from deref load to variable deref. */ - nir_deref_instr *uni_deref = clone_deref_instr(&b, uni_var, deref); - nir_ssa_def *uni_def = nir_load_deref(&b, uni_deref); - - /* Add a vector to scalar move if uniform is a vector. */ - if (uni_def->num_components > 1) { - nir_alu_src src = {0}; - src.src = nir_src_for_ssa(uni_def); - src.swizzle[0] = scalar->comp; - uni_def = nir_mov_alu(&b, src, 1); - } - - /* Replace load input with load uniform. */ - nir_ssa_def_rewrite_uses(&intr->dest.ssa, uni_def); - - progress = true; - } - } - - return progress; -} - -/* The GLSL ES 3.20 spec says: - * - * "The precision of a vertex output does not need to match the precision of - * the corresponding fragment input. The minimum precision at which vertex - * outputs are interpolated is the minimum of the vertex output precision and - * the fragment input precision, with the exception that for highp, - * implementations do not have to support full IEEE 754 precision." (9.1 "Input - * Output Matching by Name in Linked Programs") - * - * To implement this, when linking shaders we will take the minimum precision - * qualifier (allowing drivers to interpolate at lower precision). For - * input/output between non-fragment stages (e.g. VERTEX to GEOMETRY), the spec - * requires we use the *last* specified precision if there is a conflict. - * - * Precisions are ordered as (NONE, HIGH, MEDIUM, LOW). If either precision is - * NONE, we'll return the other precision, since there is no conflict. - * Otherwise for fragment interpolation, we'll pick the smallest of (HIGH, - * MEDIUM, LOW) by picking the maximum of the raw values - note the ordering is - * "backwards". For non-fragment stages, we'll pick the latter precision to - * comply with the spec. (Note that the order matters.) - * - * For streamout, "Variables declared with lowp or mediump precision are - * promoted to highp before being written." (12.2 "Transform Feedback", p. 341 - * of OpenGL ES 3.2 specification). So drivers should promote them - * the transform feedback memory store, but not the output store. - */ - -static unsigned -nir_link_precision(unsigned producer, unsigned consumer, bool fs) -{ - if (producer == GLSL_PRECISION_NONE) - return consumer; - else if (consumer == GLSL_PRECISION_NONE) - return producer; - else - return fs ? MAX2(producer, consumer) : consumer; -} - -static nir_variable * -find_consumer_variable(const nir_shader *consumer, - const nir_variable *producer_var) -{ - nir_foreach_variable_with_modes(var, consumer, nir_var_shader_in) { - if (var->data.location == producer_var->data.location && - var->data.location_frac == producer_var->data.location_frac) - return var; - } - return NULL; -} - -void -nir_link_varying_precision(nir_shader *producer, nir_shader *consumer) -{ - bool frag = consumer->info.stage == MESA_SHADER_FRAGMENT; - - nir_foreach_shader_out_variable(producer_var, producer) { - /* Skip if the slot is not assigned */ - if (producer_var->data.location < 0) - continue; - - nir_variable *consumer_var = find_consumer_variable(consumer, - producer_var); - - /* Skip if the variable will be eliminated */ - if (!consumer_var) - continue; - - /* Now we have a pair of variables. Let's pick the smaller precision. */ - unsigned precision_1 = producer_var->data.precision; - unsigned precision_2 = consumer_var->data.precision; - unsigned minimum = nir_link_precision(precision_1, precision_2, frag); - - /* Propagate the new precision */ - producer_var->data.precision = consumer_var->data.precision = minimum; - } -} - -bool -nir_link_opt_varyings(nir_shader *producer, nir_shader *consumer) -{ - /* TODO: Add support for more shader stage combinations */ - if (consumer->info.stage != MESA_SHADER_FRAGMENT || - (producer->info.stage != MESA_SHADER_VERTEX && - producer->info.stage != MESA_SHADER_TESS_EVAL)) - return false; - - bool progress = false; - - nir_function_impl *impl = nir_shader_get_entrypoint(producer); - - struct hash_table *varying_values = _mesa_pointer_hash_table_create(NULL); - - /* If we find a store in the last block of the producer we can be sure this - * is the only possible value for this output. - */ - nir_block *last_block = nir_impl_last_block(impl); - nir_foreach_instr_reverse(instr, last_block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *out_deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is(out_deref, nir_var_shader_out)) - continue; - - nir_variable *out_var = nir_deref_instr_get_variable(out_deref); - if (!can_replace_varying(out_var)) - continue; - - nir_ssa_def *ssa = intr->src[1].ssa; - if (ssa->parent_instr->type == nir_instr_type_load_const) { - progress |= replace_varying_input_by_constant_load(consumer, intr); - continue; - } - - nir_ssa_scalar uni_scalar; - if (is_direct_uniform_load(ssa, &uni_scalar)) { - if (consumer->options->lower_varying_from_uniform) { - progress |= replace_varying_input_by_uniform_load(consumer, intr, - &uni_scalar); - continue; - } else { - nir_variable *in_var = get_matching_input_var(consumer, out_var); - /* The varying is loaded from same uniform, so no need to do any - * interpolation. Mark it as flat explicitly. - */ - if (!consumer->options->no_integers && - in_var && in_var->data.interpolation <= INTERP_MODE_NOPERSPECTIVE) { - in_var->data.interpolation = INTERP_MODE_FLAT; - out_var->data.interpolation = INTERP_MODE_FLAT; - } - } - } - - struct hash_entry *entry = _mesa_hash_table_search(varying_values, ssa); - if (entry) { - progress |= replace_duplicate_input(consumer, - (nir_variable *) entry->data, - intr); - } else { - nir_variable *in_var = get_matching_input_var(consumer, out_var); - if (in_var) { - _mesa_hash_table_insert(varying_values, ssa, in_var); - } - } - } - - _mesa_hash_table_destroy(varying_values, NULL); - - return progress; -} - -/* TODO any better helper somewhere to sort a list? */ - -static void -insert_sorted(struct exec_list *var_list, nir_variable *new_var) -{ - nir_foreach_variable_in_list(var, var_list) { - /* Use the `per_primitive` bool to sort per-primitive variables - * to the end of the list, so they get the last driver locations - * by nir_assign_io_var_locations. - * - * This is done because AMD HW requires that per-primitive outputs - * are the last params. - * In the future we can add an option for this, if needed by other HW. - */ - if (new_var->data.per_primitive < var->data.per_primitive || - (new_var->data.per_primitive == var->data.per_primitive && - (var->data.location > new_var->data.location || - (var->data.location == new_var->data.location && - var->data.location_frac > new_var->data.location_frac)))) { - exec_node_insert_node_before(&var->node, &new_var->node); - return; - } - } - exec_list_push_tail(var_list, &new_var->node); -} - -static void -sort_varyings(nir_shader *shader, nir_variable_mode mode, - struct exec_list *sorted_list) -{ - exec_list_make_empty(sorted_list); - nir_foreach_variable_with_modes_safe(var, shader, mode) { - exec_node_remove(&var->node); - insert_sorted(sorted_list, var); - } -} - -void -nir_assign_io_var_locations(nir_shader *shader, nir_variable_mode mode, - unsigned *size, gl_shader_stage stage) -{ - unsigned location = 0; - unsigned assigned_locations[VARYING_SLOT_TESS_MAX]; - uint64_t processed_locs[2] = {0}; - - struct exec_list io_vars; - sort_varyings(shader, mode, &io_vars); - - int ASSERTED last_loc = 0; - bool ASSERTED last_per_prim = false; - bool last_partial = false; - nir_foreach_variable_in_list(var, &io_vars) { - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, stage)) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - int base; - if (var->data.mode == nir_var_shader_in && stage == MESA_SHADER_VERTEX) - base = VERT_ATTRIB_GENERIC0; - else if (var->data.mode == nir_var_shader_out && - stage == MESA_SHADER_FRAGMENT) - base = FRAG_RESULT_DATA0; - else - base = VARYING_SLOT_VAR0; - - unsigned var_size, driver_size; - if (var->data.compact) { - /* If we are inside a partial compact, - * don't allow another compact to be in this slot - * if it starts at component 0. - */ - if (last_partial && var->data.location_frac == 0) { - location++; - } - - /* compact variables must be arrays of scalars */ - assert(!var->data.per_view); - assert(glsl_type_is_array(type)); - assert(glsl_type_is_scalar(glsl_get_array_element(type))); - unsigned start = 4 * location + var->data.location_frac; - unsigned end = start + glsl_get_length(type); - var_size = driver_size = end / 4 - location; - last_partial = end % 4 != 0; - } else { - /* Compact variables bypass the normal varying compacting pass, - * which means they cannot be in the same vec4 slot as a normal - * variable. If part of the current slot is taken up by a compact - * variable, we need to go to the next one. - */ - if (last_partial) { - location++; - last_partial = false; - } - - /* per-view variables have an extra array dimension, which is ignored - * when counting user-facing slots (var->data.location), but *not* - * with driver slots (var->data.driver_location). That is, each user - * slot maps to multiple driver slots. - */ - driver_size = glsl_count_attribute_slots(type, false); - if (var->data.per_view) { - assert(glsl_type_is_array(type)); - var_size = - glsl_count_attribute_slots(glsl_get_array_element(type), false); - } else { - var_size = driver_size; - } - } - - /* Builtins don't allow component packing so we only need to worry about - * user defined varyings sharing the same location. - */ - bool processed = false; - if (var->data.location >= base) { - unsigned glsl_location = var->data.location - base; - - for (unsigned i = 0; i < var_size; i++) { - if (processed_locs[var->data.index] & - ((uint64_t)1 << (glsl_location + i))) - processed = true; - else - processed_locs[var->data.index] |= - ((uint64_t)1 << (glsl_location + i)); - } - } - - /* Because component packing allows varyings to share the same location - * we may have already have processed this location. - */ - if (processed) { - /* TODO handle overlapping per-view variables */ - assert(!var->data.per_view); - unsigned driver_location = assigned_locations[var->data.location]; - var->data.driver_location = driver_location; - - /* An array may be packed such that is crosses multiple other arrays - * or variables, we need to make sure we have allocated the elements - * consecutively if the previously proccessed var was shorter than - * the current array we are processing. - * - * NOTE: The code below assumes the var list is ordered in ascending - * location order, but per-vertex/per-primitive outputs may be - * grouped separately. - */ - assert(last_loc <= var->data.location || - last_per_prim != var->data.per_primitive); - last_loc = var->data.location; - last_per_prim = var->data.per_primitive; - unsigned last_slot_location = driver_location + var_size; - if (last_slot_location > location) { - unsigned num_unallocated_slots = last_slot_location - location; - unsigned first_unallocated_slot = var_size - num_unallocated_slots; - for (unsigned i = first_unallocated_slot; i < var_size; i++) { - assigned_locations[var->data.location + i] = location; - location++; - } - } - continue; - } - - for (unsigned i = 0; i < var_size; i++) { - assigned_locations[var->data.location + i] = location + i; - } - - var->data.driver_location = location; - location += driver_size; - } - - if (last_partial) - location++; - - exec_list_append(&shader->variables, &io_vars); - *size = location; -} - -static uint64_t -get_linked_variable_location(unsigned location, bool patch) -{ - if (!patch) - return location; - - /* Reserve locations 0...3 for special patch variables - * like tess factors and bounding boxes, and the generic patch - * variables will come after them. - */ - if (location >= VARYING_SLOT_PATCH0) - return location - VARYING_SLOT_PATCH0 + 4; - else if (location >= VARYING_SLOT_TESS_LEVEL_OUTER && - location <= VARYING_SLOT_BOUNDING_BOX1) - return location - VARYING_SLOT_TESS_LEVEL_OUTER; - else - unreachable("Unsupported variable in get_linked_variable_location."); -} - -static uint64_t -get_linked_variable_io_mask(nir_variable *variable, gl_shader_stage stage) -{ - const struct glsl_type *type = variable->type; - - if (nir_is_arrayed_io(variable, stage)) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - unsigned slots = glsl_count_attribute_slots(type, false); - if (variable->data.compact) { - unsigned component_count = variable->data.location_frac + glsl_get_length(type); - slots = DIV_ROUND_UP(component_count, 4); - } - - uint64_t mask = u_bit_consecutive64(0, slots); - return mask; -} - -nir_linked_io_var_info -nir_assign_linked_io_var_locations(nir_shader *producer, nir_shader *consumer) -{ - assert(producer); - assert(consumer); - - uint64_t producer_output_mask = 0; - uint64_t producer_patch_output_mask = 0; - - nir_foreach_shader_out_variable(variable, producer) { - uint64_t mask = get_linked_variable_io_mask(variable, producer->info.stage); - uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); - - if (variable->data.patch) - producer_patch_output_mask |= mask << loc; - else - producer_output_mask |= mask << loc; - } - - uint64_t consumer_input_mask = 0; - uint64_t consumer_patch_input_mask = 0; - - nir_foreach_shader_in_variable(variable, consumer) { - uint64_t mask = get_linked_variable_io_mask(variable, consumer->info.stage); - uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); - - if (variable->data.patch) - consumer_patch_input_mask |= mask << loc; - else - consumer_input_mask |= mask << loc; - } - - uint64_t io_mask = producer_output_mask | consumer_input_mask; - uint64_t patch_io_mask = producer_patch_output_mask | consumer_patch_input_mask; - - nir_foreach_shader_out_variable(variable, producer) { - uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); - - if (variable->data.patch) - variable->data.driver_location = util_bitcount64(patch_io_mask & u_bit_consecutive64(0, loc)); - else - variable->data.driver_location = util_bitcount64(io_mask & u_bit_consecutive64(0, loc)); - } - - nir_foreach_shader_in_variable(variable, consumer) { - uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); - - if (variable->data.patch) - variable->data.driver_location = util_bitcount64(patch_io_mask & u_bit_consecutive64(0, loc)); - else - variable->data.driver_location = util_bitcount64(io_mask & u_bit_consecutive64(0, loc)); - } - - nir_linked_io_var_info result = { - .num_linked_io_vars = util_bitcount64(io_mask), - .num_linked_patch_io_vars = util_bitcount64(patch_io_mask), - }; - - return result; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_liveness.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_liveness.c deleted file mode 100644 index 4f64667..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_liveness.c +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_worklist.h" -#include "nir_vla.h" - -/* - * Basic liveness analysis. This works only in SSA form. - * - * This liveness pass treats phi nodes as being melded to the space between - * blocks so that the destinations of a phi are in the livein of the block - * in which it resides and the sources are in the liveout of the - * corresponding block. By formulating the liveness information in this - * way, we ensure that the definition of any variable dominates its entire - * live range. This is true because the only way that the definition of an - * SSA value may not dominate a use is if the use is in a phi node and the - * uses in phi no are in the live-out of the corresponding predecessor - * block but not in the live-in of the block containing the phi node. - */ - -struct live_ssa_defs_state { - unsigned bitset_words; - - /* Used in propagate_across_edge() */ - BITSET_WORD *tmp_live; - - nir_block_worklist worklist; -}; - -/* Initialize the liveness data to zero and add the given block to the - * worklist. - */ -static void -init_liveness_block(nir_block *block, - struct live_ssa_defs_state *state) -{ - block->live_in = reralloc(block, block->live_in, BITSET_WORD, - state->bitset_words); - memset(block->live_in, 0, state->bitset_words * sizeof(BITSET_WORD)); - - block->live_out = reralloc(block, block->live_out, BITSET_WORD, - state->bitset_words); - memset(block->live_out, 0, state->bitset_words * sizeof(BITSET_WORD)); - - nir_block_worklist_push_head(&state->worklist, block); -} - -static bool -set_src_live(nir_src *src, void *void_live) -{ - BITSET_WORD *live = void_live; - - if (!src->is_ssa) - return true; - - if (nir_src_is_undef(*src)) - return true; /* undefined variables are never live */ - - BITSET_SET(live, src->ssa->index); - - return true; -} - -static bool -set_ssa_def_dead(nir_ssa_def *def, void *void_live) -{ - BITSET_WORD *live = void_live; - - BITSET_CLEAR(live, def->index); - - return true; -} - -/** Propagates the live in of succ across the edge to the live out of pred - * - * Phi nodes exist "between" blocks and all the phi nodes at the start of a - * block act "in parallel". When we propagate from the live_in of one - * block to the live out of the other, we have to kill any writes from phis - * and make live any sources. - * - * Returns true if updating live out of pred added anything - */ -static bool -propagate_across_edge(nir_block *pred, nir_block *succ, - struct live_ssa_defs_state *state) -{ - BITSET_WORD *live = state->tmp_live; - memcpy(live, succ->live_in, state->bitset_words * sizeof *live); - - nir_foreach_instr(instr, succ) { - if (instr->type != nir_instr_type_phi) - break; - nir_phi_instr *phi = nir_instr_as_phi(instr); - - assert(phi->dest.is_ssa); - set_ssa_def_dead(&phi->dest.ssa, live); - } - - nir_foreach_instr(instr, succ) { - if (instr->type != nir_instr_type_phi) - break; - nir_phi_instr *phi = nir_instr_as_phi(instr); - - nir_foreach_phi_src(src, phi) { - if (src->pred == pred) { - set_src_live(&src->src, live); - break; - } - } - } - - BITSET_WORD progress = 0; - for (unsigned i = 0; i < state->bitset_words; ++i) { - progress |= live[i] & ~pred->live_out[i]; - pred->live_out[i] |= live[i]; - } - return progress != 0; -} - -void -nir_live_ssa_defs_impl(nir_function_impl *impl) -{ - struct live_ssa_defs_state state = { - .bitset_words = BITSET_WORDS(impl->ssa_alloc), - }; - state.tmp_live = rzalloc_array(impl, BITSET_WORD, state.bitset_words), - - /* Number the instructions so we can do cheap interference tests using the - * instruction index. - */ - nir_metadata_require(impl, nir_metadata_instr_index); - - nir_block_worklist_init(&state.worklist, impl->num_blocks, NULL); - - /* Allocate live_in and live_out sets and add all of the blocks to the - * worklist. - */ - nir_foreach_block(block, impl) { - init_liveness_block(block, &state); - } - - - /* We're now ready to work through the worklist and update the liveness - * sets of each of the blocks. By the time we get to this point, every - * block in the function implementation has been pushed onto the - * worklist in reverse order. As long as we keep the worklist - * up-to-date as we go, everything will get covered. - */ - while (!nir_block_worklist_is_empty(&state.worklist)) { - /* We pop them off in the reverse order we pushed them on. This way - * the first walk of the instructions is backwards so we only walk - * once in the case of no control flow. - */ - nir_block *block = nir_block_worklist_pop_head(&state.worklist); - - memcpy(block->live_in, block->live_out, - state.bitset_words * sizeof(BITSET_WORD)); - - nir_if *following_if = nir_block_get_following_if(block); - if (following_if) - set_src_live(&following_if->condition, block->live_in); - - nir_foreach_instr_reverse(instr, block) { - /* Phi nodes are handled seperately so we want to skip them. Since - * we are going backwards and they are at the beginning, we can just - * break as soon as we see one. - */ - if (instr->type == nir_instr_type_phi) - break; - - nir_foreach_ssa_def(instr, set_ssa_def_dead, block->live_in); - nir_foreach_src(instr, set_src_live, block->live_in); - } - - /* Walk over all of the predecessors of the current block updating - * their live in with the live out of this one. If anything has - * changed, add the predecessor to the work list so that we ensure - * that the new information is used. - */ - set_foreach(block->predecessors, entry) { - nir_block *pred = (nir_block *)entry->key; - if (propagate_across_edge(pred, block, &state)) - nir_block_worklist_push_tail(&state.worklist, pred); - } - } - - ralloc_free(state.tmp_live); - nir_block_worklist_fini(&state.worklist); -} - -/** Return the live set at a cursor - * - * Note: The bitset returned may be the live_in or live_out from the block in - * which the instruction lives. Do not ralloc_free() it directly; - * instead, provide a mem_ctx and free that. - */ -const BITSET_WORD * -nir_get_live_ssa_defs(nir_cursor cursor, void *mem_ctx) -{ - nir_block *block = nir_cursor_current_block(cursor); - nir_function_impl *impl = nir_cf_node_get_function(&block->cf_node); - assert(impl->valid_metadata & nir_metadata_live_ssa_defs); - - switch (cursor.option) { - case nir_cursor_before_block: - return cursor.block->live_in; - - case nir_cursor_after_block: - return cursor.block->live_out; - - case nir_cursor_before_instr: - if (cursor.instr == nir_block_first_instr(cursor.instr->block)) - return cursor.instr->block->live_in; - break; - - case nir_cursor_after_instr: - if (cursor.instr == nir_block_last_instr(cursor.instr->block)) - return cursor.instr->block->live_out; - break; - } - - /* If we got here, we're an instruction cursor mid-block */ - const unsigned bitset_words = BITSET_WORDS(impl->ssa_alloc); - BITSET_WORD *live = ralloc_array(mem_ctx, BITSET_WORD, bitset_words); - memcpy(live, block->live_out, bitset_words * sizeof(BITSET_WORD)); - - nir_foreach_instr_reverse(instr, block) { - if (cursor.option == nir_cursor_after_instr && instr == cursor.instr) - break; - - /* If someone asked for liveness in the middle of a bunch of phis, - * that's an error. Since we are going backwards and they are at the - * beginning, we can just blow up as soon as we see one. - */ - assert(instr->type != nir_instr_type_phi); - if (instr->type == nir_instr_type_phi) - break; - - nir_foreach_ssa_def(instr, set_ssa_def_dead, live); - nir_foreach_src(instr, set_src_live, live); - - if (cursor.option == nir_cursor_before_instr && instr == cursor.instr) - break; - } - - return live; -} - -static bool -src_does_not_use_def(nir_src *src, void *def) -{ - return !src->is_ssa || src->ssa != (nir_ssa_def *)def; -} - -static bool -search_for_use_after_instr(nir_instr *start, nir_ssa_def *def) -{ - /* Only look for a use strictly after the given instruction */ - struct exec_node *node = start->node.next; - while (!exec_node_is_tail_sentinel(node)) { - nir_instr *instr = exec_node_data(nir_instr, node, node); - if (!nir_foreach_src(instr, src_does_not_use_def, def)) - return true; - node = node->next; - } - - /* If uses are considered to be in the block immediately preceding the if - * so we need to also check the following if condition, if any. - */ - nir_if *following_if = nir_block_get_following_if(start->block); - if (following_if && following_if->condition.is_ssa && - following_if->condition.ssa == def) - return true; - - return false; -} - -/* Returns true if def is live at instr assuming that def comes before - * instr in a pre DFS search of the dominance tree. - */ -static bool -nir_ssa_def_is_live_at(nir_ssa_def *def, nir_instr *instr) -{ - if (BITSET_TEST(instr->block->live_out, def->index)) { - /* Since def dominates instr, if def is in the liveout of the block, - * it's live at instr - */ - return true; - } else { - if (BITSET_TEST(instr->block->live_in, def->index) || - def->parent_instr->block == instr->block) { - /* In this case it is either live coming into instr's block or it - * is defined in the same block. In this case, we simply need to - * see if it is used after instr. - */ - return search_for_use_after_instr(instr, def); - } else { - return false; - } - } -} - -bool -nir_ssa_defs_interfere(nir_ssa_def *a, nir_ssa_def *b) -{ - if (a->parent_instr == b->parent_instr) { - /* Two variables defined at the same time interfere assuming at - * least one isn't dead. - */ - return true; - } else if (a->parent_instr->type == nir_instr_type_ssa_undef || - b->parent_instr->type == nir_instr_type_ssa_undef) { - /* If either variable is an ssa_undef, then there's no interference */ - return false; - } else if (a->parent_instr->index < b->parent_instr->index) { - return nir_ssa_def_is_live_at(a, b->parent_instr); - } else { - return nir_ssa_def_is_live_at(b, a->parent_instr); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_loop_analyze.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_loop_analyze.c deleted file mode 100644 index 68bbc3e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_loop_analyze.c +++ /dev/null @@ -1,1634 +0,0 @@ -/* - * Copyright © 2015 Thomas Helland - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_constant_expressions.h" -#include "nir_loop_analyze.h" -#include "../../util/bitset.h" - -typedef enum { - undefined, - invariant, - not_invariant, - basic_induction -} nir_loop_variable_type; - -typedef struct { - /* A link for the work list */ - struct list_head process_link; - - bool in_loop; - - /* The ssa_def associated with this info */ - nir_ssa_def *def; - - /* The type of this ssa_def */ - nir_loop_variable_type type; - - /* True if variable is in an if branch */ - bool in_if_branch; - - /* True if variable is in a nested loop */ - bool in_nested_loop; - - /* Could be a basic_induction if following uniforms are inlined */ - nir_src *init_src; - nir_alu_src *update_src; - - /** - * SSA def of the phi-node associated with this induction variable. - * - * Every loop induction variable has an associated phi node in the loop - * header. This may point to the same SSA def as \c def. If, however, \c def - * is the increment of the induction variable, this will point to the SSA - * def being incremented. - */ - nir_ssa_def *basis; -} nir_loop_variable; - -typedef struct { - /* The loop we store information for */ - nir_loop *loop; - - /* Loop_variable for all ssa_defs in function */ - nir_loop_variable *loop_vars; - BITSET_WORD *loop_vars_init; - - /* A list of the loop_vars to analyze */ - struct list_head process_list; - - nir_variable_mode indirect_mask; - - bool force_unroll_sampler_indirect; -} loop_info_state; - -static nir_loop_variable * -get_loop_var(nir_ssa_def *value, loop_info_state *state) -{ - nir_loop_variable *var = &(state->loop_vars[value->index]); - - if (!BITSET_TEST(state->loop_vars_init, value->index)) { - var->in_loop = false; - var->def = value; - var->in_if_branch = false; - var->in_nested_loop = false; - var->init_src = NULL; - var->update_src = NULL; - if (value->parent_instr->type == nir_instr_type_load_const) - var->type = invariant; - else - var->type = undefined; - - BITSET_SET(state->loop_vars_init, value->index); - } - - return var; -} - -typedef struct { - loop_info_state *state; - bool in_if_branch; - bool in_nested_loop; -} init_loop_state; - -static bool -init_loop_def(nir_ssa_def *def, void *void_init_loop_state) -{ - init_loop_state *loop_init_state = void_init_loop_state; - nir_loop_variable *var = get_loop_var(def, loop_init_state->state); - - if (loop_init_state->in_nested_loop) { - var->in_nested_loop = true; - } else if (loop_init_state->in_if_branch) { - var->in_if_branch = true; - } else { - /* Add to the tail of the list. That way we start at the beginning of - * the defs in the loop instead of the end when walking the list. This - * means less recursive calls. Only add defs that are not in nested - * loops or conditional blocks. - */ - list_addtail(&var->process_link, &loop_init_state->state->process_list); - } - - var->in_loop = true; - - return true; -} - -/** Calculate an estimated cost in number of instructions - * - * We do this so that we don't unroll loops which will later get massively - * inflated due to int64 or fp64 lowering. The estimates provided here don't - * have to be massively accurate; they just have to be good enough that loop - * unrolling doesn't cause things to blow up too much. - */ -static unsigned -instr_cost(loop_info_state *state, nir_instr *instr, - const nir_shader_compiler_options *options) -{ - if (instr->type == nir_instr_type_intrinsic || - instr->type == nir_instr_type_tex) - return 1; - - if (instr->type != nir_instr_type_alu) - return 0; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - const nir_op_info *info = &nir_op_infos[alu->op]; - unsigned cost = 1; - - if (nir_op_is_selection(alu->op)) { - nir_ssa_scalar cond_scalar = {alu->src[0].src.ssa, 0}; - if (nir_is_terminator_condition_with_two_inputs(cond_scalar)) { - nir_instr *sel_cond = alu->src[0].src.ssa->parent_instr; - nir_alu_instr *sel_alu = nir_instr_as_alu(sel_cond); - - nir_ssa_scalar rhs, lhs; - lhs = nir_ssa_scalar_chase_alu_src(cond_scalar, 0); - rhs = nir_ssa_scalar_chase_alu_src(cond_scalar, 1); - - /* If the selects condition is a comparision between a constant and - * a basic induction variable we know that it will be eliminated once - * the loop is unrolled so here we assign it a cost of 0. - */ - if ((nir_src_is_const(sel_alu->src[0].src) && - get_loop_var(rhs.def, state)->type == basic_induction) || - (nir_src_is_const(sel_alu->src[1].src) && - get_loop_var(lhs.def, state)->type == basic_induction) ) { - /* Also if the selects condition is only used by the select then - * remove that alu instructons cost from the cost total also. - */ - if (!list_is_singular(&sel_alu->dest.dest.ssa.uses) || - nir_ssa_def_used_by_if(&sel_alu->dest.dest.ssa)) - return 0; - else - return -1; - } - } - } - - if (alu->op == nir_op_flrp) { - if ((options->lower_flrp16 && nir_dest_bit_size(alu->dest.dest) == 16) || - (options->lower_flrp32 && nir_dest_bit_size(alu->dest.dest) == 32) || - (options->lower_flrp64 && nir_dest_bit_size(alu->dest.dest) == 64)) - cost *= 3; - } - - /* Assume everything 16 or 32-bit is cheap. - * - * There are no 64-bit ops that don't have a 64-bit thing as their - * destination or first source. - */ - if (nir_dest_bit_size(alu->dest.dest) < 64 && - nir_src_bit_size(alu->src[0].src) < 64) - return cost; - - bool is_fp64 = nir_dest_bit_size(alu->dest.dest) == 64 && - nir_alu_type_get_base_type(info->output_type) == nir_type_float; - for (unsigned i = 0; i < info->num_inputs; i++) { - if (nir_src_bit_size(alu->src[i].src) == 64 && - nir_alu_type_get_base_type(info->input_types[i]) == nir_type_float) - is_fp64 = true; - } - - if (is_fp64) { - /* If it's something lowered normally, it's expensive. */ - if (options->lower_doubles_options & - nir_lower_doubles_op_to_options_mask(alu->op)) - cost *= 20; - - /* If it's full software, it's even more expensive */ - if (options->lower_doubles_options & nir_lower_fp64_full_software) { - cost *= 100; - state->loop->info->has_soft_fp64 = true; - } - - return cost; - } else { - if (options->lower_int64_options & - nir_lower_int64_op_to_options_mask(alu->op)) { - /* These require a doing the division algorithm. */ - if (alu->op == nir_op_idiv || alu->op == nir_op_udiv || - alu->op == nir_op_imod || alu->op == nir_op_umod || - alu->op == nir_op_irem) - return cost * 100; - - /* Other int64 lowering isn't usually all that expensive */ - return cost * 5; - } - - return cost; - } -} - -static bool -init_loop_block(nir_block *block, loop_info_state *state, - bool in_if_branch, bool in_nested_loop) -{ - init_loop_state init_state = {.in_if_branch = in_if_branch, - .in_nested_loop = in_nested_loop, - .state = state }; - - nir_foreach_instr(instr, block) { - nir_foreach_ssa_def(instr, init_loop_def, &init_state); - } - - return true; -} - -static inline bool -is_var_alu(nir_loop_variable *var) -{ - return var->def->parent_instr->type == nir_instr_type_alu; -} - -static inline bool -is_var_phi(nir_loop_variable *var) -{ - return var->def->parent_instr->type == nir_instr_type_phi; -} - -static inline bool -mark_invariant(nir_ssa_def *def, loop_info_state *state) -{ - nir_loop_variable *var = get_loop_var(def, state); - - if (var->type == invariant) - return true; - - if (!var->in_loop) { - var->type = invariant; - return true; - } - - if (var->type == not_invariant) - return false; - - if (is_var_alu(var)) { - nir_alu_instr *alu = nir_instr_as_alu(def->parent_instr); - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (!mark_invariant(alu->src[i].src.ssa, state)) { - var->type = not_invariant; - return false; - } - } - var->type = invariant; - return true; - } - - /* Phis shouldn't be invariant except if one operand is invariant, and the - * other is the phi itself. These should be removed by opt_remove_phis. - * load_consts are already set to invariant and constant during init, - * and so should return earlier. Remaining op_codes are set undefined. - */ - var->type = not_invariant; - return false; -} - -static void -compute_invariance_information(loop_info_state *state) -{ - /* An expression is invariant in a loop L if: - * (base cases) - * – it’s a constant - * – it’s a variable use, all of whose single defs are outside of L - * (inductive cases) - * – it’s a pure computation all of whose args are loop invariant - * – it’s a variable use whose single reaching def, and the - * rhs of that def is loop-invariant - */ - list_for_each_entry_safe(nir_loop_variable, var, &state->process_list, - process_link) { - assert(!var->in_if_branch && !var->in_nested_loop); - - if (mark_invariant(var->def, state)) - list_del(&var->process_link); - } -} - -/* If all of the instruction sources point to identical ALU instructions (as - * per nir_instrs_equal), return one of the ALU instructions. Otherwise, - * return NULL. - */ -static nir_alu_instr * -phi_instr_as_alu(nir_phi_instr *phi) -{ - nir_alu_instr *first = NULL; - nir_foreach_phi_src(src, phi) { - assert(src->src.is_ssa); - if (src->src.ssa->parent_instr->type != nir_instr_type_alu) - return NULL; - - nir_alu_instr *alu = nir_instr_as_alu(src->src.ssa->parent_instr); - if (first == NULL) { - first = alu; - } else { - if (!nir_instrs_equal(&first->instr, &alu->instr)) - return NULL; - } - } - - return first; -} - -static bool -alu_src_has_identity_swizzle(nir_alu_instr *alu, unsigned src_idx) -{ - assert(nir_op_infos[alu->op].input_sizes[src_idx] == 0); - assert(alu->dest.dest.is_ssa); - for (unsigned i = 0; i < alu->dest.dest.ssa.num_components; i++) { - if (alu->src[src_idx].swizzle[i] != i) - return false; - } - - return true; -} - -static bool -is_only_uniform_src(nir_src *src) -{ - if (!src->is_ssa) - return false; - - nir_instr *instr = src->ssa->parent_instr; - - switch (instr->type) { - case nir_instr_type_alu: { - /* Return true if all sources return true. */ - nir_alu_instr *alu = nir_instr_as_alu(instr); - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (!is_only_uniform_src(&alu->src[i].src)) - return false; - } - return true; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *inst = nir_instr_as_intrinsic(instr); - /* current uniform inline only support load ubo */ - return inst->intrinsic == nir_intrinsic_load_ubo; - } - - case nir_instr_type_load_const: - /* Always return true for constants. */ - return true; - - default: - return false; - } -} - -static bool -compute_induction_information(loop_info_state *state) -{ - unsigned num_induction_vars = 0; - - list_for_each_entry_safe(nir_loop_variable, var, &state->process_list, - process_link) { - - /* It can't be an induction variable if it is invariant. Invariants and - * things in nested loops or conditionals should have been removed from - * the list by compute_invariance_information(). - */ - assert(!var->in_if_branch && !var->in_nested_loop && - var->type != invariant); - - /* We are only interested in checking phis for the basic induction - * variable case as its simple to detect. All basic induction variables - * have a phi node - */ - if (!is_var_phi(var)) - continue; - - nir_phi_instr *phi = nir_instr_as_phi(var->def->parent_instr); - - nir_loop_variable *alu_src_var = NULL; - nir_foreach_phi_src(src, phi) { - nir_loop_variable *src_var = get_loop_var(src->src.ssa, state); - - /* If one of the sources is in an if branch or nested loop then don't - * attempt to go any further. - */ - if (src_var->in_if_branch || src_var->in_nested_loop) - break; - - /* Detect inductions variables that are incremented in both branches - * of an unnested if rather than in a loop block. - */ - if (is_var_phi(src_var)) { - nir_phi_instr *src_phi = - nir_instr_as_phi(src_var->def->parent_instr); - nir_alu_instr *src_phi_alu = phi_instr_as_alu(src_phi); - if (src_phi_alu) { - src_var = get_loop_var(&src_phi_alu->dest.dest.ssa, state); - if (!src_var->in_if_branch) - break; - } - } - - if (!src_var->in_loop && !var->init_src) { - var->init_src = &src->src; - } else if (is_var_alu(src_var) && !var->update_src) { - alu_src_var = src_var; - nir_alu_instr *alu = nir_instr_as_alu(src_var->def->parent_instr); - - /* Check for unsupported alu operations */ - if (alu->op != nir_op_iadd && alu->op != nir_op_fadd && - alu->op != nir_op_imul && alu->op != nir_op_fmul && - alu->op != nir_op_ishl && alu->op != nir_op_ishr && - alu->op != nir_op_ushr) - break; - - if (nir_op_infos[alu->op].num_inputs == 2) { - for (unsigned i = 0; i < 2; i++) { - /* Is one of the operands const or uniform, and the other the phi. - * The phi source can't be swizzled in any way. - */ - if (alu->src[1-i].src.ssa == &phi->dest.ssa && - alu_src_has_identity_swizzle(alu, 1 - i)) { - if (is_only_uniform_src(&alu->src[i].src)) - var->update_src = alu->src + i; - } - } - } - - if (!var->update_src) - break; - } else { - var->update_src = NULL; - break; - } - } - - if (var->update_src && var->init_src && - is_only_uniform_src(var->init_src)) { - alu_src_var->init_src = var->init_src; - alu_src_var->update_src = var->update_src; - alu_src_var->basis = var->def; - alu_src_var->type = basic_induction; - - var->basis = var->def; - var->type = basic_induction; - - num_induction_vars += 2; - } else { - var->init_src = NULL; - var->update_src = NULL; - var->basis = NULL; - } - } - - nir_loop_info *info = state->loop->info; - ralloc_free(info->induction_vars); - info->num_induction_vars = 0; - - /* record induction variables into nir_loop_info */ - if (num_induction_vars) { - info->induction_vars = ralloc_array(info, nir_loop_induction_variable, - num_induction_vars); - - list_for_each_entry(nir_loop_variable, var, &state->process_list, - process_link) { - if (var->type == basic_induction) { - nir_loop_induction_variable *ivar = - &info->induction_vars[info->num_induction_vars++]; - ivar->def = var->def; - ivar->init_src = var->init_src; - ivar->update_src = var->update_src; - } - } - /* don't overflow */ - assert(info->num_induction_vars <= num_induction_vars); - } - - return num_induction_vars != 0; -} - -static bool -find_loop_terminators(loop_info_state *state) -{ - bool success = false; - foreach_list_typed_safe(nir_cf_node, node, node, &state->loop->body) { - if (node->type == nir_cf_node_if) { - nir_if *nif = nir_cf_node_as_if(node); - - nir_block *break_blk = NULL; - nir_block *continue_from_blk = NULL; - bool continue_from_then = true; - - nir_block *last_then = nir_if_last_then_block(nif); - nir_block *last_else = nir_if_last_else_block(nif); - if (nir_block_ends_in_break(last_then)) { - break_blk = last_then; - continue_from_blk = last_else; - continue_from_then = false; - } else if (nir_block_ends_in_break(last_else)) { - break_blk = last_else; - continue_from_blk = last_then; - } - - /* If there is a break then we should find a terminator. If we can - * not find a loop terminator, but there is a break-statement then - * we should return false so that we do not try to find trip-count - */ - if (!nir_is_trivial_loop_if(nif, break_blk)) { - state->loop->info->complex_loop = true; - return false; - } - - /* Continue if the if contained no jumps at all */ - if (!break_blk) - continue; - - if (nif->condition.ssa->parent_instr->type == nir_instr_type_phi) { - state->loop->info->complex_loop = true; - return false; - } - - nir_loop_terminator *terminator = - rzalloc(state->loop->info, nir_loop_terminator); - - list_addtail(&terminator->loop_terminator_link, - &state->loop->info->loop_terminator_list); - - terminator->nif = nif; - terminator->break_block = break_blk; - terminator->continue_from_block = continue_from_blk; - terminator->continue_from_then = continue_from_then; - terminator->conditional_instr = nif->condition.ssa->parent_instr; - - success = true; - } - } - - return success; -} - -/* This function looks for an array access within a loop that uses an - * induction variable for the array index. If found it returns the size of the - * array, otherwise 0 is returned. If we find an induction var we pass it back - * to the caller via array_index_out. - */ -static unsigned -find_array_access_via_induction(loop_info_state *state, - nir_deref_instr *deref, - nir_loop_variable **array_index_out) -{ - for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type != nir_deref_type_array) - continue; - - assert(d->arr.index.is_ssa); - nir_loop_variable *array_index = get_loop_var(d->arr.index.ssa, state); - - if (array_index->type != basic_induction) - continue; - - if (array_index_out) - *array_index_out = array_index; - - nir_deref_instr *parent = nir_deref_instr_parent(d); - - if (glsl_type_is_array_or_matrix(parent->type)) { - return glsl_get_length(parent->type); - } else { - assert(glsl_type_is_vector(parent->type)); - return glsl_get_vector_elements(parent->type); - } - } - - return 0; -} - -static bool -guess_loop_limit(loop_info_state *state, nir_const_value *limit_val, - nir_ssa_scalar basic_ind) -{ - unsigned min_array_size = 0; - - nir_foreach_block_in_cf_node(block, &state->loop->cf_node) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - /* Check for arrays variably-indexed by a loop induction variable. */ - if (intrin->intrinsic == nir_intrinsic_load_deref || - intrin->intrinsic == nir_intrinsic_store_deref || - intrin->intrinsic == nir_intrinsic_copy_deref) { - - nir_loop_variable *array_idx = NULL; - unsigned array_size = - find_array_access_via_induction(state, - nir_src_as_deref(intrin->src[0]), - &array_idx); - if (array_idx && basic_ind.def == array_idx->def && - (min_array_size == 0 || min_array_size > array_size)) { - /* Array indices are scalars */ - assert(basic_ind.def->num_components == 1); - min_array_size = array_size; - } - - if (intrin->intrinsic != nir_intrinsic_copy_deref) - continue; - - array_size = - find_array_access_via_induction(state, - nir_src_as_deref(intrin->src[1]), - &array_idx); - if (array_idx && basic_ind.def == array_idx->def && - (min_array_size == 0 || min_array_size > array_size)) { - /* Array indices are scalars */ - assert(basic_ind.def->num_components == 1); - min_array_size = array_size; - } - } - } - } - - if (min_array_size) { - *limit_val = nir_const_value_for_uint(min_array_size, - basic_ind.def->bit_size); - return true; - } - - return false; -} - -static bool -try_find_limit_of_alu(nir_ssa_scalar limit, nir_const_value *limit_val, - nir_loop_terminator *terminator, loop_info_state *state) -{ - if (!nir_ssa_scalar_is_alu(limit)) - return false; - - nir_op limit_op = nir_ssa_scalar_alu_op(limit); - if (limit_op == nir_op_imin || limit_op == nir_op_fmin) { - for (unsigned i = 0; i < 2; i++) { - nir_ssa_scalar src = nir_ssa_scalar_chase_alu_src(limit, i); - if (nir_ssa_scalar_is_const(src)) { - *limit_val = nir_ssa_scalar_as_const_value(src); - terminator->exact_trip_count_unknown = true; - return true; - } - } - } - - return false; -} - -static nir_const_value -eval_const_unop(nir_op op, unsigned bit_size, nir_const_value src0, - unsigned execution_mode) -{ - assert(nir_op_infos[op].num_inputs == 1); - nir_const_value dest; - nir_const_value *src[1] = { &src0 }; - nir_eval_const_opcode(op, &dest, 1, bit_size, src, execution_mode); - return dest; -} - -static nir_const_value -eval_const_binop(nir_op op, unsigned bit_size, - nir_const_value src0, nir_const_value src1, - unsigned execution_mode) -{ - assert(nir_op_infos[op].num_inputs == 2); - nir_const_value dest; - nir_const_value *src[2] = { &src0, &src1 }; - nir_eval_const_opcode(op, &dest, 1, bit_size, src, execution_mode); - return dest; -} - -static int -find_replacement(const nir_ssa_def **originals, const nir_ssa_def *key, - unsigned num_replacements) -{ - for (int i = 0; i < num_replacements; i++) { - if (originals[i] == key) - return i; - } - - return -1; -} - -/** - * Try to evaluate an ALU instruction as a constant with a replacement - * - * Much like \c nir_opt_constant_folding.c:try_fold_alu, this method attempts - * to evaluate an ALU instruction as a constant. There are two significant - * differences. - * - * First, this method performs the evaluation recursively. If any source of - * the ALU instruction is not itself a constant, it is first evaluated. - * - * Second, if the SSA value \c original is encountered as a source of the ALU - * instruction, the value \c replacement is substituted. - * - * The intended purpose of this function is to evaluate an arbitrary - * expression involving a loop induction variable. In this case, \c original - * would be the phi node associated with the induction variable, and - * \c replacement is the initial value of the induction variable. - * - * \returns true if the ALU instruction can be evaluated as constant (after - * applying the previously described substitution) or false otherwise. - */ -static bool -try_eval_const_alu(nir_const_value *dest, nir_alu_instr *alu, - const nir_ssa_def **originals, - const nir_const_value **replacements, - unsigned num_replacements, unsigned execution_mode) -{ - nir_const_value src[NIR_MAX_VEC_COMPONENTS][NIR_MAX_VEC_COMPONENTS]; - - if (!alu->dest.dest.is_ssa) - return false; - - /* In the case that any outputs/inputs have unsized types, then we need to - * guess the bit-size. In this case, the validator ensures that all - * bit-sizes match so we can just take the bit-size from first - * output/input with an unsized type. If all the outputs/inputs are sized - * then we don't need to guess the bit-size at all because the code we - * generate for constant opcodes in this case already knows the sizes of - * the types involved and does not need the provided bit-size for anything - * (although it still requires to receive a valid bit-size). - */ - unsigned bit_size = 0; - if (!nir_alu_type_get_type_size(nir_op_infos[alu->op].output_type)) - bit_size = alu->dest.dest.ssa.bit_size; - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (!alu->src[i].src.is_ssa) - return false; - - if (bit_size == 0 && - !nir_alu_type_get_type_size(nir_op_infos[alu->op].input_types[i])) - bit_size = alu->src[i].src.ssa->bit_size; - - nir_instr *src_instr = alu->src[i].src.ssa->parent_instr; - - if (src_instr->type == nir_instr_type_load_const) { - nir_load_const_instr *load_const = nir_instr_as_load_const(src_instr); - - for (unsigned j = 0; j < nir_ssa_alu_instr_src_components(alu, i); - j++) { - src[i][j] = load_const->value[alu->src[i].swizzle[j]]; - } - } else { - int r = find_replacement(originals, alu->src[i].src.ssa, - num_replacements); - - if (r >= 0) { - for (unsigned j = 0; j < nir_ssa_alu_instr_src_components(alu, i); - j++) { - src[i][j] = replacements[r][alu->src[i].swizzle[j]]; - } - } else if (src_instr->type == nir_instr_type_alu) { - memset(src[i], 0, sizeof(src[i])); - - if (!try_eval_const_alu(src[i], nir_instr_as_alu(src_instr), - originals, replacements, num_replacements, - execution_mode)) - return false; - } else { - return false; - } - } - - /* We shouldn't have any source modifiers in the optimization loop. */ - assert(!alu->src[i].abs && !alu->src[i].negate); - } - - if (bit_size == 0) - bit_size = 32; - - /* We shouldn't have any saturate modifiers in the optimization loop. */ - assert(!alu->dest.saturate); - - nir_const_value *srcs[NIR_MAX_VEC_COMPONENTS]; - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; ++i) - srcs[i] = src[i]; - - nir_eval_const_opcode(alu->op, dest, alu->dest.dest.ssa.num_components, - bit_size, srcs, execution_mode); - - return true; -} - -static int32_t -get_iteration(nir_op cond_op, nir_const_value initial, nir_const_value step, - nir_const_value limit, unsigned bit_size, - unsigned execution_mode) -{ - nir_const_value span, iter; - - switch (cond_op) { - case nir_op_ine: - /* In order for execution to be here, limit must be the same as initial. - * Otherwise will_break_on_first_iteration would have returned false. - * If step is zero, the loop is infinite. Otherwise the loop will - * execute once. - */ - return step.u64 == 0 ? -1 : 1; - - case nir_op_ige: - case nir_op_ilt: - case nir_op_ieq: - span = eval_const_binop(nir_op_isub, bit_size, limit, initial, - execution_mode); - iter = eval_const_binop(nir_op_idiv, bit_size, span, step, - execution_mode); - break; - - case nir_op_uge: - case nir_op_ult: - span = eval_const_binop(nir_op_isub, bit_size, limit, initial, - execution_mode); - iter = eval_const_binop(nir_op_udiv, bit_size, span, step, - execution_mode); - break; - - case nir_op_fneu: - /* In order for execution to be here, limit must be the same as initial. - * Otherwise will_break_on_first_iteration would have returned false. - * If step is zero, the loop is infinite. Otherwise the loop will - * execute once. - * - * This is a little more tricky for floating point since X-Y might still - * be X even if Y is not zero. Instead check that (initial + step) != - * initial. - */ - span = eval_const_binop(nir_op_fadd, bit_size, initial, step, - execution_mode); - iter = eval_const_binop(nir_op_feq, bit_size, initial, - span, execution_mode); - - /* return (initial + step) == initial ? -1 : 1 */ - return iter.b ? -1 : 1; - - case nir_op_fge: - case nir_op_flt: - case nir_op_feq: - span = eval_const_binop(nir_op_fsub, bit_size, limit, initial, - execution_mode); - iter = eval_const_binop(nir_op_fdiv, bit_size, span, - step, execution_mode); - iter = eval_const_unop(nir_op_f2i64, bit_size, iter, execution_mode); - break; - - default: - return -1; - } - - uint64_t iter_u64 = nir_const_value_as_uint(iter, bit_size); - return iter_u64 > INT_MAX ? -1 : (int)iter_u64; -} - -static int32_t -get_iteration_empirical(nir_alu_instr *cond_alu, nir_alu_instr *incr_alu, - nir_ssa_def *basis, nir_const_value initial, - bool invert_cond, unsigned execution_mode, - unsigned max_unroll_iterations) -{ - int iter_count = 0; - nir_const_value result; - nir_const_value iter = initial; - - const nir_ssa_def *originals[2] = { basis, NULL }; - const nir_const_value *replacements[2] = { &iter, NULL }; - - while (iter_count <= max_unroll_iterations) { - bool success; - - success = try_eval_const_alu(&result, cond_alu, originals, replacements, - 1, execution_mode); - if (!success) - return -1; - - const bool cond_succ = invert_cond ? !result.b : result.b; - if (cond_succ) - return iter_count; - - iter_count++; - - success = try_eval_const_alu(&result, incr_alu, originals, replacements, - 1, execution_mode); - assert(success); - - iter = result; - } - - return -1; -} - -static bool -will_break_on_first_iteration(nir_alu_instr *cond_alu, nir_ssa_def *basis, - nir_ssa_def *limit_basis, - nir_const_value initial, nir_const_value limit, - bool invert_cond, unsigned execution_mode) -{ - nir_const_value result; - - const nir_ssa_def *originals[2] = { basis, limit_basis }; - const nir_const_value *replacements[2] = { &initial, &limit }; - - ASSERTED bool success = try_eval_const_alu(&result, cond_alu, originals, - replacements, 2, execution_mode); - - assert(success); - - return invert_cond ? !result.b : result.b; -} - -static bool -test_iterations(int32_t iter_int, nir_const_value step, - nir_const_value limit, nir_op cond_op, unsigned bit_size, - nir_alu_type induction_base_type, - nir_const_value initial, bool limit_rhs, bool invert_cond, - unsigned execution_mode) -{ - assert(nir_op_infos[cond_op].num_inputs == 2); - - nir_const_value iter_src; - nir_op mul_op; - nir_op add_op; - switch (induction_base_type) { - case nir_type_float: - iter_src = nir_const_value_for_float(iter_int, bit_size); - mul_op = nir_op_fmul; - add_op = nir_op_fadd; - break; - case nir_type_int: - case nir_type_uint: - iter_src = nir_const_value_for_int(iter_int, bit_size); - mul_op = nir_op_imul; - add_op = nir_op_iadd; - break; - default: - unreachable("Unhandled induction variable base type!"); - } - - /* Multiple the iteration count we are testing by the number of times we - * step the induction variable each iteration. - */ - nir_const_value mul_result = - eval_const_binop(mul_op, bit_size, iter_src, step, execution_mode); - - /* Add the initial value to the accumulated induction variable total */ - nir_const_value add_result = - eval_const_binop(add_op, bit_size, mul_result, initial, execution_mode); - - nir_const_value *src[2]; - src[limit_rhs ? 0 : 1] = &add_result; - src[limit_rhs ? 1 : 0] = &limit; - - /* Evaluate the loop exit condition */ - nir_const_value result; - nir_eval_const_opcode(cond_op, &result, 1, bit_size, src, execution_mode); - - return invert_cond ? !result.b : result.b; -} - -static int -calculate_iterations(nir_ssa_def *basis, nir_ssa_def *limit_basis, - nir_const_value initial, nir_const_value step, - nir_const_value limit, nir_alu_instr *alu, - nir_ssa_scalar cond, nir_op alu_op, bool limit_rhs, - bool invert_cond, unsigned execution_mode, - unsigned max_unroll_iterations) -{ - /* nir_op_isub should have been lowered away by this point */ - assert(alu->op != nir_op_isub); - - /* Make sure the alu type for our induction variable is compatible with the - * conditional alus input type. If its not something has gone really wrong. - */ - nir_alu_type induction_base_type = - nir_alu_type_get_base_type(nir_op_infos[alu->op].output_type); - if (induction_base_type == nir_type_int || induction_base_type == nir_type_uint) { - assert(nir_alu_type_get_base_type(nir_op_infos[alu_op].input_types[1]) == nir_type_int || - nir_alu_type_get_base_type(nir_op_infos[alu_op].input_types[1]) == nir_type_uint); - } else { - assert(nir_alu_type_get_base_type(nir_op_infos[alu_op].input_types[0]) == - induction_base_type); - } - - /* do-while loops can increment the starting value before the condition is - * checked. e.g. - * - * do { - * ndx++; - * } while (ndx < 3); - * - * Here we check if the induction variable is used directly by the loop - * condition and if so we assume we need to step the initial value. - */ - unsigned trip_offset = 0; - nir_alu_instr *cond_alu = nir_instr_as_alu(cond.def->parent_instr); - if (cond_alu->src[0].src.ssa == &alu->dest.dest.ssa || - cond_alu->src[1].src.ssa == &alu->dest.dest.ssa) { - trip_offset = 1; - } - - unsigned bit_size = nir_src_bit_size(alu->src[0].src); - - /* get_iteration works under assumption that iterator will be - * incremented or decremented until it hits the limit, - * however if the loop condition is false on the first iteration - * get_iteration's assumption is broken. Handle such loops first. - */ - if (will_break_on_first_iteration(cond_alu, basis, limit_basis, initial, - limit, invert_cond, execution_mode)) { - return 0; - } - - /* For loops incremented with addition operation, it's easy to - * calculate the number of iterations theoretically. Even though it - * is possible for other operations as well, it is much more error - * prone, and doesn't cover all possible cases. So, we try to - * emulate the loop. - */ - int iter_int; - switch (alu->op) { - case nir_op_iadd: - case nir_op_fadd: - assert(nir_src_bit_size(alu->src[0].src) == - nir_src_bit_size(alu->src[1].src)); - - iter_int = get_iteration(alu_op, initial, step, limit, bit_size, - execution_mode); - break; - case nir_op_fmul: - /* Detecting non-zero loop counts when the loop increment is floating - * point multiplication triggers a preexisting problem in - * glsl-fs-loop-unroll-mul-fp64.shader_test. See - * https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3445#note_1779438. - */ - return -1; - case nir_op_imul: - case nir_op_ishl: - case nir_op_ishr: - case nir_op_ushr: - return get_iteration_empirical(cond_alu, alu, basis, initial, - invert_cond, execution_mode, - max_unroll_iterations); - default: - unreachable("Invalid induction variable increment operation."); - } - - /* If iter_int is negative the loop is ill-formed or is the conditional is - * unsigned with a huge iteration count so don't bother going any further. - */ - if (iter_int < 0) - return -1; - - if (alu_op == nir_op_ine || alu_op == nir_op_fneu) - return iter_int; - - /* An explanation from the GLSL unrolling pass: - * - * Make sure that the calculated number of iterations satisfies the exit - * condition. This is needed to catch off-by-one errors and some types of - * ill-formed loops. For example, we need to detect that the following - * loop does not have a maximum iteration count. - * - * for (float x = 0.0; x != 0.9; x += 0.2); - */ - for (int bias = -1; bias <= 1; bias++) { - const int iter_bias = iter_int + bias; - - if (test_iterations(iter_bias, step, limit, alu_op, bit_size, - induction_base_type, initial, - limit_rhs, invert_cond, execution_mode)) { - return iter_bias > 0 ? iter_bias - trip_offset : iter_bias; - } - } - - return -1; -} - -static nir_op -inverse_comparison(nir_op alu_op) -{ - switch (alu_op) { - case nir_op_fge: - return nir_op_flt; - case nir_op_ige: - return nir_op_ilt; - case nir_op_uge: - return nir_op_ult; - case nir_op_flt: - return nir_op_fge; - case nir_op_ilt: - return nir_op_ige; - case nir_op_ult: - return nir_op_uge; - case nir_op_feq: - return nir_op_fneu; - case nir_op_ieq: - return nir_op_ine; - case nir_op_fneu: - return nir_op_feq; - case nir_op_ine: - return nir_op_ieq; - default: - unreachable("Unsuported comparison!"); - } -} - -static bool -get_induction_and_limit_vars(nir_ssa_scalar cond, - nir_ssa_scalar *ind, - nir_ssa_scalar *limit, - bool *limit_rhs, - loop_info_state *state) -{ - nir_ssa_scalar rhs, lhs; - lhs = nir_ssa_scalar_chase_alu_src(cond, 0); - rhs = nir_ssa_scalar_chase_alu_src(cond, 1); - - nir_loop_variable *src0_lv = get_loop_var(lhs.def, state); - nir_loop_variable *src1_lv = get_loop_var(rhs.def, state); - - if (src0_lv->type == basic_induction) { - if (!nir_src_is_const(*src0_lv->init_src)) - return false; - - *ind = lhs; - *limit = rhs; - *limit_rhs = true; - return true; - } else if (src1_lv->type == basic_induction) { - if (!nir_src_is_const(*src1_lv->init_src)) - return false; - - *ind = rhs; - *limit = lhs; - *limit_rhs = false; - return true; - } else { - return false; - } -} - -static bool -try_find_trip_count_vars_in_iand(nir_ssa_scalar *cond, - nir_ssa_scalar *ind, - nir_ssa_scalar *limit, - bool *limit_rhs, - loop_info_state *state) -{ - const nir_op alu_op = nir_ssa_scalar_alu_op(*cond); - assert(alu_op == nir_op_ieq || alu_op == nir_op_inot); - - nir_ssa_scalar iand = nir_ssa_scalar_chase_alu_src(*cond, 0); - - if (alu_op == nir_op_ieq) { - nir_ssa_scalar zero = nir_ssa_scalar_chase_alu_src(*cond, 1); - - if (!nir_ssa_scalar_is_alu(iand) || !nir_ssa_scalar_is_const(zero)) { - /* Maybe we had it the wrong way, flip things around */ - nir_ssa_scalar tmp = zero; - zero = iand; - iand = tmp; - - /* If we still didn't find what we need then return */ - if (!nir_ssa_scalar_is_const(zero)) - return false; - } - - /* If the loop is not breaking on (x && y) == 0 then return */ - if (nir_ssa_scalar_as_uint(zero) != 0) - return false; - } - - if (!nir_ssa_scalar_is_alu(iand)) - return false; - - if (nir_ssa_scalar_alu_op(iand) != nir_op_iand) - return false; - - /* Check if iand src is a terminator condition and try get induction var - * and trip limit var. - */ - bool found_induction_var = false; - for (unsigned i = 0; i < 2; i++) { - nir_ssa_scalar src = nir_ssa_scalar_chase_alu_src(iand, i); - if (nir_is_terminator_condition_with_two_inputs(src) && - get_induction_and_limit_vars(src, ind, limit, limit_rhs, state)) { - *cond = src; - found_induction_var = true; - - /* If we've found one with a constant limit, stop. */ - if (nir_ssa_scalar_is_const(*limit)) - return true; - } - } - - return found_induction_var; -} - -/* Run through each of the terminators of the loop and try to infer a possible - * trip-count. We need to check them all, and set the lowest trip-count as the - * trip-count of our loop. If one of the terminators has an undecidable - * trip-count we can not safely assume anything about the duration of the - * loop. - */ -static void -find_trip_count(loop_info_state *state, unsigned execution_mode, - unsigned max_unroll_iterations) -{ - bool trip_count_known = true; - bool guessed_trip_count = false; - nir_loop_terminator *limiting_terminator = NULL; - int max_trip_count = -1; - - list_for_each_entry(nir_loop_terminator, terminator, - &state->loop->info->loop_terminator_list, - loop_terminator_link) { - assert(terminator->nif->condition.is_ssa); - nir_ssa_scalar cond = { terminator->nif->condition.ssa, 0 }; - - if (!nir_ssa_scalar_is_alu(cond)) { - /* If we get here the loop is dead and will get cleaned up by the - * nir_opt_dead_cf pass. - */ - trip_count_known = false; - terminator->exact_trip_count_unknown = true; - continue; - } - - nir_op alu_op = nir_ssa_scalar_alu_op(cond); - - bool invert_cond = terminator->continue_from_then; - - bool limit_rhs; - nir_ssa_scalar basic_ind = { NULL, 0 }; - nir_ssa_scalar limit; - if ((alu_op == nir_op_inot || alu_op == nir_op_ieq) && - try_find_trip_count_vars_in_iand(&cond, &basic_ind, &limit, - &limit_rhs, state)) { - - /* The loop is exiting on (x && y) == 0 so we need to get the - * inverse of x or y (i.e. which ever contained the induction var) in - * order to compute the trip count. - */ - alu_op = nir_ssa_scalar_alu_op(cond); - invert_cond = !invert_cond; - trip_count_known = false; - terminator->exact_trip_count_unknown = true; - } - - if (!basic_ind.def) { - if (nir_is_supported_terminator_condition(cond)) { - /* Extract and inverse the comparision if it is wrapped in an inot - */ - if (alu_op == nir_op_inot) { - cond = nir_ssa_scalar_chase_alu_src(cond, 0); - alu_op = nir_ssa_scalar_alu_op(cond); - invert_cond = !invert_cond; - } - - get_induction_and_limit_vars(cond, &basic_ind, - &limit, &limit_rhs, state); - } - } - - /* The comparison has to have a basic induction variable for us to be - * able to find trip counts. - */ - if (!basic_ind.def) { - trip_count_known = false; - terminator->exact_trip_count_unknown = true; - continue; - } - - terminator->induction_rhs = !limit_rhs; - - /* Attempt to find a constant limit for the loop */ - nir_const_value limit_val; - if (nir_ssa_scalar_is_const(limit)) { - limit_val = nir_ssa_scalar_as_const_value(limit); - } else { - trip_count_known = false; - - if (!try_find_limit_of_alu(limit, &limit_val, terminator, state)) { - /* Guess loop limit based on array access */ - if (!guess_loop_limit(state, &limit_val, basic_ind)) { - terminator->exact_trip_count_unknown = true; - continue; - } - - guessed_trip_count = true; - } - } - - /* We have determined that we have the following constants: - * (With the typical int i = 0; i < x; i++; as an example) - * - Upper limit. - * - Starting value - * - Step / iteration size - * Thats all thats needed to calculate the trip-count - */ - - nir_loop_variable *lv = get_loop_var(basic_ind.def, state); - - /* The basic induction var might be a vector but, because we guarantee - * earlier that the phi source has a scalar swizzle, we can take the - * component from basic_ind. - */ - nir_ssa_scalar initial_s = { lv->init_src->ssa, basic_ind.comp }; - nir_ssa_scalar alu_s = { - lv->update_src->src.ssa, - lv->update_src->swizzle[basic_ind.comp] - }; - - /* We are not guaranteed by that at one of these sources is a constant. - * Try to find one. - */ - if (!nir_ssa_scalar_is_const(initial_s) || - !nir_ssa_scalar_is_const(alu_s)) - continue; - - nir_const_value initial_val = nir_ssa_scalar_as_const_value(initial_s); - nir_const_value step_val = nir_ssa_scalar_as_const_value(alu_s); - - int iterations = calculate_iterations(lv->basis, limit.def, - initial_val, step_val, limit_val, - nir_instr_as_alu(lv->update_src->src.parent_instr), - cond, - alu_op, limit_rhs, - invert_cond, - execution_mode, - max_unroll_iterations); - - /* Where we not able to calculate the iteration count */ - if (iterations == -1) { - trip_count_known = false; - guessed_trip_count = false; - terminator->exact_trip_count_unknown = true; - continue; - } - - if (guessed_trip_count) { - guessed_trip_count = false; - terminator->exact_trip_count_unknown = true; - if (state->loop->info->guessed_trip_count == 0 || - state->loop->info->guessed_trip_count > iterations) - state->loop->info->guessed_trip_count = iterations; - - continue; - } - - /* If this is the first run or we have found a smaller amount of - * iterations than previously (we have identified a more limiting - * terminator) set the trip count and limiting terminator. - */ - if (max_trip_count == -1 || iterations < max_trip_count) { - max_trip_count = iterations; - limiting_terminator = terminator; - } - } - - state->loop->info->exact_trip_count_known = trip_count_known; - if (max_trip_count > -1) - state->loop->info->max_trip_count = max_trip_count; - state->loop->info->limiting_terminator = limiting_terminator; -} - -static bool -force_unroll_array_access(loop_info_state *state, nir_deref_instr *deref, - bool contains_sampler) -{ - unsigned array_size = find_array_access_via_induction(state, deref, NULL); - if (array_size) { - if ((array_size == state->loop->info->max_trip_count) && - nir_deref_mode_must_be(deref, nir_var_shader_in | - nir_var_shader_out | - nir_var_shader_temp | - nir_var_function_temp)) - return true; - - if (nir_deref_mode_must_be(deref, state->indirect_mask)) - return true; - - if (contains_sampler && state->force_unroll_sampler_indirect) - return true; - } - - return false; -} - -static bool -force_unroll_heuristics(loop_info_state *state, nir_block *block) -{ - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_tex) { - nir_tex_instr *tex_instr = nir_instr_as_tex(instr); - int sampler_idx = - nir_tex_instr_src_index(tex_instr, - nir_tex_src_sampler_deref); - - - if (sampler_idx >= 0) { - nir_deref_instr *deref = - nir_instr_as_deref(tex_instr->src[sampler_idx].src.ssa->parent_instr); - if (force_unroll_array_access(state, deref, true)) - return true; - } - } - - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - /* Check for arrays variably-indexed by a loop induction variable. - * Unrolling the loop may convert that access into constant-indexing. - */ - if (intrin->intrinsic == nir_intrinsic_load_deref || - intrin->intrinsic == nir_intrinsic_store_deref || - intrin->intrinsic == nir_intrinsic_copy_deref) { - if (force_unroll_array_access(state, - nir_src_as_deref(intrin->src[0]), - false)) - return true; - - if (intrin->intrinsic == nir_intrinsic_copy_deref && - force_unroll_array_access(state, - nir_src_as_deref(intrin->src[1]), - false)) - return true; - } - } - - return false; -} - -static void -get_loop_info(loop_info_state *state, nir_function_impl *impl) -{ - nir_shader *shader = impl->function->shader; - const nir_shader_compiler_options *options = shader->options; - - /* Add all entries in the outermost part of the loop to the processing list - * Mark the entries in conditionals or in nested loops accordingly - */ - foreach_list_typed_safe(nir_cf_node, node, node, &state->loop->body) { - switch (node->type) { - - case nir_cf_node_block: - init_loop_block(nir_cf_node_as_block(node), state, false, false); - break; - - case nir_cf_node_if: - nir_foreach_block_in_cf_node(block, node) - init_loop_block(block, state, true, false); - break; - - case nir_cf_node_loop: - nir_foreach_block_in_cf_node(block, node) { - init_loop_block(block, state, false, true); - } - break; - - case nir_cf_node_function: - break; - } - } - - /* Try to find all simple terminators of the loop. If we can't find any, - * or we find possible terminators that have side effects then bail. - */ - if (!find_loop_terminators(state)) { - list_for_each_entry_safe(nir_loop_terminator, terminator, - &state->loop->info->loop_terminator_list, - loop_terminator_link) { - list_del(&terminator->loop_terminator_link); - ralloc_free(terminator); - } - return; - } - - /* Induction analysis needs invariance information so get that first */ - compute_invariance_information(state); - - /* We have invariance information so try to find induction variables */ - if (!compute_induction_information(state)) - return; - - /* Run through each of the terminators and try to compute a trip-count */ - find_trip_count(state, - impl->function->shader->info.float_controls_execution_mode, - impl->function->shader->options->max_unroll_iterations); - - nir_foreach_block_in_cf_node(block, &state->loop->cf_node) { - nir_foreach_instr(instr, block) { - state->loop->info->instr_cost += instr_cost(state, instr, options); - } - - if (state->loop->info->force_unroll) - continue; - - if (force_unroll_heuristics(state, block)) { - state->loop->info->force_unroll = true; - } - } -} - -static loop_info_state * -initialize_loop_info_state(nir_loop *loop, void *mem_ctx, - nir_function_impl *impl) -{ - loop_info_state *state = rzalloc(mem_ctx, loop_info_state); - state->loop_vars = ralloc_array(mem_ctx, nir_loop_variable, - impl->ssa_alloc); - state->loop_vars_init = rzalloc_array(mem_ctx, BITSET_WORD, - BITSET_WORDS(impl->ssa_alloc)); - state->loop = loop; - - list_inithead(&state->process_list); - - if (loop->info) - ralloc_free(loop->info); - - loop->info = rzalloc(loop, nir_loop_info); - - list_inithead(&loop->info->loop_terminator_list); - - return state; -} - -static void -process_loops(nir_cf_node *cf_node, nir_variable_mode indirect_mask, - bool force_unroll_sampler_indirect) -{ - switch (cf_node->type) { - case nir_cf_node_block: - return; - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(cf_node); - foreach_list_typed(nir_cf_node, nested_node, node, &if_stmt->then_list) - process_loops(nested_node, indirect_mask, force_unroll_sampler_indirect); - foreach_list_typed(nir_cf_node, nested_node, node, &if_stmt->else_list) - process_loops(nested_node, indirect_mask, force_unroll_sampler_indirect); - return; - } - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - - foreach_list_typed(nir_cf_node, nested_node, node, &loop->body) - process_loops(nested_node, indirect_mask, force_unroll_sampler_indirect); - break; - } - default: - unreachable("unknown cf node type"); - } - - nir_loop *loop = nir_cf_node_as_loop(cf_node); - nir_function_impl *impl = nir_cf_node_get_function(cf_node); - void *mem_ctx = ralloc_context(NULL); - - loop_info_state *state = initialize_loop_info_state(loop, mem_ctx, impl); - state->indirect_mask = indirect_mask; - state->force_unroll_sampler_indirect = force_unroll_sampler_indirect; - - get_loop_info(state, impl); - - ralloc_free(mem_ctx); -} - -void -nir_loop_analyze_impl(nir_function_impl *impl, - nir_variable_mode indirect_mask, - bool force_unroll_sampler_indirect) -{ - nir_index_ssa_defs(impl); - foreach_list_typed(nir_cf_node, node, node, &impl->body) - process_loops(node, indirect_mask, force_unroll_sampler_indirect); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_loop_analyze.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_loop_analyze.h deleted file mode 100644 index 11791e1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_loop_analyze.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_LOOP_ANALYZE_H -#define NIR_LOOP_ANALYZE_H - -#include "nir.h" - -/* Returns true if nir_cf_node contains a jump other than the expected_jump - * parameter. - */ -static inline bool -contains_other_jump(nir_cf_node *node, nir_instr *expected_jump) -{ - switch (node->type) { - case nir_cf_node_block: { - nir_instr *lst_instr = nir_block_last_instr(nir_cf_node_as_block(node)); - - /* dead_cf should have eliminated any instruction after the first break - */ - nir_foreach_instr(instr, nir_cf_node_as_block(node)) - assert(instr->type != nir_instr_type_jump || instr == lst_instr); - - if (lst_instr && lst_instr->type == nir_instr_type_jump && - lst_instr != expected_jump) - return true; - else - return false; - } - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(node); - - foreach_list_typed_safe(nir_cf_node, node, node, &if_stmt->then_list) { - if (contains_other_jump(node, expected_jump)) - return true; - } - - foreach_list_typed_safe(nir_cf_node, node, node, &if_stmt->else_list) { - if (contains_other_jump(node, expected_jump)) - return true; - } - - return false; - } - case nir_cf_node_loop: - /* the jumps of nested loops are unrelated */ - return false; - - default: - unreachable("Unhandled cf node type"); - } -} - -/* Here we define a trivial if as containing only a single break that must be - * located at the end of either the then or else branch of the top level if, - * there must be no other breaks or any other type of jump. Or we pass NULL - * to break_block the if must contains no jumps at all. - */ -static inline bool -nir_is_trivial_loop_if(nir_if *nif, nir_block *break_block) -{ - nir_instr *last_instr = NULL; - - if (break_block) { - last_instr = nir_block_last_instr(break_block); - assert(last_instr && last_instr->type == nir_instr_type_jump && - nir_instr_as_jump(last_instr)->type == nir_jump_break); - } - - if (contains_other_jump(&nif->cf_node, last_instr)) - return false; - - return true; -} - -static inline bool -nir_is_terminator_condition_with_two_inputs(nir_ssa_scalar cond) -{ - if (!nir_ssa_scalar_is_alu(cond)) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(cond.def->parent_instr); - return nir_alu_instr_is_comparison(alu) && - nir_op_infos[alu->op].num_inputs == 2; -} - -static inline bool -nir_is_supported_terminator_condition(nir_ssa_scalar cond) -{ - if (!nir_ssa_scalar_is_alu(cond)) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(cond.def->parent_instr); - return nir_alu_instr_is_comparison(alu) && - (nir_op_infos[alu->op].num_inputs == 2 || - (alu->op == nir_op_inot && - nir_is_terminator_condition_with_two_inputs(nir_ssa_scalar_chase_alu_src(cond, 0)))); -} - -#endif /* NIR_LOOP_ANALYZE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alpha_test.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alpha_test.c deleted file mode 100644 index aa547aa..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alpha_test.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright © 2017 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 - * - * Implements GL alpha testing by comparing the output color's alpha to the - * alpha_ref intrinsic and emitting a discard based on it. - * - * The alpha_to_one value overrides the source alpha to 1.0 to implement - * GL_SAMPLE_ALPHA_TO_ONE, which applies before the alpha test (and would be - * rather silly to use with alpha test, but the spec permits). - */ - -#include "nir.h" -#include "nir_builder.h" - -void -nir_lower_alpha_test(nir_shader *shader, enum compare_func func, - bool alpha_to_one, - const gl_state_index16 *alpha_ref_state_tokens) -{ - assert(alpha_ref_state_tokens); - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - nir_foreach_function(function, shader) { - nir_function_impl *impl = function->impl; - nir_builder b; - nir_builder_init(&b, impl); - b.cursor = nir_before_cf_list(&impl->body); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - nir_variable *out = NULL; - - switch (intr->intrinsic) { - case nir_intrinsic_store_deref: - out = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0])); - break; - case nir_intrinsic_store_output: - /* already had i/o lowered.. lookup the matching output var: */ - nir_foreach_shader_out_variable(var, shader) { - int drvloc = var->data.driver_location; - if (nir_intrinsic_base(intr) == drvloc) { - out = var; - break; - } - } - assume(out); - break; - default: - continue; - } - - if (out->data.mode != nir_var_shader_out) - continue; - - if (out->data.location != FRAG_RESULT_COLOR && - out->data.location != FRAG_RESULT_DATA0) - continue; - - b.cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *alpha; - if (alpha_to_one) { - alpha = nir_imm_float(&b, 1.0); - } else if (intr->intrinsic == nir_intrinsic_store_deref) { - alpha = nir_channel(&b, nir_ssa_for_src(&b, intr->src[1], 4), - 3); - } else { - alpha = nir_channel(&b, nir_ssa_for_src(&b, intr->src[0], 4), - 3); - } - - nir_variable *var = nir_variable_create(shader, - nir_var_uniform, - glsl_float_type(), - "gl_AlphaRefMESA"); - var->num_state_slots = 1; - var->state_slots = rzalloc_array(var, nir_state_slot, 1); - memcpy(var->state_slots[0].tokens, - alpha_ref_state_tokens, - sizeof(var->state_slots[0].tokens)); - nir_ssa_def *alpha_ref = nir_load_var(&b, var); - - nir_ssa_def *condition = - nir_compare_func(&b, func, alpha, alpha_ref); - - nir_discard_if(&b, nir_inot(&b, condition)); - shader->info.fs.uses_discard = true; - } - } - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alu.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alu.c deleted file mode 100644 index 3b0dbaa..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alu.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * Copyright © 2018 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** nir_lower_alu.c - * - * NIR's home for miscellaneous ALU operation lowering implementations. - * - * Most NIR ALU lowering occurs in nir_opt_algebraic.py, since it's generally - * easy to write them there. However, if terms appear multiple times in the - * lowered code, it can get very verbose and cause a lot of work for CSE, so - * it may end up being easier to write out in C code. - * - * The shader must be in SSA for this pass. - */ - -#define LOWER_MUL_HIGH (1 << 0) - -static bool -lower_alu_instr(nir_builder *b, nir_instr *instr_, UNUSED void *cb_data) -{ - if (instr_->type != nir_instr_type_alu) - return false; - - nir_alu_instr *instr = nir_instr_as_alu(instr_); - - nir_ssa_def *lowered = NULL; - - assert(instr->dest.dest.is_ssa); - - b->cursor = nir_before_instr(&instr->instr); - b->exact = instr->exact; - - switch (instr->op) { - case nir_op_bitfield_reverse: - if (b->shader->options->lower_bitfield_reverse) { - /* For more details, see: - * - * http://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel - */ - nir_ssa_def *c1 = nir_imm_int(b, 1); - nir_ssa_def *c2 = nir_imm_int(b, 2); - nir_ssa_def *c4 = nir_imm_int(b, 4); - nir_ssa_def *c8 = nir_imm_int(b, 8); - nir_ssa_def *c16 = nir_imm_int(b, 16); - nir_ssa_def *c33333333 = nir_imm_int(b, 0x33333333); - nir_ssa_def *c55555555 = nir_imm_int(b, 0x55555555); - nir_ssa_def *c0f0f0f0f = nir_imm_int(b, 0x0f0f0f0f); - nir_ssa_def *c00ff00ff = nir_imm_int(b, 0x00ff00ff); - - lowered = nir_ssa_for_alu_src(b, instr, 0); - - /* Swap odd and even bits. */ - lowered = nir_ior(b, - nir_iand(b, nir_ushr(b, lowered, c1), c55555555), - nir_ishl(b, nir_iand(b, lowered, c55555555), c1)); - - /* Swap consecutive pairs. */ - lowered = nir_ior(b, - nir_iand(b, nir_ushr(b, lowered, c2), c33333333), - nir_ishl(b, nir_iand(b, lowered, c33333333), c2)); - - /* Swap nibbles. */ - lowered = nir_ior(b, - nir_iand(b, nir_ushr(b, lowered, c4), c0f0f0f0f), - nir_ishl(b, nir_iand(b, lowered, c0f0f0f0f), c4)); - - /* Swap bytes. */ - lowered = nir_ior(b, - nir_iand(b, nir_ushr(b, lowered, c8), c00ff00ff), - nir_ishl(b, nir_iand(b, lowered, c00ff00ff), c8)); - - lowered = nir_ior(b, - nir_ushr(b, lowered, c16), - nir_ishl(b, lowered, c16)); - } - break; - - case nir_op_bit_count: - if (b->shader->options->lower_bit_count) { - /* For more details, see: - * - * http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel - */ - nir_ssa_def *c1 = nir_imm_int(b, 1); - nir_ssa_def *c2 = nir_imm_int(b, 2); - nir_ssa_def *c4 = nir_imm_int(b, 4); - nir_ssa_def *c24 = nir_imm_int(b, 24); - nir_ssa_def *c33333333 = nir_imm_int(b, 0x33333333); - nir_ssa_def *c55555555 = nir_imm_int(b, 0x55555555); - nir_ssa_def *c0f0f0f0f = nir_imm_int(b, 0x0f0f0f0f); - nir_ssa_def *c01010101 = nir_imm_int(b, 0x01010101); - - lowered = nir_ssa_for_alu_src(b, instr, 0); - - lowered = nir_isub(b, lowered, - nir_iand(b, nir_ushr(b, lowered, c1), c55555555)); - - lowered = nir_iadd(b, - nir_iand(b, lowered, c33333333), - nir_iand(b, nir_ushr(b, lowered, c2), c33333333)); - - lowered = nir_ushr(b, - nir_imul(b, - nir_iand(b, - nir_iadd(b, - lowered, - nir_ushr(b, lowered, c4)), - c0f0f0f0f), - c01010101), - c24); - } - break; - - case nir_op_imul_high: - case nir_op_umul_high: - if (b->shader->options->lower_mul_high) { - nir_ssa_def *src0 = nir_ssa_for_alu_src(b, instr, 0); - nir_ssa_def *src1 = nir_ssa_for_alu_src(b, instr, 1); - if (src0->bit_size < 32) { - /* Just do the math in 32-bit space and shift the result */ - nir_alu_type base_type = nir_op_infos[instr->op].output_type; - - nir_ssa_def *src0_32 = nir_type_convert(b, src0, base_type, base_type | 32, nir_rounding_mode_undef); - nir_ssa_def *src1_32 = nir_type_convert(b, src1, base_type, base_type | 32, nir_rounding_mode_undef); - nir_ssa_def *dest_32 = nir_imul(b, src0_32, src1_32); - nir_ssa_def *dest_shifted = nir_ishr(b, dest_32, nir_imm_int(b, src0->bit_size)); - lowered = nir_type_convert(b, dest_shifted, base_type, base_type | src0->bit_size, nir_rounding_mode_undef); - } else { - nir_ssa_def *cshift = nir_imm_int(b, src0->bit_size / 2); - nir_ssa_def *cmask = nir_imm_intN_t(b, (1ull << (src0->bit_size / 2)) - 1, src0->bit_size); - nir_ssa_def *different_signs = NULL; - if (instr->op == nir_op_imul_high) { - nir_ssa_def *c0 = nir_imm_intN_t(b, 0, src0->bit_size); - different_signs = nir_ixor(b, - nir_ilt(b, src0, c0), - nir_ilt(b, src1, c0)); - src0 = nir_iabs(b, src0); - src1 = nir_iabs(b, src1); - } - - /* ABCD - * * EFGH - * ====== - * (GH * CD) + (GH * AB) << 16 + (EF * CD) << 16 + (EF * AB) << 32 - * - * Start by splitting into the 4 multiplies. - */ - nir_ssa_def *src0l = nir_iand(b, src0, cmask); - nir_ssa_def *src1l = nir_iand(b, src1, cmask); - nir_ssa_def *src0h = nir_ushr(b, src0, cshift); - nir_ssa_def *src1h = nir_ushr(b, src1, cshift); - - nir_ssa_def *lo = nir_imul(b, src0l, src1l); - nir_ssa_def *m1 = nir_imul(b, src0l, src1h); - nir_ssa_def *m2 = nir_imul(b, src0h, src1l); - nir_ssa_def *hi = nir_imul(b, src0h, src1h); - - nir_ssa_def *tmp; - - tmp = nir_ishl(b, m1, cshift); - hi = nir_iadd(b, hi, nir_uadd_carry(b, lo, tmp)); - lo = nir_iadd(b, lo, tmp); - hi = nir_iadd(b, hi, nir_ushr(b, m1, cshift)); - - tmp = nir_ishl(b, m2, cshift); - hi = nir_iadd(b, hi, nir_uadd_carry(b, lo, tmp)); - lo = nir_iadd(b, lo, tmp); - hi = nir_iadd(b, hi, nir_ushr(b, m2, cshift)); - - if (instr->op == nir_op_imul_high) { - /* For channels where different_signs is set we have to perform a - * 64-bit negation. This is *not* the same as just negating the - * high 32-bits. Consider -3 * 2. The high 32-bits is 0, but the - * desired result is -1, not -0! Recall -x == ~x + 1. - */ - nir_ssa_def *c1 = nir_imm_intN_t(b, 1, src0->bit_size); - hi = nir_bcsel(b, different_signs, - nir_iadd(b, - nir_inot(b, hi), - nir_uadd_carry(b, nir_inot(b, lo), c1)), - hi); - } - - lowered = hi; - } - } - break; - - default: - break; - } - - if (lowered) { - nir_ssa_def_rewrite_uses(&instr->dest.dest.ssa, lowered); - nir_instr_remove(&instr->instr); - return true; - } else { - return false; - } -} - -bool -nir_lower_alu(nir_shader *shader) -{ - if (!shader->options->lower_bitfield_reverse && - !shader->options->lower_mul_high) - return false; - - return nir_shader_instructions_pass(shader, lower_alu_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alu_width.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alu_width.c deleted file mode 100644 index 887aed5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_alu_width.c +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Copyright © 2014-2015 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -struct alu_width_data { - nir_vectorize_cb cb; - const void *data; -}; - -/** @file nir_lower_alu_width.c - * - * Replaces nir_alu_instr operations with more than one channel used in the - * arguments with individual per-channel operations. - * - * Optionally, a callback function which returns the max vectorization width - * per instruction can be provided. - * - * The max vectorization width must be a power of 2. - */ - -static bool -inst_is_vector_alu(const nir_instr *instr, const void *_state) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - - /* There is no ALU instruction which has a scalar destination, scalar - * src[0], and some other vector source. - */ - assert(alu->dest.dest.is_ssa); - assert(alu->src[0].src.is_ssa); - return alu->dest.dest.ssa.num_components > 1 || - nir_op_infos[alu->op].input_sizes[0] > 1; -} - -/* Checks whether all operands of an ALU instruction are swizzled - * within the targeted vectorization width. - * - * The assumption here is that a vecN instruction can only swizzle - * within the first N channels of the values it consumes, irrespective - * of the capabilities of the instruction which produced those values. - * If we assume values are packed consistently (i.e., they always start - * at the beginning of a hardware register), we can actually access any - * aligned group of N channels so long as we stay within the group. - * This means for a vectorization width of 4 that only swizzles from - * either [xyzw] or [abcd] etc are allowed. For a width of 2 these are - * swizzles from either [xy] or [zw] etc. - */ -static bool -alu_is_swizzled_in_bounds(const nir_alu_instr *alu, unsigned width) -{ - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (nir_op_infos[alu->op].input_sizes[i] == 1) - continue; - - unsigned mask = ~(width - 1); - for (unsigned j = 1; j < alu->dest.dest.ssa.num_components; j++) { - if ((alu->src[i].swizzle[0] & mask) != (alu->src[i].swizzle[j] & mask)) - return false; - } - } - - return true; -} - -static void -nir_alu_ssa_dest_init(nir_alu_instr *alu, unsigned num_components, - unsigned bit_size) -{ - nir_ssa_dest_init(&alu->instr, &alu->dest.dest, num_components, - bit_size, NULL); - alu->dest.write_mask = (1 << num_components) - 1; -} - -static nir_ssa_def * -lower_reduction(nir_alu_instr *alu, nir_op chan_op, nir_op merge_op, - nir_builder *builder, bool reverse_order) -{ - unsigned num_components = nir_op_infos[alu->op].input_sizes[0]; - - nir_ssa_def *last = NULL; - for (int i = 0; i < num_components; i++) { - int channel = reverse_order ? num_components - 1 - i : i; - nir_alu_instr *chan = nir_alu_instr_create(builder->shader, chan_op); - nir_alu_ssa_dest_init(chan, 1, alu->dest.dest.ssa.bit_size); - nir_alu_src_copy(&chan->src[0], &alu->src[0], chan); - chan->src[0].swizzle[0] = chan->src[0].swizzle[channel]; - if (nir_op_infos[chan_op].num_inputs > 1) { - assert(nir_op_infos[chan_op].num_inputs == 2); - nir_alu_src_copy(&chan->src[1], &alu->src[1], chan); - chan->src[1].swizzle[0] = chan->src[1].swizzle[channel]; - } - chan->exact = alu->exact; - - nir_builder_instr_insert(builder, &chan->instr); - - if (i == 0) { - last = &chan->dest.dest.ssa; - } else { - last = nir_build_alu(builder, merge_op, - last, &chan->dest.dest.ssa, NULL, NULL); - } - } - - return last; -} - -static inline bool -will_lower_ffma(nir_shader *shader, unsigned bit_size) -{ - switch (bit_size) { - case 16: - return shader->options->lower_ffma16; - case 32: - return shader->options->lower_ffma32; - case 64: - return shader->options->lower_ffma64; - } - unreachable("bad bit size"); -} - -static nir_ssa_def * -lower_fdot(nir_alu_instr *alu, nir_builder *builder) -{ - /* Reversed order can result in lower instruction count because it - * creates more MAD/FMA in the case of fdot(a, vec4(b, 1.0)). - * Some games expect xyzw order, so only reverse the order for imprecise fdot. - */ - bool reverse_order = !builder->exact; - - /* If we don't want to lower ffma, create several ffma instead of fmul+fadd - * and fusing later because fusing is not possible for exact fdot instructions. - */ - if (will_lower_ffma(builder->shader, alu->dest.dest.ssa.bit_size)) - return lower_reduction(alu, nir_op_fmul, nir_op_fadd, builder, reverse_order); - - unsigned num_components = nir_op_infos[alu->op].input_sizes[0]; - - nir_ssa_def *prev = NULL; - for (int i = 0; i < num_components; i++) { - int channel = reverse_order ? num_components - 1 - i : i; - nir_alu_instr *instr = nir_alu_instr_create( - builder->shader, prev ? nir_op_ffma : nir_op_fmul); - nir_alu_ssa_dest_init(instr, 1, alu->dest.dest.ssa.bit_size); - for (unsigned j = 0; j < 2; j++) { - nir_alu_src_copy(&instr->src[j], &alu->src[j], instr); - instr->src[j].swizzle[0] = alu->src[j].swizzle[channel]; - } - if (i != 0) - instr->src[2].src = nir_src_for_ssa(prev); - instr->exact = builder->exact; - - nir_builder_instr_insert(builder, &instr->instr); - - prev = &instr->dest.dest.ssa; - } - - return prev; -} - -static nir_ssa_def * -lower_alu_instr_width(nir_builder *b, nir_instr *instr, void *_data) -{ - struct alu_width_data *data = _data; - nir_alu_instr *alu = nir_instr_as_alu(instr); - unsigned num_src = nir_op_infos[alu->op].num_inputs; - unsigned i, chan; - - assert(alu->dest.dest.is_ssa); - assert(alu->dest.write_mask != 0); - - b->exact = alu->exact; - - unsigned num_components = alu->dest.dest.ssa.num_components; - unsigned target_width = 1; - - if (data->cb) { - target_width = data->cb(instr, data->data); - assert(util_is_power_of_two_or_zero(target_width)); - if (target_width == 0) - return NULL; - } - -#define LOWER_REDUCTION(name, chan, merge) \ - case name##2: \ - case name##3: \ - case name##4: \ - case name##8: \ - case name##16: \ - return lower_reduction(alu, chan, merge, b, true); \ - - switch (alu->op) { - case nir_op_vec16: - case nir_op_vec8: - case nir_op_vec5: - case nir_op_vec4: - case nir_op_vec3: - case nir_op_vec2: - case nir_op_cube_face_coord_amd: - case nir_op_cube_face_index_amd: - /* We don't need to scalarize these ops, they're the ones generated to - * group up outputs into a value that can be SSAed. - */ - return NULL; - - case nir_op_pack_half_2x16: { - if (!b->shader->options->lower_pack_half_2x16) - return NULL; - - nir_ssa_def *src_vec2 = nir_ssa_for_alu_src(b, alu, 0); - return nir_pack_half_2x16_split(b, nir_channel(b, src_vec2, 0), - nir_channel(b, src_vec2, 1)); - } - - case nir_op_unpack_unorm_4x8: - case nir_op_unpack_snorm_4x8: - case nir_op_unpack_unorm_2x16: - case nir_op_unpack_snorm_2x16: - /* There is no scalar version of these ops, unless we were to break it - * down to bitshifts and math (which is definitely not intended). - */ - return NULL; - - case nir_op_unpack_half_2x16_flush_to_zero: - case nir_op_unpack_half_2x16: { - if (!b->shader->options->lower_unpack_half_2x16) - return NULL; - - nir_ssa_def *packed = nir_ssa_for_alu_src(b, alu, 0); - if (alu->op == nir_op_unpack_half_2x16_flush_to_zero) { - return nir_vec2(b, - nir_unpack_half_2x16_split_x_flush_to_zero(b, - packed), - nir_unpack_half_2x16_split_y_flush_to_zero(b, - packed)); - } else { - return nir_vec2(b, - nir_unpack_half_2x16_split_x(b, packed), - nir_unpack_half_2x16_split_y(b, packed)); - } - } - - case nir_op_pack_uvec2_to_uint: { - assert(b->shader->options->lower_pack_snorm_2x16 || - b->shader->options->lower_pack_unorm_2x16); - - nir_ssa_def *word = nir_extract_u16(b, nir_ssa_for_alu_src(b, alu, 0), - nir_imm_int(b, 0)); - return nir_ior(b, nir_ishl(b, nir_channel(b, word, 1), - nir_imm_int(b, 16)), - nir_channel(b, word, 0)); - } - - case nir_op_pack_uvec4_to_uint: { - assert(b->shader->options->lower_pack_snorm_4x8 || - b->shader->options->lower_pack_unorm_4x8); - - nir_ssa_def *byte = nir_extract_u8(b, nir_ssa_for_alu_src(b, alu, 0), - nir_imm_int(b, 0)); - return nir_ior(b, nir_ior(b, nir_ishl(b, nir_channel(b, byte, 3), - nir_imm_int(b, 24)), - nir_ishl(b, nir_channel(b, byte, 2), - nir_imm_int(b, 16))), - nir_ior(b, nir_ishl(b, nir_channel(b, byte, 1), - nir_imm_int(b, 8)), - nir_channel(b, byte, 0))); - } - - case nir_op_fdph: { - nir_ssa_def *src0_vec = nir_ssa_for_alu_src(b, alu, 0); - nir_ssa_def *src1_vec = nir_ssa_for_alu_src(b, alu, 1); - - /* Only use reverse order for imprecise fdph, see explanation in lower_fdot. */ - bool reverse_order = !b->exact; - if (will_lower_ffma(b->shader, alu->dest.dest.ssa.bit_size)) { - nir_ssa_def *sum[4]; - for (unsigned i = 0; i < 3; i++) { - int dest = reverse_order ? 3 - i : i; - sum[dest] = nir_fmul(b, nir_channel(b, src0_vec, i), - nir_channel(b, src1_vec, i)); - } - sum[reverse_order ? 0 : 3] = nir_channel(b, src1_vec, 3); - - return nir_fadd(b, nir_fadd(b, nir_fadd(b, sum[0], sum[1]), sum[2]), sum[3]); - } else if (reverse_order) { - nir_ssa_def *sum = nir_channel(b, src1_vec, 3); - for (int i = 2; i >= 0; i--) - sum = nir_ffma(b, nir_channel(b, src0_vec, i), nir_channel(b, src1_vec, i), sum); - return sum; - } else { - nir_ssa_def *sum = nir_fmul(b, nir_channel(b, src0_vec, 0), nir_channel(b, src1_vec, 0)); - sum = nir_ffma(b, nir_channel(b, src0_vec, 1), nir_channel(b, src1_vec, 1), sum); - sum = nir_ffma(b, nir_channel(b, src0_vec, 2), nir_channel(b, src1_vec, 2), sum); - return nir_fadd(b, sum, nir_channel(b, src1_vec, 3)); - } - } - - case nir_op_pack_64_2x32: { - if (!b->shader->options->lower_pack_64_2x32) - return NULL; - - nir_ssa_def *src_vec2 = nir_ssa_for_alu_src(b, alu, 0); - return nir_pack_64_2x32_split(b, nir_channel(b, src_vec2, 0), - nir_channel(b, src_vec2, 1)); - } - case nir_op_pack_64_4x16: { - if (!b->shader->options->lower_pack_64_4x16) - return NULL; - - nir_ssa_def *src_vec4 = nir_ssa_for_alu_src(b, alu, 0); - nir_ssa_def *xy = nir_pack_32_2x16_split(b, nir_channel(b, src_vec4, 0), - nir_channel(b, src_vec4, 1)); - nir_ssa_def *zw = nir_pack_32_2x16_split(b, nir_channel(b, src_vec4, 2), - nir_channel(b, src_vec4, 3)); - - return nir_pack_64_2x32_split(b, xy, zw); - } - case nir_op_pack_32_2x16: { - if (!b->shader->options->lower_pack_32_2x16) - return NULL; - - nir_ssa_def *src_vec2 = nir_ssa_for_alu_src(b, alu, 0); - return nir_pack_32_2x16_split(b, nir_channel(b, src_vec2, 0), - nir_channel(b, src_vec2, 1)); - } - case nir_op_unpack_64_2x32: - case nir_op_unpack_64_4x16: - case nir_op_unpack_32_2x16: - case nir_op_unpack_32_4x8: - case nir_op_unpack_double_2x32_dxil: - return NULL; - - case nir_op_fdot2: - case nir_op_fdot3: - case nir_op_fdot4: - case nir_op_fdot8: - case nir_op_fdot16: - return lower_fdot(alu, b); - - LOWER_REDUCTION(nir_op_ball_fequal, nir_op_feq, nir_op_iand); - LOWER_REDUCTION(nir_op_ball_iequal, nir_op_ieq, nir_op_iand); - LOWER_REDUCTION(nir_op_bany_fnequal, nir_op_fneu, nir_op_ior); - LOWER_REDUCTION(nir_op_bany_inequal, nir_op_ine, nir_op_ior); - LOWER_REDUCTION(nir_op_b8all_fequal, nir_op_feq8, nir_op_iand); - LOWER_REDUCTION(nir_op_b8all_iequal, nir_op_ieq8, nir_op_iand); - LOWER_REDUCTION(nir_op_b8any_fnequal, nir_op_fneu8, nir_op_ior); - LOWER_REDUCTION(nir_op_b8any_inequal, nir_op_ine8, nir_op_ior); - LOWER_REDUCTION(nir_op_b16all_fequal, nir_op_feq16, nir_op_iand); - LOWER_REDUCTION(nir_op_b16all_iequal, nir_op_ieq16, nir_op_iand); - LOWER_REDUCTION(nir_op_b16any_fnequal, nir_op_fneu16, nir_op_ior); - LOWER_REDUCTION(nir_op_b16any_inequal, nir_op_ine16, nir_op_ior); - LOWER_REDUCTION(nir_op_b32all_fequal, nir_op_feq32, nir_op_iand); - LOWER_REDUCTION(nir_op_b32all_iequal, nir_op_ieq32, nir_op_iand); - LOWER_REDUCTION(nir_op_b32any_fnequal, nir_op_fneu32, nir_op_ior); - LOWER_REDUCTION(nir_op_b32any_inequal, nir_op_ine32, nir_op_ior); - LOWER_REDUCTION(nir_op_fall_equal, nir_op_seq, nir_op_fmin); - LOWER_REDUCTION(nir_op_fany_nequal, nir_op_sne, nir_op_fmax); - - default: - break; - } - - if (num_components == 1) - return NULL; - - if (num_components <= target_width) { - /* If the ALU instr is swizzled outside the target width, - * reduce the target width. - */ - if (alu_is_swizzled_in_bounds(alu, target_width)) - return NULL; - else - target_width = DIV_ROUND_UP(num_components, 2); - } - - nir_alu_instr *vec = nir_alu_instr_create(b->shader, nir_op_vec(num_components)); - - for (chan = 0; chan < num_components; chan += target_width) { - unsigned components = MIN2(target_width, num_components - chan); - nir_alu_instr *lower = nir_alu_instr_create(b->shader, alu->op); - - for (i = 0; i < num_src; i++) { - nir_alu_src_copy(&lower->src[i], &alu->src[i], lower); - - /* We only handle same-size-as-dest (input_sizes[] == 0) or scalar - * args (input_sizes[] == 1). - */ - assert(nir_op_infos[alu->op].input_sizes[i] < 2); - for (int j = 0; j < components; j++) { - unsigned src_chan = nir_op_infos[alu->op].input_sizes[i] == 1 ? 0 : chan + j; - lower->src[i].swizzle[j] = alu->src[i].swizzle[src_chan]; - } - } - - nir_alu_ssa_dest_init(lower, components, alu->dest.dest.ssa.bit_size); - lower->dest.saturate = alu->dest.saturate; - lower->exact = alu->exact; - - for (i = 0; i < components; i++) { - vec->src[chan + i].src = nir_src_for_ssa(&lower->dest.dest.ssa); - vec->src[chan + i].swizzle[0] = i; - } - - nir_builder_instr_insert(b, &lower->instr); - } - - return nir_builder_alu_instr_finish_and_insert(b, vec); -} - -bool -nir_lower_alu_width(nir_shader *shader, nir_vectorize_cb cb, const void *_data) -{ - struct alu_width_data data = { - .cb = cb, - .data = _data, - }; - - return nir_shader_lower_instructions(shader, - inst_is_vector_alu, - lower_alu_instr_width, - &data); -} - -struct alu_to_scalar_data { - nir_instr_filter_cb cb; - const void *data; -}; - -static uint8_t -scalar_cb(const nir_instr *instr, const void *data) -{ - /* return vectorization-width = 1 for filtered instructions */ - const struct alu_to_scalar_data *filter = data; - return filter->cb(instr, filter->data) ? 1 : 0; -} - -bool -nir_lower_alu_to_scalar(nir_shader *shader, nir_instr_filter_cb cb, const void *_data) -{ - struct alu_to_scalar_data data = { - .cb = cb, - .data = _data, - }; - - return nir_lower_alu_width(shader, cb ? scalar_cb : NULL, &data); -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_amul.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_amul.c deleted file mode 100644 index 1d7c52c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_amul.c +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright © 2019 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_vla.h" - -/* Lowering for amul instructions, for drivers that support imul24. - * This pass will analyze indirect derefs, and convert corresponding - * amul instructions to either imul or imul24, depending on the - * required range. - * - * 1) Analyze the uniform variables and build a table of UBOs and SSBOs - * that are either too large, or might be too large (unknown size) - * for imul24 - * - * 2) Loop thru looking at all the intrinsics, finding dereferences of - * large variables, and recursively replacing all amul instructions - * used with imul - * - * 3) Finally loop again thru all instructions replacing any remaining - * amul with imul24. At this point any remaining amul instructions - * are not involved in calculating an offset into a large variable, - * thanks to the 2nd step, so they can be safely replace with imul24. - * - * Using two passes over all the instructions lets us handle the case - * where, due to CSE, an amul is used to calculate an offset into both - * a large and small variable. - */ - -typedef struct { - nir_shader *shader; - - int (*type_size)(const struct glsl_type *, bool); - - /* Tables of UBOs and SSBOs mapping driver_location/base whether - * they are too large to use imul24: - */ - bool *large_ubos; - bool *large_ssbos; - - /* for cases that we cannot determine UBO/SSBO index, track if *any* - * UBO/SSBO is too large for imul24: - */ - bool has_large_ubo; - bool has_large_ssbo; - - unsigned max_slot; - - bool progress; -} lower_state; - -/* Lower 'amul's in offset src of large variables to 'imul': */ -static bool -lower_large_src(nir_src *src, void *s) -{ - lower_state *state = s; - - assert(src->is_ssa); - - nir_instr *parent = src->ssa->parent_instr; - - /* No need to visit instructions we've already visited.. this also - * avoids infinite recursion when phi's are involved: - */ - if (parent->pass_flags) - return false; - - nir_foreach_src(parent, lower_large_src, state); - - if (parent->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(parent); - if (alu->op == nir_op_amul) { - alu->op = nir_op_imul; - state->progress = true; - } - } - - parent->pass_flags = 1; - - return true; -} - -static bool -large_ubo(lower_state *state, nir_src src) -{ - if (!nir_src_is_const(src)) - return state->has_large_ubo; - unsigned idx = nir_src_as_uint(src); - assert(idx < state->shader->info.num_ubos); - return state->large_ubos[idx]; -} - -static bool -large_ssbo(lower_state *state, nir_src src) -{ - if (!nir_src_is_const(src)) - return state->has_large_ssbo; - unsigned idx = nir_src_as_uint(src); - assert(idx < state->shader->info.num_ssbos); - return state->large_ssbos[idx]; -} - -static void -lower_intrinsic(lower_state *state, nir_intrinsic_instr *intr) -{ - switch (intr->intrinsic) { - case nir_intrinsic_load_ubo: - //# src[] = { buffer_index, offset }. - if (large_ubo(state, intr->src[0])) - lower_large_src(&intr->src[1], state); - return; - - case nir_intrinsic_load_ssbo: - //# src[] = { buffer_index, offset }. - if (large_ssbo(state, intr->src[0])) - lower_large_src(&intr->src[1], state); - return; - - case nir_intrinsic_store_ssbo: - //# src[] = { value, block_index, offset } - if (large_ssbo(state, intr->src[1])) - lower_large_src(&intr->src[2], state); - return; - - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - /* 0: SSBO index - * 1: offset - */ - if (large_ssbo(state, intr->src[0])) - lower_large_src(&intr->src[1], state); - return; - - case nir_intrinsic_global_atomic_add: - case nir_intrinsic_global_atomic_imin: - case nir_intrinsic_global_atomic_umin: - case nir_intrinsic_global_atomic_imax: - case nir_intrinsic_global_atomic_umax: - case nir_intrinsic_global_atomic_and: - case nir_intrinsic_global_atomic_or: - case nir_intrinsic_global_atomic_xor: - case nir_intrinsic_global_atomic_exchange: - case nir_intrinsic_global_atomic_comp_swap: - case nir_intrinsic_global_atomic_fadd: - case nir_intrinsic_global_atomic_fmin: - case nir_intrinsic_global_atomic_fmax: - case nir_intrinsic_global_atomic_fcomp_swap: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_global: - /* just assume we that 24b is not sufficient: */ - lower_large_src(&intr->src[0], state); - return; - - case nir_intrinsic_store_global: - /* just assume we that 24b is not sufficient: */ - lower_large_src(&intr->src[1], state); - return; - - /* These should all be small enough to unconditionally use imul24: */ - case nir_intrinsic_shared_atomic_add: - case nir_intrinsic_shared_atomic_imin: - case nir_intrinsic_shared_atomic_umin: - case nir_intrinsic_shared_atomic_imax: - case nir_intrinsic_shared_atomic_umax: - case nir_intrinsic_shared_atomic_and: - case nir_intrinsic_shared_atomic_or: - case nir_intrinsic_shared_atomic_xor: - case nir_intrinsic_shared_atomic_exchange: - case nir_intrinsic_shared_atomic_comp_swap: - case nir_intrinsic_shared_atomic_fadd: - case nir_intrinsic_shared_atomic_fmin: - case nir_intrinsic_shared_atomic_fmax: - case nir_intrinsic_shared_atomic_fcomp_swap: - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_input: - case nir_intrinsic_load_output: - case nir_intrinsic_store_output: - default: - return; - } -} - -static void -lower_instr(lower_state *state, nir_instr *instr) -{ - if (instr->type == nir_instr_type_intrinsic) { - lower_intrinsic(state, nir_instr_as_intrinsic(instr)); - } -} - -static bool -is_large(lower_state *state, nir_variable *var) -{ - const struct glsl_type *type = glsl_without_array(var->type); - unsigned size = state->type_size(type, false); - - /* if size is not known (ie. VLA) then assume the worst: */ - if (!size) - return true; - - return size >= (1 << 23); -} - -bool -nir_lower_amul(nir_shader *shader, - int (*type_size)(const struct glsl_type *, bool)) -{ - assert(shader->options->has_imul24); - assert(type_size); - - NIR_VLA_FILL(bool, large_ubos, shader->info.num_ubos, 0); - NIR_VLA_FILL(bool, large_ssbos, shader->info.num_ssbos, 0); - - lower_state state = { - .shader = shader, - .type_size = type_size, - .large_ubos = large_ubos, - .large_ssbos = large_ssbos, - }; - - /* Figure out which UBOs or SSBOs are large enough to be - * disqualified from imul24: - */ - nir_foreach_variable_in_shader (var, shader) { - if (var->data.mode == nir_var_mem_ubo) { - if (is_large(&state, var)) { - state.has_large_ubo = true; - unsigned size = MAX2(1, glsl_array_size(var->type)); - for (unsigned i = 0; i < size; i++) - state.large_ubos[var->data.binding + i] = true; - } - } else if (var->data.mode == nir_var_mem_ssbo) { - if (is_large(&state, var)) { - state.has_large_ssbo = true; - unsigned size = MAX2(1, glsl_array_size(var->type)); - for (unsigned i = 0; i < size; i++) - state.large_ssbos[var->data.binding + i] = true; - } - } - } - - /* clear pass flags: */ - nir_foreach_function(function, shader) { - nir_function_impl *impl = function->impl; - if (!impl) - continue; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - instr->pass_flags = 0; - } - } - } - - nir_foreach_function(function, shader) { - nir_function_impl *impl = function->impl; - - if (!impl) - continue; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - lower_instr(&state, instr); - } - } - } - - /* At this point, all 'amul's used in calculating an offset into - * a large variable have been replaced with 'imul'. So remaining - * 'amul's can be replaced with 'imul24': - * - * Note the exception for 64b (such as load/store_global where - * address size is 64b) as imul24 cannot have 64b bitsize - */ - nir_foreach_function(function, shader) { - nir_function_impl *impl = function->impl; - - if (!impl) - continue; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (alu->op != nir_op_amul) - continue; - - if (nir_dest_bit_size(alu->dest.dest) <= 32) - alu->op = nir_op_imul24; - else - alu->op = nir_op_imul; - - state.progress |= true; - } - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - } - - return state.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_array_deref_of_vec.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_array_deref_of_vec.c deleted file mode 100644 index 5587d58..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_array_deref_of_vec.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static void -build_write_masked_store(nir_builder *b, nir_deref_instr *vec_deref, - nir_ssa_def *value, unsigned component) -{ - assert(value->num_components == 1); - unsigned num_components = glsl_get_components(vec_deref->type); - assert(num_components > 1 && num_components <= NIR_MAX_VEC_COMPONENTS); - - nir_ssa_def *u = nir_ssa_undef(b, 1, value->bit_size); - nir_ssa_def *comps[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < num_components; i++) - comps[i] = (i == component) ? value : u; - - nir_ssa_def *vec = nir_vec(b, comps, num_components); - nir_store_deref(b, vec_deref, vec, (1u << component)); -} - -static void -build_write_masked_stores(nir_builder *b, nir_deref_instr *vec_deref, - nir_ssa_def *value, nir_ssa_def *index, - unsigned start, unsigned end) -{ - if (start == end - 1) { - build_write_masked_store(b, vec_deref, value, start); - } else { - unsigned mid = start + (end - start) / 2; - nir_push_if(b, nir_ilt(b, index, nir_imm_int(b, mid))); - build_write_masked_stores(b, vec_deref, value, index, start, mid); - nir_push_else(b, NULL); - build_write_masked_stores(b, vec_deref, value, index, mid, end); - nir_pop_if(b, NULL); - } -} - -static bool -nir_lower_array_deref_of_vec_impl(nir_function_impl *impl, - nir_variable_mode modes, - nir_lower_array_deref_of_vec_options options) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - assert(intrin->intrinsic != nir_intrinsic_copy_deref); - - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_interp_deref_at_centroid && - intrin->intrinsic != nir_intrinsic_interp_deref_at_sample && - intrin->intrinsic != nir_intrinsic_interp_deref_at_offset && - intrin->intrinsic != nir_intrinsic_interp_deref_at_vertex && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - - /* We choose to be conservative here. If the deref contains any - * modes which weren't specified, we bail and don't bother lowering. - */ - if (!nir_deref_mode_must_be(deref, modes)) - continue; - - /* We only care about array derefs that act on vectors */ - if (deref->deref_type != nir_deref_type_array) - continue; - - nir_deref_instr *vec_deref = nir_deref_instr_parent(deref); - if (!glsl_type_is_vector(vec_deref->type)) - continue; - - assert(intrin->num_components == 1); - unsigned num_components = glsl_get_components(vec_deref->type); - assert(num_components > 1 && num_components <= NIR_MAX_VEC_COMPONENTS); - - b.cursor = nir_after_instr(&intrin->instr); - - if (intrin->intrinsic == nir_intrinsic_store_deref) { - assert(intrin->src[1].is_ssa); - nir_ssa_def *value = intrin->src[1].ssa; - - if (nir_src_is_const(deref->arr.index)) { - if (!(options & nir_lower_direct_array_deref_of_vec_store)) - continue; - - unsigned index = nir_src_as_uint(deref->arr.index); - /* If index is OOB, we throw the old store away and don't - * replace it with anything. - */ - if (index < num_components) - build_write_masked_store(&b, vec_deref, value, index); - } else { - if (!(options & nir_lower_indirect_array_deref_of_vec_store)) - continue; - - nir_ssa_def *index = nir_ssa_for_src(&b, deref->arr.index, 1); - build_write_masked_stores(&b, vec_deref, value, index, - 0, num_components); - } - nir_instr_remove(&intrin->instr); - - progress = true; - } else { - if (nir_src_is_const(deref->arr.index)) { - if (!(options & nir_lower_direct_array_deref_of_vec_load)) - continue; - } else { - if (!(options & nir_lower_indirect_array_deref_of_vec_load)) - continue; - } - - /* Turn the load into a vector load */ - nir_instr_rewrite_src(&intrin->instr, &intrin->src[0], - nir_src_for_ssa(&vec_deref->dest.ssa)); - intrin->dest.ssa.num_components = num_components; - intrin->num_components = num_components; - - nir_ssa_def *index = nir_ssa_for_src(&b, deref->arr.index, 1); - nir_ssa_def *scalar = - nir_vector_extract(&b, &intrin->dest.ssa, index); - if (scalar->parent_instr->type == nir_instr_type_ssa_undef) { - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - scalar); - nir_instr_remove(&intrin->instr); - } else { - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - scalar, - scalar->parent_instr); - } - progress = true; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -/* Lowers away array dereferences on vectors - * - * These are allowed on certain variable types such as SSBOs and TCS outputs. - * However, not everyone can actually handle them everywhere. There are also - * cases where we want to lower them for performance reasons. - * - * This patch assumes that copy_deref instructions have already been lowered. - */ -bool -nir_lower_array_deref_of_vec(nir_shader *shader, nir_variable_mode modes, - nir_lower_array_deref_of_vec_options options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && - nir_lower_array_deref_of_vec_impl(function->impl, modes, options)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_atomics_to_ssbo.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_atomics_to_ssbo.c deleted file mode 100644 index ba246a8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_atomics_to_ssbo.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright © 2017 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Rob Clark - */ - -#include "nir.h" -#include "nir_builder.h" - -/* - * Remap atomic counters to SSBOs, starting from the shader's next SSBO slot - * (info.num_ssbos). - */ - -static nir_deref_instr * -deref_offset_var(nir_builder *b, unsigned binding, unsigned offset_align_state) -{ - nir_foreach_uniform_variable(var, b->shader) { - if (var->num_state_slots != 1) - continue; - if (var->state_slots[0].tokens[0] == offset_align_state && - var->state_slots[0].tokens[1] == binding) - return nir_build_deref_var(b, var); - } - - nir_variable *var = nir_variable_create(b->shader, nir_var_uniform, glsl_uint_type(), "offset"); - var->state_slots = rzalloc_array(var, nir_state_slot, 1); - var->state_slots[0].tokens[0] = offset_align_state; - var->state_slots[0].tokens[1] = binding; - var->num_state_slots = 1; - var->data.how_declared = nir_var_hidden; - b->shader->num_uniforms++; - return nir_build_deref_var(b, var); -} - -static bool -lower_instr(nir_intrinsic_instr *instr, unsigned ssbo_offset, nir_builder *b, unsigned offset_align_state) -{ - nir_intrinsic_op op; - - b->cursor = nir_before_instr(&instr->instr); - - switch (instr->intrinsic) { - case nir_intrinsic_memory_barrier_atomic_counter: - /* Atomic counters are now SSBOs so memoryBarrierAtomicCounter() is now - * memoryBarrierBuffer(). - */ - if (b->shader->options->use_scoped_barrier) { - instr->intrinsic = nir_intrinsic_scoped_barrier; - nir_intrinsic_set_execution_scope(instr, NIR_SCOPE_NONE); - nir_intrinsic_set_memory_scope(instr, NIR_SCOPE_DEVICE); - nir_intrinsic_set_memory_semantics(instr, NIR_MEMORY_ACQ_REL); - nir_intrinsic_set_memory_modes(instr, nir_var_mem_ssbo); - } else { - instr->intrinsic = nir_intrinsic_memory_barrier_buffer; - } - return true; - - case nir_intrinsic_atomic_counter_inc: - case nir_intrinsic_atomic_counter_add: - case nir_intrinsic_atomic_counter_pre_dec: - case nir_intrinsic_atomic_counter_post_dec: - /* inc and dec get remapped to add: */ - op = nir_intrinsic_ssbo_atomic_add; - break; - case nir_intrinsic_atomic_counter_read: - op = nir_intrinsic_load_ssbo; - break; - case nir_intrinsic_atomic_counter_min: - op = nir_intrinsic_ssbo_atomic_umin; - break; - case nir_intrinsic_atomic_counter_max: - op = nir_intrinsic_ssbo_atomic_umax; - break; - case nir_intrinsic_atomic_counter_and: - op = nir_intrinsic_ssbo_atomic_and; - break; - case nir_intrinsic_atomic_counter_or: - op = nir_intrinsic_ssbo_atomic_or; - break; - case nir_intrinsic_atomic_counter_xor: - op = nir_intrinsic_ssbo_atomic_xor; - break; - case nir_intrinsic_atomic_counter_exchange: - op = nir_intrinsic_ssbo_atomic_exchange; - break; - case nir_intrinsic_atomic_counter_comp_swap: - op = nir_intrinsic_ssbo_atomic_comp_swap; - break; - default: - return false; - } - - nir_ssa_def *buffer = nir_imm_int(b, ssbo_offset + nir_intrinsic_base(instr)); - nir_ssa_def *temp = NULL; - - nir_ssa_def *offset_load = NULL; - if (offset_align_state) { - nir_deref_instr *deref_offset = deref_offset_var(b, nir_intrinsic_base(instr), offset_align_state); - offset_load = nir_load_deref(b, deref_offset); - } - nir_intrinsic_instr *new_instr = - nir_intrinsic_instr_create(b->shader, op); - - /* a couple instructions need special handling since they don't map - * 1:1 with ssbo atomics - */ - switch (instr->intrinsic) { - case nir_intrinsic_atomic_counter_inc: - /* remapped to ssbo_atomic_add: { buffer_idx, offset, +1 } */ - temp = nir_imm_int(b, +1); - new_instr->src[0] = nir_src_for_ssa(buffer); - nir_src_copy(&new_instr->src[1], &instr->src[0], &new_instr->instr); - new_instr->src[2] = nir_src_for_ssa(temp); - break; - case nir_intrinsic_atomic_counter_pre_dec: - case nir_intrinsic_atomic_counter_post_dec: - /* remapped to ssbo_atomic_add: { buffer_idx, offset, -1 } */ - /* NOTE semantic difference so we adjust the return value below */ - temp = nir_imm_int(b, -1); - new_instr->src[0] = nir_src_for_ssa(buffer); - nir_src_copy(&new_instr->src[1], &instr->src[0], &new_instr->instr); - new_instr->src[2] = nir_src_for_ssa(temp); - break; - case nir_intrinsic_atomic_counter_read: - /* remapped to load_ssbo: { buffer_idx, offset } */ - new_instr->src[0] = nir_src_for_ssa(buffer); - nir_src_copy(&new_instr->src[1], &instr->src[0], &new_instr->instr); - break; - default: - /* remapped to ssbo_atomic_x: { buffer_idx, offset, data, (compare)? } */ - new_instr->src[0] = nir_src_for_ssa(buffer); - nir_src_copy(&new_instr->src[1], &instr->src[0], &new_instr->instr); - nir_src_copy(&new_instr->src[2], &instr->src[1], &new_instr->instr); - if (op == nir_intrinsic_ssbo_atomic_comp_swap || - op == nir_intrinsic_ssbo_atomic_fcomp_swap) - nir_src_copy(&new_instr->src[3], &instr->src[2], &new_instr->instr); - break; - } - - if (offset_load) - new_instr->src[1].ssa = nir_iadd(b, new_instr->src[1].ssa, offset_load); - - if (nir_intrinsic_range_base(instr)) - new_instr->src[1].ssa = nir_iadd(b, new_instr->src[1].ssa, - nir_imm_int(b, nir_intrinsic_range_base(instr))); - - if (new_instr->intrinsic == nir_intrinsic_load_ssbo) { - nir_intrinsic_set_align(new_instr, 4, 0); - - /* we could be replacing an intrinsic with fixed # of dest - * num_components with one that has variable number. So - * best to take this from the dest: - */ - new_instr->num_components = instr->dest.ssa.num_components; - } - - nir_ssa_dest_init(&new_instr->instr, &new_instr->dest, - instr->dest.ssa.num_components, - instr->dest.ssa.bit_size, NULL); - nir_instr_insert_before(&instr->instr, &new_instr->instr); - nir_instr_remove(&instr->instr); - - if (instr->intrinsic == nir_intrinsic_atomic_counter_pre_dec) { - b->cursor = nir_after_instr(&new_instr->instr); - nir_ssa_def *result = nir_iadd(b, &new_instr->dest.ssa, temp); - nir_ssa_def_rewrite_uses(&instr->dest.ssa, result); - } else { - nir_ssa_def_rewrite_uses(&instr->dest.ssa, &new_instr->dest.ssa); - } - - return true; -} - -static bool -is_atomic_uint(const struct glsl_type *type) -{ - if (glsl_get_base_type(type) == GLSL_TYPE_ARRAY) - return is_atomic_uint(glsl_get_array_element(type)); - return glsl_get_base_type(type) == GLSL_TYPE_ATOMIC_UINT; -} - -bool -nir_lower_atomics_to_ssbo(nir_shader *shader, unsigned offset_align_state) -{ - unsigned ssbo_offset = shader->info.num_ssbos; - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder builder; - nir_builder_init(&builder, function->impl); - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_intrinsic) - progress |= lower_instr(nir_instr_as_intrinsic(instr), - ssbo_offset, &builder, offset_align_state); - } - } - - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } - } - - if (progress) { - /* replace atomic_uint uniforms with ssbo's: */ - unsigned replaced = 0; - nir_foreach_uniform_variable_safe(var, shader) { - if (is_atomic_uint(var->type)) { - exec_node_remove(&var->node); - - if (replaced & (1 << var->data.binding)) - continue; - - nir_variable *ssbo; - char name[16]; - - /* A length of 0 is used to denote unsized arrays */ - const struct glsl_type *type = glsl_array_type(glsl_uint_type(), 0, 0); - - snprintf(name, sizeof(name), "counter%d", var->data.binding); - - ssbo = nir_variable_create(shader, nir_var_mem_ssbo, type, name); - ssbo->data.binding = ssbo_offset + var->data.binding; - ssbo->data.explicit_binding = var->data.explicit_binding; - - /* We can't use num_abos, because it only represents the number of - * active atomic counters, and currently unlike SSBO's they aren't - * compacted so num_abos actually isn't a bound on the index passed - * to nir_intrinsic_atomic_counter_*. e.g. if we have a single atomic - * counter declared like: - * - * layout(binding=1) atomic_uint counter0; - * - * then when we lower accesses to it the atomic_counter_* intrinsics - * will have 1 as the index but num_abos will still be 1. - */ - shader->info.num_ssbos = MAX2(shader->info.num_ssbos, - ssbo->data.binding + 1); - - struct glsl_struct_field field = { - .type = type, - .name = "counters", - .location = -1, - }; - - ssbo->interface_type = - glsl_interface_type(&field, 1, GLSL_INTERFACE_PACKING_STD430, - false, "counters"); - - replaced |= (1 << var->data.binding); - } - } - - shader->info.num_abos = 0; - } - - return progress; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bit_size.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bit_size.c deleted file mode 100644 index 326ece1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bit_size.c +++ /dev/null @@ -1,363 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -/** - * Some ALU operations may not be supported in hardware in specific bit-sizes. - * This pass allows implementations to selectively lower such operations to - * a bit-size that is supported natively and then converts the result back to - * the original bit-size. - */ - -static nir_ssa_def *convert_to_bit_size(nir_builder *bld, nir_ssa_def *src, - nir_alu_type type, unsigned bit_size) -{ - /* create b2i32(a) instead of i2i32(b2i8(a))/i2i32(b2i16(a)) */ - nir_alu_instr *alu = nir_src_as_alu_instr(nir_src_for_ssa(src)); - if ((type & (nir_type_uint | nir_type_int)) && bit_size == 32 && - alu && (alu->op == nir_op_b2i8 || alu->op == nir_op_b2i16)) { - nir_alu_instr *instr = nir_alu_instr_create(bld->shader, nir_op_b2i32); - nir_alu_src_copy(&instr->src[0], &alu->src[0], instr); - return nir_builder_alu_instr_finish_and_insert(bld, instr); - } - - return nir_convert_to_bit_size(bld, src, type, bit_size); -} - -static void -lower_alu_instr(nir_builder *bld, nir_alu_instr *alu, unsigned bit_size) -{ - const nir_op op = alu->op; - unsigned dst_bit_size = alu->dest.dest.ssa.bit_size; - - bld->cursor = nir_before_instr(&alu->instr); - - /* Convert each source to the requested bit-size */ - nir_ssa_def *srcs[NIR_MAX_VEC_COMPONENTS] = { NULL }; - for (unsigned i = 0; i < nir_op_infos[op].num_inputs; i++) { - nir_ssa_def *src = nir_ssa_for_alu_src(bld, alu, i); - - nir_alu_type type = nir_op_infos[op].input_types[i]; - if (nir_alu_type_get_type_size(type) == 0) - src = convert_to_bit_size(bld, src, type, bit_size); - - if (i == 1 && (op == nir_op_ishl || op == nir_op_ishr || op == nir_op_ushr)) { - assert(util_is_power_of_two_nonzero(dst_bit_size)); - src = nir_iand(bld, src, nir_imm_int(bld, dst_bit_size - 1)); - } - - srcs[i] = src; - } - - /* Emit the lowered ALU instruction */ - nir_ssa_def *lowered_dst = NULL; - if (op == nir_op_imul_high || op == nir_op_umul_high) { - assert(dst_bit_size * 2 <= bit_size); - lowered_dst = nir_imul(bld, srcs[0], srcs[1]); - if (nir_op_infos[op].output_type & nir_type_uint) - lowered_dst = nir_ushr_imm(bld, lowered_dst, dst_bit_size); - else - lowered_dst = nir_ishr_imm(bld, lowered_dst, dst_bit_size); - } else if (op == nir_op_iadd_sat || op == nir_op_isub_sat || op == nir_op_uadd_sat || - op == nir_op_uadd_carry) { - if (op == nir_op_isub_sat) - lowered_dst = nir_isub(bld, srcs[0], srcs[1]); - else - lowered_dst = nir_iadd(bld, srcs[0], srcs[1]); - - /* The add_sat and sub_sat instructions need to clamp the result to the - * range of the original type. - */ - if (op == nir_op_iadd_sat || op == nir_op_isub_sat) { - const int64_t int_max = u_intN_max(dst_bit_size); - const int64_t int_min = u_intN_min(dst_bit_size); - - lowered_dst = nir_iclamp(bld, lowered_dst, - nir_imm_intN_t(bld, int_min, bit_size), - nir_imm_intN_t(bld, int_max, bit_size)); - } else if (op == nir_op_uadd_sat) { - const uint64_t uint_max = u_uintN_max(dst_bit_size); - - lowered_dst = nir_umin(bld, lowered_dst, - nir_imm_intN_t(bld, uint_max, bit_size)); - } else { - assert(op == nir_op_uadd_carry); - lowered_dst = nir_ushr_imm(bld, lowered_dst, dst_bit_size); - } - } else { - lowered_dst = nir_build_alu_src_arr(bld, op, srcs); - } - - - /* Convert result back to the original bit-size */ - if (nir_alu_type_get_type_size(nir_op_infos[op].output_type) == 0 && - dst_bit_size != bit_size) { - nir_alu_type type = nir_op_infos[op].output_type; - nir_ssa_def *dst = nir_convert_to_bit_size(bld, lowered_dst, type, dst_bit_size); - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, dst); - } else { - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, lowered_dst); - } -} - -static void -lower_intrinsic_instr(nir_builder *b, nir_intrinsic_instr *intrin, - unsigned bit_size) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_read_invocation: - case nir_intrinsic_read_first_invocation: - case nir_intrinsic_vote_feq: - case nir_intrinsic_vote_ieq: - case nir_intrinsic_shuffle: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - case nir_intrinsic_reduce: - case nir_intrinsic_inclusive_scan: - case nir_intrinsic_exclusive_scan: { - assert(intrin->src[0].is_ssa && intrin->dest.is_ssa); - const unsigned old_bit_size = intrin->dest.ssa.bit_size; - assert(old_bit_size < bit_size); - - nir_alu_type type = nir_type_uint; - if (nir_intrinsic_has_reduction_op(intrin)) - type = nir_op_infos[nir_intrinsic_reduction_op(intrin)].input_types[0]; - else if (intrin->intrinsic == nir_intrinsic_vote_feq) - type = nir_type_float; - - b->cursor = nir_before_instr(&intrin->instr); - nir_intrinsic_instr *new_intrin = - nir_instr_as_intrinsic(nir_instr_clone(b->shader, &intrin->instr)); - - nir_ssa_def *new_src = nir_convert_to_bit_size(b, intrin->src[0].ssa, - type, bit_size); - new_intrin->src[0] = nir_src_for_ssa(new_src); - - if (intrin->intrinsic == nir_intrinsic_vote_feq || - intrin->intrinsic == nir_intrinsic_vote_ieq) { - /* These return a Boolean; it's always 1-bit */ - assert(new_intrin->dest.ssa.bit_size == 1); - } else { - /* These return the same bit size as the source; we need to adjust - * the size and then we'll have to emit a down-cast. - */ - assert(intrin->src[0].ssa->bit_size == intrin->dest.ssa.bit_size); - new_intrin->dest.ssa.bit_size = bit_size; - } - - nir_builder_instr_insert(b, &new_intrin->instr); - - nir_ssa_def *res = &new_intrin->dest.ssa; - if (intrin->intrinsic == nir_intrinsic_exclusive_scan) { - /* For exclusive scan, we have to be careful because the identity - * value for the higher bit size may get added into the mix by - * disabled channels. For some cases (imin/imax in particular), - * this value won't convert to the right identity value when we - * down-cast so we have to clamp it. - */ - switch (nir_intrinsic_reduction_op(intrin)) { - case nir_op_imin: { - int64_t int_max = (1ull << (old_bit_size - 1)) - 1; - res = nir_imin(b, res, nir_imm_intN_t(b, int_max, bit_size)); - break; - } - case nir_op_imax: { - int64_t int_min = -(int64_t)(1ull << (old_bit_size - 1)); - res = nir_imax(b, res, nir_imm_intN_t(b, int_min, bit_size)); - break; - } - default: - break; - } - } - - if (intrin->intrinsic != nir_intrinsic_vote_feq && - intrin->intrinsic != nir_intrinsic_vote_ieq) - res = nir_u2uN(b, res, old_bit_size); - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, res); - break; - } - - default: - unreachable("Unsupported instruction"); - } -} - -static void -lower_phi_instr(nir_builder *b, nir_phi_instr *phi, unsigned bit_size, - nir_phi_instr *last_phi) -{ - assert(phi->dest.is_ssa); - unsigned old_bit_size = phi->dest.ssa.bit_size; - assert(old_bit_size < bit_size); - - nir_foreach_phi_src(src, phi) { - b->cursor = nir_after_block_before_jump(src->pred); - assert(src->src.is_ssa); - nir_ssa_def *new_src = nir_u2uN(b, src->src.ssa, bit_size); - - nir_instr_rewrite_src(&phi->instr, &src->src, nir_src_for_ssa(new_src)); - } - - phi->dest.ssa.bit_size = bit_size; - - b->cursor = nir_after_instr(&last_phi->instr); - - nir_ssa_def *new_dest = nir_u2uN(b, &phi->dest.ssa, old_bit_size); - nir_ssa_def_rewrite_uses_after(&phi->dest.ssa, new_dest, - new_dest->parent_instr); -} - -static bool -lower_impl(nir_function_impl *impl, - nir_lower_bit_size_callback callback, - void *callback_data) -{ - nir_builder b; - nir_builder_init(&b, impl); - bool progress = false; - - nir_foreach_block(block, impl) { - /* Stash this so we can rewrite phi destinations quickly. */ - nir_phi_instr *last_phi = nir_block_last_phi_instr(block); - - nir_foreach_instr_safe(instr, block) { - unsigned lower_bit_size = callback(instr, callback_data); - if (lower_bit_size == 0) - continue; - - switch (instr->type) { - case nir_instr_type_alu: - lower_alu_instr(&b, nir_instr_as_alu(instr), lower_bit_size); - break; - - case nir_instr_type_intrinsic: - lower_intrinsic_instr(&b, nir_instr_as_intrinsic(instr), - lower_bit_size); - break; - - case nir_instr_type_phi: - lower_phi_instr(&b, nir_instr_as_phi(instr), - lower_bit_size, last_phi); - break; - - default: - unreachable("Unsupported instruction type"); - } - progress = true; - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_bit_size(nir_shader *shader, - nir_lower_bit_size_callback callback, - void *callback_data) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= lower_impl(function->impl, callback, callback_data); - } - - return progress; -} - -static void -split_phi(nir_builder *b, nir_phi_instr *phi) -{ - nir_phi_instr *lowered[2] = { - nir_phi_instr_create(b->shader), - nir_phi_instr_create(b->shader) - }; - int num_components = phi->dest.ssa.num_components; - assert(phi->dest.ssa.bit_size == 64); - - nir_foreach_phi_src(src, phi) { - assert(num_components == src->src.ssa->num_components); - - b->cursor = nir_before_src(&src->src); - - nir_ssa_def *x = nir_unpack_64_2x32_split_x(b, src->src.ssa); - nir_ssa_def *y = nir_unpack_64_2x32_split_y(b, src->src.ssa); - - nir_phi_instr_add_src(lowered[0], src->pred, nir_src_for_ssa(x)); - nir_phi_instr_add_src(lowered[1], src->pred, nir_src_for_ssa(y)); - } - - nir_ssa_dest_init(&lowered[0]->instr, &lowered[0]->dest, - num_components, 32, NULL); - nir_ssa_dest_init(&lowered[1]->instr, &lowered[1]->dest, - num_components, 32, NULL); - - b->cursor = nir_before_instr(&phi->instr); - nir_builder_instr_insert(b, &lowered[0]->instr); - nir_builder_instr_insert(b, &lowered[1]->instr); - - b->cursor = nir_after_phis(nir_cursor_current_block(b->cursor)); - nir_ssa_def *merged = nir_pack_64_2x32_split(b, &lowered[0]->dest.ssa, &lowered[1]->dest.ssa); - nir_ssa_def_rewrite_uses(&phi->dest.ssa, merged); - nir_instr_remove(&phi->instr); -} - -static bool -lower_64bit_phi_instr(nir_builder *b, nir_instr *instr, UNUSED void *cb_data) -{ - if (instr->type != nir_instr_type_phi) - return false; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - assert(phi->dest.is_ssa); - - if (phi->dest.ssa.bit_size <= 32) - return false; - - split_phi(b, phi); - return true; -} - -bool -nir_lower_64bit_phis(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, lower_64bit_phi_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bitmap.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bitmap.c deleted file mode 100644 index 376a783..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bitmap.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* Lower glBitmap(). - * - * This is based on the logic in st_get_bitmap_shader() in TGSI compiler. - * From st_cb_bitmap.c: - * - * glBitmaps are drawn as textured quads. The user's bitmap pattern - * is stored in a texture image. An alpha8 texture format is used. - * The fragment shader samples a bit (texel) from the texture, then - * discards the fragment if the bit is off. - * - * Note that we actually store the inverse image of the bitmap to - * simplify the fragment program. An "on" bit gets stored as texel=0x0 - * and an "off" bit is stored as texel=0xff. Then we kill the - * fragment if the negated texel value is less than zero. - * - * Note that the texture format will be, according to what driver supports, - * in order of preference (with swizzle): - * - * I8_UNORM - .xxxx - * A8_UNORM - .000x - * L8_UNORM - .xxx1 - * - * If L8_UNORM, options->swizzle_xxxx is true. Otherwise we can just use - * the .w comp. - * - * Run before nir_lower_io. - */ - -static nir_variable * -get_texcoord(nir_shader *shader) -{ - nir_variable *texcoord = - nir_find_variable_with_location(shader, nir_var_shader_in, - VARYING_SLOT_TEX0); - /* otherwise create it: */ - if (texcoord == NULL) { - texcoord = nir_variable_create(shader, - nir_var_shader_in, - glsl_vec4_type(), - "gl_TexCoord"); - texcoord->data.location = VARYING_SLOT_TEX0; - } - - return texcoord; -} - -static void -lower_bitmap(nir_shader *shader, nir_builder *b, - const nir_lower_bitmap_options *options) -{ - nir_ssa_def *texcoord; - nir_tex_instr *tex; - nir_ssa_def *cond; - - texcoord = nir_load_var(b, get_texcoord(shader)); - - const struct glsl_type *sampler2D = - glsl_sampler_type(GLSL_SAMPLER_DIM_2D, false, false, GLSL_TYPE_FLOAT); - - nir_variable *tex_var = - nir_variable_create(shader, nir_var_uniform, sampler2D, "bitmap_tex"); - tex_var->data.binding = options->sampler; - tex_var->data.explicit_binding = true; - tex_var->data.how_declared = nir_var_hidden; - - nir_deref_instr *tex_deref = nir_build_deref_var(b, tex_var); - - tex = nir_tex_instr_create(shader, 3); - tex->op = nir_texop_tex; - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - tex->coord_components = 2; - tex->dest_type = nir_type_float32; - tex->src[0].src_type = nir_tex_src_texture_deref; - tex->src[0].src = nir_src_for_ssa(&tex_deref->dest.ssa); - tex->src[1].src_type = nir_tex_src_sampler_deref; - tex->src[1].src = nir_src_for_ssa(&tex_deref->dest.ssa); - tex->src[2].src_type = nir_tex_src_coord; - tex->src[2].src = - nir_src_for_ssa(nir_channels(b, texcoord, - (1 << tex->coord_components) - 1)); - - nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL); - nir_builder_instr_insert(b, &tex->instr); - - /* kill if tex != 0.0.. take .x or .w channel according to format: */ - cond = nir_fneu(b, nir_channel(b, &tex->dest.ssa, - options->swizzle_xxxx ? 0 : 3), - nir_imm_floatN_t(b, 0.0, tex->dest.ssa.bit_size)); - - nir_discard_if(b, cond); - - shader->info.fs.uses_discard = true; -} - -static void -lower_bitmap_impl(nir_function_impl *impl, - const nir_lower_bitmap_options *options) -{ - nir_builder b; - - nir_builder_init(&b, impl); - b.cursor = nir_before_cf_list(&impl->body); - - lower_bitmap(impl->function->shader, &b, options); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); -} - -void -nir_lower_bitmap(nir_shader *shader, - const nir_lower_bitmap_options *options) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - lower_bitmap_impl(nir_shader_get_entrypoint(shader), options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_blend.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_blend.c deleted file mode 100644 index 7e858fa..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_blend.c +++ /dev/null @@ -1,641 +0,0 @@ -/* - * Copyright (C) 2019-2021 Collabora, Ltd. - * Copyright (C) 2019 Alyssa Rosenzweig - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 - * - * Implements the fragment pipeline (blending and writeout) in software, to be - * run as a dedicated "blend shader" stage on Midgard/Bifrost, or as a fragment - * shader variant on typical GPUs. This pass is useful if hardware lacks - * fixed-function blending in part or in full. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_format_convert.h" -#include "nir_lower_blend.h" - -struct ctx { - const nir_lower_blend_options *options; - nir_ssa_def *src1[8]; -}; - -/* Given processed factors, combine them per a blend function */ - -static nir_ssa_def * -nir_blend_func( - nir_builder *b, - enum blend_func func, - nir_ssa_def *src, nir_ssa_def *dst) -{ - switch (func) { - case BLEND_FUNC_ADD: - return nir_fadd(b, src, dst); - case BLEND_FUNC_SUBTRACT: - return nir_fsub(b, src, dst); - case BLEND_FUNC_REVERSE_SUBTRACT: - return nir_fsub(b, dst, src); - case BLEND_FUNC_MIN: - return nir_fmin(b, src, dst); - case BLEND_FUNC_MAX: - return nir_fmax(b, src, dst); - } - - unreachable("Invalid blend function"); -} - -/* Does this blend function multiply by a blend factor? */ - -static bool -nir_blend_factored(enum blend_func func) -{ - switch (func) { - case BLEND_FUNC_ADD: - case BLEND_FUNC_SUBTRACT: - case BLEND_FUNC_REVERSE_SUBTRACT: - return true; - default: - return false; - } -} - -/* Compute a src_alpha_saturate factor */ -static nir_ssa_def * -nir_alpha_saturate( - nir_builder *b, - nir_ssa_def *src, nir_ssa_def *dst, - unsigned chan) -{ - nir_ssa_def *Asrc = nir_channel(b, src, 3); - nir_ssa_def *Adst = nir_channel(b, dst, 3); - nir_ssa_def *one = nir_imm_floatN_t(b, 1.0, src->bit_size); - nir_ssa_def *Adsti = nir_fsub(b, one, Adst); - - return (chan < 3) ? nir_fmin(b, Asrc, Adsti) : one; -} - -/* Returns a scalar single factor, unmultiplied */ - -static nir_ssa_def * -nir_blend_factor_value( - nir_builder *b, - nir_ssa_def *src, nir_ssa_def *src1, nir_ssa_def *dst, nir_ssa_def *bconst, - unsigned chan, - enum blend_factor factor) -{ - switch (factor) { - case BLEND_FACTOR_ZERO: - return nir_imm_floatN_t(b, 0.0, src->bit_size); - case BLEND_FACTOR_SRC_COLOR: - return nir_channel(b, src, chan); - case BLEND_FACTOR_SRC1_COLOR: - return nir_channel(b, src1, chan); - case BLEND_FACTOR_DST_COLOR: - return nir_channel(b, dst, chan); - case BLEND_FACTOR_SRC_ALPHA: - return nir_channel(b, src, 3); - case BLEND_FACTOR_SRC1_ALPHA: - return nir_channel(b, src1, 3); - case BLEND_FACTOR_DST_ALPHA: - return nir_channel(b, dst, 3); - case BLEND_FACTOR_CONSTANT_COLOR: - return nir_channel(b, bconst, chan); - case BLEND_FACTOR_CONSTANT_ALPHA: - return nir_channel(b, bconst, 3); - case BLEND_FACTOR_SRC_ALPHA_SATURATE: - return nir_alpha_saturate(b, src, dst, chan); - } - - unreachable("Invalid blend factor"); -} - -static nir_ssa_def * -nir_fsat_signed(nir_builder *b, nir_ssa_def *x) -{ - return nir_fclamp(b, x, nir_imm_floatN_t(b, -1.0, x->bit_size), - nir_imm_floatN_t(b, +1.0, x->bit_size)); -} - -static nir_ssa_def * -nir_fsat_to_format(nir_builder *b, nir_ssa_def *x, enum pipe_format format) -{ - if (util_format_is_unorm(format)) - return nir_fsat(b, x); - else if (util_format_is_snorm(format)) - return nir_fsat_signed(b, x); - else - return x; -} - -/* - * The spec says we need to clamp blend factors. However, we don't want to clamp - * unnecessarily, as the clamp might not be optimized out. Check whether - * clamping a blend factor is needed. - */ -static bool -should_clamp_factor(enum blend_factor factor, bool inverted, bool snorm) -{ - switch (factor) { - case BLEND_FACTOR_ZERO: - /* 0, 1 are in [0, 1] and [-1, 1] */ - return false; - - case BLEND_FACTOR_SRC_COLOR: - case BLEND_FACTOR_SRC1_COLOR: - case BLEND_FACTOR_DST_COLOR: - case BLEND_FACTOR_SRC_ALPHA: - case BLEND_FACTOR_SRC1_ALPHA: - case BLEND_FACTOR_DST_ALPHA: - /* Colours are already clamped. For unorm, the complement of something - * clamped is still clamped. But for snorm, this is not true. Clamp for - * snorm only. - */ - return inverted && snorm; - - case BLEND_FACTOR_CONSTANT_COLOR: - case BLEND_FACTOR_CONSTANT_ALPHA: - /* Constant colours are not yet clamped */ - return true; - - case BLEND_FACTOR_SRC_ALPHA_SATURATE: - /* For unorm, this is in bounds (and hence so is its complement). For - * snorm, it may not be. - */ - return snorm; - } - - unreachable("invalid blend factor"); -} - -static bool -channel_uses_dest(nir_lower_blend_channel chan) -{ - return chan.src_factor == BLEND_FACTOR_DST_COLOR || - chan.src_factor == BLEND_FACTOR_DST_ALPHA || - chan.src_factor == BLEND_FACTOR_SRC_ALPHA_SATURATE || - !(chan.dst_factor == BLEND_FACTOR_ZERO && !chan.invert_dst_factor) || - chan.func == BLEND_FUNC_MIN || - chan.func == BLEND_FUNC_MAX; -} - -static nir_ssa_def * -nir_blend_factor( - nir_builder *b, - nir_ssa_def *raw_scalar, - nir_ssa_def *src, nir_ssa_def *src1, nir_ssa_def *dst, nir_ssa_def *bconst, - unsigned chan, - enum blend_factor factor, - bool inverted, - enum pipe_format format) -{ - nir_ssa_def *f = - nir_blend_factor_value(b, src, src1, dst, bconst, chan, factor); - - if (inverted) - f = nir_fadd_imm(b, nir_fneg(b, f), 1.0); - - if (should_clamp_factor(factor, inverted, util_format_is_snorm(format))) - f = nir_fsat_to_format(b, f, format); - - return nir_fmul(b, raw_scalar, f); -} - -/* Given a colormask, "blend" with the destination */ - -static nir_ssa_def * -nir_color_mask( - nir_builder *b, - unsigned mask, - nir_ssa_def *src, - nir_ssa_def *dst) -{ - return nir_vec4(b, - nir_channel(b, (mask & (1 << 0)) ? src : dst, 0), - nir_channel(b, (mask & (1 << 1)) ? src : dst, 1), - nir_channel(b, (mask & (1 << 2)) ? src : dst, 2), - nir_channel(b, (mask & (1 << 3)) ? src : dst, 3)); -} - -static nir_ssa_def * -nir_logicop_func( - nir_builder *b, - unsigned func, - nir_ssa_def *src, nir_ssa_def *dst, nir_ssa_def *bitmask) -{ - switch (func) { - case PIPE_LOGICOP_CLEAR: - return nir_imm_ivec4(b, 0, 0, 0, 0); - case PIPE_LOGICOP_NOR: - return nir_ixor(b, nir_ior(b, src, dst), bitmask); - case PIPE_LOGICOP_AND_INVERTED: - return nir_iand(b, nir_ixor(b, src, bitmask), dst); - case PIPE_LOGICOP_COPY_INVERTED: - return nir_ixor(b, src, bitmask); - case PIPE_LOGICOP_AND_REVERSE: - return nir_iand(b, src, nir_ixor(b, dst, bitmask)); - case PIPE_LOGICOP_INVERT: - return nir_ixor(b, dst, bitmask); - case PIPE_LOGICOP_XOR: - return nir_ixor(b, src, dst); - case PIPE_LOGICOP_NAND: - return nir_ixor(b, nir_iand(b, src, dst), bitmask); - case PIPE_LOGICOP_AND: - return nir_iand(b, src, dst); - case PIPE_LOGICOP_EQUIV: - return nir_ixor(b, nir_ixor(b, src, dst), bitmask); - case PIPE_LOGICOP_NOOP: - return dst; - case PIPE_LOGICOP_OR_INVERTED: - return nir_ior(b, nir_ixor(b, src, bitmask), dst); - case PIPE_LOGICOP_COPY: - return src; - case PIPE_LOGICOP_OR_REVERSE: - return nir_ior(b, src, nir_ixor(b, dst, bitmask)); - case PIPE_LOGICOP_OR: - return nir_ior(b, src, dst); - case PIPE_LOGICOP_SET: - return nir_imm_ivec4(b, ~0, ~0, ~0, ~0); - } - - unreachable("Invalid logciop function"); -} - -static nir_ssa_def * -nir_blend_logicop( - nir_builder *b, - const nir_lower_blend_options *options, - unsigned rt, - nir_ssa_def *src, nir_ssa_def *dst) -{ - unsigned bit_size = src->bit_size; - - enum pipe_format format = options->format[rt]; - const struct util_format_description *format_desc = - util_format_description(format); - - /* From section 17.3.9 ("Logical Operation") of the OpenGL 4.6 core spec: - * - * Logical operation has no effect on a floating-point destination color - * buffer, or when FRAMEBUFFER_SRGB is enabled and the value of - * FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING for the framebuffer attachment - * corresponding to the destination buffer is SRGB (see section 9.2.3). - * However, if logical operation is enabled, blending is still disabled. - */ - if (util_format_is_float(format) || util_format_is_srgb(format)) - return src; - - if (bit_size != 32) { - src = nir_f2f32(b, src); - dst = nir_f2f32(b, dst); - } - - assert(src->num_components <= 4); - assert(dst->num_components <= 4); - - unsigned bits[4]; - for (int i = 0; i < 4; ++i) - bits[i] = format_desc->channel[i].size; - - if (util_format_is_unorm(format)) { - src = nir_format_float_to_unorm(b, src, bits); - dst = nir_format_float_to_unorm(b, dst, bits); - } else if (util_format_is_snorm(format)) { - src = nir_format_float_to_snorm(b, src, bits); - dst = nir_format_float_to_snorm(b, dst, bits); - } else { - assert(util_format_is_pure_integer(format)); - } - - nir_const_value mask[4]; - for (int i = 0; i < 4; ++i) - mask[i] = nir_const_value_for_uint(BITFIELD_MASK(bits[i]), 32); - - nir_ssa_def *out = nir_logicop_func(b, options->logicop_func, src, dst, - nir_build_imm(b, 4, 32, mask)); - - if (util_format_is_unorm(format)) { - out = nir_format_unorm_to_float(b, out, bits); - } else if (util_format_is_snorm(format)) { - /* Sign extend before converting so the i2f in snorm_to_float works */ - out = nir_format_sign_extend_ivec(b, out, bits); - out = nir_format_snorm_to_float(b, out, bits); - } else { - assert(util_format_is_pure_integer(format)); - } - - if (bit_size == 16) - out = nir_f2f16(b, out); - - return out; -} - -static bool -channel_exists(const struct util_format_description *desc, unsigned i) -{ - return (i < desc->nr_channels) && - desc->channel[i].type != UTIL_FORMAT_TYPE_VOID; -} - -/* Given a blend state, the source color, and the destination color, - * return the blended color - */ - -static nir_ssa_def * -nir_blend( - nir_builder *b, - const nir_lower_blend_options *options, - unsigned rt, - nir_ssa_def *src, nir_ssa_def *src1, nir_ssa_def *dst) -{ - /* Don't crash if src1 isn't written. It doesn't matter what dual colour we - * blend with in that case, as long as we don't dereference NULL. - */ - if (!src1) - src1 = nir_imm_zero(b, 4, src->bit_size); - - /* Grab the blend constant ahead of time */ - nir_ssa_def *bconst; - if (options->scalar_blend_const) { - bconst = nir_vec4(b, - nir_load_blend_const_color_r_float(b), - nir_load_blend_const_color_g_float(b), - nir_load_blend_const_color_b_float(b), - nir_load_blend_const_color_a_float(b)); - } else { - bconst = nir_load_blend_const_color_rgba(b); - } - - if (src->bit_size == 16) { - bconst = nir_f2f16(b, bconst); - src1 = nir_f2f16(b, src1); - } - - /* Fixed-point framebuffers require their inputs clamped. */ - enum pipe_format format = options->format[rt]; - - /* From section 17.3.6 "Blending" of the OpenGL 4.5 spec: - * - * If the color buffer is fixed-point, the components of the source and - * destination values and blend factors are each clamped to [0, 1] or - * [-1, 1] respectively for an unsigned normalized or signed normalized - * color buffer prior to evaluating the blend equation. If the color - * buffer is floating-point, no clamping occurs. - * - * Blend factors are clamped at the time of their use to ensure we properly - * clamp negative constant colours with signed normalized formats and - * ONE_MINUS_CONSTANT_* factors. Notice that -1 is in [-1, 1] but 1 - (-1) = - * 2 is not in [-1, 1] and should be clamped to 1. - */ - src = nir_fsat_to_format(b, src, format); - - if (src1) - src1 = nir_fsat_to_format(b, src1, format); - - /* DST_ALPHA reads back 1.0 if there is no alpha channel */ - const struct util_format_description *desc = - util_format_description(format); - - nir_ssa_def *zero = nir_imm_floatN_t(b, 0.0, dst->bit_size); - nir_ssa_def *one = nir_imm_floatN_t(b, 1.0, dst->bit_size); - - dst = nir_vec4(b, - channel_exists(desc, 0) ? nir_channel(b, dst, 0) : zero, - channel_exists(desc, 1) ? nir_channel(b, dst, 1) : zero, - channel_exists(desc, 2) ? nir_channel(b, dst, 2) : zero, - channel_exists(desc, 3) ? nir_channel(b, dst, 3) : one); - - /* We blend per channel and recombine later */ - nir_ssa_def *channels[4]; - - for (unsigned c = 0; c < 4; ++c) { - /* Decide properties based on channel */ - nir_lower_blend_channel chan = - (c < 3) ? options->rt[rt].rgb : options->rt[rt].alpha; - - nir_ssa_def *psrc = nir_channel(b, src, c); - nir_ssa_def *pdst = nir_channel(b, dst, c); - - if (nir_blend_factored(chan.func)) { - psrc = nir_blend_factor( - b, psrc, - src, src1, dst, bconst, c, - chan.src_factor, chan.invert_src_factor, format); - - pdst = nir_blend_factor( - b, pdst, - src, src1, dst, bconst, c, - chan.dst_factor, chan.invert_dst_factor, format); - } - - channels[c] = nir_blend_func(b, chan.func, psrc, pdst); - } - - return nir_vec(b, channels, 4); -} - -static int -color_index_for_location(unsigned location) -{ - assert(location != FRAG_RESULT_COLOR && - "gl_FragColor must be lowered before nir_lower_blend"); - - if (location < FRAG_RESULT_DATA0) - return -1; - else - return location - FRAG_RESULT_DATA0; -} - -/* - * Test if the blending options for a given channel encode the "replace" blend - * mode: dest = source. In this case, blending may be specially optimized. - */ -static bool -nir_blend_replace_channel(const nir_lower_blend_channel *c) -{ - return (c->func == BLEND_FUNC_ADD) && - (c->src_factor == BLEND_FACTOR_ZERO && c->invert_src_factor) && - (c->dst_factor == BLEND_FACTOR_ZERO && !c->invert_dst_factor); -} - -static bool -nir_blend_replace_rt(const nir_lower_blend_rt *rt) -{ - return nir_blend_replace_channel(&rt->rgb) && - nir_blend_replace_channel(&rt->alpha); -} - -static bool -nir_lower_blend_instr(nir_builder *b, nir_instr *instr, void *data) -{ - struct ctx *ctx = data; - const nir_lower_blend_options *options = ctx->options; - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *store = nir_instr_as_intrinsic(instr); - if (store->intrinsic != nir_intrinsic_store_output) - return false; - - nir_io_semantics sem = nir_intrinsic_io_semantics(store); - int rt = color_index_for_location(sem.location); - - /* No blend lowering requested on this RT */ - if (rt < 0 || options->format[rt] == PIPE_FORMAT_NONE) - return false; - - /* Only process stores once. Pass flags are cleared by consume_dual_stores */ - if (instr->pass_flags) - return false; - - instr->pass_flags = 1; - - /* Store are sunk to the bottom of the block to ensure that the dual - * source colour is already written. - */ - b->cursor = nir_after_block(instr->block); - - /* Grab the input color. We always want 4 channels during blend. Dead - * code will clean up any channels we don't need. - */ - assert(store->src[0].is_ssa); - nir_ssa_def *src = nir_pad_vector(b, store->src[0].ssa, 4); - - assert(nir_src_as_uint(store->src[1]) == 0 && "store_output invariant"); - - /* Grab the previous fragment color if we need it */ - nir_ssa_def *dst; - - if (channel_uses_dest(options->rt[rt].rgb) || - channel_uses_dest(options->rt[rt].alpha) || - options->logicop_enable || - options->rt[rt].colormask != BITFIELD_MASK(4)) { - - b->shader->info.outputs_read |= BITFIELD64_BIT(sem.location); - b->shader->info.fs.uses_fbfetch_output = true; - b->shader->info.fs.uses_sample_shading = true; - sem.fb_fetch_output = true; - - dst = nir_load_output(b, 4, nir_src_bit_size(store->src[0]), - nir_imm_int(b, 0), - .dest_type = nir_intrinsic_src_type(store), - .io_semantics = sem); - } else { - dst = nir_ssa_undef(b, 4, nir_src_bit_size(store->src[0])); - } - - /* Blend the two colors per the passed options. We only call nir_blend if - * blending is enabled with a blend mode other than replace (independent of - * the color mask). That avoids unnecessary fsat instructions in the common - * case where blending is disabled at an API level, but the driver calls - * nir_blend (possibly for color masking). - */ - nir_ssa_def *blended = src; - - if (options->logicop_enable) { - blended = nir_blend_logicop(b, options, rt, src, dst); - } else if (!util_format_is_pure_integer(options->format[rt]) && - !nir_blend_replace_rt(&options->rt[rt])) { - assert(!util_format_is_scaled(options->format[rt])); - blended = nir_blend(b, options, rt, src, ctx->src1[rt], dst); - } - - /* Apply a colormask if necessary */ - if (options->rt[rt].colormask != BITFIELD_MASK(4)) - blended = nir_color_mask(b, options->rt[rt].colormask, blended, dst); - - const unsigned num_components = - util_format_get_nr_components(options->format[rt]); - - /* Shave off any components we don't want to store */ - blended = nir_trim_vector(b, blended, num_components); - - /* Grow or shrink the store destination as needed */ - store->num_components = num_components; - nir_intrinsic_set_write_mask(store, nir_intrinsic_write_mask(store) & - nir_component_mask(num_components)); - - /* Write out the final color instead of the input */ - nir_instr_rewrite_src_ssa(instr, &store->src[0], blended); - - /* Sink to bottom */ - nir_instr_remove(instr); - nir_builder_instr_insert(b, instr); - return true; -} - -/* - * Dual-source colours are only for blending, so when nir_lower_blend is used, - * the dual source store_output is for us (only). Remove dual stores so the - * backend doesn't have to deal with them, collecting the sources for blending. - */ -static bool -consume_dual_stores(nir_builder *b, nir_instr *instr, void *data) -{ - nir_ssa_def **outputs = data; - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *store = nir_instr_as_intrinsic(instr); - if (store->intrinsic != nir_intrinsic_store_output) - return false; - - /* While we're here, clear the pass flags for store_outputs, since we'll set - * them later. - */ - instr->pass_flags = 0; - - nir_io_semantics sem = nir_intrinsic_io_semantics(store); - if (sem.dual_source_blend_index == 0) - return false; - - int rt = color_index_for_location(sem.location); - assert(rt >= 0 && rt < 8 && "bounds for dual-source blending"); - assert(store->src[0].is_ssa && "must be SSA"); - - outputs[rt] = store->src[0].ssa; - nir_instr_remove(instr); - return true; -} - -/** Lower blending to framebuffer fetch and some math - * - * This pass requires that shader I/O is lowered to explicit load/store - * instructions using nir_lower_io. - */ -void -nir_lower_blend(nir_shader *shader, const nir_lower_blend_options *options) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - struct ctx ctx = {.options = options}; - nir_shader_instructions_pass(shader, consume_dual_stores, - nir_metadata_block_index | - nir_metadata_dominance, - ctx.src1); - - nir_shader_instructions_pass(shader, nir_lower_blend_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &ctx); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_blend.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_blend.h deleted file mode 100644 index 99ab975..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_blend.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright  2019 Alyssa Rosenzweig - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#ifndef NIR_BLEND_H -#define NIR_BLEND_H - -#include "nir.h" -#include "../../util/format/u_formats.h" - -/* These structs encapsulates the blend state such that it can be lowered - * cleanly - */ - -typedef struct { - enum blend_func func; - - enum blend_factor src_factor; - bool invert_src_factor; - - enum blend_factor dst_factor; - bool invert_dst_factor; -} nir_lower_blend_channel; - -typedef struct { - nir_lower_blend_channel rgb; - nir_lower_blend_channel alpha; - - /* 4-bit colormask. 0x0 for none, 0xF for RGBA, 0x1 for R */ - unsigned colormask; -} nir_lower_blend_rt; - -typedef struct { - nir_lower_blend_rt rt[8]; - enum pipe_format format[8]; - - bool logicop_enable; - unsigned logicop_func; - - /* If set, will use load_blend_const_color_{r,g,b,a}_float instead of - * load_blend_const_color_rgba */ - bool scalar_blend_const; -} nir_lower_blend_options; - -void nir_lower_blend(nir_shader *shader, - const nir_lower_blend_options *options); - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_bitsize.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_bitsize.c deleted file mode 100644 index 1ea5c19..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_bitsize.c +++ /dev/null @@ -1,432 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -assert_ssa_def_is_not_1bit(nir_ssa_def *def, UNUSED void *unused) -{ - assert(def->bit_size > 1); - return true; -} - -static bool -rewrite_1bit_ssa_def_to_32bit(nir_ssa_def *def, void *_progress) -{ - bool *progress = _progress; - if (def->bit_size == 1) { - def->bit_size = 32; - *progress = true; - } - return true; -} - -static uint32_t -get_bool_convert_opcode(uint32_t dst_bit_size) -{ - switch (dst_bit_size) { - case 32: return nir_op_i2i32; - case 16: return nir_op_i2i16; - case 8: return nir_op_i2i8; - default: - unreachable("invalid boolean bit-size"); - } -} - -static void -make_sources_canonical(nir_builder *b, nir_alu_instr *alu, uint32_t start_idx) -{ - /* TODO: for now we take the bit-size of the first source as the canonical - * form but we could try to be smarter. - */ - const nir_op_info *op_info = &nir_op_infos[alu->op]; - uint32_t bit_size = nir_src_bit_size(alu->src[start_idx].src); - for (uint32_t i = start_idx + 1; i < op_info->num_inputs; i++) { - if (nir_src_bit_size(alu->src[i].src) != bit_size) { - b->cursor = nir_before_instr(&alu->instr); - nir_op convert_op = get_bool_convert_opcode(bit_size); - nir_ssa_def *new_src = - nir_build_alu(b, convert_op, alu->src[i].src.ssa, NULL, NULL, NULL); - /* Retain the write mask and swizzle of the original instruction so - * that we don’t unnecessarily create a vectorized instruction. - */ - nir_alu_instr *conv_instr = - nir_instr_as_alu(nir_builder_last_instr(b)); - conv_instr->dest.write_mask = alu->dest.write_mask; - conv_instr->dest.dest.ssa.num_components = - alu->dest.dest.ssa.num_components; - memcpy(conv_instr->src[0].swizzle, - alu->src[i].swizzle, - sizeof(conv_instr->src[0].swizzle)); - nir_instr_rewrite_src(&alu->instr, - &alu->src[i].src, nir_src_for_ssa(new_src)); - /* The swizzle will have been handled by the conversion instruction - * so we can reset it back to the default - */ - for (unsigned j = 0; j < NIR_MAX_VEC_COMPONENTS; j++) - alu->src[i].swizzle[j] = j; - } - } -} - -static bool -lower_alu_instr(nir_builder *b, nir_alu_instr *alu) -{ - const nir_op_info *op_info = &nir_op_infos[alu->op]; - - /* For operations that can take multiple boolean sources we need to ensure - * that all booleans have the same bit-size - */ - switch (alu->op) { - case nir_op_mov: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_vec5: - case nir_op_vec8: - case nir_op_vec16: - case nir_op_inot: - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - if (nir_dest_bit_size(alu->dest.dest) > 1) - return false; /* Not a boolean instruction */ - - - case nir_op_ball_fequal2: - case nir_op_ball_fequal3: - case nir_op_ball_fequal4: - case nir_op_bany_fnequal2: - case nir_op_bany_fnequal3: - case nir_op_bany_fnequal4: - case nir_op_ball_iequal2: - case nir_op_ball_iequal3: - case nir_op_ball_iequal4: - case nir_op_bany_inequal2: - case nir_op_bany_inequal3: - case nir_op_bany_inequal4: - case nir_op_ieq: - case nir_op_ine: - make_sources_canonical(b, alu, 0); - break; - - case nir_op_bcsel: - /* bcsel may be choosing between boolean sources too */ - if (nir_dest_bit_size(alu->dest.dest) == 1) - make_sources_canonical(b, alu, 1); - break; - - default: - break; - } - - /* Now that we have a canonical boolean bit-size, go on and rewrite the - * instruction to match the canonical bit-size. - */ - uint32_t bit_size = nir_src_bit_size(alu->src[0].src); - assert(bit_size > 1); - - nir_op opcode = alu->op; - switch (opcode) { - case nir_op_mov: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_vec5: - case nir_op_vec8: - case nir_op_vec16: - case nir_op_inot: - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - /* Nothing to do here, we do not specialize these opcodes by bit-size */ - break; - - case nir_op_b2b1: - /* Since the canonical bit size is the size of the src, it's a no-op */ - opcode = nir_op_mov; - break; - - case nir_op_b2b32: - /* For up-converting booleans, sign-extend */ - opcode = nir_op_i2i32; - break; - - case nir_op_flt: - opcode = bit_size == 8 ? nir_op_flt8 : - bit_size == 16 ? nir_op_flt16 : nir_op_flt32; - break; - - case nir_op_fge: - opcode = bit_size == 8 ? nir_op_fge8 : - bit_size == 16 ? nir_op_fge16 : nir_op_fge32; - break; - - case nir_op_feq: - opcode = bit_size == 8 ? nir_op_feq8 : - bit_size == 16 ? nir_op_feq16 : nir_op_feq32; - break; - - case nir_op_fneu: - opcode = bit_size == 8 ? nir_op_fneu8 : - bit_size == 16 ? nir_op_fneu16 : nir_op_fneu32; - break; - - case nir_op_ilt: - opcode = bit_size == 8 ? nir_op_ilt8 : - bit_size == 16 ? nir_op_ilt16 : nir_op_ilt32; - break; - - case nir_op_ige: - opcode = bit_size == 8 ? nir_op_ige8 : - bit_size == 16 ? nir_op_ige16 : nir_op_ige32; - break; - - case nir_op_ieq: - opcode = bit_size == 8 ? nir_op_ieq8 : - bit_size == 16 ? nir_op_ieq16 : nir_op_ieq32; - break; - - case nir_op_ine: - opcode = bit_size == 8 ? nir_op_ine8 : - bit_size == 16 ? nir_op_ine16 : nir_op_ine32; - break; - - case nir_op_ult: - opcode = bit_size == 8 ? nir_op_ult8 : - bit_size == 16 ? nir_op_ult16 : nir_op_ult32; - break; - - case nir_op_uge: - opcode = bit_size == 8 ? nir_op_uge8 : - bit_size == 16 ? nir_op_uge16 : nir_op_uge32; - break; - - case nir_op_ball_fequal2: - opcode = bit_size == 8 ? nir_op_b8all_fequal2 : - bit_size == 16 ? nir_op_b16all_fequal2 : - nir_op_b32all_fequal2; - break; - - case nir_op_ball_fequal3: - opcode = bit_size == 8 ? nir_op_b8all_fequal3 : - bit_size == 16 ? nir_op_b16all_fequal3 : - nir_op_b32all_fequal3; - break; - - case nir_op_ball_fequal4: - opcode = bit_size == 8 ? nir_op_b8all_fequal4 : - bit_size == 16 ? nir_op_b16all_fequal4 : - nir_op_b32all_fequal4; - break; - - case nir_op_bany_fnequal2: - opcode = bit_size == 8 ? nir_op_b8any_fnequal2 : - bit_size == 16 ? nir_op_b16any_fnequal2 : - nir_op_b32any_fnequal2; - break; - - case nir_op_bany_fnequal3: - opcode = bit_size == 8 ? nir_op_b8any_fnequal3 : - bit_size == 16 ? nir_op_b16any_fnequal3 : - nir_op_b32any_fnequal3; - break; - - case nir_op_bany_fnequal4: - opcode = bit_size == 8 ? nir_op_b8any_fnequal4 : - bit_size == 16 ? nir_op_b16any_fnequal4 : - nir_op_b32any_fnequal4; - break; - - case nir_op_ball_iequal2: - opcode = bit_size == 8 ? nir_op_b8all_iequal2 : - bit_size == 16 ? nir_op_b16all_iequal2 : - nir_op_b32all_iequal2; - break; - - case nir_op_ball_iequal3: - opcode = bit_size == 8 ? nir_op_b8all_iequal3 : - bit_size == 16 ? nir_op_b16all_iequal3 : - nir_op_b32all_iequal3; - break; - - case nir_op_ball_iequal4: - opcode = bit_size == 8 ? nir_op_b8all_iequal4 : - bit_size == 16 ? nir_op_b16all_iequal4 : - nir_op_b32all_iequal4; - break; - - case nir_op_bany_inequal2: - opcode = bit_size == 8 ? nir_op_b8any_inequal2 : - bit_size == 16 ? nir_op_b16any_inequal2 : - nir_op_b32any_inequal2; - break; - - case nir_op_bany_inequal3: - opcode = bit_size == 8 ? nir_op_b8any_inequal3 : - bit_size == 16 ? nir_op_b16any_inequal3 : - nir_op_b32any_inequal3; - break; - - case nir_op_bany_inequal4: - opcode = bit_size == 8 ? nir_op_b8any_inequal4 : - bit_size == 16 ? nir_op_b16any_inequal4 : - nir_op_b32any_inequal4; - break; - - case nir_op_bcsel: - opcode = bit_size == 8 ? nir_op_b8csel : - bit_size == 16 ? nir_op_b16csel : nir_op_b32csel; - - /* The destination of the selection may have a different bit-size from - * the bcsel condition. - */ - bit_size = nir_src_bit_size(alu->src[1].src); - break; - - default: - assert(alu->dest.dest.ssa.bit_size > 1); - for (unsigned i = 0; i < op_info->num_inputs; i++) - assert(alu->src[i].src.ssa->bit_size > 1); - return false; - } - - alu->op = opcode; - - if (alu->dest.dest.ssa.bit_size == 1) - alu->dest.dest.ssa.bit_size = bit_size; - - return true; -} - -static bool -lower_load_const_instr(nir_load_const_instr *load) -{ - bool progress = false; - - if (load->def.bit_size > 1) - return progress; - - /* TODO: It is not clear if there is any case in which we can ever hit - * this path, so for now we just provide a 32-bit default. - * - * TODO2: after some changed on nir_const_value and other on upstream, we - * removed the initialization of a general value like this: - * nir_const_value value = load->value - * - * to initialize per value component. Need to confirm if that is correct, - * but look at the TOO before. - */ - for (unsigned i = 0; i < load->def.num_components; i++) { - load->value[i].u32 = load->value[i].b ? NIR_TRUE : NIR_FALSE; - load->def.bit_size = 32; - progress = true; - } - - return progress; -} - -static bool -lower_phi_instr(nir_builder *b, nir_phi_instr *phi) -{ - if (nir_dest_bit_size(phi->dest) != 1) - return false; - - /* Ensure all phi sources have a canonical bit-size. We choose the - * bit-size of the first phi source as the canonical form. - * - * TODO: maybe we can be smarter about how we choose the canonical form. - */ - uint32_t dst_bit_size = 0; - nir_foreach_phi_src(phi_src, phi) { - uint32_t src_bit_size = nir_src_bit_size(phi_src->src); - if (dst_bit_size == 0) { - dst_bit_size = src_bit_size; - } else if (src_bit_size != dst_bit_size) { - assert(phi_src->src.is_ssa); - b->cursor = nir_before_src(&phi_src->src); - nir_op convert_op = get_bool_convert_opcode(dst_bit_size); - nir_ssa_def *new_src = - nir_build_alu(b, convert_op, phi_src->src.ssa, NULL, NULL, NULL); - nir_instr_rewrite_src(&phi->instr, &phi_src->src, - nir_src_for_ssa(new_src)); - } - } - - phi->dest.ssa.bit_size = dst_bit_size; - - return true; -} - -static bool -lower_tex_instr(nir_tex_instr *tex) -{ - bool progress = false; - rewrite_1bit_ssa_def_to_32bit(&tex->dest.ssa, &progress); - if (tex->dest_type == nir_type_bool1) { - tex->dest_type = nir_type_bool32; - progress = true; - } - return progress; -} - -static bool -nir_lower_bool_to_bitsize_instr(nir_builder *b, - nir_instr *instr, - UNUSED void *cb_data) -{ - switch (instr->type) { - case nir_instr_type_alu: - return lower_alu_instr(b, nir_instr_as_alu(instr)); - - case nir_instr_type_load_const: - return lower_load_const_instr(nir_instr_as_load_const(instr)); - - case nir_instr_type_phi: - return lower_phi_instr(b, nir_instr_as_phi(instr)); - - case nir_instr_type_ssa_undef: - case nir_instr_type_intrinsic: { - bool progress = false; - nir_foreach_ssa_def(instr, rewrite_1bit_ssa_def_to_32bit, &progress); - return progress; - } - - case nir_instr_type_tex: - return lower_tex_instr(nir_instr_as_tex(instr)); - - default: - nir_foreach_ssa_def(instr, assert_ssa_def_is_not_1bit, NULL); - return false; - } -} - -bool -nir_lower_bool_to_bitsize(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, nir_lower_bool_to_bitsize_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_float.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_float.c deleted file mode 100644 index aa18663..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_float.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -assert_ssa_def_is_not_1bit(nir_ssa_def *def, UNUSED void *unused) -{ - assert(def->bit_size > 1); - return true; -} - -static bool -rewrite_1bit_ssa_def_to_32bit(nir_ssa_def *def, void *_progress) -{ - bool *progress = _progress; - if (def->bit_size == 1) { - def->bit_size = 32; - *progress = true; - } - return true; -} - -static bool -lower_alu_instr(nir_builder *b, nir_alu_instr *alu, bool has_fcsel_ne, - bool has_fcsel_gt) -{ - const nir_op_info *op_info = &nir_op_infos[alu->op]; - - b->cursor = nir_before_instr(&alu->instr); - - /* Replacement SSA value */ - nir_ssa_def *rep = NULL; - switch (alu->op) { - case nir_op_mov: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_vec5: - case nir_op_vec8: - case nir_op_vec16: - if (alu->dest.dest.ssa.bit_size != 1) - return false; - /* These we expect to have booleans but the opcode doesn't change */ - break; - - case nir_op_b2f32: alu->op = nir_op_mov; break; - case nir_op_b2i32: alu->op = nir_op_mov; break; - case nir_op_b2b1: alu->op = nir_op_mov; break; - - case nir_op_flt: alu->op = nir_op_slt; break; - case nir_op_fge: alu->op = nir_op_sge; break; - case nir_op_feq: alu->op = nir_op_seq; break; - case nir_op_fneu: alu->op = nir_op_sne; break; - case nir_op_ilt: alu->op = nir_op_slt; break; - case nir_op_ige: alu->op = nir_op_sge; break; - case nir_op_ieq: alu->op = nir_op_seq; break; - case nir_op_ine: alu->op = nir_op_sne; break; - case nir_op_ult: alu->op = nir_op_slt; break; - case nir_op_uge: alu->op = nir_op_sge; break; - - case nir_op_ball_fequal2: alu->op = nir_op_fall_equal2; break; - case nir_op_ball_fequal3: alu->op = nir_op_fall_equal3; break; - case nir_op_ball_fequal4: alu->op = nir_op_fall_equal4; break; - case nir_op_bany_fnequal2: alu->op = nir_op_fany_nequal2; break; - case nir_op_bany_fnequal3: alu->op = nir_op_fany_nequal3; break; - case nir_op_bany_fnequal4: alu->op = nir_op_fany_nequal4; break; - case nir_op_ball_iequal2: alu->op = nir_op_fall_equal2; break; - case nir_op_ball_iequal3: alu->op = nir_op_fall_equal3; break; - case nir_op_ball_iequal4: alu->op = nir_op_fall_equal4; break; - case nir_op_bany_inequal2: alu->op = nir_op_fany_nequal2; break; - case nir_op_bany_inequal3: alu->op = nir_op_fany_nequal3; break; - case nir_op_bany_inequal4: alu->op = nir_op_fany_nequal4; break; - - case nir_op_bcsel: - if (has_fcsel_gt) - alu->op = nir_op_fcsel_gt; - else if (has_fcsel_ne) - alu->op = nir_op_fcsel; - else { - /* Only a few pre-VS 4.0 platforms (e.g., r300 vertex shaders) should - * hit this path. - */ - rep = nir_flrp(b, - nir_ssa_for_alu_src(b, alu, 2), - nir_ssa_for_alu_src(b, alu, 1), - nir_ssa_for_alu_src(b, alu, 0)); - } - - break; - - case nir_op_iand: alu->op = nir_op_fmul; break; - case nir_op_ixor: alu->op = nir_op_sne; break; - case nir_op_ior: alu->op = nir_op_fmax; break; - - case nir_op_inot: - rep = nir_seq(b, nir_ssa_for_alu_src(b, alu, 0), - nir_imm_float(b, 0)); - break; - - default: - assert(alu->dest.dest.ssa.bit_size > 1); - for (unsigned i = 0; i < op_info->num_inputs; i++) - assert(alu->src[i].src.ssa->bit_size > 1); - return false; - } - - if (rep) { - /* We've emitted a replacement instruction */ - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, rep); - nir_instr_remove(&alu->instr); - } else { - if (alu->dest.dest.ssa.bit_size == 1) - alu->dest.dest.ssa.bit_size = 32; - } - - return true; -} - -static bool -lower_tex_instr(nir_tex_instr *tex) -{ - bool progress = false; - rewrite_1bit_ssa_def_to_32bit(&tex->dest.ssa, &progress); - if (tex->dest_type == nir_type_bool1) { - tex->dest_type = nir_type_bool32; - progress = true; - } - return progress; -} - -struct lower_bool_to_float_data { - bool has_fcsel_ne; - bool has_fcsel_gt; -}; - -static bool -nir_lower_bool_to_float_instr(nir_builder *b, - nir_instr *instr, - void *cb_data) -{ - struct lower_bool_to_float_data *data = cb_data; - - switch (instr->type) { - case nir_instr_type_alu: - return lower_alu_instr(b, nir_instr_as_alu(instr), - data->has_fcsel_ne, data->has_fcsel_gt); - - case nir_instr_type_load_const: { - nir_load_const_instr *load = nir_instr_as_load_const(instr); - if (load->def.bit_size == 1) { - nir_const_value *value = load->value; - for (unsigned i = 0; i < load->def.num_components; i++) - load->value[i].f32 = value[i].b ? 1.0 : 0.0; - load->def.bit_size = 32; - return true; - } - return false; - } - - case nir_instr_type_intrinsic: - case nir_instr_type_ssa_undef: - case nir_instr_type_phi: { - bool progress = false; - nir_foreach_ssa_def(instr, rewrite_1bit_ssa_def_to_32bit, &progress); - return progress; - } - - case nir_instr_type_tex: - return lower_tex_instr(nir_instr_as_tex(instr)); - - default: - nir_foreach_ssa_def(instr, assert_ssa_def_is_not_1bit, NULL); - return false; - } -} - -bool -nir_lower_bool_to_float(nir_shader *shader, bool has_fcsel_ne) -{ - struct lower_bool_to_float_data data = { - .has_fcsel_ne = has_fcsel_ne, - .has_fcsel_gt = shader->options->has_fused_comp_and_csel - }; - - return nir_shader_instructions_pass(shader, nir_lower_bool_to_float_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &data); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_int32.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_int32.c deleted file mode 100644 index becdd66..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_bool_to_int32.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -assert_ssa_def_is_not_1bit(nir_ssa_def *def, UNUSED void *unused) -{ - assert(def->bit_size > 1); - return true; -} - -static bool -rewrite_1bit_ssa_def_to_32bit(nir_ssa_def *def, void *_progress) -{ - bool *progress = _progress; - if (def->bit_size == 1) { - def->bit_size = 32; - *progress = true; - } - return true; -} - -static bool -lower_alu_instr(nir_alu_instr *alu) -{ - const nir_op_info *op_info = &nir_op_infos[alu->op]; - - assert(alu->dest.dest.is_ssa); - - switch (alu->op) { - case nir_op_mov: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_vec5: - case nir_op_vec8: - case nir_op_vec16: - case nir_op_inot: - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - if (alu->dest.dest.ssa.bit_size != 1) - return false; - /* These we expect to have booleans but the opcode doesn't change */ - break; - - case nir_op_b2b32: - case nir_op_b2b1: - /* We're mutating instructions in a dominance-preserving order so our - * source boolean should be 32-bit by now. - */ - assert(nir_src_bit_size(alu->src[0].src) == 32); - alu->op = nir_op_mov; - break; - - case nir_op_flt: alu->op = nir_op_flt32; break; - case nir_op_fge: alu->op = nir_op_fge32; break; - case nir_op_feq: alu->op = nir_op_feq32; break; - case nir_op_fneu: alu->op = nir_op_fneu32; break; - case nir_op_ilt: alu->op = nir_op_ilt32; break; - case nir_op_ige: alu->op = nir_op_ige32; break; - case nir_op_ieq: alu->op = nir_op_ieq32; break; - case nir_op_ine: alu->op = nir_op_ine32; break; - case nir_op_ult: alu->op = nir_op_ult32; break; - case nir_op_uge: alu->op = nir_op_uge32; break; - - case nir_op_ball_fequal2: alu->op = nir_op_b32all_fequal2; break; - case nir_op_ball_fequal3: alu->op = nir_op_b32all_fequal3; break; - case nir_op_ball_fequal4: alu->op = nir_op_b32all_fequal4; break; - case nir_op_bany_fnequal2: alu->op = nir_op_b32any_fnequal2; break; - case nir_op_bany_fnequal3: alu->op = nir_op_b32any_fnequal3; break; - case nir_op_bany_fnequal4: alu->op = nir_op_b32any_fnequal4; break; - case nir_op_ball_iequal2: alu->op = nir_op_b32all_iequal2; break; - case nir_op_ball_iequal3: alu->op = nir_op_b32all_iequal3; break; - case nir_op_ball_iequal4: alu->op = nir_op_b32all_iequal4; break; - case nir_op_bany_inequal2: alu->op = nir_op_b32any_inequal2; break; - case nir_op_bany_inequal3: alu->op = nir_op_b32any_inequal3; break; - case nir_op_bany_inequal4: alu->op = nir_op_b32any_inequal4; break; - - case nir_op_bcsel: alu->op = nir_op_b32csel; break; - - case nir_op_fisfinite: alu->op = nir_op_fisfinite32; break; - - default: - assert(alu->dest.dest.ssa.bit_size > 1); - for (unsigned i = 0; i < op_info->num_inputs; i++) - assert(alu->src[i].src.ssa->bit_size > 1); - return false; - } - - if (alu->dest.dest.ssa.bit_size == 1) - alu->dest.dest.ssa.bit_size = 32; - - return true; -} - -static bool -lower_tex_instr(nir_tex_instr *tex) -{ - bool progress = false; - rewrite_1bit_ssa_def_to_32bit(&tex->dest.ssa, &progress); - if (tex->dest_type == nir_type_bool1) { - tex->dest_type = nir_type_bool32; - progress = true; - } - return progress; -} - -static bool -nir_lower_bool_to_int32_instr(UNUSED nir_builder *b, - nir_instr *instr, - UNUSED void *cb_data) -{ - switch (instr->type) { - case nir_instr_type_alu: - return lower_alu_instr(nir_instr_as_alu(instr)); - - case nir_instr_type_load_const: { - nir_load_const_instr *load = nir_instr_as_load_const(instr); - if (load->def.bit_size == 1) { - nir_const_value *value = load->value; - for (unsigned i = 0; i < load->def.num_components; i++) - load->value[i].u32 = value[i].b ? NIR_TRUE : NIR_FALSE; - load->def.bit_size = 32; - return true; - } - return false; - } - - case nir_instr_type_intrinsic: - case nir_instr_type_ssa_undef: - case nir_instr_type_phi: { - bool progress = false; - nir_foreach_ssa_def(instr, rewrite_1bit_ssa_def_to_32bit, &progress); - return progress; - } - - case nir_instr_type_tex: - return lower_tex_instr(nir_instr_as_tex(instr)); - - default: - nir_foreach_ssa_def(instr, assert_ssa_def_is_not_1bit, NULL); - return false; - } -} - -bool -nir_lower_bool_to_int32(nir_shader *shader) -{ - bool progress = false; - nir_foreach_function(func, shader) { - for (unsigned idx = 0; idx < func->num_params; idx++) { - nir_parameter *param = &func->params[idx]; - if (param->bit_size == 1) { - param->bit_size = 32; - progress = true; - } - } - } - - progress |= - nir_shader_instructions_pass(shader, nir_lower_bool_to_int32_instr, - nir_metadata_block_index | - nir_metadata_dominance, NULL); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_cl_images.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_cl_images.c deleted file mode 100644 index 738a9c9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_cl_images.c +++ /dev/null @@ -1,298 +0,0 @@ -/* SPDX-License-Identifier: MIT */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -var_is_inline_sampler(const nir_variable *var) -{ - if (var->data.mode != nir_var_uniform) - return false; - - return glsl_type_is_sampler(var->type) && - var->data.sampler.is_inline_sampler; -} - -static bool -inline_sampler_vars_equal(const nir_variable *a, const nir_variable *b) -{ - assert(var_is_inline_sampler(a) && var_is_inline_sampler(b)); - - if (a == b) - return true; - - return a->data.sampler.addressing_mode == b->data.sampler.addressing_mode && - a->data.sampler.normalized_coordinates == b->data.sampler.normalized_coordinates && - a->data.sampler.filter_mode == b->data.sampler.filter_mode; -} - -static nir_variable * -find_identical_inline_sampler(nir_shader *nir, - struct exec_list *inline_samplers, - nir_variable *sampler) -{ - nir_foreach_variable_in_list(var, inline_samplers) { - if (inline_sampler_vars_equal(var, sampler)) - return var; - } - - nir_foreach_uniform_variable(var, nir) { - if (!var_is_inline_sampler(var) || - !inline_sampler_vars_equal(var, sampler)) - continue; - - exec_node_remove(&var->node); - exec_list_push_tail(inline_samplers, &var->node); - return var; - } - unreachable("Should have at least found the input sampler"); -} - -static bool -nir_dedup_inline_samplers_instr(nir_builder *b, - nir_instr *instr, - void *cb_data) -{ - struct exec_list *inline_samplers = cb_data; - - if (instr->type != nir_instr_type_deref) - return false; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type != nir_deref_type_var) - return false; - - nir_variable *sampler = nir_deref_instr_get_variable(deref); - if (!var_is_inline_sampler(sampler)) - return false; - - nir_variable *replacement = - find_identical_inline_sampler(b->shader, inline_samplers, sampler); - deref->var = replacement; - return true; -} - -/** De-duplicates inline sampler variables - * - * Any dead or redundant inline sampler variables are removed any live inline - * sampler variables are placed at the end of the variables list. - */ -bool -nir_dedup_inline_samplers(nir_shader *nir) -{ - struct exec_list inline_samplers; - exec_list_make_empty(&inline_samplers); - - nir_shader_instructions_pass(nir, nir_dedup_inline_samplers_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &inline_samplers); - - /* If we found any inline samplers in the instructions pass, they'll now be - * in the inline_samplers list. - */ - bool progress = !exec_list_is_empty(&inline_samplers); - - /* Remove any dead samplers */ - nir_foreach_uniform_variable_safe(var, nir) { - if (var_is_inline_sampler(var)) { - exec_node_remove(&var->node); - progress = true; - } - } - - exec_node_insert_list_after(exec_list_get_tail(&nir->variables), - &inline_samplers); - - return progress; -} - -bool -nir_lower_cl_images(nir_shader *shader, bool lower_image_derefs, bool lower_sampler_derefs) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - ASSERTED int last_loc = -1; - int num_rd_images = 0, num_wr_images = 0; - nir_foreach_variable_with_modes(var, shader, nir_var_image | nir_var_uniform) { - if (!glsl_type_is_image(var->type) && !glsl_type_is_texture(var->type)) - continue; - - /* Assume they come in order */ - assert(var->data.location > last_loc); - last_loc = var->data.location; - - assert(glsl_type_is_image(var->type) || var->data.access & ACCESS_NON_WRITEABLE); - if (var->data.access & ACCESS_NON_WRITEABLE) - var->data.driver_location = num_rd_images++; - else - var->data.driver_location = num_wr_images++; - var->data.binding = var->data.driver_location; - } - shader->info.num_textures = num_rd_images; - BITSET_ZERO(shader->info.textures_used); - if (num_rd_images) - BITSET_SET_RANGE(shader->info.textures_used, 0, num_rd_images - 1); - - BITSET_ZERO(shader->info.images_used); - if (num_wr_images) - BITSET_SET_RANGE(shader->info.images_used, 0, num_wr_images - 1); - shader->info.num_images = num_wr_images; - - last_loc = -1; - int num_samplers = 0; - nir_foreach_uniform_variable(var, shader) { - if (var->type == glsl_bare_sampler_type()) { - /* Assume they come in order */ - assert(var->data.location > last_loc); - last_loc = var->data.location; - var->data.driver_location = num_samplers++; - } else { - /* CL shouldn't have any sampled images */ - assert(!glsl_type_is_sampler(var->type)); - } - } - BITSET_ZERO(shader->info.samplers_used); - if (num_samplers) - BITSET_SET_RANGE(shader->info.samplers_used, 0, num_samplers - 1); - - nir_builder b; - nir_builder_init(&b, impl); - - /* don't need any lowering if we can keep the derefs */ - if (!lower_image_derefs && !lower_sampler_derefs) { - nir_metadata_preserve(impl, nir_metadata_all); - return false; - } - - bool progress = false; - nir_foreach_block_reverse(block, impl) { - nir_foreach_instr_reverse_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type != nir_deref_type_var) - break; - - if (!glsl_type_is_image(deref->type) && - !glsl_type_is_texture(deref->type) && - !glsl_type_is_sampler(deref->type)) - break; - - if (!lower_image_derefs && glsl_type_is_image(deref->type)) - break; - - if (!lower_sampler_derefs && - (glsl_type_is_sampler(deref->type) || glsl_type_is_texture(deref->type))) - break; - - b.cursor = nir_instr_remove(&deref->instr); - nir_ssa_def *loc = - nir_imm_intN_t(&b, deref->var->data.driver_location, - deref->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&deref->dest.ssa, loc); - progress = true; - break; - } - - case nir_instr_type_tex: { - if (!lower_sampler_derefs) - break; - - nir_tex_instr *tex = nir_instr_as_tex(instr); - unsigned count = 0; - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (tex->src[i].src_type == nir_tex_src_texture_deref || - tex->src[i].src_type == nir_tex_src_sampler_deref) { - nir_deref_instr *deref = nir_src_as_deref(tex->src[i].src); - if (deref->deref_type == nir_deref_type_var) { - /* In this case, we know the actual variable */ - if (tex->src[i].src_type == nir_tex_src_texture_deref) - tex->texture_index = deref->var->data.driver_location; - else - tex->sampler_index = deref->var->data.driver_location; - /* This source gets discarded */ - nir_instr_rewrite_src(&tex->instr, &tex->src[i].src, - NIR_SRC_INIT); - continue; - } else { - assert(tex->src[i].src.is_ssa); - b.cursor = nir_before_instr(&tex->instr); - /* Back-ends expect a 32-bit thing, not 64-bit */ - nir_ssa_def *offset = nir_u2u32(&b, tex->src[i].src.ssa); - if (tex->src[i].src_type == nir_tex_src_texture_deref) - tex->src[count].src_type = nir_tex_src_texture_offset; - else - tex->src[count].src_type = nir_tex_src_sampler_offset; - nir_instr_rewrite_src(&tex->instr, &tex->src[count].src, - nir_src_for_ssa(offset)); - } - } else { - /* If we've removed a source, move this one down */ - if (count != i) { - assert(count < i); - tex->src[count].src_type = tex->src[i].src_type; - nir_instr_move_src(&tex->instr, &tex->src[count].src, - &tex->src[i].src); - } - } - count++; - } - tex->num_srcs = count; - progress = true; - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_inc_wrap: - case nir_intrinsic_image_deref_atomic_dec_wrap: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_image_deref_samples: { - if (!lower_image_derefs) - break; - - assert(intrin->src[0].is_ssa); - b.cursor = nir_before_instr(&intrin->instr); - /* Back-ends expect a 32-bit thing, not 64-bit */ - nir_ssa_def *offset = nir_u2u32(&b, intrin->src[0].ssa); - nir_rewrite_image_intrinsic(intrin, offset, false); - progress = true; - break; - } - - default: - break; - } - break; - } - - default: - break; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clamp_color_outputs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clamp_color_outputs.c deleted file mode 100644 index 0e24601..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clamp_color_outputs.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#include "nir.h" -#include "nir_builder.h" - -static bool -is_color_output(nir_shader *shader, nir_variable *out) -{ - switch (shader->info.stage) { - case MESA_SHADER_VERTEX: - case MESA_SHADER_GEOMETRY: - case MESA_SHADER_TESS_EVAL: - switch (out->data.location) { - case VARYING_SLOT_COL0: - case VARYING_SLOT_COL1: - case VARYING_SLOT_BFC0: - case VARYING_SLOT_BFC1: - return true; - default: - return false; - } - break; - case MESA_SHADER_FRAGMENT: - return (out->data.location == FRAG_RESULT_COLOR || - out->data.location >= FRAG_RESULT_DATA0); - default: - return false; - } -} - -static bool -lower_intrinsic(nir_builder *b, nir_intrinsic_instr *intr, nir_shader *shader) -{ - nir_variable *out = NULL; - nir_ssa_def *s; - - switch (intr->intrinsic) { - case nir_intrinsic_store_deref: - out = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0])); - break; - case nir_intrinsic_store_output: - /* already had i/o lowered.. lookup the matching output var: */ - nir_foreach_shader_out_variable(var, shader) { - int drvloc = var->data.driver_location; - if (nir_intrinsic_base(intr) == drvloc) { - out = var; - break; - } - } - assume(out); - break; - default: - return false; - } - - if (out->data.mode != nir_var_shader_out) - return false; - - if (is_color_output(shader, out)) { - b->cursor = nir_before_instr(&intr->instr); - int src = intr->intrinsic == nir_intrinsic_store_deref ? 1 : 0; - s = nir_ssa_for_src(b, intr->src[src], intr->num_components); - s = nir_fsat(b, s); - nir_instr_rewrite_src(&intr->instr, &intr->src[src], nir_src_for_ssa(s)); - } - - return true; -} - -static bool -lower_instr(nir_builder *b, nir_instr *instr, void *cb_data) -{ - if (instr->type == nir_instr_type_intrinsic) - return lower_intrinsic(b, nir_instr_as_intrinsic(instr), cb_data); - return false; -} - -bool -nir_lower_clamp_color_outputs(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, lower_instr, - nir_metadata_block_index | - nir_metadata_dominance, - shader); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip.c deleted file mode 100644 index 4ef2f3d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip.c +++ /dev/null @@ -1,521 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Rob Clark - */ - -#include "nir.h" -#include "nir_builder.h" - -#define MAX_CLIP_PLANES 8 - -/* Generates the lowering code for user-clip-planes, generating CLIPDIST - * from UCP[n] + CLIPVERTEX or POSITION. Additionally, an optional pass - * for fragment shaders to insert conditional kills based on the inter- - * polated CLIPDIST - * - * NOTE: should be run after nir_lower_outputs_to_temporaries() (or at - * least in scenarios where you can count on each output written once - * and only once). - */ - - -static nir_variable * -create_clipdist_var(nir_shader *shader, - bool output, gl_varying_slot slot, unsigned array_size) -{ - nir_variable *var = rzalloc(shader, nir_variable); - - if (output) { - var->data.driver_location = shader->num_outputs; - var->data.mode = nir_var_shader_out; - shader->num_outputs += MAX2(1, DIV_ROUND_UP(array_size, 4)); - } else { - var->data.driver_location = shader->num_inputs; - var->data.mode = nir_var_shader_in; - shader->num_inputs += MAX2(1, DIV_ROUND_UP(array_size, 4)); - } - var->name = ralloc_asprintf(var, "clipdist_%d", var->data.driver_location); - var->data.index = 0; - var->data.location = slot; - - if (array_size > 0) { - var->type = glsl_array_type(glsl_float_type(), array_size, - sizeof(float)); - var->data.compact = 1; - } else - var->type = glsl_vec4_type(); - - nir_shader_add_variable(shader, var); - return var; -} - -static void -create_clipdist_vars(nir_shader *shader, nir_variable **io_vars, - unsigned ucp_enables, bool output, - bool use_clipdist_array) -{ - shader->info.clip_distance_array_size = util_last_bit(ucp_enables); - if (use_clipdist_array) { - io_vars[0] = - create_clipdist_var(shader, output, - VARYING_SLOT_CLIP_DIST0, - shader->info.clip_distance_array_size); - } else { - if (ucp_enables & 0x0f) - io_vars[0] = - create_clipdist_var(shader, output, - VARYING_SLOT_CLIP_DIST0, 0); - if (ucp_enables & 0xf0) - io_vars[1] = - create_clipdist_var(shader, output, - VARYING_SLOT_CLIP_DIST1, 0); - } -} - -static void -store_clipdist_output(nir_builder *b, nir_variable *out, int location_offset, - nir_ssa_def **val) -{ - nir_io_semantics semantics = { - .location = out->data.location, - .num_slots = 1, - }; - - nir_store_output(b, nir_vec4(b, val[0], val[1], val[2], val[3]), nir_imm_int(b, location_offset), - .base = out->data.driver_location, - .src_type = nir_type_float32, - .write_mask = 0xf, - .io_semantics = semantics); -} - -static void -load_clipdist_input(nir_builder *b, nir_variable *in, int location_offset, - nir_ssa_def **val) -{ - nir_io_semantics semantics = { - .location = in->data.location, - .num_slots = 1, - }; - - nir_ssa_def *load; - if (b->shader->options->use_interpolated_input_intrinsics) { - /* TODO: use sample when per-sample shading? */ - nir_ssa_def *barycentric = nir_load_barycentric( - b, nir_intrinsic_load_barycentric_pixel, INTERP_MODE_NONE); - load = nir_load_interpolated_input( - b, 4, 32, barycentric, nir_imm_int(b, location_offset), - .base = in->data.driver_location, - .dest_type = nir_type_float32, - .io_semantics = semantics); - - } else { - load = nir_load_input(b, 4, 32, nir_imm_int(b, location_offset), - .base = in->data.driver_location, - .dest_type = nir_type_float32, - .io_semantics = semantics); - } - - val[0] = nir_channel(b, load, 0); - val[1] = nir_channel(b, load, 1); - val[2] = nir_channel(b, load, 2); - val[3] = nir_channel(b, load, 3); -} - -static nir_ssa_def * -find_output_in_block(nir_block *block, unsigned drvloc) -{ - nir_foreach_instr(instr, block) { - - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if ((intr->intrinsic == nir_intrinsic_store_output) && - nir_intrinsic_base(intr) == drvloc) { - assert(intr->src[0].is_ssa); - assert(nir_src_is_const(intr->src[1])); - return intr->src[0].ssa; - } - } - } - - return NULL; -} - -/* TODO: maybe this would be a useful helper? - * NOTE: assumes each output is written exactly once (and unconditionally) - * so if needed nir_lower_outputs_to_temporaries() - */ -static nir_ssa_def * -find_output(nir_shader *shader, unsigned drvloc) -{ - nir_ssa_def *def = NULL; - nir_foreach_function(function, shader) { - if (function->impl) { - nir_foreach_block_reverse(block, function->impl) { - nir_ssa_def *new_def = find_output_in_block(block, drvloc); - assert(!(new_def && def)); - def = new_def; -#if !defined(DEBUG) - /* for debug builds, scan entire shader to assert - * if output is written multiple times. For release - * builds just assume all is well and bail when we - * find first: - */ - if (def) - break; -#endif - } - } - } - - return def; -} - -static bool -find_clipvertex_and_position_outputs(nir_shader *shader, - nir_variable **clipvertex, - nir_variable **position) -{ - nir_foreach_shader_out_variable(var, shader) { - switch (var->data.location) { - case VARYING_SLOT_POS: - *position = var; - break; - case VARYING_SLOT_CLIP_VERTEX: - *clipvertex = var; - break; - case VARYING_SLOT_CLIP_DIST0: - case VARYING_SLOT_CLIP_DIST1: - /* if shader is already writing CLIPDIST, then - * there should be no user-clip-planes to deal - * with. - * - * We assume nir_remove_dead_variables has removed the clipdist - * variables if they're not written. - */ - return false; - } - } - - return *clipvertex || *position; -} - -static nir_ssa_def * -get_ucp(nir_builder *b, int plane, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]) -{ - if (clipplane_state_tokens) { - char tmp[100]; - snprintf(tmp, ARRAY_SIZE(tmp), "gl_ClipPlane%dMESA", plane); - nir_variable *var = nir_variable_create(b->shader, - nir_var_uniform, - glsl_vec4_type(), - tmp); - - var->num_state_slots = 1; - var->state_slots = ralloc_array(var, nir_state_slot, 1); - memcpy(var->state_slots[0].tokens, - clipplane_state_tokens[plane], - sizeof(var->state_slots[0].tokens)); - return nir_load_var(b, var); - } else - return nir_load_user_clip_plane(b, plane); -} - - -static void -lower_clip_outputs(nir_builder *b, nir_variable *position, - nir_variable *clipvertex, nir_variable **out, - unsigned ucp_enables, bool use_vars, - bool use_clipdist_array, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]) -{ - nir_ssa_def *clipdist[MAX_CLIP_PLANES]; - nir_ssa_def *cv; - - if (use_vars) { - cv = nir_load_var(b, clipvertex ? clipvertex : position); - - if (clipvertex) { - clipvertex->data.mode = nir_var_shader_temp; - nir_fixup_deref_modes(b->shader); - } - } else { - if (clipvertex) - cv = find_output(b->shader, clipvertex->data.driver_location); - else { - assert(position); - cv = find_output(b->shader, position->data.driver_location); - } - } - - for (int plane = 0; plane < MAX_CLIP_PLANES; plane++) { - if (ucp_enables & (1 << plane)) { - nir_ssa_def *ucp = get_ucp(b, plane, clipplane_state_tokens); - - /* calculate clipdist[plane] - dot(ucp, cv): */ - clipdist[plane] = nir_fdot(b, ucp, cv); - } else { - /* 0.0 == don't-clip == disabled: */ - clipdist[plane] = nir_imm_float(b, 0.0); - } - if (use_clipdist_array && use_vars && plane < util_last_bit(ucp_enables)) { - nir_deref_instr *deref; - deref = nir_build_deref_array_imm(b, - nir_build_deref_var(b, out[0]), - plane); - nir_store_deref(b, deref, clipdist[plane], 1); - } - } - - if (!use_clipdist_array || !use_vars) { - if (use_vars) { - if (ucp_enables & 0x0f) - nir_store_var(b, out[0], nir_vec(b, clipdist, 4), 0xf); - if (ucp_enables & 0xf0) - nir_store_var(b, out[1], nir_vec(b, &clipdist[4], 4), 0xf); - } else if (use_clipdist_array) { - if (ucp_enables & 0x0f) - store_clipdist_output(b, out[0], 0, &clipdist[0]); - if (ucp_enables & 0xf0) - store_clipdist_output(b, out[0], 1, &clipdist[4]); - } else { - if (ucp_enables & 0x0f) - store_clipdist_output(b, out[0], 0, &clipdist[0]); - if (ucp_enables & 0xf0) - store_clipdist_output(b, out[1], 0, &clipdist[4]); - } - } -} - -/* - * VS lowering - */ - -/* ucp_enables is bitmask of enabled ucps. Actual ucp values are - * passed in to shader via user_clip_plane system-values - * - * If use_vars is true, the pass will use variable loads and stores instead - * of working with store_output intrinsics. - * - * If use_clipdist_array is true, the pass will use compact arrays for the - * clipdist output instead of two vec4s. - */ -bool -nir_lower_clip_vs(nir_shader *shader, unsigned ucp_enables, bool use_vars, - bool use_clipdist_array, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - nir_builder b; - nir_variable *position = NULL; - nir_variable *clipvertex = NULL; - nir_variable *out[2] = { NULL }; - - if (!ucp_enables) - return false; - - nir_builder_init(&b, impl); - - /* NIR should ensure that, even in case of loops/if-else, there - * should be only a single predecessor block to end_block, which - * makes the perfect place to insert the clipdist calculations. - * - * NOTE: in case of early returns, these would have to be lowered - * to jumps to end_block predecessor in a previous pass. Not sure - * if there is a good way to sanity check this, but for now the - * users of this pass don't support sub-routines. - */ - assert(impl->end_block->predecessors->entries == 1); - b.cursor = nir_after_cf_list(&impl->body); - - /* find clipvertex/position outputs */ - if (!find_clipvertex_and_position_outputs(shader, &clipvertex, &position)) - return false; - - /* insert CLIPDIST outputs */ - create_clipdist_vars(shader, out, ucp_enables, true, - use_clipdist_array); - - lower_clip_outputs(&b, position, clipvertex, out, ucp_enables, use_vars, - use_clipdist_array, clipplane_state_tokens); - - nir_metadata_preserve(impl, nir_metadata_dominance); - - return true; -} - -static void -lower_clip_in_gs_block(nir_builder *b, nir_block *block, nir_variable *position, - nir_variable *clipvertex, nir_variable **out, - unsigned ucp_enables, bool use_clipdist_array, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]) -{ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_emit_vertex_with_counter: - case nir_intrinsic_emit_vertex: - b->cursor = nir_before_instr(instr); - lower_clip_outputs(b, position, clipvertex, out, ucp_enables, true, - use_clipdist_array, clipplane_state_tokens); - break; - default: - /* not interesting; skip this */ - break; - } - } -} - -/* - * GS lowering - */ - -bool -nir_lower_clip_gs(nir_shader *shader, unsigned ucp_enables, - bool use_clipdist_array, - const gl_state_index16 clipplane_state_tokens[][STATE_LENGTH]) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - nir_builder b; - nir_variable *position = NULL; - nir_variable *clipvertex = NULL; - nir_variable *out[2] = { NULL }; - - if (!ucp_enables) - return false; - - /* find clipvertex/position outputs */ - if (!find_clipvertex_and_position_outputs(shader, &clipvertex, &position)) - return false; - - /* insert CLIPDIST outputs */ - create_clipdist_vars(shader, out, ucp_enables, true, - use_clipdist_array); - - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) - lower_clip_in_gs_block(&b, block, position, clipvertex, out, - ucp_enables, use_clipdist_array, - clipplane_state_tokens); - - nir_metadata_preserve(impl, nir_metadata_dominance); - - return true; -} - -/* - * FS lowering - */ - -static void -lower_clip_fs(nir_function_impl *impl, unsigned ucp_enables, - nir_variable **in, bool use_clipdist_array) -{ - nir_ssa_def *clipdist[MAX_CLIP_PLANES]; - nir_builder b; - - nir_builder_init(&b, impl); - b.cursor = nir_before_cf_list(&impl->body); - - if (!use_clipdist_array) { - if (ucp_enables & 0x0f) - load_clipdist_input(&b, in[0], 0, &clipdist[0]); - if (ucp_enables & 0xf0) - load_clipdist_input(&b, in[1], 0, &clipdist[4]); - } else { - if (ucp_enables & 0x0f) - load_clipdist_input(&b, in[0], 0, &clipdist[0]); - if (ucp_enables & 0xf0) - load_clipdist_input(&b, in[0], 1, &clipdist[4]); - } - - nir_ssa_def *cond = NULL; - - for (int plane = 0; plane < MAX_CLIP_PLANES; plane++) { - if (ucp_enables & (1 << plane)) { - nir_ssa_def *this_cond = - nir_flt(&b, clipdist[plane], nir_imm_float(&b, 0.0)); - - cond = cond ? nir_ior(&b, cond, this_cond) : this_cond; - } - } - - if (cond != NULL) { - nir_discard_if(&b, cond); - b.shader->info.fs.uses_discard = true; - } - - nir_metadata_preserve(impl, nir_metadata_dominance); -} - -static bool -fs_has_clip_dist_input_var(nir_shader *shader, nir_variable **io_vars, - unsigned *ucp_enables) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - nir_foreach_shader_in_variable(var, shader) { - switch (var->data.location) { - case VARYING_SLOT_CLIP_DIST0: - assert(var->data.compact); - io_vars[0] = var; - *ucp_enables &= (1 << glsl_get_length(var->type)) - 1; - return true; - default: - break; - } - } - return false; -} - -/* insert conditional kill based on interpolated CLIPDIST - */ -bool -nir_lower_clip_fs(nir_shader *shader, unsigned ucp_enables, - bool use_clipdist_array) -{ - nir_variable *in[2] = {0}; - - if (!ucp_enables) - return false; - - /* No hard reason to require use_clipdist_arr to work with - * frag-shader-based gl_ClipDistance, except that the only user that does - * not enable this does not support GL 3.0 (or EXT_clip_cull_distance). - */ - if (!fs_has_clip_dist_input_var(shader, in, &ucp_enables)) - create_clipdist_vars(shader, in, ucp_enables, false, use_clipdist_array); - else - assert(use_clipdist_array); - - nir_foreach_function(function, shader) { - if (!strcmp(function->name, "main")) - lower_clip_fs(function->impl, ucp_enables, in, use_clipdist_array); - } - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_cull_distance_arrays.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_cull_distance_arrays.c deleted file mode 100644 index ff7120f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_cull_distance_arrays.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** - * @file - * - * This pass combines clip and cull distance arrays in separate locations and - * colocates them both in VARYING_SLOT_CLIP_DIST0. It does so by maintaining - * two arrays but making them compact and using location_frac to stack them on - * top of each other. - */ - -/** - * Get the length of the clip/cull distance array, looking past - * any interface block arrays. - */ -static unsigned -get_unwrapped_array_length(nir_shader *nir, nir_variable *var) -{ - if (!var) - return 0; - - /* Unwrap GS input and TCS input/output interfaces. We want the - * underlying clip/cull distance array length, not the per-vertex - * array length. - */ - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, nir->info.stage)) - type = glsl_get_array_element(type); - - if (var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - assert(glsl_type_is_array(type)); - - return glsl_get_length(type); -} - -static bool -combine_clip_cull(nir_shader *nir, - nir_variable_mode mode, - bool store_info) -{ - nir_variable *cull = NULL; - nir_variable *clip = NULL; - - nir_foreach_variable_with_modes(var, nir, mode) { - if (var->data.location == VARYING_SLOT_CLIP_DIST0) - clip = var; - - if (var->data.location == VARYING_SLOT_CULL_DIST0) - cull = var; - } - - if (!cull && !clip) { - /* If this is run after optimizations and the variables have been - * eliminated, we should update the shader info, because no other - * place does that. - */ - if (store_info) { - nir->info.clip_distance_array_size = 0; - nir->info.cull_distance_array_size = 0; - } - return false; - } - - if (!cull && clip) { - /* The GLSL IR lowering pass must have converted these to vectors */ - if (!clip->data.compact) - return false; - - /* If this pass has already run, don't repeat. We would think that - * the combined clip/cull distance array was clip-only and mess up. - */ - if (clip->data.how_declared == nir_var_hidden) - return false; - } - - const unsigned clip_array_size = get_unwrapped_array_length(nir, clip); - const unsigned cull_array_size = get_unwrapped_array_length(nir, cull); - - if (store_info) { - nir->info.clip_distance_array_size = clip_array_size; - nir->info.cull_distance_array_size = cull_array_size; - } - - if (clip) { - assert(clip->data.compact); - clip->data.how_declared = nir_var_hidden; - } - - if (cull) { - assert(cull->data.compact); - cull->data.how_declared = nir_var_hidden; - cull->data.location = VARYING_SLOT_CLIP_DIST0 + clip_array_size / 4; - cull->data.location_frac = clip_array_size % 4; - } - - return true; -} - -bool -nir_lower_clip_cull_distance_arrays(nir_shader *nir) -{ - bool progress = false; - - if (nir->info.stage <= MESA_SHADER_GEOMETRY || - nir->info.stage == MESA_SHADER_MESH) - progress |= combine_clip_cull(nir, nir_var_shader_out, true); - - if (nir->info.stage > MESA_SHADER_VERTEX && - nir->info.stage <= MESA_SHADER_FRAGMENT) { - progress |= combine_clip_cull(nir, nir_var_shader_in, - nir->info.stage == MESA_SHADER_FRAGMENT); - } - - nir_foreach_function(function, nir) { - if (!function->impl) - continue; - - if (progress) { - nir_metadata_preserve(function->impl, - nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs | - nir_metadata_loop_analysis); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_disable.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_disable.c deleted file mode 100644 index f924506..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_disable.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright © 2020 Mike Blumenkrantz - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Mike Blumenkrantz - */ - -#include "nir.h" -#include "nir_builder.h" - - -/** - * This pass uses the enabled clip planes from the rasterizer state to rewrite - * vertex shader store operations and store a 0 to the corresponding gl_ClipDistance[n] - * value if the plane is disabled - */ - -/* recursively nest if/else blocks until we get to an array index, - * then overwrite it if that plane isn't enabled - */ -static void -recursive_if_chain(nir_builder *b, nir_deref_instr *deref, nir_ssa_def *value, unsigned clip_plane_enable, nir_ssa_def *index, unsigned start, unsigned end) -{ - if (start == end - 1) { - /* store the original value again if the clip plane is enabled */ - if (clip_plane_enable & (1 << start)) - nir_store_deref(b, deref, value, 1 << start); - else - nir_store_deref(b, deref, nir_imm_int(b, 0), 1 << start); - return; - } - - unsigned mid = start + (end - start) / 2; - nir_push_if(b, nir_ilt(b, index, nir_imm_int(b, mid))); - recursive_if_chain(b, deref, value, clip_plane_enable, index, start, mid); - nir_push_else(b, NULL); - recursive_if_chain(b, deref, value, clip_plane_enable, index, mid, end); - nir_pop_if(b, NULL); -} - -/* vulkan (and some drivers) provides no concept of enabling clip planes through api, - * so we rewrite disabled clip planes to a zero value in order to disable them - */ -static bool -lower_clip_plane_store(nir_builder *b, nir_instr *instr_, void *cb_data) -{ - if (instr_->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *instr = nir_instr_as_intrinsic(instr_); - - unsigned clip_plane_enable = *(unsigned *)cb_data; - nir_variable *out; - unsigned plane; - - if (instr->intrinsic != nir_intrinsic_store_deref) - return false; - - nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - - out = nir_deref_instr_get_variable(deref); - if ((out->data.location != VARYING_SLOT_CLIP_DIST0 && - out->data.location != VARYING_SLOT_CLIP_DIST1) || - out->data.mode != nir_var_shader_out) - return false; - - b->cursor = nir_after_instr(&instr->instr); - if (deref->deref_type == nir_deref_type_var) { - int wrmask = nir_intrinsic_write_mask(instr); - - nir_ssa_def *components[4]; - int start = out->data.location == VARYING_SLOT_CLIP_DIST1 ? 4 : 0; - /* rewrite components as zeroes for planes that aren't enabled */ - for (int i = 0; i < 4; i++) { - if (wrmask & (1 << i)) { - if (!(clip_plane_enable & (1 << (start + i)))) - components[i] = nir_imm_int(b, 0); - else - components[i] = nir_channel(b, nir_ssa_for_src(b, instr->src[1], nir_src_num_components(instr->src[1])), i); - } else - components[i] = nir_ssa_undef(b, 1, 32); - } - nir_store_deref(b, deref, nir_vec(b, components, instr->num_components), wrmask); - } else if (nir_src_is_const(deref->arr.index)) { - /* storing using a constant index */ - plane = nir_src_as_uint(deref->arr.index); - /* no need to make changes if the clip plane is enabled */ - if (clip_plane_enable & (1 << plane)) - return false; - - assert(nir_intrinsic_write_mask(instr) == 1); - nir_store_deref(b, deref, nir_imm_int(b, 0), 1); - } else { - /* storing using a variable index */ - nir_ssa_def *index = nir_ssa_for_src(b, deref->arr.index, 1); - unsigned length = glsl_get_length(nir_deref_instr_parent(deref)->type); - - recursive_if_chain(b, deref, instr->src[1].ssa, clip_plane_enable, index, 0, length); - } - nir_instr_remove(&instr->instr); - return true; -} - -bool -nir_lower_clip_disable(nir_shader *shader, unsigned clip_plane_enable) -{ - /* if all user planes are enabled in API that are written in the array, always ignore; - * this explicitly covers the 2x vec4 case - */ - if (clip_plane_enable == u_bit_consecutive(0, shader->info.clip_distance_array_size)) - return false; - - return nir_shader_instructions_pass(shader, lower_clip_plane_store, - nir_metadata_block_index | - nir_metadata_dominance, - &clip_plane_enable); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_halfz.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_halfz.c deleted file mode 100644 index 48c4818..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_clip_halfz.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2018-2019 Collabora Ltd. - * - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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. - */ - -#include "nir_builder.h" - -static bool -lower_pos_write(nir_builder *b, nir_instr *instr, UNUSED void *cb_data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_store_deref) - return false; - - nir_variable *var = nir_intrinsic_get_var(intr, 0); - if (var->data.mode != nir_var_shader_out || - var->data.location != VARYING_SLOT_POS) - return false; - - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *pos = nir_ssa_for_src(b, intr->src[1], 4); - nir_ssa_def *def = nir_vec4(b, - nir_channel(b, pos, 0), - nir_channel(b, pos, 1), - nir_fmul_imm(b, - nir_fadd(b, - nir_channel(b, pos, 2), - nir_channel(b, pos, 3)), - 0.5), - nir_channel(b, pos, 3)); - nir_instr_rewrite_src(&intr->instr, intr->src + 1, nir_src_for_ssa(def)); - return true; -} - -void -nir_lower_clip_halfz(nir_shader *shader) -{ - if (shader->info.stage != MESA_SHADER_VERTEX && - shader->info.stage != MESA_SHADER_GEOMETRY && - shader->info.stage != MESA_SHADER_TESS_EVAL) - return; - - nir_shader_instructions_pass(shader, lower_pos_write, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_const_arrays_to_uniforms.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_const_arrays_to_uniforms.c deleted file mode 100644 index c7c8991..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_const_arrays_to_uniforms.c +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * Lower constant arrays to uniform arrays. - * - * Some driver backends (such as i965 and nouveau) don't handle constant arrays - * gracefully, instead treating them as ordinary writable temporary arrays. - * Since arrays can be large, this often means spilling them to scratch memory, - * which usually involves a large number of instructions. - * - * This must be called prior to gl_nir_set_uniform_initializers(); we need the - * linker to process our new uniform's constant initializer. - * - * This should be called after optimizations, since those can result in - * splitting and removing arrays that are indexed by constant expressions. - */ -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -struct var_info { - nir_variable *var; - - bool is_constant; - bool found_read; - - /* Block that has all the variable stores. All the blocks with reads - * should be dominated by this block. - */ - nir_block *block; -}; - -static void -set_const_initialiser(nir_deref_instr **p, nir_constant *top_level_init, - nir_src *const_src, unsigned writemask) -{ - assert(*p); - - nir_constant *ret = top_level_init; - for ( ; *p; p++) { - if ((*p)->deref_type == nir_deref_type_array) { - assert(nir_src_is_const((*p)->arr.index)); - - uint64_t idx = nir_src_as_uint((*p)->arr.index); - - /* Just return if this is an out of bounds write */ - if (idx >= ret->num_elements) - return; - - ret = ret->elements[idx]; - } else if ((*p)->deref_type == nir_deref_type_struct) { - ret = ret->elements[(*p)->strct.index]; - } else { - unreachable("Unsupported deref type"); - } - } - - /* Now that we have selected the corrent nir_constant we copy the constant - * values to it. - */ - assert(const_src->is_ssa); - nir_instr *src_instr = const_src->ssa->parent_instr; - assert(src_instr->type == nir_instr_type_load_const); - nir_load_const_instr* load = nir_instr_as_load_const(src_instr); - - for (unsigned i = 0; i < load->def.num_components; i++) { - if (!(writemask & (1 << i))) - continue; - - memcpy(ret->values + i, load->value + i, sizeof(*load->value)); - } - - return; -} - -static nir_constant * -rebuild_const_array_initialiser(const struct glsl_type *type, void *mem_ctx) -{ - nir_constant *ret = rzalloc(mem_ctx, nir_constant); - - if (glsl_type_is_matrix(type) && glsl_get_matrix_columns(type) > 1) { - ret->num_elements = glsl_get_matrix_columns(type); - ret->elements = ralloc_array(mem_ctx, nir_constant *, ret->num_elements); - - for (unsigned i = 0; i < ret->num_elements; i++) { - ret->elements[i] = rzalloc(mem_ctx, nir_constant); - } - - return ret; - } - - if (glsl_type_is_array(type) || glsl_type_is_struct(type)) { - ret->num_elements = glsl_get_length(type); - ret->elements = ralloc_array(mem_ctx, nir_constant *, ret->num_elements); - - for (unsigned i = 0; i < ret->num_elements; i++) { - if (glsl_type_is_array(type)) { - ret->elements[i] = - rebuild_const_array_initialiser(glsl_get_array_element(type), mem_ctx); - } else { - ret->elements[i] = - rebuild_const_array_initialiser(glsl_get_struct_field(type, i), mem_ctx); - } - } - } - - return ret; -} - -static bool -lower_const_array_to_uniform(nir_shader *shader, struct var_info *info, - struct hash_table *const_array_vars, - unsigned *free_uni_components, - unsigned *const_count, bool *progress) -{ - nir_variable *var = info->var; - - if (!info->is_constant) - return true; - - if (!glsl_type_is_array(var->type)) - return true; - - /* TODO: Add support for 8bit and 16bit types */ - if (!glsl_type_is_32bit(glsl_without_array(var->type)) && - !glsl_type_is_64bit(glsl_without_array(var->type))) - return true; - - /* How many uniform component slots are required? */ - unsigned component_slots = glsl_get_component_slots(var->type); - - /* We would utilize more than is available, bail out. */ - if (component_slots > *free_uni_components) - return false; - - *free_uni_components -= component_slots; - - /* In the very unlikely event of 4294967295 constant arrays in a single - * shader, don't promote this to a uniform. - */ - unsigned limit = ~0; - if (*const_count == limit) - return false; - - nir_variable *uni = rzalloc(shader, nir_variable); - - /* Rebuild constant initialiser */ - nir_constant *const_init = rebuild_const_array_initialiser(var->type, uni); - - /* Set constant initialiser */ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - assert(intrin->intrinsic != nir_intrinsic_copy_deref); - if (intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_variable *deref_var = nir_deref_instr_get_variable(deref); - if (var != deref_var) - continue; - - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - assert(path.path[0]->deref_type == nir_deref_type_var); - - nir_deref_instr **p = &path.path[1]; - set_const_initialiser(p, const_init, &intrin->src[1], - nir_intrinsic_write_mask(intrin)); - - nir_deref_path_finish(&path); - } - } - - uni->constant_initializer = const_init; - uni->data.how_declared = nir_var_hidden; - uni->data.read_only = true; - uni->data.mode = nir_var_uniform; - uni->type = info->var->type; - uni->name = ralloc_asprintf(uni, "constarray_%x_%u", - *const_count, shader->info.stage); - - nir_shader_add_variable(shader, uni); - - *const_count = *const_count + 1; - - _mesa_hash_table_insert(const_array_vars, info->var, uni); - - *progress = true; - - return true; -} - -static unsigned -count_uniforms(nir_shader *shader) -{ - unsigned total = 0; - - nir_foreach_variable_with_modes(var, shader, nir_var_uniform) { - total += glsl_get_component_slots(var->type); - } - - return total; -} - -bool -nir_lower_const_arrays_to_uniforms(nir_shader *shader, - unsigned max_uniform_components) -{ - /* This only works with a single entrypoint */ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - unsigned num_locals = nir_function_impl_index_vars(impl); - if (num_locals == 0) { - nir_shader_preserve_all_metadata(shader); - return false; - } - - bool progress = false; - unsigned uniform_components = count_uniforms(shader); - unsigned free_uni_components = max_uniform_components - uniform_components; - unsigned const_count = 0; - - struct var_info *var_infos = ralloc_array(NULL, struct var_info, num_locals); - nir_foreach_function_temp_variable(var, impl) { - var_infos[var->index] = (struct var_info) { - .var = var, - .is_constant = true, - .found_read = false, - }; - } - - nir_metadata_require(impl, nir_metadata_dominance); - - struct hash_table *const_array_vars = - _mesa_hash_table_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal); - - /* First, walk through the shader and figure out what variables we can - * lower to a uniform. - */ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_deref) { - /* If we ever see a complex use of a deref_var, we have to assume - * that variable is non-constant because we can't guarantee we - * will find all of the writers of that variable. - */ - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type == nir_deref_type_var && - deref->var->data.mode == nir_var_function_temp && - nir_deref_instr_has_complex_use(deref, 0)) - var_infos[deref->var->index].is_constant = false; - continue; - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - bool src_is_const = false; - nir_deref_instr *src_deref = NULL, *dst_deref = NULL; - switch (intrin->intrinsic) { - case nir_intrinsic_store_deref: - dst_deref = nir_src_as_deref(intrin->src[0]); - src_is_const = nir_src_is_const(intrin->src[1]); - break; - - case nir_intrinsic_load_deref: - src_deref = nir_src_as_deref(intrin->src[0]); - break; - - case nir_intrinsic_copy_deref: - assert(!"Lowering of copy_deref with const arrays to uniform is prohibited"); - break; - - default: - continue; - } - - if (dst_deref && nir_deref_mode_must_be(dst_deref, nir_var_function_temp)) { - nir_variable *var = nir_deref_instr_get_variable(dst_deref); - if (var == NULL) - continue; - - assert(var->data.mode == nir_var_function_temp); - - struct var_info *info = &var_infos[var->index]; - if (!info->is_constant) - continue; - - if (!info->block) - info->block = block; - - /* We only consider variables constant if they only have constant - * stores, all the stores come before any reads, and all stores - * come from the same block. We also can't handle indirect stores. - */ - if (!src_is_const || info->found_read || block != info->block || - nir_deref_instr_has_indirect(dst_deref)) { - info->is_constant = false; - } - } - - if (src_deref && nir_deref_mode_must_be(src_deref, nir_var_function_temp)) { - nir_variable *var = nir_deref_instr_get_variable(src_deref); - if (var == NULL) - continue; - - assert(var->data.mode == nir_var_function_temp); - - /* We only consider variables constant if all the reads are - * dominated by the block that writes to it. - */ - struct var_info *info = &var_infos[var->index]; - if (!info->is_constant) - continue; - - if (!info->block || !nir_block_dominates(info->block, block)) - info->is_constant = false; - - info->found_read = true; - } - } - } - - /* Now lower the constants to uniforms */ - for (int i = 0; i < num_locals; i++) { - struct var_info *info = &var_infos[i]; - if (!lower_const_array_to_uniform(shader, info, const_array_vars, - &free_uni_components, &const_count, - &progress)) - break; - } - - /* Finally rewrite its uses */ - nir_builder b; - nir_builder_init(&b, impl); - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - struct hash_entry *entry = - _mesa_hash_table_search(const_array_vars, var); - if (!entry) - continue; - - b.cursor = nir_before_instr(instr); - - nir_variable *uni = (nir_variable *) entry->data; - nir_deref_instr *new_deref_instr = nir_build_deref_var(&b, uni); - - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - assert(path.path[0]->deref_type == nir_deref_type_var); - - nir_deref_instr **p = &path.path[1]; - for (; *p; p++) { - if ((*p)->deref_type == nir_deref_type_array) { - new_deref_instr = nir_build_deref_array(&b, new_deref_instr, - (*p)->arr.index.ssa); - } else if ((*p)->deref_type == nir_deref_type_struct) { - new_deref_instr = nir_build_deref_struct(&b, new_deref_instr, - (*p)->strct.index); - } else { - unreachable("Unsupported deref type"); - } - } - nir_deref_path_finish(&path); - - nir_ssa_def *new_def = nir_load_deref(&b, new_deref_instr); - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, new_def); - nir_instr_remove(&intrin->instr); - } - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - ralloc_free(var_infos); - _mesa_hash_table_destroy(const_array_vars, NULL); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_continue_constructs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_continue_constructs.c deleted file mode 100644 index eca52f4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_continue_constructs.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - - -#include "nir.h" -#include "nir_builder.h" -#include "nir_control_flow.h" - -static bool -lower_loop_continue_block(nir_builder *b, nir_loop *loop, bool *repair_ssa) -{ - if (!nir_loop_has_continue_construct(loop)) - return false; - - nir_block *header = nir_loop_first_block(loop); - nir_block *cont = nir_loop_first_continue_block(loop); - - /* count continue statements excluding unreachable ones */ - unsigned num_continue = 0; - nir_block *single_predecessor = NULL; - set_foreach(cont->predecessors, entry) { - nir_block *pred = (nir_block*) entry->key; - /* If the continue block has no predecessors, it is unreachable. */ - if (pred->predecessors->entries == 0) - continue; - - single_predecessor = pred; - if (num_continue++) - break; - } - - nir_lower_phis_to_regs_block(header); - - if (num_continue == 0) { - /* this loop doesn't continue at all. delete the continue construct */ - nir_cf_list extracted; - nir_cf_list_extract(&extracted, &loop->continue_list); - nir_cf_delete(&extracted); - } else if (num_continue == 1) { - /* inline the continue construct */ - assert(single_predecessor->successors[0] == cont); - assert(single_predecessor->successors[1] == NULL); - - nir_cf_list extracted; - nir_cf_list_extract(&extracted, &loop->continue_list); - nir_cf_reinsert(&extracted, - nir_after_block_before_jump(single_predecessor)); - } else { - nir_lower_phis_to_regs_block(cont); - *repair_ssa = true; - - /* As control flow has to re-converge before executing the continue - * construct, we insert it at the beginning of the loop with a flag - * to ensure that it doesn't get executed in the first iteration: - * - * loop { - * if (i != 0) { - * continue construct - * } - * loop body - * } - */ - - nir_variable *do_cont = - nir_local_variable_create(b->impl, glsl_bool_type(), "cont"); - - b->cursor = nir_before_cf_node(&loop->cf_node); - nir_store_var(b, do_cont, nir_imm_false(b), 1); - b->cursor = nir_before_block(header); - nir_if *cont_if = nir_push_if(b, nir_load_var(b, do_cont)); - { - nir_cf_list extracted; - nir_cf_list_extract(&extracted, &loop->continue_list); - nir_cf_reinsert(&extracted, nir_before_cf_list(&cont_if->then_list)); - } - nir_pop_if(b, cont_if); - nir_store_var(b, do_cont, nir_imm_true(b), 1); - } - - nir_loop_remove_continue_construct(loop); - return true; -} - - -static bool -visit_cf_list(nir_builder *b, struct exec_list *list, bool *repair_ssa) -{ - bool progress = false; - - foreach_list_typed(nir_cf_node, node, node, list) { - switch (node->type) { - case nir_cf_node_block: - continue; - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(node); - progress |= visit_cf_list(b, &nif->then_list, repair_ssa); - progress |= visit_cf_list(b, &nif->else_list, repair_ssa); - break; - } - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - progress |= visit_cf_list(b, &loop->body, repair_ssa); - progress |= visit_cf_list(b, &loop->continue_list, repair_ssa); - progress |= lower_loop_continue_block(b, loop, repair_ssa); - break; - } - case nir_cf_node_function: - unreachable("Unsupported cf_node type."); - } - } - - return progress; -} - -static bool -lower_continue_constructs_impl(nir_function_impl *impl) -{ - nir_builder b; - nir_builder_init(&b, impl); - bool repair_ssa = false; - bool progress = visit_cf_list(&b, &impl->body, &repair_ssa); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_none); - - /* Merge the Phis from Header and Continue Target */ - nir_lower_regs_to_ssa_impl(impl); - - /* Re-inserting the Continue Target at the beginning of the loop - * violates the dominance property if instructions in the continue - * use SSA defs from the loop body. - */ - if (repair_ssa) - nir_repair_ssa_impl(impl); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_continue_constructs(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && lower_continue_constructs_impl(function->impl)) - progress = true; - } - - return progress; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_convert_alu_types.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_convert_alu_types.c deleted file mode 100644 index 5536a8e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_convert_alu_types.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_conversion_builder.h" - -static bool -try_simplify_convert_intrin(nir_intrinsic_instr *conv) -{ - bool progress = false; - - nir_alu_type src_type = nir_intrinsic_src_type(conv); - nir_alu_type dest_type = nir_intrinsic_dest_type(conv); - - nir_rounding_mode rounding = nir_intrinsic_rounding_mode(conv); - nir_rounding_mode simple_rounding = - nir_simplify_conversion_rounding(src_type, dest_type, rounding); - if (rounding != simple_rounding) { - nir_intrinsic_set_rounding_mode(conv, simple_rounding); - progress = true; - } - - if (nir_intrinsic_saturate(conv) && - nir_alu_type_range_contains_type_range(dest_type, src_type)) { - nir_intrinsic_set_saturate(conv, false); - progress = true; - } - - return progress; -} - -static void -lower_convert_alu_types_instr(nir_builder *b, nir_intrinsic_instr *conv) -{ - assert(conv->intrinsic == nir_intrinsic_convert_alu_types); - assert(conv->src[0].is_ssa && conv->dest.is_ssa); - - b->cursor = nir_instr_remove(&conv->instr); - nir_ssa_def *val = - nir_convert_with_rounding(b, conv->src[0].ssa, - nir_intrinsic_src_type(conv), - nir_intrinsic_dest_type(conv), - nir_intrinsic_rounding_mode(conv), - nir_intrinsic_saturate(conv)); - nir_ssa_def_rewrite_uses(&conv->dest.ssa, val); -} - -static bool -opt_simplify_convert_alu_types_impl(nir_function_impl *impl) -{ - bool progress = false; - bool lowered_instr = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *conv = nir_instr_as_intrinsic(instr); - if (conv->intrinsic != nir_intrinsic_convert_alu_types) - continue; - - if (try_simplify_convert_intrin(conv)) - progress = true; - - if (nir_intrinsic_rounding_mode(conv) == nir_rounding_mode_undef && - !nir_intrinsic_saturate(conv)) { - lower_convert_alu_types_instr(&b, conv); - lowered_instr = true; - } - } - } - - if (lowered_instr) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_simplify_convert_alu_types(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(func, shader) { - if (func->impl && opt_simplify_convert_alu_types_impl(func->impl)) - progress = true; - } - - return progress; -} - -static bool -lower_convert_alu_types_impl(nir_function_impl *impl, - bool (*should_lower)(nir_intrinsic_instr *)) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *conv = nir_instr_as_intrinsic(instr); - if (conv->intrinsic != nir_intrinsic_convert_alu_types) - continue; - - if (should_lower != NULL && !should_lower(conv)) - continue; - - lower_convert_alu_types_instr(&b, conv); - progress = true; - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_convert_alu_types(nir_shader *shader, - bool (*should_lower)(nir_intrinsic_instr *)) -{ - bool progress = false; - - nir_foreach_function(func, shader) { - if (func->impl && lower_convert_alu_types_impl(func->impl, should_lower)) - progress = true; - } - - return progress; -} - -static bool -is_constant(nir_intrinsic_instr *conv) -{ - assert(conv->intrinsic == nir_intrinsic_convert_alu_types); - return nir_src_is_const(conv->src[0]); -} - -bool -nir_lower_constant_convert_alu_types(nir_shader *shader) -{ - return nir_lower_convert_alu_types(shader, is_constant); -} - -static bool -is_alu_conversion(const nir_instr *instr, UNUSED const void *_data) -{ - return instr->type == nir_instr_type_alu && - nir_op_infos[nir_instr_as_alu(instr)->op].is_conversion; -} - -static nir_ssa_def * -lower_alu_conversion(nir_builder *b, nir_instr *instr, UNUSED void *_data) -{ - nir_alu_instr *alu = nir_instr_as_alu(instr); - nir_ssa_def *src = nir_ssa_for_alu_src(b, alu, 0); - nir_alu_type src_type = nir_op_infos[alu->op].input_types[0] | src->bit_size; - nir_alu_type dst_type = nir_op_infos[alu->op].output_type; - return nir_convert_alu_types(b, alu->dest.dest.ssa.bit_size, src, - .src_type = src_type, .dest_type = dst_type, - .rounding_mode = nir_rounding_mode_undef, - .saturate = false); -} - -bool -nir_lower_alu_conversion_to_intrinsic(nir_shader *shader) -{ - return nir_shader_lower_instructions(shader, is_alu_conversion, - lower_alu_conversion, NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_discard_if.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_discard_if.c deleted file mode 100644 index 15b05ba..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_discard_if.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright 2018 Collabora Ltd. - * - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -lower_discard_if_instr(nir_builder *b, nir_instr *instr_, void *cb_data) -{ - nir_lower_discard_if_options options = *(nir_lower_discard_if_options *)cb_data; - - if (instr_->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *instr = nir_instr_as_intrinsic(instr_); - - switch (instr->intrinsic) { - case nir_intrinsic_discard_if: - if (!(options & nir_lower_discard_if_to_cf)) - return false; - break; - case nir_intrinsic_demote_if: - if (!(options & nir_lower_demote_if_to_cf)) - return false; - break; - case nir_intrinsic_terminate_if: - if (!(options & nir_lower_terminate_if_to_cf)) - return false; - break; - default: - return false; - } - - b->cursor = nir_before_instr(&instr->instr); - - nir_if *if_stmt = nir_push_if(b, nir_ssa_for_src(b, instr->src[0], 1)); - switch (instr->intrinsic) { - case nir_intrinsic_discard_if: - nir_discard(b); - break; - case nir_intrinsic_demote_if: - nir_demote(b); - break; - case nir_intrinsic_terminate_if: - nir_terminate(b); - break; - default: - unreachable("bad intrinsic"); - } - nir_pop_if(b, if_stmt); - nir_instr_remove(&instr->instr); - return true; - - /* a shader like this (shaders@glsl-fs-discard-04): - - uniform int j, k; - - void main() - { - for (int i = 0; i < j; i++) { - if (i > k) - continue; - discard; - } - gl_FragColor = vec4(0.0, 1.0, 0.0, 0.0); - } - - - - will generate nir like: - - loop { - //snip - if ssa_11 { - block block_5: - / preds: block_4 / - vec1 32 ssa_17 = iadd ssa_50, ssa_31 - / succs: block_7 / - } else { - block block_6: - / preds: block_4 / - intrinsic discard () () <-- not last instruction - vec1 32 ssa_23 = iadd ssa_50, ssa_31 <-- dead code loop itr increment - / succs: block_7 / - } - //snip - } - - which means that we can't assert like this: - - assert(instr->intrinsic != nir_intrinsic_discard || - nir_block_last_instr(instr->instr.block) == &instr->instr); - - - and it's unnecessary anyway since later optimizations will dce the - instructions following the discard - */ - - return false; -} - -bool -nir_lower_discard_if(nir_shader *shader, nir_lower_discard_if_options options) -{ - return nir_shader_instructions_pass(shader, - lower_discard_if_instr, - nir_metadata_none, - &options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_discard_or_demote.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_discard_or_demote.c deleted file mode 100644 index 7b349d8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_discard_or_demote.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright © 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -nir_lower_discard_to_demote_instr(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_discard: - intrin->intrinsic = nir_intrinsic_demote; - return true; - case nir_intrinsic_discard_if: - intrin->intrinsic = nir_intrinsic_demote_if; - return true; - case nir_intrinsic_load_helper_invocation: - intrin->intrinsic = nir_intrinsic_is_helper_invocation; - return true; - default: - return false; - } -} - -static bool -nir_lower_demote_to_discard_instr(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_demote: - intrin->intrinsic = nir_intrinsic_discard; - return true; - case nir_intrinsic_demote_if: - intrin->intrinsic = nir_intrinsic_discard_if; - return true; - case nir_intrinsic_is_helper_invocation: - case nir_intrinsic_load_helper_invocation: { - /* If the shader doesn't need helper invocations, - * we can assume there are none */ - b->cursor = nir_before_instr(instr); - nir_ssa_def *zero = nir_imm_false(b); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, zero); - nir_instr_remove_v(instr); - return true; - } - default: - return false; - } -} - -static nir_ssa_def * -insert_is_helper(nir_builder *b, nir_instr *instr) -{ - /* find best place to insert is_helper */ - nir_cf_node *node = &instr->block->cf_node; - while (node->parent->type != nir_cf_node_function) - node = nir_cf_node_prev(node->parent); - nir_block *block = nir_cf_node_as_block(node); - if (block == instr->block) { - b->cursor = nir_before_instr(instr); - } else { - b->cursor = nir_after_block_before_jump(block); - } - return nir_is_helper_invocation(b, 1); -} - - -static bool -nir_lower_load_helper_to_is_helper(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - nir_ssa_def *is_helper = *(nir_ssa_def**) data; - switch (intrin->intrinsic) { - case nir_intrinsic_demote: - case nir_intrinsic_demote_if: - /* insert is_helper at last top level occasion */ - if (is_helper == NULL) { - is_helper = insert_is_helper(b, instr); - *(nir_ssa_def**)data = is_helper; - return true; - } else { - return false; - } - case nir_intrinsic_load_helper_invocation: - /* Don't update data: as long as we didn't encounter any demote(), - * we can insert new is_helper() intrinsics. These are placed at - * top-level blocks to ensure correct behavior w.r.t. loops */ - if (is_helper == NULL) - is_helper = insert_is_helper(b, instr); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, is_helper); - nir_instr_remove_v(instr); - return true; - default: - return false; - } -} - -/** - * Optimize discard and demote opcodes. - * - * If force_correct_quad_ops_after_discard is true and quad operations are - * used, discard() will be converted to demote() and gl_HelperInvocation will - * be lowered to helperInvocationEXT(). This is intended as workaround for - * game bugs to force correct derivatives after kill. This lowering is not - * valid in the general case as it might change the result of subgroup - * operations and loop behavior. - * - * Otherwise, if demote is used and no ops need helper invocations, demote() - * will be converted to discard() as an optimization. - */ -bool -nir_lower_discard_or_demote(nir_shader *shader, - bool force_correct_quad_ops_after_discard) -{ - if (shader->info.stage != MESA_SHADER_FRAGMENT) - return false; - - /* We need uses_discard/demote and needs_*_helper_invocations. */ - nir_shader_gather_info(shader, nir_shader_get_entrypoint(shader)); - /* Validate that if uses_demote is set, uses_discard is also be set. */ - assert(!shader->info.fs.uses_demote || shader->info.fs.uses_discard); - - /* Quick skip. */ - if (!shader->info.fs.uses_discard) - return false; - - bool progress = false; - - if (force_correct_quad_ops_after_discard && - shader->info.fs.needs_quad_helper_invocations) { - /* If we need correct derivatives, convert discard to demote only when - * derivatives are actually used. - */ - progress = nir_shader_instructions_pass(shader, - nir_lower_discard_to_demote_instr, - nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs | - nir_metadata_instr_index, - NULL); - shader->info.fs.uses_demote = true; - } else if (!shader->info.fs.needs_quad_helper_invocations && - !shader->info.fs.needs_all_helper_invocations && - shader->info.fs.uses_demote) { - /* If we don't need any helper invocations, convert demote to discard. */ - progress = nir_shader_instructions_pass(shader, - nir_lower_demote_to_discard_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); - shader->info.fs.uses_demote = false; - } else if (shader->info.fs.uses_demote && - BITSET_TEST(shader->info.system_values_read, - nir_system_value_from_intrinsic(nir_intrinsic_load_helper_invocation))) { - /* load_helper needs to preserve the value (whether an invocation is - * a helper lane) from the beginning of the shader. */ - nir_ssa_def *is_helper = NULL; - progress = nir_shader_instructions_pass(shader, - nir_lower_load_helper_to_is_helper, - nir_metadata_block_index | - nir_metadata_dominance, - &is_helper); - BITSET_CLEAR(shader->info.system_values_read, - nir_system_value_from_intrinsic(nir_intrinsic_load_helper_invocation)); - } - - /* Validate again that if uses_demote is set, uses_discard is also be set. */ - assert(!shader->info.fs.uses_demote || shader->info.fs.uses_discard); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_double_ops.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_double_ops.c deleted file mode 100644 index 5056a39..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_double_ops.c +++ /dev/null @@ -1,804 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#include "nir.h" -#include "nir_builder.h" - -#include -#include - -/* - * Lowers some unsupported double operations, using only: - * - * - pack/unpackDouble2x32 - * - conversion to/from single-precision - * - double add, mul, and fma - * - conditional select - * - 32-bit integer and floating point arithmetic - */ - -/* Creates a double with the exponent bits set to a given integer value */ -static nir_ssa_def * -set_exponent(nir_builder *b, nir_ssa_def *src, nir_ssa_def *exp) -{ - /* Split into bits 0-31 and 32-63 */ - nir_ssa_def *lo = nir_unpack_64_2x32_split_x(b, src); - nir_ssa_def *hi = nir_unpack_64_2x32_split_y(b, src); - - /* The exponent is bits 52-62, or 20-30 of the high word, so set the exponent - * to 1023 - */ - nir_ssa_def *new_hi = nir_bitfield_insert(b, hi, exp, - nir_imm_int(b, 20), - nir_imm_int(b, 11)); - /* recombine */ - return nir_pack_64_2x32_split(b, lo, new_hi); -} - -static nir_ssa_def * -get_exponent(nir_builder *b, nir_ssa_def *src) -{ - /* get bits 32-63 */ - nir_ssa_def *hi = nir_unpack_64_2x32_split_y(b, src); - - /* extract bits 20-30 of the high word */ - return nir_ubitfield_extract(b, hi, nir_imm_int(b, 20), nir_imm_int(b, 11)); -} - -/* Return infinity with the sign of the given source which is +/-0 */ - -static nir_ssa_def * -get_signed_inf(nir_builder *b, nir_ssa_def *zero) -{ - nir_ssa_def *zero_hi = nir_unpack_64_2x32_split_y(b, zero); - - /* The bit pattern for infinity is 0x7ff0000000000000, where the sign bit - * is the highest bit. Only the sign bit can be non-zero in the passed in - * source. So we essentially need to OR the infinity and the zero, except - * the low 32 bits are always 0 so we can construct the correct high 32 - * bits and then pack it together with zero low 32 bits. - */ - nir_ssa_def *inf_hi = nir_ior(b, nir_imm_int(b, 0x7ff00000), zero_hi); - return nir_pack_64_2x32_split(b, nir_imm_int(b, 0), inf_hi); -} - -/* - * Generates the correctly-signed infinity if the source was zero, and flushes - * the result to 0 if the source was infinity or the calculated exponent was - * too small to be representable. - */ - -static nir_ssa_def * -fix_inv_result(nir_builder *b, nir_ssa_def *res, nir_ssa_def *src, - nir_ssa_def *exp) -{ - /* If the exponent is too small or the original input was infinity/NaN, - * force the result to 0 (flush denorms) to avoid the work of handling - * denorms properly. Note that this doesn't preserve positive/negative - * zeros, but GLSL doesn't require it. - */ - res = nir_bcsel(b, nir_ior(b, nir_ige(b, nir_imm_int(b, 0), exp), - nir_feq(b, nir_fabs(b, src), - nir_imm_double(b, INFINITY))), - nir_imm_double(b, 0.0f), res); - - /* If the original input was 0, generate the correctly-signed infinity */ - res = nir_bcsel(b, nir_fneu(b, src, nir_imm_double(b, 0.0f)), - res, get_signed_inf(b, src)); - - return res; - -} - -static nir_ssa_def * -lower_rcp(nir_builder *b, nir_ssa_def *src) -{ - /* normalize the input to avoid range issues */ - nir_ssa_def *src_norm = set_exponent(b, src, nir_imm_int(b, 1023)); - - /* cast to float, do an rcp, and then cast back to get an approximate - * result - */ - nir_ssa_def *ra = nir_f2f64(b, nir_frcp(b, nir_f2f32(b, src_norm))); - - /* Fixup the exponent of the result - note that we check if this is too - * small below. - */ - nir_ssa_def *new_exp = nir_isub(b, get_exponent(b, ra), - nir_isub(b, get_exponent(b, src), - nir_imm_int(b, 1023))); - - ra = set_exponent(b, ra, new_exp); - - /* Do a few Newton-Raphson steps to improve precision. - * - * Each step doubles the precision, and we started off with around 24 bits, - * so we only need to do 2 steps to get to full precision. The step is: - * - * x_new = x * (2 - x*src) - * - * But we can re-arrange this to improve precision by using another fused - * multiply-add: - * - * x_new = x + x * (1 - x*src) - * - * See https://en.wikipedia.org/wiki/Division_algorithm for more details. - */ - - ra = nir_ffma(b, nir_fneg(b, ra), nir_ffma(b, ra, src, nir_imm_double(b, -1)), ra); - ra = nir_ffma(b, nir_fneg(b, ra), nir_ffma(b, ra, src, nir_imm_double(b, -1)), ra); - - return fix_inv_result(b, ra, src, new_exp); -} - -static nir_ssa_def * -lower_sqrt_rsq(nir_builder *b, nir_ssa_def *src, bool sqrt) -{ - /* We want to compute: - * - * 1/sqrt(m * 2^e) - * - * When the exponent is even, this is equivalent to: - * - * 1/sqrt(m) * 2^(-e/2) - * - * and then the exponent is odd, this is equal to: - * - * 1/sqrt(m * 2) * 2^(-(e - 1)/2) - * - * where the m * 2 is absorbed into the exponent. So we want the exponent - * inside the square root to be 1 if e is odd and 0 if e is even, and we - * want to subtract off e/2 from the final exponent, rounded to negative - * infinity. We can do the former by first computing the unbiased exponent, - * and then AND'ing it with 1 to get 0 or 1, and we can do the latter by - * shifting right by 1. - */ - - nir_ssa_def *unbiased_exp = nir_isub(b, get_exponent(b, src), - nir_imm_int(b, 1023)); - nir_ssa_def *even = nir_iand_imm(b, unbiased_exp, 1); - nir_ssa_def *half = nir_ishr_imm(b, unbiased_exp, 1); - - nir_ssa_def *src_norm = set_exponent(b, src, - nir_iadd(b, nir_imm_int(b, 1023), - even)); - - nir_ssa_def *ra = nir_f2f64(b, nir_frsq(b, nir_f2f32(b, src_norm))); - nir_ssa_def *new_exp = nir_isub(b, get_exponent(b, ra), half); - ra = set_exponent(b, ra, new_exp); - - /* - * The following implements an iterative algorithm that's very similar - * between sqrt and rsqrt. We start with an iteration of Goldschmit's - * algorithm, which looks like: - * - * a = the source - * y_0 = initial (single-precision) rsqrt estimate - * - * h_0 = .5 * y_0 - * g_0 = a * y_0 - * r_0 = .5 - h_0 * g_0 - * g_1 = g_0 * r_0 + g_0 - * h_1 = h_0 * r_0 + h_0 - * - * Now g_1 ~= sqrt(a), and h_1 ~= 1/(2 * sqrt(a)). We could continue - * applying another round of Goldschmit, but since we would never refer - * back to a (the original source), we would add too much rounding error. - * So instead, we do one last round of Newton-Raphson, which has better - * rounding characteristics, to get the final rounding correct. This is - * split into two cases: - * - * 1. sqrt - * - * Normally, doing a round of Newton-Raphson for sqrt involves taking a - * reciprocal of the original estimate, which is slow since it isn't - * supported in HW. But we can take advantage of the fact that we already - * computed a good estimate of 1/(2 * g_1) by rearranging it like so: - * - * g_2 = .5 * (g_1 + a / g_1) - * = g_1 + .5 * (a / g_1 - g_1) - * = g_1 + (.5 / g_1) * (a - g_1^2) - * = g_1 + h_1 * (a - g_1^2) - * - * The second term represents the error, and by splitting it out we can get - * better precision by computing it as part of a fused multiply-add. Since - * both Newton-Raphson and Goldschmit approximately double the precision of - * the result, these two steps should be enough. - * - * 2. rsqrt - * - * First off, note that the first round of the Goldschmit algorithm is - * really just a Newton-Raphson step in disguise: - * - * h_1 = h_0 * (.5 - h_0 * g_0) + h_0 - * = h_0 * (1.5 - h_0 * g_0) - * = h_0 * (1.5 - .5 * a * y_0^2) - * = (.5 * y_0) * (1.5 - .5 * a * y_0^2) - * - * which is the standard formula multiplied by .5. Unlike in the sqrt case, - * we don't need the inverse to do a Newton-Raphson step; we just need h_1, - * so we can skip the calculation of g_1. Instead, we simply do another - * Newton-Raphson step: - * - * y_1 = 2 * h_1 - * r_1 = .5 - h_1 * y_1 * a - * y_2 = y_1 * r_1 + y_1 - * - * Where the difference from Goldschmit is that we calculate y_1 * a - * instead of using g_1. Doing it this way should be as fast as computing - * y_1 up front instead of h_1, and it lets us share the code for the - * initial Goldschmit step with the sqrt case. - * - * Putting it together, the computations are: - * - * h_0 = .5 * y_0 - * g_0 = a * y_0 - * r_0 = .5 - h_0 * g_0 - * h_1 = h_0 * r_0 + h_0 - * if sqrt: - * g_1 = g_0 * r_0 + g_0 - * r_1 = a - g_1 * g_1 - * g_2 = h_1 * r_1 + g_1 - * else: - * y_1 = 2 * h_1 - * r_1 = .5 - y_1 * (h_1 * a) - * y_2 = y_1 * r_1 + y_1 - * - * For more on the ideas behind this, see "Software Division and Square - * Root Using Goldschmit's Algorithms" by Markstein and the Wikipedia page - * on square roots - * (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots). - */ - - nir_ssa_def *one_half = nir_imm_double(b, 0.5); - nir_ssa_def *h_0 = nir_fmul(b, one_half, ra); - nir_ssa_def *g_0 = nir_fmul(b, src, ra); - nir_ssa_def *r_0 = nir_ffma(b, nir_fneg(b, h_0), g_0, one_half); - nir_ssa_def *h_1 = nir_ffma(b, h_0, r_0, h_0); - nir_ssa_def *res; - if (sqrt) { - nir_ssa_def *g_1 = nir_ffma(b, g_0, r_0, g_0); - nir_ssa_def *r_1 = nir_ffma(b, nir_fneg(b, g_1), g_1, src); - res = nir_ffma(b, h_1, r_1, g_1); - } else { - nir_ssa_def *y_1 = nir_fmul(b, nir_imm_double(b, 2.0), h_1); - nir_ssa_def *r_1 = nir_ffma(b, nir_fneg(b, y_1), nir_fmul(b, h_1, src), - one_half); - res = nir_ffma(b, y_1, r_1, y_1); - } - - if (sqrt) { - /* Here, the special cases we need to handle are - * 0 -> 0 and - * +inf -> +inf - */ - const bool preserve_denorms = - b->shader->info.float_controls_execution_mode & - FLOAT_CONTROLS_DENORM_PRESERVE_FP64; - nir_ssa_def *src_flushed = src; - if (!preserve_denorms) { - src_flushed = nir_bcsel(b, - nir_flt(b, nir_fabs(b, src), - nir_imm_double(b, DBL_MIN)), - nir_imm_double(b, 0.0), - src); - } - res = nir_bcsel(b, nir_ior(b, nir_feq(b, src_flushed, nir_imm_double(b, 0.0)), - nir_feq(b, src, nir_imm_double(b, INFINITY))), - src_flushed, res); - } else { - res = fix_inv_result(b, res, src, new_exp); - } - - return res; -} - -static nir_ssa_def * -lower_trunc(nir_builder *b, nir_ssa_def *src) -{ - nir_ssa_def *unbiased_exp = nir_isub(b, get_exponent(b, src), - nir_imm_int(b, 1023)); - - nir_ssa_def *frac_bits = nir_isub(b, nir_imm_int(b, 52), unbiased_exp); - - /* - * Decide the operation to apply depending on the unbiased exponent: - * - * if (unbiased_exp < 0) - * return 0 - * else if (unbiased_exp > 52) - * return src - * else - * return src & (~0 << frac_bits) - * - * Notice that the else branch is a 64-bit integer operation that we need - * to implement in terms of 32-bit integer arithmetics (at least until we - * support 64-bit integer arithmetics). - */ - - /* Compute "~0 << frac_bits" in terms of hi/lo 32-bit integer math */ - nir_ssa_def *mask_lo = - nir_bcsel(b, - nir_ige(b, frac_bits, nir_imm_int(b, 32)), - nir_imm_int(b, 0), - nir_ishl(b, nir_imm_int(b, ~0), frac_bits)); - - nir_ssa_def *mask_hi = - nir_bcsel(b, - nir_ilt(b, frac_bits, nir_imm_int(b, 33)), - nir_imm_int(b, ~0), - nir_ishl(b, - nir_imm_int(b, ~0), - nir_isub(b, frac_bits, nir_imm_int(b, 32)))); - - nir_ssa_def *src_lo = nir_unpack_64_2x32_split_x(b, src); - nir_ssa_def *src_hi = nir_unpack_64_2x32_split_y(b, src); - - return - nir_bcsel(b, - nir_ilt(b, unbiased_exp, nir_imm_int(b, 0)), - nir_imm_double(b, 0.0), - nir_bcsel(b, nir_ige(b, unbiased_exp, nir_imm_int(b, 53)), - src, - nir_pack_64_2x32_split(b, - nir_iand(b, mask_lo, src_lo), - nir_iand(b, mask_hi, src_hi)))); -} - -static nir_ssa_def * -lower_floor(nir_builder *b, nir_ssa_def *src) -{ - /* - * For x >= 0, floor(x) = trunc(x) - * For x < 0, - * - if x is integer, floor(x) = x - * - otherwise, floor(x) = trunc(x) - 1 - */ - nir_ssa_def *tr = nir_ftrunc(b, src); - nir_ssa_def *positive = nir_fge(b, src, nir_imm_double(b, 0.0)); - return nir_bcsel(b, - nir_ior(b, positive, nir_feq(b, src, tr)), - tr, - nir_fsub(b, tr, nir_imm_double(b, 1.0))); -} - -static nir_ssa_def * -lower_ceil(nir_builder *b, nir_ssa_def *src) -{ - /* if x < 0, ceil(x) = trunc(x) - * else if (x - trunc(x) == 0), ceil(x) = x - * else, ceil(x) = trunc(x) + 1 - */ - nir_ssa_def *tr = nir_ftrunc(b, src); - nir_ssa_def *negative = nir_flt(b, src, nir_imm_double(b, 0.0)); - return nir_bcsel(b, - nir_ior(b, negative, nir_feq(b, src, tr)), - tr, - nir_fadd(b, tr, nir_imm_double(b, 1.0))); -} - -static nir_ssa_def * -lower_fract(nir_builder *b, nir_ssa_def *src) -{ - return nir_fsub(b, src, nir_ffloor(b, src)); -} - -static nir_ssa_def * -lower_round_even(nir_builder *b, nir_ssa_def *src) -{ - /* Add and subtract 2**52 to round off any fractional bits. */ - nir_ssa_def *two52 = nir_imm_double(b, (double)(1ull << 52)); - nir_ssa_def *sign = nir_iand(b, nir_unpack_64_2x32_split_y(b, src), - nir_imm_int(b, 1ull << 31)); - - b->exact = true; - nir_ssa_def *res = nir_fsub(b, nir_fadd(b, nir_fabs(b, src), two52), two52); - b->exact = false; - - return nir_bcsel(b, nir_flt(b, nir_fabs(b, src), two52), - nir_pack_64_2x32_split(b, nir_unpack_64_2x32_split_x(b, res), - nir_ior(b, nir_unpack_64_2x32_split_y(b, res), sign)), src); -} - -static nir_ssa_def * -lower_mod(nir_builder *b, nir_ssa_def *src0, nir_ssa_def *src1) -{ - /* mod(x,y) = x - y * floor(x/y) - * - * If the division is lowered, it could add some rounding errors that make - * floor() to return the quotient minus one when x = N * y. If this is the - * case, we should return zero because mod(x, y) output value is [0, y). - * But fortunately Vulkan spec allows this kind of errors; from Vulkan - * spec, appendix A (Precision and Operation of SPIR-V instructions: - * - * "The OpFRem and OpFMod instructions use cheap approximations of - * remainder, and the error can be large due to the discontinuity in - * trunc() and floor(). This can produce mathematically unexpected - * results in some cases, such as FMod(x,x) computing x rather than 0, - * and can also cause the result to have a different sign than the - * infinitely precise result." - * - * In practice this means the output value is actually in the interval - * [0, y]. - * - * While Vulkan states this behaviour explicitly, OpenGL does not, and thus - * we need to assume that value should be in range [0, y); but on the other - * hand, mod(a,b) is defined as "a - b * floor(a/b)" and OpenGL allows for - * some error in division, so a/a could actually end up being 1.0 - 1ULP; - * so in this case floor(a/a) would end up as 0, and hence mod(a,a) == a. - * - * In summary, in the practice mod(a,a) can be "a" both for OpenGL and - * Vulkan. - */ - nir_ssa_def *floor = nir_ffloor(b, nir_fdiv(b, src0, src1)); - - return nir_fsub(b, src0, nir_fmul(b, src1, floor)); -} - -static nir_ssa_def * -lower_doubles_instr_to_soft(nir_builder *b, nir_alu_instr *instr, - const nir_shader *softfp64, - nir_lower_doubles_options options) -{ - if (!(options & nir_lower_fp64_full_software)) - return NULL; - - - assert(instr->dest.dest.is_ssa); - - const char *name; - const char *mangled_name; - const struct glsl_type *return_type = glsl_uint64_t_type(); - - switch (instr->op) { - case nir_op_f2i64: - if (instr->src[0].src.ssa->bit_size != 64) - return false; - name = "__fp64_to_int64"; - mangled_name = "__fp64_to_int64(u641;"; - return_type = glsl_int64_t_type(); - break; - case nir_op_f2u64: - if (instr->src[0].src.ssa->bit_size != 64) - return false; - name = "__fp64_to_uint64"; - mangled_name = "__fp64_to_uint64(u641;"; - break; - case nir_op_f2f64: - name = "__fp32_to_fp64"; - mangled_name = "__fp32_to_fp64(f1;"; - break; - case nir_op_f2f32: - name = "__fp64_to_fp32"; - mangled_name = "__fp64_to_fp32(u641;"; - return_type = glsl_float_type(); - break; - case nir_op_f2i32: - name = "__fp64_to_int"; - mangled_name = "__fp64_to_int(u641;"; - return_type = glsl_int_type(); - break; - case nir_op_f2u32: - name = "__fp64_to_uint"; - mangled_name = "__fp64_to_uint(u641;"; - return_type = glsl_uint_type(); - break; - case nir_op_b2f64: - name = "__bool_to_fp64"; - mangled_name = "__bool_to_fp64(b1;"; - break; - case nir_op_i2f64: - if (instr->src[0].src.ssa->bit_size == 64) { - name = "__int64_to_fp64"; - mangled_name = "__int64_to_fp64(i641;"; - } - else { - name = "__int_to_fp64"; - mangled_name = "__int_to_fp64(i1;"; - } - break; - case nir_op_u2f64: - if (instr->src[0].src.ssa->bit_size == 64) { - name = "__uint64_to_fp64"; - mangled_name = "__uint64_to_fp64(u641;"; - } - else { - name = "__uint_to_fp64"; - mangled_name = "__uint_to_fp64(u1;"; - } - break; - case nir_op_fabs: - name = "__fabs64"; - mangled_name = "__fabs64(u641;"; - break; - case nir_op_fneg: - name = "__fneg64"; - mangled_name = "__fneg64(u641;"; - break; - case nir_op_fround_even: - name = "__fround64"; - mangled_name = "__fround64(u641;"; - break; - case nir_op_ftrunc: - name = "__ftrunc64"; - mangled_name = "__ftrunc64(u641;"; - break; - case nir_op_ffloor: - name = "__ffloor64"; - mangled_name = "__ffloor64(u641;"; - break; - case nir_op_ffract: - name = "__ffract64"; - mangled_name = "__ffract64(u641;"; - break; - case nir_op_fsign: - name = "__fsign64"; - mangled_name = "__fsign64(u641;"; - break; - case nir_op_feq: - name = "__feq64"; - mangled_name = "__feq64(u641;u641;"; - return_type = glsl_bool_type(); - break; - case nir_op_fneu: - name = "__fneu64"; - mangled_name = "__fneu64(u641;u641;"; - return_type = glsl_bool_type(); - break; - case nir_op_flt: - name = "__flt64"; - mangled_name = "__flt64(u641;u641;"; - return_type = glsl_bool_type(); - break; - case nir_op_fge: - name = "__fge64"; - mangled_name = "__fge64(u641;u641;"; - return_type = glsl_bool_type(); - break; - case nir_op_fmin: - name = "__fmin64"; - mangled_name = "__fmin64(u641;u641;"; - break; - case nir_op_fmax: - name = "__fmax64"; - mangled_name = "__fmax64(u641;u641;"; - break; - case nir_op_fadd: - name = "__fadd64"; - mangled_name = "__fadd64(u641;u641;"; - break; - case nir_op_fmul: - name = "__fmul64"; - mangled_name = "__fmul64(u641;u641;"; - break; - case nir_op_ffma: - name = "__ffma64"; - mangled_name = "__ffma64(u641;u641;u641;"; - break; - case nir_op_fsat: - name = "__fsat64"; - mangled_name = "__fsat64(u641;"; - break; - case nir_op_fisfinite: - name = "__fisfinite64"; - mangled_name = "__fisfinite64(u641;"; - return_type = glsl_bool_type(); - break; - default: - return false; - } - - assert(softfp64 != NULL); - nir_function *func = nir_shader_get_function_for_name(softfp64, name); - - /* Another attempt, but this time with mangled names if softfp64 - * shader is taken from SPIR-V. - */ - if (!func) - func = nir_shader_get_function_for_name(softfp64, mangled_name); - - if (!func || !func->impl) { - fprintf(stderr, "Cannot find function \"%s\"\n", name); - assert(func); - } - - nir_ssa_def *params[4] = { NULL, }; - - nir_variable *ret_tmp = - nir_local_variable_create(b->impl, return_type, "return_tmp"); - nir_deref_instr *ret_deref = nir_build_deref_var(b, ret_tmp); - params[0] = &ret_deref->dest.ssa; - - assert(nir_op_infos[instr->op].num_inputs + 1 == func->num_params); - for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++) { - assert(i + 1 < ARRAY_SIZE(params)); - params[i + 1] = nir_mov_alu(b, instr->src[i], 1); - } - - nir_inline_function_impl(b, func->impl, params, NULL); - - return nir_load_deref(b, ret_deref); -} - -nir_lower_doubles_options -nir_lower_doubles_op_to_options_mask(nir_op opcode) -{ - switch (opcode) { - case nir_op_frcp: return nir_lower_drcp; - case nir_op_fsqrt: return nir_lower_dsqrt; - case nir_op_frsq: return nir_lower_drsq; - case nir_op_ftrunc: return nir_lower_dtrunc; - case nir_op_ffloor: return nir_lower_dfloor; - case nir_op_fceil: return nir_lower_dceil; - case nir_op_ffract: return nir_lower_dfract; - case nir_op_fround_even: return nir_lower_dround_even; - case nir_op_fmod: return nir_lower_dmod; - case nir_op_fsub: return nir_lower_dsub; - case nir_op_fdiv: return nir_lower_ddiv; - default: return 0; - } -} - -struct lower_doubles_data { - const nir_shader *softfp64; - nir_lower_doubles_options options; -}; - -static bool -should_lower_double_instr(const nir_instr *instr, const void *_data) -{ - const struct lower_doubles_data *data = _data; - const nir_lower_doubles_options options = data->options; - - if (instr->type != nir_instr_type_alu) - return false; - - const nir_alu_instr *alu = nir_instr_as_alu(instr); - - assert(alu->dest.dest.is_ssa); - bool is_64 = alu->dest.dest.ssa.bit_size == 64; - - unsigned num_srcs = nir_op_infos[alu->op].num_inputs; - for (unsigned i = 0; i < num_srcs; i++) { - is_64 |= (nir_src_bit_size(alu->src[i].src) == 64); - } - - if (!is_64) - return false; - - if (options & nir_lower_fp64_full_software) - return true; - - return options & nir_lower_doubles_op_to_options_mask(alu->op); -} - -static nir_ssa_def * -lower_doubles_instr(nir_builder *b, nir_instr *instr, void *_data) -{ - const struct lower_doubles_data *data = _data; - const nir_lower_doubles_options options = data->options; - nir_alu_instr *alu = nir_instr_as_alu(instr); - - nir_ssa_def *soft_def = - lower_doubles_instr_to_soft(b, alu, data->softfp64, options); - if (soft_def) - return soft_def; - - if (!(options & nir_lower_doubles_op_to_options_mask(alu->op))) - return NULL; - - nir_ssa_def *src = nir_mov_alu(b, alu->src[0], - alu->dest.dest.ssa.num_components); - - switch (alu->op) { - case nir_op_frcp: - return lower_rcp(b, src); - case nir_op_fsqrt: - return lower_sqrt_rsq(b, src, true); - case nir_op_frsq: - return lower_sqrt_rsq(b, src, false); - case nir_op_ftrunc: - return lower_trunc(b, src); - case nir_op_ffloor: - return lower_floor(b, src); - case nir_op_fceil: - return lower_ceil(b, src); - case nir_op_ffract: - return lower_fract(b, src); - case nir_op_fround_even: - return lower_round_even(b, src); - - case nir_op_fdiv: - case nir_op_fsub: - case nir_op_fmod: { - nir_ssa_def *src1 = nir_mov_alu(b, alu->src[1], - alu->dest.dest.ssa.num_components); - switch (alu->op) { - case nir_op_fdiv: - return nir_fmul(b, src, nir_frcp(b, src1)); - case nir_op_fsub: - return nir_fadd(b, src, nir_fneg(b, src1)); - case nir_op_fmod: - return lower_mod(b, src, src1); - default: - unreachable("unhandled opcode"); - } - } - default: - unreachable("unhandled opcode"); - } -} - -static bool -nir_lower_doubles_impl(nir_function_impl *impl, - const nir_shader *softfp64, - nir_lower_doubles_options options) -{ - struct lower_doubles_data data = { - .softfp64 = softfp64, - .options = options, - }; - - bool progress = - nir_function_impl_lower_instructions(impl, - should_lower_double_instr, - lower_doubles_instr, - &data); - - if (progress && (options & nir_lower_fp64_full_software)) { - /* SSA and register indices are completely messed up now */ - nir_index_ssa_defs(impl); - nir_index_local_regs(impl); - - nir_metadata_preserve(impl, nir_metadata_none); - - /* And we have deref casts we need to clean up thanks to function - * inlining. - */ - nir_opt_deref_impl(impl); - } else if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_doubles(nir_shader *shader, - const nir_shader *softfp64, - nir_lower_doubles_options options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_lower_doubles_impl(function->impl, softfp64, options); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_drawpixels.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_drawpixels.c deleted file mode 100644 index d6fe11b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_drawpixels.c +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* Lower glDrawPixels(). - * - * This is based on the logic in st_get_drawpix_shader() in TGSI compiler. - * - * Run before nir_lower_io. - */ - -typedef struct { - const nir_lower_drawpixels_options *options; - nir_shader *shader; - nir_variable *texcoord, *texcoord_const, *scale, *bias, *tex, *pixelmap; -} lower_drawpixels_state; - -static nir_ssa_def * -get_texcoord(nir_builder *b, lower_drawpixels_state *state) -{ - if (state->texcoord == NULL) { - nir_variable *texcoord = NULL; - - /* find gl_TexCoord, if it exists: */ - nir_foreach_shader_in_variable(var, state->shader) { - if (var->data.location == VARYING_SLOT_TEX0) { - texcoord = var; - break; - } - } - - /* otherwise create it: */ - if (texcoord == NULL) { - texcoord = nir_variable_create(state->shader, - nir_var_shader_in, - glsl_vec4_type(), - "gl_TexCoord"); - texcoord->data.location = VARYING_SLOT_TEX0; - } - - state->texcoord = texcoord; - } - return nir_load_var(b, state->texcoord); -} - -static nir_variable * -create_uniform(nir_shader *shader, const char *name, - const gl_state_index16 state_tokens[STATE_LENGTH]) -{ - nir_variable *var = nir_variable_create(shader, - nir_var_uniform, - glsl_vec4_type(), - name); - var->num_state_slots = 1; - var->state_slots = ralloc_array(var, nir_state_slot, 1); - memcpy(var->state_slots[0].tokens, state_tokens, - sizeof(var->state_slots[0].tokens)); - return var; -} - -static nir_ssa_def * -get_scale(nir_builder *b, lower_drawpixels_state *state) -{ - if (state->scale == NULL) { - state->scale = create_uniform(state->shader, "gl_PTscale", - state->options->scale_state_tokens); - } - return nir_load_var(b, state->scale); -} - -static nir_ssa_def * -get_bias(nir_builder *b, lower_drawpixels_state *state) -{ - if (state->bias == NULL) { - state->bias = create_uniform(state->shader, "gl_PTbias", - state->options->bias_state_tokens); - } - return nir_load_var(b, state->bias); -} - -static nir_ssa_def * -get_texcoord_const(nir_builder *b, lower_drawpixels_state *state) -{ - if (state->texcoord_const == NULL) { - state->texcoord_const = create_uniform(state->shader, - "gl_MultiTexCoord0", - state->options->texcoord_state_tokens); - } - return nir_load_var(b, state->texcoord_const); -} - -static bool -lower_color(nir_builder *b, lower_drawpixels_state *state, nir_intrinsic_instr *intr) -{ - nir_ssa_def *texcoord; - nir_tex_instr *tex; - nir_ssa_def *def; - - assert(intr->dest.is_ssa); - - b->cursor = nir_before_instr(&intr->instr); - - texcoord = get_texcoord(b, state); - - const struct glsl_type *sampler2D = - glsl_sampler_type(GLSL_SAMPLER_DIM_2D, false, false, GLSL_TYPE_FLOAT); - - if (!state->tex) { - state->tex = - nir_variable_create(b->shader, nir_var_uniform, sampler2D, "drawpix"); - state->tex->data.binding = state->options->drawpix_sampler; - state->tex->data.explicit_binding = true; - state->tex->data.how_declared = nir_var_hidden; - } - - nir_deref_instr *tex_deref = nir_build_deref_var(b, state->tex); - - /* replace load_var(gl_Color) w/ texture sample: - * TEX def, texcoord, drawpix_sampler, 2D - */ - tex = nir_tex_instr_create(state->shader, 3); - tex->op = nir_texop_tex; - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - tex->coord_components = 2; - tex->dest_type = nir_type_float32; - tex->src[0].src_type = nir_tex_src_texture_deref; - tex->src[0].src = nir_src_for_ssa(&tex_deref->dest.ssa); - tex->src[1].src_type = nir_tex_src_sampler_deref; - tex->src[1].src = nir_src_for_ssa(&tex_deref->dest.ssa); - tex->src[2].src_type = nir_tex_src_coord; - tex->src[2].src = - nir_src_for_ssa(nir_channels(b, texcoord, - (1 << tex->coord_components) - 1)); - - nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL); - nir_builder_instr_insert(b, &tex->instr); - def = &tex->dest.ssa; - - /* Apply the scale and bias. */ - if (state->options->scale_and_bias) { - /* MAD def, def, scale, bias; */ - def = nir_ffma(b, def, get_scale(b, state), get_bias(b, state)); - } - - if (state->options->pixel_maps) { - if (!state->pixelmap) { - state->pixelmap = nir_variable_create(b->shader, nir_var_uniform, - sampler2D, "pixelmap"); - state->pixelmap->data.binding = state->options->pixelmap_sampler; - state->pixelmap->data.explicit_binding = true; - state->pixelmap->data.how_declared = nir_var_hidden; - } - - nir_deref_instr *pixelmap_deref = - nir_build_deref_var(b, state->pixelmap); - - /* do four pixel map look-ups with two TEX instructions: */ - nir_ssa_def *def_xy, *def_zw; - - /* TEX def.xy, def.xyyy, pixelmap_sampler, 2D; */ - tex = nir_tex_instr_create(state->shader, 3); - tex->op = nir_texop_tex; - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - tex->coord_components = 2; - tex->sampler_index = state->options->pixelmap_sampler; - tex->texture_index = state->options->pixelmap_sampler; - tex->dest_type = nir_type_float32; - tex->src[0].src_type = nir_tex_src_texture_deref; - tex->src[0].src = nir_src_for_ssa(&pixelmap_deref->dest.ssa); - tex->src[1].src_type = nir_tex_src_sampler_deref; - tex->src[1].src = nir_src_for_ssa(&pixelmap_deref->dest.ssa); - tex->src[2].src_type = nir_tex_src_coord; - tex->src[2].src = nir_src_for_ssa(nir_channels(b, def, 0x3)); - - nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL); - nir_builder_instr_insert(b, &tex->instr); - def_xy = &tex->dest.ssa; - - /* TEX def.zw, def.zwww, pixelmap_sampler, 2D; */ - tex = nir_tex_instr_create(state->shader, 1); - tex->op = nir_texop_tex; - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - tex->coord_components = 2; - tex->sampler_index = state->options->pixelmap_sampler; - tex->dest_type = nir_type_float32; - tex->src[0].src_type = nir_tex_src_coord; - tex->src[0].src = nir_src_for_ssa(nir_channels(b, def, 0xc)); - - nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL); - nir_builder_instr_insert(b, &tex->instr); - def_zw = &tex->dest.ssa; - - /* def = vec4(def.xy, def.zw); */ - def = nir_vec4(b, - nir_channel(b, def_xy, 0), - nir_channel(b, def_xy, 1), - nir_channel(b, def_zw, 0), - nir_channel(b, def_zw, 1)); - } - - nir_ssa_def_rewrite_uses(&intr->dest.ssa, def); - return true; -} - -static bool -lower_texcoord(nir_builder *b, lower_drawpixels_state *state, nir_intrinsic_instr *intr) -{ - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *texcoord_const = get_texcoord_const(b, state); - nir_ssa_def_rewrite_uses(&intr->dest.ssa, texcoord_const); - return true; -} - -static bool -lower_drawpixels_instr(nir_builder *b, nir_instr *instr, void *cb_data) -{ - lower_drawpixels_state *state = cb_data; - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - switch (intr->intrinsic) { - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - if (var->data.location == VARYING_SLOT_COL0) { - /* gl_Color should not have array/struct derefs: */ - assert(deref->deref_type == nir_deref_type_var); - return lower_color(b, state, intr); - } else if (var->data.location == VARYING_SLOT_TEX0) { - /* gl_TexCoord should not have array/struct derefs: */ - assert(deref->deref_type == nir_deref_type_var); - return lower_texcoord(b, state, intr); - } - break; - } - - case nir_intrinsic_load_color0: - return lower_color(b, state, intr); - - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_load_input: { - if (nir_intrinsic_io_semantics(intr).location == VARYING_SLOT_TEX0) - return lower_texcoord(b, state, intr); - break; - } - default: - break; - } - - return false; -} - -void -nir_lower_drawpixels(nir_shader *shader, - const nir_lower_drawpixels_options *options) -{ - lower_drawpixels_state state = { - .options = options, - .shader = shader, - }; - - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - nir_shader_instructions_pass(shader, lower_drawpixels_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &state); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fb_read.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fb_read.c deleted file mode 100644 index 0bcd98a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fb_read.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright © 2019 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* Lowing for fragment shader load_output. - * - * This pass supports the blend_equation_advanced, where a fragment - * shader loads the output (fragcolor) to read the current framebuffer. - * It does this by lowering the output read to a txf_ms_fb instruction. - * This instruction works similarly to a normal txf_ms except without - * taking a texture source argument. (The driver backend is expected - * to wire this up to a free texture slot which is configured to read - * from the framebuffer.) - * - * This should be run after lower_wpos_ytransform, because the tex - * coordinates should be the physical fragcoord, not the logical - * y-flipped coord. - * - * Note that this pass explicitly does *not* add a sampler uniform - * (as txf_ms_fb does not reference a texture). The driver backend - * is going to want nif->info.num_textures to include the count of - * number of textures *not* including the one it inserts to sample - * from the framebuffer, so it more easily knows where to insert the - * hidden texture to read from the fb. - */ - -static bool -nir_lower_fb_read_instr(nir_builder *b, nir_instr *instr, UNUSED void *cb_data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_output) - return false; - - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *fragcoord = nir_load_frag_coord(b); - nir_ssa_def *sampid = nir_load_sample_id(b); - nir_ssa_def *layer = nir_load_layer_id(b); - fragcoord = nir_f2i32(b, fragcoord); - - nir_tex_instr *tex = nir_tex_instr_create(b->shader, 3); - tex->op = nir_texop_txf_ms_fb; - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - tex->coord_components = 3; - tex->dest_type = nir_type_float32; - tex->is_array = true; - tex->src[0].src_type = nir_tex_src_coord; - tex->src[0].src = - nir_src_for_ssa(nir_vec3(b, nir_channel(b, fragcoord, 0), nir_channel(b, fragcoord, 1), layer)); - tex->src[1].src_type = nir_tex_src_ms_index; - tex->src[1].src = nir_src_for_ssa(sampid); - struct nir_io_semantics io = nir_intrinsic_io_semantics(intr); - tex->src[2].src = nir_src_for_ssa(nir_imm_intN_t(b, io.location - FRAG_RESULT_DATA0, 32)); - tex->src[2].src_type = nir_tex_src_texture_handle; - - nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL); - nir_builder_instr_insert(b, &tex->instr); - - nir_ssa_def_rewrite_uses(&intr->dest.ssa, &tex->dest.ssa); - - return true; -} - -bool -nir_lower_fb_read(nir_shader *shader) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - return nir_shader_instructions_pass(shader, nir_lower_fb_read_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_flatshade.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_flatshade.c deleted file mode 100644 index 97e3a69..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_flatshade.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#include "nir.h" -#include "nir_builder.h" - -static bool -lower_input(nir_shader *shader, nir_variable *var) -{ - if (var->data.interpolation == INTERP_MODE_NONE && - (var->data.location == VARYING_SLOT_COL0 || - var->data.location == VARYING_SLOT_COL1 || - var->data.location == VARYING_SLOT_BFC0 || - var->data.location == VARYING_SLOT_BFC1)) - var->data.interpolation = INTERP_MODE_FLAT; - return true; -} - -bool -nir_lower_flatshade(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_shader_in_variable(var, shader) { - progress |= lower_input(shader, var); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_flrp.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_flrp.c deleted file mode 100644 index 07c7714..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_flrp.c +++ /dev/null @@ -1,660 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include "nir.h" -#include "nir_builder.h" -#include "../../util/u_vector.h" - -/** - * Lower flrp instructions. - * - * Unlike the lowerings that are possible in nir_opt_algrbraic, this pass can - * examine more global information to determine a possibly more efficient - * lowering for each flrp. - */ - -static void -append_flrp_to_dead_list(struct u_vector *dead_flrp, struct nir_alu_instr *alu) -{ - struct nir_alu_instr **tail = u_vector_add(dead_flrp); - *tail = alu; -} - -/** - * Replace flrp(a, b, c) with ffma(b, c, ffma(-a, c, a)). - */ -static void -replace_with_strict_ffma(struct nir_builder *bld, struct u_vector *dead_flrp, - struct nir_alu_instr *alu) -{ - nir_ssa_def *const a = nir_ssa_for_alu_src(bld, alu, 0); - nir_ssa_def *const b = nir_ssa_for_alu_src(bld, alu, 1); - nir_ssa_def *const c = nir_ssa_for_alu_src(bld, alu, 2); - - nir_ssa_def *const neg_a = nir_fneg(bld, a); - nir_instr_as_alu(neg_a->parent_instr)->exact = alu->exact; - - nir_ssa_def *const inner_ffma = nir_ffma(bld, neg_a, c, a); - nir_instr_as_alu(inner_ffma->parent_instr)->exact = alu->exact; - - nir_ssa_def *const outer_ffma = nir_ffma(bld, b, c, inner_ffma); - nir_instr_as_alu(outer_ffma->parent_instr)->exact = alu->exact; - - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, outer_ffma); - - /* DO NOT REMOVE the original flrp yet. Many of the lowering choices are - * based on other uses of the sources. Removing the flrp may cause the - * last flrp in a sequence to make a different, incorrect choice. - */ - append_flrp_to_dead_list(dead_flrp, alu); -} - -/** - * Replace flrp(a, b, c) with ffma(a, (1 - c), bc) - */ -static void -replace_with_single_ffma(struct nir_builder *bld, struct u_vector *dead_flrp, - struct nir_alu_instr *alu) -{ - nir_ssa_def *const a = nir_ssa_for_alu_src(bld, alu, 0); - nir_ssa_def *const b = nir_ssa_for_alu_src(bld, alu, 1); - nir_ssa_def *const c = nir_ssa_for_alu_src(bld, alu, 2); - - nir_ssa_def *const neg_c = nir_fneg(bld, c); - nir_instr_as_alu(neg_c->parent_instr)->exact = alu->exact; - - nir_ssa_def *const one_minus_c = - nir_fadd(bld, nir_imm_floatN_t(bld, 1.0f, c->bit_size), neg_c); - nir_instr_as_alu(one_minus_c->parent_instr)->exact = alu->exact; - - nir_ssa_def *const b_times_c = nir_fmul(bld, b, c); - nir_instr_as_alu(b_times_c->parent_instr)->exact = alu->exact; - - nir_ssa_def *const final_ffma = nir_ffma(bld, a, one_minus_c, b_times_c); - nir_instr_as_alu(final_ffma->parent_instr)->exact = alu->exact; - - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, final_ffma); - - /* DO NOT REMOVE the original flrp yet. Many of the lowering choices are - * based on other uses of the sources. Removing the flrp may cause the - * last flrp in a sequence to make a different, incorrect choice. - */ - append_flrp_to_dead_list(dead_flrp, alu); -} - -/** - * Replace flrp(a, b, c) with a(1-c) + bc. - */ -static void -replace_with_strict(struct nir_builder *bld, struct u_vector *dead_flrp, - struct nir_alu_instr *alu) -{ - nir_ssa_def *const a = nir_ssa_for_alu_src(bld, alu, 0); - nir_ssa_def *const b = nir_ssa_for_alu_src(bld, alu, 1); - nir_ssa_def *const c = nir_ssa_for_alu_src(bld, alu, 2); - - nir_ssa_def *const neg_c = nir_fneg(bld, c); - nir_instr_as_alu(neg_c->parent_instr)->exact = alu->exact; - - nir_ssa_def *const one_minus_c = - nir_fadd(bld, nir_imm_floatN_t(bld, 1.0f, c->bit_size), neg_c); - nir_instr_as_alu(one_minus_c->parent_instr)->exact = alu->exact; - - nir_ssa_def *const first_product = nir_fmul(bld, a, one_minus_c); - nir_instr_as_alu(first_product->parent_instr)->exact = alu->exact; - - nir_ssa_def *const second_product = nir_fmul(bld, b, c); - nir_instr_as_alu(second_product->parent_instr)->exact = alu->exact; - - nir_ssa_def *const sum = nir_fadd(bld, first_product, second_product); - nir_instr_as_alu(sum->parent_instr)->exact = alu->exact; - - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, sum); - - /* DO NOT REMOVE the original flrp yet. Many of the lowering choices are - * based on other uses of the sources. Removing the flrp may cause the - * last flrp in a sequence to make a different, incorrect choice. - */ - append_flrp_to_dead_list(dead_flrp, alu); -} - -/** - * Replace flrp(a, b, c) with a + c(b-a). - */ -static void -replace_with_fast(struct nir_builder *bld, struct u_vector *dead_flrp, - struct nir_alu_instr *alu) -{ - nir_ssa_def *const a = nir_ssa_for_alu_src(bld, alu, 0); - nir_ssa_def *const b = nir_ssa_for_alu_src(bld, alu, 1); - nir_ssa_def *const c = nir_ssa_for_alu_src(bld, alu, 2); - - nir_ssa_def *const neg_a = nir_fneg(bld, a); - nir_instr_as_alu(neg_a->parent_instr)->exact = alu->exact; - - nir_ssa_def *const b_minus_a = nir_fadd(bld, b, neg_a); - nir_instr_as_alu(b_minus_a->parent_instr)->exact = alu->exact; - - nir_ssa_def *const product = nir_fmul(bld, c, b_minus_a); - nir_instr_as_alu(product->parent_instr)->exact = alu->exact; - - nir_ssa_def *const sum = nir_fadd(bld, a, product); - nir_instr_as_alu(sum->parent_instr)->exact = alu->exact; - - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, sum); - - /* DO NOT REMOVE the original flrp yet. Many of the lowering choices are - * based on other uses of the sources. Removing the flrp may cause the - * last flrp in a sequence to make a different, incorrect choice. - */ - append_flrp_to_dead_list(dead_flrp, alu); -} - -/** - * Replace flrp(a, b, c) with (b*c ± c) + a => b*c + (a ± c) - * - * \note: This only works if a = ±1. - */ -static void -replace_with_expanded_ffma_and_add(struct nir_builder *bld, - struct u_vector *dead_flrp, - struct nir_alu_instr *alu, bool subtract_c) -{ - nir_ssa_def *const a = nir_ssa_for_alu_src(bld, alu, 0); - nir_ssa_def *const b = nir_ssa_for_alu_src(bld, alu, 1); - nir_ssa_def *const c = nir_ssa_for_alu_src(bld, alu, 2); - - nir_ssa_def *const b_times_c = nir_fmul(bld, b, c); - nir_instr_as_alu(b_times_c->parent_instr)->exact = alu->exact; - - nir_ssa_def *inner_sum; - - if (subtract_c) { - nir_ssa_def *const neg_c = nir_fneg(bld, c); - nir_instr_as_alu(neg_c->parent_instr)->exact = alu->exact; - - inner_sum = nir_fadd(bld, a, neg_c); - } else { - inner_sum = nir_fadd(bld, a, c); - } - - nir_instr_as_alu(inner_sum->parent_instr)->exact = alu->exact; - - nir_ssa_def *const outer_sum = nir_fadd(bld, inner_sum, b_times_c); - nir_instr_as_alu(outer_sum->parent_instr)->exact = alu->exact; - - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, outer_sum); - - /* DO NOT REMOVE the original flrp yet. Many of the lowering choices are - * based on other uses of the sources. Removing the flrp may cause the - * last flrp in a sequence to make a different, incorrect choice. - */ - append_flrp_to_dead_list(dead_flrp, alu); -} - -/** - * Determines whether a swizzled source is constant w/ all components the same. - * - * The value of the constant is stored in \c result. - * - * \return - * True if all components of the swizzled source are the same constant. - * Otherwise false is returned. - */ -static bool -all_same_constant(const nir_alu_instr *instr, unsigned src, double *result) -{ - nir_const_value *val = nir_src_as_const_value(instr->src[src].src); - - if (!val) - return false; - - const uint8_t *const swizzle = instr->src[src].swizzle; - const unsigned num_components = nir_dest_num_components(instr->dest.dest); - - if (instr->dest.dest.ssa.bit_size == 32) { - const float first = val[swizzle[0]].f32; - - for (unsigned i = 1; i < num_components; i++) { - if (val[swizzle[i]].f32 != first) - return false; - } - - *result = first; - } else { - const double first = val[swizzle[0]].f64; - - for (unsigned i = 1; i < num_components; i++) { - if (val[swizzle[i]].f64 != first) - return false; - } - - *result = first; - } - - return true; -} - -static bool -sources_are_constants_with_similar_magnitudes(const nir_alu_instr *instr) -{ - nir_const_value *val0 = nir_src_as_const_value(instr->src[0].src); - nir_const_value *val1 = nir_src_as_const_value(instr->src[1].src); - - if (val0 == NULL || val1 == NULL) - return false; - - const uint8_t *const swizzle0 = instr->src[0].swizzle; - const uint8_t *const swizzle1 = instr->src[1].swizzle; - const unsigned num_components = nir_dest_num_components(instr->dest.dest); - - if (instr->dest.dest.ssa.bit_size == 32) { - for (unsigned i = 0; i < num_components; i++) { - int exp0; - int exp1; - - frexpf(val0[swizzle0[i]].f32, &exp0); - frexpf(val1[swizzle1[i]].f32, &exp1); - - /* If the difference between exponents is >= 24, then A+B will always - * have the value whichever between A and B has the largest absolute - * value. So, [0, 23] is the valid range. The smaller the limit - * value, the more precision will be maintained at a potential - * performance cost. Somewhat arbitrarilly split the range in half. - */ - if (abs(exp0 - exp1) > (23 / 2)) - return false; - } - } else { - for (unsigned i = 0; i < num_components; i++) { - int exp0; - int exp1; - - frexp(val0[swizzle0[i]].f64, &exp0); - frexp(val1[swizzle1[i]].f64, &exp1); - - /* If the difference between exponents is >= 53, then A+B will always - * have the value whichever between A and B has the largest absolute - * value. So, [0, 52] is the valid range. The smaller the limit - * value, the more precision will be maintained at a potential - * performance cost. Somewhat arbitrarilly split the range in half. - */ - if (abs(exp0 - exp1) > (52 / 2)) - return false; - } - } - - return true; -} - -/** - * Counts of similar types of nir_op_flrp instructions - * - * If a similar instruction fits into more than one category, it will only be - * counted once. The assumption is that no other instruction will have all - * sources the same, or CSE would have removed one of the instructions. - */ -struct similar_flrp_stats { - unsigned src2; - unsigned src0_and_src2; - unsigned src1_and_src2; -}; - -/** - * Collection counts of similar FLRP instructions. - * - * This function only cares about similar instructions that have src2 in - * common. - */ -static void -get_similar_flrp_stats(nir_alu_instr *alu, struct similar_flrp_stats *st) -{ - memset(st, 0, sizeof(*st)); - - nir_foreach_use(other_use, alu->src[2].src.ssa) { - /* Is the use also a flrp? */ - nir_instr *const other_instr = other_use->parent_instr; - if (other_instr->type != nir_instr_type_alu) - continue; - - /* Eh-hem... don't match the instruction with itself. */ - if (other_instr == &alu->instr) - continue; - - nir_alu_instr *const other_alu = nir_instr_as_alu(other_instr); - if (other_alu->op != nir_op_flrp) - continue; - - /* Does the other flrp use source 2 from the first flrp as its source 2 - * as well? - */ - if (!nir_alu_srcs_equal(alu, other_alu, 2, 2)) - continue; - - if (nir_alu_srcs_equal(alu, other_alu, 0, 0)) - st->src0_and_src2++; - else if (nir_alu_srcs_equal(alu, other_alu, 1, 1)) - st->src1_and_src2++; - else - st->src2++; - } -} - -static void -convert_flrp_instruction(nir_builder *bld, - struct u_vector *dead_flrp, - nir_alu_instr *alu, - bool always_precise) -{ - bool have_ffma = false; - unsigned bit_size = nir_dest_bit_size(alu->dest.dest); - - if (bit_size == 16) - have_ffma = !bld->shader->options->lower_ffma16; - else if (bit_size == 32) - have_ffma = !bld->shader->options->lower_ffma32; - else if (bit_size == 64) - have_ffma = !bld->shader->options->lower_ffma64; - else - unreachable("invalid bit_size"); - - bld->cursor = nir_before_instr(&alu->instr); - - /* There are two methods to implement flrp(x, y, t). The strictly correct - * implementation according to the GLSL spec is: - * - * x(1 - t) + yt - * - * This can also be implemented using two chained FMAs - * - * fma(y, t, fma(-x, t, x)) - * - * This method, using either formulation, has better precision when the - * difference between x and y is very large. It guarantess that flrp(x, y, - * 1) = y. For example, flrp(1e38, 1.0, 1.0) is 1.0. This is correct. - * - * The other possible implementation is: - * - * x + t(y - x) - * - * This can also be formuated as an FMA: - * - * fma(y - x, t, x) - * - * For this implementation, flrp(1e38, 1.0, 1.0) is 0.0. Since 1.0 was - * expected, that's a pretty significant error. - * - * The choice made for lowering depends on a number of factors. - * - * - If the flrp is marked precise and FMA is supported: - * - * fma(y, t, fma(-x, t, x)) - * - * This is strictly correct (maybe?), and the cost is two FMA - * instructions. It at least maintains the flrp(x, y, 1.0) == y - * condition. - * - * - If the flrp is marked precise and FMA is not supported: - * - * x(1 - t) + yt - * - * This is strictly correct, and the cost is 4 instructions. If FMA is - * supported, this may or may not be reduced to 3 instructions (a - * subtract, a multiply, and an FMA)... but in that case the other - * formulation should have been used. - */ - if (alu->exact) { - if (have_ffma) - replace_with_strict_ffma(bld, dead_flrp, alu); - else - replace_with_strict(bld, dead_flrp, alu); - - return; - } - - /* - * - If x and y are both immediates and the relative magnitude of the - * values is similar (such that x-y does not lose too much precision): - * - * x + t(x - y) - * - * We rely on constant folding to eliminate x-y, and we rely on - * nir_opt_algebraic to possibly generate an FMA. The cost is either one - * FMA or two instructions. - */ - if (sources_are_constants_with_similar_magnitudes(alu)) { - replace_with_fast(bld, dead_flrp, alu); - return; - } - - /* - * - If x = 1: - * - * (yt + -t) + 1 - * - * - If x = -1: - * - * (yt + t) - 1 - * - * In both cases, x is used in place of ±1 for simplicity. Both forms - * lend to ffma generation on platforms that support ffma. - */ - double src0_as_constant; - if (all_same_constant(alu, 0, &src0_as_constant)) { - if (src0_as_constant == 1.0) { - replace_with_expanded_ffma_and_add(bld, dead_flrp, alu, - true /* subtract t */); - return; - } else if (src0_as_constant == -1.0) { - replace_with_expanded_ffma_and_add(bld, dead_flrp, alu, - false /* add t */); - return; - } - } - - /* - * - If y = ±1: - * - * x(1 - t) + yt - * - * In this case either the multiply in yt will be eliminated by - * nir_opt_algebraic. If FMA is supported, this results in fma(x, (1 - - * t), ±t) for two instructions. If FMA is not supported, then the cost - * is 3 instructions. We rely on nir_opt_algebraic to generate the FMA - * instructions as well. - * - * Another possible replacement is - * - * -xt + x ± t - * - * Some groupings of this may be better on some platforms in some - * circumstances, bit it is probably dependent on scheduling. Futher - * investigation may be required. - */ - double src1_as_constant; - if ((all_same_constant(alu, 1, &src1_as_constant) && - (src1_as_constant == -1.0 || src1_as_constant == 1.0))) { - replace_with_strict(bld, dead_flrp, alu); - return; - } - - if (have_ffma) { - if (always_precise) { - replace_with_strict_ffma(bld, dead_flrp, alu); - return; - } - - /* - * - If FMA is supported and other flrp(x, _, t) exists: - * - * fma(y, t, fma(-x, t, x)) - * - * The hope is that the inner FMA calculation will be shared with the - * other lowered flrp. This results in two FMA instructions for the - * first flrp and one FMA instruction for each additional flrp. It - * also means that the live range for x might be complete after the - * inner ffma instead of after the last flrp. - */ - struct similar_flrp_stats st; - - get_similar_flrp_stats(alu, &st); - if (st.src0_and_src2 > 0) { - replace_with_strict_ffma(bld, dead_flrp, alu); - return; - } - - /* - * - If FMA is supported and another flrp(_, y, t) exists: - * - * fma(x, (1 - t), yt) - * - * The hope is that the (1 - t) and the yt will be shared with the - * other lowered flrp. This results in 3 insructions for the first - * flrp and 1 for each additional flrp. - */ - if (st.src1_and_src2 > 0) { - replace_with_single_ffma(bld, dead_flrp, alu); - return; - } - } else { - if (always_precise) { - replace_with_strict(bld, dead_flrp, alu); - return; - } - - /* - * - If FMA is not supported and another flrp(x, _, t) exists: - * - * x(1 - t) + yt - * - * The hope is that the x(1 - t) will be shared with the other lowered - * flrp. This results in 4 insructions for the first flrp and 2 for - * each additional flrp. - * - * - If FMA is not supported and another flrp(_, y, t) exists: - * - * x(1 - t) + yt - * - * The hope is that the (1 - t) and the yt will be shared with the - * other lowered flrp. This results in 4 insructions for the first - * flrp and 2 for each additional flrp. - */ - struct similar_flrp_stats st; - - get_similar_flrp_stats(alu, &st); - if (st.src0_and_src2 > 0 || st.src1_and_src2 > 0) { - replace_with_strict(bld, dead_flrp, alu); - return; - } - } - - /* - * - If t is constant: - * - * x(1 - t) + yt - * - * The cost is three instructions without FMA or two instructions with - * FMA. This is the same cost as the imprecise lowering, but it gives - * the instruction scheduler a little more freedom. - * - * There is no need to handle t = 0.5 specially. nir_opt_algebraic - * already has optimizations to convert 0.5x + 0.5y to 0.5(x + y). - */ - if (alu->src[2].src.ssa->parent_instr->type == nir_instr_type_load_const) { - replace_with_strict(bld, dead_flrp, alu); - return; - } - - /* - * - Otherwise - * - * x + t(x - y) - */ - replace_with_fast(bld, dead_flrp, alu); -} - -static void -lower_flrp_impl(nir_function_impl *impl, - struct u_vector *dead_flrp, - unsigned lowering_mask, - bool always_precise) -{ - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_alu) { - nir_alu_instr *const alu = nir_instr_as_alu(instr); - - if (alu->op == nir_op_flrp && - (alu->dest.dest.ssa.bit_size & lowering_mask)) { - convert_flrp_instruction(&b, dead_flrp, alu, always_precise); - } - } - } - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); -} - -/** - * \param lowering_mask - Bitwise-or of the bit sizes that need to be lowered - * (e.g., 16 | 64 if only 16-bit and 64-bit flrp need - * lowering). - * \param always_precise - Always require precise lowering for flrp. This - * will always lower flrp to (a * (1 - c)) + (b * c). - * \param have_ffma - Set to true if the GPU has an FFMA instruction that - * should be used. - */ -bool -nir_lower_flrp(nir_shader *shader, - unsigned lowering_mask, - bool always_precise) -{ - struct u_vector dead_flrp; - - if (!u_vector_init_pow2(&dead_flrp, 8, sizeof(struct nir_alu_instr *))) - return false; - - nir_foreach_function(function, shader) { - if (function->impl) { - lower_flrp_impl(function->impl, &dead_flrp, lowering_mask, - always_precise); - } - } - - /* Progress was made if the dead list is not empty. Remove all the - * instructions from the dead list. - */ - const bool progress = u_vector_length(&dead_flrp) != 0; - - struct nir_alu_instr **instr; - u_vector_foreach(instr, &dead_flrp) - nir_instr_remove(&(*instr)->instr); - - u_vector_finish(&dead_flrp); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fp16_conv.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fp16_conv.c deleted file mode 100644 index 951a36d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fp16_conv.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright © Microsoft Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -/* The following float-to-half conversion routines are based on the "half" library: - * https://sourceforge.net/projects/half/ - * - * half - IEEE 754-based half-precision floating-point library. - * - * Copyright (c) 2012-2019 Christian Rau - * - * 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 THE AUTHORS OR - * COPYRIGHT HOLDERS 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. - * - * Version 2.1.0 - */ - -static nir_ssa_def * -half_rounded(nir_builder *b, nir_ssa_def *value, nir_ssa_def *guard, nir_ssa_def *sticky, - nir_ssa_def *sign, nir_rounding_mode mode) -{ - switch (mode) { - case nir_rounding_mode_rtne: - return nir_iadd(b, value, nir_iand(b, guard, nir_ior(b, sticky, value))); - case nir_rounding_mode_ru: - sign = nir_ushr(b, sign, nir_imm_int(b, 31)); - return nir_iadd(b, value, nir_iand(b, nir_inot(b, sign), - nir_ior(b, guard, sticky))); - case nir_rounding_mode_rd: - sign = nir_ushr(b, sign, nir_imm_int(b, 31)); - return nir_iadd(b, value, nir_iand(b, sign, - nir_ior(b, guard, sticky))); - default: - return value; - } -} - -static nir_ssa_def * -float_to_half_impl(nir_builder *b, nir_ssa_def *src, nir_rounding_mode mode) -{ - nir_ssa_def *f32infinity = nir_imm_int(b, 255 << 23); - nir_ssa_def *f16max = nir_imm_int(b, (127 + 16) << 23); - - if (src->bit_size == 64) - src = nir_f2f32(b, src); - nir_ssa_def *sign = nir_iand(b, src, nir_imm_int(b, 0x80000000)); - nir_ssa_def *one = nir_imm_int(b, 1); - - nir_ssa_def *abs = nir_iand(b, src, nir_imm_int(b, 0x7FFFFFFF)); - /* NaN or INF. For rtne, overflow also becomes INF, so combine the comparisons */ - nir_push_if(b, nir_ige(b, abs, mode == nir_rounding_mode_rtne ? f16max : f32infinity)); - nir_ssa_def *inf_nanfp16 = nir_bcsel(b, - nir_ilt(b, f32infinity, abs), - nir_imm_int(b, 0x7E00), - nir_imm_int(b, 0x7C00)); - nir_push_else(b, NULL); - - nir_ssa_def *overflowed_fp16 = NULL; - if (mode != nir_rounding_mode_rtne) { - /* Handle overflow */ - nir_push_if(b, nir_ige(b, abs, f16max)); - switch (mode) { - case nir_rounding_mode_rtz: - overflowed_fp16 = nir_imm_int(b, 0x7BFF); - break; - case nir_rounding_mode_ru: - /* Negative becomes max float, positive becomes inf */ - overflowed_fp16 = nir_bcsel(b, nir_i2b(b, sign), nir_imm_int(b, 0x7BFF), nir_imm_int(b, 0x7C00)); - break; - case nir_rounding_mode_rd: - /* Negative becomes inf, positive becomes max float */ - overflowed_fp16 = nir_bcsel(b, nir_i2b(b, sign), nir_imm_int(b, 0x7C00), nir_imm_int(b, 0x7BFF)); - break; - default: unreachable("Should've been handled already"); - } - nir_push_else(b, NULL); - } - - nir_ssa_def *zero = nir_imm_int(b, 0); - - nir_push_if(b, nir_ige(b, abs, nir_imm_int(b, 113 << 23))); - - /* FP16 will be normal */ - nir_ssa_def *value = nir_ior(b, - nir_ishl(b, - nir_isub(b, - nir_ushr(b, abs, nir_imm_int(b, 23)), - nir_imm_int(b, 112)), - nir_imm_int(b, 10)), - nir_iand(b, nir_ushr(b, abs, nir_imm_int(b, 13)), nir_imm_int(b, 0x3FFF))); - nir_ssa_def *guard = nir_iand(b, nir_ushr(b, abs, nir_imm_int(b, 12)), one); - nir_ssa_def *sticky = nir_bcsel(b, nir_ine(b, nir_iand(b, abs, nir_imm_int(b, 0xFFF)), zero), one, zero); - nir_ssa_def *normal_fp16 = half_rounded(b, value, guard, sticky, sign, mode); - - nir_push_else(b, NULL); - nir_push_if(b, nir_ige(b, abs, nir_imm_int(b, 102 << 23))); - - /* FP16 will be denormal */ - nir_ssa_def *i = nir_isub(b, nir_imm_int(b, 125), nir_ushr(b, abs, nir_imm_int(b, 23))); - nir_ssa_def *masked = nir_ior(b, nir_iand(b, abs, nir_imm_int(b, 0x7FFFFF)), nir_imm_int(b, 0x800000)); - value = nir_ushr(b, masked, nir_iadd(b, i, one)); - guard = nir_iand(b, nir_ushr(b, masked, i), one); - sticky = nir_bcsel(b, nir_ine(b, nir_iand(b, masked, nir_isub(b, nir_ishl(b, one, i), one)), zero), one, zero); - nir_ssa_def *denormal_fp16 = half_rounded(b, value, guard, sticky, sign, mode); - - nir_push_else(b, NULL); - - /* Handle underflow. Nonzero values need to shift up or down for round-up or round-down */ - nir_ssa_def *underflowed_fp16 = zero; - if (mode == nir_rounding_mode_ru || - mode == nir_rounding_mode_rd) { - nir_push_if(b, nir_i2b(b, abs)); - - if (mode == nir_rounding_mode_ru) - underflowed_fp16 = nir_bcsel(b, nir_i2b(b, sign), zero, one); - else - underflowed_fp16 = nir_bcsel(b, nir_i2b(b, sign), one, zero); - - nir_push_else(b, NULL); - nir_pop_if(b, NULL); - underflowed_fp16 = nir_if_phi(b, underflowed_fp16, zero); - } - - nir_pop_if(b, NULL); - nir_ssa_def *underflowed_or_denorm_fp16 = nir_if_phi(b, denormal_fp16, underflowed_fp16); - - nir_pop_if(b, NULL); - nir_ssa_def *finite_fp16 = nir_if_phi(b, normal_fp16, underflowed_or_denorm_fp16); - - nir_ssa_def *finite_or_overflowed_fp16 = finite_fp16; - if (mode != nir_rounding_mode_rtne) { - nir_pop_if(b, NULL); - finite_or_overflowed_fp16 = nir_if_phi(b, overflowed_fp16, finite_fp16); - } - - nir_pop_if(b, NULL); - nir_ssa_def *fp16 = nir_if_phi(b, inf_nanfp16, finite_or_overflowed_fp16); - - return nir_u2u16(b, nir_ior(b, fp16, nir_ushr(b, sign, nir_imm_int(b, 16)))); -} - -static bool -lower_fp16_cast_impl(nir_builder *b, nir_instr *instr, void *data) -{ - nir_ssa_def *src, *dst; - uint8_t *swizzle = NULL; - nir_rounding_mode mode = nir_rounding_mode_undef; - - if (instr->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(instr); - src = alu->src[0].src.ssa; - swizzle = alu->src[0].swizzle; - dst = &alu->dest.dest.ssa; - switch (alu->op) { - case nir_op_f2f16: - if (b->shader->info.float_controls_execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP16) - mode = nir_rounding_mode_rtz; - else if (b->shader->info.float_controls_execution_mode & FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP16) - mode = nir_rounding_mode_rtne; - break; - case nir_op_f2f16_rtne: - mode = nir_rounding_mode_rtne; - break; - case nir_op_f2f16_rtz: - mode = nir_rounding_mode_rtz; - break; - default: - return false; - } - } else if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_convert_alu_types || - nir_intrinsic_dest_type(intrin) != nir_type_float16) - return false; - src = intrin->src[0].ssa; - dst = &intrin->dest.ssa; - mode = nir_intrinsic_rounding_mode(intrin); - } else { - return false; - } - - nir_lower_fp16_cast_options options = *(nir_lower_fp16_cast_options *)data; - nir_lower_fp16_cast_options req_option = 0; - switch (mode) { - case nir_rounding_mode_rtz: - req_option = nir_lower_fp16_rtz; - break; - case nir_rounding_mode_rtne: - req_option = nir_lower_fp16_rtne; - break; - case nir_rounding_mode_ru: - req_option = nir_lower_fp16_ru; - break; - case nir_rounding_mode_rd: - req_option = nir_lower_fp16_rd; - break; - case nir_rounding_mode_undef: - if (options == nir_lower_fp16_all) { - /* Pick one arbitrarily for lowering */ - mode = nir_rounding_mode_rtne; - req_option = nir_lower_fp16_rtne; - } - /* Otherwise assume the backend can handle f2f16 with undef rounding */ - break; - default: - unreachable("Invalid rounding mode"); - } - if (!(options & req_option)) - return false; - - b->cursor = nir_before_instr(instr); - nir_ssa_def *rets[NIR_MAX_VEC_COMPONENTS] = { NULL }; - - for (unsigned i = 0; i < dst->num_components; i++) { - nir_ssa_def *comp = nir_channel(b, src, swizzle ? swizzle[i] : i); - rets[i] = float_to_half_impl(b, comp, mode); - } - - nir_ssa_def *new_val = nir_vec(b, rets, dst->num_components); - nir_ssa_def_rewrite_uses(dst, new_val); - return true; -} - -bool -nir_lower_fp16_casts(nir_shader *shader, nir_lower_fp16_cast_options options) -{ - return nir_shader_instructions_pass(shader, - lower_fp16_cast_impl, - nir_metadata_none, - &options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fragcolor.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fragcolor.c deleted file mode 100644 index 77540dd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fragcolor.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright © 2020 Mike Blumenkrantz - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Mike Blumenkrantz - */ - -#include "nir.h" -#include "nir_builder.h" - -/** - * This pass splits gl_FragColor into gl_FragData[0-7] for drivers which handle - * the former but not the latter, e.g., zink. - */ - -/* - If a fragment shader writes to "gl_FragColor", DrawBuffersIndexedEXT - specifies a set of draw buffers into which the color written to - "gl_FragColor" is written. If a fragment shader writes to - gl_FragData, DrawBuffersIndexedEXT specifies a set of draw buffers - into which each of the multiple output colors defined by these - variables are separately written. If a fragment shader writes to - neither gl_FragColor nor gl_FragData, the values of the fragment - colors following shader execution are undefined, and may differ - for each fragment color. - - - EXT_multiview_draw_buffers - - */ - -static bool -lower_fragcolor_instr(nir_builder *b, nir_instr *intr, void *data) -{ - if (intr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *instr = nir_instr_as_intrinsic(intr); - unsigned *max_draw_buffers = data; - - nir_variable *out; - if (instr->intrinsic != nir_intrinsic_store_deref) - return false; - - out = nir_deref_instr_get_variable(nir_src_as_deref(instr->src[0])); - if (out->data.location != FRAG_RESULT_COLOR || out->data.mode != nir_var_shader_out) - return false; - b->cursor = nir_after_instr(&instr->instr); - - assert(instr->src[1].is_ssa); - nir_ssa_def *frag_color = instr->src[1].ssa; - ralloc_free(out->name); - - const char *name = out->data.index == 0 ? "gl_FragData[0]" : - "gl_SecondaryFragDataEXT[0]"; - const char *name_tmpl = out->data.index == 0 ? "gl_FragData[%u]" : - "gl_SecondaryFragDataEXT[%u]"; - - out->name = ralloc_strdup(out, name); - - /* translate gl_FragColor -> gl_FragData since this is already handled */ - out->data.location = FRAG_RESULT_DATA0; - nir_component_mask_t writemask = nir_intrinsic_write_mask(instr); - b->shader->info.outputs_written &= ~BITFIELD64_BIT(FRAG_RESULT_COLOR); - b->shader->info.outputs_written |= BITFIELD64_BIT(FRAG_RESULT_DATA0); - - for (unsigned i = 1; i < *max_draw_buffers; i++) { - char name[28]; - snprintf(name, sizeof(name), name_tmpl, i); - nir_variable *out_color = nir_variable_create(b->shader, nir_var_shader_out, - out->type, name); - out_color->data.location = FRAG_RESULT_DATA0 + i; - out_color->data.driver_location = b->shader->num_outputs++; - out_color->data.index = out->data.index; - nir_store_var(b, out_color, frag_color, writemask); - b->shader->info.outputs_written |= BITFIELD64_BIT(FRAG_RESULT_DATA0 + i); - } - return true; -} - -bool -nir_lower_fragcolor(nir_shader *shader, unsigned max_draw_buffers) -{ - if (shader->info.stage != MESA_SHADER_FRAGMENT) - return false; - - return nir_shader_instructions_pass(shader, lower_fragcolor_instr, - nir_metadata_block_index | nir_metadata_dominance, &max_draw_buffers); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fragcoord_wtrans.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fragcoord_wtrans.c deleted file mode 100644 index fce8606..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_fragcoord_wtrans.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2019 Andreas Baierl - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* Lower gl_FragCoord and transform the w component - * according to the following pseudocode: - * - * gl_FragCoord.xyz = gl_FragCoord_orig.xyz - * gl_FragCoord.w = 1.0 / gl_FragCoord_orig.w - * - */ - -static bool -lower_fragcoord_wtrans_filter(const nir_instr *instr, UNUSED const void *_options) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic == nir_intrinsic_load_frag_coord) - return true; - - if (intr->intrinsic != nir_intrinsic_load_deref) - return false; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_must_be(deref, nir_var_shader_in)) - return false; - - nir_variable *var = nir_intrinsic_get_var(intr, 0); - return var->data.location == VARYING_SLOT_POS; -} - -static nir_ssa_def * -lower_fragcoord_wtrans_impl(nir_builder *b, nir_instr *instr, - UNUSED void *_options) -{ - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - return nir_vec4(b, - nir_channel(b, &intr->dest.ssa, 0), - nir_channel(b, &intr->dest.ssa, 1), - nir_channel(b, &intr->dest.ssa, 2), - nir_frcp(b, nir_channel(b, &intr->dest.ssa, 3))); -} - -bool -nir_lower_fragcoord_wtrans(nir_shader *shader) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - return nir_shader_lower_instructions(shader, - lower_fragcoord_wtrans_filter, - lower_fragcoord_wtrans_impl, - NULL); - -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_frexp.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_frexp.c deleted file mode 100644 index 76d125e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_frexp.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * Copyright © 2019 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static nir_ssa_def * -lower_frexp_sig(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *abs_x = nir_fabs(b, x); - nir_ssa_def *zero = nir_imm_floatN_t(b, 0, x->bit_size); - nir_ssa_def *sign_mantissa_mask, *exponent_value; - - switch (x->bit_size) { - case 16: - /* Half-precision floating-point values are stored as - * 1 sign bit; - * 5 exponent bits; - * 10 mantissa bits. - * - * An exponent shift of 10 will shift the mantissa out, leaving only the - * exponent and sign bit (which itself may be zero, if the absolute value - * was taken before the bitcast and shift). - */ - sign_mantissa_mask = nir_imm_intN_t(b, 0x83ffu, 16); - /* Exponent of floating-point values in the range [0.5, 1.0). */ - exponent_value = nir_imm_intN_t(b, 0x3800u, 16); - break; - case 32: - /* Single-precision floating-point values are stored as - * 1 sign bit; - * 8 exponent bits; - * 23 mantissa bits. - * - * An exponent shift of 23 will shift the mantissa out, leaving only the - * exponent and sign bit (which itself may be zero, if the absolute value - * was taken before the bitcast and shift. - */ - sign_mantissa_mask = nir_imm_int(b, 0x807fffffu); - /* Exponent of floating-point values in the range [0.5, 1.0). */ - exponent_value = nir_imm_int(b, 0x3f000000u); - break; - case 64: - /* Double-precision floating-point values are stored as - * 1 sign bit; - * 11 exponent bits; - * 52 mantissa bits. - * - * An exponent shift of 20 will shift the remaining mantissa bits out, - * leaving only the exponent and sign bit (which itself may be zero, if - * the absolute value was taken before the bitcast and shift. - */ - sign_mantissa_mask = nir_imm_int(b, 0x800fffffu); - /* Exponent of floating-point values in the range [0.5, 1.0). */ - exponent_value = nir_imm_int(b, 0x3fe00000u); - break; - default: - unreachable("Invalid bitsize"); - } - - if (x->bit_size == 64) { - /* We only need to deal with the exponent so first we extract the upper - * 32 bits using nir_unpack_64_2x32_split_y. - */ - nir_ssa_def *upper_x = nir_unpack_64_2x32_split_y(b, x); - - /* If x is ±0, ±Inf, or NaN, return x unmodified. */ - nir_ssa_def *new_upper = - nir_bcsel(b, - nir_iand(b, - nir_flt(b, zero, abs_x), - nir_fisfinite(b, x)), - nir_ior(b, - nir_iand(b, upper_x, sign_mantissa_mask), - exponent_value), - upper_x); - - nir_ssa_def *lower_x = nir_unpack_64_2x32_split_x(b, x); - - return nir_pack_64_2x32_split(b, lower_x, new_upper); - } else { - /* If x is ±0, ±Inf, or NaN, return x unmodified. */ - return nir_bcsel(b, - nir_iand(b, - nir_flt(b, zero, abs_x), - nir_fisfinite(b, x)), - nir_ior(b, - nir_iand(b, x, sign_mantissa_mask), - exponent_value), - x); - } -} - -static nir_ssa_def * -lower_frexp_exp(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *abs_x = nir_fabs(b, x); - nir_ssa_def *zero = nir_imm_floatN_t(b, 0, x->bit_size); - nir_ssa_def *is_not_zero = nir_fneu(b, abs_x, zero); - nir_ssa_def *exponent; - - switch (x->bit_size) { - case 16: { - nir_ssa_def *exponent_shift = nir_imm_int(b, 10); - nir_ssa_def *exponent_bias = nir_imm_intN_t(b, -14, 16); - - /* Significand return must be of the same type as the input, but the - * exponent must be a 32-bit integer. - */ - exponent = nir_i2i32(b, nir_iadd(b, nir_ushr(b, abs_x, exponent_shift), - nir_bcsel(b, is_not_zero, exponent_bias, zero))); - break; - } - case 32: { - nir_ssa_def *exponent_shift = nir_imm_int(b, 23); - nir_ssa_def *exponent_bias = nir_imm_int(b, -126); - - exponent = nir_iadd(b, nir_ushr(b, abs_x, exponent_shift), - nir_bcsel(b, is_not_zero, exponent_bias, zero)); - break; - } - case 64: { - nir_ssa_def *exponent_shift = nir_imm_int(b, 20); - nir_ssa_def *exponent_bias = nir_imm_int(b, -1022); - - nir_ssa_def *zero32 = nir_imm_int(b, 0); - nir_ssa_def *abs_upper_x = nir_unpack_64_2x32_split_y(b, abs_x); - - exponent = nir_iadd(b, nir_ushr(b, abs_upper_x, exponent_shift), - nir_bcsel(b, is_not_zero, exponent_bias, zero32)); - break; - } - default: - unreachable("Invalid bitsize"); - } - - return exponent; -} - -static bool -lower_frexp_instr(nir_builder *b, nir_instr *instr, UNUSED void *cb_data) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu_instr = nir_instr_as_alu(instr); - nir_ssa_def *lower; - - b->cursor = nir_before_instr(instr); - - switch (alu_instr->op) { - case nir_op_frexp_sig: - lower = lower_frexp_sig(b, nir_ssa_for_alu_src(b, alu_instr, 0)); - break; - case nir_op_frexp_exp: - lower = lower_frexp_exp(b, nir_ssa_for_alu_src(b, alu_instr, 0)); - break; - default: - return false; - } - - nir_ssa_def_rewrite_uses(&alu_instr->dest.dest.ssa, lower); - nir_instr_remove(instr); - return true; -} - -bool -nir_lower_frexp(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, lower_frexp_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_global_vars_to_local.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_global_vars_to_local.c deleted file mode 100644 index 4cded02..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_global_vars_to_local.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * This lowering pass detects when a global variable is only being used by - * one function and makes it local to that function - */ - -#include "nir.h" - -static void -register_var_use(nir_variable *var, nir_function_impl *impl, - struct hash_table *var_func_table) -{ - if (var->data.mode != nir_var_shader_temp) - return; - - struct hash_entry *entry = - _mesa_hash_table_search(var_func_table, var); - - if (entry) { - if (entry->data != impl) - entry->data = NULL; - } else { - _mesa_hash_table_insert(var_func_table, var, impl); - } -} - -static bool -mark_global_var_uses_block(nir_block *block, nir_function_impl *impl, - struct hash_table *var_func_table) -{ - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_deref) { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type == nir_deref_type_var) - register_var_use(deref->var, impl, var_func_table); - } - } - - return true; -} - -bool -nir_lower_global_vars_to_local(nir_shader *shader) -{ - bool progress = false; - - /* A hash table keyed on variable pointers that stores the unique - * nir_function_impl that uses the given variable. If a variable is - * used in multiple functions, the data for the given key will be NULL. - */ - struct hash_table *var_func_table = _mesa_pointer_hash_table_create(NULL); - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_foreach_block(block, function->impl) - mark_global_var_uses_block(block, function->impl, var_func_table); - } - } - - nir_foreach_variable_with_modes_safe(var, shader, nir_var_shader_temp) { - struct hash_entry *entry = _mesa_hash_table_search(var_func_table, var); - if (!entry) - continue; - - nir_function_impl *impl = entry->data; - - if (impl != NULL) { - exec_node_remove(&var->node); - var->data.mode = nir_var_function_temp; - exec_list_push_tail(&impl->locals, &var->node); - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs); - progress = true; - } - } - - _mesa_hash_table_destroy(var_func_table, NULL); - - if (progress) - nir_fixup_deref_modes(shader); - - nir_foreach_function(function, shader) { - if (function->impl) - nir_metadata_preserve(function->impl, nir_metadata_all); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_goto_ifs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_goto_ifs.c deleted file mode 100644 index 0e6902e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_goto_ifs.c +++ /dev/null @@ -1,996 +0,0 @@ -/* - * Copyright © 2020 Julian Winkler - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_vla.h" - -#define NIR_LOWER_GOTO_IFS_DEBUG 0 - -struct path { - /** Set of blocks which this path represents - * - * It's "reachable" not in the sense that these are all the nodes reachable - * through this path but in the sense that, when you see one of these - * blocks, you know you've reached this path. - */ - struct set *reachable; - - /** Fork in the path, if reachable->entries > 1 */ - struct path_fork *fork; -}; - -struct path_fork { - bool is_var; - union { - nir_variable *path_var; - nir_ssa_def *path_ssa; - }; - struct path paths[2]; -}; - -struct routes { - struct path regular; - struct path brk; - struct path cont; - struct routes *loop_backup; -}; - -struct strct_lvl { - struct list_head link; - - /** Set of blocks at the current level */ - struct set *blocks; - - /** Path for the next level */ - struct path out_path; - - /** Reach set from inside_outside if irreducable */ - struct set *reach; - - /** True if a skip region starts with this level */ - bool skip_start; - - /** True if a skip region ends with this level */ - bool skip_end; - - /** True if this level is irreducable */ - bool irreducible; -}; - -static int -nir_block_ptr_cmp(const void *_a, const void *_b) -{ - const nir_block *const *a = _a; - const nir_block *const *b = _b; - return (int)(*a)->index - (int)(*b)->index; -} - -static void -print_block_set(const struct set *set) -{ - printf("{ "); - if (set != NULL) { - unsigned count = 0; - set_foreach(set, entry) { - if (count++) - printf(", "); - printf("%u", ((nir_block *)entry->key)->index); - } - } - printf(" }\n"); -} - -/** Return a sorted array of blocks for a set - * - * Hash set ordering is non-deterministic. We hash based on pointers and so, - * if any pointer ever changes from one run to another, the order of the set - * may change. Any time we're going to make decisions which may affect the - * final structure which may depend on ordering, we should first sort the - * blocks. - */ -static nir_block ** -sorted_block_arr_for_set(const struct set *block_set, void *mem_ctx) -{ - const unsigned num_blocks = block_set->entries; - nir_block **block_arr = ralloc_array(mem_ctx, nir_block *, num_blocks); - unsigned i = 0; - set_foreach(block_set, entry) - block_arr[i++] = (nir_block *)entry->key; - assert(i == num_blocks); - qsort(block_arr, num_blocks, sizeof(*block_arr), nir_block_ptr_cmp); - return block_arr; -} - -static nir_block * -block_for_singular_set(const struct set *block_set) -{ - assert(block_set->entries == 1); - return (nir_block *)_mesa_set_next_entry(block_set, NULL)->key; -} - -/** - * Sets all path variables to reach the target block via a fork - */ -static void -set_path_vars(nir_builder *b, struct path_fork *fork, nir_block *target) -{ - while (fork) { - for (int i = 0; i < 2; i++) { - if (_mesa_set_search(fork->paths[i].reachable, target)) { - if (fork->is_var) { - nir_store_var(b, fork->path_var, nir_imm_bool(b, i), 1); - } else { - assert(fork->path_ssa == NULL); - fork->path_ssa = nir_imm_bool(b, i); - } - fork = fork->paths[i].fork; - break; - } - } - } -} - -/** - * Sets all path variables to reach the both target blocks via a fork. - * If the blocks are in different fork paths, the condition will be used. - * As the fork is already created, the then and else blocks may be swapped, - * in this case the condition is inverted - */ -static void -set_path_vars_cond(nir_builder *b, struct path_fork *fork, nir_src condition, - nir_block *then_block, nir_block *else_block) -{ - int i; - while (fork) { - for (i = 0; i < 2; i++) { - if (_mesa_set_search(fork->paths[i].reachable, then_block)) { - if (_mesa_set_search(fork->paths[i].reachable, else_block)) { - if (fork->is_var) { - nir_store_var(b, fork->path_var, nir_imm_bool(b, i), 1); - } else { - assert(fork->path_ssa == NULL); - fork->path_ssa = nir_imm_bool(b, i); - } - fork = fork->paths[i].fork; - break; - } - else { - assert(condition.is_ssa); - nir_ssa_def *ssa_def = condition.ssa; - assert(ssa_def->bit_size == 1); - assert(ssa_def->num_components == 1); - if (!i) - ssa_def = nir_inot(b, ssa_def); - if (fork->is_var) { - nir_store_var(b, fork->path_var, ssa_def, 1); - } else { - assert(fork->path_ssa == NULL); - fork->path_ssa = ssa_def; - } - set_path_vars(b, fork->paths[i].fork, then_block); - set_path_vars(b, fork->paths[!i].fork, else_block); - return; - } - } - } - assert(i < 2); - } -} - -/** - * Sets all path variables and places the right jump instruction to reach the - * target block - */ -static void -route_to(nir_builder *b, struct routes *routing, nir_block *target) -{ - if (_mesa_set_search(routing->regular.reachable, target)) { - set_path_vars(b, routing->regular.fork, target); - } - else if (_mesa_set_search(routing->brk.reachable, target)) { - set_path_vars(b, routing->brk.fork, target); - nir_jump(b, nir_jump_break); - } - else if (_mesa_set_search(routing->cont.reachable, target)) { - set_path_vars(b, routing->cont.fork, target); - nir_jump(b, nir_jump_continue); - } - else { - assert(!target->successors[0]); /* target is endblock */ - nir_jump(b, nir_jump_return); - } -} - -/** - * Sets path vars and places the right jump instr to reach one of the two - * target blocks based on the condition. If the targets need different jump - * istructions, they will be placed into an if else statement. - * This can happen if one target is the loop head - * A __ - * | \ - * B | - * |\__/ - * C - */ -static void -route_to_cond(nir_builder *b, struct routes *routing, nir_src condition, - nir_block *then_block, nir_block *else_block) -{ - if (_mesa_set_search(routing->regular.reachable, then_block)) { - if (_mesa_set_search(routing->regular.reachable, else_block)) { - set_path_vars_cond(b, routing->regular.fork, condition, - then_block, else_block); - return; - } - } else if (_mesa_set_search(routing->brk.reachable, then_block)) { - if (_mesa_set_search(routing->brk.reachable, else_block)) { - set_path_vars_cond(b, routing->brk.fork, condition, - then_block, else_block); - nir_jump(b, nir_jump_break); - return; - } - } else if (_mesa_set_search(routing->cont.reachable, then_block)) { - if (_mesa_set_search(routing->cont.reachable, else_block)) { - set_path_vars_cond(b, routing->cont.fork, condition, - then_block, else_block); - nir_jump(b, nir_jump_continue); - return; - } - } - - /* then and else blocks are in different routes */ - nir_push_if_src(b, condition); - route_to(b, routing, then_block); - nir_push_else(b, NULL); - route_to(b, routing, else_block); - nir_pop_if(b, NULL); -} - -/** - * Merges the reachable sets of both fork subpaths into the forks entire - * reachable set - */ -static struct set * -fork_reachable(struct path_fork *fork) -{ - struct set *reachable = _mesa_set_clone(fork->paths[0].reachable, fork); - set_foreach(fork->paths[1].reachable, entry) - _mesa_set_add_pre_hashed(reachable, entry->hash, entry->key); - return reachable; -} - -/** - * Modifies the routing to be the routing inside a loop. The old regular path - * becomes the new break path. The loop in path becomes the new regular and - * continue path. - * The lost routing information is stacked into the loop_backup stack. - * Also creates helper vars for multilevel loop jumping if needed. - * Also calls the nir builder to build the loop - */ -static void -loop_routing_start(struct routes *routing, nir_builder *b, - struct path loop_path, struct set *reach, - void *mem_ctx) -{ - if (NIR_LOWER_GOTO_IFS_DEBUG) { - printf("loop_routing_start:\n"); - printf(" reach = "); - print_block_set(reach); - printf(" loop_path.reachable = "); - print_block_set(loop_path.reachable); - printf(" routing->regular.reachable = "); - print_block_set(routing->regular.reachable); - printf(" routing->brk.reachable = "); - print_block_set(routing->brk.reachable); - printf(" routing->cont.reachable = "); - print_block_set(routing->cont.reachable); - printf("\n"); - } - - struct routes *routing_backup = rzalloc(mem_ctx, struct routes); - *routing_backup = *routing; - bool break_needed = false; - bool continue_needed = false; - - set_foreach(reach, entry) { - if (_mesa_set_search(loop_path.reachable, entry->key)) - continue; - if (_mesa_set_search(routing->regular.reachable, entry->key)) - continue; - if (_mesa_set_search(routing->brk.reachable, entry->key)) { - break_needed = true; - continue; - } - assert(_mesa_set_search(routing->cont.reachable, entry->key)); - continue_needed = true; - } - - routing->brk = routing_backup->regular; - routing->cont = loop_path; - routing->regular = loop_path; - routing->loop_backup = routing_backup; - - if (break_needed) { - struct path_fork *fork = rzalloc(mem_ctx, struct path_fork); - fork->is_var = true; - fork->path_var = nir_local_variable_create(b->impl, glsl_bool_type(), - "path_break"); - fork->paths[0] = routing->brk; - fork->paths[1] = routing_backup->brk; - routing->brk.fork = fork; - routing->brk.reachable = fork_reachable(fork); - } - if (continue_needed) { - struct path_fork *fork = rzalloc(mem_ctx, struct path_fork); - fork->is_var = true; - fork->path_var = nir_local_variable_create(b->impl, glsl_bool_type(), - "path_continue"); - fork->paths[0] = routing->brk; - fork->paths[1] = routing_backup->cont; - routing->brk.fork = fork; - routing->brk.reachable = fork_reachable(fork); - } - nir_push_loop(b); -} - -/** - * Gets a forks condition as ssa def if the condition is inside a helper var, - * the variable will be read into an ssa def - */ -static nir_ssa_def * -fork_condition(nir_builder *b, struct path_fork *fork) -{ - nir_ssa_def *ret; - if (fork->is_var) { - ret = nir_load_var(b, fork->path_var); - } - else - ret = fork->path_ssa; - return ret; -} - -/** - * Restores the routing after leaving a loop based on the loop_backup stack. - * Also handles multi level jump helper vars if existing and calls the nir - * builder to pop the nir loop - */ -static void -loop_routing_end(struct routes *routing, nir_builder *b) -{ - struct routes *routing_backup = routing->loop_backup; - assert(routing->cont.fork == routing->regular.fork); - assert(routing->cont.reachable == routing->regular.reachable); - nir_pop_loop(b, NULL); - if (routing->brk.fork && routing->brk.fork->paths[1].reachable == - routing_backup->cont.reachable) { - assert(!(routing->brk.fork->is_var && - strcmp(routing->brk.fork->path_var->name, "path_continue"))); - nir_push_if_src(b, nir_src_for_ssa( - fork_condition(b, routing->brk.fork))); - nir_jump(b, nir_jump_continue); - nir_pop_if(b, NULL); - routing->brk = routing->brk.fork->paths[0]; - } - if (routing->brk.fork && routing->brk.fork->paths[1].reachable == - routing_backup->brk.reachable) { - assert(!(routing->brk.fork->is_var && - strcmp(routing->brk.fork->path_var->name, "path_break"))); - nir_push_if_src(b, nir_src_for_ssa( - fork_condition(b, routing->brk.fork))); - nir_jump(b, nir_jump_break); - nir_pop_if(b, NULL); - routing->brk = routing->brk.fork->paths[0]; - } - assert(routing->brk.fork == routing_backup->regular.fork); - assert(routing->brk.reachable == routing_backup->regular.reachable); - *routing = *routing_backup; - ralloc_free(routing_backup); -} - -/** - * generates a list of all blocks dominated by the loop header, but the - * control flow can't go back to the loop header from the block. - * also generates a list of all blocks that can be reached from within the - * loop - * | __ - * A´ \ - * | \ \ - * B C-´ - * / - * D - * here B and C are directly dominated by A but only C can reach back to the - * loop head A. B will be added to the outside set and to the reach set. - * \param loop_heads set of loop heads. All blocks inside the loop will be - * added to this set - * \param outside all blocks directly outside the loop will be added - * \param reach all blocks reachable from the loop will be added - */ -static void -inside_outside(nir_block *block, struct set *loop_heads, struct set *outside, - struct set *reach, struct set *brk_reachable, void *mem_ctx) -{ - assert(_mesa_set_search(loop_heads, block)); - struct set *remaining = _mesa_pointer_set_create(mem_ctx); - for (int i = 0; i < block->num_dom_children; i++) { - if (!_mesa_set_search(brk_reachable, block->dom_children[i])) - _mesa_set_add(remaining, block->dom_children[i]); - } - - - if (NIR_LOWER_GOTO_IFS_DEBUG) { - printf("inside_outside(%u):\n", block->index); - printf(" loop_heads = "); - print_block_set(loop_heads); - printf(" reach = "); - print_block_set(reach); - printf(" brk_reach = "); - print_block_set(brk_reachable); - printf(" remaining = "); - print_block_set(remaining); - printf("\n"); - } - - bool progress = true; - while (remaining->entries && progress) { - progress = false; - set_foreach(remaining, child_entry) { - nir_block *dom_child = (nir_block *) child_entry->key; - bool can_jump_back = false; - set_foreach(dom_child->dom_frontier, entry) { - if (entry->key == dom_child) - continue; - if (_mesa_set_search_pre_hashed(remaining, entry->hash, - entry->key)) { - can_jump_back = true; - break; - } - if (_mesa_set_search_pre_hashed(loop_heads, entry->hash, - entry->key)) { - can_jump_back = true; - break; - } - } - if (!can_jump_back) { - _mesa_set_add_pre_hashed(outside, child_entry->hash, - child_entry->key); - _mesa_set_remove(remaining, child_entry); - progress = true; - } - } - } - - /* Add everything remaining to loop_heads */ - set_foreach(remaining, entry) - _mesa_set_add_pre_hashed(loop_heads, entry->hash, entry->key); - - /* Recurse for each remaining */ - set_foreach(remaining, entry) { - inside_outside((nir_block *) entry->key, loop_heads, outside, reach, - brk_reachable, mem_ctx); - } - - for (int i = 0; i < 2; i++) { - if (block->successors[i] && block->successors[i]->successors[0] && - !_mesa_set_search(loop_heads, block->successors[i])) { - _mesa_set_add(reach, block->successors[i]); - } - } - - if (NIR_LOWER_GOTO_IFS_DEBUG) { - printf("outside(%u) = ", block->index); - print_block_set(outside); - printf("reach(%u) = ", block->index); - print_block_set(reach); - } -} - -static struct path_fork * -select_fork_recur(struct nir_block **blocks, unsigned start, unsigned end, - nir_function_impl *impl, bool need_var, void *mem_ctx) -{ - if (start == end - 1) - return NULL; - - struct path_fork *fork = rzalloc(mem_ctx, struct path_fork); - fork->is_var = need_var; - if (need_var) - fork->path_var = nir_local_variable_create(impl, glsl_bool_type(), - "path_select"); - - unsigned mid = start + (end - start) / 2; - - fork->paths[0].reachable = _mesa_pointer_set_create(fork); - for (unsigned i = start; i < mid; i++) - _mesa_set_add(fork->paths[0].reachable, blocks[i]); - fork->paths[0].fork = - select_fork_recur(blocks, start, mid, impl, need_var, mem_ctx); - - fork->paths[1].reachable = _mesa_pointer_set_create(fork); - for (unsigned i = mid; i < end; i++) - _mesa_set_add(fork->paths[1].reachable, blocks[i]); - fork->paths[1].fork = - select_fork_recur(blocks, mid, end, impl, need_var, mem_ctx); - - return fork; -} - -/** - * Gets a set of blocks organized into the same level by the organize_levels - * function and creates enough forks to be able to route to them. - * If the set only contains one block, the function has nothing to do. - * The set should almost never contain more than two blocks, but if so, - * then the function calls itself recursively - */ -static struct path_fork * -select_fork(struct set *reachable, nir_function_impl *impl, bool need_var, - void *mem_ctx) -{ - assert(reachable->entries > 0); - if (reachable->entries <= 1) - return NULL; - - /* Hash set ordering is non-deterministic. We're about to turn a set into - * a tree so we really want things to be in a deterministic ordering. - */ - return select_fork_recur(sorted_block_arr_for_set(reachable, mem_ctx), - 0, reachable->entries, impl, need_var, mem_ctx); -} - -/** - * gets called when the organize_levels functions fails to find blocks that - * can't be reached by the other remaining blocks. This means, at least two - * dominance sibling blocks can reach each other. So we have a multi entry - * loop. This function tries to find the smallest possible set of blocks that - * must be part of the multi entry loop. - * example cf: | | - * A<---B - * / \__,^ \ - * \ / - * \ / - * C - * The function choses a random block as candidate. for example C - * The function checks which remaining blocks can reach C, in this case A. - * So A becomes the new candidate and C is removed from the result set. - * B can reach A. - * So B becomes the new candidate and A is removed from the set. - * A can reach B. - * A was an old candidate. So it is added to the set containing B. - * No other remaining blocks can reach A or B. - * So only A and B must be part of the multi entry loop. - */ -static void -handle_irreducible(struct set *remaining, struct strct_lvl *curr_level, - struct set *brk_reachable, void *mem_ctx) -{ - nir_block *candidate = (nir_block *) - _mesa_set_next_entry(remaining, NULL)->key; - struct set *old_candidates = _mesa_pointer_set_create(mem_ctx); - while (candidate) { - _mesa_set_add(old_candidates, candidate); - - /* Start with just the candidate block */ - _mesa_set_clear(curr_level->blocks, NULL); - _mesa_set_add(curr_level->blocks, candidate); - - candidate = NULL; - set_foreach(remaining, entry) { - nir_block *remaining_block = (nir_block *) entry->key; - if (!_mesa_set_search(curr_level->blocks, remaining_block) && - _mesa_set_intersects(remaining_block->dom_frontier, - curr_level->blocks)) { - if (_mesa_set_search(old_candidates, remaining_block)) { - _mesa_set_add(curr_level->blocks, remaining_block); - } else { - candidate = remaining_block; - break; - } - } - } - } - _mesa_set_destroy(old_candidates, NULL); - old_candidates = NULL; - - struct set *loop_heads = _mesa_set_clone(curr_level->blocks, curr_level); - curr_level->reach = _mesa_pointer_set_create(curr_level); - set_foreach(curr_level->blocks, entry) { - _mesa_set_remove_key(remaining, entry->key); - inside_outside((nir_block *) entry->key, loop_heads, remaining, - curr_level->reach, brk_reachable, mem_ctx); - } - _mesa_set_destroy(loop_heads, NULL); -} - -/** - * organize a set of blocks into a list of levels. Where every level contains - * one or more blocks. So that every block is before all blocks it can reach. - * Also creates all path variables needed, for the control flow between the - * block. - * For example if the control flow looks like this: - * A - * / | - * B C - * | / \ - * E | - * \ / - * F - * B, C, E and F are dominance children of A - * The level list should look like this: - * blocks irreducible conditional - * level 0 B, C false false - * level 1 E false true - * level 2 F false false - * The final structure should look like this: - * A - * if (path_select) { - * B - * } else { - * C - * } - * if (path_conditional) { - * E - * } - * F - * - * \param levels uninitialized list - * \param is_dominated if true, no helper variables will be created for the - * zeroth level - */ -static void -organize_levels(struct list_head *levels, struct set *remaining, - struct set *reach, struct routes *routing, - nir_function_impl *impl, bool is_domminated, void *mem_ctx) -{ - if (NIR_LOWER_GOTO_IFS_DEBUG) { - printf("organize_levels:\n"); - printf(" reach = "); - print_block_set(reach); - } - - /* blocks that can be reached by the remaining blocks */ - struct set *remaining_frontier = _mesa_pointer_set_create(mem_ctx); - - /* targets of active skip path */ - struct set *skip_targets = _mesa_pointer_set_create(mem_ctx); - - list_inithead(levels); - while (remaining->entries) { - _mesa_set_clear(remaining_frontier, NULL); - set_foreach(remaining, entry) { - nir_block *remain_block = (nir_block *) entry->key; - set_foreach(remain_block->dom_frontier, frontier_entry) { - nir_block *frontier = (nir_block *) frontier_entry->key; - if (frontier != remain_block) { - _mesa_set_add(remaining_frontier, frontier); - } - } - } - - struct strct_lvl *curr_level = rzalloc(mem_ctx, struct strct_lvl); - curr_level->blocks = _mesa_pointer_set_create(curr_level); - set_foreach(remaining, entry) { - nir_block *candidate = (nir_block *) entry->key; - if (!_mesa_set_search(remaining_frontier, candidate)) { - _mesa_set_add(curr_level->blocks, candidate); - _mesa_set_remove_key(remaining, candidate); - } - } - - curr_level->irreducible = !curr_level->blocks->entries; - if (curr_level->irreducible) { - handle_irreducible(remaining, curr_level, - routing->brk.reachable, mem_ctx); - } - assert(curr_level->blocks->entries); - - struct strct_lvl *prev_level = NULL; - if (!list_is_empty(levels)) - prev_level = list_last_entry(levels, struct strct_lvl, link); - - set_foreach(skip_targets, entry) { - if (_mesa_set_search_pre_hashed(curr_level->blocks, - entry->hash, entry->key)) { - _mesa_set_remove(skip_targets, entry); - prev_level->skip_end = 1; - } - } - curr_level->skip_start = skip_targets->entries != 0; - - struct set *prev_frontier = NULL; - if (!prev_level) { - prev_frontier = _mesa_set_clone(reach, curr_level); - } else if (prev_level->irreducible) { - prev_frontier = _mesa_set_clone(prev_level->reach, curr_level); - } - - set_foreach(curr_level->blocks, blocks_entry) { - nir_block *level_block = (nir_block *) blocks_entry->key; - if (prev_frontier == NULL) { - prev_frontier = - _mesa_set_clone(level_block->dom_frontier, curr_level); - } else { - set_foreach(level_block->dom_frontier, entry) - _mesa_set_add_pre_hashed(prev_frontier, entry->hash, - entry->key); - } - } - - bool is_in_skip = skip_targets->entries != 0; - set_foreach(prev_frontier, entry) { - if (_mesa_set_search(remaining, entry->key) || - (_mesa_set_search(routing->regular.reachable, entry->key) && - !_mesa_set_search(routing->brk.reachable, entry->key) && - !_mesa_set_search(routing->cont.reachable, entry->key))) { - _mesa_set_add_pre_hashed(skip_targets, entry->hash, entry->key); - if (is_in_skip) - prev_level->skip_end = 1; - curr_level->skip_start = 1; - } - } - - curr_level->skip_end = 0; - list_addtail(&curr_level->link, levels); - } - - if (NIR_LOWER_GOTO_IFS_DEBUG) { - printf(" levels:\n"); - list_for_each_entry(struct strct_lvl, level, levels, link) { - printf(" "); - print_block_set(level->blocks); - } - printf("\n"); - } - - if (skip_targets->entries) - list_last_entry(levels, struct strct_lvl, link)->skip_end = 1; - - /* Iterate throught all levels reverse and create all the paths and forks */ - struct path path_after_skip; - - list_for_each_entry_rev(struct strct_lvl, level, levels, link) { - bool need_var = !(is_domminated && level->link.prev == levels); - level->out_path = routing->regular; - if (level->skip_end) { - path_after_skip = routing->regular; - } - routing->regular.reachable = level->blocks; - routing->regular.fork = select_fork(routing->regular.reachable, impl, - need_var, mem_ctx); - if (level->skip_start) { - struct path_fork *fork = rzalloc(mem_ctx, struct path_fork); - fork->is_var = need_var; - if (need_var) - fork->path_var = nir_local_variable_create(impl, glsl_bool_type(), - "path_conditional"); - fork->paths[0] = path_after_skip; - fork->paths[1] = routing->regular; - routing->regular.fork = fork; - routing->regular.reachable = fork_reachable(fork); - } - } -} - -static void -nir_structurize(struct routes *routing, nir_builder *b, - nir_block *block, void *mem_ctx); - -/** - * Places all the if else statements to select between all blocks in a select - * path - */ -static void -select_blocks(struct routes *routing, nir_builder *b, - struct path in_path, void *mem_ctx) -{ - if (!in_path.fork) { - nir_block *block = block_for_singular_set(in_path.reachable); - nir_structurize(routing, b, block, mem_ctx); - } else { - assert(!(in_path.fork->is_var && - strcmp(in_path.fork->path_var->name, "path_select"))); - nir_push_if_src(b, nir_src_for_ssa(fork_condition(b, in_path.fork))); - select_blocks(routing, b, in_path.fork->paths[1], mem_ctx); - nir_push_else(b, NULL); - select_blocks(routing, b, in_path.fork->paths[0], mem_ctx); - nir_pop_if(b, NULL); - } -} - -/** - * Builds the structurized nir code by the final level list. - */ -static void -plant_levels(struct list_head *levels, struct routes *routing, - nir_builder *b, void *mem_ctx) -{ - /* Place all dominated blocks and build the path forks */ - list_for_each_entry(struct strct_lvl, level, levels, link) { - if (level->skip_start) { - assert(routing->regular.fork); - assert(!(routing->regular.fork->is_var && strcmp( - routing->regular.fork->path_var->name, "path_conditional"))); - nir_push_if_src(b, nir_src_for_ssa( - fork_condition(b, routing->regular.fork))); - routing->regular = routing->regular.fork->paths[1]; - } - struct path in_path = routing->regular; - routing->regular = level->out_path; - if (level->irreducible) - loop_routing_start(routing, b, in_path, level->reach, mem_ctx); - select_blocks(routing, b, in_path, mem_ctx); - if (level->irreducible) - loop_routing_end(routing, b); - if (level->skip_end) - nir_pop_if(b, NULL); - } -} - -/** - * builds the control flow of a block and all its dominance children - * \param routing the routing after the block and all dominated blocks - */ -static void -nir_structurize(struct routes *routing, nir_builder *b, nir_block *block, - void *mem_ctx) -{ - struct set *remaining = _mesa_pointer_set_create(mem_ctx); - for (int i = 0; i < block->num_dom_children; i++) { - if (!_mesa_set_search(routing->brk.reachable, block->dom_children[i])) - _mesa_set_add(remaining, block->dom_children[i]); - } - - /* If the block can reach back to itself, it is a loop head */ - int is_looped = _mesa_set_search(block->dom_frontier, block) != NULL; - struct list_head outside_levels; - if (is_looped) { - struct set *loop_heads = _mesa_pointer_set_create(mem_ctx); - _mesa_set_add(loop_heads, block); - - struct set *outside = _mesa_pointer_set_create(mem_ctx); - struct set *reach = _mesa_pointer_set_create(mem_ctx); - inside_outside(block, loop_heads, outside, reach, - routing->brk.reachable, mem_ctx); - - set_foreach(outside, entry) - _mesa_set_remove_key(remaining, entry->key); - - organize_levels(&outside_levels, outside, reach, routing, b->impl, - false, mem_ctx); - - struct path loop_path = { - .reachable = _mesa_pointer_set_create(mem_ctx), - .fork = NULL, - }; - _mesa_set_add(loop_path.reachable, block); - - loop_routing_start(routing, b, loop_path, reach, mem_ctx); - } - - struct set *reach = _mesa_pointer_set_create(mem_ctx); - if (block->successors[0]->successors[0]) /* it is not the end_block */ - _mesa_set_add(reach, block->successors[0]); - if (block->successors[1] && block->successors[1]->successors[0]) - _mesa_set_add(reach, block->successors[1]); - - struct list_head levels; - organize_levels(&levels, remaining, reach, routing, b->impl, true, mem_ctx); - - /* Push all instructions of this block, without the jump instr */ - nir_jump_instr *jump_instr = NULL; - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_jump) { - jump_instr = nir_instr_as_jump(instr); - break; - } - nir_instr_remove(instr); - nir_builder_instr_insert(b, instr); - } - - /* Find path to the successor blocks */ - if (jump_instr->type == nir_jump_goto_if) { - route_to_cond(b, routing, jump_instr->condition, - jump_instr->target, jump_instr->else_target); - } else { - route_to(b, routing, block->successors[0]); - } - - plant_levels(&levels, routing, b, mem_ctx); - if (is_looped) { - loop_routing_end(routing, b); - plant_levels(&outside_levels, routing, b, mem_ctx); - } -} - -static bool -nir_lower_goto_ifs_impl(nir_function_impl *impl) -{ - if (impl->structured) { - nir_metadata_preserve(impl, nir_metadata_all); - return false; - } - - nir_metadata_require(impl, nir_metadata_dominance); - - /* We're going to re-arrange blocks like crazy. This is much easier to do - * if we don't have any phi nodes to fix up. - */ - nir_foreach_block_unstructured(block, impl) - nir_lower_phis_to_regs_block(block); - - nir_cf_list cf_list; - nir_cf_extract(&cf_list, nir_before_cf_list(&impl->body), - nir_after_cf_list(&impl->body)); - - /* From this point on, it's structured */ - impl->structured = true; - - nir_builder b; - nir_builder_init(&b, impl); - b.cursor = nir_before_block(nir_start_block(impl)); - - void *mem_ctx = ralloc_context(b.shader); - - struct set *end_set = _mesa_pointer_set_create(mem_ctx); - _mesa_set_add(end_set, impl->end_block); - struct set *empty_set = _mesa_pointer_set_create(mem_ctx); - - nir_cf_node *start_node = - exec_node_data(nir_cf_node, exec_list_get_head(&cf_list.list), node); - nir_block *start_block = nir_cf_node_as_block(start_node); - - struct routes *routing = rzalloc(mem_ctx, struct routes); - *routing = (struct routes) { - .regular.reachable = end_set, - .brk.reachable = empty_set, - .cont.reachable = empty_set, - }; - nir_structurize(routing, &b, start_block, mem_ctx); - assert(routing->regular.fork == NULL); - assert(routing->brk.fork == NULL); - assert(routing->cont.fork == NULL); - assert(routing->brk.reachable == empty_set); - assert(routing->cont.reachable == empty_set); - - ralloc_free(mem_ctx); - nir_cf_delete(&cf_list); - - nir_metadata_preserve(impl, nir_metadata_none); - - nir_repair_ssa_impl(impl); - nir_lower_regs_to_ssa_impl(impl); - - return true; -} - -bool -nir_lower_goto_ifs(nir_shader *shader) -{ - bool progress = true; - - nir_foreach_function(function, shader) { - if (function->impl && nir_lower_goto_ifs_impl(function->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_gs_intrinsics.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_gs_intrinsics.c deleted file mode 100644 index b07feee..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_gs_intrinsics.c +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_xfb_info.h" - -/** - * \file nir_lower_gs_intrinsics.c - * - * Geometry Shaders can call EmitVertex()/EmitStreamVertex() to output an - * arbitrary number of vertices. However, the shader must declare the maximum - * number of vertices that it will ever output - further attempts to emit - * vertices result in undefined behavior according to the GLSL specification. - * - * Drivers might use this maximum number of vertices to allocate enough space - * to hold the geometry shader's output. Some drivers (such as i965) need to - * implement "safety checks" which ensure that the shader hasn't emitted too - * many vertices, to avoid overflowing that space and trashing other memory. - * - * The count of emitted vertices can also be useful in buffer offset - * calculations, so drivers know where to write the GS output. - * - * However, for simple geometry shaders that emit a statically determinable - * number of vertices, this extra bookkeeping is unnecessary and inefficient. - * By tracking the vertex count in NIR, we allow constant folding/propagation - * and dead control flow optimizations to eliminate most of it where possible. - * - * This pass introduces a new global variable which stores the current vertex - * count (initialized to 0), and converts emit_vertex/end_primitive intrinsics - * to their *_with_counter variants. emit_vertex is also wrapped in a safety - * check to avoid buffer overflows. Finally, it adds a set_vertex_count - * intrinsic at the end of the program, informing the driver of the final - * vertex count. - */ - -struct state { - nir_builder *builder; - nir_variable *vertex_count_vars[NIR_MAX_XFB_STREAMS]; - nir_variable *vtxcnt_per_prim_vars[NIR_MAX_XFB_STREAMS]; - nir_variable *primitive_count_vars[NIR_MAX_XFB_STREAMS]; - bool per_stream; - bool count_prims; - bool count_vtx_per_prim; - bool overwrite_incomplete; - bool is_points; - bool progress; -}; - -/** - * Replace emit_vertex intrinsics with: - * - * if (vertex_count < max_vertices) { - * emit_vertex_with_counter vertex_count, vertex_count_per_primitive (optional) ... - * vertex_count += 1 - * vertex_count_per_primitive += 1 - * } - */ -static void -rewrite_emit_vertex(nir_intrinsic_instr *intrin, struct state *state) -{ - nir_builder *b = state->builder; - unsigned stream = nir_intrinsic_stream_id(intrin); - - /* Load the vertex count */ - b->cursor = nir_before_instr(&intrin->instr); - assert(state->vertex_count_vars[stream] != NULL); - nir_ssa_def *count = nir_load_var(b, state->vertex_count_vars[stream]); - nir_ssa_def *count_per_primitive; - - if (state->count_vtx_per_prim) - count_per_primitive = nir_load_var(b, state->vtxcnt_per_prim_vars[stream]); - else if (state->is_points) - count_per_primitive = nir_imm_int(b, 0); - else - count_per_primitive = nir_ssa_undef(b, 1, 32); - - nir_ssa_def *max_vertices = - nir_imm_int(b, b->shader->info.gs.vertices_out); - - /* Create: if (vertex_count < max_vertices) and insert it. - * - * The new if statement needs to be hooked up to the control flow graph - * before we start inserting instructions into it. - */ - nir_push_if(b, nir_ilt(b, count, max_vertices)); - - nir_emit_vertex_with_counter(b, count, count_per_primitive, stream); - - /* Increment the vertex count by 1 */ - nir_store_var(b, state->vertex_count_vars[stream], - nir_iadd_imm(b, count, 1), - 0x1); /* .x */ - - if (state->count_vtx_per_prim) { - /* Increment the per-primitive vertex count by 1 */ - nir_variable *var = state->vtxcnt_per_prim_vars[stream]; - nir_ssa_def *vtx_per_prim_cnt = nir_load_var(b, var); - nir_store_var(b, var, - nir_iadd_imm(b, vtx_per_prim_cnt, 1), - 0x1); /* .x */ - } - - nir_pop_if(b, NULL); - - nir_instr_remove(&intrin->instr); - - state->progress = true; -} - -/** - * Emits code that overwrites incomplete primitives and their vertices. - * - * A primitive is considered incomplete when it doesn't have enough vertices. - * For example, a triangle strip that has 2 or fewer vertices, or a line strip - * with 1 vertex are considered incomplete. - * - * After each end_primitive and at the end of the shader before emitting - * set_vertex_and_primitive_count, we check if the primitive that is being - * emitted has enough vertices or not, and we adjust the vertex and primitive - * counters accordingly. - * - * This means that the following emit_vertex can reuse the vertex index of - * a previous vertex, if the previous primitive was incomplete, so the compiler - * backend is expected to simply overwrite any data that belonged to those. - */ -static void -overwrite_incomplete_primitives(struct state *state, unsigned stream) -{ - assert(state->count_vtx_per_prim); - - nir_builder *b = state->builder; - enum shader_prim outprim = b->shader->info.gs.output_primitive; - unsigned outprim_min_vertices; - - if (outprim == SHADER_PRIM_POINTS) - outprim_min_vertices = 1; - else if (outprim == SHADER_PRIM_LINE_STRIP) - outprim_min_vertices = 2; - else if (outprim == SHADER_PRIM_TRIANGLE_STRIP) - outprim_min_vertices = 3; - else - unreachable("Invalid GS output primitive type."); - - /* Total count of vertices emitted so far. */ - nir_ssa_def *vtxcnt_total = - nir_load_var(b, state->vertex_count_vars[stream]); - - /* Number of vertices emitted for the last primitive */ - nir_ssa_def *vtxcnt_per_primitive = - nir_load_var(b, state->vtxcnt_per_prim_vars[stream]); - - /* See if the current primitive is a incomplete */ - nir_ssa_def *is_inc_prim = - nir_ilt(b, vtxcnt_per_primitive, nir_imm_int(b, outprim_min_vertices)); - - /* Number of vertices in the incomplete primitive */ - nir_ssa_def *num_inc_vtx = - nir_bcsel(b, is_inc_prim, vtxcnt_per_primitive, nir_imm_int(b, 0)); - - /* Store corrected total vertex count */ - nir_store_var(b, state->vertex_count_vars[stream], - nir_isub(b, vtxcnt_total, num_inc_vtx), - 0x1); /* .x */ - - if (state->count_prims) { - /* Number of incomplete primitives (0 or 1) */ - nir_ssa_def *num_inc_prim = nir_b2i32(b, is_inc_prim); - - /* Store corrected primitive count */ - nir_ssa_def *prim_cnt = nir_load_var(b, state->primitive_count_vars[stream]); - nir_store_var(b, state->primitive_count_vars[stream], - nir_isub(b, prim_cnt, num_inc_prim), - 0x1); /* .x */ - } -} - -/** - * Replace end_primitive with end_primitive_with_counter. - */ -static void -rewrite_end_primitive(nir_intrinsic_instr *intrin, struct state *state) -{ - nir_builder *b = state->builder; - unsigned stream = nir_intrinsic_stream_id(intrin); - - b->cursor = nir_before_instr(&intrin->instr); - assert(state->vertex_count_vars[stream] != NULL); - nir_ssa_def *count = nir_load_var(b, state->vertex_count_vars[stream]); - nir_ssa_def *count_per_primitive; - - if (state->count_vtx_per_prim) - count_per_primitive = nir_load_var(b, state->vtxcnt_per_prim_vars[stream]); - else if (state->is_points) - count_per_primitive = nir_imm_int(b, 0); - else - count_per_primitive = nir_ssa_undef(b, count->num_components, count->bit_size); - - nir_end_primitive_with_counter(b, count, count_per_primitive, stream); - - if (state->count_prims) { - /* Increment the primitive count by 1 */ - nir_ssa_def *prim_cnt = nir_load_var(b, state->primitive_count_vars[stream]); - nir_store_var(b, state->primitive_count_vars[stream], - nir_iadd_imm(b, prim_cnt, 1), - 0x1); /* .x */ - } - - if (state->count_vtx_per_prim) { - if (state->overwrite_incomplete) - overwrite_incomplete_primitives(state, stream); - - /* Store 0 to per-primitive vertex count */ - nir_store_var(b, state->vtxcnt_per_prim_vars[stream], - nir_imm_int(b, 0), - 0x1); /* .x */ - } - - nir_instr_remove(&intrin->instr); - - state->progress = true; -} - -static bool -rewrite_intrinsics(nir_block *block, struct state *state) -{ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_emit_vertex: - case nir_intrinsic_emit_vertex_with_counter: - rewrite_emit_vertex(intrin, state); - break; - case nir_intrinsic_end_primitive: - case nir_intrinsic_end_primitive_with_counter: - rewrite_end_primitive(intrin, state); - break; - default: - /* not interesting; skip this */ - break; - } - } - - return true; -} - -/** - * Add a set_vertex_and_primitive_count intrinsic at the end of the program - * (representing the final total vertex and primitive count). - */ -static void -append_set_vertex_and_primitive_count(nir_block *end_block, struct state *state) -{ - nir_builder *b = state->builder; - nir_shader *shader = state->builder->shader; - - /* Insert the new intrinsic in all of the predecessors of the end block, - * but before any jump instructions (return). - */ - set_foreach(end_block->predecessors, entry) { - nir_block *pred = (nir_block *) entry->key; - b->cursor = nir_after_block_before_jump(pred); - - for (unsigned stream = 0; stream < NIR_MAX_XFB_STREAMS; ++stream) { - /* When it's not per-stream, we only need to write one variable. */ - if (!state->per_stream && stream != 0) - continue; - - nir_ssa_def *vtx_cnt; - nir_ssa_def *prim_cnt; - - if (state->per_stream && !(shader->info.gs.active_stream_mask & (1 << stream))) { - /* Inactive stream: vertex count is 0, primitive count is 0 or undef. */ - vtx_cnt = nir_imm_int(b, 0); - prim_cnt = state->count_prims || state->is_points - ? nir_imm_int(b, 0) - : nir_ssa_undef(b, 1, 32); - } else { - if (state->overwrite_incomplete) - overwrite_incomplete_primitives(state, stream); - - vtx_cnt = nir_load_var(b, state->vertex_count_vars[stream]); - - if (state->count_prims) - prim_cnt = nir_load_var(b, state->primitive_count_vars[stream]); - else if (state->is_points) - /* EndPrimitive does not affect primitive count for points, - * just use vertex count instead - */ - prim_cnt = vtx_cnt; - else - prim_cnt = nir_ssa_undef(b, 1, 32); - } - - nir_set_vertex_and_primitive_count(b, vtx_cnt, prim_cnt, stream); - state->progress = true; - } - } -} - -/** - * Check to see if there are any blocks that need set_vertex_and_primitive_count - * - * If every block that could need the set_vertex_and_primitive_count intrinsic - * already has one, there is nothing for this pass to do. - */ -static bool -a_block_needs_set_vertex_and_primitive_count(nir_block *end_block, bool per_stream) -{ - set_foreach(end_block->predecessors, entry) { - nir_block *pred = (nir_block *) entry->key; - - - for (unsigned stream = 0; stream < NIR_MAX_XFB_STREAMS; ++stream) { - /* When it's not per-stream, we only need to write one variable. */ - if (!per_stream && stream != 0) - continue; - - bool found = false; - - nir_foreach_instr_reverse(instr, pred) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - const nir_intrinsic_instr *const intrin = - nir_instr_as_intrinsic(instr); - - if (intrin->intrinsic == nir_intrinsic_set_vertex_and_primitive_count && - intrin->const_index[0] == stream) { - found = true; - break; - } - } - - if (!found) - return true; - } - } - - return false; -} - -bool -nir_lower_gs_intrinsics(nir_shader *shader, nir_lower_gs_intrinsics_flags options) -{ - bool per_stream = options & nir_lower_gs_intrinsics_per_stream; - bool count_primitives = options & nir_lower_gs_intrinsics_count_primitives; - bool overwrite_incomplete = options & nir_lower_gs_intrinsics_overwrite_incomplete; - bool count_vtx_per_prim = - overwrite_incomplete || - (options & nir_lower_gs_intrinsics_count_vertices_per_primitive); - - bool is_points = shader->info.gs.output_primitive == SHADER_PRIM_POINTS; - /* points are always complete primitives with a single vertex, so these are - * not needed when primitive is points. - */ - if (is_points) { - count_primitives = false; - overwrite_incomplete = false; - count_vtx_per_prim = false; - } - - struct state state; - state.progress = false; - state.count_prims = count_primitives; - state.count_vtx_per_prim = count_vtx_per_prim; - state.overwrite_incomplete = overwrite_incomplete; - state.per_stream = per_stream; - state.is_points = is_points; - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - assert(impl); - - if (!a_block_needs_set_vertex_and_primitive_count(impl->end_block, per_stream)) - return false; - - nir_builder b; - nir_builder_init(&b, impl); - state.builder = &b; - - b.cursor = nir_before_cf_list(&impl->body); - - for (unsigned i = 0; i < NIR_MAX_XFB_STREAMS; i++) { - if (per_stream && !(shader->info.gs.active_stream_mask & (1 << i))) - continue; - - if (i == 0 || per_stream) { - state.vertex_count_vars[i] = - nir_local_variable_create(impl, glsl_uint_type(), "vertex_count"); - /* initialize to 0 */ - nir_store_var(&b, state.vertex_count_vars[i], nir_imm_int(&b, 0), 0x1); - - if (count_primitives) { - state.primitive_count_vars[i] = - nir_local_variable_create(impl, glsl_uint_type(), "primitive_count"); - /* initialize to 1 */ - nir_store_var(&b, state.primitive_count_vars[i], nir_imm_int(&b, 1), 0x1); - } - if (count_vtx_per_prim) { - state.vtxcnt_per_prim_vars[i] = - nir_local_variable_create(impl, glsl_uint_type(), "vertices_per_primitive"); - /* initialize to 0 */ - nir_store_var(&b, state.vtxcnt_per_prim_vars[i], nir_imm_int(&b, 0), 0x1); - } - } else { - /* If per_stream is false, we only have one counter of each kind which we - * want to use for all streams. Duplicate the counter pointers so all - * streams use the same counters. - */ - state.vertex_count_vars[i] = state.vertex_count_vars[0]; - - if (count_primitives) - state.primitive_count_vars[i] = state.primitive_count_vars[0]; - if (count_vtx_per_prim) - state.vtxcnt_per_prim_vars[i] = state.vtxcnt_per_prim_vars[0]; - } - } - - nir_foreach_block_safe(block, impl) - rewrite_intrinsics(block, &state); - - /* This only works because we have a single main() function. */ - append_set_vertex_and_primitive_count(impl->end_block, &state); - - nir_metadata_preserve(impl, nir_metadata_none); - - return state.progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_helper_writes.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_helper_writes.c deleted file mode 100644 index 86769e9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_helper_writes.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2020-2021 Collabora, Ltd. - * Copyright © 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -lower(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - bool *lower_plain_stores = data; - - switch (intr->intrinsic) { - case nir_intrinsic_global_atomic_add: - case nir_intrinsic_global_atomic_and: - case nir_intrinsic_global_atomic_comp_swap: - case nir_intrinsic_global_atomic_exchange: - case nir_intrinsic_global_atomic_fadd: - case nir_intrinsic_global_atomic_fcomp_swap: - case nir_intrinsic_global_atomic_fmax: - case nir_intrinsic_global_atomic_fmin: - case nir_intrinsic_global_atomic_imax: - case nir_intrinsic_global_atomic_imin: - case nir_intrinsic_global_atomic_or: - case nir_intrinsic_global_atomic_umax: - case nir_intrinsic_global_atomic_umin: - case nir_intrinsic_global_atomic_xor: - case nir_intrinsic_image_atomic_add: - case nir_intrinsic_image_atomic_and: - case nir_intrinsic_image_atomic_comp_swap: - case nir_intrinsic_image_atomic_dec_wrap: - case nir_intrinsic_image_atomic_exchange: - case nir_intrinsic_image_atomic_fadd: - case nir_intrinsic_image_atomic_imax: - case nir_intrinsic_image_atomic_imin: - case nir_intrinsic_image_atomic_inc_wrap: - case nir_intrinsic_image_atomic_or: - case nir_intrinsic_image_atomic_umax: - case nir_intrinsic_image_atomic_umin: - case nir_intrinsic_image_atomic_xor: - break; - case nir_intrinsic_store_global: - case nir_intrinsic_image_store: - if (!(*lower_plain_stores)) - return false; - else - break; - default: - return false; - } - - b->cursor = nir_before_instr(instr); - bool has_dest = nir_intrinsic_infos[intr->intrinsic].has_dest; - nir_ssa_def *undef = NULL; - - nir_ssa_def *helper = nir_load_helper_invocation(b, 1); - nir_push_if(b, nir_inot(b, helper)); - nir_instr_remove(instr); - nir_builder_instr_insert(b, instr); - - /* Per the spec, it does not matter what we return for helper threads. - * Represent this by an ssa_undef in the hopes the backend will be clever - * enough to optimize out the phi. - * - * Fragment shader helper invocations execute the same shader code as - * non-helper invocations, but will not have side effects that modify the - * framebuffer or other shader-accessible memory. In particular: - * - * ... - * - * Atomic operations to image, buffer, or atomic counter variables - * performed by helper invocations have no effect on the underlying - * image or buffer memory. The values returned by such atomic - * operations are undefined. - */ - if (has_dest) { - nir_push_else(b, NULL); - undef = nir_ssa_undef(b, nir_dest_num_components(intr->dest), - nir_dest_bit_size(intr->dest)); - } - - nir_pop_if(b, NULL); - - if (has_dest) { - assert(intr->dest.is_ssa); - nir_ssa_def *phi = nir_if_phi(b, &intr->dest.ssa, undef); - - /* We can't use nir_ssa_def_rewrite_uses_after on phis, so use the global - * version and fixup the phi manually - */ - nir_ssa_def_rewrite_uses(&intr->dest.ssa, phi); - - nir_instr *phi_instr = phi->parent_instr; - nir_phi_instr *phi_as_phi = nir_instr_as_phi(phi_instr); - nir_phi_src *phi_src = nir_phi_get_src_from_block(phi_as_phi, - instr->block); - nir_instr_rewrite_src_ssa(phi->parent_instr, &phi_src->src, - &intr->dest.ssa); - } - - return true; -} - -bool -nir_lower_helper_writes(nir_shader *shader, bool lower_plain_stores) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - return nir_shader_instructions_pass(shader, lower, nir_metadata_none, - &lower_plain_stores); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_idiv.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_idiv.c deleted file mode 100644 index 7909ebe..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_idiv.c +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Rob Clark - */ - -#include "nir.h" -#include "nir_builder.h" - -/* ported from LLVM's AMDGPUTargetLowering::LowerUDIVREM */ -static nir_ssa_def * -emit_udiv(nir_builder *bld, nir_ssa_def *numer, nir_ssa_def *denom, bool modulo) -{ - nir_ssa_def *rcp = nir_frcp(bld, nir_u2f32(bld, denom)); - rcp = nir_f2u32(bld, nir_fmul_imm(bld, rcp, 4294966784.0)); - - nir_ssa_def *neg_rcp_times_denom = - nir_imul(bld, rcp, nir_ineg(bld, denom)); - rcp = nir_iadd(bld, rcp, nir_umul_high(bld, rcp, neg_rcp_times_denom)); - - /* Get initial estimate for quotient/remainder, then refine the estimate - * in two iterations after */ - nir_ssa_def *quotient = nir_umul_high(bld, numer, rcp); - nir_ssa_def *num_s_remainder = nir_imul(bld, quotient, denom); - nir_ssa_def *remainder = nir_isub(bld, numer, num_s_remainder); - - /* First refinement step */ - nir_ssa_def *remainder_ge_den = nir_uge(bld, remainder, denom); - if (!modulo) { - quotient = nir_bcsel(bld, remainder_ge_den, - nir_iadd_imm(bld, quotient, 1), quotient); - } - remainder = nir_bcsel(bld, remainder_ge_den, - nir_isub(bld, remainder, denom), remainder); - - /* Second refinement step */ - remainder_ge_den = nir_uge(bld, remainder, denom); - if (modulo) { - return nir_bcsel(bld, remainder_ge_den, nir_isub(bld, remainder, denom), - remainder); - } else { - return nir_bcsel(bld, remainder_ge_den, nir_iadd_imm(bld, quotient, 1), - quotient); - } -} - -/* ported from LLVM's AMDGPUTargetLowering::LowerSDIVREM */ -static nir_ssa_def * -emit_idiv(nir_builder *bld, nir_ssa_def *numer, nir_ssa_def *denom, nir_op op) -{ - nir_ssa_def *lh_sign = nir_ilt(bld, numer, nir_imm_int(bld, 0)); - nir_ssa_def *rh_sign = nir_ilt(bld, denom, nir_imm_int(bld, 0)); - - nir_ssa_def *lhs = nir_iabs(bld, numer); - nir_ssa_def *rhs = nir_iabs(bld, denom); - - if (op == nir_op_idiv) { - nir_ssa_def *d_sign = nir_ixor(bld, lh_sign, rh_sign); - nir_ssa_def *res = emit_udiv(bld, lhs, rhs, false); - return nir_bcsel(bld, d_sign, nir_ineg(bld, res), res); - } else { - nir_ssa_def *res = emit_udiv(bld, lhs, rhs, true); - res = nir_bcsel(bld, lh_sign, nir_ineg(bld, res), res); - if (op == nir_op_imod) { - nir_ssa_def *cond = nir_ieq_imm(bld, res, 0); - cond = nir_ior(bld, nir_ieq(bld, lh_sign, rh_sign), cond); - res = nir_bcsel(bld, cond, res, nir_iadd(bld, res, denom)); - } - return res; - } -} - -static nir_ssa_def * -convert_instr_small(nir_builder *b, nir_op op, - nir_ssa_def *numer, nir_ssa_def *denom, - const nir_lower_idiv_options *options) -{ - unsigned sz = numer->bit_size; - nir_alu_type int_type = nir_op_infos[op].output_type | sz; - nir_alu_type float_type = nir_type_float | (options->allow_fp16 ? sz * 2 : 32); - - nir_ssa_def *p = nir_type_convert(b, numer, int_type, float_type, nir_rounding_mode_undef); - nir_ssa_def *q = nir_type_convert(b, denom, int_type, float_type, nir_rounding_mode_undef); - - /* Take 1/q but offset mantissa by 1 to correct for rounding. This is - * needed for correct results and has been checked exhaustively for - * all pairs of 16-bit integers */ - nir_ssa_def *rcp = nir_iadd_imm(b, nir_frcp(b, q), 1); - - /* Divide by multiplying by adjusted reciprocal */ - nir_ssa_def *res = nir_fmul(b, p, rcp); - - /* Convert back to integer space with rounding inferred by type */ - res = nir_type_convert(b, res, float_type, int_type, nir_rounding_mode_undef); - - /* Get remainder given the quotient */ - if (op == nir_op_umod || op == nir_op_imod || op == nir_op_irem) - res = nir_isub(b, numer, nir_imul(b, denom, res)); - - /* Adjust for sign, see constant folding definition */ - if (op == nir_op_imod) { - nir_ssa_def *zero = nir_imm_zero(b, 1, sz); - nir_ssa_def *diff_sign = - nir_ine(b, nir_ige(b, numer, zero), nir_ige(b, denom, zero)); - - nir_ssa_def *adjust = nir_iand(b, diff_sign, nir_ine(b, res, zero)); - res = nir_iadd(b, res, nir_bcsel(b, adjust, denom, zero)); - } - - return res; -} - -static nir_ssa_def * -lower_idiv(nir_builder *b, nir_instr *instr, void *_data) -{ - const nir_lower_idiv_options *options = _data; - nir_alu_instr *alu = nir_instr_as_alu(instr); - - nir_ssa_def *numer = nir_ssa_for_alu_src(b, alu, 0); - nir_ssa_def *denom = nir_ssa_for_alu_src(b, alu, 1); - - b->exact = true; - - if (numer->bit_size < 32) - return convert_instr_small(b, alu->op, numer, denom, options); - else if (alu->op == nir_op_udiv || alu->op == nir_op_umod) - return emit_udiv(b, numer, denom, alu->op == nir_op_umod); - else - return emit_idiv(b, numer, denom, alu->op); -} - -static bool -inst_is_idiv(const nir_instr *instr, UNUSED const void *_state) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - - if (alu->dest.dest.ssa.bit_size > 32) - return false; - - switch (alu->op) { - case nir_op_idiv: - case nir_op_udiv: - case nir_op_imod: - case nir_op_umod: - case nir_op_irem: - return true; - default: - return false; - } -} - -bool -nir_lower_idiv(nir_shader *shader, const nir_lower_idiv_options *options) -{ - return nir_shader_lower_instructions(shader, - inst_is_idiv, - lower_idiv, - (void *)options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_image.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_image.c deleted file mode 100644 index de5c966..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_image.c +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright © 2021 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * This lowering pass supports (as configured via nir_lower_image_options) - * image related conversions: - * + cube array size lowering. The size operation is converted from cube - * size to a 2d-array with the z component divided by 6. - */ - -#include "nir.h" -#include "nir_builder.h" - -static void -lower_cube_size(nir_builder *b, nir_intrinsic_instr *intrin) -{ - assert(nir_intrinsic_image_dim(intrin) == GLSL_SAMPLER_DIM_CUBE); - - b->cursor = nir_before_instr(&intrin->instr); - - nir_intrinsic_instr *_2darray_size = - nir_instr_as_intrinsic(nir_instr_clone(b->shader, &intrin->instr)); - nir_intrinsic_set_image_dim(_2darray_size, GLSL_SAMPLER_DIM_2D); - nir_intrinsic_set_image_array(_2darray_size, true); - nir_builder_instr_insert(b, &_2darray_size->instr); - - nir_ssa_def *size = nir_instr_ssa_def(&_2darray_size->instr); - nir_ssa_scalar comps[NIR_MAX_VEC_COMPONENTS] = { 0 }; - unsigned coord_comps = intrin->dest.ssa.num_components; - for (unsigned c = 0; c < coord_comps; c++) { - if (c == 2) { - comps[2] = nir_get_ssa_scalar(nir_idiv(b, nir_channel(b, size, 2), nir_imm_int(b, 6)), 0); - } else { - comps[c] = nir_get_ssa_scalar(size, c); - } - } - - nir_ssa_def *vec = nir_vec_scalars(b, comps, intrin->dest.ssa.num_components); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, vec); - nir_instr_remove(&intrin->instr); - nir_instr_free(&intrin->instr); -} - -/* Adjust the sample index according to AMD FMASK (fragment mask). - * - * For uncompressed MSAA surfaces, FMASK should return 0x76543210, - * which is the identity mapping. Each nibble says which physical sample - * should be fetched to get that sample. - * - * For example, 0x11111100 means there are only 2 samples stored and - * the second sample covers 3/4 of the pixel. When reading samples 0 - * and 1, return physical sample 0 (determined by the first two 0s - * in FMASK), otherwise return physical sample 1. - * - * The sample index should be adjusted as follows: - * sample_index = ubfe(fmask, sample_index * 4, 3); - * - * Only extract 3 bits because EQAA can generate number 8 in FMASK, which - * means the physical sample index is unknown. We can map 8 to any valid - * sample index, and extracting only 3 bits will map it to 0, which works - * with all MSAA modes. - */ -static void -lower_image_to_fragment_mask_load(nir_builder *b, nir_intrinsic_instr *intrin) -{ - b->cursor = nir_before_instr(&intrin->instr); - - nir_intrinsic_op fmask_op; - switch (intrin->intrinsic) { - case nir_intrinsic_image_load: - fmask_op = nir_intrinsic_image_fragment_mask_load_amd; - break; - case nir_intrinsic_image_deref_load: - fmask_op = nir_intrinsic_image_deref_fragment_mask_load_amd; - break; - case nir_intrinsic_bindless_image_load: - fmask_op = nir_intrinsic_bindless_image_fragment_mask_load_amd; - break; - default: - unreachable("bad intrinsic"); - break; - } - - nir_ssa_def *fmask = - nir_image_fragment_mask_load_amd(b, intrin->src[0].ssa, intrin->src[1].ssa, - .image_dim = nir_intrinsic_image_dim(intrin), - .image_array = nir_intrinsic_image_array(intrin), - .format = nir_intrinsic_format(intrin), - .access = nir_intrinsic_access(intrin)); - - /* fix intrinsic op */ - nir_intrinsic_instr *fmask_load = nir_instr_as_intrinsic(fmask->parent_instr); - fmask_load->intrinsic = fmask_op; - - /* extract real color buffer index from fmask buffer */ - nir_ssa_def *sample_index_old = intrin->src[2].ssa; - nir_ssa_def *fmask_offset = nir_ishl_imm(b, sample_index_old, 2); - nir_ssa_def *fmask_width = nir_imm_int(b, 3); - nir_ssa_def *sample_index_new = nir_ubfe(b, fmask, fmask_offset, fmask_width); - - /* fix color buffer load */ - nir_instr_rewrite_src_ssa(&intrin->instr, &intrin->src[2], sample_index_new); - - /* Mark uses fmask to prevent lower this intrinsic again. */ - enum gl_access_qualifier access = nir_intrinsic_access(intrin); - nir_intrinsic_set_access(intrin, access | ACCESS_FMASK_LOWERED_AMD); -} - -static void -lower_image_samples_identical_to_fragment_mask_load(nir_builder *b, nir_intrinsic_instr *intrin) -{ - b->cursor = nir_before_instr(&intrin->instr); - - nir_intrinsic_instr *fmask_load = - nir_instr_as_intrinsic(nir_instr_clone(b->shader, &intrin->instr)); - - switch (intrin->intrinsic) { - case nir_intrinsic_image_samples_identical: - fmask_load->intrinsic = nir_intrinsic_image_fragment_mask_load_amd; - break; - case nir_intrinsic_image_deref_samples_identical: - fmask_load->intrinsic = nir_intrinsic_image_deref_fragment_mask_load_amd; - break; - case nir_intrinsic_bindless_image_samples_identical: - fmask_load->intrinsic = nir_intrinsic_bindless_image_fragment_mask_load_amd; - break; - default: - unreachable("bad intrinsic"); - break; - } - - nir_ssa_dest_init(&fmask_load->instr, &fmask_load->dest, 1, 32, NULL); - nir_builder_instr_insert(b, &fmask_load->instr); - - nir_ssa_def *samples_identical = nir_ieq_imm(b, &fmask_load->dest.ssa, 0); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, samples_identical); - - nir_instr_remove(&intrin->instr); - nir_instr_free(&intrin->instr); -} - -static bool -lower_image_instr(nir_builder *b, nir_instr *instr, void *state) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - const nir_lower_image_options *options = state; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_image_size: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_bindless_image_size: - if (options->lower_cube_size && - nir_intrinsic_image_dim(intrin) == GLSL_SAMPLER_DIM_CUBE) { - lower_cube_size(b, intrin); - return true; - } - return false; - - case nir_intrinsic_image_load: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_bindless_image_load: - if (options->lower_to_fragment_mask_load_amd && - nir_intrinsic_image_dim(intrin) == GLSL_SAMPLER_DIM_MS && - /* Don't lower again. */ - !(nir_intrinsic_access(intrin) & ACCESS_FMASK_LOWERED_AMD)) { - lower_image_to_fragment_mask_load(b, intrin); - return true; - } - return false; - - case nir_intrinsic_image_samples_identical: - case nir_intrinsic_image_deref_samples_identical: - case nir_intrinsic_bindless_image_samples_identical: - if (options->lower_to_fragment_mask_load_amd && - nir_intrinsic_image_dim(intrin) == GLSL_SAMPLER_DIM_MS) { - lower_image_samples_identical_to_fragment_mask_load(b, intrin); - return true; - } - return false; - - case nir_intrinsic_image_samples: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_bindless_image_samples: { - if (options->lower_image_samples_to_one) { - b->cursor = nir_after_instr(&intrin->instr); - nir_ssa_def *samples = nir_imm_intN_t(b, 1, nir_dest_bit_size(intrin->dest)); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, samples); - return true; - } - return false; - } - default: - return false; - } -} - -bool -nir_lower_image(nir_shader *nir, const nir_lower_image_options *options) -{ - return nir_shader_instructions_pass(nir, lower_image_instr, - nir_metadata_block_index | - nir_metadata_dominance, (void*)options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_indirect_derefs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_indirect_derefs.c deleted file mode 100644 index 65b5a99..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_indirect_derefs.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -static void -emit_load_store_deref(nir_builder *b, nir_intrinsic_instr *orig_instr, - nir_deref_instr *parent, - nir_deref_instr **deref_arr, - nir_ssa_def **dest, nir_ssa_def *src); - -static void -emit_indirect_load_store_deref(nir_builder *b, nir_intrinsic_instr *orig_instr, - nir_deref_instr *parent, - nir_deref_instr **deref_arr, - int start, int end, - nir_ssa_def **dest, nir_ssa_def *src) -{ - assert(start < end); - if (start == end - 1) { - emit_load_store_deref(b, orig_instr, - nir_build_deref_array_imm(b, parent, start), - deref_arr + 1, dest, src); - } else { - int mid = start + (end - start) / 2; - - nir_ssa_def *then_dest, *else_dest; - - nir_deref_instr *deref = *deref_arr; - assert(deref->deref_type == nir_deref_type_array); - - nir_push_if(b, nir_ilt(b, deref->arr.index.ssa, nir_imm_intN_t(b, mid, parent->dest.ssa.bit_size))); - emit_indirect_load_store_deref(b, orig_instr, parent, deref_arr, - start, mid, &then_dest, src); - nir_push_else(b, NULL); - emit_indirect_load_store_deref(b, orig_instr, parent, deref_arr, - mid, end, &else_dest, src); - nir_pop_if(b, NULL); - - if (src == NULL) - *dest = nir_if_phi(b, then_dest, else_dest); - } -} - -static void -emit_load_store_deref(nir_builder *b, nir_intrinsic_instr *orig_instr, - nir_deref_instr *parent, - nir_deref_instr **deref_arr, - nir_ssa_def **dest, nir_ssa_def *src) -{ - for (; *deref_arr; deref_arr++) { - nir_deref_instr *deref = *deref_arr; - if (deref->deref_type == nir_deref_type_array && - !nir_src_is_const(deref->arr.index)) { - int length = glsl_get_length(parent->type); - - emit_indirect_load_store_deref(b, orig_instr, parent, deref_arr, - 0, length, dest, src); - return; - } - - parent = nir_build_deref_follower(b, parent, deref); - } - - /* We reached the end of the deref chain. Emit the instruction */ - assert(*deref_arr == NULL); - - if (src == NULL) { - /* This is a load instruction */ - nir_intrinsic_instr *load = - nir_intrinsic_instr_create(b->shader, orig_instr->intrinsic); - load->num_components = orig_instr->num_components; - - load->src[0] = nir_src_for_ssa(&parent->dest.ssa); - - /* Copy over any other sources. This is needed for interp_deref_at */ - for (unsigned i = 1; - i < nir_intrinsic_infos[orig_instr->intrinsic].num_srcs; i++) - nir_src_copy(&load->src[i], &orig_instr->src[i], &load->instr); - - nir_ssa_dest_init(&load->instr, &load->dest, - orig_instr->dest.ssa.num_components, - orig_instr->dest.ssa.bit_size, NULL); - nir_builder_instr_insert(b, &load->instr); - *dest = &load->dest.ssa; - } else { - assert(orig_instr->intrinsic == nir_intrinsic_store_deref); - nir_store_deref(b, parent, src, nir_intrinsic_write_mask(orig_instr)); - } -} - -static bool -lower_indirect_derefs_block(nir_block *block, nir_builder *b, - nir_variable_mode modes, - const struct set *vars, - uint32_t max_lower_array_len) -{ - bool progress = false; - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_interp_deref_at_centroid && - intrin->intrinsic != nir_intrinsic_interp_deref_at_sample && - intrin->intrinsic != nir_intrinsic_interp_deref_at_offset && - intrin->intrinsic != nir_intrinsic_interp_deref_at_vertex && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - - /* Walk the deref chain back to the base and look for indirects */ - uint32_t indirect_array_len = 1; - bool has_indirect = false; - nir_deref_instr *base = deref; - while (base && base->deref_type != nir_deref_type_var) { - nir_deref_instr *parent = nir_deref_instr_parent(base); - if (base->deref_type == nir_deref_type_array && - !nir_src_is_const(base->arr.index)) { - indirect_array_len *= glsl_get_length(parent->type); - has_indirect = true; - } - - base = parent; - } - - if (!has_indirect || !base || indirect_array_len > max_lower_array_len) - continue; - - /* Only lower variables whose mode is in the mask, or compact - * array variables. (We can't handle indirects on tightly packed - * scalar arrays, so we need to lower them regardless.) - */ - if (!(modes & base->var->data.mode) && !base->var->data.compact) - continue; - - if (vars && !_mesa_set_search(vars, base->var)) - continue; - - b->cursor = nir_instr_remove(&intrin->instr); - - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - assert(path.path[0] == base); - - if (intrin->intrinsic == nir_intrinsic_store_deref) { - assert(intrin->src[1].is_ssa); - emit_load_store_deref(b, intrin, base, &path.path[1], - NULL, intrin->src[1].ssa); - } else { - nir_ssa_def *result; - emit_load_store_deref(b, intrin, base, &path.path[1], - &result, NULL); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, result); - } - - nir_deref_path_finish(&path); - - progress = true; - } - - return progress; -} - -static bool -lower_indirects_impl(nir_function_impl *impl, nir_variable_mode modes, - const struct set *vars, uint32_t max_lower_array_len) -{ - nir_builder builder; - nir_builder_init(&builder, impl); - bool progress = false; - - nir_foreach_block_safe(block, impl) { - progress |= lower_indirect_derefs_block(block, &builder, modes, vars, - max_lower_array_len); - } - - if (progress) - nir_metadata_preserve(impl, nir_metadata_none); - else - nir_metadata_preserve(impl, nir_metadata_all); - - return progress; -} - -/** Lowers indirect variable loads/stores to direct loads/stores. - * - * The pass works by replacing any indirect load or store with an if-ladder - * that does a binary search on the array index. - */ -bool -nir_lower_indirect_derefs(nir_shader *shader, nir_variable_mode modes, - uint32_t max_lower_array_len) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress = lower_indirects_impl(function->impl, modes, NULL, - max_lower_array_len) || progress; - } - } - - return progress; -} - -/** Lowers indirects on any variables in the given set */ -bool -nir_lower_indirect_var_derefs(nir_shader *shader, const struct set *vars) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress = lower_indirects_impl(function->impl, nir_var_uniform, - vars, UINT_MAX) || progress; - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_input_attachments.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_input_attachments.c deleted file mode 100644 index fcee163..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_input_attachments.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static nir_ssa_def * -load_frag_coord(nir_builder *b, const nir_input_attachment_options *options) -{ - if (options->use_fragcoord_sysval) - return nir_load_frag_coord(b); - - nir_variable *pos = - nir_find_variable_with_location(b->shader, nir_var_shader_in, - VARYING_SLOT_POS); - if (pos == NULL) { - pos = nir_variable_create(b->shader, nir_var_shader_in, - glsl_vec4_type(), NULL); - pos->data.location = VARYING_SLOT_POS; - } - /** - * From Vulkan spec: - * "The OriginLowerLeft execution mode must not be used; fragment entry - * points must declare OriginUpperLeft." - * - * So at this point origin_upper_left should be true - */ - assert(b->shader->info.fs.origin_upper_left == true); - - return nir_load_var(b, pos); -} - -static nir_ssa_def * -load_layer_id(nir_builder *b, const nir_input_attachment_options *options) -{ - if (options->use_layer_id_sysval) { - if (options->use_view_id_for_layer) - return nir_load_view_index(b); - else - return nir_load_layer_id(b); - } - - gl_varying_slot slot = options->use_view_id_for_layer ? - VARYING_SLOT_VIEW_INDEX : VARYING_SLOT_LAYER; - nir_variable *layer_id = - nir_find_variable_with_location(b->shader, nir_var_shader_in, slot); - - if (layer_id == NULL) { - layer_id = nir_variable_create(b->shader, nir_var_shader_in, - glsl_int_type(), NULL); - layer_id->data.location = slot; - layer_id->data.interpolation = INTERP_MODE_FLAT; - layer_id->data.driver_location = b->shader->num_inputs++; - } - - return nir_load_var(b, layer_id); -} - -static bool -try_lower_input_load(nir_builder *b, nir_intrinsic_instr *load, - const nir_input_attachment_options *options) -{ - nir_deref_instr *deref = nir_src_as_deref(load->src[0]); - assert(glsl_type_is_image(deref->type)); - - enum glsl_sampler_dim image_dim = glsl_get_sampler_dim(deref->type); - if (image_dim != GLSL_SAMPLER_DIM_SUBPASS && - image_dim != GLSL_SAMPLER_DIM_SUBPASS_MS) - return false; - - const bool multisampled = (image_dim == GLSL_SAMPLER_DIM_SUBPASS_MS); - - b->cursor = nir_instr_remove(&load->instr); - - nir_ssa_def *frag_coord = load_frag_coord(b, options); - frag_coord = nir_f2i32(b, frag_coord); - nir_ssa_def *offset = nir_ssa_for_src(b, load->src[1], 2); - nir_ssa_def *pos = nir_iadd(b, frag_coord, offset); - - nir_ssa_def *layer = load_layer_id(b, options); - nir_ssa_def *coord = - nir_vec3(b, nir_channel(b, pos, 0), nir_channel(b, pos, 1), layer); - - nir_tex_instr *tex = nir_tex_instr_create(b->shader, 3 + multisampled); - - tex->op = nir_texop_txf; - tex->sampler_dim = image_dim; - - tex->dest_type = - nir_get_nir_type_for_glsl_base_type(glsl_get_sampler_result_type(deref->type)); - tex->is_array = true; - tex->is_shadow = false; - tex->is_sparse = load->intrinsic == nir_intrinsic_image_deref_sparse_load; - - tex->texture_index = 0; - tex->sampler_index = 0; - - tex->src[0].src_type = nir_tex_src_texture_deref; - tex->src[0].src = nir_src_for_ssa(&deref->dest.ssa); - - tex->src[1].src_type = nir_tex_src_coord; - tex->src[1].src = nir_src_for_ssa(coord); - tex->coord_components = 3; - - tex->src[2].src_type = nir_tex_src_lod; - tex->src[2].src = nir_src_for_ssa(nir_imm_int(b, 0)); - - if (image_dim == GLSL_SAMPLER_DIM_SUBPASS_MS) { - tex->op = nir_texop_txf_ms; - tex->src[3].src_type = nir_tex_src_ms_index; - tex->src[3].src = load->src[2]; - } - - tex->texture_non_uniform = nir_intrinsic_access(load) & ACCESS_NON_UNIFORM; - - nir_ssa_dest_init(&tex->instr, &tex->dest, nir_tex_instr_dest_size(tex), 32, NULL); - nir_builder_instr_insert(b, &tex->instr); - - if (tex->is_sparse) { - unsigned load_result_size = load->dest.ssa.num_components - 1; - nir_component_mask_t load_result_mask = nir_component_mask(load_result_size); - nir_ssa_def *res = nir_channels( - b, &tex->dest.ssa, load_result_mask | 0x10); - - nir_ssa_def_rewrite_uses(&load->dest.ssa, res); - } else { - nir_ssa_def_rewrite_uses(&load->dest.ssa, - &tex->dest.ssa); - } - - return true; -} - -static bool -try_lower_input_texop(nir_builder *b, nir_tex_instr *tex, - const nir_input_attachment_options *options) -{ - nir_deref_instr *deref = nir_src_as_deref(tex->src[0].src); - - if (glsl_get_sampler_dim(deref->type) != GLSL_SAMPLER_DIM_SUBPASS_MS) - return false; - - b->cursor = nir_before_instr(&tex->instr); - - nir_ssa_def *frag_coord = load_frag_coord(b, options); - frag_coord = nir_f2i32(b, frag_coord); - - nir_ssa_def *layer = load_layer_id(b, options); - nir_ssa_def *coord = nir_vec3(b, nir_channel(b, frag_coord, 0), - nir_channel(b, frag_coord, 1), layer); - - tex->coord_components = 3; - - nir_instr_rewrite_src(&tex->instr, &tex->src[1].src, nir_src_for_ssa(coord)); - - return true; -} - -static bool -lower_input_attachments_instr(nir_builder *b, nir_instr *instr, void *_data) -{ - const nir_input_attachment_options *options = _data; - - switch (instr->type) { - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - - if (tex->op == nir_texop_fragment_mask_fetch_amd || - tex->op == nir_texop_fragment_fetch_amd) - return try_lower_input_texop(b, tex, options); - - return false; - } - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *load = nir_instr_as_intrinsic(instr); - - if (load->intrinsic == nir_intrinsic_image_deref_load || - load->intrinsic == nir_intrinsic_image_deref_sparse_load) - return try_lower_input_load(b, load, options); - - return false; - } - - default: - return false; - } -} - -bool -nir_lower_input_attachments(nir_shader *shader, - const nir_input_attachment_options *options) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - return nir_shader_instructions_pass(shader, lower_input_attachments_instr, - nir_metadata_block_index | - nir_metadata_dominance, - (void *)options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_int64.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_int64.c deleted file mode 100644 index 70bd5a2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_int64.c +++ /dev/null @@ -1,1389 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -#define COND_LOWER_OP(b, name, ...) \ - (b->shader->options->lower_int64_options & \ - nir_lower_int64_op_to_options_mask(nir_op_##name)) ? \ - lower_##name##64(b, __VA_ARGS__) : nir_##name(b, __VA_ARGS__) - -#define COND_LOWER_CMP(b, name, ...) \ - (b->shader->options->lower_int64_options & \ - nir_lower_int64_op_to_options_mask(nir_op_##name)) ? \ - lower_int64_compare(b, nir_op_##name, __VA_ARGS__) : \ - nir_##name(b, __VA_ARGS__) - -#define COND_LOWER_CAST(b, name, ...) \ - (b->shader->options->lower_int64_options & \ - nir_lower_int64_op_to_options_mask(nir_op_##name)) ? \ - lower_##name(b, __VA_ARGS__) : \ - nir_##name(b, __VA_ARGS__) - -static nir_ssa_def * -lower_b2i64(nir_builder *b, nir_ssa_def *x) -{ - return nir_pack_64_2x32_split(b, nir_b2i32(b, x), nir_imm_int(b, 0)); -} - -static nir_ssa_def * -lower_i2i8(nir_builder *b, nir_ssa_def *x) -{ - return nir_i2i8(b, nir_unpack_64_2x32_split_x(b, x)); -} - -static nir_ssa_def * -lower_i2i16(nir_builder *b, nir_ssa_def *x) -{ - return nir_i2i16(b, nir_unpack_64_2x32_split_x(b, x)); -} - - -static nir_ssa_def * -lower_i2i32(nir_builder *b, nir_ssa_def *x) -{ - return nir_unpack_64_2x32_split_x(b, x); -} - -static nir_ssa_def * -lower_i2i64(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *x32 = x->bit_size == 32 ? x : nir_i2i32(b, x); - return nir_pack_64_2x32_split(b, x32, nir_ishr_imm(b, x32, 31)); -} - -static nir_ssa_def * -lower_u2u8(nir_builder *b, nir_ssa_def *x) -{ - return nir_u2u8(b, nir_unpack_64_2x32_split_x(b, x)); -} - -static nir_ssa_def * -lower_u2u16(nir_builder *b, nir_ssa_def *x) -{ - return nir_u2u16(b, nir_unpack_64_2x32_split_x(b, x)); -} - -static nir_ssa_def * -lower_u2u32(nir_builder *b, nir_ssa_def *x) -{ - return nir_unpack_64_2x32_split_x(b, x); -} - -static nir_ssa_def * -lower_u2u64(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *x32 = x->bit_size == 32 ? x : nir_u2u32(b, x); - return nir_pack_64_2x32_split(b, x32, nir_imm_int(b, 0)); -} - -static nir_ssa_def * -lower_bcsel64(nir_builder *b, nir_ssa_def *cond, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - return nir_pack_64_2x32_split(b, nir_bcsel(b, cond, x_lo, y_lo), - nir_bcsel(b, cond, x_hi, y_hi)); -} - -static nir_ssa_def * -lower_inot64(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - - return nir_pack_64_2x32_split(b, nir_inot(b, x_lo), nir_inot(b, x_hi)); -} - -static nir_ssa_def * -lower_iand64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - return nir_pack_64_2x32_split(b, nir_iand(b, x_lo, y_lo), - nir_iand(b, x_hi, y_hi)); -} - -static nir_ssa_def * -lower_ior64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - return nir_pack_64_2x32_split(b, nir_ior(b, x_lo, y_lo), - nir_ior(b, x_hi, y_hi)); -} - -static nir_ssa_def * -lower_ixor64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - return nir_pack_64_2x32_split(b, nir_ixor(b, x_lo, y_lo), - nir_ixor(b, x_hi, y_hi)); -} - -static nir_ssa_def * -lower_ishl64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - /* Implemented as - * - * uint64_t lshift(uint64_t x, int c) - * { - * c %= 64; - * - * if (c == 0) return x; - * - * uint32_t lo = LO(x), hi = HI(x); - * - * if (c < 32) { - * uint32_t lo_shifted = lo << c; - * uint32_t hi_shifted = hi << c; - * uint32_t lo_shifted_hi = lo >> abs(32 - c); - * return pack_64(lo_shifted, hi_shifted | lo_shifted_hi); - * } else { - * uint32_t lo_shifted_hi = lo << abs(32 - c); - * return pack_64(0, lo_shifted_hi); - * } - * } - */ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - y = nir_iand_imm(b, y, 0x3f); - - nir_ssa_def *reverse_count = nir_iabs(b, nir_iadd(b, y, nir_imm_int(b, -32))); - nir_ssa_def *lo_shifted = nir_ishl(b, x_lo, y); - nir_ssa_def *hi_shifted = nir_ishl(b, x_hi, y); - nir_ssa_def *lo_shifted_hi = nir_ushr(b, x_lo, reverse_count); - - nir_ssa_def *res_if_lt_32 = - nir_pack_64_2x32_split(b, lo_shifted, - nir_ior(b, hi_shifted, lo_shifted_hi)); - nir_ssa_def *res_if_ge_32 = - nir_pack_64_2x32_split(b, nir_imm_int(b, 0), - nir_ishl(b, x_lo, reverse_count)); - - return nir_bcsel(b, nir_ieq_imm(b, y, 0), x, - nir_bcsel(b, nir_uge(b, y, nir_imm_int(b, 32)), - res_if_ge_32, res_if_lt_32)); -} - -static nir_ssa_def * -lower_ishr64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - /* Implemented as - * - * uint64_t arshift(uint64_t x, int c) - * { - * c %= 64; - * - * if (c == 0) return x; - * - * uint32_t lo = LO(x); - * int32_t hi = HI(x); - * - * if (c < 32) { - * uint32_t lo_shifted = lo >> c; - * uint32_t hi_shifted = hi >> c; - * uint32_t hi_shifted_lo = hi << abs(32 - c); - * return pack_64(hi_shifted, hi_shifted_lo | lo_shifted); - * } else { - * uint32_t hi_shifted = hi >> 31; - * uint32_t hi_shifted_lo = hi >> abs(32 - c); - * return pack_64(hi_shifted, hi_shifted_lo); - * } - * } - */ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - y = nir_iand_imm(b, y, 0x3f); - - nir_ssa_def *reverse_count = nir_iabs(b, nir_iadd(b, y, nir_imm_int(b, -32))); - nir_ssa_def *lo_shifted = nir_ushr(b, x_lo, y); - nir_ssa_def *hi_shifted = nir_ishr(b, x_hi, y); - nir_ssa_def *hi_shifted_lo = nir_ishl(b, x_hi, reverse_count); - - nir_ssa_def *res_if_lt_32 = - nir_pack_64_2x32_split(b, nir_ior(b, lo_shifted, hi_shifted_lo), - hi_shifted); - nir_ssa_def *res_if_ge_32 = - nir_pack_64_2x32_split(b, nir_ishr(b, x_hi, reverse_count), - nir_ishr(b, x_hi, nir_imm_int(b, 31))); - - return nir_bcsel(b, nir_ieq_imm(b, y, 0), x, - nir_bcsel(b, nir_uge(b, y, nir_imm_int(b, 32)), - res_if_ge_32, res_if_lt_32)); -} - -static nir_ssa_def * -lower_ushr64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - /* Implemented as - * - * uint64_t rshift(uint64_t x, int c) - * { - * c %= 64; - * - * if (c == 0) return x; - * - * uint32_t lo = LO(x), hi = HI(x); - * - * if (c < 32) { - * uint32_t lo_shifted = lo >> c; - * uint32_t hi_shifted = hi >> c; - * uint32_t hi_shifted_lo = hi << abs(32 - c); - * return pack_64(hi_shifted, hi_shifted_lo | lo_shifted); - * } else { - * uint32_t hi_shifted_lo = hi >> abs(32 - c); - * return pack_64(0, hi_shifted_lo); - * } - * } - */ - - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - y = nir_iand_imm(b, y, 0x3f); - - nir_ssa_def *reverse_count = nir_iabs(b, nir_iadd(b, y, nir_imm_int(b, -32))); - nir_ssa_def *lo_shifted = nir_ushr(b, x_lo, y); - nir_ssa_def *hi_shifted = nir_ushr(b, x_hi, y); - nir_ssa_def *hi_shifted_lo = nir_ishl(b, x_hi, reverse_count); - - nir_ssa_def *res_if_lt_32 = - nir_pack_64_2x32_split(b, nir_ior(b, lo_shifted, hi_shifted_lo), - hi_shifted); - nir_ssa_def *res_if_ge_32 = - nir_pack_64_2x32_split(b, nir_ushr(b, x_hi, reverse_count), - nir_imm_int(b, 0)); - - return nir_bcsel(b, nir_ieq_imm(b, y, 0), x, - nir_bcsel(b, nir_uge(b, y, nir_imm_int(b, 32)), - res_if_ge_32, res_if_lt_32)); -} - -static nir_ssa_def * -lower_iadd64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - nir_ssa_def *res_lo = nir_iadd(b, x_lo, y_lo); - nir_ssa_def *carry = nir_b2i32(b, nir_ult(b, res_lo, x_lo)); - nir_ssa_def *res_hi = nir_iadd(b, carry, nir_iadd(b, x_hi, y_hi)); - - return nir_pack_64_2x32_split(b, res_lo, res_hi); -} - -static nir_ssa_def * -lower_isub64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - nir_ssa_def *res_lo = nir_isub(b, x_lo, y_lo); - nir_ssa_def *borrow = nir_ineg(b, nir_b2i32(b, nir_ult(b, x_lo, y_lo))); - nir_ssa_def *res_hi = nir_iadd(b, nir_isub(b, x_hi, y_hi), borrow); - - return nir_pack_64_2x32_split(b, res_lo, res_hi); -} - -static nir_ssa_def * -lower_ineg64(nir_builder *b, nir_ssa_def *x) -{ - /* Since isub is the same number of instructions (with better dependencies) - * as iadd, subtraction is actually more efficient for ineg than the usual - * 2's complement "flip the bits and add one". - */ - return lower_isub64(b, nir_imm_int64(b, 0), x); -} - -static nir_ssa_def * -lower_iabs64(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *x_is_neg = nir_ilt(b, x_hi, nir_imm_int(b, 0)); - return nir_bcsel(b, x_is_neg, nir_ineg(b, x), x); -} - -static nir_ssa_def * -lower_int64_compare(nir_builder *b, nir_op op, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - switch (op) { - case nir_op_ieq: - return nir_iand(b, nir_ieq(b, x_hi, y_hi), nir_ieq(b, x_lo, y_lo)); - case nir_op_ine: - return nir_ior(b, nir_ine(b, x_hi, y_hi), nir_ine(b, x_lo, y_lo)); - case nir_op_ult: - return nir_ior(b, nir_ult(b, x_hi, y_hi), - nir_iand(b, nir_ieq(b, x_hi, y_hi), - nir_ult(b, x_lo, y_lo))); - case nir_op_ilt: - return nir_ior(b, nir_ilt(b, x_hi, y_hi), - nir_iand(b, nir_ieq(b, x_hi, y_hi), - nir_ult(b, x_lo, y_lo))); - break; - case nir_op_uge: - /* Lower as !(x < y) in the hopes of better CSE */ - return nir_inot(b, lower_int64_compare(b, nir_op_ult, x, y)); - case nir_op_ige: - /* Lower as !(x < y) in the hopes of better CSE */ - return nir_inot(b, lower_int64_compare(b, nir_op_ilt, x, y)); - default: - unreachable("Invalid comparison"); - } -} - -static nir_ssa_def * -lower_umax64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - return nir_bcsel(b, lower_int64_compare(b, nir_op_ult, x, y), y, x); -} - -static nir_ssa_def * -lower_imax64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - return nir_bcsel(b, lower_int64_compare(b, nir_op_ilt, x, y), y, x); -} - -static nir_ssa_def * -lower_umin64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - return nir_bcsel(b, lower_int64_compare(b, nir_op_ult, x, y), x, y); -} - -static nir_ssa_def * -lower_imin64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - return nir_bcsel(b, lower_int64_compare(b, nir_op_ilt, x, y), x, y); -} - -static nir_ssa_def * -lower_mul_2x32_64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, - bool sign_extend) -{ - nir_ssa_def *res_hi = sign_extend ? nir_imul_high(b, x, y) - : nir_umul_high(b, x, y); - - return nir_pack_64_2x32_split(b, nir_imul(b, x, y), res_hi); -} - -static nir_ssa_def * -lower_imul64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *y_lo = nir_unpack_64_2x32_split_x(b, y); - nir_ssa_def *y_hi = nir_unpack_64_2x32_split_y(b, y); - - nir_ssa_def *mul_lo = nir_umul_2x32_64(b, x_lo, y_lo); - nir_ssa_def *res_hi = nir_iadd(b, nir_unpack_64_2x32_split_y(b, mul_lo), - nir_iadd(b, nir_imul(b, x_lo, y_hi), - nir_imul(b, x_hi, y_lo))); - - return nir_pack_64_2x32_split(b, nir_unpack_64_2x32_split_x(b, mul_lo), - res_hi); -} - -static nir_ssa_def * -lower_mul_high64(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, - bool sign_extend) -{ - nir_ssa_def *x32[4], *y32[4]; - x32[0] = nir_unpack_64_2x32_split_x(b, x); - x32[1] = nir_unpack_64_2x32_split_y(b, x); - if (sign_extend) { - x32[2] = x32[3] = nir_ishr_imm(b, x32[1], 31); - } else { - x32[2] = x32[3] = nir_imm_int(b, 0); - } - - y32[0] = nir_unpack_64_2x32_split_x(b, y); - y32[1] = nir_unpack_64_2x32_split_y(b, y); - if (sign_extend) { - y32[2] = y32[3] = nir_ishr_imm(b, y32[1], 31); - } else { - y32[2] = y32[3] = nir_imm_int(b, 0); - } - - nir_ssa_def *res[8] = { NULL, }; - - /* Yes, the following generates a pile of code. However, we throw res[0] - * and res[1] away in the end and, if we're in the umul case, four of our - * eight dword operands will be constant zero and opt_algebraic will clean - * this up nicely. - */ - for (unsigned i = 0; i < 4; i++) { - nir_ssa_def *carry = NULL; - for (unsigned j = 0; j < 4; j++) { - /* The maximum values of x32[i] and y32[j] are UINT32_MAX so the - * maximum value of tmp is UINT32_MAX * UINT32_MAX. The maximum - * value that will fit in tmp is - * - * UINT64_MAX = UINT32_MAX << 32 + UINT32_MAX - * = UINT32_MAX * (UINT32_MAX + 1) + UINT32_MAX - * = UINT32_MAX * UINT32_MAX + 2 * UINT32_MAX - * - * so we're guaranteed that we can add in two more 32-bit values - * without overflowing tmp. - */ - nir_ssa_def *tmp = nir_umul_2x32_64(b, x32[i], y32[j]); - - if (res[i + j]) - tmp = nir_iadd(b, tmp, nir_u2u64(b, res[i + j])); - if (carry) - tmp = nir_iadd(b, tmp, carry); - res[i + j] = nir_u2u32(b, tmp); - carry = nir_ushr_imm(b, tmp, 32); - } - res[i + 4] = nir_u2u32(b, carry); - } - - return nir_pack_64_2x32_split(b, res[2], res[3]); -} - -static nir_ssa_def * -lower_isign64(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - - nir_ssa_def *is_non_zero = nir_i2b(b, nir_ior(b, x_lo, x_hi)); - nir_ssa_def *res_hi = nir_ishr_imm(b, x_hi, 31); - nir_ssa_def *res_lo = nir_ior(b, res_hi, nir_b2i32(b, is_non_zero)); - - return nir_pack_64_2x32_split(b, res_lo, res_hi); -} - -static void -lower_udiv64_mod64(nir_builder *b, nir_ssa_def *n, nir_ssa_def *d, - nir_ssa_def **q, nir_ssa_def **r) -{ - /* TODO: We should specially handle the case where the denominator is a - * constant. In that case, we should be able to reduce it to a multiply by - * a constant, some shifts, and an add. - */ - nir_ssa_def *n_lo = nir_unpack_64_2x32_split_x(b, n); - nir_ssa_def *n_hi = nir_unpack_64_2x32_split_y(b, n); - nir_ssa_def *d_lo = nir_unpack_64_2x32_split_x(b, d); - nir_ssa_def *d_hi = nir_unpack_64_2x32_split_y(b, d); - - nir_ssa_def *q_lo = nir_imm_zero(b, n->num_components, 32); - nir_ssa_def *q_hi = nir_imm_zero(b, n->num_components, 32); - - nir_ssa_def *n_hi_before_if = n_hi; - nir_ssa_def *q_hi_before_if = q_hi; - - /* If the upper 32 bits of denom are non-zero, it is impossible for shifts - * greater than 32 bits to occur. If the upper 32 bits of the numerator - * are zero, it is impossible for (denom << [63, 32]) <= numer unless - * denom == 0. - */ - nir_ssa_def *need_high_div = - nir_iand(b, nir_ieq_imm(b, d_hi, 0), nir_uge(b, n_hi, d_lo)); - nir_push_if(b, nir_bany(b, need_high_div)); - { - /* If we only have one component, then the bany above goes away and - * this is always true within the if statement. - */ - if (n->num_components == 1) - need_high_div = nir_imm_true(b); - - nir_ssa_def *log2_d_lo = nir_ufind_msb(b, d_lo); - - for (int i = 31; i >= 0; i--) { - /* if ((d.x << i) <= n.y) { - * n.y -= d.x << i; - * quot.y |= 1U << i; - * } - */ - nir_ssa_def *d_shift = nir_ishl(b, d_lo, nir_imm_int(b, i)); - nir_ssa_def *new_n_hi = nir_isub(b, n_hi, d_shift); - nir_ssa_def *new_q_hi = nir_ior(b, q_hi, nir_imm_int(b, 1u << i)); - nir_ssa_def *cond = nir_iand(b, need_high_div, - nir_uge(b, n_hi, d_shift)); - if (i != 0) { - /* log2_d_lo is always <= 31, so we don't need to bother with it - * in the last iteration. - */ - cond = nir_iand(b, cond, - nir_ige(b, nir_imm_int(b, 31 - i), log2_d_lo)); - } - n_hi = nir_bcsel(b, cond, new_n_hi, n_hi); - q_hi = nir_bcsel(b, cond, new_q_hi, q_hi); - } - } - nir_pop_if(b, NULL); - n_hi = nir_if_phi(b, n_hi, n_hi_before_if); - q_hi = nir_if_phi(b, q_hi, q_hi_before_if); - - nir_ssa_def *log2_denom = nir_ufind_msb(b, d_hi); - - n = nir_pack_64_2x32_split(b, n_lo, n_hi); - d = nir_pack_64_2x32_split(b, d_lo, d_hi); - for (int i = 31; i >= 0; i--) { - /* if ((d64 << i) <= n64) { - * n64 -= d64 << i; - * quot.x |= 1U << i; - * } - */ - nir_ssa_def *d_shift = nir_ishl(b, d, nir_imm_int(b, i)); - nir_ssa_def *new_n = nir_isub(b, n, d_shift); - nir_ssa_def *new_q_lo = nir_ior(b, q_lo, nir_imm_int(b, 1u << i)); - nir_ssa_def *cond = nir_uge(b, n, d_shift); - if (i != 0) { - /* log2_denom is always <= 31, so we don't need to bother with it - * in the last iteration. - */ - cond = nir_iand(b, cond, - nir_ige(b, nir_imm_int(b, 31 - i), log2_denom)); - } - n = nir_bcsel(b, cond, new_n, n); - q_lo = nir_bcsel(b, cond, new_q_lo, q_lo); - } - - *q = nir_pack_64_2x32_split(b, q_lo, q_hi); - *r = n; -} - -static nir_ssa_def * -lower_udiv64(nir_builder *b, nir_ssa_def *n, nir_ssa_def *d) -{ - nir_ssa_def *q, *r; - lower_udiv64_mod64(b, n, d, &q, &r); - return q; -} - -static nir_ssa_def * -lower_idiv64(nir_builder *b, nir_ssa_def *n, nir_ssa_def *d) -{ - nir_ssa_def *n_hi = nir_unpack_64_2x32_split_y(b, n); - nir_ssa_def *d_hi = nir_unpack_64_2x32_split_y(b, d); - - nir_ssa_def *negate = nir_ine(b, nir_ilt(b, n_hi, nir_imm_int(b, 0)), - nir_ilt(b, d_hi, nir_imm_int(b, 0))); - nir_ssa_def *q, *r; - lower_udiv64_mod64(b, nir_iabs(b, n), nir_iabs(b, d), &q, &r); - return nir_bcsel(b, negate, nir_ineg(b, q), q); -} - -static nir_ssa_def * -lower_umod64(nir_builder *b, nir_ssa_def *n, nir_ssa_def *d) -{ - nir_ssa_def *q, *r; - lower_udiv64_mod64(b, n, d, &q, &r); - return r; -} - -static nir_ssa_def * -lower_imod64(nir_builder *b, nir_ssa_def *n, nir_ssa_def *d) -{ - nir_ssa_def *n_hi = nir_unpack_64_2x32_split_y(b, n); - nir_ssa_def *d_hi = nir_unpack_64_2x32_split_y(b, d); - nir_ssa_def *n_is_neg = nir_ilt(b, n_hi, nir_imm_int(b, 0)); - nir_ssa_def *d_is_neg = nir_ilt(b, d_hi, nir_imm_int(b, 0)); - - nir_ssa_def *q, *r; - lower_udiv64_mod64(b, nir_iabs(b, n), nir_iabs(b, d), &q, &r); - - nir_ssa_def *rem = nir_bcsel(b, n_is_neg, nir_ineg(b, r), r); - - return nir_bcsel(b, nir_ieq_imm(b, r, 0), nir_imm_int64(b, 0), - nir_bcsel(b, nir_ieq(b, n_is_neg, d_is_neg), rem, - nir_iadd(b, rem, d))); -} - -static nir_ssa_def * -lower_irem64(nir_builder *b, nir_ssa_def *n, nir_ssa_def *d) -{ - nir_ssa_def *n_hi = nir_unpack_64_2x32_split_y(b, n); - nir_ssa_def *n_is_neg = nir_ilt(b, n_hi, nir_imm_int(b, 0)); - - nir_ssa_def *q, *r; - lower_udiv64_mod64(b, nir_iabs(b, n), nir_iabs(b, d), &q, &r); - return nir_bcsel(b, n_is_neg, nir_ineg(b, r), r); -} - -static nir_ssa_def * -lower_extract(nir_builder *b, nir_op op, nir_ssa_def *x, nir_ssa_def *c) -{ - assert(op == nir_op_extract_u8 || op == nir_op_extract_i8 || - op == nir_op_extract_u16 || op == nir_op_extract_i16); - - const int chunk = nir_src_as_uint(nir_src_for_ssa(c)); - const int chunk_bits = - (op == nir_op_extract_u8 || op == nir_op_extract_i8) ? 8 : 16; - const int num_chunks_in_32 = 32 / chunk_bits; - - nir_ssa_def *extract32; - if (chunk < num_chunks_in_32) { - extract32 = nir_build_alu(b, op, nir_unpack_64_2x32_split_x(b, x), - nir_imm_int(b, chunk), - NULL, NULL); - } else { - extract32 = nir_build_alu(b, op, nir_unpack_64_2x32_split_y(b, x), - nir_imm_int(b, chunk - num_chunks_in_32), - NULL, NULL); - } - - if (op == nir_op_extract_i8 || op == nir_op_extract_i16) - return lower_i2i64(b, extract32); - else - return lower_u2u64(b, extract32); -} - -static nir_ssa_def * -lower_ufind_msb64(nir_builder *b, nir_ssa_def *x) -{ - - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *lo_count = nir_ufind_msb(b, x_lo); - nir_ssa_def *hi_count = nir_ufind_msb(b, x_hi); - - if (b->shader->options->lower_uadd_sat) { - nir_ssa_def *valid_hi_bits = nir_ine(b, x_hi, nir_imm_int(b, 0)); - nir_ssa_def *hi_res = nir_iadd(b, nir_imm_intN_t(b, 32, 32), hi_count); - return nir_bcsel(b, valid_hi_bits, hi_res, lo_count); - } else { - /* If hi_count was -1, it will still be -1 after this uadd_sat. As a - * result, hi_count is either -1 or the correct return value for 64-bit - * ufind_msb. - */ - nir_ssa_def *hi_res = nir_uadd_sat(b, nir_imm_intN_t(b, 32, 32), hi_count); - - /* hi_res is either -1 or a value in the range [63, 32]. lo_count is - * either -1 or a value in the range [31, 0]. The imax will pick - * lo_count only when hi_res is -1. In those cases, lo_count is - * guaranteed to be the correct answer. - */ - return nir_imax(b, hi_res, lo_count); - } -} - -static nir_ssa_def * -lower_find_lsb64(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *lo_lsb = nir_find_lsb(b, x_lo); - nir_ssa_def *hi_lsb = nir_find_lsb(b, x_hi); - - /* Use umin so that -1 (no bits found) becomes larger (0xFFFFFFFF) - * than any actual bit position, so we return a found bit instead. - */ - return nir_umin(b, lo_lsb, nir_iadd(b, hi_lsb, nir_imm_int(b, 32))); -} - -static nir_ssa_def * -lower_2f(nir_builder *b, nir_ssa_def *x, unsigned dest_bit_size, - bool src_is_signed) -{ - nir_ssa_def *x_sign = NULL; - - if (src_is_signed) { - x_sign = nir_bcsel(b, COND_LOWER_CMP(b, ilt, x, nir_imm_int64(b, 0)), - nir_imm_floatN_t(b, -1, dest_bit_size), - nir_imm_floatN_t(b, 1, dest_bit_size)); - x = COND_LOWER_OP(b, iabs, x); - } - - nir_ssa_def *exp = COND_LOWER_OP(b, ufind_msb, x); - unsigned significand_bits; - - switch (dest_bit_size) { - case 64: - significand_bits = 52; - break; - case 32: - significand_bits = 23; - break; - case 16: - significand_bits = 10; - break; - default: - unreachable("Invalid dest_bit_size"); - } - - nir_ssa_def *discard = - nir_imax(b, nir_isub(b, exp, nir_imm_int(b, significand_bits)), - nir_imm_int(b, 0)); - nir_ssa_def *significand = COND_LOWER_OP(b, ushr, x, discard); - if (significand_bits < 32) - significand = COND_LOWER_CAST(b, u2u32, significand); - - /* Round-to-nearest-even implementation: - * - if the non-representable part of the significand is higher than half - * the minimum representable significand, we round-up - * - if the non-representable part of the significand is equal to half the - * minimum representable significand and the representable part of the - * significand is odd, we round-up - * - in any other case, we round-down - */ - nir_ssa_def *lsb_mask = COND_LOWER_OP(b, ishl, nir_imm_int64(b, 1), discard); - nir_ssa_def *rem_mask = COND_LOWER_OP(b, isub, lsb_mask, nir_imm_int64(b, 1)); - nir_ssa_def *half = COND_LOWER_OP(b, ishr, lsb_mask, nir_imm_int(b, 1)); - nir_ssa_def *rem = COND_LOWER_OP(b, iand, x, rem_mask); - nir_ssa_def *halfway = nir_iand(b, COND_LOWER_CMP(b, ieq, rem, half), - nir_ine(b, discard, nir_imm_int(b, 0))); - nir_ssa_def *is_odd = COND_LOWER_CMP(b, ine, nir_imm_int64(b, 0), - COND_LOWER_OP(b, iand, x, lsb_mask)); - nir_ssa_def *round_up = nir_ior(b, COND_LOWER_CMP(b, ilt, half, rem), - nir_iand(b, halfway, is_odd)); - if (significand_bits >= 32) - significand = COND_LOWER_OP(b, iadd, significand, - COND_LOWER_CAST(b, b2i64, round_up)); - else - significand = nir_iadd(b, significand, nir_b2i32(b, round_up)); - - nir_ssa_def *res; - - if (dest_bit_size == 64) { - /* Compute the left shift required to normalize the original - * unrounded input manually. - */ - nir_ssa_def *shift = - nir_imax(b, nir_isub(b, nir_imm_int(b, significand_bits), exp), - nir_imm_int(b, 0)); - significand = COND_LOWER_OP(b, ishl, significand, shift); - - /* Check whether normalization led to overflow of the available - * significand bits, which can only happen if round_up was true - * above, in which case we need to add carry to the exponent and - * discard an extra bit from the significand. Note that we - * don't need to repeat the round-up logic again, since the LSB - * of the significand is guaranteed to be zero if there was - * overflow. - */ - nir_ssa_def *carry = nir_b2i32( - b, nir_uge(b, nir_unpack_64_2x32_split_y(b, significand), - nir_imm_int(b, 1 << (significand_bits - 31)))); - significand = COND_LOWER_OP(b, ishr, significand, carry); - exp = nir_iadd(b, exp, carry); - - /* Compute the biased exponent, taking care to handle a zero - * input correctly, which would have caused exp to be negative. - */ - nir_ssa_def *biased_exp = nir_bcsel(b, nir_ilt(b, exp, nir_imm_int(b, 0)), - nir_imm_int(b, 0), - nir_iadd(b, exp, nir_imm_int(b, 1023))); - - /* Pack the significand and exponent manually. */ - nir_ssa_def *lo = nir_unpack_64_2x32_split_x(b, significand); - nir_ssa_def *hi = nir_bitfield_insert( - b, nir_unpack_64_2x32_split_y(b, significand), - biased_exp, nir_imm_int(b, 20), nir_imm_int(b, 11)); - - res = nir_pack_64_2x32_split(b, lo, hi); - - } else if (dest_bit_size == 32) { - res = nir_fmul(b, nir_u2f32(b, significand), - nir_fexp2(b, nir_u2f32(b, discard))); - } else { - res = nir_fmul(b, nir_u2f16(b, significand), - nir_fexp2(b, nir_u2f16(b, discard))); - } - - if (src_is_signed) - res = nir_fmul(b, res, x_sign); - - return res; -} - -static nir_ssa_def * -lower_f2(nir_builder *b, nir_ssa_def *x, bool dst_is_signed) -{ - assert(x->bit_size == 16 || x->bit_size == 32 || x->bit_size == 64); - nir_ssa_def *x_sign = NULL; - - if (dst_is_signed) - x_sign = nir_fsign(b, x); - - x = nir_ftrunc(b, x); - - if (dst_is_signed) - x = nir_fabs(b, x); - - nir_ssa_def *res; - if (x->bit_size < 32) { - res = nir_pack_64_2x32_split(b, nir_f2u32(b, x), nir_imm_int(b, 0)); - } else { - nir_ssa_def *div = nir_imm_floatN_t(b, 1ULL << 32, x->bit_size); - nir_ssa_def *res_hi = nir_f2u32(b, nir_fdiv(b, x, div)); - nir_ssa_def *res_lo = nir_f2u32(b, nir_frem(b, x, div)); - res = nir_pack_64_2x32_split(b, res_lo, res_hi); - } - - if (dst_is_signed) - res = nir_bcsel(b, nir_flt(b, x_sign, nir_imm_floatN_t(b, 0, x->bit_size)), - nir_ineg(b, res), res); - - return res; -} - -static nir_ssa_def * -lower_bit_count64(nir_builder *b, nir_ssa_def *x) -{ - nir_ssa_def *x_lo = nir_unpack_64_2x32_split_x(b, x); - nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x); - nir_ssa_def *lo_count = nir_bit_count(b, x_lo); - nir_ssa_def *hi_count = nir_bit_count(b, x_hi); - return nir_iadd(b, lo_count, hi_count); -} - -nir_lower_int64_options -nir_lower_int64_op_to_options_mask(nir_op opcode) -{ - switch (opcode) { - case nir_op_imul: - case nir_op_amul: - return nir_lower_imul64; - case nir_op_imul_2x32_64: - case nir_op_umul_2x32_64: - return nir_lower_imul_2x32_64; - case nir_op_imul_high: - case nir_op_umul_high: - return nir_lower_imul_high64; - case nir_op_isign: - return nir_lower_isign64; - case nir_op_udiv: - case nir_op_idiv: - case nir_op_umod: - case nir_op_imod: - case nir_op_irem: - return nir_lower_divmod64; - case nir_op_b2i64: - case nir_op_i2i8: - case nir_op_i2i16: - case nir_op_i2i32: - case nir_op_i2i64: - case nir_op_u2u8: - case nir_op_u2u16: - case nir_op_u2u32: - case nir_op_u2u64: - case nir_op_i2f64: - case nir_op_u2f64: - case nir_op_i2f32: - case nir_op_u2f32: - case nir_op_i2f16: - case nir_op_u2f16: - case nir_op_f2i64: - case nir_op_f2u64: - case nir_op_bcsel: - return nir_lower_mov64; - case nir_op_ieq: - case nir_op_ine: - case nir_op_ult: - case nir_op_ilt: - case nir_op_uge: - case nir_op_ige: - return nir_lower_icmp64; - case nir_op_iadd: - case nir_op_isub: - return nir_lower_iadd64; - case nir_op_imin: - case nir_op_imax: - case nir_op_umin: - case nir_op_umax: - return nir_lower_minmax64; - case nir_op_iabs: - return nir_lower_iabs64; - case nir_op_ineg: - return nir_lower_ineg64; - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - case nir_op_inot: - return nir_lower_logic64; - case nir_op_ishl: - case nir_op_ishr: - case nir_op_ushr: - return nir_lower_shift64; - case nir_op_extract_u8: - case nir_op_extract_i8: - case nir_op_extract_u16: - case nir_op_extract_i16: - return nir_lower_extract64; - case nir_op_ufind_msb: - return nir_lower_ufind_msb64; - case nir_op_find_lsb: - return nir_lower_find_lsb64; - case nir_op_bit_count: - return nir_lower_bit_count64; - default: - return 0; - } -} - -static nir_ssa_def * -lower_int64_alu_instr(nir_builder *b, nir_alu_instr *alu) -{ - nir_ssa_def *src[4]; - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) - src[i] = nir_ssa_for_alu_src(b, alu, i); - - switch (alu->op) { - case nir_op_imul: - case nir_op_amul: - return lower_imul64(b, src[0], src[1]); - case nir_op_imul_2x32_64: - return lower_mul_2x32_64(b, src[0], src[1], true); - case nir_op_umul_2x32_64: - return lower_mul_2x32_64(b, src[0], src[1], false); - case nir_op_imul_high: - return lower_mul_high64(b, src[0], src[1], true); - case nir_op_umul_high: - return lower_mul_high64(b, src[0], src[1], false); - case nir_op_isign: - return lower_isign64(b, src[0]); - case nir_op_udiv: - return lower_udiv64(b, src[0], src[1]); - case nir_op_idiv: - return lower_idiv64(b, src[0], src[1]); - case nir_op_umod: - return lower_umod64(b, src[0], src[1]); - case nir_op_imod: - return lower_imod64(b, src[0], src[1]); - case nir_op_irem: - return lower_irem64(b, src[0], src[1]); - case nir_op_b2i64: - return lower_b2i64(b, src[0]); - case nir_op_i2i8: - return lower_i2i8(b, src[0]); - case nir_op_i2i16: - return lower_i2i16(b, src[0]); - case nir_op_i2i32: - return lower_i2i32(b, src[0]); - case nir_op_i2i64: - return lower_i2i64(b, src[0]); - case nir_op_u2u8: - return lower_u2u8(b, src[0]); - case nir_op_u2u16: - return lower_u2u16(b, src[0]); - case nir_op_u2u32: - return lower_u2u32(b, src[0]); - case nir_op_u2u64: - return lower_u2u64(b, src[0]); - case nir_op_bcsel: - return lower_bcsel64(b, src[0], src[1], src[2]); - case nir_op_ieq: - case nir_op_ine: - case nir_op_ult: - case nir_op_ilt: - case nir_op_uge: - case nir_op_ige: - return lower_int64_compare(b, alu->op, src[0], src[1]); - case nir_op_iadd: - return lower_iadd64(b, src[0], src[1]); - case nir_op_isub: - return lower_isub64(b, src[0], src[1]); - case nir_op_imin: - return lower_imin64(b, src[0], src[1]); - case nir_op_imax: - return lower_imax64(b, src[0], src[1]); - case nir_op_umin: - return lower_umin64(b, src[0], src[1]); - case nir_op_umax: - return lower_umax64(b, src[0], src[1]); - case nir_op_iabs: - return lower_iabs64(b, src[0]); - case nir_op_ineg: - return lower_ineg64(b, src[0]); - case nir_op_iand: - return lower_iand64(b, src[0], src[1]); - case nir_op_ior: - return lower_ior64(b, src[0], src[1]); - case nir_op_ixor: - return lower_ixor64(b, src[0], src[1]); - case nir_op_inot: - return lower_inot64(b, src[0]); - case nir_op_ishl: - return lower_ishl64(b, src[0], src[1]); - case nir_op_ishr: - return lower_ishr64(b, src[0], src[1]); - case nir_op_ushr: - return lower_ushr64(b, src[0], src[1]); - case nir_op_extract_u8: - case nir_op_extract_i8: - case nir_op_extract_u16: - case nir_op_extract_i16: - return lower_extract(b, alu->op, src[0], src[1]); - case nir_op_ufind_msb: - return lower_ufind_msb64(b, src[0]); - case nir_op_find_lsb: - return lower_find_lsb64(b, src[0]); - case nir_op_bit_count: - return lower_bit_count64(b, src[0]); - case nir_op_i2f64: - case nir_op_i2f32: - case nir_op_i2f16: - return lower_2f(b, src[0], nir_dest_bit_size(alu->dest.dest), true); - case nir_op_u2f64: - case nir_op_u2f32: - case nir_op_u2f16: - return lower_2f(b, src[0], nir_dest_bit_size(alu->dest.dest), false); - case nir_op_f2i64: - case nir_op_f2u64: - return lower_f2(b, src[0], alu->op == nir_op_f2i64); - default: - unreachable("Invalid ALU opcode to lower"); - } -} - -static bool -should_lower_int64_alu_instr(const nir_alu_instr *alu, - const nir_shader_compiler_options *options) -{ - switch (alu->op) { - case nir_op_i2i8: - case nir_op_i2i16: - case nir_op_i2i32: - case nir_op_u2u8: - case nir_op_u2u16: - case nir_op_u2u32: - assert(alu->src[0].src.is_ssa); - if (alu->src[0].src.ssa->bit_size != 64) - return false; - break; - case nir_op_bcsel: - assert(alu->src[1].src.is_ssa); - assert(alu->src[2].src.is_ssa); - assert(alu->src[1].src.ssa->bit_size == - alu->src[2].src.ssa->bit_size); - if (alu->src[1].src.ssa->bit_size != 64) - return false; - break; - case nir_op_ieq: - case nir_op_ine: - case nir_op_ult: - case nir_op_ilt: - case nir_op_uge: - case nir_op_ige: - assert(alu->src[0].src.is_ssa); - assert(alu->src[1].src.is_ssa); - assert(alu->src[0].src.ssa->bit_size == - alu->src[1].src.ssa->bit_size); - if (alu->src[0].src.ssa->bit_size != 64) - return false; - break; - case nir_op_ufind_msb: - case nir_op_find_lsb: - case nir_op_bit_count: - assert(alu->src[0].src.is_ssa); - if (alu->src[0].src.ssa->bit_size != 64) - return false; - break; - case nir_op_amul: - assert(alu->dest.dest.is_ssa); - if (options->has_imul24) - return false; - if (alu->dest.dest.ssa.bit_size != 64) - return false; - break; - case nir_op_i2f64: - case nir_op_u2f64: - case nir_op_i2f32: - case nir_op_u2f32: - case nir_op_i2f16: - case nir_op_u2f16: - assert(alu->src[0].src.is_ssa); - if (alu->src[0].src.ssa->bit_size != 64) - return false; - break; - case nir_op_f2u64: - case nir_op_f2i64: - - default: - assert(alu->dest.dest.is_ssa); - if (alu->dest.dest.ssa.bit_size != 64) - return false; - break; - } - - unsigned mask = nir_lower_int64_op_to_options_mask(alu->op); - return (options->lower_int64_options & mask) != 0; -} - -static nir_ssa_def * -split_64bit_subgroup_op(nir_builder *b, const nir_intrinsic_instr *intrin) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[intrin->intrinsic]; - - /* This works on subgroup ops with a single 64-bit source which can be - * trivially lowered by doing the exact same op on both halves. - */ - assert(intrin->src[0].is_ssa && intrin->src[0].ssa->bit_size == 64); - nir_ssa_def *split_src0[2] = { - nir_unpack_64_2x32_split_x(b, intrin->src[0].ssa), - nir_unpack_64_2x32_split_y(b, intrin->src[0].ssa), - }; - - assert(info->has_dest && intrin->dest.is_ssa && - intrin->dest.ssa.bit_size == 64); - - nir_ssa_def *res[2]; - for (unsigned i = 0; i < 2; i++) { - nir_intrinsic_instr *split = - nir_intrinsic_instr_create(b->shader, intrin->intrinsic); - split->num_components = intrin->num_components; - split->src[0] = nir_src_for_ssa(split_src0[i]); - - /* Other sources must be less than 64 bits and get copied directly */ - for (unsigned j = 1; j < info->num_srcs; j++) { - assert(intrin->src[j].is_ssa && intrin->src[j].ssa->bit_size < 64); - split->src[j] = nir_src_for_ssa(intrin->src[j].ssa); - } - - /* Copy const indices, if any */ - memcpy(split->const_index, intrin->const_index, - sizeof(intrin->const_index)); - - nir_ssa_dest_init(&split->instr, &split->dest, - intrin->dest.ssa.num_components, 32, NULL); - nir_builder_instr_insert(b, &split->instr); - - res[i] = &split->dest.ssa; - } - - return nir_pack_64_2x32_split(b, res[0], res[1]); -} - -static nir_ssa_def * -build_vote_ieq(nir_builder *b, nir_ssa_def *x) -{ - nir_intrinsic_instr *vote = - nir_intrinsic_instr_create(b->shader, nir_intrinsic_vote_ieq); - vote->src[0] = nir_src_for_ssa(x); - vote->num_components = x->num_components; - nir_ssa_dest_init(&vote->instr, &vote->dest, 1, 1, NULL); - nir_builder_instr_insert(b, &vote->instr); - return &vote->dest.ssa; -} - -static nir_ssa_def * -lower_vote_ieq(nir_builder *b, nir_ssa_def *x) -{ - return nir_iand(b, build_vote_ieq(b, nir_unpack_64_2x32_split_x(b, x)), - build_vote_ieq(b, nir_unpack_64_2x32_split_y(b, x))); -} - -static nir_ssa_def * -build_scan_intrinsic(nir_builder *b, nir_intrinsic_op scan_op, - nir_op reduction_op, unsigned cluster_size, - nir_ssa_def *val) -{ - nir_intrinsic_instr *scan = - nir_intrinsic_instr_create(b->shader, scan_op); - scan->num_components = val->num_components; - scan->src[0] = nir_src_for_ssa(val); - nir_intrinsic_set_reduction_op(scan, reduction_op); - if (scan_op == nir_intrinsic_reduce) - nir_intrinsic_set_cluster_size(scan, cluster_size); - nir_ssa_dest_init(&scan->instr, &scan->dest, - val->num_components, val->bit_size, NULL); - nir_builder_instr_insert(b, &scan->instr); - return &scan->dest.ssa; -} - -static nir_ssa_def * -lower_scan_iadd64(nir_builder *b, const nir_intrinsic_instr *intrin) -{ - unsigned cluster_size = - intrin->intrinsic == nir_intrinsic_reduce ? - nir_intrinsic_cluster_size(intrin) : 0; - - /* Split it into three chunks of no more than 24 bits each. With 8 bits - * of headroom, we're guaranteed that there will never be overflow in the - * individual subgroup operations. (Assuming, of course, a subgroup size - * no larger than 256 which seems reasonable.) We can then scan on each of - * the chunks and add them back together at the end. - */ - assert(intrin->src[0].is_ssa); - nir_ssa_def *x = intrin->src[0].ssa; - nir_ssa_def *x_low = - nir_u2u32(b, nir_iand_imm(b, x, 0xffffff)); - nir_ssa_def *x_mid = - nir_u2u32(b, nir_iand_imm(b, nir_ushr(b, x, nir_imm_int(b, 24)), - 0xffffff)); - nir_ssa_def *x_hi = - nir_u2u32(b, nir_ushr(b, x, nir_imm_int(b, 48))); - - nir_ssa_def *scan_low = - build_scan_intrinsic(b, intrin->intrinsic, nir_op_iadd, - cluster_size, x_low); - nir_ssa_def *scan_mid = - build_scan_intrinsic(b, intrin->intrinsic, nir_op_iadd, - cluster_size, x_mid); - nir_ssa_def *scan_hi = - build_scan_intrinsic(b, intrin->intrinsic, nir_op_iadd, - cluster_size, x_hi); - - scan_low = nir_u2u64(b, scan_low); - scan_mid = nir_ishl(b, nir_u2u64(b, scan_mid), nir_imm_int(b, 24)); - scan_hi = nir_ishl(b, nir_u2u64(b, scan_hi), nir_imm_int(b, 48)); - - return nir_iadd(b, scan_hi, nir_iadd(b, scan_mid, scan_low)); -} - -static bool -should_lower_int64_intrinsic(const nir_intrinsic_instr *intrin, - const nir_shader_compiler_options *options) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_read_invocation: - case nir_intrinsic_read_first_invocation: - case nir_intrinsic_shuffle: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - assert(intrin->dest.is_ssa); - return intrin->dest.ssa.bit_size == 64 && - (options->lower_int64_options & nir_lower_subgroup_shuffle64); - - case nir_intrinsic_vote_ieq: - assert(intrin->src[0].is_ssa); - return intrin->src[0].ssa->bit_size == 64 && - (options->lower_int64_options & nir_lower_vote_ieq64); - - case nir_intrinsic_reduce: - case nir_intrinsic_inclusive_scan: - case nir_intrinsic_exclusive_scan: - assert(intrin->dest.is_ssa); - if (intrin->dest.ssa.bit_size != 64) - return false; - - switch (nir_intrinsic_reduction_op(intrin)) { - case nir_op_iadd: - return options->lower_int64_options & nir_lower_scan_reduce_iadd64; - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - return options->lower_int64_options & nir_lower_scan_reduce_bitwise64; - default: - return false; - } - break; - - default: - return false; - } -} - -static nir_ssa_def * -lower_int64_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_read_invocation: - case nir_intrinsic_read_first_invocation: - case nir_intrinsic_shuffle: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - return split_64bit_subgroup_op(b, intrin); - - case nir_intrinsic_vote_ieq: - assert(intrin->src[0].is_ssa); - return lower_vote_ieq(b, intrin->src[0].ssa); - - case nir_intrinsic_reduce: - case nir_intrinsic_inclusive_scan: - case nir_intrinsic_exclusive_scan: - switch (nir_intrinsic_reduction_op(intrin)) { - case nir_op_iadd: - return lower_scan_iadd64(b, intrin); - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - return split_64bit_subgroup_op(b, intrin); - default: - unreachable("Unsupported subgroup scan/reduce op"); - } - break; - - default: - unreachable("Unsupported intrinsic"); - } -} - -static bool -should_lower_int64_instr(const nir_instr *instr, const void *_options) -{ - switch (instr->type) { - case nir_instr_type_alu: - return should_lower_int64_alu_instr(nir_instr_as_alu(instr), _options); - case nir_instr_type_intrinsic: - return should_lower_int64_intrinsic(nir_instr_as_intrinsic(instr), - _options); - default: - return false; - } -} - -static nir_ssa_def * -lower_int64_instr(nir_builder *b, nir_instr *instr, void *_options) -{ - switch (instr->type) { - case nir_instr_type_alu: - return lower_int64_alu_instr(b, nir_instr_as_alu(instr)); - case nir_instr_type_intrinsic: - return lower_int64_intrinsic(b, nir_instr_as_intrinsic(instr)); - default: - return NULL; - } -} - -bool -nir_lower_int64(nir_shader *shader) -{ - return nir_shader_lower_instructions(shader, should_lower_int64_instr, - lower_int64_instr, - (void *)shader->options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_int_to_float.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_int_to_float.c deleted file mode 100644 index cd45db0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_int_to_float.c +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * Copyright © 2019 Vasily Khoruzhick - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -assert_ssa_def_is_not_int(nir_ssa_def *def, void *arg) -{ - ASSERTED BITSET_WORD *int_types = arg; - assert(!BITSET_TEST(int_types, def->index)); - return true; -} - -static bool -instr_has_only_trivial_swizzles(nir_alu_instr *alu) -{ - const nir_op_info *info = &nir_op_infos[alu->op]; - - for (unsigned i = 0; i < info->num_inputs; i++) { - for (unsigned chan = 0; chan < alu->dest.dest.ssa.num_components; chan++) { - if (alu->src[i].swizzle[chan] != chan) - return false; - } - } - return true; -} - -/* Recognize the y = x - ffract(x) patterns from lowered ffloor. - * It only works for the simple case when no swizzling is involved. - */ -static bool -check_for_lowered_ffloor(nir_alu_instr *fadd) -{ - if (!instr_has_only_trivial_swizzles(fadd)) - return false; - - nir_alu_instr *fneg = NULL; - nir_src x; - for (unsigned i = 0; i < 2; i++) { - nir_alu_instr *fadd_src_alu = nir_src_as_alu_instr(fadd->src[i].src); - if (fadd_src_alu && fadd_src_alu->op == nir_op_fneg) { - fneg = fadd_src_alu; - x = fadd->src[1 - i].src; - } - } - - if (!fneg || !instr_has_only_trivial_swizzles(fneg)) - return false; - - nir_alu_instr *ffract = nir_src_as_alu_instr(fneg->src[0].src); - if (ffract && ffract->op == nir_op_ffract && - nir_srcs_equal(ffract->src[0].src, x) && - instr_has_only_trivial_swizzles(ffract)) - return true; - - return false; -} - -static bool -lower_alu_instr(nir_builder *b, nir_alu_instr *alu) -{ - const nir_op_info *info = &nir_op_infos[alu->op]; - - bool is_bool_only = alu->dest.dest.ssa.bit_size == 1; - for (unsigned i = 0; i < info->num_inputs; i++) { - if (alu->src[i].src.ssa->bit_size != 1) - is_bool_only = false; - } - - if (is_bool_only) { - /* avoid lowering integers ops are used for booleans (ieq,ine,etc) */ - return false; - } - - b->cursor = nir_before_instr(&alu->instr); - - /* Replacement SSA value */ - nir_ssa_def *rep = NULL; - switch (alu->op) { - case nir_op_mov: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_bcsel: - /* These we expect to have integers but the opcode doesn't change */ - break; - - case nir_op_b2i32: alu->op = nir_op_b2f32; break; - case nir_op_i2f32: alu->op = nir_op_mov; break; - case nir_op_u2f32: alu->op = nir_op_mov; break; - - case nir_op_f2i32: { - alu->op = nir_op_ftrunc; - - /* If the source was already integer, then we did't need to truncate and - * can switch it to a mov that can be copy-propagated away. - */ - nir_alu_instr *src_alu = nir_src_as_alu_instr(alu->src[0].src); - if (src_alu) { - switch (src_alu->op) { - /* Check for the y = x - ffract(x) patterns from lowered ffloor. */ - case nir_op_fadd: - if (check_for_lowered_ffloor(src_alu)) - alu->op = nir_op_mov; - break; - case nir_op_fround_even: - case nir_op_fceil: - case nir_op_ftrunc: - case nir_op_ffloor: - alu->op = nir_op_mov; - break; - default: - break; - } - } - break; - } - - case nir_op_f2u32: alu->op = nir_op_ffloor; break; - - case nir_op_ilt: alu->op = nir_op_flt; break; - case nir_op_ige: alu->op = nir_op_fge; break; - case nir_op_ieq: alu->op = nir_op_feq; break; - case nir_op_ine: alu->op = nir_op_fneu; break; - case nir_op_ult: alu->op = nir_op_flt; break; - case nir_op_uge: alu->op = nir_op_fge; break; - - case nir_op_iadd: alu->op = nir_op_fadd; break; - case nir_op_isub: alu->op = nir_op_fsub; break; - case nir_op_imul: alu->op = nir_op_fmul; break; - - case nir_op_idiv: { - nir_ssa_def *x = nir_ssa_for_alu_src(b, alu, 0); - nir_ssa_def *y = nir_ssa_for_alu_src(b, alu, 1); - - /* Hand-lower fdiv, since lower_int_to_float is after nir_opt_algebraic. */ - if (b->shader->options->lower_fdiv) { - rep = nir_ftrunc(b, nir_fmul(b, x, nir_frcp(b, y))); - } else { - rep = nir_ftrunc(b, nir_fdiv(b, x, y)); - } - break; - } - - case nir_op_iabs: alu->op = nir_op_fabs; break; - case nir_op_ineg: alu->op = nir_op_fneg; break; - case nir_op_imax: alu->op = nir_op_fmax; break; - case nir_op_imin: alu->op = nir_op_fmin; break; - case nir_op_umax: alu->op = nir_op_fmax; break; - case nir_op_umin: alu->op = nir_op_fmin; break; - - case nir_op_ball_iequal2: alu->op = nir_op_ball_fequal2; break; - case nir_op_ball_iequal3: alu->op = nir_op_ball_fequal3; break; - case nir_op_ball_iequal4: alu->op = nir_op_ball_fequal4; break; - case nir_op_bany_inequal2: alu->op = nir_op_bany_fnequal2; break; - case nir_op_bany_inequal3: alu->op = nir_op_bany_fnequal3; break; - case nir_op_bany_inequal4: alu->op = nir_op_bany_fnequal4; break; - - case nir_op_i32csel_gt: alu->op = nir_op_fcsel_gt; break; - case nir_op_i32csel_ge: alu->op = nir_op_fcsel_ge; break; - - default: - assert(nir_alu_type_get_base_type(info->output_type) != nir_type_int && - nir_alu_type_get_base_type(info->output_type) != nir_type_uint); - for (unsigned i = 0; i < info->num_inputs; i++) { - assert(nir_alu_type_get_base_type(info->input_types[i]) != nir_type_int && - nir_alu_type_get_base_type(info->input_types[i]) != nir_type_uint); - } - return false; - } - - if (rep) { - /* We've emitted a replacement instruction */ - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, rep); - nir_instr_remove(&alu->instr); - } - - return true; -} - -static bool -nir_lower_int_to_float_impl(nir_function_impl *impl) -{ - bool progress = false; - BITSET_WORD *float_types = NULL, *int_types = NULL; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_index_ssa_defs(impl); - float_types = calloc(BITSET_WORDS(impl->ssa_alloc), - sizeof(BITSET_WORD)); - int_types = calloc(BITSET_WORDS(impl->ssa_alloc), - sizeof(BITSET_WORD)); - nir_gather_ssa_types(impl, float_types, int_types); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_alu: - progress |= lower_alu_instr(&b, nir_instr_as_alu(instr)); - break; - - case nir_instr_type_load_const: { - nir_load_const_instr *load = nir_instr_as_load_const(instr); - if (load->def.bit_size != 1 && BITSET_TEST(int_types, load->def.index)) { - for (unsigned i = 0; i < load->def.num_components; i++) - load->value[i].f32 = load->value[i].i32; - } - break; - } - - case nir_instr_type_intrinsic: - case nir_instr_type_ssa_undef: - case nir_instr_type_phi: - case nir_instr_type_tex: - break; - - default: - nir_foreach_ssa_def(instr, assert_ssa_def_is_not_int, (void *)int_types); - break; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - free(float_types); - free(int_types); - - return progress; -} - -bool -nir_lower_int_to_float(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && nir_lower_int_to_float_impl(function->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_interpolation.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_interpolation.c deleted file mode 100644 index 4f0e67d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_interpolation.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright © 2019 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * This lower pass lowers load_interpolated_input for various interpolation - * modes (as configured via nir_lower_interpolation_options bitmask) into - * load_attribute_deltas plus alu instructions: - * - * vec3 ad = load_attribute_deltas(varying_slot) - * float result = ad.x + ad.y * j + ad.z * i - * - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -nir_lower_interpolation_instr(nir_builder *b, nir_instr *instr, void *cb_data) -{ - nir_lower_interpolation_options options = - *(nir_lower_interpolation_options *)cb_data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->intrinsic != nir_intrinsic_load_interpolated_input) - return false; - - assert(intr->dest.is_ssa); - assert(intr->src[0].is_ssa); - assert(intr->src[1].is_ssa); - - nir_intrinsic_instr *bary_intrinsic = - nir_instr_as_intrinsic(intr->src[0].ssa->parent_instr); - - /* Leave VARYING_SLOT_POS alone */ - if (nir_intrinsic_base(intr) == VARYING_SLOT_POS) - return false; - - const enum glsl_interp_mode interp_mode = - nir_intrinsic_interp_mode(bary_intrinsic); - - /* We need actual interpolation modes by the time we get here */ - assert(interp_mode != INTERP_MODE_NONE); - - /* Only lower for inputs that need interpolation */ - if (interp_mode != INTERP_MODE_SMOOTH && - interp_mode != INTERP_MODE_NOPERSPECTIVE) - return false; - - nir_intrinsic_op op = bary_intrinsic->intrinsic; - - switch (op) { - case nir_intrinsic_load_barycentric_at_sample: - if (options & nir_lower_interpolation_at_sample) - break; - return false; - case nir_intrinsic_load_barycentric_at_offset: - if (options & nir_lower_interpolation_at_offset) - break; - return false; - case nir_intrinsic_load_barycentric_centroid: - if (options & nir_lower_interpolation_centroid) - break; - return false; - case nir_intrinsic_load_barycentric_pixel: - if (options & nir_lower_interpolation_pixel) - break; - return false; - case nir_intrinsic_load_barycentric_sample: - if (options & nir_lower_interpolation_sample) - break; - return false; - default: - return false; - } - - b->cursor = nir_before_instr(instr); - - nir_ssa_def *comps[NIR_MAX_VEC_COMPONENTS]; - for (int i = 0; i < intr->num_components; i++) { - nir_ssa_def *iid = - nir_load_fs_input_interp_deltas(b, 32, intr->src[1].ssa, - .base = nir_intrinsic_base(intr), - .component = (nir_intrinsic_component(intr) + i), - .io_semantics = nir_intrinsic_io_semantics(intr)); - - nir_ssa_def *bary = intr->src[0].ssa; - nir_ssa_def *val; - - val = nir_ffma(b, nir_channel(b, bary, 1), - nir_channel(b, iid, 1), - nir_channel(b, iid, 0)); - val = nir_ffma(b, nir_channel(b, bary, 0), - nir_channel(b, iid, 2), - val); - - comps[i] = val; - } - nir_ssa_def *vec = nir_vec(b, comps, intr->num_components); - nir_ssa_def_rewrite_uses(&intr->dest.ssa, vec); - - return true; -} - -bool -nir_lower_interpolation(nir_shader *shader, nir_lower_interpolation_options options) -{ - return nir_shader_instructions_pass(shader, nir_lower_interpolation_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io.c deleted file mode 100644 index d851eca..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io.c +++ /dev/null @@ -1,3174 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * This lowering pass converts references to input/output variables with - * loads/stores to actual input/output intrinsics. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" -#include "nir_xfb_info.h" - -#include "../../util/u_math.h" - -struct lower_io_state { - void *dead_ctx; - nir_builder builder; - int (*type_size)(const struct glsl_type *type, bool); - nir_variable_mode modes; - nir_lower_io_options options; -}; - -static nir_intrinsic_op -ssbo_atomic_for_deref(nir_intrinsic_op deref_op) -{ - switch (deref_op) { -#define OP(O) case nir_intrinsic_deref_##O: return nir_intrinsic_ssbo_##O; - OP(atomic_exchange) - OP(atomic_comp_swap) - OP(atomic_add) - OP(atomic_imin) - OP(atomic_umin) - OP(atomic_imax) - OP(atomic_umax) - OP(atomic_and) - OP(atomic_or) - OP(atomic_xor) - OP(atomic_fadd) - OP(atomic_fmin) - OP(atomic_fmax) - OP(atomic_fcomp_swap) -#undef OP - default: - unreachable("Invalid SSBO atomic"); - } -} - -static nir_intrinsic_op -global_atomic_for_deref(nir_address_format addr_format, - nir_intrinsic_op deref_op) -{ - switch (deref_op) { -#define OP(O) case nir_intrinsic_deref_##O: \ - if (addr_format != nir_address_format_2x32bit_global) \ - return nir_intrinsic_global_##O; \ - else \ - return nir_intrinsic_global_##O##_2x32; - OP(atomic_exchange) - OP(atomic_comp_swap) - OP(atomic_add) - OP(atomic_imin) - OP(atomic_umin) - OP(atomic_imax) - OP(atomic_umax) - OP(atomic_and) - OP(atomic_or) - OP(atomic_xor) - OP(atomic_fadd) - OP(atomic_fmin) - OP(atomic_fmax) - OP(atomic_fcomp_swap) -#undef OP - default: - unreachable("Invalid SSBO atomic"); - } -} - -static nir_intrinsic_op -shared_atomic_for_deref(nir_intrinsic_op deref_op) -{ - switch (deref_op) { -#define OP(O) case nir_intrinsic_deref_##O: return nir_intrinsic_shared_##O; - OP(atomic_exchange) - OP(atomic_comp_swap) - OP(atomic_add) - OP(atomic_imin) - OP(atomic_umin) - OP(atomic_imax) - OP(atomic_umax) - OP(atomic_and) - OP(atomic_or) - OP(atomic_xor) - OP(atomic_fadd) - OP(atomic_fmin) - OP(atomic_fmax) - OP(atomic_fcomp_swap) -#undef OP - default: - unreachable("Invalid shared atomic"); - } -} - -static nir_intrinsic_op -task_payload_atomic_for_deref(nir_intrinsic_op deref_op) -{ - switch (deref_op) { -#define OP(O) case nir_intrinsic_deref_##O: return nir_intrinsic_task_payload_##O; - OP(atomic_exchange) - OP(atomic_comp_swap) - OP(atomic_add) - OP(atomic_imin) - OP(atomic_umin) - OP(atomic_imax) - OP(atomic_umax) - OP(atomic_and) - OP(atomic_or) - OP(atomic_xor) - OP(atomic_fadd) - OP(atomic_fmin) - OP(atomic_fmax) - OP(atomic_fcomp_swap) -#undef OP - default: - unreachable("Invalid task payload atomic"); - } -} - -void -nir_assign_var_locations(nir_shader *shader, nir_variable_mode mode, - unsigned *size, - int (*type_size)(const struct glsl_type *, bool)) -{ - unsigned location = 0; - - nir_foreach_variable_with_modes(var, shader, mode) { - var->data.driver_location = location; - bool bindless_type_size = var->data.mode == nir_var_shader_in || - var->data.mode == nir_var_shader_out || - var->data.bindless; - location += type_size(var->type, bindless_type_size); - } - - *size = location; -} - -/** - * Some inputs and outputs are arrayed, meaning that there is an extra level - * of array indexing to handle mismatches between the shader interface and the - * dispatch pattern of the shader. For instance, geometry shaders are - * executed per-primitive while their inputs and outputs are specified - * per-vertex so all inputs and outputs have to be additionally indexed with - * the vertex index within the primitive. - */ -bool -nir_is_arrayed_io(const nir_variable *var, gl_shader_stage stage) -{ - if (var->data.patch || !glsl_type_is_array(var->type)) - return false; - - if (stage == MESA_SHADER_MESH) { - /* NV_mesh_shader: this is flat array for the whole workgroup. */ - if (var->data.location == VARYING_SLOT_PRIMITIVE_INDICES) - return var->data.per_primitive; - } - - if (var->data.mode == nir_var_shader_in) - return stage == MESA_SHADER_GEOMETRY || - stage == MESA_SHADER_TESS_CTRL || - stage == MESA_SHADER_TESS_EVAL; - - if (var->data.mode == nir_var_shader_out) - return stage == MESA_SHADER_TESS_CTRL || - stage == MESA_SHADER_MESH; - - return false; -} - -static unsigned get_number_of_slots(struct lower_io_state *state, - const nir_variable *var) -{ - const struct glsl_type *type = var->type; - - if (nir_is_arrayed_io(var, state->builder.shader->info.stage)) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - /* NV_mesh_shader: - * PRIMITIVE_INDICES is a flat array, not a proper arrayed output, - * as opposed to D3D-style mesh shaders where it's addressed by - * the primitive index. - * Prevent assigning several slots to primitive indices, - * to avoid some issues. - */ - if (state->builder.shader->info.stage == MESA_SHADER_MESH && - var->data.location == VARYING_SLOT_PRIMITIVE_INDICES && - !nir_is_arrayed_io(var, state->builder.shader->info.stage)) - return 1; - - return state->type_size(type, var->data.bindless); -} - -static nir_ssa_def * -get_io_offset(nir_builder *b, nir_deref_instr *deref, - nir_ssa_def **array_index, - int (*type_size)(const struct glsl_type *, bool), - unsigned *component, bool bts) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - assert(path.path[0]->deref_type == nir_deref_type_var); - nir_deref_instr **p = &path.path[1]; - - /* For arrayed I/O (e.g., per-vertex input arrays in geometry shader - * inputs), skip the outermost array index. Process the rest normally. - */ - if (array_index != NULL) { - assert((*p)->deref_type == nir_deref_type_array); - *array_index = nir_ssa_for_src(b, (*p)->arr.index, 1); - p++; - } - - if (path.path[0]->var->data.compact) { - assert((*p)->deref_type == nir_deref_type_array); - assert(glsl_type_is_scalar((*p)->type)); - - /* We always lower indirect dereferences for "compact" array vars. */ - const unsigned index = nir_src_as_uint((*p)->arr.index); - const unsigned total_offset = *component + index; - const unsigned slot_offset = total_offset / 4; - *component = total_offset % 4; - return nir_imm_int(b, type_size(glsl_vec4_type(), bts) * slot_offset); - } - - /* Just emit code and let constant-folding go to town */ - nir_ssa_def *offset = nir_imm_int(b, 0); - - for (; *p; p++) { - if ((*p)->deref_type == nir_deref_type_array) { - unsigned size = type_size((*p)->type, bts); - - nir_ssa_def *mul = - nir_amul_imm(b, nir_ssa_for_src(b, (*p)->arr.index, 1), size); - - offset = nir_iadd(b, offset, mul); - } else if ((*p)->deref_type == nir_deref_type_struct) { - /* p starts at path[1], so this is safe */ - nir_deref_instr *parent = *(p - 1); - - unsigned field_offset = 0; - for (unsigned i = 0; i < (*p)->strct.index; i++) { - field_offset += type_size(glsl_get_struct_field(parent->type, i), bts); - } - offset = nir_iadd_imm(b, offset, field_offset); - } else { - unreachable("Unsupported deref type"); - } - } - - nir_deref_path_finish(&path); - - return offset; -} - -static nir_ssa_def * -emit_load(struct lower_io_state *state, - nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset, - unsigned component, unsigned num_components, unsigned bit_size, - nir_alu_type dest_type) -{ - nir_builder *b = &state->builder; - const nir_shader *nir = b->shader; - nir_variable_mode mode = var->data.mode; - nir_ssa_def *barycentric = NULL; - - nir_intrinsic_op op; - switch (mode) { - case nir_var_shader_in: - if (nir->info.stage == MESA_SHADER_FRAGMENT && - nir->options->use_interpolated_input_intrinsics && - var->data.interpolation != INTERP_MODE_FLAT && - !var->data.per_primitive) { - if (var->data.interpolation == INTERP_MODE_EXPLICIT) { - assert(array_index != NULL); - op = nir_intrinsic_load_input_vertex; - } else { - assert(array_index == NULL); - - nir_intrinsic_op bary_op; - if (var->data.sample) - bary_op = nir_intrinsic_load_barycentric_sample; - else if (var->data.centroid) - bary_op = nir_intrinsic_load_barycentric_centroid; - else - bary_op = nir_intrinsic_load_barycentric_pixel; - - barycentric = nir_load_barycentric(&state->builder, bary_op, - var->data.interpolation); - op = nir_intrinsic_load_interpolated_input; - } - } else { - op = array_index ? nir_intrinsic_load_per_vertex_input : - nir_intrinsic_load_input; - } - break; - case nir_var_shader_out: - op = !array_index ? nir_intrinsic_load_output : - var->data.per_primitive ? nir_intrinsic_load_per_primitive_output : - nir_intrinsic_load_per_vertex_output; - break; - case nir_var_uniform: - op = nir_intrinsic_load_uniform; - break; - default: - unreachable("Unknown variable mode"); - } - - nir_intrinsic_instr *load = - nir_intrinsic_instr_create(state->builder.shader, op); - load->num_components = num_components; - - nir_intrinsic_set_base(load, var->data.driver_location); - if (mode == nir_var_shader_in || mode == nir_var_shader_out) - nir_intrinsic_set_component(load, component); - - if (load->intrinsic == nir_intrinsic_load_uniform) - nir_intrinsic_set_range(load, - state->type_size(var->type, var->data.bindless)); - - if (nir_intrinsic_has_access(load)) - nir_intrinsic_set_access(load, var->data.access); - - nir_intrinsic_set_dest_type(load, dest_type); - - if (load->intrinsic != nir_intrinsic_load_uniform) { - nir_io_semantics semantics = {0}; - semantics.location = var->data.location; - semantics.num_slots = get_number_of_slots(state, var); - semantics.fb_fetch_output = var->data.fb_fetch_output; - semantics.medium_precision = - var->data.precision == GLSL_PRECISION_MEDIUM || - var->data.precision == GLSL_PRECISION_LOW; - nir_intrinsic_set_io_semantics(load, semantics); - } - - if (array_index) { - load->src[0] = nir_src_for_ssa(array_index); - load->src[1] = nir_src_for_ssa(offset); - } else if (barycentric) { - load->src[0] = nir_src_for_ssa(barycentric); - load->src[1] = nir_src_for_ssa(offset); - } else { - load->src[0] = nir_src_for_ssa(offset); - } - - nir_ssa_dest_init(&load->instr, &load->dest, - num_components, bit_size, NULL); - nir_builder_instr_insert(b, &load->instr); - - return &load->dest.ssa; -} - -static nir_ssa_def * -lower_load(nir_intrinsic_instr *intrin, struct lower_io_state *state, - nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset, - unsigned component, const struct glsl_type *type) -{ - assert(intrin->dest.is_ssa); - if (intrin->dest.ssa.bit_size == 64 && - (state->options & nir_lower_io_lower_64bit_to_32)) { - nir_builder *b = &state->builder; - - const unsigned slot_size = state->type_size(glsl_dvec_type(2), false); - - nir_ssa_def *comp64[4]; - assert(component == 0 || component == 2); - unsigned dest_comp = 0; - while (dest_comp < intrin->dest.ssa.num_components) { - const unsigned num_comps = - MIN2(intrin->dest.ssa.num_components - dest_comp, - (4 - component) / 2); - - nir_ssa_def *data32 = - emit_load(state, array_index, var, offset, component, - num_comps * 2, 32, nir_type_uint32); - for (unsigned i = 0; i < num_comps; i++) { - comp64[dest_comp + i] = - nir_pack_64_2x32(b, nir_channels(b, data32, 3 << (i * 2))); - } - - /* Only the first store has a component offset */ - component = 0; - dest_comp += num_comps; - offset = nir_iadd_imm(b, offset, slot_size); - } - - return nir_vec(b, comp64, intrin->dest.ssa.num_components); - } else if (intrin->dest.ssa.bit_size == 1) { - /* Booleans are 32-bit */ - assert(glsl_type_is_boolean(type)); - return nir_b2b1(&state->builder, - emit_load(state, array_index, var, offset, component, - intrin->dest.ssa.num_components, 32, - nir_type_bool32)); - } else { - return emit_load(state, array_index, var, offset, component, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size, - nir_get_nir_type_for_glsl_type(type)); - } -} - -static void -emit_store(struct lower_io_state *state, nir_ssa_def *data, - nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset, - unsigned component, unsigned num_components, - nir_component_mask_t write_mask, nir_alu_type src_type) -{ - nir_builder *b = &state->builder; - - assert(var->data.mode == nir_var_shader_out); - nir_intrinsic_op op = - !array_index ? nir_intrinsic_store_output : - var->data.per_primitive ? nir_intrinsic_store_per_primitive_output : - nir_intrinsic_store_per_vertex_output; - - nir_intrinsic_instr *store = - nir_intrinsic_instr_create(state->builder.shader, op); - store->num_components = num_components; - - store->src[0] = nir_src_for_ssa(data); - - nir_intrinsic_set_base(store, var->data.driver_location); - nir_intrinsic_set_component(store, component); - nir_intrinsic_set_src_type(store, src_type); - - nir_intrinsic_set_write_mask(store, write_mask); - - if (nir_intrinsic_has_access(store)) - nir_intrinsic_set_access(store, var->data.access); - - if (array_index) - store->src[1] = nir_src_for_ssa(array_index); - - store->src[array_index ? 2 : 1] = nir_src_for_ssa(offset); - - unsigned gs_streams = 0; - if (state->builder.shader->info.stage == MESA_SHADER_GEOMETRY) { - if (var->data.stream & NIR_STREAM_PACKED) { - gs_streams = var->data.stream & ~NIR_STREAM_PACKED; - } else { - assert(var->data.stream < 4); - gs_streams = 0; - for (unsigned i = 0; i < num_components; ++i) - gs_streams |= var->data.stream << (2 * i); - } - } - - nir_io_semantics semantics = {0}; - semantics.location = var->data.location; - semantics.num_slots = get_number_of_slots(state, var); - semantics.dual_source_blend_index = var->data.index; - semantics.gs_streams = gs_streams; - semantics.medium_precision = - var->data.precision == GLSL_PRECISION_MEDIUM || - var->data.precision == GLSL_PRECISION_LOW; - semantics.per_view = var->data.per_view; - semantics.invariant = var->data.invariant; - - nir_intrinsic_set_io_semantics(store, semantics); - - nir_builder_instr_insert(b, &store->instr); -} - -static void -lower_store(nir_intrinsic_instr *intrin, struct lower_io_state *state, - nir_ssa_def *array_index, nir_variable *var, nir_ssa_def *offset, - unsigned component, const struct glsl_type *type) -{ - assert(intrin->src[1].is_ssa); - if (intrin->src[1].ssa->bit_size == 64 && - (state->options & nir_lower_io_lower_64bit_to_32)) { - nir_builder *b = &state->builder; - - const unsigned slot_size = state->type_size(glsl_dvec_type(2), false); - - assert(component == 0 || component == 2); - unsigned src_comp = 0; - nir_component_mask_t write_mask = nir_intrinsic_write_mask(intrin); - while (src_comp < intrin->num_components) { - const unsigned num_comps = - MIN2(intrin->num_components - src_comp, - (4 - component) / 2); - - if (write_mask & BITFIELD_MASK(num_comps)) { - nir_ssa_def *data = - nir_channels(b, intrin->src[1].ssa, - BITFIELD_RANGE(src_comp, num_comps)); - nir_ssa_def *data32 = nir_bitcast_vector(b, data, 32); - - nir_component_mask_t write_mask32 = 0; - for (unsigned i = 0; i < num_comps; i++) { - if (write_mask & BITFIELD_MASK(num_comps) & (1 << i)) - write_mask32 |= 3 << (i * 2); - } - - emit_store(state, data32, array_index, var, offset, - component, data32->num_components, write_mask32, - nir_type_uint32); - } - - /* Only the first store has a component offset */ - component = 0; - src_comp += num_comps; - write_mask >>= num_comps; - offset = nir_iadd_imm(b, offset, slot_size); - } - } else if (intrin->dest.ssa.bit_size == 1) { - /* Booleans are 32-bit */ - assert(glsl_type_is_boolean(type)); - nir_ssa_def *b32_val = nir_b2b32(&state->builder, intrin->src[1].ssa); - emit_store(state, b32_val, array_index, var, offset, - component, intrin->num_components, - nir_intrinsic_write_mask(intrin), - nir_type_bool32); - } else { - emit_store(state, intrin->src[1].ssa, array_index, var, offset, - component, intrin->num_components, - nir_intrinsic_write_mask(intrin), - nir_get_nir_type_for_glsl_type(type)); - } -} - -static nir_ssa_def * -lower_interpolate_at(nir_intrinsic_instr *intrin, struct lower_io_state *state, - nir_variable *var, nir_ssa_def *offset, unsigned component, - const struct glsl_type *type) -{ - nir_builder *b = &state->builder; - assert(var->data.mode == nir_var_shader_in); - - /* Ignore interpolateAt() for flat variables - flat is flat. Lower - * interpolateAtVertex() for explicit variables. - */ - if (var->data.interpolation == INTERP_MODE_FLAT || - var->data.interpolation == INTERP_MODE_EXPLICIT) { - nir_ssa_def *vertex_index = NULL; - - if (var->data.interpolation == INTERP_MODE_EXPLICIT) { - assert(intrin->intrinsic == nir_intrinsic_interp_deref_at_vertex); - vertex_index = intrin->src[1].ssa; - } - - return lower_load(intrin, state, vertex_index, var, offset, component, type); - } - - /* None of the supported APIs allow interpolation on 64-bit things */ - assert(intrin->dest.is_ssa && intrin->dest.ssa.bit_size <= 32); - - nir_intrinsic_op bary_op; - switch (intrin->intrinsic) { - case nir_intrinsic_interp_deref_at_centroid: - bary_op = nir_intrinsic_load_barycentric_centroid; - break; - case nir_intrinsic_interp_deref_at_sample: - bary_op = nir_intrinsic_load_barycentric_at_sample; - break; - case nir_intrinsic_interp_deref_at_offset: - bary_op = nir_intrinsic_load_barycentric_at_offset; - break; - default: - unreachable("Bogus interpolateAt() intrinsic."); - } - - nir_intrinsic_instr *bary_setup = - nir_intrinsic_instr_create(state->builder.shader, bary_op); - - nir_ssa_dest_init(&bary_setup->instr, &bary_setup->dest, 2, 32, NULL); - nir_intrinsic_set_interp_mode(bary_setup, var->data.interpolation); - - if (intrin->intrinsic == nir_intrinsic_interp_deref_at_sample || - intrin->intrinsic == nir_intrinsic_interp_deref_at_offset || - intrin->intrinsic == nir_intrinsic_interp_deref_at_vertex) - nir_src_copy(&bary_setup->src[0], &intrin->src[1], &bary_setup->instr); - - nir_builder_instr_insert(b, &bary_setup->instr); - - nir_io_semantics semantics = {0}; - semantics.location = var->data.location; - semantics.num_slots = get_number_of_slots(state, var); - semantics.medium_precision = - var->data.precision == GLSL_PRECISION_MEDIUM || - var->data.precision == GLSL_PRECISION_LOW; - - assert(intrin->dest.is_ssa); - nir_ssa_def *load = - nir_load_interpolated_input(&state->builder, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size, - &bary_setup->dest.ssa, - offset, - .base = var->data.driver_location, - .component = component, - .io_semantics = semantics, - .dest_type = nir_type_float | intrin->dest.ssa.bit_size); - - return load; -} - -static bool -nir_lower_io_block(nir_block *block, - struct lower_io_state *state) -{ - nir_builder *b = &state->builder; - const nir_shader_compiler_options *options = b->shader->options; - bool progress = false; - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: - /* We can lower the io for this nir instrinsic */ - break; - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_vertex: - /* We can optionally lower these to load_interpolated_input */ - if (options->use_interpolated_input_intrinsics || - options->lower_interpolate_at) - break; - - default: - /* We can't lower the io for this nir instrinsic, so skip it */ - continue; - } - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_one_of(deref, state->modes)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - - b->cursor = nir_before_instr(instr); - - const bool is_arrayed = nir_is_arrayed_io(var, b->shader->info.stage); - - nir_ssa_def *offset; - nir_ssa_def *array_index = NULL; - unsigned component_offset = var->data.location_frac; - bool bindless_type_size = var->data.mode == nir_var_shader_in || - var->data.mode == nir_var_shader_out || - var->data.bindless; - - if (nir_deref_instr_is_known_out_of_bounds(deref)) { - /* Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 spec says: - * - * In the subsections described above for array, vector, matrix and - * structure accesses, any out-of-bounds access produced undefined - * behavior.... - * Out-of-bounds reads return undefined values, which - * include values from other variables of the active program or zero. - * Out-of-bounds writes may be discarded or overwrite - * other variables of the active program. - * - * GL_KHR_robustness and GL_ARB_robustness encourage us to return zero - * for reads. - * - * Otherwise get_io_offset would return out-of-bound offset which may - * result in out-of-bound loading/storing of inputs/outputs, - * that could cause issues in drivers down the line. - */ - if (intrin->intrinsic != nir_intrinsic_store_deref) { - nir_ssa_def *zero = - nir_imm_zero(b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - zero); - } - - nir_instr_remove(&intrin->instr); - progress = true; - continue; - } - - offset = get_io_offset(b, deref, is_arrayed ? &array_index : NULL, - state->type_size, &component_offset, - bindless_type_size); - - nir_ssa_def *replacement = NULL; - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - replacement = lower_load(intrin, state, array_index, var, offset, - component_offset, deref->type); - break; - - case nir_intrinsic_store_deref: - lower_store(intrin, state, array_index, var, offset, - component_offset, deref->type); - break; - - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_vertex: - assert(array_index == NULL); - replacement = lower_interpolate_at(intrin, state, var, offset, - component_offset, deref->type); - break; - - default: - continue; - } - - if (replacement) { - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - replacement); - } - nir_instr_remove(&intrin->instr); - progress = true; - } - - return progress; -} - -static bool -nir_lower_io_impl(nir_function_impl *impl, - nir_variable_mode modes, - int (*type_size)(const struct glsl_type *, bool), - nir_lower_io_options options) -{ - struct lower_io_state state; - bool progress = false; - - nir_builder_init(&state.builder, impl); - state.dead_ctx = ralloc_context(NULL); - state.modes = modes; - state.type_size = type_size; - state.options = options; - - ASSERTED nir_variable_mode supported_modes = - nir_var_shader_in | nir_var_shader_out | nir_var_uniform; - assert(!(modes & ~supported_modes)); - - nir_foreach_block(block, impl) { - progress |= nir_lower_io_block(block, &state); - } - - ralloc_free(state.dead_ctx); - - nir_metadata_preserve(impl, nir_metadata_none); - - return progress; -} - -/** Lower load/store_deref intrinsics on I/O variables to offset-based intrinsics - * - * This pass is intended to be used for cross-stage shader I/O and driver- - * managed uniforms to turn deref-based access into a simpler model using - * locations or offsets. For fragment shader inputs, it can optionally turn - * load_deref into an explicit interpolation using barycentrics coming from - * one of the load_barycentric_* intrinsics. This pass requires that all - * deref chains are complete and contain no casts. - */ -bool -nir_lower_io(nir_shader *shader, nir_variable_mode modes, - int (*type_size)(const struct glsl_type *, bool), - nir_lower_io_options options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_lower_io_impl(function->impl, modes, - type_size, options); - } - } - - return progress; -} - -static unsigned -type_scalar_size_bytes(const struct glsl_type *type) -{ - assert(glsl_type_is_vector_or_scalar(type) || - glsl_type_is_matrix(type)); - return glsl_type_is_boolean(type) ? 4 : glsl_get_bit_size(type) / 8; -} - -static nir_ssa_def * -build_addr_iadd(nir_builder *b, nir_ssa_def *addr, - nir_address_format addr_format, - nir_variable_mode modes, - nir_ssa_def *offset) -{ - assert(offset->num_components == 1); - - switch (addr_format) { - case nir_address_format_32bit_global: - case nir_address_format_64bit_global: - case nir_address_format_32bit_offset: - assert(addr->bit_size == offset->bit_size); - assert(addr->num_components == 1); - return nir_iadd(b, addr, offset); - - case nir_address_format_2x32bit_global: { - assert(addr->num_components == 2); - nir_ssa_def *lo = nir_channel(b, addr, 0); - nir_ssa_def *hi = nir_channel(b, addr, 1); - nir_ssa_def *res_lo = nir_iadd(b, lo, offset); - nir_ssa_def *carry = nir_b2i32(b, nir_ult(b, res_lo, lo)); - nir_ssa_def *res_hi = nir_iadd(b, hi, carry); - return nir_vec2(b, res_lo, res_hi); - } - - case nir_address_format_32bit_offset_as_64bit: - assert(addr->num_components == 1); - assert(offset->bit_size == 32); - return nir_u2u64(b, nir_iadd(b, nir_u2u32(b, addr), offset)); - - case nir_address_format_64bit_global_32bit_offset: - case nir_address_format_64bit_bounded_global: - assert(addr->num_components == 4); - assert(addr->bit_size == offset->bit_size); - return nir_vector_insert_imm(b, addr, nir_iadd(b, nir_channel(b, addr, 3), offset), 3); - - case nir_address_format_32bit_index_offset: - assert(addr->num_components == 2); - assert(addr->bit_size == offset->bit_size); - return nir_vector_insert_imm(b, addr, nir_iadd(b, nir_channel(b, addr, 1), offset), 1); - - case nir_address_format_32bit_index_offset_pack64: - assert(addr->num_components == 1); - assert(offset->bit_size == 32); - return nir_pack_64_2x32_split(b, - nir_iadd(b, nir_unpack_64_2x32_split_x(b, addr), offset), - nir_unpack_64_2x32_split_y(b, addr)); - - case nir_address_format_vec2_index_32bit_offset: - assert(addr->num_components == 3); - assert(offset->bit_size == 32); - return nir_vector_insert_imm(b, addr, nir_iadd(b, nir_channel(b, addr, 2), offset), 2); - - case nir_address_format_62bit_generic: - assert(addr->num_components == 1); - assert(addr->bit_size == 64); - assert(offset->bit_size == 64); - if (!(modes & ~(nir_var_function_temp | - nir_var_shader_temp | - nir_var_mem_shared))) { - /* If we're sure it's one of these modes, we can do an easy 32-bit - * addition and don't need to bother with 64-bit math. - */ - nir_ssa_def *addr32 = nir_unpack_64_2x32_split_x(b, addr); - nir_ssa_def *type = nir_unpack_64_2x32_split_y(b, addr); - addr32 = nir_iadd(b, addr32, nir_u2u32(b, offset)); - return nir_pack_64_2x32_split(b, addr32, type); - } else { - return nir_iadd(b, addr, offset); - } - - case nir_address_format_logical: - unreachable("Unsupported address format"); - } - unreachable("Invalid address format"); -} - -static unsigned -addr_get_offset_bit_size(nir_ssa_def *addr, nir_address_format addr_format) -{ - if (addr_format == nir_address_format_32bit_offset_as_64bit || - addr_format == nir_address_format_32bit_index_offset_pack64) - return 32; - return addr->bit_size; -} - -static nir_ssa_def * -build_addr_iadd_imm(nir_builder *b, nir_ssa_def *addr, - nir_address_format addr_format, - nir_variable_mode modes, - int64_t offset) -{ - return build_addr_iadd(b, addr, addr_format, modes, - nir_imm_intN_t(b, offset, - addr_get_offset_bit_size(addr, addr_format))); -} - -static nir_ssa_def * -build_addr_for_var(nir_builder *b, nir_variable *var, - nir_address_format addr_format) -{ - assert(var->data.mode & (nir_var_uniform | nir_var_mem_shared | - nir_var_mem_task_payload | - nir_var_mem_global | - nir_var_shader_temp | nir_var_function_temp | - nir_var_mem_push_const | nir_var_mem_constant)); - - const unsigned num_comps = nir_address_format_num_components(addr_format); - const unsigned bit_size = nir_address_format_bit_size(addr_format); - - switch (addr_format) { - case nir_address_format_2x32bit_global: - case nir_address_format_32bit_global: - case nir_address_format_64bit_global: { - nir_ssa_def *base_addr; - switch (var->data.mode) { - case nir_var_shader_temp: - base_addr = nir_load_scratch_base_ptr(b, num_comps, bit_size, 0); - break; - - case nir_var_function_temp: - base_addr = nir_load_scratch_base_ptr(b, num_comps, bit_size, 1); - break; - - case nir_var_mem_constant: - base_addr = nir_load_constant_base_ptr(b, num_comps, bit_size); - break; - - case nir_var_mem_shared: - base_addr = nir_load_shared_base_ptr(b, num_comps, bit_size); - break; - - case nir_var_mem_global: - base_addr = nir_load_global_base_ptr(b, num_comps, bit_size); - break; - - default: - unreachable("Unsupported variable mode"); - } - - return build_addr_iadd_imm(b, base_addr, addr_format, var->data.mode, - var->data.driver_location); - } - - case nir_address_format_32bit_offset: - assert(var->data.driver_location <= UINT32_MAX); - return nir_imm_int(b, var->data.driver_location); - - case nir_address_format_32bit_offset_as_64bit: - assert(var->data.driver_location <= UINT32_MAX); - return nir_imm_int64(b, var->data.driver_location); - - case nir_address_format_62bit_generic: - switch (var->data.mode) { - case nir_var_shader_temp: - case nir_var_function_temp: - assert(var->data.driver_location <= UINT32_MAX); - return nir_imm_intN_t(b, var->data.driver_location | 2ull << 62, 64); - - case nir_var_mem_shared: - assert(var->data.driver_location <= UINT32_MAX); - return nir_imm_intN_t(b, var->data.driver_location | 1ull << 62, 64); - - case nir_var_mem_global: - return nir_iadd_imm(b, nir_load_global_base_ptr(b, num_comps, bit_size), - var->data.driver_location); - - default: - unreachable("Unsupported variable mode"); - } - - default: - unreachable("Unsupported address format"); - } -} - -static nir_ssa_def * -build_runtime_addr_mode_check(nir_builder *b, nir_ssa_def *addr, - nir_address_format addr_format, - nir_variable_mode mode) -{ - /* The compile-time check failed; do a run-time check */ - switch (addr_format) { - case nir_address_format_62bit_generic: { - assert(addr->num_components == 1); - assert(addr->bit_size == 64); - nir_ssa_def *mode_enum = nir_ushr(b, addr, nir_imm_int(b, 62)); - switch (mode) { - case nir_var_function_temp: - case nir_var_shader_temp: - return nir_ieq_imm(b, mode_enum, 0x2); - - case nir_var_mem_shared: - return nir_ieq_imm(b, mode_enum, 0x1); - - case nir_var_mem_global: - return nir_ior(b, nir_ieq_imm(b, mode_enum, 0x0), - nir_ieq_imm(b, mode_enum, 0x3)); - - default: - unreachable("Invalid mode check intrinsic"); - } - } - - default: - unreachable("Unsupported address mode"); - } -} - -unsigned -nir_address_format_bit_size(nir_address_format addr_format) -{ - switch (addr_format) { - case nir_address_format_32bit_global: return 32; - case nir_address_format_2x32bit_global: return 32; - case nir_address_format_64bit_global: return 64; - case nir_address_format_64bit_global_32bit_offset: return 32; - case nir_address_format_64bit_bounded_global: return 32; - case nir_address_format_32bit_index_offset: return 32; - case nir_address_format_32bit_index_offset_pack64: return 64; - case nir_address_format_vec2_index_32bit_offset: return 32; - case nir_address_format_62bit_generic: return 64; - case nir_address_format_32bit_offset: return 32; - case nir_address_format_32bit_offset_as_64bit: return 64; - case nir_address_format_logical: return 32; - } - unreachable("Invalid address format"); -} - -unsigned -nir_address_format_num_components(nir_address_format addr_format) -{ - switch (addr_format) { - case nir_address_format_32bit_global: return 1; - case nir_address_format_2x32bit_global: return 2; - case nir_address_format_64bit_global: return 1; - case nir_address_format_64bit_global_32bit_offset: return 4; - case nir_address_format_64bit_bounded_global: return 4; - case nir_address_format_32bit_index_offset: return 2; - case nir_address_format_32bit_index_offset_pack64: return 1; - case nir_address_format_vec2_index_32bit_offset: return 3; - case nir_address_format_62bit_generic: return 1; - case nir_address_format_32bit_offset: return 1; - case nir_address_format_32bit_offset_as_64bit: return 1; - case nir_address_format_logical: return 1; - } - unreachable("Invalid address format"); -} - -static nir_ssa_def * -addr_to_index(nir_builder *b, nir_ssa_def *addr, - nir_address_format addr_format) -{ - switch (addr_format) { - case nir_address_format_32bit_index_offset: - assert(addr->num_components == 2); - return nir_channel(b, addr, 0); - case nir_address_format_32bit_index_offset_pack64: - return nir_unpack_64_2x32_split_y(b, addr); - case nir_address_format_vec2_index_32bit_offset: - assert(addr->num_components == 3); - return nir_channels(b, addr, 0x3); - default: unreachable("Invalid address format"); - } -} - -static nir_ssa_def * -addr_to_offset(nir_builder *b, nir_ssa_def *addr, - nir_address_format addr_format) -{ - switch (addr_format) { - case nir_address_format_32bit_index_offset: - assert(addr->num_components == 2); - return nir_channel(b, addr, 1); - case nir_address_format_32bit_index_offset_pack64: - return nir_unpack_64_2x32_split_x(b, addr); - case nir_address_format_vec2_index_32bit_offset: - assert(addr->num_components == 3); - return nir_channel(b, addr, 2); - case nir_address_format_32bit_offset: - return addr; - case nir_address_format_32bit_offset_as_64bit: - case nir_address_format_62bit_generic: - return nir_u2u32(b, addr); - default: - unreachable("Invalid address format"); - } -} - -/** Returns true if the given address format resolves to a global address */ -static bool -addr_format_is_global(nir_address_format addr_format, - nir_variable_mode mode) -{ - if (addr_format == nir_address_format_62bit_generic) - return mode == nir_var_mem_global; - - return addr_format == nir_address_format_32bit_global || - addr_format == nir_address_format_2x32bit_global || - addr_format == nir_address_format_64bit_global || - addr_format == nir_address_format_64bit_global_32bit_offset || - addr_format == nir_address_format_64bit_bounded_global; -} - -static bool -addr_format_is_offset(nir_address_format addr_format, - nir_variable_mode mode) -{ - if (addr_format == nir_address_format_62bit_generic) - return mode != nir_var_mem_global; - - return addr_format == nir_address_format_32bit_offset || - addr_format == nir_address_format_32bit_offset_as_64bit; -} - -static nir_ssa_def * -addr_to_global(nir_builder *b, nir_ssa_def *addr, - nir_address_format addr_format) -{ - switch (addr_format) { - case nir_address_format_32bit_global: - case nir_address_format_64bit_global: - case nir_address_format_62bit_generic: - assert(addr->num_components == 1); - return addr; - - case nir_address_format_2x32bit_global: - assert(addr->num_components == 2); - return addr; - - case nir_address_format_64bit_global_32bit_offset: - case nir_address_format_64bit_bounded_global: - assert(addr->num_components == 4); - return nir_iadd(b, nir_pack_64_2x32(b, nir_channels(b, addr, 0x3)), - nir_u2u64(b, nir_channel(b, addr, 3))); - - case nir_address_format_32bit_index_offset: - case nir_address_format_32bit_index_offset_pack64: - case nir_address_format_vec2_index_32bit_offset: - case nir_address_format_32bit_offset: - case nir_address_format_32bit_offset_as_64bit: - case nir_address_format_logical: - unreachable("Cannot get a 64-bit address with this address format"); - } - - unreachable("Invalid address format"); -} - -static bool -addr_format_needs_bounds_check(nir_address_format addr_format) -{ - return addr_format == nir_address_format_64bit_bounded_global; -} - -static nir_ssa_def * -addr_is_in_bounds(nir_builder *b, nir_ssa_def *addr, - nir_address_format addr_format, unsigned size) -{ - assert(addr_format == nir_address_format_64bit_bounded_global); - assert(addr->num_components == 4); - assert(size > 0); - return nir_ult(b, nir_iadd_imm(b, nir_channel(b, addr, 3), size - 1), - nir_channel(b, addr, 2)); -} - -static void -nir_get_explicit_deref_range(nir_deref_instr *deref, - nir_address_format addr_format, - uint32_t *out_base, - uint32_t *out_range) -{ - uint32_t base = 0; - uint32_t range = glsl_get_explicit_size(deref->type, false); - - while (true) { - nir_deref_instr *parent = nir_deref_instr_parent(deref); - - switch (deref->deref_type) { - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - case nir_deref_type_ptr_as_array: { - const unsigned stride = nir_deref_instr_array_stride(deref); - if (stride == 0) - goto fail; - - if (!parent) - goto fail; - - if (deref->deref_type != nir_deref_type_array_wildcard && - nir_src_is_const(deref->arr.index)) { - base += stride * nir_src_as_uint(deref->arr.index); - } else { - if (glsl_get_length(parent->type) == 0) - goto fail; - range += stride * (glsl_get_length(parent->type) - 1); - } - break; - } - - case nir_deref_type_struct: { - if (!parent) - goto fail; - - base += glsl_get_struct_field_offset(parent->type, deref->strct.index); - break; - } - - case nir_deref_type_cast: { - nir_instr *parent_instr = deref->parent.ssa->parent_instr; - - switch (parent_instr->type) { - case nir_instr_type_load_const: { - nir_load_const_instr *load = nir_instr_as_load_const(parent_instr); - - switch (addr_format) { - case nir_address_format_32bit_offset: - base += load->value[1].u32; - break; - case nir_address_format_32bit_index_offset: - base += load->value[1].u32; - break; - case nir_address_format_vec2_index_32bit_offset: - base += load->value[2].u32; - break; - default: - goto fail; - } - - *out_base = base; - *out_range = range; - return; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(parent_instr); - switch (intr->intrinsic) { - case nir_intrinsic_load_vulkan_descriptor: - /* Assume that a load_vulkan_descriptor won't contribute to an - * offset within the resource. - */ - break; - default: - goto fail; - } - - *out_base = base; - *out_range = range; - return; - } - - default: - goto fail; - } - } - - default: - goto fail; - } - - deref = parent; - } - -fail: - *out_base = 0; - *out_range = ~0; -} - -static nir_variable_mode -canonicalize_generic_modes(nir_variable_mode modes) -{ - assert(modes != 0); - if (util_bitcount(modes) == 1) - return modes; - - assert(!(modes & ~(nir_var_function_temp | nir_var_shader_temp | - nir_var_mem_shared | nir_var_mem_global))); - - /* Canonicalize by converting shader_temp to function_temp */ - if (modes & nir_var_shader_temp) { - modes &= ~nir_var_shader_temp; - modes |= nir_var_function_temp; - } - - return modes; -} - -static nir_intrinsic_op -get_store_global_op_from_addr_format(nir_address_format addr_format) -{ - if (addr_format != nir_address_format_2x32bit_global) - return nir_intrinsic_store_global; - else - return nir_intrinsic_store_global_2x32; -} - -static nir_intrinsic_op -get_load_global_op_from_addr_format(nir_address_format addr_format) -{ - if (addr_format != nir_address_format_2x32bit_global) - return nir_intrinsic_load_global; - else - return nir_intrinsic_load_global_2x32; -} - -static nir_ssa_def * -build_explicit_io_load(nir_builder *b, nir_intrinsic_instr *intrin, - nir_ssa_def *addr, nir_address_format addr_format, - nir_variable_mode modes, - uint32_t align_mul, uint32_t align_offset, - unsigned num_components) -{ - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - modes = canonicalize_generic_modes(modes); - - if (util_bitcount(modes) > 1) { - if (addr_format_is_global(addr_format, modes)) { - return build_explicit_io_load(b, intrin, addr, addr_format, - nir_var_mem_global, - align_mul, align_offset, - num_components); - } else if (modes & nir_var_function_temp) { - nir_push_if(b, build_runtime_addr_mode_check(b, addr, addr_format, - nir_var_function_temp)); - nir_ssa_def *res1 = - build_explicit_io_load(b, intrin, addr, addr_format, - nir_var_function_temp, - align_mul, align_offset, - num_components); - nir_push_else(b, NULL); - nir_ssa_def *res2 = - build_explicit_io_load(b, intrin, addr, addr_format, - modes & ~nir_var_function_temp, - align_mul, align_offset, - num_components); - nir_pop_if(b, NULL); - return nir_if_phi(b, res1, res2); - } else { - nir_push_if(b, build_runtime_addr_mode_check(b, addr, addr_format, - nir_var_mem_shared)); - assert(modes & nir_var_mem_shared); - nir_ssa_def *res1 = - build_explicit_io_load(b, intrin, addr, addr_format, - nir_var_mem_shared, - align_mul, align_offset, - num_components); - nir_push_else(b, NULL); - assert(modes & nir_var_mem_global); - nir_ssa_def *res2 = - build_explicit_io_load(b, intrin, addr, addr_format, - nir_var_mem_global, - align_mul, align_offset, - num_components); - nir_pop_if(b, NULL); - return nir_if_phi(b, res1, res2); - } - } - - assert(util_bitcount(modes) == 1); - const nir_variable_mode mode = modes; - - nir_intrinsic_op op; - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - switch (mode) { - case nir_var_mem_ubo: - if (addr_format == nir_address_format_64bit_global_32bit_offset) - op = nir_intrinsic_load_global_constant_offset; - else if (addr_format == nir_address_format_64bit_bounded_global) - op = nir_intrinsic_load_global_constant_bounded; - else if (addr_format_is_global(addr_format, mode)) - op = nir_intrinsic_load_global_constant; - else - op = nir_intrinsic_load_ubo; - break; - case nir_var_mem_ssbo: - if (addr_format_is_global(addr_format, mode)) - op = nir_intrinsic_load_global; - else - op = nir_intrinsic_load_ssbo; - break; - case nir_var_mem_global: - assert(addr_format_is_global(addr_format, mode)); - op = get_load_global_op_from_addr_format(addr_format); - break; - case nir_var_uniform: - assert(addr_format_is_offset(addr_format, mode)); - assert(b->shader->info.stage == MESA_SHADER_KERNEL); - op = nir_intrinsic_load_kernel_input; - break; - case nir_var_mem_shared: - assert(addr_format_is_offset(addr_format, mode)); - op = nir_intrinsic_load_shared; - break; - case nir_var_mem_task_payload: - assert(addr_format_is_offset(addr_format, mode)); - op = nir_intrinsic_load_task_payload; - break; - case nir_var_shader_temp: - case nir_var_function_temp: - if (addr_format_is_offset(addr_format, mode)) { - op = nir_intrinsic_load_scratch; - } else { - assert(addr_format_is_global(addr_format, mode)); - op = get_load_global_op_from_addr_format(addr_format); - } - break; - case nir_var_mem_push_const: - assert(addr_format == nir_address_format_32bit_offset); - op = nir_intrinsic_load_push_constant; - break; - case nir_var_mem_constant: - if (addr_format_is_offset(addr_format, mode)) { - op = nir_intrinsic_load_constant; - } else { - assert(addr_format_is_global(addr_format, mode)); - op = get_load_global_op_from_addr_format(addr_format); - } - break; - default: - unreachable("Unsupported explicit IO variable mode"); - } - break; - - case nir_intrinsic_load_deref_block_intel: - switch (mode) { - case nir_var_mem_ssbo: - if (addr_format_is_global(addr_format, mode)) - op = nir_intrinsic_load_global_block_intel; - else - op = nir_intrinsic_load_ssbo_block_intel; - break; - case nir_var_mem_global: - op = nir_intrinsic_load_global_block_intel; - break; - case nir_var_mem_shared: - op = nir_intrinsic_load_shared_block_intel; - break; - default: - unreachable("Unsupported explicit IO variable mode"); - } - break; - - default: - unreachable("Invalid intrinsic"); - } - - nir_intrinsic_instr *load = nir_intrinsic_instr_create(b->shader, op); - - if (op == nir_intrinsic_load_global_constant_offset) { - assert(addr_format == nir_address_format_64bit_global_32bit_offset); - load->src[0] = nir_src_for_ssa( - nir_pack_64_2x32(b, nir_channels(b, addr, 0x3))); - load->src[1] = nir_src_for_ssa(nir_channel(b, addr, 3)); - } else if (op == nir_intrinsic_load_global_constant_bounded) { - assert(addr_format == nir_address_format_64bit_bounded_global); - load->src[0] = nir_src_for_ssa( - nir_pack_64_2x32(b, nir_channels(b, addr, 0x3))); - load->src[1] = nir_src_for_ssa(nir_channel(b, addr, 3)); - load->src[2] = nir_src_for_ssa(nir_channel(b, addr, 2)); - } else if (addr_format_is_global(addr_format, mode)) { - load->src[0] = nir_src_for_ssa(addr_to_global(b, addr, addr_format)); - } else if (addr_format_is_offset(addr_format, mode)) { - assert(addr->num_components == 1); - load->src[0] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format)); - } else { - load->src[0] = nir_src_for_ssa(addr_to_index(b, addr, addr_format)); - load->src[1] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format)); - } - - if (nir_intrinsic_has_access(load)) - nir_intrinsic_set_access(load, nir_intrinsic_access(intrin)); - - if (op == nir_intrinsic_load_constant) { - nir_intrinsic_set_base(load, 0); - nir_intrinsic_set_range(load, b->shader->constant_data_size); - } else if (op == nir_intrinsic_load_kernel_input) { - nir_intrinsic_set_base(load, 0); - nir_intrinsic_set_range(load, b->shader->num_uniforms); - } else if (mode == nir_var_mem_push_const) { - /* Push constants are required to be able to be chased back to the - * variable so we can provide a base/range. - */ - nir_variable *var = nir_deref_instr_get_variable(deref); - nir_intrinsic_set_base(load, 0); - nir_intrinsic_set_range(load, glsl_get_explicit_size(var->type, false)); - } - - unsigned bit_size = intrin->dest.ssa.bit_size; - if (bit_size == 1) { - /* TODO: Make the native bool bit_size an option. */ - bit_size = 32; - } - - if (nir_intrinsic_has_align(load)) - nir_intrinsic_set_align(load, align_mul, align_offset); - - if (nir_intrinsic_has_range_base(load)) { - unsigned base, range; - nir_get_explicit_deref_range(deref, addr_format, &base, &range); - nir_intrinsic_set_range_base(load, base); - nir_intrinsic_set_range(load, range); - } - - assert(intrin->dest.is_ssa); - load->num_components = num_components; - nir_ssa_dest_init(&load->instr, &load->dest, num_components, - bit_size, NULL); - - assert(bit_size % 8 == 0); - - nir_ssa_def *result; - if (addr_format_needs_bounds_check(addr_format) && - op != nir_intrinsic_load_global_constant_bounded) { - /* We don't need to bounds-check global_constant_bounded because bounds - * checking is handled by the intrinsic itself. - * - * The Vulkan spec for robustBufferAccess gives us quite a few options - * as to what we can do with an OOB read. Unfortunately, returning - * undefined values isn't one of them so we return an actual zero. - */ - nir_ssa_def *zero = nir_imm_zero(b, load->num_components, bit_size); - - /* TODO: Better handle block_intel. */ - const unsigned load_size = (bit_size / 8) * load->num_components; - nir_push_if(b, addr_is_in_bounds(b, addr, addr_format, load_size)); - - nir_builder_instr_insert(b, &load->instr); - - nir_pop_if(b, NULL); - - result = nir_if_phi(b, &load->dest.ssa, zero); - } else { - nir_builder_instr_insert(b, &load->instr); - result = &load->dest.ssa; - } - - if (intrin->dest.ssa.bit_size == 1) { - /* For shared, we can go ahead and use NIR's and/or the back-end's - * standard encoding for booleans rather than forcing a 0/1 boolean. - * This should save an instruction or two. - */ - if (mode == nir_var_mem_shared || - mode == nir_var_shader_temp || - mode == nir_var_function_temp) - result = nir_b2b1(b, result); - else - result = nir_i2b(b, result); - } - - return result; -} - -static void -build_explicit_io_store(nir_builder *b, nir_intrinsic_instr *intrin, - nir_ssa_def *addr, nir_address_format addr_format, - nir_variable_mode modes, - uint32_t align_mul, uint32_t align_offset, - nir_ssa_def *value, nir_component_mask_t write_mask) -{ - modes = canonicalize_generic_modes(modes); - - if (util_bitcount(modes) > 1) { - if (addr_format_is_global(addr_format, modes)) { - build_explicit_io_store(b, intrin, addr, addr_format, - nir_var_mem_global, - align_mul, align_offset, - value, write_mask); - } else if (modes & nir_var_function_temp) { - nir_push_if(b, build_runtime_addr_mode_check(b, addr, addr_format, - nir_var_function_temp)); - build_explicit_io_store(b, intrin, addr, addr_format, - nir_var_function_temp, - align_mul, align_offset, - value, write_mask); - nir_push_else(b, NULL); - build_explicit_io_store(b, intrin, addr, addr_format, - modes & ~nir_var_function_temp, - align_mul, align_offset, - value, write_mask); - nir_pop_if(b, NULL); - } else { - nir_push_if(b, build_runtime_addr_mode_check(b, addr, addr_format, - nir_var_mem_shared)); - assert(modes & nir_var_mem_shared); - build_explicit_io_store(b, intrin, addr, addr_format, - nir_var_mem_shared, - align_mul, align_offset, - value, write_mask); - nir_push_else(b, NULL); - assert(modes & nir_var_mem_global); - build_explicit_io_store(b, intrin, addr, addr_format, - nir_var_mem_global, - align_mul, align_offset, - value, write_mask); - nir_pop_if(b, NULL); - } - return; - } - - assert(util_bitcount(modes) == 1); - const nir_variable_mode mode = modes; - - nir_intrinsic_op op; - switch (intrin->intrinsic) { - case nir_intrinsic_store_deref: - assert(write_mask != 0); - - switch (mode) { - case nir_var_mem_ssbo: - if (addr_format_is_global(addr_format, mode)) - op = get_store_global_op_from_addr_format(addr_format); - else - op = nir_intrinsic_store_ssbo; - break; - case nir_var_mem_global: - assert(addr_format_is_global(addr_format, mode)); - op = get_store_global_op_from_addr_format(addr_format); - break; - case nir_var_mem_shared: - assert(addr_format_is_offset(addr_format, mode)); - op = nir_intrinsic_store_shared; - break; - case nir_var_mem_task_payload: - assert(addr_format_is_offset(addr_format, mode)); - op = nir_intrinsic_store_task_payload; - break; - case nir_var_shader_temp: - case nir_var_function_temp: - if (addr_format_is_offset(addr_format, mode)) { - op = nir_intrinsic_store_scratch; - } else { - assert(addr_format_is_global(addr_format, mode)); - op = get_store_global_op_from_addr_format(addr_format); - } - break; - default: - unreachable("Unsupported explicit IO variable mode"); - } - break; - - case nir_intrinsic_store_deref_block_intel: - assert(write_mask == 0); - - switch (mode) { - case nir_var_mem_ssbo: - if (addr_format_is_global(addr_format, mode)) - op = nir_intrinsic_store_global_block_intel; - else - op = nir_intrinsic_store_ssbo_block_intel; - break; - case nir_var_mem_global: - op = nir_intrinsic_store_global_block_intel; - break; - case nir_var_mem_shared: - op = nir_intrinsic_store_shared_block_intel; - break; - default: - unreachable("Unsupported explicit IO variable mode"); - } - break; - - default: - unreachable("Invalid intrinsic"); - } - - nir_intrinsic_instr *store = nir_intrinsic_instr_create(b->shader, op); - - if (value->bit_size == 1) { - /* For shared, we can go ahead and use NIR's and/or the back-end's - * standard encoding for booleans rather than forcing a 0/1 boolean. - * This should save an instruction or two. - * - * TODO: Make the native bool bit_size an option. - */ - if (mode == nir_var_mem_shared || - mode == nir_var_shader_temp || - mode == nir_var_function_temp) - value = nir_b2b32(b, value); - else - value = nir_b2iN(b, value, 32); - } - - store->src[0] = nir_src_for_ssa(value); - if (addr_format_is_global(addr_format, mode)) { - store->src[1] = nir_src_for_ssa(addr_to_global(b, addr, addr_format)); - } else if (addr_format_is_offset(addr_format, mode)) { - assert(addr->num_components == 1); - store->src[1] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format)); - } else { - store->src[1] = nir_src_for_ssa(addr_to_index(b, addr, addr_format)); - store->src[2] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format)); - } - - nir_intrinsic_set_write_mask(store, write_mask); - - if (nir_intrinsic_has_access(store)) - nir_intrinsic_set_access(store, nir_intrinsic_access(intrin)); - - nir_intrinsic_set_align(store, align_mul, align_offset); - - assert(value->num_components == 1 || - value->num_components == intrin->num_components); - store->num_components = value->num_components; - - assert(value->bit_size % 8 == 0); - - if (addr_format_needs_bounds_check(addr_format)) { - /* TODO: Better handle block_intel. */ - const unsigned store_size = (value->bit_size / 8) * store->num_components; - nir_push_if(b, addr_is_in_bounds(b, addr, addr_format, store_size)); - - nir_builder_instr_insert(b, &store->instr); - - nir_pop_if(b, NULL); - } else { - nir_builder_instr_insert(b, &store->instr); - } -} - -static nir_ssa_def * -build_explicit_io_atomic(nir_builder *b, nir_intrinsic_instr *intrin, - nir_ssa_def *addr, nir_address_format addr_format, - nir_variable_mode modes) -{ - modes = canonicalize_generic_modes(modes); - - if (util_bitcount(modes) > 1) { - if (addr_format_is_global(addr_format, modes)) { - return build_explicit_io_atomic(b, intrin, addr, addr_format, - nir_var_mem_global); - } else if (modes & nir_var_function_temp) { - nir_push_if(b, build_runtime_addr_mode_check(b, addr, addr_format, - nir_var_function_temp)); - nir_ssa_def *res1 = - build_explicit_io_atomic(b, intrin, addr, addr_format, - nir_var_function_temp); - nir_push_else(b, NULL); - nir_ssa_def *res2 = - build_explicit_io_atomic(b, intrin, addr, addr_format, - modes & ~nir_var_function_temp); - nir_pop_if(b, NULL); - return nir_if_phi(b, res1, res2); - } else { - nir_push_if(b, build_runtime_addr_mode_check(b, addr, addr_format, - nir_var_mem_shared)); - assert(modes & nir_var_mem_shared); - nir_ssa_def *res1 = - build_explicit_io_atomic(b, intrin, addr, addr_format, - nir_var_mem_shared); - nir_push_else(b, NULL); - assert(modes & nir_var_mem_global); - nir_ssa_def *res2 = - build_explicit_io_atomic(b, intrin, addr, addr_format, - nir_var_mem_global); - nir_pop_if(b, NULL); - return nir_if_phi(b, res1, res2); - } - } - - assert(util_bitcount(modes) == 1); - const nir_variable_mode mode = modes; - - const unsigned num_data_srcs = - nir_intrinsic_infos[intrin->intrinsic].num_srcs - 1; - - nir_intrinsic_op op; - switch (mode) { - case nir_var_mem_ssbo: - if (addr_format_is_global(addr_format, mode)) - op = global_atomic_for_deref(addr_format, intrin->intrinsic); - else - op = ssbo_atomic_for_deref(intrin->intrinsic); - break; - case nir_var_mem_global: - assert(addr_format_is_global(addr_format, mode)); - op = global_atomic_for_deref(addr_format, intrin->intrinsic); - break; - case nir_var_mem_shared: - assert(addr_format_is_offset(addr_format, mode)); - op = shared_atomic_for_deref(intrin->intrinsic); - break; - case nir_var_mem_task_payload: - assert(addr_format_is_offset(addr_format, mode)); - op = task_payload_atomic_for_deref(intrin->intrinsic); - break; - default: - unreachable("Unsupported explicit IO variable mode"); - } - - nir_intrinsic_instr *atomic = nir_intrinsic_instr_create(b->shader, op); - - unsigned src = 0; - if (addr_format_is_global(addr_format, mode)) { - atomic->src[src++] = nir_src_for_ssa(addr_to_global(b, addr, addr_format)); - } else if (addr_format_is_offset(addr_format, mode)) { - assert(addr->num_components == 1); - atomic->src[src++] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format)); - } else { - atomic->src[src++] = nir_src_for_ssa(addr_to_index(b, addr, addr_format)); - atomic->src[src++] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format)); - } - for (unsigned i = 0; i < num_data_srcs; i++) { - atomic->src[src++] = nir_src_for_ssa(intrin->src[1 + i].ssa); - } - - /* Global atomics don't have access flags because they assume that the - * address may be non-uniform. - */ - if (nir_intrinsic_has_access(atomic)) - nir_intrinsic_set_access(atomic, nir_intrinsic_access(intrin)); - - assert(intrin->dest.ssa.num_components == 1); - nir_ssa_dest_init(&atomic->instr, &atomic->dest, - 1, intrin->dest.ssa.bit_size, NULL); - - assert(atomic->dest.ssa.bit_size % 8 == 0); - - if (addr_format_needs_bounds_check(addr_format)) { - const unsigned atomic_size = atomic->dest.ssa.bit_size / 8; - nir_push_if(b, addr_is_in_bounds(b, addr, addr_format, atomic_size)); - - nir_builder_instr_insert(b, &atomic->instr); - - nir_pop_if(b, NULL); - return nir_if_phi(b, &atomic->dest.ssa, - nir_ssa_undef(b, 1, atomic->dest.ssa.bit_size)); - } else { - nir_builder_instr_insert(b, &atomic->instr); - return &atomic->dest.ssa; - } -} - -nir_ssa_def * -nir_explicit_io_address_from_deref(nir_builder *b, nir_deref_instr *deref, - nir_ssa_def *base_addr, - nir_address_format addr_format) -{ - assert(deref->dest.is_ssa); - switch (deref->deref_type) { - case nir_deref_type_var: - return build_addr_for_var(b, deref->var, addr_format); - - case nir_deref_type_ptr_as_array: - case nir_deref_type_array: { - unsigned stride = nir_deref_instr_array_stride(deref); - assert(stride > 0); - - unsigned offset_bit_size = addr_get_offset_bit_size(base_addr, addr_format); - nir_ssa_def *index = nir_ssa_for_src(b, deref->arr.index, 1); - nir_ssa_def *offset; - - /* If the access chain has been declared in-bounds, then we know it doesn't - * overflow the type. For nir_deref_type_array, this implies it cannot be - * negative. Also, since types in NIR have a maximum 32-bit size, we know the - * final result will fit in a 32-bit value so we can convert the index to - * 32-bit before multiplying and save ourselves from a 64-bit multiply. - */ - if (deref->arr.in_bounds && deref->deref_type == nir_deref_type_array) { - index = nir_u2u32(b, index); - offset = nir_u2uN(b, nir_amul_imm(b, index, stride), offset_bit_size); - } else { - index = nir_i2iN(b, index, offset_bit_size); - offset = nir_amul_imm(b, index, stride); - } - - return build_addr_iadd(b, base_addr, addr_format, deref->modes, offset); - } - - case nir_deref_type_array_wildcard: - unreachable("Wildcards should be lowered by now"); - break; - - case nir_deref_type_struct: { - nir_deref_instr *parent = nir_deref_instr_parent(deref); - int offset = glsl_get_struct_field_offset(parent->type, - deref->strct.index); - assert(offset >= 0); - return build_addr_iadd_imm(b, base_addr, addr_format, - deref->modes, offset); - } - - case nir_deref_type_cast: - /* Nothing to do here */ - return base_addr; - } - - unreachable("Invalid NIR deref type"); -} - -void -nir_lower_explicit_io_instr(nir_builder *b, - nir_intrinsic_instr *intrin, - nir_ssa_def *addr, - nir_address_format addr_format) -{ - b->cursor = nir_after_instr(&intrin->instr); - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - unsigned vec_stride = glsl_get_explicit_stride(deref->type); - unsigned scalar_size = type_scalar_size_bytes(deref->type); - assert(vec_stride == 0 || glsl_type_is_vector(deref->type)); - assert(vec_stride == 0 || vec_stride >= scalar_size); - - uint32_t align_mul, align_offset; - if (!nir_get_explicit_deref_align(deref, true, &align_mul, &align_offset)) { - /* If we don't have an alignment from the deref, assume scalar */ - align_mul = scalar_size; - align_offset = 0; - } - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - nir_ssa_def *value; - if (vec_stride > scalar_size) { - nir_ssa_def *comps[NIR_MAX_VEC_COMPONENTS] = { NULL, }; - for (unsigned i = 0; i < intrin->num_components; i++) { - unsigned comp_offset = i * vec_stride; - nir_ssa_def *comp_addr = build_addr_iadd_imm(b, addr, addr_format, - deref->modes, - comp_offset); - comps[i] = build_explicit_io_load(b, intrin, comp_addr, - addr_format, deref->modes, - align_mul, - (align_offset + comp_offset) % - align_mul, - 1); - } - value = nir_vec(b, comps, intrin->num_components); - } else { - value = build_explicit_io_load(b, intrin, addr, addr_format, - deref->modes, align_mul, align_offset, - intrin->num_components); - } - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, value); - break; - } - - case nir_intrinsic_store_deref: { - assert(intrin->src[1].is_ssa); - nir_ssa_def *value = intrin->src[1].ssa; - nir_component_mask_t write_mask = nir_intrinsic_write_mask(intrin); - if (vec_stride > scalar_size) { - for (unsigned i = 0; i < intrin->num_components; i++) { - if (!(write_mask & (1 << i))) - continue; - - unsigned comp_offset = i * vec_stride; - nir_ssa_def *comp_addr = build_addr_iadd_imm(b, addr, addr_format, - deref->modes, - comp_offset); - build_explicit_io_store(b, intrin, comp_addr, addr_format, - deref->modes, align_mul, - (align_offset + comp_offset) % align_mul, - nir_channel(b, value, i), 1); - } - } else { - build_explicit_io_store(b, intrin, addr, addr_format, - deref->modes, align_mul, align_offset, - value, write_mask); - } - break; - } - - case nir_intrinsic_load_deref_block_intel: { - nir_ssa_def *value = build_explicit_io_load(b, intrin, addr, addr_format, - deref->modes, - align_mul, align_offset, - intrin->num_components); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, value); - break; - } - - case nir_intrinsic_store_deref_block_intel: { - assert(intrin->src[1].is_ssa); - nir_ssa_def *value = intrin->src[1].ssa; - const nir_component_mask_t write_mask = 0; - build_explicit_io_store(b, intrin, addr, addr_format, - deref->modes, align_mul, align_offset, - value, write_mask); - break; - } - - default: { - nir_ssa_def *value = - build_explicit_io_atomic(b, intrin, addr, addr_format, deref->modes); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, value); - break; - } - } - - nir_instr_remove(&intrin->instr); -} - -bool -nir_get_explicit_deref_align(nir_deref_instr *deref, - bool default_to_type_align, - uint32_t *align_mul, - uint32_t *align_offset) -{ - if (deref->deref_type == nir_deref_type_var) { - /* If we see a variable, align_mul is effectively infinite because we - * know the offset exactly (up to the offset of the base pointer for the - * given variable mode). We have to pick something so we choose 256B - * as an arbitrary alignment which seems high enough for any reasonable - * wide-load use-case. Back-ends should clamp alignments down if 256B - * is too large for some reason. - */ - *align_mul = 256; - *align_offset = deref->var->data.driver_location % 256; - return true; - } - - /* If we're a cast deref that has an alignment, use that. */ - if (deref->deref_type == nir_deref_type_cast && deref->cast.align_mul > 0) { - *align_mul = deref->cast.align_mul; - *align_offset = deref->cast.align_offset; - return true; - } - - /* Otherwise, we need to compute the alignment based on the parent */ - nir_deref_instr *parent = nir_deref_instr_parent(deref); - if (parent == NULL) { - assert(deref->deref_type == nir_deref_type_cast); - if (default_to_type_align) { - /* If we don't have a parent, assume the type's alignment, if any. */ - unsigned type_align = glsl_get_explicit_alignment(deref->type); - if (type_align == 0) - return false; - - *align_mul = type_align; - *align_offset = 0; - return true; - } else { - return false; - } - } - - uint32_t parent_mul, parent_offset; - if (!nir_get_explicit_deref_align(parent, default_to_type_align, - &parent_mul, &parent_offset)) - return false; - - switch (deref->deref_type) { - case nir_deref_type_var: - unreachable("Handled above"); - - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - case nir_deref_type_ptr_as_array: { - const unsigned stride = nir_deref_instr_array_stride(deref); - if (stride == 0) - return false; - - if (deref->deref_type != nir_deref_type_array_wildcard && - nir_src_is_const(deref->arr.index)) { - unsigned offset = nir_src_as_uint(deref->arr.index) * stride; - *align_mul = parent_mul; - *align_offset = (parent_offset + offset) % parent_mul; - } else { - /* If this is a wildcard or an indirect deref, we have to go with the - * power-of-two gcd. - */ - *align_mul = MIN2(parent_mul, 1 << (ffs(stride) - 1)); - *align_offset = parent_offset % *align_mul; - } - return true; - } - - case nir_deref_type_struct: { - const int offset = glsl_get_struct_field_offset(parent->type, - deref->strct.index); - if (offset < 0) - return false; - - *align_mul = parent_mul; - *align_offset = (parent_offset + offset) % parent_mul; - return true; - } - - case nir_deref_type_cast: - /* We handled the explicit alignment case above. */ - assert(deref->cast.align_mul == 0); - *align_mul = parent_mul; - *align_offset = parent_offset; - return true; - } - - unreachable("Invalid deref_instr_type"); -} - -static void -lower_explicit_io_deref(nir_builder *b, nir_deref_instr *deref, - nir_address_format addr_format) -{ - /* Ignore samplers/textures, because they are handled by other passes like `nir_lower_samplers`. - * Also do it only for those being uniforms, otherwise it will break GL bindless textures handles - * stored in UBOs. - */ - if (nir_deref_mode_is_in_set(deref, nir_var_uniform) && - (glsl_type_is_sampler(deref->type) || - glsl_type_is_texture(deref->type))) - return; - - /* Just delete the deref if it's not used. We can't use - * nir_deref_instr_remove_if_unused here because it may remove more than - * one deref which could break our list walking since we walk the list - * backwards. - */ - if (nir_ssa_def_is_unused(&deref->dest.ssa)) { - nir_instr_remove(&deref->instr); - return; - } - - b->cursor = nir_after_instr(&deref->instr); - - nir_ssa_def *base_addr = NULL; - if (deref->deref_type != nir_deref_type_var) { - assert(deref->parent.is_ssa); - base_addr = deref->parent.ssa; - } - - nir_ssa_def *addr = nir_explicit_io_address_from_deref(b, deref, base_addr, - addr_format); - assert(addr->bit_size == deref->dest.ssa.bit_size); - assert(addr->num_components == deref->dest.ssa.num_components); - - nir_instr_remove(&deref->instr); - nir_ssa_def_rewrite_uses(&deref->dest.ssa, addr); -} - -static void -lower_explicit_io_access(nir_builder *b, nir_intrinsic_instr *intrin, - nir_address_format addr_format) -{ - assert(intrin->src[0].is_ssa); - nir_lower_explicit_io_instr(b, intrin, intrin->src[0].ssa, addr_format); -} - -static void -lower_explicit_io_array_length(nir_builder *b, nir_intrinsic_instr *intrin, - nir_address_format addr_format) -{ - b->cursor = nir_after_instr(&intrin->instr); - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - - assert(glsl_type_is_array(deref->type)); - assert(glsl_get_length(deref->type) == 0); - assert(nir_deref_mode_is(deref, nir_var_mem_ssbo)); - unsigned stride = glsl_get_explicit_stride(deref->type); - assert(stride > 0); - - nir_ssa_def *addr = &deref->dest.ssa; - - nir_ssa_def *offset, *size; - switch (addr_format) { - case nir_address_format_64bit_global_32bit_offset: - case nir_address_format_64bit_bounded_global: - offset = nir_channel(b, addr, 3); - size = nir_channel(b, addr, 2); - break; - - case nir_address_format_32bit_index_offset: - case nir_address_format_32bit_index_offset_pack64: - case nir_address_format_vec2_index_32bit_offset: { - offset = addr_to_offset(b, addr, addr_format); - nir_ssa_def *index = addr_to_index(b, addr, addr_format); - unsigned access = nir_intrinsic_access(intrin); - size = nir_get_ssbo_size(b, index, .access=access); - break; - } - - default: - unreachable("Cannot determine SSBO size"); - } - - nir_ssa_def *remaining = nir_usub_sat(b, size, offset); - nir_ssa_def *arr_size = nir_udiv_imm(b, remaining, stride); - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, arr_size); - nir_instr_remove(&intrin->instr); -} - -static void -lower_explicit_io_mode_check(nir_builder *b, nir_intrinsic_instr *intrin, - nir_address_format addr_format) -{ - if (addr_format_is_global(addr_format, 0)) { - /* If the address format is always global, then the driver can use - * global addresses regardless of the mode. In that case, don't create - * a check, just whack the intrinsic to addr_mode_is and delegate to the - * driver lowering. - */ - intrin->intrinsic = nir_intrinsic_addr_mode_is; - return; - } - - assert(intrin->src[0].is_ssa); - nir_ssa_def *addr = intrin->src[0].ssa; - - b->cursor = nir_instr_remove(&intrin->instr); - - nir_ssa_def *is_mode = - build_runtime_addr_mode_check(b, addr, addr_format, - nir_intrinsic_memory_modes(intrin)); - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, is_mode); -} - -static bool -nir_lower_explicit_io_impl(nir_function_impl *impl, nir_variable_mode modes, - nir_address_format addr_format) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - /* Walk in reverse order so that we can see the full deref chain when we - * lower the access operations. We lower them assuming that the derefs - * will be turned into address calculations later. - */ - nir_foreach_block_reverse(block, impl) { - nir_foreach_instr_reverse_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (nir_deref_mode_is_in_set(deref, modes)) { - lower_explicit_io_deref(&b, deref, addr_format); - progress = true; - } - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: - case nir_intrinsic_load_deref_block_intel: - case nir_intrinsic_store_deref_block_intel: - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_fcomp_swap: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (nir_deref_mode_is_in_set(deref, modes)) { - lower_explicit_io_access(&b, intrin, addr_format); - progress = true; - } - break; - } - - case nir_intrinsic_deref_buffer_array_length: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (nir_deref_mode_is_in_set(deref, modes)) { - lower_explicit_io_array_length(&b, intrin, addr_format); - progress = true; - } - break; - } - - case nir_intrinsic_deref_mode_is: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (nir_deref_mode_is_in_set(deref, modes)) { - lower_explicit_io_mode_check(&b, intrin, addr_format); - progress = true; - } - break; - } - - case nir_intrinsic_launch_mesh_workgroups_with_payload_deref: { - if (modes & nir_var_mem_task_payload) { - /* Get address and size of the payload variable. */ - nir_deref_instr *deref = nir_src_as_deref(intrin->src[1]); - assert(deref->deref_type == nir_deref_type_var); - unsigned base = deref->var->data.explicit_location; - unsigned size = glsl_get_explicit_size(deref->var->type, false); - - /* Replace the current instruction with the explicit intrinsic. */ - nir_ssa_def *dispatch_3d = intrin->src[0].ssa; - b.cursor = nir_instr_remove(instr); - nir_launch_mesh_workgroups(&b, dispatch_3d, .base = base, .range = size); - progress = true; - } - - break; - } - - default: - break; - } - break; - } - - default: - /* Nothing to do */ - break; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_none); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -/** Lower explicitly laid out I/O access to byte offset/address intrinsics - * - * This pass is intended to be used for any I/O which touches memory external - * to the shader or which is directly visible to the client. It requires that - * all data types in the given modes have a explicit stride/offset decorations - * to tell it exactly how to calculate the offset/address for the given load, - * store, or atomic operation. If the offset/stride information does not come - * from the client explicitly (as with shared variables in GL or Vulkan), - * nir_lower_vars_to_explicit_types() can be used to add them. - * - * Unlike nir_lower_io, this pass is fully capable of handling incomplete - * pointer chains which may contain cast derefs. It does so by walking the - * deref chain backwards and simply replacing each deref, one at a time, with - * the appropriate address calculation. The pass takes a nir_address_format - * parameter which describes how the offset or address is to be represented - * during calculations. By ensuring that the address is always in a - * consistent format, pointers can safely be conjured from thin air by the - * driver, stored to variables, passed through phis, etc. - * - * The one exception to the simple algorithm described above is for handling - * row-major matrices in which case we may look down one additional level of - * the deref chain. - * - * This pass is also capable of handling OpenCL generic pointers. If the - * address mode is global, it will lower any ambiguous (more than one mode) - * access to global and pass through the deref_mode_is run-time checks as - * addr_mode_is. This assumes the driver has somehow mapped shared and - * scratch memory to the global address space. For other modes such as - * 62bit_generic, there is an enum embedded in the address and we lower - * ambiguous access to an if-ladder and deref_mode_is to a check against the - * embedded enum. If nir_lower_explicit_io is called on any shader that - * contains generic pointers, it must either be used on all of the generic - * modes or none. - */ -bool -nir_lower_explicit_io(nir_shader *shader, nir_variable_mode modes, - nir_address_format addr_format) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && - nir_lower_explicit_io_impl(function->impl, modes, addr_format)) - progress = true; - } - - return progress; -} - -static bool -nir_lower_vars_to_explicit_types_impl(nir_function_impl *impl, - nir_variable_mode modes, - glsl_type_size_align_func type_info) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (!nir_deref_mode_is_in_set(deref, modes)) - continue; - - unsigned size, alignment; - const struct glsl_type *new_type = - glsl_get_explicit_type_for_size_align(deref->type, type_info, &size, &alignment); - if (new_type != deref->type) { - progress = true; - deref->type = new_type; - } - if (deref->deref_type == nir_deref_type_cast) { - /* See also glsl_type::get_explicit_type_for_size_align() */ - unsigned new_stride = align(size, alignment); - if (new_stride != deref->cast.ptr_stride) { - deref->cast.ptr_stride = new_stride; - progress = true; - } - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs | - nir_metadata_loop_analysis); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -static bool -lower_vars_to_explicit(nir_shader *shader, - struct exec_list *vars, nir_variable_mode mode, - glsl_type_size_align_func type_info) -{ - bool progress = false; - unsigned offset; - switch (mode) { - case nir_var_uniform: - assert(shader->info.stage == MESA_SHADER_KERNEL); - offset = 0; - break; - case nir_var_function_temp: - case nir_var_shader_temp: - offset = shader->scratch_size; - break; - case nir_var_mem_shared: - offset = shader->info.shared_size; - break; - case nir_var_mem_task_payload: - offset = shader->info.task_payload_size; - break; - case nir_var_mem_global: - offset = shader->global_mem_size; - break; - case nir_var_mem_constant: - offset = shader->constant_data_size; - break; - case nir_var_shader_call_data: - case nir_var_ray_hit_attrib: - offset = 0; - break; - default: - unreachable("Unsupported mode"); - } - nir_foreach_variable_in_list(var, vars) { - if (var->data.mode != mode) - continue; - - unsigned size, align; - const struct glsl_type *explicit_type = - glsl_get_explicit_type_for_size_align(var->type, type_info, &size, &align); - - if (explicit_type != var->type) - var->type = explicit_type; - - UNUSED bool is_empty_struct = - glsl_type_is_struct_or_ifc(explicit_type) && - glsl_get_length(explicit_type) == 0; - - assert(util_is_power_of_two_nonzero(align) || is_empty_struct); - var->data.driver_location = ALIGN_POT(offset, align); - offset = var->data.driver_location + size; - progress = true; - } - - switch (mode) { - case nir_var_uniform: - assert(shader->info.stage == MESA_SHADER_KERNEL); - shader->num_uniforms = offset; - break; - case nir_var_shader_temp: - case nir_var_function_temp: - shader->scratch_size = offset; - break; - case nir_var_mem_shared: - shader->info.shared_size = offset; - break; - case nir_var_mem_task_payload: - shader->info.task_payload_size = offset; - break; - case nir_var_mem_global: - shader->global_mem_size = offset; - break; - case nir_var_mem_constant: - shader->constant_data_size = offset; - break; - case nir_var_shader_call_data: - case nir_var_ray_hit_attrib: - break; - default: - unreachable("Unsupported mode"); - } - - return progress; -} - -/* If nir_lower_vars_to_explicit_types is called on any shader that contains - * generic pointers, it must either be used on all of the generic modes or - * none. - */ -bool -nir_lower_vars_to_explicit_types(nir_shader *shader, - nir_variable_mode modes, - glsl_type_size_align_func type_info) -{ - /* TODO: Situations which need to be handled to support more modes: - * - row-major matrices - * - compact shader inputs/outputs - * - interface types - */ - ASSERTED nir_variable_mode supported = - nir_var_mem_shared | nir_var_mem_global | nir_var_mem_constant | - nir_var_shader_temp | nir_var_function_temp | nir_var_uniform | - nir_var_shader_call_data | nir_var_ray_hit_attrib | - nir_var_mem_task_payload; - assert(!(modes & ~supported) && "unsupported"); - - bool progress = false; - - if (modes & nir_var_uniform) - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_uniform, type_info); - if (modes & nir_var_mem_global) - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_mem_global, type_info); - - if (modes & nir_var_mem_shared) { - assert(!shader->info.shared_memory_explicit_layout); - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_mem_shared, type_info); - } - - if (modes & nir_var_shader_temp) - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_shader_temp, type_info); - if (modes & nir_var_mem_constant) - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_mem_constant, type_info); - if (modes & nir_var_shader_call_data) - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_shader_call_data, type_info); - if (modes & nir_var_ray_hit_attrib) - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_ray_hit_attrib, type_info); - if (modes & nir_var_mem_task_payload) - progress |= lower_vars_to_explicit(shader, &shader->variables, nir_var_mem_task_payload, type_info); - - nir_foreach_function(function, shader) { - if (function->impl) { - if (modes & nir_var_function_temp) - progress |= lower_vars_to_explicit(shader, &function->impl->locals, nir_var_function_temp, type_info); - - progress |= nir_lower_vars_to_explicit_types_impl(function->impl, modes, type_info); - } - } - - return progress; -} - -static void -write_constant(void *dst, size_t dst_size, - const nir_constant *c, const struct glsl_type *type) -{ - if (glsl_type_is_vector_or_scalar(type)) { - const unsigned num_components = glsl_get_vector_elements(type); - const unsigned bit_size = glsl_get_bit_size(type); - if (bit_size == 1) { - /* Booleans are special-cased to be 32-bit - * - * TODO: Make the native bool bit_size an option. - */ - assert(num_components * 4 <= dst_size); - for (unsigned i = 0; i < num_components; i++) { - int32_t b32 = -(int)c->values[i].b; - memcpy((char *)dst + i * 4, &b32, 4); - } - } else { - assert(bit_size >= 8 && bit_size % 8 == 0); - const unsigned byte_size = bit_size / 8; - assert(num_components * byte_size <= dst_size); - for (unsigned i = 0; i < num_components; i++) { - /* Annoyingly, thanks to packed structs, we can't make any - * assumptions about the alignment of dst. To avoid any strange - * issues with unaligned writes, we always use memcpy. - */ - memcpy((char *)dst + i * byte_size, &c->values[i], byte_size); - } - } - } else if (glsl_type_is_array_or_matrix(type)) { - const unsigned array_len = glsl_get_length(type); - const unsigned stride = glsl_get_explicit_stride(type); - assert(stride > 0); - const struct glsl_type *elem_type = glsl_get_array_element(type); - for (unsigned i = 0; i < array_len; i++) { - unsigned elem_offset = i * stride; - assert(elem_offset < dst_size); - write_constant((char *)dst + elem_offset, dst_size - elem_offset, - c->elements[i], elem_type); - } - } else { - assert(glsl_type_is_struct_or_ifc(type)); - const unsigned num_fields = glsl_get_length(type); - for (unsigned i = 0; i < num_fields; i++) { - const int field_offset = glsl_get_struct_field_offset(type, i); - assert(field_offset >= 0 && field_offset < dst_size); - const struct glsl_type *field_type = glsl_get_struct_field(type, i); - write_constant((char *)dst + field_offset, dst_size - field_offset, - c->elements[i], field_type); - } - } -} - -void -nir_gather_explicit_io_initializers(nir_shader *shader, - void *dst, size_t dst_size, - nir_variable_mode mode) -{ - /* It doesn't really make sense to gather initializers for more than one - * mode at a time. If this ever becomes well-defined, we can drop the - * assert then. - */ - assert(util_bitcount(mode) == 1); - - nir_foreach_variable_with_modes(var, shader, mode) { - assert(var->data.driver_location < dst_size); - write_constant((char *)dst + var->data.driver_location, - dst_size - var->data.driver_location, - var->constant_initializer, var->type); - } -} - -/** - * Return the offset source for a load/store intrinsic. - */ -nir_src * -nir_get_io_offset_src(nir_intrinsic_instr *instr) -{ - switch (instr->intrinsic) { - case nir_intrinsic_load_input: - case nir_intrinsic_load_output: - case nir_intrinsic_load_shared: - case nir_intrinsic_load_task_payload: - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_kernel_input: - case nir_intrinsic_load_global: - case nir_intrinsic_load_global_2x32: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_scratch: - case nir_intrinsic_load_fs_input_interp_deltas: - case nir_intrinsic_shared_atomic_add: - case nir_intrinsic_shared_atomic_and: - case nir_intrinsic_shared_atomic_comp_swap: - case nir_intrinsic_shared_atomic_exchange: - case nir_intrinsic_shared_atomic_fadd: - case nir_intrinsic_shared_atomic_fcomp_swap: - case nir_intrinsic_shared_atomic_fmax: - case nir_intrinsic_shared_atomic_fmin: - case nir_intrinsic_shared_atomic_imax: - case nir_intrinsic_shared_atomic_imin: - case nir_intrinsic_shared_atomic_or: - case nir_intrinsic_shared_atomic_umax: - case nir_intrinsic_shared_atomic_umin: - case nir_intrinsic_shared_atomic_xor: - case nir_intrinsic_task_payload_atomic_add: - case nir_intrinsic_task_payload_atomic_imin: - case nir_intrinsic_task_payload_atomic_umin: - case nir_intrinsic_task_payload_atomic_imax: - case nir_intrinsic_task_payload_atomic_umax: - case nir_intrinsic_task_payload_atomic_and: - case nir_intrinsic_task_payload_atomic_or: - case nir_intrinsic_task_payload_atomic_xor: - case nir_intrinsic_task_payload_atomic_exchange: - case nir_intrinsic_task_payload_atomic_comp_swap: - case nir_intrinsic_task_payload_atomic_fadd: - case nir_intrinsic_task_payload_atomic_fmin: - case nir_intrinsic_task_payload_atomic_fmax: - case nir_intrinsic_task_payload_atomic_fcomp_swap: - case nir_intrinsic_global_atomic_add: - case nir_intrinsic_global_atomic_and: - case nir_intrinsic_global_atomic_comp_swap: - case nir_intrinsic_global_atomic_exchange: - case nir_intrinsic_global_atomic_fadd: - case nir_intrinsic_global_atomic_fcomp_swap: - case nir_intrinsic_global_atomic_fmax: - case nir_intrinsic_global_atomic_fmin: - case nir_intrinsic_global_atomic_imax: - case nir_intrinsic_global_atomic_imin: - case nir_intrinsic_global_atomic_or: - case nir_intrinsic_global_atomic_umax: - case nir_intrinsic_global_atomic_umin: - case nir_intrinsic_global_atomic_xor: - return &instr->src[0]; - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_input_vertex: - case nir_intrinsic_load_per_vertex_input: - case nir_intrinsic_load_per_vertex_output: - case nir_intrinsic_load_per_primitive_output: - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_store_output: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_task_payload: - case nir_intrinsic_store_global: - case nir_intrinsic_store_global_2x32: - case nir_intrinsic_store_scratch: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - return &instr->src[1]; - case nir_intrinsic_store_ssbo: - case nir_intrinsic_store_per_vertex_output: - case nir_intrinsic_store_per_primitive_output: - return &instr->src[2]; - default: - return NULL; - } -} - -/** - * Return the vertex index source for a load/store per_vertex intrinsic. - */ -nir_src * -nir_get_io_arrayed_index_src(nir_intrinsic_instr *instr) -{ - switch (instr->intrinsic) { - case nir_intrinsic_load_per_vertex_input: - case nir_intrinsic_load_per_vertex_output: - case nir_intrinsic_load_per_primitive_output: - return &instr->src[0]; - case nir_intrinsic_store_per_vertex_output: - case nir_intrinsic_store_per_primitive_output: - return &instr->src[1]; - default: - return NULL; - } -} - -/** - * Return the numeric constant that identify a NULL pointer for each address - * format. - */ -const nir_const_value * -nir_address_format_null_value(nir_address_format addr_format) -{ - const static nir_const_value null_values[][NIR_MAX_VEC_COMPONENTS] = { - [nir_address_format_32bit_global] = {{0}}, - [nir_address_format_2x32bit_global] = {{0}}, - [nir_address_format_64bit_global] = {{0}}, - [nir_address_format_64bit_global_32bit_offset] = {{0}}, - [nir_address_format_64bit_bounded_global] = {{0}}, - [nir_address_format_32bit_index_offset] = {{.u32 = ~0}, {.u32 = ~0}}, - [nir_address_format_32bit_index_offset_pack64] = {{.u64 = ~0ull}}, - [nir_address_format_vec2_index_32bit_offset] = {{.u32 = ~0}, {.u32 = ~0}, {.u32 = ~0}}, - [nir_address_format_32bit_offset] = {{.u32 = ~0}}, - [nir_address_format_32bit_offset_as_64bit] = {{.u64 = ~0ull}}, - [nir_address_format_62bit_generic] = {{.u64 = 0}}, - [nir_address_format_logical] = {{.u32 = ~0}}, - }; - - assert(addr_format < ARRAY_SIZE(null_values)); - return null_values[addr_format]; -} - -nir_ssa_def * -nir_build_addr_ieq(nir_builder *b, nir_ssa_def *addr0, nir_ssa_def *addr1, - nir_address_format addr_format) -{ - switch (addr_format) { - case nir_address_format_32bit_global: - case nir_address_format_2x32bit_global: - case nir_address_format_64bit_global: - case nir_address_format_64bit_bounded_global: - case nir_address_format_32bit_index_offset: - case nir_address_format_vec2_index_32bit_offset: - case nir_address_format_32bit_offset: - case nir_address_format_62bit_generic: - return nir_ball_iequal(b, addr0, addr1); - - case nir_address_format_64bit_global_32bit_offset: - return nir_ball_iequal(b, nir_channels(b, addr0, 0xb), - nir_channels(b, addr1, 0xb)); - - case nir_address_format_32bit_offset_as_64bit: - assert(addr0->num_components == 1 && addr1->num_components == 1); - return nir_ieq(b, nir_u2u32(b, addr0), nir_u2u32(b, addr1)); - - case nir_address_format_32bit_index_offset_pack64: - assert(addr0->num_components == 1 && addr1->num_components == 1); - return nir_ball_iequal(b, nir_unpack_64_2x32(b, addr0), nir_unpack_64_2x32(b, addr1)); - - case nir_address_format_logical: - unreachable("Unsupported address format"); - } - - unreachable("Invalid address format"); -} - -nir_ssa_def * -nir_build_addr_isub(nir_builder *b, nir_ssa_def *addr0, nir_ssa_def *addr1, - nir_address_format addr_format) -{ - switch (addr_format) { - case nir_address_format_32bit_global: - case nir_address_format_64bit_global: - case nir_address_format_32bit_offset: - case nir_address_format_32bit_index_offset_pack64: - case nir_address_format_62bit_generic: - assert(addr0->num_components == 1); - assert(addr1->num_components == 1); - return nir_isub(b, addr0, addr1); - - case nir_address_format_2x32bit_global: - return nir_isub(b, addr_to_global(b, addr0, addr_format), - addr_to_global(b, addr1, addr_format)); - - case nir_address_format_32bit_offset_as_64bit: - assert(addr0->num_components == 1); - assert(addr1->num_components == 1); - return nir_u2u64(b, nir_isub(b, nir_u2u32(b, addr0), nir_u2u32(b, addr1))); - - case nir_address_format_64bit_global_32bit_offset: - case nir_address_format_64bit_bounded_global: - return nir_isub(b, addr_to_global(b, addr0, addr_format), - addr_to_global(b, addr1, addr_format)); - - case nir_address_format_32bit_index_offset: - assert(addr0->num_components == 2); - assert(addr1->num_components == 2); - /* Assume the same buffer index. */ - return nir_isub(b, nir_channel(b, addr0, 1), nir_channel(b, addr1, 1)); - - case nir_address_format_vec2_index_32bit_offset: - assert(addr0->num_components == 3); - assert(addr1->num_components == 3); - /* Assume the same buffer index. */ - return nir_isub(b, nir_channel(b, addr0, 2), nir_channel(b, addr1, 2)); - - case nir_address_format_logical: - unreachable("Unsupported address format"); - } - - unreachable("Invalid address format"); -} - -static bool -is_input(nir_intrinsic_instr *intrin) -{ - return intrin->intrinsic == nir_intrinsic_load_input || - intrin->intrinsic == nir_intrinsic_load_per_vertex_input || - intrin->intrinsic == nir_intrinsic_load_interpolated_input || - intrin->intrinsic == nir_intrinsic_load_fs_input_interp_deltas; -} - -static bool -is_output(nir_intrinsic_instr *intrin) -{ - return intrin->intrinsic == nir_intrinsic_load_output || - intrin->intrinsic == nir_intrinsic_load_per_vertex_output || - intrin->intrinsic == nir_intrinsic_load_per_primitive_output || - intrin->intrinsic == nir_intrinsic_store_output || - intrin->intrinsic == nir_intrinsic_store_per_vertex_output || - intrin->intrinsic == nir_intrinsic_store_per_primitive_output; -} - -static bool is_dual_slot(nir_intrinsic_instr *intrin) -{ - if (intrin->intrinsic == nir_intrinsic_store_output || - intrin->intrinsic == nir_intrinsic_store_per_vertex_output || - intrin->intrinsic == nir_intrinsic_store_per_primitive_output) { - return nir_src_bit_size(intrin->src[0]) == 64 && - nir_src_num_components(intrin->src[0]) >= 3; - } - - return nir_dest_bit_size(intrin->dest) == 64 && - nir_dest_num_components(intrin->dest) >= 3; -} - -/** - * This pass adds constant offsets to instr->const_index[0] for input/output - * intrinsics, and resets the offset source to 0. Non-constant offsets remain - * unchanged - since we don't know what part of a compound variable is - * accessed, we allocate storage for the entire thing. For drivers that use - * nir_lower_io_to_temporaries() before nir_lower_io(), this guarantees that - * the offset source will be 0, so that they don't have to add it in manually. - */ - -static bool -add_const_offset_to_base_block(nir_block *block, nir_builder *b, - nir_variable_mode modes) -{ - bool progress = false; - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - if (((modes & nir_var_shader_in) && is_input(intrin)) || - ((modes & nir_var_shader_out) && is_output(intrin))) { - nir_io_semantics sem = nir_intrinsic_io_semantics(intrin); - - /* NV_mesh_shader: ignore MS primitive indices. */ - if (b->shader->info.stage == MESA_SHADER_MESH && - sem.location == VARYING_SLOT_PRIMITIVE_INDICES && - !(b->shader->info.per_primitive_outputs & - BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_INDICES))) - continue; - - nir_src *offset = nir_get_io_offset_src(intrin); - - /* TODO: Better handling of per-view variables here */ - if (nir_src_is_const(*offset) && - !nir_intrinsic_io_semantics(intrin).per_view) { - unsigned off = nir_src_as_uint(*offset); - - nir_intrinsic_set_base(intrin, nir_intrinsic_base(intrin) + off); - - sem.location += off; - /* non-indirect indexing should reduce num_slots */ - sem.num_slots = is_dual_slot(intrin) ? 2 : 1; - nir_intrinsic_set_io_semantics(intrin, sem); - - b->cursor = nir_before_instr(&intrin->instr); - nir_instr_rewrite_src(&intrin->instr, offset, - nir_src_for_ssa(nir_imm_int(b, 0))); - progress = true; - } - } - } - - return progress; -} - -bool -nir_io_add_const_offset_to_base(nir_shader *nir, nir_variable_mode modes) -{ - bool progress = false; - - nir_foreach_function(f, nir) { - if (f->impl) { - bool impl_progress = false; - nir_builder b; - nir_builder_init(&b, f->impl); - nir_foreach_block(block, f->impl) { - impl_progress |= add_const_offset_to_base_block(block, &b, modes); - } - progress |= impl_progress; - if (impl_progress) - nir_metadata_preserve(f->impl, nir_metadata_block_index | nir_metadata_dominance); - else - nir_metadata_preserve(f->impl, nir_metadata_all); - } - } - - return progress; -} - -static bool -nir_lower_color_inputs(nir_shader *nir) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block (block, impl) { - nir_foreach_instr_safe (instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - if (intrin->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_shader_in)) - continue; - - b.cursor = nir_before_instr(instr); - nir_variable *var = nir_deref_instr_get_variable(deref); - nir_ssa_def *def; - - if (var->data.location == VARYING_SLOT_COL0) { - def = nir_load_color0(&b); - nir->info.fs.color0_interp = var->data.interpolation; - nir->info.fs.color0_sample = var->data.sample; - nir->info.fs.color0_centroid = var->data.centroid; - } else if (var->data.location == VARYING_SLOT_COL1) { - def = nir_load_color1(&b); - nir->info.fs.color1_interp = var->data.interpolation; - nir->info.fs.color1_sample = var->data.sample; - nir->info.fs.color1_centroid = var->data.centroid; - } else { - continue; - } - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, def); - nir_instr_remove(instr); - progress = true; - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_dominance | - nir_metadata_block_index); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - return progress; -} - -bool -nir_io_add_intrinsic_xfb_info(nir_shader *nir) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - bool progress = false; - - for (unsigned i = 0; i < NIR_MAX_XFB_BUFFERS; i++) - nir->info.xfb_stride[i] = nir->xfb_info->buffers[i].stride / 4; - - nir_foreach_block (block, impl) { - nir_foreach_instr_safe (instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (!nir_intrinsic_has_io_xfb(intr)) - continue; - - /* No indirect indexing allowed. The index is implied to be 0. */ - ASSERTED nir_src offset = *nir_get_io_offset_src(intr); - assert(nir_src_is_const(offset) && nir_src_as_uint(offset) == 0); - - /* Calling this pass for the second time shouldn't do anything. */ - if (nir_intrinsic_io_xfb(intr).out[0].num_components || - nir_intrinsic_io_xfb(intr).out[1].num_components || - nir_intrinsic_io_xfb2(intr).out[0].num_components || - nir_intrinsic_io_xfb2(intr).out[1].num_components) - continue; - - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - unsigned writemask = nir_intrinsic_write_mask(intr) << - nir_intrinsic_component(intr); - - nir_io_xfb xfb[2]; - memset(xfb, 0, sizeof(xfb)); - - for (unsigned i = 0; i < nir->xfb_info->output_count; i++) { - nir_xfb_output_info *out = &nir->xfb_info->outputs[i]; - if (out->location == sem.location) { - unsigned xfb_mask = writemask & out->component_mask; - - /*fprintf(stdout, "output%u: buffer=%u, offset=%u, location=%u, " - "component_offset=%u, component_mask=0x%x, xfb_mask=0x%x, slots=%u\n", - i, out->buffer, - out->offset, - out->location, - out->component_offset, - out->component_mask, - xfb_mask, sem.num_slots);*/ - - while (xfb_mask) { - int start, count; - u_bit_scan_consecutive_range(&xfb_mask, &start, &count); - - xfb[start / 2].out[start % 2].num_components = count; - xfb[start / 2].out[start % 2].buffer = out->buffer; - /* out->offset is relative to the first stored xfb component */ - /* start is relative to component 0 */ - xfb[start / 2].out[start % 2].offset = - out->offset / 4 - out->component_offset + start; - - progress = true; - } - } - } - - nir_intrinsic_set_io_xfb(intr, xfb[0]); - nir_intrinsic_set_io_xfb2(intr, xfb[1]); - } - } - - nir_metadata_preserve(impl, nir_metadata_all); - return progress; -} - -static int -type_size_vec4(const struct glsl_type *type, bool bindless) -{ - return glsl_count_attribute_slots(type, false); -} - -void -nir_lower_io_passes(nir_shader *nir) -{ - if (!nir->options->lower_io_variables) - return; - - bool has_indirect_inputs = - (nir->options->support_indirect_inputs >> nir->info.stage) & 0x1; - - /* Transform feedback requires that indirect outputs are lowered. */ - bool has_indirect_outputs = - (nir->options->support_indirect_outputs >> nir->info.stage) & 0x1 && - nir->xfb_info == NULL; - - if (!has_indirect_inputs || !has_indirect_outputs) { - NIR_PASS_V(nir, nir_lower_io_to_temporaries, - nir_shader_get_entrypoint(nir), !has_indirect_outputs, - !has_indirect_inputs); - - /* We need to lower all the copy_deref's introduced by lower_io_to- - * _temporaries before calling nir_lower_io. - */ - NIR_PASS_V(nir, nir_split_var_copies); - NIR_PASS_V(nir, nir_lower_var_copies); - NIR_PASS_V(nir, nir_lower_global_vars_to_local); - } - - if (nir->info.stage == MESA_SHADER_FRAGMENT && - nir->options->lower_fs_color_inputs) - NIR_PASS_V(nir, nir_lower_color_inputs); - - NIR_PASS_V(nir, nir_lower_io, nir_var_shader_out | nir_var_shader_in, - type_size_vec4, nir_lower_io_lower_64bit_to_32); - - /* nir_io_add_const_offset_to_base needs actual constants. */ - NIR_PASS_V(nir, nir_opt_constant_folding); - NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_in | - nir_var_shader_out); - - /* Lower and remove dead derefs and variables to clean up the IR. */ - NIR_PASS_V(nir, nir_lower_vars_to_ssa); - NIR_PASS_V(nir, nir_opt_dce); - NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp | - nir_var_shader_in | nir_var_shader_out, NULL); - - if (nir->xfb_info) - NIR_PASS_V(nir, nir_io_add_intrinsic_xfb_info); - - nir->info.io_lowered = true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_arrays_to_elements.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_arrays_to_elements.c deleted file mode 100644 index 3cc527f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_arrays_to_elements.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright © 2017 Timothy Arceri - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -/** @file nir_lower_io_arrays_to_elements.c - * - * Split arrays/matrices with direct indexing into individual elements. This - * will allow optimisation passes to better clean up unused elements. - * - */ - -static unsigned -get_io_offset(nir_builder *b, nir_deref_instr *deref, nir_variable *var, - unsigned *element_index, unsigned *xfb_offset, - nir_ssa_def **array_index) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - assert(path.path[0]->deref_type == nir_deref_type_var); - nir_deref_instr **p = &path.path[1]; - - /* For arrayed I/O (e.g., per-vertex input arrays in geometry shader - * inputs), skip the outermost array index. Process the rest normally. - */ - if (nir_is_arrayed_io(var, b->shader->info.stage)) { - *array_index = nir_ssa_for_src(b, (*p)->arr.index, 1); - p++; - } - - unsigned offset = 0; - *xfb_offset = 0; - for (; *p; p++) { - if ((*p)->deref_type == nir_deref_type_array) { - /* must not be indirect dereference */ - unsigned index = nir_src_as_uint((*p)->arr.index); - - unsigned size = glsl_count_attribute_slots((*p)->type, false); - offset += size * index; - - *xfb_offset += index * glsl_get_component_slots((*p)->type) * 4; - - unsigned num_elements = glsl_type_is_array((*p)->type) ? - glsl_get_aoa_size((*p)->type) : 1; - - num_elements *= glsl_type_is_matrix(glsl_without_array((*p)->type)) ? - glsl_get_matrix_columns(glsl_without_array((*p)->type)) : 1; - - *element_index += num_elements * index; - } else if ((*p)->deref_type == nir_deref_type_struct) { - /* TODO: we could also add struct splitting support to this pass */ - break; - } - } - - nir_deref_path_finish(&path); - - return offset; -} - -static nir_variable ** -get_array_elements(struct hash_table *ht, nir_variable *var, - gl_shader_stage stage) -{ - nir_variable **elements; - struct hash_entry *entry = _mesa_hash_table_search(ht, var); - if (!entry) { - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, stage)) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - unsigned num_elements = glsl_type_is_array(type) ? - glsl_get_aoa_size(type) : 1; - - num_elements *= glsl_type_is_matrix(glsl_without_array(type)) ? - glsl_get_matrix_columns(glsl_without_array(type)) : 1; - - elements = (nir_variable **) calloc(num_elements, sizeof(nir_variable *)); - _mesa_hash_table_insert(ht, var, elements); - } else { - elements = (nir_variable **) entry->data; - } - - return elements; -} - -static void -lower_array(nir_builder *b, nir_intrinsic_instr *intr, nir_variable *var, - struct hash_table *varyings) -{ - b->cursor = nir_before_instr(&intr->instr); - - if (nir_deref_instr_is_known_out_of_bounds(nir_src_as_deref(intr->src[0]))) { - /* See Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 */ - if (intr->intrinsic != nir_intrinsic_store_deref) { - nir_ssa_def *zero = nir_imm_zero(b, intr->dest.ssa.num_components, - intr->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - zero); - } - nir_instr_remove(&intr->instr); - return; - } - - nir_variable **elements = - get_array_elements(varyings, var, b->shader->info.stage); - - nir_ssa_def *array_index = NULL; - unsigned elements_index = 0; - unsigned xfb_offset = 0; - unsigned io_offset = get_io_offset(b, nir_src_as_deref(intr->src[0]), - var, &elements_index, &xfb_offset, - &array_index); - - nir_variable *element = elements[elements_index]; - if (!element) { - element = nir_variable_clone(var, b->shader); - element->data.location = var->data.location + io_offset; - - if (var->data.explicit_offset) - element->data.offset = var->data.offset + xfb_offset; - - const struct glsl_type *type = glsl_without_array(element->type); - - /* This pass also splits matrices so we need give them a new type. */ - if (glsl_type_is_matrix(type)) - type = glsl_get_column_type(type); - - if (nir_is_arrayed_io(var, b->shader->info.stage)) { - type = glsl_array_type(type, glsl_get_length(element->type), - glsl_get_explicit_stride(element->type)); - } - - element->type = type; - elements[elements_index] = element; - - nir_shader_add_variable(b->shader, element); - } - - nir_deref_instr *element_deref = nir_build_deref_var(b, element); - - if (nir_is_arrayed_io(var, b->shader->info.stage)) { - assert(array_index); - element_deref = nir_build_deref_array(b, element_deref, array_index); - } - - nir_intrinsic_instr *element_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - element_intr->num_components = intr->num_components; - element_intr->src[0] = nir_src_for_ssa(&element_deref->dest.ssa); - - if (intr->intrinsic != nir_intrinsic_store_deref) { - nir_ssa_dest_init(&element_intr->instr, &element_intr->dest, - intr->num_components, intr->dest.ssa.bit_size, NULL); - - if (intr->intrinsic == nir_intrinsic_interp_deref_at_offset || - intr->intrinsic == nir_intrinsic_interp_deref_at_sample || - intr->intrinsic == nir_intrinsic_interp_deref_at_vertex) { - nir_src_copy(&element_intr->src[1], &intr->src[1], - &element_intr->instr); - } - - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - &element_intr->dest.ssa); - } else { - nir_intrinsic_set_write_mask(element_intr, - nir_intrinsic_write_mask(intr)); - nir_src_copy(&element_intr->src[1], &intr->src[1], - &element_intr->instr); - } - - nir_builder_instr_insert(b, &element_intr->instr); - - /* Remove the old load intrinsic */ - nir_instr_remove(&intr->instr); -} - -static bool -deref_has_indirect(nir_builder *b, nir_variable *var, nir_deref_path *path) -{ - assert(path->path[0]->deref_type == nir_deref_type_var); - nir_deref_instr **p = &path->path[1]; - - if (nir_is_arrayed_io(var, b->shader->info.stage)) { - p++; - } - - for (; *p; p++) { - if ((*p)->deref_type != nir_deref_type_array) - continue; - - if (!nir_src_is_const((*p)->arr.index)) - return true; - } - - return false; -} - -/* Creates a mask of locations that contains arrays that are indexed via - * indirect indexing. - */ -static void -create_indirects_mask(nir_shader *shader, - BITSET_WORD *indirects, nir_variable_mode mode) -{ - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->intrinsic != nir_intrinsic_load_deref && - intr->intrinsic != nir_intrinsic_store_deref && - intr->intrinsic != nir_intrinsic_interp_deref_at_centroid && - intr->intrinsic != nir_intrinsic_interp_deref_at_sample && - intr->intrinsic != nir_intrinsic_interp_deref_at_offset && - intr->intrinsic != nir_intrinsic_interp_deref_at_vertex) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is(deref, mode)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - int loc = var->data.location * 4 + var->data.location_frac; - if (deref_has_indirect(&b, var, &path)) - BITSET_SET(indirects, loc); - - nir_deref_path_finish(&path); - } - } - } - } -} - -static void -lower_io_arrays_to_elements(nir_shader *shader, nir_variable_mode mask, - BITSET_WORD *indirects, - struct hash_table *varyings, - bool after_cross_stage_opts) -{ - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->intrinsic != nir_intrinsic_load_deref && - intr->intrinsic != nir_intrinsic_store_deref && - intr->intrinsic != nir_intrinsic_interp_deref_at_centroid && - intr->intrinsic != nir_intrinsic_interp_deref_at_sample && - intr->intrinsic != nir_intrinsic_interp_deref_at_offset && - intr->intrinsic != nir_intrinsic_interp_deref_at_vertex) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is_one_of(deref, mask)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - - /* Drivers assume compact arrays are, in fact, arrays. */ - if (var->data.compact) - continue; - - /* Per-view variables are expected to remain arrays. */ - if (var->data.per_view) - continue; - - /* Skip indirects */ - int loc = var->data.location * 4 + var->data.location_frac; - if (BITSET_TEST(indirects, loc)) - continue; - - nir_variable_mode mode = var->data.mode; - - const struct glsl_type *type = var->type; - if (nir_is_arrayed_io(var, b.shader->info.stage)) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - - /* Skip types we cannot split. - * - * TODO: Add support for struct splitting. - */ - if ((!glsl_type_is_array(type) && !glsl_type_is_matrix(type))|| - glsl_type_is_struct_or_ifc(glsl_without_array(type))) - continue; - - /* Skip builtins */ - if (!after_cross_stage_opts && - var->data.location < VARYING_SLOT_VAR0 && - var->data.location >= 0) - continue; - - /* Don't bother splitting if we can't opt away any unused - * elements. - */ - if (!after_cross_stage_opts && var->data.always_active_io) - continue; - - switch (intr->intrinsic) { - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_vertex: - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: - if ((mask & nir_var_shader_in && mode == nir_var_shader_in) || - (mask & nir_var_shader_out && mode == nir_var_shader_out)) - lower_array(&b, intr, var, varyings); - break; - default: - break; - } - } - } - } - } -} - -void -nir_lower_io_arrays_to_elements_no_indirects(nir_shader *shader, - bool outputs_only) -{ - struct hash_table *split_inputs = _mesa_pointer_hash_table_create(NULL); - struct hash_table *split_outputs = _mesa_pointer_hash_table_create(NULL); - - BITSET_DECLARE(indirects, 4 * VARYING_SLOT_TESS_MAX) = {0}; - - lower_io_arrays_to_elements(shader, nir_var_shader_out, - indirects, split_outputs, true); - - if (!outputs_only) { - lower_io_arrays_to_elements(shader, nir_var_shader_in, - indirects, split_inputs, true); - - /* Remove old input from the shaders inputs list */ - hash_table_foreach(split_inputs, entry) { - nir_variable *var = (nir_variable *) entry->key; - exec_node_remove(&var->node); - - free(entry->data); - } - } - - /* Remove old output from the shaders outputs list */ - hash_table_foreach(split_outputs, entry) { - nir_variable *var = (nir_variable *) entry->key; - exec_node_remove(&var->node); - - free(entry->data); - } - - _mesa_hash_table_destroy(split_inputs, NULL); - _mesa_hash_table_destroy(split_outputs, NULL); - - nir_remove_dead_derefs(shader); -} - -void -nir_lower_io_arrays_to_elements(nir_shader *producer, nir_shader *consumer) -{ - struct hash_table *split_inputs = _mesa_pointer_hash_table_create(NULL); - struct hash_table *split_outputs = _mesa_pointer_hash_table_create(NULL); - - BITSET_DECLARE(indirects, 4 * VARYING_SLOT_TESS_MAX) = {0}; - - create_indirects_mask(producer, indirects, nir_var_shader_out); - create_indirects_mask(consumer, indirects, nir_var_shader_in); - - lower_io_arrays_to_elements(producer, nir_var_shader_out, - indirects, split_outputs, false); - - lower_io_arrays_to_elements(consumer, nir_var_shader_in, - indirects, split_inputs, false); - - /* Remove old input from the shaders inputs list */ - hash_table_foreach(split_inputs, entry) { - nir_variable *var = (nir_variable *) entry->key; - exec_node_remove(&var->node); - - free(entry->data); - } - - /* Remove old output from the shaders outputs list */ - hash_table_foreach(split_outputs, entry) { - nir_variable *var = (nir_variable *) entry->key; - exec_node_remove(&var->node); - - free(entry->data); - } - - _mesa_hash_table_destroy(split_inputs, NULL); - _mesa_hash_table_destroy(split_outputs, NULL); - - nir_remove_dead_derefs(producer); - nir_remove_dead_derefs(consumer); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_scalar.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_scalar.c deleted file mode 100644 index 0458e5d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_scalar.c +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright © 2016 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -/** @file nir_lower_io_to_scalar.c - * - * Replaces nir_load_input/nir_store_output operations with num_components != - * 1 with individual per-channel operations. - */ - -static void -set_io_semantics(nir_intrinsic_instr *scalar_intr, - nir_intrinsic_instr *vec_intr, unsigned component) -{ - nir_io_semantics sem = nir_intrinsic_io_semantics(vec_intr); - sem.gs_streams = (sem.gs_streams >> (component * 2)) & 0x3; - nir_intrinsic_set_io_semantics(scalar_intr, sem); -} - -static void -lower_load_input_to_scalar(nir_builder *b, nir_intrinsic_instr *intr) -{ - b->cursor = nir_before_instr(&intr->instr); - - assert(intr->dest.is_ssa); - - nir_ssa_def *loads[NIR_MAX_VEC_COMPONENTS]; - - for (unsigned i = 0; i < intr->num_components; i++) { - nir_intrinsic_instr *chan_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - nir_ssa_dest_init(&chan_intr->instr, &chan_intr->dest, - 1, intr->dest.ssa.bit_size, NULL); - chan_intr->num_components = 1; - - nir_intrinsic_set_base(chan_intr, nir_intrinsic_base(intr)); - nir_intrinsic_set_component(chan_intr, nir_intrinsic_component(intr) + i); - nir_intrinsic_set_dest_type(chan_intr, nir_intrinsic_dest_type(intr)); - set_io_semantics(chan_intr, intr, i); - /* offset and vertex (if needed) */ - for (unsigned j = 0; j < nir_intrinsic_infos[intr->intrinsic].num_srcs; ++j) - nir_src_copy(&chan_intr->src[j], &intr->src[j], &chan_intr->instr); - - nir_builder_instr_insert(b, &chan_intr->instr); - - loads[i] = &chan_intr->dest.ssa; - } - - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - nir_vec(b, loads, intr->num_components)); - nir_instr_remove(&intr->instr); -} - -static void -lower_load_to_scalar(nir_builder *b, nir_intrinsic_instr *intr) -{ - b->cursor = nir_before_instr(&intr->instr); - - assert(intr->dest.is_ssa); - - nir_ssa_def *loads[NIR_MAX_VEC_COMPONENTS]; - nir_ssa_def *base_offset = nir_get_io_offset_src(intr)->ssa; - - for (unsigned i = 0; i < intr->num_components; i++) { - nir_intrinsic_instr *chan_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - nir_ssa_dest_init(&chan_intr->instr, &chan_intr->dest, - 1, intr->dest.ssa.bit_size, NULL); - chan_intr->num_components = 1; - - nir_intrinsic_set_align_offset(chan_intr, - (nir_intrinsic_align_offset(intr) + - i * (intr->dest.ssa.bit_size / 8)) % nir_intrinsic_align_mul(intr)); - nir_intrinsic_set_align_mul(chan_intr, nir_intrinsic_align_mul(intr)); - if (nir_intrinsic_has_access(intr)) - nir_intrinsic_set_access(chan_intr, nir_intrinsic_access(intr)); - if (nir_intrinsic_has_range(intr)) - nir_intrinsic_set_range(chan_intr, nir_intrinsic_range(intr)); - if (nir_intrinsic_has_range_base(intr)) - nir_intrinsic_set_range_base(chan_intr, nir_intrinsic_range_base(intr)); - if (nir_intrinsic_has_base(intr)) - nir_intrinsic_set_base(chan_intr, nir_intrinsic_base(intr)); - for (unsigned j = 0; j < nir_intrinsic_infos[intr->intrinsic].num_srcs - 1; j++) - nir_src_copy(&chan_intr->src[j], &intr->src[j], &chan_intr->instr); - - /* increment offset per component */ - nir_ssa_def *offset = nir_iadd_imm(b, base_offset, i * (intr->dest.ssa.bit_size / 8)); - *nir_get_io_offset_src(chan_intr) = nir_src_for_ssa(offset); - - nir_builder_instr_insert(b, &chan_intr->instr); - - loads[i] = &chan_intr->dest.ssa; - } - - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - nir_vec(b, loads, intr->num_components)); - nir_instr_remove(&intr->instr); -} - -static void -lower_store_output_to_scalar(nir_builder *b, nir_intrinsic_instr *intr) -{ - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *value = nir_ssa_for_src(b, intr->src[0], intr->num_components); - - for (unsigned i = 0; i < intr->num_components; i++) { - if (!(nir_intrinsic_write_mask(intr) & (1 << i))) - continue; - - nir_intrinsic_instr *chan_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - chan_intr->num_components = 1; - - nir_intrinsic_set_base(chan_intr, nir_intrinsic_base(intr)); - nir_intrinsic_set_write_mask(chan_intr, 0x1); - nir_intrinsic_set_component(chan_intr, nir_intrinsic_component(intr) + i); - nir_intrinsic_set_src_type(chan_intr, nir_intrinsic_src_type(intr)); - set_io_semantics(chan_intr, intr, i); - - if (nir_intrinsic_has_io_xfb(intr)) { - /* Scalarize transform feedback info. */ - unsigned component = nir_intrinsic_component(chan_intr); - - for (unsigned c = 0; c <= component; c++) { - nir_io_xfb xfb = c < 2 ? nir_intrinsic_io_xfb(intr) : - nir_intrinsic_io_xfb2(intr); - - if (component < c + xfb.out[c % 2].num_components) { - nir_io_xfb scalar_xfb; - - memset(&scalar_xfb, 0, sizeof(scalar_xfb)); - scalar_xfb.out[component % 2].num_components = 1; - scalar_xfb.out[component % 2].buffer = xfb.out[c % 2].buffer; - scalar_xfb.out[component % 2].offset = xfb.out[c % 2].offset + - component - c; - if (component < 2) - nir_intrinsic_set_io_xfb(chan_intr, scalar_xfb); - else - nir_intrinsic_set_io_xfb2(chan_intr, scalar_xfb); - break; - } - } - } - - /* value */ - chan_intr->src[0] = nir_src_for_ssa(nir_channel(b, value, i)); - /* offset and vertex (if needed) */ - for (unsigned j = 1; j < nir_intrinsic_infos[intr->intrinsic].num_srcs; ++j) - nir_src_copy(&chan_intr->src[j], &intr->src[j], &chan_intr->instr); - - nir_builder_instr_insert(b, &chan_intr->instr); - } - - nir_instr_remove(&intr->instr); -} - -static void -lower_store_to_scalar(nir_builder *b, nir_intrinsic_instr *intr) -{ - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *value = nir_ssa_for_src(b, intr->src[0], intr->num_components); - nir_ssa_def *base_offset = nir_get_io_offset_src(intr)->ssa; - - /* iterate wrmask instead of num_components to handle split components */ - u_foreach_bit(i, nir_intrinsic_write_mask(intr)) { - nir_intrinsic_instr *chan_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - chan_intr->num_components = 1; - - nir_intrinsic_set_write_mask(chan_intr, 0x1); - nir_intrinsic_set_align_offset(chan_intr, - (nir_intrinsic_align_offset(intr) + - i * (value->bit_size / 8)) % nir_intrinsic_align_mul(intr)); - nir_intrinsic_set_align_mul(chan_intr, nir_intrinsic_align_mul(intr)); - if (nir_intrinsic_has_access(intr)) - nir_intrinsic_set_access(chan_intr, nir_intrinsic_access(intr)); - if (nir_intrinsic_has_base(intr)) - nir_intrinsic_set_base(chan_intr, nir_intrinsic_base(intr)); - - /* value */ - chan_intr->src[0] = nir_src_for_ssa(nir_channel(b, value, i)); - for (unsigned j = 1; j < nir_intrinsic_infos[intr->intrinsic].num_srcs - 1; j++) - nir_src_copy(&chan_intr->src[j], &intr->src[j], &chan_intr->instr); - - /* increment offset per component */ - nir_ssa_def *offset = nir_iadd_imm(b, base_offset, i * (value->bit_size / 8)); - *nir_get_io_offset_src(chan_intr) = nir_src_for_ssa(offset); - - nir_builder_instr_insert(b, &chan_intr->instr); - } - - nir_instr_remove(&intr->instr); -} - -static bool -nir_lower_io_to_scalar_instr(nir_builder *b, nir_instr *instr, void *data) -{ - nir_variable_mode mask = *(nir_variable_mode *)data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->num_components == 1) - return false; - - if ((intr->intrinsic == nir_intrinsic_load_input || - intr->intrinsic == nir_intrinsic_load_per_vertex_input) && - (mask & nir_var_shader_in)) { - lower_load_input_to_scalar(b, intr); - return true; - } - - if (intr->intrinsic == nir_intrinsic_load_per_vertex_output && - (mask & nir_var_shader_out)) { - lower_load_input_to_scalar(b, intr); - return true; - } - - if ((intr->intrinsic == nir_intrinsic_load_ubo && (mask & nir_var_mem_ubo)) || - (intr->intrinsic == nir_intrinsic_load_ssbo && (mask & nir_var_mem_ssbo)) || - (intr->intrinsic == nir_intrinsic_load_global && (mask & nir_var_mem_global)) || - (intr->intrinsic == nir_intrinsic_load_shared && (mask & nir_var_mem_shared))) { - lower_load_to_scalar(b, intr); - return true; - } - - if ((intr->intrinsic == nir_intrinsic_store_output || - intr->intrinsic == nir_intrinsic_store_per_vertex_output) && - mask & nir_var_shader_out) { - lower_store_output_to_scalar(b, intr); - return true; - } - - if ((intr->intrinsic == nir_intrinsic_store_ssbo && (mask & nir_var_mem_ssbo)) || - (intr->intrinsic == nir_intrinsic_store_global && (mask & nir_var_mem_global)) || - (intr->intrinsic == nir_intrinsic_store_shared && (mask & nir_var_mem_shared))) { - lower_store_to_scalar(b, intr); - return true; - } - - return false; -} - -bool -nir_lower_io_to_scalar(nir_shader *shader, nir_variable_mode mask) -{ - return nir_shader_instructions_pass(shader, - nir_lower_io_to_scalar_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &mask); -} - -static nir_variable ** -get_channel_variables(struct hash_table *ht, nir_variable *var) -{ - nir_variable **chan_vars; - struct hash_entry *entry = _mesa_hash_table_search(ht, var); - if (!entry) { - chan_vars = (nir_variable **) calloc(4, sizeof(nir_variable *)); - _mesa_hash_table_insert(ht, var, chan_vars); - } else { - chan_vars = (nir_variable **) entry->data; - } - - return chan_vars; -} - -/* - * Note that the src deref that we are cloning is the head of the - * chain of deref instructions from the original intrinsic, but - * the dst we are cloning to is the tail (because chains of deref - * instructions are created back to front) - */ - -static nir_deref_instr * -clone_deref_array(nir_builder *b, nir_deref_instr *dst_tail, - const nir_deref_instr *src_head) -{ - const nir_deref_instr *parent = nir_deref_instr_parent(src_head); - - if (!parent) - return dst_tail; - - assert(src_head->deref_type == nir_deref_type_array); - - dst_tail = clone_deref_array(b, dst_tail, parent); - - return nir_build_deref_array(b, dst_tail, - nir_ssa_for_src(b, src_head->arr.index, 1)); -} - -static void -lower_load_to_scalar_early(nir_builder *b, nir_intrinsic_instr *intr, - nir_variable *var, struct hash_table *split_inputs, - struct hash_table *split_outputs) -{ - b->cursor = nir_before_instr(&intr->instr); - - assert(intr->dest.is_ssa); - - nir_ssa_def *loads[NIR_MAX_VEC_COMPONENTS]; - - nir_variable **chan_vars; - if (var->data.mode == nir_var_shader_in) { - chan_vars = get_channel_variables(split_inputs, var); - } else { - chan_vars = get_channel_variables(split_outputs, var); - } - - for (unsigned i = 0; i < intr->num_components; i++) { - nir_variable *chan_var = chan_vars[var->data.location_frac + i]; - if (!chan_vars[var->data.location_frac + i]) { - chan_var = nir_variable_clone(var, b->shader); - chan_var->data.location_frac = var->data.location_frac + i; - chan_var->type = glsl_channel_type(chan_var->type); - - chan_vars[var->data.location_frac + i] = chan_var; - - nir_shader_add_variable(b->shader, chan_var); - } - - nir_intrinsic_instr *chan_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - nir_ssa_dest_init(&chan_intr->instr, &chan_intr->dest, - 1, intr->dest.ssa.bit_size, NULL); - chan_intr->num_components = 1; - - nir_deref_instr *deref = nir_build_deref_var(b, chan_var); - - deref = clone_deref_array(b, deref, nir_src_as_deref(intr->src[0])); - - chan_intr->src[0] = nir_src_for_ssa(&deref->dest.ssa); - - if (intr->intrinsic == nir_intrinsic_interp_deref_at_offset || - intr->intrinsic == nir_intrinsic_interp_deref_at_sample || - intr->intrinsic == nir_intrinsic_interp_deref_at_vertex) - nir_src_copy(&chan_intr->src[1], &intr->src[1], &chan_intr->instr); - - nir_builder_instr_insert(b, &chan_intr->instr); - - loads[i] = &chan_intr->dest.ssa; - } - - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - nir_vec(b, loads, intr->num_components)); - - /* Remove the old load intrinsic */ - nir_instr_remove(&intr->instr); -} - -static void -lower_store_output_to_scalar_early(nir_builder *b, nir_intrinsic_instr *intr, - nir_variable *var, - struct hash_table *split_outputs) -{ - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *value = nir_ssa_for_src(b, intr->src[1], intr->num_components); - - nir_variable **chan_vars = get_channel_variables(split_outputs, var); - for (unsigned i = 0; i < intr->num_components; i++) { - if (!(nir_intrinsic_write_mask(intr) & (1 << i))) - continue; - - nir_variable *chan_var = chan_vars[var->data.location_frac + i]; - if (!chan_vars[var->data.location_frac + i]) { - chan_var = nir_variable_clone(var, b->shader); - chan_var->data.location_frac = var->data.location_frac + i; - chan_var->type = glsl_channel_type(chan_var->type); - - chan_vars[var->data.location_frac + i] = chan_var; - - nir_shader_add_variable(b->shader, chan_var); - } - - nir_intrinsic_instr *chan_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - chan_intr->num_components = 1; - - nir_intrinsic_set_write_mask(chan_intr, 0x1); - - nir_deref_instr *deref = nir_build_deref_var(b, chan_var); - - deref = clone_deref_array(b, deref, nir_src_as_deref(intr->src[0])); - - chan_intr->src[0] = nir_src_for_ssa(&deref->dest.ssa); - chan_intr->src[1] = nir_src_for_ssa(nir_channel(b, value, i)); - - nir_builder_instr_insert(b, &chan_intr->instr); - } - - /* Remove the old store intrinsic */ - nir_instr_remove(&intr->instr); -} - -struct io_to_scalar_early_state { - struct hash_table *split_inputs, *split_outputs; - nir_variable_mode mask; -}; - -static bool -nir_lower_io_to_scalar_early_instr(nir_builder *b, nir_instr *instr, void *data) -{ - struct io_to_scalar_early_state *state = data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->num_components == 1) - return false; - - if (intr->intrinsic != nir_intrinsic_load_deref && - intr->intrinsic != nir_intrinsic_store_deref && - intr->intrinsic != nir_intrinsic_interp_deref_at_centroid && - intr->intrinsic != nir_intrinsic_interp_deref_at_sample && - intr->intrinsic != nir_intrinsic_interp_deref_at_offset && - intr->intrinsic != nir_intrinsic_interp_deref_at_vertex) - return false; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - if (!nir_deref_mode_is_one_of(deref, state->mask)) - return false; - - nir_variable *var = nir_deref_instr_get_variable(deref); - nir_variable_mode mode = var->data.mode; - - /* TODO: add patch support */ - if (var->data.patch) - return false; - - /* TODO: add doubles support */ - if (glsl_type_is_64bit(glsl_without_array(var->type))) - return false; - - if (!(b->shader->info.stage == MESA_SHADER_VERTEX && - mode == nir_var_shader_in) && - var->data.location < VARYING_SLOT_VAR0 && - var->data.location >= 0) - return false; - - /* Don't bother splitting if we can't opt away any unused - * components. - */ - if (var->data.always_active_io) - return false; - - if (var->data.must_be_shader_input) - return false; - - /* Skip types we cannot split */ - if (glsl_type_is_matrix(glsl_without_array(var->type)) || - glsl_type_is_struct_or_ifc(glsl_without_array(var->type))) - return false; - - switch (intr->intrinsic) { - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_vertex: - case nir_intrinsic_load_deref: - if ((state->mask & nir_var_shader_in && mode == nir_var_shader_in) || - (state->mask & nir_var_shader_out && mode == nir_var_shader_out)) { - lower_load_to_scalar_early(b, intr, var, state->split_inputs, - state->split_outputs); - return true; - } - break; - case nir_intrinsic_store_deref: - if (state->mask & nir_var_shader_out && - mode == nir_var_shader_out) { - lower_store_output_to_scalar_early(b, intr, var, state->split_outputs); - return true; - } - break; - default: - break; - } - - return false; -} - -/* - * This function is intended to be called earlier than nir_lower_io_to_scalar() - * i.e. before nir_lower_io() is called. - */ -bool -nir_lower_io_to_scalar_early(nir_shader *shader, nir_variable_mode mask) -{ - struct io_to_scalar_early_state state = { - .split_inputs = _mesa_pointer_hash_table_create(NULL), - .split_outputs = _mesa_pointer_hash_table_create(NULL), - .mask = mask - }; - - bool progress = nir_shader_instructions_pass(shader, - nir_lower_io_to_scalar_early_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &state); - - /* Remove old input from the shaders inputs list */ - hash_table_foreach(state.split_inputs, entry) { - nir_variable *var = (nir_variable *) entry->key; - exec_node_remove(&var->node); - - free(entry->data); - } - - /* Remove old output from the shaders outputs list */ - hash_table_foreach(state.split_outputs, entry) { - nir_variable *var = (nir_variable *) entry->key; - exec_node_remove(&var->node); - - free(entry->data); - } - - _mesa_hash_table_destroy(state.split_inputs, NULL); - _mesa_hash_table_destroy(state.split_outputs, NULL); - - nir_remove_dead_derefs(shader); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_temporaries.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_temporaries.c deleted file mode 100644 index 789efc3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_temporaries.c +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * Implements a pass that lowers output and/or input variables to a - * temporary plus an output variable with a single copy at each exit - * point of the shader and/or an input variable with a single copy - * at the entrance point of the shader. This way the output variable - * is only ever written once and/or input is only read once, and there - * are no indirect outut/input accesses. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -struct lower_io_state { - nir_shader *shader; - nir_function_impl *entrypoint; - struct exec_list old_outputs; - struct exec_list old_inputs; - struct exec_list new_outputs; - struct exec_list new_inputs; - - /* map from temporary to new input */ - struct hash_table *input_map; -}; - -static void -emit_copies(nir_builder *b, struct exec_list *dest_vars, - struct exec_list *src_vars) -{ - assert(exec_list_length(dest_vars) == exec_list_length(src_vars)); - - foreach_two_lists(dest_node, dest_vars, src_node, src_vars) { - nir_variable *dest = exec_node_data(nir_variable, dest_node, node); - nir_variable *src = exec_node_data(nir_variable, src_node, node); - - /* No need to copy the contents of a non-fb_fetch_output output variable - * to the temporary allocated for it, since its initial value is - * undefined. - */ - if (src->data.mode == nir_var_shader_out && - !src->data.fb_fetch_output) - continue; - - /* Can't copy the contents of the temporary back to a read-only - * interface variable. The value of the temporary won't have been - * modified by the shader anyway. - */ - if (dest->data.read_only) - continue; - - nir_copy_var(b, dest, src); - } -} - -static void -emit_output_copies_impl(struct lower_io_state *state, nir_function_impl *impl) -{ - nir_builder b; - nir_builder_init(&b, impl); - - if (state->shader->info.stage == MESA_SHADER_GEOMETRY) { - /* For geometry shaders, we have to emit the output copies right - * before each EmitVertex call. - */ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic == nir_intrinsic_emit_vertex || - intrin->intrinsic == nir_intrinsic_emit_vertex_with_counter) { - b.cursor = nir_before_instr(&intrin->instr); - emit_copies(&b, &state->new_outputs, &state->old_outputs); - } - } - } - } else if (impl == state->entrypoint) { - b.cursor = nir_before_block(nir_start_block(impl)); - emit_copies(&b, &state->old_outputs, &state->new_outputs); - - /* For all other shader types, we need to do the copies right before - * the jumps to the end block. - */ - set_foreach(impl->end_block->predecessors, block_entry) { - struct nir_block *block = (void *)block_entry->key; - b.cursor = nir_after_block_before_jump(block); - emit_copies(&b, &state->new_outputs, &state->old_outputs); - } - } -} - -/* For fragment shader inputs, when we lower to temporaries we'll invalidate - * interpolateAt*() because now they'll be pointing to the temporary instead - * of the actual variable. Since the caller presumably doesn't support - * indirect indexing of inputs, we'll need to lower something like: - * - * in vec4 foo[3]; - * - * ... = interpolateAtCentroid(foo[i]); - * - * to a sequence of interpolations that store to our temporary, then a - * load at the end: - * - * in vec4 foo[3]; - * vec4 foo_tmp[3]; - * - * foo_tmp[0] = interpolateAtCentroid(foo[0]); - * foo_tmp[1] = interpolateAtCentroid(foo[1]); - * ... = foo_tmp[i]; - */ - -/* - * Recursively emit the interpolation instructions. Here old_interp_deref - * refers to foo[i], temp_deref is foo_tmp[0/1], and new_interp_deref is - * foo[0/1]. - */ - -static void -emit_interp(nir_builder *b, nir_deref_instr **old_interp_deref, - nir_deref_instr *temp_deref, nir_deref_instr *new_interp_deref, - nir_intrinsic_instr *interp) -{ - while (*old_interp_deref) { - switch ((*old_interp_deref)->deref_type) { - case nir_deref_type_struct: - temp_deref = - nir_build_deref_struct(b, temp_deref, - (*old_interp_deref)->strct.index); - new_interp_deref = - nir_build_deref_struct(b, new_interp_deref, - (*old_interp_deref)->strct.index); - break; - case nir_deref_type_array: - if (nir_src_is_const((*old_interp_deref)->arr.index)) { - temp_deref = - nir_build_deref_array(b, temp_deref, - (*old_interp_deref)->arr.index.ssa); - new_interp_deref = - nir_build_deref_array(b, new_interp_deref, - (*old_interp_deref)->arr.index.ssa); - break; - } else { - /* We have an indirect deref, so we have to emit interpolations - * for every index. Recurse in case we have an array of arrays. - */ - unsigned length = glsl_get_length(temp_deref->type); - for (unsigned i = 0; i < length; i++) { - nir_deref_instr *new_temp = - nir_build_deref_array_imm(b, temp_deref, i); - nir_deref_instr *new_interp = - nir_build_deref_array_imm(b, new_interp_deref, i); - - emit_interp(b, old_interp_deref + 1, new_temp, new_interp, - interp); - } - - return; - } - - case nir_deref_type_var: - case nir_deref_type_array_wildcard: - case nir_deref_type_ptr_as_array: - case nir_deref_type_cast: - unreachable("bad deref type"); - } - - old_interp_deref++; - } - - /* Now that we've constructed a fully-qualified deref with all the indirect - * derefs replaced with direct ones, it's time to actually emit the new - * interpolation instruction. - */ - - nir_intrinsic_instr *new_interp = - nir_intrinsic_instr_create(b->shader, interp->intrinsic); - - new_interp->src[0] = nir_src_for_ssa(&new_interp_deref->dest.ssa); - if (interp->intrinsic == nir_intrinsic_interp_deref_at_sample || - interp->intrinsic == nir_intrinsic_interp_deref_at_offset || - interp->intrinsic == nir_intrinsic_interp_deref_at_vertex) { - new_interp->src[1] = interp->src[1]; - } - - new_interp->num_components = interp->num_components; - nir_ssa_dest_init(&new_interp->instr, &new_interp->dest, - interp->dest.ssa.num_components, - interp->dest.ssa.bit_size, NULL); - - nir_builder_instr_insert(b, &new_interp->instr); - nir_store_deref(b, temp_deref, &new_interp->dest.ssa, - (1 << interp->dest.ssa.num_components) - 1); -} - -static void -fixup_interpolation_instr(struct lower_io_state *state, - nir_intrinsic_instr *interp, nir_builder *b) -{ - nir_deref_path interp_path; - nir_deref_path_init(&interp_path, nir_src_as_deref(interp->src[0]), NULL); - - b->cursor = nir_before_instr(&interp->instr); - - /* The original interpolation instruction should contain a deref path - * starting with the original variable, which is now the temporary. - */ - nir_deref_instr *temp_root = interp_path.path[0]; - - /* Fish out the newly-created input variable. */ - assert(temp_root->deref_type == nir_deref_type_var); - struct hash_entry *entry = _mesa_hash_table_search(state->input_map, - temp_root->var); - assert(entry); - nir_variable *input = entry->data; - nir_deref_instr *input_root = nir_build_deref_var(b, input); - - /* Emit the interpolation instructions. */ - emit_interp(b, interp_path.path + 1, temp_root, input_root, interp); - - /* Now the temporary contains the interpolation results, and we can just - * load from it. We can reuse the original deref, since it points to the - * correct part of the temporary. - */ - nir_ssa_def *load = nir_load_deref(b, nir_src_as_deref(interp->src[0])); - nir_ssa_def_rewrite_uses(&interp->dest.ssa, load); - nir_instr_remove(&interp->instr); - - nir_deref_path_finish(&interp_path); -} - -static void -fixup_interpolation(struct lower_io_state *state, nir_function_impl *impl, - nir_builder *b) -{ - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *interp = nir_instr_as_intrinsic(instr); - - if (interp->intrinsic == nir_intrinsic_interp_deref_at_centroid || - interp->intrinsic == nir_intrinsic_interp_deref_at_sample || - interp->intrinsic == nir_intrinsic_interp_deref_at_offset || - interp->intrinsic == nir_intrinsic_interp_deref_at_vertex) { - fixup_interpolation_instr(state, interp, b); - } - } - } -} - -static void -emit_input_copies_impl(struct lower_io_state *state, nir_function_impl *impl) -{ - if (impl == state->entrypoint) { - nir_builder b; - nir_builder_init(&b, impl); - b.cursor = nir_before_block(nir_start_block(impl)); - emit_copies(&b, &state->old_inputs, &state->new_inputs); - if (state->shader->info.stage == MESA_SHADER_FRAGMENT) - fixup_interpolation(state, impl, &b); - } -} - -static nir_variable * -create_shadow_temp(struct lower_io_state *state, nir_variable *var) -{ - nir_variable *nvar = ralloc(state->shader, nir_variable); - memcpy(nvar, var, sizeof *nvar); - nvar->data.cannot_coalesce = true; - - /* The original is now the temporary */ - nir_variable *temp = var; - - /* Reparent the name to the new variable */ - ralloc_steal(nvar, nvar->name); - - assert(nvar->constant_initializer == NULL && nvar->pointer_initializer == NULL); - - /* Give the original a new name with @-temp appended */ - const char *mode = (temp->data.mode == nir_var_shader_in) ? "in" : "out"; - temp->name = ralloc_asprintf(var, "%s@%s-temp", mode, nvar->name); - temp->data.mode = nir_var_shader_temp; - temp->data.read_only = false; - temp->data.fb_fetch_output = false; - temp->data.compact = false; - - return nvar; -} - -static void -move_variables_to_list(nir_shader *shader, nir_variable_mode mode, - struct exec_list *dst_list) -{ - nir_foreach_variable_with_modes_safe(var, shader, mode) { - exec_node_remove(&var->node); - exec_list_push_tail(dst_list, &var->node); - } -} - -void -nir_lower_io_to_temporaries(nir_shader *shader, nir_function_impl *entrypoint, - bool outputs, bool inputs) -{ - struct lower_io_state state; - - if (shader->info.stage == MESA_SHADER_TESS_CTRL || - shader->info.stage == MESA_SHADER_TASK || - shader->info.stage == MESA_SHADER_MESH) - return; - - state.shader = shader; - state.entrypoint = entrypoint; - state.input_map = _mesa_pointer_hash_table_create(NULL); - - exec_list_make_empty(&state.old_inputs); - if (inputs) - move_variables_to_list(shader, nir_var_shader_in, &state.old_inputs); - - exec_list_make_empty(&state.old_outputs); - if (outputs) - move_variables_to_list(shader, nir_var_shader_out, &state.old_outputs); - - exec_list_make_empty(&state.new_inputs); - exec_list_make_empty(&state.new_outputs); - - /* Walk over all of the outputs turn each output into a temporary and - * make a new variable for the actual output. - */ - nir_foreach_variable_in_list(var, &state.old_outputs) { - nir_variable *output = create_shadow_temp(&state, var); - exec_list_push_tail(&state.new_outputs, &output->node); - } - - /* and same for inputs: */ - nir_foreach_variable_in_list(var, &state.old_inputs) { - nir_variable *input = create_shadow_temp(&state, var); - exec_list_push_tail(&state.new_inputs, &input->node); - _mesa_hash_table_insert(state.input_map, var, input); - } - - nir_foreach_function(function, shader) { - if (function->impl == NULL) - continue; - - if (inputs) - emit_input_copies_impl(&state, function->impl); - - if (outputs) - emit_output_copies_impl(&state, function->impl); - - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } - - exec_list_append(&shader->variables, &state.old_inputs); - exec_list_append(&shader->variables, &state.old_outputs); - exec_list_append(&shader->variables, &state.new_inputs); - exec_list_append(&shader->variables, &state.new_outputs); - - nir_fixup_deref_modes(shader); - - _mesa_hash_table_destroy(state.input_map, NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_vector.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_vector.c deleted file mode 100644 index 48fae1e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_io_to_vector.c +++ /dev/null @@ -1,729 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" -#include "../../util/u_dynarray.h" - -/** @file nir_lower_io_to_vector.c - * - * Merges compatible input/output variables residing in different components - * of the same location. It's expected that further passes such as - * nir_lower_io_to_temporaries will combine loads and stores of the merged - * variables, producing vector nir_load_input/nir_store_output instructions - * when all is said and done. - */ - -/* FRAG_RESULT_MAX+1 instead of just FRAG_RESULT_MAX because of how this pass - * handles dual source blending */ -#define MAX_SLOTS MAX2(VARYING_SLOT_TESS_MAX, FRAG_RESULT_MAX+1) - -static unsigned -get_slot(const nir_variable *var) -{ - /* This handling of dual-source blending might not be correct when more than - * one render target is supported, but it seems no driver supports more than - * one. */ - return var->data.location + var->data.index; -} - -static const struct glsl_type * -get_per_vertex_type(const nir_shader *shader, const nir_variable *var, - unsigned *num_vertices) -{ - if (nir_is_arrayed_io(var, shader->info.stage)) { - assert(glsl_type_is_array(var->type)); - if (num_vertices) - *num_vertices = glsl_get_length(var->type); - return glsl_get_array_element(var->type); - } else { - if (num_vertices) - *num_vertices = 0; - return var->type; - } -} - -static const struct glsl_type * -resize_array_vec_type(const struct glsl_type *type, unsigned num_components) -{ - if (glsl_type_is_array(type)) { - const struct glsl_type *arr_elem = - resize_array_vec_type(glsl_get_array_element(type), num_components); - return glsl_array_type(arr_elem, glsl_get_length(type), 0); - } else { - assert(glsl_type_is_vector_or_scalar(type)); - return glsl_vector_type(glsl_get_base_type(type), num_components); - } -} - -static bool -variables_can_merge(const nir_shader *shader, - const nir_variable *a, const nir_variable *b, - bool same_array_structure) -{ - if (a->data.compact || b->data.compact) - return false; - - if (a->data.per_view || b->data.per_view) - return false; - - const struct glsl_type *a_type_tail = a->type; - const struct glsl_type *b_type_tail = b->type; - - if (nir_is_arrayed_io(a, shader->info.stage) != - nir_is_arrayed_io(b, shader->info.stage)) - return false; - - /* They must have the same array structure */ - if (same_array_structure) { - while (glsl_type_is_array(a_type_tail)) { - if (!glsl_type_is_array(b_type_tail)) - return false; - - if (glsl_get_length(a_type_tail) != glsl_get_length(b_type_tail)) - return false; - - a_type_tail = glsl_get_array_element(a_type_tail); - b_type_tail = glsl_get_array_element(b_type_tail); - } - if (glsl_type_is_array(b_type_tail)) - return false; - } else { - a_type_tail = glsl_without_array(a_type_tail); - b_type_tail = glsl_without_array(b_type_tail); - } - - if (!glsl_type_is_vector_or_scalar(a_type_tail) || - !glsl_type_is_vector_or_scalar(b_type_tail)) - return false; - - if (glsl_get_base_type(a_type_tail) != glsl_get_base_type(b_type_tail)) - return false; - - /* TODO: add 64/16bit support ? */ - if (glsl_get_bit_size(a_type_tail) != 32) - return false; - - assert(a->data.mode == b->data.mode); - if (shader->info.stage == MESA_SHADER_FRAGMENT && - a->data.mode == nir_var_shader_in && - (a->data.interpolation != b->data.interpolation || - a->data.centroid != b->data.centroid || - a->data.sample != b->data.sample)) - return false; - - if (shader->info.stage == MESA_SHADER_FRAGMENT && - a->data.mode == nir_var_shader_out && - a->data.index != b->data.index) - return false; - - /* It's tricky to merge XFB-outputs correctly, because we need there - * to not be any overlaps when we get to - * nir_gather_xfb_info_with_varyings later on. We'll end up - * triggering an assert there if we merge here. - */ - if ((shader->info.stage == MESA_SHADER_VERTEX || - shader->info.stage == MESA_SHADER_TESS_EVAL || - shader->info.stage == MESA_SHADER_GEOMETRY) && - a->data.mode == nir_var_shader_out && - (a->data.explicit_xfb_buffer || b->data.explicit_xfb_buffer)) - return false; - - return true; -} - -static const struct glsl_type * -get_flat_type(const nir_shader *shader, nir_variable *old_vars[MAX_SLOTS][4], - unsigned *loc, nir_variable **first_var, unsigned *num_vertices) -{ - unsigned todo = 1; - unsigned slots = 0; - unsigned num_vars = 0; - enum glsl_base_type base; - *num_vertices = 0; - *first_var = NULL; - - while (todo) { - assert(*loc < MAX_SLOTS); - for (unsigned frac = 0; frac < 4; frac++) { - nir_variable *var = old_vars[*loc][frac]; - if (!var) - continue; - if ((*first_var && - !variables_can_merge(shader, var, *first_var, false)) || - var->data.compact) { - (*loc)++; - return NULL; - } - - if (!*first_var) { - if (!glsl_type_is_vector_or_scalar(glsl_without_array(var->type))) { - (*loc)++; - return NULL; - } - *first_var = var; - base = glsl_get_base_type( - glsl_without_array(get_per_vertex_type(shader, var, NULL))); - } - - bool vs_in = shader->info.stage == MESA_SHADER_VERTEX && - var->data.mode == nir_var_shader_in; - unsigned var_slots = glsl_count_attribute_slots( - get_per_vertex_type(shader, var, num_vertices), vs_in); - todo = MAX2(todo, var_slots); - num_vars++; - } - todo--; - slots++; - (*loc)++; - } - - if (num_vars <= 1) - return NULL; - - if (slots == 1) - return glsl_vector_type(base, 4); - else - return glsl_array_type(glsl_vector_type(base, 4), slots, 0); -} - -static bool -create_new_io_vars(nir_shader *shader, nir_variable_mode mode, - nir_variable *new_vars[MAX_SLOTS][4], - bool flat_vars[MAX_SLOTS], - struct util_dynarray *demote_vars) -{ - nir_variable *old_vars[MAX_SLOTS][4] = {{0}}; - - bool has_io_var = false; - nir_foreach_variable_with_modes(var, shader, mode) { - unsigned frac = var->data.location_frac; - old_vars[get_slot(var)][frac] = var; - has_io_var = true; - } - - if (!has_io_var) - return false; - - bool merged_any_vars = false; - - for (unsigned loc = 0; loc < MAX_SLOTS; loc++) { - unsigned frac = 0; - while (frac < 4) { - nir_variable *first_var = old_vars[loc][frac]; - if (!first_var) { - frac++; - continue; - } - - int first = frac; - bool found_merge = false; - - while (frac < 4) { - nir_variable *var = old_vars[loc][frac]; - if (!var) - break; - - if (var != first_var) { - if (!variables_can_merge(shader, first_var, var, true)) - break; - - found_merge = true; - } - - const unsigned num_components = - glsl_get_components(glsl_without_array(var->type)); - if (!num_components) { - assert(frac == 0); - frac++; - break; /* The type was a struct. */ - } - - /* We had better not have any overlapping vars */ - for (unsigned i = 1; i < num_components; i++) - assert(old_vars[loc][frac + i] == NULL); - - frac += num_components; - } - - if (!found_merge) - continue; - - merged_any_vars = true; - - nir_variable *var = nir_variable_clone(old_vars[loc][first], shader); - var->data.location_frac = first; - var->type = resize_array_vec_type(var->type, frac - first); - - nir_shader_add_variable(shader, var); - for (unsigned i = first; i < frac; i++) { - new_vars[loc][i] = var; - if (old_vars[loc][i]) { - util_dynarray_append(demote_vars, nir_variable *, old_vars[loc][i]); - old_vars[loc][i] = NULL; - } - } - - old_vars[loc][first] = var; - } - } - - /* "flat" mode: tries to ensure there is at most one variable per slot by - * merging variables into vec4s - */ - for (unsigned loc = 0; loc < MAX_SLOTS;) { - nir_variable *first_var; - unsigned num_vertices; - unsigned new_loc = loc; - const struct glsl_type *flat_type = - get_flat_type(shader, old_vars, &new_loc, &first_var, &num_vertices); - if (flat_type) { - merged_any_vars = true; - - nir_variable *var = nir_variable_clone(first_var, shader); - var->data.location_frac = 0; - if (num_vertices) - var->type = glsl_array_type(flat_type, num_vertices, 0); - else - var->type = flat_type; - - nir_shader_add_variable(shader, var); - unsigned num_slots = MAX2(glsl_get_length(flat_type), 1); - for (unsigned i = 0; i < num_slots; i++) { - for (unsigned j = 0; j < 4; j++) - new_vars[loc + i][j] = var; - flat_vars[loc + i] = true; - } - } - loc = new_loc; - } - - return merged_any_vars; -} - -static nir_deref_instr * -build_array_deref_of_new_var(nir_builder *b, nir_variable *new_var, - nir_deref_instr *leader) -{ - if (leader->deref_type == nir_deref_type_var) - return nir_build_deref_var(b, new_var); - - nir_deref_instr *parent = - build_array_deref_of_new_var(b, new_var, nir_deref_instr_parent(leader)); - - return nir_build_deref_follower(b, parent, leader); -} - -static nir_ssa_def * -build_array_index(nir_builder *b, nir_deref_instr *deref, nir_ssa_def *base, - bool vs_in, bool per_vertex) -{ - switch (deref->deref_type) { - case nir_deref_type_var: - return base; - case nir_deref_type_array: { - nir_ssa_def *index = nir_i2iN(b, deref->arr.index.ssa, - deref->dest.ssa.bit_size); - - if (nir_deref_instr_parent(deref)->deref_type == nir_deref_type_var && - per_vertex) - return base; - - return nir_iadd( - b, build_array_index(b, nir_deref_instr_parent(deref), base, vs_in, per_vertex), - nir_amul_imm(b, index, glsl_count_attribute_slots(deref->type, vs_in))); - } - default: - unreachable("Invalid deref instruction type"); - } -} - -static nir_deref_instr * -build_array_deref_of_new_var_flat(nir_shader *shader, - nir_builder *b, nir_variable *new_var, - nir_deref_instr *leader, unsigned base) -{ - nir_deref_instr *deref = nir_build_deref_var(b, new_var); - - bool per_vertex = nir_is_arrayed_io(new_var, shader->info.stage); - if (per_vertex) { - nir_deref_path path; - nir_deref_path_init(&path, leader, NULL); - - assert(path.path[0]->deref_type == nir_deref_type_var); - nir_deref_instr *p = path.path[1]; - nir_deref_path_finish(&path); - - nir_ssa_def *index = p->arr.index.ssa; - deref = nir_build_deref_array(b, deref, index); - } - - if (!glsl_type_is_array(deref->type)) - return deref; - - bool vs_in = shader->info.stage == MESA_SHADER_VERTEX && - new_var->data.mode == nir_var_shader_in; - return nir_build_deref_array(b, deref, - build_array_index(b, leader, nir_imm_int(b, base), vs_in, per_vertex)); -} - -ASSERTED static bool -nir_shader_can_read_output(const shader_info *info) -{ - switch (info->stage) { - case MESA_SHADER_TESS_CTRL: - case MESA_SHADER_FRAGMENT: - return true; - - case MESA_SHADER_TASK: - case MESA_SHADER_MESH: - /* TODO(mesh): This will not be allowed on EXT. */ - return true; - - default: - return false; - } -} - -static bool -nir_lower_io_to_vector_impl(nir_function_impl *impl, nir_variable_mode modes) -{ - assert(!(modes & ~(nir_var_shader_in | nir_var_shader_out))); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_metadata_require(impl, nir_metadata_dominance); - - struct util_dynarray demote_vars; - util_dynarray_init(&demote_vars, NULL); - - nir_shader *shader = impl->function->shader; - nir_variable *new_inputs[MAX_SLOTS][4] = {{0}}; - nir_variable *new_outputs[MAX_SLOTS][4] = {{0}}; - bool flat_inputs[MAX_SLOTS] = {0}; - bool flat_outputs[MAX_SLOTS] = {0}; - - if (modes & nir_var_shader_in) { - /* Vertex shaders support overlapping inputs. We don't do those */ - assert(b.shader->info.stage != MESA_SHADER_VERTEX); - - /* If we don't actually merge any variables, remove that bit from modes - * so we don't bother doing extra non-work. - */ - if (!create_new_io_vars(shader, nir_var_shader_in, - new_inputs, flat_inputs, &demote_vars)) - modes &= ~nir_var_shader_in; - } - - if (modes & nir_var_shader_out) { - /* If we don't actually merge any variables, remove that bit from modes - * so we don't bother doing extra non-work. - */ - if (!create_new_io_vars(shader, nir_var_shader_out, - new_outputs, flat_outputs, &demote_vars)) - modes &= ~nir_var_shader_out; - } - - if (!modes) - return false; - - bool progress = false; - - /* Actually lower all the IO load/store intrinsics. Load instructions are - * lowered to a vector load and an ALU instruction to grab the channels we - * want. Outputs are lowered to a write-masked store of the vector output. - * For non-TCS outputs, we then run nir_lower_io_to_temporaries at the end - * to clean up the partial writes. - */ - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_vertex: { - nir_deref_instr *old_deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_one_of(old_deref, modes)) - break; - - if (nir_deref_mode_is(old_deref, nir_var_shader_out)) - assert(nir_shader_can_read_output(&b.shader->info)); - - nir_variable *old_var = nir_deref_instr_get_variable(old_deref); - - const unsigned loc = get_slot(old_var); - const unsigned old_frac = old_var->data.location_frac; - nir_variable *new_var = old_var->data.mode == nir_var_shader_in ? - new_inputs[loc][old_frac] : - new_outputs[loc][old_frac]; - bool flat = old_var->data.mode == nir_var_shader_in ? - flat_inputs[loc] : flat_outputs[loc]; - if (!new_var) - break; - - const unsigned new_frac = new_var->data.location_frac; - - nir_component_mask_t vec4_comp_mask = - ((1 << intrin->num_components) - 1) << old_frac; - - b.cursor = nir_before_instr(&intrin->instr); - - /* Rewrite the load to use the new variable and only select a - * portion of the result. - */ - nir_deref_instr *new_deref; - if (flat) { - new_deref = build_array_deref_of_new_var_flat( - shader, &b, new_var, old_deref, loc - get_slot(new_var)); - } else { - assert(get_slot(new_var) == loc); - new_deref = build_array_deref_of_new_var(&b, new_var, old_deref); - assert(glsl_type_is_vector(new_deref->type)); - } - nir_instr_rewrite_src(&intrin->instr, &intrin->src[0], - nir_src_for_ssa(&new_deref->dest.ssa)); - - intrin->num_components = - glsl_get_components(new_deref->type); - intrin->dest.ssa.num_components = intrin->num_components; - - b.cursor = nir_after_instr(&intrin->instr); - - nir_ssa_def *new_vec = nir_channels(&b, &intrin->dest.ssa, - vec4_comp_mask >> new_frac); - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - new_vec, - new_vec->parent_instr); - - progress = true; - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *old_deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(old_deref, nir_var_shader_out)) - break; - - nir_variable *old_var = nir_deref_instr_get_variable(old_deref); - - const unsigned loc = get_slot(old_var); - const unsigned old_frac = old_var->data.location_frac; - nir_variable *new_var = new_outputs[loc][old_frac]; - bool flat = flat_outputs[loc]; - if (!new_var) - break; - - const unsigned new_frac = new_var->data.location_frac; - - b.cursor = nir_before_instr(&intrin->instr); - - /* Rewrite the store to be a masked store to the new variable */ - nir_deref_instr *new_deref; - if (flat) { - new_deref = build_array_deref_of_new_var_flat( - shader, &b, new_var, old_deref, loc - get_slot(new_var)); - } else { - assert(get_slot(new_var) == loc); - new_deref = build_array_deref_of_new_var(&b, new_var, old_deref); - assert(glsl_type_is_vector(new_deref->type)); - } - nir_instr_rewrite_src(&intrin->instr, &intrin->src[0], - nir_src_for_ssa(&new_deref->dest.ssa)); - - intrin->num_components = - glsl_get_components(new_deref->type); - - nir_component_mask_t old_wrmask = nir_intrinsic_write_mask(intrin); - - assert(intrin->src[1].is_ssa); - nir_ssa_def *old_value = intrin->src[1].ssa; - nir_ssa_scalar comps[4]; - for (unsigned c = 0; c < intrin->num_components; c++) { - if (new_frac + c >= old_frac && - (old_wrmask & 1 << (new_frac + c - old_frac))) { - comps[c] = nir_get_ssa_scalar(old_value, - new_frac + c - old_frac); - } else { - comps[c] = nir_get_ssa_scalar(nir_ssa_undef(&b, old_value->num_components, - old_value->bit_size), 0); - } - } - nir_ssa_def *new_value = nir_vec_scalars(&b, comps, intrin->num_components); - nir_instr_rewrite_src(&intrin->instr, &intrin->src[1], - nir_src_for_ssa(new_value)); - - nir_intrinsic_set_write_mask(intrin, - old_wrmask << (old_frac - new_frac)); - - progress = true; - break; - } - - default: - break; - } - } - } - - /* Demote the old var to a global, so that things like - * nir_lower_io_to_temporaries() don't trigger on it. - */ - util_dynarray_foreach(&demote_vars, nir_variable *, varp) { - (*varp)->data.mode = nir_var_shader_temp; - } - nir_fixup_deref_modes(b.shader); - util_dynarray_fini(&demote_vars); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } - - return progress; -} - -bool -nir_lower_io_to_vector(nir_shader *shader, nir_variable_mode modes) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_lower_io_to_vector_impl(function->impl, modes); - } - - return progress; -} - -static bool -nir_vectorize_tess_levels_impl(nir_function_impl *impl) -{ - bool progress = false; - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_shader_out)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var->data.location != VARYING_SLOT_TESS_LEVEL_OUTER && - var->data.location != VARYING_SLOT_TESS_LEVEL_INNER) - continue; - - assert(deref->deref_type == nir_deref_type_array); - assert(nir_src_is_const(deref->arr.index)); - unsigned index = nir_src_as_uint(deref->arr.index); - unsigned vec_size = glsl_get_vector_elements(var->type); - - b.cursor = nir_before_instr(instr); - nir_ssa_def *new_deref = &nir_build_deref_var(&b, var)->dest.ssa; - nir_instr_rewrite_src(instr, &intrin->src[0], nir_src_for_ssa(new_deref)); - - nir_deref_instr_remove_if_unused(deref); - - intrin->num_components = vec_size; - - /* Handle out of bounds access. */ - if (index >= vec_size) { - if (intrin->intrinsic == nir_intrinsic_load_deref) { - /* Return undef from out of bounds loads. */ - b.cursor = nir_after_instr(instr); - nir_ssa_def *val = &intrin->dest.ssa; - nir_ssa_def *u = nir_ssa_undef(&b, val->num_components, val->bit_size); - nir_ssa_def_rewrite_uses(val, u); - } - - /* Finally, remove the out of bounds access. */ - nir_instr_remove(instr); - progress = true; - continue; - } - - if (intrin->intrinsic == nir_intrinsic_store_deref) { - nir_intrinsic_set_write_mask(intrin, 1 << index); - nir_ssa_def *new_val = nir_ssa_undef(&b, intrin->num_components, 32); - new_val = nir_vector_insert_imm(&b, new_val, intrin->src[1].ssa, index); - nir_instr_rewrite_src(instr, &intrin->src[1], nir_src_for_ssa(new_val)); - } else { - b.cursor = nir_after_instr(instr); - nir_ssa_def *val = &intrin->dest.ssa; - val->num_components = intrin->num_components; - nir_ssa_def *comp = nir_channel(&b, val, index); - nir_ssa_def_rewrite_uses_after(val, comp, comp->parent_instr); - } - - progress = true; - } - } - - if (progress) - nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); - else - nir_metadata_preserve(impl, nir_metadata_all); - - return progress; -} - -/* Make the tess factor variables vectors instead of compact arrays, so accesses - * can be combined by nir_opt_cse()/nir_opt_combine_stores(). - */ -bool -nir_vectorize_tess_levels(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_shader_out_variable(var, shader) { - if (var->data.location == VARYING_SLOT_TESS_LEVEL_OUTER || - var->data.location == VARYING_SLOT_TESS_LEVEL_INNER) { - var->type = glsl_vector_type(GLSL_TYPE_FLOAT, glsl_get_length(var->type)); - var->data.compact = false; - progress = true; - } - } - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_vectorize_tess_levels_impl(function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_is_helper_invocation.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_is_helper_invocation.c deleted file mode 100644 index 9347e42..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_is_helper_invocation.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright © 2021 Igalia S.L. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* Some hardware doesn't have a way to check if invocation was demoted, - * in such case we have to track it ourselves. - * OpIsHelperInvocationEXT is specified as: - * - * "An invocation is currently a helper invocation if it was originally - * invoked as a helper invocation or if it has been demoted to a helper - * invocation by OpDemoteToHelperInvocationEXT." - * - * Therefore we: - * - Set gl_IsHelperInvocationEXT = gl_HelperInvocation - * - Add "gl_IsHelperInvocationEXT = true" right before each demote - * - Add "gl_IsHelperInvocationEXT = gl_IsHelperInvocationEXT || condition" - * right before each demote_if - */ - -static bool -nir_lower_load_and_store_is_helper(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - nir_deref_instr *is_helper_deref = (nir_deref_instr*) data; - - switch (intrin->intrinsic) { - case nir_intrinsic_demote: { - b->cursor = nir_before_instr(instr); - nir_store_deref(b, is_helper_deref, nir_imm_bool(b, true), 1); - return true; - } - case nir_intrinsic_demote_if: { - b->cursor = nir_before_instr(instr); - nir_ssa_def *current_is_helper = nir_load_deref(b, is_helper_deref); - nir_ssa_def *updated_is_helper = nir_ior(b, current_is_helper, intrin->src[0].ssa); - nir_store_deref(b, is_helper_deref, updated_is_helper, 1); - return true; - } - case nir_intrinsic_is_helper_invocation: { - b->cursor = nir_before_instr(instr); - nir_ssa_def *is_helper = nir_load_deref(b, is_helper_deref); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, is_helper); - nir_instr_remove_v(instr); - return true; - } - default: - return false; - } -} - -static bool -has_is_helper_invocation(nir_shader *shader) -{ - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_foreach_block_safe(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic == nir_intrinsic_is_helper_invocation) - return true; - } - } - } - - return false; -} - -bool -nir_lower_is_helper_invocation(nir_shader *shader) -{ - if (shader->info.stage != MESA_SHADER_FRAGMENT) - return false; - - if (!has_is_helper_invocation(shader)) - return false; - - nir_function_impl *entrypoint = nir_shader_get_entrypoint(shader); - - nir_builder b; - nir_builder_init(&b, entrypoint); - b.cursor = nir_before_cf_list(&entrypoint->body); - - nir_variable *is_helper = nir_local_variable_create(entrypoint, - glsl_bool_type(), - "gl_IsHelperInvocationEXT"); - - nir_ssa_def *started_as_helper = shader->options->lower_helper_invocation ? - nir_build_lowered_load_helper_invocation(&b) : - nir_load_helper_invocation(&b, 1); - - nir_deref_instr *is_helper_deref = nir_build_deref_var(&b, is_helper); - nir_store_deref(&b, is_helper_deref, started_as_helper, 1); - - return nir_shader_instructions_pass(shader, - nir_lower_load_and_store_is_helper, - nir_metadata_block_index | - nir_metadata_dominance, - is_helper_deref); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_load_const_to_scalar.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_load_const_to_scalar.c deleted file mode 100644 index af6a1c6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_load_const_to_scalar.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright © 2015 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../../util/macros.h" -#include "nir.h" -#include "nir_builder.h" - -/** @file nir_lower_load_const_to_scalar.c - * - * Replaces vector nir_load_const instructions with a series of loads and a - * vec[234] to reconstruct the original vector (on the assumption that - * nir_lower_alu_to_scalar() will then be used to split it up). - * - * This gives NIR a chance to CSE more operations on a scalar shader, when the - * same value was used in different vector contant loads. - */ - -static bool -lower_load_const_instr_scalar(nir_load_const_instr *lower) -{ - if (lower->def.num_components == 1) - return false; - - nir_builder b; - nir_builder_init(&b, nir_cf_node_get_function(&lower->instr.block->cf_node)); - b.cursor = nir_before_instr(&lower->instr); - - /* Emit the individual loads. */ - nir_ssa_def *loads[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < lower->def.num_components; i++) { - nir_load_const_instr *load_comp = - nir_load_const_instr_create(b.shader, 1, lower->def.bit_size); - load_comp->value[0] = lower->value[i]; - nir_builder_instr_insert(&b, &load_comp->instr); - loads[i] = &load_comp->def; - } - - /* Batch things back together into a vector. */ - nir_ssa_def *vec = nir_vec(&b, loads, lower->def.num_components); - - /* Replace the old load with a reference to our reconstructed vector. */ - nir_ssa_def_rewrite_uses(&lower->def, vec); - nir_instr_remove(&lower->instr); - return true; -} - -static bool -nir_lower_load_const_to_scalar_impl(nir_function_impl *impl) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_load_const) - progress |= - lower_load_const_instr_scalar(nir_instr_as_load_const(instr)); - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_load_const_to_scalar(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_lower_load_const_to_scalar_impl(function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_locals_to_regs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_locals_to_regs.c deleted file mode 100644 index 9c1f3fc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_locals_to_regs.c +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -struct locals_to_regs_state { - nir_builder builder; - - /* A hash table mapping derefs to registers */ - struct hash_table *regs_table; - - bool progress; -}; - -/* The following two functions implement a hash and equality check for - * variable dreferences. When the hash or equality function encounters an - * array, it ignores the offset and whether it is direct or indirect - * entirely. - */ -static uint32_t -hash_deref(const void *void_deref) -{ - uint32_t hash = 0; - - for (const nir_deref_instr *deref = void_deref; deref; - deref = nir_deref_instr_parent(deref)) { - switch (deref->deref_type) { - case nir_deref_type_var: - return XXH32(&deref->var, sizeof(deref->var), hash); - - case nir_deref_type_array: - continue; /* Do nothing */ - - case nir_deref_type_struct: - hash = XXH32(&deref->strct.index, sizeof(deref->strct.index), hash); - continue; - - default: - unreachable("Invalid deref type"); - } - } - - unreachable("We should have hit a variable dereference"); -} - -static bool -derefs_equal(const void *void_a, const void *void_b) -{ - for (const nir_deref_instr *a = void_a, *b = void_b; a || b; - a = nir_deref_instr_parent(a), b = nir_deref_instr_parent(b)) { - if (a->deref_type != b->deref_type) - return false; - - switch (a->deref_type) { - case nir_deref_type_var: - return a->var == b->var; - - case nir_deref_type_array: - continue; /* Do nothing */ - - case nir_deref_type_struct: - if (a->strct.index != b->strct.index) - return false; - continue; - - default: - unreachable("Invalid deref type"); - } - } - - unreachable("We should have hit a variable dereference"); -} - -static nir_register * -get_reg_for_deref(nir_deref_instr *deref, struct locals_to_regs_state *state) -{ - uint32_t hash = hash_deref(deref); - - assert(nir_deref_instr_get_variable(deref)->constant_initializer == NULL && - nir_deref_instr_get_variable(deref)->pointer_initializer == NULL); - - struct hash_entry *entry = - _mesa_hash_table_search_pre_hashed(state->regs_table, hash, deref); - if (entry) - return entry->data; - - unsigned array_size = 1; - for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type == nir_deref_type_array) - array_size *= glsl_get_length(nir_deref_instr_parent(d)->type); - } - - assert(glsl_type_is_vector_or_scalar(deref->type)); - - nir_register *reg = nir_local_reg_create(state->builder.impl); - reg->num_components = glsl_get_vector_elements(deref->type); - reg->num_array_elems = array_size > 1 ? array_size : 0; - reg->bit_size = glsl_get_bit_size(deref->type); - - _mesa_hash_table_insert_pre_hashed(state->regs_table, hash, deref, reg); - - return reg; -} - -static nir_src -get_deref_reg_src(nir_deref_instr *deref, struct locals_to_regs_state *state) -{ - nir_builder *b = &state->builder; - - nir_src src; - - src.is_ssa = false; - src.reg.reg = get_reg_for_deref(deref, state); - src.reg.base_offset = 0; - src.reg.indirect = NULL; - - /* It is possible for a user to create a shader that has an array with a - * single element and then proceed to access it indirectly. Indirectly - * accessing a non-array register is not allowed in NIR. In order to - * handle this case we just convert it to a direct reference. - */ - if (src.reg.reg->num_array_elems == 0) - return src; - - unsigned inner_array_size = 1; - for (const nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type != nir_deref_type_array) - continue; - - if (nir_src_is_const(d->arr.index) && !src.reg.indirect) { - src.reg.base_offset += nir_src_as_uint(d->arr.index) * - inner_array_size; - } else { - if (src.reg.indirect) { - assert(src.reg.base_offset == 0); - } else { - src.reg.indirect = gc_alloc(gc_get_context(deref), nir_src, 1); - *src.reg.indirect = - nir_src_for_ssa(nir_imm_int(b, src.reg.base_offset)); - src.reg.base_offset = 0; - } - - assert(src.reg.indirect->is_ssa); - nir_ssa_def *index = nir_i2iN(b, nir_ssa_for_src(b, d->arr.index, 1), 32); - src.reg.indirect->ssa = - nir_iadd(b, src.reg.indirect->ssa, - nir_imul_imm(b, index, inner_array_size)); - } - - inner_array_size *= glsl_get_length(nir_deref_instr_parent(d)->type); - } - - return src; -} - -static bool -lower_locals_to_regs_block(nir_block *block, - struct locals_to_regs_state *state) -{ - nir_builder *b = &state->builder; - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_function_temp)) - continue; - - b->cursor = nir_before_instr(&intrin->instr); - - nir_alu_instr *mov = nir_alu_instr_create(b->shader, nir_op_mov); - mov->src[0].src = get_deref_reg_src(deref, state); - - if (mov->src[0].src.reg.reg->num_array_elems != 0 && - mov->src[0].src.reg.base_offset >= mov->src[0].src.reg.reg->num_array_elems) { - /* out-of-bounds read, return 0 instead. */ - mov->src[0].src = nir_src_for_ssa(nir_imm_intN_t(b, 0, mov->src[0].src.reg.reg->bit_size)); - for (int i = 0; i < intrin->num_components; i++) - mov->src[0].swizzle[i] = 0; - } - - mov->dest.write_mask = (1 << intrin->num_components) - 1; - - if (intrin->dest.is_ssa) { - nir_ssa_dest_init(&mov->instr, &mov->dest.dest, - intrin->num_components, - intrin->dest.ssa.bit_size, NULL); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - &mov->dest.dest.ssa); - } else { - nir_dest_copy(&mov->dest.dest, &intrin->dest, &mov->instr); - } - nir_builder_instr_insert(b, &mov->instr); - - nir_instr_remove(&intrin->instr); - state->progress = true; - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_function_temp)) - continue; - - b->cursor = nir_before_instr(&intrin->instr); - - nir_src reg_src = get_deref_reg_src(deref, state); - - if (reg_src.reg.reg->num_array_elems != 0 && - reg_src.reg.base_offset >= reg_src.reg.reg->num_array_elems) { - /* Out of bounds write, just eliminate it. */ - nir_instr_remove(&intrin->instr); - state->progress = true; - break; - } - - nir_alu_instr *mov = nir_alu_instr_create(b->shader, nir_op_mov); - - nir_src_copy(&mov->src[0].src, &intrin->src[1], &mov->instr); - - /* The normal NIR SSA copy propagate pass can't happen after this pass, - * so do an ad-hoc copy propagate since this ALU op can do swizzles - * while the deref couldn't. - */ - if (mov->src[0].src.is_ssa) { - nir_instr *parent = mov->src[0].src.ssa->parent_instr; - if (parent->type == nir_instr_type_alu) { - nir_alu_instr *parent_alu = nir_instr_as_alu(parent); - if (parent_alu->op == nir_op_mov && parent_alu->src[0].src.is_ssa) { - for (unsigned i = 0; i < intrin->num_components; i++) - mov->src[0].swizzle[i] = parent_alu->src[0].swizzle[mov->src[0].swizzle[i]]; - mov->src[0].abs = parent_alu->src[0].abs; - mov->src[0].negate = parent_alu->src[0].negate; - mov->src[0].src = parent_alu->src[0].src; - } - } - } - - mov->dest.write_mask = nir_intrinsic_write_mask(intrin); - mov->dest.dest.is_ssa = false; - mov->dest.dest.reg.reg = reg_src.reg.reg; - mov->dest.dest.reg.base_offset = reg_src.reg.base_offset; - mov->dest.dest.reg.indirect = reg_src.reg.indirect; - - nir_builder_instr_insert(b, &mov->instr); - - nir_instr_remove(&intrin->instr); - state->progress = true; - break; - } - - case nir_intrinsic_copy_deref: - unreachable("There should be no copies whatsoever at this point"); - break; - - default: - continue; - } - } - - return true; -} - -static bool -nir_lower_locals_to_regs_impl(nir_function_impl *impl) -{ - struct locals_to_regs_state state; - - nir_builder_init(&state.builder, impl); - state.progress = false; - state.regs_table = _mesa_hash_table_create(NULL, hash_deref, derefs_equal); - - nir_metadata_require(impl, nir_metadata_dominance); - - nir_foreach_block(block, impl) { - lower_locals_to_regs_block(block, &state); - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - _mesa_hash_table_destroy(state.regs_table, NULL); - - return state.progress; -} - -bool -nir_lower_locals_to_regs(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress = nir_lower_locals_to_regs_impl(function->impl) || progress; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_mediump.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_mediump.c deleted file mode 100644 index 3da34ea..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_mediump.c +++ /dev/null @@ -1,1118 +0,0 @@ -/* - * Copyright (C) 2020 Google, Inc. - * Copyright (C) 2021 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** - * Return the intrinsic if it matches the mask in "modes", else return NULL. - */ -static nir_intrinsic_instr * -get_io_intrinsic(nir_instr *instr, nir_variable_mode modes, - nir_variable_mode *out_mode) -{ - if (instr->type != nir_instr_type_intrinsic) - return NULL; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - switch (intr->intrinsic) { - case nir_intrinsic_load_input: - case nir_intrinsic_load_input_vertex: - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_load_per_vertex_input: - *out_mode = nir_var_shader_in; - return modes & nir_var_shader_in ? intr : NULL; - case nir_intrinsic_load_output: - case nir_intrinsic_load_per_vertex_output: - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_vertex_output: - *out_mode = nir_var_shader_out; - return modes & nir_var_shader_out ? intr : NULL; - default: - return NULL; - } -} - -/** - * Recompute the IO "base" indices from scratch to remove holes or to fix - * incorrect base values due to changes in IO locations by using IO locations - * to assign new bases. The mapping from locations to bases becomes - * monotonically increasing. - */ -bool -nir_recompute_io_bases(nir_shader *nir, nir_variable_mode modes) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - - BITSET_DECLARE(inputs, NUM_TOTAL_VARYING_SLOTS); - BITSET_DECLARE(outputs, NUM_TOTAL_VARYING_SLOTS); - BITSET_ZERO(inputs); - BITSET_ZERO(outputs); - - /* Gather the bitmasks of used locations. */ - nir_foreach_block_safe (block, impl) { - nir_foreach_instr_safe (instr, block) { - nir_variable_mode mode; - nir_intrinsic_instr *intr = get_io_intrinsic(instr, modes, &mode); - if (!intr) - continue; - - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - unsigned num_slots = sem.num_slots; - if (sem.medium_precision) - num_slots = (num_slots + sem.high_16bits + 1) / 2; - - if (mode == nir_var_shader_in) { - for (unsigned i = 0; i < num_slots; i++) - BITSET_SET(inputs, sem.location + i); - } else if (!sem.dual_source_blend_index) { - for (unsigned i = 0; i < num_slots; i++) - BITSET_SET(outputs, sem.location + i); - } - } - } - - /* Renumber bases. */ - bool changed = false; - - nir_foreach_block_safe (block, impl) { - nir_foreach_instr_safe (instr, block) { - nir_variable_mode mode; - nir_intrinsic_instr *intr = get_io_intrinsic(instr, modes, &mode); - if (!intr) - continue; - - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - unsigned num_slots = sem.num_slots; - if (sem.medium_precision) - num_slots = (num_slots + sem.high_16bits + 1) / 2; - - if (mode == nir_var_shader_in) { - nir_intrinsic_set_base(intr, - BITSET_PREFIX_SUM(inputs, sem.location)); - } else if (sem.dual_source_blend_index) { - nir_intrinsic_set_base(intr, - BITSET_PREFIX_SUM(outputs, NUM_TOTAL_VARYING_SLOTS)); - } else { - nir_intrinsic_set_base(intr, - BITSET_PREFIX_SUM(outputs, sem.location)); - } - changed = true; - } - } - - if (changed) { - nir_metadata_preserve(impl, nir_metadata_dominance | - nir_metadata_block_index); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return changed; -} - -/** - * Lower mediump inputs and/or outputs to 16 bits. - * - * \param modes Whether to lower inputs, outputs, or both. - * \param varying_mask Determines which varyings to skip (VS inputs, - * FS outputs, and patch varyings ignore this mask). - * \param use_16bit_slots Remap lowered slots to* VARYING_SLOT_VARn_16BIT. - */ -bool -nir_lower_mediump_io(nir_shader *nir, nir_variable_mode modes, - uint64_t varying_mask, bool use_16bit_slots) -{ - bool changed = false; - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - assert(impl); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block_safe (block, impl) { - nir_foreach_instr_safe (instr, block) { - nir_variable_mode mode; - nir_intrinsic_instr *intr = get_io_intrinsic(instr, modes, &mode); - if (!intr) - continue; - - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - nir_ssa_def *(*convert)(nir_builder *, nir_ssa_def *); - bool is_varying = !(nir->info.stage == MESA_SHADER_VERTEX && - mode == nir_var_shader_in) && - !(nir->info.stage == MESA_SHADER_FRAGMENT && - mode == nir_var_shader_out); - - if (is_varying && sem.location <= VARYING_SLOT_VAR31 && - !(varying_mask & BITFIELD64_BIT(sem.location))) { - continue; /* can't lower */ - } - - if (nir_intrinsic_has_src_type(intr)) { - /* Stores. */ - nir_alu_type type = nir_intrinsic_src_type(intr); - - nir_op upconvert_op; - switch (type) { - case nir_type_float32: - convert = nir_f2fmp; - upconvert_op = nir_op_f2f32; - break; - case nir_type_int32: - convert = nir_i2imp; - upconvert_op = nir_op_i2i32; - break; - case nir_type_uint32: - convert = nir_i2imp; - upconvert_op = nir_op_u2u32; - break; - default: - continue; /* already lowered? */ - } - - /* Check that the output is mediump, or (for fragment shader - * outputs) is a conversion from a mediump value, and lower it to - * mediump. Note that we don't automatically apply it to - * gl_FragDepth, as GLSL ES declares it highp and so hardware such - * as Adreno a6xx doesn't expect a half-float output for it. - */ - nir_ssa_def *val = intr->src[0].ssa; - bool is_fragdepth = (nir->info.stage == MESA_SHADER_FRAGMENT && - sem.location == FRAG_RESULT_DEPTH); - if (!sem.medium_precision && - (is_varying || is_fragdepth || val->parent_instr->type != nir_instr_type_alu || - nir_instr_as_alu(val->parent_instr)->op != upconvert_op)) { - continue; - } - - /* Convert the 32-bit store into a 16-bit store. */ - b.cursor = nir_before_instr(&intr->instr); - nir_instr_rewrite_src_ssa(&intr->instr, &intr->src[0], - convert(&b, intr->src[0].ssa)); - nir_intrinsic_set_src_type(intr, (type & ~32) | 16); - } else { - if (!sem.medium_precision) - continue; - - /* Loads. */ - nir_alu_type type = nir_intrinsic_dest_type(intr); - - switch (type) { - case nir_type_float32: - convert = nir_f2f32; - break; - case nir_type_int32: - convert = nir_i2i32; - break; - case nir_type_uint32: - convert = nir_u2u32; - break; - default: - continue; /* already lowered? */ - } - - /* Convert the 32-bit load into a 16-bit load. */ - b.cursor = nir_after_instr(&intr->instr); - intr->dest.ssa.bit_size = 16; - nir_intrinsic_set_dest_type(intr, (type & ~32) | 16); - nir_ssa_def *dst = convert(&b, &intr->dest.ssa); - nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, dst, - dst->parent_instr); - } - - if (use_16bit_slots && is_varying && - sem.location >= VARYING_SLOT_VAR0 && - sem.location <= VARYING_SLOT_VAR31) { - unsigned index = sem.location - VARYING_SLOT_VAR0; - - sem.location = VARYING_SLOT_VAR0_16BIT + index / 2; - sem.high_16bits = index % 2; - nir_intrinsic_set_io_semantics(intr, sem); - } - changed = true; - } - } - - if (changed && use_16bit_slots) - nir_recompute_io_bases(nir, modes); - - if (changed) { - nir_metadata_preserve(impl, nir_metadata_dominance | - nir_metadata_block_index); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return changed; -} - -/** - * Set the mediump precision bit for those shader inputs and outputs that are - * set in the "modes" mask. Non-generic varyings (that GLES3 doesn't have) - * are ignored. The "types" mask can be (nir_type_float | nir_type_int), etc. - */ -bool -nir_force_mediump_io(nir_shader *nir, nir_variable_mode modes, - nir_alu_type types) -{ - bool changed = false; - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - assert(impl); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block_safe (block, impl) { - nir_foreach_instr_safe (instr, block) { - nir_variable_mode mode; - nir_intrinsic_instr *intr = get_io_intrinsic(instr, modes, &mode); - if (!intr) - continue; - - nir_alu_type type; - if (nir_intrinsic_has_src_type(intr)) - type = nir_intrinsic_src_type(intr); - else - type = nir_intrinsic_dest_type(intr); - if (!(type & types)) - continue; - - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - - if (nir->info.stage == MESA_SHADER_FRAGMENT && - mode == nir_var_shader_out) { - /* Only accept FS outputs. */ - if (sem.location < FRAG_RESULT_DATA0 && - sem.location != FRAG_RESULT_COLOR) - continue; - } else if (nir->info.stage == MESA_SHADER_VERTEX && - mode == nir_var_shader_in) { - /* Accept all VS inputs. */ - } else { - /* Only accept generic varyings. */ - if (sem.location < VARYING_SLOT_VAR0 || - sem.location > VARYING_SLOT_VAR31) - continue; - } - - sem.medium_precision = 1; - nir_intrinsic_set_io_semantics(intr, sem); - changed = true; - } - } - - if (changed) { - nir_metadata_preserve(impl, nir_metadata_dominance | - nir_metadata_block_index); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return changed; -} - -/** - * Remap 16-bit varying slots to the original 32-bit varying slots. - * This only changes IO semantics and bases. - */ -bool -nir_unpack_16bit_varying_slots(nir_shader *nir, nir_variable_mode modes) -{ - bool changed = false; - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - assert(impl); - - nir_foreach_block_safe (block, impl) { - nir_foreach_instr_safe (instr, block) { - nir_variable_mode mode; - nir_intrinsic_instr *intr = get_io_intrinsic(instr, modes, &mode); - if (!intr) - continue; - - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - - if (sem.location < VARYING_SLOT_VAR0_16BIT || - sem.location > VARYING_SLOT_VAR15_16BIT) - continue; - - sem.location = VARYING_SLOT_VAR0 + - (sem.location - VARYING_SLOT_VAR0_16BIT) * 2 + - sem.high_16bits; - sem.high_16bits = 0; - nir_intrinsic_set_io_semantics(intr, sem); - changed = true; - } - } - - if (changed) - nir_recompute_io_bases(nir, modes); - - if (changed) { - nir_metadata_preserve(impl, nir_metadata_dominance | - nir_metadata_block_index); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return changed; -} - -static bool -is_mediump_or_lowp(unsigned precision) -{ - return precision == GLSL_PRECISION_LOW || precision == GLSL_PRECISION_MEDIUM; -} - -static bool -try_lower_mediump_var(nir_variable *var, nir_variable_mode modes, struct set *set) -{ - if (!(var->data.mode & modes) || !is_mediump_or_lowp(var->data.precision)) - return false; - - if (set && _mesa_set_search(set, var)) - return false; - - const struct glsl_type *new_type = glsl_type_to_16bit(var->type); - if (var->type == new_type) - return false; - - var->type = new_type; - return true; -} - -static bool -nir_lower_mediump_vars_impl(nir_function_impl *impl, nir_variable_mode modes, - bool any_lowered) -{ - bool progress = false; - - if (modes & nir_var_function_temp) { - nir_foreach_function_temp_variable(var, impl) { - any_lowered = try_lower_mediump_var(var, modes, NULL) || any_lowered; - } - } - if (!any_lowered) - return false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - - if (deref->modes & modes) { - switch (deref->deref_type) { - case nir_deref_type_var: - deref->type = deref->var->type; - break; - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - deref->type = glsl_get_array_element(nir_deref_instr_parent(deref)->type); - break; - case nir_deref_type_struct: - deref->type = glsl_get_struct_field(nir_deref_instr_parent(deref)->type, deref->strct.index); - break; - default: - nir_print_instr(instr, stderr); - unreachable("unsupported deref type"); - } - } - - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - - if (intrin->dest.ssa.bit_size != 32) - break; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (glsl_get_bit_size(deref->type) != 16) - break; - - intrin->dest.ssa.bit_size = 16; - - b.cursor = nir_after_instr(&intrin->instr); - nir_ssa_def *replace = NULL; - switch (glsl_get_base_type(deref->type)) { - case GLSL_TYPE_FLOAT16: - replace = nir_f2f32(&b, &intrin->dest.ssa); - break; - case GLSL_TYPE_INT16: - replace = nir_i2i32(&b, &intrin->dest.ssa); - break; - case GLSL_TYPE_UINT16: - replace = nir_u2u32(&b, &intrin->dest.ssa); - break; - default: - unreachable("Invalid 16-bit type"); - } - - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - replace, - replace->parent_instr); - progress = true; - break; - } - - case nir_intrinsic_store_deref: { - nir_ssa_def *data = intrin->src[1].ssa; - if (data->bit_size != 32) - break; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (glsl_get_bit_size(deref->type) != 16) - break; - - b.cursor = nir_before_instr(&intrin->instr); - nir_ssa_def *replace = NULL; - switch (glsl_get_base_type(deref->type)) { - case GLSL_TYPE_FLOAT16: - replace = nir_f2fmp(&b, data); - break; - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT16: - replace = nir_i2imp(&b, data); - break; - default: - unreachable("Invalid 16-bit type"); - } - - nir_instr_rewrite_src(&intrin->instr, &intrin->src[1], - nir_src_for_ssa(replace)); - progress = true; - break; - } - - case nir_intrinsic_copy_deref: { - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - nir_deref_instr *src = nir_src_as_deref(intrin->src[1]); - /* If we convert once side of a copy and not the other, that - * would be very bad. - */ - if (nir_deref_mode_may_be(dst, modes) || - nir_deref_mode_may_be(src, modes)) { - assert(nir_deref_mode_must_be(dst, modes)); - assert(nir_deref_mode_must_be(src, modes)); - } - break; - } - - default: - break; - } - break; - } - - default: - break; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_mediump_vars(nir_shader *shader, nir_variable_mode modes) -{ - bool progress = false; - - if (modes & ~nir_var_function_temp) { - /* Don't lower GLES mediump atomic ops to 16-bit -- no hardware is expecting that. */ - struct set *no_lower_set = _mesa_pointer_set_create(NULL); - nir_foreach_block(block, nir_shader_get_entrypoint(shader)) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - switch (intr->intrinsic) { - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fcomp_swap: { - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - /* If we have atomic derefs that we can't track, then don't lower any mediump. */ - if (!var) - return false; - - _mesa_set_add(no_lower_set, var); - break; - } - - default: - break; - } - } - } - - nir_foreach_variable_in_shader(var, shader) { - progress = try_lower_mediump_var(var, modes, no_lower_set) || progress; - } - - ralloc_free(no_lower_set); - } - - nir_foreach_function(function, shader) { - if (function->impl && nir_lower_mediump_vars_impl(function->impl, modes, progress)) - progress = true; - } - - return progress; -} - -static bool -is_n_to_m_conversion(nir_instr *instr, unsigned n, nir_op m) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - return alu->op == m && alu->src[0].src.ssa->bit_size == n; -} - -static bool -is_f16_to_f32_conversion(nir_instr *instr) -{ - return is_n_to_m_conversion(instr, 16, nir_op_f2f32); -} - -static bool -is_f32_to_f16_conversion(nir_instr *instr) -{ - return is_n_to_m_conversion(instr, 32, nir_op_f2f16) || - is_n_to_m_conversion(instr, 32, nir_op_f2fmp); -} - -static bool -is_i16_to_i32_conversion(nir_instr *instr) -{ - return is_n_to_m_conversion(instr, 16, nir_op_i2i32); -} - -static bool -is_u16_to_u32_conversion(nir_instr *instr) -{ - return is_n_to_m_conversion(instr, 16, nir_op_u2u32); -} - -static bool -is_i32_to_i16_conversion(nir_instr *instr) -{ - return is_n_to_m_conversion(instr, 32, nir_op_i2i16) || - is_n_to_m_conversion(instr, 32, nir_op_u2u16) || - is_n_to_m_conversion(instr, 32, nir_op_i2imp); -} - -/** - * Fix types of source operands of texture opcodes according to - * the constraints by inserting the appropriate conversion opcodes. - * - * For example, if the type of derivatives must be equal to texture - * coordinates and the type of the texture bias must be 32-bit, there - * will be 2 constraints describing that. - */ -bool -nir_legalize_16bit_sampler_srcs(nir_shader *nir, - nir_tex_src_type_constraints constraints) -{ - bool changed = false; - nir_function_impl *impl = nir_shader_get_entrypoint(nir); - assert(impl); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block_safe (block, impl) { - nir_foreach_instr_safe (instr, block) { - if (instr->type != nir_instr_type_tex) - continue; - - nir_tex_instr *tex = nir_instr_as_tex(instr); - int8_t map[nir_num_tex_src_types]; - memset(map, -1, sizeof(map)); - - /* Create a mapping from src_type to src[i]. */ - for (unsigned i = 0; i < tex->num_srcs; i++) - map[tex->src[i].src_type] = i; - - /* Legalize src types. */ - for (unsigned i = 0; i < tex->num_srcs; i++) { - nir_tex_src_type_constraint c = constraints[tex->src[i].src_type]; - - if (!c.legalize_type) - continue; - - /* Determine the required bit size for the src. */ - unsigned bit_size; - if (c.bit_size) { - bit_size = c.bit_size; - } else { - if (map[c.match_src] == -1) - continue; /* e.g. txs */ - - bit_size = tex->src[map[c.match_src]].src.ssa->bit_size; - } - - /* Check if the type is legal. */ - if (bit_size == tex->src[i].src.ssa->bit_size) - continue; - - /* Fix the bit size. */ - bool is_sint = nir_tex_instr_src_type(tex, i) == nir_type_int; - bool is_uint = nir_tex_instr_src_type(tex, i) == nir_type_uint; - nir_ssa_def *(*convert)(nir_builder *, nir_ssa_def *); - - switch (bit_size) { - case 16: - convert = is_sint ? nir_i2i16 : - is_uint ? nir_u2u16 : nir_f2f16; - break; - case 32: - convert = is_sint ? nir_i2i32 : - is_uint ? nir_u2u32 : nir_f2f32; - break; - default: - assert(!"unexpected bit size"); - continue; - } - - b.cursor = nir_before_instr(&tex->instr); - nir_ssa_def *conv = - convert(&b, nir_ssa_for_src(&b, tex->src[i].src, - tex->src[i].src.ssa->num_components)); - nir_instr_rewrite_src_ssa(&tex->instr, &tex->src[i].src, conv); - changed = true; - } - } - } - - if (changed) { - nir_metadata_preserve(impl, nir_metadata_dominance | - nir_metadata_block_index); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return changed; -} - -static bool -const_is_f16(nir_ssa_scalar scalar) -{ - double value = nir_ssa_scalar_as_float(scalar); - uint16_t fp16_val = _mesa_float_to_half(value); - bool is_denorm = (fp16_val & 0x7fff) != 0 && (fp16_val & 0x7fff) <= 0x3ff; - return value == _mesa_half_to_float(fp16_val) && !is_denorm; -} - -static bool -const_is_u16(nir_ssa_scalar scalar) -{ - uint64_t value = nir_ssa_scalar_as_uint(scalar); - return value == (uint16_t) value; -} - -static bool -const_is_i16(nir_ssa_scalar scalar) -{ - int64_t value = nir_ssa_scalar_as_int(scalar); - return value == (int16_t) value; -} - -static bool -can_fold_16bit_src(nir_ssa_def *ssa, nir_alu_type src_type, bool sext_matters) -{ - bool fold_f16 = src_type == nir_type_float32; - bool fold_u16 = src_type == nir_type_uint32 && sext_matters; - bool fold_i16 = src_type == nir_type_int32 && sext_matters; - bool fold_i16_u16 = (src_type == nir_type_uint32 || src_type == nir_type_int32) && !sext_matters; - - bool can_fold = fold_f16 || fold_u16 || fold_i16 || fold_i16_u16; - for (unsigned i = 0; can_fold && i < ssa->num_components; i++) { - nir_ssa_scalar comp = nir_ssa_scalar_resolved(ssa, i); - if (nir_ssa_scalar_is_undef(comp)) - continue; - else if (nir_ssa_scalar_is_const(comp)) { - if (fold_f16) - can_fold &= const_is_f16(comp); - else if (fold_u16) - can_fold &= const_is_u16(comp); - else if (fold_i16) - can_fold &= const_is_i16(comp); - else if (fold_i16_u16) - can_fold &= (const_is_u16(comp) || const_is_i16(comp)); - } else { - if (fold_f16) - can_fold &= is_f16_to_f32_conversion(comp.def->parent_instr); - else if (fold_u16) - can_fold &= is_u16_to_u32_conversion(comp.def->parent_instr); - else if (fold_i16) - can_fold &= is_i16_to_i32_conversion(comp.def->parent_instr); - else if (fold_i16_u16) - can_fold &= (is_i16_to_i32_conversion(comp.def->parent_instr) || - is_u16_to_u32_conversion(comp.def->parent_instr)); - } - } - - return can_fold; -} - -static void -fold_16bit_src(nir_builder *b, nir_instr *instr, nir_src *src, nir_alu_type src_type) -{ - b->cursor = nir_before_instr(instr); - - nir_ssa_scalar new_comps[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < src->ssa->num_components; i++) { - nir_ssa_scalar comp = nir_ssa_scalar_resolved(src->ssa, i); - - if (nir_ssa_scalar_is_undef(comp)) - new_comps[i] = nir_get_ssa_scalar(nir_ssa_undef(b, 1, 16), 0); - else if (nir_ssa_scalar_is_const(comp)) { - nir_ssa_def *constant; - if (src_type == nir_type_float32) - constant = nir_imm_float16(b, nir_ssa_scalar_as_float(comp)); - else - constant = nir_imm_intN_t(b, nir_ssa_scalar_as_uint(comp), 16); - new_comps[i] = nir_get_ssa_scalar(constant, 0); - } else { - /* conversion instruction */ - new_comps[i] = nir_ssa_scalar_chase_alu_src(comp, 0); - } - } - - nir_ssa_def *new_vec = nir_vec_scalars(b, new_comps, src->ssa->num_components); - - nir_instr_rewrite_src_ssa(instr, src, new_vec); -} - -static bool -fold_16bit_store_data(nir_builder *b, nir_intrinsic_instr *instr) -{ - nir_alu_type src_type = nir_intrinsic_src_type(instr); - nir_src *data_src = &instr->src[3]; - - b->cursor = nir_before_instr(&instr->instr); - - if (!can_fold_16bit_src(data_src->ssa, src_type, true)) - return false; - - fold_16bit_src(b, &instr->instr, data_src, src_type); - - nir_intrinsic_set_src_type(instr, (src_type & ~32) | 16); - - return true; -} - -static bool -fold_16bit_destination(nir_ssa_def *ssa, nir_alu_type dest_type, - unsigned exec_mode, nir_rounding_mode rdm) -{ - bool is_f32_to_f16 = dest_type == nir_type_float32; - bool is_i32_to_i16 = dest_type == nir_type_int32 || dest_type == nir_type_uint32; - - nir_rounding_mode src_rdm = - nir_get_rounding_mode_from_float_controls(exec_mode, nir_type_float16); - bool allow_standard = (src_rdm == rdm || src_rdm == nir_rounding_mode_undef); - bool allow_rtz = rdm == nir_rounding_mode_rtz; - bool allow_rtne = rdm == nir_rounding_mode_rtne; - - nir_foreach_use(use, ssa) { - nir_instr *instr = use->parent_instr; - is_f32_to_f16 &= (allow_standard && is_f32_to_f16_conversion(instr)) || - (allow_rtz && is_n_to_m_conversion(instr, 32, nir_op_f2f16_rtz)) || - (allow_rtne && is_n_to_m_conversion(instr, 32, nir_op_f2f16_rtne)); - is_i32_to_i16 &= is_i32_to_i16_conversion(instr); - } - - if (!is_f32_to_f16 && !is_i32_to_i16) - return false; - - /* All uses are the same conversions. Replace them with mov. */ - nir_foreach_use(use, ssa) { - nir_alu_instr *conv = nir_instr_as_alu(use->parent_instr); - conv->op = nir_op_mov; - } - - ssa->bit_size = 16; - return true; -} - -static bool -fold_16bit_image_dest(nir_intrinsic_instr *instr, unsigned exec_mode, - nir_alu_type allowed_types, nir_rounding_mode rdm) -{ - nir_alu_type dest_type = nir_intrinsic_dest_type(instr); - - if (!(nir_alu_type_get_base_type(dest_type) & allowed_types)) - return false; - - if (!fold_16bit_destination(&instr->dest.ssa, dest_type, exec_mode, rdm)) - return false; - - nir_intrinsic_set_dest_type(instr, (dest_type & ~32) | 16); - - return true; -} - -static bool -fold_16bit_tex_dest(nir_tex_instr *tex, unsigned exec_mode, - nir_alu_type allowed_types, nir_rounding_mode rdm) -{ - /* Skip sparse residency */ - if (tex->is_sparse) - return false; - - if (tex->op != nir_texop_tex && - tex->op != nir_texop_txb && - tex->op != nir_texop_txd && - tex->op != nir_texop_txl && - tex->op != nir_texop_txf && - tex->op != nir_texop_txf_ms && - tex->op != nir_texop_tg4 && - tex->op != nir_texop_tex_prefetch && - tex->op != nir_texop_fragment_fetch_amd) - return false; - - if (!(nir_alu_type_get_base_type(tex->dest_type) & allowed_types)) - return false; - - if (!fold_16bit_destination(&tex->dest.ssa, tex->dest_type, exec_mode, rdm)) - return false; - - tex->dest_type = (tex->dest_type & ~32) | 16; - return true; -} - - -static bool -fold_16bit_tex_srcs(nir_builder *b, nir_tex_instr *tex, - struct nir_fold_tex_srcs_options *options) -{ - if (tex->op != nir_texop_tex && - tex->op != nir_texop_txb && - tex->op != nir_texop_txd && - tex->op != nir_texop_txl && - tex->op != nir_texop_txf && - tex->op != nir_texop_txf_ms && - tex->op != nir_texop_tg4 && - tex->op != nir_texop_tex_prefetch && - tex->op != nir_texop_fragment_fetch_amd && - tex->op != nir_texop_fragment_mask_fetch_amd) - return false; - - if (!(options->sampler_dims & BITFIELD_BIT(tex->sampler_dim))) - return false; - - unsigned fold_srcs = 0; - for (unsigned i = 0; i < tex->num_srcs; i++) { - /* Filter out sources that should be ignored. */ - if (!(BITFIELD_BIT(tex->src[i].src_type) & options->src_types)) - continue; - - nir_src *src = &tex->src[i].src; - - nir_alu_type src_type = nir_tex_instr_src_type(tex, i) | src->ssa->bit_size; - - /* Zero-extension (u16) and sign-extension (i16) have - * the same behavior here - txf returns 0 if bit 15 is set - * because it's out of bounds and the higher bits don't - * matter. - */ - if (!can_fold_16bit_src(src->ssa, src_type, false)) - return false; - - fold_srcs |= (1 << i); - } - - u_foreach_bit(i, fold_srcs) { - nir_src *src = &tex->src[i].src; - nir_alu_type src_type = nir_tex_instr_src_type(tex, i) | src->ssa->bit_size; - fold_16bit_src(b, &tex->instr, src, src_type); - } - - return !!fold_srcs; -} - -static bool -fold_16bit_image_srcs(nir_builder *b, nir_intrinsic_instr *instr, int lod_idx) -{ - enum glsl_sampler_dim dim = nir_intrinsic_image_dim(instr); - bool is_ms = (dim == GLSL_SAMPLER_DIM_MS || dim == GLSL_SAMPLER_DIM_SUBPASS_MS); - nir_src *coords = &instr->src[1]; - nir_src *sample = is_ms ? &instr->src[2] : NULL; - nir_src *lod = lod_idx >= 0 ? &instr->src[lod_idx] : NULL; - - if (dim == GLSL_SAMPLER_DIM_BUF || - !can_fold_16bit_src(coords->ssa, nir_type_int32, false) || - (sample && !can_fold_16bit_src(sample->ssa, nir_type_int32, false)) || - (lod && !can_fold_16bit_src(lod->ssa, nir_type_int32, false))) - return false; - - fold_16bit_src(b, &instr->instr, coords, nir_type_int32); - if (sample) - fold_16bit_src(b, &instr->instr, sample, nir_type_int32); - if (lod) - fold_16bit_src(b, &instr->instr, lod, nir_type_int32); - - return true; -} - -static bool -fold_16bit_tex_image(nir_builder *b, nir_instr *instr, void *params) -{ - struct nir_fold_16bit_tex_image_options *options = params; - unsigned exec_mode = b->shader->info.float_controls_execution_mode; - bool progress = false; - - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrinsic = nir_instr_as_intrinsic(instr); - - switch (intrinsic->intrinsic) { - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_store: - if (options->fold_image_store_data) - progress |= fold_16bit_store_data(b, intrinsic); - if (options->fold_image_srcs) - progress |= fold_16bit_image_srcs(b, intrinsic, 4); - break; - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_load: - if (options->fold_image_dest_types) - progress |= fold_16bit_image_dest(intrinsic, exec_mode, - options->fold_image_dest_types, - options->rounding_mode); - if (options->fold_image_srcs) - progress |= fold_16bit_image_srcs(b, intrinsic, 3); - break; - case nir_intrinsic_bindless_image_sparse_load: - case nir_intrinsic_image_deref_sparse_load: - case nir_intrinsic_image_sparse_load: - if (options->fold_image_srcs) - progress |= fold_16bit_image_srcs(b, intrinsic, 3); - break; - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_fmax: - case nir_intrinsic_bindless_image_atomic_inc_wrap: - case nir_intrinsic_bindless_image_atomic_dec_wrap: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_atomic_inc_wrap: - case nir_intrinsic_image_deref_atomic_dec_wrap: - case nir_intrinsic_image_atomic_add: - case nir_intrinsic_image_atomic_imin: - case nir_intrinsic_image_atomic_umin: - case nir_intrinsic_image_atomic_imax: - case nir_intrinsic_image_atomic_umax: - case nir_intrinsic_image_atomic_and: - case nir_intrinsic_image_atomic_or: - case nir_intrinsic_image_atomic_xor: - case nir_intrinsic_image_atomic_exchange: - case nir_intrinsic_image_atomic_comp_swap: - case nir_intrinsic_image_atomic_fadd: - case nir_intrinsic_image_atomic_fmin: - case nir_intrinsic_image_atomic_fmax: - case nir_intrinsic_image_atomic_inc_wrap: - case nir_intrinsic_image_atomic_dec_wrap: - if (options->fold_image_srcs) - progress |= fold_16bit_image_srcs(b, intrinsic, -1); - break; - default: - break; - } - } else if (instr->type == nir_instr_type_tex) { - nir_tex_instr *tex = nir_instr_as_tex(instr); - - if (options->fold_tex_dest_types) - progress |= fold_16bit_tex_dest(tex, exec_mode, options->fold_tex_dest_types, - options->rounding_mode); - - for (unsigned i = 0; i < options->fold_srcs_options_count; i++) { - progress |= fold_16bit_tex_srcs(b, tex, &options->fold_srcs_options[i]); - } - } - - return progress; -} - -bool nir_fold_16bit_tex_image(nir_shader *nir, - struct nir_fold_16bit_tex_image_options *options) -{ - return nir_shader_instructions_pass(nir, - fold_16bit_tex_image, - nir_metadata_block_index | nir_metadata_dominance, - options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_mem_access_bit_sizes.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_mem_access_bit_sizes.c deleted file mode 100644 index e53871e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_mem_access_bit_sizes.c +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * Copyright © 2023 Collabora, Ltd. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" -#include "../../util/u_math.h" -#include "../../util/bitscan.h" - -static nir_intrinsic_instr * -dup_mem_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, - nir_ssa_def *offset, - unsigned align_mul, unsigned align_offset, - nir_ssa_def *data, - unsigned num_components, unsigned bit_size) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[intrin->intrinsic]; - - nir_intrinsic_instr *dup = - nir_intrinsic_instr_create(b->shader, intrin->intrinsic); - - nir_src *intrin_offset_src = nir_get_io_offset_src(intrin); - for (unsigned i = 0; i < info->num_srcs; i++) { - assert(intrin->src[i].is_ssa); - if (i == 0 && data != NULL) { - assert(!info->has_dest); - assert(&intrin->src[i] != intrin_offset_src); - dup->src[i] = nir_src_for_ssa(data); - } else if (&intrin->src[i] == intrin_offset_src) { - dup->src[i] = nir_src_for_ssa(offset); - } else { - dup->src[i] = nir_src_for_ssa(intrin->src[i].ssa); - } - } - - dup->num_components = num_components; - for (unsigned i = 0; i < info->num_indices; i++) - dup->const_index[i] = intrin->const_index[i]; - - nir_intrinsic_set_align(dup, align_mul, align_offset); - - if (info->has_dest) { - assert(intrin->dest.is_ssa); - nir_ssa_dest_init(&dup->instr, &dup->dest, - num_components, bit_size, NULL); - } else { - nir_intrinsic_set_write_mask(dup, (1 << num_components) - 1); - } - - nir_builder_instr_insert(b, &dup->instr); - - return dup; -} - -static bool -lower_mem_load(nir_builder *b, nir_intrinsic_instr *intrin, - nir_lower_mem_access_bit_sizes_cb mem_access_size_align_cb, - const void *cb_data) -{ - assert(intrin->dest.is_ssa); - const unsigned bit_size = intrin->dest.ssa.bit_size; - const unsigned num_components = intrin->dest.ssa.num_components; - const unsigned bytes_read = num_components * (bit_size / 8); - const uint32_t align_mul = nir_intrinsic_align_mul(intrin); - const uint32_t whole_align_offset = nir_intrinsic_align_offset(intrin); - const uint32_t whole_align = nir_intrinsic_align(intrin); - nir_src *offset_src = nir_get_io_offset_src(intrin); - const bool offset_is_const = nir_src_is_const(*offset_src); - assert(offset_src->is_ssa); - nir_ssa_def *offset = offset_src->ssa; - - nir_mem_access_size_align requested = - mem_access_size_align_cb(intrin->intrinsic, bytes_read, - align_mul, whole_align_offset, - offset_is_const, cb_data); - - assert(util_is_power_of_two_nonzero(align_mul)); - assert(util_is_power_of_two_nonzero(requested.align)); - if (requested.num_components == num_components && - requested.bit_size == bit_size && - requested.align <= whole_align) - return false; - - /* Otherwise, we have to break it into chunks. We could end up with as - * many as 32 chunks if we're loading a u64vec16 as individual dwords. - */ - nir_ssa_def *chunks[32]; - unsigned num_chunks = 0; - unsigned chunk_start = 0; - while (chunk_start < bytes_read) { - const unsigned bytes_left = bytes_read - chunk_start; - const uint32_t chunk_align_offset = - (whole_align_offset + chunk_start) % align_mul; - const uint32_t chunk_align = - nir_combined_align(align_mul, chunk_align_offset); - requested = mem_access_size_align_cb(intrin->intrinsic, bytes_left, - align_mul, chunk_align_offset, - offset_is_const, cb_data); - - unsigned chunk_bytes; - assert(util_is_power_of_two_nonzero(requested.align)); - if (align_mul < requested.align) { - /* For this case, we need to be able to shift the value so we assume - * the alignment is less than the size of a single component. This - * ensures that we don't need to upcast in order to shift. - */ - assert(requested.bit_size >= requested.align * 8); - - uint64_t align_mask = requested.align - 1; - nir_ssa_def *chunk_offset = nir_iadd_imm(b, offset, chunk_start); - nir_ssa_def *pad = nir_iand_imm(b, chunk_offset, align_mask); - chunk_offset = nir_iand_imm(b, chunk_offset, ~align_mask); - - nir_intrinsic_instr *load = - dup_mem_intrinsic(b, intrin, chunk_offset, - requested.align, 0, NULL, - requested.num_components, requested.bit_size); - - unsigned max_pad = requested.align - chunk_align; - unsigned requested_bytes = - requested.num_components * requested.bit_size / 8; - chunk_bytes = MIN2(bytes_left, requested_bytes - max_pad); - - nir_ssa_def *shift = nir_imul_imm(b, pad, 8); - nir_ssa_def *shifted = nir_ushr(b, &load->dest.ssa, shift); - - if (load->dest.ssa.num_components > 1) { - nir_ssa_def *rev_shift = - nir_isub_imm(b, load->dest.ssa.bit_size, shift); - nir_ssa_def *rev_shifted = nir_ishl(b, &load->dest.ssa, rev_shift); - - nir_ssa_def *comps[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 1; i < load->dest.ssa.num_components; i++) - comps[i - 1] = nir_channel(b, rev_shifted, i); - - comps[load->dest.ssa.num_components - 1] = - nir_imm_zero(b, 1, load->dest.ssa.bit_size); - - rev_shifted = nir_vec(b, comps, load->dest.ssa.num_components); - shifted = nir_bcsel(b, nir_ieq_imm(b, shift, 0), &load->dest.ssa, - nir_ior(b, shifted, rev_shifted)); - } - - unsigned chunk_bit_size = MIN2(8 << (ffs(chunk_bytes) - 1), bit_size); - unsigned chunk_num_components = chunk_bytes / (chunk_bit_size / 8); - - /* There's no guarantee that chunk_num_components is a valid NIR - * vector size, so just loop one chunk component at a time - */ - for (unsigned i = 0; i < chunk_num_components; i++) { - assert(num_chunks < ARRAY_SIZE(chunks)); - chunks[num_chunks++] = - nir_extract_bits(b, &shifted, 1, i * chunk_bit_size, - 1, chunk_bit_size); - } - } else if (chunk_align_offset % requested.align) { - /* In this case, we know how much to adjust the offset */ - uint32_t delta = chunk_align_offset % requested.align; - nir_ssa_def *load_offset = - nir_iadd_imm(b, offset, chunk_start - (int)delta); - - const uint32_t load_align_offset = - (chunk_align_offset - delta) % align_mul; - - nir_intrinsic_instr *load = - dup_mem_intrinsic(b, intrin, load_offset, - align_mul, load_align_offset, NULL, - requested.num_components, requested.bit_size); - - assert(requested.bit_size >= 8); - chunk_bytes = requested.num_components * (requested.bit_size / 8); - assert(chunk_bytes > delta); - chunk_bytes -= delta; - - unsigned chunk_bit_size = MIN2(8 << (ffs(chunk_bytes) - 1), bit_size); - unsigned chunk_num_components = chunk_bytes / (chunk_bit_size / 8); - - /* There's no guarantee that chunk_num_components is a valid NIR - * vector size, so just loop one chunk component at a time - */ - nir_ssa_def *chunk_data = &load->dest.ssa; - for (unsigned i = 0; i < chunk_num_components; i++) { - assert(num_chunks < ARRAY_SIZE(chunks)); - chunks[num_chunks++] = - nir_extract_bits(b, &chunk_data, 1, - delta * 8 + i * chunk_bit_size, - 1, chunk_bit_size); - } - } else { - nir_ssa_def *chunk_offset = nir_iadd_imm(b, offset, chunk_start); - nir_intrinsic_instr *load = - dup_mem_intrinsic(b, intrin, chunk_offset, - align_mul, chunk_align_offset, NULL, - requested.num_components, requested.bit_size); - - chunk_bytes = requested.num_components * (requested.bit_size / 8); - assert(num_chunks < ARRAY_SIZE(chunks)); - chunks[num_chunks++] = &load->dest.ssa; - } - - chunk_start += chunk_bytes; - } - - nir_ssa_def *result = nir_extract_bits(b, chunks, num_chunks, 0, - num_components, bit_size); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, result); - nir_instr_remove(&intrin->instr); - - return true; -} - -static bool -lower_mem_store(nir_builder *b, nir_intrinsic_instr *intrin, - nir_lower_mem_access_bit_sizes_cb mem_access_size_align_cb, - const void *cb_data) -{ - assert(intrin->src[0].is_ssa); - nir_ssa_def *value = intrin->src[0].ssa; - - assert(intrin->num_components == value->num_components); - const unsigned bit_size = value->bit_size; - const unsigned byte_size = bit_size / 8; - const unsigned num_components = intrin->num_components; - const unsigned bytes_written = num_components * byte_size; - const uint32_t align_mul = nir_intrinsic_align_mul(intrin); - const uint32_t whole_align_offset = nir_intrinsic_align_offset(intrin); - const uint32_t whole_align = nir_intrinsic_align(intrin); - nir_src *offset_src = nir_get_io_offset_src(intrin); - const bool offset_is_const = nir_src_is_const(*offset_src); - assert(offset_src->is_ssa); - nir_ssa_def *offset = offset_src->ssa; - - nir_component_mask_t writemask = nir_intrinsic_write_mask(intrin); - assert(writemask < (1 << num_components)); - - nir_mem_access_size_align requested = - mem_access_size_align_cb(intrin->intrinsic, bytes_written, - align_mul, whole_align_offset, - offset_is_const, cb_data); - - assert(util_is_power_of_two_nonzero(align_mul)); - assert(util_is_power_of_two_nonzero(requested.align)); - if (requested.num_components == num_components && - requested.bit_size == bit_size && - requested.align <= whole_align && - writemask == BITFIELD_MASK(num_components)) - return false; - - assert(byte_size <= sizeof(uint64_t)); - BITSET_DECLARE(mask, NIR_MAX_VEC_COMPONENTS * sizeof(uint64_t)); - BITSET_ZERO(mask); - - for (unsigned i = 0; i < num_components; i++) { - if (writemask & (1u << i)) { - BITSET_SET_RANGE_INSIDE_WORD(mask, i * byte_size, - ((i + 1) * byte_size) - 1); - } - } - - while (BITSET_FFS(mask) != 0) { - const uint32_t chunk_start = BITSET_FFS(mask) - 1; - - uint32_t end; - for (end = chunk_start + 1; end < bytes_written; end++) { - if (!(BITSET_TEST(mask, end))) - break; - } - /* The size of the current contiguous chunk in bytes */ - const uint32_t max_chunk_bytes = end - chunk_start; - const uint32_t chunk_align_offset = - (whole_align_offset + chunk_start) % align_mul; - - requested = mem_access_size_align_cb(intrin->intrinsic, max_chunk_bytes, - align_mul, chunk_align_offset, - offset_is_const, cb_data); - - const uint32_t chunk_bytes = - requested.num_components * (requested.bit_size / 8); - assert(chunk_bytes <= max_chunk_bytes); - - assert(util_is_power_of_two_nonzero(requested.align)); - assert(requested.align <= align_mul); - assert((chunk_align_offset % requested.align) == 0); - - nir_ssa_def *packed = nir_extract_bits(b, &value, 1, chunk_start * 8, - requested.num_components, - requested.bit_size); - - nir_ssa_def *chunk_offset = nir_iadd_imm(b, offset, chunk_start); - dup_mem_intrinsic(b, intrin, chunk_offset, - align_mul, chunk_align_offset, packed, - requested.num_components, requested.bit_size); - - BITSET_CLEAR_RANGE(mask, chunk_start, (chunk_start + chunk_bytes - 1)); - } - - nir_instr_remove(&intrin->instr); - - return true; -} - -struct lower_mem_access_state { - nir_variable_mode modes; - nir_lower_mem_access_bit_sizes_cb cb; - const void *cb_data; -}; - -static nir_variable_mode -intrin_to_variable_mode(nir_intrinsic_op intrin) -{ - switch (intrin) { - case nir_intrinsic_load_ubo: - return nir_var_mem_ubo; - - case nir_intrinsic_load_global: - case nir_intrinsic_store_global: - return nir_var_mem_global; - - case nir_intrinsic_load_global_constant: - return nir_var_mem_constant; - - case nir_intrinsic_load_ssbo: - case nir_intrinsic_store_ssbo: - return nir_var_mem_ssbo; - - case nir_intrinsic_load_shared: - case nir_intrinsic_store_shared: - return nir_var_mem_shared; - - case nir_intrinsic_load_scratch: - case nir_intrinsic_store_scratch: - return nir_var_shader_temp | nir_var_function_temp; - - case nir_intrinsic_load_task_payload: - case nir_intrinsic_store_task_payload: - return nir_var_mem_task_payload; - - default: - return 0; - } -} - -static bool -lower_mem_access_instr(nir_builder *b, nir_instr *instr, void *_data) -{ - struct lower_mem_access_state *state = _data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (!(state->modes & intrin_to_variable_mode(intrin->intrinsic))) - return false; - - b->cursor = nir_after_instr(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_global: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_shared: - case nir_intrinsic_load_scratch: - case nir_intrinsic_load_task_payload: - return lower_mem_load(b, intrin, state->cb, state->cb_data); - - case nir_intrinsic_store_global: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_scratch: - case nir_intrinsic_store_task_payload: - return lower_mem_store(b, intrin, state->cb, state->cb_data); - - default: - return false; - } -} - -bool -nir_lower_mem_access_bit_sizes(nir_shader *shader, - nir_variable_mode modes, - nir_lower_mem_access_bit_sizes_cb cb, - const void *cb_data) -{ - struct lower_mem_access_state state = { - .modes = modes, - .cb = cb, - .cb_data = cb_data - }; - - return nir_shader_instructions_pass(shader, lower_mem_access_instr, - nir_metadata_block_index | - nir_metadata_dominance, - (void *)&state); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_memcpy.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_memcpy.c deleted file mode 100644 index e9c3601..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_memcpy.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -#include - -/** Returns the type to use for a copy of the given size. - * - * The actual type doesn't matter here all that much as we're just going to do - * a load/store on it and never any arithmetic. - */ -static const struct glsl_type * -copy_type_for_byte_size(unsigned size) -{ - switch (size) { - case 1: return glsl_vector_type(GLSL_TYPE_UINT8, 1); - case 2: return glsl_vector_type(GLSL_TYPE_UINT16, 1); - case 4: return glsl_vector_type(GLSL_TYPE_UINT, 1); - case 8: return glsl_vector_type(GLSL_TYPE_UINT, 2); - case 16: return glsl_vector_type(GLSL_TYPE_UINT, 4); - default: - unreachable("Unsupported size"); - } -} - -static nir_ssa_def * -memcpy_load_deref_elem(nir_builder *b, nir_deref_instr *parent, - nir_ssa_def *index) -{ - nir_deref_instr *deref; - - index = nir_i2iN(b, index, nir_dest_bit_size(parent->dest)); - assert(parent->deref_type == nir_deref_type_cast); - deref = nir_build_deref_ptr_as_array(b, parent, index); - - return nir_load_deref(b, deref); -} - -static nir_ssa_def * -memcpy_load_deref_elem_imm(nir_builder *b, nir_deref_instr *parent, - uint64_t index) -{ - nir_ssa_def *idx = nir_imm_intN_t(b, index, parent->dest.ssa.bit_size); - return memcpy_load_deref_elem(b, parent, idx); -} - -static void -memcpy_store_deref_elem(nir_builder *b, nir_deref_instr *parent, - nir_ssa_def *index, nir_ssa_def *value) -{ - nir_deref_instr *deref; - - index = nir_i2iN(b, index, nir_dest_bit_size(parent->dest)); - assert(parent->deref_type == nir_deref_type_cast); - deref = nir_build_deref_ptr_as_array(b, parent, index); - nir_store_deref(b, deref, value, ~0); -} - -static void -memcpy_store_deref_elem_imm(nir_builder *b, nir_deref_instr *parent, - uint64_t index, nir_ssa_def *value) -{ - nir_ssa_def *idx = nir_imm_intN_t(b, index, parent->dest.ssa.bit_size); - memcpy_store_deref_elem(b, parent, idx, value); -} - -static bool -lower_memcpy_impl(nir_function_impl *impl) -{ - nir_builder b; - nir_builder_init(&b, impl); - - bool found_const_memcpy = false, found_non_const_memcpy = false; - - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *cpy = nir_instr_as_intrinsic(instr); - if (cpy->intrinsic != nir_intrinsic_memcpy_deref) - continue; - - b.cursor = nir_instr_remove(&cpy->instr); - - nir_deref_instr *dst = nir_src_as_deref(cpy->src[0]); - nir_deref_instr *src = nir_src_as_deref(cpy->src[1]); - if (nir_src_is_const(cpy->src[2])) { - found_const_memcpy = true; - uint64_t size = nir_src_as_uint(cpy->src[2]); - uint64_t offset = 0; - while (offset < size) { - uint64_t remaining = size - offset; - /* Find the largest chunk size power-of-two (MSB in remaining) - * and limit our chunk to 16B (a vec4). It's important to do as - * many 16B chunks as possible first so that the index - * computation is correct for - * memcpy_(load|store)_deref_elem_imm. - */ - unsigned copy_size = 1u << MIN2(util_last_bit64(remaining) - 1, 4); - const struct glsl_type *copy_type = - copy_type_for_byte_size(copy_size); - - nir_deref_instr *copy_dst = - nir_build_deref_cast(&b, &dst->dest.ssa, dst->modes, - copy_type, copy_size); - nir_deref_instr *copy_src = - nir_build_deref_cast(&b, &src->dest.ssa, src->modes, - copy_type, copy_size); - - uint64_t index = offset / copy_size; - nir_ssa_def *value = - memcpy_load_deref_elem_imm(&b, copy_src, index); - memcpy_store_deref_elem_imm(&b, copy_dst, index, value); - offset += copy_size; - } - } else { - found_non_const_memcpy = true; - assert(cpy->src[2].is_ssa); - nir_ssa_def *size = cpy->src[2].ssa; - - /* In this case, we don't have any idea what the size is so we - * emit a loop which copies one byte at a time. - */ - nir_deref_instr *copy_dst = - nir_build_deref_cast(&b, &dst->dest.ssa, dst->modes, - glsl_uint8_t_type(), 1); - nir_deref_instr *copy_src = - nir_build_deref_cast(&b, &src->dest.ssa, src->modes, - glsl_uint8_t_type(), 1); - - nir_variable *i = nir_local_variable_create(impl, - glsl_uintN_t_type(size->bit_size), NULL); - nir_store_var(&b, i, nir_imm_intN_t(&b, 0, size->bit_size), ~0); - nir_push_loop(&b); - { - nir_ssa_def *index = nir_load_var(&b, i); - nir_push_if(&b, nir_uge(&b, index, size)); - { - nir_jump(&b, nir_jump_break); - } - nir_pop_if(&b, NULL); - - nir_ssa_def *value = - memcpy_load_deref_elem(&b, copy_src, index); - memcpy_store_deref_elem(&b, copy_dst, index, value); - nir_store_var(&b, i, nir_iadd_imm(&b, index, 1), ~0); - } - nir_pop_loop(&b, NULL); - } - } - } - - if (found_non_const_memcpy) { - nir_metadata_preserve(impl, nir_metadata_none); - } else if (found_const_memcpy) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return found_const_memcpy || found_non_const_memcpy; -} - -bool -nir_lower_memcpy(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && lower_memcpy_impl(function->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_memory_model.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_memory_model.c deleted file mode 100644 index f9bc162..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_memory_model.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright © 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -/* - * Replaces make availability/visible semantics on barriers with - * ACCESS_COHERENT on memory loads/stores - */ - -#include "nir.h" -#include "../shader_enums.h" - -static bool -get_intrinsic_info(nir_intrinsic_instr *intrin, nir_variable_mode *modes, - bool *reads, bool *writes) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_sparse_load: - *modes = nir_src_as_deref(intrin->src[0])->modes; - *reads = true; - break; - case nir_intrinsic_image_deref_store: - *modes = nir_src_as_deref(intrin->src[0])->modes; - *writes = true; - break; - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - *modes = nir_src_as_deref(intrin->src[0])->modes; - *reads = true; - *writes = true; - break; - case nir_intrinsic_load_ssbo: - *modes = nir_var_mem_ssbo; - *reads = true; - break; - case nir_intrinsic_store_ssbo: - *modes = nir_var_mem_ssbo; - *writes = true; - break; - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fmin: - *modes = nir_var_mem_ssbo; - *reads = true; - *writes = true; - break; - case nir_intrinsic_load_global: - *modes = nir_var_mem_global; - *reads = true; - break; - case nir_intrinsic_store_global: - *modes = nir_var_mem_global; - *writes = true; - break; - case nir_intrinsic_global_atomic_add: - case nir_intrinsic_global_atomic_imin: - case nir_intrinsic_global_atomic_umin: - case nir_intrinsic_global_atomic_imax: - case nir_intrinsic_global_atomic_umax: - case nir_intrinsic_global_atomic_and: - case nir_intrinsic_global_atomic_or: - case nir_intrinsic_global_atomic_xor: - case nir_intrinsic_global_atomic_exchange: - case nir_intrinsic_global_atomic_comp_swap: - case nir_intrinsic_global_atomic_fadd: - case nir_intrinsic_global_atomic_fcomp_swap: - case nir_intrinsic_global_atomic_fmax: - case nir_intrinsic_global_atomic_fmin: - *modes = nir_var_mem_global; - *reads = true; - *writes = true; - break; - case nir_intrinsic_load_deref: - *modes = nir_src_as_deref(intrin->src[0])->modes; - *reads = true; - break; - case nir_intrinsic_store_deref: - *modes = nir_src_as_deref(intrin->src[0])->modes; - *writes = true; - break; - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_fcomp_swap: - *modes = nir_src_as_deref(intrin->src[0])->modes; - *reads = true; - *writes = true; - break; - default: - return false; - } - return true; -} - -static bool -visit_instr(nir_instr *instr, uint32_t *cur_modes, unsigned vis_avail_sem) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - if (intrin->intrinsic == nir_intrinsic_scoped_barrier && - (nir_intrinsic_memory_semantics(intrin) & vis_avail_sem)) { - *cur_modes |= nir_intrinsic_memory_modes(intrin); - - unsigned semantics = nir_intrinsic_memory_semantics(intrin); - nir_intrinsic_set_memory_semantics( - intrin, semantics & ~vis_avail_sem); - return true; - } - - if (!*cur_modes) - return false; /* early exit */ - - nir_variable_mode modes; - bool reads = false, writes = false; - if (!get_intrinsic_info(intrin, &modes, &reads, &writes)) - return false; - - if (!reads && vis_avail_sem == NIR_MEMORY_MAKE_VISIBLE) - return false; - if (!writes && vis_avail_sem == NIR_MEMORY_MAKE_AVAILABLE) - return false; - - if (!nir_intrinsic_has_access(intrin)) - return false; - - unsigned access = nir_intrinsic_access(intrin); - - if (access & (ACCESS_NON_READABLE | ACCESS_NON_WRITEABLE | ACCESS_CAN_REORDER | ACCESS_COHERENT)) - return false; - - if (*cur_modes & modes) { - nir_intrinsic_set_access(intrin, access | ACCESS_COHERENT); - return true; - } - - return false; -} - -static bool -lower_make_visible(nir_cf_node *cf_node, uint32_t *cur_modes) -{ - bool progress = false; - switch (cf_node->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(cf_node); - nir_foreach_instr(instr, block) - progress |= visit_instr(instr, cur_modes, NIR_MEMORY_MAKE_VISIBLE); - break; - } - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(cf_node); - uint32_t cur_modes_then = *cur_modes; - uint32_t cur_modes_else = *cur_modes; - foreach_list_typed(nir_cf_node, if_node, node, &nif->then_list) - progress |= lower_make_visible(if_node, &cur_modes_then); - foreach_list_typed(nir_cf_node, if_node, node, &nif->else_list) - progress |= lower_make_visible(if_node, &cur_modes_else); - *cur_modes |= cur_modes_then | cur_modes_else; - break; - } - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - bool loop_progress; - do { - loop_progress = false; - foreach_list_typed(nir_cf_node, loop_node, node, &loop->body) - loop_progress |= lower_make_visible(loop_node, cur_modes); - progress |= loop_progress; - } while (loop_progress); - break; - } - case nir_cf_node_function: - unreachable("Invalid cf type"); - } - return progress; -} - -static bool -lower_make_available(nir_cf_node *cf_node, uint32_t *cur_modes) -{ - bool progress = false; - switch (cf_node->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(cf_node); - nir_foreach_instr_reverse(instr, block) - progress |= visit_instr(instr, cur_modes, NIR_MEMORY_MAKE_AVAILABLE); - break; - } - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(cf_node); - uint32_t cur_modes_then = *cur_modes; - uint32_t cur_modes_else = *cur_modes; - foreach_list_typed_reverse(nir_cf_node, if_node, node, &nif->then_list) - progress |= lower_make_available(if_node, &cur_modes_then); - foreach_list_typed_reverse(nir_cf_node, if_node, node, &nif->else_list) - progress |= lower_make_available(if_node, &cur_modes_else); - *cur_modes |= cur_modes_then | cur_modes_else; - break; - } - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - bool loop_progress; - do { - loop_progress = false; - foreach_list_typed_reverse(nir_cf_node, loop_node, node, &loop->body) - loop_progress |= lower_make_available(loop_node, cur_modes); - progress |= loop_progress; - } while (loop_progress); - break; - } - case nir_cf_node_function: - unreachable("Invalid cf type"); - } - return progress; -} - -bool -nir_lower_memory_model(nir_shader *shader) -{ - bool progress = false; - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - struct exec_list *cf_list = &impl->body; - - uint32_t modes = 0; - foreach_list_typed(nir_cf_node, cf_node, node, cf_list) - progress |= lower_make_visible(cf_node, &modes); - - modes = 0; - foreach_list_typed_reverse(nir_cf_node, cf_node, node, cf_list) - progress |= lower_make_available(cf_node, &modes); - - if (progress) - nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance); - else - nir_metadata_preserve(impl, nir_metadata_all); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_multiview.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_multiview.c deleted file mode 100644 index 82fea39..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_multiview.c +++ /dev/null @@ -1,367 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * Copyright © 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_control_flow.h" -#include "nir_builder.h" - -/** - * This file implements an optimization for multiview. Some GPU's have a - * special mode which allows the vertex shader (or last stage in the geometry - * pipeline) to create multiple primitives in different layers of the - * framebuffer at once by writing multiple copies of gl_Position. The - * assumption is that in most uses of multiview, the only use of gl_ViewIndex - * is to change the position to implement the parallax effect, and other - * varyings will be the same between the different views. We put the body of - * the original vertex shader in a loop, writing to a different copy of - * gl_Position each loop iteration, and then let other optimizations clean up - * the mess. - */ - -static bool -shader_writes_to_memory(nir_shader *shader) -{ - /* With multiview, we would need to ensure that memory writes happen either - * once or once per view. Since combination of multiview and memory writes - * is not expected, we'll just skip this optimization in this case. - */ - - nir_function_impl *entrypoint = nir_shader_get_entrypoint(shader); - - nir_foreach_block(block, entrypoint) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_shared2_amd: - case nir_intrinsic_shared_atomic_add: - case nir_intrinsic_shared_atomic_imin: - case nir_intrinsic_shared_atomic_umin: - case nir_intrinsic_shared_atomic_imax: - case nir_intrinsic_shared_atomic_umax: - case nir_intrinsic_shared_atomic_and: - case nir_intrinsic_shared_atomic_or: - case nir_intrinsic_shared_atomic_xor: - case nir_intrinsic_shared_atomic_exchange: - case nir_intrinsic_shared_atomic_comp_swap: - case nir_intrinsic_task_payload_atomic_add: - case nir_intrinsic_task_payload_atomic_imin: - case nir_intrinsic_task_payload_atomic_umin: - case nir_intrinsic_task_payload_atomic_imax: - case nir_intrinsic_task_payload_atomic_umax: - case nir_intrinsic_task_payload_atomic_and: - case nir_intrinsic_task_payload_atomic_or: - case nir_intrinsic_task_payload_atomic_xor: - case nir_intrinsic_task_payload_atomic_exchange: - case nir_intrinsic_task_payload_atomic_comp_swap: - case nir_intrinsic_task_payload_atomic_fadd: - case nir_intrinsic_task_payload_atomic_fmin: - case nir_intrinsic_task_payload_atomic_fmax: - case nir_intrinsic_task_payload_atomic_fcomp_swap: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - return true; - - default: - /* Keep walking. */ - break; - } - } - } - - return false; -} - -bool -nir_shader_uses_view_index(nir_shader *shader) -{ - nir_function_impl *entrypoint = nir_shader_get_entrypoint(shader); - - nir_foreach_block(block, entrypoint) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic == nir_intrinsic_load_view_index) - return true; - } - } - - return false; -} - -static bool -shader_only_position_uses_view_index(nir_shader *shader) -{ - nir_shader *shader_no_position = nir_shader_clone(NULL, shader); - nir_function_impl *entrypoint = nir_shader_get_entrypoint(shader_no_position); - - /* Remove the store position from a cloned shader. */ - nir_foreach_block(block, entrypoint) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *store = nir_instr_as_intrinsic(instr); - if (store->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_variable *var = nir_intrinsic_get_var(store, 0); - if (var->data.location != VARYING_SLOT_POS) - continue; - - nir_instr_remove(&store->instr); - } - } - - /* Clean up shader so unused load_view_index intrinsics are removed. */ - bool progress; - do { - progress = false; - progress |= nir_opt_dead_cf(shader_no_position); - - /* Peephole select will drop if-blocks that have then and else empty, - * which will remove the usage of an SSA in the condition. - */ - progress |= nir_opt_peephole_select(shader_no_position, 0, false, false); - - progress |= nir_opt_dce(shader_no_position); - } while (progress); - - bool uses_view_index = nir_shader_uses_view_index(shader_no_position); - - ralloc_free(shader_no_position); - return !uses_view_index; -} - -/* Return true if it's safe to call nir_lower_multiview() on this vertex - * shader. Note that this only handles driver-agnostic checks, i.e. things - * which would make nir_lower_multiview() incorrect. Any driver-specific - * checks, e.g. for sufficient varying space or performance considerations, - * should be handled in the driver. - * - * Note that we don't handle the more complex checks needed for lowering - * pipelines with geometry or tessellation shaders. - */ - -bool -nir_can_lower_multiview(nir_shader *shader) -{ - bool writes_position = false; - nir_foreach_shader_out_variable(var, shader) { - if (var->data.location == VARYING_SLOT_POS) { - writes_position = true; - break; - } - } - - /* Don't bother handling this edge case. */ - if (!writes_position) - return false; - - return !shader_writes_to_memory(shader) && - shader_only_position_uses_view_index(shader); -} - -/** - * The lowering. Call with the last active geometry stage. - */ - -bool -nir_lower_multiview(nir_shader *shader, uint32_t view_mask) -{ - assert(shader->info.stage != MESA_SHADER_FRAGMENT); - int view_count = util_bitcount(view_mask); - - nir_function_impl *entrypoint = nir_shader_get_entrypoint(shader); - - /* Update position to refer to an array. */ - nir_variable *pos_var = NULL; - nir_foreach_shader_out_variable(var, shader) { - if (var->data.location == VARYING_SLOT_POS) { - assert(var->type == glsl_vec4_type()); - var->type = glsl_array_type(glsl_vec4_type(), view_count, 0); - var->data.per_view = true; - shader->info.per_view_outputs |= VARYING_BIT_POS; - pos_var = var; - break; - } - } - - assert(pos_var); - - nir_cf_list body; - nir_cf_list_extract(&body, &entrypoint->body); - - nir_builder b; - nir_builder_init(&b, entrypoint); - b.cursor = nir_after_cf_list(&entrypoint->body); - - /* Loop Index will go from 0 to view_count. */ - nir_variable *loop_index_var = - nir_local_variable_create(entrypoint, glsl_uint_type(), "loop_index"); - nir_deref_instr *loop_index_deref = nir_build_deref_var(&b, loop_index_var); - nir_store_deref(&b, loop_index_deref, nir_imm_int(&b, 0), 1); - - /* Array of view index values that are active in the loop. Note that the - * loop index only matches the view index if there are no gaps in the - * view_mask. - */ - nir_variable *view_index_var = nir_local_variable_create( - entrypoint, glsl_array_type(glsl_uint_type(), view_count, 0), "view_index"); - nir_deref_instr *view_index_deref = nir_build_deref_var(&b, view_index_var); - { - int array_position = 0; - uint32_t view_mask_temp = view_mask; - while (view_mask_temp) { - uint32_t view_index = u_bit_scan(&view_mask_temp); - nir_store_deref(&b, nir_build_deref_array_imm(&b, view_index_deref, array_position), - nir_imm_int(&b, view_index), 1); - array_position++; - } - } - - /* Create the equivalent of - * - * while (true): - * if (loop_index >= view_count): - * break - * - * view_index = active_indices[loop_index] - * pos_deref = &pos[loop_index] - * - * # Placeholder for the body to be reinserted. - * - * loop_index += 1 - * - * Later both `view_index` and `pos_deref` will be used to rewrite the - * original shader body. - */ - - nir_loop* loop = nir_push_loop(&b); - - nir_ssa_def *loop_index = nir_load_deref(&b, loop_index_deref); - nir_ssa_def *cmp = nir_ige(&b, loop_index, nir_imm_int(&b, view_count)); - nir_if *loop_check = nir_push_if(&b, cmp); - nir_jump(&b, nir_jump_break); - nir_pop_if(&b, loop_check); - - nir_ssa_def *view_index = - nir_load_deref(&b, nir_build_deref_array(&b, view_index_deref, loop_index)); - nir_deref_instr *pos_deref = - nir_build_deref_array(&b, nir_build_deref_var(&b, pos_var), loop_index); - - nir_store_deref(&b, loop_index_deref, nir_iadd_imm(&b, loop_index, 1), 1); - nir_pop_loop(&b, loop); - - /* Reinsert the body. */ - b.cursor = nir_after_instr(&pos_deref->instr); - nir_cf_reinsert(&body, b.cursor); - - nir_foreach_block(block, entrypoint) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_view_index: { - assert(intrin->dest.is_ssa); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, view_index); - break; - } - - case nir_intrinsic_store_deref: { - nir_variable *var = nir_intrinsic_get_var(intrin, 0); - if (var == pos_var) { - nir_deref_instr *old_deref = nir_src_as_deref(intrin->src[0]); - - nir_instr_rewrite_src(instr, &intrin->src[0], - nir_src_for_ssa(&pos_deref->dest.ssa)); - - /* Remove old deref since it has the wrong type. */ - nir_deref_instr_remove_if_unused(old_deref); - } - break; - } - - case nir_intrinsic_load_deref: - if (nir_intrinsic_get_var(intrin, 0) == pos_var) { - unreachable("Should have lowered I/O to temporaries " - "so no load_deref on position output is expected."); - } - break; - - case nir_intrinsic_copy_deref: - unreachable("Should have lowered copy_derefs at this point"); - break; - - default: - /* Do nothing. */ - break; - } - } - } - - nir_metadata_preserve(entrypoint, nir_metadata_none); - return true; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_non_uniform_access.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_non_uniform_access.c deleted file mode 100644 index 9b6ec17..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_non_uniform_access.c +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -struct nu_handle { - nir_src *src; - nir_ssa_def *handle; - nir_deref_instr *parent_deref; - nir_ssa_def *first; -}; - -static bool -nu_handle_init(struct nu_handle *h, nir_src *src) -{ - h->src = src; - - nir_deref_instr *deref = nir_src_as_deref(*src); - if (deref) { - if (deref->deref_type == nir_deref_type_var) - return false; - - nir_deref_instr *parent = nir_deref_instr_parent(deref); - assert(parent->deref_type == nir_deref_type_var); - - assert(deref->deref_type == nir_deref_type_array); - if (nir_src_is_const(deref->arr.index)) - return false; - - assert(deref->arr.index.is_ssa); - h->handle = deref->arr.index.ssa; - h->parent_deref = parent; - - return true; - } else { - if (nir_src_is_const(*src)) - return false; - - assert(src->is_ssa); - h->handle = src->ssa; - h->parent_deref = NULL; - - return true; - } -} - -static nir_ssa_def * -nu_handle_compare(const nir_lower_non_uniform_access_options *options, - nir_builder *b, struct nu_handle *handle) -{ - nir_component_mask_t channel_mask = ~0; - if (options->callback) - channel_mask = options->callback(handle->src, options->callback_data); - channel_mask &= nir_component_mask(handle->handle->num_components); - - nir_ssa_def *channels[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < handle->handle->num_components; i++) - channels[i] = nir_channel(b, handle->handle, i); - - handle->first = handle->handle; - nir_ssa_def *equal_first = nir_imm_true(b); - u_foreach_bit(i, channel_mask) { - nir_ssa_def *first = nir_read_first_invocation(b, channels[i]); - handle->first = nir_vector_insert_imm(b, handle->first, first, i); - - equal_first = nir_iand(b, equal_first, nir_ieq(b, first, channels[i])); - } - - return equal_first; -} - -static void -nu_handle_rewrite(nir_builder *b, struct nu_handle *h) -{ - if (h->parent_deref) { - /* Replicate the deref. */ - nir_deref_instr *deref = - nir_build_deref_array(b, h->parent_deref, h->first); - *(h->src) = nir_src_for_ssa(&deref->dest.ssa); - } else { - *(h->src) = nir_src_for_ssa(h->first); - } -} - -static bool -lower_non_uniform_tex_access(const nir_lower_non_uniform_access_options *options, - nir_builder *b, nir_tex_instr *tex) -{ - if (!tex->texture_non_uniform && !tex->sampler_non_uniform) - return false; - - /* We can have at most one texture and one sampler handle */ - unsigned num_handles = 0; - struct nu_handle handles[2]; - for (unsigned i = 0; i < tex->num_srcs; i++) { - switch (tex->src[i].src_type) { - case nir_tex_src_texture_offset: - case nir_tex_src_texture_handle: - case nir_tex_src_texture_deref: - if (!tex->texture_non_uniform) - continue; - break; - - case nir_tex_src_sampler_offset: - case nir_tex_src_sampler_handle: - case nir_tex_src_sampler_deref: - if (!tex->sampler_non_uniform) - continue; - break; - - default: - continue; - } - - assert(num_handles <= ARRAY_SIZE(handles)); - if (nu_handle_init(&handles[num_handles], &tex->src[i].src)) - num_handles++; - } - - if (num_handles == 0) - return false; - - b->cursor = nir_instr_remove(&tex->instr); - - nir_push_loop(b); - - nir_ssa_def *all_equal_first = nir_imm_true(b); - for (unsigned i = 0; i < num_handles; i++) { - if (i && handles[i].handle == handles[0].handle) { - handles[i].first = handles[0].first; - continue; - } - - nir_ssa_def *equal_first = nu_handle_compare(options, b, &handles[i]); - all_equal_first = nir_iand(b, all_equal_first, equal_first); - } - - nir_push_if(b, all_equal_first); - - for (unsigned i = 0; i < num_handles; i++) - nu_handle_rewrite(b, &handles[i]); - - nir_builder_instr_insert(b, &tex->instr); - nir_jump(b, nir_jump_break); - - tex->texture_non_uniform = false; - tex->sampler_non_uniform = false; - - return true; -} - -static bool -lower_non_uniform_access_intrin(const nir_lower_non_uniform_access_options *options, - nir_builder *b, nir_intrinsic_instr *intrin, - unsigned handle_src) -{ - if (!(nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM)) - return false; - - struct nu_handle handle; - if (!nu_handle_init(&handle, &intrin->src[handle_src])) - return false; - - b->cursor = nir_instr_remove(&intrin->instr); - - nir_push_loop(b); - - nir_push_if(b, nu_handle_compare(options, b, &handle)); - - nu_handle_rewrite(b, &handle); - - nir_builder_instr_insert(b, &intrin->instr); - nir_jump(b, nir_jump_break); - - nir_intrinsic_set_access(intrin, nir_intrinsic_access(intrin) & ~ACCESS_NON_UNIFORM); - - return true; -} - -static bool -nir_lower_non_uniform_access_impl(nir_function_impl *impl, - const nir_lower_non_uniform_access_options *options) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - if ((options->types & nir_lower_non_uniform_texture_access) && - lower_non_uniform_tex_access(options, &b, tex)) - progress = true; - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_ubo: - if ((options->types & nir_lower_non_uniform_ubo_access) && - lower_non_uniform_access_intrin(options, &b, intrin, 0)) - progress = true; - break; - - case nir_intrinsic_load_ssbo: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - if ((options->types & nir_lower_non_uniform_ssbo_access) && - lower_non_uniform_access_intrin(options, &b, intrin, 0)) - progress = true; - break; - - case nir_intrinsic_store_ssbo: - /* SSBO Stores put the index in the second source */ - if ((options->types & nir_lower_non_uniform_ssbo_access) && - lower_non_uniform_access_intrin(options, &b, intrin, 1)) - progress = true; - break; - - case nir_intrinsic_image_load: - case nir_intrinsic_image_sparse_load: - case nir_intrinsic_image_store: - case nir_intrinsic_image_atomic_add: - case nir_intrinsic_image_atomic_imin: - case nir_intrinsic_image_atomic_umin: - case nir_intrinsic_image_atomic_imax: - case nir_intrinsic_image_atomic_umax: - case nir_intrinsic_image_atomic_and: - case nir_intrinsic_image_atomic_or: - case nir_intrinsic_image_atomic_xor: - case nir_intrinsic_image_atomic_exchange: - case nir_intrinsic_image_atomic_comp_swap: - case nir_intrinsic_image_atomic_fadd: - case nir_intrinsic_image_atomic_fmin: - case nir_intrinsic_image_atomic_fmax: - case nir_intrinsic_image_size: - case nir_intrinsic_image_samples: - case nir_intrinsic_image_samples_identical: - case nir_intrinsic_image_fragment_mask_load_amd: - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_bindless_image_sparse_load: - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_fmax: - case nir_intrinsic_bindless_image_size: - case nir_intrinsic_bindless_image_samples: - case nir_intrinsic_bindless_image_samples_identical: - case nir_intrinsic_bindless_image_fragment_mask_load_amd: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_sparse_load: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_image_deref_samples_identical: - case nir_intrinsic_image_deref_fragment_mask_load_amd: - if ((options->types & nir_lower_non_uniform_image_access) && - lower_non_uniform_access_intrin(options, &b, intrin, 0)) - progress = true; - break; - - default: - /* Nothing to do */ - break; - } - break; - } - - default: - /* Nothing to do */ - break; - } - } - } - - if (progress) - nir_metadata_preserve(impl, nir_metadata_none); - - return progress; -} - -/** - * Lowers non-uniform resource access by using a loop - * - * This pass lowers non-uniform resource access by using subgroup operations - * and a loop. Most hardware requires things like textures and UBO access - * operations to happen on a dynamically uniform (or at least subgroup - * uniform) resource. This pass allows for non-uniform access by placing the - * texture instruction in a loop that looks something like this: - * - * loop { - * bool tex_eq_first = readFirstInvocationARB(texture) == texture; - * bool smp_eq_first = readFirstInvocationARB(sampler) == sampler; - * if (tex_eq_first && smp_eq_first) { - * res = texture(texture, sampler, ...); - * break; - * } - * } - * - * Fortunately, because the instruction is immediately followed by the only - * break in the loop, the block containing the instruction dominates the end - * of the loop. Therefore, it's safe to move the instruction into the loop - * without fixing up SSA in any way. - */ -bool -nir_lower_non_uniform_access(nir_shader *shader, - const nir_lower_non_uniform_access_options *options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && - nir_lower_non_uniform_access_impl(function->impl, options)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_packing.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_packing.c deleted file mode 100644 index d3f86a4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_packing.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#include "nir.h" -#include "nir_builder.h" - -/* - * lowers: - * - * packDouble2x32(foo) -> packDouble2x32Split(foo.x, foo.y) - * unpackDouble2x32(foo) -> vec2(unpackDouble2x32_x(foo), unpackDouble2x32_y(foo)) - * packInt2x32(foo) -> packInt2x32Split(foo.x, foo.y) - * unpackInt2x32(foo) -> vec2(unpackInt2x32_x(foo), unpackInt2x32_y(foo)) - */ - -static nir_ssa_def * -lower_pack_64_from_32(nir_builder *b, nir_ssa_def *src) -{ - return nir_pack_64_2x32_split(b, nir_channel(b, src, 0), - nir_channel(b, src, 1)); -} - -static nir_ssa_def * -lower_unpack_64_to_32(nir_builder *b, nir_ssa_def *src) -{ - return nir_vec2(b, nir_unpack_64_2x32_split_x(b, src), - nir_unpack_64_2x32_split_y(b, src)); -} - -static nir_ssa_def * -lower_pack_32_from_16(nir_builder *b, nir_ssa_def *src) -{ - return nir_pack_32_2x16_split(b, nir_channel(b, src, 0), - nir_channel(b, src, 1)); -} - -static nir_ssa_def * -lower_unpack_32_to_16(nir_builder *b, nir_ssa_def *src) -{ - return nir_vec2(b, nir_unpack_32_2x16_split_x(b, src), - nir_unpack_32_2x16_split_y(b, src)); -} - -static nir_ssa_def * -lower_pack_64_from_16(nir_builder *b, nir_ssa_def *src) -{ - nir_ssa_def *xy = nir_pack_32_2x16_split(b, nir_channel(b, src, 0), - nir_channel(b, src, 1)); - - nir_ssa_def *zw = nir_pack_32_2x16_split(b, nir_channel(b, src, 2), - nir_channel(b, src, 3)); - - return nir_pack_64_2x32_split(b, xy, zw); -} - -static nir_ssa_def * -lower_unpack_64_to_16(nir_builder *b, nir_ssa_def *src) -{ - nir_ssa_def *xy = nir_unpack_64_2x32_split_x(b, src); - nir_ssa_def *zw = nir_unpack_64_2x32_split_y(b, src); - - return nir_vec4(b, nir_unpack_32_2x16_split_x(b, xy), - nir_unpack_32_2x16_split_y(b, xy), - nir_unpack_32_2x16_split_x(b, zw), - nir_unpack_32_2x16_split_y(b, zw)); -} - -static nir_ssa_def * -lower_pack_32_from_8(nir_builder *b, nir_ssa_def *src) -{ - return nir_pack_32_4x8_split(b, nir_channel(b, src, 0), - nir_channel(b, src, 1), - nir_channel(b, src, 2), - nir_channel(b, src, 3)); -} - -static bool -lower_pack_instr(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu_instr = (nir_alu_instr *) instr; - - if (alu_instr->op != nir_op_pack_64_2x32 && - alu_instr->op != nir_op_unpack_64_2x32 && - alu_instr->op != nir_op_pack_64_4x16 && - alu_instr->op != nir_op_unpack_64_4x16 && - alu_instr->op != nir_op_pack_32_2x16 && - alu_instr->op != nir_op_unpack_32_2x16 && - alu_instr->op != nir_op_pack_32_4x8) - return false; - - b->cursor = nir_before_instr(&alu_instr->instr); - - nir_ssa_def *src = nir_ssa_for_alu_src(b, alu_instr, 0); - nir_ssa_def *dest; - - switch (alu_instr->op) { - case nir_op_pack_64_2x32: - dest = lower_pack_64_from_32(b, src); - break; - case nir_op_unpack_64_2x32: - dest = lower_unpack_64_to_32(b, src); - break; - case nir_op_pack_64_4x16: - dest = lower_pack_64_from_16(b, src); - break; - case nir_op_unpack_64_4x16: - dest = lower_unpack_64_to_16(b, src); - break; - case nir_op_pack_32_2x16: - dest = lower_pack_32_from_16(b, src); - break; - case nir_op_unpack_32_2x16: - dest = lower_unpack_32_to_16(b, src); - break; - case nir_op_pack_32_4x8: - dest = lower_pack_32_from_8(b, src); - break; - default: - unreachable("Impossible opcode"); - } - nir_ssa_def_rewrite_uses(&alu_instr->dest.dest.ssa, dest); - nir_instr_remove(&alu_instr->instr); - - return true; -} - -bool -nir_lower_pack(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, lower_pack_instr, - nir_metadata_block_index | nir_metadata_dominance, NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_passthrough_edgeflags.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_passthrough_edgeflags.c deleted file mode 100644 index ebb8779..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_passthrough_edgeflags.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static void -lower_impl(nir_function_impl *impl) -{ - nir_shader *shader = impl->function->shader; - nir_builder b; - nir_variable *in, *out; - nir_ssa_def *def; - - nir_builder_init(&b, impl); - b.cursor = nir_before_cf_list(&impl->body); - - /* The edge flag is the last input in st/mesa. This code is also called by - * i965 which calls it before any input locations are assigned. - */ - assert(shader->num_inputs == 0 || - shader->num_inputs == util_bitcount64(shader->info.inputs_read)); - - /* Lowered IO only uses intrinsics. It doesn't use variables. */ - if (shader->info.io_lowered) { - assert(shader->num_outputs == - util_bitcount64(shader->info.outputs_written)); - - /* Load an edge flag. */ - nir_io_semantics load_sem = {0}; - load_sem.location = VERT_ATTRIB_EDGEFLAG; - load_sem.num_slots = 1; - - nir_ssa_def *load = - nir_load_input(&b, 1, 32, nir_imm_int(&b, 0), - .base = shader->num_inputs++, - .component = 0, - .dest_type = nir_type_float32, - .io_semantics = load_sem); - - /* Store an edge flag. */ - nir_io_semantics semantics = {0}; - semantics.location = VARYING_SLOT_EDGE; - semantics.num_slots = 1; - - nir_store_output(&b, load, nir_imm_int(&b, 0), - .base = shader->num_outputs++, - .component = 0, - .io_semantics = semantics, - .src_type = nir_type_float32, - .write_mask = 0x1); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - return; - } - - in = nir_variable_create(shader, nir_var_shader_in, - glsl_vec4_type(), "edgeflag_in"); - in->data.location = VERT_ATTRIB_EDGEFLAG; - - in->data.driver_location = shader->num_inputs++; - shader->info.inputs_read |= VERT_BIT_EDGEFLAG; - - out = nir_variable_create(shader, nir_var_shader_out, - glsl_vec4_type(), "edgeflag_out"); - out->data.location = VARYING_SLOT_EDGE; - shader->info.outputs_written |= VARYING_BIT_EDGE; - - def = nir_load_var(&b, in); - nir_store_var(&b, out, def, 0xf); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); -} - -void nir_lower_passthrough_edgeflags(nir_shader *shader) -{ - assert(shader->info.stage == MESA_SHADER_VERTEX); - - shader->info.vs.needs_edge_flag = true; - - lower_impl(nir_shader_get_entrypoint(shader)); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_patch_vertices.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_patch_vertices.c deleted file mode 100644 index 2275e11..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_patch_vertices.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" -#include "../../mesa/program/prog_instruction.h" - -static nir_variable * -make_uniform(nir_shader *nir, const gl_state_index16 *tokens) -{ - /* Note: name must be prefixed with "gl_" to trigger slot based - * special handling in uniform setup. - */ - nir_variable *var = - nir_variable_create(nir, nir_var_uniform, glsl_int_type(), - "gl_PatchVerticesIn"); - var->num_state_slots = 1; - var->state_slots = ralloc_array(var, nir_state_slot, var->num_state_slots); - memcpy(var->state_slots[0].tokens, tokens, sizeof(*tokens) * STATE_LENGTH); - var->state_slots[0].swizzle = SWIZZLE_XXXX; - - return var; -} - -/** - * This pass lowers the load_patch_vertices_in intrinsic. - * - * - If we statically know the value, we lower it to a constant. - * (If a TES is linked against a TCS, the TCS tells us the TES input count.) - * - * - If not, and we're given Mesa state slots, we lower it to a uniform. - * - * - Otherwise, we leave it as a system value. - * - * This pass must be run after nir_lower_system_values(). - */ -bool -nir_lower_patch_vertices(nir_shader *nir, - unsigned static_count, - const gl_state_index16 *uniform_state_tokens) -{ - bool progress = false; - nir_variable *var = NULL; - - /* If there's no static count and we don't want uniforms, there's no - * lowering to do...just bail early. - */ - if (static_count == 0 && !uniform_state_tokens) - return false; - - nir_foreach_function(function, nir) { - if (function->impl) { - nir_foreach_block(block, function->impl) { - nir_builder b; - nir_builder_init(&b, function->impl); - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_patch_vertices_in) - continue; - - b.cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *val = NULL; - if (static_count) { - val = nir_imm_int(&b, static_count); - } else { - if (!var) - var = make_uniform(nir, uniform_state_tokens); - - val = nir_load_var(&b, var); - } - - progress = true; - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - val); - nir_instr_remove(instr); - } - } - } - - if (progress) { - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_phis_to_scalar.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_phis_to_scalar.c deleted file mode 100644 index 75eddab..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_phis_to_scalar.c +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -/* - * Implements a pass that lowers vector phi nodes to scalar phi nodes when - * we don't think it will hurt anything. - */ - -struct lower_phis_to_scalar_state { - nir_shader *shader; - void *mem_ctx; - struct exec_list dead_instrs; - - bool lower_all; - - /* Hash table marking which phi nodes are scalarizable. The key is - * pointers to phi instructions and the entry is either NULL for not - * scalarizable or non-null for scalarizable. - */ - struct hash_table *phi_table; -}; - -static bool -should_lower_phi(nir_phi_instr *phi, struct lower_phis_to_scalar_state *state); - -static bool -is_phi_src_scalarizable(nir_phi_src *src, - struct lower_phis_to_scalar_state *state) -{ - /* Don't know what to do with non-ssa sources */ - if (!src->src.is_ssa) - return false; - - nir_instr *src_instr = src->src.ssa->parent_instr; - switch (src_instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *src_alu = nir_instr_as_alu(src_instr); - - /* ALU operations with output_size == 0 should be scalarized. We - * will also see a bunch of vecN operations from scalarizing ALU - * operations and, since they can easily be copy-propagated, they - * are ok too. - */ - return nir_op_infos[src_alu->op].output_size == 0 || - nir_op_is_vec(src_alu->op); - } - - case nir_instr_type_phi: - /* A phi is scalarizable if we're going to lower it */ - return should_lower_phi(nir_instr_as_phi(src_instr), state); - - case nir_instr_type_load_const: - /* These are trivially scalarizable */ - return true; - - case nir_instr_type_ssa_undef: - /* The caller of this function is going to OR the results and we don't - * want undefs to count so we return false. - */ - return false; - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *src_intrin = nir_instr_as_intrinsic(src_instr); - - switch (src_intrin->intrinsic) { - case nir_intrinsic_load_deref: { - /* Don't scalarize if we see a load of a local variable because it - * might turn into one of the things we can't scalarize. - */ - nir_deref_instr *deref = nir_src_as_deref(src_intrin->src[0]); - return !nir_deref_mode_may_be(deref, nir_var_function_temp | - nir_var_shader_temp); - } - - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_interp_deref_at_vertex: - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_global: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_input: - return true; - default: - break; - } - } - - - default: - /* We can't scalarize this type of instruction */ - return false; - } -} - -/** - * Determines if the given phi node should be lowered. The only phi nodes - * we will scalarize at the moment are those where all of the sources are - * scalarizable, unless lower_all is set. - * - * The reason for this comes down to coalescing. Since phi sources can't - * swizzle, swizzles on phis have to be resolved by inserting a mov right - * before the phi. The choice then becomes between movs to pick off - * components for a scalar phi or potentially movs to recombine components - * for a vector phi. The problem is that the movs generated to pick off - * the components are almost uncoalescable. We can't coalesce them in NIR - * because we need them to pick off components and we can't coalesce them - * in the backend because the source register is a vector and the - * destination is a scalar that may be used at other places in the program. - * On the other hand, if we have a bunch of scalars going into a vector - * phi, the situation is much better. In this case, if the SSA def is - * generated in the predecessor block to the corresponding phi source, the - * backend code will be an ALU op into a temporary and then a mov into the - * given vector component; this move can almost certainly be coalesced - * away. - */ -static bool -should_lower_phi(nir_phi_instr *phi, struct lower_phis_to_scalar_state *state) -{ - /* Already scalar */ - if (phi->dest.ssa.num_components == 1) - return false; - - if (state->lower_all) - return true; - - struct hash_entry *entry = _mesa_hash_table_search(state->phi_table, phi); - if (entry) - return entry->data != NULL; - - /* Insert an entry and mark it as scalarizable for now. That way - * we don't recurse forever and a cycle in the dependence graph - * won't automatically make us fail to scalarize. - */ - entry = _mesa_hash_table_insert(state->phi_table, phi, (void *)(intptr_t)1); - - bool scalarizable = false; - - nir_foreach_phi_src(src, phi) { - /* This loop ignores srcs that are not scalarizable because its likely - * still worth copying to temps if another phi source is scalarizable. - * This reduces register spilling by a huge amount in the i965 driver for - * Deus Ex: MD. - */ - scalarizable = is_phi_src_scalarizable(src, state); - if (scalarizable) - break; - } - - /* The hash table entry for 'phi' may have changed while recursing the - * dependence graph, so we need to reset it */ - entry = _mesa_hash_table_search(state->phi_table, phi); - assert(entry); - - entry->data = (void *)(intptr_t)scalarizable; - - return scalarizable; -} - -static bool -lower_phis_to_scalar_block(nir_block *block, - struct lower_phis_to_scalar_state *state) -{ - bool progress = false; - - /* Find the last phi node in the block */ - nir_phi_instr *last_phi = NULL; - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - last_phi = nir_instr_as_phi(instr); - } - - /* We have to handle the phi nodes in their own pass due to the way - * we're modifying the linked list of instructions. - */ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - - if (!should_lower_phi(phi, state)) - continue; - - unsigned bit_size = phi->dest.ssa.bit_size; - - /* Create a vecN operation to combine the results. Most of these - * will be redundant, but copy propagation should clean them up for - * us. No need to add the complexity here. - */ - nir_op vec_op = nir_op_vec(phi->dest.ssa.num_components); - - nir_alu_instr *vec = nir_alu_instr_create(state->shader, vec_op); - nir_ssa_dest_init(&vec->instr, &vec->dest.dest, - phi->dest.ssa.num_components, - bit_size, NULL); - vec->dest.write_mask = (1 << phi->dest.ssa.num_components) - 1; - - for (unsigned i = 0; i < phi->dest.ssa.num_components; i++) { - nir_phi_instr *new_phi = nir_phi_instr_create(state->shader); - nir_ssa_dest_init(&new_phi->instr, &new_phi->dest, 1, - phi->dest.ssa.bit_size, NULL); - - vec->src[i].src = nir_src_for_ssa(&new_phi->dest.ssa); - - nir_foreach_phi_src(src, phi) { - /* We need to insert a mov to grab the i'th component of src */ - nir_alu_instr *mov = nir_alu_instr_create(state->shader, - nir_op_mov); - nir_ssa_dest_init(&mov->instr, &mov->dest.dest, 1, bit_size, NULL); - mov->dest.write_mask = 1; - nir_src_copy(&mov->src[0].src, &src->src, &mov->instr); - mov->src[0].swizzle[0] = i; - - /* Insert at the end of the predecessor but before the jump */ - nir_instr *pred_last_instr = nir_block_last_instr(src->pred); - if (pred_last_instr && pred_last_instr->type == nir_instr_type_jump) - nir_instr_insert_before(pred_last_instr, &mov->instr); - else - nir_instr_insert_after_block(src->pred, &mov->instr); - - nir_phi_instr_add_src(new_phi, src->pred, nir_src_for_ssa(&mov->dest.dest.ssa)); - } - - nir_instr_insert_before(&phi->instr, &new_phi->instr); - } - - nir_instr_insert_after(&last_phi->instr, &vec->instr); - - nir_ssa_def_rewrite_uses(&phi->dest.ssa, - &vec->dest.dest.ssa); - - nir_instr_remove(&phi->instr); - exec_list_push_tail(&state->dead_instrs, &phi->instr.node); - - progress = true; - - /* We're using the safe iterator and inserting all the newly - * scalarized phi nodes before their non-scalarized version so that's - * ok. However, we are also inserting vec operations after all of - * the last phi node so once we get here, we can't trust even the - * safe iterator to stop properly. We have to break manually. - */ - if (instr == &last_phi->instr) - break; - } - - return progress; -} - -static bool -lower_phis_to_scalar_impl(nir_function_impl *impl, bool lower_all) -{ - struct lower_phis_to_scalar_state state; - bool progress = false; - - state.shader = impl->function->shader; - state.mem_ctx = ralloc_parent(impl); - exec_list_make_empty(&state.dead_instrs); - state.phi_table = _mesa_pointer_hash_table_create(NULL); - state.lower_all = lower_all; - - nir_foreach_block(block, impl) { - progress = lower_phis_to_scalar_block(block, &state) || progress; - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - nir_instr_free_list(&state.dead_instrs); - - ralloc_free(state.phi_table); - - return progress; -} - -/** A pass that lowers vector phi nodes to scalar - * - * This pass loops through the blocks and lowers looks for vector phi nodes - * it can lower to scalar phi nodes. Not all phi nodes are lowered. For - * instance, if one of the sources is a non-scalarizable vector, then we - * don't bother lowering because that would generate hard-to-coalesce movs. - */ -bool -nir_lower_phis_to_scalar(nir_shader *shader, bool lower_all) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress = lower_phis_to_scalar_impl(function->impl, lower_all) || progress; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_pntc_ytransform.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_pntc_ytransform.c deleted file mode 100644 index f49bc17..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_pntc_ytransform.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright © 2020 Igalia S.L. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../mesa/program/prog_instruction.h" - -/* Lower gl_PointCoord to account for user requested point-coord origin - * and for whether draw buffer is flipped. - */ - -typedef struct { - const gl_state_index16 *pntc_state_tokens; - nir_shader *shader; - nir_builder b; - nir_variable *pntc_transform; -} lower_pntc_ytransform_state; - -static nir_ssa_def * -get_pntc_transform(lower_pntc_ytransform_state *state) -{ - if (state->pntc_transform == NULL) { - /* NOTE: name must be prefixed w/ "gl_" to trigger slot based - * special handling in uniform setup: - */ - nir_variable *var = nir_variable_create(state->shader, - nir_var_uniform, - glsl_vec4_type(), - "gl_PntcYTransform"); - - var->num_state_slots = 1; - var->state_slots = ralloc_array(var, nir_state_slot, 1); - var->state_slots[0].swizzle = SWIZZLE_XYZW; - memcpy(var->state_slots[0].tokens, state->pntc_state_tokens, - sizeof(var->state_slots[0].tokens)); - var->data.how_declared = nir_var_hidden; - state->pntc_transform = var; - } - return nir_load_var(&state->b, state->pntc_transform); -} - -static void -lower_load_pointcoord(lower_pntc_ytransform_state *state, - nir_intrinsic_instr *intr) -{ - nir_builder *b = &state->b; - b->cursor = nir_after_instr(&intr->instr); - - nir_ssa_def *pntc = &intr->dest.ssa; - nir_ssa_def *transform = get_pntc_transform(state); - nir_ssa_def *y = nir_channel(b, pntc, 1); - /* The offset is 1 if we're flipping, 0 otherwise. */ - nir_ssa_def *offset = nir_channel(b, transform, 1); - /* Flip the sign of y if we're flipping. */ - nir_ssa_def *scaled = nir_fmul(b, y, nir_channel(b, transform, 0)); - - /* Reassemble the vector. */ - nir_ssa_def *flipped_pntc = nir_vec2(b, - nir_channel(b, pntc, 0), - nir_fadd(b, offset, scaled)); - - nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, flipped_pntc, - flipped_pntc->parent_instr); -} - -static void -lower_pntc_ytransform_block(lower_pntc_ytransform_state *state, - nir_block *block) -{ - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic == nir_intrinsic_load_deref) { - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - if ((var->data.mode == nir_var_shader_in && - var->data.location == VARYING_SLOT_PNTC) || - (var->data.mode == nir_var_system_value && - var->data.location == SYSTEM_VALUE_POINT_COORD)) { - lower_load_pointcoord(state, intr); - } - } - } - } -} - -bool -nir_lower_pntc_ytransform(nir_shader *shader, - const gl_state_index16 pntc_state_tokens[][STATE_LENGTH]) -{ - if (!shader->options->lower_wpos_pntc) - return false; - - lower_pntc_ytransform_state state = { - .pntc_state_tokens = *pntc_state_tokens, - .shader = shader, - .pntc_transform = NULL, - }; - - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder_init(&state.b, function->impl); - - nir_foreach_block(block, function->impl) { - lower_pntc_ytransform_block(&state, block); - } - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } - } - - return state.pntc_transform != NULL; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_size.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_size.c deleted file mode 100644 index b6cd7fc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_size.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright © 2019 Raspberry Pi Ltd - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -/** @file nir_lower_point_size.c - * - * The OpenGL spec requires that implementations clamp gl_PointSize to an - * implementation-dependant point size range. The OpenGL ES 3.0 spec further - * requires that this range must match GL_ALIASED_POINT_SIZE_RANGE. - * Some hardware such as V3D don't clamp to a valid range automatically so - * the driver must clamp the point size written by the shader manually to a - * valid range. - */ -static bool -lower_point_size_instr(nir_builder *b, nir_instr *instr, void *data) -{ - float *minmax = (float *)data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_store_deref) - return false; - - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var->data.location != VARYING_SLOT_PSIZ) - return false; - - b->cursor = nir_before_instr(instr); - - assert(intr->src[1].is_ssa); - assert(intr->src[1].ssa->num_components == 1); - nir_ssa_def *psiz = intr->src[1].ssa; - - if (minmax[0] > 0.0f) - psiz = nir_fmax(b, psiz, nir_imm_float(b, minmax[0])); - - if (minmax[1] > 0.0f) - psiz = nir_fmin(b, psiz, nir_imm_float(b, minmax[1])); - - nir_instr_rewrite_src(instr, &intr->src[1], nir_src_for_ssa(psiz)); - - return true; -} - -/** - * Clamps gl_PointSize to the range [min, max]. If either min or max are not - * greater than 0 then no clamping is done for that side of the range. - */ -bool -nir_lower_point_size(nir_shader *s, float min, float max) -{ - assert(s->info.stage != MESA_SHADER_FRAGMENT && - s->info.stage != MESA_SHADER_COMPUTE); - - assert(min > 0.0f || max > 0.0f); - assert(min <= 0.0f || max <= 0.0f || min <= max); - - float minmax[] = {min, max}; - return nir_shader_instructions_pass(s, lower_point_size_instr, - nir_metadata_block_index | - nir_metadata_dominance, minmax); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_size_mov.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_size_mov.c deleted file mode 100644 index 822e685..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_size_mov.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright © 2019 Collabora Ltd - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** nir_lower_point_size_mov.c - * - * This pass lowers glPointSize into gl_PointSize, by adding a uniform - * and a move from that uniform to VARYING_SLOT_PSIZ. This is useful for - * OpenGL ES level hardware that lack constant point-size hardware state. - */ - -static bool -lower_impl(nir_function_impl *impl, - const gl_state_index16 *pointsize_state_tokens, - nir_variable *out) -{ - nir_shader *shader = impl->function->shader; - nir_builder b; - nir_variable *in, *new_out = NULL; - - nir_builder_init(&b, impl); - - in = nir_variable_create(shader, nir_var_uniform, - glsl_vec4_type(), "gl_PointSizeClampedMESA"); - in->num_state_slots = 1; - in->state_slots = ralloc_array(in, nir_state_slot, 1); - in->state_slots[0].swizzle = BITFIELD_MASK(4); - memcpy(in->state_slots[0].tokens, - pointsize_state_tokens, - sizeof(in->state_slots[0].tokens)); - - /* the existing output can't be removed in order to avoid breaking xfb. - * drivers must check var->data.explicit_location to find the original output - * and only emit that one for xfb - */ - if (!out || out->data.explicit_location) { - new_out = nir_variable_create(shader, nir_var_shader_out, - glsl_float_type(), "gl_PointSizeMESA"); - new_out->data.location = VARYING_SLOT_PSIZ; - } - - - if (!out) { - b.cursor = nir_before_cf_list(&impl->body); - nir_ssa_def *load = nir_load_var(&b, in); - load = nir_fclamp(&b, nir_channel(&b, load, 0), nir_channel(&b, load, 1), nir_channel(&b, load, 2)); - nir_store_var(&b, new_out, load, 0x1); - } else { - bool found = false; - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic == nir_intrinsic_store_deref) { - nir_variable *var = nir_intrinsic_get_var(intr, 0); - if (var == out) { - b.cursor = nir_after_instr(instr); - nir_ssa_def *load = nir_load_var(&b, in); - load = nir_fclamp(&b, nir_channel(&b, load, 0), nir_channel(&b, load, 1), nir_channel(&b, load, 2)); - nir_store_var(&b, new_out ? new_out : out, load, 0x1); - found = true; - } - } - } - } - } - if (!found) { - b.cursor = nir_before_cf_list(&impl->body); - nir_ssa_def *load = nir_load_var(&b, in); - load = nir_fclamp(&b, nir_channel(&b, load, 0), nir_channel(&b, load, 1), nir_channel(&b, load, 2)); - nir_store_var(&b, new_out, load, 0x1); - } - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - return true; -} - -void -nir_lower_point_size_mov(nir_shader *shader, - const gl_state_index16 *pointsize_state_tokens) -{ - assert(shader->info.stage != MESA_SHADER_FRAGMENT && - shader->info.stage != MESA_SHADER_COMPUTE); - - nir_variable *out = - nir_find_variable_with_location(shader, nir_var_shader_out, - VARYING_SLOT_PSIZ); - - lower_impl(nir_shader_get_entrypoint(shader), pointsize_state_tokens, - out); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_smooth.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_smooth.c deleted file mode 100644 index 9a48f08..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_point_smooth.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright © 2022 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_builtin_builder.h" - -/** - * This NIR lowers pass for point smoothing by modifying the alpha value of - * fragment outputs using the distance from the center of the point. - * Anti-aliased points get rounded with respect to their radius. - */ - -static bool -lower_point_smooth(nir_builder *b, nir_instr *instr, UNUSED void *_state) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->intrinsic != nir_intrinsic_store_output && - intr->intrinsic != nir_intrinsic_store_deref) - return false; - - int out_src_idx; - if (intr->intrinsic == nir_intrinsic_store_output) { - int location = nir_intrinsic_io_semantics(intr).location; - if ((location != FRAG_RESULT_COLOR && location < FRAG_RESULT_DATA0) || - nir_intrinsic_src_type(intr) != nir_type_float32) - return false; - out_src_idx = 0; - } else { - nir_variable *var = nir_intrinsic_get_var(intr, 0); - if ((var->data.location != FRAG_RESULT_COLOR && - var->data.location < FRAG_RESULT_DATA0) || - glsl_get_base_type(var->type) != GLSL_TYPE_FLOAT) - return false; - out_src_idx = 1; - } - - assert(intr->src[out_src_idx].is_ssa); - assert(intr->num_components == 4); - - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *coord = nir_build_load_point_coord_maybe_flipped(b); - - /* point_size = 1.0 / dFdx(gl_PointCoord.x); */ - nir_ssa_def *point_size = nir_frcp(b, nir_fddx(b, nir_channel(b, coord, 0))); - - /* radius = point_size * 0.5 */ - nir_ssa_def *radius = nir_fmul_imm(b, point_size, 0.5);; - - /** - * Compute the distance of point from centre - * distance = √ (x - 0.5)^2 + (y - 0.5)^2 - */ - nir_ssa_def *distance = nir_fast_distance(b, coord, - nir_imm_vec2(b, 0.5, 0.5)); - distance = nir_fmul(b, distance, point_size); - - /* alpha = min(max(radius - distance, 0.0), 1.0) */ - nir_ssa_def *coverage = nir_fsat(b, nir_fsub(b, radius, distance)); - - /* Discard fragments that are not covered by the point */ - nir_discard_if(b, nir_feq(b, nir_imm_float(b, 0.0f), coverage)); - - /* Write out the fragment color*vec4(1, 1, 1, coverage)*/ - nir_ssa_def *one = nir_imm_float(b, 1.0f); - nir_ssa_def *new_val = nir_fmul(b, nir_vec4(b, one, one, one, coverage), - intr->src[out_src_idx].ssa); - nir_instr_rewrite_src(instr, &intr->src[out_src_idx], nir_src_for_ssa(new_val)); - - return true; -} - -bool -nir_lower_point_smooth(nir_shader *shader) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - return nir_shader_instructions_pass(shader, lower_point_smooth, - nir_metadata_loop_analysis | - nir_metadata_block_index | - nir_metadata_dominance, NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_poly_line_smooth.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_poly_line_smooth.c deleted file mode 100644 index 9acd743..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_poly_line_smooth.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright © 2022 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** - * This NIR lowers pass for polygon and line smoothing by modifying the alpha - * value of fragment outputs using the sample coverage mask. - */ - -static bool -lower_polylinesmooth(nir_builder *b, nir_instr *instr, void *data) -{ - unsigned *num_smooth_aa_sample = data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - if (intr->intrinsic != nir_intrinsic_store_output) - return false; - - int location = nir_intrinsic_io_semantics(intr).location; - if ((location != FRAG_RESULT_COLOR && location < FRAG_RESULT_DATA0) || - nir_intrinsic_src_type(intr) != nir_type_float32) - return false; - - assert(intr->src[0].is_ssa); - assert(intr->num_components == 4); - - b->cursor = nir_before_instr(&intr->instr); - - nir_ssa_def *coverage = nir_load_sample_mask_in(b); - - /* coverage = (coverage) / SI_NUM_SMOOTH_AA_SAMPLES */ - coverage = nir_bit_count(b, coverage); - coverage = nir_u2f32(b, coverage); - coverage = nir_fmul_imm(b, coverage, 1.0 / *num_smooth_aa_sample); - - /* Write out the fragment color*vec4(1, 1, 1, alpha) */ - nir_ssa_def *one = nir_imm_float(b, 1.0f); - nir_ssa_def *new_val = nir_fmul(b, nir_vec4(b, one, one, one, coverage), - intr->src[0].ssa); - nir_instr_rewrite_src(instr, &intr->src[0], nir_src_for_ssa(new_val)); - - return true; -} - -bool -nir_lower_poly_line_smooth(nir_shader *shader, unsigned num_smooth_aa_sample) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - return nir_shader_instructions_pass(shader, lower_polylinesmooth, - nir_metadata_loop_analysis | - nir_metadata_block_index | - nir_metadata_dominance, &num_smooth_aa_sample); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_printf.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_printf.c deleted file mode 100644 index 29c9b0d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_printf.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright © 2020 Microsoft Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_builder_opcodes.h" - -#include "../../util/u_math.h" - -static bool -lower_printf_instr(nir_builder *b, nir_instr *instr, void *_options) -{ - const nir_lower_printf_options *options = _options; - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *prntf = nir_instr_as_intrinsic(instr); - if (prntf->intrinsic != nir_intrinsic_printf) - return false; - - nir_ssa_def *fmt_str_id = prntf->src[0].ssa; - nir_deref_instr *args = nir_src_as_deref(prntf->src[1]); - assert(args->deref_type == nir_deref_type_var); - - const unsigned ptr_bit_size = nir_get_ptr_bitsize(b->shader); - - /* Atomic add a buffer size counter to determine where to write. If - * overflowed, return -1, otherwise, store the arguments and return 0. - */ - b->cursor = nir_before_instr(&prntf->instr); - nir_ssa_def *buffer_addr = nir_load_printf_buffer_address(b, ptr_bit_size); - nir_deref_instr *buffer = - nir_build_deref_cast(b, buffer_addr, nir_var_mem_global, - glsl_array_type(glsl_uint8_t_type(), 0, 4), 0); - - /* Align the struct size to 4 */ - assert(glsl_type_is_struct_or_ifc(args->type)); - int args_size = align(glsl_get_cl_size(args->type), 4); - assert(fmt_str_id->bit_size == 32); - int fmt_str_id_size = 4; - - /* Increment the counter at the beginning of the buffer */ - const unsigned counter_size = 4; - nir_deref_instr *counter = nir_build_deref_array_imm(b, buffer, 0); - counter = nir_build_deref_cast(b, &counter->dest.ssa, - nir_var_mem_global, - glsl_uint_type(), 0); - counter->cast.align_mul = 4; - nir_ssa_def *offset = - nir_deref_atomic_add(b, 32, &counter->dest.ssa, - nir_imm_int(b, fmt_str_id_size + args_size)); - - /* Check if we're still in-bounds */ - const unsigned default_buffer_size = 1024 * 1024; - unsigned buffer_size = (options && options->max_buffer_size) ? - options->max_buffer_size : default_buffer_size; - int max_valid_offset = - buffer_size - args_size - fmt_str_id_size - counter_size; - nir_push_if(b, nir_ilt(b, offset, nir_imm_int(b, max_valid_offset))); - - nir_ssa_def *printf_succ_val = nir_imm_int(b, 0); - - /* Write the format string ID */ - nir_ssa_def *fmt_str_id_offset = - nir_i2iN(b, offset, ptr_bit_size); - nir_deref_instr *fmt_str_id_deref = - nir_build_deref_array(b, buffer, fmt_str_id_offset); - fmt_str_id_deref = nir_build_deref_cast(b, &fmt_str_id_deref->dest.ssa, - nir_var_mem_global, - glsl_uint_type(), 0); - fmt_str_id_deref->cast.align_mul = 4; - nir_store_deref(b, fmt_str_id_deref, fmt_str_id, ~0); - - /* Write the format args */ - for (unsigned i = 0; i < glsl_get_length(args->type); ++i) { - nir_deref_instr *arg_deref = nir_build_deref_struct(b, args, i); - nir_ssa_def *arg = nir_load_deref(b, arg_deref); - const struct glsl_type *arg_type = arg_deref->type; - - /* Clang does promotion of arguments to their "native" size. That means - * that any floats have been converted to doubles for the call to - * printf. Since doubles are optional, some drivers might not support - * them. For those drivers, convert them back to float before writing. - * Copy prop and other optimizations should remove all hints of doubles. - */ - if (glsl_get_base_type(arg_type) == GLSL_TYPE_DOUBLE && - options && options->treat_doubles_as_floats) { - arg = nir_f2f32(b, arg); - arg_type = glsl_float_type(); - } - - unsigned field_offset = glsl_get_struct_field_offset(args->type, i); - nir_ssa_def *arg_offset = - nir_i2iN(b, nir_iadd_imm(b, offset, - fmt_str_id_size + field_offset), - ptr_bit_size); - nir_deref_instr *dst_arg_deref = - nir_build_deref_array(b, buffer, arg_offset); - dst_arg_deref = nir_build_deref_cast(b, &dst_arg_deref->dest.ssa, - nir_var_mem_global, arg_type, 0); - assert(field_offset % 4 == 0); - dst_arg_deref->cast.align_mul = 4; - nir_store_deref(b, dst_arg_deref, arg, ~0); - } - - nir_push_else(b, NULL); - nir_ssa_def *printf_fail_val = nir_imm_int(b, -1); - nir_pop_if(b, NULL); - - nir_ssa_def *ret_val = nir_if_phi(b, printf_succ_val, printf_fail_val); - nir_ssa_def_rewrite_uses(&prntf->dest.ssa, ret_val); - nir_instr_remove(&prntf->instr); - - return true; -} - -bool -nir_lower_printf(nir_shader *nir, const nir_lower_printf_options *options) -{ - return nir_shader_instructions_pass(nir, lower_printf_instr, - nir_metadata_none, - (void *)options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_readonly_images_to_tex.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_readonly_images_to_tex.c deleted file mode 100644 index adc4d24..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_readonly_images_to_tex.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static const struct glsl_type * -get_texture_type_for_image(const struct glsl_type *type) -{ - if (glsl_type_is_array(type)) { - const struct glsl_type *elem_type = - get_texture_type_for_image(glsl_get_array_element(type)); - return glsl_array_type(elem_type, glsl_get_length(type), 0 /*explicit size*/); - } - - assert((glsl_type_is_image(type))); - return glsl_texture_type(glsl_get_sampler_dim(type), - glsl_sampler_type_is_array(type), - glsl_get_sampler_result_type(type)); -} - -static bool -replace_image_type_with_texture(nir_deref_instr *deref) -{ - const struct glsl_type *type = deref->type; - - /* If we've already chased up the deref chain this far from a different intrinsic, we're done */ - if (!glsl_type_is_image(glsl_without_array(type))) - return false; - - deref->type = get_texture_type_for_image(type); - deref->modes = nir_var_uniform; - if (deref->deref_type == nir_deref_type_var) { - type = deref->var->type; - if (glsl_type_is_image(glsl_without_array(type))) { - deref->var->type = get_texture_type_for_image(type); - deref->var->data.mode = nir_var_uniform; - memset(&deref->var->data.sampler, 0, sizeof(deref->var->data.sampler)); - } - } else { - nir_deref_instr *parent = nir_deref_instr_parent(deref); - if (parent) - replace_image_type_with_texture(parent); - } - - return true; -} - -struct readonly_image_lower_options { - bool per_variable; -}; - -static bool -lower_readonly_image_instr_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, - const struct readonly_image_lower_options *options) -{ - if (intrin->intrinsic != nir_intrinsic_image_deref_load && - intrin->intrinsic != nir_intrinsic_image_deref_size) - return false; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - /* In CL 1.2, images are required to be either read-only or - * write-only. We can always translate the read-only image ops to - * texture ops. In CL 2.0 (and an extension), the ability is added - * to have read-write images but sampling (with a sampler) is only - * allowed on read-only images. As long as we only lower read-only - * images to texture ops, everything should stay consistent. - */ - enum gl_access_qualifier access = 0; - if (options->per_variable) { - if (var) - access = var->data.access; - } else { - access = nir_intrinsic_access(intrin); - } - if (!(access & ACCESS_NON_WRITEABLE)) - return false; - - unsigned num_srcs; - nir_texop texop; - switch (intrin->intrinsic) { - case nir_intrinsic_image_deref_load: - texop = nir_texop_txf; - num_srcs = 3; - break; - case nir_intrinsic_image_deref_size: - texop = nir_texop_txs; - num_srcs = 2; - break; - default: - unreachable("Unsupported intrinsic"); - } - - b->cursor = nir_before_instr(&intrin->instr); - - nir_tex_instr *tex = nir_tex_instr_create(b->shader, num_srcs); - tex->op = texop; - - tex->sampler_dim = glsl_get_sampler_dim(deref->type); - tex->is_array = glsl_sampler_type_is_array(deref->type); - tex->is_shadow = false; - - unsigned coord_components = - glsl_get_sampler_dim_coordinate_components(tex->sampler_dim); - if (glsl_sampler_type_is_array(deref->type)) - coord_components++; - - tex->src[0].src_type = nir_tex_src_texture_deref; - tex->src[0].src = nir_src_for_ssa(&deref->dest.ssa); - - if (options->per_variable) { - assert(nir_deref_instr_get_variable(deref)); - replace_image_type_with_texture(deref); - } - - switch (intrin->intrinsic) { - case nir_intrinsic_image_deref_load: { - assert(intrin->src[1].is_ssa); - nir_ssa_def *coord = - nir_trim_vector(b, intrin->src[1].ssa, coord_components); - tex->src[1].src_type = nir_tex_src_coord; - tex->src[1].src = nir_src_for_ssa(coord); - tex->coord_components = coord_components; - - assert(intrin->src[3].is_ssa); - nir_ssa_def *lod = intrin->src[3].ssa; - tex->src[2].src_type = nir_tex_src_lod; - tex->src[2].src = nir_src_for_ssa(lod); - - assert(num_srcs == 3); - - tex->dest_type = nir_intrinsic_dest_type(intrin); - nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL); - break; - } - - case nir_intrinsic_image_deref_size: { - assert(intrin->src[1].is_ssa); - nir_ssa_def *lod = intrin->src[1].ssa; - tex->src[1].src_type = nir_tex_src_lod; - tex->src[1].src = nir_src_for_ssa(lod); - - assert(num_srcs == 2); - - tex->dest_type = nir_type_uint32; - nir_ssa_dest_init(&tex->instr, &tex->dest, - coord_components, 32, NULL); - break; - } - - default: - unreachable("Unsupported intrinsic"); - } - - nir_builder_instr_insert(b, &tex->instr); - - nir_ssa_def *res = nir_trim_vector(b, &tex->dest.ssa, - intrin->dest.ssa.num_components); - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, res); - nir_instr_remove(&intrin->instr); - - return true; -} - -static bool -lower_readonly_image_instr_tex(nir_builder *b, nir_tex_instr *tex, - const struct readonly_image_lower_options *options) -{ - int deref_idx = nir_tex_instr_src_index(tex, nir_tex_src_texture_deref); - if (deref_idx == -1) - return false; - - nir_deref_instr *deref = nir_src_as_deref(tex->src[deref_idx].src); - if (options->per_variable) { - assert(nir_deref_instr_get_variable(deref)); - return replace_image_type_with_texture(deref); - } - - return false; -} - -static bool -lower_readonly_image_instr(nir_builder *b, nir_instr *instr, void *context) -{ - struct readonly_image_lower_options *options = (struct readonly_image_lower_options *)context; - - switch (instr->type) { - case nir_instr_type_intrinsic: - return lower_readonly_image_instr_intrinsic(b, nir_instr_as_intrinsic(instr), options); - case nir_instr_type_tex: - return lower_readonly_image_instr_tex(b, nir_instr_as_tex(instr), options); - default: - return false; - } -} - -/** Lowers image ops to texture ops for read-only images - * - * If per_variable is set: - * - Variable access is used to indicate read-only instead of intrinsic access - * - Variable/deref types will be changed from image types to sampler types - * - * per_variable should not be set for OpenCL, because all image types will be - * void-returning, and there is no corresponding valid sampler type, and it - * will collide with the "bare" sampler type. - */ -bool -nir_lower_readonly_images_to_tex(nir_shader *shader, bool per_variable) -{ - struct readonly_image_lower_options options = { per_variable }; - return nir_shader_instructions_pass(shader, lower_readonly_image_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_regs_to_ssa.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_regs_to_ssa.c deleted file mode 100644 index 1a7f4d9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_regs_to_ssa.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_phi_builder.h" -#include "nir_vla.h" - -struct regs_to_ssa_state { - nir_shader *shader; - - struct nir_phi_builder_value **values; -}; - -static bool -rewrite_src(nir_src *src, void *_state) -{ - struct regs_to_ssa_state *state = _state; - - if (src->is_ssa) - return true; - - nir_instr *instr = src->parent_instr; - nir_register *reg = src->reg.reg; - struct nir_phi_builder_value *value = state->values[reg->index]; - if (!value) - return true; - - nir_block *block; - if (instr->type == nir_instr_type_phi) { - nir_phi_src *phi_src = exec_node_data(nir_phi_src, src, src); - block = phi_src->pred; - } else { - block = instr->block; - } - - nir_ssa_def *def = nir_phi_builder_value_get_block_def(value, block); - nir_instr_rewrite_src(instr, src, nir_src_for_ssa(def)); - - return true; -} - -static void -rewrite_if_condition(nir_if *nif, struct regs_to_ssa_state *state) -{ - if (nif->condition.is_ssa) - return; - - nir_block *block = nir_cf_node_as_block(nir_cf_node_prev(&nif->cf_node)); - nir_register *reg = nif->condition.reg.reg; - struct nir_phi_builder_value *value = state->values[reg->index]; - if (!value) - return; - - nir_ssa_def *def = nir_phi_builder_value_get_block_def(value, block); - nir_if_rewrite_condition(nif, nir_src_for_ssa(def)); -} - -static bool -rewrite_dest(nir_dest *dest, void *_state) -{ - struct regs_to_ssa_state *state = _state; - - if (dest->is_ssa) - return true; - - nir_instr *instr = dest->reg.parent_instr; - nir_register *reg = dest->reg.reg; - struct nir_phi_builder_value *value = state->values[reg->index]; - if (!value) - return true; - - list_del(&dest->reg.def_link); - nir_ssa_dest_init(instr, dest, reg->num_components, - reg->bit_size, NULL); - - nir_phi_builder_value_set_block_def(value, instr->block, &dest->ssa); - - return true; -} - -static void -rewrite_alu_instr(nir_alu_instr *alu, struct regs_to_ssa_state *state) -{ - nir_foreach_src(&alu->instr, rewrite_src, state); - - if (alu->dest.dest.is_ssa) - return; - - nir_register *reg = alu->dest.dest.reg.reg; - struct nir_phi_builder_value *value = state->values[reg->index]; - if (!value) - return; - - unsigned write_mask = alu->dest.write_mask; - if (write_mask == (1 << reg->num_components) - 1) { - /* This is the simple case where the instruction writes all the - * components. We can handle that the same as any other destination. - */ - rewrite_dest(&alu->dest.dest, state); - return; - } - - /* Calculate the number of components the final instruction, which for - * per-component things is the number of output components of the - * instruction and non-per-component things is the number of enabled - * channels in the write mask. - */ - unsigned num_components; - uint8_t vec_swizzle[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) - vec_swizzle[i] = i; - - if (nir_op_infos[alu->op].output_size == 0) { - /* Figure out the swizzle we need on the vecN operation and compute - * the number of components in the SSA def at the same time. - */ - num_components = 0; - for (unsigned index = 0; index < 4; index++) { - if (write_mask & (1 << index)) - vec_swizzle[index] = num_components++; - } - - /* When we change the output writemask, we need to change - * the swizzles for per-component inputs too - */ - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (nir_op_infos[alu->op].input_sizes[i] != 0) - continue; - - /* - * We keep two indices: - * 1. The index of the original (non-SSA) component - * 2. The index of the post-SSA, compacted, component - * - * We need to map the swizzle component at index 1 to the swizzle - * component at index 2. Since index 1 is always larger than - * index 2, we can do it in a single loop. - */ - - unsigned ssa_index = 0; - for (unsigned index = 0; index < 4; index++) { - if (!((write_mask >> index) & 1)) - continue; - - alu->src[i].swizzle[ssa_index++] = alu->src[i].swizzle[index]; - } - assert(ssa_index == num_components); - } - } else { - num_components = nir_op_infos[alu->op].output_size; - } - assert(num_components <= 4); - - alu->dest.write_mask = (1 << num_components) - 1; - list_del(&alu->dest.dest.reg.def_link); - nir_ssa_dest_init(&alu->instr, &alu->dest.dest, num_components, - reg->bit_size, NULL); - - nir_op vecN_op = nir_op_vec(reg->num_components); - - nir_alu_instr *vec = nir_alu_instr_create(state->shader, vecN_op); - - nir_ssa_def *old_src = - nir_phi_builder_value_get_block_def(value, alu->instr.block); - nir_ssa_def *new_src = &alu->dest.dest.ssa; - - for (unsigned i = 0; i < reg->num_components; i++) { - if (write_mask & (1 << i)) { - vec->src[i].src = nir_src_for_ssa(new_src); - vec->src[i].swizzle[0] = vec_swizzle[i]; - } else { - vec->src[i].src = nir_src_for_ssa(old_src); - vec->src[i].swizzle[0] = i; - } - } - - nir_ssa_dest_init(&vec->instr, &vec->dest.dest, reg->num_components, - reg->bit_size, NULL); - nir_instr_insert(nir_after_instr(&alu->instr), &vec->instr); - - nir_phi_builder_value_set_block_def(value, alu->instr.block, - &vec->dest.dest.ssa); -} - -bool -nir_lower_regs_to_ssa_impl(nir_function_impl *impl) -{ - if (exec_list_is_empty(&impl->registers)) - return false; - - nir_metadata_require(impl, nir_metadata_block_index | - nir_metadata_dominance); - nir_index_local_regs(impl); - - void *dead_ctx = ralloc_context(NULL); - struct regs_to_ssa_state state; - state.shader = impl->function->shader; - state.values = ralloc_array(dead_ctx, struct nir_phi_builder_value *, - impl->reg_alloc); - - struct nir_phi_builder *phi_build = nir_phi_builder_create(impl); - - const unsigned block_set_words = BITSET_WORDS(impl->num_blocks); - BITSET_WORD *defs = ralloc_array(dead_ctx, BITSET_WORD, block_set_words); - - nir_foreach_register(reg, &impl->registers) { - if (reg->num_array_elems != 0) { - /* This pass only really works on "plain" registers. If it's a - * packed or array register, just set the value to NULL so that the - * rewrite portion of the pass will know to ignore it. - */ - state.values[reg->index] = NULL; - continue; - } - - memset(defs, 0, block_set_words * sizeof(*defs)); - - nir_foreach_def(dest, reg) - BITSET_SET(defs, dest->reg.parent_instr->block->index); - - state.values[reg->index] = - nir_phi_builder_add_value(phi_build, reg->num_components, - reg->bit_size, defs); - } - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - switch (instr->type) { - case nir_instr_type_alu: - rewrite_alu_instr(nir_instr_as_alu(instr), &state); - break; - - case nir_instr_type_phi: - /* We rewrite sources as a separate pass */ - nir_foreach_dest(instr, rewrite_dest, &state); - break; - - default: - nir_foreach_src(instr, rewrite_src, &state); - nir_foreach_dest(instr, rewrite_dest, &state); - } - } - - nir_if *following_if = nir_block_get_following_if(block); - if (following_if) - rewrite_if_condition(following_if, &state); - - /* Handle phi sources that source from this block. We have to do this - * as a separate pass because the phi builder assumes that uses and - * defs are processed in an order that respects dominance. When we have - * loops, a phi source may be a back-edge so we have to handle it as if - * it were one of the last instructions in the predecessor block. - */ - nir_foreach_phi_src_leaving_block(block, rewrite_src, &state); - } - - nir_phi_builder_finish(phi_build); - - nir_foreach_register_safe(reg, &impl->registers) { - if (state.values[reg->index]) { - assert(list_is_empty(®->uses)); - assert(list_is_empty(®->defs)); - exec_node_remove(®->node); - } - } - - ralloc_free(dead_ctx); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - return true; -} - -bool -nir_lower_regs_to_ssa(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_lower_regs_to_ssa_impl(function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_returns.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_returns.c deleted file mode 100644 index ff0ad4d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_returns.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_control_flow.h" - -struct lower_returns_state { - nir_builder builder; - struct exec_list *cf_list; - nir_loop *loop; - nir_variable *return_flag; - - /* This indicates that we have a return which is predicated on some form of - * control-flow. Since whether or not the return happens can only be - * determined dynamically at run-time, everything that occurs afterwards - * needs to be predicated on the return flag variable. - */ - bool has_predicated_return; - - bool removed_unreachable_code; -}; - -static bool lower_returns_in_cf_list(struct exec_list *cf_list, - struct lower_returns_state *state); - -static void -predicate_following(nir_cf_node *node, struct lower_returns_state *state) -{ - nir_builder *b = &state->builder; - b->cursor = nir_after_cf_node_and_phis(node); - - if (!state->loop && nir_cursors_equal(b->cursor, nir_after_cf_list(state->cf_list))) - return; /* Nothing to predicate */ - - assert(state->return_flag); - - nir_if *if_stmt = nir_push_if(b, nir_load_var(b, state->return_flag)); - - if (state->loop) { - /* If we're inside of a loop, then all we need to do is insert a - * conditional break. - */ - nir_jump(b, nir_jump_break); - - nir_block *block = nir_cursor_current_block(b->cursor); - nir_insert_phi_undef(block->successors[0], block); - } else { - /* Otherwise, we need to actually move everything into the else case - * of the if statement. - */ - nir_cf_list list; - nir_cf_extract(&list, nir_after_cf_node(&if_stmt->cf_node), - nir_after_cf_list(state->cf_list)); - assert(!exec_list_is_empty(&list.list)); - nir_cf_reinsert(&list, nir_before_cf_list(&if_stmt->else_list)); - } - - nir_pop_if(b, NULL); -} - -static bool -lower_returns_in_loop(nir_loop *loop, struct lower_returns_state *state) -{ - assert(!nir_loop_has_continue_construct(loop)); - nir_loop *parent = state->loop; - state->loop = loop; - bool progress = lower_returns_in_cf_list(&loop->body, state); - state->loop = parent; - - /* If the recursive call made progress, then there were returns inside - * of the loop. These would have been lowered to breaks with the return - * flag set to true. We need to predicate everything following the loop - * on the return flag. - */ - if (progress) { - predicate_following(&loop->cf_node, state); - state->has_predicated_return = true; - } - - return progress; -} - -static bool -lower_returns_in_if(nir_if *if_stmt, struct lower_returns_state *state) -{ - bool progress, then_progress, else_progress; - - bool has_predicated_return = state->has_predicated_return; - state->has_predicated_return = false; - - then_progress = lower_returns_in_cf_list(&if_stmt->then_list, state); - else_progress = lower_returns_in_cf_list(&if_stmt->else_list, state); - progress = then_progress || else_progress; - - /* If either of the recursive calls made progress, then there were - * returns inside of the body of the if. If we're in a loop, then these - * were lowered to breaks which automatically skip to the end of the - * loop so we don't have to do anything. If we're not in a loop, then - * all we know is that the return flag is set appropriately and that the - * recursive calls ensured that nothing gets executed *inside* the if - * after a return. In order to ensure nothing outside gets executed - * after a return, we need to predicate everything following on the - * return flag. - */ - if (progress && !state->loop) { - if (state->has_predicated_return) { - predicate_following(&if_stmt->cf_node, state); - } else { - /* If there are no nested returns we can just add the instructions to - * the end of the branch that doesn't have the return. - */ - - /* nir_cf_extract will not extract phis at the start of the block. In - * this case we know that any phis will have to have a single - * predecessor, so we can just replace the phi with its single source. - */ - nir_block *succ_block = nir_after_cf_node(&if_stmt->cf_node).block; - nir_opt_remove_phis_block(succ_block); - assert(nir_block_first_instr(succ_block) == NULL || - nir_block_first_instr(succ_block)->type != nir_instr_type_phi); - - nir_cf_list list; - nir_cf_extract(&list, nir_after_cf_node(&if_stmt->cf_node), - nir_after_cf_list(state->cf_list)); - - if (then_progress && else_progress) { - /* Both branches return so delete instructions following the if */ - nir_cf_delete(&list); - } else if (then_progress) { - nir_cf_reinsert(&list, nir_after_cf_list(&if_stmt->else_list)); - } else { - nir_cf_reinsert(&list, nir_after_cf_list(&if_stmt->then_list)); - } - } - } - - state->has_predicated_return = progress || has_predicated_return; - - return progress; -} - -static bool -lower_returns_in_block(nir_block *block, struct lower_returns_state *state) -{ - if (block->predecessors->entries == 0 && - block != nir_start_block(state->builder.impl)) { - /* This block is unreachable. Delete it and everything after it. */ - nir_cf_list list; - nir_cf_extract(&list, nir_before_cf_node(&block->cf_node), - nir_after_cf_list(state->cf_list)); - - if (exec_list_is_empty(&list.list)) { - /* There's nothing here, which also means there's nothing in this - * block so we have nothing to do. - */ - return false; - } else { - state->removed_unreachable_code = true; - nir_cf_delete(&list); - return false; - } - } - - nir_instr *last_instr = nir_block_last_instr(block); - if (last_instr == NULL) - return false; - - if (last_instr->type != nir_instr_type_jump) - return false; - - nir_jump_instr *jump = nir_instr_as_jump(last_instr); - if (jump->type != nir_jump_return) - return false; - - nir_instr_remove(&jump->instr); - - /* If this is a return in the last block of the function there is nothing - * more to do once its removed. - */ - if (block == nir_impl_last_block(state->builder.impl)) - return true; - - nir_builder *b = &state->builder; - - /* Set the return flag */ - if (state->return_flag == NULL) { - state->return_flag = - nir_local_variable_create(b->impl, glsl_bool_type(), "return"); - - /* Initialize the variable to 0 */ - b->cursor = nir_before_cf_list(&b->impl->body); - nir_store_var(b, state->return_flag, nir_imm_false(b), 1); - } - - b->cursor = nir_after_block(block); - nir_store_var(b, state->return_flag, nir_imm_true(b), 1); - - if (state->loop) { - /* We're in a loop; we need to break out of it. */ - nir_jump(b, nir_jump_break); - - nir_insert_phi_undef(block->successors[0], block); - } else { - /* Not in a loop; we'll deal with predicating later*/ - assert(nir_cf_node_next(&block->cf_node) == NULL); - } - - return true; -} - -static bool -lower_returns_in_cf_list(struct exec_list *cf_list, - struct lower_returns_state *state) -{ - bool progress = false; - - struct exec_list *parent_list = state->cf_list; - state->cf_list = cf_list; - - /* We iterate over the list backwards because any given lower call may - * take everything following the given CF node and predicate it. In - * order to avoid recursion/iteration problems, we want everything after - * a given node to already be lowered before this happens. - */ - foreach_list_typed_reverse_safe(nir_cf_node, node, node, cf_list) { - switch (node->type) { - case nir_cf_node_block: - if (lower_returns_in_block(nir_cf_node_as_block(node), state)) - progress = true; - break; - - case nir_cf_node_if: - if (lower_returns_in_if(nir_cf_node_as_if(node), state)) - progress = true; - break; - - case nir_cf_node_loop: - if (lower_returns_in_loop(nir_cf_node_as_loop(node), state)) - progress = true; - break; - - default: - unreachable("Invalid inner CF node type"); - } - } - - state->cf_list = parent_list; - - return progress; -} - -bool -nir_lower_returns_impl(nir_function_impl *impl) -{ - struct lower_returns_state state; - - state.cf_list = &impl->body; - state.loop = NULL; - state.return_flag = NULL; - state.has_predicated_return = false; - state.removed_unreachable_code = false; - nir_builder_init(&state.builder, impl); - - bool progress = lower_returns_in_cf_list(&impl->body, &state); - progress = progress || state.removed_unreachable_code; - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_none); - nir_rematerialize_derefs_in_use_blocks_impl(impl); - nir_repair_ssa_impl(impl); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_returns(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress = nir_lower_returns_impl(function->impl) || progress; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_samplers.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_samplers.c deleted file mode 100644 index a58dddd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_samplers.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2005-2007 Brian Paul All Rights Reserved. - * Copyright (C) 2008 VMware, Inc. All Rights Reserved. - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static void -lower_tex_src_to_offset(nir_builder *b, - nir_tex_instr *instr, unsigned src_idx) -{ - nir_ssa_def *index = NULL; - unsigned base_index = 0; - unsigned array_elements = 1; - nir_tex_src *src = &instr->src[src_idx]; - bool is_sampler = src->src_type == nir_tex_src_sampler_deref; - - /* We compute first the offsets */ - nir_deref_instr *deref = nir_instr_as_deref(src->src.ssa->parent_instr); - while (deref->deref_type != nir_deref_type_var) { - assert(deref->parent.is_ssa); - nir_deref_instr *parent = - nir_instr_as_deref(deref->parent.ssa->parent_instr); - - assert(deref->deref_type == nir_deref_type_array); - - if (nir_src_is_const(deref->arr.index) && index == NULL) { - /* We're still building a direct index */ - unsigned index_in_array = nir_src_as_uint(deref->arr.index); - - /* Section 5.11 (Out-of-Bounds Accesses) of the GLSL 4.60 spec says: - * - * In the subsections described above for array, vector, matrix and - * structure accesses, any out-of-bounds access produced undefined - * behavior.... Out-of-bounds reads return undefined values, which - * include values from other variables of the active program or zero. - * - * Robustness extensions suggest to return zero on out-of-bounds - * accesses, however it's not applicable to the arrays of samplers, - * so just clamp the index. - * - * Otherwise instr->sampler_index or instr->texture_index would be out - * of bounds, and they are used as an index to arrays of driver state. - */ - if (index_in_array < glsl_array_size(parent->type)) { - base_index += index_in_array * array_elements; - } else { - base_index = glsl_array_size(parent->type) - 1; - } - } else { - if (index == NULL) { - /* We used to be direct but not anymore */ - index = nir_imm_int(b, base_index); - base_index = 0; - } - - index = nir_iadd(b, index, - nir_imul(b, nir_imm_int(b, array_elements), - nir_ssa_for_src(b, deref->arr.index, 1))); - } - - array_elements *= glsl_get_length(parent->type); - - deref = parent; - } - - if (index) - index = nir_umin(b, index, nir_imm_int(b, array_elements - 1)); - - /* We hit the deref_var. This is the end of the line */ - assert(deref->deref_type == nir_deref_type_var); - - base_index += deref->var->data.binding; - - /* We have the offsets, we apply them, rewriting the source or removing - * instr if needed - */ - if (index) { - nir_instr_rewrite_src(&instr->instr, &src->src, - nir_src_for_ssa(index)); - - src->src_type = is_sampler ? - nir_tex_src_sampler_offset : - nir_tex_src_texture_offset; - } else { - nir_tex_instr_remove_src(instr, src_idx); - } - - if (is_sampler) { - instr->sampler_index = base_index; - } else { - instr->texture_index = base_index; - } -} - -static bool -lower_sampler(nir_builder *b, nir_instr *instr_, UNUSED void *cb_data) -{ - if (instr_->type != nir_instr_type_tex) - return false; - - nir_tex_instr *instr = nir_instr_as_tex(instr_); - - int texture_idx = - nir_tex_instr_src_index(instr, nir_tex_src_texture_deref); - - if (texture_idx >= 0) { - b->cursor = nir_before_instr(&instr->instr); - - lower_tex_src_to_offset(b, instr, texture_idx); - } - - int sampler_idx = - nir_tex_instr_src_index(instr, nir_tex_src_sampler_deref); - - if (sampler_idx >= 0) { - lower_tex_src_to_offset(b, instr, sampler_idx); - } - - if (texture_idx < 0 && sampler_idx < 0) - return false; - - return true; -} - -bool -nir_lower_samplers(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, lower_sampler, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_scratch.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_scratch.c deleted file mode 100644 index 985ab40..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_scratch.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * This lowering pass converts references to variables with loads/stores to - * scratch space based on a few configurable parameters. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -static void -lower_load_store(nir_builder *b, - nir_intrinsic_instr *intrin, - glsl_type_size_align_func size_align) -{ - b->cursor = nir_before_instr(&intrin->instr); - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - nir_ssa_def *offset = - nir_iadd_imm(b, nir_build_deref_offset(b, deref, size_align), - var->data.location); - - unsigned align, UNUSED size; - size_align(deref->type, &size, &align); - - if (intrin->intrinsic == nir_intrinsic_load_deref) { - unsigned bit_size = intrin->dest.ssa.bit_size; - nir_ssa_def *value = nir_load_scratch( - b, intrin->num_components, bit_size == 1 ? 32 : bit_size, offset, .align_mul=align); - if (bit_size == 1) - value = nir_b2b1(b, value); - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, value); - } else { - assert(intrin->intrinsic == nir_intrinsic_store_deref); - - assert(intrin->src[1].is_ssa); - nir_ssa_def *value = intrin->src[1].ssa; - if (value->bit_size == 1) - value = nir_b2b32(b, value); - - nir_store_scratch(b, value, offset, .align_mul=align, - .write_mask=nir_intrinsic_write_mask(intrin)); - } - - nir_instr_remove(&intrin->instr); - nir_deref_instr_remove_if_unused(deref); -} - -static bool only_used_for_load_store(nir_deref_instr *deref) -{ - nir_foreach_use(src, &deref->dest.ssa) { - if (!src->parent_instr) - return false; - if (src->parent_instr->type == nir_instr_type_deref) { - if (!only_used_for_load_store(nir_instr_as_deref(src->parent_instr))) - return false; - } else if (src->parent_instr->type != nir_instr_type_intrinsic) { - return false; - } else { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(src->parent_instr); - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - return false; - } - } - return true; -} - -bool -nir_lower_vars_to_scratch(nir_shader *shader, - nir_variable_mode modes, - int size_threshold, - glsl_type_size_align_func size_align) -{ - struct set *set = _mesa_pointer_set_create(NULL); - - /* First, we walk the instructions and flag any variables we want to lower - * by removing them from their respective list and setting the mode to 0. - */ - nir_foreach_function(function, shader) { - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_one_of(deref, modes)) - continue; - - if (!nir_deref_instr_has_indirect(nir_src_as_deref(intrin->src[0]))) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (!var) - continue; - - /* We set var->mode to 0 to indicate that a variable will be moved - * to scratch. Don't assign a scratch location twice. - */ - if (var->data.mode == 0) - continue; - - unsigned var_size, var_align; - size_align(var->type, &var_size, &var_align); - if (var_size <= size_threshold) - continue; - - _mesa_set_add(set, var); - } - } - } - - if (set->entries == 0) { - _mesa_set_destroy(set, NULL); - return false; - } - - nir_foreach_function(function, shader) { - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type != nir_deref_type_var) - continue; - - struct set_entry *entry = _mesa_set_search(set, deref->var); - if (!entry) - continue; - - if (!only_used_for_load_store(deref)) - _mesa_set_remove(set, entry); - } - } - } - - set_foreach(set, entry) { - nir_variable* var = (void*)entry->key; - - /* Remove it from its list */ - exec_node_remove(&var->node); - /* Invalid mode used to flag "moving to scratch" */ - var->data.mode = 0; - - /* We don't allocate space here as iteration in this loop is - * non-deterministic due to the nir_variable pointers. */ - var->data.location = INT_MAX; - } - - bool progress = false; - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_builder build; - nir_builder_init(&build, function->impl); - - bool impl_progress = false; - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_variable *var = nir_intrinsic_get_var(intrin, 0); - /* Variables flagged for lowering above have mode == 0 */ - if (!var || var->data.mode) - continue; - - if (var->data.location == INT_MAX) { - unsigned var_size, var_align; - size_align(var->type, &var_size, &var_align); - - var->data.location = ALIGN_POT(shader->scratch_size, var_align); - shader->scratch_size = var->data.location + var_size; - } - - lower_load_store(&build, intrin, size_align); - impl_progress = true; - } - } - - if (impl_progress) { - progress = true; - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - _mesa_set_destroy(set, NULL); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_shader_calls.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_shader_calls.c deleted file mode 100644 index d65fc1b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_shader_calls.c +++ /dev/null @@ -1,2043 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_phi_builder.h" -#include "../../util/u_dynarray.h" -#include "../../util/u_math.h" - -static bool -move_system_values_to_top(nir_shader *shader) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - bool progress = false; - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - /* These intrinsics not only can't be re-materialized but aren't - * preserved when moving to the continuation shader. We have to move - * them to the top to ensure they get spilled as needed. - */ - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_shader_record_ptr: - case nir_intrinsic_load_btd_local_arg_addr_intel: - nir_instr_remove(instr); - nir_instr_insert(nir_before_cf_list(&impl->body), instr); - progress = true; - break; - - default: - break; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -static bool -instr_is_shader_call(nir_instr *instr) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - return intrin->intrinsic == nir_intrinsic_trace_ray || - intrin->intrinsic == nir_intrinsic_report_ray_intersection || - intrin->intrinsic == nir_intrinsic_execute_callable; -} - -/* Previously named bitset, it had to be renamed as FreeBSD defines a struct - * named bitset in sys/_bitset.h required by pthread_np.h which is included - * from src/util/u_thread.h that is indirectly included by this file. - */ -struct sized_bitset { - BITSET_WORD *set; - unsigned size; -}; - -static struct sized_bitset -bitset_create(void *mem_ctx, unsigned size) -{ - return (struct sized_bitset) { - .set = rzalloc_array(mem_ctx, BITSET_WORD, BITSET_WORDS(size)), - .size = size, - }; -} - -static bool -src_is_in_bitset(nir_src *src, void *_set) -{ - struct sized_bitset *set = _set; - assert(src->is_ssa); - - /* Any SSA values which were added after we generated liveness information - * are things generated by this pass and, while most of it is arithmetic - * which we could re-materialize, we don't need to because it's only used - * for a single load/store and so shouldn't cross any shader calls. - */ - if (src->ssa->index >= set->size) - return false; - - return BITSET_TEST(set->set, src->ssa->index); -} - -static void -add_ssa_def_to_bitset(nir_ssa_def *def, struct sized_bitset *set) -{ - if (def->index >= set->size) - return; - - BITSET_SET(set->set, def->index); -} - -static bool -can_remat_instr(nir_instr *instr, struct sized_bitset *remat) -{ - /* Set of all values which are trivially re-materializable and we shouldn't - * ever spill them. This includes: - * - * - Undef values - * - Constants - * - Uniforms (UBO or push constant) - * - ALU combinations of any of the above - * - Derefs which are either complete or casts of any of the above - * - * Because this pass rewrites things in-order and phis are always turned - * into register writes, We can use "is it SSA?" to answer the question - * "can my source be re-materialized?". - */ - switch (instr->type) { - case nir_instr_type_alu: - if (!nir_instr_as_alu(instr)->dest.dest.is_ssa) - return false; - - return nir_foreach_src(instr, src_is_in_bitset, remat); - - case nir_instr_type_deref: - return nir_foreach_src(instr, src_is_in_bitset, remat); - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_ubo: - case nir_intrinsic_vulkan_resource_index: - case nir_intrinsic_vulkan_resource_reindex: - case nir_intrinsic_load_vulkan_descriptor: - case nir_intrinsic_load_push_constant: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_global_const_block_intel: - case nir_intrinsic_load_desc_set_address_intel: - /* These intrinsics don't need to be spilled as long as they don't - * depend on any spilled values. - */ - return nir_foreach_src(instr, src_is_in_bitset, remat); - - case nir_intrinsic_load_scratch_base_ptr: - case nir_intrinsic_load_ray_launch_id: - case nir_intrinsic_load_topology_id_intel: - case nir_intrinsic_load_btd_global_arg_addr_intel: - case nir_intrinsic_load_btd_resume_sbt_addr_intel: - case nir_intrinsic_load_ray_base_mem_addr_intel: - case nir_intrinsic_load_ray_hw_stack_size_intel: - case nir_intrinsic_load_ray_sw_stack_size_intel: - case nir_intrinsic_load_ray_num_dss_rt_stacks_intel: - case nir_intrinsic_load_ray_hit_sbt_addr_intel: - case nir_intrinsic_load_ray_hit_sbt_stride_intel: - case nir_intrinsic_load_ray_miss_sbt_addr_intel: - case nir_intrinsic_load_ray_miss_sbt_stride_intel: - case nir_intrinsic_load_callable_sbt_addr_intel: - case nir_intrinsic_load_callable_sbt_stride_intel: - case nir_intrinsic_load_reloc_const_intel: - case nir_intrinsic_load_ray_query_global_intel: - case nir_intrinsic_load_ray_launch_size: - /* Notably missing from the above list is btd_local_arg_addr_intel. - * This is because the resume shader will have a different local - * argument pointer because it has a different BSR. Any access of - * the original shader's local arguments needs to be preserved so - * that pointer has to be saved on the stack. - * - * TODO: There may be some system values we want to avoid - * re-materializing as well but we have to be very careful - * to ensure that it's a system value which cannot change - * across a shader call. - */ - return true; - - default: - return false; - } - } - - case nir_instr_type_ssa_undef: - case nir_instr_type_load_const: - return true; - - default: - return false; - } -} - -static bool -can_remat_ssa_def(nir_ssa_def *def, struct sized_bitset *remat) -{ - return can_remat_instr(def->parent_instr, remat); -} - -struct add_instr_data { - struct util_dynarray *buf; - struct sized_bitset *remat; -}; - -static bool -add_src_instr(nir_src *src, void *state) -{ - if (!src->is_ssa) - return false; - - struct add_instr_data *data = state; - if (BITSET_TEST(data->remat->set, src->ssa->index)) - return true; - - util_dynarray_foreach(data->buf, nir_instr *, instr_ptr) { - if (*instr_ptr == src->ssa->parent_instr) - return true; - } - - util_dynarray_append(data->buf, nir_instr *, src->ssa->parent_instr); - return true; -} - -static int -compare_instr_indexes(const void *_inst1, const void *_inst2) -{ - const nir_instr * const *inst1 = _inst1; - const nir_instr * const *inst2 = _inst2; - - return (*inst1)->index - (*inst2)->index; -} - -static bool -can_remat_chain_ssa_def(nir_ssa_def *def, struct sized_bitset *remat, struct util_dynarray *buf) -{ - assert(util_dynarray_num_elements(buf, nir_instr *) == 0); - - void *mem_ctx = ralloc_context(NULL); - - /* Add all the instructions involved in build this ssa_def */ - util_dynarray_append(buf, nir_instr *, def->parent_instr); - - unsigned idx = 0; - struct add_instr_data data = { - .buf = buf, - .remat = remat, - }; - while (idx < util_dynarray_num_elements(buf, nir_instr *)) { - nir_instr *instr = *util_dynarray_element(buf, nir_instr *, idx++); - if (!nir_foreach_src(instr, add_src_instr, &data)) - goto fail; - } - - /* Sort instructions by index */ - qsort(util_dynarray_begin(buf), - util_dynarray_num_elements(buf, nir_instr *), - sizeof(nir_instr *), - compare_instr_indexes); - - /* Create a temporary bitset with all values already - * rematerialized/rematerializable. We'll add to this bit set as we go - * through values that might not be in that set but that we can - * rematerialize. - */ - struct sized_bitset potential_remat = bitset_create(mem_ctx, remat->size); - memcpy(potential_remat.set, remat->set, BITSET_WORDS(remat->size) * sizeof(BITSET_WORD)); - - util_dynarray_foreach(buf, nir_instr *, instr_ptr) { - nir_ssa_def *instr_ssa_def = nir_instr_ssa_def(*instr_ptr); - - /* If already in the potential rematerializable, nothing to do. */ - if (BITSET_TEST(potential_remat.set, instr_ssa_def->index)) - continue; - - if (!can_remat_instr(*instr_ptr, &potential_remat)) - goto fail; - - /* All the sources are rematerializable and the instruction is also - * rematerializable, mark it as rematerializable too. - */ - BITSET_SET(potential_remat.set, instr_ssa_def->index); - } - - ralloc_free(mem_ctx); - - return true; - - fail: - util_dynarray_clear(buf); - ralloc_free(mem_ctx); - return false; -} - -static nir_ssa_def * -remat_ssa_def(nir_builder *b, nir_ssa_def *def, struct hash_table *remap_table) -{ - nir_instr *clone = nir_instr_clone_deep(b->shader, def->parent_instr, remap_table); - nir_builder_instr_insert(b, clone); - return nir_instr_ssa_def(clone); -} - -static nir_ssa_def * -remat_chain_ssa_def(nir_builder *b, struct util_dynarray *buf, - struct sized_bitset *remat, nir_ssa_def ***fill_defs, - unsigned call_idx, struct hash_table *remap_table) -{ - nir_ssa_def *last_def = NULL; - - util_dynarray_foreach(buf, nir_instr *, instr_ptr) { - nir_ssa_def *instr_ssa_def = nir_instr_ssa_def(*instr_ptr); - unsigned ssa_index = instr_ssa_def->index; - - if (fill_defs[ssa_index] != NULL && - fill_defs[ssa_index][call_idx] != NULL) - continue; - - /* Clone the instruction we want to rematerialize */ - nir_ssa_def *clone_ssa_def = remat_ssa_def(b, instr_ssa_def, remap_table); - - if (fill_defs[ssa_index] == NULL) { - fill_defs[ssa_index] = - rzalloc_array(fill_defs, nir_ssa_def *, remat->size); - } - - /* Add the new ssa_def to the list fill_defs and flag it as - * rematerialized - */ - fill_defs[ssa_index][call_idx] = last_def = clone_ssa_def; - BITSET_SET(remat->set, ssa_index); - - _mesa_hash_table_insert(remap_table, instr_ssa_def, last_def); - } - - return last_def; -} - -struct pbv_array { - struct nir_phi_builder_value **arr; - unsigned len; -}; - -static struct nir_phi_builder_value * -get_phi_builder_value_for_def(nir_ssa_def *def, - struct pbv_array *pbv_arr) -{ - if (def->index >= pbv_arr->len) - return NULL; - - return pbv_arr->arr[def->index]; -} - -static nir_ssa_def * -get_phi_builder_def_for_src(nir_src *src, struct pbv_array *pbv_arr, - nir_block *block) -{ - assert(src->is_ssa); - - struct nir_phi_builder_value *pbv = - get_phi_builder_value_for_def(src->ssa, pbv_arr); - if (pbv == NULL) - return NULL; - - return nir_phi_builder_value_get_block_def(pbv, block); -} - -static bool -rewrite_instr_src_from_phi_builder(nir_src *src, void *_pbv_arr) -{ - nir_block *block; - if (src->parent_instr->type == nir_instr_type_phi) { - nir_phi_src *phi_src = exec_node_data(nir_phi_src, src, src); - block = phi_src->pred; - } else { - block = src->parent_instr->block; - } - - nir_ssa_def *new_def = get_phi_builder_def_for_src(src, _pbv_arr, block); - if (new_def != NULL) - nir_instr_rewrite_src(src->parent_instr, src, nir_src_for_ssa(new_def)); - return true; -} - -static nir_ssa_def * -spill_fill(nir_builder *before, nir_builder *after, nir_ssa_def *def, - unsigned value_id, unsigned call_idx, - unsigned offset, unsigned stack_alignment) -{ - const unsigned comp_size = def->bit_size / 8; - - nir_store_stack(before, def, - .base = offset, - .call_idx = call_idx, - .align_mul = MIN2(comp_size, stack_alignment), - .value_id = value_id, - .write_mask = BITFIELD_MASK(def->num_components)); - return nir_load_stack(after, def->num_components, def->bit_size, - .base = offset, - .call_idx = call_idx, - .value_id = value_id, - .align_mul = MIN2(comp_size, stack_alignment)); -} - -static void -spill_ssa_defs_and_lower_shader_calls(nir_shader *shader, uint32_t num_calls, - unsigned stack_alignment) -{ - /* TODO: If a SSA def is filled more than once, we probably want to just - * spill it at the LCM of the fill sites so we avoid unnecessary - * extra spills - * - * TODO: If a SSA def is defined outside a loop but live through some call - * inside the loop, we probably want to spill outside the loop. We - * may also want to fill outside the loop if it's not used in the - * loop. - * - * TODO: Right now, we only re-materialize things if their immediate - * sources are things which we filled. We probably want to expand - * that to re-materialize things whose sources are things we can - * re-materialize from things we filled. We may want some DAG depth - * heuristic on this. - */ - - /* This happens per-shader rather than per-impl because we mess with - * nir_shader::scratch_size. - */ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - nir_metadata_require(impl, nir_metadata_live_ssa_defs | - nir_metadata_dominance | - nir_metadata_block_index | - nir_metadata_instr_index); - - void *mem_ctx = ralloc_context(shader); - - const unsigned num_ssa_defs = impl->ssa_alloc; - const unsigned live_words = BITSET_WORDS(num_ssa_defs); - struct sized_bitset trivial_remat = bitset_create(mem_ctx, num_ssa_defs); - - /* Array of all live SSA defs which are spill candidates */ - nir_ssa_def **spill_defs = - rzalloc_array(mem_ctx, nir_ssa_def *, num_ssa_defs); - - /* For each spill candidate, an array of every time it's defined by a fill, - * indexed by call instruction index. - */ - nir_ssa_def ***fill_defs = - rzalloc_array(mem_ctx, nir_ssa_def **, num_ssa_defs); - - /* For each call instruction, the liveness set at the call */ - const BITSET_WORD **call_live = - rzalloc_array(mem_ctx, const BITSET_WORD *, num_calls); - - /* For each call instruction, the block index of the block it lives in */ - uint32_t *call_block_indices = rzalloc_array(mem_ctx, uint32_t, num_calls); - - /* Remap table when rebuilding instructions out of fill operations */ - struct hash_table *trivial_remap_table = - _mesa_pointer_hash_table_create(mem_ctx); - - /* Walk the call instructions and fetch the liveness set and block index - * for each one. We need to do this before we start modifying the shader - * so that liveness doesn't complain that it's been invalidated. Don't - * worry, we'll be very careful with our live sets. :-) - */ - unsigned call_idx = 0; - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (!instr_is_shader_call(instr)) - continue; - - call_block_indices[call_idx] = block->index; - - /* The objective here is to preserve values around shader call - * instructions. Therefore, we use the live set after the - * instruction as the set of things we want to preserve. Because - * none of our shader call intrinsics return anything, we don't have - * to worry about spilling over a return value. - * - * TODO: This isn't quite true for report_intersection. - */ - call_live[call_idx] = - nir_get_live_ssa_defs(nir_after_instr(instr), mem_ctx); - - call_idx++; - } - } - - nir_builder before, after; - nir_builder_init(&before, impl); - nir_builder_init(&after, impl); - - call_idx = 0; - unsigned max_scratch_size = shader->scratch_size; - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (def != NULL) { - if (can_remat_ssa_def(def, &trivial_remat)) { - add_ssa_def_to_bitset(def, &trivial_remat); - _mesa_hash_table_insert(trivial_remap_table, def, def); - } else { - spill_defs[def->index] = def; - } - } - - if (!instr_is_shader_call(instr)) - continue; - - const BITSET_WORD *live = call_live[call_idx]; - - struct hash_table *remap_table = - _mesa_hash_table_clone(trivial_remap_table, mem_ctx); - - /* Make a copy of trivial_remat that we'll update as we crawl through - * the live SSA defs and unspill them. - */ - struct sized_bitset remat = bitset_create(mem_ctx, num_ssa_defs); - memcpy(remat.set, trivial_remat.set, live_words * sizeof(BITSET_WORD)); - - /* Before the two builders are always separated by the call - * instruction, it won't break anything to have two of them. - */ - before.cursor = nir_before_instr(instr); - after.cursor = nir_after_instr(instr); - - /* Array used to hold all the values needed to rematerialize a live - * value. - */ - struct util_dynarray remat_chain; - util_dynarray_init(&remat_chain, mem_ctx); - - unsigned offset = shader->scratch_size; - for (unsigned w = 0; w < live_words; w++) { - BITSET_WORD spill_mask = live[w] & ~trivial_remat.set[w]; - while (spill_mask) { - int i = u_bit_scan(&spill_mask); - assert(i >= 0); - unsigned index = w * BITSET_WORDBITS + i; - assert(index < num_ssa_defs); - - def = spill_defs[index]; - nir_ssa_def *original_def = def, *new_def; - if (can_remat_ssa_def(def, &remat)) { - /* If this SSA def is re-materializable or based on other - * things we've already spilled, re-materialize it rather - * than spilling and filling. Anything which is trivially - * re-materializable won't even get here because we take - * those into account in spill_mask above. - */ - new_def = remat_ssa_def(&after, def, remap_table); - } else if (can_remat_chain_ssa_def(def, &remat, &remat_chain)) { - new_def = remat_chain_ssa_def(&after, &remat_chain, &remat, - fill_defs, call_idx, - remap_table); - util_dynarray_clear(&remat_chain); - } else { - bool is_bool = def->bit_size == 1; - if (is_bool) - def = nir_b2b32(&before, def); - - const unsigned comp_size = def->bit_size / 8; - offset = ALIGN(offset, comp_size); - - new_def = spill_fill(&before, &after, def, - index, call_idx, - offset, stack_alignment); - - if (is_bool) - new_def = nir_b2b1(&after, new_def); - - offset += def->num_components * comp_size; - } - - /* Mark this SSA def as available in the remat set so that, if - * some other SSA def we need is computed based on it, we can - * just re-compute instead of fetching from memory. - */ - BITSET_SET(remat.set, index); - - /* For now, we just make a note of this new SSA def. We'll - * fix things up with the phi builder as a second pass. - */ - if (fill_defs[index] == NULL) { - fill_defs[index] = - rzalloc_array(fill_defs, nir_ssa_def *, num_calls); - } - fill_defs[index][call_idx] = new_def; - _mesa_hash_table_insert(remap_table, original_def, new_def); - } - } - - nir_builder *b = &before; - - offset = ALIGN(offset, stack_alignment); - max_scratch_size = MAX2(max_scratch_size, offset); - - /* First thing on the called shader's stack is the resume address - * followed by a pointer to the payload. - */ - nir_intrinsic_instr *call = nir_instr_as_intrinsic(instr); - - /* Lower to generic intrinsics with information about the stack & resume shader. */ - switch (call->intrinsic) { - case nir_intrinsic_trace_ray: { - nir_rt_trace_ray(b, call->src[0].ssa, call->src[1].ssa, - call->src[2].ssa, call->src[3].ssa, - call->src[4].ssa, call->src[5].ssa, - call->src[6].ssa, call->src[7].ssa, - call->src[8].ssa, call->src[9].ssa, - call->src[10].ssa, - .call_idx = call_idx, .stack_size = offset); - break; - } - - case nir_intrinsic_report_ray_intersection: - unreachable("Any-hit shaders must be inlined"); - - case nir_intrinsic_execute_callable: { - nir_rt_execute_callable(b, call->src[0].ssa, call->src[1].ssa, .call_idx = call_idx, .stack_size = offset); - break; - } - - default: - unreachable("Invalid shader call instruction"); - } - - nir_rt_resume(b, .call_idx = call_idx, .stack_size = offset); - - nir_instr_remove(&call->instr); - - call_idx++; - } - } - assert(call_idx == num_calls); - shader->scratch_size = max_scratch_size; - - struct nir_phi_builder *pb = nir_phi_builder_create(impl); - struct pbv_array pbv_arr = { - .arr = rzalloc_array(mem_ctx, struct nir_phi_builder_value *, - num_ssa_defs), - .len = num_ssa_defs, - }; - - const unsigned block_words = BITSET_WORDS(impl->num_blocks); - BITSET_WORD *def_blocks = ralloc_array(mem_ctx, BITSET_WORD, block_words); - - /* Go through and set up phi builder values for each spillable value which - * we ever needed to spill at any point. - */ - for (unsigned index = 0; index < num_ssa_defs; index++) { - if (fill_defs[index] == NULL) - continue; - - nir_ssa_def *def = spill_defs[index]; - - memset(def_blocks, 0, block_words * sizeof(BITSET_WORD)); - BITSET_SET(def_blocks, def->parent_instr->block->index); - for (unsigned call_idx = 0; call_idx < num_calls; call_idx++) { - if (fill_defs[index][call_idx] != NULL) - BITSET_SET(def_blocks, call_block_indices[call_idx]); - } - - pbv_arr.arr[index] = nir_phi_builder_add_value(pb, def->num_components, - def->bit_size, def_blocks); - } - - /* Walk the shader one more time and rewrite SSA defs as needed using the - * phi builder. - */ - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (def != NULL) { - struct nir_phi_builder_value *pbv = - get_phi_builder_value_for_def(def, &pbv_arr); - if (pbv != NULL) - nir_phi_builder_value_set_block_def(pbv, block, def); - } - - if (instr->type == nir_instr_type_phi) - continue; - - nir_foreach_src(instr, rewrite_instr_src_from_phi_builder, &pbv_arr); - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *resume = nir_instr_as_intrinsic(instr); - if (resume->intrinsic != nir_intrinsic_rt_resume) - continue; - - call_idx = nir_intrinsic_call_idx(resume); - - /* Technically, this is the wrong place to add the fill defs to the - * phi builder values because we haven't seen any of the load_scratch - * instructions for this call yet. However, we know based on how we - * emitted them that no value ever gets used until after the load - * instruction has been emitted so this should be safe. If we ever - * fail validation due this it likely means a bug in our spilling - * code and not the phi re-construction code here. - */ - for (unsigned index = 0; index < num_ssa_defs; index++) { - if (fill_defs[index] && fill_defs[index][call_idx]) { - nir_phi_builder_value_set_block_def(pbv_arr.arr[index], block, - fill_defs[index][call_idx]); - } - } - } - - nir_if *following_if = nir_block_get_following_if(block); - if (following_if) { - nir_ssa_def *new_def = - get_phi_builder_def_for_src(&following_if->condition, - &pbv_arr, block); - if (new_def != NULL) - nir_if_rewrite_condition(following_if, nir_src_for_ssa(new_def)); - } - - /* Handle phi sources that source from this block. We have to do this - * as a separate pass because the phi builder assumes that uses and - * defs are processed in an order that respects dominance. When we have - * loops, a phi source may be a back-edge so we have to handle it as if - * it were one of the last instructions in the predecessor block. - */ - nir_foreach_phi_src_leaving_block(block, - rewrite_instr_src_from_phi_builder, - &pbv_arr); - } - - nir_phi_builder_finish(pb); - - ralloc_free(mem_ctx); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); -} - -static nir_instr * -find_resume_instr(nir_function_impl *impl, unsigned call_idx) -{ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *resume = nir_instr_as_intrinsic(instr); - if (resume->intrinsic != nir_intrinsic_rt_resume) - continue; - - if (nir_intrinsic_call_idx(resume) == call_idx) - return &resume->instr; - } - } - unreachable("Couldn't find resume instruction"); -} - -/* Walk the CF tree and duplicate the contents of every loop, one half runs on - * resume and the other half is for any post-resume loop iterations. We are - * careful in our duplication to ensure that resume_instr is in the resume - * half of the loop though a copy of resume_instr will remain in the other - * half as well in case the same shader call happens twice. - */ -static bool -duplicate_loop_bodies(nir_function_impl *impl, nir_instr *resume_instr) -{ - nir_register *resume_reg = NULL; - for (nir_cf_node *node = resume_instr->block->cf_node.parent; - node->type != nir_cf_node_function; node = node->parent) { - if (node->type != nir_cf_node_loop) - continue; - - nir_loop *loop = nir_cf_node_as_loop(node); - assert(!nir_loop_has_continue_construct(loop)); - - if (resume_reg == NULL) { - /* We only create resume_reg if we encounter a loop. This way we can - * avoid re-validating the shader and calling ssa_to_regs in the case - * where it's just if-ladders. - */ - resume_reg = nir_local_reg_create(impl); - resume_reg->num_components = 1; - resume_reg->bit_size = 1; - - nir_builder b; - nir_builder_init(&b, impl); - - /* Initialize resume to true */ - b.cursor = nir_before_cf_list(&impl->body); - nir_store_reg(&b, resume_reg, nir_imm_true(&b), 1); - - /* Set resume to false right after the resume instruction */ - b.cursor = nir_after_instr(resume_instr); - nir_store_reg(&b, resume_reg, nir_imm_false(&b), 1); - } - - /* Before we go any further, make sure that everything which exits the - * loop or continues around to the top of the loop does so through - * registers. We're about to duplicate the loop body and we'll have - * serious trouble if we don't do this. - */ - nir_convert_loop_to_lcssa(loop); - nir_lower_phis_to_regs_block(nir_loop_first_block(loop)); - nir_lower_phis_to_regs_block( - nir_cf_node_as_block(nir_cf_node_next(&loop->cf_node))); - - nir_cf_list cf_list; - nir_cf_list_extract(&cf_list, &loop->body); - - nir_if *_if = nir_if_create(impl->function->shader); - _if->condition = nir_src_for_reg(resume_reg); - nir_cf_node_insert(nir_after_cf_list(&loop->body), &_if->cf_node); - - nir_cf_list clone; - nir_cf_list_clone(&clone, &cf_list, &loop->cf_node, NULL); - - /* Insert the clone in the else and the original in the then so that - * the resume_instr remains valid even after the duplication. - */ - nir_cf_reinsert(&cf_list, nir_before_cf_list(&_if->then_list)); - nir_cf_reinsert(&clone, nir_before_cf_list(&_if->else_list)); - } - - if (resume_reg != NULL) - nir_metadata_preserve(impl, nir_metadata_none); - - return resume_reg != NULL; -} - -static bool -cf_node_contains_block(nir_cf_node *node, nir_block *block) -{ - for (nir_cf_node *n = &block->cf_node; n != NULL; n = n->parent) { - if (n == node) - return true; - } - - return false; -} - -static void -rewrite_phis_to_pred(nir_block *block, nir_block *pred) -{ - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - - ASSERTED bool found = false; - nir_foreach_phi_src(phi_src, phi) { - if (phi_src->pred == pred) { - found = true; - assert(phi_src->src.is_ssa); - nir_ssa_def_rewrite_uses(&phi->dest.ssa, phi_src->src.ssa); - break; - } - } - assert(found); - } -} - -static bool -cursor_is_after_jump(nir_cursor cursor) -{ - switch (cursor.option) { - case nir_cursor_before_instr: - case nir_cursor_before_block: - return false; - case nir_cursor_after_instr: - return cursor.instr->type == nir_instr_type_jump; - case nir_cursor_after_block: - return nir_block_ends_in_jump(cursor.block);; - } - unreachable("Invalid cursor option"); -} - -/** Flattens if ladders leading up to a resume - * - * Given a resume_instr, this function flattens any if ladders leading to the - * resume instruction and deletes any code that cannot be encountered on a - * direct path to the resume instruction. This way we get, for the most part, - * straight-line control-flow up to the resume instruction. - * - * While we do this flattening, we also move any code which is in the remat - * set up to the top of the function or to the top of the resume portion of - * the current loop. We don't worry about control-flow as we do this because - * phis will never be in the remat set (see can_remat_instr) and so nothing - * control-dependent will ever need to be re-materialized. It is possible - * that this algorithm will preserve too many instructions by moving them to - * the top but we leave that for DCE to clean up. Any code not in the remat - * set is deleted because it's either unused in the continuation or else - * unspilled from a previous continuation and the unspill code is after the - * resume instruction. - * - * If, for instance, we have something like this: - * - * // block 0 - * if (cond1) { - * // block 1 - * } else { - * // block 2 - * if (cond2) { - * // block 3 - * resume; - * if (cond3) { - * // block 4 - * } - * } else { - * // block 5 - * } - * } - * - * then we know, because we know the resume instruction had to be encoutered, - * that cond1 = false and cond2 = true and we lower as follows: - * - * // block 0 - * // block 2 - * // block 3 - * resume; - * if (cond3) { - * // block 4 - * } - * - * As you can see, the code in blocks 1 and 5 was removed because there is no - * path from the start of the shader to the resume instruction which execute - * blocks 1 or 5. Any remat code from blocks 0, 2, and 3 is preserved and - * moved to the top. If the resume instruction is inside a loop then we know - * a priori that it is of the form - * - * loop { - * if (resume) { - * // Contents containing resume_instr - * } else { - * // Second copy of contents - * } - * } - * - * In this case, we only descend into the first half of the loop. The second - * half is left alone as that portion is only ever executed after the resume - * instruction. - */ -static bool -flatten_resume_if_ladder(nir_builder *b, - nir_cf_node *parent_node, - struct exec_list *child_list, - bool child_list_contains_cursor, - nir_instr *resume_instr, - struct sized_bitset *remat) -{ - nir_cf_list cf_list; - - /* If our child list contains the cursor instruction then we start out - * before the cursor instruction. We need to know this so that we can skip - * moving instructions which are already before the cursor. - */ - bool before_cursor = child_list_contains_cursor; - - nir_cf_node *resume_node = NULL; - foreach_list_typed_safe(nir_cf_node, child, node, child_list) { - switch (child->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(child); - if (b->cursor.option == nir_cursor_before_block && - b->cursor.block == block) { - assert(before_cursor); - before_cursor = false; - } - nir_foreach_instr_safe(instr, block) { - if ((b->cursor.option == nir_cursor_before_instr || - b->cursor.option == nir_cursor_after_instr) && - b->cursor.instr == instr) { - assert(nir_cf_node_is_first(&block->cf_node)); - assert(before_cursor); - before_cursor = false; - continue; - } - - if (instr == resume_instr) - goto found_resume; - - if (!before_cursor && can_remat_instr(instr, remat)) { - nir_instr_remove(instr); - nir_instr_insert(b->cursor, instr); - b->cursor = nir_after_instr(instr); - - nir_ssa_def *def = nir_instr_ssa_def(instr); - BITSET_SET(remat->set, def->index); - } - } - if (b->cursor.option == nir_cursor_after_block && - b->cursor.block == block) { - assert(before_cursor); - before_cursor = false; - } - break; - } - - case nir_cf_node_if: { - assert(!before_cursor); - nir_if *_if = nir_cf_node_as_if(child); - if (flatten_resume_if_ladder(b, &_if->cf_node, &_if->then_list, - false, resume_instr, remat)) { - resume_node = child; - rewrite_phis_to_pred(nir_cf_node_as_block(nir_cf_node_next(child)), - nir_if_last_then_block(_if)); - goto found_resume; - } - - if (flatten_resume_if_ladder(b, &_if->cf_node, &_if->else_list, - false, resume_instr, remat)) { - resume_node = child; - rewrite_phis_to_pred(nir_cf_node_as_block(nir_cf_node_next(child)), - nir_if_last_else_block(_if)); - goto found_resume; - } - break; - } - - case nir_cf_node_loop: { - assert(!before_cursor); - nir_loop *loop = nir_cf_node_as_loop(child); - assert(!nir_loop_has_continue_construct(loop)); - - if (cf_node_contains_block(&loop->cf_node, resume_instr->block)) { - /* Thanks to our loop body duplication pass, every level of loop - * containing the resume instruction contains exactly three nodes: - * two blocks and an if. We don't want to lower away this if - * because it's the resume selection if. The resume half is - * always the then_list so that's what we want to flatten. - */ - nir_block *header = nir_loop_first_block(loop); - nir_if *_if = nir_cf_node_as_if(nir_cf_node_next(&header->cf_node)); - - /* We want to place anything re-materialized from inside the loop - * at the top of the resume half of the loop. - */ - nir_builder bl; - nir_builder_init(&bl, b->impl); - bl.cursor = nir_before_cf_list(&_if->then_list); - - ASSERTED bool found = - flatten_resume_if_ladder(&bl, &_if->cf_node, &_if->then_list, - true, resume_instr, remat); - assert(found); - resume_node = child; - goto found_resume; - } else { - ASSERTED bool found = - flatten_resume_if_ladder(b, &loop->cf_node, &loop->body, - false, resume_instr, remat); - assert(!found); - } - break; - } - - case nir_cf_node_function: - unreachable("Unsupported CF node type"); - } - } - assert(!before_cursor); - - /* If we got here, we didn't find the resume node or instruction. */ - return false; - -found_resume: - /* If we got here then we found either the resume node or the resume - * instruction in this CF list. - */ - if (resume_node) { - /* If the resume instruction is buried in side one of our children CF - * nodes, resume_node now points to that child. - */ - if (resume_node->type == nir_cf_node_if) { - /* Thanks to the recursive call, all of the interesting contents of - * resume_node have been copied before the cursor. We just need to - * copy the stuff after resume_node. - */ - nir_cf_extract(&cf_list, nir_after_cf_node(resume_node), - nir_after_cf_list(child_list)); - } else { - /* The loop contains its own cursor and still has useful stuff in it. - * We want to move everything after and including the loop to before - * the cursor. - */ - assert(resume_node->type == nir_cf_node_loop); - nir_cf_extract(&cf_list, nir_before_cf_node(resume_node), - nir_after_cf_list(child_list)); - } - } else { - /* If we found the resume instruction in one of our blocks, grab - * everything after it in the entire list (not just the one block), and - * place it before the cursor instr. - */ - nir_cf_extract(&cf_list, nir_after_instr(resume_instr), - nir_after_cf_list(child_list)); - } - - /* If the resume instruction is in the first block of the child_list, - * and the cursor is still before that block, the nir_cf_extract() may - * extract the block object pointed by the cursor, and instead create - * a new one for the code before the resume. In such case the cursor - * will be broken, as it will point to a block which is no longer - * in a function. - * - * Luckily, in both cases when this is possible, the intended cursor - * position is right before the child_list, so we can fix the cursor here. - */ - if (child_list_contains_cursor && - b->cursor.option == nir_cursor_before_block && - b->cursor.block->cf_node.parent == NULL) - b->cursor = nir_before_cf_list(child_list); - - if (cursor_is_after_jump(b->cursor)) { - /* If the resume instruction is in a loop, it's possible cf_list ends - * in a break or continue instruction, in which case we don't want to - * insert anything. It's also possible we have an early return if - * someone hasn't lowered those yet. In either case, nothing after that - * point executes in this context so we can delete it. - */ - nir_cf_delete(&cf_list); - } else { - b->cursor = nir_cf_reinsert(&cf_list, b->cursor); - } - - if (!resume_node) { - /* We want the resume to be the first "interesting" instruction */ - nir_instr_remove(resume_instr); - nir_instr_insert(nir_before_cf_list(&b->impl->body), resume_instr); - } - - /* We've copied everything interesting out of this CF list to before the - * cursor. Delete everything else. - */ - if (child_list_contains_cursor) { - nir_cf_extract(&cf_list, b->cursor, nir_after_cf_list(child_list)); - } else { - nir_cf_list_extract(&cf_list, child_list); - } - nir_cf_delete(&cf_list); - - return true; -} - -static bool -wrap_jump_instr(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_jump) - return false; - - b->cursor = nir_before_instr(instr); - - nir_if *_if = nir_push_if(b, nir_imm_true(b)); - nir_pop_if(b, NULL); - - nir_cf_list cf_list; - nir_cf_extract(&cf_list, nir_before_instr(instr), nir_after_instr(instr)); - nir_cf_reinsert(&cf_list, nir_before_block(nir_if_first_then_block(_if))); - - return true; -} - -/* This pass wraps jump instructions in a dummy if block so that when - * flatten_resume_if_ladder() does its job, it doesn't move a jump instruction - * directly in front of another instruction which the NIR control flow helpers - * do not allow. - */ -static bool -wrap_jumps(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, wrap_jump_instr, - nir_metadata_none, NULL); -} - -static nir_instr * -lower_resume(nir_shader *shader, int call_idx) -{ - wrap_jumps(shader); - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - nir_instr *resume_instr = find_resume_instr(impl, call_idx); - - if (duplicate_loop_bodies(impl, resume_instr)) { - nir_validate_shader(shader, "after duplicate_loop_bodies in " - "nir_lower_shader_calls"); - /* If we duplicated the bodies of any loops, run regs_to_ssa to get rid - * of all those pesky registers we just added. - */ - NIR_PASS_V(shader, nir_lower_regs_to_ssa); - } - - /* Re-index nir_ssa_def::index. We don't care about actual liveness in - * this pass but, so we can use the same helpers as the spilling pass, we - * need to make sure that live_index is something sane. It's used - * constantly for determining if an SSA value has been added since the - * start of the pass. - */ - nir_index_ssa_defs(impl); - - void *mem_ctx = ralloc_context(shader); - - /* Used to track which things may have been assumed to be re-materialized - * by the spilling pass and which we shouldn't delete. - */ - struct sized_bitset remat = bitset_create(mem_ctx, impl->ssa_alloc); - - /* Create a nop instruction to use as a cursor as we extract and re-insert - * stuff into the CFG. - */ - nir_builder b; - nir_builder_init(&b, impl); - b.cursor = nir_before_cf_list(&impl->body); - ASSERTED bool found = - flatten_resume_if_ladder(&b, &impl->cf_node, &impl->body, - true, resume_instr, &remat); - assert(found); - - ralloc_free(mem_ctx); - - nir_metadata_preserve(impl, nir_metadata_none); - - nir_validate_shader(shader, "after flatten_resume_if_ladder in " - "nir_lower_shader_calls"); - - return resume_instr; -} - -static void -replace_resume_with_halt(nir_shader *shader, nir_instr *keep) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr == keep) - continue; - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *resume = nir_instr_as_intrinsic(instr); - if (resume->intrinsic != nir_intrinsic_rt_resume) - continue; - - /* If this is some other resume, then we've kicked off a ray or - * bindless thread and we don't want to go any further in this - * shader. Insert a halt so that NIR will delete any instructions - * dominated by this call instruction including the scratch_load - * instructions we inserted. - */ - nir_cf_list cf_list; - nir_cf_extract(&cf_list, nir_after_instr(&resume->instr), - nir_after_block(block)); - nir_cf_delete(&cf_list); - b.cursor = nir_instr_remove(&resume->instr); - nir_jump(&b, nir_jump_halt); - break; - } - } -} - -struct lower_scratch_state { - nir_address_format address_format; -}; - -static bool -lower_stack_instr_to_scratch(struct nir_builder *b, nir_instr *instr, void *data) -{ - struct lower_scratch_state *state = data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *stack = nir_instr_as_intrinsic(instr); - switch (stack->intrinsic) { - case nir_intrinsic_load_stack: { - b->cursor = nir_instr_remove(instr); - nir_ssa_def *data, *old_data = nir_instr_ssa_def(instr); - - if (state->address_format == nir_address_format_64bit_global) { - nir_ssa_def *addr = nir_iadd_imm(b, - nir_load_scratch_base_ptr(b, 1, 64, 1), - nir_intrinsic_base(stack)); - data = nir_load_global(b, addr, - nir_intrinsic_align_mul(stack), - stack->dest.ssa.num_components, - stack->dest.ssa.bit_size); - } else { - assert(state->address_format == nir_address_format_32bit_offset); - data = nir_load_scratch(b, - old_data->num_components, - old_data->bit_size, - nir_imm_int(b, nir_intrinsic_base(stack)), - .align_mul = nir_intrinsic_align_mul(stack)); - } - nir_ssa_def_rewrite_uses(old_data, data); - break; - } - - case nir_intrinsic_store_stack: { - b->cursor = nir_instr_remove(instr); - nir_ssa_def *data = stack->src[0].ssa; - - if (state->address_format == nir_address_format_64bit_global) { - nir_ssa_def *addr = nir_iadd_imm(b, - nir_load_scratch_base_ptr(b, 1, 64, 1), - nir_intrinsic_base(stack)); - nir_store_global(b, addr, - nir_intrinsic_align_mul(stack), - data, - BITFIELD_MASK(data->num_components)); - } else { - assert(state->address_format == nir_address_format_32bit_offset); - nir_store_scratch(b, data, - nir_imm_int(b, nir_intrinsic_base(stack)), - .align_mul = nir_intrinsic_align_mul(stack), - .write_mask = BITFIELD_MASK(data->num_components)); - } - break; - } - - default: - return false; - } - - return true; -} - -static bool -nir_lower_stack_to_scratch(nir_shader *shader, - nir_address_format address_format) -{ - struct lower_scratch_state state = { - .address_format = address_format, - }; - - return nir_shader_instructions_pass(shader, - lower_stack_instr_to_scratch, - nir_metadata_block_index | - nir_metadata_dominance, - &state); -} - -static bool -opt_remove_respills_instr(struct nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *store_intrin = nir_instr_as_intrinsic(instr); - if (store_intrin->intrinsic != nir_intrinsic_store_stack) - return false; - - nir_instr *value_instr = store_intrin->src[0].ssa->parent_instr; - if (value_instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *load_intrin = nir_instr_as_intrinsic(value_instr); - if (load_intrin->intrinsic != nir_intrinsic_load_stack) - return false; - - if (nir_intrinsic_base(load_intrin) != nir_intrinsic_base(store_intrin)) - return false; - - nir_instr_remove(&store_intrin->instr); - return true; -} - -/* After shader split, look at stack load/store operations. If we're loading - * and storing the same value at the same location, we can drop the store - * instruction. - */ -static bool -nir_opt_remove_respills(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, - opt_remove_respills_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} - -static void -add_use_mask(struct hash_table_u64 *offset_to_mask, - unsigned offset, unsigned mask) -{ - uintptr_t old_mask = (uintptr_t) - _mesa_hash_table_u64_search(offset_to_mask, offset); - - _mesa_hash_table_u64_insert(offset_to_mask, offset, - (void *)(uintptr_t)(old_mask | mask)); -} - -/* When splitting the shaders, we might have inserted store & loads of vec4s, - * because a live value is a 4 components. But sometimes, only some components - * of that vec4 will be used by after the scratch load. This pass removes the - * unused components of scratch load/stores. - */ -static bool -nir_opt_trim_stack_values(nir_shader *shader) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - struct hash_table_u64 *value_id_to_mask = _mesa_hash_table_u64_create(NULL); - bool progress = false; - - /* Find all the loads and how their value is being used */ - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_stack) - continue; - - const unsigned value_id = nir_intrinsic_value_id(intrin); - - const unsigned mask = - nir_ssa_def_components_read(nir_instr_ssa_def(instr)); - add_use_mask(value_id_to_mask, value_id, mask); - } - } - - /* For each store, if it stores more than is being used, trim it. - * Otherwise, remove it from the hash table. - */ - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_store_stack) - continue; - - const unsigned value_id = nir_intrinsic_value_id(intrin); - - const unsigned write_mask = nir_intrinsic_write_mask(intrin); - const unsigned read_mask = (uintptr_t) - _mesa_hash_table_u64_search(value_id_to_mask, value_id); - - /* Already removed from the table, nothing to do */ - if (read_mask == 0) - continue; - - /* Matching read/write mask, nothing to do, remove from the table. */ - if (write_mask == read_mask) { - _mesa_hash_table_u64_remove(value_id_to_mask, value_id); - continue; - } - - nir_builder b; - nir_builder_init(&b, impl); - b.cursor = nir_before_instr(instr); - - nir_ssa_def *value = nir_channels(&b, intrin->src[0].ssa, read_mask); - nir_instr_rewrite_src_ssa(instr, &intrin->src[0], value); - - intrin->num_components = util_bitcount(read_mask); - nir_intrinsic_set_write_mask(intrin, (1u << intrin->num_components) - 1); - - progress = true; - } - } - - /* For each load remaining in the hash table (only the ones we changed the - * number of components of), apply triming/reswizzle. - */ - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_stack) - continue; - - const unsigned value_id = nir_intrinsic_value_id(intrin); - - unsigned read_mask = (uintptr_t) - _mesa_hash_table_u64_search(value_id_to_mask, value_id); - if (read_mask == 0) - continue; - - unsigned swiz_map[NIR_MAX_VEC_COMPONENTS] = { 0, }; - unsigned swiz_count = 0; - u_foreach_bit(idx, read_mask) - swiz_map[idx] = swiz_count++; - - nir_ssa_def *def = nir_instr_ssa_def(instr); - - nir_foreach_use_safe(use_src, def) { - if (use_src->parent_instr->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(use_src->parent_instr); - nir_alu_src *alu_src = exec_node_data(nir_alu_src, use_src, src); - - unsigned write_mask = alu->dest.write_mask; - u_foreach_bit(idx, write_mask) - alu_src->swizzle[idx] = swiz_map[alu_src->swizzle[idx]]; - } else if (use_src->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *use_intrin = - nir_instr_as_intrinsic(use_src->parent_instr); - assert(nir_intrinsic_has_write_mask(use_intrin)); - unsigned write_mask = nir_intrinsic_write_mask(use_intrin); - unsigned new_write_mask = 0; - u_foreach_bit(idx, write_mask) - new_write_mask |= 1 << swiz_map[idx]; - nir_intrinsic_set_write_mask(use_intrin, new_write_mask); - } else { - unreachable("invalid instruction type"); - } - } - - intrin->dest.ssa.num_components = intrin->num_components = swiz_count; - - progress = true; - } - } - - nir_metadata_preserve(impl, - progress ? - (nir_metadata_dominance | - nir_metadata_block_index | - nir_metadata_loop_analysis) : - nir_metadata_all); - - _mesa_hash_table_u64_destroy(value_id_to_mask); - - return progress; -} - -struct scratch_item { - unsigned old_offset; - unsigned new_offset; - unsigned bit_size; - unsigned num_components; - unsigned value; - unsigned call_idx; -}; - -static int -sort_scratch_item_by_size_and_value_id(const void *_item1, const void *_item2) -{ - const struct scratch_item *item1 = _item1; - const struct scratch_item *item2 = _item2; - - /* By ascending value_id */ - if (item1->bit_size == item2->bit_size) - return (int) item1->value - (int) item2->value; - - /* By descending size */ - return (int) item2->bit_size - (int) item1->bit_size; -} - -static bool -nir_opt_sort_and_pack_stack(nir_shader *shader, - unsigned start_call_scratch, - unsigned stack_alignment, - unsigned num_calls) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - void *mem_ctx = ralloc_context(NULL); - - struct hash_table_u64 *value_id_to_item = - _mesa_hash_table_u64_create(mem_ctx); - struct util_dynarray ops; - util_dynarray_init(&ops, mem_ctx); - - for (unsigned call_idx = 0; call_idx < num_calls; call_idx++) { - _mesa_hash_table_u64_clear(value_id_to_item); - util_dynarray_clear(&ops); - - /* Find all the stack load and their offset. */ - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_stack) - continue; - - if (nir_intrinsic_call_idx(intrin) != call_idx) - continue; - - const unsigned value_id = nir_intrinsic_value_id(intrin); - nir_ssa_def *def = nir_instr_ssa_def(instr); - - assert(_mesa_hash_table_u64_search(value_id_to_item, - value_id) == NULL); - - struct scratch_item item = { - .old_offset = nir_intrinsic_base(intrin), - .bit_size = def->bit_size, - .num_components = def->num_components, - .value = value_id, - }; - - util_dynarray_append(&ops, struct scratch_item, item); - _mesa_hash_table_u64_insert(value_id_to_item, value_id, (void *)(uintptr_t)true); - } - } - - /* Sort scratch item by component size. */ - qsort(util_dynarray_begin(&ops), - util_dynarray_num_elements(&ops, struct scratch_item), - sizeof(struct scratch_item), - sort_scratch_item_by_size_and_value_id); - - - /* Reorder things on the stack */ - _mesa_hash_table_u64_clear(value_id_to_item); - - unsigned scratch_size = start_call_scratch; - util_dynarray_foreach(&ops, struct scratch_item, item) { - item->new_offset = ALIGN(scratch_size, item->bit_size / 8); - scratch_size = item->new_offset + (item->bit_size * item->num_components) / 8; - _mesa_hash_table_u64_insert(value_id_to_item, item->value, item); - } - shader->scratch_size = ALIGN(scratch_size, stack_alignment); - - /* Update offsets in the instructions */ - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_stack: - case nir_intrinsic_store_stack: { - if (nir_intrinsic_call_idx(intrin) != call_idx) - continue; - - struct scratch_item *item = - _mesa_hash_table_u64_search(value_id_to_item, - nir_intrinsic_value_id(intrin)); - assert(item); - - nir_intrinsic_set_base(intrin, item->new_offset); - break; - } - - case nir_intrinsic_rt_trace_ray: - case nir_intrinsic_rt_execute_callable: - case nir_intrinsic_rt_resume: - if (nir_intrinsic_call_idx(intrin) != call_idx) - continue; - nir_intrinsic_set_stack_size(intrin, shader->scratch_size); - break; - - default: - break; - } - } - } - } - - ralloc_free(mem_ctx); - - nir_shader_preserve_all_metadata(shader); - - return true; -} - -static unsigned -nir_block_loop_depth(nir_block *block) -{ - nir_cf_node *node = &block->cf_node; - unsigned loop_depth = 0; - - while (node != NULL) { - if (node->type == nir_cf_node_loop) - loop_depth++; - node = node->parent; - } - - return loop_depth; -} - -/* Find the last block dominating all the uses of a SSA value. */ -static nir_block * -find_last_dominant_use_block(nir_function_impl *impl, nir_ssa_def *value) -{ - nir_block *old_block = value->parent_instr->block; - unsigned old_block_loop_depth = nir_block_loop_depth(old_block); - - nir_foreach_block_reverse_safe(block, impl) { - bool fits = true; - - /* Store on the current block of the value */ - if (block == old_block) - return block; - - /* Don't move instructions deeper into loops, this would generate more - * memory traffic. - */ - unsigned block_loop_depth = nir_block_loop_depth(block); - if (block_loop_depth > old_block_loop_depth) - continue; - - nir_foreach_if_use(src, value) { - nir_block *block_before_if = - nir_cf_node_as_block(nir_cf_node_prev(&src->parent_if->cf_node)); - if (!nir_block_dominates(block, block_before_if)) { - fits = false; - break; - } - } - if (!fits) - continue; - - nir_foreach_use(src, value) { - if (src->parent_instr->type == nir_instr_type_phi && - block == src->parent_instr->block) { - fits = false; - break; - } - - if (!nir_block_dominates(block, src->parent_instr->block)) { - fits = false; - break; - } - } - if (!fits) - continue; - - return block; - } - unreachable("Cannot find block"); -} - -/* Put the scratch loads in the branches where they're needed. */ -static bool -nir_opt_stack_loads(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(func, shader) { - if (!func->impl) - continue; - - nir_metadata_require(func->impl, nir_metadata_dominance | - nir_metadata_block_index); - - bool func_progress = false; - nir_foreach_block_safe(block, func->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_stack) - continue; - - nir_ssa_def *value = &intrin->dest.ssa; - nir_block *new_block = find_last_dominant_use_block(func->impl, value); - if (new_block == block) - continue; - - /* Move the scratch load in the new block, after the phis. */ - nir_instr_remove(instr); - nir_instr_insert(nir_before_block_after_phis(new_block), instr); - - func_progress = true; - } - } - - nir_metadata_preserve(func->impl, - func_progress ? (nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_loop_analysis) : - nir_metadata_all); - - progress |= func_progress; - } - - return progress; -} - -static bool -split_stack_components_instr(struct nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_stack && - intrin->intrinsic != nir_intrinsic_store_stack) - return false; - - if (intrin->intrinsic == nir_intrinsic_load_stack && - intrin->dest.ssa.num_components == 1) - return false; - - if (intrin->intrinsic == nir_intrinsic_store_stack && - intrin->src[0].ssa->num_components == 1) - return false; - - b->cursor = nir_before_instr(instr); - - if (intrin->intrinsic == nir_intrinsic_load_stack) { - nir_ssa_def *components[NIR_MAX_VEC_COMPONENTS] = { 0, }; - for (unsigned c = 0; c < intrin->dest.ssa.num_components; c++) { - components[c] = nir_load_stack(b, 1, intrin->dest.ssa.bit_size, - .base = nir_intrinsic_base(intrin) + - c * intrin->dest.ssa.bit_size / 8, - .call_idx = nir_intrinsic_call_idx(intrin), - .value_id = nir_intrinsic_value_id(intrin), - .align_mul = nir_intrinsic_align_mul(intrin)); - } - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - nir_vec(b, components, - intrin->dest.ssa.num_components)); - } else { - assert(intrin->intrinsic == nir_intrinsic_store_stack); - for (unsigned c = 0; c < intrin->src[0].ssa->num_components; c++) { - nir_store_stack(b, nir_channel(b, intrin->src[0].ssa, c), - .base = nir_intrinsic_base(intrin) + - c * intrin->src[0].ssa->bit_size / 8, - .call_idx = nir_intrinsic_call_idx(intrin), - .align_mul = nir_intrinsic_align_mul(intrin), - .value_id = nir_intrinsic_value_id(intrin), - .write_mask = 0x1); - } - } - - nir_instr_remove(instr); - - return true; -} - -/* Break the load_stack/store_stack intrinsics into single compoments. This - * helps the vectorizer to pack components. - */ -static bool -nir_split_stack_components(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, - split_stack_components_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} - -struct stack_op_vectorizer_state { - nir_should_vectorize_mem_func driver_callback; - void *driver_data; -}; - -static bool -should_vectorize(unsigned align_mul, - unsigned align_offset, - unsigned bit_size, - unsigned num_components, - nir_intrinsic_instr *low, nir_intrinsic_instr *high, - void *data) -{ - /* We only care about those intrinsics */ - if ((low->intrinsic != nir_intrinsic_load_stack && - low->intrinsic != nir_intrinsic_store_stack) || - (high->intrinsic != nir_intrinsic_load_stack && - high->intrinsic != nir_intrinsic_store_stack)) - return false; - - struct stack_op_vectorizer_state *state = data; - - return state->driver_callback(align_mul, align_offset, - bit_size, num_components, - low, high, state->driver_data); -} - -/** Lower shader call instructions to split shaders. - * - * Shader calls can be split into an initial shader and a series of "resume" - * shaders. When the shader is first invoked, it is the initial shader which - * is executed. At any point in the initial shader or any one of the resume - * shaders, a shader call operation may be performed. The possible shader call - * operations are: - * - * - trace_ray - * - report_ray_intersection - * - execute_callable - * - * When a shader call operation is performed, we push all live values to the - * stack,call rt_trace_ray/rt_execute_callable and then kill the shader. Once - * the operation we invoked is complete, a callee shader will return execution - * to the respective resume shader. The resume shader pops the contents off - * the stack and picks up where the calling shader left off. - * - * Stack management is assumed to be done after this pass. Call - * instructions and their resumes get annotated with stack information that - * should be enough for the backend to implement proper stack management. - */ -bool -nir_lower_shader_calls(nir_shader *shader, - const nir_lower_shader_calls_options *options, - nir_shader ***resume_shaders_out, - uint32_t *num_resume_shaders_out, - void *mem_ctx) -{ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - nir_builder b; - nir_builder_init(&b, impl); - - int num_calls = 0; - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr_is_shader_call(instr)) - num_calls++; - } - } - - if (num_calls == 0) { - nir_shader_preserve_all_metadata(shader); - *num_resume_shaders_out = 0; - return false; - } - - /* Some intrinsics not only can't be re-materialized but aren't preserved - * when moving to the continuation shader. We have to move them to the top - * to ensure they get spilled as needed. - */ - { - bool progress = false; - NIR_PASS(progress, shader, move_system_values_to_top); - if (progress) - NIR_PASS(progress, shader, nir_opt_cse); - } - - /* Deref chains contain metadata information that is needed by other passes - * after this one. If we don't rematerialize the derefs in the blocks where - * they're used here, the following lowerings will insert phis which can - * prevent other passes from chasing deref chains. - */ - nir_rematerialize_derefs_in_use_blocks_impl(impl); - - /* Save the start point of the call stack in scratch */ - unsigned start_call_scratch = shader->scratch_size; - - NIR_PASS_V(shader, spill_ssa_defs_and_lower_shader_calls, - num_calls, options->stack_alignment); - - NIR_PASS_V(shader, nir_opt_remove_phis); - - NIR_PASS_V(shader, nir_opt_trim_stack_values); - NIR_PASS_V(shader, nir_opt_sort_and_pack_stack, - start_call_scratch, options->stack_alignment, num_calls); - - /* Make N copies of our shader */ - nir_shader **resume_shaders = ralloc_array(mem_ctx, nir_shader *, num_calls); - for (unsigned i = 0; i < num_calls; i++) { - resume_shaders[i] = nir_shader_clone(mem_ctx, shader); - - /* Give them a recognizable name */ - resume_shaders[i]->info.name = - ralloc_asprintf(mem_ctx, "%s%sresume_%u", - shader->info.name ? shader->info.name : "", - shader->info.name ? "-" : "", - i); - } - - replace_resume_with_halt(shader, NULL); - nir_opt_dce(shader); - nir_opt_dead_cf(shader); - for (unsigned i = 0; i < num_calls; i++) { - nir_instr *resume_instr = lower_resume(resume_shaders[i], i); - replace_resume_with_halt(resume_shaders[i], resume_instr); - /* Remove the dummy blocks added by flatten_resume_if_ladder() */ - nir_opt_if(resume_shaders[i], nir_opt_if_optimize_phi_true_false); - nir_opt_dce(resume_shaders[i]); - nir_opt_dead_cf(resume_shaders[i]); - nir_opt_remove_phis(resume_shaders[i]); - } - - for (unsigned i = 0; i < num_calls; i++) - NIR_PASS_V(resume_shaders[i], nir_opt_remove_respills); - - if (options->localized_loads) { - /* Once loads have been combined we can try to put them closer to where - * they're needed. - */ - for (unsigned i = 0; i < num_calls; i++) - NIR_PASS_V(resume_shaders[i], nir_opt_stack_loads); - } - - struct stack_op_vectorizer_state vectorizer_state = { - .driver_callback = options->vectorizer_callback, - .driver_data = options->vectorizer_data, - }; - nir_load_store_vectorize_options vect_opts = { - .modes = nir_var_shader_temp, - .callback = should_vectorize, - .cb_data = &vectorizer_state, - }; - - if (options->vectorizer_callback != NULL) { - NIR_PASS_V(shader, nir_split_stack_components); - NIR_PASS_V(shader, nir_opt_load_store_vectorize, &vect_opts); - } - NIR_PASS_V(shader, nir_lower_stack_to_scratch, options->address_format); - nir_opt_cse(shader); - for (unsigned i = 0; i < num_calls; i++) { - if (options->vectorizer_callback != NULL) { - NIR_PASS_V(shader, nir_split_stack_components); - NIR_PASS_V(shader, nir_opt_load_store_vectorize, &vect_opts); - } - NIR_PASS_V(resume_shaders[i], nir_lower_stack_to_scratch, - options->address_format); - nir_opt_cse(resume_shaders[i]); - } - - *resume_shaders_out = resume_shaders; - *num_resume_shaders_out = num_calls; - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_single_sampled.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_single_sampled.c deleted file mode 100644 index 925f8bb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_single_sampled.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright © 2021 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -lower_single_sampled_instr(nir_builder *b, - nir_instr *instr, - UNUSED void *cb_data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - nir_ssa_def *lowered; - switch (intrin->intrinsic) { - case nir_intrinsic_load_sample_id: - b->cursor = nir_before_instr(instr); - lowered = nir_imm_int(b, 0); - break; - - case nir_intrinsic_load_sample_pos: - b->cursor = nir_before_instr(instr); - lowered = nir_imm_vec2(b, 0.5, 0.5); - break; - - case nir_intrinsic_load_sample_mask_in: - /* Don't lower to helper invocations if helper invocations are going - * to be lowered right back to sample mask. - */ - if (b->shader->options->lower_helper_invocation) - return false; - - b->cursor = nir_before_instr(instr); - lowered = nir_b2i32(b, nir_inot(b, nir_load_helper_invocation(b, 1))); - break; - - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - b->cursor = nir_before_instr(instr); - assert(intrin->src[0].is_ssa); - lowered = nir_load_deref(b, nir_src_as_deref(intrin->src[0])); - break; - - case nir_intrinsic_load_barycentric_centroid: - case nir_intrinsic_load_barycentric_sample: - case nir_intrinsic_load_barycentric_at_sample: - b->cursor = nir_before_instr(instr); - lowered = nir_load_barycentric(b, nir_intrinsic_load_barycentric_pixel, - nir_intrinsic_interp_mode(intrin)); - - if (nir_intrinsic_interp_mode(intrin) == INTERP_MODE_NOPERSPECTIVE) { - BITSET_SET(b->shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL); - } else { - BITSET_SET(b->shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL); - } - break; - - default: - return false; - } - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, lowered); - nir_instr_remove(instr); - return true; -} - -/* Assume the fragment shader is single-sampled and lower accordingly - * - * This drops sample/centroid qualifiers from all input variables, forces - * barycentrics to pixel, and constant-folds various built-ins. - */ -bool -nir_lower_single_sampled(nir_shader *shader) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - bool progress = false; - nir_foreach_shader_in_variable(var, shader) { - if (var->data.sample) { - var->data.sample = false; - progress = true; - } - if (var->data.centroid) { - var->data.centroid = false; - progress = true; - } - } - - /* We're going to get rid of any uses of these */ - BITSET_CLEAR(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE); - BITSET_CLEAR(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID); - BITSET_CLEAR(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE); - BITSET_CLEAR(shader->info.system_values_read, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID); - - return nir_shader_instructions_pass(shader, lower_single_sampled_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL) || progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_ssbo.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_ssbo.c deleted file mode 100644 index 0d489d1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_ssbo.c +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright © 2019 Collabora, Ltd. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors (Collabora): - * Alyssa Rosenzweig - */ - -#include "nir.h" -#include "nir_builder.h" - -/* - * Lowers SSBOs to globals, for hardware that lack native SSBO support. When - * lowering, *_ssbo_* instructions will become *_global_* instructions, - * augmented with load_ssbo_address. - * - * DOES NOT PERFORM BOUNDS CHECKING. DO NOT USE IN PRODUCTION ON UNTRUSTED - * CONTEXTS INCLUDING WEBGL 2. - */ - -static nir_intrinsic_op -lower_ssbo_op(nir_intrinsic_op op) -{ - switch (op) { - case nir_intrinsic_load_ssbo: - return nir_intrinsic_load_global; - - case nir_intrinsic_store_ssbo: - return nir_intrinsic_store_global; - - case nir_intrinsic_ssbo_atomic_add: - return nir_intrinsic_global_atomic_add; - case nir_intrinsic_ssbo_atomic_imin: - return nir_intrinsic_global_atomic_imin; - case nir_intrinsic_ssbo_atomic_umin: - return nir_intrinsic_global_atomic_umin; - case nir_intrinsic_ssbo_atomic_imax: - return nir_intrinsic_global_atomic_imax; - case nir_intrinsic_ssbo_atomic_umax: - return nir_intrinsic_global_atomic_umax; - case nir_intrinsic_ssbo_atomic_and: - return nir_intrinsic_global_atomic_and; - case nir_intrinsic_ssbo_atomic_or: - return nir_intrinsic_global_atomic_or; - case nir_intrinsic_ssbo_atomic_xor: - return nir_intrinsic_global_atomic_xor; - case nir_intrinsic_ssbo_atomic_exchange: - return nir_intrinsic_global_atomic_exchange; - case nir_intrinsic_ssbo_atomic_comp_swap: - return nir_intrinsic_global_atomic_comp_swap; - - case nir_intrinsic_ssbo_atomic_fadd: - return nir_intrinsic_global_atomic_fadd; - case nir_intrinsic_ssbo_atomic_fmin: - return nir_intrinsic_global_atomic_fmin; - case nir_intrinsic_ssbo_atomic_fmax: - return nir_intrinsic_global_atomic_fmax; - case nir_intrinsic_ssbo_atomic_fcomp_swap: - return nir_intrinsic_global_atomic_fcomp_swap; - - default: - unreachable("Invalid SSBO op"); - } -} - -/* Like SSBO property sysvals, though SSBO index may be indirect. C.f. - * nir_load_system_value */ - -static inline nir_ssa_def * -nir_load_ssbo_prop(nir_builder *b, nir_intrinsic_op op, - nir_src *idx, unsigned bitsize) -{ - nir_intrinsic_instr *load = nir_intrinsic_instr_create(b->shader, op); - load->num_components = 1; - nir_src_copy(&load->src[0], idx, &load->instr); - nir_ssa_dest_init(&load->instr, &load->dest, 1, bitsize, NULL); - nir_builder_instr_insert(b, &load->instr); - return &load->dest.ssa; -} - -#define nir_ssbo_prop(b, prop, index, bitsize) \ - nir_load_ssbo_prop(b, nir_intrinsic_##prop, index, bitsize) - -static nir_ssa_def * -lower_ssbo_instr(nir_builder *b, nir_intrinsic_instr *intr) -{ - nir_intrinsic_op op = lower_ssbo_op(intr->intrinsic); - bool is_store = op == nir_intrinsic_store_global; - bool is_atomic = !is_store && op != nir_intrinsic_load_global; - - /* We have to calculate the address: - * - * &(SSBO[offset]) = &SSBO + offset - */ - - nir_src index = intr->src[is_store ? 1 : 0]; - nir_src *offset_src = nir_get_io_offset_src(intr); - nir_ssa_def *offset = nir_ssa_for_src(b, *offset_src, 1); - - nir_ssa_def *address = - nir_iadd(b, - nir_ssbo_prop(b, load_ssbo_address, &index, 64), - nir_u2u64(b, offset)); - - /* Create the replacement intrinsic */ - - nir_intrinsic_instr *global = - nir_intrinsic_instr_create(b->shader, op); - - global->num_components = intr->num_components; - global->src[is_store ? 1 : 0] = nir_src_for_ssa(address); - - if (!is_atomic) { - nir_intrinsic_set_align_mul(global, nir_intrinsic_align_mul(intr)); - nir_intrinsic_set_align_offset(global, nir_intrinsic_align_offset(intr)); - } - - if (is_store) { - nir_src_copy(&global->src[0], &intr->src[0], &global->instr); - nir_intrinsic_set_write_mask(global, nir_intrinsic_write_mask(intr)); - } else { - nir_ssa_dest_init(&global->instr, &global->dest, - intr->dest.ssa.num_components, - intr->dest.ssa.bit_size, NULL); - - if (is_atomic) { - nir_src_copy(&global->src[1], &intr->src[2], &global->instr); - if (nir_intrinsic_infos[op].num_srcs > 2) - nir_src_copy(&global->src[2], &intr->src[3], &global->instr); - } - } - - nir_builder_instr_insert(b, &global->instr); - return is_store ? NULL : &global->dest.ssa; -} - -static bool -should_lower_ssbo_instr(const nir_instr *instr) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - const nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - switch (intr->intrinsic) { - case nir_intrinsic_load_ssbo: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - return true; - default: - return false; - } - - return false; -} - -bool -nir_lower_ssbo(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - nir_function_impl *impl = function->impl; - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (!should_lower_ssbo_instr(instr)) continue; - progress = true; - b.cursor = nir_before_instr(instr); - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - nir_ssa_def *replace = lower_ssbo_instr(&b, intr); - - if (replace) { - nir_ssa_def_rewrite_uses(&intr->dest.ssa, - replace); - } - - nir_instr_remove(instr); - } - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_subgroups.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_subgroups.c deleted file mode 100644 index 04113fd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_subgroups.c +++ /dev/null @@ -1,874 +0,0 @@ -/* - * Copyright © 2017 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../util/u_math.h" - -/** - * \file nir_opt_intrinsics.c - */ - -static nir_intrinsic_instr * -lower_subgroups_64bit_split_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, - unsigned int component) -{ - nir_ssa_def *comp; - if (component == 0) - comp = nir_unpack_64_2x32_split_x(b, intrin->src[0].ssa); - else - comp = nir_unpack_64_2x32_split_y(b, intrin->src[0].ssa); - - nir_intrinsic_instr *intr = nir_intrinsic_instr_create(b->shader, intrin->intrinsic); - nir_ssa_dest_init(&intr->instr, &intr->dest, 1, 32, NULL); - intr->const_index[0] = intrin->const_index[0]; - intr->const_index[1] = intrin->const_index[1]; - intr->src[0] = nir_src_for_ssa(comp); - if (nir_intrinsic_infos[intrin->intrinsic].num_srcs == 2) - nir_src_copy(&intr->src[1], &intrin->src[1], &intr->instr); - - intr->num_components = 1; - nir_builder_instr_insert(b, &intr->instr); - return intr; -} - -static nir_ssa_def * -lower_subgroup_op_to_32bit(nir_builder *b, nir_intrinsic_instr *intrin) -{ - assert(intrin->src[0].ssa->bit_size == 64); - nir_intrinsic_instr *intr_x = lower_subgroups_64bit_split_intrinsic(b, intrin, 0); - nir_intrinsic_instr *intr_y = lower_subgroups_64bit_split_intrinsic(b, intrin, 1); - return nir_pack_64_2x32_split(b, &intr_x->dest.ssa, &intr_y->dest.ssa); -} - -static nir_ssa_def * -ballot_type_to_uint(nir_builder *b, nir_ssa_def *value, - const nir_lower_subgroups_options *options) -{ - /* Only the new-style SPIR-V subgroup instructions take a ballot result as - * an argument, so we only use this on uvec4 types. - */ - assert(value->num_components == 4 && value->bit_size == 32); - - return nir_extract_bits(b, &value, 1, 0, options->ballot_components, - options->ballot_bit_size); -} - -static nir_ssa_def * -uint_to_ballot_type(nir_builder *b, nir_ssa_def *value, - unsigned num_components, unsigned bit_size) -{ - assert(util_is_power_of_two_nonzero(num_components)); - assert(util_is_power_of_two_nonzero(value->num_components)); - - unsigned total_bits = bit_size * num_components; - - /* If the source doesn't have enough bits, zero-pad */ - if (total_bits > value->bit_size * value->num_components) - value = nir_pad_vector_imm_int(b, value, 0, total_bits / value->bit_size); - - value = nir_bitcast_vector(b, value, bit_size); - - /* If the source has too many components, truncate. This can happen if, - * for instance, we're implementing GL_ARB_shader_ballot or - * VK_EXT_shader_subgroup_ballot which have 64-bit ballot values on an - * architecture with a native 128-bit uvec4 ballot. This comes up in Zink - * for OpenGL on Vulkan. It's the job of the driver calling this lowering - * pass to ensure that it's restricted subgroup sizes sufficiently that we - * have enough ballot bits. - */ - if (value->num_components > num_components) - value = nir_trim_vector(b, value, num_components); - - return value; -} - -static nir_ssa_def * -lower_subgroup_op_to_scalar(nir_builder *b, nir_intrinsic_instr *intrin, - bool lower_to_32bit) -{ - /* This is safe to call on scalar things but it would be silly */ - assert(intrin->dest.ssa.num_components > 1); - - nir_ssa_def *value = nir_ssa_for_src(b, intrin->src[0], - intrin->num_components); - nir_ssa_def *reads[NIR_MAX_VEC_COMPONENTS]; - - for (unsigned i = 0; i < intrin->num_components; i++) { - nir_intrinsic_instr *chan_intrin = - nir_intrinsic_instr_create(b->shader, intrin->intrinsic); - nir_ssa_dest_init(&chan_intrin->instr, &chan_intrin->dest, - 1, intrin->dest.ssa.bit_size, NULL); - chan_intrin->num_components = 1; - - /* value */ - chan_intrin->src[0] = nir_src_for_ssa(nir_channel(b, value, i)); - /* invocation */ - if (nir_intrinsic_infos[intrin->intrinsic].num_srcs > 1) { - assert(nir_intrinsic_infos[intrin->intrinsic].num_srcs == 2); - nir_src_copy(&chan_intrin->src[1], &intrin->src[1], &chan_intrin->instr); - } - - chan_intrin->const_index[0] = intrin->const_index[0]; - chan_intrin->const_index[1] = intrin->const_index[1]; - - if (lower_to_32bit && chan_intrin->src[0].ssa->bit_size == 64) { - reads[i] = lower_subgroup_op_to_32bit(b, chan_intrin); - } else { - nir_builder_instr_insert(b, &chan_intrin->instr); - reads[i] = &chan_intrin->dest.ssa; - } - } - - return nir_vec(b, reads, intrin->num_components); -} - -static nir_ssa_def * -lower_vote_eq_to_scalar(nir_builder *b, nir_intrinsic_instr *intrin) -{ - assert(intrin->src[0].is_ssa); - nir_ssa_def *value = intrin->src[0].ssa; - - nir_ssa_def *result = NULL; - for (unsigned i = 0; i < intrin->num_components; i++) { - nir_intrinsic_instr *chan_intrin = - nir_intrinsic_instr_create(b->shader, intrin->intrinsic); - nir_ssa_dest_init(&chan_intrin->instr, &chan_intrin->dest, - 1, intrin->dest.ssa.bit_size, NULL); - chan_intrin->num_components = 1; - chan_intrin->src[0] = nir_src_for_ssa(nir_channel(b, value, i)); - nir_builder_instr_insert(b, &chan_intrin->instr); - - if (result) { - result = nir_iand(b, result, &chan_intrin->dest.ssa); - } else { - result = &chan_intrin->dest.ssa; - } - } - - return result; -} - -static nir_ssa_def * -lower_vote_eq(nir_builder *b, nir_intrinsic_instr *intrin) -{ - assert(intrin->src[0].is_ssa); - nir_ssa_def *value = intrin->src[0].ssa; - - /* We have to implicitly lower to scalar */ - nir_ssa_def *all_eq = NULL; - for (unsigned i = 0; i < intrin->num_components; i++) { - nir_ssa_def *rfi = nir_read_first_invocation(b, nir_channel(b, value, i)); - - nir_ssa_def *is_eq; - if (intrin->intrinsic == nir_intrinsic_vote_feq) { - is_eq = nir_feq(b, rfi, nir_channel(b, value, i)); - } else { - is_eq = nir_ieq(b, rfi, nir_channel(b, value, i)); - } - - if (all_eq == NULL) { - all_eq = is_eq; - } else { - all_eq = nir_iand(b, all_eq, is_eq); - } - } - - return nir_vote_all(b, 1, all_eq); -} - -static nir_ssa_def * -lower_shuffle_to_swizzle(nir_builder *b, nir_intrinsic_instr *intrin, - const nir_lower_subgroups_options *options) -{ - unsigned mask = nir_src_as_uint(intrin->src[1]); - - if (mask >= 32) - return NULL; - - nir_intrinsic_instr *swizzle = nir_intrinsic_instr_create( - b->shader, nir_intrinsic_masked_swizzle_amd); - swizzle->num_components = intrin->num_components; - nir_src_copy(&swizzle->src[0], &intrin->src[0], &swizzle->instr); - nir_intrinsic_set_swizzle_mask(swizzle, (mask << 10) | 0x1f); - nir_ssa_dest_init(&swizzle->instr, &swizzle->dest, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size, NULL); - - if (options->lower_to_scalar && swizzle->num_components > 1) { - return lower_subgroup_op_to_scalar(b, swizzle, options->lower_shuffle_to_32bit); - } else if (options->lower_shuffle_to_32bit && swizzle->src[0].ssa->bit_size == 64) { - return lower_subgroup_op_to_32bit(b, swizzle); - } else { - nir_builder_instr_insert(b, &swizzle->instr); - return &swizzle->dest.ssa; - } -} - -/* Lowers "specialized" shuffles to a generic nir_intrinsic_shuffle. */ - -static nir_ssa_def * -lower_to_shuffle(nir_builder *b, nir_intrinsic_instr *intrin, - const nir_lower_subgroups_options *options) -{ - if (intrin->intrinsic == nir_intrinsic_shuffle_xor && - options->lower_shuffle_to_swizzle_amd && - nir_src_is_const(intrin->src[1])) { - nir_ssa_def *result = - lower_shuffle_to_swizzle(b, intrin, options); - if (result) - return result; - } - - nir_ssa_def *index = nir_load_subgroup_invocation(b); - bool is_shuffle = false; - switch (intrin->intrinsic) { - case nir_intrinsic_shuffle_xor: - assert(intrin->src[1].is_ssa); - index = nir_ixor(b, index, intrin->src[1].ssa); - is_shuffle = true; - break; - case nir_intrinsic_shuffle_up: - assert(intrin->src[1].is_ssa); - index = nir_isub(b, index, intrin->src[1].ssa); - is_shuffle = true; - break; - case nir_intrinsic_shuffle_down: - assert(intrin->src[1].is_ssa); - index = nir_iadd(b, index, intrin->src[1].ssa); - is_shuffle = true; - break; - case nir_intrinsic_quad_broadcast: - assert(intrin->src[1].is_ssa); - index = nir_ior(b, nir_iand(b, index, nir_imm_int(b, ~0x3)), - intrin->src[1].ssa); - break; - case nir_intrinsic_quad_swap_horizontal: - /* For Quad operations, subgroups are divided into quads where - * (invocation % 4) is the index to a square arranged as follows: - * - * +---+---+ - * | 0 | 1 | - * +---+---+ - * | 2 | 3 | - * +---+---+ - */ - index = nir_ixor(b, index, nir_imm_int(b, 0x1)); - break; - case nir_intrinsic_quad_swap_vertical: - index = nir_ixor(b, index, nir_imm_int(b, 0x2)); - break; - case nir_intrinsic_quad_swap_diagonal: - index = nir_ixor(b, index, nir_imm_int(b, 0x3)); - break; - case nir_intrinsic_rotate: { - nir_ssa_def *delta = intrin->src[1].ssa; - nir_ssa_def *local_id = nir_load_subgroup_invocation(b); - const unsigned cluster_size = nir_intrinsic_cluster_size(intrin); - - nir_ssa_def *rotation_group_mask = - cluster_size > 0 ? nir_imm_int(b, (int)(cluster_size - 1)) : - nir_iadd_imm(b, nir_load_subgroup_size(b), -1); - - index = nir_iand(b, nir_iadd(b, local_id, delta), - rotation_group_mask); - if (cluster_size > 0) { - index = nir_iadd(b, index, - nir_iand(b, local_id, nir_inot(b, rotation_group_mask))); - } - break; - } - default: - unreachable("Invalid intrinsic"); - } - - nir_intrinsic_instr *shuffle = - nir_intrinsic_instr_create(b->shader, nir_intrinsic_shuffle); - shuffle->num_components = intrin->num_components; - nir_src_copy(&shuffle->src[0], &intrin->src[0], &shuffle->instr); - shuffle->src[1] = nir_src_for_ssa(index); - nir_ssa_dest_init(&shuffle->instr, &shuffle->dest, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size, NULL); - - bool lower_to_32bit = options->lower_shuffle_to_32bit && is_shuffle; - if (options->lower_to_scalar && shuffle->num_components > 1) { - return lower_subgroup_op_to_scalar(b, shuffle, lower_to_32bit); - } else if (lower_to_32bit && shuffle->src[0].ssa->bit_size == 64) { - return lower_subgroup_op_to_32bit(b, shuffle); - } else { - nir_builder_instr_insert(b, &shuffle->instr); - return &shuffle->dest.ssa; - } -} - -static const struct glsl_type * -glsl_type_for_ssa(nir_ssa_def *def) -{ - const struct glsl_type *comp_type = def->bit_size == 1 ? glsl_bool_type() : - glsl_uintN_t_type(def->bit_size); - return glsl_replace_vector_type(comp_type, def->num_components); -} - -/* Lower nir_intrinsic_shuffle to a waterfall loop + nir_read_invocation. - */ -static nir_ssa_def * -lower_shuffle(nir_builder *b, nir_intrinsic_instr *intrin) -{ - assert(intrin->src[0].is_ssa); - assert(intrin->src[1].is_ssa); - nir_ssa_def *val = intrin->src[0].ssa; - nir_ssa_def *id = intrin->src[1].ssa; - - /* The loop is something like: - * - * while (true) { - * first_id = readFirstInvocation(gl_SubgroupInvocationID); - * first_val = readFirstInvocation(val); - * first_result = readInvocation(val, readFirstInvocation(id)); - * if (id == first_id) - * result = first_val; - * if (elect()) { - * if (id > gl_SubgroupInvocationID) { - * result = first_result; - * } - * break; - * } - * } - * - * The idea is to guarantee, on each iteration of the loop, that anything - * reading from first_id gets the correct value, so that we can then kill - * it off by breaking out of the loop. Before doing that we also have to - * ensure that first_id invocation gets the correct value. It only won't be - * assigned the correct value already if the invocation it's reading from - * isn't already killed off, that is, if it's later than its own ID. - * Invocations where id <= gl_SubgroupInvocationID will be assigned their - * result in the first if, and invocations where id > - * gl_SubgroupInvocationID will be assigned their result in the second if. - * - * We do this more complicated loop rather than looping over all id's - * explicitly because at this point we don't know the "actual" subgroup - * size and at the moment there's no way to get at it, which means we may - * loop over always-inactive invocations. - */ - - nir_ssa_def *subgroup_id = nir_load_subgroup_invocation(b); - - nir_variable *result = - nir_local_variable_create(b->impl, glsl_type_for_ssa(val), "result"); - - nir_loop *loop = nir_push_loop(b); { - nir_ssa_def *first_id = nir_read_first_invocation(b, subgroup_id); - nir_ssa_def *first_val = nir_read_first_invocation(b, val); - nir_ssa_def *first_result = - nir_read_invocation(b, val, nir_read_first_invocation(b, id)); - - nir_if *nif = nir_push_if(b, nir_ieq(b, id, first_id)); { - nir_store_var(b, result, first_val, BITFIELD_MASK(val->num_components)); - } nir_pop_if(b, nif); - - nir_if *nif2 = nir_push_if(b, nir_elect(b, 1)); { - nir_if *nif3 = nir_push_if(b, nir_ult(b, subgroup_id, id)); { - nir_store_var(b, result, first_result, BITFIELD_MASK(val->num_components)); - } nir_pop_if(b, nif3); - - nir_jump(b, nir_jump_break); - } nir_pop_if(b, nif2); - } nir_pop_loop(b, loop); - - return nir_load_var(b, result); -} - -static bool -lower_subgroups_filter(const nir_instr *instr, const void *_options) -{ - return instr->type == nir_instr_type_intrinsic; -} - -/* Return a ballot-mask-sized value which represents "val" sign-extended and - * then shifted left by "shift". Only particular values for "val" are - * supported, see below. - */ -static nir_ssa_def * -build_ballot_imm_ishl(nir_builder *b, int64_t val, nir_ssa_def *shift, - const nir_lower_subgroups_options *options) -{ - /* This only works if all the high bits are the same as bit 1. */ - assert((val >> 2) == (val & 0x2 ? -1 : 0)); - - /* First compute the result assuming one ballot component. */ - nir_ssa_def *result = - nir_ishl(b, nir_imm_intN_t(b, val, options->ballot_bit_size), shift); - - if (options->ballot_components == 1) - return result; - - /* Fix up the result when there is > 1 component. The idea is that nir_ishl - * masks out the high bits of the shift value already, so in case there's - * more than one component the component which 1 would be shifted into - * already has the right value and all we have to do is fixup the other - * components. Components below it should always be 0, and components above - * it must be either 0 or ~0 because of the assert above. For example, if - * the target ballot size is 2 x uint32, and we're shifting 1 by 33, then - * we'll feed 33 into ishl, which will mask it off to get 1, so we'll - * compute a single-component result of 2, which is correct for the second - * component, but the first component needs to be 0, which we get by - * comparing the high bits of the shift with 0 and selecting the original - * answer or 0 for the first component (and something similar with the - * second component). This idea is generalized here for any component count - */ - nir_const_value min_shift[4]; - for (unsigned i = 0; i < options->ballot_components; i++) - min_shift[i] = nir_const_value_for_int(i * options->ballot_bit_size, 32); - nir_ssa_def *min_shift_val = nir_build_imm(b, options->ballot_components, 32, min_shift); - - nir_const_value max_shift[4]; - for (unsigned i = 0; i < options->ballot_components; i++) - max_shift[i] = nir_const_value_for_int((i + 1) * options->ballot_bit_size, 32); - nir_ssa_def *max_shift_val = nir_build_imm(b, options->ballot_components, 32, max_shift); - - return nir_bcsel(b, nir_ult(b, shift, max_shift_val), - nir_bcsel(b, nir_ult(b, shift, min_shift_val), - nir_imm_intN_t(b, val >> 63, result->bit_size), - result), - nir_imm_intN_t(b, 0, result->bit_size)); -} - -static nir_ssa_def * -build_subgroup_eq_mask(nir_builder *b, - const nir_lower_subgroups_options *options) -{ - nir_ssa_def *subgroup_idx = nir_load_subgroup_invocation(b); - - return build_ballot_imm_ishl(b, 1, subgroup_idx, options); -} - -static nir_ssa_def * -build_subgroup_ge_mask(nir_builder *b, - const nir_lower_subgroups_options *options) -{ - nir_ssa_def *subgroup_idx = nir_load_subgroup_invocation(b); - - return build_ballot_imm_ishl(b, ~0ull, subgroup_idx, options); -} - -static nir_ssa_def * -build_subgroup_gt_mask(nir_builder *b, - const nir_lower_subgroups_options *options) -{ - nir_ssa_def *subgroup_idx = nir_load_subgroup_invocation(b); - - return build_ballot_imm_ishl(b, ~1ull, subgroup_idx, options); -} - -/* Return a mask which is 1 for threads up to the run-time subgroup size, i.e. - * 1 for the entire subgroup. SPIR-V requires us to return 0 for indices at or - * above the subgroup size for the masks, but gt_mask and ge_mask make them 1 - * so we have to "and" with this mask. - */ -static nir_ssa_def * -build_subgroup_mask(nir_builder *b, - const nir_lower_subgroups_options *options) -{ - nir_ssa_def *subgroup_size = nir_load_subgroup_size(b); - - /* First compute the result assuming one ballot component. */ - nir_ssa_def *result = - nir_ushr(b, nir_imm_intN_t(b, ~0ull, options->ballot_bit_size), - nir_isub_imm(b, options->ballot_bit_size, - subgroup_size)); - - /* Since the subgroup size and ballot bitsize are both powers of two, there - * are two possible cases to consider: - * - * (1) The subgroup size is less than the ballot bitsize. We need to return - * "result" in the first component and 0 in every other component. - * (2) The subgroup size is a multiple of the ballot bitsize. We need to - * return ~0 if the subgroup size divided by the ballot bitsize is less - * than or equal to the index in the vector and 0 otherwise. For example, - * with a target ballot type of 4 x uint32 and subgroup_size = 64 we'd need - * to return { ~0, ~0, 0, 0 }. - * - * In case (2) it turns out that "result" will be ~0, because - * "ballot_bit_size - subgroup_size" is also a multiple of - * "ballot_bit_size" and since nir_ushr masks the shift value it will - * shifted by 0. This means that the first component can just be "result" - * in all cases. The other components will also get the correct value in - * case (1) if we just use the rule in case (2), so we'll get the correct - * result if we just follow (2) and then replace the first component with - * "result". - */ - nir_const_value min_idx[4]; - for (unsigned i = 0; i < options->ballot_components; i++) - min_idx[i] = nir_const_value_for_int(i * options->ballot_bit_size, 32); - nir_ssa_def *min_idx_val = nir_build_imm(b, options->ballot_components, 32, min_idx); - - nir_ssa_def *result_extended = - nir_pad_vector_imm_int(b, result, ~0ull, options->ballot_components); - - return nir_bcsel(b, nir_ult(b, min_idx_val, subgroup_size), - result_extended, nir_imm_intN_t(b, 0, options->ballot_bit_size)); -} - -static nir_ssa_def * -vec_bit_count(nir_builder *b, nir_ssa_def *value) -{ - nir_ssa_def *vec_result = nir_bit_count(b, value); - nir_ssa_def *result = nir_channel(b, vec_result, 0); - for (unsigned i = 1; i < value->num_components; i++) - result = nir_iadd(b, result, nir_channel(b, vec_result, i)); - return result; -} - -static nir_ssa_def * -vec_find_lsb(nir_builder *b, nir_ssa_def *value) -{ - nir_ssa_def *vec_result = nir_find_lsb(b, value); - nir_ssa_def *result = nir_imm_int(b, -1); - for (int i = value->num_components - 1; i >= 0; i--) { - nir_ssa_def *channel = nir_channel(b, vec_result, i); - /* result = channel >= 0 ? (i * bitsize + channel) : result */ - result = nir_bcsel(b, nir_ige(b, channel, nir_imm_int(b, 0)), - nir_iadd_imm(b, channel, i * value->bit_size), - result); - } - return result; -} - -static nir_ssa_def * -vec_find_msb(nir_builder *b, nir_ssa_def *value) -{ - nir_ssa_def *vec_result = nir_ufind_msb(b, value); - nir_ssa_def *result = nir_imm_int(b, -1); - for (unsigned i = 0; i < value->num_components; i++) { - nir_ssa_def *channel = nir_channel(b, vec_result, i); - /* result = channel >= 0 ? (i * bitsize + channel) : result */ - result = nir_bcsel(b, nir_ige(b, channel, nir_imm_int(b, 0)), - nir_iadd_imm(b, channel, i * value->bit_size), - result); - } - return result; -} - -static nir_ssa_def * -lower_dynamic_quad_broadcast(nir_builder *b, nir_intrinsic_instr *intrin, - const nir_lower_subgroups_options *options) -{ - if (!options->lower_quad_broadcast_dynamic_to_const) - return lower_to_shuffle(b, intrin, options); - - nir_ssa_def *dst = NULL; - - for (unsigned i = 0; i < 4; ++i) { - nir_intrinsic_instr *qbcst = - nir_intrinsic_instr_create(b->shader, nir_intrinsic_quad_broadcast); - - qbcst->num_components = intrin->num_components; - qbcst->src[1] = nir_src_for_ssa(nir_imm_int(b, i)); - nir_src_copy(&qbcst->src[0], &intrin->src[0], &qbcst->instr); - nir_ssa_dest_init(&qbcst->instr, &qbcst->dest, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size, NULL); - - nir_ssa_def *qbcst_dst = NULL; - - if (options->lower_to_scalar && qbcst->num_components > 1) { - qbcst_dst = lower_subgroup_op_to_scalar(b, qbcst, false); - } else { - nir_builder_instr_insert(b, &qbcst->instr); - qbcst_dst = &qbcst->dest.ssa; - } - - if (i) - dst = nir_bcsel(b, nir_ieq(b, intrin->src[1].ssa, - nir_src_for_ssa(nir_imm_int(b, i)).ssa), - qbcst_dst, dst); - else - dst = qbcst_dst; - } - - return dst; -} - -static nir_ssa_def * -lower_read_invocation_to_cond(nir_builder *b, nir_intrinsic_instr *intrin) -{ - return nir_read_invocation_cond_ir3(b, intrin->dest.ssa.bit_size, - intrin->src[0].ssa, - nir_ieq(b, intrin->src[1].ssa, - nir_load_subgroup_invocation(b))); -} - -static nir_ssa_def * -lower_subgroups_instr(nir_builder *b, nir_instr *instr, void *_options) -{ - const nir_lower_subgroups_options *options = _options; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_vote_any: - case nir_intrinsic_vote_all: - if (options->lower_vote_trivial) - return nir_ssa_for_src(b, intrin->src[0], 1); - break; - - case nir_intrinsic_vote_feq: - case nir_intrinsic_vote_ieq: - if (options->lower_vote_trivial) - return nir_imm_true(b); - - if (options->lower_vote_eq) - return lower_vote_eq(b, intrin); - - if (options->lower_to_scalar && intrin->num_components > 1) - return lower_vote_eq_to_scalar(b, intrin); - break; - - case nir_intrinsic_load_subgroup_size: - if (options->subgroup_size) - return nir_imm_int(b, options->subgroup_size); - break; - - case nir_intrinsic_read_invocation: - if (options->lower_to_scalar && intrin->num_components > 1) - return lower_subgroup_op_to_scalar(b, intrin, false); - - if (options->lower_read_invocation_to_cond) - return lower_read_invocation_to_cond(b, intrin); - - break; - - case nir_intrinsic_read_first_invocation: - if (options->lower_to_scalar && intrin->num_components > 1) - return lower_subgroup_op_to_scalar(b, intrin, false); - break; - - case nir_intrinsic_load_subgroup_eq_mask: - case nir_intrinsic_load_subgroup_ge_mask: - case nir_intrinsic_load_subgroup_gt_mask: - case nir_intrinsic_load_subgroup_le_mask: - case nir_intrinsic_load_subgroup_lt_mask: { - if (!options->lower_subgroup_masks) - return NULL; - - nir_ssa_def *val; - switch (intrin->intrinsic) { - case nir_intrinsic_load_subgroup_eq_mask: - val = build_subgroup_eq_mask(b, options); - break; - case nir_intrinsic_load_subgroup_ge_mask: - val = nir_iand(b, build_subgroup_ge_mask(b, options), - build_subgroup_mask(b, options)); - break; - case nir_intrinsic_load_subgroup_gt_mask: - val = nir_iand(b, build_subgroup_gt_mask(b, options), - build_subgroup_mask(b, options)); - break; - case nir_intrinsic_load_subgroup_le_mask: - val = nir_inot(b, build_subgroup_gt_mask(b, options)); - break; - case nir_intrinsic_load_subgroup_lt_mask: - val = nir_inot(b, build_subgroup_ge_mask(b, options)); - break; - default: - unreachable("you seriously can't tell this is unreachable?"); - } - - return uint_to_ballot_type(b, val, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - } - - case nir_intrinsic_ballot: { - if (intrin->dest.ssa.num_components == options->ballot_components && - intrin->dest.ssa.bit_size == options->ballot_bit_size) - return NULL; - - nir_ssa_def *ballot = - nir_ballot(b, options->ballot_components, options->ballot_bit_size, - intrin->src[0].ssa); - - return uint_to_ballot_type(b, ballot, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - } - - case nir_intrinsic_ballot_bitfield_extract: - case nir_intrinsic_ballot_bit_count_reduce: - case nir_intrinsic_ballot_find_lsb: - case nir_intrinsic_ballot_find_msb: { - assert(intrin->src[0].is_ssa); - nir_ssa_def *int_val = ballot_type_to_uint(b, intrin->src[0].ssa, - options); - - if (intrin->intrinsic != nir_intrinsic_ballot_bitfield_extract && - intrin->intrinsic != nir_intrinsic_ballot_find_lsb) { - /* For OpGroupNonUniformBallotFindMSB, the SPIR-V Spec says: - * - * "Find the most significant bit set to 1 in Value, considering - * only the bits in Value required to represent all bits of the - * group’s invocations. If none of the considered bits is set to - * 1, the result is undefined." - * - * It has similar text for the other three. This means that, in case - * the subgroup size is less than 32, we have to mask off the unused - * bits. If the subgroup size is fixed and greater than or equal to - * 32, the mask will be 0xffffffff and nir_opt_algebraic will delete - * the iand. - * - * We only have to worry about this for BitCount and FindMSB because - * FindLSB counts from the bottom and BitfieldExtract selects - * individual bits. In either case, if run outside the range of - * valid bits, we hit the undefined results case and we can return - * anything we want. - */ - int_val = nir_iand(b, int_val, build_subgroup_mask(b, options)); - } - - switch (intrin->intrinsic) { - case nir_intrinsic_ballot_bitfield_extract: { - assert(intrin->src[1].is_ssa); - nir_ssa_def *idx = intrin->src[1].ssa; - if (int_val->num_components > 1) { - /* idx will be truncated by nir_ushr, so we just need to select - * the right component using the bits of idx that are truncated in - * the shift. - */ - int_val = - nir_vector_extract(b, int_val, - nir_udiv_imm(b, idx, int_val->bit_size)); - } - - return nir_test_mask(b, nir_ushr(b, int_val, idx), 1); - } - case nir_intrinsic_ballot_bit_count_reduce: - return vec_bit_count(b, int_val); - case nir_intrinsic_ballot_find_lsb: - return vec_find_lsb(b, int_val); - case nir_intrinsic_ballot_find_msb: - return vec_find_msb(b, int_val); - default: - unreachable("you seriously can't tell this is unreachable?"); - } - } - - case nir_intrinsic_ballot_bit_count_exclusive: - case nir_intrinsic_ballot_bit_count_inclusive: { - nir_ssa_def *mask; - if (intrin->intrinsic == nir_intrinsic_ballot_bit_count_inclusive) { - mask = nir_inot(b, build_subgroup_gt_mask(b, options)); - } else { - mask = nir_inot(b, build_subgroup_ge_mask(b, options)); - } - - assert(intrin->src[0].is_ssa); - nir_ssa_def *int_val = ballot_type_to_uint(b, intrin->src[0].ssa, - options); - - return vec_bit_count(b, nir_iand(b, int_val, mask)); - } - - case nir_intrinsic_elect: { - if (!options->lower_elect) - return NULL; - - return nir_ieq(b, nir_load_subgroup_invocation(b), nir_first_invocation(b)); - } - - case nir_intrinsic_shuffle: - if (options->lower_shuffle) - return lower_shuffle(b, intrin); - else if (options->lower_to_scalar && intrin->num_components > 1) - return lower_subgroup_op_to_scalar(b, intrin, options->lower_shuffle_to_32bit); - else if (options->lower_shuffle_to_32bit && intrin->src[0].ssa->bit_size == 64) - return lower_subgroup_op_to_32bit(b, intrin); - break; - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - if (options->lower_relative_shuffle) - return lower_to_shuffle(b, intrin, options); - else if (options->lower_to_scalar && intrin->num_components > 1) - return lower_subgroup_op_to_scalar(b, intrin, options->lower_shuffle_to_32bit); - else if (options->lower_shuffle_to_32bit && intrin->src[0].ssa->bit_size == 64) - return lower_subgroup_op_to_32bit(b, intrin); - break; - - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - if (options->lower_quad || - (options->lower_quad_broadcast_dynamic && - intrin->intrinsic == nir_intrinsic_quad_broadcast && - !nir_src_is_const(intrin->src[1]))) - return lower_dynamic_quad_broadcast(b, intrin, options); - else if (options->lower_to_scalar && intrin->num_components > 1) - return lower_subgroup_op_to_scalar(b, intrin, false); - break; - - case nir_intrinsic_reduce: { - nir_ssa_def *ret = NULL; - /* A cluster size greater than the subgroup size is implemention defined */ - if (options->subgroup_size && - nir_intrinsic_cluster_size(intrin) >= options->subgroup_size) { - nir_intrinsic_set_cluster_size(intrin, 0); - ret = NIR_LOWER_INSTR_PROGRESS; - } - if (options->lower_to_scalar && intrin->num_components > 1) - ret = lower_subgroup_op_to_scalar(b, intrin, false); - return ret; - } - case nir_intrinsic_inclusive_scan: - case nir_intrinsic_exclusive_scan: - if (options->lower_to_scalar && intrin->num_components > 1) - return lower_subgroup_op_to_scalar(b, intrin, false); - break; - - case nir_intrinsic_rotate: - if (nir_intrinsic_execution_scope(intrin) == NIR_SCOPE_SUBGROUP) { - if (options->lower_rotate_to_shuffle) - return lower_to_shuffle(b, intrin, options); - else if (options->lower_to_scalar && intrin->num_components > 1) - return lower_subgroup_op_to_scalar(b, intrin, options->lower_shuffle_to_32bit); - else if (options->lower_shuffle_to_32bit && intrin->src[0].ssa->bit_size == 64) - return lower_subgroup_op_to_32bit(b, intrin); - } - break; - - default: - break; - } - - return NULL; -} - -bool -nir_lower_subgroups(nir_shader *shader, - const nir_lower_subgroups_options *options) -{ - return nir_shader_lower_instructions(shader, - lower_subgroups_filter, - lower_subgroups_instr, - (void *)options); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_system_values.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_system_values.c deleted file mode 100644 index 15dc32f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_system_values.c +++ /dev/null @@ -1,639 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../util/u_math.h" -#include "../../util/set.h" - -struct lower_sysval_state { - const nir_lower_compute_system_values_options *options; - - /* List of intrinsics that have already been lowered and shouldn't be - * lowered again. - */ - struct set *lower_once_list; -}; - -static nir_ssa_def * -sanitize_32bit_sysval(nir_builder *b, nir_intrinsic_instr *intrin) -{ - assert(intrin->dest.is_ssa); - const unsigned bit_size = intrin->dest.ssa.bit_size; - if (bit_size == 32) - return NULL; - - intrin->dest.ssa.bit_size = 32; - return nir_u2uN(b, &intrin->dest.ssa, bit_size); -} - -static nir_ssa_def* -build_global_group_size(nir_builder *b, unsigned bit_size) -{ - nir_ssa_def *group_size = nir_load_workgroup_size(b); - nir_ssa_def *num_workgroups = nir_load_num_workgroups(b, bit_size); - return nir_imul(b, nir_u2uN(b, group_size, bit_size), - num_workgroups); -} - -static bool -lower_system_value_filter(const nir_instr *instr, const void *_state) -{ - return instr->type == nir_instr_type_intrinsic; -} - -static nir_ssa_def * -lower_system_value_instr(nir_builder *b, nir_instr *instr, void *_state) -{ - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - /* All the intrinsics we care about are loads */ - if (!nir_intrinsic_infos[intrin->intrinsic].has_dest) - return NULL; - - assert(intrin->dest.is_ssa); - const unsigned bit_size = intrin->dest.ssa.bit_size; - - switch (intrin->intrinsic) { - case nir_intrinsic_load_vertex_id: - if (b->shader->options->vertex_id_zero_based) { - return nir_iadd(b, nir_load_vertex_id_zero_base(b), - nir_load_first_vertex(b)); - } else { - return NULL; - } - - case nir_intrinsic_load_base_vertex: - /** - * From the OpenGL 4.6 (11.1.3.9 Shader Inputs) specification: - * - * "gl_BaseVertex holds the integer value passed to the baseVertex - * parameter to the command that resulted in the current shader - * invocation. In the case where the command has no baseVertex - * parameter, the value of gl_BaseVertex is zero." - */ - if (b->shader->options->lower_base_vertex) { - return nir_iand(b, nir_load_is_indexed_draw(b), - nir_load_first_vertex(b)); - } else { - return NULL; - } - - case nir_intrinsic_load_helper_invocation: - if (b->shader->options->lower_helper_invocation) { - return nir_build_lowered_load_helper_invocation(b); - } else { - return NULL; - } - - case nir_intrinsic_load_local_invocation_id: - case nir_intrinsic_load_local_invocation_index: - case nir_intrinsic_load_workgroup_size: - return sanitize_32bit_sysval(b, intrin); - - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_system_value)) - return NULL; - - nir_ssa_def *column = NULL; - if (deref->deref_type != nir_deref_type_var) { - /* The only one system values that aren't plane variables are - * gl_SampleMask which is always an array of one element and a - * couple of ray-tracing intrinsics which are matrices. - */ - assert(deref->deref_type == nir_deref_type_array); - assert(deref->arr.index.is_ssa); - column = deref->arr.index.ssa; - nir_deref_instr *arr_deref = deref; - deref = nir_deref_instr_parent(deref); - assert(deref->deref_type == nir_deref_type_var); - - switch (deref->var->data.location) { - case SYSTEM_VALUE_TESS_LEVEL_INNER: - case SYSTEM_VALUE_TESS_LEVEL_OUTER: { - nir_ssa_def *index = nir_ssa_for_src(b, arr_deref->arr.index, 1); - nir_ssa_def *sysval = (deref->var->data.location == - SYSTEM_VALUE_TESS_LEVEL_INNER) - ? nir_load_tess_level_inner(b) - : nir_load_tess_level_outer(b); - return nir_vector_extract(b, sysval, index); - } - - case SYSTEM_VALUE_SAMPLE_MASK_IN: - case SYSTEM_VALUE_RAY_OBJECT_TO_WORLD: - case SYSTEM_VALUE_RAY_WORLD_TO_OBJECT: - case SYSTEM_VALUE_MESH_VIEW_INDICES: - /* These are all single-element arrays in our implementation, and - * the sysval load below just drops the 0 array index. - */ - break; - - default: - unreachable("unsupported system value array deref"); - } - } - nir_variable *var = deref->var; - - switch (var->data.location) { - case SYSTEM_VALUE_INSTANCE_INDEX: - return nir_iadd(b, nir_load_instance_id(b), - nir_load_base_instance(b)); - - case SYSTEM_VALUE_SUBGROUP_EQ_MASK: - case SYSTEM_VALUE_SUBGROUP_GE_MASK: - case SYSTEM_VALUE_SUBGROUP_GT_MASK: - case SYSTEM_VALUE_SUBGROUP_LE_MASK: - case SYSTEM_VALUE_SUBGROUP_LT_MASK: { - nir_intrinsic_op op = - nir_intrinsic_from_system_value(var->data.location); - nir_intrinsic_instr *load = nir_intrinsic_instr_create(b->shader, op); - nir_ssa_dest_init_for_type(&load->instr, &load->dest, - var->type, NULL); - load->num_components = load->dest.ssa.num_components; - nir_builder_instr_insert(b, &load->instr); - return &load->dest.ssa; - } - - case SYSTEM_VALUE_DEVICE_INDEX: - if (b->shader->options->lower_device_index_to_zero) - return nir_imm_int(b, 0); - break; - - case SYSTEM_VALUE_GLOBAL_GROUP_SIZE: - return build_global_group_size(b, bit_size); - - case SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL: - return nir_load_barycentric(b, nir_intrinsic_load_barycentric_pixel, - INTERP_MODE_NOPERSPECTIVE); - - case SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID: - return nir_load_barycentric(b, nir_intrinsic_load_barycentric_centroid, - INTERP_MODE_NOPERSPECTIVE); - - case SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE: - return nir_load_barycentric(b, nir_intrinsic_load_barycentric_sample, - INTERP_MODE_NOPERSPECTIVE); - - case SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL: - return nir_load_barycentric(b, nir_intrinsic_load_barycentric_pixel, - INTERP_MODE_SMOOTH); - - case SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID: - return nir_load_barycentric(b, nir_intrinsic_load_barycentric_centroid, - INTERP_MODE_SMOOTH); - - case SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE: - return nir_load_barycentric(b, nir_intrinsic_load_barycentric_sample, - INTERP_MODE_SMOOTH); - - case SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL: - return nir_load_barycentric(b, nir_intrinsic_load_barycentric_model, - INTERP_MODE_NONE); - - case SYSTEM_VALUE_HELPER_INVOCATION: { - /* When demote operation is used, reading the HelperInvocation - * needs to use Volatile memory access semantics to provide the - * correct (dynamic) value. See OpDemoteToHelperInvocation. - */ - if (nir_intrinsic_access(intrin) & ACCESS_VOLATILE) - return nir_is_helper_invocation(b, 1); - break; - } - - case SYSTEM_VALUE_MESH_VIEW_INDICES: - return nir_load_mesh_view_indices(b, intrin->dest.ssa.num_components, - bit_size, column, .base = 0, - .range = intrin->dest.ssa.num_components * bit_size / 8); - - default: - break; - } - - nir_intrinsic_op sysval_op = - nir_intrinsic_from_system_value(var->data.location); - if (glsl_type_is_matrix(var->type)) { - assert(nir_intrinsic_infos[sysval_op].index_map[NIR_INTRINSIC_COLUMN] > 0); - unsigned num_cols = glsl_get_matrix_columns(var->type); - ASSERTED unsigned num_rows = glsl_get_vector_elements(var->type); - assert(num_rows == intrin->dest.ssa.num_components); - - nir_ssa_def *cols[4]; - for (unsigned i = 0; i < num_cols; i++) { - cols[i] = nir_load_system_value(b, sysval_op, i, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - assert(cols[i]->num_components == num_rows); - } - return nir_select_from_ssa_def_array(b, cols, num_cols, column); - } else { - return nir_load_system_value(b, sysval_op, 0, - intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - } - } - - default: - return NULL; - } -} - -nir_ssa_def * -nir_build_lowered_load_helper_invocation(nir_builder *b) -{ - nir_ssa_def *tmp; - tmp = nir_ishl(b, nir_imm_int(b, 1), - nir_load_sample_id_no_per_sample(b)); - tmp = nir_iand(b, nir_load_sample_mask_in(b), tmp); - return nir_inot(b, nir_i2b(b, tmp)); -} - -bool -nir_lower_system_values(nir_shader *shader) -{ - bool progress = nir_shader_lower_instructions(shader, - lower_system_value_filter, - lower_system_value_instr, - NULL); - - /* We're going to delete the variables so we need to clean up all those - * derefs we left lying around. - */ - if (progress) - nir_remove_dead_derefs(shader); - - nir_foreach_variable_with_modes_safe(var, shader, nir_var_system_value) - exec_node_remove(&var->node); - - return progress; -} - -static nir_ssa_def * -lower_id_to_index_no_umod(nir_builder *b, nir_ssa_def *index, - nir_ssa_def *size, unsigned bit_size) -{ - /* We lower ID to Index with the following formula: - * - * id.z = index / (size.x * size.y) - * id.y = (index - (id.z * (size.x * size.y))) / size.x - * id.x = index - ((id.z * (size.x * size.y)) + (id.y * size.x)) - * - * This is more efficient on HW that doesn't have a - * modulo division instruction and when the size is either - * not compile time known or not a power of two. - */ - - nir_ssa_def *size_x = nir_channel(b, size, 0); - nir_ssa_def *size_y = nir_channel(b, size, 1); - nir_ssa_def *size_x_y = nir_imul(b, size_x, size_y); - - nir_ssa_def *id_z = nir_udiv(b, index, size_x_y); - nir_ssa_def *z_portion = nir_imul(b, id_z, size_x_y); - nir_ssa_def *id_y = nir_udiv(b, nir_isub(b, index, z_portion), size_x); - nir_ssa_def *y_portion = nir_imul(b, id_y, size_x); - nir_ssa_def *id_x = nir_isub(b, index, nir_iadd(b, z_portion, y_portion)); - - return nir_u2uN(b, nir_vec3(b, id_x, id_y, id_z), bit_size); -} - - -static nir_ssa_def * -lower_id_to_index(nir_builder *b, nir_ssa_def *index, nir_ssa_def *size, - unsigned bit_size) -{ - /* We lower gl_LocalInvocationID to gl_LocalInvocationIndex based - * on this formula: - * - * id.x = index % size.x; - * id.y = (index / size.x) % gl_WorkGroupSize.y; - * id.z = (index / (size.x * size.y)) % size.z; - * - * However, the final % size.z does nothing unless we - * accidentally end up with an index that is too - * large so it can safely be omitted. - * - * Because no hardware supports a local workgroup size greater than - * about 1K, this calculation can be done in 32-bit and can save some - * 64-bit arithmetic. - */ - - nir_ssa_def *size_x = nir_channel(b, size, 0); - nir_ssa_def *size_y = nir_channel(b, size, 1); - - nir_ssa_def *id_x = nir_umod(b, index, size_x); - nir_ssa_def *id_y = nir_umod(b, nir_udiv(b, index, size_x), size_y); - nir_ssa_def *id_z = nir_udiv(b, index, nir_imul(b, size_x, size_y)); - - return nir_u2uN(b, nir_vec3(b, id_x, id_y, id_z), bit_size); -} - -static bool -lower_compute_system_value_filter(const nir_instr *instr, const void *_state) -{ - return instr->type == nir_instr_type_intrinsic; -} - -static nir_ssa_def * -lower_compute_system_value_instr(nir_builder *b, - nir_instr *instr, void *_state) -{ - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - struct lower_sysval_state *state = (struct lower_sysval_state *)_state; - const nir_lower_compute_system_values_options *options = state->options; - - /* All the intrinsics we care about are loads */ - if (!nir_intrinsic_infos[intrin->intrinsic].has_dest) - return NULL; - - assert(intrin->dest.is_ssa); - const unsigned bit_size = intrin->dest.ssa.bit_size; - - switch (intrin->intrinsic) { - case nir_intrinsic_load_local_invocation_id: - /* If lower_cs_local_id_to_index is true, then we replace - * local_invocation_id with a formula based on local_invocation_index. - */ - if (b->shader->options->lower_cs_local_id_to_index || - (options && options->lower_cs_local_id_to_index)) { - nir_ssa_def *local_index = nir_load_local_invocation_index(b); - - if (!b->shader->info.workgroup_size_variable) { - /* Shortcut for 1 dimensional workgroups: - * Use local_invocation_index directly, which is better than - * lower_id_to_index + constant folding, because - * this way we don't leave behind extra ALU instrs. - */ - - /* size_x = 1, size_y = 1, therefore Z = local index */ - if (b->shader->info.workgroup_size[0] == 1 && - b->shader->info.workgroup_size[1] == 1) - return nir_vec3(b, nir_imm_int(b, 0), nir_imm_int(b, 0), local_index); - - /* size_x = 1, size_z = 1, therefore Y = local index */ - if (b->shader->info.workgroup_size[0] == 1 && - b->shader->info.workgroup_size[2] == 1) - return nir_vec3(b, nir_imm_int(b, 0), local_index, nir_imm_int(b, 0)); - - /* size_y = 1, size_z = 1, therefore X = local index */ - if (b->shader->info.workgroup_size[1] == 1 && - b->shader->info.workgroup_size[2] == 1) - return nir_vec3(b, local_index, nir_imm_int(b, 0), nir_imm_int(b, 0)); - } - - nir_ssa_def *local_size = nir_load_workgroup_size(b); - return lower_id_to_index(b, local_index, local_size, bit_size); - } - if (options && options->shuffle_local_ids_for_quad_derivatives && - b->shader->info.cs.derivative_group == DERIVATIVE_GROUP_QUADS && - _mesa_set_search(state->lower_once_list, instr) == NULL) { - nir_ssa_def *ids = nir_load_local_invocation_id(b); - _mesa_set_add(state->lower_once_list, ids->parent_instr); - - nir_ssa_def *x = nir_channel(b, ids, 0); - nir_ssa_def *y = nir_channel(b, ids, 1); - nir_ssa_def *z = nir_channel(b, ids, 2); - unsigned size_x = b->shader->info.workgroup_size[0]; - nir_ssa_def *size_x_imm; - - if (b->shader->info.workgroup_size_variable) - size_x_imm = nir_channel(b, nir_load_workgroup_size(b), 0); - else - size_x_imm = nir_imm_int(b, size_x); - - /* Remap indices from: - * | 0| 1| 2| 3| - * | 4| 5| 6| 7| - * | 8| 9|10|11| - * |12|13|14|15| - * to: - * | 0| 1| 4| 5| - * | 2| 3| 6| 7| - * | 8| 9|12|13| - * |10|11|14|15| - * - * That's the layout required by AMD hardware for derivatives to - * work. Other hardware may work differently. - * - * It's a classic tiling pattern that can be implemented by inserting - * bit y[0] between bits x[0] and x[1] like this: - * - * x[0],y[0],x[1],...x[last],y[1],...,y[last] - * - * If the width is a power of two, use: - * i = ((x & 1) | ((y & 1) << 1) | ((x & ~1) << 1)) | ((y & ~1) << logbase2(size_x)) - * - * If the width is not a power of two or the local size is variable, use: - * i = ((x & 1) | ((y & 1) << 1) | ((x & ~1) << 1)) + ((y & ~1) * size_x) - * - * GL_NV_compute_shader_derivatives requires that the width and height - * are a multiple of two, which is also a requirement for the second - * expression to work. - * - * The 2D result is: (x,y) = (i % w, i / w) - */ - - nir_ssa_def *one = nir_imm_int(b, 1); - nir_ssa_def *inv_one = nir_imm_int(b, ~1); - nir_ssa_def *x_bit0 = nir_iand(b, x, one); - nir_ssa_def *y_bit0 = nir_iand(b, y, one); - nir_ssa_def *x_bits_1n = nir_iand(b, x, inv_one); - nir_ssa_def *y_bits_1n = nir_iand(b, y, inv_one); - nir_ssa_def *bits_01 = nir_ior(b, x_bit0, nir_ishl(b, y_bit0, one)); - nir_ssa_def *bits_01x = nir_ior(b, bits_01, - nir_ishl(b, x_bits_1n, one)); - nir_ssa_def *i; - - if (!b->shader->info.workgroup_size_variable && - util_is_power_of_two_nonzero(size_x)) { - nir_ssa_def *log2_size_x = nir_imm_int(b, util_logbase2(size_x)); - i = nir_ior(b, bits_01x, nir_ishl(b, y_bits_1n, log2_size_x)); - } else { - i = nir_iadd(b, bits_01x, nir_imul(b, y_bits_1n, size_x_imm)); - } - - /* This should be fast if size_x is an immediate or even a power - * of two. - */ - x = nir_umod(b, i, size_x_imm); - y = nir_udiv(b, i, size_x_imm); - - return nir_vec3(b, x, y, z); - } - - /* If a workgroup size dimension is 1, then the local invocation id must be zero. */ - nir_component_mask_t is_zero = 0; - is_zero |= b->shader->info.workgroup_size[0] == 1 ? 0x1 : 0x0; - is_zero |= b->shader->info.workgroup_size[1] == 1 ? 0x2 : 0x0; - is_zero |= b->shader->info.workgroup_size[2] == 1 ? 0x4 : 0x0; - if (!b->shader->info.workgroup_size_variable && is_zero) { - nir_ssa_scalar defs[3]; - for (unsigned i = 0; i < 3; i++) { - defs[i] = is_zero & (1 << i) ? nir_get_ssa_scalar(nir_imm_zero(b, 1, 32), 0) : - nir_get_ssa_scalar(&intrin->dest.ssa, i); - } - return nir_vec_scalars(b, defs, 3); - } - - return NULL; - - case nir_intrinsic_load_local_invocation_index: - /* If lower_cs_local_index_to_id is true, then we replace - * local_invocation_index with a formula based on local_invocation_id. - */ - if (b->shader->options->lower_cs_local_index_to_id || - (options && options->lower_local_invocation_index)) { - /* From the GLSL man page for gl_LocalInvocationIndex: - * - * "The value of gl_LocalInvocationIndex is equal to - * gl_LocalInvocationID.z * gl_WorkGroupSize.x * - * gl_WorkGroupSize.y + gl_LocalInvocationID.y * - * gl_WorkGroupSize.x + gl_LocalInvocationID.x" - */ - nir_ssa_def *local_id = nir_load_local_invocation_id(b); - nir_ssa_def *local_size = nir_load_workgroup_size(b); - nir_ssa_def *size_x = nir_channel(b, local_size, 0); - nir_ssa_def *size_y = nir_channel(b, local_size, 1); - - /* Because no hardware supports a local workgroup size greater than - * about 1K, this calculation can be done in 32-bit and can save some - * 64-bit arithmetic. - */ - nir_ssa_def *index; - index = nir_imul(b, nir_channel(b, local_id, 2), - nir_imul(b, size_x, size_y)); - index = nir_iadd(b, index, - nir_imul(b, nir_channel(b, local_id, 1), size_x)); - index = nir_iadd(b, index, nir_channel(b, local_id, 0)); - return nir_u2uN(b, index, bit_size); - } else { - return NULL; - } - - case nir_intrinsic_load_workgroup_size: - if (b->shader->info.workgroup_size_variable) { - /* If the local work group size is variable it can't be lowered at - * this point. We do, however, have to make sure that the intrinsic - * is only 32-bit. - */ - return NULL; - } else { - /* using a 32 bit constant is safe here as no device/driver needs more - * than 32 bits for the local size */ - nir_const_value workgroup_size_const[3]; - memset(workgroup_size_const, 0, sizeof(workgroup_size_const)); - workgroup_size_const[0].u32 = b->shader->info.workgroup_size[0]; - workgroup_size_const[1].u32 = b->shader->info.workgroup_size[1]; - workgroup_size_const[2].u32 = b->shader->info.workgroup_size[2]; - return nir_u2uN(b, nir_build_imm(b, 3, 32, workgroup_size_const), bit_size); - } - - case nir_intrinsic_load_global_invocation_id_zero_base: { - if ((options && options->has_base_workgroup_id) || - !b->shader->options->has_cs_global_id) { - nir_ssa_def *group_size = nir_load_workgroup_size(b); - nir_ssa_def *group_id = nir_load_workgroup_id(b, bit_size); - nir_ssa_def *local_id = nir_load_local_invocation_id(b); - - return nir_iadd(b, nir_imul(b, group_id, - nir_u2uN(b, group_size, bit_size)), - nir_u2uN(b, local_id, bit_size)); - } else { - return NULL; - } - } - - case nir_intrinsic_load_global_invocation_id: { - if (options && options->has_base_global_invocation_id) - return nir_iadd(b, nir_load_global_invocation_id_zero_base(b, bit_size), - nir_load_base_global_invocation_id(b, bit_size)); - else if ((options && options->has_base_workgroup_id) || - !b->shader->options->has_cs_global_id) - return nir_load_global_invocation_id_zero_base(b, bit_size); - else - return NULL; - } - - case nir_intrinsic_load_global_invocation_index: { - /* OpenCL's global_linear_id explicitly removes the global offset before computing this */ - assert(b->shader->info.stage == MESA_SHADER_KERNEL); - nir_ssa_def *global_base_id = nir_load_base_global_invocation_id(b, bit_size); - nir_ssa_def *global_id = nir_isub(b, nir_load_global_invocation_id(b, bit_size), global_base_id); - nir_ssa_def *global_size = build_global_group_size(b, bit_size); - - /* index = id.x + ((id.y + (id.z * size.y)) * size.x) */ - nir_ssa_def *index; - index = nir_imul(b, nir_channel(b, global_id, 2), - nir_channel(b, global_size, 1)); - index = nir_iadd(b, nir_channel(b, global_id, 1), index); - index = nir_imul(b, nir_channel(b, global_size, 0), index); - index = nir_iadd(b, nir_channel(b, global_id, 0), index); - return index; - } - - case nir_intrinsic_load_workgroup_id: { - if (options && options->has_base_workgroup_id) - return nir_iadd(b, nir_u2uN(b, nir_load_workgroup_id_zero_base(b), bit_size), - nir_load_base_workgroup_id(b, bit_size)); - else if (options && options->lower_workgroup_id_to_index) - return lower_id_to_index_no_umod(b, nir_load_workgroup_index(b), - nir_load_num_workgroups(b, bit_size), - bit_size); - - return NULL; - - } - - default: - return NULL; - } -} - -bool -nir_lower_compute_system_values(nir_shader *shader, - const nir_lower_compute_system_values_options *options) -{ - if (!gl_shader_stage_uses_workgroup(shader->info.stage)) - return false; - - struct lower_sysval_state state; - state.options = options; - state.lower_once_list = _mesa_pointer_set_create(NULL); - - bool progress = - nir_shader_lower_instructions(shader, - lower_compute_system_value_filter, - lower_compute_system_value_instr, - (void*)&state); - ralloc_free(state.lower_once_list); - - /* Update this so as not to lower it again. */ - if (options && options->shuffle_local_ids_for_quad_derivatives && - shader->info.cs.derivative_group == DERIVATIVE_GROUP_QUADS) - shader->info.cs.derivative_group = DERIVATIVE_GROUP_LINEAR; - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_sysvals_to_varyings.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_sysvals_to_varyings.c deleted file mode 100644 index eb2fc4a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_sysvals_to_varyings.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 2021 Collabora Ltd. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* - * spirv_to_nir() creates system values for some builtin inputs, but - * backends might want to have those inputs exposed as varyings. This - * lowering pass allows backends to convert system values to input - * varyings and should be called just after spirv_to_nir() when needed. - */ - -bool -nir_lower_sysvals_to_varyings(nir_shader *shader, - const struct nir_lower_sysvals_to_varyings_options *options) -{ - bool progress = false; - - nir_foreach_variable_with_modes(var, shader, nir_var_system_value) { - switch (var->data.location) { -#define SYSVAL_TO_VARYING(opt, sysval, varying) \ - case SYSTEM_VALUE_ ## sysval: \ - if (options->opt) { \ - var->data.mode = nir_var_shader_in; \ - var->data.location = VARYING_SLOT_ ## varying; \ - progress = true; \ - } \ - break - - SYSVAL_TO_VARYING(frag_coord, FRAG_COORD, POS); - SYSVAL_TO_VARYING(point_coord, POINT_COORD, PNTC); - SYSVAL_TO_VARYING(front_face, FRONT_FACE, FACE); - -#undef SYSVAL_TO_VARYING - - default: - break; - } - } - - if (progress) - nir_fixup_deref_modes(shader); - - /* Nothing this does actually changes anything tracked by metadata. - * If we ever made this pass more complicated, we might need to care - * more about metadata. - */ - nir_shader_preserve_all_metadata(shader); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_task_shader.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_task_shader.c deleted file mode 100644 index a85710a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_task_shader.c +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Copyright © 2022 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Timur Kristóf - * - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../util/u_math.h" - -typedef struct { - uint32_t task_count_shared_addr; -} lower_task_nv_state; - -typedef struct { - /* If true, lower all task_payload I/O to use shared memory. */ - bool payload_in_shared; - /* Shared memory address where task_payload will be located. */ - uint32_t payload_shared_addr; - uint32_t payload_offset_in_bytes; -} lower_task_state; - -static bool -lower_nv_task_output(nir_builder *b, - nir_instr *instr, - void *state) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - lower_task_nv_state *s = (lower_task_nv_state *) state; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_output: { - b->cursor = nir_after_instr(instr); - nir_ssa_def *load = - nir_load_shared(b, 1, 32, nir_imm_int(b, 0), - .base = s->task_count_shared_addr); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, load); - nir_instr_remove(instr); - return true; - } - - case nir_intrinsic_store_output: { - b->cursor = nir_after_instr(instr); - nir_ssa_def *store_val = intrin->src[0].ssa; - nir_store_shared(b, store_val, nir_imm_int(b, 0), - .base = s->task_count_shared_addr); - nir_instr_remove(instr); - return true; - } - - default: - return false; - } -} - -static void -append_launch_mesh_workgroups_to_nv_task(nir_builder *b, - lower_task_nv_state *s) -{ - /* At the beginning of the shader, write 0 to the task count. - * This ensures that 0 mesh workgroups are launched when the - * shader doesn't write the TASK_COUNT output. - */ - b->cursor = nir_before_cf_list(&b->impl->body); - nir_ssa_def *zero = nir_imm_int(b, 0); - nir_store_shared(b, zero, zero, .base = s->task_count_shared_addr); - - nir_scoped_barrier(b, - .execution_scope = NIR_SCOPE_WORKGROUP, - .memory_scope = NIR_SCOPE_WORKGROUP, - .memory_semantics = NIR_MEMORY_RELEASE, - .memory_modes = nir_var_mem_shared); - - /* At the end of the shader, read the task count from shared memory - * and emit launch_mesh_workgroups. - */ - b->cursor = nir_after_cf_list(&b->impl->body); - - nir_scoped_barrier(b, - .execution_scope = NIR_SCOPE_WORKGROUP, - .memory_scope = NIR_SCOPE_WORKGROUP, - .memory_semantics = NIR_MEMORY_ACQUIRE, - .memory_modes = nir_var_mem_shared); - - nir_ssa_def *task_count = - nir_load_shared(b, 1, 32, zero, .base = s->task_count_shared_addr); - - /* NV_mesh_shader doesn't offer to choose which task_payload variable - * should be passed to mesh shaders, we just pass all. - */ - uint32_t range = b->shader->info.task_payload_size; - - nir_ssa_def *one = nir_imm_int(b, 1); - nir_ssa_def *dispatch_3d = nir_vec3(b, task_count, one, one); - nir_launch_mesh_workgroups(b, dispatch_3d, .base = 0, .range = range); -} - -/** - * For NV_mesh_shader: - * Task shaders only have 1 output, TASK_COUNT which is a 32-bit - * unsigned int that contains the 1-dimensional mesh dispatch size. - * This output should behave like a shared variable. - * - * We lower this output to a shared variable and then we emit - * the new launch_mesh_workgroups intrinsic at the end of the shader. - */ -static void -nir_lower_nv_task_count(nir_shader *shader) -{ - lower_task_nv_state state = { - .task_count_shared_addr = ALIGN(shader->info.shared_size, 4), - }; - - shader->info.shared_size += 4; - nir_shader_instructions_pass(shader, lower_nv_task_output, - nir_metadata_none, &state); - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - nir_builder builder; - nir_builder_init(&builder, impl); - - append_launch_mesh_workgroups_to_nv_task(&builder, &state); - nir_metadata_preserve(impl, nir_metadata_none); -} - -static nir_intrinsic_op -shared_opcode_for_task_payload(nir_intrinsic_op task_payload_op) -{ - switch (task_payload_op) { -#define OP(O) case nir_intrinsic_task_payload_##O: return nir_intrinsic_shared_##O; - OP(atomic_exchange) - OP(atomic_comp_swap) - OP(atomic_add) - OP(atomic_imin) - OP(atomic_umin) - OP(atomic_imax) - OP(atomic_umax) - OP(atomic_and) - OP(atomic_or) - OP(atomic_xor) - OP(atomic_fadd) - OP(atomic_fmin) - OP(atomic_fmax) - OP(atomic_fcomp_swap) -#undef OP - case nir_intrinsic_load_task_payload: - return nir_intrinsic_load_shared; - case nir_intrinsic_store_task_payload: - return nir_intrinsic_store_shared; - default: - unreachable("Invalid task payload atomic"); - } -} - -static bool -lower_task_payload_to_shared(nir_builder *b, - nir_intrinsic_instr *intrin, - lower_task_state *s) -{ - /* This assumes that shared and task_payload intrinsics - * have the same number of sources and same indices. - */ - unsigned base = nir_intrinsic_base(intrin); - intrin->intrinsic = shared_opcode_for_task_payload(intrin->intrinsic); - nir_intrinsic_set_base(intrin, base + s->payload_shared_addr); - - return true; -} - -static void -copy_shared_to_payload(nir_builder *b, - unsigned num_components, - nir_ssa_def *addr, - unsigned shared_base, - unsigned off) -{ - /* Read from shared memory. */ - nir_ssa_def *copy = nir_load_shared(b, num_components, 32, addr, - .align_mul = 16, - .base = shared_base + off); - - /* Write to task payload memory. */ - nir_store_task_payload(b, copy, addr, .base = off); -} - -static void -emit_shared_to_payload_copy(nir_builder *b, - uint32_t payload_addr, - uint32_t payload_size, - lower_task_state *s) -{ - /* Copy from shared memory to task payload using as much parallelism - * as possible. This is achieved by splitting the work into max 3 phases: - * 1) copy maximum number of vec4s using all invocations within workgroup - * 2) copy maximum number of vec4s using some invocations - * 3) copy remaining dwords (< 4) using only the first invocation - */ - const unsigned invocations = b->shader->info.workgroup_size[0] * - b->shader->info.workgroup_size[1] * - b->shader->info.workgroup_size[2]; - const unsigned vec4size = 16; - const unsigned whole_wg_vec4_copies = payload_size / vec4size; - const unsigned vec4_copies_per_invocation = whole_wg_vec4_copies / invocations; - const unsigned remaining_vec4_copies = whole_wg_vec4_copies % invocations; - const unsigned remaining_dwords = - DIV_ROUND_UP(payload_size - - vec4size * vec4_copies_per_invocation * invocations - - vec4size * remaining_vec4_copies, - 4); - const unsigned base_shared_addr = s->payload_shared_addr + payload_addr; - - nir_ssa_def *invocation_index = nir_load_local_invocation_index(b); - nir_ssa_def *addr = nir_imul_imm(b, invocation_index, vec4size); - - /* Wait for all previous shared stores to finish. - * This is necessary because we placed the payload in shared memory. - */ - nir_scoped_barrier(b, .execution_scope = NIR_SCOPE_WORKGROUP, - .memory_scope = NIR_SCOPE_WORKGROUP, - .memory_semantics = NIR_MEMORY_ACQ_REL, - .memory_modes = nir_var_mem_shared); - - /* Payload_size is a size of user-accessible payload, but on some - * hardware (e.g. Intel) payload has a private header, which we have - * to offset (payload_offset_in_bytes). - */ - unsigned off = s->payload_offset_in_bytes; - - /* Technically dword-alignment is not necessary for correctness - * of the code below, but even if backend implements unaligned - * load/stores, they will very likely be slow(er). - */ - assert(off % 4 == 0); - - /* Copy full vec4s using all invocations in workgroup. */ - for (unsigned i = 0; i < vec4_copies_per_invocation; ++i) { - copy_shared_to_payload(b, vec4size / 4, addr, base_shared_addr, off); - off += vec4size * invocations; - } - - /* Copy full vec4s using only the invocations needed to not overflow. */ - if (remaining_vec4_copies > 0) { - assert(remaining_vec4_copies < invocations); - - nir_ssa_def *cmp = nir_ilt(b, invocation_index, nir_imm_int(b, remaining_vec4_copies)); - nir_if *if_stmt = nir_push_if(b, cmp); - { - copy_shared_to_payload(b, vec4size / 4, addr, base_shared_addr, off); - } - nir_pop_if(b, if_stmt); - off += vec4size * remaining_vec4_copies; - } - - /* Copy the last few dwords not forming full vec4. */ - if (remaining_dwords > 0) { - assert(remaining_dwords < 4); - nir_ssa_def *cmp = nir_ieq(b, invocation_index, nir_imm_int(b, 0)); - nir_if *if_stmt = nir_push_if(b, cmp); - { - copy_shared_to_payload(b, remaining_dwords, addr, base_shared_addr, off); - } - nir_pop_if(b, if_stmt); - off += remaining_dwords * 4; - } - - assert(s->payload_offset_in_bytes + ALIGN(payload_size, 4) == off); -} - -static bool -lower_task_launch_mesh_workgroups(nir_builder *b, - nir_intrinsic_instr *intrin, - lower_task_state *s) -{ - if (s->payload_in_shared) { - /* Copy the payload from shared memory. - * Because launch_mesh_workgroups may only occur in - * workgroup-uniform control flow, here we assume that - * all invocations in the workgroup are active and therefore - * they can all participate in the copy. - * - * TODO: Skip the copy when the mesh dispatch size is (0, 0, 0). - * This is problematic because the dispatch size can be divergent, - * and may differ accross subgroups. - */ - - uint32_t payload_addr = nir_intrinsic_base(intrin); - uint32_t payload_size = nir_intrinsic_range(intrin); - - b->cursor = nir_before_instr(&intrin->instr); - emit_shared_to_payload_copy(b, payload_addr, payload_size, s); - } - - /* The launch_mesh_workgroups intrinsic is a terminating instruction, - * so let's delete everything after it. - */ - b->cursor = nir_after_instr(&intrin->instr); - nir_block *current_block = nir_cursor_current_block(b->cursor); - - /* Delete following instructions in the current block. */ - nir_foreach_instr_reverse_safe(instr, current_block) { - if (instr == &intrin->instr) - break; - nir_instr_remove(instr); - } - - /* Delete following CF at the same level. */ - b->cursor = nir_after_instr(&intrin->instr); - nir_cf_list extracted; - nir_cf_node *end_node = ¤t_block->cf_node; - while (!nir_cf_node_is_last(end_node)) - end_node = nir_cf_node_next(end_node); - nir_cf_extract(&extracted, b->cursor, nir_after_cf_node(end_node)); - nir_cf_delete(&extracted); - - /* Terminate the task shader. */ - b->cursor = nir_after_instr(&intrin->instr); - nir_jump(b, nir_jump_return); - - return true; -} - -static bool -lower_task_intrin(nir_builder *b, - nir_instr *instr, - void *state) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - lower_task_state *s = (lower_task_state *) state; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_task_payload_atomic_add: - case nir_intrinsic_task_payload_atomic_imin: - case nir_intrinsic_task_payload_atomic_umin: - case nir_intrinsic_task_payload_atomic_imax: - case nir_intrinsic_task_payload_atomic_umax: - case nir_intrinsic_task_payload_atomic_and: - case nir_intrinsic_task_payload_atomic_or: - case nir_intrinsic_task_payload_atomic_xor: - case nir_intrinsic_task_payload_atomic_exchange: - case nir_intrinsic_task_payload_atomic_comp_swap: - case nir_intrinsic_task_payload_atomic_fadd: - case nir_intrinsic_task_payload_atomic_fmin: - case nir_intrinsic_task_payload_atomic_fmax: - case nir_intrinsic_task_payload_atomic_fcomp_swap: - case nir_intrinsic_store_task_payload: - case nir_intrinsic_load_task_payload: - if (s->payload_in_shared) - return lower_task_payload_to_shared(b, intrin, s); - return false; - case nir_intrinsic_launch_mesh_workgroups: - return lower_task_launch_mesh_workgroups(b, intrin, s); - default: - return false; - } -} - -static bool -requires_payload_in_shared(nir_shader *shader, bool atomics, bool small_types) -{ - nir_foreach_function(func, shader) { - if (!func->impl) - continue; - - nir_foreach_block(block, func->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_task_payload_atomic_add: - case nir_intrinsic_task_payload_atomic_imin: - case nir_intrinsic_task_payload_atomic_umin: - case nir_intrinsic_task_payload_atomic_imax: - case nir_intrinsic_task_payload_atomic_umax: - case nir_intrinsic_task_payload_atomic_and: - case nir_intrinsic_task_payload_atomic_or: - case nir_intrinsic_task_payload_atomic_xor: - case nir_intrinsic_task_payload_atomic_exchange: - case nir_intrinsic_task_payload_atomic_comp_swap: - case nir_intrinsic_task_payload_atomic_fadd: - case nir_intrinsic_task_payload_atomic_fmin: - case nir_intrinsic_task_payload_atomic_fmax: - case nir_intrinsic_task_payload_atomic_fcomp_swap: - if (atomics) - return true; - break; - case nir_intrinsic_load_task_payload: - if (small_types && nir_dest_bit_size(intrin->dest) < 32) - return true; - break; - case nir_intrinsic_store_task_payload: - if (small_types && nir_src_bit_size(intrin->src[0]) < 32) - return true; - break; - default: - break; - } - } - } - } - - return false; -} - -static bool -nir_lower_task_intrins(nir_shader *shader, lower_task_state *state) -{ - return nir_shader_instructions_pass(shader, lower_task_intrin, - nir_metadata_none, state); -} - -/** - * Common Task Shader lowering to make the job of the backends easier. - * - * - Lowers NV_mesh_shader TASK_COUNT output to launch_mesh_workgroups. - * - Removes all code after launch_mesh_workgroups, enforcing the - * fact that it's a terminating instruction. - * - Ensures that task shaders always have at least one - * launch_mesh_workgroups instruction, so the backend doesn't - * need to implement a special case when the shader doesn't have it. - * - Optionally, implements task_payload using shared memory when - * task_payload atomics are used. - * This is useful when the backend is otherwise not capable of - * handling the same atomic features as it can for shared memory. - * If this is used, the backend only has to implement the basic - * load/store operations for task_payload. - * - * Note, this pass operates on lowered explicit I/O intrinsics, so - * it should be called after nir_lower_io + nir_lower_explicit_io. - */ -bool -nir_lower_task_shader(nir_shader *shader, - nir_lower_task_shader_options options) -{ - if (shader->info.stage != MESA_SHADER_TASK) - return false; - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - nir_builder builder; - nir_builder_init(&builder, impl); - - if (shader->info.outputs_written & BITFIELD64_BIT(VARYING_SLOT_TASK_COUNT)) { - /* NV_mesh_shader: - * If the shader writes TASK_COUNT, lower that to emit - * the new launch_mesh_workgroups intrinsic instead. - */ - NIR_PASS_V(shader, nir_lower_nv_task_count); - } else { - /* To make sure that task shaders always have a code path that - * executes a launch_mesh_workgroups, let's add one at the end. - * If the shader already had a launch_mesh_workgroups by any chance, - * this will be removed. - */ - nir_block *last_block = nir_impl_last_block(impl); - builder.cursor = nir_after_block_before_jump(last_block); - nir_launch_mesh_workgroups(&builder, nir_imm_zero(&builder, 3, 32)); - } - - bool atomics = options.payload_to_shared_for_atomics; - bool small_types = options.payload_to_shared_for_small_types; - bool payload_in_shared = (atomics || small_types) && - requires_payload_in_shared(shader, atomics, small_types); - - lower_task_state state = { - .payload_shared_addr = ALIGN(shader->info.shared_size, 16), - .payload_in_shared = payload_in_shared, - .payload_offset_in_bytes = options.payload_offset_in_bytes, - }; - - if (payload_in_shared) - shader->info.shared_size = - state.payload_shared_addr + shader->info.task_payload_size; - - NIR_PASS(_, shader, nir_lower_task_intrins, &state); - - /* Delete all code that potentially can't be reached due to - * launch_mesh_workgroups being a terminating instruction. - */ - NIR_PASS(_, shader, nir_lower_returns); - - bool progress; - do { - progress = false; - NIR_PASS(progress, shader, nir_opt_dead_cf); - NIR_PASS(progress, shader, nir_opt_dce); - } while (progress); - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_tex.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_tex.c deleted file mode 100644 index 5cdb3c6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_tex.c +++ /dev/null @@ -1,1685 +0,0 @@ -/* - * Copyright © 2015 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * This lowering pass supports (as configured via nir_lower_tex_options) - * various texture related conversions: - * + texture projector lowering: converts the coordinate division for - * texture projection to be done in ALU instructions instead of - * asking the texture operation to do so. - * + lowering RECT: converts the un-normalized RECT texture coordinates - * to normalized coordinates with txs plus ALU instructions - * + saturate s/t/r coords: to emulate certain texture clamp/wrap modes, - * inserts instructions to clamp specified coordinates to [0.0, 1.0]. - * Note that this automatically triggers texture projector lowering if - * needed, since clamping must happen after projector lowering. - * + YUV-to-RGB conversion: to allow sampling YUV values as RGB values - * according to a specific YUV color space and range. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_builtin_builder.h" -#include "nir_format_convert.h" - -typedef struct nir_const_value_3_4 { - nir_const_value v[3][4]; -} nir_const_value_3_4; - -static const nir_const_value_3_4 bt601_limited_range_csc_coeffs = { { - { { .f32 = 1.16438356f }, { .f32 = 1.16438356f }, { .f32 = 1.16438356f } }, - { { .f32 = 0.0f }, { .f32 = -0.39176229f }, { .f32 = 2.01723214f } }, - { { .f32 = 1.59602678f }, { .f32 = -0.81296764f }, { .f32 = 0.0f } }, -} }; -static const nir_const_value_3_4 bt601_full_range_csc_coeffs = { { - { { .f32 = 1.0f }, { .f32 = 1.0f }, { .f32 = 1.0f } }, - { { .f32 = 0.0f }, { .f32 = -0.34413629f }, { .f32 = 1.772f } }, - { { .f32 = 1.402f }, { .f32 = -0.71413629f }, { .f32 = 0.0f } }, -} }; -static const nir_const_value_3_4 bt709_limited_range_csc_coeffs = { { - { { .f32 = 1.16438356f }, { .f32 = 1.16438356f }, { .f32 = 1.16438356f } }, - { { .f32 = 0.0f }, { .f32 = -0.21324861f }, { .f32 = 2.11240179f } }, - { { .f32 = 1.79274107f }, { .f32 = -0.53290933f }, { .f32 = 0.0f } }, -} }; -static const nir_const_value_3_4 bt709_full_range_csc_coeffs = { { - { { .f32 = 1.0f }, { .f32 = 1.0f }, { .f32 = 1.0f } }, - { { .f32 = 0.0f }, { .f32 = -0.18732427f }, { .f32 = 1.8556f } }, - { { .f32 = 1.5748f }, { .f32 = -0.46812427f }, { .f32 = 0.0f } }, -} }; -static const nir_const_value_3_4 bt2020_limited_range_csc_coeffs = { { - { { .f32 = 1.16438356f }, { .f32 = 1.16438356f }, { .f32 = 1.16438356f } }, - { { .f32 = 0.0f }, { .f32 = -0.18732610f }, { .f32 = 2.14177232f } }, - { { .f32 = 1.67878795f }, { .f32 = -0.65046843f }, { .f32 = 0.0f } }, -} }; -static const nir_const_value_3_4 bt2020_full_range_csc_coeffs = { { - { { .f32 = 1.0f }, { .f32 = 1.0f }, { .f32 = 1.0f } }, - { { .f32 = 0.0f }, { .f32 = -0.16455313f }, { .f32 = 1.88140000f } }, - { { .f32 = 1.4747f }, { .f32 = -0.57139187f }, { .f32 = 0.0f } }, -} }; - -static const float bt601_limited_range_csc_offsets[3] = { - -0.874202218f, 0.531667823f, -1.085630789f -}; -static const float bt601_full_range_csc_offsets[3] = { - -0.701000000f, 0.529136286f, -0.886000000f -}; -static const float bt709_limited_range_csc_offsets[3] = { - -0.972945075f, 0.301482665f, -1.133402218f -}; -static const float bt709_full_range_csc_offsets[3] = { - -0.787400000f, 0.327724273f, -0.927800000f -}; -static const float bt2020_limited_range_csc_offsets[3] = { - -0.915745075f, 0.347480639f, -1.148145075f -}; -static const float bt2020_full_range_csc_offsets[3] = { - -0.737350000f, 0.367972500f, -0.940700000f -}; - -static bool -project_src(nir_builder *b, nir_tex_instr *tex) -{ - /* Find the projector in the srcs list, if present. */ - int proj_index = nir_tex_instr_src_index(tex, nir_tex_src_projector); - if (proj_index < 0) - return false; - - b->cursor = nir_before_instr(&tex->instr); - - nir_ssa_def *inv_proj = - nir_frcp(b, nir_ssa_for_src(b, tex->src[proj_index].src, 1)); - - /* Walk through the sources projecting the arguments. */ - for (unsigned i = 0; i < tex->num_srcs; i++) { - switch (tex->src[i].src_type) { - case nir_tex_src_coord: - case nir_tex_src_comparator: - break; - default: - continue; - } - nir_ssa_def *unprojected = - nir_ssa_for_src(b, tex->src[i].src, nir_tex_instr_src_size(tex, i)); - nir_ssa_def *projected = nir_fmul(b, unprojected, inv_proj); - - /* Array indices don't get projected, so make an new vector with the - * coordinate's array index untouched. - */ - if (tex->is_array && tex->src[i].src_type == nir_tex_src_coord) { - switch (tex->coord_components) { - case 4: - projected = nir_vec4(b, - nir_channel(b, projected, 0), - nir_channel(b, projected, 1), - nir_channel(b, projected, 2), - nir_channel(b, unprojected, 3)); - break; - case 3: - projected = nir_vec3(b, - nir_channel(b, projected, 0), - nir_channel(b, projected, 1), - nir_channel(b, unprojected, 2)); - break; - case 2: - projected = nir_vec2(b, - nir_channel(b, projected, 0), - nir_channel(b, unprojected, 1)); - break; - default: - unreachable("bad texture coord count for array"); - break; - } - } - - nir_instr_rewrite_src(&tex->instr, - &tex->src[i].src, - nir_src_for_ssa(projected)); - } - - nir_tex_instr_remove_src(tex, proj_index); - return true; -} - -static bool -lower_offset(nir_builder *b, nir_tex_instr *tex) -{ - int offset_index = nir_tex_instr_src_index(tex, nir_tex_src_offset); - if (offset_index < 0) - return false; - - int coord_index = nir_tex_instr_src_index(tex, nir_tex_src_coord); - assert(coord_index >= 0); - - assert(tex->src[offset_index].src.is_ssa); - assert(tex->src[coord_index].src.is_ssa); - nir_ssa_def *offset = tex->src[offset_index].src.ssa; - nir_ssa_def *coord = tex->src[coord_index].src.ssa; - - b->cursor = nir_before_instr(&tex->instr); - - nir_ssa_def *offset_coord; - if (nir_tex_instr_src_type(tex, coord_index) == nir_type_float) { - if (tex->sampler_dim == GLSL_SAMPLER_DIM_RECT) { - offset_coord = nir_fadd(b, coord, nir_i2f32(b, offset)); - } else { - nir_ssa_def *txs = nir_i2f32(b, nir_get_texture_size(b, tex)); - nir_ssa_def *scale = nir_frcp(b, txs); - - offset_coord = nir_fadd(b, coord, - nir_fmul(b, - nir_i2f32(b, offset), - scale)); - } - } else { - offset_coord = nir_iadd(b, coord, offset); - } - - if (tex->is_array) { - /* The offset is not applied to the array index */ - if (tex->coord_components == 2) { - offset_coord = nir_vec2(b, nir_channel(b, offset_coord, 0), - nir_channel(b, coord, 1)); - } else if (tex->coord_components == 3) { - offset_coord = nir_vec3(b, nir_channel(b, offset_coord, 0), - nir_channel(b, offset_coord, 1), - nir_channel(b, coord, 2)); - } else { - unreachable("Invalid number of components"); - } - } - - nir_instr_rewrite_src(&tex->instr, &tex->src[coord_index].src, - nir_src_for_ssa(offset_coord)); - - nir_tex_instr_remove_src(tex, offset_index); - - return true; -} - -static void -lower_rect(nir_builder *b, nir_tex_instr *tex) -{ - /* Set the sampler_dim to 2D here so that get_texture_size picks up the - * right dimensionality. - */ - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - - nir_ssa_def *txs = nir_i2f32(b, nir_get_texture_size(b, tex)); - nir_ssa_def *scale = nir_frcp(b, txs); - int coord_index = nir_tex_instr_src_index(tex, nir_tex_src_coord); - - if (coord_index != -1) { - nir_ssa_def *coords = - nir_ssa_for_src(b, tex->src[coord_index].src, tex->coord_components); - nir_instr_rewrite_src(&tex->instr, - &tex->src[coord_index].src, - nir_src_for_ssa(nir_fmul(b, coords, scale))); - } -} - -static void -lower_rect_tex_scale(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_before_instr(&tex->instr); - - nir_ssa_def *idx = nir_imm_int(b, tex->texture_index); - nir_ssa_def *scale = nir_build_load_texture_rect_scaling(b, 32, idx); - int coord_index = nir_tex_instr_src_index(tex, nir_tex_src_coord); - - if (coord_index != -1) { - nir_ssa_def *coords = - nir_ssa_for_src(b, tex->src[coord_index].src, tex->coord_components); - nir_instr_rewrite_src(&tex->instr, - &tex->src[coord_index].src, - nir_src_for_ssa(nir_fmul(b, coords, scale))); - } -} - -static void -lower_lod(nir_builder *b, nir_tex_instr *tex, nir_ssa_def *lod) -{ - assert(tex->op == nir_texop_tex || tex->op == nir_texop_txb); - assert(nir_tex_instr_src_index(tex, nir_tex_src_lod) < 0); - assert(nir_tex_instr_src_index(tex, nir_tex_src_ddx) < 0); - assert(nir_tex_instr_src_index(tex, nir_tex_src_ddy) < 0); - - int bias_idx = nir_tex_instr_src_index(tex, nir_tex_src_bias); - if (bias_idx >= 0) { - /* If we have a bias, add it in */ - lod = nir_fadd(b, lod, nir_ssa_for_src(b, tex->src[bias_idx].src, 1)); - nir_tex_instr_remove_src(tex, bias_idx); - } - - int min_lod_idx = nir_tex_instr_src_index(tex, nir_tex_src_min_lod); - if (min_lod_idx >= 0) { - /* If we have a minimum LOD, clamp LOD accordingly */ - lod = nir_fmax(b, lod, nir_ssa_for_src(b, tex->src[min_lod_idx].src, 1)); - nir_tex_instr_remove_src(tex, min_lod_idx); - } - - nir_tex_instr_add_src(tex, nir_tex_src_lod, nir_src_for_ssa(lod)); - tex->op = nir_texop_txl; -} - -static void -lower_implicit_lod(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_before_instr(&tex->instr); - lower_lod(b, tex, nir_get_texture_lod(b, tex)); -} - -static void -lower_zero_lod(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_before_instr(&tex->instr); - - if (tex->op == nir_texop_lod) { - nir_ssa_def_rewrite_uses(&tex->dest.ssa, nir_imm_int(b, 0)); - nir_instr_remove(&tex->instr); - return; - } - - lower_lod(b, tex, nir_imm_int(b, 0)); -} - -static nir_ssa_def * -sample_plane(nir_builder *b, nir_tex_instr *tex, int plane, - const nir_lower_tex_options *options) -{ - assert(tex->dest.is_ssa); - assert(nir_tex_instr_dest_size(tex) == 4); - assert(nir_alu_type_get_base_type(tex->dest_type) == nir_type_float); - assert(tex->op == nir_texop_tex); - assert(tex->coord_components == 2); - - nir_tex_instr *plane_tex = - nir_tex_instr_create(b->shader, tex->num_srcs + 1); - for (unsigned i = 0; i < tex->num_srcs; i++) { - nir_src_copy(&plane_tex->src[i].src, &tex->src[i].src, &plane_tex->instr); - plane_tex->src[i].src_type = tex->src[i].src_type; - } - plane_tex->src[tex->num_srcs].src = nir_src_for_ssa(nir_imm_int(b, plane)); - plane_tex->src[tex->num_srcs].src_type = nir_tex_src_plane; - plane_tex->op = nir_texop_tex; - plane_tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - plane_tex->dest_type = nir_type_float | nir_dest_bit_size(tex->dest); - plane_tex->coord_components = 2; - - plane_tex->texture_index = tex->texture_index; - plane_tex->sampler_index = tex->sampler_index; - - nir_ssa_dest_init(&plane_tex->instr, &plane_tex->dest, 4, - nir_dest_bit_size(tex->dest), NULL); - - nir_builder_instr_insert(b, &plane_tex->instr); - - /* If scaling_factor is set, return a scaled value. */ - if (options->scale_factors[tex->texture_index]) - return nir_fmul_imm(b, &plane_tex->dest.ssa, - options->scale_factors[tex->texture_index]); - - return &plane_tex->dest.ssa; -} - -static void -convert_yuv_to_rgb(nir_builder *b, nir_tex_instr *tex, - nir_ssa_def *y, nir_ssa_def *u, nir_ssa_def *v, - nir_ssa_def *a, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - - const float *offset_vals; - const nir_const_value_3_4 *m; - assert((options->bt709_external & options->bt2020_external) == 0); - if (options->yuv_full_range_external & (1u << texture_index)) { - if (options->bt709_external & (1u << texture_index)) { - m = &bt709_full_range_csc_coeffs; - offset_vals = bt709_full_range_csc_offsets; - } else if (options->bt2020_external & (1u << texture_index)) { - m = &bt2020_full_range_csc_coeffs; - offset_vals = bt2020_full_range_csc_offsets; - } else { - m = &bt601_full_range_csc_coeffs; - offset_vals = bt601_full_range_csc_offsets; - } - } else { - if (options->bt709_external & (1u << texture_index)) { - m = &bt709_limited_range_csc_coeffs; - offset_vals = bt709_limited_range_csc_offsets; - } else if (options->bt2020_external & (1u << texture_index)) { - m = &bt2020_limited_range_csc_coeffs; - offset_vals = bt2020_limited_range_csc_offsets; - } else { - m = &bt601_limited_range_csc_coeffs; - offset_vals = bt601_limited_range_csc_offsets; - } - } - - unsigned bit_size = nir_dest_bit_size(tex->dest); - - nir_ssa_def *offset = - nir_vec4(b, - nir_imm_floatN_t(b, offset_vals[0], a->bit_size), - nir_imm_floatN_t(b, offset_vals[1], a->bit_size), - nir_imm_floatN_t(b, offset_vals[2], a->bit_size), - a); - - offset = nir_f2fN(b, offset, bit_size); - - nir_ssa_def *m0 = nir_f2fN(b, nir_build_imm(b, 4, 32, m->v[0]), bit_size); - nir_ssa_def *m1 = nir_f2fN(b, nir_build_imm(b, 4, 32, m->v[1]), bit_size); - nir_ssa_def *m2 = nir_f2fN(b, nir_build_imm(b, 4, 32, m->v[2]), bit_size); - - nir_ssa_def *result = - nir_ffma(b, y, m0, nir_ffma(b, u, m1, nir_ffma(b, v, m2, offset))); - - nir_ssa_def_rewrite_uses(&tex->dest.ssa, result); -} - -static void -lower_y_uv_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *y = sample_plane(b, tex, 0, options); - nir_ssa_def *uv = sample_plane(b, tex, 1, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, y, 0), - nir_channel(b, uv, 0), - nir_channel(b, uv, 1), - nir_imm_float(b, 1.0f), - options, - texture_index); -} - -static void -lower_y_u_v_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *y = sample_plane(b, tex, 0, options); - nir_ssa_def *u = sample_plane(b, tex, 1, options); - nir_ssa_def *v = sample_plane(b, tex, 2, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, y, 0), - nir_channel(b, u, 0), - nir_channel(b, v, 0), - nir_imm_float(b, 1.0f), - options, - texture_index); -} - -static void -lower_yx_xuxv_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *y = sample_plane(b, tex, 0, options); - nir_ssa_def *xuxv = sample_plane(b, tex, 1, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, y, 0), - nir_channel(b, xuxv, 1), - nir_channel(b, xuxv, 3), - nir_imm_float(b, 1.0f), - options, - texture_index); -} - -static void -lower_xy_uxvx_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *y = sample_plane(b, tex, 0, options); - nir_ssa_def *uxvx = sample_plane(b, tex, 1, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, y, 1), - nir_channel(b, uxvx, 0), - nir_channel(b, uxvx, 2), - nir_imm_float(b, 1.0f), - options, - texture_index); -} - -static void -lower_ayuv_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *ayuv = sample_plane(b, tex, 0, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, ayuv, 2), - nir_channel(b, ayuv, 1), - nir_channel(b, ayuv, 0), - nir_channel(b, ayuv, 3), - options, - texture_index); -} - -static void -lower_y41x_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *y41x = sample_plane(b, tex, 0, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, y41x, 1), - nir_channel(b, y41x, 0), - nir_channel(b, y41x, 2), - nir_channel(b, y41x, 3), - options, - texture_index); -} - -static void -lower_xyuv_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *xyuv = sample_plane(b, tex, 0, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, xyuv, 2), - nir_channel(b, xyuv, 1), - nir_channel(b, xyuv, 0), - nir_imm_float(b, 1.0f), - options, - texture_index); -} - -static void -lower_yuv_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *yuv = sample_plane(b, tex, 0, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, yuv, 0), - nir_channel(b, yuv, 1), - nir_channel(b, yuv, 2), - nir_imm_float(b, 1.0f), - options, - texture_index); -} - -static void -lower_yu_yv_external(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options, - unsigned texture_index) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *yuv = sample_plane(b, tex, 0, options); - - convert_yuv_to_rgb(b, tex, - nir_channel(b, yuv, 1), - nir_channel(b, yuv, 2), - nir_channel(b, yuv, 0), - nir_imm_float(b, 1.0f), - options, - texture_index); -} - -/* - * Converts a nir_texop_txd instruction to nir_texop_txl with the given lod - * computed from the gradients. - */ -static void -replace_gradient_with_lod(nir_builder *b, nir_ssa_def *lod, nir_tex_instr *tex) -{ - assert(tex->op == nir_texop_txd); - - nir_tex_instr_remove_src(tex, nir_tex_instr_src_index(tex, nir_tex_src_ddx)); - nir_tex_instr_remove_src(tex, nir_tex_instr_src_index(tex, nir_tex_src_ddy)); - - int min_lod_idx = nir_tex_instr_src_index(tex, nir_tex_src_min_lod); - if (min_lod_idx >= 0) { - /* If we have a minimum LOD, clamp LOD accordingly */ - lod = nir_fmax(b, lod, nir_ssa_for_src(b, tex->src[min_lod_idx].src, 1)); - nir_tex_instr_remove_src(tex, min_lod_idx); - } - - nir_tex_instr_add_src(tex, nir_tex_src_lod, nir_src_for_ssa(lod)); - tex->op = nir_texop_txl; -} - -static void -lower_gradient_cube_map(nir_builder *b, nir_tex_instr *tex) -{ - assert(tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE); - assert(tex->op == nir_texop_txd); - assert(tex->dest.is_ssa); - - /* Use textureSize() to get the width and height of LOD 0 */ - nir_ssa_def *size = nir_i2f32(b, nir_get_texture_size(b, tex)); - - /* Cubemap texture lookups first generate a texture coordinate normalized - * to [-1, 1] on the appropiate face. The appropiate face is determined - * by which component has largest magnitude and its sign. The texture - * coordinate is the quotient of the remaining texture coordinates against - * that absolute value of the component of largest magnitude. This - * division requires that the computing of the derivative of the texel - * coordinate must use the quotient rule. The high level GLSL code is as - * follows: - * - * Step 1: selection - * - * vec3 abs_p, Q, dQdx, dQdy; - * abs_p = abs(ir->coordinate); - * if (abs_p.x >= max(abs_p.y, abs_p.z)) { - * Q = ir->coordinate.yzx; - * dQdx = ir->lod_info.grad.dPdx.yzx; - * dQdy = ir->lod_info.grad.dPdy.yzx; - * } - * if (abs_p.y >= max(abs_p.x, abs_p.z)) { - * Q = ir->coordinate.xzy; - * dQdx = ir->lod_info.grad.dPdx.xzy; - * dQdy = ir->lod_info.grad.dPdy.xzy; - * } - * if (abs_p.z >= max(abs_p.x, abs_p.y)) { - * Q = ir->coordinate; - * dQdx = ir->lod_info.grad.dPdx; - * dQdy = ir->lod_info.grad.dPdy; - * } - * - * Step 2: use quotient rule to compute derivative. The normalized to - * [-1, 1] texel coordinate is given by Q.xy / (sign(Q.z) * Q.z). We are - * only concerned with the magnitudes of the derivatives whose values are - * not affected by the sign. We drop the sign from the computation. - * - * vec2 dx, dy; - * float recip; - * - * recip = 1.0 / Q.z; - * dx = recip * ( dQdx.xy - Q.xy * (dQdx.z * recip) ); - * dy = recip * ( dQdy.xy - Q.xy * (dQdy.z * recip) ); - * - * Step 3: compute LOD. At this point we have the derivatives of the - * texture coordinates normalized to [-1,1]. We take the LOD to be - * result = log2(max(sqrt(dot(dx, dx)), sqrt(dy, dy)) * 0.5 * L) - * = -1.0 + log2(max(sqrt(dot(dx, dx)), sqrt(dy, dy)) * L) - * = -1.0 + log2(sqrt(max(dot(dx, dx), dot(dy,dy))) * L) - * = -1.0 + log2(sqrt(L * L * max(dot(dx, dx), dot(dy,dy)))) - * = -1.0 + 0.5 * log2(L * L * max(dot(dx, dx), dot(dy,dy))) - * where L is the dimension of the cubemap. The code is: - * - * float M, result; - * M = max(dot(dx, dx), dot(dy, dy)); - * L = textureSize(sampler, 0).x; - * result = -1.0 + 0.5 * log2(L * L * M); - */ - - /* coordinate */ - nir_ssa_def *p = - tex->src[nir_tex_instr_src_index(tex, nir_tex_src_coord)].src.ssa; - - /* unmodified dPdx, dPdy values */ - nir_ssa_def *dPdx = - tex->src[nir_tex_instr_src_index(tex, nir_tex_src_ddx)].src.ssa; - nir_ssa_def *dPdy = - tex->src[nir_tex_instr_src_index(tex, nir_tex_src_ddy)].src.ssa; - - nir_ssa_def *abs_p = nir_fabs(b, p); - nir_ssa_def *abs_p_x = nir_channel(b, abs_p, 0); - nir_ssa_def *abs_p_y = nir_channel(b, abs_p, 1); - nir_ssa_def *abs_p_z = nir_channel(b, abs_p, 2); - - /* 1. compute selector */ - nir_ssa_def *Q, *dQdx, *dQdy; - - nir_ssa_def *cond_z = nir_fge(b, abs_p_z, nir_fmax(b, abs_p_x, abs_p_y)); - nir_ssa_def *cond_y = nir_fge(b, abs_p_y, nir_fmax(b, abs_p_x, abs_p_z)); - - unsigned yzx[3] = { 1, 2, 0 }; - unsigned xzy[3] = { 0, 2, 1 }; - - Q = nir_bcsel(b, cond_z, - p, - nir_bcsel(b, cond_y, - nir_swizzle(b, p, xzy, 3), - nir_swizzle(b, p, yzx, 3))); - - dQdx = nir_bcsel(b, cond_z, - dPdx, - nir_bcsel(b, cond_y, - nir_swizzle(b, dPdx, xzy, 3), - nir_swizzle(b, dPdx, yzx, 3))); - - dQdy = nir_bcsel(b, cond_z, - dPdy, - nir_bcsel(b, cond_y, - nir_swizzle(b, dPdy, xzy, 3), - nir_swizzle(b, dPdy, yzx, 3))); - - /* 2. quotient rule */ - - /* tmp = Q.xy * recip; - * dx = recip * ( dQdx.xy - (tmp * dQdx.z) ); - * dy = recip * ( dQdy.xy - (tmp * dQdy.z) ); - */ - nir_ssa_def *rcp_Q_z = nir_frcp(b, nir_channel(b, Q, 2)); - - nir_ssa_def *Q_xy = nir_channels(b, Q, 0x3); - nir_ssa_def *tmp = nir_fmul(b, Q_xy, rcp_Q_z); - - nir_ssa_def *dQdx_xy = nir_channels(b, dQdx, 0x3); - nir_ssa_def *dQdx_z = nir_channel(b, dQdx, 2); - nir_ssa_def *dx = - nir_fmul(b, rcp_Q_z, nir_fsub(b, dQdx_xy, nir_fmul(b, tmp, dQdx_z))); - - nir_ssa_def *dQdy_xy = nir_channels(b, dQdy, 0x3); - nir_ssa_def *dQdy_z = nir_channel(b, dQdy, 2); - nir_ssa_def *dy = - nir_fmul(b, rcp_Q_z, nir_fsub(b, dQdy_xy, nir_fmul(b, tmp, dQdy_z))); - - /* M = max(dot(dx, dx), dot(dy, dy)); */ - nir_ssa_def *M = nir_fmax(b, nir_fdot(b, dx, dx), nir_fdot(b, dy, dy)); - - /* size has textureSize() of LOD 0 */ - nir_ssa_def *L = nir_channel(b, size, 0); - - /* lod = -1.0 + 0.5 * log2(L * L * M); */ - nir_ssa_def *lod = - nir_fadd(b, - nir_imm_float(b, -1.0f), - nir_fmul(b, - nir_imm_float(b, 0.5f), - nir_flog2(b, nir_fmul(b, L, nir_fmul(b, L, M))))); - - /* 3. Replace the gradient instruction with an equivalent lod instruction */ - replace_gradient_with_lod(b, lod, tex); -} - -static void -lower_gradient(nir_builder *b, nir_tex_instr *tex) -{ - /* Cubes are more complicated and have their own function */ - if (tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE) { - lower_gradient_cube_map(b, tex); - return; - } - - assert(tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE); - assert(tex->op == nir_texop_txd); - assert(tex->dest.is_ssa); - - /* Use textureSize() to get the width and height of LOD 0 */ - unsigned component_mask; - switch (tex->sampler_dim) { - case GLSL_SAMPLER_DIM_3D: - component_mask = 7; - break; - case GLSL_SAMPLER_DIM_1D: - component_mask = 1; - break; - default: - component_mask = 3; - break; - } - - nir_ssa_def *size = - nir_channels(b, nir_i2f32(b, nir_get_texture_size(b, tex)), - component_mask); - - /* Scale the gradients by width and height. Effectively, the incoming - * gradients are s'(x,y), t'(x,y), and r'(x,y) from equation 3.19 in the - * GL 3.0 spec; we want u'(x,y), which is w_t * s'(x,y). - */ - nir_ssa_def *ddx = - tex->src[nir_tex_instr_src_index(tex, nir_tex_src_ddx)].src.ssa; - nir_ssa_def *ddy = - tex->src[nir_tex_instr_src_index(tex, nir_tex_src_ddy)].src.ssa; - - nir_ssa_def *dPdx = nir_fmul(b, ddx, size); - nir_ssa_def *dPdy = nir_fmul(b, ddy, size); - - nir_ssa_def *rho; - if (dPdx->num_components == 1) { - rho = nir_fmax(b, nir_fabs(b, dPdx), nir_fabs(b, dPdy)); - } else { - rho = nir_fmax(b, - nir_fsqrt(b, nir_fdot(b, dPdx, dPdx)), - nir_fsqrt(b, nir_fdot(b, dPdy, dPdy))); - } - - /* lod = log2(rho). We're ignoring GL state biases for now. */ - nir_ssa_def *lod = nir_flog2(b, rho); - - /* Replace the gradient instruction with an equivalent lod instruction */ - replace_gradient_with_lod(b, lod, tex); -} - -/* tex(s, coord) = txd(s, coord, dfdx(coord), dfdy(coord)) */ -static nir_tex_instr * -lower_tex_to_txd(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_after_instr(&tex->instr); - nir_tex_instr *txd = nir_tex_instr_create(b->shader, tex->num_srcs + 2); - - txd->op = nir_texop_txd; - txd->sampler_dim = tex->sampler_dim; - txd->dest_type = tex->dest_type; - txd->coord_components = tex->coord_components; - txd->texture_index = tex->texture_index; - txd->sampler_index = tex->sampler_index; - txd->is_array = tex->is_array; - txd->is_shadow = tex->is_shadow; - txd->is_new_style_shadow = tex->is_new_style_shadow; - - /* reuse existing srcs */ - for (unsigned i = 0; i < tex->num_srcs; i++) { - nir_src_copy(&txd->src[i].src, &tex->src[i].src, &txd->instr); - txd->src[i].src_type = tex->src[i].src_type; - } - int coord = nir_tex_instr_src_index(tex, nir_tex_src_coord); - assert(coord >= 0); - nir_ssa_def *dfdx = nir_fddx(b, tex->src[coord].src.ssa); - nir_ssa_def *dfdy = nir_fddy(b, tex->src[coord].src.ssa); - txd->src[tex->num_srcs].src = nir_src_for_ssa(dfdx); - txd->src[tex->num_srcs].src_type = nir_tex_src_ddx; - txd->src[tex->num_srcs + 1].src = nir_src_for_ssa(dfdy); - txd->src[tex->num_srcs + 1].src_type = nir_tex_src_ddy; - - nir_ssa_dest_init(&txd->instr, &txd->dest, nir_dest_num_components(tex->dest), - nir_dest_bit_size(tex->dest), NULL); - nir_builder_instr_insert(b, &txd->instr); - nir_ssa_def_rewrite_uses(&tex->dest.ssa, &txd->dest.ssa); - nir_instr_remove(&tex->instr); - return txd; -} - -/* txb(s, coord, bias) = txl(s, coord, lod(s, coord).y + bias) */ -static nir_tex_instr * -lower_txb_to_txl(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_after_instr(&tex->instr); - nir_tex_instr *txl = nir_tex_instr_create(b->shader, tex->num_srcs); - - txl->op = nir_texop_txl; - txl->sampler_dim = tex->sampler_dim; - txl->dest_type = tex->dest_type; - txl->coord_components = tex->coord_components; - txl->texture_index = tex->texture_index; - txl->sampler_index = tex->sampler_index; - txl->is_array = tex->is_array; - txl->is_shadow = tex->is_shadow; - txl->is_new_style_shadow = tex->is_new_style_shadow; - - /* reuse all but bias src */ - for (int i = 0; i < 2; i++) { - if (tex->src[i].src_type != nir_tex_src_bias) { - nir_src_copy(&txl->src[i].src, &tex->src[i].src, &txl->instr); - txl->src[i].src_type = tex->src[i].src_type; - } - } - nir_ssa_def *lod = nir_get_texture_lod(b, txl); - - int bias_idx = nir_tex_instr_src_index(tex, nir_tex_src_bias); - assert(bias_idx >= 0); - lod = nir_fadd(b, nir_channel(b, lod, 1), nir_ssa_for_src(b, tex->src[bias_idx].src, 1)); - txl->src[tex->num_srcs - 1].src = nir_src_for_ssa(lod); - txl->src[tex->num_srcs - 1].src_type = nir_tex_src_lod; - - nir_ssa_dest_init(&txl->instr, &txl->dest, nir_dest_num_components(tex->dest), - nir_dest_bit_size(tex->dest), NULL); - nir_builder_instr_insert(b, &txl->instr); - nir_ssa_def_rewrite_uses(&tex->dest.ssa, &txl->dest.ssa); - nir_instr_remove(&tex->instr); - return txl; -} - -static nir_tex_instr * -saturate_src(nir_builder *b, nir_tex_instr *tex, unsigned sat_mask) -{ - if (tex->op == nir_texop_tex) - tex = lower_tex_to_txd(b, tex); - else if (tex->op == nir_texop_txb) - tex = lower_txb_to_txl(b, tex); - - b->cursor = nir_before_instr(&tex->instr); - int coord_index = nir_tex_instr_src_index(tex, nir_tex_src_coord); - - if (coord_index != -1) { - nir_ssa_def *src = - nir_ssa_for_src(b, tex->src[coord_index].src, tex->coord_components); - - /* split src into components: */ - nir_ssa_def *comp[4]; - - assume(tex->coord_components >= 1); - - for (unsigned j = 0; j < tex->coord_components; j++) - comp[j] = nir_channel(b, src, j); - - /* clamp requested components, array index does not get clamped: */ - unsigned ncomp = tex->coord_components; - if (tex->is_array) - ncomp--; - - for (unsigned j = 0; j < ncomp; j++) { - if ((1 << j) & sat_mask) { - if (tex->sampler_dim == GLSL_SAMPLER_DIM_RECT) { - /* non-normalized texture coords, so clamp to texture - * size rather than [0.0, 1.0] - */ - nir_ssa_def *txs = nir_i2f32(b, nir_get_texture_size(b, tex)); - comp[j] = nir_fmax(b, comp[j], nir_imm_float(b, 0.0)); - comp[j] = nir_fmin(b, comp[j], nir_channel(b, txs, j)); - } else { - comp[j] = nir_fsat(b, comp[j]); - } - } - } - - /* and move the result back into a single vecN: */ - src = nir_vec(b, comp, tex->coord_components); - - nir_instr_rewrite_src(&tex->instr, - &tex->src[coord_index].src, - nir_src_for_ssa(src)); - } - return tex; -} - -static nir_ssa_def * -get_zero_or_one(nir_builder *b, nir_alu_type type, uint8_t swizzle_val) -{ - nir_const_value v[4]; - - memset(&v, 0, sizeof(v)); - - if (swizzle_val == 4) { - v[0].u32 = v[1].u32 = v[2].u32 = v[3].u32 = 0; - } else { - assert(swizzle_val == 5); - if (type == nir_type_float32) - v[0].f32 = v[1].f32 = v[2].f32 = v[3].f32 = 1.0; - else - v[0].u32 = v[1].u32 = v[2].u32 = v[3].u32 = 1; - } - - return nir_build_imm(b, 4, 32, v); -} - -static void -swizzle_tg4_broadcom(nir_builder *b, nir_tex_instr *tex) -{ - assert(tex->dest.is_ssa); - - b->cursor = nir_after_instr(&tex->instr); - - assert(nir_tex_instr_dest_size(tex) == 4); - unsigned swiz[4] = { 2, 3, 1, 0 }; - nir_ssa_def *swizzled = nir_swizzle(b, &tex->dest.ssa, swiz, 4); - - nir_ssa_def_rewrite_uses_after(&tex->dest.ssa, swizzled, - swizzled->parent_instr); -} - -static void -swizzle_result(nir_builder *b, nir_tex_instr *tex, const uint8_t swizzle[4]) -{ - assert(tex->dest.is_ssa); - - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *swizzled; - if (tex->op == nir_texop_tg4) { - if (swizzle[tex->component] < 4) { - /* This one's easy */ - tex->component = swizzle[tex->component]; - return; - } else { - swizzled = get_zero_or_one(b, tex->dest_type, swizzle[tex->component]); - } - } else { - assert(nir_tex_instr_dest_size(tex) == 4); - if (swizzle[0] < 4 && swizzle[1] < 4 && - swizzle[2] < 4 && swizzle[3] < 4) { - unsigned swiz[4] = { swizzle[0], swizzle[1], swizzle[2], swizzle[3] }; - /* We have no 0s or 1s, just emit a swizzling MOV */ - swizzled = nir_swizzle(b, &tex->dest.ssa, swiz, 4); - } else { - nir_ssa_scalar srcs[4]; - for (unsigned i = 0; i < 4; i++) { - if (swizzle[i] < 4) { - srcs[i] = nir_get_ssa_scalar(&tex->dest.ssa, swizzle[i]); - } else { - srcs[i] = nir_get_ssa_scalar(get_zero_or_one(b, tex->dest_type, swizzle[i]), 0); - } - } - swizzled = nir_vec_scalars(b, srcs, 4); - } - } - - nir_ssa_def_rewrite_uses_after(&tex->dest.ssa, swizzled, - swizzled->parent_instr); -} - -static void -linearize_srgb_result(nir_builder *b, nir_tex_instr *tex) -{ - assert(tex->dest.is_ssa); - assert(nir_tex_instr_dest_size(tex) == 4); - assert(nir_alu_type_get_base_type(tex->dest_type) == nir_type_float); - - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *rgb = - nir_format_srgb_to_linear(b, nir_channels(b, &tex->dest.ssa, 0x7)); - - /* alpha is untouched: */ - nir_ssa_def *result = nir_vec4(b, - nir_channel(b, rgb, 0), - nir_channel(b, rgb, 1), - nir_channel(b, rgb, 2), - nir_channel(b, &tex->dest.ssa, 3)); - - nir_ssa_def_rewrite_uses_after(&tex->dest.ssa, result, - result->parent_instr); -} - -/** - * Lowers texture instructions from giving a vec4 result to a vec2 of f16, - * i16, or u16, or a single unorm4x8 value. - * - * Note that we don't change the destination num_components, because - * nir_tex_instr_dest_size() will still return 4. The driver is just expected - * to not store the other channels, given that nothing at the NIR level will - * read them. - */ -static void -lower_tex_packing(nir_builder *b, nir_tex_instr *tex, - const nir_lower_tex_options *options) -{ - nir_ssa_def *color = &tex->dest.ssa; - - b->cursor = nir_after_instr(&tex->instr); - - switch (options->lower_tex_packing[tex->sampler_index]) { - case nir_lower_tex_packing_none: - return; - - case nir_lower_tex_packing_16: { - static const unsigned bits[4] = {16, 16, 16, 16}; - - switch (nir_alu_type_get_base_type(tex->dest_type)) { - case nir_type_float: - switch (nir_tex_instr_dest_size(tex)) { - case 1: - assert(tex->is_shadow && tex->is_new_style_shadow); - color = nir_unpack_half_2x16_split_x(b, nir_channel(b, color, 0)); - break; - case 2: { - nir_ssa_def *rg = nir_channel(b, color, 0); - color = nir_vec2(b, - nir_unpack_half_2x16_split_x(b, rg), - nir_unpack_half_2x16_split_y(b, rg)); - break; - } - case 4: { - nir_ssa_def *rg = nir_channel(b, color, 0); - nir_ssa_def *ba = nir_channel(b, color, 1); - color = nir_vec4(b, - nir_unpack_half_2x16_split_x(b, rg), - nir_unpack_half_2x16_split_y(b, rg), - nir_unpack_half_2x16_split_x(b, ba), - nir_unpack_half_2x16_split_y(b, ba)); - break; - } - default: - unreachable("wrong dest_size"); - } - break; - - case nir_type_int: - color = nir_format_unpack_sint(b, color, bits, 4); - break; - - case nir_type_uint: - color = nir_format_unpack_uint(b, color, bits, 4); - break; - - default: - unreachable("unknown base type"); - } - break; - } - - case nir_lower_tex_packing_8: - assert(nir_alu_type_get_base_type(tex->dest_type) == nir_type_float); - color = nir_unpack_unorm_4x8(b, nir_channel(b, color, 0)); - break; - } - - nir_ssa_def_rewrite_uses_after(&tex->dest.ssa, color, - color->parent_instr); -} - -static bool -lower_array_layer_round_even(nir_builder *b, nir_tex_instr *tex) -{ - int coord_index = nir_tex_instr_src_index(tex, nir_tex_src_coord); - if (coord_index < 0 || nir_tex_instr_src_type(tex, coord_index) != nir_type_float) - return false; - - assert(tex->src[coord_index].src.is_ssa); - nir_ssa_def *coord = tex->src[coord_index].src.ssa; - - b->cursor = nir_before_instr(&tex->instr); - - unsigned layer = tex->coord_components - 1; - nir_ssa_def *rounded_layer = nir_fround_even(b, nir_channel(b, coord, layer)); - nir_ssa_def *new_coord = nir_vector_insert_imm(b, coord, rounded_layer, layer); - - nir_instr_rewrite_src_ssa(&tex->instr, &tex->src[coord_index].src, new_coord); - - return true; -} - -static bool -sampler_index_lt(nir_tex_instr *tex, unsigned max) -{ - assert(nir_tex_instr_src_index(tex, nir_tex_src_sampler_deref) == -1); - - unsigned sampler_index = tex->sampler_index; - - int sampler_offset_idx = - nir_tex_instr_src_index(tex, nir_tex_src_sampler_offset); - if (sampler_offset_idx >= 0) { - if (!nir_src_is_const(tex->src[sampler_offset_idx].src)) - return false; - - sampler_index += nir_src_as_uint(tex->src[sampler_offset_idx].src); - } - - return sampler_index < max; -} - -static bool -lower_tg4_offsets(nir_builder *b, nir_tex_instr *tex) -{ - assert(tex->op == nir_texop_tg4); - assert(nir_tex_instr_has_explicit_tg4_offsets(tex)); - assert(nir_tex_instr_src_index(tex, nir_tex_src_offset) == -1); - - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_scalar dest[5] = { 0 }; - nir_ssa_def *residency = NULL; - for (unsigned i = 0; i < 4; ++i) { - nir_tex_instr *tex_copy = nir_tex_instr_create(b->shader, tex->num_srcs + 1); - tex_copy->op = tex->op; - tex_copy->coord_components = tex->coord_components; - tex_copy->sampler_dim = tex->sampler_dim; - tex_copy->is_array = tex->is_array; - tex_copy->is_shadow = tex->is_shadow; - tex_copy->is_new_style_shadow = tex->is_new_style_shadow; - tex_copy->is_sparse = tex->is_sparse; - tex_copy->component = tex->component; - tex_copy->dest_type = tex->dest_type; - - for (unsigned j = 0; j < tex->num_srcs; ++j) { - nir_src_copy(&tex_copy->src[j].src, &tex->src[j].src, &tex_copy->instr); - tex_copy->src[j].src_type = tex->src[j].src_type; - } - - nir_tex_src src; - src.src = nir_src_for_ssa(nir_imm_ivec2(b, tex->tg4_offsets[i][0], - tex->tg4_offsets[i][1])); - src.src_type = nir_tex_src_offset; - tex_copy->src[tex_copy->num_srcs - 1] = src; - - nir_ssa_dest_init(&tex_copy->instr, &tex_copy->dest, - nir_tex_instr_dest_size(tex), 32, NULL); - - nir_builder_instr_insert(b, &tex_copy->instr); - - dest[i] = nir_get_ssa_scalar(&tex_copy->dest.ssa, 3); - if (tex->is_sparse) { - nir_ssa_def *code = nir_channel(b, &tex_copy->dest.ssa, 4); - if (residency) - residency = nir_sparse_residency_code_and(b, residency, code); - else - residency = code; - } - } - dest[4] = nir_get_ssa_scalar(residency, 0); - - nir_ssa_def *res = nir_vec_scalars(b, dest, tex->dest.ssa.num_components); - nir_ssa_def_rewrite_uses(&tex->dest.ssa, res); - nir_instr_remove(&tex->instr); - - return true; -} - -static bool -nir_lower_txs_lod(nir_builder *b, nir_tex_instr *tex) -{ - int lod_idx = nir_tex_instr_src_index(tex, nir_tex_src_lod); - if (lod_idx < 0 || - (nir_src_is_const(tex->src[lod_idx].src) && - nir_src_as_int(tex->src[lod_idx].src) == 0)) - return false; - - unsigned dest_size = nir_tex_instr_dest_size(tex); - - b->cursor = nir_before_instr(&tex->instr); - nir_ssa_def *lod = nir_ssa_for_src(b, tex->src[lod_idx].src, 1); - - /* Replace the non-0-LOD in the initial TXS operation by a 0-LOD. */ - nir_instr_rewrite_src(&tex->instr, &tex->src[lod_idx].src, - nir_src_for_ssa(nir_imm_int(b, 0))); - - /* TXS(LOD) = max(TXS(0) >> LOD, 1) - * But we do min(TXS(0), TXS(LOD)) to catch the case of a null surface, - * which should return 0, not 1. - */ - b->cursor = nir_after_instr(&tex->instr); - nir_ssa_def *minified = nir_imin(b, &tex->dest.ssa, - nir_imax(b, nir_ushr(b, &tex->dest.ssa, lod), - nir_imm_int(b, 1))); - - /* Make sure the component encoding the array size (if any) is not - * minified. - */ - if (tex->is_array) { - nir_ssa_def *comp[3]; - - assert(dest_size <= ARRAY_SIZE(comp)); - for (unsigned i = 0; i < dest_size - 1; i++) - comp[i] = nir_channel(b, minified, i); - - comp[dest_size - 1] = nir_channel(b, &tex->dest.ssa, dest_size - 1); - minified = nir_vec(b, comp, dest_size); - } - - nir_ssa_def_rewrite_uses_after(&tex->dest.ssa, minified, - minified->parent_instr); - return true; -} - -static void -nir_lower_txs_cube_array(nir_builder *b, nir_tex_instr *tex) -{ - assert(tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE && tex->is_array); - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - - b->cursor = nir_after_instr(&tex->instr); - - assert(tex->dest.is_ssa); - assert(tex->dest.ssa.num_components == 3); - nir_ssa_def *size = &tex->dest.ssa; - size = nir_vec3(b, nir_channel(b, size, 1), - nir_channel(b, size, 1), - nir_idiv(b, nir_channel(b, size, 2), - nir_imm_int(b, 6))); - - nir_ssa_def_rewrite_uses_after(&tex->dest.ssa, size, size->parent_instr); -} - -/* Adjust the sample index according to AMD FMASK (fragment mask). - * - * For uncompressed MSAA surfaces, FMASK should return 0x76543210, - * which is the identity mapping. Each nibble says which physical sample - * should be fetched to get that sample. - * - * For example, 0x11111100 means there are only 2 samples stored and - * the second sample covers 3/4 of the pixel. When reading samples 0 - * and 1, return physical sample 0 (determined by the first two 0s - * in FMASK), otherwise return physical sample 1. - * - * The sample index should be adjusted as follows: - * sample_index = ubfe(fmask, sample_index * 4, 3); - * - * Only extract 3 bits because EQAA can generate number 8 in FMASK, which - * means the physical sample index is unknown. We can map 8 to any valid - * sample index, and extracting only 3 bits will map it to 0, which works - * with all MSAA modes. - */ -static void -nir_lower_ms_txf_to_fragment_fetch(nir_builder *b, nir_tex_instr *tex) -{ - lower_offset(b, tex); - - b->cursor = nir_before_instr(&tex->instr); - - /* Create FMASK fetch. */ - assert(tex->texture_index == 0); - nir_tex_instr *fmask_fetch = nir_tex_instr_create(b->shader, tex->num_srcs - 1); - fmask_fetch->op = nir_texop_fragment_mask_fetch_amd; - fmask_fetch->coord_components = tex->coord_components; - fmask_fetch->sampler_dim = tex->sampler_dim; - fmask_fetch->is_array = tex->is_array; - fmask_fetch->texture_non_uniform = tex->texture_non_uniform; - fmask_fetch->dest_type = nir_type_uint32; - nir_ssa_dest_init(&fmask_fetch->instr, &fmask_fetch->dest, 1, 32, NULL); - - fmask_fetch->num_srcs = 0; - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (tex->src[i].src_type == nir_tex_src_ms_index) - continue; - nir_tex_src *src = &fmask_fetch->src[fmask_fetch->num_srcs++]; - src->src = nir_src_for_ssa(tex->src[i].src.ssa); - src->src_type = tex->src[i].src_type; - } - - nir_builder_instr_insert(b, &fmask_fetch->instr); - - /* Obtain new sample index. */ - int ms_index = nir_tex_instr_src_index(tex, nir_tex_src_ms_index); - assert(ms_index >= 0); - nir_src sample = tex->src[ms_index].src; - nir_ssa_def *new_sample = nir_ubfe(b, &fmask_fetch->dest.ssa, - nir_ishl_imm(b, sample.ssa, 2), nir_imm_int(b, 3)); - - /* Update instruction. */ - tex->op = nir_texop_fragment_fetch_amd; - nir_instr_rewrite_src_ssa(&tex->instr, &tex->src[ms_index].src, new_sample); -} - -static void -nir_lower_samples_identical_to_fragment_fetch(nir_builder *b, nir_tex_instr *tex) -{ - b->cursor = nir_after_instr(&tex->instr); - - nir_tex_instr *fmask_fetch = nir_instr_as_tex(nir_instr_clone(b->shader, &tex->instr)); - fmask_fetch->op = nir_texop_fragment_mask_fetch_amd; - fmask_fetch->dest_type = nir_type_uint32; - nir_ssa_dest_init(&fmask_fetch->instr, &fmask_fetch->dest, 1, 32, NULL); - nir_builder_instr_insert(b, &fmask_fetch->instr); - - nir_ssa_def_rewrite_uses(&tex->dest.ssa, nir_ieq_imm(b, &fmask_fetch->dest.ssa, 0)); - nir_instr_remove_v(&tex->instr); -} - -static void -nir_lower_lod_zero_width(nir_builder *b, nir_tex_instr *tex) -{ - int coord_index = nir_tex_instr_src_index(tex, nir_tex_src_coord); - assert(coord_index >= 0); - - b->cursor = nir_after_instr(&tex->instr); - - nir_ssa_def *is_zero = nir_imm_bool(b, true); - for (unsigned i = 0; i < tex->coord_components; i++) { - nir_ssa_def *coord = nir_channel(b, tex->src[coord_index].src.ssa, i); - - /* Compute the sum of the absolute values of derivatives. */ - nir_ssa_def *dfdx = nir_fddx(b, coord); - nir_ssa_def *dfdy = nir_fddy(b, coord); - nir_ssa_def *fwidth = nir_fadd(b, nir_fabs(b, dfdx), nir_fabs(b, dfdy)); - - /* Check if the sum is 0. */ - is_zero = nir_iand(b, is_zero, nir_feq(b, fwidth, nir_imm_float(b, 0.0))); - } - - /* Replace the raw LOD by -FLT_MAX if the sum is 0 for all coordinates. */ - nir_ssa_def *adjusted_lod = - nir_bcsel(b, is_zero, nir_imm_float(b, -FLT_MAX), - nir_channel(b, &tex->dest.ssa, 1)); - - nir_ssa_def *def = - nir_vec2(b, nir_channel(b, &tex->dest.ssa, 0), adjusted_lod); - - nir_ssa_def_rewrite_uses_after(&tex->dest.ssa, def, def->parent_instr); -} - -static bool -lower_index_to_offset(nir_builder *b, nir_tex_instr *tex) -{ - bool progress = false; - b->cursor = nir_before_instr(&tex->instr); - - for (unsigned i = 0; i < tex->num_srcs; i++) { - unsigned *index; - switch (tex->src[i].src_type) { - case nir_tex_src_texture_offset: - index = &tex->texture_index; - break; - case nir_tex_src_sampler_offset: - index = &tex->sampler_index; - break; - default: - continue; - } - - /* If there's no base index, there's nothing to lower */ - if ((*index) == 0) - continue; - - assert(tex->src[i].src.is_ssa); - nir_ssa_def *sum = nir_iadd_imm(b, tex->src[i].src.ssa, *index); - nir_instr_rewrite_src(&tex->instr, &tex->src[i].src, - nir_src_for_ssa(sum)); - *index = 0; - progress = true; - } - - return progress; -} - -static bool -nir_lower_tex_block(nir_block *block, nir_builder *b, - const nir_lower_tex_options *options, - const struct nir_shader_compiler_options *compiler_options) -{ - bool progress = false; - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_tex) - continue; - - nir_tex_instr *tex = nir_instr_as_tex(instr); - bool lower_txp = !!(options->lower_txp & (1 << tex->sampler_dim)); - - /* mask of src coords to saturate (clamp): */ - unsigned sat_mask = 0; - /* ignore saturate for txf ops: these don't use samplers and can't GL_CLAMP */ - if (nir_tex_instr_need_sampler(tex)) { - if ((1 << tex->sampler_index) & options->saturate_r) - sat_mask |= (1 << 2); /* .z */ - if ((1 << tex->sampler_index) & options->saturate_t) - sat_mask |= (1 << 1); /* .y */ - if ((1 << tex->sampler_index) & options->saturate_s) - sat_mask |= (1 << 0); /* .x */ - } - - if (options->lower_index_to_offset) - progress |= lower_index_to_offset(b, tex); - - /* If we are clamping any coords, we must lower projector first - * as clamping happens *after* projection: - */ - if (lower_txp || sat_mask || - (options->lower_txp_array && tex->is_array)) { - progress |= project_src(b, tex); - } - - if ((tex->op == nir_texop_txf && options->lower_txf_offset) || - (sat_mask && nir_tex_instr_src_index(tex, nir_tex_src_coord) >= 0) || - (tex->sampler_dim == GLSL_SAMPLER_DIM_RECT && - options->lower_rect_offset) || - (options->lower_offset_filter && - options->lower_offset_filter(instr, options->callback_data))) { - progress = lower_offset(b, tex) || progress; - } - - if ((tex->sampler_dim == GLSL_SAMPLER_DIM_RECT) && options->lower_rect && - tex->op != nir_texop_txf) { - if (nir_tex_instr_is_query(tex)) - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; - else if (compiler_options->has_txs) - lower_rect(b, tex); - else - lower_rect_tex_scale(b, tex); - - progress = true; - } - - unsigned texture_index = tex->texture_index; - uint32_t texture_mask = 1u << texture_index; - int tex_index = nir_tex_instr_src_index(tex, nir_tex_src_texture_deref); - if (tex_index >= 0) { - nir_deref_instr *deref = nir_src_as_deref(tex->src[tex_index].src); - nir_variable *var = nir_deref_instr_get_variable(deref); - texture_index = var ? var->data.binding : 0; - texture_mask = var && texture_index < 32 ? (1u << texture_index) : 0u; - } - - if (texture_mask & options->lower_y_uv_external) { - lower_y_uv_external(b, tex, options, texture_index); - progress = true; - } - - if (texture_mask & options->lower_y_u_v_external) { - lower_y_u_v_external(b, tex, options, texture_index); - progress = true; - } - - if (texture_mask & options->lower_yx_xuxv_external) { - lower_yx_xuxv_external(b, tex, options, texture_index); - progress = true; - } - - if (texture_mask & options->lower_xy_uxvx_external) { - lower_xy_uxvx_external(b, tex, options, texture_index); - progress = true; - } - - if (texture_mask & options->lower_ayuv_external) { - lower_ayuv_external(b, tex, options, texture_index); - progress = true; - } - - if (texture_mask & options->lower_xyuv_external) { - lower_xyuv_external(b, tex, options, texture_index); - progress = true; - } - - if (texture_mask & options->lower_yuv_external) { - lower_yuv_external(b, tex, options, texture_index); - progress = true; - } - - if ((1 << tex->texture_index) & options->lower_yu_yv_external) { - lower_yu_yv_external(b, tex, options, texture_index); - progress = true; - } - - if ((1 << tex->texture_index) & options->lower_y41x_external) { - lower_y41x_external(b, tex, options, texture_index); - progress = true; - } - - if (sat_mask) { - tex = saturate_src(b, tex, sat_mask); - progress = true; - } - - if (tex->op == nir_texop_tg4 && options->lower_tg4_broadcom_swizzle) { - swizzle_tg4_broadcom(b, tex); - progress = true; - } - - if ((texture_mask & options->swizzle_result) && - !nir_tex_instr_is_query(tex) && - !(tex->is_shadow && tex->is_new_style_shadow)) { - swizzle_result(b, tex, options->swizzles[tex->texture_index]); - progress = true; - } - - /* should be after swizzle so we know which channels are rgb: */ - if ((texture_mask & options->lower_srgb) && - !nir_tex_instr_is_query(tex) && !tex->is_shadow) { - linearize_srgb_result(b, tex); - progress = true; - } - - const bool has_min_lod = - nir_tex_instr_src_index(tex, nir_tex_src_min_lod) >= 0; - const bool has_offset = - nir_tex_instr_src_index(tex, nir_tex_src_offset) >= 0; - - if (tex->op == nir_texop_txb && tex->is_shadow && has_min_lod && - options->lower_txb_shadow_clamp) { - lower_implicit_lod(b, tex); - progress = true; - } - - if (options->lower_tex_packing[tex->sampler_index] != - nir_lower_tex_packing_none && - tex->op != nir_texop_txs && - tex->op != nir_texop_query_levels && - tex->op != nir_texop_texture_samples) { - lower_tex_packing(b, tex, options); - progress = true; - } - - if (options->lower_array_layer_round_even && tex->is_array && - tex->op != nir_texop_lod) { - progress |= lower_array_layer_round_even(b, tex); - } - - if (tex->op == nir_texop_txd && - (options->lower_txd || - (options->lower_txd_shadow && tex->is_shadow) || - (options->lower_txd_shadow_clamp && tex->is_shadow && has_min_lod) || - (options->lower_txd_offset_clamp && has_offset && has_min_lod) || - (options->lower_txd_clamp_bindless_sampler && has_min_lod && - nir_tex_instr_src_index(tex, nir_tex_src_sampler_handle) != -1) || - (options->lower_txd_clamp_if_sampler_index_not_lt_16 && - has_min_lod && !sampler_index_lt(tex, 16)) || - (options->lower_txd_cube_map && - tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE) || - (options->lower_txd_3d && - tex->sampler_dim == GLSL_SAMPLER_DIM_3D) || - (options->lower_txd_array && tex->is_array))) { - lower_gradient(b, tex); - progress = true; - continue; - } - - /* TXF, TXS and TXL require a LOD but not everything we implement using those - * three opcodes provides one. Provide a default LOD of 0. - */ - if ((nir_tex_instr_src_index(tex, nir_tex_src_lod) == -1) && - (tex->op == nir_texop_txf || tex->op == nir_texop_txs || - tex->op == nir_texop_txl || tex->op == nir_texop_query_levels)) { - b->cursor = nir_before_instr(&tex->instr); - nir_tex_instr_add_src(tex, nir_tex_src_lod, nir_src_for_ssa(nir_imm_int(b, 0))); - progress = true; - continue; - } - - /* Only fragment and compute (in some cases) support implicit - * derivatives. Lower those opcodes which use implicit derivatives to - * use an explicit LOD of 0. - * But don't touch RECT samplers because they don't have mips. - */ - if (options->lower_invalid_implicit_lod && - nir_tex_instr_has_implicit_derivative(tex) && - tex->sampler_dim != GLSL_SAMPLER_DIM_RECT && - !nir_shader_supports_implicit_lod(b->shader)) { - lower_zero_lod(b, tex); - progress = true; - } - - if (options->lower_txs_lod && tex->op == nir_texop_txs) { - progress |= nir_lower_txs_lod(b, tex); - continue; - } - - if (options->lower_txs_cube_array && tex->op == nir_texop_txs && - tex->sampler_dim == GLSL_SAMPLER_DIM_CUBE && tex->is_array) { - nir_lower_txs_cube_array(b, tex); - progress = true; - continue; - } - - /* has to happen after all the other lowerings as the original tg4 gets - * replaced by 4 tg4 instructions. - */ - if (tex->op == nir_texop_tg4 && - nir_tex_instr_has_explicit_tg4_offsets(tex) && - options->lower_tg4_offsets) { - progress |= lower_tg4_offsets(b, tex); - continue; - } - - if (options->lower_to_fragment_fetch_amd && tex->op == nir_texop_txf_ms) { - nir_lower_ms_txf_to_fragment_fetch(b, tex); - progress = true; - continue; - } - - if (options->lower_to_fragment_fetch_amd && tex->op == nir_texop_samples_identical) { - nir_lower_samples_identical_to_fragment_fetch(b, tex); - progress = true; - continue; - } - - if (options->lower_lod_zero_width && tex->op == nir_texop_lod) { - nir_lower_lod_zero_width(b, tex); - progress = true; - continue; - } - } - - return progress; -} - -static bool -nir_lower_tex_impl(nir_function_impl *impl, - const nir_lower_tex_options *options, - const struct nir_shader_compiler_options *compiler_options) -{ - bool progress = false; - nir_builder builder; - nir_builder_init(&builder, impl); - - nir_foreach_block(block, impl) { - progress |= nir_lower_tex_block(block, &builder, options, compiler_options); - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - return progress; -} - -bool -nir_lower_tex(nir_shader *shader, const nir_lower_tex_options *options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_lower_tex_impl(function->impl, options, shader->options); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_tex_shadow.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_tex_shadow.c deleted file mode 100644 index 791fbf1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_tex_shadow.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright © Microsoft Corporation - * - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_builtin_builder.h" - -static bool -nir_lower_tex_shadow_filter(const nir_instr *instr, - UNUSED const void *_options) -{ - if (instr->type != nir_instr_type_tex) - return false; - - /* To be consistent we also want to lower tex when we lower anything, - * otherwise the differences in evaluating the shadow value might lead - * to artifacts. */ - nir_tex_instr *tex = nir_instr_as_tex(instr); - if (tex->op != nir_texop_txb && - tex->op != nir_texop_txl && - tex->op != nir_texop_txd && - tex->op != nir_texop_tex) - return false; - - return tex->is_shadow; -} - -static const struct glsl_type * -strip_shadow(const struct glsl_type *type) -{ - const struct glsl_type *new_type = - glsl_sampler_type( - glsl_get_sampler_dim(type), - false, glsl_sampler_type_is_array(type), - GLSL_TYPE_FLOAT); - return new_type; -} - - -static const struct glsl_type * -strip_shadow_with_array(const struct glsl_type *type) -{ - if (glsl_type_is_array(type)) - return glsl_array_type(strip_shadow(glsl_without_array(type)), - glsl_get_length(type), 0); - return strip_shadow(type); -} - -typedef struct { - unsigned n_states; - enum compare_func *compare_func; - nir_lower_tex_shadow_swizzle *tex_swizzles; -} sampler_state; - -static nir_ssa_def * -nir_lower_tex_shadow_impl(nir_builder *b, nir_instr *instr, void *options) - -{ - nir_tex_instr *tex = nir_instr_as_tex(instr); - - sampler_state *state = (sampler_state *)options; - unsigned num_components = nir_tex_instr_result_size(tex); - - b->cursor = nir_after_instr(instr); - tex->is_shadow = false; - - int comp_index = nir_tex_instr_src_index(tex, nir_tex_src_comparator); - unsigned sampler_binding = tex->texture_index; - - nir_deref_instr *sampler_deref = NULL; - nir_variable *sampler = NULL; - - int sampler_index = nir_tex_instr_src_index(tex, nir_tex_src_sampler_deref); - if (sampler_index >= 0) { - sampler_deref = nir_instr_as_deref(tex->src[sampler_index].src.ssa->parent_instr); - sampler = nir_deref_instr_get_variable(sampler_deref); - sampler_binding = sampler ? sampler->data.binding : 0; - } - - /* NIR expects a vec4 result from the above texture instructions */ - nir_ssa_dest_init(&tex->instr, &tex->dest, 4, 32, NULL); - - nir_ssa_def *tex_r = nir_channel(b, &tex->dest.ssa, 0); - nir_ssa_def *cmp = tex->src[comp_index].src.ssa; - - int proj_index = nir_tex_instr_src_index(tex, nir_tex_src_projector); - if (proj_index >= 0) - cmp = nir_fmul(b, cmp, nir_frcp(b, tex->src[proj_index].src.ssa)); - - nir_ssa_def * result = - nir_compare_func(b, - sampler_binding < state->n_states ? - state->compare_func[sampler_binding] : COMPARE_FUNC_ALWAYS, - cmp, tex_r); - - result = nir_b2f32(b, result); - nir_ssa_def *one = nir_imm_float(b, 1.0); - nir_ssa_def *zero = nir_imm_float(b, 0.0); - - nir_ssa_def *lookup[6] = {result, NULL, NULL, NULL, zero, one}; - nir_ssa_def *r[4] = { result, result, result, result }; - - if (sampler_binding < state->n_states) { - r[0] = lookup[state->tex_swizzles[sampler_binding].swizzle_r]; - r[1] = lookup[state->tex_swizzles[sampler_binding].swizzle_g]; - r[2] = lookup[state->tex_swizzles[sampler_binding].swizzle_b]; - r[3] = lookup[state->tex_swizzles[sampler_binding].swizzle_a]; - } - - result = nir_vec(b, r, num_components); - - if (sampler_index >= 0) { - sampler->type = strip_shadow_with_array(sampler->type); - sampler_deref->type = sampler->type; - } - - tex->is_shadow = false; - nir_tex_instr_remove_src(tex, comp_index); - - return result; -} - -bool -nir_lower_tex_shadow(nir_shader *s, - unsigned n_states, - enum compare_func *compare_func, - nir_lower_tex_shadow_swizzle *tex_swizzles) -{ - sampler_state state = {n_states, compare_func, tex_swizzles}; - - bool result = - nir_shader_lower_instructions(s, - nir_lower_tex_shadow_filter, - nir_lower_tex_shadow_impl, - &state); - return result; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace.c deleted file mode 100644 index 446f802..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright © 2020 Collabora, Ltd. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Erik Faye-Lund - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -static nir_ssa_def * -get_io_index(nir_builder *b, nir_deref_instr *deref) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - assert(path.path[0]->deref_type == nir_deref_type_var); - nir_deref_instr **p = &path.path[1]; - - /* Just emit code and let constant-folding go to town */ - nir_ssa_def *offset = nir_imm_int(b, 0); - - for (; *p; p++) { - if ((*p)->deref_type == nir_deref_type_array) { - unsigned size = glsl_get_length((*p)->type); - - nir_ssa_def *mul = - nir_amul_imm(b, nir_ssa_for_src(b, (*p)->arr.index, 1), size); - - offset = nir_iadd(b, offset, mul); - } else - unreachable("Unsupported deref type"); - } - - nir_deref_path_finish(&path); - - return offset; -} - -static void -nir_lower_texcoord_replace_impl(nir_function_impl *impl, - unsigned coord_replace, - bool point_coord_is_sysval, - bool yinvert) -{ - nir_builder b; - - nir_builder_init(&b, impl); - b.cursor = nir_before_cf_list(&impl->body); - - nir_ssa_def *new_coord; - if (point_coord_is_sysval) { - new_coord = nir_load_system_value(&b, nir_intrinsic_load_point_coord, - 0, 2, 32); - } else { - /* find or create pntc */ - nir_variable *pntc = nir_find_variable_with_location(b.shader, - nir_var_shader_in, - VARYING_SLOT_PNTC); - if (!pntc) { - pntc = nir_variable_create(b.shader, nir_var_shader_in, - glsl_vec_type(2), "gl_PointCoord"); - pntc->data.location = VARYING_SLOT_PNTC; - pntc->data.driver_location = b.shader->num_inputs++; - b.shader->info.inputs_read |= BITFIELD64_BIT(VARYING_SLOT_PNTC); - } - - new_coord = nir_load_var(&b, pntc); - } - - /* point-coord is two-component, need to add two implicit ones in case of - * projective texturing etc. - */ - nir_ssa_def *zero = nir_imm_zero(&b, 1, new_coord->bit_size); - nir_ssa_def *one = nir_imm_floatN_t(&b, 1.0, new_coord->bit_size); - nir_ssa_def *y = nir_channel(&b, new_coord, 1); - if (yinvert) - y = nir_fsub(&b, nir_imm_float(&b, 1.0), y); - new_coord = nir_vec4(&b, nir_channel(&b, new_coord, 0), - y, - zero, one); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref) - continue; - - nir_variable *var = nir_intrinsic_get_var(intrin, 0); - if (var->data.mode != nir_var_shader_in || - var->data.location < VARYING_SLOT_TEX0 || - var->data.location > VARYING_SLOT_TEX7) - continue; - unsigned base = var->data.location - VARYING_SLOT_TEX0; - - b.cursor = nir_after_instr(instr); - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_ssa_def *index = get_io_index(&b, deref); - nir_ssa_def *mask = - nir_ishl(&b, nir_imm_int(&b, 1), - nir_iadd_imm(&b, index, base)); - - nir_ssa_def *cond = nir_test_mask(&b, mask, coord_replace); - nir_ssa_def *result = nir_bcsel(&b, cond, new_coord, - &intrin->dest.ssa); - - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - result, - result->parent_instr); - } - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); -} - -void -nir_lower_texcoord_replace(nir_shader *s, unsigned coord_replace, - bool point_coord_is_sysval, bool yinvert) -{ - assert(s->info.stage == MESA_SHADER_FRAGMENT); - assert(coord_replace != 0); - - nir_foreach_function(function, s) { - if (function->impl) - nir_lower_texcoord_replace_impl(function->impl, coord_replace, - point_coord_is_sysval, yinvert); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace_late.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace_late.c deleted file mode 100644 index d699786..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_texcoord_replace_late.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2022 Alyssa Rosenzweig - * Copyright 2020 Collabora, Ltd. - * SPDX-License-Identifier: MIT - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -struct opts { - unsigned coord_replace; - bool point_coord_is_sysval; -}; - -static nir_ssa_def * -nir_channel_or_undef(nir_builder *b, nir_ssa_def *def, signed int channel) -{ - if (channel >= 0 && channel < def->num_components) - return nir_channel(b, def, channel); - else - return nir_ssa_undef(b, def->bit_size, 1); -} - -static bool -pass(nir_builder *b, nir_instr *instr, void *data) -{ - struct opts *opts = data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_load_interpolated_input && - intr->intrinsic != nir_intrinsic_load_input) - return false; - - nir_src *offset = nir_get_io_offset_src(intr); - assert(nir_src_is_const(*offset) && "no indirects supported"); - - nir_io_semantics sem = nir_intrinsic_io_semantics(intr); - unsigned location = sem.location + nir_src_as_uint(*offset); - signed component = nir_intrinsic_component(intr); - - if (location < VARYING_SLOT_TEX0 || location > VARYING_SLOT_TEX7) - return false; - - if (!(opts->coord_replace & BITFIELD_BIT(location - VARYING_SLOT_TEX0))) - return false; - - b->cursor = nir_before_instr(instr); - nir_ssa_def *channels[4] = { - NULL, NULL, - nir_imm_float(b, 0.0), - nir_imm_float(b, 1.0) - }; - - if (opts->point_coord_is_sysval) { - nir_ssa_def *pntc = nir_load_point_coord(b); - - b->cursor = nir_after_instr(instr); - channels[0] = nir_channel(b, pntc, 0); - channels[1] = nir_channel(b, pntc, 1); - } else { - sem.location = VARYING_SLOT_PNTC; - nir_instr_rewrite_src_ssa(instr, offset, nir_imm_int(b, 0)); - nir_intrinsic_set_io_semantics(intr, sem); - nir_ssa_def *raw = &intr->dest.ssa; - - b->cursor = nir_after_instr(instr); - channels[0] = nir_channel_or_undef(b, raw, 0 - component); - channels[1] = nir_channel_or_undef(b, raw, 1 - component); - } - - nir_ssa_def *res = nir_vec(b, &channels[component], intr->num_components); - nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, res, - res->parent_instr); - return true; -} - -void -nir_lower_texcoord_replace_late(nir_shader *s, unsigned coord_replace, - bool point_coord_is_sysval) -{ - assert(s->info.stage == MESA_SHADER_FRAGMENT); - assert(coord_replace != 0); - - uint64_t replace_mask = (((uint64_t) coord_replace) << VARYING_SLOT_TEX0); - - /* If no relevant texcoords are read, there's nothing to do */ - if (!(s->info.inputs_read & replace_mask)) - return; - - /* Otherwise, we're going to replace these texcoord reads with a PNTC read */ - s->info.inputs_read &= ~(((uint64_t) coord_replace) << VARYING_SLOT_TEX0); - - if (!point_coord_is_sysval) - s->info.inputs_read |= BITFIELD64_BIT(VARYING_SLOT_PNTC); - - nir_shader_instructions_pass(s, pass, - nir_metadata_block_index | nir_metadata_dominance, - &(struct opts) { - .coord_replace = coord_replace, - .point_coord_is_sysval = point_coord_is_sysval, - }); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_to_source_mods.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_to_source_mods.c deleted file mode 100644 index 64ac810..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_to_source_mods.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -/* - * This pass lowers the neg, abs, and sat operations to source modifiers on - * ALU operations to make things nicer for the backend. It's just much - * easier to not have them when we're doing optimizations. - */ - -static void -alu_src_consume_abs(nir_alu_src *src) -{ - src->abs = true; -} - -static void -alu_src_consume_negate(nir_alu_src *src) -{ - /* If abs is set on the source, the negate goes away */ - if (!src->abs) - src->negate = !src->negate; -} - -static bool -nir_lower_to_source_mods_block(nir_block *block, - nir_lower_to_source_mods_flags options) -{ - bool progress = false; - - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - - bool lower_abs = (nir_op_infos[alu->op].num_inputs < 3) || - (options & nir_lower_triop_abs); - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (!alu->src[i].src.is_ssa) - continue; - - if (alu->src[i].src.ssa->parent_instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *parent = nir_instr_as_alu(alu->src[i].src.ssa->parent_instr); - - if (parent->dest.saturate) - continue; - - switch (nir_alu_type_get_base_type(nir_op_infos[alu->op].input_types[i])) { - case nir_type_float: - if (!(options & nir_lower_float_source_mods)) - continue; - if (!(parent->op == nir_op_fabs && (options & nir_lower_fabs_source_mods)) && - !(parent->op == nir_op_fneg && (options & nir_lower_fneg_source_mods))) { - continue; - } - break; - case nir_type_int: - if (!(options & nir_lower_int_source_mods)) - continue; - if (parent->op != nir_op_iabs && parent->op != nir_op_ineg) - continue; - break; - default: - continue; - } - - if (nir_src_bit_size(alu->src[i].src) == 64 && - !(options & nir_lower_64bit_source_mods)) { - continue; - } - - /* We can only do a rewrite if the source we are copying is SSA. - * Otherwise, moving the read might invalidly reorder reads/writes - * on a register. - */ - if (!parent->src[0].src.is_ssa) - continue; - - if (!lower_abs && (parent->op == nir_op_fabs || - parent->op == nir_op_iabs || - parent->src[0].abs)) - continue; - - nir_instr_rewrite_src(instr, &alu->src[i].src, parent->src[0].src); - - /* Apply any modifiers that come from the parent opcode */ - if (parent->op == nir_op_fneg || parent->op == nir_op_ineg) - alu_src_consume_negate(&alu->src[i]); - if (parent->op == nir_op_fabs || parent->op == nir_op_iabs) - alu_src_consume_abs(&alu->src[i]); - - /* Apply modifiers from the parent source */ - if (parent->src[0].negate) - alu_src_consume_negate(&alu->src[i]); - if (parent->src[0].abs) - alu_src_consume_abs(&alu->src[i]); - - for (int j = 0; j < 4; ++j) { - if (!nir_alu_instr_channel_used(alu, i, j)) - continue; - alu->src[i].swizzle[j] = parent->src[0].swizzle[alu->src[i].swizzle[j]]; - } - - if (nir_ssa_def_is_unused(&parent->dest.dest.ssa)) - nir_instr_remove(&parent->instr); - - progress = true; - } - - /* We've covered sources. Now we're going to try and saturate the - * destination if we can. - */ - - if (!alu->dest.dest.is_ssa) - continue; - - if (nir_dest_bit_size(alu->dest.dest) == 64 && - !(options & nir_lower_64bit_source_mods)) { - continue; - } - - /* We can only saturate float destinations */ - if (nir_alu_type_get_base_type(nir_op_infos[alu->op].output_type) != - nir_type_float) - continue; - - if (!(options & nir_lower_float_source_mods)) - continue; - - bool all_children_are_sat = true; - nir_foreach_use_including_if(child_src, &alu->dest.dest.ssa) { - if (child_src->is_if) { - all_children_are_sat = false; - break; - } - - assert(child_src->is_ssa); - nir_instr *child = child_src->parent_instr; - if (child->type != nir_instr_type_alu) { - all_children_are_sat = false; - continue; - } - - nir_alu_instr *child_alu = nir_instr_as_alu(child); - if (child_alu->src[0].negate || child_alu->src[0].abs) { - all_children_are_sat = false; - continue; - } - - if (child_alu->op != nir_op_fsat) { - all_children_are_sat = false; - continue; - } - } - - if (!all_children_are_sat) - continue; - - alu->dest.saturate = true; - progress = true; - - nir_foreach_use(child_src, &alu->dest.dest.ssa) { - assert(child_src->is_ssa); - nir_alu_instr *child_alu = nir_instr_as_alu(child_src->parent_instr); - - child_alu->op = nir_op_mov; - child_alu->dest.saturate = false; - /* We could propagate the dest of our instruction to the - * destinations of the uses here. However, one quick round of - * copy propagation will clean that all up and then we don't have - * the complexity. - */ - } - } - - return progress; -} - -static bool -nir_lower_to_source_mods_impl(nir_function_impl *impl, - nir_lower_to_source_mods_flags options) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - progress |= nir_lower_to_source_mods_block(block, options); - } - - if (progress) - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - return progress; -} - -bool -nir_lower_to_source_mods(nir_shader *shader, - nir_lower_to_source_mods_flags options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_lower_to_source_mods_impl(function->impl, options); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_two_sided_color.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_two_sided_color.c deleted file mode 100644 index e2740d8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_two_sided_color.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Rob Clark - */ - -#include "nir.h" -#include "nir_builder.h" - -#define MAX_COLORS 2 /* VARYING_SLOT_COL0/COL1 */ - -typedef struct { - nir_builder b; - nir_shader *shader; - bool face_sysval; - struct { - nir_variable *front; /* COLn */ - nir_variable *back; /* BFCn */ - } colors[MAX_COLORS]; - nir_variable *face; - int colors_count; -} lower_2side_state; - - -/* Lowering pass for fragment shaders to emulated two-sided-color. For - * each COLOR input, a corresponding BCOLOR input is created, and bcsel - * instruction used to select front or back color based on FACE. - */ - -static nir_variable * -create_input(nir_shader *shader, gl_varying_slot slot, - enum glsl_interp_mode interpolation) -{ - nir_variable *var = nir_variable_create(shader, nir_var_shader_in, - glsl_vec4_type(), NULL); - - var->data.driver_location = shader->num_inputs++; - var->name = ralloc_asprintf(var, "in_%d", var->data.driver_location); - var->data.index = 0; - var->data.location = slot; - var->data.interpolation = interpolation; - - return var; -} - -static nir_variable * -create_face_input(nir_shader *shader) -{ - nir_variable *var = - nir_find_variable_with_location(shader, nir_var_shader_in, - VARYING_SLOT_FACE); - - if (var == NULL) { - var = nir_variable_create(shader, nir_var_shader_in, - glsl_bool_type(), "gl_FrontFacing"); - - var->data.driver_location = shader->num_inputs++; - var->data.index = 0; - var->data.location = VARYING_SLOT_FACE; - var->data.interpolation = INTERP_MODE_FLAT; - } - - return var; -} - -static nir_ssa_def * -load_input(nir_builder *b, nir_variable *in) -{ - return nir_load_input(b, 4, 32, nir_imm_int(b, 0), - .base = in->data.driver_location); -} - -static int -setup_inputs(lower_2side_state *state) -{ - /* find color inputs: */ - nir_foreach_shader_in_variable(var, state->shader) { - switch (var->data.location) { - case VARYING_SLOT_COL0: - case VARYING_SLOT_COL1: - assert(state->colors_count < ARRAY_SIZE(state->colors)); - state->colors[state->colors_count].front = var; - state->colors_count++; - break; - } - } - - /* if we don't have any color inputs, nothing to do: */ - if (state->colors_count == 0) - return -1; - - /* add required back-face color inputs: */ - for (int i = 0; i < state->colors_count; i++) { - gl_varying_slot slot; - - if (state->colors[i].front->data.location == VARYING_SLOT_COL0) - slot = VARYING_SLOT_BFC0; - else - slot = VARYING_SLOT_BFC1; - - state->colors[i].back = create_input( - state->shader, slot, - state->colors[i].front->data.interpolation); - } - - if (!state->face_sysval) - state->face = create_face_input(state->shader); - - return 0; -} - -static bool -nir_lower_two_sided_color_block(nir_block *block, - lower_2side_state *state) -{ - nir_builder *b = &state->b; - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - int idx; - if (intr->intrinsic == nir_intrinsic_load_input) { - for (idx = 0; idx < state->colors_count; idx++) { - unsigned drvloc = - state->colors[idx].front->data.driver_location; - if (nir_intrinsic_base(intr) == drvloc) { - assert(nir_src_is_const(intr->src[0])); - break; - } - } - } else if (intr->intrinsic == nir_intrinsic_load_deref) { - nir_variable *var = nir_intrinsic_get_var(intr, 0); - if (var->data.mode != nir_var_shader_in) - continue; - - for (idx = 0; idx < state->colors_count; idx++) { - unsigned loc = state->colors[idx].front->data.location; - if (var->data.location == loc) - break; - } - } else - continue; - - if (idx == state->colors_count) - continue; - - /* replace load_input(COLn) with - * bcsel(load_system_value(FACE), load_input(COLn), load_input(BFCn)) - */ - b->cursor = nir_before_instr(&intr->instr); - /* gl_FrontFace is a boolean but the intrinsic constructor creates - * 32-bit value by default. - */ - nir_ssa_def *face; - if (state->face_sysval) - face = nir_load_front_face(b, 1); - else - face = nir_load_var(b, state->face); - - nir_ssa_def *front, *back; - if (intr->intrinsic == nir_intrinsic_load_deref) { - front = nir_load_var(b, state->colors[idx].front); - back = nir_load_var(b, state->colors[idx].back); - } else { - front = load_input(b, state->colors[idx].front); - back = load_input(b, state->colors[idx].back); - } - nir_ssa_def *color = nir_bcsel(b, face, front, back); - - assert(intr->dest.is_ssa); - nir_ssa_def_rewrite_uses(&intr->dest.ssa, color); - } - - return true; -} - -static void -nir_lower_two_sided_color_impl(nir_function_impl *impl, - lower_2side_state *state) -{ - nir_builder *b = &state->b; - - nir_builder_init(b, impl); - - nir_foreach_block(block, impl) { - nir_lower_two_sided_color_block(block, state); - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); -} - -void -nir_lower_two_sided_color(nir_shader *shader, bool face_sysval) -{ - lower_2side_state state = { - .shader = shader, - .face_sysval = face_sysval, - }; - - if (shader->info.stage != MESA_SHADER_FRAGMENT) - return; - - if (setup_inputs(&state) != 0) - return; - - nir_foreach_function(function, shader) { - if (function->impl) - nir_lower_two_sided_color_impl(function->impl, &state); - } - -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_ubo_vec4.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_ubo_vec4.c deleted file mode 100644 index 17937ac..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_ubo_vec4.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright © 2020 Google LLC - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* Lowers nir_intrinsic_load_ubo() to nir_intrinsic_load_ubo_vec4() taking an - * offset in vec4 units. This is a fairly common mode of UBO addressing for - * hardware to have, and it gives NIR a chance to optimize the addressing math - * and CSE the loads. - * - * This pass handles lowering for loads that straddle a vec4 alignment - * boundary. We try to minimize the extra loads we generate for that case, - * and are ensured non-straddling loads with: - * - * - std140 (GLSL 1.40, GLSL ES) - * - Vulkan "Extended Layout" (the baseline for UBOs) - * - * but not: - * - * - GLSL 4.30's new packed mode (enabled by PIPE_CAP_LOAD_CONSTBUF) where - * vec3 arrays are packed tightly. - * - * - PackedDriverUniformStorage in GL (enabled by PIPE_CAP_PACKED_UNIFORMS) - * combined with nir_lower_uniforms_to_ubo, where values in the default - * uniform block are packed tightly. - * - * - Vulkan's scalarBlockLayout optional feature: - * - * "A member is defined to improperly straddle if either of the following are - * true: - * - * • It is a vector with total size less than or equal to 16 bytes, and has - * Offset decorations placing its first byte at F and its last byte at L - * where floor(F / 16) != floor(L / 16). - * • It is a vector with total size greater than 16 bytes and has its Offset - * decorations placing its first byte at a non-integer multiple of 16. - * - * [...] - * - * Unless the scalarBlockLayout feature is enabled on the device: - * - * • Vectors must not improperly straddle, as defined above." - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -nir_lower_ubo_vec4_filter(const nir_instr *instr, const void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - return nir_instr_as_intrinsic(instr)->intrinsic == nir_intrinsic_load_ubo; -} - -static nir_intrinsic_instr * -create_load(nir_builder *b, nir_ssa_def *block, nir_ssa_def *offset, - unsigned bit_size, unsigned num_components) -{ - nir_ssa_def *def = nir_load_ubo_vec4(b, num_components, bit_size, block, offset); - return nir_instr_as_intrinsic(def->parent_instr); -} - -static nir_ssa_def * -nir_lower_ubo_vec4_lower(nir_builder *b, nir_instr *instr, void *data) -{ - b->cursor = nir_before_instr(instr); - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - nir_ssa_def *byte_offset = nir_ssa_for_src(b, intr->src[1], 1); - nir_ssa_def *vec4_offset = nir_ushr_imm(b, byte_offset, 4); - - unsigned align_mul = nir_intrinsic_align_mul(intr); - unsigned align_offset = nir_intrinsic_align_offset(intr); - - int chan_size_bytes = intr->dest.ssa.bit_size / 8; - int chans_per_vec4 = 16 / chan_size_bytes; - - /* We don't care if someone figured out that things are aligned beyond - * vec4. - */ - align_mul = MIN2(align_mul, 16); - align_offset &= 15; - assert(align_offset % chan_size_bytes == 0); - - unsigned num_components = intr->num_components; - bool aligned_mul = (align_mul == 16 && - align_offset + chan_size_bytes * num_components <= 16); - if (!aligned_mul) - num_components = chans_per_vec4; - - nir_intrinsic_instr *load = create_load(b, intr->src[0].ssa, vec4_offset, - intr->dest.ssa.bit_size, - num_components); - - nir_intrinsic_set_access(load, nir_intrinsic_access(intr)); - - nir_ssa_def *result = &load->dest.ssa; - - int align_chan_offset = align_offset / chan_size_bytes; - if (aligned_mul) { - /* For an aligned load, just ask the backend to load from the known - * offset's component. - */ - nir_intrinsic_set_component(load, align_chan_offset); - } else if (intr->num_components == 1) { - /* If we're loading a single component, that component alone won't - * straddle a vec4 boundary so we can do this with a single UBO load. - */ - nir_ssa_def *component = - nir_iand_imm(b, - nir_udiv_imm(b, byte_offset, chan_size_bytes), - chans_per_vec4 - 1); - - result = nir_vector_extract(b, result, component); - } else if (align_mul == 8 && - align_offset + chan_size_bytes * intr->num_components <= 8) { - /* Special case: Loading small vectors from offset % 8 == 0 can be done - * with just one load and one bcsel. - */ - nir_component_mask_t low_channels = - BITSET_MASK(intr->num_components) << (align_chan_offset); - nir_component_mask_t high_channels = - low_channels << (8 / chan_size_bytes); - result = nir_bcsel(b, nir_test_mask(b, byte_offset, 8), - nir_channels(b, result, high_channels), - nir_channels(b, result, low_channels)); - } else { - /* General fallback case: Per-result-channel bcsel-based extraction - * from two separate vec4 loads. - */ - assert(num_components == 4); - nir_ssa_def *next_vec4_offset = nir_iadd_imm(b, vec4_offset, 1); - nir_intrinsic_instr *next_load = create_load(b, intr->src[0].ssa, next_vec4_offset, - intr->dest.ssa.bit_size, - num_components); - - nir_ssa_def *channels[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < intr->num_components; i++) { - nir_ssa_def *chan_byte_offset = nir_iadd_imm(b, byte_offset, i * chan_size_bytes); - - nir_ssa_def *chan_vec4_offset = nir_ushr_imm(b, chan_byte_offset, 4); - - nir_ssa_def *component = - nir_iand_imm(b, - nir_udiv_imm(b, chan_byte_offset, chan_size_bytes), - chans_per_vec4 - 1); - - channels[i] = nir_vector_extract(b, - nir_bcsel(b, - nir_ieq(b, - chan_vec4_offset, - vec4_offset), - &load->dest.ssa, - &next_load->dest.ssa), - component); - } - - result = nir_vec(b, channels, intr->num_components); - } - - return result; -} - -bool -nir_lower_ubo_vec4(nir_shader *shader) -{ - return nir_shader_lower_instructions(shader, - nir_lower_ubo_vec4_filter, - nir_lower_ubo_vec4_lower, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_undef_to_zero.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_undef_to_zero.c deleted file mode 100644 index c3c5193..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_undef_to_zero.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2019 Collabora, Ltd. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors (Collabora): - * Alyssa Rosenzweig - */ - -/** - * @file - * - * Flushes undefined SSA values to a zero vector fo the appropriate component - * count, to avoid undefined behaviour in the resulting shader. Not required - * for conformance as use of uninitialized variables is explicitly left - * undefined by the spec. Works around buggy apps, however. - * - * Call immediately after nir_opt_undef. If called before, larger optimization - * opportunities from the former pass will be missed. If called outside of an - * optimization loop, constant propagation and algebraic optimizations won't be - * able to kick in to reduce stuff consuming the zero. - */ - -#include "nir_builder.h" - -static bool -lower_undef_instr_to_zero(nir_builder *b, nir_instr *instr, UNUSED void *_state) -{ - if (instr->type != nir_instr_type_ssa_undef) - return false; - - nir_ssa_undef_instr *und = nir_instr_as_ssa_undef(instr); - b->cursor = nir_instr_remove(&und->instr); - nir_ssa_def *zero = nir_imm_zero(b, und->def.num_components, - und->def.bit_size); - nir_ssa_def_rewrite_uses(&und->def, zero); - return true; -} - -bool -nir_lower_undef_to_zero(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, lower_undef_instr_to_zero, - nir_metadata_block_index | - nir_metadata_dominance, NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_uniforms_to_ubo.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_uniforms_to_ubo.c deleted file mode 100644 index 8fefcfd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_uniforms_to_ubo.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2017 Advanced Micro Devices, Inc. - * - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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. - */ - -/* - * Remap load_uniform intrinsics to nir_load_ubo or nir_load_ubo_vec4 accesses - * of UBO binding point 0. Simultaneously, remap existing UBO accesses by - * increasing their binding point by 1. - * - * For PIPE_CAP_PACKED_UNIFORMS, dword_packed should be set to indicate that - * nir_intrinsic_load_uniform is in increments of dwords instead of vec4s. - * - * If load_vec4 is set, then nir_intrinsic_load_ubo_vec4 will be generated - * instead of nir_intrinsic_load_ubo, saving addressing math for hardawre - * needing aligned vec4 loads in increments of vec4s (such as TGSI CONST file - * loads). - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -lower_instr(nir_intrinsic_instr *instr, nir_builder *b, bool dword_packed, bool load_vec4) -{ - b->cursor = nir_before_instr(&instr->instr); - - /* Increase all UBO binding points by 1. */ - if (instr->intrinsic == nir_intrinsic_load_ubo && - !b->shader->info.first_ubo_is_default_ubo) { - nir_ssa_def *old_idx = nir_ssa_for_src(b, instr->src[0], 1); - nir_ssa_def *new_idx = nir_iadd(b, old_idx, nir_imm_int(b, 1)); - nir_instr_rewrite_src(&instr->instr, &instr->src[0], - nir_src_for_ssa(new_idx)); - return true; - } - - if (instr->intrinsic == nir_intrinsic_load_uniform) { - nir_ssa_def *ubo_idx = nir_imm_int(b, 0); - nir_ssa_def *uniform_offset = nir_ssa_for_src(b, instr->src[0], 1); - - assert(instr->dest.ssa.bit_size >= 8); - nir_ssa_def *load_result; - if (load_vec4) { - /* No asking us to generate load_vec4 when you've packed your uniforms - * as dwords instead of vec4s. - */ - assert(!dword_packed); - load_result = nir_load_ubo_vec4(b, instr->num_components, instr->dest.ssa.bit_size, - ubo_idx, uniform_offset, .base=nir_intrinsic_base(instr)); - } else { - /* For PIPE_CAP_PACKED_UNIFORMS, the uniforms are packed with the - * base/offset in dword units instead of vec4 units. - */ - int multiplier = dword_packed ? 4 : 16; - load_result = nir_load_ubo(b, instr->num_components, instr->dest.ssa.bit_size, - ubo_idx, - nir_iadd_imm(b, nir_imul_imm(b, uniform_offset, multiplier), - nir_intrinsic_base(instr) * multiplier)); - nir_intrinsic_instr *load = nir_instr_as_intrinsic(load_result->parent_instr); - - /* If it's const, set the alignment to our known constant offset. If - * not, set it to a pessimistic value based on the multiplier (or the - * scalar size, for qword loads). - * - * We could potentially set up stricter alignments for indirects by - * knowing what features are enabled in the APIs (see comment in - * nir_lower_ubo_vec4.c) - */ - if (nir_src_is_const(instr->src[0])) { - nir_intrinsic_set_align(load, NIR_ALIGN_MUL_MAX, - (nir_src_as_uint(instr->src[0]) + - nir_intrinsic_base(instr) * multiplier) % - NIR_ALIGN_MUL_MAX); - } else { - nir_intrinsic_set_align(load, MAX2(multiplier, - instr->dest.ssa.bit_size / 8), 0); - } - - nir_intrinsic_set_range_base(load, nir_intrinsic_base(instr) * multiplier); - nir_intrinsic_set_range(load, nir_intrinsic_range(instr) * multiplier); - } - nir_ssa_def_rewrite_uses(&instr->dest.ssa, load_result); - - nir_instr_remove(&instr->instr); - return true; - } - - return false; -} - -bool -nir_lower_uniforms_to_ubo(nir_shader *shader, bool dword_packed, bool load_vec4) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder builder; - nir_builder_init(&builder, function->impl); - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_intrinsic) - progress |= lower_instr(nir_instr_as_intrinsic(instr), - &builder, - dword_packed, load_vec4); - } - } - - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } - } - - if (progress) { - if (!shader->info.first_ubo_is_default_ubo) { - nir_foreach_variable_with_modes(var, shader, nir_var_mem_ubo) { - var->data.binding++; - if (var->data.driver_location != -1) - var->data.driver_location++; - /* only increment location for ubo arrays */ - if (glsl_without_array(var->type) == var->interface_type && - glsl_type_is_array(var->type)) - var->data.location++; - } - } - shader->info.num_ubos++; - - if (shader->num_uniforms > 0) { - const struct glsl_type *type = glsl_array_type(glsl_vec4_type(), - shader->num_uniforms, 16); - nir_variable *ubo = nir_variable_create(shader, nir_var_mem_ubo, type, - "uniform_0"); - ubo->data.binding = 0; - ubo->data.explicit_binding = 1; - - struct glsl_struct_field field = { - .type = type, - .name = "data", - .location = -1, - }; - ubo->interface_type = - glsl_interface_type(&field, 1, GLSL_INTERFACE_PACKING_STD430, - false, "__ubo0_interface"); - } - } - - shader->info.first_ubo_is_default_ubo = true; - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_var_copies.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_var_copies.c deleted file mode 100644 index 1e9808f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_var_copies.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" -#include "../nir_types.h" - -/* - * Lowers all copy intrinsics to sequences of load/store intrinsics. - */ - -static nir_deref_instr * -build_deref_to_next_wildcard(nir_builder *b, - nir_deref_instr *parent, - nir_deref_instr ***deref_arr) -{ - for (; **deref_arr; (*deref_arr)++) { - if ((**deref_arr)->deref_type == nir_deref_type_array_wildcard) - return parent; - - parent = nir_build_deref_follower(b, parent, **deref_arr); - } - - assert(**deref_arr == NULL); - *deref_arr = NULL; - return parent; -} - -static void -emit_deref_copy_load_store(nir_builder *b, - nir_deref_instr *dst_deref, - nir_deref_instr **dst_deref_arr, - nir_deref_instr *src_deref, - nir_deref_instr **src_deref_arr, - enum gl_access_qualifier dst_access, - enum gl_access_qualifier src_access) -{ - if (dst_deref_arr || src_deref_arr) { - assert(dst_deref_arr && src_deref_arr); - dst_deref = build_deref_to_next_wildcard(b, dst_deref, &dst_deref_arr); - src_deref = build_deref_to_next_wildcard(b, src_deref, &src_deref_arr); - } - - if (dst_deref_arr || src_deref_arr) { - assert(dst_deref_arr && src_deref_arr); - assert((*dst_deref_arr)->deref_type == nir_deref_type_array_wildcard); - assert((*src_deref_arr)->deref_type == nir_deref_type_array_wildcard); - - unsigned length = glsl_get_length(src_deref->type); - /* The wildcards should represent the same number of elements */ - assert(length == glsl_get_length(dst_deref->type)); - assert(length > 0); - - for (unsigned i = 0; i < length; i++) { - emit_deref_copy_load_store(b, - nir_build_deref_array_imm(b, dst_deref, i), - dst_deref_arr + 1, - nir_build_deref_array_imm(b, src_deref, i), - src_deref_arr + 1, dst_access, src_access); - } - } else { - assert(glsl_get_bare_type(dst_deref->type) == - glsl_get_bare_type(src_deref->type)); - assert(glsl_type_is_vector_or_scalar(dst_deref->type)); - - nir_store_deref_with_access(b, dst_deref, - nir_load_deref_with_access(b, src_deref, src_access), - ~0, src_access); - } -} - -void -nir_lower_deref_copy_instr(nir_builder *b, nir_intrinsic_instr *copy) -{ - /* Unfortunately, there's just no good way to handle wildcards except to - * flip the chain around and walk the list from variable to final pointer. - */ - assert(copy->src[0].is_ssa && copy->src[1].is_ssa); - nir_deref_instr *dst = nir_instr_as_deref(copy->src[0].ssa->parent_instr); - nir_deref_instr *src = nir_instr_as_deref(copy->src[1].ssa->parent_instr); - - nir_deref_path dst_path, src_path; - nir_deref_path_init(&dst_path, dst, NULL); - nir_deref_path_init(&src_path, src, NULL); - - b->cursor = nir_before_instr(©->instr); - emit_deref_copy_load_store(b, dst_path.path[0], &dst_path.path[1], - src_path.path[0], &src_path.path[1], - nir_intrinsic_dst_access(copy), - nir_intrinsic_src_access(copy)); - - nir_deref_path_finish(&dst_path); - nir_deref_path_finish(&src_path); -} - -static bool -lower_var_copies_impl(nir_function_impl *impl) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *copy = nir_instr_as_intrinsic(instr); - if (copy->intrinsic != nir_intrinsic_copy_deref) - continue; - - nir_lower_deref_copy_instr(&b, copy); - - nir_instr_remove(©->instr); - nir_deref_instr_remove_if_unused(nir_src_as_deref(copy->src[0])); - nir_deref_instr_remove_if_unused(nir_src_as_deref(copy->src[1])); - - progress = true; - nir_instr_free(©->instr); - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -/* Lowers every copy_var instruction in the program to a sequence of - * load/store instructions. - */ -bool -nir_lower_var_copies(nir_shader *shader) -{ - bool progress = false; - - shader->info.var_copies_lowered = true; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= lower_var_copies_impl(function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_variable_initializers.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_variable_initializers.c deleted file mode 100644 index 3963d33..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_variable_initializers.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static void -build_constant_load(nir_builder *b, nir_deref_instr *deref, nir_constant *c) -{ - if (glsl_type_is_vector_or_scalar(deref->type)) { - nir_load_const_instr *load = - nir_load_const_instr_create(b->shader, - glsl_get_vector_elements(deref->type), - glsl_get_bit_size(deref->type)); - memcpy(load->value, c->values, sizeof(*load->value) * load->def.num_components); - nir_builder_instr_insert(b, &load->instr); - nir_store_deref(b, deref, &load->def, ~0); - } else if (glsl_type_is_struct_or_ifc(deref->type)) { - unsigned len = glsl_get_length(deref->type); - for (unsigned i = 0; i < len; i++) { - build_constant_load(b, nir_build_deref_struct(b, deref, i), - c->elements[i]); - } - } else { - assert(glsl_type_is_array(deref->type) || - glsl_type_is_matrix(deref->type)); - unsigned len = glsl_get_length(deref->type); - for (unsigned i = 0; i < len; i++) { - build_constant_load(b, - nir_build_deref_array_imm(b, deref, i), - c->elements[i]); - } - } -} - -static bool -lower_const_initializer(struct nir_builder *b, struct exec_list *var_list, - nir_variable_mode modes) -{ - bool progress = false; - - b->cursor = nir_before_cf_list(&b->impl->body); - - nir_foreach_variable_in_list(var, var_list) { - if (!(var->data.mode & modes)) - continue; - - if (var->constant_initializer) { - build_constant_load(b, nir_build_deref_var(b, var), - var->constant_initializer); - - progress = true; - var->constant_initializer = NULL; - } else if (var->pointer_initializer) { - nir_deref_instr *src_deref = nir_build_deref_var(b, var->pointer_initializer); - nir_deref_instr *dst_deref = nir_build_deref_var(b, var); - - /* Note that this stores a pointer to src into dst */ - nir_store_deref(b, dst_deref, &src_deref->dest.ssa, ~0); - - progress = true; - var->pointer_initializer = NULL; - } - - } - - return progress; -} - -bool -nir_lower_variable_initializers(nir_shader *shader, nir_variable_mode modes) -{ - bool progress = false; - - /* Only some variables have initializers that we want to lower. Others - * such as uniforms have initializers which are useful later during linking - * so we want to skip over those. Restrict to only variable types where - * initializers make sense so that callers can use nir_var_all. - */ - modes &= nir_var_shader_out | - nir_var_shader_temp | - nir_var_function_temp | - nir_var_system_value; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - bool impl_progress = false; - - nir_builder builder; - nir_builder_init(&builder, function->impl); - - if ((modes & ~nir_var_function_temp) && function->is_entrypoint) { - impl_progress |= lower_const_initializer(&builder, - &shader->variables, - modes); - } - - if (modes & nir_var_function_temp) { - impl_progress |= lower_const_initializer(&builder, - &function->impl->locals, - nir_var_function_temp); - } - - if (impl_progress) { - progress = true; - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} - -/* Zero initialize shared_size bytes of shared memory by splitting work writes - * of chunk_size bytes among the invocations. - * - * Used for implementing VK_KHR_zero_initialize_workgroup_memory. - */ -bool -nir_zero_initialize_shared_memory(nir_shader *shader, - const unsigned shared_size, - const unsigned chunk_size) -{ - assert(shared_size > 0); - assert(chunk_size > 0); - assert(chunk_size % 4 == 0); - - nir_builder b; - nir_builder_init(&b, nir_shader_get_entrypoint(shader)); - b.cursor = nir_before_cf_list(&b.impl->body); - - assert(!shader->info.workgroup_size_variable); - const unsigned local_count = shader->info.workgroup_size[0] * - shader->info.workgroup_size[1] * - shader->info.workgroup_size[2]; - - /* The initialization logic is simplified if we can always split the memory - * in full chunk_size units. - */ - assert(shared_size % chunk_size == 0); - - const unsigned chunk_comps = chunk_size / 4; - - nir_variable *it = nir_local_variable_create(b.impl, glsl_uint_type(), - "zero_init_iterator"); - nir_ssa_def *local_index = nir_load_local_invocation_index(&b); - nir_ssa_def *first_offset = nir_imul_imm(&b, local_index, chunk_size); - nir_store_var(&b, it, first_offset, 0x1); - - nir_loop *loop = nir_push_loop(&b); - { - nir_ssa_def *offset = nir_load_var(&b, it); - - nir_push_if(&b, nir_uge(&b, offset, nir_imm_int(&b, shared_size))); - { - nir_jump(&b, nir_jump_break); - } - nir_pop_if(&b, NULL); - - nir_store_shared(&b, nir_imm_zero(&b, chunk_comps, 32), offset, - .align_mul=chunk_size, - .write_mask=((1 << chunk_comps) - 1)); - - nir_ssa_def *new_offset = nir_iadd_imm(&b, offset, chunk_size * local_count); - nir_store_var(&b, it, new_offset, 0x1); - } - nir_pop_loop(&b, loop); - - if (shader->options->use_scoped_barrier) { - nir_scoped_barrier(&b, NIR_SCOPE_WORKGROUP, NIR_SCOPE_WORKGROUP, - NIR_MEMORY_ACQ_REL, nir_var_mem_shared); - } else { - nir_memory_barrier_shared(&b); - } - - nir_metadata_preserve(nir_shader_get_entrypoint(shader), nir_metadata_none); - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vars_to_ssa.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vars_to_ssa.c deleted file mode 100644 index 47d559e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vars_to_ssa.c +++ /dev/null @@ -1,829 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" -#include "nir_phi_builder.h" -#include "nir_vla.h" - - -struct deref_node { - struct deref_node *parent; - const struct glsl_type *type; - - bool lower_to_ssa; - - /* Only valid for things that end up in the direct list. - * Note that multiple nir_deref_instrs may correspond to this node, but - * they will all be equivalent, so any is as good as the other. - */ - nir_deref_path path; - struct exec_node direct_derefs_link; - - struct set *loads; - struct set *stores; - struct set *copies; - - struct nir_phi_builder_value *pb_value; - - /* True if this node is fully direct. If set, it must be in the children - * array of its parent. - */ - bool is_direct; - - /* Set on a root node for a variable to indicate that variable is used by a - * cast or passed through some other sequence of instructions that are not - * derefs. - */ - bool has_complex_use; - - struct deref_node *wildcard; - struct deref_node *indirect; - struct deref_node *children[0]; -}; - -#define UNDEF_NODE ((struct deref_node *)(uintptr_t)1) - -struct lower_variables_state { - nir_shader *shader; - void *dead_ctx; - nir_function_impl *impl; - - /* A hash table mapping variables to deref_node data */ - struct hash_table *deref_var_nodes; - - /* A hash table mapping fully-qualified direct dereferences, i.e. - * dereferences with no indirect or wildcard array dereferences, to - * deref_node data. - * - * At the moment, we only lower loads, stores, and copies that can be - * trivially lowered to loads and stores, i.e. copies with no indirects - * and no wildcards. If a part of a variable that is being loaded from - * and/or stored into is also involved in a copy operation with - * wildcards, then we lower that copy operation to loads and stores, but - * otherwise we leave copies with wildcards alone. Since the only derefs - * used in these loads, stores, and trivial copies are ones with no - * wildcards and no indirects, these are precisely the derefs that we - * can actually consider lowering. - */ - struct exec_list direct_deref_nodes; - - /* Controls whether get_deref_node will add variables to the - * direct_deref_nodes table. This is turned on when we are initially - * scanning for load/store instructions. It is then turned off so we - * don't accidentally change the direct_deref_nodes table while we're - * iterating throug it. - */ - bool add_to_direct_deref_nodes; - - struct nir_phi_builder *phi_builder; -}; - -static struct deref_node * -deref_node_create(struct deref_node *parent, - const struct glsl_type *type, - bool is_direct, void *mem_ctx) -{ - size_t size = sizeof(struct deref_node) + - glsl_get_length(type) * sizeof(struct deref_node *); - - struct deref_node *node = rzalloc_size(mem_ctx, size); - node->type = type; - node->parent = parent; - exec_node_init(&node->direct_derefs_link); - node->is_direct = is_direct; - - return node; -} - -/* Returns the deref node associated with the given variable. This will be - * the root of the tree representing all of the derefs of the given variable. - */ -static struct deref_node * -get_deref_node_for_var(nir_variable *var, struct lower_variables_state *state) -{ - struct deref_node *node; - - struct hash_entry *var_entry = - _mesa_hash_table_search(state->deref_var_nodes, var); - - if (var_entry) { - return var_entry->data; - } else { - node = deref_node_create(NULL, var->type, true, state->dead_ctx); - _mesa_hash_table_insert(state->deref_var_nodes, var, node); - return node; - } -} - -/* Gets the deref_node for the given deref chain and creates it if it - * doesn't yet exist. If the deref is fully-qualified and direct and - * state->add_to_direct_deref_nodes is true, it will be added to the hash - * table of of fully-qualified direct derefs. - */ -static struct deref_node * -get_deref_node_recur(nir_deref_instr *deref, - struct lower_variables_state *state) -{ - if (deref->deref_type == nir_deref_type_var) - return get_deref_node_for_var(deref->var, state); - - if (deref->deref_type == nir_deref_type_cast) - return NULL; - - struct deref_node *parent = - get_deref_node_recur(nir_deref_instr_parent(deref), state); - if (parent == NULL) - return NULL; - - if (parent == UNDEF_NODE) - return UNDEF_NODE; - - switch (deref->deref_type) { - case nir_deref_type_struct: - assert(glsl_type_is_struct_or_ifc(parent->type)); - assert(deref->strct.index < glsl_get_length(parent->type)); - - if (parent->children[deref->strct.index] == NULL) { - parent->children[deref->strct.index] = - deref_node_create(parent, deref->type, parent->is_direct, - state->dead_ctx); - } - - return parent->children[deref->strct.index]; - - case nir_deref_type_array: { - if (nir_src_is_const(deref->arr.index)) { - uint32_t index = nir_src_as_uint(deref->arr.index); - /* This is possible if a loop unrolls and generates an - * out-of-bounds offset. We need to handle this at least - * somewhat gracefully. - */ - if (index >= glsl_get_length(parent->type)) - return UNDEF_NODE; - - if (parent->children[index] == NULL) { - parent->children[index] = - deref_node_create(parent, deref->type, parent->is_direct, - state->dead_ctx); - } - - return parent->children[index]; - } else { - if (parent->indirect == NULL) { - parent->indirect = - deref_node_create(parent, deref->type, false, state->dead_ctx); - } - - return parent->indirect; - } - break; - } - - case nir_deref_type_array_wildcard: - if (parent->wildcard == NULL) { - parent->wildcard = - deref_node_create(parent, deref->type, false, state->dead_ctx); - } - - return parent->wildcard; - - default: - unreachable("Invalid deref type"); - } -} - -static struct deref_node * -get_deref_node(nir_deref_instr *deref, struct lower_variables_state *state) -{ - /* This pass only works on local variables. Just ignore any derefs with - * a non-local mode. - */ - if (!nir_deref_mode_must_be(deref, nir_var_function_temp)) - return NULL; - - struct deref_node *node = get_deref_node_recur(deref, state); - if (!node) - return NULL; - - /* Insert the node in the direct derefs list. We only do this if it's not - * already in the list and we only bother for deref nodes which are used - * directly in a load or store. - */ - if (node != UNDEF_NODE && node->is_direct && - state->add_to_direct_deref_nodes && - node->direct_derefs_link.next == NULL) { - nir_deref_path_init(&node->path, deref, state->dead_ctx); - assert(deref->var != NULL); - exec_list_push_tail(&state->direct_deref_nodes, - &node->direct_derefs_link); - } - - return node; -} - -/* \sa foreach_deref_node_match */ -static void -foreach_deref_node_worker(struct deref_node *node, nir_deref_instr **path, - void (* cb)(struct deref_node *node, - struct lower_variables_state *state), - struct lower_variables_state *state) -{ - if (*path == NULL) { - cb(node, state); - return; - } - - switch ((*path)->deref_type) { - case nir_deref_type_struct: - if (node->children[(*path)->strct.index]) { - foreach_deref_node_worker(node->children[(*path)->strct.index], - path + 1, cb, state); - } - return; - - case nir_deref_type_array: { - uint32_t index = nir_src_as_uint((*path)->arr.index); - - if (node->children[index]) { - foreach_deref_node_worker(node->children[index], - path + 1, cb, state); - } - - if (node->wildcard) { - foreach_deref_node_worker(node->wildcard, - path + 1, cb, state); - } - return; - } - - default: - unreachable("Unsupported deref type"); - } -} - -/* Walks over every "matching" deref_node and calls the callback. A node - * is considered to "match" if either refers to that deref or matches up t - * a wildcard. In other words, the following would match a[6].foo[3].bar: - * - * a[6].foo[3].bar - * a[*].foo[3].bar - * a[6].foo[*].bar - * a[*].foo[*].bar - * - * The given deref must be a full-length and fully qualified (no wildcards - * or indirects) deref chain. - */ -static void -foreach_deref_node_match(nir_deref_path *path, - void (* cb)(struct deref_node *node, - struct lower_variables_state *state), - struct lower_variables_state *state) -{ - assert(path->path[0]->deref_type == nir_deref_type_var); - struct deref_node *node = get_deref_node_for_var(path->path[0]->var, state); - - if (node == NULL) - return; - - foreach_deref_node_worker(node, &path->path[1], cb, state); -} - -/* \sa deref_may_be_aliased */ -static bool -path_may_be_aliased_node(struct deref_node *node, nir_deref_instr **path, - struct lower_variables_state *state) -{ - if (*path == NULL) - return false; - - switch ((*path)->deref_type) { - case nir_deref_type_struct: - if (node->children[(*path)->strct.index]) { - return path_may_be_aliased_node(node->children[(*path)->strct.index], - path + 1, state); - } else { - return false; - } - - case nir_deref_type_array: { - if (!nir_src_is_const((*path)->arr.index)) - return true; - - uint32_t index = nir_src_as_uint((*path)->arr.index); - - /* If there is an indirect at this level, we're aliased. */ - if (node->indirect) - return true; - - if (node->children[index] && - path_may_be_aliased_node(node->children[index], - path + 1, state)) - return true; - - if (node->wildcard && - path_may_be_aliased_node(node->wildcard, path + 1, state)) - return true; - - return false; - } - - default: - unreachable("Unsupported deref type"); - } -} - -/* Returns true if there are no indirects that can ever touch this deref. - * - * For example, if the given deref is a[6].foo, then any uses of a[i].foo - * would cause this to return false, but a[i].bar would not affect it - * because it's a different structure member. A var_copy involving of - * a[*].bar also doesn't affect it because that can be lowered to entirely - * direct load/stores. - * - * We only support asking this question about fully-qualified derefs. - * Obviously, it's pointless to ask this about indirects, but we also - * rule-out wildcards. Handling Wildcard dereferences would involve - * checking each array index to make sure that there aren't any indirect - * references. - */ -static bool -path_may_be_aliased(nir_deref_path *path, - struct lower_variables_state *state) -{ - assert(path->path[0]->deref_type == nir_deref_type_var); - nir_variable *var = path->path[0]->var; - struct deref_node *var_node = get_deref_node_for_var(var, state); - - /* First see if this variable is ever used by anything other than a - * load/store. If there's even so much as a cast in the way, we have to - * assume aliasing and bail. - */ - if (var_node->has_complex_use) - return true; - - return path_may_be_aliased_node(var_node, &path->path[1], state); -} - -static void -register_complex_use(nir_deref_instr *deref, - struct lower_variables_state *state) -{ - assert(deref->deref_type == nir_deref_type_var); - struct deref_node *node = get_deref_node_for_var(deref->var, state); - if (node == NULL) - return; - - node->has_complex_use = true; -} - -static bool -register_load_instr(nir_intrinsic_instr *load_instr, - struct lower_variables_state *state) -{ - nir_deref_instr *deref = nir_src_as_deref(load_instr->src[0]); - struct deref_node *node = get_deref_node(deref, state); - if (node == NULL) - return false; - - /* Replace out-of-bounds load derefs with an undef, so that they don't get - * left around when a driver has lowered all indirects and thus doesn't - * expect any array derefs at all after vars_to_ssa. - */ - if (node == UNDEF_NODE) { - nir_ssa_undef_instr *undef = - nir_ssa_undef_instr_create(state->shader, - load_instr->num_components, - load_instr->dest.ssa.bit_size); - - nir_instr_insert_before(&load_instr->instr, &undef->instr); - nir_instr_remove(&load_instr->instr); - - nir_ssa_def_rewrite_uses(&load_instr->dest.ssa, &undef->def); - return true; - } - - if (node->loads == NULL) - node->loads = _mesa_pointer_set_create(state->dead_ctx); - - _mesa_set_add(node->loads, load_instr); - - return false; -} - -static bool -register_store_instr(nir_intrinsic_instr *store_instr, - struct lower_variables_state *state) -{ - nir_deref_instr *deref = nir_src_as_deref(store_instr->src[0]); - struct deref_node *node = get_deref_node(deref, state); - - /* Drop out-of-bounds store derefs, so that they don't get left around when a - * driver has lowered all indirects and thus doesn't expect any array derefs - * at all after vars_to_ssa. - */ - if (node == UNDEF_NODE) { - nir_instr_remove(&store_instr->instr); - return true; - } - - if (node == NULL) - return false; - - if (node->stores == NULL) - node->stores = _mesa_pointer_set_create(state->dead_ctx); - - _mesa_set_add(node->stores, store_instr); - - return false; -} - -static void -register_copy_instr(nir_intrinsic_instr *copy_instr, - struct lower_variables_state *state) -{ - for (unsigned idx = 0; idx < 2; idx++) { - nir_deref_instr *deref = nir_src_as_deref(copy_instr->src[idx]); - struct deref_node *node = get_deref_node(deref, state); - if (node == NULL || node == UNDEF_NODE) - continue; - - if (node->copies == NULL) - node->copies = _mesa_pointer_set_create(state->dead_ctx); - - _mesa_set_add(node->copies, copy_instr); - } -} - -static bool -register_variable_uses(nir_function_impl *impl, - struct lower_variables_state *state) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - - if (deref->deref_type == nir_deref_type_var && - nir_deref_instr_has_complex_use(deref, 0)) - register_complex_use(deref, state); - - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - progress = register_load_instr(intrin, state) || progress; - break; - - case nir_intrinsic_store_deref: - progress = register_store_instr(intrin, state) || progress; - break; - - case nir_intrinsic_copy_deref: - register_copy_instr(intrin, state); - break; - - default: - continue; - } - break; - } - - default: - break; - } - } - } - return progress; -} - -/* Walks over all of the copy instructions to or from the given deref_node - * and lowers them to load/store intrinsics. - */ -static void -lower_copies_to_load_store(struct deref_node *node, - struct lower_variables_state *state) -{ - if (!node->copies) - return; - - nir_builder b; - nir_builder_init(&b, state->impl); - - set_foreach(node->copies, copy_entry) { - nir_intrinsic_instr *copy = (void *)copy_entry->key; - - nir_lower_deref_copy_instr(&b, copy); - - for (unsigned i = 0; i < 2; ++i) { - nir_deref_instr *arg_deref = nir_src_as_deref(copy->src[i]); - struct deref_node *arg_node = get_deref_node(arg_deref, state); - - /* Only bother removing copy entries for other nodes */ - if (arg_node == NULL || arg_node == node) - continue; - - struct set_entry *arg_entry = _mesa_set_search(arg_node->copies, copy); - assert(arg_entry); - _mesa_set_remove(arg_node->copies, arg_entry); - } - - nir_instr_remove(©->instr); - } - - node->copies = NULL; -} - -/* Performs variable renaming - * - * This algorithm is very similar to the one outlined in "Efficiently - * Computing Static Single Assignment Form and the Control Dependence - * Graph" by Cytron et al. The primary difference is that we only put one - * SSA def on the stack per block. - */ -static bool -rename_variables(struct lower_variables_state *state) -{ - nir_builder b; - nir_builder_init(&b, state->impl); - - nir_foreach_block(block, state->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_must_be(deref, nir_var_function_temp)) - continue; - - struct deref_node *node = get_deref_node(deref, state); - if (node == NULL) - continue; - - /* Should have been removed before rename_variables(). */ - assert(node != UNDEF_NODE); - - if (!node->lower_to_ssa) - continue; - - nir_alu_instr *mov = nir_alu_instr_create(state->shader, - nir_op_mov); - mov->src[0].src = nir_src_for_ssa( - nir_phi_builder_value_get_block_def(node->pb_value, block)); - for (unsigned i = intrin->num_components; i < NIR_MAX_VEC_COMPONENTS; i++) - mov->src[0].swizzle[i] = 0; - - assert(intrin->dest.is_ssa); - - mov->dest.write_mask = (1 << intrin->num_components) - 1; - nir_ssa_dest_init(&mov->instr, &mov->dest.dest, - intrin->num_components, - intrin->dest.ssa.bit_size, NULL); - - nir_instr_insert_before(&intrin->instr, &mov->instr); - nir_instr_remove(&intrin->instr); - - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - &mov->dest.dest.ssa); - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_must_be(deref, nir_var_function_temp)) - continue; - - struct deref_node *node = get_deref_node(deref, state); - if (node == NULL) - continue; - - /* Should have been removed before rename_variables(). */ - assert(node != UNDEF_NODE); - - assert(intrin->src[1].is_ssa); - nir_ssa_def *value = intrin->src[1].ssa; - - if (!node->lower_to_ssa) - continue; - - assert(intrin->num_components == - glsl_get_vector_elements(node->type)); - - nir_ssa_def *new_def; - b.cursor = nir_before_instr(&intrin->instr); - - unsigned wrmask = nir_intrinsic_write_mask(intrin); - if (wrmask == (1 << intrin->num_components) - 1) { - /* Whole variable store - just copy the source. Note that - * intrin->num_components and value->num_components - * may differ. - */ - unsigned swiz[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) - swiz[i] = i < intrin->num_components ? i : 0; - - new_def = nir_swizzle(&b, value, swiz, - intrin->num_components); - } else { - nir_ssa_def *old_def = - nir_phi_builder_value_get_block_def(node->pb_value, block); - /* For writemasked store_var intrinsics, we combine the newly - * written values with the existing contents of unwritten - * channels, creating a new SSA value for the whole vector. - */ - nir_ssa_scalar srcs[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < intrin->num_components; i++) { - if (wrmask & (1 << i)) { - srcs[i] = nir_get_ssa_scalar(value, i); - } else { - srcs[i] = nir_get_ssa_scalar(old_def, i); - } - } - new_def = nir_vec_scalars(&b, srcs, intrin->num_components); - } - - assert(new_def->num_components == intrin->num_components); - - nir_phi_builder_value_set_block_def(node->pb_value, block, new_def); - nir_instr_remove(&intrin->instr); - break; - } - - default: - break; - } - } - } - - return true; -} - -/** Implements a pass to lower variable uses to SSA values - * - * This path walks the list of instructions and tries to lower as many - * local variable load/store operations to SSA defs and uses as it can. - * The process involves four passes: - * - * 1) Iterate over all of the instructions and mark where each local - * variable deref is used in a load, store, or copy. While we're at - * it, we keep track of all of the fully-qualified (no wildcards) and - * fully-direct references we see and store them in the - * direct_deref_nodes hash table. - * - * 2) Walk over the list of fully-qualified direct derefs generated in - * the previous pass. For each deref, we determine if it can ever be - * aliased, i.e. if there is an indirect reference anywhere that may - * refer to it. If it cannot be aliased, we mark it for lowering to an - * SSA value. At this point, we lower any var_copy instructions that - * use the given deref to load/store operations. - * - * 3) Walk over the list of derefs we plan to lower to SSA values and - * insert phi nodes as needed. - * - * 4) Perform "variable renaming" by replacing the load/store instructions - * with SSA definitions and SSA uses. - */ -static bool -nir_lower_vars_to_ssa_impl(nir_function_impl *impl) -{ - struct lower_variables_state state; - - state.shader = impl->function->shader; - state.dead_ctx = ralloc_context(state.shader); - state.impl = impl; - - state.deref_var_nodes = _mesa_pointer_hash_table_create(state.dead_ctx); - exec_list_make_empty(&state.direct_deref_nodes); - - /* Build the initial deref structures and direct_deref_nodes table */ - state.add_to_direct_deref_nodes = true; - - bool progress = register_variable_uses(impl, &state); - - nir_metadata_require(impl, nir_metadata_block_index); - - /* We're about to iterate through direct_deref_nodes. Don't modify it. */ - state.add_to_direct_deref_nodes = false; - - foreach_list_typed_safe(struct deref_node, node, direct_derefs_link, - &state.direct_deref_nodes) { - nir_deref_path *path = &node->path; - - assert(path->path[0]->deref_type == nir_deref_type_var); - - /* We don't build deref nodes for non-local variables */ - assert(path->path[0]->var->data.mode == nir_var_function_temp); - - if (path_may_be_aliased(path, &state)) { - exec_node_remove(&node->direct_derefs_link); - continue; - } - - node->lower_to_ssa = true; - progress = true; - - foreach_deref_node_match(path, lower_copies_to_load_store, &state); - } - - if (!progress) { - nir_metadata_preserve(impl, nir_metadata_all); - return false; - } - - nir_metadata_require(impl, nir_metadata_dominance); - - /* We may have lowered some copy instructions to load/store - * instructions. The uses from the copy instructions hav already been - * removed but we need to rescan to ensure that the uses from the newly - * added load/store instructions are registered. We need this - * information for phi node insertion below. - */ - register_variable_uses(impl, &state); - - state.phi_builder = nir_phi_builder_create(state.impl); - - BITSET_WORD *store_blocks = - ralloc_array(state.dead_ctx, BITSET_WORD, - BITSET_WORDS(state.impl->num_blocks)); - foreach_list_typed(struct deref_node, node, direct_derefs_link, - &state.direct_deref_nodes) { - if (!node->lower_to_ssa) - continue; - - memset(store_blocks, 0, - BITSET_WORDS(state.impl->num_blocks) * sizeof(*store_blocks)); - - assert(node->path.path[0]->var->constant_initializer == NULL && - node->path.path[0]->var->pointer_initializer == NULL); - - if (node->stores) { - set_foreach(node->stores, store_entry) { - nir_intrinsic_instr *store = - (nir_intrinsic_instr *)store_entry->key; - BITSET_SET(store_blocks, store->instr.block->index); - } - } - - node->pb_value = - nir_phi_builder_add_value(state.phi_builder, - glsl_get_vector_elements(node->type), - glsl_get_bit_size(node->type), - store_blocks); - } - - rename_variables(&state); - - nir_phi_builder_finish(state.phi_builder); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - ralloc_free(state.dead_ctx); - - return progress; -} - -bool -nir_lower_vars_to_ssa(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_lower_vars_to_ssa_impl(function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vec3_to_vec4.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vec3_to_vec4.c deleted file mode 100644 index 6d17872..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vec3_to_vec4.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -static bool -lower_vec3_to_vec4_impl(nir_function_impl *impl, nir_variable_mode modes) -{ - bool progress = false; - - if (modes & nir_var_function_temp) { - nir_foreach_function_temp_variable(var, impl) { - const struct glsl_type *vec4_type = - glsl_type_replace_vec3_with_vec4(var->type); - if (var->type != vec4_type) { - var->type = vec4_type; - progress = true; - } - } - } - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (!nir_deref_mode_is_in_set(deref, modes)) - continue; - - const struct glsl_type *vec4_type = - glsl_type_replace_vec3_with_vec4(deref->type); - if (deref->type != vec4_type) { - deref->type = vec4_type; - progress = true; - } - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - if (intrin->num_components != 3) - break; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_in_set(deref, modes)) - break; - - assert(intrin->dest.is_ssa); - intrin->num_components = 4; - intrin->dest.ssa.num_components = 4; - - b.cursor = nir_after_instr(&intrin->instr); - nir_ssa_def *vec3 = nir_channels(&b, &intrin->dest.ssa, 0x7); - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - vec3, - vec3->parent_instr); - progress = true; - break; - } - - case nir_intrinsic_store_deref: { - if (intrin->num_components != 3) - break; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_in_set(deref, modes)) - break; - - assert(intrin->src[1].is_ssa); - nir_ssa_def *data = intrin->src[1].ssa; - - b.cursor = nir_before_instr(&intrin->instr); - unsigned swiz[] = { 0, 1, 2, 2 }; - data = nir_swizzle(&b, data, swiz, 4); - - intrin->num_components = 4; - nir_instr_rewrite_src(&intrin->instr, &intrin->src[1], - nir_src_for_ssa(data)); - progress = true; - break; - } - - case nir_intrinsic_copy_deref: { - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - nir_deref_instr *src = nir_src_as_deref(intrin->src[0]); - /* If we convert once side of a copy and not the other, that - * would be very bad. - */ - if (nir_deref_mode_may_be(dst, modes) || - nir_deref_mode_may_be(src, modes)) { - assert(nir_deref_mode_must_be(dst, modes)); - assert(nir_deref_mode_must_be(src, modes)); - } - break; - } - - default: - break; - } - break; - } - - default: - break; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_lower_vec3_to_vec4(nir_shader *shader, nir_variable_mode modes) -{ - bool progress = false; - - if (modes & ~nir_var_function_temp) { - nir_foreach_variable_in_shader(var, shader) { - if (!(var->data.mode & modes)) - continue; - - const struct glsl_type *vec4_type = - glsl_type_replace_vec3_with_vec4(var->type); - if (var->type != vec4_type) { - var->type = vec4_type; - progress = true; - } - } - } - - nir_foreach_function(function, shader) { - if (function->impl && lower_vec3_to_vec4_impl(function->impl, modes)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vec_to_movs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vec_to_movs.c deleted file mode 100644 index ec1393f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_vec_to_movs.c +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -struct vec_to_movs_data { - nir_instr_writemask_filter_cb cb; - const void *data; -}; - -/* - * Implements a simple pass that lowers vecN instructions to a series of - * moves with partial writes. - */ - -static bool -src_matches_dest_reg(nir_dest *dest, nir_src *src) -{ - if (dest->is_ssa || src->is_ssa) - return false; - - return (dest->reg.reg == src->reg.reg && - dest->reg.base_offset == src->reg.base_offset && - !dest->reg.indirect && - !src->reg.indirect); -} - -/** - * For a given starting writemask channel and corresponding source index in - * the vec instruction, insert a MOV to the vec instruction's dest of all the - * writemask channels that get read from the same src reg. - * - * Returns the writemask of our MOV, so the parent loop calling this knows - * which ones have been processed. - */ -static unsigned -insert_mov(nir_alu_instr *vec, unsigned start_idx, nir_shader *shader) -{ - assert(start_idx < nir_op_infos[vec->op].num_inputs); - - /* No sense generating a MOV from undef, we can just leave the dst channel undef. */ - if (nir_src_is_undef(vec->src[start_idx].src)) - return 1 << start_idx; - - nir_alu_instr *mov = nir_alu_instr_create(shader, nir_op_mov); - nir_alu_src_copy(&mov->src[0], &vec->src[start_idx], mov); - nir_alu_dest_copy(&mov->dest, &vec->dest, mov); - - mov->dest.write_mask = (1u << start_idx); - mov->src[0].swizzle[start_idx] = vec->src[start_idx].swizzle[0]; - mov->src[0].negate = vec->src[start_idx].negate; - mov->src[0].abs = vec->src[start_idx].abs; - - for (unsigned i = start_idx + 1; i < 4; i++) { - if (!(vec->dest.write_mask & (1 << i))) - continue; - - if (nir_srcs_equal(vec->src[i].src, vec->src[start_idx].src) && - vec->src[i].negate == vec->src[start_idx].negate && - vec->src[i].abs == vec->src[start_idx].abs) { - mov->dest.write_mask |= (1 << i); - mov->src[0].swizzle[i] = vec->src[i].swizzle[0]; - } - } - - unsigned channels_handled = mov->dest.write_mask; - - /* In some situations (if the vecN is involved in a phi-web), we can end - * up with a mov from a register to itself. Some of those channels may end - * up doing nothing and there's no reason to have them as part of the mov. - */ - if (src_matches_dest_reg(&mov->dest.dest, &mov->src[0].src) && - !mov->src[0].abs && !mov->src[0].negate) { - for (unsigned i = 0; i < 4; i++) { - if (mov->src[0].swizzle[i] == i) { - mov->dest.write_mask &= ~(1 << i); - } - } - } - - /* Only emit the instruction if it actually does something */ - if (mov->dest.write_mask) { - nir_instr_insert_before(&vec->instr, &mov->instr); - } else { - nir_instr_free(&mov->instr); - } - - return channels_handled; -} - -static bool -has_replicated_dest(nir_alu_instr *alu) -{ - return alu->op == nir_op_fdot2_replicated || - alu->op == nir_op_fdot3_replicated || - alu->op == nir_op_fdot4_replicated || - alu->op == nir_op_fdph_replicated; -} - -/* Attempts to coalesce the "move" from the given source of the vec to the - * destination of the instruction generating the value. If, for whatever - * reason, we cannot coalesce the mmove, it does nothing and returns 0. We - * can then call insert_mov as normal. - */ -static unsigned -try_coalesce(nir_alu_instr *vec, unsigned start_idx, void *_data) -{ - struct vec_to_movs_data *data = _data; - - assert(start_idx < nir_op_infos[vec->op].num_inputs); - - /* We will only even try if the source is SSA */ - if (!vec->src[start_idx].src.is_ssa) - return 0; - - assert(vec->src[start_idx].src.ssa); - - /* If we are going to do a reswizzle, then the vecN operation must be the - * only use of the source value. We also can't have any source modifiers. - */ - nir_foreach_use_including_if(src, vec->src[start_idx].src.ssa) { - if (src->is_if) - return 0; - - if (src->parent_instr != &vec->instr) - return 0; - - nir_alu_src *alu_src = exec_node_data(nir_alu_src, src, src); - if (alu_src->abs || alu_src->negate) - return 0; - } - - if (vec->src[start_idx].src.ssa->parent_instr->type != nir_instr_type_alu) - return 0; - - nir_alu_instr *src_alu = - nir_instr_as_alu(vec->src[start_idx].src.ssa->parent_instr); - - if (has_replicated_dest(src_alu)) { - /* The fdot instruction is special: It replicates its result to all - * components. This means that we can always rewrite its destination - * and we don't need to swizzle anything. - */ - } else { - /* We only care about being able to re-swizzle the instruction if it is - * something that we can reswizzle. It must be per-component. The one - * exception to this is the fdotN instructions which implicitly splat - * their result out to all channels. - */ - if (nir_op_infos[src_alu->op].output_size != 0) - return 0; - - /* If we are going to reswizzle the instruction, we can't have any - * non-per-component sources either. - */ - for (unsigned j = 0; j < nir_op_infos[src_alu->op].num_inputs; j++) - if (nir_op_infos[src_alu->op].input_sizes[j] != 0) - return 0; - } - - /* Stash off all of the ALU instruction's swizzles. */ - uint8_t swizzles[4][4]; - for (unsigned j = 0; j < nir_op_infos[src_alu->op].num_inputs; j++) - for (unsigned i = 0; i < 4; i++) - swizzles[j][i] = src_alu->src[j].swizzle[i]; - - /* Generate the final write mask */ - unsigned write_mask = 0; - for (unsigned i = start_idx; i < 4; i++) { - if (!(vec->dest.write_mask & (1 << i))) - continue; - - if (!vec->src[i].src.is_ssa || - vec->src[i].src.ssa != &src_alu->dest.dest.ssa) - continue; - - write_mask |= 1 << i; - } - - /* If the instruction would be vectorized but the backend - * doesn't support vectorizing this op, abort. */ - if (data->cb && !data->cb(&src_alu->instr, write_mask, data->data)) - return 0; - - for (unsigned i = start_idx; i < 4; i++) { - if (!(write_mask & (1 << i))) - continue; - - /* At this point, the given vec source matches up with the ALU - * instruction so we can re-swizzle that component to match. - */ - if (has_replicated_dest(src_alu)) { - /* Since the destination is a single replicated value, we don't need - * to do any reswizzling - */ - } else { - for (unsigned j = 0; j < nir_op_infos[src_alu->op].num_inputs; j++) - src_alu->src[j].swizzle[i] = swizzles[j][vec->src[i].swizzle[0]]; - } - - /* Clear the no longer needed vec source */ - nir_instr_rewrite_src(&vec->instr, &vec->src[i].src, NIR_SRC_INIT); - } - - nir_instr_rewrite_dest(&src_alu->instr, &src_alu->dest.dest, vec->dest.dest); - src_alu->dest.write_mask = write_mask; - - return write_mask; -} - -static bool -nir_lower_vec_to_movs_instr(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *vec = nir_instr_as_alu(instr); - - switch (vec->op) { - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - break; - default: - return false; - } - - bool vec_had_ssa_dest = vec->dest.dest.is_ssa; - if (vec->dest.dest.is_ssa) { - /* Since we insert multiple MOVs, we have a register destination. */ - nir_register *reg = nir_local_reg_create(b->impl); - reg->num_components = vec->dest.dest.ssa.num_components; - reg->bit_size = vec->dest.dest.ssa.bit_size; - - nir_ssa_def_rewrite_uses_src(&vec->dest.dest.ssa, nir_src_for_reg(reg)); - - nir_instr_rewrite_dest(&vec->instr, &vec->dest.dest, - nir_dest_for_reg(reg)); - } - - unsigned finished_write_mask = 0; - - /* First, emit a MOV for all the src channels that are in the - * destination reg, in case other values we're populating in the dest - * might overwrite them. - */ - for (unsigned i = 0; i < 4; i++) { - if (!(vec->dest.write_mask & (1 << i))) - continue; - - if (src_matches_dest_reg(&vec->dest.dest, &vec->src[i].src)) { - finished_write_mask |= insert_mov(vec, i, b->shader); - break; - } - } - - /* Now, emit MOVs for all the other src channels. */ - for (unsigned i = 0; i < 4; i++) { - if (!(vec->dest.write_mask & (1 << i))) - continue; - - /* Coalescing moves the register writes from the vec up to the ALU - * instruction in the source. We can only do this if the original - * vecN had an SSA destination. - */ - if (vec_had_ssa_dest && !(finished_write_mask & (1 << i))) - finished_write_mask |= try_coalesce(vec, i, data); - - if (!(finished_write_mask & (1 << i))) - finished_write_mask |= insert_mov(vec, i, b->shader); - } - - nir_instr_remove(&vec->instr); - nir_instr_free(&vec->instr); - - return true; -} - -bool -nir_lower_vec_to_movs(nir_shader *shader, nir_instr_writemask_filter_cb cb, - const void *_data) -{ - struct vec_to_movs_data data = { - .cb = cb, - .data = _data, - }; - - return nir_shader_instructions_pass(shader, - nir_lower_vec_to_movs_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &data); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_viewport_transform.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_viewport_transform.c deleted file mode 100644 index 55130a7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_viewport_transform.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2019 Alyssa Rosenzweig - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* On some hardware (particularly, all current versions of Mali GPUs), - * vertex shaders do not output gl_Position in world-space. Instead, they - * output gl_Position in transformed screen space via the "pseudo" - * position varying. Thus, this pass finds writes to gl_Position and - * changes them to transformed writes, still to gl_Position. The - * outputted screen space is still written back to VARYING_SLOT_POS, - * which is semantically ambiguous but nevertheless a good match for - * Gallium/NIR/Mali. - * - * Implements coordinate transformation as defined in section 12.5 - * "Coordinate Transformation" of the OpenGL ES 3.2 full specification. - * - * This pass must run before lower_vars/lower_io such that derefs are - * still in place. - */ - -#include "nir.h" -#include "nir_builder.h" - -void -nir_lower_viewport_transform(nir_shader *shader) -{ - assert((shader->info.stage == MESA_SHADER_VERTEX) - || (shader->info.stage == MESA_SHADER_GEOMETRY) - || (shader->info.stage == MESA_SHADER_TESS_EVAL)); - - nir_foreach_function(func, shader) { - nir_foreach_block(block, func->impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_variable *var = nir_intrinsic_get_var(intr, 0); - if (var->data.mode != nir_var_shader_out || - var->data.location != VARYING_SLOT_POS) - continue; - - nir_builder b; - nir_builder_init(&b, func->impl); - b.cursor = nir_before_instr(instr); - - /* Grab the source and viewport */ - nir_ssa_def *input_point = nir_ssa_for_src(&b, intr->src[1], 4); - nir_ssa_def *scale = nir_load_viewport_scale(&b); - nir_ssa_def *offset = nir_load_viewport_offset(&b); - - /* World space to normalised device coordinates to screen space */ - - nir_ssa_def *w_recip = nir_frcp(&b, nir_channel(&b, input_point, 3)); - - nir_ssa_def *ndc_point = nir_fmul(&b, - nir_channels(&b, input_point, 0x7), w_recip); - - nir_ssa_def *screen = nir_fadd(&b, - nir_fmul(&b, ndc_point, scale), offset); - - /* gl_Position will be written out in screenspace xyz, with w set to - * the reciprocal we computed earlier. The transformed w component is - * then used for perspective-correct varying interpolation. The - * transformed w component must preserve its original sign; this is - * used in depth clipping computations - */ - - nir_ssa_def *screen_space = nir_vec4(&b, - nir_channel(&b, screen, 0), - nir_channel(&b, screen, 1), - nir_channel(&b, screen, 2), - w_recip); - - nir_instr_rewrite_src(instr, &intr->src[1], - nir_src_for_ssa(screen_space)); - } - } - - nir_metadata_preserve(func->impl, nir_metadata_block_index | - nir_metadata_dominance); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wpos_center.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wpos_center.c deleted file mode 100644 index 8b27e06..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wpos_center.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../mesa/program/prog_instruction.h" - -/** - * This pass adds <0.5, 0.5> to all uses of gl_FragCoord. - * - * Run before nir_lower_io(). - * - * For a more full featured pass, consider using nir_lower_wpos_ytransform(), - * which can handle pixel center integer / half integer, and origin lower - * left / upper left transformations. - * - * This simple pass is primarily intended for use by Vulkan drivers on - * hardware which provides an integer pixel center. Vulkan mandates that - * the pixel center must be half-integer, and also that the coordinate - * system's origin must be upper left. This means that there's no need - * for a uniform - we can always just add a constant. In the case that - * sample shading is enabled, Vulkan expects FragCoord to include sample - * positions. - */ - -static void -update_fragcoord(nir_builder *b, nir_intrinsic_instr *intr) -{ - nir_ssa_def *wpos = &intr->dest.ssa; - - assert(intr->dest.is_ssa); - - b->cursor = nir_after_instr(&intr->instr); - - nir_ssa_def *spos = nir_load_sample_pos_or_center(b); - - wpos = nir_fadd(b, wpos, - nir_vec4(b, - nir_channel(b, spos, 0), - nir_channel(b, spos, 1), - nir_imm_float(b, 0.0f), - nir_imm_float(b, 0.0f))); - - nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, wpos, - wpos->parent_instr); -} - -static bool -lower_wpos_center_block(nir_builder *b, nir_block *block) -{ - bool progress = false; - - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic == nir_intrinsic_load_frag_coord) { - update_fragcoord(b, intr); - progress = true; - } - } - } - - return progress; -} - -bool -nir_lower_wpos_center(nir_shader *shader) -{ - bool progress = false; - nir_builder b; - - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder_init(&b, function->impl); - - nir_foreach_block(block, function->impl) { - progress = lower_wpos_center_block(&b, block) || - progress; - } - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wpos_ytransform.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wpos_ytransform.c deleted file mode 100644 index 71971db..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wpos_ytransform.c +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../mesa/program/prog_instruction.h" - -/* Lower gl_FragCoord (and fddy) to account for driver's requested coordinate- - * origin and pixel-center vs. shader. If transformation is required, a - * gl_FbWposYTransform uniform is inserted (with the specified state-slots) - * and additional instructions are inserted to transform gl_FragCoord (and - * fddy src arg). - * - * This is based on the logic in emit_wpos()/emit_wpos_adjustment() in TGSI - * compiler. - * - * Run before nir_lower_io. - */ - -typedef struct { - const nir_lower_wpos_ytransform_options *options; - nir_shader *shader; - nir_builder b; - nir_variable *transform; -} lower_wpos_ytransform_state; - -static nir_ssa_def * -get_transform(lower_wpos_ytransform_state *state) -{ - if (state->transform == NULL) { - /* NOTE: name must be prefixed w/ "gl_" to trigger slot based - * special handling in uniform setup: - */ - nir_variable *var = nir_variable_create(state->shader, - nir_var_uniform, - glsl_vec4_type(), - "gl_FbWposYTransform"); - - var->num_state_slots = 1; - var->state_slots = ralloc_array(var, nir_state_slot, 1); - var->state_slots[0].swizzle = SWIZZLE_XYZW; - memcpy(var->state_slots[0].tokens, state->options->state_tokens, - sizeof(var->state_slots[0].tokens)); - var->data.how_declared = nir_var_hidden; - state->transform = var; - } - return nir_load_var(&state->b, state->transform); -} - -/* NIR equiv of TGSI CMP instruction: */ -static nir_ssa_def * -nir_cmp(nir_builder *b, nir_ssa_def *src0, nir_ssa_def *src1, nir_ssa_def *src2) -{ - return nir_bcsel(b, nir_flt(b, src0, nir_imm_float(b, 0.0)), src1, src2); -} - -/* see emit_wpos_adjustment() in st_mesa_to_tgsi.c */ -static void -emit_wpos_adjustment(lower_wpos_ytransform_state *state, - nir_intrinsic_instr *intr, bool invert, - float adjX, float adjY[2]) -{ - nir_builder *b = &state->b; - nir_ssa_def *wpostrans, *wpos_temp, *wpos_temp_y, *wpos_input; - - assert(intr->dest.is_ssa); - wpos_input = &intr->dest.ssa; - - b->cursor = nir_after_instr(&intr->instr); - - wpostrans = get_transform(state); - - /* First, apply the coordinate shift: */ - if (adjX || adjY[0] || adjY[1]) { - if (adjY[0] != adjY[1]) { - /* Adjust the y coordinate by adjY[1] or adjY[0] respectively - * depending on whether inversion is actually going to be applied - * or not, which is determined by testing against the inversion - * state variable used below, which will be either +1 or -1. - */ - nir_ssa_def *adj_temp; - - adj_temp = nir_cmp(b, - nir_channel(b, wpostrans, invert ? 2 : 0), - nir_imm_vec4(b, adjX, adjY[0], 0.0f, 0.0f), - nir_imm_vec4(b, adjX, adjY[1], 0.0f, 0.0f)); - - wpos_temp = nir_fadd(b, wpos_input, adj_temp); - } else { - wpos_temp = nir_fadd(b, - wpos_input, - nir_imm_vec4(b, adjX, adjY[0], 0.0f, 0.0f)); - } - wpos_input = wpos_temp; - } else { - /* MOV wpos_temp, input[wpos] - */ - wpos_temp = wpos_input; - } - - /* Now the conditional y flip: STATE_FB_WPOS_Y_TRANSFORM.xy/zw will be - * inversion/identity, or the other way around if we're drawing to an FBO. - */ - if (invert) { - /* wpos_temp.y = wpos_input * wpostrans.xxxx + wpostrans.yyyy */ - wpos_temp_y = nir_fadd(b, nir_fmul(b, nir_channel(b, wpos_temp, 1), - nir_channel(b, wpostrans, 0)), - nir_channel(b, wpostrans, 1)); - } else { - /* wpos_temp.y = wpos_input * wpostrans.zzzz + wpostrans.wwww */ - wpos_temp_y = nir_fadd(b, nir_fmul(b, nir_channel(b, wpos_temp, 1), - nir_channel(b, wpostrans, 2)), - nir_channel(b, wpostrans, 3)); - } - - wpos_temp = nir_vec4(b, - nir_channel(b, wpos_temp, 0), - wpos_temp_y, - nir_channel(b, wpos_temp, 2), - nir_channel(b, wpos_temp, 3)); - - nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, - wpos_temp, - wpos_temp->parent_instr); -} - -static void -lower_fragcoord(lower_wpos_ytransform_state *state, nir_intrinsic_instr *intr) -{ - const nir_lower_wpos_ytransform_options *options = state->options; - float adjX = 0.0f; - float adjY[2] = { 0.0f, 0.0f }; - bool invert = false; - - /* Based on logic in emit_wpos(): - * - * Query the pixel center conventions supported by the pipe driver and set - * adjX, adjY to help out if it cannot handle the requested one internally. - * - * The bias of the y-coordinate depends on whether y-inversion takes place - * (adjY[1]) or not (adjY[0]), which is in turn dependent on whether we are - * drawing to an FBO (causes additional inversion), and whether the pipe - * driver origin and the requested origin differ (the latter condition is - * stored in the 'invert' variable). - * - * For height = 100 (i = integer, h = half-integer, l = lower, u = upper): - * - * center shift only: - * i -> h: +0.5 - * h -> i: -0.5 - * - * inversion only: - * l,i -> u,i: ( 0.0 + 1.0) * -1 + 100 = 99 - * l,h -> u,h: ( 0.5 + 0.0) * -1 + 100 = 99.5 - * u,i -> l,i: (99.0 + 1.0) * -1 + 100 = 0 - * u,h -> l,h: (99.5 + 0.0) * -1 + 100 = 0.5 - * - * inversion and center shift: - * l,i -> u,h: ( 0.0 + 0.5) * -1 + 100 = 99.5 - * l,h -> u,i: ( 0.5 + 0.5) * -1 + 100 = 99 - * u,i -> l,h: (99.0 + 0.5) * -1 + 100 = 0.5 - * u,h -> l,i: (99.5 + 0.5) * -1 + 100 = 0 - */ - - if (state->shader->info.fs.origin_upper_left) { - /* Fragment shader wants origin in upper-left */ - if (options->fs_coord_origin_upper_left) { - /* the driver supports upper-left origin */ - } else if (options->fs_coord_origin_lower_left) { - /* the driver supports lower-left origin, need to invert Y */ - invert = true; - } else { - unreachable("invalid options"); - } - } else { - /* Fragment shader wants origin in lower-left */ - if (options->fs_coord_origin_lower_left) { - /* the driver supports lower-left origin */ - } else if (options->fs_coord_origin_upper_left) { - /* the driver supports upper-left origin, need to invert Y */ - invert = true; - } else { - unreachable("invalid options"); - } - } - - if (state->shader->info.fs.pixel_center_integer) { - /* Fragment shader wants pixel center integer */ - if (options->fs_coord_pixel_center_integer) { - /* the driver supports pixel center integer */ - adjY[1] = 1.0f; - } else if (options->fs_coord_pixel_center_half_integer) { - /* the driver supports pixel center half integer, need to bias X,Y */ - adjX = -0.5f; - adjY[0] = -0.5f; - adjY[1] = 0.5f; - } else { - unreachable("invalid options"); - } - } else { - /* Fragment shader wants pixel center half integer */ - if (options->fs_coord_pixel_center_half_integer) { - /* the driver supports pixel center half integer */ - } else if (options->fs_coord_pixel_center_integer) { - /* the driver supports pixel center integer, need to bias X,Y */ - adjX = adjY[0] = adjY[1] = 0.5f; - } else { - unreachable("invalid options"); - } - } - - emit_wpos_adjustment(state, intr, invert, adjX, adjY); -} - -/* turns 'fddy(p)' into 'fddy(fmul(p, transform.x))' */ -static void -lower_fddy(lower_wpos_ytransform_state *state, nir_alu_instr *fddy) -{ - nir_builder *b = &state->b; - nir_ssa_def *p, *pt, *trans; - - b->cursor = nir_before_instr(&fddy->instr); - - p = nir_ssa_for_alu_src(b, fddy, 0); - trans = nir_channel(b, get_transform(state), 0); - if (p->bit_size == 16) - trans = nir_f2f16(b, trans); - - pt = nir_fmul(b, p, trans); - - nir_instr_rewrite_src(&fddy->instr, - &fddy->src[0].src, - nir_src_for_ssa(pt)); - - for (unsigned i = 0; i < 4; i++) - fddy->src[0].swizzle[i] = MIN2(i, pt->num_components - 1); -} - -/* Multiply interp_deref_at_offset's offset by transform.x to flip it. */ -static void -lower_interp_deref_at_offset(lower_wpos_ytransform_state *state, - nir_intrinsic_instr *interp) -{ - nir_builder *b = &state->b; - nir_ssa_def *offset; - nir_ssa_def *flip_y; - - b->cursor = nir_before_instr(&interp->instr); - - offset = nir_ssa_for_src(b, interp->src[1], 2); - flip_y = nir_fmul(b, nir_channel(b, offset, 1), - nir_channel(b, get_transform(state), 0)); - nir_instr_rewrite_src(&interp->instr, &interp->src[1], - nir_src_for_ssa(nir_vec2(b, nir_channel(b, offset, 0), - flip_y))); -} - -static void -lower_load_sample_pos(lower_wpos_ytransform_state *state, - nir_intrinsic_instr *intr) -{ - nir_builder *b = &state->b; - b->cursor = nir_after_instr(&intr->instr); - - nir_ssa_def *pos = &intr->dest.ssa; - nir_ssa_def *scale = nir_channel(b, get_transform(state), 0); - nir_ssa_def *neg_scale = nir_channel(b, get_transform(state), 2); - /* Either y or 1-y for scale equal to 1 or -1 respectively. */ - nir_ssa_def *flipped_y = - nir_fadd(b, nir_fmax(b, neg_scale, nir_imm_float(b, 0.0)), - nir_fmul(b, nir_channel(b, pos, 1), scale)); - nir_ssa_def *flipped_pos = nir_vec2(b, nir_channel(b, pos, 0), flipped_y); - - nir_ssa_def_rewrite_uses_after(&intr->dest.ssa, flipped_pos, - flipped_pos->parent_instr); -} - -static void -lower_wpos_ytransform_block(lower_wpos_ytransform_state *state, nir_block *block) -{ - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic == nir_intrinsic_load_deref) { - nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); - nir_variable *var = nir_deref_instr_get_variable(deref); - - if ((var->data.mode == nir_var_shader_in && - var->data.location == VARYING_SLOT_POS) || - (var->data.mode == nir_var_system_value && - var->data.location == SYSTEM_VALUE_FRAG_COORD)) { - /* gl_FragCoord should not have array/struct derefs: */ - lower_fragcoord(state, intr); - } else if (var->data.mode == nir_var_system_value && - var->data.location == SYSTEM_VALUE_SAMPLE_POS) { - lower_load_sample_pos(state, intr); - } - } else if (intr->intrinsic == nir_intrinsic_load_frag_coord) { - lower_fragcoord(state, intr); - } else if (intr->intrinsic == nir_intrinsic_load_sample_pos) { - lower_load_sample_pos(state, intr); - } else if (intr->intrinsic == nir_intrinsic_interp_deref_at_offset) { - lower_interp_deref_at_offset(state, intr); - } - } else if (instr->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (alu->op == nir_op_fddy || - alu->op == nir_op_fddy_fine || - alu->op == nir_op_fddy_coarse) - lower_fddy(state, alu); - } - } -} - -static void -lower_wpos_ytransform_impl(lower_wpos_ytransform_state *state, nir_function_impl *impl) -{ - nir_builder_init(&state->b, impl); - - nir_foreach_block(block, impl) { - lower_wpos_ytransform_block(state, block); - } - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); -} - -bool -nir_lower_wpos_ytransform(nir_shader *shader, - const nir_lower_wpos_ytransform_options *options) -{ - lower_wpos_ytransform_state state = { - .options = options, - .shader = shader, - }; - - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - nir_foreach_function(function, shader) { - if (function->impl) - lower_wpos_ytransform_impl(&state, function->impl); - } - - return state.transform != NULL; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wrmasks.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wrmasks.c deleted file mode 100644 index d5dd188..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_lower_wrmasks.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright © 2020 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* A pass to split intrinsics with discontinuous writemasks into ones - * with contiguous writemasks starting with .x, ie: - * - * vec4 32 ssa_76 = vec4 ssa_35, ssa_35, ssa_35, ssa_35 - * intrinsic store_ssbo (ssa_76, ssa_105, ssa_106) (2, 0, 4, 0) // wrmask=y - * - * is turned into: - * - * vec4 32 ssa_76 = vec4 ssa_35, ssa_35, ssa_35, ssa_35 - * vec1 32 ssa_107 = load_const (0x00000001) - * vec1 32 ssa_108 = iadd ssa_106, ssa_107 - * vec1 32 ssa_109 = mov ssa_76.y - * intrinsic store_ssbo (ssa_109, ssa_105, ssa_108) (1, 0, 4, 0) // wrmask=x - * - * and likewise: - * - * vec4 32 ssa_76 = vec4 ssa_35, ssa_35, ssa_35, ssa_35 - * intrinsic store_ssbo (ssa_76, ssa_105, ssa_106) (15, 0, 4, 0) // wrmask=xzw - * - * is split into: - * - * // .x component: - * vec4 32 ssa_76 = vec4 ssa_35, ssa_35, ssa_35, ssa_35 - * vec1 32 ssa_107 = load_const (0x00000000) - * vec1 32 ssa_108 = iadd ssa_106, ssa_107 - * vec1 32 ssa_109 = mov ssa_76.x - * intrinsic store_ssbo (ssa_109, ssa_105, ssa_108) (1, 0, 4, 0) // wrmask=x - * // .zw components: - * vec1 32 ssa_110 = load_const (0x00000002) - * vec1 32 ssa_111 = iadd ssa_106, ssa_110 - * vec2 32 ssa_112 = mov ssa_76.zw - * intrinsic store_ssbo (ssa_112, ssa_105, ssa_111) (3, 0, 4, 0) // wrmask=xy - */ - -static int -value_src(nir_intrinsic_op intrinsic) -{ - switch (intrinsic) { - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_vertex_output: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_global: - case nir_intrinsic_store_scratch: - return 0; - default: - return -1; - } -} - -static int -offset_src(nir_intrinsic_op intrinsic) -{ - switch (intrinsic) { - case nir_intrinsic_store_output: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_global: - case nir_intrinsic_store_scratch: - return 1; - case nir_intrinsic_store_per_vertex_output: - case nir_intrinsic_store_ssbo: - return 2; - default: - return -1; - } -} - -static void -split_wrmask(nir_builder *b, nir_intrinsic_instr *intr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[intr->intrinsic]; - - b->cursor = nir_before_instr(&intr->instr); - - assert(!info->has_dest); /* expecting only store intrinsics */ - - unsigned num_srcs = info->num_srcs; - unsigned value_idx = value_src(intr->intrinsic); - unsigned offset_idx = offset_src(intr->intrinsic); - unsigned num_comp = nir_intrinsic_src_components(intr, value_idx); - - unsigned wrmask = nir_intrinsic_write_mask(intr); - while (wrmask) { - unsigned first_component = ffs(wrmask) - 1; - unsigned length = ffs(~(wrmask >> first_component)) - 1; - - nir_ssa_def *value = nir_ssa_for_src(b, intr->src[value_idx], num_comp); - nir_ssa_def *offset = nir_ssa_for_src(b, intr->src[offset_idx], 1); - - /* swizzle out the consecutive components that we'll store - * in this iteration: - */ - unsigned cur_mask = (BITFIELD_MASK(length) << first_component); - value = nir_channels(b, value, cur_mask); - - /* and create the replacement intrinsic: */ - nir_intrinsic_instr *new_intr = - nir_intrinsic_instr_create(b->shader, intr->intrinsic); - - nir_intrinsic_copy_const_indices(new_intr, intr); - nir_intrinsic_set_write_mask(new_intr, BITFIELD_MASK(length)); - - const int offset_units = value->bit_size / 8; - - if (nir_intrinsic_has_align_mul(intr)) { - assert(nir_intrinsic_has_align_offset(intr)); - unsigned align_mul = nir_intrinsic_align_mul(intr); - unsigned align_off = nir_intrinsic_align_offset(intr); - - align_off += offset_units * first_component; - align_off = align_off % align_mul; - - nir_intrinsic_set_align(new_intr, align_mul, align_off); - } - - /* if the instruction has a BASE, fold the offset adjustment - * into that instead of adding alu instructions, otherwise add - * instructions - */ - unsigned offset_adj = offset_units * first_component; - if (nir_intrinsic_has_base(intr)) { - nir_intrinsic_set_base(new_intr, - nir_intrinsic_base(intr) + offset_adj); - } else { - offset = nir_iadd(b, offset, - nir_imm_intN_t(b, offset_adj, offset->bit_size)); - } - - new_intr->num_components = length; - - /* Copy the sources, replacing value/offset, and passing everything - * else through to the new instrution: - */ - for (unsigned i = 0; i < num_srcs; i++) { - if (i == value_idx) { - new_intr->src[i] = nir_src_for_ssa(value); - } else if (i == offset_idx) { - new_intr->src[i] = nir_src_for_ssa(offset); - } else { - new_intr->src[i] = intr->src[i]; - } - } - - nir_builder_instr_insert(b, &new_intr->instr); - - /* Clear the bits in the writemask that we just wrote, then try - * again to see if more channels are left. - */ - wrmask &= ~cur_mask; - } - - /* Finally remove the original intrinsic. */ - nir_instr_remove(&intr->instr); -} - -struct nir_lower_wrmasks_state { - nir_instr_filter_cb cb; - const void *data; -}; - -static bool -nir_lower_wrmasks_instr(nir_builder *b, nir_instr *instr, void *data) -{ - struct nir_lower_wrmasks_state *state = data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - /* if no wrmask, then skip it: */ - if (!nir_intrinsic_has_write_mask(intr)) - return false; - - /* if wrmask is already contiguous, then nothing to do: */ - if (nir_intrinsic_write_mask(intr) == BITFIELD_MASK(intr->num_components)) - return false; - - /* do we know how to lower this instruction? */ - if (value_src(intr->intrinsic) < 0) - return false; - - assert(offset_src(intr->intrinsic) >= 0); - - /* does backend need us to lower this intrinsic? */ - if (state->cb && !state->cb(instr, state->data)) - return false; - - split_wrmask(b, intr); - - return true; -} - -bool -nir_lower_wrmasks(nir_shader *shader, nir_instr_filter_cb cb, const void *data) -{ - struct nir_lower_wrmasks_state state = { - .cb = cb, - .data = data, - }; - - return nir_shader_instructions_pass(shader, - nir_lower_wrmasks_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &state); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_metadata.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_metadata.c deleted file mode 100644 index 0eab77f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_metadata.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -/* - * Handles management of the metadata. - */ - -void -nir_metadata_require(nir_function_impl *impl, nir_metadata required, ...) -{ -#define NEEDS_UPDATE(X) ((required & ~impl->valid_metadata) & (X)) - - if (NEEDS_UPDATE(nir_metadata_block_index)) - nir_index_blocks(impl); - if (NEEDS_UPDATE(nir_metadata_instr_index)) - nir_index_instrs(impl); - if (NEEDS_UPDATE(nir_metadata_dominance)) - nir_calc_dominance_impl(impl); - if (NEEDS_UPDATE(nir_metadata_live_ssa_defs)) - nir_live_ssa_defs_impl(impl); - if (NEEDS_UPDATE(nir_metadata_loop_analysis)) { - va_list ap; - va_start(ap, required); - /* !! Warning !! Do not move these va_arg() call directly to - * nir_loop_analyze_impl() as parameters because the execution order will - * become undefined. - */ - nir_variable_mode mode = va_arg(ap, nir_variable_mode); - int force_unroll_sampler_indirect = va_arg(ap, int); - nir_loop_analyze_impl(impl, mode, force_unroll_sampler_indirect); - va_end(ap); - } - -#undef NEEDS_UPDATE - - impl->valid_metadata |= required; -} - -void -nir_metadata_preserve(nir_function_impl *impl, nir_metadata preserved) -{ - impl->valid_metadata &= preserved; -} - -void -nir_shader_preserve_all_metadata(nir_shader *shader) -{ - nir_foreach_function(function, shader) { - if (function->impl) - nir_metadata_preserve(function->impl, nir_metadata_all); - } -} - -#ifndef NDEBUG -/** - * Make sure passes properly invalidate metadata (part 1). - * - * Call this before running a pass to set a bogus metadata flag, which will - * only be preserved if the pass forgets to call nir_metadata_preserve(). - */ -void -nir_metadata_set_validation_flag(nir_shader *shader) -{ - nir_foreach_function(function, shader) { - if (function->impl) { - function->impl->valid_metadata |= nir_metadata_not_properly_reset; - } - } -} - -/** - * Make sure passes properly invalidate metadata (part 2). - * - * Call this after a pass makes progress to verify that the bogus metadata set by - * the earlier function was properly thrown away. Note that passes may not call - * nir_metadata_preserve() if they don't actually make any changes at all. - */ -void -nir_metadata_check_validation_flag(nir_shader *shader) -{ - nir_foreach_function(function, shader) { - if (function->impl) { - assert(!(function->impl->valid_metadata & - nir_metadata_not_properly_reset)); - } - } -} -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_mod_analysis.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_mod_analysis.c deleted file mode 100644 index aaf26e8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_mod_analysis.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright © 2022 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -static nir_alu_type -nir_alu_src_type(const nir_alu_instr *instr, unsigned src) -{ - return nir_alu_type_get_base_type(nir_op_infos[instr->op].input_types[src]) | - nir_src_bit_size(instr->src[src].src); -} - -static nir_ssa_scalar -nir_alu_arg(const nir_alu_instr *alu, unsigned arg, unsigned comp) -{ - const nir_alu_src *src = &alu->src[arg]; - return nir_get_ssa_scalar(src->src.ssa, src->swizzle[comp]); -} - -/* Tries to determine the value of expression "val % div", assuming that val - * is interpreted as value of type "val_type". "div" must be a power of two. - * Returns true if it can statically tell the value of "val % div", false if not. - * Value of *mod is undefined if this function returned false. - * - * Tests are in mod_analysis_tests.cpp. - */ -bool -nir_mod_analysis(nir_ssa_scalar val, nir_alu_type val_type, unsigned div, unsigned *mod) -{ - if (div == 1) { - *mod = 0; - return true; - } - - assert(util_is_power_of_two_nonzero(div)); - - switch (val.def->parent_instr->type) { - case nir_instr_type_load_const: { - nir_load_const_instr *load = - nir_instr_as_load_const(val.def->parent_instr); - nir_alu_type base_type = nir_alu_type_get_base_type(val_type); - - if (base_type == nir_type_uint) { - assert(val.comp < load->def.num_components); - uint64_t ival = nir_const_value_as_uint(load->value[val.comp], - load->def.bit_size); - *mod = ival % div; - return true; - } else if (base_type == nir_type_int) { - assert(val.comp < load->def.num_components); - int64_t ival = nir_const_value_as_int(load->value[val.comp], - load->def.bit_size); - - /* whole analysis collapses the moment we allow negative values */ - if (ival < 0) - return false; - - *mod = ((uint64_t)ival) % div; - return true; - } - - break; - } - - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(val.def->parent_instr); - - if (alu->dest.dest.ssa.num_components != 1) - return false; - - switch (alu->op) { - case nir_op_ishr: { - if (nir_src_is_const(alu->src[1].src)) { - assert(alu->src[1].src.ssa->num_components == 1); - uint64_t shift = nir_src_as_uint(alu->src[1].src); - - if (util_last_bit(div) + shift > 32) - break; - - nir_alu_type type0 = nir_alu_src_type(alu, 0); - if (!nir_mod_analysis(nir_alu_arg(alu, 0, val.comp), type0, div << shift, mod)) - return false; - - *mod >>= shift; - return true; - } - break; - } - - case nir_op_iadd: { - unsigned mod0; - nir_alu_type type0 = nir_alu_src_type(alu, 0); - if (!nir_mod_analysis(nir_alu_arg(alu, 0, val.comp), type0, div, &mod0)) - return false; - - unsigned mod1; - nir_alu_type type1 = nir_alu_src_type(alu, 1); - if (!nir_mod_analysis(nir_alu_arg(alu, 1, val.comp), type1, div, &mod1)) - return false; - - *mod = (mod0 + mod1) % div; - return true; - } - - case nir_op_ishl: { - if (nir_src_is_const(alu->src[1].src)) { - assert(alu->src[1].src.ssa->num_components == 1); - uint64_t shift = nir_src_as_uint(alu->src[1].src); - - if ((div >> shift) == 0) { - *mod = 0; - return true; - } - nir_alu_type type0 = nir_alu_src_type(alu, 0); - return nir_mod_analysis(nir_alu_arg(alu, 0, val.comp), type0, div >> shift, mod); - } - break; - } - - case nir_op_imul_32x16: /* multiply 32-bits with low 16-bits */ - case nir_op_imul: { - unsigned mod0; - nir_alu_type type0 = nir_alu_src_type(alu, 0); - bool s1 = nir_mod_analysis(nir_alu_arg(alu, 0, val.comp), type0, div, &mod0); - - if (s1 && (mod0 == 0)) { - *mod = 0; - return true; - } - - /* if divider is larger than 2nd source max (interpreted) value - * then modulo of multiplication is unknown - */ - if (alu->op == nir_op_imul_32x16 && div > (1u << 16)) - return false; - - unsigned mod1; - nir_alu_type type1 = nir_alu_src_type(alu, 1); - bool s2 = nir_mod_analysis(nir_alu_arg(alu, 1, val.comp), type1, div, &mod1); - - if (s2 && (mod1 == 0)) { - *mod = 0; - return true; - } - - if (!s1 || !s2) - return false; - - *mod = (mod0 * mod1) % div; - return true; - } - - default: - break; - } - break; - } - - default: - break; - } - - return false; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_move_vec_src_uses_to_dest.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_move_vec_src_uses_to_dest.c deleted file mode 100644 index 6deffcd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_move_vec_src_uses_to_dest.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -/* - * Implements a pass that tries to move uses vecN sources to their - * destinations. This is kind of like an inverse copy-propagation pass. - * For instance, if you have - * - * ssa_1 = vec4(a, b, c, d) - * ssa_2 = fadd(a, b) - * - * This will be turned into - * - * ssa_1 = vec4(a, b, c, d) - * ssa_2 = fadd(ssa_1.x, ssa_1.y) - * - * While this is "worse" because it adds a bunch of unneeded dependencies, it - * actually makes it much easier for vec4-based backends to coalesce the MOVs - * that result from the vec4 operation because it doesn't have to worry about - * quite as many reads. - */ - -/* Returns true if the given SSA def dominates the instruction. An SSA def is - * considered to *not* dominate the instruction that defines it. - */ -static bool -ssa_def_dominates_instr(nir_ssa_def *def, nir_instr *instr) -{ - if (instr->index <= def->parent_instr->index) { - return false; - } else if (def->parent_instr->block == instr->block) { - return def->parent_instr->index < instr->index; - } else { - return nir_block_dominates(def->parent_instr->block, instr->block); - } -} - -static bool -move_vec_src_uses_to_dest_block(nir_block *block) -{ - bool progress = false; - - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *vec = nir_instr_as_alu(instr); - - switch (vec->op) { - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - break; - default: - continue; /* The loop */ - } - - /* Can't handle non-SSA vec operations */ - if (!vec->dest.dest.is_ssa) - continue; - - /* Can't handle saturation */ - if (vec->dest.saturate) - continue; - - /* First, mark all of the sources we are going to consider for rewriting - * to the destination - */ - int srcs_remaining = 0; - for (unsigned i = 0; i < nir_op_infos[vec->op].num_inputs; i++) { - /* We can't rewrite a source if it's not in SSA form */ - if (!vec->src[i].src.is_ssa) - continue; - - /* We can't rewrite a source if it has modifiers */ - if (vec->src[i].abs || vec->src[i].negate) - continue; - - srcs_remaining |= 1 << i; - } - - /* We can't actually do anything with this instruction */ - if (srcs_remaining == 0) - continue; - - for (unsigned i; i = ffs(srcs_remaining) - 1, srcs_remaining;) { - int8_t swizzle[NIR_MAX_VEC_COMPONENTS]; - memset(swizzle, -1, sizeof(swizzle)); - - for (unsigned j = i; j < nir_op_infos[vec->op].num_inputs; j++) { - if (vec->src[j].src.ssa != vec->src[i].src.ssa) - continue; - - /* Mark the given channel as having been handled */ - srcs_remaining &= ~(1 << j); - - /* Mark the appropriate channel as coming from src j */ - swizzle[vec->src[j].swizzle[0]] = j; - } - - nir_foreach_use_safe(use, vec->src[i].src.ssa) { - if (use->parent_instr == &vec->instr) - continue; - - /* We need to dominate the use if we are going to rewrite it */ - if (!ssa_def_dominates_instr(&vec->dest.dest.ssa, use->parent_instr)) - continue; - - /* For now, we'll just rewrite ALU instructions */ - if (use->parent_instr->type != nir_instr_type_alu) - continue; - - assert(use->is_ssa); - - nir_alu_instr *use_alu = nir_instr_as_alu(use->parent_instr); - - /* Figure out which source we're actually looking at */ - nir_alu_src *use_alu_src = exec_node_data(nir_alu_src, use, src); - unsigned src_idx = use_alu_src - use_alu->src; - assert(src_idx < nir_op_infos[use_alu->op].num_inputs); - - bool can_reswizzle = true; - for (unsigned j = 0; j < 4; j++) { - if (!nir_alu_instr_channel_used(use_alu, src_idx, j)) - continue; - - if (swizzle[use_alu_src->swizzle[j]] == -1) { - can_reswizzle = false; - break; - } - } - - if (!can_reswizzle) - continue; - - /* At this point, we have determined that the given use can be - * reswizzled to actually use the destination of the vecN operation. - * Go ahead and rewrite it as needed. - */ - nir_instr_rewrite_src(use->parent_instr, use, - nir_src_for_ssa(&vec->dest.dest.ssa)); - for (unsigned j = 0; j < 4; j++) { - if (!nir_alu_instr_channel_used(use_alu, src_idx, j)) - continue; - - use_alu_src->swizzle[j] = swizzle[use_alu_src->swizzle[j]]; - progress = true; - } - } - } - } - - return progress; -} - -static bool -nir_move_vec_src_uses_to_dest_impl(nir_shader *shader, nir_function_impl *impl) -{ - bool progress = false; - - nir_metadata_require(impl, nir_metadata_dominance); - - nir_index_instrs(impl); - - nir_foreach_block(block, impl) { - progress |= move_vec_src_uses_to_dest_block(block); - } - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - return progress; -} - -bool -nir_move_vec_src_uses_to_dest(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_move_vec_src_uses_to_dest_impl(shader, - function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_normalize_cubemap_coords.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_normalize_cubemap_coords.c deleted file mode 100644 index ac7de65..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_normalize_cubemap_coords.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builtin_builder.h" - -/* - * Lower cubemap coordinate to have normalized coordinates where the largest - * magnitude component is -1.0 or 1.0. - */ -static bool -normalize_cubemap_coords(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_tex) - return false; - - nir_tex_instr *tex = nir_instr_as_tex(instr); - if (tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE) - return false; - - b->cursor = nir_before_instr(instr); - - int idx = nir_tex_instr_src_index(tex, nir_tex_src_coord); - if (idx < 0) - return false; - - nir_ssa_def *orig_coord = - nir_ssa_for_src(b, tex->src[idx].src, nir_tex_instr_src_size(tex, idx)); - assert(orig_coord->num_components >= 3); - - nir_ssa_def *orig_xyz = nir_trim_vector(b, orig_coord, 3); - nir_ssa_def *norm = nir_fmax_abs_vec_comp(b, orig_xyz); - nir_ssa_def *normalized = nir_fmul(b, orig_coord, nir_frcp(b, norm)); - - /* Array indices don't have to be normalized, so make a new vector - * with the coordinate's array index untouched. - */ - if (tex->coord_components == 4) { - normalized = nir_vector_insert_imm(b, normalized, - nir_channel(b, orig_coord, 3), 3); - } - - nir_instr_rewrite_src_ssa(instr, &tex->src[idx].src, normalized); - return true; -} - -bool -nir_normalize_cubemap_coords(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, normalize_cubemap_coords, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.c deleted file mode 100644 index 5bf25e7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.c +++ /dev/null @@ -1,6522 +0,0 @@ - -#include "nir.h" - -nir_op -nir_type_conversion_op(nir_alu_type src, nir_alu_type dst, nir_rounding_mode rnd) -{ - nir_alu_type src_base = (nir_alu_type) nir_alu_type_get_base_type(src); - nir_alu_type dst_base = (nir_alu_type) nir_alu_type_get_base_type(dst); - unsigned src_bit_size = nir_alu_type_get_type_size(src); - unsigned dst_bit_size = nir_alu_type_get_type_size(dst); - - if (src == dst && src_base == nir_type_float) { - return nir_op_mov; - } else if (src == dst && src_base == nir_type_bool) { - return nir_op_mov; - } else if ((src_base == nir_type_int || src_base == nir_type_uint) && - (dst_base == nir_type_int || dst_base == nir_type_uint) && - src_bit_size == dst_bit_size) { - /* Integer <-> integer conversions with the same bit-size on both - * ends are just no-op moves. - */ - return nir_op_mov; - } - - /* f2b, i2b, and u2b do not exist. Use ine or fne (via nir_type_conversion) - * instead. - */ - assert(src_base == dst_base || dst_base != nir_type_bool); - - switch (src_base) { - case nir_type_int: - switch (dst_base) { - case nir_type_int: - case nir_type_uint: - - switch (dst_bit_size) { - case 1: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2i1; - case 8: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2i8; - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2i16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2i32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2i64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_float: - switch (dst_bit_size) { - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2f16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2f32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_i2f64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_bool: - default: - unreachable("Invalid nir alu base type"); - } - case nir_type_uint: - switch (dst_base) { - case nir_type_int: - case nir_type_uint: - - switch (dst_bit_size) { - case 1: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2u1; - case 8: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2u8; - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2u16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2u32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2u64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_float: - switch (dst_bit_size) { - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2f16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2f32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_u2f64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_bool: - default: - unreachable("Invalid nir alu base type"); - } - case nir_type_float: - switch (dst_base) { - case nir_type_int: - switch (dst_bit_size) { - case 1: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2i1; - case 8: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2i8; - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2i16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2i32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2i64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_uint: - switch (dst_bit_size) { - case 1: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2u1; - case 8: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2u8; - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2u16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2u32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2u64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_float: - switch (dst_bit_size) { - case 16: - switch(rnd) { - case nir_rounding_mode_rtne: - return nir_op_f2f16_rtne; - case nir_rounding_mode_rtz: - return nir_op_f2f16_rtz; - case nir_rounding_mode_undef: - return nir_op_f2f16; - default: - unreachable("Invalid 16-bit nir rounding mode"); - } - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2f32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_f2f64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_bool: - default: - unreachable("Invalid nir alu base type"); - } - case nir_type_bool: - switch (dst_base) { - case nir_type_int: - case nir_type_uint: - - switch (dst_bit_size) { - case 1: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i1; - case 8: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i8; - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_float: - switch (dst_bit_size) { - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2f16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2f32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2f64; - default: - unreachable("Invalid nir alu bit size"); - } - case nir_type_bool: - - switch (dst_bit_size) { - case 1: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i1; - case 8: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i8; - case 16: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i16; - case 32: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i32; - case 64: - assert(rnd == nir_rounding_mode_undef); - return nir_op_b2i64; - default: - unreachable("Invalid nir alu bit size"); - } - default: - unreachable("Invalid nir alu base type"); - } - default: - unreachable("Invalid nir alu base type"); - } -} - -const nir_op_info nir_op_infos[nir_num_opcodes] = { -{ - .name = "amul", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "b16all_fequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_fequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_fequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_fequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_fequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_fequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_iequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_iequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_iequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_iequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_iequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16all_iequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_fnequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_fnequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_fnequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_fnequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_fnequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_fnequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_inequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_inequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_inequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_inequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_inequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16any_inequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool16, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b16csel", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_bool16, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "b2b1", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2b16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2b32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2b8", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2f16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2f32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2f64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2i1", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2i16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2i32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2i64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b2i8", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int8, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_bool - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "b32all_fequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_fequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_fequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_fequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_fequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_fequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_iequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_iequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_iequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_iequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_iequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32all_iequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_fnequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_fnequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_fnequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_fnequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_fnequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_fnequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_inequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_inequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_inequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_inequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_inequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32any_inequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool32, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b32csel", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_bool32, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "b8all_fequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_fequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_fequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_fequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_fequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_fequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_iequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_iequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_iequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_iequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_iequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8all_iequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_fnequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_fnequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_fnequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_fnequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_fnequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_fnequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_inequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_inequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_inequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_inequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_inequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8any_inequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool8, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "b8csel", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_bool8, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "ball_fequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_fequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_fequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_fequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_fequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_fequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_iequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_iequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_iequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_iequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_iequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ball_iequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_fnequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_fnequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_fnequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_fnequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_fnequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_fnequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_inequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_inequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_inequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_inequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_inequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bany_inequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_bool1, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "bcsel", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_bool1, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "bfi", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "bfm", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "bit_count", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "bitfield_insert", - .num_inputs = 4, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "bitfield_reverse", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "bitfield_select", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "cube_face_coord_amd", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_float32, - .input_sizes = { - 3 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "cube_face_index_amd", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 3 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "cube_r600", - .num_inputs = 1, - .output_size = 4, - .output_type = nir_type_float32, - .input_sizes = { - 3 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "extr_agx", - .num_inputs = 4, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "extract_i16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "extract_i8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "extract_u16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "extract_u8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "f2f16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2f16_rtne", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2f16_rtz", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2f32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2f64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2fmp", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2i1", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2i16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2i32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2i64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2i8", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int8, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2imp", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2u1", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2u16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2u32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2u64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2u8", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint8, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "f2ump", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "fabs", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fadd", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "fall_equal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fall_equal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fall_equal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fall_equal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fall_equal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fall_equal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fany_nequal16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fany_nequal2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fany_nequal3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fany_nequal4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fany_nequal5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fany_nequal8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float32, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fceil", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fclamp_pos_mali", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fcos", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fcos_amd", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fcos_mdg", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fcsel", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_float32, nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "fcsel_ge", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_float32, nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "fcsel_gt", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_float32, nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "fddx", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fddx_coarse", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fddx_fine", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fddx_must_abs_mali", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fddy", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fddy_coarse", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fddy_fine", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fddy_must_abs_mali", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fdiv", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fdot16", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot16_replicated", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 16, 16 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot2", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot2_replicated", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 2, 2 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot3", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot3_replicated", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 3, 3 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot4", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot4_replicated", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 4, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot5", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot5_replicated", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 5, 5 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot8", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdot8_replicated", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 8, 8 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fdph", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 3, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fdph_replicated", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 3, 4 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "feq", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "feq16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "feq32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "feq8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fexp2", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ffloor", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ffma", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ffmaz", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_float32, nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ffract", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fge", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fge16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fge32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fge8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "find_lsb", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fisfinite", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fisfinite32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fisnormal", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "flog2", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "flrp", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "flt", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "flt16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "flt32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "flt8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fmax", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "fmin", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "fmod", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fmul", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "fmulz", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "fneg", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fneu", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fneu16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fneu32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fneu8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "fpow", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fquantize2f16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "frcp", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "frem", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "frexp_exp", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "frexp_sig", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fround_even", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "frsq", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsat", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsat_signed_mali", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsign", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsin", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsin_agx", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsin_amd", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsin_mdg", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsqrt", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsub", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsum2", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsum3", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 3 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "fsum4", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_float, - .input_sizes = { - 4 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ftrunc", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "i2f16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2f32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2f64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2fmp", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int32 - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2i1", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2i16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2i32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2i64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2i8", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int8, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i2imp", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int32 - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "i32csel_ge", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "i32csel_gt", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_SELECTION -}, -{ - .name = "iabs", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "iadd", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "iadd3", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "iadd_sat", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "iand", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "ibfe", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ibitfield_extract", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "idiv", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ieq", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ieq16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ieq32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ieq8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ifind_msb", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ifind_msb_rev", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ige", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ige16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ige32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ige8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ihadd", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ilt", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ilt16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ilt32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ilt8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "imad24_ir3", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "imadsh_mix16", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "imax", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "imin", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "imod", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "imul", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "imul24", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "imul24_relaxed", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "imul_2x32_64", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int64, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "imul_32x16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "imul_high", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ine", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ine16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ine32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ine8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ineg", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "inot", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "insert_u16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "insert_u8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ior", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "irem", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "irhadd", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ishl", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ishr", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "isign", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "isub", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "isub_sat", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ixor", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "ldexp", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "mov", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_32_2x16", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_uint16 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_32_2x16_split", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint16, nir_type_uint16 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_32_4x8", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 4 - }, - .input_types = { - nir_type_uint8 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_32_4x8_split", - .num_inputs = 4, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0, 0 - }, - .input_types = { - nir_type_uint8, nir_type_uint8, nir_type_uint8, nir_type_uint8 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_64_2x32", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint64, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_64_2x32_split", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint64, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_64_4x16", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint64, - .input_sizes = { - 4 - }, - .input_types = { - nir_type_uint16 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_double_2x32_dxil", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint64, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_half_2x16", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_half_2x16_rtz_split", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 1, 1 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_half_2x16_split", - .num_inputs = 2, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 1, 1 - }, - .input_types = { - nir_type_float32, nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_sint_2x16", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_int32, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_snorm_2x16", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_snorm_4x8", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 4 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_uint_2x16", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_unorm_2x16", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_unorm_4x8", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 4 - }, - .input_types = { - nir_type_float32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_uvec2_to_uint", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 2 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "pack_uvec4_to_uint", - .num_inputs = 1, - .output_size = 1, - .output_type = nir_type_uint32, - .input_sizes = { - 4 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "sad_u8x4", - .num_inputs = 3, - .output_size = 1, - .output_type = nir_type_uint, - .input_sizes = { - 1, 1, 1 - }, - .input_types = { - nir_type_uint, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "sdot_2x16_iadd", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "sdot_2x16_iadd_sat", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "sdot_4x8_iadd", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "sdot_4x8_iadd_sat", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "seq", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "sge", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "slt", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "sne", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_float, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_float, nir_type_float - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "sudot_4x8_iadd", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "sudot_4x8_iadd_sat", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "u2f16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2f32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2f64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2fmp", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2u1", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint1, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2u16", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2u32", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2u64", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint64, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "u2u8", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint8, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = true, - .algebraic_properties = - 0 -}, -{ - .name = "uabs_isub", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int, nir_type_int - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uabs_usub", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uadd_carry", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "uadd_sat", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ubfe", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ubitfield_extract", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uclz", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "udiv", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "udot_2x16_uadd", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "udot_2x16_uadd_sat", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "udot_4x8_uadd", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "udot_4x8_uadd_sat", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ufind_msb", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ufind_msb_rev", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uge", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uge16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uge32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uge8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uhadd", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "ult", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool1, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ult16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool16, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ult32", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ult8", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_bool8, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "umad24", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "umad24_relaxed", - .num_inputs = 3, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "umax", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "umax_4x8_vc4", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "umin", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "umin_4x8_vc4", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "umod", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "umul24", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "umul24_relaxed", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "umul_2x32_64", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint64, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "umul_32x16", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "umul_high", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "umul_low", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint32, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "umul_unorm_4x8_vc4", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "unpack_32_2x16", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_uint16, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_32_2x16_split_x", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_32_2x16_split_y", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint16, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_32_4x8", - .num_inputs = 1, - .output_size = 4, - .output_type = nir_type_uint8, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_64_2x32", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_uint32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint64 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_64_2x32_split_x", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint64 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_64_2x32_split_y", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_uint32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint64 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_64_4x16", - .num_inputs = 1, - .output_size = 4, - .output_type = nir_type_uint16, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint64 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_double_2x32_dxil", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_uint32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint64 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_half_2x16", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_float32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_half_2x16_flush_to_zero", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_float32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_half_2x16_split_x", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_half_2x16_split_x_flush_to_zero", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_half_2x16_split_y", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_half_2x16_split_y_flush_to_zero", - .num_inputs = 1, - .output_size = 0, - .output_type = nir_type_float32, - .input_sizes = { - 0 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_snorm_2x16", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_float32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_snorm_4x8", - .num_inputs = 1, - .output_size = 4, - .output_type = nir_type_float32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_unorm_2x16", - .num_inputs = 1, - .output_size = 2, - .output_type = nir_type_float32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "unpack_unorm_4x8", - .num_inputs = 1, - .output_size = 4, - .output_type = nir_type_float32, - .input_sizes = { - 1 - }, - .input_types = { - nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "urhadd", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE -}, -{ - .name = "urol", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "uror", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "usadd_4x8_vc4", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - NIR_OP_IS_2SRC_COMMUTATIVE | NIR_OP_IS_ASSOCIATIVE -}, -{ - .name = "ushr", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "ussub_4x8_vc4", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_int32, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_int32, nir_type_int32 - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "usub_borrow", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "usub_sat", - .num_inputs = 2, - .output_size = 0, - .output_type = nir_type_uint, - .input_sizes = { - 0, 0 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "vec16", - .num_inputs = 16, - .output_size = 16, - .output_type = nir_type_uint, - .input_sizes = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - }, - .input_types = { - nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "vec2", - .num_inputs = 2, - .output_size = 2, - .output_type = nir_type_uint, - .input_sizes = { - 1, 1 - }, - .input_types = { - nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "vec3", - .num_inputs = 3, - .output_size = 3, - .output_type = nir_type_uint, - .input_sizes = { - 1, 1, 1 - }, - .input_types = { - nir_type_uint, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "vec4", - .num_inputs = 4, - .output_size = 4, - .output_type = nir_type_uint, - .input_sizes = { - 1, 1, 1, 1 - }, - .input_types = { - nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "vec5", - .num_inputs = 5, - .output_size = 5, - .output_type = nir_type_uint, - .input_sizes = { - 1, 1, 1, 1, 1 - }, - .input_types = { - nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -{ - .name = "vec8", - .num_inputs = 8, - .output_size = 8, - .output_type = nir_type_uint, - .input_sizes = { - 1, 1, 1, 1, 1, 1, 1, 1 - }, - .input_types = { - nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint, nir_type_uint - }, - .is_conversion = false, - .algebraic_properties = - 0 -}, -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.h deleted file mode 100644 index 5d1ba74..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.h +++ /dev/null @@ -1,454 +0,0 @@ -/* Copyright (C) 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - */ - -#ifndef _NIR_OPCODES_ -#define _NIR_OPCODES_ - - - -typedef enum { - nir_op_amul, - nir_op_b16all_fequal16, - nir_op_b16all_fequal2, - nir_op_b16all_fequal3, - nir_op_b16all_fequal4, - nir_op_b16all_fequal5, - nir_op_b16all_fequal8, - nir_op_b16all_iequal16, - nir_op_b16all_iequal2, - nir_op_b16all_iequal3, - nir_op_b16all_iequal4, - nir_op_b16all_iequal5, - nir_op_b16all_iequal8, - nir_op_b16any_fnequal16, - nir_op_b16any_fnequal2, - nir_op_b16any_fnequal3, - nir_op_b16any_fnequal4, - nir_op_b16any_fnequal5, - nir_op_b16any_fnequal8, - nir_op_b16any_inequal16, - nir_op_b16any_inequal2, - nir_op_b16any_inequal3, - nir_op_b16any_inequal4, - nir_op_b16any_inequal5, - nir_op_b16any_inequal8, - nir_op_b16csel, - nir_op_b2b1, - nir_op_b2b16, - nir_op_b2b32, - nir_op_b2b8, - nir_op_b2f16, - nir_op_b2f32, - nir_op_b2f64, - nir_op_b2i1, - nir_op_b2i16, - nir_op_b2i32, - nir_op_b2i64, - nir_op_b2i8, - nir_op_b32all_fequal16, - nir_op_b32all_fequal2, - nir_op_b32all_fequal3, - nir_op_b32all_fequal4, - nir_op_b32all_fequal5, - nir_op_b32all_fequal8, - nir_op_b32all_iequal16, - nir_op_b32all_iequal2, - nir_op_b32all_iequal3, - nir_op_b32all_iequal4, - nir_op_b32all_iequal5, - nir_op_b32all_iequal8, - nir_op_b32any_fnequal16, - nir_op_b32any_fnequal2, - nir_op_b32any_fnequal3, - nir_op_b32any_fnequal4, - nir_op_b32any_fnequal5, - nir_op_b32any_fnequal8, - nir_op_b32any_inequal16, - nir_op_b32any_inequal2, - nir_op_b32any_inequal3, - nir_op_b32any_inequal4, - nir_op_b32any_inequal5, - nir_op_b32any_inequal8, - nir_op_b32csel, - nir_op_b8all_fequal16, - nir_op_b8all_fequal2, - nir_op_b8all_fequal3, - nir_op_b8all_fequal4, - nir_op_b8all_fequal5, - nir_op_b8all_fequal8, - nir_op_b8all_iequal16, - nir_op_b8all_iequal2, - nir_op_b8all_iequal3, - nir_op_b8all_iequal4, - nir_op_b8all_iequal5, - nir_op_b8all_iequal8, - nir_op_b8any_fnequal16, - nir_op_b8any_fnequal2, - nir_op_b8any_fnequal3, - nir_op_b8any_fnequal4, - nir_op_b8any_fnequal5, - nir_op_b8any_fnequal8, - nir_op_b8any_inequal16, - nir_op_b8any_inequal2, - nir_op_b8any_inequal3, - nir_op_b8any_inequal4, - nir_op_b8any_inequal5, - nir_op_b8any_inequal8, - nir_op_b8csel, - nir_op_ball_fequal16, - nir_op_ball_fequal2, - nir_op_ball_fequal3, - nir_op_ball_fequal4, - nir_op_ball_fequal5, - nir_op_ball_fequal8, - nir_op_ball_iequal16, - nir_op_ball_iequal2, - nir_op_ball_iequal3, - nir_op_ball_iequal4, - nir_op_ball_iequal5, - nir_op_ball_iequal8, - nir_op_bany_fnequal16, - nir_op_bany_fnequal2, - nir_op_bany_fnequal3, - nir_op_bany_fnequal4, - nir_op_bany_fnequal5, - nir_op_bany_fnequal8, - nir_op_bany_inequal16, - nir_op_bany_inequal2, - nir_op_bany_inequal3, - nir_op_bany_inequal4, - nir_op_bany_inequal5, - nir_op_bany_inequal8, - nir_op_bcsel, - nir_op_bfi, - nir_op_bfm, - nir_op_bit_count, - nir_op_bitfield_insert, - nir_op_bitfield_reverse, - nir_op_bitfield_select, - nir_op_cube_face_coord_amd, - nir_op_cube_face_index_amd, - nir_op_cube_r600, - nir_op_extr_agx, - nir_op_extract_i16, - nir_op_extract_i8, - nir_op_extract_u16, - nir_op_extract_u8, - nir_op_f2f16, - nir_op_f2f16_rtne, - nir_op_f2f16_rtz, - nir_op_f2f32, - nir_op_f2f64, - nir_op_f2fmp, - nir_op_f2i1, - nir_op_f2i16, - nir_op_f2i32, - nir_op_f2i64, - nir_op_f2i8, - nir_op_f2imp, - nir_op_f2u1, - nir_op_f2u16, - nir_op_f2u32, - nir_op_f2u64, - nir_op_f2u8, - nir_op_f2ump, - nir_op_fabs, - nir_op_fadd, - nir_op_fall_equal16, - nir_op_fall_equal2, - nir_op_fall_equal3, - nir_op_fall_equal4, - nir_op_fall_equal5, - nir_op_fall_equal8, - nir_op_fany_nequal16, - nir_op_fany_nequal2, - nir_op_fany_nequal3, - nir_op_fany_nequal4, - nir_op_fany_nequal5, - nir_op_fany_nequal8, - nir_op_fceil, - nir_op_fclamp_pos_mali, - nir_op_fcos, - nir_op_fcos_amd, - nir_op_fcos_mdg, - nir_op_fcsel, - nir_op_fcsel_ge, - nir_op_fcsel_gt, - nir_op_fddx, - nir_op_fddx_coarse, - nir_op_fddx_fine, - nir_op_fddx_must_abs_mali, - nir_op_fddy, - nir_op_fddy_coarse, - nir_op_fddy_fine, - nir_op_fddy_must_abs_mali, - nir_op_fdiv, - nir_op_fdot16, - nir_op_fdot16_replicated, - nir_op_fdot2, - nir_op_fdot2_replicated, - nir_op_fdot3, - nir_op_fdot3_replicated, - nir_op_fdot4, - nir_op_fdot4_replicated, - nir_op_fdot5, - nir_op_fdot5_replicated, - nir_op_fdot8, - nir_op_fdot8_replicated, - nir_op_fdph, - nir_op_fdph_replicated, - nir_op_feq, - nir_op_feq16, - nir_op_feq32, - nir_op_feq8, - nir_op_fexp2, - nir_op_ffloor, - nir_op_ffma, - nir_op_ffmaz, - nir_op_ffract, - nir_op_fge, - nir_op_fge16, - nir_op_fge32, - nir_op_fge8, - nir_op_find_lsb, - nir_op_fisfinite, - nir_op_fisfinite32, - nir_op_fisnormal, - nir_op_flog2, - nir_op_flrp, - nir_op_flt, - nir_op_flt16, - nir_op_flt32, - nir_op_flt8, - nir_op_fmax, - nir_op_fmin, - nir_op_fmod, - nir_op_fmul, - nir_op_fmulz, - nir_op_fneg, - nir_op_fneu, - nir_op_fneu16, - nir_op_fneu32, - nir_op_fneu8, - nir_op_fpow, - nir_op_fquantize2f16, - nir_op_frcp, - nir_op_frem, - nir_op_frexp_exp, - nir_op_frexp_sig, - nir_op_fround_even, - nir_op_frsq, - nir_op_fsat, - nir_op_fsat_signed_mali, - nir_op_fsign, - nir_op_fsin, - nir_op_fsin_agx, - nir_op_fsin_amd, - nir_op_fsin_mdg, - nir_op_fsqrt, - nir_op_fsub, - nir_op_fsum2, - nir_op_fsum3, - nir_op_fsum4, - nir_op_ftrunc, - nir_op_i2f16, - nir_op_i2f32, - nir_op_i2f64, - nir_op_i2fmp, - nir_op_i2i1, - nir_op_i2i16, - nir_op_i2i32, - nir_op_i2i64, - nir_op_i2i8, - nir_op_i2imp, - nir_op_i32csel_ge, - nir_op_i32csel_gt, - nir_op_iabs, - nir_op_iadd, - nir_op_iadd3, - nir_op_iadd_sat, - nir_op_iand, - nir_op_ibfe, - nir_op_ibitfield_extract, - nir_op_idiv, - nir_op_ieq, - nir_op_ieq16, - nir_op_ieq32, - nir_op_ieq8, - nir_op_ifind_msb, - nir_op_ifind_msb_rev, - nir_op_ige, - nir_op_ige16, - nir_op_ige32, - nir_op_ige8, - nir_op_ihadd, - nir_op_ilt, - nir_op_ilt16, - nir_op_ilt32, - nir_op_ilt8, - nir_op_imad24_ir3, - nir_op_imadsh_mix16, - nir_op_imax, - nir_op_imin, - nir_op_imod, - nir_op_imul, - nir_op_imul24, - nir_op_imul24_relaxed, - nir_op_imul_2x32_64, - nir_op_imul_32x16, - nir_op_imul_high, - nir_op_ine, - nir_op_ine16, - nir_op_ine32, - nir_op_ine8, - nir_op_ineg, - nir_op_inot, - nir_op_insert_u16, - nir_op_insert_u8, - nir_op_ior, - nir_op_irem, - nir_op_irhadd, - nir_op_ishl, - nir_op_ishr, - nir_op_isign, - nir_op_isub, - nir_op_isub_sat, - nir_op_ixor, - nir_op_ldexp, - nir_op_mov, - nir_op_pack_32_2x16, - nir_op_pack_32_2x16_split, - nir_op_pack_32_4x8, - nir_op_pack_32_4x8_split, - nir_op_pack_64_2x32, - nir_op_pack_64_2x32_split, - nir_op_pack_64_4x16, - nir_op_pack_double_2x32_dxil, - nir_op_pack_half_2x16, - nir_op_pack_half_2x16_rtz_split, - nir_op_pack_half_2x16_split, - nir_op_pack_sint_2x16, - nir_op_pack_snorm_2x16, - nir_op_pack_snorm_4x8, - nir_op_pack_uint_2x16, - nir_op_pack_unorm_2x16, - nir_op_pack_unorm_4x8, - nir_op_pack_uvec2_to_uint, - nir_op_pack_uvec4_to_uint, - nir_op_sad_u8x4, - nir_op_sdot_2x16_iadd, - nir_op_sdot_2x16_iadd_sat, - nir_op_sdot_4x8_iadd, - nir_op_sdot_4x8_iadd_sat, - nir_op_seq, - nir_op_sge, - nir_op_slt, - nir_op_sne, - nir_op_sudot_4x8_iadd, - nir_op_sudot_4x8_iadd_sat, - nir_op_u2f16, - nir_op_u2f32, - nir_op_u2f64, - nir_op_u2fmp, - nir_op_u2u1, - nir_op_u2u16, - nir_op_u2u32, - nir_op_u2u64, - nir_op_u2u8, - nir_op_uabs_isub, - nir_op_uabs_usub, - nir_op_uadd_carry, - nir_op_uadd_sat, - nir_op_ubfe, - nir_op_ubitfield_extract, - nir_op_uclz, - nir_op_udiv, - nir_op_udot_2x16_uadd, - nir_op_udot_2x16_uadd_sat, - nir_op_udot_4x8_uadd, - nir_op_udot_4x8_uadd_sat, - nir_op_ufind_msb, - nir_op_ufind_msb_rev, - nir_op_uge, - nir_op_uge16, - nir_op_uge32, - nir_op_uge8, - nir_op_uhadd, - nir_op_ult, - nir_op_ult16, - nir_op_ult32, - nir_op_ult8, - nir_op_umad24, - nir_op_umad24_relaxed, - nir_op_umax, - nir_op_umax_4x8_vc4, - nir_op_umin, - nir_op_umin_4x8_vc4, - nir_op_umod, - nir_op_umul24, - nir_op_umul24_relaxed, - nir_op_umul_2x32_64, - nir_op_umul_32x16, - nir_op_umul_high, - nir_op_umul_low, - nir_op_umul_unorm_4x8_vc4, - nir_op_unpack_32_2x16, - nir_op_unpack_32_2x16_split_x, - nir_op_unpack_32_2x16_split_y, - nir_op_unpack_32_4x8, - nir_op_unpack_64_2x32, - nir_op_unpack_64_2x32_split_x, - nir_op_unpack_64_2x32_split_y, - nir_op_unpack_64_4x16, - nir_op_unpack_double_2x32_dxil, - nir_op_unpack_half_2x16, - nir_op_unpack_half_2x16_flush_to_zero, - nir_op_unpack_half_2x16_split_x, - nir_op_unpack_half_2x16_split_x_flush_to_zero, - nir_op_unpack_half_2x16_split_y, - nir_op_unpack_half_2x16_split_y_flush_to_zero, - nir_op_unpack_snorm_2x16, - nir_op_unpack_snorm_4x8, - nir_op_unpack_unorm_2x16, - nir_op_unpack_unorm_4x8, - nir_op_urhadd, - nir_op_urol, - nir_op_uror, - nir_op_usadd_4x8_vc4, - nir_op_ushr, - nir_op_ussub_4x8_vc4, - nir_op_usub_borrow, - nir_op_usub_sat, - nir_op_vec16, - nir_op_vec2, - nir_op_vec3, - nir_op_vec4, - nir_op_vec5, - nir_op_vec8, - nir_last_opcode = nir_op_vec8, - nir_num_opcodes = nir_last_opcode + 1 -} nir_op; - -#endif /* _NIR_OPCODES_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.py deleted file mode 100644 index 442d018..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes.py +++ /dev/null @@ -1,1544 +0,0 @@ -# -# Copyright (C) 2014 Connor Abbott -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. -# -# Authors: -# Connor Abbott (cwabbott0@gmail.com) - -import re - -# Class that represents all the information we have about the opcode -# NOTE: this must be kept in sync with nir_op_info - -class Opcode(object): - """Class that represents all the information we have about the opcode - NOTE: this must be kept in sync with nir_op_info - """ - def __init__(self, name, output_size, output_type, input_sizes, - input_types, is_conversion, algebraic_properties, const_expr): - """Parameters: - - - name is the name of the opcode (prepend nir_op_ for the enum name) - - all types are strings that get nir_type_ prepended to them - - input_types is a list of types - - is_conversion is true if this opcode represents a type conversion - - algebraic_properties is a space-seperated string, where nir_op_is_ is - prepended before each entry - - const_expr is an expression or series of statements that computes the - constant value of the opcode given the constant values of its inputs. - - Constant expressions are formed from the variables src0, src1, ..., - src(N-1), where N is the number of arguments. The output of the - expression should be stored in the dst variable. Per-component input - and output variables will be scalars and non-per-component input and - output variables will be a struct with fields named x, y, z, and w - all of the correct type. Input and output variables can be assumed - to already be of the correct type and need no conversion. In - particular, the conversion from the C bool type to/from NIR_TRUE and - NIR_FALSE happens automatically. - - For per-component instructions, the entire expression will be - executed once for each component. For non-per-component - instructions, the expression is expected to store the correct values - in dst.x, dst.y, etc. If "dst" does not exist anywhere in the - constant expression, an assignment to dst will happen automatically - and the result will be equivalent to "dst = " for - per-component instructions and "dst.x = dst.y = ... = " - for non-per-component instructions. - """ - assert isinstance(name, str) - assert isinstance(output_size, int) - assert isinstance(output_type, str) - assert isinstance(input_sizes, list) - assert isinstance(input_sizes[0], int) - assert isinstance(input_types, list) - assert isinstance(input_types[0], str) - assert isinstance(is_conversion, bool) - assert isinstance(algebraic_properties, str) - assert isinstance(const_expr, str) - assert len(input_sizes) == len(input_types) - assert 0 <= output_size <= 5 or (output_size == 8) or (output_size == 16) - for size in input_sizes: - assert 0 <= size <= 5 or (size == 8) or (size == 16) - if output_size != 0: - assert size != 0 - self.name = name - self.num_inputs = len(input_sizes) - self.output_size = output_size - self.output_type = output_type - self.input_sizes = input_sizes - self.input_types = input_types - self.is_conversion = is_conversion - self.algebraic_properties = algebraic_properties - self.const_expr = const_expr - -# helper variables for strings -tfloat = "float" -tint = "int" -tbool = "bool" -tbool1 = "bool1" -tbool8 = "bool8" -tbool16 = "bool16" -tbool32 = "bool32" -tuint = "uint" -tuint8 = "uint8" -tint16 = "int16" -tuint16 = "uint16" -tfloat16 = "float16" -tfloat32 = "float32" -tint32 = "int32" -tuint32 = "uint32" -tint64 = "int64" -tuint64 = "uint64" -tfloat64 = "float64" - -_TYPE_SPLIT_RE = re.compile(r'(?Pint|uint|float|bool)(?P\d+)?') - -def type_has_size(type_): - m = _TYPE_SPLIT_RE.match(type_) - assert m is not None, 'Invalid NIR type string: "{}"'.format(type_) - return m.group('bits') is not None - -def type_size(type_): - m = _TYPE_SPLIT_RE.match(type_) - assert m is not None, 'Invalid NIR type string: "{}"'.format(type_) - assert m.group('bits') is not None, \ - 'NIR type string has no bit size: "{}"'.format(type_) - return int(m.group('bits')) - -def type_sizes(type_): - if type_has_size(type_): - return [type_size(type_)] - elif type_ == 'bool': - return [1, 8, 16, 32] - elif type_ == 'float': - return [16, 32, 64] - else: - return [1, 8, 16, 32, 64] - -def type_base_type(type_): - m = _TYPE_SPLIT_RE.match(type_) - assert m is not None, 'Invalid NIR type string: "{}"'.format(type_) - return m.group('type') - -# Operation where the first two sources are commutative. -# -# For 2-source operations, this just mathematical commutativity. Some -# 3-source operations, like ffma, are only commutative in the first two -# sources. -_2src_commutative = "2src_commutative " -associative = "associative " -selection = "selection " - -# global dictionary of opcodes -opcodes = {} - -def opcode(name, output_size, output_type, input_sizes, input_types, - is_conversion, algebraic_properties, const_expr): - assert name not in opcodes - opcodes[name] = Opcode(name, output_size, output_type, input_sizes, - input_types, is_conversion, algebraic_properties, - const_expr) - -def unop_convert(name, out_type, in_type, const_expr): - opcode(name, 0, out_type, [0], [in_type], False, "", const_expr) - -def unop(name, ty, const_expr): - opcode(name, 0, ty, [0], [ty], False, "", const_expr) - -def unop_horiz(name, output_size, output_type, input_size, input_type, - const_expr): - opcode(name, output_size, output_type, [input_size], [input_type], - False, "", const_expr) - -def unop_reduce(name, output_size, output_type, input_type, prereduce_expr, - reduce_expr, final_expr): - def prereduce(src): - return "(" + prereduce_expr.format(src=src) + ")" - def final(src): - return final_expr.format(src="(" + src + ")") - def reduce_(src0, src1): - return reduce_expr.format(src0=src0, src1=src1) - src0 = prereduce("src0.x") - src1 = prereduce("src0.y") - src2 = prereduce("src0.z") - src3 = prereduce("src0.w") - unop_horiz(name + "2", output_size, output_type, 2, input_type, - final(reduce_(src0, src1))) - unop_horiz(name + "3", output_size, output_type, 3, input_type, - final(reduce_(reduce_(src0, src1), src2))) - unop_horiz(name + "4", output_size, output_type, 4, input_type, - final(reduce_(reduce_(src0, src1), reduce_(src2, src3)))) - -def unop_numeric_convert(name, out_type, in_type, const_expr): - opcode(name, 0, out_type, [0], [in_type], True, "", const_expr) - -unop("mov", tuint, "src0") - -unop("ineg", tint, "-src0") -unop("fneg", tfloat, "-src0") -unop("inot", tint, "~src0") # invert every bit of the integer - -# nir_op_fsign roughly implements the OpenGL / Vulkan rules for sign(float). -# The GLSL.std.450 FSign instruction is defined as: -# -# Result is 1.0 if x > 0, 0.0 if x = 0, or -1.0 if x < 0. -# -# If the source is equal to zero, there is a preference for the result to have -# the same sign, but this is not required (it is required by OpenCL). If the -# source is not a number, there is a preference for the result to be +0.0, but -# this is not required (it is required by OpenCL). If the source is not a -# number, and the result is not +0.0, the result should definitely **not** be -# NaN. -# -# The values returned for constant folding match the behavior required by -# OpenCL. -unop("fsign", tfloat, ("bit_size == 64 ? " + - "(isnan(src0) ? 0.0 : ((src0 == 0.0 ) ? src0 : (src0 > 0.0 ) ? 1.0 : -1.0 )) : " + - "(isnan(src0) ? 0.0f : ((src0 == 0.0f) ? src0 : (src0 > 0.0f) ? 1.0f : -1.0f))")) -unop("isign", tint, "(src0 == 0) ? 0 : ((src0 > 0) ? 1 : -1)") -unop("iabs", tint, "(src0 < 0) ? -src0 : src0") -unop("fabs", tfloat, "fabs(src0)") -unop("fsat", tfloat, ("fmin(fmax(src0, 0.0), 1.0)")) -unop("frcp", tfloat, "bit_size == 64 ? 1.0 / src0 : 1.0f / src0") -unop("frsq", tfloat, "bit_size == 64 ? 1.0 / sqrt(src0) : 1.0f / sqrtf(src0)") -unop("fsqrt", tfloat, "bit_size == 64 ? sqrt(src0) : sqrtf(src0)") -unop("fexp2", tfloat, "exp2f(src0)") -unop("flog2", tfloat, "log2f(src0)") - -# Generate all of the numeric conversion opcodes -for src_t in [tint, tuint, tfloat, tbool]: - if src_t == tbool: - dst_types = [tfloat, tint, tbool] - elif src_t == tint: - dst_types = [tfloat, tint] - elif src_t == tuint: - dst_types = [tfloat, tuint] - elif src_t == tfloat: - dst_types = [tint, tuint, tfloat] - - for dst_t in dst_types: - for dst_bit_size in type_sizes(dst_t): - if dst_bit_size == 16 and dst_t == tfloat and src_t == tfloat: - rnd_modes = ['_rtne', '_rtz', ''] - for rnd_mode in rnd_modes: - if rnd_mode == '_rtne': - conv_expr = """ - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtne(src0)); - } else { - dst = src0; - } - """ - elif rnd_mode == '_rtz': - conv_expr = """ - if (bit_size > 16) { - dst = _mesa_half_to_float(_mesa_float_to_float16_rtz(src0)); - } else { - dst = src0; - } - """ - else: - conv_expr = "src0" - - unop_numeric_convert("{0}2{1}{2}{3}".format(src_t[0], - dst_t[0], - dst_bit_size, - rnd_mode), - dst_t + str(dst_bit_size), - src_t, conv_expr) - elif dst_bit_size == 32 and dst_t == tfloat and src_t == tfloat: - conv_expr = """ - if (bit_size > 32 && nir_is_rounding_mode_rtz(execution_mode, 32)) { - dst = _mesa_double_to_float_rtz(src0); - } else { - dst = src0; - } - """ - unop_numeric_convert("{0}2{1}{2}".format(src_t[0], dst_t[0], - dst_bit_size), - dst_t + str(dst_bit_size), src_t, conv_expr) - else: - conv_expr = "src0 != 0" if dst_t == tbool else "src0" - unop_numeric_convert("{0}2{1}{2}".format(src_t[0], dst_t[0], - dst_bit_size), - dst_t + str(dst_bit_size), src_t, conv_expr) - -# Special opcode that is the same as f2f16, i2i16, u2u16 except that it is safe -# to remove it if the result is immediately converted back to 32 bits again. -# This is generated as part of the precision lowering pass. mp stands for medium -# precision. -unop_numeric_convert("f2fmp", tfloat16, tfloat32, opcodes["f2f16"].const_expr) -unop_numeric_convert("i2imp", tint16, tint32, opcodes["i2i16"].const_expr) -# u2ump isn't defined, because the behavior is equal to i2imp -unop_numeric_convert("f2imp", tint16, tfloat32, opcodes["f2i16"].const_expr) -unop_numeric_convert("f2ump", tuint16, tfloat32, opcodes["f2u16"].const_expr) -unop_numeric_convert("i2fmp", tfloat16, tint32, opcodes["i2f16"].const_expr) -unop_numeric_convert("u2fmp", tfloat16, tuint32, opcodes["u2f16"].const_expr) - -# Unary floating-point rounding operations. - - -unop("ftrunc", tfloat, "bit_size == 64 ? trunc(src0) : truncf(src0)") -unop("fceil", tfloat, "bit_size == 64 ? ceil(src0) : ceilf(src0)") -unop("ffloor", tfloat, "bit_size == 64 ? floor(src0) : floorf(src0)") -unop("ffract", tfloat, "src0 - (bit_size == 64 ? floor(src0) : floorf(src0))") -unop("fround_even", tfloat, "bit_size == 64 ? _mesa_roundeven(src0) : _mesa_roundevenf(src0)") - -unop("fquantize2f16", tfloat, "(fabs(src0) < ldexpf(1.0, -14)) ? copysignf(0.0f, src0) : _mesa_half_to_float(_mesa_float_to_half(src0))") - -# Trigonometric operations. - - -unop("fsin", tfloat, "bit_size == 64 ? sin(src0) : sinf(src0)") -unop("fcos", tfloat, "bit_size == 64 ? cos(src0) : cosf(src0)") - -# dfrexp -unop_convert("frexp_exp", tint32, tfloat, "frexp(src0, &dst);") -unop_convert("frexp_sig", tfloat, tfloat, "int n; dst = frexp(src0, &n);") - -# Partial derivatives. - - -unop("fddx", tfloat, "0.0") # the derivative of a constant is 0. -unop("fddy", tfloat, "0.0") -unop("fddx_fine", tfloat, "0.0") -unop("fddy_fine", tfloat, "0.0") -unop("fddx_coarse", tfloat, "0.0") -unop("fddy_coarse", tfloat, "0.0") - - -# Floating point pack and unpack operations. - -def pack_2x16(fmt, in_type): - unop_horiz("pack_" + fmt + "_2x16", 1, tuint32, 2, in_type, """ -dst.x = (uint32_t) pack_fmt_1x16(src0.x); -dst.x |= ((uint32_t) pack_fmt_1x16(src0.y)) << 16; -""".replace("fmt", fmt)) - -def pack_4x8(fmt): - unop_horiz("pack_" + fmt + "_4x8", 1, tuint32, 4, tfloat32, """ -dst.x = (uint32_t) pack_fmt_1x8(src0.x); -dst.x |= ((uint32_t) pack_fmt_1x8(src0.y)) << 8; -dst.x |= ((uint32_t) pack_fmt_1x8(src0.z)) << 16; -dst.x |= ((uint32_t) pack_fmt_1x8(src0.w)) << 24; -""".replace("fmt", fmt)) - -def unpack_2x16(fmt): - unop_horiz("unpack_" + fmt + "_2x16", 2, tfloat32, 1, tuint32, """ -dst.x = unpack_fmt_1x16((uint16_t)(src0.x & 0xffff)); -dst.y = unpack_fmt_1x16((uint16_t)(src0.x << 16)); -""".replace("fmt", fmt)) - -def unpack_4x8(fmt): - unop_horiz("unpack_" + fmt + "_4x8", 4, tfloat32, 1, tuint32, """ -dst.x = unpack_fmt_1x8((uint8_t)(src0.x & 0xff)); -dst.y = unpack_fmt_1x8((uint8_t)((src0.x >> 8) & 0xff)); -dst.z = unpack_fmt_1x8((uint8_t)((src0.x >> 16) & 0xff)); -dst.w = unpack_fmt_1x8((uint8_t)(src0.x >> 24)); -""".replace("fmt", fmt)) - - -pack_2x16("snorm", tfloat) -pack_4x8("snorm") -pack_2x16("unorm", tfloat) -pack_4x8("unorm") -pack_2x16("half", tfloat32) -unpack_2x16("snorm") -unpack_4x8("snorm") -unpack_2x16("unorm") -unpack_4x8("unorm") -unpack_2x16("half") - -# Convert two unsigned integers into a packed unsigned short (clamp is applied). -unop_horiz("pack_uint_2x16", 1, tuint32, 2, tuint32, """ -dst.x = _mesa_unsigned_to_unsigned(src0.x, 16); -dst.x |= _mesa_unsigned_to_unsigned(src0.y, 16) << 16; -""") - -# Convert two signed integers into a packed signed short (clamp is applied). -unop_horiz("pack_sint_2x16", 1, tint32, 2, tint32, """ -dst.x = _mesa_signed_to_signed(src0.x, 16) & 0xffff; -dst.x |= _mesa_signed_to_signed(src0.y, 16) << 16; -""") - -unop_horiz("pack_uvec2_to_uint", 1, tuint32, 2, tuint32, """ -dst.x = (src0.x & 0xffff) | (src0.y << 16); -""") - -unop_horiz("pack_uvec4_to_uint", 1, tuint32, 4, tuint32, """ -dst.x = (src0.x << 0) | - (src0.y << 8) | - (src0.z << 16) | - (src0.w << 24); -""") - -unop_horiz("pack_32_4x8", 1, tuint32, 4, tuint8, - "dst.x = src0.x | ((uint32_t)src0.y << 8) | ((uint32_t)src0.z << 16) | ((uint32_t)src0.w << 24);") - -unop_horiz("pack_32_2x16", 1, tuint32, 2, tuint16, - "dst.x = src0.x | ((uint32_t)src0.y << 16);") - -unop_horiz("pack_64_2x32", 1, tuint64, 2, tuint32, - "dst.x = src0.x | ((uint64_t)src0.y << 32);") - -unop_horiz("pack_64_4x16", 1, tuint64, 4, tuint16, - "dst.x = src0.x | ((uint64_t)src0.y << 16) | ((uint64_t)src0.z << 32) | ((uint64_t)src0.w << 48);") - -unop_horiz("unpack_64_2x32", 2, tuint32, 1, tuint64, - "dst.x = src0.x; dst.y = src0.x >> 32;") - -unop_horiz("unpack_64_4x16", 4, tuint16, 1, tuint64, - "dst.x = src0.x; dst.y = src0.x >> 16; dst.z = src0.x >> 32; dst.w = src0.x >> 48;") - -unop_horiz("unpack_32_2x16", 2, tuint16, 1, tuint32, - "dst.x = src0.x; dst.y = src0.x >> 16;") - -unop_horiz("unpack_32_4x8", 4, tuint8, 1, tuint32, - "dst.x = src0.x; dst.y = src0.x >> 8; dst.z = src0.x >> 16; dst.w = src0.x >> 24;") - -unop_horiz("unpack_half_2x16_flush_to_zero", 2, tfloat32, 1, tuint32, """ -dst.x = unpack_half_1x16_flush_to_zero((uint16_t)(src0.x & 0xffff)); -dst.y = unpack_half_1x16_flush_to_zero((uint16_t)(src0.x << 16)); -""") - -# Lowered floating point unpacking operations. - -unop_convert("unpack_half_2x16_split_x", tfloat32, tuint32, - "unpack_half_1x16((uint16_t)(src0 & 0xffff))") -unop_convert("unpack_half_2x16_split_y", tfloat32, tuint32, - "unpack_half_1x16((uint16_t)(src0 >> 16))") - -unop_convert("unpack_half_2x16_split_x_flush_to_zero", tfloat32, tuint32, - "unpack_half_1x16_flush_to_zero((uint16_t)(src0 & 0xffff))") -unop_convert("unpack_half_2x16_split_y_flush_to_zero", tfloat32, tuint32, - "unpack_half_1x16_flush_to_zero((uint16_t)(src0 >> 16))") - -unop_convert("unpack_32_2x16_split_x", tuint16, tuint32, "src0") -unop_convert("unpack_32_2x16_split_y", tuint16, tuint32, "src0 >> 16") - -unop_convert("unpack_64_2x32_split_x", tuint32, tuint64, "src0") -unop_convert("unpack_64_2x32_split_y", tuint32, tuint64, "src0 >> 32") - -# Bit operations, part of ARB_gpu_shader5. - - -unop("bitfield_reverse", tuint32, """ -/* we're not winning any awards for speed here, but that's ok */ -dst = 0; -for (unsigned bit = 0; bit < 32; bit++) - dst |= ((src0 >> bit) & 1) << (31 - bit); -""") -unop_convert("bit_count", tuint32, tuint, """ -dst = 0; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) - dst++; -} -""") - -unop_convert("ufind_msb", tint32, tuint, """ -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} -""") - -unop_convert("ufind_msb_rev", tint32, tuint, """ -dst = -1; -for (int bit = 0; bit < bit_size; bit++) { - if ((src0 << bit) & 0x80000000) { - dst = bit; - break; - } -} -""") - -unop("uclz", tuint32, """ -int bit; -for (bit = bit_size - 1; bit >= 0; bit--) { - if ((src0 & (1u << bit)) != 0) - break; -} -dst = (unsigned)(bit_size - bit - 1); -""") - -unop("ifind_msb", tint32, """ -dst = -1; -for (int bit = bit_size - 1; bit >= 0; bit--) { - /* If src0 < 0, we're looking for the first 0 bit. - * if src0 >= 0, we're looking for the first 1 bit. - */ - if ((((src0 >> bit) & 1) && (src0 >= 0)) || - (!((src0 >> bit) & 1) && (src0 < 0))) { - dst = bit; - break; - } -} -""") - -unop("ifind_msb_rev", tint32, """ -dst = -1; -/* We are looking for the highest bit that's not the same as the sign bit. */ -uint32_t sign = src0 & 0x80000000u; -for (int bit = 0; bit < 32; bit++) { - if (((src0 << bit) & 0x80000000u) != sign) { - dst = bit; - break; - } -} -""") - -unop_convert("find_lsb", tint32, tint, """ -dst = -1; -for (unsigned bit = 0; bit < bit_size; bit++) { - if ((src0 >> bit) & 1) { - dst = bit; - break; - } -} -""") - -# AMD_gcn_shader extended instructions -unop_horiz("cube_face_coord_amd", 2, tfloat32, 3, tfloat32, """ -dst.x = dst.y = 0.0; -float absX = fabsf(src0.x); -float absY = fabsf(src0.y); -float absZ = fabsf(src0.z); - -float ma = 0.0; -if (absX >= absY && absX >= absZ) { ma = 2 * src0.x; } -if (absY >= absX && absY >= absZ) { ma = 2 * src0.y; } -if (absZ >= absX && absZ >= absY) { ma = 2 * src0.z; } - -if (src0.x >= 0 && absX >= absY && absX >= absZ) { dst.x = -src0.z; dst.y = -src0.y; } -if (src0.x < 0 && absX >= absY && absX >= absZ) { dst.x = src0.z; dst.y = -src0.y; } -if (src0.y >= 0 && absY >= absX && absY >= absZ) { dst.x = src0.x; dst.y = src0.z; } -if (src0.y < 0 && absY >= absX && absY >= absZ) { dst.x = src0.x; dst.y = -src0.z; } -if (src0.z >= 0 && absZ >= absX && absZ >= absY) { dst.x = src0.x; dst.y = -src0.y; } -if (src0.z < 0 && absZ >= absX && absZ >= absY) { dst.x = -src0.x; dst.y = -src0.y; } - -dst.x = dst.x * (1.0f / ma) + 0.5f; -dst.y = dst.y * (1.0f / ma) + 0.5f; -""") - -unop_horiz("cube_face_index_amd", 1, tfloat32, 3, tfloat32, """ -dst.x = 0.0; -float absX = fabsf(src0.x); -float absY = fabsf(src0.y); -float absZ = fabsf(src0.z); -if (src0.x >= 0 && absX >= absY && absX >= absZ) dst.x = 0; -if (src0.x < 0 && absX >= absY && absX >= absZ) dst.x = 1; -if (src0.y >= 0 && absY >= absX && absY >= absZ) dst.x = 2; -if (src0.y < 0 && absY >= absX && absY >= absZ) dst.x = 3; -if (src0.z >= 0 && absZ >= absX && absZ >= absY) dst.x = 4; -if (src0.z < 0 && absZ >= absX && absZ >= absY) dst.x = 5; -""") - -# Sum of vector components -unop_reduce("fsum", 1, tfloat, tfloat, "{src}", "{src0} + {src1}", "{src}") - -def binop_convert(name, out_type, in_type, alg_props, const_expr): - opcode(name, 0, out_type, [0, 0], [in_type, in_type], - False, alg_props, const_expr) - -def binop(name, ty, alg_props, const_expr): - binop_convert(name, ty, ty, alg_props, const_expr) - -def binop_compare(name, ty, alg_props, const_expr): - binop_convert(name, tbool1, ty, alg_props, const_expr) - -def binop_compare8(name, ty, alg_props, const_expr): - binop_convert(name, tbool8, ty, alg_props, const_expr) - -def binop_compare16(name, ty, alg_props, const_expr): - binop_convert(name, tbool16, ty, alg_props, const_expr) - -def binop_compare32(name, ty, alg_props, const_expr): - binop_convert(name, tbool32, ty, alg_props, const_expr) - -def binop_compare_all_sizes(name, ty, alg_props, const_expr): - binop_compare(name, ty, alg_props, const_expr) - binop_compare8(name + "8", ty, alg_props, const_expr) - binop_compare16(name + "16", ty, alg_props, const_expr) - binop_compare32(name + "32", ty, alg_props, const_expr) - -def binop_horiz(name, out_size, out_type, src1_size, src1_type, src2_size, - src2_type, const_expr): - opcode(name, out_size, out_type, [src1_size, src2_size], [src1_type, src2_type], - False, "", const_expr) - -def binop_reduce(name, output_size, output_type, src_type, prereduce_expr, - reduce_expr, final_expr, suffix=""): - def final(src): - return final_expr.format(src= "(" + src + ")") - def reduce_(src0, src1): - return reduce_expr.format(src0=src0, src1=src1) - def prereduce(src0, src1): - return "(" + prereduce_expr.format(src0=src0, src1=src1) + ")" - srcs = [prereduce("src0." + letter, "src1." + letter) for letter in "xyzwefghijklmnop"] - def pairwise_reduce(start, size): - if (size == 1): - return srcs[start] - return reduce_(pairwise_reduce(start + size // 2, size // 2), pairwise_reduce(start, size // 2)) - for size in [2, 4, 8, 16]: - opcode(name + str(size) + suffix, output_size, output_type, - [size, size], [src_type, src_type], False, _2src_commutative, - final(pairwise_reduce(0, size))) - opcode(name + "3" + suffix, output_size, output_type, - [3, 3], [src_type, src_type], False, _2src_commutative, - final(reduce_(reduce_(srcs[2], srcs[1]), srcs[0]))) - opcode(name + "5" + suffix, output_size, output_type, - [5, 5], [src_type, src_type], False, _2src_commutative, - final(reduce_(srcs[4], reduce_(reduce_(srcs[3], srcs[2]), reduce_(srcs[1], srcs[0]))))) - -def binop_reduce_all_sizes(name, output_size, src_type, prereduce_expr, - reduce_expr, final_expr): - binop_reduce(name, output_size, tbool1, src_type, - prereduce_expr, reduce_expr, final_expr) - binop_reduce("b8" + name[1:], output_size, tbool8, src_type, - prereduce_expr, reduce_expr, final_expr) - binop_reduce("b16" + name[1:], output_size, tbool16, src_type, - prereduce_expr, reduce_expr, final_expr) - binop_reduce("b32" + name[1:], output_size, tbool32, src_type, - prereduce_expr, reduce_expr, final_expr) - -binop("fadd", tfloat, _2src_commutative + associative,""" -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_add_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 + (double)src1); -} else { - dst = src0 + src1; -} -""") -binop("iadd", tint, _2src_commutative + associative, "(uint64_t)src0 + (uint64_t)src1") -binop("iadd_sat", tint, _2src_commutative, """ - src1 > 0 ? - (src0 + src1 < src0 ? u_intN_max(bit_size) : src0 + src1) : - (src0 < src0 + src1 ? u_intN_min(bit_size) : src0 + src1) -""") -binop("uadd_sat", tuint, _2src_commutative, - "(src0 + src1) < src0 ? u_uintN_max(sizeof(src0) * 8) : (src0 + src1)") -binop("isub_sat", tint, "", """ - src1 < 0 ? - (src0 - src1 < src0 ? u_intN_max(bit_size) : src0 - src1) : - (src0 < src0 - src1 ? u_intN_min(bit_size) : src0 - src1) -""") -binop("usub_sat", tuint, "", "src0 < src1 ? 0 : src0 - src1") - -binop("fsub", tfloat, "", """ -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_sub_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 - (double)src1); -} else { - dst = src0 - src1; -} -""") -binop("isub", tint, "", "src0 - src1") -binop_convert("uabs_isub", tuint, tint, "", """ - src1 > src0 ? (uint64_t) src1 - (uint64_t) src0 - : (uint64_t) src0 - (uint64_t) src1 -""") -binop("uabs_usub", tuint, "", "(src1 > src0) ? (src1 - src0) : (src0 - src1)") - -binop("fmul", tfloat, _2src_commutative + associative, """ -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_mul_rtz(src0, src1); - else - dst = _mesa_double_to_float_rtz((double)src0 * (double)src1); -} else { - dst = src0 * src1; -} -""") - -# Unlike fmul, anything (even infinity or NaN) multiplied by zero is always zero. -# fmulz(0.0, inf) and fmulz(0.0, nan) must be +/-0.0, even if -# SIGNED_ZERO_INF_NAN_PRESERVE is not used. If SIGNED_ZERO_INF_NAN_PRESERVE is used, then -# the result must be a positive zero if either operand is zero. -binop("fmulz", tfloat32, _2src_commutative + associative, """ -if (src0 == 0.0 || src1 == 0.0) - dst = 0.0; -else if (nir_is_rounding_mode_rtz(execution_mode, 32)) - dst = _mesa_double_to_float_rtz((double)src0 * (double)src1); -else - dst = src0 * src1; -""") - -# low 32-bits of signed/unsigned integer multiply -binop("imul", tint, _2src_commutative + associative, """ - /* Use 64-bit multiplies to prevent overflow of signed arithmetic */ - dst = (uint64_t)src0 * (uint64_t)src1; -""") - -# Generate 64 bit result from 2 32 bits quantity -binop_convert("imul_2x32_64", tint64, tint32, _2src_commutative, - "(int64_t)src0 * (int64_t)src1") -binop_convert("umul_2x32_64", tuint64, tuint32, _2src_commutative, - "(uint64_t)src0 * (uint64_t)src1") - -# high 32-bits of signed integer multiply -binop("imul_high", tint, _2src_commutative, """ -if (bit_size == 64) { - /* We need to do a full 128-bit x 128-bit multiply in order for the sign - * extension to work properly. The casts are kind-of annoying but needed - * to prevent compiler warnings. - */ - uint32_t src0_u32[4] = { - src0, - (int64_t)src0 >> 32, - (int64_t)src0 >> 63, - (int64_t)src0 >> 63, - }; - uint32_t src1_u32[4] = { - src1, - (int64_t)src1 >> 32, - (int64_t)src1 >> 63, - (int64_t)src1 >> 63, - }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - /* First, sign-extend to 64-bit, then convert to unsigned to prevent - * potential overflow of signed multiply */ - dst = ((uint64_t)(int64_t)src0 * (uint64_t)(int64_t)src1) >> bit_size; -} -""") - -# high 32-bits of unsigned integer multiply -binop("umul_high", tuint, _2src_commutative, """ -if (bit_size == 64) { - /* The casts are kind-of annoying but needed to prevent compiler warnings. */ - uint32_t src0_u32[2] = { src0, (uint64_t)src0 >> 32 }; - uint32_t src1_u32[2] = { src1, (uint64_t)src1 >> 32 }; - uint32_t prod_u32[4]; - ubm_mul_u32arr(prod_u32, src0_u32, src1_u32); - dst = (uint64_t)prod_u32[2] | ((uint64_t)prod_u32[3] << 32); -} else { - dst = ((uint64_t)src0 * (uint64_t)src1) >> bit_size; -} -""") - -# low 32-bits of unsigned integer multiply -binop("umul_low", tuint32, _2src_commutative, """ -uint64_t mask = (1 << (bit_size / 2)) - 1; -dst = ((uint64_t)src0 & mask) * ((uint64_t)src1 & mask); -""") - -# Multiply 32-bits with low 16-bits. -binop("imul_32x16", tint32, "", "src0 * (int16_t) src1") -binop("umul_32x16", tuint32, "", "src0 * (uint16_t) src1") - -binop("fdiv", tfloat, "", "src0 / src1") -binop("idiv", tint, "", "src1 == 0 ? 0 : (src0 / src1)") -binop("udiv", tuint, "", "src1 == 0 ? 0 : (src0 / src1)") - -# returns an integer (1 or 0) representing the carry resulting from the -# addition of the two unsigned arguments. - -binop_convert("uadd_carry", tuint, tuint, _2src_commutative, "src0 + src1 < src0") - -# returns an integer (1 or 0) representing the borrow resulting from the -# subtraction of the two unsigned arguments. - -binop_convert("usub_borrow", tuint, tuint, "", "src0 < src1") - -# hadd: (a + b) >> 1 (without overflow) -# x + y = x - (x & ~y) + (x & ~y) + y - (~x & y) + (~x & y) -# = (x & y) + (x & ~y) + (x & y) + (~x & y) -# = 2 * (x & y) + (x & ~y) + (~x & y) -# = ((x & y) << 1) + (x ^ y) -# -# Since we know that the bottom bit of (x & y) << 1 is zero, -# -# (x + y) >> 1 = (((x & y) << 1) + (x ^ y)) >> 1 -# = (x & y) + ((x ^ y) >> 1) -binop("ihadd", tint, _2src_commutative, "(src0 & src1) + ((src0 ^ src1) >> 1)") -binop("uhadd", tuint, _2src_commutative, "(src0 & src1) + ((src0 ^ src1) >> 1)") - -# rhadd: (a + b + 1) >> 1 (without overflow) -# x + y + 1 = x + (~x & y) - (~x & y) + y + (x & ~y) - (x & ~y) + 1 -# = (x | y) - (~x & y) + (x | y) - (x & ~y) + 1 -# = 2 * (x | y) - ((~x & y) + (x & ~y)) + 1 -# = ((x | y) << 1) - (x ^ y) + 1 -# -# Since we know that the bottom bit of (x & y) << 1 is zero, -# -# (x + y + 1) >> 1 = (x | y) + (-(x ^ y) + 1) >> 1) -# = (x | y) - ((x ^ y) >> 1) -binop("irhadd", tint, _2src_commutative, "(src0 | src1) - ((src0 ^ src1) >> 1)") -binop("urhadd", tuint, _2src_commutative, "(src0 | src1) - ((src0 ^ src1) >> 1)") - -binop("umod", tuint, "", "src1 == 0 ? 0 : src0 % src1") - -# For signed integers, there are several different possible definitions of -# "modulus" or "remainder". We follow the conventions used by LLVM and -# SPIR-V. The irem opcode implements the standard C/C++ signed "%" -# operation while the imod opcode implements the more mathematical -# "modulus" operation. For details on the difference, see -# -# http://mathforum.org/library/drmath/view/52343.html - -binop("irem", tint, "", "src1 == 0 ? 0 : src0 % src1") -binop("imod", tint, "", - "src1 == 0 ? 0 : ((src0 % src1 == 0 || (src0 >= 0) == (src1 >= 0)) ?" - " src0 % src1 : src0 % src1 + src1)") -binop("fmod", tfloat, "", "src0 - src1 * floorf(src0 / src1)") -binop("frem", tfloat, "", "src0 - src1 * truncf(src0 / src1)") - -# -# Comparisons -# - - -# these integer-aware comparisons return a boolean (0 or ~0) - -binop_compare_all_sizes("flt", tfloat, "", "src0 < src1") -binop_compare_all_sizes("fge", tfloat, "", "src0 >= src1") -binop_compare_all_sizes("feq", tfloat, _2src_commutative, "src0 == src1") -binop_compare_all_sizes("fneu", tfloat, _2src_commutative, "src0 != src1") -binop_compare_all_sizes("ilt", tint, "", "src0 < src1") -binop_compare_all_sizes("ige", tint, "", "src0 >= src1") -binop_compare_all_sizes("ieq", tint, _2src_commutative, "src0 == src1") -binop_compare_all_sizes("ine", tint, _2src_commutative, "src0 != src1") -binop_compare_all_sizes("ult", tuint, "", "src0 < src1") -binop_compare_all_sizes("uge", tuint, "", "src0 >= src1") - -# integer-aware GLSL-style comparisons that compare floats and ints - -binop_reduce_all_sizes("ball_fequal", 1, tfloat, "{src0} == {src1}", - "{src0} && {src1}", "{src}") -binop_reduce_all_sizes("bany_fnequal", 1, tfloat, "{src0} != {src1}", - "{src0} || {src1}", "{src}") -binop_reduce_all_sizes("ball_iequal", 1, tint, "{src0} == {src1}", - "{src0} && {src1}", "{src}") -binop_reduce_all_sizes("bany_inequal", 1, tint, "{src0} != {src1}", - "{src0} || {src1}", "{src}") - -# non-integer-aware GLSL-style comparisons that return 0.0 or 1.0 - -binop_reduce("fall_equal", 1, tfloat32, tfloat32, "{src0} == {src1}", - "{src0} && {src1}", "{src} ? 1.0f : 0.0f") -binop_reduce("fany_nequal", 1, tfloat32, tfloat32, "{src0} != {src1}", - "{src0} || {src1}", "{src} ? 1.0f : 0.0f") - -# These comparisons for integer-less hardware return 1.0 and 0.0 for true -# and false respectively - -binop("slt", tfloat, "", "(src0 < src1) ? 1.0f : 0.0f") # Set on Less Than -binop("sge", tfloat, "", "(src0 >= src1) ? 1.0f : 0.0f") # Set on Greater or Equal -binop("seq", tfloat, _2src_commutative, "(src0 == src1) ? 1.0f : 0.0f") # Set on Equal -binop("sne", tfloat, _2src_commutative, "(src0 != src1) ? 1.0f : 0.0f") # Set on Not Equal - -# SPIRV shifts are undefined for shift-operands >= bitsize, -# but SM5 shifts are defined to use only the least significant bits. -# The NIR definition is according to the SM5 specification. -opcode("ishl", 0, tint, [0, 0], [tint, tuint32], False, "", - "(uint64_t)src0 << (src1 & (sizeof(src0) * 8 - 1))") -opcode("ishr", 0, tint, [0, 0], [tint, tuint32], False, "", - "src0 >> (src1 & (sizeof(src0) * 8 - 1))") -opcode("ushr", 0, tuint, [0, 0], [tuint, tuint32], False, "", - "src0 >> (src1 & (sizeof(src0) * 8 - 1))") - -opcode("urol", 0, tuint, [0, 0], [tuint, tuint32], False, "", """ - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 << (src1 & rotate_mask)) | - (src0 >> (-src1 & rotate_mask)); -""") -opcode("uror", 0, tuint, [0, 0], [tuint, tuint32], False, "", """ - uint32_t rotate_mask = sizeof(src0) * 8 - 1; - dst = (src0 >> (src1 & rotate_mask)) | - (src0 << (-src1 & rotate_mask)); -""") - -# bitwise logic operators -# -# These are also used as boolean and, or, xor for hardware supporting -# integers. - - -binop("iand", tuint, _2src_commutative + associative, "src0 & src1") -binop("ior", tuint, _2src_commutative + associative, "src0 | src1") -binop("ixor", tuint, _2src_commutative + associative, "src0 ^ src1") - - -binop_reduce("fdot", 1, tfloat, tfloat, "{src0} * {src1}", "{src0} + {src1}", - "{src}") - -binop_reduce("fdot", 0, tfloat, tfloat, - "{src0} * {src1}", "{src0} + {src1}", "{src}", - suffix="_replicated") - -opcode("fdph", 1, tfloat, [3, 4], [tfloat, tfloat], False, "", - "src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w") -opcode("fdph_replicated", 0, tfloat, [3, 4], [tfloat, tfloat], False, "", - "src0.x * src1.x + src0.y * src1.y + src0.z * src1.z + src1.w") - -binop("fmin", tfloat, _2src_commutative + associative, "fmin(src0, src1)") -binop("imin", tint, _2src_commutative + associative, "src1 > src0 ? src0 : src1") -binop("umin", tuint, _2src_commutative + associative, "src1 > src0 ? src0 : src1") -binop("fmax", tfloat, _2src_commutative + associative, "fmax(src0, src1)") -binop("imax", tint, _2src_commutative + associative, "src1 > src0 ? src1 : src0") -binop("umax", tuint, _2src_commutative + associative, "src1 > src0 ? src1 : src0") - -binop("fpow", tfloat, "", "bit_size == 64 ? pow(src0, src1) : powf(src0, src1)") - -binop_horiz("pack_half_2x16_split", 1, tuint32, 1, tfloat32, 1, tfloat32, - "pack_half_1x16(src0.x) | (pack_half_1x16(src1.x) << 16)") - -binop_horiz("pack_half_2x16_rtz_split", 1, tuint32, 1, tfloat32, 1, tfloat32, - "pack_half_1x16_rtz(src0.x) | (pack_half_1x16_rtz(src1.x) << 16)") - -binop_convert("pack_64_2x32_split", tuint64, tuint32, "", - "src0 | ((uint64_t)src1 << 32)") - -binop_convert("pack_32_2x16_split", tuint32, tuint16, "", - "src0 | ((uint32_t)src1 << 16)") - -opcode("pack_32_4x8_split", 0, tuint32, [0, 0, 0, 0], [tuint8, tuint8, tuint8, tuint8], - False, "", - "src0 | ((uint32_t)src1 << 8) | ((uint32_t)src2 << 16) | ((uint32_t)src3 << 24)") - -# bfm implements the behavior of the first operation of the SM5 "bfi" assembly -# and that of the "bfi1" i965 instruction. That is, the bits and offset values -# are from the low five bits of src0 and src1, respectively. -binop_convert("bfm", tuint32, tint32, "", """ -int bits = src0 & 0x1F; -int offset = src1 & 0x1F; -dst = ((1u << bits) - 1) << offset; -""") - -opcode("ldexp", 0, tfloat, [0, 0], [tfloat, tint32], False, "", """ -dst = (bit_size == 64) ? ldexp(src0, src1) : ldexpf(src0, src1); -/* flush denormals to zero. */ -if (!isnormal(dst)) - dst = copysignf(0.0f, src0); -""") - -# Combines the first component of each input to make a 2-component vector. - -binop_horiz("vec2", 2, tuint, 1, tuint, 1, tuint, """ -dst.x = src0.x; -dst.y = src1.x; -""") - -# Byte extraction -binop("extract_u8", tuint, "", "(uint8_t)(src0 >> (src1 * 8))") -binop("extract_i8", tint, "", "(int8_t)(src0 >> (src1 * 8))") - -# Word extraction -binop("extract_u16", tuint, "", "(uint16_t)(src0 >> (src1 * 16))") -binop("extract_i16", tint, "", "(int16_t)(src0 >> (src1 * 16))") - -# Byte/word insertion -binop("insert_u8", tuint, "", "(src0 & 0xff) << (src1 * 8)") -binop("insert_u16", tuint, "", "(src0 & 0xffff) << (src1 * 16)") - - -def triop(name, ty, alg_props, const_expr): - opcode(name, 0, ty, [0, 0, 0], [ty, ty, ty], False, alg_props, const_expr) -def triop_horiz(name, output_size, src1_size, src2_size, src3_size, const_expr): - opcode(name, output_size, tuint, - [src1_size, src2_size, src3_size], - [tuint, tuint, tuint], False, "", const_expr) - -triop("ffma", tfloat, _2src_commutative, """ -if (nir_is_rounding_mode_rtz(execution_mode, bit_size)) { - if (bit_size == 64) - dst = _mesa_double_fma_rtz(src0, src1, src2); - else if (bit_size == 32) - dst = _mesa_float_fma_rtz(src0, src1, src2); - else - dst = _mesa_double_to_float_rtz(_mesa_double_fma_rtz(src0, src1, src2)); -} else { - if (bit_size == 32) - dst = fmaf(src0, src1, src2); - else - dst = fma(src0, src1, src2); -} -""") - -# Unlike ffma, anything (even infinity or NaN) multiplied by zero is always zero. -# ffmaz(0.0, inf, src2) and ffmaz(0.0, nan, src2) must be +/-0.0 + src2, even if -# SIGNED_ZERO_INF_NAN_PRESERVE is not used. If SIGNED_ZERO_INF_NAN_PRESERVE is used, then -# the result must be a positive zero plus src2 if either src0 or src1 is zero. -triop("ffmaz", tfloat32, _2src_commutative, """ -if (src0 == 0.0 || src1 == 0.0) - dst = 0.0 + src2; -else if (nir_is_rounding_mode_rtz(execution_mode, 32)) - dst = _mesa_float_fma_rtz(src0, src1, src2); -else - dst = fmaf(src0, src1, src2); -""") - -triop("flrp", tfloat, "", "src0 * (1 - src2) + src1 * src2") - -# Ternary addition -triop("iadd3", tint, _2src_commutative + associative, "src0 + src1 + src2") - -# Conditional Select -# -# A vector conditional select instruction (like ?:, but operating per- -# component on vectors). There are two versions, one for floating point -# bools (0.0 vs 1.0) and one for integer bools (0 vs ~0). - -triop("fcsel", tfloat32, selection, "(src0 != 0.0f) ? src1 : src2") - -opcode("bcsel", 0, tuint, [0, 0, 0], - [tbool1, tuint, tuint], False, selection, "src0 ? src1 : src2") -opcode("b8csel", 0, tuint, [0, 0, 0], - [tbool8, tuint, tuint], False, selection, "src0 ? src1 : src2") -opcode("b16csel", 0, tuint, [0, 0, 0], - [tbool16, tuint, tuint], False, selection, "src0 ? src1 : src2") -opcode("b32csel", 0, tuint, [0, 0, 0], - [tbool32, tuint, tuint], False, selection, "src0 ? src1 : src2") - -triop("i32csel_gt", tint32, selection, "(src0 > 0) ? src1 : src2") -triop("i32csel_ge", tint32, selection, "(src0 >= 0) ? src1 : src2") - -triop("fcsel_gt", tfloat32, selection, "(src0 > 0.0f) ? src1 : src2") -triop("fcsel_ge", tfloat32, selection, "(src0 >= 0.0f) ? src1 : src2") - -# SM5 bfi assembly -triop("bfi", tuint32, "", """ -unsigned mask = src0, insert = src1, base = src2; -if (mask == 0) { - dst = base; -} else { - unsigned tmp = mask; - while (!(tmp & 1)) { - tmp >>= 1; - insert <<= 1; - } - dst = (base & ~mask) | (insert & mask); -} -""") - - -triop("bitfield_select", tuint, "", "(src0 & src1) | (~src0 & src2)") - -# SM5 ubfe/ibfe assembly: only the 5 least significant bits of offset and bits are used. -opcode("ubfe", 0, tuint32, - [0, 0, 0], [tuint32, tuint32, tuint32], False, "", """ -unsigned base = src0; -unsigned offset = src1 & 0x1F; -unsigned bits = src2 & 0x1F; -if (bits == 0) { - dst = 0; -} else if (offset + bits < 32) { - dst = (base << (32 - bits - offset)) >> (32 - bits); -} else { - dst = base >> offset; -} -""") -opcode("ibfe", 0, tint32, - [0, 0, 0], [tint32, tuint32, tuint32], False, "", """ -int base = src0; -unsigned offset = src1 & 0x1F; -unsigned bits = src2 & 0x1F; -if (bits == 0) { - dst = 0; -} else if (offset + bits < 32) { - dst = (base << (32 - bits - offset)) >> (32 - bits); -} else { - dst = base >> offset; -} -""") - -# GLSL bitfieldExtract() -opcode("ubitfield_extract", 0, tuint32, - [0, 0, 0], [tuint32, tint32, tint32], False, "", """ -unsigned base = src0; -int offset = src1, bits = src2; -if (bits == 0) { - dst = 0; -} else if (bits < 0 || offset < 0 || offset + bits > 32) { - dst = 0; /* undefined per the spec */ -} else { - dst = (base >> offset) & ((1ull << bits) - 1); -} -""") -opcode("ibitfield_extract", 0, tint32, - [0, 0, 0], [tint32, tint32, tint32], False, "", """ -int base = src0; -int offset = src1, bits = src2; -if (bits == 0) { - dst = 0; -} else if (offset < 0 || bits < 0 || offset + bits > 32) { - dst = 0; -} else { - dst = (base << (32 - offset - bits)) >> (32 - bits); /* use sign-extending shift */ -} -""") - -# Sum of absolute differences with accumulation. -# (Equivalent to AMD's v_sad_u8 instruction.) -# The first two sources contain packed 8-bit unsigned integers, the instruction -# will calculate the absolute difference of these, and then add them together. -# There is also a third source which is a 32-bit unsigned integer and added to the result. -triop_horiz("sad_u8x4", 1, 1, 1, 1, """ -uint8_t s0_b0 = (src0.x & 0x000000ff) >> 0; -uint8_t s0_b1 = (src0.x & 0x0000ff00) >> 8; -uint8_t s0_b2 = (src0.x & 0x00ff0000) >> 16; -uint8_t s0_b3 = (src0.x & 0xff000000) >> 24; - -uint8_t s1_b0 = (src1.x & 0x000000ff) >> 0; -uint8_t s1_b1 = (src1.x & 0x0000ff00) >> 8; -uint8_t s1_b2 = (src1.x & 0x00ff0000) >> 16; -uint8_t s1_b3 = (src1.x & 0xff000000) >> 24; - -dst.x = src2.x + - (s0_b0 > s1_b0 ? (s0_b0 - s1_b0) : (s1_b0 - s0_b0)) + - (s0_b1 > s1_b1 ? (s0_b1 - s1_b1) : (s1_b1 - s0_b1)) + - (s0_b2 > s1_b2 ? (s0_b2 - s1_b2) : (s1_b2 - s0_b2)) + - (s0_b3 > s1_b3 ? (s0_b3 - s1_b3) : (s1_b3 - s0_b3)); -""") - -# Combines the first component of each input to make a 3-component vector. - -triop_horiz("vec3", 3, 1, 1, 1, """ -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -""") - -def quadop_horiz(name, output_size, src1_size, src2_size, src3_size, - src4_size, const_expr): - opcode(name, output_size, tuint, - [src1_size, src2_size, src3_size, src4_size], - [tuint, tuint, tuint, tuint], - False, "", const_expr) - -opcode("bitfield_insert", 0, tuint32, [0, 0, 0, 0], - [tuint32, tuint32, tint32, tint32], False, "", """ -unsigned base = src0, insert = src1; -int offset = src2, bits = src3; -if (bits == 0) { - dst = base; -} else if (offset < 0 || bits < 0 || bits + offset > 32) { - dst = 0; -} else { - unsigned mask = ((1ull << bits) - 1) << offset; - dst = (base & ~mask) | ((insert << offset) & mask); -} -""") - -quadop_horiz("vec4", 4, 1, 1, 1, 1, """ -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -""") - -opcode("vec5", 5, tuint, - [1] * 5, [tuint] * 5, - False, "", """ -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -""") - -opcode("vec8", 8, tuint, - [1] * 8, [tuint] * 8, - False, "", """ -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; -""") - -opcode("vec16", 16, tuint, - [1] * 16, [tuint] * 16, - False, "", """ -dst.x = src0.x; -dst.y = src1.x; -dst.z = src2.x; -dst.w = src3.x; -dst.e = src4.x; -dst.f = src5.x; -dst.g = src6.x; -dst.h = src7.x; -dst.i = src8.x; -dst.j = src9.x; -dst.k = src10.x; -dst.l = src11.x; -dst.m = src12.x; -dst.n = src13.x; -dst.o = src14.x; -dst.p = src15.x; -""") - -# An integer multiply instruction for address calculation. This is -# similar to imul, except that the results are undefined in case of -# overflow. Overflow is defined according to the size of the variable -# being dereferenced. -# -# This relaxed definition, compared to imul, allows an optimization -# pass to propagate bounds (ie, from an load/store intrinsic) to the -# sources, such that lower precision integer multiplies can be used. -# This is useful on hw that has 24b or perhaps 16b integer multiply -# instructions. -binop("amul", tint, _2src_commutative + associative, "src0 * src1") - -# ir3-specific instruction that maps directly to mul-add shift high mix, -# (IMADSH_MIX16 i.e. ah * bl << 16 + c). It is used for lowering integer -# multiplication (imul) on Freedreno backend.. -opcode("imadsh_mix16", 0, tint32, - [0, 0, 0], [tint32, tint32, tint32], False, "", """ -dst = ((((src0 & 0xffff0000) >> 16) * (src1 & 0x0000ffff)) << 16) + src2; -""") - -# ir3-specific instruction that maps directly to ir3 mad.s24. -# -# 24b multiply into 32b result (with sign extension) plus 32b int -triop("imad24_ir3", tint32, _2src_commutative, - "(((int32_t)src0 << 8) >> 8) * (((int32_t)src1 << 8) >> 8) + src2") - -# r600-specific instruction that evaluates unnormalized cube texture coordinates -# and face index -# The actual texture coordinates are evaluated from this according to -# dst.yx / abs(dst.z) + 1.5 -unop_horiz("cube_r600", 4, tfloat32, 3, tfloat32, """ - dst.x = dst.y = dst.z = 0.0; - float absX = fabsf(src0.x); - float absY = fabsf(src0.y); - float absZ = fabsf(src0.z); - - if (absX >= absY && absX >= absZ) { dst.z = 2 * src0.x; } - if (absY >= absX && absY >= absZ) { dst.z = 2 * src0.y; } - if (absZ >= absX && absZ >= absY) { dst.z = 2 * src0.z; } - - if (src0.x >= 0 && absX >= absY && absX >= absZ) { - dst.y = -src0.z; dst.x = -src0.y; dst.w = 0; - } - if (src0.x < 0 && absX >= absY && absX >= absZ) { - dst.y = src0.z; dst.x = -src0.y; dst.w = 1; - } - if (src0.y >= 0 && absY >= absX && absY >= absZ) { - dst.y = src0.x; dst.x = src0.z; dst.w = 2; - } - if (src0.y < 0 && absY >= absX && absY >= absZ) { - dst.y = src0.x; dst.x = -src0.z; dst.w = 3; - } - if (src0.z >= 0 && absZ >= absX && absZ >= absY) { - dst.y = src0.x; dst.x = -src0.y; dst.w = 4; - } - if (src0.z < 0 && absZ >= absX && absZ >= absY) { - dst.y = -src0.x; dst.x = -src0.y; dst.w = 5; - } -""") - -# r600/gcn specific sin and cos -# these trigeometric functions need some lowering because the supported -# input values are expected to be normalized by dividing by (2 * pi) -unop("fsin_amd", tfloat, "sinf(6.2831853 * src0)") -unop("fcos_amd", tfloat, "cosf(6.2831853 * src0)") - -# Midgard specific sin and cos -# These expect their inputs to be divided by pi. -unop("fsin_mdg", tfloat, "sinf(3.141592653589793 * src0)") -unop("fcos_mdg", tfloat, "cosf(3.141592653589793 * src0)") - -# AGX specific sin with input expressed in quadrants. Used in the lowering for -# fsin/fcos. This corresponds to a sequence of 3 ALU ops in the backend (where -# the angle is further decomposed by quadrant, sinc is computed, and the angle -# is multiplied back for sin). Lowering fsin/fcos to fsin_agx requires some -# additional ALU that NIR may be able to optimize. -unop("fsin_agx", tfloat, "sinf(src0 * (6.2831853/4.0))") - -# AGX specific bitfield extraction from a pair of 32bit registers. -# src0,src1: the two registers -# src2: bit position of the LSB of the bitfield -# src3: number of bits in the bitfield if src3 > 0 -# src3 = 0 is equivalent to src3 = 32 -# NOTE: src3 is a nir constant by contract -opcode("extr_agx", 0, tuint32, - [0, 0, 0, 0], [tuint32, tuint32, tuint32, tuint32], False, "", """ - uint32_t mask = 0xFFFFFFFF; - uint8_t shift = src2 & 0x7F; - if (src3 != 0) { - mask = (1 << src3) - 1; - } - if (shift >= 64) { - dst = 0; - } else { - dst = (((((uint64_t) src1) << 32) | (uint64_t) src0) >> shift) & mask; - } -"""); - -# 24b multiply into 32b result (with sign extension) -binop("imul24", tint32, _2src_commutative + associative, - "(((int32_t)src0 << 8) >> 8) * (((int32_t)src1 << 8) >> 8)") - -# unsigned 24b multiply into 32b result plus 32b int -triop("umad24", tuint32, _2src_commutative, - "(((uint32_t)src0 << 8) >> 8) * (((uint32_t)src1 << 8) >> 8) + src2") - -# unsigned 24b multiply into 32b result uint -binop("umul24", tint32, _2src_commutative + associative, - "(((uint32_t)src0 << 8) >> 8) * (((uint32_t)src1 << 8) >> 8)") - -# relaxed versions of the above, which assume input is in the 24bit range (no clamping) -binop("imul24_relaxed", tint32, _2src_commutative + associative, "src0 * src1") -triop("umad24_relaxed", tuint32, _2src_commutative, "src0 * src1 + src2") -binop("umul24_relaxed", tuint32, _2src_commutative + associative, "src0 * src1") - -unop_convert("fisnormal", tbool1, tfloat, "isnormal(src0)") -unop_convert("fisfinite", tbool1, tfloat, "isfinite(src0)") -unop_convert("fisfinite32", tbool32, tfloat, "isfinite(src0)") - -# vc4-specific opcodes - -# Saturated vector add for 4 8bit ints. -binop("usadd_4x8_vc4", tint32, _2src_commutative + associative, """ -dst = 0; -for (int i = 0; i < 32; i += 8) { - dst |= MIN2(((src0 >> i) & 0xff) + ((src1 >> i) & 0xff), 0xff) << i; -} -""") - -# Saturated vector subtract for 4 8bit ints. -binop("ussub_4x8_vc4", tint32, "", """ -dst = 0; -for (int i = 0; i < 32; i += 8) { - int src0_chan = (src0 >> i) & 0xff; - int src1_chan = (src1 >> i) & 0xff; - if (src0_chan > src1_chan) - dst |= (src0_chan - src1_chan) << i; -} -""") - -# vector min for 4 8bit ints. -binop("umin_4x8_vc4", tint32, _2src_commutative + associative, """ -dst = 0; -for (int i = 0; i < 32; i += 8) { - dst |= MIN2((src0 >> i) & 0xff, (src1 >> i) & 0xff) << i; -} -""") - -# vector max for 4 8bit ints. -binop("umax_4x8_vc4", tint32, _2src_commutative + associative, """ -dst = 0; -for (int i = 0; i < 32; i += 8) { - dst |= MAX2((src0 >> i) & 0xff, (src1 >> i) & 0xff) << i; -} -""") - -# unorm multiply: (a * b) / 255. -binop("umul_unorm_4x8_vc4", tint32, _2src_commutative + associative, """ -dst = 0; -for (int i = 0; i < 32; i += 8) { - int src0_chan = (src0 >> i) & 0xff; - int src1_chan = (src1 >> i) & 0xff; - dst |= ((src0_chan * src1_chan) / 255) << i; -} -""") - -# Mali-specific opcodes -unop("fsat_signed_mali", tfloat, ("fmin(fmax(src0, -1.0), 1.0)")) -unop("fclamp_pos_mali", tfloat, ("fmax(src0, 0.0)")) - -# Magnitude equal to fddx/y, sign undefined. Derivative of a constant is zero. -unop("fddx_must_abs_mali", tfloat, "0.0") -unop("fddy_must_abs_mali", tfloat, "0.0") - -# DXIL specific double [un]pack -# DXIL doesn't support generic [un]pack instructions, so we want those -# lowered to bit ops. HLSL doesn't support 64bit bitcasts to/from -# double, only [un]pack. Technically DXIL does, but considering they -# can't be generated from HLSL, we want to match what would be coming from DXC. -# This is essentially just the standard [un]pack, except that it doesn't get -# lowered so we can handle it in the backend and turn it into MakeDouble/SplitDouble -unop_horiz("pack_double_2x32_dxil", 1, tuint64, 2, tuint32, - "dst.x = src0.x | ((uint64_t)src0.y << 32);") -unop_horiz("unpack_double_2x32_dxil", 2, tuint32, 1, tuint64, - "dst.x = src0.x; dst.y = src0.x >> 32;") - -# src0 and src1 are i8vec4 packed in an int32, and src2 is an int32. The int8 -# components are sign-extended to 32-bits, and a dot-product is performed on -# the resulting vectors. src2 is added to the result of the dot-product. -opcode("sdot_4x8_iadd", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, _2src_commutative, """ - const int32_t v0x = (int8_t)(src0 ); - const int32_t v0y = (int8_t)(src0 >> 8); - const int32_t v0z = (int8_t)(src0 >> 16); - const int32_t v0w = (int8_t)(src0 >> 24); - const int32_t v1x = (int8_t)(src1 ); - const int32_t v1y = (int8_t)(src1 >> 8); - const int32_t v1z = (int8_t)(src1 >> 16); - const int32_t v1w = (int8_t)(src1 >> 24); - - dst = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; -""") - -# Like sdot_4x8_iadd, but unsigned. -opcode("udot_4x8_uadd", 0, tuint32, [0, 0, 0], [tuint32, tuint32, tuint32], - False, _2src_commutative, """ - const uint32_t v0x = (uint8_t)(src0 ); - const uint32_t v0y = (uint8_t)(src0 >> 8); - const uint32_t v0z = (uint8_t)(src0 >> 16); - const uint32_t v0w = (uint8_t)(src0 >> 24); - const uint32_t v1x = (uint8_t)(src1 ); - const uint32_t v1y = (uint8_t)(src1 >> 8); - const uint32_t v1z = (uint8_t)(src1 >> 16); - const uint32_t v1w = (uint8_t)(src1 >> 24); - - dst = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; -""") - -# src0 is i8vec4 packed in an int32, src1 is u8vec4 packed in an int32, and -# src2 is an int32. The 8-bit components are extended to 32-bits, and a -# dot-product is performed on the resulting vectors. src2 is added to the -# result of the dot-product. -# -# NOTE: Unlike many of the other dp4a opcodes, this mixed signs of source 0 -# and source 1 mean that this opcode is not 2-source commutative -opcode("sudot_4x8_iadd", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, "", """ - const int32_t v0x = (int8_t)(src0 ); - const int32_t v0y = (int8_t)(src0 >> 8); - const int32_t v0z = (int8_t)(src0 >> 16); - const int32_t v0w = (int8_t)(src0 >> 24); - const uint32_t v1x = (uint8_t)(src1 ); - const uint32_t v1y = (uint8_t)(src1 >> 8); - const uint32_t v1z = (uint8_t)(src1 >> 16); - const uint32_t v1w = (uint8_t)(src1 >> 24); - - dst = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; -""") - -# Like sdot_4x8_iadd, but the result is clampled to the range [-0x80000000, 0x7ffffffff]. -opcode("sdot_4x8_iadd_sat", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, _2src_commutative, """ - const int64_t v0x = (int8_t)(src0 ); - const int64_t v0y = (int8_t)(src0 >> 8); - const int64_t v0z = (int8_t)(src0 >> 16); - const int64_t v0w = (int8_t)(src0 >> 24); - const int64_t v1x = (int8_t)(src1 ); - const int64_t v1y = (int8_t)(src1 >> 8); - const int64_t v1z = (int8_t)(src1 >> 16); - const int64_t v1w = (int8_t)(src1 >> 24); - - const int64_t tmp = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - dst = tmp >= INT32_MAX ? INT32_MAX : (tmp <= INT32_MIN ? INT32_MIN : tmp); -""") - -# Like udot_4x8_uadd, but the result is clampled to the range [0, 0xfffffffff]. -opcode("udot_4x8_uadd_sat", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, _2src_commutative, """ - const uint64_t v0x = (uint8_t)(src0 ); - const uint64_t v0y = (uint8_t)(src0 >> 8); - const uint64_t v0z = (uint8_t)(src0 >> 16); - const uint64_t v0w = (uint8_t)(src0 >> 24); - const uint64_t v1x = (uint8_t)(src1 ); - const uint64_t v1y = (uint8_t)(src1 >> 8); - const uint64_t v1z = (uint8_t)(src1 >> 16); - const uint64_t v1w = (uint8_t)(src1 >> 24); - - const uint64_t tmp = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - dst = tmp >= UINT32_MAX ? UINT32_MAX : tmp; -""") - -# Like sudot_4x8_iadd, but the result is clampled to the range [-0x80000000, 0x7ffffffff]. -# -# NOTE: Unlike many of the other dp4a opcodes, this mixed signs of source 0 -# and source 1 mean that this opcode is not 2-source commutative -opcode("sudot_4x8_iadd_sat", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, "", """ - const int64_t v0x = (int8_t)(src0 ); - const int64_t v0y = (int8_t)(src0 >> 8); - const int64_t v0z = (int8_t)(src0 >> 16); - const int64_t v0w = (int8_t)(src0 >> 24); - const uint64_t v1x = (uint8_t)(src1 ); - const uint64_t v1y = (uint8_t)(src1 >> 8); - const uint64_t v1z = (uint8_t)(src1 >> 16); - const uint64_t v1w = (uint8_t)(src1 >> 24); - - const int64_t tmp = (v0x * v1x) + (v0y * v1y) + (v0z * v1z) + (v0w * v1w) + src2; - - dst = tmp >= INT32_MAX ? INT32_MAX : (tmp <= INT32_MIN ? INT32_MIN : tmp); -""") - -# src0 and src1 are i16vec2 packed in an int32, and src2 is an int32. The int16 -# components are sign-extended to 32-bits, and a dot-product is performed on -# the resulting vectors. src2 is added to the result of the dot-product. -opcode("sdot_2x16_iadd", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, _2src_commutative, """ - const int32_t v0x = (int16_t)(src0 ); - const int32_t v0y = (int16_t)(src0 >> 16); - const int32_t v1x = (int16_t)(src1 ); - const int32_t v1y = (int16_t)(src1 >> 16); - - dst = (v0x * v1x) + (v0y * v1y) + src2; -""") - -# Like sdot_2x16_iadd, but unsigned. -opcode("udot_2x16_uadd", 0, tuint32, [0, 0, 0], [tuint32, tuint32, tuint32], - False, _2src_commutative, """ - const uint32_t v0x = (uint16_t)(src0 ); - const uint32_t v0y = (uint16_t)(src0 >> 16); - const uint32_t v1x = (uint16_t)(src1 ); - const uint32_t v1y = (uint16_t)(src1 >> 16); - - dst = (v0x * v1x) + (v0y * v1y) + src2; -""") - -# Like sdot_2x16_iadd, but the result is clampled to the range [-0x80000000, 0x7ffffffff]. -opcode("sdot_2x16_iadd_sat", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, _2src_commutative, """ - const int64_t v0x = (int16_t)(src0 ); - const int64_t v0y = (int16_t)(src0 >> 16); - const int64_t v1x = (int16_t)(src1 ); - const int64_t v1y = (int16_t)(src1 >> 16); - - const int64_t tmp = (v0x * v1x) + (v0y * v1y) + src2; - - dst = tmp >= INT32_MAX ? INT32_MAX : (tmp <= INT32_MIN ? INT32_MIN : tmp); -""") - -# Like udot_2x16_uadd, but the result is clampled to the range [0, 0xfffffffff]. -opcode("udot_2x16_uadd_sat", 0, tint32, [0, 0, 0], [tuint32, tuint32, tint32], - False, _2src_commutative, """ - const uint64_t v0x = (uint16_t)(src0 ); - const uint64_t v0y = (uint16_t)(src0 >> 16); - const uint64_t v1x = (uint16_t)(src1 ); - const uint64_t v1y = (uint16_t)(src1 >> 16); - - const uint64_t tmp = (v0x * v1x) + (v0y * v1y) + src2; - - dst = tmp >= UINT32_MAX ? UINT32_MAX : tmp; -""") diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes_c.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes_c.py deleted file mode 100644 index 2909a15..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes_c.py +++ /dev/null @@ -1,133 +0,0 @@ -# -# Copyright (C) 2014 Connor Abbott -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. -# -# Authors: -# Connor Abbott (cwabbott0@gmail.com) - -from nir_opcodes import opcodes, type_sizes -from mako.template import Template - -template = Template(""" -#include "nir.h" - -nir_op -nir_type_conversion_op(nir_alu_type src, nir_alu_type dst, nir_rounding_mode rnd) -{ - nir_alu_type src_base = (nir_alu_type) nir_alu_type_get_base_type(src); - nir_alu_type dst_base = (nir_alu_type) nir_alu_type_get_base_type(dst); - unsigned src_bit_size = nir_alu_type_get_type_size(src); - unsigned dst_bit_size = nir_alu_type_get_type_size(dst); - - if (src == dst && src_base == nir_type_float) { - return nir_op_mov; - } else if (src == dst && src_base == nir_type_bool) { - return nir_op_mov; - } else if ((src_base == nir_type_int || src_base == nir_type_uint) && - (dst_base == nir_type_int || dst_base == nir_type_uint) && - src_bit_size == dst_bit_size) { - /* Integer <-> integer conversions with the same bit-size on both - * ends are just no-op moves. - */ - return nir_op_mov; - } - - /* f2b, i2b, and u2b do not exist. Use ine or fne (via nir_type_conversion) - * instead. - */ - assert(src_base == dst_base || dst_base != nir_type_bool); - - switch (src_base) { -% for src_t in ['int', 'uint', 'float', 'bool']: - case nir_type_${src_t}: - switch (dst_base) { -% for dst_t in ['int', 'uint', 'float', 'bool']: - case nir_type_${dst_t}: -% if src_t in ['int', 'uint'] and dst_t in ['int', 'uint']: -% if dst_t == 'int': -<% continue %> -% else: -<% dst_t = src_t %> -% endif -% elif src_t == 'bool' and dst_t in ['int', 'uint', 'bool']: -% if dst_t == 'int': -<% continue %> -% else: -<% dst_t = 'int' %> -% endif -% elif src_t != 'bool' and dst_t == 'bool': -<% continue %> -% endif - switch (dst_bit_size) { -% for dst_bits in type_sizes(dst_t): - case ${dst_bits}: -% if src_t == 'float' and dst_t == 'float' and dst_bits == 16: - switch(rnd) { -% for rnd_t in [('rtne', '_rtne'), ('rtz', '_rtz'), ('undef', '')]: - case nir_rounding_mode_${rnd_t[0]}: - return ${'nir_op_{0}2{1}{2}{3}'.format(src_t[0], dst_t[0], - dst_bits, rnd_t[1])}; -% endfor - default: - unreachable("Invalid 16-bit nir rounding mode"); - } -% else: - assert(rnd == nir_rounding_mode_undef); - return ${'nir_op_{0}2{1}{2}'.format(src_t[0], dst_t[0], dst_bits)}; -% endif -% endfor - default: - unreachable("Invalid nir alu bit size"); - } -% endfor - default: - unreachable("Invalid nir alu base type"); - } -% endfor - default: - unreachable("Invalid nir alu base type"); - } -} - -const nir_op_info nir_op_infos[nir_num_opcodes] = { -% for name, opcode in sorted(opcodes.items()): -{ - .name = "${name}", - .num_inputs = ${opcode.num_inputs}, - .output_size = ${opcode.output_size}, - .output_type = ${"nir_type_" + opcode.output_type}, - .input_sizes = { - ${ ", ".join(str(size) for size in opcode.input_sizes) } - }, - .input_types = { - ${ ", ".join("nir_type_" + type for type in opcode.input_types) } - }, - .is_conversion = ${"true" if opcode.is_conversion else "false"}, - .algebraic_properties = - ${ "0" if opcode.algebraic_properties == "" else " | ".join( - "NIR_OP_IS_" + prop.upper() for prop in - opcode.algebraic_properties.strip().split(" ")) } -}, -% endfor -}; -""") - -print(template.render(opcodes=opcodes, type_sizes=type_sizes)) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes_h.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes_h.py deleted file mode 100644 index 1fc799b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opcodes_h.py +++ /dev/null @@ -1,45 +0,0 @@ -template = """\ -/* Copyright (C) 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - */ - -#ifndef _NIR_OPCODES_ -#define _NIR_OPCODES_ - -<% opcode_names = sorted(opcodes.keys()) %> - -typedef enum { -% for name in opcode_names: - nir_op_${name}, -% endfor - nir_last_opcode = nir_op_${opcode_names[-1]}, - nir_num_opcodes = nir_last_opcode + 1 -} nir_op; - -#endif /* _NIR_OPCODES_ */""" - -from nir_opcodes import opcodes -from mako.template import Template - -print(Template(template).render(opcodes=opcodes)) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_access.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_access.c deleted file mode 100644 index d61f301..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_access.c +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright © 2019 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -/* This pass optimizes GL access qualifiers. So far it does three things: - * - * - Infer readonly when it's missing. - * - Infer writeonly when it's missing. - * - Infer ACCESS_CAN_REORDER when the following are true: - * - Either there are no writes, or ACCESS_NON_WRITEABLE is set. In either - * case there are no writes to the underlying memory. - * - ACCESS_VOLATILE is not set. - * - * If these conditions are true, then image and buffer reads may be treated as - * if they were uniform buffer reads, i.e. they may be arbitrarily moved, - * combined, rematerialized etc. - */ - -struct access_state { - nir_shader *shader; - - struct set *vars_written; - struct set *vars_read; - bool images_written; - bool buffers_written; - bool images_read; - bool buffers_read; -}; - -static void -gather_buffer_access(struct access_state *state, nir_ssa_def *def, bool read, bool write) -{ - state->buffers_read |= read; - state->buffers_written |= write; - - if (!def) - return; - - const nir_variable *var = nir_get_binding_variable( - state->shader, nir_chase_binding(nir_src_for_ssa(def))); - if (var) { - if (read) - _mesa_set_add(state->vars_read, var); - if (write) - _mesa_set_add(state->vars_written, var); - } else { - nir_foreach_variable_with_modes(possible_var, state->shader, nir_var_mem_ssbo) { - if (read) - _mesa_set_add(state->vars_read, possible_var); - if (write) - _mesa_set_add(state->vars_written, possible_var); - } - } -} - -static void -gather_intrinsic(struct access_state *state, nir_intrinsic_instr *instr) -{ - const nir_variable *var; - bool read, write; - switch (instr->intrinsic) { - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_sparse_load: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_samples_identical: - var = nir_intrinsic_get_var(instr, 0); - read = instr->intrinsic != nir_intrinsic_image_deref_store; - write = instr->intrinsic != nir_intrinsic_image_deref_load && - instr->intrinsic != nir_intrinsic_image_deref_sparse_load; - - /* In OpenGL, buffer images use normal buffer objects, whereas other - * image types use textures which cannot alias with buffer objects. - * Therefore we have to group buffer samplers together with SSBO's. - */ - if (glsl_get_sampler_dim(glsl_without_array(var->type)) == - GLSL_SAMPLER_DIM_BUF) { - state->buffers_read |= read; - state->buffers_written |= write; - } else { - state->images_read |= read; - state->images_written |= write; - } - - if ((var->data.mode == nir_var_uniform || - var->data.mode == nir_var_image) && read) - _mesa_set_add(state->vars_read, var); - if ((var->data.mode == nir_var_uniform || - var->data.mode == nir_var_image) && write) - _mesa_set_add(state->vars_written, var); - break; - - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_bindless_image_sparse_load: - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_fmax: - case nir_intrinsic_bindless_image_samples_identical: - read = instr->intrinsic != nir_intrinsic_bindless_image_store; - write = instr->intrinsic != nir_intrinsic_bindless_image_load && - instr->intrinsic != nir_intrinsic_bindless_image_sparse_load; - - if (nir_intrinsic_image_dim(instr) == GLSL_SAMPLER_DIM_BUF) { - state->buffers_read |= read; - state->buffers_written |= write; - } else { - state->images_read |= read; - state->images_written |= write; - } - break; - - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_fcomp_swap: { - nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - if (!nir_deref_mode_may_be(deref, nir_var_mem_ssbo | nir_var_mem_global)) - break; - - bool ssbo = nir_deref_mode_is(deref, nir_var_mem_ssbo); - gather_buffer_access(state, ssbo ? instr->src[0].ssa : NULL, - instr->intrinsic != nir_intrinsic_store_deref, - instr->intrinsic != nir_intrinsic_load_deref); - break; - } - - default: - break; - } -} - -static bool -process_variable(struct access_state *state, nir_variable *var) -{ - const struct glsl_type *type = glsl_without_array(var->type); - if (var->data.mode != nir_var_mem_ssbo && - !(var->data.mode == nir_var_uniform && glsl_type_is_image(type)) && - var->data.mode != nir_var_image) - return false; - - /* Ignore variables we've already marked */ - if (var->data.access & ACCESS_CAN_REORDER) - return false; - - unsigned access = var->data.access; - bool is_buffer = var->data.mode == nir_var_mem_ssbo || - glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF; - - if (!(access & ACCESS_NON_WRITEABLE)) { - if (is_buffer ? !state->buffers_written : !state->images_written) - access |= ACCESS_NON_WRITEABLE; - else if ((access & ACCESS_RESTRICT) && !_mesa_set_search(state->vars_written, var)) - access |= ACCESS_NON_WRITEABLE; - } - - if (!(access & ACCESS_NON_READABLE)) { - if (is_buffer ? !state->buffers_read : !state->images_read) - access |= ACCESS_NON_READABLE; - else if ((access & ACCESS_RESTRICT) && !_mesa_set_search(state->vars_read, var)) - access |= ACCESS_NON_READABLE; - } - - bool changed = var->data.access != access; - var->data.access = access; - return changed; -} - -static bool -update_access(struct access_state *state, nir_intrinsic_instr *instr, bool is_buffer, bool is_global) -{ - enum gl_access_qualifier access = nir_intrinsic_access(instr); - - bool is_memory_readonly = access & ACCESS_NON_WRITEABLE; - bool is_memory_writeonly = access & ACCESS_NON_READABLE; - - if (instr->intrinsic != nir_intrinsic_bindless_image_load && - instr->intrinsic != nir_intrinsic_bindless_image_store && - instr->intrinsic != nir_intrinsic_bindless_image_sparse_load && - !is_global) { - const nir_variable *var = nir_get_binding_variable( - state->shader, nir_chase_binding(instr->src[0])); - is_memory_readonly |= var && (var->data.access & ACCESS_NON_WRITEABLE); - is_memory_writeonly |= var && (var->data.access & ACCESS_NON_READABLE); - } - - if (is_global) { - is_memory_readonly |= !state->buffers_written && !state->images_written; - is_memory_writeonly |= !state->buffers_read && !state->images_read; - } else { - is_memory_readonly |= is_buffer ? !state->buffers_written : !state->images_written; - is_memory_writeonly |= is_buffer ? !state->buffers_read : !state->images_read; - } - - if (is_memory_readonly) - access |= ACCESS_NON_WRITEABLE; - if (is_memory_writeonly) - access |= ACCESS_NON_READABLE; - if (!(access & ACCESS_VOLATILE) && is_memory_readonly) - access |= ACCESS_CAN_REORDER; - - bool progress = nir_intrinsic_access(instr) != access; - nir_intrinsic_set_access(instr, access); - return progress; -} - -static bool -process_intrinsic(struct access_state *state, nir_intrinsic_instr *instr) -{ - switch (instr->intrinsic) { - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_bindless_image_sparse_load: - return update_access(state, instr, nir_intrinsic_image_dim(instr) == GLSL_SAMPLER_DIM_BUF, - false); - - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: { - if (nir_deref_mode_is(nir_src_as_deref(instr->src[0]), nir_var_mem_global)) - return update_access(state, instr, false, true); - else if (nir_deref_mode_is(nir_src_as_deref(instr->src[0]), nir_var_mem_ssbo)) - return update_access(state, instr, true, false); - else - return false; - } - - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_sparse_load: { - nir_variable *var = nir_intrinsic_get_var(instr, 0); - - bool is_buffer = - glsl_get_sampler_dim(glsl_without_array(var->type)) == GLSL_SAMPLER_DIM_BUF; - - return update_access(state, instr, is_buffer, false); - } - - default: - return false; - } -} - -static bool -opt_access_impl(struct access_state *state, - nir_function_impl *impl) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_intrinsic) - progress |= process_intrinsic(state, - nir_instr_as_intrinsic(instr)); - } - } - - if (progress) { - nir_metadata_preserve(impl, - nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs | - nir_metadata_loop_analysis); - } - - - return progress; -} - -bool -nir_opt_access(nir_shader *shader, const nir_opt_access_options *options) -{ - struct access_state state = { - .shader = shader, - .vars_written = _mesa_pointer_set_create(NULL), - .vars_read = _mesa_pointer_set_create(NULL), - }; - - bool var_progress = false; - bool progress = false; - - nir_foreach_function(func, shader) { - if (func->impl) { - nir_foreach_block(block, func->impl) { - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_intrinsic) - gather_intrinsic(&state, nir_instr_as_intrinsic(instr)); - } - } - } - } - - /* In Vulkan, buffers and images can alias. */ - if (options->is_vulkan) { - state.buffers_written |= state.images_written; - state.images_written |= state.buffers_written; - state.buffers_read |= state.images_read; - state.images_read |= state.buffers_read; - } - - nir_foreach_variable_with_modes(var, shader, nir_var_uniform | - nir_var_mem_ubo | - nir_var_mem_ssbo | - nir_var_image) - var_progress |= process_variable(&state, var); - - nir_foreach_function(func, shader) { - if (func->impl) { - progress |= opt_access_impl(&state, func->impl); - - /* If we make a change to the uniforms, update all the impls. */ - if (var_progress) { - nir_metadata_preserve(func->impl, - nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs | - nir_metadata_loop_analysis); - } - } - } - - progress |= var_progress; - - _mesa_set_destroy(state.vars_read, NULL); - _mesa_set_destroy(state.vars_written, NULL); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_algebraic.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_algebraic.c deleted file mode 100644 index e317828..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_algebraic.c +++ /dev/null @@ -1,1414121 +0,0 @@ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_search.h" -#include "nir_search_helpers.h" - -/* What follows is NIR algebraic transform code for the following 2161 - * transforms: - * ('imul', 'a', '#b(is_pos_power_of_two)') => ('ishl', 'a', ('find_lsb', 'b')) - * ('imul', 'a@8', 128) => ('ishl', 'a', 7) - * ('imul', 'a@16', 32768) => ('ishl', 'a', 15) - * ('imul', 'a@32', 2147483648) => ('ishl', 'a', 31) - * ('imul', 'a@64', 9223372036854775808) => ('ishl', 'a', 63) - * ('imul', 'a', '#b(is_neg_power_of_two)') => ('ineg', ('ishl', 'a', ('find_lsb', ('iabs', 'b')))) - * ('ishl', 'a', '#b') => ('imul', 'a', ('ishl', 1, 'b')) - * ('imul@64', 'a', '#b(is_bitcount2)') => ('iadd', ('ishl', 'a', ('ufind_msb', 'b')), ('ishl', 'a', ('find_lsb', 'b'))) - * ('unpack_64_2x32_split_x', ('imul_2x32_64(is_used_once)', 'a', 'b')) => ('imul', 'a', 'b') - * ('unpack_64_2x32_split_x', ('umul_2x32_64(is_used_once)', 'a', 'b')) => ('imul', 'a', 'b') - * ('imul_2x32_64', 'a', 'b') => ('pack_64_2x32_split', ('imul', 'a', 'b'), ('imul_high', 'a', 'b')) - * ('umul_2x32_64', 'a', 'b') => ('pack_64_2x32_split', ('imul', 'a', 'b'), ('umul_high', 'a', 'b')) - * ('udiv', 'a', 1) => a - * ('idiv', 'a', 1) => a - * ('umod', 'a', 1) => 0 - * ('imod', 'a', 1) => 0 - * ('imod', 'a', -1) => 0 - * ('irem', 'a', 1) => 0 - * ('irem', 'a', -1) => 0 - * ('udiv', 'a', '#b(is_pos_power_of_two)') => ('ushr', 'a', ('find_lsb', 'b')) - * ('idiv', 'a', '#b(is_pos_power_of_two)') => ('imul', ('isign', 'a'), ('ushr', ('iabs', 'a'), ('find_lsb', 'b'))) - * ('idiv', 'a', '#b(is_neg_power_of_two)') => ('ineg', ('imul', ('isign', 'a'), ('ushr', ('iabs', 'a'), ('find_lsb', ('iabs', 'b'))))) - * ('umod', 'a', '#b(is_pos_power_of_two)') => ('iand', 'a', ('isub', 'b', 1)) - * ('imod', 'a', '#b(is_pos_power_of_two)') => ('iand', 'a', ('isub', 'b', 1)) - * ('imod', 'a', '#b(is_neg_power_of_two)') => ('bcsel', ('ieq', ('ior', 'a', 'b'), 'b'), 0, ('ior', 'a', 'b')) - * ('irem', 'a', '#b(is_pos_power_of_two)') => ('isub', 'a', ('iand', ('bcsel', ('ilt', 'a', 0), ('iadd', 'a', ('isub', 'b', 1)), 'a'), ('ineg', 'b'))) - * ('irem', 'a', '#b(is_neg_power_of_two)') => ('irem', 'a', ('iabs', 'b')) - * ('~fmul', ('fsign', 'a'), ('ffloor', ('fadd', ('fabs', 'a'), 0.5))) => ('ftrunc', ('fadd', 'a', ('fmul', ('fsign', 'a'), 0.5))) - * ('~fneg', ('fneg', 'a')) => a - * ('ineg', ('ineg', 'a')) => a - * ('fabs', ('fneg', 'a')) => ('fabs', 'a') - * ('fabs', ('u2f', 'a')) => ('u2f', 'a') - * ('iabs', ('iabs', 'a')) => ('iabs', 'a') - * ('iabs', ('ineg', 'a')) => ('iabs', 'a') - * ('~fadd', 'a', 0.0) => a - * ('fadd(is_only_used_as_float)', 'a@16', 0.0) => a - * ('fadd(is_only_used_as_float)', 'a@32', 0.0) => a - * ('iadd', 'a', 0) => a - * ('iadd_sat', 'a', 0) => a - * ('isub_sat', 'a', 0) => a - * ('uadd_sat', 'a', 0) => a - * ('usub_sat', 'a', 0) => a - * ('usadd_4x8_vc4', 'a', 0) => a - * ('usadd_4x8_vc4', 'a', -1) => -1 - * ('~fadd', ('fmul', 'a', 'b'), ('fmul', 'a', 'c')) => ('fmul', 'a', ('fadd', 'b', 'c')) - * ('~fadd', ('fmulz', 'a', 'b'), ('fmulz', 'a', 'c')) => ('fmulz', 'a', ('fadd', 'b', 'c')) - * ('~ffma', 'a', 'b', ('ffma(is_used_once)', 'a', 'c', 'd')) => ('ffma', 'a', ('fadd', 'b', 'c'), 'd') - * ('~ffma', 'a', 'b', ('fmul(is_used_once)', 'a', 'c')) => ('fmul', 'a', ('fadd', 'b', 'c')) - * ('~fadd', ('fmul(is_used_once)', 'a', 'b'), ('ffma(is_used_once)', 'a', 'c', 'd')) => ('ffma', 'a', ('fadd', 'b', 'c'), 'd') - * ('~ffma', 'a', ('fmul(is_used_once)', 'b', 'c'), ('fmul(is_used_once)', 'b', 'd')) => ('fmul', 'b', ('ffma', 'a', 'c', 'd')) - * ('~ffmaz', 'a', 'b', ('ffmaz(is_used_once)', 'a', 'c', 'd')) => ('ffmaz', 'a', ('fadd', 'b', 'c'), 'd') - * ('~ffmaz', 'a', 'b', ('fmulz(is_used_once)', 'a', 'c')) => ('fmulz', 'a', ('fadd', 'b', 'c')) - * ('~fadd', ('fmulz(is_used_once)', 'a', 'b'), ('ffmaz(is_used_once)', 'a', 'c', 'd')) => ('ffmaz', 'a', ('fadd', 'b', 'c'), 'd') - * ('~ffmaz', 'a', ('fmulz(is_used_once)', 'b', 'c'), ('fmulz(is_used_once)', 'b', 'd')) => ('fmulz', 'b', ('ffmaz', 'a', 'c', 'd')) - * ('iadd', ('imul', 'a', 'b'), ('imul', 'a', 'c')) => ('imul', 'a', ('iadd', 'b', 'c')) - * ('iadd', ('ishl', 'b', 'a'), ('ishl', 'c', 'a')) => ('ishl', ('iadd', 'b', 'c'), 'a') - * ('iand', ('ior', 'a', 'b'), ('ior', 'a', 'c')) => ('ior', 'a', ('iand', 'b', 'c')) - * ('ior', ('iand', 'a', 'b'), ('iand', 'a', 'c')) => ('iand', 'a', ('ior', 'b', 'c')) - * ('ieq', ('iand', 'a', '#b(is_pos_power_of_two)'), 'b') => ('ine', ('iand', 'a', 'b'), 0) - * ('ine', ('iand', 'a', '#b(is_pos_power_of_two)'), 'b') => ('ieq', ('iand', 'a', 'b'), 0) - * ('ieq', ('ushr(is_used_once)', 'a', '#b'), 0) => ('ult', 'a', ('ishl', 1, 'b')) - * ('ine', ('ushr(is_used_once)', 'a', '#b'), 0) => ('uge', 'a', ('ishl', 1, 'b')) - * ('~fadd', ('fneg', 'a'), 'a') => 0.0 - * ('iadd', ('ineg', 'a'), 'a') => 0 - * ('iadd', ('ineg', 'a'), ('iadd', 'a', 'b')) => b - * ('iadd', 'a', ('iadd', ('ineg', 'a'), 'b')) => b - * ('~fadd', ('fneg', 'a'), ('fadd', 'a', 'b')) => b - * ('~fadd', 'a', ('fadd', ('fneg', 'a'), 'b')) => b - * ('fadd', ('fsat', 'a'), ('fsat', ('fneg', 'a'))) => ('fsat', ('fabs', 'a')) - * ('~fmul', 'a', 0.0) => 0.0 - * ('fmul', 'a@16', 0.0) => 0.0 - * ('fmul', 'a@32', 0.0) => 0.0 - * ('fmulz', 'a', 0.0) => 0.0 - * ('fmulz', 'a', 'b(is_finite_not_zero)') => ('fmul', 'a', 'b') - * ('fmulz', 'a(is_finite)', 'b(is_finite)') => ('fmul', 'a', 'b') - * ('fmulz', 'a', 'a') => ('fmul', 'a', 'a') - * ('ffmaz', 'a', 'b(is_finite_not_zero)', 'c') => ('ffma', 'a', 'b', 'c') - * ('ffmaz', 'a(is_finite)', 'b(is_finite)', 'c') => ('ffma', 'a', 'b', 'c') - * ('ffmaz', 'a', 'a', 'b') => ('ffma', 'a', 'a', 'b') - * ('imul', 'a', 0) => 0 - * ('umul_unorm_4x8_vc4', 'a', 0) => 0 - * ('umul_unorm_4x8_vc4', 'a', -1) => a - * ('~fmul', 'a', 1.0) => a - * ('~fmulz', 'a', 1.0) => a - * ('fmul(is_only_used_as_float)', 'a', 1.0) => a - * ('imul', 'a', 1) => a - * ('fmul', 'a', -1.0) => ('fneg', 'a') - * ('imul', 'a', -1) => ('ineg', 'a') - * ('fmul', ('fsign', 'a'), ('fmul', 'a', 'a')) => ('fmul', ('fabs', 'a'), 'a') - * ('fmul', ('fmul', ('fsign', 'a'), 'a'), 'a') => ('fmul', ('fabs', 'a'), 'a') - * ('~ffma', 0.0, 'a', 'b') => b - * ('ffma@16(is_only_used_as_float)', 0.0, 'a', 'b') => b - * ('ffma@32(is_only_used_as_float)', 0.0, 'a', 'b') => b - * ('ffmaz', 0.0, 'a', 'b') => ('fadd', 0.0, 'b') - * ('~ffma', 'a', 'b', 0.0) => ('fmul', 'a', 'b') - * ('ffma@16', 'a', 'b', 0.0) => ('fmul', 'a', 'b') - * ('ffma@32', 'a', 'b', 0.0) => ('fmul', 'a', 'b') - * ('ffmaz', 'a', 'b', 0.0) => ('fmulz', 'a', 'b') - * ('ffma', 1.0, 'a', 'b') => ('fadd', 'a', 'b') - * ('ffmaz', 1.0, 'a', 'b') => ('fadd', 'a', 'b') - * ('ffma', -1.0, 'a', 'b') => ('fadd', ('fneg', 'a'), 'b') - * ('ffmaz', -1.0, 'a', 'b') => ('fadd', ('fneg', 'a'), 'b') - * ('~ffma', '#a', '#b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') - * ('~ffmaz', '#a', '#b', 'c') => ('fadd', ('fmulz', 'a', 'b'), 'c') - * ('~flrp', 'a', 'b', 0.0) => a - * ('~flrp', 'a', 'b', 1.0) => b - * ('~flrp', 'a', 'a', 'b') => a - * ('~flrp', 0.0, 'a', 'b') => ('fmul', 'a', 'b') - * ('~flrp', 'a', ('fadd(is_used_once)', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') - * ('sdot_4x8_iadd', 'a', 0, 'b') => b - * ('udot_4x8_uadd', 'a', 0, 'b') => b - * ('sdot_4x8_iadd_sat', 'a', 0, 'b') => b - * ('udot_4x8_uadd_sat', 'a', 0, 'b') => b - * ('sdot_2x16_iadd', 'a', 0, 'b') => b - * ('udot_2x16_uadd', 'a', 0, 'b') => b - * ('sdot_2x16_iadd_sat', 'a', 0, 'b') => b - * ('udot_2x16_uadd_sat', 'a', 0, 'b') => b - * ('sudot_4x8_iadd', 'a', 0, 'b') => b - * ('sudot_4x8_iadd', 0, 'a', 'b') => b - * ('sudot_4x8_iadd_sat', 'a', 0, 'b') => b - * ('sudot_4x8_iadd_sat', 0, 'a', 'b') => b - * ('iadd', ('sdot_4x8_iadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('sdot_4x8_iadd', 'a', 'b', ('iadd', 'c', 'd')) - * ('iadd', ('udot_4x8_uadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('udot_4x8_uadd', 'a', 'b', ('iadd', 'c', 'd')) - * ('iadd', ('sudot_4x8_iadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('sudot_4x8_iadd', 'a', 'b', ('iadd', 'c', 'd')) - * ('iadd', ('sdot_2x16_iadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('sdot_2x16_iadd', 'a', 'b', ('iadd', 'c', 'd')) - * ('iadd', ('udot_2x16_uadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('udot_2x16_uadd', 'a', 'b', ('iadd', 'c', 'd')) - * ('iadd', ('sdot_4x8_iadd', 'a(is_not_const)', 'b', 0), 'c') => ('sdot_4x8_iadd', 'a', 'b', 'c') - * ('iadd', ('udot_4x8_uadd', 'a(is_not_const)', 'b', 0), 'c') => ('udot_4x8_uadd', 'a', 'b', 'c') - * ('iadd', ('sudot_4x8_iadd', 'a(is_not_const)', 'b', 0), 'c') => ('sudot_4x8_iadd', 'a', 'b', 'c') - * ('iadd', ('sudot_4x8_iadd', 'a', 'b(is_not_const)', 0), 'c') => ('sudot_4x8_iadd', 'a', 'b', 'c') - * ('iadd', ('sdot_2x16_iadd', 'a(is_not_const)', 'b', 0), 'c') => ('sdot_2x16_iadd', 'a', 'b', 'c') - * ('iadd', ('udot_2x16_uadd', 'a(is_not_const)', 'b', 0), 'c') => ('udot_2x16_uadd', 'a', 'b', 'c') - * ('sdot_4x8_iadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('sdot_4x8_iadd', 'a', 'b', 0), 'c') - * ('udot_4x8_uadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('udot_4x8_uadd', 'a', 'b', 0), 'c') - * ('sudot_4x8_iadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('sudot_4x8_iadd', 'a', 'b', 0), 'c') - * ('sdot_2x16_iadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('sdot_2x16_iadd', 'a', 'b', 0), 'c') - * ('udot_2x16_uadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('udot_2x16_uadd', 'a', 'b', 0), 'c') - * ('sdot_4x8_iadd_sat', '#a', '#b', 'c(is_not_const)') => ('iadd_sat', ('sdot_4x8_iadd', 'a', 'b', 0), 'c') - * ('udot_4x8_uadd_sat', '#a', '#b', 'c(is_not_const)') => ('uadd_sat', ('udot_4x8_uadd', 'a', 'b', 0), 'c') - * ('sudot_4x8_iadd_sat', '#a', '#b', 'c(is_not_const)') => ('iadd_sat', ('sudot_4x8_iadd', 'a', 'b', 0), 'c') - * ('sdot_2x16_iadd_sat', '#a', '#b', 'c(is_not_const)') => ('iadd_sat', ('sdot_2x16_iadd', 'a', 'b', 0), 'c') - * ('udot_2x16_uadd_sat', '#a', '#b', 'c(is_not_const)') => ('uadd_sat', ('udot_2x16_uadd', 'a', 'b', 0), 'c') - * ('fmul@32', ('bcsel', ('feq', 'b', 0.0, 'ignore_exact'), 0.0, 'a'), ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, 'b')) => ('fmulz', 'a', 'b') - * ('fmul@32', 'a', ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, '#b(is_not_const_zero)')) => ('fmulz', 'a', 'b') - * ('ffma@32', ('bcsel', ('feq', 'b', 0.0, 'ignore_exact'), 0.0, 'a'), ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, 'b'), 'c') => ('ffmaz', 'a', 'b', 'c') - * ('ffma@32', 'a', ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, '#b(is_not_const_zero)'), 'c') => ('ffmaz', 'a', 'b', 'c') - * ('bcsel', ('feq', 'b', 0.0, 'ignore_exact'), 1.0, ('fexp2', ('fmul@32', 'a', 'b'))) => ('fexp2', ('fmulz', 'a', 'b')) - * ('sdot_4x8_iadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_i8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_i8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_i8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_i8', 'b', 3)))), 'c') - * ('udot_4x8_uadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('iadd', ('imul', ('extract_u8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_u8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_u8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_u8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') - * ('sudot_4x8_iadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') - * ('sdot_2x16_iadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('imul', ('extract_i16', 'a', 0), ('extract_i16', 'b', 0)), ('imul', ('extract_i16', 'a', 1), ('extract_i16', 'b', 1))), 'c') - * ('udot_2x16_uadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('imul', ('extract_u16', 'a', 0), ('extract_u16', 'b', 0)), ('imul', ('extract_u16', 'a', 1), ('extract_u16', 'b', 1))), 'c') - * ('udot_4x8_uadd_sat', 'a', 'b', '#c(is_ult_0xfffc07fc)') => ('udot_4x8_uadd', 'a', 'b', 'c') - * ('udot_4x8_uadd_sat', 'a', 'b', 'c') => ('uadd_sat', ('iadd', ('iadd', ('imul', ('extract_u8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_u8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_u8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_u8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') - * ('sdot_4x8_iadd_sat', 'a', 'b', 'c') => ('iadd_sat', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_i8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_i8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_i8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_i8', 'b', 3)))), 'c') - * ('sudot_4x8_iadd_sat', 'a', 'b', 'c') => ('iadd_sat', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') - * ('udot_2x16_uadd_sat', 'a', 'b', 'c') => ('uadd_sat', ('iadd', ('imul', ('extract_u16', 'a', 0), ('extract_u16', 'b', 0)), ('imul', ('extract_u16', 'a', 1), ('extract_u16', 'b', 1))), 'c') - * ('sdot_2x16_iadd_sat', 'a', 'b', 'c') => ('iadd_sat', ('iadd', ('imul', ('extract_i16', 'a', 0), ('extract_i16', 'b', 0)), ('imul', ('extract_i16', 'a', 1), ('extract_i16', 'b', 1))), 'c') - * ('~flrp@16', 'a', 'b', ('b2f', 'c@1')) => ('bcsel', 'c', 'b', 'a') - * ('~flrp@16', 'a', ('fadd', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') - * ('~flrp@16', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') - * ('~flrp@16', 'a', ('fmul(is_used_once)', 'a', 'b'), 'c') => ('fmul', ('flrp', 1.0, 'b', 'c'), 'a') - * ('~fadd@16', ('fmul', 'a', ('fadd', 1.0, ('fneg', 'c'))), ('fmul', 'b', 'c')) => ('flrp', 'a', 'b', 'c') - * ('~fadd@16', ('fmul', 'a', ('fsat', ('fadd', 1.0, ('fneg', 'c')))), ('fmul', 'b', ('fsat', 'c'))) => ('flrp', 'a', 'b', ('fsat', 'c')) - * ('~fadd@16', 'a', ('fmul', 'c', ('fadd', 'b', ('fneg', 'a')))) => ('flrp', 'a', 'b', 'c') - * ('~fadd@16', ('fmul', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1')))), ('fmul', 'b', ('b2f', 'c'))) => ('bcsel', 'c', 'b', 'a') - * ('~fadd@16', 'a', ('fmul', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')))) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@16', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1'))), ('fmul', 'b', ('b2f', 'c@1'))) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@16', 'b', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), ('b2f', 'c@1'), 'a')) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@16', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')), 'a') => ('bcsel', 'c', 'b', 'a') - * ('~ffma@16', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), 'b', 'd'), ('fmul', 'a', 'b')) => ('bcsel', 'c', 'd', ('fmul', 'a', 'b')) - * ('~fadd@16', 1.0, ('fneg', ('fmul', ('fadd', 1.0, ('fneg', 'a')), ('fadd', 1.0, ('fneg', 'b'))))) => ('flrp', 'b', 1.0, 'a') - * ('~flrp@32', 'a', 'b', ('b2f', 'c@1')) => ('bcsel', 'c', 'b', 'a') - * ('~flrp@32', 'a', ('fadd', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') - * ('~flrp@32', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') - * ('~flrp@32', 'a', ('fmul(is_used_once)', 'a', 'b'), 'c') => ('fmul', ('flrp', 1.0, 'b', 'c'), 'a') - * ('~fadd@32', ('fmul', 'a', ('fadd', 1.0, ('fneg', 'c'))), ('fmul', 'b', 'c')) => ('flrp', 'a', 'b', 'c') - * ('~fadd@32', ('fmul', 'a', ('fsat', ('fadd', 1.0, ('fneg', 'c')))), ('fmul', 'b', ('fsat', 'c'))) => ('flrp', 'a', 'b', ('fsat', 'c')) - * ('~fadd@32', 'a', ('fmul', 'c', ('fadd', 'b', ('fneg', 'a')))) => ('flrp', 'a', 'b', 'c') - * ('~fadd@32', ('fmul', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1')))), ('fmul', 'b', ('b2f', 'c'))) => ('bcsel', 'c', 'b', 'a') - * ('~fadd@32', 'a', ('fmul', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')))) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@32', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1'))), ('fmul', 'b', ('b2f', 'c@1'))) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@32', 'b', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), ('b2f', 'c@1'), 'a')) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@32', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')), 'a') => ('bcsel', 'c', 'b', 'a') - * ('~ffma@32', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), 'b', 'd'), ('fmul', 'a', 'b')) => ('bcsel', 'c', 'd', ('fmul', 'a', 'b')) - * ('~fadd@32', 1.0, ('fneg', ('fmul', ('fadd', 1.0, ('fneg', 'a')), ('fadd', 1.0, ('fneg', 'b'))))) => ('flrp', 'b', 1.0, 'a') - * ('~flrp@64', 'a', 'b', ('b2f', 'c@1')) => ('bcsel', 'c', 'b', 'a') - * ('~flrp@64', 'a', ('fadd', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') - * ('~flrp@64', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') - * ('~flrp@64', 'a', ('fmul(is_used_once)', 'a', 'b'), 'c') => ('fmul', ('flrp', 1.0, 'b', 'c'), 'a') - * ('~fadd@64', ('fmul', 'a', ('fadd', 1.0, ('fneg', 'c'))), ('fmul', 'b', 'c')) => ('flrp', 'a', 'b', 'c') - * ('~fadd@64', ('fmul', 'a', ('fsat', ('fadd', 1.0, ('fneg', 'c')))), ('fmul', 'b', ('fsat', 'c'))) => ('flrp', 'a', 'b', ('fsat', 'c')) - * ('~fadd@64', 'a', ('fmul', 'c', ('fadd', 'b', ('fneg', 'a')))) => ('flrp', 'a', 'b', 'c') - * ('~fadd@64', ('fmul', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1')))), ('fmul', 'b', ('b2f', 'c'))) => ('bcsel', 'c', 'b', 'a') - * ('~fadd@64', 'a', ('fmul', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')))) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@64', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1'))), ('fmul', 'b', ('b2f', 'c@1'))) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@64', 'b', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), ('b2f', 'c@1'), 'a')) => ('bcsel', 'c', 'b', 'a') - * ('~ffma@64', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')), 'a') => ('bcsel', 'c', 'b', 'a') - * ('~ffma@64', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), 'b', 'd'), ('fmul', 'a', 'b')) => ('bcsel', 'c', 'd', ('fmul', 'a', 'b')) - * ('~fadd@64', 1.0, ('fneg', ('fmul', ('fadd', 1.0, ('fneg', 'a')), ('fadd', 1.0, ('fneg', 'b'))))) => ('flrp', 'b', 1.0, 'a') - * ('~flrp', ('fmul(is_used_once)', 'a', 'b'), ('fmul(is_used_once)', 'a', 'c'), 'd') => ('fmul', ('flrp', 'b', 'c', 'd'), 'a') - * ('~flrp', 'a', 0.0, 'c') => ('fadd', ('fmul', ('fneg', 'a'), 'c'), 'a') - * ('ftrunc@16', 'a') => ('bcsel', ('flt', 'a', 0.0), ('fneg', ('ffloor', ('fabs', 'a'))), ('ffloor', ('fabs', 'a'))) - * ('ftrunc@32', 'a') => ('bcsel', ('flt', 'a', 0.0), ('fneg', ('ffloor', ('fabs', 'a'))), ('ffloor', ('fabs', 'a'))) - * ('ftrunc@64', 'a') => ('bcsel', ('flt', 'a', 0.0), ('fneg', ('ffloor', ('fabs', 'a'))), ('ffloor', ('fabs', 'a'))) - * ('ffloor@16', 'a') => ('fsub', 'a', ('ffract', 'a')) - * ('ffloor@32', 'a') => ('fsub', 'a', ('ffract', 'a')) - * ('ffloor@64', 'a') => ('fsub', 'a', ('ffract', 'a')) - * ('fadd@16', 'a', ('fadd@16', 'b', ('fneg', ('ffract', 'a')))) => ('fadd@16', 'b', ('ffloor', 'a')) - * ('fadd@32', 'a', ('fadd@32', 'b', ('fneg', ('ffract', 'a')))) => ('fadd@32', 'b', ('ffloor', 'a')) - * ('fadd@64', 'a', ('fadd@64', 'b', ('fneg', ('ffract', 'a')))) => ('fadd@64', 'b', ('ffloor', 'a')) - * ('fadd@16', 'a', ('fneg', ('ffract', 'a'))) => ('ffloor', 'a') - * ('fadd@32', 'a', ('fneg', ('ffract', 'a'))) => ('ffloor', 'a') - * ('fadd@64', 'a', ('fneg', ('ffract', 'a'))) => ('ffloor', 'a') - * ('ffract@16', 'a') => ('fsub', 'a', ('ffloor', 'a')) - * ('ffract@32', 'a') => ('fsub', 'a', ('ffloor', 'a')) - * ('ffract@64', 'a') => ('fsub', 'a', ('ffloor', 'a')) - * ('fceil', 'a') => ('fneg', ('ffloor', ('fneg', 'a'))) - * ('ffma@16', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') - * ('ffma@32', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') - * ('ffma@64', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') - * ('ffmaz', 'a', 'b', 'c') => ('fadd', ('fmulz', 'a', 'b'), 'c') - * ('~ffma@16', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') - * ('~ffma@32', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') - * ('~ffma@64', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') - * ('~ffmaz', 'a', 'b', 'c') => ('fadd', ('fmulz', 'a', 'b'), 'c') - * ('~fmul', ('fadd', ('iand', ('ineg', ('b2i', 'a@bool')), ('fmul', 'b', 'c')), '#d'), '#e') => ('bcsel', 'a', ('fmul', ('fadd', ('fmul', 'b', 'c'), 'd'), 'e'), ('fmul', 'd', 'e')) - * ('fdph', 'a', 'b') => ('fdot4', ('vec4', 'a.x', 'a.y', 'a.z', 1.0), 'b') - * ('fdot4', 'a', 0.0) => 0.0 - * ('fdot3', 'a', 0.0) => 0.0 - * ('fdot2', 'a', 0.0) => 0.0 - * ('fdot4', ('vec4', 'a', 'b', 'c', 1.0), 'd') => ('fdph', ('vec3', 'a', 'b', 'c'), 'd') - * ('fdot4', ('vec4', 'a', 0.0, 0.0, 0.0), 'b') => ('fmul', 'a', 'b') - * ('fdot4', ('vec4', 'a', 'b', 0.0, 0.0), 'c') => ('fdot2', ('vec2', 'a', 'b'), 'c') - * ('fdot4', ('vec4', 'a', 'b', 'c', 0.0), 'd') => ('fdot3', ('vec3', 'a', 'b', 'c'), 'd') - * ('fdot3', ('vec3', 'a', 0.0, 0.0), 'b') => ('fmul', 'a', 'b') - * ('fdot3', ('vec3', 'a', 'b', 0.0), 'c') => ('fdot2', ('vec2', 'a', 'b'), 'c') - * ('fdot2', ('vec2', 'a', 0.0), 'b') => ('fmul', 'a', 'b') - * ('fdot2', 'a', 1.0) => ('fadd', 'a.x', 'a.y') - * ('fdot2', 'a', 'b') => ('fsum2', ('fmul', 'a', 'b')) - * ('fdot3', 'a', 'b') => ('fsum3', ('fmul', 'a', 'b')) - * ('fdot4', 'a', 'b') => ('fsum4', ('fmul', 'a', 'b')) - * ('fsum2', 'a') => ('fadd', 'a.x', 'a.y') - * ('~fadd', ('fneg(is_used_once)', ('fsat(is_used_once)', 'a(is_not_fmul)')), 1.0) => ('fsat', ('fadd', 1.0, ('fneg', 'a'))) - * ('ishl', ('iadd', ('imul', 'a', '#b'), '#c'), '#d') => ('iadd', ('imul', 'a', ('ishl', 'b', 'd')), ('ishl', 'c', 'd')) - * ('ishl', ('imul', 'a', '#b'), '#c') => ('imul', 'a', ('ishl', 'b', 'c')) - * ('ishl@8', ('ishl@8', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 7), ('iand', 'c', 7)), 8), ('ishl@8', 'a', ('iadd', 'b', 'c')), 0) - * ('ushr@8', ('ushr@8', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 7), ('iand', 'c', 7)), 8), ('ushr@8', 'a', ('iadd', 'b', 'c')), 0) - * ('ishr@8', ('ishr@8', 'a', '#b'), '#c') => ('ishr@8', 'a', ('imin', ('iadd', ('iand', 'b', 7), ('iand', 'c', 7)), 7)) - * ('ishl@16', ('ishl@16', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 15), ('iand', 'c', 15)), 16), ('ishl@16', 'a', ('iadd', 'b', 'c')), 0) - * ('ushr@16', ('ushr@16', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 15), ('iand', 'c', 15)), 16), ('ushr@16', 'a', ('iadd', 'b', 'c')), 0) - * ('ishr@16', ('ishr@16', 'a', '#b'), '#c') => ('ishr@16', 'a', ('imin', ('iadd', ('iand', 'b', 15), ('iand', 'c', 15)), 15)) - * ('ishl@32', ('ishl@32', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 31), ('iand', 'c', 31)), 32), ('ishl@32', 'a', ('iadd', 'b', 'c')), 0) - * ('ushr@32', ('ushr@32', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 31), ('iand', 'c', 31)), 32), ('ushr@32', 'a', ('iadd', 'b', 'c')), 0) - * ('ishr@32', ('ishr@32', 'a', '#b'), '#c') => ('ishr@32', 'a', ('imin', ('iadd', ('iand', 'b', 31), ('iand', 'c', 31)), 31)) - * ('ishl@64', ('ishl@64', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 63), ('iand', 'c', 63)), 64), ('ishl@64', 'a', ('iadd', 'b', 'c')), 0) - * ('ushr@64', ('ushr@64', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 63), ('iand', 'c', 63)), 64), ('ushr@64', 'a', ('iadd', 'b', 'c')), 0) - * ('ishr@64', ('ishr@64', 'a', '#b'), '#c') => ('ishr@64', 'a', ('imin', ('iadd', ('iand', 'b', 63), ('iand', 'c', 63)), 63)) - * ('ishl', ('ushr', 'a@8', '#b'), 'b') => ('iand', 'a', ('ishl', 255, 'b')) - * ('ishl', ('ishr', 'a@8', '#b'), 'b') => ('iand', 'a', ('ishl', 255, 'b')) - * ('ushr', ('ishl', 'a@8', '#b'), 'b') => ('iand', 'a', ('ushr', 255, 'b')) - * ('ishl', ('ushr', 'a@16', '#b'), 'b') => ('iand', 'a', ('ishl', 65535, 'b')) - * ('ishl', ('ishr', 'a@16', '#b'), 'b') => ('iand', 'a', ('ishl', 65535, 'b')) - * ('ushr', ('ishl', 'a@16', '#b'), 'b') => ('iand', 'a', ('ushr', 65535, 'b')) - * ('ishl', ('ushr', 'a@32', '#b'), 'b') => ('iand', 'a', ('ishl', 4294967295, 'b')) - * ('ishl', ('ishr', 'a@32', '#b'), 'b') => ('iand', 'a', ('ishl', 4294967295, 'b')) - * ('ushr', ('ishl', 'a@32', '#b'), 'b') => ('iand', 'a', ('ushr', 4294967295, 'b')) - * ('ishl', ('ushr', 'a@64', '#b'), 'b') => ('iand', 'a', ('ishl', 18446744073709551615, 'b')) - * ('ishl', ('ishr', 'a@64', '#b'), 'b') => ('iand', 'a', ('ishl', 18446744073709551615, 'b')) - * ('ushr', ('ishl', 'a@64', '#b'), 'b') => ('iand', 'a', ('ushr', 18446744073709551615, 'b')) - * ('iand', ('ishl', 'a@32', '#b(is_first_5_bits_uge_2)'), -4) => ('ishl', 'a', 'b') - * ('iand', ('imul', 'a', '#b(is_unsigned_multiple_of_4)'), -4) => ('imul', 'a', 'b') - * ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_2)'), 4294967294) => ('iadd', ('iand', 'a', 4294967294), 'b') - * ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_4)'), 4294967292) => ('iadd', ('iand', 'a', 4294967292), 'b') - * ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_8)'), 4294967288) => ('iadd', ('iand', 'a', 4294967288), 'b') - * ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_16)'), 4294967280) => ('iadd', ('iand', 'a', 4294967280), 'b') - * ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_32)'), 4294967264) => ('iadd', ('iand', 'a', 4294967264), 'b') - * ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_64)'), 4294967232) => ('iadd', ('iand', 'a', 4294967232), 'b') - * ('ishl@32', ('iand', 'a@32', 2147483647), 1) => ('ishl', 'a', 1) - * ('iand', ('ishl', 'a@32', 1), 4294967294) => ('ishl', 'a', 1) - * ('iand', ('ushr', 'a@32', 1), 2147483647) => ('ushr', 'a', 1) - * ('ishl@32', ('iand', 'a@32', 1073741823), 2) => ('ishl', 'a', 2) - * ('iand', ('ishl', 'a@32', 2), 4294967292) => ('ishl', 'a', 2) - * ('iand', ('ushr', 'a@32', 2), 1073741823) => ('ushr', 'a', 2) - * ('ishl@32', ('iand', 'a@32', 65535), 16) => ('ishl', 'a', 16) - * ('iand', ('ishl', 'a@32', 16), 4294901760) => ('ishl', 'a', 16) - * ('iand', ('ushr', 'a@32', 16), 65535) => ('ushr', 'a', 16) - * ('ishl@32', ('iand', 'a@32', 255), 24) => ('ishl', 'a', 24) - * ('iand', ('ishl', 'a@32', 24), 4278190080) => ('ishl', 'a', 24) - * ('iand', ('ushr', 'a@32', 24), 255) => ('ushr', 'a', 24) - * ('ishl', ('iadd', 'a', '#b'), '#c') => ('iadd', ('ishl', 'a', 'c'), ('ishl', 'b', 'c')) - * ('imul', ('iadd(is_used_once)', 'a', '#b'), '#c') => ('iadd', ('imul', 'a', 'c'), ('imul', 'b', 'c')) - * ('imul', ('iadd(is_used_once)', ('iadd(is_used_once)', 'a', '#b'), 'c'), '#d') => ('iadd', ('imul', ('iadd', 'a', 'c'), 'd'), ('imul', 'b', 'd')) - * ('ishl', ('iadd(is_used_once)', ('iadd(is_used_once)', 'a', '#b'), 'c'), '#d') => ('iadd', ('ishl', ('iadd', 'a', 'c'), 'd'), ('ishl', 'b', 'd')) - * ('inot', ('flt(is_used_once)', 'a(is_a_number)', 'b(is_a_number)')) => ('fge', 'a', 'b') - * ('inot', ('fge(is_used_once)', 'a(is_a_number)', 'b(is_a_number)')) => ('flt', 'a', 'b') - * ('inot', ('feq(is_used_once)', 'a', 'b')) => ('fneu', 'a', 'b') - * ('inot', ('fneu(is_used_once)', 'a', 'b')) => ('feq', 'a', 'b') - * ('inot', ('ilt(is_used_once)', 'a', 'b')) => ('ige', 'a', 'b') - * ('inot', ('ult(is_used_once)', 'a', 'b')) => ('uge', 'a', 'b') - * ('inot', ('ige(is_used_once)', 'a', 'b')) => ('ilt', 'a', 'b') - * ('inot', ('uge(is_used_once)', 'a', 'b')) => ('ult', 'a', 'b') - * ('inot', ('ieq(is_used_once)', 'a', 'b')) => ('ine', 'a', 'b') - * ('inot', ('ine(is_used_once)', 'a', 'b')) => ('ieq', 'a', 'b') - * ('iand', ('feq', 'a', 'b'), ('fneu', 'a', 'b')) => False - * ('iand', ('flt', 'a', 'b'), ('flt', 'b', 'a')) => False - * ('iand', ('ieq', 'a', 'b'), ('ine', 'a', 'b')) => False - * ('iand', ('ilt', 'a', 'b'), ('ilt', 'b', 'a')) => False - * ('iand', ('ult', 'a', 'b'), ('ult', 'b', 'a')) => False - * ('flt', ('fneg', 'a'), ('fneg', 'b')) => ('flt', 'b', 'a') - * ('fge', ('fneg', 'a'), ('fneg', 'b')) => ('fge', 'b', 'a') - * ('feq', ('fneg', 'a'), ('fneg', 'b')) => ('feq', 'b', 'a') - * ('fneu', ('fneg', 'a'), ('fneg', 'b')) => ('fneu', 'b', 'a') - * ('flt', ('fneg', 'a'), -1.0) => ('flt', 1.0, 'a') - * ('flt', -1.0, ('fneg', 'a')) => ('flt', 'a', 1.0) - * ('fge', ('fneg', 'a'), -1.0) => ('fge', 1.0, 'a') - * ('fge', -1.0, ('fneg', 'a')) => ('fge', 'a', 1.0) - * ('fneu', ('fneg', 'a'), -1.0) => ('fneu', 1.0, 'a') - * ('feq', -1.0, ('fneg', 'a')) => ('feq', 'a', 1.0) - * ('ieq', ('ineg', 'a'), 0) => ('ieq', 'a', 0) - * ('ine', ('ineg', 'a'), 0) => ('ine', 'a', 0) - * ('ieq', ('iabs', 'a'), 0) => ('ieq', 'a', 0) - * ('ine', ('iabs', 'a'), 0) => ('ine', 'a', 0) - * ('flt', '#b(is_gt_0_and_lt_1)', ('fsat(is_used_once)', 'a')) => ('flt', 'b', 'a') - * ('fge', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fge', 'a', 'b') - * ('feq', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('feq', 'a', 'b') - * ('fneu', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fneu', 'a', 'b') - * ('fge', ('fsat(is_used_once)', 'a'), 1.0) => ('fge', 'a', 1.0) - * ('flt', 0.0, ('fsat(is_used_once)', 'a')) => ('flt', 0.0, 'a') - * ('fge', 0.0, ('b2f', 'a@1')) => ('inot', 'a') - * ('fge', ('fneg', ('b2f', 'a@1')), 0.0) => ('inot', 'a') - * ('fneu', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('ior', 'a', 'b') - * ('fneu', ('bcsel', 'a', 1.0, ('b2f', 'b@1')), 0.0) => ('ior', 'a', 'b') - * ('fneu', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))) => ('ior', 'a', 'b') - * ('fneu', ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('iand', 'a', 'b') - * ('fneu', ('bcsel', 'a', ('b2f', 'b@1'), 0.0), 0.0) => ('iand', 'a', 'b') - * ('fneu', ('fadd', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), 0.0) => ('ixor', 'a', 'b') - * ('fneu', ('b2f', 'a@1'), ('b2f', 'b@1')) => ('ixor', 'a', 'b') - * ('fneu', ('fneg', ('b2f', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('ixor', 'a', 'b') - * ('feq', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('inot', ('ior', 'a', 'b')) - * ('feq', ('bcsel', 'a', 1.0, ('b2f', 'b@1')), 0.0) => ('inot', ('ior', 'a', 'b')) - * ('feq', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))) => ('inot', ('ior', 'a', 'b')) - * ('feq', ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('inot', ('iand', 'a', 'b')) - * ('feq', ('bcsel', 'a', ('b2f', 'b@1'), 0.0), 0.0) => ('inot', ('iand', 'a', 'b')) - * ('feq', ('fadd', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), 0.0) => ('ieq', 'a', 'b') - * ('feq', ('b2f', 'a@1'), ('b2f', 'b@1')) => ('ieq', 'a', 'b') - * ('feq', ('fneg', ('b2f', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('ieq', 'a', 'b') - * ('flt', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), 0.0) => ('ior', 'a', 'b') - * ('flt', 0.0, ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))) => ('ior', 'a', 'b') - * ('fge', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), 0.0) => ('inot', ('ior', 'a', 'b')) - * ('fge', 0.0, ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))) => ('inot', ('ior', 'a', 'b')) - * ('flt', 'a', ('fneg', 'a')) => ('flt', 'a', 0.0) - * ('fge', 'a', ('fneg', 'a')) => ('fge', 'a', 0.0) - * ('flt', ('fmin', 'c', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')))), 0.0) => ('ior', ('flt', 'c', 0.0), ('ior', 'a', 'b')) - * ('~flt', ('fadd', 'a', 'b'), 'a') => ('flt', 'b', 0.0) - * ('~fge', ('fadd', 'a', 'b'), 'a') => ('fge', 'b', 0.0) - * ('~feq', ('fadd', 'a', 'b'), 'a') => ('feq', 'b', 0.0) - * ('~fneu', ('fadd', 'a', 'b'), 'a') => ('fneu', 'b', 0.0) - * ('~flt', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('flt', 'a', ('fadd', 'c', ('fneg', 'b'))) - * ('~flt', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('flt', ('fneg', ('fadd', 'c', 'b')), 'a') - * ('~fge', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('fge', 'a', ('fadd', 'c', ('fneg', 'b'))) - * ('~fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('fge', ('fneg', ('fadd', 'c', 'b')), 'a') - * ('~feq', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('feq', 'a', ('fadd', 'c', ('fneg', 'b'))) - * ('~feq', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('feq', ('fneg', ('fadd', 'c', 'b')), 'a') - * ('~fneu', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('fneu', 'a', ('fadd', 'c', ('fneg', 'b'))) - * ('~fneu', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('fneu', ('fneg', ('fadd', 'c', 'b')), 'a') - * ('ieq', ('iadd', 'a', 'b'), 'a') => ('ieq', 'b', 0) - * ('ine', ('iadd', 'a', 'b'), 'a') => ('ine', 'b', 0) - * ('feq', ('b2f', 'a@1'), 0.0) => ('inot', 'a') - * ('fneu', ('b2f', 'a@1'), 0.0) => a - * ('ieq', ('b2i', 'a@1'), 0) => ('inot', 'a') - * ('ine', ('b2i', 'a@1'), 0) => a - * ('fneu', ('u2f', 'a'), 0.0) => ('ine', 'a', 0) - * ('feq', ('u2f', 'a'), 0.0) => ('ieq', 'a', 0) - * ('fge', ('u2f', 'a'), 0.0) => True - * ('fge', 0.0, ('u2f', 'a')) => ('uge', 0, 'a') - * ('flt', ('u2f', 'a'), 0.0) => False - * ('flt', 0.0, ('u2f', 'a')) => ('ult', 0, 'a') - * ('fneu', ('i2f', 'a'), 0.0) => ('ine', 'a', 0) - * ('feq', ('i2f', 'a'), 0.0) => ('ieq', 'a', 0) - * ('fge', ('i2f', 'a'), 0.0) => ('ige', 'a', 0) - * ('fge', 0.0, ('i2f', 'a')) => ('ige', 0, 'a') - * ('flt', ('i2f', 'a'), 0.0) => ('ilt', 'a', 0) - * ('flt', 0.0, ('i2f', 'a')) => ('ilt', 0, 'a') - * ('~flt', 0.0, ('fabs', 'a')) => ('fneu', 'a', 0.0) - * ('~flt', ('fneg', ('fabs', 'a')), 0.0) => ('fneu', 'a', 0.0) - * ('fge', 0.0, ('fabs', 'a')) => ('feq', 'a', 0.0) - * ('fge', ('fneg', ('fabs', 'a')), 0.0) => ('feq', 'a', 0.0) - * ('iand', ('fge', 'a', 0.0), ('fge', 1.0, 'a')) => ('feq', 'a', ('fsat', 'a')) - * ('fmax', ('b2f(is_used_once)', 'a@1'), ('b2f', 'b@1')) => ('b2f', ('ior', 'a', 'b')) - * ('fmax', ('fneg(is_used_once)', ('b2f(is_used_once)', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('fneg', ('b2f', ('iand', 'a', 'b'))) - * ('fmin', ('b2f(is_used_once)', 'a@1'), ('b2f', 'b@1')) => ('b2f', ('iand', 'a', 'b')) - * ('fmin', ('fneg(is_used_once)', ('b2f(is_used_once)', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('fneg', ('b2f', ('ior', 'a', 'b'))) - * ('fmin', ('b2f', 'a@1'), '#b') => ('bcsel', 'a', ('fmin', 'b', 1.0), ('fmin', 'b', 0.0)) - * ('flt', ('fadd(is_used_once)', 'a', ('fneg', 'b')), 0.0) => ('flt', 'a', 'b') - * ('fge', ('fneg', ('fabs', 'a')), 0.0) => ('feq', 'a', 0.0) - * ('~bcsel', ('flt', 'b', 'a'), 'b', 'a') => ('fmin', 'a', 'b') - * ('~bcsel', ('flt', 'a', 'b'), 'b', 'a') => ('fmax', 'a', 'b') - * ('~bcsel', ('fge', 'a', 'b'), 'b', 'a') => ('fmin', 'a', 'b') - * ('~bcsel', ('fge', 'b', 'a'), 'b', 'a') => ('fmax', 'a', 'b') - * ('bcsel', ('ult', 'b', 'a'), 'b', 'a') => ('umin', 'a', 'b') - * ('bcsel', ('ult', 'a', 'b'), 'b', 'a') => ('umax', 'a', 'b') - * ('bcsel', ('uge', 'a', 'b'), 'b', 'a') => ('umin', 'a', 'b') - * ('bcsel', ('uge', 'b', 'a'), 'b', 'a') => ('umax', 'a', 'b') - * ('bcsel', ('ilt', 'b', 'a'), 'b', 'a') => ('imin', 'a', 'b') - * ('bcsel', ('ilt', 'a', 'b'), 'b', 'a') => ('imax', 'a', 'b') - * ('bcsel', ('ige', 'a', 'b'), 'b', 'a') => ('imin', 'a', 'b') - * ('bcsel', ('ige', 'b', 'a'), 'b', 'a') => ('imax', 'a', 'b') - * ('bcsel', ('inot', 'a'), 'b', 'c') => ('bcsel', 'a', 'c', 'b') - * ('bcsel', 'a', ('bcsel', 'a', 'b', 'c'), 'd') => ('bcsel', 'a', 'b', 'd') - * ('bcsel', 'a', 'b', ('bcsel', 'a', 'c', 'd')) => ('bcsel', 'a', 'b', 'd') - * ('bcsel', 'a', ('bcsel', 'b', 'c', 'd'), ('bcsel(is_used_once)', 'b', 'c', 'e')) => ('bcsel', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('bcsel(is_used_once)', 'b', 'c', 'd'), ('bcsel', 'b', 'c', 'e')) => ('bcsel', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('bcsel', 'b', 'c', 'd'), ('bcsel(is_used_once)', 'b', 'e', 'd')) => ('bcsel', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('bcsel', 'a', ('bcsel(is_used_once)', 'b', 'c', 'd'), ('bcsel', 'b', 'e', 'd')) => ('bcsel', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('bcsel', 'a', True, 'b') => ('ior', 'a', 'b') - * ('bcsel', 'a', 'a', 'b') => ('ior', 'a', 'b') - * ('bcsel', 'a', 'b', False) => ('iand', 'a', 'b') - * ('bcsel', 'a', 'b', 'a') => ('iand', 'a', 'b') - * ('~fmin', 'a', 'a') => a - * ('~fmax', 'a', 'a') => a - * ('imin', 'a', 'a') => a - * ('imax', 'a', 'a') => a - * ('umin', 'a', 'a') => a - * ('umin', 'a', 0) => 0 - * ('umin', 'a', -1) => a - * ('umax', 'a', 'a') => a - * ('umax', 'a', 0) => a - * ('umax', 'a', -1) => -1 - * ('fmax', ('fmax', 'a', 'b'), 'b') => ('fmax', 'a', 'b') - * ('umax', ('umax', 'a', 'b'), 'b') => ('umax', 'a', 'b') - * ('imax', ('imax', 'a', 'b'), 'b') => ('imax', 'a', 'b') - * ('fmin', ('fmin', 'a', 'b'), 'b') => ('fmin', 'a', 'b') - * ('umin', ('umin', 'a', 'b'), 'b') => ('umin', 'a', 'b') - * ('imin', ('imin', 'a', 'b'), 'b') => ('imin', 'a', 'b') - * ('fmax', ('fmax', ('fmax', 'a', 'b'), 'c'), 'a') => ('fmax', ('fmax', 'a', 'b'), 'c') - * ('umax', ('umax', ('umax', 'a', 'b'), 'c'), 'a') => ('umax', ('umax', 'a', 'b'), 'c') - * ('imax', ('imax', ('imax', 'a', 'b'), 'c'), 'a') => ('imax', ('imax', 'a', 'b'), 'c') - * ('fmin', ('fmin', ('fmin', 'a', 'b'), 'c'), 'a') => ('fmin', ('fmin', 'a', 'b'), 'c') - * ('umin', ('umin', ('umin', 'a', 'b'), 'c'), 'a') => ('umin', ('umin', 'a', 'b'), 'c') - * ('imin', ('imin', ('imin', 'a', 'b'), 'c'), 'a') => ('imin', ('imin', 'a', 'b'), 'c') - * ('ieq', ('b2i8', 'a@1'), ('b2i8', 'b@1')) => ('ieq', 'a', 'b') - * ('ine', ('b2i8', 'a@1'), ('b2i8', 'b@1')) => ('ine', 'a', 'b') - * ('ieq', ('b2i16', 'a@1'), ('b2i16', 'b@1')) => ('ieq', 'a', 'b') - * ('ine', ('b2i16', 'a@1'), ('b2i16', 'b@1')) => ('ine', 'a', 'b') - * ('ieq', ('b2i32', 'a@1'), ('b2i32', 'b@1')) => ('ieq', 'a', 'b') - * ('ine', ('b2i32', 'a@1'), ('b2i32', 'b@1')) => ('ine', 'a', 'b') - * ('ieq', ('b2i64', 'a@1'), ('b2i64', 'b@1')) => ('ieq', 'a', 'b') - * ('ine', ('b2i64', 'a@1'), ('b2i64', 'b@1')) => ('ine', 'a', 'b') - * ('feq', ('b2f16', 'a@1'), ('b2f16', 'b@1')) => ('ieq', 'a', 'b') - * ('fneu', ('b2f16', 'a@1'), ('b2f16', 'b@1')) => ('ine', 'a', 'b') - * ('feq', ('b2f32', 'a@1'), ('b2f32', 'b@1')) => ('ieq', 'a', 'b') - * ('fneu', ('b2f32', 'a@1'), ('b2f32', 'b@1')) => ('ine', 'a', 'b') - * ('feq', ('b2f64', 'a@1'), ('b2f64', 'b@1')) => ('ieq', 'a', 'b') - * ('fneu', ('b2f64', 'a@1'), ('b2f64', 'b@1')) => ('ine', 'a', 'b') - * ('iand@8', 'a', ('inot', ('ishr', 'a', 7))) => ('imax', 'a', 0) - * ('ieq', ('iand', 'a@8', 128), 0) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@8', 128), 128) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@8', 128), 0) => ('ilt', 'a', 0) - * ('ieq', ('iand', 'a@8', 128), 128) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@8', 7), 0) => ('ilt', 'a', 0) - * ('ieq', ('ushr', 'a@8', 7), 0) => ('ige', 'a', 0) - * ('ieq', ('ushr', 'a@8', 7), 1) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@8', 7), 1) => ('ige', 'a', 0) - * ('ine', ('ishr', 'a@8', 7), 0) => ('ilt', 'a', 0) - * ('ieq', ('ishr', 'a@8', 7), 0) => ('ige', 'a', 0) - * ('ieq', ('ishr', 'a@8', 7), -1) => ('ilt', 'a', 0) - * ('ine', ('ishr', 'a@8', 7), -1) => ('ige', 'a', 0) - * ('iand@16', 'a', ('inot', ('ishr', 'a', 15))) => ('imax', 'a', 0) - * ('ieq', ('iand', 'a@16', 32768), 0) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@16', 32768), 32768) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@16', 32768), 0) => ('ilt', 'a', 0) - * ('ieq', ('iand', 'a@16', 32768), 32768) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@16', 15), 0) => ('ilt', 'a', 0) - * ('ieq', ('ushr', 'a@16', 15), 0) => ('ige', 'a', 0) - * ('ieq', ('ushr', 'a@16', 15), 1) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@16', 15), 1) => ('ige', 'a', 0) - * ('ine', ('ishr', 'a@16', 15), 0) => ('ilt', 'a', 0) - * ('ieq', ('ishr', 'a@16', 15), 0) => ('ige', 'a', 0) - * ('ieq', ('ishr', 'a@16', 15), -1) => ('ilt', 'a', 0) - * ('ine', ('ishr', 'a@16', 15), -1) => ('ige', 'a', 0) - * ('iand@32', 'a', ('inot', ('ishr', 'a', 31))) => ('imax', 'a', 0) - * ('ieq', ('iand', 'a@32', 2147483648), 0) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@32', 2147483648), 2147483648) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@32', 2147483648), 0) => ('ilt', 'a', 0) - * ('ieq', ('iand', 'a@32', 2147483648), 2147483648) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@32', 31), 0) => ('ilt', 'a', 0) - * ('ieq', ('ushr', 'a@32', 31), 0) => ('ige', 'a', 0) - * ('ieq', ('ushr', 'a@32', 31), 1) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@32', 31), 1) => ('ige', 'a', 0) - * ('ine', ('ishr', 'a@32', 31), 0) => ('ilt', 'a', 0) - * ('ieq', ('ishr', 'a@32', 31), 0) => ('ige', 'a', 0) - * ('ieq', ('ishr', 'a@32', 31), -1) => ('ilt', 'a', 0) - * ('ine', ('ishr', 'a@32', 31), -1) => ('ige', 'a', 0) - * ('iand@64', 'a', ('inot', ('ishr', 'a', 63))) => ('imax', 'a', 0) - * ('ieq', ('iand', 'a@64', 9223372036854775808), 0) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@64', 9223372036854775808), 9223372036854775808) => ('ige', 'a', 0) - * ('ine', ('iand', 'a@64', 9223372036854775808), 0) => ('ilt', 'a', 0) - * ('ieq', ('iand', 'a@64', 9223372036854775808), 9223372036854775808) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@64', 63), 0) => ('ilt', 'a', 0) - * ('ieq', ('ushr', 'a@64', 63), 0) => ('ige', 'a', 0) - * ('ieq', ('ushr', 'a@64', 63), 1) => ('ilt', 'a', 0) - * ('ine', ('ushr', 'a@64', 63), 1) => ('ige', 'a', 0) - * ('ine', ('ishr', 'a@64', 63), 0) => ('ilt', 'a', 0) - * ('ieq', ('ishr', 'a@64', 63), 0) => ('ige', 'a', 0) - * ('ieq', ('ishr', 'a@64', 63), -1) => ('ilt', 'a', 0) - * ('ine', ('ishr', 'a@64', 63), -1) => ('ige', 'a', 0) - * ('fmin', 'a', ('fneg', 'a')) => ('fneg', ('fabs', 'a')) - * ('imin', 'a', ('ineg', 'a')) => ('ineg', ('iabs', 'a')) - * ('fmin', 'a', ('fneg', ('fabs', 'a'))) => ('fneg', ('fabs', 'a')) - * ('imin', 'a', ('ineg', ('iabs', 'a'))) => ('ineg', ('iabs', 'a')) - * ('~fmin', 'a', ('fabs', 'a')) => a - * ('imin', 'a', ('iabs', 'a')) => a - * ('~fmax', 'a', ('fneg', ('fabs', 'a'))) => a - * ('imax', 'a', ('ineg', ('iabs', 'a'))) => a - * ('fmax', 'a', ('fabs', 'a')) => ('fabs', 'a') - * ('imax', 'a', ('iabs', 'a')) => ('iabs', 'a') - * ('fmax', 'a', ('fneg', 'a')) => ('fabs', 'a') - * ('imax', 'a', ('ineg', 'a')) => ('iabs', 'a') - * ('~fmax', ('fabs', 'a'), 0.0) => ('fabs', 'a') - * ('fmin', ('fmax', 'a', 0.0), 1.0) => ('fsat', 'a') - * ('~fmax', ('fmin', 'a', 1.0), 0.0) => ('fsat', 'a') - * ('~fmin', ('fmax', 'a', -1.0), 0.0) => ('fneg', ('fsat', ('fneg', 'a'))) - * ('~fmax', ('fmin', 'a', 0.0), -1.0) => ('fneg', ('fsat', ('fneg', 'a'))) - * ('fsat', ('fsign', 'a')) => ('b2f', ('!flt', 0.0, 'a')) - * ('fsat', ('b2f', 'a')) => ('b2f', 'a') - * ('fsat', 'a') => ('fmin', ('fmax', 'a', 0.0), 1.0) - * ('fsat', ('fsat', 'a')) => ('fsat', 'a') - * ('fsat', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b'))) => ('fsat', ('fadd', ('fneg', 'a'), ('fneg', 'b'))) - * ('fsat', ('fneg(is_used_once)', ('fmul(is_used_once)', 'a', 'b'))) => ('fsat', ('fmul', ('fneg', 'a'), 'b')) - * ('fsat', ('fneg(is_used_once)', ('fmulz(is_used_once)', 'a', 'b'))) => ('fsat', ('fmulz', ('fneg', 'a'), 'b')) - * ('fsat', ('fabs(is_used_once)', ('fmul(is_used_once)', 'a', 'b'))) => ('fsat', ('fmul', ('fabs', 'a'), ('fabs', 'b'))) - * ('fmin', ('fmax', ('fmin', ('fmax', 'a', 'b'), 'c'), 'b'), 'c') => ('fmin', ('fmax', 'a', 'b'), 'c') - * ('imin', ('imax', ('imin', ('imax', 'a', 'b'), 'c'), 'b'), 'c') => ('imin', ('imax', 'a', 'b'), 'c') - * ('umin', ('umax', ('umin', ('umax', 'a', 'b'), 'c'), 'b'), 'c') => ('umin', ('umax', 'a', 'b'), 'c') - * ('fmax', ('fsat', 'a'), '#b(is_zero_to_one)') => ('fsat', ('fmax', 'a', 'b')) - * ('fmax', ('fsat(is_used_once)', 'a'), ('fsat(is_used_once)', 'b')) => ('fsat', ('fmax', 'a', 'b')) - * ('~fmin', ('fsat', 'a'), '#b(is_zero_to_one)') => ('fsat', ('fmin', 'a', 'b')) - * ('fmax', ('fneg', ('fmin', 'b', 'a')), 'b') => ('fmax', ('fabs', 'b'), ('fneg', 'a')) - * ('fmin', ('fneg', ('fmax', 'b', 'a')), 'b') => ('fmin', ('fneg', ('fabs', 'b')), ('fneg', 'a')) - * ('fmax', ('fadd(is_used_once)', ('fneg', 'a(is_not_negative)'), '#b(is_zero_to_one)'), 0.0) => ('fsat', ('fadd', ('fneg', 'a'), 'b')) - * ('extract_u8', ('imin', ('imax', 'a', 0), 255), 0) => ('imin', ('imax', 'a', 0), 255) - * ('ior', ('flt(is_used_once)', 'a', 'b'), ('flt', 'a', 'c')) => ('flt', 'a', ('!fmax', 'b', 'c')) - * ('ior', ('flt(is_used_once)', 'a', 'c'), ('flt', 'b', 'c')) => ('flt', ('!fmin', 'a', 'b'), 'c') - * ('ior', ('fge(is_used_once)', 'a', 'b'), ('fge', 'a', 'c')) => ('fge', 'a', ('!fmin', 'b', 'c')) - * ('ior', ('fge(is_used_once)', 'a', 'c'), ('fge', 'b', 'c')) => ('fge', ('!fmax', 'a', 'b'), 'c') - * ('ior', ('flt', 'a', '#b'), ('flt', 'a', '#c')) => ('flt', 'a', ('!fmax', 'b', 'c')) - * ('ior', ('flt', '#a', 'c'), ('flt', '#b', 'c')) => ('flt', ('!fmin', 'a', 'b'), 'c') - * ('ior', ('fge', 'a', '#b'), ('fge', 'a', '#c')) => ('fge', 'a', ('!fmin', 'b', 'c')) - * ('ior', ('fge', '#a', 'c'), ('fge', '#b', 'c')) => ('fge', ('!fmax', 'a', 'b'), 'c') - * ('~iand', ('flt(is_used_once)', 'a', 'b'), ('flt', 'a', 'c')) => ('flt', 'a', ('fmin', 'b', 'c')) - * ('~iand', ('flt(is_used_once)', 'a', 'c'), ('flt', 'b', 'c')) => ('flt', ('fmax', 'a', 'b'), 'c') - * ('~iand', ('fge(is_used_once)', 'a', 'b'), ('fge', 'a', 'c')) => ('fge', 'a', ('fmax', 'b', 'c')) - * ('~iand', ('fge(is_used_once)', 'a', 'c'), ('fge', 'b', 'c')) => ('fge', ('fmin', 'a', 'b'), 'c') - * ('iand', ('flt', 'a', '#b(is_a_number)'), ('flt', 'a', '#c(is_a_number)')) => ('flt', 'a', ('fmin', 'b', 'c')) - * ('iand', ('flt', '#a(is_a_number)', 'c'), ('flt', '#b(is_a_number)', 'c')) => ('flt', ('fmax', 'a', 'b'), 'c') - * ('iand', ('fge', 'a', '#b(is_a_number)'), ('fge', 'a', '#c(is_a_number)')) => ('fge', 'a', ('fmax', 'b', 'c')) - * ('iand', ('fge', '#a(is_a_number)', 'c'), ('fge', '#b(is_a_number)', 'c')) => ('fge', ('fmin', 'a', 'b'), 'c') - * ('ior', ('ilt(is_used_once)', 'a', 'b'), ('ilt', 'a', 'c')) => ('ilt', 'a', ('imax', 'b', 'c')) - * ('ior', ('ilt(is_used_once)', 'a', 'c'), ('ilt', 'b', 'c')) => ('ilt', ('imin', 'a', 'b'), 'c') - * ('ior', ('ige(is_used_once)', 'a', 'b'), ('ige', 'a', 'c')) => ('ige', 'a', ('imin', 'b', 'c')) - * ('ior', ('ige(is_used_once)', 'a', 'c'), ('ige', 'b', 'c')) => ('ige', ('imax', 'a', 'b'), 'c') - * ('ior', ('ult(is_used_once)', 'a', 'b'), ('ult', 'a', 'c')) => ('ult', 'a', ('umax', 'b', 'c')) - * ('ior', ('ult(is_used_once)', 'a', 'c'), ('ult', 'b', 'c')) => ('ult', ('umin', 'a', 'b'), 'c') - * ('ior', ('uge(is_used_once)', 'a', 'b'), ('uge', 'a', 'c')) => ('uge', 'a', ('umin', 'b', 'c')) - * ('ior', ('uge(is_used_once)', 'a', 'c'), ('uge', 'b', 'c')) => ('uge', ('umax', 'a', 'b'), 'c') - * ('iand', ('ilt(is_used_once)', 'a', 'b'), ('ilt', 'a', 'c')) => ('ilt', 'a', ('imin', 'b', 'c')) - * ('iand', ('ilt(is_used_once)', 'a', 'c'), ('ilt', 'b', 'c')) => ('ilt', ('imax', 'a', 'b'), 'c') - * ('iand', ('ige(is_used_once)', 'a', 'b'), ('ige', 'a', 'c')) => ('ige', 'a', ('imax', 'b', 'c')) - * ('iand', ('ige(is_used_once)', 'a', 'c'), ('ige', 'b', 'c')) => ('ige', ('imin', 'a', 'b'), 'c') - * ('iand', ('ult(is_used_once)', 'a', 'b'), ('ult', 'a', 'c')) => ('ult', 'a', ('umin', 'b', 'c')) - * ('iand', ('ult(is_used_once)', 'a', 'c'), ('ult', 'b', 'c')) => ('ult', ('umax', 'a', 'b'), 'c') - * ('iand', ('uge(is_used_once)', 'a', 'b'), ('uge', 'a', 'c')) => ('uge', 'a', ('umax', 'b', 'c')) - * ('iand', ('uge(is_used_once)', 'a', 'c'), ('uge', 'b', 'c')) => ('uge', ('umin', 'a', 'b'), 'c') - * ('ior', ('ior(is_used_once)', ('flt(is_used_once)', 'a', 'c'), 'd'), ('flt', 'b', 'c')) => ('ior', ('flt', ('!fmin', 'a', 'b'), 'c'), 'd') - * ('ior', ('ior(is_used_once)', ('flt', 'a', 'c'), 'd'), ('flt(is_used_once)', 'b', 'c')) => ('ior', ('flt', ('!fmin', 'a', 'b'), 'c'), 'd') - * ('ior', ('ior(is_used_once)', ('flt(is_used_once)', 'a', 'b'), 'd'), ('flt', 'a', 'c')) => ('ior', ('flt', 'a', ('!fmax', 'b', 'c')), 'd') - * ('ior', ('ior(is_used_once)', ('flt', 'a', 'b'), 'd'), ('flt(is_used_once)', 'a', 'c')) => ('ior', ('flt', 'a', ('!fmax', 'b', 'c')), 'd') - * ('ior', ('flt', 'a(is_a_number)', 'b(is_a_number)'), ('flt', 'b', 'a')) => ('fneu', 'a', 'b') - * ('umin', ('iand', 'a', '#b(is_pos_power_of_two)'), ('iand', 'c', 'b')) => ('iand', ('iand', 'a', 'b'), ('iand', 'c', 'b')) - * ('ior', ('flt(is_used_once)', 0.0, 'a@16'), ('flt', 'b@16', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('flt', 0.0, 'a@16'), ('flt(is_used_once)', 'b@16', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('fge(is_used_once)', 0.0, 'a@16'), ('fge', 'b@16', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('ior', ('fge', 0.0, 'a@16'), ('fge(is_used_once)', 'b@16', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('flt(is_used_once)', 0.0, 'a@16'), ('flt', 'b@16', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('flt', 0.0, 'a@16'), ('flt(is_used_once)', 'b@16', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('fge(is_used_once)', 0.0, 'a@16'), ('fge', 'b@16', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('~iand', ('fge', 0.0, 'a@16'), ('fge(is_used_once)', 'b@16', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('feq(is_used_once)', 'a@16', 0.0), ('feq', 'b@16', 0.0)) => ('feq', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('ior', ('fneu(is_used_once)', 'a@16', 0.0), ('fneu', 'b@16', 0.0)) => ('fneu', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('iand', ('feq(is_used_once)', 'a@16', 0.0), ('feq', 'b@16', 0.0)) => ('feq', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('iand', ('fneu(is_used_once)', 'a@16', 0.0), ('fneu', 'b@16', 0.0)) => ('fneu', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('bcsel@16', ('feq', 'a', 0.0), 1.0, ('i2f16', ('iadd', ('b2i16', ('flt', 0.0, 'a@16')), ('ineg', ('b2i16', ('flt', 'a@16', 0.0)))))) => ('i2f16', ('iadd', ('b2i32', ('!fge', 'a', 0.0)), ('ineg', ('b2i32', ('!flt', 'a', 0.0))))) - * ('bcsel', 'a', ('b2f(is_used_once)', 'b@16'), ('b2f', 'c@16')) => ('b2f', ('bcsel', 'a', 'b', 'c')) - * ('~i2f16', ('f2i', 'a@16')) => ('ftrunc', 'a') - * ('~f2i16', ('i2f', 'a@16')) => a - * ('~f2i16', ('u2f', 'a@16')) => a - * ('~f2u16', ('i2f', 'a@16')) => a - * ('~f2u16', ('u2f', 'a@16')) => a - * ('fadd', ('b2f16', ('flt', 0.0, 'a@16')), ('fneg', ('b2f16', ('flt', 'a@16', 0.0)))) => ('fsign', 'a') - * ('iadd', ('b2i16', ('flt', 0, 'a@16')), ('ineg', ('b2i16', ('flt', 'a@16', 0)))) => ('f2i16', ('fsign', 'a')) - * ('~f2f16', ('f2f', 'a')) => ('f2f16', 'a') - * ('~f2f16', ('u2f', 'a')) => ('u2f16', 'a') - * ('~f2f16', ('i2f', 'a')) => ('i2f16', 'a') - * ('~f2u16', ('f2f', 'a')) => ('f2u16', 'a') - * ('~f2i16', ('f2f', 'a')) => ('f2i16', 'a') - * ('i2f16', ('f2i', ('fsign', 'a@16'))) => ('fsign', 'a') - * ('~f2f16', ('f2f32', 'a@16')) => a - * ('f2u32', ('f2f32', 'a@16')) => ('f2u32', 'a') - * ('f2i32', ('f2f32', 'a@16')) => ('f2i32', 'a') - * ('f2f16', ('u2f32', 'a')) => ('u2f16', 'a') - * ('f2f16', ('i2f32', 'a')) => ('i2f16', 'a') - * ('~f2f16', ('f2f64', 'a@16')) => a - * ('f2u64', ('f2f64', 'a@16')) => ('f2u64', 'a') - * ('f2i64', ('f2f64', 'a@16')) => ('f2i64', 'a') - * ('f2f16', ('u2f64', 'a')) => ('u2f16', 'a') - * ('f2f16', ('i2f64', 'a')) => ('i2f16', 'a') - * ('ior', ('flt(is_used_once)', 0.0, 'a@32'), ('flt', 'b@32', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('flt', 0.0, 'a@32'), ('flt(is_used_once)', 'b@32', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('fge(is_used_once)', 0.0, 'a@32'), ('fge', 'b@32', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('ior', ('fge', 0.0, 'a@32'), ('fge(is_used_once)', 'b@32', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('flt(is_used_once)', 0.0, 'a@32'), ('flt', 'b@32', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('flt', 0.0, 'a@32'), ('flt(is_used_once)', 'b@32', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('fge(is_used_once)', 0.0, 'a@32'), ('fge', 'b@32', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('~iand', ('fge', 0.0, 'a@32'), ('fge(is_used_once)', 'b@32', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('feq(is_used_once)', 'a@32', 0.0), ('feq', 'b@32', 0.0)) => ('feq', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('ior', ('fneu(is_used_once)', 'a@32', 0.0), ('fneu', 'b@32', 0.0)) => ('fneu', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('iand', ('feq(is_used_once)', 'a@32', 0.0), ('feq', 'b@32', 0.0)) => ('feq', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('iand', ('fneu(is_used_once)', 'a@32', 0.0), ('fneu', 'b@32', 0.0)) => ('fneu', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('bcsel@32', ('feq', 'a', 0.0), 1.0, ('i2f32', ('iadd', ('b2i32', ('flt', 0.0, 'a@32')), ('ineg', ('b2i32', ('flt', 'a@32', 0.0)))))) => ('i2f32', ('iadd', ('b2i32', ('!fge', 'a', 0.0)), ('ineg', ('b2i32', ('!flt', 'a', 0.0))))) - * ('bcsel', 'a', ('b2f(is_used_once)', 'b@32'), ('b2f', 'c@32')) => ('b2f', ('bcsel', 'a', 'b', 'c')) - * ('~i2f32', ('f2i', 'a@32')) => ('ftrunc', 'a') - * ('~f2i32', ('i2f', 'a@32')) => a - * ('~f2i32', ('u2f', 'a@32')) => a - * ('~f2u32', ('i2f', 'a@32')) => a - * ('~f2u32', ('u2f', 'a@32')) => a - * ('fadd', ('b2f32', ('flt', 0.0, 'a@32')), ('fneg', ('b2f32', ('flt', 'a@32', 0.0)))) => ('fsign', 'a') - * ('iadd', ('b2i32', ('flt', 0, 'a@32')), ('ineg', ('b2i32', ('flt', 'a@32', 0)))) => ('f2i32', ('fsign', 'a')) - * ('~f2f32', ('f2f', 'a')) => ('f2f32', 'a') - * ('~f2f32', ('u2f', 'a')) => ('u2f32', 'a') - * ('~f2f32', ('i2f', 'a')) => ('i2f32', 'a') - * ('~f2u32', ('f2f', 'a')) => ('f2u32', 'a') - * ('~f2i32', ('f2f', 'a')) => ('f2i32', 'a') - * ('i2f32', ('f2i', ('fsign', 'a@32'))) => ('fsign', 'a') - * ('~f2f32', ('f2f64', 'a@32')) => a - * ('f2u64', ('f2f64', 'a@32')) => ('f2u64', 'a') - * ('f2i64', ('f2f64', 'a@32')) => ('f2i64', 'a') - * ('f2f32', ('u2f64', 'a')) => ('u2f32', 'a') - * ('f2f32', ('i2f64', 'a')) => ('i2f32', 'a') - * ('ior', ('flt(is_used_once)', 0.0, 'a@64'), ('flt', 'b@64', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('flt', 0.0, 'a@64'), ('flt(is_used_once)', 'b@64', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('fge(is_used_once)', 0.0, 'a@64'), ('fge', 'b@64', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('ior', ('fge', 0.0, 'a@64'), ('fge(is_used_once)', 'b@64', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('flt(is_used_once)', 0.0, 'a@64'), ('flt', 'b@64', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('flt', 0.0, 'a@64'), ('flt(is_used_once)', 'b@64', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) - * ('~iand', ('fge(is_used_once)', 0.0, 'a@64'), ('fge', 'b@64', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('~iand', ('fge', 0.0, 'a@64'), ('fge(is_used_once)', 'b@64', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) - * ('ior', ('feq(is_used_once)', 'a@64', 0.0), ('feq', 'b@64', 0.0)) => ('feq', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('ior', ('fneu(is_used_once)', 'a@64', 0.0), ('fneu', 'b@64', 0.0)) => ('fneu', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('iand', ('feq(is_used_once)', 'a@64', 0.0), ('feq', 'b@64', 0.0)) => ('feq', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('iand', ('fneu(is_used_once)', 'a@64', 0.0), ('fneu', 'b@64', 0.0)) => ('fneu', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) - * ('bcsel@64', ('feq', 'a', 0.0), 1.0, ('i2f64', ('iadd', ('b2i64', ('flt', 0.0, 'a@64')), ('ineg', ('b2i64', ('flt', 'a@64', 0.0)))))) => ('i2f64', ('iadd', ('b2i32', ('!fge', 'a', 0.0)), ('ineg', ('b2i32', ('!flt', 'a', 0.0))))) - * ('bcsel', 'a', ('b2f(is_used_once)', 'b@64'), ('b2f', 'c@64')) => ('b2f', ('bcsel', 'a', 'b', 'c')) - * ('~i2f64', ('f2i', 'a@64')) => ('ftrunc', 'a') - * ('~f2i64', ('i2f', 'a@64')) => a - * ('~f2i64', ('u2f', 'a@64')) => a - * ('~f2u64', ('i2f', 'a@64')) => a - * ('~f2u64', ('u2f', 'a@64')) => a - * ('fadd', ('b2f64', ('flt', 0.0, 'a@64')), ('fneg', ('b2f64', ('flt', 'a@64', 0.0)))) => ('fsign', 'a') - * ('iadd', ('b2i64', ('flt', 0, 'a@64')), ('ineg', ('b2i64', ('flt', 'a@64', 0)))) => ('f2i64', ('fsign', 'a')) - * ('~f2f64', ('f2f', 'a')) => ('f2f64', 'a') - * ('~f2f64', ('u2f', 'a')) => ('u2f64', 'a') - * ('~f2f64', ('i2f', 'a')) => ('i2f64', 'a') - * ('~f2u64', ('f2f', 'a')) => ('f2u64', 'a') - * ('~f2i64', ('f2f', 'a')) => ('f2i64', 'a') - * ('i2f64', ('f2i', ('fsign', 'a@64'))) => ('fsign', 'a') - * ('i2i1', ('i2i8', 'a@1')) => a - * ('u2u1', ('u2u8', 'a@1')) => a - * ('i2i1', ('i2i16', 'a@1')) => a - * ('u2u1', ('u2u16', 'a@1')) => a - * ('u2f16', ('u2u8', 'a@1')) => ('u2f16', 'a') - * ('i2f16', ('i2i8', 'a@1')) => ('i2f16', 'a') - * ('u2f16', ('u2u16', 'a@1')) => ('u2f16', 'a') - * ('i2f16', ('i2i16', 'a@1')) => ('i2f16', 'a') - * ('u2f16', ('u2u32', 'a@1')) => ('u2f16', 'a') - * ('i2f16', ('i2i32', 'a@1')) => ('i2f16', 'a') - * ('u2f16', ('u2u64', 'a@1')) => ('u2f16', 'a') - * ('i2f16', ('i2i64', 'a@1')) => ('i2f16', 'a') - * ('i2i1', ('i2i32', 'a@1')) => a - * ('u2u1', ('u2u32', 'a@1')) => a - * ('u2f32', ('u2u8', 'a@1')) => ('u2f32', 'a') - * ('i2f32', ('i2i8', 'a@1')) => ('i2f32', 'a') - * ('u2f32', ('u2u16', 'a@1')) => ('u2f32', 'a') - * ('i2f32', ('i2i16', 'a@1')) => ('i2f32', 'a') - * ('u2f32', ('u2u32', 'a@1')) => ('u2f32', 'a') - * ('i2f32', ('i2i32', 'a@1')) => ('i2f32', 'a') - * ('u2f32', ('u2u64', 'a@1')) => ('u2f32', 'a') - * ('i2f32', ('i2i64', 'a@1')) => ('i2f32', 'a') - * ('i2i1', ('i2i64', 'a@1')) => a - * ('u2u1', ('u2u64', 'a@1')) => a - * ('u2f64', ('u2u8', 'a@1')) => ('u2f64', 'a') - * ('i2f64', ('i2i8', 'a@1')) => ('i2f64', 'a') - * ('u2f64', ('u2u16', 'a@1')) => ('u2f64', 'a') - * ('i2f64', ('i2i16', 'a@1')) => ('i2f64', 'a') - * ('u2f64', ('u2u32', 'a@1')) => ('u2f64', 'a') - * ('i2f64', ('i2i32', 'a@1')) => ('i2f64', 'a') - * ('u2f64', ('u2u64', 'a@1')) => ('u2f64', 'a') - * ('i2f64', ('i2i64', 'a@1')) => ('i2f64', 'a') - * ('i2i8', ('i2i16', 'a@8')) => a - * ('u2u8', ('u2u16', 'a@8')) => a - * ('u2f16', ('u2u16', 'a@8')) => ('u2f16', 'a') - * ('i2f16', ('i2i16', 'a@8')) => ('i2f16', 'a') - * ('u2f16', ('u2u32', 'a@8')) => ('u2f16', 'a') - * ('i2f16', ('i2i32', 'a@8')) => ('i2f16', 'a') - * ('u2f16', ('u2u64', 'a@8')) => ('u2f16', 'a') - * ('i2f16', ('i2i64', 'a@8')) => ('i2f16', 'a') - * ('i2i8', ('i2i32', 'a@8')) => a - * ('u2u8', ('u2u32', 'a@8')) => a - * ('u2f32', ('u2u16', 'a@8')) => ('u2f32', 'a') - * ('i2f32', ('i2i16', 'a@8')) => ('i2f32', 'a') - * ('u2f32', ('u2u32', 'a@8')) => ('u2f32', 'a') - * ('i2f32', ('i2i32', 'a@8')) => ('i2f32', 'a') - * ('u2f32', ('u2u64', 'a@8')) => ('u2f32', 'a') - * ('i2f32', ('i2i64', 'a@8')) => ('i2f32', 'a') - * ('i2i8', ('i2i64', 'a@8')) => a - * ('u2u8', ('u2u64', 'a@8')) => a - * ('u2f64', ('u2u16', 'a@8')) => ('u2f64', 'a') - * ('i2f64', ('i2i16', 'a@8')) => ('i2f64', 'a') - * ('u2f64', ('u2u32', 'a@8')) => ('u2f64', 'a') - * ('i2f64', ('i2i32', 'a@8')) => ('i2f64', 'a') - * ('u2f64', ('u2u64', 'a@8')) => ('u2f64', 'a') - * ('i2f64', ('i2i64', 'a@8')) => ('i2f64', 'a') - * ('i2i16', ('i2i32', 'a@16')) => a - * ('u2u16', ('u2u32', 'a@16')) => a - * ('u2f32', ('u2u32', 'a@16')) => ('u2f32', 'a') - * ('i2f32', ('i2i32', 'a@16')) => ('i2f32', 'a') - * ('u2f32', ('u2u64', 'a@16')) => ('u2f32', 'a') - * ('i2f32', ('i2i64', 'a@16')) => ('i2f32', 'a') - * ('i2i16', ('i2i64', 'a@16')) => a - * ('u2u16', ('u2u64', 'a@16')) => a - * ('u2f64', ('u2u32', 'a@16')) => ('u2f64', 'a') - * ('i2f64', ('i2i32', 'a@16')) => ('i2f64', 'a') - * ('u2f64', ('u2u64', 'a@16')) => ('u2f64', 'a') - * ('i2f64', ('i2i64', 'a@16')) => ('i2f64', 'a') - * ('i2i32', ('i2i64', 'a@32')) => a - * ('u2u32', ('u2u64', 'a@32')) => a - * ('u2f64', ('u2u64', 'a@32')) => ('u2f64', 'a') - * ('i2f64', ('i2i64', 'a@32')) => ('i2f64', 'a') - * ('f2fmp', ('u2f32', 'a@32')) => ('u2fmp', 'a') - * ('f2fmp', ('i2f32', 'a@32')) => ('i2fmp', 'a') - * ('f2u16', ('f2fmp', 'a@32')) => ('f2u16', 'a') - * ('f2i16', ('f2fmp', 'a@32')) => ('f2i16', 'a') - * ('i2imp', ('f2u32', 'a@32')) => ('f2ump', 'a') - * ('i2imp', ('f2i32', 'a@32')) => ('f2imp', 'a') - * ('u2f16', ('i2imp', 'a@32')) => ('u2f16', 'a') - * ('i2f16', ('i2imp', 'a@32')) => ('i2f16', 'a') - * ('iand', ('u2u16', ('u2u8', 'a@16')), '#b') => ('iand', 'a', ('iand', 'b', 255)) - * ('u2u16', ('u2u8(is_used_once)', ('iand', 'a@16', '#b'))) => ('iand', 'a', ('iand', 'b', 255)) - * ('u2u8', ('iand', ('u2u16', ('u2u8', 'a@16')), ('u2u16', ('u2u8', 'b@16')))) => ('u2u8', ('iand', 'a', 'b')) - * ('u2u8', ('iand', ('u2u16', ('u2u8', 'a@32')), ('u2u16', ('u2u8', 'b@32')))) => ('u2u8', ('iand', 'a', 'b')) - * ('iand', ('extract_i8', 'a', '#b'), ('extract_i8', 'c', 'b')) => ('extract_i8', ('iand', 'a', 'c'), 'b') - * ('iand', ('extract_u8', 'a', '#b'), ('extract_u8', 'c', 'b')) => ('extract_u8', ('iand', 'a', 'c'), 'b') - * ('iand', ('extract_i16', 'a', '#b'), ('extract_i16', 'c', 'b')) => ('extract_i16', ('iand', 'a', 'c'), 'b') - * ('iand', ('extract_u16', 'a', '#b'), ('extract_u16', 'c', 'b')) => ('extract_u16', ('iand', 'a', 'c'), 'b') - * ('iand', ('ushr(is_used_once)', 'a', '#b'), ('ushr', 'c', 'b')) => ('ushr', ('iand', 'a', 'c'), 'b') - * ('iand', ('ishr(is_used_once)', 'a', '#b'), ('ishr', 'c', 'b')) => ('ishr', ('iand', 'a', 'c'), 'b') - * ('iand', ('ishl(is_used_once)', 'a', '#b'), ('ishl', 'c', 'b')) => ('ishl', ('iand', 'a', 'c'), 'b') - * ('u2u8', ('ior', ('u2u16', ('u2u8', 'a@16')), ('u2u16', ('u2u8', 'b@16')))) => ('u2u8', ('ior', 'a', 'b')) - * ('u2u8', ('ior', ('u2u16', ('u2u8', 'a@32')), ('u2u16', ('u2u8', 'b@32')))) => ('u2u8', ('ior', 'a', 'b')) - * ('ior', ('extract_i8', 'a', '#b'), ('extract_i8', 'c', 'b')) => ('extract_i8', ('ior', 'a', 'c'), 'b') - * ('ior', ('extract_u8', 'a', '#b'), ('extract_u8', 'c', 'b')) => ('extract_u8', ('ior', 'a', 'c'), 'b') - * ('ior', ('extract_i16', 'a', '#b'), ('extract_i16', 'c', 'b')) => ('extract_i16', ('ior', 'a', 'c'), 'b') - * ('ior', ('extract_u16', 'a', '#b'), ('extract_u16', 'c', 'b')) => ('extract_u16', ('ior', 'a', 'c'), 'b') - * ('ior', ('ushr(is_used_once)', 'a', '#b'), ('ushr', 'c', 'b')) => ('ushr', ('ior', 'a', 'c'), 'b') - * ('ior', ('ishr(is_used_once)', 'a', '#b'), ('ishr', 'c', 'b')) => ('ishr', ('ior', 'a', 'c'), 'b') - * ('ior', ('ishl(is_used_once)', 'a', '#b'), ('ishl', 'c', 'b')) => ('ishl', ('ior', 'a', 'c'), 'b') - * ('u2u8', ('ixor', ('u2u16', ('u2u8', 'a@16')), ('u2u16', ('u2u8', 'b@16')))) => ('u2u8', ('ixor', 'a', 'b')) - * ('u2u8', ('ixor', ('u2u16', ('u2u8', 'a@32')), ('u2u16', ('u2u8', 'b@32')))) => ('u2u8', ('ixor', 'a', 'b')) - * ('ixor', ('extract_i8', 'a', '#b'), ('extract_i8', 'c', 'b')) => ('extract_i8', ('ixor', 'a', 'c'), 'b') - * ('ixor', ('extract_u8', 'a', '#b'), ('extract_u8', 'c', 'b')) => ('extract_u8', ('ixor', 'a', 'c'), 'b') - * ('ixor', ('extract_i16', 'a', '#b'), ('extract_i16', 'c', 'b')) => ('extract_i16', ('ixor', 'a', 'c'), 'b') - * ('ixor', ('extract_u16', 'a', '#b'), ('extract_u16', 'c', 'b')) => ('extract_u16', ('ixor', 'a', 'c'), 'b') - * ('ixor', ('ushr(is_used_once)', 'a', '#b'), ('ushr', 'c', 'b')) => ('ushr', ('ixor', 'a', 'c'), 'b') - * ('ixor', ('ishr(is_used_once)', 'a', '#b'), ('ishr', 'c', 'b')) => ('ishr', ('ixor', 'a', 'c'), 'b') - * ('ixor', ('ishl(is_used_once)', 'a', '#b'), ('ishl', 'c', 'b')) => ('ishl', ('ixor', 'a', 'c'), 'b') - * ('iand', ('ieq', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('ior', 'a', 'b'), 0) - * ('ior', ('ine', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('ior', 'a', 'b'), 0) - * ('iand', ('ieq', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('umax', 'a', 'b'), 0) - * ('ior', ('ieq', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('iand', ('ine', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ine', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('umax', 'a', 'b'), 0) - * ('ineg', ('b2i8', 'a@8')) => a - * ('ishl', 'a@8', ('iand', 7, 'b')) => ('ishl', 'a', 'b') - * ('ishr', 'a@8', ('iand', 7, 'b')) => ('ishr', 'a', 'b') - * ('ushr', 'a@8', ('iand', 7, 'b')) => ('ushr', 'a', 'b') - * ('ushr', 'a@8', ('ishl(is_used_once)', ('iand', 'b', 1), 2)) => ('ushr', 'a', ('ishl', 'b', 2)) - * ('iand', ('ieq', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('ior', 'a', 'b'), 0) - * ('ior', ('ine', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('ior', 'a', 'b'), 0) - * ('iand', ('ieq', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('umax', 'a', 'b'), 0) - * ('ior', ('ieq', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('iand', ('ine', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ine', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('umax', 'a', 'b'), 0) - * ('ineg', ('b2i16', 'a@16')) => a - * ('ishl', 'a@16', ('iand', 15, 'b')) => ('ishl', 'a', 'b') - * ('ishr', 'a@16', ('iand', 15, 'b')) => ('ishr', 'a', 'b') - * ('ushr', 'a@16', ('iand', 15, 'b')) => ('ushr', 'a', 'b') - * ('ushr', 'a@16', ('ishl(is_used_once)', ('iand', 'b', 1), 3)) => ('ushr', 'a', ('ishl', 'b', 3)) - * ('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('ior', 'a', 'b'), 0) - * ('ior', ('ine', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('ior', 'a', 'b'), 0) - * ('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('umax', 'a', 'b'), 0) - * ('ior', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('iand', ('ine', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ine', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('umax', 'a', 'b'), 0) - * ('ineg', ('b2i32', 'a@32')) => a - * ('ishl', 'a@32', ('iand', 31, 'b')) => ('ishl', 'a', 'b') - * ('ishr', 'a@32', ('iand', 31, 'b')) => ('ishr', 'a', 'b') - * ('ushr', 'a@32', ('iand', 31, 'b')) => ('ushr', 'a', 'b') - * ('ushr', 'a@32', ('ishl(is_used_once)', ('iand', 'b', 1), 4)) => ('ushr', 'a', ('ishl', 'b', 4)) - * ('iand', ('ieq', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('ior', 'a', 'b'), 0) - * ('ior', ('ine', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('ior', 'a', 'b'), 0) - * ('iand', ('ieq', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('umax', 'a', 'b'), 0) - * ('ior', ('ieq', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('iand', ('ine', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ine', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('umax', 'a', 'b'), 0) - * ('ineg', ('b2i64', 'a@64')) => a - * ('ishl', 'a@64', ('iand', 63, 'b')) => ('ishl', 'a', 'b') - * ('ishr', 'a@64', ('iand', 63, 'b')) => ('ishr', 'a', 'b') - * ('ushr', 'a@64', ('iand', 63, 'b')) => ('ushr', 'a', 'b') - * ('ushr', 'a@64', ('ishl(is_used_once)', ('iand', 'b', 1), 5)) => ('ushr', 'a', ('ishl', 'b', 5)) - * ('ior', ('ieq', 'a', 0), ('ieq', 'a', 1)) => ('uge', 1, 'a') - * ('ior', ('uge', 1, 'a'), ('ieq', 'a', 2)) => ('uge', 2, 'a') - * ('ior', ('uge', 2, 'a'), ('ieq', 'a', 3)) => ('uge', 3, 'a') - * ('ior', 'a', ('ieq', 'a', False)) => True - * ('ine', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ine', 'a', 'b') - * ('b2i', ('ine', 'a@1', 'b@1')) => ('b2i', ('ixor', 'a', 'b')) - * ('ishl', ('b2i32', ('ine', ('iand', 'a@32', '#b(is_pos_power_of_two)'), 0)), '#c') => ('bcsel', ('ige', ('iand', 'c', 31), ('find_lsb', 'b')), ('ishl', ('iand', 'a', 'b'), ('iadd', ('iand', 'c', 31), ('ineg', ('find_lsb', 'b')))), ('ushr', ('iand', 'a', 'b'), ('iadd', ('ineg', ('iand', 'c', 31)), ('find_lsb', 'b')))) - * ('b2i32', ('ine', ('iand', 'a@32', '#b(is_pos_power_of_two)'), 0)) => ('ushr', ('iand', 'a', 'b'), ('find_lsb', 'b')) - * ('ior', ('b2i', 'a'), ('iand', 'b', 1)) => ('iand', ('ior', ('b2i', 'a'), 'b'), 1) - * ('iand', ('b2i', 'a'), ('iand', 'b', 1)) => ('iand', ('b2i', 'a'), 'b') - * ('iand', ('inot', ('iand', ('ior', ('ieq', 'a', 0), 'b'), 'c')), ('ilt', 'a', 0)) => ('iand', ('inot', ('iand', 'b', 'c')), ('ilt', 'a', 0)) - * ('iand', ('inot', ('iand', ('ieq', ('umin', 'a', 'b'), 0), 'c')), ('ilt', 'a', 0)) => ('iand', ('inot', ('iand', ('ieq', 'b', 0), 'c')), ('ilt', 'a', 0)) - * ('flt', 'a', ('fmax', 'b', 'a')) => ('flt', 'a', 'b') - * ('flt', ('fmin', 'a', 'b'), 'a') => ('flt', 'b', 'a') - * ('~fge', 'a', ('fmin', 'b', 'a')) => True - * ('~fge', ('fmax', 'a', 'b'), 'a') => True - * ('flt', 'a', ('fmin', 'b', 'a')) => False - * ('flt', ('fmax', 'a', 'b'), 'a') => False - * ('~fge', 'a', ('fmax', 'b', 'a')) => ('fge', 'a', 'b') - * ('~fge', ('fmin', 'a', 'b'), 'a') => ('fge', 'b', 'a') - * ('ilt', 'a', ('imax', 'b', 'a')) => ('ilt', 'a', 'b') - * ('ilt', ('imin', 'a', 'b'), 'a') => ('ilt', 'b', 'a') - * ('ige', 'a', ('imin', 'b', 'a')) => True - * ('ige', ('imax', 'a', 'b'), 'a') => True - * ('ult', 'a', ('umax', 'b', 'a')) => ('ult', 'a', 'b') - * ('ult', ('umin', 'a', 'b'), 'a') => ('ult', 'b', 'a') - * ('uge', 'a', ('umin', 'b', 'a')) => True - * ('uge', ('umax', 'a', 'b'), 'a') => True - * ('ilt', 'a', ('imin', 'b', 'a')) => False - * ('ilt', ('imax', 'a', 'b'), 'a') => False - * ('ige', 'a', ('imax', 'b', 'a')) => ('ige', 'a', 'b') - * ('ige', ('imin', 'a', 'b'), 'a') => ('ige', 'b', 'a') - * ('ult', 'a', ('umin', 'b', 'a')) => False - * ('ult', ('umax', 'a', 'b'), 'a') => False - * ('uge', 'a', ('umax', 'b', 'a')) => ('uge', 'a', 'b') - * ('uge', ('umin', 'a', 'b'), 'a') => ('uge', 'b', 'a') - * ('ult', 'a', ('iand', 'b', 'a')) => False - * ('ult', ('ior', 'a', 'b'), 'a') => False - * ('uge', 'a', ('iand', 'b', 'a')) => True - * ('uge', ('ior', 'a', 'b'), 'a') => True - * ('ilt', '#a', ('imax', '#b', 'c')) => ('ior', ('ilt', 'a', 'b'), ('ilt', 'a', 'c')) - * ('ilt', ('imin', '#a', 'b'), '#c') => ('ior', ('ilt', 'a', 'c'), ('ilt', 'b', 'c')) - * ('ige', '#a', ('imin', '#b', 'c')) => ('ior', ('ige', 'a', 'b'), ('ige', 'a', 'c')) - * ('ige', ('imax', '#a', 'b'), '#c') => ('ior', ('ige', 'a', 'c'), ('ige', 'b', 'c')) - * ('ult', '#a', ('umax', '#b', 'c')) => ('ior', ('ult', 'a', 'b'), ('ult', 'a', 'c')) - * ('ult', ('umin', '#a', 'b'), '#c') => ('ior', ('ult', 'a', 'c'), ('ult', 'b', 'c')) - * ('uge', '#a', ('umin', '#b', 'c')) => ('ior', ('uge', 'a', 'b'), ('uge', 'a', 'c')) - * ('uge', ('umax', '#a', 'b'), '#c') => ('ior', ('uge', 'a', 'c'), ('uge', 'b', 'c')) - * ('ilt', '#a', ('imin', '#b', 'c')) => ('iand', ('ilt', 'a', 'b'), ('ilt', 'a', 'c')) - * ('ilt', ('imax', '#a', 'b'), '#c') => ('iand', ('ilt', 'a', 'c'), ('ilt', 'b', 'c')) - * ('ige', '#a', ('imax', '#b', 'c')) => ('iand', ('ige', 'a', 'b'), ('ige', 'a', 'c')) - * ('ige', ('imin', '#a', 'b'), '#c') => ('iand', ('ige', 'a', 'c'), ('ige', 'b', 'c')) - * ('ult', '#a', ('umin', '#b', 'c')) => ('iand', ('ult', 'a', 'b'), ('ult', 'a', 'c')) - * ('ult', ('umax', '#a', 'b'), '#c') => ('iand', ('ult', 'a', 'c'), ('ult', 'b', 'c')) - * ('uge', '#a', ('umax', '#b', 'c')) => ('iand', ('uge', 'a', 'b'), ('uge', 'a', 'c')) - * ('uge', ('umin', '#a', 'b'), '#c') => ('iand', ('uge', 'a', 'c'), ('uge', 'b', 'c')) - * ('bcsel', ('ilt', 'a', 0), ('ineg', ('ishr', 'a', 'b')), ('ishr', 'a', 'b')) => ('iabs', ('ishr', 'a', 'b')) - * ('iabs', ('ishr', ('iabs', 'a'), 'b')) => ('ishr', ('iabs', 'a'), 'b') - * ('fabs', ('slt', 'a', 'b')) => ('slt', 'a', 'b') - * ('fabs', ('sge', 'a', 'b')) => ('sge', 'a', 'b') - * ('fabs', ('seq', 'a', 'b')) => ('seq', 'a', 'b') - * ('fabs', ('sne', 'a', 'b')) => ('sne', 'a', 'b') - * ('slt', 'a', 'b') => ('b2f', ('flt', 'a', 'b')) - * ('sge', 'a', 'b') => ('b2f', ('fge', 'a', 'b')) - * ('seq', 'a', 'b') => ('b2f', ('feq', 'a', 'b')) - * ('sne', 'a', 'b') => ('b2f', ('fneu', 'a', 'b')) - * ('seq', ('seq', 'a', 'b'), 1.0) => ('seq', 'a', 'b') - * ('seq', ('sne', 'a', 'b'), 1.0) => ('sne', 'a', 'b') - * ('seq', ('slt', 'a', 'b'), 1.0) => ('slt', 'a', 'b') - * ('seq', ('sge', 'a', 'b'), 1.0) => ('sge', 'a', 'b') - * ('sne', ('seq', 'a', 'b'), 0.0) => ('seq', 'a', 'b') - * ('sne', ('sne', 'a', 'b'), 0.0) => ('sne', 'a', 'b') - * ('sne', ('slt', 'a', 'b'), 0.0) => ('slt', 'a', 'b') - * ('sne', ('sge', 'a', 'b'), 0.0) => ('sge', 'a', 'b') - * ('seq', ('seq', 'a', 'b'), 0.0) => ('sne', 'a', 'b') - * ('seq', ('sne', 'a', 'b'), 0.0) => ('seq', 'a', 'b') - * ('seq', ('slt', 'a', 'b'), 0.0) => ('sge', 'a', 'b') - * ('seq', ('sge', 'a', 'b'), 0.0) => ('slt', 'a', 'b') - * ('sne', ('seq', 'a', 'b'), 1.0) => ('sne', 'a', 'b') - * ('sne', ('sne', 'a', 'b'), 1.0) => ('seq', 'a', 'b') - * ('sne', ('slt', 'a', 'b'), 1.0) => ('sge', 'a', 'b') - * ('sne', ('sge', 'a', 'b'), 1.0) => ('slt', 'a', 'b') - * ('fall_equal2', 'a', 'b') => ('fmin', ('seq', 'a.x', 'b.x'), ('seq', 'a.y', 'b.y')) - * ('fall_equal3', 'a', 'b') => ('seq', ('fany_nequal3', 'a', 'b'), 0.0) - * ('fall_equal4', 'a', 'b') => ('seq', ('fany_nequal4', 'a', 'b'), 0.0) - * ('fall_equal8', 'a', 'b') => ('seq', ('fany_nequal8', 'a', 'b'), 0.0) - * ('fall_equal16', 'a', 'b') => ('seq', ('fany_nequal16', 'a', 'b'), 0.0) - * ('fany_nequal2', 'a', 'b') => ('fmax', ('sne', 'a.x', 'b.x'), ('sne', 'a.y', 'b.y')) - * ('fany_nequal3', 'a', 'b') => ('fsat', ('fdot3', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) - * ('fany_nequal4', 'a', 'b') => ('fsat', ('fdot4', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) - * ('fany_nequal8', 'a', 'b') => ('fsat', ('fdot8', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) - * ('fany_nequal16', 'a', 'b') => ('fsat', ('fdot16', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) - * ('ball_iequal2', 'a', 'b') => ('iand', ('ieq', 'a.x', 'b.x'), ('ieq', 'a.y', 'b.y')) - * ('ball_iequal3', 'a', 'b') => ('iand', ('ieq', 'a.x', 'b.x'), ('iand', ('ieq', 'a.y', 'b.y'), ('ieq', 'a.z', 'b.z'))) - * ('ball_iequal4', 'a', 'b') => ('iand', ('iand', ('ieq', 'a.x', 'b.x'), ('ieq', 'a.y', 'b.y')), ('iand', ('ieq', 'a.z', 'b.z'), ('ieq', 'a.w', 'b.w'))) - * ('ball_iequal8', 'a', 'b') => ('iand', ('iand', ('iand', ('ieq', 'a.a', 'b.a'), ('ieq', 'a.b', 'b.b')), ('iand', ('ieq', 'a.c', 'b.c'), ('ieq', 'a.d', 'b.d'))), ('iand', ('iand', ('ieq', 'a.e', 'b.e'), ('ieq', 'a.f', 'b.f')), ('iand', ('ieq', 'a.g', 'b.g'), ('ieq', 'a.h', 'b.h')))) - * ('ball_iequal16', 'a', 'b') => ('iand', ('iand', ('iand', ('iand', ('ieq', 'a.a', 'b.a'), ('ieq', 'a.b', 'b.b')), ('iand', ('ieq', 'a.c', 'b.c'), ('ieq', 'a.d', 'b.d'))), ('iand', ('iand', ('ieq', 'a.e', 'b.e'), ('ieq', 'a.f', 'b.f')), ('iand', ('ieq', 'a.g', 'b.g'), ('ieq', 'a.h', 'b.h')))), ('iand', ('iand', ('iand', ('ieq', 'a.i', 'b.i'), ('ieq', 'a.j', 'b.j')), ('iand', ('ieq', 'a.k', 'b.k'), ('ieq', 'a.l', 'b.l'))), ('iand', ('iand', ('ieq', 'a.m', 'b.m'), ('ieq', 'a.n', 'b.n')), ('iand', ('ieq', 'a.o', 'b.o'), ('ieq', 'a.p', 'b.p'))))) - * ('ball_fequal2', 'a', 'b') => ('iand', ('feq', 'a.x', 'b.x'), ('feq', 'a.y', 'b.y')) - * ('ball_fequal3', 'a', 'b') => ('iand', ('feq', 'a.x', 'b.x'), ('iand', ('feq', 'a.y', 'b.y'), ('feq', 'a.z', 'b.z'))) - * ('ball_fequal4', 'a', 'b') => ('iand', ('iand', ('feq', 'a.x', 'b.x'), ('feq', 'a.y', 'b.y')), ('iand', ('feq', 'a.z', 'b.z'), ('feq', 'a.w', 'b.w'))) - * ('ball_fequal8', 'a', 'b') => ('iand', ('iand', ('iand', ('feq', 'a.a', 'b.a'), ('feq', 'a.b', 'b.b')), ('iand', ('feq', 'a.c', 'b.c'), ('feq', 'a.d', 'b.d'))), ('iand', ('iand', ('feq', 'a.e', 'b.e'), ('feq', 'a.f', 'b.f')), ('iand', ('feq', 'a.g', 'b.g'), ('feq', 'a.h', 'b.h')))) - * ('ball_fequal16', 'a', 'b') => ('iand', ('iand', ('iand', ('iand', ('feq', 'a.a', 'b.a'), ('feq', 'a.b', 'b.b')), ('iand', ('feq', 'a.c', 'b.c'), ('feq', 'a.d', 'b.d'))), ('iand', ('iand', ('feq', 'a.e', 'b.e'), ('feq', 'a.f', 'b.f')), ('iand', ('feq', 'a.g', 'b.g'), ('feq', 'a.h', 'b.h')))), ('iand', ('iand', ('iand', ('feq', 'a.i', 'b.i'), ('feq', 'a.j', 'b.j')), ('iand', ('feq', 'a.k', 'b.k'), ('feq', 'a.l', 'b.l'))), ('iand', ('iand', ('feq', 'a.m', 'b.m'), ('feq', 'a.n', 'b.n')), ('iand', ('feq', 'a.o', 'b.o'), ('feq', 'a.p', 'b.p'))))) - * ('bany_inequal2', 'a', 'b') => ('ior', ('ine', 'a.x', 'b.x'), ('ine', 'a.y', 'b.y')) - * ('bany_inequal3', 'a', 'b') => ('ior', ('ine', 'a.x', 'b.x'), ('ior', ('ine', 'a.y', 'b.y'), ('ine', 'a.z', 'b.z'))) - * ('bany_inequal4', 'a', 'b') => ('ior', ('ior', ('ine', 'a.x', 'b.x'), ('ine', 'a.y', 'b.y')), ('ior', ('ine', 'a.z', 'b.z'), ('ine', 'a.w', 'b.w'))) - * ('bany_inequal8', 'a', 'b') => ('ior', ('ior', ('ior', ('ine', 'a.a', 'b.a'), ('ine', 'a.b', 'b.b')), ('ior', ('ine', 'a.c', 'b.c'), ('ine', 'a.d', 'b.d'))), ('ior', ('ior', ('ine', 'a.e', 'b.e'), ('ine', 'a.f', 'b.f')), ('ior', ('ine', 'a.g', 'b.g'), ('ine', 'a.h', 'b.h')))) - * ('bany_inequal16', 'a', 'b') => ('ior', ('ior', ('ior', ('ior', ('ine', 'a.a', 'b.a'), ('ine', 'a.b', 'b.b')), ('ior', ('ine', 'a.c', 'b.c'), ('ine', 'a.d', 'b.d'))), ('ior', ('ior', ('ine', 'a.e', 'b.e'), ('ine', 'a.f', 'b.f')), ('ior', ('ine', 'a.g', 'b.g'), ('ine', 'a.h', 'b.h')))), ('ior', ('ior', ('ior', ('ine', 'a.i', 'b.i'), ('ine', 'a.j', 'b.j')), ('ior', ('ine', 'a.k', 'b.k'), ('ine', 'a.l', 'b.l'))), ('ior', ('ior', ('ine', 'a.m', 'b.m'), ('ine', 'a.n', 'b.n')), ('ior', ('ine', 'a.o', 'b.o'), ('ine', 'a.p', 'b.p'))))) - * ('bany_fnequal2', 'a', 'b') => ('ior', ('fneu', 'a.x', 'b.x'), ('fneu', 'a.y', 'b.y')) - * ('bany_fnequal3', 'a', 'b') => ('ior', ('fneu', 'a.x', 'b.x'), ('ior', ('fneu', 'a.y', 'b.y'), ('fneu', 'a.z', 'b.z'))) - * ('bany_fnequal4', 'a', 'b') => ('ior', ('ior', ('fneu', 'a.x', 'b.x'), ('fneu', 'a.y', 'b.y')), ('ior', ('fneu', 'a.z', 'b.z'), ('fneu', 'a.w', 'b.w'))) - * ('bany_fnequal8', 'a', 'b') => ('ior', ('ior', ('ior', ('fneu', 'a.a', 'b.a'), ('fneu', 'a.b', 'b.b')), ('ior', ('fneu', 'a.c', 'b.c'), ('fneu', 'a.d', 'b.d'))), ('ior', ('ior', ('fneu', 'a.e', 'b.e'), ('fneu', 'a.f', 'b.f')), ('ior', ('fneu', 'a.g', 'b.g'), ('fneu', 'a.h', 'b.h')))) - * ('bany_fnequal16', 'a', 'b') => ('ior', ('ior', ('ior', ('ior', ('fneu', 'a.a', 'b.a'), ('fneu', 'a.b', 'b.b')), ('ior', ('fneu', 'a.c', 'b.c'), ('fneu', 'a.d', 'b.d'))), ('ior', ('ior', ('fneu', 'a.e', 'b.e'), ('fneu', 'a.f', 'b.f')), ('ior', ('fneu', 'a.g', 'b.g'), ('fneu', 'a.h', 'b.h')))), ('ior', ('ior', ('ior', ('fneu', 'a.i', 'b.i'), ('fneu', 'a.j', 'b.j')), ('ior', ('fneu', 'a.k', 'b.k'), ('fneu', 'a.l', 'b.l'))), ('ior', ('ior', ('fneu', 'a.m', 'b.m'), ('fneu', 'a.n', 'b.n')), ('ior', ('fneu', 'a.o', 'b.o'), ('fneu', 'a.p', 'b.p'))))) - * ('feq', ('seq', 'a', 'b'), 1.0) => ('feq', 'a', 'b') - * ('feq', ('sne', 'a', 'b'), 1.0) => ('fneu', 'a', 'b') - * ('feq', ('slt', 'a', 'b'), 1.0) => ('flt', 'a', 'b') - * ('feq', ('sge', 'a', 'b'), 1.0) => ('fge', 'a', 'b') - * ('fneu', ('seq', 'a', 'b'), 0.0) => ('feq', 'a', 'b') - * ('fneu', ('sne', 'a', 'b'), 0.0) => ('fneu', 'a', 'b') - * ('fneu', ('slt', 'a', 'b'), 0.0) => ('flt', 'a', 'b') - * ('fneu', ('sge', 'a', 'b'), 0.0) => ('fge', 'a', 'b') - * ('feq', ('seq', 'a', 'b'), 0.0) => ('fneu', 'a', 'b') - * ('feq', ('sne', 'a', 'b'), 0.0) => ('feq', 'a', 'b') - * ('feq', ('slt', 'a', 'b'), 0.0) => ('fge', 'a', 'b') - * ('feq', ('sge', 'a', 'b'), 0.0) => ('flt', 'a', 'b') - * ('fneu', ('seq', 'a', 'b'), 1.0) => ('fneu', 'a', 'b') - * ('fneu', ('sne', 'a', 'b'), 1.0) => ('feq', 'a', 'b') - * ('fneu', ('slt', 'a', 'b'), 1.0) => ('fge', 'a', 'b') - * ('fneu', ('sge', 'a', 'b'), 1.0) => ('flt', 'a', 'b') - * ('fneu', ('fneg', 'a'), 'a') => ('fneu', 'a', 0.0) - * ('feq', ('fneg', 'a'), 'a') => ('feq', 'a', 0.0) - * ('imul', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('iand', 'a', 'b')) - * ('iand', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('iand', 'a', 'b')) - * ('ior', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('ior', 'a', 'b')) - * ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')) => ('b2f', ('iand', 'a', 'b')) - * ('fsat', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))) => ('b2f', ('ior', 'a', 'b')) - * ('iand', 'a@bool16', 1.0) => ('b2f', 'a') - * ('iand', 'a@bool32', 1.0) => ('b2f', 'a') - * ('flt', ('fneg', ('b2f', 'a@1')), 0) => a - * ('ilt', 'a', 'a') => False - * ('ige', 'a', 'a') => True - * ('ieq', 'a', 'a') => True - * ('ine', 'a', 'a') => False - * ('ult', 'a', 'a') => False - * ('uge', 'a', 'a') => True - * ('flt', 'a', 'a') => False - * ('fge', 'a(is_a_number)', 'a') => True - * ('feq', 'a(is_a_number)', 'a') => True - * ('fneu', 'a(is_a_number)', 'a') => False - * ('iand', 'a', 'a') => a - * ('iand', 'a', 0) => 0 - * ('iand', 'a', -1) => a - * ('iand', 'a', ('inot', 'a')) => 0 - * ('ior', 'a', 'a') => a - * ('ior', 'a', 0) => a - * ('ior', 'a', -1) => -1 - * ('ior', 'a', ('inot', 'a')) => -1 - * ('ixor', 'a', 'a') => 0 - * ('ixor', 'a', 0) => a - * ('ixor', 'a', ('ixor', 'a', 'b')) => b - * ('ixor', 'a', -1) => ('inot', 'a') - * ('inot', ('inot', 'a')) => a - * ('ior', ('iand', 'a', 'b'), 'b') => b - * ('ior', ('ior', 'a', 'b'), 'b') => ('ior', 'a', 'b') - * ('iand', ('ior', 'a', 'b'), 'b') => b - * ('iand', ('iand', 'a', 'b'), 'b') => ('iand', 'a', 'b') - * ('iand', ('iand(is_used_once)', 'a', 'b'), ('iand(is_used_once)', 'a', 'c')) => ('iand', 'a', ('iand', 'b', 'c')) - * ('iand@64', 'a', '#b(is_lower_half_zero)') => ('pack_64_2x32_split', 0, ('iand', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) - * ('iand@64', 'a', '#b(is_upper_half_zero)') => ('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), 0) - * ('iand@64', 'a', '#b(is_lower_half_negative_one)') => ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('iand', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) - * ('iand@64', 'a', '#b(is_upper_half_negative_one)') => ('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), ('unpack_64_2x32_split_y', 'a')) - * ('ior@64', 'a', '#b(is_lower_half_zero)') => ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('ior', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) - * ('ior@64', 'a', '#b(is_upper_half_zero)') => ('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), ('unpack_64_2x32_split_y', 'a')) - * ('ior@64', 'a', '#b(is_lower_half_negative_one)') => ('pack_64_2x32_split', -1, ('ior', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) - * ('ior@64', 'a', '#b(is_upper_half_negative_one)') => ('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), -1) - * ('ixor@64', 'a', '#b(is_lower_half_zero)') => ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('ixor', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) - * ('ixor@64', 'a', '#b(is_upper_half_zero)') => ('pack_64_2x32_split', ('ixor', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), ('unpack_64_2x32_split_y', 'a')) - * ('iand', ('inot', 'a'), ('inot', 'b')) => ('inot', ('ior', 'a', 'b')) - * ('ior', ('inot', 'a'), ('inot', 'b')) => ('inot', ('iand', 'a', 'b')) - * ('ishl', 0, 'a') => 0 - * ('ishl', 'a', 0) => a - * ('ishr', 0, 'a') => 0 - * ('ishr', -1, 'a') => -1 - * ('ishr', 'a', 0) => a - * ('ushr', 0, 'a') => 0 - * ('ushr', 'a', 0) => a - * ('ior', ('ishl@16', 'a', 'b'), ('ushr@16', 'a', ('iadd', 16, ('ineg', 'b')))) => ('urol', 'a', 'b') - * ('ior', ('ishl@16', 'a', 'b'), ('ushr@16', 'a', ('isub', 16, 'b'))) => ('urol', 'a', 'b') - * ('ior', ('ishl@32', 'a', 'b'), ('ushr@32', 'a', ('iadd', 32, ('ineg', 'b')))) => ('urol', 'a', 'b') - * ('ior', ('ishl@32', 'a', 'b'), ('ushr@32', 'a', ('isub', 32, 'b'))) => ('urol', 'a', 'b') - * ('ior', ('ushr@16', 'a', 'b'), ('ishl@16', 'a', ('iadd', 16, ('ineg', 'b')))) => ('uror', 'a', 'b') - * ('ior', ('ushr@16', 'a', 'b'), ('ishl@16', 'a', ('isub', 16, 'b'))) => ('uror', 'a', 'b') - * ('ior', ('ushr@32', 'a', 'b'), ('ishl@32', 'a', ('iadd', 32, ('ineg', 'b')))) => ('uror', 'a', 'b') - * ('ior', ('ushr@32', 'a', 'b'), ('ishl@32', 'a', ('isub', 32, 'b'))) => ('uror', 'a', 'b') - * ('urol@8', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 8, 'b'))) - * ('urol@16', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 16, 'b'))) - * ('urol@32', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 32, 'b'))) - * ('urol@64', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 64, 'b'))) - * ('uror@8', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 8, 'b'))) - * ('uror@16', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 16, 'b'))) - * ('uror@32', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 32, 'b'))) - * ('uror@64', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 64, 'b'))) - * ('~fexp2', ('flog2', 'a')) => a - * ('~flog2', ('fexp2', 'a')) => a - * ('fpow', 'a', 'b') => ('fexp2', ('fmul', ('flog2', 'a'), 'b')) - * ('~fexp2', ('fmul', ('flog2', 'a'), 'b')) => ('fpow', 'a', 'b') - * ('~fexp2', ('fadd', ('fmul', ('flog2', 'a'), 'b'), ('fmul', ('flog2', 'c'), 'd'))) => ('~fmul', ('fpow', 'a', 'b'), ('fpow', 'c', 'd')) - * ('~fexp2', ('fmul', ('flog2', 'a'), 0.5)) => ('fsqrt', 'a') - * ('~fexp2', ('fmul', ('flog2', 'a'), 2.0)) => ('fmul', 'a', 'a') - * ('~fexp2', ('fmul', ('flog2', 'a'), 4.0)) => ('fmul', ('fmul', 'a', 'a'), ('fmul', 'a', 'a')) - * ('~fpow', 'a', 1.0) => a - * ('~fpow', 'a', 2.0) => ('fmul', 'a', 'a') - * ('~fpow', 'a', 4.0) => ('fmul', ('fmul', 'a', 'a'), ('fmul', 'a', 'a')) - * ('~fpow', 2.0, 'a') => ('fexp2', 'a') - * ('~fpow', ('fpow', 'a', 2.2), 0.454545) => a - * ('~fpow', ('fabs', ('fpow', 'a', 2.2)), 0.454545) => ('fabs', 'a') - * ('~fsqrt', ('fexp2', 'a')) => ('fexp2', ('fmul', 0.5, 'a')) - * ('~frcp', ('fexp2', 'a')) => ('fexp2', ('fneg', 'a')) - * ('~frsq', ('fexp2', 'a')) => ('fexp2', ('fmul', -0.5, 'a')) - * ('~flog2', ('fsqrt', 'a')) => ('fmul', 0.5, ('flog2', 'a')) - * ('~flog2', ('frcp', 'a')) => ('fneg', ('flog2', 'a')) - * ('~flog2', ('frsq', 'a')) => ('fmul', -0.5, ('flog2', 'a')) - * ('~flog2', ('fpow', 'a', 'b')) => ('fmul', 'b', ('flog2', 'a')) - * ('~fmul', ('fexp2(is_used_once)', 'a'), ('fexp2(is_used_once)', 'b')) => ('fexp2', ('fadd', 'a', 'b')) - * ('bcsel', ('flt', 'a', 0.0), 0.0, ('fsqrt', 'a')) => ('fsqrt', ('fmax', 'a', 0.0)) - * ('~fmul', ('fsqrt', 'a'), ('fsqrt', 'a')) => ('fabs', 'a') - * ('~fmulz', ('fsqrt', 'a'), ('fsqrt', 'a')) => ('fabs', 'a') - * ('~fdiv', 1.0, 'a') => ('frcp', 'a') - * ('fdiv', 'a', 'b') => ('fmul', 'a', ('frcp', 'b')) - * ('~frcp', ('frcp', 'a')) => a - * ('~frcp', ('fsqrt', 'a')) => ('frsq', 'a') - * ('fsqrt', 'a') => ('frcp', ('frsq', 'a')) - * ('~frcp', ('frsq', 'a')) => ('fsqrt', 'a') - * ('fsin', 'a') => ('ffma', ('ffma', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0), ('fabs', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0)), ('fneg', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0))), 0.225, ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0)) - * ('fcos', 'a') => ('ffma', ('ffma', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0), ('fabs', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0)), ('fneg', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0))), 0.225, ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0)) - * ('ieq', 'a', True) => a - * ('ine(is_not_used_by_if)', 'a', True) => ('inot', 'a') - * ('ine', 'a', False) => a - * ('ieq(is_not_used_by_if)', 'a', False) => ('inot', 'a') - * ('bcsel', 'a', True, False) => a - * ('bcsel', 'a', False, True) => ('inot', 'a') - * ('bcsel', True, 'b', 'c') => b - * ('bcsel', False, 'b', 'c') => c - * ('bcsel@16', 'a', 1.0, 0.0) => ('b2f', 'a') - * ('bcsel@16', 'a', 0.0, 1.0) => ('b2f', ('inot', 'a')) - * ('bcsel@16', 'a', -1.0, -0.0) => ('fneg', ('b2f', 'a')) - * ('bcsel@16', 'a', -0.0, -1.0) => ('fneg', ('b2f', ('inot', 'a'))) - * ('bcsel@32', 'a', 1.0, 0.0) => ('b2f', 'a') - * ('bcsel@32', 'a', 0.0, 1.0) => ('b2f', ('inot', 'a')) - * ('bcsel@32', 'a', -1.0, -0.0) => ('fneg', ('b2f', 'a')) - * ('bcsel@32', 'a', -0.0, -1.0) => ('fneg', ('b2f', ('inot', 'a'))) - * ('bcsel@64', 'a', 1.0, 0.0) => ('b2f', 'a') - * ('bcsel@64', 'a', 0.0, 1.0) => ('b2f', ('inot', 'a')) - * ('bcsel@64', 'a', -1.0, -0.0) => ('fneg', ('b2f', 'a')) - * ('bcsel@64', 'a', -0.0, -1.0) => ('fneg', ('b2f', ('inot', 'a'))) - * ('bcsel', 'a', 'b', 'b') => b - * ('~fcsel', 'a', 'b', 'b') => b - * ('bcsel', 'a', -1, 0) => ('ineg', ('b2i', 'a@1')) - * ('bcsel', 'a', 0, -1) => ('ineg', ('b2i', ('inot', 'a'))) - * ('bcsel', 'a', 1, 0) => ('b2i', 'a@1') - * ('bcsel', 'a', 0, 1) => ('b2i', ('inot', 'a')) - * ('iand', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('iand', 'a', 'b'))) - * ('ior', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('ior', 'a', 'b'))) - * ('ieq', ('ineg', ('b2i', 'a@1')), -1) => a - * ('ine', ('ineg', ('b2i', 'a@1')), -1) => ('inot', 'a') - * ('ige', ('ineg', ('b2i', 'a@1')), 0) => ('inot', 'a') - * ('ilt', ('ineg', ('b2i', 'a@1')), 0) => a - * ('ult', 0, ('ineg', ('b2i', 'a@1'))) => a - * ('iand', ('ineg', ('b2i', 'a')), 1.0) => ('b2f', 'a') - * ('iand', ('ineg', ('b2i', 'a')), 1) => ('b2i', 'a') - * ('imax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('iand', 'a', 'b'))) - * ('imin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('ior', 'a', 'b'))) - * ('umax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('ior', 'a', 'b'))) - * ('umin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('iand', 'a', 'b'))) - * ('umax', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('ior', 'a', 'b')) - * ('umin', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('iand', 'a', 'b')) - * ('ine', ('umin', ('ineg', ('b2i', 'a@1')), 'b'), 0) => ('iand', 'a', ('ine', 'b', 0)) - * ('ine', ('umax', ('ineg', ('b2i', 'a@1')), 'b'), 0) => ('ior', 'a', ('ine', 'b', 0)) - * ('f2i', ('ftrunc', 'a')) => ('f2i', 'a') - * ('f2u', ('ftrunc', 'a')) => ('f2u', 'a') - * ('f2fmp', ('f2f32', 'a@16')) => a - * ('i2imp', ('i2i32', 'a@16')) => a - * ('i2imp', ('u2u32', 'a@16')) => a - * ('f2imp', ('f2f32', 'a@16')) => ('f2i16', 'a') - * ('f2ump', ('f2f32', 'a@16')) => ('f2u16', 'a') - * ('i2fmp', ('i2i32', 'a@16')) => ('i2f16', 'a') - * ('u2fmp', ('u2u32', 'a@16')) => ('u2f16', 'a') - * ('f2fmp', ('b2f32', 'a@1')) => ('b2f16', 'a') - * ('i2imp', ('b2i32', 'a@1')) => ('b2i16', 'a') - * ('i2imp', ('b2i32', 'a@1')) => ('b2i16', 'a') - * ('f2imp', ('b2f32', 'a@1')) => ('b2i16', 'a') - * ('f2ump', ('b2f32', 'a@1')) => ('b2i16', 'a') - * ('i2fmp', ('b2i32', 'a@1')) => ('b2f16', 'a') - * ('u2fmp', ('b2i32', 'a@1')) => ('b2f16', 'a') - * ('f2f32', ('f2fmp', 'a@32')) => a - * ('i2i32', ('i2imp', 'a@32')) => a - * ('u2u32', ('i2imp', 'a@32')) => a - * ('i2i32', ('f2imp', 'a@32')) => ('f2i32', 'a') - * ('u2u32', ('f2ump', 'a@32')) => ('f2u32', 'a') - * ('f2f32', ('i2fmp', 'a@32')) => ('i2f32', 'a') - * ('f2f32', ('u2fmp', 'a@32')) => ('u2f32', 'a') - * ('f2i32', ('f2fmp', 'a@32')) => ('f2i32', 'a') - * ('f2u32', ('f2fmp', 'a@32')) => ('f2u32', 'a') - * ('i2f32', ('i2imp', 'a@32')) => ('i2f32', 'a') - * ('ffloor', 'a(is_integral)') => a - * ('fceil', 'a(is_integral)') => a - * ('ftrunc', 'a(is_integral)') => a - * ('fround_even', 'a(is_integral)') => a - * ('~ffract', 'a(is_integral)') => 0.0 - * ('fabs', 'a(is_not_negative)') => a - * ('iabs', 'a(is_not_negative)') => a - * ('fsat', 'a(is_not_positive)') => 0.0 - * ('~fmin', 'a(is_not_negative)', 1.0) => ('fsat', 'a') - * ('flt', ('fadd', ('fmul', ('fsat', 'a'), ('fneg', ('fsat', 'a'))), 1.0), 0.0) => False - * ('flt', ('fadd', ('fneg', ('fmul', ('fsat', 'a'), ('fsat', 'a'))), 1.0), 0.0) => False - * ('fmax', ('fadd', ('fmul', ('fsat', 'a'), ('fneg', ('fsat', 'a'))), 1.0), 0.0) => ('fadd', ('fmul', ('fsat', 'a'), ('fneg', ('fsat', 'a'))), 1.0) - * ('fmax', ('fadd', ('fneg', ('fmul', ('fsat', 'a'), ('fsat', 'a'))), 1.0), 0.0) => ('fadd', ('fneg', ('fmul', ('fsat', 'a'), ('fsat', 'a'))), 1.0) - * ('fneu', 'a(is_not_zero)', 0.0) => True - * ('feq', 'a(is_not_zero)', 0.0) => False - * ('fge', 'a(is_a_number_not_negative)', 'b(is_a_number_not_positive)') => True - * ('fge', 'a(is_not_positive)', 'b(is_gt_zero)') => False - * ('fge', 'a(is_lt_zero)', 'b(is_not_negative)') => False - * ('flt', 'a(is_not_negative)', 'b(is_not_positive)') => False - * ('flt', 'a(is_a_number_not_positive)', 'b(is_a_number_gt_zero)') => True - * ('flt', 'a(is_a_number_lt_zero)', 'b(is_a_number_not_negative)') => True - * ('ine', 'a(is_not_zero)', 0) => True - * ('ieq', 'a(is_not_zero)', 0) => False - * ('ige', 'a(is_not_negative)', 'b(is_not_positive)') => True - * ('ige', 'a(is_not_positive)', 'b(is_gt_zero)') => False - * ('ige', 'a(is_lt_zero)', 'b(is_not_negative)') => False - * ('ilt', 'a(is_not_negative)', 'b(is_not_positive)') => False - * ('ilt', 'a(is_not_positive)', 'b(is_gt_zero)') => True - * ('ilt', 'a(is_lt_zero)', 'b(is_not_negative)') => True - * ('ult', 0, 'a(is_gt_zero)') => True - * ('ult', 'a', 0) => False - * ('unpack_64_2x32_split_x', ('pack_64_2x32_split', 'a', 'b')) => a - * ('unpack_64_2x32_split_y', ('pack_64_2x32_split', 'a', 'b')) => b - * ('unpack_64_2x32_split_x', ('pack_64_2x32', 'a')) => a.x - * ('unpack_64_2x32_split_y', ('pack_64_2x32', 'a')) => a.y - * ('unpack_64_2x32_split_x', ('u2u64', 'a@32')) => a - * ('unpack_64_2x32_split_y', ('u2u64', 'a')) => 0 - * ('unpack_64_2x32_split_x', ('i2i64', 'a@32')) => a - * ('unpack_64_2x32_split_y', ('i2i64(is_used_once)', 'a@32')) => ('ishr', 'a', 31) - * ('unpack_64_2x32', ('pack_64_2x32_split', 'a', 'b')) => ('vec2', 'a', 'b') - * ('unpack_64_2x32', ('pack_64_2x32', 'a')) => a - * ('unpack_double_2x32_dxil', ('pack_double_2x32_dxil', 'a')) => a - * ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')) => a - * ('pack_64_2x32', ('vec2', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a'))) => a - * ('pack_64_2x32', ('unpack_64_2x32', 'a')) => a - * ('pack_double_2x32_dxil', ('unpack_double_2x32_dxil', 'a')) => a - * ('iand', ('ieq', ('unpack_32_2x16_split_x', 'a'), '#b'), ('ieq', ('unpack_32_2x16_split_y', 'a'), '#c')) => ('ieq', 'a', ('pack_32_2x16_split', 'b', 'c')) - * ('ushr', 'a@16', 8) => ('extract_u8', 'a', 1) - * ('ushr', 'a@32', 24) => ('extract_u8', 'a', 3) - * ('ushr', 'a@64', 56) => ('extract_u8', 'a', 7) - * ('ishr', 'a@16', 8) => ('extract_i8', 'a', 1) - * ('ishr', 'a@32', 24) => ('extract_i8', 'a', 3) - * ('ishr', 'a@64', 56) => ('extract_i8', 'a', 7) - * ('iand', 255, 'a') => ('extract_u8', 'a', 0) - * ('u2u8', ('extract_u16', 'a', 1)) => ('u2u8', ('extract_u8', 'a', 2)) - * ('u2u8', ('ushr', 'a', 8)) => ('u2u8', ('extract_u8', 'a', 1)) - * ('i2i16', ('u2u8', ('extract_u8', 'a', 'b'))) => ('i2i16', ('extract_i8', 'a', 'b')) - * ('u2u16', ('u2u8', ('extract_u8', 'a', 'b'))) => ('u2u16', ('extract_u8', 'a', 'b')) - * ('ubfe', 'a', 0, 8) => ('extract_u8', 'a', 0) - * ('ubfe', 'a', 8, 8) => ('extract_u8', 'a', 1) - * ('ubfe', 'a', 16, 8) => ('extract_u8', 'a', 2) - * ('ubfe', 'a', 24, 8) => ('extract_u8', 'a', 3) - * ('ibfe', 'a', 0, 8) => ('extract_i8', 'a', 0) - * ('ibfe', 'a', 8, 8) => ('extract_i8', 'a', 1) - * ('ibfe', 'a', 16, 8) => ('extract_i8', 'a', 2) - * ('ibfe', 'a', 24, 8) => ('extract_i8', 'a', 3) - * ('extract_u8', ('extract_i8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') - * ('extract_u8', ('extract_u8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') - * ('ushr', ('ishl', 'a@32', 16), 16) => ('extract_u16', 'a', 0) - * ('ushr', 'a@32', 16) => ('extract_u16', 'a', 1) - * ('ishr', ('ishl', 'a@32', 16), 16) => ('extract_i16', 'a', 0) - * ('ishr', 'a@32', 16) => ('extract_i16', 'a', 1) - * ('iand', 65535, 'a') => ('extract_u16', 'a', 0) - * ('ubfe', 'a', 0, 16) => ('extract_u16', 'a', 0) - * ('ubfe', 'a', 16, 16) => ('extract_u16', 'a', 1) - * ('ibfe', 'a', 0, 16) => ('extract_i16', 'a', 0) - * ('ibfe', 'a', 16, 16) => ('extract_i16', 'a', 1) - * ('ior', ('ishl', ('u2u32', 'a@8'), 24), ('ior', ('ishl', ('u2u32', 'b@8'), 16), ('ior', ('ishl', ('u2u32', 'c@8'), 8), ('u2u32', 'd@8')))) => ('pack_32_4x8', ('vec4', 'd', 'c', 'b', 'a')) - * ('extract_u16', ('extract_i16', 'a', 'b'), 0) => ('extract_u16', 'a', 'b') - * ('extract_u16', ('extract_u16', 'a', 'b'), 0) => ('extract_u16', 'a', 'b') - * ('pack_64_2x32_split', 'a', 'b') => ('ior', ('u2u64', 'a'), ('ishl', ('u2u64', 'b'), 32)) - * ('pack_32_2x16_split', 'a', 'b') => ('ior', ('u2u32', 'a'), ('ishl', ('u2u32', 'b'), 16)) - * ('pack_half_2x16_split', 'a', 'b') => ('pack_half_2x16_rtz_split', 'a', 'b') - * ('unpack_64_2x32_split_x', 'a') => ('u2u32', 'a') - * ('unpack_64_2x32_split_y', 'a') => ('u2u32', ('ushr', 'a', 32)) - * ('unpack_32_2x16_split_x', 'a') => ('u2u16', 'a') - * ('unpack_32_2x16_split_y', 'a') => ('u2u16', ('ushr', 'a', 16)) - * ('unpack_half_2x16_split_x', ('iand', 'a', 65535)) => ('unpack_half_2x16_split_x', 'a') - * ('unpack_32_2x16_split_x', ('iand', 'a', 65535)) => ('unpack_32_2x16_split_x', 'a') - * ('unpack_64_2x32_split_x', ('iand', 'a', 4294967295)) => ('unpack_64_2x32_split_x', 'a') - * ('unpack_half_2x16_split_y', ('iand', 'a', 4294901760)) => ('unpack_half_2x16_split_y', 'a') - * ('unpack_32_2x16_split_y', ('iand', 'a', 4294901760)) => ('unpack_32_2x16_split_y', 'a') - * ('unpack_64_2x32_split_y', ('iand', 'a', 18446744069414584320)) => ('unpack_64_2x32_split_y', 'a') - * ('unpack_half_2x16_split_x', ('extract_u16', 'a', 0)) => ('unpack_half_2x16_split_x', 'a') - * ('unpack_half_2x16_split_x', ('extract_u16', 'a', 1)) => ('unpack_half_2x16_split_y', 'a') - * ('unpack_half_2x16_split_x', ('ushr', 'a', 16)) => ('unpack_half_2x16_split_y', 'a') - * ('unpack_32_2x16_split_x', ('extract_u16', 'a', 0)) => ('unpack_32_2x16_split_x', 'a') - * ('unpack_32_2x16_split_x', ('extract_u16', 'a', 1)) => ('unpack_32_2x16_split_y', 'a') - * ('ishl', ('pack_half_2x16', ('vec2', 'a', 0)), 16) => ('pack_half_2x16', ('vec2', 0, 'a')) - * ('ushr', ('pack_half_2x16', ('vec2', 0, 'a')), 16) => ('pack_half_2x16', ('vec2', 'a', 0)) - * ('iadd', ('pack_half_2x16', ('vec2', 'a', 0)), ('pack_half_2x16', ('vec2', 0, 'b'))) => ('pack_half_2x16', ('vec2', 'a', 'b')) - * ('ior', ('pack_half_2x16', ('vec2', 'a', 0)), ('pack_half_2x16', ('vec2', 0, 'b'))) => ('pack_half_2x16', ('vec2', 'a', 'b')) - * ('ishl', ('pack_half_2x16_split', 'a', 0), 16) => ('pack_half_2x16_split', 0, 'a') - * ('ushr', ('pack_half_2x16_split', 0, 'a'), 16) => ('pack_half_2x16_split', 'a', 0) - * ('extract_u16', ('pack_half_2x16_split', 0, 'a'), 1) => ('pack_half_2x16_split', 'a', 0) - * ('ishl', ('pack_half_2x16_rtz_split', 'a', 0), 16) => ('pack_half_2x16_rtz_split', 0, 'a') - * ('ushr', ('pack_half_2x16_rtz_split', 0, 'a'), 16) => ('pack_half_2x16_rtz_split', 'a', 0) - * ('extract_u16', ('pack_half_2x16_rtz_split', 0, 'a'), 1) => ('pack_half_2x16_rtz_split', 'a', 0) - * ('iadd', ('pack_half_2x16_split', 'a', 0), ('pack_half_2x16_split', 0, 'b')) => ('pack_half_2x16_split', 'a', 'b') - * ('ior', ('pack_half_2x16_split', 'a', 0), ('pack_half_2x16_split', 0, 'b')) => ('pack_half_2x16_split', 'a', 'b') - * ('iadd', ('pack_half_2x16_rtz_split', 'a', 0), ('pack_half_2x16_rtz_split', 0, 'b')) => ('pack_half_2x16_rtz_split', 'a', 'b') - * ('ior', ('pack_half_2x16_rtz_split', 'a', 0), ('pack_half_2x16_rtz_split', 0, 'b')) => ('pack_half_2x16_rtz_split', 'a', 'b') - * ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 0) => ('i2i', 'a') - * ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 1) => ('i2i', 'b') - * ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 2) => ('i2i', 'c') - * ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 3) => ('i2i', 'd') - * ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 0) => ('u2u', 'a') - * ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 1) => ('u2u', 'b') - * ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 2) => ('u2u', 'c') - * ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 3) => ('u2u', 'd') - * ('extract_u8', ('ushr', 'a@16', 8), 0) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ushr', 'a@32', 8), 0) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ushr', 'a@32', 16), 0) => ('extract_u8', 'a', 2) - * ('extract_u8', ('ushr', 'a@32', 24), 0) => ('extract_u8', 'a', 3) - * ('extract_u8', ('ushr', 'a@64', 8), 0) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ushr', 'a@64', 16), 0) => ('extract_u8', 'a', 2) - * ('extract_u8', ('ushr', 'a@64', 24), 0) => ('extract_u8', 'a', 3) - * ('extract_u8', ('ushr', 'a@64', 32), 0) => ('extract_u8', 'a', 4) - * ('extract_u8', ('ushr', 'a@64', 40), 0) => ('extract_u8', 'a', 5) - * ('extract_u8', ('ushr', 'a@64', 48), 0) => ('extract_u8', 'a', 6) - * ('extract_u8', ('ushr', 'a@64', 56), 0) => ('extract_u8', 'a', 7) - * ('extract_u8', ('ishr', 'a@16', 8), 0) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ishr', 'a@32', 8), 0) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ishr', 'a@32', 16), 0) => ('extract_u8', 'a', 2) - * ('extract_u8', ('ishr', 'a@32', 24), 0) => ('extract_u8', 'a', 3) - * ('extract_u8', ('ishr', 'a@64', 8), 0) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ishr', 'a@64', 16), 0) => ('extract_u8', 'a', 2) - * ('extract_u8', ('ishr', 'a@64', 24), 0) => ('extract_u8', 'a', 3) - * ('extract_u8', ('ishr', 'a@64', 32), 0) => ('extract_u8', 'a', 4) - * ('extract_u8', ('ishr', 'a@64', 40), 0) => ('extract_u8', 'a', 5) - * ('extract_u8', ('ishr', 'a@64', 48), 0) => ('extract_u8', 'a', 6) - * ('extract_u8', ('ishr', 'a@64', 56), 0) => ('extract_u8', 'a', 7) - * ('extract_u8', ('extract_u16', 'a', 1), 0) => ('extract_u8', 'a', 2) - * ('extract_u8', ('ishl', 'a@16', 8), 1) => ('extract_u8', 'a', 0) - * ('extract_u8', ('ishl', 'a@32', 8), 3) => ('extract_u8', 'a', 2) - * ('extract_u8', ('ishl', 'a@32', 16), 3) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ishl', 'a@32', 24), 3) => ('extract_u8', 'a', 0) - * ('extract_u8', ('ishl', 'a@64', 8), 7) => ('extract_u8', 'a', 6) - * ('extract_u8', ('ishl', 'a@64', 16), 7) => ('extract_u8', 'a', 5) - * ('extract_u8', ('ishl', 'a@64', 24), 7) => ('extract_u8', 'a', 4) - * ('extract_u8', ('ishl', 'a@64', 32), 7) => ('extract_u8', 'a', 3) - * ('extract_u8', ('ishl', 'a@64', 40), 7) => ('extract_u8', 'a', 2) - * ('extract_u8', ('ishl', 'a@64', 48), 7) => ('extract_u8', 'a', 1) - * ('extract_u8', ('ishl', 'a@64', 56), 7) => ('extract_u8', 'a', 0) - * ('extract_i8', ('ishl', 'a@16', 8), 1) => ('extract_i8', 'a', 0) - * ('extract_i8', ('ishl', 'a@32', 8), 3) => ('extract_i8', 'a', 2) - * ('extract_i8', ('ishl', 'a@32', 16), 3) => ('extract_i8', 'a', 1) - * ('extract_i8', ('ishl', 'a@32', 24), 3) => ('extract_i8', 'a', 0) - * ('extract_i8', ('ishl', 'a@64', 8), 7) => ('extract_i8', 'a', 6) - * ('extract_i8', ('ishl', 'a@64', 16), 7) => ('extract_i8', 'a', 5) - * ('extract_i8', ('ishl', 'a@64', 24), 7) => ('extract_i8', 'a', 4) - * ('extract_i8', ('ishl', 'a@64', 32), 7) => ('extract_i8', 'a', 3) - * ('extract_i8', ('ishl', 'a@64', 40), 7) => ('extract_i8', 'a', 2) - * ('extract_i8', ('ishl', 'a@64', 48), 7) => ('extract_i8', 'a', 1) - * ('extract_i8', ('ishl', 'a@64', 56), 7) => ('extract_i8', 'a', 0) - * ('ussub_4x8_vc4', 'a', 0) => a - * ('ussub_4x8_vc4', 'a', -1) => 0 - * ('fsub', 'a', 'b') => ('fadd', 'a', ('fneg', 'b')) - * ('isub', 'a', 'b') => ('iadd', 'a', ('ineg', 'b')) - * ('uabs_usub', 'a', 'b') => ('bcsel', ('ult', 'a', 'b'), ('ineg', ('isub', 'a', 'b')), ('isub', 'a', 'b')) - * ('uabs_isub', 'a', 'b') => ('bcsel', ('ilt', 'a', 'b'), ('ineg', ('isub', 'a', 'b')), ('isub', 'a', 'b')) - * ('fmul(is_used_by_non_fsat)', ('fneg', 'a'), 'b') => ('fneg', ('fmul', 'a', 'b')) - * ('fmulz(is_used_by_non_fsat)', ('fneg', 'a'), 'b') => ('fneg', ('fmulz', 'a', 'b')) - * ('ffma', ('fneg', 'a'), ('fneg', 'b'), 'c') => ('ffma', 'a', 'b', 'c') - * ('ffmaz', ('fneg', 'a'), ('fneg', 'b'), 'c') => ('ffmaz', 'a', 'b', 'c') - * ('imul', ('ineg', 'a'), 'b') => ('ineg', ('imul', 'a', 'b')) - * ('~fmul(is_used_once)', ('fmul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('fmul', ('fmul', 'a', 'c'), 'b') - * ('~fmulz(is_used_once)', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('fmulz', ('fmulz', 'a', 'c'), 'b') - * ('~fmul(is_used_once)', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c(is_finite_not_zero)') => ('fmulz', ('fmul', 'a', 'c'), 'b') - * ('imul(is_used_once)', ('imul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('imul', ('imul', 'a', 'c'), 'b') - * ('~ffma', ('fmul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c', 'd') => ('ffma', ('fmul', 'a', 'c'), 'b', 'd') - * ('~ffmaz', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c', 'd') => ('ffmaz', ('fmulz', 'a', 'c'), 'b', 'd') - * ('~ffma', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c(is_finite_not_zero)', 'd') => ('ffmaz', ('fmul', 'a', 'c'), 'b', 'd') - * ('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', 'b(is_fmul)'), '#c') => ('fadd', ('fadd', 'a', 'c'), 'b') - * ('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('fadd', ('fadd', 'a', 'c'), 'b') - * ('~fadd(is_used_once)', ('ffma(is_used_once)', 'a(is_not_const)', 'b', 'c(is_not_const)'), '#d') => ('fadd', ('ffma', 'a', 'b', 'd'), 'c') - * ('~fadd(is_used_once)', ('ffmaz(is_used_once)', 'a(is_not_const)', 'b', 'c(is_not_const)'), '#d') => ('fadd', ('ffmaz', 'a', 'b', 'd'), 'c') - * ('iadd(is_used_once)', ('iadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('iadd', ('iadd', 'a', 'c'), 'b') - * ('~fmul', '#a', ('fmul', 'b(is_not_const)', '#c')) => ('fmul', ('fmul', 'a', 'c'), 'b') - * ('~fmulz', '#a', ('fmulz', 'b(is_not_const)', '#c')) => ('fmulz', ('fmulz', 'a', 'c'), 'b') - * ('~fmul', '#a(is_finite_not_zero)', ('fmulz', 'b(is_not_const)', '#c')) => ('fmulz', ('fmul', 'a', 'c'), 'b') - * ('~ffma', '#a', ('fmul', 'b(is_not_const)', '#c'), 'd') => ('ffma', ('fmul', 'a', 'c'), 'b', 'd') - * ('~ffmaz', '#a', ('fmulz', 'b(is_not_const)', '#c'), 'd') => ('ffmaz', ('fmulz', 'a', 'c'), 'b', 'd') - * ('~ffmaz', '#a(is_finite_not_zero)', ('fmulz', 'b(is_not_const)', '#c'), 'd') => ('ffmaz', ('fmul', 'a', 'c'), 'b', 'd') - * ('imul', '#a', ('imul', 'b(is_not_const)', '#c')) => ('imul', ('imul', 'a', 'c'), 'b') - * ('~fadd', '#a', ('fadd', 'b(is_not_const)', '#c')) => ('fadd', ('fadd', 'a', 'c'), 'b') - * ('~fadd', '#a', ('fneg', ('fadd', 'b(is_not_const)', '#c'))) => ('fadd', ('fadd', 'a', ('fneg', 'c')), ('fneg', 'b')) - * ('~fadd', '#a', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d')) => ('ffma', 'b', 'c', ('fadd', 'a', 'd')) - * ('~fadd', '#a', ('fneg', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d'))) => ('ffma', ('fneg', 'b'), 'c', ('fadd', 'a', ('fneg', 'd'))) - * ('~fadd', '#a', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d')) => ('ffmaz', 'b', 'c', ('fadd', 'a', 'd')) - * ('~fadd', '#a', ('fneg', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d'))) => ('ffmaz', ('fneg', 'b'), 'c', ('fadd', 'a', ('fneg', 'd'))) - * ('iadd', '#a', ('iadd', 'b(is_not_const)', '#c')) => ('iadd', ('iadd', 'a', 'c'), 'b') - * ('iand', '#a', ('iand', 'b(is_not_const)', '#c')) => ('iand', ('iand', 'a', 'c'), 'b') - * ('ior', '#a', ('ior', 'b(is_not_const)', '#c')) => ('ior', ('ior', 'a', 'c'), 'b') - * ('ixor', '#a', ('ixor', 'b(is_not_const)', '#c')) => ('ixor', ('ixor', 'a', 'c'), 'b') - * ('~fadd', ('fadd(is_used_once)', 'a(is_fmul)', 'b(is_fmul)'), 'c(is_not_fmul)') => ('fadd', ('fadd', 'a', 'c'), 'b') - * ('idiv', ('imul(no_signed_wrap)', 'a', 'b'), 'b') => a - * ('bcsel', ('ige', ('find_lsb', 'a'), 0), ('find_lsb', 'a'), -1) => ('find_lsb', 'a') - * ('bcsel', ('ige', ('ifind_msb', 'a'), 0), ('ifind_msb', 'a'), -1) => ('ifind_msb', 'a') - * ('bcsel', ('ige', ('ufind_msb', 'a'), 0), ('ufind_msb', 'a'), -1) => ('ufind_msb', 'a') - * ('bcsel', ('ige', ('ifind_msb_rev', 'a'), 0), ('ifind_msb_rev', 'a'), -1) => ('ifind_msb_rev', 'a') - * ('bcsel', ('ige', ('ufind_msb_rev', 'a'), 0), ('ufind_msb_rev', 'a'), -1) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ine', 'a', 0), ('find_lsb', 'a'), -1) => ('find_lsb', 'a') - * ('bcsel', ('ine', 'a', 0), ('ifind_msb', 'a'), -1) => ('ifind_msb', 'a') - * ('bcsel', ('ine', 'a', 0), ('ufind_msb', 'a'), -1) => ('ufind_msb', 'a') - * ('bcsel', ('ine', 'a', 0), ('ifind_msb_rev', 'a'), -1) => ('ifind_msb_rev', 'a') - * ('bcsel', ('ine', 'a', 0), ('ufind_msb_rev', 'a'), -1) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ine', 'a', -1), ('ifind_msb', 'a'), -1) => ('ifind_msb', 'a') - * ('bcsel', ('ine', 'a', -1), ('ifind_msb_rev', 'a'), -1) => ('ifind_msb_rev', 'a') - * ('bcsel', ('ine', ('ifind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb', 'a'))), -1) => ('ifind_msb_rev', 'a') - * ('bcsel', ('ine', ('ufind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), -1) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ieq', ('ifind_msb', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ifind_msb', 'a')))) => ('ifind_msb_rev', 'a') - * ('bcsel', ('ieq', ('ufind_msb', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ine', ('ifind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb', 'a'))), ('ifind_msb', 'a')) => ('ifind_msb_rev', 'a') - * ('bcsel', ('ine', ('ufind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), ('ufind_msb', 'a')) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ieq', ('ifind_msb', 'a@32'), -1), ('ifind_msb', 'a'), ('iadd', 31, ('ineg', ('ifind_msb', 'a')))) => ('ifind_msb_rev', 'a') - * ('bcsel', ('ieq', ('ufind_msb', 'a@32'), -1), ('ufind_msb', 'a'), ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), -1) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ieq', 'a@32', 0), -1, ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), ('ufind_msb', 'a')) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ieq', 'a@32', 0), ('ufind_msb', 'a'), ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') - * ('bcsel', ('ine', ('ifind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a'))), -1) => ('ifind_msb', 'a') - * ('bcsel', ('ine', ('ufind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), -1) => ('ufind_msb', 'a') - * ('bcsel', ('ieq', ('ifind_msb_rev', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a')))) => ('ifind_msb', 'a') - * ('bcsel', ('ieq', ('ufind_msb_rev', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') - * ('bcsel', ('ine', ('ifind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a'))), ('ifind_msb_rev', 'a')) => ('ifind_msb', 'a') - * ('bcsel', ('ine', ('ufind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), ('ufind_msb_rev', 'a')) => ('ufind_msb', 'a') - * ('bcsel', ('ieq', ('ifind_msb_rev', 'a@32'), -1), ('ifind_msb_rev', 'a'), ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a')))) => ('ifind_msb', 'a') - * ('bcsel', ('ieq', ('ufind_msb_rev', 'a@32'), -1), ('ufind_msb_rev', 'a'), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') - * ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), -1) => ('ufind_msb', 'a') - * ('bcsel', ('ieq', 'a@32', 0), -1, ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') - * ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), ('ufind_msb_rev', 'a')) => ('ufind_msb', 'a') - * ('bcsel', ('ieq', 'a@32', 0), ('ufind_msb_rev', 'a'), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') - * ('find_lsb', ('bitfield_reverse', 'a')) => ('ufind_msb_rev', 'a') - * ('ufind_msb_rev', ('bitfield_reverse', 'a')) => ('find_lsb', 'a') - * ('ifind_msb', ('f2i32(is_used_once)', 'a')) => ('ufind_msb', ('f2i32', ('fabs', 'a'))) - * ('~fmul', ('bcsel(is_used_once)', 'c', -1.0, 1.0), 'b') => ('bcsel', 'c', ('fneg', 'b'), 'b') - * ('~fmul', ('bcsel(is_used_once)', 'c', 1.0, -1.0), 'b') => ('bcsel', 'c', 'b', ('fneg', 'b')) - * ('~fmulz', ('bcsel(is_used_once)', 'c', -1.0, 1.0), 'b') => ('bcsel', 'c', ('fneg', 'b'), 'b') - * ('~fmulz', ('bcsel(is_used_once)', 'c', 1.0, -1.0), 'b') => ('bcsel', 'c', 'b', ('fneg', 'b')) - * ('fabs', ('bcsel(is_used_once)', 'b', ('fneg', 'a'), 'a')) => ('fabs', 'a') - * ('fabs', ('bcsel(is_used_once)', 'b', 'a', ('fneg', 'a'))) => ('fabs', 'a') - * ('~bcsel', ('flt', 'a', 0.0), ('fneg', 'a'), 'a') => ('fabs', 'a') - * ('bcsel', 'a', ('bcsel', 'b', 'c', 'd'), 'd') => ('bcsel', ('iand', 'a', 'b'), 'c', 'd') - * ('bcsel', 'a', 'b', ('bcsel', 'c', 'b', 'd')) => ('bcsel', ('ior', 'a', 'c'), 'b', 'd') - * ('fmod', 'a', 'b') => ('fsub', 'a', ('fmul', 'b', ('ffloor', ('fdiv', 'a', 'b')))) - * ('frem', 'a', 'b') => ('fsub', 'a', ('fmul', 'b', ('ftrunc', ('fdiv', 'a', 'b')))) - * ('uadd_carry', 'a', 'b') => ('b2i', ('ult', ('iadd', 'a', 'b'), 'a')) - * ('usub_borrow', 'a', 'b') => ('b2i', ('ult', 'a', 'b')) - * ('bitfield_insert', 'base', 'insert', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'insert', ('bfi', ('bfm', 'bits', 'offset'), 'insert', 'base')) - * ('ihadd', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) - * ('uhadd', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) - * ('irhadd', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) - * ('urhadd', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) - * ('ihadd@64', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) - * ('uhadd@64', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) - * ('irhadd@64', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) - * ('urhadd@64', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) - * ('imul_32x16', 'a', 'b') => ('imul', 'a', ('extract_i16', 'b', 0)) - * ('umul_32x16', 'a', 'b') => ('imul', 'a', ('extract_u16', 'b', 0)) - * ('uadd_sat@64', 'a', 'b') => ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd', 'a', 'b')) - * ('uadd_sat', 'a', 'b') => ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd', 'a', 'b')) - * ('usub_sat', 'a', 'b') => ('bcsel', ('ult', 'a', 'b'), 0, ('isub', 'a', 'b')) - * ('usub_sat@64', 'a', 'b') => ('bcsel', ('ult', 'a', 'b'), 0, ('isub', 'a', 'b')) - * ('iadd_sat@64', 'a', 'b') => ('bcsel', ('iand', ('iand', ('ilt', 'a', 0), ('ilt', 'b', 0)), ('ige', ('iadd', 'a', 'b'), 0)), 9223372036854775808, ('bcsel', ('ior', ('ior', ('ilt', 'a', 0), ('ilt', 'b', 0)), ('ige', ('iadd', 'a', 'b'), 0)), ('iadd', 'a', 'b'), 9223372036854775807)) - * ('isub_sat@64', 'a', 'b') => ('bcsel', ('iand', ('iand', ('ilt', 'a', 0), ('ige', 'b', 0)), ('ige', ('isub', 'a', 'b'), 0)), 9223372036854775808, ('bcsel', ('ior', ('ior', ('ilt', 'a', 0), ('ige', 'b', 0)), ('ige', ('isub', 'a', 'b'), 0)), ('isub', 'a', 'b'), 9223372036854775807)) - * ('ilt', ('imax(is_used_once)', 'a@64', 'b@64'), 0) => ('ilt', ('imax', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) - * ('ilt', ('imin(is_used_once)', 'a@64', 'b@64'), 0) => ('ilt', ('imin', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) - * ('ige', ('imax(is_used_once)', 'a@64', 'b@64'), 0) => ('ige', ('imax', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) - * ('ige', ('imin(is_used_once)', 'a@64', 'b@64'), 0) => ('ige', ('imin', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) - * ('ilt', 'a@64', 0) => ('ilt', ('unpack_64_2x32_split_y', 'a'), 0) - * ('ige', 'a@64', 0) => ('ige', ('unpack_64_2x32_split_y', 'a'), 0) - * ('ine', 'a@64', 0) => ('ine', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')), 0) - * ('ieq', 'a@64', 0) => ('ieq', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')), 0) - * ('ult', 0, 'a@64') => ('ine', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')), 0) - * ('bitfield_insert', 'base', 'insert', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'insert', ('ior', ('iand', 'base', ('inot', ('ishl', ('isub', ('ishl', 1, 'bits'), 1), 'offset'))), ('iand', ('ishl', 'insert', 'offset'), ('ishl', ('isub', ('ishl', 1, 'bits'), 1), 'offset')))) - * ('bitfield_insert', 'base', 'insert', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'insert', ('bitfield_select', ('bfm', 'bits', 'offset'), ('ishl', 'insert', 'offset'), 'base')) - * ('ibitfield_extract', 'value', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'value', ('ibfe', 'value', 'offset', 'bits')) - * ('ubitfield_extract', 'value', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'value', ('ubfe', 'value', 'offset', 'bits')) - * ('bitfield_select', 'a', 'b', 0) => ('iand', 'a', 'b') - * ('bitfield_select', 'a', ('iand', 'a', 'b'), 'c') => ('bitfield_select', 'a', 'b', 'c') - * ('ubfe', 'value', 'offset', ('iand', 31, 'bits')) => ('ubfe', 'value', 'offset', 'bits') - * ('ubfe', 'value', ('iand', 31, 'offset'), 'bits') => ('ubfe', 'value', 'offset', 'bits') - * ('ibfe', 'value', 'offset', ('iand', 31, 'bits')) => ('ibfe', 'value', 'offset', 'bits') - * ('ibfe', 'value', ('iand', 31, 'offset'), 'bits') => ('ibfe', 'value', 'offset', 'bits') - * ('bfm', 'bits', ('iand', 31, 'offset')) => ('bfm', 'bits', 'offset') - * ('bfm', ('iand', 31, 'bits'), 'offset') => ('bfm', 'bits', 'offset') - * ('ult', 'a', ('umin', ('iand', 'a', 'b'), 'c')) => False - * ('ult', 31, ('umin', '#bits(is_ult_32)', 'a')) => False - * ('ubfe', 'value', 'offset', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset'))))) => ('ubfe', 'value', 'offset', 'width') - * ('ibfe', 'value', 'offset', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset'))))) => ('ibfe', 'value', 'offset', 'width') - * ('bfm', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset')))), 'offset') => ('bfm', 'width', 'offset') - * ('iadd@32', ('ishl', 1, 'a'), -1) => ('bfm', 'a', 0) - * ('ishl', ('bfm', 'a', 0), 'b') => ('bfm', 'a', 'b') - * ('ubfe', 'a', 'b', 0) => 0 - * ('ibfe', 'a', 'b', 0) => 0 - * ('ubfe', 'a', 0, '#b') => ('iand', 'a', ('ushr', 4294967295, ('ineg', 'b'))) - * ('b2i32', ('ine', ('ubfe', 'a', 'b', 1), 0)) => ('ubfe', 'a', 'b', 1) - * ('b2i32', ('ine', ('ibfe', 'a', 'b', 1), 0)) => ('ubfe', 'a', 'b', 1) - * ('ine', ('ibfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ine', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) - * ('ieq', ('ibfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ieq', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) - * ('ine', ('ubfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ine', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) - * ('ieq', ('ubfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ieq', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) - * ('ibitfield_extract', 'value', 'offset', 'bits') => ('bcsel', ('ieq', 0, 'bits'), 0, ('ishr', ('ishl', 'value', ('isub', ('isub', 32, 'bits'), 'offset')), ('isub', 32, 'bits'))) - * ('ubitfield_extract', 'value', 'offset', 'bits') => ('iand', ('ushr', 'value', 'offset'), ('bcsel', ('ieq', 'bits', 32), 4294967295, ('isub', ('ishl', 1, 'bits'), 1))) - * ('ifind_msb', 'value') => ('ufind_msb', ('bcsel', ('ilt', 'value', 0), ('inot', 'value'), 'value')) - * ('ifind_msb', 'value') => ('bcsel', ('ige', ('ifind_msb_rev', 'value'), 0), ('isub', 31, ('ifind_msb_rev', 'value')), ('ifind_msb_rev', 'value')) - * ('ifind_msb', 'value') => ('isub', 31, ('uclz', ('ixor', 'value', ('ishr', 'value', 31)))) - * ('ufind_msb', 'value@32') => ('bcsel', ('ige', ('ufind_msb_rev', 'value'), 0), ('isub', 31, ('ufind_msb_rev', 'value')), ('ufind_msb_rev', 'value')) - * ('ufind_msb', 'value@32') => ('isub', 31, ('uclz', 'value')) - * ('uclz', 'a') => ('umin', 32, ('ufind_msb_rev', 'a')) - * ('find_lsb', 'value@64') => ('ufind_msb', ('iand', 'value', ('ineg', 'value'))) - * ('find_lsb', 'value') => ('ufind_msb', ('u2u32', ('iand', 'value', ('ineg', 'value')))) - * ('extract_i8', 'a', 'b@32') => ('ishr', ('ishl', 'a', ('imul', ('isub', 3, 'b'), 8)), 24) - * ('extract_u8', 'a', 'b@32') => ('iand', ('ushr', 'a', ('imul', 'b', 8)), 255) - * ('extract_i16', 'a', 'b@32') => ('ishr', ('ishl', 'a', ('imul', ('isub', 1, 'b'), 16)), 16) - * ('extract_u16', 'a', 'b@32') => ('iand', ('ushr', 'a', ('imul', 'b', 16)), 65535) - * ('pack_unorm_2x16', 'v') => ('pack_uvec2_to_uint', ('f2u32', ('fround_even', ('fmul', ('fsat', 'v'), 65535.0)))) - * ('pack_unorm_4x8', 'v') => ('pack_uvec4_to_uint', ('f2u32', ('fround_even', ('fmul', ('fsat', 'v'), 255.0)))) - * ('pack_snorm_2x16', 'v') => ('pack_uvec2_to_uint', ('f2i32', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 32767.0)))) - * ('pack_snorm_4x8', 'v') => ('pack_uvec4_to_uint', ('f2i32', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 127.0)))) - * ('unpack_unorm_2x16', 'v') => ('fdiv', ('u2f32', ('vec2', ('extract_u16', 'v', 0), ('extract_u16', 'v', 1))), 65535.0) - * ('unpack_unorm_4x8', 'v') => ('fdiv', ('u2f32', ('vec4', ('extract_u8', 'v', 0), ('extract_u8', 'v', 1), ('extract_u8', 'v', 2), ('extract_u8', 'v', 3))), 255.0) - * ('unpack_snorm_2x16', 'v') => ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec2', ('extract_i16', 'v', 0), ('extract_i16', 'v', 1))), 32767.0))) - * ('unpack_snorm_4x8', 'v') => ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec4', ('extract_i8', 'v', 0), ('extract_i8', 'v', 1), ('extract_i8', 'v', 2), ('extract_i8', 'v', 3))), 127.0))) - * ('pack_half_2x16_split', 'a@32', 'b@32') => ('ior', ('ishl', ('u2u32', ('f2f16', 'b')), 16), ('u2u32', ('f2f16', 'a'))) - * ('unpack_half_2x16_split_x', 'a@32') => ('f2f32', ('u2u16', 'a')) - * ('unpack_half_2x16_split_y', 'a@32') => ('f2f32', ('u2u16', ('ushr', 'a', 16))) - * ('pack_32_2x16_split', 'a@16', 'b@16') => ('ior', ('ishl', ('u2u32', 'b'), 16), ('u2u32', 'a')) - * ('unpack_32_2x16_split_x', 'a@32') => ('u2u16', 'a') - * ('unpack_32_2x16_split_y', 'a@32') => ('u2u16', ('ushr', 'a', 16)) - * ('isign', 'a') => ('imin', ('imax', 'a', -1), 1) - * ('imin', ('imax', 'a', -1), 1) => ('isign', 'a') - * ('imax', ('imin', 'a', 1), -1) => ('isign', 'a') - * ('fsign', 'a') => ('fsub', ('b2f', ('!flt', 0.0, 'a')), ('b2f', ('!flt', 'a', 0.0))) - * ('amul', 'a', 'b') => ('imul', 'a', 'b') - * ('umul24', 'a', 'b') => ('imul', ('iand', 'a', 16777215), ('iand', 'b', 16777215)) - * ('umad24', 'a', 'b', 'c') => ('iadd', ('imul', ('iand', 'a', 16777215), ('iand', 'b', 16777215)), 'c') - * ('imul24_relaxed', 'a', 'b') => ('imul24', 'a', 'b') - * ('imul24_relaxed', 'a', 'b') => ('imul', 'a', 'b') - * ('umad24_relaxed', 'a', 'b', 'c') => ('umad24', 'a', 'b', 'c') - * ('umad24_relaxed', 'a', 'b', 'c') => ('iadd', ('umul24_relaxed', 'a', 'b'), 'c') - * ('umul24_relaxed', 'a', 'b') => ('umul24', 'a', 'b') - * ('umul24_relaxed', 'a', 'b') => ('imul', 'a', 'b') - * ('imad24_ir3', 'a', 'b', 0) => ('imul24', 'a', 'b') - * ('imad24_ir3', 'a', 0, 'c') => c - * ('imad24_ir3', 'a', 1, 'c') => ('iadd', 'a', 'c') - * ('imad24_ir3', '#a', '#b', 'c') => ('iadd', ('imul', 'a', 'b'), 'c') - * ('imul24', 'a', '#b@32(is_pos_power_of_two)') => ('ishl', 'a', ('find_lsb', 'b')) - * ('imul24', 'a', '#b@32(is_neg_power_of_two)') => ('ineg', ('ishl', 'a', ('find_lsb', ('iabs', 'b')))) - * ('imul24', 'a', 0) => 0 - * ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@8', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@8', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@8', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@8', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@16', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@16', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@16', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@16', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@32', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@32', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@32', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@32', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@64', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@64', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@64', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@64', 'a', 'b')) => ('uadd_sat', 'a', 'b') - * ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@8', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('bcsel', ('uge', 'a', 'b'), ('iadd@8', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@8', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@8', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@16', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('bcsel', ('uge', 'a', 'b'), ('iadd@16', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@16', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@16', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@32', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('bcsel', ('uge', 'a', 'b'), ('iadd@32', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@32', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@32', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@64', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('bcsel', ('uge', 'a', 'b'), ('iadd@64', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@64', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') - * ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@64', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') - * ('iadd_sat@8', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 127, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 128, ('iadd', 'a', 'b'))) - * ('isub_sat@8', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 127, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 128, ('isub', 'a', 'b'))) - * ('iadd_sat@16', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 32767, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 32768, ('iadd', 'a', 'b'))) - * ('isub_sat@16', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 32767, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 32768, ('isub', 'a', 'b'))) - * ('iadd_sat@32', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 2147483647, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 2147483648, ('iadd', 'a', 'b'))) - * ('isub_sat@32', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 2147483647, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 2147483648, ('isub', 'a', 'b'))) - * ('iadd_sat@64', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 9223372036854775807, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 9223372036854775808, ('iadd', 'a', 'b'))) - * ('isub_sat@64', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 9223372036854775807, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 9223372036854775808, ('isub', 'a', 'b'))) - * ('inot', ('ior(is_used_once)', ('feq', 'a', 'b'), ('feq', 'c', 'd'))) => ('iand', ('fneu', 'a', 'b'), ('fneu', 'c', 'd')) - * ('inot', ('iand(is_used_once)', ('feq', 'a', 'b'), ('feq', 'c', 'd'))) => ('ior', ('fneu', 'a', 'b'), ('fneu', 'c', 'd')) - * ('inot', ('ior(is_used_once)', ('feq', 'a', 'b'), ('fneu', 'c', 'd'))) => ('iand', ('fneu', 'a', 'b'), ('feq', 'c', 'd')) - * ('inot', ('iand(is_used_once)', ('feq', 'a', 'b'), ('fneu', 'c', 'd'))) => ('ior', ('fneu', 'a', 'b'), ('feq', 'c', 'd')) - * ('inot', ('ior(is_used_once)', ('fneu', 'a', 'b'), ('fneu', 'c', 'd'))) => ('iand', ('feq', 'a', 'b'), ('feq', 'c', 'd')) - * ('inot', ('iand(is_used_once)', ('fneu', 'a', 'b'), ('fneu', 'c', 'd'))) => ('ior', ('feq', 'a', 'b'), ('feq', 'c', 'd')) - * ('f2f', ('b2f', 'a')) => ('b2f', 'a') - * ('f2u', ('b2f', 'a')) => ('b2i', 'a') - * ('f2i', ('b2f', 'a')) => ('b2i', 'a') - * ('u2f', ('b2i', 'a')) => ('b2f', 'a') - * ('u2u', ('b2i', 'a')) => ('b2i', 'a') - * ('i2f', ('b2i', 'a')) => ('b2f', 'a') - * ('i2i', ('b2i', 'a')) => ('b2i', 'a') - * ('i2i1', 'a@1') => a - * ('i2i8', 'a@8') => a - * ('i2i16', 'a@16') => a - * ('i2i32', 'a@32') => a - * ('i2i64', 'a@64') => a - * ('u2u1', 'a@1') => a - * ('u2u8', 'a@8') => a - * ('u2u16', 'a@16') => a - * ('u2u32', 'a@32') => a - * ('u2u64', 'a@64') => a - * ('f2f16', 'a@16') => a - * ('f2f32', 'a@32') => a - * ('f2f64', 'a@64') => a - * ('b2b1', 'a@1') => a - * ('b2b8', 'a@8') => a - * ('b2b16', 'a@16') => a - * ('b2b32', 'a@32') => a - * ('i2i1', ('i2i8', 'a')) => ('i2i1', 'a') - * ('i2i1', ('u2u8', 'a')) => ('u2u1', 'a') - * ('u2u1', ('i2i8', 'a')) => ('i2i1', 'a') - * ('u2u1', ('u2u8', 'a')) => ('u2u1', 'a') - * ('i2i1', ('i2i16', 'a')) => ('i2i1', 'a') - * ('i2i1', ('u2u16', 'a')) => ('u2u1', 'a') - * ('u2u1', ('i2i16', 'a')) => ('i2i1', 'a') - * ('u2u1', ('u2u16', 'a')) => ('u2u1', 'a') - * ('i2i1', ('i2i32', 'a')) => ('i2i1', 'a') - * ('i2i1', ('u2u32', 'a')) => ('u2u1', 'a') - * ('u2u1', ('i2i32', 'a')) => ('i2i1', 'a') - * ('u2u1', ('u2u32', 'a')) => ('u2u1', 'a') - * ('i2i1', ('i2i64', 'a')) => ('i2i1', 'a') - * ('i2i1', ('u2u64', 'a')) => ('u2u1', 'a') - * ('u2u1', ('i2i64', 'a')) => ('i2i1', 'a') - * ('u2u1', ('u2u64', 'a')) => ('u2u1', 'a') - * ('i2i8', ('i2i1', 'a@1')) => ('i2i8', 'a') - * ('u2u8', ('u2u1', 'a@1')) => ('u2u8', 'a') - * ('i2i8', ('i2i16', 'a')) => ('i2i8', 'a') - * ('i2i8', ('u2u16', 'a')) => ('u2u8', 'a') - * ('u2u8', ('i2i16', 'a')) => ('i2i8', 'a') - * ('u2u8', ('u2u16', 'a')) => ('u2u8', 'a') - * ('i2i8', ('i2i32', 'a')) => ('i2i8', 'a') - * ('i2i8', ('u2u32', 'a')) => ('u2u8', 'a') - * ('u2u8', ('i2i32', 'a')) => ('i2i8', 'a') - * ('u2u8', ('u2u32', 'a')) => ('u2u8', 'a') - * ('i2i8', ('i2i64', 'a')) => ('i2i8', 'a') - * ('i2i8', ('u2u64', 'a')) => ('u2u8', 'a') - * ('u2u8', ('i2i64', 'a')) => ('i2i8', 'a') - * ('u2u8', ('u2u64', 'a')) => ('u2u8', 'a') - * ('i2i16', ('i2i1', 'a@1')) => ('i2i16', 'a') - * ('u2u16', ('u2u1', 'a@1')) => ('u2u16', 'a') - * ('i2i16', ('i2i8', 'a@1')) => ('i2i16', 'a') - * ('u2u16', ('u2u8', 'a@1')) => ('u2u16', 'a') - * ('i2i16', ('i2i8', 'a@8')) => ('i2i16', 'a') - * ('u2u16', ('u2u8', 'a@8')) => ('u2u16', 'a') - * ('i2i16', ('i2i32', 'a')) => ('i2i16', 'a') - * ('i2i16', ('u2u32', 'a')) => ('u2u16', 'a') - * ('u2u16', ('i2i32', 'a')) => ('i2i16', 'a') - * ('u2u16', ('u2u32', 'a')) => ('u2u16', 'a') - * ('i2i16', ('i2i64', 'a')) => ('i2i16', 'a') - * ('i2i16', ('u2u64', 'a')) => ('u2u16', 'a') - * ('u2u16', ('i2i64', 'a')) => ('i2i16', 'a') - * ('u2u16', ('u2u64', 'a')) => ('u2u16', 'a') - * ('i2i32', ('i2i1', 'a@1')) => ('i2i32', 'a') - * ('u2u32', ('u2u1', 'a@1')) => ('u2u32', 'a') - * ('i2i32', ('i2i8', 'a@1')) => ('i2i32', 'a') - * ('u2u32', ('u2u8', 'a@1')) => ('u2u32', 'a') - * ('i2i32', ('i2i8', 'a@8')) => ('i2i32', 'a') - * ('u2u32', ('u2u8', 'a@8')) => ('u2u32', 'a') - * ('i2i32', ('i2i16', 'a@1')) => ('i2i32', 'a') - * ('u2u32', ('u2u16', 'a@1')) => ('u2u32', 'a') - * ('i2i32', ('i2i16', 'a@8')) => ('i2i32', 'a') - * ('u2u32', ('u2u16', 'a@8')) => ('u2u32', 'a') - * ('i2i32', ('i2i16', 'a@16')) => ('i2i32', 'a') - * ('u2u32', ('u2u16', 'a@16')) => ('u2u32', 'a') - * ('i2i32', ('i2i64', 'a')) => ('i2i32', 'a') - * ('i2i32', ('u2u64', 'a')) => ('u2u32', 'a') - * ('u2u32', ('i2i64', 'a')) => ('i2i32', 'a') - * ('u2u32', ('u2u64', 'a')) => ('u2u32', 'a') - * ('i2i64', ('i2i1', 'a@1')) => ('i2i64', 'a') - * ('u2u64', ('u2u1', 'a@1')) => ('u2u64', 'a') - * ('i2i64', ('i2i8', 'a@1')) => ('i2i64', 'a') - * ('u2u64', ('u2u8', 'a@1')) => ('u2u64', 'a') - * ('i2i64', ('i2i8', 'a@8')) => ('i2i64', 'a') - * ('u2u64', ('u2u8', 'a@8')) => ('u2u64', 'a') - * ('i2i64', ('i2i16', 'a@1')) => ('i2i64', 'a') - * ('u2u64', ('u2u16', 'a@1')) => ('u2u64', 'a') - * ('i2i64', ('i2i16', 'a@8')) => ('i2i64', 'a') - * ('u2u64', ('u2u16', 'a@8')) => ('u2u64', 'a') - * ('i2i64', ('i2i16', 'a@16')) => ('i2i64', 'a') - * ('u2u64', ('u2u16', 'a@16')) => ('u2u64', 'a') - * ('i2i64', ('i2i32', 'a@1')) => ('i2i64', 'a') - * ('u2u64', ('u2u32', 'a@1')) => ('u2u64', 'a') - * ('i2i64', ('i2i32', 'a@8')) => ('i2i64', 'a') - * ('u2u64', ('u2u32', 'a@8')) => ('u2u64', 'a') - * ('i2i64', ('i2i32', 'a@16')) => ('i2i64', 'a') - * ('u2u64', ('u2u32', 'a@16')) => ('u2u64', 'a') - * ('i2i64', ('i2i32', 'a@32')) => ('i2i64', 'a') - * ('u2u64', ('u2u32', 'a@32')) => ('u2u64', 'a') - * ('i2i8', ('pack_64_2x32_split', 'a', 'b')) => ('i2i8', 'a') - * ('i2i8', ('pack_64_2x32_split', 'a', 'b')) => ('i2i8', 'a') - * ('i2i16', ('pack_64_2x32_split', 'a', 'b')) => ('i2i16', 'a') - * ('i2i16', ('pack_64_2x32_split', 'a', 'b')) => ('i2i16', 'a') - * ('i2i32', ('pack_64_2x32_split', 'a', 'b')) => ('i2i32', 'a') - * ('i2i32', ('pack_64_2x32_split', 'a', 'b')) => ('i2i32', 'a') - * ('u2u8', ('pack_64_2x32_split', 'a', 'b')) => ('u2u8', 'a') - * ('u2u8', ('pack_64_2x32_split', 'a', 'b')) => ('u2u8', 'a') - * ('u2u16', ('pack_64_2x32_split', 'a', 'b')) => ('u2u16', 'a') - * ('u2u16', ('pack_64_2x32_split', 'a', 'b')) => ('u2u16', 'a') - * ('u2u32', ('pack_64_2x32_split', 'a', 'b')) => ('u2u32', 'a') - * ('u2u32', ('pack_64_2x32_split', 'a', 'b')) => ('u2u32', 'a') - * ('ieq', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ieq', 'a', ('i2i8', 'b')) - * ('ine', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ine', 'a', ('i2i8', 'b')) - * ('ige', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ige', 'a', ('i2i8', 'b')) - * ('ilt', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ilt', 'a', ('i2i8', 'b')) - * ('ige', ('i2i16', 'b@8'), ('i2i16', 'a@8')) => ('ige', ('i2i8', 'b'), 'a') - * ('ilt', ('i2i16', 'b@8'), ('i2i16', 'a@8')) => ('ilt', ('i2i8', 'b'), 'a') - * ('ieq', ('i2i16', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('i2i8', 'b')), ('ieq', ('i2i16', ('i2i8', 'b')), 'b')) - * ('ine', ('i2i16', 'a@8'), '#b') => ('ior', ('ine', 'a', ('i2i8', 'b')), ('ine', ('i2i16', ('i2i8', 'b')), 'b')) - * ('ilt', ('i2i16', 'a@8'), '#b') => ('iand', ('ilt', -128, 'b'), ('ior', ('ilt', 127, 'b'), ('ilt', 'a', ('i2i8', 'b')))) - * ('ilt', '#a', ('i2i16', 'b@8')) => ('iand', ('ilt', 'a', 127), ('ior', ('ilt', 'a', -128), ('ilt', ('i2i8', 'a'), 'b'))) - * ('ige', ('i2i16', 'a@8'), '#b') => ('iand', ('ige', 127, 'b'), ('ior', ('ige', -128, 'b'), ('ige', 'a', ('i2i8', 'b')))) - * ('ige', '#a', ('i2i16', 'b@8')) => ('iand', ('ige', 'a', -128), ('ior', ('ige', 'a', 127), ('ige', ('i2i8', 'a'), 'b'))) - * ('ieq', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ieq', 'a', ('i2i8', 'b')) - * ('ine', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ine', 'a', ('i2i8', 'b')) - * ('ige', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ige', 'a', ('i2i8', 'b')) - * ('ilt', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ilt', 'a', ('i2i8', 'b')) - * ('ige', ('i2i32', 'b@8'), ('i2i32', 'a@8')) => ('ige', ('i2i8', 'b'), 'a') - * ('ilt', ('i2i32', 'b@8'), ('i2i32', 'a@8')) => ('ilt', ('i2i8', 'b'), 'a') - * ('ieq', ('i2i32', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('i2i8', 'b')), ('ieq', ('i2i32', ('i2i8', 'b')), 'b')) - * ('ine', ('i2i32', 'a@8'), '#b') => ('ior', ('ine', 'a', ('i2i8', 'b')), ('ine', ('i2i32', ('i2i8', 'b')), 'b')) - * ('ilt', ('i2i32', 'a@8'), '#b') => ('iand', ('ilt', -128, 'b'), ('ior', ('ilt', 127, 'b'), ('ilt', 'a', ('i2i8', 'b')))) - * ('ilt', '#a', ('i2i32', 'b@8')) => ('iand', ('ilt', 'a', 127), ('ior', ('ilt', 'a', -128), ('ilt', ('i2i8', 'a'), 'b'))) - * ('ige', ('i2i32', 'a@8'), '#b') => ('iand', ('ige', 127, 'b'), ('ior', ('ige', -128, 'b'), ('ige', 'a', ('i2i8', 'b')))) - * ('ige', '#a', ('i2i32', 'b@8')) => ('iand', ('ige', 'a', -128), ('ior', ('ige', 'a', 127), ('ige', ('i2i8', 'a'), 'b'))) - * ('ieq', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ieq', 'a', ('i2i8', 'b')) - * ('ine', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ine', 'a', ('i2i8', 'b')) - * ('ige', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ige', 'a', ('i2i8', 'b')) - * ('ilt', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ilt', 'a', ('i2i8', 'b')) - * ('ige', ('i2i64', 'b@8'), ('i2i64', 'a@8')) => ('ige', ('i2i8', 'b'), 'a') - * ('ilt', ('i2i64', 'b@8'), ('i2i64', 'a@8')) => ('ilt', ('i2i8', 'b'), 'a') - * ('ieq', ('i2i64', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('i2i8', 'b')), ('ieq', ('i2i64', ('i2i8', 'b')), 'b')) - * ('ine', ('i2i64', 'a@8'), '#b') => ('ior', ('ine', 'a', ('i2i8', 'b')), ('ine', ('i2i64', ('i2i8', 'b')), 'b')) - * ('ilt', ('i2i64', 'a@8'), '#b') => ('iand', ('ilt', -128, 'b'), ('ior', ('ilt', 127, 'b'), ('ilt', 'a', ('i2i8', 'b')))) - * ('ilt', '#a', ('i2i64', 'b@8')) => ('iand', ('ilt', 'a', 127), ('ior', ('ilt', 'a', -128), ('ilt', ('i2i8', 'a'), 'b'))) - * ('ige', ('i2i64', 'a@8'), '#b') => ('iand', ('ige', 127, 'b'), ('ior', ('ige', -128, 'b'), ('ige', 'a', ('i2i8', 'b')))) - * ('ige', '#a', ('i2i64', 'b@8')) => ('iand', ('ige', 'a', -128), ('ior', ('ige', 'a', 127), ('ige', ('i2i8', 'a'), 'b'))) - * ('ieq', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ieq', 'a', ('i2i16', 'b')) - * ('ine', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ine', 'a', ('i2i16', 'b')) - * ('ige', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ige', 'a', ('i2i16', 'b')) - * ('ilt', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ilt', 'a', ('i2i16', 'b')) - * ('ige', ('i2i32', 'b@8'), ('i2i32', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') - * ('ilt', ('i2i32', 'b@8'), ('i2i32', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') - * ('ieq', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ieq', 'a', ('i2i16', 'b')) - * ('ine', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ine', 'a', ('i2i16', 'b')) - * ('ige', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ige', 'a', ('i2i16', 'b')) - * ('ilt', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ilt', 'a', ('i2i16', 'b')) - * ('ige', ('i2i32', 'b@16'), ('i2i32', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') - * ('ilt', ('i2i32', 'b@16'), ('i2i32', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') - * ('ieq', ('i2i32', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('i2i16', 'b')), ('ieq', ('i2i32', ('i2i16', 'b')), 'b')) - * ('ine', ('i2i32', 'a@16'), '#b') => ('ior', ('ine', 'a', ('i2i16', 'b')), ('ine', ('i2i32', ('i2i16', 'b')), 'b')) - * ('ilt', ('i2i32', 'a@16'), '#b') => ('iand', ('ilt', -32768, 'b'), ('ior', ('ilt', 32767, 'b'), ('ilt', 'a', ('i2i16', 'b')))) - * ('ilt', '#a', ('i2i32', 'b@16')) => ('iand', ('ilt', 'a', 32767), ('ior', ('ilt', 'a', -32768), ('ilt', ('i2i16', 'a'), 'b'))) - * ('ige', ('i2i32', 'a@16'), '#b') => ('iand', ('ige', 32767, 'b'), ('ior', ('ige', -32768, 'b'), ('ige', 'a', ('i2i16', 'b')))) - * ('ige', '#a', ('i2i32', 'b@16')) => ('iand', ('ige', 'a', -32768), ('ior', ('ige', 'a', 32767), ('ige', ('i2i16', 'a'), 'b'))) - * ('ieq', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ieq', 'a', ('i2i16', 'b')) - * ('ine', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ine', 'a', ('i2i16', 'b')) - * ('ige', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ige', 'a', ('i2i16', 'b')) - * ('ilt', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ilt', 'a', ('i2i16', 'b')) - * ('ige', ('i2i64', 'b@8'), ('i2i64', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') - * ('ilt', ('i2i64', 'b@8'), ('i2i64', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') - * ('ieq', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ieq', 'a', ('i2i16', 'b')) - * ('ine', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ine', 'a', ('i2i16', 'b')) - * ('ige', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ige', 'a', ('i2i16', 'b')) - * ('ilt', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ilt', 'a', ('i2i16', 'b')) - * ('ige', ('i2i64', 'b@16'), ('i2i64', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') - * ('ilt', ('i2i64', 'b@16'), ('i2i64', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') - * ('ieq', ('i2i64', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('i2i16', 'b')), ('ieq', ('i2i64', ('i2i16', 'b')), 'b')) - * ('ine', ('i2i64', 'a@16'), '#b') => ('ior', ('ine', 'a', ('i2i16', 'b')), ('ine', ('i2i64', ('i2i16', 'b')), 'b')) - * ('ilt', ('i2i64', 'a@16'), '#b') => ('iand', ('ilt', -32768, 'b'), ('ior', ('ilt', 32767, 'b'), ('ilt', 'a', ('i2i16', 'b')))) - * ('ilt', '#a', ('i2i64', 'b@16')) => ('iand', ('ilt', 'a', 32767), ('ior', ('ilt', 'a', -32768), ('ilt', ('i2i16', 'a'), 'b'))) - * ('ige', ('i2i64', 'a@16'), '#b') => ('iand', ('ige', 32767, 'b'), ('ior', ('ige', -32768, 'b'), ('ige', 'a', ('i2i16', 'b')))) - * ('ige', '#a', ('i2i64', 'b@16')) => ('iand', ('ige', 'a', -32768), ('ior', ('ige', 'a', 32767), ('ige', ('i2i16', 'a'), 'b'))) - * ('ieq', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ieq', 'a', ('i2i32', 'b')) - * ('ine', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ine', 'a', ('i2i32', 'b')) - * ('ige', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ige', 'a', ('i2i32', 'b')) - * ('ilt', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ilt', 'a', ('i2i32', 'b')) - * ('ige', ('i2i64', 'b@8'), ('i2i64', 'a@32')) => ('ige', ('i2i32', 'b'), 'a') - * ('ilt', ('i2i64', 'b@8'), ('i2i64', 'a@32')) => ('ilt', ('i2i32', 'b'), 'a') - * ('ieq', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ieq', 'a', ('i2i32', 'b')) - * ('ine', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ine', 'a', ('i2i32', 'b')) - * ('ige', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ige', 'a', ('i2i32', 'b')) - * ('ilt', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ilt', 'a', ('i2i32', 'b')) - * ('ige', ('i2i64', 'b@16'), ('i2i64', 'a@32')) => ('ige', ('i2i32', 'b'), 'a') - * ('ilt', ('i2i64', 'b@16'), ('i2i64', 'a@32')) => ('ilt', ('i2i32', 'b'), 'a') - * ('ieq', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ieq', 'a', ('i2i32', 'b')) - * ('ine', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ine', 'a', ('i2i32', 'b')) - * ('ige', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ige', 'a', ('i2i32', 'b')) - * ('ilt', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ilt', 'a', ('i2i32', 'b')) - * ('ige', ('i2i64', 'b@32'), ('i2i64', 'a@32')) => ('ige', ('i2i32', 'b'), 'a') - * ('ilt', ('i2i64', 'b@32'), ('i2i64', 'a@32')) => ('ilt', ('i2i32', 'b'), 'a') - * ('ieq', ('i2i64', 'a@32'), '#b') => ('iand', ('ieq', 'a', ('i2i32', 'b')), ('ieq', ('i2i64', ('i2i32', 'b')), 'b')) - * ('ine', ('i2i64', 'a@32'), '#b') => ('ior', ('ine', 'a', ('i2i32', 'b')), ('ine', ('i2i64', ('i2i32', 'b')), 'b')) - * ('ilt', ('i2i64', 'a@32'), '#b') => ('iand', ('ilt', -2147483648, 'b'), ('ior', ('ilt', 2147483647, 'b'), ('ilt', 'a', ('i2i32', 'b')))) - * ('ilt', '#a', ('i2i64', 'b@32')) => ('iand', ('ilt', 'a', 2147483647), ('ior', ('ilt', 'a', -2147483648), ('ilt', ('i2i32', 'a'), 'b'))) - * ('ige', ('i2i64', 'a@32'), '#b') => ('iand', ('ige', 2147483647, 'b'), ('ior', ('ige', -2147483648, 'b'), ('ige', 'a', ('i2i32', 'b')))) - * ('ige', '#a', ('i2i64', 'b@32')) => ('iand', ('ige', 'a', -2147483648), ('ior', ('ige', 'a', 2147483647), ('ige', ('i2i32', 'a'), 'b'))) - * ('ieq', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('ieq', 'a', ('u2u8', 'b')) - * ('ine', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('ine', 'a', ('u2u8', 'b')) - * ('uge', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('uge', 'a', ('u2u8', 'b')) - * ('ult', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('ult', 'a', ('u2u8', 'b')) - * ('uge', ('u2u16', 'b@8'), ('u2u16', 'a@8')) => ('uge', ('u2u8', 'b'), 'a') - * ('ult', ('u2u16', 'b@8'), ('u2u16', 'a@8')) => ('ult', ('u2u8', 'b'), 'a') - * ('ieq', ('u2u16', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('u2u8', 'b')), ('ieq', ('u2u16', ('u2u8', 'b')), 'b')) - * ('ine', ('u2u16', 'a@8'), '#b') => ('ior', ('ine', 'a', ('u2u8', 'b')), ('ine', ('u2u16', ('u2u8', 'b')), 'b')) - * ('ult', ('u2u16', 'a@8'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 255, 'b'), ('ult', 'a', ('u2u8', 'b')))) - * ('ult', '#a', ('u2u16', 'b@8')) => ('iand', ('ult', 'a', 255), ('ior', ('ult', 'a', 0), ('ult', ('u2u8', 'a'), 'b'))) - * ('uge', ('u2u16', 'a@8'), '#b') => ('iand', ('uge', 255, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u8', 'b')))) - * ('uge', '#a', ('u2u16', 'b@8')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 255), ('uge', ('u2u8', 'a'), 'b'))) - * ('ieq', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('ieq', 'a', ('u2u8', 'b')) - * ('ine', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('ine', 'a', ('u2u8', 'b')) - * ('uge', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('uge', 'a', ('u2u8', 'b')) - * ('ult', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('ult', 'a', ('u2u8', 'b')) - * ('uge', ('u2u32', 'b@8'), ('u2u32', 'a@8')) => ('uge', ('u2u8', 'b'), 'a') - * ('ult', ('u2u32', 'b@8'), ('u2u32', 'a@8')) => ('ult', ('u2u8', 'b'), 'a') - * ('ieq', ('u2u32', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('u2u8', 'b')), ('ieq', ('u2u32', ('u2u8', 'b')), 'b')) - * ('ine', ('u2u32', 'a@8'), '#b') => ('ior', ('ine', 'a', ('u2u8', 'b')), ('ine', ('u2u32', ('u2u8', 'b')), 'b')) - * ('ult', ('u2u32', 'a@8'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 255, 'b'), ('ult', 'a', ('u2u8', 'b')))) - * ('ult', '#a', ('u2u32', 'b@8')) => ('iand', ('ult', 'a', 255), ('ior', ('ult', 'a', 0), ('ult', ('u2u8', 'a'), 'b'))) - * ('uge', ('u2u32', 'a@8'), '#b') => ('iand', ('uge', 255, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u8', 'b')))) - * ('uge', '#a', ('u2u32', 'b@8')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 255), ('uge', ('u2u8', 'a'), 'b'))) - * ('ieq', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('ieq', 'a', ('u2u8', 'b')) - * ('ine', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('ine', 'a', ('u2u8', 'b')) - * ('uge', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('uge', 'a', ('u2u8', 'b')) - * ('ult', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('ult', 'a', ('u2u8', 'b')) - * ('uge', ('u2u64', 'b@8'), ('u2u64', 'a@8')) => ('uge', ('u2u8', 'b'), 'a') - * ('ult', ('u2u64', 'b@8'), ('u2u64', 'a@8')) => ('ult', ('u2u8', 'b'), 'a') - * ('ieq', ('u2u64', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('u2u8', 'b')), ('ieq', ('u2u64', ('u2u8', 'b')), 'b')) - * ('ine', ('u2u64', 'a@8'), '#b') => ('ior', ('ine', 'a', ('u2u8', 'b')), ('ine', ('u2u64', ('u2u8', 'b')), 'b')) - * ('ult', ('u2u64', 'a@8'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 255, 'b'), ('ult', 'a', ('u2u8', 'b')))) - * ('ult', '#a', ('u2u64', 'b@8')) => ('iand', ('ult', 'a', 255), ('ior', ('ult', 'a', 0), ('ult', ('u2u8', 'a'), 'b'))) - * ('uge', ('u2u64', 'a@8'), '#b') => ('iand', ('uge', 255, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u8', 'b')))) - * ('uge', '#a', ('u2u64', 'b@8')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 255), ('uge', ('u2u8', 'a'), 'b'))) - * ('ieq', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('ieq', 'a', ('u2u16', 'b')) - * ('ine', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('ine', 'a', ('u2u16', 'b')) - * ('uge', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('uge', 'a', ('u2u16', 'b')) - * ('ult', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('ult', 'a', ('u2u16', 'b')) - * ('uge', ('u2u32', 'b@8'), ('u2u32', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') - * ('ult', ('u2u32', 'b@8'), ('u2u32', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') - * ('ieq', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('ieq', 'a', ('u2u16', 'b')) - * ('ine', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('ine', 'a', ('u2u16', 'b')) - * ('uge', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('uge', 'a', ('u2u16', 'b')) - * ('ult', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('ult', 'a', ('u2u16', 'b')) - * ('uge', ('u2u32', 'b@16'), ('u2u32', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') - * ('ult', ('u2u32', 'b@16'), ('u2u32', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') - * ('ieq', ('u2u32', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('u2u16', 'b')), ('ieq', ('u2u32', ('u2u16', 'b')), 'b')) - * ('ine', ('u2u32', 'a@16'), '#b') => ('ior', ('ine', 'a', ('u2u16', 'b')), ('ine', ('u2u32', ('u2u16', 'b')), 'b')) - * ('ult', ('u2u32', 'a@16'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 65535, 'b'), ('ult', 'a', ('u2u16', 'b')))) - * ('ult', '#a', ('u2u32', 'b@16')) => ('iand', ('ult', 'a', 65535), ('ior', ('ult', 'a', 0), ('ult', ('u2u16', 'a'), 'b'))) - * ('uge', ('u2u32', 'a@16'), '#b') => ('iand', ('uge', 65535, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u16', 'b')))) - * ('uge', '#a', ('u2u32', 'b@16')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 65535), ('uge', ('u2u16', 'a'), 'b'))) - * ('ieq', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('ieq', 'a', ('u2u16', 'b')) - * ('ine', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('ine', 'a', ('u2u16', 'b')) - * ('uge', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('uge', 'a', ('u2u16', 'b')) - * ('ult', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('ult', 'a', ('u2u16', 'b')) - * ('uge', ('u2u64', 'b@8'), ('u2u64', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') - * ('ult', ('u2u64', 'b@8'), ('u2u64', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') - * ('ieq', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('ieq', 'a', ('u2u16', 'b')) - * ('ine', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('ine', 'a', ('u2u16', 'b')) - * ('uge', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('uge', 'a', ('u2u16', 'b')) - * ('ult', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('ult', 'a', ('u2u16', 'b')) - * ('uge', ('u2u64', 'b@16'), ('u2u64', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') - * ('ult', ('u2u64', 'b@16'), ('u2u64', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') - * ('ieq', ('u2u64', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('u2u16', 'b')), ('ieq', ('u2u64', ('u2u16', 'b')), 'b')) - * ('ine', ('u2u64', 'a@16'), '#b') => ('ior', ('ine', 'a', ('u2u16', 'b')), ('ine', ('u2u64', ('u2u16', 'b')), 'b')) - * ('ult', ('u2u64', 'a@16'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 65535, 'b'), ('ult', 'a', ('u2u16', 'b')))) - * ('ult', '#a', ('u2u64', 'b@16')) => ('iand', ('ult', 'a', 65535), ('ior', ('ult', 'a', 0), ('ult', ('u2u16', 'a'), 'b'))) - * ('uge', ('u2u64', 'a@16'), '#b') => ('iand', ('uge', 65535, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u16', 'b')))) - * ('uge', '#a', ('u2u64', 'b@16')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 65535), ('uge', ('u2u16', 'a'), 'b'))) - * ('ieq', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('ieq', 'a', ('u2u32', 'b')) - * ('ine', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('ine', 'a', ('u2u32', 'b')) - * ('uge', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('uge', 'a', ('u2u32', 'b')) - * ('ult', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('ult', 'a', ('u2u32', 'b')) - * ('uge', ('u2u64', 'b@8'), ('u2u64', 'a@32')) => ('uge', ('u2u32', 'b'), 'a') - * ('ult', ('u2u64', 'b@8'), ('u2u64', 'a@32')) => ('ult', ('u2u32', 'b'), 'a') - * ('ieq', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('ieq', 'a', ('u2u32', 'b')) - * ('ine', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('ine', 'a', ('u2u32', 'b')) - * ('uge', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('uge', 'a', ('u2u32', 'b')) - * ('ult', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('ult', 'a', ('u2u32', 'b')) - * ('uge', ('u2u64', 'b@16'), ('u2u64', 'a@32')) => ('uge', ('u2u32', 'b'), 'a') - * ('ult', ('u2u64', 'b@16'), ('u2u64', 'a@32')) => ('ult', ('u2u32', 'b'), 'a') - * ('ieq', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('ieq', 'a', ('u2u32', 'b')) - * ('ine', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('ine', 'a', ('u2u32', 'b')) - * ('uge', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('uge', 'a', ('u2u32', 'b')) - * ('ult', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('ult', 'a', ('u2u32', 'b')) - * ('uge', ('u2u64', 'b@32'), ('u2u64', 'a@32')) => ('uge', ('u2u32', 'b'), 'a') - * ('ult', ('u2u64', 'b@32'), ('u2u64', 'a@32')) => ('ult', ('u2u32', 'b'), 'a') - * ('ieq', ('u2u64', 'a@32'), '#b') => ('iand', ('ieq', 'a', ('u2u32', 'b')), ('ieq', ('u2u64', ('u2u32', 'b')), 'b')) - * ('ine', ('u2u64', 'a@32'), '#b') => ('ior', ('ine', 'a', ('u2u32', 'b')), ('ine', ('u2u64', ('u2u32', 'b')), 'b')) - * ('ult', ('u2u64', 'a@32'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 4294967295, 'b'), ('ult', 'a', ('u2u32', 'b')))) - * ('ult', '#a', ('u2u64', 'b@32')) => ('iand', ('ult', 'a', 4294967295), ('ior', ('ult', 'a', 0), ('ult', ('u2u32', 'a'), 'b'))) - * ('uge', ('u2u64', 'a@32'), '#b') => ('iand', ('uge', 4294967295, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u32', 'b')))) - * ('uge', '#a', ('u2u64', 'b@32')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 4294967295), ('uge', ('u2u32', 'a'), 'b'))) - * ('feq', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('feq', 'a', ('f2f16', 'b')) - * ('fneu', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('fneu', 'a', ('f2f16', 'b')) - * ('fge', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('fge', 'a', ('f2f16', 'b')) - * ('flt', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('flt', 'a', ('f2f16', 'b')) - * ('fge', ('f2f32', 'b@16'), ('f2f32', 'a@16')) => ('fge', ('f2f16', 'b'), 'a') - * ('flt', ('f2f32', 'b@16'), ('f2f32', 'a@16')) => ('flt', ('f2f16', 'b'), 'a') - * ('feq', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('feq', 'a', ('f2f16', 'b')) - * ('fneu', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('fneu', 'a', ('f2f16', 'b')) - * ('fge', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('fge', 'a', ('f2f16', 'b')) - * ('flt', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('flt', 'a', ('f2f16', 'b')) - * ('fge', ('f2f64', 'b@16'), ('f2f64', 'a@16')) => ('fge', ('f2f16', 'b'), 'a') - * ('flt', ('f2f64', 'b@16'), ('f2f64', 'a@16')) => ('flt', ('f2f16', 'b'), 'a') - * ('feq', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('feq', 'a', ('f2f32', 'b')) - * ('fneu', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('fneu', 'a', ('f2f32', 'b')) - * ('fge', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('fge', 'a', ('f2f32', 'b')) - * ('flt', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('flt', 'a', ('f2f32', 'b')) - * ('fge', ('f2f64', 'b@16'), ('f2f64', 'a@32')) => ('fge', ('f2f32', 'b'), 'a') - * ('flt', ('f2f64', 'b@16'), ('f2f64', 'a@32')) => ('flt', ('f2f32', 'b'), 'a') - * ('feq', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('feq', 'a', ('f2f32', 'b')) - * ('fneu', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('fneu', 'a', ('f2f32', 'b')) - * ('fge', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('fge', 'a', ('f2f32', 'b')) - * ('flt', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('flt', 'a', ('f2f32', 'b')) - * ('fge', ('f2f64', 'b@32'), ('f2f64', 'a@32')) => ('fge', ('f2f32', 'b'), 'a') - * ('flt', ('f2f64', 'b@32'), ('f2f64', 'a@32')) => ('flt', ('f2f32', 'b'), 'a') - * ('i2i32', ('iand', 'a@64', 4294967295)) => ('u2u32', 'a') - * ('i2i16', ('iand', 'a@32', 65535)) => ('u2u16', 'a') - * ('i2i16', ('iand', 'a@64', 65535)) => ('u2u16', 'a') - * ('i2i8', ('iand', 'a@16', 255)) => ('u2u8', 'a') - * ('i2i8', ('iand', 'a@32', 255)) => ('u2u8', 'a') - * ('i2i8', ('iand', 'a@64', 255)) => ('u2u8', 'a') - * ('u2u16(only_lower_8_bits_used)', ('u2u8', 'a@16')) => a - * ('extract_u8(only_lower_8_bits_used)', 'a@16', 0) => a - * ('bcsel(only_lower_8_bits_used)', 'c', ('u2u16', ('u2u8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('u2u16', ('i2i8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('extract_u8', 'a@16', 0), 'b') => ('bcsel', 'c', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('iadd', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('imul', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('iand', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('ior', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('ixor', 'a', 'b') - * ('i2i16(only_lower_8_bits_used)', ('u2u8', 'a@16')) => a - * ('extract_i8(only_lower_8_bits_used)', 'a@16', 0) => a - * ('bcsel(only_lower_8_bits_used)', 'c', ('i2i16', ('u2u8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('i2i16', ('i2i8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('extract_i8', 'a@16', 0), 'b') => ('bcsel', 'c', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('iadd', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('imul', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('iand', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('ior', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('ixor', 'a', 'b') - * ('u2u32(only_lower_8_bits_used)', ('u2u8', 'a@32')) => a - * ('extract_u8(only_lower_8_bits_used)', 'a@32', 0) => a - * ('bcsel(only_lower_8_bits_used)', 'c', ('u2u32', ('u2u8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('u2u32', ('i2i8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('extract_u8', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('iadd', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('imul', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('iand', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('ior', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('ixor', 'a', 'b') - * ('i2i32(only_lower_8_bits_used)', ('u2u8', 'a@32')) => a - * ('extract_i8(only_lower_8_bits_used)', 'a@32', 0) => a - * ('bcsel(only_lower_8_bits_used)', 'c', ('i2i32', ('u2u8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('i2i32', ('i2i8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_8_bits_used)', 'c', ('extract_i8', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('iadd', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('imul', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('iand', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('ior', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('ixor', 'a', 'b') - * ('u2u32(only_lower_16_bits_used)', ('u2u16', 'a@32')) => a - * ('extract_u16(only_lower_16_bits_used)', 'a@32', 0) => a - * ('bcsel(only_lower_16_bits_used)', 'c', ('u2u32', ('u2u16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_16_bits_used)', 'c', ('u2u32', ('i2i16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_16_bits_used)', 'c', ('extract_u16', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') - * ('iadd(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('iadd', 'a', 'b') - * ('imul(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('imul', 'a', 'b') - * ('iand(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('iand', 'a', 'b') - * ('ior(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('ior', 'a', 'b') - * ('ixor(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('ixor', 'a', 'b') - * ('i2i32(only_lower_16_bits_used)', ('u2u16', 'a@32')) => a - * ('extract_i16(only_lower_16_bits_used)', 'a@32', 0) => a - * ('bcsel(only_lower_16_bits_used)', 'c', ('i2i32', ('u2u16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_16_bits_used)', 'c', ('i2i32', ('i2i16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') - * ('bcsel(only_lower_16_bits_used)', 'c', ('extract_i16', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') - * ('iadd(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('iadd', 'a', 'b') - * ('iadd(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('iadd', 'a', 'b') - * ('imul(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('imul', 'a', 'b') - * ('imul(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('imul', 'a', 'b') - * ('iand(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('iand', 'a', 'b') - * ('iand(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('iand', 'a', 'b') - * ('ior(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('ior', 'a', 'b') - * ('ior(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('ior', 'a', 'b') - * ('ixor(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('ixor', 'a', 'b') - * ('ixor(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('ixor', 'a', 'b') - * ('ldexp@16', 'x', 'exp') => ('fmul', ('fmul', 'x', ('i2i16', ('ishl', ('iadd', ('ishr', ('imin', ('imax', 'exp', -30), 30), 1), 15), 10))), ('i2i16', ('ishl', ('iadd', ('isub', ('imin', ('imax', 'exp', -30), 30), ('ishr', ('imin', ('imax', 'exp', -30), 30), 1)), 15), 10))) - * ('ldexp@32', 'x', 'exp') => ('fmul', ('fmul', 'x', ('ishl', ('iadd', ('ishr', ('imin', ('imax', 'exp', -254), 254), 1), 127), 23)), ('ishl', ('iadd', ('isub', ('imin', ('imax', 'exp', -254), 254), ('ishr', ('imin', ('imax', 'exp', -254), 254), 1)), 127), 23)) - * ('ldexp@64', 'x', 'exp') => ('fmul', ('fmul', 'x', ('pack_64_2x32_split', 0, ('ishl', ('iadd', ('ishr', ('imin', ('imax', 'exp', -2046), 2046), 1), 1023), 20))), ('pack_64_2x32_split', 0, ('ishl', ('iadd', ('isub', ('imin', ('imax', 'exp', -2046), 2046), ('ishr', ('imin', ('imax', 'exp', -2046), 2046), 1)), 1023), 20))) - * ('ior(many-comm-expr)', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 858993459), 2), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 3435973836), 2)), 1431655765), 1), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 858993459), 2), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 3435973836), 2)), 2863311530), 1)) => ('bitfield_reverse', 'x') - * ('ior(many-comm-expr)', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 4042322160), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 252645135)), 8), 4278255360), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 4042322160), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 252645135)), 8), 16711935)) => ('bitfield_reverse', 'x') - * ('bcsel', ('iand', ('ine', ('fabs', 'x'), 2139095040), ('ieq', ('iand', ('pack_half_2x16_rtz_split', 'x', 0), 32767), 31744)), ('iadd', ('pack_half_2x16_rtz_split', 'x', 0), 4294967295), ('pack_half_2x16_rtz_split', 'x', 0)) => ('pack_half_2x16_rtz_split', 'x', 0) - * ('bcsel', ('iand', ('ine', 'x', 2139095040), ('ieq', ('iand', ('pack_half_2x16_rtz_split', 'x(is_not_negative)', 0), 32767), 31744)), ('iadd', ('pack_half_2x16_rtz_split', 'x(is_not_negative)', 0), 4294967295), ('pack_half_2x16_rtz_split', 'x(is_not_negative)', 0)) => ('pack_half_2x16_rtz_split', 'x', 0) - * ('bcsel', ('iand', ('ine', ('fabs', 'x'), 2139095040), ('ieq', ('iand', ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0), 32767), 31744)), ('iadd', ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0), 4294967295), ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0)) => ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0) - * ('ball_iequal2', ('ieq', 'a', 'b'), -1) => ('ball_iequal2', 'a', 'b') - * ('ball_iequal2', ('feq', 'a', 'b'), -1) => ('ball_fequal2', 'a', 'b') - * ('bany_inequal2', ('ine', 'a', 'b'), 0) => ('bany_inequal2', 'a', 'b') - * ('bany_inequal2', ('fneu', 'a', 'b'), 0) => ('bany_fnequal2', 'a', 'b') - * ('ball_iequal3', ('ieq', 'a', 'b'), -1) => ('ball_iequal3', 'a', 'b') - * ('ball_iequal3', ('feq', 'a', 'b'), -1) => ('ball_fequal3', 'a', 'b') - * ('bany_inequal3', ('ine', 'a', 'b'), 0) => ('bany_inequal3', 'a', 'b') - * ('bany_inequal3', ('fneu', 'a', 'b'), 0) => ('bany_fnequal3', 'a', 'b') - * ('ball_iequal4', ('ieq', 'a', 'b'), -1) => ('ball_iequal4', 'a', 'b') - * ('ball_iequal4', ('feq', 'a', 'b'), -1) => ('ball_fequal4', 'a', 'b') - * ('bany_inequal4', ('ine', 'a', 'b'), 0) => ('bany_inequal4', 'a', 'b') - * ('bany_inequal4', ('fneu', 'a', 'b'), 0) => ('bany_fnequal4', 'a', 'b') - * ('ball_iequal8', ('ieq', 'a', 'b'), -1) => ('ball_iequal8', 'a', 'b') - * ('ball_iequal8', ('feq', 'a', 'b'), -1) => ('ball_fequal8', 'a', 'b') - * ('bany_inequal8', ('ine', 'a', 'b'), 0) => ('bany_inequal8', 'a', 'b') - * ('bany_inequal8', ('fneu', 'a', 'b'), 0) => ('bany_fnequal8', 'a', 'b') - * ('ball_iequal16', ('ieq', 'a', 'b'), -1) => ('ball_iequal16', 'a', 'b') - * ('ball_iequal16', ('feq', 'a', 'b'), -1) => ('ball_fequal16', 'a', 'b') - * ('bany_inequal16', ('ine', 'a', 'b'), 0) => ('bany_inequal16', 'a', 'b') - * ('bany_inequal16', ('fneu', 'a', 'b'), 0) => ('bany_fnequal16', 'a', 'b') - * ('iand', ('feq', 'a', 'a'), ('flt', 'a', 'b')) => ('!flt', 'a', 'b') - * ('iand', ('feq', 'a', 'a'), ('flt', 'b', 'a')) => ('!flt', 'b', 'a') - * ('iand', ('feq', 'a', 'a'), ('fge', 'a', 'b')) => ('!fge', 'a', 'b') - * ('iand', ('feq', 'a', 'a'), ('fge', 'b', 'a')) => ('!fge', 'b', 'a') - * ('iand', ('feq', 'a', 'a'), ('feq', 'a', 'b')) => ('!feq', 'a', 'b') - * ('iand', ('feq', 'a', 'a'), ('feq', 'b', 'a')) => ('!feq', 'b', 'a') - * ('feq', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('feq', 'b', 'd'), ('feq', 'c', 'd')) - * ('fneu', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('fneu', 'b', 'd'), ('fneu', 'c', 'd')) - * ('ieq', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ieq', 'b', 'd'), ('ieq', 'c', 'd')) - * ('ine', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ine', 'b', 'd'), ('ine', 'c', 'd')) - * ('flt', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('flt', 'b', 'd'), ('flt', 'c', 'd')) - * ('flt', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('flt', 'd', 'b'), ('flt', 'd', 'c')) - * ('fge', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('fge', 'b', 'd'), ('fge', 'c', 'd')) - * ('fge', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('fge', 'd', 'b'), ('fge', 'd', 'c')) - * ('ilt', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ilt', 'b', 'd'), ('ilt', 'c', 'd')) - * ('ilt', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('ilt', 'd', 'b'), ('ilt', 'd', 'c')) - * ('ige', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ige', 'b', 'd'), ('ige', 'c', 'd')) - * ('ige', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('ige', 'd', 'b'), ('ige', 'd', 'c')) - * ('ult', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ult', 'b', 'd'), ('ult', 'c', 'd')) - * ('ult', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('ult', 'd', 'b'), ('ult', 'd', 'c')) - * ('uge', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('uge', 'b', 'd'), ('uge', 'c', 'd')) - * ('uge', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('uge', 'd', 'b'), ('uge', 'd', 'c')) - * ('fadd', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('fadd', 'b', 'd'), ('fadd', 'c', 'd')) - * ('fmul', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('fmul', 'b', 'd'), ('fmul', 'c', 'd')) - * ('fmulz', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('fmulz', 'b', 'd'), ('fmulz', 'c', 'd')) - * ('iadd', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('iadd', 'b', 'd'), ('iadd', 'c', 'd')) - * ('imul', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('imul', 'b', 'd'), ('imul', 'c', 'd')) - * ('fddx', 'a') => 0.0 - * ('fddx_fine', 'a') => 0.0 - * ('fddx_coarse', 'a') => 0.0 - * ('fddy', 'a') => 0.0 - * ('fddy_fine', 'a') => 0.0 - * ('fddy_coarse', 'a') => 0.0 - * ('umul_low', '#a(is_lower_half_zero)', 'b') => 0 - * ('imadsh_mix16', '#a@32(is_lower_half_zero)', 'b@32', 'c@32') => c - * ('imadsh_mix16', 'a@32', '#b@32(is_upper_half_zero)', 'c@32') => c - * ('bcsel', 'a', ('flrp(is_used_once)', 'b', 'c', 'd'), ('flrp', 'b', 'c', 'e')) => ('flrp', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('flrp', 'b', 'c', 'd'), ('flrp(is_used_once)', 'b', 'c', 'e')) => ('flrp', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('flrp(is_used_once)', 'b', 'c', 'd'), ('flrp', 'b', 'e', 'd')) => ('flrp', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('bcsel', 'a', ('flrp', 'b', 'c', 'd'), ('flrp(is_used_once)', 'b', 'e', 'd')) => ('flrp', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('bcsel', 'a', ('flrp(is_used_once)', 'b', 'c', 'd'), ('flrp', 'e', 'c', 'd')) => ('flrp', ('bcsel', 'a', 'b', 'e'), 'c', 'd') - * ('bcsel', 'a', ('flrp', 'b', 'c', 'd'), ('flrp(is_used_once)', 'e', 'c', 'd')) => ('flrp', ('bcsel', 'a', 'b', 'e'), 'c', 'd') - * ('bcsel', 'a', ('fmulz(is_used_once)', 'b', 'c'), ('fmulz', 'b', 'd(is_not_const)')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmulz(is_used_once)', 'b', 'c(is_not_const)'), ('fmulz', 'b', 'd')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmulz', 'b', 'c(is_not_const)'), ('fmulz(is_used_once)', 'b', 'd')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmulz', 'b', 'c'), ('fmulz(is_used_once)', 'b', 'd(is_not_const)')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmul(is_used_once)', 'b', 'c'), ('fmul', 'b', 'd(is_not_const)')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmul(is_used_once)', 'b', 'c(is_not_const)'), ('fmul', 'b', 'd')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmul', 'b', 'c(is_not_const)'), ('fmul(is_used_once)', 'b', 'd')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmul', 'b', 'c'), ('fmul(is_used_once)', 'b', 'd(is_not_const)')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iadd(is_used_once)', 'b', 'c'), ('iadd', 'b', 'd(is_not_const)')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iadd(is_used_once)', 'b', 'c(is_not_const)'), ('iadd', 'b', 'd')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iadd', 'b', 'c(is_not_const)'), ('iadd(is_used_once)', 'b', 'd')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iadd', 'b', 'c'), ('iadd(is_used_once)', 'b', 'd(is_not_const)')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imul(is_used_once)', 'b', 'c'), ('imul', 'b', 'd(is_not_const)')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imul(is_used_once)', 'b', 'c(is_not_const)'), ('imul', 'b', 'd')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imul', 'b', 'c(is_not_const)'), ('imul(is_used_once)', 'b', 'd')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imul', 'b', 'c'), ('imul(is_used_once)', 'b', 'd(is_not_const)')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iand(is_used_once)', 'b', 'c'), ('iand', 'b', 'd(is_not_const)')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iand(is_used_once)', 'b', 'c(is_not_const)'), ('iand', 'b', 'd')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iand', 'b', 'c(is_not_const)'), ('iand(is_used_once)', 'b', 'd')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('iand', 'b', 'c'), ('iand(is_used_once)', 'b', 'd(is_not_const)')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ior(is_used_once)', 'b', 'c'), ('ior', 'b', 'd(is_not_const)')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ior(is_used_once)', 'b', 'c(is_not_const)'), ('ior', 'b', 'd')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ior', 'b', 'c(is_not_const)'), ('ior(is_used_once)', 'b', 'd')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ior', 'b', 'c'), ('ior(is_used_once)', 'b', 'd(is_not_const)')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ixor(is_used_once)', 'b', 'c'), ('ixor', 'b', 'd(is_not_const)')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ixor(is_used_once)', 'b', 'c(is_not_const)'), ('ixor', 'b', 'd')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ixor', 'b', 'c(is_not_const)'), ('ixor(is_used_once)', 'b', 'd')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ixor', 'b', 'c'), ('ixor(is_used_once)', 'b', 'd(is_not_const)')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmin(is_used_once)', 'b', 'c'), ('fmin', 'b', 'd(is_not_const)')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmin(is_used_once)', 'b', 'c(is_not_const)'), ('fmin', 'b', 'd')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmin', 'b', 'c(is_not_const)'), ('fmin(is_used_once)', 'b', 'd')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmin', 'b', 'c'), ('fmin(is_used_once)', 'b', 'd(is_not_const)')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmax(is_used_once)', 'b', 'c'), ('fmax', 'b', 'd(is_not_const)')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmax(is_used_once)', 'b', 'c(is_not_const)'), ('fmax', 'b', 'd')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmax', 'b', 'c(is_not_const)'), ('fmax(is_used_once)', 'b', 'd')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fmax', 'b', 'c'), ('fmax(is_used_once)', 'b', 'd(is_not_const)')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imin(is_used_once)', 'b', 'c'), ('imin', 'b', 'd(is_not_const)')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imin(is_used_once)', 'b', 'c(is_not_const)'), ('imin', 'b', 'd')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imin', 'b', 'c(is_not_const)'), ('imin(is_used_once)', 'b', 'd')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imin', 'b', 'c'), ('imin(is_used_once)', 'b', 'd(is_not_const)')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imax(is_used_once)', 'b', 'c'), ('imax', 'b', 'd(is_not_const)')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imax(is_used_once)', 'b', 'c(is_not_const)'), ('imax', 'b', 'd')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imax', 'b', 'c(is_not_const)'), ('imax(is_used_once)', 'b', 'd')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('imax', 'b', 'c'), ('imax(is_used_once)', 'b', 'd(is_not_const)')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umin(is_used_once)', 'b', 'c'), ('umin', 'b', 'd(is_not_const)')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umin(is_used_once)', 'b', 'c(is_not_const)'), ('umin', 'b', 'd')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umin', 'b', 'c(is_not_const)'), ('umin(is_used_once)', 'b', 'd')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umin', 'b', 'c'), ('umin(is_used_once)', 'b', 'd(is_not_const)')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umax(is_used_once)', 'b', 'c'), ('umax', 'b', 'd(is_not_const)')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umax(is_used_once)', 'b', 'c(is_not_const)'), ('umax', 'b', 'd')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umax', 'b', 'c(is_not_const)'), ('umax(is_used_once)', 'b', 'd')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('umax', 'b', 'c'), ('umax(is_used_once)', 'b', 'd(is_not_const)')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fpow(is_used_once)', 'b', 'c'), ('fpow', 'b', 'd')) => ('fpow', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fpow', 'b', 'c'), ('fpow(is_used_once)', 'b', 'd')) => ('fpow', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fpow(is_used_once)', 'b', 'c'), ('fpow', 'd', 'c')) => ('fpow', ('bcsel', 'a', 'b', 'd'), 'c') - * ('bcsel', 'a', ('fpow', 'b', 'c'), ('fpow(is_used_once)', 'd', 'c')) => ('fpow', ('bcsel', 'a', 'b', 'd'), 'c') - * ('bcsel', 'c', ('frcp(is_used_once)', 'a'), ('frcp(is_used_once)', 'b')) => ('frcp', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('frsq(is_used_once)', 'a'), ('frsq(is_used_once)', 'b')) => ('frsq', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fsqrt(is_used_once)', 'a'), ('fsqrt(is_used_once)', 'b')) => ('fsqrt', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fexp2(is_used_once)', 'a'), ('fexp2(is_used_once)', 'b')) => ('fexp2', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('flog2(is_used_once)', 'a'), ('flog2(is_used_once)', 'b')) => ('flog2', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fsign(is_used_once)', 'a'), ('fsign(is_used_once)', 'b')) => ('fsign', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fsin(is_used_once)', 'a'), ('fsin(is_used_once)', 'b')) => ('fsin', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fcos(is_used_once)', 'a'), ('fcos(is_used_once)', 'b')) => ('fcos', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fsin_amd(is_used_once)', 'a'), ('fsin_amd(is_used_once)', 'b')) => ('fsin_amd', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fcos_amd(is_used_once)', 'a'), ('fcos_amd(is_used_once)', 'b')) => ('fcos_amd', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fsin_mdg(is_used_once)', 'a'), ('fsin_mdg(is_used_once)', 'b')) => ('fsin_mdg', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fcos_mdg(is_used_once)', 'a'), ('fcos_mdg(is_used_once)', 'b')) => ('fcos_mdg', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fsin_agx(is_used_once)', 'a'), ('fsin_agx(is_used_once)', 'b')) => ('fsin_agx', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fneg(is_used_once)', 'a'), ('fneg(is_used_once)', 'b')) => ('fneg', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fabs(is_used_once)', 'a'), ('fabs(is_used_once)', 'b')) => ('fabs', ('bcsel', 'c', 'a', 'b')) - * ('bcsel', 'c', ('fsign(is_used_once)', 'a'), ('fsign(is_used_once)', 'b')) => ('fsign', ('bcsel', 'c', 'a', 'b')) - * ('ineg', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('ineg', 'a'), ('ineg', 'b')) - * ('iabs', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('iabs', 'a'), ('iabs', 'b')) - * ('inot', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('inot', 'a'), ('inot', 'b')) - * ('isign', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('isign', 'a'), ('isign', 'b')) - * ('fisnormal', 'a@16') => ('ult', 4095, ('iadd', ('ishl', 'a', 1), 2048)) - * ('fisnormal', 'a@32') => ('ult', 33554431, ('iadd', ('ishl', 'a', 1), 16777216)) - * ('fisnormal', 'a@64') => ('ult', 18014398509481983, ('iadd', ('ishl', 'a', 1), 9007199254740992)) - * ('f2f16', ('vec2', 'a@32', 'b@32')) => ('vec2', ('f2f16', 'a'), ('f2f16', 'b')) - * ('f2fmp', ('vec2', 'a@32', 'b@32')) => ('vec2', ('f2fmp', 'a'), ('f2fmp', 'b')) - * ('u2u16', ('vec2', 'a@32', 'b@32')) => ('vec2', ('u2u16', 'a'), ('u2u16', 'b')) - * ('i2i16', ('vec2', 'a@32', 'b@32')) => ('vec2', ('i2i16', 'a'), ('i2i16', 'b')) - * ('i2imp', ('vec2', 'a@32', 'b@32')) => ('vec2', ('i2imp', 'a'), ('i2imp', 'b')) - * ('f2f16', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('f2f16', 'a'), ('f2f16', 'b'), ('f2f16', 'c')) - * ('f2fmp', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c')) - * ('u2u16', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('u2u16', 'a'), ('u2u16', 'b'), ('u2u16', 'c')) - * ('i2i16', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('i2i16', 'a'), ('i2i16', 'b'), ('i2i16', 'c')) - * ('i2imp', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('i2imp', 'a'), ('i2imp', 'b'), ('i2imp', 'c')) - * ('f2f16', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('f2f16', 'a'), ('f2f16', 'b'), ('f2f16', 'c'), ('f2f16', 'd')) - * ('f2fmp', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c'), ('f2fmp', 'd')) - * ('u2u16', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('u2u16', 'a'), ('u2u16', 'b'), ('u2u16', 'c'), ('u2u16', 'd')) - * ('i2i16', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('i2i16', 'a'), ('i2i16', 'b'), ('i2i16', 'c'), ('i2i16', 'd')) - * ('i2imp', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('i2imp', 'a'), ('i2imp', 'b'), ('i2imp', 'c'), ('i2imp', 'd')) - */ - - -static const nir_search_value_union nir_opt_algebraic_values[] = { - /* ('imul', 'a', '#b(is_pos_power_of_two)') => ('ishl', 'a', ('find_lsb', 'b')) */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - true, - nir_type_invalid, - 0, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* replace0_0 -> 0 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 0, 4 }, - -1, - } }, - - /* ('imul', 'a@8', 128) => ('ishl', 'a', 7) */ - { .variable = { - { nir_search_value_variable, 8 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .constant = { - { nir_search_value_constant, 8 }, - nir_type_int, { 0x80 /* 128 */ }, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 6, 7 }, - -1, - } }, - - /* replace1_0 -> 6 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x7 /* 7 */ }, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 6, 9 }, - -1, - } }, - - /* ('imul', 'a@16', 32768) => ('ishl', 'a', 15) */ - { .variable = { - { nir_search_value_variable, 16 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0x8000 /* 32768 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 11, 12 }, - -1, - } }, - - /* replace2_0 -> 11 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xf /* 15 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 11, 14 }, - -1, - } }, - - /* ('imul', 'a@32', 2147483648) => ('ishl', 'a', 31) */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x80000000 /* 2147483648 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 16, 17 }, - -1, - } }, - - /* replace3_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x1f /* 31 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 19 }, - -1, - } }, - - /* ('imul', 'a@64', 9223372036854775808) => ('ishl', 'a', 63) */ - { .variable = { - { nir_search_value_variable, 64 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x8000000000000000 /* 9223372036854775808 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 21, 22 }, - -1, - } }, - - /* replace4_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x3f /* 63 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 24 }, - -1, - } }, - - /* ('imul', 'a', '#b(is_neg_power_of_two)') => ('ineg', ('ishl', 'a', ('find_lsb', ('iabs', 'b')))) */ - /* search5_0 -> 0 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - true, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 0, 26 }, - -1, - } }, - - /* replace5_0_0 -> 0 in the cache */ - /* replace5_0_1_0_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 28 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 0, 29 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 30 }, - -1, - } }, - - /* ('ishl', 'a', '#b') => ('imul', 'a', ('ishl', 1, 'b')) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 32, 33 }, - -1, - } }, - - /* replace6_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 35, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 32, 37 }, - -1, - } }, - - /* ('imul@64', 'a', '#b(is_bitcount2)') => ('iadd', ('ishl', 'a', ('ufind_msb', 'b')), ('ishl', 'a', ('find_lsb', 'b'))) */ - /* search7_0 -> 21 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - true, - nir_type_invalid, - 2, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 21, 39 }, - -1, - } }, - - /* replace7_0_0 -> 21 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 42 }, - -1, - } }, - /* replace7_1_0 -> 21 in the cache */ - /* replace7_1_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 44 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 43, 45 }, - -1, - } }, - - /* ('unpack_64_2x32_split_x', ('imul_2x32_64(is_used_once)', 'a', 'b')) => ('imul', 'a', 'b') */ - /* search8_0_0 -> 16 in the cache */ - /* search8_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_imul_2x32_64, - 0, 1, - { 16, 36 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 1, - { 47 }, - -1, - } }, - - /* replace8_0 -> 16 in the cache */ - /* replace8_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* ('unpack_64_2x32_split_x', ('umul_2x32_64(is_used_once)', 'a', 'b')) => ('imul', 'a', 'b') */ - /* search9_0_0 -> 16 in the cache */ - /* search9_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_umul_2x32_64, - 0, 1, - { 16, 36 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 1, - { 50 }, - -1, - } }, - - /* replace9_0 -> 16 in the cache */ - /* replace9_1 -> 36 in the cache */ - /* replace9 -> 49 in the cache */ - - /* ('imul_2x32_64', 'a', 'b') => ('pack_64_2x32_split', ('imul', 'a', 'b'), ('imul_high', 'a', 'b')) */ - /* search10_0 -> 16 in the cache */ - /* search10_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_imul_2x32_64, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace10_0_0 -> 16 in the cache */ - /* replace10_0_1 -> 36 in the cache */ - /* replace10_0 -> 49 in the cache */ - /* replace10_1_0 -> 16 in the cache */ - /* replace10_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul_high, - 1, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 2, - { 49, 53 }, - -1, - } }, - - /* ('umul_2x32_64', 'a', 'b') => ('pack_64_2x32_split', ('imul', 'a', 'b'), ('umul_high', 'a', 'b')) */ - /* search11_0 -> 16 in the cache */ - /* search11_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_umul_2x32_64, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace11_0_0 -> 16 in the cache */ - /* replace11_0_1 -> 36 in the cache */ - /* replace11_0 -> 49 in the cache */ - /* replace11_1_0 -> 16 in the cache */ - /* replace11_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul_high, - 1, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 2, - { 49, 56 }, - -1, - } }, - - /* ('udiv', 'a', 1) => a */ - /* search12_0 -> 32 in the cache */ - /* search12_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_udiv, - -1, 0, - { 32, 35 }, - -1, - } }, - - /* replace12 -> 32 in the cache */ - - /* ('idiv', 'a', 1) => a */ - /* search13_0 -> 32 in the cache */ - /* search13_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_idiv, - -1, 0, - { 32, 35 }, - -1, - } }, - - /* replace13 -> 32 in the cache */ - - /* ('umod', 'a', 1) => 0 */ - /* search14_0 -> 32 in the cache */ - /* search14_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umod, - -1, 0, - { 32, 35 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - - /* ('imod', 'a', 1) => 0 */ - /* search15_0 -> 32 in the cache */ - /* search15_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imod, - -1, 0, - { 32, 35 }, - -1, - } }, - - /* replace15 -> 61 in the cache */ - - /* ('imod', 'a', -1) => 0 */ - /* search16_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imod, - -1, 0, - { 32, 63 }, - -1, - } }, - - /* replace16 -> 61 in the cache */ - - /* ('irem', 'a', 1) => 0 */ - /* search17_0 -> 32 in the cache */ - /* search17_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_irem, - -1, 0, - { 32, 35 }, - -1, - } }, - - /* replace17 -> 61 in the cache */ - - /* ('irem', 'a', -1) => 0 */ - /* search18_0 -> 32 in the cache */ - /* search18_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_irem, - -1, 0, - { 32, 63 }, - -1, - } }, - - /* replace18 -> 61 in the cache */ - - /* ('udiv', 'a', '#b(is_pos_power_of_two)') => ('ushr', 'a', ('find_lsb', 'b')) */ - /* search19_0 -> 0 in the cache */ - /* search19_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_udiv, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* replace19_0 -> 0 in the cache */ - /* replace19_1_0 -> 3 in the cache */ - /* replace19_1 -> 4 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 0, 4 }, - -1, - } }, - - /* ('idiv', 'a', '#b(is_pos_power_of_two)') => ('imul', ('isign', 'a'), ('ushr', ('iabs', 'a'), ('find_lsb', 'b'))) */ - /* search20_0 -> 0 in the cache */ - /* search20_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_idiv, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* replace20_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_isign, - -1, 0, - { 0 }, - -1, - } }, - /* replace20_1_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 0 }, - -1, - } }, - /* replace20_1_1_0 -> 3 in the cache */ - /* replace20_1_1 -> 4 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 71, 4 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 70, 72 }, - -1, - } }, - - /* ('idiv', 'a', '#b(is_neg_power_of_two)') => ('ineg', ('imul', ('isign', 'a'), ('ushr', ('iabs', 'a'), ('find_lsb', ('iabs', 'b'))))) */ - /* search21_0 -> 0 in the cache */ - /* search21_1 -> 26 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_idiv, - -1, 0, - { 0, 26 }, - -1, - } }, - - /* replace21_0_0_0 -> 0 in the cache */ - /* replace21_0_0 -> 70 in the cache */ - /* replace21_0_1_0_0 -> 0 in the cache */ - /* replace21_0_1_0 -> 71 in the cache */ - /* replace21_0_1_1_0_0 -> 3 in the cache */ - /* replace21_0_1_1_0 -> 28 in the cache */ - /* replace21_0_1_1 -> 29 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 71, 29 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 70, 75 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 1, - { 76 }, - -1, - } }, - - /* ('umod', 'a', '#b(is_pos_power_of_two)') => ('iand', 'a', ('isub', 'b', 1)) */ - /* search22_0 -> 0 in the cache */ - /* search22_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umod, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* replace22_0 -> 0 in the cache */ - /* replace22_1_0 -> 3 in the cache */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 3, 79 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 0, 80 }, - -1, - } }, - - /* ('imod', 'a', '#b(is_pos_power_of_two)') => ('iand', 'a', ('isub', 'b', 1)) */ - /* search23_0 -> 0 in the cache */ - /* search23_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imod, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* replace23_0 -> 0 in the cache */ - /* replace23_1_0 -> 3 in the cache */ - /* replace23_1_1 -> 79 in the cache */ - /* replace23_1 -> 80 in the cache */ - /* replace23 -> 81 in the cache */ - - /* ('imod', 'a', '#b(is_neg_power_of_two)') => ('bcsel', ('ieq', ('ior', 'a', 'b'), 'b'), 0, ('ior', 'a', 'b')) */ - /* search24_0 -> 0 in the cache */ - /* search24_1 -> 26 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imod, - -1, 0, - { 0, 26 }, - -1, - } }, - - /* replace24_0_0_0 -> 0 in the cache */ - /* replace24_0_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 0, 3 }, - -1, - } }, - /* replace24_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 84, 3 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - /* replace24_2_0 -> 0 in the cache */ - /* replace24_2_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 2, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 85, 86, 87 }, - -1, - } }, - - /* ('irem', 'a', '#b(is_pos_power_of_two)') => ('isub', 'a', ('iand', ('bcsel', ('ilt', 'a', 0), ('iadd', 'a', ('isub', 'b', 1)), 'a'), ('ineg', 'b'))) */ - /* search25_0 -> 0 in the cache */ - /* search25_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_irem, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* replace25_0 -> 0 in the cache */ - /* replace25_1_0_0_0 -> 0 in the cache */ - /* replace25_1_0_0_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 0, 86 }, - -1, - } }, - /* replace25_1_0_1_0 -> 0 in the cache */ - /* replace25_1_0_1_1_0 -> 3 in the cache */ - /* replace25_1_0_1_1_1 -> 79 in the cache */ - /* replace25_1_0_1_1 -> 80 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 0, 80 }, - -1, - } }, - /* replace25_1_0_2 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 90, 91, 0 }, - -1, - } }, - /* replace25_1_1_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 92, 93 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_isub, - -1, 2, - { 0, 94 }, - -1, - } }, - - /* ('irem', 'a', '#b(is_neg_power_of_two)') => ('irem', 'a', ('iabs', 'b')) */ - /* search26_0 -> 0 in the cache */ - /* search26_1 -> 26 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_irem, - -1, 0, - { 0, 26 }, - -1, - } }, - - /* replace26_0 -> 0 in the cache */ - /* replace26_1_0 -> 3 in the cache */ - /* replace26_1 -> 28 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_irem, - -1, 0, - { 0, 28 }, - -1, - } }, - - /* ('~fmul', ('fsign', 'a'), ('ffloor', ('fadd', ('fabs', 'a'), 0.5))) => ('ftrunc', ('fadd', 'a', ('fmul', ('fsign', 'a'), 0.5))) */ - /* search27_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 32 }, - -1, - } }, - /* search27_1_0_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 32 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3fe0000000000000 /* 0.5 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 99, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffloor, - -1, 1, - { 101 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmul, - 0, 2, - { 98, 102 }, - -1, - } }, - - /* replace27_0_0 -> 32 in the cache */ - /* replace27_0_1_0_0 -> 32 in the cache */ - /* replace27_0_1_0 -> 98 in the cache */ - /* replace27_0_1_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 98, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 32, 104 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ftrunc, - -1, 2, - { 105 }, - -1, - } }, - - /* ('~fneg', ('fneg', 'a')) => a */ - /* search28_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fneg, - -1, 0, - { 107 }, - -1, - } }, - - /* replace28 -> 32 in the cache */ - - /* ('ineg', ('ineg', 'a')) => a */ - /* search29_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 109 }, - -1, - } }, - - /* replace29 -> 32 in the cache */ - - /* ('fabs', ('fneg', 'a')) => ('fabs', 'a') */ - /* search30_0_0 -> 32 in the cache */ - /* search30_0 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 107 }, - -1, - } }, - - /* replace30_0 -> 32 in the cache */ - /* replace30 -> 99 in the cache */ - - /* ('fabs', ('u2f', 'a')) => ('u2f', 'a') */ - /* search31_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_u2f, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 112 }, - -1, - } }, - - /* replace31_0 -> 32 in the cache */ - /* replace31 -> 112 in the cache */ - - /* ('iabs', ('iabs', 'a')) => ('iabs', 'a') */ - /* search32_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 114 }, - -1, - } }, - - /* replace32_0 -> 32 in the cache */ - /* replace32 -> 114 in the cache */ - - /* ('iabs', ('ineg', 'a')) => ('iabs', 'a') */ - /* search33_0_0 -> 32 in the cache */ - /* search33_0 -> 109 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 109 }, - -1, - } }, - - /* replace33_0 -> 32 in the cache */ - /* replace33 -> 114 in the cache */ - - /* ('~fadd', 'a', 0.0) => a */ - /* search34_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fadd, - 0, 1, - { 32, 117 }, - -1, - } }, - - /* replace34 -> 32 in the cache */ - - /* ('fadd(is_only_used_as_float)', 'a@16', 0.0) => a */ - /* search35_0 -> 11 in the cache */ - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 11, 119 }, - 1, - } }, - - /* replace35 -> 11 in the cache */ - - /* ('fadd(is_only_used_as_float)', 'a@32', 0.0) => a */ - /* search36_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 16, 121 }, - 1, - } }, - - /* replace36 -> 16 in the cache */ - - /* ('iadd', 'a', 0) => a */ - /* search37_0 -> 32 in the cache */ - /* search37_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace37 -> 32 in the cache */ - - /* ('iadd_sat', 'a', 0) => a */ - /* search38_0 -> 32 in the cache */ - /* search38_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace38 -> 32 in the cache */ - - /* ('isub_sat', 'a', 0) => a */ - /* search39_0 -> 32 in the cache */ - /* search39_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_isub_sat, - -1, 0, - { 32, 61 }, - -1, - } }, - - /* replace39 -> 32 in the cache */ - - /* ('uadd_sat', 'a', 0) => a */ - /* search40_0 -> 32 in the cache */ - /* search40_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace40 -> 32 in the cache */ - - /* ('usub_sat', 'a', 0) => a */ - /* search41_0 -> 32 in the cache */ - /* search41_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_usub_sat, - -1, 0, - { 32, 61 }, - -1, - } }, - - /* replace41 -> 32 in the cache */ - - /* ('usadd_4x8_vc4', 'a', 0) => a */ - /* search42_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_usadd_4x8_vc4, - 0, 1, - { 16, 128 }, - -1, - } }, - - /* replace42 -> 16 in the cache */ - - /* ('usadd_4x8_vc4', 'a', -1) => -1 */ - /* search43_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_usadd_4x8_vc4, - 0, 1, - { 16, 130 }, - -1, - } }, - - /* replace43 -> 130 in the cache */ - - /* ('~fadd', ('fmul', 'a', 'b'), ('fmul', 'a', 'c')) => ('fmul', 'a', ('fadd', 'b', 'c')) */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 132, 133 }, - -1, - } }, - /* search44_1_0 -> 132 in the cache */ - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 134, 136 }, - -1, - } }, - - /* replace44_0 -> 132 in the cache */ - /* replace44_1_0 -> 133 in the cache */ - /* replace44_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 132, 138 }, - -1, - } }, - - /* ('~fadd', ('fmulz', 'a', 'b'), ('fmulz', 'a', 'c')) => ('fmulz', 'a', ('fadd', 'b', 'c')) */ - /* search45_0_0 -> 16 in the cache */ - /* search45_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 16, 36 }, - -1, - } }, - /* search45_1_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 2, 1, - { 16, 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 140, 142 }, - -1, - } }, - - /* replace45_0 -> 16 in the cache */ - /* replace45_1_0 -> 36 in the cache */ - /* replace45_1_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 36, 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 2, - { 16, 144 }, - -1, - } }, - - /* ('~ffma', 'a', 'b', ('ffma(is_used_once)', 'a', 'c', 'd')) => ('ffma', 'a', ('fadd', 'b', 'c'), 'd') */ - /* search46_0 -> 0 in the cache */ - /* search46_1 -> 3 in the cache */ - /* search46_2_0 -> 0 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 0, 146, 147 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 0, 3, 148 }, - -1, - } }, - - /* replace46_0 -> 0 in the cache */ - /* replace46_1_0 -> 3 in the cache */ - /* replace46_1_1 -> 146 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 3, 146 }, - -1, - } }, - /* replace46_2 -> 147 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ffma, - 0, 2, - { 0, 150, 147 }, - -1, - } }, - - /* ('~ffma', 'a', 'b', ('fmul(is_used_once)', 'a', 'c')) => ('fmul', 'a', ('fadd', 'b', 'c')) */ - /* search47_0 -> 0 in the cache */ - /* search47_1 -> 3 in the cache */ - /* search47_2_0 -> 0 in the cache */ - /* search47_2_1 -> 146 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 0, 146 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 0, 3, 152 }, - -1, - } }, - - /* replace47_0 -> 0 in the cache */ - /* replace47_1_0 -> 3 in the cache */ - /* replace47_1_1 -> 146 in the cache */ - /* replace47_1 -> 150 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 0, 150 }, - -1, - } }, - - /* ('~fadd', ('fmul(is_used_once)', 'a', 'b'), ('ffma(is_used_once)', 'a', 'c', 'd')) => ('ffma', 'a', ('fadd', 'b', 'c'), 'd') */ - { .variable = { - { nir_search_value_variable, -4 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 155, 156 }, - 0, - } }, - /* search48_1_0 -> 155 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 2, 1, - { 155, 158, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 157, 160 }, - -1, - } }, - - /* replace48_0 -> 155 in the cache */ - /* replace48_1_0 -> 156 in the cache */ - /* replace48_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 156, 158 }, - -1, - } }, - /* replace48_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 0, 2, - { 155, 162, 159 }, - -1, - } }, - - /* ('~ffma', 'a', ('fmul(is_used_once)', 'b', 'c'), ('fmul(is_used_once)', 'b', 'd')) => ('fmul', 'b', ('ffma', 'a', 'c', 'd')) */ - /* search49_0 -> 155 in the cache */ - /* search49_1_0 -> 156 in the cache */ - /* search49_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 156, 158 }, - 0, - } }, - /* search49_2_0 -> 156 in the cache */ - /* search49_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_ffma, - 0, 3, - { 155, 164, 165 }, - -1, - } }, - - /* replace49_0 -> 156 in the cache */ - /* replace49_1_0 -> 155 in the cache */ - /* replace49_1_1 -> 158 in the cache */ - /* replace49_1_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 155, 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 156, 167 }, - -1, - } }, - - /* ('~ffmaz', 'a', 'b', ('ffmaz(is_used_once)', 'a', 'c', 'd')) => ('ffmaz', 'a', ('fadd', 'b', 'c'), 'd') */ - /* search50_0 -> 16 in the cache */ - /* search50_1 -> 36 in the cache */ - /* search50_2_0 -> 16 in the cache */ - /* search50_2_1 -> 141 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 16, 141, 169 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 2, - { 16, 36, 170 }, - -1, - } }, - - /* replace50_0 -> 16 in the cache */ - /* replace50_1_0 -> 36 in the cache */ - /* replace50_1_1 -> 141 in the cache */ - /* replace50_1 -> 144 in the cache */ - /* replace50_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 2, - { 16, 144, 169 }, - -1, - } }, - - /* ('~ffmaz', 'a', 'b', ('fmulz(is_used_once)', 'a', 'c')) => ('fmulz', 'a', ('fadd', 'b', 'c')) */ - /* search51_0 -> 16 in the cache */ - /* search51_1 -> 36 in the cache */ - /* search51_2_0 -> 16 in the cache */ - /* search51_2_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 16, 141 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 2, - { 16, 36, 173 }, - -1, - } }, - - /* replace51_0 -> 16 in the cache */ - /* replace51_1_0 -> 36 in the cache */ - /* replace51_1_1 -> 141 in the cache */ - /* replace51_1 -> 144 in the cache */ - /* replace51 -> 145 in the cache */ - - /* ('~fadd', ('fmulz(is_used_once)', 'a', 'b'), ('ffmaz(is_used_once)', 'a', 'c', 'd')) => ('ffmaz', 'a', ('fadd', 'b', 'c'), 'd') */ - /* search52_0_0 -> 16 in the cache */ - /* search52_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 16, 36 }, - 0, - } }, - /* search52_1_0 -> 16 in the cache */ - /* search52_1_1 -> 141 in the cache */ - /* search52_1_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 2, 1, - { 16, 141, 169 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 175, 176 }, - -1, - } }, - - /* replace52_0 -> 16 in the cache */ - /* replace52_1_0 -> 36 in the cache */ - /* replace52_1_1 -> 141 in the cache */ - /* replace52_1 -> 144 in the cache */ - /* replace52_2 -> 169 in the cache */ - /* replace52 -> 172 in the cache */ - - /* ('~ffmaz', 'a', ('fmulz(is_used_once)', 'b', 'c'), ('fmulz(is_used_once)', 'b', 'd')) => ('fmulz', 'b', ('ffmaz', 'a', 'c', 'd')) */ - /* search53_0 -> 16 in the cache */ - /* search53_1_0 -> 36 in the cache */ - /* search53_1_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 36, 141 }, - 0, - } }, - /* search53_2_0 -> 36 in the cache */ - /* search53_2_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 2, 1, - { 36, 169 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 3, - { 16, 178, 179 }, - -1, - } }, - - /* replace53_0 -> 36 in the cache */ - /* replace53_1_0 -> 16 in the cache */ - /* replace53_1_1 -> 141 in the cache */ - /* replace53_1_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 16, 141, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 2, - { 36, 181 }, - -1, - } }, - - /* ('iadd', ('imul', 'a', 'b'), ('imul', 'a', 'c')) => ('imul', 'a', ('iadd', 'b', 'c')) */ - /* search54_0_0 -> 132 in the cache */ - /* search54_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 132, 133 }, - -1, - } }, - /* search54_1_0 -> 132 in the cache */ - /* search54_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 2, 1, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 183, 184 }, - -1, - } }, - - /* replace54_0 -> 132 in the cache */ - /* replace54_1_0 -> 133 in the cache */ - /* replace54_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 132, 186 }, - -1, - } }, - - /* ('iadd', ('ishl', 'b', 'a'), ('ishl', 'c', 'a')) => ('ishl', ('iadd', 'b', 'c'), 'a') */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 188, 189 }, - -1, - } }, - /* search55_1_0 -> 135 in the cache */ - /* search55_1_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 135, 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 190, 191 }, - -1, - } }, - - /* replace55_0_0 -> 188 in the cache */ - /* replace55_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 188, 135 }, - -1, - } }, - /* replace55_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 193, 189 }, - -1, - } }, - - /* ('iand', ('ior', 'a', 'b'), ('ior', 'a', 'c')) => ('ior', 'a', ('iand', 'b', 'c')) */ - /* search56_0_0 -> 132 in the cache */ - /* search56_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 132, 133 }, - -1, - } }, - /* search56_1_0 -> 132 in the cache */ - /* search56_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 2, 1, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 195, 196 }, - -1, - } }, - - /* replace56_0 -> 132 in the cache */ - /* replace56_1_0 -> 133 in the cache */ - /* replace56_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 132, 198 }, - -1, - } }, - - /* ('ior', ('iand', 'a', 'b'), ('iand', 'a', 'c')) => ('iand', 'a', ('ior', 'b', 'c')) */ - /* search57_0_0 -> 132 in the cache */ - /* search57_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 132, 133 }, - -1, - } }, - /* search57_1_0 -> 132 in the cache */ - /* search57_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 200, 201 }, - -1, - } }, - - /* replace57_0 -> 132 in the cache */ - /* replace57_1_0 -> 133 in the cache */ - /* replace57_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 132, 203 }, - -1, - } }, - - /* ('ieq', ('iand', 'a', '#b(is_pos_power_of_two)'), 'b') => ('ine', ('iand', 'a', 'b'), 0) */ - /* search58_0_0 -> 0 in the cache */ - /* search58_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 0, 1 }, - -1, - } }, - /* search58_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 205, 3 }, - -1, - } }, - - /* replace58_0_0 -> 0 in the cache */ - /* replace58_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 0, 3 }, - -1, - } }, - /* replace58_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 207, 86 }, - -1, - } }, - - /* ('ine', ('iand', 'a', '#b(is_pos_power_of_two)'), 'b') => ('ieq', ('iand', 'a', 'b'), 0) */ - /* search59_0_0 -> 0 in the cache */ - /* search59_0_1 -> 1 in the cache */ - /* search59_0 -> 205 in the cache */ - /* search59_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 205, 3 }, - -1, - } }, - - /* replace59_0_0 -> 0 in the cache */ - /* replace59_0_1 -> 3 in the cache */ - /* replace59_0 -> 207 in the cache */ - /* replace59_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 207, 86 }, - -1, - } }, - - /* ('ieq', ('ushr(is_used_once)', 'a', '#b'), 0) => ('ult', 'a', ('ishl', 1, 'b')) */ - /* search60_0_0 -> 32 in the cache */ - /* search60_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 32, 33 }, - 0, - } }, - /* search60_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 211, 61 }, - -1, - } }, - - /* replace60_0 -> 32 in the cache */ - /* replace60_1_0 -> 35 in the cache */ - /* replace60_1_1 -> 36 in the cache */ - /* replace60_1 -> 37 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 32, 37 }, - -1, - } }, - - /* ('ine', ('ushr(is_used_once)', 'a', '#b'), 0) => ('uge', 'a', ('ishl', 1, 'b')) */ - /* search61_0_0 -> 32 in the cache */ - /* search61_0_1 -> 33 in the cache */ - /* search61_0 -> 211 in the cache */ - /* search61_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 211, 61 }, - -1, - } }, - - /* replace61_0 -> 32 in the cache */ - /* replace61_1_0 -> 35 in the cache */ - /* replace61_1_1 -> 36 in the cache */ - /* replace61_1 -> 37 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 32, 37 }, - -1, - } }, - - /* ('~fadd', ('fneg', 'a'), 'a') => 0.0 */ - /* search62_0_0 -> 32 in the cache */ - /* search62_0 -> 107 in the cache */ - /* search62_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fadd, - 0, 1, - { 107, 32 }, - -1, - } }, - - /* replace62 -> 117 in the cache */ - - /* ('iadd', ('ineg', 'a'), 'a') => 0 */ - /* search63_0_0 -> 32 in the cache */ - /* search63_0 -> 109 in the cache */ - /* search63_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 109, 32 }, - -1, - } }, - - /* replace63 -> 61 in the cache */ - - /* ('iadd', ('ineg', 'a'), ('iadd', 'a', 'b')) => b */ - /* search64_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 0 }, - -1, - } }, - /* search64_1_0 -> 0 in the cache */ - /* search64_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 218, 219 }, - -1, - } }, - - /* replace64 -> 3 in the cache */ - - /* ('iadd', 'a', ('iadd', ('ineg', 'a'), 'b')) => b */ - /* search65_0 -> 0 in the cache */ - /* search65_1_0_0 -> 0 in the cache */ - /* search65_1_0 -> 218 in the cache */ - /* search65_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 218, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 0, 221 }, - -1, - } }, - - /* replace65 -> 3 in the cache */ - - /* ('~fadd', ('fneg', 'a'), ('fadd', 'a', 'b')) => b */ - /* search66_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 0 }, - -1, - } }, - /* search66_1_0 -> 0 in the cache */ - /* search66_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 223, 224 }, - -1, - } }, - - /* replace66 -> 3 in the cache */ - - /* ('~fadd', 'a', ('fadd', ('fneg', 'a'), 'b')) => b */ - /* search67_0 -> 0 in the cache */ - /* search67_1_0_0 -> 0 in the cache */ - /* search67_1_0 -> 223 in the cache */ - /* search67_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 223, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 0, 226 }, - -1, - } }, - - /* replace67 -> 3 in the cache */ - - /* ('fadd', ('fsat', 'a'), ('fsat', ('fneg', 'a'))) => ('fsat', ('fabs', 'a')) */ - /* search68_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 32 }, - -1, - } }, - /* search68_1_0_0 -> 32 in the cache */ - /* search68_1_0 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 107 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 228, 229 }, - -1, - } }, - - /* replace68_0_0 -> 32 in the cache */ - /* replace68_0 -> 99 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 99 }, - -1, - } }, - - /* ('~fmul', 'a', 0.0) => 0.0 */ - /* search69_0 -> 32 in the cache */ - /* search69_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmul, - 0, 1, - { 32, 117 }, - -1, - } }, - - /* replace69 -> 117 in the cache */ - - /* ('fmul', 'a@16', 0.0) => 0.0 */ - /* search70_0 -> 11 in the cache */ - /* search70_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 11, 119 }, - -1, - } }, - - /* replace70 -> 119 in the cache */ - - /* ('fmul', 'a@32', 0.0) => 0.0 */ - /* search71_0 -> 16 in the cache */ - /* search71_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 16, 121 }, - -1, - } }, - - /* replace71 -> 121 in the cache */ - - /* ('fmulz', 'a', 0.0) => 0.0 */ - /* search72_0 -> 16 in the cache */ - /* search72_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 16, 121 }, - -1, - } }, - - /* replace72 -> 121 in the cache */ - - /* ('fmulz', 'a', 'b(is_finite_not_zero)') => ('fmul', 'a', 'b') */ - /* search73_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - false, - nir_type_invalid, - 3, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 16, 236 }, - -1, - } }, - - /* replace73_0 -> 16 in the cache */ - /* replace73_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* ('fmulz', 'a(is_finite)', 'b(is_finite)') => ('fmul', 'a', 'b') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - false, - nir_type_invalid, - 4, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - false, - nir_type_invalid, - 4, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 239, 240 }, - -1, - } }, - - /* replace74_0 -> 16 in the cache */ - /* replace74_1 -> 36 in the cache */ - /* replace74 -> 238 in the cache */ - - /* ('fmulz', 'a', 'a') => ('fmul', 'a', 'a') */ - /* search75_0 -> 16 in the cache */ - /* search75_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - -1, 0, - { 16, 16 }, - -1, - } }, - - /* replace75_0 -> 16 in the cache */ - /* replace75_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - -1, 0, - { 16, 16 }, - -1, - } }, - - /* ('ffmaz', 'a', 'b(is_finite_not_zero)', 'c') => ('ffma', 'a', 'b', 'c') */ - /* search76_0 -> 16 in the cache */ - /* search76_1 -> 236 in the cache */ - /* search76_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 16, 236, 141 }, - -1, - } }, - - /* replace76_0 -> 16 in the cache */ - /* replace76_1 -> 36 in the cache */ - /* replace76_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* ('ffmaz', 'a(is_finite)', 'b(is_finite)', 'c') => ('ffma', 'a', 'b', 'c') */ - /* search77_0 -> 239 in the cache */ - /* search77_1 -> 240 in the cache */ - /* search77_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 239, 240, 141 }, - -1, - } }, - - /* replace77_0 -> 16 in the cache */ - /* replace77_1 -> 36 in the cache */ - /* replace77_2 -> 141 in the cache */ - /* replace77 -> 245 in the cache */ - - /* ('ffmaz', 'a', 'a', 'b') => ('ffma', 'a', 'a', 'b') */ - /* search78_0 -> 16 in the cache */ - /* search78_1 -> 16 in the cache */ - /* search78_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - -1, 0, - { 16, 16, 36 }, - -1, - } }, - - /* replace78_0 -> 16 in the cache */ - /* replace78_1 -> 16 in the cache */ - /* replace78_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - -1, 0, - { 16, 16, 36 }, - -1, - } }, - - /* ('imul', 'a', 0) => 0 */ - /* search79_0 -> 32 in the cache */ - /* search79_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace79 -> 61 in the cache */ - - /* ('umul_unorm_4x8_vc4', 'a', 0) => 0 */ - /* search80_0 -> 16 in the cache */ - /* search80_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul_unorm_4x8_vc4, - 0, 1, - { 16, 128 }, - -1, - } }, - - /* replace80 -> 128 in the cache */ - - /* ('umul_unorm_4x8_vc4', 'a', -1) => a */ - /* search81_0 -> 16 in the cache */ - /* search81_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul_unorm_4x8_vc4, - 0, 1, - { 16, 130 }, - -1, - } }, - - /* replace81 -> 16 in the cache */ - - /* ('~fmul', 'a', 1.0) => a */ - /* search82_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmul, - 0, 1, - { 32, 252 }, - -1, - } }, - - /* replace82 -> 32 in the cache */ - - /* ('~fmulz', 'a', 1.0) => a */ - /* search83_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmulz, - 0, 1, - { 16, 254 }, - -1, - } }, - - /* replace83 -> 16 in the cache */ - - /* ('fmul(is_only_used_as_float)', 'a', 1.0) => a */ - /* search84_0 -> 32 in the cache */ - /* search84_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 32, 252 }, - 1, - } }, - - /* replace84 -> 32 in the cache */ - - /* ('imul', 'a', 1) => a */ - /* search85_0 -> 32 in the cache */ - /* search85_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 32, 35 }, - -1, - } }, - - /* replace85 -> 32 in the cache */ - - /* ('fmul', 'a', -1.0) => ('fneg', 'a') */ - /* search86_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 32, 258 }, - -1, - } }, - - /* replace86_0 -> 32 in the cache */ - /* replace86 -> 107 in the cache */ - - /* ('imul', 'a', -1) => ('ineg', 'a') */ - /* search87_0 -> 32 in the cache */ - /* search87_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 32, 63 }, - -1, - } }, - - /* replace87_0 -> 32 in the cache */ - /* replace87 -> 109 in the cache */ - - /* ('fmul', ('fsign', 'a'), ('fmul', 'a', 'a')) => ('fmul', ('fabs', 'a'), 'a') */ - /* search88_0_0 -> 32 in the cache */ - /* search88_0 -> 98 in the cache */ - /* search88_1_0 -> 32 in the cache */ - /* search88_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - -1, 0, - { 32, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 98, 261 }, - -1, - } }, - - /* replace88_0_0 -> 32 in the cache */ - /* replace88_0 -> 99 in the cache */ - /* replace88_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 99, 32 }, - -1, - } }, - - /* ('fmul', ('fmul', ('fsign', 'a'), 'a'), 'a') => ('fmul', ('fabs', 'a'), 'a') */ - /* search89_0_0_0 -> 32 in the cache */ - /* search89_0_0 -> 98 in the cache */ - /* search89_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 98, 32 }, - -1, - } }, - /* search89_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 264, 32 }, - -1, - } }, - - /* replace89_0_0 -> 32 in the cache */ - /* replace89_0 -> 99 in the cache */ - /* replace89_1 -> 32 in the cache */ - /* replace89 -> 263 in the cache */ - - /* ('~ffma', 0.0, 'a', 'b') => b */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - /* search90_1 -> 0 in the cache */ - /* search90_2 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 266, 0, 3 }, - -1, - } }, - - /* replace90 -> 3 in the cache */ - - /* ('ffma@16(is_only_used_as_float)', 0.0, 'a', 'b') => b */ - /* search91_0 -> 119 in the cache */ - /* search91_1 -> 11 in the cache */ - { .variable = { - { nir_search_value_variable, 16 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 119, 11, 268 }, - 1, - } }, - - /* replace91 -> 268 in the cache */ - - /* ('ffma@32(is_only_used_as_float)', 0.0, 'a', 'b') => b */ - /* search92_0 -> 121 in the cache */ - /* search92_1 -> 16 in the cache */ - /* search92_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 121, 16, 36 }, - 1, - } }, - - /* replace92 -> 36 in the cache */ - - /* ('ffmaz', 0.0, 'a', 'b') => ('fadd', 0.0, 'b') */ - /* search93_0 -> 121 in the cache */ - /* search93_1 -> 16 in the cache */ - /* search93_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 121, 16, 36 }, - -1, - } }, - - /* replace93_0 -> 121 in the cache */ - /* replace93_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 121, 36 }, - -1, - } }, - - /* ('~ffma', 'a', 'b', 0.0) => ('fmul', 'a', 'b') */ - /* search94_0 -> 0 in the cache */ - /* search94_1 -> 3 in the cache */ - /* search94_2 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 0, 3, 266 }, - -1, - } }, - - /* replace94_0 -> 0 in the cache */ - /* replace94_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('ffma@16', 'a', 'b', 0.0) => ('fmul', 'a', 'b') */ - /* search95_0 -> 11 in the cache */ - /* search95_1 -> 268 in the cache */ - /* search95_2 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 11, 268, 119 }, - -1, - } }, - - /* replace95_0 -> 11 in the cache */ - /* replace95_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 11, 268 }, - -1, - } }, - - /* ('ffma@32', 'a', 'b', 0.0) => ('fmul', 'a', 'b') */ - /* search96_0 -> 16 in the cache */ - /* search96_1 -> 36 in the cache */ - /* search96_2 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 16, 36, 121 }, - -1, - } }, - - /* replace96_0 -> 16 in the cache */ - /* replace96_1 -> 36 in the cache */ - /* replace96 -> 238 in the cache */ - - /* ('ffmaz', 'a', 'b', 0.0) => ('fmulz', 'a', 'b') */ - /* search97_0 -> 16 in the cache */ - /* search97_1 -> 36 in the cache */ - /* search97_2 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 16, 36, 121 }, - -1, - } }, - - /* replace97_0 -> 16 in the cache */ - /* replace97_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* ('ffma', 1.0, 'a', 'b') => ('fadd', 'a', 'b') */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - /* search98_1 -> 0 in the cache */ - /* search98_2 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 280, 0, 3 }, - -1, - } }, - - /* replace98_0 -> 0 in the cache */ - /* replace98_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('ffmaz', 1.0, 'a', 'b') => ('fadd', 'a', 'b') */ - /* search99_0 -> 254 in the cache */ - /* search99_1 -> 16 in the cache */ - /* search99_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 254, 16, 36 }, - -1, - } }, - - /* replace99_0 -> 16 in the cache */ - /* replace99_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* ('ffma', -1.0, 'a', 'b') => ('fadd', ('fneg', 'a'), 'b') */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - /* search100_1 -> 0 in the cache */ - /* search100_2 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 285, 0, 3 }, - -1, - } }, - - /* replace100_0_0 -> 0 in the cache */ - /* replace100_0 -> 223 in the cache */ - /* replace100_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 223, 3 }, - -1, - } }, - - /* ('ffmaz', -1.0, 'a', 'b') => ('fadd', ('fneg', 'a'), 'b') */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - /* search101_1 -> 16 in the cache */ - /* search101_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 288, 16, 36 }, - -1, - } }, - - /* replace101_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 16 }, - -1, - } }, - /* replace101_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 290, 36 }, - -1, - } }, - - /* ('~ffma', '#a', '#b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search102_2 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 292, 293, 135 }, - -1, - } }, - - /* replace102_0_0 -> 132 in the cache */ - /* replace102_0_1 -> 133 in the cache */ - /* replace102_0 -> 134 in the cache */ - /* replace102_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 134, 135 }, - -1, - } }, - - /* ('~ffmaz', '#a', '#b', 'c') => ('fadd', ('fmulz', 'a', 'b'), 'c') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search103_1 -> 33 in the cache */ - /* search103_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 1, - { 296, 33, 141 }, - -1, - } }, - - /* replace103_0_0 -> 16 in the cache */ - /* replace103_0_1 -> 36 in the cache */ - /* replace103_0 -> 140 in the cache */ - /* replace103_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 140, 141 }, - -1, - } }, - - /* ('~flrp', 'a', 'b', 0.0) => a */ - /* search104_0 -> 0 in the cache */ - /* search104_1 -> 3 in the cache */ - /* search104_2 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 0, 3, 266 }, - -1, - } }, - - /* replace104 -> 0 in the cache */ - - /* ('~flrp', 'a', 'b', 1.0) => b */ - /* search105_0 -> 0 in the cache */ - /* search105_1 -> 3 in the cache */ - /* search105_2 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 0, 3, 280 }, - -1, - } }, - - /* replace105 -> 3 in the cache */ - - /* ('~flrp', 'a', 'a', 'b') => a */ - /* search106_0 -> 0 in the cache */ - /* search106_1 -> 0 in the cache */ - /* search106_2 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 0, 0, 3 }, - -1, - } }, - - /* replace106 -> 0 in the cache */ - - /* ('~flrp', 0.0, 'a', 'b') => ('fmul', 'a', 'b') */ - /* search107_0 -> 266 in the cache */ - /* search107_1 -> 0 in the cache */ - /* search107_2 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 266, 0, 3 }, - -1, - } }, - - /* replace107_0 -> 0 in the cache */ - /* replace107_1 -> 3 in the cache */ - /* replace107 -> 274 in the cache */ - - /* ('~flrp', 'a', ('fadd(is_used_once)', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') */ - /* search108_0 -> 132 in the cache */ - /* search108_1_0 -> 132 in the cache */ - /* search108_1_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 132, 133 }, - 0, - } }, - /* search108_2 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_flrp, - -1, 1, - { 132, 303, 135 }, - -1, - } }, - - /* replace108_0_0 -> 133 in the cache */ - /* replace108_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 133, 135 }, - -1, - } }, - /* replace108_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 305, 132 }, - -1, - } }, - - /* ('sdot_4x8_iadd', 'a', 0, 'b') => b */ - /* search109_0 -> 16 in the cache */ - /* search109_1 -> 128 in the cache */ - /* search109_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace109 -> 36 in the cache */ - - /* ('udot_4x8_uadd', 'a', 0, 'b') => b */ - /* search110_0 -> 16 in the cache */ - /* search110_1 -> 128 in the cache */ - /* search110_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace110 -> 36 in the cache */ - - /* ('sdot_4x8_iadd_sat', 'a', 0, 'b') => b */ - /* search111_0 -> 16 in the cache */ - /* search111_1 -> 128 in the cache */ - /* search111_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd_sat, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace111 -> 36 in the cache */ - - /* ('udot_4x8_uadd_sat', 'a', 0, 'b') => b */ - /* search112_0 -> 16 in the cache */ - /* search112_1 -> 128 in the cache */ - /* search112_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd_sat, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace112 -> 36 in the cache */ - - /* ('sdot_2x16_iadd', 'a', 0, 'b') => b */ - /* search113_0 -> 16 in the cache */ - /* search113_1 -> 128 in the cache */ - /* search113_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace113 -> 36 in the cache */ - - /* ('udot_2x16_uadd', 'a', 0, 'b') => b */ - /* search114_0 -> 16 in the cache */ - /* search114_1 -> 128 in the cache */ - /* search114_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace114 -> 36 in the cache */ - - /* ('sdot_2x16_iadd_sat', 'a', 0, 'b') => b */ - /* search115_0 -> 16 in the cache */ - /* search115_1 -> 128 in the cache */ - /* search115_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd_sat, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace115 -> 36 in the cache */ - - /* ('udot_2x16_uadd_sat', 'a', 0, 'b') => b */ - /* search116_0 -> 16 in the cache */ - /* search116_1 -> 128 in the cache */ - /* search116_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd_sat, - 0, 1, - { 16, 128, 36 }, - -1, - } }, - - /* replace116 -> 36 in the cache */ - - /* ('sudot_4x8_iadd', 'a', 0, 'b') => b */ - /* search117_0 -> 16 in the cache */ - /* search117_1 -> 128 in the cache */ - /* search117_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 16, 128, 36 }, - -1, - } }, - - /* replace117 -> 36 in the cache */ - - /* ('sudot_4x8_iadd', 0, 'a', 'b') => b */ - /* search118_0 -> 128 in the cache */ - /* search118_1 -> 16 in the cache */ - /* search118_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 128, 16, 36 }, - -1, - } }, - - /* replace118 -> 36 in the cache */ - - /* ('sudot_4x8_iadd_sat', 'a', 0, 'b') => b */ - /* search119_0 -> 16 in the cache */ - /* search119_1 -> 128 in the cache */ - /* search119_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd_sat, - -1, 0, - { 16, 128, 36 }, - -1, - } }, - - /* replace119 -> 36 in the cache */ - - /* ('sudot_4x8_iadd_sat', 0, 'a', 'b') => b */ - /* search120_0 -> 128 in the cache */ - /* search120_1 -> 16 in the cache */ - /* search120_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd_sat, - -1, 0, - { 128, 16, 36 }, - -1, - } }, - - /* replace120 -> 36 in the cache */ - - /* ('iadd', ('sdot_4x8_iadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('sdot_4x8_iadd', 'a', 'b', ('iadd', 'c', 'd')) */ - /* search121_0_0 -> 16 in the cache */ - /* search121_0_1 -> 36 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd, - 1, 1, - { 16, 36, 319 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 3, /* d */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 320, 321 }, - -1, - } }, - - /* replace121_0 -> 16 in the cache */ - /* replace121_1 -> 36 in the cache */ - /* replace121_2_0 -> 141 in the cache */ - /* replace121_2_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 141, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd, - 0, 2, - { 16, 36, 323 }, - -1, - } }, - - /* ('iadd', ('udot_4x8_uadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('udot_4x8_uadd', 'a', 'b', ('iadd', 'c', 'd')) */ - /* search122_0_0 -> 16 in the cache */ - /* search122_0_1 -> 36 in the cache */ - /* search122_0_2 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd, - 1, 1, - { 16, 36, 319 }, - 0, - } }, - /* search122_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 325, 321 }, - -1, - } }, - - /* replace122_0 -> 16 in the cache */ - /* replace122_1 -> 36 in the cache */ - /* replace122_2_0 -> 141 in the cache */ - /* replace122_2_1 -> 169 in the cache */ - /* replace122_2 -> 323 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd, - 0, 2, - { 16, 36, 323 }, - -1, - } }, - - /* ('iadd', ('sudot_4x8_iadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('sudot_4x8_iadd', 'a', 'b', ('iadd', 'c', 'd')) */ - /* search123_0_0 -> 16 in the cache */ - /* search123_0_1 -> 36 in the cache */ - /* search123_0_2 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 16, 36, 319 }, - 0, - } }, - /* search123_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 328, 321 }, - -1, - } }, - - /* replace123_0 -> 16 in the cache */ - /* replace123_1 -> 36 in the cache */ - /* replace123_2_0 -> 141 in the cache */ - /* replace123_2_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 141, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 1, - { 16, 36, 330 }, - -1, - } }, - - /* ('iadd', ('sdot_2x16_iadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('sdot_2x16_iadd', 'a', 'b', ('iadd', 'c', 'd')) */ - /* search124_0_0 -> 16 in the cache */ - /* search124_0_1 -> 36 in the cache */ - /* search124_0_2 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd, - 1, 1, - { 16, 36, 319 }, - 0, - } }, - /* search124_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 332, 321 }, - -1, - } }, - - /* replace124_0 -> 16 in the cache */ - /* replace124_1 -> 36 in the cache */ - /* replace124_2_0 -> 141 in the cache */ - /* replace124_2_1 -> 169 in the cache */ - /* replace124_2 -> 323 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd, - 0, 2, - { 16, 36, 323 }, - -1, - } }, - - /* ('iadd', ('udot_2x16_uadd(is_used_once)', 'a', 'b', '#c'), '#d') => ('udot_2x16_uadd', 'a', 'b', ('iadd', 'c', 'd')) */ - /* search125_0_0 -> 16 in the cache */ - /* search125_0_1 -> 36 in the cache */ - /* search125_0_2 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd, - 1, 1, - { 16, 36, 319 }, - 0, - } }, - /* search125_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 335, 321 }, - -1, - } }, - - /* replace125_0 -> 16 in the cache */ - /* replace125_1 -> 36 in the cache */ - /* replace125_2_0 -> 141 in the cache */ - /* replace125_2_1 -> 169 in the cache */ - /* replace125_2 -> 323 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd, - 0, 2, - { 16, 36, 323 }, - -1, - } }, - - /* ('iadd', ('sdot_4x8_iadd', 'a(is_not_const)', 'b', 0), 'c') => ('sdot_4x8_iadd', 'a', 'b', 'c') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search126_0_1 -> 36 in the cache */ - /* search126_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd, - 1, 1, - { 338, 36, 128 }, - -1, - } }, - /* search126_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 339, 141 }, - -1, - } }, - - /* replace126_0 -> 16 in the cache */ - /* replace126_1 -> 36 in the cache */ - /* replace126_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* ('iadd', ('udot_4x8_uadd', 'a(is_not_const)', 'b', 0), 'c') => ('udot_4x8_uadd', 'a', 'b', 'c') */ - /* search127_0_0 -> 338 in the cache */ - /* search127_0_1 -> 36 in the cache */ - /* search127_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd, - 1, 1, - { 338, 36, 128 }, - -1, - } }, - /* search127_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 342, 141 }, - -1, - } }, - - /* replace127_0 -> 16 in the cache */ - /* replace127_1 -> 36 in the cache */ - /* replace127_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* ('iadd', ('sudot_4x8_iadd', 'a(is_not_const)', 'b', 0), 'c') => ('sudot_4x8_iadd', 'a', 'b', 'c') */ - /* search128_0_0 -> 338 in the cache */ - /* search128_0_1 -> 36 in the cache */ - /* search128_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 338, 36, 128 }, - -1, - } }, - /* search128_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 345, 141 }, - -1, - } }, - - /* replace128_0 -> 16 in the cache */ - /* replace128_1 -> 36 in the cache */ - /* replace128_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 16, 36, 141 }, - -1, - } }, - - /* ('iadd', ('sudot_4x8_iadd', 'a', 'b(is_not_const)', 0), 'c') => ('sudot_4x8_iadd', 'a', 'b', 'c') */ - /* search129_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search129_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 16, 348, 128 }, - -1, - } }, - /* search129_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 349, 141 }, - -1, - } }, - - /* replace129_0 -> 16 in the cache */ - /* replace129_1 -> 36 in the cache */ - /* replace129_2 -> 141 in the cache */ - /* replace129 -> 347 in the cache */ - - /* ('iadd', ('sdot_2x16_iadd', 'a(is_not_const)', 'b', 0), 'c') => ('sdot_2x16_iadd', 'a', 'b', 'c') */ - /* search130_0_0 -> 338 in the cache */ - /* search130_0_1 -> 36 in the cache */ - /* search130_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd, - 1, 1, - { 338, 36, 128 }, - -1, - } }, - /* search130_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 351, 141 }, - -1, - } }, - - /* replace130_0 -> 16 in the cache */ - /* replace130_1 -> 36 in the cache */ - /* replace130_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* ('iadd', ('udot_2x16_uadd', 'a(is_not_const)', 'b', 0), 'c') => ('udot_2x16_uadd', 'a', 'b', 'c') */ - /* search131_0_0 -> 338 in the cache */ - /* search131_0_1 -> 36 in the cache */ - /* search131_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd, - 1, 1, - { 338, 36, 128 }, - -1, - } }, - /* search131_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 354, 141 }, - -1, - } }, - - /* replace131_0 -> 16 in the cache */ - /* replace131_1 -> 36 in the cache */ - /* replace131_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* ('sdot_4x8_iadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('sdot_4x8_iadd', 'a', 'b', 0), 'c') */ - /* search132_0 -> 296 in the cache */ - /* search132_1 -> 33 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace132_0_0 -> 16 in the cache */ - /* replace132_0_1 -> 36 in the cache */ - /* replace132_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd, - 1, 1, - { 16, 36, 128 }, - -1, - } }, - /* replace132_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 359, 141 }, - -1, - } }, - - /* ('udot_4x8_uadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('udot_4x8_uadd', 'a', 'b', 0), 'c') */ - /* search133_0 -> 296 in the cache */ - /* search133_1 -> 33 in the cache */ - /* search133_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace133_0_0 -> 16 in the cache */ - /* replace133_0_1 -> 36 in the cache */ - /* replace133_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd, - 1, 1, - { 16, 36, 128 }, - -1, - } }, - /* replace133_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 362, 141 }, - -1, - } }, - - /* ('sudot_4x8_iadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('sudot_4x8_iadd', 'a', 'b', 0), 'c') */ - /* search134_0 -> 296 in the cache */ - /* search134_1 -> 33 in the cache */ - /* search134_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 296, 33, 357 }, - -1, - } }, - - /* replace134_0_0 -> 16 in the cache */ - /* replace134_0_1 -> 36 in the cache */ - /* replace134_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd, - -1, 0, - { 16, 36, 128 }, - -1, - } }, - /* replace134_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 365, 141 }, - -1, - } }, - - /* ('sdot_2x16_iadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('sdot_2x16_iadd', 'a', 'b', 0), 'c') */ - /* search135_0 -> 296 in the cache */ - /* search135_1 -> 33 in the cache */ - /* search135_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace135_0_0 -> 16 in the cache */ - /* replace135_0_1 -> 36 in the cache */ - /* replace135_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd, - 1, 1, - { 16, 36, 128 }, - -1, - } }, - /* replace135_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 368, 141 }, - -1, - } }, - - /* ('udot_2x16_uadd', '#a', '#b', 'c(is_not_const)') => ('iadd', ('udot_2x16_uadd', 'a', 'b', 0), 'c') */ - /* search136_0 -> 296 in the cache */ - /* search136_1 -> 33 in the cache */ - /* search136_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace136_0_0 -> 16 in the cache */ - /* replace136_0_1 -> 36 in the cache */ - /* replace136_0_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd, - 1, 1, - { 16, 36, 128 }, - -1, - } }, - /* replace136_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 371, 141 }, - -1, - } }, - - /* ('sdot_4x8_iadd_sat', '#a', '#b', 'c(is_not_const)') => ('iadd_sat', ('sdot_4x8_iadd', 'a', 'b', 0), 'c') */ - /* search137_0 -> 296 in the cache */ - /* search137_1 -> 33 in the cache */ - /* search137_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd_sat, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace137_0_0 -> 16 in the cache */ - /* replace137_0_1 -> 36 in the cache */ - /* replace137_0_2 -> 128 in the cache */ - /* replace137_0 -> 359 in the cache */ - /* replace137_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 2, - { 359, 141 }, - -1, - } }, - - /* ('udot_4x8_uadd_sat', '#a', '#b', 'c(is_not_const)') => ('uadd_sat', ('udot_4x8_uadd', 'a', 'b', 0), 'c') */ - /* search138_0 -> 296 in the cache */ - /* search138_1 -> 33 in the cache */ - /* search138_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd_sat, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace138_0_0 -> 16 in the cache */ - /* replace138_0_1 -> 36 in the cache */ - /* replace138_0_2 -> 128 in the cache */ - /* replace138_0 -> 362 in the cache */ - /* replace138_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 2, - { 362, 141 }, - -1, - } }, - - /* ('sudot_4x8_iadd_sat', '#a', '#b', 'c(is_not_const)') => ('iadd_sat', ('sudot_4x8_iadd', 'a', 'b', 0), 'c') */ - /* search139_0 -> 296 in the cache */ - /* search139_1 -> 33 in the cache */ - /* search139_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd_sat, - -1, 0, - { 296, 33, 357 }, - -1, - } }, - - /* replace139_0_0 -> 16 in the cache */ - /* replace139_0_1 -> 36 in the cache */ - /* replace139_0_2 -> 128 in the cache */ - /* replace139_0 -> 365 in the cache */ - /* replace139_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 1, - { 365, 141 }, - -1, - } }, - - /* ('sdot_2x16_iadd_sat', '#a', '#b', 'c(is_not_const)') => ('iadd_sat', ('sdot_2x16_iadd', 'a', 'b', 0), 'c') */ - /* search140_0 -> 296 in the cache */ - /* search140_1 -> 33 in the cache */ - /* search140_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd_sat, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace140_0_0 -> 16 in the cache */ - /* replace140_0_1 -> 36 in the cache */ - /* replace140_0_2 -> 128 in the cache */ - /* replace140_0 -> 368 in the cache */ - /* replace140_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 2, - { 368, 141 }, - -1, - } }, - - /* ('udot_2x16_uadd_sat', '#a', '#b', 'c(is_not_const)') => ('uadd_sat', ('udot_2x16_uadd', 'a', 'b', 0), 'c') */ - /* search141_0 -> 296 in the cache */ - /* search141_1 -> 33 in the cache */ - /* search141_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd_sat, - 0, 1, - { 296, 33, 357 }, - -1, - } }, - - /* replace141_0_0 -> 16 in the cache */ - /* replace141_0_1 -> 36 in the cache */ - /* replace141_0_2 -> 128 in the cache */ - /* replace141_0 -> 371 in the cache */ - /* replace141_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 2, - { 371, 141 }, - -1, - } }, - - /* ('fmul@32', ('bcsel', ('feq', 'b', 0.0, 'ignore_exact'), 0.0, 'a'), ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, 'b')) => ('fmulz', 'a', 'b') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search142_0_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - true, - nir_op_feq, - 1, 1, - { 383, 121 }, - -1, - } }, - /* search142_0_1 -> 121 in the cache */ - /* search142_0_2 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 384, 121, 189 }, - -1, - } }, - /* search142_1_0_0 -> 189 in the cache */ - /* search142_1_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - true, - nir_op_feq, - 2, 1, - { 189, 121 }, - -1, - } }, - /* search142_1_1 -> 121 in the cache */ - /* search142_1_2 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 386, 121, 383 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 3, - { 385, 387 }, - -1, - } }, - - /* replace142_0 -> 189 in the cache */ - /* replace142_1 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 189, 383 }, - -1, - } }, - - /* ('fmul@32', 'a', ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, '#b(is_not_const_zero)')) => ('fmulz', 'a', 'b') */ - /* search143_0 -> 16 in the cache */ - /* search143_1_0_0 -> 16 in the cache */ - /* search143_1_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - true, - nir_op_feq, - 1, 1, - { 16, 121 }, - -1, - } }, - /* search143_1_1 -> 121 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 6, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 390, 121, 391 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 16, 392 }, - -1, - } }, - - /* replace143_0 -> 16 in the cache */ - /* replace143_1 -> 36 in the cache */ - /* replace143 -> 279 in the cache */ - - /* ('ffma@32', ('bcsel', ('feq', 'b', 0.0, 'ignore_exact'), 0.0, 'a'), ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, 'b'), 'c') => ('ffmaz', 'a', 'b', 'c') */ - /* search144_0_0_0 -> 383 in the cache */ - /* search144_0_0_1 -> 121 in the cache */ - /* search144_0_0 -> 384 in the cache */ - /* search144_0_1 -> 121 in the cache */ - /* search144_0_2 -> 189 in the cache */ - /* search144_0 -> 385 in the cache */ - /* search144_1_0_0 -> 189 in the cache */ - /* search144_1_0_1 -> 121 in the cache */ - /* search144_1_0 -> 386 in the cache */ - /* search144_1_1 -> 121 in the cache */ - /* search144_1_2 -> 383 in the cache */ - /* search144_1 -> 387 in the cache */ - /* search144_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 3, - { 385, 387, 141 }, - -1, - } }, - - /* replace144_0 -> 189 in the cache */ - /* replace144_1 -> 383 in the cache */ - /* replace144_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 189, 383, 141 }, - -1, - } }, - - /* ('ffma@32', 'a', ('bcsel', ('feq', 'a', 0.0, 'ignore_exact'), 0.0, '#b(is_not_const_zero)'), 'c') => ('ffmaz', 'a', 'b', 'c') */ - /* search145_0 -> 16 in the cache */ - /* search145_1_0_0 -> 16 in the cache */ - /* search145_1_0_1 -> 121 in the cache */ - /* search145_1_0 -> 390 in the cache */ - /* search145_1_1 -> 121 in the cache */ - /* search145_1_2 -> 391 in the cache */ - /* search145_1 -> 392 in the cache */ - /* search145_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 2, - { 16, 392, 141 }, - -1, - } }, - - /* replace145_0 -> 16 in the cache */ - /* replace145_1 -> 36 in the cache */ - /* replace145_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* ('bcsel', ('feq', 'b', 0.0, 'ignore_exact'), 1.0, ('fexp2', ('fmul@32', 'a', 'b'))) => ('fexp2', ('fmulz', 'a', 'b')) */ - /* search146_0_0 -> 383 in the cache */ - /* search146_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - true, - nir_op_feq, - 0, 1, - { 383, 121 }, - -1, - } }, - /* search146_1 -> 254 in the cache */ - /* search146_2_0_0 -> 189 in the cache */ - /* search146_2_0_1 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 189, 383 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fexp2, - -1, 1, - { 399 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 398, 254, 400 }, - -1, - } }, - - /* replace146_0_0 -> 189 in the cache */ - /* replace146_0_1 -> 383 in the cache */ - /* replace146_0 -> 389 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fexp2, - -1, 1, - { 389 }, - -1, - } }, - - /* ('sdot_4x8_iadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_i8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_i8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_i8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_i8', 'b', 3)))), 'c') */ - /* search147_0 -> 16 in the cache */ - /* search147_1 -> 36 in the cache */ - /* search147_2 -> 141 in the cache */ - /* search147 -> 341 in the cache */ - - /* replace147_0_0_0_0_0 -> 16 in the cache */ - /* replace147_0_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 16, 128 }, - -1, - } }, - /* replace147_0_0_0_1_0 -> 36 in the cache */ - /* replace147_0_0_0_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 36, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 3, 1, - { 403, 404 }, - -1, - } }, - /* replace147_0_0_1_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 16, 406 }, - -1, - } }, - /* replace147_0_0_1_1_0 -> 36 in the cache */ - /* replace147_0_0_1_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 36, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 4, 1, - { 407, 408 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 3, - { 405, 409 }, - -1, - } }, - /* replace147_0_1_0_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x2 /* 2 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 16, 411 }, - -1, - } }, - /* replace147_0_1_0_1_0 -> 36 in the cache */ - /* replace147_0_1_0_1_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 36, 411 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 6, 1, - { 412, 413 }, - -1, - } }, - /* replace147_0_1_1_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x3 /* 3 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 16, 415 }, - -1, - } }, - /* replace147_0_1_1_1_0 -> 36 in the cache */ - /* replace147_0_1_1_1_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 36, 415 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 7, 1, - { 416, 417 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 5, 3, - { 414, 418 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 7, - { 410, 419 }, - -1, - } }, - /* replace147_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 8, - { 420, 141 }, - -1, - } }, - - /* ('udot_4x8_uadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('iadd', ('imul', ('extract_u8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_u8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_u8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_u8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') */ - /* search148_0 -> 16 in the cache */ - /* search148_1 -> 36 in the cache */ - /* search148_2 -> 141 in the cache */ - /* search148 -> 344 in the cache */ - - /* replace148_0_0_0_0_0 -> 16 in the cache */ - /* replace148_0_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 16, 128 }, - -1, - } }, - /* replace148_0_0_0_1_0 -> 36 in the cache */ - /* replace148_0_0_0_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 36, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 3, 1, - { 422, 423 }, - -1, - } }, - /* replace148_0_0_1_0_0 -> 16 in the cache */ - /* replace148_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 16, 406 }, - -1, - } }, - /* replace148_0_0_1_1_0 -> 36 in the cache */ - /* replace148_0_0_1_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 36, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 4, 1, - { 425, 426 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 3, - { 424, 427 }, - -1, - } }, - /* replace148_0_1_0_0_0 -> 16 in the cache */ - /* replace148_0_1_0_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 16, 411 }, - -1, - } }, - /* replace148_0_1_0_1_0 -> 36 in the cache */ - /* replace148_0_1_0_1_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 36, 411 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 6, 1, - { 429, 430 }, - -1, - } }, - /* replace148_0_1_1_0_0 -> 16 in the cache */ - /* replace148_0_1_1_0_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 16, 415 }, - -1, - } }, - /* replace148_0_1_1_1_0 -> 36 in the cache */ - /* replace148_0_1_1_1_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 36, 415 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 7, 1, - { 432, 433 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 5, 3, - { 431, 434 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 7, - { 428, 435 }, - -1, - } }, - /* replace148_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 8, - { 436, 141 }, - -1, - } }, - - /* ('sudot_4x8_iadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') */ - /* search149_0 -> 16 in the cache */ - /* search149_1 -> 36 in the cache */ - /* search149_2 -> 141 in the cache */ - /* search149 -> 347 in the cache */ - - /* replace149_0_0_0_0_0 -> 16 in the cache */ - /* replace149_0_0_0_0_1 -> 128 in the cache */ - /* replace149_0_0_0_0 -> 403 in the cache */ - /* replace149_0_0_0_1_0 -> 36 in the cache */ - /* replace149_0_0_0_1_1 -> 128 in the cache */ - /* replace149_0_0_0_1 -> 423 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 3, 1, - { 403, 423 }, - -1, - } }, - /* replace149_0_0_1_0_0 -> 16 in the cache */ - /* replace149_0_0_1_0_1 -> 406 in the cache */ - /* replace149_0_0_1_0 -> 407 in the cache */ - /* replace149_0_0_1_1_0 -> 36 in the cache */ - /* replace149_0_0_1_1_1 -> 406 in the cache */ - /* replace149_0_0_1_1 -> 426 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 4, 1, - { 407, 426 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 3, - { 438, 439 }, - -1, - } }, - /* replace149_0_1_0_0_0 -> 16 in the cache */ - /* replace149_0_1_0_0_1 -> 411 in the cache */ - /* replace149_0_1_0_0 -> 412 in the cache */ - /* replace149_0_1_0_1_0 -> 36 in the cache */ - /* replace149_0_1_0_1_1 -> 411 in the cache */ - /* replace149_0_1_0_1 -> 430 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 6, 1, - { 412, 430 }, - -1, - } }, - /* replace149_0_1_1_0_0 -> 16 in the cache */ - /* replace149_0_1_1_0_1 -> 415 in the cache */ - /* replace149_0_1_1_0 -> 416 in the cache */ - /* replace149_0_1_1_1_0 -> 36 in the cache */ - /* replace149_0_1_1_1_1 -> 415 in the cache */ - /* replace149_0_1_1_1 -> 433 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 7, 1, - { 416, 433 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 5, 3, - { 441, 442 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 7, - { 440, 443 }, - -1, - } }, - /* replace149_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 8, - { 444, 141 }, - -1, - } }, - - /* ('sdot_2x16_iadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('imul', ('extract_i16', 'a', 0), ('extract_i16', 'b', 0)), ('imul', ('extract_i16', 'a', 1), ('extract_i16', 'b', 1))), 'c') */ - /* search150_0 -> 16 in the cache */ - /* search150_1 -> 36 in the cache */ - /* search150_2 -> 141 in the cache */ - /* search150 -> 353 in the cache */ - - /* replace150_0_0_0_0 -> 16 in the cache */ - /* replace150_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 16, 128 }, - -1, - } }, - /* replace150_0_0_1_0 -> 36 in the cache */ - /* replace150_0_0_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 36, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 2, 1, - { 446, 447 }, - -1, - } }, - /* replace150_0_1_0_0 -> 16 in the cache */ - /* replace150_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 16, 406 }, - -1, - } }, - /* replace150_0_1_1_0 -> 36 in the cache */ - /* replace150_0_1_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 36, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 3, 1, - { 449, 450 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 3, - { 448, 451 }, - -1, - } }, - /* replace150_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 4, - { 452, 141 }, - -1, - } }, - - /* ('udot_2x16_uadd', 'a', 'b', 'c') => ('iadd', ('iadd', ('imul', ('extract_u16', 'a', 0), ('extract_u16', 'b', 0)), ('imul', ('extract_u16', 'a', 1), ('extract_u16', 'b', 1))), 'c') */ - /* search151_0 -> 16 in the cache */ - /* search151_1 -> 36 in the cache */ - /* search151_2 -> 141 in the cache */ - /* search151 -> 356 in the cache */ - - /* replace151_0_0_0_0 -> 16 in the cache */ - /* replace151_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 16, 128 }, - -1, - } }, - /* replace151_0_0_1_0 -> 36 in the cache */ - /* replace151_0_0_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 36, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 2, 1, - { 454, 455 }, - -1, - } }, - /* replace151_0_1_0_0 -> 16 in the cache */ - /* replace151_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 16, 406 }, - -1, - } }, - /* replace151_0_1_1_0 -> 36 in the cache */ - /* replace151_0_1_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 36, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 3, 1, - { 457, 458 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 3, - { 456, 459 }, - -1, - } }, - /* replace151_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 4, - { 460, 141 }, - -1, - } }, - - /* ('udot_4x8_uadd_sat', 'a', 'b', '#c(is_ult_0xfffc07fc)') => ('udot_4x8_uadd', 'a', 'b', 'c') */ - /* search152_0 -> 16 in the cache */ - /* search152_1 -> 36 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - true, - nir_type_invalid, - 7, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd_sat, - 0, 1, - { 16, 36, 462 }, - -1, - } }, - - /* replace152_0 -> 16 in the cache */ - /* replace152_1 -> 36 in the cache */ - /* replace152_2 -> 141 in the cache */ - /* replace152 -> 344 in the cache */ - - /* ('udot_4x8_uadd_sat', 'a', 'b', 'c') => ('uadd_sat', ('iadd', ('iadd', ('imul', ('extract_u8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_u8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_u8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_u8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') */ - /* search153_0 -> 16 in the cache */ - /* search153_1 -> 36 in the cache */ - /* search153_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_4x8_uadd_sat, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace153_0_0_0_0_0 -> 16 in the cache */ - /* replace153_0_0_0_0_1 -> 128 in the cache */ - /* replace153_0_0_0_0 -> 422 in the cache */ - /* replace153_0_0_0_1_0 -> 36 in the cache */ - /* replace153_0_0_0_1_1 -> 128 in the cache */ - /* replace153_0_0_0_1 -> 423 in the cache */ - /* replace153_0_0_0 -> 424 in the cache */ - /* replace153_0_0_1_0_0 -> 16 in the cache */ - /* replace153_0_0_1_0_1 -> 406 in the cache */ - /* replace153_0_0_1_0 -> 425 in the cache */ - /* replace153_0_0_1_1_0 -> 36 in the cache */ - /* replace153_0_0_1_1_1 -> 406 in the cache */ - /* replace153_0_0_1_1 -> 426 in the cache */ - /* replace153_0_0_1 -> 427 in the cache */ - /* replace153_0_0 -> 428 in the cache */ - /* replace153_0_1_0_0_0 -> 16 in the cache */ - /* replace153_0_1_0_0_1 -> 411 in the cache */ - /* replace153_0_1_0_0 -> 429 in the cache */ - /* replace153_0_1_0_1_0 -> 36 in the cache */ - /* replace153_0_1_0_1_1 -> 411 in the cache */ - /* replace153_0_1_0_1 -> 430 in the cache */ - /* replace153_0_1_0 -> 431 in the cache */ - /* replace153_0_1_1_0_0 -> 16 in the cache */ - /* replace153_0_1_1_0_1 -> 415 in the cache */ - /* replace153_0_1_1_0 -> 432 in the cache */ - /* replace153_0_1_1_1_0 -> 36 in the cache */ - /* replace153_0_1_1_1_1 -> 415 in the cache */ - /* replace153_0_1_1_1 -> 433 in the cache */ - /* replace153_0_1_1 -> 434 in the cache */ - /* replace153_0_1 -> 435 in the cache */ - /* replace153_0 -> 436 in the cache */ - /* replace153_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 8, - { 436, 141 }, - -1, - } }, - - /* ('sdot_4x8_iadd_sat', 'a', 'b', 'c') => ('iadd_sat', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_i8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_i8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_i8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_i8', 'b', 3)))), 'c') */ - /* search154_0 -> 16 in the cache */ - /* search154_1 -> 36 in the cache */ - /* search154_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_4x8_iadd_sat, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace154_0_0_0_0_0 -> 16 in the cache */ - /* replace154_0_0_0_0_1 -> 128 in the cache */ - /* replace154_0_0_0_0 -> 403 in the cache */ - /* replace154_0_0_0_1_0 -> 36 in the cache */ - /* replace154_0_0_0_1_1 -> 128 in the cache */ - /* replace154_0_0_0_1 -> 404 in the cache */ - /* replace154_0_0_0 -> 405 in the cache */ - /* replace154_0_0_1_0_0 -> 16 in the cache */ - /* replace154_0_0_1_0_1 -> 406 in the cache */ - /* replace154_0_0_1_0 -> 407 in the cache */ - /* replace154_0_0_1_1_0 -> 36 in the cache */ - /* replace154_0_0_1_1_1 -> 406 in the cache */ - /* replace154_0_0_1_1 -> 408 in the cache */ - /* replace154_0_0_1 -> 409 in the cache */ - /* replace154_0_0 -> 410 in the cache */ - /* replace154_0_1_0_0_0 -> 16 in the cache */ - /* replace154_0_1_0_0_1 -> 411 in the cache */ - /* replace154_0_1_0_0 -> 412 in the cache */ - /* replace154_0_1_0_1_0 -> 36 in the cache */ - /* replace154_0_1_0_1_1 -> 411 in the cache */ - /* replace154_0_1_0_1 -> 413 in the cache */ - /* replace154_0_1_0 -> 414 in the cache */ - /* replace154_0_1_1_0_0 -> 16 in the cache */ - /* replace154_0_1_1_0_1 -> 415 in the cache */ - /* replace154_0_1_1_0 -> 416 in the cache */ - /* replace154_0_1_1_1_0 -> 36 in the cache */ - /* replace154_0_1_1_1_1 -> 415 in the cache */ - /* replace154_0_1_1_1 -> 417 in the cache */ - /* replace154_0_1_1 -> 418 in the cache */ - /* replace154_0_1 -> 419 in the cache */ - /* replace154_0 -> 420 in the cache */ - /* replace154_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 8, - { 420, 141 }, - -1, - } }, - - /* ('sudot_4x8_iadd_sat', 'a', 'b', 'c') => ('iadd_sat', ('iadd', ('iadd', ('imul', ('extract_i8', 'a', 0), ('extract_u8', 'b', 0)), ('imul', ('extract_i8', 'a', 1), ('extract_u8', 'b', 1))), ('iadd', ('imul', ('extract_i8', 'a', 2), ('extract_u8', 'b', 2)), ('imul', ('extract_i8', 'a', 3), ('extract_u8', 'b', 3)))), 'c') */ - /* search155_0 -> 16 in the cache */ - /* search155_1 -> 36 in the cache */ - /* search155_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sudot_4x8_iadd_sat, - -1, 0, - { 16, 36, 141 }, - -1, - } }, - - /* replace155_0_0_0_0_0 -> 16 in the cache */ - /* replace155_0_0_0_0_1 -> 128 in the cache */ - /* replace155_0_0_0_0 -> 403 in the cache */ - /* replace155_0_0_0_1_0 -> 36 in the cache */ - /* replace155_0_0_0_1_1 -> 128 in the cache */ - /* replace155_0_0_0_1 -> 423 in the cache */ - /* replace155_0_0_0 -> 438 in the cache */ - /* replace155_0_0_1_0_0 -> 16 in the cache */ - /* replace155_0_0_1_0_1 -> 406 in the cache */ - /* replace155_0_0_1_0 -> 407 in the cache */ - /* replace155_0_0_1_1_0 -> 36 in the cache */ - /* replace155_0_0_1_1_1 -> 406 in the cache */ - /* replace155_0_0_1_1 -> 426 in the cache */ - /* replace155_0_0_1 -> 439 in the cache */ - /* replace155_0_0 -> 440 in the cache */ - /* replace155_0_1_0_0_0 -> 16 in the cache */ - /* replace155_0_1_0_0_1 -> 411 in the cache */ - /* replace155_0_1_0_0 -> 412 in the cache */ - /* replace155_0_1_0_1_0 -> 36 in the cache */ - /* replace155_0_1_0_1_1 -> 411 in the cache */ - /* replace155_0_1_0_1 -> 430 in the cache */ - /* replace155_0_1_0 -> 441 in the cache */ - /* replace155_0_1_1_0_0 -> 16 in the cache */ - /* replace155_0_1_1_0_1 -> 415 in the cache */ - /* replace155_0_1_1_0 -> 416 in the cache */ - /* replace155_0_1_1_1_0 -> 36 in the cache */ - /* replace155_0_1_1_1_1 -> 415 in the cache */ - /* replace155_0_1_1_1 -> 433 in the cache */ - /* replace155_0_1_1 -> 442 in the cache */ - /* replace155_0_1 -> 443 in the cache */ - /* replace155_0 -> 444 in the cache */ - /* replace155_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 8, - { 444, 141 }, - -1, - } }, - - /* ('udot_2x16_uadd_sat', 'a', 'b', 'c') => ('uadd_sat', ('iadd', ('imul', ('extract_u16', 'a', 0), ('extract_u16', 'b', 0)), ('imul', ('extract_u16', 'a', 1), ('extract_u16', 'b', 1))), 'c') */ - /* search156_0 -> 16 in the cache */ - /* search156_1 -> 36 in the cache */ - /* search156_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_udot_2x16_uadd_sat, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace156_0_0_0_0 -> 16 in the cache */ - /* replace156_0_0_0_1 -> 128 in the cache */ - /* replace156_0_0_0 -> 454 in the cache */ - /* replace156_0_0_1_0 -> 36 in the cache */ - /* replace156_0_0_1_1 -> 128 in the cache */ - /* replace156_0_0_1 -> 455 in the cache */ - /* replace156_0_0 -> 456 in the cache */ - /* replace156_0_1_0_0 -> 16 in the cache */ - /* replace156_0_1_0_1 -> 406 in the cache */ - /* replace156_0_1_0 -> 457 in the cache */ - /* replace156_0_1_1_0 -> 36 in the cache */ - /* replace156_0_1_1_1 -> 406 in the cache */ - /* replace156_0_1_1 -> 458 in the cache */ - /* replace156_0_1 -> 459 in the cache */ - /* replace156_0 -> 460 in the cache */ - /* replace156_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 4, - { 460, 141 }, - -1, - } }, - - /* ('sdot_2x16_iadd_sat', 'a', 'b', 'c') => ('iadd_sat', ('iadd', ('imul', ('extract_i16', 'a', 0), ('extract_i16', 'b', 0)), ('imul', ('extract_i16', 'a', 1), ('extract_i16', 'b', 1))), 'c') */ - /* search157_0 -> 16 in the cache */ - /* search157_1 -> 36 in the cache */ - /* search157_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sdot_2x16_iadd_sat, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace157_0_0_0_0 -> 16 in the cache */ - /* replace157_0_0_0_1 -> 128 in the cache */ - /* replace157_0_0_0 -> 446 in the cache */ - /* replace157_0_0_1_0 -> 36 in the cache */ - /* replace157_0_0_1_1 -> 128 in the cache */ - /* replace157_0_0_1 -> 447 in the cache */ - /* replace157_0_0 -> 448 in the cache */ - /* replace157_0_1_0_0 -> 16 in the cache */ - /* replace157_0_1_0_1 -> 406 in the cache */ - /* replace157_0_1_0 -> 449 in the cache */ - /* replace157_0_1_1_0 -> 36 in the cache */ - /* replace157_0_1_1_1 -> 406 in the cache */ - /* replace157_0_1_1 -> 450 in the cache */ - /* replace157_0_1 -> 451 in the cache */ - /* replace157_0 -> 452 in the cache */ - /* replace157_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 4, - { 452, 141 }, - -1, - } }, - - /* ('~flrp@16', 'a', 'b', ('b2f', 'c@1')) => ('bcsel', 'c', 'b', 'a') */ - /* search158_0 -> 11 in the cache */ - /* search158_1 -> 268 in the cache */ - { .variable = { - { nir_search_value_variable, 1 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 474 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 11, 268, 475 }, - -1, - } }, - - /* replace158_0 -> 474 in the cache */ - /* replace158_1 -> 268 in the cache */ - /* replace158_2 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 474, 268, 11 }, - -1, - } }, - - /* ('~flrp@16', 'a', ('fadd', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') */ - /* search159_0 -> 11 in the cache */ - /* search159_1_0 -> 11 in the cache */ - /* search159_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 11, 268 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 16 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_flrp, - -1, 1, - { 11, 478, 479 }, - -1, - } }, - - /* replace159_0_0 -> 268 in the cache */ - /* replace159_0_1 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 268, 479 }, - -1, - } }, - /* replace159_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 481, 11 }, - -1, - } }, - - /* ('~flrp@16', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') */ - /* search160_0_0 -> 11 in the cache */ - /* search160_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 11, 268 }, - 0, - } }, - /* search160_1_0 -> 11 in the cache */ - /* search160_1_1 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 11, 479 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, 16 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 483, 484, 485 }, - -1, - } }, - - /* replace160_0_0 -> 268 in the cache */ - /* replace160_0_1 -> 479 in the cache */ - /* replace160_0_2 -> 485 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 268, 479, 485 }, - -1, - } }, - /* replace160_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 487, 11 }, - -1, - } }, - - /* ('~flrp@16', 'a', ('fmul(is_used_once)', 'a', 'b'), 'c') => ('fmul', ('flrp', 1.0, 'b', 'c'), 'a') */ - /* search161_0 -> 11 in the cache */ - /* search161_1_0 -> 11 in the cache */ - /* search161_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 11, 268 }, - 0, - } }, - /* search161_2 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_flrp, - -1, 1, - { 11, 489, 479 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - /* replace161_0_1 -> 268 in the cache */ - /* replace161_0_2 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 491, 268, 479 }, - -1, - } }, - /* replace161_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 492, 11 }, - -1, - } }, - - /* ('~fadd@16', ('fmul', 'a', ('fadd', 1.0, ('fneg', 'c'))), ('fmul', 'b', 'c')) => ('flrp', 'a', 'b', 'c') */ - /* search162_0_0 -> 11 in the cache */ - /* search162_0_1_0 -> 491 in the cache */ - { .variable = { - { nir_search_value_variable, 16 }, - 1, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 494 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 491, 495 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 11, 496 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 16 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search162_1_1 -> 494 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 498, 494 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 497, 499 }, - -1, - } }, - - /* replace162_0 -> 11 in the cache */ - /* replace162_1 -> 498 in the cache */ - /* replace162_2 -> 494 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 11, 498, 494 }, - -1, - } }, - - /* ('~fadd@16', ('fmul', 'a', ('fsat', ('fadd', 1.0, ('fneg', 'c')))), ('fmul', 'b', ('fsat', 'c'))) => ('flrp', 'a', 'b', ('fsat', 'c')) */ - /* search163_0_0 -> 11 in the cache */ - /* search163_0_1_0_0 -> 491 in the cache */ - /* search163_0_1_0_1_0 -> 494 in the cache */ - /* search163_0_1_0_1 -> 495 in the cache */ - /* search163_0_1_0 -> 496 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 496 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 11, 502 }, - -1, - } }, - /* search163_1_0 -> 498 in the cache */ - /* search163_1_1_0 -> 494 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 494 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 498, 504 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 503, 505 }, - -1, - } }, - - /* replace163_0 -> 11 in the cache */ - /* replace163_1 -> 498 in the cache */ - /* replace163_2_0 -> 494 in the cache */ - /* replace163_2 -> 504 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 11, 498, 504 }, - -1, - } }, - - /* ('~fadd@16', 'a', ('fmul', 'c', ('fadd', 'b', ('fneg', 'a')))) => ('flrp', 'a', 'b', 'c') */ - /* search164_0 -> 11 in the cache */ - /* search164_1_0 -> 494 in the cache */ - /* search164_1_1_0 -> 498 in the cache */ - /* search164_1_1_1_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 498, 508 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 494, 509 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 11, 510 }, - -1, - } }, - - /* replace164_0 -> 11 in the cache */ - /* replace164_1 -> 498 in the cache */ - /* replace164_2 -> 494 in the cache */ - /* replace164 -> 501 in the cache */ - - /* ('~fadd@16', ('fmul', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1')))), ('fmul', 'b', ('b2f', 'c'))) => ('bcsel', 'c', 'b', 'a') */ - /* search165_0_0 -> 11 in the cache */ - /* search165_0_1_0 -> 491 in the cache */ - { .variable = { - { nir_search_value_variable, 1 }, - 1, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 512 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 513 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 491, 514 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 11, 515 }, - -1, - } }, - /* search165_1_0 -> 498 in the cache */ - /* search165_1_1_0 -> 512 in the cache */ - /* search165_1_1 -> 513 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 498, 513 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 516, 517 }, - -1, - } }, - - /* replace165_0 -> 512 in the cache */ - /* replace165_1 -> 498 in the cache */ - /* replace165_2 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 512, 498, 11 }, - -1, - } }, - - /* ('~fadd@16', 'a', ('fmul', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')))) => ('bcsel', 'c', 'b', 'a') */ - /* search166_0 -> 11 in the cache */ - /* search166_1_0_0 -> 512 in the cache */ - /* search166_1_0 -> 513 in the cache */ - /* search166_1_1_0 -> 498 in the cache */ - /* search166_1_1_1_0 -> 11 in the cache */ - /* search166_1_1_1 -> 508 in the cache */ - /* search166_1_1 -> 509 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 513, 509 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 11, 520 }, - -1, - } }, - - /* replace166_0 -> 512 in the cache */ - /* replace166_1 -> 498 in the cache */ - /* replace166_2 -> 11 in the cache */ - /* replace166 -> 519 in the cache */ - - /* ('~ffma@16', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1'))), ('fmul', 'b', ('b2f', 'c@1'))) => ('bcsel', 'c', 'b', 'a') */ - /* search167_0 -> 11 in the cache */ - /* search167_1_0 -> 491 in the cache */ - /* search167_1_1_0_0 -> 512 in the cache */ - /* search167_1_1_0 -> 513 in the cache */ - /* search167_1_1 -> 514 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 491, 514 }, - -1, - } }, - /* search167_2_0 -> 498 in the cache */ - /* search167_2_1_0 -> 512 in the cache */ - /* search167_2_1 -> 513 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 498, 513 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_ffma, - 0, 3, - { 11, 522, 523 }, - -1, - } }, - - /* replace167_0 -> 512 in the cache */ - /* replace167_1 -> 498 in the cache */ - /* replace167_2 -> 11 in the cache */ - /* replace167 -> 519 in the cache */ - - /* ('~ffma@16', 'b', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), ('b2f', 'c@1'), 'a')) => ('bcsel', 'c', 'b', 'a') */ - { .variable = { - { nir_search_value_variable, 16 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search168_1_0 -> 512 in the cache */ - /* search168_1 -> 513 in the cache */ - { .variable = { - { nir_search_value_variable, 16 }, - 2, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 526 }, - -1, - } }, - /* search168_2_1_0 -> 512 in the cache */ - /* search168_2_1 -> 513 in the cache */ - /* search168_2_2 -> 526 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 527, 513, 526 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 525, 513, 528 }, - -1, - } }, - - /* replace168_0 -> 512 in the cache */ - /* replace168_1 -> 525 in the cache */ - /* replace168_2 -> 526 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 512, 525, 526 }, - -1, - } }, - - /* ('~ffma@16', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')), 'a') => ('bcsel', 'c', 'b', 'a') */ - { .variable = { - { nir_search_value_variable, 1 }, - 0, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 531 }, - -1, - } }, - /* search169_1_0 -> 268 in the cache */ - /* search169_1_1_0 -> 526 in the cache */ - /* search169_1_1 -> 527 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 268, 527 }, - -1, - } }, - /* search169_2 -> 526 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 532, 533, 526 }, - -1, - } }, - - /* replace169_0 -> 531 in the cache */ - /* replace169_1 -> 268 in the cache */ - /* replace169_2 -> 526 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 268, 526 }, - -1, - } }, - - /* ('~ffma@16', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), 'b', 'd'), ('fmul', 'a', 'b')) => ('bcsel', 'c', 'd', ('fmul', 'a', 'b')) */ - /* search170_0_0 -> 531 in the cache */ - /* search170_0 -> 532 in the cache */ - { .variable = { - { nir_search_value_variable, 16 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 536 }, - -1, - } }, - /* search170_1_1 -> 498 in the cache */ - /* search170_1_2 -> 485 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 537, 498, 485 }, - -1, - } }, - /* search170_2_0 -> 536 in the cache */ - /* search170_2_1 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 536, 498 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_ffma, - 0, 3, - { 532, 538, 539 }, - -1, - } }, - - /* replace170_0 -> 531 in the cache */ - /* replace170_1 -> 485 in the cache */ - /* replace170_2_0 -> 536 in the cache */ - /* replace170_2_1 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 536, 498 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 531, 485, 541 }, - -1, - } }, - - /* ('~fadd@16', 1.0, ('fneg', ('fmul', ('fadd', 1.0, ('fneg', 'a')), ('fadd', 1.0, ('fneg', 'b'))))) => ('flrp', 'b', 1.0, 'a') */ - /* search171_0 -> 491 in the cache */ - /* search171_1_0_0_0 -> 491 in the cache */ - /* search171_1_0_0_1_0 -> 11 in the cache */ - /* search171_1_0_0_1 -> 508 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 491, 508 }, - -1, - } }, - /* search171_1_0_1_0 -> 491 in the cache */ - /* search171_1_0_1_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 3, 1, - { 491, 544 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 3, - { 543, 545 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 3, - { 546 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 491, 547 }, - -1, - } }, - - /* replace171_0 -> 268 in the cache */ - /* replace171_1 -> 491 in the cache */ - /* replace171_2 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 268, 491, 11 }, - -1, - } }, - - /* ('~flrp@32', 'a', 'b', ('b2f', 'c@1')) => ('bcsel', 'c', 'b', 'a') */ - /* search172_0 -> 16 in the cache */ - /* search172_1 -> 36 in the cache */ - /* search172_2_0 -> 474 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 474 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 16, 36, 550 }, - -1, - } }, - - /* replace172_0 -> 474 in the cache */ - /* replace172_1 -> 36 in the cache */ - /* replace172_2 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 474, 36, 16 }, - -1, - } }, - - /* ('~flrp@32', 'a', ('fadd', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') */ - /* search173_0 -> 16 in the cache */ - /* search173_1_0 -> 16 in the cache */ - /* search173_1_1 -> 36 in the cache */ - /* search173_1 -> 284 in the cache */ - /* search173_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_flrp, - -1, 1, - { 16, 284, 141 }, - -1, - } }, - - /* replace173_0_0 -> 36 in the cache */ - /* replace173_0_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 36, 141 }, - -1, - } }, - /* replace173_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 554, 16 }, - -1, - } }, - - /* ('~flrp@32', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') */ - /* search174_0_0 -> 16 in the cache */ - /* search174_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 16, 36 }, - 0, - } }, - /* search174_1_0 -> 16 in the cache */ - /* search174_1_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 16, 141 }, - 0, - } }, - /* search174_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 556, 557, 169 }, - -1, - } }, - - /* replace174_0_0 -> 36 in the cache */ - /* replace174_0_1 -> 141 in the cache */ - /* replace174_0_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 36, 141, 169 }, - -1, - } }, - /* replace174_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 559, 16 }, - -1, - } }, - - /* ('~flrp@32', 'a', ('fmul(is_used_once)', 'a', 'b'), 'c') => ('fmul', ('flrp', 1.0, 'b', 'c'), 'a') */ - /* search175_0 -> 16 in the cache */ - /* search175_1_0 -> 16 in the cache */ - /* search175_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 16, 36 }, - 0, - } }, - /* search175_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_flrp, - -1, 1, - { 16, 561, 141 }, - -1, - } }, - - /* replace175_0_0 -> 254 in the cache */ - /* replace175_0_1 -> 36 in the cache */ - /* replace175_0_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 254, 36, 141 }, - -1, - } }, - /* replace175_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 563, 16 }, - -1, - } }, - - /* ('~fadd@32', ('fmul', 'a', ('fadd', 1.0, ('fneg', 'c'))), ('fmul', 'b', 'c')) => ('flrp', 'a', 'b', 'c') */ - /* search176_0_0 -> 16 in the cache */ - /* search176_0_1_0 -> 254 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 565 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 254, 566 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 16, 567 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search176_1_1 -> 565 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 569, 565 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 568, 570 }, - -1, - } }, - - /* replace176_0 -> 16 in the cache */ - /* replace176_1 -> 569 in the cache */ - /* replace176_2 -> 565 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 16, 569, 565 }, - -1, - } }, - - /* ('~fadd@32', ('fmul', 'a', ('fsat', ('fadd', 1.0, ('fneg', 'c')))), ('fmul', 'b', ('fsat', 'c'))) => ('flrp', 'a', 'b', ('fsat', 'c')) */ - /* search177_0_0 -> 16 in the cache */ - /* search177_0_1_0_0 -> 254 in the cache */ - /* search177_0_1_0_1_0 -> 565 in the cache */ - /* search177_0_1_0_1 -> 566 in the cache */ - /* search177_0_1_0 -> 567 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 567 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 16, 573 }, - -1, - } }, - /* search177_1_0 -> 569 in the cache */ - /* search177_1_1_0 -> 565 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 565 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 569, 575 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 574, 576 }, - -1, - } }, - - /* replace177_0 -> 16 in the cache */ - /* replace177_1 -> 569 in the cache */ - /* replace177_2_0 -> 565 in the cache */ - /* replace177_2 -> 575 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 16, 569, 575 }, - -1, - } }, - - /* ('~fadd@32', 'a', ('fmul', 'c', ('fadd', 'b', ('fneg', 'a')))) => ('flrp', 'a', 'b', 'c') */ - /* search178_0 -> 16 in the cache */ - /* search178_1_0 -> 565 in the cache */ - /* search178_1_1_0 -> 569 in the cache */ - /* search178_1_1_1_0 -> 16 in the cache */ - /* search178_1_1_1 -> 290 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 569, 290 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 565, 579 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 16, 580 }, - -1, - } }, - - /* replace178_0 -> 16 in the cache */ - /* replace178_1 -> 569 in the cache */ - /* replace178_2 -> 565 in the cache */ - /* replace178 -> 572 in the cache */ - - /* ('~fadd@32', ('fmul', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1')))), ('fmul', 'b', ('b2f', 'c'))) => ('bcsel', 'c', 'b', 'a') */ - /* search179_0_0 -> 16 in the cache */ - /* search179_0_1_0 -> 254 in the cache */ - /* search179_0_1_1_0_0 -> 512 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 512 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 254, 583 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 16, 584 }, - -1, - } }, - /* search179_1_0 -> 569 in the cache */ - /* search179_1_1_0 -> 512 in the cache */ - /* search179_1_1 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 569, 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 585, 586 }, - -1, - } }, - - /* replace179_0 -> 512 in the cache */ - /* replace179_1 -> 569 in the cache */ - /* replace179_2 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 512, 569, 16 }, - -1, - } }, - - /* ('~fadd@32', 'a', ('fmul', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')))) => ('bcsel', 'c', 'b', 'a') */ - /* search180_0 -> 16 in the cache */ - /* search180_1_0_0 -> 512 in the cache */ - /* search180_1_0 -> 582 in the cache */ - /* search180_1_1_0 -> 569 in the cache */ - /* search180_1_1_1_0 -> 16 in the cache */ - /* search180_1_1_1 -> 290 in the cache */ - /* search180_1_1 -> 579 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 582, 579 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 16, 589 }, - -1, - } }, - - /* replace180_0 -> 512 in the cache */ - /* replace180_1 -> 569 in the cache */ - /* replace180_2 -> 16 in the cache */ - /* replace180 -> 588 in the cache */ - - /* ('~ffma@32', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1'))), ('fmul', 'b', ('b2f', 'c@1'))) => ('bcsel', 'c', 'b', 'a') */ - /* search181_0 -> 16 in the cache */ - /* search181_1_0 -> 254 in the cache */ - /* search181_1_1_0_0 -> 512 in the cache */ - /* search181_1_1_0 -> 582 in the cache */ - /* search181_1_1 -> 583 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 254, 583 }, - -1, - } }, - /* search181_2_0 -> 569 in the cache */ - /* search181_2_1_0 -> 512 in the cache */ - /* search181_2_1 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 569, 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 3, - { 16, 591, 592 }, - -1, - } }, - - /* replace181_0 -> 512 in the cache */ - /* replace181_1 -> 569 in the cache */ - /* replace181_2 -> 16 in the cache */ - /* replace181 -> 588 in the cache */ - - /* ('~ffma@32', 'b', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), ('b2f', 'c@1'), 'a')) => ('bcsel', 'c', 'b', 'a') */ - /* search182_0 -> 383 in the cache */ - /* search182_1_0 -> 512 in the cache */ - /* search182_1 -> 582 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 594 }, - -1, - } }, - /* search182_2_1_0 -> 512 in the cache */ - /* search182_2_1 -> 582 in the cache */ - /* search182_2_2 -> 594 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 595, 582, 594 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 383, 582, 596 }, - -1, - } }, - - /* replace182_0 -> 512 in the cache */ - /* replace182_1 -> 383 in the cache */ - /* replace182_2 -> 594 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 512, 383, 594 }, - -1, - } }, - - /* ('~ffma@32', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')), 'a') => ('bcsel', 'c', 'b', 'a') */ - /* search183_0_0 -> 531 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 531 }, - -1, - } }, - /* search183_1_0 -> 36 in the cache */ - /* search183_1_1_0 -> 594 in the cache */ - /* search183_1_1 -> 595 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 36, 595 }, - -1, - } }, - /* search183_2 -> 594 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 599, 600, 594 }, - -1, - } }, - - /* replace183_0 -> 531 in the cache */ - /* replace183_1 -> 36 in the cache */ - /* replace183_2 -> 594 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 36, 594 }, - -1, - } }, - - /* ('~ffma@32', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), 'b', 'd'), ('fmul', 'a', 'b')) => ('bcsel', 'c', 'd', ('fmul', 'a', 'b')) */ - /* search184_0_0 -> 531 in the cache */ - /* search184_0 -> 599 in the cache */ - /* search184_1_0_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 189 }, - -1, - } }, - /* search184_1_1 -> 569 in the cache */ - /* search184_1_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 603, 569, 169 }, - -1, - } }, - /* search184_2_0 -> 189 in the cache */ - /* search184_2_1 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 189, 569 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 3, - { 599, 604, 605 }, - -1, - } }, - - /* replace184_0 -> 531 in the cache */ - /* replace184_1 -> 169 in the cache */ - /* replace184_2_0 -> 189 in the cache */ - /* replace184_2_1 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 189, 569 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 531, 169, 607 }, - -1, - } }, - - /* ('~fadd@32', 1.0, ('fneg', ('fmul', ('fadd', 1.0, ('fneg', 'a')), ('fadd', 1.0, ('fneg', 'b'))))) => ('flrp', 'b', 1.0, 'a') */ - /* search185_0 -> 254 in the cache */ - /* search185_1_0_0_0 -> 254 in the cache */ - /* search185_1_0_0_1_0 -> 16 in the cache */ - /* search185_1_0_0_1 -> 290 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 254, 290 }, - -1, - } }, - /* search185_1_0_1_0 -> 254 in the cache */ - /* search185_1_0_1_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 3, 1, - { 254, 610 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 3, - { 609, 611 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 3, - { 612 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 254, 613 }, - -1, - } }, - - /* replace185_0 -> 36 in the cache */ - /* replace185_1 -> 254 in the cache */ - /* replace185_2 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 36, 254, 16 }, - -1, - } }, - - /* ('~flrp@64', 'a', 'b', ('b2f', 'c@1')) => ('bcsel', 'c', 'b', 'a') */ - /* search186_0 -> 21 in the cache */ - /* search186_1 -> 41 in the cache */ - /* search186_2_0 -> 474 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 474 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 21, 41, 616 }, - -1, - } }, - - /* replace186_0 -> 474 in the cache */ - /* replace186_1 -> 41 in the cache */ - /* replace186_2 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 474, 41, 21 }, - -1, - } }, - - /* ('~flrp@64', 'a', ('fadd', 'a', 'b'), 'c') => ('fadd', ('fmul', 'b', 'c'), 'a') */ - /* search187_0 -> 21 in the cache */ - /* search187_1_0 -> 21 in the cache */ - /* search187_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 21, 41 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 64 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_flrp, - -1, 1, - { 21, 619, 620 }, - -1, - } }, - - /* replace187_0_0 -> 41 in the cache */ - /* replace187_0_1 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 41, 620 }, - -1, - } }, - /* replace187_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 622, 21 }, - -1, - } }, - - /* ('~flrp@64', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') */ - /* search188_0_0 -> 21 in the cache */ - /* search188_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 21, 41 }, - 0, - } }, - /* search188_1_0 -> 21 in the cache */ - /* search188_1_1 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 21, 620 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, 64 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 624, 625, 626 }, - -1, - } }, - - /* replace188_0_0 -> 41 in the cache */ - /* replace188_0_1 -> 620 in the cache */ - /* replace188_0_2 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 41, 620, 626 }, - -1, - } }, - /* replace188_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 628, 21 }, - -1, - } }, - - /* ('~flrp@64', 'a', ('fmul(is_used_once)', 'a', 'b'), 'c') => ('fmul', ('flrp', 1.0, 'b', 'c'), 'a') */ - /* search189_0 -> 21 in the cache */ - /* search189_1_0 -> 21 in the cache */ - /* search189_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 21, 41 }, - 0, - } }, - /* search189_2 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_flrp, - -1, 1, - { 21, 630, 620 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - /* replace189_0_1 -> 41 in the cache */ - /* replace189_0_2 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 632, 41, 620 }, - -1, - } }, - /* replace189_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 633, 21 }, - -1, - } }, - - /* ('~fadd@64', ('fmul', 'a', ('fadd', 1.0, ('fneg', 'c'))), ('fmul', 'b', 'c')) => ('flrp', 'a', 'b', 'c') */ - /* search190_0_0 -> 21 in the cache */ - /* search190_0_1_0 -> 632 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 635 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 632, 636 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 21, 637 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 64 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search190_1_1 -> 635 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 639, 635 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 638, 640 }, - -1, - } }, - - /* replace190_0 -> 21 in the cache */ - /* replace190_1 -> 639 in the cache */ - /* replace190_2 -> 635 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 21, 639, 635 }, - -1, - } }, - - /* ('~fadd@64', ('fmul', 'a', ('fsat', ('fadd', 1.0, ('fneg', 'c')))), ('fmul', 'b', ('fsat', 'c'))) => ('flrp', 'a', 'b', ('fsat', 'c')) */ - /* search191_0_0 -> 21 in the cache */ - /* search191_0_1_0_0 -> 632 in the cache */ - /* search191_0_1_0_1_0 -> 635 in the cache */ - /* search191_0_1_0_1 -> 636 in the cache */ - /* search191_0_1_0 -> 637 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 637 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 21, 643 }, - -1, - } }, - /* search191_1_0 -> 639 in the cache */ - /* search191_1_1_0 -> 635 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 635 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 639, 645 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 644, 646 }, - -1, - } }, - - /* replace191_0 -> 21 in the cache */ - /* replace191_1 -> 639 in the cache */ - /* replace191_2_0 -> 635 in the cache */ - /* replace191_2 -> 645 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 21, 639, 645 }, - -1, - } }, - - /* ('~fadd@64', 'a', ('fmul', 'c', ('fadd', 'b', ('fneg', 'a')))) => ('flrp', 'a', 'b', 'c') */ - /* search192_0 -> 21 in the cache */ - /* search192_1_0 -> 635 in the cache */ - /* search192_1_1_0 -> 639 in the cache */ - /* search192_1_1_1_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 639, 649 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 635, 650 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 21, 651 }, - -1, - } }, - - /* replace192_0 -> 21 in the cache */ - /* replace192_1 -> 639 in the cache */ - /* replace192_2 -> 635 in the cache */ - /* replace192 -> 642 in the cache */ - - /* ('~fadd@64', ('fmul', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1')))), ('fmul', 'b', ('b2f', 'c'))) => ('bcsel', 'c', 'b', 'a') */ - /* search193_0_0 -> 21 in the cache */ - /* search193_0_1_0 -> 632 in the cache */ - /* search193_0_1_1_0_0 -> 512 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 512 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 653 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 632, 654 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 21, 655 }, - -1, - } }, - /* search193_1_0 -> 639 in the cache */ - /* search193_1_1_0 -> 512 in the cache */ - /* search193_1_1 -> 653 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 639, 653 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 656, 657 }, - -1, - } }, - - /* replace193_0 -> 512 in the cache */ - /* replace193_1 -> 639 in the cache */ - /* replace193_2 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 512, 639, 21 }, - -1, - } }, - - /* ('~fadd@64', 'a', ('fmul', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')))) => ('bcsel', 'c', 'b', 'a') */ - /* search194_0 -> 21 in the cache */ - /* search194_1_0_0 -> 512 in the cache */ - /* search194_1_0 -> 653 in the cache */ - /* search194_1_1_0 -> 639 in the cache */ - /* search194_1_1_1_0 -> 21 in the cache */ - /* search194_1_1_1 -> 649 in the cache */ - /* search194_1_1 -> 650 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 653, 650 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 21, 660 }, - -1, - } }, - - /* replace194_0 -> 512 in the cache */ - /* replace194_1 -> 639 in the cache */ - /* replace194_2 -> 21 in the cache */ - /* replace194 -> 659 in the cache */ - - /* ('~ffma@64', 'a', ('fadd', 1.0, ('fneg', ('b2f', 'c@1'))), ('fmul', 'b', ('b2f', 'c@1'))) => ('bcsel', 'c', 'b', 'a') */ - /* search195_0 -> 21 in the cache */ - /* search195_1_0 -> 632 in the cache */ - /* search195_1_1_0_0 -> 512 in the cache */ - /* search195_1_1_0 -> 653 in the cache */ - /* search195_1_1 -> 654 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 632, 654 }, - -1, - } }, - /* search195_2_0 -> 639 in the cache */ - /* search195_2_1_0 -> 512 in the cache */ - /* search195_2_1 -> 653 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 639, 653 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_ffma, - 0, 3, - { 21, 662, 663 }, - -1, - } }, - - /* replace195_0 -> 512 in the cache */ - /* replace195_1 -> 639 in the cache */ - /* replace195_2 -> 21 in the cache */ - /* replace195 -> 659 in the cache */ - - /* ('~ffma@64', 'b', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), ('b2f', 'c@1'), 'a')) => ('bcsel', 'c', 'b', 'a') */ - { .variable = { - { nir_search_value_variable, 64 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search196_1_0 -> 512 in the cache */ - /* search196_1 -> 653 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 2, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 666 }, - -1, - } }, - /* search196_2_1_0 -> 512 in the cache */ - /* search196_2_1 -> 653 in the cache */ - /* search196_2_2 -> 666 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 667, 653, 666 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 665, 653, 668 }, - -1, - } }, - - /* replace196_0 -> 512 in the cache */ - /* replace196_1 -> 665 in the cache */ - /* replace196_2 -> 666 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 512, 665, 666 }, - -1, - } }, - - /* ('~ffma@64', ('b2f', 'c@1'), ('fadd', 'b', ('fneg', 'a')), 'a') => ('bcsel', 'c', 'b', 'a') */ - /* search197_0_0 -> 531 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 531 }, - -1, - } }, - /* search197_1_0 -> 41 in the cache */ - /* search197_1_1_0 -> 666 in the cache */ - /* search197_1_1 -> 667 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 41, 667 }, - -1, - } }, - /* search197_2 -> 666 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 671, 672, 666 }, - -1, - } }, - - /* replace197_0 -> 531 in the cache */ - /* replace197_1 -> 41 in the cache */ - /* replace197_2 -> 666 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 41, 666 }, - -1, - } }, - - /* ('~ffma@64', ('b2f', 'c@1'), ('ffma', ('fneg', 'a'), 'b', 'd'), ('fmul', 'a', 'b')) => ('bcsel', 'c', 'd', ('fmul', 'a', 'b')) */ - /* search198_0_0 -> 531 in the cache */ - /* search198_0 -> 671 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 675 }, - -1, - } }, - /* search198_1_1 -> 639 in the cache */ - /* search198_1_2 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 676, 639, 626 }, - -1, - } }, - /* search198_2_0 -> 675 in the cache */ - /* search198_2_1 -> 639 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 675, 639 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_ffma, - 0, 3, - { 671, 677, 678 }, - -1, - } }, - - /* replace198_0 -> 531 in the cache */ - /* replace198_1 -> 626 in the cache */ - /* replace198_2_0 -> 675 in the cache */ - /* replace198_2_1 -> 639 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 675, 639 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 531, 626, 680 }, - -1, - } }, - - /* ('~fadd@64', 1.0, ('fneg', ('fmul', ('fadd', 1.0, ('fneg', 'a')), ('fadd', 1.0, ('fneg', 'b'))))) => ('flrp', 'b', 1.0, 'a') */ - /* search199_0 -> 632 in the cache */ - /* search199_1_0_0_0 -> 632 in the cache */ - /* search199_1_0_0_1_0 -> 21 in the cache */ - /* search199_1_0_0_1 -> 649 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 632, 649 }, - -1, - } }, - /* search199_1_0_1_0 -> 632 in the cache */ - /* search199_1_0_1_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 3, 1, - { 632, 683 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 3, - { 682, 684 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 3, - { 685 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 632, 686 }, - -1, - } }, - - /* replace199_0 -> 41 in the cache */ - /* replace199_1 -> 632 in the cache */ - /* replace199_2 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 41, 632, 21 }, - -1, - } }, - - /* ('~flrp', ('fmul(is_used_once)', 'a', 'b'), ('fmul(is_used_once)', 'a', 'c'), 'd') => ('fmul', ('flrp', 'b', 'c', 'd'), 'a') */ - /* search200_0_0 -> 155 in the cache */ - /* search200_0_1 -> 156 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 155, 156 }, - 0, - } }, - /* search200_1_0 -> 155 in the cache */ - /* search200_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 155, 158 }, - 0, - } }, - /* search200_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 689, 690, 159 }, - -1, - } }, - - /* replace200_0_0 -> 156 in the cache */ - /* replace200_0_1 -> 158 in the cache */ - /* replace200_0_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 156, 158, 159 }, - -1, - } }, - /* replace200_1 -> 155 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 692, 155 }, - -1, - } }, - - /* ('~flrp', 'a', 0.0, 'c') => ('fadd', ('fmul', ('fneg', 'a'), 'c'), 'a') */ - /* search201_0 -> 0 in the cache */ - /* search201_1 -> 266 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flrp, - -1, 0, - { 0, 266, 694 }, - -1, - } }, - - /* replace201_0_0_0 -> 0 in the cache */ - /* replace201_0_0 -> 223 in the cache */ - /* replace201_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 223, 694 }, - -1, - } }, - /* replace201_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 696, 0 }, - -1, - } }, - - /* ('ftrunc@16', 'a') => ('bcsel', ('flt', 'a', 0.0), ('fneg', ('ffloor', ('fabs', 'a'))), ('ffloor', ('fabs', 'a'))) */ - /* search202_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ftrunc, - -1, 0, - { 11 }, - -1, - } }, - - /* replace202_0_0 -> 11 in the cache */ - /* replace202_0_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 11, 119 }, - -1, - } }, - /* replace202_1_0_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 700 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 701 }, - -1, - } }, - /* replace202_2_0_0 -> 11 in the cache */ - /* replace202_2_0 -> 700 in the cache */ - /* replace202_2 -> 701 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 699, 702, 701 }, - -1, - } }, - - /* ('ftrunc@32', 'a') => ('bcsel', ('flt', 'a', 0.0), ('fneg', ('ffloor', ('fabs', 'a'))), ('ffloor', ('fabs', 'a'))) */ - /* search203_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ftrunc, - -1, 0, - { 16 }, - -1, - } }, - - /* replace203_0_0 -> 16 in the cache */ - /* replace203_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 16, 121 }, - -1, - } }, - /* replace203_1_0_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 706 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 707 }, - -1, - } }, - /* replace203_2_0_0 -> 16 in the cache */ - /* replace203_2_0 -> 706 in the cache */ - /* replace203_2 -> 707 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 705, 708, 707 }, - -1, - } }, - - /* ('ftrunc@64', 'a') => ('bcsel', ('flt', 'a', 0.0), ('fneg', ('ffloor', ('fabs', 'a'))), ('ffloor', ('fabs', 'a'))) */ - /* search204_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ftrunc, - -1, 0, - { 21 }, - -1, - } }, - - /* replace204_0_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 21, 711 }, - -1, - } }, - /* replace204_1_0_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 713 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 714 }, - -1, - } }, - /* replace204_2_0_0 -> 21 in the cache */ - /* replace204_2_0 -> 713 in the cache */ - /* replace204_2 -> 714 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 712, 715, 714 }, - -1, - } }, - - /* ('ffloor@16', 'a') => ('fsub', 'a', ('ffract', 'a')) */ - /* search205_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 11 }, - -1, - } }, - - /* replace205_0 -> 11 in the cache */ - /* replace205_1_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffract, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 11, 718 }, - -1, - } }, - - /* ('ffloor@32', 'a') => ('fsub', 'a', ('ffract', 'a')) */ - /* search206_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 16 }, - -1, - } }, - - /* replace206_0 -> 16 in the cache */ - /* replace206_1_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffract, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 16, 721 }, - -1, - } }, - - /* ('ffloor@64', 'a') => ('fsub', 'a', ('ffract', 'a')) */ - /* search207_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 21 }, - -1, - } }, - - /* replace207_0 -> 21 in the cache */ - /* replace207_1_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffract, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 21, 724 }, - -1, - } }, - - /* ('fadd@16', 'a', ('fadd@16', 'b', ('fneg', ('ffract', 'a')))) => ('fadd@16', 'b', ('ffloor', 'a')) */ - /* search208_0 -> 11 in the cache */ - /* search208_1_0 -> 268 in the cache */ - /* search208_1_1_0_0 -> 11 in the cache */ - /* search208_1_1_0 -> 718 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 718 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 268, 726 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 11, 727 }, - -1, - } }, - - /* replace208_0 -> 268 in the cache */ - /* replace208_1_0 -> 11 in the cache */ - /* replace208_1 -> 717 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 268, 717 }, - -1, - } }, - - /* ('fadd@32', 'a', ('fadd@32', 'b', ('fneg', ('ffract', 'a')))) => ('fadd@32', 'b', ('ffloor', 'a')) */ - /* search209_0 -> 16 in the cache */ - /* search209_1_0 -> 36 in the cache */ - /* search209_1_1_0_0 -> 16 in the cache */ - /* search209_1_1_0 -> 721 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 721 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 36, 730 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 16, 731 }, - -1, - } }, - - /* replace209_0 -> 36 in the cache */ - /* replace209_1_0 -> 16 in the cache */ - /* replace209_1 -> 720 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 36, 720 }, - -1, - } }, - - /* ('fadd@64', 'a', ('fadd@64', 'b', ('fneg', ('ffract', 'a')))) => ('fadd@64', 'b', ('ffloor', 'a')) */ - /* search210_0 -> 21 in the cache */ - /* search210_1_0 -> 41 in the cache */ - /* search210_1_1_0_0 -> 21 in the cache */ - /* search210_1_1_0 -> 724 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 724 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 41, 734 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 21, 735 }, - -1, - } }, - - /* replace210_0 -> 41 in the cache */ - /* replace210_1_0 -> 21 in the cache */ - /* replace210_1 -> 723 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 41, 723 }, - -1, - } }, - - /* ('fadd@16', 'a', ('fneg', ('ffract', 'a'))) => ('ffloor', 'a') */ - /* search211_0 -> 11 in the cache */ - /* search211_1_0_0 -> 11 in the cache */ - /* search211_1_0 -> 718 in the cache */ - /* search211_1 -> 726 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 11, 726 }, - -1, - } }, - - /* replace211_0 -> 11 in the cache */ - /* replace211 -> 717 in the cache */ - - /* ('fadd@32', 'a', ('fneg', ('ffract', 'a'))) => ('ffloor', 'a') */ - /* search212_0 -> 16 in the cache */ - /* search212_1_0_0 -> 16 in the cache */ - /* search212_1_0 -> 721 in the cache */ - /* search212_1 -> 730 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 16, 730 }, - -1, - } }, - - /* replace212_0 -> 16 in the cache */ - /* replace212 -> 720 in the cache */ - - /* ('fadd@64', 'a', ('fneg', ('ffract', 'a'))) => ('ffloor', 'a') */ - /* search213_0 -> 21 in the cache */ - /* search213_1_0_0 -> 21 in the cache */ - /* search213_1_0 -> 724 in the cache */ - /* search213_1 -> 734 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 21, 734 }, - -1, - } }, - - /* replace213_0 -> 21 in the cache */ - /* replace213 -> 723 in the cache */ - - /* ('ffract@16', 'a') => ('fsub', 'a', ('ffloor', 'a')) */ - /* search214_0 -> 11 in the cache */ - /* search214 -> 718 in the cache */ - - /* replace214_0 -> 11 in the cache */ - /* replace214_1_0 -> 11 in the cache */ - /* replace214_1 -> 717 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 11, 717 }, - -1, - } }, - - /* ('ffract@32', 'a') => ('fsub', 'a', ('ffloor', 'a')) */ - /* search215_0 -> 16 in the cache */ - /* search215 -> 721 in the cache */ - - /* replace215_0 -> 16 in the cache */ - /* replace215_1_0 -> 16 in the cache */ - /* replace215_1 -> 720 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 16, 720 }, - -1, - } }, - - /* ('ffract@64', 'a') => ('fsub', 'a', ('ffloor', 'a')) */ - /* search216_0 -> 21 in the cache */ - /* search216 -> 724 in the cache */ - - /* replace216_0 -> 21 in the cache */ - /* replace216_1_0 -> 21 in the cache */ - /* replace216_1 -> 723 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 21, 723 }, - -1, - } }, - - /* ('fceil', 'a') => ('fneg', ('ffloor', ('fneg', 'a'))) */ - /* search217_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fceil, - -1, 0, - { 32 }, - -1, - } }, - - /* replace217_0_0_0 -> 32 in the cache */ - /* replace217_0_0 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 107 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 745 }, - -1, - } }, - - /* ('ffma@16', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') */ - /* search218_0 -> 11 in the cache */ - /* search218_1 -> 268 in the cache */ - /* search218_2 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 11, 268, 479 }, - -1, - } }, - - /* replace218_0_0 -> 11 in the cache */ - /* replace218_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 11, 268 }, - -1, - } }, - /* replace218_1 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 748, 479 }, - -1, - } }, - - /* ('ffma@32', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') */ - /* search219_0 -> 16 in the cache */ - /* search219_1 -> 36 in the cache */ - /* search219_2 -> 141 in the cache */ - /* search219 -> 245 in the cache */ - - /* replace219_0_0 -> 16 in the cache */ - /* replace219_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace219_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 750, 141 }, - -1, - } }, - - /* ('ffma@64', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') */ - /* search220_0 -> 21 in the cache */ - /* search220_1 -> 41 in the cache */ - /* search220_2 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 21, 41, 620 }, - -1, - } }, - - /* replace220_0_0 -> 21 in the cache */ - /* replace220_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 21, 41 }, - -1, - } }, - /* replace220_1 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 753, 620 }, - -1, - } }, - - /* ('ffmaz', 'a', 'b', 'c') => ('fadd', ('fmulz', 'a', 'b'), 'c') */ - /* search221_0 -> 16 in the cache */ - /* search221_1 -> 36 in the cache */ - /* search221_2 -> 141 in the cache */ - /* search221 -> 397 in the cache */ - - /* replace221_0_0 -> 16 in the cache */ - /* replace221_0_1 -> 36 in the cache */ - /* replace221_0 -> 140 in the cache */ - /* replace221_1 -> 141 in the cache */ - /* replace221 -> 298 in the cache */ - - /* ('~ffma@16', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') */ - /* search222_0 -> 11 in the cache */ - /* search222_1 -> 268 in the cache */ - /* search222_2 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 11, 268, 479 }, - -1, - } }, - - /* replace222_0_0 -> 11 in the cache */ - /* replace222_0_1 -> 268 in the cache */ - /* replace222_0 -> 748 in the cache */ - /* replace222_1 -> 479 in the cache */ - /* replace222 -> 749 in the cache */ - - /* ('~ffma@32', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') */ - /* search223_0 -> 16 in the cache */ - /* search223_1 -> 36 in the cache */ - /* search223_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace223_0_0 -> 16 in the cache */ - /* replace223_0_1 -> 36 in the cache */ - /* replace223_0 -> 750 in the cache */ - /* replace223_1 -> 141 in the cache */ - /* replace223 -> 751 in the cache */ - - /* ('~ffma@64', 'a', 'b', 'c') => ('fadd', ('fmul', 'a', 'b'), 'c') */ - /* search224_0 -> 21 in the cache */ - /* search224_1 -> 41 in the cache */ - /* search224_2 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 21, 41, 620 }, - -1, - } }, - - /* replace224_0_0 -> 21 in the cache */ - /* replace224_0_1 -> 41 in the cache */ - /* replace224_0 -> 753 in the cache */ - /* replace224_1 -> 620 in the cache */ - /* replace224 -> 754 in the cache */ - - /* ('~ffmaz', 'a', 'b', 'c') => ('fadd', ('fmulz', 'a', 'b'), 'c') */ - /* search225_0 -> 16 in the cache */ - /* search225_1 -> 36 in the cache */ - /* search225_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace225_0_0 -> 16 in the cache */ - /* replace225_0_1 -> 36 in the cache */ - /* replace225_0 -> 140 in the cache */ - /* replace225_1 -> 141 in the cache */ - /* replace225 -> 298 in the cache */ - - /* ('~fmul', ('fadd', ('iand', ('ineg', ('b2i', 'a@bool')), ('fmul', 'b', 'c')), '#d'), '#e') => ('bcsel', 'a', ('fmul', ('fadd', ('fmul', 'b', 'c'), 'd'), 'e'), ('fmul', 'd', 'e')) */ - { .variable = { - { nir_search_value_variable, 1 }, - 0, /* a */ - false, - nir_type_bool, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 759 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 760 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 762, 763 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_iand, - 2, 2, - { 761, 764 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 3, /* d */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_fadd, - 1, 3, - { 765, 766 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 4, /* e */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - true, - false, - false, - nir_op_fmul, - 0, 4, - { 767, 768 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, 1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* replace226_1_0_0_0 -> 762 in the cache */ - /* replace226_1_0_0_1 -> 763 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 762, 763 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_fadd, - 1, 2, - { 771, 772 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 4, /* e */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_fmul, - 0, 3, - { 773, 774 }, - -1, - } }, - /* replace226_2_0 -> 772 in the cache */ - /* replace226_2_1 -> 774 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 772, 774 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 770, 775, 776 }, - -1, - } }, - - /* ('fdph', 'a', 'b') => ('fdot4', ('vec4', 'a.x', 'a.y', 'a.z', 1.0), 'b') */ - /* search227_0 -> 0 in the cache */ - /* search227_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdph, - -1, 0, - { 0, 3 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {1}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {2}, - } }, - /* replace227_0_3 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 779, 780, 781, 280 }, - -1, - } }, - /* replace227_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 782, 3 }, - -1, - } }, - - /* ('fdot4', 'a', 0.0) => 0.0 */ - /* search228_0 -> 32 in the cache */ - /* search228_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 32, 117 }, - -1, - } }, - - /* replace228 -> 117 in the cache */ - - /* ('fdot3', 'a', 0.0) => 0.0 */ - /* search229_0 -> 32 in the cache */ - /* search229_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fdot3, - 0, 1, - { 32, 117 }, - -1, - } }, - - /* replace229 -> 117 in the cache */ - - /* ('fdot2', 'a', 0.0) => 0.0 */ - /* search230_0 -> 32 in the cache */ - /* search230_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fdot2, - 0, 1, - { 32, 117 }, - -1, - } }, - - /* replace230 -> 117 in the cache */ - - /* ('fdot4', ('vec4', 'a', 'b', 'c', 1.0), 'd') => ('fdph', ('vec3', 'a', 'b', 'c'), 'd') */ - /* search231_0_0 -> 155 in the cache */ - /* search231_0_1 -> 156 in the cache */ - /* search231_0_2 -> 158 in the cache */ - { .constant = { - { nir_search_value_constant, -4 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 155, 156, 158, 787 }, - -1, - } }, - /* search231_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 788, 159 }, - -1, - } }, - - /* replace231_0_0 -> 155 in the cache */ - /* replace231_0_1 -> 156 in the cache */ - /* replace231_0_2 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 155, 156, 158 }, - -1, - } }, - /* replace231_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fdph, - -1, 0, - { 790, 159 }, - -1, - } }, - - /* ('fdot4', ('vec4', 'a', 0.0, 0.0, 0.0), 'b') => ('fmul', 'a', 'b') */ - /* search232_0_0 -> 0 in the cache */ - /* search232_0_1 -> 266 in the cache */ - /* search232_0_2 -> 266 in the cache */ - /* search232_0_3 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 0, 266, 266, 266 }, - -1, - } }, - /* search232_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 792, 3 }, - -1, - } }, - - /* replace232_0 -> 0 in the cache */ - /* replace232_1 -> 3 in the cache */ - /* replace232 -> 274 in the cache */ - - /* ('fdot4', ('vec4', 'a', 'b', 0.0, 0.0), 'c') => ('fdot2', ('vec2', 'a', 'b'), 'c') */ - /* search233_0_0 -> 132 in the cache */ - /* search233_0_1 -> 133 in the cache */ - { .constant = { - { nir_search_value_constant, -3 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - /* search233_0_3 -> 794 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 132, 133, 794, 794 }, - -1, - } }, - /* search233_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 795, 135 }, - -1, - } }, - - /* replace233_0_0 -> 132 in the cache */ - /* replace233_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 132, 133 }, - -1, - } }, - /* replace233_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fdot2, - 0, 1, - { 797, 135 }, - -1, - } }, - - /* ('fdot4', ('vec4', 'a', 'b', 'c', 0.0), 'd') => ('fdot3', ('vec3', 'a', 'b', 'c'), 'd') */ - /* search234_0_0 -> 155 in the cache */ - /* search234_0_1 -> 156 in the cache */ - /* search234_0_2 -> 158 in the cache */ - { .constant = { - { nir_search_value_constant, -4 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 155, 156, 158, 799 }, - -1, - } }, - /* search234_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 800, 159 }, - -1, - } }, - - /* replace234_0_0 -> 155 in the cache */ - /* replace234_0_1 -> 156 in the cache */ - /* replace234_0_2 -> 158 in the cache */ - /* replace234_0 -> 790 in the cache */ - /* replace234_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fdot3, - 0, 1, - { 790, 159 }, - -1, - } }, - - /* ('fdot3', ('vec3', 'a', 0.0, 0.0), 'b') => ('fmul', 'a', 'b') */ - /* search235_0_0 -> 0 in the cache */ - /* search235_0_1 -> 266 in the cache */ - /* search235_0_2 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 0, 266, 266 }, - -1, - } }, - /* search235_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3, - 0, 1, - { 803, 3 }, - -1, - } }, - - /* replace235_0 -> 0 in the cache */ - /* replace235_1 -> 3 in the cache */ - /* replace235 -> 274 in the cache */ - - /* ('fdot3', ('vec3', 'a', 'b', 0.0), 'c') => ('fdot2', ('vec2', 'a', 'b'), 'c') */ - /* search236_0_0 -> 132 in the cache */ - /* search236_0_1 -> 133 in the cache */ - /* search236_0_2 -> 794 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 132, 133, 794 }, - -1, - } }, - /* search236_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fdot3, - 0, 1, - { 805, 135 }, - -1, - } }, - - /* replace236_0_0 -> 132 in the cache */ - /* replace236_0_1 -> 133 in the cache */ - /* replace236_0 -> 797 in the cache */ - /* replace236_1 -> 135 in the cache */ - /* replace236 -> 798 in the cache */ - - /* ('fdot2', ('vec2', 'a', 0.0), 'b') => ('fmul', 'a', 'b') */ - /* search237_0_0 -> 0 in the cache */ - /* search237_0_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 0, 266 }, - -1, - } }, - /* search237_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2, - 0, 1, - { 807, 3 }, - -1, - } }, - - /* replace237_0 -> 0 in the cache */ - /* replace237_1 -> 3 in the cache */ - /* replace237 -> 274 in the cache */ - - /* ('fdot2', 'a', 1.0) => ('fadd', 'a.x', 'a.y') */ - /* search238_0 -> 32 in the cache */ - /* search238_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fdot2, - 0, 1, - { 32, 252 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0}, - } }, - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {1}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - -1, 0, - { 810, 811 }, - -1, - } }, - - /* ('fdot2', 'a', 'b') => ('fsum2', ('fmul', 'a', 'b')) */ - /* search239_0 -> 0 in the cache */ - /* search239_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace239_0_0 -> 0 in the cache */ - /* replace239_0_1 -> 3 in the cache */ - /* replace239_0 -> 274 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsum2, - -1, 1, - { 274 }, - -1, - } }, - - /* ('fdot3', 'a', 'b') => ('fsum3', ('fmul', 'a', 'b')) */ - /* search240_0 -> 0 in the cache */ - /* search240_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace240_0_0 -> 0 in the cache */ - /* replace240_0_1 -> 3 in the cache */ - /* replace240_0 -> 274 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsum3, - -1, 1, - { 274 }, - -1, - } }, - - /* ('fdot4', 'a', 'b') => ('fsum4', ('fmul', 'a', 'b')) */ - /* search241_0 -> 0 in the cache */ - /* search241_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace241_0_0 -> 0 in the cache */ - /* replace241_0_1 -> 3 in the cache */ - /* replace241_0 -> 274 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsum4, - -1, 1, - { 274 }, - -1, - } }, - - /* ('fsum2', 'a') => ('fadd', 'a.x', 'a.y') */ - /* search242_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsum2, - -1, 0, - { 32 }, - -1, - } }, - - /* replace242_0 -> 810 in the cache */ - /* replace242_1 -> 811 in the cache */ - /* replace242 -> 812 in the cache */ - - /* ('~fadd', ('fneg(is_used_once)', ('fsat(is_used_once)', 'a(is_not_fmul)')), 1.0) => ('fsat', ('fadd', 1.0, ('fneg', 'a'))) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 8, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 820 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 821 }, - 0, - } }, - /* search243_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fadd, - 0, 1, - { 822, 252 }, - -1, - } }, - - /* replace243_0_0 -> 252 in the cache */ - /* replace243_0_1_0 -> 32 in the cache */ - /* replace243_0_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 252, 107 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 824 }, - -1, - } }, - - /* ('ishl', ('iadd', ('imul', 'a', '#b'), '#c'), '#d') => ('iadd', ('imul', 'a', ('ishl', 'b', 'd')), ('ishl', 'c', 'd')) */ - /* search244_0_0_0 -> 132 in the cache */ - /* search244_0_0_1 -> 293 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 132, 293 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 826, 827 }, - -1, - } }, - /* search244_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 828, 321 }, - -1, - } }, - - /* replace244_0_0 -> 132 in the cache */ - /* replace244_0_1_0 -> 133 in the cache */ - /* replace244_0_1_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 133, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 132, 830 }, - -1, - } }, - /* replace244_1_0 -> 135 in the cache */ - /* replace244_1_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 135, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 831, 832 }, - -1, - } }, - - /* ('ishl', ('imul', 'a', '#b'), '#c') => ('imul', 'a', ('ishl', 'b', 'c')) */ - /* search245_0_0 -> 0 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 0, 834 }, - -1, - } }, - /* search245_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 835, 319 }, - -1, - } }, - - /* replace245_0 -> 0 in the cache */ - /* replace245_1_0 -> 3 in the cache */ - /* replace245_1_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3, 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 0, 837 }, - -1, - } }, - - /* ('ishl@8', ('ishl@8', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 7), ('iand', 'c', 7)), 8), ('ishl@8', 'a', ('iadd', 'b', 'c')), 0) */ - /* search246_0_0 -> 6 in the cache */ - /* search246_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 6, 33 }, - -1, - } }, - /* search246_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 839, 319 }, - -1, - } }, - - /* replace246_0_0_0_0 -> 36 in the cache */ - /* replace246_0_0_0_1 -> 9 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 36, 9 }, - -1, - } }, - /* replace246_0_0_1_0 -> 141 in the cache */ - /* replace246_0_0_1_1 -> 9 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 141, 9 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 841, 842 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x8 /* 8 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 3, - { 843, 844 }, - -1, - } }, - /* replace246_1_0 -> 6 in the cache */ - /* replace246_1_1_0 -> 36 in the cache */ - /* replace246_1_1_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 3, 1, - { 36, 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 6, 846 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 8 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 845, 847, 848 }, - -1, - } }, - - /* ('ushr@8', ('ushr@8', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 7), ('iand', 'c', 7)), 8), ('ushr@8', 'a', ('iadd', 'b', 'c')), 0) */ - /* search247_0_0 -> 6 in the cache */ - /* search247_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 6, 33 }, - -1, - } }, - /* search247_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 850, 319 }, - -1, - } }, - - /* replace247_0_0_0_0 -> 36 in the cache */ - /* replace247_0_0_0_1 -> 9 in the cache */ - /* replace247_0_0_0 -> 841 in the cache */ - /* replace247_0_0_1_0 -> 141 in the cache */ - /* replace247_0_0_1_1 -> 9 in the cache */ - /* replace247_0_0_1 -> 842 in the cache */ - /* replace247_0_0 -> 843 in the cache */ - /* replace247_0_1 -> 844 in the cache */ - /* replace247_0 -> 845 in the cache */ - /* replace247_1_0 -> 6 in the cache */ - /* replace247_1_1_0 -> 36 in the cache */ - /* replace247_1_1_1 -> 141 in the cache */ - /* replace247_1_1 -> 846 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 6, 846 }, - -1, - } }, - /* replace247_2 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 845, 852, 848 }, - -1, - } }, - - /* ('ishr@8', ('ishr@8', 'a', '#b'), '#c') => ('ishr@8', 'a', ('imin', ('iadd', ('iand', 'b', 7), ('iand', 'c', 7)), 7)) */ - /* search248_0_0 -> 6 in the cache */ - /* search248_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 6, 33 }, - -1, - } }, - /* search248_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 854, 319 }, - -1, - } }, - - /* replace248_0 -> 6 in the cache */ - /* replace248_1_0_0_0 -> 36 in the cache */ - /* replace248_1_0_0_1 -> 9 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 36, 9 }, - -1, - } }, - /* replace248_1_0_1_0 -> 141 in the cache */ - /* replace248_1_0_1_1 -> 9 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 141, 9 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 3, - { 856, 857 }, - -1, - } }, - /* replace248_1_1 -> 9 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 0, 4, - { 858, 9 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishr, - -1, 4, - { 6, 859 }, - -1, - } }, - - /* ('ishl@16', ('ishl@16', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 15), ('iand', 'c', 15)), 16), ('ishl@16', 'a', ('iadd', 'b', 'c')), 0) */ - /* search249_0_0 -> 11 in the cache */ - /* search249_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 11, 33 }, - -1, - } }, - /* search249_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 861, 319 }, - -1, - } }, - - /* replace249_0_0_0_0 -> 36 in the cache */ - /* replace249_0_0_0_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 36, 14 }, - -1, - } }, - /* replace249_0_0_1_0 -> 141 in the cache */ - /* replace249_0_0_1_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 141, 14 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 863, 864 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x10 /* 16 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 3, - { 865, 866 }, - -1, - } }, - /* replace249_1_0 -> 11 in the cache */ - /* replace249_1_1_0 -> 36 in the cache */ - /* replace249_1_1_1 -> 141 in the cache */ - /* replace249_1_1 -> 846 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 11, 846 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 867, 868, 869 }, - -1, - } }, - - /* ('ushr@16', ('ushr@16', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 15), ('iand', 'c', 15)), 16), ('ushr@16', 'a', ('iadd', 'b', 'c')), 0) */ - /* search250_0_0 -> 11 in the cache */ - /* search250_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 11, 33 }, - -1, - } }, - /* search250_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 871, 319 }, - -1, - } }, - - /* replace250_0_0_0_0 -> 36 in the cache */ - /* replace250_0_0_0_1 -> 14 in the cache */ - /* replace250_0_0_0 -> 863 in the cache */ - /* replace250_0_0_1_0 -> 141 in the cache */ - /* replace250_0_0_1_1 -> 14 in the cache */ - /* replace250_0_0_1 -> 864 in the cache */ - /* replace250_0_0 -> 865 in the cache */ - /* replace250_0_1 -> 866 in the cache */ - /* replace250_0 -> 867 in the cache */ - /* replace250_1_0 -> 11 in the cache */ - /* replace250_1_1_0 -> 36 in the cache */ - /* replace250_1_1_1 -> 141 in the cache */ - /* replace250_1_1 -> 846 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 11, 846 }, - -1, - } }, - /* replace250_2 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 867, 873, 869 }, - -1, - } }, - - /* ('ishr@16', ('ishr@16', 'a', '#b'), '#c') => ('ishr@16', 'a', ('imin', ('iadd', ('iand', 'b', 15), ('iand', 'c', 15)), 15)) */ - /* search251_0_0 -> 11 in the cache */ - /* search251_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 11, 33 }, - -1, - } }, - /* search251_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 875, 319 }, - -1, - } }, - - /* replace251_0 -> 11 in the cache */ - /* replace251_1_0_0_0 -> 36 in the cache */ - /* replace251_1_0_0_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 36, 14 }, - -1, - } }, - /* replace251_1_0_1_0 -> 141 in the cache */ - /* replace251_1_0_1_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 141, 14 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 3, - { 877, 878 }, - -1, - } }, - /* replace251_1_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 0, 4, - { 879, 14 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishr, - -1, 4, - { 11, 880 }, - -1, - } }, - - /* ('ishl@32', ('ishl@32', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 31), ('iand', 'c', 31)), 32), ('ishl@32', 'a', ('iadd', 'b', 'c')), 0) */ - /* search252_0_0 -> 16 in the cache */ - /* search252_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 33 }, - -1, - } }, - /* search252_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 882, 319 }, - -1, - } }, - - /* replace252_0_0_0_0 -> 36 in the cache */ - /* replace252_0_0_0_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 36, 19 }, - -1, - } }, - /* replace252_0_0_1_0 -> 141 in the cache */ - /* replace252_0_0_1_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 141, 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 884, 885 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x20 /* 32 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 3, - { 886, 887 }, - -1, - } }, - /* replace252_1_0 -> 16 in the cache */ - /* replace252_1_1_0 -> 36 in the cache */ - /* replace252_1_1_1 -> 141 in the cache */ - /* replace252_1_1 -> 846 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 16, 846 }, - -1, - } }, - /* replace252_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 888, 889, 128 }, - -1, - } }, - - /* ('ushr@32', ('ushr@32', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 31), ('iand', 'c', 31)), 32), ('ushr@32', 'a', ('iadd', 'b', 'c')), 0) */ - /* search253_0_0 -> 16 in the cache */ - /* search253_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 33 }, - -1, - } }, - /* search253_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 891, 319 }, - -1, - } }, - - /* replace253_0_0_0_0 -> 36 in the cache */ - /* replace253_0_0_0_1 -> 19 in the cache */ - /* replace253_0_0_0 -> 884 in the cache */ - /* replace253_0_0_1_0 -> 141 in the cache */ - /* replace253_0_0_1_1 -> 19 in the cache */ - /* replace253_0_0_1 -> 885 in the cache */ - /* replace253_0_0 -> 886 in the cache */ - /* replace253_0_1 -> 887 in the cache */ - /* replace253_0 -> 888 in the cache */ - /* replace253_1_0 -> 16 in the cache */ - /* replace253_1_1_0 -> 36 in the cache */ - /* replace253_1_1_1 -> 141 in the cache */ - /* replace253_1_1 -> 846 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 16, 846 }, - -1, - } }, - /* replace253_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 888, 893, 128 }, - -1, - } }, - - /* ('ishr@32', ('ishr@32', 'a', '#b'), '#c') => ('ishr@32', 'a', ('imin', ('iadd', ('iand', 'b', 31), ('iand', 'c', 31)), 31)) */ - /* search254_0_0 -> 16 in the cache */ - /* search254_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 16, 33 }, - -1, - } }, - /* search254_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 895, 319 }, - -1, - } }, - - /* replace254_0 -> 16 in the cache */ - /* replace254_1_0_0_0 -> 36 in the cache */ - /* replace254_1_0_0_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 36, 19 }, - -1, - } }, - /* replace254_1_0_1_0 -> 141 in the cache */ - /* replace254_1_0_1_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 141, 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 3, - { 897, 898 }, - -1, - } }, - /* replace254_1_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 0, 4, - { 899, 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 4, - { 16, 900 }, - -1, - } }, - - /* ('ishl@64', ('ishl@64', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 63), ('iand', 'c', 63)), 64), ('ishl@64', 'a', ('iadd', 'b', 'c')), 0) */ - /* search255_0_0 -> 21 in the cache */ - /* search255_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 33 }, - -1, - } }, - /* search255_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 902, 319 }, - -1, - } }, - - /* replace255_0_0_0_0 -> 36 in the cache */ - /* replace255_0_0_0_1 -> 24 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 36, 24 }, - -1, - } }, - /* replace255_0_0_1_0 -> 141 in the cache */ - /* replace255_0_0_1_1 -> 24 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 141, 24 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 904, 905 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x40 /* 64 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 3, - { 906, 907 }, - -1, - } }, - /* replace255_1_0 -> 21 in the cache */ - /* replace255_1_1_0 -> 36 in the cache */ - /* replace255_1_1_1 -> 141 in the cache */ - /* replace255_1_1 -> 846 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 21, 846 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 908, 909, 910 }, - -1, - } }, - - /* ('ushr@64', ('ushr@64', 'a', '#b'), '#c') => ('bcsel', ('ult', ('iadd', ('iand', 'b', 63), ('iand', 'c', 63)), 64), ('ushr@64', 'a', ('iadd', 'b', 'c')), 0) */ - /* search256_0_0 -> 21 in the cache */ - /* search256_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 33 }, - -1, - } }, - /* search256_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 912, 319 }, - -1, - } }, - - /* replace256_0_0_0_0 -> 36 in the cache */ - /* replace256_0_0_0_1 -> 24 in the cache */ - /* replace256_0_0_0 -> 904 in the cache */ - /* replace256_0_0_1_0 -> 141 in the cache */ - /* replace256_0_0_1_1 -> 24 in the cache */ - /* replace256_0_0_1 -> 905 in the cache */ - /* replace256_0_0 -> 906 in the cache */ - /* replace256_0_1 -> 907 in the cache */ - /* replace256_0 -> 908 in the cache */ - /* replace256_1_0 -> 21 in the cache */ - /* replace256_1_1_0 -> 36 in the cache */ - /* replace256_1_1_1 -> 141 in the cache */ - /* replace256_1_1 -> 846 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 21, 846 }, - -1, - } }, - /* replace256_2 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 908, 914, 910 }, - -1, - } }, - - /* ('ishr@64', ('ishr@64', 'a', '#b'), '#c') => ('ishr@64', 'a', ('imin', ('iadd', ('iand', 'b', 63), ('iand', 'c', 63)), 63)) */ - /* search257_0_0 -> 21 in the cache */ - /* search257_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 33 }, - -1, - } }, - /* search257_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 916, 319 }, - -1, - } }, - - /* replace257_0 -> 21 in the cache */ - /* replace257_1_0_0_0 -> 36 in the cache */ - /* replace257_1_0_0_1 -> 24 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 36, 24 }, - -1, - } }, - /* replace257_1_0_1_0 -> 141 in the cache */ - /* replace257_1_0_1_1 -> 24 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 141, 24 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 3, - { 918, 919 }, - -1, - } }, - /* replace257_1_1 -> 24 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 0, 4, - { 920, 24 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 4, - { 21, 921 }, - -1, - } }, - - /* ('ishl', ('ushr', 'a@8', '#b'), 'b') => ('iand', 'a', ('ishl', 255, 'b')) */ - /* search258_0_0 -> 6 in the cache */ - /* search258_0_1 -> 33 in the cache */ - /* search258_0 -> 850 in the cache */ - /* search258_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 850, 36 }, - -1, - } }, - - /* replace258_0 -> 6 in the cache */ - { .constant = { - { nir_search_value_constant, 8 }, - nir_type_int, { 0xff /* 255 */ }, - } }, - /* replace258_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 924, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 6, 925 }, - -1, - } }, - - /* ('ishl', ('ishr', 'a@8', '#b'), 'b') => ('iand', 'a', ('ishl', 255, 'b')) */ - /* search259_0_0 -> 6 in the cache */ - /* search259_0_1 -> 33 in the cache */ - /* search259_0 -> 854 in the cache */ - /* search259_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 854, 36 }, - -1, - } }, - - /* replace259_0 -> 6 in the cache */ - /* replace259_1_0 -> 924 in the cache */ - /* replace259_1_1 -> 36 in the cache */ - /* replace259_1 -> 925 in the cache */ - /* replace259 -> 926 in the cache */ - - /* ('ushr', ('ishl', 'a@8', '#b'), 'b') => ('iand', 'a', ('ushr', 255, 'b')) */ - /* search260_0_0 -> 6 in the cache */ - /* search260_0_1 -> 33 in the cache */ - /* search260_0 -> 839 in the cache */ - /* search260_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 839, 36 }, - -1, - } }, - - /* replace260_0 -> 6 in the cache */ - /* replace260_1_0 -> 924 in the cache */ - /* replace260_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 924, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 6, 929 }, - -1, - } }, - - /* ('ishl', ('ushr', 'a@16', '#b'), 'b') => ('iand', 'a', ('ishl', 65535, 'b')) */ - /* search261_0_0 -> 11 in the cache */ - /* search261_0_1 -> 33 in the cache */ - /* search261_0 -> 871 in the cache */ - /* search261_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 871, 36 }, - -1, - } }, - - /* replace261_0 -> 11 in the cache */ - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0xffff /* 65535 */ }, - } }, - /* replace261_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 932, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 11, 933 }, - -1, - } }, - - /* ('ishl', ('ishr', 'a@16', '#b'), 'b') => ('iand', 'a', ('ishl', 65535, 'b')) */ - /* search262_0_0 -> 11 in the cache */ - /* search262_0_1 -> 33 in the cache */ - /* search262_0 -> 875 in the cache */ - /* search262_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 875, 36 }, - -1, - } }, - - /* replace262_0 -> 11 in the cache */ - /* replace262_1_0 -> 932 in the cache */ - /* replace262_1_1 -> 36 in the cache */ - /* replace262_1 -> 933 in the cache */ - /* replace262 -> 934 in the cache */ - - /* ('ushr', ('ishl', 'a@16', '#b'), 'b') => ('iand', 'a', ('ushr', 65535, 'b')) */ - /* search263_0_0 -> 11 in the cache */ - /* search263_0_1 -> 33 in the cache */ - /* search263_0 -> 861 in the cache */ - /* search263_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 861, 36 }, - -1, - } }, - - /* replace263_0 -> 11 in the cache */ - /* replace263_1_0 -> 932 in the cache */ - /* replace263_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 932, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 11, 937 }, - -1, - } }, - - /* ('ishl', ('ushr', 'a@32', '#b'), 'b') => ('iand', 'a', ('ishl', 4294967295, 'b')) */ - /* search264_0_0 -> 16 in the cache */ - /* search264_0_1 -> 33 in the cache */ - /* search264_0 -> 891 in the cache */ - /* search264_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 891, 36 }, - -1, - } }, - - /* replace264_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xffffffff /* 4294967295 */ }, - } }, - /* replace264_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 940, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 941 }, - -1, - } }, - - /* ('ishl', ('ishr', 'a@32', '#b'), 'b') => ('iand', 'a', ('ishl', 4294967295, 'b')) */ - /* search265_0_0 -> 16 in the cache */ - /* search265_0_1 -> 33 in the cache */ - /* search265_0 -> 895 in the cache */ - /* search265_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 895, 36 }, - -1, - } }, - - /* replace265_0 -> 16 in the cache */ - /* replace265_1_0 -> 940 in the cache */ - /* replace265_1_1 -> 36 in the cache */ - /* replace265_1 -> 941 in the cache */ - /* replace265 -> 942 in the cache */ - - /* ('ushr', ('ishl', 'a@32', '#b'), 'b') => ('iand', 'a', ('ushr', 4294967295, 'b')) */ - /* search266_0_0 -> 16 in the cache */ - /* search266_0_1 -> 33 in the cache */ - /* search266_0 -> 882 in the cache */ - /* search266_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 882, 36 }, - -1, - } }, - - /* replace266_0 -> 16 in the cache */ - /* replace266_1_0 -> 940 in the cache */ - /* replace266_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 940, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 945 }, - -1, - } }, - - /* ('ishl', ('ushr', 'a@64', '#b'), 'b') => ('iand', 'a', ('ishl', 18446744073709551615, 'b')) */ - /* search267_0_0 -> 21 in the cache */ - /* search267_0_1 -> 33 in the cache */ - /* search267_0 -> 912 in the cache */ - /* search267_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 912, 36 }, - -1, - } }, - - /* replace267_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0xffffffffffffffff /* 18446744073709551615 */ }, - } }, - /* replace267_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 948, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 949 }, - -1, - } }, - - /* ('ishl', ('ishr', 'a@64', '#b'), 'b') => ('iand', 'a', ('ishl', 18446744073709551615, 'b')) */ - /* search268_0_0 -> 21 in the cache */ - /* search268_0_1 -> 33 in the cache */ - /* search268_0 -> 916 in the cache */ - /* search268_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 916, 36 }, - -1, - } }, - - /* replace268_0 -> 21 in the cache */ - /* replace268_1_0 -> 948 in the cache */ - /* replace268_1_1 -> 36 in the cache */ - /* replace268_1 -> 949 in the cache */ - /* replace268 -> 950 in the cache */ - - /* ('ushr', ('ishl', 'a@64', '#b'), 'b') => ('iand', 'a', ('ushr', 18446744073709551615, 'b')) */ - /* search269_0_0 -> 21 in the cache */ - /* search269_0_1 -> 33 in the cache */ - /* search269_0 -> 902 in the cache */ - /* search269_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 902, 36 }, - -1, - } }, - - /* replace269_0 -> 21 in the cache */ - /* replace269_1_0 -> 948 in the cache */ - /* replace269_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 948, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 953 }, - -1, - } }, - - /* ('iand', ('ishl', 'a@32', '#b(is_first_5_bits_uge_2)'), -4) => ('ishl', 'a', 'b') */ - /* search270_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 9, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 955 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0x4 /* -4 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 956, 957 }, - -1, - } }, - - /* replace270_0 -> 16 in the cache */ - /* replace270_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('iand', ('imul', 'a', '#b(is_unsigned_multiple_of_4)'), -4) => ('imul', 'a', 'b') */ - /* search271_0_0 -> 0 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - true, - nir_type_invalid, - 10, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 0, 960 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_int, { -0x4 /* -4 */ }, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 961, 962 }, - -1, - } }, - - /* replace271_0 -> 0 in the cache */ - /* replace271_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_2)'), 4294967294) => ('iadd', ('iand', 'a', 4294967294), 'b') */ - /* search272_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 11, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 965 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xfffffffe /* 4294967294 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 966, 967 }, - -1, - } }, - - /* replace272_0_0 -> 16 in the cache */ - /* replace272_0_1 -> 967 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 967 }, - -1, - } }, - /* replace272_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 969, 36 }, - -1, - } }, - - /* ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_4)'), 4294967292) => ('iadd', ('iand', 'a', 4294967292), 'b') */ - /* search273_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 10, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 971 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xfffffffc /* 4294967292 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 972, 973 }, - -1, - } }, - - /* replace273_0_0 -> 16 in the cache */ - /* replace273_0_1 -> 973 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 973 }, - -1, - } }, - /* replace273_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 975, 36 }, - -1, - } }, - - /* ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_8)'), 4294967288) => ('iadd', ('iand', 'a', 4294967288), 'b') */ - /* search274_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 12, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 977 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xfffffff8 /* 4294967288 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 978, 979 }, - -1, - } }, - - /* replace274_0_0 -> 16 in the cache */ - /* replace274_0_1 -> 979 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 979 }, - -1, - } }, - /* replace274_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 981, 36 }, - -1, - } }, - - /* ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_16)'), 4294967280) => ('iadd', ('iand', 'a', 4294967280), 'b') */ - /* search275_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 13, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 983 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xfffffff0 /* 4294967280 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 984, 985 }, - -1, - } }, - - /* replace275_0_0 -> 16 in the cache */ - /* replace275_0_1 -> 985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 985 }, - -1, - } }, - /* replace275_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 987, 36 }, - -1, - } }, - - /* ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_32)'), 4294967264) => ('iadd', ('iand', 'a', 4294967264), 'b') */ - /* search276_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 14, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 989 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xffffffe0 /* 4294967264 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 990, 991 }, - -1, - } }, - - /* replace276_0_0 -> 16 in the cache */ - /* replace276_0_1 -> 991 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 991 }, - -1, - } }, - /* replace276_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 993, 36 }, - -1, - } }, - - /* ('iand@32', ('iadd@32', 'a', '#b(is_unsigned_multiple_of_64)'), 4294967232) => ('iadd', ('iand', 'a', 4294967232), 'b') */ - /* search277_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 15, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 995 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xffffffc0 /* 4294967232 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 996, 997 }, - -1, - } }, - - /* replace277_0_0 -> 16 in the cache */ - /* replace277_0_1 -> 997 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 997 }, - -1, - } }, - /* replace277_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 999, 36 }, - -1, - } }, - - /* ('ishl@32', ('iand', 'a@32', 2147483647), 1) => ('ishl', 'a', 1) */ - /* search278_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x7fffffff /* 2147483647 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 1001 }, - -1, - } }, - /* search278_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 1002, 406 }, - -1, - } }, - - /* replace278_0 -> 16 in the cache */ - /* replace278_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 406 }, - -1, - } }, - - /* ('iand', ('ishl', 'a@32', 1), 4294967294) => ('ishl', 'a', 1) */ - /* search279_0_0 -> 16 in the cache */ - /* search279_0_1 -> 406 in the cache */ - /* search279_0 -> 1004 in the cache */ - /* search279_1 -> 967 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1004, 967 }, - -1, - } }, - - /* replace279_0 -> 16 in the cache */ - /* replace279_1 -> 406 in the cache */ - /* replace279 -> 1004 in the cache */ - - /* ('iand', ('ushr', 'a@32', 1), 2147483647) => ('ushr', 'a', 1) */ - /* search280_0_0 -> 16 in the cache */ - /* search280_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 406 }, - -1, - } }, - /* search280_1 -> 1001 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1006, 1001 }, - -1, - } }, - - /* replace280_0 -> 16 in the cache */ - /* replace280_1 -> 406 in the cache */ - /* replace280 -> 1006 in the cache */ - - /* ('ishl@32', ('iand', 'a@32', 1073741823), 2) => ('ishl', 'a', 2) */ - /* search281_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x3fffffff /* 1073741823 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 1008 }, - -1, - } }, - /* search281_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 1009, 411 }, - -1, - } }, - - /* replace281_0 -> 16 in the cache */ - /* replace281_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 411 }, - -1, - } }, - - /* ('iand', ('ishl', 'a@32', 2), 4294967292) => ('ishl', 'a', 2) */ - /* search282_0_0 -> 16 in the cache */ - /* search282_0_1 -> 411 in the cache */ - /* search282_0 -> 1011 in the cache */ - /* search282_1 -> 973 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1011, 973 }, - -1, - } }, - - /* replace282_0 -> 16 in the cache */ - /* replace282_1 -> 411 in the cache */ - /* replace282 -> 1011 in the cache */ - - /* ('iand', ('ushr', 'a@32', 2), 1073741823) => ('ushr', 'a', 2) */ - /* search283_0_0 -> 16 in the cache */ - /* search283_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 411 }, - -1, - } }, - /* search283_1 -> 1008 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1013, 1008 }, - -1, - } }, - - /* replace283_0 -> 16 in the cache */ - /* replace283_1 -> 411 in the cache */ - /* replace283 -> 1013 in the cache */ - - /* ('ishl@32', ('iand', 'a@32', 65535), 16) => ('ishl', 'a', 16) */ - /* search284_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xffff /* 65535 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 1015 }, - -1, - } }, - /* search284_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 1016, 866 }, - -1, - } }, - - /* replace284_0 -> 16 in the cache */ - /* replace284_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 866 }, - -1, - } }, - - /* ('iand', ('ishl', 'a@32', 16), 4294901760) => ('ishl', 'a', 16) */ - /* search285_0_0 -> 16 in the cache */ - /* search285_0_1 -> 866 in the cache */ - /* search285_0 -> 1018 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xffff0000 /* 4294901760 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1018, 1019 }, - -1, - } }, - - /* replace285_0 -> 16 in the cache */ - /* replace285_1 -> 866 in the cache */ - /* replace285 -> 1018 in the cache */ - - /* ('iand', ('ushr', 'a@32', 16), 65535) => ('ushr', 'a', 16) */ - /* search286_0_0 -> 16 in the cache */ - /* search286_0_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 866 }, - -1, - } }, - /* search286_1 -> 1015 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1021, 1015 }, - -1, - } }, - - /* replace286_0 -> 16 in the cache */ - /* replace286_1 -> 866 in the cache */ - /* replace286 -> 1021 in the cache */ - - /* ('ishl@32', ('iand', 'a@32', 255), 24) => ('ishl', 'a', 24) */ - /* search287_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xff /* 255 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 1023 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x18 /* 24 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 1024, 1025 }, - -1, - } }, - - /* replace287_0 -> 16 in the cache */ - /* replace287_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 1025 }, - -1, - } }, - - /* ('iand', ('ishl', 'a@32', 24), 4278190080) => ('ishl', 'a', 24) */ - /* search288_0_0 -> 16 in the cache */ - /* search288_0_1 -> 1025 in the cache */ - /* search288_0 -> 1027 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xff000000 /* 4278190080 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1027, 1028 }, - -1, - } }, - - /* replace288_0 -> 16 in the cache */ - /* replace288_1 -> 1025 in the cache */ - /* replace288 -> 1027 in the cache */ - - /* ('iand', ('ushr', 'a@32', 24), 255) => ('ushr', 'a', 24) */ - /* search289_0_0 -> 16 in the cache */ - /* search289_0_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 1025 }, - -1, - } }, - /* search289_1 -> 1023 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1030, 1023 }, - -1, - } }, - - /* replace289_0 -> 16 in the cache */ - /* replace289_1 -> 1025 in the cache */ - /* replace289 -> 1030 in the cache */ - - /* ('ishl', ('iadd', 'a', '#b'), '#c') => ('iadd', ('ishl', 'a', 'c'), ('ishl', 'b', 'c')) */ - /* search290_0_0 -> 0 in the cache */ - /* search290_0_1 -> 834 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 0, 834 }, - -1, - } }, - /* search290_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 1032, 319 }, - -1, - } }, - - /* replace290_0_0 -> 0 in the cache */ - /* replace290_0_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 0, 141 }, - -1, - } }, - /* replace290_1_0 -> 3 in the cache */ - /* replace290_1_1 -> 141 in the cache */ - /* replace290_1 -> 837 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 1034, 837 }, - -1, - } }, - - /* ('imul', ('iadd(is_used_once)', 'a', '#b'), '#c') => ('iadd', ('imul', 'a', 'c'), ('imul', 'b', 'c')) */ - /* search291_0_0 -> 132 in the cache */ - /* search291_0_1 -> 293 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 132, 293 }, - 0, - } }, - /* search291_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 1036, 827 }, - -1, - } }, - - /* replace291_0_0 -> 132 in the cache */ - /* replace291_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 132, 135 }, - -1, - } }, - /* replace291_1_0 -> 133 in the cache */ - /* replace291_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 2, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 1038, 1039 }, - -1, - } }, - - /* ('imul', ('iadd(is_used_once)', ('iadd(is_used_once)', 'a', '#b'), 'c'), '#d') => ('iadd', ('imul', ('iadd', 'a', 'c'), 'd'), ('imul', 'b', 'd')) */ - /* search292_0_0_0 -> 155 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 2, 1, - { 155, 1041 }, - 0, - } }, - /* search292_0_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 1, 2, - { 1042, 158 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 3, /* d */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 3, - { 1043, 1044 }, - -1, - } }, - - /* replace292_0_0_0 -> 155 in the cache */ - /* replace292_0_0_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 2, 1, - { 155, 158 }, - -1, - } }, - /* replace292_0_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 1, 2, - { 1046, 159 }, - -1, - } }, - /* replace292_1_0 -> 156 in the cache */ - /* replace292_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 3, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 4, - { 1047, 1048 }, - -1, - } }, - - /* ('ishl', ('iadd(is_used_once)', ('iadd(is_used_once)', 'a', '#b'), 'c'), '#d') => ('iadd', ('ishl', ('iadd', 'a', 'c'), 'd'), ('ishl', 'b', 'd')) */ - /* search293_0_0_0 -> 132 in the cache */ - /* search293_0_0_1 -> 293 in the cache */ - /* search293_0_0 -> 1036 in the cache */ - /* search293_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 1036, 135 }, - 0, - } }, - /* search293_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 1050, 321 }, - -1, - } }, - - /* replace293_0_0_0 -> 132 in the cache */ - /* replace293_0_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 132, 135 }, - -1, - } }, - /* replace293_0_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 1052, 169 }, - -1, - } }, - /* replace293_1_0 -> 133 in the cache */ - /* replace293_1_1 -> 169 in the cache */ - /* replace293_1 -> 830 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 1053, 830 }, - -1, - } }, - - /* ('inot', ('flt(is_used_once)', 'a(is_a_number)', 'b(is_a_number)')) => ('fge', 'a', 'b') */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 16, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - 16, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1055, 1056 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1057 }, - -1, - } }, - - /* replace294_0 -> 0 in the cache */ - /* replace294_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('fge(is_used_once)', 'a(is_a_number)', 'b(is_a_number)')) => ('flt', 'a', 'b') */ - /* search295_0_0 -> 1055 in the cache */ - /* search295_0_1 -> 1056 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1055, 1056 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1060 }, - -1, - } }, - - /* replace295_0 -> 0 in the cache */ - /* replace295_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('feq(is_used_once)', 'a', 'b')) => ('fneu', 'a', 'b') */ - /* search296_0_0 -> 0 in the cache */ - /* search296_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 1063 }, - -1, - } }, - - /* replace296_0 -> 0 in the cache */ - /* replace296_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('fneu(is_used_once)', 'a', 'b')) => ('feq', 'a', 'b') */ - /* search297_0_0 -> 0 in the cache */ - /* search297_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 1066 }, - -1, - } }, - - /* replace297_0 -> 0 in the cache */ - /* replace297_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('ilt(is_used_once)', 'a', 'b')) => ('ige', 'a', 'b') */ - /* search298_0_0 -> 0 in the cache */ - /* search298_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1069 }, - -1, - } }, - - /* replace298_0 -> 0 in the cache */ - /* replace298_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('ult(is_used_once)', 'a', 'b')) => ('uge', 'a', 'b') */ - /* search299_0_0 -> 0 in the cache */ - /* search299_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1072 }, - -1, - } }, - - /* replace299_0 -> 0 in the cache */ - /* replace299_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('ige(is_used_once)', 'a', 'b')) => ('ilt', 'a', 'b') */ - /* search300_0_0 -> 0 in the cache */ - /* search300_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1075 }, - -1, - } }, - - /* replace300_0 -> 0 in the cache */ - /* replace300_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('uge(is_used_once)', 'a', 'b')) => ('ult', 'a', 'b') */ - /* search301_0_0 -> 0 in the cache */ - /* search301_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1078 }, - -1, - } }, - - /* replace301_0 -> 0 in the cache */ - /* replace301_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('ieq(is_used_once)', 'a', 'b')) => ('ine', 'a', 'b') */ - /* search302_0_0 -> 0 in the cache */ - /* search302_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 1081 }, - -1, - } }, - - /* replace302_0 -> 0 in the cache */ - /* replace302_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('inot', ('ine(is_used_once)', 'a', 'b')) => ('ieq', 'a', 'b') */ - /* search303_0_0 -> 0 in the cache */ - /* search303_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 1084 }, - -1, - } }, - - /* replace303_0 -> 0 in the cache */ - /* replace303_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('iand', ('feq', 'a', 'b'), ('fneu', 'a', 'b')) => False */ - /* search304_0_0 -> 0 in the cache */ - /* search304_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search304_1_0 -> 0 in the cache */ - /* search304_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 2, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1087, 1088 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 1 }, - nir_type_bool, { NIR_FALSE /* False */ }, - } }, - - /* ('iand', ('flt', 'a', 'b'), ('flt', 'b', 'a')) => False */ - /* search305_0_0 -> 0 in the cache */ - /* search305_0_1 -> 3 in the cache */ - /* search305_0 -> 1062 in the cache */ - /* search305_1_0 -> 3 in the cache */ - /* search305_1_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 3, 0 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1062, 1091 }, - -1, - } }, - - /* replace305 -> 1090 in the cache */ - - /* ('iand', ('ieq', 'a', 'b'), ('ine', 'a', 'b')) => False */ - /* search306_0_0 -> 0 in the cache */ - /* search306_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search306_1_0 -> 0 in the cache */ - /* search306_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1093, 1094 }, - -1, - } }, - - /* replace306 -> 1090 in the cache */ - - /* ('iand', ('ilt', 'a', 'b'), ('ilt', 'b', 'a')) => False */ - /* search307_0_0 -> 0 in the cache */ - /* search307_0_1 -> 3 in the cache */ - /* search307_0 -> 1077 in the cache */ - /* search307_1_0 -> 3 in the cache */ - /* search307_1_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 3, 0 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1077, 1096 }, - -1, - } }, - - /* replace307 -> 1090 in the cache */ - - /* ('iand', ('ult', 'a', 'b'), ('ult', 'b', 'a')) => False */ - /* search308_0_0 -> 0 in the cache */ - /* search308_0_1 -> 3 in the cache */ - /* search308_0 -> 1080 in the cache */ - /* search308_1_0 -> 3 in the cache */ - /* search308_1_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 3, 0 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1080, 1098 }, - -1, - } }, - - /* replace308 -> 1090 in the cache */ - - /* ('flt', ('fneg', 'a'), ('fneg', 'b')) => ('flt', 'b', 'a') */ - /* search309_0_0 -> 0 in the cache */ - /* search309_0 -> 223 in the cache */ - /* search309_1_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 223, 1100 }, - -1, - } }, - - /* replace309_0 -> 3 in the cache */ - /* replace309_1 -> 0 in the cache */ - /* replace309 -> 1091 in the cache */ - - /* ('fge', ('fneg', 'a'), ('fneg', 'b')) => ('fge', 'b', 'a') */ - /* search310_0_0 -> 0 in the cache */ - /* search310_0 -> 223 in the cache */ - /* search310_1_0 -> 3 in the cache */ - /* search310_1 -> 1100 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 223, 1100 }, - -1, - } }, - - /* replace310_0 -> 3 in the cache */ - /* replace310_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 3, 0 }, - -1, - } }, - - /* ('feq', ('fneg', 'a'), ('fneg', 'b')) => ('feq', 'b', 'a') */ - /* search311_0_0 -> 0 in the cache */ - /* search311_0 -> 223 in the cache */ - /* search311_1_0 -> 3 in the cache */ - /* search311_1 -> 1100 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 223, 1100 }, - -1, - } }, - - /* replace311_0 -> 3 in the cache */ - /* replace311_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 3, 0 }, - -1, - } }, - - /* ('fneu', ('fneg', 'a'), ('fneg', 'b')) => ('fneu', 'b', 'a') */ - /* search312_0_0 -> 0 in the cache */ - /* search312_0 -> 223 in the cache */ - /* search312_1_0 -> 3 in the cache */ - /* search312_1 -> 1100 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 223, 1100 }, - -1, - } }, - - /* replace312_0 -> 3 in the cache */ - /* replace312_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 3, 0 }, - -1, - } }, - - /* ('flt', ('fneg', 'a'), -1.0) => ('flt', 1.0, 'a') */ - /* search313_0_0 -> 32 in the cache */ - /* search313_0 -> 107 in the cache */ - /* search313_1 -> 258 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 107, 258 }, - -1, - } }, - - /* replace313_0 -> 252 in the cache */ - /* replace313_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 252, 32 }, - -1, - } }, - - /* ('flt', -1.0, ('fneg', 'a')) => ('flt', 'a', 1.0) */ - /* search314_0 -> 258 in the cache */ - /* search314_1_0 -> 32 in the cache */ - /* search314_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 258, 107 }, - -1, - } }, - - /* replace314_0 -> 32 in the cache */ - /* replace314_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 32, 252 }, - -1, - } }, - - /* ('fge', ('fneg', 'a'), -1.0) => ('fge', 1.0, 'a') */ - /* search315_0_0 -> 32 in the cache */ - /* search315_0 -> 107 in the cache */ - /* search315_1 -> 258 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 107, 258 }, - -1, - } }, - - /* replace315_0 -> 252 in the cache */ - /* replace315_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 252, 32 }, - -1, - } }, - - /* ('fge', -1.0, ('fneg', 'a')) => ('fge', 'a', 1.0) */ - /* search316_0 -> 258 in the cache */ - /* search316_1_0 -> 32 in the cache */ - /* search316_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 258, 107 }, - -1, - } }, - - /* replace316_0 -> 32 in the cache */ - /* replace316_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 32, 252 }, - -1, - } }, - - /* ('fneu', ('fneg', 'a'), -1.0) => ('fneu', 1.0, 'a') */ - /* search317_0_0 -> 32 in the cache */ - /* search317_0 -> 107 in the cache */ - /* search317_1 -> 258 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 107, 258 }, - -1, - } }, - - /* replace317_0 -> 252 in the cache */ - /* replace317_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 252, 32 }, - -1, - } }, - - /* ('feq', -1.0, ('fneg', 'a')) => ('feq', 'a', 1.0) */ - /* search318_0 -> 258 in the cache */ - /* search318_1_0 -> 32 in the cache */ - /* search318_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 258, 107 }, - -1, - } }, - - /* replace318_0 -> 32 in the cache */ - /* replace318_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 32, 252 }, - -1, - } }, - - /* ('ieq', ('ineg', 'a'), 0) => ('ieq', 'a', 0) */ - /* search319_0_0 -> 32 in the cache */ - /* search319_0 -> 109 in the cache */ - /* search319_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 109, 61 }, - -1, - } }, - - /* replace319_0 -> 32 in the cache */ - /* replace319_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* ('ine', ('ineg', 'a'), 0) => ('ine', 'a', 0) */ - /* search320_0_0 -> 32 in the cache */ - /* search320_0 -> 109 in the cache */ - /* search320_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 109, 61 }, - -1, - } }, - - /* replace320_0 -> 32 in the cache */ - /* replace320_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* ('ieq', ('iabs', 'a'), 0) => ('ieq', 'a', 0) */ - /* search321_0_0 -> 32 in the cache */ - /* search321_0 -> 114 in the cache */ - /* search321_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 114, 61 }, - -1, - } }, - - /* replace321_0 -> 32 in the cache */ - /* replace321_1 -> 61 in the cache */ - /* replace321 -> 1121 in the cache */ - - /* ('ine', ('iabs', 'a'), 0) => ('ine', 'a', 0) */ - /* search322_0_0 -> 32 in the cache */ - /* search322_0 -> 114 in the cache */ - /* search322_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 114, 61 }, - -1, - } }, - - /* replace322_0 -> 32 in the cache */ - /* replace322_1 -> 61 in the cache */ - /* replace322 -> 1123 in the cache */ - - /* ('flt', '#b(is_gt_0_and_lt_1)', ('fsat(is_used_once)', 'a')) => ('flt', 'b', 'a') */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* b */ - true, - nir_type_invalid, - 17, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 1127 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1126, 1128 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* replace323_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1130, 1127 }, - -1, - } }, - - /* ('fge', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fge', 'a', 'b') */ - /* search324_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 0 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - true, - nir_type_invalid, - 17, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1132, 1133 }, - -1, - } }, - - /* replace324_0 -> 0 in the cache */ - /* replace324_1 -> 3 in the cache */ - /* replace324 -> 1059 in the cache */ - - /* ('feq', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('feq', 'a', 'b') */ - /* search325_0_0 -> 0 in the cache */ - /* search325_0 -> 1132 in the cache */ - /* search325_1 -> 1133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1132, 1133 }, - -1, - } }, - - /* replace325_0 -> 0 in the cache */ - /* replace325_1 -> 3 in the cache */ - /* replace325 -> 1068 in the cache */ - - /* ('fneu', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fneu', 'a', 'b') */ - /* search326_0_0 -> 0 in the cache */ - /* search326_0 -> 1132 in the cache */ - /* search326_1 -> 1133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1132, 1133 }, - -1, - } }, - - /* replace326_0 -> 0 in the cache */ - /* replace326_1 -> 3 in the cache */ - /* replace326 -> 1065 in the cache */ - - /* ('fge', ('fsat(is_used_once)', 'a'), 1.0) => ('fge', 'a', 1.0) */ - /* search327_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 32 }, - 0, - } }, - /* search327_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1137, 252 }, - -1, - } }, - - /* replace327_0 -> 32 in the cache */ - /* replace327_1 -> 252 in the cache */ - /* replace327 -> 1115 in the cache */ - - /* ('flt', 0.0, ('fsat(is_used_once)', 'a')) => ('flt', 0.0, 'a') */ - /* search328_0 -> 117 in the cache */ - /* search328_1_0 -> 32 in the cache */ - /* search328_1 -> 1137 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 117, 1137 }, - -1, - } }, - - /* replace328_0 -> 117 in the cache */ - /* replace328_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 117, 32 }, - -1, - } }, - - /* ('fge', 0.0, ('b2f', 'a@1')) => ('inot', 'a') */ - { .constant = { - { nir_search_value_constant, 0 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - /* search329_1_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1141, 1142 }, - -1, - } }, - - /* replace329_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 770 }, - -1, - } }, - - /* ('fge', ('fneg', ('b2f', 'a@1')), 0.0) => ('inot', 'a') */ - /* search330_0_0_0 -> 770 in the cache */ - /* search330_0_0 -> 1142 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1142 }, - -1, - } }, - /* search330_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1145, 1141 }, - -1, - } }, - - /* replace330_0 -> 770 in the cache */ - /* replace330 -> 1144 in the cache */ - - /* ('fneu', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('ior', 'a', 'b') */ - /* search331_0_0_0 -> 770 in the cache */ - /* search331_0_0 -> 1142 in the cache */ - { .variable = { - { nir_search_value_variable, 1 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 1142, 1148 }, - -1, - } }, - /* search331_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1149, 1141 }, - -1, - } }, - - /* replace331_0 -> 770 in the cache */ - /* replace331_1 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 770, 1147 }, - -1, - } }, - - /* ('fneu', ('bcsel', 'a', 1.0, ('b2f', 'b@1')), 0.0) => ('ior', 'a', 'b') */ - /* search332_0_0 -> 770 in the cache */ - { .constant = { - { nir_search_value_constant, 0 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - /* search332_0_2_0 -> 1147 in the cache */ - /* search332_0_2 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1152, 1148 }, - -1, - } }, - /* search332_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1153, 1141 }, - -1, - } }, - - /* replace332_0 -> 770 in the cache */ - /* replace332_1 -> 1147 in the cache */ - /* replace332 -> 1151 in the cache */ - - /* ('fneu', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))) => ('ior', 'a', 'b') */ - /* search333_0_0 -> 770 in the cache */ - /* search333_0 -> 1142 in the cache */ - /* search333_1_0_0 -> 1147 in the cache */ - /* search333_1_0 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1148 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1142, 1155 }, - -1, - } }, - - /* replace333_0 -> 770 in the cache */ - /* replace333_1 -> 1147 in the cache */ - /* replace333 -> 1151 in the cache */ - - /* ('fneu', ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('iand', 'a', 'b') */ - /* search334_0_0_0 -> 770 in the cache */ - /* search334_0_0 -> 1142 in the cache */ - /* search334_0_1_0 -> 1147 in the cache */ - /* search334_0_1 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 1142, 1148 }, - -1, - } }, - /* search334_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1157, 1141 }, - -1, - } }, - - /* replace334_0 -> 770 in the cache */ - /* replace334_1 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 770, 1147 }, - -1, - } }, - - /* ('fneu', ('bcsel', 'a', ('b2f', 'b@1'), 0.0), 0.0) => ('iand', 'a', 'b') */ - /* search335_0_0 -> 770 in the cache */ - /* search335_0_1_0 -> 1147 in the cache */ - /* search335_0_1 -> 1148 in the cache */ - /* search335_0_2 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1148, 1141 }, - -1, - } }, - /* search335_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1160, 1141 }, - -1, - } }, - - /* replace335_0 -> 770 in the cache */ - /* replace335_1 -> 1147 in the cache */ - /* replace335 -> 1159 in the cache */ - - /* ('fneu', ('fadd', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), 0.0) => ('ixor', 'a', 'b') */ - /* search336_0_0_0 -> 770 in the cache */ - /* search336_0_0 -> 1142 in the cache */ - /* search336_0_1_0_0 -> 1147 in the cache */ - /* search336_0_1_0 -> 1148 in the cache */ - /* search336_0_1 -> 1155 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 1142, 1155 }, - -1, - } }, - /* search336_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1162, 1141 }, - -1, - } }, - - /* replace336_0 -> 770 in the cache */ - /* replace336_1 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 770, 1147 }, - -1, - } }, - - /* ('fneu', ('b2f', 'a@1'), ('b2f', 'b@1')) => ('ixor', 'a', 'b') */ - /* search337_0_0 -> 770 in the cache */ - /* search337_0 -> 1142 in the cache */ - /* search337_1_0 -> 1147 in the cache */ - /* search337_1 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1142, 1148 }, - -1, - } }, - - /* replace337_0 -> 770 in the cache */ - /* replace337_1 -> 1147 in the cache */ - /* replace337 -> 1164 in the cache */ - - /* ('fneu', ('fneg', ('b2f', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('ixor', 'a', 'b') */ - /* search338_0_0_0 -> 770 in the cache */ - /* search338_0_0 -> 1142 in the cache */ - /* search338_0 -> 1145 in the cache */ - /* search338_1_0_0 -> 1147 in the cache */ - /* search338_1_0 -> 1148 in the cache */ - /* search338_1 -> 1155 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1145, 1155 }, - -1, - } }, - - /* replace338_0 -> 770 in the cache */ - /* replace338_1 -> 1147 in the cache */ - /* replace338 -> 1164 in the cache */ - - /* ('feq', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('inot', ('ior', 'a', 'b')) */ - /* search339_0_0_0 -> 770 in the cache */ - /* search339_0_0 -> 1142 in the cache */ - /* search339_0_1_0 -> 1147 in the cache */ - /* search339_0_1 -> 1148 in the cache */ - /* search339_0 -> 1149 in the cache */ - /* search339_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1149, 1141 }, - -1, - } }, - - /* replace339_0_0 -> 770 in the cache */ - /* replace339_0_1 -> 1147 in the cache */ - /* replace339_0 -> 1151 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 1151 }, - -1, - } }, - - /* ('feq', ('bcsel', 'a', 1.0, ('b2f', 'b@1')), 0.0) => ('inot', ('ior', 'a', 'b')) */ - /* search340_0_0 -> 770 in the cache */ - /* search340_0_1 -> 1152 in the cache */ - /* search340_0_2_0 -> 1147 in the cache */ - /* search340_0_2 -> 1148 in the cache */ - /* search340_0 -> 1153 in the cache */ - /* search340_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1153, 1141 }, - -1, - } }, - - /* replace340_0_0 -> 770 in the cache */ - /* replace340_0_1 -> 1147 in the cache */ - /* replace340_0 -> 1151 in the cache */ - /* replace340 -> 1168 in the cache */ - - /* ('feq', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))) => ('inot', ('ior', 'a', 'b')) */ - /* search341_0_0 -> 770 in the cache */ - /* search341_0 -> 1142 in the cache */ - /* search341_1_0_0 -> 1147 in the cache */ - /* search341_1_0 -> 1148 in the cache */ - /* search341_1 -> 1155 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1142, 1155 }, - -1, - } }, - - /* replace341_0_0 -> 770 in the cache */ - /* replace341_0_1 -> 1147 in the cache */ - /* replace341_0 -> 1151 in the cache */ - /* replace341 -> 1168 in the cache */ - - /* ('feq', ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0) => ('inot', ('iand', 'a', 'b')) */ - /* search342_0_0_0 -> 770 in the cache */ - /* search342_0_0 -> 1142 in the cache */ - /* search342_0_1_0 -> 1147 in the cache */ - /* search342_0_1 -> 1148 in the cache */ - /* search342_0 -> 1157 in the cache */ - /* search342_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1157, 1141 }, - -1, - } }, - - /* replace342_0_0 -> 770 in the cache */ - /* replace342_0_1 -> 1147 in the cache */ - /* replace342_0 -> 1159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 1159 }, - -1, - } }, - - /* ('feq', ('bcsel', 'a', ('b2f', 'b@1'), 0.0), 0.0) => ('inot', ('iand', 'a', 'b')) */ - /* search343_0_0 -> 770 in the cache */ - /* search343_0_1_0 -> 1147 in the cache */ - /* search343_0_1 -> 1148 in the cache */ - /* search343_0_2 -> 1141 in the cache */ - /* search343_0 -> 1160 in the cache */ - /* search343_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1160, 1141 }, - -1, - } }, - - /* replace343_0_0 -> 770 in the cache */ - /* replace343_0_1 -> 1147 in the cache */ - /* replace343_0 -> 1159 in the cache */ - /* replace343 -> 1172 in the cache */ - - /* ('feq', ('fadd', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), 0.0) => ('ieq', 'a', 'b') */ - /* search344_0_0_0 -> 770 in the cache */ - /* search344_0_0 -> 1142 in the cache */ - /* search344_0_1_0_0 -> 1147 in the cache */ - /* search344_0_1_0 -> 1148 in the cache */ - /* search344_0_1 -> 1155 in the cache */ - /* search344_0 -> 1162 in the cache */ - /* search344_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1162, 1141 }, - -1, - } }, - - /* replace344_0 -> 770 in the cache */ - /* replace344_1 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 770, 1147 }, - -1, - } }, - - /* ('feq', ('b2f', 'a@1'), ('b2f', 'b@1')) => ('ieq', 'a', 'b') */ - /* search345_0_0 -> 770 in the cache */ - /* search345_0 -> 1142 in the cache */ - /* search345_1_0 -> 1147 in the cache */ - /* search345_1 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1142, 1148 }, - -1, - } }, - - /* replace345_0 -> 770 in the cache */ - /* replace345_1 -> 1147 in the cache */ - /* replace345 -> 1175 in the cache */ - - /* ('feq', ('fneg', ('b2f', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('ieq', 'a', 'b') */ - /* search346_0_0_0 -> 770 in the cache */ - /* search346_0_0 -> 1142 in the cache */ - /* search346_0 -> 1145 in the cache */ - /* search346_1_0_0 -> 1147 in the cache */ - /* search346_1_0 -> 1148 in the cache */ - /* search346_1 -> 1155 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1145, 1155 }, - -1, - } }, - - /* replace346_0 -> 770 in the cache */ - /* replace346_1 -> 1147 in the cache */ - /* replace346 -> 1175 in the cache */ - - /* ('flt', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), 0.0) => ('ior', 'a', 'b') */ - /* search347_0_0_0_0 -> 770 in the cache */ - /* search347_0_0_0 -> 1142 in the cache */ - /* search347_0_0_1_0 -> 1147 in the cache */ - /* search347_0_0_1 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 1142, 1148 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1178 }, - -1, - } }, - /* search347_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1179, 1141 }, - -1, - } }, - - /* replace347_0 -> 770 in the cache */ - /* replace347_1 -> 1147 in the cache */ - /* replace347 -> 1151 in the cache */ - - /* ('flt', 0.0, ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))) => ('ior', 'a', 'b') */ - /* search348_0 -> 1141 in the cache */ - /* search348_1_0_0 -> 770 in the cache */ - /* search348_1_0 -> 1142 in the cache */ - /* search348_1_1_0 -> 1147 in the cache */ - /* search348_1_1 -> 1148 in the cache */ - /* search348_1 -> 1178 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1141, 1178 }, - -1, - } }, - - /* replace348_0 -> 770 in the cache */ - /* replace348_1 -> 1147 in the cache */ - /* replace348 -> 1151 in the cache */ - - /* ('fge', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), 0.0) => ('inot', ('ior', 'a', 'b')) */ - /* search349_0_0_0_0 -> 770 in the cache */ - /* search349_0_0_0 -> 1142 in the cache */ - /* search349_0_0_1_0 -> 1147 in the cache */ - /* search349_0_0_1 -> 1148 in the cache */ - /* search349_0_0 -> 1178 in the cache */ - /* search349_0 -> 1179 in the cache */ - /* search349_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 1179, 1141 }, - -1, - } }, - - /* replace349_0_0 -> 770 in the cache */ - /* replace349_0_1 -> 1147 in the cache */ - /* replace349_0 -> 1151 in the cache */ - /* replace349 -> 1168 in the cache */ - - /* ('fge', 0.0, ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))) => ('inot', ('ior', 'a', 'b')) */ - /* search350_0 -> 1141 in the cache */ - /* search350_1_0_0 -> 770 in the cache */ - /* search350_1_0 -> 1142 in the cache */ - /* search350_1_1_0 -> 1147 in the cache */ - /* search350_1_1 -> 1148 in the cache */ - /* search350_1 -> 1178 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 1141, 1178 }, - -1, - } }, - - /* replace350_0_0 -> 770 in the cache */ - /* replace350_0_1 -> 1147 in the cache */ - /* replace350_0 -> 1151 in the cache */ - /* replace350 -> 1168 in the cache */ - - /* ('flt', 'a', ('fneg', 'a')) => ('flt', 'a', 0.0) */ - /* search351_0 -> 32 in the cache */ - /* search351_1_0 -> 32 in the cache */ - /* search351_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 32, 107 }, - -1, - } }, - - /* replace351_0 -> 32 in the cache */ - /* replace351_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 32, 117 }, - -1, - } }, - - /* ('fge', 'a', ('fneg', 'a')) => ('fge', 'a', 0.0) */ - /* search352_0 -> 32 in the cache */ - /* search352_1_0 -> 32 in the cache */ - /* search352_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 32, 107 }, - -1, - } }, - - /* replace352_0 -> 32 in the cache */ - /* replace352_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 32, 117 }, - -1, - } }, - - /* ('flt', ('fmin', 'c', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')))), 0.0) => ('ior', ('flt', 'c', 0.0), ('ior', 'a', 'b')) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 1 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1189 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 1 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1191 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 1190, 1192 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1193 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 1188, 1194 }, - -1, - } }, - /* search353_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 2, - { 1195, 117 }, - -1, - } }, - - /* replace353_0_0 -> 1188 in the cache */ - /* replace353_0_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1188, 117 }, - -1, - } }, - /* replace353_1_0 -> 1189 in the cache */ - /* replace353_1_1 -> 1191 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 1189, 1191 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 1197, 1198 }, - -1, - } }, - - /* ('~flt', ('fadd', 'a', 'b'), 'a') => ('flt', 'b', 0.0) */ - /* search354_0_0 -> 0 in the cache */ - /* search354_0_1 -> 3 in the cache */ - /* search354_0 -> 282 in the cache */ - /* search354_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_flt, - -1, 1, - { 282, 0 }, - -1, - } }, - - /* replace354_0 -> 3 in the cache */ - /* replace354_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 3, 266 }, - -1, - } }, - - /* ('~fge', ('fadd', 'a', 'b'), 'a') => ('fge', 'b', 0.0) */ - /* search355_0_0 -> 0 in the cache */ - /* search355_0_1 -> 3 in the cache */ - /* search355_0 -> 282 in the cache */ - /* search355_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 282, 0 }, - -1, - } }, - - /* replace355_0 -> 3 in the cache */ - /* replace355_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 3, 266 }, - -1, - } }, - - /* ('~feq', ('fadd', 'a', 'b'), 'a') => ('feq', 'b', 0.0) */ - /* search356_0_0 -> 0 in the cache */ - /* search356_0_1 -> 3 in the cache */ - /* search356_0 -> 224 in the cache */ - /* search356_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_feq, - 0, 2, - { 224, 0 }, - -1, - } }, - - /* replace356_0 -> 3 in the cache */ - /* replace356_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 3, 266 }, - -1, - } }, - - /* ('~fneu', ('fadd', 'a', 'b'), 'a') => ('fneu', 'b', 0.0) */ - /* search357_0_0 -> 0 in the cache */ - /* search357_0_1 -> 3 in the cache */ - /* search357_0 -> 224 in the cache */ - /* search357_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fneu, - 0, 2, - { 224, 0 }, - -1, - } }, - - /* replace357_0 -> 3 in the cache */ - /* replace357_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 3, 266 }, - -1, - } }, - - /* ('~flt', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('flt', 'a', ('fadd', 'c', ('fneg', 'b'))) */ - /* search358_0_0 -> 132 in the cache */ - /* search358_0_1 -> 293 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 132, 293 }, - 0, - } }, - /* search358_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_flt, - -1, 1, - { 1208, 827 }, - -1, - } }, - - /* replace358_0 -> 132 in the cache */ - /* replace358_1_0 -> 135 in the cache */ - /* replace358_1_1_0 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 133 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 135, 1210 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 132, 1211 }, - -1, - } }, - - /* ('~flt', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('flt', ('fneg', ('fadd', 'c', 'b')), 'a') */ - /* search359_0_0_0 -> 132 in the cache */ - /* search359_0_0_1 -> 293 in the cache */ - /* search359_0_0 -> 1208 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1208 }, - 0, - } }, - /* search359_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_flt, - -1, 1, - { 1213, 827 }, - -1, - } }, - - /* replace359_0_0_0 -> 135 in the cache */ - /* replace359_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 135, 133 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1215 }, - -1, - } }, - /* replace359_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1216, 132 }, - -1, - } }, - - /* ('~fge', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('fge', 'a', ('fadd', 'c', ('fneg', 'b'))) */ - /* search360_0_0 -> 132 in the cache */ - /* search360_0_1 -> 293 in the cache */ - /* search360_0 -> 1208 in the cache */ - /* search360_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 1208, 827 }, - -1, - } }, - - /* replace360_0 -> 132 in the cache */ - /* replace360_1_0 -> 135 in the cache */ - /* replace360_1_1_0 -> 133 in the cache */ - /* replace360_1_1 -> 1210 in the cache */ - /* replace360_1 -> 1211 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 132, 1211 }, - -1, - } }, - - /* ('~fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('fge', ('fneg', ('fadd', 'c', 'b')), 'a') */ - /* search361_0_0_0 -> 132 in the cache */ - /* search361_0_0_1 -> 293 in the cache */ - /* search361_0_0 -> 1208 in the cache */ - /* search361_0 -> 1213 in the cache */ - /* search361_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 1213, 827 }, - -1, - } }, - - /* replace361_0_0_0 -> 135 in the cache */ - /* replace361_0_0_1 -> 133 in the cache */ - /* replace361_0_0 -> 1215 in the cache */ - /* replace361_0 -> 1216 in the cache */ - /* replace361_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 1216, 132 }, - -1, - } }, - - /* ('~feq', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('feq', 'a', ('fadd', 'c', ('fneg', 'b'))) */ - /* search362_0_0 -> 132 in the cache */ - /* search362_0_1 -> 293 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 132, 293 }, - 0, - } }, - /* search362_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_feq, - 0, 2, - { 1222, 827 }, - -1, - } }, - - /* replace362_0 -> 132 in the cache */ - /* replace362_1_0 -> 135 in the cache */ - /* replace362_1_1_0 -> 133 in the cache */ - /* replace362_1_1 -> 1210 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 135, 1210 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 132, 1224 }, - -1, - } }, - - /* ('~feq', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('feq', ('fneg', ('fadd', 'c', 'b')), 'a') */ - /* search363_0_0_0 -> 132 in the cache */ - /* search363_0_0_1 -> 293 in the cache */ - /* search363_0_0 -> 1222 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1222 }, - 0, - } }, - /* search363_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_feq, - 0, 2, - { 1226, 827 }, - -1, - } }, - - /* replace363_0_0_0 -> 135 in the cache */ - /* replace363_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 135, 133 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1228 }, - -1, - } }, - /* replace363_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1229, 132 }, - -1, - } }, - - /* ('~fneu', ('fadd(is_used_once)', 'a', '#b'), '#c') => ('fneu', 'a', ('fadd', 'c', ('fneg', 'b'))) */ - /* search364_0_0 -> 132 in the cache */ - /* search364_0_1 -> 293 in the cache */ - /* search364_0 -> 1222 in the cache */ - /* search364_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fneu, - 0, 2, - { 1222, 827 }, - -1, - } }, - - /* replace364_0 -> 132 in the cache */ - /* replace364_1_0 -> 135 in the cache */ - /* replace364_1_1_0 -> 133 in the cache */ - /* replace364_1_1 -> 1210 in the cache */ - /* replace364_1 -> 1224 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 132, 1224 }, - -1, - } }, - - /* ('~fneu', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', '#b')), '#c') => ('fneu', ('fneg', ('fadd', 'c', 'b')), 'a') */ - /* search365_0_0_0 -> 132 in the cache */ - /* search365_0_0_1 -> 293 in the cache */ - /* search365_0_0 -> 1222 in the cache */ - /* search365_0 -> 1226 in the cache */ - /* search365_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fneu, - 0, 2, - { 1226, 827 }, - -1, - } }, - - /* replace365_0_0_0 -> 135 in the cache */ - /* replace365_0_0_1 -> 133 in the cache */ - /* replace365_0_0 -> 1228 in the cache */ - /* replace365_0 -> 1229 in the cache */ - /* replace365_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1229, 132 }, - -1, - } }, - - /* ('ieq', ('iadd', 'a', 'b'), 'a') => ('ieq', 'b', 0) */ - /* search366_0_0 -> 0 in the cache */ - /* search366_0_1 -> 3 in the cache */ - /* search366_0 -> 219 in the cache */ - /* search366_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 219, 0 }, - -1, - } }, - - /* replace366_0 -> 3 in the cache */ - /* replace366_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 3, 86 }, - -1, - } }, - - /* ('ine', ('iadd', 'a', 'b'), 'a') => ('ine', 'b', 0) */ - /* search367_0_0 -> 0 in the cache */ - /* search367_0_1 -> 3 in the cache */ - /* search367_0 -> 219 in the cache */ - /* search367_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 219, 0 }, - -1, - } }, - - /* replace367_0 -> 3 in the cache */ - /* replace367_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 3, 86 }, - -1, - } }, - - /* ('feq', ('b2f', 'a@1'), 0.0) => ('inot', 'a') */ - /* search368_0_0 -> 770 in the cache */ - /* search368_0 -> 1142 in the cache */ - /* search368_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1142, 1141 }, - -1, - } }, - - /* replace368_0 -> 770 in the cache */ - /* replace368 -> 1144 in the cache */ - - /* ('fneu', ('b2f', 'a@1'), 0.0) => a */ - /* search369_0_0 -> 770 in the cache */ - /* search369_0 -> 1142 in the cache */ - /* search369_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1142, 1141 }, - -1, - } }, - - /* replace369 -> 770 in the cache */ - - /* ('ieq', ('b2i', 'a@1'), 0) => ('inot', 'a') */ - /* search370_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 770 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 0 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1241, 1242 }, - -1, - } }, - - /* replace370_0 -> 770 in the cache */ - /* replace370 -> 1144 in the cache */ - - /* ('ine', ('b2i', 'a@1'), 0) => a */ - /* search371_0_0 -> 770 in the cache */ - /* search371_0 -> 1241 in the cache */ - /* search371_1 -> 1242 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1241, 1242 }, - -1, - } }, - - /* replace371 -> 770 in the cache */ - - /* ('fneu', ('u2f', 'a'), 0.0) => ('ine', 'a', 0) */ - /* search372_0_0 -> 32 in the cache */ - /* search372_0 -> 112 in the cache */ - /* search372_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 112, 1141 }, - -1, - } }, - - /* replace372_0 -> 32 in the cache */ - /* replace372_1 -> 61 in the cache */ - /* replace372 -> 1123 in the cache */ - - /* ('feq', ('u2f', 'a'), 0.0) => ('ieq', 'a', 0) */ - /* search373_0_0 -> 32 in the cache */ - /* search373_0 -> 112 in the cache */ - /* search373_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 112, 1141 }, - -1, - } }, - - /* replace373_0 -> 32 in the cache */ - /* replace373_1 -> 61 in the cache */ - /* replace373 -> 1121 in the cache */ - - /* ('fge', ('u2f', 'a'), 0.0) => True */ - /* search374_0_0 -> 32 in the cache */ - /* search374_0 -> 112 in the cache */ - /* search374_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 112, 1141 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 1 }, - nir_type_bool, { NIR_TRUE /* True */ }, - } }, - - /* ('fge', 0.0, ('u2f', 'a')) => ('uge', 0, 'a') */ - /* search375_0 -> 1141 in the cache */ - /* search375_1_0 -> 32 in the cache */ - /* search375_1 -> 112 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1141, 112 }, - -1, - } }, - - /* replace375_0 -> 61 in the cache */ - /* replace375_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 61, 32 }, - -1, - } }, - - /* ('flt', ('u2f', 'a'), 0.0) => False */ - /* search376_0_0 -> 32 in the cache */ - /* search376_0 -> 112 in the cache */ - /* search376_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 112, 1141 }, - -1, - } }, - - /* replace376 -> 1090 in the cache */ - - /* ('flt', 0.0, ('u2f', 'a')) => ('ult', 0, 'a') */ - /* search377_0 -> 1141 in the cache */ - /* search377_1_0 -> 32 in the cache */ - /* search377_1 -> 112 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1141, 112 }, - -1, - } }, - - /* replace377_0 -> 61 in the cache */ - /* replace377_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 61, 32 }, - -1, - } }, - - /* ('fneu', ('i2f', 'a'), 0.0) => ('ine', 'a', 0) */ - /* search378_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_i2f, - -1, 0, - { 32 }, - -1, - } }, - /* search378_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1254, 1141 }, - -1, - } }, - - /* replace378_0 -> 32 in the cache */ - /* replace378_1 -> 61 in the cache */ - /* replace378 -> 1123 in the cache */ - - /* ('feq', ('i2f', 'a'), 0.0) => ('ieq', 'a', 0) */ - /* search379_0_0 -> 32 in the cache */ - /* search379_0 -> 1254 in the cache */ - /* search379_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1254, 1141 }, - -1, - } }, - - /* replace379_0 -> 32 in the cache */ - /* replace379_1 -> 61 in the cache */ - /* replace379 -> 1121 in the cache */ - - /* ('fge', ('i2f', 'a'), 0.0) => ('ige', 'a', 0) */ - /* search380_0_0 -> 32 in the cache */ - /* search380_0 -> 1254 in the cache */ - /* search380_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1254, 1141 }, - -1, - } }, - - /* replace380_0 -> 32 in the cache */ - /* replace380_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 32, 61 }, - -1, - } }, - - /* ('fge', 0.0, ('i2f', 'a')) => ('ige', 0, 'a') */ - /* search381_0 -> 1141 in the cache */ - /* search381_1_0 -> 32 in the cache */ - /* search381_1 -> 1254 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1141, 1254 }, - -1, - } }, - - /* replace381_0 -> 61 in the cache */ - /* replace381_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 61, 32 }, - -1, - } }, - - /* ('flt', ('i2f', 'a'), 0.0) => ('ilt', 'a', 0) */ - /* search382_0_0 -> 32 in the cache */ - /* search382_0 -> 1254 in the cache */ - /* search382_1 -> 1141 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1254, 1141 }, - -1, - } }, - - /* replace382_0 -> 32 in the cache */ - /* replace382_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 32, 61 }, - -1, - } }, - - /* ('flt', 0.0, ('i2f', 'a')) => ('ilt', 0, 'a') */ - /* search383_0 -> 1141 in the cache */ - /* search383_1_0 -> 32 in the cache */ - /* search383_1 -> 1254 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1141, 1254 }, - -1, - } }, - - /* replace383_0 -> 61 in the cache */ - /* replace383_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 61, 32 }, - -1, - } }, - - /* ('~flt', 0.0, ('fabs', 'a')) => ('fneu', 'a', 0.0) */ - /* search384_0 -> 117 in the cache */ - /* search384_1_0 -> 32 in the cache */ - /* search384_1 -> 99 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_flt, - -1, 0, - { 117, 99 }, - -1, - } }, - - /* replace384_0 -> 32 in the cache */ - /* replace384_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 32, 117 }, - -1, - } }, - - /* ('~flt', ('fneg', ('fabs', 'a')), 0.0) => ('fneu', 'a', 0.0) */ - /* search385_0_0_0 -> 32 in the cache */ - /* search385_0_0 -> 99 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 99 }, - -1, - } }, - /* search385_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_flt, - -1, 0, - { 1267, 117 }, - -1, - } }, - - /* replace385_0 -> 32 in the cache */ - /* replace385_1 -> 117 in the cache */ - /* replace385 -> 1266 in the cache */ - - /* ('fge', 0.0, ('fabs', 'a')) => ('feq', 'a', 0.0) */ - /* search386_0 -> 117 in the cache */ - /* search386_1_0 -> 32 in the cache */ - /* search386_1 -> 99 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 117, 99 }, - -1, - } }, - - /* replace386_0 -> 32 in the cache */ - /* replace386_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 32, 117 }, - -1, - } }, - - /* ('fge', ('fneg', ('fabs', 'a')), 0.0) => ('feq', 'a', 0.0) */ - /* search387_0_0_0 -> 32 in the cache */ - /* search387_0_0 -> 99 in the cache */ - /* search387_0 -> 1267 in the cache */ - /* search387_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1267, 117 }, - -1, - } }, - - /* replace387_0 -> 32 in the cache */ - /* replace387_1 -> 117 in the cache */ - /* replace387 -> 1270 in the cache */ - - /* ('iand', ('fge', 'a', 0.0), ('fge', 1.0, 'a')) => ('feq', 'a', ('fsat', 'a')) */ - /* search388_0_0 -> 32 in the cache */ - /* search388_0_1 -> 117 in the cache */ - /* search388_0 -> 1187 in the cache */ - /* search388_1_0 -> 252 in the cache */ - /* search388_1_1 -> 32 in the cache */ - /* search388_1 -> 1113 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1187, 1113 }, - -1, - } }, - - /* replace388_0 -> 32 in the cache */ - /* replace388_1_0 -> 32 in the cache */ - /* replace388_1 -> 228 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 32, 228 }, - -1, - } }, - - /* ('fmax', ('b2f(is_used_once)', 'a@1'), ('b2f', 'b@1')) => ('b2f', ('ior', 'a', 'b')) */ - /* search389_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 770 }, - 0, - } }, - /* search389_1_0 -> 1147 in the cache */ - /* search389_1 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 1274, 1148 }, - -1, - } }, - - /* replace389_0_0 -> 770 in the cache */ - /* replace389_0_1 -> 1147 in the cache */ - /* replace389_0 -> 1151 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 1, - { 1151 }, - -1, - } }, - - /* ('fmax', ('fneg(is_used_once)', ('b2f(is_used_once)', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('fneg', ('b2f', ('iand', 'a', 'b'))) */ - /* search390_0_0_0 -> 770 in the cache */ - /* search390_0_0 -> 1274 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1274 }, - 0, - } }, - /* search390_1_0_0 -> 1147 in the cache */ - /* search390_1_0 -> 1148 in the cache */ - /* search390_1 -> 1155 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 1277, 1155 }, - -1, - } }, - - /* replace390_0_0_0 -> 770 in the cache */ - /* replace390_0_0_1 -> 1147 in the cache */ - /* replace390_0_0 -> 1159 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 1, - { 1159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1279 }, - -1, - } }, - - /* ('fmin', ('b2f(is_used_once)', 'a@1'), ('b2f', 'b@1')) => ('b2f', ('iand', 'a', 'b')) */ - /* search391_0_0 -> 770 in the cache */ - /* search391_0 -> 1274 in the cache */ - /* search391_1_0 -> 1147 in the cache */ - /* search391_1 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 1274, 1148 }, - -1, - } }, - - /* replace391_0_0 -> 770 in the cache */ - /* replace391_0_1 -> 1147 in the cache */ - /* replace391_0 -> 1159 in the cache */ - /* replace391 -> 1279 in the cache */ - - /* ('fmin', ('fneg(is_used_once)', ('b2f(is_used_once)', 'a@1')), ('fneg', ('b2f', 'b@1'))) => ('fneg', ('b2f', ('ior', 'a', 'b'))) */ - /* search392_0_0_0 -> 770 in the cache */ - /* search392_0_0 -> 1274 in the cache */ - /* search392_0 -> 1277 in the cache */ - /* search392_1_0_0 -> 1147 in the cache */ - /* search392_1_0 -> 1148 in the cache */ - /* search392_1 -> 1155 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 1277, 1155 }, - -1, - } }, - - /* replace392_0_0_0 -> 770 in the cache */ - /* replace392_0_0_1 -> 1147 in the cache */ - /* replace392_0_0 -> 1151 in the cache */ - /* replace392_0 -> 1276 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1276 }, - -1, - } }, - - /* ('fmin', ('b2f', 'a@1'), '#b') => ('bcsel', 'a', ('fmin', 'b', 1.0), ('fmin', 'b', 0.0)) */ - /* search393_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 770 }, - -1, - } }, - /* search393_1 -> 834 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 1284, 834 }, - -1, - } }, - - /* replace393_0 -> 770 in the cache */ - /* replace393_1_0 -> 3 in the cache */ - /* replace393_1_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 3, 280 }, - -1, - } }, - /* replace393_2_0 -> 3 in the cache */ - /* replace393_2_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 3, 266 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 1286, 1287 }, - -1, - } }, - - /* ('flt', ('fadd(is_used_once)', 'a', ('fneg', 'b')), 0.0) => ('flt', 'a', 'b') */ - /* search394_0_0 -> 0 in the cache */ - /* search394_0_1_0 -> 3 in the cache */ - /* search394_0_1 -> 1100 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 0, 1100 }, - 0, - } }, - /* search394_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1289, 266 }, - -1, - } }, - - /* replace394_0 -> 0 in the cache */ - /* replace394_1 -> 3 in the cache */ - /* replace394 -> 1062 in the cache */ - - /* ('fge', ('fneg', ('fabs', 'a')), 0.0) => ('feq', 'a', 0.0) */ - /* search395_0_0_0 -> 32 in the cache */ - /* search395_0_0 -> 99 in the cache */ - /* search395_0 -> 1267 in the cache */ - /* search395_1 -> 117 in the cache */ - /* search395 -> 1271 in the cache */ - - /* replace395_0 -> 32 in the cache */ - /* replace395_1 -> 117 in the cache */ - /* replace395 -> 1270 in the cache */ - - /* ('~bcsel', ('flt', 'b', 'a'), 'b', 'a') => ('fmin', 'a', 'b') */ - /* search396_0_0 -> 1130 in the cache */ - /* search396_0_1 -> 1127 in the cache */ - /* search396_0 -> 1131 in the cache */ - /* search396_1 -> 1130 in the cache */ - /* search396_2 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_bcsel, - -1, 0, - { 1131, 1130, 1127 }, - -1, - } }, - - /* replace396_0 -> 1127 in the cache */ - /* replace396_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 1127, 1130 }, - -1, - } }, - - /* ('~bcsel', ('flt', 'a', 'b'), 'b', 'a') => ('fmax', 'a', 'b') */ - /* search397_0_0 -> 0 in the cache */ - /* search397_0_1 -> 3 in the cache */ - /* search397_0 -> 1062 in the cache */ - /* search397_1 -> 3 in the cache */ - /* search397_2 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_bcsel, - -1, 0, - { 1062, 3, 0 }, - -1, - } }, - - /* replace397_0 -> 0 in the cache */ - /* replace397_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('~bcsel', ('fge', 'a', 'b'), 'b', 'a') => ('fmin', 'a', 'b') */ - /* search398_0_0 -> 0 in the cache */ - /* search398_0_1 -> 3 in the cache */ - /* search398_0 -> 1059 in the cache */ - /* search398_1 -> 3 in the cache */ - /* search398_2 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_bcsel, - -1, 0, - { 1059, 3, 0 }, - -1, - } }, - - /* replace398_0 -> 0 in the cache */ - /* replace398_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('~bcsel', ('fge', 'b', 'a'), 'b', 'a') => ('fmax', 'a', 'b') */ - /* search399_0_0 -> 1130 in the cache */ - /* search399_0_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1130, 1127 }, - -1, - } }, - /* search399_1 -> 1130 in the cache */ - /* search399_2 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_bcsel, - -1, 0, - { 1297, 1130, 1127 }, - -1, - } }, - - /* replace399_0 -> 1127 in the cache */ - /* replace399_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 1127, 1130 }, - -1, - } }, - - /* ('bcsel', ('ult', 'b', 'a'), 'b', 'a') => ('umin', 'a', 'b') */ - /* search400_0_0 -> 1130 in the cache */ - /* search400_0_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 1130, 1127 }, - -1, - } }, - /* search400_1 -> 1130 in the cache */ - /* search400_2 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1300, 1130, 1127 }, - -1, - } }, - - /* replace400_0 -> 1127 in the cache */ - /* replace400_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 1127, 1130 }, - -1, - } }, - - /* ('bcsel', ('ult', 'a', 'b'), 'b', 'a') => ('umax', 'a', 'b') */ - /* search401_0_0 -> 0 in the cache */ - /* search401_0_1 -> 3 in the cache */ - /* search401_0 -> 1080 in the cache */ - /* search401_1 -> 3 in the cache */ - /* search401_2 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1080, 3, 0 }, - -1, - } }, - - /* replace401_0 -> 0 in the cache */ - /* replace401_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('bcsel', ('uge', 'a', 'b'), 'b', 'a') => ('umin', 'a', 'b') */ - /* search402_0_0 -> 0 in the cache */ - /* search402_0_1 -> 3 in the cache */ - /* search402_0 -> 1074 in the cache */ - /* search402_1 -> 3 in the cache */ - /* search402_2 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1074, 3, 0 }, - -1, - } }, - - /* replace402_0 -> 0 in the cache */ - /* replace402_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('bcsel', ('uge', 'b', 'a'), 'b', 'a') => ('umax', 'a', 'b') */ - /* search403_0_0 -> 1130 in the cache */ - /* search403_0_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 1130, 1127 }, - -1, - } }, - /* search403_1 -> 1130 in the cache */ - /* search403_2 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1307, 1130, 1127 }, - -1, - } }, - - /* replace403_0 -> 1127 in the cache */ - /* replace403_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 1127, 1130 }, - -1, - } }, - - /* ('bcsel', ('ilt', 'b', 'a'), 'b', 'a') => ('imin', 'a', 'b') */ - /* search404_0_0 -> 1130 in the cache */ - /* search404_0_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 1130, 1127 }, - -1, - } }, - /* search404_1 -> 1130 in the cache */ - /* search404_2 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1310, 1130, 1127 }, - -1, - } }, - - /* replace404_0 -> 1127 in the cache */ - /* replace404_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 1127, 1130 }, - -1, - } }, - - /* ('bcsel', ('ilt', 'a', 'b'), 'b', 'a') => ('imax', 'a', 'b') */ - /* search405_0_0 -> 0 in the cache */ - /* search405_0_1 -> 3 in the cache */ - /* search405_0 -> 1077 in the cache */ - /* search405_1 -> 3 in the cache */ - /* search405_2 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1077, 3, 0 }, - -1, - } }, - - /* replace405_0 -> 0 in the cache */ - /* replace405_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('bcsel', ('ige', 'a', 'b'), 'b', 'a') => ('imin', 'a', 'b') */ - /* search406_0_0 -> 0 in the cache */ - /* search406_0_1 -> 3 in the cache */ - /* search406_0 -> 1071 in the cache */ - /* search406_1 -> 3 in the cache */ - /* search406_2 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1071, 3, 0 }, - -1, - } }, - - /* replace406_0 -> 0 in the cache */ - /* replace406_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('bcsel', ('ige', 'b', 'a'), 'b', 'a') => ('imax', 'a', 'b') */ - /* search407_0_0 -> 1130 in the cache */ - /* search407_0_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 1130, 1127 }, - -1, - } }, - /* search407_1 -> 1130 in the cache */ - /* search407_2 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1317, 1130, 1127 }, - -1, - } }, - - /* replace407_0 -> 1127 in the cache */ - /* replace407_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 1127, 1130 }, - -1, - } }, - - /* ('bcsel', ('inot', 'a'), 'b', 'c') => ('bcsel', 'a', 'c', 'b') */ - /* search408_0_0 -> 770 in the cache */ - /* search408_0 -> 1144 in the cache */ - /* search408_1 -> 133 in the cache */ - /* search408_2 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1144, 133, 135 }, - -1, - } }, - - /* replace408_0 -> 770 in the cache */ - /* replace408_1 -> 135 in the cache */ - /* replace408_2 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 135, 133 }, - -1, - } }, - - /* ('bcsel', 'a', ('bcsel', 'a', 'b', 'c'), 'd') => ('bcsel', 'a', 'b', 'd') */ - /* search409_0 -> 770 in the cache */ - /* search409_1_0 -> 770 in the cache */ - /* search409_1_1 -> 156 in the cache */ - /* search409_1_2 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 156, 158 }, - -1, - } }, - /* search409_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1322, 159 }, - -1, - } }, - - /* replace409_0 -> 770 in the cache */ - /* replace409_1 -> 156 in the cache */ - /* replace409_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 156, 159 }, - -1, - } }, - - /* ('bcsel', 'a', 'b', ('bcsel', 'a', 'c', 'd')) => ('bcsel', 'a', 'b', 'd') */ - /* search410_0 -> 770 in the cache */ - /* search410_1 -> 156 in the cache */ - /* search410_2_0 -> 770 in the cache */ - /* search410_2_1 -> 158 in the cache */ - /* search410_2_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 156, 1325 }, - -1, - } }, - - /* replace410_0 -> 770 in the cache */ - /* replace410_1 -> 156 in the cache */ - /* replace410_2 -> 159 in the cache */ - /* replace410 -> 1324 in the cache */ - - /* ('bcsel', 'a', ('bcsel', 'b', 'c', 'd'), ('bcsel(is_used_once)', 'b', 'c', 'e')) => ('bcsel', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search411_0 -> 770 in the cache */ - /* search411_1_0 -> 1147 in the cache */ - /* search411_1_1 -> 763 in the cache */ - /* search411_1_2 -> 772 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 763, 772 }, - -1, - } }, - /* search411_2_0 -> 1147 in the cache */ - /* search411_2_1 -> 763 in the cache */ - /* search411_2_2 -> 774 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 763, 774 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1327, 1328 }, - -1, - } }, - - /* replace411_0 -> 1147 in the cache */ - /* replace411_1 -> 763 in the cache */ - /* replace411_2_0 -> 770 in the cache */ - /* replace411_2_1 -> 772 in the cache */ - /* replace411_2_2 -> 774 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 772, 774 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 763, 1330 }, - -1, - } }, - - /* ('bcsel', 'a', ('bcsel(is_used_once)', 'b', 'c', 'd'), ('bcsel', 'b', 'c', 'e')) => ('bcsel', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search412_0 -> 770 in the cache */ - /* search412_1_0 -> 1147 in the cache */ - /* search412_1_1 -> 763 in the cache */ - /* search412_1_2 -> 772 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 763, 772 }, - 0, - } }, - /* search412_2_0 -> 1147 in the cache */ - /* search412_2_1 -> 763 in the cache */ - /* search412_2_2 -> 774 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 763, 774 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1332, 1333 }, - -1, - } }, - - /* replace412_0 -> 1147 in the cache */ - /* replace412_1 -> 763 in the cache */ - /* replace412_2_0 -> 770 in the cache */ - /* replace412_2_1 -> 772 in the cache */ - /* replace412_2_2 -> 774 in the cache */ - /* replace412_2 -> 1330 in the cache */ - /* replace412 -> 1331 in the cache */ - - /* ('bcsel', 'a', ('bcsel', 'b', 'c', 'd'), ('bcsel(is_used_once)', 'b', 'e', 'd')) => ('bcsel', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search413_0 -> 770 in the cache */ - /* search413_1_0 -> 1147 in the cache */ - /* search413_1_1 -> 158 in the cache */ - /* search413_1_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 158, 159 }, - -1, - } }, - /* search413_2_0 -> 1147 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 4, /* e */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search413_2_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 1336, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1335, 1337 }, - -1, - } }, - - /* replace413_0 -> 1147 in the cache */ - /* replace413_1_0 -> 770 in the cache */ - /* replace413_1_1 -> 158 in the cache */ - /* replace413_1_2 -> 1336 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 158, 1336 }, - -1, - } }, - /* replace413_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 1339, 159 }, - -1, - } }, - - /* ('bcsel', 'a', ('bcsel(is_used_once)', 'b', 'c', 'd'), ('bcsel', 'b', 'e', 'd')) => ('bcsel', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search414_0 -> 770 in the cache */ - /* search414_1_0 -> 1147 in the cache */ - /* search414_1_1 -> 158 in the cache */ - /* search414_1_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 158, 159 }, - 0, - } }, - /* search414_2_0 -> 1147 in the cache */ - /* search414_2_1 -> 1336 in the cache */ - /* search414_2_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1147, 1336, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1341, 1342 }, - -1, - } }, - - /* replace414_0 -> 1147 in the cache */ - /* replace414_1_0 -> 770 in the cache */ - /* replace414_1_1 -> 158 in the cache */ - /* replace414_1_2 -> 1336 in the cache */ - /* replace414_1 -> 1339 in the cache */ - /* replace414_2 -> 159 in the cache */ - /* replace414 -> 1340 in the cache */ - - /* ('bcsel', 'a', True, 'b') => ('ior', 'a', 'b') */ - /* search415_0 -> 770 in the cache */ - /* search415_1 -> 1248 in the cache */ - /* search415_2 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1248, 1147 }, - -1, - } }, - - /* replace415_0 -> 770 in the cache */ - /* replace415_1 -> 1147 in the cache */ - /* replace415 -> 1151 in the cache */ - - /* ('bcsel', 'a', 'a', 'b') => ('ior', 'a', 'b') */ - /* search416_0 -> 770 in the cache */ - /* search416_1 -> 770 in the cache */ - /* search416_2 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 770, 1147 }, - -1, - } }, - - /* replace416_0 -> 770 in the cache */ - /* replace416_1 -> 1147 in the cache */ - /* replace416 -> 1151 in the cache */ - - /* ('bcsel', 'a', 'b', False) => ('iand', 'a', 'b') */ - /* search417_0 -> 770 in the cache */ - /* search417_1 -> 1147 in the cache */ - /* search417_2 -> 1090 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1147, 1090 }, - -1, - } }, - - /* replace417_0 -> 770 in the cache */ - /* replace417_1 -> 1147 in the cache */ - /* replace417 -> 1159 in the cache */ - - /* ('bcsel', 'a', 'b', 'a') => ('iand', 'a', 'b') */ - /* search418_0 -> 770 in the cache */ - /* search418_1 -> 1147 in the cache */ - /* search418_2 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1147, 770 }, - -1, - } }, - - /* replace418_0 -> 770 in the cache */ - /* replace418_1 -> 1147 in the cache */ - /* replace418 -> 1159 in the cache */ - - /* ('~fmin', 'a', 'a') => a */ - /* search419_0 -> 32 in the cache */ - /* search419_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmin, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace419 -> 32 in the cache */ - - /* ('~fmax', 'a', 'a') => a */ - /* search420_0 -> 32 in the cache */ - /* search420_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmax, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace420 -> 32 in the cache */ - - /* ('imin', 'a', 'a') => a */ - /* search421_0 -> 32 in the cache */ - /* search421_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace421 -> 32 in the cache */ - - /* ('imax', 'a', 'a') => a */ - /* search422_0 -> 32 in the cache */ - /* search422_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace422 -> 32 in the cache */ - - /* ('umin', 'a', 'a') => a */ - /* search423_0 -> 32 in the cache */ - /* search423_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umin, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace423 -> 32 in the cache */ - - /* ('umin', 'a', 0) => 0 */ - /* search424_0 -> 32 in the cache */ - /* search424_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace424 -> 61 in the cache */ - - /* ('umin', 'a', -1) => a */ - /* search425_0 -> 32 in the cache */ - /* search425_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 32, 63 }, - -1, - } }, - - /* replace425 -> 32 in the cache */ - - /* ('umax', 'a', 'a') => a */ - /* search426_0 -> 32 in the cache */ - /* search426_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umax, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace426 -> 32 in the cache */ - - /* ('umax', 'a', 0) => a */ - /* search427_0 -> 32 in the cache */ - /* search427_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace427 -> 32 in the cache */ - - /* ('umax', 'a', -1) => -1 */ - /* search428_0 -> 32 in the cache */ - /* search428_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 32, 63 }, - -1, - } }, - - /* replace428 -> 63 in the cache */ - - /* ('fmax', ('fmax', 'a', 'b'), 'b') => ('fmax', 'a', 'b') */ - /* search429_0_0 -> 0 in the cache */ - /* search429_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search429_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 2, - { 1358, 3 }, - -1, - } }, - - /* replace429_0 -> 0 in the cache */ - /* replace429_1 -> 3 in the cache */ - /* replace429 -> 1294 in the cache */ - - /* ('umax', ('umax', 'a', 'b'), 'b') => ('umax', 'a', 'b') */ - /* search430_0_0 -> 0 in the cache */ - /* search430_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search430_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umax, - 0, 2, - { 1360, 3 }, - -1, - } }, - - /* replace430_0 -> 0 in the cache */ - /* replace430_1 -> 3 in the cache */ - /* replace430 -> 1304 in the cache */ - - /* ('imax', ('imax', 'a', 'b'), 'b') => ('imax', 'a', 'b') */ - /* search431_0_0 -> 0 in the cache */ - /* search431_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search431_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imax, - 0, 2, - { 1362, 3 }, - -1, - } }, - - /* replace431_0 -> 0 in the cache */ - /* replace431_1 -> 3 in the cache */ - /* replace431 -> 1314 in the cache */ - - /* ('fmin', ('fmin', 'a', 'b'), 'b') => ('fmin', 'a', 'b') */ - /* search432_0_0 -> 0 in the cache */ - /* search432_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search432_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 1364, 3 }, - -1, - } }, - - /* replace432_0 -> 0 in the cache */ - /* replace432_1 -> 3 in the cache */ - /* replace432 -> 1296 in the cache */ - - /* ('umin', ('umin', 'a', 'b'), 'b') => ('umin', 'a', 'b') */ - /* search433_0_0 -> 0 in the cache */ - /* search433_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search433_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 0, 2, - { 1366, 3 }, - -1, - } }, - - /* replace433_0 -> 0 in the cache */ - /* replace433_1 -> 3 in the cache */ - /* replace433 -> 1306 in the cache */ - - /* ('imin', ('imin', 'a', 'b'), 'b') => ('imin', 'a', 'b') */ - /* search434_0_0 -> 0 in the cache */ - /* search434_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imin, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search434_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imin, - 0, 2, - { 1368, 3 }, - -1, - } }, - - /* replace434_0 -> 0 in the cache */ - /* replace434_1 -> 3 in the cache */ - /* replace434 -> 1316 in the cache */ - - /* ('fmax', ('fmax', ('fmax', 'a', 'b'), 'c'), 'a') => ('fmax', ('fmax', 'a', 'b'), 'c') */ - /* search435_0_0_0 -> 132 in the cache */ - /* search435_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 2, 1, - { 132, 133 }, - -1, - } }, - /* search435_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 1, 2, - { 1370, 135 }, - -1, - } }, - /* search435_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 0, 3, - { 1371, 132 }, - -1, - } }, - - /* replace435_0_0 -> 132 in the cache */ - /* replace435_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 132, 133 }, - -1, - } }, - /* replace435_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 0, 2, - { 1373, 135 }, - -1, - } }, - - /* ('umax', ('umax', ('umax', 'a', 'b'), 'c'), 'a') => ('umax', ('umax', 'a', 'b'), 'c') */ - /* search436_0_0_0 -> 132 in the cache */ - /* search436_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 2, 1, - { 132, 133 }, - -1, - } }, - /* search436_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 1, 2, - { 1375, 135 }, - -1, - } }, - /* search436_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 0, 3, - { 1376, 132 }, - -1, - } }, - - /* replace436_0_0 -> 132 in the cache */ - /* replace436_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 132, 133 }, - -1, - } }, - /* replace436_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 0, 2, - { 1378, 135 }, - -1, - } }, - - /* ('imax', ('imax', ('imax', 'a', 'b'), 'c'), 'a') => ('imax', ('imax', 'a', 'b'), 'c') */ - /* search437_0_0_0 -> 132 in the cache */ - /* search437_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 2, 1, - { 132, 133 }, - -1, - } }, - /* search437_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 1, 2, - { 1380, 135 }, - -1, - } }, - /* search437_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 0, 3, - { 1381, 132 }, - -1, - } }, - - /* replace437_0_0 -> 132 in the cache */ - /* replace437_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 132, 133 }, - -1, - } }, - /* replace437_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 0, 2, - { 1383, 135 }, - -1, - } }, - - /* ('fmin', ('fmin', ('fmin', 'a', 'b'), 'c'), 'a') => ('fmin', ('fmin', 'a', 'b'), 'c') */ - /* search438_0_0_0 -> 132 in the cache */ - /* search438_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 2, 1, - { 132, 133 }, - -1, - } }, - /* search438_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 1, 2, - { 1385, 135 }, - -1, - } }, - /* search438_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 0, 3, - { 1386, 132 }, - -1, - } }, - - /* replace438_0_0 -> 132 in the cache */ - /* replace438_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 132, 133 }, - -1, - } }, - /* replace438_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 1388, 135 }, - -1, - } }, - - /* ('umin', ('umin', ('umin', 'a', 'b'), 'c'), 'a') => ('umin', ('umin', 'a', 'b'), 'c') */ - /* search439_0_0_0 -> 132 in the cache */ - /* search439_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 2, 1, - { 132, 133 }, - -1, - } }, - /* search439_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 1, 2, - { 1390, 135 }, - -1, - } }, - /* search439_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 3, - { 1391, 132 }, - -1, - } }, - - /* replace439_0_0 -> 132 in the cache */ - /* replace439_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 132, 133 }, - -1, - } }, - /* replace439_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 2, - { 1393, 135 }, - -1, - } }, - - /* ('imin', ('imin', ('imin', 'a', 'b'), 'c'), 'a') => ('imin', ('imin', 'a', 'b'), 'c') */ - /* search440_0_0_0 -> 132 in the cache */ - /* search440_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 2, 1, - { 132, 133 }, - -1, - } }, - /* search440_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 1, 2, - { 1395, 135 }, - -1, - } }, - /* search440_1 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 0, 3, - { 1396, 132 }, - -1, - } }, - - /* replace440_0_0 -> 132 in the cache */ - /* replace440_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 1, 1, - { 132, 133 }, - -1, - } }, - /* replace440_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 0, 2, - { 1398, 135 }, - -1, - } }, - - /* ('ieq', ('b2i8', 'a@1'), ('b2i8', 'b@1')) => ('ieq', 'a', 'b') */ - /* search441_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_b2i8, - -1, 0, - { 770 }, - -1, - } }, - /* search441_1_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_b2i8, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1400, 1401 }, - -1, - } }, - - /* replace441_0 -> 770 in the cache */ - /* replace441_1 -> 1147 in the cache */ - /* replace441 -> 1175 in the cache */ - - /* ('ine', ('b2i8', 'a@1'), ('b2i8', 'b@1')) => ('ine', 'a', 'b') */ - /* search442_0_0 -> 770 in the cache */ - /* search442_0 -> 1400 in the cache */ - /* search442_1_0 -> 1147 in the cache */ - /* search442_1 -> 1401 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1400, 1401 }, - -1, - } }, - - /* replace442_0 -> 770 in the cache */ - /* replace442_1 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 770, 1147 }, - -1, - } }, - - /* ('ieq', ('b2i16', 'a@1'), ('b2i16', 'b@1')) => ('ieq', 'a', 'b') */ - /* search443_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2i16, - -1, 0, - { 770 }, - -1, - } }, - /* search443_1_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2i16, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1405, 1406 }, - -1, - } }, - - /* replace443_0 -> 770 in the cache */ - /* replace443_1 -> 1147 in the cache */ - /* replace443 -> 1175 in the cache */ - - /* ('ine', ('b2i16', 'a@1'), ('b2i16', 'b@1')) => ('ine', 'a', 'b') */ - /* search444_0_0 -> 770 in the cache */ - /* search444_0 -> 1405 in the cache */ - /* search444_1_0 -> 1147 in the cache */ - /* search444_1 -> 1406 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1405, 1406 }, - -1, - } }, - - /* replace444_0 -> 770 in the cache */ - /* replace444_1 -> 1147 in the cache */ - /* replace444 -> 1404 in the cache */ - - /* ('ieq', ('b2i32', 'a@1'), ('b2i32', 'b@1')) => ('ieq', 'a', 'b') */ - /* search445_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 770 }, - -1, - } }, - /* search445_1_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1409, 1410 }, - -1, - } }, - - /* replace445_0 -> 770 in the cache */ - /* replace445_1 -> 1147 in the cache */ - /* replace445 -> 1175 in the cache */ - - /* ('ine', ('b2i32', 'a@1'), ('b2i32', 'b@1')) => ('ine', 'a', 'b') */ - /* search446_0_0 -> 770 in the cache */ - /* search446_0 -> 1409 in the cache */ - /* search446_1_0 -> 1147 in the cache */ - /* search446_1 -> 1410 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1409, 1410 }, - -1, - } }, - - /* replace446_0 -> 770 in the cache */ - /* replace446_1 -> 1147 in the cache */ - /* replace446 -> 1404 in the cache */ - - /* ('ieq', ('b2i64', 'a@1'), ('b2i64', 'b@1')) => ('ieq', 'a', 'b') */ - /* search447_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2i64, - -1, 0, - { 770 }, - -1, - } }, - /* search447_1_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2i64, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1413, 1414 }, - -1, - } }, - - /* replace447_0 -> 770 in the cache */ - /* replace447_1 -> 1147 in the cache */ - /* replace447 -> 1175 in the cache */ - - /* ('ine', ('b2i64', 'a@1'), ('b2i64', 'b@1')) => ('ine', 'a', 'b') */ - /* search448_0_0 -> 770 in the cache */ - /* search448_0 -> 1413 in the cache */ - /* search448_1_0 -> 1147 in the cache */ - /* search448_1 -> 1414 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1413, 1414 }, - -1, - } }, - - /* replace448_0 -> 770 in the cache */ - /* replace448_1 -> 1147 in the cache */ - /* replace448 -> 1404 in the cache */ - - /* ('feq', ('b2f16', 'a@1'), ('b2f16', 'b@1')) => ('ieq', 'a', 'b') */ - /* search449_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2f16, - -1, 0, - { 770 }, - -1, - } }, - /* search449_1_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2f16, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1417, 1418 }, - -1, - } }, - - /* replace449_0 -> 770 in the cache */ - /* replace449_1 -> 1147 in the cache */ - /* replace449 -> 1175 in the cache */ - - /* ('fneu', ('b2f16', 'a@1'), ('b2f16', 'b@1')) => ('ine', 'a', 'b') */ - /* search450_0_0 -> 770 in the cache */ - /* search450_0 -> 1417 in the cache */ - /* search450_1_0 -> 1147 in the cache */ - /* search450_1 -> 1418 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1417, 1418 }, - -1, - } }, - - /* replace450_0 -> 770 in the cache */ - /* replace450_1 -> 1147 in the cache */ - /* replace450 -> 1404 in the cache */ - - /* ('feq', ('b2f32', 'a@1'), ('b2f32', 'b@1')) => ('ieq', 'a', 'b') */ - /* search451_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2f32, - -1, 0, - { 770 }, - -1, - } }, - /* search451_1_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2f32, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1421, 1422 }, - -1, - } }, - - /* replace451_0 -> 770 in the cache */ - /* replace451_1 -> 1147 in the cache */ - /* replace451 -> 1175 in the cache */ - - /* ('fneu', ('b2f32', 'a@1'), ('b2f32', 'b@1')) => ('ine', 'a', 'b') */ - /* search452_0_0 -> 770 in the cache */ - /* search452_0 -> 1421 in the cache */ - /* search452_1_0 -> 1147 in the cache */ - /* search452_1 -> 1422 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1421, 1422 }, - -1, - } }, - - /* replace452_0 -> 770 in the cache */ - /* replace452_1 -> 1147 in the cache */ - /* replace452 -> 1404 in the cache */ - - /* ('feq', ('b2f64', 'a@1'), ('b2f64', 'b@1')) => ('ieq', 'a', 'b') */ - /* search453_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2f64, - -1, 0, - { 770 }, - -1, - } }, - /* search453_1_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2f64, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1425, 1426 }, - -1, - } }, - - /* replace453_0 -> 770 in the cache */ - /* replace453_1 -> 1147 in the cache */ - /* replace453 -> 1175 in the cache */ - - /* ('fneu', ('b2f64', 'a@1'), ('b2f64', 'b@1')) => ('ine', 'a', 'b') */ - /* search454_0_0 -> 770 in the cache */ - /* search454_0 -> 1425 in the cache */ - /* search454_1_0 -> 1147 in the cache */ - /* search454_1 -> 1426 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1425, 1426 }, - -1, - } }, - - /* replace454_0 -> 770 in the cache */ - /* replace454_1 -> 1147 in the cache */ - /* replace454 -> 1404 in the cache */ - - /* ('iand@8', 'a', ('inot', ('ishr', 'a', 7))) => ('imax', 'a', 0) */ - /* search455_0 -> 6 in the cache */ - /* search455_1_0_0 -> 6 in the cache */ - /* search455_1_0_1 -> 9 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 6, 9 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1429 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 6, 1430 }, - -1, - } }, - - /* replace455_0 -> 6 in the cache */ - /* replace455_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 6, 848 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@8', 128), 0) => ('ige', 'a', 0) */ - /* search456_0_0 -> 6 in the cache */ - /* search456_0_1 -> 7 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 6, 7 }, - -1, - } }, - /* search456_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1433, 848 }, - -1, - } }, - - /* replace456_0 -> 6 in the cache */ - /* replace456_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 6, 848 }, - -1, - } }, - - /* ('ine', ('iand', 'a@8', 128), 128) => ('ige', 'a', 0) */ - /* search457_0_0 -> 6 in the cache */ - /* search457_0_1 -> 7 in the cache */ - /* search457_0 -> 1433 in the cache */ - /* search457_1 -> 7 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1433, 7 }, - -1, - } }, - - /* replace457_0 -> 6 in the cache */ - /* replace457_1 -> 848 in the cache */ - /* replace457 -> 1435 in the cache */ - - /* ('ine', ('iand', 'a@8', 128), 0) => ('ilt', 'a', 0) */ - /* search458_0_0 -> 6 in the cache */ - /* search458_0_1 -> 7 in the cache */ - /* search458_0 -> 1433 in the cache */ - /* search458_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1433, 848 }, - -1, - } }, - - /* replace458_0 -> 6 in the cache */ - /* replace458_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 6, 848 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@8', 128), 128) => ('ilt', 'a', 0) */ - /* search459_0_0 -> 6 in the cache */ - /* search459_0_1 -> 7 in the cache */ - /* search459_0 -> 1433 in the cache */ - /* search459_1 -> 7 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1433, 7 }, - -1, - } }, - - /* replace459_0 -> 6 in the cache */ - /* replace459_1 -> 848 in the cache */ - /* replace459 -> 1438 in the cache */ - - /* ('ine', ('ushr', 'a@8', 7), 0) => ('ilt', 'a', 0) */ - /* search460_0_0 -> 6 in the cache */ - /* search460_0_1 -> 9 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 6, 9 }, - -1, - } }, - /* search460_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1440, 848 }, - -1, - } }, - - /* replace460_0 -> 6 in the cache */ - /* replace460_1 -> 848 in the cache */ - /* replace460 -> 1438 in the cache */ - - /* ('ieq', ('ushr', 'a@8', 7), 0) => ('ige', 'a', 0) */ - /* search461_0_0 -> 6 in the cache */ - /* search461_0_1 -> 9 in the cache */ - /* search461_0 -> 1440 in the cache */ - /* search461_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1440, 848 }, - -1, - } }, - - /* replace461_0 -> 6 in the cache */ - /* replace461_1 -> 848 in the cache */ - /* replace461 -> 1435 in the cache */ - - /* ('ieq', ('ushr', 'a@8', 7), 1) => ('ilt', 'a', 0) */ - /* search462_0_0 -> 6 in the cache */ - /* search462_0_1 -> 9 in the cache */ - /* search462_0 -> 1440 in the cache */ - { .constant = { - { nir_search_value_constant, 8 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1440, 1443 }, - -1, - } }, - - /* replace462_0 -> 6 in the cache */ - /* replace462_1 -> 848 in the cache */ - /* replace462 -> 1438 in the cache */ - - /* ('ine', ('ushr', 'a@8', 7), 1) => ('ige', 'a', 0) */ - /* search463_0_0 -> 6 in the cache */ - /* search463_0_1 -> 9 in the cache */ - /* search463_0 -> 1440 in the cache */ - /* search463_1 -> 1443 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1440, 1443 }, - -1, - } }, - - /* replace463_0 -> 6 in the cache */ - /* replace463_1 -> 848 in the cache */ - /* replace463 -> 1435 in the cache */ - - /* ('ine', ('ishr', 'a@8', 7), 0) => ('ilt', 'a', 0) */ - /* search464_0_0 -> 6 in the cache */ - /* search464_0_1 -> 9 in the cache */ - /* search464_0 -> 1429 in the cache */ - /* search464_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1429, 848 }, - -1, - } }, - - /* replace464_0 -> 6 in the cache */ - /* replace464_1 -> 848 in the cache */ - /* replace464 -> 1438 in the cache */ - - /* ('ieq', ('ishr', 'a@8', 7), 0) => ('ige', 'a', 0) */ - /* search465_0_0 -> 6 in the cache */ - /* search465_0_1 -> 9 in the cache */ - /* search465_0 -> 1429 in the cache */ - /* search465_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1429, 848 }, - -1, - } }, - - /* replace465_0 -> 6 in the cache */ - /* replace465_1 -> 848 in the cache */ - /* replace465 -> 1435 in the cache */ - - /* ('ieq', ('ishr', 'a@8', 7), -1) => ('ilt', 'a', 0) */ - /* search466_0_0 -> 6 in the cache */ - /* search466_0_1 -> 9 in the cache */ - /* search466_0 -> 1429 in the cache */ - { .constant = { - { nir_search_value_constant, 8 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1429, 1448 }, - -1, - } }, - - /* replace466_0 -> 6 in the cache */ - /* replace466_1 -> 848 in the cache */ - /* replace466 -> 1438 in the cache */ - - /* ('ine', ('ishr', 'a@8', 7), -1) => ('ige', 'a', 0) */ - /* search467_0_0 -> 6 in the cache */ - /* search467_0_1 -> 9 in the cache */ - /* search467_0 -> 1429 in the cache */ - /* search467_1 -> 1448 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1429, 1448 }, - -1, - } }, - - /* replace467_0 -> 6 in the cache */ - /* replace467_1 -> 848 in the cache */ - /* replace467 -> 1435 in the cache */ - - /* ('iand@16', 'a', ('inot', ('ishr', 'a', 15))) => ('imax', 'a', 0) */ - /* search468_0 -> 11 in the cache */ - /* search468_1_0_0 -> 11 in the cache */ - /* search468_1_0_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 11, 14 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1451 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 11, 1452 }, - -1, - } }, - - /* replace468_0 -> 11 in the cache */ - /* replace468_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 11, 869 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@16', 32768), 0) => ('ige', 'a', 0) */ - /* search469_0_0 -> 11 in the cache */ - /* search469_0_1 -> 12 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 11, 12 }, - -1, - } }, - /* search469_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1455, 869 }, - -1, - } }, - - /* replace469_0 -> 11 in the cache */ - /* replace469_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 11, 869 }, - -1, - } }, - - /* ('ine', ('iand', 'a@16', 32768), 32768) => ('ige', 'a', 0) */ - /* search470_0_0 -> 11 in the cache */ - /* search470_0_1 -> 12 in the cache */ - /* search470_0 -> 1455 in the cache */ - /* search470_1 -> 12 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1455, 12 }, - -1, - } }, - - /* replace470_0 -> 11 in the cache */ - /* replace470_1 -> 869 in the cache */ - /* replace470 -> 1457 in the cache */ - - /* ('ine', ('iand', 'a@16', 32768), 0) => ('ilt', 'a', 0) */ - /* search471_0_0 -> 11 in the cache */ - /* search471_0_1 -> 12 in the cache */ - /* search471_0 -> 1455 in the cache */ - /* search471_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1455, 869 }, - -1, - } }, - - /* replace471_0 -> 11 in the cache */ - /* replace471_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 869 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@16', 32768), 32768) => ('ilt', 'a', 0) */ - /* search472_0_0 -> 11 in the cache */ - /* search472_0_1 -> 12 in the cache */ - /* search472_0 -> 1455 in the cache */ - /* search472_1 -> 12 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1455, 12 }, - -1, - } }, - - /* replace472_0 -> 11 in the cache */ - /* replace472_1 -> 869 in the cache */ - /* replace472 -> 1460 in the cache */ - - /* ('ine', ('ushr', 'a@16', 15), 0) => ('ilt', 'a', 0) */ - /* search473_0_0 -> 11 in the cache */ - /* search473_0_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 11, 14 }, - -1, - } }, - /* search473_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1462, 869 }, - -1, - } }, - - /* replace473_0 -> 11 in the cache */ - /* replace473_1 -> 869 in the cache */ - /* replace473 -> 1460 in the cache */ - - /* ('ieq', ('ushr', 'a@16', 15), 0) => ('ige', 'a', 0) */ - /* search474_0_0 -> 11 in the cache */ - /* search474_0_1 -> 14 in the cache */ - /* search474_0 -> 1462 in the cache */ - /* search474_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1462, 869 }, - -1, - } }, - - /* replace474_0 -> 11 in the cache */ - /* replace474_1 -> 869 in the cache */ - /* replace474 -> 1457 in the cache */ - - /* ('ieq', ('ushr', 'a@16', 15), 1) => ('ilt', 'a', 0) */ - /* search475_0_0 -> 11 in the cache */ - /* search475_0_1 -> 14 in the cache */ - /* search475_0 -> 1462 in the cache */ - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1462, 1465 }, - -1, - } }, - - /* replace475_0 -> 11 in the cache */ - /* replace475_1 -> 869 in the cache */ - /* replace475 -> 1460 in the cache */ - - /* ('ine', ('ushr', 'a@16', 15), 1) => ('ige', 'a', 0) */ - /* search476_0_0 -> 11 in the cache */ - /* search476_0_1 -> 14 in the cache */ - /* search476_0 -> 1462 in the cache */ - /* search476_1 -> 1465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1462, 1465 }, - -1, - } }, - - /* replace476_0 -> 11 in the cache */ - /* replace476_1 -> 869 in the cache */ - /* replace476 -> 1457 in the cache */ - - /* ('ine', ('ishr', 'a@16', 15), 0) => ('ilt', 'a', 0) */ - /* search477_0_0 -> 11 in the cache */ - /* search477_0_1 -> 14 in the cache */ - /* search477_0 -> 1451 in the cache */ - /* search477_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1451, 869 }, - -1, - } }, - - /* replace477_0 -> 11 in the cache */ - /* replace477_1 -> 869 in the cache */ - /* replace477 -> 1460 in the cache */ - - /* ('ieq', ('ishr', 'a@16', 15), 0) => ('ige', 'a', 0) */ - /* search478_0_0 -> 11 in the cache */ - /* search478_0_1 -> 14 in the cache */ - /* search478_0 -> 1451 in the cache */ - /* search478_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1451, 869 }, - -1, - } }, - - /* replace478_0 -> 11 in the cache */ - /* replace478_1 -> 869 in the cache */ - /* replace478 -> 1457 in the cache */ - - /* ('ieq', ('ishr', 'a@16', 15), -1) => ('ilt', 'a', 0) */ - /* search479_0_0 -> 11 in the cache */ - /* search479_0_1 -> 14 in the cache */ - /* search479_0 -> 1451 in the cache */ - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1451, 1470 }, - -1, - } }, - - /* replace479_0 -> 11 in the cache */ - /* replace479_1 -> 869 in the cache */ - /* replace479 -> 1460 in the cache */ - - /* ('ine', ('ishr', 'a@16', 15), -1) => ('ige', 'a', 0) */ - /* search480_0_0 -> 11 in the cache */ - /* search480_0_1 -> 14 in the cache */ - /* search480_0 -> 1451 in the cache */ - /* search480_1 -> 1470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1451, 1470 }, - -1, - } }, - - /* replace480_0 -> 11 in the cache */ - /* replace480_1 -> 869 in the cache */ - /* replace480 -> 1457 in the cache */ - - /* ('iand@32', 'a', ('inot', ('ishr', 'a', 31))) => ('imax', 'a', 0) */ - /* search481_0 -> 16 in the cache */ - /* search481_1_0_0 -> 16 in the cache */ - /* search481_1_0_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 16, 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1473 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 1474 }, - -1, - } }, - - /* replace481_0 -> 16 in the cache */ - /* replace481_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 16, 128 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@32', 2147483648), 0) => ('ige', 'a', 0) */ - /* search482_0_0 -> 16 in the cache */ - /* search482_0_1 -> 17 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 17 }, - -1, - } }, - /* search482_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1477, 128 }, - -1, - } }, - - /* replace482_0 -> 16 in the cache */ - /* replace482_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 128 }, - -1, - } }, - - /* ('ine', ('iand', 'a@32', 2147483648), 2147483648) => ('ige', 'a', 0) */ - /* search483_0_0 -> 16 in the cache */ - /* search483_0_1 -> 17 in the cache */ - /* search483_0 -> 1477 in the cache */ - /* search483_1 -> 17 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1477, 17 }, - -1, - } }, - - /* replace483_0 -> 16 in the cache */ - /* replace483_1 -> 128 in the cache */ - /* replace483 -> 1479 in the cache */ - - /* ('ine', ('iand', 'a@32', 2147483648), 0) => ('ilt', 'a', 0) */ - /* search484_0_0 -> 16 in the cache */ - /* search484_0_1 -> 17 in the cache */ - /* search484_0 -> 1477 in the cache */ - /* search484_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1477, 128 }, - -1, - } }, - - /* replace484_0 -> 16 in the cache */ - /* replace484_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 128 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@32', 2147483648), 2147483648) => ('ilt', 'a', 0) */ - /* search485_0_0 -> 16 in the cache */ - /* search485_0_1 -> 17 in the cache */ - /* search485_0 -> 1477 in the cache */ - /* search485_1 -> 17 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1477, 17 }, - -1, - } }, - - /* replace485_0 -> 16 in the cache */ - /* replace485_1 -> 128 in the cache */ - /* replace485 -> 1482 in the cache */ - - /* ('ine', ('ushr', 'a@32', 31), 0) => ('ilt', 'a', 0) */ - /* search486_0_0 -> 16 in the cache */ - /* search486_0_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 19 }, - -1, - } }, - /* search486_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1484, 128 }, - -1, - } }, - - /* replace486_0 -> 16 in the cache */ - /* replace486_1 -> 128 in the cache */ - /* replace486 -> 1482 in the cache */ - - /* ('ieq', ('ushr', 'a@32', 31), 0) => ('ige', 'a', 0) */ - /* search487_0_0 -> 16 in the cache */ - /* search487_0_1 -> 19 in the cache */ - /* search487_0 -> 1484 in the cache */ - /* search487_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1484, 128 }, - -1, - } }, - - /* replace487_0 -> 16 in the cache */ - /* replace487_1 -> 128 in the cache */ - /* replace487 -> 1479 in the cache */ - - /* ('ieq', ('ushr', 'a@32', 31), 1) => ('ilt', 'a', 0) */ - /* search488_0_0 -> 16 in the cache */ - /* search488_0_1 -> 19 in the cache */ - /* search488_0 -> 1484 in the cache */ - /* search488_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1484, 406 }, - -1, - } }, - - /* replace488_0 -> 16 in the cache */ - /* replace488_1 -> 128 in the cache */ - /* replace488 -> 1482 in the cache */ - - /* ('ine', ('ushr', 'a@32', 31), 1) => ('ige', 'a', 0) */ - /* search489_0_0 -> 16 in the cache */ - /* search489_0_1 -> 19 in the cache */ - /* search489_0 -> 1484 in the cache */ - /* search489_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1484, 406 }, - -1, - } }, - - /* replace489_0 -> 16 in the cache */ - /* replace489_1 -> 128 in the cache */ - /* replace489 -> 1479 in the cache */ - - /* ('ine', ('ishr', 'a@32', 31), 0) => ('ilt', 'a', 0) */ - /* search490_0_0 -> 16 in the cache */ - /* search490_0_1 -> 19 in the cache */ - /* search490_0 -> 1473 in the cache */ - /* search490_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1473, 128 }, - -1, - } }, - - /* replace490_0 -> 16 in the cache */ - /* replace490_1 -> 128 in the cache */ - /* replace490 -> 1482 in the cache */ - - /* ('ieq', ('ishr', 'a@32', 31), 0) => ('ige', 'a', 0) */ - /* search491_0_0 -> 16 in the cache */ - /* search491_0_1 -> 19 in the cache */ - /* search491_0 -> 1473 in the cache */ - /* search491_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1473, 128 }, - -1, - } }, - - /* replace491_0 -> 16 in the cache */ - /* replace491_1 -> 128 in the cache */ - /* replace491 -> 1479 in the cache */ - - /* ('ieq', ('ishr', 'a@32', 31), -1) => ('ilt', 'a', 0) */ - /* search492_0_0 -> 16 in the cache */ - /* search492_0_1 -> 19 in the cache */ - /* search492_0 -> 1473 in the cache */ - /* search492_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1473, 130 }, - -1, - } }, - - /* replace492_0 -> 16 in the cache */ - /* replace492_1 -> 128 in the cache */ - /* replace492 -> 1482 in the cache */ - - /* ('ine', ('ishr', 'a@32', 31), -1) => ('ige', 'a', 0) */ - /* search493_0_0 -> 16 in the cache */ - /* search493_0_1 -> 19 in the cache */ - /* search493_0 -> 1473 in the cache */ - /* search493_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1473, 130 }, - -1, - } }, - - /* replace493_0 -> 16 in the cache */ - /* replace493_1 -> 128 in the cache */ - /* replace493 -> 1479 in the cache */ - - /* ('iand@64', 'a', ('inot', ('ishr', 'a', 63))) => ('imax', 'a', 0) */ - /* search494_0 -> 21 in the cache */ - /* search494_1_0_0 -> 21 in the cache */ - /* search494_1_0_1 -> 24 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 24 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 1493 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 1494 }, - -1, - } }, - - /* replace494_0 -> 21 in the cache */ - /* replace494_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 21, 910 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@64', 9223372036854775808), 0) => ('ige', 'a', 0) */ - /* search495_0_0 -> 21 in the cache */ - /* search495_0_1 -> 22 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 21, 22 }, - -1, - } }, - /* search495_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1497, 910 }, - -1, - } }, - - /* replace495_0 -> 21 in the cache */ - /* replace495_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 21, 910 }, - -1, - } }, - - /* ('ine', ('iand', 'a@64', 9223372036854775808), 9223372036854775808) => ('ige', 'a', 0) */ - /* search496_0_0 -> 21 in the cache */ - /* search496_0_1 -> 22 in the cache */ - /* search496_0 -> 1497 in the cache */ - /* search496_1 -> 22 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1497, 22 }, - -1, - } }, - - /* replace496_0 -> 21 in the cache */ - /* replace496_1 -> 910 in the cache */ - /* replace496 -> 1499 in the cache */ - - /* ('ine', ('iand', 'a@64', 9223372036854775808), 0) => ('ilt', 'a', 0) */ - /* search497_0_0 -> 21 in the cache */ - /* search497_0_1 -> 22 in the cache */ - /* search497_0 -> 1497 in the cache */ - /* search497_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 1497, 910 }, - -1, - } }, - - /* replace497_0 -> 21 in the cache */ - /* replace497_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 910 }, - -1, - } }, - - /* ('ieq', ('iand', 'a@64', 9223372036854775808), 9223372036854775808) => ('ilt', 'a', 0) */ - /* search498_0_0 -> 21 in the cache */ - /* search498_0_1 -> 22 in the cache */ - /* search498_0 -> 1497 in the cache */ - /* search498_1 -> 22 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 1497, 22 }, - -1, - } }, - - /* replace498_0 -> 21 in the cache */ - /* replace498_1 -> 910 in the cache */ - /* replace498 -> 1502 in the cache */ - - /* ('ine', ('ushr', 'a@64', 63), 0) => ('ilt', 'a', 0) */ - /* search499_0_0 -> 21 in the cache */ - /* search499_0_1 -> 24 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 24 }, - -1, - } }, - /* search499_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1504, 910 }, - -1, - } }, - - /* replace499_0 -> 21 in the cache */ - /* replace499_1 -> 910 in the cache */ - /* replace499 -> 1502 in the cache */ - - /* ('ieq', ('ushr', 'a@64', 63), 0) => ('ige', 'a', 0) */ - /* search500_0_0 -> 21 in the cache */ - /* search500_0_1 -> 24 in the cache */ - /* search500_0 -> 1504 in the cache */ - /* search500_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1504, 910 }, - -1, - } }, - - /* replace500_0 -> 21 in the cache */ - /* replace500_1 -> 910 in the cache */ - /* replace500 -> 1499 in the cache */ - - /* ('ieq', ('ushr', 'a@64', 63), 1) => ('ilt', 'a', 0) */ - /* search501_0_0 -> 21 in the cache */ - /* search501_0_1 -> 24 in the cache */ - /* search501_0 -> 1504 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1504, 1507 }, - -1, - } }, - - /* replace501_0 -> 21 in the cache */ - /* replace501_1 -> 910 in the cache */ - /* replace501 -> 1502 in the cache */ - - /* ('ine', ('ushr', 'a@64', 63), 1) => ('ige', 'a', 0) */ - /* search502_0_0 -> 21 in the cache */ - /* search502_0_1 -> 24 in the cache */ - /* search502_0 -> 1504 in the cache */ - /* search502_1 -> 1507 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1504, 1507 }, - -1, - } }, - - /* replace502_0 -> 21 in the cache */ - /* replace502_1 -> 910 in the cache */ - /* replace502 -> 1499 in the cache */ - - /* ('ine', ('ishr', 'a@64', 63), 0) => ('ilt', 'a', 0) */ - /* search503_0_0 -> 21 in the cache */ - /* search503_0_1 -> 24 in the cache */ - /* search503_0 -> 1493 in the cache */ - /* search503_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1493, 910 }, - -1, - } }, - - /* replace503_0 -> 21 in the cache */ - /* replace503_1 -> 910 in the cache */ - /* replace503 -> 1502 in the cache */ - - /* ('ieq', ('ishr', 'a@64', 63), 0) => ('ige', 'a', 0) */ - /* search504_0_0 -> 21 in the cache */ - /* search504_0_1 -> 24 in the cache */ - /* search504_0 -> 1493 in the cache */ - /* search504_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1493, 910 }, - -1, - } }, - - /* replace504_0 -> 21 in the cache */ - /* replace504_1 -> 910 in the cache */ - /* replace504 -> 1499 in the cache */ - - /* ('ieq', ('ishr', 'a@64', 63), -1) => ('ilt', 'a', 0) */ - /* search505_0_0 -> 21 in the cache */ - /* search505_0_1 -> 24 in the cache */ - /* search505_0 -> 1493 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 1493, 1512 }, - -1, - } }, - - /* replace505_0 -> 21 in the cache */ - /* replace505_1 -> 910 in the cache */ - /* replace505 -> 1502 in the cache */ - - /* ('ine', ('ishr', 'a@64', 63), -1) => ('ige', 'a', 0) */ - /* search506_0_0 -> 21 in the cache */ - /* search506_0_1 -> 24 in the cache */ - /* search506_0 -> 1493 in the cache */ - /* search506_1 -> 1512 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 1493, 1512 }, - -1, - } }, - - /* replace506_0 -> 21 in the cache */ - /* replace506_1 -> 910 in the cache */ - /* replace506 -> 1499 in the cache */ - - /* ('fmin', 'a', ('fneg', 'a')) => ('fneg', ('fabs', 'a')) */ - /* search507_0 -> 32 in the cache */ - /* search507_1_0 -> 32 in the cache */ - /* search507_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 32, 107 }, - -1, - } }, - - /* replace507_0_0 -> 32 in the cache */ - /* replace507_0 -> 99 in the cache */ - /* replace507 -> 1267 in the cache */ - - /* ('imin', 'a', ('ineg', 'a')) => ('ineg', ('iabs', 'a')) */ - /* search508_0 -> 32 in the cache */ - /* search508_1_0 -> 32 in the cache */ - /* search508_1 -> 109 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 32, 109 }, - -1, - } }, - - /* replace508_0_0 -> 32 in the cache */ - /* replace508_0 -> 114 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 114 }, - -1, - } }, - - /* ('fmin', 'a', ('fneg', ('fabs', 'a'))) => ('fneg', ('fabs', 'a')) */ - /* search509_0 -> 32 in the cache */ - /* search509_1_0_0 -> 32 in the cache */ - /* search509_1_0 -> 99 in the cache */ - /* search509_1 -> 1267 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 32, 1267 }, - -1, - } }, - - /* replace509_0_0 -> 32 in the cache */ - /* replace509_0 -> 99 in the cache */ - /* replace509 -> 1267 in the cache */ - - /* ('imin', 'a', ('ineg', ('iabs', 'a'))) => ('ineg', ('iabs', 'a')) */ - /* search510_0 -> 32 in the cache */ - /* search510_1_0_0 -> 32 in the cache */ - /* search510_1_0 -> 114 in the cache */ - /* search510_1 -> 1517 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 32, 1517 }, - -1, - } }, - - /* replace510_0_0 -> 32 in the cache */ - /* replace510_0 -> 114 in the cache */ - /* replace510 -> 1517 in the cache */ - - /* ('~fmin', 'a', ('fabs', 'a')) => a */ - /* search511_0 -> 32 in the cache */ - /* search511_1_0 -> 32 in the cache */ - /* search511_1 -> 99 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmin, - 0, 1, - { 32, 99 }, - -1, - } }, - - /* replace511 -> 32 in the cache */ - - /* ('imin', 'a', ('iabs', 'a')) => a */ - /* search512_0 -> 32 in the cache */ - /* search512_1_0 -> 32 in the cache */ - /* search512_1 -> 114 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 32, 114 }, - -1, - } }, - - /* replace512 -> 32 in the cache */ - - /* ('~fmax', 'a', ('fneg', ('fabs', 'a'))) => a */ - /* search513_0 -> 32 in the cache */ - /* search513_1_0_0 -> 32 in the cache */ - /* search513_1_0 -> 99 in the cache */ - /* search513_1 -> 1267 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmax, - 0, 1, - { 32, 1267 }, - -1, - } }, - - /* replace513 -> 32 in the cache */ - - /* ('imax', 'a', ('ineg', ('iabs', 'a'))) => a */ - /* search514_0 -> 32 in the cache */ - /* search514_1_0_0 -> 32 in the cache */ - /* search514_1_0 -> 114 in the cache */ - /* search514_1 -> 1517 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 32, 1517 }, - -1, - } }, - - /* replace514 -> 32 in the cache */ - - /* ('fmax', 'a', ('fabs', 'a')) => ('fabs', 'a') */ - /* search515_0 -> 32 in the cache */ - /* search515_1_0 -> 32 in the cache */ - /* search515_1 -> 99 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 32, 99 }, - -1, - } }, - - /* replace515_0 -> 32 in the cache */ - /* replace515 -> 99 in the cache */ - - /* ('imax', 'a', ('iabs', 'a')) => ('iabs', 'a') */ - /* search516_0 -> 32 in the cache */ - /* search516_1_0 -> 32 in the cache */ - /* search516_1 -> 114 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 32, 114 }, - -1, - } }, - - /* replace516_0 -> 32 in the cache */ - /* replace516 -> 114 in the cache */ - - /* ('fmax', 'a', ('fneg', 'a')) => ('fabs', 'a') */ - /* search517_0 -> 32 in the cache */ - /* search517_1_0 -> 32 in the cache */ - /* search517_1 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 32, 107 }, - -1, - } }, - - /* replace517_0 -> 32 in the cache */ - /* replace517 -> 99 in the cache */ - - /* ('imax', 'a', ('ineg', 'a')) => ('iabs', 'a') */ - /* search518_0 -> 32 in the cache */ - /* search518_1_0 -> 32 in the cache */ - /* search518_1 -> 109 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 32, 109 }, - -1, - } }, - - /* replace518_0 -> 32 in the cache */ - /* replace518 -> 114 in the cache */ - - /* ('~fmax', ('fabs', 'a'), 0.0) => ('fabs', 'a') */ - /* search519_0_0 -> 32 in the cache */ - /* search519_0 -> 99 in the cache */ - /* search519_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmax, - 0, 1, - { 99, 117 }, - -1, - } }, - - /* replace519_0 -> 32 in the cache */ - /* replace519 -> 99 in the cache */ - - /* ('fmin', ('fmax', 'a', 0.0), 1.0) => ('fsat', 'a') */ - /* search520_0_0 -> 32 in the cache */ - /* search520_0_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 32, 117 }, - -1, - } }, - /* search520_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 1529, 252 }, - -1, - } }, - - /* replace520_0 -> 32 in the cache */ - /* replace520 -> 228 in the cache */ - - /* ('~fmax', ('fmin', 'a', 1.0), 0.0) => ('fsat', 'a') */ - /* search521_0_0 -> 32 in the cache */ - /* search521_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 32, 252 }, - -1, - } }, - /* search521_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmax, - 0, 2, - { 1531, 117 }, - -1, - } }, - - /* replace521_0 -> 32 in the cache */ - /* replace521 -> 228 in the cache */ - - /* ('~fmin', ('fmax', 'a', -1.0), 0.0) => ('fneg', ('fsat', ('fneg', 'a'))) */ - /* search522_0_0 -> 32 in the cache */ - /* search522_0_1 -> 258 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 32, 258 }, - -1, - } }, - /* search522_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmin, - 0, 2, - { 1533, 117 }, - -1, - } }, - - /* replace522_0_0_0 -> 32 in the cache */ - /* replace522_0_0 -> 107 in the cache */ - /* replace522_0 -> 229 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 229 }, - -1, - } }, - - /* ('~fmax', ('fmin', 'a', 0.0), -1.0) => ('fneg', ('fsat', ('fneg', 'a'))) */ - /* search523_0_0 -> 32 in the cache */ - /* search523_0_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 32, 117 }, - -1, - } }, - /* search523_1 -> 258 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmax, - 0, 2, - { 1536, 258 }, - -1, - } }, - - /* replace523_0_0_0 -> 32 in the cache */ - /* replace523_0_0 -> 107 in the cache */ - /* replace523_0 -> 229 in the cache */ - /* replace523 -> 1535 in the cache */ - - /* ('fsat', ('fsign', 'a')) => ('b2f', ('!flt', 0.0, 'a')) */ - /* search524_0_0 -> 32 in the cache */ - /* search524_0 -> 98 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 98 }, - -1, - } }, - - /* replace524_0_0 -> 117 in the cache */ - /* replace524_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 117, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1539 }, - -1, - } }, - - /* ('fsat', ('b2f', 'a')) => ('b2f', 'a') */ - /* search525_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 1541 }, - -1, - } }, - - /* replace525_0 -> 32 in the cache */ - /* replace525 -> 1541 in the cache */ - - /* ('fsat', 'a') => ('fmin', ('fmax', 'a', 0.0), 1.0) */ - /* search526_0 -> 32 in the cache */ - /* search526 -> 228 in the cache */ - - /* replace526_0_0 -> 32 in the cache */ - /* replace526_0_1 -> 117 in the cache */ - /* replace526_0 -> 1529 in the cache */ - /* replace526_1 -> 252 in the cache */ - /* replace526 -> 1530 in the cache */ - - /* ('fsat', ('fsat', 'a')) => ('fsat', 'a') */ - /* search527_0_0 -> 32 in the cache */ - /* search527_0 -> 228 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 228 }, - -1, - } }, - - /* replace527_0 -> 32 in the cache */ - /* replace527 -> 228 in the cache */ - - /* ('fsat', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b'))) => ('fsat', ('fadd', ('fneg', 'a'), ('fneg', 'b'))) */ - /* search528_0_0_0 -> 0 in the cache */ - /* search528_0_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1544 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1545 }, - -1, - } }, - - /* replace528_0_0_0 -> 0 in the cache */ - /* replace528_0_0 -> 223 in the cache */ - /* replace528_0_1_0 -> 3 in the cache */ - /* replace528_0_1 -> 1100 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 223, 1100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1547 }, - -1, - } }, - - /* ('fsat', ('fneg(is_used_once)', ('fmul(is_used_once)', 'a', 'b'))) => ('fsat', ('fmul', ('fneg', 'a'), 'b')) */ - /* search529_0_0_0 -> 0 in the cache */ - /* search529_0_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 0, 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1549 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1550 }, - -1, - } }, - - /* replace529_0_0_0 -> 0 in the cache */ - /* replace529_0_0 -> 223 in the cache */ - /* replace529_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 223, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1552 }, - -1, - } }, - - /* ('fsat', ('fneg(is_used_once)', ('fmulz(is_used_once)', 'a', 'b'))) => ('fsat', ('fmulz', ('fneg', 'a'), 'b')) */ - /* search530_0_0_0 -> 16 in the cache */ - /* search530_0_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 16, 36 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1554 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1555 }, - -1, - } }, - - /* replace530_0_0_0 -> 16 in the cache */ - /* replace530_0_0 -> 290 in the cache */ - /* replace530_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 290, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1557 }, - -1, - } }, - - /* ('fsat', ('fabs(is_used_once)', ('fmul(is_used_once)', 'a', 'b'))) => ('fsat', ('fmul', ('fabs', 'a'), ('fabs', 'b'))) */ - /* search531_0_0_0 -> 0 in the cache */ - /* search531_0_0_1 -> 3 in the cache */ - /* search531_0_0 -> 1549 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 1549 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1559 }, - -1, - } }, - - /* replace531_0_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 0 }, - -1, - } }, - /* replace531_0_1_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 1561, 1562 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1563 }, - -1, - } }, - - /* ('fmin', ('fmax', ('fmin', ('fmax', 'a', 'b'), 'c'), 'b'), 'c') => ('fmin', ('fmax', 'a', 'b'), 'c') */ - /* search532_0_0_0_0 -> 132 in the cache */ - /* search532_0_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 3, 1, - { 132, 133 }, - -1, - } }, - /* search532_0_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 2, 2, - { 1565, 135 }, - -1, - } }, - /* search532_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 1, 3, - { 1566, 133 }, - -1, - } }, - /* search532_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 0, 4, - { 1567, 135 }, - -1, - } }, - - /* replace532_0_0 -> 132 in the cache */ - /* replace532_0_1 -> 133 in the cache */ - /* replace532_0 -> 1373 in the cache */ - /* replace532_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 1373, 135 }, - -1, - } }, - - /* ('imin', ('imax', ('imin', ('imax', 'a', 'b'), 'c'), 'b'), 'c') => ('imin', ('imax', 'a', 'b'), 'c') */ - /* search533_0_0_0_0 -> 132 in the cache */ - /* search533_0_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 3, 1, - { 132, 133 }, - -1, - } }, - /* search533_0_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 2, 2, - { 1570, 135 }, - -1, - } }, - /* search533_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 1, 3, - { 1571, 133 }, - -1, - } }, - /* search533_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 0, 4, - { 1572, 135 }, - -1, - } }, - - /* replace533_0_0 -> 132 in the cache */ - /* replace533_0_1 -> 133 in the cache */ - /* replace533_0 -> 1383 in the cache */ - /* replace533_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 0, 2, - { 1383, 135 }, - -1, - } }, - - /* ('umin', ('umax', ('umin', ('umax', 'a', 'b'), 'c'), 'b'), 'c') => ('umin', ('umax', 'a', 'b'), 'c') */ - /* search534_0_0_0_0 -> 132 in the cache */ - /* search534_0_0_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 3, 1, - { 132, 133 }, - -1, - } }, - /* search534_0_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 2, 2, - { 1575, 135 }, - -1, - } }, - /* search534_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 1, 3, - { 1576, 133 }, - -1, - } }, - /* search534_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 4, - { 1577, 135 }, - -1, - } }, - - /* replace534_0_0 -> 132 in the cache */ - /* replace534_0_1 -> 133 in the cache */ - /* replace534_0 -> 1378 in the cache */ - /* replace534_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 2, - { 1378, 135 }, - -1, - } }, - - /* ('fmax', ('fsat', 'a'), '#b(is_zero_to_one)') => ('fsat', ('fmax', 'a', 'b')) */ - /* search535_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 0 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - true, - nir_type_invalid, - 18, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 1580, 1581 }, - -1, - } }, - - /* replace535_0_0 -> 0 in the cache */ - /* replace535_0_1 -> 3 in the cache */ - /* replace535_0 -> 1294 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1294 }, - -1, - } }, - - /* ('fmax', ('fsat(is_used_once)', 'a'), ('fsat(is_used_once)', 'b')) => ('fsat', ('fmax', 'a', 'b')) */ - /* search536_0_0 -> 0 in the cache */ - /* search536_0 -> 1132 in the cache */ - /* search536_1_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 1132, 1584 }, - -1, - } }, - - /* replace536_0_0 -> 0 in the cache */ - /* replace536_0_1 -> 3 in the cache */ - /* replace536_0 -> 1294 in the cache */ - /* replace536 -> 1583 in the cache */ - - /* ('~fmin', ('fsat', 'a'), '#b(is_zero_to_one)') => ('fsat', ('fmin', 'a', 'b')) */ - /* search537_0_0 -> 0 in the cache */ - /* search537_0 -> 1580 in the cache */ - /* search537_1 -> 1581 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fmin, - 0, 1, - { 1580, 1581 }, - -1, - } }, - - /* replace537_0_0 -> 0 in the cache */ - /* replace537_0_1 -> 3 in the cache */ - /* replace537_0 -> 1296 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1296 }, - -1, - } }, - - /* ('fmax', ('fneg', ('fmin', 'b', 'a')), 'b') => ('fmax', ('fabs', 'b'), ('fneg', 'a')) */ - /* search538_0_0_0 -> 1130 in the cache */ - /* search538_0_0_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 1130, 1127 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1588 }, - -1, - } }, - /* search538_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 2, - { 1589, 1130 }, - -1, - } }, - - /* replace538_0_0 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 1130 }, - -1, - } }, - /* replace538_1_0 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1127 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 1591, 1592 }, - -1, - } }, - - /* ('fmin', ('fneg', ('fmax', 'b', 'a')), 'b') => ('fmin', ('fneg', ('fabs', 'b')), ('fneg', 'a')) */ - /* search539_0_0_0 -> 1130 in the cache */ - /* search539_0_0_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 1130, 1127 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 1594 }, - -1, - } }, - /* search539_1 -> 1130 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 1595, 1130 }, - -1, - } }, - - /* replace539_0_0_0 -> 1130 in the cache */ - /* replace539_0_0 -> 1591 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1591 }, - -1, - } }, - /* replace539_1_0 -> 1127 in the cache */ - /* replace539_1 -> 1592 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 1597, 1592 }, - -1, - } }, - - /* ('fmax', ('fadd(is_used_once)', ('fneg', 'a(is_not_negative)'), '#b(is_zero_to_one)'), 0.0) => ('fsat', ('fadd', ('fneg', 'a'), 'b')) */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 19, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1599 }, - -1, - } }, - /* search540_0_1 -> 1581 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 1600, 1581 }, - 0, - } }, - /* search540_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 2, - { 1601, 266 }, - -1, - } }, - - /* replace540_0_0_0 -> 0 in the cache */ - /* replace540_0_0 -> 223 in the cache */ - /* replace540_0_1 -> 3 in the cache */ - /* replace540_0 -> 287 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 287 }, - -1, - } }, - - /* ('extract_u8', ('imin', ('imax', 'a', 0), 255), 0) => ('imin', ('imax', 'a', 0), 255) */ - /* search541_0_0_0 -> 32 in the cache */ - /* search541_0_0_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 32, 61 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0xff /* 255 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - 0, 2, - { 1604, 1605 }, - -1, - } }, - /* search541_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_extract_u8, - -1, 2, - { 1606, 61 }, - -1, - } }, - - /* replace541_0_0 -> 32 in the cache */ - /* replace541_0_1 -> 61 in the cache */ - /* replace541_0 -> 1604 in the cache */ - /* replace541_1 -> 1605 in the cache */ - /* replace541 -> 1606 in the cache */ - - /* ('ior', ('flt(is_used_once)', 'a', 'b'), ('flt', 'a', 'c')) => ('flt', 'a', ('!fmax', 'b', 'c')) */ - /* search542_0_0 -> 132 in the cache */ - /* search542_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 132, 133 }, - 0, - } }, - /* search542_1_0 -> 132 in the cache */ - /* search542_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1608, 1609 }, - -1, - } }, - - /* replace542_0 -> 132 in the cache */ - /* replace542_1_0 -> 133 in the cache */ - /* replace542_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - true, - false, - nir_op_fmax, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 132, 1611 }, - -1, - } }, - - /* ('ior', ('flt(is_used_once)', 'a', 'c'), ('flt', 'b', 'c')) => ('flt', ('!fmin', 'a', 'b'), 'c') */ - /* search543_0_0 -> 0 in the cache */ - /* search543_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 0, 694 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search543_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1614, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1613, 1615 }, - -1, - } }, - - /* replace543_0_0 -> 0 in the cache */ - /* replace543_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - true, - false, - nir_op_fmin, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace543_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1617, 694 }, - -1, - } }, - - /* ('ior', ('fge(is_used_once)', 'a', 'b'), ('fge', 'a', 'c')) => ('fge', 'a', ('!fmin', 'b', 'c')) */ - /* search544_0_0 -> 132 in the cache */ - /* search544_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 132, 133 }, - 0, - } }, - /* search544_1_0 -> 132 in the cache */ - /* search544_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1619, 1620 }, - -1, - } }, - - /* replace544_0 -> 132 in the cache */ - /* replace544_1_0 -> 133 in the cache */ - /* replace544_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - true, - false, - nir_op_fmin, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 132, 1622 }, - -1, - } }, - - /* ('ior', ('fge(is_used_once)', 'a', 'c'), ('fge', 'b', 'c')) => ('fge', ('!fmax', 'a', 'b'), 'c') */ - /* search545_0_0 -> 0 in the cache */ - /* search545_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 0, 694 }, - 0, - } }, - /* search545_1_0 -> 1614 in the cache */ - /* search545_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1614, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1624, 1625 }, - -1, - } }, - - /* replace545_0_0 -> 0 in the cache */ - /* replace545_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - true, - false, - nir_op_fmax, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace545_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 1627, 694 }, - -1, - } }, - - /* ('ior', ('flt', 'a', '#b'), ('flt', 'a', '#c')) => ('flt', 'a', ('!fmax', 'b', 'c')) */ - /* search546_0_0 -> 132 in the cache */ - /* search546_0_1 -> 293 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 132, 293 }, - -1, - } }, - /* search546_1_0 -> 132 in the cache */ - /* search546_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 132, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1629, 1630 }, - -1, - } }, - - /* replace546_0 -> 132 in the cache */ - /* replace546_1_0 -> 133 in the cache */ - /* replace546_1_1 -> 135 in the cache */ - /* replace546_1 -> 1611 in the cache */ - /* replace546 -> 1612 in the cache */ - - /* ('ior', ('flt', '#a', 'c'), ('flt', '#b', 'c')) => ('flt', ('!fmin', 'a', 'b'), 'c') */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search547_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1632, 694 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 2, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search547_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1634, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1633, 1635 }, - -1, - } }, - - /* replace547_0_0 -> 0 in the cache */ - /* replace547_0_1 -> 1614 in the cache */ - /* replace547_0 -> 1617 in the cache */ - /* replace547_1 -> 694 in the cache */ - /* replace547 -> 1618 in the cache */ - - /* ('ior', ('fge', 'a', '#b'), ('fge', 'a', '#c')) => ('fge', 'a', ('!fmin', 'b', 'c')) */ - /* search548_0_0 -> 132 in the cache */ - /* search548_0_1 -> 293 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 132, 293 }, - -1, - } }, - /* search548_1_0 -> 132 in the cache */ - /* search548_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 132, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1637, 1638 }, - -1, - } }, - - /* replace548_0 -> 132 in the cache */ - /* replace548_1_0 -> 133 in the cache */ - /* replace548_1_1 -> 135 in the cache */ - /* replace548_1 -> 1622 in the cache */ - /* replace548 -> 1623 in the cache */ - - /* ('ior', ('fge', '#a', 'c'), ('fge', '#b', 'c')) => ('fge', ('!fmax', 'a', 'b'), 'c') */ - /* search549_0_0 -> 1632 in the cache */ - /* search549_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1632, 694 }, - -1, - } }, - /* search549_1_0 -> 1634 in the cache */ - /* search549_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1634, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1640, 1641 }, - -1, - } }, - - /* replace549_0_0 -> 0 in the cache */ - /* replace549_0_1 -> 1614 in the cache */ - /* replace549_0 -> 1627 in the cache */ - /* replace549_1 -> 694 in the cache */ - /* replace549 -> 1628 in the cache */ - - /* ('~iand', ('flt(is_used_once)', 'a', 'b'), ('flt', 'a', 'c')) => ('flt', 'a', ('fmin', 'b', 'c')) */ - /* search550_0_0 -> 132 in the cache */ - /* search550_0_1 -> 133 in the cache */ - /* search550_0 -> 1608 in the cache */ - /* search550_1_0 -> 132 in the cache */ - /* search550_1_1 -> 135 in the cache */ - /* search550_1 -> 1609 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1608, 1609 }, - -1, - } }, - - /* replace550_0 -> 132 in the cache */ - /* replace550_1_0 -> 133 in the cache */ - /* replace550_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 132, 1644 }, - -1, - } }, - - /* ('~iand', ('flt(is_used_once)', 'a', 'c'), ('flt', 'b', 'c')) => ('flt', ('fmax', 'a', 'b'), 'c') */ - /* search551_0_0 -> 0 in the cache */ - /* search551_0_1 -> 694 in the cache */ - /* search551_0 -> 1613 in the cache */ - /* search551_1_0 -> 1614 in the cache */ - /* search551_1_1 -> 694 in the cache */ - /* search551_1 -> 1615 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1613, 1615 }, - -1, - } }, - - /* replace551_0_0 -> 0 in the cache */ - /* replace551_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace551_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1647, 694 }, - -1, - } }, - - /* ('~iand', ('fge(is_used_once)', 'a', 'b'), ('fge', 'a', 'c')) => ('fge', 'a', ('fmax', 'b', 'c')) */ - /* search552_0_0 -> 132 in the cache */ - /* search552_0_1 -> 133 in the cache */ - /* search552_0 -> 1619 in the cache */ - /* search552_1_0 -> 132 in the cache */ - /* search552_1_1 -> 135 in the cache */ - /* search552_1 -> 1620 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1619, 1620 }, - -1, - } }, - - /* replace552_0 -> 132 in the cache */ - /* replace552_1_0 -> 133 in the cache */ - /* replace552_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 132, 1650 }, - -1, - } }, - - /* ('~iand', ('fge(is_used_once)', 'a', 'c'), ('fge', 'b', 'c')) => ('fge', ('fmin', 'a', 'b'), 'c') */ - /* search553_0_0 -> 0 in the cache */ - /* search553_0_1 -> 694 in the cache */ - /* search553_0 -> 1624 in the cache */ - /* search553_1_0 -> 1614 in the cache */ - /* search553_1_1 -> 694 in the cache */ - /* search553_1 -> 1625 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1624, 1625 }, - -1, - } }, - - /* replace553_0_0 -> 0 in the cache */ - /* replace553_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace553_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 1653, 694 }, - -1, - } }, - - /* ('iand', ('flt', 'a', '#b(is_a_number)'), ('flt', 'a', '#c(is_a_number)')) => ('flt', 'a', ('fmin', 'b', 'c')) */ - /* search554_0_0 -> 132 in the cache */ - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - true, - nir_type_invalid, - 16, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 132, 1655 }, - -1, - } }, - /* search554_1_0 -> 132 in the cache */ - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - true, - nir_type_invalid, - 16, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 132, 1657 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1656, 1658 }, - -1, - } }, - - /* replace554_0 -> 132 in the cache */ - /* replace554_1_0 -> 133 in the cache */ - /* replace554_1_1 -> 135 in the cache */ - /* replace554_1 -> 1644 in the cache */ - /* replace554 -> 1645 in the cache */ - - /* ('iand', ('flt', '#a(is_a_number)', 'c'), ('flt', '#b(is_a_number)', 'c')) => ('flt', ('fmax', 'a', 'b'), 'c') */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - true, - nir_type_invalid, - 16, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search555_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1660, 694 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 2, /* b */ - true, - nir_type_invalid, - 16, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search555_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1662, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1661, 1663 }, - -1, - } }, - - /* replace555_0_0 -> 0 in the cache */ - /* replace555_0_1 -> 1614 in the cache */ - /* replace555_0 -> 1647 in the cache */ - /* replace555_1 -> 694 in the cache */ - /* replace555 -> 1648 in the cache */ - - /* ('iand', ('fge', 'a', '#b(is_a_number)'), ('fge', 'a', '#c(is_a_number)')) => ('fge', 'a', ('fmax', 'b', 'c')) */ - /* search556_0_0 -> 132 in the cache */ - /* search556_0_1 -> 1655 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 132, 1655 }, - -1, - } }, - /* search556_1_0 -> 132 in the cache */ - /* search556_1_1 -> 1657 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 132, 1657 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1665, 1666 }, - -1, - } }, - - /* replace556_0 -> 132 in the cache */ - /* replace556_1_0 -> 133 in the cache */ - /* replace556_1_1 -> 135 in the cache */ - /* replace556_1 -> 1650 in the cache */ - /* replace556 -> 1651 in the cache */ - - /* ('iand', ('fge', '#a(is_a_number)', 'c'), ('fge', '#b(is_a_number)', 'c')) => ('fge', ('fmin', 'a', 'b'), 'c') */ - /* search557_0_0 -> 1660 in the cache */ - /* search557_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1660, 694 }, - -1, - } }, - /* search557_1_0 -> 1662 in the cache */ - /* search557_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1662, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1668, 1669 }, - -1, - } }, - - /* replace557_0_0 -> 0 in the cache */ - /* replace557_0_1 -> 1614 in the cache */ - /* replace557_0 -> 1653 in the cache */ - /* replace557_1 -> 694 in the cache */ - /* replace557 -> 1654 in the cache */ - - /* ('ior', ('ilt(is_used_once)', 'a', 'b'), ('ilt', 'a', 'c')) => ('ilt', 'a', ('imax', 'b', 'c')) */ - /* search558_0_0 -> 132 in the cache */ - /* search558_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 132, 133 }, - 0, - } }, - /* search558_1_0 -> 132 in the cache */ - /* search558_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1671, 1672 }, - -1, - } }, - - /* replace558_0 -> 132 in the cache */ - /* replace558_1_0 -> 133 in the cache */ - /* replace558_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 132, 1674 }, - -1, - } }, - - /* ('ior', ('ilt(is_used_once)', 'a', 'c'), ('ilt', 'b', 'c')) => ('ilt', ('imin', 'a', 'b'), 'c') */ - /* search559_0_0 -> 0 in the cache */ - /* search559_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 0, 694 }, - 0, - } }, - /* search559_1_0 -> 1614 in the cache */ - /* search559_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 1614, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1676, 1677 }, - -1, - } }, - - /* replace559_0_0 -> 0 in the cache */ - /* replace559_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace559_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 1679, 694 }, - -1, - } }, - - /* ('ior', ('ige(is_used_once)', 'a', 'b'), ('ige', 'a', 'c')) => ('ige', 'a', ('imin', 'b', 'c')) */ - /* search560_0_0 -> 132 in the cache */ - /* search560_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 132, 133 }, - 0, - } }, - /* search560_1_0 -> 132 in the cache */ - /* search560_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1681, 1682 }, - -1, - } }, - - /* replace560_0 -> 132 in the cache */ - /* replace560_1_0 -> 133 in the cache */ - /* replace560_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 132, 1684 }, - -1, - } }, - - /* ('ior', ('ige(is_used_once)', 'a', 'c'), ('ige', 'b', 'c')) => ('ige', ('imax', 'a', 'b'), 'c') */ - /* search561_0_0 -> 0 in the cache */ - /* search561_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 0, 694 }, - 0, - } }, - /* search561_1_0 -> 1614 in the cache */ - /* search561_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 1614, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1686, 1687 }, - -1, - } }, - - /* replace561_0_0 -> 0 in the cache */ - /* replace561_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace561_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 1689, 694 }, - -1, - } }, - - /* ('ior', ('ult(is_used_once)', 'a', 'b'), ('ult', 'a', 'c')) => ('ult', 'a', ('umax', 'b', 'c')) */ - /* search562_0_0 -> 132 in the cache */ - /* search562_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 132, 133 }, - 0, - } }, - /* search562_1_0 -> 132 in the cache */ - /* search562_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1691, 1692 }, - -1, - } }, - - /* replace562_0 -> 132 in the cache */ - /* replace562_1_0 -> 133 in the cache */ - /* replace562_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 132, 1694 }, - -1, - } }, - - /* ('ior', ('ult(is_used_once)', 'a', 'c'), ('ult', 'b', 'c')) => ('ult', ('umin', 'a', 'b'), 'c') */ - /* search563_0_0 -> 0 in the cache */ - /* search563_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 0, 694 }, - 0, - } }, - /* search563_1_0 -> 1614 in the cache */ - /* search563_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 1614, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1696, 1697 }, - -1, - } }, - - /* replace563_0_0 -> 0 in the cache */ - /* replace563_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace563_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 1699, 694 }, - -1, - } }, - - /* ('ior', ('uge(is_used_once)', 'a', 'b'), ('uge', 'a', 'c')) => ('uge', 'a', ('umin', 'b', 'c')) */ - /* search564_0_0 -> 132 in the cache */ - /* search564_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 132, 133 }, - 0, - } }, - /* search564_1_0 -> 132 in the cache */ - /* search564_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 132, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1701, 1702 }, - -1, - } }, - - /* replace564_0 -> 132 in the cache */ - /* replace564_1_0 -> 133 in the cache */ - /* replace564_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 132, 1704 }, - -1, - } }, - - /* ('ior', ('uge(is_used_once)', 'a', 'c'), ('uge', 'b', 'c')) => ('uge', ('umax', 'a', 'b'), 'c') */ - /* search565_0_0 -> 0 in the cache */ - /* search565_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 0, 694 }, - 0, - } }, - /* search565_1_0 -> 1614 in the cache */ - /* search565_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 1614, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1706, 1707 }, - -1, - } }, - - /* replace565_0_0 -> 0 in the cache */ - /* replace565_0_1 -> 1614 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 0, 1614 }, - -1, - } }, - /* replace565_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 1709, 694 }, - -1, - } }, - - /* ('iand', ('ilt(is_used_once)', 'a', 'b'), ('ilt', 'a', 'c')) => ('ilt', 'a', ('imin', 'b', 'c')) */ - /* search566_0_0 -> 132 in the cache */ - /* search566_0_1 -> 133 in the cache */ - /* search566_0 -> 1671 in the cache */ - /* search566_1_0 -> 132 in the cache */ - /* search566_1_1 -> 135 in the cache */ - /* search566_1 -> 1672 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1671, 1672 }, - -1, - } }, - - /* replace566_0 -> 132 in the cache */ - /* replace566_1_0 -> 133 in the cache */ - /* replace566_1_1 -> 135 in the cache */ - /* replace566_1 -> 1684 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 132, 1684 }, - -1, - } }, - - /* ('iand', ('ilt(is_used_once)', 'a', 'c'), ('ilt', 'b', 'c')) => ('ilt', ('imax', 'a', 'b'), 'c') */ - /* search567_0_0 -> 0 in the cache */ - /* search567_0_1 -> 694 in the cache */ - /* search567_0 -> 1676 in the cache */ - /* search567_1_0 -> 1614 in the cache */ - /* search567_1_1 -> 694 in the cache */ - /* search567_1 -> 1677 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1676, 1677 }, - -1, - } }, - - /* replace567_0_0 -> 0 in the cache */ - /* replace567_0_1 -> 1614 in the cache */ - /* replace567_0 -> 1689 in the cache */ - /* replace567_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 1689, 694 }, - -1, - } }, - - /* ('iand', ('ige(is_used_once)', 'a', 'b'), ('ige', 'a', 'c')) => ('ige', 'a', ('imax', 'b', 'c')) */ - /* search568_0_0 -> 132 in the cache */ - /* search568_0_1 -> 133 in the cache */ - /* search568_0 -> 1681 in the cache */ - /* search568_1_0 -> 132 in the cache */ - /* search568_1_1 -> 135 in the cache */ - /* search568_1 -> 1682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1681, 1682 }, - -1, - } }, - - /* replace568_0 -> 132 in the cache */ - /* replace568_1_0 -> 133 in the cache */ - /* replace568_1_1 -> 135 in the cache */ - /* replace568_1 -> 1674 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 132, 1674 }, - -1, - } }, - - /* ('iand', ('ige(is_used_once)', 'a', 'c'), ('ige', 'b', 'c')) => ('ige', ('imin', 'a', 'b'), 'c') */ - /* search569_0_0 -> 0 in the cache */ - /* search569_0_1 -> 694 in the cache */ - /* search569_0 -> 1686 in the cache */ - /* search569_1_0 -> 1614 in the cache */ - /* search569_1_1 -> 694 in the cache */ - /* search569_1 -> 1687 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1686, 1687 }, - -1, - } }, - - /* replace569_0_0 -> 0 in the cache */ - /* replace569_0_1 -> 1614 in the cache */ - /* replace569_0 -> 1679 in the cache */ - /* replace569_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 1679, 694 }, - -1, - } }, - - /* ('iand', ('ult(is_used_once)', 'a', 'b'), ('ult', 'a', 'c')) => ('ult', 'a', ('umin', 'b', 'c')) */ - /* search570_0_0 -> 132 in the cache */ - /* search570_0_1 -> 133 in the cache */ - /* search570_0 -> 1691 in the cache */ - /* search570_1_0 -> 132 in the cache */ - /* search570_1_1 -> 135 in the cache */ - /* search570_1 -> 1692 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1691, 1692 }, - -1, - } }, - - /* replace570_0 -> 132 in the cache */ - /* replace570_1_0 -> 133 in the cache */ - /* replace570_1_1 -> 135 in the cache */ - /* replace570_1 -> 1704 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 132, 1704 }, - -1, - } }, - - /* ('iand', ('ult(is_used_once)', 'a', 'c'), ('ult', 'b', 'c')) => ('ult', ('umax', 'a', 'b'), 'c') */ - /* search571_0_0 -> 0 in the cache */ - /* search571_0_1 -> 694 in the cache */ - /* search571_0 -> 1696 in the cache */ - /* search571_1_0 -> 1614 in the cache */ - /* search571_1_1 -> 694 in the cache */ - /* search571_1 -> 1697 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1696, 1697 }, - -1, - } }, - - /* replace571_0_0 -> 0 in the cache */ - /* replace571_0_1 -> 1614 in the cache */ - /* replace571_0 -> 1709 in the cache */ - /* replace571_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 1709, 694 }, - -1, - } }, - - /* ('iand', ('uge(is_used_once)', 'a', 'b'), ('uge', 'a', 'c')) => ('uge', 'a', ('umax', 'b', 'c')) */ - /* search572_0_0 -> 132 in the cache */ - /* search572_0_1 -> 133 in the cache */ - /* search572_0 -> 1701 in the cache */ - /* search572_1_0 -> 132 in the cache */ - /* search572_1_1 -> 135 in the cache */ - /* search572_1 -> 1702 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1701, 1702 }, - -1, - } }, - - /* replace572_0 -> 132 in the cache */ - /* replace572_1_0 -> 133 in the cache */ - /* replace572_1_1 -> 135 in the cache */ - /* replace572_1 -> 1694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 132, 1694 }, - -1, - } }, - - /* ('iand', ('uge(is_used_once)', 'a', 'c'), ('uge', 'b', 'c')) => ('uge', ('umin', 'a', 'b'), 'c') */ - /* search573_0_0 -> 0 in the cache */ - /* search573_0_1 -> 694 in the cache */ - /* search573_0 -> 1706 in the cache */ - /* search573_1_0 -> 1614 in the cache */ - /* search573_1_1 -> 694 in the cache */ - /* search573_1 -> 1707 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1706, 1707 }, - -1, - } }, - - /* replace573_0_0 -> 0 in the cache */ - /* replace573_0_1 -> 1614 in the cache */ - /* replace573_0 -> 1699 in the cache */ - /* replace573_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 1699, 694 }, - -1, - } }, - - /* ('ior', ('ior(is_used_once)', ('flt(is_used_once)', 'a', 'c'), 'd'), ('flt', 'b', 'c')) => ('ior', ('flt', ('!fmin', 'a', 'b'), 'c'), 'd') */ - /* search574_0_0_0 -> 0 in the cache */ - /* search574_0_0_1 -> 694 in the cache */ - /* search574_0_0 -> 1613 in the cache */ - { .variable = { - { nir_search_value_variable, 1 }, - 2, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 1613, 1727 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 3, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search574_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1729, 694 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 1728, 1730 }, - -1, - } }, - - /* replace574_0_0_0 -> 0 in the cache */ - /* replace574_0_0_1 -> 1729 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - true, - false, - nir_op_fmin, - 1, 1, - { 0, 1729 }, - -1, - } }, - /* replace574_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1732, 694 }, - -1, - } }, - /* replace574_1 -> 1727 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 1733, 1727 }, - -1, - } }, - - /* ('ior', ('ior(is_used_once)', ('flt', 'a', 'c'), 'd'), ('flt(is_used_once)', 'b', 'c')) => ('ior', ('flt', ('!fmin', 'a', 'b'), 'c'), 'd') */ - /* search575_0_0_0 -> 0 in the cache */ - /* search575_0_0_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 0, 694 }, - -1, - } }, - /* search575_0_1 -> 1727 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 1735, 1727 }, - 0, - } }, - /* search575_1_0 -> 1729 in the cache */ - /* search575_1_1 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1729, 694 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 1736, 1737 }, - -1, - } }, - - /* replace575_0_0_0 -> 0 in the cache */ - /* replace575_0_0_1 -> 1729 in the cache */ - /* replace575_0_0 -> 1732 in the cache */ - /* replace575_0_1 -> 694 in the cache */ - /* replace575_0 -> 1733 in the cache */ - /* replace575_1 -> 1727 in the cache */ - /* replace575 -> 1734 in the cache */ - - /* ('ior', ('ior(is_used_once)', ('flt(is_used_once)', 'a', 'b'), 'd'), ('flt', 'a', 'c')) => ('ior', ('flt', 'a', ('!fmax', 'b', 'c')), 'd') */ - /* search576_0_0_0 -> 155 in the cache */ - /* search576_0_0_1 -> 156 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 155, 156 }, - 0, - } }, - /* search576_0_1 -> 1727 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 1739, 1727 }, - 0, - } }, - /* search576_1_0 -> 155 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 3, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 155, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 1740, 1742 }, - -1, - } }, - - /* replace576_0_0 -> 155 in the cache */ - /* replace576_0_1_0 -> 156 in the cache */ - /* replace576_0_1_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - true, - false, - nir_op_fmax, - 1, 1, - { 156, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 155, 1744 }, - -1, - } }, - /* replace576_1 -> 1727 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 1745, 1727 }, - -1, - } }, - - /* ('ior', ('ior(is_used_once)', ('flt', 'a', 'b'), 'd'), ('flt(is_used_once)', 'a', 'c')) => ('ior', ('flt', 'a', ('!fmax', 'b', 'c')), 'd') */ - /* search577_0_0_0 -> 155 in the cache */ - /* search577_0_0_1 -> 156 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 155, 156 }, - -1, - } }, - /* search577_0_1 -> 1727 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 1747, 1727 }, - 0, - } }, - /* search577_1_0 -> 155 in the cache */ - /* search577_1_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 155, 1741 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 1748, 1749 }, - -1, - } }, - - /* replace577_0_0 -> 155 in the cache */ - /* replace577_0_1_0 -> 156 in the cache */ - /* replace577_0_1_1 -> 1741 in the cache */ - /* replace577_0_1 -> 1744 in the cache */ - /* replace577_0 -> 1745 in the cache */ - /* replace577_1 -> 1727 in the cache */ - /* replace577 -> 1746 in the cache */ - - /* ('ior', ('flt', 'a(is_a_number)', 'b(is_a_number)'), ('flt', 'b', 'a')) => ('fneu', 'a', 'b') */ - /* search578_0_0 -> 1055 in the cache */ - /* search578_0_1 -> 1056 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1055, 1056 }, - -1, - } }, - /* search578_1_0 -> 3 in the cache */ - /* search578_1_1 -> 0 in the cache */ - /* search578_1 -> 1091 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1751, 1091 }, - -1, - } }, - - /* replace578_0 -> 0 in the cache */ - /* replace578_1 -> 3 in the cache */ - /* replace578 -> 1065 in the cache */ - - /* ('umin', ('iand', 'a', '#b(is_pos_power_of_two)'), ('iand', 'c', 'b')) => ('iand', ('iand', 'a', 'b'), ('iand', 'c', 'b')) */ - /* search579_0_0 -> 0 in the cache */ - /* search579_0_1 -> 1 in the cache */ - /* search579_0 -> 205 in the cache */ - /* search579_1_0 -> 146 in the cache */ - /* search579_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 146, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 0, 3, - { 205, 1753 }, - -1, - } }, - - /* replace579_0_0 -> 0 in the cache */ - /* replace579_0_1 -> 3 in the cache */ - /* replace579_0 -> 207 in the cache */ - /* replace579_1_0 -> 146 in the cache */ - /* replace579_1_1 -> 3 in the cache */ - /* replace579_1 -> 1753 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 207, 1753 }, - -1, - } }, - - /* ('ior', ('flt(is_used_once)', 0.0, 'a@16'), ('flt', 'b@16', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search580_0_0 -> 119 in the cache */ - /* search580_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 119, 11 }, - 0, - } }, - /* search580_1_0 -> 268 in the cache */ - /* search580_1_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 268, 119 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1756, 1757 }, - -1, - } }, - - /* replace580_0 -> 119 in the cache */ - /* replace580_1_0 -> 11 in the cache */ - /* replace580_1_1_0 -> 268 in the cache */ - /* replace580_1_1 -> 544 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 11, 544 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 119, 1759 }, - -1, - } }, - - /* ('ior', ('flt', 0.0, 'a@16'), ('flt(is_used_once)', 'b@16', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search581_0_0 -> 119 in the cache */ - /* search581_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 119, 11 }, - -1, - } }, - /* search581_1_0 -> 268 in the cache */ - /* search581_1_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 268, 119 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1761, 1762 }, - -1, - } }, - - /* replace581_0 -> 119 in the cache */ - /* replace581_1_0 -> 11 in the cache */ - /* replace581_1_1_0 -> 268 in the cache */ - /* replace581_1_1 -> 544 in the cache */ - /* replace581_1 -> 1759 in the cache */ - /* replace581 -> 1760 in the cache */ - - /* ('ior', ('fge(is_used_once)', 0.0, 'a@16'), ('fge', 'b@16', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search582_0_0 -> 119 in the cache */ - /* search582_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 119, 11 }, - 0, - } }, - /* search582_1_0 -> 268 in the cache */ - /* search582_1_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 268, 119 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1764, 1765 }, - -1, - } }, - - /* replace582_0 -> 119 in the cache */ - /* replace582_1_0 -> 11 in the cache */ - /* replace582_1_1_0 -> 268 in the cache */ - /* replace582_1_1 -> 544 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 11, 544 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 119, 1767 }, - -1, - } }, - - /* ('ior', ('fge', 0.0, 'a@16'), ('fge(is_used_once)', 'b@16', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search583_0_0 -> 119 in the cache */ - /* search583_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 119, 11 }, - -1, - } }, - /* search583_1_0 -> 268 in the cache */ - /* search583_1_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 268, 119 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1769, 1770 }, - -1, - } }, - - /* replace583_0 -> 119 in the cache */ - /* replace583_1_0 -> 11 in the cache */ - /* replace583_1_1_0 -> 268 in the cache */ - /* replace583_1_1 -> 544 in the cache */ - /* replace583_1 -> 1767 in the cache */ - /* replace583 -> 1768 in the cache */ - - /* ('~iand', ('flt(is_used_once)', 0.0, 'a@16'), ('flt', 'b@16', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search584_0_0 -> 119 in the cache */ - /* search584_0_1 -> 11 in the cache */ - /* search584_0 -> 1756 in the cache */ - /* search584_1_0 -> 268 in the cache */ - /* search584_1_1 -> 119 in the cache */ - /* search584_1 -> 1757 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1756, 1757 }, - -1, - } }, - - /* replace584_0 -> 119 in the cache */ - /* replace584_1_0 -> 11 in the cache */ - /* replace584_1_1_0 -> 268 in the cache */ - /* replace584_1_1 -> 544 in the cache */ - /* replace584_1 -> 1767 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 119, 1767 }, - -1, - } }, - - /* ('~iand', ('flt', 0.0, 'a@16'), ('flt(is_used_once)', 'b@16', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search585_0_0 -> 119 in the cache */ - /* search585_0_1 -> 11 in the cache */ - /* search585_0 -> 1761 in the cache */ - /* search585_1_0 -> 268 in the cache */ - /* search585_1_1 -> 119 in the cache */ - /* search585_1 -> 1762 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1761, 1762 }, - -1, - } }, - - /* replace585_0 -> 119 in the cache */ - /* replace585_1_0 -> 11 in the cache */ - /* replace585_1_1_0 -> 268 in the cache */ - /* replace585_1_1 -> 544 in the cache */ - /* replace585_1 -> 1767 in the cache */ - /* replace585 -> 1773 in the cache */ - - /* ('~iand', ('fge(is_used_once)', 0.0, 'a@16'), ('fge', 'b@16', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search586_0_0 -> 119 in the cache */ - /* search586_0_1 -> 11 in the cache */ - /* search586_0 -> 1764 in the cache */ - /* search586_1_0 -> 268 in the cache */ - /* search586_1_1 -> 119 in the cache */ - /* search586_1 -> 1765 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1764, 1765 }, - -1, - } }, - - /* replace586_0 -> 119 in the cache */ - /* replace586_1_0 -> 11 in the cache */ - /* replace586_1_1_0 -> 268 in the cache */ - /* replace586_1_1 -> 544 in the cache */ - /* replace586_1 -> 1759 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 119, 1759 }, - -1, - } }, - - /* ('~iand', ('fge', 0.0, 'a@16'), ('fge(is_used_once)', 'b@16', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search587_0_0 -> 119 in the cache */ - /* search587_0_1 -> 11 in the cache */ - /* search587_0 -> 1769 in the cache */ - /* search587_1_0 -> 268 in the cache */ - /* search587_1_1 -> 119 in the cache */ - /* search587_1 -> 1770 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1769, 1770 }, - -1, - } }, - - /* replace587_0 -> 119 in the cache */ - /* replace587_1_0 -> 11 in the cache */ - /* replace587_1_1_0 -> 268 in the cache */ - /* replace587_1_1 -> 544 in the cache */ - /* replace587_1 -> 1759 in the cache */ - /* replace587 -> 1776 in the cache */ - - /* ('ior', ('feq(is_used_once)', 'a@16', 0.0), ('feq', 'b@16', 0.0)) => ('feq', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search588_0_0 -> 11 in the cache */ - /* search588_0_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 11, 119 }, - 0, - } }, - /* search588_1_0 -> 268 in the cache */ - /* search588_1_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 2, 1, - { 268, 119 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1778, 1779 }, - -1, - } }, - - /* replace588_0_0_0 -> 11 in the cache */ - /* replace588_0_0 -> 700 in the cache */ - /* replace588_0_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 700, 1781 }, - -1, - } }, - /* replace588_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1782, 119 }, - -1, - } }, - - /* ('ior', ('fneu(is_used_once)', 'a@16', 0.0), ('fneu', 'b@16', 0.0)) => ('fneu', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search589_0_0 -> 11 in the cache */ - /* search589_0_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 11, 119 }, - 0, - } }, - /* search589_1_0 -> 268 in the cache */ - /* search589_1_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 2, 1, - { 268, 119 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1784, 1785 }, - -1, - } }, - - /* replace589_0_0_0 -> 11 in the cache */ - /* replace589_0_0 -> 700 in the cache */ - /* replace589_0_1_0 -> 268 in the cache */ - /* replace589_0_1 -> 1781 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 700, 1781 }, - -1, - } }, - /* replace589_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1787, 119 }, - -1, - } }, - - /* ('iand', ('feq(is_used_once)', 'a@16', 0.0), ('feq', 'b@16', 0.0)) => ('feq', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search590_0_0 -> 11 in the cache */ - /* search590_0_1 -> 119 in the cache */ - /* search590_0 -> 1778 in the cache */ - /* search590_1_0 -> 268 in the cache */ - /* search590_1_1 -> 119 in the cache */ - /* search590_1 -> 1779 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1778, 1779 }, - -1, - } }, - - /* replace590_0_0_0 -> 11 in the cache */ - /* replace590_0_0 -> 700 in the cache */ - /* replace590_0_1_0 -> 268 in the cache */ - /* replace590_0_1 -> 1781 in the cache */ - /* replace590_0 -> 1787 in the cache */ - /* replace590_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1787, 119 }, - -1, - } }, - - /* ('iand', ('fneu(is_used_once)', 'a@16', 0.0), ('fneu', 'b@16', 0.0)) => ('fneu', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search591_0_0 -> 11 in the cache */ - /* search591_0_1 -> 119 in the cache */ - /* search591_0 -> 1784 in the cache */ - /* search591_1_0 -> 268 in the cache */ - /* search591_1_1 -> 119 in the cache */ - /* search591_1 -> 1785 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1784, 1785 }, - -1, - } }, - - /* replace591_0_0_0 -> 11 in the cache */ - /* replace591_0_0 -> 700 in the cache */ - /* replace591_0_1_0 -> 268 in the cache */ - /* replace591_0_1 -> 1781 in the cache */ - /* replace591_0 -> 1782 in the cache */ - /* replace591_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1782, 119 }, - -1, - } }, - - /* ('bcsel@16', ('feq', 'a', 0.0), 1.0, ('i2f16', ('iadd', ('b2i16', ('flt', 0.0, 'a@16')), ('ineg', ('b2i16', ('flt', 'a@16', 0.0)))))) => ('i2f16', ('iadd', ('b2i32', ('!fge', 'a', 0.0)), ('ineg', ('b2i32', ('!flt', 'a', 0.0))))) */ - /* search592_0_0 -> 11 in the cache */ - /* search592_0_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 11, 119 }, - -1, - } }, - /* search592_1 -> 491 in the cache */ - /* search592_2_0_0_0_0 -> 119 in the cache */ - /* search592_2_0_0_0_1 -> 11 in the cache */ - /* search592_2_0_0_0 -> 1761 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2i16, - -1, 0, - { 1761 }, - -1, - } }, - /* search592_2_0_1_0_0_0 -> 11 in the cache */ - /* search592_2_0_1_0_0_1 -> 119 in the cache */ - /* search592_2_0_1_0_0 -> 699 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2i16, - -1, 0, - { 699 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1795 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 1794, 1796 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 1, - { 1797 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 1793, 491, 1798 }, - -1, - } }, - - /* replace592_0_0_0_0 -> 11 in the cache */ - /* replace592_0_0_0_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_fge, - -1, 0, - { 11, 119 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1800 }, - -1, - } }, - /* replace592_0_1_0_0_0 -> 11 in the cache */ - /* replace592_0_1_0_0_1 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 11, 119 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1802 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1803 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 1801, 1804 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 1, - { 1805 }, - -1, - } }, - - /* ('bcsel', 'a', ('b2f(is_used_once)', 'b@16'), ('b2f', 'c@16')) => ('b2f', ('bcsel', 'a', 'b', 'c')) */ - /* search593_0 -> 770 in the cache */ - /* search593_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 268 }, - 0, - } }, - /* search593_2_0 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 479 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1807, 1808 }, - -1, - } }, - - /* replace593_0_0 -> 770 in the cache */ - /* replace593_0_1 -> 268 in the cache */ - /* replace593_0_2 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 268, 479 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1810 }, - -1, - } }, - - /* ('~i2f16', ('f2i', 'a@16')) => ('ftrunc', 'a') */ - /* search594_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_i2f16, - -1, 0, - { 1812 }, - -1, - } }, - - /* replace594_0 -> 11 in the cache */ - /* replace594 -> 698 in the cache */ - - /* ('~f2i16', ('i2f', 'a@16')) => a */ - /* search595_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_i2f, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2i16, - -1, 0, - { 1814 }, - -1, - } }, - - /* replace595 -> 11 in the cache */ - - /* ('~f2i16', ('u2f', 'a@16')) => a */ - /* search596_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_u2f, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2i16, - -1, 0, - { 1816 }, - -1, - } }, - - /* replace596 -> 11 in the cache */ - - /* ('~f2u16', ('i2f', 'a@16')) => a */ - /* search597_0_0 -> 11 in the cache */ - /* search597_0 -> 1814 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2u16, - -1, 0, - { 1814 }, - -1, - } }, - - /* replace597 -> 11 in the cache */ - - /* ('~f2u16', ('u2f', 'a@16')) => a */ - /* search598_0_0 -> 11 in the cache */ - /* search598_0 -> 1816 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2u16, - -1, 0, - { 1816 }, - -1, - } }, - - /* replace598 -> 11 in the cache */ - - /* ('fadd', ('b2f16', ('flt', 0.0, 'a@16')), ('fneg', ('b2f16', ('flt', 'a@16', 0.0)))) => ('fsign', 'a') */ - /* search599_0_0_0 -> 119 in the cache */ - /* search599_0_0_1 -> 11 in the cache */ - /* search599_0_0 -> 1761 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2f16, - -1, 0, - { 1761 }, - -1, - } }, - /* search599_1_0_0_0 -> 11 in the cache */ - /* search599_1_0_0_1 -> 119 in the cache */ - /* search599_1_0_0 -> 699 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2f16, - -1, 0, - { 699 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1821 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 1820, 1822 }, - -1, - } }, - - /* replace599_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 11 }, - -1, - } }, - - /* ('iadd', ('b2i16', ('flt', 0, 'a@16')), ('ineg', ('b2i16', ('flt', 'a@16', 0)))) => ('f2i16', ('fsign', 'a')) */ - /* search600_0_0_0 -> 869 in the cache */ - /* search600_0_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 869, 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2i16, - -1, 0, - { 1825 }, - -1, - } }, - /* search600_1_0_0_0 -> 11 in the cache */ - /* search600_1_0_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 11, 869 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2i16, - -1, 0, - { 1827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1828 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 1826, 1829 }, - -1, - } }, - - /* replace600_0_0 -> 11 in the cache */ - /* replace600_0 -> 1824 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2i16, - -1, 0, - { 1824 }, - -1, - } }, - - /* ('~f2f16', ('f2f', 'a')) => ('f2f16', 'a') */ - /* search601_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2f, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2f16, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace601_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2f16', ('u2f', 'a')) => ('u2f16', 'a') */ - /* search602_0_0 -> 32 in the cache */ - /* search602_0 -> 112 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2f16, - -1, 0, - { 112 }, - -1, - } }, - - /* replace602_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2f16', ('i2f', 'a')) => ('i2f16', 'a') */ - /* search603_0_0 -> 32 in the cache */ - /* search603_0 -> 1254 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2f16, - -1, 0, - { 1254 }, - -1, - } }, - - /* replace603_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2u16', ('f2f', 'a')) => ('f2u16', 'a') */ - /* search604_0_0 -> 32 in the cache */ - /* search604_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2u16, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace604_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2u16, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2i16', ('f2f', 'a')) => ('f2i16', 'a') */ - /* search605_0_0 -> 32 in the cache */ - /* search605_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2i16, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace605_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2i16, - -1, 0, - { 32 }, - -1, - } }, - - /* ('i2f16', ('f2i', ('fsign', 'a@16'))) => ('fsign', 'a') */ - /* search606_0_0_0 -> 11 in the cache */ - /* search606_0_0 -> 1824 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 1824 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 1843 }, - -1, - } }, - - /* replace606_0 -> 11 in the cache */ - /* replace606 -> 1824 in the cache */ - - /* ('~f2f16', ('f2f32', 'a@16')) => a */ - /* search607_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2f16, - -1, 0, - { 1845 }, - -1, - } }, - - /* replace607 -> 11 in the cache */ - - /* ('f2u32', ('f2f32', 'a@16')) => ('f2u32', 'a') */ - /* search608_0_0 -> 11 in the cache */ - /* search608_0 -> 1845 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2u32, - -1, 0, - { 1845 }, - -1, - } }, - - /* replace608_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2u32, - -1, 0, - { 11 }, - -1, - } }, - - /* ('f2i32', ('f2f32', 'a@16')) => ('f2i32', 'a') */ - /* search609_0_0 -> 11 in the cache */ - /* search609_0 -> 1845 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 1845 }, - -1, - } }, - - /* replace609_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 11 }, - -1, - } }, - - /* ('f2f16', ('u2f32', 'a')) => ('u2f16', 'a') */ - /* search610_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 1851 }, - -1, - } }, - - /* replace610_0 -> 32 in the cache */ - /* replace610 -> 1836 in the cache */ - - /* ('f2f16', ('i2f32', 'a')) => ('i2f16', 'a') */ - /* search611_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 1853 }, - -1, - } }, - - /* replace611_0 -> 32 in the cache */ - /* replace611 -> 1838 in the cache */ - - /* ('~f2f16', ('f2f64', 'a@16')) => a */ - /* search612_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_f2f16, - -1, 0, - { 1855 }, - -1, - } }, - - /* replace612 -> 11 in the cache */ - - /* ('f2u64', ('f2f64', 'a@16')) => ('f2u64', 'a') */ - /* search613_0_0 -> 11 in the cache */ - /* search613_0 -> 1855 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2u64, - -1, 0, - { 1855 }, - -1, - } }, - - /* replace613_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2u64, - -1, 0, - { 11 }, - -1, - } }, - - /* ('f2i64', ('f2f64', 'a@16')) => ('f2i64', 'a') */ - /* search614_0_0 -> 11 in the cache */ - /* search614_0 -> 1855 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2i64, - -1, 0, - { 1855 }, - -1, - } }, - - /* replace614_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2i64, - -1, 0, - { 11 }, - -1, - } }, - - /* ('f2f16', ('u2f64', 'a')) => ('u2f16', 'a') */ - /* search615_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 1861 }, - -1, - } }, - - /* replace615_0 -> 32 in the cache */ - /* replace615 -> 1836 in the cache */ - - /* ('f2f16', ('i2f64', 'a')) => ('i2f16', 'a') */ - /* search616_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 1863 }, - -1, - } }, - - /* replace616_0 -> 32 in the cache */ - /* replace616 -> 1838 in the cache */ - - /* ('ior', ('flt(is_used_once)', 0.0, 'a@32'), ('flt', 'b@32', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search617_0_0 -> 121 in the cache */ - /* search617_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 121, 16 }, - 0, - } }, - /* search617_1_0 -> 36 in the cache */ - /* search617_1_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 36, 121 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1865, 1866 }, - -1, - } }, - - /* replace617_0 -> 121 in the cache */ - /* replace617_1_0 -> 16 in the cache */ - /* replace617_1_1_0 -> 36 in the cache */ - /* replace617_1_1 -> 610 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 16, 610 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 121, 1868 }, - -1, - } }, - - /* ('ior', ('flt', 0.0, 'a@32'), ('flt(is_used_once)', 'b@32', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search618_0_0 -> 121 in the cache */ - /* search618_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 121, 16 }, - -1, - } }, - /* search618_1_0 -> 36 in the cache */ - /* search618_1_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 36, 121 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1870, 1871 }, - -1, - } }, - - /* replace618_0 -> 121 in the cache */ - /* replace618_1_0 -> 16 in the cache */ - /* replace618_1_1_0 -> 36 in the cache */ - /* replace618_1_1 -> 610 in the cache */ - /* replace618_1 -> 1868 in the cache */ - /* replace618 -> 1869 in the cache */ - - /* ('ior', ('fge(is_used_once)', 0.0, 'a@32'), ('fge', 'b@32', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search619_0_0 -> 121 in the cache */ - /* search619_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 121, 16 }, - 0, - } }, - /* search619_1_0 -> 36 in the cache */ - /* search619_1_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 36, 121 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1873, 1874 }, - -1, - } }, - - /* replace619_0 -> 121 in the cache */ - /* replace619_1_0 -> 16 in the cache */ - /* replace619_1_1_0 -> 36 in the cache */ - /* replace619_1_1 -> 610 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 16, 610 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 121, 1876 }, - -1, - } }, - - /* ('ior', ('fge', 0.0, 'a@32'), ('fge(is_used_once)', 'b@32', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search620_0_0 -> 121 in the cache */ - /* search620_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 121, 16 }, - -1, - } }, - /* search620_1_0 -> 36 in the cache */ - /* search620_1_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 36, 121 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1878, 1879 }, - -1, - } }, - - /* replace620_0 -> 121 in the cache */ - /* replace620_1_0 -> 16 in the cache */ - /* replace620_1_1_0 -> 36 in the cache */ - /* replace620_1_1 -> 610 in the cache */ - /* replace620_1 -> 1876 in the cache */ - /* replace620 -> 1877 in the cache */ - - /* ('~iand', ('flt(is_used_once)', 0.0, 'a@32'), ('flt', 'b@32', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search621_0_0 -> 121 in the cache */ - /* search621_0_1 -> 16 in the cache */ - /* search621_0 -> 1865 in the cache */ - /* search621_1_0 -> 36 in the cache */ - /* search621_1_1 -> 121 in the cache */ - /* search621_1 -> 1866 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1865, 1866 }, - -1, - } }, - - /* replace621_0 -> 121 in the cache */ - /* replace621_1_0 -> 16 in the cache */ - /* replace621_1_1_0 -> 36 in the cache */ - /* replace621_1_1 -> 610 in the cache */ - /* replace621_1 -> 1876 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 121, 1876 }, - -1, - } }, - - /* ('~iand', ('flt', 0.0, 'a@32'), ('flt(is_used_once)', 'b@32', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search622_0_0 -> 121 in the cache */ - /* search622_0_1 -> 16 in the cache */ - /* search622_0 -> 1870 in the cache */ - /* search622_1_0 -> 36 in the cache */ - /* search622_1_1 -> 121 in the cache */ - /* search622_1 -> 1871 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1870, 1871 }, - -1, - } }, - - /* replace622_0 -> 121 in the cache */ - /* replace622_1_0 -> 16 in the cache */ - /* replace622_1_1_0 -> 36 in the cache */ - /* replace622_1_1 -> 610 in the cache */ - /* replace622_1 -> 1876 in the cache */ - /* replace622 -> 1882 in the cache */ - - /* ('~iand', ('fge(is_used_once)', 0.0, 'a@32'), ('fge', 'b@32', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search623_0_0 -> 121 in the cache */ - /* search623_0_1 -> 16 in the cache */ - /* search623_0 -> 1873 in the cache */ - /* search623_1_0 -> 36 in the cache */ - /* search623_1_1 -> 121 in the cache */ - /* search623_1 -> 1874 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1873, 1874 }, - -1, - } }, - - /* replace623_0 -> 121 in the cache */ - /* replace623_1_0 -> 16 in the cache */ - /* replace623_1_1_0 -> 36 in the cache */ - /* replace623_1_1 -> 610 in the cache */ - /* replace623_1 -> 1868 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 121, 1868 }, - -1, - } }, - - /* ('~iand', ('fge', 0.0, 'a@32'), ('fge(is_used_once)', 'b@32', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search624_0_0 -> 121 in the cache */ - /* search624_0_1 -> 16 in the cache */ - /* search624_0 -> 1878 in the cache */ - /* search624_1_0 -> 36 in the cache */ - /* search624_1_1 -> 121 in the cache */ - /* search624_1 -> 1879 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1878, 1879 }, - -1, - } }, - - /* replace624_0 -> 121 in the cache */ - /* replace624_1_0 -> 16 in the cache */ - /* replace624_1_1_0 -> 36 in the cache */ - /* replace624_1_1 -> 610 in the cache */ - /* replace624_1 -> 1868 in the cache */ - /* replace624 -> 1885 in the cache */ - - /* ('ior', ('feq(is_used_once)', 'a@32', 0.0), ('feq', 'b@32', 0.0)) => ('feq', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search625_0_0 -> 16 in the cache */ - /* search625_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 16, 121 }, - 0, - } }, - /* search625_1_0 -> 36 in the cache */ - /* search625_1_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 2, 1, - { 36, 121 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1887, 1888 }, - -1, - } }, - - /* replace625_0_0_0 -> 16 in the cache */ - /* replace625_0_0 -> 706 in the cache */ - /* replace625_0_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 706, 1890 }, - -1, - } }, - /* replace625_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1891, 121 }, - -1, - } }, - - /* ('ior', ('fneu(is_used_once)', 'a@32', 0.0), ('fneu', 'b@32', 0.0)) => ('fneu', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search626_0_0 -> 16 in the cache */ - /* search626_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 16, 121 }, - 0, - } }, - /* search626_1_0 -> 36 in the cache */ - /* search626_1_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 2, 1, - { 36, 121 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1893, 1894 }, - -1, - } }, - - /* replace626_0_0_0 -> 16 in the cache */ - /* replace626_0_0 -> 706 in the cache */ - /* replace626_0_1_0 -> 36 in the cache */ - /* replace626_0_1 -> 1890 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 706, 1890 }, - -1, - } }, - /* replace626_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1896, 121 }, - -1, - } }, - - /* ('iand', ('feq(is_used_once)', 'a@32', 0.0), ('feq', 'b@32', 0.0)) => ('feq', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search627_0_0 -> 16 in the cache */ - /* search627_0_1 -> 121 in the cache */ - /* search627_0 -> 1887 in the cache */ - /* search627_1_0 -> 36 in the cache */ - /* search627_1_1 -> 121 in the cache */ - /* search627_1 -> 1888 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1887, 1888 }, - -1, - } }, - - /* replace627_0_0_0 -> 16 in the cache */ - /* replace627_0_0 -> 706 in the cache */ - /* replace627_0_1_0 -> 36 in the cache */ - /* replace627_0_1 -> 1890 in the cache */ - /* replace627_0 -> 1896 in the cache */ - /* replace627_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1896, 121 }, - -1, - } }, - - /* ('iand', ('fneu(is_used_once)', 'a@32', 0.0), ('fneu', 'b@32', 0.0)) => ('fneu', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search628_0_0 -> 16 in the cache */ - /* search628_0_1 -> 121 in the cache */ - /* search628_0 -> 1893 in the cache */ - /* search628_1_0 -> 36 in the cache */ - /* search628_1_1 -> 121 in the cache */ - /* search628_1 -> 1894 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1893, 1894 }, - -1, - } }, - - /* replace628_0_0_0 -> 16 in the cache */ - /* replace628_0_0 -> 706 in the cache */ - /* replace628_0_1_0 -> 36 in the cache */ - /* replace628_0_1 -> 1890 in the cache */ - /* replace628_0 -> 1891 in the cache */ - /* replace628_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1891, 121 }, - -1, - } }, - - /* ('bcsel@32', ('feq', 'a', 0.0), 1.0, ('i2f32', ('iadd', ('b2i32', ('flt', 0.0, 'a@32')), ('ineg', ('b2i32', ('flt', 'a@32', 0.0)))))) => ('i2f32', ('iadd', ('b2i32', ('!fge', 'a', 0.0)), ('ineg', ('b2i32', ('!flt', 'a', 0.0))))) */ - /* search629_0_0 -> 16 in the cache */ - /* search629_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 16, 121 }, - -1, - } }, - /* search629_1 -> 254 in the cache */ - /* search629_2_0_0_0_0 -> 121 in the cache */ - /* search629_2_0_0_0_1 -> 16 in the cache */ - /* search629_2_0_0_0 -> 1870 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1870 }, - -1, - } }, - /* search629_2_0_1_0_0_0 -> 16 in the cache */ - /* search629_2_0_1_0_0_1 -> 121 in the cache */ - /* search629_2_0_1_0_0 -> 705 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 705 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1904 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 1903, 1905 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 1, - { 1906 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 1902, 254, 1907 }, - -1, - } }, - - /* replace629_0_0_0_0 -> 16 in the cache */ - /* replace629_0_0_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_fge, - -1, 0, - { 16, 121 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1909 }, - -1, - } }, - /* replace629_0_1_0_0_0 -> 16 in the cache */ - /* replace629_0_1_0_0_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 16, 121 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1911 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1912 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 1910, 1913 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 1, - { 1914 }, - -1, - } }, - - /* ('bcsel', 'a', ('b2f(is_used_once)', 'b@32'), ('b2f', 'c@32')) => ('b2f', ('bcsel', 'a', 'b', 'c')) */ - /* search630_0 -> 770 in the cache */ - /* search630_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 36 }, - 0, - } }, - /* search630_2_0 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1916, 1917 }, - -1, - } }, - - /* replace630_0_0 -> 770 in the cache */ - /* replace630_0_1 -> 36 in the cache */ - /* replace630_0_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 36, 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1919 }, - -1, - } }, - - /* ('~i2f32', ('f2i', 'a@32')) => ('ftrunc', 'a') */ - /* search631_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_i2f32, - -1, 0, - { 1921 }, - -1, - } }, - - /* replace631_0 -> 16 in the cache */ - /* replace631 -> 704 in the cache */ - - /* ('~f2i32', ('i2f', 'a@32')) => a */ - /* search632_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_i2f, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2i32, - -1, 0, - { 1923 }, - -1, - } }, - - /* replace632 -> 16 in the cache */ - - /* ('~f2i32', ('u2f', 'a@32')) => a */ - /* search633_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_u2f, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2i32, - -1, 0, - { 1925 }, - -1, - } }, - - /* replace633 -> 16 in the cache */ - - /* ('~f2u32', ('i2f', 'a@32')) => a */ - /* search634_0_0 -> 16 in the cache */ - /* search634_0 -> 1923 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2u32, - -1, 0, - { 1923 }, - -1, - } }, - - /* replace634 -> 16 in the cache */ - - /* ('~f2u32', ('u2f', 'a@32')) => a */ - /* search635_0_0 -> 16 in the cache */ - /* search635_0 -> 1925 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2u32, - -1, 0, - { 1925 }, - -1, - } }, - - /* replace635 -> 16 in the cache */ - - /* ('fadd', ('b2f32', ('flt', 0.0, 'a@32')), ('fneg', ('b2f32', ('flt', 'a@32', 0.0)))) => ('fsign', 'a') */ - /* search636_0_0_0 -> 121 in the cache */ - /* search636_0_0_1 -> 16 in the cache */ - /* search636_0_0 -> 1870 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2f32, - -1, 0, - { 1870 }, - -1, - } }, - /* search636_1_0_0_0 -> 16 in the cache */ - /* search636_1_0_0_1 -> 121 in the cache */ - /* search636_1_0_0 -> 705 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2f32, - -1, 0, - { 705 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1930 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 1929, 1931 }, - -1, - } }, - - /* replace636_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 16 }, - -1, - } }, - - /* ('iadd', ('b2i32', ('flt', 0, 'a@32')), ('ineg', ('b2i32', ('flt', 'a@32', 0)))) => ('f2i32', ('fsign', 'a')) */ - /* search637_0_0_0 -> 128 in the cache */ - /* search637_0_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 128, 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1934 }, - -1, - } }, - /* search637_1_0_0_0 -> 16 in the cache */ - /* search637_1_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 16, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 1936 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1937 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 1935, 1938 }, - -1, - } }, - - /* replace637_0_0 -> 16 in the cache */ - /* replace637_0 -> 1933 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 1933 }, - -1, - } }, - - /* ('~f2f32', ('f2f', 'a')) => ('f2f32', 'a') */ - /* search638_0_0 -> 32 in the cache */ - /* search638_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace638_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2f32', ('u2f', 'a')) => ('u2f32', 'a') */ - /* search639_0_0 -> 32 in the cache */ - /* search639_0 -> 112 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 112 }, - -1, - } }, - - /* replace639_0 -> 32 in the cache */ - /* replace639 -> 1851 in the cache */ - - /* ('~f2f32', ('i2f', 'a')) => ('i2f32', 'a') */ - /* search640_0_0 -> 32 in the cache */ - /* search640_0 -> 1254 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 1254 }, - -1, - } }, - - /* replace640_0 -> 32 in the cache */ - /* replace640 -> 1853 in the cache */ - - /* ('~f2u32', ('f2f', 'a')) => ('f2u32', 'a') */ - /* search641_0_0 -> 32 in the cache */ - /* search641_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2u32, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace641_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2u32, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2i32', ('f2f', 'a')) => ('f2i32', 'a') */ - /* search642_0_0 -> 32 in the cache */ - /* search642_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2i32, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace642_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 32 }, - -1, - } }, - - /* ('i2f32', ('f2i', ('fsign', 'a@32'))) => ('fsign', 'a') */ - /* search643_0_0_0 -> 16 in the cache */ - /* search643_0_0 -> 1933 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 1933 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 1949 }, - -1, - } }, - - /* replace643_0 -> 16 in the cache */ - /* replace643 -> 1933 in the cache */ - - /* ('~f2f32', ('f2f64', 'a@32')) => a */ - /* search644_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 1951 }, - -1, - } }, - - /* replace644 -> 16 in the cache */ - - /* ('f2u64', ('f2f64', 'a@32')) => ('f2u64', 'a') */ - /* search645_0_0 -> 16 in the cache */ - /* search645_0 -> 1951 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2u64, - -1, 0, - { 1951 }, - -1, - } }, - - /* replace645_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2u64, - -1, 0, - { 16 }, - -1, - } }, - - /* ('f2i64', ('f2f64', 'a@32')) => ('f2i64', 'a') */ - /* search646_0_0 -> 16 in the cache */ - /* search646_0 -> 1951 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2i64, - -1, 0, - { 1951 }, - -1, - } }, - - /* replace646_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2i64, - -1, 0, - { 16 }, - -1, - } }, - - /* ('f2f32', ('u2f64', 'a')) => ('u2f32', 'a') */ - /* search647_0_0 -> 32 in the cache */ - /* search647_0 -> 1861 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 1861 }, - -1, - } }, - - /* replace647_0 -> 32 in the cache */ - /* replace647 -> 1851 in the cache */ - - /* ('f2f32', ('i2f64', 'a')) => ('i2f32', 'a') */ - /* search648_0_0 -> 32 in the cache */ - /* search648_0 -> 1863 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 1863 }, - -1, - } }, - - /* replace648_0 -> 32 in the cache */ - /* replace648 -> 1853 in the cache */ - - /* ('ior', ('flt(is_used_once)', 0.0, 'a@64'), ('flt', 'b@64', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search649_0_0 -> 711 in the cache */ - /* search649_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 711, 21 }, - 0, - } }, - /* search649_1_0 -> 41 in the cache */ - /* search649_1_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 41, 711 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1959, 1960 }, - -1, - } }, - - /* replace649_0 -> 711 in the cache */ - /* replace649_1_0 -> 21 in the cache */ - /* replace649_1_1_0 -> 41 in the cache */ - /* replace649_1_1 -> 683 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 21, 683 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 711, 1962 }, - -1, - } }, - - /* ('ior', ('flt', 0.0, 'a@64'), ('flt(is_used_once)', 'b@64', 0.0)) => ('flt', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search650_0_0 -> 711 in the cache */ - /* search650_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 711, 21 }, - -1, - } }, - /* search650_1_0 -> 41 in the cache */ - /* search650_1_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 41, 711 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1964, 1965 }, - -1, - } }, - - /* replace650_0 -> 711 in the cache */ - /* replace650_1_0 -> 21 in the cache */ - /* replace650_1_1_0 -> 41 in the cache */ - /* replace650_1_1 -> 683 in the cache */ - /* replace650_1 -> 1962 in the cache */ - /* replace650 -> 1963 in the cache */ - - /* ('ior', ('fge(is_used_once)', 0.0, 'a@64'), ('fge', 'b@64', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search651_0_0 -> 711 in the cache */ - /* search651_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 711, 21 }, - 0, - } }, - /* search651_1_0 -> 41 in the cache */ - /* search651_1_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 41, 711 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1967, 1968 }, - -1, - } }, - - /* replace651_0 -> 711 in the cache */ - /* replace651_1_0 -> 21 in the cache */ - /* replace651_1_1_0 -> 41 in the cache */ - /* replace651_1_1 -> 683 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 21, 683 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 711, 1970 }, - -1, - } }, - - /* ('ior', ('fge', 0.0, 'a@64'), ('fge(is_used_once)', 'b@64', 0.0)) => ('fge', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search652_0_0 -> 711 in the cache */ - /* search652_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 711, 21 }, - -1, - } }, - /* search652_1_0 -> 41 in the cache */ - /* search652_1_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 41, 711 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1972, 1973 }, - -1, - } }, - - /* replace652_0 -> 711 in the cache */ - /* replace652_1_0 -> 21 in the cache */ - /* replace652_1_1_0 -> 41 in the cache */ - /* replace652_1_1 -> 683 in the cache */ - /* replace652_1 -> 1970 in the cache */ - /* replace652 -> 1971 in the cache */ - - /* ('~iand', ('flt(is_used_once)', 0.0, 'a@64'), ('flt', 'b@64', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search653_0_0 -> 711 in the cache */ - /* search653_0_1 -> 21 in the cache */ - /* search653_0 -> 1959 in the cache */ - /* search653_1_0 -> 41 in the cache */ - /* search653_1_1 -> 711 in the cache */ - /* search653_1 -> 1960 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1959, 1960 }, - -1, - } }, - - /* replace653_0 -> 711 in the cache */ - /* replace653_1_0 -> 21 in the cache */ - /* replace653_1_1_0 -> 41 in the cache */ - /* replace653_1_1 -> 683 in the cache */ - /* replace653_1 -> 1970 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 711, 1970 }, - -1, - } }, - - /* ('~iand', ('flt', 0.0, 'a@64'), ('flt(is_used_once)', 'b@64', 0.0)) => ('flt', 0.0, ('fmin', 'a', ('fneg', 'b'))) */ - /* search654_0_0 -> 711 in the cache */ - /* search654_0_1 -> 21 in the cache */ - /* search654_0 -> 1964 in the cache */ - /* search654_1_0 -> 41 in the cache */ - /* search654_1_1 -> 711 in the cache */ - /* search654_1 -> 1965 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1964, 1965 }, - -1, - } }, - - /* replace654_0 -> 711 in the cache */ - /* replace654_1_0 -> 21 in the cache */ - /* replace654_1_1_0 -> 41 in the cache */ - /* replace654_1_1 -> 683 in the cache */ - /* replace654_1 -> 1970 in the cache */ - /* replace654 -> 1976 in the cache */ - - /* ('~iand', ('fge(is_used_once)', 0.0, 'a@64'), ('fge', 'b@64', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search655_0_0 -> 711 in the cache */ - /* search655_0_1 -> 21 in the cache */ - /* search655_0 -> 1967 in the cache */ - /* search655_1_0 -> 41 in the cache */ - /* search655_1_1 -> 711 in the cache */ - /* search655_1 -> 1968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1967, 1968 }, - -1, - } }, - - /* replace655_0 -> 711 in the cache */ - /* replace655_1_0 -> 21 in the cache */ - /* replace655_1_1_0 -> 41 in the cache */ - /* replace655_1_1 -> 683 in the cache */ - /* replace655_1 -> 1962 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 711, 1962 }, - -1, - } }, - - /* ('~iand', ('fge', 0.0, 'a@64'), ('fge(is_used_once)', 'b@64', 0.0)) => ('fge', 0.0, ('fmax', 'a', ('fneg', 'b'))) */ - /* search656_0_0 -> 711 in the cache */ - /* search656_0_1 -> 21 in the cache */ - /* search656_0 -> 1972 in the cache */ - /* search656_1_0 -> 41 in the cache */ - /* search656_1_1 -> 711 in the cache */ - /* search656_1 -> 1973 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_iand, - 0, 1, - { 1972, 1973 }, - -1, - } }, - - /* replace656_0 -> 711 in the cache */ - /* replace656_1_0 -> 21 in the cache */ - /* replace656_1_1_0 -> 41 in the cache */ - /* replace656_1_1 -> 683 in the cache */ - /* replace656_1 -> 1962 in the cache */ - /* replace656 -> 1979 in the cache */ - - /* ('ior', ('feq(is_used_once)', 'a@64', 0.0), ('feq', 'b@64', 0.0)) => ('feq', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search657_0_0 -> 21 in the cache */ - /* search657_0_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 21, 711 }, - 0, - } }, - /* search657_1_0 -> 41 in the cache */ - /* search657_1_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 2, 1, - { 41, 711 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1981, 1982 }, - -1, - } }, - - /* replace657_0_0_0 -> 21 in the cache */ - /* replace657_0_0 -> 713 in the cache */ - /* replace657_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 713, 1984 }, - -1, - } }, - /* replace657_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1985, 711 }, - -1, - } }, - - /* ('ior', ('fneu(is_used_once)', 'a@64', 0.0), ('fneu', 'b@64', 0.0)) => ('fneu', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search658_0_0 -> 21 in the cache */ - /* search658_0_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 21, 711 }, - 0, - } }, - /* search658_1_0 -> 41 in the cache */ - /* search658_1_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 2, 1, - { 41, 711 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1987, 1988 }, - -1, - } }, - - /* replace658_0_0_0 -> 21 in the cache */ - /* replace658_0_0 -> 713 in the cache */ - /* replace658_0_1_0 -> 41 in the cache */ - /* replace658_0_1 -> 1984 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 713, 1984 }, - -1, - } }, - /* replace658_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1990, 711 }, - -1, - } }, - - /* ('iand', ('feq(is_used_once)', 'a@64', 0.0), ('feq', 'b@64', 0.0)) => ('feq', ('fadd', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search659_0_0 -> 21 in the cache */ - /* search659_0_1 -> 711 in the cache */ - /* search659_0 -> 1981 in the cache */ - /* search659_1_0 -> 41 in the cache */ - /* search659_1_1 -> 711 in the cache */ - /* search659_1 -> 1982 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1981, 1982 }, - -1, - } }, - - /* replace659_0_0_0 -> 21 in the cache */ - /* replace659_0_0 -> 713 in the cache */ - /* replace659_0_1_0 -> 41 in the cache */ - /* replace659_0_1 -> 1984 in the cache */ - /* replace659_0 -> 1990 in the cache */ - /* replace659_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 1990, 711 }, - -1, - } }, - - /* ('iand', ('fneu(is_used_once)', 'a@64', 0.0), ('fneu', 'b@64', 0.0)) => ('fneu', ('fmin', ('fabs', 'a'), ('fabs', 'b')), 0.0) */ - /* search660_0_0 -> 21 in the cache */ - /* search660_0_1 -> 711 in the cache */ - /* search660_0 -> 1987 in the cache */ - /* search660_1_0 -> 41 in the cache */ - /* search660_1_1 -> 711 in the cache */ - /* search660_1 -> 1988 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1987, 1988 }, - -1, - } }, - - /* replace660_0_0_0 -> 21 in the cache */ - /* replace660_0_0 -> 713 in the cache */ - /* replace660_0_1_0 -> 41 in the cache */ - /* replace660_0_1 -> 1984 in the cache */ - /* replace660_0 -> 1985 in the cache */ - /* replace660_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 1985, 711 }, - -1, - } }, - - /* ('bcsel@64', ('feq', 'a', 0.0), 1.0, ('i2f64', ('iadd', ('b2i64', ('flt', 0.0, 'a@64')), ('ineg', ('b2i64', ('flt', 'a@64', 0.0)))))) => ('i2f64', ('iadd', ('b2i32', ('!fge', 'a', 0.0)), ('ineg', ('b2i32', ('!flt', 'a', 0.0))))) */ - /* search661_0_0 -> 21 in the cache */ - /* search661_0_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 21, 711 }, - -1, - } }, - /* search661_1 -> 632 in the cache */ - /* search661_2_0_0_0_0 -> 711 in the cache */ - /* search661_2_0_0_0_1 -> 21 in the cache */ - /* search661_2_0_0_0 -> 1964 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2i64, - -1, 0, - { 1964 }, - -1, - } }, - /* search661_2_0_1_0_0_0 -> 21 in the cache */ - /* search661_2_0_1_0_0_1 -> 711 in the cache */ - /* search661_2_0_1_0_0 -> 712 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2i64, - -1, 0, - { 712 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1998 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 1997, 1999 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 1, - { 2000 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 1996, 632, 2001 }, - -1, - } }, - - /* replace661_0_0_0_0 -> 21 in the cache */ - /* replace661_0_0_0_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_fge, - -1, 0, - { 21, 711 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 2003 }, - -1, - } }, - /* replace661_0_1_0_0_0 -> 21 in the cache */ - /* replace661_0_1_0_0_1 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 21, 711 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 2005 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2006 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 2004, 2007 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 1, - { 2008 }, - -1, - } }, - - /* ('bcsel', 'a', ('b2f(is_used_once)', 'b@64'), ('b2f', 'c@64')) => ('b2f', ('bcsel', 'a', 'b', 'c')) */ - /* search662_0 -> 770 in the cache */ - /* search662_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 41 }, - 0, - } }, - /* search662_2_0 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 620 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 2010, 2011 }, - -1, - } }, - - /* replace662_0_0 -> 770 in the cache */ - /* replace662_0_1 -> 41 in the cache */ - /* replace662_0_2 -> 620 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 41, 620 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 2013 }, - -1, - } }, - - /* ('~i2f64', ('f2i', 'a@64')) => ('ftrunc', 'a') */ - /* search663_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_i2f64, - -1, 0, - { 2015 }, - -1, - } }, - - /* replace663_0 -> 21 in the cache */ - /* replace663 -> 710 in the cache */ - - /* ('~f2i64', ('i2f', 'a@64')) => a */ - /* search664_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_i2f, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2i64, - -1, 0, - { 2017 }, - -1, - } }, - - /* replace664 -> 21 in the cache */ - - /* ('~f2i64', ('u2f', 'a@64')) => a */ - /* search665_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_u2f, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2i64, - -1, 0, - { 2019 }, - -1, - } }, - - /* replace665 -> 21 in the cache */ - - /* ('~f2u64', ('i2f', 'a@64')) => a */ - /* search666_0_0 -> 21 in the cache */ - /* search666_0 -> 2017 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2u64, - -1, 0, - { 2017 }, - -1, - } }, - - /* replace666 -> 21 in the cache */ - - /* ('~f2u64', ('u2f', 'a@64')) => a */ - /* search667_0_0 -> 21 in the cache */ - /* search667_0 -> 2019 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2u64, - -1, 0, - { 2019 }, - -1, - } }, - - /* replace667 -> 21 in the cache */ - - /* ('fadd', ('b2f64', ('flt', 0.0, 'a@64')), ('fneg', ('b2f64', ('flt', 'a@64', 0.0)))) => ('fsign', 'a') */ - /* search668_0_0_0 -> 711 in the cache */ - /* search668_0_0_1 -> 21 in the cache */ - /* search668_0_0 -> 1964 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2f64, - -1, 0, - { 1964 }, - -1, - } }, - /* search668_1_0_0_0 -> 21 in the cache */ - /* search668_1_0_0_1 -> 711 in the cache */ - /* search668_1_0_0 -> 712 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2f64, - -1, 0, - { 712 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 2024 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 2023, 2025 }, - -1, - } }, - - /* replace668_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 21 }, - -1, - } }, - - /* ('iadd', ('b2i64', ('flt', 0, 'a@64')), ('ineg', ('b2i64', ('flt', 'a@64', 0)))) => ('f2i64', ('fsign', 'a')) */ - /* search669_0_0_0 -> 910 in the cache */ - /* search669_0_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 910, 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2i64, - -1, 0, - { 2028 }, - -1, - } }, - /* search669_1_0_0_0 -> 21 in the cache */ - /* search669_1_0_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 21, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2i64, - -1, 0, - { 2030 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2031 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 2029, 2032 }, - -1, - } }, - - /* replace669_0_0 -> 21 in the cache */ - /* replace669_0 -> 2027 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2i64, - -1, 0, - { 2027 }, - -1, - } }, - - /* ('~f2f64', ('f2f', 'a')) => ('f2f64', 'a') */ - /* search670_0_0 -> 32 in the cache */ - /* search670_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2f64, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace670_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2f64', ('u2f', 'a')) => ('u2f64', 'a') */ - /* search671_0_0 -> 32 in the cache */ - /* search671_0 -> 112 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2f64, - -1, 0, - { 112 }, - -1, - } }, - - /* replace671_0 -> 32 in the cache */ - /* replace671 -> 1861 in the cache */ - - /* ('~f2f64', ('i2f', 'a')) => ('i2f64', 'a') */ - /* search672_0_0 -> 32 in the cache */ - /* search672_0 -> 1254 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2f64, - -1, 0, - { 1254 }, - -1, - } }, - - /* replace672_0 -> 32 in the cache */ - /* replace672 -> 1863 in the cache */ - - /* ('~f2u64', ('f2f', 'a')) => ('f2u64', 'a') */ - /* search673_0_0 -> 32 in the cache */ - /* search673_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2u64, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace673_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2u64, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~f2i64', ('f2f', 'a')) => ('f2i64', 'a') */ - /* search674_0_0 -> 32 in the cache */ - /* search674_0 -> 1832 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_f2i64, - -1, 0, - { 1832 }, - -1, - } }, - - /* replace674_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2i64, - -1, 0, - { 32 }, - -1, - } }, - - /* ('i2f64', ('f2i', ('fsign', 'a@64'))) => ('fsign', 'a') */ - /* search675_0_0_0 -> 21 in the cache */ - /* search675_0_0 -> 2027 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 2027 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2043 }, - -1, - } }, - - /* replace675_0 -> 21 in the cache */ - /* replace675 -> 2027 in the cache */ - - /* ('i2i1', ('i2i8', 'a@1')) => a */ - /* search676_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 2045 }, - -1, - } }, - - /* replace676 -> 770 in the cache */ - - /* ('u2u1', ('u2u8', 'a@1')) => a */ - /* search677_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 2047 }, - -1, - } }, - - /* replace677 -> 770 in the cache */ - - /* ('i2i1', ('i2i16', 'a@1')) => a */ - /* search678_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 2049 }, - -1, - } }, - - /* replace678 -> 770 in the cache */ - - /* ('u2u1', ('u2u16', 'a@1')) => a */ - /* search679_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 2051 }, - -1, - } }, - - /* replace679 -> 770 in the cache */ - - /* ('u2f16', ('u2u8', 'a@1')) => ('u2f16', 'a') */ - /* search680_0_0 -> 770 in the cache */ - /* search680_0 -> 2047 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2047 }, - -1, - } }, - - /* replace680_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 770 }, - -1, - } }, - - /* ('i2f16', ('i2i8', 'a@1')) => ('i2f16', 'a') */ - /* search681_0_0 -> 770 in the cache */ - /* search681_0 -> 2045 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2045 }, - -1, - } }, - - /* replace681_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 770 }, - -1, - } }, - - /* ('u2f16', ('u2u16', 'a@1')) => ('u2f16', 'a') */ - /* search682_0_0 -> 770 in the cache */ - /* search682_0 -> 2051 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2051 }, - -1, - } }, - - /* replace682_0 -> 770 in the cache */ - /* replace682 -> 2054 in the cache */ - - /* ('i2f16', ('i2i16', 'a@1')) => ('i2f16', 'a') */ - /* search683_0_0 -> 770 in the cache */ - /* search683_0 -> 2049 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2049 }, - -1, - } }, - - /* replace683_0 -> 770 in the cache */ - /* replace683 -> 2056 in the cache */ - - /* ('u2f16', ('u2u32', 'a@1')) => ('u2f16', 'a') */ - /* search684_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2059 }, - -1, - } }, - - /* replace684_0 -> 770 in the cache */ - /* replace684 -> 2054 in the cache */ - - /* ('i2f16', ('i2i32', 'a@1')) => ('i2f16', 'a') */ - /* search685_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2061 }, - -1, - } }, - - /* replace685_0 -> 770 in the cache */ - /* replace685 -> 2056 in the cache */ - - /* ('u2f16', ('u2u64', 'a@1')) => ('u2f16', 'a') */ - /* search686_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2063 }, - -1, - } }, - - /* replace686_0 -> 770 in the cache */ - /* replace686 -> 2054 in the cache */ - - /* ('i2f16', ('i2i64', 'a@1')) => ('i2f16', 'a') */ - /* search687_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2065 }, - -1, - } }, - - /* replace687_0 -> 770 in the cache */ - /* replace687 -> 2056 in the cache */ - - /* ('i2i1', ('i2i32', 'a@1')) => a */ - /* search688_0_0 -> 770 in the cache */ - /* search688_0 -> 2061 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 2061 }, - -1, - } }, - - /* replace688 -> 770 in the cache */ - - /* ('u2u1', ('u2u32', 'a@1')) => a */ - /* search689_0_0 -> 770 in the cache */ - /* search689_0 -> 2059 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 2059 }, - -1, - } }, - - /* replace689 -> 770 in the cache */ - - /* ('u2f32', ('u2u8', 'a@1')) => ('u2f32', 'a') */ - /* search690_0_0 -> 770 in the cache */ - /* search690_0 -> 2047 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2047 }, - -1, - } }, - - /* replace690_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 770 }, - -1, - } }, - - /* ('i2f32', ('i2i8', 'a@1')) => ('i2f32', 'a') */ - /* search691_0_0 -> 770 in the cache */ - /* search691_0 -> 2045 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2045 }, - -1, - } }, - - /* replace691_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 770 }, - -1, - } }, - - /* ('u2f32', ('u2u16', 'a@1')) => ('u2f32', 'a') */ - /* search692_0_0 -> 770 in the cache */ - /* search692_0 -> 2051 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2051 }, - -1, - } }, - - /* replace692_0 -> 770 in the cache */ - /* replace692 -> 2070 in the cache */ - - /* ('i2f32', ('i2i16', 'a@1')) => ('i2f32', 'a') */ - /* search693_0_0 -> 770 in the cache */ - /* search693_0 -> 2049 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2049 }, - -1, - } }, - - /* replace693_0 -> 770 in the cache */ - /* replace693 -> 2072 in the cache */ - - /* ('u2f32', ('u2u32', 'a@1')) => ('u2f32', 'a') */ - /* search694_0_0 -> 770 in the cache */ - /* search694_0 -> 2059 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2059 }, - -1, - } }, - - /* replace694_0 -> 770 in the cache */ - /* replace694 -> 2070 in the cache */ - - /* ('i2f32', ('i2i32', 'a@1')) => ('i2f32', 'a') */ - /* search695_0_0 -> 770 in the cache */ - /* search695_0 -> 2061 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2061 }, - -1, - } }, - - /* replace695_0 -> 770 in the cache */ - /* replace695 -> 2072 in the cache */ - - /* ('u2f32', ('u2u64', 'a@1')) => ('u2f32', 'a') */ - /* search696_0_0 -> 770 in the cache */ - /* search696_0 -> 2063 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2063 }, - -1, - } }, - - /* replace696_0 -> 770 in the cache */ - /* replace696 -> 2070 in the cache */ - - /* ('i2f32', ('i2i64', 'a@1')) => ('i2f32', 'a') */ - /* search697_0_0 -> 770 in the cache */ - /* search697_0 -> 2065 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2065 }, - -1, - } }, - - /* replace697_0 -> 770 in the cache */ - /* replace697 -> 2072 in the cache */ - - /* ('i2i1', ('i2i64', 'a@1')) => a */ - /* search698_0_0 -> 770 in the cache */ - /* search698_0 -> 2065 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 2065 }, - -1, - } }, - - /* replace698 -> 770 in the cache */ - - /* ('u2u1', ('u2u64', 'a@1')) => a */ - /* search699_0_0 -> 770 in the cache */ - /* search699_0 -> 2063 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 2063 }, - -1, - } }, - - /* replace699 -> 770 in the cache */ - - /* ('u2f64', ('u2u8', 'a@1')) => ('u2f64', 'a') */ - /* search700_0_0 -> 770 in the cache */ - /* search700_0 -> 2047 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2047 }, - -1, - } }, - - /* replace700_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 770 }, - -1, - } }, - - /* ('i2f64', ('i2i8', 'a@1')) => ('i2f64', 'a') */ - /* search701_0_0 -> 770 in the cache */ - /* search701_0 -> 2045 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2045 }, - -1, - } }, - - /* replace701_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 770 }, - -1, - } }, - - /* ('u2f64', ('u2u16', 'a@1')) => ('u2f64', 'a') */ - /* search702_0_0 -> 770 in the cache */ - /* search702_0 -> 2051 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2051 }, - -1, - } }, - - /* replace702_0 -> 770 in the cache */ - /* replace702 -> 2082 in the cache */ - - /* ('i2f64', ('i2i16', 'a@1')) => ('i2f64', 'a') */ - /* search703_0_0 -> 770 in the cache */ - /* search703_0 -> 2049 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2049 }, - -1, - } }, - - /* replace703_0 -> 770 in the cache */ - /* replace703 -> 2084 in the cache */ - - /* ('u2f64', ('u2u32', 'a@1')) => ('u2f64', 'a') */ - /* search704_0_0 -> 770 in the cache */ - /* search704_0 -> 2059 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2059 }, - -1, - } }, - - /* replace704_0 -> 770 in the cache */ - /* replace704 -> 2082 in the cache */ - - /* ('i2f64', ('i2i32', 'a@1')) => ('i2f64', 'a') */ - /* search705_0_0 -> 770 in the cache */ - /* search705_0 -> 2061 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2061 }, - -1, - } }, - - /* replace705_0 -> 770 in the cache */ - /* replace705 -> 2084 in the cache */ - - /* ('u2f64', ('u2u64', 'a@1')) => ('u2f64', 'a') */ - /* search706_0_0 -> 770 in the cache */ - /* search706_0 -> 2063 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2063 }, - -1, - } }, - - /* replace706_0 -> 770 in the cache */ - /* replace706 -> 2082 in the cache */ - - /* ('i2f64', ('i2i64', 'a@1')) => ('i2f64', 'a') */ - /* search707_0_0 -> 770 in the cache */ - /* search707_0 -> 2065 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2065 }, - -1, - } }, - - /* replace707_0 -> 770 in the cache */ - /* replace707 -> 2084 in the cache */ - - /* ('i2i8', ('i2i16', 'a@8')) => a */ - /* search708_0_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 2091 }, - -1, - } }, - - /* replace708 -> 6 in the cache */ - - /* ('u2u8', ('u2u16', 'a@8')) => a */ - /* search709_0_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 2093 }, - -1, - } }, - - /* replace709 -> 6 in the cache */ - - /* ('u2f16', ('u2u16', 'a@8')) => ('u2f16', 'a') */ - /* search710_0_0 -> 6 in the cache */ - /* search710_0 -> 2093 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2093 }, - -1, - } }, - - /* replace710_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 6 }, - -1, - } }, - - /* ('i2f16', ('i2i16', 'a@8')) => ('i2f16', 'a') */ - /* search711_0_0 -> 6 in the cache */ - /* search711_0 -> 2091 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2091 }, - -1, - } }, - - /* replace711_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 6 }, - -1, - } }, - - /* ('u2f16', ('u2u32', 'a@8')) => ('u2f16', 'a') */ - /* search712_0_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2099 }, - -1, - } }, - - /* replace712_0 -> 6 in the cache */ - /* replace712 -> 2096 in the cache */ - - /* ('i2f16', ('i2i32', 'a@8')) => ('i2f16', 'a') */ - /* search713_0_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2101 }, - -1, - } }, - - /* replace713_0 -> 6 in the cache */ - /* replace713 -> 2098 in the cache */ - - /* ('u2f16', ('u2u64', 'a@8')) => ('u2f16', 'a') */ - /* search714_0_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2103 }, - -1, - } }, - - /* replace714_0 -> 6 in the cache */ - /* replace714 -> 2096 in the cache */ - - /* ('i2f16', ('i2i64', 'a@8')) => ('i2f16', 'a') */ - /* search715_0_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2105 }, - -1, - } }, - - /* replace715_0 -> 6 in the cache */ - /* replace715 -> 2098 in the cache */ - - /* ('i2i8', ('i2i32', 'a@8')) => a */ - /* search716_0_0 -> 6 in the cache */ - /* search716_0 -> 2101 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 2101 }, - -1, - } }, - - /* replace716 -> 6 in the cache */ - - /* ('u2u8', ('u2u32', 'a@8')) => a */ - /* search717_0_0 -> 6 in the cache */ - /* search717_0 -> 2099 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 2099 }, - -1, - } }, - - /* replace717 -> 6 in the cache */ - - /* ('u2f32', ('u2u16', 'a@8')) => ('u2f32', 'a') */ - /* search718_0_0 -> 6 in the cache */ - /* search718_0 -> 2093 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2093 }, - -1, - } }, - - /* replace718_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 6 }, - -1, - } }, - - /* ('i2f32', ('i2i16', 'a@8')) => ('i2f32', 'a') */ - /* search719_0_0 -> 6 in the cache */ - /* search719_0 -> 2091 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2091 }, - -1, - } }, - - /* replace719_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 6 }, - -1, - } }, - - /* ('u2f32', ('u2u32', 'a@8')) => ('u2f32', 'a') */ - /* search720_0_0 -> 6 in the cache */ - /* search720_0 -> 2099 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2099 }, - -1, - } }, - - /* replace720_0 -> 6 in the cache */ - /* replace720 -> 2110 in the cache */ - - /* ('i2f32', ('i2i32', 'a@8')) => ('i2f32', 'a') */ - /* search721_0_0 -> 6 in the cache */ - /* search721_0 -> 2101 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2101 }, - -1, - } }, - - /* replace721_0 -> 6 in the cache */ - /* replace721 -> 2112 in the cache */ - - /* ('u2f32', ('u2u64', 'a@8')) => ('u2f32', 'a') */ - /* search722_0_0 -> 6 in the cache */ - /* search722_0 -> 2103 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2103 }, - -1, - } }, - - /* replace722_0 -> 6 in the cache */ - /* replace722 -> 2110 in the cache */ - - /* ('i2f32', ('i2i64', 'a@8')) => ('i2f32', 'a') */ - /* search723_0_0 -> 6 in the cache */ - /* search723_0 -> 2105 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2105 }, - -1, - } }, - - /* replace723_0 -> 6 in the cache */ - /* replace723 -> 2112 in the cache */ - - /* ('i2i8', ('i2i64', 'a@8')) => a */ - /* search724_0_0 -> 6 in the cache */ - /* search724_0 -> 2105 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 2105 }, - -1, - } }, - - /* replace724 -> 6 in the cache */ - - /* ('u2u8', ('u2u64', 'a@8')) => a */ - /* search725_0_0 -> 6 in the cache */ - /* search725_0 -> 2103 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 2103 }, - -1, - } }, - - /* replace725 -> 6 in the cache */ - - /* ('u2f64', ('u2u16', 'a@8')) => ('u2f64', 'a') */ - /* search726_0_0 -> 6 in the cache */ - /* search726_0 -> 2093 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2093 }, - -1, - } }, - - /* replace726_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 6 }, - -1, - } }, - - /* ('i2f64', ('i2i16', 'a@8')) => ('i2f64', 'a') */ - /* search727_0_0 -> 6 in the cache */ - /* search727_0 -> 2091 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2091 }, - -1, - } }, - - /* replace727_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 6 }, - -1, - } }, - - /* ('u2f64', ('u2u32', 'a@8')) => ('u2f64', 'a') */ - /* search728_0_0 -> 6 in the cache */ - /* search728_0 -> 2099 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2099 }, - -1, - } }, - - /* replace728_0 -> 6 in the cache */ - /* replace728 -> 2120 in the cache */ - - /* ('i2f64', ('i2i32', 'a@8')) => ('i2f64', 'a') */ - /* search729_0_0 -> 6 in the cache */ - /* search729_0 -> 2101 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2101 }, - -1, - } }, - - /* replace729_0 -> 6 in the cache */ - /* replace729 -> 2122 in the cache */ - - /* ('u2f64', ('u2u64', 'a@8')) => ('u2f64', 'a') */ - /* search730_0_0 -> 6 in the cache */ - /* search730_0 -> 2103 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2103 }, - -1, - } }, - - /* replace730_0 -> 6 in the cache */ - /* replace730 -> 2120 in the cache */ - - /* ('i2f64', ('i2i64', 'a@8')) => ('i2f64', 'a') */ - /* search731_0_0 -> 6 in the cache */ - /* search731_0 -> 2105 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2105 }, - -1, - } }, - - /* replace731_0 -> 6 in the cache */ - /* replace731 -> 2122 in the cache */ - - /* ('i2i16', ('i2i32', 'a@16')) => a */ - /* search732_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 2127 }, - -1, - } }, - - /* replace732 -> 11 in the cache */ - - /* ('u2u16', ('u2u32', 'a@16')) => a */ - /* search733_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2129 }, - -1, - } }, - - /* replace733 -> 11 in the cache */ - - /* ('u2f32', ('u2u32', 'a@16')) => ('u2f32', 'a') */ - /* search734_0_0 -> 11 in the cache */ - /* search734_0 -> 2129 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2129 }, - -1, - } }, - - /* replace734_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 11 }, - -1, - } }, - - /* ('i2f32', ('i2i32', 'a@16')) => ('i2f32', 'a') */ - /* search735_0_0 -> 11 in the cache */ - /* search735_0 -> 2127 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2127 }, - -1, - } }, - - /* replace735_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 11 }, - -1, - } }, - - /* ('u2f32', ('u2u64', 'a@16')) => ('u2f32', 'a') */ - /* search736_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 2135 }, - -1, - } }, - - /* replace736_0 -> 11 in the cache */ - /* replace736 -> 2132 in the cache */ - - /* ('i2f32', ('i2i64', 'a@16')) => ('i2f32', 'a') */ - /* search737_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2137 }, - -1, - } }, - - /* replace737_0 -> 11 in the cache */ - /* replace737 -> 2134 in the cache */ - - /* ('i2i16', ('i2i64', 'a@16')) => a */ - /* search738_0_0 -> 11 in the cache */ - /* search738_0 -> 2137 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 2137 }, - -1, - } }, - - /* replace738 -> 11 in the cache */ - - /* ('u2u16', ('u2u64', 'a@16')) => a */ - /* search739_0_0 -> 11 in the cache */ - /* search739_0 -> 2135 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2135 }, - -1, - } }, - - /* replace739 -> 11 in the cache */ - - /* ('u2f64', ('u2u32', 'a@16')) => ('u2f64', 'a') */ - /* search740_0_0 -> 11 in the cache */ - /* search740_0 -> 2129 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2129 }, - -1, - } }, - - /* replace740_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 11 }, - -1, - } }, - - /* ('i2f64', ('i2i32', 'a@16')) => ('i2f64', 'a') */ - /* search741_0_0 -> 11 in the cache */ - /* search741_0 -> 2127 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2127 }, - -1, - } }, - - /* replace741_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 11 }, - -1, - } }, - - /* ('u2f64', ('u2u64', 'a@16')) => ('u2f64', 'a') */ - /* search742_0_0 -> 11 in the cache */ - /* search742_0 -> 2135 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2135 }, - -1, - } }, - - /* replace742_0 -> 11 in the cache */ - /* replace742 -> 2142 in the cache */ - - /* ('i2f64', ('i2i64', 'a@16')) => ('i2f64', 'a') */ - /* search743_0_0 -> 11 in the cache */ - /* search743_0 -> 2137 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2137 }, - -1, - } }, - - /* replace743_0 -> 11 in the cache */ - /* replace743 -> 2144 in the cache */ - - /* ('i2i32', ('i2i64', 'a@32')) => a */ - /* search744_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2147 }, - -1, - } }, - - /* replace744 -> 16 in the cache */ - - /* ('u2u32', ('u2u64', 'a@32')) => a */ - /* search745_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2149 }, - -1, - } }, - - /* replace745 -> 16 in the cache */ - - /* ('u2f64', ('u2u64', 'a@32')) => ('u2f64', 'a') */ - /* search746_0_0 -> 16 in the cache */ - /* search746_0 -> 2149 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 2149 }, - -1, - } }, - - /* replace746_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2f64, - -1, 0, - { 16 }, - -1, - } }, - - /* ('i2f64', ('i2i64', 'a@32')) => ('i2f64', 'a') */ - /* search747_0_0 -> 16 in the cache */ - /* search747_0 -> 2147 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 2147 }, - -1, - } }, - - /* replace747_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2f64, - -1, 0, - { 16 }, - -1, - } }, - - /* ('f2fmp', ('u2f32', 'a@32')) => ('u2fmp', 'a') */ - /* search748_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 2155 }, - -1, - } }, - - /* replace748_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2fmp, - -1, 0, - { 16 }, - -1, - } }, - - /* ('f2fmp', ('i2f32', 'a@32')) => ('i2fmp', 'a') */ - /* search749_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 2158 }, - -1, - } }, - - /* replace749_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2fmp, - -1, 0, - { 16 }, - -1, - } }, - - /* ('f2u16', ('f2fmp', 'a@32')) => ('f2u16', 'a') */ - /* search750_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2u16, - -1, 0, - { 2161 }, - -1, - } }, - - /* replace750_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2u16, - -1, 0, - { 16 }, - -1, - } }, - - /* ('f2i16', ('f2fmp', 'a@32')) => ('f2i16', 'a') */ - /* search751_0_0 -> 16 in the cache */ - /* search751_0 -> 2161 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2i16, - -1, 0, - { 2161 }, - -1, - } }, - - /* replace751_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2i16, - -1, 0, - { 16 }, - -1, - } }, - - /* ('i2imp', ('f2u32', 'a@32')) => ('f2ump', 'a') */ - /* search752_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2u32, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 2166 }, - -1, - } }, - - /* replace752_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2ump, - -1, 0, - { 16 }, - -1, - } }, - - /* ('i2imp', ('f2i32', 'a@32')) => ('f2imp', 'a') */ - /* search753_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 2169 }, - -1, - } }, - - /* replace753_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2imp, - -1, 0, - { 16 }, - -1, - } }, - - /* ('u2f16', ('i2imp', 'a@32')) => ('u2f16', 'a') */ - /* search754_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 2172 }, - -1, - } }, - - /* replace754_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 16 }, - -1, - } }, - - /* ('i2f16', ('i2imp', 'a@32')) => ('i2f16', 'a') */ - /* search755_0_0 -> 16 in the cache */ - /* search755_0 -> 2172 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 2172 }, - -1, - } }, - - /* replace755_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 16 }, - -1, - } }, - - /* ('iand', ('u2u16', ('u2u8', 'a@16')), '#b') => ('iand', 'a', ('iand', 'b', 255)) */ - /* search756_0_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2177 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 16 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2178, 2179 }, - -1, - } }, - - /* replace756_0 -> 11 in the cache */ - /* replace756_1_0 -> 268 in the cache */ - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0xff /* 255 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 268, 2181 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 11, 2182 }, - -1, - } }, - - /* ('u2u16', ('u2u8(is_used_once)', ('iand', 'a@16', '#b'))) => ('iand', 'a', ('iand', 'b', 255)) */ - /* search757_0_0_0 -> 11 in the cache */ - /* search757_0_0_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 11, 2179 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2184 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 1, - { 2185 }, - -1, - } }, - - /* replace757_0 -> 11 in the cache */ - /* replace757_1_0 -> 268 in the cache */ - /* replace757_1_1 -> 2181 in the cache */ - /* replace757_1 -> 2182 in the cache */ - /* replace757 -> 2183 in the cache */ - - /* ('u2u8', ('iand', ('u2u16', ('u2u8', 'a@16')), ('u2u16', ('u2u8', 'b@16')))) => ('u2u8', ('iand', 'a', 'b')) */ - /* search758_0_0_0_0 -> 11 in the cache */ - /* search758_0_0_0 -> 2177 in the cache */ - /* search758_0_0 -> 2178 in the cache */ - /* search758_0_1_0_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2187 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2178, 2188 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2189 }, - -1, - } }, - - /* replace758_0_0 -> 11 in the cache */ - /* replace758_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 11, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2191 }, - -1, - } }, - - /* ('u2u8', ('iand', ('u2u16', ('u2u8', 'a@32')), ('u2u16', ('u2u8', 'b@32')))) => ('u2u8', ('iand', 'a', 'b')) */ - /* search759_0_0_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2193 }, - -1, - } }, - /* search759_0_1_0_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2195 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2194, 2196 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2197 }, - -1, - } }, - - /* replace759_0_0 -> 16 in the cache */ - /* replace759_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2199 }, - -1, - } }, - - /* ('iand', ('extract_i8', 'a', '#b'), ('extract_i8', 'c', 'b')) => ('extract_i8', ('iand', 'a', 'c'), 'b') */ - /* search760_0_0 -> 0 in the cache */ - /* search760_0_1 -> 834 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 0, 834 }, - -1, - } }, - /* search760_1_0 -> 146 in the cache */ - /* search760_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 146, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2201, 2202 }, - -1, - } }, - - /* replace760_0_0 -> 0 in the cache */ - /* replace760_0_1 -> 146 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 0, 146 }, - -1, - } }, - /* replace760_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 1, - { 2204, 3 }, - -1, - } }, - - /* ('iand', ('extract_u8', 'a', '#b'), ('extract_u8', 'c', 'b')) => ('extract_u8', ('iand', 'a', 'c'), 'b') */ - /* search761_0_0 -> 0 in the cache */ - /* search761_0_1 -> 834 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 0, 834 }, - -1, - } }, - /* search761_1_0 -> 146 in the cache */ - /* search761_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 146, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2206, 2207 }, - -1, - } }, - - /* replace761_0_0 -> 0 in the cache */ - /* replace761_0_1 -> 146 in the cache */ - /* replace761_0 -> 2204 in the cache */ - /* replace761_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 1, - { 2204, 3 }, - -1, - } }, - - /* ('iand', ('extract_i16', 'a', '#b'), ('extract_i16', 'c', 'b')) => ('extract_i16', ('iand', 'a', 'c'), 'b') */ - /* search762_0_0 -> 0 in the cache */ - /* search762_0_1 -> 834 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 0, 834 }, - -1, - } }, - /* search762_1_0 -> 146 in the cache */ - /* search762_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 146, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2210, 2211 }, - -1, - } }, - - /* replace762_0_0 -> 0 in the cache */ - /* replace762_0_1 -> 146 in the cache */ - /* replace762_0 -> 2204 in the cache */ - /* replace762_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i16, - -1, 1, - { 2204, 3 }, - -1, - } }, - - /* ('iand', ('extract_u16', 'a', '#b'), ('extract_u16', 'c', 'b')) => ('extract_u16', ('iand', 'a', 'c'), 'b') */ - /* search763_0_0 -> 0 in the cache */ - /* search763_0_1 -> 834 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 0, 834 }, - -1, - } }, - /* search763_1_0 -> 146 in the cache */ - /* search763_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 146, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2214, 2215 }, - -1, - } }, - - /* replace763_0_0 -> 0 in the cache */ - /* replace763_0_1 -> 146 in the cache */ - /* replace763_0 -> 2204 in the cache */ - /* replace763_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 1, - { 2204, 3 }, - -1, - } }, - - /* ('iand', ('ushr(is_used_once)', 'a', '#b'), ('ushr', 'c', 'b')) => ('ushr', ('iand', 'a', 'c'), 'b') */ - /* search764_0_0 -> 132 in the cache */ - /* search764_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 132, 33 }, - 0, - } }, - /* search764_1_0 -> 135 in the cache */ - /* search764_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 135, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2218, 2219 }, - -1, - } }, - - /* replace764_0_0 -> 132 in the cache */ - /* replace764_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 132, 135 }, - -1, - } }, - /* replace764_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 2221, 36 }, - -1, - } }, - - /* ('iand', ('ishr(is_used_once)', 'a', '#b'), ('ishr', 'c', 'b')) => ('ishr', ('iand', 'a', 'c'), 'b') */ - /* search765_0_0 -> 132 in the cache */ - /* search765_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 132, 33 }, - 0, - } }, - /* search765_1_0 -> 135 in the cache */ - /* search765_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 135, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2223, 2224 }, - -1, - } }, - - /* replace765_0_0 -> 132 in the cache */ - /* replace765_0_1 -> 135 in the cache */ - /* replace765_0 -> 2221 in the cache */ - /* replace765_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 2221, 36 }, - -1, - } }, - - /* ('iand', ('ishl(is_used_once)', 'a', '#b'), ('ishl', 'c', 'b')) => ('ishl', ('iand', 'a', 'c'), 'b') */ - /* search766_0_0 -> 132 in the cache */ - /* search766_0_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 132, 33 }, - 0, - } }, - /* search766_1_0 -> 135 in the cache */ - /* search766_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 135, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2227, 2228 }, - -1, - } }, - - /* replace766_0_0 -> 132 in the cache */ - /* replace766_0_1 -> 135 in the cache */ - /* replace766_0 -> 2221 in the cache */ - /* replace766_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 2221, 36 }, - -1, - } }, - - /* ('u2u8', ('ior', ('u2u16', ('u2u8', 'a@16')), ('u2u16', ('u2u8', 'b@16')))) => ('u2u8', ('ior', 'a', 'b')) */ - /* search767_0_0_0_0 -> 11 in the cache */ - /* search767_0_0_0 -> 2177 in the cache */ - /* search767_0_0 -> 2178 in the cache */ - /* search767_0_1_0_0 -> 268 in the cache */ - /* search767_0_1_0 -> 2187 in the cache */ - /* search767_0_1 -> 2188 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2178, 2188 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2231 }, - -1, - } }, - - /* replace767_0_0 -> 11 in the cache */ - /* replace767_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 11, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2233 }, - -1, - } }, - - /* ('u2u8', ('ior', ('u2u16', ('u2u8', 'a@32')), ('u2u16', ('u2u8', 'b@32')))) => ('u2u8', ('ior', 'a', 'b')) */ - /* search768_0_0_0_0 -> 16 in the cache */ - /* search768_0_0_0 -> 2193 in the cache */ - /* search768_0_0 -> 2194 in the cache */ - /* search768_0_1_0_0 -> 36 in the cache */ - /* search768_0_1_0 -> 2195 in the cache */ - /* search768_0_1 -> 2196 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2194, 2196 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2235 }, - -1, - } }, - - /* replace768_0_0 -> 16 in the cache */ - /* replace768_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2237 }, - -1, - } }, - - /* ('ior', ('extract_i8', 'a', '#b'), ('extract_i8', 'c', 'b')) => ('extract_i8', ('ior', 'a', 'c'), 'b') */ - /* search769_0_0 -> 0 in the cache */ - /* search769_0_1 -> 834 in the cache */ - /* search769_0 -> 2201 in the cache */ - /* search769_1_0 -> 146 in the cache */ - /* search769_1_1 -> 3 in the cache */ - /* search769_1 -> 2202 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2201, 2202 }, - -1, - } }, - - /* replace769_0_0 -> 0 in the cache */ - /* replace769_0_1 -> 146 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 0, 146 }, - -1, - } }, - /* replace769_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 1, - { 2240, 3 }, - -1, - } }, - - /* ('ior', ('extract_u8', 'a', '#b'), ('extract_u8', 'c', 'b')) => ('extract_u8', ('ior', 'a', 'c'), 'b') */ - /* search770_0_0 -> 0 in the cache */ - /* search770_0_1 -> 834 in the cache */ - /* search770_0 -> 2206 in the cache */ - /* search770_1_0 -> 146 in the cache */ - /* search770_1_1 -> 3 in the cache */ - /* search770_1 -> 2207 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2206, 2207 }, - -1, - } }, - - /* replace770_0_0 -> 0 in the cache */ - /* replace770_0_1 -> 146 in the cache */ - /* replace770_0 -> 2240 in the cache */ - /* replace770_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 1, - { 2240, 3 }, - -1, - } }, - - /* ('ior', ('extract_i16', 'a', '#b'), ('extract_i16', 'c', 'b')) => ('extract_i16', ('ior', 'a', 'c'), 'b') */ - /* search771_0_0 -> 0 in the cache */ - /* search771_0_1 -> 834 in the cache */ - /* search771_0 -> 2210 in the cache */ - /* search771_1_0 -> 146 in the cache */ - /* search771_1_1 -> 3 in the cache */ - /* search771_1 -> 2211 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2210, 2211 }, - -1, - } }, - - /* replace771_0_0 -> 0 in the cache */ - /* replace771_0_1 -> 146 in the cache */ - /* replace771_0 -> 2240 in the cache */ - /* replace771_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i16, - -1, 1, - { 2240, 3 }, - -1, - } }, - - /* ('ior', ('extract_u16', 'a', '#b'), ('extract_u16', 'c', 'b')) => ('extract_u16', ('ior', 'a', 'c'), 'b') */ - /* search772_0_0 -> 0 in the cache */ - /* search772_0_1 -> 834 in the cache */ - /* search772_0 -> 2214 in the cache */ - /* search772_1_0 -> 146 in the cache */ - /* search772_1_1 -> 3 in the cache */ - /* search772_1 -> 2215 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2214, 2215 }, - -1, - } }, - - /* replace772_0_0 -> 0 in the cache */ - /* replace772_0_1 -> 146 in the cache */ - /* replace772_0 -> 2240 in the cache */ - /* replace772_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 1, - { 2240, 3 }, - -1, - } }, - - /* ('ior', ('ushr(is_used_once)', 'a', '#b'), ('ushr', 'c', 'b')) => ('ushr', ('ior', 'a', 'c'), 'b') */ - /* search773_0_0 -> 132 in the cache */ - /* search773_0_1 -> 33 in the cache */ - /* search773_0 -> 2218 in the cache */ - /* search773_1_0 -> 135 in the cache */ - /* search773_1_1 -> 36 in the cache */ - /* search773_1 -> 2219 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2218, 2219 }, - -1, - } }, - - /* replace773_0_0 -> 132 in the cache */ - /* replace773_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 132, 135 }, - -1, - } }, - /* replace773_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 2249, 36 }, - -1, - } }, - - /* ('ior', ('ishr(is_used_once)', 'a', '#b'), ('ishr', 'c', 'b')) => ('ishr', ('ior', 'a', 'c'), 'b') */ - /* search774_0_0 -> 132 in the cache */ - /* search774_0_1 -> 33 in the cache */ - /* search774_0 -> 2223 in the cache */ - /* search774_1_0 -> 135 in the cache */ - /* search774_1_1 -> 36 in the cache */ - /* search774_1 -> 2224 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2223, 2224 }, - -1, - } }, - - /* replace774_0_0 -> 132 in the cache */ - /* replace774_0_1 -> 135 in the cache */ - /* replace774_0 -> 2249 in the cache */ - /* replace774_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 2249, 36 }, - -1, - } }, - - /* ('ior', ('ishl(is_used_once)', 'a', '#b'), ('ishl', 'c', 'b')) => ('ishl', ('ior', 'a', 'c'), 'b') */ - /* search775_0_0 -> 132 in the cache */ - /* search775_0_1 -> 33 in the cache */ - /* search775_0 -> 2227 in the cache */ - /* search775_1_0 -> 135 in the cache */ - /* search775_1_1 -> 36 in the cache */ - /* search775_1 -> 2228 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2227, 2228 }, - -1, - } }, - - /* replace775_0_0 -> 132 in the cache */ - /* replace775_0_1 -> 135 in the cache */ - /* replace775_0 -> 2249 in the cache */ - /* replace775_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 2249, 36 }, - -1, - } }, - - /* ('u2u8', ('ixor', ('u2u16', ('u2u8', 'a@16')), ('u2u16', ('u2u8', 'b@16')))) => ('u2u8', ('ixor', 'a', 'b')) */ - /* search776_0_0_0_0 -> 11 in the cache */ - /* search776_0_0_0 -> 2177 in the cache */ - /* search776_0_0 -> 2178 in the cache */ - /* search776_0_1_0_0 -> 268 in the cache */ - /* search776_0_1_0 -> 2187 in the cache */ - /* search776_0_1 -> 2188 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2178, 2188 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2255 }, - -1, - } }, - - /* replace776_0_0 -> 11 in the cache */ - /* replace776_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 11, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2257 }, - -1, - } }, - - /* ('u2u8', ('ixor', ('u2u16', ('u2u8', 'a@32')), ('u2u16', ('u2u8', 'b@32')))) => ('u2u8', ('ixor', 'a', 'b')) */ - /* search777_0_0_0_0 -> 16 in the cache */ - /* search777_0_0_0 -> 2193 in the cache */ - /* search777_0_0 -> 2194 in the cache */ - /* search777_0_1_0_0 -> 36 in the cache */ - /* search777_0_1_0 -> 2195 in the cache */ - /* search777_0_1 -> 2196 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2194, 2196 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2259 }, - -1, - } }, - - /* replace777_0_0 -> 16 in the cache */ - /* replace777_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 1, - { 2261 }, - -1, - } }, - - /* ('ixor', ('extract_i8', 'a', '#b'), ('extract_i8', 'c', 'b')) => ('extract_i8', ('ixor', 'a', 'c'), 'b') */ - /* search778_0_0 -> 0 in the cache */ - /* search778_0_1 -> 834 in the cache */ - /* search778_0 -> 2201 in the cache */ - /* search778_1_0 -> 146 in the cache */ - /* search778_1_1 -> 3 in the cache */ - /* search778_1 -> 2202 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2201, 2202 }, - -1, - } }, - - /* replace778_0_0 -> 0 in the cache */ - /* replace778_0_1 -> 146 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 0, 146 }, - -1, - } }, - /* replace778_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 1, - { 2264, 3 }, - -1, - } }, - - /* ('ixor', ('extract_u8', 'a', '#b'), ('extract_u8', 'c', 'b')) => ('extract_u8', ('ixor', 'a', 'c'), 'b') */ - /* search779_0_0 -> 0 in the cache */ - /* search779_0_1 -> 834 in the cache */ - /* search779_0 -> 2206 in the cache */ - /* search779_1_0 -> 146 in the cache */ - /* search779_1_1 -> 3 in the cache */ - /* search779_1 -> 2207 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2206, 2207 }, - -1, - } }, - - /* replace779_0_0 -> 0 in the cache */ - /* replace779_0_1 -> 146 in the cache */ - /* replace779_0 -> 2264 in the cache */ - /* replace779_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 1, - { 2264, 3 }, - -1, - } }, - - /* ('ixor', ('extract_i16', 'a', '#b'), ('extract_i16', 'c', 'b')) => ('extract_i16', ('ixor', 'a', 'c'), 'b') */ - /* search780_0_0 -> 0 in the cache */ - /* search780_0_1 -> 834 in the cache */ - /* search780_0 -> 2210 in the cache */ - /* search780_1_0 -> 146 in the cache */ - /* search780_1_1 -> 3 in the cache */ - /* search780_1 -> 2211 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2210, 2211 }, - -1, - } }, - - /* replace780_0_0 -> 0 in the cache */ - /* replace780_0_1 -> 146 in the cache */ - /* replace780_0 -> 2264 in the cache */ - /* replace780_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i16, - -1, 1, - { 2264, 3 }, - -1, - } }, - - /* ('ixor', ('extract_u16', 'a', '#b'), ('extract_u16', 'c', 'b')) => ('extract_u16', ('ixor', 'a', 'c'), 'b') */ - /* search781_0_0 -> 0 in the cache */ - /* search781_0_1 -> 834 in the cache */ - /* search781_0 -> 2214 in the cache */ - /* search781_1_0 -> 146 in the cache */ - /* search781_1_1 -> 3 in the cache */ - /* search781_1 -> 2215 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2214, 2215 }, - -1, - } }, - - /* replace781_0_0 -> 0 in the cache */ - /* replace781_0_1 -> 146 in the cache */ - /* replace781_0 -> 2264 in the cache */ - /* replace781_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 1, - { 2264, 3 }, - -1, - } }, - - /* ('ixor', ('ushr(is_used_once)', 'a', '#b'), ('ushr', 'c', 'b')) => ('ushr', ('ixor', 'a', 'c'), 'b') */ - /* search782_0_0 -> 132 in the cache */ - /* search782_0_1 -> 33 in the cache */ - /* search782_0 -> 2218 in the cache */ - /* search782_1_0 -> 135 in the cache */ - /* search782_1_1 -> 36 in the cache */ - /* search782_1 -> 2219 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2218, 2219 }, - -1, - } }, - - /* replace782_0_0 -> 132 in the cache */ - /* replace782_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 132, 135 }, - -1, - } }, - /* replace782_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 2273, 36 }, - -1, - } }, - - /* ('ixor', ('ishr(is_used_once)', 'a', '#b'), ('ishr', 'c', 'b')) => ('ishr', ('ixor', 'a', 'c'), 'b') */ - /* search783_0_0 -> 132 in the cache */ - /* search783_0_1 -> 33 in the cache */ - /* search783_0 -> 2223 in the cache */ - /* search783_1_0 -> 135 in the cache */ - /* search783_1_1 -> 36 in the cache */ - /* search783_1 -> 2224 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2223, 2224 }, - -1, - } }, - - /* replace783_0_0 -> 132 in the cache */ - /* replace783_0_1 -> 135 in the cache */ - /* replace783_0 -> 2273 in the cache */ - /* replace783_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 2273, 36 }, - -1, - } }, - - /* ('ixor', ('ishl(is_used_once)', 'a', '#b'), ('ishl', 'c', 'b')) => ('ishl', ('ixor', 'a', 'c'), 'b') */ - /* search784_0_0 -> 132 in the cache */ - /* search784_0_1 -> 33 in the cache */ - /* search784_0 -> 2227 in the cache */ - /* search784_1_0 -> 135 in the cache */ - /* search784_1_1 -> 36 in the cache */ - /* search784_1 -> 2228 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2227, 2228 }, - -1, - } }, - - /* replace784_0_0 -> 132 in the cache */ - /* replace784_0_1 -> 135 in the cache */ - /* replace784_0 -> 2273 in the cache */ - /* replace784_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 2273, 36 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('ior', 'a', 'b'), 0) */ - /* search785_0_0 -> 6 in the cache */ - /* search785_0_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 6, 848 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 8 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search785_1_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 2280, 848 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2279, 2281 }, - -1, - } }, - - /* replace785_0_0 -> 6 in the cache */ - /* replace785_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 6, 2280 }, - -1, - } }, - /* replace785_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2283, 848 }, - -1, - } }, - - /* ('ior', ('ine', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('ior', 'a', 'b'), 0) */ - /* search786_0_0 -> 6 in the cache */ - /* search786_0_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 6, 848 }, - -1, - } }, - /* search786_1_0 -> 2280 in the cache */ - /* search786_1_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 2280, 848 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2285, 2286 }, - -1, - } }, - - /* replace786_0_0 -> 6 in the cache */ - /* replace786_0_1 -> 2280 in the cache */ - /* replace786_0 -> 2283 in the cache */ - /* replace786_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2283, 848 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('umax', 'a', 'b'), 0) */ - /* search787_0_0 -> 6 in the cache */ - /* search787_0_1 -> 848 in the cache */ - /* search787_0 -> 2279 in the cache */ - /* search787_1_0 -> 2280 in the cache */ - /* search787_1_1 -> 848 in the cache */ - /* search787_1 -> 2281 in the cache */ - /* search787 -> 2282 in the cache */ - - /* replace787_0_0 -> 6 in the cache */ - /* replace787_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 6, 2280 }, - -1, - } }, - /* replace787_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2289, 848 }, - -1, - } }, - - /* ('ior', ('ieq', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search788_0_0 -> 6 in the cache */ - /* search788_0_1 -> 848 in the cache */ - /* search788_0 -> 2279 in the cache */ - /* search788_1_0 -> 2280 in the cache */ - /* search788_1_1 -> 848 in the cache */ - /* search788_1 -> 2281 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2279, 2281 }, - -1, - } }, - - /* replace788_0_0 -> 6 in the cache */ - /* replace788_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 6, 2280 }, - -1, - } }, - /* replace788_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2292, 848 }, - -1, - } }, - - /* ('iand', ('ine', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search789_0_0 -> 6 in the cache */ - /* search789_0_1 -> 848 in the cache */ - /* search789_0 -> 2285 in the cache */ - /* search789_1_0 -> 2280 in the cache */ - /* search789_1_1 -> 848 in the cache */ - /* search789_1 -> 2286 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2285, 2286 }, - -1, - } }, - - /* replace789_0_0 -> 6 in the cache */ - /* replace789_0_1 -> 2280 in the cache */ - /* replace789_0 -> 2292 in the cache */ - /* replace789_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2292, 848 }, - -1, - } }, - - /* ('ior', ('ine', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('umax', 'a', 'b'), 0) */ - /* search790_0_0 -> 6 in the cache */ - /* search790_0_1 -> 848 in the cache */ - /* search790_0 -> 2285 in the cache */ - /* search790_1_0 -> 2280 in the cache */ - /* search790_1_1 -> 848 in the cache */ - /* search790_1 -> 2286 in the cache */ - /* search790 -> 2287 in the cache */ - - /* replace790_0_0 -> 6 in the cache */ - /* replace790_0_1 -> 2280 in the cache */ - /* replace790_0 -> 2289 in the cache */ - /* replace790_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2289, 848 }, - -1, - } }, - - /* ('ineg', ('b2i8', 'a@8')) => a */ - /* search791_0_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_b2i8, - -1, 0, - { 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2297 }, - -1, - } }, - - /* replace791 -> 6 in the cache */ - - /* ('ishl', 'a@8', ('iand', 7, 'b')) => ('ishl', 'a', 'b') */ - /* search792_0 -> 6 in the cache */ - /* search792_1_0 -> 9 in the cache */ - /* search792_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 9, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 6, 2299 }, - -1, - } }, - - /* replace792_0 -> 6 in the cache */ - /* replace792_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 6, 36 }, - -1, - } }, - - /* ('ishr', 'a@8', ('iand', 7, 'b')) => ('ishr', 'a', 'b') */ - /* search793_0 -> 6 in the cache */ - /* search793_1_0 -> 9 in the cache */ - /* search793_1_1 -> 36 in the cache */ - /* search793_1 -> 2299 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 6, 2299 }, - -1, - } }, - - /* replace793_0 -> 6 in the cache */ - /* replace793_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 6, 36 }, - -1, - } }, - - /* ('ushr', 'a@8', ('iand', 7, 'b')) => ('ushr', 'a', 'b') */ - /* search794_0 -> 6 in the cache */ - /* search794_1_0 -> 9 in the cache */ - /* search794_1_1 -> 36 in the cache */ - /* search794_1 -> 2299 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 6, 2299 }, - -1, - } }, - - /* replace794_0 -> 6 in the cache */ - /* replace794_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 6, 36 }, - -1, - } }, - - /* ('ushr', 'a@8', ('ishl(is_used_once)', ('iand', 'b', 1), 2)) => ('ushr', 'a', ('ishl', 'b', 2)) */ - /* search795_0 -> 6 in the cache */ - /* search795_1_0_0 -> 36 in the cache */ - /* search795_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 36, 406 }, - -1, - } }, - /* search795_1_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 2306, 411 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 6, 2307 }, - -1, - } }, - - /* replace795_0 -> 6 in the cache */ - /* replace795_1_0 -> 36 in the cache */ - /* replace795_1_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 36, 411 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 6, 2309 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('ior', 'a', 'b'), 0) */ - /* search796_0_0 -> 11 in the cache */ - /* search796_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 11, 869 }, - -1, - } }, - /* search796_1_0 -> 268 in the cache */ - /* search796_1_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 268, 869 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2311, 2312 }, - -1, - } }, - - /* replace796_0_0 -> 11 in the cache */ - /* replace796_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 11, 268 }, - -1, - } }, - /* replace796_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2314, 869 }, - -1, - } }, - - /* ('ior', ('ine', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('ior', 'a', 'b'), 0) */ - /* search797_0_0 -> 11 in the cache */ - /* search797_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 11, 869 }, - -1, - } }, - /* search797_1_0 -> 268 in the cache */ - /* search797_1_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 268, 869 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2316, 2317 }, - -1, - } }, - - /* replace797_0_0 -> 11 in the cache */ - /* replace797_0_1 -> 268 in the cache */ - /* replace797_0 -> 2314 in the cache */ - /* replace797_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2314, 869 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('umax', 'a', 'b'), 0) */ - /* search798_0_0 -> 11 in the cache */ - /* search798_0_1 -> 869 in the cache */ - /* search798_0 -> 2311 in the cache */ - /* search798_1_0 -> 268 in the cache */ - /* search798_1_1 -> 869 in the cache */ - /* search798_1 -> 2312 in the cache */ - /* search798 -> 2313 in the cache */ - - /* replace798_0_0 -> 11 in the cache */ - /* replace798_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 11, 268 }, - -1, - } }, - /* replace798_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2320, 869 }, - -1, - } }, - - /* ('ior', ('ieq', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search799_0_0 -> 11 in the cache */ - /* search799_0_1 -> 869 in the cache */ - /* search799_0 -> 2311 in the cache */ - /* search799_1_0 -> 268 in the cache */ - /* search799_1_1 -> 869 in the cache */ - /* search799_1 -> 2312 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2311, 2312 }, - -1, - } }, - - /* replace799_0_0 -> 11 in the cache */ - /* replace799_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 11, 268 }, - -1, - } }, - /* replace799_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2323, 869 }, - -1, - } }, - - /* ('iand', ('ine', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search800_0_0 -> 11 in the cache */ - /* search800_0_1 -> 869 in the cache */ - /* search800_0 -> 2316 in the cache */ - /* search800_1_0 -> 268 in the cache */ - /* search800_1_1 -> 869 in the cache */ - /* search800_1 -> 2317 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2316, 2317 }, - -1, - } }, - - /* replace800_0_0 -> 11 in the cache */ - /* replace800_0_1 -> 268 in the cache */ - /* replace800_0 -> 2323 in the cache */ - /* replace800_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2323, 869 }, - -1, - } }, - - /* ('ior', ('ine', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('umax', 'a', 'b'), 0) */ - /* search801_0_0 -> 11 in the cache */ - /* search801_0_1 -> 869 in the cache */ - /* search801_0 -> 2316 in the cache */ - /* search801_1_0 -> 268 in the cache */ - /* search801_1_1 -> 869 in the cache */ - /* search801_1 -> 2317 in the cache */ - /* search801 -> 2318 in the cache */ - - /* replace801_0_0 -> 11 in the cache */ - /* replace801_0_1 -> 268 in the cache */ - /* replace801_0 -> 2320 in the cache */ - /* replace801_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2320, 869 }, - -1, - } }, - - /* ('ineg', ('b2i16', 'a@16')) => a */ - /* search802_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2i16, - -1, 0, - { 11 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2328 }, - -1, - } }, - - /* replace802 -> 11 in the cache */ - - /* ('ishl', 'a@16', ('iand', 15, 'b')) => ('ishl', 'a', 'b') */ - /* search803_0 -> 11 in the cache */ - /* search803_1_0 -> 14 in the cache */ - /* search803_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 14, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 11, 2330 }, - -1, - } }, - - /* replace803_0 -> 11 in the cache */ - /* replace803_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 11, 36 }, - -1, - } }, - - /* ('ishr', 'a@16', ('iand', 15, 'b')) => ('ishr', 'a', 'b') */ - /* search804_0 -> 11 in the cache */ - /* search804_1_0 -> 14 in the cache */ - /* search804_1_1 -> 36 in the cache */ - /* search804_1 -> 2330 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 11, 2330 }, - -1, - } }, - - /* replace804_0 -> 11 in the cache */ - /* replace804_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 11, 36 }, - -1, - } }, - - /* ('ushr', 'a@16', ('iand', 15, 'b')) => ('ushr', 'a', 'b') */ - /* search805_0 -> 11 in the cache */ - /* search805_1_0 -> 14 in the cache */ - /* search805_1_1 -> 36 in the cache */ - /* search805_1 -> 2330 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 11, 2330 }, - -1, - } }, - - /* replace805_0 -> 11 in the cache */ - /* replace805_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 11, 36 }, - -1, - } }, - - /* ('ushr', 'a@16', ('ishl(is_used_once)', ('iand', 'b', 1), 3)) => ('ushr', 'a', ('ishl', 'b', 3)) */ - /* search806_0 -> 11 in the cache */ - /* search806_1_0_0 -> 36 in the cache */ - /* search806_1_0_1 -> 406 in the cache */ - /* search806_1_0 -> 2306 in the cache */ - /* search806_1_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 2306, 415 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 11, 2337 }, - -1, - } }, - - /* replace806_0 -> 11 in the cache */ - /* replace806_1_0 -> 36 in the cache */ - /* replace806_1_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 36, 415 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 11, 2339 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('ior', 'a', 'b'), 0) */ - /* search807_0_0 -> 16 in the cache */ - /* search807_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 16, 128 }, - -1, - } }, - /* search807_1_0 -> 36 in the cache */ - /* search807_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 36, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2341, 2342 }, - -1, - } }, - - /* replace807_0_0 -> 16 in the cache */ - /* replace807_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace807_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2344, 128 }, - -1, - } }, - - /* ('ior', ('ine', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('ior', 'a', 'b'), 0) */ - /* search808_0_0 -> 16 in the cache */ - /* search808_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 16, 128 }, - -1, - } }, - /* search808_1_0 -> 36 in the cache */ - /* search808_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 36, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2346, 2347 }, - -1, - } }, - - /* replace808_0_0 -> 16 in the cache */ - /* replace808_0_1 -> 36 in the cache */ - /* replace808_0 -> 2344 in the cache */ - /* replace808_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2344, 128 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('umax', 'a', 'b'), 0) */ - /* search809_0_0 -> 16 in the cache */ - /* search809_0_1 -> 128 in the cache */ - /* search809_0 -> 2341 in the cache */ - /* search809_1_0 -> 36 in the cache */ - /* search809_1_1 -> 128 in the cache */ - /* search809_1 -> 2342 in the cache */ - /* search809 -> 2343 in the cache */ - - /* replace809_0_0 -> 16 in the cache */ - /* replace809_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace809_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2350, 128 }, - -1, - } }, - - /* ('ior', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search810_0_0 -> 16 in the cache */ - /* search810_0_1 -> 128 in the cache */ - /* search810_0 -> 2341 in the cache */ - /* search810_1_0 -> 36 in the cache */ - /* search810_1_1 -> 128 in the cache */ - /* search810_1 -> 2342 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2341, 2342 }, - -1, - } }, - - /* replace810_0_0 -> 16 in the cache */ - /* replace810_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace810_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2353, 128 }, - -1, - } }, - - /* ('iand', ('ine', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search811_0_0 -> 16 in the cache */ - /* search811_0_1 -> 128 in the cache */ - /* search811_0 -> 2346 in the cache */ - /* search811_1_0 -> 36 in the cache */ - /* search811_1_1 -> 128 in the cache */ - /* search811_1 -> 2347 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2346, 2347 }, - -1, - } }, - - /* replace811_0_0 -> 16 in the cache */ - /* replace811_0_1 -> 36 in the cache */ - /* replace811_0 -> 2353 in the cache */ - /* replace811_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2353, 128 }, - -1, - } }, - - /* ('ior', ('ine', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('umax', 'a', 'b'), 0) */ - /* search812_0_0 -> 16 in the cache */ - /* search812_0_1 -> 128 in the cache */ - /* search812_0 -> 2346 in the cache */ - /* search812_1_0 -> 36 in the cache */ - /* search812_1_1 -> 128 in the cache */ - /* search812_1 -> 2347 in the cache */ - /* search812 -> 2348 in the cache */ - - /* replace812_0_0 -> 16 in the cache */ - /* replace812_0_1 -> 36 in the cache */ - /* replace812_0 -> 2350 in the cache */ - /* replace812_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2350, 128 }, - -1, - } }, - - /* ('ineg', ('b2i32', 'a@32')) => a */ - /* search813_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2358 }, - -1, - } }, - - /* replace813 -> 16 in the cache */ - - /* ('ishl', 'a@32', ('iand', 31, 'b')) => ('ishl', 'a', 'b') */ - /* search814_0 -> 16 in the cache */ - /* search814_1_0 -> 19 in the cache */ - /* search814_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 19, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 16, 2360 }, - -1, - } }, - - /* replace814_0 -> 16 in the cache */ - /* replace814_1 -> 36 in the cache */ - /* replace814 -> 959 in the cache */ - - /* ('ishr', 'a@32', ('iand', 31, 'b')) => ('ishr', 'a', 'b') */ - /* search815_0 -> 16 in the cache */ - /* search815_1_0 -> 19 in the cache */ - /* search815_1_1 -> 36 in the cache */ - /* search815_1 -> 2360 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 16, 2360 }, - -1, - } }, - - /* replace815_0 -> 16 in the cache */ - /* replace815_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('ushr', 'a@32', ('iand', 31, 'b')) => ('ushr', 'a', 'b') */ - /* search816_0 -> 16 in the cache */ - /* search816_1_0 -> 19 in the cache */ - /* search816_1_1 -> 36 in the cache */ - /* search816_1 -> 2360 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 16, 2360 }, - -1, - } }, - - /* replace816_0 -> 16 in the cache */ - /* replace816_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('ushr', 'a@32', ('ishl(is_used_once)', ('iand', 'b', 1), 4)) => ('ushr', 'a', ('ishl', 'b', 4)) */ - /* search817_0 -> 16 in the cache */ - /* search817_1_0_0 -> 36 in the cache */ - /* search817_1_0_1 -> 406 in the cache */ - /* search817_1_0 -> 2306 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x4 /* 4 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 2306, 2366 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 16, 2367 }, - -1, - } }, - - /* replace817_0 -> 16 in the cache */ - /* replace817_1_0 -> 36 in the cache */ - /* replace817_1_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 36, 2366 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 2369 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('ior', 'a', 'b'), 0) */ - /* search818_0_0 -> 21 in the cache */ - /* search818_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 21, 910 }, - -1, - } }, - /* search818_1_0 -> 41 in the cache */ - /* search818_1_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 41, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2371, 2372 }, - -1, - } }, - - /* replace818_0_0 -> 21 in the cache */ - /* replace818_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 21, 41 }, - -1, - } }, - /* replace818_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2374, 910 }, - -1, - } }, - - /* ('ior', ('ine', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('ior', 'a', 'b'), 0) */ - /* search819_0_0 -> 21 in the cache */ - /* search819_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 21, 910 }, - -1, - } }, - /* search819_1_0 -> 41 in the cache */ - /* search819_1_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 41, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2376, 2377 }, - -1, - } }, - - /* replace819_0_0 -> 21 in the cache */ - /* replace819_0_1 -> 41 in the cache */ - /* replace819_0 -> 2374 in the cache */ - /* replace819_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2374, 910 }, - -1, - } }, - - /* ('iand', ('ieq', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('umax', 'a', 'b'), 0) */ - /* search820_0_0 -> 21 in the cache */ - /* search820_0_1 -> 910 in the cache */ - /* search820_0 -> 2371 in the cache */ - /* search820_1_0 -> 41 in the cache */ - /* search820_1_1 -> 910 in the cache */ - /* search820_1 -> 2372 in the cache */ - /* search820 -> 2373 in the cache */ - - /* replace820_0_0 -> 21 in the cache */ - /* replace820_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 21, 41 }, - -1, - } }, - /* replace820_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2380, 910 }, - -1, - } }, - - /* ('ior', ('ieq', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search821_0_0 -> 21 in the cache */ - /* search821_0_1 -> 910 in the cache */ - /* search821_0 -> 2371 in the cache */ - /* search821_1_0 -> 41 in the cache */ - /* search821_1_1 -> 910 in the cache */ - /* search821_1 -> 2372 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2371, 2372 }, - -1, - } }, - - /* replace821_0_0 -> 21 in the cache */ - /* replace821_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 21, 41 }, - -1, - } }, - /* replace821_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 2383, 910 }, - -1, - } }, - - /* ('iand', ('ine', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search822_0_0 -> 21 in the cache */ - /* search822_0_1 -> 910 in the cache */ - /* search822_0 -> 2376 in the cache */ - /* search822_1_0 -> 41 in the cache */ - /* search822_1_1 -> 910 in the cache */ - /* search822_1 -> 2377 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2376, 2377 }, - -1, - } }, - - /* replace822_0_0 -> 21 in the cache */ - /* replace822_0_1 -> 41 in the cache */ - /* replace822_0 -> 2383 in the cache */ - /* replace822_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2383, 910 }, - -1, - } }, - - /* ('ior', ('ine', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('umax', 'a', 'b'), 0) */ - /* search823_0_0 -> 21 in the cache */ - /* search823_0_1 -> 910 in the cache */ - /* search823_0 -> 2376 in the cache */ - /* search823_1_0 -> 41 in the cache */ - /* search823_1_1 -> 910 in the cache */ - /* search823_1 -> 2377 in the cache */ - /* search823 -> 2378 in the cache */ - - /* replace823_0_0 -> 21 in the cache */ - /* replace823_0_1 -> 41 in the cache */ - /* replace823_0 -> 2380 in the cache */ - /* replace823_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2380, 910 }, - -1, - } }, - - /* ('ineg', ('b2i64', 'a@64')) => a */ - /* search824_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2i64, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2388 }, - -1, - } }, - - /* replace824 -> 21 in the cache */ - - /* ('ishl', 'a@64', ('iand', 63, 'b')) => ('ishl', 'a', 'b') */ - /* search825_0 -> 21 in the cache */ - /* search825_1_0 -> 24 in the cache */ - /* search825_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 24, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 21, 2390 }, - -1, - } }, - - /* replace825_0 -> 21 in the cache */ - /* replace825_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 36 }, - -1, - } }, - - /* ('ishr', 'a@64', ('iand', 63, 'b')) => ('ishr', 'a', 'b') */ - /* search826_0 -> 21 in the cache */ - /* search826_1_0 -> 24 in the cache */ - /* search826_1_1 -> 36 in the cache */ - /* search826_1 -> 2390 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 21, 2390 }, - -1, - } }, - - /* replace826_0 -> 21 in the cache */ - /* replace826_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 36 }, - -1, - } }, - - /* ('ushr', 'a@64', ('iand', 63, 'b')) => ('ushr', 'a', 'b') */ - /* search827_0 -> 21 in the cache */ - /* search827_1_0 -> 24 in the cache */ - /* search827_1_1 -> 36 in the cache */ - /* search827_1 -> 2390 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 21, 2390 }, - -1, - } }, - - /* replace827_0 -> 21 in the cache */ - /* replace827_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 36 }, - -1, - } }, - - /* ('ushr', 'a@64', ('ishl(is_used_once)', ('iand', 'b', 1), 5)) => ('ushr', 'a', ('ishl', 'b', 5)) */ - /* search828_0 -> 21 in the cache */ - /* search828_1_0_0 -> 36 in the cache */ - /* search828_1_0_1 -> 406 in the cache */ - /* search828_1_0 -> 2306 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x5 /* 5 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 2306, 2397 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 21, 2398 }, - -1, - } }, - - /* replace828_0 -> 21 in the cache */ - /* replace828_1_0 -> 36 in the cache */ - /* replace828_1_1 -> 2397 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 36, 2397 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 2400 }, - -1, - } }, - - /* ('ior', ('ieq', 'a', 0), ('ieq', 'a', 1)) => ('uge', 1, 'a') */ - /* search829_0_0 -> 32 in the cache */ - /* search829_0_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 32, 61 }, - -1, - } }, - /* search829_1_0 -> 32 in the cache */ - /* search829_1_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 32, 35 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 2402, 2403 }, - -1, - } }, - - /* replace829_0 -> 35 in the cache */ - /* replace829_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 35, 32 }, - -1, - } }, - - /* ('ior', ('uge', 1, 'a'), ('ieq', 'a', 2)) => ('uge', 2, 'a') */ - /* search830_0_0 -> 35 in the cache */ - /* search830_0_1 -> 32 in the cache */ - /* search830_0 -> 2405 in the cache */ - /* search830_1_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0x2 /* 2 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 32, 2406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 2405, 2407 }, - -1, - } }, - - /* replace830_0 -> 2406 in the cache */ - /* replace830_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2406, 32 }, - -1, - } }, - - /* ('ior', ('uge', 2, 'a'), ('ieq', 'a', 3)) => ('uge', 3, 'a') */ - /* search831_0_0 -> 2406 in the cache */ - /* search831_0_1 -> 32 in the cache */ - /* search831_0 -> 2409 in the cache */ - /* search831_1_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0x3 /* 3 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 32, 2410 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 2409, 2411 }, - -1, - } }, - - /* replace831_0 -> 2410 in the cache */ - /* replace831_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2410, 32 }, - -1, - } }, - - /* ('ior', 'a', ('ieq', 'a', False)) => True */ - /* search832_0 -> 770 in the cache */ - /* search832_1_0 -> 770 in the cache */ - /* search832_1_1 -> 1090 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 770, 1090 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 770, 2414 }, - -1, - } }, - - /* replace832 -> 1248 in the cache */ - - /* ('ine', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ine', 'a', 'b') */ - /* search833_0_0_0 -> 770 in the cache */ - /* search833_0_0 -> 1241 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1241 }, - -1, - } }, - /* search833_1_0_0 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 1147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2417 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2416, 2418 }, - -1, - } }, - - /* replace833_0 -> 770 in the cache */ - /* replace833_1 -> 1147 in the cache */ - /* replace833 -> 1404 in the cache */ - - /* ('b2i', ('ine', 'a@1', 'b@1')) => ('b2i', ('ixor', 'a', 'b')) */ - /* search834_0_0 -> 770 in the cache */ - /* search834_0_1 -> 1147 in the cache */ - /* search834_0 -> 1404 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 1, - { 1404 }, - -1, - } }, - - /* replace834_0_0 -> 770 in the cache */ - /* replace834_0_1 -> 1147 in the cache */ - /* replace834_0 -> 1164 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 1, - { 1164 }, - -1, - } }, - - /* ('ishl', ('b2i32', ('ine', ('iand', 'a@32', '#b(is_pos_power_of_two)'), 0)), '#c') => ('bcsel', ('ige', ('iand', 'c', 31), ('find_lsb', 'b')), ('ishl', ('iand', 'a', 'b'), ('iadd', ('iand', 'c', 31), ('ineg', ('find_lsb', 'b')))), ('ushr', ('iand', 'a', 'b'), ('iadd', ('ineg', ('iand', 'c', 31)), ('find_lsb', 'b')))) */ - /* search835_0_0_0_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 0, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 2422 }, - -1, - } }, - /* search835_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 2423, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 2, - { 2424 }, - -1, - } }, - /* search835_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 2425, 319 }, - -1, - } }, - - /* replace835_0_0_0 -> 141 in the cache */ - /* replace835_0_0_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 141, 19 }, - -1, - } }, - /* replace835_0_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 2427, 2428 }, - -1, - } }, - /* replace835_1_0_0 -> 16 in the cache */ - /* replace835_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace835_1_1_0_0 -> 141 in the cache */ - /* replace835_1_1_0_1 -> 19 in the cache */ - /* replace835_1_1_0 -> 898 in the cache */ - /* replace835_1_1_1_0_0 -> 36 in the cache */ - /* replace835_1_1_1_0 -> 2428 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2428 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 2, - { 898, 2431 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 3, - { 2430, 2432 }, - -1, - } }, - /* replace835_2_0_0 -> 16 in the cache */ - /* replace835_2_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 4, 1, - { 16, 36 }, - -1, - } }, - /* replace835_2_1_0_0_0 -> 141 in the cache */ - /* replace835_2_1_0_0_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 6, 1, - { 141, 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 1, - { 2435 }, - -1, - } }, - /* replace835_2_1_1_0 -> 36 in the cache */ - /* replace835_2_1_1 -> 2428 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 5, 2, - { 2436, 2428 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 3, - { 2434, 2437 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 7, - { 2429, 2433, 2438 }, - -1, - } }, - - /* ('b2i32', ('ine', ('iand', 'a@32', '#b(is_pos_power_of_two)'), 0)) => ('ushr', ('iand', 'a', 'b'), ('find_lsb', 'b')) */ - /* search836_0_0_0 -> 16 in the cache */ - /* search836_0_0_1 -> 2422 in the cache */ - /* search836_0_0 -> 2423 in the cache */ - /* search836_0_1 -> 128 in the cache */ - /* search836_0 -> 2424 in the cache */ - /* search836 -> 2425 in the cache */ - - /* replace836_0_0 -> 16 in the cache */ - /* replace836_0_1 -> 36 in the cache */ - /* replace836_0 -> 2199 in the cache */ - /* replace836_1_0 -> 36 in the cache */ - /* replace836_1 -> 2428 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 2199, 2428 }, - -1, - } }, - - /* ('ior', ('b2i', 'a'), ('iand', 'b', 1)) => ('iand', ('ior', ('b2i', 'a'), 'b'), 1) */ - /* search837_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 32 }, - -1, - } }, - /* search837_1_0 -> 3 in the cache */ - /* search837_1_1 -> 79 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 3, 79 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 2441, 2442 }, - -1, - } }, - - /* replace837_0_0_0 -> 32 in the cache */ - /* replace837_0_0 -> 2441 in the cache */ - /* replace837_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 2441, 3 }, - -1, - } }, - /* replace837_1 -> 79 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 2444, 79 }, - -1, - } }, - - /* ('iand', ('b2i', 'a'), ('iand', 'b', 1)) => ('iand', ('b2i', 'a'), 'b') */ - /* search838_0_0 -> 32 in the cache */ - /* search838_0 -> 2441 in the cache */ - /* search838_1_0 -> 3 in the cache */ - /* search838_1_1 -> 79 in the cache */ - /* search838_1 -> 2442 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 2441, 2442 }, - -1, - } }, - - /* replace838_0_0 -> 32 in the cache */ - /* replace838_0 -> 2441 in the cache */ - /* replace838_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2441, 3 }, - -1, - } }, - - /* ('iand', ('inot', ('iand', ('ior', ('ieq', 'a', 0), 'b'), 'c')), ('ilt', 'a', 0)) => ('iand', ('inot', ('iand', 'b', 'c')), ('ilt', 'a', 0)) */ - /* search839_0_0_0_0_0 -> 32 in the cache */ - /* search839_0_0_0_0_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 3, 1, - { 32, 61 }, - -1, - } }, - /* search839_0_0_0_1 -> 1147 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 2, 2, - { 2448, 1147 }, - -1, - } }, - /* search839_0_0_1 -> 474 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 1, 3, - { 2449, 474 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 2450 }, - -1, - } }, - /* search839_1_0 -> 32 in the cache */ - /* search839_1_1 -> 61 in the cache */ - /* search839_1 -> 1262 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 4, - { 2451, 1262 }, - -1, - } }, - - /* replace839_0_0_0 -> 1147 in the cache */ - /* replace839_0_0_1 -> 474 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 1147, 474 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 2453 }, - -1, - } }, - /* replace839_1_0 -> 32 in the cache */ - /* replace839_1_1 -> 61 in the cache */ - /* replace839_1 -> 1262 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 2454, 1262 }, - -1, - } }, - - /* ('iand', ('inot', ('iand', ('ieq', ('umin', 'a', 'b'), 0), 'c')), ('ilt', 'a', 0)) => ('iand', ('inot', ('iand', ('ieq', 'b', 0), 'c')), ('ilt', 'a', 0)) */ - /* search840_0_0_0_0_0 -> 0 in the cache */ - /* search840_0_0_0_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 3, 1, - { 0, 3 }, - -1, - } }, - /* search840_0_0_0_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 2, - { 2456, 86 }, - -1, - } }, - /* search840_0_0_1 -> 474 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 1, 3, - { 2457, 474 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 2458 }, - -1, - } }, - /* search840_1_0 -> 0 in the cache */ - /* search840_1_1 -> 86 in the cache */ - /* search840_1 -> 90 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 4, - { 2459, 90 }, - -1, - } }, - - /* replace840_0_0_0_0 -> 3 in the cache */ - /* replace840_0_0_0_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 3, 86 }, - -1, - } }, - /* replace840_0_0_1 -> 474 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 1, 2, - { 2461, 474 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 2, - { 2462 }, - -1, - } }, - /* replace840_1_0 -> 0 in the cache */ - /* replace840_1_1 -> 86 in the cache */ - /* replace840_1 -> 90 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2463, 90 }, - -1, - } }, - - /* ('flt', 'a', ('fmax', 'b', 'a')) => ('flt', 'a', 'b') */ - /* search841_0 -> 32 in the cache */ - { .variable = { - { nir_search_value_variable, -1 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search841_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 32, 2466 }, - -1, - } }, - - /* replace841_0 -> 32 in the cache */ - /* replace841_1 -> 2465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 32, 2465 }, - -1, - } }, - - /* ('flt', ('fmin', 'a', 'b'), 'a') => ('flt', 'b', 'a') */ - /* search842_0_0 -> 0 in the cache */ - /* search842_0_1 -> 3 in the cache */ - /* search842_0 -> 1296 in the cache */ - /* search842_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1296, 0 }, - -1, - } }, - - /* replace842_0 -> 3 in the cache */ - /* replace842_1 -> 0 in the cache */ - /* replace842 -> 1091 in the cache */ - - /* ('~fge', 'a', ('fmin', 'b', 'a')) => True */ - /* search843_0 -> 32 in the cache */ - /* search843_1_0 -> 2465 in the cache */ - /* search843_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 32, 2470 }, - -1, - } }, - - /* replace843 -> 1248 in the cache */ - - /* ('~fge', ('fmax', 'a', 'b'), 'a') => True */ - /* search844_0_0 -> 0 in the cache */ - /* search844_0_1 -> 3 in the cache */ - /* search844_0 -> 1294 in the cache */ - /* search844_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 1294, 0 }, - -1, - } }, - - /* replace844 -> 1248 in the cache */ - - /* ('flt', 'a', ('fmin', 'b', 'a')) => False */ - /* search845_0 -> 32 in the cache */ - /* search845_1_0 -> 2465 in the cache */ - /* search845_1_1 -> 32 in the cache */ - /* search845_1 -> 2470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 32, 2470 }, - -1, - } }, - - /* replace845 -> 1090 in the cache */ - - /* ('flt', ('fmax', 'a', 'b'), 'a') => False */ - /* search846_0_0 -> 0 in the cache */ - /* search846_0_1 -> 3 in the cache */ - /* search846_0 -> 1294 in the cache */ - /* search846_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 1294, 0 }, - -1, - } }, - - /* replace846 -> 1090 in the cache */ - - /* ('~fge', 'a', ('fmax', 'b', 'a')) => ('fge', 'a', 'b') */ - /* search847_0 -> 32 in the cache */ - /* search847_1_0 -> 2465 in the cache */ - /* search847_1_1 -> 32 in the cache */ - /* search847_1 -> 2466 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 32, 2466 }, - -1, - } }, - - /* replace847_0 -> 32 in the cache */ - /* replace847_1 -> 2465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 32, 2465 }, - -1, - } }, - - /* ('~fge', ('fmin', 'a', 'b'), 'a') => ('fge', 'b', 'a') */ - /* search848_0_0 -> 0 in the cache */ - /* search848_0_1 -> 3 in the cache */ - /* search848_0 -> 1296 in the cache */ - /* search848_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 1296, 0 }, - -1, - } }, - - /* replace848_0 -> 3 in the cache */ - /* replace848_1 -> 0 in the cache */ - /* replace848 -> 1103 in the cache */ - - /* ('ilt', 'a', ('imax', 'b', 'a')) => ('ilt', 'a', 'b') */ - /* search849_0 -> 32 in the cache */ - /* search849_1_0 -> 2465 in the cache */ - /* search849_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 32, 2478 }, - -1, - } }, - - /* replace849_0 -> 32 in the cache */ - /* replace849_1 -> 2465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 32, 2465 }, - -1, - } }, - - /* ('ilt', ('imin', 'a', 'b'), 'a') => ('ilt', 'b', 'a') */ - /* search850_0_0 -> 0 in the cache */ - /* search850_0_1 -> 3 in the cache */ - /* search850_0 -> 1316 in the cache */ - /* search850_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 1316, 0 }, - -1, - } }, - - /* replace850_0 -> 3 in the cache */ - /* replace850_1 -> 0 in the cache */ - /* replace850 -> 1096 in the cache */ - - /* ('ige', 'a', ('imin', 'b', 'a')) => True */ - /* search851_0 -> 32 in the cache */ - /* search851_1_0 -> 2465 in the cache */ - /* search851_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 32, 2482 }, - -1, - } }, - - /* replace851 -> 1248 in the cache */ - - /* ('ige', ('imax', 'a', 'b'), 'a') => True */ - /* search852_0_0 -> 0 in the cache */ - /* search852_0_1 -> 3 in the cache */ - /* search852_0 -> 1314 in the cache */ - /* search852_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 1314, 0 }, - -1, - } }, - - /* replace852 -> 1248 in the cache */ - - /* ('ult', 'a', ('umax', 'b', 'a')) => ('ult', 'a', 'b') */ - /* search853_0 -> 32 in the cache */ - /* search853_1_0 -> 2465 in the cache */ - /* search853_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 32, 2485 }, - -1, - } }, - - /* replace853_0 -> 32 in the cache */ - /* replace853_1 -> 2465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 32, 2465 }, - -1, - } }, - - /* ('ult', ('umin', 'a', 'b'), 'a') => ('ult', 'b', 'a') */ - /* search854_0_0 -> 0 in the cache */ - /* search854_0_1 -> 3 in the cache */ - /* search854_0 -> 1306 in the cache */ - /* search854_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 1306, 0 }, - -1, - } }, - - /* replace854_0 -> 3 in the cache */ - /* replace854_1 -> 0 in the cache */ - /* replace854 -> 1098 in the cache */ - - /* ('uge', 'a', ('umin', 'b', 'a')) => True */ - /* search855_0 -> 32 in the cache */ - /* search855_1_0 -> 2465 in the cache */ - /* search855_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 32, 2489 }, - -1, - } }, - - /* replace855 -> 1248 in the cache */ - - /* ('uge', ('umax', 'a', 'b'), 'a') => True */ - /* search856_0_0 -> 0 in the cache */ - /* search856_0_1 -> 3 in the cache */ - /* search856_0 -> 1304 in the cache */ - /* search856_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 1304, 0 }, - -1, - } }, - - /* replace856 -> 1248 in the cache */ - - /* ('ilt', 'a', ('imin', 'b', 'a')) => False */ - /* search857_0 -> 32 in the cache */ - /* search857_1_0 -> 2465 in the cache */ - /* search857_1_1 -> 32 in the cache */ - /* search857_1 -> 2482 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 32, 2482 }, - -1, - } }, - - /* replace857 -> 1090 in the cache */ - - /* ('ilt', ('imax', 'a', 'b'), 'a') => False */ - /* search858_0_0 -> 0 in the cache */ - /* search858_0_1 -> 3 in the cache */ - /* search858_0 -> 1314 in the cache */ - /* search858_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 1314, 0 }, - -1, - } }, - - /* replace858 -> 1090 in the cache */ - - /* ('ige', 'a', ('imax', 'b', 'a')) => ('ige', 'a', 'b') */ - /* search859_0 -> 32 in the cache */ - /* search859_1_0 -> 2465 in the cache */ - /* search859_1_1 -> 32 in the cache */ - /* search859_1 -> 2478 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 32, 2478 }, - -1, - } }, - - /* replace859_0 -> 32 in the cache */ - /* replace859_1 -> 2465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 32, 2465 }, - -1, - } }, - - /* ('ige', ('imin', 'a', 'b'), 'a') => ('ige', 'b', 'a') */ - /* search860_0_0 -> 0 in the cache */ - /* search860_0_1 -> 3 in the cache */ - /* search860_0 -> 1316 in the cache */ - /* search860_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 1316, 0 }, - -1, - } }, - - /* replace860_0 -> 3 in the cache */ - /* replace860_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3, 0 }, - -1, - } }, - - /* ('ult', 'a', ('umin', 'b', 'a')) => False */ - /* search861_0 -> 32 in the cache */ - /* search861_1_0 -> 2465 in the cache */ - /* search861_1_1 -> 32 in the cache */ - /* search861_1 -> 2489 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 32, 2489 }, - -1, - } }, - - /* replace861 -> 1090 in the cache */ - - /* ('ult', ('umax', 'a', 'b'), 'a') => False */ - /* search862_0_0 -> 0 in the cache */ - /* search862_0_1 -> 3 in the cache */ - /* search862_0 -> 1304 in the cache */ - /* search862_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 1304, 0 }, - -1, - } }, - - /* replace862 -> 1090 in the cache */ - - /* ('uge', 'a', ('umax', 'b', 'a')) => ('uge', 'a', 'b') */ - /* search863_0 -> 32 in the cache */ - /* search863_1_0 -> 2465 in the cache */ - /* search863_1_1 -> 32 in the cache */ - /* search863_1 -> 2485 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 32, 2485 }, - -1, - } }, - - /* replace863_0 -> 32 in the cache */ - /* replace863_1 -> 2465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 32, 2465 }, - -1, - } }, - - /* ('uge', ('umin', 'a', 'b'), 'a') => ('uge', 'b', 'a') */ - /* search864_0_0 -> 0 in the cache */ - /* search864_0_1 -> 3 in the cache */ - /* search864_0 -> 1306 in the cache */ - /* search864_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 1306, 0 }, - -1, - } }, - - /* replace864_0 -> 3 in the cache */ - /* replace864_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 3, 0 }, - -1, - } }, - - /* ('ult', 'a', ('iand', 'b', 'a')) => False */ - /* search865_0 -> 32 in the cache */ - /* search865_1_0 -> 2465 in the cache */ - /* search865_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 32, 2504 }, - -1, - } }, - - /* replace865 -> 1090 in the cache */ - - /* ('ult', ('ior', 'a', 'b'), 'a') => False */ - /* search866_0_0 -> 0 in the cache */ - /* search866_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 0, 3 }, - -1, - } }, - /* search866_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 2506, 0 }, - -1, - } }, - - /* replace866 -> 1090 in the cache */ - - /* ('uge', 'a', ('iand', 'b', 'a')) => True */ - /* search867_0 -> 32 in the cache */ - /* search867_1_0 -> 2465 in the cache */ - /* search867_1_1 -> 32 in the cache */ - /* search867_1 -> 2504 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 32, 2504 }, - -1, - } }, - - /* replace867 -> 1248 in the cache */ - - /* ('uge', ('ior', 'a', 'b'), 'a') => True */ - /* search868_0_0 -> 0 in the cache */ - /* search868_0_1 -> 3 in the cache */ - /* search868_0 -> 2506 in the cache */ - /* search868_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 2506, 0 }, - -1, - } }, - - /* replace868 -> 1248 in the cache */ - - /* ('ilt', '#a', ('imax', '#b', 'c')) => ('ior', ('ilt', 'a', 'b'), ('ilt', 'a', 'c')) */ - /* search869_0 -> 292 in the cache */ - /* search869_1_0 -> 293 in the cache */ - /* search869_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 293, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 292, 2510 }, - -1, - } }, - - /* replace869_0_0 -> 132 in the cache */ - /* replace869_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 132, 133 }, - -1, - } }, - /* replace869_1_0 -> 132 in the cache */ - /* replace869_1_1 -> 135 in the cache */ - /* replace869_1 -> 1672 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2512, 1672 }, - -1, - } }, - - /* ('ilt', ('imin', '#a', 'b'), '#c') => ('ior', ('ilt', 'a', 'c'), ('ilt', 'b', 'c')) */ - /* search870_0_0 -> 292 in the cache */ - /* search870_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 292, 133 }, - -1, - } }, - /* search870_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 2514, 827 }, - -1, - } }, - - /* replace870_0_0 -> 132 in the cache */ - /* replace870_0_1 -> 135 in the cache */ - /* replace870_0 -> 1672 in the cache */ - /* replace870_1_0 -> 133 in the cache */ - /* replace870_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1672, 2516 }, - -1, - } }, - - /* ('ige', '#a', ('imin', '#b', 'c')) => ('ior', ('ige', 'a', 'b'), ('ige', 'a', 'c')) */ - /* search871_0 -> 292 in the cache */ - /* search871_1_0 -> 293 in the cache */ - /* search871_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 293, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 292, 2518 }, - -1, - } }, - - /* replace871_0_0 -> 132 in the cache */ - /* replace871_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 132, 133 }, - -1, - } }, - /* replace871_1_0 -> 132 in the cache */ - /* replace871_1_1 -> 135 in the cache */ - /* replace871_1 -> 1682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2520, 1682 }, - -1, - } }, - - /* ('ige', ('imax', '#a', 'b'), '#c') => ('ior', ('ige', 'a', 'c'), ('ige', 'b', 'c')) */ - /* search872_0_0 -> 292 in the cache */ - /* search872_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 292, 133 }, - -1, - } }, - /* search872_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 2522, 827 }, - -1, - } }, - - /* replace872_0_0 -> 132 in the cache */ - /* replace872_0_1 -> 135 in the cache */ - /* replace872_0 -> 1682 in the cache */ - /* replace872_1_0 -> 133 in the cache */ - /* replace872_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1682, 2524 }, - -1, - } }, - - /* ('ult', '#a', ('umax', '#b', 'c')) => ('ior', ('ult', 'a', 'b'), ('ult', 'a', 'c')) */ - /* search873_0 -> 292 in the cache */ - /* search873_1_0 -> 293 in the cache */ - /* search873_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 293, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 292, 2526 }, - -1, - } }, - - /* replace873_0_0 -> 132 in the cache */ - /* replace873_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 132, 133 }, - -1, - } }, - /* replace873_1_0 -> 132 in the cache */ - /* replace873_1_1 -> 135 in the cache */ - /* replace873_1 -> 1692 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2528, 1692 }, - -1, - } }, - - /* ('ult', ('umin', '#a', 'b'), '#c') => ('ior', ('ult', 'a', 'c'), ('ult', 'b', 'c')) */ - /* search874_0_0 -> 292 in the cache */ - /* search874_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 292, 133 }, - -1, - } }, - /* search874_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 2530, 827 }, - -1, - } }, - - /* replace874_0_0 -> 132 in the cache */ - /* replace874_0_1 -> 135 in the cache */ - /* replace874_0 -> 1692 in the cache */ - /* replace874_1_0 -> 133 in the cache */ - /* replace874_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1692, 2532 }, - -1, - } }, - - /* ('uge', '#a', ('umin', '#b', 'c')) => ('ior', ('uge', 'a', 'b'), ('uge', 'a', 'c')) */ - /* search875_0 -> 292 in the cache */ - /* search875_1_0 -> 293 in the cache */ - /* search875_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 293, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 292, 2534 }, - -1, - } }, - - /* replace875_0_0 -> 132 in the cache */ - /* replace875_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 132, 133 }, - -1, - } }, - /* replace875_1_0 -> 132 in the cache */ - /* replace875_1_1 -> 135 in the cache */ - /* replace875_1 -> 1702 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2536, 1702 }, - -1, - } }, - - /* ('uge', ('umax', '#a', 'b'), '#c') => ('ior', ('uge', 'a', 'c'), ('uge', 'b', 'c')) */ - /* search876_0_0 -> 292 in the cache */ - /* search876_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 292, 133 }, - -1, - } }, - /* search876_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 2538, 827 }, - -1, - } }, - - /* replace876_0_0 -> 132 in the cache */ - /* replace876_0_1 -> 135 in the cache */ - /* replace876_0 -> 1702 in the cache */ - /* replace876_1_0 -> 133 in the cache */ - /* replace876_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 133, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1702, 2540 }, - -1, - } }, - - /* ('ilt', '#a', ('imin', '#b', 'c')) => ('iand', ('ilt', 'a', 'b'), ('ilt', 'a', 'c')) */ - /* search877_0 -> 292 in the cache */ - /* search877_1_0 -> 293 in the cache */ - /* search877_1_1 -> 135 in the cache */ - /* search877_1 -> 2518 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 292, 2518 }, - -1, - } }, - - /* replace877_0_0 -> 132 in the cache */ - /* replace877_0_1 -> 133 in the cache */ - /* replace877_0 -> 2512 in the cache */ - /* replace877_1_0 -> 132 in the cache */ - /* replace877_1_1 -> 135 in the cache */ - /* replace877_1 -> 1672 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2512, 1672 }, - -1, - } }, - - /* ('ilt', ('imax', '#a', 'b'), '#c') => ('iand', ('ilt', 'a', 'c'), ('ilt', 'b', 'c')) */ - /* search878_0_0 -> 292 in the cache */ - /* search878_0_1 -> 133 in the cache */ - /* search878_0 -> 2522 in the cache */ - /* search878_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 2522, 827 }, - -1, - } }, - - /* replace878_0_0 -> 132 in the cache */ - /* replace878_0_1 -> 135 in the cache */ - /* replace878_0 -> 1672 in the cache */ - /* replace878_1_0 -> 133 in the cache */ - /* replace878_1_1 -> 135 in the cache */ - /* replace878_1 -> 2516 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1672, 2516 }, - -1, - } }, - - /* ('ige', '#a', ('imax', '#b', 'c')) => ('iand', ('ige', 'a', 'b'), ('ige', 'a', 'c')) */ - /* search879_0 -> 292 in the cache */ - /* search879_1_0 -> 293 in the cache */ - /* search879_1_1 -> 135 in the cache */ - /* search879_1 -> 2510 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 292, 2510 }, - -1, - } }, - - /* replace879_0_0 -> 132 in the cache */ - /* replace879_0_1 -> 133 in the cache */ - /* replace879_0 -> 2520 in the cache */ - /* replace879_1_0 -> 132 in the cache */ - /* replace879_1_1 -> 135 in the cache */ - /* replace879_1 -> 1682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2520, 1682 }, - -1, - } }, - - /* ('ige', ('imin', '#a', 'b'), '#c') => ('iand', ('ige', 'a', 'c'), ('ige', 'b', 'c')) */ - /* search880_0_0 -> 292 in the cache */ - /* search880_0_1 -> 133 in the cache */ - /* search880_0 -> 2514 in the cache */ - /* search880_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 2514, 827 }, - -1, - } }, - - /* replace880_0_0 -> 132 in the cache */ - /* replace880_0_1 -> 135 in the cache */ - /* replace880_0 -> 1682 in the cache */ - /* replace880_1_0 -> 133 in the cache */ - /* replace880_1_1 -> 135 in the cache */ - /* replace880_1 -> 2524 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1682, 2524 }, - -1, - } }, - - /* ('ult', '#a', ('umin', '#b', 'c')) => ('iand', ('ult', 'a', 'b'), ('ult', 'a', 'c')) */ - /* search881_0 -> 292 in the cache */ - /* search881_1_0 -> 293 in the cache */ - /* search881_1_1 -> 135 in the cache */ - /* search881_1 -> 2534 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 292, 2534 }, - -1, - } }, - - /* replace881_0_0 -> 132 in the cache */ - /* replace881_0_1 -> 133 in the cache */ - /* replace881_0 -> 2528 in the cache */ - /* replace881_1_0 -> 132 in the cache */ - /* replace881_1_1 -> 135 in the cache */ - /* replace881_1 -> 1692 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2528, 1692 }, - -1, - } }, - - /* ('ult', ('umax', '#a', 'b'), '#c') => ('iand', ('ult', 'a', 'c'), ('ult', 'b', 'c')) */ - /* search882_0_0 -> 292 in the cache */ - /* search882_0_1 -> 133 in the cache */ - /* search882_0 -> 2538 in the cache */ - /* search882_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 2538, 827 }, - -1, - } }, - - /* replace882_0_0 -> 132 in the cache */ - /* replace882_0_1 -> 135 in the cache */ - /* replace882_0 -> 1692 in the cache */ - /* replace882_1_0 -> 133 in the cache */ - /* replace882_1_1 -> 135 in the cache */ - /* replace882_1 -> 2532 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1692, 2532 }, - -1, - } }, - - /* ('uge', '#a', ('umax', '#b', 'c')) => ('iand', ('uge', 'a', 'b'), ('uge', 'a', 'c')) */ - /* search883_0 -> 292 in the cache */ - /* search883_1_0 -> 293 in the cache */ - /* search883_1_1 -> 135 in the cache */ - /* search883_1 -> 2526 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 292, 2526 }, - -1, - } }, - - /* replace883_0_0 -> 132 in the cache */ - /* replace883_0_1 -> 133 in the cache */ - /* replace883_0 -> 2536 in the cache */ - /* replace883_1_0 -> 132 in the cache */ - /* replace883_1_1 -> 135 in the cache */ - /* replace883_1 -> 1702 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2536, 1702 }, - -1, - } }, - - /* ('uge', ('umin', '#a', 'b'), '#c') => ('iand', ('uge', 'a', 'c'), ('uge', 'b', 'c')) */ - /* search884_0_0 -> 292 in the cache */ - /* search884_0_1 -> 133 in the cache */ - /* search884_0 -> 2530 in the cache */ - /* search884_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 2530, 827 }, - -1, - } }, - - /* replace884_0_0 -> 132 in the cache */ - /* replace884_0_1 -> 135 in the cache */ - /* replace884_0 -> 1702 in the cache */ - /* replace884_1_0 -> 133 in the cache */ - /* replace884_1_1 -> 135 in the cache */ - /* replace884_1 -> 2540 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1702, 2540 }, - -1, - } }, - - /* ('bcsel', ('ilt', 'a', 0), ('ineg', ('ishr', 'a', 'b')), ('ishr', 'a', 'b')) => ('iabs', ('ishr', 'a', 'b')) */ - /* search885_0_0 -> 32 in the cache */ - /* search885_0_1 -> 61 in the cache */ - /* search885_0 -> 1262 in the cache */ - /* search885_1_0_0 -> 32 in the cache */ - /* search885_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 32, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2558 }, - -1, - } }, - /* search885_2_0 -> 32 in the cache */ - /* search885_2_1 -> 36 in the cache */ - /* search885_2 -> 2558 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1262, 2559, 2558 }, - -1, - } }, - - /* replace885_0_0 -> 32 in the cache */ - /* replace885_0_1 -> 36 in the cache */ - /* replace885_0 -> 2558 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 2558 }, - -1, - } }, - - /* ('iabs', ('ishr', ('iabs', 'a'), 'b')) => ('ishr', ('iabs', 'a'), 'b') */ - /* search886_0_0_0 -> 32 in the cache */ - /* search886_0_0 -> 114 in the cache */ - /* search886_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 114, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 2562 }, - -1, - } }, - - /* replace886_0_0 -> 32 in the cache */ - /* replace886_0 -> 114 in the cache */ - /* replace886_1 -> 36 in the cache */ - /* replace886 -> 2562 in the cache */ - - /* ('fabs', ('slt', 'a', 'b')) => ('slt', 'a', 'b') */ - /* search887_0_0 -> 0 in the cache */ - /* search887_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_slt, - -1, 0, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 2564 }, - -1, - } }, - - /* replace887_0 -> 0 in the cache */ - /* replace887_1 -> 3 in the cache */ - /* replace887 -> 2564 in the cache */ - - /* ('fabs', ('sge', 'a', 'b')) => ('sge', 'a', 'b') */ - /* search888_0_0 -> 0 in the cache */ - /* search888_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sge, - -1, 0, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 2566 }, - -1, - } }, - - /* replace888_0 -> 0 in the cache */ - /* replace888_1 -> 3 in the cache */ - /* replace888 -> 2566 in the cache */ - - /* ('fabs', ('seq', 'a', 'b')) => ('seq', 'a', 'b') */ - /* search889_0_0 -> 0 in the cache */ - /* search889_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 2568 }, - -1, - } }, - - /* replace889_0 -> 0 in the cache */ - /* replace889_1 -> 3 in the cache */ - /* replace889 -> 2568 in the cache */ - - /* ('fabs', ('sne', 'a', 'b')) => ('sne', 'a', 'b') */ - /* search890_0_0 -> 0 in the cache */ - /* search890_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 2570 }, - -1, - } }, - - /* replace890_0 -> 0 in the cache */ - /* replace890_1 -> 3 in the cache */ - /* replace890 -> 2570 in the cache */ - - /* ('slt', 'a', 'b') => ('b2f', ('flt', 'a', 'b')) */ - /* search891_0 -> 0 in the cache */ - /* search891_1 -> 3 in the cache */ - /* search891 -> 2564 in the cache */ - - /* replace891_0_0 -> 0 in the cache */ - /* replace891_0_1 -> 3 in the cache */ - /* replace891_0 -> 1062 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1062 }, - -1, - } }, - - /* ('sge', 'a', 'b') => ('b2f', ('fge', 'a', 'b')) */ - /* search892_0 -> 0 in the cache */ - /* search892_1 -> 3 in the cache */ - /* search892 -> 2566 in the cache */ - - /* replace892_0_0 -> 0 in the cache */ - /* replace892_0_1 -> 3 in the cache */ - /* replace892_0 -> 1059 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1059 }, - -1, - } }, - - /* ('seq', 'a', 'b') => ('b2f', ('feq', 'a', 'b')) */ - /* search893_0 -> 0 in the cache */ - /* search893_1 -> 3 in the cache */ - /* search893 -> 2568 in the cache */ - - /* replace893_0_0 -> 0 in the cache */ - /* replace893_0_1 -> 3 in the cache */ - /* replace893_0 -> 1068 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2f, - -1, 1, - { 1068 }, - -1, - } }, - - /* ('sne', 'a', 'b') => ('b2f', ('fneu', 'a', 'b')) */ - /* search894_0 -> 0 in the cache */ - /* search894_1 -> 3 in the cache */ - /* search894 -> 2570 in the cache */ - - /* replace894_0_0 -> 0 in the cache */ - /* replace894_0_1 -> 3 in the cache */ - /* replace894_0 -> 1065 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2f, - -1, 1, - { 1065 }, - -1, - } }, - - /* ('seq', ('seq', 'a', 'b'), 1.0) => ('seq', 'a', 'b') */ - /* search895_0_0 -> 0 in the cache */ - /* search895_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search895_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2576, 280 }, - -1, - } }, - - /* replace895_0 -> 0 in the cache */ - /* replace895_1 -> 3 in the cache */ - /* replace895 -> 2568 in the cache */ - - /* ('seq', ('sne', 'a', 'b'), 1.0) => ('sne', 'a', 'b') */ - /* search896_0_0 -> 0 in the cache */ - /* search896_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 1, 1, - { 0, 3 }, - -1, - } }, - /* search896_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2578, 280 }, - -1, - } }, - - /* replace896_0 -> 0 in the cache */ - /* replace896_1 -> 3 in the cache */ - /* replace896 -> 2570 in the cache */ - - /* ('seq', ('slt', 'a', 'b'), 1.0) => ('slt', 'a', 'b') */ - /* search897_0_0 -> 0 in the cache */ - /* search897_0_1 -> 3 in the cache */ - /* search897_0 -> 2564 in the cache */ - /* search897_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 1, - { 2564, 280 }, - -1, - } }, - - /* replace897_0 -> 0 in the cache */ - /* replace897_1 -> 3 in the cache */ - /* replace897 -> 2564 in the cache */ - - /* ('seq', ('sge', 'a', 'b'), 1.0) => ('sge', 'a', 'b') */ - /* search898_0_0 -> 0 in the cache */ - /* search898_0_1 -> 3 in the cache */ - /* search898_0 -> 2566 in the cache */ - /* search898_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 1, - { 2566, 280 }, - -1, - } }, - - /* replace898_0 -> 0 in the cache */ - /* replace898_1 -> 3 in the cache */ - /* replace898 -> 2566 in the cache */ - - /* ('sne', ('seq', 'a', 'b'), 0.0) => ('seq', 'a', 'b') */ - /* search899_0_0 -> 0 in the cache */ - /* search899_0_1 -> 3 in the cache */ - /* search899_0 -> 2576 in the cache */ - /* search899_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 2, - { 2576, 266 }, - -1, - } }, - - /* replace899_0 -> 0 in the cache */ - /* replace899_1 -> 3 in the cache */ - /* replace899 -> 2568 in the cache */ - - /* ('sne', ('sne', 'a', 'b'), 0.0) => ('sne', 'a', 'b') */ - /* search900_0_0 -> 0 in the cache */ - /* search900_0_1 -> 3 in the cache */ - /* search900_0 -> 2578 in the cache */ - /* search900_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 2, - { 2578, 266 }, - -1, - } }, - - /* replace900_0 -> 0 in the cache */ - /* replace900_1 -> 3 in the cache */ - /* replace900 -> 2570 in the cache */ - - /* ('sne', ('slt', 'a', 'b'), 0.0) => ('slt', 'a', 'b') */ - /* search901_0_0 -> 0 in the cache */ - /* search901_0_1 -> 3 in the cache */ - /* search901_0 -> 2564 in the cache */ - /* search901_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 1, - { 2564, 266 }, - -1, - } }, - - /* replace901_0 -> 0 in the cache */ - /* replace901_1 -> 3 in the cache */ - /* replace901 -> 2564 in the cache */ - - /* ('sne', ('sge', 'a', 'b'), 0.0) => ('sge', 'a', 'b') */ - /* search902_0_0 -> 0 in the cache */ - /* search902_0_1 -> 3 in the cache */ - /* search902_0 -> 2566 in the cache */ - /* search902_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 1, - { 2566, 266 }, - -1, - } }, - - /* replace902_0 -> 0 in the cache */ - /* replace902_1 -> 3 in the cache */ - /* replace902 -> 2566 in the cache */ - - /* ('seq', ('seq', 'a', 'b'), 0.0) => ('sne', 'a', 'b') */ - /* search903_0_0 -> 0 in the cache */ - /* search903_0_1 -> 3 in the cache */ - /* search903_0 -> 2576 in the cache */ - /* search903_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2576, 266 }, - -1, - } }, - - /* replace903_0 -> 0 in the cache */ - /* replace903_1 -> 3 in the cache */ - /* replace903 -> 2570 in the cache */ - - /* ('seq', ('sne', 'a', 'b'), 0.0) => ('seq', 'a', 'b') */ - /* search904_0_0 -> 0 in the cache */ - /* search904_0_1 -> 3 in the cache */ - /* search904_0 -> 2578 in the cache */ - /* search904_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2578, 266 }, - -1, - } }, - - /* replace904_0 -> 0 in the cache */ - /* replace904_1 -> 3 in the cache */ - /* replace904 -> 2568 in the cache */ - - /* ('seq', ('slt', 'a', 'b'), 0.0) => ('sge', 'a', 'b') */ - /* search905_0_0 -> 0 in the cache */ - /* search905_0_1 -> 3 in the cache */ - /* search905_0 -> 2564 in the cache */ - /* search905_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 1, - { 2564, 266 }, - -1, - } }, - - /* replace905_0 -> 0 in the cache */ - /* replace905_1 -> 3 in the cache */ - /* replace905 -> 2566 in the cache */ - - /* ('seq', ('sge', 'a', 'b'), 0.0) => ('slt', 'a', 'b') */ - /* search906_0_0 -> 0 in the cache */ - /* search906_0_1 -> 3 in the cache */ - /* search906_0 -> 2566 in the cache */ - /* search906_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_seq, - 0, 1, - { 2566, 266 }, - -1, - } }, - - /* replace906_0 -> 0 in the cache */ - /* replace906_1 -> 3 in the cache */ - /* replace906 -> 2564 in the cache */ - - /* ('sne', ('seq', 'a', 'b'), 1.0) => ('sne', 'a', 'b') */ - /* search907_0_0 -> 0 in the cache */ - /* search907_0_1 -> 3 in the cache */ - /* search907_0 -> 2576 in the cache */ - /* search907_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 2, - { 2576, 280 }, - -1, - } }, - - /* replace907_0 -> 0 in the cache */ - /* replace907_1 -> 3 in the cache */ - /* replace907 -> 2570 in the cache */ - - /* ('sne', ('sne', 'a', 'b'), 1.0) => ('seq', 'a', 'b') */ - /* search908_0_0 -> 0 in the cache */ - /* search908_0_1 -> 3 in the cache */ - /* search908_0 -> 2578 in the cache */ - /* search908_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 2, - { 2578, 280 }, - -1, - } }, - - /* replace908_0 -> 0 in the cache */ - /* replace908_1 -> 3 in the cache */ - /* replace908 -> 2568 in the cache */ - - /* ('sne', ('slt', 'a', 'b'), 1.0) => ('sge', 'a', 'b') */ - /* search909_0_0 -> 0 in the cache */ - /* search909_0_1 -> 3 in the cache */ - /* search909_0 -> 2564 in the cache */ - /* search909_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 1, - { 2564, 280 }, - -1, - } }, - - /* replace909_0 -> 0 in the cache */ - /* replace909_1 -> 3 in the cache */ - /* replace909 -> 2566 in the cache */ - - /* ('sne', ('sge', 'a', 'b'), 1.0) => ('slt', 'a', 'b') */ - /* search910_0_0 -> 0 in the cache */ - /* search910_0_1 -> 3 in the cache */ - /* search910_0 -> 2566 in the cache */ - /* search910_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_sne, - 0, 1, - { 2566, 280 }, - -1, - } }, - - /* replace910_0 -> 0 in the cache */ - /* replace910_1 -> 3 in the cache */ - /* replace910 -> 2564 in the cache */ - - /* ('fall_equal2', 'a', 'b') => ('fmin', ('seq', 'a.x', 'b.x'), ('seq', 'a.y', 'b.y')) */ - /* search911_0 -> 16 in the cache */ - /* search911_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fall_equal2, - 0, 1, - { 16, 36 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_seq, - 0, 1, - { 2595, 2596 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {1}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {1}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_seq, - 1, 1, - { 2598, 2599 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmin, - -1, 2, - { 2597, 2600 }, - -1, - } }, - - /* ('fall_equal3', 'a', 'b') => ('seq', ('fany_nequal3', 'a', 'b'), 0.0) */ - /* search912_0 -> 16 in the cache */ - /* search912_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fall_equal3, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace912_0_0 -> 16 in the cache */ - /* replace912_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal3, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace912_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2603, 121 }, - -1, - } }, - - /* ('fall_equal4', 'a', 'b') => ('seq', ('fany_nequal4', 'a', 'b'), 0.0) */ - /* search913_0 -> 16 in the cache */ - /* search913_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fall_equal4, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace913_0_0 -> 16 in the cache */ - /* replace913_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal4, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace913_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2606, 121 }, - -1, - } }, - - /* ('fall_equal8', 'a', 'b') => ('seq', ('fany_nequal8', 'a', 'b'), 0.0) */ - /* search914_0 -> 16 in the cache */ - /* search914_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fall_equal8, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace914_0_0 -> 16 in the cache */ - /* replace914_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal8, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace914_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2609, 121 }, - -1, - } }, - - /* ('fall_equal16', 'a', 'b') => ('seq', ('fany_nequal16', 'a', 'b'), 0.0) */ - /* search915_0 -> 16 in the cache */ - /* search915_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fall_equal16, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace915_0_0 -> 16 in the cache */ - /* replace915_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal16, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace915_1 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_seq, - 0, 2, - { 2612, 121 }, - -1, - } }, - - /* ('fany_nequal2', 'a', 'b') => ('fmax', ('sne', 'a.x', 'b.x'), ('sne', 'a.y', 'b.y')) */ - /* search916_0 -> 16 in the cache */ - /* search916_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal2, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace916_0_0 -> 2595 in the cache */ - /* replace916_0_1 -> 2596 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sne, - 0, 1, - { 2595, 2596 }, - -1, - } }, - /* replace916_1_0 -> 2598 in the cache */ - /* replace916_1_1 -> 2599 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sne, - 1, 1, - { 2598, 2599 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmax, - -1, 2, - { 2615, 2616 }, - -1, - } }, - - /* ('fany_nequal3', 'a', 'b') => ('fsat', ('fdot3', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) */ - /* search917_0 -> 16 in the cache */ - /* search917_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal3, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace917_0_0_0 -> 16 in the cache */ - /* replace917_0_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sne, - 0, 1, - { 16, 36 }, - -1, - } }, - /* replace917_0_1_0 -> 16 in the cache */ - /* replace917_0_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sne, - 1, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdot3, - -1, 2, - { 2619, 2620 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 2, - { 2621 }, - -1, - } }, - - /* ('fany_nequal4', 'a', 'b') => ('fsat', ('fdot4', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) */ - /* search918_0 -> 16 in the cache */ - /* search918_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal4, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace918_0_0_0 -> 16 in the cache */ - /* replace918_0_0_1 -> 36 in the cache */ - /* replace918_0_0 -> 2619 in the cache */ - /* replace918_0_1_0 -> 16 in the cache */ - /* replace918_0_1_1 -> 36 in the cache */ - /* replace918_0_1 -> 2620 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdot4, - -1, 2, - { 2619, 2620 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 2, - { 2624 }, - -1, - } }, - - /* ('fany_nequal8', 'a', 'b') => ('fsat', ('fdot8', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) */ - /* search919_0 -> 16 in the cache */ - /* search919_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal8, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace919_0_0_0 -> 16 in the cache */ - /* replace919_0_0_1 -> 36 in the cache */ - /* replace919_0_0 -> 2619 in the cache */ - /* replace919_0_1_0 -> 16 in the cache */ - /* replace919_0_1_1 -> 36 in the cache */ - /* replace919_0_1 -> 2620 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdot8, - -1, 2, - { 2619, 2620 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 2, - { 2627 }, - -1, - } }, - - /* ('fany_nequal16', 'a', 'b') => ('fsat', ('fdot16', ('sne', 'a', 'b'), ('sne', 'a', 'b'))) */ - /* search920_0 -> 16 in the cache */ - /* search920_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fany_nequal16, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace920_0_0_0 -> 16 in the cache */ - /* replace920_0_0_1 -> 36 in the cache */ - /* replace920_0_0 -> 2619 in the cache */ - /* replace920_0_1_0 -> 16 in the cache */ - /* replace920_0_1_1 -> 36 in the cache */ - /* replace920_0_1 -> 2620 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdot16, - -1, 2, - { 2619, 2620 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 2, - { 2630 }, - -1, - } }, - - /* ('ball_iequal2', 'a', 'b') => ('iand', ('ieq', 'a.x', 'b.x'), ('ieq', 'a.y', 'b.y')) */ - /* search921_0 -> 0 in the cache */ - /* search921_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal2, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace921_0_0 -> 779 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 779, 2633 }, - -1, - } }, - /* replace921_1_0 -> 780 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {1}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 780, 2635 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2634, 2636 }, - -1, - } }, - - /* ('ball_iequal3', 'a', 'b') => ('iand', ('ieq', 'a.x', 'b.x'), ('iand', ('ieq', 'a.y', 'b.y'), ('ieq', 'a.z', 'b.z'))) */ - /* search922_0 -> 0 in the cache */ - /* search922_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal3, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace922_0_0 -> 779 in the cache */ - /* replace922_0_1 -> 2633 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 779, 2633 }, - -1, - } }, - /* replace922_1_0_0 -> 780 in the cache */ - /* replace922_1_0_1 -> 2635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 780, 2635 }, - -1, - } }, - /* replace922_1_1_0 -> 781 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {2}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 3, 1, - { 781, 2641 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2640, 2642 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 4, - { 2639, 2643 }, - -1, - } }, - - /* ('ball_iequal4', 'a', 'b') => ('iand', ('iand', ('ieq', 'a.x', 'b.x'), ('ieq', 'a.y', 'b.y')), ('iand', ('ieq', 'a.z', 'b.z'), ('ieq', 'a.w', 'b.w'))) */ - /* search923_0 -> 0 in the cache */ - /* search923_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal4, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace923_0_0_0 -> 779 in the cache */ - /* replace923_0_0_1 -> 2633 in the cache */ - /* replace923_0_0 -> 2634 in the cache */ - /* replace923_0_1_0 -> 780 in the cache */ - /* replace923_0_1_1 -> 2635 in the cache */ - /* replace923_0_1 -> 2636 in the cache */ - /* replace923_0 -> 2637 in the cache */ - /* replace923_1_0_0 -> 781 in the cache */ - /* replace923_1_0_1 -> 2641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 781, 2641 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {3}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {3}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 3, 1, - { 2647, 2648 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2646, 2649 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2637, 2650 }, - -1, - } }, - - /* ('ball_iequal8', 'a', 'b') => ('iand', ('iand', ('iand', ('ieq', 'a.a', 'b.a'), ('ieq', 'a.b', 'b.b')), ('iand', ('ieq', 'a.c', 'b.c'), ('ieq', 'a.d', 'b.d'))), ('iand', ('iand', ('ieq', 'a.e', 'b.e'), ('ieq', 'a.f', 'b.f')), ('iand', ('ieq', 'a.g', 'b.g'), ('ieq', 'a.h', 'b.h')))) */ - /* search924_0 -> 0 in the cache */ - /* search924_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal8, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace924_0_0_0_0 -> 779 in the cache */ - /* replace924_0_0_0_1 -> 2633 in the cache */ - /* replace924_0_0_0 -> 2634 in the cache */ - /* replace924_0_0_1_0 -> 780 in the cache */ - /* replace924_0_0_1_1 -> 2635 in the cache */ - /* replace924_0_0_1 -> 2636 in the cache */ - /* replace924_0_0 -> 2637 in the cache */ - /* replace924_0_1_0_0 -> 781 in the cache */ - /* replace924_0_1_0_1 -> 2641 in the cache */ - /* replace924_0_1_0 -> 2646 in the cache */ - /* replace924_0_1_1_0 -> 2647 in the cache */ - /* replace924_0_1_1_1 -> 2648 in the cache */ - /* replace924_0_1_1 -> 2649 in the cache */ - /* replace924_0_1 -> 2650 in the cache */ - /* replace924_0 -> 2651 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {4}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {4}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 4, 1, - { 2653, 2654 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {5}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {5}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 5, 1, - { 2656, 2657 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2655, 2658 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {6}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {6}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 6, 1, - { 2660, 2661 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {7}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {7}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 7, 1, - { 2663, 2664 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2662, 2665 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2659, 2666 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 8, - { 2651, 2667 }, - -1, - } }, - - /* ('ball_iequal16', 'a', 'b') => ('iand', ('iand', ('iand', ('iand', ('ieq', 'a.a', 'b.a'), ('ieq', 'a.b', 'b.b')), ('iand', ('ieq', 'a.c', 'b.c'), ('ieq', 'a.d', 'b.d'))), ('iand', ('iand', ('ieq', 'a.e', 'b.e'), ('ieq', 'a.f', 'b.f')), ('iand', ('ieq', 'a.g', 'b.g'), ('ieq', 'a.h', 'b.h')))), ('iand', ('iand', ('iand', ('ieq', 'a.i', 'b.i'), ('ieq', 'a.j', 'b.j')), ('iand', ('ieq', 'a.k', 'b.k'), ('ieq', 'a.l', 'b.l'))), ('iand', ('iand', ('ieq', 'a.m', 'b.m'), ('ieq', 'a.n', 'b.n')), ('iand', ('ieq', 'a.o', 'b.o'), ('ieq', 'a.p', 'b.p'))))) */ - /* search925_0 -> 0 in the cache */ - /* search925_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal16, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace925_0_0_0_0_0 -> 779 in the cache */ - /* replace925_0_0_0_0_1 -> 2633 in the cache */ - /* replace925_0_0_0_0 -> 2634 in the cache */ - /* replace925_0_0_0_1_0 -> 780 in the cache */ - /* replace925_0_0_0_1_1 -> 2635 in the cache */ - /* replace925_0_0_0_1 -> 2636 in the cache */ - /* replace925_0_0_0 -> 2637 in the cache */ - /* replace925_0_0_1_0_0 -> 781 in the cache */ - /* replace925_0_0_1_0_1 -> 2641 in the cache */ - /* replace925_0_0_1_0 -> 2646 in the cache */ - /* replace925_0_0_1_1_0 -> 2647 in the cache */ - /* replace925_0_0_1_1_1 -> 2648 in the cache */ - /* replace925_0_0_1_1 -> 2649 in the cache */ - /* replace925_0_0_1 -> 2650 in the cache */ - /* replace925_0_0 -> 2651 in the cache */ - /* replace925_0_1_0_0_0 -> 2653 in the cache */ - /* replace925_0_1_0_0_1 -> 2654 in the cache */ - /* replace925_0_1_0_0 -> 2655 in the cache */ - /* replace925_0_1_0_1_0 -> 2656 in the cache */ - /* replace925_0_1_0_1_1 -> 2657 in the cache */ - /* replace925_0_1_0_1 -> 2658 in the cache */ - /* replace925_0_1_0 -> 2659 in the cache */ - /* replace925_0_1_1_0_0 -> 2660 in the cache */ - /* replace925_0_1_1_0_1 -> 2661 in the cache */ - /* replace925_0_1_1_0 -> 2662 in the cache */ - /* replace925_0_1_1_1_0 -> 2663 in the cache */ - /* replace925_0_1_1_1_1 -> 2664 in the cache */ - /* replace925_0_1_1_1 -> 2665 in the cache */ - /* replace925_0_1_1 -> 2666 in the cache */ - /* replace925_0_1 -> 2667 in the cache */ - /* replace925_0 -> 2668 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {8}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {8}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 8, 1, - { 2670, 2671 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {9}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {9}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 9, 1, - { 2673, 2674 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2672, 2675 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {10}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {10}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 10, 1, - { 2677, 2678 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {11}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {11}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 11, 1, - { 2680, 2681 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2679, 2682 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2676, 2683 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {12}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {12}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 12, 1, - { 2685, 2686 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {13}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {13}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 13, 1, - { 2688, 2689 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2687, 2690 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {14}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {14}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 14, 1, - { 2692, 2693 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 15, 1, - { 2695, 2696 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2694, 2697 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2691, 2698 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 8, - { 2684, 2699 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 16, - { 2668, 2700 }, - -1, - } }, - - /* ('ball_fequal2', 'a', 'b') => ('iand', ('feq', 'a.x', 'b.x'), ('feq', 'a.y', 'b.y')) */ - /* search926_0 -> 0 in the cache */ - /* search926_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_fequal2, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace926_0_0 -> 779 in the cache */ - /* replace926_0_1 -> 2633 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 779, 2633 }, - -1, - } }, - /* replace926_1_0 -> 780 in the cache */ - /* replace926_1_1 -> 2635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 780, 2635 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2703, 2704 }, - -1, - } }, - - /* ('ball_fequal3', 'a', 'b') => ('iand', ('feq', 'a.x', 'b.x'), ('iand', ('feq', 'a.y', 'b.y'), ('feq', 'a.z', 'b.z'))) */ - /* search927_0 -> 0 in the cache */ - /* search927_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_fequal3, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace927_0_0 -> 779 in the cache */ - /* replace927_0_1 -> 2633 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 779, 2633 }, - -1, - } }, - /* replace927_1_0_0 -> 780 in the cache */ - /* replace927_1_0_1 -> 2635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 2, 1, - { 780, 2635 }, - -1, - } }, - /* replace927_1_1_0 -> 781 in the cache */ - /* replace927_1_1_1 -> 2641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 3, 1, - { 781, 2641 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2708, 2709 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 4, - { 2707, 2710 }, - -1, - } }, - - /* ('ball_fequal4', 'a', 'b') => ('iand', ('iand', ('feq', 'a.x', 'b.x'), ('feq', 'a.y', 'b.y')), ('iand', ('feq', 'a.z', 'b.z'), ('feq', 'a.w', 'b.w'))) */ - /* search928_0 -> 0 in the cache */ - /* search928_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_fequal4, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace928_0_0_0 -> 779 in the cache */ - /* replace928_0_0_1 -> 2633 in the cache */ - /* replace928_0_0 -> 2703 in the cache */ - /* replace928_0_1_0 -> 780 in the cache */ - /* replace928_0_1_1 -> 2635 in the cache */ - /* replace928_0_1 -> 2704 in the cache */ - /* replace928_0 -> 2705 in the cache */ - /* replace928_1_0_0 -> 781 in the cache */ - /* replace928_1_0_1 -> 2641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 2, 1, - { 781, 2641 }, - -1, - } }, - /* replace928_1_1_0 -> 2647 in the cache */ - /* replace928_1_1_1 -> 2648 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 3, 1, - { 2647, 2648 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2713, 2714 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2705, 2715 }, - -1, - } }, - - /* ('ball_fequal8', 'a', 'b') => ('iand', ('iand', ('iand', ('feq', 'a.a', 'b.a'), ('feq', 'a.b', 'b.b')), ('iand', ('feq', 'a.c', 'b.c'), ('feq', 'a.d', 'b.d'))), ('iand', ('iand', ('feq', 'a.e', 'b.e'), ('feq', 'a.f', 'b.f')), ('iand', ('feq', 'a.g', 'b.g'), ('feq', 'a.h', 'b.h')))) */ - /* search929_0 -> 0 in the cache */ - /* search929_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_fequal8, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace929_0_0_0_0 -> 779 in the cache */ - /* replace929_0_0_0_1 -> 2633 in the cache */ - /* replace929_0_0_0 -> 2703 in the cache */ - /* replace929_0_0_1_0 -> 780 in the cache */ - /* replace929_0_0_1_1 -> 2635 in the cache */ - /* replace929_0_0_1 -> 2704 in the cache */ - /* replace929_0_0 -> 2705 in the cache */ - /* replace929_0_1_0_0 -> 781 in the cache */ - /* replace929_0_1_0_1 -> 2641 in the cache */ - /* replace929_0_1_0 -> 2713 in the cache */ - /* replace929_0_1_1_0 -> 2647 in the cache */ - /* replace929_0_1_1_1 -> 2648 in the cache */ - /* replace929_0_1_1 -> 2714 in the cache */ - /* replace929_0_1 -> 2715 in the cache */ - /* replace929_0 -> 2716 in the cache */ - /* replace929_1_0_0_0 -> 2653 in the cache */ - /* replace929_1_0_0_1 -> 2654 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 4, 1, - { 2653, 2654 }, - -1, - } }, - /* replace929_1_0_1_0 -> 2656 in the cache */ - /* replace929_1_0_1_1 -> 2657 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 5, 1, - { 2656, 2657 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2718, 2719 }, - -1, - } }, - /* replace929_1_1_0_0 -> 2660 in the cache */ - /* replace929_1_1_0_1 -> 2661 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 6, 1, - { 2660, 2661 }, - -1, - } }, - /* replace929_1_1_1_0 -> 2663 in the cache */ - /* replace929_1_1_1_1 -> 2664 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 7, 1, - { 2663, 2664 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2721, 2722 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2720, 2723 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 8, - { 2716, 2724 }, - -1, - } }, - - /* ('ball_fequal16', 'a', 'b') => ('iand', ('iand', ('iand', ('iand', ('feq', 'a.a', 'b.a'), ('feq', 'a.b', 'b.b')), ('iand', ('feq', 'a.c', 'b.c'), ('feq', 'a.d', 'b.d'))), ('iand', ('iand', ('feq', 'a.e', 'b.e'), ('feq', 'a.f', 'b.f')), ('iand', ('feq', 'a.g', 'b.g'), ('feq', 'a.h', 'b.h')))), ('iand', ('iand', ('iand', ('feq', 'a.i', 'b.i'), ('feq', 'a.j', 'b.j')), ('iand', ('feq', 'a.k', 'b.k'), ('feq', 'a.l', 'b.l'))), ('iand', ('iand', ('feq', 'a.m', 'b.m'), ('feq', 'a.n', 'b.n')), ('iand', ('feq', 'a.o', 'b.o'), ('feq', 'a.p', 'b.p'))))) */ - /* search930_0 -> 0 in the cache */ - /* search930_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_fequal16, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace930_0_0_0_0_0 -> 779 in the cache */ - /* replace930_0_0_0_0_1 -> 2633 in the cache */ - /* replace930_0_0_0_0 -> 2703 in the cache */ - /* replace930_0_0_0_1_0 -> 780 in the cache */ - /* replace930_0_0_0_1_1 -> 2635 in the cache */ - /* replace930_0_0_0_1 -> 2704 in the cache */ - /* replace930_0_0_0 -> 2705 in the cache */ - /* replace930_0_0_1_0_0 -> 781 in the cache */ - /* replace930_0_0_1_0_1 -> 2641 in the cache */ - /* replace930_0_0_1_0 -> 2713 in the cache */ - /* replace930_0_0_1_1_0 -> 2647 in the cache */ - /* replace930_0_0_1_1_1 -> 2648 in the cache */ - /* replace930_0_0_1_1 -> 2714 in the cache */ - /* replace930_0_0_1 -> 2715 in the cache */ - /* replace930_0_0 -> 2716 in the cache */ - /* replace930_0_1_0_0_0 -> 2653 in the cache */ - /* replace930_0_1_0_0_1 -> 2654 in the cache */ - /* replace930_0_1_0_0 -> 2718 in the cache */ - /* replace930_0_1_0_1_0 -> 2656 in the cache */ - /* replace930_0_1_0_1_1 -> 2657 in the cache */ - /* replace930_0_1_0_1 -> 2719 in the cache */ - /* replace930_0_1_0 -> 2720 in the cache */ - /* replace930_0_1_1_0_0 -> 2660 in the cache */ - /* replace930_0_1_1_0_1 -> 2661 in the cache */ - /* replace930_0_1_1_0 -> 2721 in the cache */ - /* replace930_0_1_1_1_0 -> 2663 in the cache */ - /* replace930_0_1_1_1_1 -> 2664 in the cache */ - /* replace930_0_1_1_1 -> 2722 in the cache */ - /* replace930_0_1_1 -> 2723 in the cache */ - /* replace930_0_1 -> 2724 in the cache */ - /* replace930_0 -> 2725 in the cache */ - /* replace930_1_0_0_0_0 -> 2670 in the cache */ - /* replace930_1_0_0_0_1 -> 2671 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 8, 1, - { 2670, 2671 }, - -1, - } }, - /* replace930_1_0_0_1_0 -> 2673 in the cache */ - /* replace930_1_0_0_1_1 -> 2674 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 9, 1, - { 2673, 2674 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2727, 2728 }, - -1, - } }, - /* replace930_1_0_1_0_0 -> 2677 in the cache */ - /* replace930_1_0_1_0_1 -> 2678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 10, 1, - { 2677, 2678 }, - -1, - } }, - /* replace930_1_0_1_1_0 -> 2680 in the cache */ - /* replace930_1_0_1_1_1 -> 2681 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 11, 1, - { 2680, 2681 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2730, 2731 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2729, 2732 }, - -1, - } }, - /* replace930_1_1_0_0_0 -> 2685 in the cache */ - /* replace930_1_1_0_0_1 -> 2686 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 12, 1, - { 2685, 2686 }, - -1, - } }, - /* replace930_1_1_0_1_0 -> 2688 in the cache */ - /* replace930_1_1_0_1_1 -> 2689 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 13, 1, - { 2688, 2689 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2734, 2735 }, - -1, - } }, - /* replace930_1_1_1_0_0 -> 2692 in the cache */ - /* replace930_1_1_1_0_1 -> 2693 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 14, 1, - { 2692, 2693 }, - -1, - } }, - /* replace930_1_1_1_1_0 -> 2695 in the cache */ - /* replace930_1_1_1_1_1 -> 2696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 15, 1, - { 2695, 2696 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 2, - { 2737, 2738 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 4, - { 2736, 2739 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 8, - { 2733, 2740 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - -1, 16, - { 2725, 2741 }, - -1, - } }, - - /* ('bany_inequal2', 'a', 'b') => ('ior', ('ine', 'a.x', 'b.x'), ('ine', 'a.y', 'b.y')) */ - /* search931_0 -> 0 in the cache */ - /* search931_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal2, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace931_0_0 -> 779 in the cache */ - /* replace931_0_1 -> 2633 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 779, 2633 }, - -1, - } }, - /* replace931_1_0 -> 780 in the cache */ - /* replace931_1_1 -> 2635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 780, 2635 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2744, 2745 }, - -1, - } }, - - /* ('bany_inequal3', 'a', 'b') => ('ior', ('ine', 'a.x', 'b.x'), ('ior', ('ine', 'a.y', 'b.y'), ('ine', 'a.z', 'b.z'))) */ - /* search932_0 -> 0 in the cache */ - /* search932_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal3, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace932_0_0 -> 779 in the cache */ - /* replace932_0_1 -> 2633 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 779, 2633 }, - -1, - } }, - /* replace932_1_0_0 -> 780 in the cache */ - /* replace932_1_0_1 -> 2635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 780, 2635 }, - -1, - } }, - /* replace932_1_1_0 -> 781 in the cache */ - /* replace932_1_1_1 -> 2641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 3, 1, - { 781, 2641 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2749, 2750 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 4, - { 2748, 2751 }, - -1, - } }, - - /* ('bany_inequal4', 'a', 'b') => ('ior', ('ior', ('ine', 'a.x', 'b.x'), ('ine', 'a.y', 'b.y')), ('ior', ('ine', 'a.z', 'b.z'), ('ine', 'a.w', 'b.w'))) */ - /* search933_0 -> 0 in the cache */ - /* search933_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal4, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace933_0_0_0 -> 779 in the cache */ - /* replace933_0_0_1 -> 2633 in the cache */ - /* replace933_0_0 -> 2744 in the cache */ - /* replace933_0_1_0 -> 780 in the cache */ - /* replace933_0_1_1 -> 2635 in the cache */ - /* replace933_0_1 -> 2745 in the cache */ - /* replace933_0 -> 2746 in the cache */ - /* replace933_1_0_0 -> 781 in the cache */ - /* replace933_1_0_1 -> 2641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 781, 2641 }, - -1, - } }, - /* replace933_1_1_0 -> 2647 in the cache */ - /* replace933_1_1_1 -> 2648 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 3, 1, - { 2647, 2648 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2754, 2755 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2746, 2756 }, - -1, - } }, - - /* ('bany_inequal8', 'a', 'b') => ('ior', ('ior', ('ior', ('ine', 'a.a', 'b.a'), ('ine', 'a.b', 'b.b')), ('ior', ('ine', 'a.c', 'b.c'), ('ine', 'a.d', 'b.d'))), ('ior', ('ior', ('ine', 'a.e', 'b.e'), ('ine', 'a.f', 'b.f')), ('ior', ('ine', 'a.g', 'b.g'), ('ine', 'a.h', 'b.h')))) */ - /* search934_0 -> 0 in the cache */ - /* search934_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal8, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace934_0_0_0_0 -> 779 in the cache */ - /* replace934_0_0_0_1 -> 2633 in the cache */ - /* replace934_0_0_0 -> 2744 in the cache */ - /* replace934_0_0_1_0 -> 780 in the cache */ - /* replace934_0_0_1_1 -> 2635 in the cache */ - /* replace934_0_0_1 -> 2745 in the cache */ - /* replace934_0_0 -> 2746 in the cache */ - /* replace934_0_1_0_0 -> 781 in the cache */ - /* replace934_0_1_0_1 -> 2641 in the cache */ - /* replace934_0_1_0 -> 2754 in the cache */ - /* replace934_0_1_1_0 -> 2647 in the cache */ - /* replace934_0_1_1_1 -> 2648 in the cache */ - /* replace934_0_1_1 -> 2755 in the cache */ - /* replace934_0_1 -> 2756 in the cache */ - /* replace934_0 -> 2757 in the cache */ - /* replace934_1_0_0_0 -> 2653 in the cache */ - /* replace934_1_0_0_1 -> 2654 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 4, 1, - { 2653, 2654 }, - -1, - } }, - /* replace934_1_0_1_0 -> 2656 in the cache */ - /* replace934_1_0_1_1 -> 2657 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 5, 1, - { 2656, 2657 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2759, 2760 }, - -1, - } }, - /* replace934_1_1_0_0 -> 2660 in the cache */ - /* replace934_1_1_0_1 -> 2661 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 6, 1, - { 2660, 2661 }, - -1, - } }, - /* replace934_1_1_1_0 -> 2663 in the cache */ - /* replace934_1_1_1_1 -> 2664 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 7, 1, - { 2663, 2664 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2762, 2763 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2761, 2764 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 8, - { 2757, 2765 }, - -1, - } }, - - /* ('bany_inequal16', 'a', 'b') => ('ior', ('ior', ('ior', ('ior', ('ine', 'a.a', 'b.a'), ('ine', 'a.b', 'b.b')), ('ior', ('ine', 'a.c', 'b.c'), ('ine', 'a.d', 'b.d'))), ('ior', ('ior', ('ine', 'a.e', 'b.e'), ('ine', 'a.f', 'b.f')), ('ior', ('ine', 'a.g', 'b.g'), ('ine', 'a.h', 'b.h')))), ('ior', ('ior', ('ior', ('ine', 'a.i', 'b.i'), ('ine', 'a.j', 'b.j')), ('ior', ('ine', 'a.k', 'b.k'), ('ine', 'a.l', 'b.l'))), ('ior', ('ior', ('ine', 'a.m', 'b.m'), ('ine', 'a.n', 'b.n')), ('ior', ('ine', 'a.o', 'b.o'), ('ine', 'a.p', 'b.p'))))) */ - /* search935_0 -> 0 in the cache */ - /* search935_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal16, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace935_0_0_0_0_0 -> 779 in the cache */ - /* replace935_0_0_0_0_1 -> 2633 in the cache */ - /* replace935_0_0_0_0 -> 2744 in the cache */ - /* replace935_0_0_0_1_0 -> 780 in the cache */ - /* replace935_0_0_0_1_1 -> 2635 in the cache */ - /* replace935_0_0_0_1 -> 2745 in the cache */ - /* replace935_0_0_0 -> 2746 in the cache */ - /* replace935_0_0_1_0_0 -> 781 in the cache */ - /* replace935_0_0_1_0_1 -> 2641 in the cache */ - /* replace935_0_0_1_0 -> 2754 in the cache */ - /* replace935_0_0_1_1_0 -> 2647 in the cache */ - /* replace935_0_0_1_1_1 -> 2648 in the cache */ - /* replace935_0_0_1_1 -> 2755 in the cache */ - /* replace935_0_0_1 -> 2756 in the cache */ - /* replace935_0_0 -> 2757 in the cache */ - /* replace935_0_1_0_0_0 -> 2653 in the cache */ - /* replace935_0_1_0_0_1 -> 2654 in the cache */ - /* replace935_0_1_0_0 -> 2759 in the cache */ - /* replace935_0_1_0_1_0 -> 2656 in the cache */ - /* replace935_0_1_0_1_1 -> 2657 in the cache */ - /* replace935_0_1_0_1 -> 2760 in the cache */ - /* replace935_0_1_0 -> 2761 in the cache */ - /* replace935_0_1_1_0_0 -> 2660 in the cache */ - /* replace935_0_1_1_0_1 -> 2661 in the cache */ - /* replace935_0_1_1_0 -> 2762 in the cache */ - /* replace935_0_1_1_1_0 -> 2663 in the cache */ - /* replace935_0_1_1_1_1 -> 2664 in the cache */ - /* replace935_0_1_1_1 -> 2763 in the cache */ - /* replace935_0_1_1 -> 2764 in the cache */ - /* replace935_0_1 -> 2765 in the cache */ - /* replace935_0 -> 2766 in the cache */ - /* replace935_1_0_0_0_0 -> 2670 in the cache */ - /* replace935_1_0_0_0_1 -> 2671 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 8, 1, - { 2670, 2671 }, - -1, - } }, - /* replace935_1_0_0_1_0 -> 2673 in the cache */ - /* replace935_1_0_0_1_1 -> 2674 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 9, 1, - { 2673, 2674 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2768, 2769 }, - -1, - } }, - /* replace935_1_0_1_0_0 -> 2677 in the cache */ - /* replace935_1_0_1_0_1 -> 2678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 10, 1, - { 2677, 2678 }, - -1, - } }, - /* replace935_1_0_1_1_0 -> 2680 in the cache */ - /* replace935_1_0_1_1_1 -> 2681 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 11, 1, - { 2680, 2681 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2771, 2772 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2770, 2773 }, - -1, - } }, - /* replace935_1_1_0_0_0 -> 2685 in the cache */ - /* replace935_1_1_0_0_1 -> 2686 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 12, 1, - { 2685, 2686 }, - -1, - } }, - /* replace935_1_1_0_1_0 -> 2688 in the cache */ - /* replace935_1_1_0_1_1 -> 2689 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 13, 1, - { 2688, 2689 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2775, 2776 }, - -1, - } }, - /* replace935_1_1_1_0_0 -> 2692 in the cache */ - /* replace935_1_1_1_0_1 -> 2693 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 14, 1, - { 2692, 2693 }, - -1, - } }, - /* replace935_1_1_1_1_0 -> 2695 in the cache */ - /* replace935_1_1_1_1_1 -> 2696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 15, 1, - { 2695, 2696 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2778, 2779 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2777, 2780 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 8, - { 2774, 2781 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 16, - { 2766, 2782 }, - -1, - } }, - - /* ('bany_fnequal2', 'a', 'b') => ('ior', ('fneu', 'a.x', 'b.x'), ('fneu', 'a.y', 'b.y')) */ - /* search936_0 -> 0 in the cache */ - /* search936_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_fnequal2, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace936_0_0 -> 779 in the cache */ - /* replace936_0_1 -> 2633 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 779, 2633 }, - -1, - } }, - /* replace936_1_0 -> 780 in the cache */ - /* replace936_1_1 -> 2635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 780, 2635 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2785, 2786 }, - -1, - } }, - - /* ('bany_fnequal3', 'a', 'b') => ('ior', ('fneu', 'a.x', 'b.x'), ('ior', ('fneu', 'a.y', 'b.y'), ('fneu', 'a.z', 'b.z'))) */ - /* search937_0 -> 0 in the cache */ - /* search937_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_fnequal3, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace937_0_0 -> 779 in the cache */ - /* replace937_0_1 -> 2633 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 779, 2633 }, - -1, - } }, - /* replace937_1_0_0 -> 780 in the cache */ - /* replace937_1_0_1 -> 2635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 2, 1, - { 780, 2635 }, - -1, - } }, - /* replace937_1_1_0 -> 781 in the cache */ - /* replace937_1_1_1 -> 2641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 3, 1, - { 781, 2641 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2790, 2791 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 4, - { 2789, 2792 }, - -1, - } }, - - /* ('bany_fnequal4', 'a', 'b') => ('ior', ('ior', ('fneu', 'a.x', 'b.x'), ('fneu', 'a.y', 'b.y')), ('ior', ('fneu', 'a.z', 'b.z'), ('fneu', 'a.w', 'b.w'))) */ - /* search938_0 -> 0 in the cache */ - /* search938_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_fnequal4, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace938_0_0_0 -> 779 in the cache */ - /* replace938_0_0_1 -> 2633 in the cache */ - /* replace938_0_0 -> 2785 in the cache */ - /* replace938_0_1_0 -> 780 in the cache */ - /* replace938_0_1_1 -> 2635 in the cache */ - /* replace938_0_1 -> 2786 in the cache */ - /* replace938_0 -> 2787 in the cache */ - /* replace938_1_0_0 -> 781 in the cache */ - /* replace938_1_0_1 -> 2641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 2, 1, - { 781, 2641 }, - -1, - } }, - /* replace938_1_1_0 -> 2647 in the cache */ - /* replace938_1_1_1 -> 2648 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 3, 1, - { 2647, 2648 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2795, 2796 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2787, 2797 }, - -1, - } }, - - /* ('bany_fnequal8', 'a', 'b') => ('ior', ('ior', ('ior', ('fneu', 'a.a', 'b.a'), ('fneu', 'a.b', 'b.b')), ('ior', ('fneu', 'a.c', 'b.c'), ('fneu', 'a.d', 'b.d'))), ('ior', ('ior', ('fneu', 'a.e', 'b.e'), ('fneu', 'a.f', 'b.f')), ('ior', ('fneu', 'a.g', 'b.g'), ('fneu', 'a.h', 'b.h')))) */ - /* search939_0 -> 0 in the cache */ - /* search939_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_fnequal8, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace939_0_0_0_0 -> 779 in the cache */ - /* replace939_0_0_0_1 -> 2633 in the cache */ - /* replace939_0_0_0 -> 2785 in the cache */ - /* replace939_0_0_1_0 -> 780 in the cache */ - /* replace939_0_0_1_1 -> 2635 in the cache */ - /* replace939_0_0_1 -> 2786 in the cache */ - /* replace939_0_0 -> 2787 in the cache */ - /* replace939_0_1_0_0 -> 781 in the cache */ - /* replace939_0_1_0_1 -> 2641 in the cache */ - /* replace939_0_1_0 -> 2795 in the cache */ - /* replace939_0_1_1_0 -> 2647 in the cache */ - /* replace939_0_1_1_1 -> 2648 in the cache */ - /* replace939_0_1_1 -> 2796 in the cache */ - /* replace939_0_1 -> 2797 in the cache */ - /* replace939_0 -> 2798 in the cache */ - /* replace939_1_0_0_0 -> 2653 in the cache */ - /* replace939_1_0_0_1 -> 2654 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 4, 1, - { 2653, 2654 }, - -1, - } }, - /* replace939_1_0_1_0 -> 2656 in the cache */ - /* replace939_1_0_1_1 -> 2657 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 5, 1, - { 2656, 2657 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2800, 2801 }, - -1, - } }, - /* replace939_1_1_0_0 -> 2660 in the cache */ - /* replace939_1_1_0_1 -> 2661 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 6, 1, - { 2660, 2661 }, - -1, - } }, - /* replace939_1_1_1_0 -> 2663 in the cache */ - /* replace939_1_1_1_1 -> 2664 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 7, 1, - { 2663, 2664 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2803, 2804 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2802, 2805 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 8, - { 2798, 2806 }, - -1, - } }, - - /* ('bany_fnequal16', 'a', 'b') => ('ior', ('ior', ('ior', ('ior', ('fneu', 'a.a', 'b.a'), ('fneu', 'a.b', 'b.b')), ('ior', ('fneu', 'a.c', 'b.c'), ('fneu', 'a.d', 'b.d'))), ('ior', ('ior', ('fneu', 'a.e', 'b.e'), ('fneu', 'a.f', 'b.f')), ('ior', ('fneu', 'a.g', 'b.g'), ('fneu', 'a.h', 'b.h')))), ('ior', ('ior', ('ior', ('fneu', 'a.i', 'b.i'), ('fneu', 'a.j', 'b.j')), ('ior', ('fneu', 'a.k', 'b.k'), ('fneu', 'a.l', 'b.l'))), ('ior', ('ior', ('fneu', 'a.m', 'b.m'), ('fneu', 'a.n', 'b.n')), ('ior', ('fneu', 'a.o', 'b.o'), ('fneu', 'a.p', 'b.p'))))) */ - /* search940_0 -> 0 in the cache */ - /* search940_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_fnequal16, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace940_0_0_0_0_0 -> 779 in the cache */ - /* replace940_0_0_0_0_1 -> 2633 in the cache */ - /* replace940_0_0_0_0 -> 2785 in the cache */ - /* replace940_0_0_0_1_0 -> 780 in the cache */ - /* replace940_0_0_0_1_1 -> 2635 in the cache */ - /* replace940_0_0_0_1 -> 2786 in the cache */ - /* replace940_0_0_0 -> 2787 in the cache */ - /* replace940_0_0_1_0_0 -> 781 in the cache */ - /* replace940_0_0_1_0_1 -> 2641 in the cache */ - /* replace940_0_0_1_0 -> 2795 in the cache */ - /* replace940_0_0_1_1_0 -> 2647 in the cache */ - /* replace940_0_0_1_1_1 -> 2648 in the cache */ - /* replace940_0_0_1_1 -> 2796 in the cache */ - /* replace940_0_0_1 -> 2797 in the cache */ - /* replace940_0_0 -> 2798 in the cache */ - /* replace940_0_1_0_0_0 -> 2653 in the cache */ - /* replace940_0_1_0_0_1 -> 2654 in the cache */ - /* replace940_0_1_0_0 -> 2800 in the cache */ - /* replace940_0_1_0_1_0 -> 2656 in the cache */ - /* replace940_0_1_0_1_1 -> 2657 in the cache */ - /* replace940_0_1_0_1 -> 2801 in the cache */ - /* replace940_0_1_0 -> 2802 in the cache */ - /* replace940_0_1_1_0_0 -> 2660 in the cache */ - /* replace940_0_1_1_0_1 -> 2661 in the cache */ - /* replace940_0_1_1_0 -> 2803 in the cache */ - /* replace940_0_1_1_1_0 -> 2663 in the cache */ - /* replace940_0_1_1_1_1 -> 2664 in the cache */ - /* replace940_0_1_1_1 -> 2804 in the cache */ - /* replace940_0_1_1 -> 2805 in the cache */ - /* replace940_0_1 -> 2806 in the cache */ - /* replace940_0 -> 2807 in the cache */ - /* replace940_1_0_0_0_0 -> 2670 in the cache */ - /* replace940_1_0_0_0_1 -> 2671 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 8, 1, - { 2670, 2671 }, - -1, - } }, - /* replace940_1_0_0_1_0 -> 2673 in the cache */ - /* replace940_1_0_0_1_1 -> 2674 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 9, 1, - { 2673, 2674 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2809, 2810 }, - -1, - } }, - /* replace940_1_0_1_0_0 -> 2677 in the cache */ - /* replace940_1_0_1_0_1 -> 2678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 10, 1, - { 2677, 2678 }, - -1, - } }, - /* replace940_1_0_1_1_0 -> 2680 in the cache */ - /* replace940_1_0_1_1_1 -> 2681 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 11, 1, - { 2680, 2681 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2812, 2813 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2811, 2814 }, - -1, - } }, - /* replace940_1_1_0_0_0 -> 2685 in the cache */ - /* replace940_1_1_0_0_1 -> 2686 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 12, 1, - { 2685, 2686 }, - -1, - } }, - /* replace940_1_1_0_1_0 -> 2688 in the cache */ - /* replace940_1_1_0_1_1 -> 2689 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 13, 1, - { 2688, 2689 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2816, 2817 }, - -1, - } }, - /* replace940_1_1_1_0_0 -> 2692 in the cache */ - /* replace940_1_1_1_0_1 -> 2693 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 14, 1, - { 2692, 2693 }, - -1, - } }, - /* replace940_1_1_1_1_0 -> 2695 in the cache */ - /* replace940_1_1_1_1_1 -> 2696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 15, 1, - { 2695, 2696 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 2, - { 2819, 2820 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 4, - { 2818, 2821 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 8, - { 2815, 2822 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - -1, 16, - { 2807, 2823 }, - -1, - } }, - - /* ('feq', ('seq', 'a', 'b'), 1.0) => ('feq', 'a', 'b') */ - /* search941_0_0 -> 0 in the cache */ - /* search941_0_1 -> 3 in the cache */ - /* search941_0 -> 2576 in the cache */ - /* search941_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 2576, 280 }, - -1, - } }, - - /* replace941_0 -> 0 in the cache */ - /* replace941_1 -> 3 in the cache */ - /* replace941 -> 1068 in the cache */ - - /* ('feq', ('sne', 'a', 'b'), 1.0) => ('fneu', 'a', 'b') */ - /* search942_0_0 -> 0 in the cache */ - /* search942_0_1 -> 3 in the cache */ - /* search942_0 -> 2578 in the cache */ - /* search942_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 2578, 280 }, - -1, - } }, - - /* replace942_0 -> 0 in the cache */ - /* replace942_1 -> 3 in the cache */ - /* replace942 -> 1065 in the cache */ - - /* ('feq', ('slt', 'a', 'b'), 1.0) => ('flt', 'a', 'b') */ - /* search943_0_0 -> 0 in the cache */ - /* search943_0_1 -> 3 in the cache */ - /* search943_0 -> 2564 in the cache */ - /* search943_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 2564, 280 }, - -1, - } }, - - /* replace943_0 -> 0 in the cache */ - /* replace943_1 -> 3 in the cache */ - /* replace943 -> 1062 in the cache */ - - /* ('feq', ('sge', 'a', 'b'), 1.0) => ('fge', 'a', 'b') */ - /* search944_0_0 -> 0 in the cache */ - /* search944_0_1 -> 3 in the cache */ - /* search944_0 -> 2566 in the cache */ - /* search944_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 2566, 280 }, - -1, - } }, - - /* replace944_0 -> 0 in the cache */ - /* replace944_1 -> 3 in the cache */ - /* replace944 -> 1059 in the cache */ - - /* ('fneu', ('seq', 'a', 'b'), 0.0) => ('feq', 'a', 'b') */ - /* search945_0_0 -> 0 in the cache */ - /* search945_0_1 -> 3 in the cache */ - /* search945_0 -> 2576 in the cache */ - /* search945_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 2576, 266 }, - -1, - } }, - - /* replace945_0 -> 0 in the cache */ - /* replace945_1 -> 3 in the cache */ - /* replace945 -> 1068 in the cache */ - - /* ('fneu', ('sne', 'a', 'b'), 0.0) => ('fneu', 'a', 'b') */ - /* search946_0_0 -> 0 in the cache */ - /* search946_0_1 -> 3 in the cache */ - /* search946_0 -> 2578 in the cache */ - /* search946_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 2578, 266 }, - -1, - } }, - - /* replace946_0 -> 0 in the cache */ - /* replace946_1 -> 3 in the cache */ - /* replace946 -> 1065 in the cache */ - - /* ('fneu', ('slt', 'a', 'b'), 0.0) => ('flt', 'a', 'b') */ - /* search947_0_0 -> 0 in the cache */ - /* search947_0_1 -> 3 in the cache */ - /* search947_0 -> 2564 in the cache */ - /* search947_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 2564, 266 }, - -1, - } }, - - /* replace947_0 -> 0 in the cache */ - /* replace947_1 -> 3 in the cache */ - /* replace947 -> 1062 in the cache */ - - /* ('fneu', ('sge', 'a', 'b'), 0.0) => ('fge', 'a', 'b') */ - /* search948_0_0 -> 0 in the cache */ - /* search948_0_1 -> 3 in the cache */ - /* search948_0 -> 2566 in the cache */ - /* search948_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 2566, 266 }, - -1, - } }, - - /* replace948_0 -> 0 in the cache */ - /* replace948_1 -> 3 in the cache */ - /* replace948 -> 1059 in the cache */ - - /* ('feq', ('seq', 'a', 'b'), 0.0) => ('fneu', 'a', 'b') */ - /* search949_0_0 -> 0 in the cache */ - /* search949_0_1 -> 3 in the cache */ - /* search949_0 -> 2576 in the cache */ - /* search949_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 2576, 266 }, - -1, - } }, - - /* replace949_0 -> 0 in the cache */ - /* replace949_1 -> 3 in the cache */ - /* replace949 -> 1065 in the cache */ - - /* ('feq', ('sne', 'a', 'b'), 0.0) => ('feq', 'a', 'b') */ - /* search950_0_0 -> 0 in the cache */ - /* search950_0_1 -> 3 in the cache */ - /* search950_0 -> 2578 in the cache */ - /* search950_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 2578, 266 }, - -1, - } }, - - /* replace950_0 -> 0 in the cache */ - /* replace950_1 -> 3 in the cache */ - /* replace950 -> 1068 in the cache */ - - /* ('feq', ('slt', 'a', 'b'), 0.0) => ('fge', 'a', 'b') */ - /* search951_0_0 -> 0 in the cache */ - /* search951_0_1 -> 3 in the cache */ - /* search951_0 -> 2564 in the cache */ - /* search951_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 2564, 266 }, - -1, - } }, - - /* replace951_0 -> 0 in the cache */ - /* replace951_1 -> 3 in the cache */ - /* replace951 -> 1059 in the cache */ - - /* ('feq', ('sge', 'a', 'b'), 0.0) => ('flt', 'a', 'b') */ - /* search952_0_0 -> 0 in the cache */ - /* search952_0_1 -> 3 in the cache */ - /* search952_0 -> 2566 in the cache */ - /* search952_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 2566, 266 }, - -1, - } }, - - /* replace952_0 -> 0 in the cache */ - /* replace952_1 -> 3 in the cache */ - /* replace952 -> 1062 in the cache */ - - /* ('fneu', ('seq', 'a', 'b'), 1.0) => ('fneu', 'a', 'b') */ - /* search953_0_0 -> 0 in the cache */ - /* search953_0_1 -> 3 in the cache */ - /* search953_0 -> 2576 in the cache */ - /* search953_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 2576, 280 }, - -1, - } }, - - /* replace953_0 -> 0 in the cache */ - /* replace953_1 -> 3 in the cache */ - /* replace953 -> 1065 in the cache */ - - /* ('fneu', ('sne', 'a', 'b'), 1.0) => ('feq', 'a', 'b') */ - /* search954_0_0 -> 0 in the cache */ - /* search954_0_1 -> 3 in the cache */ - /* search954_0 -> 2578 in the cache */ - /* search954_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 2578, 280 }, - -1, - } }, - - /* replace954_0 -> 0 in the cache */ - /* replace954_1 -> 3 in the cache */ - /* replace954 -> 1068 in the cache */ - - /* ('fneu', ('slt', 'a', 'b'), 1.0) => ('fge', 'a', 'b') */ - /* search955_0_0 -> 0 in the cache */ - /* search955_0_1 -> 3 in the cache */ - /* search955_0 -> 2564 in the cache */ - /* search955_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 2564, 280 }, - -1, - } }, - - /* replace955_0 -> 0 in the cache */ - /* replace955_1 -> 3 in the cache */ - /* replace955 -> 1059 in the cache */ - - /* ('fneu', ('sge', 'a', 'b'), 1.0) => ('flt', 'a', 'b') */ - /* search956_0_0 -> 0 in the cache */ - /* search956_0_1 -> 3 in the cache */ - /* search956_0 -> 2566 in the cache */ - /* search956_1 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 2566, 280 }, - -1, - } }, - - /* replace956_0 -> 0 in the cache */ - /* replace956_1 -> 3 in the cache */ - /* replace956 -> 1062 in the cache */ - - /* ('fneu', ('fneg', 'a'), 'a') => ('fneu', 'a', 0.0) */ - /* search957_0_0 -> 32 in the cache */ - /* search957_0 -> 107 in the cache */ - /* search957_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 107, 32 }, - -1, - } }, - - /* replace957_0 -> 32 in the cache */ - /* replace957_1 -> 117 in the cache */ - /* replace957 -> 1266 in the cache */ - - /* ('feq', ('fneg', 'a'), 'a') => ('feq', 'a', 0.0) */ - /* search958_0_0 -> 32 in the cache */ - /* search958_0 -> 107 in the cache */ - /* search958_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 107, 32 }, - -1, - } }, - - /* replace958_0 -> 32 in the cache */ - /* replace958_1 -> 117 in the cache */ - /* replace958 -> 1270 in the cache */ - - /* ('imul', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('iand', 'a', 'b')) */ - /* search959_0_0 -> 770 in the cache */ - /* search959_0 -> 1241 in the cache */ - /* search959_1_0 -> 1147 in the cache */ - /* search959_1 -> 2417 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 1241, 2417 }, - -1, - } }, - - /* replace959_0_0 -> 770 in the cache */ - /* replace959_0_1 -> 1147 in the cache */ - /* replace959_0 -> 1159 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 1, - { 1159 }, - -1, - } }, - - /* ('iand', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('iand', 'a', 'b')) */ - /* search960_0_0 -> 770 in the cache */ - /* search960_0 -> 1241 in the cache */ - /* search960_1_0 -> 1147 in the cache */ - /* search960_1 -> 2417 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1241, 2417 }, - -1, - } }, - - /* replace960_0_0 -> 770 in the cache */ - /* replace960_0_1 -> 1147 in the cache */ - /* replace960_0 -> 1159 in the cache */ - /* replace960 -> 2844 in the cache */ - - /* ('ior', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('ior', 'a', 'b')) */ - /* search961_0_0 -> 770 in the cache */ - /* search961_0 -> 1241 in the cache */ - /* search961_1_0 -> 1147 in the cache */ - /* search961_1 -> 2417 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 1241, 2417 }, - -1, - } }, - - /* replace961_0_0 -> 770 in the cache */ - /* replace961_0_1 -> 1147 in the cache */ - /* replace961_0 -> 1151 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 1, - { 1151 }, - -1, - } }, - - /* ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')) => ('b2f', ('iand', 'a', 'b')) */ - /* search962_0_0 -> 770 in the cache */ - /* search962_0 -> 1142 in the cache */ - /* search962_1_0 -> 1147 in the cache */ - /* search962_1 -> 1148 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 1142, 1148 }, - -1, - } }, - - /* replace962_0_0 -> 770 in the cache */ - /* replace962_0_1 -> 1147 in the cache */ - /* replace962_0 -> 1159 in the cache */ - /* replace962 -> 1279 in the cache */ - - /* ('fsat', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))) => ('b2f', ('ior', 'a', 'b')) */ - /* search963_0_0_0 -> 770 in the cache */ - /* search963_0_0 -> 1142 in the cache */ - /* search963_0_1_0 -> 1147 in the cache */ - /* search963_0_1 -> 1148 in the cache */ - /* search963_0 -> 1178 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 1178 }, - -1, - } }, - - /* replace963_0_0 -> 770 in the cache */ - /* replace963_0_1 -> 1147 in the cache */ - /* replace963_0 -> 1151 in the cache */ - /* replace963 -> 1276 in the cache */ - - /* ('iand', 'a@bool16', 1.0) => ('b2f', 'a') */ - { .variable = { - { nir_search_value_variable, 16 }, - 0, /* a */ - false, - nir_type_bool, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search964_1 -> 491 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2850, 491 }, - -1, - } }, - - /* replace964_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 11 }, - -1, - } }, - - /* ('iand', 'a@bool32', 1.0) => ('b2f', 'a') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - false, - nir_type_bool, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search965_1 -> 254 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2853, 254 }, - -1, - } }, - - /* replace965_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 16 }, - -1, - } }, - - /* ('flt', ('fneg', ('b2f', 'a@1')), 0) => a */ - /* search966_0_0_0 -> 770 in the cache */ - /* search966_0_0 -> 1142 in the cache */ - /* search966_0 -> 1145 in the cache */ - /* search966_1 -> 1242 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1145, 1242 }, - -1, - } }, - - /* replace966 -> 770 in the cache */ - - /* ('ilt', 'a', 'a') => False */ - /* search967_0 -> 32 in the cache */ - /* search967_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace967 -> 1090 in the cache */ - - /* ('ige', 'a', 'a') => True */ - /* search968_0 -> 32 in the cache */ - /* search968_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace968 -> 1248 in the cache */ - - /* ('ieq', 'a', 'a') => True */ - /* search969_0 -> 32 in the cache */ - /* search969_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace969 -> 1248 in the cache */ - - /* ('ine', 'a', 'a') => False */ - /* search970_0 -> 32 in the cache */ - /* search970_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace970 -> 1090 in the cache */ - - /* ('ult', 'a', 'a') => False */ - /* search971_0 -> 32 in the cache */ - /* search971_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace971 -> 1090 in the cache */ - - /* ('uge', 'a', 'a') => True */ - /* search972_0 -> 32 in the cache */ - /* search972_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace972 -> 1248 in the cache */ - - /* ('flt', 'a', 'a') => False */ - /* search973_0 -> 32 in the cache */ - /* search973_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace973 -> 1090 in the cache */ - - /* ('fge', 'a(is_a_number)', 'a') => True */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 16, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search974_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 2864, 32 }, - -1, - } }, - - /* replace974 -> 1248 in the cache */ - - /* ('feq', 'a(is_a_number)', 'a') => True */ - /* search975_0 -> 2864 in the cache */ - /* search975_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - -1, 0, - { 2864, 32 }, - -1, - } }, - - /* replace975 -> 1248 in the cache */ - - /* ('fneu', 'a(is_a_number)', 'a') => False */ - /* search976_0 -> 2864 in the cache */ - /* search976_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - -1, 0, - { 2864, 32 }, - -1, - } }, - - /* replace976 -> 1090 in the cache */ - - /* ('iand', 'a', 'a') => a */ - /* search977_0 -> 32 in the cache */ - /* search977_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace977 -> 32 in the cache */ - - /* ('iand', 'a', 0) => 0 */ - /* search978_0 -> 32 in the cache */ - /* search978_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace978 -> 61 in the cache */ - - /* ('iand', 'a', -1) => a */ - /* search979_0 -> 32 in the cache */ - /* search979_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 32, 63 }, - -1, - } }, - - /* replace979 -> 32 in the cache */ - - /* ('iand', 'a', ('inot', 'a')) => 0 */ - /* search980_0 -> 32 in the cache */ - /* search980_1_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 32, 2871 }, - -1, - } }, - - /* replace980 -> 61 in the cache */ - - /* ('ior', 'a', 'a') => a */ - /* search981_0 -> 32 in the cache */ - /* search981_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ior, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace981 -> 32 in the cache */ - - /* ('ior', 'a', 0) => a */ - /* search982_0 -> 32 in the cache */ - /* search982_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace982 -> 32 in the cache */ - - /* ('ior', 'a', -1) => -1 */ - /* search983_0 -> 32 in the cache */ - /* search983_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 32, 63 }, - -1, - } }, - - /* replace983 -> 63 in the cache */ - - /* ('ior', 'a', ('inot', 'a')) => -1 */ - /* search984_0 -> 32 in the cache */ - /* search984_1_0 -> 32 in the cache */ - /* search984_1 -> 2871 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 32, 2871 }, - -1, - } }, - - /* replace984 -> 63 in the cache */ - - /* ('ixor', 'a', 'a') => 0 */ - /* search985_0 -> 32 in the cache */ - /* search985_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ixor, - -1, 0, - { 32, 32 }, - -1, - } }, - - /* replace985 -> 61 in the cache */ - - /* ('ixor', 'a', 0) => a */ - /* search986_0 -> 32 in the cache */ - /* search986_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 32, 61 }, - -1, - } }, - - /* replace986 -> 32 in the cache */ - - /* ('ixor', 'a', ('ixor', 'a', 'b')) => b */ - /* search987_0 -> 0 in the cache */ - /* search987_1_0 -> 0 in the cache */ - /* search987_1_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 0, 2, - { 0, 2879 }, - -1, - } }, - - /* replace987 -> 3 in the cache */ - - /* ('ixor', 'a', -1) => ('inot', 'a') */ - /* search988_0 -> 32 in the cache */ - /* search988_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 32, 63 }, - -1, - } }, - - /* replace988_0 -> 32 in the cache */ - /* replace988 -> 2871 in the cache */ - - /* ('inot', ('inot', 'a')) => a */ - /* search989_0_0 -> 32 in the cache */ - /* search989_0 -> 2871 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 2871 }, - -1, - } }, - - /* replace989 -> 32 in the cache */ - - /* ('ior', ('iand', 'a', 'b'), 'b') => b */ - /* search990_0_0 -> 0 in the cache */ - /* search990_0_1 -> 3 in the cache */ - /* search990_0 -> 207 in the cache */ - /* search990_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 207, 3 }, - -1, - } }, - - /* replace990 -> 3 in the cache */ - - /* ('ior', ('ior', 'a', 'b'), 'b') => ('ior', 'a', 'b') */ - /* search991_0_0 -> 0 in the cache */ - /* search991_0_1 -> 3 in the cache */ - /* search991_0 -> 84 in the cache */ - /* search991_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 84, 3 }, - -1, - } }, - - /* replace991_0 -> 0 in the cache */ - /* replace991_1 -> 3 in the cache */ - /* replace991 -> 2506 in the cache */ - - /* ('iand', ('ior', 'a', 'b'), 'b') => b */ - /* search992_0_0 -> 0 in the cache */ - /* search992_0_1 -> 3 in the cache */ - /* search992_0 -> 84 in the cache */ - /* search992_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 84, 3 }, - -1, - } }, - - /* replace992 -> 3 in the cache */ - - /* ('iand', ('iand', 'a', 'b'), 'b') => ('iand', 'a', 'b') */ - /* search993_0_0 -> 0 in the cache */ - /* search993_0_1 -> 3 in the cache */ - /* search993_0 -> 207 in the cache */ - /* search993_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 207, 3 }, - -1, - } }, - - /* replace993_0 -> 0 in the cache */ - /* replace993_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('iand', ('iand(is_used_once)', 'a', 'b'), ('iand(is_used_once)', 'a', 'c')) => ('iand', 'a', ('iand', 'b', 'c')) */ - /* search994_0_0 -> 132 in the cache */ - /* search994_0_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 132, 133 }, - 0, - } }, - /* search994_1_0 -> 132 in the cache */ - /* search994_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 132, 135 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 2888, 2889 }, - -1, - } }, - - /* replace994_0 -> 132 in the cache */ - /* replace994_1_0 -> 133 in the cache */ - /* replace994_1_1 -> 135 in the cache */ - /* replace994_1 -> 198 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 132, 198 }, - -1, - } }, - - /* ('iand@64', 'a', '#b(is_lower_half_zero)') => ('pack_64_2x32_split', 0, ('iand', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) */ - /* search995_0 -> 21 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - true, - nir_type_invalid, - 20, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 2892 }, - -1, - } }, - - /* replace995_0 -> 128 in the cache */ - /* replace995_1_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_y, - -1, 0, - { 21 }, - -1, - } }, - /* replace995_1_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_y, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2894, 2895 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 128, 2896 }, - -1, - } }, - - /* ('iand@64', 'a', '#b(is_upper_half_zero)') => ('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), 0) */ - /* search996_0 -> 21 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - true, - nir_type_invalid, - 21, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 2898 }, - -1, - } }, - - /* replace996_0_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 0, - { 21 }, - -1, - } }, - /* replace996_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2900, 2901 }, - -1, - } }, - /* replace996_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2902, 128 }, - -1, - } }, - - /* ('iand@64', 'a', '#b(is_lower_half_negative_one)') => ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('iand', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) */ - /* search997_0 -> 21 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - true, - nir_type_invalid, - 22, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 2904 }, - -1, - } }, - - /* replace997_0_0 -> 21 in the cache */ - /* replace997_0 -> 2900 in the cache */ - /* replace997_1_0_0 -> 21 in the cache */ - /* replace997_1_0 -> 2894 in the cache */ - /* replace997_1_1_0 -> 41 in the cache */ - /* replace997_1_1 -> 2895 in the cache */ - /* replace997_1 -> 2896 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2900, 2896 }, - -1, - } }, - - /* ('iand@64', 'a', '#b(is_upper_half_negative_one)') => ('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), ('unpack_64_2x32_split_y', 'a')) */ - /* search998_0 -> 21 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - true, - nir_type_invalid, - 23, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 2907 }, - -1, - } }, - - /* replace998_0_0_0 -> 21 in the cache */ - /* replace998_0_0 -> 2900 in the cache */ - /* replace998_0_1_0 -> 41 in the cache */ - /* replace998_0_1 -> 2901 in the cache */ - /* replace998_0 -> 2902 in the cache */ - /* replace998_1_0 -> 21 in the cache */ - /* replace998_1 -> 2894 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2902, 2894 }, - -1, - } }, - - /* ('ior@64', 'a', '#b(is_lower_half_zero)') => ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('ior', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) */ - /* search999_0 -> 21 in the cache */ - /* search999_1 -> 2892 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 21, 2892 }, - -1, - } }, - - /* replace999_0_0 -> 21 in the cache */ - /* replace999_0 -> 2900 in the cache */ - /* replace999_1_0_0 -> 21 in the cache */ - /* replace999_1_0 -> 2894 in the cache */ - /* replace999_1_1_0 -> 41 in the cache */ - /* replace999_1_1 -> 2895 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2894, 2895 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2900, 2911 }, - -1, - } }, - - /* ('ior@64', 'a', '#b(is_upper_half_zero)') => ('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), ('unpack_64_2x32_split_y', 'a')) */ - /* search1000_0 -> 21 in the cache */ - /* search1000_1 -> 2898 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 21, 2898 }, - -1, - } }, - - /* replace1000_0_0_0 -> 21 in the cache */ - /* replace1000_0_0 -> 2900 in the cache */ - /* replace1000_0_1_0 -> 41 in the cache */ - /* replace1000_0_1 -> 2901 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2900, 2901 }, - -1, - } }, - /* replace1000_1_0 -> 21 in the cache */ - /* replace1000_1 -> 2894 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2914, 2894 }, - -1, - } }, - - /* ('ior@64', 'a', '#b(is_lower_half_negative_one)') => ('pack_64_2x32_split', -1, ('ior', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) */ - /* search1001_0 -> 21 in the cache */ - /* search1001_1 -> 2904 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 21, 2904 }, - -1, - } }, - - /* replace1001_0 -> 130 in the cache */ - /* replace1001_1_0_0 -> 21 in the cache */ - /* replace1001_1_0 -> 2894 in the cache */ - /* replace1001_1_1_0 -> 41 in the cache */ - /* replace1001_1_1 -> 2895 in the cache */ - /* replace1001_1 -> 2911 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 130, 2911 }, - -1, - } }, - - /* ('ior@64', 'a', '#b(is_upper_half_negative_one)') => ('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), -1) */ - /* search1002_0 -> 21 in the cache */ - /* search1002_1 -> 2907 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 21, 2907 }, - -1, - } }, - - /* replace1002_0_0_0 -> 21 in the cache */ - /* replace1002_0_0 -> 2900 in the cache */ - /* replace1002_0_1_0 -> 41 in the cache */ - /* replace1002_0_1 -> 2901 in the cache */ - /* replace1002_0 -> 2914 in the cache */ - /* replace1002_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2914, 130 }, - -1, - } }, - - /* ('ixor@64', 'a', '#b(is_lower_half_zero)') => ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('ixor', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b'))) */ - /* search1003_0 -> 21 in the cache */ - /* search1003_1 -> 2892 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 21, 2892 }, - -1, - } }, - - /* replace1003_0_0 -> 21 in the cache */ - /* replace1003_0 -> 2900 in the cache */ - /* replace1003_1_0_0 -> 21 in the cache */ - /* replace1003_1_0 -> 2894 in the cache */ - /* replace1003_1_1_0 -> 41 in the cache */ - /* replace1003_1_1 -> 2895 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2894, 2895 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2900, 2921 }, - -1, - } }, - - /* ('ixor@64', 'a', '#b(is_upper_half_zero)') => ('pack_64_2x32_split', ('ixor', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_x', 'b')), ('unpack_64_2x32_split_y', 'a')) */ - /* search1004_0 -> 21 in the cache */ - /* search1004_1 -> 2898 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 21, 2898 }, - -1, - } }, - - /* replace1004_0_0_0 -> 21 in the cache */ - /* replace1004_0_0 -> 2900 in the cache */ - /* replace1004_0_1_0 -> 41 in the cache */ - /* replace1004_0_1 -> 2901 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2900, 2901 }, - -1, - } }, - /* replace1004_1_0 -> 21 in the cache */ - /* replace1004_1 -> 2894 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 1, - { 2924, 2894 }, - -1, - } }, - - /* ('iand', ('inot', 'a'), ('inot', 'b')) => ('inot', ('ior', 'a', 'b')) */ - /* search1005_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 0 }, - -1, - } }, - /* search1005_1_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2926, 2927 }, - -1, - } }, - - /* replace1005_0_0 -> 0 in the cache */ - /* replace1005_0_1 -> 3 in the cache */ - /* replace1005_0 -> 2506 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 2506 }, - -1, - } }, - - /* ('ior', ('inot', 'a'), ('inot', 'b')) => ('inot', ('iand', 'a', 'b')) */ - /* search1006_0_0 -> 0 in the cache */ - /* search1006_0 -> 2926 in the cache */ - /* search1006_1_0 -> 3 in the cache */ - /* search1006_1 -> 2927 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2926, 2927 }, - -1, - } }, - - /* replace1006_0_0 -> 0 in the cache */ - /* replace1006_0_1 -> 3 in the cache */ - /* replace1006_0 -> 2887 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 2887 }, - -1, - } }, - - /* ('ishl', 0, 'a') => 0 */ - /* search1007_0 -> 1242 in the cache */ - /* search1007_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 1242, 16 }, - -1, - } }, - - /* replace1007 -> 1242 in the cache */ - - /* ('ishl', 'a', 0) => a */ - /* search1008_0 -> 32 in the cache */ - /* search1008_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 32, 128 }, - -1, - } }, - - /* replace1008 -> 32 in the cache */ - - /* ('ishr', 0, 'a') => 0 */ - /* search1009_0 -> 1242 in the cache */ - /* search1009_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 1242, 16 }, - -1, - } }, - - /* replace1009 -> 1242 in the cache */ - - /* ('ishr', -1, 'a') => -1 */ - { .constant = { - { nir_search_value_constant, 0 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - /* search1010_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 2935, 16 }, - -1, - } }, - - /* replace1010 -> 2935 in the cache */ - - /* ('ishr', 'a', 0) => a */ - /* search1011_0 -> 32 in the cache */ - /* search1011_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 32, 128 }, - -1, - } }, - - /* replace1011 -> 32 in the cache */ - - /* ('ushr', 0, 'a') => 0 */ - /* search1012_0 -> 1242 in the cache */ - /* search1012_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 1242, 16 }, - -1, - } }, - - /* replace1012 -> 1242 in the cache */ - - /* ('ushr', 'a', 0) => a */ - /* search1013_0 -> 32 in the cache */ - /* search1013_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 32, 128 }, - -1, - } }, - - /* replace1013 -> 32 in the cache */ - - /* ('ior', ('ishl@16', 'a', 'b'), ('ushr@16', 'a', ('iadd', 16, ('ineg', 'b')))) => ('urol', 'a', 'b') */ - /* search1014_0_0 -> 11 in the cache */ - /* search1014_0_1 -> 36 in the cache */ - /* search1014_0 -> 2332 in the cache */ - /* search1014_1_0 -> 11 in the cache */ - /* search1014_1_1_0 -> 866 in the cache */ - /* search1014_1_1_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 866, 2940 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 11, 2941 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 2332, 2942 }, - -1, - } }, - - /* replace1014_0 -> 11 in the cache */ - /* replace1014_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_urol, - -1, 0, - { 11, 36 }, - -1, - } }, - - /* ('ior', ('ishl@16', 'a', 'b'), ('ushr@16', 'a', ('isub', 16, 'b'))) => ('urol', 'a', 'b') */ - /* search1015_0_0 -> 11 in the cache */ - /* search1015_0_1 -> 36 in the cache */ - /* search1015_0 -> 2332 in the cache */ - /* search1015_1_0 -> 11 in the cache */ - /* search1015_1_1_0 -> 866 in the cache */ - /* search1015_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 866, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 11, 2945 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2332, 2946 }, - -1, - } }, - - /* replace1015_0 -> 11 in the cache */ - /* replace1015_1 -> 36 in the cache */ - /* replace1015 -> 2944 in the cache */ - - /* ('ior', ('ishl@32', 'a', 'b'), ('ushr@32', 'a', ('iadd', 32, ('ineg', 'b')))) => ('urol', 'a', 'b') */ - /* search1016_0_0 -> 16 in the cache */ - /* search1016_0_1 -> 36 in the cache */ - /* search1016_0 -> 959 in the cache */ - /* search1016_1_0 -> 16 in the cache */ - /* search1016_1_1_0 -> 887 in the cache */ - /* search1016_1_1_1_0 -> 36 in the cache */ - /* search1016_1_1_1 -> 2940 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 887, 2940 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 16, 2948 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 959, 2949 }, - -1, - } }, - - /* replace1016_0 -> 16 in the cache */ - /* replace1016_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_urol, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('ior', ('ishl@32', 'a', 'b'), ('ushr@32', 'a', ('isub', 32, 'b'))) => ('urol', 'a', 'b') */ - /* search1017_0_0 -> 16 in the cache */ - /* search1017_0_1 -> 36 in the cache */ - /* search1017_0 -> 959 in the cache */ - /* search1017_1_0 -> 16 in the cache */ - /* search1017_1_1_0 -> 887 in the cache */ - /* search1017_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 887, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 2952 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 959, 2953 }, - -1, - } }, - - /* replace1017_0 -> 16 in the cache */ - /* replace1017_1 -> 36 in the cache */ - /* replace1017 -> 2951 in the cache */ - - /* ('ior', ('ushr@16', 'a', 'b'), ('ishl@16', 'a', ('iadd', 16, ('ineg', 'b')))) => ('uror', 'a', 'b') */ - /* search1018_0_0 -> 11 in the cache */ - /* search1018_0_1 -> 36 in the cache */ - /* search1018_0 -> 2336 in the cache */ - /* search1018_1_0 -> 11 in the cache */ - /* search1018_1_1_0 -> 866 in the cache */ - /* search1018_1_1_1_0 -> 36 in the cache */ - /* search1018_1_1_1 -> 2940 in the cache */ - /* search1018_1_1 -> 2941 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 11, 2941 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 2336, 2955 }, - -1, - } }, - - /* replace1018_0 -> 11 in the cache */ - /* replace1018_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_uror, - -1, 0, - { 11, 36 }, - -1, - } }, - - /* ('ior', ('ushr@16', 'a', 'b'), ('ishl@16', 'a', ('isub', 16, 'b'))) => ('uror', 'a', 'b') */ - /* search1019_0_0 -> 11 in the cache */ - /* search1019_0_1 -> 36 in the cache */ - /* search1019_0 -> 2336 in the cache */ - /* search1019_1_0 -> 11 in the cache */ - /* search1019_1_1_0 -> 866 in the cache */ - /* search1019_1_1_1 -> 36 in the cache */ - /* search1019_1_1 -> 2945 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 11, 2945 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2336, 2958 }, - -1, - } }, - - /* replace1019_0 -> 11 in the cache */ - /* replace1019_1 -> 36 in the cache */ - /* replace1019 -> 2957 in the cache */ - - /* ('ior', ('ushr@32', 'a', 'b'), ('ishl@32', 'a', ('iadd', 32, ('ineg', 'b')))) => ('uror', 'a', 'b') */ - /* search1020_0_0 -> 16 in the cache */ - /* search1020_0_1 -> 36 in the cache */ - /* search1020_0 -> 2365 in the cache */ - /* search1020_1_0 -> 16 in the cache */ - /* search1020_1_1_0 -> 887 in the cache */ - /* search1020_1_1_1_0 -> 36 in the cache */ - /* search1020_1_1_1 -> 2940 in the cache */ - /* search1020_1_1 -> 2948 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 16, 2948 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 2365, 2960 }, - -1, - } }, - - /* replace1020_0 -> 16 in the cache */ - /* replace1020_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uror, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('ior', ('ushr@32', 'a', 'b'), ('ishl@32', 'a', ('isub', 32, 'b'))) => ('uror', 'a', 'b') */ - /* search1021_0_0 -> 16 in the cache */ - /* search1021_0_1 -> 36 in the cache */ - /* search1021_0 -> 2365 in the cache */ - /* search1021_1_0 -> 16 in the cache */ - /* search1021_1_1_0 -> 887 in the cache */ - /* search1021_1_1_1 -> 36 in the cache */ - /* search1021_1_1 -> 2952 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 2952 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2365, 2963 }, - -1, - } }, - - /* replace1021_0 -> 16 in the cache */ - /* replace1021_1 -> 36 in the cache */ - /* replace1021 -> 2962 in the cache */ - - /* ('urol@8', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 8, 'b'))) */ - /* search1022_0 -> 6 in the cache */ - /* search1022_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_urol, - -1, 0, - { 6, 36 }, - -1, - } }, - - /* replace1022_0_0 -> 6 in the cache */ - /* replace1022_0_1 -> 36 in the cache */ - /* replace1022_0 -> 2301 in the cache */ - /* replace1022_1_0 -> 6 in the cache */ - /* replace1022_1_1_0 -> 844 in the cache */ - /* replace1022_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 844, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 6, 2966 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2301, 2967 }, - -1, - } }, - - /* ('urol@16', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 16, 'b'))) */ - /* search1023_0 -> 11 in the cache */ - /* search1023_1 -> 36 in the cache */ - /* search1023 -> 2944 in the cache */ - - /* replace1023_0_0 -> 11 in the cache */ - /* replace1023_0_1 -> 36 in the cache */ - /* replace1023_0 -> 2332 in the cache */ - /* replace1023_1_0 -> 11 in the cache */ - /* replace1023_1_1_0 -> 866 in the cache */ - /* replace1023_1_1_1 -> 36 in the cache */ - /* replace1023_1_1 -> 2945 in the cache */ - /* replace1023_1 -> 2946 in the cache */ - /* replace1023 -> 2947 in the cache */ - - /* ('urol@32', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 32, 'b'))) */ - /* search1024_0 -> 16 in the cache */ - /* search1024_1 -> 36 in the cache */ - /* search1024 -> 2951 in the cache */ - - /* replace1024_0_0 -> 16 in the cache */ - /* replace1024_0_1 -> 36 in the cache */ - /* replace1024_0 -> 959 in the cache */ - /* replace1024_1_0 -> 16 in the cache */ - /* replace1024_1_1_0 -> 887 in the cache */ - /* replace1024_1_1_1 -> 36 in the cache */ - /* replace1024_1_1 -> 2952 in the cache */ - /* replace1024_1 -> 2953 in the cache */ - /* replace1024 -> 2954 in the cache */ - - /* ('urol@64', 'a', 'b') => ('ior', ('ishl', 'a', 'b'), ('ushr', 'a', ('isub', 64, 'b'))) */ - /* search1025_0 -> 21 in the cache */ - /* search1025_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_urol, - -1, 0, - { 21, 36 }, - -1, - } }, - - /* replace1025_0_0 -> 21 in the cache */ - /* replace1025_0_1 -> 36 in the cache */ - /* replace1025_0 -> 2392 in the cache */ - /* replace1025_1_0 -> 21 in the cache */ - /* replace1025_1_1_0 -> 907 in the cache */ - /* replace1025_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 907, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 2970 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2392, 2971 }, - -1, - } }, - - /* ('uror@8', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 8, 'b'))) */ - /* search1026_0 -> 6 in the cache */ - /* search1026_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_uror, - -1, 0, - { 6, 36 }, - -1, - } }, - - /* replace1026_0_0 -> 6 in the cache */ - /* replace1026_0_1 -> 36 in the cache */ - /* replace1026_0 -> 2305 in the cache */ - /* replace1026_1_0 -> 6 in the cache */ - /* replace1026_1_1_0 -> 844 in the cache */ - /* replace1026_1_1_1 -> 36 in the cache */ - /* replace1026_1_1 -> 2966 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 6, 2966 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2305, 2974 }, - -1, - } }, - - /* ('uror@16', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 16, 'b'))) */ - /* search1027_0 -> 11 in the cache */ - /* search1027_1 -> 36 in the cache */ - /* search1027 -> 2957 in the cache */ - - /* replace1027_0_0 -> 11 in the cache */ - /* replace1027_0_1 -> 36 in the cache */ - /* replace1027_0 -> 2336 in the cache */ - /* replace1027_1_0 -> 11 in the cache */ - /* replace1027_1_1_0 -> 866 in the cache */ - /* replace1027_1_1_1 -> 36 in the cache */ - /* replace1027_1_1 -> 2945 in the cache */ - /* replace1027_1 -> 2958 in the cache */ - /* replace1027 -> 2959 in the cache */ - - /* ('uror@32', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 32, 'b'))) */ - /* search1028_0 -> 16 in the cache */ - /* search1028_1 -> 36 in the cache */ - /* search1028 -> 2962 in the cache */ - - /* replace1028_0_0 -> 16 in the cache */ - /* replace1028_0_1 -> 36 in the cache */ - /* replace1028_0 -> 2365 in the cache */ - /* replace1028_1_0 -> 16 in the cache */ - /* replace1028_1_1_0 -> 887 in the cache */ - /* replace1028_1_1_1 -> 36 in the cache */ - /* replace1028_1_1 -> 2952 in the cache */ - /* replace1028_1 -> 2963 in the cache */ - /* replace1028 -> 2964 in the cache */ - - /* ('uror@64', 'a', 'b') => ('ior', ('ushr', 'a', 'b'), ('ishl', 'a', ('isub', 64, 'b'))) */ - /* search1029_0 -> 21 in the cache */ - /* search1029_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_uror, - -1, 0, - { 21, 36 }, - -1, - } }, - - /* replace1029_0_0 -> 21 in the cache */ - /* replace1029_0_1 -> 36 in the cache */ - /* replace1029_0 -> 2396 in the cache */ - /* replace1029_1_0 -> 21 in the cache */ - /* replace1029_1_1_0 -> 907 in the cache */ - /* replace1029_1_1_1 -> 36 in the cache */ - /* replace1029_1_1 -> 2970 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 2970 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2396, 2977 }, - -1, - } }, - - /* ('~fexp2', ('flog2', 'a')) => a */ - /* search1030_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fexp2, - -1, 0, - { 2979 }, - -1, - } }, - - /* replace1030 -> 32 in the cache */ - - /* ('~flog2', ('fexp2', 'a')) => a */ - /* search1031_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_flog2, - -1, 0, - { 2981 }, - -1, - } }, - - /* replace1031 -> 32 in the cache */ - - /* ('fpow', 'a', 'b') => ('fexp2', ('fmul', ('flog2', 'a'), 'b')) */ - /* search1032_0 -> 0 in the cache */ - /* search1032_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1032_0_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 0 }, - -1, - } }, - /* replace1032_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 2984, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fexp2, - -1, 1, - { 2985 }, - -1, - } }, - - /* ('~fexp2', ('fmul', ('flog2', 'a'), 'b')) => ('fpow', 'a', 'b') */ - /* search1033_0_0_0 -> 0 in the cache */ - /* search1033_0_0 -> 2984 in the cache */ - /* search1033_0_1 -> 3 in the cache */ - /* search1033_0 -> 2985 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fexp2, - -1, 1, - { 2985 }, - -1, - } }, - - /* replace1033_0 -> 0 in the cache */ - /* replace1033_1 -> 3 in the cache */ - /* replace1033 -> 2983 in the cache */ - - /* ('~fexp2', ('fadd', ('fmul', ('flog2', 'a'), 'b'), ('fmul', ('flog2', 'c'), 'd'))) => ('~fmul', ('fpow', 'a', 'b'), ('fpow', 'c', 'd')) */ - /* search1034_0_0_0_0 -> 155 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 155 }, - -1, - } }, - /* search1034_0_0_1 -> 156 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 2988, 156 }, - -1, - } }, - /* search1034_0_1_0_0 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 158 }, - -1, - } }, - /* search1034_0_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 2990, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 3, - { 2989, 2991 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_fexp2, - -1, 3, - { 2992 }, - -1, - } }, - - /* replace1034_0_0 -> 155 in the cache */ - /* replace1034_0_1 -> 156 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 155, 156 }, - -1, - } }, - /* replace1034_1_0 -> 158 in the cache */ - /* replace1034_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_fmul, - 0, 1, - { 2994, 2995 }, - -1, - } }, - - /* ('~fexp2', ('fmul', ('flog2', 'a'), 0.5)) => ('fsqrt', 'a') */ - /* search1035_0_0_0 -> 32 in the cache */ - /* search1035_0_0 -> 2979 in the cache */ - /* search1035_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 2979, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fexp2, - -1, 1, - { 2997 }, - -1, - } }, - - /* replace1035_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 32 }, - -1, - } }, - - /* ('~fexp2', ('fmul', ('flog2', 'a'), 2.0)) => ('fmul', 'a', 'a') */ - /* search1036_0_0_0 -> 32 in the cache */ - /* search1036_0_0 -> 2979 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x4000000000000000 /* 2.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 2979, 3000 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fexp2, - -1, 1, - { 3001 }, - -1, - } }, - - /* replace1036_0 -> 32 in the cache */ - /* replace1036_1 -> 32 in the cache */ - /* replace1036 -> 261 in the cache */ - - /* ('~fexp2', ('fmul', ('flog2', 'a'), 4.0)) => ('fmul', ('fmul', 'a', 'a'), ('fmul', 'a', 'a')) */ - /* search1037_0_0_0 -> 32 in the cache */ - /* search1037_0_0 -> 2979 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x4010000000000000 /* 4.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 2979, 3003 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fexp2, - -1, 1, - { 3004 }, - -1, - } }, - - /* replace1037_0_0 -> 32 in the cache */ - /* replace1037_0_1 -> 32 in the cache */ - /* replace1037_0 -> 261 in the cache */ - /* replace1037_1_0 -> 32 in the cache */ - /* replace1037_1_1 -> 32 in the cache */ - /* replace1037_1 -> 261 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - -1, 0, - { 261, 261 }, - -1, - } }, - - /* ('~fpow', 'a', 1.0) => a */ - /* search1038_0 -> 32 in the cache */ - /* search1038_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fpow, - -1, 0, - { 32, 252 }, - -1, - } }, - - /* replace1038 -> 32 in the cache */ - - /* ('~fpow', 'a', 2.0) => ('fmul', 'a', 'a') */ - /* search1039_0 -> 32 in the cache */ - /* search1039_1 -> 3000 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fpow, - -1, 0, - { 32, 3000 }, - -1, - } }, - - /* replace1039_0 -> 32 in the cache */ - /* replace1039_1 -> 32 in the cache */ - /* replace1039 -> 261 in the cache */ - - /* ('~fpow', 'a', 4.0) => ('fmul', ('fmul', 'a', 'a'), ('fmul', 'a', 'a')) */ - /* search1040_0 -> 32 in the cache */ - /* search1040_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fpow, - -1, 0, - { 32, 3003 }, - -1, - } }, - - /* replace1040_0_0 -> 32 in the cache */ - /* replace1040_0_1 -> 32 in the cache */ - /* replace1040_0 -> 261 in the cache */ - /* replace1040_1_0 -> 32 in the cache */ - /* replace1040_1_1 -> 32 in the cache */ - /* replace1040_1 -> 261 in the cache */ - /* replace1040 -> 3006 in the cache */ - - /* ('~fpow', 2.0, 'a') => ('fexp2', 'a') */ - /* search1041_0 -> 3000 in the cache */ - /* search1041_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fpow, - -1, 0, - { 3000, 32 }, - -1, - } }, - - /* replace1041_0 -> 32 in the cache */ - /* replace1041 -> 2981 in the cache */ - - /* ('~fpow', ('fpow', 'a', 2.2), 0.454545) => a */ - /* search1042_0_0 -> 32 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x400199999999999a /* 2.2 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 32, 3011 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3fdd1743e963dc48 /* 0.454545 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fpow, - -1, 0, - { 3012, 3013 }, - -1, - } }, - - /* replace1042 -> 32 in the cache */ - - /* ('~fpow', ('fabs', ('fpow', 'a', 2.2)), 0.454545) => ('fabs', 'a') */ - /* search1043_0_0_0 -> 32 in the cache */ - /* search1043_0_0_1 -> 3011 in the cache */ - /* search1043_0_0 -> 3012 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 3012 }, - -1, - } }, - /* search1043_1 -> 3013 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fpow, - -1, 0, - { 3015, 3013 }, - -1, - } }, - - /* replace1043_0 -> 32 in the cache */ - /* replace1043 -> 99 in the cache */ - - /* ('~fsqrt', ('fexp2', 'a')) => ('fexp2', ('fmul', 0.5, 'a')) */ - /* search1044_0_0 -> 32 in the cache */ - /* search1044_0 -> 2981 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fsqrt, - -1, 0, - { 2981 }, - -1, - } }, - - /* replace1044_0_0 -> 100 in the cache */ - /* replace1044_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 100, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fexp2, - -1, 1, - { 3018 }, - -1, - } }, - - /* ('~frcp', ('fexp2', 'a')) => ('fexp2', ('fneg', 'a')) */ - /* search1045_0_0 -> 32 in the cache */ - /* search1045_0 -> 2981 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_frcp, - -1, 0, - { 2981 }, - -1, - } }, - - /* replace1045_0_0 -> 32 in the cache */ - /* replace1045_0 -> 107 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 107 }, - -1, - } }, - - /* ('~frsq', ('fexp2', 'a')) => ('fexp2', ('fmul', -0.5, 'a')) */ - /* search1046_0_0 -> 32 in the cache */ - /* search1046_0 -> 2981 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_frsq, - -1, 0, - { 2981 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0xbfe0000000000000 /* -0.5 */ }, - } }, - /* replace1046_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 3023, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fexp2, - -1, 1, - { 3024 }, - -1, - } }, - - /* ('~flog2', ('fsqrt', 'a')) => ('fmul', 0.5, ('flog2', 'a')) */ - /* search1047_0_0 -> 32 in the cache */ - /* search1047_0 -> 2999 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_flog2, - -1, 0, - { 2999 }, - -1, - } }, - - /* replace1047_0 -> 100 in the cache */ - /* replace1047_1_0 -> 32 in the cache */ - /* replace1047_1 -> 2979 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 100, 2979 }, - -1, - } }, - - /* ('~flog2', ('frcp', 'a')) => ('fneg', ('flog2', 'a')) */ - /* search1048_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_flog2, - -1, 0, - { 3028 }, - -1, - } }, - - /* replace1048_0_0 -> 32 in the cache */ - /* replace1048_0 -> 2979 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 2979 }, - -1, - } }, - - /* ('~flog2', ('frsq', 'a')) => ('fmul', -0.5, ('flog2', 'a')) */ - /* search1049_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_frsq, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_flog2, - -1, 0, - { 3031 }, - -1, - } }, - - /* replace1049_0 -> 3023 in the cache */ - /* replace1049_1_0 -> 32 in the cache */ - /* replace1049_1 -> 2979 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 3023, 2979 }, - -1, - } }, - - /* ('~flog2', ('fpow', 'a', 'b')) => ('fmul', 'b', ('flog2', 'a')) */ - /* search1050_0_0 -> 0 in the cache */ - /* search1050_0_1 -> 3 in the cache */ - /* search1050_0 -> 2983 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flog2, - -1, 0, - { 2983 }, - -1, - } }, - - /* replace1050_0 -> 3 in the cache */ - /* replace1050_1_0 -> 0 in the cache */ - /* replace1050_1 -> 2984 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 3, 2984 }, - -1, - } }, - - /* ('~fmul', ('fexp2(is_used_once)', 'a'), ('fexp2(is_used_once)', 'b')) => ('fexp2', ('fadd', 'a', 'b')) */ - /* search1051_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 0 }, - 0, - } }, - /* search1051_1_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 3 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fmul, - 0, 1, - { 3036, 3037 }, - -1, - } }, - - /* replace1051_0_0 -> 0 in the cache */ - /* replace1051_0_1 -> 3 in the cache */ - /* replace1051_0 -> 282 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fexp2, - -1, 1, - { 282 }, - -1, - } }, - - /* ('bcsel', ('flt', 'a', 0.0), 0.0, ('fsqrt', 'a')) => ('fsqrt', ('fmax', 'a', 0.0)) */ - /* search1052_0_0 -> 32 in the cache */ - /* search1052_0_1 -> 117 in the cache */ - /* search1052_0 -> 1185 in the cache */ - /* search1052_1 -> 117 in the cache */ - /* search1052_2_0 -> 32 in the cache */ - /* search1052_2 -> 2999 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1185, 117, 2999 }, - -1, - } }, - - /* replace1052_0_0 -> 32 in the cache */ - /* replace1052_0_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 32, 117 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsqrt, - -1, 1, - { 3041 }, - -1, - } }, - - /* ('~fmul', ('fsqrt', 'a'), ('fsqrt', 'a')) => ('fabs', 'a') */ - /* search1053_0_0 -> 32 in the cache */ - /* search1053_0 -> 2999 in the cache */ - /* search1053_1_0 -> 32 in the cache */ - /* search1053_1 -> 2999 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmul, - -1, 0, - { 2999, 2999 }, - -1, - } }, - - /* replace1053_0 -> 32 in the cache */ - /* replace1053 -> 99 in the cache */ - - /* ('~fmulz', ('fsqrt', 'a'), ('fsqrt', 'a')) => ('fabs', 'a') */ - /* search1054_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 16 }, - -1, - } }, - /* search1054_1_0 -> 16 in the cache */ - /* search1054_1 -> 3044 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmulz, - -1, 0, - { 3044, 3044 }, - -1, - } }, - - /* replace1054_0 -> 16 in the cache */ - /* replace1054 -> 706 in the cache */ - - /* ('~fdiv', 1.0, 'a') => ('frcp', 'a') */ - /* search1055_0 -> 252 in the cache */ - /* search1055_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fdiv, - -1, 0, - { 252, 32 }, - -1, - } }, - - /* replace1055_0 -> 32 in the cache */ - /* replace1055 -> 3028 in the cache */ - - /* ('fdiv', 'a', 'b') => ('fmul', 'a', ('frcp', 'b')) */ - /* search1056_0 -> 0 in the cache */ - /* search1056_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdiv, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1056_0 -> 0 in the cache */ - /* replace1056_1_0 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 0, 3048 }, - -1, - } }, - - /* ('~frcp', ('frcp', 'a')) => a */ - /* search1057_0_0 -> 32 in the cache */ - /* search1057_0 -> 3028 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_frcp, - -1, 0, - { 3028 }, - -1, - } }, - - /* replace1057 -> 32 in the cache */ - - /* ('~frcp', ('fsqrt', 'a')) => ('frsq', 'a') */ - /* search1058_0_0 -> 32 in the cache */ - /* search1058_0 -> 2999 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_frcp, - -1, 0, - { 2999 }, - -1, - } }, - - /* replace1058_0 -> 32 in the cache */ - /* replace1058 -> 3031 in the cache */ - - /* ('fsqrt', 'a') => ('frcp', ('frsq', 'a')) */ - /* search1059_0 -> 32 in the cache */ - /* search1059 -> 2999 in the cache */ - - /* replace1059_0_0 -> 32 in the cache */ - /* replace1059_0 -> 3031 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 3031 }, - -1, - } }, - - /* ('~frcp', ('frsq', 'a')) => ('fsqrt', 'a') */ - /* search1060_0_0 -> 32 in the cache */ - /* search1060_0 -> 3031 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_frcp, - -1, 0, - { 3031 }, - -1, - } }, - - /* replace1060_0 -> 32 in the cache */ - /* replace1060 -> 2999 in the cache */ - - /* ('fsin', 'a') => ('ffma', ('ffma', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0), ('fabs', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0)), ('fneg', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0))), 0.225, ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.5))), 1.0)))), 4.0)) */ - /* search1061_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsin, - -1, 0, - { 32 }, - -1, - } }, - - /* replace1061_0_0_0_0_0_0 -> 3000 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3fc45f306dc9c883 /* 0.15915494309189535 */ }, - } }, - /* replace1061_0_0_0_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 5, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_0_0_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 4, 2, - { 3056, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3057 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 3, 3, - { 3000, 3058 }, - -1, - } }, - /* replace1061_0_0_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3059, 252 }, - -1, - } }, - /* replace1061_0_0_0_1_0_0_0 -> 3000 in the cache */ - /* replace1061_0_0_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_0_0_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 9, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_0_0_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 8, 2, - { 3061, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3062 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 7, 3, - { 3000, 3063 }, - -1, - } }, - /* replace1061_0_0_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3064, 252 }, - -1, - } }, - /* replace1061_0_0_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1061_0_0_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_0_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 12, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_0_0_1_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 11, 2, - { 3066, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3067 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 10, 3, - { 3000, 3068 }, - -1, - } }, - /* replace1061_0_0_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3069, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3070 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 6, 7, - { 3065, 3071 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3060, 3072 }, - -1, - } }, - /* replace1061_0_0_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 2, 11, - { 3073, 3003 }, - -1, - } }, - /* replace1061_0_1_0_0_0_0_0 -> 3000 in the cache */ - /* replace1061_0_1_0_0_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_1_0_0_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 16, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_1_0_0_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 15, 2, - { 3075, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3076 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 14, 3, - { 3000, 3077 }, - -1, - } }, - /* replace1061_0_1_0_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3078, 252 }, - -1, - } }, - /* replace1061_0_1_0_0_1_0_0_0 -> 3000 in the cache */ - /* replace1061_0_1_0_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_1_0_0_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 20, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_1_0_0_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 19, 2, - { 3080, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3081 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 18, 3, - { 3000, 3082 }, - -1, - } }, - /* replace1061_0_1_0_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3083, 252 }, - -1, - } }, - /* replace1061_0_1_0_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1061_0_1_0_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_1_0_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 23, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_1_0_0_1_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 22, 2, - { 3085, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3086 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 21, 3, - { 3000, 3087 }, - -1, - } }, - /* replace1061_0_1_0_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3088, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3089 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 17, 7, - { 3084, 3090 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3079, 3091 }, - -1, - } }, - /* replace1061_0_1_0_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 13, 11, - { 3092, 3003 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 11, - { 3093 }, - -1, - } }, - /* replace1061_0_2_0_0_0_0_0 -> 3000 in the cache */ - /* replace1061_0_2_0_0_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_2_0_0_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 27, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_2_0_0_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 26, 2, - { 3095, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3096 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 25, 3, - { 3000, 3097 }, - -1, - } }, - /* replace1061_0_2_0_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3098, 252 }, - -1, - } }, - /* replace1061_0_2_0_0_1_0_0_0 -> 3000 in the cache */ - /* replace1061_0_2_0_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_2_0_0_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 31, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_2_0_0_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 30, 2, - { 3100, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3101 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 29, 3, - { 3000, 3102 }, - -1, - } }, - /* replace1061_0_2_0_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3103, 252 }, - -1, - } }, - /* replace1061_0_2_0_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1061_0_2_0_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_0_2_0_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 34, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_0_2_0_0_1_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 33, 2, - { 3105, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3106 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 32, 3, - { 3000, 3107 }, - -1, - } }, - /* replace1061_0_2_0_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3108, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3109 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 28, 7, - { 3104, 3110 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3099, 3111 }, - -1, - } }, - /* replace1061_0_2_0_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 24, 11, - { 3112, 3003 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 11, - { 3113 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffma, - 1, 34, - { 3074, 3094, 3114 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3fcccccccccccccd /* 0.225 */ }, - } }, - /* replace1061_2_0_0_0_0 -> 3000 in the cache */ - /* replace1061_2_0_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_2_0_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 38, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_2_0_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 37, 2, - { 3117, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3118 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 36, 3, - { 3000, 3119 }, - -1, - } }, - /* replace1061_2_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3120, 252 }, - -1, - } }, - /* replace1061_2_0_1_0_0_0 -> 3000 in the cache */ - /* replace1061_2_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_2_0_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 42, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_2_0_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 41, 2, - { 3122, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3123 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 40, 3, - { 3000, 3124 }, - -1, - } }, - /* replace1061_2_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3125, 252 }, - -1, - } }, - /* replace1061_2_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1061_2_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1061_2_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 45, 1, - { 3055, 32 }, - -1, - } }, - /* replace1061_2_0_1_1_0_0_1_0_1 -> 100 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 44, 2, - { 3127, 100 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 43, 3, - { 3000, 3129 }, - -1, - } }, - /* replace1061_2_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3130, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3131 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 39, 7, - { 3126, 3132 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3121, 3133 }, - -1, - } }, - /* replace1061_2_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 35, 11, - { 3134, 3003 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffma, - 0, 46, - { 3115, 3116, 3135 }, - -1, - } }, - - /* ('fcos', 'a') => ('ffma', ('ffma', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0), ('fabs', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0)), ('fneg', ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0))), 0.225, ('fmul', ('fsub', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fmul', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0), ('fabs', ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.15915494309189535, 'a'), 0.75))), 1.0)))), 4.0)) */ - /* search1062_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fcos, - -1, 0, - { 32 }, - -1, - } }, - - /* replace1062_0_0_0_0_0_0 -> 3000 in the cache */ - /* replace1062_0_0_0_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_0_0_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_0_0_0_0_1_0_0 -> 3056 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3fe8000000000000 /* 0.75 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 4, 2, - { 3056, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3139 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 3, 3, - { 3000, 3140 }, - -1, - } }, - /* replace1062_0_0_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3141, 252 }, - -1, - } }, - /* replace1062_0_0_0_1_0_0_0 -> 3000 in the cache */ - /* replace1062_0_0_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_0_0_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_0_0_1_0_0_1_0_0 -> 3061 in the cache */ - /* replace1062_0_0_0_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 8, 2, - { 3061, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3143 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 7, 3, - { 3000, 3144 }, - -1, - } }, - /* replace1062_0_0_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3145, 252 }, - -1, - } }, - /* replace1062_0_0_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1062_0_0_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_0_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_0_0_1_1_0_0_1_0_0 -> 3066 in the cache */ - /* replace1062_0_0_0_1_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 11, 2, - { 3066, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 10, 3, - { 3000, 3148 }, - -1, - } }, - /* replace1062_0_0_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3149, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3150 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 6, 7, - { 3146, 3151 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3142, 3152 }, - -1, - } }, - /* replace1062_0_0_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 2, 11, - { 3153, 3003 }, - -1, - } }, - /* replace1062_0_1_0_0_0_0_0 -> 3000 in the cache */ - /* replace1062_0_1_0_0_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_1_0_0_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_1_0_0_0_0_1_0_0 -> 3075 in the cache */ - /* replace1062_0_1_0_0_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 15, 2, - { 3075, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3155 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 14, 3, - { 3000, 3156 }, - -1, - } }, - /* replace1062_0_1_0_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3157, 252 }, - -1, - } }, - /* replace1062_0_1_0_0_1_0_0_0 -> 3000 in the cache */ - /* replace1062_0_1_0_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_1_0_0_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_1_0_0_1_0_0_1_0_0 -> 3080 in the cache */ - /* replace1062_0_1_0_0_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 19, 2, - { 3080, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 18, 3, - { 3000, 3160 }, - -1, - } }, - /* replace1062_0_1_0_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3161, 252 }, - -1, - } }, - /* replace1062_0_1_0_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1062_0_1_0_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_1_0_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_1_0_0_1_1_0_0_1_0_0 -> 3085 in the cache */ - /* replace1062_0_1_0_0_1_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 22, 2, - { 3085, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3163 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 21, 3, - { 3000, 3164 }, - -1, - } }, - /* replace1062_0_1_0_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3165, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3166 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 17, 7, - { 3162, 3167 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3158, 3168 }, - -1, - } }, - /* replace1062_0_1_0_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 13, 11, - { 3169, 3003 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 11, - { 3170 }, - -1, - } }, - /* replace1062_0_2_0_0_0_0_0 -> 3000 in the cache */ - /* replace1062_0_2_0_0_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_2_0_0_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_2_0_0_0_0_1_0_0 -> 3095 in the cache */ - /* replace1062_0_2_0_0_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 26, 2, - { 3095, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3172 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 25, 3, - { 3000, 3173 }, - -1, - } }, - /* replace1062_0_2_0_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3174, 252 }, - -1, - } }, - /* replace1062_0_2_0_0_1_0_0_0 -> 3000 in the cache */ - /* replace1062_0_2_0_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_2_0_0_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_2_0_0_1_0_0_1_0_0 -> 3100 in the cache */ - /* replace1062_0_2_0_0_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 30, 2, - { 3100, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3176 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 29, 3, - { 3000, 3177 }, - -1, - } }, - /* replace1062_0_2_0_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3178, 252 }, - -1, - } }, - /* replace1062_0_2_0_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1062_0_2_0_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_0_2_0_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_0_2_0_0_1_1_0_0_1_0_0 -> 3105 in the cache */ - /* replace1062_0_2_0_0_1_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 33, 2, - { 3105, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3180 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 32, 3, - { 3000, 3181 }, - -1, - } }, - /* replace1062_0_2_0_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3182, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3183 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 28, 7, - { 3179, 3184 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3175, 3185 }, - -1, - } }, - /* replace1062_0_2_0_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 24, 11, - { 3186, 3003 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 11, - { 3187 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffma, - 1, 34, - { 3154, 3171, 3188 }, - -1, - } }, - /* replace1062_1 -> 3116 in the cache */ - /* replace1062_2_0_0_0_0 -> 3000 in the cache */ - /* replace1062_2_0_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_2_0_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_2_0_0_0_1_0_0 -> 3117 in the cache */ - /* replace1062_2_0_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 37, 2, - { 3117, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3190 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 36, 3, - { 3000, 3191 }, - -1, - } }, - /* replace1062_2_0_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3192, 252 }, - -1, - } }, - /* replace1062_2_0_1_0_0_0 -> 3000 in the cache */ - /* replace1062_2_0_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_2_0_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_2_0_1_0_0_1_0_0 -> 3122 in the cache */ - /* replace1062_2_0_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 41, 2, - { 3122, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3194 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 40, 3, - { 3000, 3195 }, - -1, - } }, - /* replace1062_2_0_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3196, 252 }, - -1, - } }, - /* replace1062_2_0_1_1_0_0_0 -> 3000 in the cache */ - /* replace1062_2_0_1_1_0_0_1_0_0_0 -> 3055 in the cache */ - /* replace1062_2_0_1_1_0_0_1_0_0_1 -> 32 in the cache */ - /* replace1062_2_0_1_1_0_0_1_0_0 -> 3127 in the cache */ - /* replace1062_2_0_1_1_0_0_1_0_1 -> 3138 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 44, 2, - { 3127, 3138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 2, - { 3198 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 43, 3, - { 3000, 3199 }, - -1, - } }, - /* replace1062_2_0_1_1_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 3, - { 3200, 252 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 3, - { 3201 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 39, 7, - { 3197, 3202 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 10, - { 3193, 3203 }, - -1, - } }, - /* replace1062_2_1 -> 3003 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 35, 11, - { 3204, 3003 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffma, - 0, 46, - { 3189, 3116, 3205 }, - -1, - } }, - - /* ('ieq', 'a', True) => a */ - /* search1063_0 -> 770 in the cache */ - /* search1063_1 -> 1248 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 770, 1248 }, - -1, - } }, - - /* replace1063 -> 770 in the cache */ - - /* ('ine(is_not_used_by_if)', 'a', True) => ('inot', 'a') */ - /* search1064_0 -> 770 in the cache */ - /* search1064_1 -> 1248 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 770, 1248 }, - 2, - } }, - - /* replace1064_0 -> 770 in the cache */ - /* replace1064 -> 1144 in the cache */ - - /* ('ine', 'a', False) => a */ - /* search1065_0 -> 770 in the cache */ - /* search1065_1 -> 1090 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 770, 1090 }, - -1, - } }, - - /* replace1065 -> 770 in the cache */ - - /* ('ieq(is_not_used_by_if)', 'a', False) => ('inot', 'a') */ - /* search1066_0 -> 770 in the cache */ - /* search1066_1 -> 1090 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 770, 1090 }, - 2, - } }, - - /* replace1066_0 -> 770 in the cache */ - /* replace1066 -> 1144 in the cache */ - - /* ('bcsel', 'a', True, False) => a */ - /* search1067_0 -> 770 in the cache */ - /* search1067_1 -> 1248 in the cache */ - /* search1067_2 -> 1090 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1248, 1090 }, - -1, - } }, - - /* replace1067 -> 770 in the cache */ - - /* ('bcsel', 'a', False, True) => ('inot', 'a') */ - /* search1068_0 -> 770 in the cache */ - /* search1068_1 -> 1090 in the cache */ - /* search1068_2 -> 1248 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1090, 1248 }, - -1, - } }, - - /* replace1068_0 -> 770 in the cache */ - /* replace1068 -> 1144 in the cache */ - - /* ('bcsel', True, 'b', 'c') => b */ - /* search1069_0 -> 1248 in the cache */ - /* search1069_1 -> 1130 in the cache */ - /* search1069_2 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1248, 1130, 694 }, - -1, - } }, - - /* replace1069 -> 1130 in the cache */ - - /* ('bcsel', False, 'b', 'c') => c */ - /* search1070_0 -> 1090 in the cache */ - /* search1070_1 -> 1130 in the cache */ - /* search1070_2 -> 694 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1090, 1130, 694 }, - -1, - } }, - - /* replace1070 -> 694 in the cache */ - - /* ('bcsel@16', 'a', 1.0, 0.0) => ('b2f', 'a') */ - /* search1071_0 -> 770 in the cache */ - /* search1071_1 -> 491 in the cache */ - /* search1071_2 -> 119 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 491, 119 }, - -1, - } }, - - /* replace1071_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 770 }, - -1, - } }, - - /* ('bcsel@16', 'a', 0.0, 1.0) => ('b2f', ('inot', 'a')) */ - /* search1072_0 -> 770 in the cache */ - /* search1072_1 -> 119 in the cache */ - /* search1072_2 -> 491 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 119, 491 }, - -1, - } }, - - /* replace1072_0_0 -> 770 in the cache */ - /* replace1072_0 -> 1144 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1144 }, - -1, - } }, - - /* ('bcsel@16', 'a', -1.0, -0.0) => ('fneg', ('b2f', 'a')) */ - /* search1073_0 -> 770 in the cache */ - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_float, { 0x8000000000000000 /* -0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 3219, 3220 }, - -1, - } }, - - /* replace1073_0_0 -> 770 in the cache */ - /* replace1073_0 -> 3216 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3216 }, - -1, - } }, - - /* ('bcsel@16', 'a', -0.0, -1.0) => ('fneg', ('b2f', ('inot', 'a'))) */ - /* search1074_0 -> 770 in the cache */ - /* search1074_1 -> 3220 in the cache */ - /* search1074_2 -> 3219 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 3220, 3219 }, - -1, - } }, - - /* replace1074_0_0_0 -> 770 in the cache */ - /* replace1074_0_0 -> 1144 in the cache */ - /* replace1074_0 -> 3218 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3218 }, - -1, - } }, - - /* ('bcsel@32', 'a', 1.0, 0.0) => ('b2f', 'a') */ - /* search1075_0 -> 770 in the cache */ - /* search1075_1 -> 254 in the cache */ - /* search1075_2 -> 121 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 254, 121 }, - -1, - } }, - - /* replace1075_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 770 }, - -1, - } }, - - /* ('bcsel@32', 'a', 0.0, 1.0) => ('b2f', ('inot', 'a')) */ - /* search1076_0 -> 770 in the cache */ - /* search1076_1 -> 121 in the cache */ - /* search1076_2 -> 254 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 121, 254 }, - -1, - } }, - - /* replace1076_0_0 -> 770 in the cache */ - /* replace1076_0 -> 1144 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1144 }, - -1, - } }, - - /* ('bcsel@32', 'a', -1.0, -0.0) => ('fneg', ('b2f', 'a')) */ - /* search1077_0 -> 770 in the cache */ - /* search1077_1 -> 288 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x8000000000000000 /* -0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 288, 3229 }, - -1, - } }, - - /* replace1077_0_0 -> 770 in the cache */ - /* replace1077_0 -> 3226 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3226 }, - -1, - } }, - - /* ('bcsel@32', 'a', -0.0, -1.0) => ('fneg', ('b2f', ('inot', 'a'))) */ - /* search1078_0 -> 770 in the cache */ - /* search1078_1 -> 3229 in the cache */ - /* search1078_2 -> 288 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 3229, 288 }, - -1, - } }, - - /* replace1078_0_0_0 -> 770 in the cache */ - /* replace1078_0_0 -> 1144 in the cache */ - /* replace1078_0 -> 3228 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3228 }, - -1, - } }, - - /* ('bcsel@64', 'a', 1.0, 0.0) => ('b2f', 'a') */ - /* search1079_0 -> 770 in the cache */ - /* search1079_1 -> 632 in the cache */ - /* search1079_2 -> 711 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 632, 711 }, - -1, - } }, - - /* replace1079_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 770 }, - -1, - } }, - - /* ('bcsel@64', 'a', 0.0, 1.0) => ('b2f', ('inot', 'a')) */ - /* search1080_0 -> 770 in the cache */ - /* search1080_1 -> 711 in the cache */ - /* search1080_2 -> 632 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 711, 632 }, - -1, - } }, - - /* replace1080_0_0 -> 770 in the cache */ - /* replace1080_0 -> 1144 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 1144 }, - -1, - } }, - - /* ('bcsel@64', 'a', -1.0, -0.0) => ('fneg', ('b2f', 'a')) */ - /* search1081_0 -> 770 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_float, { 0x8000000000000000 /* -0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 3238, 3239 }, - -1, - } }, - - /* replace1081_0_0 -> 770 in the cache */ - /* replace1081_0 -> 3235 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3235 }, - -1, - } }, - - /* ('bcsel@64', 'a', -0.0, -1.0) => ('fneg', ('b2f', ('inot', 'a'))) */ - /* search1082_0 -> 770 in the cache */ - /* search1082_1 -> 3239 in the cache */ - /* search1082_2 -> 3238 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 3239, 3238 }, - -1, - } }, - - /* replace1082_0_0_0 -> 770 in the cache */ - /* replace1082_0_0 -> 1144 in the cache */ - /* replace1082_0 -> 3237 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3237 }, - -1, - } }, - - /* ('bcsel', 'a', 'b', 'b') => b */ - /* search1083_0 -> 770 in the cache */ - /* search1083_1 -> 3 in the cache */ - /* search1083_2 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 3, 3 }, - -1, - } }, - - /* replace1083 -> 3 in the cache */ - - /* ('~fcsel', 'a', 'b', 'b') => b */ - /* search1084_0 -> 16 in the cache */ - /* search1084_1 -> 36 in the cache */ - /* search1084_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fcsel, - -1, 0, - { 16, 36, 36 }, - -1, - } }, - - /* replace1084 -> 36 in the cache */ - - /* ('bcsel', 'a', -1, 0) => ('ineg', ('b2i', 'a@1')) */ - /* search1085_0 -> 770 in the cache */ - /* search1085_1 -> 2935 in the cache */ - /* search1085_2 -> 1242 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 2935, 1242 }, - -1, - } }, - - /* replace1085_0_0 -> 770 in the cache */ - /* replace1085_0 -> 1241 in the cache */ - /* replace1085 -> 2416 in the cache */ - - /* ('bcsel', 'a', 0, -1) => ('ineg', ('b2i', ('inot', 'a'))) */ - /* search1086_0 -> 770 in the cache */ - /* search1086_1 -> 1242 in the cache */ - /* search1086_2 -> 2935 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1242, 2935 }, - -1, - } }, - - /* replace1086_0_0_0 -> 770 in the cache */ - /* replace1086_0_0 -> 1144 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 1144 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3248 }, - -1, - } }, - - /* ('bcsel', 'a', 1, 0) => ('b2i', 'a@1') */ - /* search1087_0 -> 770 in the cache */ - { .constant = { - { nir_search_value_constant, 0 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - /* search1087_2 -> 1242 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 3250, 1242 }, - -1, - } }, - - /* replace1087_0 -> 770 in the cache */ - /* replace1087 -> 1241 in the cache */ - - /* ('bcsel', 'a', 0, 1) => ('b2i', ('inot', 'a')) */ - /* search1088_0 -> 770 in the cache */ - /* search1088_1 -> 1242 in the cache */ - /* search1088_2 -> 3250 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1242, 3250 }, - -1, - } }, - - /* replace1088_0_0 -> 770 in the cache */ - /* replace1088_0 -> 1144 in the cache */ - /* replace1088 -> 3248 in the cache */ - - /* ('iand', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('iand', 'a', 'b'))) */ - /* search1089_0_0_0 -> 770 in the cache */ - /* search1089_0_0 -> 1241 in the cache */ - /* search1089_0 -> 2416 in the cache */ - /* search1089_1_0_0 -> 1147 in the cache */ - /* search1089_1_0 -> 2417 in the cache */ - /* search1089_1 -> 2418 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2416, 2418 }, - -1, - } }, - - /* replace1089_0_0_0 -> 770 in the cache */ - /* replace1089_0_0_1 -> 1147 in the cache */ - /* replace1089_0_0 -> 1159 in the cache */ - /* replace1089_0 -> 2844 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ineg, - -1, 1, - { 2844 }, - -1, - } }, - - /* ('ior', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('ior', 'a', 'b'))) */ - /* search1090_0_0_0 -> 770 in the cache */ - /* search1090_0_0 -> 1241 in the cache */ - /* search1090_0 -> 2416 in the cache */ - /* search1090_1_0_0 -> 1147 in the cache */ - /* search1090_1_0 -> 2417 in the cache */ - /* search1090_1 -> 2418 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2416, 2418 }, - -1, - } }, - - /* replace1090_0_0_0 -> 770 in the cache */ - /* replace1090_0_0_1 -> 1147 in the cache */ - /* replace1090_0_0 -> 1151 in the cache */ - /* replace1090_0 -> 2847 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ineg, - -1, 1, - { 2847 }, - -1, - } }, - - /* ('ieq', ('ineg', ('b2i', 'a@1')), -1) => a */ - /* search1091_0_0_0 -> 770 in the cache */ - /* search1091_0_0 -> 1241 in the cache */ - /* search1091_0 -> 2416 in the cache */ - /* search1091_1 -> 2935 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2416, 2935 }, - -1, - } }, - - /* replace1091 -> 770 in the cache */ - - /* ('ine', ('ineg', ('b2i', 'a@1')), -1) => ('inot', 'a') */ - /* search1092_0_0_0 -> 770 in the cache */ - /* search1092_0_0 -> 1241 in the cache */ - /* search1092_0 -> 2416 in the cache */ - /* search1092_1 -> 2935 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2416, 2935 }, - -1, - } }, - - /* replace1092_0 -> 770 in the cache */ - /* replace1092 -> 1144 in the cache */ - - /* ('ige', ('ineg', ('b2i', 'a@1')), 0) => ('inot', 'a') */ - /* search1093_0_0_0 -> 770 in the cache */ - /* search1093_0_0 -> 1241 in the cache */ - /* search1093_0 -> 2416 in the cache */ - /* search1093_1 -> 1242 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2416, 1242 }, - -1, - } }, - - /* replace1093_0 -> 770 in the cache */ - /* replace1093 -> 1144 in the cache */ - - /* ('ilt', ('ineg', ('b2i', 'a@1')), 0) => a */ - /* search1094_0_0_0 -> 770 in the cache */ - /* search1094_0_0 -> 1241 in the cache */ - /* search1094_0 -> 2416 in the cache */ - /* search1094_1 -> 1242 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2416, 1242 }, - -1, - } }, - - /* replace1094 -> 770 in the cache */ - - /* ('ult', 0, ('ineg', ('b2i', 'a@1'))) => a */ - /* search1095_0 -> 1242 in the cache */ - /* search1095_1_0_0 -> 770 in the cache */ - /* search1095_1_0 -> 1241 in the cache */ - /* search1095_1 -> 2416 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 1242, 2416 }, - -1, - } }, - - /* replace1095 -> 770 in the cache */ - - /* ('iand', ('ineg', ('b2i', 'a')), 1.0) => ('b2f', 'a') */ - /* search1096_0_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3262 }, - -1, - } }, - /* search1096_1 -> 1152 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 3263, 1152 }, - -1, - } }, - - /* replace1096_0 -> 32 in the cache */ - /* replace1096 -> 1541 in the cache */ - - /* ('iand', ('ineg', ('b2i', 'a')), 1) => ('b2i', 'a') */ - /* search1097_0_0_0 -> 32 in the cache */ - /* search1097_0_0 -> 3262 in the cache */ - /* search1097_0 -> 3263 in the cache */ - /* search1097_1 -> 3250 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 3263, 3250 }, - -1, - } }, - - /* replace1097_0 -> 32 in the cache */ - /* replace1097 -> 3262 in the cache */ - - /* ('imax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('iand', 'a', 'b'))) */ - /* search1098_0_0_0 -> 770 in the cache */ - /* search1098_0_0 -> 1241 in the cache */ - /* search1098_0 -> 2416 in the cache */ - /* search1098_1_0_0 -> 1147 in the cache */ - /* search1098_1_0 -> 2417 in the cache */ - /* search1098_1 -> 2418 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 2416, 2418 }, - -1, - } }, - - /* replace1098_0_0_0 -> 770 in the cache */ - /* replace1098_0_0_1 -> 1147 in the cache */ - /* replace1098_0_0 -> 1159 in the cache */ - /* replace1098_0 -> 2844 in the cache */ - /* replace1098 -> 3254 in the cache */ - - /* ('imin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('ior', 'a', 'b'))) */ - /* search1099_0_0_0 -> 770 in the cache */ - /* search1099_0_0 -> 1241 in the cache */ - /* search1099_0 -> 2416 in the cache */ - /* search1099_1_0_0 -> 1147 in the cache */ - /* search1099_1_0 -> 2417 in the cache */ - /* search1099_1 -> 2418 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 2416, 2418 }, - -1, - } }, - - /* replace1099_0_0_0 -> 770 in the cache */ - /* replace1099_0_0_1 -> 1147 in the cache */ - /* replace1099_0_0 -> 1151 in the cache */ - /* replace1099_0 -> 2847 in the cache */ - /* replace1099 -> 3256 in the cache */ - - /* ('umax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('ior', 'a', 'b'))) */ - /* search1100_0_0_0 -> 770 in the cache */ - /* search1100_0_0 -> 1241 in the cache */ - /* search1100_0 -> 2416 in the cache */ - /* search1100_1_0_0 -> 1147 in the cache */ - /* search1100_1_0 -> 2417 in the cache */ - /* search1100_1 -> 2418 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 2416, 2418 }, - -1, - } }, - - /* replace1100_0_0_0 -> 770 in the cache */ - /* replace1100_0_0_1 -> 1147 in the cache */ - /* replace1100_0_0 -> 1151 in the cache */ - /* replace1100_0 -> 2847 in the cache */ - /* replace1100 -> 3256 in the cache */ - - /* ('umin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))) => ('ineg', ('b2i', ('iand', 'a', 'b'))) */ - /* search1101_0_0_0 -> 770 in the cache */ - /* search1101_0_0 -> 1241 in the cache */ - /* search1101_0 -> 2416 in the cache */ - /* search1101_1_0_0 -> 1147 in the cache */ - /* search1101_1_0 -> 2417 in the cache */ - /* search1101_1 -> 2418 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 2416, 2418 }, - -1, - } }, - - /* replace1101_0_0_0 -> 770 in the cache */ - /* replace1101_0_0_1 -> 1147 in the cache */ - /* replace1101_0_0 -> 1159 in the cache */ - /* replace1101_0 -> 2844 in the cache */ - /* replace1101 -> 3254 in the cache */ - - /* ('umax', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('ior', 'a', 'b')) */ - /* search1102_0_0 -> 770 in the cache */ - /* search1102_0 -> 1241 in the cache */ - /* search1102_1_0 -> 1147 in the cache */ - /* search1102_1 -> 2417 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 1241, 2417 }, - -1, - } }, - - /* replace1102_0_0 -> 770 in the cache */ - /* replace1102_0_1 -> 1147 in the cache */ - /* replace1102_0 -> 1151 in the cache */ - /* replace1102 -> 2847 in the cache */ - - /* ('umin', ('b2i', 'a@1'), ('b2i', 'b@1')) => ('b2i', ('iand', 'a', 'b')) */ - /* search1103_0_0 -> 770 in the cache */ - /* search1103_0 -> 1241 in the cache */ - /* search1103_1_0 -> 1147 in the cache */ - /* search1103_1 -> 2417 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 1241, 2417 }, - -1, - } }, - - /* replace1103_0_0 -> 770 in the cache */ - /* replace1103_0_1 -> 1147 in the cache */ - /* replace1103_0 -> 1159 in the cache */ - /* replace1103 -> 2844 in the cache */ - - /* ('ine', ('umin', ('ineg', ('b2i', 'a@1')), 'b'), 0) => ('iand', 'a', ('ine', 'b', 0)) */ - /* search1104_0_0_0_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 770 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3272 }, - -1, - } }, - /* search1104_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 3273, 3 }, - -1, - } }, - /* search1104_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 3274, 86 }, - -1, - } }, - - /* replace1104_0 -> 770 in the cache */ - /* replace1104_1_0 -> 3 in the cache */ - /* replace1104_1_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 3, 86 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 770, 3276 }, - -1, - } }, - - /* ('ine', ('umax', ('ineg', ('b2i', 'a@1')), 'b'), 0) => ('ior', 'a', ('ine', 'b', 0)) */ - /* search1105_0_0_0_0 -> 770 in the cache */ - /* search1105_0_0_0 -> 3272 in the cache */ - /* search1105_0_0 -> 3273 in the cache */ - /* search1105_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 3273, 3 }, - -1, - } }, - /* search1105_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 3278, 86 }, - -1, - } }, - - /* replace1105_0 -> 770 in the cache */ - /* replace1105_1_0 -> 3 in the cache */ - /* replace1105_1_1 -> 86 in the cache */ - /* replace1105_1 -> 3276 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 770, 3276 }, - -1, - } }, - - /* ('f2i', ('ftrunc', 'a')) => ('f2i', 'a') */ - /* search1106_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ftrunc, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 3281 }, - -1, - } }, - - /* replace1106_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 32 }, - -1, - } }, - - /* ('f2u', ('ftrunc', 'a')) => ('f2u', 'a') */ - /* search1107_0_0 -> 32 in the cache */ - /* search1107_0 -> 3281 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2u, - -1, 0, - { 3281 }, - -1, - } }, - - /* replace1107_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2u, - -1, 0, - { 32 }, - -1, - } }, - - /* ('f2fmp', ('f2f32', 'a@16')) => a */ - /* search1108_0_0 -> 11 in the cache */ - /* search1108_0 -> 1845 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 1845 }, - -1, - } }, - - /* replace1108 -> 11 in the cache */ - - /* ('i2imp', ('i2i32', 'a@16')) => a */ - /* search1109_0_0 -> 11 in the cache */ - /* search1109_0 -> 2127 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 2127 }, - -1, - } }, - - /* replace1109 -> 11 in the cache */ - - /* ('i2imp', ('u2u32', 'a@16')) => a */ - /* search1110_0_0 -> 11 in the cache */ - /* search1110_0 -> 2129 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 2129 }, - -1, - } }, - - /* replace1110 -> 11 in the cache */ - - /* ('f2imp', ('f2f32', 'a@16')) => ('f2i16', 'a') */ - /* search1111_0_0 -> 11 in the cache */ - /* search1111_0 -> 1845 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2imp, - -1, 0, - { 1845 }, - -1, - } }, - - /* replace1111_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2i16, - -1, 0, - { 11 }, - -1, - } }, - - /* ('f2ump', ('f2f32', 'a@16')) => ('f2u16', 'a') */ - /* search1112_0_0 -> 11 in the cache */ - /* search1112_0 -> 1845 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2ump, - -1, 0, - { 1845 }, - -1, - } }, - - /* replace1112_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2u16, - -1, 0, - { 11 }, - -1, - } }, - - /* ('i2fmp', ('i2i32', 'a@16')) => ('i2f16', 'a') */ - /* search1113_0_0 -> 11 in the cache */ - /* search1113_0 -> 2127 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2fmp, - -1, 0, - { 2127 }, - -1, - } }, - - /* replace1113_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 11 }, - -1, - } }, - - /* ('u2fmp', ('u2u32', 'a@16')) => ('u2f16', 'a') */ - /* search1114_0_0 -> 11 in the cache */ - /* search1114_0 -> 2129 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2fmp, - -1, 0, - { 2129 }, - -1, - } }, - - /* replace1114_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 11 }, - -1, - } }, - - /* ('f2fmp', ('b2f32', 'a@1')) => ('b2f16', 'a') */ - /* search1115_0_0 -> 770 in the cache */ - /* search1115_0 -> 1421 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 1421 }, - -1, - } }, - - /* replace1115_0 -> 770 in the cache */ - /* replace1115 -> 1417 in the cache */ - - /* ('i2imp', ('b2i32', 'a@1')) => ('b2i16', 'a') */ - /* search1116_0_0 -> 770 in the cache */ - /* search1116_0 -> 1409 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 1409 }, - -1, - } }, - - /* replace1116_0 -> 770 in the cache */ - /* replace1116 -> 1405 in the cache */ - - /* ('i2imp', ('b2i32', 'a@1')) => ('b2i16', 'a') */ - /* search1117_0_0 -> 770 in the cache */ - /* search1117_0 -> 1409 in the cache */ - /* search1117 -> 3298 in the cache */ - - /* replace1117_0 -> 770 in the cache */ - /* replace1117 -> 1405 in the cache */ - - /* ('f2imp', ('b2f32', 'a@1')) => ('b2i16', 'a') */ - /* search1118_0_0 -> 770 in the cache */ - /* search1118_0 -> 1421 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2imp, - -1, 0, - { 1421 }, - -1, - } }, - - /* replace1118_0 -> 770 in the cache */ - /* replace1118 -> 1405 in the cache */ - - /* ('f2ump', ('b2f32', 'a@1')) => ('b2i16', 'a') */ - /* search1119_0_0 -> 770 in the cache */ - /* search1119_0 -> 1421 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2ump, - -1, 0, - { 1421 }, - -1, - } }, - - /* replace1119_0 -> 770 in the cache */ - /* replace1119 -> 1405 in the cache */ - - /* ('i2fmp', ('b2i32', 'a@1')) => ('b2f16', 'a') */ - /* search1120_0_0 -> 770 in the cache */ - /* search1120_0 -> 1409 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2fmp, - -1, 0, - { 1409 }, - -1, - } }, - - /* replace1120_0 -> 770 in the cache */ - /* replace1120 -> 1417 in the cache */ - - /* ('u2fmp', ('b2i32', 'a@1')) => ('b2f16', 'a') */ - /* search1121_0_0 -> 770 in the cache */ - /* search1121_0 -> 1409 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2fmp, - -1, 0, - { 1409 }, - -1, - } }, - - /* replace1121_0 -> 770 in the cache */ - /* replace1121 -> 1417 in the cache */ - - /* ('f2f32', ('f2fmp', 'a@32')) => a */ - /* search1122_0_0 -> 16 in the cache */ - /* search1122_0 -> 2161 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 2161 }, - -1, - } }, - - /* replace1122 -> 16 in the cache */ - - /* ('i2i32', ('i2imp', 'a@32')) => a */ - /* search1123_0_0 -> 16 in the cache */ - /* search1123_0 -> 2172 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2172 }, - -1, - } }, - - /* replace1123 -> 16 in the cache */ - - /* ('u2u32', ('i2imp', 'a@32')) => a */ - /* search1124_0_0 -> 16 in the cache */ - /* search1124_0 -> 2172 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2172 }, - -1, - } }, - - /* replace1124 -> 16 in the cache */ - - /* ('i2i32', ('f2imp', 'a@32')) => ('f2i32', 'a') */ - /* search1125_0_0 -> 16 in the cache */ - /* search1125_0 -> 2171 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2171 }, - -1, - } }, - - /* replace1125_0 -> 16 in the cache */ - /* replace1125 -> 2169 in the cache */ - - /* ('u2u32', ('f2ump', 'a@32')) => ('f2u32', 'a') */ - /* search1126_0_0 -> 16 in the cache */ - /* search1126_0 -> 2168 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2168 }, - -1, - } }, - - /* replace1126_0 -> 16 in the cache */ - /* replace1126 -> 2166 in the cache */ - - /* ('f2f32', ('i2fmp', 'a@32')) => ('i2f32', 'a') */ - /* search1127_0_0 -> 16 in the cache */ - /* search1127_0 -> 2160 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 2160 }, - -1, - } }, - - /* replace1127_0 -> 16 in the cache */ - /* replace1127 -> 2158 in the cache */ - - /* ('f2f32', ('u2fmp', 'a@32')) => ('u2f32', 'a') */ - /* search1128_0_0 -> 16 in the cache */ - /* search1128_0 -> 2157 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 2157 }, - -1, - } }, - - /* replace1128_0 -> 16 in the cache */ - /* replace1128 -> 2155 in the cache */ - - /* ('f2i32', ('f2fmp', 'a@32')) => ('f2i32', 'a') */ - /* search1129_0_0 -> 16 in the cache */ - /* search1129_0 -> 2161 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 2161 }, - -1, - } }, - - /* replace1129_0 -> 16 in the cache */ - /* replace1129 -> 2169 in the cache */ - - /* ('f2u32', ('f2fmp', 'a@32')) => ('f2u32', 'a') */ - /* search1130_0_0 -> 16 in the cache */ - /* search1130_0 -> 2161 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2u32, - -1, 0, - { 2161 }, - -1, - } }, - - /* replace1130_0 -> 16 in the cache */ - /* replace1130 -> 2166 in the cache */ - - /* ('i2f32', ('i2imp', 'a@32')) => ('i2f32', 'a') */ - /* search1131_0_0 -> 16 in the cache */ - /* search1131_0 -> 2172 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2f32, - -1, 0, - { 2172 }, - -1, - } }, - - /* replace1131_0 -> 16 in the cache */ - /* replace1131 -> 2158 in the cache */ - - /* ('ffloor', 'a(is_integral)') => a */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 24, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 3313 }, - -1, - } }, - - /* replace1132 -> 32 in the cache */ - - /* ('fceil', 'a(is_integral)') => a */ - /* search1133_0 -> 3313 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fceil, - -1, 0, - { 3313 }, - -1, - } }, - - /* replace1133 -> 32 in the cache */ - - /* ('ftrunc', 'a(is_integral)') => a */ - /* search1134_0 -> 3313 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ftrunc, - -1, 0, - { 3313 }, - -1, - } }, - - /* replace1134 -> 32 in the cache */ - - /* ('fround_even', 'a(is_integral)') => a */ - /* search1135_0 -> 3313 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fround_even, - -1, 0, - { 3313 }, - -1, - } }, - - /* replace1135 -> 32 in the cache */ - - /* ('~ffract', 'a(is_integral)') => 0.0 */ - /* search1136_0 -> 3313 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_ffract, - -1, 0, - { 3313 }, - -1, - } }, - - /* replace1136 -> 117 in the cache */ - - /* ('fabs', 'a(is_not_negative)') => a */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 19, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 3319 }, - -1, - } }, - - /* replace1137 -> 32 in the cache */ - - /* ('iabs', 'a(is_not_negative)') => a */ - /* search1138_0 -> 3319 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 3319 }, - -1, - } }, - - /* replace1138 -> 32 in the cache */ - - /* ('fsat', 'a(is_not_positive)') => 0.0 */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 25, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 3322 }, - -1, - } }, - - /* replace1139 -> 117 in the cache */ - - /* ('~fmin', 'a(is_not_negative)', 1.0) => ('fsat', 'a') */ - /* search1140_0 -> 3319 in the cache */ - /* search1140_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fmin, - 0, 1, - { 3319, 252 }, - -1, - } }, - - /* replace1140_0 -> 32 in the cache */ - /* replace1140 -> 228 in the cache */ - - /* ('flt', ('fadd', ('fmul', ('fsat', 'a'), ('fneg', ('fsat', 'a'))), 1.0), 0.0) => False */ - /* search1141_0_0_0_0 -> 32 in the cache */ - /* search1141_0_0_0 -> 228 in the cache */ - /* search1141_0_0_1_0_0 -> 32 in the cache */ - /* search1141_0_0_1_0 -> 228 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 228 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 228, 3325 }, - -1, - } }, - /* search1141_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 3326, 252 }, - -1, - } }, - /* search1141_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 2, - { 3327, 117 }, - -1, - } }, - - /* replace1141 -> 1090 in the cache */ - - /* ('flt', ('fadd', ('fneg', ('fmul', ('fsat', 'a'), ('fsat', 'a'))), 1.0), 0.0) => False */ - /* search1142_0_0_0_0_0 -> 32 in the cache */ - /* search1142_0_0_0_0 -> 228 in the cache */ - /* search1142_0_0_0_1_0 -> 32 in the cache */ - /* search1142_0_0_0_1 -> 228 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - -1, 0, - { 228, 228 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 3329 }, - -1, - } }, - /* search1142_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 3330, 252 }, - -1, - } }, - /* search1142_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 3331, 117 }, - -1, - } }, - - /* replace1142 -> 1090 in the cache */ - - /* ('fmax', ('fadd', ('fmul', ('fsat', 'a'), ('fneg', ('fsat', 'a'))), 1.0), 0.0) => ('fadd', ('fmul', ('fsat', 'a'), ('fneg', ('fsat', 'a'))), 1.0) */ - /* search1143_0_0_0_0 -> 32 in the cache */ - /* search1143_0_0_0 -> 228 in the cache */ - /* search1143_0_0_1_0_0 -> 32 in the cache */ - /* search1143_0_0_1_0 -> 228 in the cache */ - /* search1143_0_0_1 -> 3325 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 228, 3325 }, - -1, - } }, - /* search1143_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 1, 2, - { 3333, 252 }, - -1, - } }, - /* search1143_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 0, 3, - { 3334, 117 }, - -1, - } }, - - /* replace1143_0_0_0 -> 32 in the cache */ - /* replace1143_0_0 -> 228 in the cache */ - /* replace1143_0_1_0_0 -> 32 in the cache */ - /* replace1143_0_1_0 -> 228 in the cache */ - /* replace1143_0_1 -> 3325 in the cache */ - /* replace1143_0 -> 3326 in the cache */ - /* replace1143_1 -> 252 in the cache */ - /* replace1143 -> 3327 in the cache */ - - /* ('fmax', ('fadd', ('fneg', ('fmul', ('fsat', 'a'), ('fsat', 'a'))), 1.0), 0.0) => ('fadd', ('fneg', ('fmul', ('fsat', 'a'), ('fsat', 'a'))), 1.0) */ - /* search1144_0_0_0_0_0 -> 32 in the cache */ - /* search1144_0_0_0_0 -> 228 in the cache */ - /* search1144_0_0_0_1_0 -> 32 in the cache */ - /* search1144_0_0_0_1 -> 228 in the cache */ - /* search1144_0_0_0 -> 3329 in the cache */ - /* search1144_0_0 -> 3330 in the cache */ - /* search1144_0_1 -> 252 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 3330, 252 }, - -1, - } }, - /* search1144_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 0, 2, - { 3336, 117 }, - -1, - } }, - - /* replace1144_0_0_0_0 -> 32 in the cache */ - /* replace1144_0_0_0 -> 228 in the cache */ - /* replace1144_0_0_1_0 -> 32 in the cache */ - /* replace1144_0_0_1 -> 228 in the cache */ - /* replace1144_0_0 -> 3329 in the cache */ - /* replace1144_0 -> 3330 in the cache */ - /* replace1144_1 -> 252 in the cache */ - /* replace1144 -> 3331 in the cache */ - - /* ('fneu', 'a(is_not_zero)', 0.0) => True */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 26, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1145_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 3338, 117 }, - -1, - } }, - - /* replace1145 -> 1248 in the cache */ - - /* ('feq', 'a(is_not_zero)', 0.0) => False */ - /* search1146_0 -> 3338 in the cache */ - /* search1146_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 3338, 117 }, - -1, - } }, - - /* replace1146 -> 1090 in the cache */ - - /* ('fge', 'a(is_a_number_not_negative)', 'b(is_a_number_not_positive)') => True */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 27, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - 28, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 3341, 3342 }, - -1, - } }, - - /* replace1147 -> 1248 in the cache */ - - /* ('fge', 'a(is_not_positive)', 'b(is_gt_zero)') => False */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 25, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - 29, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 3344, 3345 }, - -1, - } }, - - /* replace1148 -> 1090 in the cache */ - - /* ('fge', 'a(is_lt_zero)', 'b(is_not_negative)') => False */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 30, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - 19, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 3347, 3348 }, - -1, - } }, - - /* replace1149 -> 1090 in the cache */ - - /* ('flt', 'a(is_not_negative)', 'b(is_not_positive)') => False */ - /* search1150_0 -> 1599 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - 25, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1599, 3350 }, - -1, - } }, - - /* replace1150 -> 1090 in the cache */ - - /* ('flt', 'a(is_a_number_not_positive)', 'b(is_a_number_gt_zero)') => True */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 28, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - 31, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 3352, 3353 }, - -1, - } }, - - /* replace1151 -> 1248 in the cache */ - - /* ('flt', 'a(is_a_number_lt_zero)', 'b(is_a_number_not_negative)') => True */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 32, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - 27, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 3355, 3356 }, - -1, - } }, - - /* replace1152 -> 1248 in the cache */ - - /* ('ine', 'a(is_not_zero)', 0) => True */ - /* search1153_0 -> 3338 in the cache */ - /* search1153_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 3338, 61 }, - -1, - } }, - - /* replace1153 -> 1248 in the cache */ - - /* ('ieq', 'a(is_not_zero)', 0) => False */ - /* search1154_0 -> 3338 in the cache */ - /* search1154_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 3338, 61 }, - -1, - } }, - - /* replace1154 -> 1090 in the cache */ - - /* ('ige', 'a(is_not_negative)', 'b(is_not_positive)') => True */ - /* search1155_0 -> 1599 in the cache */ - /* search1155_1 -> 3350 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 1599, 3350 }, - -1, - } }, - - /* replace1155 -> 1248 in the cache */ - - /* ('ige', 'a(is_not_positive)', 'b(is_gt_zero)') => False */ - /* search1156_0 -> 3344 in the cache */ - /* search1156_1 -> 3345 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3344, 3345 }, - -1, - } }, - - /* replace1156 -> 1090 in the cache */ - - /* ('ige', 'a(is_lt_zero)', 'b(is_not_negative)') => False */ - /* search1157_0 -> 3347 in the cache */ - /* search1157_1 -> 3348 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3347, 3348 }, - -1, - } }, - - /* replace1157 -> 1090 in the cache */ - - /* ('ilt', 'a(is_not_negative)', 'b(is_not_positive)') => False */ - /* search1158_0 -> 1599 in the cache */ - /* search1158_1 -> 3350 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 1599, 3350 }, - -1, - } }, - - /* replace1158 -> 1090 in the cache */ - - /* ('ilt', 'a(is_not_positive)', 'b(is_gt_zero)') => True */ - /* search1159_0 -> 3344 in the cache */ - /* search1159_1 -> 3345 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 3344, 3345 }, - -1, - } }, - - /* replace1159 -> 1248 in the cache */ - - /* ('ilt', 'a(is_lt_zero)', 'b(is_not_negative)') => True */ - /* search1160_0 -> 3347 in the cache */ - /* search1160_1 -> 3348 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 3347, 3348 }, - -1, - } }, - - /* replace1160 -> 1248 in the cache */ - - /* ('ult', 0, 'a(is_gt_zero)') => True */ - /* search1161_0 -> 61 in the cache */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 29, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 61, 3366 }, - -1, - } }, - - /* replace1161 -> 1248 in the cache */ - - /* ('ult', 'a', 0) => False */ - /* search1162_0 -> 32 in the cache */ - /* search1162_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 32, 61 }, - -1, - } }, - - /* replace1162 -> 1090 in the cache */ - - /* ('unpack_64_2x32_split_x', ('pack_64_2x32_split', 'a', 'b')) => a */ - /* search1163_0_0 -> 16 in the cache */ - /* search1163_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 0, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1163 -> 16 in the cache */ - - /* ('unpack_64_2x32_split_y', ('pack_64_2x32_split', 'a', 'b')) => b */ - /* search1164_0_0 -> 16 in the cache */ - /* search1164_0_1 -> 36 in the cache */ - /* search1164_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_y, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1164 -> 36 in the cache */ - - /* ('unpack_64_2x32_split_x', ('pack_64_2x32', 'a')) => a.x */ - /* search1165_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 0, - { 3372 }, - -1, - } }, - - /* replace1165 -> 2595 in the cache */ - - /* ('unpack_64_2x32_split_y', ('pack_64_2x32', 'a')) => a.y */ - /* search1166_0_0 -> 16 in the cache */ - /* search1166_0 -> 3372 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_y, - -1, 0, - { 3372 }, - -1, - } }, - - /* replace1166 -> 2598 in the cache */ - - /* ('unpack_64_2x32_split_x', ('u2u64', 'a@32')) => a */ - /* search1167_0_0 -> 16 in the cache */ - /* search1167_0 -> 2149 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 0, - { 2149 }, - -1, - } }, - - /* replace1167 -> 16 in the cache */ - - /* ('unpack_64_2x32_split_y', ('u2u64', 'a')) => 0 */ - /* search1168_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_y, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1168 -> 128 in the cache */ - - /* ('unpack_64_2x32_split_x', ('i2i64', 'a@32')) => a */ - /* search1169_0_0 -> 16 in the cache */ - /* search1169_0 -> 2147 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 0, - { 2147 }, - -1, - } }, - - /* replace1169 -> 16 in the cache */ - - /* ('unpack_64_2x32_split_y', ('i2i64(is_used_once)', 'a@32')) => ('ishr', 'a', 31) */ - /* search1170_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 16 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_y, - -1, 0, - { 3379 }, - -1, - } }, - - /* replace1170_0 -> 16 in the cache */ - /* replace1170_1 -> 19 in the cache */ - /* replace1170 -> 1473 in the cache */ - - /* ('unpack_64_2x32', ('pack_64_2x32_split', 'a', 'b')) => ('vec2', 'a', 'b') */ - /* search1171_0_0 -> 16 in the cache */ - /* search1171_0_1 -> 36 in the cache */ - /* search1171_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1171_0 -> 16 in the cache */ - /* replace1171_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('unpack_64_2x32', ('pack_64_2x32', 'a')) => a */ - /* search1172_0_0 -> 16 in the cache */ - /* search1172_0 -> 3372 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32, - -1, 0, - { 3372 }, - -1, - } }, - - /* replace1172 -> 16 in the cache */ - - /* ('unpack_double_2x32_dxil', ('pack_double_2x32_dxil', 'a')) => a */ - /* search1173_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_double_2x32_dxil, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_double_2x32_dxil, - -1, 0, - { 3384 }, - -1, - } }, - - /* replace1173 -> 16 in the cache */ - - /* ('pack_64_2x32_split', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')) => a */ - /* search1174_0_0 -> 21 in the cache */ - /* search1174_0 -> 2900 in the cache */ - /* search1174_1_0 -> 21 in the cache */ - /* search1174_1 -> 2894 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 0, - { 2900, 2894 }, - -1, - } }, - - /* replace1174 -> 21 in the cache */ - - /* ('pack_64_2x32', ('vec2', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a'))) => a */ - /* search1175_0_0_0 -> 21 in the cache */ - /* search1175_0_0 -> 2900 in the cache */ - /* search1175_0_1_0 -> 21 in the cache */ - /* search1175_0_1 -> 2894 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 2900, 2894 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32, - -1, 0, - { 3387 }, - -1, - } }, - - /* replace1175 -> 21 in the cache */ - - /* ('pack_64_2x32', ('unpack_64_2x32', 'a')) => a */ - /* search1176_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32, - -1, 0, - { 3389 }, - -1, - } }, - - /* replace1176 -> 21 in the cache */ - - /* ('pack_double_2x32_dxil', ('unpack_double_2x32_dxil', 'a')) => a */ - /* search1177_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_double_2x32_dxil, - -1, 0, - { 21 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_double_2x32_dxil, - -1, 0, - { 3391 }, - -1, - } }, - - /* replace1177 -> 21 in the cache */ - - /* ('iand', ('ieq', ('unpack_32_2x16_split_x', 'a'), '#b'), ('ieq', ('unpack_32_2x16_split_y', 'a'), '#c')) => ('ieq', 'a', ('pack_32_2x16_split', 'b', 'c')) */ - /* search1178_0_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_unpack_32_2x16_split_x, - -1, 0, - { 16 }, - -1, - } }, - /* search1178_0_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 3393, 2179 }, - -1, - } }, - /* search1178_1_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_unpack_32_2x16_split_y, - -1, 0, - { 16 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 16 }, - 2, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 3395, 3396 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 3394, 3397 }, - -1, - } }, - - /* replace1178_0 -> 16 in the cache */ - /* replace1178_1_0 -> 268 in the cache */ - /* replace1178_1_1 -> 479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_32_2x16_split, - -1, 0, - { 268, 479 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 3399 }, - -1, - } }, - - /* ('ushr', 'a@16', 8) => ('extract_u8', 'a', 1) */ - /* search1179_0 -> 11 in the cache */ - /* search1179_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 11, 844 }, - -1, - } }, - - /* replace1179_0 -> 11 in the cache */ - /* replace1179_1 -> 1465 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 11, 1465 }, - -1, - } }, - - /* ('ushr', 'a@32', 24) => ('extract_u8', 'a', 3) */ - /* search1180_0 -> 16 in the cache */ - /* search1180_1 -> 1025 in the cache */ - /* search1180 -> 1030 in the cache */ - - /* replace1180_0 -> 16 in the cache */ - /* replace1180_1 -> 415 in the cache */ - /* replace1180 -> 432 in the cache */ - - /* ('ushr', 'a@64', 56) => ('extract_u8', 'a', 7) */ - /* search1181_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x38 /* 56 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 3403 }, - -1, - } }, - - /* replace1181_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x7 /* 7 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 3405 }, - -1, - } }, - - /* ('ishr', 'a@16', 8) => ('extract_i8', 'a', 1) */ - /* search1182_0 -> 11 in the cache */ - /* search1182_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 11, 844 }, - -1, - } }, - - /* replace1182_0 -> 11 in the cache */ - /* replace1182_1 -> 1465 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 11, 1465 }, - -1, - } }, - - /* ('ishr', 'a@32', 24) => ('extract_i8', 'a', 3) */ - /* search1183_0 -> 16 in the cache */ - /* search1183_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 16, 1025 }, - -1, - } }, - - /* replace1183_0 -> 16 in the cache */ - /* replace1183_1 -> 415 in the cache */ - /* replace1183 -> 416 in the cache */ - - /* ('ishr', 'a@64', 56) => ('extract_i8', 'a', 7) */ - /* search1184_0 -> 21 in the cache */ - /* search1184_1 -> 3403 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 3403 }, - -1, - } }, - - /* replace1184_0 -> 21 in the cache */ - /* replace1184_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 3405 }, - -1, - } }, - - /* ('iand', 255, 'a') => ('extract_u8', 'a', 0) */ - /* search1185_0 -> 1605 in the cache */ - /* search1185_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 1605, 32 }, - -1, - } }, - - /* replace1185_0 -> 32 in the cache */ - /* replace1185_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 32, 61 }, - -1, - } }, - - /* ('u2u8', ('extract_u16', 'a', 1)) => ('u2u8', ('extract_u8', 'a', 2)) */ - /* search1186_0_0 -> 32 in the cache */ - /* search1186_0_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 32, 35 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 3414 }, - -1, - } }, - - /* replace1186_0_0 -> 32 in the cache */ - /* replace1186_0_1 -> 2406 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 32, 2406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 3416 }, - -1, - } }, - - /* ('u2u8', ('ushr', 'a', 8)) => ('u2u8', ('extract_u8', 'a', 1)) */ - /* search1187_0_0 -> 32 in the cache */ - /* search1187_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 32, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 3418 }, - -1, - } }, - - /* replace1187_0_0 -> 32 in the cache */ - /* replace1187_0_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 32, 35 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 3420 }, - -1, - } }, - - /* ('i2i16', ('u2u8', ('extract_u8', 'a', 'b'))) => ('i2i16', ('extract_i8', 'a', 'b')) */ - /* search1188_0_0_0 -> 0 in the cache */ - /* search1188_0_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 3422 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 3423 }, - -1, - } }, - - /* replace1188_0_0 -> 0 in the cache */ - /* replace1188_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 0, 3 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 3425 }, - -1, - } }, - - /* ('u2u16', ('u2u8', ('extract_u8', 'a', 'b'))) => ('u2u16', ('extract_u8', 'a', 'b')) */ - /* search1189_0_0_0 -> 0 in the cache */ - /* search1189_0_0_1 -> 3 in the cache */ - /* search1189_0_0 -> 3422 in the cache */ - /* search1189_0 -> 3423 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 3423 }, - -1, - } }, - - /* replace1189_0_0 -> 0 in the cache */ - /* replace1189_0_1 -> 3 in the cache */ - /* replace1189_0 -> 3422 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 3422 }, - -1, - } }, - - /* ('ubfe', 'a', 0, 8) => ('extract_u8', 'a', 0) */ - /* search1190_0 -> 16 in the cache */ - /* search1190_1 -> 128 in the cache */ - /* search1190_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 128, 844 }, - -1, - } }, - - /* replace1190_0 -> 16 in the cache */ - /* replace1190_1 -> 128 in the cache */ - /* replace1190 -> 422 in the cache */ - - /* ('ubfe', 'a', 8, 8) => ('extract_u8', 'a', 1) */ - /* search1191_0 -> 16 in the cache */ - /* search1191_1 -> 844 in the cache */ - /* search1191_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 844, 844 }, - -1, - } }, - - /* replace1191_0 -> 16 in the cache */ - /* replace1191_1 -> 406 in the cache */ - /* replace1191 -> 425 in the cache */ - - /* ('ubfe', 'a', 16, 8) => ('extract_u8', 'a', 2) */ - /* search1192_0 -> 16 in the cache */ - /* search1192_1 -> 866 in the cache */ - /* search1192_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 866, 844 }, - -1, - } }, - - /* replace1192_0 -> 16 in the cache */ - /* replace1192_1 -> 411 in the cache */ - /* replace1192 -> 429 in the cache */ - - /* ('ubfe', 'a', 24, 8) => ('extract_u8', 'a', 3) */ - /* search1193_0 -> 16 in the cache */ - /* search1193_1 -> 1025 in the cache */ - /* search1193_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 1025, 844 }, - -1, - } }, - - /* replace1193_0 -> 16 in the cache */ - /* replace1193_1 -> 415 in the cache */ - /* replace1193 -> 432 in the cache */ - - /* ('ibfe', 'a', 0, 8) => ('extract_i8', 'a', 0) */ - /* search1194_0 -> 16 in the cache */ - /* search1194_1 -> 128 in the cache */ - /* search1194_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 128, 844 }, - -1, - } }, - - /* replace1194_0 -> 16 in the cache */ - /* replace1194_1 -> 128 in the cache */ - /* replace1194 -> 403 in the cache */ - - /* ('ibfe', 'a', 8, 8) => ('extract_i8', 'a', 1) */ - /* search1195_0 -> 16 in the cache */ - /* search1195_1 -> 844 in the cache */ - /* search1195_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 844, 844 }, - -1, - } }, - - /* replace1195_0 -> 16 in the cache */ - /* replace1195_1 -> 406 in the cache */ - /* replace1195 -> 407 in the cache */ - - /* ('ibfe', 'a', 16, 8) => ('extract_i8', 'a', 2) */ - /* search1196_0 -> 16 in the cache */ - /* search1196_1 -> 866 in the cache */ - /* search1196_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 866, 844 }, - -1, - } }, - - /* replace1196_0 -> 16 in the cache */ - /* replace1196_1 -> 411 in the cache */ - /* replace1196 -> 412 in the cache */ - - /* ('ibfe', 'a', 24, 8) => ('extract_i8', 'a', 3) */ - /* search1197_0 -> 16 in the cache */ - /* search1197_1 -> 1025 in the cache */ - /* search1197_2 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 1025, 844 }, - -1, - } }, - - /* replace1197_0 -> 16 in the cache */ - /* replace1197_1 -> 415 in the cache */ - /* replace1197 -> 416 in the cache */ - - /* ('extract_u8', ('extract_i8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') */ - /* search1198_0_0 -> 0 in the cache */ - /* search1198_0_1 -> 3 in the cache */ - /* search1198_0 -> 3425 in the cache */ - /* search1198_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3425, 86 }, - -1, - } }, - - /* replace1198_0 -> 0 in the cache */ - /* replace1198_1 -> 3 in the cache */ - /* replace1198 -> 3422 in the cache */ - - /* ('extract_u8', ('extract_u8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') */ - /* search1199_0_0 -> 0 in the cache */ - /* search1199_0_1 -> 3 in the cache */ - /* search1199_0 -> 3422 in the cache */ - /* search1199_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3422, 86 }, - -1, - } }, - - /* replace1199_0 -> 0 in the cache */ - /* replace1199_1 -> 3 in the cache */ - /* replace1199 -> 3422 in the cache */ - - /* ('ushr', ('ishl', 'a@32', 16), 16) => ('extract_u16', 'a', 0) */ - /* search1200_0_0 -> 16 in the cache */ - /* search1200_0_1 -> 866 in the cache */ - /* search1200_0 -> 1018 in the cache */ - /* search1200_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 1018, 866 }, - -1, - } }, - - /* replace1200_0 -> 16 in the cache */ - /* replace1200_1 -> 128 in the cache */ - /* replace1200 -> 454 in the cache */ - - /* ('ushr', 'a@32', 16) => ('extract_u16', 'a', 1) */ - /* search1201_0 -> 16 in the cache */ - /* search1201_1 -> 866 in the cache */ - /* search1201 -> 1021 in the cache */ - - /* replace1201_0 -> 16 in the cache */ - /* replace1201_1 -> 406 in the cache */ - /* replace1201 -> 457 in the cache */ - - /* ('ishr', ('ishl', 'a@32', 16), 16) => ('extract_i16', 'a', 0) */ - /* search1202_0_0 -> 16 in the cache */ - /* search1202_0_1 -> 866 in the cache */ - /* search1202_0 -> 1018 in the cache */ - /* search1202_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 1018, 866 }, - -1, - } }, - - /* replace1202_0 -> 16 in the cache */ - /* replace1202_1 -> 128 in the cache */ - /* replace1202 -> 446 in the cache */ - - /* ('ishr', 'a@32', 16) => ('extract_i16', 'a', 1) */ - /* search1203_0 -> 16 in the cache */ - /* search1203_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 16, 866 }, - -1, - } }, - - /* replace1203_0 -> 16 in the cache */ - /* replace1203_1 -> 406 in the cache */ - /* replace1203 -> 449 in the cache */ - - /* ('iand', 65535, 'a') => ('extract_u16', 'a', 0) */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0xffff /* 65535 */ }, - } }, - /* search1204_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 3442, 32 }, - -1, - } }, - - /* replace1204_0 -> 32 in the cache */ - /* replace1204_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 32, 61 }, - -1, - } }, - - /* ('ubfe', 'a', 0, 16) => ('extract_u16', 'a', 0) */ - /* search1205_0 -> 16 in the cache */ - /* search1205_1 -> 128 in the cache */ - /* search1205_2 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 128, 866 }, - -1, - } }, - - /* replace1205_0 -> 16 in the cache */ - /* replace1205_1 -> 128 in the cache */ - /* replace1205 -> 454 in the cache */ - - /* ('ubfe', 'a', 16, 16) => ('extract_u16', 'a', 1) */ - /* search1206_0 -> 16 in the cache */ - /* search1206_1 -> 866 in the cache */ - /* search1206_2 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 866, 866 }, - -1, - } }, - - /* replace1206_0 -> 16 in the cache */ - /* replace1206_1 -> 406 in the cache */ - /* replace1206 -> 457 in the cache */ - - /* ('ibfe', 'a', 0, 16) => ('extract_i16', 'a', 0) */ - /* search1207_0 -> 16 in the cache */ - /* search1207_1 -> 128 in the cache */ - /* search1207_2 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 128, 866 }, - -1, - } }, - - /* replace1207_0 -> 16 in the cache */ - /* replace1207_1 -> 128 in the cache */ - /* replace1207 -> 446 in the cache */ - - /* ('ibfe', 'a', 16, 16) => ('extract_i16', 'a', 1) */ - /* search1208_0 -> 16 in the cache */ - /* search1208_1 -> 866 in the cache */ - /* search1208_2 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 866, 866 }, - -1, - } }, - - /* replace1208_0 -> 16 in the cache */ - /* replace1208_1 -> 406 in the cache */ - /* replace1208 -> 449 in the cache */ - - /* ('ior', ('ishl', ('u2u32', 'a@8'), 24), ('ior', ('ishl', ('u2u32', 'b@8'), 16), ('ior', ('ishl', ('u2u32', 'c@8'), 8), ('u2u32', 'd@8')))) => ('pack_32_4x8', ('vec4', 'd', 'c', 'b', 'a')) */ - /* search1209_0_0_0 -> 6 in the cache */ - /* search1209_0_0 -> 2099 in the cache */ - /* search1209_0_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 2099, 1025 }, - -1, - } }, - /* search1209_1_0_0_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2280 }, - -1, - } }, - /* search1209_1_0_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3450, 866 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 8 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 3452 }, - -1, - } }, - /* search1209_1_1_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3453, 844 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 8 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 3455 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 2, 1, - { 3454, 3456 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 1, 2, - { 3451, 3457 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 3449, 3458 }, - -1, - } }, - - /* replace1209_0_0 -> 3455 in the cache */ - /* replace1209_0_1 -> 3452 in the cache */ - /* replace1209_0_2 -> 2280 in the cache */ - /* replace1209_0_3 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 3455, 3452, 2280, 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_32_4x8, - -1, 0, - { 3460 }, - -1, - } }, - - /* ('extract_u16', ('extract_i16', 'a', 'b'), 0) => ('extract_u16', 'a', 'b') */ - /* search1210_0_0 -> 0 in the cache */ - /* search1210_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 0, 3 }, - -1, - } }, - /* search1210_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 3462, 86 }, - -1, - } }, - - /* replace1210_0 -> 0 in the cache */ - /* replace1210_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('extract_u16', ('extract_u16', 'a', 'b'), 0) => ('extract_u16', 'a', 'b') */ - /* search1211_0_0 -> 0 in the cache */ - /* search1211_0_1 -> 3 in the cache */ - /* search1211_0 -> 3464 in the cache */ - /* search1211_1 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 3464, 86 }, - -1, - } }, - - /* replace1211_0 -> 0 in the cache */ - /* replace1211_1 -> 3 in the cache */ - /* replace1211 -> 3464 in the cache */ - - /* ('pack_64_2x32_split', 'a', 'b') => ('ior', ('u2u64', 'a'), ('ishl', ('u2u64', 'b'), 32)) */ - /* search1212_0 -> 16 in the cache */ - /* search1212_1 -> 36 in the cache */ - /* search1212 -> 3369 in the cache */ - - /* replace1212_0_0 -> 16 in the cache */ - /* replace1212_0 -> 2149 in the cache */ - /* replace1212_1_0_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 36 }, - -1, - } }, - /* replace1212_1_1 -> 887 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3466, 887 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2149, 3467 }, - -1, - } }, - - /* ('pack_32_2x16_split', 'a', 'b') => ('ior', ('u2u32', 'a'), ('ishl', ('u2u32', 'b'), 16)) */ - /* search1213_0 -> 11 in the cache */ - /* search1213_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_32_2x16_split, - -1, 0, - { 11, 268 }, - -1, - } }, - - /* replace1213_0_0 -> 11 in the cache */ - /* replace1213_0 -> 2129 in the cache */ - /* replace1213_1_0_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 268 }, - -1, - } }, - /* replace1213_1_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3470, 866 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2129, 3471 }, - -1, - } }, - - /* ('pack_half_2x16_split', 'a', 'b') => ('pack_half_2x16_rtz_split', 'a', 'b') */ - /* search1214_0 -> 16 in the cache */ - /* search1214_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_split, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1214_0 -> 16 in the cache */ - /* replace1214_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_rtz_split, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('unpack_64_2x32_split_x', 'a') => ('u2u32', 'a') */ - /* search1215_0 -> 21 in the cache */ - /* search1215 -> 2900 in the cache */ - - /* replace1215_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 21 }, - -1, - } }, - - /* ('unpack_64_2x32_split_y', 'a') => ('u2u32', ('ushr', 'a', 32)) */ - /* search1216_0 -> 21 in the cache */ - /* search1216 -> 2894 in the cache */ - - /* replace1216_0_0 -> 21 in the cache */ - /* replace1216_0_1 -> 887 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 887 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 3476 }, - -1, - } }, - - /* ('unpack_32_2x16_split_x', 'a') => ('u2u16', 'a') */ - /* search1217_0 -> 16 in the cache */ - /* search1217 -> 3393 in the cache */ - - /* replace1217_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 16 }, - -1, - } }, - - /* ('unpack_32_2x16_split_y', 'a') => ('u2u16', ('ushr', 'a', 16)) */ - /* search1218_0 -> 16 in the cache */ - /* search1218 -> 3395 in the cache */ - - /* replace1218_0_0 -> 16 in the cache */ - /* replace1218_0_1 -> 866 in the cache */ - /* replace1218_0 -> 1021 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 1021 }, - -1, - } }, - - /* ('unpack_half_2x16_split_x', ('iand', 'a', 65535)) => ('unpack_half_2x16_split_x', 'a') */ - /* search1219_0_0 -> 16 in the cache */ - /* search1219_0_1 -> 1015 in the cache */ - /* search1219_0 -> 1016 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_half_2x16_split_x, - -1, 1, - { 1016 }, - -1, - } }, - - /* replace1219_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_half_2x16_split_x, - -1, 0, - { 16 }, - -1, - } }, - - /* ('unpack_32_2x16_split_x', ('iand', 'a', 65535)) => ('unpack_32_2x16_split_x', 'a') */ - /* search1220_0_0 -> 16 in the cache */ - /* search1220_0_1 -> 1015 in the cache */ - /* search1220_0 -> 1016 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_unpack_32_2x16_split_x, - -1, 1, - { 1016 }, - -1, - } }, - - /* replace1220_0 -> 16 in the cache */ - /* replace1220 -> 3393 in the cache */ - - /* ('unpack_64_2x32_split_x', ('iand', 'a', 4294967295)) => ('unpack_64_2x32_split_x', 'a') */ - /* search1221_0_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0xffffffff /* 4294967295 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 3483 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_x, - -1, 1, - { 3484 }, - -1, - } }, - - /* replace1221_0 -> 21 in the cache */ - /* replace1221 -> 2900 in the cache */ - - /* ('unpack_half_2x16_split_y', ('iand', 'a', 4294901760)) => ('unpack_half_2x16_split_y', 'a') */ - /* search1222_0_0 -> 16 in the cache */ - /* search1222_0_1 -> 1019 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 1019 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_half_2x16_split_y, - -1, 1, - { 3486 }, - -1, - } }, - - /* replace1222_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_half_2x16_split_y, - -1, 0, - { 16 }, - -1, - } }, - - /* ('unpack_32_2x16_split_y', ('iand', 'a', 4294901760)) => ('unpack_32_2x16_split_y', 'a') */ - /* search1223_0_0 -> 16 in the cache */ - /* search1223_0_1 -> 1019 in the cache */ - /* search1223_0 -> 3486 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_unpack_32_2x16_split_y, - -1, 1, - { 3486 }, - -1, - } }, - - /* replace1223_0 -> 16 in the cache */ - /* replace1223 -> 3395 in the cache */ - - /* ('unpack_64_2x32_split_y', ('iand', 'a', 18446744069414584320)) => ('unpack_64_2x32_split_y', 'a') */ - /* search1224_0_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0xffffffff00000000 /* 18446744069414584320 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 3490 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_64_2x32_split_y, - -1, 1, - { 3491 }, - -1, - } }, - - /* replace1224_0 -> 21 in the cache */ - /* replace1224 -> 2894 in the cache */ - - /* ('unpack_half_2x16_split_x', ('extract_u16', 'a', 0)) => ('unpack_half_2x16_split_x', 'a') */ - /* search1225_0_0 -> 16 in the cache */ - /* search1225_0_1 -> 128 in the cache */ - /* search1225_0 -> 454 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_half_2x16_split_x, - -1, 0, - { 454 }, - -1, - } }, - - /* replace1225_0 -> 16 in the cache */ - /* replace1225 -> 3481 in the cache */ - - /* ('unpack_half_2x16_split_x', ('extract_u16', 'a', 1)) => ('unpack_half_2x16_split_y', 'a') */ - /* search1226_0_0 -> 16 in the cache */ - /* search1226_0_1 -> 406 in the cache */ - /* search1226_0 -> 457 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_half_2x16_split_x, - -1, 0, - { 457 }, - -1, - } }, - - /* replace1226_0 -> 16 in the cache */ - /* replace1226 -> 3488 in the cache */ - - /* ('unpack_half_2x16_split_x', ('ushr', 'a', 16)) => ('unpack_half_2x16_split_y', 'a') */ - /* search1227_0_0 -> 16 in the cache */ - /* search1227_0_1 -> 866 in the cache */ - /* search1227_0 -> 1021 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_half_2x16_split_x, - -1, 0, - { 1021 }, - -1, - } }, - - /* replace1227_0 -> 16 in the cache */ - /* replace1227 -> 3488 in the cache */ - - /* ('unpack_32_2x16_split_x', ('extract_u16', 'a', 0)) => ('unpack_32_2x16_split_x', 'a') */ - /* search1228_0_0 -> 16 in the cache */ - /* search1228_0_1 -> 128 in the cache */ - /* search1228_0 -> 454 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_unpack_32_2x16_split_x, - -1, 0, - { 454 }, - -1, - } }, - - /* replace1228_0 -> 16 in the cache */ - /* replace1228 -> 3393 in the cache */ - - /* ('unpack_32_2x16_split_x', ('extract_u16', 'a', 1)) => ('unpack_32_2x16_split_y', 'a') */ - /* search1229_0_0 -> 16 in the cache */ - /* search1229_0_1 -> 406 in the cache */ - /* search1229_0 -> 457 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_unpack_32_2x16_split_x, - -1, 0, - { 457 }, - -1, - } }, - - /* replace1229_0 -> 16 in the cache */ - /* replace1229 -> 3395 in the cache */ - - /* ('ishl', ('pack_half_2x16', ('vec2', 'a', 0)), 16) => ('pack_half_2x16', ('vec2', 0, 'a')) */ - /* search1230_0_0_0 -> 16 in the cache */ - /* search1230_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 16, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16, - -1, 0, - { 3498 }, - -1, - } }, - /* search1230_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3499, 866 }, - -1, - } }, - - /* replace1230_0_0 -> 128 in the cache */ - /* replace1230_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 128, 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16, - -1, 0, - { 3501 }, - -1, - } }, - - /* ('ushr', ('pack_half_2x16', ('vec2', 0, 'a')), 16) => ('pack_half_2x16', ('vec2', 'a', 0)) */ - /* search1231_0_0_0 -> 128 in the cache */ - /* search1231_0_0_1 -> 16 in the cache */ - /* search1231_0_0 -> 3501 in the cache */ - /* search1231_0 -> 3502 in the cache */ - /* search1231_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 3502, 866 }, - -1, - } }, - - /* replace1231_0_0 -> 16 in the cache */ - /* replace1231_0_1 -> 128 in the cache */ - /* replace1231_0 -> 3498 in the cache */ - /* replace1231 -> 3499 in the cache */ - - /* ('iadd', ('pack_half_2x16', ('vec2', 'a', 0)), ('pack_half_2x16', ('vec2', 0, 'b'))) => ('pack_half_2x16', ('vec2', 'a', 'b')) */ - /* search1232_0_0_0 -> 16 in the cache */ - /* search1232_0_0_1 -> 128 in the cache */ - /* search1232_0_0 -> 3498 in the cache */ - /* search1232_0 -> 3499 in the cache */ - /* search1232_1_0_0 -> 128 in the cache */ - /* search1232_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 128, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16, - -1, 0, - { 3504 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 3499, 3505 }, - -1, - } }, - - /* replace1232_0_0 -> 16 in the cache */ - /* replace1232_0_1 -> 36 in the cache */ - /* replace1232_0 -> 3382 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16, - -1, 0, - { 3382 }, - -1, - } }, - - /* ('ior', ('pack_half_2x16', ('vec2', 'a', 0)), ('pack_half_2x16', ('vec2', 0, 'b'))) => ('pack_half_2x16', ('vec2', 'a', 'b')) */ - /* search1233_0_0_0 -> 16 in the cache */ - /* search1233_0_0_1 -> 128 in the cache */ - /* search1233_0_0 -> 3498 in the cache */ - /* search1233_0 -> 3499 in the cache */ - /* search1233_1_0_0 -> 128 in the cache */ - /* search1233_1_0_1 -> 36 in the cache */ - /* search1233_1_0 -> 3504 in the cache */ - /* search1233_1 -> 3505 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 3499, 3505 }, - -1, - } }, - - /* replace1233_0_0 -> 16 in the cache */ - /* replace1233_0_1 -> 36 in the cache */ - /* replace1233_0 -> 3382 in the cache */ - /* replace1233 -> 3507 in the cache */ - - /* ('ishl', ('pack_half_2x16_split', 'a', 0), 16) => ('pack_half_2x16_split', 0, 'a') */ - /* search1234_0_0 -> 16 in the cache */ - /* search1234_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_split, - -1, 0, - { 16, 128 }, - -1, - } }, - /* search1234_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3509, 866 }, - -1, - } }, - - /* replace1234_0 -> 128 in the cache */ - /* replace1234_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_split, - -1, 0, - { 128, 16 }, - -1, - } }, - - /* ('ushr', ('pack_half_2x16_split', 0, 'a'), 16) => ('pack_half_2x16_split', 'a', 0) */ - /* search1235_0_0 -> 128 in the cache */ - /* search1235_0_1 -> 16 in the cache */ - /* search1235_0 -> 3511 in the cache */ - /* search1235_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 3511, 866 }, - -1, - } }, - - /* replace1235_0 -> 16 in the cache */ - /* replace1235_1 -> 128 in the cache */ - /* replace1235 -> 3509 in the cache */ - - /* ('extract_u16', ('pack_half_2x16_split', 0, 'a'), 1) => ('pack_half_2x16_split', 'a', 0) */ - /* search1236_0_0 -> 128 in the cache */ - /* search1236_0_1 -> 16 in the cache */ - /* search1236_0 -> 3511 in the cache */ - /* search1236_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 3511, 406 }, - -1, - } }, - - /* replace1236_0 -> 16 in the cache */ - /* replace1236_1 -> 128 in the cache */ - /* replace1236 -> 3509 in the cache */ - - /* ('ishl', ('pack_half_2x16_rtz_split', 'a', 0), 16) => ('pack_half_2x16_rtz_split', 0, 'a') */ - /* search1237_0_0 -> 16 in the cache */ - /* search1237_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_rtz_split, - -1, 0, - { 16, 128 }, - -1, - } }, - /* search1237_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3514, 866 }, - -1, - } }, - - /* replace1237_0 -> 128 in the cache */ - /* replace1237_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_rtz_split, - -1, 0, - { 128, 16 }, - -1, - } }, - - /* ('ushr', ('pack_half_2x16_rtz_split', 0, 'a'), 16) => ('pack_half_2x16_rtz_split', 'a', 0) */ - /* search1238_0_0 -> 128 in the cache */ - /* search1238_0_1 -> 16 in the cache */ - /* search1238_0 -> 3516 in the cache */ - /* search1238_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 3516, 866 }, - -1, - } }, - - /* replace1238_0 -> 16 in the cache */ - /* replace1238_1 -> 128 in the cache */ - /* replace1238 -> 3514 in the cache */ - - /* ('extract_u16', ('pack_half_2x16_rtz_split', 0, 'a'), 1) => ('pack_half_2x16_rtz_split', 'a', 0) */ - /* search1239_0_0 -> 128 in the cache */ - /* search1239_0_1 -> 16 in the cache */ - /* search1239_0 -> 3516 in the cache */ - /* search1239_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 3516, 406 }, - -1, - } }, - - /* replace1239_0 -> 16 in the cache */ - /* replace1239_1 -> 128 in the cache */ - /* replace1239 -> 3514 in the cache */ - - /* ('iadd', ('pack_half_2x16_split', 'a', 0), ('pack_half_2x16_split', 0, 'b')) => ('pack_half_2x16_split', 'a', 'b') */ - /* search1240_0_0 -> 16 in the cache */ - /* search1240_0_1 -> 128 in the cache */ - /* search1240_0 -> 3509 in the cache */ - /* search1240_1_0 -> 128 in the cache */ - /* search1240_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_split, - -1, 0, - { 128, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 3509, 3519 }, - -1, - } }, - - /* replace1240_0 -> 16 in the cache */ - /* replace1240_1 -> 36 in the cache */ - /* replace1240 -> 3473 in the cache */ - - /* ('ior', ('pack_half_2x16_split', 'a', 0), ('pack_half_2x16_split', 0, 'b')) => ('pack_half_2x16_split', 'a', 'b') */ - /* search1241_0_0 -> 16 in the cache */ - /* search1241_0_1 -> 128 in the cache */ - /* search1241_0 -> 3509 in the cache */ - /* search1241_1_0 -> 128 in the cache */ - /* search1241_1_1 -> 36 in the cache */ - /* search1241_1 -> 3519 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 3509, 3519 }, - -1, - } }, - - /* replace1241_0 -> 16 in the cache */ - /* replace1241_1 -> 36 in the cache */ - /* replace1241 -> 3473 in the cache */ - - /* ('iadd', ('pack_half_2x16_rtz_split', 'a', 0), ('pack_half_2x16_rtz_split', 0, 'b')) => ('pack_half_2x16_rtz_split', 'a', 'b') */ - /* search1242_0_0 -> 16 in the cache */ - /* search1242_0_1 -> 128 in the cache */ - /* search1242_0 -> 3514 in the cache */ - /* search1242_1_0 -> 128 in the cache */ - /* search1242_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_rtz_split, - -1, 0, - { 128, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 3514, 3522 }, - -1, - } }, - - /* replace1242_0 -> 16 in the cache */ - /* replace1242_1 -> 36 in the cache */ - /* replace1242 -> 3474 in the cache */ - - /* ('ior', ('pack_half_2x16_rtz_split', 'a', 0), ('pack_half_2x16_rtz_split', 0, 'b')) => ('pack_half_2x16_rtz_split', 'a', 'b') */ - /* search1243_0_0 -> 16 in the cache */ - /* search1243_0_1 -> 128 in the cache */ - /* search1243_0 -> 3514 in the cache */ - /* search1243_1_0 -> 128 in the cache */ - /* search1243_1_1 -> 36 in the cache */ - /* search1243_1 -> 3522 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 3514, 3522 }, - -1, - } }, - - /* replace1243_0 -> 16 in the cache */ - /* replace1243_1 -> 36 in the cache */ - /* replace1243 -> 3474 in the cache */ - - /* ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 0) => ('i2i', 'a') */ - /* search1244_0_0 -> 6 in the cache */ - /* search1244_0_1 -> 2280 in the cache */ - /* search1244_0_2 -> 3452 in the cache */ - /* search1244_0_3 -> 3455 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_32_4x8_split, - -1, 0, - { 6, 2280, 3452, 3455 }, - -1, - } }, - /* search1244_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3525, 128 }, - -1, - } }, - - /* replace1244_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_i2i, - -1, 0, - { 6 }, - -1, - } }, - - /* ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 1) => ('i2i', 'b') */ - /* search1245_0_0 -> 6 in the cache */ - /* search1245_0_1 -> 2280 in the cache */ - /* search1245_0_2 -> 3452 in the cache */ - /* search1245_0_3 -> 3455 in the cache */ - /* search1245_0 -> 3525 in the cache */ - /* search1245_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3525, 406 }, - -1, - } }, - - /* replace1245_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_i2i, - -1, 0, - { 2280 }, - -1, - } }, - - /* ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 2) => ('i2i', 'c') */ - /* search1246_0_0 -> 6 in the cache */ - /* search1246_0_1 -> 2280 in the cache */ - /* search1246_0_2 -> 3452 in the cache */ - /* search1246_0_3 -> 3455 in the cache */ - /* search1246_0 -> 3525 in the cache */ - /* search1246_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3525, 411 }, - -1, - } }, - - /* replace1246_0 -> 3452 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_i2i, - -1, 0, - { 3452 }, - -1, - } }, - - /* ('extract_i8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 3) => ('i2i', 'd') */ - /* search1247_0_0 -> 6 in the cache */ - /* search1247_0_1 -> 2280 in the cache */ - /* search1247_0_2 -> 3452 in the cache */ - /* search1247_0_3 -> 3455 in the cache */ - /* search1247_0 -> 3525 in the cache */ - /* search1247_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3525, 415 }, - -1, - } }, - - /* replace1247_0 -> 3455 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_i2i, - -1, 0, - { 3455 }, - -1, - } }, - - /* ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 0) => ('u2u', 'a') */ - /* search1248_0_0 -> 6 in the cache */ - /* search1248_0_1 -> 2280 in the cache */ - /* search1248_0_2 -> 3452 in the cache */ - /* search1248_0_3 -> 3455 in the cache */ - /* search1248_0 -> 3525 in the cache */ - /* search1248_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3525, 128 }, - -1, - } }, - - /* replace1248_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_u2u, - -1, 0, - { 6 }, - -1, - } }, - - /* ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 1) => ('u2u', 'b') */ - /* search1249_0_0 -> 6 in the cache */ - /* search1249_0_1 -> 2280 in the cache */ - /* search1249_0_2 -> 3452 in the cache */ - /* search1249_0_3 -> 3455 in the cache */ - /* search1249_0 -> 3525 in the cache */ - /* search1249_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3525, 406 }, - -1, - } }, - - /* replace1249_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_u2u, - -1, 0, - { 2280 }, - -1, - } }, - - /* ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 2) => ('u2u', 'c') */ - /* search1250_0_0 -> 6 in the cache */ - /* search1250_0_1 -> 2280 in the cache */ - /* search1250_0_2 -> 3452 in the cache */ - /* search1250_0_3 -> 3455 in the cache */ - /* search1250_0 -> 3525 in the cache */ - /* search1250_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3525, 411 }, - -1, - } }, - - /* replace1250_0 -> 3452 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_u2u, - -1, 0, - { 3452 }, - -1, - } }, - - /* ('extract_u8', ('pack_32_4x8_split', 'a', 'b', 'c', 'd'), 3) => ('u2u', 'd') */ - /* search1251_0_0 -> 6 in the cache */ - /* search1251_0_1 -> 2280 in the cache */ - /* search1251_0_2 -> 3452 in the cache */ - /* search1251_0_3 -> 3455 in the cache */ - /* search1251_0 -> 3525 in the cache */ - /* search1251_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3525, 415 }, - -1, - } }, - - /* replace1251_0 -> 3455 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_u2u, - -1, 0, - { 3455 }, - -1, - } }, - - /* ('extract_u8', ('ushr', 'a@16', 8), 0) => ('extract_u8', 'a', 1) */ - /* search1252_0_0 -> 11 in the cache */ - /* search1252_0_1 -> 844 in the cache */ - /* search1252_0 -> 3401 in the cache */ - /* search1252_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3401, 869 }, - -1, - } }, - - /* replace1252_0 -> 11 in the cache */ - /* replace1252_1 -> 1465 in the cache */ - /* replace1252 -> 3402 in the cache */ - - /* ('extract_u8', ('ushr', 'a@32', 8), 0) => ('extract_u8', 'a', 1) */ - /* search1253_0_0 -> 16 in the cache */ - /* search1253_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 16, 844 }, - -1, - } }, - /* search1253_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3543, 128 }, - -1, - } }, - - /* replace1253_0 -> 16 in the cache */ - /* replace1253_1 -> 406 in the cache */ - /* replace1253 -> 425 in the cache */ - - /* ('extract_u8', ('ushr', 'a@32', 16), 0) => ('extract_u8', 'a', 2) */ - /* search1254_0_0 -> 16 in the cache */ - /* search1254_0_1 -> 866 in the cache */ - /* search1254_0 -> 1021 in the cache */ - /* search1254_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 1021, 128 }, - -1, - } }, - - /* replace1254_0 -> 16 in the cache */ - /* replace1254_1 -> 411 in the cache */ - /* replace1254 -> 429 in the cache */ - - /* ('extract_u8', ('ushr', 'a@32', 24), 0) => ('extract_u8', 'a', 3) */ - /* search1255_0_0 -> 16 in the cache */ - /* search1255_0_1 -> 1025 in the cache */ - /* search1255_0 -> 1030 in the cache */ - /* search1255_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 1030, 128 }, - -1, - } }, - - /* replace1255_0 -> 16 in the cache */ - /* replace1255_1 -> 415 in the cache */ - /* replace1255 -> 432 in the cache */ - - /* ('extract_u8', ('ushr', 'a@64', 8), 0) => ('extract_u8', 'a', 1) */ - /* search1256_0_0 -> 21 in the cache */ - /* search1256_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 844 }, - -1, - } }, - /* search1256_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3547, 910 }, - -1, - } }, - - /* replace1256_0 -> 21 in the cache */ - /* replace1256_1 -> 1507 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 1507 }, - -1, - } }, - - /* ('extract_u8', ('ushr', 'a@64', 16), 0) => ('extract_u8', 'a', 2) */ - /* search1257_0_0 -> 21 in the cache */ - /* search1257_0_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 866 }, - -1, - } }, - /* search1257_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3550, 910 }, - -1, - } }, - - /* replace1257_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x2 /* 2 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 3552 }, - -1, - } }, - - /* ('extract_u8', ('ushr', 'a@64', 24), 0) => ('extract_u8', 'a', 3) */ - /* search1258_0_0 -> 21 in the cache */ - /* search1258_0_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 1025 }, - -1, - } }, - /* search1258_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3554, 910 }, - -1, - } }, - - /* replace1258_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x3 /* 3 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 3556 }, - -1, - } }, - - /* ('extract_u8', ('ushr', 'a@64', 32), 0) => ('extract_u8', 'a', 4) */ - /* search1259_0_0 -> 21 in the cache */ - /* search1259_0_1 -> 887 in the cache */ - /* search1259_0 -> 3476 in the cache */ - /* search1259_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3476, 910 }, - -1, - } }, - - /* replace1259_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x4 /* 4 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 3559 }, - -1, - } }, - - /* ('extract_u8', ('ushr', 'a@64', 40), 0) => ('extract_u8', 'a', 5) */ - /* search1260_0_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x28 /* 40 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 3561 }, - -1, - } }, - /* search1260_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3562, 910 }, - -1, - } }, - - /* replace1260_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x5 /* 5 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 3564 }, - -1, - } }, - - /* ('extract_u8', ('ushr', 'a@64', 48), 0) => ('extract_u8', 'a', 6) */ - /* search1261_0_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x30 /* 48 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 21, 3566 }, - -1, - } }, - /* search1261_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3567, 910 }, - -1, - } }, - - /* replace1261_0 -> 21 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x6 /* 6 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 3569 }, - -1, - } }, - - /* ('extract_u8', ('ushr', 'a@64', 56), 0) => ('extract_u8', 'a', 7) */ - /* search1262_0_0 -> 21 in the cache */ - /* search1262_0_1 -> 3403 in the cache */ - /* search1262_0 -> 3404 in the cache */ - /* search1262_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3404, 910 }, - -1, - } }, - - /* replace1262_0 -> 21 in the cache */ - /* replace1262_1 -> 3405 in the cache */ - /* replace1262 -> 3406 in the cache */ - - /* ('extract_u8', ('ishr', 'a@16', 8), 0) => ('extract_u8', 'a', 1) */ - /* search1263_0_0 -> 11 in the cache */ - /* search1263_0_1 -> 844 in the cache */ - /* search1263_0 -> 3407 in the cache */ - /* search1263_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3407, 869 }, - -1, - } }, - - /* replace1263_0 -> 11 in the cache */ - /* replace1263_1 -> 1465 in the cache */ - /* replace1263 -> 3402 in the cache */ - - /* ('extract_u8', ('ishr', 'a@32', 8), 0) => ('extract_u8', 'a', 1) */ - /* search1264_0_0 -> 16 in the cache */ - /* search1264_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 16, 844 }, - -1, - } }, - /* search1264_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3573, 128 }, - -1, - } }, - - /* replace1264_0 -> 16 in the cache */ - /* replace1264_1 -> 406 in the cache */ - /* replace1264 -> 425 in the cache */ - - /* ('extract_u8', ('ishr', 'a@32', 16), 0) => ('extract_u8', 'a', 2) */ - /* search1265_0_0 -> 16 in the cache */ - /* search1265_0_1 -> 866 in the cache */ - /* search1265_0 -> 3441 in the cache */ - /* search1265_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3441, 128 }, - -1, - } }, - - /* replace1265_0 -> 16 in the cache */ - /* replace1265_1 -> 411 in the cache */ - /* replace1265 -> 429 in the cache */ - - /* ('extract_u8', ('ishr', 'a@32', 24), 0) => ('extract_u8', 'a', 3) */ - /* search1266_0_0 -> 16 in the cache */ - /* search1266_0_1 -> 1025 in the cache */ - /* search1266_0 -> 3409 in the cache */ - /* search1266_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3409, 128 }, - -1, - } }, - - /* replace1266_0 -> 16 in the cache */ - /* replace1266_1 -> 415 in the cache */ - /* replace1266 -> 432 in the cache */ - - /* ('extract_u8', ('ishr', 'a@64', 8), 0) => ('extract_u8', 'a', 1) */ - /* search1267_0_0 -> 21 in the cache */ - /* search1267_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 844 }, - -1, - } }, - /* search1267_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3577, 910 }, - -1, - } }, - - /* replace1267_0 -> 21 in the cache */ - /* replace1267_1 -> 1507 in the cache */ - /* replace1267 -> 3549 in the cache */ - - /* ('extract_u8', ('ishr', 'a@64', 16), 0) => ('extract_u8', 'a', 2) */ - /* search1268_0_0 -> 21 in the cache */ - /* search1268_0_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 866 }, - -1, - } }, - /* search1268_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3579, 910 }, - -1, - } }, - - /* replace1268_0 -> 21 in the cache */ - /* replace1268_1 -> 3552 in the cache */ - /* replace1268 -> 3553 in the cache */ - - /* ('extract_u8', ('ishr', 'a@64', 24), 0) => ('extract_u8', 'a', 3) */ - /* search1269_0_0 -> 21 in the cache */ - /* search1269_0_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 1025 }, - -1, - } }, - /* search1269_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3581, 910 }, - -1, - } }, - - /* replace1269_0 -> 21 in the cache */ - /* replace1269_1 -> 3556 in the cache */ - /* replace1269 -> 3557 in the cache */ - - /* ('extract_u8', ('ishr', 'a@64', 32), 0) => ('extract_u8', 'a', 4) */ - /* search1270_0_0 -> 21 in the cache */ - /* search1270_0_1 -> 887 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 887 }, - -1, - } }, - /* search1270_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3583, 910 }, - -1, - } }, - - /* replace1270_0 -> 21 in the cache */ - /* replace1270_1 -> 3559 in the cache */ - /* replace1270 -> 3560 in the cache */ - - /* ('extract_u8', ('ishr', 'a@64', 40), 0) => ('extract_u8', 'a', 5) */ - /* search1271_0_0 -> 21 in the cache */ - /* search1271_0_1 -> 3561 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 3561 }, - -1, - } }, - /* search1271_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3585, 910 }, - -1, - } }, - - /* replace1271_0 -> 21 in the cache */ - /* replace1271_1 -> 3564 in the cache */ - /* replace1271 -> 3565 in the cache */ - - /* ('extract_u8', ('ishr', 'a@64', 48), 0) => ('extract_u8', 'a', 6) */ - /* search1272_0_0 -> 21 in the cache */ - /* search1272_0_1 -> 3566 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 21, 3566 }, - -1, - } }, - /* search1272_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3587, 910 }, - -1, - } }, - - /* replace1272_0 -> 21 in the cache */ - /* replace1272_1 -> 3569 in the cache */ - /* replace1272 -> 3570 in the cache */ - - /* ('extract_u8', ('ishr', 'a@64', 56), 0) => ('extract_u8', 'a', 7) */ - /* search1273_0_0 -> 21 in the cache */ - /* search1273_0_1 -> 3403 in the cache */ - /* search1273_0 -> 3410 in the cache */ - /* search1273_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3410, 910 }, - -1, - } }, - - /* replace1273_0 -> 21 in the cache */ - /* replace1273_1 -> 3405 in the cache */ - /* replace1273 -> 3406 in the cache */ - - /* ('extract_u8', ('extract_u16', 'a', 1), 0) => ('extract_u8', 'a', 2) */ - /* search1274_0_0 -> 32 in the cache */ - /* search1274_0_1 -> 35 in the cache */ - /* search1274_0 -> 3414 in the cache */ - /* search1274_1 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3414, 61 }, - -1, - } }, - - /* replace1274_0 -> 32 in the cache */ - /* replace1274_1 -> 2406 in the cache */ - /* replace1274 -> 3416 in the cache */ - - /* ('extract_u8', ('ishl', 'a@16', 8), 1) => ('extract_u8', 'a', 0) */ - /* search1275_0_0 -> 11 in the cache */ - /* search1275_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 11, 844 }, - -1, - } }, - /* search1275_1 -> 1465 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3591, 1465 }, - -1, - } }, - - /* replace1275_0 -> 11 in the cache */ - /* replace1275_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 11, 869 }, - -1, - } }, - - /* ('extract_u8', ('ishl', 'a@32', 8), 3) => ('extract_u8', 'a', 2) */ - /* search1276_0_0 -> 16 in the cache */ - /* search1276_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 844 }, - -1, - } }, - /* search1276_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3594, 415 }, - -1, - } }, - - /* replace1276_0 -> 16 in the cache */ - /* replace1276_1 -> 411 in the cache */ - /* replace1276 -> 429 in the cache */ - - /* ('extract_u8', ('ishl', 'a@32', 16), 3) => ('extract_u8', 'a', 1) */ - /* search1277_0_0 -> 16 in the cache */ - /* search1277_0_1 -> 866 in the cache */ - /* search1277_0 -> 1018 in the cache */ - /* search1277_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 1018, 415 }, - -1, - } }, - - /* replace1277_0 -> 16 in the cache */ - /* replace1277_1 -> 406 in the cache */ - /* replace1277 -> 425 in the cache */ - - /* ('extract_u8', ('ishl', 'a@32', 24), 3) => ('extract_u8', 'a', 0) */ - /* search1278_0_0 -> 16 in the cache */ - /* search1278_0_1 -> 1025 in the cache */ - /* search1278_0 -> 1027 in the cache */ - /* search1278_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 1027, 415 }, - -1, - } }, - - /* replace1278_0 -> 16 in the cache */ - /* replace1278_1 -> 128 in the cache */ - /* replace1278 -> 422 in the cache */ - - /* ('extract_u8', ('ishl', 'a@64', 8), 7) => ('extract_u8', 'a', 6) */ - /* search1279_0_0 -> 21 in the cache */ - /* search1279_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 844 }, - -1, - } }, - /* search1279_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3598, 3405 }, - -1, - } }, - - /* replace1279_0 -> 21 in the cache */ - /* replace1279_1 -> 3569 in the cache */ - /* replace1279 -> 3570 in the cache */ - - /* ('extract_u8', ('ishl', 'a@64', 16), 7) => ('extract_u8', 'a', 5) */ - /* search1280_0_0 -> 21 in the cache */ - /* search1280_0_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 866 }, - -1, - } }, - /* search1280_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3600, 3405 }, - -1, - } }, - - /* replace1280_0 -> 21 in the cache */ - /* replace1280_1 -> 3564 in the cache */ - /* replace1280 -> 3565 in the cache */ - - /* ('extract_u8', ('ishl', 'a@64', 24), 7) => ('extract_u8', 'a', 4) */ - /* search1281_0_0 -> 21 in the cache */ - /* search1281_0_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 1025 }, - -1, - } }, - /* search1281_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3602, 3405 }, - -1, - } }, - - /* replace1281_0 -> 21 in the cache */ - /* replace1281_1 -> 3559 in the cache */ - /* replace1281 -> 3560 in the cache */ - - /* ('extract_u8', ('ishl', 'a@64', 32), 7) => ('extract_u8', 'a', 3) */ - /* search1282_0_0 -> 21 in the cache */ - /* search1282_0_1 -> 887 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 887 }, - -1, - } }, - /* search1282_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3604, 3405 }, - -1, - } }, - - /* replace1282_0 -> 21 in the cache */ - /* replace1282_1 -> 3556 in the cache */ - /* replace1282 -> 3557 in the cache */ - - /* ('extract_u8', ('ishl', 'a@64', 40), 7) => ('extract_u8', 'a', 2) */ - /* search1283_0_0 -> 21 in the cache */ - /* search1283_0_1 -> 3561 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 3561 }, - -1, - } }, - /* search1283_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3606, 3405 }, - -1, - } }, - - /* replace1283_0 -> 21 in the cache */ - /* replace1283_1 -> 3552 in the cache */ - /* replace1283 -> 3553 in the cache */ - - /* ('extract_u8', ('ishl', 'a@64', 48), 7) => ('extract_u8', 'a', 1) */ - /* search1284_0_0 -> 21 in the cache */ - /* search1284_0_1 -> 3566 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 3566 }, - -1, - } }, - /* search1284_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3608, 3405 }, - -1, - } }, - - /* replace1284_0 -> 21 in the cache */ - /* replace1284_1 -> 1507 in the cache */ - /* replace1284 -> 3549 in the cache */ - - /* ('extract_u8', ('ishl', 'a@64', 56), 7) => ('extract_u8', 'a', 0) */ - /* search1285_0_0 -> 21 in the cache */ - /* search1285_0_1 -> 3403 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 3403 }, - -1, - } }, - /* search1285_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 3610, 3405 }, - -1, - } }, - - /* replace1285_0 -> 21 in the cache */ - /* replace1285_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 21, 910 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@16', 8), 1) => ('extract_i8', 'a', 0) */ - /* search1286_0_0 -> 11 in the cache */ - /* search1286_0_1 -> 844 in the cache */ - /* search1286_0 -> 3591 in the cache */ - /* search1286_1 -> 1465 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3591, 1465 }, - -1, - } }, - - /* replace1286_0 -> 11 in the cache */ - /* replace1286_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 11, 869 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@32', 8), 3) => ('extract_i8', 'a', 2) */ - /* search1287_0_0 -> 16 in the cache */ - /* search1287_0_1 -> 844 in the cache */ - /* search1287_0 -> 3594 in the cache */ - /* search1287_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3594, 415 }, - -1, - } }, - - /* replace1287_0 -> 16 in the cache */ - /* replace1287_1 -> 411 in the cache */ - /* replace1287 -> 412 in the cache */ - - /* ('extract_i8', ('ishl', 'a@32', 16), 3) => ('extract_i8', 'a', 1) */ - /* search1288_0_0 -> 16 in the cache */ - /* search1288_0_1 -> 866 in the cache */ - /* search1288_0 -> 1018 in the cache */ - /* search1288_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 1018, 415 }, - -1, - } }, - - /* replace1288_0 -> 16 in the cache */ - /* replace1288_1 -> 406 in the cache */ - /* replace1288 -> 407 in the cache */ - - /* ('extract_i8', ('ishl', 'a@32', 24), 3) => ('extract_i8', 'a', 0) */ - /* search1289_0_0 -> 16 in the cache */ - /* search1289_0_1 -> 1025 in the cache */ - /* search1289_0 -> 1027 in the cache */ - /* search1289_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 1027, 415 }, - -1, - } }, - - /* replace1289_0 -> 16 in the cache */ - /* replace1289_1 -> 128 in the cache */ - /* replace1289 -> 403 in the cache */ - - /* ('extract_i8', ('ishl', 'a@64', 8), 7) => ('extract_i8', 'a', 6) */ - /* search1290_0_0 -> 21 in the cache */ - /* search1290_0_1 -> 844 in the cache */ - /* search1290_0 -> 3598 in the cache */ - /* search1290_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3598, 3405 }, - -1, - } }, - - /* replace1290_0 -> 21 in the cache */ - /* replace1290_1 -> 3569 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 3569 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@64', 16), 7) => ('extract_i8', 'a', 5) */ - /* search1291_0_0 -> 21 in the cache */ - /* search1291_0_1 -> 866 in the cache */ - /* search1291_0 -> 3600 in the cache */ - /* search1291_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3600, 3405 }, - -1, - } }, - - /* replace1291_0 -> 21 in the cache */ - /* replace1291_1 -> 3564 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 3564 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@64', 24), 7) => ('extract_i8', 'a', 4) */ - /* search1292_0_0 -> 21 in the cache */ - /* search1292_0_1 -> 1025 in the cache */ - /* search1292_0 -> 3602 in the cache */ - /* search1292_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3602, 3405 }, - -1, - } }, - - /* replace1292_0 -> 21 in the cache */ - /* replace1292_1 -> 3559 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 3559 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@64', 32), 7) => ('extract_i8', 'a', 3) */ - /* search1293_0_0 -> 21 in the cache */ - /* search1293_0_1 -> 887 in the cache */ - /* search1293_0 -> 3604 in the cache */ - /* search1293_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3604, 3405 }, - -1, - } }, - - /* replace1293_0 -> 21 in the cache */ - /* replace1293_1 -> 3556 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 3556 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@64', 40), 7) => ('extract_i8', 'a', 2) */ - /* search1294_0_0 -> 21 in the cache */ - /* search1294_0_1 -> 3561 in the cache */ - /* search1294_0 -> 3606 in the cache */ - /* search1294_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3606, 3405 }, - -1, - } }, - - /* replace1294_0 -> 21 in the cache */ - /* replace1294_1 -> 3552 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 3552 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@64', 48), 7) => ('extract_i8', 'a', 1) */ - /* search1295_0_0 -> 21 in the cache */ - /* search1295_0_1 -> 3566 in the cache */ - /* search1295_0 -> 3608 in the cache */ - /* search1295_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3608, 3405 }, - -1, - } }, - - /* replace1295_0 -> 21 in the cache */ - /* replace1295_1 -> 1507 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 1507 }, - -1, - } }, - - /* ('extract_i8', ('ishl', 'a@64', 56), 7) => ('extract_i8', 'a', 0) */ - /* search1296_0_0 -> 21 in the cache */ - /* search1296_0_1 -> 3403 in the cache */ - /* search1296_0 -> 3610 in the cache */ - /* search1296_1 -> 3405 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 3610, 3405 }, - -1, - } }, - - /* replace1296_0 -> 21 in the cache */ - /* replace1296_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 21, 910 }, - -1, - } }, - - /* ('ussub_4x8_vc4', 'a', 0) => a */ - /* search1297_0 -> 16 in the cache */ - /* search1297_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ussub_4x8_vc4, - -1, 0, - { 16, 128 }, - -1, - } }, - - /* replace1297 -> 16 in the cache */ - - /* ('ussub_4x8_vc4', 'a', -1) => 0 */ - /* search1298_0 -> 16 in the cache */ - /* search1298_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ussub_4x8_vc4, - -1, 0, - { 16, 130 }, - -1, - } }, - - /* replace1298 -> 128 in the cache */ - - /* ('fsub', 'a', 'b') => ('fadd', 'a', ('fneg', 'b')) */ - /* search1299_0 -> 0 in the cache */ - /* search1299_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1299_0 -> 0 in the cache */ - /* replace1299_1_0 -> 3 in the cache */ - /* replace1299_1 -> 1100 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 0, 1100 }, - -1, - } }, - - /* ('isub', 'a', 'b') => ('iadd', 'a', ('ineg', 'b')) */ - /* search1300_0 -> 0 in the cache */ - /* search1300_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1300_0 -> 0 in the cache */ - /* replace1300_1_0 -> 3 in the cache */ - /* replace1300_1 -> 93 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 0, 93 }, - -1, - } }, - - /* ('uabs_usub', 'a', 'b') => ('bcsel', ('ult', 'a', 'b'), ('ineg', ('isub', 'a', 'b')), ('isub', 'a', 'b')) */ - /* search1301_0 -> 0 in the cache */ - /* search1301_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_uabs_usub, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1301_0_0 -> 0 in the cache */ - /* replace1301_0_1 -> 3 in the cache */ - /* replace1301_0 -> 1080 in the cache */ - /* replace1301_1_0_0 -> 0 in the cache */ - /* replace1301_1_0_1 -> 3 in the cache */ - /* replace1301_1_0 -> 3636 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3636 }, - -1, - } }, - /* replace1301_2_0 -> 0 in the cache */ - /* replace1301_2_1 -> 3 in the cache */ - /* replace1301_2 -> 3636 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1080, 3639, 3636 }, - -1, - } }, - - /* ('uabs_isub', 'a', 'b') => ('bcsel', ('ilt', 'a', 'b'), ('ineg', ('isub', 'a', 'b')), ('isub', 'a', 'b')) */ - /* search1302_0 -> 0 in the cache */ - /* search1302_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_uabs_isub, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1302_0_0 -> 0 in the cache */ - /* replace1302_0_1 -> 3 in the cache */ - /* replace1302_0 -> 1077 in the cache */ - /* replace1302_1_0_0 -> 0 in the cache */ - /* replace1302_1_0_1 -> 3 in the cache */ - /* replace1302_1_0 -> 3636 in the cache */ - /* replace1302_1 -> 3639 in the cache */ - /* replace1302_2_0 -> 0 in the cache */ - /* replace1302_2_1 -> 3 in the cache */ - /* replace1302_2 -> 3636 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1077, 3639, 3636 }, - -1, - } }, - - /* ('fmul(is_used_by_non_fsat)', ('fneg', 'a'), 'b') => ('fneg', ('fmul', 'a', 'b')) */ - /* search1303_0_0 -> 0 in the cache */ - /* search1303_0 -> 223 in the cache */ - /* search1303_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 223, 3 }, - 3, - } }, - - /* replace1303_0_0 -> 0 in the cache */ - /* replace1303_0_1 -> 3 in the cache */ - /* replace1303_0 -> 274 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 274 }, - -1, - } }, - - /* ('fmulz(is_used_by_non_fsat)', ('fneg', 'a'), 'b') => ('fneg', ('fmulz', 'a', 'b')) */ - /* search1304_0_0 -> 16 in the cache */ - /* search1304_0 -> 290 in the cache */ - /* search1304_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 290, 36 }, - 3, - } }, - - /* replace1304_0_0 -> 16 in the cache */ - /* replace1304_0_1 -> 36 in the cache */ - /* replace1304_0 -> 279 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 279 }, - -1, - } }, - - /* ('ffma', ('fneg', 'a'), ('fneg', 'b'), 'c') => ('ffma', 'a', 'b', 'c') */ - /* search1305_0_0 -> 132 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 132 }, - -1, - } }, - /* search1305_1_0 -> 133 in the cache */ - /* search1305_1 -> 1210 in the cache */ - /* search1305_2 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 3647, 1210, 135 }, - -1, - } }, - - /* replace1305_0 -> 132 in the cache */ - /* replace1305_1 -> 133 in the cache */ - /* replace1305_2 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 132, 133, 135 }, - -1, - } }, - - /* ('ffmaz', ('fneg', 'a'), ('fneg', 'b'), 'c') => ('ffmaz', 'a', 'b', 'c') */ - /* search1306_0_0 -> 16 in the cache */ - /* search1306_0 -> 290 in the cache */ - /* search1306_1_0 -> 36 in the cache */ - /* search1306_1 -> 610 in the cache */ - /* search1306_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 290, 610, 141 }, - -1, - } }, - - /* replace1306_0 -> 16 in the cache */ - /* replace1306_1 -> 36 in the cache */ - /* replace1306_2 -> 141 in the cache */ - /* replace1306 -> 397 in the cache */ - - /* ('imul', ('ineg', 'a'), 'b') => ('ineg', ('imul', 'a', 'b')) */ - /* search1307_0_0 -> 0 in the cache */ - /* search1307_0 -> 218 in the cache */ - /* search1307_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 218, 3 }, - -1, - } }, - - /* replace1307_0_0 -> 0 in the cache */ - /* replace1307_0_1 -> 3 in the cache */ - /* replace1307_0 -> 964 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 1, - { 964 }, - -1, - } }, - - /* ('~fmul(is_used_once)', ('fmul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('fmul', ('fmul', 'a', 'c'), 'b') */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 3653, 3654 }, - 0, - } }, - /* search1308_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fmul, - 0, 2, - { 3655, 827 }, - 0, - } }, - - /* replace1308_0_0 -> 132 in the cache */ - /* replace1308_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 132, 135 }, - -1, - } }, - /* replace1308_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 3657, 133 }, - -1, - } }, - - /* ('~fmulz(is_used_once)', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('fmulz', ('fmulz', 'a', 'c'), 'b') */ - /* search1309_0_0 -> 338 in the cache */ - /* search1309_0_1 -> 348 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 338, 348 }, - 0, - } }, - /* search1309_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmulz, - 0, 2, - { 3659, 319 }, - 0, - } }, - - /* replace1309_0_0 -> 16 in the cache */ - /* replace1309_0_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 16, 141 }, - -1, - } }, - /* replace1309_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 2, - { 3661, 36 }, - -1, - } }, - - /* ('~fmul(is_used_once)', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c(is_finite_not_zero)') => ('fmulz', ('fmul', 'a', 'c'), 'b') */ - /* search1310_0_0 -> 338 in the cache */ - /* search1310_0_1 -> 348 in the cache */ - /* search1310_0 -> 3659 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - true, - nir_type_invalid, - 3, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmul, - 0, 2, - { 3659, 3663 }, - 0, - } }, - - /* replace1310_0_0 -> 16 in the cache */ - /* replace1310_0_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 16, 141 }, - -1, - } }, - /* replace1310_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 2, - { 3665, 36 }, - -1, - } }, - - /* ('imul(is_used_once)', ('imul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('imul', ('imul', 'a', 'c'), 'b') */ - /* search1311_0_0 -> 3653 in the cache */ - /* search1311_0_1 -> 3654 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 3653, 3654 }, - 0, - } }, - /* search1311_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 3667, 827 }, - 0, - } }, - - /* replace1311_0_0 -> 132 in the cache */ - /* replace1311_0_1 -> 135 in the cache */ - /* replace1311_0 -> 1038 in the cache */ - /* replace1311_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 1038, 133 }, - -1, - } }, - - /* ('~ffma', ('fmul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c', 'd') => ('ffma', ('fmul', 'a', 'c'), 'b', 'd') */ - { .variable = { - { nir_search_value_variable, -4 }, - 0, /* a */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 1, /* b */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 3670, 3671 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1312_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 3672, 3673, 159 }, - -1, - } }, - - /* replace1312_0_0 -> 155 in the cache */ - /* replace1312_0_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 155, 158 }, - -1, - } }, - /* replace1312_1 -> 156 in the cache */ - /* replace1312_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 0, 2, - { 3675, 156, 159 }, - -1, - } }, - - /* ('~ffmaz', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c', 'd') => ('ffmaz', ('fmulz', 'a', 'c'), 'b', 'd') */ - /* search1313_0_0 -> 338 in the cache */ - /* search1313_0_1 -> 348 in the cache */ - /* search1313_0 -> 3659 in the cache */ - /* search1313_1 -> 319 in the cache */ - /* search1313_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 2, - { 3659, 319, 169 }, - -1, - } }, - - /* replace1313_0_0 -> 16 in the cache */ - /* replace1313_0_1 -> 141 in the cache */ - /* replace1313_0 -> 3661 in the cache */ - /* replace1313_1 -> 36 in the cache */ - /* replace1313_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 2, - { 3661, 36, 169 }, - -1, - } }, - - /* ('~ffma', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c(is_finite_not_zero)', 'd') => ('ffmaz', ('fmul', 'a', 'c'), 'b', 'd') */ - /* search1314_0_0 -> 338 in the cache */ - /* search1314_0_1 -> 348 in the cache */ - /* search1314_0 -> 3659 in the cache */ - /* search1314_1 -> 3663 in the cache */ - /* search1314_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 3659, 3663, 169 }, - -1, - } }, - - /* replace1314_0_0 -> 16 in the cache */ - /* replace1314_0_1 -> 141 in the cache */ - /* replace1314_0 -> 3665 in the cache */ - /* replace1314_1 -> 36 in the cache */ - /* replace1314_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 2, - { 3665, 36, 169 }, - -1, - } }, - - /* ('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', 'b(is_fmul)'), '#c') => ('fadd', ('fadd', 'a', 'c'), 'b') */ - /* search1315_0_0 -> 3653 in the cache */ - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - false, - nir_type_invalid, - 33, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 3653, 3681 }, - 0, - } }, - /* search1315_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 3682, 827 }, - 0, - } }, - - /* replace1315_0_0 -> 132 in the cache */ - /* replace1315_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 132, 135 }, - -1, - } }, - /* replace1315_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 3684, 133 }, - -1, - } }, - - /* ('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('fadd', ('fadd', 'a', 'c'), 'b') */ - /* search1316_0_0 -> 3653 in the cache */ - /* search1316_0_1 -> 3654 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 3653, 3654 }, - 0, - } }, - /* search1316_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 3686, 827 }, - 0, - } }, - - /* replace1316_0_0 -> 132 in the cache */ - /* replace1316_0_1 -> 135 in the cache */ - /* replace1316_0 -> 3684 in the cache */ - /* replace1316_1 -> 133 in the cache */ - /* replace1316 -> 3685 in the cache */ - - /* ('~fadd(is_used_once)', ('ffma(is_used_once)', 'a(is_not_const)', 'b', 'c(is_not_const)'), '#d') => ('fadd', ('ffma', 'a', 'b', 'd'), 'c') */ - /* search1317_0_0 -> 3670 in the cache */ - /* search1317_0_1 -> 156 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* c */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 3670, 156, 3688 }, - 0, - } }, - /* search1317_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 3689, 1044 }, - 0, - } }, - - /* replace1317_0_0 -> 155 in the cache */ - /* replace1317_0_1 -> 156 in the cache */ - /* replace1317_0_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 155, 156, 159 }, - -1, - } }, - /* replace1317_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 3691, 158 }, - -1, - } }, - - /* ('~fadd(is_used_once)', ('ffmaz(is_used_once)', 'a(is_not_const)', 'b', 'c(is_not_const)'), '#d') => ('fadd', ('ffmaz', 'a', 'b', 'd'), 'c') */ - /* search1318_0_0 -> 338 in the cache */ - /* search1318_0_1 -> 36 in the cache */ - /* search1318_0_2 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 338, 36, 357 }, - 0, - } }, - /* search1318_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 3693, 321 }, - 0, - } }, - - /* replace1318_0_0 -> 16 in the cache */ - /* replace1318_0_1 -> 36 in the cache */ - /* replace1318_0_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 16, 36, 169 }, - -1, - } }, - /* replace1318_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 3695, 141 }, - -1, - } }, - - /* ('iadd(is_used_once)', ('iadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c') => ('iadd', ('iadd', 'a', 'c'), 'b') */ - /* search1319_0_0 -> 3653 in the cache */ - /* search1319_0_1 -> 3654 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 3653, 3654 }, - 0, - } }, - /* search1319_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 3697, 827 }, - 0, - } }, - - /* replace1319_0_0 -> 132 in the cache */ - /* replace1319_0_1 -> 135 in the cache */ - /* replace1319_0 -> 1052 in the cache */ - /* replace1319_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 1052, 133 }, - -1, - } }, - - /* ('~fmul', '#a', ('fmul', 'b(is_not_const)', '#c')) => ('fmul', ('fmul', 'a', 'c'), 'b') */ - /* search1320_0 -> 292 in the cache */ - /* search1320_1_0 -> 3654 in the cache */ - /* search1320_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 3654, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fmul, - 0, 2, - { 292, 3700 }, - -1, - } }, - - /* replace1320_0_0 -> 132 in the cache */ - /* replace1320_0_1 -> 135 in the cache */ - /* replace1320_0 -> 3657 in the cache */ - /* replace1320_1 -> 133 in the cache */ - /* replace1320 -> 3658 in the cache */ - - /* ('~fmulz', '#a', ('fmulz', 'b(is_not_const)', '#c')) => ('fmulz', ('fmulz', 'a', 'c'), 'b') */ - /* search1321_0 -> 296 in the cache */ - /* search1321_1_0 -> 348 in the cache */ - /* search1321_1_1 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 348, 319 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmulz, - 0, 2, - { 296, 3702 }, - -1, - } }, - - /* replace1321_0_0 -> 16 in the cache */ - /* replace1321_0_1 -> 141 in the cache */ - /* replace1321_0 -> 3661 in the cache */ - /* replace1321_1 -> 36 in the cache */ - /* replace1321 -> 3662 in the cache */ - - /* ('~fmul', '#a(is_finite_not_zero)', ('fmulz', 'b(is_not_const)', '#c')) => ('fmulz', ('fmul', 'a', 'c'), 'b') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - true, - nir_type_invalid, - 3, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1322_1_0 -> 348 in the cache */ - /* search1322_1_1 -> 319 in the cache */ - /* search1322_1 -> 3702 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmul, - 0, 2, - { 3704, 3702 }, - -1, - } }, - - /* replace1322_0_0 -> 16 in the cache */ - /* replace1322_0_1 -> 141 in the cache */ - /* replace1322_0 -> 3665 in the cache */ - /* replace1322_1 -> 36 in the cache */ - /* replace1322 -> 3666 in the cache */ - - /* ('~ffma', '#a', ('fmul', 'b(is_not_const)', '#c'), 'd') => ('ffma', ('fmul', 'a', 'c'), 'b', 'd') */ - { .variable = { - { nir_search_value_variable, -4 }, - 0, /* a */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1323_1_0 -> 3671 in the cache */ - /* search1323_1_1 -> 3673 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 3671, 3673 }, - -1, - } }, - /* search1323_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 3706, 3707, 159 }, - -1, - } }, - - /* replace1323_0_0 -> 155 in the cache */ - /* replace1323_0_1 -> 158 in the cache */ - /* replace1323_0 -> 3675 in the cache */ - /* replace1323_1 -> 156 in the cache */ - /* replace1323_2 -> 159 in the cache */ - /* replace1323 -> 3676 in the cache */ - - /* ('~ffmaz', '#a', ('fmulz', 'b(is_not_const)', '#c'), 'd') => ('ffmaz', ('fmulz', 'a', 'c'), 'b', 'd') */ - /* search1324_0 -> 296 in the cache */ - /* search1324_1_0 -> 348 in the cache */ - /* search1324_1_1 -> 319 in the cache */ - /* search1324_1 -> 3702 in the cache */ - /* search1324_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 2, - { 296, 3702, 169 }, - -1, - } }, - - /* replace1324_0_0 -> 16 in the cache */ - /* replace1324_0_1 -> 141 in the cache */ - /* replace1324_0 -> 3661 in the cache */ - /* replace1324_1 -> 36 in the cache */ - /* replace1324_2 -> 169 in the cache */ - /* replace1324 -> 3678 in the cache */ - - /* ('~ffmaz', '#a(is_finite_not_zero)', ('fmulz', 'b(is_not_const)', '#c'), 'd') => ('ffmaz', ('fmul', 'a', 'c'), 'b', 'd') */ - /* search1325_0 -> 3704 in the cache */ - /* search1325_1_0 -> 348 in the cache */ - /* search1325_1_1 -> 319 in the cache */ - /* search1325_1 -> 3702 in the cache */ - /* search1325_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffmaz, - 0, 2, - { 3704, 3702, 169 }, - -1, - } }, - - /* replace1325_0_0 -> 16 in the cache */ - /* replace1325_0_1 -> 141 in the cache */ - /* replace1325_0 -> 3665 in the cache */ - /* replace1325_1 -> 36 in the cache */ - /* replace1325_2 -> 169 in the cache */ - /* replace1325 -> 3680 in the cache */ - - /* ('imul', '#a', ('imul', 'b(is_not_const)', '#c')) => ('imul', ('imul', 'a', 'c'), 'b') */ - /* search1326_0 -> 292 in the cache */ - /* search1326_1_0 -> 3654 in the cache */ - /* search1326_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 3654, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 292, 3711 }, - -1, - } }, - - /* replace1326_0_0 -> 132 in the cache */ - /* replace1326_0_1 -> 135 in the cache */ - /* replace1326_0 -> 1038 in the cache */ - /* replace1326_1 -> 133 in the cache */ - /* replace1326 -> 3669 in the cache */ - - /* ('~fadd', '#a', ('fadd', 'b(is_not_const)', '#c')) => ('fadd', ('fadd', 'a', 'c'), 'b') */ - /* search1327_0 -> 292 in the cache */ - /* search1327_1_0 -> 3654 in the cache */ - /* search1327_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 3654, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 292, 3713 }, - -1, - } }, - - /* replace1327_0_0 -> 132 in the cache */ - /* replace1327_0_1 -> 135 in the cache */ - /* replace1327_0 -> 3684 in the cache */ - /* replace1327_1 -> 133 in the cache */ - /* replace1327 -> 3685 in the cache */ - - /* ('~fadd', '#a', ('fneg', ('fadd', 'b(is_not_const)', '#c'))) => ('fadd', ('fadd', 'a', ('fneg', 'c')), ('fneg', 'b')) */ - /* search1328_0 -> 292 in the cache */ - /* search1328_1_0_0 -> 3654 in the cache */ - /* search1328_1_0_1 -> 827 in the cache */ - /* search1328_1_0 -> 3713 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 3713 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 292, 3715 }, - -1, - } }, - - /* replace1328_0_0 -> 132 in the cache */ - /* replace1328_0_1_0 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 132, 3717 }, - -1, - } }, - /* replace1328_1_0 -> 133 in the cache */ - /* replace1328_1 -> 1210 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 3718, 1210 }, - -1, - } }, - - /* ('~fadd', '#a', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d')) => ('ffma', 'b', 'c', ('fadd', 'a', 'd')) */ - /* search1329_0 -> 3706 in the cache */ - /* search1329_1_0 -> 3671 in the cache */ - /* search1329_1_1 -> 3688 in the cache */ - /* search1329_1_2 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 3671, 3688, 1044 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 3706, 3720 }, - -1, - } }, - - /* replace1329_0 -> 156 in the cache */ - /* replace1329_1 -> 158 in the cache */ - /* replace1329_2_0 -> 155 in the cache */ - /* replace1329_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 155, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 0, 2, - { 156, 158, 3722 }, - -1, - } }, - - /* ('~fadd', '#a', ('fneg', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d'))) => ('ffma', ('fneg', 'b'), 'c', ('fadd', 'a', ('fneg', 'd'))) */ - /* search1330_0 -> 3706 in the cache */ - /* search1330_1_0_0 -> 3671 in the cache */ - /* search1330_1_0_1 -> 3688 in the cache */ - /* search1330_1_0_2 -> 1044 in the cache */ - /* search1330_1_0 -> 3720 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 3720 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 3706, 3724 }, - -1, - } }, - - /* replace1330_0_0 -> 156 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 156 }, - -1, - } }, - /* replace1330_1 -> 158 in the cache */ - /* replace1330_2_0 -> 155 in the cache */ - /* replace1330_2_1_0 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 155, 3727 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ffma, - 0, 2, - { 3726, 158, 3728 }, - -1, - } }, - - /* ('~fadd', '#a', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d')) => ('ffmaz', 'b', 'c', ('fadd', 'a', 'd')) */ - /* search1331_0 -> 296 in the cache */ - /* search1331_1_0 -> 348 in the cache */ - /* search1331_1_1 -> 357 in the cache */ - /* search1331_1_2 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 348, 357, 321 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 296, 3730 }, - -1, - } }, - - /* replace1331_0 -> 36 in the cache */ - /* replace1331_1 -> 141 in the cache */ - /* replace1331_2_0 -> 16 in the cache */ - /* replace1331_2_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 16, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 2, - { 36, 141, 3732 }, - -1, - } }, - - /* ('~fadd', '#a', ('fneg', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d'))) => ('ffmaz', ('fneg', 'b'), 'c', ('fadd', 'a', ('fneg', 'd'))) */ - /* search1332_0 -> 296 in the cache */ - /* search1332_1_0_0 -> 348 in the cache */ - /* search1332_1_0_1 -> 357 in the cache */ - /* search1332_1_0_2 -> 321 in the cache */ - /* search1332_1_0 -> 3730 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 3730 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 296, 3734 }, - -1, - } }, - - /* replace1332_0_0 -> 36 in the cache */ - /* replace1332_0 -> 610 in the cache */ - /* replace1332_1 -> 141 in the cache */ - /* replace1332_2_0 -> 16 in the cache */ - /* replace1332_2_1_0 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 16, 3736 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 2, - { 610, 141, 3737 }, - -1, - } }, - - /* ('iadd', '#a', ('iadd', 'b(is_not_const)', '#c')) => ('iadd', ('iadd', 'a', 'c'), 'b') */ - /* search1333_0 -> 292 in the cache */ - /* search1333_1_0 -> 3654 in the cache */ - /* search1333_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 3654, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 292, 3739 }, - -1, - } }, - - /* replace1333_0_0 -> 132 in the cache */ - /* replace1333_0_1 -> 135 in the cache */ - /* replace1333_0 -> 1052 in the cache */ - /* replace1333_1 -> 133 in the cache */ - /* replace1333 -> 3699 in the cache */ - - /* ('iand', '#a', ('iand', 'b(is_not_const)', '#c')) => ('iand', ('iand', 'a', 'c'), 'b') */ - /* search1334_0 -> 292 in the cache */ - /* search1334_1_0 -> 3654 in the cache */ - /* search1334_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 3654, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 292, 3741 }, - -1, - } }, - - /* replace1334_0_0 -> 132 in the cache */ - /* replace1334_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 132, 135 }, - -1, - } }, - /* replace1334_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 3743, 133 }, - -1, - } }, - - /* ('ior', '#a', ('ior', 'b(is_not_const)', '#c')) => ('ior', ('ior', 'a', 'c'), 'b') */ - /* search1335_0 -> 292 in the cache */ - /* search1335_1_0 -> 3654 in the cache */ - /* search1335_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 3654, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 292, 3745 }, - -1, - } }, - - /* replace1335_0_0 -> 132 in the cache */ - /* replace1335_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 132, 135 }, - -1, - } }, - /* replace1335_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 3747, 133 }, - -1, - } }, - - /* ('ixor', '#a', ('ixor', 'b(is_not_const)', '#c')) => ('ixor', ('ixor', 'a', 'c'), 'b') */ - /* search1336_0 -> 292 in the cache */ - /* search1336_1_0 -> 3654 in the cache */ - /* search1336_1_1 -> 827 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 3654, 827 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 0, 2, - { 292, 3749 }, - -1, - } }, - - /* replace1336_0_0 -> 132 in the cache */ - /* replace1336_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 132, 135 }, - -1, - } }, - /* replace1336_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ixor, - 0, 2, - { 3751, 133 }, - -1, - } }, - - /* ('~fadd', ('fadd(is_used_once)', 'a(is_fmul)', 'b(is_fmul)'), 'c(is_not_fmul)') => ('fadd', ('fadd', 'a', 'c'), 'b') */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - 33, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1337_0_1 -> 3681 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 3753, 3681 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - false, - nir_type_invalid, - 8, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 3754, 3755 }, - -1, - } }, - - /* replace1337_0_0 -> 132 in the cache */ - /* replace1337_0_1 -> 135 in the cache */ - /* replace1337_0 -> 3684 in the cache */ - /* replace1337_1 -> 133 in the cache */ - /* replace1337 -> 3685 in the cache */ - - /* ('idiv', ('imul(no_signed_wrap)', 'a', 'b'), 'b') => a */ - /* search1338_0_0 -> 0 in the cache */ - /* search1338_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 0, 3 }, - 4, - } }, - /* search1338_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_idiv, - -1, 1, - { 3757, 3 }, - -1, - } }, - - /* replace1338 -> 0 in the cache */ - - /* ('bcsel', ('ige', ('find_lsb', 'a'), 0), ('find_lsb', 'a'), -1) => ('find_lsb', 'a') */ - /* search1339_0_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 32 }, - -1, - } }, - /* search1339_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3759, 128 }, - -1, - } }, - /* search1339_1_0 -> 32 in the cache */ - /* search1339_1 -> 3759 in the cache */ - /* search1339_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3760, 3759, 130 }, - -1, - } }, - - /* replace1339_0 -> 32 in the cache */ - /* replace1339 -> 3759 in the cache */ - - /* ('bcsel', ('ige', ('ifind_msb', 'a'), 0), ('ifind_msb', 'a'), -1) => ('ifind_msb', 'a') */ - /* search1340_0_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ifind_msb, - -1, 0, - { 16 }, - -1, - } }, - /* search1340_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3762, 128 }, - -1, - } }, - /* search1340_1_0 -> 16 in the cache */ - /* search1340_1 -> 3762 in the cache */ - /* search1340_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3763, 3762, 130 }, - -1, - } }, - - /* replace1340_0 -> 16 in the cache */ - /* replace1340 -> 3762 in the cache */ - - /* ('bcsel', ('ige', ('ufind_msb', 'a'), 0), ('ufind_msb', 'a'), -1) => ('ufind_msb', 'a') */ - /* search1341_0_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 0, - { 32 }, - -1, - } }, - /* search1341_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3765, 128 }, - -1, - } }, - /* search1341_1_0 -> 32 in the cache */ - /* search1341_1 -> 3765 in the cache */ - /* search1341_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3766, 3765, 130 }, - -1, - } }, - - /* replace1341_0 -> 32 in the cache */ - /* replace1341 -> 3765 in the cache */ - - /* ('bcsel', ('ige', ('ifind_msb_rev', 'a'), 0), ('ifind_msb_rev', 'a'), -1) => ('ifind_msb_rev', 'a') */ - /* search1342_0_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ifind_msb_rev, - -1, 0, - { 16 }, - -1, - } }, - /* search1342_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3768, 128 }, - -1, - } }, - /* search1342_1_0 -> 16 in the cache */ - /* search1342_1 -> 3768 in the cache */ - /* search1342_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3769, 3768, 130 }, - -1, - } }, - - /* replace1342_0 -> 16 in the cache */ - /* replace1342 -> 3768 in the cache */ - - /* ('bcsel', ('ige', ('ufind_msb_rev', 'a'), 0), ('ufind_msb_rev', 'a'), -1) => ('ufind_msb_rev', 'a') */ - /* search1343_0_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb_rev, - -1, 0, - { 32 }, - -1, - } }, - /* search1343_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3771, 128 }, - -1, - } }, - /* search1343_1_0 -> 32 in the cache */ - /* search1343_1 -> 3771 in the cache */ - /* search1343_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3772, 3771, 130 }, - -1, - } }, - - /* replace1343_0 -> 32 in the cache */ - /* replace1343 -> 3771 in the cache */ - - /* ('bcsel', ('ine', 'a', 0), ('find_lsb', 'a'), -1) => ('find_lsb', 'a') */ - /* search1344_0_0 -> 32 in the cache */ - /* search1344_0_1 -> 61 in the cache */ - /* search1344_0 -> 1123 in the cache */ - /* search1344_1_0 -> 32 in the cache */ - /* search1344_1 -> 3759 in the cache */ - /* search1344_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 1123, 3759, 130 }, - -1, - } }, - - /* replace1344_0 -> 32 in the cache */ - /* replace1344 -> 3759 in the cache */ - - /* ('bcsel', ('ine', 'a', 0), ('ifind_msb', 'a'), -1) => ('ifind_msb', 'a') */ - /* search1345_0_0 -> 16 in the cache */ - /* search1345_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 128 }, - -1, - } }, - /* search1345_1_0 -> 16 in the cache */ - /* search1345_1 -> 3762 in the cache */ - /* search1345_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 3775, 3762, 130 }, - -1, - } }, - - /* replace1345_0 -> 16 in the cache */ - /* replace1345 -> 3762 in the cache */ - - /* ('bcsel', ('ine', 'a', 0), ('ufind_msb', 'a'), -1) => ('ufind_msb', 'a') */ - /* search1346_0_0 -> 32 in the cache */ - /* search1346_0_1 -> 61 in the cache */ - /* search1346_0 -> 1123 in the cache */ - /* search1346_1_0 -> 32 in the cache */ - /* search1346_1 -> 3765 in the cache */ - /* search1346_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 1123, 3765, 130 }, - -1, - } }, - - /* replace1346_0 -> 32 in the cache */ - /* replace1346 -> 3765 in the cache */ - - /* ('bcsel', ('ine', 'a', 0), ('ifind_msb_rev', 'a'), -1) => ('ifind_msb_rev', 'a') */ - /* search1347_0_0 -> 16 in the cache */ - /* search1347_0_1 -> 128 in the cache */ - /* search1347_0 -> 3775 in the cache */ - /* search1347_1_0 -> 16 in the cache */ - /* search1347_1 -> 3768 in the cache */ - /* search1347_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 3775, 3768, 130 }, - -1, - } }, - - /* replace1347_0 -> 16 in the cache */ - /* replace1347 -> 3768 in the cache */ - - /* ('bcsel', ('ine', 'a', 0), ('ufind_msb_rev', 'a'), -1) => ('ufind_msb_rev', 'a') */ - /* search1348_0_0 -> 32 in the cache */ - /* search1348_0_1 -> 61 in the cache */ - /* search1348_0 -> 1123 in the cache */ - /* search1348_1_0 -> 32 in the cache */ - /* search1348_1 -> 3771 in the cache */ - /* search1348_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 1123, 3771, 130 }, - -1, - } }, - - /* replace1348_0 -> 32 in the cache */ - /* replace1348 -> 3771 in the cache */ - - /* ('bcsel', ('ine', 'a', -1), ('ifind_msb', 'a'), -1) => ('ifind_msb', 'a') */ - /* search1349_0_0 -> 16 in the cache */ - /* search1349_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 130 }, - -1, - } }, - /* search1349_1_0 -> 16 in the cache */ - /* search1349_1 -> 3762 in the cache */ - /* search1349_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 3780, 3762, 130 }, - -1, - } }, - - /* replace1349_0 -> 16 in the cache */ - /* replace1349 -> 3762 in the cache */ - - /* ('bcsel', ('ine', 'a', -1), ('ifind_msb_rev', 'a'), -1) => ('ifind_msb_rev', 'a') */ - /* search1350_0_0 -> 16 in the cache */ - /* search1350_0_1 -> 130 in the cache */ - /* search1350_0 -> 3780 in the cache */ - /* search1350_1_0 -> 16 in the cache */ - /* search1350_1 -> 3768 in the cache */ - /* search1350_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 3780, 3768, 130 }, - -1, - } }, - - /* replace1350_0 -> 16 in the cache */ - /* replace1350 -> 3768 in the cache */ - - /* ('bcsel', ('ine', ('ifind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb', 'a'))), -1) => ('ifind_msb_rev', 'a') */ - /* search1351_0_0_0 -> 16 in the cache */ - /* search1351_0_0 -> 3762 in the cache */ - /* search1351_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 3762, 130 }, - -1, - } }, - /* search1351_1_0 -> 19 in the cache */ - /* search1351_1_1_0_0 -> 16 in the cache */ - /* search1351_1_1_0 -> 3762 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3762 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 19, 3784 }, - -1, - } }, - /* search1351_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3783, 3785, 130 }, - -1, - } }, - - /* replace1351_0 -> 16 in the cache */ - /* replace1351 -> 3768 in the cache */ - - /* ('bcsel', ('ine', ('ufind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), -1) => ('ufind_msb_rev', 'a') */ - /* search1352_0_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 0, - { 16 }, - -1, - } }, - /* search1352_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 3787, 130 }, - -1, - } }, - /* search1352_1_0 -> 19 in the cache */ - /* search1352_1_1_0_0 -> 16 in the cache */ - /* search1352_1_1_0 -> 3787 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3787 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 19, 3789 }, - -1, - } }, - /* search1352_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3788, 3790, 130 }, - -1, - } }, - - /* replace1352_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb_rev, - -1, 0, - { 16 }, - -1, - } }, - - /* ('bcsel', ('ieq', ('ifind_msb', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ifind_msb', 'a')))) => ('ifind_msb_rev', 'a') */ - /* search1353_0_0_0 -> 16 in the cache */ - /* search1353_0_0 -> 3762 in the cache */ - /* search1353_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 3762, 130 }, - -1, - } }, - /* search1353_1 -> 130 in the cache */ - /* search1353_2_0 -> 19 in the cache */ - /* search1353_2_1_0_0 -> 16 in the cache */ - /* search1353_2_1_0 -> 3762 in the cache */ - /* search1353_2_1 -> 3784 in the cache */ - /* search1353_2 -> 3785 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3793, 130, 3785 }, - -1, - } }, - - /* replace1353_0 -> 16 in the cache */ - /* replace1353 -> 3768 in the cache */ - - /* ('bcsel', ('ieq', ('ufind_msb', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') */ - /* search1354_0_0_0 -> 16 in the cache */ - /* search1354_0_0 -> 3787 in the cache */ - /* search1354_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 3787, 130 }, - -1, - } }, - /* search1354_1 -> 130 in the cache */ - /* search1354_2_0 -> 19 in the cache */ - /* search1354_2_1_0_0 -> 16 in the cache */ - /* search1354_2_1_0 -> 3787 in the cache */ - /* search1354_2_1 -> 3789 in the cache */ - /* search1354_2 -> 3790 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3795, 130, 3790 }, - -1, - } }, - - /* replace1354_0 -> 16 in the cache */ - /* replace1354 -> 3792 in the cache */ - - /* ('bcsel', ('ine', ('ifind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb', 'a'))), ('ifind_msb', 'a')) => ('ifind_msb_rev', 'a') */ - /* search1355_0_0_0 -> 16 in the cache */ - /* search1355_0_0 -> 3762 in the cache */ - /* search1355_0_1 -> 130 in the cache */ - /* search1355_0 -> 3783 in the cache */ - /* search1355_1_0 -> 19 in the cache */ - /* search1355_1_1_0_0 -> 16 in the cache */ - /* search1355_1_1_0 -> 3762 in the cache */ - /* search1355_1_1 -> 3784 in the cache */ - /* search1355_1 -> 3785 in the cache */ - /* search1355_2_0 -> 16 in the cache */ - /* search1355_2 -> 3762 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3783, 3785, 3762 }, - -1, - } }, - - /* replace1355_0 -> 16 in the cache */ - /* replace1355 -> 3768 in the cache */ - - /* ('bcsel', ('ine', ('ufind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), ('ufind_msb', 'a')) => ('ufind_msb_rev', 'a') */ - /* search1356_0_0_0 -> 16 in the cache */ - /* search1356_0_0 -> 3787 in the cache */ - /* search1356_0_1 -> 130 in the cache */ - /* search1356_0 -> 3788 in the cache */ - /* search1356_1_0 -> 19 in the cache */ - /* search1356_1_1_0_0 -> 16 in the cache */ - /* search1356_1_1_0 -> 3787 in the cache */ - /* search1356_1_1 -> 3789 in the cache */ - /* search1356_1 -> 3790 in the cache */ - /* search1356_2_0 -> 16 in the cache */ - /* search1356_2 -> 3787 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3788, 3790, 3787 }, - -1, - } }, - - /* replace1356_0 -> 16 in the cache */ - /* replace1356 -> 3792 in the cache */ - - /* ('bcsel', ('ieq', ('ifind_msb', 'a@32'), -1), ('ifind_msb', 'a'), ('iadd', 31, ('ineg', ('ifind_msb', 'a')))) => ('ifind_msb_rev', 'a') */ - /* search1357_0_0_0 -> 16 in the cache */ - /* search1357_0_0 -> 3762 in the cache */ - /* search1357_0_1 -> 130 in the cache */ - /* search1357_0 -> 3793 in the cache */ - /* search1357_1_0 -> 16 in the cache */ - /* search1357_1 -> 3762 in the cache */ - /* search1357_2_0 -> 19 in the cache */ - /* search1357_2_1_0_0 -> 16 in the cache */ - /* search1357_2_1_0 -> 3762 in the cache */ - /* search1357_2_1 -> 3784 in the cache */ - /* search1357_2 -> 3785 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3793, 3762, 3785 }, - -1, - } }, - - /* replace1357_0 -> 16 in the cache */ - /* replace1357 -> 3768 in the cache */ - - /* ('bcsel', ('ieq', ('ufind_msb', 'a@32'), -1), ('ufind_msb', 'a'), ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') */ - /* search1358_0_0_0 -> 16 in the cache */ - /* search1358_0_0 -> 3787 in the cache */ - /* search1358_0_1 -> 130 in the cache */ - /* search1358_0 -> 3795 in the cache */ - /* search1358_1_0 -> 16 in the cache */ - /* search1358_1 -> 3787 in the cache */ - /* search1358_2_0 -> 19 in the cache */ - /* search1358_2_1_0_0 -> 16 in the cache */ - /* search1358_2_1_0 -> 3787 in the cache */ - /* search1358_2_1 -> 3789 in the cache */ - /* search1358_2 -> 3790 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3795, 3787, 3790 }, - -1, - } }, - - /* replace1358_0 -> 16 in the cache */ - /* replace1358 -> 3792 in the cache */ - - /* ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), -1) => ('ufind_msb_rev', 'a') */ - /* search1359_0_0 -> 16 in the cache */ - /* search1359_0_1 -> 128 in the cache */ - /* search1359_0 -> 3775 in the cache */ - /* search1359_1_0 -> 19 in the cache */ - /* search1359_1_1_0_0 -> 16 in the cache */ - /* search1359_1_1_0 -> 3787 in the cache */ - /* search1359_1_1 -> 3789 in the cache */ - /* search1359_1 -> 3790 in the cache */ - /* search1359_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3775, 3790, 130 }, - -1, - } }, - - /* replace1359_0 -> 16 in the cache */ - /* replace1359 -> 3792 in the cache */ - - /* ('bcsel', ('ieq', 'a@32', 0), -1, ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') */ - /* search1360_0_0 -> 16 in the cache */ - /* search1360_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 128 }, - -1, - } }, - /* search1360_1 -> 130 in the cache */ - /* search1360_2_0 -> 19 in the cache */ - /* search1360_2_1_0_0 -> 16 in the cache */ - /* search1360_2_1_0 -> 3787 in the cache */ - /* search1360_2_1 -> 3789 in the cache */ - /* search1360_2 -> 3790 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3802, 130, 3790 }, - -1, - } }, - - /* replace1360_0 -> 16 in the cache */ - /* replace1360 -> 3792 in the cache */ - - /* ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb', 'a'))), ('ufind_msb', 'a')) => ('ufind_msb_rev', 'a') */ - /* search1361_0_0 -> 16 in the cache */ - /* search1361_0_1 -> 128 in the cache */ - /* search1361_0 -> 3775 in the cache */ - /* search1361_1_0 -> 19 in the cache */ - /* search1361_1_1_0_0 -> 16 in the cache */ - /* search1361_1_1_0 -> 3787 in the cache */ - /* search1361_1_1 -> 3789 in the cache */ - /* search1361_1 -> 3790 in the cache */ - /* search1361_2_0 -> 16 in the cache */ - /* search1361_2 -> 3787 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3775, 3790, 3787 }, - -1, - } }, - - /* replace1361_0 -> 16 in the cache */ - /* replace1361 -> 3792 in the cache */ - - /* ('bcsel', ('ieq', 'a@32', 0), ('ufind_msb', 'a'), ('iadd', 31, ('ineg', ('ufind_msb', 'a')))) => ('ufind_msb_rev', 'a') */ - /* search1362_0_0 -> 16 in the cache */ - /* search1362_0_1 -> 128 in the cache */ - /* search1362_0 -> 3802 in the cache */ - /* search1362_1_0 -> 16 in the cache */ - /* search1362_1 -> 3787 in the cache */ - /* search1362_2_0 -> 19 in the cache */ - /* search1362_2_1_0_0 -> 16 in the cache */ - /* search1362_2_1_0 -> 3787 in the cache */ - /* search1362_2_1 -> 3789 in the cache */ - /* search1362_2 -> 3790 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3802, 3787, 3790 }, - -1, - } }, - - /* replace1362_0 -> 16 in the cache */ - /* replace1362 -> 3792 in the cache */ - - /* ('bcsel', ('ine', ('ifind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a'))), -1) => ('ifind_msb', 'a') */ - /* search1363_0_0_0 -> 16 in the cache */ - /* search1363_0_0 -> 3768 in the cache */ - /* search1363_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 3768, 130 }, - -1, - } }, - /* search1363_1_0 -> 19 in the cache */ - /* search1363_1_1_0_0 -> 16 in the cache */ - /* search1363_1_1_0 -> 3768 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3768 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 19, 3807 }, - -1, - } }, - /* search1363_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3806, 3808, 130 }, - -1, - } }, - - /* replace1363_0 -> 16 in the cache */ - /* replace1363 -> 3762 in the cache */ - - /* ('bcsel', ('ine', ('ufind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), -1) => ('ufind_msb', 'a') */ - /* search1364_0_0_0 -> 16 in the cache */ - /* search1364_0_0 -> 3792 in the cache */ - /* search1364_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 3792, 130 }, - -1, - } }, - /* search1364_1_0 -> 19 in the cache */ - /* search1364_1_1_0_0 -> 16 in the cache */ - /* search1364_1_1_0 -> 3792 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 3792 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 19, 3811 }, - -1, - } }, - /* search1364_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3810, 3812, 130 }, - -1, - } }, - - /* replace1364_0 -> 16 in the cache */ - /* replace1364 -> 3787 in the cache */ - - /* ('bcsel', ('ieq', ('ifind_msb_rev', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a')))) => ('ifind_msb', 'a') */ - /* search1365_0_0_0 -> 16 in the cache */ - /* search1365_0_0 -> 3768 in the cache */ - /* search1365_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 3768, 130 }, - -1, - } }, - /* search1365_1 -> 130 in the cache */ - /* search1365_2_0 -> 19 in the cache */ - /* search1365_2_1_0_0 -> 16 in the cache */ - /* search1365_2_1_0 -> 3768 in the cache */ - /* search1365_2_1 -> 3807 in the cache */ - /* search1365_2 -> 3808 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3814, 130, 3808 }, - -1, - } }, - - /* replace1365_0 -> 16 in the cache */ - /* replace1365 -> 3762 in the cache */ - - /* ('bcsel', ('ieq', ('ufind_msb_rev', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') */ - /* search1366_0_0_0 -> 16 in the cache */ - /* search1366_0_0 -> 3792 in the cache */ - /* search1366_0_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 3792, 130 }, - -1, - } }, - /* search1366_1 -> 130 in the cache */ - /* search1366_2_0 -> 19 in the cache */ - /* search1366_2_1_0_0 -> 16 in the cache */ - /* search1366_2_1_0 -> 3792 in the cache */ - /* search1366_2_1 -> 3811 in the cache */ - /* search1366_2 -> 3812 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3816, 130, 3812 }, - -1, - } }, - - /* replace1366_0 -> 16 in the cache */ - /* replace1366 -> 3787 in the cache */ - - /* ('bcsel', ('ine', ('ifind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a'))), ('ifind_msb_rev', 'a')) => ('ifind_msb', 'a') */ - /* search1367_0_0_0 -> 16 in the cache */ - /* search1367_0_0 -> 3768 in the cache */ - /* search1367_0_1 -> 130 in the cache */ - /* search1367_0 -> 3806 in the cache */ - /* search1367_1_0 -> 19 in the cache */ - /* search1367_1_1_0_0 -> 16 in the cache */ - /* search1367_1_1_0 -> 3768 in the cache */ - /* search1367_1_1 -> 3807 in the cache */ - /* search1367_1 -> 3808 in the cache */ - /* search1367_2_0 -> 16 in the cache */ - /* search1367_2 -> 3768 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3806, 3808, 3768 }, - -1, - } }, - - /* replace1367_0 -> 16 in the cache */ - /* replace1367 -> 3762 in the cache */ - - /* ('bcsel', ('ine', ('ufind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), ('ufind_msb_rev', 'a')) => ('ufind_msb', 'a') */ - /* search1368_0_0_0 -> 16 in the cache */ - /* search1368_0_0 -> 3792 in the cache */ - /* search1368_0_1 -> 130 in the cache */ - /* search1368_0 -> 3810 in the cache */ - /* search1368_1_0 -> 19 in the cache */ - /* search1368_1_1_0_0 -> 16 in the cache */ - /* search1368_1_1_0 -> 3792 in the cache */ - /* search1368_1_1 -> 3811 in the cache */ - /* search1368_1 -> 3812 in the cache */ - /* search1368_2_0 -> 16 in the cache */ - /* search1368_2 -> 3792 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3810, 3812, 3792 }, - -1, - } }, - - /* replace1368_0 -> 16 in the cache */ - /* replace1368 -> 3787 in the cache */ - - /* ('bcsel', ('ieq', ('ifind_msb_rev', 'a@32'), -1), ('ifind_msb_rev', 'a'), ('iadd', 31, ('ineg', ('ifind_msb_rev', 'a')))) => ('ifind_msb', 'a') */ - /* search1369_0_0_0 -> 16 in the cache */ - /* search1369_0_0 -> 3768 in the cache */ - /* search1369_0_1 -> 130 in the cache */ - /* search1369_0 -> 3814 in the cache */ - /* search1369_1_0 -> 16 in the cache */ - /* search1369_1 -> 3768 in the cache */ - /* search1369_2_0 -> 19 in the cache */ - /* search1369_2_1_0_0 -> 16 in the cache */ - /* search1369_2_1_0 -> 3768 in the cache */ - /* search1369_2_1 -> 3807 in the cache */ - /* search1369_2 -> 3808 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3814, 3768, 3808 }, - -1, - } }, - - /* replace1369_0 -> 16 in the cache */ - /* replace1369 -> 3762 in the cache */ - - /* ('bcsel', ('ieq', ('ufind_msb_rev', 'a@32'), -1), ('ufind_msb_rev', 'a'), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') */ - /* search1370_0_0_0 -> 16 in the cache */ - /* search1370_0_0 -> 3792 in the cache */ - /* search1370_0_1 -> 130 in the cache */ - /* search1370_0 -> 3816 in the cache */ - /* search1370_1_0 -> 16 in the cache */ - /* search1370_1 -> 3792 in the cache */ - /* search1370_2_0 -> 19 in the cache */ - /* search1370_2_1_0_0 -> 16 in the cache */ - /* search1370_2_1_0 -> 3792 in the cache */ - /* search1370_2_1 -> 3811 in the cache */ - /* search1370_2 -> 3812 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3816, 3792, 3812 }, - -1, - } }, - - /* replace1370_0 -> 16 in the cache */ - /* replace1370 -> 3787 in the cache */ - - /* ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), -1) => ('ufind_msb', 'a') */ - /* search1371_0_0 -> 16 in the cache */ - /* search1371_0_1 -> 128 in the cache */ - /* search1371_0 -> 3775 in the cache */ - /* search1371_1_0 -> 19 in the cache */ - /* search1371_1_1_0_0 -> 16 in the cache */ - /* search1371_1_1_0 -> 3792 in the cache */ - /* search1371_1_1 -> 3811 in the cache */ - /* search1371_1 -> 3812 in the cache */ - /* search1371_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3775, 3812, 130 }, - -1, - } }, - - /* replace1371_0 -> 16 in the cache */ - /* replace1371 -> 3787 in the cache */ - - /* ('bcsel', ('ieq', 'a@32', 0), -1, ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') */ - /* search1372_0_0 -> 16 in the cache */ - /* search1372_0_1 -> 128 in the cache */ - /* search1372_0 -> 3802 in the cache */ - /* search1372_1 -> 130 in the cache */ - /* search1372_2_0 -> 19 in the cache */ - /* search1372_2_1_0_0 -> 16 in the cache */ - /* search1372_2_1_0 -> 3792 in the cache */ - /* search1372_2_1 -> 3811 in the cache */ - /* search1372_2 -> 3812 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3802, 130, 3812 }, - -1, - } }, - - /* replace1372_0 -> 16 in the cache */ - /* replace1372 -> 3787 in the cache */ - - /* ('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a'))), ('ufind_msb_rev', 'a')) => ('ufind_msb', 'a') */ - /* search1373_0_0 -> 16 in the cache */ - /* search1373_0_1 -> 128 in the cache */ - /* search1373_0 -> 3775 in the cache */ - /* search1373_1_0 -> 19 in the cache */ - /* search1373_1_1_0_0 -> 16 in the cache */ - /* search1373_1_1_0 -> 3792 in the cache */ - /* search1373_1_1 -> 3811 in the cache */ - /* search1373_1 -> 3812 in the cache */ - /* search1373_2_0 -> 16 in the cache */ - /* search1373_2 -> 3792 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3775, 3812, 3792 }, - -1, - } }, - - /* replace1373_0 -> 16 in the cache */ - /* replace1373 -> 3787 in the cache */ - - /* ('bcsel', ('ieq', 'a@32', 0), ('ufind_msb_rev', 'a'), ('iadd', 31, ('ineg', ('ufind_msb_rev', 'a')))) => ('ufind_msb', 'a') */ - /* search1374_0_0 -> 16 in the cache */ - /* search1374_0_1 -> 128 in the cache */ - /* search1374_0 -> 3802 in the cache */ - /* search1374_1_0 -> 16 in the cache */ - /* search1374_1 -> 3792 in the cache */ - /* search1374_2_0 -> 19 in the cache */ - /* search1374_2_1_0_0 -> 16 in the cache */ - /* search1374_2_1_0 -> 3792 in the cache */ - /* search1374_2_1 -> 3811 in the cache */ - /* search1374_2 -> 3812 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3802, 3792, 3812 }, - -1, - } }, - - /* replace1374_0 -> 16 in the cache */ - /* replace1374 -> 3787 in the cache */ - - /* ('find_lsb', ('bitfield_reverse', 'a')) => ('ufind_msb_rev', 'a') */ - /* search1375_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bitfield_reverse, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 3826 }, - -1, - } }, - - /* replace1375_0 -> 16 in the cache */ - /* replace1375 -> 3792 in the cache */ - - /* ('ufind_msb_rev', ('bitfield_reverse', 'a')) => ('find_lsb', 'a') */ - /* search1376_0_0 -> 16 in the cache */ - /* search1376_0 -> 3826 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb_rev, - -1, 0, - { 3826 }, - -1, - } }, - - /* replace1376_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 16 }, - -1, - } }, - - /* ('ifind_msb', ('f2i32(is_used_once)', 'a')) => ('ufind_msb', ('f2i32', ('fabs', 'a'))) */ - /* search1377_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 32 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ifind_msb, - -1, 0, - { 3830 }, - -1, - } }, - - /* replace1377_0_0_0 -> 32 in the cache */ - /* replace1377_0_0 -> 99 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 0, - { 99 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 0, - { 3832 }, - -1, - } }, - - /* ('~fmul', ('bcsel(is_used_once)', 'c', -1.0, 1.0), 'b') => ('bcsel', 'c', ('fneg', 'b'), 'b') */ - /* search1378_0_0 -> 531 in the cache */ - /* search1378_0_1 -> 285 in the cache */ - /* search1378_0_2 -> 280 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 285, 280 }, - 0, - } }, - /* search1378_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fmul, - 0, 1, - { 3834, 3 }, - -1, - } }, - - /* replace1378_0 -> 531 in the cache */ - /* replace1378_1_0 -> 3 in the cache */ - /* replace1378_1 -> 1100 in the cache */ - /* replace1378_2 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 1100, 3 }, - -1, - } }, - - /* ('~fmul', ('bcsel(is_used_once)', 'c', 1.0, -1.0), 'b') => ('bcsel', 'c', 'b', ('fneg', 'b')) */ - /* search1379_0_0 -> 531 in the cache */ - /* search1379_0_1 -> 280 in the cache */ - /* search1379_0_2 -> 285 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 280, 285 }, - 0, - } }, - /* search1379_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fmul, - 0, 1, - { 3837, 3 }, - -1, - } }, - - /* replace1379_0 -> 531 in the cache */ - /* replace1379_1 -> 3 in the cache */ - /* replace1379_2_0 -> 3 in the cache */ - /* replace1379_2 -> 1100 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 3, 1100 }, - -1, - } }, - - /* ('~fmulz', ('bcsel(is_used_once)', 'c', -1.0, 1.0), 'b') => ('bcsel', 'c', ('fneg', 'b'), 'b') */ - /* search1380_0_0 -> 531 in the cache */ - /* search1380_0_1 -> 288 in the cache */ - /* search1380_0_2 -> 254 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 288, 254 }, - 0, - } }, - /* search1380_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmulz, - 0, 1, - { 3840, 36 }, - -1, - } }, - - /* replace1380_0 -> 531 in the cache */ - /* replace1380_1_0 -> 36 in the cache */ - /* replace1380_1 -> 610 in the cache */ - /* replace1380_2 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 610, 36 }, - -1, - } }, - - /* ('~fmulz', ('bcsel(is_used_once)', 'c', 1.0, -1.0), 'b') => ('bcsel', 'c', 'b', ('fneg', 'b')) */ - /* search1381_0_0 -> 531 in the cache */ - /* search1381_0_1 -> 254 in the cache */ - /* search1381_0_2 -> 288 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 254, 288 }, - 0, - } }, - /* search1381_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmulz, - 0, 1, - { 3843, 36 }, - -1, - } }, - - /* replace1381_0 -> 531 in the cache */ - /* replace1381_1 -> 36 in the cache */ - /* replace1381_2_0 -> 36 in the cache */ - /* replace1381_2 -> 610 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 36, 610 }, - -1, - } }, - - /* ('fabs', ('bcsel(is_used_once)', 'b', ('fneg', 'a'), 'a')) => ('fabs', 'a') */ - { .variable = { - { nir_search_value_variable, 1 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1382_0_1_0 -> 1127 in the cache */ - /* search1382_0_1 -> 1592 in the cache */ - /* search1382_0_2 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3846, 1592, 1127 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 3847 }, - -1, - } }, - - /* replace1382_0 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 1127 }, - -1, - } }, - - /* ('fabs', ('bcsel(is_used_once)', 'b', 'a', ('fneg', 'a'))) => ('fabs', 'a') */ - /* search1383_0_0 -> 3846 in the cache */ - /* search1383_0_1 -> 1127 in the cache */ - /* search1383_0_2_0 -> 1127 in the cache */ - /* search1383_0_2 -> 1592 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3846, 1127, 1592 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 3850 }, - -1, - } }, - - /* replace1383_0 -> 1127 in the cache */ - /* replace1383 -> 3849 in the cache */ - - /* ('~bcsel', ('flt', 'a', 0.0), ('fneg', 'a'), 'a') => ('fabs', 'a') */ - /* search1384_0_0 -> 32 in the cache */ - /* search1384_0_1 -> 117 in the cache */ - /* search1384_0 -> 1185 in the cache */ - /* search1384_1_0 -> 32 in the cache */ - /* search1384_1 -> 107 in the cache */ - /* search1384_2 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_bcsel, - -1, 0, - { 1185, 107, 32 }, - -1, - } }, - - /* replace1384_0 -> 32 in the cache */ - /* replace1384 -> 99 in the cache */ - - /* ('bcsel', 'a', ('bcsel', 'b', 'c', 'd'), 'd') => ('bcsel', ('iand', 'a', 'b'), 'c', 'd') */ - /* search1385_0 -> 770 in the cache */ - /* search1385_1_0 -> 1147 in the cache */ - /* search1385_1_1 -> 158 in the cache */ - /* search1385_1_2 -> 159 in the cache */ - /* search1385_1 -> 1335 in the cache */ - /* search1385_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1335, 159 }, - -1, - } }, - - /* replace1385_0_0 -> 770 in the cache */ - /* replace1385_0_1 -> 1147 in the cache */ - /* replace1385_0 -> 1159 in the cache */ - /* replace1385_1 -> 158 in the cache */ - /* replace1385_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 1159, 158, 159 }, - -1, - } }, - - /* ('bcsel', 'a', 'b', ('bcsel', 'c', 'b', 'd')) => ('bcsel', ('ior', 'a', 'c'), 'b', 'd') */ - /* search1386_0 -> 770 in the cache */ - /* search1386_1 -> 156 in the cache */ - /* search1386_2_0 -> 474 in the cache */ - /* search1386_2_1 -> 156 in the cache */ - /* search1386_2_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 474, 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 156, 3855 }, - -1, - } }, - - /* replace1386_0_0 -> 770 in the cache */ - /* replace1386_0_1 -> 474 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 770, 474 }, - -1, - } }, - /* replace1386_1 -> 156 in the cache */ - /* replace1386_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 3857, 156, 159 }, - -1, - } }, - - /* ('fmod', 'a', 'b') => ('fsub', 'a', ('fmul', 'b', ('ffloor', ('fdiv', 'a', 'b')))) */ - /* search1387_0 -> 0 in the cache */ - /* search1387_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmod, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1387_0 -> 0 in the cache */ - /* replace1387_1_0 -> 3 in the cache */ - /* replace1387_1_1_0_0 -> 0 in the cache */ - /* replace1387_1_1_0_1 -> 3 in the cache */ - /* replace1387_1_1_0 -> 3047 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 3047 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 3, 3860 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsub, - -1, 1, - { 0, 3861 }, - -1, - } }, - - /* ('frem', 'a', 'b') => ('fsub', 'a', ('fmul', 'b', ('ftrunc', ('fdiv', 'a', 'b')))) */ - /* search1388_0 -> 0 in the cache */ - /* search1388_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_frem, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1388_0 -> 0 in the cache */ - /* replace1388_1_0 -> 3 in the cache */ - /* replace1388_1_1_0_0 -> 0 in the cache */ - /* replace1388_1_1_0_1 -> 3 in the cache */ - /* replace1388_1_1_0 -> 3047 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ftrunc, - -1, 0, - { 3047 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 3, 3864 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsub, - -1, 1, - { 0, 3865 }, - -1, - } }, - - /* ('uadd_carry', 'a', 'b') => ('b2i', ('ult', ('iadd', 'a', 'b'), 'a')) */ - /* search1389_0 -> 0 in the cache */ - /* search1389_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_uadd_carry, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace1389_0_0_0 -> 0 in the cache */ - /* replace1389_0_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 0, 3 }, - -1, - } }, - /* replace1389_0_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 3868, 0 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2i, - -1, 1, - { 3869 }, - -1, - } }, - - /* ('usub_borrow', 'a', 'b') => ('b2i', ('ult', 'a', 'b')) */ - /* search1390_0 -> 0 in the cache */ - /* search1390_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_usub_borrow, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1390_0_0 -> 0 in the cache */ - /* replace1390_0_1 -> 3 in the cache */ - /* replace1390_0 -> 1080 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_search_op_b2i, - -1, 0, - { 1080 }, - -1, - } }, - - /* ('bitfield_insert', 'base', 'insert', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'insert', ('bfi', ('bfm', 'bits', 'offset'), 'insert', 'base')) */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* base */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* insert */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* offset */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 3, /* bits */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bitfield_insert, - -1, 0, - { 3873, 3874, 3875, 3876 }, - -1, - } }, - - /* replace1391_0_0 -> 19 in the cache */ - /* replace1391_0_1 -> 3876 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 19, 3876 }, - -1, - } }, - /* replace1391_1 -> 3874 in the cache */ - /* replace1391_2_0_0 -> 3876 in the cache */ - /* replace1391_2_0_1 -> 3875 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 0, - { 3876, 3875 }, - -1, - } }, - /* replace1391_2_1 -> 3874 in the cache */ - /* replace1391_2_2 -> 3873 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfi, - -1, 0, - { 3879, 3874, 3873 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3878, 3874, 3880 }, - -1, - } }, - - /* ('ihadd', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) */ - /* search1392_0 -> 0 in the cache */ - /* search1392_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ihadd, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace1392_0_0 -> 0 in the cache */ - /* replace1392_0_1 -> 3 in the cache */ - /* replace1392_0 -> 207 in the cache */ - /* replace1392_1_0_0 -> 0 in the cache */ - /* replace1392_1_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ixor, - 2, 1, - { 0, 3 }, - -1, - } }, - /* replace1392_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 3883, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 207, 3884 }, - -1, - } }, - - /* ('uhadd', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) */ - /* search1393_0 -> 0 in the cache */ - /* search1393_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_uhadd, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace1393_0_0 -> 0 in the cache */ - /* replace1393_0_1 -> 3 in the cache */ - /* replace1393_0 -> 207 in the cache */ - /* replace1393_1_0_0 -> 0 in the cache */ - /* replace1393_1_0_1 -> 3 in the cache */ - /* replace1393_1_0 -> 3883 in the cache */ - /* replace1393_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 3883, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 207, 3887 }, - -1, - } }, - - /* ('irhadd', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) */ - /* search1394_0 -> 0 in the cache */ - /* search1394_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_irhadd, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace1394_0_0 -> 0 in the cache */ - /* replace1394_0_1 -> 3 in the cache */ - /* replace1394_0 -> 2506 in the cache */ - /* replace1394_1_0_0 -> 0 in the cache */ - /* replace1394_1_0_1 -> 3 in the cache */ - /* replace1394_1_0 -> 2879 in the cache */ - /* replace1394_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 2879, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_isub, - -1, 2, - { 2506, 3890 }, - -1, - } }, - - /* ('urhadd', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) */ - /* search1395_0 -> 0 in the cache */ - /* search1395_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_urhadd, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace1395_0_0 -> 0 in the cache */ - /* replace1395_0_1 -> 3 in the cache */ - /* replace1395_0 -> 2506 in the cache */ - /* replace1395_1_0_0 -> 0 in the cache */ - /* replace1395_1_0_1 -> 3 in the cache */ - /* replace1395_1_0 -> 2879 in the cache */ - /* replace1395_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 2879, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_isub, - -1, 2, - { 2506, 3893 }, - -1, - } }, - - /* ('ihadd@64', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) */ - /* search1396_0 -> 21 in the cache */ - /* search1396_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ihadd, - 0, 1, - { 21, 41 }, - -1, - } }, - - /* replace1396_0_0 -> 21 in the cache */ - /* replace1396_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 21, 41 }, - -1, - } }, - /* replace1396_1_0_0 -> 21 in the cache */ - /* replace1396_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ixor, - 2, 1, - { 21, 41 }, - -1, - } }, - /* replace1396_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 3897, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 3896, 3898 }, - -1, - } }, - - /* ('uhadd@64', 'a', 'b') => ('iadd', ('iand', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) */ - /* search1397_0 -> 21 in the cache */ - /* search1397_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_uhadd, - 0, 1, - { 21, 41 }, - -1, - } }, - - /* replace1397_0_0 -> 21 in the cache */ - /* replace1397_0_1 -> 41 in the cache */ - /* replace1397_0 -> 3896 in the cache */ - /* replace1397_1_0_0 -> 21 in the cache */ - /* replace1397_1_0_1 -> 41 in the cache */ - /* replace1397_1_0 -> 3897 in the cache */ - /* replace1397_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 3897, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 3896, 3901 }, - -1, - } }, - - /* ('irhadd@64', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ishr', ('ixor', 'a', 'b'), 1)) */ - /* search1398_0 -> 21 in the cache */ - /* search1398_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_irhadd, - 0, 1, - { 21, 41 }, - -1, - } }, - - /* replace1398_0_0 -> 21 in the cache */ - /* replace1398_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 21, 41 }, - -1, - } }, - /* replace1398_1_0_0 -> 21 in the cache */ - /* replace1398_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 21, 41 }, - -1, - } }, - /* replace1398_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 3905, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_isub, - -1, 2, - { 3904, 3906 }, - -1, - } }, - - /* ('urhadd@64', 'a', 'b') => ('isub', ('ior', 'a', 'b'), ('ushr', ('ixor', 'a', 'b'), 1)) */ - /* search1399_0 -> 21 in the cache */ - /* search1399_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_urhadd, - 0, 1, - { 21, 41 }, - -1, - } }, - - /* replace1399_0_0 -> 21 in the cache */ - /* replace1399_0_1 -> 41 in the cache */ - /* replace1399_0 -> 3904 in the cache */ - /* replace1399_1_0_0 -> 21 in the cache */ - /* replace1399_1_0_1 -> 41 in the cache */ - /* replace1399_1_0 -> 3905 in the cache */ - /* replace1399_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 3905, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_isub, - -1, 2, - { 3904, 3909 }, - -1, - } }, - - /* ('imul_32x16', 'a', 'b') => ('imul', 'a', ('extract_i16', 'b', 0)) */ - /* search1400_0 -> 16 in the cache */ - /* search1400_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul_32x16, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1400_0 -> 16 in the cache */ - /* replace1400_1_0 -> 36 in the cache */ - /* replace1400_1_1 -> 128 in the cache */ - /* replace1400_1 -> 447 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 16, 447 }, - -1, - } }, - - /* ('umul_32x16', 'a', 'b') => ('imul', 'a', ('extract_u16', 'b', 0)) */ - /* search1401_0 -> 16 in the cache */ - /* search1401_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul_32x16, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1401_0 -> 16 in the cache */ - /* replace1401_1_0 -> 36 in the cache */ - /* replace1401_1_1 -> 128 in the cache */ - /* replace1401_1 -> 455 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 16, 455 }, - -1, - } }, - - /* ('uadd_sat@64', 'a', 'b') => ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd', 'a', 'b')) */ - /* search1402_0 -> 21 in the cache */ - /* search1402_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 1, - { 21, 41 }, - -1, - } }, - - /* replace1402_0_0_0 -> 21 in the cache */ - /* replace1402_0_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 21, 41 }, - -1, - } }, - /* replace1402_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 3916, 21 }, - -1, - } }, - /* replace1402_1 -> 1512 in the cache */ - /* replace1402_2_0 -> 21 in the cache */ - /* replace1402_2_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 21, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3917, 1512, 3918 }, - -1, - } }, - - /* ('uadd_sat', 'a', 'b') => ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd', 'a', 'b')) */ - /* search1403_0 -> 0 in the cache */ - /* search1403_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace1403_0_0_0 -> 0 in the cache */ - /* replace1403_0_0_1 -> 3 in the cache */ - /* replace1403_0_0 -> 3868 in the cache */ - /* replace1403_0_1 -> 0 in the cache */ - /* replace1403_0 -> 3869 in the cache */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - /* replace1403_2_0 -> 0 in the cache */ - /* replace1403_2_1 -> 3 in the cache */ - /* replace1403_2 -> 219 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3869, 3921, 219 }, - -1, - } }, - - /* ('usub_sat', 'a', 'b') => ('bcsel', ('ult', 'a', 'b'), 0, ('isub', 'a', 'b')) */ - /* search1404_0 -> 0 in the cache */ - /* search1404_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_usub_sat, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* replace1404_0_0 -> 0 in the cache */ - /* replace1404_0_1 -> 3 in the cache */ - /* replace1404_0 -> 1080 in the cache */ - /* replace1404_1 -> 86 in the cache */ - /* replace1404_2_0 -> 0 in the cache */ - /* replace1404_2_1 -> 3 in the cache */ - /* replace1404_2 -> 3636 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1080, 86, 3636 }, - -1, - } }, - - /* ('usub_sat@64', 'a', 'b') => ('bcsel', ('ult', 'a', 'b'), 0, ('isub', 'a', 'b')) */ - /* search1405_0 -> 21 in the cache */ - /* search1405_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_usub_sat, - -1, 0, - { 21, 41 }, - -1, - } }, - - /* replace1405_0_0 -> 21 in the cache */ - /* replace1405_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 21, 41 }, - -1, - } }, - /* replace1405_1 -> 910 in the cache */ - /* replace1405_2_0 -> 21 in the cache */ - /* replace1405_2_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 21, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3926, 910, 3927 }, - -1, - } }, - - /* ('iadd_sat@64', 'a', 'b') => ('bcsel', ('iand', ('iand', ('ilt', 'a', 0), ('ilt', 'b', 0)), ('ige', ('iadd', 'a', 'b'), 0)), 9223372036854775808, ('bcsel', ('ior', ('ior', ('ilt', 'a', 0), ('ilt', 'b', 0)), ('ige', ('iadd', 'a', 'b'), 0)), ('iadd', 'a', 'b'), 9223372036854775807)) */ - /* search1406_0 -> 21 in the cache */ - /* search1406_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 1, - { 21, 41 }, - -1, - } }, - - /* replace1406_0_0_0_0 -> 21 in the cache */ - /* replace1406_0_0_0_1 -> 910 in the cache */ - /* replace1406_0_0_0 -> 1502 in the cache */ - /* replace1406_0_0_1_0 -> 41 in the cache */ - /* replace1406_0_0_1_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 41, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 1502, 3930 }, - -1, - } }, - /* replace1406_0_1_0_0 -> 21 in the cache */ - /* replace1406_0_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 2, 1, - { 21, 41 }, - -1, - } }, - /* replace1406_0_1_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 3932, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 3931, 3933 }, - -1, - } }, - /* replace1406_1 -> 22 in the cache */ - /* replace1406_2_0_0_0_0 -> 21 in the cache */ - /* replace1406_2_0_0_0_1 -> 910 in the cache */ - /* replace1406_2_0_0_0 -> 1502 in the cache */ - /* replace1406_2_0_0_1_0 -> 41 in the cache */ - /* replace1406_2_0_0_1_1 -> 910 in the cache */ - /* replace1406_2_0_0_1 -> 3930 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 4, 1, - { 1502, 3930 }, - -1, - } }, - /* replace1406_2_0_1_0_0 -> 21 in the cache */ - /* replace1406_2_0_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 5, 1, - { 21, 41 }, - -1, - } }, - /* replace1406_2_0_1_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 3936, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 3, 3, - { 3935, 3937 }, - -1, - } }, - /* replace1406_2_1_0 -> 21 in the cache */ - /* replace1406_2_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 6, 1, - { 21, 41 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x7fffffffffffffff /* 9223372036854775807 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 3938, 3939, 3940 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 7, - { 3934, 22, 3941 }, - -1, - } }, - - /* ('isub_sat@64', 'a', 'b') => ('bcsel', ('iand', ('iand', ('ilt', 'a', 0), ('ige', 'b', 0)), ('ige', ('isub', 'a', 'b'), 0)), 9223372036854775808, ('bcsel', ('ior', ('ior', ('ilt', 'a', 0), ('ige', 'b', 0)), ('ige', ('isub', 'a', 'b'), 0)), ('isub', 'a', 'b'), 9223372036854775807)) */ - /* search1407_0 -> 21 in the cache */ - /* search1407_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_isub_sat, - -1, 0, - { 21, 41 }, - -1, - } }, - - /* replace1407_0_0_0_0 -> 21 in the cache */ - /* replace1407_0_0_0_1 -> 910 in the cache */ - /* replace1407_0_0_0 -> 1502 in the cache */ - /* replace1407_0_0_1_0 -> 41 in the cache */ - /* replace1407_0_0_1_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 41, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 1502, 3944 }, - -1, - } }, - /* replace1407_0_1_0_0 -> 21 in the cache */ - /* replace1407_0_1_0_1 -> 41 in the cache */ - /* replace1407_0_1_0 -> 3927 in the cache */ - /* replace1407_0_1_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 3927, 910 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 3945, 3946 }, - -1, - } }, - /* replace1407_1 -> 22 in the cache */ - /* replace1407_2_0_0_0_0 -> 21 in the cache */ - /* replace1407_2_0_0_0_1 -> 910 in the cache */ - /* replace1407_2_0_0_0 -> 1502 in the cache */ - /* replace1407_2_0_0_1_0 -> 41 in the cache */ - /* replace1407_2_0_0_1_1 -> 910 in the cache */ - /* replace1407_2_0_0_1 -> 3944 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 3, 1, - { 1502, 3944 }, - -1, - } }, - /* replace1407_2_0_1_0_0 -> 21 in the cache */ - /* replace1407_2_0_1_0_1 -> 41 in the cache */ - /* replace1407_2_0_1_0 -> 3927 in the cache */ - /* replace1407_2_0_1_1 -> 910 in the cache */ - /* replace1407_2_0_1 -> 3946 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 2, 2, - { 3948, 3946 }, - -1, - } }, - /* replace1407_2_1_0 -> 21 in the cache */ - /* replace1407_2_1_1 -> 41 in the cache */ - /* replace1407_2_1 -> 3927 in the cache */ - /* replace1407_2_2 -> 3940 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 3949, 3927, 3940 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 3947, 22, 3950 }, - -1, - } }, - - /* ('ilt', ('imax(is_used_once)', 'a@64', 'b@64'), 0) => ('ilt', ('imax', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) */ - /* search1408_0_0 -> 21 in the cache */ - /* search1408_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 21, 41 }, - 0, - } }, - /* search1408_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 3952, 910 }, - -1, - } }, - - /* replace1408_0_0_0 -> 21 in the cache */ - /* replace1408_0_0 -> 2894 in the cache */ - /* replace1408_0_1_0 -> 41 in the cache */ - /* replace1408_0_1 -> 2895 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 2894, 2895 }, - -1, - } }, - /* replace1408_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 3954, 128 }, - -1, - } }, - - /* ('ilt', ('imin(is_used_once)', 'a@64', 'b@64'), 0) => ('ilt', ('imin', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) */ - /* search1409_0_0 -> 21 in the cache */ - /* search1409_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 21, 41 }, - 0, - } }, - /* search1409_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 3956, 910 }, - -1, - } }, - - /* replace1409_0_0_0 -> 21 in the cache */ - /* replace1409_0_0 -> 2894 in the cache */ - /* replace1409_0_1_0 -> 41 in the cache */ - /* replace1409_0_1 -> 2895 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 2894, 2895 }, - -1, - } }, - /* replace1409_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 3958, 128 }, - -1, - } }, - - /* ('ige', ('imax(is_used_once)', 'a@64', 'b@64'), 0) => ('ige', ('imax', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) */ - /* search1410_0_0 -> 21 in the cache */ - /* search1410_0_1 -> 41 in the cache */ - /* search1410_0 -> 3952 in the cache */ - /* search1410_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 3952, 910 }, - -1, - } }, - - /* replace1410_0_0_0 -> 21 in the cache */ - /* replace1410_0_0 -> 2894 in the cache */ - /* replace1410_0_1_0 -> 41 in the cache */ - /* replace1410_0_1 -> 2895 in the cache */ - /* replace1410_0 -> 3954 in the cache */ - /* replace1410_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 3954, 128 }, - -1, - } }, - - /* ('ige', ('imin(is_used_once)', 'a@64', 'b@64'), 0) => ('ige', ('imin', ('unpack_64_2x32_split_y', 'a'), ('unpack_64_2x32_split_y', 'b')), 0) */ - /* search1411_0_0 -> 21 in the cache */ - /* search1411_0_1 -> 41 in the cache */ - /* search1411_0 -> 3956 in the cache */ - /* search1411_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 3956, 910 }, - -1, - } }, - - /* replace1411_0_0_0 -> 21 in the cache */ - /* replace1411_0_0 -> 2894 in the cache */ - /* replace1411_0_1_0 -> 41 in the cache */ - /* replace1411_0_1 -> 2895 in the cache */ - /* replace1411_0 -> 3958 in the cache */ - /* replace1411_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 1, - { 3958, 128 }, - -1, - } }, - - /* ('ilt', 'a@64', 0) => ('ilt', ('unpack_64_2x32_split_y', 'a'), 0) */ - /* search1412_0 -> 21 in the cache */ - /* search1412_1 -> 910 in the cache */ - /* search1412 -> 1502 in the cache */ - - /* replace1412_0_0 -> 21 in the cache */ - /* replace1412_0 -> 2894 in the cache */ - /* replace1412_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2894, 128 }, - -1, - } }, - - /* ('ige', 'a@64', 0) => ('ige', ('unpack_64_2x32_split_y', 'a'), 0) */ - /* search1413_0 -> 21 in the cache */ - /* search1413_1 -> 910 in the cache */ - /* search1413 -> 1499 in the cache */ - - /* replace1413_0_0 -> 21 in the cache */ - /* replace1413_0 -> 2894 in the cache */ - /* replace1413_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2894, 128 }, - -1, - } }, - - /* ('ine', 'a@64', 0) => ('ine', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')), 0) */ - /* search1414_0 -> 21 in the cache */ - /* search1414_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 21, 910 }, - -1, - } }, - - /* replace1414_0_0_0 -> 21 in the cache */ - /* replace1414_0_0 -> 2900 in the cache */ - /* replace1414_0_1_0 -> 21 in the cache */ - /* replace1414_0_1 -> 2894 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 2900, 2894 }, - -1, - } }, - /* replace1414_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 3967, 128 }, - -1, - } }, - - /* ('ieq', 'a@64', 0) => ('ieq', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')), 0) */ - /* search1415_0 -> 21 in the cache */ - /* search1415_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 21, 910 }, - -1, - } }, - - /* replace1415_0_0_0 -> 21 in the cache */ - /* replace1415_0_0 -> 2900 in the cache */ - /* replace1415_0_1_0 -> 21 in the cache */ - /* replace1415_0_1 -> 2894 in the cache */ - /* replace1415_0 -> 3967 in the cache */ - /* replace1415_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 3967, 128 }, - -1, - } }, - - /* ('ult', 0, 'a@64') => ('ine', ('ior', ('unpack_64_2x32_split_x', 'a'), ('unpack_64_2x32_split_y', 'a')), 0) */ - /* search1416_0 -> 910 in the cache */ - /* search1416_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 910, 21 }, - -1, - } }, - - /* replace1416_0_0_0 -> 21 in the cache */ - /* replace1416_0_0 -> 2900 in the cache */ - /* replace1416_0_1_0 -> 21 in the cache */ - /* replace1416_0_1 -> 2894 in the cache */ - /* replace1416_0 -> 3967 in the cache */ - /* replace1416_1 -> 128 in the cache */ - /* replace1416 -> 3968 in the cache */ - - /* ('bitfield_insert', 'base', 'insert', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'insert', ('ior', ('iand', 'base', ('inot', ('ishl', ('isub', ('ishl', 1, 'bits'), 1), 'offset'))), ('iand', ('ishl', 'insert', 'offset'), ('ishl', ('isub', ('ishl', 1, 'bits'), 1), 'offset')))) */ - /* search1417_0 -> 3873 in the cache */ - /* search1417_1 -> 3874 in the cache */ - /* search1417_2 -> 3875 in the cache */ - /* search1417_3 -> 3876 in the cache */ - /* search1417 -> 3877 in the cache */ - - /* replace1417_0_0 -> 19 in the cache */ - /* replace1417_0_1 -> 3876 in the cache */ - /* replace1417_0 -> 3878 in the cache */ - /* replace1417_1 -> 3874 in the cache */ - /* replace1417_2_0_0 -> 3873 in the cache */ - /* replace1417_2_0_1_0_0_0_0 -> 406 in the cache */ - /* replace1417_2_0_1_0_0_0_1 -> 3876 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 406, 3876 }, - -1, - } }, - /* replace1417_2_0_1_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 3972, 406 }, - -1, - } }, - /* replace1417_2_0_1_0_1 -> 3875 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3973, 3875 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 3974 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 3873, 3975 }, - -1, - } }, - /* replace1417_2_1_0_0 -> 3874 in the cache */ - /* replace1417_2_1_0_1 -> 3875 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3874, 3875 }, - -1, - } }, - /* replace1417_2_1_1_0_0_0 -> 406 in the cache */ - /* replace1417_2_1_1_0_0_1 -> 3876 in the cache */ - /* replace1417_2_1_1_0_0 -> 3972 in the cache */ - /* replace1417_2_1_1_0_1 -> 406 in the cache */ - /* replace1417_2_1_1_0 -> 3973 in the cache */ - /* replace1417_2_1_1_1 -> 3875 in the cache */ - /* replace1417_2_1_1 -> 3974 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 3977, 3974 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 3976, 3978 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 3878, 3874, 3979 }, - -1, - } }, - - /* ('bitfield_insert', 'base', 'insert', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'insert', ('bitfield_select', ('bfm', 'bits', 'offset'), ('ishl', 'insert', 'offset'), 'base')) */ - /* search1418_0 -> 3873 in the cache */ - /* search1418_1 -> 3874 in the cache */ - /* search1418_2 -> 3875 in the cache */ - /* search1418_3 -> 3876 in the cache */ - /* search1418 -> 3877 in the cache */ - - /* replace1418_0_0 -> 19 in the cache */ - /* replace1418_0_1 -> 3876 in the cache */ - /* replace1418_0 -> 3878 in the cache */ - /* replace1418_1 -> 3874 in the cache */ - /* replace1418_2_0_0 -> 3876 in the cache */ - /* replace1418_2_0_1 -> 3875 in the cache */ - /* replace1418_2_0 -> 3879 in the cache */ - /* replace1418_2_1_0 -> 3874 in the cache */ - /* replace1418_2_1_1 -> 3875 in the cache */ - /* replace1418_2_1 -> 3977 in the cache */ - /* replace1418_2_2 -> 3873 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bitfield_select, - -1, 0, - { 3879, 3977, 3873 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3878, 3874, 3981 }, - -1, - } }, - - /* ('ibitfield_extract', 'value', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'value', ('ibfe', 'value', 'offset', 'bits')) */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* value */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* offset */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* bits */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibitfield_extract, - -1, 0, - { 3983, 3984, 3985 }, - -1, - } }, - - /* replace1419_0_0 -> 19 in the cache */ - /* replace1419_0_1 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 19, 3985 }, - -1, - } }, - /* replace1419_1 -> 3983 in the cache */ - /* replace1419_2_0 -> 3983 in the cache */ - /* replace1419_2_1 -> 3984 in the cache */ - /* replace1419_2_2 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 3983, 3984, 3985 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3987, 3983, 3988 }, - -1, - } }, - - /* ('ubitfield_extract', 'value', 'offset', 'bits') => ('bcsel', ('ult', 31, 'bits'), 'value', ('ubfe', 'value', 'offset', 'bits')) */ - /* search1420_0 -> 3983 in the cache */ - /* search1420_1 -> 3984 in the cache */ - /* search1420_2 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubitfield_extract, - -1, 0, - { 3983, 3984, 3985 }, - -1, - } }, - - /* replace1420_0_0 -> 19 in the cache */ - /* replace1420_0_1 -> 3985 in the cache */ - /* replace1420_0 -> 3987 in the cache */ - /* replace1420_1 -> 3983 in the cache */ - /* replace1420_2_0 -> 3983 in the cache */ - /* replace1420_2_1 -> 3984 in the cache */ - /* replace1420_2_2 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 3983, 3984, 3985 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3987, 3983, 3991 }, - -1, - } }, - - /* ('bitfield_select', 'a', 'b', 0) => ('iand', 'a', 'b') */ - /* search1421_0 -> 0 in the cache */ - /* search1421_1 -> 3 in the cache */ - /* search1421_2 -> 86 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_bitfield_select, - -1, 0, - { 0, 3, 86 }, - -1, - } }, - - /* replace1421_0 -> 0 in the cache */ - /* replace1421_1 -> 3 in the cache */ - /* replace1421 -> 2887 in the cache */ - - /* ('bitfield_select', 'a', ('iand', 'a', 'b'), 'c') => ('bitfield_select', 'a', 'b', 'c') */ - /* search1422_0 -> 132 in the cache */ - /* search1422_1_0 -> 132 in the cache */ - /* search1422_1_1 -> 133 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 132, 133 }, - -1, - } }, - /* search1422_2 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bitfield_select, - -1, 1, - { 132, 3994, 135 }, - -1, - } }, - - /* replace1422_0 -> 132 in the cache */ - /* replace1422_1 -> 133 in the cache */ - /* replace1422_2 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bitfield_select, - -1, 0, - { 132, 133, 135 }, - -1, - } }, - - /* ('ubfe', 'value', 'offset', ('iand', 31, 'bits')) => ('ubfe', 'value', 'offset', 'bits') */ - /* search1423_0 -> 3983 in the cache */ - /* search1423_1 -> 3984 in the cache */ - /* search1423_2_0 -> 19 in the cache */ - /* search1423_2_1 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 19, 3985 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 1, - { 3983, 3984, 3997 }, - -1, - } }, - - /* replace1423_0 -> 3983 in the cache */ - /* replace1423_1 -> 3984 in the cache */ - /* replace1423_2 -> 3985 in the cache */ - /* replace1423 -> 3991 in the cache */ - - /* ('ubfe', 'value', ('iand', 31, 'offset'), 'bits') => ('ubfe', 'value', 'offset', 'bits') */ - /* search1424_0 -> 3983 in the cache */ - /* search1424_1_0 -> 19 in the cache */ - /* search1424_1_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 19, 3984 }, - -1, - } }, - /* search1424_2 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 1, - { 3983, 3999, 3985 }, - -1, - } }, - - /* replace1424_0 -> 3983 in the cache */ - /* replace1424_1 -> 3984 in the cache */ - /* replace1424_2 -> 3985 in the cache */ - /* replace1424 -> 3991 in the cache */ - - /* ('ibfe', 'value', 'offset', ('iand', 31, 'bits')) => ('ibfe', 'value', 'offset', 'bits') */ - /* search1425_0 -> 3983 in the cache */ - /* search1425_1 -> 3984 in the cache */ - /* search1425_2_0 -> 19 in the cache */ - /* search1425_2_1 -> 3985 in the cache */ - /* search1425_2 -> 3997 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 1, - { 3983, 3984, 3997 }, - -1, - } }, - - /* replace1425_0 -> 3983 in the cache */ - /* replace1425_1 -> 3984 in the cache */ - /* replace1425_2 -> 3985 in the cache */ - /* replace1425 -> 3988 in the cache */ - - /* ('ibfe', 'value', ('iand', 31, 'offset'), 'bits') => ('ibfe', 'value', 'offset', 'bits') */ - /* search1426_0 -> 3983 in the cache */ - /* search1426_1_0 -> 19 in the cache */ - /* search1426_1_1 -> 3984 in the cache */ - /* search1426_1 -> 3999 in the cache */ - /* search1426_2 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 1, - { 3983, 3999, 3985 }, - -1, - } }, - - /* replace1426_0 -> 3983 in the cache */ - /* replace1426_1 -> 3984 in the cache */ - /* replace1426_2 -> 3985 in the cache */ - /* replace1426 -> 3988 in the cache */ - - /* ('bfm', 'bits', ('iand', 31, 'offset')) => ('bfm', 'bits', 'offset') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* bits */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1427_1_0 -> 19 in the cache */ - /* search1427_1_1 -> 3984 in the cache */ - /* search1427_1 -> 3999 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 1, - { 4003, 3999 }, - -1, - } }, - - /* replace1427_0 -> 4003 in the cache */ - /* replace1427_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 0, - { 4003, 3984 }, - -1, - } }, - - /* ('bfm', ('iand', 31, 'bits'), 'offset') => ('bfm', 'bits', 'offset') */ - /* search1428_0_0 -> 19 in the cache */ - /* search1428_0_1 -> 4003 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 19, 4003 }, - -1, - } }, - /* search1428_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 1, - { 4006, 3984 }, - -1, - } }, - - /* replace1428_0 -> 4003 in the cache */ - /* replace1428_1 -> 3984 in the cache */ - /* replace1428 -> 4005 in the cache */ - - /* ('ult', 'a', ('umin', ('iand', 'a', 'b'), 'c')) => False */ - /* search1429_0 -> 132 in the cache */ - /* search1429_1_0_0 -> 132 in the cache */ - /* search1429_1_0_1 -> 133 in the cache */ - /* search1429_1_0 -> 200 in the cache */ - /* search1429_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_umin, - 0, 2, - { 200, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 2, - { 132, 4008 }, - -1, - } }, - - /* replace1429 -> 1090 in the cache */ - - /* ('ult', 31, ('umin', '#bits(is_ult_32)', 'a')) => False */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_int, { 0x1f /* 31 */ }, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* bits */ - true, - nir_type_invalid, - 34, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1430_1_1 -> 1127 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 4011, 1127 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 4010, 4012 }, - -1, - } }, - - /* replace1430 -> 1090 in the cache */ - - /* ('ubfe', 'value', 'offset', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset'))))) => ('ubfe', 'value', 'offset', 'width') */ - /* search1431_0 -> 3983 in the cache */ - /* search1431_1 -> 3984 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* width */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1431_2_1_0 -> 887 in the cache */ - /* search1431_2_1_1_0_0 -> 19 in the cache */ - /* search1431_2_1_1_0_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 19, 3984 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 1, - { 4015 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 2, - { 887, 4016 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umin, - 0, 3, - { 4014, 4017 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 3, - { 3983, 3984, 4018 }, - -1, - } }, - - /* replace1431_0 -> 3983 in the cache */ - /* replace1431_1 -> 3984 in the cache */ - /* replace1431_2 -> 4014 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 3983, 3984, 4014 }, - -1, - } }, - - /* ('ibfe', 'value', 'offset', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset'))))) => ('ibfe', 'value', 'offset', 'width') */ - /* search1432_0 -> 3983 in the cache */ - /* search1432_1 -> 3984 in the cache */ - /* search1432_2_0 -> 4014 in the cache */ - /* search1432_2_1_0 -> 887 in the cache */ - /* search1432_2_1_1_0_0 -> 19 in the cache */ - /* search1432_2_1_1_0_1 -> 3984 in the cache */ - /* search1432_2_1_1_0 -> 4015 in the cache */ - /* search1432_2_1_1 -> 4016 in the cache */ - /* search1432_2_1 -> 4017 in the cache */ - /* search1432_2 -> 4018 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 3, - { 3983, 3984, 4018 }, - -1, - } }, - - /* replace1432_0 -> 3983 in the cache */ - /* replace1432_1 -> 3984 in the cache */ - /* replace1432_2 -> 4014 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 3983, 3984, 4014 }, - -1, - } }, - - /* ('bfm', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset')))), 'offset') => ('bfm', 'width', 'offset') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* width */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1433_0_1_0 -> 887 in the cache */ - /* search1433_0_1_1_0_0 -> 19 in the cache */ - /* search1433_0_1_1_0_1 -> 3984 in the cache */ - /* search1433_0_1_1_0 -> 4015 in the cache */ - /* search1433_0_1_1 -> 4016 in the cache */ - /* search1433_0_1 -> 4017 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umin, - 0, 3, - { 4023, 4017 }, - -1, - } }, - /* search1433_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 3, - { 4024, 3984 }, - -1, - } }, - - /* replace1433_0 -> 4023 in the cache */ - /* replace1433_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 0, - { 4023, 3984 }, - -1, - } }, - - /* ('iadd@32', ('ishl', 1, 'a'), -1) => ('bfm', 'a', 0) */ - /* search1434_0_0 -> 406 in the cache */ - /* search1434_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 406, 16 }, - -1, - } }, - /* search1434_1 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 4027, 130 }, - -1, - } }, - - /* replace1434_0 -> 16 in the cache */ - /* replace1434_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 0, - { 16, 128 }, - -1, - } }, - - /* ('ishl', ('bfm', 'a', 0), 'b') => ('bfm', 'a', 'b') */ - /* search1435_0_0 -> 16 in the cache */ - /* search1435_0_1 -> 128 in the cache */ - /* search1435_0 -> 4029 in the cache */ - /* search1435_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 4029, 36 }, - -1, - } }, - - /* replace1435_0 -> 16 in the cache */ - /* replace1435_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bfm, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('ubfe', 'a', 'b', 0) => 0 */ - /* search1436_0 -> 16 in the cache */ - /* search1436_1 -> 36 in the cache */ - /* search1436_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 36, 128 }, - -1, - } }, - - /* replace1436 -> 128 in the cache */ - - /* ('ibfe', 'a', 'b', 0) => 0 */ - /* search1437_0 -> 16 in the cache */ - /* search1437_1 -> 36 in the cache */ - /* search1437_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 36, 128 }, - -1, - } }, - - /* replace1437 -> 128 in the cache */ - - /* ('ubfe', 'a', 0, '#b') => ('iand', 'a', ('ushr', 4294967295, ('ineg', 'b'))) */ - /* search1438_0 -> 16 in the cache */ - /* search1438_1 -> 128 in the cache */ - /* search1438_2 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 128, 33 }, - -1, - } }, - - /* replace1438_0 -> 16 in the cache */ - /* replace1438_1_0 -> 940 in the cache */ - /* replace1438_1_1_0 -> 36 in the cache */ - /* replace1438_1_1 -> 2940 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 940, 2940 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 16, 4035 }, - -1, - } }, - - /* ('b2i32', ('ine', ('ubfe', 'a', 'b', 1), 0)) => ('ubfe', 'a', 'b', 1) */ - /* search1439_0_0_0 -> 16 in the cache */ - /* search1439_0_0_1 -> 36 in the cache */ - /* search1439_0_0_2 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 36, 406 }, - -1, - } }, - /* search1439_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4037, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 1, - { 4038 }, - -1, - } }, - - /* replace1439_0 -> 16 in the cache */ - /* replace1439_1 -> 36 in the cache */ - /* replace1439_2 -> 406 in the cache */ - /* replace1439 -> 4037 in the cache */ - - /* ('b2i32', ('ine', ('ibfe', 'a', 'b', 1), 0)) => ('ubfe', 'a', 'b', 1) */ - /* search1440_0_0_0 -> 16 in the cache */ - /* search1440_0_0_1 -> 36 in the cache */ - /* search1440_0_0_2 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 36, 406 }, - -1, - } }, - /* search1440_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4040, 128 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2i32, - -1, 1, - { 4041 }, - -1, - } }, - - /* replace1440_0 -> 16 in the cache */ - /* replace1440_1 -> 36 in the cache */ - /* replace1440_2 -> 406 in the cache */ - /* replace1440 -> 4037 in the cache */ - - /* ('ine', ('ibfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ine', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) */ - /* search1441_0_0 -> 16 in the cache */ - /* search1441_0_1 -> 33 in the cache */ - /* search1441_0_2 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 16, 33, 319 }, - 0, - } }, - /* search1441_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4043, 128 }, - -1, - } }, - - /* replace1441_0_0 -> 16 in the cache */ - /* replace1441_0_1_0_0 -> 940 in the cache */ - /* replace1441_0_1_0_1_0 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 940, 4045 }, - -1, - } }, - /* replace1441_0_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 4046, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 4047 }, - -1, - } }, - /* replace1441_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 4048, 128 }, - -1, - } }, - - /* ('ieq', ('ibfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ieq', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) */ - /* search1442_0_0 -> 16 in the cache */ - /* search1442_0_1 -> 33 in the cache */ - /* search1442_0_2 -> 319 in the cache */ - /* search1442_0 -> 4043 in the cache */ - /* search1442_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 4043, 128 }, - -1, - } }, - - /* replace1442_0_0 -> 16 in the cache */ - /* replace1442_0_1_0_0 -> 940 in the cache */ - /* replace1442_0_1_0_1_0 -> 141 in the cache */ - /* replace1442_0_1_0_1 -> 4045 in the cache */ - /* replace1442_0_1_0 -> 4046 in the cache */ - /* replace1442_0_1_1 -> 36 in the cache */ - /* replace1442_0_1 -> 4047 in the cache */ - /* replace1442_0 -> 4048 in the cache */ - /* replace1442_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 4048, 128 }, - -1, - } }, - - /* ('ine', ('ubfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ine', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) */ - /* search1443_0_0 -> 16 in the cache */ - /* search1443_0_1 -> 33 in the cache */ - /* search1443_0_2 -> 319 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 16, 33, 319 }, - 0, - } }, - /* search1443_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4052, 128 }, - -1, - } }, - - /* replace1443_0_0 -> 16 in the cache */ - /* replace1443_0_1_0_0 -> 940 in the cache */ - /* replace1443_0_1_0_1_0 -> 141 in the cache */ - /* replace1443_0_1_0_1 -> 4045 in the cache */ - /* replace1443_0_1_0 -> 4046 in the cache */ - /* replace1443_0_1_1 -> 36 in the cache */ - /* replace1443_0_1 -> 4047 in the cache */ - /* replace1443_0 -> 4048 in the cache */ - /* replace1443_1 -> 128 in the cache */ - /* replace1443 -> 4049 in the cache */ - - /* ('ieq', ('ubfe(is_used_once)', 'a', '#b', '#c'), 0) => ('ieq', ('iand', 'a', ('ishl', ('ushr', 4294967295, ('ineg', 'c')), 'b')), 0) */ - /* search1444_0_0 -> 16 in the cache */ - /* search1444_0_1 -> 33 in the cache */ - /* search1444_0_2 -> 319 in the cache */ - /* search1444_0 -> 4052 in the cache */ - /* search1444_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 4052, 128 }, - -1, - } }, - - /* replace1444_0_0 -> 16 in the cache */ - /* replace1444_0_1_0_0 -> 940 in the cache */ - /* replace1444_0_1_0_1_0 -> 141 in the cache */ - /* replace1444_0_1_0_1 -> 4045 in the cache */ - /* replace1444_0_1_0 -> 4046 in the cache */ - /* replace1444_0_1_1 -> 36 in the cache */ - /* replace1444_0_1 -> 4047 in the cache */ - /* replace1444_0 -> 4048 in the cache */ - /* replace1444_1 -> 128 in the cache */ - /* replace1444 -> 4051 in the cache */ - - /* ('ibitfield_extract', 'value', 'offset', 'bits') => ('bcsel', ('ieq', 0, 'bits'), 0, ('ishr', ('ishl', 'value', ('isub', ('isub', 32, 'bits'), 'offset')), ('isub', 32, 'bits'))) */ - /* search1445_0 -> 3983 in the cache */ - /* search1445_1 -> 3984 in the cache */ - /* search1445_2 -> 3985 in the cache */ - /* search1445 -> 3986 in the cache */ - - /* replace1445_0_0 -> 128 in the cache */ - /* replace1445_0_1 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 128, 3985 }, - -1, - } }, - /* replace1445_1 -> 128 in the cache */ - /* replace1445_2_0_0 -> 3983 in the cache */ - /* replace1445_2_0_1_0_0 -> 887 in the cache */ - /* replace1445_2_0_1_0_1 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 887, 3985 }, - -1, - } }, - /* replace1445_2_0_1_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 4056, 3984 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 3983, 4057 }, - -1, - } }, - /* replace1445_2_1_0 -> 887 in the cache */ - /* replace1445_2_1_1 -> 3985 in the cache */ - /* replace1445_2_1 -> 4056 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 4058, 4056 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4055, 128, 4059 }, - -1, - } }, - - /* ('ubitfield_extract', 'value', 'offset', 'bits') => ('iand', ('ushr', 'value', 'offset'), ('bcsel', ('ieq', 'bits', 32), 4294967295, ('isub', ('ishl', 1, 'bits'), 1))) */ - /* search1446_0 -> 3983 in the cache */ - /* search1446_1 -> 3984 in the cache */ - /* search1446_2 -> 3985 in the cache */ - /* search1446 -> 3990 in the cache */ - - /* replace1446_0_0 -> 3983 in the cache */ - /* replace1446_0_1 -> 3984 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 3983, 3984 }, - -1, - } }, - /* replace1446_1_0_0 -> 3985 in the cache */ - /* replace1446_1_0_1 -> 887 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 3985, 887 }, - -1, - } }, - /* replace1446_1_1 -> 940 in the cache */ - /* replace1446_1_2_0_0 -> 406 in the cache */ - /* replace1446_1_2_0_1 -> 3985 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 406, 3985 }, - -1, - } }, - /* replace1446_1_2_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 4063, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4062, 940, 4064 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4061, 4065 }, - -1, - } }, - - /* ('ifind_msb', 'value') => ('ufind_msb', ('bcsel', ('ilt', 'value', 0), ('inot', 'value'), 'value')) */ - /* search1447_0 -> 3983 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ifind_msb, - -1, 0, - { 3983 }, - -1, - } }, - - /* replace1447_0_0_0 -> 3983 in the cache */ - /* replace1447_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 3983, 128 }, - -1, - } }, - /* replace1447_0_1_0 -> 3983 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 3983 }, - -1, - } }, - /* replace1447_0_2 -> 3983 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4068, 4069, 3983 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 0, - { 4070 }, - -1, - } }, - - /* ('ifind_msb', 'value') => ('bcsel', ('ige', ('ifind_msb_rev', 'value'), 0), ('isub', 31, ('ifind_msb_rev', 'value')), ('ifind_msb_rev', 'value')) */ - /* search1448_0 -> 3983 in the cache */ - /* search1448 -> 4067 in the cache */ - - /* replace1448_0_0_0 -> 3983 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ifind_msb_rev, - -1, 0, - { 3983 }, - -1, - } }, - /* replace1448_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4072, 128 }, - -1, - } }, - /* replace1448_1_0 -> 19 in the cache */ - /* replace1448_1_1_0 -> 3983 in the cache */ - /* replace1448_1_1 -> 4072 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 19, 4072 }, - -1, - } }, - /* replace1448_2_0 -> 3983 in the cache */ - /* replace1448_2 -> 4072 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4073, 4074, 4072 }, - -1, - } }, - - /* ('ifind_msb', 'value') => ('isub', 31, ('uclz', ('ixor', 'value', ('ishr', 'value', 31)))) */ - /* search1449_0 -> 3983 in the cache */ - /* search1449 -> 4067 in the cache */ - - /* replace1449_0 -> 19 in the cache */ - /* replace1449_1_0_0 -> 3983 in the cache */ - /* replace1449_1_0_1_0 -> 3983 in the cache */ - /* replace1449_1_0_1_1 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 3983, 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 3983, 4076 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uclz, - -1, 1, - { 4077 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 1, - { 19, 4078 }, - -1, - } }, - - /* ('ufind_msb', 'value@32') => ('bcsel', ('ige', ('ufind_msb_rev', 'value'), 0), ('isub', 31, ('ufind_msb_rev', 'value')), ('ufind_msb_rev', 'value')) */ - /* search1450_0 -> 3983 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 0, - { 3983 }, - -1, - } }, - - /* replace1450_0_0_0 -> 3983 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb_rev, - -1, 0, - { 3983 }, - -1, - } }, - /* replace1450_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4081, 128 }, - -1, - } }, - /* replace1450_1_0 -> 19 in the cache */ - /* replace1450_1_1_0 -> 3983 in the cache */ - /* replace1450_1_1 -> 4081 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 19, 4081 }, - -1, - } }, - /* replace1450_2_0 -> 3983 in the cache */ - /* replace1450_2 -> 4081 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4082, 4083, 4081 }, - -1, - } }, - - /* ('ufind_msb', 'value@32') => ('isub', 31, ('uclz', 'value')) */ - /* search1451_0 -> 3983 in the cache */ - /* search1451 -> 4080 in the cache */ - - /* replace1451_0 -> 19 in the cache */ - /* replace1451_1_0 -> 3983 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uclz, - -1, 0, - { 3983 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 19, 4085 }, - -1, - } }, - - /* ('uclz', 'a') => ('umin', 32, ('ufind_msb_rev', 'a')) */ - /* search1452_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uclz, - -1, 0, - { 16 }, - -1, - } }, - - /* replace1452_0 -> 887 in the cache */ - /* replace1452_1_0 -> 16 in the cache */ - /* replace1452_1 -> 3792 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 887, 3792 }, - -1, - } }, - - /* ('find_lsb', 'value@64') => ('ufind_msb', ('iand', 'value', ('ineg', 'value'))) */ - { .variable = { - { nir_search_value_variable, 64 }, - 0, /* value */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 4089 }, - -1, - } }, - - /* replace1453_0_0 -> 4089 in the cache */ - /* replace1453_0_1_0 -> 4089 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 4089 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 4089, 4091 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 1, - { 4092 }, - -1, - } }, - - /* ('find_lsb', 'value') => ('ufind_msb', ('u2u32', ('iand', 'value', ('ineg', 'value')))) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* value */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 4094 }, - -1, - } }, - - /* replace1454_0_0_0 -> 4094 in the cache */ - /* replace1454_0_0_1_0 -> 4094 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 4094 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 4094, 4096 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 1, - { 4097 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ufind_msb, - -1, 1, - { 4098 }, - -1, - } }, - - /* ('extract_i8', 'a', 'b@32') => ('ishr', ('ishl', 'a', ('imul', ('isub', 3, 'b'), 8)), 24) */ - /* search1455_0 -> 16 in the cache */ - /* search1455_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1455_0_0 -> 16 in the cache */ - /* replace1455_0_1_0_0 -> 415 in the cache */ - /* replace1455_0_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 415, 36 }, - -1, - } }, - /* replace1455_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 4101, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 16, 4102 }, - -1, - } }, - /* replace1455_1 -> 1025 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 4103, 1025 }, - -1, - } }, - - /* ('extract_u8', 'a', 'b@32') => ('iand', ('ushr', 'a', ('imul', 'b', 8)), 255) */ - /* search1456_0 -> 16 in the cache */ - /* search1456_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1456_0_0 -> 16 in the cache */ - /* replace1456_0_1_0 -> 36 in the cache */ - /* replace1456_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 36, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 16, 4106 }, - -1, - } }, - /* replace1456_1 -> 1023 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4107, 1023 }, - -1, - } }, - - /* ('extract_i16', 'a', 'b@32') => ('ishr', ('ishl', 'a', ('imul', ('isub', 1, 'b'), 16)), 16) */ - /* search1457_0 -> 16 in the cache */ - /* search1457_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1457_0_0 -> 16 in the cache */ - /* replace1457_0_1_0_0 -> 406 in the cache */ - /* replace1457_0_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 406, 36 }, - -1, - } }, - /* replace1457_0_1_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 4110, 866 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 16, 4111 }, - -1, - } }, - /* replace1457_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 4112, 866 }, - -1, - } }, - - /* ('extract_u16', 'a', 'b@32') => ('iand', ('ushr', 'a', ('imul', 'b', 16)), 65535) */ - /* search1458_0 -> 16 in the cache */ - /* search1458_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1458_0_0 -> 16 in the cache */ - /* replace1458_0_1_0 -> 36 in the cache */ - /* replace1458_0_1_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 36, 866 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 16, 4115 }, - -1, - } }, - /* replace1458_1 -> 1015 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4116, 1015 }, - -1, - } }, - - /* ('pack_unorm_2x16', 'v') => ('pack_uvec2_to_uint', ('f2u32', ('fround_even', ('fmul', ('fsat', 'v'), 65535.0)))) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* v */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_unorm_2x16, - -1, 0, - { 4118 }, - -1, - } }, - - /* replace1459_0_0_0_0_0 -> 4118 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 4118 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x40efffe000000000 /* 65535.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 4120, 4121 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fround_even, - -1, 1, - { 4122 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2u32, - -1, 1, - { 4123 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_uvec2_to_uint, - -1, 1, - { 4124 }, - -1, - } }, - - /* ('pack_unorm_4x8', 'v') => ('pack_uvec4_to_uint', ('f2u32', ('fround_even', ('fmul', ('fsat', 'v'), 255.0)))) */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* v */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_unorm_4x8, - -1, 0, - { 4126 }, - -1, - } }, - - /* replace1460_0_0_0_0_0 -> 4126 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 4126 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x406fe00000000000 /* 255.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 4128, 4129 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fround_even, - -1, 1, - { 4130 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2u32, - -1, 1, - { 4131 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_uvec4_to_uint, - -1, 1, - { 4132 }, - -1, - } }, - - /* ('pack_snorm_2x16', 'v') => ('pack_uvec2_to_uint', ('f2i32', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 32767.0)))) */ - /* search1461_0 -> 4118 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_snorm_2x16, - -1, 0, - { 4118 }, - -1, - } }, - - /* replace1461_0_0_0_0_0 -> 252 in the cache */ - /* replace1461_0_0_0_0_1_0 -> 258 in the cache */ - /* replace1461_0_0_0_0_1_1 -> 4118 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmax, - 2, 1, - { 258, 4118 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 1, 2, - { 252, 4135 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x40dfffc000000000 /* 32767.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 3, - { 4136, 4137 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fround_even, - -1, 3, - { 4138 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 3, - { 4139 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_uvec2_to_uint, - -1, 3, - { 4140 }, - -1, - } }, - - /* ('pack_snorm_4x8', 'v') => ('pack_uvec4_to_uint', ('f2i32', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 127.0)))) */ - /* search1462_0 -> 4126 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_snorm_4x8, - -1, 0, - { 4126 }, - -1, - } }, - - /* replace1462_0_0_0_0_0 -> 254 in the cache */ - /* replace1462_0_0_0_0_1_0 -> 288 in the cache */ - /* replace1462_0_0_0_0_1_1 -> 4126 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmax, - 2, 1, - { 288, 4126 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmin, - 1, 2, - { 254, 4143 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x405fc00000000000 /* 127.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 3, - { 4144, 4145 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fround_even, - -1, 3, - { 4146 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2i32, - -1, 3, - { 4147 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_uvec4_to_uint, - -1, 3, - { 4148 }, - -1, - } }, - - /* ('unpack_unorm_2x16', 'v') => ('fdiv', ('u2f32', ('vec2', ('extract_u16', 'v', 0), ('extract_u16', 'v', 1))), 65535.0) */ - /* search1463_0 -> 4126 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_unorm_2x16, - -1, 0, - { 4126 }, - -1, - } }, - - /* replace1463_0_0_0_0 -> 4126 in the cache */ - /* replace1463_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 4126, 128 }, - -1, - } }, - /* replace1463_0_0_1_0 -> 4126 in the cache */ - /* replace1463_0_0_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 4126, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 4151, 4152 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 4153 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x40efffe000000000 /* 65535.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdiv, - -1, 0, - { 4154, 4155 }, - -1, - } }, - - /* ('unpack_unorm_4x8', 'v') => ('fdiv', ('u2f32', ('vec4', ('extract_u8', 'v', 0), ('extract_u8', 'v', 1), ('extract_u8', 'v', 2), ('extract_u8', 'v', 3))), 255.0) */ - /* search1464_0 -> 4126 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_unorm_4x8, - -1, 0, - { 4126 }, - -1, - } }, - - /* replace1464_0_0_0_0 -> 4126 in the cache */ - /* replace1464_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 4126, 128 }, - -1, - } }, - /* replace1464_0_0_1_0 -> 4126 in the cache */ - /* replace1464_0_0_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 4126, 406 }, - -1, - } }, - /* replace1464_0_0_2_0 -> 4126 in the cache */ - /* replace1464_0_0_2_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 4126, 411 }, - -1, - } }, - /* replace1464_0_0_3_0 -> 4126 in the cache */ - /* replace1464_0_0_3_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 4126, 415 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 4158, 4159, 4160, 4161 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2f32, - -1, 0, - { 4162 }, - -1, - } }, - /* replace1464_1 -> 4129 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdiv, - -1, 0, - { 4163, 4129 }, - -1, - } }, - - /* ('unpack_snorm_2x16', 'v') => ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec2', ('extract_i16', 'v', 0), ('extract_i16', 'v', 1))), 32767.0))) */ - /* search1465_0 -> 4126 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_snorm_2x16, - -1, 0, - { 4126 }, - -1, - } }, - - /* replace1465_0 -> 254 in the cache */ - /* replace1465_1_0 -> 288 in the cache */ - /* replace1465_1_1_0_0_0_0 -> 4126 in the cache */ - /* replace1465_1_1_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 4126, 128 }, - -1, - } }, - /* replace1465_1_1_0_0_1_0 -> 4126 in the cache */ - /* replace1465_1_1_0_0_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 4126, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 4166, 4167 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_i2f, - -1, 0, - { 4168 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x40dfffc000000000 /* 32767.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdiv, - -1, 0, - { 4169, 4170 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 288, 4171 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 254, 4172 }, - -1, - } }, - - /* ('unpack_snorm_4x8', 'v') => ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec4', ('extract_i8', 'v', 0), ('extract_i8', 'v', 1), ('extract_i8', 'v', 2), ('extract_i8', 'v', 3))), 127.0))) */ - /* search1466_0 -> 4126 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_unpack_snorm_4x8, - -1, 0, - { 4126 }, - -1, - } }, - - /* replace1466_0 -> 254 in the cache */ - /* replace1466_1_0 -> 288 in the cache */ - /* replace1466_1_1_0_0_0_0 -> 4126 in the cache */ - /* replace1466_1_1_0_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 4126, 128 }, - -1, - } }, - /* replace1466_1_1_0_0_1_0 -> 4126 in the cache */ - /* replace1466_1_1_0_0_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 4126, 406 }, - -1, - } }, - /* replace1466_1_1_0_0_2_0 -> 4126 in the cache */ - /* replace1466_1_1_0_0_2_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 4126, 411 }, - -1, - } }, - /* replace1466_1_1_0_0_3_0 -> 4126 in the cache */ - /* replace1466_1_1_0_0_3_1 -> 415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 4126, 415 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 4175, 4176, 4177, 4178 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_search_op_i2f, - -1, 0, - { 4179 }, - -1, - } }, - /* replace1466_1_1_1 -> 4145 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdiv, - -1, 0, - { 4180, 4145 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 288, 4181 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmin, - 0, 2, - { 254, 4182 }, - -1, - } }, - - /* ('pack_half_2x16_split', 'a@32', 'b@32') => ('ior', ('ishl', ('u2u32', ('f2f16', 'b')), 16), ('u2u32', ('f2f16', 'a'))) */ - /* search1467_0 -> 16 in the cache */ - /* search1467_1 -> 36 in the cache */ - /* search1467 -> 3473 in the cache */ - - /* replace1467_0_0_0_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4184 }, - -1, - } }, - /* replace1467_0_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 4185, 866 }, - -1, - } }, - /* replace1467_1_0_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 16 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4187 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 4186, 4188 }, - -1, - } }, - - /* ('unpack_half_2x16_split_x', 'a@32') => ('f2f32', ('u2u16', 'a')) */ - /* search1468_0 -> 16 in the cache */ - /* search1468 -> 3481 in the cache */ - - /* replace1468_0_0 -> 16 in the cache */ - /* replace1468_0 -> 3478 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 3478 }, - -1, - } }, - - /* ('unpack_half_2x16_split_y', 'a@32') => ('f2f32', ('u2u16', ('ushr', 'a', 16))) */ - /* search1469_0 -> 16 in the cache */ - /* search1469 -> 3488 in the cache */ - - /* replace1469_0_0_0 -> 16 in the cache */ - /* replace1469_0_0_1 -> 866 in the cache */ - /* replace1469_0_0 -> 1021 in the cache */ - /* replace1469_0 -> 3479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 3479 }, - -1, - } }, - - /* ('pack_32_2x16_split', 'a@16', 'b@16') => ('ior', ('ishl', ('u2u32', 'b'), 16), ('u2u32', 'a')) */ - /* search1470_0 -> 11 in the cache */ - /* search1470_1 -> 268 in the cache */ - /* search1470 -> 3469 in the cache */ - - /* replace1470_0_0_0 -> 268 in the cache */ - /* replace1470_0_0 -> 3470 in the cache */ - /* replace1470_0_1 -> 866 in the cache */ - /* replace1470_0 -> 3471 in the cache */ - /* replace1470_1_0 -> 11 in the cache */ - /* replace1470_1 -> 2129 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 3471, 2129 }, - -1, - } }, - - /* ('unpack_32_2x16_split_x', 'a@32') => ('u2u16', 'a') */ - /* search1471_0 -> 16 in the cache */ - /* search1471 -> 3393 in the cache */ - - /* replace1471_0 -> 16 in the cache */ - /* replace1471 -> 3478 in the cache */ - - /* ('unpack_32_2x16_split_y', 'a@32') => ('u2u16', ('ushr', 'a', 16)) */ - /* search1472_0 -> 16 in the cache */ - /* search1472 -> 3395 in the cache */ - - /* replace1472_0_0 -> 16 in the cache */ - /* replace1472_0_1 -> 866 in the cache */ - /* replace1472_0 -> 1021 in the cache */ - /* replace1472 -> 3479 in the cache */ - - /* ('isign', 'a') => ('imin', ('imax', 'a', -1), 1) */ - /* search1473_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_isign, - -1, 0, - { 32 }, - -1, - } }, - - /* replace1473_0_0 -> 32 in the cache */ - /* replace1473_0_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 32, 63 }, - -1, - } }, - /* replace1473_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - 0, 2, - { 4194, 35 }, - -1, - } }, - - /* ('imin', ('imax', 'a', -1), 1) => ('isign', 'a') */ - /* search1474_0_0 -> 32 in the cache */ - /* search1474_0_1 -> 63 in the cache */ - /* search1474_0 -> 4194 in the cache */ - /* search1474_1 -> 35 in the cache */ - /* search1474 -> 4195 in the cache */ - - /* replace1474_0 -> 32 in the cache */ - /* replace1474 -> 4193 in the cache */ - - /* ('imax', ('imin', 'a', 1), -1) => ('isign', 'a') */ - /* search1475_0_0 -> 32 in the cache */ - /* search1475_0_1 -> 35 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imin, - 1, 1, - { 32, 35 }, - -1, - } }, - /* search1475_1 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 0, 2, - { 4196, 63 }, - -1, - } }, - - /* replace1475_0 -> 32 in the cache */ - /* replace1475 -> 4193 in the cache */ - - /* ('fsign', 'a') => ('fsub', ('b2f', ('!flt', 0.0, 'a')), ('b2f', ('!flt', 'a', 0.0))) */ - /* search1476_0 -> 32 in the cache */ - /* search1476 -> 98 in the cache */ - - /* replace1476_0_0_0 -> 117 in the cache */ - /* replace1476_0_0_1 -> 32 in the cache */ - /* replace1476_0_0 -> 1539 in the cache */ - /* replace1476_0 -> 1540 in the cache */ - /* replace1476_1_0_0 -> 32 in the cache */ - /* replace1476_1_0_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 32, 117 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_search_op_b2f, - -1, 0, - { 4198 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 1540, 4199 }, - -1, - } }, - - /* ('amul', 'a', 'b') => ('imul', 'a', 'b') */ - /* search1477_0 -> 0 in the cache */ - /* search1477_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_amul, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* replace1477_0 -> 0 in the cache */ - /* replace1477_1 -> 3 in the cache */ - /* replace1477 -> 964 in the cache */ - - /* ('umul24', 'a', 'b') => ('imul', ('iand', 'a', 16777215), ('iand', 'b', 16777215)) */ - /* search1478_0 -> 16 in the cache */ - /* search1478_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul24, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace1478_0_0 -> 16 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xffffff /* 16777215 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 16, 4203 }, - -1, - } }, - /* replace1478_1_0 -> 36 in the cache */ - /* replace1478_1_1 -> 4203 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 36, 4203 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 3, - { 4204, 4205 }, - -1, - } }, - - /* ('umad24', 'a', 'b', 'c') => ('iadd', ('imul', ('iand', 'a', 16777215), ('iand', 'b', 16777215)), 'c') */ - /* search1479_0 -> 16 in the cache */ - /* search1479_1 -> 36 in the cache */ - /* search1479_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umad24, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace1479_0_0_0 -> 16 in the cache */ - /* replace1479_0_0_1 -> 4203 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 16, 4203 }, - -1, - } }, - /* replace1479_0_1_0 -> 36 in the cache */ - /* replace1479_0_1_1 -> 4203 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 36, 4203 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 1, 3, - { 4208, 4209 }, - -1, - } }, - /* replace1479_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 4, - { 4210, 141 }, - -1, - } }, - - /* ('imul24_relaxed', 'a', 'b') => ('imul24', 'a', 'b') */ - /* search1480_0 -> 16 in the cache */ - /* search1480_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul24_relaxed, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace1480_0 -> 16 in the cache */ - /* replace1480_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul24, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* ('imul24_relaxed', 'a', 'b') => ('imul', 'a', 'b') */ - /* search1481_0 -> 16 in the cache */ - /* search1481_1 -> 36 in the cache */ - /* search1481 -> 4212 in the cache */ - - /* replace1481_0 -> 16 in the cache */ - /* replace1481_1 -> 36 in the cache */ - /* replace1481 -> 49 in the cache */ - - /* ('umad24_relaxed', 'a', 'b', 'c') => ('umad24', 'a', 'b', 'c') */ - /* search1482_0 -> 16 in the cache */ - /* search1482_1 -> 36 in the cache */ - /* search1482_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umad24_relaxed, - 0, 1, - { 16, 36, 141 }, - -1, - } }, - - /* replace1482_0 -> 16 in the cache */ - /* replace1482_1 -> 36 in the cache */ - /* replace1482_2 -> 141 in the cache */ - /* replace1482 -> 4207 in the cache */ - - /* ('umad24_relaxed', 'a', 'b', 'c') => ('iadd', ('umul24_relaxed', 'a', 'b'), 'c') */ - /* search1483_0 -> 16 in the cache */ - /* search1483_1 -> 36 in the cache */ - /* search1483_2 -> 141 in the cache */ - /* search1483 -> 4214 in the cache */ - - /* replace1483_0_0 -> 16 in the cache */ - /* replace1483_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul24_relaxed, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace1483_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 4215, 141 }, - -1, - } }, - - /* ('umul24_relaxed', 'a', 'b') => ('umul24', 'a', 'b') */ - /* search1484_0 -> 16 in the cache */ - /* search1484_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul24_relaxed, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace1484_0 -> 16 in the cache */ - /* replace1484_1 -> 36 in the cache */ - /* replace1484 -> 4202 in the cache */ - - /* ('umul24_relaxed', 'a', 'b') => ('imul', 'a', 'b') */ - /* search1485_0 -> 16 in the cache */ - /* search1485_1 -> 36 in the cache */ - /* search1485 -> 4217 in the cache */ - - /* replace1485_0 -> 16 in the cache */ - /* replace1485_1 -> 36 in the cache */ - /* replace1485 -> 49 in the cache */ - - /* ('imad24_ir3', 'a', 'b', 0) => ('imul24', 'a', 'b') */ - /* search1486_0 -> 16 in the cache */ - /* search1486_1 -> 36 in the cache */ - /* search1486_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imad24_ir3, - 0, 1, - { 16, 36, 128 }, - -1, - } }, - - /* replace1486_0 -> 16 in the cache */ - /* replace1486_1 -> 36 in the cache */ - /* replace1486 -> 4213 in the cache */ - - /* ('imad24_ir3', 'a', 0, 'c') => c */ - /* search1487_0 -> 16 in the cache */ - /* search1487_1 -> 128 in the cache */ - /* search1487_2 -> 565 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imad24_ir3, - 0, 1, - { 16, 128, 565 }, - -1, - } }, - - /* replace1487 -> 565 in the cache */ - - /* ('imad24_ir3', 'a', 1, 'c') => ('iadd', 'a', 'c') */ - /* search1488_0 -> 16 in the cache */ - /* search1488_1 -> 406 in the cache */ - /* search1488_2 -> 565 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imad24_ir3, - 0, 1, - { 16, 406, 565 }, - -1, - } }, - - /* replace1488_0 -> 16 in the cache */ - /* replace1488_1 -> 565 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 16, 565 }, - -1, - } }, - - /* ('imad24_ir3', '#a', '#b', 'c') => ('iadd', ('imul', 'a', 'b'), 'c') */ - /* search1489_0 -> 296 in the cache */ - /* search1489_1 -> 33 in the cache */ - /* search1489_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imad24_ir3, - 0, 1, - { 296, 33, 141 }, - -1, - } }, - - /* replace1489_0_0 -> 16 in the cache */ - /* replace1489_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 16, 36 }, - -1, - } }, - /* replace1489_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 4223, 141 }, - -1, - } }, - - /* ('imul24', 'a', '#b@32(is_pos_power_of_two)') => ('ishl', 'a', ('find_lsb', 'b')) */ - /* search1490_0 -> 16 in the cache */ - /* search1490_1 -> 2422 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul24, - 0, 1, - { 16, 2422 }, - -1, - } }, - - /* replace1490_0 -> 16 in the cache */ - /* replace1490_1_0 -> 36 in the cache */ - /* replace1490_1 -> 2428 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 2428 }, - -1, - } }, - - /* ('imul24', 'a', '#b@32(is_neg_power_of_two)') => ('ineg', ('ishl', 'a', ('find_lsb', ('iabs', 'b')))) */ - /* search1491_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul24, - 0, 1, - { 16, 4227 }, - -1, - } }, - - /* replace1491_0_0 -> 16 in the cache */ - /* replace1491_0_1_0_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_find_lsb, - -1, 0, - { 4229 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 16, 4230 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 4231 }, - -1, - } }, - - /* ('imul24', 'a', 0) => 0 */ - /* search1492_0 -> 16 in the cache */ - /* search1492_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul24, - 0, 1, - { 16, 128 }, - -1, - } }, - - /* replace1492 -> 128 in the cache */ - - /* ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@8', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1493_0_0_0 -> 6 in the cache */ - /* search1493_0_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 6, 2280 }, - -1, - } }, - /* search1493_0_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 4234, 6 }, - -1, - } }, - /* search1493_1 -> 1448 in the cache */ - /* search1493_2_0 -> 6 in the cache */ - /* search1493_2_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 6, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4235, 1448, 4236 }, - -1, - } }, - - /* replace1493_0 -> 6 in the cache */ - /* replace1493_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 1, - { 6, 2280 }, - -1, - } }, - - /* ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@8', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1494_0_0_0 -> 6 in the cache */ - /* search1494_0_0_1 -> 2280 in the cache */ - /* search1494_0_0 -> 4234 in the cache */ - /* search1494_0_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 4234, 6 }, - -1, - } }, - /* search1494_1_0 -> 6 in the cache */ - /* search1494_1_1 -> 2280 in the cache */ - /* search1494_1 -> 4236 in the cache */ - /* search1494_2 -> 1448 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4239, 4236, 1448 }, - -1, - } }, - - /* replace1494_0 -> 6 in the cache */ - /* replace1494_1 -> 2280 in the cache */ - /* replace1494 -> 4238 in the cache */ - - /* ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@8', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1495_0_0_0 -> 6 in the cache */ - /* search1495_0_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_uadd_carry, - 1, 1, - { 6, 2280 }, - -1, - } }, - /* search1495_0_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 4241, 848 }, - -1, - } }, - /* search1495_1_0 -> 6 in the cache */ - /* search1495_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iadd, - 2, 1, - { 6, 2280 }, - -1, - } }, - /* search1495_2 -> 1448 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4242, 4243, 1448 }, - -1, - } }, - - /* replace1495_0 -> 6 in the cache */ - /* replace1495_1 -> 2280 in the cache */ - /* replace1495 -> 4238 in the cache */ - - /* ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@8', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1496_0_0_0 -> 6 in the cache */ - /* search1496_0_0_1 -> 2280 in the cache */ - /* search1496_0_0 -> 4241 in the cache */ - /* search1496_0_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 4241, 848 }, - -1, - } }, - /* search1496_1 -> 1448 in the cache */ - /* search1496_2_0 -> 6 in the cache */ - /* search1496_2_1 -> 2280 in the cache */ - /* search1496_2 -> 4243 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4245, 1448, 4243 }, - -1, - } }, - - /* replace1496_0 -> 6 in the cache */ - /* replace1496_1 -> 2280 in the cache */ - /* replace1496 -> 4238 in the cache */ - - /* ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@16', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1497_0_0_0 -> 11 in the cache */ - /* search1497_0_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 11, 268 }, - -1, - } }, - /* search1497_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 4247, 11 }, - -1, - } }, - /* search1497_1 -> 1470 in the cache */ - /* search1497_2_0 -> 11 in the cache */ - /* search1497_2_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 11, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4248, 1470, 4249 }, - -1, - } }, - - /* replace1497_0 -> 11 in the cache */ - /* replace1497_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 1, - { 11, 268 }, - -1, - } }, - - /* ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@16', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1498_0_0_0 -> 11 in the cache */ - /* search1498_0_0_1 -> 268 in the cache */ - /* search1498_0_0 -> 4247 in the cache */ - /* search1498_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 4247, 11 }, - -1, - } }, - /* search1498_1_0 -> 11 in the cache */ - /* search1498_1_1 -> 268 in the cache */ - /* search1498_1 -> 4249 in the cache */ - /* search1498_2 -> 1470 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4252, 4249, 1470 }, - -1, - } }, - - /* replace1498_0 -> 11 in the cache */ - /* replace1498_1 -> 268 in the cache */ - /* replace1498 -> 4251 in the cache */ - - /* ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@16', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1499_0_0_0 -> 11 in the cache */ - /* search1499_0_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_uadd_carry, - 1, 1, - { 11, 268 }, - -1, - } }, - /* search1499_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 4254, 869 }, - -1, - } }, - /* search1499_1_0 -> 11 in the cache */ - /* search1499_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 2, 1, - { 11, 268 }, - -1, - } }, - /* search1499_2 -> 1470 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4255, 4256, 1470 }, - -1, - } }, - - /* replace1499_0 -> 11 in the cache */ - /* replace1499_1 -> 268 in the cache */ - /* replace1499 -> 4251 in the cache */ - - /* ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@16', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1500_0_0_0 -> 11 in the cache */ - /* search1500_0_0_1 -> 268 in the cache */ - /* search1500_0_0 -> 4254 in the cache */ - /* search1500_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 4254, 869 }, - -1, - } }, - /* search1500_1 -> 1470 in the cache */ - /* search1500_2_0 -> 11 in the cache */ - /* search1500_2_1 -> 268 in the cache */ - /* search1500_2 -> 4256 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4258, 1470, 4256 }, - -1, - } }, - - /* replace1500_0 -> 11 in the cache */ - /* replace1500_1 -> 268 in the cache */ - /* replace1500 -> 4251 in the cache */ - - /* ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@32', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1501_0_0_0 -> 16 in the cache */ - /* search1501_0_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 16, 36 }, - -1, - } }, - /* search1501_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 4260, 16 }, - -1, - } }, - /* search1501_1 -> 130 in the cache */ - /* search1501_2_0 -> 16 in the cache */ - /* search1501_2_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4261, 130, 4262 }, - -1, - } }, - - /* replace1501_0 -> 16 in the cache */ - /* replace1501_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uadd_sat, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@32', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1502_0_0_0 -> 16 in the cache */ - /* search1502_0_0_1 -> 36 in the cache */ - /* search1502_0_0 -> 4260 in the cache */ - /* search1502_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 4260, 16 }, - -1, - } }, - /* search1502_1_0 -> 16 in the cache */ - /* search1502_1_1 -> 36 in the cache */ - /* search1502_1 -> 4262 in the cache */ - /* search1502_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4265, 4262, 130 }, - -1, - } }, - - /* replace1502_0 -> 16 in the cache */ - /* replace1502_1 -> 36 in the cache */ - /* replace1502 -> 4264 in the cache */ - - /* ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@32', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1503_0_0_0 -> 16 in the cache */ - /* search1503_0_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_uadd_carry, - 1, 1, - { 16, 36 }, - -1, - } }, - /* search1503_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 4267, 128 }, - -1, - } }, - /* search1503_1_0 -> 16 in the cache */ - /* search1503_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 1, - { 16, 36 }, - -1, - } }, - /* search1503_2 -> 130 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4268, 4269, 130 }, - -1, - } }, - - /* replace1503_0 -> 16 in the cache */ - /* replace1503_1 -> 36 in the cache */ - /* replace1503 -> 4264 in the cache */ - - /* ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@32', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1504_0_0_0 -> 16 in the cache */ - /* search1504_0_0_1 -> 36 in the cache */ - /* search1504_0_0 -> 4267 in the cache */ - /* search1504_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 4267, 128 }, - -1, - } }, - /* search1504_1 -> 130 in the cache */ - /* search1504_2_0 -> 16 in the cache */ - /* search1504_2_1 -> 36 in the cache */ - /* search1504_2 -> 4269 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4271, 130, 4269 }, - -1, - } }, - - /* replace1504_0 -> 16 in the cache */ - /* replace1504_1 -> 36 in the cache */ - /* replace1504 -> 4264 in the cache */ - - /* ('bcsel', ('ult', ('iadd', 'a', 'b'), 'a'), -1, ('iadd@64', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1505_0_0_0 -> 21 in the cache */ - /* search1505_0_0_1 -> 41 in the cache */ - /* search1505_0_0 -> 3916 in the cache */ - /* search1505_0_1 -> 21 in the cache */ - /* search1505_0 -> 3917 in the cache */ - /* search1505_1 -> 1512 in the cache */ - /* search1505_2_0 -> 21 in the cache */ - /* search1505_2_1 -> 41 in the cache */ - /* search1505_2 -> 3918 in the cache */ - /* search1505 -> 3919 in the cache */ - - /* replace1505_0 -> 21 in the cache */ - /* replace1505_1 -> 41 in the cache */ - /* replace1505 -> 3915 in the cache */ - - /* ('bcsel', ('uge', ('iadd', 'a', 'b'), 'a'), ('iadd@64', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1506_0_0_0 -> 21 in the cache */ - /* search1506_0_0_1 -> 41 in the cache */ - /* search1506_0_0 -> 3916 in the cache */ - /* search1506_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 1, - { 3916, 21 }, - -1, - } }, - /* search1506_1_0 -> 21 in the cache */ - /* search1506_1_1 -> 41 in the cache */ - /* search1506_1 -> 3918 in the cache */ - /* search1506_2 -> 1512 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4273, 3918, 1512 }, - -1, - } }, - - /* replace1506_0 -> 21 in the cache */ - /* replace1506_1 -> 41 in the cache */ - /* replace1506 -> 3915 in the cache */ - - /* ('bcsel', ('ieq', ('uadd_carry', 'a', 'b'), 0), ('iadd@64', 'a', 'b'), -1) => ('uadd_sat', 'a', 'b') */ - /* search1507_0_0_0 -> 21 in the cache */ - /* search1507_0_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_uadd_carry, - 1, 1, - { 21, 41 }, - -1, - } }, - /* search1507_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 4275, 910 }, - -1, - } }, - /* search1507_1_0 -> 21 in the cache */ - /* search1507_1_1 -> 41 in the cache */ - /* search1507_1 -> 3932 in the cache */ - /* search1507_2 -> 1512 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4276, 3932, 1512 }, - -1, - } }, - - /* replace1507_0 -> 21 in the cache */ - /* replace1507_1 -> 41 in the cache */ - /* replace1507 -> 3915 in the cache */ - - /* ('bcsel', ('ine', ('uadd_carry', 'a', 'b'), 0), -1, ('iadd@64', 'a', 'b')) => ('uadd_sat', 'a', 'b') */ - /* search1508_0_0_0 -> 21 in the cache */ - /* search1508_0_0_1 -> 41 in the cache */ - /* search1508_0_0 -> 4275 in the cache */ - /* search1508_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 4275, 910 }, - -1, - } }, - /* search1508_1 -> 1512 in the cache */ - /* search1508_2_0 -> 21 in the cache */ - /* search1508_2_1 -> 41 in the cache */ - /* search1508_2 -> 3932 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 3, - { 4278, 1512, 3932 }, - -1, - } }, - - /* replace1508_0 -> 21 in the cache */ - /* replace1508_1 -> 41 in the cache */ - /* replace1508 -> 3915 in the cache */ - - /* ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@8', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1509_0_0 -> 6 in the cache */ - /* search1509_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 6, 2280 }, - -1, - } }, - /* search1509_1 -> 848 in the cache */ - /* search1509_2_0 -> 6 in the cache */ - /* search1509_2_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 6, 4281 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4280, 848, 4282 }, - -1, - } }, - - /* replace1509_0 -> 6 in the cache */ - /* replace1509_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_usub_sat, - -1, 0, - { 6, 2280 }, - -1, - } }, - - /* ('bcsel', ('uge', 'a', 'b'), ('iadd@8', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1510_0_0 -> 6 in the cache */ - /* search1510_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 6, 2280 }, - -1, - } }, - /* search1510_1_0 -> 6 in the cache */ - /* search1510_1_1_0 -> 2280 in the cache */ - /* search1510_1_1 -> 4281 in the cache */ - /* search1510_1 -> 4282 in the cache */ - /* search1510_2 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4285, 4282, 848 }, - -1, - } }, - - /* replace1510_0 -> 6 in the cache */ - /* replace1510_1 -> 2280 in the cache */ - /* replace1510 -> 4284 in the cache */ - - /* ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@8', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1511_0_0_0 -> 6 in the cache */ - /* search1511_0_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_usub_borrow, - -1, 0, - { 6, 2280 }, - -1, - } }, - /* search1511_0_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 4287, 848 }, - -1, - } }, - /* search1511_1_0 -> 6 in the cache */ - /* search1511_1_1_0 -> 2280 in the cache */ - /* search1511_1_1 -> 4281 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 6, 4281 }, - -1, - } }, - /* search1511_2 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4288, 4289, 848 }, - -1, - } }, - - /* replace1511_0 -> 6 in the cache */ - /* replace1511_1 -> 2280 in the cache */ - /* replace1511 -> 4284 in the cache */ - - /* ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@8', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1512_0_0_0 -> 6 in the cache */ - /* search1512_0_0_1 -> 2280 in the cache */ - /* search1512_0_0 -> 4287 in the cache */ - /* search1512_0_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4287, 848 }, - -1, - } }, - /* search1512_1 -> 848 in the cache */ - /* search1512_2_0 -> 6 in the cache */ - /* search1512_2_1_0 -> 2280 in the cache */ - /* search1512_2_1 -> 4281 in the cache */ - /* search1512_2 -> 4289 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4291, 848, 4289 }, - -1, - } }, - - /* replace1512_0 -> 6 in the cache */ - /* replace1512_1 -> 2280 in the cache */ - /* replace1512 -> 4284 in the cache */ - - /* ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@16', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1513_0_0 -> 11 in the cache */ - /* search1513_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 11, 268 }, - -1, - } }, - /* search1513_1 -> 869 in the cache */ - /* search1513_2_0 -> 11 in the cache */ - /* search1513_2_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 11, 4294 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4293, 869, 4295 }, - -1, - } }, - - /* replace1513_0 -> 11 in the cache */ - /* replace1513_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_usub_sat, - -1, 0, - { 11, 268 }, - -1, - } }, - - /* ('bcsel', ('uge', 'a', 'b'), ('iadd@16', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1514_0_0 -> 11 in the cache */ - /* search1514_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 11, 268 }, - -1, - } }, - /* search1514_1_0 -> 11 in the cache */ - /* search1514_1_1_0 -> 268 in the cache */ - /* search1514_1_1 -> 4294 in the cache */ - /* search1514_1 -> 4295 in the cache */ - /* search1514_2 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4298, 4295, 869 }, - -1, - } }, - - /* replace1514_0 -> 11 in the cache */ - /* replace1514_1 -> 268 in the cache */ - /* replace1514 -> 4297 in the cache */ - - /* ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@16', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1515_0_0_0 -> 11 in the cache */ - /* search1515_0_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_usub_borrow, - -1, 0, - { 11, 268 }, - -1, - } }, - /* search1515_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 4300, 869 }, - -1, - } }, - /* search1515_1_0 -> 11 in the cache */ - /* search1515_1_1_0 -> 268 in the cache */ - /* search1515_1_1 -> 4294 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 11, 4294 }, - -1, - } }, - /* search1515_2 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4301, 4302, 869 }, - -1, - } }, - - /* replace1515_0 -> 11 in the cache */ - /* replace1515_1 -> 268 in the cache */ - /* replace1515 -> 4297 in the cache */ - - /* ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@16', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1516_0_0_0 -> 11 in the cache */ - /* search1516_0_0_1 -> 268 in the cache */ - /* search1516_0_0 -> 4300 in the cache */ - /* search1516_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4300, 869 }, - -1, - } }, - /* search1516_1 -> 869 in the cache */ - /* search1516_2_0 -> 11 in the cache */ - /* search1516_2_1_0 -> 268 in the cache */ - /* search1516_2_1 -> 4294 in the cache */ - /* search1516_2 -> 4302 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4304, 869, 4302 }, - -1, - } }, - - /* replace1516_0 -> 11 in the cache */ - /* replace1516_1 -> 268 in the cache */ - /* replace1516 -> 4297 in the cache */ - - /* ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@32', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1517_0_0 -> 16 in the cache */ - /* search1517_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 36 }, - -1, - } }, - /* search1517_1 -> 128 in the cache */ - /* search1517_2_0 -> 16 in the cache */ - /* search1517_2_1_0 -> 36 in the cache */ - /* search1517_2_1 -> 2940 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 16, 2940 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4306, 128, 4307 }, - -1, - } }, - - /* replace1517_0 -> 16 in the cache */ - /* replace1517_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_usub_sat, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* ('bcsel', ('uge', 'a', 'b'), ('iadd@32', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1518_0_0 -> 16 in the cache */ - /* search1518_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 36 }, - -1, - } }, - /* search1518_1_0 -> 16 in the cache */ - /* search1518_1_1_0 -> 36 in the cache */ - /* search1518_1_1 -> 2940 in the cache */ - /* search1518_1 -> 4307 in the cache */ - /* search1518_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4310, 4307, 128 }, - -1, - } }, - - /* replace1518_0 -> 16 in the cache */ - /* replace1518_1 -> 36 in the cache */ - /* replace1518 -> 4309 in the cache */ - - /* ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@32', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1519_0_0_0 -> 16 in the cache */ - /* search1519_0_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_usub_borrow, - -1, 0, - { 16, 36 }, - -1, - } }, - /* search1519_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 4312, 128 }, - -1, - } }, - /* search1519_1_0 -> 16 in the cache */ - /* search1519_1_1_0 -> 36 in the cache */ - /* search1519_1_1 -> 2940 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 16, 2940 }, - -1, - } }, - /* search1519_2 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4313, 4314, 128 }, - -1, - } }, - - /* replace1519_0 -> 16 in the cache */ - /* replace1519_1 -> 36 in the cache */ - /* replace1519 -> 4309 in the cache */ - - /* ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@32', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1520_0_0_0 -> 16 in the cache */ - /* search1520_0_0_1 -> 36 in the cache */ - /* search1520_0_0 -> 4312 in the cache */ - /* search1520_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4312, 128 }, - -1, - } }, - /* search1520_1 -> 128 in the cache */ - /* search1520_2_0 -> 16 in the cache */ - /* search1520_2_1_0 -> 36 in the cache */ - /* search1520_2_1 -> 2940 in the cache */ - /* search1520_2 -> 4314 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4316, 128, 4314 }, - -1, - } }, - - /* replace1520_0 -> 16 in the cache */ - /* replace1520_1 -> 36 in the cache */ - /* replace1520 -> 4309 in the cache */ - - /* ('bcsel', ('ult', 'a', 'b'), 0, ('iadd@64', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1521_0_0 -> 21 in the cache */ - /* search1521_0_1 -> 41 in the cache */ - /* search1521_0 -> 3926 in the cache */ - /* search1521_1 -> 910 in the cache */ - /* search1521_2_0 -> 21 in the cache */ - /* search1521_2_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 21, 4318 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 3926, 910, 4319 }, - -1, - } }, - - /* replace1521_0 -> 21 in the cache */ - /* replace1521_1 -> 41 in the cache */ - /* replace1521 -> 3925 in the cache */ - - /* ('bcsel', ('uge', 'a', 'b'), ('iadd@64', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1522_0_0 -> 21 in the cache */ - /* search1522_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 21, 41 }, - -1, - } }, - /* search1522_1_0 -> 21 in the cache */ - /* search1522_1_1_0 -> 41 in the cache */ - /* search1522_1_1 -> 4318 in the cache */ - /* search1522_1 -> 4319 in the cache */ - /* search1522_2 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 4321, 4319, 910 }, - -1, - } }, - - /* replace1522_0 -> 21 in the cache */ - /* replace1522_1 -> 41 in the cache */ - /* replace1522 -> 3925 in the cache */ - - /* ('bcsel', ('ieq', ('usub_borrow', 'a', 'b'), 0), ('iadd@64', 'a', ('ineg', 'b')), 0) => ('usub_sat', 'a', 'b') */ - /* search1523_0_0_0 -> 21 in the cache */ - /* search1523_0_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_usub_borrow, - -1, 0, - { 21, 41 }, - -1, - } }, - /* search1523_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 4323, 910 }, - -1, - } }, - /* search1523_1_0 -> 21 in the cache */ - /* search1523_1_1_0 -> 41 in the cache */ - /* search1523_1_1 -> 4318 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 21, 4318 }, - -1, - } }, - /* search1523_2 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4324, 4325, 910 }, - -1, - } }, - - /* replace1523_0 -> 21 in the cache */ - /* replace1523_1 -> 41 in the cache */ - /* replace1523 -> 3925 in the cache */ - - /* ('bcsel', ('ine', ('usub_borrow', 'a', 'b'), 0), 0, ('iadd@64', 'a', ('ineg', 'b'))) => ('usub_sat', 'a', 'b') */ - /* search1524_0_0_0 -> 21 in the cache */ - /* search1524_0_0_1 -> 41 in the cache */ - /* search1524_0_0 -> 4323 in the cache */ - /* search1524_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 4323, 910 }, - -1, - } }, - /* search1524_1 -> 910 in the cache */ - /* search1524_2_0 -> 21 in the cache */ - /* search1524_2_1_0 -> 41 in the cache */ - /* search1524_2_1 -> 4318 in the cache */ - /* search1524_2 -> 4325 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4327, 910, 4325 }, - -1, - } }, - - /* replace1524_0 -> 21 in the cache */ - /* replace1524_1 -> 41 in the cache */ - /* replace1524 -> 3925 in the cache */ - - /* ('iadd_sat@8', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 127, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 128, ('iadd', 'a', 'b'))) */ - /* search1525_0 -> 6 in the cache */ - /* search1525_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 1, - { 6, 2280 }, - -1, - } }, - - /* replace1525_0_0 -> 2280 in the cache */ - /* replace1525_0_1 -> 1443 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2280, 1443 }, - -1, - } }, - /* replace1525_1_0_0_0 -> 6 in the cache */ - /* replace1525_1_0_0_1 -> 2280 in the cache */ - /* replace1525_1_0_0 -> 4234 in the cache */ - /* replace1525_1_0_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 4234, 6 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 8 }, - nir_type_int, { 0x7f /* 127 */ }, - } }, - /* replace1525_1_2_0 -> 6 in the cache */ - /* replace1525_1_2_1 -> 2280 in the cache */ - /* replace1525_1_2 -> 4236 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4331, 4332, 4236 }, - -1, - } }, - /* replace1525_2_0_0 -> 6 in the cache */ - /* replace1525_2_0_1_0 -> 6 in the cache */ - /* replace1525_2_0_1_1 -> 2280 in the cache */ - /* replace1525_2_0_1 -> 4243 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 6, 4243 }, - -1, - } }, - /* replace1525_2_1 -> 7 in the cache */ - /* replace1525_2_2_0 -> 6 in the cache */ - /* replace1525_2_2_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_iadd, - 3, 1, - { 6, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4334, 7, 4335 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 4330, 4333, 4336 }, - -1, - } }, - - /* ('isub_sat@8', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 127, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 128, ('isub', 'a', 'b'))) */ - /* search1526_0 -> 6 in the cache */ - /* search1526_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_isub_sat, - -1, 0, - { 6, 2280 }, - -1, - } }, - - /* replace1526_0_0 -> 2280 in the cache */ - /* replace1526_0_1 -> 848 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2280, 848 }, - -1, - } }, - /* replace1526_1_0_0_0 -> 6 in the cache */ - /* replace1526_1_0_0_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 6, 2280 }, - -1, - } }, - /* replace1526_1_0_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4340, 6 }, - -1, - } }, - /* replace1526_1_1 -> 4332 in the cache */ - /* replace1526_1_2_0 -> 6 in the cache */ - /* replace1526_1_2_1 -> 2280 in the cache */ - /* replace1526_1_2 -> 4340 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4341, 4332, 4340 }, - -1, - } }, - /* replace1526_2_0_0 -> 6 in the cache */ - /* replace1526_2_0_1_0 -> 6 in the cache */ - /* replace1526_2_0_1_1 -> 2280 in the cache */ - /* replace1526_2_0_1 -> 4340 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 6, 4340 }, - -1, - } }, - /* replace1526_2_1 -> 7 in the cache */ - /* replace1526_2_2_0 -> 6 in the cache */ - /* replace1526_2_2_1 -> 2280 in the cache */ - /* replace1526_2_2 -> 4340 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4343, 7, 4340 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4339, 4342, 4344 }, - -1, - } }, - - /* ('iadd_sat@16', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 32767, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 32768, ('iadd', 'a', 'b'))) */ - /* search1527_0 -> 11 in the cache */ - /* search1527_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 1, - { 11, 268 }, - -1, - } }, - - /* replace1527_0_0 -> 268 in the cache */ - /* replace1527_0_1 -> 1465 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 268, 1465 }, - -1, - } }, - /* replace1527_1_0_0_0 -> 11 in the cache */ - /* replace1527_1_0_0_1 -> 268 in the cache */ - /* replace1527_1_0_0 -> 4247 in the cache */ - /* replace1527_1_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 4247, 11 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0x7fff /* 32767 */ }, - } }, - /* replace1527_1_2_0 -> 11 in the cache */ - /* replace1527_1_2_1 -> 268 in the cache */ - /* replace1527_1_2 -> 4249 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4348, 4349, 4249 }, - -1, - } }, - /* replace1527_2_0_0 -> 11 in the cache */ - /* replace1527_2_0_1_0 -> 11 in the cache */ - /* replace1527_2_0_1_1 -> 268 in the cache */ - /* replace1527_2_0_1 -> 4256 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 11, 4256 }, - -1, - } }, - /* replace1527_2_1 -> 12 in the cache */ - /* replace1527_2_2_0 -> 11 in the cache */ - /* replace1527_2_2_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 3, 1, - { 11, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4351, 12, 4352 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 4347, 4350, 4353 }, - -1, - } }, - - /* ('isub_sat@16', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 32767, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 32768, ('isub', 'a', 'b'))) */ - /* search1528_0 -> 11 in the cache */ - /* search1528_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_isub_sat, - -1, 0, - { 11, 268 }, - -1, - } }, - - /* replace1528_0_0 -> 268 in the cache */ - /* replace1528_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 268, 869 }, - -1, - } }, - /* replace1528_1_0_0_0 -> 11 in the cache */ - /* replace1528_1_0_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 11, 268 }, - -1, - } }, - /* replace1528_1_0_1 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4357, 11 }, - -1, - } }, - /* replace1528_1_1 -> 4349 in the cache */ - /* replace1528_1_2_0 -> 11 in the cache */ - /* replace1528_1_2_1 -> 268 in the cache */ - /* replace1528_1_2 -> 4357 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4358, 4349, 4357 }, - -1, - } }, - /* replace1528_2_0_0 -> 11 in the cache */ - /* replace1528_2_0_1_0 -> 11 in the cache */ - /* replace1528_2_0_1_1 -> 268 in the cache */ - /* replace1528_2_0_1 -> 4357 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 4357 }, - -1, - } }, - /* replace1528_2_1 -> 12 in the cache */ - /* replace1528_2_2_0 -> 11 in the cache */ - /* replace1528_2_2_1 -> 268 in the cache */ - /* replace1528_2_2 -> 4357 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4360, 12, 4357 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4356, 4359, 4361 }, - -1, - } }, - - /* ('iadd_sat@32', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 2147483647, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 2147483648, ('iadd', 'a', 'b'))) */ - /* search1529_0 -> 16 in the cache */ - /* search1529_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd_sat, - 0, 1, - { 16, 36 }, - -1, - } }, - - /* replace1529_0_0 -> 36 in the cache */ - /* replace1529_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 36, 406 }, - -1, - } }, - /* replace1529_1_0_0_0 -> 16 in the cache */ - /* replace1529_1_0_0_1 -> 36 in the cache */ - /* replace1529_1_0_0 -> 4260 in the cache */ - /* replace1529_1_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 4260, 16 }, - -1, - } }, - /* replace1529_1_1 -> 1001 in the cache */ - /* replace1529_1_2_0 -> 16 in the cache */ - /* replace1529_1_2_1 -> 36 in the cache */ - /* replace1529_1_2 -> 4262 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4365, 1001, 4262 }, - -1, - } }, - /* replace1529_2_0_0 -> 16 in the cache */ - /* replace1529_2_0_1_0 -> 16 in the cache */ - /* replace1529_2_0_1_1 -> 36 in the cache */ - /* replace1529_2_0_1 -> 4269 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 16, 4269 }, - -1, - } }, - /* replace1529_2_1 -> 17 in the cache */ - /* replace1529_2_2_0 -> 16 in the cache */ - /* replace1529_2_2_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 3, 1, - { 16, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4367, 17, 4368 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 4364, 4366, 4369 }, - -1, - } }, - - /* ('isub_sat@32', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 2147483647, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 2147483648, ('isub', 'a', 'b'))) */ - /* search1530_0 -> 16 in the cache */ - /* search1530_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub_sat, - -1, 0, - { 16, 36 }, - -1, - } }, - - /* replace1530_0_0 -> 36 in the cache */ - /* replace1530_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 36, 128 }, - -1, - } }, - /* replace1530_1_0_0_0 -> 16 in the cache */ - /* replace1530_1_0_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 16, 36 }, - -1, - } }, - /* replace1530_1_0_1 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4373, 16 }, - -1, - } }, - /* replace1530_1_1 -> 1001 in the cache */ - /* replace1530_1_2_0 -> 16 in the cache */ - /* replace1530_1_2_1 -> 36 in the cache */ - /* replace1530_1_2 -> 4373 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4374, 1001, 4373 }, - -1, - } }, - /* replace1530_2_0_0 -> 16 in the cache */ - /* replace1530_2_0_1_0 -> 16 in the cache */ - /* replace1530_2_0_1_1 -> 36 in the cache */ - /* replace1530_2_0_1 -> 4373 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4373 }, - -1, - } }, - /* replace1530_2_1 -> 17 in the cache */ - /* replace1530_2_2_0 -> 16 in the cache */ - /* replace1530_2_2_1 -> 36 in the cache */ - /* replace1530_2_2 -> 4373 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4376, 17, 4373 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4372, 4375, 4377 }, - -1, - } }, - - /* ('iadd_sat@64', 'a', 'b') => ('bcsel', ('ige', 'b', 1), ('bcsel', ('ilt', ('iadd', 'a', 'b'), 'a'), 9223372036854775807, ('iadd', 'a', 'b')), ('bcsel', ('ilt', 'a', ('iadd', 'a', 'b')), 9223372036854775808, ('iadd', 'a', 'b'))) */ - /* search1531_0 -> 21 in the cache */ - /* search1531_1 -> 41 in the cache */ - /* search1531 -> 3929 in the cache */ - - /* replace1531_0_0 -> 41 in the cache */ - /* replace1531_0_1 -> 1507 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 41, 1507 }, - -1, - } }, - /* replace1531_1_0_0_0 -> 21 in the cache */ - /* replace1531_1_0_0_1 -> 41 in the cache */ - /* replace1531_1_0_0 -> 3916 in the cache */ - /* replace1531_1_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 3916, 21 }, - -1, - } }, - /* replace1531_1_1 -> 3940 in the cache */ - /* replace1531_1_2_0 -> 21 in the cache */ - /* replace1531_1_2_1 -> 41 in the cache */ - /* replace1531_1_2 -> 3918 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4380, 3940, 3918 }, - -1, - } }, - /* replace1531_2_0_0 -> 21 in the cache */ - /* replace1531_2_0_1_0 -> 21 in the cache */ - /* replace1531_2_0_1_1 -> 41 in the cache */ - /* replace1531_2_0_1 -> 3932 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 1, - { 21, 3932 }, - -1, - } }, - /* replace1531_2_1 -> 22 in the cache */ - /* replace1531_2_2_0 -> 21 in the cache */ - /* replace1531_2_2_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 3, 1, - { 21, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 4382, 22, 4383 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 4379, 4381, 4384 }, - -1, - } }, - - /* ('isub_sat@64', 'a', 'b') => ('bcsel', ('ilt', 'b', 0), ('bcsel', ('ilt', ('isub', 'a', 'b'), 'a'), 9223372036854775807, ('isub', 'a', 'b')), ('bcsel', ('ilt', 'a', ('isub', 'a', 'b')), 9223372036854775808, ('isub', 'a', 'b'))) */ - /* search1532_0 -> 21 in the cache */ - /* search1532_1 -> 41 in the cache */ - /* search1532 -> 3943 in the cache */ - - /* replace1532_0_0 -> 41 in the cache */ - /* replace1532_0_1 -> 910 in the cache */ - /* replace1532_0 -> 3930 in the cache */ - /* replace1532_1_0_0_0 -> 21 in the cache */ - /* replace1532_1_0_0_1 -> 41 in the cache */ - /* replace1532_1_0_0 -> 3927 in the cache */ - /* replace1532_1_0_1 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 3927, 21 }, - -1, - } }, - /* replace1532_1_1 -> 3940 in the cache */ - /* replace1532_1_2_0 -> 21 in the cache */ - /* replace1532_1_2_1 -> 41 in the cache */ - /* replace1532_1_2 -> 3927 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4386, 3940, 3927 }, - -1, - } }, - /* replace1532_2_0_0 -> 21 in the cache */ - /* replace1532_2_0_1_0 -> 21 in the cache */ - /* replace1532_2_0_1_1 -> 41 in the cache */ - /* replace1532_2_0_1 -> 3927 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 3927 }, - -1, - } }, - /* replace1532_2_1 -> 22 in the cache */ - /* replace1532_2_2_0 -> 21 in the cache */ - /* replace1532_2_2_1 -> 41 in the cache */ - /* replace1532_2_2 -> 3927 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 4388, 22, 3927 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 3930, 4387, 4389 }, - -1, - } }, - - /* ('inot', ('ior(is_used_once)', ('feq', 'a', 'b'), ('feq', 'c', 'd'))) => ('iand', ('fneu', 'a', 'b'), ('fneu', 'c', 'd')) */ - /* search1533_0_0_0 -> 0 in the cache */ - /* search1533_0_0_1 -> 3 in the cache */ - /* search1533_0_0 -> 1087 in the cache */ - /* search1533_0_1_0 -> 158 in the cache */ - /* search1533_0_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 2, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1087, 4391 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 4392 }, - -1, - } }, - - /* replace1533_0_0 -> 0 in the cache */ - /* replace1533_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 0, 3 }, - -1, - } }, - /* replace1533_1_0 -> 158 in the cache */ - /* replace1533_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 2, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4394, 4395 }, - -1, - } }, - - /* ('inot', ('iand(is_used_once)', ('feq', 'a', 'b'), ('feq', 'c', 'd'))) => ('ior', ('fneu', 'a', 'b'), ('fneu', 'c', 'd')) */ - /* search1534_0_0_0 -> 0 in the cache */ - /* search1534_0_0_1 -> 3 in the cache */ - /* search1534_0_0 -> 1087 in the cache */ - /* search1534_0_1_0 -> 158 in the cache */ - /* search1534_0_1_1 -> 159 in the cache */ - /* search1534_0_1 -> 4391 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1087, 4391 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 4397 }, - -1, - } }, - - /* replace1534_0_0 -> 0 in the cache */ - /* replace1534_0_1 -> 3 in the cache */ - /* replace1534_0 -> 4394 in the cache */ - /* replace1534_1_0 -> 158 in the cache */ - /* replace1534_1_1 -> 159 in the cache */ - /* replace1534_1 -> 4395 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4394, 4395 }, - -1, - } }, - - /* ('inot', ('ior(is_used_once)', ('feq', 'a', 'b'), ('fneu', 'c', 'd'))) => ('iand', ('fneu', 'a', 'b'), ('feq', 'c', 'd')) */ - /* search1535_0_0_0 -> 0 in the cache */ - /* search1535_0_0_1 -> 3 in the cache */ - /* search1535_0_0 -> 1087 in the cache */ - /* search1535_0_1_0 -> 158 in the cache */ - /* search1535_0_1_1 -> 159 in the cache */ - /* search1535_0_1 -> 4395 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1087, 4395 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 4400 }, - -1, - } }, - - /* replace1535_0_0 -> 0 in the cache */ - /* replace1535_0_1 -> 3 in the cache */ - /* replace1535_0 -> 4394 in the cache */ - /* replace1535_1_0 -> 158 in the cache */ - /* replace1535_1_1 -> 159 in the cache */ - /* replace1535_1 -> 4391 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4394, 4391 }, - -1, - } }, - - /* ('inot', ('iand(is_used_once)', ('feq', 'a', 'b'), ('fneu', 'c', 'd'))) => ('ior', ('fneu', 'a', 'b'), ('feq', 'c', 'd')) */ - /* search1536_0_0_0 -> 0 in the cache */ - /* search1536_0_0_1 -> 3 in the cache */ - /* search1536_0_0 -> 1087 in the cache */ - /* search1536_0_1_0 -> 158 in the cache */ - /* search1536_0_1_1 -> 159 in the cache */ - /* search1536_0_1 -> 4395 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1087, 4395 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 4403 }, - -1, - } }, - - /* replace1536_0_0 -> 0 in the cache */ - /* replace1536_0_1 -> 3 in the cache */ - /* replace1536_0 -> 4394 in the cache */ - /* replace1536_1_0 -> 158 in the cache */ - /* replace1536_1_1 -> 159 in the cache */ - /* replace1536_1 -> 4391 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4394, 4391 }, - -1, - } }, - - /* ('inot', ('ior(is_used_once)', ('fneu', 'a', 'b'), ('fneu', 'c', 'd'))) => ('iand', ('feq', 'a', 'b'), ('feq', 'c', 'd')) */ - /* search1537_0_0_0 -> 0 in the cache */ - /* search1537_0_0_1 -> 3 in the cache */ - /* search1537_0_0 -> 4394 in the cache */ - /* search1537_0_1_0 -> 158 in the cache */ - /* search1537_0_1_1 -> 159 in the cache */ - /* search1537_0_1 -> 4395 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4394, 4395 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 4406 }, - -1, - } }, - - /* replace1537_0_0 -> 0 in the cache */ - /* replace1537_0_1 -> 3 in the cache */ - /* replace1537_0 -> 1087 in the cache */ - /* replace1537_1_0 -> 158 in the cache */ - /* replace1537_1_1 -> 159 in the cache */ - /* replace1537_1 -> 4391 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 1087, 4391 }, - -1, - } }, - - /* ('inot', ('iand(is_used_once)', ('fneu', 'a', 'b'), ('fneu', 'c', 'd'))) => ('ior', ('feq', 'a', 'b'), ('feq', 'c', 'd')) */ - /* search1538_0_0_0 -> 0 in the cache */ - /* search1538_0_0_1 -> 3 in the cache */ - /* search1538_0_0 -> 4394 in the cache */ - /* search1538_0_1_0 -> 158 in the cache */ - /* search1538_0_1_1 -> 159 in the cache */ - /* search1538_0_1 -> 4395 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4394, 4395 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 3, - { 4409 }, - -1, - } }, - - /* replace1538_0_0 -> 0 in the cache */ - /* replace1538_0_1 -> 3 in the cache */ - /* replace1538_0 -> 1087 in the cache */ - /* replace1538_1_0 -> 158 in the cache */ - /* replace1538_1_1 -> 159 in the cache */ - /* replace1538_1 -> 4391 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 1087, 4391 }, - -1, - } }, - - /* ('f2f', ('b2f', 'a')) => ('b2f', 'a') */ - /* search1539_0_0 -> 32 in the cache */ - /* search1539_0 -> 1541 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2f, - -1, 0, - { 1541 }, - -1, - } }, - - /* replace1539_0 -> 32 in the cache */ - /* replace1539 -> 1541 in the cache */ - - /* ('f2u', ('b2f', 'a')) => ('b2i', 'a') */ - /* search1540_0_0 -> 32 in the cache */ - /* search1540_0 -> 1541 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2u, - -1, 0, - { 1541 }, - -1, - } }, - - /* replace1540_0 -> 32 in the cache */ - /* replace1540 -> 3262 in the cache */ - - /* ('f2i', ('b2f', 'a')) => ('b2i', 'a') */ - /* search1541_0_0 -> 32 in the cache */ - /* search1541_0 -> 1541 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_f2i, - -1, 0, - { 1541 }, - -1, - } }, - - /* replace1541_0 -> 32 in the cache */ - /* replace1541 -> 3262 in the cache */ - - /* ('u2f', ('b2i', 'a')) => ('b2f', 'a') */ - /* search1542_0_0 -> 32 in the cache */ - /* search1542_0 -> 3262 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_u2f, - -1, 0, - { 3262 }, - -1, - } }, - - /* replace1542_0 -> 32 in the cache */ - /* replace1542 -> 1541 in the cache */ - - /* ('u2u', ('b2i', 'a')) => ('b2i', 'a') */ - /* search1543_0_0 -> 32 in the cache */ - /* search1543_0 -> 3262 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_u2u, - -1, 0, - { 3262 }, - -1, - } }, - - /* replace1543_0 -> 32 in the cache */ - /* replace1543 -> 3262 in the cache */ - - /* ('i2f', ('b2i', 'a')) => ('b2f', 'a') */ - /* search1544_0_0 -> 32 in the cache */ - /* search1544_0 -> 3262 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_i2f, - -1, 0, - { 3262 }, - -1, - } }, - - /* replace1544_0 -> 32 in the cache */ - /* replace1544 -> 1541 in the cache */ - - /* ('i2i', ('b2i', 'a')) => ('b2i', 'a') */ - /* search1545_0_0 -> 32 in the cache */ - /* search1545_0 -> 3262 in the cache */ - { .expression = { - { nir_search_value_expression, 0 }, - false, - false, - false, - nir_search_op_i2i, - -1, 0, - { 3262 }, - -1, - } }, - - /* replace1545_0 -> 32 in the cache */ - /* replace1545 -> 3262 in the cache */ - - /* ('i2i1', 'a@1') => a */ - /* search1546_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 770 }, - -1, - } }, - - /* replace1546 -> 770 in the cache */ - - /* ('i2i8', 'a@8') => a */ - /* search1547_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 6 }, - -1, - } }, - - /* replace1547 -> 6 in the cache */ - - /* ('i2i16', 'a@16') => a */ - /* search1548_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 11 }, - -1, - } }, - - /* replace1548 -> 11 in the cache */ - - /* ('i2i32', 'a@32') => a */ - /* search1549_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 16 }, - -1, - } }, - - /* replace1549 -> 16 in the cache */ - - /* ('i2i64', 'a@64') => a */ - /* search1550_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 21 }, - -1, - } }, - - /* replace1550 -> 21 in the cache */ - - /* ('u2u1', 'a@1') => a */ - /* search1551_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 770 }, - -1, - } }, - - /* replace1551 -> 770 in the cache */ - - /* ('u2u8', 'a@8') => a */ - /* search1552_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 6 }, - -1, - } }, - - /* replace1552 -> 6 in the cache */ - - /* ('u2u16', 'a@16') => a */ - /* search1553_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 11 }, - -1, - } }, - - /* replace1553 -> 11 in the cache */ - - /* ('u2u32', 'a@32') => a */ - /* search1554_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 16 }, - -1, - } }, - - /* replace1554 -> 16 in the cache */ - - /* ('u2u64', 'a@64') => a */ - /* search1555_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 21 }, - -1, - } }, - - /* replace1555 -> 21 in the cache */ - - /* ('f2f16', 'a@16') => a */ - /* search1556_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 11 }, - -1, - } }, - - /* replace1556 -> 11 in the cache */ - - /* ('f2f32', 'a@32') => a */ - /* search1557_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 16 }, - -1, - } }, - - /* replace1557 -> 16 in the cache */ - - /* ('f2f64', 'a@64') => a */ - /* search1558_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 21 }, - -1, - } }, - - /* replace1558 -> 21 in the cache */ - - /* ('b2b1', 'a@1') => a */ - /* search1559_0 -> 770 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_b2b1, - -1, 0, - { 770 }, - -1, - } }, - - /* replace1559 -> 770 in the cache */ - - /* ('b2b8', 'a@8') => a */ - /* search1560_0 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_b2b8, - -1, 0, - { 6 }, - -1, - } }, - - /* replace1560 -> 6 in the cache */ - - /* ('b2b16', 'a@16') => a */ - /* search1561_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2b16, - -1, 0, - { 11 }, - -1, - } }, - - /* replace1561 -> 11 in the cache */ - - /* ('b2b32', 'a@32') => a */ - /* search1562_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2b32, - -1, 0, - { 16 }, - -1, - } }, - - /* replace1562 -> 16 in the cache */ - - /* ('i2i1', ('i2i8', 'a')) => ('i2i1', 'a') */ - /* search1563_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 4436 }, - -1, - } }, - - /* replace1563_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 32 }, - -1, - } }, - - /* ('i2i1', ('u2u8', 'a')) => ('u2u1', 'a') */ - /* search1564_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 4439 }, - -1, - } }, - - /* replace1564_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 32 }, - -1, - } }, - - /* ('u2u1', ('i2i8', 'a')) => ('i2i1', 'a') */ - /* search1565_0_0 -> 32 in the cache */ - /* search1565_0 -> 4436 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 4436 }, - -1, - } }, - - /* replace1565_0 -> 32 in the cache */ - /* replace1565 -> 4438 in the cache */ - - /* ('u2u1', ('u2u8', 'a')) => ('u2u1', 'a') */ - /* search1566_0_0 -> 32 in the cache */ - /* search1566_0 -> 4439 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 4439 }, - -1, - } }, - - /* replace1566_0 -> 32 in the cache */ - /* replace1566 -> 4441 in the cache */ - - /* ('i2i1', ('i2i16', 'a')) => ('i2i1', 'a') */ - /* search1567_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 4444 }, - -1, - } }, - - /* replace1567_0 -> 32 in the cache */ - /* replace1567 -> 4438 in the cache */ - - /* ('i2i1', ('u2u16', 'a')) => ('u2u1', 'a') */ - /* search1568_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 4446 }, - -1, - } }, - - /* replace1568_0 -> 32 in the cache */ - /* replace1568 -> 4441 in the cache */ - - /* ('u2u1', ('i2i16', 'a')) => ('i2i1', 'a') */ - /* search1569_0_0 -> 32 in the cache */ - /* search1569_0 -> 4444 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 4444 }, - -1, - } }, - - /* replace1569_0 -> 32 in the cache */ - /* replace1569 -> 4438 in the cache */ - - /* ('u2u1', ('u2u16', 'a')) => ('u2u1', 'a') */ - /* search1570_0_0 -> 32 in the cache */ - /* search1570_0 -> 4446 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 4446 }, - -1, - } }, - - /* replace1570_0 -> 32 in the cache */ - /* replace1570 -> 4441 in the cache */ - - /* ('i2i1', ('i2i32', 'a')) => ('i2i1', 'a') */ - /* search1571_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 4450 }, - -1, - } }, - - /* replace1571_0 -> 32 in the cache */ - /* replace1571 -> 4438 in the cache */ - - /* ('i2i1', ('u2u32', 'a')) => ('u2u1', 'a') */ - /* search1572_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 4452 }, - -1, - } }, - - /* replace1572_0 -> 32 in the cache */ - /* replace1572 -> 4441 in the cache */ - - /* ('u2u1', ('i2i32', 'a')) => ('i2i1', 'a') */ - /* search1573_0_0 -> 32 in the cache */ - /* search1573_0 -> 4450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 4450 }, - -1, - } }, - - /* replace1573_0 -> 32 in the cache */ - /* replace1573 -> 4438 in the cache */ - - /* ('u2u1', ('u2u32', 'a')) => ('u2u1', 'a') */ - /* search1574_0_0 -> 32 in the cache */ - /* search1574_0 -> 4452 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 4452 }, - -1, - } }, - - /* replace1574_0 -> 32 in the cache */ - /* replace1574 -> 4441 in the cache */ - - /* ('i2i1', ('i2i64', 'a')) => ('i2i1', 'a') */ - /* search1575_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1575_0 -> 32 in the cache */ - /* replace1575 -> 4438 in the cache */ - - /* ('i2i1', ('u2u64', 'a')) => ('u2u1', 'a') */ - /* search1576_0_0 -> 32 in the cache */ - /* search1576_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_i2i1, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1576_0 -> 32 in the cache */ - /* replace1576 -> 4441 in the cache */ - - /* ('u2u1', ('i2i64', 'a')) => ('i2i1', 'a') */ - /* search1577_0_0 -> 32 in the cache */ - /* search1577_0 -> 4456 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1577_0 -> 32 in the cache */ - /* replace1577 -> 4438 in the cache */ - - /* ('u2u1', ('u2u64', 'a')) => ('u2u1', 'a') */ - /* search1578_0_0 -> 32 in the cache */ - /* search1578_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_u2u1, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1578_0 -> 32 in the cache */ - /* replace1578 -> 4441 in the cache */ - - /* ('i2i8', ('i2i1', 'a@1')) => ('i2i8', 'a') */ - /* search1579_0_0 -> 770 in the cache */ - /* search1579_0 -> 4419 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 4419 }, - -1, - } }, - - /* replace1579_0 -> 770 in the cache */ - /* replace1579 -> 2045 in the cache */ - - /* ('u2u8', ('u2u1', 'a@1')) => ('u2u8', 'a') */ - /* search1580_0_0 -> 770 in the cache */ - /* search1580_0 -> 4424 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 4424 }, - -1, - } }, - - /* replace1580_0 -> 770 in the cache */ - /* replace1580 -> 2047 in the cache */ - - /* ('i2i8', ('i2i16', 'a')) => ('i2i8', 'a') */ - /* search1581_0_0 -> 32 in the cache */ - /* search1581_0 -> 4444 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 4444 }, - -1, - } }, - - /* replace1581_0 -> 32 in the cache */ - /* replace1581 -> 4436 in the cache */ - - /* ('i2i8', ('u2u16', 'a')) => ('u2u8', 'a') */ - /* search1582_0_0 -> 32 in the cache */ - /* search1582_0 -> 4446 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 4446 }, - -1, - } }, - - /* replace1582_0 -> 32 in the cache */ - /* replace1582 -> 4439 in the cache */ - - /* ('u2u8', ('i2i16', 'a')) => ('i2i8', 'a') */ - /* search1583_0_0 -> 32 in the cache */ - /* search1583_0 -> 4444 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 4444 }, - -1, - } }, - - /* replace1583_0 -> 32 in the cache */ - /* replace1583 -> 4436 in the cache */ - - /* ('u2u8', ('u2u16', 'a')) => ('u2u8', 'a') */ - /* search1584_0_0 -> 32 in the cache */ - /* search1584_0 -> 4446 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 4446 }, - -1, - } }, - - /* replace1584_0 -> 32 in the cache */ - /* replace1584 -> 4439 in the cache */ - - /* ('i2i8', ('i2i32', 'a')) => ('i2i8', 'a') */ - /* search1585_0_0 -> 32 in the cache */ - /* search1585_0 -> 4450 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 4450 }, - -1, - } }, - - /* replace1585_0 -> 32 in the cache */ - /* replace1585 -> 4436 in the cache */ - - /* ('i2i8', ('u2u32', 'a')) => ('u2u8', 'a') */ - /* search1586_0_0 -> 32 in the cache */ - /* search1586_0 -> 4452 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 4452 }, - -1, - } }, - - /* replace1586_0 -> 32 in the cache */ - /* replace1586 -> 4439 in the cache */ - - /* ('u2u8', ('i2i32', 'a')) => ('i2i8', 'a') */ - /* search1587_0_0 -> 32 in the cache */ - /* search1587_0 -> 4450 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 4450 }, - -1, - } }, - - /* replace1587_0 -> 32 in the cache */ - /* replace1587 -> 4436 in the cache */ - - /* ('u2u8', ('u2u32', 'a')) => ('u2u8', 'a') */ - /* search1588_0_0 -> 32 in the cache */ - /* search1588_0 -> 4452 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 4452 }, - -1, - } }, - - /* replace1588_0 -> 32 in the cache */ - /* replace1588 -> 4439 in the cache */ - - /* ('i2i8', ('i2i64', 'a')) => ('i2i8', 'a') */ - /* search1589_0_0 -> 32 in the cache */ - /* search1589_0 -> 4456 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1589_0 -> 32 in the cache */ - /* replace1589 -> 4436 in the cache */ - - /* ('i2i8', ('u2u64', 'a')) => ('u2u8', 'a') */ - /* search1590_0_0 -> 32 in the cache */ - /* search1590_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1590_0 -> 32 in the cache */ - /* replace1590 -> 4439 in the cache */ - - /* ('u2u8', ('i2i64', 'a')) => ('i2i8', 'a') */ - /* search1591_0_0 -> 32 in the cache */ - /* search1591_0 -> 4456 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1591_0 -> 32 in the cache */ - /* replace1591 -> 4436 in the cache */ - - /* ('u2u8', ('u2u64', 'a')) => ('u2u8', 'a') */ - /* search1592_0_0 -> 32 in the cache */ - /* search1592_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1592_0 -> 32 in the cache */ - /* replace1592 -> 4439 in the cache */ - - /* ('i2i16', ('i2i1', 'a@1')) => ('i2i16', 'a') */ - /* search1593_0_0 -> 770 in the cache */ - /* search1593_0 -> 4419 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4419 }, - -1, - } }, - - /* replace1593_0 -> 770 in the cache */ - /* replace1593 -> 2049 in the cache */ - - /* ('u2u16', ('u2u1', 'a@1')) => ('u2u16', 'a') */ - /* search1594_0_0 -> 770 in the cache */ - /* search1594_0 -> 4424 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4424 }, - -1, - } }, - - /* replace1594_0 -> 770 in the cache */ - /* replace1594 -> 2051 in the cache */ - - /* ('i2i16', ('i2i8', 'a@1')) => ('i2i16', 'a') */ - /* search1595_0_0 -> 770 in the cache */ - /* search1595_0 -> 2045 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 2045 }, - -1, - } }, - - /* replace1595_0 -> 770 in the cache */ - /* replace1595 -> 2049 in the cache */ - - /* ('u2u16', ('u2u8', 'a@1')) => ('u2u16', 'a') */ - /* search1596_0_0 -> 770 in the cache */ - /* search1596_0 -> 2047 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2047 }, - -1, - } }, - - /* replace1596_0 -> 770 in the cache */ - /* replace1596 -> 2051 in the cache */ - - /* ('i2i16', ('i2i8', 'a@8')) => ('i2i16', 'a') */ - /* search1597_0_0 -> 6 in the cache */ - /* search1597_0 -> 4420 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4420 }, - -1, - } }, - - /* replace1597_0 -> 6 in the cache */ - /* replace1597 -> 2091 in the cache */ - - /* ('u2u16', ('u2u8', 'a@8')) => ('u2u16', 'a') */ - /* search1598_0_0 -> 6 in the cache */ - /* search1598_0 -> 4425 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4425 }, - -1, - } }, - - /* replace1598_0 -> 6 in the cache */ - /* replace1598 -> 2093 in the cache */ - - /* ('i2i16', ('i2i32', 'a')) => ('i2i16', 'a') */ - /* search1599_0_0 -> 32 in the cache */ - /* search1599_0 -> 4450 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4450 }, - -1, - } }, - - /* replace1599_0 -> 32 in the cache */ - /* replace1599 -> 4444 in the cache */ - - /* ('i2i16', ('u2u32', 'a')) => ('u2u16', 'a') */ - /* search1600_0_0 -> 32 in the cache */ - /* search1600_0 -> 4452 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4452 }, - -1, - } }, - - /* replace1600_0 -> 32 in the cache */ - /* replace1600 -> 4446 in the cache */ - - /* ('u2u16', ('i2i32', 'a')) => ('i2i16', 'a') */ - /* search1601_0_0 -> 32 in the cache */ - /* search1601_0 -> 4450 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4450 }, - -1, - } }, - - /* replace1601_0 -> 32 in the cache */ - /* replace1601 -> 4444 in the cache */ - - /* ('u2u16', ('u2u32', 'a')) => ('u2u16', 'a') */ - /* search1602_0_0 -> 32 in the cache */ - /* search1602_0 -> 4452 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4452 }, - -1, - } }, - - /* replace1602_0 -> 32 in the cache */ - /* replace1602 -> 4446 in the cache */ - - /* ('i2i16', ('i2i64', 'a')) => ('i2i16', 'a') */ - /* search1603_0_0 -> 32 in the cache */ - /* search1603_0 -> 4456 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1603_0 -> 32 in the cache */ - /* replace1603 -> 4444 in the cache */ - - /* ('i2i16', ('u2u64', 'a')) => ('u2u16', 'a') */ - /* search1604_0_0 -> 32 in the cache */ - /* search1604_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1604_0 -> 32 in the cache */ - /* replace1604 -> 4446 in the cache */ - - /* ('u2u16', ('i2i64', 'a')) => ('i2i16', 'a') */ - /* search1605_0_0 -> 32 in the cache */ - /* search1605_0 -> 4456 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1605_0 -> 32 in the cache */ - /* replace1605 -> 4444 in the cache */ - - /* ('u2u16', ('u2u64', 'a')) => ('u2u16', 'a') */ - /* search1606_0_0 -> 32 in the cache */ - /* search1606_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1606_0 -> 32 in the cache */ - /* replace1606 -> 4446 in the cache */ - - /* ('i2i32', ('i2i1', 'a@1')) => ('i2i32', 'a') */ - /* search1607_0_0 -> 770 in the cache */ - /* search1607_0 -> 4419 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4419 }, - -1, - } }, - - /* replace1607_0 -> 770 in the cache */ - /* replace1607 -> 2061 in the cache */ - - /* ('u2u32', ('u2u1', 'a@1')) => ('u2u32', 'a') */ - /* search1608_0_0 -> 770 in the cache */ - /* search1608_0 -> 4424 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4424 }, - -1, - } }, - - /* replace1608_0 -> 770 in the cache */ - /* replace1608 -> 2059 in the cache */ - - /* ('i2i32', ('i2i8', 'a@1')) => ('i2i32', 'a') */ - /* search1609_0_0 -> 770 in the cache */ - /* search1609_0 -> 2045 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2045 }, - -1, - } }, - - /* replace1609_0 -> 770 in the cache */ - /* replace1609 -> 2061 in the cache */ - - /* ('u2u32', ('u2u8', 'a@1')) => ('u2u32', 'a') */ - /* search1610_0_0 -> 770 in the cache */ - /* search1610_0 -> 2047 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2047 }, - -1, - } }, - - /* replace1610_0 -> 770 in the cache */ - /* replace1610 -> 2059 in the cache */ - - /* ('i2i32', ('i2i8', 'a@8')) => ('i2i32', 'a') */ - /* search1611_0_0 -> 6 in the cache */ - /* search1611_0 -> 4420 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4420 }, - -1, - } }, - - /* replace1611_0 -> 6 in the cache */ - /* replace1611 -> 2101 in the cache */ - - /* ('u2u32', ('u2u8', 'a@8')) => ('u2u32', 'a') */ - /* search1612_0_0 -> 6 in the cache */ - /* search1612_0 -> 4425 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4425 }, - -1, - } }, - - /* replace1612_0 -> 6 in the cache */ - /* replace1612 -> 2099 in the cache */ - - /* ('i2i32', ('i2i16', 'a@1')) => ('i2i32', 'a') */ - /* search1613_0_0 -> 770 in the cache */ - /* search1613_0 -> 2049 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2049 }, - -1, - } }, - - /* replace1613_0 -> 770 in the cache */ - /* replace1613 -> 2061 in the cache */ - - /* ('u2u32', ('u2u16', 'a@1')) => ('u2u32', 'a') */ - /* search1614_0_0 -> 770 in the cache */ - /* search1614_0 -> 2051 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2051 }, - -1, - } }, - - /* replace1614_0 -> 770 in the cache */ - /* replace1614 -> 2059 in the cache */ - - /* ('i2i32', ('i2i16', 'a@8')) => ('i2i32', 'a') */ - /* search1615_0_0 -> 6 in the cache */ - /* search1615_0 -> 2091 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2091 }, - -1, - } }, - - /* replace1615_0 -> 6 in the cache */ - /* replace1615 -> 2101 in the cache */ - - /* ('u2u32', ('u2u16', 'a@8')) => ('u2u32', 'a') */ - /* search1616_0_0 -> 6 in the cache */ - /* search1616_0 -> 2093 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2093 }, - -1, - } }, - - /* replace1616_0 -> 6 in the cache */ - /* replace1616 -> 2099 in the cache */ - - /* ('i2i32', ('i2i16', 'a@16')) => ('i2i32', 'a') */ - /* search1617_0_0 -> 11 in the cache */ - /* search1617_0 -> 4421 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4421 }, - -1, - } }, - - /* replace1617_0 -> 11 in the cache */ - /* replace1617 -> 2127 in the cache */ - - /* ('u2u32', ('u2u16', 'a@16')) => ('u2u32', 'a') */ - /* search1618_0_0 -> 11 in the cache */ - /* search1618_0 -> 4426 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4426 }, - -1, - } }, - - /* replace1618_0 -> 11 in the cache */ - /* replace1618 -> 2129 in the cache */ - - /* ('i2i32', ('i2i64', 'a')) => ('i2i32', 'a') */ - /* search1619_0_0 -> 32 in the cache */ - /* search1619_0 -> 4456 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1619_0 -> 32 in the cache */ - /* replace1619 -> 4450 in the cache */ - - /* ('i2i32', ('u2u64', 'a')) => ('u2u32', 'a') */ - /* search1620_0_0 -> 32 in the cache */ - /* search1620_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1620_0 -> 32 in the cache */ - /* replace1620 -> 4452 in the cache */ - - /* ('u2u32', ('i2i64', 'a')) => ('i2i32', 'a') */ - /* search1621_0_0 -> 32 in the cache */ - /* search1621_0 -> 4456 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4456 }, - -1, - } }, - - /* replace1621_0 -> 32 in the cache */ - /* replace1621 -> 4450 in the cache */ - - /* ('u2u32', ('u2u64', 'a')) => ('u2u32', 'a') */ - /* search1622_0_0 -> 32 in the cache */ - /* search1622_0 -> 3376 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 3376 }, - -1, - } }, - - /* replace1622_0 -> 32 in the cache */ - /* replace1622 -> 4452 in the cache */ - - /* ('i2i64', ('i2i1', 'a@1')) => ('i2i64', 'a') */ - /* search1623_0_0 -> 770 in the cache */ - /* search1623_0 -> 4419 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4419 }, - -1, - } }, - - /* replace1623_0 -> 770 in the cache */ - /* replace1623 -> 2065 in the cache */ - - /* ('u2u64', ('u2u1', 'a@1')) => ('u2u64', 'a') */ - /* search1624_0_0 -> 770 in the cache */ - /* search1624_0 -> 4424 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 4424 }, - -1, - } }, - - /* replace1624_0 -> 770 in the cache */ - /* replace1624 -> 2063 in the cache */ - - /* ('i2i64', ('i2i8', 'a@1')) => ('i2i64', 'a') */ - /* search1625_0_0 -> 770 in the cache */ - /* search1625_0 -> 2045 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 2045 }, - -1, - } }, - - /* replace1625_0 -> 770 in the cache */ - /* replace1625 -> 2065 in the cache */ - - /* ('u2u64', ('u2u8', 'a@1')) => ('u2u64', 'a') */ - /* search1626_0_0 -> 770 in the cache */ - /* search1626_0 -> 2047 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 2047 }, - -1, - } }, - - /* replace1626_0 -> 770 in the cache */ - /* replace1626 -> 2063 in the cache */ - - /* ('i2i64', ('i2i8', 'a@8')) => ('i2i64', 'a') */ - /* search1627_0_0 -> 6 in the cache */ - /* search1627_0 -> 4420 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4420 }, - -1, - } }, - - /* replace1627_0 -> 6 in the cache */ - /* replace1627 -> 2105 in the cache */ - - /* ('u2u64', ('u2u8', 'a@8')) => ('u2u64', 'a') */ - /* search1628_0_0 -> 6 in the cache */ - /* search1628_0 -> 4425 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 4425 }, - -1, - } }, - - /* replace1628_0 -> 6 in the cache */ - /* replace1628 -> 2103 in the cache */ - - /* ('i2i64', ('i2i16', 'a@1')) => ('i2i64', 'a') */ - /* search1629_0_0 -> 770 in the cache */ - /* search1629_0 -> 2049 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 2049 }, - -1, - } }, - - /* replace1629_0 -> 770 in the cache */ - /* replace1629 -> 2065 in the cache */ - - /* ('u2u64', ('u2u16', 'a@1')) => ('u2u64', 'a') */ - /* search1630_0_0 -> 770 in the cache */ - /* search1630_0 -> 2051 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 2051 }, - -1, - } }, - - /* replace1630_0 -> 770 in the cache */ - /* replace1630 -> 2063 in the cache */ - - /* ('i2i64', ('i2i16', 'a@8')) => ('i2i64', 'a') */ - /* search1631_0_0 -> 6 in the cache */ - /* search1631_0 -> 2091 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 2091 }, - -1, - } }, - - /* replace1631_0 -> 6 in the cache */ - /* replace1631 -> 2105 in the cache */ - - /* ('u2u64', ('u2u16', 'a@8')) => ('u2u64', 'a') */ - /* search1632_0_0 -> 6 in the cache */ - /* search1632_0 -> 2093 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 2093 }, - -1, - } }, - - /* replace1632_0 -> 6 in the cache */ - /* replace1632 -> 2103 in the cache */ - - /* ('i2i64', ('i2i16', 'a@16')) => ('i2i64', 'a') */ - /* search1633_0_0 -> 11 in the cache */ - /* search1633_0 -> 4421 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4421 }, - -1, - } }, - - /* replace1633_0 -> 11 in the cache */ - /* replace1633 -> 2137 in the cache */ - - /* ('u2u64', ('u2u16', 'a@16')) => ('u2u64', 'a') */ - /* search1634_0_0 -> 11 in the cache */ - /* search1634_0 -> 4426 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 4426 }, - -1, - } }, - - /* replace1634_0 -> 11 in the cache */ - /* replace1634 -> 2135 in the cache */ - - /* ('i2i64', ('i2i32', 'a@1')) => ('i2i64', 'a') */ - /* search1635_0_0 -> 770 in the cache */ - /* search1635_0 -> 2061 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 2061 }, - -1, - } }, - - /* replace1635_0 -> 770 in the cache */ - /* replace1635 -> 2065 in the cache */ - - /* ('u2u64', ('u2u32', 'a@1')) => ('u2u64', 'a') */ - /* search1636_0_0 -> 770 in the cache */ - /* search1636_0 -> 2059 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 2059 }, - -1, - } }, - - /* replace1636_0 -> 770 in the cache */ - /* replace1636 -> 2063 in the cache */ - - /* ('i2i64', ('i2i32', 'a@8')) => ('i2i64', 'a') */ - /* search1637_0_0 -> 6 in the cache */ - /* search1637_0 -> 2101 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 2101 }, - -1, - } }, - - /* replace1637_0 -> 6 in the cache */ - /* replace1637 -> 2105 in the cache */ - - /* ('u2u64', ('u2u32', 'a@8')) => ('u2u64', 'a') */ - /* search1638_0_0 -> 6 in the cache */ - /* search1638_0 -> 2099 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 2099 }, - -1, - } }, - - /* replace1638_0 -> 6 in the cache */ - /* replace1638 -> 2103 in the cache */ - - /* ('i2i64', ('i2i32', 'a@16')) => ('i2i64', 'a') */ - /* search1639_0_0 -> 11 in the cache */ - /* search1639_0 -> 2127 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 2127 }, - -1, - } }, - - /* replace1639_0 -> 11 in the cache */ - /* replace1639 -> 2137 in the cache */ - - /* ('u2u64', ('u2u32', 'a@16')) => ('u2u64', 'a') */ - /* search1640_0_0 -> 11 in the cache */ - /* search1640_0 -> 2129 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 2129 }, - -1, - } }, - - /* replace1640_0 -> 11 in the cache */ - /* replace1640 -> 2135 in the cache */ - - /* ('i2i64', ('i2i32', 'a@32')) => ('i2i64', 'a') */ - /* search1641_0_0 -> 16 in the cache */ - /* search1641_0 -> 4422 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4422 }, - -1, - } }, - - /* replace1641_0 -> 16 in the cache */ - /* replace1641 -> 2147 in the cache */ - - /* ('u2u64', ('u2u32', 'a@32')) => ('u2u64', 'a') */ - /* search1642_0_0 -> 16 in the cache */ - /* search1642_0 -> 4427 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 4427 }, - -1, - } }, - - /* replace1642_0 -> 16 in the cache */ - /* replace1642 -> 2149 in the cache */ - - /* ('i2i8', ('pack_64_2x32_split', 'a', 'b')) => ('i2i8', 'a') */ - /* search1643_0_0 -> 16 in the cache */ - /* search1643_0_1 -> 36 in the cache */ - /* search1643_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1643_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 16 }, - -1, - } }, - - /* ('i2i8', ('pack_64_2x32_split', 'a', 'b')) => ('i2i8', 'a') */ - /* search1644_0_0 -> 16 in the cache */ - /* search1644_0_1 -> 36 in the cache */ - /* search1644_0 -> 3369 in the cache */ - /* search1644 -> 4525 in the cache */ - - /* replace1644_0 -> 16 in the cache */ - /* replace1644 -> 4526 in the cache */ - - /* ('i2i16', ('pack_64_2x32_split', 'a', 'b')) => ('i2i16', 'a') */ - /* search1645_0_0 -> 16 in the cache */ - /* search1645_0_1 -> 36 in the cache */ - /* search1645_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1645_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 16 }, - -1, - } }, - - /* ('i2i16', ('pack_64_2x32_split', 'a', 'b')) => ('i2i16', 'a') */ - /* search1646_0_0 -> 16 in the cache */ - /* search1646_0_1 -> 36 in the cache */ - /* search1646_0 -> 3369 in the cache */ - /* search1646 -> 4527 in the cache */ - - /* replace1646_0 -> 16 in the cache */ - /* replace1646 -> 4528 in the cache */ - - /* ('i2i32', ('pack_64_2x32_split', 'a', 'b')) => ('i2i32', 'a') */ - /* search1647_0_0 -> 16 in the cache */ - /* search1647_0_1 -> 36 in the cache */ - /* search1647_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1647_0 -> 16 in the cache */ - /* replace1647 -> 4422 in the cache */ - - /* ('i2i32', ('pack_64_2x32_split', 'a', 'b')) => ('i2i32', 'a') */ - /* search1648_0_0 -> 16 in the cache */ - /* search1648_0_1 -> 36 in the cache */ - /* search1648_0 -> 3369 in the cache */ - /* search1648 -> 4529 in the cache */ - - /* replace1648_0 -> 16 in the cache */ - /* replace1648 -> 4422 in the cache */ - - /* ('u2u8', ('pack_64_2x32_split', 'a', 'b')) => ('u2u8', 'a') */ - /* search1649_0_0 -> 16 in the cache */ - /* search1649_0_1 -> 36 in the cache */ - /* search1649_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1649_0 -> 16 in the cache */ - /* replace1649 -> 2193 in the cache */ - - /* ('u2u8', ('pack_64_2x32_split', 'a', 'b')) => ('u2u8', 'a') */ - /* search1650_0_0 -> 16 in the cache */ - /* search1650_0_1 -> 36 in the cache */ - /* search1650_0 -> 3369 in the cache */ - /* search1650 -> 4530 in the cache */ - - /* replace1650_0 -> 16 in the cache */ - /* replace1650 -> 2193 in the cache */ - - /* ('u2u16', ('pack_64_2x32_split', 'a', 'b')) => ('u2u16', 'a') */ - /* search1651_0_0 -> 16 in the cache */ - /* search1651_0_1 -> 36 in the cache */ - /* search1651_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1651_0 -> 16 in the cache */ - /* replace1651 -> 3478 in the cache */ - - /* ('u2u16', ('pack_64_2x32_split', 'a', 'b')) => ('u2u16', 'a') */ - /* search1652_0_0 -> 16 in the cache */ - /* search1652_0_1 -> 36 in the cache */ - /* search1652_0 -> 3369 in the cache */ - /* search1652 -> 4531 in the cache */ - - /* replace1652_0 -> 16 in the cache */ - /* replace1652 -> 3478 in the cache */ - - /* ('u2u32', ('pack_64_2x32_split', 'a', 'b')) => ('u2u32', 'a') */ - /* search1653_0_0 -> 16 in the cache */ - /* search1653_0_1 -> 36 in the cache */ - /* search1653_0 -> 3369 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 3369 }, - -1, - } }, - - /* replace1653_0 -> 16 in the cache */ - /* replace1653 -> 4427 in the cache */ - - /* ('u2u32', ('pack_64_2x32_split', 'a', 'b')) => ('u2u32', 'a') */ - /* search1654_0_0 -> 16 in the cache */ - /* search1654_0_1 -> 36 in the cache */ - /* search1654_0 -> 3369 in the cache */ - /* search1654 -> 4532 in the cache */ - - /* replace1654_0 -> 16 in the cache */ - /* replace1654 -> 4427 in the cache */ - - /* ('ieq', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ieq', 'a', ('i2i8', 'b')) */ - /* search1655_0_0 -> 6 in the cache */ - /* search1655_0 -> 2091 in the cache */ - /* search1655_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2091, 4533 }, - -1, - } }, - - /* replace1655_0 -> 6 in the cache */ - /* replace1655_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 6, 4535 }, - -1, - } }, - - /* ('ine', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ine', 'a', ('i2i8', 'b')) */ - /* search1656_0_0 -> 6 in the cache */ - /* search1656_0 -> 2091 in the cache */ - /* search1656_1_0 -> 2280 in the cache */ - /* search1656_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2091, 4533 }, - -1, - } }, - - /* replace1656_0 -> 6 in the cache */ - /* replace1656_1_0 -> 2280 in the cache */ - /* replace1656_1 -> 4535 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 6, 4535 }, - -1, - } }, - - /* ('ige', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ige', 'a', ('i2i8', 'b')) */ - /* search1657_0_0 -> 6 in the cache */ - /* search1657_0 -> 2091 in the cache */ - /* search1657_1_0 -> 2280 in the cache */ - /* search1657_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2091, 4533 }, - -1, - } }, - - /* replace1657_0 -> 6 in the cache */ - /* replace1657_1_0 -> 2280 in the cache */ - /* replace1657_1 -> 4535 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 6, 4535 }, - -1, - } }, - - /* ('ilt', ('i2i16', 'a@8'), ('i2i16', 'b@8')) => ('ilt', 'a', ('i2i8', 'b')) */ - /* search1658_0_0 -> 6 in the cache */ - /* search1658_0 -> 2091 in the cache */ - /* search1658_1_0 -> 2280 in the cache */ - /* search1658_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2091, 4533 }, - -1, - } }, - - /* replace1658_0 -> 6 in the cache */ - /* replace1658_1_0 -> 2280 in the cache */ - /* replace1658_1 -> 4535 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 6, 4535 }, - -1, - } }, - - /* ('ige', ('i2i16', 'b@8'), ('i2i16', 'a@8')) => ('ige', ('i2i8', 'b'), 'a') */ - { .variable = { - { nir_search_value_variable, 8 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4543 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 8 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4545 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4544, 4546 }, - -1, - } }, - - /* replace1659_0_0 -> 4543 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 4543 }, - -1, - } }, - /* replace1659_1 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4548, 4545 }, - -1, - } }, - - /* ('ilt', ('i2i16', 'b@8'), ('i2i16', 'a@8')) => ('ilt', ('i2i8', 'b'), 'a') */ - /* search1660_0_0 -> 4543 in the cache */ - /* search1660_0 -> 4544 in the cache */ - /* search1660_1_0 -> 4545 in the cache */ - /* search1660_1 -> 4546 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4544, 4546 }, - -1, - } }, - - /* replace1660_0_0 -> 4543 in the cache */ - /* replace1660_0 -> 4548 in the cache */ - /* replace1660_1 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4548, 4545 }, - -1, - } }, - - /* ('ieq', ('i2i16', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('i2i8', 'b')), ('ieq', ('i2i16', ('i2i8', 'b')), 'b')) */ - /* search1661_0_0 -> 6 in the cache */ - /* search1661_0 -> 2091 in the cache */ - /* search1661_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2091, 2179 }, - -1, - } }, - - /* replace1661_0_0 -> 6 in the cache */ - /* replace1661_0_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 6, 4553 }, - -1, - } }, - /* replace1661_1_0_0_0 -> 268 in the cache */ - /* replace1661_1_0_0 -> 4553 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4553 }, - -1, - } }, - /* replace1661_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4555, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4554, 4556 }, - -1, - } }, - - /* ('ine', ('i2i16', 'a@8'), '#b') => ('ior', ('ine', 'a', ('i2i8', 'b')), ('ine', ('i2i16', ('i2i8', 'b')), 'b')) */ - /* search1662_0_0 -> 6 in the cache */ - /* search1662_0 -> 2091 in the cache */ - /* search1662_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2091, 2179 }, - -1, - } }, - - /* replace1662_0_0 -> 6 in the cache */ - /* replace1662_0_1_0 -> 268 in the cache */ - /* replace1662_0_1 -> 4553 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 6, 4553 }, - -1, - } }, - /* replace1662_1_0_0_0 -> 268 in the cache */ - /* replace1662_1_0_0 -> 4553 in the cache */ - /* replace1662_1_0 -> 4555 in the cache */ - /* replace1662_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4555, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4559, 4560 }, - -1, - } }, - - /* ('ilt', ('i2i16', 'a@8'), '#b') => ('iand', ('ilt', -128, 'b'), ('ior', ('ilt', 127, 'b'), ('ilt', 'a', ('i2i8', 'b')))) */ - /* search1663_0_0 -> 6 in the cache */ - /* search1663_0 -> 2091 in the cache */ - /* search1663_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2091, 2179 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { -0x80 /* -128 */ }, - } }, - /* replace1663_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4563, 268 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0x7f /* 127 */ }, - } }, - /* replace1663_1_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4565, 268 }, - -1, - } }, - /* replace1663_1_1_0 -> 6 in the cache */ - /* replace1663_1_1_1_0 -> 268 in the cache */ - /* replace1663_1_1_1 -> 4553 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 6, 4553 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4566, 4567 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4564, 4568 }, - -1, - } }, - - /* ('ilt', '#a', ('i2i16', 'b@8')) => ('iand', ('ilt', 'a', 127), ('ior', ('ilt', 'a', -128), ('ilt', ('i2i8', 'a'), 'b'))) */ - { .variable = { - { nir_search_value_variable, 16 }, - 0, /* a */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1664_1_0 -> 2280 in the cache */ - /* search1664_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4570, 4533 }, - -1, - } }, - - /* replace1664_0_0 -> 11 in the cache */ - /* replace1664_0_1 -> 4565 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 4565 }, - -1, - } }, - /* replace1664_1_0_0 -> 11 in the cache */ - /* replace1664_1_0_1 -> 4563 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 4563 }, - -1, - } }, - /* replace1664_1_1_0_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 11 }, - -1, - } }, - /* replace1664_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4574, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4573, 4575 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4572, 4576 }, - -1, - } }, - - /* ('ige', ('i2i16', 'a@8'), '#b') => ('iand', ('ige', 127, 'b'), ('ior', ('ige', -128, 'b'), ('ige', 'a', ('i2i8', 'b')))) */ - /* search1665_0_0 -> 6 in the cache */ - /* search1665_0 -> 2091 in the cache */ - /* search1665_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2091, 2179 }, - -1, - } }, - - /* replace1665_0_0 -> 4565 in the cache */ - /* replace1665_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4565, 268 }, - -1, - } }, - /* replace1665_1_0_0 -> 4563 in the cache */ - /* replace1665_1_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4563, 268 }, - -1, - } }, - /* replace1665_1_1_0 -> 6 in the cache */ - /* replace1665_1_1_1_0 -> 268 in the cache */ - /* replace1665_1_1_1 -> 4553 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 6, 4553 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4580, 4581 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4579, 4582 }, - -1, - } }, - - /* ('ige', '#a', ('i2i16', 'b@8')) => ('iand', ('ige', 'a', -128), ('ior', ('ige', 'a', 127), ('ige', ('i2i8', 'a'), 'b'))) */ - /* search1666_0 -> 4570 in the cache */ - /* search1666_1_0 -> 2280 in the cache */ - /* search1666_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4570, 4533 }, - -1, - } }, - - /* replace1666_0_0 -> 11 in the cache */ - /* replace1666_0_1 -> 4563 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 11, 4563 }, - -1, - } }, - /* replace1666_1_0_0 -> 11 in the cache */ - /* replace1666_1_0_1 -> 4565 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 11, 4565 }, - -1, - } }, - /* replace1666_1_1_0_0 -> 11 in the cache */ - /* replace1666_1_1_0 -> 4574 in the cache */ - /* replace1666_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4574, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4586, 4587 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4585, 4588 }, - -1, - } }, - - /* ('ieq', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ieq', 'a', ('i2i8', 'b')) */ - /* search1667_0_0 -> 6 in the cache */ - /* search1667_0 -> 2101 in the cache */ - /* search1667_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2101, 4590 }, - -1, - } }, - - /* replace1667_0 -> 6 in the cache */ - /* replace1667_1_0 -> 2280 in the cache */ - /* replace1667_1 -> 4535 in the cache */ - /* replace1667 -> 4536 in the cache */ - - /* ('ine', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ine', 'a', ('i2i8', 'b')) */ - /* search1668_0_0 -> 6 in the cache */ - /* search1668_0 -> 2101 in the cache */ - /* search1668_1_0 -> 2280 in the cache */ - /* search1668_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2101, 4590 }, - -1, - } }, - - /* replace1668_0 -> 6 in the cache */ - /* replace1668_1_0 -> 2280 in the cache */ - /* replace1668_1 -> 4535 in the cache */ - /* replace1668 -> 4538 in the cache */ - - /* ('ige', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ige', 'a', ('i2i8', 'b')) */ - /* search1669_0_0 -> 6 in the cache */ - /* search1669_0 -> 2101 in the cache */ - /* search1669_1_0 -> 2280 in the cache */ - /* search1669_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2101, 4590 }, - -1, - } }, - - /* replace1669_0 -> 6 in the cache */ - /* replace1669_1_0 -> 2280 in the cache */ - /* replace1669_1 -> 4535 in the cache */ - /* replace1669 -> 4540 in the cache */ - - /* ('ilt', ('i2i32', 'a@8'), ('i2i32', 'b@8')) => ('ilt', 'a', ('i2i8', 'b')) */ - /* search1670_0_0 -> 6 in the cache */ - /* search1670_0 -> 2101 in the cache */ - /* search1670_1_0 -> 2280 in the cache */ - /* search1670_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2101, 4590 }, - -1, - } }, - - /* replace1670_0 -> 6 in the cache */ - /* replace1670_1_0 -> 2280 in the cache */ - /* replace1670_1 -> 4535 in the cache */ - /* replace1670 -> 4542 in the cache */ - - /* ('ige', ('i2i32', 'b@8'), ('i2i32', 'a@8')) => ('ige', ('i2i8', 'b'), 'a') */ - /* search1671_0_0 -> 4543 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4543 }, - -1, - } }, - /* search1671_1_0 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4545 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4595, 4596 }, - -1, - } }, - - /* replace1671_0_0 -> 4543 in the cache */ - /* replace1671_0 -> 4548 in the cache */ - /* replace1671_1 -> 4545 in the cache */ - /* replace1671 -> 4549 in the cache */ - - /* ('ilt', ('i2i32', 'b@8'), ('i2i32', 'a@8')) => ('ilt', ('i2i8', 'b'), 'a') */ - /* search1672_0_0 -> 4543 in the cache */ - /* search1672_0 -> 4595 in the cache */ - /* search1672_1_0 -> 4545 in the cache */ - /* search1672_1 -> 4596 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4595, 4596 }, - -1, - } }, - - /* replace1672_0_0 -> 4543 in the cache */ - /* replace1672_0 -> 4548 in the cache */ - /* replace1672_1 -> 4545 in the cache */ - /* replace1672 -> 4551 in the cache */ - - /* ('ieq', ('i2i32', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('i2i8', 'b')), ('ieq', ('i2i32', ('i2i8', 'b')), 'b')) */ - /* search1673_0_0 -> 6 in the cache */ - /* search1673_0 -> 2101 in the cache */ - /* search1673_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2101, 33 }, - -1, - } }, - - /* replace1673_0_0 -> 6 in the cache */ - /* replace1673_0_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 6, 4600 }, - -1, - } }, - /* replace1673_1_0_0_0 -> 36 in the cache */ - /* replace1673_1_0_0 -> 4600 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4600 }, - -1, - } }, - /* replace1673_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4602, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4601, 4603 }, - -1, - } }, - - /* ('ine', ('i2i32', 'a@8'), '#b') => ('ior', ('ine', 'a', ('i2i8', 'b')), ('ine', ('i2i32', ('i2i8', 'b')), 'b')) */ - /* search1674_0_0 -> 6 in the cache */ - /* search1674_0 -> 2101 in the cache */ - /* search1674_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2101, 33 }, - -1, - } }, - - /* replace1674_0_0 -> 6 in the cache */ - /* replace1674_0_1_0 -> 36 in the cache */ - /* replace1674_0_1 -> 4600 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 6, 4600 }, - -1, - } }, - /* replace1674_1_0_0_0 -> 36 in the cache */ - /* replace1674_1_0_0 -> 4600 in the cache */ - /* replace1674_1_0 -> 4602 in the cache */ - /* replace1674_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4602, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4606, 4607 }, - -1, - } }, - - /* ('ilt', ('i2i32', 'a@8'), '#b') => ('iand', ('ilt', -128, 'b'), ('ior', ('ilt', 127, 'b'), ('ilt', 'a', ('i2i8', 'b')))) */ - /* search1675_0_0 -> 6 in the cache */ - /* search1675_0 -> 2101 in the cache */ - /* search1675_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2101, 33 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0x80 /* -128 */ }, - } }, - /* replace1675_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4610, 36 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x7f /* 127 */ }, - } }, - /* replace1675_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4612, 36 }, - -1, - } }, - /* replace1675_1_1_0 -> 6 in the cache */ - /* replace1675_1_1_1_0 -> 36 in the cache */ - /* replace1675_1_1_1 -> 4600 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 6, 4600 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4613, 4614 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4611, 4615 }, - -1, - } }, - - /* ('ilt', '#a', ('i2i32', 'b@8')) => ('iand', ('ilt', 'a', 127), ('ior', ('ilt', 'a', -128), ('ilt', ('i2i8', 'a'), 'b'))) */ - /* search1676_0 -> 296 in the cache */ - /* search1676_1_0 -> 2280 in the cache */ - /* search1676_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 296, 4590 }, - -1, - } }, - - /* replace1676_0_0 -> 16 in the cache */ - /* replace1676_0_1 -> 4612 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4612 }, - -1, - } }, - /* replace1676_1_0_0 -> 16 in the cache */ - /* replace1676_1_0_1 -> 4610 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4610 }, - -1, - } }, - /* replace1676_1_1_0_0 -> 16 in the cache */ - /* replace1676_1_1_0 -> 4526 in the cache */ - /* replace1676_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4526, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4619, 4620 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4618, 4621 }, - -1, - } }, - - /* ('ige', ('i2i32', 'a@8'), '#b') => ('iand', ('ige', 127, 'b'), ('ior', ('ige', -128, 'b'), ('ige', 'a', ('i2i8', 'b')))) */ - /* search1677_0_0 -> 6 in the cache */ - /* search1677_0 -> 2101 in the cache */ - /* search1677_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2101, 33 }, - -1, - } }, - - /* replace1677_0_0 -> 4612 in the cache */ - /* replace1677_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4612, 36 }, - -1, - } }, - /* replace1677_1_0_0 -> 4610 in the cache */ - /* replace1677_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4610, 36 }, - -1, - } }, - /* replace1677_1_1_0 -> 6 in the cache */ - /* replace1677_1_1_1_0 -> 36 in the cache */ - /* replace1677_1_1_1 -> 4600 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 6, 4600 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4625, 4626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4624, 4627 }, - -1, - } }, - - /* ('ige', '#a', ('i2i32', 'b@8')) => ('iand', ('ige', 'a', -128), ('ior', ('ige', 'a', 127), ('ige', ('i2i8', 'a'), 'b'))) */ - /* search1678_0 -> 296 in the cache */ - /* search1678_1_0 -> 2280 in the cache */ - /* search1678_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 296, 4590 }, - -1, - } }, - - /* replace1678_0_0 -> 16 in the cache */ - /* replace1678_0_1 -> 4610 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4610 }, - -1, - } }, - /* replace1678_1_0_0 -> 16 in the cache */ - /* replace1678_1_0_1 -> 4612 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4612 }, - -1, - } }, - /* replace1678_1_1_0_0 -> 16 in the cache */ - /* replace1678_1_1_0 -> 4526 in the cache */ - /* replace1678_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4526, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4631, 4632 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4630, 4633 }, - -1, - } }, - - /* ('ieq', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ieq', 'a', ('i2i8', 'b')) */ - /* search1679_0_0 -> 6 in the cache */ - /* search1679_0 -> 2105 in the cache */ - /* search1679_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2105, 4635 }, - -1, - } }, - - /* replace1679_0 -> 6 in the cache */ - /* replace1679_1_0 -> 2280 in the cache */ - /* replace1679_1 -> 4535 in the cache */ - /* replace1679 -> 4536 in the cache */ - - /* ('ine', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ine', 'a', ('i2i8', 'b')) */ - /* search1680_0_0 -> 6 in the cache */ - /* search1680_0 -> 2105 in the cache */ - /* search1680_1_0 -> 2280 in the cache */ - /* search1680_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2105, 4635 }, - -1, - } }, - - /* replace1680_0 -> 6 in the cache */ - /* replace1680_1_0 -> 2280 in the cache */ - /* replace1680_1 -> 4535 in the cache */ - /* replace1680 -> 4538 in the cache */ - - /* ('ige', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ige', 'a', ('i2i8', 'b')) */ - /* search1681_0_0 -> 6 in the cache */ - /* search1681_0 -> 2105 in the cache */ - /* search1681_1_0 -> 2280 in the cache */ - /* search1681_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2105, 4635 }, - -1, - } }, - - /* replace1681_0 -> 6 in the cache */ - /* replace1681_1_0 -> 2280 in the cache */ - /* replace1681_1 -> 4535 in the cache */ - /* replace1681 -> 4540 in the cache */ - - /* ('ilt', ('i2i64', 'a@8'), ('i2i64', 'b@8')) => ('ilt', 'a', ('i2i8', 'b')) */ - /* search1682_0_0 -> 6 in the cache */ - /* search1682_0 -> 2105 in the cache */ - /* search1682_1_0 -> 2280 in the cache */ - /* search1682_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2105, 4635 }, - -1, - } }, - - /* replace1682_0 -> 6 in the cache */ - /* replace1682_1_0 -> 2280 in the cache */ - /* replace1682_1 -> 4535 in the cache */ - /* replace1682 -> 4542 in the cache */ - - /* ('ige', ('i2i64', 'b@8'), ('i2i64', 'a@8')) => ('ige', ('i2i8', 'b'), 'a') */ - /* search1683_0_0 -> 4543 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4543 }, - -1, - } }, - /* search1683_1_0 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4545 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4640, 4641 }, - -1, - } }, - - /* replace1683_0_0 -> 4543 in the cache */ - /* replace1683_0 -> 4548 in the cache */ - /* replace1683_1 -> 4545 in the cache */ - /* replace1683 -> 4549 in the cache */ - - /* ('ilt', ('i2i64', 'b@8'), ('i2i64', 'a@8')) => ('ilt', ('i2i8', 'b'), 'a') */ - /* search1684_0_0 -> 4543 in the cache */ - /* search1684_0 -> 4640 in the cache */ - /* search1684_1_0 -> 4545 in the cache */ - /* search1684_1 -> 4641 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4640, 4641 }, - -1, - } }, - - /* replace1684_0_0 -> 4543 in the cache */ - /* replace1684_0 -> 4548 in the cache */ - /* replace1684_1 -> 4545 in the cache */ - /* replace1684 -> 4551 in the cache */ - - /* ('ieq', ('i2i64', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('i2i8', 'b')), ('ieq', ('i2i64', ('i2i8', 'b')), 'b')) */ - /* search1685_0_0 -> 6 in the cache */ - /* search1685_0 -> 2105 in the cache */ - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2105, 4644 }, - -1, - } }, - - /* replace1685_0_0 -> 6 in the cache */ - /* replace1685_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 6, 4646 }, - -1, - } }, - /* replace1685_1_0_0_0 -> 41 in the cache */ - /* replace1685_1_0_0 -> 4646 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4646 }, - -1, - } }, - /* replace1685_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4648, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4647, 4649 }, - -1, - } }, - - /* ('ine', ('i2i64', 'a@8'), '#b') => ('ior', ('ine', 'a', ('i2i8', 'b')), ('ine', ('i2i64', ('i2i8', 'b')), 'b')) */ - /* search1686_0_0 -> 6 in the cache */ - /* search1686_0 -> 2105 in the cache */ - /* search1686_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2105, 4644 }, - -1, - } }, - - /* replace1686_0_0 -> 6 in the cache */ - /* replace1686_0_1_0 -> 41 in the cache */ - /* replace1686_0_1 -> 4646 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 6, 4646 }, - -1, - } }, - /* replace1686_1_0_0_0 -> 41 in the cache */ - /* replace1686_1_0_0 -> 4646 in the cache */ - /* replace1686_1_0 -> 4648 in the cache */ - /* replace1686_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4648, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4652, 4653 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'a@8'), '#b') => ('iand', ('ilt', -128, 'b'), ('ior', ('ilt', 127, 'b'), ('ilt', 'a', ('i2i8', 'b')))) */ - /* search1687_0_0 -> 6 in the cache */ - /* search1687_0 -> 2105 in the cache */ - /* search1687_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2105, 4644 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { -0x80 /* -128 */ }, - } }, - /* replace1687_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4656, 41 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x7f /* 127 */ }, - } }, - /* replace1687_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4658, 41 }, - -1, - } }, - /* replace1687_1_1_0 -> 6 in the cache */ - /* replace1687_1_1_1_0 -> 41 in the cache */ - /* replace1687_1_1_1 -> 4646 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 6, 4646 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4659, 4660 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4657, 4661 }, - -1, - } }, - - /* ('ilt', '#a', ('i2i64', 'b@8')) => ('iand', ('ilt', 'a', 127), ('ior', ('ilt', 'a', -128), ('ilt', ('i2i8', 'a'), 'b'))) */ - { .variable = { - { nir_search_value_variable, 64 }, - 0, /* a */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1688_1_0 -> 2280 in the cache */ - /* search1688_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4663, 4635 }, - -1, - } }, - - /* replace1688_0_0 -> 21 in the cache */ - /* replace1688_0_1 -> 4658 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 4658 }, - -1, - } }, - /* replace1688_1_0_0 -> 21 in the cache */ - /* replace1688_1_0_1 -> 4656 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 4656 }, - -1, - } }, - /* replace1688_1_1_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 21 }, - -1, - } }, - /* replace1688_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4667, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4666, 4668 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4665, 4669 }, - -1, - } }, - - /* ('ige', ('i2i64', 'a@8'), '#b') => ('iand', ('ige', 127, 'b'), ('ior', ('ige', -128, 'b'), ('ige', 'a', ('i2i8', 'b')))) */ - /* search1689_0_0 -> 6 in the cache */ - /* search1689_0 -> 2105 in the cache */ - /* search1689_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2105, 4644 }, - -1, - } }, - - /* replace1689_0_0 -> 4658 in the cache */ - /* replace1689_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4658, 41 }, - -1, - } }, - /* replace1689_1_0_0 -> 4656 in the cache */ - /* replace1689_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4656, 41 }, - -1, - } }, - /* replace1689_1_1_0 -> 6 in the cache */ - /* replace1689_1_1_1_0 -> 41 in the cache */ - /* replace1689_1_1_1 -> 4646 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 6, 4646 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4673, 4674 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4672, 4675 }, - -1, - } }, - - /* ('ige', '#a', ('i2i64', 'b@8')) => ('iand', ('ige', 'a', -128), ('ior', ('ige', 'a', 127), ('ige', ('i2i8', 'a'), 'b'))) */ - /* search1690_0 -> 4663 in the cache */ - /* search1690_1_0 -> 2280 in the cache */ - /* search1690_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4663, 4635 }, - -1, - } }, - - /* replace1690_0_0 -> 21 in the cache */ - /* replace1690_0_1 -> 4656 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 21, 4656 }, - -1, - } }, - /* replace1690_1_0_0 -> 21 in the cache */ - /* replace1690_1_0_1 -> 4658 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 21, 4658 }, - -1, - } }, - /* replace1690_1_1_0_0 -> 21 in the cache */ - /* replace1690_1_1_0 -> 4667 in the cache */ - /* replace1690_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4667, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4679, 4680 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4678, 4681 }, - -1, - } }, - - /* ('ieq', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ieq', 'a', ('i2i16', 'b')) */ - /* search1691_0_0 -> 11 in the cache */ - /* search1691_0 -> 2127 in the cache */ - /* search1691_1_0 -> 2280 in the cache */ - /* search1691_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2127, 4590 }, - -1, - } }, - - /* replace1691_0 -> 11 in the cache */ - /* replace1691_1_0 -> 2280 in the cache */ - /* replace1691_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 11, 4533 }, - -1, - } }, - - /* ('ine', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ine', 'a', ('i2i16', 'b')) */ - /* search1692_0_0 -> 11 in the cache */ - /* search1692_0 -> 2127 in the cache */ - /* search1692_1_0 -> 2280 in the cache */ - /* search1692_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2127, 4590 }, - -1, - } }, - - /* replace1692_0 -> 11 in the cache */ - /* replace1692_1_0 -> 2280 in the cache */ - /* replace1692_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 11, 4533 }, - -1, - } }, - - /* ('ige', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ige', 'a', ('i2i16', 'b')) */ - /* search1693_0_0 -> 11 in the cache */ - /* search1693_0 -> 2127 in the cache */ - /* search1693_1_0 -> 2280 in the cache */ - /* search1693_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2127, 4590 }, - -1, - } }, - - /* replace1693_0 -> 11 in the cache */ - /* replace1693_1_0 -> 2280 in the cache */ - /* replace1693_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 11, 4533 }, - -1, - } }, - - /* ('ilt', ('i2i32', 'a@16'), ('i2i32', 'b@8')) => ('ilt', 'a', ('i2i16', 'b')) */ - /* search1694_0_0 -> 11 in the cache */ - /* search1694_0 -> 2127 in the cache */ - /* search1694_1_0 -> 2280 in the cache */ - /* search1694_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2127, 4590 }, - -1, - } }, - - /* replace1694_0 -> 11 in the cache */ - /* replace1694_1_0 -> 2280 in the cache */ - /* replace1694_1 -> 4533 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 4533 }, - -1, - } }, - - /* ('ige', ('i2i32', 'b@8'), ('i2i32', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') */ - /* search1695_0_0 -> 4543 in the cache */ - /* search1695_0 -> 4595 in the cache */ - /* search1695_1_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4595, 4691 }, - -1, - } }, - - /* replace1695_0_0 -> 4543 in the cache */ - /* replace1695_0 -> 4544 in the cache */ - /* replace1695_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4544, 536 }, - -1, - } }, - - /* ('ilt', ('i2i32', 'b@8'), ('i2i32', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') */ - /* search1696_0_0 -> 4543 in the cache */ - /* search1696_0 -> 4595 in the cache */ - /* search1696_1_0 -> 536 in the cache */ - /* search1696_1 -> 4691 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4595, 4691 }, - -1, - } }, - - /* replace1696_0_0 -> 4543 in the cache */ - /* replace1696_0 -> 4544 in the cache */ - /* replace1696_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4544, 536 }, - -1, - } }, - - /* ('ieq', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ieq', 'a', ('i2i16', 'b')) */ - /* search1697_0_0 -> 11 in the cache */ - /* search1697_0 -> 2127 in the cache */ - /* search1697_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2127, 4696 }, - -1, - } }, - - /* replace1697_0 -> 11 in the cache */ - /* replace1697_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 11, 4698 }, - -1, - } }, - - /* ('ine', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ine', 'a', ('i2i16', 'b')) */ - /* search1698_0_0 -> 11 in the cache */ - /* search1698_0 -> 2127 in the cache */ - /* search1698_1_0 -> 268 in the cache */ - /* search1698_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2127, 4696 }, - -1, - } }, - - /* replace1698_0 -> 11 in the cache */ - /* replace1698_1_0 -> 268 in the cache */ - /* replace1698_1 -> 4698 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 11, 4698 }, - -1, - } }, - - /* ('ige', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ige', 'a', ('i2i16', 'b')) */ - /* search1699_0_0 -> 11 in the cache */ - /* search1699_0 -> 2127 in the cache */ - /* search1699_1_0 -> 268 in the cache */ - /* search1699_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2127, 4696 }, - -1, - } }, - - /* replace1699_0 -> 11 in the cache */ - /* replace1699_1_0 -> 268 in the cache */ - /* replace1699_1 -> 4698 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 11, 4698 }, - -1, - } }, - - /* ('ilt', ('i2i32', 'a@16'), ('i2i32', 'b@16')) => ('ilt', 'a', ('i2i16', 'b')) */ - /* search1700_0_0 -> 11 in the cache */ - /* search1700_0 -> 2127 in the cache */ - /* search1700_1_0 -> 268 in the cache */ - /* search1700_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2127, 4696 }, - -1, - } }, - - /* replace1700_0 -> 11 in the cache */ - /* replace1700_1_0 -> 268 in the cache */ - /* replace1700_1 -> 4698 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 4698 }, - -1, - } }, - - /* ('ige', ('i2i32', 'b@16'), ('i2i32', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') */ - /* search1701_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 525 }, - -1, - } }, - /* search1701_1_0 -> 536 in the cache */ - /* search1701_1 -> 4691 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4706, 4691 }, - -1, - } }, - - /* replace1701_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 525 }, - -1, - } }, - /* replace1701_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4708, 536 }, - -1, - } }, - - /* ('ilt', ('i2i32', 'b@16'), ('i2i32', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') */ - /* search1702_0_0 -> 525 in the cache */ - /* search1702_0 -> 4706 in the cache */ - /* search1702_1_0 -> 536 in the cache */ - /* search1702_1 -> 4691 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4706, 4691 }, - -1, - } }, - - /* replace1702_0_0 -> 525 in the cache */ - /* replace1702_0 -> 4708 in the cache */ - /* replace1702_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4708, 536 }, - -1, - } }, - - /* ('ieq', ('i2i32', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('i2i16', 'b')), ('ieq', ('i2i32', ('i2i16', 'b')), 'b')) */ - /* search1703_0_0 -> 11 in the cache */ - /* search1703_0 -> 2127 in the cache */ - /* search1703_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2127, 33 }, - -1, - } }, - - /* replace1703_0_0 -> 11 in the cache */ - /* replace1703_0_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 11, 4713 }, - -1, - } }, - /* replace1703_1_0_0_0 -> 36 in the cache */ - /* replace1703_1_0_0 -> 4713 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4713 }, - -1, - } }, - /* replace1703_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4715, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4714, 4716 }, - -1, - } }, - - /* ('ine', ('i2i32', 'a@16'), '#b') => ('ior', ('ine', 'a', ('i2i16', 'b')), ('ine', ('i2i32', ('i2i16', 'b')), 'b')) */ - /* search1704_0_0 -> 11 in the cache */ - /* search1704_0 -> 2127 in the cache */ - /* search1704_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2127, 33 }, - -1, - } }, - - /* replace1704_0_0 -> 11 in the cache */ - /* replace1704_0_1_0 -> 36 in the cache */ - /* replace1704_0_1 -> 4713 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 11, 4713 }, - -1, - } }, - /* replace1704_1_0_0_0 -> 36 in the cache */ - /* replace1704_1_0_0 -> 4713 in the cache */ - /* replace1704_1_0 -> 4715 in the cache */ - /* replace1704_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4715, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4719, 4720 }, - -1, - } }, - - /* ('ilt', ('i2i32', 'a@16'), '#b') => ('iand', ('ilt', -32768, 'b'), ('ior', ('ilt', 32767, 'b'), ('ilt', 'a', ('i2i16', 'b')))) */ - /* search1705_0_0 -> 11 in the cache */ - /* search1705_0 -> 2127 in the cache */ - /* search1705_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2127, 33 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0x8000 /* -32768 */ }, - } }, - /* replace1705_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4723, 36 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x7fff /* 32767 */ }, - } }, - /* replace1705_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4725, 36 }, - -1, - } }, - /* replace1705_1_1_0 -> 11 in the cache */ - /* replace1705_1_1_1_0 -> 36 in the cache */ - /* replace1705_1_1_1 -> 4713 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 4713 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4726, 4727 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4724, 4728 }, - -1, - } }, - - /* ('ilt', '#a', ('i2i32', 'b@16')) => ('iand', ('ilt', 'a', 32767), ('ior', ('ilt', 'a', -32768), ('ilt', ('i2i16', 'a'), 'b'))) */ - /* search1706_0 -> 296 in the cache */ - /* search1706_1_0 -> 268 in the cache */ - /* search1706_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 296, 4696 }, - -1, - } }, - - /* replace1706_0_0 -> 16 in the cache */ - /* replace1706_0_1 -> 4725 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4725 }, - -1, - } }, - /* replace1706_1_0_0 -> 16 in the cache */ - /* replace1706_1_0_1 -> 4723 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4723 }, - -1, - } }, - /* replace1706_1_1_0_0 -> 16 in the cache */ - /* replace1706_1_1_0 -> 4528 in the cache */ - /* replace1706_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4528, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4732, 4733 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4731, 4734 }, - -1, - } }, - - /* ('ige', ('i2i32', 'a@16'), '#b') => ('iand', ('ige', 32767, 'b'), ('ior', ('ige', -32768, 'b'), ('ige', 'a', ('i2i16', 'b')))) */ - /* search1707_0_0 -> 11 in the cache */ - /* search1707_0 -> 2127 in the cache */ - /* search1707_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2127, 33 }, - -1, - } }, - - /* replace1707_0_0 -> 4725 in the cache */ - /* replace1707_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4725, 36 }, - -1, - } }, - /* replace1707_1_0_0 -> 4723 in the cache */ - /* replace1707_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4723, 36 }, - -1, - } }, - /* replace1707_1_1_0 -> 11 in the cache */ - /* replace1707_1_1_1_0 -> 36 in the cache */ - /* replace1707_1_1_1 -> 4713 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 11, 4713 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4738, 4739 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4737, 4740 }, - -1, - } }, - - /* ('ige', '#a', ('i2i32', 'b@16')) => ('iand', ('ige', 'a', -32768), ('ior', ('ige', 'a', 32767), ('ige', ('i2i16', 'a'), 'b'))) */ - /* search1708_0 -> 296 in the cache */ - /* search1708_1_0 -> 268 in the cache */ - /* search1708_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 296, 4696 }, - -1, - } }, - - /* replace1708_0_0 -> 16 in the cache */ - /* replace1708_0_1 -> 4723 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4723 }, - -1, - } }, - /* replace1708_1_0_0 -> 16 in the cache */ - /* replace1708_1_0_1 -> 4725 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4725 }, - -1, - } }, - /* replace1708_1_1_0_0 -> 16 in the cache */ - /* replace1708_1_1_0 -> 4528 in the cache */ - /* replace1708_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4528, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4744, 4745 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4743, 4746 }, - -1, - } }, - - /* ('ieq', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ieq', 'a', ('i2i16', 'b')) */ - /* search1709_0_0 -> 11 in the cache */ - /* search1709_0 -> 2137 in the cache */ - /* search1709_1_0 -> 2280 in the cache */ - /* search1709_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2137, 4635 }, - -1, - } }, - - /* replace1709_0 -> 11 in the cache */ - /* replace1709_1_0 -> 2280 in the cache */ - /* replace1709_1 -> 4533 in the cache */ - /* replace1709 -> 4684 in the cache */ - - /* ('ine', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ine', 'a', ('i2i16', 'b')) */ - /* search1710_0_0 -> 11 in the cache */ - /* search1710_0 -> 2137 in the cache */ - /* search1710_1_0 -> 2280 in the cache */ - /* search1710_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2137, 4635 }, - -1, - } }, - - /* replace1710_0 -> 11 in the cache */ - /* replace1710_1_0 -> 2280 in the cache */ - /* replace1710_1 -> 4533 in the cache */ - /* replace1710 -> 4686 in the cache */ - - /* ('ige', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ige', 'a', ('i2i16', 'b')) */ - /* search1711_0_0 -> 11 in the cache */ - /* search1711_0 -> 2137 in the cache */ - /* search1711_1_0 -> 2280 in the cache */ - /* search1711_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2137, 4635 }, - -1, - } }, - - /* replace1711_0 -> 11 in the cache */ - /* replace1711_1_0 -> 2280 in the cache */ - /* replace1711_1 -> 4533 in the cache */ - /* replace1711 -> 4688 in the cache */ - - /* ('ilt', ('i2i64', 'a@16'), ('i2i64', 'b@8')) => ('ilt', 'a', ('i2i16', 'b')) */ - /* search1712_0_0 -> 11 in the cache */ - /* search1712_0 -> 2137 in the cache */ - /* search1712_1_0 -> 2280 in the cache */ - /* search1712_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2137, 4635 }, - -1, - } }, - - /* replace1712_0 -> 11 in the cache */ - /* replace1712_1_0 -> 2280 in the cache */ - /* replace1712_1 -> 4533 in the cache */ - /* replace1712 -> 4690 in the cache */ - - /* ('ige', ('i2i64', 'b@8'), ('i2i64', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') */ - /* search1713_0_0 -> 4543 in the cache */ - /* search1713_0 -> 4640 in the cache */ - /* search1713_1_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4640, 4752 }, - -1, - } }, - - /* replace1713_0_0 -> 4543 in the cache */ - /* replace1713_0 -> 4544 in the cache */ - /* replace1713_1 -> 536 in the cache */ - /* replace1713 -> 4693 in the cache */ - - /* ('ilt', ('i2i64', 'b@8'), ('i2i64', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') */ - /* search1714_0_0 -> 4543 in the cache */ - /* search1714_0 -> 4640 in the cache */ - /* search1714_1_0 -> 536 in the cache */ - /* search1714_1 -> 4752 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4640, 4752 }, - -1, - } }, - - /* replace1714_0_0 -> 4543 in the cache */ - /* replace1714_0 -> 4544 in the cache */ - /* replace1714_1 -> 536 in the cache */ - /* replace1714 -> 4695 in the cache */ - - /* ('ieq', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ieq', 'a', ('i2i16', 'b')) */ - /* search1715_0_0 -> 11 in the cache */ - /* search1715_0 -> 2137 in the cache */ - /* search1715_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2137, 4755 }, - -1, - } }, - - /* replace1715_0 -> 11 in the cache */ - /* replace1715_1_0 -> 268 in the cache */ - /* replace1715_1 -> 4698 in the cache */ - /* replace1715 -> 4699 in the cache */ - - /* ('ine', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ine', 'a', ('i2i16', 'b')) */ - /* search1716_0_0 -> 11 in the cache */ - /* search1716_0 -> 2137 in the cache */ - /* search1716_1_0 -> 268 in the cache */ - /* search1716_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2137, 4755 }, - -1, - } }, - - /* replace1716_0 -> 11 in the cache */ - /* replace1716_1_0 -> 268 in the cache */ - /* replace1716_1 -> 4698 in the cache */ - /* replace1716 -> 4701 in the cache */ - - /* ('ige', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ige', 'a', ('i2i16', 'b')) */ - /* search1717_0_0 -> 11 in the cache */ - /* search1717_0 -> 2137 in the cache */ - /* search1717_1_0 -> 268 in the cache */ - /* search1717_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2137, 4755 }, - -1, - } }, - - /* replace1717_0 -> 11 in the cache */ - /* replace1717_1_0 -> 268 in the cache */ - /* replace1717_1 -> 4698 in the cache */ - /* replace1717 -> 4703 in the cache */ - - /* ('ilt', ('i2i64', 'a@16'), ('i2i64', 'b@16')) => ('ilt', 'a', ('i2i16', 'b')) */ - /* search1718_0_0 -> 11 in the cache */ - /* search1718_0 -> 2137 in the cache */ - /* search1718_1_0 -> 268 in the cache */ - /* search1718_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2137, 4755 }, - -1, - } }, - - /* replace1718_0 -> 11 in the cache */ - /* replace1718_1_0 -> 268 in the cache */ - /* replace1718_1 -> 4698 in the cache */ - /* replace1718 -> 4705 in the cache */ - - /* ('ige', ('i2i64', 'b@16'), ('i2i64', 'a@16')) => ('ige', ('i2i16', 'b'), 'a') */ - /* search1719_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 525 }, - -1, - } }, - /* search1719_1_0 -> 536 in the cache */ - /* search1719_1 -> 4752 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4760, 4752 }, - -1, - } }, - - /* replace1719_0_0 -> 525 in the cache */ - /* replace1719_0 -> 4708 in the cache */ - /* replace1719_1 -> 536 in the cache */ - /* replace1719 -> 4709 in the cache */ - - /* ('ilt', ('i2i64', 'b@16'), ('i2i64', 'a@16')) => ('ilt', ('i2i16', 'b'), 'a') */ - /* search1720_0_0 -> 525 in the cache */ - /* search1720_0 -> 4760 in the cache */ - /* search1720_1_0 -> 536 in the cache */ - /* search1720_1 -> 4752 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4760, 4752 }, - -1, - } }, - - /* replace1720_0_0 -> 525 in the cache */ - /* replace1720_0 -> 4708 in the cache */ - /* replace1720_1 -> 536 in the cache */ - /* replace1720 -> 4711 in the cache */ - - /* ('ieq', ('i2i64', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('i2i16', 'b')), ('ieq', ('i2i64', ('i2i16', 'b')), 'b')) */ - /* search1721_0_0 -> 11 in the cache */ - /* search1721_0 -> 2137 in the cache */ - /* search1721_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2137, 4644 }, - -1, - } }, - - /* replace1721_0_0 -> 11 in the cache */ - /* replace1721_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 11, 4764 }, - -1, - } }, - /* replace1721_1_0_0_0 -> 41 in the cache */ - /* replace1721_1_0_0 -> 4764 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4764 }, - -1, - } }, - /* replace1721_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4766, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4765, 4767 }, - -1, - } }, - - /* ('ine', ('i2i64', 'a@16'), '#b') => ('ior', ('ine', 'a', ('i2i16', 'b')), ('ine', ('i2i64', ('i2i16', 'b')), 'b')) */ - /* search1722_0_0 -> 11 in the cache */ - /* search1722_0 -> 2137 in the cache */ - /* search1722_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2137, 4644 }, - -1, - } }, - - /* replace1722_0_0 -> 11 in the cache */ - /* replace1722_0_1_0 -> 41 in the cache */ - /* replace1722_0_1 -> 4764 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 11, 4764 }, - -1, - } }, - /* replace1722_1_0_0_0 -> 41 in the cache */ - /* replace1722_1_0_0 -> 4764 in the cache */ - /* replace1722_1_0 -> 4766 in the cache */ - /* replace1722_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4766, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4770, 4771 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'a@16'), '#b') => ('iand', ('ilt', -32768, 'b'), ('ior', ('ilt', 32767, 'b'), ('ilt', 'a', ('i2i16', 'b')))) */ - /* search1723_0_0 -> 11 in the cache */ - /* search1723_0 -> 2137 in the cache */ - /* search1723_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2137, 4644 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { -0x8000 /* -32768 */ }, - } }, - /* replace1723_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4774, 41 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x7fff /* 32767 */ }, - } }, - /* replace1723_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4776, 41 }, - -1, - } }, - /* replace1723_1_1_0 -> 11 in the cache */ - /* replace1723_1_1_1_0 -> 41 in the cache */ - /* replace1723_1_1_1 -> 4764 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 11, 4764 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4777, 4778 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4775, 4779 }, - -1, - } }, - - /* ('ilt', '#a', ('i2i64', 'b@16')) => ('iand', ('ilt', 'a', 32767), ('ior', ('ilt', 'a', -32768), ('ilt', ('i2i16', 'a'), 'b'))) */ - /* search1724_0 -> 4663 in the cache */ - /* search1724_1_0 -> 268 in the cache */ - /* search1724_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4663, 4755 }, - -1, - } }, - - /* replace1724_0_0 -> 21 in the cache */ - /* replace1724_0_1 -> 4776 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 4776 }, - -1, - } }, - /* replace1724_1_0_0 -> 21 in the cache */ - /* replace1724_1_0_1 -> 4774 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 4774 }, - -1, - } }, - /* replace1724_1_1_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 21 }, - -1, - } }, - /* replace1724_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4784, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4783, 4785 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4782, 4786 }, - -1, - } }, - - /* ('ige', ('i2i64', 'a@16'), '#b') => ('iand', ('ige', 32767, 'b'), ('ior', ('ige', -32768, 'b'), ('ige', 'a', ('i2i16', 'b')))) */ - /* search1725_0_0 -> 11 in the cache */ - /* search1725_0 -> 2137 in the cache */ - /* search1725_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2137, 4644 }, - -1, - } }, - - /* replace1725_0_0 -> 4776 in the cache */ - /* replace1725_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4776, 41 }, - -1, - } }, - /* replace1725_1_0_0 -> 4774 in the cache */ - /* replace1725_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4774, 41 }, - -1, - } }, - /* replace1725_1_1_0 -> 11 in the cache */ - /* replace1725_1_1_1_0 -> 41 in the cache */ - /* replace1725_1_1_1 -> 4764 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 11, 4764 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4790, 4791 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4789, 4792 }, - -1, - } }, - - /* ('ige', '#a', ('i2i64', 'b@16')) => ('iand', ('ige', 'a', -32768), ('ior', ('ige', 'a', 32767), ('ige', ('i2i16', 'a'), 'b'))) */ - /* search1726_0 -> 4663 in the cache */ - /* search1726_1_0 -> 268 in the cache */ - /* search1726_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4663, 4755 }, - -1, - } }, - - /* replace1726_0_0 -> 21 in the cache */ - /* replace1726_0_1 -> 4774 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 21, 4774 }, - -1, - } }, - /* replace1726_1_0_0 -> 21 in the cache */ - /* replace1726_1_0_1 -> 4776 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 21, 4776 }, - -1, - } }, - /* replace1726_1_1_0_0 -> 21 in the cache */ - /* replace1726_1_1_0 -> 4784 in the cache */ - /* replace1726_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4784, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4796, 4797 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4795, 4798 }, - -1, - } }, - - /* ('ieq', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ieq', 'a', ('i2i32', 'b')) */ - /* search1727_0_0 -> 16 in the cache */ - /* search1727_0 -> 2147 in the cache */ - /* search1727_1_0 -> 2280 in the cache */ - /* search1727_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2147, 4635 }, - -1, - } }, - - /* replace1727_0 -> 16 in the cache */ - /* replace1727_1_0 -> 2280 in the cache */ - /* replace1727_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 4590 }, - -1, - } }, - - /* ('ine', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ine', 'a', ('i2i32', 'b')) */ - /* search1728_0_0 -> 16 in the cache */ - /* search1728_0 -> 2147 in the cache */ - /* search1728_1_0 -> 2280 in the cache */ - /* search1728_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2147, 4635 }, - -1, - } }, - - /* replace1728_0 -> 16 in the cache */ - /* replace1728_1_0 -> 2280 in the cache */ - /* replace1728_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 4590 }, - -1, - } }, - - /* ('ige', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ige', 'a', ('i2i32', 'b')) */ - /* search1729_0_0 -> 16 in the cache */ - /* search1729_0 -> 2147 in the cache */ - /* search1729_1_0 -> 2280 in the cache */ - /* search1729_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2147, 4635 }, - -1, - } }, - - /* replace1729_0 -> 16 in the cache */ - /* replace1729_1_0 -> 2280 in the cache */ - /* replace1729_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4590 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'a@32'), ('i2i64', 'b@8')) => ('ilt', 'a', ('i2i32', 'b')) */ - /* search1730_0_0 -> 16 in the cache */ - /* search1730_0 -> 2147 in the cache */ - /* search1730_1_0 -> 2280 in the cache */ - /* search1730_1 -> 4635 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2147, 4635 }, - -1, - } }, - - /* replace1730_0 -> 16 in the cache */ - /* replace1730_1_0 -> 2280 in the cache */ - /* replace1730_1 -> 4590 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4590 }, - -1, - } }, - - /* ('ige', ('i2i64', 'b@8'), ('i2i64', 'a@32')) => ('ige', ('i2i32', 'b'), 'a') */ - /* search1731_0_0 -> 4543 in the cache */ - /* search1731_0 -> 4640 in the cache */ - /* search1731_1_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4640, 4808 }, - -1, - } }, - - /* replace1731_0_0 -> 4543 in the cache */ - /* replace1731_0 -> 4595 in the cache */ - /* replace1731_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4595, 189 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'b@8'), ('i2i64', 'a@32')) => ('ilt', ('i2i32', 'b'), 'a') */ - /* search1732_0_0 -> 4543 in the cache */ - /* search1732_0 -> 4640 in the cache */ - /* search1732_1_0 -> 189 in the cache */ - /* search1732_1 -> 4808 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4640, 4808 }, - -1, - } }, - - /* replace1732_0_0 -> 4543 in the cache */ - /* replace1732_0 -> 4595 in the cache */ - /* replace1732_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4595, 189 }, - -1, - } }, - - /* ('ieq', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ieq', 'a', ('i2i32', 'b')) */ - /* search1733_0_0 -> 16 in the cache */ - /* search1733_0 -> 2147 in the cache */ - /* search1733_1_0 -> 268 in the cache */ - /* search1733_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2147, 4755 }, - -1, - } }, - - /* replace1733_0 -> 16 in the cache */ - /* replace1733_1_0 -> 268 in the cache */ - /* replace1733_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 4696 }, - -1, - } }, - - /* ('ine', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ine', 'a', ('i2i32', 'b')) */ - /* search1734_0_0 -> 16 in the cache */ - /* search1734_0 -> 2147 in the cache */ - /* search1734_1_0 -> 268 in the cache */ - /* search1734_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2147, 4755 }, - -1, - } }, - - /* replace1734_0 -> 16 in the cache */ - /* replace1734_1_0 -> 268 in the cache */ - /* replace1734_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 4696 }, - -1, - } }, - - /* ('ige', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ige', 'a', ('i2i32', 'b')) */ - /* search1735_0_0 -> 16 in the cache */ - /* search1735_0 -> 2147 in the cache */ - /* search1735_1_0 -> 268 in the cache */ - /* search1735_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2147, 4755 }, - -1, - } }, - - /* replace1735_0 -> 16 in the cache */ - /* replace1735_1_0 -> 268 in the cache */ - /* replace1735_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4696 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'a@32'), ('i2i64', 'b@16')) => ('ilt', 'a', ('i2i32', 'b')) */ - /* search1736_0_0 -> 16 in the cache */ - /* search1736_0 -> 2147 in the cache */ - /* search1736_1_0 -> 268 in the cache */ - /* search1736_1 -> 4755 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2147, 4755 }, - -1, - } }, - - /* replace1736_0 -> 16 in the cache */ - /* replace1736_1_0 -> 268 in the cache */ - /* replace1736_1 -> 4696 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4696 }, - -1, - } }, - - /* ('ige', ('i2i64', 'b@16'), ('i2i64', 'a@32')) => ('ige', ('i2i32', 'b'), 'a') */ - /* search1737_0_0 -> 525 in the cache */ - /* search1737_0 -> 4760 in the cache */ - /* search1737_1_0 -> 189 in the cache */ - /* search1737_1 -> 4808 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4760, 4808 }, - -1, - } }, - - /* replace1737_0_0 -> 525 in the cache */ - /* replace1737_0 -> 4706 in the cache */ - /* replace1737_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4706, 189 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'b@16'), ('i2i64', 'a@32')) => ('ilt', ('i2i32', 'b'), 'a') */ - /* search1738_0_0 -> 525 in the cache */ - /* search1738_0 -> 4760 in the cache */ - /* search1738_1_0 -> 189 in the cache */ - /* search1738_1 -> 4808 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4760, 4808 }, - -1, - } }, - - /* replace1738_0_0 -> 525 in the cache */ - /* replace1738_0 -> 4706 in the cache */ - /* replace1738_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4706, 189 }, - -1, - } }, - - /* ('ieq', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ieq', 'a', ('i2i32', 'b')) */ - /* search1739_0_0 -> 16 in the cache */ - /* search1739_0 -> 2147 in the cache */ - /* search1739_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2147, 4825 }, - -1, - } }, - - /* replace1739_0 -> 16 in the cache */ - /* replace1739_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 4827 }, - -1, - } }, - - /* ('ine', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ine', 'a', ('i2i32', 'b')) */ - /* search1740_0_0 -> 16 in the cache */ - /* search1740_0 -> 2147 in the cache */ - /* search1740_1_0 -> 36 in the cache */ - /* search1740_1 -> 4825 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2147, 4825 }, - -1, - } }, - - /* replace1740_0 -> 16 in the cache */ - /* replace1740_1_0 -> 36 in the cache */ - /* replace1740_1 -> 4827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 4827 }, - -1, - } }, - - /* ('ige', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ige', 'a', ('i2i32', 'b')) */ - /* search1741_0_0 -> 16 in the cache */ - /* search1741_0 -> 2147 in the cache */ - /* search1741_1_0 -> 36 in the cache */ - /* search1741_1 -> 4825 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2147, 4825 }, - -1, - } }, - - /* replace1741_0 -> 16 in the cache */ - /* replace1741_1_0 -> 36 in the cache */ - /* replace1741_1 -> 4827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4827 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'a@32'), ('i2i64', 'b@32')) => ('ilt', 'a', ('i2i32', 'b')) */ - /* search1742_0_0 -> 16 in the cache */ - /* search1742_0 -> 2147 in the cache */ - /* search1742_1_0 -> 36 in the cache */ - /* search1742_1 -> 4825 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2147, 4825 }, - -1, - } }, - - /* replace1742_0 -> 16 in the cache */ - /* replace1742_1_0 -> 36 in the cache */ - /* replace1742_1 -> 4827 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4827 }, - -1, - } }, - - /* ('ige', ('i2i64', 'b@32'), ('i2i64', 'a@32')) => ('ige', ('i2i32', 'b'), 'a') */ - /* search1743_0_0 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 383 }, - -1, - } }, - /* search1743_1_0 -> 189 in the cache */ - /* search1743_1 -> 4808 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4835, 4808 }, - -1, - } }, - - /* replace1743_0_0 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 383 }, - -1, - } }, - /* replace1743_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4837, 189 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'b@32'), ('i2i64', 'a@32')) => ('ilt', ('i2i32', 'b'), 'a') */ - /* search1744_0_0 -> 383 in the cache */ - /* search1744_0 -> 4835 in the cache */ - /* search1744_1_0 -> 189 in the cache */ - /* search1744_1 -> 4808 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4835, 4808 }, - -1, - } }, - - /* replace1744_0_0 -> 383 in the cache */ - /* replace1744_0 -> 4837 in the cache */ - /* replace1744_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4837, 189 }, - -1, - } }, - - /* ('ieq', ('i2i64', 'a@32'), '#b') => ('iand', ('ieq', 'a', ('i2i32', 'b')), ('ieq', ('i2i64', ('i2i32', 'b')), 'b')) */ - /* search1745_0_0 -> 16 in the cache */ - /* search1745_0 -> 2147 in the cache */ - /* search1745_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2147, 4644 }, - -1, - } }, - - /* replace1745_0_0 -> 16 in the cache */ - /* replace1745_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 16, 4842 }, - -1, - } }, - /* replace1745_1_0_0_0 -> 41 in the cache */ - /* replace1745_1_0_0 -> 4842 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_i2i64, - -1, 0, - { 4842 }, - -1, - } }, - /* replace1745_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4844, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4843, 4845 }, - -1, - } }, - - /* ('ine', ('i2i64', 'a@32'), '#b') => ('ior', ('ine', 'a', ('i2i32', 'b')), ('ine', ('i2i64', ('i2i32', 'b')), 'b')) */ - /* search1746_0_0 -> 16 in the cache */ - /* search1746_0 -> 2147 in the cache */ - /* search1746_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2147, 4644 }, - -1, - } }, - - /* replace1746_0_0 -> 16 in the cache */ - /* replace1746_0_1_0 -> 41 in the cache */ - /* replace1746_0_1 -> 4842 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 16, 4842 }, - -1, - } }, - /* replace1746_1_0_0_0 -> 41 in the cache */ - /* replace1746_1_0_0 -> 4842 in the cache */ - /* replace1746_1_0 -> 4844 in the cache */ - /* replace1746_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4844, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4848, 4849 }, - -1, - } }, - - /* ('ilt', ('i2i64', 'a@32'), '#b') => ('iand', ('ilt', -2147483648, 'b'), ('ior', ('ilt', 2147483647, 'b'), ('ilt', 'a', ('i2i32', 'b')))) */ - /* search1747_0_0 -> 16 in the cache */ - /* search1747_0 -> 2147 in the cache */ - /* search1747_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 2147, 4644 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { -0x80000000 /* -2147483648 */ }, - } }, - /* replace1747_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4852, 41 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x7fffffff /* 2147483647 */ }, - } }, - /* replace1747_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4854, 41 }, - -1, - } }, - /* replace1747_1_1_0 -> 16 in the cache */ - /* replace1747_1_1_1_0 -> 41 in the cache */ - /* replace1747_1_1_1 -> 4842 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 16, 4842 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4855, 4856 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4853, 4857 }, - -1, - } }, - - /* ('ilt', '#a', ('i2i64', 'b@32')) => ('iand', ('ilt', 'a', 2147483647), ('ior', ('ilt', 'a', -2147483648), ('ilt', ('i2i32', 'a'), 'b'))) */ - /* search1748_0 -> 4663 in the cache */ - /* search1748_1_0 -> 36 in the cache */ - /* search1748_1 -> 4825 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4663, 4825 }, - -1, - } }, - - /* replace1748_0_0 -> 21 in the cache */ - /* replace1748_0_1 -> 4854 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 4854 }, - -1, - } }, - /* replace1748_1_0_0 -> 21 in the cache */ - /* replace1748_1_0_1 -> 4852 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 21, 4852 }, - -1, - } }, - /* replace1748_1_1_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 21 }, - -1, - } }, - /* replace1748_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 4862, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4861, 4863 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4860, 4864 }, - -1, - } }, - - /* ('ige', ('i2i64', 'a@32'), '#b') => ('iand', ('ige', 2147483647, 'b'), ('ior', ('ige', -2147483648, 'b'), ('ige', 'a', ('i2i32', 'b')))) */ - /* search1749_0_0 -> 16 in the cache */ - /* search1749_0 -> 2147 in the cache */ - /* search1749_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 2147, 4644 }, - -1, - } }, - - /* replace1749_0_0 -> 4854 in the cache */ - /* replace1749_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4854, 41 }, - -1, - } }, - /* replace1749_1_0_0 -> 4852 in the cache */ - /* replace1749_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4852, 41 }, - -1, - } }, - /* replace1749_1_1_0 -> 16 in the cache */ - /* replace1749_1_1_1_0 -> 41 in the cache */ - /* replace1749_1_1_1 -> 4842 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 16, 4842 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4868, 4869 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4867, 4870 }, - -1, - } }, - - /* ('ige', '#a', ('i2i64', 'b@32')) => ('iand', ('ige', 'a', -2147483648), ('ior', ('ige', 'a', 2147483647), ('ige', ('i2i32', 'a'), 'b'))) */ - /* search1750_0 -> 4663 in the cache */ - /* search1750_1_0 -> 36 in the cache */ - /* search1750_1 -> 4825 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4663, 4825 }, - -1, - } }, - - /* replace1750_0_0 -> 21 in the cache */ - /* replace1750_0_1 -> 4852 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 21, 4852 }, - -1, - } }, - /* replace1750_1_0_0 -> 21 in the cache */ - /* replace1750_1_0_1 -> 4854 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 21, 4854 }, - -1, - } }, - /* replace1750_1_1_0_0 -> 21 in the cache */ - /* replace1750_1_1_0 -> 4862 in the cache */ - /* replace1750_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 4862, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4874, 4875 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4873, 4876 }, - -1, - } }, - - /* ('ieq', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('ieq', 'a', ('u2u8', 'b')) */ - /* search1751_0_0 -> 6 in the cache */ - /* search1751_0 -> 2093 in the cache */ - /* search1751_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2093, 4878 }, - -1, - } }, - - /* replace1751_0 -> 6 in the cache */ - /* replace1751_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 6, 4880 }, - -1, - } }, - - /* ('ine', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('ine', 'a', ('u2u8', 'b')) */ - /* search1752_0_0 -> 6 in the cache */ - /* search1752_0 -> 2093 in the cache */ - /* search1752_1_0 -> 2280 in the cache */ - /* search1752_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2093, 4878 }, - -1, - } }, - - /* replace1752_0 -> 6 in the cache */ - /* replace1752_1_0 -> 2280 in the cache */ - /* replace1752_1 -> 4880 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 6, 4880 }, - -1, - } }, - - /* ('uge', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('uge', 'a', ('u2u8', 'b')) */ - /* search1753_0_0 -> 6 in the cache */ - /* search1753_0 -> 2093 in the cache */ - /* search1753_1_0 -> 2280 in the cache */ - /* search1753_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2093, 4878 }, - -1, - } }, - - /* replace1753_0 -> 6 in the cache */ - /* replace1753_1_0 -> 2280 in the cache */ - /* replace1753_1 -> 4880 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 6, 4880 }, - -1, - } }, - - /* ('ult', ('u2u16', 'a@8'), ('u2u16', 'b@8')) => ('ult', 'a', ('u2u8', 'b')) */ - /* search1754_0_0 -> 6 in the cache */ - /* search1754_0 -> 2093 in the cache */ - /* search1754_1_0 -> 2280 in the cache */ - /* search1754_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2093, 4878 }, - -1, - } }, - - /* replace1754_0 -> 6 in the cache */ - /* replace1754_1_0 -> 2280 in the cache */ - /* replace1754_1 -> 4880 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 6, 4880 }, - -1, - } }, - - /* ('uge', ('u2u16', 'b@8'), ('u2u16', 'a@8')) => ('uge', ('u2u8', 'b'), 'a') */ - /* search1755_0_0 -> 4543 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4543 }, - -1, - } }, - /* search1755_1_0 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4545 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4888, 4889 }, - -1, - } }, - - /* replace1755_0_0 -> 4543 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 4543 }, - -1, - } }, - /* replace1755_1 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4891, 4545 }, - -1, - } }, - - /* ('ult', ('u2u16', 'b@8'), ('u2u16', 'a@8')) => ('ult', ('u2u8', 'b'), 'a') */ - /* search1756_0_0 -> 4543 in the cache */ - /* search1756_0 -> 4888 in the cache */ - /* search1756_1_0 -> 4545 in the cache */ - /* search1756_1 -> 4889 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4888, 4889 }, - -1, - } }, - - /* replace1756_0_0 -> 4543 in the cache */ - /* replace1756_0 -> 4891 in the cache */ - /* replace1756_1 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4891, 4545 }, - -1, - } }, - - /* ('ieq', ('u2u16', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('u2u8', 'b')), ('ieq', ('u2u16', ('u2u8', 'b')), 'b')) */ - /* search1757_0_0 -> 6 in the cache */ - /* search1757_0 -> 2093 in the cache */ - /* search1757_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2093, 2179 }, - -1, - } }, - - /* replace1757_0_0 -> 6 in the cache */ - /* replace1757_0_1_0 -> 268 in the cache */ - /* replace1757_0_1 -> 2187 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 6, 2187 }, - -1, - } }, - /* replace1757_1_0_0_0 -> 268 in the cache */ - /* replace1757_1_0_0 -> 2187 in the cache */ - /* replace1757_1_0 -> 2188 in the cache */ - /* replace1757_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 2188, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4896, 4897 }, - -1, - } }, - - /* ('ine', ('u2u16', 'a@8'), '#b') => ('ior', ('ine', 'a', ('u2u8', 'b')), ('ine', ('u2u16', ('u2u8', 'b')), 'b')) */ - /* search1758_0_0 -> 6 in the cache */ - /* search1758_0 -> 2093 in the cache */ - /* search1758_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2093, 2179 }, - -1, - } }, - - /* replace1758_0_0 -> 6 in the cache */ - /* replace1758_0_1_0 -> 268 in the cache */ - /* replace1758_0_1 -> 2187 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 6, 2187 }, - -1, - } }, - /* replace1758_1_0_0_0 -> 268 in the cache */ - /* replace1758_1_0_0 -> 2187 in the cache */ - /* replace1758_1_0 -> 2188 in the cache */ - /* replace1758_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 2188, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4900, 4901 }, - -1, - } }, - - /* ('ult', ('u2u16', 'a@8'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 255, 'b'), ('ult', 'a', ('u2u8', 'b')))) */ - /* search1759_0_0 -> 6 in the cache */ - /* search1759_0 -> 2093 in the cache */ - /* search1759_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2093, 2179 }, - -1, - } }, - - /* replace1759_0_0 -> 869 in the cache */ - /* replace1759_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 869, 268 }, - -1, - } }, - /* replace1759_1_0_0 -> 2181 in the cache */ - /* replace1759_1_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2181, 268 }, - -1, - } }, - /* replace1759_1_1_0 -> 6 in the cache */ - /* replace1759_1_1_1_0 -> 268 in the cache */ - /* replace1759_1_1_1 -> 2187 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 6, 2187 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4905, 4906 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4904, 4907 }, - -1, - } }, - - /* ('ult', '#a', ('u2u16', 'b@8')) => ('iand', ('ult', 'a', 255), ('ior', ('ult', 'a', 0), ('ult', ('u2u8', 'a'), 'b'))) */ - /* search1760_0 -> 4570 in the cache */ - /* search1760_1_0 -> 2280 in the cache */ - /* search1760_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4570, 4878 }, - -1, - } }, - - /* replace1760_0_0 -> 11 in the cache */ - /* replace1760_0_1 -> 2181 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 11, 2181 }, - -1, - } }, - /* replace1760_1_0_0 -> 11 in the cache */ - /* replace1760_1_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 11, 869 }, - -1, - } }, - /* replace1760_1_1_0_0 -> 11 in the cache */ - /* replace1760_1_1_0 -> 2177 in the cache */ - /* replace1760_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2177, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4911, 4912 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4910, 4913 }, - -1, - } }, - - /* ('uge', ('u2u16', 'a@8'), '#b') => ('iand', ('uge', 255, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u8', 'b')))) */ - /* search1761_0_0 -> 6 in the cache */ - /* search1761_0 -> 2093 in the cache */ - /* search1761_1 -> 2179 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2093, 2179 }, - -1, - } }, - - /* replace1761_0_0 -> 2181 in the cache */ - /* replace1761_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2181, 268 }, - -1, - } }, - /* replace1761_1_0_0 -> 869 in the cache */ - /* replace1761_1_0_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 869, 268 }, - -1, - } }, - /* replace1761_1_1_0 -> 6 in the cache */ - /* replace1761_1_1_1_0 -> 268 in the cache */ - /* replace1761_1_1_1 -> 2187 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 6, 2187 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4917, 4918 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4916, 4919 }, - -1, - } }, - - /* ('uge', '#a', ('u2u16', 'b@8')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 255), ('uge', ('u2u8', 'a'), 'b'))) */ - /* search1762_0 -> 4570 in the cache */ - /* search1762_1_0 -> 2280 in the cache */ - /* search1762_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4570, 4878 }, - -1, - } }, - - /* replace1762_0_0 -> 11 in the cache */ - /* replace1762_0_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 11, 869 }, - -1, - } }, - /* replace1762_1_0_0 -> 11 in the cache */ - /* replace1762_1_0_1 -> 2181 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 11, 2181 }, - -1, - } }, - /* replace1762_1_1_0_0 -> 11 in the cache */ - /* replace1762_1_1_0 -> 2177 in the cache */ - /* replace1762_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2177, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4923, 4924 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4922, 4925 }, - -1, - } }, - - /* ('ieq', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('ieq', 'a', ('u2u8', 'b')) */ - /* search1763_0_0 -> 6 in the cache */ - /* search1763_0 -> 2099 in the cache */ - /* search1763_1_0 -> 2280 in the cache */ - /* search1763_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2099, 3450 }, - -1, - } }, - - /* replace1763_0 -> 6 in the cache */ - /* replace1763_1_0 -> 2280 in the cache */ - /* replace1763_1 -> 4880 in the cache */ - /* replace1763 -> 4881 in the cache */ - - /* ('ine', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('ine', 'a', ('u2u8', 'b')) */ - /* search1764_0_0 -> 6 in the cache */ - /* search1764_0 -> 2099 in the cache */ - /* search1764_1_0 -> 2280 in the cache */ - /* search1764_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2099, 3450 }, - -1, - } }, - - /* replace1764_0 -> 6 in the cache */ - /* replace1764_1_0 -> 2280 in the cache */ - /* replace1764_1 -> 4880 in the cache */ - /* replace1764 -> 4883 in the cache */ - - /* ('uge', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('uge', 'a', ('u2u8', 'b')) */ - /* search1765_0_0 -> 6 in the cache */ - /* search1765_0 -> 2099 in the cache */ - /* search1765_1_0 -> 2280 in the cache */ - /* search1765_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2099, 3450 }, - -1, - } }, - - /* replace1765_0 -> 6 in the cache */ - /* replace1765_1_0 -> 2280 in the cache */ - /* replace1765_1 -> 4880 in the cache */ - /* replace1765 -> 4885 in the cache */ - - /* ('ult', ('u2u32', 'a@8'), ('u2u32', 'b@8')) => ('ult', 'a', ('u2u8', 'b')) */ - /* search1766_0_0 -> 6 in the cache */ - /* search1766_0 -> 2099 in the cache */ - /* search1766_1_0 -> 2280 in the cache */ - /* search1766_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2099, 3450 }, - -1, - } }, - - /* replace1766_0 -> 6 in the cache */ - /* replace1766_1_0 -> 2280 in the cache */ - /* replace1766_1 -> 4880 in the cache */ - /* replace1766 -> 4887 in the cache */ - - /* ('uge', ('u2u32', 'b@8'), ('u2u32', 'a@8')) => ('uge', ('u2u8', 'b'), 'a') */ - /* search1767_0_0 -> 4543 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4543 }, - -1, - } }, - /* search1767_1_0 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4545 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4931, 4932 }, - -1, - } }, - - /* replace1767_0_0 -> 4543 in the cache */ - /* replace1767_0 -> 4891 in the cache */ - /* replace1767_1 -> 4545 in the cache */ - /* replace1767 -> 4892 in the cache */ - - /* ('ult', ('u2u32', 'b@8'), ('u2u32', 'a@8')) => ('ult', ('u2u8', 'b'), 'a') */ - /* search1768_0_0 -> 4543 in the cache */ - /* search1768_0 -> 4931 in the cache */ - /* search1768_1_0 -> 4545 in the cache */ - /* search1768_1 -> 4932 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4931, 4932 }, - -1, - } }, - - /* replace1768_0_0 -> 4543 in the cache */ - /* replace1768_0 -> 4891 in the cache */ - /* replace1768_1 -> 4545 in the cache */ - /* replace1768 -> 4894 in the cache */ - - /* ('ieq', ('u2u32', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('u2u8', 'b')), ('ieq', ('u2u32', ('u2u8', 'b')), 'b')) */ - /* search1769_0_0 -> 6 in the cache */ - /* search1769_0 -> 2099 in the cache */ - /* search1769_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2099, 33 }, - -1, - } }, - - /* replace1769_0_0 -> 6 in the cache */ - /* replace1769_0_1_0 -> 36 in the cache */ - /* replace1769_0_1 -> 2195 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 6, 2195 }, - -1, - } }, - /* replace1769_1_0_0_0 -> 36 in the cache */ - /* replace1769_1_0_0 -> 2195 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2195 }, - -1, - } }, - /* replace1769_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4937, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4936, 4938 }, - -1, - } }, - - /* ('ine', ('u2u32', 'a@8'), '#b') => ('ior', ('ine', 'a', ('u2u8', 'b')), ('ine', ('u2u32', ('u2u8', 'b')), 'b')) */ - /* search1770_0_0 -> 6 in the cache */ - /* search1770_0 -> 2099 in the cache */ - /* search1770_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2099, 33 }, - -1, - } }, - - /* replace1770_0_0 -> 6 in the cache */ - /* replace1770_0_1_0 -> 36 in the cache */ - /* replace1770_0_1 -> 2195 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 6, 2195 }, - -1, - } }, - /* replace1770_1_0_0_0 -> 36 in the cache */ - /* replace1770_1_0_0 -> 2195 in the cache */ - /* replace1770_1_0 -> 4937 in the cache */ - /* replace1770_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4937, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4941, 4942 }, - -1, - } }, - - /* ('ult', ('u2u32', 'a@8'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 255, 'b'), ('ult', 'a', ('u2u8', 'b')))) */ - /* search1771_0_0 -> 6 in the cache */ - /* search1771_0 -> 2099 in the cache */ - /* search1771_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2099, 33 }, - -1, - } }, - - /* replace1771_0_0 -> 128 in the cache */ - /* replace1771_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 128, 36 }, - -1, - } }, - /* replace1771_1_0_0 -> 1023 in the cache */ - /* replace1771_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 1023, 36 }, - -1, - } }, - /* replace1771_1_1_0 -> 6 in the cache */ - /* replace1771_1_1_1_0 -> 36 in the cache */ - /* replace1771_1_1_1 -> 2195 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 6, 2195 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4946, 4947 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4945, 4948 }, - -1, - } }, - - /* ('ult', '#a', ('u2u32', 'b@8')) => ('iand', ('ult', 'a', 255), ('ior', ('ult', 'a', 0), ('ult', ('u2u8', 'a'), 'b'))) */ - /* search1772_0 -> 296 in the cache */ - /* search1772_1_0 -> 2280 in the cache */ - /* search1772_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 296, 3450 }, - -1, - } }, - - /* replace1772_0_0 -> 16 in the cache */ - /* replace1772_0_1 -> 1023 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 1023 }, - -1, - } }, - /* replace1772_1_0_0 -> 16 in the cache */ - /* replace1772_1_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 128 }, - -1, - } }, - /* replace1772_1_1_0_0 -> 16 in the cache */ - /* replace1772_1_1_0 -> 2193 in the cache */ - /* replace1772_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2193, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4952, 4953 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4951, 4954 }, - -1, - } }, - - /* ('uge', ('u2u32', 'a@8'), '#b') => ('iand', ('uge', 255, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u8', 'b')))) */ - /* search1773_0_0 -> 6 in the cache */ - /* search1773_0 -> 2099 in the cache */ - /* search1773_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2099, 33 }, - -1, - } }, - - /* replace1773_0_0 -> 1023 in the cache */ - /* replace1773_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 1023, 36 }, - -1, - } }, - /* replace1773_1_0_0 -> 128 in the cache */ - /* replace1773_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 128, 36 }, - -1, - } }, - /* replace1773_1_1_0 -> 6 in the cache */ - /* replace1773_1_1_1_0 -> 36 in the cache */ - /* replace1773_1_1_1 -> 2195 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 6, 2195 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4958, 4959 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4957, 4960 }, - -1, - } }, - - /* ('uge', '#a', ('u2u32', 'b@8')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 255), ('uge', ('u2u8', 'a'), 'b'))) */ - /* search1774_0 -> 296 in the cache */ - /* search1774_1_0 -> 2280 in the cache */ - /* search1774_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 296, 3450 }, - -1, - } }, - - /* replace1774_0_0 -> 16 in the cache */ - /* replace1774_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 128 }, - -1, - } }, - /* replace1774_1_0_0 -> 16 in the cache */ - /* replace1774_1_0_1 -> 1023 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 1023 }, - -1, - } }, - /* replace1774_1_1_0_0 -> 16 in the cache */ - /* replace1774_1_1_0 -> 2193 in the cache */ - /* replace1774_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2193, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4964, 4965 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4963, 4966 }, - -1, - } }, - - /* ('ieq', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('ieq', 'a', ('u2u8', 'b')) */ - /* search1775_0_0 -> 6 in the cache */ - /* search1775_0 -> 2103 in the cache */ - /* search1775_1_0 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2103, 4968 }, - -1, - } }, - - /* replace1775_0 -> 6 in the cache */ - /* replace1775_1_0 -> 2280 in the cache */ - /* replace1775_1 -> 4880 in the cache */ - /* replace1775 -> 4881 in the cache */ - - /* ('ine', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('ine', 'a', ('u2u8', 'b')) */ - /* search1776_0_0 -> 6 in the cache */ - /* search1776_0 -> 2103 in the cache */ - /* search1776_1_0 -> 2280 in the cache */ - /* search1776_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2103, 4968 }, - -1, - } }, - - /* replace1776_0 -> 6 in the cache */ - /* replace1776_1_0 -> 2280 in the cache */ - /* replace1776_1 -> 4880 in the cache */ - /* replace1776 -> 4883 in the cache */ - - /* ('uge', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('uge', 'a', ('u2u8', 'b')) */ - /* search1777_0_0 -> 6 in the cache */ - /* search1777_0 -> 2103 in the cache */ - /* search1777_1_0 -> 2280 in the cache */ - /* search1777_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2103, 4968 }, - -1, - } }, - - /* replace1777_0 -> 6 in the cache */ - /* replace1777_1_0 -> 2280 in the cache */ - /* replace1777_1 -> 4880 in the cache */ - /* replace1777 -> 4885 in the cache */ - - /* ('ult', ('u2u64', 'a@8'), ('u2u64', 'b@8')) => ('ult', 'a', ('u2u8', 'b')) */ - /* search1778_0_0 -> 6 in the cache */ - /* search1778_0 -> 2103 in the cache */ - /* search1778_1_0 -> 2280 in the cache */ - /* search1778_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2103, 4968 }, - -1, - } }, - - /* replace1778_0 -> 6 in the cache */ - /* replace1778_1_0 -> 2280 in the cache */ - /* replace1778_1 -> 4880 in the cache */ - /* replace1778 -> 4887 in the cache */ - - /* ('uge', ('u2u64', 'b@8'), ('u2u64', 'a@8')) => ('uge', ('u2u8', 'b'), 'a') */ - /* search1779_0_0 -> 4543 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 4543 }, - -1, - } }, - /* search1779_1_0 -> 4545 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 4545 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4973, 4974 }, - -1, - } }, - - /* replace1779_0_0 -> 4543 in the cache */ - /* replace1779_0 -> 4891 in the cache */ - /* replace1779_1 -> 4545 in the cache */ - /* replace1779 -> 4892 in the cache */ - - /* ('ult', ('u2u64', 'b@8'), ('u2u64', 'a@8')) => ('ult', ('u2u8', 'b'), 'a') */ - /* search1780_0_0 -> 4543 in the cache */ - /* search1780_0 -> 4973 in the cache */ - /* search1780_1_0 -> 4545 in the cache */ - /* search1780_1 -> 4974 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4973, 4974 }, - -1, - } }, - - /* replace1780_0_0 -> 4543 in the cache */ - /* replace1780_0 -> 4891 in the cache */ - /* replace1780_1 -> 4545 in the cache */ - /* replace1780 -> 4894 in the cache */ - - /* ('ieq', ('u2u64', 'a@8'), '#b') => ('iand', ('ieq', 'a', ('u2u8', 'b')), ('ieq', ('u2u64', ('u2u8', 'b')), 'b')) */ - /* search1781_0_0 -> 6 in the cache */ - /* search1781_0 -> 2103 in the cache */ - /* search1781_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2103, 4644 }, - -1, - } }, - - /* replace1781_0_0 -> 6 in the cache */ - /* replace1781_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 6, 4978 }, - -1, - } }, - /* replace1781_1_0_0_0 -> 41 in the cache */ - /* replace1781_1_0_0 -> 4978 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 4978 }, - -1, - } }, - /* replace1781_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 4980, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 4979, 4981 }, - -1, - } }, - - /* ('ine', ('u2u64', 'a@8'), '#b') => ('ior', ('ine', 'a', ('u2u8', 'b')), ('ine', ('u2u64', ('u2u8', 'b')), 'b')) */ - /* search1782_0_0 -> 6 in the cache */ - /* search1782_0 -> 2103 in the cache */ - /* search1782_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2103, 4644 }, - -1, - } }, - - /* replace1782_0_0 -> 6 in the cache */ - /* replace1782_0_1_0 -> 41 in the cache */ - /* replace1782_0_1 -> 4978 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 6, 4978 }, - -1, - } }, - /* replace1782_1_0_0_0 -> 41 in the cache */ - /* replace1782_1_0_0 -> 4978 in the cache */ - /* replace1782_1_0 -> 4980 in the cache */ - /* replace1782_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 4980, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 4984, 4985 }, - -1, - } }, - - /* ('ult', ('u2u64', 'a@8'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 255, 'b'), ('ult', 'a', ('u2u8', 'b')))) */ - /* search1783_0_0 -> 6 in the cache */ - /* search1783_0 -> 2103 in the cache */ - /* search1783_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2103, 4644 }, - -1, - } }, - - /* replace1783_0_0 -> 910 in the cache */ - /* replace1783_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 910, 41 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0xff /* 255 */ }, - } }, - /* replace1783_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4989, 41 }, - -1, - } }, - /* replace1783_1_1_0 -> 6 in the cache */ - /* replace1783_1_1_1_0 -> 41 in the cache */ - /* replace1783_1_1_1 -> 4978 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 6, 4978 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4990, 4991 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4988, 4992 }, - -1, - } }, - - /* ('ult', '#a', ('u2u64', 'b@8')) => ('iand', ('ult', 'a', 255), ('ior', ('ult', 'a', 0), ('ult', ('u2u8', 'a'), 'b'))) */ - /* search1784_0 -> 4663 in the cache */ - /* search1784_1_0 -> 2280 in the cache */ - /* search1784_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4663, 4968 }, - -1, - } }, - - /* replace1784_0_0 -> 21 in the cache */ - /* replace1784_0_1 -> 4989 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 21, 4989 }, - -1, - } }, - /* replace1784_1_0_0 -> 21 in the cache */ - /* replace1784_1_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 21, 910 }, - -1, - } }, - /* replace1784_1_1_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 21 }, - -1, - } }, - /* replace1784_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4997, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4996, 4998 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4995, 4999 }, - -1, - } }, - - /* ('uge', ('u2u64', 'a@8'), '#b') => ('iand', ('uge', 255, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u8', 'b')))) */ - /* search1785_0_0 -> 6 in the cache */ - /* search1785_0 -> 2103 in the cache */ - /* search1785_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2103, 4644 }, - -1, - } }, - - /* replace1785_0_0 -> 4989 in the cache */ - /* replace1785_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4989, 41 }, - -1, - } }, - /* replace1785_1_0_0 -> 910 in the cache */ - /* replace1785_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 910, 41 }, - -1, - } }, - /* replace1785_1_1_0 -> 6 in the cache */ - /* replace1785_1_1_1_0 -> 41 in the cache */ - /* replace1785_1_1_1 -> 4978 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 6, 4978 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5003, 5004 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5002, 5005 }, - -1, - } }, - - /* ('uge', '#a', ('u2u64', 'b@8')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 255), ('uge', ('u2u8', 'a'), 'b'))) */ - /* search1786_0 -> 4663 in the cache */ - /* search1786_1_0 -> 2280 in the cache */ - /* search1786_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4663, 4968 }, - -1, - } }, - - /* replace1786_0_0 -> 21 in the cache */ - /* replace1786_0_1 -> 910 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 21, 910 }, - -1, - } }, - /* replace1786_1_0_0 -> 21 in the cache */ - /* replace1786_1_0_1 -> 4989 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 21, 4989 }, - -1, - } }, - /* replace1786_1_1_0_0 -> 21 in the cache */ - /* replace1786_1_1_0 -> 4997 in the cache */ - /* replace1786_1_1_1 -> 2280 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4997, 2280 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5009, 5010 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5008, 5011 }, - -1, - } }, - - /* ('ieq', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('ieq', 'a', ('u2u16', 'b')) */ - /* search1787_0_0 -> 11 in the cache */ - /* search1787_0 -> 2129 in the cache */ - /* search1787_1_0 -> 2280 in the cache */ - /* search1787_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2129, 3450 }, - -1, - } }, - - /* replace1787_0 -> 11 in the cache */ - /* replace1787_1_0 -> 2280 in the cache */ - /* replace1787_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 11, 4878 }, - -1, - } }, - - /* ('ine', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('ine', 'a', ('u2u16', 'b')) */ - /* search1788_0_0 -> 11 in the cache */ - /* search1788_0 -> 2129 in the cache */ - /* search1788_1_0 -> 2280 in the cache */ - /* search1788_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2129, 3450 }, - -1, - } }, - - /* replace1788_0 -> 11 in the cache */ - /* replace1788_1_0 -> 2280 in the cache */ - /* replace1788_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 11, 4878 }, - -1, - } }, - - /* ('uge', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('uge', 'a', ('u2u16', 'b')) */ - /* search1789_0_0 -> 11 in the cache */ - /* search1789_0 -> 2129 in the cache */ - /* search1789_1_0 -> 2280 in the cache */ - /* search1789_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2129, 3450 }, - -1, - } }, - - /* replace1789_0 -> 11 in the cache */ - /* replace1789_1_0 -> 2280 in the cache */ - /* replace1789_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 11, 4878 }, - -1, - } }, - - /* ('ult', ('u2u32', 'a@16'), ('u2u32', 'b@8')) => ('ult', 'a', ('u2u16', 'b')) */ - /* search1790_0_0 -> 11 in the cache */ - /* search1790_0 -> 2129 in the cache */ - /* search1790_1_0 -> 2280 in the cache */ - /* search1790_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2129, 3450 }, - -1, - } }, - - /* replace1790_0 -> 11 in the cache */ - /* replace1790_1_0 -> 2280 in the cache */ - /* replace1790_1 -> 4878 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 11, 4878 }, - -1, - } }, - - /* ('uge', ('u2u32', 'b@8'), ('u2u32', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') */ - /* search1791_0_0 -> 4543 in the cache */ - /* search1791_0 -> 4931 in the cache */ - /* search1791_1_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4931, 5021 }, - -1, - } }, - - /* replace1791_0_0 -> 4543 in the cache */ - /* replace1791_0 -> 4888 in the cache */ - /* replace1791_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4888, 536 }, - -1, - } }, - - /* ('ult', ('u2u32', 'b@8'), ('u2u32', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') */ - /* search1792_0_0 -> 4543 in the cache */ - /* search1792_0 -> 4931 in the cache */ - /* search1792_1_0 -> 536 in the cache */ - /* search1792_1 -> 5021 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4931, 5021 }, - -1, - } }, - - /* replace1792_0_0 -> 4543 in the cache */ - /* replace1792_0 -> 4888 in the cache */ - /* replace1792_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4888, 536 }, - -1, - } }, - - /* ('ieq', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('ieq', 'a', ('u2u16', 'b')) */ - /* search1793_0_0 -> 11 in the cache */ - /* search1793_0 -> 2129 in the cache */ - /* search1793_1_0 -> 268 in the cache */ - /* search1793_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2129, 3470 }, - -1, - } }, - - /* replace1793_0 -> 11 in the cache */ - /* replace1793_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 11, 5027 }, - -1, - } }, - - /* ('ine', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('ine', 'a', ('u2u16', 'b')) */ - /* search1794_0_0 -> 11 in the cache */ - /* search1794_0 -> 2129 in the cache */ - /* search1794_1_0 -> 268 in the cache */ - /* search1794_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2129, 3470 }, - -1, - } }, - - /* replace1794_0 -> 11 in the cache */ - /* replace1794_1_0 -> 268 in the cache */ - /* replace1794_1 -> 5027 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 11, 5027 }, - -1, - } }, - - /* ('uge', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('uge', 'a', ('u2u16', 'b')) */ - /* search1795_0_0 -> 11 in the cache */ - /* search1795_0 -> 2129 in the cache */ - /* search1795_1_0 -> 268 in the cache */ - /* search1795_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2129, 3470 }, - -1, - } }, - - /* replace1795_0 -> 11 in the cache */ - /* replace1795_1_0 -> 268 in the cache */ - /* replace1795_1 -> 5027 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 11, 5027 }, - -1, - } }, - - /* ('ult', ('u2u32', 'a@16'), ('u2u32', 'b@16')) => ('ult', 'a', ('u2u16', 'b')) */ - /* search1796_0_0 -> 11 in the cache */ - /* search1796_0 -> 2129 in the cache */ - /* search1796_1_0 -> 268 in the cache */ - /* search1796_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2129, 3470 }, - -1, - } }, - - /* replace1796_0 -> 11 in the cache */ - /* replace1796_1_0 -> 268 in the cache */ - /* replace1796_1 -> 5027 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 11, 5027 }, - -1, - } }, - - /* ('uge', ('u2u32', 'b@16'), ('u2u32', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') */ - /* search1797_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 525 }, - -1, - } }, - /* search1797_1_0 -> 536 in the cache */ - /* search1797_1 -> 5021 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5035, 5021 }, - -1, - } }, - - /* replace1797_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 525 }, - -1, - } }, - /* replace1797_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5037, 536 }, - -1, - } }, - - /* ('ult', ('u2u32', 'b@16'), ('u2u32', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') */ - /* search1798_0_0 -> 525 in the cache */ - /* search1798_0 -> 5035 in the cache */ - /* search1798_1_0 -> 536 in the cache */ - /* search1798_1 -> 5021 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5035, 5021 }, - -1, - } }, - - /* replace1798_0_0 -> 525 in the cache */ - /* replace1798_0 -> 5037 in the cache */ - /* replace1798_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5037, 536 }, - -1, - } }, - - /* ('ieq', ('u2u32', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('u2u16', 'b')), ('ieq', ('u2u32', ('u2u16', 'b')), 'b')) */ - /* search1799_0_0 -> 11 in the cache */ - /* search1799_0 -> 2129 in the cache */ - /* search1799_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2129, 33 }, - -1, - } }, - - /* replace1799_0_0 -> 11 in the cache */ - /* replace1799_0_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 11, 5042 }, - -1, - } }, - /* replace1799_1_0_0_0 -> 36 in the cache */ - /* replace1799_1_0_0 -> 5042 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 5042 }, - -1, - } }, - /* replace1799_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 5044, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 5043, 5045 }, - -1, - } }, - - /* ('ine', ('u2u32', 'a@16'), '#b') => ('ior', ('ine', 'a', ('u2u16', 'b')), ('ine', ('u2u32', ('u2u16', 'b')), 'b')) */ - /* search1800_0_0 -> 11 in the cache */ - /* search1800_0 -> 2129 in the cache */ - /* search1800_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2129, 33 }, - -1, - } }, - - /* replace1800_0_0 -> 11 in the cache */ - /* replace1800_0_1_0 -> 36 in the cache */ - /* replace1800_0_1 -> 5042 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 11, 5042 }, - -1, - } }, - /* replace1800_1_0_0_0 -> 36 in the cache */ - /* replace1800_1_0_0 -> 5042 in the cache */ - /* replace1800_1_0 -> 5044 in the cache */ - /* replace1800_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 5044, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 5048, 5049 }, - -1, - } }, - - /* ('ult', ('u2u32', 'a@16'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 65535, 'b'), ('ult', 'a', ('u2u16', 'b')))) */ - /* search1801_0_0 -> 11 in the cache */ - /* search1801_0 -> 2129 in the cache */ - /* search1801_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2129, 33 }, - -1, - } }, - - /* replace1801_0_0 -> 128 in the cache */ - /* replace1801_0_1 -> 36 in the cache */ - /* replace1801_0 -> 4945 in the cache */ - /* replace1801_1_0_0 -> 1015 in the cache */ - /* replace1801_1_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 1015, 36 }, - -1, - } }, - /* replace1801_1_1_0 -> 11 in the cache */ - /* replace1801_1_1_1_0 -> 36 in the cache */ - /* replace1801_1_1_1 -> 5042 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 11, 5042 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5052, 5053 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4945, 5054 }, - -1, - } }, - - /* ('ult', '#a', ('u2u32', 'b@16')) => ('iand', ('ult', 'a', 65535), ('ior', ('ult', 'a', 0), ('ult', ('u2u16', 'a'), 'b'))) */ - /* search1802_0 -> 296 in the cache */ - /* search1802_1_0 -> 268 in the cache */ - /* search1802_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 296, 3470 }, - -1, - } }, - - /* replace1802_0_0 -> 16 in the cache */ - /* replace1802_0_1 -> 1015 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 1015 }, - -1, - } }, - /* replace1802_1_0_0 -> 16 in the cache */ - /* replace1802_1_0_1 -> 128 in the cache */ - /* replace1802_1_0 -> 4952 in the cache */ - /* replace1802_1_1_0_0 -> 16 in the cache */ - /* replace1802_1_1_0 -> 3478 in the cache */ - /* replace1802_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 3478, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4952, 5058 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5057, 5059 }, - -1, - } }, - - /* ('uge', ('u2u32', 'a@16'), '#b') => ('iand', ('uge', 65535, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u16', 'b')))) */ - /* search1803_0_0 -> 11 in the cache */ - /* search1803_0 -> 2129 in the cache */ - /* search1803_1 -> 33 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2129, 33 }, - -1, - } }, - - /* replace1803_0_0 -> 1015 in the cache */ - /* replace1803_0_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 1015, 36 }, - -1, - } }, - /* replace1803_1_0_0 -> 128 in the cache */ - /* replace1803_1_0_1 -> 36 in the cache */ - /* replace1803_1_0 -> 4958 in the cache */ - /* replace1803_1_1_0 -> 11 in the cache */ - /* replace1803_1_1_1_0 -> 36 in the cache */ - /* replace1803_1_1_1 -> 5042 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 11, 5042 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4958, 5063 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5062, 5064 }, - -1, - } }, - - /* ('uge', '#a', ('u2u32', 'b@16')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 65535), ('uge', ('u2u16', 'a'), 'b'))) */ - /* search1804_0 -> 296 in the cache */ - /* search1804_1_0 -> 268 in the cache */ - /* search1804_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 296, 3470 }, - -1, - } }, - - /* replace1804_0_0 -> 16 in the cache */ - /* replace1804_0_1 -> 128 in the cache */ - /* replace1804_0 -> 4963 in the cache */ - /* replace1804_1_0_0 -> 16 in the cache */ - /* replace1804_1_0_1 -> 1015 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 1015 }, - -1, - } }, - /* replace1804_1_1_0_0 -> 16 in the cache */ - /* replace1804_1_1_0 -> 3478 in the cache */ - /* replace1804_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 3478, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5067, 5068 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4963, 5069 }, - -1, - } }, - - /* ('ieq', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('ieq', 'a', ('u2u16', 'b')) */ - /* search1805_0_0 -> 11 in the cache */ - /* search1805_0 -> 2135 in the cache */ - /* search1805_1_0 -> 2280 in the cache */ - /* search1805_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2135, 4968 }, - -1, - } }, - - /* replace1805_0 -> 11 in the cache */ - /* replace1805_1_0 -> 2280 in the cache */ - /* replace1805_1 -> 4878 in the cache */ - /* replace1805 -> 5014 in the cache */ - - /* ('ine', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('ine', 'a', ('u2u16', 'b')) */ - /* search1806_0_0 -> 11 in the cache */ - /* search1806_0 -> 2135 in the cache */ - /* search1806_1_0 -> 2280 in the cache */ - /* search1806_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2135, 4968 }, - -1, - } }, - - /* replace1806_0 -> 11 in the cache */ - /* replace1806_1_0 -> 2280 in the cache */ - /* replace1806_1 -> 4878 in the cache */ - /* replace1806 -> 5016 in the cache */ - - /* ('uge', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('uge', 'a', ('u2u16', 'b')) */ - /* search1807_0_0 -> 11 in the cache */ - /* search1807_0 -> 2135 in the cache */ - /* search1807_1_0 -> 2280 in the cache */ - /* search1807_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2135, 4968 }, - -1, - } }, - - /* replace1807_0 -> 11 in the cache */ - /* replace1807_1_0 -> 2280 in the cache */ - /* replace1807_1 -> 4878 in the cache */ - /* replace1807 -> 5018 in the cache */ - - /* ('ult', ('u2u64', 'a@16'), ('u2u64', 'b@8')) => ('ult', 'a', ('u2u16', 'b')) */ - /* search1808_0_0 -> 11 in the cache */ - /* search1808_0 -> 2135 in the cache */ - /* search1808_1_0 -> 2280 in the cache */ - /* search1808_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2135, 4968 }, - -1, - } }, - - /* replace1808_0 -> 11 in the cache */ - /* replace1808_1_0 -> 2280 in the cache */ - /* replace1808_1 -> 4878 in the cache */ - /* replace1808 -> 5020 in the cache */ - - /* ('uge', ('u2u64', 'b@8'), ('u2u64', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') */ - /* search1809_0_0 -> 4543 in the cache */ - /* search1809_0 -> 4973 in the cache */ - /* search1809_1_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4973, 5075 }, - -1, - } }, - - /* replace1809_0_0 -> 4543 in the cache */ - /* replace1809_0 -> 4888 in the cache */ - /* replace1809_1 -> 536 in the cache */ - /* replace1809 -> 5023 in the cache */ - - /* ('ult', ('u2u64', 'b@8'), ('u2u64', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') */ - /* search1810_0_0 -> 4543 in the cache */ - /* search1810_0 -> 4973 in the cache */ - /* search1810_1_0 -> 536 in the cache */ - /* search1810_1 -> 5075 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4973, 5075 }, - -1, - } }, - - /* replace1810_0_0 -> 4543 in the cache */ - /* replace1810_0 -> 4888 in the cache */ - /* replace1810_1 -> 536 in the cache */ - /* replace1810 -> 5025 in the cache */ - - /* ('ieq', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('ieq', 'a', ('u2u16', 'b')) */ - /* search1811_0_0 -> 11 in the cache */ - /* search1811_0 -> 2135 in the cache */ - /* search1811_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2135, 5078 }, - -1, - } }, - - /* replace1811_0 -> 11 in the cache */ - /* replace1811_1_0 -> 268 in the cache */ - /* replace1811_1 -> 5027 in the cache */ - /* replace1811 -> 5028 in the cache */ - - /* ('ine', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('ine', 'a', ('u2u16', 'b')) */ - /* search1812_0_0 -> 11 in the cache */ - /* search1812_0 -> 2135 in the cache */ - /* search1812_1_0 -> 268 in the cache */ - /* search1812_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2135, 5078 }, - -1, - } }, - - /* replace1812_0 -> 11 in the cache */ - /* replace1812_1_0 -> 268 in the cache */ - /* replace1812_1 -> 5027 in the cache */ - /* replace1812 -> 5030 in the cache */ - - /* ('uge', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('uge', 'a', ('u2u16', 'b')) */ - /* search1813_0_0 -> 11 in the cache */ - /* search1813_0 -> 2135 in the cache */ - /* search1813_1_0 -> 268 in the cache */ - /* search1813_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2135, 5078 }, - -1, - } }, - - /* replace1813_0 -> 11 in the cache */ - /* replace1813_1_0 -> 268 in the cache */ - /* replace1813_1 -> 5027 in the cache */ - /* replace1813 -> 5032 in the cache */ - - /* ('ult', ('u2u64', 'a@16'), ('u2u64', 'b@16')) => ('ult', 'a', ('u2u16', 'b')) */ - /* search1814_0_0 -> 11 in the cache */ - /* search1814_0 -> 2135 in the cache */ - /* search1814_1_0 -> 268 in the cache */ - /* search1814_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2135, 5078 }, - -1, - } }, - - /* replace1814_0 -> 11 in the cache */ - /* replace1814_1_0 -> 268 in the cache */ - /* replace1814_1 -> 5027 in the cache */ - /* replace1814 -> 5034 in the cache */ - - /* ('uge', ('u2u64', 'b@16'), ('u2u64', 'a@16')) => ('uge', ('u2u16', 'b'), 'a') */ - /* search1815_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 525 }, - -1, - } }, - /* search1815_1_0 -> 536 in the cache */ - /* search1815_1 -> 5075 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5083, 5075 }, - -1, - } }, - - /* replace1815_0_0 -> 525 in the cache */ - /* replace1815_0 -> 5037 in the cache */ - /* replace1815_1 -> 536 in the cache */ - /* replace1815 -> 5038 in the cache */ - - /* ('ult', ('u2u64', 'b@16'), ('u2u64', 'a@16')) => ('ult', ('u2u16', 'b'), 'a') */ - /* search1816_0_0 -> 525 in the cache */ - /* search1816_0 -> 5083 in the cache */ - /* search1816_1_0 -> 536 in the cache */ - /* search1816_1 -> 5075 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5083, 5075 }, - -1, - } }, - - /* replace1816_0_0 -> 525 in the cache */ - /* replace1816_0 -> 5037 in the cache */ - /* replace1816_1 -> 536 in the cache */ - /* replace1816 -> 5040 in the cache */ - - /* ('ieq', ('u2u64', 'a@16'), '#b') => ('iand', ('ieq', 'a', ('u2u16', 'b')), ('ieq', ('u2u64', ('u2u16', 'b')), 'b')) */ - /* search1817_0_0 -> 11 in the cache */ - /* search1817_0 -> 2135 in the cache */ - /* search1817_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2135, 4644 }, - -1, - } }, - - /* replace1817_0_0 -> 11 in the cache */ - /* replace1817_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 11, 5087 }, - -1, - } }, - /* replace1817_1_0_0_0 -> 41 in the cache */ - /* replace1817_1_0_0 -> 5087 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 5087 }, - -1, - } }, - /* replace1817_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 5089, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 5088, 5090 }, - -1, - } }, - - /* ('ine', ('u2u64', 'a@16'), '#b') => ('ior', ('ine', 'a', ('u2u16', 'b')), ('ine', ('u2u64', ('u2u16', 'b')), 'b')) */ - /* search1818_0_0 -> 11 in the cache */ - /* search1818_0 -> 2135 in the cache */ - /* search1818_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2135, 4644 }, - -1, - } }, - - /* replace1818_0_0 -> 11 in the cache */ - /* replace1818_0_1_0 -> 41 in the cache */ - /* replace1818_0_1 -> 5087 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 11, 5087 }, - -1, - } }, - /* replace1818_1_0_0_0 -> 41 in the cache */ - /* replace1818_1_0_0 -> 5087 in the cache */ - /* replace1818_1_0 -> 5089 in the cache */ - /* replace1818_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 5089, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 5093, 5094 }, - -1, - } }, - - /* ('ult', ('u2u64', 'a@16'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 65535, 'b'), ('ult', 'a', ('u2u16', 'b')))) */ - /* search1819_0_0 -> 11 in the cache */ - /* search1819_0 -> 2135 in the cache */ - /* search1819_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2135, 4644 }, - -1, - } }, - - /* replace1819_0_0 -> 910 in the cache */ - /* replace1819_0_1 -> 41 in the cache */ - /* replace1819_0 -> 4988 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0xffff /* 65535 */ }, - } }, - /* replace1819_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5097, 41 }, - -1, - } }, - /* replace1819_1_1_0 -> 11 in the cache */ - /* replace1819_1_1_1_0 -> 41 in the cache */ - /* replace1819_1_1_1 -> 5087 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 11, 5087 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5098, 5099 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4988, 5100 }, - -1, - } }, - - /* ('ult', '#a', ('u2u64', 'b@16')) => ('iand', ('ult', 'a', 65535), ('ior', ('ult', 'a', 0), ('ult', ('u2u16', 'a'), 'b'))) */ - /* search1820_0 -> 4663 in the cache */ - /* search1820_1_0 -> 268 in the cache */ - /* search1820_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4663, 5078 }, - -1, - } }, - - /* replace1820_0_0 -> 21 in the cache */ - /* replace1820_0_1 -> 5097 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 21, 5097 }, - -1, - } }, - /* replace1820_1_0_0 -> 21 in the cache */ - /* replace1820_1_0_1 -> 910 in the cache */ - /* replace1820_1_0 -> 4996 in the cache */ - /* replace1820_1_1_0_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 21 }, - -1, - } }, - /* replace1820_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5104, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4996, 5105 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5103, 5106 }, - -1, - } }, - - /* ('uge', ('u2u64', 'a@16'), '#b') => ('iand', ('uge', 65535, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u16', 'b')))) */ - /* search1821_0_0 -> 11 in the cache */ - /* search1821_0 -> 2135 in the cache */ - /* search1821_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2135, 4644 }, - -1, - } }, - - /* replace1821_0_0 -> 5097 in the cache */ - /* replace1821_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5097, 41 }, - -1, - } }, - /* replace1821_1_0_0 -> 910 in the cache */ - /* replace1821_1_0_1 -> 41 in the cache */ - /* replace1821_1_0 -> 5003 in the cache */ - /* replace1821_1_1_0 -> 11 in the cache */ - /* replace1821_1_1_1_0 -> 41 in the cache */ - /* replace1821_1_1_1 -> 5087 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 11, 5087 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5003, 5110 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5109, 5111 }, - -1, - } }, - - /* ('uge', '#a', ('u2u64', 'b@16')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 65535), ('uge', ('u2u16', 'a'), 'b'))) */ - /* search1822_0 -> 4663 in the cache */ - /* search1822_1_0 -> 268 in the cache */ - /* search1822_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4663, 5078 }, - -1, - } }, - - /* replace1822_0_0 -> 21 in the cache */ - /* replace1822_0_1 -> 910 in the cache */ - /* replace1822_0 -> 5008 in the cache */ - /* replace1822_1_0_0 -> 21 in the cache */ - /* replace1822_1_0_1 -> 5097 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 21, 5097 }, - -1, - } }, - /* replace1822_1_1_0_0 -> 21 in the cache */ - /* replace1822_1_1_0 -> 5104 in the cache */ - /* replace1822_1_1_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5104, 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5114, 5115 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5008, 5116 }, - -1, - } }, - - /* ('ieq', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('ieq', 'a', ('u2u32', 'b')) */ - /* search1823_0_0 -> 16 in the cache */ - /* search1823_0 -> 2149 in the cache */ - /* search1823_1_0 -> 2280 in the cache */ - /* search1823_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2149, 4968 }, - -1, - } }, - - /* replace1823_0 -> 16 in the cache */ - /* replace1823_1_0 -> 2280 in the cache */ - /* replace1823_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 3450 }, - -1, - } }, - - /* ('ine', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('ine', 'a', ('u2u32', 'b')) */ - /* search1824_0_0 -> 16 in the cache */ - /* search1824_0 -> 2149 in the cache */ - /* search1824_1_0 -> 2280 in the cache */ - /* search1824_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2149, 4968 }, - -1, - } }, - - /* replace1824_0 -> 16 in the cache */ - /* replace1824_1_0 -> 2280 in the cache */ - /* replace1824_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 3450 }, - -1, - } }, - - /* ('uge', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('uge', 'a', ('u2u32', 'b')) */ - /* search1825_0_0 -> 16 in the cache */ - /* search1825_0 -> 2149 in the cache */ - /* search1825_1_0 -> 2280 in the cache */ - /* search1825_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2149, 4968 }, - -1, - } }, - - /* replace1825_0 -> 16 in the cache */ - /* replace1825_1_0 -> 2280 in the cache */ - /* replace1825_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 3450 }, - -1, - } }, - - /* ('ult', ('u2u64', 'a@32'), ('u2u64', 'b@8')) => ('ult', 'a', ('u2u32', 'b')) */ - /* search1826_0_0 -> 16 in the cache */ - /* search1826_0 -> 2149 in the cache */ - /* search1826_1_0 -> 2280 in the cache */ - /* search1826_1 -> 4968 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2149, 4968 }, - -1, - } }, - - /* replace1826_0 -> 16 in the cache */ - /* replace1826_1_0 -> 2280 in the cache */ - /* replace1826_1 -> 3450 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 3450 }, - -1, - } }, - - /* ('uge', ('u2u64', 'b@8'), ('u2u64', 'a@32')) => ('uge', ('u2u32', 'b'), 'a') */ - /* search1827_0_0 -> 4543 in the cache */ - /* search1827_0 -> 4973 in the cache */ - /* search1827_1_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4973, 5126 }, - -1, - } }, - - /* replace1827_0_0 -> 4543 in the cache */ - /* replace1827_0 -> 4931 in the cache */ - /* replace1827_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4931, 189 }, - -1, - } }, - - /* ('ult', ('u2u64', 'b@8'), ('u2u64', 'a@32')) => ('ult', ('u2u32', 'b'), 'a') */ - /* search1828_0_0 -> 4543 in the cache */ - /* search1828_0 -> 4973 in the cache */ - /* search1828_1_0 -> 189 in the cache */ - /* search1828_1 -> 5126 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4973, 5126 }, - -1, - } }, - - /* replace1828_0_0 -> 4543 in the cache */ - /* replace1828_0 -> 4931 in the cache */ - /* replace1828_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4931, 189 }, - -1, - } }, - - /* ('ieq', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('ieq', 'a', ('u2u32', 'b')) */ - /* search1829_0_0 -> 16 in the cache */ - /* search1829_0 -> 2149 in the cache */ - /* search1829_1_0 -> 268 in the cache */ - /* search1829_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2149, 5078 }, - -1, - } }, - - /* replace1829_0 -> 16 in the cache */ - /* replace1829_1_0 -> 268 in the cache */ - /* replace1829_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 3470 }, - -1, - } }, - - /* ('ine', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('ine', 'a', ('u2u32', 'b')) */ - /* search1830_0_0 -> 16 in the cache */ - /* search1830_0 -> 2149 in the cache */ - /* search1830_1_0 -> 268 in the cache */ - /* search1830_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2149, 5078 }, - -1, - } }, - - /* replace1830_0 -> 16 in the cache */ - /* replace1830_1_0 -> 268 in the cache */ - /* replace1830_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 3470 }, - -1, - } }, - - /* ('uge', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('uge', 'a', ('u2u32', 'b')) */ - /* search1831_0_0 -> 16 in the cache */ - /* search1831_0 -> 2149 in the cache */ - /* search1831_1_0 -> 268 in the cache */ - /* search1831_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2149, 5078 }, - -1, - } }, - - /* replace1831_0 -> 16 in the cache */ - /* replace1831_1_0 -> 268 in the cache */ - /* replace1831_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 3470 }, - -1, - } }, - - /* ('ult', ('u2u64', 'a@32'), ('u2u64', 'b@16')) => ('ult', 'a', ('u2u32', 'b')) */ - /* search1832_0_0 -> 16 in the cache */ - /* search1832_0 -> 2149 in the cache */ - /* search1832_1_0 -> 268 in the cache */ - /* search1832_1 -> 5078 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2149, 5078 }, - -1, - } }, - - /* replace1832_0 -> 16 in the cache */ - /* replace1832_1_0 -> 268 in the cache */ - /* replace1832_1 -> 3470 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 3470 }, - -1, - } }, - - /* ('uge', ('u2u64', 'b@16'), ('u2u64', 'a@32')) => ('uge', ('u2u32', 'b'), 'a') */ - /* search1833_0_0 -> 525 in the cache */ - /* search1833_0 -> 5083 in the cache */ - /* search1833_1_0 -> 189 in the cache */ - /* search1833_1 -> 5126 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5083, 5126 }, - -1, - } }, - - /* replace1833_0_0 -> 525 in the cache */ - /* replace1833_0 -> 5035 in the cache */ - /* replace1833_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5035, 189 }, - -1, - } }, - - /* ('ult', ('u2u64', 'b@16'), ('u2u64', 'a@32')) => ('ult', ('u2u32', 'b'), 'a') */ - /* search1834_0_0 -> 525 in the cache */ - /* search1834_0 -> 5083 in the cache */ - /* search1834_1_0 -> 189 in the cache */ - /* search1834_1 -> 5126 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5083, 5126 }, - -1, - } }, - - /* replace1834_0_0 -> 525 in the cache */ - /* replace1834_0 -> 5035 in the cache */ - /* replace1834_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5035, 189 }, - -1, - } }, - - /* ('ieq', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('ieq', 'a', ('u2u32', 'b')) */ - /* search1835_0_0 -> 16 in the cache */ - /* search1835_0 -> 2149 in the cache */ - /* search1835_1_0 -> 36 in the cache */ - /* search1835_1 -> 3466 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2149, 3466 }, - -1, - } }, - - /* replace1835_0 -> 16 in the cache */ - /* replace1835_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 16, 5144 }, - -1, - } }, - - /* ('ine', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('ine', 'a', ('u2u32', 'b')) */ - /* search1836_0_0 -> 16 in the cache */ - /* search1836_0 -> 2149 in the cache */ - /* search1836_1_0 -> 36 in the cache */ - /* search1836_1 -> 3466 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2149, 3466 }, - -1, - } }, - - /* replace1836_0 -> 16 in the cache */ - /* replace1836_1_0 -> 36 in the cache */ - /* replace1836_1 -> 5144 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 16, 5144 }, - -1, - } }, - - /* ('uge', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('uge', 'a', ('u2u32', 'b')) */ - /* search1837_0_0 -> 16 in the cache */ - /* search1837_0 -> 2149 in the cache */ - /* search1837_1_0 -> 36 in the cache */ - /* search1837_1 -> 3466 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2149, 3466 }, - -1, - } }, - - /* replace1837_0 -> 16 in the cache */ - /* replace1837_1_0 -> 36 in the cache */ - /* replace1837_1 -> 5144 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 5144 }, - -1, - } }, - - /* ('ult', ('u2u64', 'a@32'), ('u2u64', 'b@32')) => ('ult', 'a', ('u2u32', 'b')) */ - /* search1838_0_0 -> 16 in the cache */ - /* search1838_0 -> 2149 in the cache */ - /* search1838_1_0 -> 36 in the cache */ - /* search1838_1 -> 3466 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2149, 3466 }, - -1, - } }, - - /* replace1838_0 -> 16 in the cache */ - /* replace1838_1_0 -> 36 in the cache */ - /* replace1838_1 -> 5144 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 5144 }, - -1, - } }, - - /* ('uge', ('u2u64', 'b@32'), ('u2u64', 'a@32')) => ('uge', ('u2u32', 'b'), 'a') */ - /* search1839_0_0 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 383 }, - -1, - } }, - /* search1839_1_0 -> 189 in the cache */ - /* search1839_1 -> 5126 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5152, 5126 }, - -1, - } }, - - /* replace1839_0_0 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 383 }, - -1, - } }, - /* replace1839_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5154, 189 }, - -1, - } }, - - /* ('ult', ('u2u64', 'b@32'), ('u2u64', 'a@32')) => ('ult', ('u2u32', 'b'), 'a') */ - /* search1840_0_0 -> 383 in the cache */ - /* search1840_0 -> 5152 in the cache */ - /* search1840_1_0 -> 189 in the cache */ - /* search1840_1 -> 5126 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5152, 5126 }, - -1, - } }, - - /* replace1840_0_0 -> 383 in the cache */ - /* replace1840_0 -> 5154 in the cache */ - /* replace1840_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5154, 189 }, - -1, - } }, - - /* ('ieq', ('u2u64', 'a@32'), '#b') => ('iand', ('ieq', 'a', ('u2u32', 'b')), ('ieq', ('u2u64', ('u2u32', 'b')), 'b')) */ - /* search1841_0_0 -> 16 in the cache */ - /* search1841_0 -> 2149 in the cache */ - /* search1841_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 2149, 4644 }, - -1, - } }, - - /* replace1841_0_0 -> 16 in the cache */ - /* replace1841_0_1_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 16, 5159 }, - -1, - } }, - /* replace1841_1_0_0_0 -> 41 in the cache */ - /* replace1841_1_0_0 -> 5159 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_u2u64, - -1, 0, - { 5159 }, - -1, - } }, - /* replace1841_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 5161, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 5160, 5162 }, - -1, - } }, - - /* ('ine', ('u2u64', 'a@32'), '#b') => ('ior', ('ine', 'a', ('u2u32', 'b')), ('ine', ('u2u64', ('u2u32', 'b')), 'b')) */ - /* search1842_0_0 -> 16 in the cache */ - /* search1842_0 -> 2149 in the cache */ - /* search1842_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 2149, 4644 }, - -1, - } }, - - /* replace1842_0_0 -> 16 in the cache */ - /* replace1842_0_1_0 -> 41 in the cache */ - /* replace1842_0_1 -> 5159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 16, 5159 }, - -1, - } }, - /* replace1842_1_0_0_0 -> 41 in the cache */ - /* replace1842_1_0_0 -> 5159 in the cache */ - /* replace1842_1_0 -> 5161 in the cache */ - /* replace1842_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 5161, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 5165, 5166 }, - -1, - } }, - - /* ('ult', ('u2u64', 'a@32'), '#b') => ('iand', ('ult', 0, 'b'), ('ior', ('ult', 4294967295, 'b'), ('ult', 'a', ('u2u32', 'b')))) */ - /* search1843_0_0 -> 16 in the cache */ - /* search1843_0 -> 2149 in the cache */ - /* search1843_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 2149, 4644 }, - -1, - } }, - - /* replace1843_0_0 -> 910 in the cache */ - /* replace1843_0_1 -> 41 in the cache */ - /* replace1843_0 -> 4988 in the cache */ - /* replace1843_1_0_0 -> 3483 in the cache */ - /* replace1843_1_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 3483, 41 }, - -1, - } }, - /* replace1843_1_1_0 -> 16 in the cache */ - /* replace1843_1_1_1_0 -> 41 in the cache */ - /* replace1843_1_1_1 -> 5159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 16, 5159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5169, 5170 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 4988, 5171 }, - -1, - } }, - - /* ('ult', '#a', ('u2u64', 'b@32')) => ('iand', ('ult', 'a', 4294967295), ('ior', ('ult', 'a', 0), ('ult', ('u2u32', 'a'), 'b'))) */ - /* search1844_0 -> 4663 in the cache */ - /* search1844_1_0 -> 36 in the cache */ - /* search1844_1 -> 3466 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 4663, 3466 }, - -1, - } }, - - /* replace1844_0_0 -> 21 in the cache */ - /* replace1844_0_1 -> 3483 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 21, 3483 }, - -1, - } }, - /* replace1844_1_0_0 -> 21 in the cache */ - /* replace1844_1_0_1 -> 910 in the cache */ - /* replace1844_1_0 -> 4996 in the cache */ - /* replace1844_1_1_0_0 -> 21 in the cache */ - /* replace1844_1_1_0 -> 3475 in the cache */ - /* replace1844_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 3475, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 4996, 5175 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5174, 5176 }, - -1, - } }, - - /* ('uge', ('u2u64', 'a@32'), '#b') => ('iand', ('uge', 4294967295, 'b'), ('ior', ('uge', 0, 'b'), ('uge', 'a', ('u2u32', 'b')))) */ - /* search1845_0_0 -> 16 in the cache */ - /* search1845_0 -> 2149 in the cache */ - /* search1845_1 -> 4644 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 2149, 4644 }, - -1, - } }, - - /* replace1845_0_0 -> 3483 in the cache */ - /* replace1845_0_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 3483, 41 }, - -1, - } }, - /* replace1845_1_0_0 -> 910 in the cache */ - /* replace1845_1_0_1 -> 41 in the cache */ - /* replace1845_1_0 -> 5003 in the cache */ - /* replace1845_1_1_0 -> 16 in the cache */ - /* replace1845_1_1_1_0 -> 41 in the cache */ - /* replace1845_1_1_1 -> 5159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 16, 5159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5003, 5180 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5179, 5181 }, - -1, - } }, - - /* ('uge', '#a', ('u2u64', 'b@32')) => ('iand', ('uge', 'a', 0), ('ior', ('uge', 'a', 4294967295), ('uge', ('u2u32', 'a'), 'b'))) */ - /* search1846_0 -> 4663 in the cache */ - /* search1846_1_0 -> 36 in the cache */ - /* search1846_1 -> 3466 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 4663, 3466 }, - -1, - } }, - - /* replace1846_0_0 -> 21 in the cache */ - /* replace1846_0_1 -> 910 in the cache */ - /* replace1846_0 -> 5008 in the cache */ - /* replace1846_1_0_0 -> 21 in the cache */ - /* replace1846_1_0_1 -> 3483 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 21, 3483 }, - -1, - } }, - /* replace1846_1_1_0_0 -> 21 in the cache */ - /* replace1846_1_1_0 -> 3475 in the cache */ - /* replace1846_1_1_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 3475, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 5184, 5185 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5008, 5186 }, - -1, - } }, - - /* ('feq', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('feq', 'a', ('f2f16', 'b')) */ - /* search1847_0_0 -> 11 in the cache */ - /* search1847_0 -> 1845 in the cache */ - /* search1847_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1845, 5188 }, - -1, - } }, - - /* replace1847_0 -> 11 in the cache */ - /* replace1847_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 11, 5190 }, - -1, - } }, - - /* ('fneu', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('fneu', 'a', ('f2f16', 'b')) */ - /* search1848_0_0 -> 11 in the cache */ - /* search1848_0 -> 1845 in the cache */ - /* search1848_1_0 -> 268 in the cache */ - /* search1848_1 -> 5188 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1845, 5188 }, - -1, - } }, - - /* replace1848_0 -> 11 in the cache */ - /* replace1848_1_0 -> 268 in the cache */ - /* replace1848_1 -> 5190 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 11, 5190 }, - -1, - } }, - - /* ('fge', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('fge', 'a', ('f2f16', 'b')) */ - /* search1849_0_0 -> 11 in the cache */ - /* search1849_0 -> 1845 in the cache */ - /* search1849_1_0 -> 268 in the cache */ - /* search1849_1 -> 5188 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1845, 5188 }, - -1, - } }, - - /* replace1849_0 -> 11 in the cache */ - /* replace1849_1_0 -> 268 in the cache */ - /* replace1849_1 -> 5190 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 11, 5190 }, - -1, - } }, - - /* ('flt', ('f2f32', 'a@16'), ('f2f32', 'b@16')) => ('flt', 'a', ('f2f16', 'b')) */ - /* search1850_0_0 -> 11 in the cache */ - /* search1850_0 -> 1845 in the cache */ - /* search1850_1_0 -> 268 in the cache */ - /* search1850_1 -> 5188 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1845, 5188 }, - -1, - } }, - - /* replace1850_0 -> 11 in the cache */ - /* replace1850_1_0 -> 268 in the cache */ - /* replace1850_1 -> 5190 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 11, 5190 }, - -1, - } }, - - /* ('fge', ('f2f32', 'b@16'), ('f2f32', 'a@16')) => ('fge', ('f2f16', 'b'), 'a') */ - /* search1851_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 525 }, - -1, - } }, - /* search1851_1_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5198, 5199 }, - -1, - } }, - - /* replace1851_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 525 }, - -1, - } }, - /* replace1851_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5201, 536 }, - -1, - } }, - - /* ('flt', ('f2f32', 'b@16'), ('f2f32', 'a@16')) => ('flt', ('f2f16', 'b'), 'a') */ - /* search1852_0_0 -> 525 in the cache */ - /* search1852_0 -> 5198 in the cache */ - /* search1852_1_0 -> 536 in the cache */ - /* search1852_1 -> 5199 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5198, 5199 }, - -1, - } }, - - /* replace1852_0_0 -> 525 in the cache */ - /* replace1852_0 -> 5201 in the cache */ - /* replace1852_1 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5201, 536 }, - -1, - } }, - - /* ('feq', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('feq', 'a', ('f2f16', 'b')) */ - /* search1853_0_0 -> 11 in the cache */ - /* search1853_0 -> 1855 in the cache */ - /* search1853_1_0 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 268 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1855, 5205 }, - -1, - } }, - - /* replace1853_0 -> 11 in the cache */ - /* replace1853_1_0 -> 268 in the cache */ - /* replace1853_1 -> 5190 in the cache */ - /* replace1853 -> 5191 in the cache */ - - /* ('fneu', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('fneu', 'a', ('f2f16', 'b')) */ - /* search1854_0_0 -> 11 in the cache */ - /* search1854_0 -> 1855 in the cache */ - /* search1854_1_0 -> 268 in the cache */ - /* search1854_1 -> 5205 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1855, 5205 }, - -1, - } }, - - /* replace1854_0 -> 11 in the cache */ - /* replace1854_1_0 -> 268 in the cache */ - /* replace1854_1 -> 5190 in the cache */ - /* replace1854 -> 5193 in the cache */ - - /* ('fge', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('fge', 'a', ('f2f16', 'b')) */ - /* search1855_0_0 -> 11 in the cache */ - /* search1855_0 -> 1855 in the cache */ - /* search1855_1_0 -> 268 in the cache */ - /* search1855_1 -> 5205 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1855, 5205 }, - -1, - } }, - - /* replace1855_0 -> 11 in the cache */ - /* replace1855_1_0 -> 268 in the cache */ - /* replace1855_1 -> 5190 in the cache */ - /* replace1855 -> 5195 in the cache */ - - /* ('flt', ('f2f64', 'a@16'), ('f2f64', 'b@16')) => ('flt', 'a', ('f2f16', 'b')) */ - /* search1856_0_0 -> 11 in the cache */ - /* search1856_0 -> 1855 in the cache */ - /* search1856_1_0 -> 268 in the cache */ - /* search1856_1 -> 5205 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1855, 5205 }, - -1, - } }, - - /* replace1856_0 -> 11 in the cache */ - /* replace1856_1_0 -> 268 in the cache */ - /* replace1856_1 -> 5190 in the cache */ - /* replace1856 -> 5197 in the cache */ - - /* ('fge', ('f2f64', 'b@16'), ('f2f64', 'a@16')) => ('fge', ('f2f16', 'b'), 'a') */ - /* search1857_0_0 -> 525 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 525 }, - -1, - } }, - /* search1857_1_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5210, 5211 }, - -1, - } }, - - /* replace1857_0_0 -> 525 in the cache */ - /* replace1857_0 -> 5201 in the cache */ - /* replace1857_1 -> 536 in the cache */ - /* replace1857 -> 5202 in the cache */ - - /* ('flt', ('f2f64', 'b@16'), ('f2f64', 'a@16')) => ('flt', ('f2f16', 'b'), 'a') */ - /* search1858_0_0 -> 525 in the cache */ - /* search1858_0 -> 5210 in the cache */ - /* search1858_1_0 -> 536 in the cache */ - /* search1858_1 -> 5211 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5210, 5211 }, - -1, - } }, - - /* replace1858_0_0 -> 525 in the cache */ - /* replace1858_0 -> 5201 in the cache */ - /* replace1858_1 -> 536 in the cache */ - /* replace1858 -> 5204 in the cache */ - - /* ('feq', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('feq', 'a', ('f2f32', 'b')) */ - /* search1859_0_0 -> 16 in the cache */ - /* search1859_0 -> 1951 in the cache */ - /* search1859_1_0 -> 268 in the cache */ - /* search1859_1 -> 5205 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1951, 5205 }, - -1, - } }, - - /* replace1859_0 -> 16 in the cache */ - /* replace1859_1_0 -> 268 in the cache */ - /* replace1859_1 -> 5188 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 16, 5188 }, - -1, - } }, - - /* ('fneu', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('fneu', 'a', ('f2f32', 'b')) */ - /* search1860_0_0 -> 16 in the cache */ - /* search1860_0 -> 1951 in the cache */ - /* search1860_1_0 -> 268 in the cache */ - /* search1860_1 -> 5205 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1951, 5205 }, - -1, - } }, - - /* replace1860_0 -> 16 in the cache */ - /* replace1860_1_0 -> 268 in the cache */ - /* replace1860_1 -> 5188 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 16, 5188 }, - -1, - } }, - - /* ('fge', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('fge', 'a', ('f2f32', 'b')) */ - /* search1861_0_0 -> 16 in the cache */ - /* search1861_0 -> 1951 in the cache */ - /* search1861_1_0 -> 268 in the cache */ - /* search1861_1 -> 5205 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1951, 5205 }, - -1, - } }, - - /* replace1861_0 -> 16 in the cache */ - /* replace1861_1_0 -> 268 in the cache */ - /* replace1861_1 -> 5188 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 16, 5188 }, - -1, - } }, - - /* ('flt', ('f2f64', 'a@32'), ('f2f64', 'b@16')) => ('flt', 'a', ('f2f32', 'b')) */ - /* search1862_0_0 -> 16 in the cache */ - /* search1862_0 -> 1951 in the cache */ - /* search1862_1_0 -> 268 in the cache */ - /* search1862_1 -> 5205 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1951, 5205 }, - -1, - } }, - - /* replace1862_0 -> 16 in the cache */ - /* replace1862_1_0 -> 268 in the cache */ - /* replace1862_1 -> 5188 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 16, 5188 }, - -1, - } }, - - /* ('fge', ('f2f64', 'b@16'), ('f2f64', 'a@32')) => ('fge', ('f2f32', 'b'), 'a') */ - /* search1863_0_0 -> 525 in the cache */ - /* search1863_0 -> 5210 in the cache */ - /* search1863_1_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5210, 5222 }, - -1, - } }, - - /* replace1863_0_0 -> 525 in the cache */ - /* replace1863_0 -> 5198 in the cache */ - /* replace1863_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5198, 189 }, - -1, - } }, - - /* ('flt', ('f2f64', 'b@16'), ('f2f64', 'a@32')) => ('flt', ('f2f32', 'b'), 'a') */ - /* search1864_0_0 -> 525 in the cache */ - /* search1864_0 -> 5210 in the cache */ - /* search1864_1_0 -> 189 in the cache */ - /* search1864_1 -> 5222 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5210, 5222 }, - -1, - } }, - - /* replace1864_0_0 -> 525 in the cache */ - /* replace1864_0 -> 5198 in the cache */ - /* replace1864_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5198, 189 }, - -1, - } }, - - /* ('feq', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('feq', 'a', ('f2f32', 'b')) */ - /* search1865_0_0 -> 16 in the cache */ - /* search1865_0 -> 1951 in the cache */ - /* search1865_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1951, 5227 }, - -1, - } }, - - /* replace1865_0 -> 16 in the cache */ - /* replace1865_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 16, 5229 }, - -1, - } }, - - /* ('fneu', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('fneu', 'a', ('f2f32', 'b')) */ - /* search1866_0_0 -> 16 in the cache */ - /* search1866_0 -> 1951 in the cache */ - /* search1866_1_0 -> 36 in the cache */ - /* search1866_1 -> 5227 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1951, 5227 }, - -1, - } }, - - /* replace1866_0 -> 16 in the cache */ - /* replace1866_1_0 -> 36 in the cache */ - /* replace1866_1 -> 5229 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 16, 5229 }, - -1, - } }, - - /* ('fge', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('fge', 'a', ('f2f32', 'b')) */ - /* search1867_0_0 -> 16 in the cache */ - /* search1867_0 -> 1951 in the cache */ - /* search1867_1_0 -> 36 in the cache */ - /* search1867_1 -> 5227 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1951, 5227 }, - -1, - } }, - - /* replace1867_0 -> 16 in the cache */ - /* replace1867_1_0 -> 36 in the cache */ - /* replace1867_1 -> 5229 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 16, 5229 }, - -1, - } }, - - /* ('flt', ('f2f64', 'a@32'), ('f2f64', 'b@32')) => ('flt', 'a', ('f2f32', 'b')) */ - /* search1868_0_0 -> 16 in the cache */ - /* search1868_0 -> 1951 in the cache */ - /* search1868_1_0 -> 36 in the cache */ - /* search1868_1 -> 5227 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1951, 5227 }, - -1, - } }, - - /* replace1868_0 -> 16 in the cache */ - /* replace1868_1_0 -> 36 in the cache */ - /* replace1868_1 -> 5229 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 16, 5229 }, - -1, - } }, - - /* ('fge', ('f2f64', 'b@32'), ('f2f64', 'a@32')) => ('fge', ('f2f32', 'b'), 'a') */ - /* search1869_0_0 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_f2f64, - -1, 0, - { 383 }, - -1, - } }, - /* search1869_1_0 -> 189 in the cache */ - /* search1869_1 -> 5222 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5237, 5222 }, - -1, - } }, - - /* replace1869_0_0 -> 383 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_f2f32, - -1, 0, - { 383 }, - -1, - } }, - /* replace1869_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5239, 189 }, - -1, - } }, - - /* ('flt', ('f2f64', 'b@32'), ('f2f64', 'a@32')) => ('flt', ('f2f32', 'b'), 'a') */ - /* search1870_0_0 -> 383 in the cache */ - /* search1870_0 -> 5237 in the cache */ - /* search1870_1_0 -> 189 in the cache */ - /* search1870_1 -> 5222 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5237, 5222 }, - -1, - } }, - - /* replace1870_0_0 -> 383 in the cache */ - /* replace1870_0 -> 5239 in the cache */ - /* replace1870_1 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5239, 189 }, - -1, - } }, - - /* ('i2i32', ('iand', 'a@64', 4294967295)) => ('u2u32', 'a') */ - /* search1871_0_0 -> 21 in the cache */ - /* search1871_0_1 -> 3483 in the cache */ - /* search1871_0 -> 3484 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 1, - { 3484 }, - -1, - } }, - - /* replace1871_0 -> 21 in the cache */ - /* replace1871 -> 3475 in the cache */ - - /* ('i2i16', ('iand', 'a@32', 65535)) => ('u2u16', 'a') */ - /* search1872_0_0 -> 16 in the cache */ - /* search1872_0_1 -> 1015 in the cache */ - /* search1872_0 -> 1016 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 1, - { 1016 }, - -1, - } }, - - /* replace1872_0 -> 16 in the cache */ - /* replace1872 -> 3478 in the cache */ - - /* ('i2i16', ('iand', 'a@64', 65535)) => ('u2u16', 'a') */ - /* search1873_0_0 -> 21 in the cache */ - /* search1873_0_1 -> 5097 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 5097 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 1, - { 5245 }, - -1, - } }, - - /* replace1873_0 -> 21 in the cache */ - /* replace1873 -> 5104 in the cache */ - - /* ('i2i8', ('iand', 'a@16', 255)) => ('u2u8', 'a') */ - /* search1874_0_0 -> 11 in the cache */ - /* search1874_0_1 -> 2181 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 11, 2181 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 1, - { 5247 }, - -1, - } }, - - /* replace1874_0 -> 11 in the cache */ - /* replace1874 -> 2177 in the cache */ - - /* ('i2i8', ('iand', 'a@32', 255)) => ('u2u8', 'a') */ - /* search1875_0_0 -> 16 in the cache */ - /* search1875_0_1 -> 1023 in the cache */ - /* search1875_0 -> 1024 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 1, - { 1024 }, - -1, - } }, - - /* replace1875_0 -> 16 in the cache */ - /* replace1875 -> 2193 in the cache */ - - /* ('i2i8', ('iand', 'a@64', 255)) => ('u2u8', 'a') */ - /* search1876_0_0 -> 21 in the cache */ - /* search1876_0_1 -> 4989 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 21, 4989 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 1, - { 5250 }, - -1, - } }, - - /* replace1876_0 -> 21 in the cache */ - /* replace1876 -> 4997 in the cache */ - - /* ('u2u16(only_lower_8_bits_used)', ('u2u8', 'a@16')) => a */ - /* search1877_0_0 -> 11 in the cache */ - /* search1877_0 -> 2177 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 2177 }, - 5, - } }, - - /* replace1877 -> 11 in the cache */ - - /* ('extract_u8(only_lower_8_bits_used)', 'a@16', 0) => a */ - /* search1878_0 -> 11 in the cache */ - /* search1878_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 11, 869 }, - 5, - } }, - - /* replace1878 -> 11 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('u2u16', ('u2u8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1879_0 -> 531 in the cache */ - /* search1879_1_0_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 5254 }, - -1, - } }, - /* search1879_2 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5255, 498 }, - 5, - } }, - - /* replace1879_0 -> 531 in the cache */ - /* replace1879_1 -> 536 in the cache */ - /* replace1879_2 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 536, 498 }, - -1, - } }, - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('u2u16', ('i2i8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1880_0 -> 531 in the cache */ - /* search1880_1_0_0 -> 536 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 536 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 5258 }, - -1, - } }, - /* search1880_2 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5259, 498 }, - 5, - } }, - - /* replace1880_0 -> 531 in the cache */ - /* replace1880_1 -> 536 in the cache */ - /* replace1880_2 -> 498 in the cache */ - /* replace1880 -> 5257 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('extract_u8', 'a@16', 0), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1881_0 -> 531 in the cache */ - /* search1881_1_0 -> 536 in the cache */ - /* search1881_1_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 536, 869 }, - -1, - } }, - /* search1881_2 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5261, 498 }, - 5, - } }, - - /* replace1881_0 -> 531 in the cache */ - /* replace1881_1 -> 536 in the cache */ - /* replace1881_2 -> 498 in the cache */ - /* replace1881 -> 5257 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('iadd', 'a', 'b') */ - /* search1882_0_0_0 -> 11 in the cache */ - /* search1882_0_0 -> 2177 in the cache */ - /* search1882_0 -> 2178 in the cache */ - /* search1882_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 2178, 268 }, - 5, - } }, - - /* replace1882_0 -> 11 in the cache */ - /* replace1882_1 -> 268 in the cache */ - /* replace1882 -> 4247 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('iadd', 'a', 'b') */ - /* search1883_0_0_0 -> 11 in the cache */ - /* search1883_0_0 -> 4574 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 4574 }, - -1, - } }, - /* search1883_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5264, 268 }, - 5, - } }, - - /* replace1883_0 -> 11 in the cache */ - /* replace1883_1 -> 268 in the cache */ - /* replace1883 -> 4247 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('iadd', 'a', 'b') */ - /* search1884_0_0 -> 11 in the cache */ - /* search1884_0_1 -> 869 in the cache */ - /* search1884_0 -> 3593 in the cache */ - /* search1884_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 3593, 268 }, - 5, - } }, - - /* replace1884_0 -> 11 in the cache */ - /* replace1884_1 -> 268 in the cache */ - /* replace1884 -> 4247 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('imul', 'a', 'b') */ - /* search1885_0_0_0 -> 11 in the cache */ - /* search1885_0_0 -> 2177 in the cache */ - /* search1885_0 -> 2178 in the cache */ - /* search1885_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 2178, 268 }, - 5, - } }, - - /* replace1885_0 -> 11 in the cache */ - /* replace1885_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 11, 268 }, - -1, - } }, - - /* ('imul(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('imul', 'a', 'b') */ - /* search1886_0_0_0 -> 11 in the cache */ - /* search1886_0_0 -> 4574 in the cache */ - /* search1886_0 -> 5264 in the cache */ - /* search1886_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5264, 268 }, - 5, - } }, - - /* replace1886_0 -> 11 in the cache */ - /* replace1886_1 -> 268 in the cache */ - /* replace1886 -> 5268 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('imul', 'a', 'b') */ - /* search1887_0_0 -> 11 in the cache */ - /* search1887_0_1 -> 869 in the cache */ - /* search1887_0 -> 3593 in the cache */ - /* search1887_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 3593, 268 }, - 5, - } }, - - /* replace1887_0 -> 11 in the cache */ - /* replace1887_1 -> 268 in the cache */ - /* replace1887 -> 5268 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('iand', 'a', 'b') */ - /* search1888_0_0_0 -> 11 in the cache */ - /* search1888_0_0 -> 2177 in the cache */ - /* search1888_0 -> 2178 in the cache */ - /* search1888_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 2178, 268 }, - 5, - } }, - - /* replace1888_0 -> 11 in the cache */ - /* replace1888_1 -> 268 in the cache */ - /* replace1888 -> 2191 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('iand', 'a', 'b') */ - /* search1889_0_0_0 -> 11 in the cache */ - /* search1889_0_0 -> 4574 in the cache */ - /* search1889_0 -> 5264 in the cache */ - /* search1889_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5264, 268 }, - 5, - } }, - - /* replace1889_0 -> 11 in the cache */ - /* replace1889_1 -> 268 in the cache */ - /* replace1889 -> 2191 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('iand', 'a', 'b') */ - /* search1890_0_0 -> 11 in the cache */ - /* search1890_0_1 -> 869 in the cache */ - /* search1890_0 -> 3593 in the cache */ - /* search1890_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 3593, 268 }, - 5, - } }, - - /* replace1890_0 -> 11 in the cache */ - /* replace1890_1 -> 268 in the cache */ - /* replace1890 -> 2191 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('ior', 'a', 'b') */ - /* search1891_0_0_0 -> 11 in the cache */ - /* search1891_0_0 -> 2177 in the cache */ - /* search1891_0 -> 2178 in the cache */ - /* search1891_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 2178, 268 }, - 5, - } }, - - /* replace1891_0 -> 11 in the cache */ - /* replace1891_1 -> 268 in the cache */ - /* replace1891 -> 2233 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('ior', 'a', 'b') */ - /* search1892_0_0_0 -> 11 in the cache */ - /* search1892_0_0 -> 4574 in the cache */ - /* search1892_0 -> 5264 in the cache */ - /* search1892_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5264, 268 }, - 5, - } }, - - /* replace1892_0 -> 11 in the cache */ - /* replace1892_1 -> 268 in the cache */ - /* replace1892 -> 2233 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('ior', 'a', 'b') */ - /* search1893_0_0 -> 11 in the cache */ - /* search1893_0_1 -> 869 in the cache */ - /* search1893_0 -> 3593 in the cache */ - /* search1893_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 3593, 268 }, - 5, - } }, - - /* replace1893_0 -> 11 in the cache */ - /* replace1893_1 -> 268 in the cache */ - /* replace1893 -> 2233 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('u2u16', ('u2u8', 'a@16')), 'b') => ('ixor', 'a', 'b') */ - /* search1894_0_0_0 -> 11 in the cache */ - /* search1894_0_0 -> 2177 in the cache */ - /* search1894_0 -> 2178 in the cache */ - /* search1894_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 2178, 268 }, - 5, - } }, - - /* replace1894_0 -> 11 in the cache */ - /* replace1894_1 -> 268 in the cache */ - /* replace1894 -> 2257 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('u2u16', ('i2i8', 'a@16')), 'b') => ('ixor', 'a', 'b') */ - /* search1895_0_0_0 -> 11 in the cache */ - /* search1895_0_0 -> 4574 in the cache */ - /* search1895_0 -> 5264 in the cache */ - /* search1895_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5264, 268 }, - 5, - } }, - - /* replace1895_0 -> 11 in the cache */ - /* replace1895_1 -> 268 in the cache */ - /* replace1895 -> 2257 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('extract_u8', 'a@16', 0), 'b') => ('ixor', 'a', 'b') */ - /* search1896_0_0 -> 11 in the cache */ - /* search1896_0_1 -> 869 in the cache */ - /* search1896_0 -> 3593 in the cache */ - /* search1896_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 3593, 268 }, - 5, - } }, - - /* replace1896_0 -> 11 in the cache */ - /* replace1896_1 -> 268 in the cache */ - /* replace1896 -> 2257 in the cache */ - - /* ('i2i16(only_lower_8_bits_used)', ('u2u8', 'a@16')) => a */ - /* search1897_0_0 -> 11 in the cache */ - /* search1897_0 -> 2177 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 2177 }, - 5, - } }, - - /* replace1897 -> 11 in the cache */ - - /* ('extract_i8(only_lower_8_bits_used)', 'a@16', 0) => a */ - /* search1898_0 -> 11 in the cache */ - /* search1898_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 11, 869 }, - 5, - } }, - - /* replace1898 -> 11 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('i2i16', ('u2u8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1899_0 -> 531 in the cache */ - /* search1899_1_0_0 -> 536 in the cache */ - /* search1899_1_0 -> 5254 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 5254 }, - -1, - } }, - /* search1899_2 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5282, 498 }, - 5, - } }, - - /* replace1899_0 -> 531 in the cache */ - /* replace1899_1 -> 536 in the cache */ - /* replace1899_2 -> 498 in the cache */ - /* replace1899 -> 5257 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('i2i16', ('i2i8', 'a@16')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1900_0 -> 531 in the cache */ - /* search1900_1_0_0 -> 536 in the cache */ - /* search1900_1_0 -> 5258 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 5258 }, - -1, - } }, - /* search1900_2 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5284, 498 }, - 5, - } }, - - /* replace1900_0 -> 531 in the cache */ - /* replace1900_1 -> 536 in the cache */ - /* replace1900_2 -> 498 in the cache */ - /* replace1900 -> 5257 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('extract_i8', 'a@16', 0), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1901_0 -> 531 in the cache */ - /* search1901_1_0 -> 536 in the cache */ - /* search1901_1_1 -> 869 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 536, 869 }, - -1, - } }, - /* search1901_2 -> 498 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5286, 498 }, - 5, - } }, - - /* replace1901_0 -> 531 in the cache */ - /* replace1901_1 -> 536 in the cache */ - /* replace1901_2 -> 498 in the cache */ - /* replace1901 -> 5257 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('iadd', 'a', 'b') */ - /* search1902_0_0_0 -> 11 in the cache */ - /* search1902_0_0 -> 2177 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 2177 }, - -1, - } }, - /* search1902_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5288, 268 }, - 5, - } }, - - /* replace1902_0 -> 11 in the cache */ - /* replace1902_1 -> 268 in the cache */ - /* replace1902 -> 4247 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('iadd', 'a', 'b') */ - /* search1903_0_0_0 -> 11 in the cache */ - /* search1903_0_0 -> 4574 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 4574 }, - -1, - } }, - /* search1903_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5290, 268 }, - 5, - } }, - - /* replace1903_0 -> 11 in the cache */ - /* replace1903_1 -> 268 in the cache */ - /* replace1903 -> 4247 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('iadd', 'a', 'b') */ - /* search1904_0_0 -> 11 in the cache */ - /* search1904_0_1 -> 869 in the cache */ - /* search1904_0 -> 3614 in the cache */ - /* search1904_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 3614, 268 }, - 5, - } }, - - /* replace1904_0 -> 11 in the cache */ - /* replace1904_1 -> 268 in the cache */ - /* replace1904 -> 4247 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('imul', 'a', 'b') */ - /* search1905_0_0_0 -> 11 in the cache */ - /* search1905_0_0 -> 2177 in the cache */ - /* search1905_0 -> 5288 in the cache */ - /* search1905_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5288, 268 }, - 5, - } }, - - /* replace1905_0 -> 11 in the cache */ - /* replace1905_1 -> 268 in the cache */ - /* replace1905 -> 5268 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('imul', 'a', 'b') */ - /* search1906_0_0_0 -> 11 in the cache */ - /* search1906_0_0 -> 4574 in the cache */ - /* search1906_0 -> 5290 in the cache */ - /* search1906_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5290, 268 }, - 5, - } }, - - /* replace1906_0 -> 11 in the cache */ - /* replace1906_1 -> 268 in the cache */ - /* replace1906 -> 5268 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('imul', 'a', 'b') */ - /* search1907_0_0 -> 11 in the cache */ - /* search1907_0_1 -> 869 in the cache */ - /* search1907_0 -> 3614 in the cache */ - /* search1907_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 3614, 268 }, - 5, - } }, - - /* replace1907_0 -> 11 in the cache */ - /* replace1907_1 -> 268 in the cache */ - /* replace1907 -> 5268 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('iand', 'a', 'b') */ - /* search1908_0_0_0 -> 11 in the cache */ - /* search1908_0_0 -> 2177 in the cache */ - /* search1908_0 -> 5288 in the cache */ - /* search1908_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5288, 268 }, - 5, - } }, - - /* replace1908_0 -> 11 in the cache */ - /* replace1908_1 -> 268 in the cache */ - /* replace1908 -> 2191 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('iand', 'a', 'b') */ - /* search1909_0_0_0 -> 11 in the cache */ - /* search1909_0_0 -> 4574 in the cache */ - /* search1909_0 -> 5290 in the cache */ - /* search1909_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5290, 268 }, - 5, - } }, - - /* replace1909_0 -> 11 in the cache */ - /* replace1909_1 -> 268 in the cache */ - /* replace1909 -> 2191 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('iand', 'a', 'b') */ - /* search1910_0_0 -> 11 in the cache */ - /* search1910_0_1 -> 869 in the cache */ - /* search1910_0 -> 3614 in the cache */ - /* search1910_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 3614, 268 }, - 5, - } }, - - /* replace1910_0 -> 11 in the cache */ - /* replace1910_1 -> 268 in the cache */ - /* replace1910 -> 2191 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('ior', 'a', 'b') */ - /* search1911_0_0_0 -> 11 in the cache */ - /* search1911_0_0 -> 2177 in the cache */ - /* search1911_0 -> 5288 in the cache */ - /* search1911_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5288, 268 }, - 5, - } }, - - /* replace1911_0 -> 11 in the cache */ - /* replace1911_1 -> 268 in the cache */ - /* replace1911 -> 2233 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('ior', 'a', 'b') */ - /* search1912_0_0_0 -> 11 in the cache */ - /* search1912_0_0 -> 4574 in the cache */ - /* search1912_0 -> 5290 in the cache */ - /* search1912_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5290, 268 }, - 5, - } }, - - /* replace1912_0 -> 11 in the cache */ - /* replace1912_1 -> 268 in the cache */ - /* replace1912 -> 2233 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('ior', 'a', 'b') */ - /* search1913_0_0 -> 11 in the cache */ - /* search1913_0_1 -> 869 in the cache */ - /* search1913_0 -> 3614 in the cache */ - /* search1913_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 3614, 268 }, - 5, - } }, - - /* replace1913_0 -> 11 in the cache */ - /* replace1913_1 -> 268 in the cache */ - /* replace1913 -> 2233 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('i2i16', ('u2u8', 'a@16')), 'b') => ('ixor', 'a', 'b') */ - /* search1914_0_0_0 -> 11 in the cache */ - /* search1914_0_0 -> 2177 in the cache */ - /* search1914_0 -> 5288 in the cache */ - /* search1914_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5288, 268 }, - 5, - } }, - - /* replace1914_0 -> 11 in the cache */ - /* replace1914_1 -> 268 in the cache */ - /* replace1914 -> 2257 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('i2i16', ('i2i8', 'a@16')), 'b') => ('ixor', 'a', 'b') */ - /* search1915_0_0_0 -> 11 in the cache */ - /* search1915_0_0 -> 4574 in the cache */ - /* search1915_0 -> 5290 in the cache */ - /* search1915_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5290, 268 }, - 5, - } }, - - /* replace1915_0 -> 11 in the cache */ - /* replace1915_1 -> 268 in the cache */ - /* replace1915 -> 2257 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('extract_i8', 'a@16', 0), 'b') => ('ixor', 'a', 'b') */ - /* search1916_0_0 -> 11 in the cache */ - /* search1916_0_1 -> 869 in the cache */ - /* search1916_0 -> 3614 in the cache */ - /* search1916_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 3614, 268 }, - 5, - } }, - - /* replace1916_0 -> 11 in the cache */ - /* replace1916_1 -> 268 in the cache */ - /* replace1916 -> 2257 in the cache */ - - /* ('u2u32(only_lower_8_bits_used)', ('u2u8', 'a@32')) => a */ - /* search1917_0_0 -> 16 in the cache */ - /* search1917_0 -> 2193 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2193 }, - 5, - } }, - - /* replace1917 -> 16 in the cache */ - - /* ('extract_u8(only_lower_8_bits_used)', 'a@32', 0) => a */ - /* search1918_0 -> 16 in the cache */ - /* search1918_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 16, 128 }, - 5, - } }, - - /* replace1918 -> 16 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('u2u32', ('u2u8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1919_0 -> 531 in the cache */ - /* search1919_1_0_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 5307 }, - -1, - } }, - /* search1919_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5308, 569 }, - 5, - } }, - - /* replace1919_0 -> 531 in the cache */ - /* replace1919_1 -> 189 in the cache */ - /* replace1919_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 189, 569 }, - -1, - } }, - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('u2u32', ('i2i8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1920_0 -> 531 in the cache */ - /* search1920_1_0_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 5311 }, - -1, - } }, - /* search1920_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5312, 569 }, - 5, - } }, - - /* replace1920_0 -> 531 in the cache */ - /* replace1920_1 -> 189 in the cache */ - /* replace1920_2 -> 569 in the cache */ - /* replace1920 -> 5310 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('extract_u8', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1921_0 -> 531 in the cache */ - /* search1921_1_0 -> 189 in the cache */ - /* search1921_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 189, 128 }, - -1, - } }, - /* search1921_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5314, 569 }, - 5, - } }, - - /* replace1921_0 -> 531 in the cache */ - /* replace1921_1 -> 189 in the cache */ - /* replace1921_2 -> 569 in the cache */ - /* replace1921 -> 5310 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1922_0_0_0 -> 16 in the cache */ - /* search1922_0_0 -> 2193 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 2193 }, - -1, - } }, - /* search1922_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5316, 36 }, - 5, - } }, - - /* replace1922_0 -> 16 in the cache */ - /* replace1922_1 -> 36 in the cache */ - /* replace1922 -> 4260 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1923_0_0_0 -> 16 in the cache */ - /* search1923_0_0 -> 4526 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4526 }, - -1, - } }, - /* search1923_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5318, 36 }, - 5, - } }, - - /* replace1923_0 -> 16 in the cache */ - /* replace1923_1 -> 36 in the cache */ - /* replace1923 -> 4260 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('iadd', 'a', 'b') */ - /* search1924_0_0 -> 16 in the cache */ - /* search1924_0_1 -> 128 in the cache */ - /* search1924_0 -> 422 in the cache */ - /* search1924_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 422, 36 }, - 5, - } }, - - /* replace1924_0 -> 16 in the cache */ - /* replace1924_1 -> 36 in the cache */ - /* replace1924 -> 4260 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1925_0_0_0 -> 16 in the cache */ - /* search1925_0_0 -> 2193 in the cache */ - /* search1925_0 -> 5316 in the cache */ - /* search1925_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5316, 36 }, - 5, - } }, - - /* replace1925_0 -> 16 in the cache */ - /* replace1925_1 -> 36 in the cache */ - /* replace1925 -> 49 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1926_0_0_0 -> 16 in the cache */ - /* search1926_0_0 -> 4526 in the cache */ - /* search1926_0 -> 5318 in the cache */ - /* search1926_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5318, 36 }, - 5, - } }, - - /* replace1926_0 -> 16 in the cache */ - /* replace1926_1 -> 36 in the cache */ - /* replace1926 -> 49 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('imul', 'a', 'b') */ - /* search1927_0_0 -> 16 in the cache */ - /* search1927_0_1 -> 128 in the cache */ - /* search1927_0 -> 422 in the cache */ - /* search1927_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 422, 36 }, - 5, - } }, - - /* replace1927_0 -> 16 in the cache */ - /* replace1927_1 -> 36 in the cache */ - /* replace1927 -> 49 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1928_0_0_0 -> 16 in the cache */ - /* search1928_0_0 -> 2193 in the cache */ - /* search1928_0 -> 5316 in the cache */ - /* search1928_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5316, 36 }, - 5, - } }, - - /* replace1928_0 -> 16 in the cache */ - /* replace1928_1 -> 36 in the cache */ - /* replace1928 -> 2199 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1929_0_0_0 -> 16 in the cache */ - /* search1929_0_0 -> 4526 in the cache */ - /* search1929_0 -> 5318 in the cache */ - /* search1929_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5318, 36 }, - 5, - } }, - - /* replace1929_0 -> 16 in the cache */ - /* replace1929_1 -> 36 in the cache */ - /* replace1929 -> 2199 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('iand', 'a', 'b') */ - /* search1930_0_0 -> 16 in the cache */ - /* search1930_0_1 -> 128 in the cache */ - /* search1930_0 -> 422 in the cache */ - /* search1930_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 422, 36 }, - 5, - } }, - - /* replace1930_0 -> 16 in the cache */ - /* replace1930_1 -> 36 in the cache */ - /* replace1930 -> 2199 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1931_0_0_0 -> 16 in the cache */ - /* search1931_0_0 -> 2193 in the cache */ - /* search1931_0 -> 5316 in the cache */ - /* search1931_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5316, 36 }, - 5, - } }, - - /* replace1931_0 -> 16 in the cache */ - /* replace1931_1 -> 36 in the cache */ - /* replace1931 -> 2237 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1932_0_0_0 -> 16 in the cache */ - /* search1932_0_0 -> 4526 in the cache */ - /* search1932_0 -> 5318 in the cache */ - /* search1932_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5318, 36 }, - 5, - } }, - - /* replace1932_0 -> 16 in the cache */ - /* replace1932_1 -> 36 in the cache */ - /* replace1932 -> 2237 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('ior', 'a', 'b') */ - /* search1933_0_0 -> 16 in the cache */ - /* search1933_0_1 -> 128 in the cache */ - /* search1933_0 -> 422 in the cache */ - /* search1933_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 422, 36 }, - 5, - } }, - - /* replace1933_0 -> 16 in the cache */ - /* replace1933_1 -> 36 in the cache */ - /* replace1933 -> 2237 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('u2u32', ('u2u8', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1934_0_0_0 -> 16 in the cache */ - /* search1934_0_0 -> 2193 in the cache */ - /* search1934_0 -> 5316 in the cache */ - /* search1934_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5316, 36 }, - 5, - } }, - - /* replace1934_0 -> 16 in the cache */ - /* replace1934_1 -> 36 in the cache */ - /* replace1934 -> 2261 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('u2u32', ('i2i8', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1935_0_0_0 -> 16 in the cache */ - /* search1935_0_0 -> 4526 in the cache */ - /* search1935_0 -> 5318 in the cache */ - /* search1935_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5318, 36 }, - 5, - } }, - - /* replace1935_0 -> 16 in the cache */ - /* replace1935_1 -> 36 in the cache */ - /* replace1935 -> 2261 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('extract_u8', 'a@32', 0), 'b') => ('ixor', 'a', 'b') */ - /* search1936_0_0 -> 16 in the cache */ - /* search1936_0_1 -> 128 in the cache */ - /* search1936_0 -> 422 in the cache */ - /* search1936_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 422, 36 }, - 5, - } }, - - /* replace1936_0 -> 16 in the cache */ - /* replace1936_1 -> 36 in the cache */ - /* replace1936 -> 2261 in the cache */ - - /* ('i2i32(only_lower_8_bits_used)', ('u2u8', 'a@32')) => a */ - /* search1937_0_0 -> 16 in the cache */ - /* search1937_0 -> 2193 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2193 }, - 5, - } }, - - /* replace1937 -> 16 in the cache */ - - /* ('extract_i8(only_lower_8_bits_used)', 'a@32', 0) => a */ - /* search1938_0 -> 16 in the cache */ - /* search1938_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 16, 128 }, - 5, - } }, - - /* replace1938 -> 16 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('i2i32', ('u2u8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1939_0 -> 531 in the cache */ - /* search1939_1_0_0 -> 189 in the cache */ - /* search1939_1_0 -> 5307 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 5307 }, - -1, - } }, - /* search1939_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5335, 569 }, - 5, - } }, - - /* replace1939_0 -> 531 in the cache */ - /* replace1939_1 -> 189 in the cache */ - /* replace1939_2 -> 569 in the cache */ - /* replace1939 -> 5310 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('i2i32', ('i2i8', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1940_0 -> 531 in the cache */ - /* search1940_1_0_0 -> 189 in the cache */ - /* search1940_1_0 -> 5311 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 5311 }, - -1, - } }, - /* search1940_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5337, 569 }, - 5, - } }, - - /* replace1940_0 -> 531 in the cache */ - /* replace1940_1 -> 189 in the cache */ - /* replace1940_2 -> 569 in the cache */ - /* replace1940 -> 5310 in the cache */ - - /* ('bcsel(only_lower_8_bits_used)', 'c', ('extract_i8', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1941_0 -> 531 in the cache */ - /* search1941_1_0 -> 189 in the cache */ - /* search1941_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 189, 128 }, - -1, - } }, - /* search1941_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5339, 569 }, - 5, - } }, - - /* replace1941_0 -> 531 in the cache */ - /* replace1941_1 -> 189 in the cache */ - /* replace1941_2 -> 569 in the cache */ - /* replace1941 -> 5310 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1942_0_0_0 -> 16 in the cache */ - /* search1942_0_0 -> 2193 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 2193 }, - -1, - } }, - /* search1942_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5341, 36 }, - 5, - } }, - - /* replace1942_0 -> 16 in the cache */ - /* replace1942_1 -> 36 in the cache */ - /* replace1942 -> 4260 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1943_0_0_0 -> 16 in the cache */ - /* search1943_0_0 -> 4526 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4526 }, - -1, - } }, - /* search1943_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5343, 36 }, - 5, - } }, - - /* replace1943_0 -> 16 in the cache */ - /* replace1943_1 -> 36 in the cache */ - /* replace1943 -> 4260 in the cache */ - - /* ('iadd(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('iadd', 'a', 'b') */ - /* search1944_0_0 -> 16 in the cache */ - /* search1944_0_1 -> 128 in the cache */ - /* search1944_0 -> 403 in the cache */ - /* search1944_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 403, 36 }, - 5, - } }, - - /* replace1944_0 -> 16 in the cache */ - /* replace1944_1 -> 36 in the cache */ - /* replace1944 -> 4260 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1945_0_0_0 -> 16 in the cache */ - /* search1945_0_0 -> 2193 in the cache */ - /* search1945_0 -> 5341 in the cache */ - /* search1945_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5341, 36 }, - 5, - } }, - - /* replace1945_0 -> 16 in the cache */ - /* replace1945_1 -> 36 in the cache */ - /* replace1945 -> 49 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1946_0_0_0 -> 16 in the cache */ - /* search1946_0_0 -> 4526 in the cache */ - /* search1946_0 -> 5343 in the cache */ - /* search1946_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5343, 36 }, - 5, - } }, - - /* replace1946_0 -> 16 in the cache */ - /* replace1946_1 -> 36 in the cache */ - /* replace1946 -> 49 in the cache */ - - /* ('imul(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('imul', 'a', 'b') */ - /* search1947_0_0 -> 16 in the cache */ - /* search1947_0_1 -> 128 in the cache */ - /* search1947_0 -> 403 in the cache */ - /* search1947_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 403, 36 }, - 5, - } }, - - /* replace1947_0 -> 16 in the cache */ - /* replace1947_1 -> 36 in the cache */ - /* replace1947 -> 49 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1948_0_0_0 -> 16 in the cache */ - /* search1948_0_0 -> 2193 in the cache */ - /* search1948_0 -> 5341 in the cache */ - /* search1948_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5341, 36 }, - 5, - } }, - - /* replace1948_0 -> 16 in the cache */ - /* replace1948_1 -> 36 in the cache */ - /* replace1948 -> 2199 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1949_0_0_0 -> 16 in the cache */ - /* search1949_0_0 -> 4526 in the cache */ - /* search1949_0 -> 5343 in the cache */ - /* search1949_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5343, 36 }, - 5, - } }, - - /* replace1949_0 -> 16 in the cache */ - /* replace1949_1 -> 36 in the cache */ - /* replace1949 -> 2199 in the cache */ - - /* ('iand(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('iand', 'a', 'b') */ - /* search1950_0_0 -> 16 in the cache */ - /* search1950_0_1 -> 128 in the cache */ - /* search1950_0 -> 403 in the cache */ - /* search1950_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 403, 36 }, - 5, - } }, - - /* replace1950_0 -> 16 in the cache */ - /* replace1950_1 -> 36 in the cache */ - /* replace1950 -> 2199 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1951_0_0_0 -> 16 in the cache */ - /* search1951_0_0 -> 2193 in the cache */ - /* search1951_0 -> 5341 in the cache */ - /* search1951_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5341, 36 }, - 5, - } }, - - /* replace1951_0 -> 16 in the cache */ - /* replace1951_1 -> 36 in the cache */ - /* replace1951 -> 2237 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1952_0_0_0 -> 16 in the cache */ - /* search1952_0_0 -> 4526 in the cache */ - /* search1952_0 -> 5343 in the cache */ - /* search1952_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5343, 36 }, - 5, - } }, - - /* replace1952_0 -> 16 in the cache */ - /* replace1952_1 -> 36 in the cache */ - /* replace1952 -> 2237 in the cache */ - - /* ('ior(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('ior', 'a', 'b') */ - /* search1953_0_0 -> 16 in the cache */ - /* search1953_0_1 -> 128 in the cache */ - /* search1953_0 -> 403 in the cache */ - /* search1953_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 403, 36 }, - 5, - } }, - - /* replace1953_0 -> 16 in the cache */ - /* replace1953_1 -> 36 in the cache */ - /* replace1953 -> 2237 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('i2i32', ('u2u8', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1954_0_0_0 -> 16 in the cache */ - /* search1954_0_0 -> 2193 in the cache */ - /* search1954_0 -> 5341 in the cache */ - /* search1954_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5341, 36 }, - 5, - } }, - - /* replace1954_0 -> 16 in the cache */ - /* replace1954_1 -> 36 in the cache */ - /* replace1954 -> 2261 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('i2i32', ('i2i8', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1955_0_0_0 -> 16 in the cache */ - /* search1955_0_0 -> 4526 in the cache */ - /* search1955_0 -> 5343 in the cache */ - /* search1955_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5343, 36 }, - 5, - } }, - - /* replace1955_0 -> 16 in the cache */ - /* replace1955_1 -> 36 in the cache */ - /* replace1955 -> 2261 in the cache */ - - /* ('ixor(only_lower_8_bits_used)', ('extract_i8', 'a@32', 0), 'b') => ('ixor', 'a', 'b') */ - /* search1956_0_0 -> 16 in the cache */ - /* search1956_0_1 -> 128 in the cache */ - /* search1956_0 -> 403 in the cache */ - /* search1956_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 403, 36 }, - 5, - } }, - - /* replace1956_0 -> 16 in the cache */ - /* replace1956_1 -> 36 in the cache */ - /* replace1956 -> 2261 in the cache */ - - /* ('u2u32(only_lower_16_bits_used)', ('u2u16', 'a@32')) => a */ - /* search1957_0_0 -> 16 in the cache */ - /* search1957_0 -> 3478 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 3478 }, - 6, - } }, - - /* replace1957 -> 16 in the cache */ - - /* ('extract_u16(only_lower_16_bits_used)', 'a@32', 0) => a */ - /* search1958_0 -> 16 in the cache */ - /* search1958_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 16, 128 }, - 6, - } }, - - /* replace1958 -> 16 in the cache */ - - /* ('bcsel(only_lower_16_bits_used)', 'c', ('u2u32', ('u2u16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1959_0 -> 531 in the cache */ - /* search1959_1_0_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 5360 }, - -1, - } }, - /* search1959_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5361, 569 }, - 6, - } }, - - /* replace1959_0 -> 531 in the cache */ - /* replace1959_1 -> 189 in the cache */ - /* replace1959_2 -> 569 in the cache */ - /* replace1959 -> 5310 in the cache */ - - /* ('bcsel(only_lower_16_bits_used)', 'c', ('u2u32', ('i2i16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1960_0 -> 531 in the cache */ - /* search1960_1_0_0 -> 189 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 189 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 5363 }, - -1, - } }, - /* search1960_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5364, 569 }, - 6, - } }, - - /* replace1960_0 -> 531 in the cache */ - /* replace1960_1 -> 189 in the cache */ - /* replace1960_2 -> 569 in the cache */ - /* replace1960 -> 5310 in the cache */ - - /* ('bcsel(only_lower_16_bits_used)', 'c', ('extract_u16', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1961_0 -> 531 in the cache */ - /* search1961_1_0 -> 189 in the cache */ - /* search1961_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 189, 128 }, - -1, - } }, - /* search1961_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5366, 569 }, - 6, - } }, - - /* replace1961_0 -> 531 in the cache */ - /* replace1961_1 -> 189 in the cache */ - /* replace1961_2 -> 569 in the cache */ - /* replace1961 -> 5310 in the cache */ - - /* ('iadd(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1962_0_0_0 -> 16 in the cache */ - /* search1962_0_0 -> 3478 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 3478 }, - -1, - } }, - /* search1962_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5368, 36 }, - 6, - } }, - - /* replace1962_0 -> 16 in the cache */ - /* replace1962_1 -> 36 in the cache */ - /* replace1962 -> 4260 in the cache */ - - /* ('iadd(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1963_0_0_0 -> 16 in the cache */ - /* search1963_0_0 -> 4528 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 4528 }, - -1, - } }, - /* search1963_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5370, 36 }, - 6, - } }, - - /* replace1963_0 -> 16 in the cache */ - /* replace1963_1 -> 36 in the cache */ - /* replace1963 -> 4260 in the cache */ - - /* ('iadd(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('iadd', 'a', 'b') */ - /* search1964_0_0 -> 16 in the cache */ - /* search1964_0_1 -> 128 in the cache */ - /* search1964_0 -> 454 in the cache */ - /* search1964_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 454, 36 }, - 6, - } }, - - /* replace1964_0 -> 16 in the cache */ - /* replace1964_1 -> 36 in the cache */ - /* replace1964 -> 4260 in the cache */ - - /* ('imul(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1965_0_0_0 -> 16 in the cache */ - /* search1965_0_0 -> 3478 in the cache */ - /* search1965_0 -> 5368 in the cache */ - /* search1965_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5368, 36 }, - 6, - } }, - - /* replace1965_0 -> 16 in the cache */ - /* replace1965_1 -> 36 in the cache */ - /* replace1965 -> 49 in the cache */ - - /* ('imul(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1966_0_0_0 -> 16 in the cache */ - /* search1966_0_0 -> 4528 in the cache */ - /* search1966_0 -> 5370 in the cache */ - /* search1966_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5370, 36 }, - 6, - } }, - - /* replace1966_0 -> 16 in the cache */ - /* replace1966_1 -> 36 in the cache */ - /* replace1966 -> 49 in the cache */ - - /* ('imul(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('imul', 'a', 'b') */ - /* search1967_0_0 -> 16 in the cache */ - /* search1967_0_1 -> 128 in the cache */ - /* search1967_0 -> 454 in the cache */ - /* search1967_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 454, 36 }, - 6, - } }, - - /* replace1967_0 -> 16 in the cache */ - /* replace1967_1 -> 36 in the cache */ - /* replace1967 -> 49 in the cache */ - - /* ('iand(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1968_0_0_0 -> 16 in the cache */ - /* search1968_0_0 -> 3478 in the cache */ - /* search1968_0 -> 5368 in the cache */ - /* search1968_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5368, 36 }, - 6, - } }, - - /* replace1968_0 -> 16 in the cache */ - /* replace1968_1 -> 36 in the cache */ - /* replace1968 -> 2199 in the cache */ - - /* ('iand(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1969_0_0_0 -> 16 in the cache */ - /* search1969_0_0 -> 4528 in the cache */ - /* search1969_0 -> 5370 in the cache */ - /* search1969_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5370, 36 }, - 6, - } }, - - /* replace1969_0 -> 16 in the cache */ - /* replace1969_1 -> 36 in the cache */ - /* replace1969 -> 2199 in the cache */ - - /* ('iand(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('iand', 'a', 'b') */ - /* search1970_0_0 -> 16 in the cache */ - /* search1970_0_1 -> 128 in the cache */ - /* search1970_0 -> 454 in the cache */ - /* search1970_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 454, 36 }, - 6, - } }, - - /* replace1970_0 -> 16 in the cache */ - /* replace1970_1 -> 36 in the cache */ - /* replace1970 -> 2199 in the cache */ - - /* ('ior(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1971_0_0_0 -> 16 in the cache */ - /* search1971_0_0 -> 3478 in the cache */ - /* search1971_0 -> 5368 in the cache */ - /* search1971_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5368, 36 }, - 6, - } }, - - /* replace1971_0 -> 16 in the cache */ - /* replace1971_1 -> 36 in the cache */ - /* replace1971 -> 2237 in the cache */ - - /* ('ior(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1972_0_0_0 -> 16 in the cache */ - /* search1972_0_0 -> 4528 in the cache */ - /* search1972_0 -> 5370 in the cache */ - /* search1972_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5370, 36 }, - 6, - } }, - - /* replace1972_0 -> 16 in the cache */ - /* replace1972_1 -> 36 in the cache */ - /* replace1972 -> 2237 in the cache */ - - /* ('ior(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('ior', 'a', 'b') */ - /* search1973_0_0 -> 16 in the cache */ - /* search1973_0_1 -> 128 in the cache */ - /* search1973_0 -> 454 in the cache */ - /* search1973_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 454, 36 }, - 6, - } }, - - /* replace1973_0 -> 16 in the cache */ - /* replace1973_1 -> 36 in the cache */ - /* replace1973 -> 2237 in the cache */ - - /* ('ixor(only_lower_16_bits_used)', ('u2u32', ('u2u16', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1974_0_0_0 -> 16 in the cache */ - /* search1974_0_0 -> 3478 in the cache */ - /* search1974_0 -> 5368 in the cache */ - /* search1974_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5368, 36 }, - 6, - } }, - - /* replace1974_0 -> 16 in the cache */ - /* replace1974_1 -> 36 in the cache */ - /* replace1974 -> 2261 in the cache */ - - /* ('ixor(only_lower_16_bits_used)', ('u2u32', ('i2i16', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1975_0_0_0 -> 16 in the cache */ - /* search1975_0_0 -> 4528 in the cache */ - /* search1975_0 -> 5370 in the cache */ - /* search1975_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5370, 36 }, - 6, - } }, - - /* replace1975_0 -> 16 in the cache */ - /* replace1975_1 -> 36 in the cache */ - /* replace1975 -> 2261 in the cache */ - - /* ('ixor(only_lower_16_bits_used)', ('extract_u16', 'a@32', 0), 'b') => ('ixor', 'a', 'b') */ - /* search1976_0_0 -> 16 in the cache */ - /* search1976_0_1 -> 128 in the cache */ - /* search1976_0 -> 454 in the cache */ - /* search1976_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 454, 36 }, - 6, - } }, - - /* replace1976_0 -> 16 in the cache */ - /* replace1976_1 -> 36 in the cache */ - /* replace1976 -> 2261 in the cache */ - - /* ('i2i32(only_lower_16_bits_used)', ('u2u16', 'a@32')) => a */ - /* search1977_0_0 -> 16 in the cache */ - /* search1977_0 -> 3478 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 3478 }, - 6, - } }, - - /* replace1977 -> 16 in the cache */ - - /* ('extract_i16(only_lower_16_bits_used)', 'a@32', 0) => a */ - /* search1978_0 -> 16 in the cache */ - /* search1978_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 16, 128 }, - 6, - } }, - - /* replace1978 -> 16 in the cache */ - - /* ('bcsel(only_lower_16_bits_used)', 'c', ('i2i32', ('u2u16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1979_0 -> 531 in the cache */ - /* search1979_1_0_0 -> 189 in the cache */ - /* search1979_1_0 -> 5360 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 5360 }, - -1, - } }, - /* search1979_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5387, 569 }, - 6, - } }, - - /* replace1979_0 -> 531 in the cache */ - /* replace1979_1 -> 189 in the cache */ - /* replace1979_2 -> 569 in the cache */ - /* replace1979 -> 5310 in the cache */ - - /* ('bcsel(only_lower_16_bits_used)', 'c', ('i2i32', ('i2i16', 'a@32')), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1980_0 -> 531 in the cache */ - /* search1980_1_0_0 -> 189 in the cache */ - /* search1980_1_0 -> 5363 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 5363 }, - -1, - } }, - /* search1980_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5389, 569 }, - 6, - } }, - - /* replace1980_0 -> 531 in the cache */ - /* replace1980_1 -> 189 in the cache */ - /* replace1980_2 -> 569 in the cache */ - /* replace1980 -> 5310 in the cache */ - - /* ('bcsel(only_lower_16_bits_used)', 'c', ('extract_i16', 'a@32', 0), 'b') => ('bcsel', 'c', 'a', 'b') */ - /* search1981_0 -> 531 in the cache */ - /* search1981_1_0 -> 189 in the cache */ - /* search1981_1_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 189, 128 }, - -1, - } }, - /* search1981_2 -> 569 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 5391, 569 }, - 6, - } }, - - /* replace1981_0 -> 531 in the cache */ - /* replace1981_1 -> 189 in the cache */ - /* replace1981_2 -> 569 in the cache */ - /* replace1981 -> 5310 in the cache */ - - /* ('iadd(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1982_0_0_0 -> 16 in the cache */ - /* search1982_0_0 -> 3478 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 3478 }, - -1, - } }, - /* search1982_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5393, 36 }, - 6, - } }, - - /* replace1982_0 -> 16 in the cache */ - /* replace1982_1 -> 36 in the cache */ - /* replace1982 -> 4260 in the cache */ - - /* ('iadd(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('iadd', 'a', 'b') */ - /* search1983_0_0_0 -> 16 in the cache */ - /* search1983_0_0 -> 4528 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 4528 }, - -1, - } }, - /* search1983_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5395, 36 }, - 6, - } }, - - /* replace1983_0 -> 16 in the cache */ - /* replace1983_1 -> 36 in the cache */ - /* replace1983 -> 4260 in the cache */ - - /* ('iadd(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('iadd', 'a', 'b') */ - /* search1984_0_0 -> 16 in the cache */ - /* search1984_0_1 -> 128 in the cache */ - /* search1984_0 -> 446 in the cache */ - /* search1984_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 446, 36 }, - 6, - } }, - - /* replace1984_0 -> 16 in the cache */ - /* replace1984_1 -> 36 in the cache */ - /* replace1984 -> 4260 in the cache */ - - /* ('imul(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1985_0_0_0 -> 16 in the cache */ - /* search1985_0_0 -> 3478 in the cache */ - /* search1985_0 -> 5393 in the cache */ - /* search1985_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5393, 36 }, - 6, - } }, - - /* replace1985_0 -> 16 in the cache */ - /* replace1985_1 -> 36 in the cache */ - /* replace1985 -> 49 in the cache */ - - /* ('imul(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('imul', 'a', 'b') */ - /* search1986_0_0_0 -> 16 in the cache */ - /* search1986_0_0 -> 4528 in the cache */ - /* search1986_0 -> 5395 in the cache */ - /* search1986_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5395, 36 }, - 6, - } }, - - /* replace1986_0 -> 16 in the cache */ - /* replace1986_1 -> 36 in the cache */ - /* replace1986 -> 49 in the cache */ - - /* ('imul(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('imul', 'a', 'b') */ - /* search1987_0_0 -> 16 in the cache */ - /* search1987_0_1 -> 128 in the cache */ - /* search1987_0 -> 446 in the cache */ - /* search1987_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 446, 36 }, - 6, - } }, - - /* replace1987_0 -> 16 in the cache */ - /* replace1987_1 -> 36 in the cache */ - /* replace1987 -> 49 in the cache */ - - /* ('iand(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1988_0_0_0 -> 16 in the cache */ - /* search1988_0_0 -> 3478 in the cache */ - /* search1988_0 -> 5393 in the cache */ - /* search1988_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5393, 36 }, - 6, - } }, - - /* replace1988_0 -> 16 in the cache */ - /* replace1988_1 -> 36 in the cache */ - /* replace1988 -> 2199 in the cache */ - - /* ('iand(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('iand', 'a', 'b') */ - /* search1989_0_0_0 -> 16 in the cache */ - /* search1989_0_0 -> 4528 in the cache */ - /* search1989_0 -> 5395 in the cache */ - /* search1989_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5395, 36 }, - 6, - } }, - - /* replace1989_0 -> 16 in the cache */ - /* replace1989_1 -> 36 in the cache */ - /* replace1989 -> 2199 in the cache */ - - /* ('iand(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('iand', 'a', 'b') */ - /* search1990_0_0 -> 16 in the cache */ - /* search1990_0_1 -> 128 in the cache */ - /* search1990_0 -> 446 in the cache */ - /* search1990_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 446, 36 }, - 6, - } }, - - /* replace1990_0 -> 16 in the cache */ - /* replace1990_1 -> 36 in the cache */ - /* replace1990 -> 2199 in the cache */ - - /* ('ior(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1991_0_0_0 -> 16 in the cache */ - /* search1991_0_0 -> 3478 in the cache */ - /* search1991_0 -> 5393 in the cache */ - /* search1991_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5393, 36 }, - 6, - } }, - - /* replace1991_0 -> 16 in the cache */ - /* replace1991_1 -> 36 in the cache */ - /* replace1991 -> 2237 in the cache */ - - /* ('ior(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('ior', 'a', 'b') */ - /* search1992_0_0_0 -> 16 in the cache */ - /* search1992_0_0 -> 4528 in the cache */ - /* search1992_0 -> 5395 in the cache */ - /* search1992_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 5395, 36 }, - 6, - } }, - - /* replace1992_0 -> 16 in the cache */ - /* replace1992_1 -> 36 in the cache */ - /* replace1992 -> 2237 in the cache */ - - /* ('ior(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('ior', 'a', 'b') */ - /* search1993_0_0 -> 16 in the cache */ - /* search1993_0_1 -> 128 in the cache */ - /* search1993_0 -> 446 in the cache */ - /* search1993_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 446, 36 }, - 6, - } }, - - /* replace1993_0 -> 16 in the cache */ - /* replace1993_1 -> 36 in the cache */ - /* replace1993 -> 2237 in the cache */ - - /* ('ixor(only_lower_16_bits_used)', ('i2i32', ('u2u16', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1994_0_0_0 -> 16 in the cache */ - /* search1994_0_0 -> 3478 in the cache */ - /* search1994_0 -> 5393 in the cache */ - /* search1994_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5393, 36 }, - 6, - } }, - - /* replace1994_0 -> 16 in the cache */ - /* replace1994_1 -> 36 in the cache */ - /* replace1994 -> 2261 in the cache */ - - /* ('ixor(only_lower_16_bits_used)', ('i2i32', ('i2i16', 'a@32')), 'b') => ('ixor', 'a', 'b') */ - /* search1995_0_0_0 -> 16 in the cache */ - /* search1995_0_0 -> 4528 in the cache */ - /* search1995_0 -> 5395 in the cache */ - /* search1995_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 5395, 36 }, - 6, - } }, - - /* replace1995_0 -> 16 in the cache */ - /* replace1995_1 -> 36 in the cache */ - /* replace1995 -> 2261 in the cache */ - - /* ('ixor(only_lower_16_bits_used)', ('extract_i16', 'a@32', 0), 'b') => ('ixor', 'a', 'b') */ - /* search1996_0_0 -> 16 in the cache */ - /* search1996_0_1 -> 128 in the cache */ - /* search1996_0 -> 446 in the cache */ - /* search1996_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 446, 36 }, - 6, - } }, - - /* replace1996_0 -> 16 in the cache */ - /* replace1996_1 -> 36 in the cache */ - /* replace1996 -> 2261 in the cache */ - - /* ('ldexp@16', 'x', 'exp') => ('fmul', ('fmul', 'x', ('i2i16', ('ishl', ('iadd', ('ishr', ('imin', ('imax', 'exp', -30), 30), 1), 15), 10))), ('i2i16', ('ishl', ('iadd', ('isub', ('imin', ('imax', 'exp', -30), 30), ('ishr', ('imin', ('imax', 'exp', -30), 30), 1)), 15), 10))) */ - { .variable = { - { nir_search_value_variable, 16 }, - 0, /* x */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* exp */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ldexp, - -1, 0, - { 5410, 5411 }, - -1, - } }, - - /* replace1997_0_0 -> 5410 in the cache */ - /* replace1997_0_1_0_0_0_0_0_0 -> 5411 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0x1e /* -30 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 4, 1, - { 5411, 5413 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x1e /* 30 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 3, 2, - { 5414, 5415 }, - -1, - } }, - /* replace1997_0_1_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 2, - { 5416, 406 }, - -1, - } }, - /* replace1997_0_1_0_0_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 3, - { 5417, 14 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xa /* 10 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 3, - { 5418, 5419 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 3, - { 5420 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 4, - { 5410, 5421 }, - -1, - } }, - /* replace1997_1_0_0_0_0_0_0 -> 5411 in the cache */ - /* replace1997_1_0_0_0_0_0_1 -> 5413 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 7, 1, - { 5411, 5413 }, - -1, - } }, - /* replace1997_1_0_0_0_0_1 -> 5415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 6, 2, - { 5423, 5415 }, - -1, - } }, - /* replace1997_1_0_0_0_1_0_0_0 -> 5411 in the cache */ - /* replace1997_1_0_0_0_1_0_0_1 -> 5413 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 9, 1, - { 5411, 5413 }, - -1, - } }, - /* replace1997_1_0_0_0_1_0_1 -> 5415 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 8, 2, - { 5425, 5415 }, - -1, - } }, - /* replace1997_1_0_0_0_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 2, - { 5426, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 4, - { 5424, 5427 }, - -1, - } }, - /* replace1997_1_0_0_1 -> 14 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 5, 5, - { 5428, 14 }, - -1, - } }, - /* replace1997_1_0_1 -> 5419 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 5, - { 5429, 5419 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 5, - { 5430 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 10, - { 5422, 5431 }, - -1, - } }, - - /* ('ldexp@32', 'x', 'exp') => ('fmul', ('fmul', 'x', ('ishl', ('iadd', ('ishr', ('imin', ('imax', 'exp', -254), 254), 1), 127), 23)), ('ishl', ('iadd', ('isub', ('imin', ('imax', 'exp', -254), 254), ('ishr', ('imin', ('imax', 'exp', -254), 254), 1)), 127), 23)) */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* x */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1998_1 -> 5411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ldexp, - -1, 0, - { 5433, 5411 }, - -1, - } }, - - /* replace1998_0_0 -> 5433 in the cache */ - /* replace1998_0_1_0_0_0_0_0 -> 5411 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0xfe /* -254 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 4, 1, - { 5411, 5435 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xfe /* 254 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 3, 2, - { 5436, 5437 }, - -1, - } }, - /* replace1998_0_1_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 2, - { 5438, 406 }, - -1, - } }, - /* replace1998_0_1_0_1 -> 4612 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 3, - { 5439, 4612 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x17 /* 23 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 3, - { 5440, 5441 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 4, - { 5433, 5442 }, - -1, - } }, - /* replace1998_1_0_0_0_0_0 -> 5411 in the cache */ - /* replace1998_1_0_0_0_0_1 -> 5435 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 7, 1, - { 5411, 5435 }, - -1, - } }, - /* replace1998_1_0_0_0_1 -> 5437 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 6, 2, - { 5444, 5437 }, - -1, - } }, - /* replace1998_1_0_0_1_0_0_0 -> 5411 in the cache */ - /* replace1998_1_0_0_1_0_0_1 -> 5435 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 9, 1, - { 5411, 5435 }, - -1, - } }, - /* replace1998_1_0_0_1_0_1 -> 5437 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 8, 2, - { 5446, 5437 }, - -1, - } }, - /* replace1998_1_0_0_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 2, - { 5447, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 4, - { 5445, 5448 }, - -1, - } }, - /* replace1998_1_0_1 -> 4612 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 5, 5, - { 5449, 4612 }, - -1, - } }, - /* replace1998_1_1 -> 5441 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 5, - { 5450, 5441 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 10, - { 5443, 5451 }, - -1, - } }, - - /* ('ldexp@64', 'x', 'exp') => ('fmul', ('fmul', 'x', ('pack_64_2x32_split', 0, ('ishl', ('iadd', ('ishr', ('imin', ('imax', 'exp', -2046), 2046), 1), 1023), 20))), ('pack_64_2x32_split', 0, ('ishl', ('iadd', ('isub', ('imin', ('imax', 'exp', -2046), 2046), ('ishr', ('imin', ('imax', 'exp', -2046), 2046), 1)), 1023), 20))) */ - { .variable = { - { nir_search_value_variable, 64 }, - 0, /* x */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search1999_1 -> 5411 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ldexp, - -1, 0, - { 5453, 5411 }, - -1, - } }, - - /* replace1999_0_0 -> 5453 in the cache */ - /* replace1999_0_1_0 -> 128 in the cache */ - /* replace1999_0_1_1_0_0_0_0_0 -> 5411 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0x7fe /* -2046 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 4, 1, - { 5411, 5455 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x7fe /* 2046 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 3, 2, - { 5456, 5457 }, - -1, - } }, - /* replace1999_0_1_1_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 2, - { 5458, 406 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x3ff /* 1023 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 2, 3, - { 5459, 5460 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x14 /* 20 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 3, - { 5461, 5462 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 3, - { 128, 5463 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 4, - { 5453, 5464 }, - -1, - } }, - /* replace1999_1_0 -> 128 in the cache */ - /* replace1999_1_1_0_0_0_0_0 -> 5411 in the cache */ - /* replace1999_1_1_0_0_0_0_1 -> 5455 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 7, 1, - { 5411, 5455 }, - -1, - } }, - /* replace1999_1_1_0_0_0_1 -> 5457 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 6, 2, - { 5466, 5457 }, - -1, - } }, - /* replace1999_1_1_0_0_1_0_0_0 -> 5411 in the cache */ - /* replace1999_1_1_0_0_1_0_0_1 -> 5455 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imax, - 9, 1, - { 5411, 5455 }, - -1, - } }, - /* replace1999_1_1_0_0_1_0_1 -> 5457 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imin, - 8, 2, - { 5468, 5457 }, - -1, - } }, - /* replace1999_1_1_0_0_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 2, - { 5469, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_isub, - -1, 4, - { 5467, 5470 }, - -1, - } }, - /* replace1999_1_1_0_1 -> 5460 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 5, 5, - { 5471, 5460 }, - -1, - } }, - /* replace1999_1_1_1 -> 5462 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 5, - { 5472, 5462 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_pack_64_2x32_split, - -1, 5, - { 128, 5473 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 0, 10, - { 5465, 5474 }, - -1, - } }, - - /* ('ior(many-comm-expr)', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 858993459), 2), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 3435973836), 2)), 1431655765), 1), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 858993459), 2), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 252645135), 4), ('ushr', ('iand', ('ior', ('ishl', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 16711935), 8), ('ushr', ('iand', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 4278255360), 8)), 4042322160), 4)), 3435973836), 2)), 2863311530), 1)) => ('bitfield_reverse', 'x') */ - /* search2000_0_0_0_0_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 5433, 866 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 5433, 866 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 8, 1, - { 5476, 5477 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xff00ff /* 16711935 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 7, 2, - { 5478, 5479 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_0_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5480, 844 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_0_0_0_0_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_0_0_0_0_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_0_0_0_0_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 10, 1, - { 5476, 5477 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xff00ff00 /* 4278255360 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 9, 2, - { 5482, 5483 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_0_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5484, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 6, 5, - { 5481, 5485 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xf0f0f0f /* 252645135 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 5, 6, - { 5486, 5487 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 6, - { 5488, 2366 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 14, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_1_0_0_0_0_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 13, 2, - { 5490, 5479 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_1_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5491, 844 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_0_0_0_0_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 16, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_1_0_0_1_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 15, 2, - { 5493, 5483 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_1_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5494, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 12, 5, - { 5492, 5495 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xf0f0f0f0 /* 4042322160 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 11, 6, - { 5496, 5497 }, - -1, - } }, - /* search2000_0_0_0_0_0_0_1_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 6, - { 5498, 2366 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 4, 13, - { 5489, 5499 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x33333333 /* 858993459 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 14, - { 5500, 5501 }, - -1, - } }, - /* search2000_0_0_0_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 14, - { 5502, 411 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_0_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 22, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_0_0_0_0_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 21, 2, - { 5504, 5479 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5505, 844 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 24, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_0_0_1_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 23, 2, - { 5507, 5483 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5508, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 20, 5, - { 5506, 5509 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_0_1 -> 5487 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 19, 6, - { 5510, 5487 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 6, - { 5511, 2366 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 28, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_0_0_0_0_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 27, 2, - { 5513, 5479 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5514, 844 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_0_0_0_1_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 30, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_0_0_1_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 29, 2, - { 5516, 5483 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5517, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 26, 5, - { 5515, 5518 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_0_1 -> 5497 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 25, 6, - { 5519, 5497 }, - -1, - } }, - /* search2000_0_0_0_1_0_0_1_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 6, - { 5520, 2366 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 18, 13, - { 5512, 5521 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xcccccccc /* 3435973836 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 17, 14, - { 5522, 5523 }, - -1, - } }, - /* search2000_0_0_0_1_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 14, - { 5524, 411 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 2, 29, - { 5503, 5525 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x55555555 /* 1431655765 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 30, - { 5526, 5527 }, - -1, - } }, - /* search2000_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 30, - { 5528, 406 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_0_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 38, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_0_0_0_0_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 37, 2, - { 5530, 5479 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5531, 844 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 40, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_0_0_1_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 39, 2, - { 5533, 5483 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5534, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 36, 5, - { 5532, 5535 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_0_1 -> 5487 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 35, 6, - { 5536, 5487 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 6, - { 5537, 2366 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 44, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_0_0_0_0_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 43, 2, - { 5539, 5479 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5540, 844 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_0_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 46, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_0_0_1_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 45, 2, - { 5542, 5483 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5543, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 42, 5, - { 5541, 5544 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_0_1 -> 5497 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 41, 6, - { 5545, 5497 }, - -1, - } }, - /* search2000_1_0_0_0_0_0_1_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 6, - { 5546, 2366 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 34, 13, - { 5538, 5547 }, - -1, - } }, - /* search2000_1_0_0_0_0_1 -> 5501 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 33, 14, - { 5548, 5501 }, - -1, - } }, - /* search2000_1_0_0_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 14, - { 5549, 411 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_0_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 52, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_0_0_0_0_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 51, 2, - { 5551, 5479 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5552, 844 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 54, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_0_0_1_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 53, 2, - { 5554, 5483 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5555, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 50, 5, - { 5553, 5556 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_0_1 -> 5487 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 49, 6, - { 5557, 5487 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 6, - { 5558, 2366 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 58, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_0_0_0_0_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 57, 2, - { 5560, 5479 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_0_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 2, - { 5561, 844 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2000_1_0_0_1_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 60, 1, - { 5476, 5477 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_0_0_1_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 59, 2, - { 5563, 5483 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_0_0_1_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 2, - { 5564, 844 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 56, 5, - { 5562, 5565 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_0_1 -> 5497 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 55, 6, - { 5566, 5497 }, - -1, - } }, - /* search2000_1_0_0_1_0_0_1_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 6, - { 5567, 2366 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 48, 13, - { 5559, 5568 }, - -1, - } }, - /* search2000_1_0_0_1_0_1 -> 5523 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 47, 14, - { 5569, 5523 }, - -1, - } }, - /* search2000_1_0_0_1_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 14, - { 5570, 411 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 32, 29, - { 5550, 5571 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xaaaaaaaa /* 2863311530 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 31, 30, - { 5572, 5573 }, - -1, - } }, - /* search2000_1_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 30, - { 5574, 406 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 61, - { 5529, 5575 }, - -1, - } }, - - /* replace2000_0 -> 5433 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bitfield_reverse, - -1, 0, - { 5433 }, - -1, - } }, - - /* ('ior(many-comm-expr)', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 4042322160), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 252645135)), 8), 4278255360), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 4042322160), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 3435973836), ('iand', ('ushr', ('ior', ('iand', ('ishl', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 2863311530), ('iand', ('ushr', ('ior', ('ishl', 'x@32', 16), ('ushr', 'x@32', 16)), 1), 1431655765)), 2), 858993459)), 4), 252645135)), 8), 16711935)) => ('bitfield_reverse', 'x') */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_0 -> 5478 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5478, 406 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_0_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 7, 2, - { 5578, 5573 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_1_0_0 -> 5482 in the cache */ - /* search2001_0_0_0_0_0_0_0_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5482, 406 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_0_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 9, 2, - { 5580, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 6, 5, - { 5579, 5581 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_0_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 5, - { 5582, 411 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_0_1 -> 5523 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 5, 6, - { 5583, 5523 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_0_0_0 -> 5490 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5490, 406 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_1_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 13, 2, - { 5585, 5573 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_1_0_0 -> 5493 in the cache */ - /* search2001_0_0_0_0_0_0_1_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5493, 406 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_1_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 15, 2, - { 5587, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 12, 5, - { 5586, 5588 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_1_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 5, - { 5589, 411 }, - -1, - } }, - /* search2001_0_0_0_0_0_0_1_1 -> 5501 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 11, 6, - { 5590, 5501 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 4, 13, - { 5584, 5591 }, - -1, - } }, - /* search2001_0_0_0_0_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 13, - { 5592, 2366 }, - -1, - } }, - /* search2001_0_0_0_0_1 -> 5497 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 14, - { 5593, 5497 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_0_0_0 -> 5504 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5504, 406 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_0_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 21, 2, - { 5595, 5573 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_1_0_0 -> 5507 in the cache */ - /* search2001_0_0_0_1_0_0_0_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5507, 406 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_0_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 23, 2, - { 5597, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 20, 5, - { 5596, 5598 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_0_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 5, - { 5599, 411 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_0_1 -> 5523 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 19, 6, - { 5600, 5523 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_0_0_0 -> 5513 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5513, 406 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_1_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 27, 2, - { 5602, 5573 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_1_0_0 -> 5516 in the cache */ - /* search2001_0_0_0_1_0_0_1_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5516, 406 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_1_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 29, 2, - { 5604, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 26, 5, - { 5603, 5605 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_1_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 5, - { 5606, 411 }, - -1, - } }, - /* search2001_0_0_0_1_0_0_1_1 -> 5501 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 25, 6, - { 5607, 5501 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 18, 13, - { 5601, 5608 }, - -1, - } }, - /* search2001_0_0_0_1_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 13, - { 5609, 2366 }, - -1, - } }, - /* search2001_0_0_0_1_1 -> 5487 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 17, 14, - { 5610, 5487 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 2, 29, - { 5594, 5611 }, - -1, - } }, - /* search2001_0_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 29, - { 5612, 844 }, - -1, - } }, - /* search2001_0_1 -> 5483 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 1, 30, - { 5613, 5483 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_0_0_0 -> 5530 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5530, 406 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_0_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 37, 2, - { 5615, 5573 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_1_0_0 -> 5533 in the cache */ - /* search2001_1_0_0_0_0_0_0_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5533, 406 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_0_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 39, 2, - { 5617, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 36, 5, - { 5616, 5618 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_0_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 5, - { 5619, 411 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_0_1 -> 5523 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 35, 6, - { 5620, 5523 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_0_0_0 -> 5539 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5539, 406 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_1_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 43, 2, - { 5622, 5573 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_1_0_0 -> 5542 in the cache */ - /* search2001_1_0_0_0_0_0_1_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5542, 406 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_1_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 45, 2, - { 5624, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 42, 5, - { 5623, 5625 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_1_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 5, - { 5626, 411 }, - -1, - } }, - /* search2001_1_0_0_0_0_0_1_1 -> 5501 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 41, 6, - { 5627, 5501 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 34, 13, - { 5621, 5628 }, - -1, - } }, - /* search2001_1_0_0_0_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 13, - { 5629, 2366 }, - -1, - } }, - /* search2001_1_0_0_0_1 -> 5497 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 33, 14, - { 5630, 5497 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_0_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_0_0_0 -> 5551 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5551, 406 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_0_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 51, 2, - { 5632, 5573 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_0_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_1_0_0 -> 5554 in the cache */ - /* search2001_1_0_0_1_0_0_0_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5554, 406 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_0_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 53, 2, - { 5634, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 50, 5, - { 5633, 5635 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_0_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 5, - { 5636, 411 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_0_1 -> 5523 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 49, 6, - { 5637, 5523 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_1_0_0_0_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_0_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_0_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_0_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_0_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_0_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_0_0_0 -> 5560 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_0_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 5560, 406 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_1_0_0_0_1 -> 5573 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 57, 2, - { 5639, 5573 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_1_0_0_1_0_0_0_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_1_0_0_0_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_1_0_0_0 -> 5476 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_1_0_0_1_0 -> 5433 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_1_0_0_1_1 -> 866 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_1_0_0_1 -> 5477 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_1_0_0 -> 5563 in the cache */ - /* search2001_1_0_0_1_0_0_1_0_0_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 1, - { 5563, 406 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_1_0_0_1_1 -> 5527 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 59, 2, - { 5641, 5527 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 56, 5, - { 5640, 5642 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_1_0_1 -> 411 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 5, - { 5643, 411 }, - -1, - } }, - /* search2001_1_0_0_1_0_0_1_1 -> 5501 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 55, 6, - { 5644, 5501 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 48, 13, - { 5638, 5645 }, - -1, - } }, - /* search2001_1_0_0_1_0_1 -> 2366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 13, - { 5646, 2366 }, - -1, - } }, - /* search2001_1_0_0_1_1 -> 5487 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 47, 14, - { 5647, 5487 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 32, 29, - { 5631, 5648 }, - -1, - } }, - /* search2001_1_0_1 -> 844 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 29, - { 5649, 844 }, - -1, - } }, - /* search2001_1_1 -> 5479 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 31, 30, - { 5650, 5479 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ior, - 0, 61, - { 5614, 5651 }, - -1, - } }, - - /* replace2001_0 -> 5433 in the cache */ - /* replace2001 -> 5577 in the cache */ - - /* ('bcsel', ('iand', ('ine', ('fabs', 'x'), 2139095040), ('ieq', ('iand', ('pack_half_2x16_rtz_split', 'x', 0), 32767), 31744)), ('iadd', ('pack_half_2x16_rtz_split', 'x', 0), 4294967295), ('pack_half_2x16_rtz_split', 'x', 0)) => ('pack_half_2x16_rtz_split', 'x', 0) */ - /* search2002_0_0_0_0 -> 5433 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 5433 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x7f800000 /* 2139095040 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 5653, 5654 }, - -1, - } }, - /* search2002_0_1_0_0_0 -> 5433 in the cache */ - /* search2002_0_1_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_rtz_split, - -1, 0, - { 5433, 128 }, - -1, - } }, - /* search2002_0_1_0_1 -> 4725 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 5656, 4725 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x7c00 /* 31744 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 2, - { 5657, 5658 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 4, - { 5655, 5659 }, - -1, - } }, - /* search2002_1_0_0 -> 5433 in the cache */ - /* search2002_1_0_1 -> 128 in the cache */ - /* search2002_1_0 -> 5656 in the cache */ - /* search2002_1_1 -> 940 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 4, 1, - { 5656, 940 }, - -1, - } }, - /* search2002_2_0 -> 5433 in the cache */ - /* search2002_2_1 -> 128 in the cache */ - /* search2002_2 -> 5656 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 5, - { 5660, 5661, 5656 }, - -1, - } }, - - /* replace2002_0 -> 5433 in the cache */ - /* replace2002_1 -> 128 in the cache */ - /* replace2002 -> 5656 in the cache */ - - /* ('bcsel', ('iand', ('ine', 'x', 2139095040), ('ieq', ('iand', ('pack_half_2x16_rtz_split', 'x(is_not_negative)', 0), 32767), 31744)), ('iadd', ('pack_half_2x16_rtz_split', 'x(is_not_negative)', 0), 4294967295), ('pack_half_2x16_rtz_split', 'x(is_not_negative)', 0)) => ('pack_half_2x16_rtz_split', 'x', 0) */ - /* search2003_0_0_0 -> 5433 in the cache */ - /* search2003_0_0_1 -> 5654 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 5433, 5654 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* x */ - false, - nir_type_invalid, - 19, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2003_0_1_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_rtz_split, - -1, 0, - { 5664, 128 }, - -1, - } }, - /* search2003_0_1_0_1 -> 4725 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 5665, 4725 }, - -1, - } }, - /* search2003_0_1_1 -> 5658 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 2, - { 5666, 5658 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 4, - { 5663, 5667 }, - -1, - } }, - /* search2003_1_0_0 -> 5664 in the cache */ - /* search2003_1_0_1 -> 128 in the cache */ - /* search2003_1_0 -> 5665 in the cache */ - /* search2003_1_1 -> 940 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 4, 1, - { 5665, 940 }, - -1, - } }, - /* search2003_2_0 -> 5664 in the cache */ - /* search2003_2_1 -> 128 in the cache */ - /* search2003_2 -> 5665 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 5, - { 5668, 5669, 5665 }, - -1, - } }, - - /* replace2003_0 -> 5433 in the cache */ - /* replace2003_1 -> 128 in the cache */ - /* replace2003 -> 5656 in the cache */ - - /* ('bcsel', ('iand', ('ine', ('fabs', 'x'), 2139095040), ('ieq', ('iand', ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0), 32767), 31744)), ('iadd', ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0), 4294967295), ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0)) => ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0) */ - /* search2004_0_0_0_0 -> 5433 in the cache */ - /* search2004_0_0_0 -> 5653 in the cache */ - /* search2004_0_0_1 -> 5654 in the cache */ - /* search2004_0_0 -> 5655 in the cache */ - /* search2004_0_1_0_0_0_0 -> 5433 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 5433 }, - -1, - } }, - /* search2004_0_1_0_0_1 -> 128 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_pack_half_2x16_rtz_split, - -1, 0, - { 5671, 128 }, - -1, - } }, - /* search2004_0_1_0_1 -> 4725 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 3, 1, - { 5672, 4725 }, - -1, - } }, - /* search2004_0_1_1 -> 5658 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 2, - { 5673, 5658 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 4, - { 5655, 5674 }, - -1, - } }, - /* search2004_1_0_0_0 -> 5433 in the cache */ - /* search2004_1_0_0 -> 5671 in the cache */ - /* search2004_1_0_1 -> 128 in the cache */ - /* search2004_1_0 -> 5672 in the cache */ - /* search2004_1_1 -> 940 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 4, 1, - { 5672, 940 }, - -1, - } }, - /* search2004_2_0_0 -> 5433 in the cache */ - /* search2004_2_0 -> 5671 in the cache */ - /* search2004_2_1 -> 128 in the cache */ - /* search2004_2 -> 5672 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 5, - { 5675, 5676, 5672 }, - -1, - } }, - - /* replace2004_0_0 -> 5433 in the cache */ - /* replace2004_0 -> 5671 in the cache */ - /* replace2004_1 -> 128 in the cache */ - /* replace2004 -> 5672 in the cache */ - - /* ('ball_iequal2', ('ieq', 'a', 'b'), -1) => ('ball_iequal2', 'a', 'b') */ - /* search2005_0_0 -> 0 in the cache */ - /* search2005_0_1 -> 3 in the cache */ - /* search2005_0 -> 1093 in the cache */ - { .constant = { - { nir_search_value_constant, 1 }, - nir_type_int, { -0x1 /* -1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal2, - 0, 2, - { 1093, 5678 }, - -1, - } }, - - /* replace2005_0 -> 0 in the cache */ - /* replace2005_1 -> 3 in the cache */ - /* replace2005 -> 2632 in the cache */ - - /* ('ball_iequal2', ('feq', 'a', 'b'), -1) => ('ball_fequal2', 'a', 'b') */ - /* search2006_0_0 -> 0 in the cache */ - /* search2006_0_1 -> 3 in the cache */ - /* search2006_0 -> 1087 in the cache */ - /* search2006_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal2, - 0, 2, - { 1087, 5678 }, - -1, - } }, - - /* replace2006_0 -> 0 in the cache */ - /* replace2006_1 -> 3 in the cache */ - /* replace2006 -> 2702 in the cache */ - - /* ('bany_inequal2', ('ine', 'a', 'b'), 0) => ('bany_inequal2', 'a', 'b') */ - /* search2007_0_0 -> 0 in the cache */ - /* search2007_0_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 0, 3 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 1 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal2, - 0, 2, - { 5681, 5682 }, - -1, - } }, - - /* replace2007_0 -> 0 in the cache */ - /* replace2007_1 -> 3 in the cache */ - /* replace2007 -> 2743 in the cache */ - - /* ('bany_inequal2', ('fneu', 'a', 'b'), 0) => ('bany_fnequal2', 'a', 'b') */ - /* search2008_0_0 -> 0 in the cache */ - /* search2008_0_1 -> 3 in the cache */ - /* search2008_0 -> 4394 in the cache */ - /* search2008_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal2, - 0, 2, - { 4394, 5682 }, - -1, - } }, - - /* replace2008_0 -> 0 in the cache */ - /* replace2008_1 -> 3 in the cache */ - /* replace2008 -> 2784 in the cache */ - - /* ('ball_iequal3', ('ieq', 'a', 'b'), -1) => ('ball_iequal3', 'a', 'b') */ - /* search2009_0_0 -> 0 in the cache */ - /* search2009_0_1 -> 3 in the cache */ - /* search2009_0 -> 1093 in the cache */ - /* search2009_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal3, - 0, 2, - { 1093, 5678 }, - -1, - } }, - - /* replace2009_0 -> 0 in the cache */ - /* replace2009_1 -> 3 in the cache */ - /* replace2009 -> 2638 in the cache */ - - /* ('ball_iequal3', ('feq', 'a', 'b'), -1) => ('ball_fequal3', 'a', 'b') */ - /* search2010_0_0 -> 0 in the cache */ - /* search2010_0_1 -> 3 in the cache */ - /* search2010_0 -> 1087 in the cache */ - /* search2010_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal3, - 0, 2, - { 1087, 5678 }, - -1, - } }, - - /* replace2010_0 -> 0 in the cache */ - /* replace2010_1 -> 3 in the cache */ - /* replace2010 -> 2706 in the cache */ - - /* ('bany_inequal3', ('ine', 'a', 'b'), 0) => ('bany_inequal3', 'a', 'b') */ - /* search2011_0_0 -> 0 in the cache */ - /* search2011_0_1 -> 3 in the cache */ - /* search2011_0 -> 5681 in the cache */ - /* search2011_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal3, - 0, 2, - { 5681, 5682 }, - -1, - } }, - - /* replace2011_0 -> 0 in the cache */ - /* replace2011_1 -> 3 in the cache */ - /* replace2011 -> 2747 in the cache */ - - /* ('bany_inequal3', ('fneu', 'a', 'b'), 0) => ('bany_fnequal3', 'a', 'b') */ - /* search2012_0_0 -> 0 in the cache */ - /* search2012_0_1 -> 3 in the cache */ - /* search2012_0 -> 4394 in the cache */ - /* search2012_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal3, - 0, 2, - { 4394, 5682 }, - -1, - } }, - - /* replace2012_0 -> 0 in the cache */ - /* replace2012_1 -> 3 in the cache */ - /* replace2012 -> 2788 in the cache */ - - /* ('ball_iequal4', ('ieq', 'a', 'b'), -1) => ('ball_iequal4', 'a', 'b') */ - /* search2013_0_0 -> 0 in the cache */ - /* search2013_0_1 -> 3 in the cache */ - /* search2013_0 -> 1093 in the cache */ - /* search2013_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal4, - 0, 2, - { 1093, 5678 }, - -1, - } }, - - /* replace2013_0 -> 0 in the cache */ - /* replace2013_1 -> 3 in the cache */ - /* replace2013 -> 2645 in the cache */ - - /* ('ball_iequal4', ('feq', 'a', 'b'), -1) => ('ball_fequal4', 'a', 'b') */ - /* search2014_0_0 -> 0 in the cache */ - /* search2014_0_1 -> 3 in the cache */ - /* search2014_0 -> 1087 in the cache */ - /* search2014_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal4, - 0, 2, - { 1087, 5678 }, - -1, - } }, - - /* replace2014_0 -> 0 in the cache */ - /* replace2014_1 -> 3 in the cache */ - /* replace2014 -> 2712 in the cache */ - - /* ('bany_inequal4', ('ine', 'a', 'b'), 0) => ('bany_inequal4', 'a', 'b') */ - /* search2015_0_0 -> 0 in the cache */ - /* search2015_0_1 -> 3 in the cache */ - /* search2015_0 -> 5681 in the cache */ - /* search2015_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal4, - 0, 2, - { 5681, 5682 }, - -1, - } }, - - /* replace2015_0 -> 0 in the cache */ - /* replace2015_1 -> 3 in the cache */ - /* replace2015 -> 2753 in the cache */ - - /* ('bany_inequal4', ('fneu', 'a', 'b'), 0) => ('bany_fnequal4', 'a', 'b') */ - /* search2016_0_0 -> 0 in the cache */ - /* search2016_0_1 -> 3 in the cache */ - /* search2016_0 -> 4394 in the cache */ - /* search2016_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal4, - 0, 2, - { 4394, 5682 }, - -1, - } }, - - /* replace2016_0 -> 0 in the cache */ - /* replace2016_1 -> 3 in the cache */ - /* replace2016 -> 2794 in the cache */ - - /* ('ball_iequal8', ('ieq', 'a', 'b'), -1) => ('ball_iequal8', 'a', 'b') */ - /* search2017_0_0 -> 0 in the cache */ - /* search2017_0_1 -> 3 in the cache */ - /* search2017_0 -> 1093 in the cache */ - /* search2017_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal8, - 0, 2, - { 1093, 5678 }, - -1, - } }, - - /* replace2017_0 -> 0 in the cache */ - /* replace2017_1 -> 3 in the cache */ - /* replace2017 -> 2652 in the cache */ - - /* ('ball_iequal8', ('feq', 'a', 'b'), -1) => ('ball_fequal8', 'a', 'b') */ - /* search2018_0_0 -> 0 in the cache */ - /* search2018_0_1 -> 3 in the cache */ - /* search2018_0 -> 1087 in the cache */ - /* search2018_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal8, - 0, 2, - { 1087, 5678 }, - -1, - } }, - - /* replace2018_0 -> 0 in the cache */ - /* replace2018_1 -> 3 in the cache */ - /* replace2018 -> 2717 in the cache */ - - /* ('bany_inequal8', ('ine', 'a', 'b'), 0) => ('bany_inequal8', 'a', 'b') */ - /* search2019_0_0 -> 0 in the cache */ - /* search2019_0_1 -> 3 in the cache */ - /* search2019_0 -> 5681 in the cache */ - /* search2019_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal8, - 0, 2, - { 5681, 5682 }, - -1, - } }, - - /* replace2019_0 -> 0 in the cache */ - /* replace2019_1 -> 3 in the cache */ - /* replace2019 -> 2758 in the cache */ - - /* ('bany_inequal8', ('fneu', 'a', 'b'), 0) => ('bany_fnequal8', 'a', 'b') */ - /* search2020_0_0 -> 0 in the cache */ - /* search2020_0_1 -> 3 in the cache */ - /* search2020_0 -> 4394 in the cache */ - /* search2020_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal8, - 0, 2, - { 4394, 5682 }, - -1, - } }, - - /* replace2020_0 -> 0 in the cache */ - /* replace2020_1 -> 3 in the cache */ - /* replace2020 -> 2799 in the cache */ - - /* ('ball_iequal16', ('ieq', 'a', 'b'), -1) => ('ball_iequal16', 'a', 'b') */ - /* search2021_0_0 -> 0 in the cache */ - /* search2021_0_1 -> 3 in the cache */ - /* search2021_0 -> 1093 in the cache */ - /* search2021_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal16, - 0, 2, - { 1093, 5678 }, - -1, - } }, - - /* replace2021_0 -> 0 in the cache */ - /* replace2021_1 -> 3 in the cache */ - /* replace2021 -> 2669 in the cache */ - - /* ('ball_iequal16', ('feq', 'a', 'b'), -1) => ('ball_fequal16', 'a', 'b') */ - /* search2022_0_0 -> 0 in the cache */ - /* search2022_0_1 -> 3 in the cache */ - /* search2022_0 -> 1087 in the cache */ - /* search2022_1 -> 5678 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ball_iequal16, - 0, 2, - { 1087, 5678 }, - -1, - } }, - - /* replace2022_0 -> 0 in the cache */ - /* replace2022_1 -> 3 in the cache */ - /* replace2022 -> 2726 in the cache */ - - /* ('bany_inequal16', ('ine', 'a', 'b'), 0) => ('bany_inequal16', 'a', 'b') */ - /* search2023_0_0 -> 0 in the cache */ - /* search2023_0_1 -> 3 in the cache */ - /* search2023_0 -> 5681 in the cache */ - /* search2023_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal16, - 0, 2, - { 5681, 5682 }, - -1, - } }, - - /* replace2023_0 -> 0 in the cache */ - /* replace2023_1 -> 3 in the cache */ - /* replace2023 -> 2767 in the cache */ - - /* ('bany_inequal16', ('fneu', 'a', 'b'), 0) => ('bany_fnequal16', 'a', 'b') */ - /* search2024_0_0 -> 0 in the cache */ - /* search2024_0_1 -> 3 in the cache */ - /* search2024_0 -> 4394 in the cache */ - /* search2024_1 -> 5682 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bany_inequal16, - 0, 2, - { 4394, 5682 }, - -1, - } }, - - /* replace2024_0 -> 0 in the cache */ - /* replace2024_1 -> 3 in the cache */ - /* replace2024 -> 2808 in the cache */ - - /* ('iand', ('feq', 'a', 'a'), ('flt', 'a', 'b')) => ('!flt', 'a', 'b') */ - /* search2025_0_0 -> 0 in the cache */ - /* search2025_0_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - -1, 0, - { 0, 0 }, - -1, - } }, - /* search2025_1_0 -> 0 in the cache */ - /* search2025_1_1 -> 3 in the cache */ - /* search2025_1 -> 1062 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5701, 1062 }, - -1, - } }, - - /* replace2025_0 -> 0 in the cache */ - /* replace2025_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('iand', ('feq', 'a', 'a'), ('flt', 'b', 'a')) => ('!flt', 'b', 'a') */ - /* search2026_0_0 -> 32 in the cache */ - /* search2026_0_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - -1, 0, - { 32, 32 }, - -1, - } }, - /* search2026_1_0 -> 2465 in the cache */ - /* search2026_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5704, 5705 }, - -1, - } }, - - /* replace2026_0 -> 2465 in the cache */ - /* replace2026_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 2465, 32 }, - -1, - } }, - - /* ('iand', ('feq', 'a', 'a'), ('fge', 'a', 'b')) => ('!fge', 'a', 'b') */ - /* search2027_0_0 -> 0 in the cache */ - /* search2027_0_1 -> 0 in the cache */ - /* search2027_0 -> 5701 in the cache */ - /* search2027_1_0 -> 0 in the cache */ - /* search2027_1_1 -> 3 in the cache */ - /* search2027_1 -> 1059 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5701, 1059 }, - -1, - } }, - - /* replace2027_0 -> 0 in the cache */ - /* replace2027_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_fge, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('iand', ('feq', 'a', 'a'), ('fge', 'b', 'a')) => ('!fge', 'b', 'a') */ - /* search2028_0_0 -> 32 in the cache */ - /* search2028_0_1 -> 32 in the cache */ - /* search2028_0 -> 5704 in the cache */ - /* search2028_1_0 -> 2465 in the cache */ - /* search2028_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 5704, 5710 }, - -1, - } }, - - /* replace2028_0 -> 2465 in the cache */ - /* replace2028_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_fge, - -1, 0, - { 2465, 32 }, - -1, - } }, - - /* ('iand', ('feq', 'a', 'a'), ('feq', 'a', 'b')) => ('!feq', 'a', 'b') */ - /* search2029_0_0 -> 0 in the cache */ - /* search2029_0_1 -> 0 in the cache */ - /* search2029_0 -> 5701 in the cache */ - /* search2029_1_0 -> 0 in the cache */ - /* search2029_1_1 -> 3 in the cache */ - /* search2029_1 -> 1087 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5701, 1087 }, - -1, - } }, - - /* replace2029_0 -> 0 in the cache */ - /* replace2029_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_feq, - 0, 1, - { 0, 3 }, - -1, - } }, - - /* ('iand', ('feq', 'a', 'a'), ('feq', 'b', 'a')) => ('!feq', 'b', 'a') */ - /* search2030_0_0 -> 32 in the cache */ - /* search2030_0_1 -> 32 in the cache */ - /* search2030_0 -> 5704 in the cache */ - /* search2030_1_0 -> 2465 in the cache */ - /* search2030_1_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 2465, 32 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 5704, 5715 }, - -1, - } }, - - /* replace2030_0 -> 2465 in the cache */ - /* replace2030_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_feq, - 0, 1, - { 2465, 32 }, - -1, - } }, - - /* ('feq', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('feq', 'b', 'd'), ('feq', 'c', 'd')) */ - /* search2031_0_0 -> 770 in the cache */ - /* search2031_0_1 -> 1041 in the cache */ - /* search2031_0_2 -> 3673 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1041, 3673 }, - -1, - } }, - /* search2031_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 5718, 1044 }, - -1, - } }, - - /* replace2031_0 -> 770 in the cache */ - /* replace2031_1_0 -> 156 in the cache */ - /* replace2031_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2031_2_0 -> 158 in the cache */ - /* replace2031_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5720, 5721 }, - -1, - } }, - - /* ('fneu', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('fneu', 'b', 'd'), ('fneu', 'c', 'd')) */ - /* search2032_0_0 -> 770 in the cache */ - /* search2032_0_1 -> 1041 in the cache */ - /* search2032_0_2 -> 3673 in the cache */ - /* search2032_0 -> 5718 in the cache */ - /* search2032_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 5718, 1044 }, - -1, - } }, - - /* replace2032_0 -> 770 in the cache */ - /* replace2032_1_0 -> 156 in the cache */ - /* replace2032_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2032_2_0 -> 158 in the cache */ - /* replace2032_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5724, 5725 }, - -1, - } }, - - /* ('ieq', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ieq', 'b', 'd'), ('ieq', 'c', 'd')) */ - /* search2033_0_0 -> 770 in the cache */ - /* search2033_0_1 -> 1041 in the cache */ - /* search2033_0_2 -> 3673 in the cache */ - /* search2033_0 -> 5718 in the cache */ - /* search2033_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 5718, 1044 }, - -1, - } }, - - /* replace2033_0 -> 770 in the cache */ - /* replace2033_1_0 -> 156 in the cache */ - /* replace2033_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2033_2_0 -> 158 in the cache */ - /* replace2033_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5728, 5729 }, - -1, - } }, - - /* ('ine', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ine', 'b', 'd'), ('ine', 'c', 'd')) */ - /* search2034_0_0 -> 770 in the cache */ - /* search2034_0_1 -> 1041 in the cache */ - /* search2034_0_2 -> 3673 in the cache */ - /* search2034_0 -> 5718 in the cache */ - /* search2034_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 5718, 1044 }, - -1, - } }, - - /* replace2034_0 -> 770 in the cache */ - /* replace2034_1_0 -> 156 in the cache */ - /* replace2034_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2034_2_0 -> 158 in the cache */ - /* replace2034_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5732, 5733 }, - -1, - } }, - - /* ('flt', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('flt', 'b', 'd'), ('flt', 'c', 'd')) */ - /* search2035_0_0 -> 770 in the cache */ - /* search2035_0_1 -> 1041 in the cache */ - /* search2035_0_2 -> 3673 in the cache */ - /* search2035_0 -> 5718 in the cache */ - /* search2035_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5718, 1044 }, - -1, - } }, - - /* replace2035_0 -> 770 in the cache */ - /* replace2035_1_0 -> 156 in the cache */ - /* replace2035_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 156, 159 }, - -1, - } }, - /* replace2035_2_0 -> 158 in the cache */ - /* replace2035_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5736, 5737 }, - -1, - } }, - - /* ('flt', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('flt', 'd', 'b'), ('flt', 'd', 'c')) */ - { .variable = { - { nir_search_value_variable, -4 }, - 0, /* d */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2036_1_0 -> 1189 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 3, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1189, 5740, 5741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5739, 5742 }, - -1, - } }, - - /* replace2036_0 -> 1189 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 0, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5744, 5745 }, - -1, - } }, - /* replace2036_2_0 -> 5744 in the cache */ - /* replace2036_2_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 5744, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1189, 5746, 5747 }, - -1, - } }, - - /* ('fge', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('fge', 'b', 'd'), ('fge', 'c', 'd')) */ - /* search2037_0_0 -> 770 in the cache */ - /* search2037_0_1 -> 1041 in the cache */ - /* search2037_0_2 -> 3673 in the cache */ - /* search2037_0 -> 5718 in the cache */ - /* search2037_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5718, 1044 }, - -1, - } }, - - /* replace2037_0 -> 770 in the cache */ - /* replace2037_1_0 -> 156 in the cache */ - /* replace2037_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 156, 159 }, - -1, - } }, - /* replace2037_2_0 -> 158 in the cache */ - /* replace2037_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5750, 5751 }, - -1, - } }, - - /* ('fge', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('fge', 'd', 'b'), ('fge', 'd', 'c')) */ - /* search2038_0 -> 5739 in the cache */ - /* search2038_1_0 -> 1189 in the cache */ - /* search2038_1_1 -> 5740 in the cache */ - /* search2038_1_2 -> 5741 in the cache */ - /* search2038_1 -> 5742 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5739, 5742 }, - -1, - } }, - - /* replace2038_0 -> 1189 in the cache */ - /* replace2038_1_0 -> 5744 in the cache */ - /* replace2038_1_1 -> 5745 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5744, 5745 }, - -1, - } }, - /* replace2038_2_0 -> 5744 in the cache */ - /* replace2038_2_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 5744, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1189, 5754, 5755 }, - -1, - } }, - - /* ('ilt', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ilt', 'b', 'd'), ('ilt', 'c', 'd')) */ - /* search2039_0_0 -> 770 in the cache */ - /* search2039_0_1 -> 1041 in the cache */ - /* search2039_0_2 -> 3673 in the cache */ - /* search2039_0 -> 5718 in the cache */ - /* search2039_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 5718, 1044 }, - -1, - } }, - - /* replace2039_0 -> 770 in the cache */ - /* replace2039_1_0 -> 156 in the cache */ - /* replace2039_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 156, 159 }, - -1, - } }, - /* replace2039_2_0 -> 158 in the cache */ - /* replace2039_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5758, 5759 }, - -1, - } }, - - /* ('ilt', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('ilt', 'd', 'b'), ('ilt', 'd', 'c')) */ - /* search2040_0 -> 5739 in the cache */ - /* search2040_1_0 -> 1189 in the cache */ - /* search2040_1_1 -> 5740 in the cache */ - /* search2040_1_2 -> 5741 in the cache */ - /* search2040_1 -> 5742 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 5739, 5742 }, - -1, - } }, - - /* replace2040_0 -> 1189 in the cache */ - /* replace2040_1_0 -> 5744 in the cache */ - /* replace2040_1_1 -> 5745 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 5744, 5745 }, - -1, - } }, - /* replace2040_2_0 -> 5744 in the cache */ - /* replace2040_2_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 5744, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1189, 5762, 5763 }, - -1, - } }, - - /* ('ige', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ige', 'b', 'd'), ('ige', 'c', 'd')) */ - /* search2041_0_0 -> 770 in the cache */ - /* search2041_0_1 -> 1041 in the cache */ - /* search2041_0_2 -> 3673 in the cache */ - /* search2041_0 -> 5718 in the cache */ - /* search2041_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 5718, 1044 }, - -1, - } }, - - /* replace2041_0 -> 770 in the cache */ - /* replace2041_1_0 -> 156 in the cache */ - /* replace2041_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 156, 159 }, - -1, - } }, - /* replace2041_2_0 -> 158 in the cache */ - /* replace2041_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5766, 5767 }, - -1, - } }, - - /* ('ige', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('ige', 'd', 'b'), ('ige', 'd', 'c')) */ - /* search2042_0 -> 5739 in the cache */ - /* search2042_1_0 -> 1189 in the cache */ - /* search2042_1_1 -> 5740 in the cache */ - /* search2042_1_2 -> 5741 in the cache */ - /* search2042_1 -> 5742 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 5739, 5742 }, - -1, - } }, - - /* replace2042_0 -> 1189 in the cache */ - /* replace2042_1_0 -> 5744 in the cache */ - /* replace2042_1_1 -> 5745 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 5744, 5745 }, - -1, - } }, - /* replace2042_2_0 -> 5744 in the cache */ - /* replace2042_2_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 5744, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1189, 5770, 5771 }, - -1, - } }, - - /* ('ult', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('ult', 'b', 'd'), ('ult', 'c', 'd')) */ - /* search2043_0_0 -> 770 in the cache */ - /* search2043_0_1 -> 1041 in the cache */ - /* search2043_0_2 -> 3673 in the cache */ - /* search2043_0 -> 5718 in the cache */ - /* search2043_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5718, 1044 }, - -1, - } }, - - /* replace2043_0 -> 770 in the cache */ - /* replace2043_1_0 -> 156 in the cache */ - /* replace2043_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 156, 159 }, - -1, - } }, - /* replace2043_2_0 -> 158 in the cache */ - /* replace2043_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5774, 5775 }, - -1, - } }, - - /* ('ult', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('ult', 'd', 'b'), ('ult', 'd', 'c')) */ - /* search2044_0 -> 5739 in the cache */ - /* search2044_1_0 -> 1189 in the cache */ - /* search2044_1_1 -> 5740 in the cache */ - /* search2044_1_2 -> 5741 in the cache */ - /* search2044_1 -> 5742 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5739, 5742 }, - -1, - } }, - - /* replace2044_0 -> 1189 in the cache */ - /* replace2044_1_0 -> 5744 in the cache */ - /* replace2044_1_1 -> 5745 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5744, 5745 }, - -1, - } }, - /* replace2044_2_0 -> 5744 in the cache */ - /* replace2044_2_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 0, - { 5744, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1189, 5778, 5779 }, - -1, - } }, - - /* ('uge', ('bcsel', 'a', '#b', '#c'), '#d') => ('bcsel', 'a', ('uge', 'b', 'd'), ('uge', 'c', 'd')) */ - /* search2045_0_0 -> 770 in the cache */ - /* search2045_0_1 -> 1041 in the cache */ - /* search2045_0_2 -> 3673 in the cache */ - /* search2045_0 -> 5718 in the cache */ - /* search2045_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5718, 1044 }, - -1, - } }, - - /* replace2045_0 -> 770 in the cache */ - /* replace2045_1_0 -> 156 in the cache */ - /* replace2045_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 156, 159 }, - -1, - } }, - /* replace2045_2_0 -> 158 in the cache */ - /* replace2045_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5782, 5783 }, - -1, - } }, - - /* ('uge', '#d', ('bcsel', 'a', '#b', '#c')) => ('bcsel', 'a', ('uge', 'd', 'b'), ('uge', 'd', 'c')) */ - /* search2046_0 -> 5739 in the cache */ - /* search2046_1_0 -> 1189 in the cache */ - /* search2046_1_1 -> 5740 in the cache */ - /* search2046_1_2 -> 5741 in the cache */ - /* search2046_1 -> 5742 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5739, 5742 }, - -1, - } }, - - /* replace2046_0 -> 1189 in the cache */ - /* replace2046_1_0 -> 5744 in the cache */ - /* replace2046_1_1 -> 5745 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5744, 5745 }, - -1, - } }, - /* replace2046_2_0 -> 5744 in the cache */ - /* replace2046_2_1 -> 1741 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_uge, - -1, 0, - { 5744, 1741 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 1189, 5786, 5787 }, - -1, - } }, - - /* ('fadd', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('fadd', 'b', 'd'), ('fadd', 'c', 'd')) */ - /* search2047_0_0 -> 770 in the cache */ - /* search2047_0_1 -> 1041 in the cache */ - /* search2047_0_2 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 1041, 158 }, - 0, - } }, - /* search2047_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 5789, 1044 }, - -1, - } }, - - /* replace2047_0 -> 770 in the cache */ - /* replace2047_1_0 -> 156 in the cache */ - /* replace2047_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2047_2_0 -> 158 in the cache */ - /* replace2047_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5791, 5792 }, - -1, - } }, - - /* ('fmul', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('fmul', 'b', 'd'), ('fmul', 'c', 'd')) */ - /* search2048_0_0 -> 770 in the cache */ - /* search2048_0_1 -> 1041 in the cache */ - /* search2048_0_2 -> 158 in the cache */ - /* search2048_0 -> 5789 in the cache */ - /* search2048_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 5789, 1044 }, - -1, - } }, - - /* replace2048_0 -> 770 in the cache */ - /* replace2048_1_0 -> 156 in the cache */ - /* replace2048_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2048_2_0 -> 158 in the cache */ - /* replace2048_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5795, 5796 }, - -1, - } }, - - /* ('fmulz', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('fmulz', 'b', 'd'), ('fmulz', 'c', 'd')) */ - /* search2049_0_0 -> 770 in the cache */ - /* search2049_0_1 -> 33 in the cache */ - /* search2049_0_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 33, 141 }, - 0, - } }, - /* search2049_1 -> 321 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 5798, 321 }, - -1, - } }, - - /* replace2049_0 -> 770 in the cache */ - /* replace2049_1_0 -> 36 in the cache */ - /* replace2049_1_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 36, 169 }, - -1, - } }, - /* replace2049_2_0 -> 141 in the cache */ - /* replace2049_2_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 141, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5800, 5801 }, - -1, - } }, - - /* ('iadd', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('iadd', 'b', 'd'), ('iadd', 'c', 'd')) */ - /* search2050_0_0 -> 770 in the cache */ - /* search2050_0_1 -> 1041 in the cache */ - /* search2050_0_2 -> 158 in the cache */ - /* search2050_0 -> 5789 in the cache */ - /* search2050_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 5789, 1044 }, - -1, - } }, - - /* replace2050_0 -> 770 in the cache */ - /* replace2050_1_0 -> 156 in the cache */ - /* replace2050_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2050_2_0 -> 158 in the cache */ - /* replace2050_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5804, 5805 }, - -1, - } }, - - /* ('imul', ('bcsel(is_used_once)', 'a', '#b', 'c'), '#d') => ('bcsel', 'a', ('imul', 'b', 'd'), ('imul', 'c', 'd')) */ - /* search2051_0_0 -> 770 in the cache */ - /* search2051_0_1 -> 1041 in the cache */ - /* search2051_0_2 -> 158 in the cache */ - /* search2051_0 -> 5789 in the cache */ - /* search2051_1 -> 1044 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 5789, 1044 }, - -1, - } }, - - /* replace2051_0 -> 770 in the cache */ - /* replace2051_1_0 -> 156 in the cache */ - /* replace2051_1_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 156, 159 }, - -1, - } }, - /* replace2051_2_0 -> 158 in the cache */ - /* replace2051_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5808, 5809 }, - -1, - } }, - - /* ('fddx', 'a') => 0.0 */ - /* search2052_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fddx, - -1, 0, - { 32 }, - -1, - } }, - - /* replace2052 -> 117 in the cache */ - - /* ('fddx_fine', 'a') => 0.0 */ - /* search2053_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fddx_fine, - -1, 0, - { 32 }, - -1, - } }, - - /* replace2053 -> 117 in the cache */ - - /* ('fddx_coarse', 'a') => 0.0 */ - /* search2054_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fddx_coarse, - -1, 0, - { 32 }, - -1, - } }, - - /* replace2054 -> 117 in the cache */ - - /* ('fddy', 'a') => 0.0 */ - /* search2055_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fddy, - -1, 0, - { 32 }, - -1, - } }, - - /* replace2055 -> 117 in the cache */ - - /* ('fddy_fine', 'a') => 0.0 */ - /* search2056_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fddy_fine, - -1, 0, - { 32 }, - -1, - } }, - - /* replace2056 -> 117 in the cache */ - - /* ('fddy_coarse', 'a') => 0.0 */ - /* search2057_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fddy_coarse, - -1, 0, - { 32 }, - -1, - } }, - - /* replace2057 -> 117 in the cache */ - - /* ('umul_low', '#a(is_lower_half_zero)', 'b') => 0 */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - true, - nir_type_invalid, - 20, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2058_1 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umul_low, - 0, 1, - { 5817, 36 }, - -1, - } }, - - /* replace2058 -> 128 in the cache */ - - /* ('imadsh_mix16', '#a@32(is_lower_half_zero)', 'b@32', 'c@32') => c */ - /* search2059_0 -> 5817 in the cache */ - /* search2059_1 -> 36 in the cache */ - /* search2059_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imadsh_mix16, - -1, 0, - { 5817, 36, 141 }, - -1, - } }, - - /* replace2059 -> 141 in the cache */ - - /* ('imadsh_mix16', 'a@32', '#b@32(is_upper_half_zero)', 'c@32') => c */ - /* search2060_0 -> 16 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - 21, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2060_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_imadsh_mix16, - -1, 0, - { 16, 5820, 141 }, - -1, - } }, - - /* replace2060 -> 141 in the cache */ - - /* ('bcsel', 'a', ('flrp(is_used_once)', 'b', 'c', 'd'), ('flrp', 'b', 'c', 'e')) => ('flrp', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search2061_0 -> 770 in the cache */ - /* search2061_1_0 -> 762 in the cache */ - /* search2061_1_1 -> 763 in the cache */ - /* search2061_1_2 -> 772 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 763, 772 }, - 0, - } }, - /* search2061_2_0 -> 762 in the cache */ - /* search2061_2_1 -> 763 in the cache */ - /* search2061_2_2 -> 774 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 763, 774 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5822, 5823 }, - -1, - } }, - - /* replace2061_0 -> 762 in the cache */ - /* replace2061_1 -> 763 in the cache */ - /* replace2061_2_0 -> 770 in the cache */ - /* replace2061_2_1 -> 772 in the cache */ - /* replace2061_2_2 -> 774 in the cache */ - /* replace2061_2 -> 1330 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 763, 1330 }, - -1, - } }, - - /* ('bcsel', 'a', ('flrp', 'b', 'c', 'd'), ('flrp(is_used_once)', 'b', 'c', 'e')) => ('flrp', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search2062_0 -> 770 in the cache */ - /* search2062_1_0 -> 762 in the cache */ - /* search2062_1_1 -> 763 in the cache */ - /* search2062_1_2 -> 772 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 763, 772 }, - -1, - } }, - /* search2062_2_0 -> 762 in the cache */ - /* search2062_2_1 -> 763 in the cache */ - /* search2062_2_2 -> 774 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 763, 774 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5826, 5827 }, - -1, - } }, - - /* replace2062_0 -> 762 in the cache */ - /* replace2062_1 -> 763 in the cache */ - /* replace2062_2_0 -> 770 in the cache */ - /* replace2062_2_1 -> 772 in the cache */ - /* replace2062_2_2 -> 774 in the cache */ - /* replace2062_2 -> 1330 in the cache */ - /* replace2062 -> 5825 in the cache */ - - /* ('bcsel', 'a', ('flrp(is_used_once)', 'b', 'c', 'd'), ('flrp', 'b', 'e', 'd')) => ('flrp', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search2063_0 -> 770 in the cache */ - /* search2063_1_0 -> 762 in the cache */ - /* search2063_1_1 -> 763 in the cache */ - /* search2063_1_2 -> 772 in the cache */ - /* search2063_1 -> 5822 in the cache */ - /* search2063_2_0 -> 762 in the cache */ - /* search2063_2_1 -> 774 in the cache */ - /* search2063_2_2 -> 772 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 774, 772 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5822, 5829 }, - -1, - } }, - - /* replace2063_0 -> 762 in the cache */ - /* replace2063_1_0 -> 770 in the cache */ - /* replace2063_1_1 -> 763 in the cache */ - /* replace2063_1_2 -> 774 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 763, 774 }, - -1, - } }, - /* replace2063_2 -> 772 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 5831, 772 }, - -1, - } }, - - /* ('bcsel', 'a', ('flrp', 'b', 'c', 'd'), ('flrp(is_used_once)', 'b', 'e', 'd')) => ('flrp', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search2064_0 -> 770 in the cache */ - /* search2064_1_0 -> 762 in the cache */ - /* search2064_1_1 -> 763 in the cache */ - /* search2064_1_2 -> 772 in the cache */ - /* search2064_1 -> 5826 in the cache */ - /* search2064_2_0 -> 762 in the cache */ - /* search2064_2_1 -> 774 in the cache */ - /* search2064_2_2 -> 772 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 762, 774, 772 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5826, 5833 }, - -1, - } }, - - /* replace2064_0 -> 762 in the cache */ - /* replace2064_1_0 -> 770 in the cache */ - /* replace2064_1_1 -> 763 in the cache */ - /* replace2064_1_2 -> 774 in the cache */ - /* replace2064_1 -> 5831 in the cache */ - /* replace2064_2 -> 772 in the cache */ - /* replace2064 -> 5832 in the cache */ - - /* ('bcsel', 'a', ('flrp(is_used_once)', 'b', 'c', 'd'), ('flrp', 'e', 'c', 'd')) => ('flrp', ('bcsel', 'a', 'b', 'e'), 'c', 'd') */ - /* search2065_0 -> 770 in the cache */ - /* search2065_1_0 -> 156 in the cache */ - /* search2065_1_1 -> 158 in the cache */ - /* search2065_1_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 156, 158, 159 }, - 0, - } }, - /* search2065_2_0 -> 1336 in the cache */ - /* search2065_2_1 -> 158 in the cache */ - /* search2065_2_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 1336, 158, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 5835, 5836 }, - -1, - } }, - - /* replace2065_0_0 -> 770 in the cache */ - /* replace2065_0_1 -> 156 in the cache */ - /* replace2065_0_2 -> 1336 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 156, 1336 }, - -1, - } }, - /* replace2065_1 -> 158 in the cache */ - /* replace2065_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 5838, 158, 159 }, - -1, - } }, - - /* ('bcsel', 'a', ('flrp', 'b', 'c', 'd'), ('flrp(is_used_once)', 'e', 'c', 'd')) => ('flrp', ('bcsel', 'a', 'b', 'e'), 'c', 'd') */ - /* search2066_0 -> 770 in the cache */ - /* search2066_1_0 -> 156 in the cache */ - /* search2066_1_1 -> 158 in the cache */ - /* search2066_1_2 -> 159 in the cache */ - /* search2066_1 -> 692 in the cache */ - /* search2066_2_0 -> 1336 in the cache */ - /* search2066_2_1 -> 158 in the cache */ - /* search2066_2_2 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 1336, 158, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 692, 5840 }, - -1, - } }, - - /* replace2066_0_0 -> 770 in the cache */ - /* replace2066_0_1 -> 156 in the cache */ - /* replace2066_0_2 -> 1336 in the cache */ - /* replace2066_0 -> 5838 in the cache */ - /* replace2066_1 -> 158 in the cache */ - /* replace2066_2 -> 159 in the cache */ - /* replace2066 -> 5839 in the cache */ - - /* ('bcsel', 'a', ('fmulz(is_used_once)', 'b', 'c'), ('fmulz', 'b', 'd(is_not_const)')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2067_0 -> 770 in the cache */ - /* search2067_1_0 -> 36 in the cache */ - /* search2067_1_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 36, 141 }, - 0, - } }, - /* search2067_2_0 -> 36 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 3, /* d */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 36, 5843 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5842, 5844 }, - -1, - } }, - - /* replace2067_0 -> 36 in the cache */ - /* replace2067_1_0 -> 770 in the cache */ - /* replace2067_1_1 -> 141 in the cache */ - /* replace2067_1_2 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 141, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 36, 5846 }, - -1, - } }, - - /* ('bcsel', 'a', ('fmulz(is_used_once)', 'b', 'c(is_not_const)'), ('fmulz', 'b', 'd')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2068_0 -> 770 in the cache */ - /* search2068_1_0 -> 36 in the cache */ - /* search2068_1_1 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 36, 357 }, - 0, - } }, - /* search2068_2_0 -> 36 in the cache */ - /* search2068_2_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 36, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5848, 5849 }, - -1, - } }, - - /* replace2068_0 -> 36 in the cache */ - /* replace2068_1_0 -> 770 in the cache */ - /* replace2068_1_1 -> 141 in the cache */ - /* replace2068_1_2 -> 169 in the cache */ - /* replace2068_1 -> 5846 in the cache */ - /* replace2068 -> 5847 in the cache */ - - /* ('bcsel', 'a', ('fmulz', 'b', 'c(is_not_const)'), ('fmulz(is_used_once)', 'b', 'd')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2069_0 -> 770 in the cache */ - /* search2069_1_0 -> 36 in the cache */ - /* search2069_1_1 -> 357 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 36, 357 }, - -1, - } }, - /* search2069_2_0 -> 36 in the cache */ - /* search2069_2_1 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 36, 169 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5851, 5852 }, - -1, - } }, - - /* replace2069_0 -> 36 in the cache */ - /* replace2069_1_0 -> 770 in the cache */ - /* replace2069_1_1 -> 141 in the cache */ - /* replace2069_1_2 -> 169 in the cache */ - /* replace2069_1 -> 5846 in the cache */ - /* replace2069 -> 5847 in the cache */ - - /* ('bcsel', 'a', ('fmulz', 'b', 'c'), ('fmulz(is_used_once)', 'b', 'd(is_not_const)')) => ('fmulz', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2070_0 -> 770 in the cache */ - /* search2070_1_0 -> 36 in the cache */ - /* search2070_1_1 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 0, 1, - { 36, 141 }, - -1, - } }, - /* search2070_2_0 -> 36 in the cache */ - /* search2070_2_1 -> 5843 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 36, 5843 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5854, 5855 }, - -1, - } }, - - /* replace2070_0 -> 36 in the cache */ - /* replace2070_1_0 -> 770 in the cache */ - /* replace2070_1_1 -> 141 in the cache */ - /* replace2070_1_2 -> 169 in the cache */ - /* replace2070_1 -> 5846 in the cache */ - /* replace2070 -> 5847 in the cache */ - - /* ('bcsel', 'a', ('fmul(is_used_once)', 'b', 'c'), ('fmul', 'b', 'd(is_not_const)')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2071_0 -> 770 in the cache */ - /* search2071_1_0 -> 156 in the cache */ - /* search2071_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2071_2_0 -> 156 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 3, /* d */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5857, 5859 }, - -1, - } }, - - /* replace2071_0 -> 156 in the cache */ - /* replace2071_1_0 -> 770 in the cache */ - /* replace2071_1_1 -> 158 in the cache */ - /* replace2071_1_2 -> 159 in the cache */ - /* replace2071_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('fmul(is_used_once)', 'b', 'c(is_not_const)'), ('fmul', 'b', 'd')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2072_0 -> 770 in the cache */ - /* search2072_1_0 -> 156 in the cache */ - /* search2072_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2072_2_0 -> 156 in the cache */ - /* search2072_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5862, 5863 }, - -1, - } }, - - /* replace2072_0 -> 156 in the cache */ - /* replace2072_1_0 -> 770 in the cache */ - /* replace2072_1_1 -> 158 in the cache */ - /* replace2072_1_2 -> 159 in the cache */ - /* replace2072_1 -> 1325 in the cache */ - /* replace2072 -> 5861 in the cache */ - - /* ('bcsel', 'a', ('fmul', 'b', 'c(is_not_const)'), ('fmul(is_used_once)', 'b', 'd')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2073_0 -> 770 in the cache */ - /* search2073_1_0 -> 156 in the cache */ - /* search2073_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2073_2_0 -> 156 in the cache */ - /* search2073_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5865, 5866 }, - -1, - } }, - - /* replace2073_0 -> 156 in the cache */ - /* replace2073_1_0 -> 770 in the cache */ - /* replace2073_1_1 -> 158 in the cache */ - /* replace2073_1_2 -> 159 in the cache */ - /* replace2073_1 -> 1325 in the cache */ - /* replace2073 -> 5861 in the cache */ - - /* ('bcsel', 'a', ('fmul', 'b', 'c'), ('fmul(is_used_once)', 'b', 'd(is_not_const)')) => ('fmul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2074_0 -> 770 in the cache */ - /* search2074_1_0 -> 156 in the cache */ - /* search2074_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2074_2_0 -> 156 in the cache */ - /* search2074_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5868, 5869 }, - -1, - } }, - - /* replace2074_0 -> 156 in the cache */ - /* replace2074_1_0 -> 770 in the cache */ - /* replace2074_1_1 -> 158 in the cache */ - /* replace2074_1_2 -> 159 in the cache */ - /* replace2074_1 -> 1325 in the cache */ - /* replace2074 -> 5861 in the cache */ - - /* ('bcsel', 'a', ('iadd(is_used_once)', 'b', 'c'), ('iadd', 'b', 'd(is_not_const)')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2075_0 -> 770 in the cache */ - /* search2075_1_0 -> 156 in the cache */ - /* search2075_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2075_2_0 -> 156 in the cache */ - /* search2075_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5871, 5872 }, - -1, - } }, - - /* replace2075_0 -> 156 in the cache */ - /* replace2075_1_0 -> 770 in the cache */ - /* replace2075_1_1 -> 158 in the cache */ - /* replace2075_1_2 -> 159 in the cache */ - /* replace2075_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('iadd(is_used_once)', 'b', 'c(is_not_const)'), ('iadd', 'b', 'd')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2076_0 -> 770 in the cache */ - /* search2076_1_0 -> 156 in the cache */ - /* search2076_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2076_2_0 -> 156 in the cache */ - /* search2076_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5875, 5876 }, - -1, - } }, - - /* replace2076_0 -> 156 in the cache */ - /* replace2076_1_0 -> 770 in the cache */ - /* replace2076_1_1 -> 158 in the cache */ - /* replace2076_1_2 -> 159 in the cache */ - /* replace2076_1 -> 1325 in the cache */ - /* replace2076 -> 5874 in the cache */ - - /* ('bcsel', 'a', ('iadd', 'b', 'c(is_not_const)'), ('iadd(is_used_once)', 'b', 'd')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2077_0 -> 770 in the cache */ - /* search2077_1_0 -> 156 in the cache */ - /* search2077_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2077_2_0 -> 156 in the cache */ - /* search2077_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5878, 5879 }, - -1, - } }, - - /* replace2077_0 -> 156 in the cache */ - /* replace2077_1_0 -> 770 in the cache */ - /* replace2077_1_1 -> 158 in the cache */ - /* replace2077_1_2 -> 159 in the cache */ - /* replace2077_1 -> 1325 in the cache */ - /* replace2077 -> 5874 in the cache */ - - /* ('bcsel', 'a', ('iadd', 'b', 'c'), ('iadd(is_used_once)', 'b', 'd(is_not_const)')) => ('iadd', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2078_0 -> 770 in the cache */ - /* search2078_1_0 -> 156 in the cache */ - /* search2078_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2078_2_0 -> 156 in the cache */ - /* search2078_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5881, 5882 }, - -1, - } }, - - /* replace2078_0 -> 156 in the cache */ - /* replace2078_1_0 -> 770 in the cache */ - /* replace2078_1_1 -> 158 in the cache */ - /* replace2078_1_2 -> 159 in the cache */ - /* replace2078_1 -> 1325 in the cache */ - /* replace2078 -> 5874 in the cache */ - - /* ('bcsel', 'a', ('imul(is_used_once)', 'b', 'c'), ('imul', 'b', 'd(is_not_const)')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2079_0 -> 770 in the cache */ - /* search2079_1_0 -> 156 in the cache */ - /* search2079_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2079_2_0 -> 156 in the cache */ - /* search2079_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5884, 5885 }, - -1, - } }, - - /* replace2079_0 -> 156 in the cache */ - /* replace2079_1_0 -> 770 in the cache */ - /* replace2079_1_1 -> 158 in the cache */ - /* replace2079_1_2 -> 159 in the cache */ - /* replace2079_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('imul(is_used_once)', 'b', 'c(is_not_const)'), ('imul', 'b', 'd')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2080_0 -> 770 in the cache */ - /* search2080_1_0 -> 156 in the cache */ - /* search2080_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2080_2_0 -> 156 in the cache */ - /* search2080_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5888, 5889 }, - -1, - } }, - - /* replace2080_0 -> 156 in the cache */ - /* replace2080_1_0 -> 770 in the cache */ - /* replace2080_1_1 -> 158 in the cache */ - /* replace2080_1_2 -> 159 in the cache */ - /* replace2080_1 -> 1325 in the cache */ - /* replace2080 -> 5887 in the cache */ - - /* ('bcsel', 'a', ('imul', 'b', 'c(is_not_const)'), ('imul(is_used_once)', 'b', 'd')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2081_0 -> 770 in the cache */ - /* search2081_1_0 -> 156 in the cache */ - /* search2081_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2081_2_0 -> 156 in the cache */ - /* search2081_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5891, 5892 }, - -1, - } }, - - /* replace2081_0 -> 156 in the cache */ - /* replace2081_1_0 -> 770 in the cache */ - /* replace2081_1_1 -> 158 in the cache */ - /* replace2081_1_2 -> 159 in the cache */ - /* replace2081_1 -> 1325 in the cache */ - /* replace2081 -> 5887 in the cache */ - - /* ('bcsel', 'a', ('imul', 'b', 'c'), ('imul(is_used_once)', 'b', 'd(is_not_const)')) => ('imul', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2082_0 -> 770 in the cache */ - /* search2082_1_0 -> 156 in the cache */ - /* search2082_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2082_2_0 -> 156 in the cache */ - /* search2082_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5894, 5895 }, - -1, - } }, - - /* replace2082_0 -> 156 in the cache */ - /* replace2082_1_0 -> 770 in the cache */ - /* replace2082_1_1 -> 158 in the cache */ - /* replace2082_1_2 -> 159 in the cache */ - /* replace2082_1 -> 1325 in the cache */ - /* replace2082 -> 5887 in the cache */ - - /* ('bcsel', 'a', ('iand(is_used_once)', 'b', 'c'), ('iand', 'b', 'd(is_not_const)')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2083_0 -> 770 in the cache */ - /* search2083_1_0 -> 156 in the cache */ - /* search2083_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2083_2_0 -> 156 in the cache */ - /* search2083_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5897, 5898 }, - -1, - } }, - - /* replace2083_0 -> 156 in the cache */ - /* replace2083_1_0 -> 770 in the cache */ - /* replace2083_1_1 -> 158 in the cache */ - /* replace2083_1_2 -> 159 in the cache */ - /* replace2083_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('iand(is_used_once)', 'b', 'c(is_not_const)'), ('iand', 'b', 'd')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2084_0 -> 770 in the cache */ - /* search2084_1_0 -> 156 in the cache */ - /* search2084_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2084_2_0 -> 156 in the cache */ - /* search2084_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5901, 5902 }, - -1, - } }, - - /* replace2084_0 -> 156 in the cache */ - /* replace2084_1_0 -> 770 in the cache */ - /* replace2084_1_1 -> 158 in the cache */ - /* replace2084_1_2 -> 159 in the cache */ - /* replace2084_1 -> 1325 in the cache */ - /* replace2084 -> 5900 in the cache */ - - /* ('bcsel', 'a', ('iand', 'b', 'c(is_not_const)'), ('iand(is_used_once)', 'b', 'd')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2085_0 -> 770 in the cache */ - /* search2085_1_0 -> 156 in the cache */ - /* search2085_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2085_2_0 -> 156 in the cache */ - /* search2085_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5904, 5905 }, - -1, - } }, - - /* replace2085_0 -> 156 in the cache */ - /* replace2085_1_0 -> 770 in the cache */ - /* replace2085_1_1 -> 158 in the cache */ - /* replace2085_1_2 -> 159 in the cache */ - /* replace2085_1 -> 1325 in the cache */ - /* replace2085 -> 5900 in the cache */ - - /* ('bcsel', 'a', ('iand', 'b', 'c'), ('iand(is_used_once)', 'b', 'd(is_not_const)')) => ('iand', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2086_0 -> 770 in the cache */ - /* search2086_1_0 -> 156 in the cache */ - /* search2086_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2086_2_0 -> 156 in the cache */ - /* search2086_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_iand, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5907, 5908 }, - -1, - } }, - - /* replace2086_0 -> 156 in the cache */ - /* replace2086_1_0 -> 770 in the cache */ - /* replace2086_1_1 -> 158 in the cache */ - /* replace2086_1_2 -> 159 in the cache */ - /* replace2086_1 -> 1325 in the cache */ - /* replace2086 -> 5900 in the cache */ - - /* ('bcsel', 'a', ('ior(is_used_once)', 'b', 'c'), ('ior', 'b', 'd(is_not_const)')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2087_0 -> 770 in the cache */ - /* search2087_1_0 -> 156 in the cache */ - /* search2087_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2087_2_0 -> 156 in the cache */ - /* search2087_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5910, 5911 }, - -1, - } }, - - /* replace2087_0 -> 156 in the cache */ - /* replace2087_1_0 -> 770 in the cache */ - /* replace2087_1_1 -> 158 in the cache */ - /* replace2087_1_2 -> 159 in the cache */ - /* replace2087_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('ior(is_used_once)', 'b', 'c(is_not_const)'), ('ior', 'b', 'd')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2088_0 -> 770 in the cache */ - /* search2088_1_0 -> 156 in the cache */ - /* search2088_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2088_2_0 -> 156 in the cache */ - /* search2088_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5914, 5915 }, - -1, - } }, - - /* replace2088_0 -> 156 in the cache */ - /* replace2088_1_0 -> 770 in the cache */ - /* replace2088_1_1 -> 158 in the cache */ - /* replace2088_1_2 -> 159 in the cache */ - /* replace2088_1 -> 1325 in the cache */ - /* replace2088 -> 5913 in the cache */ - - /* ('bcsel', 'a', ('ior', 'b', 'c(is_not_const)'), ('ior(is_used_once)', 'b', 'd')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2089_0 -> 770 in the cache */ - /* search2089_1_0 -> 156 in the cache */ - /* search2089_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2089_2_0 -> 156 in the cache */ - /* search2089_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5917, 5918 }, - -1, - } }, - - /* replace2089_0 -> 156 in the cache */ - /* replace2089_1_0 -> 770 in the cache */ - /* replace2089_1_1 -> 158 in the cache */ - /* replace2089_1_2 -> 159 in the cache */ - /* replace2089_1 -> 1325 in the cache */ - /* replace2089 -> 5913 in the cache */ - - /* ('bcsel', 'a', ('ior', 'b', 'c'), ('ior(is_used_once)', 'b', 'd(is_not_const)')) => ('ior', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2090_0 -> 770 in the cache */ - /* search2090_1_0 -> 156 in the cache */ - /* search2090_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2090_2_0 -> 156 in the cache */ - /* search2090_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ior, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5920, 5921 }, - -1, - } }, - - /* replace2090_0 -> 156 in the cache */ - /* replace2090_1_0 -> 770 in the cache */ - /* replace2090_1_1 -> 158 in the cache */ - /* replace2090_1_2 -> 159 in the cache */ - /* replace2090_1 -> 1325 in the cache */ - /* replace2090 -> 5913 in the cache */ - - /* ('bcsel', 'a', ('ixor(is_used_once)', 'b', 'c'), ('ixor', 'b', 'd(is_not_const)')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2091_0 -> 770 in the cache */ - /* search2091_1_0 -> 156 in the cache */ - /* search2091_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2091_2_0 -> 156 in the cache */ - /* search2091_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5923, 5924 }, - -1, - } }, - - /* replace2091_0 -> 156 in the cache */ - /* replace2091_1_0 -> 770 in the cache */ - /* replace2091_1_1 -> 158 in the cache */ - /* replace2091_1_2 -> 159 in the cache */ - /* replace2091_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('ixor(is_used_once)', 'b', 'c(is_not_const)'), ('ixor', 'b', 'd')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2092_0 -> 770 in the cache */ - /* search2092_1_0 -> 156 in the cache */ - /* search2092_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2092_2_0 -> 156 in the cache */ - /* search2092_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5927, 5928 }, - -1, - } }, - - /* replace2092_0 -> 156 in the cache */ - /* replace2092_1_0 -> 770 in the cache */ - /* replace2092_1_1 -> 158 in the cache */ - /* replace2092_1_2 -> 159 in the cache */ - /* replace2092_1 -> 1325 in the cache */ - /* replace2092 -> 5926 in the cache */ - - /* ('bcsel', 'a', ('ixor', 'b', 'c(is_not_const)'), ('ixor(is_used_once)', 'b', 'd')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2093_0 -> 770 in the cache */ - /* search2093_1_0 -> 156 in the cache */ - /* search2093_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2093_2_0 -> 156 in the cache */ - /* search2093_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5930, 5931 }, - -1, - } }, - - /* replace2093_0 -> 156 in the cache */ - /* replace2093_1_0 -> 770 in the cache */ - /* replace2093_1_1 -> 158 in the cache */ - /* replace2093_1_2 -> 159 in the cache */ - /* replace2093_1 -> 1325 in the cache */ - /* replace2093 -> 5926 in the cache */ - - /* ('bcsel', 'a', ('ixor', 'b', 'c'), ('ixor(is_used_once)', 'b', 'd(is_not_const)')) => ('ixor', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2094_0 -> 770 in the cache */ - /* search2094_1_0 -> 156 in the cache */ - /* search2094_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2094_2_0 -> 156 in the cache */ - /* search2094_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_ixor, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5933, 5934 }, - -1, - } }, - - /* replace2094_0 -> 156 in the cache */ - /* replace2094_1_0 -> 770 in the cache */ - /* replace2094_1_1 -> 158 in the cache */ - /* replace2094_1_2 -> 159 in the cache */ - /* replace2094_1 -> 1325 in the cache */ - /* replace2094 -> 5926 in the cache */ - - /* ('bcsel', 'a', ('fmin(is_used_once)', 'b', 'c'), ('fmin', 'b', 'd(is_not_const)')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2095_0 -> 770 in the cache */ - /* search2095_1_0 -> 156 in the cache */ - /* search2095_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2095_2_0 -> 156 in the cache */ - /* search2095_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5936, 5937 }, - -1, - } }, - - /* replace2095_0 -> 156 in the cache */ - /* replace2095_1_0 -> 770 in the cache */ - /* replace2095_1_1 -> 158 in the cache */ - /* replace2095_1_2 -> 159 in the cache */ - /* replace2095_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('fmin(is_used_once)', 'b', 'c(is_not_const)'), ('fmin', 'b', 'd')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2096_0 -> 770 in the cache */ - /* search2096_1_0 -> 156 in the cache */ - /* search2096_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2096_2_0 -> 156 in the cache */ - /* search2096_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5940, 5941 }, - -1, - } }, - - /* replace2096_0 -> 156 in the cache */ - /* replace2096_1_0 -> 770 in the cache */ - /* replace2096_1_1 -> 158 in the cache */ - /* replace2096_1_2 -> 159 in the cache */ - /* replace2096_1 -> 1325 in the cache */ - /* replace2096 -> 5939 in the cache */ - - /* ('bcsel', 'a', ('fmin', 'b', 'c(is_not_const)'), ('fmin(is_used_once)', 'b', 'd')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2097_0 -> 770 in the cache */ - /* search2097_1_0 -> 156 in the cache */ - /* search2097_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2097_2_0 -> 156 in the cache */ - /* search2097_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5943, 5944 }, - -1, - } }, - - /* replace2097_0 -> 156 in the cache */ - /* replace2097_1_0 -> 770 in the cache */ - /* replace2097_1_1 -> 158 in the cache */ - /* replace2097_1_2 -> 159 in the cache */ - /* replace2097_1 -> 1325 in the cache */ - /* replace2097 -> 5939 in the cache */ - - /* ('bcsel', 'a', ('fmin', 'b', 'c'), ('fmin(is_used_once)', 'b', 'd(is_not_const)')) => ('fmin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2098_0 -> 770 in the cache */ - /* search2098_1_0 -> 156 in the cache */ - /* search2098_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2098_2_0 -> 156 in the cache */ - /* search2098_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5946, 5947 }, - -1, - } }, - - /* replace2098_0 -> 156 in the cache */ - /* replace2098_1_0 -> 770 in the cache */ - /* replace2098_1_1 -> 158 in the cache */ - /* replace2098_1_2 -> 159 in the cache */ - /* replace2098_1 -> 1325 in the cache */ - /* replace2098 -> 5939 in the cache */ - - /* ('bcsel', 'a', ('fmax(is_used_once)', 'b', 'c'), ('fmax', 'b', 'd(is_not_const)')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2099_0 -> 770 in the cache */ - /* search2099_1_0 -> 156 in the cache */ - /* search2099_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2099_2_0 -> 156 in the cache */ - /* search2099_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5949, 5950 }, - -1, - } }, - - /* replace2099_0 -> 156 in the cache */ - /* replace2099_1_0 -> 770 in the cache */ - /* replace2099_1_1 -> 158 in the cache */ - /* replace2099_1_2 -> 159 in the cache */ - /* replace2099_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('fmax(is_used_once)', 'b', 'c(is_not_const)'), ('fmax', 'b', 'd')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2100_0 -> 770 in the cache */ - /* search2100_1_0 -> 156 in the cache */ - /* search2100_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2100_2_0 -> 156 in the cache */ - /* search2100_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5953, 5954 }, - -1, - } }, - - /* replace2100_0 -> 156 in the cache */ - /* replace2100_1_0 -> 770 in the cache */ - /* replace2100_1_1 -> 158 in the cache */ - /* replace2100_1_2 -> 159 in the cache */ - /* replace2100_1 -> 1325 in the cache */ - /* replace2100 -> 5952 in the cache */ - - /* ('bcsel', 'a', ('fmax', 'b', 'c(is_not_const)'), ('fmax(is_used_once)', 'b', 'd')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2101_0 -> 770 in the cache */ - /* search2101_1_0 -> 156 in the cache */ - /* search2101_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2101_2_0 -> 156 in the cache */ - /* search2101_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5956, 5957 }, - -1, - } }, - - /* replace2101_0 -> 156 in the cache */ - /* replace2101_1_0 -> 770 in the cache */ - /* replace2101_1_1 -> 158 in the cache */ - /* replace2101_1_2 -> 159 in the cache */ - /* replace2101_1 -> 1325 in the cache */ - /* replace2101 -> 5952 in the cache */ - - /* ('bcsel', 'a', ('fmax', 'b', 'c'), ('fmax(is_used_once)', 'b', 'd(is_not_const)')) => ('fmax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2102_0 -> 770 in the cache */ - /* search2102_1_0 -> 156 in the cache */ - /* search2102_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2102_2_0 -> 156 in the cache */ - /* search2102_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5959, 5960 }, - -1, - } }, - - /* replace2102_0 -> 156 in the cache */ - /* replace2102_1_0 -> 770 in the cache */ - /* replace2102_1_1 -> 158 in the cache */ - /* replace2102_1_2 -> 159 in the cache */ - /* replace2102_1 -> 1325 in the cache */ - /* replace2102 -> 5952 in the cache */ - - /* ('bcsel', 'a', ('imin(is_used_once)', 'b', 'c'), ('imin', 'b', 'd(is_not_const)')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2103_0 -> 770 in the cache */ - /* search2103_1_0 -> 156 in the cache */ - /* search2103_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2103_2_0 -> 156 in the cache */ - /* search2103_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5962, 5963 }, - -1, - } }, - - /* replace2103_0 -> 156 in the cache */ - /* replace2103_1_0 -> 770 in the cache */ - /* replace2103_1_1 -> 158 in the cache */ - /* replace2103_1_2 -> 159 in the cache */ - /* replace2103_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('imin(is_used_once)', 'b', 'c(is_not_const)'), ('imin', 'b', 'd')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2104_0 -> 770 in the cache */ - /* search2104_1_0 -> 156 in the cache */ - /* search2104_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2104_2_0 -> 156 in the cache */ - /* search2104_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5966, 5967 }, - -1, - } }, - - /* replace2104_0 -> 156 in the cache */ - /* replace2104_1_0 -> 770 in the cache */ - /* replace2104_1_1 -> 158 in the cache */ - /* replace2104_1_2 -> 159 in the cache */ - /* replace2104_1 -> 1325 in the cache */ - /* replace2104 -> 5965 in the cache */ - - /* ('bcsel', 'a', ('imin', 'b', 'c(is_not_const)'), ('imin(is_used_once)', 'b', 'd')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2105_0 -> 770 in the cache */ - /* search2105_1_0 -> 156 in the cache */ - /* search2105_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2105_2_0 -> 156 in the cache */ - /* search2105_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5969, 5970 }, - -1, - } }, - - /* replace2105_0 -> 156 in the cache */ - /* replace2105_1_0 -> 770 in the cache */ - /* replace2105_1_1 -> 158 in the cache */ - /* replace2105_1_2 -> 159 in the cache */ - /* replace2105_1 -> 1325 in the cache */ - /* replace2105 -> 5965 in the cache */ - - /* ('bcsel', 'a', ('imin', 'b', 'c'), ('imin(is_used_once)', 'b', 'd(is_not_const)')) => ('imin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2106_0 -> 770 in the cache */ - /* search2106_1_0 -> 156 in the cache */ - /* search2106_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2106_2_0 -> 156 in the cache */ - /* search2106_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imin, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5972, 5973 }, - -1, - } }, - - /* replace2106_0 -> 156 in the cache */ - /* replace2106_1_0 -> 770 in the cache */ - /* replace2106_1_1 -> 158 in the cache */ - /* replace2106_1_2 -> 159 in the cache */ - /* replace2106_1 -> 1325 in the cache */ - /* replace2106 -> 5965 in the cache */ - - /* ('bcsel', 'a', ('imax(is_used_once)', 'b', 'c'), ('imax', 'b', 'd(is_not_const)')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2107_0 -> 770 in the cache */ - /* search2107_1_0 -> 156 in the cache */ - /* search2107_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2107_2_0 -> 156 in the cache */ - /* search2107_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5975, 5976 }, - -1, - } }, - - /* replace2107_0 -> 156 in the cache */ - /* replace2107_1_0 -> 770 in the cache */ - /* replace2107_1_1 -> 158 in the cache */ - /* replace2107_1_2 -> 159 in the cache */ - /* replace2107_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('imax(is_used_once)', 'b', 'c(is_not_const)'), ('imax', 'b', 'd')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2108_0 -> 770 in the cache */ - /* search2108_1_0 -> 156 in the cache */ - /* search2108_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2108_2_0 -> 156 in the cache */ - /* search2108_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5979, 5980 }, - -1, - } }, - - /* replace2108_0 -> 156 in the cache */ - /* replace2108_1_0 -> 770 in the cache */ - /* replace2108_1_1 -> 158 in the cache */ - /* replace2108_1_2 -> 159 in the cache */ - /* replace2108_1 -> 1325 in the cache */ - /* replace2108 -> 5978 in the cache */ - - /* ('bcsel', 'a', ('imax', 'b', 'c(is_not_const)'), ('imax(is_used_once)', 'b', 'd')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2109_0 -> 770 in the cache */ - /* search2109_1_0 -> 156 in the cache */ - /* search2109_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2109_2_0 -> 156 in the cache */ - /* search2109_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5982, 5983 }, - -1, - } }, - - /* replace2109_0 -> 156 in the cache */ - /* replace2109_1_0 -> 770 in the cache */ - /* replace2109_1_1 -> 158 in the cache */ - /* replace2109_1_2 -> 159 in the cache */ - /* replace2109_1 -> 1325 in the cache */ - /* replace2109 -> 5978 in the cache */ - - /* ('bcsel', 'a', ('imax', 'b', 'c'), ('imax(is_used_once)', 'b', 'd(is_not_const)')) => ('imax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2110_0 -> 770 in the cache */ - /* search2110_1_0 -> 156 in the cache */ - /* search2110_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2110_2_0 -> 156 in the cache */ - /* search2110_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_imax, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5985, 5986 }, - -1, - } }, - - /* replace2110_0 -> 156 in the cache */ - /* replace2110_1_0 -> 770 in the cache */ - /* replace2110_1_1 -> 158 in the cache */ - /* replace2110_1_2 -> 159 in the cache */ - /* replace2110_1 -> 1325 in the cache */ - /* replace2110 -> 5978 in the cache */ - - /* ('bcsel', 'a', ('umin(is_used_once)', 'b', 'c'), ('umin', 'b', 'd(is_not_const)')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2111_0 -> 770 in the cache */ - /* search2111_1_0 -> 156 in the cache */ - /* search2111_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2111_2_0 -> 156 in the cache */ - /* search2111_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5988, 5989 }, - -1, - } }, - - /* replace2111_0 -> 156 in the cache */ - /* replace2111_1_0 -> 770 in the cache */ - /* replace2111_1_1 -> 158 in the cache */ - /* replace2111_1_2 -> 159 in the cache */ - /* replace2111_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('umin(is_used_once)', 'b', 'c(is_not_const)'), ('umin', 'b', 'd')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2112_0 -> 770 in the cache */ - /* search2112_1_0 -> 156 in the cache */ - /* search2112_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2112_2_0 -> 156 in the cache */ - /* search2112_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5992, 5993 }, - -1, - } }, - - /* replace2112_0 -> 156 in the cache */ - /* replace2112_1_0 -> 770 in the cache */ - /* replace2112_1_1 -> 158 in the cache */ - /* replace2112_1_2 -> 159 in the cache */ - /* replace2112_1 -> 1325 in the cache */ - /* replace2112 -> 5991 in the cache */ - - /* ('bcsel', 'a', ('umin', 'b', 'c(is_not_const)'), ('umin(is_used_once)', 'b', 'd')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2113_0 -> 770 in the cache */ - /* search2113_1_0 -> 156 in the cache */ - /* search2113_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2113_2_0 -> 156 in the cache */ - /* search2113_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5995, 5996 }, - -1, - } }, - - /* replace2113_0 -> 156 in the cache */ - /* replace2113_1_0 -> 770 in the cache */ - /* replace2113_1_1 -> 158 in the cache */ - /* replace2113_1_2 -> 159 in the cache */ - /* replace2113_1 -> 1325 in the cache */ - /* replace2113 -> 5991 in the cache */ - - /* ('bcsel', 'a', ('umin', 'b', 'c'), ('umin(is_used_once)', 'b', 'd(is_not_const)')) => ('umin', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2114_0 -> 770 in the cache */ - /* search2114_1_0 -> 156 in the cache */ - /* search2114_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2114_2_0 -> 156 in the cache */ - /* search2114_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 5998, 5999 }, - -1, - } }, - - /* replace2114_0 -> 156 in the cache */ - /* replace2114_1_0 -> 770 in the cache */ - /* replace2114_1_1 -> 158 in the cache */ - /* replace2114_1_2 -> 159 in the cache */ - /* replace2114_1 -> 1325 in the cache */ - /* replace2114 -> 5991 in the cache */ - - /* ('bcsel', 'a', ('umax(is_used_once)', 'b', 'c'), ('umax', 'b', 'd(is_not_const)')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2115_0 -> 770 in the cache */ - /* search2115_1_0 -> 156 in the cache */ - /* search2115_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 156, 158 }, - 0, - } }, - /* search2115_2_0 -> 156 in the cache */ - /* search2115_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 156, 5858 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 6001, 6002 }, - -1, - } }, - - /* replace2115_0 -> 156 in the cache */ - /* replace2115_1_0 -> 770 in the cache */ - /* replace2115_1_1 -> 158 in the cache */ - /* replace2115_1_2 -> 159 in the cache */ - /* replace2115_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('umax(is_used_once)', 'b', 'c(is_not_const)'), ('umax', 'b', 'd')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2116_0 -> 770 in the cache */ - /* search2116_1_0 -> 156 in the cache */ - /* search2116_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 156, 3688 }, - 0, - } }, - /* search2116_2_0 -> 156 in the cache */ - /* search2116_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 6005, 6006 }, - -1, - } }, - - /* replace2116_0 -> 156 in the cache */ - /* replace2116_1_0 -> 770 in the cache */ - /* replace2116_1_1 -> 158 in the cache */ - /* replace2116_1_2 -> 159 in the cache */ - /* replace2116_1 -> 1325 in the cache */ - /* replace2116 -> 6004 in the cache */ - - /* ('bcsel', 'a', ('umax', 'b', 'c(is_not_const)'), ('umax(is_used_once)', 'b', 'd')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2117_0 -> 770 in the cache */ - /* search2117_1_0 -> 156 in the cache */ - /* search2117_1_1 -> 3688 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 156, 3688 }, - -1, - } }, - /* search2117_2_0 -> 156 in the cache */ - /* search2117_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 6008, 6009 }, - -1, - } }, - - /* replace2117_0 -> 156 in the cache */ - /* replace2117_1_0 -> 770 in the cache */ - /* replace2117_1_1 -> 158 in the cache */ - /* replace2117_1_2 -> 159 in the cache */ - /* replace2117_1 -> 1325 in the cache */ - /* replace2117 -> 6004 in the cache */ - - /* ('bcsel', 'a', ('umax', 'b', 'c'), ('umax(is_used_once)', 'b', 'd(is_not_const)')) => ('umax', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2118_0 -> 770 in the cache */ - /* search2118_1_0 -> 156 in the cache */ - /* search2118_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 0, 1, - { 156, 158 }, - -1, - } }, - /* search2118_2_0 -> 156 in the cache */ - /* search2118_2_1 -> 5858 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_umax, - 1, 1, - { 156, 5858 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 770, 6011, 6012 }, - -1, - } }, - - /* replace2118_0 -> 156 in the cache */ - /* replace2118_1_0 -> 770 in the cache */ - /* replace2118_1_1 -> 158 in the cache */ - /* replace2118_1_2 -> 159 in the cache */ - /* replace2118_1 -> 1325 in the cache */ - /* replace2118 -> 6004 in the cache */ - - /* ('bcsel', 'a', ('fpow(is_used_once)', 'b', 'c'), ('fpow', 'b', 'd')) => ('fpow', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2119_0 -> 770 in the cache */ - /* search2119_1_0 -> 156 in the cache */ - /* search2119_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 156, 158 }, - 0, - } }, - /* search2119_2_0 -> 156 in the cache */ - /* search2119_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 156, 159 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 6014, 6015 }, - -1, - } }, - - /* replace2119_0 -> 156 in the cache */ - /* replace2119_1_0 -> 770 in the cache */ - /* replace2119_1_1 -> 158 in the cache */ - /* replace2119_1_2 -> 159 in the cache */ - /* replace2119_1 -> 1325 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 156, 1325 }, - -1, - } }, - - /* ('bcsel', 'a', ('fpow', 'b', 'c'), ('fpow(is_used_once)', 'b', 'd')) => ('fpow', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2120_0 -> 770 in the cache */ - /* search2120_1_0 -> 156 in the cache */ - /* search2120_1_1 -> 158 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 156, 158 }, - -1, - } }, - /* search2120_2_0 -> 156 in the cache */ - /* search2120_2_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 156, 159 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 6018, 6019 }, - -1, - } }, - - /* replace2120_0 -> 156 in the cache */ - /* replace2120_1_0 -> 770 in the cache */ - /* replace2120_1_1 -> 158 in the cache */ - /* replace2120_1_2 -> 159 in the cache */ - /* replace2120_1 -> 1325 in the cache */ - /* replace2120 -> 6017 in the cache */ - - /* ('bcsel', 'a', ('fpow(is_used_once)', 'b', 'c'), ('fpow', 'd', 'c')) => ('fpow', ('bcsel', 'a', 'b', 'd'), 'c') */ - /* search2121_0 -> 770 in the cache */ - /* search2121_1_0 -> 133 in the cache */ - /* search2121_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 133, 135 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2121_2_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 6022, 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 6021, 6023 }, - -1, - } }, - - /* replace2121_0_0 -> 770 in the cache */ - /* replace2121_0_1 -> 133 in the cache */ - /* replace2121_0_2 -> 6022 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 133, 6022 }, - -1, - } }, - /* replace2121_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 6025, 135 }, - -1, - } }, - - /* ('bcsel', 'a', ('fpow', 'b', 'c'), ('fpow(is_used_once)', 'd', 'c')) => ('fpow', ('bcsel', 'a', 'b', 'd'), 'c') */ - /* search2122_0 -> 770 in the cache */ - /* search2122_1_0 -> 133 in the cache */ - /* search2122_1_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 133, 135 }, - -1, - } }, - /* search2122_2_0 -> 6022 in the cache */ - /* search2122_2_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 6022, 135 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 770, 6027, 6028 }, - -1, - } }, - - /* replace2122_0_0 -> 770 in the cache */ - /* replace2122_0_1 -> 133 in the cache */ - /* replace2122_0_2 -> 6022 in the cache */ - /* replace2122_0 -> 6025 in the cache */ - /* replace2122_1 -> 135 in the cache */ - /* replace2122 -> 6026 in the cache */ - - /* ('bcsel', 'c', ('frcp(is_used_once)', 'a'), ('frcp(is_used_once)', 'b')) => ('frcp', ('bcsel', 'c', 'a', 'b')) */ - /* search2123_0 -> 531 in the cache */ - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 6030 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6031, 6033 }, - -1, - } }, - - /* replace2123_0_0 -> 531 in the cache */ - /* replace2123_0_1 -> 6030 in the cache */ - /* replace2123_0_2 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6030, 6032 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('frsq(is_used_once)', 'a'), ('frsq(is_used_once)', 'b')) => ('frsq', ('bcsel', 'c', 'a', 'b')) */ - /* search2124_0 -> 531 in the cache */ - /* search2124_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_frsq, - -1, 0, - { 6030 }, - 0, - } }, - /* search2124_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_frsq, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6037, 6038 }, - -1, - } }, - - /* replace2124_0_0 -> 531 in the cache */ - /* replace2124_0_1 -> 6030 in the cache */ - /* replace2124_0_2 -> 6032 in the cache */ - /* replace2124_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_frsq, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fsqrt(is_used_once)', 'a'), ('fsqrt(is_used_once)', 'b')) => ('fsqrt', ('bcsel', 'c', 'a', 'b')) */ - /* search2125_0 -> 531 in the cache */ - /* search2125_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 6030 }, - 0, - } }, - /* search2125_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6041, 6042 }, - -1, - } }, - - /* replace2125_0_0 -> 531 in the cache */ - /* replace2125_0_1 -> 6030 in the cache */ - /* replace2125_0_2 -> 6032 in the cache */ - /* replace2125_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fexp2(is_used_once)', 'a'), ('fexp2(is_used_once)', 'b')) => ('fexp2', ('bcsel', 'c', 'a', 'b')) */ - /* search2126_0 -> 531 in the cache */ - /* search2126_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 6030 }, - 0, - } }, - /* search2126_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6045, 6046 }, - -1, - } }, - - /* replace2126_0_0 -> 531 in the cache */ - /* replace2126_0_1 -> 6030 in the cache */ - /* replace2126_0_2 -> 6032 in the cache */ - /* replace2126_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('flog2(is_used_once)', 'a'), ('flog2(is_used_once)', 'b')) => ('flog2', ('bcsel', 'c', 'a', 'b')) */ - /* search2127_0 -> 531 in the cache */ - /* search2127_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 6030 }, - 0, - } }, - /* search2127_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6049, 6050 }, - -1, - } }, - - /* replace2127_0_0 -> 531 in the cache */ - /* replace2127_0_1 -> 6030 in the cache */ - /* replace2127_0_2 -> 6032 in the cache */ - /* replace2127_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fsign(is_used_once)', 'a'), ('fsign(is_used_once)', 'b')) => ('fsign', ('bcsel', 'c', 'a', 'b')) */ - /* search2128_0 -> 531 in the cache */ - /* search2128_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 6030 }, - 0, - } }, - /* search2128_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6053, 6054 }, - -1, - } }, - - /* replace2128_0_0 -> 531 in the cache */ - /* replace2128_0_1 -> 6030 in the cache */ - /* replace2128_0_2 -> 6032 in the cache */ - /* replace2128_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fsin(is_used_once)', 'a'), ('fsin(is_used_once)', 'b')) => ('fsin', ('bcsel', 'c', 'a', 'b')) */ - /* search2129_0 -> 531 in the cache */ - /* search2129_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin, - -1, 0, - { 6030 }, - 0, - } }, - /* search2129_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6057, 6058 }, - -1, - } }, - - /* replace2129_0_0 -> 531 in the cache */ - /* replace2129_0_1 -> 6030 in the cache */ - /* replace2129_0_2 -> 6032 in the cache */ - /* replace2129_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fcos(is_used_once)', 'a'), ('fcos(is_used_once)', 'b')) => ('fcos', ('bcsel', 'c', 'a', 'b')) */ - /* search2130_0 -> 531 in the cache */ - /* search2130_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos, - -1, 0, - { 6030 }, - 0, - } }, - /* search2130_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6061, 6062 }, - -1, - } }, - - /* replace2130_0_0 -> 531 in the cache */ - /* replace2130_0_1 -> 6030 in the cache */ - /* replace2130_0_2 -> 6032 in the cache */ - /* replace2130_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fsin_amd(is_used_once)', 'a'), ('fsin_amd(is_used_once)', 'b')) => ('fsin_amd', ('bcsel', 'c', 'a', 'b')) */ - /* search2131_0 -> 531 in the cache */ - /* search2131_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_amd, - -1, 0, - { 6030 }, - 0, - } }, - /* search2131_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_amd, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6065, 6066 }, - -1, - } }, - - /* replace2131_0_0 -> 531 in the cache */ - /* replace2131_0_1 -> 6030 in the cache */ - /* replace2131_0_2 -> 6032 in the cache */ - /* replace2131_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_amd, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fcos_amd(is_used_once)', 'a'), ('fcos_amd(is_used_once)', 'b')) => ('fcos_amd', ('bcsel', 'c', 'a', 'b')) */ - /* search2132_0 -> 531 in the cache */ - /* search2132_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos_amd, - -1, 0, - { 6030 }, - 0, - } }, - /* search2132_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos_amd, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6069, 6070 }, - -1, - } }, - - /* replace2132_0_0 -> 531 in the cache */ - /* replace2132_0_1 -> 6030 in the cache */ - /* replace2132_0_2 -> 6032 in the cache */ - /* replace2132_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos_amd, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fsin_mdg(is_used_once)', 'a'), ('fsin_mdg(is_used_once)', 'b')) => ('fsin_mdg', ('bcsel', 'c', 'a', 'b')) */ - /* search2133_0 -> 531 in the cache */ - /* search2133_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_mdg, - -1, 0, - { 6030 }, - 0, - } }, - /* search2133_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_mdg, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6073, 6074 }, - -1, - } }, - - /* replace2133_0_0 -> 531 in the cache */ - /* replace2133_0_1 -> 6030 in the cache */ - /* replace2133_0_2 -> 6032 in the cache */ - /* replace2133_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_mdg, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fcos_mdg(is_used_once)', 'a'), ('fcos_mdg(is_used_once)', 'b')) => ('fcos_mdg', ('bcsel', 'c', 'a', 'b')) */ - /* search2134_0 -> 531 in the cache */ - /* search2134_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos_mdg, - -1, 0, - { 6030 }, - 0, - } }, - /* search2134_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos_mdg, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6077, 6078 }, - -1, - } }, - - /* replace2134_0_0 -> 531 in the cache */ - /* replace2134_0_1 -> 6030 in the cache */ - /* replace2134_0_2 -> 6032 in the cache */ - /* replace2134_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fcos_mdg, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fsin_agx(is_used_once)', 'a'), ('fsin_agx(is_used_once)', 'b')) => ('fsin_agx', ('bcsel', 'c', 'a', 'b')) */ - /* search2135_0 -> 531 in the cache */ - /* search2135_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_agx, - -1, 0, - { 6030 }, - 0, - } }, - /* search2135_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_agx, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6081, 6082 }, - -1, - } }, - - /* replace2135_0_0 -> 531 in the cache */ - /* replace2135_0_1 -> 6030 in the cache */ - /* replace2135_0_2 -> 6032 in the cache */ - /* replace2135_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fsin_agx, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fneg(is_used_once)', 'a'), ('fneg(is_used_once)', 'b')) => ('fneg', ('bcsel', 'c', 'a', 'b')) */ - /* search2136_0 -> 531 in the cache */ - /* search2136_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 6030 }, - 0, - } }, - /* search2136_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6085, 6086 }, - -1, - } }, - - /* replace2136_0_0 -> 531 in the cache */ - /* replace2136_0_1 -> 6030 in the cache */ - /* replace2136_0_2 -> 6032 in the cache */ - /* replace2136_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fabs(is_used_once)', 'a'), ('fabs(is_used_once)', 'b')) => ('fabs', ('bcsel', 'c', 'a', 'b')) */ - /* search2137_0 -> 531 in the cache */ - /* search2137_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 6030 }, - 0, - } }, - /* search2137_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 6032 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6089, 6090 }, - -1, - } }, - - /* replace2137_0_0 -> 531 in the cache */ - /* replace2137_0_1 -> 6030 in the cache */ - /* replace2137_0_2 -> 6032 in the cache */ - /* replace2137_0 -> 6035 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 6035 }, - -1, - } }, - - /* ('bcsel', 'c', ('fsign(is_used_once)', 'a'), ('fsign(is_used_once)', 'b')) => ('fsign', ('bcsel', 'c', 'a', 'b')) */ - /* search2138_0 -> 531 in the cache */ - /* search2138_1_0 -> 6030 in the cache */ - /* search2138_1 -> 6053 in the cache */ - /* search2138_2_0 -> 6032 in the cache */ - /* search2138_2 -> 6054 in the cache */ - /* search2138 -> 6055 in the cache */ - - /* replace2138_0_0 -> 531 in the cache */ - /* replace2138_0_1 -> 6030 in the cache */ - /* replace2138_0_2 -> 6032 in the cache */ - /* replace2138_0 -> 6035 in the cache */ - /* replace2138 -> 6056 in the cache */ - - /* ('ineg', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('ineg', 'a'), ('ineg', 'b')) */ - /* search2139_0_0 -> 531 in the cache */ - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* a */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6093, 6094 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 6095 }, - -1, - } }, - - /* replace2139_0 -> 531 in the cache */ - /* replace2139_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 6030 }, - -1, - } }, - /* replace2139_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 6032 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6097, 6098 }, - -1, - } }, - - /* ('iabs', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('iabs', 'a'), ('iabs', 'b')) */ - /* search2140_0_0 -> 531 in the cache */ - /* search2140_0_1 -> 6093 in the cache */ - /* search2140_0_2 -> 6094 in the cache */ - /* search2140_0 -> 6095 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 6095 }, - -1, - } }, - - /* replace2140_0 -> 531 in the cache */ - /* replace2140_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 6030 }, - -1, - } }, - /* replace2140_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 6032 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6101, 6102 }, - -1, - } }, - - /* ('inot', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('inot', 'a'), ('inot', 'b')) */ - /* search2141_0_0 -> 531 in the cache */ - /* search2141_0_1 -> 6093 in the cache */ - /* search2141_0_2 -> 6094 in the cache */ - /* search2141_0 -> 6095 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 6095 }, - -1, - } }, - - /* replace2141_0 -> 531 in the cache */ - /* replace2141_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 6030 }, - -1, - } }, - /* replace2141_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 6032 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6105, 6106 }, - -1, - } }, - - /* ('isign', ('bcsel', 'c', '#a', '#b')) => ('bcsel', 'c', ('isign', 'a'), ('isign', 'b')) */ - /* search2142_0_0 -> 531 in the cache */ - /* search2142_0_1 -> 6093 in the cache */ - /* search2142_0_2 -> 6094 in the cache */ - /* search2142_0 -> 6095 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_isign, - -1, 0, - { 6095 }, - -1, - } }, - - /* replace2142_0 -> 531 in the cache */ - /* replace2142_1_0 -> 6030 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_isign, - -1, 0, - { 6030 }, - -1, - } }, - /* replace2142_2_0 -> 6032 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_isign, - -1, 0, - { 6032 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 531, 6109, 6110 }, - -1, - } }, - - /* ('fisnormal', 'a@16') => ('ult', 4095, ('iadd', ('ishl', 'a', 1), 2048)) */ - /* search2143_0 -> 11 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fisnormal, - -1, 0, - { 11 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0xfff /* 4095 */ }, - } }, - /* replace2143_1_0_0 -> 11 in the cache */ - /* replace2143_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 11, 406 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0x800 /* 2048 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 6114, 6115 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 6113, 6116 }, - -1, - } }, - - /* ('fisnormal', 'a@32') => ('ult', 33554431, ('iadd', ('ishl', 'a', 1), 16777216)) */ - /* search2144_0 -> 16 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fisnormal, - -1, 0, - { 16 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x1ffffff /* 33554431 */ }, - } }, - /* replace2144_1_0_0 -> 16 in the cache */ - /* replace2144_1_0_1 -> 406 in the cache */ - /* replace2144_1_0 -> 1004 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x1000000 /* 16777216 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 1004, 6120 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 6119, 6121 }, - -1, - } }, - - /* ('fisnormal', 'a@64') => ('ult', 18014398509481983, ('iadd', ('ishl', 'a', 1), 9007199254740992)) */ - /* search2145_0 -> 21 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fisnormal, - -1, 0, - { 21 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x3fffffffffffff /* 18014398509481983 */ }, - } }, - /* replace2145_1_0_0 -> 21 in the cache */ - /* replace2145_1_0_1 -> 406 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 21, 406 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x20000000000000 /* 9007199254740992 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 6125, 6126 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ult, - -1, 1, - { 6124, 6127 }, - -1, - } }, - - /* ('f2f16', ('vec2', 'a@32', 'b@32')) => ('vec2', ('f2f16', 'a'), ('f2f16', 'b')) */ - /* search2146_0_0 -> 16 in the cache */ - /* search2146_0_1 -> 36 in the cache */ - /* search2146_0 -> 3382 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 3382 }, - -1, - } }, - - /* replace2146_0_0 -> 16 in the cache */ - /* replace2146_0 -> 4187 in the cache */ - /* replace2146_1_0 -> 36 in the cache */ - /* replace2146_1 -> 4184 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 4187, 4184 }, - -1, - } }, - - /* ('f2fmp', ('vec2', 'a@32', 'b@32')) => ('vec2', ('f2fmp', 'a'), ('f2fmp', 'b')) */ - /* search2147_0_0 -> 16 in the cache */ - /* search2147_0_1 -> 36 in the cache */ - /* search2147_0 -> 3382 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 3382 }, - -1, - } }, - - /* replace2147_0_0 -> 16 in the cache */ - /* replace2147_0 -> 2161 in the cache */ - /* replace2147_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 2161, 6132 }, - -1, - } }, - - /* ('u2u16', ('vec2', 'a@32', 'b@32')) => ('vec2', ('u2u16', 'a'), ('u2u16', 'b')) */ - /* search2148_0_0 -> 16 in the cache */ - /* search2148_0_1 -> 36 in the cache */ - /* search2148_0 -> 3382 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 3382 }, - -1, - } }, - - /* replace2148_0_0 -> 16 in the cache */ - /* replace2148_0 -> 3478 in the cache */ - /* replace2148_1_0 -> 36 in the cache */ - /* replace2148_1 -> 5042 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 3478, 5042 }, - -1, - } }, - - /* ('i2i16', ('vec2', 'a@32', 'b@32')) => ('vec2', ('i2i16', 'a'), ('i2i16', 'b')) */ - /* search2149_0_0 -> 16 in the cache */ - /* search2149_0_1 -> 36 in the cache */ - /* search2149_0 -> 3382 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 3382 }, - -1, - } }, - - /* replace2149_0_0 -> 16 in the cache */ - /* replace2149_0 -> 4528 in the cache */ - /* replace2149_1_0 -> 36 in the cache */ - /* replace2149_1 -> 4713 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 4528, 4713 }, - -1, - } }, - - /* ('i2imp', ('vec2', 'a@32', 'b@32')) => ('vec2', ('i2imp', 'a'), ('i2imp', 'b')) */ - /* search2150_0_0 -> 16 in the cache */ - /* search2150_0_1 -> 36 in the cache */ - /* search2150_0 -> 3382 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 3382 }, - -1, - } }, - - /* replace2150_0_0 -> 16 in the cache */ - /* replace2150_0 -> 2172 in the cache */ - /* replace2150_1_0 -> 36 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 2172, 6139 }, - -1, - } }, - - /* ('f2f16', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('f2f16', 'a'), ('f2f16', 'b'), ('f2f16', 'c')) */ - /* search2151_0_0 -> 16 in the cache */ - /* search2151_0_1 -> 36 in the cache */ - /* search2151_0_2 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 16, 36, 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 6141 }, - -1, - } }, - - /* replace2151_0_0 -> 16 in the cache */ - /* replace2151_0 -> 4187 in the cache */ - /* replace2151_1_0 -> 36 in the cache */ - /* replace2151_1 -> 4184 in the cache */ - /* replace2151_2_0 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 4187, 4184, 6143 }, - -1, - } }, - - /* ('f2fmp', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c')) */ - /* search2152_0_0 -> 16 in the cache */ - /* search2152_0_1 -> 36 in the cache */ - /* search2152_0_2 -> 141 in the cache */ - /* search2152_0 -> 6141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 6141 }, - -1, - } }, - - /* replace2152_0_0 -> 16 in the cache */ - /* replace2152_0 -> 2161 in the cache */ - /* replace2152_1_0 -> 36 in the cache */ - /* replace2152_1 -> 6132 in the cache */ - /* replace2152_2_0 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 2161, 6132, 6146 }, - -1, - } }, - - /* ('u2u16', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('u2u16', 'a'), ('u2u16', 'b'), ('u2u16', 'c')) */ - /* search2153_0_0 -> 16 in the cache */ - /* search2153_0_1 -> 36 in the cache */ - /* search2153_0_2 -> 141 in the cache */ - /* search2153_0 -> 6141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 6141 }, - -1, - } }, - - /* replace2153_0_0 -> 16 in the cache */ - /* replace2153_0 -> 3478 in the cache */ - /* replace2153_1_0 -> 36 in the cache */ - /* replace2153_1 -> 5042 in the cache */ - /* replace2153_2_0 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 3478, 5042, 6149 }, - -1, - } }, - - /* ('i2i16', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('i2i16', 'a'), ('i2i16', 'b'), ('i2i16', 'c')) */ - /* search2154_0_0 -> 16 in the cache */ - /* search2154_0_1 -> 36 in the cache */ - /* search2154_0_2 -> 141 in the cache */ - /* search2154_0 -> 6141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 6141 }, - -1, - } }, - - /* replace2154_0_0 -> 16 in the cache */ - /* replace2154_0 -> 4528 in the cache */ - /* replace2154_1_0 -> 36 in the cache */ - /* replace2154_1 -> 4713 in the cache */ - /* replace2154_2_0 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 4528, 4713, 6152 }, - -1, - } }, - - /* ('i2imp', ('vec3', 'a@32', 'b@32', 'c@32')) => ('vec3', ('i2imp', 'a'), ('i2imp', 'b'), ('i2imp', 'c')) */ - /* search2155_0_0 -> 16 in the cache */ - /* search2155_0_1 -> 36 in the cache */ - /* search2155_0_2 -> 141 in the cache */ - /* search2155_0 -> 6141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 6141 }, - -1, - } }, - - /* replace2155_0_0 -> 16 in the cache */ - /* replace2155_0 -> 2172 in the cache */ - /* replace2155_1_0 -> 36 in the cache */ - /* replace2155_1 -> 6139 in the cache */ - /* replace2155_2_0 -> 141 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 141 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec3, - -1, 0, - { 2172, 6139, 6155 }, - -1, - } }, - - /* ('f2f16', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('f2f16', 'a'), ('f2f16', 'b'), ('f2f16', 'c'), ('f2f16', 'd')) */ - /* search2156_0_0 -> 16 in the cache */ - /* search2156_0_1 -> 36 in the cache */ - /* search2156_0_2 -> 141 in the cache */ - /* search2156_0_3 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 16, 36, 141, 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 6157 }, - -1, - } }, - - /* replace2156_0_0 -> 16 in the cache */ - /* replace2156_0 -> 4187 in the cache */ - /* replace2156_1_0 -> 36 in the cache */ - /* replace2156_1 -> 4184 in the cache */ - /* replace2156_2_0 -> 141 in the cache */ - /* replace2156_2 -> 6143 in the cache */ - /* replace2156_3_0 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 4187, 4184, 6143, 6159 }, - -1, - } }, - - /* ('f2fmp', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c'), ('f2fmp', 'd')) */ - /* search2157_0_0 -> 16 in the cache */ - /* search2157_0_1 -> 36 in the cache */ - /* search2157_0_2 -> 141 in the cache */ - /* search2157_0_3 -> 169 in the cache */ - /* search2157_0 -> 6157 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 6157 }, - -1, - } }, - - /* replace2157_0_0 -> 16 in the cache */ - /* replace2157_0 -> 2161 in the cache */ - /* replace2157_1_0 -> 36 in the cache */ - /* replace2157_1 -> 6132 in the cache */ - /* replace2157_2_0 -> 141 in the cache */ - /* replace2157_2 -> 6146 in the cache */ - /* replace2157_3_0 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 2161, 6132, 6146, 6162 }, - -1, - } }, - - /* ('u2u16', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('u2u16', 'a'), ('u2u16', 'b'), ('u2u16', 'c'), ('u2u16', 'd')) */ - /* search2158_0_0 -> 16 in the cache */ - /* search2158_0_1 -> 36 in the cache */ - /* search2158_0_2 -> 141 in the cache */ - /* search2158_0_3 -> 169 in the cache */ - /* search2158_0 -> 6157 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 6157 }, - -1, - } }, - - /* replace2158_0_0 -> 16 in the cache */ - /* replace2158_0 -> 3478 in the cache */ - /* replace2158_1_0 -> 36 in the cache */ - /* replace2158_1 -> 5042 in the cache */ - /* replace2158_2_0 -> 141 in the cache */ - /* replace2158_2 -> 6149 in the cache */ - /* replace2158_3_0 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 3478, 5042, 6149, 6165 }, - -1, - } }, - - /* ('i2i16', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('i2i16', 'a'), ('i2i16', 'b'), ('i2i16', 'c'), ('i2i16', 'd')) */ - /* search2159_0_0 -> 16 in the cache */ - /* search2159_0_1 -> 36 in the cache */ - /* search2159_0_2 -> 141 in the cache */ - /* search2159_0_3 -> 169 in the cache */ - /* search2159_0 -> 6157 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 6157 }, - -1, - } }, - - /* replace2159_0_0 -> 16 in the cache */ - /* replace2159_0 -> 4528 in the cache */ - /* replace2159_1_0 -> 36 in the cache */ - /* replace2159_1 -> 4713 in the cache */ - /* replace2159_2_0 -> 141 in the cache */ - /* replace2159_2 -> 6152 in the cache */ - /* replace2159_3_0 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 4528, 4713, 6152, 6168 }, - -1, - } }, - - /* ('i2imp', ('vec4', 'a@32', 'b@32', 'c@32', 'd@32')) => ('vec4', ('i2imp', 'a'), ('i2imp', 'b'), ('i2imp', 'c'), ('i2imp', 'd')) */ - /* search2160_0_0 -> 16 in the cache */ - /* search2160_0_1 -> 36 in the cache */ - /* search2160_0_2 -> 141 in the cache */ - /* search2160_0_3 -> 169 in the cache */ - /* search2160_0 -> 6157 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 6157 }, - -1, - } }, - - /* replace2160_0_0 -> 16 in the cache */ - /* replace2160_0 -> 2172 in the cache */ - /* replace2160_1_0 -> 36 in the cache */ - /* replace2160_1 -> 6139 in the cache */ - /* replace2160_2_0 -> 141 in the cache */ - /* replace2160_2 -> 6155 in the cache */ - /* replace2160_3_0 -> 169 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 169 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec4, - -1, 0, - { 2172, 6139, 6155, 6171 }, - -1, - } }, - -}; - -static const nir_search_expression_cond nir_opt_algebraic_expression_cond[] = { - (is_used_once), - (is_only_used_as_float), - (is_not_used_by_if), - (is_used_by_non_fsat), - (no_signed_wrap), - (only_lower_8_bits_used), - (only_lower_16_bits_used), -}; - -static const nir_search_variable_cond nir_opt_algebraic_variable_cond[] = { - (is_pos_power_of_two), - (is_neg_power_of_two), - (is_bitcount2), - (is_finite_not_zero), - (is_finite), - (is_not_const), - (is_not_const_zero), - (is_ult_0xfffc07fc), - (is_not_fmul), - (is_first_5_bits_uge_2), - (is_unsigned_multiple_of_4), - (is_unsigned_multiple_of_2), - (is_unsigned_multiple_of_8), - (is_unsigned_multiple_of_16), - (is_unsigned_multiple_of_32), - (is_unsigned_multiple_of_64), - (is_a_number), - (is_gt_0_and_lt_1), - (is_zero_to_one), - (is_not_negative), - (is_lower_half_zero), - (is_upper_half_zero), - (is_lower_half_negative_one), - (is_upper_half_negative_one), - (is_integral), - (is_not_positive), - (is_not_zero), - (is_a_number_not_negative), - (is_a_number_not_positive), - (is_gt_zero), - (is_lt_zero), - (is_a_number_gt_zero), - (is_a_number_lt_zero), - (is_fmul), - (is_ult_32), -}; - -static const struct transform nir_opt_algebraic_transforms[] = { - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2932, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2932, 1242, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2900, 3475, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 52, 54, 4 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 55, 57, 4 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 58, 32, 0 }, - { 67, 68, 1 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 32, 0 }, - { 69, 73, 1 }, - { 74, 77, 1 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 60, 61, 0 }, - { 78, 81, 1 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 62, 61, 0 }, - { 64, 61, 0 }, - { 82, 81, 1 }, - { 83, 88, 1 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 61, 0 }, - { 66, 61, 0 }, - { 89, 95, 1 }, - { 96, 97, 1 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 98, 4200, 109 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 717, 719, 23 }, - { 720, 722, 23 }, - { 723, 725, 24 }, - { 3314, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3321, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3929, 3942, 82 }, - { 4329, 4337, 119 }, - { 4346, 4354, 119 }, - { 4363, 4370, 119 }, - { 3929, 4385, 119 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 124, 32, 0 }, - { 3929, 3942, 82 }, - { 4329, 4337, 119 }, - { 4346, 4354, 119 }, - { 4363, 4370, 119 }, - { 3929, 4385, 119 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3943, 3951, 82 }, - { 4338, 4345, 119 }, - { 4355, 4362, 119 }, - { 4371, 4378, 119 }, - { 3943, 4390, 119 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 125, 32, 0 }, - { 3943, 3951, 82 }, - { 4338, 4345, 119 }, - { 4355, 4362, 119 }, - { 4371, 4378, 119 }, - { 3943, 4390, 119 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3915, 3919, 78 }, - { 3920, 3922, 79 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 126, 32, 0 }, - { 3915, 3919, 78 }, - { 3920, 3922, 79 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3923, 3924, 80 }, - { 3925, 3928, 81 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 127, 32, 0 }, - { 3923, 3924, 80 }, - { 3925, 3928, 81 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 129, 16, 0 }, - { 131, 130, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 121, 0 }, - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 255, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 294, 295, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 294, 295, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 278, 279, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 278, 279, 7 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 297, 298, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 278, 279, 7 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 297, 298, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2938, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2938, 1242, 0 }, - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 250, 128, 0 }, - { 251, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 695, 697, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 695, 697, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 302, 274, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { 695, 697, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 302, 274, 0 }, - { 695, 697, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 341, 421, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 341, 421, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 307, 36, 0 }, - { 341, 421, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 307, 36, 0 }, - { 341, 421, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 307, 36, 0 }, - { 358, 360, 0 }, - { 341, 421, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 307, 36, 0 }, - { 358, 360, 0 }, - { 341, 421, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 344, 437, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 344, 437, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 308, 36, 0 }, - { 344, 437, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 308, 36, 0 }, - { 344, 437, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 308, 36, 0 }, - { 361, 363, 0 }, - { 344, 437, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 308, 36, 0 }, - { 361, 363, 0 }, - { 344, 437, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 466, 467, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 309, 36, 0 }, - { 466, 467, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 309, 36, 0 }, - { 373, 374, 8 }, - { 466, 467, 11 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 464, 465, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 463, 344, 0 }, - { 464, 465, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 310, 36, 0 }, - { 464, 465, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 310, 36, 0 }, - { 463, 344, 0 }, - { 464, 465, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 310, 36, 0 }, - { 375, 376, 9 }, - { 464, 465, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 310, 36, 0 }, - { 375, 376, 9 }, - { 463, 344, 0 }, - { 464, 465, 12 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 353, 453, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 353, 453, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 311, 36, 0 }, - { 353, 453, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 311, 36, 0 }, - { 353, 453, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 311, 36, 0 }, - { 367, 369, 0 }, - { 353, 453, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 311, 36, 0 }, - { 367, 369, 0 }, - { 353, 453, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 356, 461, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 356, 461, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 312, 36, 0 }, - { 356, 461, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 312, 36, 0 }, - { 356, 461, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 312, 36, 0 }, - { 370, 372, 0 }, - { 356, 461, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 312, 36, 0 }, - { 370, 372, 0 }, - { 356, 461, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 472, 473, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 313, 36, 0 }, - { 472, 473, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 313, 36, 0 }, - { 379, 380, 8 }, - { 472, 473, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 470, 471, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 314, 36, 0 }, - { 470, 471, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 314, 36, 0 }, - { 381, 382, 9 }, - { 470, 471, 14 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 315, 36, 0 }, - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 315, 36, 0 }, - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 316, 36, 0 }, - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 316, 36, 0 }, - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 315, 36, 0 }, - { 316, 36, 0 }, - { 364, 366, 0 }, - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 315, 36, 0 }, - { 316, 36, 0 }, - { 364, 366, 0 }, - { 347, 445, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 468, 469, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 317, 36, 0 }, - { 468, 469, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 318, 36, 0 }, - { 468, 469, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 317, 36, 0 }, - { 318, 36, 0 }, - { 377, 378, 8 }, - { 468, 469, 13 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 698, 703, 21 }, - { 704, 709, 21 }, - { 710, 716, 22 }, - { 3316, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 718, 741, 27 }, - { 721, 742, 27 }, - { 724, 743, 28 }, - { 3318, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 744, 746, 29 }, - { 3315, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 778, 783, 36 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 784, 117, 0 }, - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 815, 816, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 785, 117, 0 }, - { 815, 816, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 813, 814, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 786, 117, 0 }, - { 809, 812, 0 }, - { 813, 814, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 819, 812, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2937, 32, 0 }, - { 3407, 3408, 60 }, - { 3409, 416, 60 }, - { 3410, 3411, 60 }, - { 3441, 449, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2934, 1242, 0 }, - { 2936, 2935, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2934, 1242, 0 }, - { 2936, 2935, 0 }, - { 2937, 32, 0 }, - { 3407, 3408, 60 }, - { 3409, 416, 60 }, - { 3410, 3411, 60 }, - { 3441, 449, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 1502, 3964, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3368, 1090, 0 }, - { 3971, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1356, 32, 0 }, - { 1357, 63, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4105, 4108, 96 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4100, 4104, 96 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4100, 4104, 96 }, - { 5281, 11, 0 }, - { 5334, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4109, 4113, 97 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4109, 4113, 97 }, - { 5386, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4114, 4117, 97 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4114, 4117, 97 }, - { 5359, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2564, 2572, 48 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2566, 2573, 48 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2568, 2574, 48 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2570, 2575, 48 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2594, 2601, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2602, 2604, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2605, 2607, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2608, 2610, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2611, 2613, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2614, 2617, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2618, 2622, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2623, 2625, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2626, 2628, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2629, 2631, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2632, 2637, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2638, 2644, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2645, 2651, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2652, 2668, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2669, 2701, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2702, 2705, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2706, 2711, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2712, 2716, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2717, 2725, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2726, 2742, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2743, 2746, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2747, 2752, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2753, 2757, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2758, 2766, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2767, 2783, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2784, 2787, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2788, 2793, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2794, 2798, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2799, 2807, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2808, 2824, 49 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3636, 3637, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3636, 3637, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2965, 2968, 52 }, - { 2944, 2947, 52 }, - { 2951, 2954, 52 }, - { 2969, 2972, 52 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2973, 2975, 52 }, - { 2957, 2959, 52 }, - { 2962, 2964, 52 }, - { 2976, 2978, 52 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2983, 2986, 53 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2983, 2986, 53 }, - { 3007, 32, 0 }, - { 3008, 261, 0 }, - { 3009, 3006, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2983, 2986, 53 }, - { 3010, 2981, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2983, 2986, 53 }, - { 3007, 32, 0 }, - { 3008, 261, 0 }, - { 3009, 3006, 0 }, - { 3010, 2981, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2999, 3052, 56 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3047, 3049, 55 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3046, 3028, 0 }, - { 3047, 3049, 55 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3054, 3136, 58 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3137, 3206, 58 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3245, 36, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3317, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3369, 3468, 63 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2894, 3477, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3393, 3478, 67 }, - { 3393, 3478, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3395, 3479, 67 }, - { 3395, 3479, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4032, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3429, 422, 60 }, - { 3430, 425, 60 }, - { 3431, 429, 60 }, - { 3432, 432, 60 }, - { 3445, 454, 61 }, - { 3446, 457, 61 }, - { 4032, 128, 0 }, - { 4034, 4036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4033, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3433, 403, 60 }, - { 3434, 407, 60 }, - { 3435, 412, 60 }, - { 3436, 416, 60 }, - { 3447, 446, 61 }, - { 3448, 449, 61 }, - { 4033, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3469, 3472, 64 }, - { 3469, 4192, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3473, 3474, 65 }, - { 3473, 4189, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3473, 3474, 65 }, - { 3473, 4189, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3473, 3474, 65 }, - { 3473, 4189, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3473, 3474, 65 }, - { 3473, 4189, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3481, 4190, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3488, 4191, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3632, 16, 0 }, - { 3633, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3634, 3635, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3638, 3640, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3641, 3642, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4090, 4093, 95 }, - { 4095, 4099, 95 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4067, 4071, 90 }, - { 4067, 4075, 91 }, - { 4067, 4079, 92 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4080, 4084, 91 }, - { 4080, 4086, 93 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3859, 3862, 71 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3863, 3866, 71 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3867, 3870, 72 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3871, 3872, 73 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3877, 3881, 74 }, - { 3877, 3980, 85 }, - { 3877, 3982, 86 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3882, 3885, 75 }, - { 3895, 3899, 76 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3886, 3888, 75 }, - { 3900, 3902, 76 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3889, 3891, 75 }, - { 3903, 3907, 76 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3892, 3894, 75 }, - { 3908, 3910, 76 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3911, 3912, 77 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3913, 3914, 77 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3986, 3989, 87 }, - { 3986, 4060, 89 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3990, 3992, 87 }, - { 3990, 4066, 89 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3993, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4087, 4088, 94 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4119, 4125, 98 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4127, 4133, 99 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4134, 4141, 100 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4142, 4149, 101 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4150, 4156, 102 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4157, 4164, 103 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4165, 4173, 104 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4174, 4183, 105 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4193, 4195, 107 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4201, 964, 110 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4202, 4206, 111 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4207, 4211, 112 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4212, 4213, 113 }, - { 4212, 49, 110 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4214, 4207, 114 }, - { 4214, 4216, 112 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4217, 4202, 115 }, - { 4217, 49, 111 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4218, 4213, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4219, 565, 0 }, - { 4220, 4221, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4218, 4213, 0 }, - { 4219, 565, 0 }, - { 4220, 4221, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4219, 565, 0 }, - { 4220, 4221, 0 }, - { 4222, 4224, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4218, 4213, 0 }, - { 4219, 565, 0 }, - { 4220, 4221, 0 }, - { 4222, 4224, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4225, 4226, 1 }, - { 4228, 4232, 1 }, - { 4233, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4432, 770, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4433, 6, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4434, 11, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4435, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5412, 5432, 122 }, - { 5434, 5452, 122 }, - { 5454, 5475, 122 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5811, 117, 124 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5812, 117, 124 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5813, 117, 124 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5814, 117, 124 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5815, 117, 124 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5816, 117, 124 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5818, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5821, 141, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5819, 141, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5819, 141, 0 }, - { 5821, 141, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6112, 6117, 125 }, - { 6118, 6122, 125 }, - { 6123, 6128, 125 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5270, 5268, 0 }, - { 5323, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5295, 5268, 0 }, - { 5348, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5375, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 3668, 3669, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 3668, 3669, 0 }, - { 3712, 3669, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 3651, 3652, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 1037, 1040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5807, 5810, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5270, 5268, 0 }, - { 5323, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5295, 5268, 0 }, - { 5348, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5375, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5270, 5268, 0 }, - { 5323, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5295, 5268, 0 }, - { 5348, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5375, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2843, 2844, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5270, 5268, 0 }, - { 5295, 5268, 0 }, - { 5323, 49, 0 }, - { 5348, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5270, 5268, 0 }, - { 5323, 49, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5270, 5268, 0 }, - { 5323, 49, 0 }, - { 5375, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5295, 5268, 0 }, - { 5348, 49, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5295, 5268, 0 }, - { 5348, 49, 0 }, - { 5375, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5375, 49, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3758, 0, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 32, 0 }, - { 69, 73, 1 }, - { 74, 77, 1 }, - { 3758, 0, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 4028, 4029, 88 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 217, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 3698, 3699, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 3698, 3699, 0 }, - { 3740, 3699, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 322, 324, 0 }, - { 340, 341, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 326, 327, 0 }, - { 343, 344, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 333, 334, 0 }, - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 336, 337, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 329, 331, 0 }, - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5803, 5806, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 185, 187, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 192, 194, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 220, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 220, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 340, 341, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 343, 344, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 343, 344, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5266, 4247, 0 }, - { 5292, 4247, 0 }, - { 5320, 4260, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5372, 4260, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3520, 3473, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3523, 3474, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3774, 3759, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3776, 3762, 0 }, - { 3781, 3762, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3777, 3765, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3778, 3768, 0 }, - { 3782, 3768, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3779, 3771, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3040, 3042, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3852, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3852, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3852, 99, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3852, 99, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3211, 770, 0 }, - { 3212, 1144, 0 }, - { 3215, 3216, 0 }, - { 3217, 3218, 0 }, - { 3221, 3222, 0 }, - { 3223, 3224, 0 }, - { 3225, 3226, 0 }, - { 3227, 3228, 0 }, - { 3230, 3231, 0 }, - { 3232, 3233, 0 }, - { 3234, 3235, 59 }, - { 3236, 3237, 59 }, - { 3240, 3241, 59 }, - { 3242, 3243, 59 }, - { 3244, 3, 0 }, - { 3246, 2416, 0 }, - { 3247, 3249, 0 }, - { 3251, 1241, 0 }, - { 3252, 3248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5886, 5887, 0 }, - { 5890, 5887, 0 }, - { 5893, 5887, 0 }, - { 5896, 5887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5860, 5861, 0 }, - { 5864, 5861, 0 }, - { 5867, 5861, 0 }, - { 5870, 5861, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6055, 6056, 0 }, - { 6055, 6056, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6091, 6092, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6087, 6088, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5873, 5874, 0 }, - { 5877, 5874, 0 }, - { 5880, 5874, 0 }, - { 5883, 5874, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5845, 5847, 0 }, - { 5850, 5847, 0 }, - { 5853, 5847, 0 }, - { 5856, 5847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5899, 5900, 0 }, - { 5903, 5900, 0 }, - { 5906, 5900, 0 }, - { 5909, 5900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5912, 5913, 0 }, - { 5916, 5913, 0 }, - { 5919, 5913, 0 }, - { 5922, 5913, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5824, 5825, 0 }, - { 5828, 5825, 0 }, - { 5830, 5832, 0 }, - { 5834, 5832, 0 }, - { 5837, 5839, 0 }, - { 5841, 5839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1323, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1323, 1324, 0 }, - { 1326, 1324, 0 }, - { 1329, 1331, 0 }, - { 1334, 1331, 0 }, - { 1338, 1340, 0 }, - { 1343, 1340, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3853, 3854, 0 }, - { 3856, 3858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6047, 6048, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1809, 1811, 0 }, - { 1918, 1920, 0 }, - { 2012, 2014, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5938, 5939, 0 }, - { 5942, 5939, 0 }, - { 5945, 5939, 0 }, - { 5948, 5939, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5951, 5952, 0 }, - { 5955, 5952, 0 }, - { 5958, 5952, 0 }, - { 5961, 5952, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5964, 5965, 0 }, - { 5968, 5965, 0 }, - { 5971, 5965, 0 }, - { 5974, 5965, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5977, 5978, 0 }, - { 5981, 5978, 0 }, - { 5984, 5978, 0 }, - { 5987, 5978, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5990, 5991, 0 }, - { 5994, 5991, 0 }, - { 5997, 5991, 0 }, - { 6000, 5991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6003, 6004, 0 }, - { 6007, 6004, 0 }, - { 6010, 6004, 0 }, - { 6013, 6004, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5262, 5257, 0 }, - { 5315, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5287, 5257, 0 }, - { 5340, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5392, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5367, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5925, 5926, 0 }, - { 5929, 5926, 0 }, - { 5932, 5926, 0 }, - { 5935, 5926, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6051, 6052, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6016, 6017, 0 }, - { 6020, 6017, 0 }, - { 6024, 6026, 0 }, - { 6029, 6026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6043, 6044, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6034, 6036, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6039, 6040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6059, 6060, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6063, 6064, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6067, 6068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6071, 6072, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6075, 6076, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6079, 6080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 6083, 6084, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2300, 2301, 0 }, - { 2331, 2332, 0 }, - { 2361, 959, 0 }, - { 2391, 2392, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2300, 2301, 0 }, - { 2331, 2332, 0 }, - { 2361, 959, 0 }, - { 2391, 2392, 0 }, - { 2932, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2932, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 836, 838, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 840, 849, 0 }, - { 862, 870, 0 }, - { 883, 890, 0 }, - { 903, 911, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1033, 1035, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1003, 1004, 0 }, - { 1010, 1011, 0 }, - { 1017, 1018, 0 }, - { 1026, 1027, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 923, 926, 0 }, - { 931, 934, 0 }, - { 939, 942, 0 }, - { 947, 950, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 923, 926, 0 }, - { 931, 934, 0 }, - { 939, 942, 0 }, - { 947, 950, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 923, 926, 0 }, - { 931, 934, 0 }, - { 939, 942, 0 }, - { 947, 950, 0 }, - { 2300, 2301, 0 }, - { 2331, 2332, 0 }, - { 2361, 959, 0 }, - { 2391, 2392, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 923, 926, 0 }, - { 931, 934, 0 }, - { 939, 942, 0 }, - { 947, 950, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 927, 926, 0 }, - { 935, 934, 0 }, - { 943, 942, 0 }, - { 951, 950, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 927, 926, 0 }, - { 935, 934, 0 }, - { 943, 942, 0 }, - { 951, 950, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 927, 926, 0 }, - { 935, 934, 0 }, - { 943, 942, 0 }, - { 951, 950, 0 }, - { 2300, 2301, 0 }, - { 2331, 2332, 0 }, - { 2361, 959, 0 }, - { 2391, 2392, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 927, 926, 0 }, - { 935, 934, 0 }, - { 943, 942, 0 }, - { 951, 950, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { 3510, 3511, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { 3515, 3516, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4030, 4031, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { 4030, 4031, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2300, 2301, 0 }, - { 2331, 2332, 0 }, - { 2361, 959, 0 }, - { 2391, 2392, 0 }, - { 4030, 4031, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4030, 4031, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 963, 964, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 958, 959, 0 }, - { 1005, 1004, 0 }, - { 1012, 1011, 0 }, - { 1020, 1018, 0 }, - { 1029, 1027, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 968, 970, 0 }, - { 974, 976, 0 }, - { 980, 982, 0 }, - { 986, 988, 0 }, - { 992, 994, 0 }, - { 998, 1000, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2886, 2887, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2886, 2887, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 3742, 3744, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2885, 3, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1007, 1006, 0 }, - { 1014, 1013, 0 }, - { 1022, 1021, 0 }, - { 1031, 1030, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2872, 61, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2229, 2230, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 2890, 2891, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 2886, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2886, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2446, 2447, 0 }, - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 197, 199, 0 }, - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1095, 1090, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2282, 2284, 44 }, - { 2282, 2290, 46 }, - { 2313, 2315, 44 }, - { 2313, 2321, 46 }, - { 2343, 2345, 44 }, - { 2343, 2351, 46 }, - { 2373, 2375, 44 }, - { 2373, 2381, 46 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2294, 2295, 47 }, - { 2325, 2326, 47 }, - { 2355, 2356, 47 }, - { 2385, 2386, 47 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2220, 2222, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5713, 5714, 0 }, - { 5716, 5717, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5702, 5703, 0 }, - { 5706, 5707, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5708, 5709, 0 }, - { 5711, 5712, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1089, 1090, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1789, 1790, 0 }, - { 1898, 1899, 0 }, - { 1992, 1993, 0 }, - { 2868, 32, 0 }, - { 5713, 5714, 0 }, - { 5716, 5717, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2845, 2844, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2225, 2226, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2928, 2929, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1092, 1090, 0 }, - { 1643, 1645, 0 }, - { 1646, 1648, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1092, 1090, 0 }, - { 1643, 1645, 0 }, - { 1646, 1648, 0 }, - { 1659, 1645, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1092, 1090, 0 }, - { 1643, 1645, 0 }, - { 1646, 1648, 0 }, - { 1772, 1773, 0 }, - { 1774, 1773, 0 }, - { 1881, 1882, 0 }, - { 1883, 1882, 0 }, - { 1975, 1976, 0 }, - { 1977, 1976, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1092, 1090, 0 }, - { 1643, 1645, 0 }, - { 1646, 1648, 0 }, - { 1659, 1645, 0 }, - { 1772, 1773, 0 }, - { 1774, 1773, 0 }, - { 1881, 1882, 0 }, - { 1883, 1882, 0 }, - { 1975, 1976, 0 }, - { 1977, 1976, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1092, 1090, 0 }, - { 1643, 1645, 0 }, - { 1646, 1648, 0 }, - { 1664, 1648, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1092, 1090, 0 }, - { 1643, 1645, 0 }, - { 1646, 1648, 0 }, - { 1664, 1648, 0 }, - { 1772, 1773, 0 }, - { 1774, 1773, 0 }, - { 1881, 1882, 0 }, - { 1883, 1882, 0 }, - { 1975, 1976, 0 }, - { 1977, 1976, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1092, 1090, 0 }, - { 1643, 1645, 0 }, - { 1646, 1648, 0 }, - { 1659, 1645, 0 }, - { 1664, 1648, 0 }, - { 1772, 1773, 0 }, - { 1774, 1773, 0 }, - { 1881, 1882, 0 }, - { 1883, 1882, 0 }, - { 1975, 1976, 0 }, - { 1977, 1976, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1649, 1651, 0 }, - { 1652, 1654, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1649, 1651, 0 }, - { 1652, 1654, 0 }, - { 1667, 1651, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1272, 1273, 39 }, - { 1649, 1651, 0 }, - { 1652, 1654, 0 }, - { 1775, 1776, 0 }, - { 1777, 1776, 0 }, - { 1884, 1885, 0 }, - { 1886, 1885, 0 }, - { 1978, 1979, 0 }, - { 1980, 1979, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1272, 1273, 39 }, - { 1649, 1651, 0 }, - { 1652, 1654, 0 }, - { 1667, 1651, 0 }, - { 1775, 1776, 0 }, - { 1777, 1776, 0 }, - { 1884, 1885, 0 }, - { 1886, 1885, 0 }, - { 1978, 1979, 0 }, - { 1980, 1979, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1649, 1651, 0 }, - { 1652, 1654, 0 }, - { 1670, 1654, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1272, 1273, 39 }, - { 1649, 1651, 0 }, - { 1652, 1654, 0 }, - { 1670, 1654, 0 }, - { 1775, 1776, 0 }, - { 1777, 1776, 0 }, - { 1884, 1885, 0 }, - { 1886, 1885, 0 }, - { 1978, 1979, 0 }, - { 1980, 1979, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1272, 1273, 39 }, - { 1649, 1651, 0 }, - { 1652, 1654, 0 }, - { 1667, 1651, 0 }, - { 1670, 1654, 0 }, - { 1775, 1776, 0 }, - { 1777, 1776, 0 }, - { 1884, 1885, 0 }, - { 1886, 1885, 0 }, - { 1978, 1979, 0 }, - { 1980, 1979, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1791, 1792, 0 }, - { 1900, 1901, 0 }, - { 1994, 1995, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1097, 1090, 0 }, - { 1711, 1712, 0 }, - { 1713, 1714, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1099, 1090, 0 }, - { 1719, 1720, 0 }, - { 1721, 1722, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1715, 1716, 0 }, - { 1717, 1718, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1723, 1724, 0 }, - { 1725, 1726, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2208, 2209, 0 }, - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5298, 2191, 0 }, - { 5326, 2199, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2203, 2205, 0 }, - { 2868, 32, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2212, 2213, 0 }, - { 2868, 32, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5378, 2199, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2216, 2217, 0 }, - { 2868, 32, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2883, 3, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2884, 2506, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2884, 2506, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 3746, 3748, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2876, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2253, 2254, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 202, 204, 0 }, - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 2884, 2506, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2443, 2445, 0 }, - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 2884, 2506, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2291, 2293, 47 }, - { 2322, 2324, 47 }, - { 2352, 2354, 47 }, - { 2382, 2384, 47 }, - { 2404, 2405, 0 }, - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2408, 2409, 0 }, - { 2412, 2413, 0 }, - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2287, 2288, 45 }, - { 2287, 2296, 46 }, - { 2318, 2319, 45 }, - { 2318, 2327, 46 }, - { 2348, 2349, 45 }, - { 2348, 2357, 46 }, - { 2378, 2379, 45 }, - { 2378, 2387, 46 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2248, 2250, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1780, 1783, 0 }, - { 1889, 1892, 0 }, - { 1983, 1986, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2846, 2847, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2251, 2252, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 2930, 2931, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1610, 1612, 0 }, - { 1616, 1618, 0 }, - { 1752, 1065, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1610, 1612, 0 }, - { 1616, 1618, 0 }, - { 1631, 1612, 0 }, - { 1752, 1065, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1610, 1612, 0 }, - { 1616, 1618, 0 }, - { 1752, 1065, 0 }, - { 1758, 1760, 0 }, - { 1763, 1760, 0 }, - { 1867, 1869, 0 }, - { 1872, 1869, 0 }, - { 1961, 1963, 0 }, - { 1966, 1963, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1610, 1612, 0 }, - { 1616, 1618, 0 }, - { 1631, 1612, 0 }, - { 1752, 1065, 0 }, - { 1758, 1760, 0 }, - { 1763, 1760, 0 }, - { 1867, 1869, 0 }, - { 1872, 1869, 0 }, - { 1961, 1963, 0 }, - { 1966, 1963, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1610, 1612, 0 }, - { 1616, 1618, 0 }, - { 1636, 1618, 0 }, - { 1752, 1065, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1610, 1612, 0 }, - { 1616, 1618, 0 }, - { 1636, 1618, 0 }, - { 1752, 1065, 0 }, - { 1758, 1760, 0 }, - { 1763, 1760, 0 }, - { 1867, 1869, 0 }, - { 1872, 1869, 0 }, - { 1961, 1963, 0 }, - { 1966, 1963, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1610, 1612, 0 }, - { 1616, 1618, 0 }, - { 1631, 1612, 0 }, - { 1636, 1618, 0 }, - { 1752, 1065, 0 }, - { 1758, 1760, 0 }, - { 1763, 1760, 0 }, - { 1867, 1869, 0 }, - { 1872, 1869, 0 }, - { 1961, 1963, 0 }, - { 1966, 1963, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1621, 1623, 0 }, - { 1626, 1628, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1621, 1623, 0 }, - { 1626, 1628, 0 }, - { 1639, 1623, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1621, 1623, 0 }, - { 1626, 1628, 0 }, - { 1766, 1768, 0 }, - { 1771, 1768, 0 }, - { 1875, 1877, 0 }, - { 1880, 1877, 0 }, - { 1969, 1971, 0 }, - { 1974, 1971, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1621, 1623, 0 }, - { 1626, 1628, 0 }, - { 1639, 1623, 0 }, - { 1766, 1768, 0 }, - { 1771, 1768, 0 }, - { 1875, 1877, 0 }, - { 1880, 1877, 0 }, - { 1969, 1971, 0 }, - { 1974, 1971, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1621, 1623, 0 }, - { 1626, 1628, 0 }, - { 1642, 1628, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1621, 1623, 0 }, - { 1626, 1628, 0 }, - { 1642, 1628, 0 }, - { 1766, 1768, 0 }, - { 1771, 1768, 0 }, - { 1875, 1877, 0 }, - { 1880, 1877, 0 }, - { 1969, 1971, 0 }, - { 1974, 1971, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1621, 1623, 0 }, - { 1626, 1628, 0 }, - { 1639, 1623, 0 }, - { 1642, 1628, 0 }, - { 1766, 1768, 0 }, - { 1771, 1768, 0 }, - { 1875, 1877, 0 }, - { 1880, 1877, 0 }, - { 1969, 1971, 0 }, - { 1974, 1971, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1786, 1788, 0 }, - { 1895, 1897, 0 }, - { 1989, 1991, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1673, 1675, 0 }, - { 1678, 1680, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1693, 1695, 0 }, - { 1698, 1700, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1683, 1685, 0 }, - { 1688, 1690, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1703, 1705, 0 }, - { 1708, 1710, 0 }, - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2242, 2243, 0 }, - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5301, 2233, 0 }, - { 5329, 2237, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5329, 2237, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2239, 2241, 0 }, - { 2873, 32, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5301, 2233, 0 }, - { 5354, 2237, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2244, 2245, 0 }, - { 2873, 32, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5381, 2237, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2246, 2247, 0 }, - { 2873, 32, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 3521, 3473, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 3524, 3474, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5279, 2257, 0 }, - { 5332, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5304, 2257, 0 }, - { 5357, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5279, 2257, 0 }, - { 5332, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5304, 2257, 0 }, - { 5357, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2880, 3, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2880, 3, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 3750, 3752, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2277, 2278, 0 }, - { 2877, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2272, 2274, 0 }, - { 2877, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2275, 2276, 0 }, - { 2877, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2266, 2267, 0 }, - { 2877, 61, 0 }, - { 5279, 2257, 0 }, - { 5332, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5279, 2257, 0 }, - { 5304, 2257, 0 }, - { 5332, 2261, 0 }, - { 5357, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5279, 2257, 0 }, - { 5332, 2261, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5279, 2257, 0 }, - { 5332, 2261, 0 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5279, 2257, 0 }, - { 5332, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2263, 2265, 0 }, - { 2877, 61, 0 }, - { 5304, 2257, 0 }, - { 5357, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5304, 2257, 0 }, - { 5357, 2261, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5304, 2257, 0 }, - { 5357, 2261, 0 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5304, 2257, 0 }, - { 5357, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2268, 2269, 0 }, - { 2877, 61, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5384, 2261, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2270, 2271, 0 }, - { 2877, 61, 0 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2304, 2305, 0 }, - { 2335, 2336, 0 }, - { 2364, 2365, 0 }, - { 2395, 2396, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2304, 2305, 0 }, - { 2335, 2336, 0 }, - { 2364, 2365, 0 }, - { 2395, 2396, 0 }, - { 2938, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2938, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 928, 930, 0 }, - { 936, 938, 0 }, - { 944, 946, 0 }, - { 952, 954, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 928, 930, 0 }, - { 936, 938, 0 }, - { 944, 946, 0 }, - { 952, 954, 0 }, - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 3439, 454, 61 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 928, 930, 0 }, - { 936, 938, 0 }, - { 944, 946, 0 }, - { 952, 954, 0 }, - { 2304, 2305, 0 }, - { 2335, 2336, 0 }, - { 2364, 2365, 0 }, - { 2395, 2396, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 928, 930, 0 }, - { 936, 938, 0 }, - { 944, 946, 0 }, - { 952, 954, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 851, 853, 0 }, - { 872, 874, 0 }, - { 892, 894, 0 }, - { 913, 915, 0 }, - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { 3512, 3509, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { 3517, 3514, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2302, 2303, 0 }, - { 2333, 2334, 0 }, - { 2362, 2363, 0 }, - { 2393, 2394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2302, 2303, 0 }, - { 2333, 2334, 0 }, - { 2362, 2363, 0 }, - { 2393, 2394, 0 }, - { 2934, 1242, 0 }, - { 2936, 2935, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2937, 32, 0 }, - { 3407, 3408, 60 }, - { 3409, 416, 60 }, - { 3410, 3411, 60 }, - { 3440, 446, 61 }, - { 3441, 449, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2937, 32, 0 }, - { 3407, 3408, 60 }, - { 3409, 416, 60 }, - { 3410, 3411, 60 }, - { 3441, 449, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2302, 2303, 0 }, - { 2333, 2334, 0 }, - { 2362, 2363, 0 }, - { 2393, 2394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 855, 860, 0 }, - { 876, 881, 0 }, - { 896, 901, 0 }, - { 917, 922, 0 }, - { 2937, 32, 0 }, - { 3407, 3408, 60 }, - { 3409, 416, 60 }, - { 3410, 3411, 60 }, - { 3441, 449, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3592, 3593, 0 }, - { 3595, 429, 0 }, - { 3596, 425, 0 }, - { 3597, 422, 0 }, - { 3599, 3570, 0 }, - { 3601, 3565, 0 }, - { 3603, 3560, 0 }, - { 3605, 3557, 0 }, - { 3607, 3553, 0 }, - { 3609, 3549, 0 }, - { 3611, 3612, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3542, 3402, 0 }, - { 3544, 425, 0 }, - { 3545, 429, 0 }, - { 3546, 432, 0 }, - { 3548, 3549, 0 }, - { 3551, 3553, 0 }, - { 3555, 3557, 0 }, - { 3558, 3560, 0 }, - { 3563, 3565, 0 }, - { 3568, 3570, 0 }, - { 3571, 3406, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3572, 3402, 0 }, - { 3574, 425, 0 }, - { 3575, 429, 0 }, - { 3576, 432, 0 }, - { 3578, 3549, 0 }, - { 3580, 3553, 0 }, - { 3582, 3557, 0 }, - { 3584, 3560, 0 }, - { 3586, 3565, 0 }, - { 3588, 3570, 0 }, - { 3589, 3406, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3438, 3422, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3437, 3422, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3590, 3416, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3534, 3535, 0 }, - { 3536, 3537, 0 }, - { 3538, 3539, 0 }, - { 3540, 3541, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3613, 3614, 0 }, - { 3615, 412, 0 }, - { 3616, 407, 0 }, - { 3617, 403, 0 }, - { 3618, 3619, 0 }, - { 3620, 3621, 0 }, - { 3622, 3623, 0 }, - { 3624, 3625, 0 }, - { 3626, 3627, 0 }, - { 3628, 3629, 0 }, - { 3630, 3631, 0 }, - { 4100, 4104, 96 }, - { 5281, 11, 0 }, - { 5334, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3526, 3527, 0 }, - { 3528, 3529, 0 }, - { 3530, 3531, 0 }, - { 3532, 3533, 0 }, - { 4100, 4104, 96 }, - { 5281, 11, 0 }, - { 5334, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3386, 21, 0 }, - { 3369, 3468, 63 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 48, 49, 0 }, - { 2900, 3475, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 51, 49, 0 }, - { 2900, 3475, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2900, 3475, 66 }, - { 3485, 2900, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3378, 16, 0 }, - { 2900, 3475, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3375, 16, 0 }, - { 2900, 3475, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3370, 16, 0 }, - { 2900, 3475, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3373, 2595, 0 }, - { 2900, 3475, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 3656, 3658, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 3656, 3658, 0 }, - { 3701, 3658, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 3664, 3666, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 3664, 3666, 0 }, - { 3705, 3666, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 5794, 5797, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { 5794, 5797, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 262, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3038, 3039, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2848, 1279, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3043, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 3683, 3685, 0 }, - { 3687, 3685, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 3683, 3685, 0 }, - { 3687, 3685, 0 }, - { 3714, 3685, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 3690, 3692, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 3690, 3692, 0 }, - { 3721, 3723, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 3694, 3696, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 3694, 3696, 0 }, - { 3731, 3733, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 5790, 5793, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 161, 163, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 225, 3, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 143, 145, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 177, 172, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 111, 99, 0 }, - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 113, 112, 0 }, - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2565, 2564, 0 }, - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2567, 2566, 0 }, - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2569, 2568, 0 }, - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2571, 2570, 0 }, - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3320, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 166, 168, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 294, 295, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 294, 295, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 166, 168, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { 3708, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { 3708, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 166, 168, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { 3708, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3674, 3676, 0 }, - { 3708, 3676, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3679, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3679, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3679, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3679, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 166, 168, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3648, 3649, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3648, 3649, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3648, 3649, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { 3648, 3649, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 476, 477, 15 }, - { 551, 552, 17 }, - { 617, 618, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 476, 477, 15 }, - { 551, 552, 17 }, - { 617, 618, 19 }, - { 695, 697, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 490, 493, 15 }, - { 562, 564, 17 }, - { 631, 634, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 490, 493, 15 }, - { 562, 564, 17 }, - { 631, 634, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 476, 477, 15 }, - { 490, 493, 15 }, - { 551, 552, 17 }, - { 562, 564, 17 }, - { 617, 618, 19 }, - { 631, 634, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 304, 306, 0 }, - { 480, 482, 15 }, - { 553, 555, 17 }, - { 621, 623, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 304, 306, 0 }, - { 480, 482, 15 }, - { 553, 555, 17 }, - { 621, 623, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 304, 306, 0 }, - { 476, 477, 15 }, - { 480, 482, 15 }, - { 551, 552, 17 }, - { 553, 555, 17 }, - { 617, 618, 19 }, - { 621, 623, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { 476, 477, 15 }, - { 551, 552, 17 }, - { 617, 618, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { 476, 477, 15 }, - { 551, 552, 17 }, - { 617, 618, 19 }, - { 695, 697, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { 490, 493, 15 }, - { 562, 564, 17 }, - { 631, 634, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 302, 274, 0 }, - { 490, 493, 15 }, - { 562, 564, 17 }, - { 631, 634, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { 476, 477, 15 }, - { 490, 493, 15 }, - { 551, 552, 17 }, - { 562, 564, 17 }, - { 617, 618, 19 }, - { 631, 634, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { 304, 306, 0 }, - { 480, 482, 15 }, - { 553, 555, 17 }, - { 621, 623, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 302, 274, 0 }, - { 304, 306, 0 }, - { 480, 482, 15 }, - { 553, 555, 17 }, - { 621, 623, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 302, 274, 0 }, - { 304, 306, 0 }, - { 476, 477, 15 }, - { 480, 482, 15 }, - { 551, 552, 17 }, - { 553, 555, 17 }, - { 617, 618, 19 }, - { 621, 623, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 490, 493, 15 }, - { 562, 564, 17 }, - { 631, 634, 19 }, - { 691, 693, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 490, 493, 15 }, - { 562, 564, 17 }, - { 631, 634, 19 }, - { 691, 693, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 476, 477, 15 }, - { 490, 493, 15 }, - { 551, 552, 17 }, - { 562, 564, 17 }, - { 617, 618, 19 }, - { 631, 634, 19 }, - { 691, 693, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 304, 306, 0 }, - { 480, 482, 15 }, - { 486, 488, 15 }, - { 553, 555, 17 }, - { 558, 560, 17 }, - { 621, 623, 19 }, - { 627, 629, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 299, 0, 0 }, - { 300, 3, 0 }, - { 301, 0, 0 }, - { 304, 306, 0 }, - { 480, 482, 15 }, - { 486, 488, 15 }, - { 553, 555, 17 }, - { 558, 560, 17 }, - { 621, 623, 19 }, - { 627, 629, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 301, 0, 0 }, - { 304, 306, 0 }, - { 476, 477, 15 }, - { 480, 482, 15 }, - { 486, 488, 15 }, - { 551, 552, 17 }, - { 553, 555, 17 }, - { 558, 560, 17 }, - { 617, 618, 19 }, - { 621, 623, 19 }, - { 627, 629, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2980, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1538, 1540, 0 }, - { 228, 1530, 41 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 1543, 228, 0 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1542, 1541, 0 }, - { 228, 1530, 41 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1817, 11, 0 }, - { 1926, 16, 0 }, - { 2020, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4414, 3262, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3282, 3283, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1815, 11, 0 }, - { 1924, 16, 0 }, - { 2018, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1841, 1842, 0 }, - { 1849, 1850, 0 }, - { 1859, 1860, 0 }, - { 1947, 1948, 0 }, - { 1955, 1956, 0 }, - { 2041, 2042, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2164, 2165, 0 }, - { 3310, 2169, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1204, 1205, 0 }, - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2842, 1270, 0 }, - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1204, 1205, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1204, 1205, 0 }, - { 1223, 1225, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1118, 1119, 0 }, - { 2842, 1270, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1246, 1121, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1135, 1068, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { 5719, 5722, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1239, 1144, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1256, 1121, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2827, 1062, 0 }, - { 2835, 1059, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2828, 1059, 0 }, - { 2836, 1062, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2825, 1068, 0 }, - { 2833, 1065, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2826, 1065, 0 }, - { 2834, 1068, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1204, 1205, 0 }, - { 2842, 1270, 0 }, - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1104, 1105, 0 }, - { 2842, 1270, 0 }, - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1176, 1175, 0 }, - { 1419, 1175, 0 }, - { 1423, 1175, 0 }, - { 1427, 1175, 0 }, - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2866, 1248, 0 }, - { 5189, 5191, 121 }, - { 5206, 5191, 121 }, - { 5214, 5215, 0 }, - { 5228, 5230, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1184, 1185, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2473, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2467, 2468, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1265, 1266, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1110, 1111, 0 }, - { 1184, 1185, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1252, 1253, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1129, 1131, 0 }, - { 1139, 1140, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { 5743, 5748, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2473, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1263, 1264, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2467, 2468, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1184, 1185, 0 }, - { 1200, 1201, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 2473, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 2467, 2468, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 1209, 1212, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1108, 1109, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1101, 1091, 0 }, - { 1184, 1185, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1251, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { 5735, 5738, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2469, 1091, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2469, 1091, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1184, 1185, 0 }, - { 2469, 1091, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2469, 1091, 0 }, - { 2473, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2467, 2468, 0 }, - { 2469, 1091, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1261, 1262, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2474, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2474, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1184, 1185, 0 }, - { 2474, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2473, 1090, 0 }, - { 2474, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2467, 2468, 0 }, - { 2474, 1090, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { 5196, 5197, 121 }, - { 5203, 5204, 121 }, - { 5209, 5197, 121 }, - { 5213, 5204, 121 }, - { 5220, 5221, 0 }, - { 5225, 5226, 0 }, - { 5235, 5236, 0 }, - { 5241, 5242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1186, 1187, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2471, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2475, 2476, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1269, 1270, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1114, 1115, 0 }, - { 1186, 1187, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1249, 1250, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { 5753, 5756, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1143, 1144, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2471, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1259, 1260, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2475, 2476, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1202, 1203, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1202, 1203, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1186, 1187, 0 }, - { 1202, 1203, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1202, 1203, 0 }, - { 2471, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1202, 1203, 0 }, - { 2475, 2476, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1202, 1203, 0 }, - { 1218, 1219, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1112, 1113, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1102, 1103, 0 }, - { 1186, 1187, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1247, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1134, 1059, 0 }, - { 1138, 1115, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { 5749, 5752, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2477, 1103, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2477, 1103, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1186, 1187, 0 }, - { 2477, 1103, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2471, 1248, 0 }, - { 2477, 1103, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2475, 2476, 0 }, - { 2477, 1103, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1257, 1258, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2472, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2472, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1186, 1187, 0 }, - { 2472, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2471, 1248, 0 }, - { 2472, 1248, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2472, 1248, 0 }, - { 2475, 2476, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { 5194, 5195, 121 }, - { 5200, 5202, 121 }, - { 5208, 5195, 121 }, - { 5212, 5202, 121 }, - { 5218, 5219, 0 }, - { 5223, 5224, 0 }, - { 5233, 5234, 0 }, - { 5238, 5240, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1206, 1207, 0 }, - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2841, 1266, 0 }, - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1206, 1207, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1206, 1207, 0 }, - { 1231, 1232, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1116, 1117, 0 }, - { 2841, 1266, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1245, 1123, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1136, 1065, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { 5723, 5726, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1240, 770, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1255, 1123, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2831, 1062, 0 }, - { 2839, 1059, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2832, 1059, 0 }, - { 2840, 1062, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2829, 1068, 0 }, - { 2837, 1065, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2830, 1065, 0 }, - { 2838, 1068, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1206, 1207, 0 }, - { 2841, 1266, 0 }, - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1106, 1107, 0 }, - { 2841, 1266, 0 }, - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1165, 1164, 0 }, - { 1420, 1404, 0 }, - { 1424, 1404, 0 }, - { 1428, 1404, 0 }, - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2867, 1090, 0 }, - { 5192, 5193, 121 }, - { 5207, 5193, 121 }, - { 5216, 5217, 0 }, - { 5231, 5232, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1237, 1238, 0 }, - { 2860, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 209, 210, 0 }, - { 2860, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1122, 1123, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1125, 1123, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1237, 1238, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 209, 210, 0 }, - { 1436, 1435, 0 }, - { 1437, 1438, 0 }, - { 1458, 1457, 0 }, - { 1459, 1460, 0 }, - { 1480, 1479, 0 }, - { 1481, 1482, 0 }, - { 1500, 1499, 0 }, - { 1501, 1502, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 214, 215, 0 }, - { 1441, 1438, 0 }, - { 1445, 1435, 0 }, - { 1463, 1460, 0 }, - { 1467, 1457, 0 }, - { 1485, 1482, 0 }, - { 1488, 1479, 0 }, - { 1505, 1502, 0 }, - { 1509, 1499, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { 5731, 5734, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1244, 770, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1446, 1438, 0 }, - { 1450, 1435, 0 }, - { 1468, 1460, 0 }, - { 1472, 1457, 0 }, - { 1489, 1482, 0 }, - { 1492, 1479, 0 }, - { 1510, 1502, 0 }, - { 1514, 1499, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { 4558, 4561, 120 }, - { 4605, 4608, 120 }, - { 4651, 4654, 120 }, - { 4718, 4721, 121 }, - { 4769, 4772, 121 }, - { 4847, 4850, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { 4899, 4902, 120 }, - { 4940, 4943, 120 }, - { 4983, 4986, 120 }, - { 5047, 5050, 121 }, - { 5092, 5095, 121 }, - { 5164, 5167, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { 4053, 4049, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { 4044, 4049, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 209, 210, 0 }, - { 1237, 1238, 0 }, - { 2860, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1403, 1404, 0 }, - { 1408, 1404, 0 }, - { 1412, 1404, 0 }, - { 1416, 1404, 0 }, - { 2860, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 4537, 4538, 120 }, - { 4592, 4538, 120 }, - { 4637, 4538, 120 }, - { 4685, 4686, 121 }, - { 4700, 4701, 121 }, - { 4749, 4686, 121 }, - { 4757, 4701, 121 }, - { 4802, 4803, 0 }, - { 4815, 4816, 0 }, - { 4829, 4830, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 4882, 4883, 120 }, - { 4928, 4883, 120 }, - { 4970, 4883, 120 }, - { 5015, 5016, 121 }, - { 5029, 5030, 121 }, - { 5072, 5016, 121 }, - { 5080, 5030, 121 }, - { 5120, 5121, 0 }, - { 5133, 5134, 0 }, - { 5146, 5147, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1520, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1520, 32, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1586, 1587, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1285, 1288, 0 }, - { 1348, 32, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1530, 228, 39 }, - { 1534, 1535, 39 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1520, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1520, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1520, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1281, 1279, 0 }, - { 1348, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1524, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1524, 99, 0 }, - { 1528, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1582, 1583, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1532, 228, 39 }, - { 1537, 1535, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1524, 99, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1524, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1585, 1583, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1275, 1276, 0 }, - { 1349, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 3645, 3646, 7 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 3841, 3842, 0 }, - { 3844, 3845, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 121, 0 }, - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 255, 16, 0 }, - { 3645, 3646, 7 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 121, 0 }, - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 255, 16, 0 }, - { 3660, 3662, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 121, 0 }, - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 255, 16, 0 }, - { 3660, 3662, 0 }, - { 3703, 3662, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 121, 0 }, - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 255, 16, 0 }, - { 5799, 5802, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 121, 0 }, - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 255, 16, 0 }, - { 3841, 3842, 0 }, - { 3844, 3845, 0 }, - { 5799, 5802, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 3645, 3646, 7 }, - { 3841, 3842, 0 }, - { 3844, 3845, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 237, 238, 7 }, - { 241, 238, 0 }, - { 242, 243, 0 }, - { 3045, 706, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 145, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 171, 172, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 145, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 171, 172, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 145, 0 }, - { 180, 182, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 145, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 297, 298, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 171, 172, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 297, 298, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 278, 279, 7 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 145, 0 }, - { 180, 182, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 171, 172, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { 3709, 3678, 0 }, - { 3710, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 278, 279, 7 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { 3709, 3678, 0 }, - { 3710, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 145, 0 }, - { 180, 182, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { 3709, 3678, 0 }, - { 3710, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 171, 172, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 271, 272, 0 }, - { 283, 284, 7 }, - { 289, 291, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3677, 3678, 0 }, - { 3709, 3678, 0 }, - { 3710, 3680, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3650, 397, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 278, 279, 7 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3650, 397, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 145, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3650, 397, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 171, 172, 0 }, - { 244, 245, 7 }, - { 246, 245, 0 }, - { 247, 248, 0 }, - { 397, 298, 31 }, - { 758, 298, 34 }, - { 3650, 397, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 110, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6096, 6099, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2298, 6, 0 }, - { 2329, 11, 0 }, - { 2359, 16, 0 }, - { 2389, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 116, 114, 0 }, - { 3321, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 115, 114, 0 }, - { 3321, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3321, 32, 0 }, - { 6100, 6103, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1235, 1236, 0 }, - { 2859, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 206, 208, 0 }, - { 2859, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1120, 1121, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1124, 1121, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1235, 1236, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 206, 208, 0 }, - { 1434, 1435, 0 }, - { 1439, 1438, 0 }, - { 1456, 1457, 0 }, - { 1461, 1460, 0 }, - { 1478, 1479, 0 }, - { 1483, 1482, 0 }, - { 1498, 1499, 0 }, - { 1503, 1502, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 212, 213, 0 }, - { 1442, 1435, 0 }, - { 1444, 1438, 0 }, - { 1464, 1457, 0 }, - { 1466, 1460, 0 }, - { 1486, 1479, 0 }, - { 1487, 1482, 0 }, - { 1506, 1499, 0 }, - { 1508, 1502, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { 5727, 5730, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1243, 1144, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1447, 1435, 0 }, - { 1449, 1438, 0 }, - { 1469, 1457, 0 }, - { 1471, 1460, 0 }, - { 1490, 1479, 0 }, - { 1491, 1482, 0 }, - { 1511, 1499, 0 }, - { 1513, 1502, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { 4552, 4557, 120 }, - { 4599, 4604, 120 }, - { 4645, 4650, 120 }, - { 4712, 4717, 121 }, - { 4763, 4768, 121 }, - { 4841, 4846, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { 4895, 4898, 120 }, - { 4935, 4939, 120 }, - { 4977, 4982, 120 }, - { 5041, 5046, 121 }, - { 5086, 5091, 121 }, - { 5158, 5163, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { 4054, 4051, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { 4050, 4051, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 206, 208, 0 }, - { 1235, 1236, 0 }, - { 2859, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1402, 1175, 0 }, - { 1407, 1175, 0 }, - { 1411, 1175, 0 }, - { 1415, 1175, 0 }, - { 2859, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 4534, 4536, 120 }, - { 4591, 4536, 120 }, - { 4636, 4536, 120 }, - { 4683, 4684, 121 }, - { 4697, 4699, 121 }, - { 4748, 4684, 121 }, - { 4756, 4699, 121 }, - { 4800, 4801, 0 }, - { 4813, 4814, 0 }, - { 4826, 4828, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2859, 1248, 0 }, - { 4879, 4881, 120 }, - { 4927, 4881, 120 }, - { 4969, 4881, 120 }, - { 5013, 5014, 121 }, - { 5026, 5028, 121 }, - { 5071, 5014, 121 }, - { 5079, 5028, 121 }, - { 5118, 5119, 0 }, - { 5131, 5132, 0 }, - { 5143, 5145, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1521, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1521, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 4195, 4193, 108 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 1521, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1516, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1521, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1521, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1525, 114, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1525, 114, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 4197, 4193, 108 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1525, 114, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1525, 114, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1819, 11, 0 }, - { 1928, 16, 0 }, - { 2022, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4413, 3262, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3284, 3285, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1818, 11, 0 }, - { 1927, 16, 0 }, - { 2021, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1839, 1840, 0 }, - { 1847, 1848, 0 }, - { 1857, 1858, 0 }, - { 1945, 1946, 0 }, - { 1953, 1954, 0 }, - { 2039, 2040, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2162, 2163, 0 }, - { 3311, 2166, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1835, 1836, 0 }, - { 1852, 1836, 0 }, - { 1862, 1836, 0 }, - { 1943, 1851, 0 }, - { 1957, 1851, 0 }, - { 2037, 1861, 0 }, - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4412, 1541, 0 }, - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { 6158, 6160, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { 6142, 6144, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { 6129, 6130, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1837, 1838, 0 }, - { 1854, 1838, 0 }, - { 1864, 1838, 0 }, - { 1944, 1853, 0 }, - { 1958, 1853, 0 }, - { 2038, 1863, 0 }, - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1833, 1834, 0 }, - { 1846, 11, 0 }, - { 1856, 11, 0 }, - { 1941, 1942, 0 }, - { 1952, 16, 0 }, - { 2035, 2036, 0 }, - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3303, 16, 0 }, - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3308, 2158, 0 }, - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3309, 2155, 0 }, - { 4429, 11, 0 }, - { 4430, 16, 0 }, - { 4431, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2156, 2157, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3297, 1417, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6161, 6163, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6145, 6147, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6131, 6133, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2159, 2160, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3286, 11, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2505, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2486, 2487, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2505, 1090, 0 }, - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { 5777, 5780, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2550, 2551, 0 }, - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { 4013, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2486, 2487, 0 }, - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2486, 2487, 0 }, - { 2527, 2529, 0 }, - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { 4909, 4914, 120 }, - { 4950, 4955, 120 }, - { 4994, 5000, 120 }, - { 5056, 5060, 121 }, - { 5102, 5107, 121 }, - { 5173, 5177, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2505, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2486, 2487, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2507, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2507, 1090, 0 }, - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2505, 1090, 0 }, - { 2507, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2507, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2486, 2487, 0 }, - { 2507, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { 5773, 5776, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2488, 1098, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2488, 1098, 0 }, - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2488, 1098, 0 }, - { 2505, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2488, 1098, 0 }, - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2486, 2487, 0 }, - { 2488, 1098, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2488, 1098, 0 }, - { 2531, 2533, 0 }, - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2499, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2499, 1090, 0 }, - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2499, 1090, 0 }, - { 2505, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2499, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2486, 2487, 0 }, - { 2499, 1090, 0 }, - { 2861, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2499, 1090, 0 }, - { 2552, 2553, 0 }, - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3368, 1090, 0 }, - { 4903, 4908, 120 }, - { 4944, 4949, 120 }, - { 4987, 4993, 120 }, - { 5051, 5055, 121 }, - { 5096, 5101, 121 }, - { 5168, 5172, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 4886, 4887, 120 }, - { 4893, 4894, 120 }, - { 4930, 4887, 120 }, - { 4934, 4894, 120 }, - { 4972, 4887, 120 }, - { 4976, 4894, 120 }, - { 5019, 5020, 121 }, - { 5024, 5025, 121 }, - { 5033, 5034, 121 }, - { 5039, 5040, 121 }, - { 5074, 5020, 121 }, - { 5077, 5025, 121 }, - { 5082, 5034, 121 }, - { 5085, 5040, 121 }, - { 5124, 5125, 0 }, - { 5129, 5130, 0 }, - { 5137, 5138, 0 }, - { 5141, 5142, 0 }, - { 5150, 5151, 0 }, - { 5156, 5157, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2508, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2490, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2500, 2501, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2508, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { 5785, 5788, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2490, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2490, 1248, 0 }, - { 2535, 2537, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2500, 2501, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2500, 2501, 0 }, - { 2554, 2555, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { 4921, 4926, 120 }, - { 4962, 4967, 120 }, - { 5007, 5012, 120 }, - { 5066, 5070, 121 }, - { 5113, 5117, 121 }, - { 5183, 5187, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2508, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2490, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2500, 2501, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2509, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2508, 1248, 0 }, - { 2509, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2490, 1248, 0 }, - { 2509, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2500, 2501, 0 }, - { 2509, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { 5781, 5784, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2502, 2503, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2502, 2503, 0 }, - { 2508, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2490, 1248, 0 }, - { 2502, 2503, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2500, 2501, 0 }, - { 2502, 2503, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2502, 2503, 0 }, - { 2556, 2557, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2491, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2491, 1248, 0 }, - { 2508, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2490, 1248, 0 }, - { 2491, 1248, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2491, 1248, 0 }, - { 2500, 2501, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2491, 1248, 0 }, - { 2539, 2541, 0 }, - { 2862, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { 4915, 4920, 120 }, - { 4956, 4961, 120 }, - { 5001, 5006, 120 }, - { 5061, 5065, 121 }, - { 5108, 5112, 121 }, - { 5178, 5182, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2862, 1248, 0 }, - { 4884, 4885, 120 }, - { 4890, 4892, 120 }, - { 4929, 4885, 120 }, - { 4933, 4892, 120 }, - { 4971, 4885, 120 }, - { 4975, 4892, 120 }, - { 5017, 5018, 121 }, - { 5022, 5023, 121 }, - { 5031, 5032, 121 }, - { 5036, 5038, 121 }, - { 5073, 5018, 121 }, - { 5076, 5023, 121 }, - { 5081, 5032, 121 }, - { 5084, 5038, 121 }, - { 5122, 5123, 0 }, - { 5127, 5128, 0 }, - { 5135, 5136, 0 }, - { 5139, 5140, 0 }, - { 5148, 5149, 0 }, - { 5153, 5155, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { 1367, 1306, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1754, 1755, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 3271, 2844, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3995, 3996, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3993, 2887, 0 }, - { 3995, 3996, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 5243, 3475, 0 }, - { 5244, 3478, 0 }, - { 5246, 5104, 0 }, - { 5248, 2177, 0 }, - { 5249, 2193, 0 }, - { 5251, 4997, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4418, 3262, 0 }, - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 6167, 6169, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 6151, 6153, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 6136, 6137, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2046, 770, 0 }, - { 2050, 770, 0 }, - { 2067, 770, 0 }, - { 2079, 770, 0 }, - { 2092, 6, 0 }, - { 2107, 6, 0 }, - { 2117, 6, 0 }, - { 2128, 11, 0 }, - { 2139, 11, 0 }, - { 2148, 16, 0 }, - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 4437, 4438, 0 }, - { 4445, 4438, 0 }, - { 4451, 4438, 0 }, - { 4457, 4438, 0 }, - { 4461, 2045, 0 }, - { 4463, 4436, 0 }, - { 4467, 4436, 0 }, - { 4471, 4436, 0 }, - { 4475, 2049, 0 }, - { 4477, 2049, 0 }, - { 4479, 2091, 0 }, - { 4481, 4444, 0 }, - { 4485, 4444, 0 }, - { 4489, 2061, 0 }, - { 4491, 2061, 0 }, - { 4493, 2101, 0 }, - { 4495, 2061, 0 }, - { 4497, 2101, 0 }, - { 4499, 2127, 0 }, - { 4501, 4450, 0 }, - { 4505, 2065, 0 }, - { 4507, 2065, 0 }, - { 4509, 2105, 0 }, - { 4511, 2065, 0 }, - { 4513, 2105, 0 }, - { 4515, 2137, 0 }, - { 4517, 2065, 0 }, - { 4519, 2105, 0 }, - { 4521, 2137, 0 }, - { 4523, 2147, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 4440, 4441, 0 }, - { 4447, 4441, 0 }, - { 4453, 4441, 0 }, - { 4458, 4441, 0 }, - { 4464, 4439, 0 }, - { 4468, 4439, 0 }, - { 4472, 4439, 0 }, - { 4482, 4446, 0 }, - { 4486, 4446, 0 }, - { 4502, 4452, 0 }, - { 5280, 11, 0 }, - { 5333, 16, 0 }, - { 5385, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3304, 16, 0 }, - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3306, 2169, 0 }, - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 4525, 4526, 0 }, - { 4525, 4526, 0 }, - { 4527, 4528, 0 }, - { 4527, 4528, 0 }, - { 4529, 4422, 0 }, - { 4529, 4422, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3419, 3421, 60 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4416, 3262, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 6164, 6166, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 6148, 6150, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 6134, 6135, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 4442, 4438, 0 }, - { 4448, 4438, 0 }, - { 4454, 4438, 0 }, - { 4459, 4438, 0 }, - { 4465, 4436, 0 }, - { 4469, 4436, 0 }, - { 4473, 4436, 0 }, - { 4483, 4444, 0 }, - { 4487, 4444, 0 }, - { 4503, 4450, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2048, 770, 0 }, - { 2052, 770, 0 }, - { 2068, 770, 0 }, - { 2080, 770, 0 }, - { 2094, 6, 0 }, - { 2108, 6, 0 }, - { 2118, 6, 0 }, - { 2130, 11, 0 }, - { 2140, 11, 0 }, - { 2150, 16, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 4443, 4441, 0 }, - { 4449, 4441, 0 }, - { 4455, 4441, 0 }, - { 4460, 4441, 0 }, - { 4462, 2047, 0 }, - { 4466, 4439, 0 }, - { 4470, 4439, 0 }, - { 4474, 4439, 0 }, - { 4476, 2051, 0 }, - { 4478, 2051, 0 }, - { 4480, 2093, 0 }, - { 4484, 4446, 0 }, - { 4488, 4446, 0 }, - { 4490, 2059, 0 }, - { 4492, 2059, 0 }, - { 4494, 2099, 0 }, - { 4496, 2059, 0 }, - { 4498, 2099, 0 }, - { 4500, 2129, 0 }, - { 4504, 4452, 0 }, - { 4506, 2063, 0 }, - { 4508, 2063, 0 }, - { 4510, 2103, 0 }, - { 4512, 2063, 0 }, - { 4514, 2103, 0 }, - { 4516, 2135, 0 }, - { 4518, 2063, 0 }, - { 4520, 2103, 0 }, - { 4522, 2135, 0 }, - { 4524, 2149, 0 }, - { 5252, 11, 0 }, - { 5305, 16, 0 }, - { 5358, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3305, 16, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3415, 3417, 60 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3307, 2166, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 4530, 2193, 0 }, - { 4530, 2193, 0 }, - { 4531, 3478, 0 }, - { 4531, 3478, 0 }, - { 4532, 4427, 0 }, - { 4532, 4427, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2894, 3477, 66 }, - { 3492, 2894, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3380, 1473, 0 }, - { 2894, 3477, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3377, 128, 0 }, - { 2894, 3477, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3371, 36, 0 }, - { 2894, 3477, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3374, 2598, 0 }, - { 2894, 3477, 66 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3393, 3478, 67 }, - { 3482, 3393, 0 }, - { 3393, 3478, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3393, 3478, 67 }, - { 3496, 3393, 0 }, - { 3497, 3395, 0 }, - { 3393, 3478, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3395, 3479, 67 }, - { 3489, 3395, 0 }, - { 3395, 3479, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3998, 3991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4000, 3991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4000, 3991, 0 }, - { 4032, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3998, 3991, 0 }, - { 4000, 3991, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4001, 3988, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4002, 3988, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4002, 3988, 0 }, - { 4033, 128, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4001, 3988, 0 }, - { 4002, 3988, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3480, 3481, 0 }, - { 3481, 4190, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3495, 3488, 0 }, - { 3481, 4190, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3493, 3481, 0 }, - { 3494, 3488, 0 }, - { 3481, 4190, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3487, 3488, 0 }, - { 3488, 4191, 106 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4004, 4005, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4007, 4005, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4007, 4005, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4004, 4005, 0 }, - { 4007, 4005, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1082, 1083, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1085, 1086, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6104, 6107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1064, 1065, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2882, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1058, 1059, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1061, 1062, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1067, 1068, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1070, 1071, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1073, 1074, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1076, 1077, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1079, 1080, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2632, 2637, 49 }, - { 5679, 2632, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2632, 2637, 49 }, - { 5680, 2702, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2638, 2644, 49 }, - { 5685, 2638, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2638, 2644, 49 }, - { 5686, 2706, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2645, 2651, 49 }, - { 5689, 2645, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2645, 2651, 49 }, - { 5690, 2712, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2652, 2668, 49 }, - { 5693, 2652, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2652, 2668, 49 }, - { 5694, 2717, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2669, 2701, 49 }, - { 5697, 2669, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2669, 2701, 49 }, - { 5698, 2726, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2420, 2421, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2743, 2746, 49 }, - { 5683, 2743, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2743, 2746, 49 }, - { 5684, 2784, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2747, 2752, 49 }, - { 5687, 2747, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2747, 2752, 49 }, - { 5688, 2788, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2753, 2757, 49 }, - { 5691, 2753, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2753, 2757, 49 }, - { 5692, 2794, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2758, 2766, 49 }, - { 5695, 2758, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2758, 2766, 49 }, - { 5696, 2799, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2767, 2783, 49 }, - { 5699, 2767, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2767, 2783, 49 }, - { 5700, 2808, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2492, 1090, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2479, 2480, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 5761, 5764, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2492, 1090, 0 }, - { 2542, 2543, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2479, 2480, 0 }, - { 2511, 2513, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 4571, 4577, 120 }, - { 4617, 4622, 120 }, - { 4664, 4670, 120 }, - { 4730, 4735, 121 }, - { 4781, 4787, 121 }, - { 4859, 4865, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 1502, 3964, 84 }, - { 5757, 5760, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2481, 1096, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2481, 1096, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 3957, 3959, 83 }, - { 1502, 3964, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2481, 1096, 0 }, - { 2492, 1090, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2479, 2480, 0 }, - { 2481, 1096, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2481, 1096, 0 }, - { 2515, 2517, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 3957, 3959, 83 }, - { 1502, 3964, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2493, 1090, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2493, 1090, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 3953, 3955, 83 }, - { 1502, 3964, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2492, 1090, 0 }, - { 2493, 1090, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2479, 2480, 0 }, - { 2493, 1090, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2493, 1090, 0 }, - { 2544, 2545, 0 }, - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 3953, 3955, 83 }, - { 1502, 3964, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 1502, 3964, 84 }, - { 4562, 4569, 120 }, - { 4609, 4616, 120 }, - { 4655, 4662, 120 }, - { 4722, 4729, 121 }, - { 4773, 4780, 121 }, - { 4851, 4858, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 4541, 4542, 120 }, - { 4550, 4551, 120 }, - { 4594, 4542, 120 }, - { 4598, 4551, 120 }, - { 4639, 4542, 120 }, - { 4643, 4551, 120 }, - { 4689, 4690, 121 }, - { 4694, 4695, 121 }, - { 4704, 4705, 121 }, - { 4710, 4711, 121 }, - { 4751, 4690, 121 }, - { 4754, 4695, 121 }, - { 4759, 4705, 121 }, - { 4762, 4711, 121 }, - { 4806, 4807, 0 }, - { 4811, 4812, 0 }, - { 4819, 4820, 0 }, - { 4823, 4824, 0 }, - { 4833, 4834, 0 }, - { 4839, 4840, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2483, 1248, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2494, 2495, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 5769, 5772, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2483, 1248, 0 }, - { 2519, 2521, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2494, 2495, 0 }, - { 2546, 2547, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 4584, 4589, 120 }, - { 4629, 4634, 120 }, - { 4677, 4682, 120 }, - { 4742, 4747, 121 }, - { 4794, 4799, 121 }, - { 4872, 4877, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { 5765, 5768, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2496, 2497, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2496, 2497, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 3962, 3963, 83 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2483, 1248, 0 }, - { 2496, 2497, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2494, 2495, 0 }, - { 2496, 2497, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2496, 2497, 0 }, - { 2548, 2549, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 3962, 3963, 83 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2484, 1248, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2484, 1248, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 3960, 3961, 83 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2483, 1248, 0 }, - { 2484, 1248, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2484, 1248, 0 }, - { 2494, 2495, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2484, 1248, 0 }, - { 2523, 2525, 0 }, - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 3960, 3961, 83 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { 4578, 4583, 120 }, - { 4623, 4628, 120 }, - { 4671, 4676, 120 }, - { 4736, 4741, 121 }, - { 4788, 4793, 121 }, - { 4866, 4871, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 4539, 4540, 120 }, - { 4547, 4549, 120 }, - { 4593, 4540, 120 }, - { 4597, 4549, 120 }, - { 4638, 4540, 120 }, - { 4642, 4549, 120 }, - { 4687, 4688, 121 }, - { 4692, 4693, 121 }, - { 4702, 4703, 121 }, - { 4707, 4709, 121 }, - { 4750, 4688, 121 }, - { 4753, 4693, 121 }, - { 4758, 4703, 121 }, - { 4761, 4709, 121 }, - { 4804, 4805, 0 }, - { 4809, 4810, 0 }, - { 4817, 4818, 0 }, - { 4821, 4822, 0 }, - { 4831, 4832, 0 }, - { 4836, 4838, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4193, 4195, 107 }, - { 6108, 6111, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2982, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3034, 3035, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3026, 3027, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3029, 3030, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3032, 3033, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3017, 3019, 0 }, - { 2999, 3052, 56 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3020, 3021, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3051, 3031, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3050, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3053, 2999, 57 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3022, 3025, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3299, 1405, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3289, 3290, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3300, 1405, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3291, 3292, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4415, 1541, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2053, 2054, 0 }, - { 2057, 2054, 0 }, - { 2060, 2054, 0 }, - { 2064, 2054, 0 }, - { 2069, 2070, 0 }, - { 2073, 2070, 0 }, - { 2075, 2070, 0 }, - { 2077, 2070, 0 }, - { 2081, 2082, 0 }, - { 2085, 2082, 0 }, - { 2087, 2082, 0 }, - { 2089, 2082, 0 }, - { 2095, 2096, 0 }, - { 2100, 2096, 0 }, - { 2104, 2096, 0 }, - { 2109, 2110, 0 }, - { 2113, 2110, 0 }, - { 2115, 2110, 0 }, - { 2119, 2120, 0 }, - { 2123, 2120, 0 }, - { 2125, 2120, 0 }, - { 2131, 2132, 0 }, - { 2136, 2132, 0 }, - { 2141, 2142, 0 }, - { 2145, 2142, 0 }, - { 2151, 2152, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2173, 2174, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4417, 1541, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1813, 698, 0 }, - { 1922, 704, 0 }, - { 2016, 710, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2055, 2056, 0 }, - { 2058, 2056, 0 }, - { 2062, 2056, 0 }, - { 2066, 2056, 0 }, - { 2071, 2072, 0 }, - { 2074, 2072, 0 }, - { 2076, 2072, 0 }, - { 2078, 2072, 0 }, - { 2083, 2084, 0 }, - { 2086, 2084, 0 }, - { 2088, 2084, 0 }, - { 2090, 2084, 0 }, - { 2097, 2098, 0 }, - { 2102, 2098, 0 }, - { 2106, 2098, 0 }, - { 2111, 2112, 0 }, - { 2114, 2112, 0 }, - { 2116, 2112, 0 }, - { 2121, 2122, 0 }, - { 2124, 2122, 0 }, - { 2126, 2122, 0 }, - { 2133, 2134, 0 }, - { 2138, 2134, 0 }, - { 2143, 2144, 0 }, - { 2146, 2144, 0 }, - { 2153, 2154, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2175, 2176, 0 }, - { 3312, 2158, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1361, 1304, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1356, 32, 0 }, - { 1357, 63, 0 }, - { 1361, 1304, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 3270, 2847, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3298, 1405, 0 }, - { 3298, 1405, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6170, 6172, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6154, 6156, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 6138, 6140, 126 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2170, 2171, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2167, 2168, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3287, 11, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3288, 11, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3301, 1417, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3293, 3294, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3302, 1417, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3295, 3296, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 789, 791, 37 }, - { 801, 802, 0 }, - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 789, 791, 37 }, - { 796, 798, 0 }, - { 801, 802, 0 }, - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 789, 791, 37 }, - { 793, 274, 0 }, - { 796, 798, 0 }, - { 801, 802, 0 }, - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 784, 117, 0 }, - { 789, 791, 37 }, - { 801, 802, 0 }, - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 784, 117, 0 }, - { 789, 791, 37 }, - { 796, 798, 0 }, - { 801, 802, 0 }, - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 784, 117, 0 }, - { 789, 791, 37 }, - { 793, 274, 0 }, - { 796, 798, 0 }, - { 801, 802, 0 }, - { 817, 818, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 806, 798, 0 }, - { 815, 816, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 804, 274, 0 }, - { 806, 798, 0 }, - { 815, 816, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 785, 117, 0 }, - { 806, 798, 0 }, - { 815, 816, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 785, 117, 0 }, - { 804, 274, 0 }, - { 806, 798, 0 }, - { 815, 816, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 808, 274, 0 }, - { 813, 814, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 786, 117, 0 }, - { 808, 274, 0 }, - { 809, 812, 0 }, - { 813, 814, 38 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3831, 3833, 0 }, - { 4067, 4071, 90 }, - { 4067, 4075, 91 }, - { 4067, 4079, 92 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3463, 3464, 0 }, - { 4114, 4117, 97 }, - { 5359, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3465, 3464, 0 }, - { 4114, 4117, 97 }, - { 5359, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3513, 3509, 0 }, - { 4114, 4117, 97 }, - { 5359, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3518, 3514, 0 }, - { 4114, 4117, 97 }, - { 5359, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2568, 2574, 48 }, - { 2580, 2564, 0 }, - { 2588, 2566, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2568, 2574, 48 }, - { 2581, 2566, 0 }, - { 2589, 2564, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2568, 2574, 48 }, - { 2577, 2568, 0 }, - { 2586, 2570, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2568, 2574, 48 }, - { 2579, 2570, 0 }, - { 2587, 2568, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2570, 2575, 48 }, - { 2584, 2564, 0 }, - { 2592, 2566, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2570, 2575, 48 }, - { 2585, 2566, 0 }, - { 2593, 2564, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2570, 2575, 48 }, - { 2582, 2568, 0 }, - { 2590, 2570, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2570, 2575, 48 }, - { 2583, 2570, 0 }, - { 2591, 2568, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2983, 2986, 53 }, - { 3007, 32, 0 }, - { 3008, 261, 0 }, - { 3009, 3006, 0 }, - { 3014, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3381, 3382, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3383, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3390, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3392, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3385, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3827, 3792, 68 }, - { 4090, 4093, 95 }, - { 4095, 4099, 95 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3828, 3829, 70 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 222, 3, 0 }, - { 3698, 3699, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 222, 3, 0 }, - { 3698, 3699, 0 }, - { 3740, 3699, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 217, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 217, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 217, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 217, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 217, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 123, 32, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 220, 3, 0 }, - { 222, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 220, 3, 0 }, - { 222, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 340, 341, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 340, 341, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 340, 341, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 343, 344, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 343, 344, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 343, 344, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 352, 353, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 352, 353, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 355, 356, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 355, 356, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 346, 347, 0 }, - { 350, 347, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 346, 347, 0 }, - { 350, 347, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5266, 4247, 0 }, - { 5320, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5266, 4247, 0 }, - { 5291, 4247, 0 }, - { 5320, 4260, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5266, 4247, 0 }, - { 5289, 4247, 0 }, - { 5320, 4260, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5266, 4247, 0 }, - { 5319, 4260, 0 }, - { 5320, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5266, 4247, 0 }, - { 5317, 4260, 0 }, - { 5320, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5292, 4247, 0 }, - { 5345, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5291, 4247, 0 }, - { 5292, 4247, 0 }, - { 5344, 4260, 0 }, - { 5345, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5289, 4247, 0 }, - { 5292, 4247, 0 }, - { 5342, 4260, 0 }, - { 5345, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5292, 4247, 0 }, - { 5319, 4260, 0 }, - { 5345, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5292, 4247, 0 }, - { 5317, 4260, 0 }, - { 5345, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { 5397, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5372, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5372, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { 5372, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5291, 4247, 0 }, - { 5344, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5289, 4247, 0 }, - { 5342, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5265, 4247, 0 }, - { 5319, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 222, 3, 0 }, - { 5263, 4247, 0 }, - { 5317, 4260, 0 }, - { 5369, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5289, 4247, 0 }, - { 5291, 4247, 0 }, - { 5342, 4260, 0 }, - { 5344, 4260, 0 }, - { 5394, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5291, 4247, 0 }, - { 5319, 4260, 0 }, - { 5344, 4260, 0 }, - { 5371, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5291, 4247, 0 }, - { 5317, 4260, 0 }, - { 5344, 4260, 0 }, - { 5369, 4260, 0 }, - { 5396, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5265, 4247, 0 }, - { 5289, 4247, 0 }, - { 5319, 4260, 0 }, - { 5342, 4260, 0 }, - { 5371, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5289, 4247, 0 }, - { 5317, 4260, 0 }, - { 5342, 4260, 0 }, - { 5369, 4260, 0 }, - { 5394, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5263, 4247, 0 }, - { 5265, 4247, 0 }, - { 5317, 4260, 0 }, - { 5319, 4260, 0 }, - { 5369, 4260, 0 }, - { 5371, 4260, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3506, 3507, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3213, 1130, 0 }, - { 3214, 694, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 401, 402, 10 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1320, 1321, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1291, 1292, 0 }, - { 1293, 1294, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1295, 1296, 0 }, - { 1298, 1299, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1311, 1312, 0 }, - { 1313, 1314, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 2560, 2561, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4283, 4284, 117 }, - { 4296, 4297, 117 }, - { 4308, 4309, 117 }, - { 4320, 3925, 118 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4286, 4284, 117 }, - { 4299, 4297, 117 }, - { 4311, 4309, 117 }, - { 4322, 3925, 118 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5285, 5257, 0 }, - { 5338, 5310, 0 }, - { 5390, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5283, 5257, 0 }, - { 5336, 5310, 0 }, - { 5388, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5260, 5257, 0 }, - { 5313, 5310, 0 }, - { 5365, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1326, 1324, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3856, 3858, 0 }, - { 5256, 5257, 0 }, - { 5309, 5310, 0 }, - { 5362, 5310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4246, 4238, 9 }, - { 4259, 4251, 9 }, - { 4272, 4264, 9 }, - { 4279, 3915, 116 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4292, 4284, 117 }, - { 4305, 4297, 117 }, - { 4317, 4309, 117 }, - { 4328, 3925, 118 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4244, 4238, 9 }, - { 4257, 4251, 9 }, - { 4270, 4264, 9 }, - { 4277, 3915, 116 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4290, 4284, 117 }, - { 4303, 4297, 117 }, - { 4315, 4309, 117 }, - { 4326, 3925, 118 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4237, 4238, 9 }, - { 4250, 4251, 9 }, - { 4263, 4264, 9 }, - { 3919, 3915, 116 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1301, 1302, 0 }, - { 1303, 1304, 0 }, - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4237, 4238, 9 }, - { 4250, 4251, 9 }, - { 4263, 4264, 9 }, - { 3919, 3915, 116 }, - { 4283, 4284, 117 }, - { 4296, 4297, 117 }, - { 4308, 4309, 117 }, - { 4320, 3925, 118 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4240, 4238, 9 }, - { 4253, 4251, 9 }, - { 4266, 4264, 9 }, - { 4274, 3915, 116 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1305, 1306, 0 }, - { 1308, 1309, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 4240, 4238, 9 }, - { 4253, 4251, 9 }, - { 4266, 4264, 9 }, - { 4274, 3915, 116 }, - { 4286, 4284, 117 }, - { 4299, 4297, 117 }, - { 4311, 4309, 117 }, - { 4322, 3925, 118 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3761, 3759, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3764, 3762, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3767, 3765, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3770, 3768, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1315, 1316, 0 }, - { 1318, 1319, 0 }, - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3773, 3771, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5294, 5268, 0 }, - { 5347, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5293, 5268, 0 }, - { 5346, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5269, 5268, 0 }, - { 5322, 49, 0 }, - { 5374, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5321, 49, 0 }, - { 5373, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 1045, 1049, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 1037, 1040, 0 }, - { 1045, 1049, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5294, 5268, 0 }, - { 5347, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5293, 5268, 0 }, - { 5346, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5269, 5268, 0 }, - { 5322, 49, 0 }, - { 5374, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2, 5, 1 }, - { 8, 10, 1 }, - { 13, 15, 1 }, - { 18, 20, 1 }, - { 23, 25, 1 }, - { 27, 31, 1 }, - { 40, 46, 3 }, - { 249, 61, 0 }, - { 257, 32, 0 }, - { 260, 109, 0 }, - { 5267, 5268, 0 }, - { 5321, 49, 0 }, - { 5373, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5294, 5268, 0 }, - { 5347, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5293, 5268, 0 }, - { 5346, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5269, 5268, 0 }, - { 5322, 49, 0 }, - { 5374, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3651, 3652, 0 }, - { 5267, 5268, 0 }, - { 5321, 49, 0 }, - { 5373, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5270, 5268, 0 }, - { 5294, 5268, 0 }, - { 5323, 49, 0 }, - { 5347, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5270, 5268, 0 }, - { 5293, 5268, 0 }, - { 5323, 49, 0 }, - { 5346, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5269, 5268, 0 }, - { 5270, 5268, 0 }, - { 5322, 49, 0 }, - { 5323, 49, 0 }, - { 5374, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5270, 5268, 0 }, - { 5321, 49, 0 }, - { 5323, 49, 0 }, - { 5373, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5294, 5268, 0 }, - { 5295, 5268, 0 }, - { 5347, 49, 0 }, - { 5348, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5293, 5268, 0 }, - { 5295, 5268, 0 }, - { 5346, 49, 0 }, - { 5348, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5269, 5268, 0 }, - { 5295, 5268, 0 }, - { 5322, 49, 0 }, - { 5348, 49, 0 }, - { 5374, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5295, 5268, 0 }, - { 5321, 49, 0 }, - { 5348, 49, 0 }, - { 5373, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5294, 5268, 0 }, - { 5347, 49, 0 }, - { 5399, 49, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5293, 5268, 0 }, - { 5346, 49, 0 }, - { 5398, 49, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5269, 5268, 0 }, - { 5322, 49, 0 }, - { 5374, 49, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5321, 49, 0 }, - { 5373, 49, 0 }, - { 5400, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5294, 5268, 0 }, - { 5347, 49, 0 }, - { 5375, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5293, 5268, 0 }, - { 5346, 49, 0 }, - { 5375, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5269, 5268, 0 }, - { 5322, 49, 0 }, - { 5374, 49, 0 }, - { 5375, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5321, 49, 0 }, - { 5373, 49, 0 }, - { 5375, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5293, 5268, 0 }, - { 5294, 5268, 0 }, - { 5346, 49, 0 }, - { 5347, 49, 0 }, - { 5398, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5269, 5268, 0 }, - { 5294, 5268, 0 }, - { 5322, 49, 0 }, - { 5347, 49, 0 }, - { 5374, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5294, 5268, 0 }, - { 5321, 49, 0 }, - { 5347, 49, 0 }, - { 5373, 49, 0 }, - { 5399, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5269, 5268, 0 }, - { 5293, 5268, 0 }, - { 5322, 49, 0 }, - { 5346, 49, 0 }, - { 5374, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5293, 5268, 0 }, - { 5321, 49, 0 }, - { 5346, 49, 0 }, - { 5373, 49, 0 }, - { 5398, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 5267, 5268, 0 }, - { 5269, 5268, 0 }, - { 5321, 49, 0 }, - { 5322, 49, 0 }, - { 5373, 49, 0 }, - { 5374, 49, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2932, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 923, 926, 0 }, - { 931, 934, 0 }, - { 939, 942, 0 }, - { 947, 950, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 927, 926, 0 }, - { 935, 934, 0 }, - { 943, 942, 0 }, - { 951, 950, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4030, 4031, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1051, 1054, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 829, 833, 0 }, - { 1033, 1035, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1033, 1035, 0 }, - { 1051, 1054, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { 3500, 3502, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2308, 2310, 0 }, - { 2338, 2340, 0 }, - { 2368, 2370, 0 }, - { 2399, 2401, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2938, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2308, 2310, 0 }, - { 2338, 2340, 0 }, - { 2368, 2370, 0 }, - { 2399, 2401, 0 }, - { 2938, 1242, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 928, 930, 0 }, - { 936, 938, 0 }, - { 944, 946, 0 }, - { 952, 954, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 928, 930, 0 }, - { 936, 938, 0 }, - { 944, 946, 0 }, - { 952, 954, 0 }, - { 2308, 2310, 0 }, - { 2338, 2340, 0 }, - { 2368, 2370, 0 }, - { 2399, 2401, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { 3503, 3499, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3320, 32, 0 }, - { 3851, 3849, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3320, 32, 0 }, - { 3848, 3849, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3320, 32, 0 }, - { 3848, 3849, 0 }, - { 3851, 3849, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1169, 1168, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1173, 1172, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1171, 1172, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1167, 1168, 0 }, - { 1204, 1205, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1118, 1119, 0 }, - { 1227, 1230, 0 }, - { 2842, 1270, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1170, 1168, 0 }, - { 2842, 1270, 0 }, - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1104, 1105, 0 }, - { 1177, 1175, 0 }, - { 2842, 1270, 0 }, - { 2866, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1154, 1151, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1161, 1159, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1158, 1159, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1150, 1151, 0 }, - { 1206, 1207, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1116, 1117, 0 }, - { 1233, 1234, 0 }, - { 2841, 1266, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1156, 1151, 0 }, - { 2841, 1266, 0 }, - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1106, 1107, 0 }, - { 1166, 1164, 0 }, - { 2841, 1266, 0 }, - { 2867, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { 5794, 5797, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 265, 263, 0 }, - { 3656, 3658, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 265, 263, 0 }, - { 3656, 3658, 0 }, - { 3701, 3658, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 262, 263, 0 }, - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3643, 3644, 0 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 388, 389, 10 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 388, 389, 10 }, - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 529, 530, 0 }, - { 597, 598, 0 }, - { 669, 670, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 529, 530, 0 }, - { 597, 598, 0 }, - { 669, 670, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 166, 168, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 529, 530, 0 }, - { 597, 598, 0 }, - { 669, 670, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 396, 397, 10 }, - { 529, 530, 0 }, - { 597, 598, 0 }, - { 669, 670, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 534, 535, 0 }, - { 601, 602, 0 }, - { 673, 674, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 534, 535, 0 }, - { 601, 602, 0 }, - { 673, 674, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 534, 535, 0 }, - { 601, 602, 0 }, - { 673, 674, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 534, 535, 0 }, - { 601, 602, 0 }, - { 673, 674, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 529, 530, 0 }, - { 534, 535, 0 }, - { 597, 598, 0 }, - { 601, 602, 0 }, - { 669, 670, 0 }, - { 673, 674, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 540, 542, 0 }, - { 606, 608, 0 }, - { 679, 681, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 394, 395, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 394, 395, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 394, 395, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 394, 395, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 394, 395, 10 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 273, 274, 0 }, - { 275, 276, 6 }, - { 277, 238, 7 }, - { 394, 395, 10 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 394, 395, 10 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 149, 151, 0 }, - { 394, 395, 10 }, - { 396, 397, 10 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2874, 32, 0 }, - { 2875, 63, 0 }, - { 2910, 2912, 50 }, - { 2913, 2915, 50 }, - { 2916, 2917, 50 }, - { 2918, 2919, 50 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2947, 2944, 51 }, - { 2954, 2951, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2415, 1248, 0 }, - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2959, 2957, 51 }, - { 2964, 2962, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2876, 63, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1731, 1734, 0 }, - { 1738, 1734, 0 }, - { 1743, 1746, 0 }, - { 1750, 1746, 0 }, - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5300, 2233, 0 }, - { 5329, 2237, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5276, 2233, 0 }, - { 5299, 2233, 0 }, - { 5329, 2237, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5276, 2233, 0 }, - { 5328, 2237, 0 }, - { 5329, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5276, 2233, 0 }, - { 5327, 2237, 0 }, - { 5329, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5300, 2233, 0 }, - { 5301, 2233, 0 }, - { 5353, 2237, 0 }, - { 5354, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5299, 2233, 0 }, - { 5301, 2233, 0 }, - { 5352, 2237, 0 }, - { 5354, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5301, 2233, 0 }, - { 5328, 2237, 0 }, - { 5354, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5301, 2233, 0 }, - { 5327, 2237, 0 }, - { 5354, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5405, 2237, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5404, 2237, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { 5406, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5300, 2233, 0 }, - { 5353, 2237, 0 }, - { 5381, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5299, 2233, 0 }, - { 5352, 2237, 0 }, - { 5381, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { 5381, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2947, 2944, 51 }, - { 2954, 2951, 51 }, - { 2959, 2957, 51 }, - { 2964, 2962, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5328, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 3255, 3256, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5299, 2233, 0 }, - { 5300, 2233, 0 }, - { 5352, 2237, 0 }, - { 5353, 2237, 0 }, - { 5404, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5300, 2233, 0 }, - { 5328, 2237, 0 }, - { 5353, 2237, 0 }, - { 5380, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5300, 2233, 0 }, - { 5327, 2237, 0 }, - { 5353, 2237, 0 }, - { 5379, 2237, 0 }, - { 5405, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5275, 2233, 0 }, - { 5299, 2233, 0 }, - { 5328, 2237, 0 }, - { 5352, 2237, 0 }, - { 5380, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5299, 2233, 0 }, - { 5327, 2237, 0 }, - { 5352, 2237, 0 }, - { 5379, 2237, 0 }, - { 5404, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5275, 2233, 0 }, - { 5327, 2237, 0 }, - { 5328, 2237, 0 }, - { 5379, 2237, 0 }, - { 5380, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5274, 2233, 0 }, - { 5327, 2237, 0 }, - { 5379, 2237, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 3508, 3507, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 206, 208, 0 }, - { 1434, 1435, 0 }, - { 1439, 1438, 0 }, - { 1456, 1457, 0 }, - { 1461, 1460, 0 }, - { 1478, 1479, 0 }, - { 1483, 1482, 0 }, - { 1498, 1499, 0 }, - { 1503, 1502, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1120, 1121, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3257, 770, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4398, 4399, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4404, 4405, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4410, 4411, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4393, 4396, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4401, 4402, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4407, 4408, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2885, 3, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2885, 3, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3264, 1541, 0 }, - { 3265, 3262, 0 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2180, 2183, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2872, 61, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 2886, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2886, 2887, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2886, 2887, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 197, 199, 0 }, - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2282, 2284, 44 }, - { 2282, 2290, 46 }, - { 2313, 2315, 44 }, - { 2313, 2321, 46 }, - { 2343, 2345, 44 }, - { 2343, 2351, 46 }, - { 2373, 2375, 44 }, - { 2373, 2381, 46 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1095, 1090, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2928, 2929, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5297, 2191, 0 }, - { 5326, 2199, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5273, 2191, 0 }, - { 5296, 2191, 0 }, - { 5326, 2199, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5273, 2191, 0 }, - { 5325, 2199, 0 }, - { 5326, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5273, 2191, 0 }, - { 5324, 2199, 0 }, - { 5326, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5273, 2191, 0 }, - { 5326, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5297, 2191, 0 }, - { 5298, 2191, 0 }, - { 5350, 2199, 0 }, - { 5351, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5296, 2191, 0 }, - { 5298, 2191, 0 }, - { 5349, 2199, 0 }, - { 5351, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5298, 2191, 0 }, - { 5325, 2199, 0 }, - { 5351, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5298, 2191, 0 }, - { 5324, 2199, 0 }, - { 5351, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5298, 2191, 0 }, - { 5351, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5403, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5378, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5378, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5378, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 2885, 3, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 2885, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 3253, 3254, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2282, 2284, 44 }, - { 2282, 2290, 46 }, - { 2313, 2315, 44 }, - { 2313, 2321, 46 }, - { 2343, 2345, 44 }, - { 2343, 2351, 46 }, - { 2373, 2375, 44 }, - { 2373, 2381, 46 }, - { 2868, 32, 0 }, - { 3398, 3400, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5296, 2191, 0 }, - { 5297, 2191, 0 }, - { 5349, 2199, 0 }, - { 5350, 2199, 0 }, - { 5401, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5297, 2191, 0 }, - { 5325, 2199, 0 }, - { 5350, 2199, 0 }, - { 5377, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5297, 2191, 0 }, - { 5324, 2199, 0 }, - { 5350, 2199, 0 }, - { 5376, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5297, 2191, 0 }, - { 5350, 2199, 0 }, - { 5402, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5272, 2191, 0 }, - { 5296, 2191, 0 }, - { 5325, 2199, 0 }, - { 5349, 2199, 0 }, - { 5377, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5296, 2191, 0 }, - { 5324, 2199, 0 }, - { 5349, 2199, 0 }, - { 5376, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5296, 2191, 0 }, - { 5349, 2199, 0 }, - { 5401, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5272, 2191, 0 }, - { 5324, 2199, 0 }, - { 5325, 2199, 0 }, - { 5376, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5272, 2191, 0 }, - { 5325, 2199, 0 }, - { 5377, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2868, 32, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1431, 1432, 0 }, - { 1453, 1454, 0 }, - { 1475, 1476, 0 }, - { 1495, 1496, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { 5271, 2191, 0 }, - { 5324, 2199, 0 }, - { 5376, 2199, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2563, 2562, 0 }, - { 3321, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3388, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 227, 3, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 738, 717, 25 }, - { 739, 720, 25 }, - { 740, 723, 26 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 227, 3, 0 }, - { 3683, 3685, 0 }, - { 3687, 3685, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 227, 3, 0 }, - { 3683, 3685, 0 }, - { 3687, 3685, 0 }, - { 3714, 3685, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { 3716, 3719, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { 3725, 3729, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { 3735, 3738, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { 823, 825, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { 738, 717, 25 }, - { 739, 720, 25 }, - { 740, 723, 26 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 225, 3, 0 }, - { 738, 717, 25 }, - { 739, 720, 25 }, - { 740, 723, 26 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 225, 3, 0 }, - { 227, 3, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 230, 231, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 225, 3, 0 }, - { 227, 3, 0 }, - { 738, 717, 25 }, - { 739, 720, 25 }, - { 740, 723, 26 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2987, 2983, 54 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2987, 2983, 54 }, - { 2998, 2999, 0 }, - { 3002, 261, 0 }, - { 3005, 3006, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1181, 1151, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 1290, 1062, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 1209, 1212, 0 }, - { 1290, 1062, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1108, 1109, 0 }, - { 1214, 1217, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1108, 1109, 0 }, - { 1268, 1266, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1108, 1109, 0 }, - { 2856, 770, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 717, 719, 23 }, - { 720, 722, 23 }, - { 723, 725, 24 }, - { 3314, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 2849, 1276, 0 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 1560, 1564, 39 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 1551, 1553, 39 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 1546, 1548, 39 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 228, 1530, 41 }, - { 1556, 1558, 42 }, - { 3323, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1522, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1526, 99, 0 }, - { 1590, 1593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1372, 1374, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1602, 1603, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1522, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1526, 99, 0 }, - { 1590, 1593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1532, 228, 39 }, - { 1537, 1535, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1372, 1374, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1522, 32, 0 }, - { 1524, 99, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1524, 99, 0 }, - { 1526, 99, 0 }, - { 1590, 1593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1524, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1372, 1374, 0 }, - { 1524, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1372, 1374, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1522, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1526, 99, 0 }, - { 1590, 1593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1522, 32, 0 }, - { 1526, 99, 0 }, - { 1590, 1593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1522, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1372, 1374, 0 }, - { 1522, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1278, 1280, 0 }, - { 1349, 32, 0 }, - { 1526, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1526, 99, 0 }, - { 1590, 1593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1372, 1374, 0 }, - { 1526, 99, 0 }, - { 1590, 1593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1359, 1294, 0 }, - { 1372, 1374, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1183, 1168, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1112, 1113, 0 }, - { 1220, 1221, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1112, 1113, 0 }, - { 1271, 1270, 0 }, - { 1271, 1270, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1112, 1113, 0 }, - { 1146, 1144, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2983, 2986, 53 }, - { 3007, 32, 0 }, - { 3008, 261, 0 }, - { 3009, 3006, 0 }, - { 3016, 99, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1596, 1598, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { 1520, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1520, 32, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { 1520, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1515, 1267, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1282, 1283, 0 }, - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { 1515, 1267, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1813, 698, 0 }, - { 1844, 1824, 0 }, - { 1922, 704, 0 }, - { 1950, 1933, 0 }, - { 2016, 710, 0 }, - { 2044, 2027, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2420, 2421, 0 }, - { 2425, 2440, 1 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2420, 2421, 0 }, - { 4039, 4037, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2420, 2421, 0 }, - { 4042, 4037, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 1519, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1397, 1399, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 1519, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1397, 1399, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1397, 1399, 0 }, - { 1516, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 1519, 1517, 0 }, - { 1521, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1397, 1399, 0 }, - { 1521, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1516, 1517, 0 }, - { 1519, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 1519, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1397, 1399, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1397, 1399, 0 }, - { 1516, 1517, 0 }, - { 1519, 1517, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 3267, 3256, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1523, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1382, 1384, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1523, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 4197, 4193, 108 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1382, 1384, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1382, 1384, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1523, 32, 0 }, - { 1525, 114, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1525, 114, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1382, 1384, 0 }, - { 1525, 114, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1523, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1523, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1382, 1384, 0 }, - { 1523, 32, 0 }, - { 1527, 114, 40 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1527, 114, 40 }, - { 3266, 3254, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1351, 32, 0 }, - { 1363, 1314, 0 }, - { 1382, 1384, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1122, 1123, 0 }, - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3258, 1144, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2419, 1404, 0 }, - { 2860, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2857, 1090, 0 }, - { 3260, 770, 0 }, - { 3363, 1090, 0 }, - { 3364, 1248, 0 }, - { 3365, 1248, 0 }, - { 1502, 3964, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { 4009, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2861, 1090, 0 }, - { 3261, 770, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { 4009, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2550, 2551, 0 }, - { 2861, 1090, 0 }, - { 3367, 1248, 0 }, - { 3971, 3968, 84 }, - { 4009, 1090, 0 }, - { 4013, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { 4009, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2507, 1090, 0 }, - { 2861, 1090, 0 }, - { 4009, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2488, 1098, 0 }, - { 2498, 1090, 0 }, - { 2861, 1090, 0 }, - { 4009, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2498, 1090, 0 }, - { 2499, 1090, 0 }, - { 2861, 1090, 0 }, - { 4009, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2858, 1248, 0 }, - { 3259, 1144, 0 }, - { 3360, 1248, 0 }, - { 3361, 1090, 0 }, - { 3362, 1090, 0 }, - { 1499, 3965, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { 1392, 1394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { 1367, 1306, 0 }, - { 1392, 1394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { 1392, 1394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { 1392, 1394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 3269, 3254, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { 1392, 1394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1361, 1304, 0 }, - { 1377, 1379, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1356, 32, 0 }, - { 1357, 63, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1356, 32, 0 }, - { 1357, 63, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1356, 32, 0 }, - { 1357, 63, 0 }, - { 1361, 1304, 0 }, - { 1377, 1379, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1361, 1304, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1361, 1304, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 3268, 3256, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1361, 1304, 0 }, - { 1377, 1379, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1355, 32, 0 }, - { 1361, 1304, 0 }, - { 1377, 1379, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1607, 1606, 0 }, - { 4105, 4108, 96 }, - { 5253, 11, 0 }, - { 5306, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5303, 2257, 0 }, - { 5356, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5302, 2257, 0 }, - { 5355, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5278, 2257, 0 }, - { 5331, 2261, 0 }, - { 5383, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5330, 2261, 0 }, - { 5382, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5303, 2257, 0 }, - { 5356, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5302, 2257, 0 }, - { 5355, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5278, 2257, 0 }, - { 5331, 2261, 0 }, - { 5383, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2878, 32, 0 }, - { 2881, 2871, 0 }, - { 2920, 2922, 50 }, - { 2923, 2925, 50 }, - { 5277, 2257, 0 }, - { 5330, 2261, 0 }, - { 5382, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5279, 2257, 0 }, - { 5303, 2257, 0 }, - { 5332, 2261, 0 }, - { 5356, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5279, 2257, 0 }, - { 5302, 2257, 0 }, - { 5332, 2261, 0 }, - { 5355, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5278, 2257, 0 }, - { 5279, 2257, 0 }, - { 5331, 2261, 0 }, - { 5332, 2261, 0 }, - { 5383, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5279, 2257, 0 }, - { 5330, 2261, 0 }, - { 5332, 2261, 0 }, - { 5382, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5303, 2257, 0 }, - { 5304, 2257, 0 }, - { 5356, 2261, 0 }, - { 5357, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5302, 2257, 0 }, - { 5304, 2257, 0 }, - { 5355, 2261, 0 }, - { 5357, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5278, 2257, 0 }, - { 5304, 2257, 0 }, - { 5331, 2261, 0 }, - { 5357, 2261, 0 }, - { 5383, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5304, 2257, 0 }, - { 5330, 2261, 0 }, - { 5357, 2261, 0 }, - { 5382, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5303, 2257, 0 }, - { 5356, 2261, 0 }, - { 5408, 2261, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5302, 2257, 0 }, - { 5355, 2261, 0 }, - { 5407, 2261, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5278, 2257, 0 }, - { 5331, 2261, 0 }, - { 5383, 2261, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5330, 2261, 0 }, - { 5382, 2261, 0 }, - { 5409, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5303, 2257, 0 }, - { 5356, 2261, 0 }, - { 5384, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5302, 2257, 0 }, - { 5355, 2261, 0 }, - { 5384, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5278, 2257, 0 }, - { 5331, 2261, 0 }, - { 5383, 2261, 0 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5330, 2261, 0 }, - { 5382, 2261, 0 }, - { 5384, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5303, 2257, 0 }, - { 5356, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5302, 2257, 0 }, - { 5355, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5278, 2257, 0 }, - { 5331, 2261, 0 }, - { 5383, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 2880, 3, 0 }, - { 5277, 2257, 0 }, - { 5330, 2261, 0 }, - { 5382, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5302, 2257, 0 }, - { 5303, 2257, 0 }, - { 5355, 2261, 0 }, - { 5356, 2261, 0 }, - { 5407, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5278, 2257, 0 }, - { 5303, 2257, 0 }, - { 5331, 2261, 0 }, - { 5356, 2261, 0 }, - { 5383, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5303, 2257, 0 }, - { 5330, 2261, 0 }, - { 5356, 2261, 0 }, - { 5382, 2261, 0 }, - { 5408, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5278, 2257, 0 }, - { 5302, 2257, 0 }, - { 5331, 2261, 0 }, - { 5355, 2261, 0 }, - { 5383, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5302, 2257, 0 }, - { 5330, 2261, 0 }, - { 5355, 2261, 0 }, - { 5382, 2261, 0 }, - { 5407, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5278, 2257, 0 }, - { 5330, 2261, 0 }, - { 5331, 2261, 0 }, - { 5382, 2261, 0 }, - { 5383, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2877, 61, 0 }, - { 5277, 2257, 0 }, - { 5330, 2261, 0 }, - { 5382, 2261, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2048, 770, 0 }, - { 2052, 770, 0 }, - { 2068, 770, 0 }, - { 2080, 770, 0 }, - { 2094, 6, 0 }, - { 2108, 6, 0 }, - { 2118, 6, 0 }, - { 2130, 11, 0 }, - { 2140, 11, 0 }, - { 2150, 16, 0 }, - { 2186, 2183, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 4443, 4441, 0 }, - { 4449, 4441, 0 }, - { 4455, 4441, 0 }, - { 4460, 4441, 0 }, - { 4462, 2047, 0 }, - { 4466, 4439, 0 }, - { 4470, 4439, 0 }, - { 4474, 4439, 0 }, - { 4476, 2051, 0 }, - { 4478, 2051, 0 }, - { 4480, 2093, 0 }, - { 4484, 4446, 0 }, - { 4488, 4446, 0 }, - { 4490, 2059, 0 }, - { 4492, 2059, 0 }, - { 4494, 2099, 0 }, - { 4496, 2059, 0 }, - { 4498, 2099, 0 }, - { 4500, 2129, 0 }, - { 4504, 4452, 0 }, - { 4506, 2063, 0 }, - { 4508, 2063, 0 }, - { 4510, 2103, 0 }, - { 4512, 2063, 0 }, - { 4514, 2103, 0 }, - { 4516, 2135, 0 }, - { 4518, 2063, 0 }, - { 4520, 2103, 0 }, - { 4522, 2135, 0 }, - { 4524, 2149, 0 }, - { 5252, 11, 0 }, - { 5305, 16, 0 }, - { 5358, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2048, 770, 0 }, - { 2052, 770, 0 }, - { 2068, 770, 0 }, - { 2080, 770, 0 }, - { 2094, 6, 0 }, - { 2108, 6, 0 }, - { 2118, 6, 0 }, - { 2130, 11, 0 }, - { 2140, 11, 0 }, - { 2150, 16, 0 }, - { 3427, 3428, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { 4443, 4441, 0 }, - { 4449, 4441, 0 }, - { 4455, 4441, 0 }, - { 4460, 4441, 0 }, - { 4462, 2047, 0 }, - { 4466, 4439, 0 }, - { 4470, 4439, 0 }, - { 4474, 4439, 0 }, - { 4476, 2051, 0 }, - { 4478, 2051, 0 }, - { 4480, 2093, 0 }, - { 4484, 4446, 0 }, - { 4488, 4446, 0 }, - { 4490, 2059, 0 }, - { 4492, 2059, 0 }, - { 4494, 2099, 0 }, - { 4496, 2059, 0 }, - { 4498, 2099, 0 }, - { 4500, 2129, 0 }, - { 4504, 4452, 0 }, - { 4506, 2063, 0 }, - { 4508, 2063, 0 }, - { 4510, 2103, 0 }, - { 4512, 2063, 0 }, - { 4514, 2103, 0 }, - { 4516, 2135, 0 }, - { 4518, 2063, 0 }, - { 4520, 2103, 0 }, - { 4522, 2135, 0 }, - { 4524, 2149, 0 }, - { 5252, 11, 0 }, - { 5305, 16, 0 }, - { 5358, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3424, 3426, 0 }, - { 4419, 770, 0 }, - { 4420, 6, 0 }, - { 4421, 11, 0 }, - { 4422, 16, 0 }, - { 4423, 21, 0 }, - { 4440, 4441, 0 }, - { 4447, 4441, 0 }, - { 4453, 4441, 0 }, - { 4458, 4441, 0 }, - { 4464, 4439, 0 }, - { 4468, 4439, 0 }, - { 4472, 4439, 0 }, - { 4482, 4446, 0 }, - { 4486, 4446, 0 }, - { 4502, 4452, 0 }, - { 5280, 11, 0 }, - { 5333, 16, 0 }, - { 5385, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2298, 6, 0 }, - { 2329, 11, 0 }, - { 2359, 16, 0 }, - { 2389, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3803, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3823, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3805, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3825, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3801, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3804, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3822, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3824, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3786, 3768, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3797, 3768, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3791, 3792, 68 }, - { 3801, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3798, 3792, 68 }, - { 3804, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3809, 3762, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3818, 3762, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1346, 1159, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3813, 3787, 69 }, - { 3822, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3819, 3787, 69 }, - { 3824, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3794, 3768, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3799, 3768, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3796, 3792, 68 }, - { 3803, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3800, 3792, 68 }, - { 3805, 3792, 68 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3815, 3762, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3820, 3762, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3817, 3787, 69 }, - { 3823, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 3821, 3787, 69 }, - { 3825, 3787, 69 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1578, 1579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1353, 61, 0 }, - { 1354, 32, 0 }, - { 1578, 1579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1578, 1579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { 1578, 1579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1578, 1579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { 1392, 1394, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1367, 1306, 0 }, - { 1392, 1394, 0 }, - { 1578, 1579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1352, 32, 0 }, - { 1578, 1579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2943, 2944, 51 }, - { 2950, 2951, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2956, 2957, 51 }, - { 2961, 2962, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2943, 2944, 51 }, - { 2950, 2951, 51 }, - { 2959, 2957, 51 }, - { 2964, 2962, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2947, 2944, 51 }, - { 2954, 2951, 51 }, - { 2956, 2957, 51 }, - { 2961, 2962, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2943, 2944, 51 }, - { 2950, 2951, 51 }, - { 2956, 2957, 51 }, - { 2961, 2962, 51 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 958, 959, 0 }, - { 1005, 1004, 0 }, - { 1012, 1011, 0 }, - { 1020, 1018, 0 }, - { 1029, 1027, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1007, 1006, 0 }, - { 1014, 1013, 0 }, - { 1022, 1021, 0 }, - { 1031, 1030, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1095, 1090, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1095, 1090, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 227, 3, 0 }, - { 728, 729, 25 }, - { 732, 733, 25 }, - { 736, 737, 26 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 227, 3, 0 }, - { 728, 729, 25 }, - { 732, 733, 25 }, - { 736, 737, 26 }, - { 3683, 3685, 0 }, - { 3687, 3685, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 227, 3, 0 }, - { 728, 729, 25 }, - { 732, 733, 25 }, - { 736, 737, 26 }, - { 3683, 3685, 0 }, - { 3687, 3685, 0 }, - { 3714, 3685, 0 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 511, 501, 16 }, - { 571, 572, 18 }, - { 581, 572, 18 }, - { 641, 642, 20 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 571, 572, 18 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 641, 642, 20 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 225, 3, 0 }, - { 227, 3, 0 }, - { 728, 729, 25 }, - { 732, 733, 25 }, - { 736, 737, 26 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 161, 163, 0 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 161, 163, 0 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 511, 501, 16 }, - { 571, 572, 18 }, - { 581, 572, 18 }, - { 641, 642, 20 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 227, 3, 0 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 227, 3, 0 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { 738, 717, 25 }, - { 739, 720, 25 }, - { 740, 723, 26 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { 738, 717, 25 }, - { 739, 720, 25 }, - { 740, 723, 26 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 225, 3, 0 }, - { 227, 3, 0 }, - { 728, 729, 25 }, - { 732, 733, 25 }, - { 736, 737, 26 }, - { 738, 717, 25 }, - { 739, 720, 25 }, - { 740, 723, 26 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 216, 117, 0 }, - { 1823, 1824, 43 }, - { 1932, 1933, 43 }, - { 2026, 2027, 43 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 227, 3, 0 }, - { 511, 501, 16 }, - { 581, 572, 18 }, - { 652, 642, 20 }, - { 728, 729, 25 }, - { 732, 733, 25 }, - { 736, 737, 26 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 227, 3, 0 }, - { 511, 501, 16 }, - { 521, 519, 15 }, - { 581, 572, 18 }, - { 590, 588, 17 }, - { 652, 642, 20 }, - { 661, 659, 19 }, - { 728, 729, 25 }, - { 732, 733, 25 }, - { 736, 737, 26 }, - { 3756, 3685, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2232, 2234, 0 }, - { 2236, 2238, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2190, 2192, 0 }, - { 2198, 2200, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2256, 2258, 0 }, - { 2260, 2262, 0 }, - { 4424, 770, 0 }, - { 4425, 6, 0 }, - { 4426, 11, 0 }, - { 4427, 16, 0 }, - { 4428, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1003, 1004, 0 }, - { 1010, 1011, 0 }, - { 1017, 1018, 0 }, - { 1026, 1027, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2426, 2439, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 206, 208, 0 }, - { 1434, 1435, 0 }, - { 1439, 1438, 0 }, - { 1456, 1457, 0 }, - { 1461, 1460, 0 }, - { 1478, 1479, 0 }, - { 1483, 1482, 0 }, - { 1498, 1499, 0 }, - { 1503, 1502, 0 }, - { 2859, 1248, 0 }, - { 3207, 770, 0 }, - { 3210, 1144, 0 }, - { 3359, 1090, 0 }, - { 3969, 3970, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 103, 106, 5 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 393, 279, 10 }, - { 3835, 3836, 0 }, - { 3838, 3839, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 265, 263, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 3643, 3644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 524, 519, 0 }, - { 593, 588, 0 }, - { 664, 659, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 267, 3, 0 }, - { 269, 268, 6 }, - { 270, 36, 7 }, - { 281, 282, 0 }, - { 286, 287, 0 }, - { 524, 519, 0 }, - { 593, 588, 0 }, - { 664, 659, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 166, 168, 0 }, - { 524, 519, 0 }, - { 593, 588, 0 }, - { 664, 659, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 524, 519, 0 }, - { 593, 588, 0 }, - { 664, 659, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 524, 519, 0 }, - { 534, 535, 0 }, - { 593, 588, 0 }, - { 601, 602, 0 }, - { 664, 659, 0 }, - { 673, 674, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 154, 0 }, - { 396, 397, 10 }, - { 524, 519, 0 }, - { 593, 588, 0 }, - { 664, 659, 0 }, - { 747, 749, 30 }, - { 245, 751, 31 }, - { 752, 754, 32 }, - { 755, 749, 33 }, - { 756, 751, 34 }, - { 757, 754, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1174, 1175, 0 }, - { 1204, 1205, 0 }, - { 2866, 1248, 0 }, - { 3340, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1163, 1164, 0 }, - { 1206, 1207, 0 }, - { 2867, 1090, 0 }, - { 3339, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2993, 2996, 54 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1108, 1109, 0 }, - { 1180, 1151, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1112, 1113, 0 }, - { 1182, 1168, 0 }, - { 2865, 1248, 0 }, - { 3343, 1248, 0 }, - { 3346, 1090, 0 }, - { 3349, 1090, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1568, 1569, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1568, 1569, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1530, 228, 39 }, - { 1534, 1535, 39 }, - { 1568, 1569, 0 }, - { 3324, 228, 39 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1520, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1520, 32, 0 }, - { 1568, 1569, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1568, 1569, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1568, 1569, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1518, 1267, 0 }, - { 1568, 1569, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1568, 1569, 0 }, - { 1596, 1598, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { 1515, 1267, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1365, 1296, 0 }, - { 1387, 1389, 0 }, - { 1568, 1569, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1348, 32, 0 }, - { 1515, 1267, 0 }, - { 1568, 1569, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1573, 1574, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1573, 1574, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1573, 1574, 0 }, - { 4195, 4193, 108 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 1573, 1574, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1521, 32, 0 }, - { 1573, 1574, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1573, 1574, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1516, 1517, 0 }, - { 1519, 1517, 0 }, - { 1573, 1574, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1350, 32, 0 }, - { 1369, 1316, 0 }, - { 1397, 1399, 0 }, - { 1573, 1574, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3275, 3277, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2860, 1090, 0 }, - { 3208, 1144, 0 }, - { 3209, 770, 0 }, - { 3279, 3280, 0 }, - { 3358, 1248, 0 }, - { 3966, 3968, 84 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 61, 0 }, - { 1830, 1831, 43 }, - { 1939, 1940, 43 }, - { 2033, 2034, 43 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4019, 4020, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4000, 3991, 0 }, - { 4019, 4020, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4021, 4022, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4002, 3988, 0 }, - { 4021, 4022, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4025, 4026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4025, 4026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4004, 4005, 0 }, - { 4025, 4026, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 2884, 2506, 0 }, - { 3459, 3461, 62 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 202, 204, 0 }, - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5670, 5656, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5662, 5656, 0 }, - { 5670, 5656, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 1209, 1212, 0 }, - { 2863, 1090, 0 }, - { 3328, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1200, 1201, 0 }, - { 1209, 1212, 0 }, - { 1290, 1062, 0 }, - { 2863, 1090, 0 }, - { 3332, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1196, 1199, 0 }, - { 2469, 1091, 0 }, - { 2863, 1090, 0 }, - { 3351, 1090, 0 }, - { 3354, 1248, 0 }, - { 3357, 1248, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 3335, 3327, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1349, 32, 0 }, - { 1602, 1603, 39 }, - { 3337, 3331, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 117, 0 }, - { 233, 119, 6 }, - { 234, 121, 7 }, - { 253, 32, 0 }, - { 256, 32, 0 }, - { 259, 107, 0 }, - { 769, 777, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 118, 32, 0 }, - { 120, 11, 6 }, - { 122, 16, 7 }, - { 216, 117, 0 }, - { 548, 549, 16 }, - { 614, 615, 18 }, - { 687, 688, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 506, 507, 16 }, - { 577, 578, 18 }, - { 647, 648, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 506, 507, 16 }, - { 511, 501, 16 }, - { 577, 578, 18 }, - { 581, 572, 18 }, - { 647, 648, 20 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 506, 507, 16 }, - { 511, 501, 16 }, - { 571, 572, 18 }, - { 577, 578, 18 }, - { 581, 572, 18 }, - { 641, 642, 20 }, - { 647, 648, 20 }, - { 652, 642, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 511, 501, 16 }, - { 518, 519, 15 }, - { 571, 572, 18 }, - { 581, 572, 18 }, - { 587, 588, 17 }, - { 641, 642, 20 }, - { 652, 642, 20 }, - { 658, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 511, 501, 16 }, - { 518, 519, 15 }, - { 521, 519, 15 }, - { 571, 572, 18 }, - { 581, 572, 18 }, - { 587, 588, 17 }, - { 590, 588, 17 }, - { 641, 642, 20 }, - { 652, 642, 20 }, - { 658, 659, 19 }, - { 661, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 506, 507, 16 }, - { 511, 501, 16 }, - { 518, 519, 15 }, - { 571, 572, 18 }, - { 577, 578, 18 }, - { 581, 572, 18 }, - { 587, 588, 17 }, - { 641, 642, 20 }, - { 647, 648, 20 }, - { 652, 642, 20 }, - { 658, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 506, 507, 16 }, - { 577, 578, 18 }, - { 647, 648, 20 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 139, 0 }, - { 500, 501, 16 }, - { 511, 501, 16 }, - { 518, 519, 15 }, - { 571, 572, 18 }, - { 581, 572, 18 }, - { 587, 588, 17 }, - { 641, 642, 20 }, - { 652, 642, 20 }, - { 658, 659, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2452, 2455, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2460, 2464, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2452, 2455, 0 }, - { 2460, 2464, 0 }, - { 2868, 32, 0 }, - { 2872, 61, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1095, 1090, 0 }, - { 2868, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2885, 3, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1344, 1151, 0 }, - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 1799, 1806, 0 }, - { 1908, 1915, 0 }, - { 2002, 2009, 0 }, - { 3244, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1345, 1151, 0 }, - { 1347, 1159, 0 }, - { 3244, 3, 0 }, - { 5662, 5656, 0 }, - { 5670, 5656, 0 }, - { 5677, 5672, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 958, 959, 0 }, - { 1005, 1004, 0 }, - { 1012, 1011, 0 }, - { 1020, 1018, 0 }, - { 1029, 1027, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1007, 1006, 0 }, - { 1014, 1013, 0 }, - { 1022, 1021, 0 }, - { 1031, 1030, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1003, 1004, 0 }, - { 1010, 1011, 0 }, - { 1017, 1018, 0 }, - { 1026, 1027, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 202, 204, 0 }, - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2885, 3, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 958, 959, 0 }, - { 1005, 1004, 0 }, - { 1012, 1011, 0 }, - { 1020, 1018, 0 }, - { 1029, 1027, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1007, 1006, 0 }, - { 1014, 1013, 0 }, - { 1022, 1021, 0 }, - { 1031, 1030, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1003, 1004, 0 }, - { 1010, 1011, 0 }, - { 1017, 1018, 0 }, - { 1026, 1027, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 202, 204, 0 }, - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2885, 3, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 958, 959, 0 }, - { 1005, 1004, 0 }, - { 1012, 1011, 0 }, - { 1020, 1018, 0 }, - { 1029, 1027, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 1007, 1006, 0 }, - { 1014, 1013, 0 }, - { 1022, 1021, 0 }, - { 1031, 1030, 0 }, - { 2851, 2852, 0 }, - { 2854, 2855, 0 }, - { 2868, 32, 0 }, - { 2869, 61, 0 }, - { 2870, 32, 0 }, - { 2893, 2897, 50 }, - { 2899, 2903, 50 }, - { 2905, 2906, 50 }, - { 2908, 2909, 50 }, - { 3412, 3413, 60 }, - { 3443, 3444, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 38, 2 }, - { 1003, 1004, 0 }, - { 1010, 1011, 0 }, - { 1017, 1018, 0 }, - { 1026, 1027, 0 }, - { 2933, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2939, 32, 0 }, - { 3401, 3402, 60 }, - { 1030, 432, 60 }, - { 3404, 3406, 60 }, - { 1021, 457, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 202, 204, 0 }, - { 2873, 32, 0 }, - { 2883, 3, 0 }, - { 5652, 5577, 123 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 2873, 32, 0 }, - { 5576, 5577, 123 }, - { ~0, ~0, ~0 }, /* Sentinel */ - -}; - -static const struct per_op_table nir_opt_algebraic_pass_op_table[nir_num_search_ops] = { - [nir_op_imul] = { - .filter = (const uint16_t []) { - 0, - 1, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 0, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 10, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 13, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 5, - 13, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 12, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 0, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 17, - 15, - 4, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 6, - 0, - 6, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 18, - .table = (const uint16_t []) { - - 2, - 3, - 2, - 2, - 362, - 2, - 2, - 2, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 3, - 3, - 367, - 368, - 369, - 370, - 371, - 3, - 372, - 373, - 374, - 375, - 2291, - 2292, - 2293, - 2294, - 2295, - 2296, - 2, - 367, - 2, - 2, - 362, - 2, - 2, - 2, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 2, - 368, - 2, - 2, - 362, - 2, - 2, - 2, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 362, - 369, - 362, - 362, - 362, - 362, - 362, - 362, - 376, - 377, - 378, - 379, - 362, - 362, - 2297, - 2298, - 2299, - 2300, - 2, - 370, - 2, - 2, - 362, - 2, - 2, - 2, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 2, - 371, - 2, - 2, - 362, - 2, - 2, - 2, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 2, - 3, - 2, - 2, - 362, - 2, - 2, - 380, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 363, - 372, - 363, - 363, - 376, - 363, - 363, - 363, - 363, - 381, - 382, - 383, - 363, - 363, - 2301, - 2302, - 2303, - 2304, - 364, - 373, - 364, - 364, - 377, - 364, - 364, - 364, - 381, - 364, - 384, - 385, - 364, - 364, - 2305, - 2306, - 2307, - 2308, - 365, - 374, - 365, - 365, - 378, - 365, - 365, - 365, - 382, - 384, - 365, - 386, - 365, - 365, - 2309, - 2310, - 2311, - 2312, - 366, - 375, - 366, - 366, - 379, - 366, - 366, - 366, - 383, - 385, - 386, - 366, - 366, - 366, - 2313, - 2314, - 2315, - 2316, - 2, - 2291, - 2, - 2, - 362, - 2, - 2, - 2, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 2, - 2292, - 2, - 2, - 362, - 2, - 2, - 2, - 363, - 364, - 365, - 366, - 2, - 2, - 2287, - 2288, - 2289, - 2290, - 2287, - 2293, - 2287, - 2287, - 2297, - 2287, - 2287, - 2287, - 2301, - 2305, - 2309, - 2313, - 2287, - 2287, - 2287, - 2317, - 2318, - 2319, - 2288, - 2294, - 2288, - 2288, - 2298, - 2288, - 2288, - 2288, - 2302, - 2306, - 2310, - 2314, - 2288, - 2288, - 2317, - 2288, - 2320, - 2321, - 2289, - 2295, - 2289, - 2289, - 2299, - 2289, - 2289, - 2289, - 2303, - 2307, - 2311, - 2315, - 2289, - 2289, - 2318, - 2320, - 2289, - 2322, - 2290, - 2296, - 2290, - 2290, - 2300, - 2290, - 2290, - 2290, - 2304, - 2308, - 2312, - 2316, - 2290, - 2290, - 2319, - 2321, - 2322, - 2290, - }, - }, - [nir_op_ishl] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 2, - 0, - 3, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 10, - 0, - 0, - 11, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 4, - 15, - 4, - 16, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 0, - 3, - 0, - 0, - 0, - 3, - 0, - 0, - 3, - 3, - 3, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 7, - 0, - 7, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 4, - 16, - 4, - 15, - 15, - 15, - 15, - 15, - 4, - 4, - 4, - 4, - 0, - 13, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 19, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 3, - 3, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 21, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 6, - 22, - 0, - 0, - 5, - 5, - 3, - 6, - 23, - 17, - 3, - 6, - 24, - 5, - 5, - 3, - 6, - 25, - 17, - 3, - 6, - 26, - 5, - 5, - 3, - 6, - 0, - 17, - }, - - .num_filtered_states = 27, - .table = (const uint16_t []) { - - 4, - 5, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 6, - 7, - 6, - 6, - 6, - 1061, - 6, - 6, - 6, - 1062, - 6, - 6, - 6, - 6, - 6, - 2324, - 6, - 6, - 6, - 1061, - 6, - 6, - 1061, - 6, - 1061, - 6, - 1061, - 4, - 1063, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 1064, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 1065, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 1066, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 1067, - 1068, - 1067, - 1067, - 1067, - 1069, - 1067, - 1067, - 1067, - 1070, - 1067, - 1067, - 1067, - 1067, - 1067, - 2325, - 1067, - 1067, - 1067, - 1069, - 1067, - 1067, - 1069, - 1067, - 1069, - 1067, - 1069, - 1071, - 1072, - 1071, - 1071, - 1071, - 1073, - 1071, - 1071, - 1071, - 1074, - 1071, - 1071, - 1071, - 1071, - 1071, - 2326, - 1071, - 1071, - 1071, - 1073, - 1071, - 1071, - 1073, - 1071, - 1073, - 1071, - 1073, - 4, - 1075, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 5, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 1076, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 1077, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 1078, - 1079, - 1078, - 1078, - 1078, - 1080, - 1078, - 1078, - 1078, - 1081, - 1078, - 1078, - 1078, - 1078, - 1078, - 2327, - 1078, - 1078, - 1078, - 1080, - 1078, - 1078, - 1080, - 1078, - 1080, - 1078, - 1080, - 4, - 2328, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2329, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 1065, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2330, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2331, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2332, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2872, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2873, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2974, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2981, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2985, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2990, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2994, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - 4, - 2999, - 4, - 4, - 4, - 1059, - 4, - 4, - 4, - 1060, - 4, - 4, - 4, - 4, - 4, - 2323, - 4, - 4, - 4, - 1059, - 4, - 4, - 1059, - 4, - 1059, - 4, - 1059, - }, - }, - [nir_op_unpack_64_2x32_split_x] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 8, - 1315, - 1316, - 1317, - 1318, - 1319, - 1320, - 1321, - }, - }, - [nir_op_imul_2x32_64] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 9, - }, - }, - [nir_op_umul_2x32_64] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 10, - }, - }, - [nir_op_udiv] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 11, - 0, - 11, - }, - }, - [nir_op_idiv] = { - .filter = (const uint16_t []) { - 0, - 1, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 0, - 12, - 0, - 0, - 12, - 0, - 387, - 388, - 387, - }, - }, - [nir_op_umod] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 13, - 0, - 13, - }, - }, - [nir_op_imod] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 14, - 0, - 14, - }, - }, - [nir_op_irem] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 15, - 0, - 15, - }, - }, - [nir_op_fmul] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 0, - 0, - 9, - 10, - 0, - 0, - 11, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 16, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 9, - 10, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 18, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 17, - 17, - 17, - 17, - 17, - 17, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 19, - 0, - 0, - 0, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 21, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 7, - 7, - 7, - 7, - 7, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 0, - 0, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 17, - 17, - 17, - 17, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 0, - 0, - 20, - 20, - 20, - 20, - 22, - 20, - 19, - 19, - 0, - 19, - 0, - 19, - 11, - 11, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 24, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 9, - 0, - 9, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 25, - 0, - 0, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 17, - 17, - 17, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 26, - .table = (const uint16_t []) { - - 16, - 17, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 17, - 17, - 1328, - 1329, - 1330, - 1331, - 1332, - 1333, - 1334, - 1335, - 1336, - 17, - 1337, - 1338, - 17, - 1335, - 2362, - 2363, - 2364, - 2365, - 2366, - 1331, - 2878, - 17, - 2879, - 2959, - 16, - 1328, - 16, - 16, - 1339, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 16, - 1329, - 16, - 16, - 1339, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 1322, - 1330, - 1339, - 1339, - 1322, - 1340, - 1322, - 1322, - 1341, - 1322, - 1342, - 1322, - 1343, - 1344, - 1322, - 1322, - 2367, - 2368, - 2368, - 2369, - 2370, - 1340, - 2880, - 2881, - 2882, - 1322, - 1323, - 1331, - 1323, - 1323, - 1340, - 1323, - 1323, - 1323, - 1345, - 1323, - 1346, - 1323, - 1347, - 1348, - 1323, - 1323, - 2371, - 2372, - 2372, - 2373, - 2374, - 1323, - 2883, - 1323, - 2884, - 1323, - 16, - 1332, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 16, - 1333, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 1324, - 1334, - 1324, - 1324, - 1341, - 1345, - 1324, - 1324, - 1349, - 1324, - 1350, - 1324, - 1351, - 1352, - 1324, - 1324, - 2375, - 2376, - 2376, - 2377, - 2378, - 2379, - 2885, - 1324, - 2886, - 1324, - 16, - 1335, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 1325, - 1336, - 1325, - 1325, - 1342, - 1346, - 1325, - 1325, - 1350, - 1325, - 1325, - 1325, - 1353, - 1354, - 1325, - 1325, - 2358, - 2380, - 2380, - 2381, - 2382, - 1346, - 2887, - 1325, - 2888, - 1325, - 16, - 17, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 1355, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 1326, - 1337, - 1326, - 1326, - 1343, - 1347, - 1326, - 1326, - 1351, - 1326, - 1353, - 1326, - 1356, - 1357, - 1326, - 1326, - 2383, - 2384, - 2384, - 2385, - 2386, - 1347, - 2889, - 1326, - 2890, - 1326, - 1327, - 1338, - 1327, - 1327, - 1344, - 1348, - 1327, - 1327, - 1352, - 1327, - 1354, - 1327, - 1357, - 1327, - 1327, - 1327, - 2387, - 2388, - 2388, - 2389, - 2390, - 1348, - 2891, - 1327, - 2892, - 1327, - 16, - 17, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 1358, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 16, - 1335, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 2391, - 2392, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 2358, - 2362, - 2358, - 2358, - 2367, - 2371, - 2358, - 2358, - 2375, - 2358, - 2358, - 2358, - 2383, - 2387, - 2358, - 2392, - 2392, - 2393, - 2393, - 2394, - 2395, - 2371, - 2893, - 2358, - 2894, - 2358, - 2359, - 2363, - 2359, - 2359, - 2368, - 2372, - 2359, - 2359, - 2376, - 2359, - 2380, - 2359, - 2384, - 2388, - 2359, - 2359, - 2393, - 2359, - 2359, - 2396, - 2397, - 2372, - 2895, - 2359, - 2896, - 2359, - 2359, - 2364, - 2359, - 2359, - 2368, - 2372, - 2359, - 2359, - 2376, - 2359, - 2380, - 2359, - 2384, - 2388, - 2359, - 2359, - 2393, - 2359, - 2359, - 2396, - 2397, - 2372, - 2895, - 2359, - 2896, - 2359, - 2360, - 2365, - 2360, - 2360, - 2369, - 2373, - 2360, - 2360, - 2377, - 2360, - 2381, - 2360, - 2385, - 2389, - 2360, - 2360, - 2394, - 2396, - 2396, - 2360, - 2361, - 2373, - 2876, - 2360, - 2897, - 2360, - 2361, - 2366, - 2361, - 2361, - 2370, - 2374, - 2361, - 2361, - 2378, - 2361, - 2382, - 2361, - 2386, - 2390, - 2361, - 2361, - 2395, - 2397, - 2397, - 2361, - 2398, - 2374, - 2898, - 2361, - 2899, - 2361, - 1323, - 1331, - 1323, - 1323, - 1340, - 1323, - 1323, - 1323, - 2379, - 1323, - 1346, - 1323, - 1347, - 1348, - 1323, - 1323, - 2371, - 2372, - 2372, - 2373, - 2374, - 1323, - 2883, - 1323, - 2900, - 1323, - 2876, - 2878, - 2876, - 2876, - 2880, - 2883, - 2876, - 2876, - 2885, - 2876, - 2887, - 2876, - 2889, - 2891, - 2876, - 2876, - 2893, - 2895, - 2895, - 2876, - 2898, - 2883, - 2898, - 2876, - 2901, - 2876, - 16, - 17, - 16, - 16, - 2881, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - 2877, - 2879, - 2877, - 2877, - 2882, - 2884, - 2877, - 2877, - 2886, - 2877, - 2888, - 2877, - 2890, - 2892, - 2877, - 2877, - 2894, - 2896, - 2896, - 2897, - 2899, - 2900, - 2901, - 2877, - 2886, - 2877, - 16, - 2959, - 16, - 16, - 1322, - 1323, - 16, - 16, - 1324, - 16, - 1325, - 16, - 1326, - 1327, - 16, - 16, - 2358, - 2359, - 2359, - 2360, - 2361, - 1323, - 2876, - 16, - 2877, - 16, - }, - }, - [nir_op_fsign] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 18, - }, - }, - [nir_op_ffloor] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 19, - 2620, - }, - }, - [nir_op_fadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 3, - 4, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 8, - 9, - 8, - 9, - 8, - 9, - 10, - 11, - 10, - 11, - 10, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 0, - 0, - 13, - 13, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 15, - 2, - 16, - 17, - 2, - 2, - 2, - 2, - 2, - 2, - 15, - 2, - 2, - 16, - 17, - 2, - 2, - 15, - 2, - 16, - 17, - 15, - 2, - 16, - 17, - 15, - 15, - 18, - 19, - 16, - 17, - 2, - 16, - 20, - 2, - 3, - 21, - 4, - 4, - 4, - 22, - 4, - 4, - 4, - 4, - 4, - 3, - 3, - 21, - 3, - 3, - 3, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 6, - 6, - 23, - 6, - 6, - 6, - 24, - 25, - 26, - 27, - 28, - 6, - 6, - 8, - 8, - 8, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 9, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 29, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 11, - 10, - 10, - 10, - 11, - 10, - 10, - 10, - 11, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 0, - 0, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 31, - 32, - 2, - 2, - 2, - 31, - 32, - 2, - 2, - 31, - 32, - 2, - 2, - 31, - 32, - 15, - 15, - 33, - 34, - 35, - 2, - 31, - 32, - 16, - 16, - 36, - 37, - 17, - 17, - 38, - 39, - 2, - 2, - 2, - 31, - 32, - 31, - 32, - 32, - 8, - 8, - 9, - 8, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 8, - 8, - 9, - 8, - 8, - 8, - 9, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 40, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 41, - 4, - 4, - 22, - 22, - 22, - 22, - 22, - 42, - 41, - 21, - 3, - 21, - 3, - 41, - 0, - 0, - 43, - 6, - 44, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 29, - 29, - 29, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 13, - 0, - 13, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 4, - 22, - 3, - 3, - 3, - 3, - 3, - 3, - 21, - 21, - 21, - 3, - 3, - 3, - 3, - 3, - 3, - 41, - 41, - 41, - 21, - 3, - 3, - 45, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 46, - 47, - 46, - 47, - 46, - 2, - 47, - 46, - 47, - 48, - 47, - 46, - 47, - 49, - 50, - 51, - 52, - 46, - 47, - 46, - 47, - 53, - 46, - 54, - 55, - 56, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 22, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 57, - .table = (const uint16_t []) { - - 20, - 21, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 21, - 21, - 21, - 1361, - 1362, - 1363, - 1364, - 21, - 1365, - 1366, - 1367, - 1368, - 21, - 1369, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 2595, - 2596, - 2597, - 2598, - 2599, - 2600, - 2601, - 2602, - 21, - 21, - 2837, - 2837, - 2837, - 2837, - 2838, - 2839, - 2839, - 2837, - 2837, - 2840, - 2841, - 2842, - 2843, - 2601, - 2960, - 2837, - 21, - 2837, - 2839, - 21, - 2837, - 21, - 2837, - 2837, - 2838, - 2837, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 1370, - 1370, - 1370, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 1370, - 2845, - 2847, - 1370, - 2845, - 1370, - 2844, - 2845, - 1370, - 2845, - 1359, - 1361, - 1359, - 1359, - 1359, - 1359, - 1372, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 2593, - 2593, - 1372, - 1372, - 1372, - 1372, - 1372, - 2603, - 1359, - 1359, - 2848, - 2848, - 2848, - 2848, - 1359, - 2849, - 2849, - 2848, - 2848, - 1359, - 2836, - 2836, - 1372, - 1372, - 1372, - 2848, - 1359, - 2848, - 2849, - 1359, - 2848, - 1359, - 2848, - 2848, - 1359, - 2848, - 1359, - 1362, - 1359, - 1359, - 1359, - 1359, - 1372, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 1359, - 2593, - 2593, - 1372, - 1372, - 1372, - 1372, - 1372, - 2603, - 1359, - 1359, - 2848, - 2848, - 2848, - 2848, - 1359, - 2849, - 2849, - 2848, - 2848, - 1359, - 2836, - 2836, - 1372, - 1372, - 1372, - 2848, - 1359, - 2848, - 2849, - 1359, - 2848, - 1359, - 2848, - 2848, - 1359, - 2848, - 20, - 1363, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 1360, - 1364, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 1360, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 20, - 21, - 20, - 1359, - 1359, - 20, - 1360, - 1373, - 20, - 20, - 1374, - 1374, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 20, - 1365, - 1371, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 1371, - 1371, - 1371, - 1371, - 1371, - 1371, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2853, - 2853, - 2853, - 2853, - 1371, - 2854, - 2854, - 2853, - 2853, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2853, - 1371, - 2853, - 2854, - 1371, - 2853, - 1371, - 2853, - 2853, - 1371, - 2853, - 20, - 1366, - 1371, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 1371, - 1371, - 1371, - 1371, - 1371, - 1371, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2853, - 2853, - 2853, - 2853, - 1371, - 2854, - 2854, - 2853, - 2853, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2853, - 1371, - 2853, - 2854, - 1371, - 2853, - 1371, - 2853, - 2853, - 1371, - 2853, - 20, - 1367, - 20, - 1359, - 1359, - 20, - 1360, - 1374, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 20, - 1368, - 20, - 1359, - 1359, - 20, - 1360, - 1374, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 20, - 21, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 2605, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 20, - 1369, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 20, - 21, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 1375, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 2606, - 2594, - 20, - 1375, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 2606, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 1370, - 1370, - 1370, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 2961, - 2845, - 2847, - 2961, - 2845, - 2961, - 2962, - 2963, - 2961, - 2963, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 1370, - 1370, - 1370, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2964, - 1370, - 2964, - 2965, - 1370, - 2964, - 1370, - 2844, - 2845, - 1370, - 2964, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 2607, - 1370, - 2607, - 2607, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2855, - 2856, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 1370, - 2845, - 2847, - 1370, - 2856, - 2607, - 2844, - 2845, - 1370, - 2845, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 1370, - 1370, - 1370, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2964, - 2961, - 2964, - 2965, - 2961, - 2964, - 2961, - 2962, - 2963, - 2961, - 2966, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 2607, - 1370, - 2607, - 2607, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2855, - 2856, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 2961, - 2845, - 2847, - 2961, - 2856, - 2967, - 2962, - 2963, - 2961, - 2963, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 2607, - 1370, - 2607, - 2607, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2855, - 2856, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2964, - 1370, - 2964, - 2965, - 1370, - 2968, - 2607, - 2844, - 2845, - 1370, - 2964, - 2593, - 2595, - 2593, - 2593, - 2593, - 2593, - 2604, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2604, - 2604, - 2604, - 2604, - 2604, - 2608, - 2593, - 2593, - 2857, - 2857, - 2857, - 2857, - 2593, - 2858, - 2858, - 2857, - 2857, - 2593, - 2836, - 2836, - 2604, - 2604, - 2604, - 2857, - 2593, - 2857, - 2858, - 2593, - 2857, - 2593, - 2857, - 2857, - 2593, - 2857, - 2593, - 2596, - 2593, - 2593, - 2593, - 2593, - 2604, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2593, - 2604, - 2604, - 2604, - 2604, - 2604, - 2608, - 2593, - 2593, - 2857, - 2857, - 2857, - 2857, - 2593, - 2858, - 2858, - 2857, - 2857, - 2593, - 2836, - 2836, - 2604, - 2604, - 2604, - 2857, - 2593, - 2857, - 2858, - 2593, - 2857, - 2593, - 2857, - 2857, - 2593, - 2857, - 1360, - 2597, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 1360, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 1360, - 2598, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 1360, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 1360, - 2599, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 1360, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 1360, - 2600, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 1360, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 1360, - 2601, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2606, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 2606, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 2594, - 2602, - 2594, - 2603, - 2603, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2608, - 2608, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2594, - 2859, - 2859, - 2859, - 2859, - 2594, - 2860, - 2860, - 2859, - 2859, - 2594, - 2861, - 2861, - 2594, - 2594, - 2594, - 2859, - 2594, - 2859, - 2860, - 2594, - 2859, - 2594, - 2859, - 2859, - 2594, - 2859, - 20, - 21, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 2605, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 2605, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 20, - 21, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 1375, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 2606, - 2594, - 20, - 1375, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 2862, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 2834, - 2837, - 2844, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2844, - 2844, - 2844, - 2844, - 2844, - 2844, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2844, - 2845, - 2844, - 2845, - 2844, - 2846, - 2847, - 2844, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2844, - 2845, - 2847, - 2844, - 2845, - 2844, - 2844, - 2845, - 2844, - 2845, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2845, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2847, - 2847, - 2845, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2845, - 2845, - 2847, - 2845, - 2845, - 2845, - 2845, - 2845, - 2845, - 2845, - 2834, - 2837, - 2844, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2844, - 2844, - 2844, - 2844, - 2844, - 2844, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2844, - 2845, - 2844, - 2845, - 2844, - 2846, - 2847, - 2844, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2962, - 2845, - 2847, - 2962, - 2845, - 2962, - 2962, - 2963, - 2962, - 2963, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2845, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2847, - 2847, - 2845, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2963, - 2845, - 2847, - 2963, - 2845, - 2963, - 2963, - 2963, - 2963, - 2963, - 20, - 2838, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 1370, - 1370, - 1370, - 1370, - 1370, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2844, - 2845, - 1370, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 2961, - 2845, - 2847, - 2961, - 2845, - 2961, - 2962, - 2963, - 2961, - 2963, - 2835, - 2839, - 2846, - 2849, - 2849, - 2835, - 2851, - 2835, - 2854, - 2854, - 2835, - 2835, - 2835, - 2835, - 2835, - 2846, - 2846, - 2846, - 2846, - 2846, - 2846, - 2858, - 2858, - 2851, - 2851, - 2851, - 2851, - 2851, - 2860, - 2835, - 2835, - 2846, - 2847, - 2846, - 2847, - 2846, - 2846, - 2847, - 2846, - 2847, - 2835, - 2864, - 2864, - 2851, - 2851, - 2851, - 2965, - 2846, - 2965, - 2965, - 2846, - 2965, - 2846, - 2846, - 2847, - 2846, - 2965, - 2835, - 2839, - 2847, - 2849, - 2849, - 2835, - 2851, - 2835, - 2854, - 2854, - 2835, - 2835, - 2835, - 2835, - 2835, - 2847, - 2847, - 2847, - 2847, - 2847, - 2847, - 2858, - 2858, - 2851, - 2851, - 2851, - 2851, - 2851, - 2860, - 2835, - 2835, - 2847, - 2847, - 2847, - 2847, - 2847, - 2847, - 2847, - 2847, - 2847, - 2835, - 2864, - 2864, - 2851, - 2851, - 2851, - 2965, - 2847, - 2965, - 2965, - 2847, - 2965, - 2847, - 2847, - 2847, - 2847, - 2965, - 2834, - 2837, - 2844, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2844, - 2844, - 2855, - 2844, - 2855, - 2855, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2844, - 2845, - 2844, - 2845, - 2844, - 2846, - 2847, - 2855, - 2856, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2844, - 2845, - 2847, - 2844, - 2856, - 2855, - 2844, - 2845, - 2844, - 2845, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2845, - 2845, - 2856, - 2845, - 2856, - 2856, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2847, - 2847, - 2856, - 2856, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2845, - 2845, - 2847, - 2845, - 2856, - 2856, - 2845, - 2845, - 2845, - 2845, - 20, - 2840, - 20, - 1359, - 1359, - 20, - 1360, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2834, - 2834, - 2834, - 2834, - 20, - 2835, - 2835, - 2834, - 2834, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2834, - 20, - 2834, - 2835, - 20, - 2834, - 20, - 2834, - 2834, - 20, - 2834, - 2836, - 2841, - 2836, - 2836, - 2836, - 2836, - 2852, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2852, - 2852, - 2852, - 2852, - 2852, - 2861, - 2836, - 2836, - 2863, - 2863, - 2863, - 2863, - 2836, - 2864, - 2864, - 2863, - 2863, - 2836, - 2836, - 2836, - 2852, - 2852, - 2852, - 2863, - 2836, - 2863, - 2864, - 2836, - 2863, - 2836, - 2863, - 2863, - 2836, - 2863, - 2836, - 2842, - 2836, - 2836, - 2836, - 2836, - 2852, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2836, - 2852, - 2852, - 2852, - 2852, - 2852, - 2861, - 2836, - 2836, - 2863, - 2863, - 2863, - 2863, - 2836, - 2864, - 2864, - 2863, - 2863, - 2836, - 2836, - 2836, - 2852, - 2852, - 2852, - 2863, - 2836, - 2863, - 2864, - 2836, - 2863, - 2836, - 2863, - 2863, - 2836, - 2863, - 1360, - 2843, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 1360, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 1360, - 2601, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2606, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 2862, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 1360, - 2960, - 1360, - 1372, - 1372, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 1360, - 2604, - 2604, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 1360, - 1360, - 2850, - 2850, - 2850, - 2850, - 1360, - 2851, - 2851, - 2850, - 2850, - 1360, - 2852, - 2852, - 1360, - 1360, - 1360, - 2850, - 1360, - 2850, - 2851, - 1360, - 2850, - 1360, - 2850, - 2850, - 1360, - 2850, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2845, - 2964, - 2845, - 2964, - 2845, - 2964, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2965, - 2965, - 2845, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2845, - 2845, - 2965, - 2964, - 2845, - 2845, - 2845, - 2845, - 2845, - 2845, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 2961, - 1370, - 1370, - 2961, - 2961, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2962, - 2963, - 2961, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 2961, - 2963, - 2847, - 2961, - 2845, - 2961, - 2962, - 2963, - 2961, - 2963, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2845, - 2964, - 2845, - 2964, - 2845, - 2964, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2965, - 2965, - 2845, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2963, - 2845, - 2965, - 2966, - 2845, - 2963, - 2963, - 2963, - 2963, - 2963, - 2835, - 2839, - 2847, - 2849, - 2849, - 2835, - 2851, - 2835, - 2854, - 2854, - 2835, - 2835, - 2835, - 2835, - 2835, - 2847, - 2965, - 2847, - 2965, - 2847, - 2965, - 2858, - 2858, - 2851, - 2851, - 2851, - 2851, - 2851, - 2860, - 2835, - 2835, - 2847, - 2847, - 2847, - 2847, - 2847, - 2965, - 2965, - 2847, - 2847, - 2835, - 2864, - 2864, - 2851, - 2851, - 2851, - 2965, - 2847, - 2965, - 2965, - 2965, - 2965, - 2847, - 2847, - 2847, - 2847, - 2965, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 2961, - 1370, - 1370, - 2961, - 2961, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2962, - 2963, - 2961, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2964, - 2961, - 2966, - 2965, - 2961, - 2964, - 2961, - 2962, - 2963, - 2961, - 2966, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2845, - 2964, - 2856, - 2964, - 2856, - 2968, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2845, - 2845, - 2845, - 2965, - 2965, - 2856, - 2856, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2845, - 2845, - 2965, - 2964, - 2856, - 2856, - 2845, - 2845, - 2845, - 2845, - 20, - 21, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 2961, - 1370, - 2607, - 2961, - 2967, - 2607, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2962, - 2963, - 2961, - 2846, - 2847, - 2855, - 2856, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 2961, - 2963, - 2847, - 2961, - 2856, - 2967, - 2962, - 2963, - 2961, - 2963, - 2834, - 2837, - 2844, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2962, - 2844, - 2844, - 2962, - 2962, - 2844, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2844, - 2845, - 2962, - 2963, - 2962, - 2846, - 2847, - 2844, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2962, - 2963, - 2847, - 2962, - 2845, - 2962, - 2962, - 2963, - 2962, - 2963, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2963, - 2845, - 2845, - 2963, - 2963, - 2845, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2963, - 2963, - 2963, - 2847, - 2847, - 2845, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2963, - 2963, - 2847, - 2963, - 2845, - 2963, - 2963, - 2963, - 2963, - 2963, - 20, - 2838, - 1370, - 1359, - 1359, - 20, - 1360, - 20, - 1371, - 1371, - 20, - 20, - 20, - 20, - 20, - 2961, - 1370, - 1370, - 2961, - 2961, - 1370, - 2593, - 2593, - 1360, - 1360, - 1360, - 1360, - 1360, - 2594, - 20, - 20, - 2844, - 2845, - 2962, - 2963, - 2961, - 2846, - 2847, - 2844, - 2845, - 20, - 2836, - 2836, - 1360, - 1360, - 1360, - 2845, - 2961, - 2963, - 2847, - 2961, - 2845, - 2961, - 2962, - 2963, - 2961, - 2963, - 2834, - 2837, - 2845, - 2848, - 2848, - 2834, - 2850, - 2834, - 2853, - 2853, - 2834, - 2834, - 2834, - 2834, - 2834, - 2963, - 2964, - 2845, - 2966, - 2963, - 2964, - 2857, - 2857, - 2850, - 2850, - 2850, - 2850, - 2850, - 2859, - 2834, - 2834, - 2845, - 2845, - 2963, - 2963, - 2963, - 2965, - 2965, - 2845, - 2845, - 2834, - 2863, - 2863, - 2850, - 2850, - 2850, - 2845, - 2963, - 2963, - 2965, - 2966, - 2845, - 2963, - 2963, - 2963, - 2963, - 2963, - }, - }, - [nir_op_fabs] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 5, - 6, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 7, - 7, - 7, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 12, - .table = (const uint16_t []) { - - 22, - 1376, - 1377, - 1378, - 1379, - 1380, - 1381, - 1382, - 1383, - 2341, - 2342, - 2343, - }, - }, - [nir_op_fneg] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 2, - 3, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 7, - 0, - 7, - 0, - 7, - 0, - 8, - 0, - 8, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 14, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 15, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 10, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 17, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 14, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 17, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 1, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 18, - .table = (const uint16_t []) { - - 23, - 1384, - 1385, - 1386, - 1387, - 1388, - 1389, - 1390, - 1391, - 1392, - 1393, - 1394, - 1395, - 1396, - 2611, - 2612, - 2613, - 2865, - }, - }, - [nir_op_ineg] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 8, - 9, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 11, - 5, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 12, - .table = (const uint16_t []) { - - 24, - 1658, - 1659, - 1660, - 1661, - 1662, - 1663, - 1664, - 1665, - 1666, - 1667, - 2785, - }, - }, - [nir_search_op_u2f] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 25, - 1968, - 1969, - 1970, - }, - }, - [nir_op_iabs] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 5, - .table = (const uint16_t []) { - - 26, - 1668, - 1669, - 1670, - 2591, - }, - }, - [nir_op_iadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 2, - 3, - 4, - 4, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 9, - 0, - 9, - 0, - 10, - 0, - 10, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 0, - 11, - 0, - 11, - 0, - 12, - 0, - 12, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 13, - 0, - 13, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 0, - 0, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 17, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 20, - 21, - 0, - 0, - 22, - 23, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 25, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 8, - 8, - 26, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 7, - 7, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 5, - 5, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 27, - 6, - 6, - 28, - 6, - 6, - 6, - 29, - 30, - 31, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 33, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 36, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 37, - 37, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 38, - 39, - 40, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 8, - 8, - 8, - 26, - 26, - 26, - 26, - 26, - 8, - 8, - 8, - 8, - 25, - 25, - 25, - 25, - 25, - 25, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 0, - 0, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 4, - 5, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 36, - 36, - 34, - 41, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 14, - 0, - 14, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 25, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 14, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - }, - - .num_filtered_states = 42, - .table = (const uint16_t []) { - - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 28, - 28, - 28, - 400, - 28, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 28, - 28, - 28, - 415, - 28, - 415, - 2035, - 2036, - 2037, - 2038, - 2039, - 2040, - 2041, - 2042, - 2043, - 2044, - 2045, - 2046, - 28, - 28, - 28, - 28, - 402, - 27, - 28, - 416, - 416, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 400, - 416, - 416, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 28, - 27, - 27, - 417, - 417, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 401, - 27, - 27, - 417, - 417, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 389, - 402, - 389, - 389, - 389, - 389, - 389, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 389, - 425, - 426, - 427, - 428, - 389, - 389, - 389, - 389, - 389, - 389, - 2047, - 2048, - 389, - 389, - 389, - 389, - 389, - 389, - 2049, - 2050, - 2051, - 2052, - 389, - 389, - 389, - 389, - 389, - 27, - 403, - 27, - 27, - 27, - 27, - 418, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 418, - 418, - 418, - 418, - 418, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 418, - 390, - 404, - 390, - 390, - 390, - 390, - 419, - 390, - 390, - 429, - 430, - 431, - 432, - 433, - 390, - 434, - 435, - 436, - 437, - 390, - 390, - 390, - 390, - 390, - 390, - 2030, - 2030, - 390, - 419, - 419, - 419, - 419, - 419, - 2053, - 2054, - 2055, - 2056, - 390, - 390, - 390, - 390, - 419, - 391, - 405, - 391, - 391, - 391, - 391, - 420, - 391, - 429, - 391, - 438, - 439, - 440, - 441, - 391, - 442, - 443, - 444, - 445, - 391, - 391, - 391, - 391, - 391, - 391, - 2057, - 2058, - 391, - 420, - 420, - 420, - 420, - 420, - 2059, - 2060, - 2061, - 2062, - 391, - 391, - 391, - 391, - 420, - 392, - 406, - 392, - 392, - 392, - 392, - 421, - 392, - 430, - 438, - 392, - 446, - 447, - 448, - 392, - 449, - 450, - 451, - 452, - 392, - 392, - 392, - 392, - 392, - 392, - 2063, - 2064, - 392, - 421, - 421, - 421, - 421, - 421, - 2065, - 2066, - 2067, - 2068, - 392, - 392, - 392, - 392, - 421, - 393, - 407, - 393, - 393, - 393, - 393, - 422, - 393, - 431, - 439, - 446, - 393, - 453, - 454, - 393, - 455, - 456, - 457, - 458, - 393, - 393, - 393, - 393, - 393, - 393, - 2069, - 2070, - 393, - 422, - 422, - 422, - 422, - 422, - 2071, - 2072, - 2073, - 2074, - 393, - 393, - 393, - 393, - 422, - 394, - 408, - 394, - 394, - 394, - 394, - 423, - 394, - 432, - 440, - 447, - 453, - 394, - 459, - 394, - 460, - 461, - 462, - 463, - 394, - 394, - 394, - 394, - 394, - 394, - 2075, - 2076, - 394, - 423, - 423, - 423, - 423, - 423, - 2077, - 2078, - 2079, - 2080, - 394, - 394, - 394, - 394, - 423, - 395, - 409, - 395, - 395, - 395, - 395, - 424, - 395, - 433, - 441, - 448, - 454, - 459, - 395, - 395, - 464, - 465, - 466, - 467, - 395, - 395, - 395, - 395, - 395, - 395, - 2081, - 2082, - 395, - 424, - 424, - 424, - 424, - 424, - 2083, - 2084, - 2085, - 2086, - 395, - 395, - 395, - 395, - 424, - 27, - 410, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 396, - 411, - 396, - 396, - 396, - 396, - 425, - 396, - 434, - 442, - 449, - 455, - 460, - 464, - 396, - 396, - 468, - 469, - 470, - 396, - 396, - 396, - 396, - 396, - 396, - 2087, - 2088, - 396, - 425, - 425, - 425, - 425, - 425, - 2089, - 2090, - 2091, - 2092, - 396, - 396, - 396, - 396, - 425, - 397, - 412, - 397, - 397, - 397, - 397, - 426, - 397, - 435, - 443, - 450, - 456, - 461, - 465, - 397, - 468, - 397, - 471, - 472, - 397, - 397, - 397, - 397, - 397, - 397, - 2093, - 2094, - 397, - 426, - 426, - 426, - 426, - 426, - 2095, - 2096, - 2097, - 2098, - 397, - 397, - 397, - 397, - 426, - 398, - 413, - 398, - 398, - 398, - 398, - 427, - 398, - 436, - 444, - 451, - 457, - 462, - 466, - 398, - 469, - 471, - 398, - 473, - 398, - 398, - 398, - 398, - 398, - 398, - 2099, - 2100, - 398, - 427, - 427, - 427, - 427, - 427, - 2101, - 2102, - 2103, - 2104, - 398, - 398, - 398, - 398, - 427, - 399, - 414, - 399, - 399, - 399, - 399, - 428, - 399, - 437, - 445, - 452, - 458, - 463, - 467, - 399, - 470, - 472, - 473, - 399, - 399, - 399, - 399, - 399, - 399, - 399, - 2105, - 2106, - 399, - 428, - 428, - 428, - 428, - 428, - 2107, - 2108, - 2109, - 2110, - 399, - 399, - 399, - 399, - 428, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 474, - 474, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 474, - 27, - 474, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 474, - 474, - 474, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 415, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 475, - 475, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 475, - 27, - 475, - 2029, - 2030, - 475, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 27, - 415, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 475, - 475, - 475, - 2029, - 2030, - 475, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 2029, - 2035, - 2029, - 2029, - 2029, - 2029, - 2047, - 2029, - 2030, - 2057, - 2063, - 2069, - 2075, - 2081, - 2029, - 2087, - 2093, - 2099, - 2105, - 2029, - 2029, - 2029, - 2029, - 2029, - 2029, - 2029, - 2030, - 2029, - 2047, - 2047, - 2047, - 2047, - 2047, - 2111, - 2112, - 2113, - 2114, - 2029, - 2029, - 2029, - 2029, - 2047, - 2030, - 2036, - 2030, - 2030, - 2030, - 2030, - 2048, - 2030, - 2030, - 2058, - 2064, - 2070, - 2076, - 2082, - 2030, - 2088, - 2094, - 2100, - 2106, - 2030, - 2030, - 2030, - 2030, - 2030, - 2030, - 2030, - 2030, - 2030, - 2048, - 2048, - 2048, - 2048, - 2048, - 2115, - 2116, - 2117, - 2118, - 2030, - 2030, - 2030, - 2030, - 2048, - 27, - 2037, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 475, - 475, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 389, - 389, - 2038, - 389, - 389, - 389, - 389, - 389, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 389, - 425, - 426, - 427, - 428, - 389, - 389, - 389, - 389, - 389, - 389, - 2047, - 2048, - 389, - 389, - 389, - 389, - 389, - 389, - 2049, - 2050, - 2051, - 2052, - 389, - 389, - 389, - 389, - 389, - 389, - 2039, - 389, - 389, - 389, - 389, - 389, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 389, - 425, - 426, - 427, - 428, - 389, - 389, - 389, - 389, - 389, - 389, - 2047, - 2048, - 389, - 389, - 389, - 389, - 389, - 389, - 2049, - 2050, - 2051, - 2052, - 389, - 389, - 389, - 389, - 389, - 389, - 2040, - 389, - 389, - 389, - 389, - 389, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 389, - 425, - 426, - 427, - 428, - 389, - 389, - 389, - 389, - 389, - 389, - 2047, - 2048, - 389, - 389, - 389, - 389, - 389, - 389, - 2049, - 2050, - 2051, - 2052, - 389, - 389, - 389, - 389, - 389, - 389, - 2041, - 389, - 389, - 389, - 389, - 389, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 389, - 425, - 426, - 427, - 428, - 389, - 389, - 389, - 389, - 389, - 389, - 2047, - 2048, - 389, - 389, - 389, - 389, - 389, - 389, - 2049, - 2050, - 2051, - 2052, - 389, - 389, - 389, - 389, - 389, - 389, - 2042, - 389, - 389, - 389, - 389, - 389, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 389, - 425, - 426, - 427, - 428, - 389, - 389, - 389, - 389, - 389, - 389, - 2047, - 2048, - 389, - 389, - 389, - 389, - 389, - 389, - 2049, - 2050, - 2051, - 2052, - 389, - 389, - 389, - 389, - 389, - 2031, - 2043, - 2031, - 2031, - 2031, - 2031, - 2049, - 2031, - 2053, - 2059, - 2065, - 2071, - 2077, - 2083, - 2031, - 2089, - 2095, - 2101, - 2107, - 2031, - 2031, - 2031, - 2031, - 2031, - 2031, - 2111, - 2115, - 2031, - 2049, - 2049, - 2049, - 2049, - 2049, - 2031, - 2119, - 2120, - 2121, - 2031, - 2031, - 2031, - 2031, - 2049, - 2032, - 2044, - 2032, - 2032, - 2032, - 2032, - 2050, - 2032, - 2054, - 2060, - 2066, - 2072, - 2078, - 2084, - 2032, - 2090, - 2096, - 2102, - 2108, - 2032, - 2032, - 2032, - 2032, - 2032, - 2032, - 2112, - 2116, - 2032, - 2050, - 2050, - 2050, - 2050, - 2050, - 2119, - 2032, - 2122, - 2123, - 2032, - 2032, - 2032, - 2032, - 2050, - 2033, - 2045, - 2033, - 2033, - 2033, - 2033, - 2051, - 2033, - 2055, - 2061, - 2067, - 2073, - 2079, - 2085, - 2033, - 2091, - 2097, - 2103, - 2109, - 2033, - 2033, - 2033, - 2033, - 2033, - 2033, - 2113, - 2117, - 2033, - 2051, - 2051, - 2051, - 2051, - 2051, - 2120, - 2122, - 2033, - 2124, - 2033, - 2033, - 2033, - 2033, - 2051, - 2034, - 2046, - 2034, - 2034, - 2034, - 2034, - 2052, - 2034, - 2056, - 2062, - 2068, - 2074, - 2080, - 2086, - 2034, - 2092, - 2098, - 2104, - 2110, - 2034, - 2034, - 2034, - 2034, - 2034, - 2034, - 2114, - 2118, - 2034, - 2052, - 2052, - 2052, - 2052, - 2052, - 2121, - 2123, - 2124, - 2034, - 2034, - 2034, - 2034, - 2034, - 2052, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 27, - 27, - 2941, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 27, - 2125, - 2125, - 389, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 2125, - 27, - 2125, - 389, - 27, - 28, - 27, - 27, - 27, - 27, - 389, - 27, - 390, - 391, - 392, - 393, - 394, - 395, - 27, - 396, - 397, - 398, - 399, - 27, - 27, - 27, - 27, - 27, - 27, - 2029, - 2030, - 27, - 389, - 389, - 389, - 389, - 389, - 2031, - 2032, - 2033, - 2034, - 27, - 2125, - 2125, - 2125, - 389, - 389, - 402, - 389, - 389, - 389, - 389, - 389, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 389, - 425, - 426, - 427, - 428, - 389, - 389, - 389, - 389, - 389, - 389, - 2047, - 2048, - 389, - 389, - 389, - 389, - 389, - 389, - 2049, - 2050, - 2051, - 2052, - 2941, - 389, - 389, - 389, - 389, - }, - }, - [nir_op_iadd_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 29, - 30, - 30, - 30, - }, - }, - [nir_op_isub_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 31, - 32, - 31, - 32, - }, - }, - [nir_op_uadd_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 33, - 34, - 34, - 34, - }, - }, - [nir_op_usub_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 35, - 36, - 35, - 36, - }, - }, - [nir_op_usadd_4x8_vc4] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 37, - 37, - 37, - }, - }, - [nir_op_fmulz] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 0, - 0, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 5, - 0, - 5, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 38, - 39, - 1629, - 38, - 38, - 38, - 1630, - 38, - 39, - 39, - 1631, - 1632, - 1633, - 1634, - 1635, - 39, - 1629, - 1631, - 1629, - 1629, - 1629, - 1629, - 1636, - 1629, - 38, - 1632, - 1629, - 38, - 38, - 38, - 1630, - 38, - 38, - 1633, - 1629, - 38, - 38, - 38, - 1630, - 38, - 38, - 1634, - 1629, - 38, - 38, - 38, - 1630, - 38, - 1630, - 1635, - 1636, - 1630, - 1630, - 1630, - 1630, - 1630, - 38, - 39, - 1629, - 38, - 38, - 38, - 1630, - 1637, - }, - }, - [nir_op_ffma] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 10, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 11, - 3, - 2, - 2, - 2, - 2, - 10, - 2, - 2, - 2, - 10, - 2, - 2, - 2, - 10, - 2, - 10, - 2, - 2, - 10, - 10, - 2, - 0, - 12, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 6, - 6, - 6, - 6, - 6, - 13, - 13, - 13, - 13, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 13, - 13, - 13, - 13, - 6, - 6, - 6, - 6, - 13, - 13, - 13, - 13, - 13, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 10, - 10, - 10, - 10, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 14, - 13, - 13, - 13, - 13, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 12, - 12, - 12, - 12, - 15, - 12, - 12, - 12, - 0, - 12, - 0, - 12, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 10, - 10, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 6, - 6, - 6, - 13, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 16, - .table = (const uint16_t []) { - - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 44, - 45, - 1406, - 1406, - 44, - 44, - 1407, - 44, - 44, - 44, - 1406, - 1406, - 44, - 1407, - 1407, - 44, - 1408, - 1409, - 1410, - 1410, - 1408, - 1408, - 1411, - 1408, - 1408, - 1408, - 1410, - 1410, - 1408, - 1411, - 1411, - 1408, - 1412, - 1413, - 1414, - 1414, - 1412, - 1412, - 1415, - 1412, - 1412, - 1412, - 1414, - 1414, - 1412, - 1415, - 1415, - 1412, - 1416, - 1417, - 1418, - 1418, - 1416, - 1416, - 1419, - 1416, - 1416, - 1416, - 1418, - 1418, - 1416, - 1419, - 1419, - 1416, - 1420, - 1421, - 1422, - 1422, - 1420, - 1420, - 1423, - 1420, - 1420, - 1420, - 1422, - 1422, - 1420, - 1423, - 1423, - 1420, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 2404, - 42, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 2405, - 2406, - 2407, - 2407, - 2405, - 2405, - 2408, - 2405, - 2405, - 2405, - 2407, - 2407, - 2405, - 2408, - 2408, - 2405, - 1408, - 1409, - 1410, - 1410, - 1408, - 1408, - 1411, - 1408, - 1408, - 1408, - 1410, - 1410, - 1408, - 1411, - 1411, - 1408, - 1412, - 1413, - 1414, - 1414, - 1412, - 1412, - 1415, - 1412, - 1412, - 1412, - 1414, - 1414, - 1412, - 1415, - 1415, - 1412, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 2903, - 2903, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1408, - 1409, - 1410, - 1410, - 1408, - 1408, - 1411, - 1408, - 1408, - 1408, - 1410, - 1410, - 1408, - 1411, - 1411, - 1408, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1412, - 1413, - 1414, - 1414, - 1412, - 1412, - 1415, - 1412, - 1412, - 1412, - 1414, - 1414, - 1412, - 1415, - 1415, - 1412, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 1416, - 1417, - 1418, - 1418, - 1416, - 1416, - 1419, - 1416, - 1416, - 1416, - 1418, - 1418, - 1416, - 1419, - 1419, - 1416, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 1425, - 1426, - 1427, - 1427, - 1425, - 1425, - 1428, - 1425, - 1425, - 1425, - 1427, - 1427, - 1425, - 1428, - 1428, - 1425, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 1429, - 1430, - 1431, - 1431, - 1429, - 1429, - 1432, - 1429, - 1429, - 1429, - 1431, - 1431, - 1429, - 1432, - 2410, - 1429, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 2411, - 2412, - 2413, - 2413, - 2411, - 2411, - 2414, - 2411, - 2411, - 2411, - 2413, - 2413, - 2411, - 2414, - 2414, - 2411, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 2905, - 2905, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 1420, - 1421, - 1422, - 1422, - 1420, - 1420, - 1423, - 1420, - 1420, - 1420, - 1422, - 1422, - 1420, - 1423, - 1423, - 1420, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 2404, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 1429, - 1430, - 1431, - 1431, - 1429, - 1429, - 1432, - 1429, - 1429, - 1429, - 1431, - 1431, - 1429, - 1432, - 2410, - 1429, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2415, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 2416, - 2417, - 2418, - 2418, - 2416, - 2416, - 2419, - 2416, - 2416, - 2416, - 2418, - 2418, - 2416, - 2419, - 2420, - 2416, - 40, - 41, - 2421, - 2421, - 40, - 40, - 1398, - 40, - 40, - 40, - 2421, - 2421, - 40, - 1398, - 2399, - 40, - 40, - 41, - 2421, - 2421, - 40, - 40, - 1398, - 40, - 40, - 40, - 2421, - 2421, - 40, - 1398, - 2399, - 40, - 2416, - 2417, - 2418, - 2418, - 2416, - 2416, - 2419, - 2416, - 2416, - 2416, - 2906, - 2906, - 2416, - 2419, - 2420, - 2416, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 2399, - 40, - 2422, - 2423, - 2424, - 2424, - 2422, - 2422, - 2425, - 2422, - 2422, - 2422, - 2424, - 2424, - 2422, - 2425, - 2425, - 2422, - 2426, - 2427, - 2428, - 2428, - 2426, - 2426, - 2429, - 2426, - 2426, - 2426, - 2428, - 2428, - 2426, - 2429, - 2429, - 2426, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 2405, - 2406, - 2407, - 2407, - 2405, - 2405, - 2408, - 2405, - 2405, - 2405, - 2407, - 2407, - 2405, - 2408, - 2408, - 2405, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 2411, - 2412, - 2413, - 2413, - 2411, - 2411, - 2414, - 2411, - 2411, - 2411, - 2413, - 2413, - 2411, - 2414, - 2414, - 2411, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2415, - 2400, - 2426, - 2427, - 2428, - 2428, - 2426, - 2426, - 2429, - 2426, - 2426, - 2426, - 2428, - 2428, - 2426, - 2429, - 2429, - 2426, - 2426, - 2427, - 2428, - 2428, - 2426, - 2426, - 2429, - 2426, - 2426, - 2426, - 2428, - 2428, - 2426, - 2429, - 2429, - 2426, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2907, - 2907, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1408, - 1409, - 1410, - 1410, - 1408, - 1408, - 1411, - 1408, - 1408, - 1408, - 1410, - 1410, - 1408, - 1411, - 1411, - 1408, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1412, - 1413, - 1414, - 1414, - 1412, - 1412, - 1415, - 1412, - 1412, - 1412, - 1414, - 1414, - 1412, - 1415, - 1415, - 1412, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1424, - 1424, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1424, - 1424, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2409, - 2409, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2409, - 2409, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 2416, - 2417, - 2418, - 2418, - 2416, - 2416, - 2419, - 2416, - 2416, - 2416, - 2418, - 2418, - 2416, - 2419, - 2420, - 2416, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 2421, - 2421, - 40, - 40, - 1398, - 40, - 40, - 40, - 2421, - 2421, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 1399, - 1399, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 1404, - 1404, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 2421, - 2421, - 40, - 40, - 1398, - 40, - 40, - 40, - 2421, - 2421, - 40, - 1398, - 2399, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2402, - 2402, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 1401, - 1401, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 1397, - 1397, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 42, - 43, - 1399, - 1399, - 42, - 42, - 1400, - 42, - 42, - 42, - 2903, - 2903, - 42, - 1400, - 1400, - 42, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 1402, - 1403, - 1404, - 1404, - 1402, - 1402, - 1405, - 1402, - 1402, - 1402, - 2905, - 2905, - 1402, - 1405, - 1405, - 1402, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 2416, - 2417, - 2418, - 2418, - 2416, - 2416, - 2419, - 2416, - 2416, - 2416, - 2906, - 2906, - 2416, - 2419, - 2420, - 2416, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 2400, - 2401, - 2402, - 2402, - 2400, - 2400, - 2403, - 2400, - 2400, - 2400, - 2907, - 2907, - 2400, - 2403, - 2403, - 2400, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1401, - 1401, - 40, - 40, - 1398, - 40, - 40, - 40, - 2904, - 2904, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - 40, - 41, - 1397, - 1397, - 40, - 40, - 1398, - 40, - 40, - 40, - 2902, - 2902, - 40, - 1398, - 1398, - 40, - }, - }, - [nir_op_ffmaz] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 3, - 3, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 46, - 47, - 46, - 1638, - 1638, - 1639, - 48, - 49, - 48, - 1640, - 1640, - 1641, - 46, - 47, - 46, - 1638, - 1638, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1638, - 1638, - 1639, - 48, - 49, - 48, - 1640, - 1640, - 1641, - 50, - 51, - 50, - 1643, - 1643, - 1644, - 48, - 49, - 48, - 1640, - 1640, - 1641, - 1645, - 1646, - 1645, - 1647, - 1647, - 1648, - 1649, - 1650, - 1649, - 1651, - 1651, - 1652, - 48, - 49, - 48, - 1640, - 1640, - 1641, - 46, - 47, - 46, - 1638, - 1638, - 1639, - 48, - 49, - 48, - 1640, - 1640, - 1641, - 1653, - 1654, - 1653, - 1655, - 1655, - 1656, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1638, - 1638, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 1645, - 1646, - 1645, - 1647, - 1647, - 1648, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 1649, - 1650, - 1649, - 1651, - 1651, - 1652, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1638, - 1638, - 1639, - 48, - 49, - 48, - 1640, - 1640, - 1641, - 46, - 47, - 46, - 1638, - 1638, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1642, - 1642, - 1639, - 46, - 47, - 46, - 1638, - 1638, - 1639, - }, - }, - [nir_op_iand] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 2, - 3, - 4, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 8, - 9, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 14, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 17, - 0, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 20, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 34, - 34, - 34, - 35, - 35, - 36, - 36, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 37, - 38, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 39, - 40, - 41, - 42, - 43, - 44, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 45, - 0, - 45, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 3, - 4, - 3, - 3, - 3, - 4, - 3, - 3, - 4, - 4, - 4, - 3, - 4, - 3, - 3, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 9, - 9, - 46, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 46, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 47, - 9, - 9, - 46, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 46, - 9, - 9, - 9, - 9, - 9, - 9, - 46, - 46, - 46, - 46, - 46, - 46, - 46, - 46, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 15, - 14, - 14, - 15, - 15, - 15, - 19, - 19, - 20, - 19, - 20, - 19, - 20, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 40, - 40, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 16, - 16, - 16, - 16, - 22, - 22, - 22, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 22, - 23, - 22, - 22, - 22, - 23, - 23, - 22, - 23, - 23, - 22, - 23, - 22, - 22, - 22, - 23, - 22, - 23, - 22, - 22, - 22, - 22, - 26, - 26, - 26, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 26, - 27, - 26, - 26, - 26, - 27, - 27, - 26, - 27, - 27, - 27, - 26, - 27, - 26, - 26, - 26, - 27, - 26, - 27, - 26, - 26, - 26, - 26, - 30, - 30, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 30, - 30, - 30, - 30, - 12, - 12, - 48, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 49, - 0, - 0, - 0, - 0, - 50, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 51, - 11, - 11, - 52, - 53, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 36, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 54, - 55, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 56, - 57, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 21, - 21, - 21, - 21, - 58, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 21, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 32, - 32, - 32, - 32, - 32, - 32, - 33, - 32, - 33, - 32, - 32, - 33, - 32, - 33, - 32, - 32, - 33, - 33, - 32, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 44, - 44, - 44, - 44, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 59, - 4, - 14, - 14, - 14, - 14, - 14, - 14, - 60, - 15, - 0, - 0, - 0, - 17, - 17, - 17, - 17, - 17, - 16, - 16, - 31, - 31, - 31, - 31, - 31, - 30, - 30, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 46, - 46, - 46, - 46, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 61, - 11, - 21, - 21, - 21, - 21, - 21, - 21, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 23, - 23, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 27, - 27, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 12, - 33, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 38, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 57, - 57, - 55, - 50, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 8, - 8, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 62, - 63, - 64, - 4, - 4, - 15, - 65, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 31, - 0, - 23, - 27, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 66, - 0, - 0, - 23, - 23, - 23, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 67, - 68, - 8, - 0, - 0, - 8, - 8, - 4, - 15, - 9, - 69, - 70, - 71, - 8, - 8, - 8, - 4, - 15, - 9, - 72, - 73, - 74, - 8, - 8, - 8, - 4, - 15, - 9, - 72, - }, - - .num_filtered_states = 75, - .table = (const uint16_t []) { - - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 53, - 53, - 1089, - 53, - 1090, - 53, - 1091, - 1092, - 1093, - 1094, - 53, - 53, - 53, - 53, - 53, - 1095, - 53, - 53, - 53, - 53, - 53, - 1096, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 53, - 1097, - 53, - 1098, - 53, - 1099, - 53, - 1100, - 1101, - 2505, - 2506, - 53, - 2507, - 2508, - 2509, - 53, - 53, - 2510, - 2511, - 2512, - 2513, - 2514, - 2830, - 2831, - 53, - 1096, - 1096, - 1096, - 53, - 2976, - 2979, - 2980, - 2987, - 2988, - 2989, - 2996, - 2997, - 2998, - 52, - 1089, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 1102, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 1102, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 52, - 1090, - 52, - 1102, - 1102, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 1102, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 2515, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 1091, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1082, - 1092, - 1082, - 1082, - 1082, - 1082, - 1082, - 1103, - 1103, - 1104, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1105, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1106, - 1082, - 1107, - 1082, - 1108, - 1082, - 1109, - 1082, - 2516, - 1104, - 1082, - 1082, - 1082, - 2517, - 1082, - 1082, - 2518, - 2519, - 2520, - 2521, - 2522, - 1082, - 1082, - 1082, - 1105, - 1105, - 1105, - 1082, - 1104, - 1082, - 1082, - 1104, - 1082, - 1082, - 1104, - 1082, - 1082, - 1082, - 1093, - 1082, - 1082, - 1082, - 1082, - 1082, - 1103, - 1103, - 1104, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1110, - 1082, - 1082, - 1105, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1082, - 1106, - 1082, - 1107, - 1082, - 1108, - 1082, - 1109, - 1082, - 2516, - 1104, - 1082, - 1082, - 1082, - 2517, - 1082, - 1082, - 2518, - 2519, - 2520, - 2521, - 2522, - 1082, - 1082, - 1082, - 1105, - 1105, - 1105, - 1082, - 1104, - 1082, - 1082, - 1104, - 1082, - 1082, - 1104, - 1082, - 1082, - 1083, - 1094, - 1083, - 1083, - 1083, - 1083, - 1083, - 1104, - 1104, - 1111, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1112, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1113, - 1083, - 1114, - 1083, - 1115, - 1083, - 1116, - 1083, - 2523, - 1111, - 1083, - 1083, - 1083, - 2524, - 1083, - 1083, - 2525, - 2526, - 2527, - 2528, - 2529, - 1083, - 1083, - 1083, - 1112, - 1112, - 1112, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 1117, - 1117, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 1117, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 1118, - 1117, - 1117, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 1117, - 52, - 52, - 2530, - 1118, - 1118, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 1118, - 1084, - 1084, - 1084, - 1118, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 1117, - 1117, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2531, - 1117, - 1117, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 1117, - 1084, - 1084, - 1084, - 1117, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 1117, - 1117, - 52, - 1119, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 1119, - 52, - 52, - 2531, - 1117, - 1117, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 2832, - 1084, - 1084, - 1084, - 2832, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 1120, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 1120, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 52, - 1095, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 1120, - 1120, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 1120, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1121, - 1121, - 52, - 52, - 52, - 1084, - 1122, - 1122, - 1122, - 1122, - 1123, - 1123, - 1123, - 1123, - 1124, - 1124, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1121, - 1125, - 52, - 52, - 52, - 1084, - 1122, - 1122, - 1122, - 1122, - 1123, - 1123, - 1123, - 1123, - 1124, - 1124, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1110, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1126, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1127, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1127, - 1127, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1084, - 1096, - 1084, - 1084, - 1084, - 1084, - 1084, - 1105, - 1105, - 1112, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1128, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1129, - 1084, - 1130, - 1084, - 1131, - 1084, - 1132, - 1084, - 2532, - 1112, - 1084, - 1084, - 1084, - 2533, - 1084, - 1084, - 2534, - 2535, - 2536, - 2537, - 2538, - 1084, - 1084, - 1084, - 1128, - 1128, - 1128, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1122, - 1122, - 52, - 52, - 52, - 1084, - 1133, - 1133, - 1133, - 1133, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1122, - 1122, - 52, - 52, - 52, - 1084, - 1133, - 1134, - 1135, - 1136, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1122, - 1122, - 52, - 52, - 52, - 1084, - 1133, - 1135, - 1137, - 1138, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1122, - 1122, - 52, - 52, - 52, - 1084, - 1133, - 1136, - 1138, - 1139, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1123, - 1123, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 1140, - 1140, - 1140, - 1140, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1123, - 1123, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 1140, - 1141, - 1142, - 1143, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1123, - 1123, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 1140, - 1142, - 1144, - 1145, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1123, - 1123, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 1140, - 1143, - 1145, - 1146, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1124, - 1124, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1147, - 1147, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 1124, - 1124, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1147, - 1148, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1149, - 1149, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1149, - 1149, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 2969, - 2970, - 2971, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1150, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1151, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1152, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1153, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1085, - 1097, - 1085, - 1085, - 1085, - 1085, - 1085, - 1106, - 1106, - 1113, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1129, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1085, - 1153, - 1153, - 1085, - 1154, - 1085, - 1155, - 1085, - 1156, - 1085, - 2539, - 1113, - 1085, - 1085, - 1085, - 2540, - 1085, - 1085, - 2541, - 2542, - 2543, - 2544, - 2545, - 1085, - 1085, - 1085, - 1129, - 1129, - 1129, - 1085, - 1113, - 1085, - 1085, - 1113, - 1085, - 1085, - 1113, - 1085, - 1085, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1157, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1086, - 1098, - 1086, - 1086, - 1086, - 1086, - 1086, - 1107, - 1107, - 1114, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1130, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1086, - 1154, - 1157, - 1157, - 1086, - 1158, - 1086, - 1159, - 1086, - 2546, - 1114, - 1086, - 1086, - 1086, - 2547, - 1086, - 1086, - 2548, - 2549, - 2550, - 2551, - 2552, - 1086, - 1086, - 1086, - 1130, - 1130, - 1130, - 1086, - 1114, - 1086, - 1086, - 1114, - 1086, - 1086, - 1114, - 1086, - 1086, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1160, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1087, - 1099, - 1087, - 1087, - 1087, - 1087, - 1087, - 1108, - 1108, - 1115, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1131, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1087, - 1155, - 1087, - 1158, - 1160, - 1160, - 1087, - 1161, - 1087, - 2553, - 1115, - 1087, - 1087, - 1087, - 2554, - 1087, - 1087, - 2555, - 2556, - 2557, - 2558, - 2559, - 1087, - 1087, - 1087, - 1131, - 1131, - 1131, - 1087, - 1115, - 1087, - 1087, - 1115, - 1087, - 1087, - 1115, - 1087, - 1087, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1162, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1088, - 1100, - 1088, - 1088, - 1088, - 1088, - 1088, - 1109, - 1109, - 1116, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1132, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1088, - 1156, - 1088, - 1159, - 1088, - 1161, - 1162, - 1162, - 1088, - 2560, - 1116, - 1088, - 1088, - 1088, - 2561, - 1088, - 1088, - 2562, - 2563, - 2564, - 2565, - 2566, - 1088, - 1088, - 1088, - 1132, - 1132, - 1132, - 1088, - 1116, - 1088, - 1088, - 1116, - 1088, - 1088, - 1116, - 1088, - 1088, - 52, - 1101, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 2498, - 2505, - 2498, - 2498, - 2498, - 2498, - 2498, - 2516, - 2516, - 2523, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2532, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2498, - 2539, - 2498, - 2546, - 2498, - 2553, - 2498, - 2560, - 2498, - 2523, - 2523, - 2498, - 2498, - 2498, - 2567, - 2498, - 2498, - 2568, - 2569, - 2570, - 2571, - 2572, - 2498, - 2498, - 2498, - 2532, - 2532, - 2532, - 2498, - 2523, - 2498, - 2498, - 2523, - 2498, - 2498, - 2523, - 2498, - 2498, - 1083, - 2506, - 1083, - 1083, - 1083, - 1083, - 1083, - 1104, - 1104, - 1111, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1112, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1113, - 1083, - 1114, - 1083, - 1115, - 1083, - 1116, - 1083, - 2523, - 1111, - 1083, - 1083, - 1083, - 2524, - 1083, - 1083, - 2525, - 2526, - 2527, - 2528, - 2529, - 1083, - 1083, - 1083, - 1112, - 1112, - 1112, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 1117, - 1117, - 52, - 1119, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 1119, - 52, - 52, - 2531, - 1117, - 1117, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 2833, - 1084, - 1084, - 1084, - 2972, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 2507, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 2508, - 52, - 52, - 52, - 2515, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 2573, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 2499, - 2509, - 2499, - 2499, - 2499, - 2499, - 2499, - 2517, - 2517, - 2524, - 2499, - 2530, - 2531, - 2531, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2533, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2499, - 2540, - 2499, - 2547, - 2499, - 2554, - 2499, - 2561, - 2499, - 2567, - 2524, - 2531, - 2499, - 2499, - 2530, - 2530, - 2530, - 2574, - 2575, - 2576, - 2577, - 2578, - 2499, - 2499, - 2530, - 2533, - 2533, - 2533, - 2530, - 2524, - 2499, - 2499, - 2524, - 2499, - 2499, - 2524, - 2499, - 2499, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 1118, - 1117, - 1117, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 1117, - 52, - 52, - 2530, - 1118, - 2579, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 1118, - 1084, - 1084, - 1084, - 1118, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 1118, - 1117, - 1117, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 1117, - 52, - 52, - 2530, - 2579, - 1118, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 1118, - 1084, - 1084, - 1084, - 1118, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 2500, - 2510, - 2500, - 2500, - 2500, - 2500, - 2500, - 2518, - 2518, - 2525, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2534, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2500, - 2541, - 2500, - 2548, - 2500, - 2555, - 2500, - 2562, - 2500, - 2568, - 2525, - 2500, - 2500, - 2500, - 2574, - 2500, - 2500, - 2500, - 2580, - 2581, - 2582, - 2583, - 2500, - 2500, - 2500, - 2534, - 2534, - 2534, - 2500, - 2525, - 2500, - 2500, - 2525, - 2500, - 2500, - 2525, - 2500, - 2500, - 2501, - 2511, - 2501, - 2501, - 2501, - 2501, - 2501, - 2519, - 2519, - 2526, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2535, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2501, - 2542, - 2501, - 2549, - 2501, - 2556, - 2501, - 2563, - 2501, - 2569, - 2526, - 2501, - 2501, - 2501, - 2575, - 2501, - 2501, - 2580, - 2501, - 2584, - 2585, - 2586, - 2501, - 2501, - 2501, - 2535, - 2535, - 2535, - 2501, - 2526, - 2501, - 2501, - 2526, - 2501, - 2501, - 2526, - 2501, - 2501, - 2502, - 2512, - 2502, - 2502, - 2502, - 2502, - 2502, - 2520, - 2520, - 2527, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2536, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2502, - 2543, - 2502, - 2550, - 2502, - 2557, - 2502, - 2564, - 2502, - 2570, - 2527, - 2502, - 2502, - 2502, - 2576, - 2502, - 2502, - 2581, - 2584, - 2502, - 2587, - 2588, - 2502, - 2502, - 2502, - 2536, - 2536, - 2536, - 2502, - 2527, - 2502, - 2502, - 2527, - 2502, - 2502, - 2527, - 2502, - 2502, - 2503, - 2513, - 2503, - 2503, - 2503, - 2503, - 2503, - 2521, - 2521, - 2528, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2537, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2503, - 2544, - 2503, - 2551, - 2503, - 2558, - 2503, - 2565, - 2503, - 2571, - 2528, - 2503, - 2503, - 2503, - 2577, - 2503, - 2503, - 2582, - 2585, - 2587, - 2589, - 2590, - 2503, - 2503, - 2503, - 2537, - 2537, - 2537, - 2503, - 2528, - 2503, - 2503, - 2528, - 2503, - 2503, - 2528, - 2503, - 2503, - 2504, - 2514, - 2504, - 2504, - 2504, - 2504, - 2504, - 2522, - 2522, - 2529, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2538, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2504, - 2545, - 2504, - 2552, - 2504, - 2559, - 2504, - 2566, - 2504, - 2572, - 2529, - 2504, - 2504, - 2504, - 2578, - 2504, - 2504, - 2583, - 2586, - 2588, - 2590, - 2538, - 2504, - 2504, - 2504, - 2538, - 2538, - 2538, - 2504, - 2529, - 2504, - 2504, - 2529, - 2504, - 2504, - 2529, - 2504, - 2504, - 52, - 2830, - 52, - 1102, - 1102, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 1102, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 52, - 2831, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 1120, - 1120, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 1120, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 1118, - 1117, - 2832, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 2833, - 52, - 52, - 2530, - 1118, - 1118, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 1118, - 1084, - 1084, - 1084, - 1118, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1084, - 1096, - 1084, - 1084, - 1084, - 1084, - 1084, - 1105, - 1105, - 1112, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1128, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 2969, - 1084, - 1084, - 1084, - 1084, - 1129, - 1084, - 1130, - 1084, - 1131, - 1084, - 1132, - 1084, - 2532, - 1112, - 1084, - 1084, - 1084, - 2533, - 1084, - 1084, - 2534, - 2535, - 2536, - 2537, - 2538, - 1084, - 1084, - 1084, - 1128, - 1128, - 1128, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 1084, - 1096, - 1084, - 1084, - 1084, - 1084, - 1084, - 1105, - 1105, - 1112, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1128, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 2970, - 1084, - 1084, - 1084, - 1084, - 1129, - 1084, - 1130, - 1084, - 1131, - 1084, - 1132, - 1084, - 2532, - 1112, - 1084, - 1084, - 1084, - 2533, - 1084, - 1084, - 2534, - 2535, - 2536, - 2537, - 2538, - 1084, - 1084, - 1084, - 1128, - 1128, - 1128, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 1084, - 1096, - 1084, - 1084, - 1084, - 1084, - 1084, - 1105, - 1105, - 1112, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1128, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 1084, - 2971, - 1084, - 1084, - 1084, - 1084, - 1129, - 1084, - 1130, - 1084, - 1131, - 1084, - 1132, - 1084, - 2532, - 1112, - 1084, - 1084, - 1084, - 2533, - 1084, - 1084, - 2534, - 2535, - 2536, - 2537, - 2538, - 1084, - 1084, - 1084, - 1128, - 1128, - 1128, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 1112, - 1084, - 1084, - 52, - 53, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 1118, - 1117, - 2832, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 2972, - 52, - 52, - 2530, - 1118, - 1118, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 52, - 1118, - 1084, - 1084, - 1084, - 1118, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 52, - 52, - 1083, - 2976, - 1083, - 1083, - 1083, - 1083, - 1083, - 1104, - 1104, - 1111, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1112, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1113, - 1083, - 1114, - 1083, - 1115, - 1083, - 1116, - 1083, - 2523, - 1111, - 1083, - 1083, - 1083, - 2524, - 1083, - 1083, - 2525, - 2526, - 2527, - 2528, - 2529, - 1083, - 1083, - 1083, - 1112, - 1112, - 1112, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 52, - 2979, - 52, - 1102, - 1102, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 1102, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 52, - 2980, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 1120, - 1120, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 1120, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 2987, - 1083, - 1083, - 1083, - 1083, - 1083, - 1104, - 1104, - 1111, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1112, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1113, - 1083, - 1114, - 1083, - 1115, - 1083, - 1116, - 1083, - 2523, - 1111, - 1083, - 1083, - 1083, - 2524, - 1083, - 1083, - 2525, - 2526, - 2527, - 2528, - 2529, - 1083, - 1083, - 1083, - 1112, - 1112, - 1112, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 52, - 2988, - 52, - 1102, - 1102, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 1102, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 52, - 2989, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 1120, - 1120, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 1120, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 2996, - 1083, - 1083, - 1083, - 1083, - 1083, - 1104, - 1104, - 1111, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1112, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1083, - 1113, - 1083, - 1114, - 1083, - 1115, - 1083, - 1116, - 1083, - 2523, - 1111, - 1083, - 1083, - 1083, - 2524, - 1083, - 1083, - 2525, - 2526, - 2527, - 2528, - 2529, - 1083, - 1083, - 1083, - 1112, - 1112, - 1112, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 1111, - 1083, - 1083, - 52, - 2997, - 52, - 1102, - 1102, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 1102, - 52, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 1083, - 1102, - 52, - 52, - 2998, - 52, - 52, - 52, - 52, - 52, - 1082, - 1082, - 1083, - 52, - 52, - 52, - 52, - 1120, - 1120, - 52, - 52, - 52, - 52, - 52, - 1084, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 52, - 1085, - 52, - 1086, - 52, - 1087, - 52, - 1088, - 52, - 2498, - 1083, - 52, - 52, - 52, - 2499, - 52, - 52, - 2500, - 2501, - 2502, - 2503, - 2504, - 52, - 1120, - 52, - 1084, - 1084, - 1084, - 52, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - 1083, - 52, - 1120, - }, - }, - [nir_op_ior] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 2, - 3, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 5, - 6, - 7, - 0, - 8, - 0, - 9, - 10, - 11, - 10, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 13, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 16, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 28, - 29, - 29, - 29, - 29, - 30, - 30, - 31, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 33, - 34, - 0, - 0, - 0, - 0, - 35, - 0, - 0, - 36, - 37, - 38, - 39, - 40, - 41, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 42, - 43, - 44, - 0, - 0, - 45, - 46, - 47, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 48, - 2, - 48, - 3, - 3, - 3, - 3, - 2, - 3, - 2, - 48, - 2, - 3, - 2, - 48, - 49, - 3, - 3, - 2, - 3, - 2, - 48, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 6, - 6, - 6, - 6, - 50, - 6, - 6, - 6, - 6, - 7, - 7, - 7, - 7, - 7, - 51, - 7, - 7, - 7, - 7, - 6, - 6, - 6, - 6, - 6, - 6, - 50, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 50, - 6, - 6, - 6, - 6, - 6, - 6, - 50, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 50, - 6, - 6, - 6, - 6, - 50, - 50, - 50, - 50, - 50, - 50, - 50, - 50, - 50, - 50, - 50, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 52, - 10, - 52, - 10, - 11, - 10, - 52, - 11, - 11, - 11, - 15, - 15, - 16, - 15, - 16, - 15, - 16, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 37, - 37, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 12, - 12, - 12, - 12, - 18, - 18, - 18, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 18, - 19, - 18, - 18, - 18, - 19, - 19, - 18, - 19, - 19, - 18, - 19, - 18, - 18, - 18, - 19, - 18, - 19, - 18, - 18, - 18, - 18, - 22, - 22, - 22, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 24, - 22, - 23, - 22, - 22, - 22, - 23, - 23, - 22, - 23, - 23, - 23, - 22, - 23, - 22, - 22, - 22, - 23, - 22, - 23, - 22, - 22, - 22, - 22, - 26, - 26, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 26, - 26, - 26, - 26, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 45, - 0, - 0, - 0, - 0, - 53, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 31, - 31, - 31, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 54, - 55, - 0, - 0, - 0, - 35, - 35, - 35, - 35, - 35, - 35, - 35, - 56, - 57, - 35, - 35, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 58, - 59, - 60, - 0, - 0, - 0, - 0, - 41, - 41, - 41, - 41, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 61, - 61, - 61, - 61, - 61, - 3, - 3, - 3, - 3, - 3, - 62, - 10, - 62, - 10, - 62, - 10, - 11, - 11, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 12, - 12, - 27, - 27, - 27, - 27, - 27, - 26, - 26, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 7, - 7, - 7, - 7, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 50, - 50, - 50, - 50, - 50, - 6, - 6, - 6, - 6, - 63, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 63, - 63, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 8, - 8, - 17, - 17, - 17, - 17, - 17, - 17, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 23, - 23, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 28, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 30, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 57, - 57, - 55, - 53, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 64, - 6, - 6, - 65, - 66, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 35, - 35, - 17, - 17, - 17, - 67, - 3, - 68, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 27, - 0, - 19, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 0, - 3, - 11, - 5, - 0, - 0, - 69, - 70, - 71, - 72, - 6, - 6, - 3, - 11, - 5, - 73, - 74, - 75, - 76, - 6, - 6, - 3, - 11, - 5, - 77, - 78, - 79, - 80, - 6, - 6, - }, - - .num_filtered_states = 81, - .table = (const uint16_t []) { - - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 55, - 55, - 55, - 55, - 1172, - 1172, - 1173, - 1174, - 1175, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 1176, - 1177, - 1177, - 1177, - 1177, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 1178, - 55, - 55, - 1179, - 55, - 1180, - 55, - 1181, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 55, - 1173, - 1174, - 55, - 55, - 2434, - 2435, - 2436, - 2437, - 55, - 55, - 55, - 55, - 55, - 1173, - 1173, - 1172, - 1172, - 55, - 55, - 1172, - 1172, - 55, - 55, - 1172, - 1172, - 55, - 55, - 1172, - 1172, - 55, - 55, - 54, - 55, - 54, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1164, - 1164, - 2438, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 2824, - 1164, - 1164, - 1163, - 1163, - 1182, - 54, - 1163, - 1163, - 1182, - 54, - 1163, - 1163, - 1182, - 54, - 1163, - 1163, - 1182, - 54, - 54, - 55, - 1182, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1183, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1182, - 1164, - 1164, - 2438, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 1182, - 2824, - 1164, - 1164, - 1163, - 1163, - 1182, - 1183, - 1163, - 1163, - 1182, - 1183, - 1163, - 1163, - 1182, - 1183, - 1163, - 1163, - 1182, - 1183, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1164, - 1173, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1194, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1195, - 1196, - 1196, - 1196, - 1196, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1197, - 1164, - 1164, - 1198, - 1164, - 1199, - 1164, - 1200, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 2443, - 2444, - 2445, - 2446, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1164, - 1174, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1194, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1195, - 1196, - 1196, - 1196, - 1196, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1197, - 1164, - 1164, - 1198, - 1164, - 1199, - 1164, - 1200, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 2443, - 2444, - 2445, - 2446, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1165, - 1175, - 1165, - 1165, - 1186, - 1186, - 1194, - 1194, - 1201, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1202, - 1203, - 1203, - 1203, - 1203, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1204, - 1165, - 1205, - 1165, - 1165, - 1206, - 1165, - 1207, - 1165, - 1208, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1165, - 1194, - 1194, - 1165, - 1165, - 2447, - 2448, - 2449, - 2450, - 1165, - 1165, - 1165, - 1165, - 1165, - 1194, - 1194, - 1186, - 1186, - 1165, - 1165, - 1186, - 1186, - 1165, - 1165, - 1186, - 1186, - 1165, - 1165, - 1186, - 1186, - 1165, - 1165, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 1209, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2451, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2825, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 1210, - 1163, - 1163, - 54, - 1210, - 1163, - 1163, - 54, - 1210, - 1163, - 1163, - 54, - 1210, - 54, - 55, - 54, - 1183, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 1210, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2451, - 1183, - 1164, - 1164, - 1210, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2825, - 1210, - 1164, - 1164, - 1163, - 1163, - 1183, - 1210, - 1163, - 1163, - 1183, - 1210, - 1163, - 1163, - 1183, - 1210, - 1163, - 1163, - 1183, - 1210, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 1211, - 1211, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 1212, - 1212, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 1211, - 1213, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 1212, - 1212, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1193, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 1214, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1193, - 1193, - 54, - 54, - 1193, - 1193, - 54, - 54, - 1193, - 1193, - 54, - 54, - 1193, - 1193, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1215, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 1215, - 1215, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1166, - 1176, - 1166, - 1166, - 1187, - 1187, - 1195, - 1195, - 1202, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1216, - 1217, - 1217, - 1217, - 1217, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1218, - 1166, - 1166, - 1219, - 1166, - 1220, - 1166, - 1221, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1166, - 1195, - 1195, - 1166, - 1166, - 2452, - 2453, - 2454, - 2455, - 1166, - 1166, - 1166, - 1166, - 1166, - 1195, - 1195, - 1187, - 1187, - 1166, - 1166, - 1187, - 1187, - 1166, - 1166, - 1187, - 1187, - 1166, - 1166, - 1187, - 1187, - 1166, - 1166, - 1167, - 1177, - 1167, - 1167, - 1188, - 1188, - 1196, - 1196, - 1203, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1217, - 1222, - 1222, - 1222, - 1222, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1223, - 1167, - 1167, - 1224, - 1167, - 1225, - 1167, - 1226, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 2456, - 2456, - 1167, - 1167, - 2457, - 2458, - 2459, - 2460, - 1167, - 1167, - 1167, - 1167, - 1167, - 1196, - 1196, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1167, - 1177, - 1167, - 1167, - 1188, - 1188, - 1196, - 1196, - 1203, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1217, - 1222, - 1227, - 1228, - 1229, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1223, - 1167, - 1167, - 1224, - 1167, - 1225, - 1167, - 1226, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 2456, - 2456, - 1167, - 1167, - 2457, - 2458, - 2459, - 2460, - 1167, - 1167, - 1167, - 1167, - 1167, - 1196, - 1196, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1167, - 1177, - 1167, - 1167, - 1188, - 1188, - 1196, - 1196, - 1203, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1217, - 1222, - 1228, - 1230, - 1231, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1223, - 1167, - 1167, - 1224, - 1167, - 1225, - 1167, - 1226, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 2456, - 2456, - 1167, - 1167, - 2457, - 2458, - 2459, - 2460, - 1167, - 1167, - 1167, - 1167, - 1167, - 1196, - 1196, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1167, - 1177, - 1167, - 1167, - 1188, - 1188, - 1196, - 1196, - 1203, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1217, - 1222, - 1229, - 1231, - 1232, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1223, - 1167, - 1167, - 1224, - 1167, - 1225, - 1167, - 1226, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 1167, - 2456, - 2456, - 1167, - 1167, - 2457, - 2458, - 2459, - 2460, - 1167, - 1167, - 1167, - 1167, - 1167, - 1196, - 1196, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 1188, - 1188, - 1167, - 1167, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 1233, - 1233, - 1233, - 1233, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 1233, - 1234, - 1235, - 1236, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 1233, - 1235, - 1237, - 1238, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 1233, - 1236, - 1238, - 1239, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 1212, - 1212, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 1240, - 1240, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 1212, - 1212, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 1240, - 1241, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 1242, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1243, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1244, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1245, - 1245, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1204, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1245, - 1245, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1246, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1168, - 1178, - 1168, - 1168, - 1189, - 1189, - 1197, - 1197, - 1205, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1218, - 1223, - 1223, - 1223, - 1223, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1246, - 1246, - 1168, - 1168, - 1247, - 1168, - 1248, - 1168, - 1249, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1168, - 1197, - 1197, - 1168, - 1168, - 2461, - 2462, - 2463, - 2464, - 1168, - 1168, - 1168, - 1168, - 1168, - 1197, - 1197, - 1189, - 1189, - 1168, - 1168, - 1189, - 1189, - 1168, - 1168, - 1189, - 1189, - 1168, - 1168, - 1189, - 1189, - 1168, - 1168, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 2465, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1250, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1169, - 1179, - 1169, - 1169, - 1190, - 1190, - 1198, - 1198, - 1206, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1219, - 1224, - 1224, - 1224, - 1224, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1247, - 1169, - 1250, - 1250, - 1169, - 1251, - 1169, - 1252, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1169, - 1198, - 1198, - 1169, - 1169, - 2466, - 2467, - 2468, - 2469, - 1169, - 1169, - 1169, - 1169, - 1169, - 1198, - 1198, - 1190, - 1190, - 1169, - 1169, - 1190, - 1190, - 1169, - 1169, - 1190, - 1190, - 1169, - 1169, - 1190, - 1190, - 1169, - 1169, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1253, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1170, - 1180, - 1170, - 1170, - 1191, - 1191, - 1199, - 1199, - 1207, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1220, - 1225, - 1225, - 1225, - 1225, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1248, - 1170, - 1170, - 1251, - 1253, - 1253, - 1170, - 1254, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1170, - 1199, - 1199, - 1170, - 1170, - 2470, - 2471, - 2472, - 2473, - 1170, - 1170, - 1170, - 1170, - 1170, - 1199, - 1199, - 1191, - 1191, - 1170, - 1170, - 1191, - 1191, - 1170, - 1170, - 1191, - 1191, - 1170, - 1170, - 1191, - 1191, - 1170, - 1170, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1255, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1171, - 1181, - 1171, - 1171, - 1192, - 1192, - 1200, - 1200, - 1208, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1221, - 1226, - 1226, - 1226, - 1226, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1249, - 1171, - 1171, - 1252, - 1171, - 1254, - 1255, - 1255, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1171, - 1200, - 1200, - 1171, - 1171, - 2474, - 2475, - 2476, - 2477, - 1171, - 1171, - 1171, - 1171, - 1171, - 1200, - 1200, - 1192, - 1192, - 1171, - 1171, - 1192, - 1192, - 1171, - 1171, - 1192, - 1192, - 1171, - 1171, - 1192, - 1192, - 1171, - 1171, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 1256, - 1256, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 1256, - 54, - 1256, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 1256, - 1256, - 1256, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 1257, - 1257, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 1257, - 54, - 1257, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 1257, - 1257, - 1257, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 2451, - 2451, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1164, - 1164, - 2478, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 2826, - 1164, - 1164, - 1163, - 1163, - 1182, - 2451, - 1163, - 1163, - 1182, - 2451, - 1163, - 1163, - 1182, - 2451, - 1163, - 1163, - 1182, - 2451, - 54, - 55, - 1182, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1183, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 2465, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1182, - 1164, - 1164, - 2438, - 54, - 2430, - 2431, - 2479, - 2480, - 54, - 54, - 54, - 1182, - 2824, - 2827, - 2949, - 1163, - 1163, - 1182, - 1183, - 1163, - 1163, - 1182, - 1183, - 1163, - 1163, - 1182, - 1183, - 1163, - 1163, - 1182, - 1183, - 1164, - 1173, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1194, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1195, - 2456, - 2456, - 2456, - 2456, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1197, - 1164, - 1164, - 1198, - 1164, - 1199, - 1164, - 1200, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 2443, - 2444, - 2445, - 2446, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1164, - 1174, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1194, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1195, - 2456, - 2456, - 2456, - 2456, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1197, - 1164, - 1164, - 1198, - 1164, - 1199, - 1164, - 1200, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 2443, - 2444, - 2445, - 2446, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 54, - 55, - 2438, - 2438, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2478, - 2438, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2828, - 54, - 1164, - 1164, - 1163, - 1163, - 2438, - 1210, - 1163, - 1163, - 2438, - 1210, - 1163, - 1163, - 2438, - 1210, - 1163, - 1163, - 2438, - 1210, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 2481, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 2430, - 2434, - 2430, - 2430, - 2439, - 2439, - 2443, - 2443, - 2447, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2452, - 2457, - 2457, - 2457, - 2457, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2461, - 2430, - 2430, - 2466, - 2430, - 2470, - 2430, - 2474, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2430, - 2443, - 2443, - 2430, - 2430, - 2430, - 2482, - 2483, - 2484, - 2430, - 2430, - 2430, - 2430, - 2430, - 2443, - 2443, - 2439, - 2439, - 2430, - 2430, - 2439, - 2439, - 2430, - 2430, - 2439, - 2439, - 2430, - 2430, - 2439, - 2439, - 2430, - 2430, - 2431, - 2435, - 2431, - 2431, - 2440, - 2440, - 2444, - 2444, - 2448, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2453, - 2458, - 2458, - 2458, - 2458, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2462, - 2431, - 2431, - 2467, - 2431, - 2471, - 2431, - 2475, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2431, - 2444, - 2444, - 2431, - 2431, - 2482, - 2431, - 2485, - 2486, - 2431, - 2431, - 2431, - 2431, - 2431, - 2444, - 2444, - 2440, - 2440, - 2431, - 2431, - 2440, - 2440, - 2431, - 2431, - 2440, - 2440, - 2431, - 2431, - 2440, - 2440, - 2431, - 2431, - 2432, - 2436, - 2432, - 2432, - 2441, - 2441, - 2445, - 2445, - 2449, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2454, - 2459, - 2459, - 2459, - 2459, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2463, - 2432, - 2432, - 2468, - 2432, - 2472, - 2432, - 2476, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2432, - 2479, - 2445, - 2445, - 2432, - 2432, - 2483, - 2485, - 2432, - 2487, - 2432, - 2432, - 2432, - 2432, - 2432, - 2445, - 2445, - 2441, - 2441, - 2432, - 2432, - 2441, - 2441, - 2432, - 2432, - 2441, - 2441, - 2432, - 2432, - 2441, - 2441, - 2432, - 2432, - 2433, - 2437, - 2433, - 2433, - 2442, - 2442, - 2446, - 2446, - 2450, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2455, - 2460, - 2460, - 2460, - 2460, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2464, - 2433, - 2433, - 2469, - 2433, - 2473, - 2433, - 2477, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2433, - 2480, - 2446, - 2446, - 2433, - 2433, - 2484, - 2486, - 2487, - 2488, - 2433, - 2433, - 2433, - 2433, - 2433, - 2446, - 2446, - 2442, - 2442, - 2433, - 2433, - 2442, - 2442, - 2433, - 2433, - 2442, - 2442, - 2433, - 2433, - 2442, - 2442, - 2433, - 2433, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 2489, - 2489, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 2489, - 54, - 2489, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 54, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 2489, - 2489, - 2489, - 54, - 54, - 1164, - 1164, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 1163, - 1163, - 54, - 54, - 54, - 55, - 54, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 2825, - 2825, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1164, - 1164, - 2828, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 54, - 2829, - 1164, - 1164, - 1163, - 1163, - 1182, - 2825, - 1163, - 1163, - 1182, - 2825, - 1163, - 1163, - 1182, - 2825, - 1163, - 1163, - 1182, - 2825, - 54, - 55, - 2824, - 2824, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2826, - 2824, - 1164, - 1164, - 54, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2829, - 54, - 1164, - 1164, - 1163, - 1163, - 2824, - 1210, - 1163, - 1163, - 2824, - 1210, - 1163, - 1163, - 2824, - 1210, - 1163, - 1163, - 2824, - 1210, - 1164, - 1173, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1194, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1195, - 1196, - 1196, - 1196, - 1196, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1197, - 1164, - 1164, - 1198, - 1164, - 1199, - 1164, - 1200, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 2827, - 1164, - 1164, - 1164, - 1164, - 2443, - 2444, - 2445, - 2446, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1164, - 1173, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1194, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1195, - 1196, - 1196, - 1196, - 1196, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1197, - 1164, - 1164, - 1198, - 1164, - 1199, - 1164, - 1200, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 2949, - 1164, - 1164, - 1164, - 1164, - 2443, - 2444, - 2445, - 2446, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1185, - 1185, - 1164, - 1164, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 2950, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 2950, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 54, - 55, - 1182, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1183, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1182, - 1164, - 1164, - 2438, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 1182, - 2824, - 1164, - 1164, - 1163, - 1163, - 1182, - 2951, - 1163, - 1163, - 1182, - 2951, - 1163, - 1163, - 1182, - 2951, - 1163, - 1163, - 1182, - 2951, - 54, - 55, - 54, - 1183, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 1210, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2451, - 1183, - 1164, - 1164, - 1210, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2825, - 1210, - 1164, - 1164, - 1163, - 1163, - 2951, - 1210, - 1163, - 1163, - 2951, - 1210, - 1163, - 1163, - 2951, - 1210, - 1163, - 1163, - 2951, - 1210, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 1184, - 2983, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 2983, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 54, - 55, - 1182, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1183, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1182, - 1164, - 1164, - 2438, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 1182, - 2824, - 1164, - 1164, - 1163, - 1163, - 1182, - 2951, - 1163, - 1163, - 1182, - 2984, - 1163, - 1163, - 1182, - 2984, - 1163, - 1163, - 1182, - 2984, - 54, - 55, - 54, - 1183, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 1210, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2451, - 1183, - 1164, - 1164, - 1210, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2825, - 1210, - 1164, - 1164, - 1163, - 1163, - 2951, - 1210, - 1163, - 1163, - 2984, - 1210, - 1163, - 1163, - 2984, - 1210, - 1163, - 1163, - 2984, - 1210, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 2992, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 2992, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 54, - 55, - 1182, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1183, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1182, - 1164, - 1164, - 2438, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 1182, - 2824, - 1164, - 1164, - 1163, - 1163, - 1182, - 2951, - 1163, - 1163, - 1182, - 2984, - 1163, - 1163, - 1182, - 2993, - 1163, - 1163, - 1182, - 2993, - 54, - 55, - 54, - 1183, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 1210, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2451, - 1183, - 1164, - 1164, - 1210, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2825, - 1210, - 1164, - 1164, - 1163, - 1163, - 2951, - 1210, - 1163, - 1163, - 2984, - 1210, - 1163, - 1163, - 2993, - 1210, - 1163, - 1163, - 2993, - 1210, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 3001, - 1163, - 1163, - 1163, - 1172, - 1163, - 1163, - 1184, - 1184, - 1185, - 1185, - 1186, - 1163, - 1163, - 1163, - 1163, - 1163, - 1193, - 1163, - 1163, - 1187, - 1188, - 1188, - 1188, - 1188, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1189, - 1163, - 1163, - 1190, - 1163, - 1191, - 1163, - 1192, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1163, - 1163, - 2439, - 2440, - 2441, - 2442, - 1163, - 1163, - 1163, - 1163, - 1163, - 1185, - 1185, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 1184, - 1184, - 1163, - 1163, - 3001, - 1184, - 1163, - 1163, - 54, - 55, - 1182, - 1182, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 54, - 1183, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 1182, - 1182, - 1164, - 1164, - 2438, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 1182, - 2824, - 1164, - 1164, - 1163, - 1163, - 1182, - 2951, - 1163, - 1163, - 1182, - 2984, - 1163, - 1163, - 1182, - 2993, - 1163, - 1163, - 1182, - 3002, - 54, - 55, - 54, - 1183, - 1163, - 1163, - 1164, - 1164, - 1165, - 54, - 1210, - 1210, - 54, - 54, - 54, - 54, - 54, - 1166, - 1167, - 1167, - 1167, - 1167, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 54, - 1168, - 54, - 54, - 1169, - 54, - 1170, - 54, - 1171, - 54, - 54, - 54, - 54, - 54, - 54, - 2451, - 1183, - 1164, - 1164, - 1210, - 54, - 2430, - 2431, - 2432, - 2433, - 54, - 54, - 54, - 2825, - 1210, - 1164, - 1164, - 1163, - 1163, - 2951, - 1210, - 1163, - 1163, - 2984, - 1210, - 1163, - 1163, - 2993, - 1210, - 1163, - 1163, - 3002, - 1210, - }, - }, - [nir_op_ieq] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 3, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 14, - 0, - 15, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 18, - 19, - 20, - 0, - 0, - 0, - 21, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 9, - 0, - 9, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 24, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 25, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 11, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 5, - 0, - 0, - 5, - 5, - 0, - 6, - 0, - 0, - 0, - 6, - 5, - 5, - 5, - 0, - 6, - 0, - 0, - 0, - 6, - 5, - 5, - 5, - 0, - 6, - 0, - 0, - }, - - .num_filtered_states = 26, - .table = (const uint16_t []) { - - 56, - 57, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 57, - 57, - 1673, - 1674, - 1675, - 1676, - 1677, - 1678, - 1679, - 1680, - 1681, - 1682, - 1683, - 1684, - 1685, - 1686, - 1687, - 1688, - 1689, - 1690, - 1691, - 1692, - 1693, - 2490, - 2491, - 2875, - 56, - 1673, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1674, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 1671, - 1675, - 1671, - 1671, - 1671, - 1694, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1671, - 1694, - 1671, - 1694, - 1672, - 1676, - 1672, - 1672, - 1694, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 56, - 1677, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1678, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1679, - 56, - 56, - 1671, - 1672, - 56, - 56, - 1695, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1680, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1681, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1682, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 1696, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1683, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 1697, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1684, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1685, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1686, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1687, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1688, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1689, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1690, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1691, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1692, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 56, - 1693, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 1672, - 2490, - 1672, - 1672, - 1694, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 56, - 2491, - 56, - 56, - 1671, - 1672, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 56, - 1672, - 56, - 1672, - 1672, - 2875, - 1672, - 1672, - 1694, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - 1672, - }, - }, - [nir_op_ine] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 3, - 0, - 4, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 14, - 15, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 18, - 19, - 20, - 0, - 0, - 0, - 21, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 7, - 7, - 7, - 0, - 0, - 10, - 0, - 10, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 23, - 3, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 0, - 24, - 0, - 24, - 0, - 24, - 24, - 0, - 24, - 24, - 25, - 0, - 0, - 25, - 0, - 0, - 25, - 0, - 25, - 25, - 25, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 11, - 23, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 24, - 24, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 6, - 0, - 0, - 6, - 6, - 0, - 7, - 0, - 0, - 0, - 7, - 6, - 6, - 6, - 0, - 7, - 0, - 0, - 0, - 7, - 6, - 6, - 6, - 0, - 7, - 0, - 0, - }, - - .num_filtered_states = 26, - .table = (const uint16_t []) { - - 58, - 59, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 59, - 59, - 1573, - 1574, - 1575, - 1576, - 1577, - 1578, - 1579, - 1580, - 1581, - 1582, - 1583, - 1584, - 1585, - 1586, - 1587, - 1588, - 1589, - 1590, - 1591, - 1592, - 1593, - 2711, - 2939, - 2940, - 58, - 1573, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1574, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1575, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1571, - 1576, - 1571, - 1571, - 1571, - 1571, - 1594, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1571, - 1572, - 1577, - 1572, - 1572, - 1572, - 1594, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 1572, - 58, - 1578, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1579, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1580, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 1595, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1581, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1582, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 1596, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1583, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 1597, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1584, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1585, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1586, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1587, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1588, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1589, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1590, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1591, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1592, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 1593, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 2711, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 2712, - 58, - 58, - 58, - 2939, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 2940, - 58, - 58, - 58, - 1571, - 1572, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - 58, - }, - }, - [nir_op_ushr] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 0, - 0, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 9, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 12, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 2, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 4, - 14, - 0, - 0, - 3, - 3, - 9, - 4, - 15, - 10, - 2, - 4, - 16, - 3, - 3, - 9, - 4, - 17, - 10, - 2, - 4, - 18, - 3, - 3, - 9, - 4, - 0, - 10, - }, - - .num_filtered_states = 19, - .table = (const uint16_t []) { - - 60, - 61, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 62, - 63, - 62, - 1288, - 62, - 1289, - 62, - 62, - 2335, - 2336, - 62, - 62, - 1288, - 62, - 1288, - 62, - 1288, - 62, - 1288, - 1290, - 1291, - 1290, - 1292, - 1290, - 1293, - 1290, - 1290, - 2337, - 2338, - 1290, - 1290, - 1292, - 1290, - 1292, - 1290, - 1292, - 1290, - 1292, - 60, - 61, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1294, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 61, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1295, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1296, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 61, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 1290, - 1291, - 1290, - 1292, - 1290, - 1293, - 1290, - 1290, - 2337, - 2338, - 1290, - 1290, - 1292, - 1290, - 1292, - 1290, - 1292, - 1290, - 1292, - 60, - 2339, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 2340, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 2874, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 2975, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 2982, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 2986, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 2991, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 2995, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 3000, - 60, - 1286, - 60, - 1287, - 60, - 60, - 2333, - 2334, - 60, - 60, - 1286, - 60, - 1286, - 60, - 1286, - 60, - 1286, - }, - }, - [nir_op_fsat] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 9, - 2, - 2, - 10, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 11, - .table = (const uint16_t []) { - - 64, - 1457, - 1458, - 1459, - 1460, - 2621, - 2622, - 2623, - 2624, - 2625, - 2626, - }, - }, - [nir_op_umul_unorm_4x8_vc4] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 65, - 65, - 65, - }, - }, - [nir_op_flrp] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 5, - .table = (const uint16_t []) { - - 66, - 67, - 66, - 66, - 1433, - 68, - 69, - 68, - 68, - 1434, - 1435, - 1436, - 1435, - 1435, - 1437, - 1438, - 1439, - 1438, - 1438, - 1440, - 66, - 67, - 66, - 66, - 1433, - 70, - 71, - 70, - 70, - 1441, - 72, - 73, - 72, - 72, - 1442, - 1443, - 1444, - 1443, - 1443, - 1445, - 1446, - 1447, - 1446, - 1446, - 1448, - 70, - 71, - 70, - 70, - 1441, - 66, - 67, - 66, - 66, - 1433, - 68, - 69, - 68, - 68, - 1434, - 1449, - 1450, - 1449, - 1449, - 1451, - 1438, - 1439, - 1438, - 1438, - 1440, - 66, - 67, - 66, - 66, - 1433, - 66, - 67, - 66, - 66, - 1433, - 68, - 69, - 68, - 68, - 1434, - 1435, - 1436, - 1435, - 1435, - 1437, - 1452, - 1453, - 1452, - 1452, - 1454, - 66, - 67, - 66, - 66, - 1433, - 66, - 67, - 66, - 66, - 1433, - 68, - 69, - 68, - 68, - 1434, - 1435, - 1436, - 1435, - 1435, - 1437, - 1438, - 1439, - 1438, - 1438, - 1440, - 66, - 67, - 66, - 66, - 1433, - }, - }, - [nir_op_sdot_4x8_iadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 74, - 75, - 76, - 77, - 76, - 77, - 78, - 79, - }, - }, - [nir_op_udot_4x8_uadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 80, - 81, - 82, - 83, - 82, - 83, - 84, - 85, - }, - }, - [nir_op_sdot_4x8_iadd_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 86, - 86, - 87, - 87, - 87, - 87, - 88, - 88, - }, - }, - [nir_op_udot_4x8_uadd_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 89, - 90, - 91, - 92, - 91, - 92, - 93, - 94, - }, - }, - [nir_op_sdot_2x16_iadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 95, - 96, - 97, - 98, - 97, - 98, - 99, - 100, - }, - }, - [nir_op_udot_2x16_uadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 101, - 102, - 103, - 104, - 103, - 104, - 105, - 106, - }, - }, - [nir_op_sdot_2x16_iadd_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 107, - 107, - 108, - 108, - 108, - 108, - 109, - 109, - }, - }, - [nir_op_udot_2x16_uadd_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 110, - 110, - 111, - 111, - 111, - 111, - 112, - 112, - }, - }, - [nir_op_sudot_4x8_iadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - }, - }, - [nir_op_sudot_4x8_iadd_sat] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 121, - 121, - 122, - 122, - 123, - 123, - 124, - 124, - }, - }, - [nir_op_bcsel] = { - .filter = (const uint16_t []) { - 0, - 1, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 0, - 0, - 0, - 5, - 6, - 0, - 0, - 0, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 10, - 10, - 0, - 11, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 15, - 16, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 19, - 20, - 21, - 20, - 21, - 22, - 22, - 22, - 22, - 0, - 0, - 23, - 24, - 25, - 25, - 25, - 25, - 26, - 26, - 27, - 27, - 28, - 28, - 0, - 29, - 29, - 30, - 30, - 31, - 31, - 32, - 32, - 33, - 33, - 0, - 34, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 35, - 0, - 36, - 0, - 37, - 38, - 38, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 39, - 40, - 40, - 40, - 40, - 41, - 42, - 43, - 0, - 0, - 44, - 45, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 46, - 0, - 46, - 0, - 0, - 0, - 0, - 0, - 47, - 48, - 49, - 50, - 51, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 52, - 53, - 54, - 55, - 56, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 57, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 57, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 58, - 7, - 7, - 57, - 57, - 57, - 57, - 57, - 57, - 57, - 57, - 57, - 57, - 57, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 18, - 18, - 18, - 18, - 18, - 18, - 34, - 34, - 34, - 34, - 34, - 34, - 34, - 35, - 35, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 59, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 20, - 21, - 20, - 20, - 20, - 21, - 21, - 20, - 21, - 21, - 20, - 21, - 20, - 20, - 20, - 21, - 20, - 21, - 20, - 20, - 20, - 20, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 60, - 61, - 62, - 63, - 64, - 65, - 0, - 0, - 0, - 0, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 66, - 0, - 0, - 0, - 0, - 0, - 67, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 68, - 69, - 70, - 71, - 72, - 73, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 74, - 74, - 74, - 74, - 74, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 75, - 75, - 75, - 75, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 27, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 76, - 77, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 78, - 79, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 23, - 23, - 23, - 23, - 23, - 23, - 24, - 23, - 24, - 23, - 23, - 24, - 23, - 24, - 23, - 23, - 24, - 24, - 23, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 26, - 80, - 81, - 82, - 83, - 84, - 0, - 39, - 39, - 39, - 39, - 39, - 41, - 42, - 42, - 42, - 42, - 43, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 33, - 33, - 33, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 17, - 17, - 48, - 37, - 37, - 37, - 37, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 40, - 0, - 0, - 0, - 0, - 0, - 47, - 51, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 85, - 57, - 86, - 87, - 88, - 89, - 7, - 7, - 7, - 7, - 57, - 57, - 57, - 57, - 57, - 57, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 15, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 11, - 11, - 19, - 19, - 19, - 19, - 19, - 19, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 59, - 59, - 6, - 6, - 6, - 20, - 21, - 21, - 21, - 21, - 21, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 29, - 22, - 22, - 22, - 22, - 40, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 0, - 0, - 0, - 0, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 31, - 12, - 0, - 24, - 25, - 25, - 25, - 25, - 74, - 25, - 25, - 25, - 26, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 33, - 33, - 33, - 33, - 33, - 33, - 33, - 33, - 33, - 33, - 33, - 33, - 34, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 38, - 79, - 79, - 77, - 0, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 14, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 32, - 10, - 10, - 10, - 10, - 10, - 10, - 9, - 9, - 90, - 91, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 19, - 19, - 19, - 0, - 0, - 0, - 11, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 16, - 21, - 22, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 28, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 12, - 12, - 57, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 14, - 14, - 21, - 21, - 21, - 29, - 29, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 92, - 93, - 0, - 0, - 9, - 14, - 14, - 9, - 9, - 0, - 0, - 10, - 10, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 10, - 10, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 10, - 10, - }, - - .num_filtered_states = 94, - .table = (const uint16_t []) { - - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 131, - 132, - 131, - 131, - 131, - 131, - 538, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 539, - 131, - 131, - 540, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 131, - 129, - 130, - 541, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 542, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 543, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 544, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 545, - 546, - 545, - 545, - 545, - 545, - 547, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 548, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 545, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 550, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 551, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 551, - 551, - 551, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 552, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 553, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 554, - 555, - 554, - 554, - 554, - 554, - 556, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 557, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 554, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 558, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 558, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 559, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 560, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 561, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 562, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 563, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 564, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 565, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 566, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 567, - 568, - 567, - 567, - 567, - 567, - 569, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 570, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 567, - 571, - 572, - 571, - 571, - 571, - 571, - 573, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 574, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 571, - 575, - 576, - 575, - 575, - 575, - 575, - 577, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 578, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 575, - 579, - 580, - 579, - 579, - 579, - 579, - 581, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 582, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 579, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 583, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 584, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 585, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 586, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 587, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 588, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 589, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 590, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 591, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 592, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 593, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 594, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 595, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 558, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 558, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 2142, - 2143, - 2142, - 2142, - 2142, - 2142, - 2144, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2145, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2142, - 2146, - 2147, - 2146, - 2146, - 2146, - 2146, - 2148, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2149, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2146, - 2150, - 2151, - 2150, - 2150, - 2150, - 2150, - 2152, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2153, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2150, - 2154, - 2155, - 2154, - 2154, - 2154, - 2154, - 2156, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2157, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 2154, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 549, - 549, - 549, - 549, - 549, - 129, - 129, - 129, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 551, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 551, - 551, - 551, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 551, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 551, - 551, - 551, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 551, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 551, - 551, - 551, - 129, - 129, - 130, - 129, - 129, - 129, - 129, - 536, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 537, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 129, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2786, - 127, - 2787, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2788, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2789, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 596, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 597, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 598, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 599, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 600, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2790, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2791, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2792, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2793, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 601, - 602, - 601, - 601, - 601, - 601, - 603, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 604, - 601, - 601, - 605, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 2158, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 601, - 2977, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 610, - 611, - 610, - 610, - 610, - 610, - 612, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 613, - 610, - 610, - 614, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 610, - 606, - 607, - 615, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 616, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 617, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 618, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 619, - 620, - 619, - 619, - 619, - 619, - 621, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 622, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 619, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 624, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 625, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 625, - 625, - 625, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 626, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 627, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 628, - 629, - 628, - 628, - 628, - 628, - 630, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 631, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 628, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 632, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 632, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 633, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 634, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 635, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 636, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 637, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 638, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 639, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 640, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 641, - 642, - 641, - 641, - 641, - 641, - 643, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 644, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 641, - 645, - 646, - 645, - 645, - 645, - 645, - 647, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 648, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 645, - 649, - 650, - 649, - 649, - 649, - 649, - 651, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 652, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 649, - 653, - 654, - 653, - 653, - 653, - 653, - 655, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 656, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 653, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 657, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 658, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 659, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 660, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 661, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 662, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 663, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 664, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 665, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 666, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 667, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 668, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 669, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 632, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 632, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 2159, - 2160, - 2159, - 2159, - 2159, - 2159, - 2161, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2162, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2159, - 2163, - 2164, - 2163, - 2163, - 2163, - 2163, - 2165, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2166, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2163, - 2167, - 2168, - 2167, - 2167, - 2167, - 2167, - 2169, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2170, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2167, - 2171, - 2172, - 2171, - 2171, - 2171, - 2171, - 2173, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2174, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 2171, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 623, - 623, - 623, - 623, - 623, - 606, - 606, - 606, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 625, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 625, - 625, - 625, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 625, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 625, - 625, - 625, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 625, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 625, - 625, - 625, - 606, - 606, - 607, - 606, - 606, - 606, - 606, - 608, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 609, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 606, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 674, - 675, - 674, - 674, - 674, - 674, - 676, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 677, - 674, - 674, - 678, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 670, - 671, - 679, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 680, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 681, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 682, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 683, - 684, - 683, - 683, - 683, - 683, - 685, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 686, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 683, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 688, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 690, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 691, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 692, - 693, - 692, - 692, - 692, - 692, - 694, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 695, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 697, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 698, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 699, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 700, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 701, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 702, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 703, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 704, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 705, - 706, - 705, - 705, - 705, - 705, - 707, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 708, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 709, - 710, - 709, - 709, - 709, - 709, - 711, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 712, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 713, - 714, - 713, - 713, - 713, - 713, - 715, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 716, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 717, - 718, - 717, - 717, - 717, - 717, - 719, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 720, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 721, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 722, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 723, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 724, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 725, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 726, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 727, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 728, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 729, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 730, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 731, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 732, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 733, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 2175, - 2176, - 2175, - 2175, - 2175, - 2175, - 2177, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2178, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2179, - 2180, - 2179, - 2179, - 2179, - 2179, - 2181, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2182, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2183, - 2184, - 2183, - 2183, - 2183, - 2183, - 2185, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2186, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2187, - 2188, - 2187, - 2187, - 2187, - 2187, - 2189, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2190, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 674, - 675, - 674, - 674, - 674, - 674, - 676, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 677, - 674, - 674, - 678, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 734, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 674, - 670, - 671, - 679, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 680, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 681, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 682, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 735, - 736, - 735, - 735, - 735, - 735, - 737, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 738, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 735, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 688, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 690, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 691, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 692, - 693, - 692, - 692, - 692, - 692, - 694, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 695, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 692, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 697, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 698, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 699, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 700, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 701, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 702, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 703, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 704, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 705, - 706, - 705, - 705, - 705, - 705, - 707, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 708, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 705, - 709, - 710, - 709, - 709, - 709, - 709, - 711, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 712, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 709, - 713, - 714, - 713, - 713, - 713, - 713, - 715, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 716, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 713, - 717, - 718, - 717, - 717, - 717, - 717, - 719, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 720, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 717, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 721, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 722, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 723, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 724, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 725, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 726, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 727, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 728, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 729, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 730, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 731, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 732, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 733, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 696, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 2175, - 2176, - 2175, - 2175, - 2175, - 2175, - 2177, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2178, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2175, - 2179, - 2180, - 2179, - 2179, - 2179, - 2179, - 2181, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2182, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2179, - 2183, - 2184, - 2183, - 2183, - 2183, - 2183, - 2185, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2186, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2183, - 2187, - 2188, - 2187, - 2187, - 2187, - 2187, - 2189, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2190, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 2187, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 687, - 687, - 687, - 687, - 687, - 670, - 670, - 670, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 689, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 689, - 689, - 689, - 670, - 670, - 671, - 670, - 670, - 670, - 670, - 672, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 673, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 670, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 743, - 744, - 743, - 743, - 743, - 743, - 745, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 746, - 743, - 743, - 747, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 743, - 739, - 740, - 748, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 749, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 750, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 751, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 752, - 753, - 752, - 752, - 752, - 752, - 754, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 755, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 752, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 757, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 758, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 758, - 758, - 758, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 759, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 760, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 761, - 762, - 761, - 761, - 761, - 761, - 763, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 764, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 761, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 765, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 765, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 766, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 767, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 768, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 769, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 770, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 771, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 772, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 773, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 774, - 775, - 774, - 774, - 774, - 774, - 776, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 777, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 774, - 778, - 779, - 778, - 778, - 778, - 778, - 780, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 781, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 778, - 782, - 783, - 782, - 782, - 782, - 782, - 784, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 785, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 782, - 786, - 787, - 786, - 786, - 786, - 786, - 788, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 789, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 786, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 790, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 791, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 792, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 793, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 794, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 795, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 796, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 797, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 798, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 799, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 800, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 801, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 802, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 765, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 765, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 2191, - 2192, - 2191, - 2191, - 2191, - 2191, - 2193, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2194, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2191, - 2195, - 2196, - 2195, - 2195, - 2195, - 2195, - 2197, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2198, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2195, - 2199, - 2200, - 2199, - 2199, - 2199, - 2199, - 2201, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2202, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2199, - 2203, - 2204, - 2203, - 2203, - 2203, - 2203, - 2205, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2206, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 2203, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 756, - 756, - 756, - 756, - 756, - 739, - 739, - 739, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 758, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 758, - 758, - 758, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 758, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 758, - 758, - 758, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 758, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 758, - 758, - 758, - 739, - 739, - 740, - 739, - 739, - 739, - 739, - 741, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 742, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 739, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 807, - 808, - 807, - 807, - 807, - 807, - 809, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 810, - 807, - 807, - 811, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 803, - 804, - 812, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 813, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 814, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 815, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 816, - 817, - 816, - 816, - 816, - 816, - 818, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 819, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 821, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 823, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 824, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 825, - 826, - 825, - 825, - 825, - 825, - 827, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 828, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 830, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 831, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 832, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 833, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 834, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 835, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 836, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 837, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 838, - 839, - 838, - 838, - 838, - 838, - 840, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 841, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 842, - 843, - 842, - 842, - 842, - 842, - 844, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 845, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 846, - 847, - 846, - 846, - 846, - 846, - 848, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 849, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 850, - 851, - 850, - 850, - 850, - 850, - 852, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 853, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 854, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 855, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 856, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 857, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 858, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 859, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 860, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 861, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 862, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 863, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 864, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 865, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 866, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 2207, - 2208, - 2207, - 2207, - 2207, - 2207, - 2209, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2210, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2211, - 2212, - 2211, - 2211, - 2211, - 2211, - 2213, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2214, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2215, - 2216, - 2215, - 2215, - 2215, - 2215, - 2217, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2218, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2219, - 2220, - 2219, - 2219, - 2219, - 2219, - 2221, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2222, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 807, - 808, - 807, - 807, - 807, - 807, - 809, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 810, - 807, - 807, - 811, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 807, - 803, - 804, - 812, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 813, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 814, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 815, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 816, - 817, - 816, - 816, - 816, - 816, - 818, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 819, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 816, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 821, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 823, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 824, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 825, - 826, - 825, - 825, - 825, - 825, - 827, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 828, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 825, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 830, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 831, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 832, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 833, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 834, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 835, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 836, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 837, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 838, - 839, - 838, - 838, - 838, - 838, - 840, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 841, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 838, - 842, - 843, - 842, - 842, - 842, - 842, - 844, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 845, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 842, - 846, - 847, - 846, - 846, - 846, - 846, - 848, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 849, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 846, - 850, - 851, - 850, - 850, - 850, - 850, - 852, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 853, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 850, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 854, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 855, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 856, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 857, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 858, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 859, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 860, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 861, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 862, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 863, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 864, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 865, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 866, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 829, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 2223, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 2207, - 2208, - 2207, - 2207, - 2207, - 2207, - 2209, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2210, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2207, - 2211, - 2212, - 2211, - 2211, - 2211, - 2211, - 2213, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2214, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2211, - 2215, - 2216, - 2215, - 2215, - 2215, - 2215, - 2217, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2218, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2215, - 2219, - 2220, - 2219, - 2219, - 2219, - 2219, - 2221, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2222, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 2219, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 820, - 820, - 820, - 820, - 820, - 803, - 803, - 803, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 822, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 822, - 822, - 822, - 803, - 803, - 804, - 803, - 803, - 803, - 803, - 805, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 806, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 803, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 871, - 872, - 871, - 871, - 871, - 871, - 873, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 874, - 871, - 871, - 875, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 2224, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 2224, - 2224, - 2224, - 2224, - 871, - 871, - 871, - 871, - 867, - 868, - 876, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 877, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 878, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 879, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 880, - 881, - 880, - 880, - 880, - 880, - 882, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 883, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 885, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 887, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 888, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 889, - 890, - 889, - 889, - 889, - 889, - 891, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 892, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 894, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 895, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 896, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 897, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 898, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 899, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 900, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 901, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 902, - 903, - 902, - 902, - 902, - 902, - 904, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 905, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 906, - 907, - 906, - 906, - 906, - 906, - 908, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 909, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 910, - 911, - 910, - 910, - 910, - 910, - 912, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 913, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 914, - 915, - 914, - 914, - 914, - 914, - 916, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 917, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 918, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 919, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 920, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 921, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 922, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 923, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 924, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 925, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 926, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 927, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 928, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 929, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 930, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 2225, - 2226, - 2225, - 2225, - 2225, - 2225, - 2227, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2228, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2229, - 2230, - 2229, - 2229, - 2229, - 2229, - 2231, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2232, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2233, - 2234, - 2233, - 2233, - 2233, - 2233, - 2235, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2236, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2237, - 2238, - 2237, - 2237, - 2237, - 2237, - 2239, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2240, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 935, - 936, - 935, - 935, - 935, - 935, - 937, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 938, - 935, - 935, - 939, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 931, - 932, - 940, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 941, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 942, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 943, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 944, - 945, - 944, - 944, - 944, - 944, - 946, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 947, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 949, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 951, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 952, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 953, - 954, - 953, - 953, - 953, - 953, - 955, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 956, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 958, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 959, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 960, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 961, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 962, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 963, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 964, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 965, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 966, - 967, - 966, - 966, - 966, - 966, - 968, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 969, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 970, - 971, - 970, - 970, - 970, - 970, - 972, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 973, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 974, - 975, - 974, - 974, - 974, - 974, - 976, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 977, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 978, - 979, - 978, - 978, - 978, - 978, - 980, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 981, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 982, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 983, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 984, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 985, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 986, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 987, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 988, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 989, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 990, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 991, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 992, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 993, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 994, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2241, - 2242, - 2241, - 2241, - 2241, - 2241, - 2243, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2244, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2245, - 2246, - 2245, - 2245, - 2245, - 2245, - 2247, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2248, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2249, - 2250, - 2249, - 2249, - 2249, - 2249, - 2251, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2252, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2253, - 2254, - 2253, - 2253, - 2253, - 2253, - 2255, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2256, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 999, - 1000, - 999, - 999, - 999, - 999, - 1001, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 1002, - 999, - 999, - 1003, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 995, - 996, - 1004, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 1005, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 1006, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 1007, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1008, - 1009, - 1008, - 1008, - 1008, - 1008, - 1010, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1011, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 1013, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 1015, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 1016, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1017, - 1018, - 1017, - 1017, - 1017, - 1017, - 1019, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1020, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1022, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 1023, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1024, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1025, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1026, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1027, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1028, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1029, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1030, - 1031, - 1030, - 1030, - 1030, - 1030, - 1032, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1033, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1034, - 1035, - 1034, - 1034, - 1034, - 1034, - 1036, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1037, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1038, - 1039, - 1038, - 1038, - 1038, - 1038, - 1040, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1041, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1042, - 1043, - 1042, - 1042, - 1042, - 1042, - 1044, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1045, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1046, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1047, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1048, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1049, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1050, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1051, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1052, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1053, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1054, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1055, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1056, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1057, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1058, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 2257, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 2258, - 2259, - 2258, - 2258, - 2258, - 2258, - 2260, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2261, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2262, - 2263, - 2262, - 2262, - 2262, - 2262, - 2264, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2265, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2266, - 2267, - 2266, - 2266, - 2266, - 2266, - 2268, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2269, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2270, - 2271, - 2270, - 2270, - 2270, - 2270, - 2272, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2273, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2257, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2257, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2257, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2257, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 596, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 597, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 598, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 599, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 600, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2794, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2795, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2790, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2791, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2792, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2793, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 596, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 597, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 598, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 599, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 600, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2796, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2797, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2792, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2793, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 596, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 597, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 598, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 599, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 600, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2790, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2791, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2798, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2799, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2792, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2793, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 596, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 597, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 598, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 599, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 600, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2790, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2791, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2800, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2801, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 2274, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2274, - 2274, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2274, - 2274, - 2274, - 2274, - 2274, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 596, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 597, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 598, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 599, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 600, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2790, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2791, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2792, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2793, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2275, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2275, - 2275, - 2275, - 2275, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 596, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 597, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 598, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 599, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 600, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2790, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2791, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2792, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2793, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2802, - 2786, - 127, - 2787, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2803, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2788, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2789, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2804, - 127, - 2787, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2805, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2789, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2786, - 2806, - 2787, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2788, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2807, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2789, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2786, - 127, - 2808, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2788, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2809, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2786, - 127, - 2787, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2788, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2789, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2276, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 2786, - 127, - 2787, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2788, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2789, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2277, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2277, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2277, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2277, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 2277, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 871, - 872, - 871, - 871, - 871, - 871, - 873, - 2278, - 871, - 871, - 871, - 871, - 871, - 871, - 874, - 871, - 871, - 875, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 2279, - 2278, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 871, - 2278, - 2279, - 2279, - 2279, - 2279, - 871, - 871, - 871, - 871, - 867, - 868, - 876, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 877, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 878, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 879, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 880, - 881, - 880, - 880, - 880, - 880, - 882, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 883, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 880, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 885, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 887, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 888, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 889, - 890, - 889, - 889, - 889, - 889, - 891, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 892, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 889, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 894, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 895, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 896, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 897, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 898, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 899, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 900, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 901, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 902, - 903, - 902, - 902, - 902, - 902, - 904, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 905, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 902, - 906, - 907, - 906, - 906, - 906, - 906, - 908, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 909, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 906, - 910, - 911, - 910, - 910, - 910, - 910, - 912, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 913, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 910, - 914, - 915, - 914, - 914, - 914, - 914, - 916, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 917, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 914, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 918, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 919, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 920, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 921, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 922, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 923, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 924, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 925, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 926, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 927, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 928, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 929, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 930, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 893, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 2225, - 2226, - 2225, - 2225, - 2225, - 2225, - 2227, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2228, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2225, - 2229, - 2230, - 2229, - 2229, - 2229, - 2229, - 2231, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2232, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2229, - 2233, - 2234, - 2233, - 2233, - 2233, - 2233, - 2235, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2236, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2233, - 2237, - 2238, - 2237, - 2237, - 2237, - 2237, - 2239, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2240, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 2237, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 884, - 884, - 884, - 884, - 884, - 867, - 867, - 867, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 886, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 886, - 886, - 886, - 867, - 867, - 868, - 867, - 867, - 867, - 867, - 869, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 870, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 867, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 999, - 1000, - 999, - 999, - 999, - 999, - 1001, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 1002, - 999, - 999, - 1003, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 999, - 995, - 996, - 1004, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 1005, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 1006, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 1007, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1008, - 1009, - 1008, - 1008, - 1008, - 1008, - 1010, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1011, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 1008, - 995, - 2280, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 1013, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 1015, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 1016, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1017, - 1018, - 1017, - 1017, - 1017, - 1017, - 1019, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1020, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 1017, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1022, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 1023, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1024, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1025, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1026, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1027, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1028, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1029, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1030, - 1031, - 1030, - 1030, - 1030, - 1030, - 1032, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1033, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1030, - 1034, - 1035, - 1034, - 1034, - 1034, - 1034, - 1036, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1037, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1034, - 1038, - 1039, - 1038, - 1038, - 1038, - 1038, - 1040, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1041, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1038, - 1042, - 1043, - 1042, - 1042, - 1042, - 1042, - 1044, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1045, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 1042, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1046, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1047, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1048, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1049, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1050, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1051, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1052, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1053, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1054, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1055, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1056, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1057, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1058, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 2281, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2280, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1021, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 2258, - 2259, - 2258, - 2258, - 2258, - 2258, - 2260, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2261, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2258, - 2262, - 2263, - 2262, - 2262, - 2262, - 2262, - 2264, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2265, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2262, - 2266, - 2267, - 2266, - 2266, - 2266, - 2266, - 2268, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2269, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2266, - 2270, - 2271, - 2270, - 2270, - 2270, - 2270, - 2272, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2273, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 2270, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 2280, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2281, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2281, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2281, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 2281, - 995, - 995, - 995, - 995, - 997, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1012, - 1012, - 1012, - 1012, - 1012, - 995, - 995, - 995, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 1014, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 1014, - 1014, - 1014, - 995, - 995, - 996, - 995, - 995, - 995, - 995, - 997, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 998, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 995, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 935, - 936, - 935, - 935, - 935, - 935, - 937, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 938, - 935, - 935, - 939, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 931, - 932, - 940, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 941, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 942, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 943, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 944, - 945, - 944, - 944, - 944, - 944, - 946, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 947, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 949, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 951, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 952, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 953, - 954, - 953, - 953, - 953, - 953, - 955, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 956, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 958, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 959, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 960, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 961, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 962, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 963, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 964, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 965, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 966, - 967, - 966, - 966, - 966, - 966, - 968, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 969, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 970, - 971, - 970, - 970, - 970, - 970, - 972, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 973, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 974, - 975, - 974, - 974, - 974, - 974, - 976, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 977, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 978, - 979, - 978, - 978, - 978, - 978, - 980, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 981, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 982, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 983, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 984, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 985, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 986, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 987, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 988, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 989, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2282, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 990, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 991, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 992, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 993, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 994, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2241, - 2242, - 2241, - 2241, - 2241, - 2241, - 2243, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2244, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2245, - 2246, - 2245, - 2245, - 2245, - 2245, - 2247, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2248, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2249, - 2250, - 2249, - 2249, - 2249, - 2249, - 2251, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2252, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2253, - 2254, - 2253, - 2253, - 2253, - 2253, - 2255, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2256, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 935, - 936, - 935, - 935, - 935, - 935, - 937, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 938, - 935, - 935, - 939, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 931, - 932, - 940, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 941, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 942, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 943, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 944, - 945, - 944, - 944, - 944, - 944, - 946, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 947, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 949, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 951, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 952, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 953, - 954, - 953, - 953, - 953, - 953, - 955, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 956, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 958, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 959, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 960, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 961, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 962, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 963, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 964, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 965, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 966, - 967, - 966, - 966, - 966, - 966, - 968, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 969, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 970, - 971, - 970, - 970, - 970, - 970, - 972, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 973, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 974, - 975, - 974, - 974, - 974, - 974, - 976, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 977, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 978, - 979, - 978, - 978, - 978, - 978, - 980, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 981, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 982, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 983, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 984, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 985, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 986, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 987, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 988, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 989, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2283, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 990, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 991, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 992, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 993, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 994, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2241, - 2242, - 2241, - 2241, - 2241, - 2241, - 2243, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2244, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2245, - 2246, - 2245, - 2245, - 2245, - 2245, - 2247, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2248, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2249, - 2250, - 2249, - 2249, - 2249, - 2249, - 2251, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2252, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2253, - 2254, - 2253, - 2253, - 2253, - 2253, - 2255, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2256, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 935, - 936, - 935, - 935, - 935, - 935, - 937, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 938, - 935, - 935, - 939, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 931, - 932, - 940, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 941, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 942, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 943, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 944, - 945, - 944, - 944, - 944, - 944, - 946, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 947, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 949, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 951, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 952, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 953, - 954, - 953, - 953, - 953, - 953, - 955, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 956, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 958, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 959, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 960, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 961, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 962, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 963, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 964, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 965, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 966, - 967, - 966, - 966, - 966, - 966, - 968, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 969, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 970, - 971, - 970, - 970, - 970, - 970, - 972, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 973, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 974, - 975, - 974, - 974, - 974, - 974, - 976, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 977, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 978, - 979, - 978, - 978, - 978, - 978, - 980, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 981, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 982, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 983, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 984, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 985, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 986, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 987, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 988, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 989, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2284, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 990, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 991, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 992, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 993, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 994, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2241, - 2242, - 2241, - 2241, - 2241, - 2241, - 2243, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2244, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2245, - 2246, - 2245, - 2245, - 2245, - 2245, - 2247, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2248, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2249, - 2250, - 2249, - 2249, - 2249, - 2249, - 2251, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2252, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2253, - 2254, - 2253, - 2253, - 2253, - 2253, - 2255, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2256, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 935, - 936, - 935, - 935, - 935, - 935, - 937, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 938, - 935, - 935, - 939, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 931, - 932, - 940, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 941, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 942, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 943, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 944, - 945, - 944, - 944, - 944, - 944, - 946, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 947, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 949, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 951, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 952, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 953, - 954, - 953, - 953, - 953, - 953, - 955, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 956, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 958, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 959, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 960, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 961, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 962, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 963, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 964, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 965, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 966, - 967, - 966, - 966, - 966, - 966, - 968, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 969, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 970, - 971, - 970, - 970, - 970, - 970, - 972, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 973, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 974, - 975, - 974, - 974, - 974, - 974, - 976, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 977, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 978, - 979, - 978, - 978, - 978, - 978, - 980, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 981, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 982, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 983, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 984, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 985, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 986, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 987, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 988, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 989, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2285, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 990, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 991, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 992, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 993, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 994, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2241, - 2242, - 2241, - 2241, - 2241, - 2241, - 2243, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2244, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2245, - 2246, - 2245, - 2245, - 2245, - 2245, - 2247, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2248, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2249, - 2250, - 2249, - 2249, - 2249, - 2249, - 2251, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2252, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2253, - 2254, - 2253, - 2253, - 2253, - 2253, - 2255, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2256, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 935, - 936, - 935, - 935, - 935, - 935, - 937, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 938, - 935, - 935, - 939, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 935, - 931, - 932, - 940, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 941, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 942, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 943, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 944, - 945, - 944, - 944, - 944, - 944, - 946, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 947, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 944, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 949, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 951, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 952, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 953, - 954, - 953, - 953, - 953, - 953, - 955, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 956, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 953, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 958, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 959, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 960, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 961, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 962, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 963, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 964, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 965, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 966, - 967, - 966, - 966, - 966, - 966, - 968, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 969, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 966, - 970, - 971, - 970, - 970, - 970, - 970, - 972, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 973, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 970, - 974, - 975, - 974, - 974, - 974, - 974, - 976, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 977, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 974, - 978, - 979, - 978, - 978, - 978, - 978, - 980, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 981, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 978, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 982, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 983, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 984, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 985, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 986, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 987, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 988, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 989, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2286, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 990, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 991, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 992, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 993, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 994, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 957, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 2241, - 2242, - 2241, - 2241, - 2241, - 2241, - 2243, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2244, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2241, - 2245, - 2246, - 2245, - 2245, - 2245, - 2245, - 2247, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2248, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2245, - 2249, - 2250, - 2249, - 2249, - 2249, - 2249, - 2251, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2252, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2249, - 2253, - 2254, - 2253, - 2253, - 2253, - 2253, - 2255, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2256, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 2253, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 948, - 948, - 948, - 948, - 948, - 931, - 931, - 931, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 950, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 950, - 950, - 950, - 931, - 931, - 932, - 931, - 931, - 931, - 931, - 933, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 934, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 931, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2952, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2952, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2952, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2952, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2953, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2953, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2953, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2953, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2953, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2953, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2953, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2978, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 127, - 128, - 127, - 127, - 127, - 127, - 478, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 479, - 127, - 127, - 480, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 127, - 125, - 126, - 481, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 482, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 483, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 484, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 485, - 486, - 485, - 485, - 485, - 485, - 487, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 488, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 485, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 490, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 492, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 493, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 494, - 495, - 494, - 494, - 494, - 494, - 496, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 497, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 494, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 499, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 500, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 501, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 502, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 503, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 504, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 505, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 506, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 507, - 508, - 507, - 507, - 507, - 507, - 509, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 510, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 507, - 511, - 512, - 511, - 511, - 511, - 511, - 513, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 514, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 511, - 515, - 516, - 515, - 515, - 515, - 515, - 517, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 518, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 515, - 519, - 520, - 519, - 519, - 519, - 519, - 521, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 522, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 519, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 523, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 524, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 525, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 526, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 527, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 528, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 529, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 530, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 531, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 532, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 533, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 534, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 535, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 498, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 2126, - 2127, - 2126, - 2126, - 2126, - 2126, - 2128, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2129, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2126, - 2130, - 2131, - 2130, - 2130, - 2130, - 2130, - 2132, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2133, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2130, - 2134, - 2135, - 2134, - 2134, - 2134, - 2134, - 2136, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2137, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2134, - 2138, - 2139, - 2138, - 2138, - 2138, - 2138, - 2140, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2141, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 2138, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 489, - 489, - 489, - 489, - 489, - 125, - 125, - 125, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 491, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 491, - 491, - 491, - 125, - 125, - 126, - 125, - 125, - 125, - 125, - 476, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 477, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - 125, - }, - }, - [nir_op_feq] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 4, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 12, - 13, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 0, - 0, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 19, - 4, - 4, - 4, - 4, - 4, - 4, - 20, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 21, - 2, - 2, - 0, - 0, - 4, - 4, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 21, - 2, - 2, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 22, - .table = (const uint16_t []) { - - 133, - 134, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 134, - 134, - 1470, - 1471, - 1472, - 1473, - 1474, - 1475, - 1476, - 1477, - 134, - 1478, - 1479, - 1480, - 1481, - 2344, - 2345, - 2346, - 2347, - 2348, - 1472, - 2908, - 1468, - 1470, - 1468, - 1468, - 1482, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1482, - 1482, - 1468, - 1468, - 1471, - 1468, - 1468, - 1482, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1482, - 1482, - 1468, - 1469, - 1472, - 1482, - 1482, - 1483, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1482, - 1483, - 1483, - 1482, - 133, - 1473, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 1474, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 1475, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 1476, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 1484, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 2349, - 1468, - 133, - 1477, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 134, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 1485, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 1478, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 1479, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 1480, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 1481, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 2344, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 2345, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 133, - 2346, - 1468, - 1468, - 1469, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 133, - 1468, - 1469, - 1469, - 1468, - 1468, - 2347, - 1468, - 1468, - 1482, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1482, - 1482, - 1468, - 1469, - 2348, - 1482, - 1482, - 1483, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1482, - 1483, - 1483, - 1482, - 1469, - 1472, - 1482, - 1482, - 1483, - 1469, - 1469, - 1469, - 2349, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1469, - 1482, - 1483, - 2350, - 1482, - 1468, - 2908, - 1468, - 1468, - 1482, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1468, - 1482, - 1482, - 1468, - }, - }, - [nir_op_fexp2] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 4, - 1, - 1, - 1, - 1, - 1, - 3, - 1, - 1, - 1, - 3, - 1, - 1, - 1, - 3, - 1, - 3, - 1, - 1, - 3, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 3, - 3, - 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 135, - 1455, - 1456, - 2609, - 2610, - 2910, - }, - }, - [nir_search_op_b2f] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 136, - 2005, - 2006, - 2007, - }, - }, - [nir_op_ftrunc] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 137, - }, - }, - [nir_op_ffract] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 138, - }, - }, - [nir_op_fceil] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 139, - }, - }, - [nir_search_op_b2i] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 2, - 0, - 0, - 0, - 2, - 2, - 0, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 5, - 1, - 1, - 1, - 1, - 1, - 1, - 6, - 6, - 7, - 7, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 140, - 1895, - 1896, - 1897, - 1898, - 2678, - 2679, - 2680, - }, - }, - [nir_op_fdph] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 141, - }, - }, - [nir_op_fdot4] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 5, - .table = (const uint16_t []) { - - 142, - 143, - 1990, - 1991, - 1992, - 143, - 143, - 1993, - 1994, - 1995, - 1990, - 1993, - 1990, - 1991, - 1992, - 1991, - 1994, - 1991, - 1991, - 1992, - 1992, - 1995, - 1992, - 1992, - 1992, - }, - }, - [nir_op_fdot3] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 144, - 145, - 1996, - 1997, - 145, - 145, - 1998, - 1999, - 1996, - 1998, - 1996, - 1997, - 1997, - 1999, - 1997, - 1997, - }, - }, - [nir_op_fdot2] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 146, - 147, - 2000, - 147, - 147, - 2001, - 2000, - 2001, - 2000, - }, - }, - [nir_op_vec4] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 148, - 149, - 148, - 150, - 148, - 149, - 148, - 151, - 148, - 149, - 148, - 150, - 148, - 149, - 148, - 151, - }, - }, - [nir_op_vec3] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 152, - 153, - 152, - 154, - 152, - 153, - 152, - 154, - }, - }, - [nir_op_vec2] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 155, - 156, - 155, - 155, - 157, - 158, - 157, - 157, - 155, - 156, - 155, - 1313, - 155, - 156, - 155, - 155, - }, - }, - [nir_op_fsum2] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 159, - }, - }, - [nir_op_ishr] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 5, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 4, - 0, - 0, - 4, - 4, - 2, - 0, - 0, - 0, - 2, - 0, - 4, - 4, - 4, - 2, - 0, - 0, - 0, - 2, - 0, - 4, - 4, - 4, - 2, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 160, - 161, - 160, - 160, - 1297, - 160, - 162, - 163, - 162, - 162, - 1298, - 162, - 160, - 1299, - 160, - 160, - 1297, - 160, - 1300, - 1301, - 1300, - 1300, - 1302, - 1300, - 160, - 161, - 160, - 160, - 1297, - 160, - 160, - 1303, - 160, - 160, - 1297, - 160, - }, - }, - [nir_op_inot] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 3, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 5, - 6, - 7, - 7, - 7, - 7, - 8, - 8, - 8, - 8, - 9, - 9, - 10, - 10, - 11, - 11, - 11, - 11, - 12, - 12, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 15, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 18, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 5, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 6, - 6, - 6, - 6, - 6, - 6, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 20, - 0, - 0, - 0, - 21, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 21, - 21, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 22, - 20, - 20, - 20, - 20, - 20, - 0, - 21, - 21, - 21, - 21, - 21, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 10, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 9, - 0, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 23, - .table = (const uint16_t []) { - - 164, - 1872, - 1873, - 1874, - 1875, - 1876, - 1877, - 1878, - 1879, - 1880, - 1881, - 1882, - 1883, - 1884, - 2492, - 2493, - 2494, - 2495, - 2496, - 2497, - 2869, - 2870, - 2871, - }, - }, - [nir_op_flt] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 5, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 10, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 13, - 3, - 3, - 3, - 14, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 13, - 2, - 2, - 15, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 5, - 5, - 16, - 17, - 5, - 5, - 5, - 5, - 5, - 18, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 13, - 3, - 3, - 14, - 14, - 14, - 14, - 14, - 14, - 13, - 13, - 2, - 13, - 2, - 13, - 0, - 0, - 5, - 19, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 3, - 20, - 3, - 3, - 3, - 3, - 21, - 2, - 2, - 2, - 2, - 2, - 2, - 13, - 13, - 13, - 2, - 2, - 2, - 2, - 2, - 2, - 13, - 13, - 13, - 13, - 2, - 2, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 9, - 22, - 9, - 9, - 22, - 9, - 9, - 22, - 9, - 22, - 22, - 9, - 22, - 9, - 22, - 9, - 22, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 0, - 14, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 23, - .table = (const uint16_t []) { - - 165, - 166, - 165, - 165, - 165, - 1486, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1486, - 1486, - 1486, - 1486, - 165, - 165, - 1487, - 167, - 168, - 167, - 167, - 1489, - 1490, - 1491, - 1492, - 1493, - 1494, - 1495, - 1496, - 167, - 167, - 167, - 2614, - 1490, - 1490, - 1490, - 1490, - 167, - 167, - 1494, - 1497, - 1498, - 1497, - 1497, - 1497, - 1499, - 1497, - 1497, - 1497, - 1500, - 1497, - 1501, - 1497, - 1497, - 1497, - 1497, - 1499, - 1499, - 1499, - 1499, - 1497, - 1497, - 1500, - 1497, - 1502, - 1497, - 1497, - 1497, - 1499, - 1497, - 1497, - 1497, - 1500, - 1497, - 1501, - 1497, - 1497, - 1497, - 1497, - 1499, - 1499, - 1499, - 1499, - 1497, - 1497, - 1500, - 165, - 166, - 165, - 165, - 165, - 1486, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1486, - 1486, - 1486, - 1486, - 165, - 165, - 1487, - 165, - 1503, - 165, - 165, - 165, - 1504, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1504, - 1504, - 1504, - 1504, - 165, - 165, - 1487, - 165, - 1505, - 165, - 165, - 165, - 1486, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1486, - 1486, - 1486, - 1486, - 165, - 165, - 1487, - 165, - 166, - 165, - 165, - 165, - 1486, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1486, - 1486, - 1486, - 1486, - 165, - 165, - 1487, - 165, - 1506, - 165, - 165, - 165, - 1486, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1486, - 1486, - 1486, - 1486, - 165, - 165, - 1487, - 1507, - 1508, - 1507, - 1507, - 1507, - 1509, - 1507, - 1507, - 1507, - 1510, - 1507, - 1511, - 1507, - 1507, - 1507, - 1507, - 1509, - 1509, - 1509, - 1509, - 1507, - 1507, - 1510, - 165, - 1512, - 165, - 165, - 165, - 1486, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1486, - 1486, - 1486, - 1486, - 165, - 165, - 1487, - 1513, - 1514, - 1513, - 1513, - 1513, - 1515, - 1513, - 1513, - 1513, - 1516, - 1513, - 1517, - 1513, - 1513, - 1513, - 1513, - 1515, - 1515, - 1515, - 1515, - 1513, - 1513, - 1516, - 165, - 166, - 165, - 165, - 165, - 1486, - 165, - 165, - 165, - 1487, - 165, - 1488, - 1518, - 165, - 165, - 165, - 1486, - 1486, - 1486, - 1486, - 165, - 165, - 1487, - 1497, - 2615, - 1497, - 1497, - 1497, - 1499, - 1497, - 1497, - 1497, - 1500, - 1497, - 1501, - 1497, - 1497, - 1497, - 1497, - 1499, - 1499, - 1499, - 1499, - 1497, - 1497, - 1500, - 1497, - 2616, - 1497, - 1497, - 1497, - 1499, - 1497, - 1497, - 1497, - 1500, - 1497, - 1501, - 1497, - 1497, - 1497, - 1497, - 1499, - 1499, - 1499, - 1499, - 1497, - 1497, - 1500, - 1497, - 1498, - 1497, - 1497, - 1497, - 1499, - 1497, - 1497, - 1497, - 1500, - 1497, - 1501, - 1497, - 1497, - 1497, - 1497, - 1499, - 1499, - 1499, - 1499, - 1497, - 1497, - 1500, - 165, - 2617, - 165, - 165, - 165, - 1504, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1504, - 1504, - 1504, - 1504, - 165, - 165, - 1487, - 165, - 2618, - 165, - 165, - 165, - 1504, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1504, - 1504, - 1504, - 1504, - 165, - 165, - 1487, - 165, - 2619, - 165, - 165, - 165, - 1504, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1504, - 1504, - 1504, - 1504, - 165, - 165, - 1487, - 165, - 2911, - 165, - 165, - 165, - 1504, - 165, - 165, - 165, - 1487, - 165, - 1488, - 165, - 165, - 165, - 165, - 1504, - 1504, - 1504, - 1504, - 165, - 165, - 1487, - 1497, - 2954, - 1497, - 1497, - 1497, - 1499, - 1497, - 1497, - 1497, - 1500, - 1497, - 1501, - 1497, - 1497, - 1497, - 1497, - 1499, - 1499, - 1499, - 1499, - 1497, - 1497, - 1500, - 1497, - 2955, - 1497, - 1497, - 1497, - 1499, - 1497, - 1497, - 1497, - 1500, - 1497, - 1501, - 1497, - 1497, - 1497, - 1497, - 1499, - 1499, - 1499, - 1499, - 1497, - 1497, - 1500, - 1507, - 2956, - 1507, - 1507, - 1507, - 1509, - 1507, - 1507, - 1507, - 1510, - 1507, - 1511, - 1507, - 1507, - 1507, - 1507, - 1509, - 1509, - 1509, - 1509, - 1507, - 1507, - 1510, - }, - }, - [nir_op_fge] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 5, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 11, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 14, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 5, - 5, - 15, - 16, - 5, - 5, - 5, - 5, - 5, - 17, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 5, - 18, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 19, - .table = (const uint16_t []) { - - 169, - 170, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1519, - 1519, - 1519, - 1519, - 171, - 172, - 171, - 171, - 1522, - 1523, - 1524, - 171, - 1525, - 1526, - 1527, - 1528, - 1529, - 171, - 2653, - 1523, - 1523, - 1523, - 1523, - 1530, - 1531, - 1530, - 1530, - 1530, - 1532, - 1530, - 1530, - 1530, - 1530, - 1533, - 1530, - 1534, - 1530, - 1530, - 1532, - 1532, - 1532, - 1532, - 1530, - 1535, - 1530, - 1530, - 1530, - 1532, - 1530, - 1530, - 1530, - 1530, - 1533, - 1530, - 1534, - 1530, - 1530, - 1532, - 1532, - 1532, - 1532, - 169, - 170, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1519, - 1519, - 1519, - 1519, - 169, - 1536, - 169, - 169, - 169, - 1537, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1537, - 1537, - 1537, - 1537, - 169, - 1538, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1519, - 1519, - 1519, - 1519, - 169, - 1539, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1519, - 1519, - 1519, - 1519, - 169, - 1540, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1519, - 1519, - 1519, - 1519, - 169, - 170, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1519, - 1519, - 1519, - 1519, - 1541, - 1542, - 1541, - 1541, - 1541, - 1543, - 1541, - 1541, - 1541, - 1541, - 1544, - 1541, - 1545, - 1541, - 1541, - 1543, - 1543, - 1543, - 1543, - 169, - 1546, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1519, - 1519, - 1519, - 1519, - 1547, - 1548, - 1547, - 1547, - 1547, - 1549, - 1547, - 1547, - 1547, - 1547, - 1550, - 1547, - 1551, - 1547, - 1547, - 1549, - 1549, - 1549, - 1549, - 169, - 170, - 169, - 169, - 169, - 1519, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 1552, - 169, - 1519, - 1519, - 1519, - 1519, - 1530, - 1531, - 1530, - 1530, - 1530, - 1532, - 1530, - 1530, - 1530, - 1530, - 1533, - 1530, - 1534, - 1530, - 1530, - 1532, - 1532, - 1532, - 1532, - 169, - 2654, - 169, - 169, - 169, - 1537, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1537, - 1537, - 1537, - 1537, - 169, - 2655, - 169, - 169, - 169, - 1537, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1537, - 1537, - 1537, - 1537, - 169, - 2656, - 169, - 169, - 169, - 1537, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1537, - 1537, - 1537, - 1537, - 169, - 2912, - 169, - 169, - 169, - 1537, - 169, - 169, - 169, - 169, - 1520, - 169, - 1521, - 169, - 169, - 1537, - 1537, - 1537, - 1537, - }, - }, - [nir_op_fneu] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 4, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 12, - 13, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 0, - 0, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 19, - 4, - 4, - 4, - 4, - 4, - 4, - 20, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 13, - 13, - 13, - 13, - 14, - 14, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 21, - 2, - 2, - 0, - 0, - 4, - 4, - 20, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 21, - 2, - 2, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 22, - .table = (const uint16_t []) { - - 173, - 174, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 174, - 174, - 1555, - 1556, - 1557, - 1558, - 1559, - 1560, - 1561, - 1562, - 174, - 1563, - 1564, - 1565, - 1566, - 2351, - 2352, - 2353, - 2354, - 2355, - 1557, - 2909, - 1553, - 1555, - 1553, - 1553, - 1567, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1567, - 1567, - 1553, - 1553, - 1556, - 1553, - 1553, - 1567, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1567, - 1567, - 1553, - 1554, - 1557, - 1567, - 1567, - 1568, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1567, - 1568, - 1568, - 1567, - 173, - 1558, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 1559, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 1560, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 1561, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 1569, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 2356, - 1553, - 173, - 1562, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 174, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 1570, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 1563, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 1564, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 1565, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 1566, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 2351, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 2352, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 173, - 2353, - 1553, - 1553, - 1554, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 173, - 1553, - 1554, - 1554, - 1553, - 1553, - 2354, - 1553, - 1553, - 1567, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1567, - 1567, - 1553, - 1554, - 2355, - 1567, - 1567, - 1568, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1567, - 1568, - 1568, - 1567, - 1554, - 1557, - 1567, - 1567, - 1568, - 1554, - 1554, - 1554, - 2356, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1554, - 1567, - 1568, - 2357, - 1567, - 1553, - 2909, - 1553, - 1553, - 1567, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1553, - 1567, - 1567, - 1553, - }, - }, - [nir_op_ilt] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 3, - 3, - 3, - 3, - 3, - 3, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 4, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 9, - .table = (const uint16_t []) { - - 175, - 176, - 175, - 1909, - 1909, - 1910, - 1910, - 175, - 175, - 175, - 176, - 1911, - 1909, - 1912, - 1910, - 1913, - 1914, - 175, - 175, - 1915, - 175, - 1909, - 1909, - 1910, - 1910, - 175, - 175, - 1916, - 1917, - 1916, - 1918, - 1918, - 1919, - 1919, - 1916, - 1916, - 1916, - 1920, - 1916, - 1918, - 1918, - 1919, - 1919, - 1916, - 1916, - 1921, - 1922, - 1921, - 1923, - 1923, - 1924, - 1924, - 1921, - 1921, - 1921, - 1925, - 1921, - 1923, - 1923, - 1924, - 1924, - 1921, - 1921, - 175, - 1926, - 175, - 1909, - 1909, - 1910, - 1910, - 1927, - 175, - 175, - 2713, - 175, - 1909, - 1909, - 1910, - 1910, - 175, - 175, - }, - }, - [nir_op_ult] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 7, - 8, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 6, - 6, - 13, - 7, - 7, - 12, - 12, - 12, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 7, - 7, - 12, - 12, - 6, - 6, - 6, - 6, - 6, - 8, - 8, - 8, - 9, - 9, - 9, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 7, - 7, - 12, - 12, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 4, - 4, - 4, - 4, - 4, - 4, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 3, - 0, - 0, - 3, - 3, - 0, - 0, - 4, - 4, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 4, - 4, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 4, - 4, - }, - - .num_filtered_states = 14, - .table = (const uint16_t []) { - - 177, - 178, - 177, - 1746, - 177, - 177, - 1747, - 1747, - 1748, - 1748, - 177, - 177, - 2714, - 2714, - 179, - 180, - 179, - 1749, - 179, - 1750, - 1751, - 1752, - 1753, - 1754, - 1755, - 2715, - 2716, - 2717, - 1756, - 1757, - 1756, - 1758, - 1756, - 1756, - 1759, - 1759, - 1760, - 1760, - 1756, - 1756, - 2718, - 2718, - 177, - 178, - 177, - 1746, - 177, - 177, - 1747, - 1747, - 1748, - 1748, - 177, - 177, - 2714, - 2714, - 1761, - 1762, - 1761, - 1763, - 1761, - 1761, - 1764, - 1764, - 1765, - 1765, - 1761, - 1761, - 2719, - 2719, - 177, - 1766, - 177, - 1746, - 177, - 177, - 1747, - 1747, - 1748, - 1748, - 177, - 177, - 2714, - 2714, - 1767, - 1768, - 1767, - 1769, - 1767, - 1767, - 1770, - 1770, - 1771, - 1771, - 1767, - 1767, - 2720, - 2720, - 1767, - 1772, - 1767, - 1769, - 1767, - 1767, - 1770, - 1770, - 1771, - 1771, - 1767, - 1767, - 2720, - 2720, - 1773, - 1774, - 1773, - 1775, - 1773, - 1773, - 1776, - 1776, - 1777, - 1777, - 1773, - 1773, - 2721, - 2721, - 1773, - 1778, - 1773, - 1775, - 1773, - 1773, - 1776, - 1776, - 1777, - 1777, - 1773, - 1773, - 2721, - 2721, - 177, - 1779, - 177, - 1746, - 177, - 177, - 1747, - 1747, - 1748, - 1748, - 1780, - 177, - 2714, - 2714, - 177, - 178, - 177, - 1746, - 177, - 177, - 1747, - 1747, - 1748, - 1748, - 177, - 177, - 2714, - 2714, - 1767, - 1768, - 1767, - 1769, - 1767, - 1767, - 1770, - 1770, - 1771, - 1771, - 1767, - 1767, - 2720, - 2720, - 1767, - 1772, - 1767, - 1769, - 1767, - 1767, - 1770, - 1770, - 1771, - 1771, - 1767, - 1767, - 2720, - 2720, - }, - }, - [nir_op_ige] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 10, - 11, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 3, - 3, - 3, - 3, - 3, - 3, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 4, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 14, - .table = (const uint16_t []) { - - 181, - 182, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 182, - 1930, - 1928, - 1931, - 1929, - 1932, - 1933, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 1934, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 1935, - 1936, - 1935, - 1937, - 1937, - 1938, - 1938, - 1935, - 1935, - 1935, - 1935, - 1935, - 1935, - 1935, - 1935, - 1939, - 1935, - 1937, - 1937, - 1938, - 1938, - 1935, - 1935, - 1935, - 1935, - 1935, - 1935, - 1935, - 1940, - 1941, - 1940, - 1942, - 1942, - 1943, - 1943, - 1940, - 1940, - 1940, - 1940, - 1940, - 1940, - 1940, - 1940, - 1944, - 1940, - 1942, - 1942, - 1943, - 1943, - 1940, - 1940, - 1940, - 1940, - 1940, - 1940, - 1940, - 181, - 1945, - 181, - 1928, - 1928, - 1929, - 1929, - 1946, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 1947, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 1948, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 1949, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 1950, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 1951, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - 2722, - 181, - 1928, - 1928, - 1929, - 1929, - 181, - 181, - 181, - 181, - 181, - 181, - 181, - }, - }, - [nir_op_uge] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 7, - 8, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 7, - 7, - 7, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 7, - 7, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 8, - 8, - 8, - 9, - 9, - 9, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 7, - 7, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 4, - 4, - 4, - 4, - 4, - 4, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 3, - 0, - 0, - 3, - 3, - 0, - 0, - 4, - 4, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 4, - 4, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 4, - 4, - }, - - .num_filtered_states = 11, - .table = (const uint16_t []) { - - 183, - 183, - 183, - 1781, - 183, - 183, - 1782, - 1782, - 1783, - 1783, - 183, - 184, - 184, - 184, - 1784, - 184, - 1785, - 1786, - 1787, - 1788, - 1789, - 1790, - 1791, - 1791, - 1791, - 1792, - 1791, - 1791, - 1793, - 1793, - 1794, - 1794, - 1791, - 183, - 183, - 183, - 1781, - 183, - 183, - 1782, - 1782, - 1783, - 1783, - 183, - 1795, - 1795, - 1795, - 1796, - 1795, - 1795, - 1797, - 1797, - 1798, - 1798, - 1795, - 183, - 1799, - 183, - 1781, - 183, - 183, - 1782, - 1782, - 1783, - 1783, - 183, - 1800, - 1800, - 1800, - 1801, - 1800, - 1800, - 1802, - 1802, - 1803, - 1803, - 1800, - 1800, - 1804, - 1800, - 1801, - 1800, - 1800, - 1802, - 1802, - 1803, - 1803, - 1800, - 1805, - 1805, - 1805, - 1806, - 1805, - 1805, - 1807, - 1807, - 1808, - 1808, - 1805, - 1805, - 1809, - 1805, - 1806, - 1805, - 1805, - 1807, - 1807, - 1808, - 1808, - 1805, - 183, - 1810, - 183, - 1781, - 183, - 183, - 1782, - 1782, - 1783, - 1783, - 1811, - }, - }, - [nir_op_fmin] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 9, - 3, - 3, - 3, - 3, - 3, - 10, - 3, - 3, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 12, - 6, - 6, - 6, - 6, - 6, - 12, - 6, - 6, - 6, - 12, - 6, - 12, - 6, - 6, - 12, - 7, - 7, - 7, - 8, - 8, - 8, - 8, - 8, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 13, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 7, - 7, - 14, - 7, - 8, - 8, - 8, - 15, - 15, - 8, - 7, - 7, - 14, - 7, - 14, - 7, - 7, - 7, - 14, - 7, - 14, - 7, - 7, - 14, - 7, - 14, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 12, - 6, - 6, - 12, - 6, - 6, - 12, - 12, - 12, - 12, - 6, - 6, - 12, - 6, - 12, - 6, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 12, - 12, - 6, - 6, - 6, - 6, - 6, - 12, - 12, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 16, - .table = (const uint16_t []) { - - 185, - 186, - 1598, - 1599, - 185, - 185, - 1600, - 1601, - 1601, - 2658, - 1599, - 2659, - 2660, - 2913, - 2914, - 2914, - 186, - 186, - 1602, - 1603, - 1604, - 1605, - 1606, - 1607, - 1608, - 2661, - 1603, - 2662, - 2663, - 2915, - 2916, - 2917, - 1598, - 1602, - 1598, - 1609, - 1598, - 1598, - 1610, - 1611, - 1611, - 2664, - 1609, - 2665, - 2666, - 2918, - 2919, - 2919, - 1599, - 1603, - 1609, - 1599, - 1599, - 1599, - 1612, - 1613, - 1613, - 2658, - 1599, - 2659, - 2667, - 2913, - 2920, - 2920, - 185, - 1604, - 1598, - 1599, - 185, - 185, - 1600, - 1601, - 1601, - 2658, - 1599, - 2659, - 2660, - 2913, - 2914, - 2914, - 185, - 1605, - 1598, - 1599, - 185, - 1614, - 1600, - 1601, - 1601, - 2658, - 1599, - 2659, - 2660, - 2913, - 2914, - 2914, - 1600, - 1606, - 1610, - 1612, - 1600, - 1600, - 1600, - 1615, - 1615, - 2668, - 1612, - 2669, - 2660, - 2921, - 2922, - 2922, - 1601, - 1607, - 1611, - 1613, - 1601, - 1601, - 1615, - 1601, - 1601, - 2670, - 1613, - 2671, - 2672, - 2923, - 2914, - 2914, - 1601, - 1608, - 1611, - 1613, - 1601, - 1601, - 1615, - 1601, - 1601, - 2670, - 1613, - 2671, - 2672, - 2923, - 2914, - 2914, - 2658, - 2661, - 2664, - 2658, - 2658, - 2658, - 2668, - 2670, - 2670, - 2658, - 2658, - 2673, - 2674, - 2924, - 2925, - 2925, - 1599, - 1603, - 1609, - 1599, - 1599, - 1599, - 1612, - 1613, - 1613, - 2658, - 2675, - 2659, - 2667, - 2913, - 2920, - 2920, - 2659, - 2662, - 2665, - 2659, - 2659, - 2659, - 2669, - 2671, - 2671, - 2673, - 2659, - 2659, - 2676, - 2926, - 2927, - 2927, - 2660, - 2663, - 2666, - 2667, - 2660, - 2660, - 2660, - 2672, - 2672, - 2674, - 2667, - 2676, - 2660, - 2928, - 2929, - 2929, - 2913, - 2915, - 2918, - 2913, - 2913, - 2913, - 2921, - 2923, - 2923, - 2924, - 2913, - 2926, - 2928, - 2913, - 2930, - 2930, - 2914, - 2916, - 2919, - 2920, - 2914, - 2914, - 2922, - 2914, - 2914, - 2925, - 2920, - 2927, - 2929, - 2930, - 2914, - 2914, - 2914, - 2917, - 2919, - 2920, - 2914, - 2914, - 2922, - 2914, - 2914, - 2925, - 2920, - 2927, - 2929, - 2930, - 2914, - 2914, - }, - }, - [nir_search_op_i2f] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 3, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 7, - .table = (const uint16_t []) { - - 187, - 1971, - 1972, - 1973, - 1974, - 2677, - 2973, - }, - }, - [nir_op_fmax] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 9, - 3, - 3, - 3, - 3, - 3, - 10, - 3, - 11, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 6, - 6, - 6, - 6, - 6, - 13, - 13, - 0, - 0, - 12, - 0, - 12, - 0, - 12, - 7, - 7, - 14, - 7, - 7, - 7, - 7, - 14, - 7, - 14, - 14, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 4, - 7, - 7, - 7, - 14, - 7, - 7, - 7, - 7, - 7, - 14, - 7, - 7, - 7, - 14, - 7, - 14, - 14, - 14, - 14, - 7, - 7, - 14, - 7, - 7, - 14, - 14, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 6, - 13, - 13, - 0, - 12, - 12, - 0, - 12, - 12, - 0, - 12, - 0, - 12, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 17, - .table = (const uint16_t []) { - - 188, - 189, - 1616, - 1617, - 188, - 188, - 188, - 1618, - 188, - 2627, - 1617, - 2628, - 2629, - 2629, - 2630, - 188, - 188, - 189, - 189, - 1619, - 1620, - 1621, - 189, - 1622, - 1623, - 2631, - 2632, - 1620, - 2633, - 2634, - 2635, - 2636, - 2957, - 2958, - 1616, - 1619, - 1616, - 1624, - 1616, - 1616, - 1616, - 1625, - 1616, - 2637, - 1624, - 2638, - 2639, - 2639, - 2640, - 1616, - 1616, - 1617, - 1620, - 1624, - 1617, - 1617, - 1617, - 1617, - 1626, - 1617, - 2627, - 1617, - 2628, - 2641, - 2641, - 2642, - 1617, - 1617, - 188, - 1621, - 1616, - 1617, - 1627, - 188, - 188, - 1618, - 188, - 2627, - 1617, - 2628, - 2629, - 2629, - 2630, - 188, - 188, - 188, - 189, - 1616, - 1617, - 188, - 1628, - 188, - 1618, - 188, - 2627, - 1617, - 2628, - 2629, - 2629, - 2630, - 188, - 188, - 188, - 1622, - 1616, - 1617, - 188, - 188, - 188, - 1618, - 188, - 2627, - 1617, - 2628, - 2629, - 2629, - 2630, - 188, - 188, - 1618, - 1623, - 1625, - 1626, - 1618, - 1618, - 1618, - 1618, - 1618, - 2643, - 1626, - 2644, - 2645, - 2645, - 2630, - 1618, - 1618, - 188, - 2631, - 1616, - 1617, - 188, - 188, - 188, - 1618, - 188, - 2627, - 1617, - 2628, - 2629, - 2629, - 2630, - 188, - 188, - 2627, - 2632, - 2637, - 2627, - 2627, - 2627, - 2627, - 2643, - 2627, - 2627, - 2627, - 2646, - 2647, - 2647, - 2648, - 2627, - 2627, - 1617, - 1620, - 1624, - 1617, - 1617, - 1617, - 1617, - 1626, - 1617, - 2627, - 2649, - 2628, - 2641, - 2641, - 2642, - 1617, - 1617, - 2628, - 2633, - 2638, - 2628, - 2628, - 2628, - 2628, - 2644, - 2628, - 2646, - 2628, - 2628, - 2650, - 2650, - 2651, - 2628, - 2628, - 2629, - 2634, - 2639, - 2641, - 2629, - 2629, - 2629, - 2645, - 2629, - 2647, - 2641, - 2650, - 2629, - 2629, - 2652, - 2629, - 2629, - 2629, - 2635, - 2639, - 2641, - 2629, - 2629, - 2629, - 2645, - 2629, - 2647, - 2641, - 2650, - 2629, - 2629, - 2652, - 2629, - 2629, - 2630, - 2636, - 2640, - 2642, - 2630, - 2630, - 2630, - 2630, - 2630, - 2648, - 2642, - 2651, - 2652, - 2652, - 2630, - 2630, - 2630, - 188, - 2957, - 1616, - 1617, - 188, - 188, - 188, - 1618, - 188, - 2627, - 1617, - 2628, - 2629, - 2629, - 2630, - 188, - 188, - 188, - 2958, - 1616, - 1617, - 188, - 188, - 188, - 1618, - 188, - 2627, - 1617, - 2628, - 2629, - 2629, - 2630, - 188, - 188, - }, - }, - [nir_op_imin] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 7, - 2, - 2, - 8, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 9, - 4, - 4, - 4, - 9, - 4, - 4, - 4, - 9, - 4, - 9, - 4, - 9, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 9, - 4, - 9, - 9, - 4, - 9, - 9, - 4, - 9, - 9, - 4, - 5, - 10, - 5, - 6, - 11, - 11, - 6, - 10, - 5, - 5, - 10, - 5, - 5, - 10, - 10, - 5, - 5, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 4, - 9, - 4, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 12, - .table = (const uint16_t []) { - - 190, - 191, - 1698, - 1699, - 1700, - 1701, - 1701, - 2681, - 1698, - 2682, - 2931, - 2931, - 191, - 191, - 1702, - 1703, - 1704, - 1705, - 1706, - 2683, - 1702, - 2684, - 2932, - 2933, - 1698, - 1702, - 1698, - 1707, - 1708, - 1709, - 1709, - 2681, - 1698, - 2685, - 2934, - 2934, - 1699, - 1703, - 1707, - 1699, - 1710, - 1711, - 1711, - 2686, - 1707, - 2687, - 2935, - 2935, - 1700, - 1704, - 1708, - 1710, - 1700, - 1712, - 1712, - 2688, - 1708, - 2682, - 2936, - 2936, - 1701, - 1705, - 1709, - 1711, - 1712, - 1701, - 1701, - 2689, - 1709, - 2690, - 2931, - 2931, - 1701, - 1706, - 1709, - 1711, - 1712, - 1701, - 1701, - 2689, - 1709, - 2690, - 2931, - 2931, - 2681, - 2683, - 2681, - 2686, - 2688, - 2689, - 2689, - 2681, - 2681, - 2691, - 2937, - 2937, - 1698, - 1702, - 1698, - 1707, - 1708, - 1709, - 1709, - 2681, - 2692, - 2685, - 2934, - 2934, - 2682, - 2684, - 2685, - 2687, - 2682, - 2690, - 2690, - 2691, - 2685, - 2682, - 2938, - 2938, - 2931, - 2932, - 2934, - 2935, - 2936, - 2931, - 2931, - 2937, - 2934, - 2938, - 2931, - 2931, - 2931, - 2933, - 2934, - 2935, - 2936, - 2931, - 2931, - 2937, - 2934, - 2938, - 2931, - 2931, - }, - }, - [nir_op_imax] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 6, - 2, - 2, - 7, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 4, - 4, - 4, - 9, - 9, - 0, - 0, - 8, - 0, - 8, - 8, - 5, - 5, - 10, - 5, - 5, - 5, - 10, - 5, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 0, - 0, - 0, - 0, - 8, - 8, - 0, - 0, - 5, - 5, - 10, - 5, - 5, - 5, - 10, - 5, - 10, - 5, - 5, - 10, - 10, - 10, - 5, - 10, - 5, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 9, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 11, - .table = (const uint16_t []) { - - 192, - 193, - 1713, - 1714, - 192, - 1715, - 2693, - 1713, - 2694, - 2694, - 2695, - 193, - 193, - 1716, - 1717, - 1718, - 1719, - 2696, - 1716, - 2697, - 2698, - 2699, - 1713, - 1716, - 1713, - 1720, - 1713, - 1721, - 2693, - 1713, - 2700, - 2700, - 2701, - 1714, - 1717, - 1720, - 1714, - 1714, - 1722, - 2702, - 1720, - 2703, - 2703, - 2704, - 192, - 1718, - 1713, - 1714, - 192, - 1715, - 2693, - 1713, - 2694, - 2694, - 2695, - 1715, - 1719, - 1721, - 1722, - 1715, - 1715, - 2705, - 1721, - 2706, - 2706, - 2695, - 2693, - 2696, - 2693, - 2702, - 2693, - 2705, - 2693, - 2693, - 2707, - 2707, - 2708, - 1713, - 1716, - 1713, - 1720, - 1713, - 1721, - 2693, - 2709, - 2700, - 2700, - 2701, - 2694, - 2697, - 2700, - 2703, - 2694, - 2706, - 2707, - 2700, - 2694, - 2694, - 2710, - 2694, - 2698, - 2700, - 2703, - 2694, - 2706, - 2707, - 2700, - 2694, - 2694, - 2710, - 2695, - 2699, - 2701, - 2704, - 2695, - 2695, - 2708, - 2701, - 2710, - 2710, - 2695, - }, - }, - [nir_op_umin] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 8, - 5, - 5, - 8, - 5, - 5, - 8, - 5, - 5, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 8, - 5, - 8, - 5, - 8, - 8, - 5, - 8, - 5, - 8, - 6, - 10, - 6, - 6, - 10, - 6, - 6, - 10, - 6, - 10, - 6, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 8, - 8, - 5, - 5, - 5, - 8, - 8, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 3, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 11, - .table = (const uint16_t []) { - - 194, - 195, - 1812, - 1812, - 194, - 1813, - 1814, - 2723, - 2724, - 2810, - 2811, - 195, - 195, - 1815, - 1815, - 195, - 1816, - 1817, - 2725, - 2726, - 2812, - 2813, - 1812, - 1815, - 1812, - 1818, - 1812, - 1819, - 1820, - 2727, - 2728, - 2814, - 2815, - 1812, - 1815, - 1818, - 1818, - 1812, - 1819, - 1820, - 2727, - 2728, - 2814, - 2815, - 194, - 195, - 1812, - 1812, - 1821, - 1813, - 1814, - 2723, - 2724, - 2810, - 2811, - 1813, - 1816, - 1819, - 1819, - 1813, - 1813, - 1822, - 2729, - 2724, - 2816, - 2817, - 1814, - 1817, - 1820, - 1820, - 1814, - 1822, - 1814, - 2730, - 2731, - 2818, - 2811, - 2723, - 2725, - 2727, - 2727, - 2723, - 2729, - 2730, - 2732, - 2733, - 2819, - 2820, - 2724, - 2726, - 2728, - 2728, - 2724, - 2724, - 2731, - 2733, - 2724, - 2821, - 2822, - 2810, - 2812, - 2814, - 2814, - 2810, - 2816, - 2818, - 2819, - 2821, - 2810, - 2823, - 2811, - 2813, - 2815, - 2815, - 2811, - 2817, - 2811, - 2820, - 2822, - 2823, - 2811, - }, - }, - [nir_op_umax] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 5, - 0, - 0, - 5, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 3, - 3, - 6, - 3, - 3, - 6, - 6, - 6, - 3, - 3, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 5, - 0, - 5, - 0, - 5, - 5, - 0, - 5, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 7, - .table = (const uint16_t []) { - - 196, - 197, - 196, - 1975, - 2734, - 2735, - 2736, - 197, - 197, - 197, - 1976, - 2737, - 2738, - 2739, - 196, - 197, - 1977, - 1975, - 2734, - 2735, - 2736, - 1975, - 1976, - 1975, - 1975, - 2740, - 2741, - 2736, - 2734, - 2737, - 2734, - 2740, - 2742, - 2743, - 2744, - 2735, - 2738, - 2735, - 2741, - 2743, - 2735, - 2745, - 2736, - 2739, - 2736, - 2736, - 2744, - 2745, - 2736, - }, - }, - [nir_op_extract_u8] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 4, - 0, - 4, - 0, - 4, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - }, - - .num_filtered_states = 10, - .table = (const uint16_t []) { - - 198, - 199, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 199, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 1304, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 1305, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 1306, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 1307, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 1308, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 1309, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 1310, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 2746, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - 198, - }, - }, - [nir_search_op_f2i] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 200, - 1461, - 1462, - 1463, - 1464, - 1465, - 1466, - 1467, - }, - }, - [nir_search_op_f2u] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 7, - .table = (const uint16_t []) { - - 201, - 1723, - 1724, - 1725, - 1726, - 1727, - 1728, - }, - }, - [nir_search_op_f2f] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 11, - .table = (const uint16_t []) { - - 202, - 1729, - 1730, - 1731, - 1732, - 1733, - 1734, - 1735, - 1736, - 1737, - 1738, - }, - }, - [nir_search_op_i2i] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 7, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 6, - 7, - 7, - 7, - 7, - 7, - 7, - 11, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 12, - .table = (const uint16_t []) { - - 203, - 1825, - 1826, - 1827, - 1828, - 1829, - 1830, - 1831, - 1832, - 1833, - 1834, - 2784, - }, - }, - [nir_search_op_u2u] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 0, - 0, - 0, - 8, - 9, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 0, - 0, - 0, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 6, - 13, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 14, - 9, - 9, - 9, - 9, - 9, - 15, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 11, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 9, - 9, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 1, - 0, - 0, - 1, - 1, - 0, - 2, - 0, - 0, - 0, - 2, - 1, - 1, - 1, - 0, - 2, - 0, - 0, - 0, - 2, - 1, - 1, - 1, - 0, - 2, - 0, - 0, - }, - - .num_filtered_states = 19, - .table = (const uint16_t []) { - - 204, - 1835, - 1836, - 1837, - 1838, - 1839, - 1840, - 1841, - 1842, - 1843, - 1844, - 1845, - 1846, - 1847, - 2782, - 2783, - 2866, - 2867, - 2868, - }, - }, - [nir_op_f2fmp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 205, - 1739, - 1740, - 1741, - 1742, - 1743, - 1744, - 1745, - }, - }, - [nir_op_i2imp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 6, - 0, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 6, - 6, - 6, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 8, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 9, - .table = (const uint16_t []) { - - 206, - 1978, - 1979, - 1980, - 1981, - 1982, - 1983, - 1984, - 1985, - }, - }, - [nir_op_extract_i8] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 207, - 208, - 207, - 207, - 207, - 208, - 207, - 207, - 207, - 1311, - 207, - 207, - 207, - 1312, - 207, - 207, - }, - }, - [nir_op_extract_i16] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 209, - 210, - 209, - 210, - }, - }, - [nir_op_extract_u16] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 0, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 211, - 212, - 211, - 211, - 211, - 211, - 211, - 212, - 211, - 211, - 211, - 211, - 211, - 2009, - 211, - 211, - 211, - 211, - 211, - 2010, - 211, - 211, - 211, - 211, - 211, - 2011, - 211, - 211, - 211, - 211, - 211, - 2012, - 211, - 211, - 211, - 211, - }, - }, - [nir_op_ixor] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 2, - 3, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 5, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 7, - 6, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 2, - 3, - 2, - 2, - 2, - 3, - 2, - 2, - 3, - 3, - 3, - 2, - 3, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 16, - 16, - 16, - 16, - 17, - 17, - 17, - 17, - 17, - 17, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 4, - 4, - 4, - 4, - 4, - 5, - 4, - 4, - 5, - 5, - 5, - 6, - 6, - 7, - 6, - 7, - 6, - 7, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 11, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 18, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 15, - 15, - 15, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 4, - 4, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 16, - 16, - 16, - 16, - 17, - 17, - 17, - 17, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 21, - 21, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 5, - 0, - 0, - 0, - 0, - 0, - 3, - 5, - 0, - 0, - 3, - 5, - 0, - 0, - 0, - 3, - 5, - 0, - 0, - 3, - 5, - 0, - 0, - 0, - 3, - 5, - 0, - 0, - }, - - .num_filtered_states = 22, - .table = (const uint16_t []) { - - 213, - 214, - 213, - 213, - 213, - 213, - 213, - 213, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 214, - 214, - 214, - 214, - 214, - 214, - 214, - 214, - 214, - 1263, - 214, - 1264, - 214, - 1265, - 214, - 1266, - 1267, - 1268, - 2751, - 2752, - 2753, - 2754, - 213, - 214, - 213, - 1269, - 213, - 213, - 213, - 213, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 213, - 214, - 1269, - 1269, - 213, - 213, - 213, - 213, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 213, - 214, - 213, - 213, - 213, - 1270, - 213, - 213, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 213, - 214, - 213, - 213, - 1270, - 1270, - 213, - 213, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 213, - 214, - 213, - 213, - 213, - 213, - 213, - 1271, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 213, - 214, - 213, - 213, - 213, - 213, - 1271, - 1271, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 213, - 214, - 213, - 213, - 213, - 213, - 213, - 213, - 213, - 1272, - 213, - 1259, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 1258, - 1263, - 1258, - 1258, - 1258, - 1258, - 1258, - 1258, - 1272, - 1272, - 1258, - 1273, - 1258, - 1274, - 1258, - 1275, - 1276, - 1276, - 2755, - 2756, - 2757, - 2758, - 213, - 214, - 213, - 213, - 213, - 213, - 213, - 213, - 213, - 1258, - 213, - 1277, - 213, - 1260, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 1259, - 1264, - 1259, - 1259, - 1259, - 1259, - 1259, - 1259, - 1259, - 1273, - 1277, - 1277, - 1259, - 1278, - 1259, - 1279, - 1280, - 1280, - 2759, - 2760, - 2761, - 2762, - 213, - 214, - 213, - 213, - 213, - 213, - 213, - 213, - 213, - 1258, - 213, - 1259, - 213, - 1281, - 213, - 1261, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 1260, - 1265, - 1260, - 1260, - 1260, - 1260, - 1260, - 1260, - 1260, - 1274, - 1260, - 1278, - 1281, - 1281, - 1260, - 1282, - 1283, - 1283, - 2763, - 2764, - 2765, - 2766, - 213, - 214, - 213, - 213, - 213, - 213, - 213, - 213, - 213, - 1258, - 213, - 1259, - 213, - 1260, - 213, - 1284, - 1262, - 1262, - 2747, - 2748, - 2749, - 2750, - 1261, - 1266, - 1261, - 1261, - 1261, - 1261, - 1261, - 1261, - 1261, - 1275, - 1261, - 1279, - 1261, - 1282, - 1284, - 1284, - 1285, - 1285, - 2767, - 2768, - 2769, - 2770, - 1262, - 1267, - 1262, - 1262, - 1262, - 1262, - 1262, - 1262, - 1262, - 1276, - 1262, - 1280, - 1262, - 1283, - 1262, - 1285, - 1262, - 1262, - 2771, - 2772, - 2773, - 2774, - 1262, - 1268, - 1262, - 1262, - 1262, - 1262, - 1262, - 1262, - 1262, - 1276, - 1262, - 1280, - 1262, - 1283, - 1262, - 1285, - 1262, - 1262, - 2771, - 2772, - 2773, - 2774, - 2747, - 2751, - 2747, - 2747, - 2747, - 2747, - 2747, - 2747, - 2747, - 2755, - 2747, - 2759, - 2747, - 2763, - 2747, - 2767, - 2771, - 2771, - 2747, - 2775, - 2776, - 2777, - 2748, - 2752, - 2748, - 2748, - 2748, - 2748, - 2748, - 2748, - 2748, - 2756, - 2748, - 2760, - 2748, - 2764, - 2748, - 2768, - 2772, - 2772, - 2775, - 2748, - 2778, - 2779, - 2749, - 2753, - 2749, - 2749, - 2749, - 2749, - 2749, - 2749, - 2749, - 2757, - 2749, - 2761, - 2749, - 2765, - 2749, - 2769, - 2773, - 2773, - 2776, - 2778, - 2749, - 2780, - 2750, - 2754, - 2750, - 2750, - 2750, - 2750, - 2750, - 2750, - 2750, - 2758, - 2750, - 2762, - 2750, - 2766, - 2750, - 2770, - 2774, - 2774, - 2777, - 2779, - 2780, - 2781, - }, - }, - [nir_op_slt] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 215, - }, - }, - [nir_op_sge] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 216, - }, - }, - [nir_op_seq] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 217, - 217, - 217, - 217, - 217, - 217, - 217, - 217, - 2013, - 2014, - 2015, - 2016, - 217, - 2013, - 217, - 217, - 217, - 217, - 217, - 2014, - 217, - 217, - 217, - 217, - 217, - 2015, - 217, - 217, - 217, - 217, - 217, - 2016, - 217, - 217, - 217, - 217, - }, - }, - [nir_op_sne] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 218, - 218, - 218, - 218, - 218, - 218, - 218, - 218, - 2017, - 2018, - 2019, - 2020, - 218, - 2017, - 218, - 218, - 218, - 218, - 218, - 2018, - 218, - 218, - 218, - 218, - 218, - 2019, - 218, - 218, - 218, - 218, - 218, - 2020, - 218, - 218, - 218, - 218, - }, - }, - [nir_op_fall_equal2] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 219, - }, - }, - [nir_op_fall_equal3] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 220, - }, - }, - [nir_op_fall_equal4] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 221, - }, - }, - [nir_op_fall_equal8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 222, - }, - }, - [nir_op_fall_equal16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 223, - }, - }, - [nir_op_fany_nequal2] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 224, - }, - }, - [nir_op_fany_nequal3] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 225, - }, - }, - [nir_op_fany_nequal4] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 226, - }, - }, - [nir_op_fany_nequal8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 227, - }, - }, - [nir_op_fany_nequal16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 228, - }, - }, - [nir_op_ball_iequal2] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 229, - 229, - 229, - 229, - 229, - 229, - 1885, - 1886, - 229, - 1885, - 229, - 229, - 229, - 1886, - 229, - 229, - }, - }, - [nir_op_ball_iequal3] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 230, - 230, - 230, - 230, - 230, - 230, - 1887, - 1888, - 230, - 1887, - 230, - 230, - 230, - 1888, - 230, - 230, - }, - }, - [nir_op_ball_iequal4] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 231, - 231, - 231, - 231, - 231, - 231, - 1889, - 1890, - 231, - 1889, - 231, - 231, - 231, - 1890, - 231, - 231, - }, - }, - [nir_op_ball_iequal8] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 232, - 232, - 232, - 232, - 232, - 232, - 1891, - 1892, - 232, - 1891, - 232, - 232, - 232, - 1892, - 232, - 232, - }, - }, - [nir_op_ball_iequal16] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 233, - 233, - 233, - 233, - 233, - 233, - 1893, - 1894, - 233, - 1893, - 233, - 233, - 233, - 1894, - 233, - 233, - }, - }, - [nir_op_ball_fequal2] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 234, - }, - }, - [nir_op_ball_fequal3] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 235, - }, - }, - [nir_op_ball_fequal4] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 236, - }, - }, - [nir_op_ball_fequal8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 237, - }, - }, - [nir_op_ball_fequal16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 238, - }, - }, - [nir_op_bany_inequal2] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 239, - 239, - 239, - 239, - 239, - 239, - 1899, - 1900, - 239, - 1899, - 239, - 239, - 239, - 1900, - 239, - 239, - }, - }, - [nir_op_bany_inequal3] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 240, - 240, - 240, - 240, - 240, - 240, - 1901, - 1902, - 240, - 1901, - 240, - 240, - 240, - 1902, - 240, - 240, - }, - }, - [nir_op_bany_inequal4] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 241, - 241, - 241, - 241, - 241, - 241, - 1903, - 1904, - 241, - 1903, - 241, - 241, - 241, - 1904, - 241, - 241, - }, - }, - [nir_op_bany_inequal8] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 242, - 242, - 242, - 242, - 242, - 242, - 1905, - 1906, - 242, - 1905, - 242, - 242, - 242, - 1906, - 242, - 242, - }, - }, - [nir_op_bany_inequal16] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 243, - 243, - 243, - 243, - 243, - 243, - 1907, - 1908, - 243, - 1907, - 243, - 243, - 243, - 1908, - 243, - 243, - }, - }, - [nir_op_bany_fnequal2] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 244, - }, - }, - [nir_op_bany_fnequal3] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 245, - }, - }, - [nir_op_bany_fnequal4] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 246, - }, - }, - [nir_op_bany_fnequal8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 247, - }, - }, - [nir_op_bany_fnequal16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 248, - }, - }, - [nir_op_isub] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 249, - 249, - 250, - 250, - }, - }, - [nir_op_urol] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 251, - }, - }, - [nir_op_uror] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 252, - }, - }, - [nir_op_flog2] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 3, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 4, - 4, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 253, - 1953, - 1954, - 1955, - 1956, - 1957, - }, - }, - [nir_op_fpow] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 254, - 255, - 254, - 254, - 256, - 257, - 256, - 256, - 254, - 2021, - 254, - 254, - 254, - 2657, - 254, - 254, - }, - }, - [nir_op_fsqrt] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 258, - 1958, - }, - }, - [nir_op_frcp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 3, - 3, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 5, - .table = (const uint16_t []) { - - 259, - 1959, - 1960, - 1961, - 1962, - }, - }, - [nir_op_frsq] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 260, - 1963, - }, - }, - [nir_op_fdiv] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 261, - 261, - 262, - 262, - }, - }, - [nir_op_fsin] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 263, - }, - }, - [nir_op_fcos] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 264, - }, - }, - [nir_op_fcsel] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 265, - }, - }, - [nir_op_f2imp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 266, - 1964, - 1965, - }, - }, - [nir_op_f2ump] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 267, - 1966, - 1967, - }, - }, - [nir_op_i2fmp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 268, - 1986, - 1987, - }, - }, - [nir_op_u2fmp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 269, - 1988, - 1989, - }, - }, - [nir_op_fround_even] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 270, - }, - }, - [nir_op_pack_64_2x32_split] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 271, - 271, - 271, - 271, - 271, - 1314, - 271, - 271, - 271, - }, - }, - [nir_op_unpack_64_2x32_split_y] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 272, - 1848, - 1849, - 1850, - 1851, - 1852, - }, - }, - [nir_op_pack_64_2x32] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 273, - 2024, - 2592, - }, - }, - [nir_op_unpack_64_2x32] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 274, - 2022, - 2023, - }, - }, - [nir_op_unpack_double_2x32_dxil] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 275, - 2026, - }, - }, - [nir_op_pack_double_2x32_dxil] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 276, - 2025, - }, - }, - [nir_op_unpack_32_2x16_split_x] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 277, - 1853, - 1854, - }, - }, - [nir_op_unpack_32_2x16_split_y] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 278, - 1855, - }, - }, - [nir_op_ubfe] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 3, - 0, - 3, - 0, - 3, - 0, - 3, - 3, - 0, - 3, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 0, - 279, - 1856, - 2942, - 0, - 280, - 1856, - 2942, - 1857, - 1858, - 1859, - 2943, - 0, - 279, - 1856, - 2942, - 0, - 279, - 1856, - 2942, - 0, - 280, - 1856, - 2942, - 1857, - 1858, - 1859, - 2943, - 0, - 279, - 1856, - 2942, - 0, - 279, - 1856, - 2942, - 0, - 280, - 1856, - 2942, - 1857, - 1858, - 1859, - 2943, - 0, - 279, - 1856, - 2942, - 0, - 279, - 1856, - 2942, - 0, - 280, - 1856, - 2942, - 1857, - 1858, - 1859, - 2943, - 0, - 279, - 1856, - 2942, - }, - }, - [nir_op_ibfe] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 3, - 0, - 3, - 0, - 3, - 0, - 3, - 3, - 0, - 3, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 0, - 281, - 1860, - 2944, - 0, - 282, - 1860, - 2944, - 1861, - 1862, - 1863, - 2945, - 0, - 281, - 1860, - 2944, - 0, - 281, - 1860, - 2944, - 0, - 282, - 1860, - 2944, - 1861, - 1862, - 1863, - 2945, - 0, - 281, - 1860, - 2944, - 0, - 281, - 1860, - 2944, - 0, - 282, - 1860, - 2944, - 1861, - 1862, - 1863, - 2945, - 0, - 281, - 1860, - 2944, - 0, - 281, - 1860, - 2944, - 0, - 282, - 1860, - 2944, - 1861, - 1862, - 1863, - 2945, - 0, - 281, - 1860, - 2944, - }, - }, - [nir_op_pack_32_2x16_split] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 283, - }, - }, - [nir_op_pack_half_2x16_split] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 284, - 285, - 286, - 287, - }, - }, - [nir_op_unpack_half_2x16_split_x] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 1, - 0, - 0, - 1, - 1, - 0, - 2, - 0, - 0, - 0, - 2, - 1, - 1, - 1, - 0, - 2, - 0, - 0, - 0, - 2, - 1, - 1, - 1, - 0, - 2, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 288, - 1864, - 1865, - 1866, - }, - }, - [nir_op_unpack_half_2x16_split_y] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 289, - 1867, - }, - }, - [nir_op_pack_half_2x16] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 0, - 2002, - 2003, - 2004, - }, - }, - [nir_op_pack_half_2x16_rtz_split] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 0, - 290, - 0, - 291, - 292, - 291, - 0, - 1657, - 0, - }, - }, - [nir_op_pack_32_4x8_split] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 293, - }, - }, - [nir_op_ussub_4x8_vc4] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 294, - 0, - 294, - }, - }, - [nir_op_fsub] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 295, - }, - }, - [nir_op_uabs_usub] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 296, - }, - }, - [nir_op_uabs_isub] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 297, - }, - }, - [nir_op_find_lsb] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 298, - 2027, - }, - }, - [nir_op_ifind_msb] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 299, - 2008, - }, - }, - [nir_op_ufind_msb] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 300, - }, - }, - [nir_op_ifind_msb_rev] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 301, - }, - }, - [nir_op_ufind_msb_rev] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 302, - 2028, - }, - }, - [nir_op_bitfield_reverse] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 303, - }, - }, - [nir_op_fmod] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 304, - }, - }, - [nir_op_frem] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 305, - }, - }, - [nir_op_uadd_carry] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 306, - }, - }, - [nir_op_usub_borrow] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 307, - }, - }, - [nir_op_bitfield_insert] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 308, - }, - }, - [nir_op_ihadd] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 309, - }, - }, - [nir_op_uhadd] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 310, - }, - }, - [nir_op_irhadd] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 311, - }, - }, - [nir_op_urhadd] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 312, - }, - }, - [nir_op_imul_32x16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 313, - }, - }, - [nir_op_umul_32x16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 314, - }, - }, - [nir_op_ibitfield_extract] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 315, - }, - }, - [nir_op_ubitfield_extract] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 316, - }, - }, - [nir_op_bitfield_select] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 0, - 317, - 0, - 0, - 317, - 0, - 1823, - 1824, - 1823, - 0, - 317, - 0, - 0, - 317, - 0, - 1823, - 1824, - 1823, - 0, - 317, - 0, - 0, - 317, - 0, - 1823, - 1824, - 1823, - }, - }, - [nir_op_bfm] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 3, - 0, - 3, - 0, - 3, - 0, - 3, - 3, - 0, - 3, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 0, - 318, - 1868, - 0, - 0, - 318, - 1868, - 0, - 1869, - 1870, - 1871, - 1869, - 2946, - 2947, - 2948, - 2946, - }, - }, - [nir_op_uclz] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 319, - }, - }, - [nir_op_pack_unorm_2x16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 320, - }, - }, - [nir_op_pack_unorm_4x8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 321, - }, - }, - [nir_op_pack_snorm_2x16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 322, - }, - }, - [nir_op_pack_snorm_4x8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 323, - }, - }, - [nir_op_unpack_unorm_2x16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 324, - }, - }, - [nir_op_unpack_unorm_4x8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 325, - }, - }, - [nir_op_unpack_snorm_2x16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 326, - }, - }, - [nir_op_unpack_snorm_4x8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 327, - }, - }, - [nir_op_isign] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 328, - 1952, - }, - }, - [nir_op_amul] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 329, - }, - }, - [nir_op_umul24] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 330, - }, - }, - [nir_op_umad24] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 331, - }, - }, - [nir_op_imul24_relaxed] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 332, - }, - }, - [nir_op_umad24_relaxed] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 333, - }, - }, - [nir_op_umul24_relaxed] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 334, - }, - }, - [nir_op_imad24_ir3] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 335, - 336, - 337, - 336, - 337, - 338, - 339, - }, - }, - [nir_op_imul24] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 340, - 340, - 340, - }, - }, - [nir_op_b2b1] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 341, - }, - }, - [nir_op_b2b8] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 342, - }, - }, - [nir_op_b2b16] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 343, - }, - }, - [nir_op_b2b32] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 344, - }, - }, - [nir_op_ldexp] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 345, - }, - }, - [nir_op_fddx] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 346, - }, - }, - [nir_op_fddx_fine] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 347, - }, - }, - [nir_op_fddx_coarse] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 348, - }, - }, - [nir_op_fddy] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 349, - }, - }, - [nir_op_fddy_fine] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 350, - }, - }, - [nir_op_fddy_coarse] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 351, - }, - }, - [nir_op_umul_low] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 352, - 352, - 352, - }, - }, - [nir_op_imadsh_mix16] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 353, - 353, - 354, - 354, - 355, - 355, - }, - }, - [nir_op_fsin_amd] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 356, - }, - }, - [nir_op_fcos_amd] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 357, - }, - }, - [nir_op_fsin_mdg] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 358, - }, - }, - [nir_op_fcos_mdg] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 359, - }, - }, - [nir_op_fsin_agx] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 360, - }, - }, - [nir_op_fisnormal] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 361, - }, - }, -}; - -/* Mapping from state index to offset in transforms (0 being no transforms) */ -static const uint16_t nir_opt_algebraic_transform_offsets[] = { - 0, - 0, - 0, - 1, - 0, - 12, - 15, - 17, - 21, - 23, - 25, - 27, - 30, - 34, - 37, - 42, - 0, - 47, - 54, - 56, - 0, - 61, - 65, - 0, - 0, - 0, - 67, - 0, - 69, - 71, - 77, - 84, - 90, - 97, - 100, - 104, - 107, - 111, - 114, - 118, - 124, - 131, - 141, - 153, - 168, - 181, - 197, - 203, - 210, - 219, - 229, - 239, - 250, - 252, - 264, - 266, - 274, - 276, - 282, - 284, - 0, - 290, - 296, - 298, - 305, - 308, - 311, - 313, - 317, - 320, - 325, - 328, - 333, - 337, - 343, - 345, - 347, - 350, - 353, - 357, - 361, - 363, - 365, - 368, - 371, - 375, - 379, - 381, - 384, - 388, - 390, - 393, - 396, - 400, - 404, - 409, - 411, - 413, - 416, - 419, - 423, - 427, - 429, - 431, - 434, - 437, - 441, - 445, - 447, - 450, - 454, - 456, - 459, - 463, - 465, - 467, - 470, - 473, - 476, - 479, - 484, - 489, - 491, - 494, - 497, - 502, - 506, - 511, - 516, - 540, - 546, - 553, - 560, - 586, - 588, - 0, - 0, - 591, - 596, - 601, - 0, - 604, - 606, - 608, - 611, - 613, - 616, - 618, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 622, - 0, - 624, - 630, - 633, - 0, - 641, - 646, - 651, - 656, - 661, - 666, - 671, - 676, - 681, - 683, - 686, - 691, - 697, - 699, - 702, - 706, - 711, - 716, - 722, - 724, - 726, - 728, - 0, - 731, - 733, - 735, - 737, - 739, - 741, - 743, - 745, - 749, - 751, - 755, - 757, - 0, - 0, - 761, - 765, - 771, - 0, - 0, - 777, - 779, - 783, - 785, - 788, - 790, - 793, - 795, - 801, - 803, - 805, - 807, - 809, - 811, - 813, - 815, - 817, - 819, - 821, - 823, - 825, - 827, - 829, - 831, - 833, - 835, - 837, - 839, - 841, - 843, - 845, - 847, - 849, - 851, - 853, - 855, - 857, - 859, - 861, - 863, - 865, - 867, - 869, - 871, - 873, - 878, - 0, - 883, - 885, - 890, - 893, - 899, - 0, - 0, - 901, - 903, - 906, - 908, - 910, - 0, - 0, - 0, - 0, - 912, - 914, - 916, - 0, - 0, - 0, - 0, - 918, - 921, - 924, - 926, - 935, - 937, - 945, - 948, - 951, - 954, - 957, - 960, - 962, - 0, - 0, - 0, - 0, - 964, - 967, - 969, - 971, - 973, - 976, - 980, - 0, - 0, - 0, - 983, - 985, - 987, - 989, - 991, - 995, - 998, - 1001, - 1004, - 1007, - 1009, - 1011, - 1014, - 1017, - 0, - 1019, - 1021, - 1023, - 1025, - 1027, - 1029, - 1031, - 1033, - 1035, - 1037, - 1039, - 1041, - 1043, - 1045, - 1048, - 1051, - 1054, - 1056, - 1059, - 1063, - 1067, - 1072, - 1076, - 1078, - 1080, - 1082, - 1084, - 1088, - 1090, - 1092, - 1094, - 1096, - 1098, - 1100, - 1102, - 1104, - 1106, - 0, - 0, - 0, - 0, - 0, - 1109, - 1113, - 1115, - 1118, - 1121, - 1123, - 1125, - 1137, - 1150, - 1162, - 1174, - 1186, - 1199, - 1212, - 1224, - 1236, - 1240, - 1244, - 1247, - 1250, - 1252, - 1257, - 1261, - 1265, - 1269, - 1273, - 1276, - 1278, - 1283, - 0, - 1285, - 1287, - 1289, - 1291, - 1293, - 1296, - 1299, - 1302, - 1304, - 1306, - 1308, - 1311, - 1314, - 1317, - 1321, - 1325, - 1329, - 1333, - 1337, - 1342, - 1345, - 1349, - 1353, - 1356, - 1359, - 1361, - 1363, - 1365, - 1368, - 1371, - 1374, - 1377, - 1380, - 1383, - 1387, - 1391, - 1395, - 1398, - 1401, - 1403, - 1405, - 1407, - 1409, - 1412, - 1415, - 1418, - 1420, - 1422, - 1425, - 1428, - 1431, - 1435, - 1439, - 1443, - 1446, - 1449, - 1452, - 1455, - 1459, - 1463, - 1467, - 1470, - 1473, - 1476, - 1480, - 1484, - 1488, - 1491, - 1494, - 1498, - 1502, - 1506, - 1509, - 1512, - 1517, - 1522, - 1526, - 1530, - 1535, - 1539, - 1543, - 1547, - 1551, - 1554, - 1556, - 1558, - 1562, - 1568, - 1573, - 1580, - 1585, - 1593, - 1601, - 1607, - 1612, - 1616, - 1621, - 1626, - 1632, - 1640, - 1648, - 1656, - 1664, - 1674, - 1680, - 1687, - 1693, - 1705, - 1710, - 1715, - 1722, - 1730, - 1738, - 1746, - 1754, - 1762, - 1770, - 1776, - 1783, - 1789, - 1797, - 1803, - 1810, - 1816, - 1824, - 1829, - 1835, - 1840, - 1847, - 1852, - 1858, - 1863, - 1870, - 1878, - 1883, - 1891, - 1896, - 1901, - 1906, - 1911, - 1916, - 1921, - 1926, - 1931, - 1936, - 1941, - 1947, - 1955, - 1962, - 1971, - 1978, - 1988, - 1998, - 2006, - 2013, - 2019, - 2026, - 2033, - 2041, - 2051, - 2061, - 2071, - 2081, - 2093, - 2101, - 2110, - 2118, - 2132, - 2139, - 2146, - 2155, - 2165, - 2175, - 2185, - 2195, - 2205, - 2215, - 2223, - 2232, - 2240, - 2250, - 2258, - 2267, - 2275, - 2285, - 2292, - 2300, - 2307, - 2316, - 2323, - 2331, - 2338, - 2347, - 2357, - 2364, - 2374, - 2381, - 2388, - 2395, - 2402, - 2409, - 2416, - 2423, - 2430, - 2437, - 2444, - 2450, - 2457, - 2463, - 2470, - 2476, - 2481, - 2505, - 2510, - 2517, - 2522, - 2527, - 2533, - 2538, - 2545, - 2551, - 2576, - 2582, - 2590, - 2596, - 2605, - 2614, - 2621, - 2627, - 2632, - 2638, - 2644, - 2651, - 2660, - 2669, - 2678, - 2687, - 2698, - 2705, - 2713, - 2720, - 2733, - 2739, - 2745, - 2753, - 2762, - 2771, - 2780, - 2789, - 2798, - 2807, - 2814, - 2822, - 2829, - 2838, - 2845, - 2853, - 2860, - 2869, - 2875, - 2882, - 2888, - 2896, - 2902, - 2909, - 2915, - 2923, - 2932, - 2938, - 2947, - 2953, - 2959, - 2965, - 2971, - 2977, - 2983, - 2989, - 2995, - 3001, - 3007, - 3013, - 3020, - 3026, - 3034, - 3041, - 3067, - 3074, - 3083, - 3090, - 3100, - 3110, - 3118, - 3125, - 3131, - 3138, - 3145, - 3153, - 3163, - 3173, - 3183, - 3193, - 3205, - 3213, - 3222, - 3230, - 3244, - 3251, - 3258, - 3267, - 3277, - 3287, - 3297, - 3307, - 3317, - 3327, - 3335, - 3344, - 3352, - 3362, - 3370, - 3379, - 3387, - 3397, - 3404, - 3412, - 3419, - 3428, - 3435, - 3443, - 3450, - 3459, - 3469, - 3476, - 3486, - 3493, - 3500, - 3507, - 3514, - 3521, - 3528, - 3535, - 3542, - 3549, - 3556, - 3564, - 3571, - 3579, - 3587, - 3596, - 3602, - 3609, - 3615, - 3623, - 3630, - 3656, - 3663, - 3672, - 3679, - 3689, - 3699, - 3707, - 3714, - 3720, - 3727, - 3734, - 3742, - 3752, - 3762, - 3772, - 3782, - 3794, - 3802, - 3811, - 3819, - 3833, - 3840, - 3847, - 3856, - 3866, - 3876, - 3886, - 3896, - 3906, - 3916, - 3924, - 3933, - 3941, - 3951, - 3959, - 3968, - 3976, - 3986, - 3993, - 4001, - 4008, - 4017, - 4024, - 4032, - 4039, - 4048, - 4058, - 4065, - 4075, - 4082, - 4089, - 4096, - 4103, - 4110, - 4117, - 4124, - 4131, - 4138, - 4145, - 4151, - 4158, - 4164, - 4172, - 4179, - 4205, - 4212, - 4221, - 4228, - 4238, - 4248, - 4256, - 4263, - 4269, - 4276, - 4283, - 4291, - 4301, - 4311, - 4321, - 4331, - 4343, - 4351, - 4360, - 4368, - 4382, - 4389, - 4396, - 4405, - 4415, - 4425, - 4435, - 4445, - 4455, - 4465, - 4473, - 4482, - 4490, - 4500, - 4508, - 4517, - 4525, - 4535, - 4542, - 4550, - 4557, - 4566, - 4573, - 4581, - 4588, - 4597, - 4607, - 4614, - 4624, - 4631, - 4638, - 4645, - 4652, - 4659, - 4666, - 4673, - 4680, - 4687, - 4694, - 4700, - 4707, - 4713, - 4721, - 4728, - 4754, - 4761, - 4770, - 4777, - 4787, - 4797, - 4805, - 4812, - 4818, - 4825, - 4832, - 4840, - 4850, - 4860, - 4870, - 4880, - 4892, - 4900, - 4909, - 4917, - 4931, - 4938, - 4945, - 4954, - 4964, - 4974, - 4984, - 4994, - 5004, - 5014, - 5022, - 5031, - 5039, - 5049, - 5057, - 5066, - 5074, - 5084, - 5091, - 5099, - 5106, - 5115, - 5122, - 5130, - 5137, - 5146, - 5156, - 5163, - 5173, - 5180, - 5187, - 5194, - 5201, - 5208, - 5215, - 5222, - 5229, - 5236, - 5243, - 5249, - 5256, - 5262, - 5270, - 5277, - 5303, - 5310, - 5319, - 5326, - 5336, - 5346, - 5354, - 5361, - 5367, - 5374, - 5381, - 5389, - 5399, - 5409, - 5419, - 5429, - 5441, - 5449, - 5458, - 5466, - 5480, - 5487, - 5494, - 5503, - 5513, - 5523, - 5533, - 5543, - 5553, - 5563, - 5571, - 5580, - 5588, - 5598, - 5606, - 5615, - 5623, - 5633, - 5640, - 5648, - 5655, - 5664, - 5671, - 5679, - 5686, - 5695, - 5705, - 5712, - 5722, - 5729, - 5736, - 5743, - 5750, - 5757, - 5764, - 5771, - 5778, - 5785, - 5792, - 5798, - 5805, - 5811, - 5819, - 5826, - 5852, - 5859, - 5868, - 5875, - 5885, - 5895, - 5903, - 5910, - 5916, - 5923, - 5930, - 5938, - 5948, - 5958, - 5968, - 5978, - 5990, - 5998, - 6007, - 6015, - 6029, - 6036, - 6043, - 6052, - 6062, - 6072, - 6082, - 6092, - 6102, - 6112, - 6120, - 6129, - 6137, - 6147, - 6155, - 6164, - 6172, - 6182, - 6189, - 6197, - 6204, - 6213, - 6220, - 6228, - 6235, - 6244, - 6254, - 6261, - 6271, - 6278, - 6285, - 6292, - 6299, - 6306, - 6313, - 6320, - 6327, - 6334, - 6341, - 0, - 6346, - 6352, - 6354, - 6358, - 6365, - 6369, - 6376, - 6381, - 6388, - 6397, - 6402, - 6407, - 6414, - 6423, - 6428, - 6431, - 6435, - 6439, - 6441, - 6445, - 6451, - 6453, - 6456, - 6459, - 6462, - 6466, - 6470, - 6473, - 6476, - 6489, - 6506, - 6524, - 6537, - 6551, - 6564, - 6580, - 6593, - 6607, - 6621, - 6634, - 6647, - 6659, - 6662, - 6666, - 6670, - 6674, - 6679, - 6684, - 6688, - 6692, - 6696, - 6700, - 6704, - 6709, - 6714, - 6718, - 6722, - 6725, - 6735, - 6741, - 6744, - 6748, - 6752, - 6756, - 6759, - 6766, - 6769, - 6772, - 6776, - 6781, - 6786, - 6790, - 6794, - 6799, - 6805, - 6816, - 6828, - 6834, - 6846, - 6859, - 6863, - 6868, - 6879, - 6891, - 6896, - 6908, - 6921, - 6923, - 6928, - 6933, - 6938, - 6942, - 6946, - 6951, - 6957, - 6962, - 6967, - 6972, - 6977, - 6982, - 6986, - 6990, - 6994, - 6997, - 7000, - 7003, - 7006, - 7008, - 7012, - 7016, - 7019, - 7022, - 7031, - 7040, - 7050, - 7059, - 7068, - 7076, - 7086, - 7096, - 7105, - 7114, - 7117, - 7119, - 7123, - 7127, - 7131, - 7135, - 7138, - 7143, - 7148, - 7152, - 7156, - 7160, - 7164, - 7168, - 7171, - 7176, - 7181, - 7185, - 7189, - 7197, - 7201, - 7204, - 7209, - 7214, - 7219, - 7223, - 7227, - 7237, - 7240, - 7242, - 7244, - 7249, - 7252, - 7255, - 7259, - 7262, - 7267, - 7272, - 7276, - 7280, - 7285, - 7289, - 7293, - 7296, - 7299, - 7305, - 7316, - 7328, - 7334, - 7346, - 7359, - 7363, - 7368, - 7378, - 7389, - 7394, - 7405, - 7417, - 7419, - 7424, - 7428, - 7432, - 7436, - 7440, - 7445, - 7451, - 7456, - 7461, - 7466, - 7471, - 7476, - 7480, - 7484, - 7488, - 7491, - 7494, - 7498, - 7502, - 7505, - 7508, - 7511, - 7519, - 7527, - 7534, - 7541, - 7548, - 7556, - 7559, - 7562, - 7565, - 7570, - 7576, - 7581, - 7586, - 7591, - 7596, - 7601, - 7606, - 7611, - 7615, - 7619, - 7623, - 7627, - 7631, - 0, - 7636, - 7642, - 7644, - 7649, - 7660, - 7669, - 7674, - 7684, - 7691, - 7698, - 7703, - 7710, - 0, - 7717, - 7723, - 7728, - 7738, - 7753, - 7768, - 7783, - 7788, - 7793, - 7798, - 7806, - 7821, - 0, - 7829, - 7832, - 7835, - 7838, - 7841, - 7844, - 7847, - 7850, - 0, - 7853, - 0, - 7855, - 0, - 0, - 7858, - 7866, - 7875, - 7882, - 7890, - 7898, - 7907, - 7914, - 7922, - 7932, - 7939, - 7946, - 7948, - 0, - 7950, - 0, - 0, - 7953, - 7955, - 7959, - 7961, - 0, - 7963, - 0, - 0, - 7966, - 7969, - 7972, - 7974, - 0, - 7976, - 7978, - 7980, - 7982, - 7989, - 7997, - 8001, - 8006, - 8011, - 8017, - 8022, - 8028, - 8033, - 8035, - 8037, - 8041, - 8043, - 0, - 8045, - 8047, - 8050, - 8053, - 8056, - 8059, - 8062, - 8065, - 0, - 0, - 0, - 0, - 8067, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8069, - 8077, - 8085, - 8098, - 8111, - 8120, - 8127, - 8137, - 8145, - 8153, - 8167, - 8181, - 8194, - 8210, - 8225, - 8239, - 8253, - 8270, - 8286, - 8301, - 8313, - 8328, - 8341, - 8354, - 8367, - 8383, - 8397, - 8411, - 8420, - 8428, - 8439, - 8448, - 8457, - 8464, - 8474, - 8482, - 8490, - 8495, - 8501, - 8506, - 8513, - 8521, - 8527, - 8535, - 8544, - 8550, - 8557, - 8563, - 8571, - 8580, - 8587, - 8596, - 8606, - 8612, - 8620, - 8629, - 8638, - 8649, - 0, - 8661, - 8663, - 8667, - 8670, - 8674, - 0, - 8678, - 8682, - 8684, - 8686, - 8690, - 8697, - 8700, - 8703, - 8706, - 8710, - 8715, - 8720, - 8724, - 8728, - 8732, - 8736, - 8740, - 8745, - 8750, - 8755, - 8760, - 8764, - 8768, - 8774, - 8780, - 8786, - 8792, - 8798, - 8804, - 8811, - 8817, - 8824, - 8830, - 8836, - 8842, - 8848, - 8854, - 8860, - 8867, - 8874, - 8881, - 8888, - 8894, - 8901, - 8907, - 8913, - 8919, - 8925, - 8932, - 8939, - 8946, - 8952, - 8958, - 8964, - 8971, - 8978, - 8985, - 8998, - 9004, - 9010, - 9016, - 9022, - 9029, - 9035, - 9041, - 9047, - 9053, - 9059, - 9065, - 9071, - 9077, - 9084, - 9091, - 9098, - 9105, - 9111, - 9118, - 9124, - 9131, - 9137, - 9143, - 9149, - 9156, - 9163, - 9170, - 9176, - 9182, - 9188, - 9195, - 9202, - 9209, - 9222, - 9225, - 9228, - 9232, - 9237, - 9242, - 9246, - 9250, - 9254, - 9258, - 9262, - 9267, - 9272, - 9277, - 9282, - 9286, - 9290, - 9296, - 9302, - 9305, - 9308, - 9314, - 9321, - 9328, - 9335, - 9350, - 9365, - 9372, - 9379, - 9393, - 9405, - 9417, - 9423, - 9430, - 9436, - 9443, - 9449, - 9455, - 9461, - 9467, - 9473, - 9479, - 9483, - 9489, - 9501, - 9513, - 9516, - 9519, - 9522, - 9524, - 9528, - 9532, - 9536, - 9540, - 9544, - 9547, - 9552, - 9556, - 9560, - 9563, - 9567, - 9570, - 9573, - 9576, - 9579, - 9582, - 9585, - 9589, - 9592, - 9595, - 9599, - 9602, - 9606, - 9610, - 9614, - 9617, - 9620, - 9625, - 9631, - 9638, - 9645, - 9653, - 9660, - 9669, - 9676, - 9681, - 9688, - 9695, - 9705, - 9715, - 9723, - 9734, - 9745, - 9755, - 9766, - 9778, - 9789, - 9801, - 9814, - 9828, - 9841, - 9848, - 9856, - 9864, - 0, - 9872, - 0, - 0, - 9874, - 9876, - 0, - 0, - 0, - 0, - 0, - 9881, - 9884, - 9887, - 9890, - 9893, - 9896, - 9903, - 9910, - 9917, - 9932, - 9947, - 9954, - 9961, - 9975, - 9981, - 9993, - 10005, - 10011, - 10017, - 10024, - 10031, - 10037, - 10043, - 10049, - 10055, - 10061, - 10067, - 10071, - 10077, - 10089, - 10101, - 10104, - 10107, - 10110, - 10112, - 10115, - 10118, - 10121, - 10123, - 10126, - 10130, - 10134, - 10137, - 10141, - 10144, - 10147, - 10150, - 10153, - 10156, - 10159, - 10162, - 10165, - 10168, - 10172, - 10176, - 10180, - 10184, - 10186, - 10188, - 10192, - 10199, - 10202, - 10212, - 10217, - 10222, - 10227, - 10232, - 10242, - 10252, - 10257, - 10262, - 10267, - 10269, - 10271, - 10273, - 10275, - 10277, - 10279, - 10281, - 10284, - 10287, - 10290, - 10295, - 10300, - 10305, - 10312, - 10317, - 10323, - 10333, - 10335, - 10338, - 10341, - 10344, - 10347, - 10350, - 10354, - 10358, - 10362, - 10366, - 10370, - 10373, - 10377, - 10381, - 10385, - 10389, - 10394, - 10397, - 10401, - 10405, - 10409, - 10413, - 10418, - 10427, - 10449, - 10452, - 10455, - 10458, - 10461, - 10464, - 10467, - 10471, - 10474, - 10478, - 10486, - 10488, - 10491, - 10494, - 10497, - 10500, - 10504, - 10508, - 10512, - 10515, - 10518, - 10522, - 10526, - 10530, - 10534, - 10537, - 10541, - 10545, - 10549, - 10553, - 10561, - 10583, - 10585, - 10588, - 10590, - 10594, - 10599, - 10603, - 10606, - 10609, - 10611, - 10614, - 10617, - 10619, - 10622, - 10634, - 10641, - 10648, - 10655, - 10662, - 10708, - 10727, - 10734, - 10741, - 10753, - 10759, - 10766, - 10773, - 10780, - 10787, - 10794, - 10800, - 10816, - 10865, - 10872, - 10879, - 10886, - 10898, - 10901, - 10904, - 10907, - 10910, - 10913, - 10917, - 10922, - 10926, - 10928, - 10930, - 10933, - 10936, - 10938, - 10940, - 10943, - 10946, - 10949, - 10952, - 10956, - 10959, - 10961, - 10963, - 10965, - 10968, - 10970, - 10972, - 10974, - 0, - 10976, - 10978, - 10980, - 10982, - 10984, - 10986, - 10988, - 10990, - 10992, - 10995, - 10998, - 11001, - 11004, - 11007, - 11010, - 11013, - 11016, - 11019, - 11022, - 0, - 0, - 0, - 11024, - 11027, - 11030, - 11033, - 11036, - 11039, - 11042, - 11045, - 11048, - 11051, - 11054, - 11060, - 11066, - 11072, - 11079, - 11086, - 11097, - 11104, - 11110, - 11118, - 11125, - 11132, - 11141, - 11147, - 11155, - 11162, - 11169, - 11178, - 11190, - 11215, - 11221, - 11227, - 11233, - 11240, - 11247, - 11258, - 11265, - 11271, - 11279, - 11286, - 11293, - 11302, - 11308, - 11316, - 11323, - 11330, - 11339, - 11351, - 11376, - 11382, - 11388, - 11394, - 11400, - 11406, - 11409, - 11411, - 11413, - 11415, - 11417, - 11419, - 11422, - 11424, - 11426, - 11428, - 11430, - 11432, - 11434, - 11436, - 11438, - 11440, - 11442, - 11469, - 11471, - 11473, - 11477, - 11504, - 11507, - 11510, - 11515, - 11518, - 11521, - 11523, - 11525, - 11527, - 11529, - 11531, - 11533, - 11535, - 11537, - 11539, - 11541, - 11543, - 11547, - 11552, - 11558, - 11563, - 11569, - 11576, - 11579, - 11583, - 11587, - 11592, - 11595, - 0, - 0, - 0, - 0, - 0, - 0, - 11600, - 11605, - 11609, - 11613, - 11617, - 11621, - 11625, - 11629, - 11633, - 11637, - 11641, - 11645, - 11649, - 11653, - 11659, - 11661, - 11663, - 11665, - 11667, - 11669, - 11673, - 11675, - 11677, - 11679, - 11683, - 11687, - 11691, - 11695, - 11699, - 11704, - 11706, - 11709, - 11712, - 11715, - 11718, - 11721, - 11726, - 11731, - 11736, - 11741, - 11745, - 11749, - 11754, - 11759, - 11764, - 11769, - 11773, - 11777, - 11781, - 11785, - 11788, - 11791, - 11796, - 11801, - 11806, - 11811, - 11814, - 11817, - 11822, - 11827, - 11832, - 11837, - 11840, - 11843, - 11848, - 11853, - 11858, - 11863, - 11866, - 11869, - 11874, - 11879, - 11884, - 11889, - 11893, - 11897, - 11903, - 11909, - 11915, - 11921, - 11925, - 11929, - 11935, - 11941, - 11947, - 11953, - 11957, - 11961, - 11967, - 11973, - 11979, - 11985, - 11988, - 11991, - 11996, - 12001, - 12006, - 12011, - 12014, - 12017, - 12022, - 12027, - 12032, - 12037, - 12042, - 12047, - 12052, - 12057, - 12062, - 12067, - 12072, - 12077, - 12084, - 12091, - 12098, - 12105, - 12112, - 12119, - 12121, - 12128, - 12136, - 12143, - 12152, - 12159, - 12167, - 12174, - 12183, - 12190, - 12198, - 12205, - 12214, - 12221, - 12229, - 12236, - 12245, - 12254, - 12264, - 12273, - 12284, - 12293, - 12303, - 12312, - 12323, - 12332, - 12342, - 12351, - 12362, - 12371, - 12381, - 12390, - 12401, - 12407, - 12415, - 12424, - 12432, - 12442, - 12450, - 12459, - 12467, - 12477, - 12485, - 12494, - 12502, - 12512, - 12520, - 12529, - 12537, - 12547, - 12556, - 12566, - 12575, - 12586, - 12595, - 12605, - 12614, - 12625, - 12634, - 12644, - 12653, - 12664, - 12673, - 12683, - 12692, - 12703, - 12712, - 12722, - 12731, - 12742, - 12751, - 12761, - 12770, - 12781, - 12790, - 12800, - 12809, - 12820, - 12829, - 12839, - 12848, - 12859, - 12868, - 12878, - 12887, - 12898, - 12907, - 12917, - 12926, - 12937, - 12946, - 12956, - 12965, - 12976, - 12985, - 12995, - 13004, - 13015, - 13022, - 13033, - 13042, - 13052, - 13061, - 13072, - 13081, - 13091, - 13100, - 13111, - 13120, - 13130, - 13139, - 13150, - 13159, - 13169, - 13178, - 13189, - 13198, - 13208, - 13217, - 13228, - 13237, - 13247, - 13256, - 13267, - 13276, - 13286, - 13295, - 13306, - 13315, - 13325, - 13334, - 13345, - 13356, - 13365, - 13375, - 13384, - 13395, - 13404, - 13414, - 13423, - 13434, - 13443, - 13453, - 13462, - 13473, - 13482, - 13492, - 13501, - 13512, - 13521, - 13530, - 13539, - 13548, - 13559, - 13574, - 13585, - 13600, - 13608, - 13616, - 13624, - 13632, - 13640, - 13644, - 13648, - 13652, - 13656, - 13668, - 13681, - 13695, - 13709, - 13723, - 13737, - 13742, - 13747, - 13752, - 13757, - 13763, - 13769, - 13775, - 13781, - 13787, - 13793, - 13799, - 13805, - 13810, - 13815, - 13820, - 13825, - 13830, - 13835, - 13840, - 13845, - 13852, - 13859, - 13866, - 13873, - 13880, - 0, - 13887, - 13889, - 13894, - 13899, - 13901, - 13905, - 13910, - 13915, - 13918, - 0, - 13922, - 13927, - 13929, - 13935, - 13940, - 13949, - 13955, - 13962, - 13965, - 13968, - 13972, - 13976, - 13980, - 13984, - 13989, - 13995, - 13999, - 14004, - 14008, - 14012, - 14016, - 14021, - 14027, - 14031, - 14036, - 14040, - 0, - 0, - 14042, - 14053, - 14062, - 14072, - 14079, - 14086, - 14090, - 0, - 0, - 14093, - 14098, - 14101, - 14103, - 14105, - 14109, - 0, - 0, - 14111, - 14113, - 14117, - 14120, - 14123, - 14127, - 0, - 0, - 14129, - 14133, - 0, - 0, - 14135, - 14137, - 14142, - 14147, - 14151, - 14155, - 14157, - 0, - 14159, - 14170, - 14178, - 14189, - 14198, - 14207, - 14223, - 14236, - 14252, - 14266, - 14280, - 14290, - 14301, - 14309, - 14320, - 14329, - 14338, - 14350, - 14360, - 14373, - 14384, - 14395, - 14409, - 14420, - 14428, - 14439, - 14448, - 14457, - 14466, - 14478, - 14488, - 14498, - 14503, - 14508, - 14513, - 14518, - 14529, - 14540, - 14551, - 14562, - 14566, - 14572, - 14578, - 14584, - 14590, - 14596, - 14602, - 14608, - 14614, - 14620, - 14626, - 14632, - 14638, - 14642, - 14648, - 14654, - 14660, - 14666, - 14673, - 14678, - 14683, - 14688, - 14693, - 14700, - 14707, - 14714, - 14721, - 14723, - 14730, - 14737, - 14744, - 14751, - 14757, - 14763, - 14769, - 14775, - 14781, - 14787, - 14793, - 14799, - 14805, - 14810, - 14815, - 14818, - 14826, - 14834, - 14842, - 14850, - 14858, - 14866, - 14871, - 14874, - 14889, - 14897, - 14899, - 14901, - 14903, - 14905, - 14907, - 14909, - 14912, - 14914, - 14919, - 14924, - 14929, - 14934, - 14941, - 14954, - 14967, - 14979, - 14993, - 15005, - 15020, - 15035, - 15050, - 15066, - 15083, - 15085, - 15089, - 15092, - 15098, - 15104, - 15110, - 15116, - 15124, - 15128, - 15131, - 15137, - 15143, - 15149, - 15155, - 15163, - 15173, - 15176, - 15180, - 15183, - 15189, - 15195, - 15201, - 15207, - 15215, - 15220, - 15224, - 15231, - 15238, - 15245, - 15252, - 15261, - 15266, - 15270, - 15277, - 15284, - 15291, - 15298, - 15307, - 15311, - 15314, - 15320, - 15326, - 15332, - 15338, - 15346, - 15350, - 15353, - 15359, - 15365, - 15371, - 15377, - 15385, - 15388, - 15394, - 15400, - 15406, - 15412, - 15420, - 15423, - 15428, - 15433, - 15438, - 15443, - 15450, - 15461, - 15469, - 15477, - 15485, - 15495, - 15503, - 15511, - 15521, - 15529, - 15539, - 15544, - 15554, - 15557, - 15559, - 15562, - 15567, - 15575, - 15584, - 15590, - 15596, - 15602, - 15608, - 15613, - 15621, - 15628, - 15633, - 15635, - 15637, - 15639, - 15647, - 15649, - 0, - 0, - 0, - 15654, - 15660, - 15667, - 15675, - 15682, - 15689, - 15696, - 15701, - 15704, - 15708, - 15712, - 15716, - 15720, - 15724, - 15728, - 15732, - 15734, - 15738, - 15741, - 15745, - 15749, - 15751, - 15755, - 15759, - 15764, - 15769, - 15772, - 15777, - 15780, - 15785, - 15790, - 15795, - 15798, - 15803, - 15807, - 15813, - 15817, - 15821, - 15827, - 15831, - 15837, - 15844, - 15852, - 15859, - 15865, - 15869, - 15873, - 15877, - 15882, - 15887, - 15892, - 15897, - 15902, - 15907, - 15912, - 15917, - 15922, - 15926, - 15930, - 15934, - 15939, - 15945, - 15949, - 15955, - 15962, - 15965, - 15968, - 15971, - 15975, - 15979, - 15983, - 15987, - 15992, - 15997, - 16002, - 16007, - 16011, - 16015, - 16021, - 16025, - 16029, - 16031, - 16035, - 16039, - 16041, - 16044, - 16048, - 16051, - 16056, - 16061, - 16064, - 16069, - 16074, - 16077, - 16081, - 16087, - 16091, - 16095, - 16103, - 16106, - 16113, - 16117, - 16122, - 16128, - 16136, - 16140, - 16145, - 16150, - 16155, - 16162, - 16164, - 16168, - 16172, - 16178, - 16180, - 16184, - 16187, - 16189, - 16193, - 16196, - 16200, - 16202, - 16204, - 16208, - 16212, - 16216, - 16222, - 16225, - 16228, - 16231, - 16233, - 16237, - 16241, - 16246, - 16251, - 16256, - 16261, - 16266, - 16275, - 16284, - 16293, - 16302, - 16309, - 16316, - 16323, - 16330, - 16337, - 16344, - 16351, - 16358, - 16364, - 16370, - 16376, - 16382, - 16388, - 16394, - 16400, - 16406, - 16412, - 16418, - 16424, - 16430, - 16438, - 16446, - 16454, - 16462, - 16470, - 16478, - 16483, - 16533, - 16583, - 16603, - 16608, - 16614, - 16620, - 16625, - 16630, - 16636, - 16641, - 16647, - 16652, - 16658, - 16663, - 16670, - 16676, - 16682, - 16687, - 16694, - 16700, - 16706, - 16711, - 16718, - 16724, - 16730, - 16735, - 16742, - 16748, - 16750, - 16753, - 16757, - 16762, - 16764, - 16767, - 16770, - 16774, - 16776, - 16778, - 16781, - 16785, - 16790, - 16793, - 16797, - 16801, - 16807, - 16810, - 16816, - 16822, - 16839, - 16855, - 16858, - 16861, - 16865, - 16872, - 16878, - 16885, - 16889, - 16899, - 16903, - 16914, - 16926, - 16931, - 16936, - 16944, - 16952, - 16963, - 16968, - 16976, - 16981, - 16989, - 16997, - 17002, - 17010, - 17015, - 17023, - 17029, - 17038, - 17046, - 17057, - 17068, - 17073, - 17082, - 0, - 17094, - 17102, - 17110, - 0, - 0, - 0, - 17118, - 17125, - 17129, - 17135, - 0, - 0, - 17150, - 17157, - 0, - 17164, - 0, - 17166, - 17168, - 0, - 0, - 17170, - 17173, - 0, - 0, - 0, - 0, - 17176, - 17180, - 17184, - 17186, - 0, - 0, - 0, - 17188, - 0, - 17190, - 17201, - 17217, - 17229, - 17240, - 17254, - 17266, - 17271, - 17276, - 17278, - 17285, - 17292, - 17295, - 17298, - 17302, - 17306, - 17312, - 17316, - 17320, - 17324, - 17328, - 17332, - 17335, - 17339, - 17344, - 17348, - 17353, - 17358, - 17363, - 17367, - 17370, - 17373, - 17377, - 17381, - 17385, - 17389, - 17394, - 17399, - 17406, - 17413, - 17418, - 17420, - 17423, - 17425, - 17428, - 17430, - 17432, - 17435, - 17439, - 17443, - 17445, - 17450, - 17456, - 17464, - 17473, - 17480, - 17483, - 17487, - 17495, - 17503, - 17508, - 17516, - 17527, - 17538, - 17552, - 17566, - 17571, - 17582, - 17586, - 17590, - 17595, - 0, - 17598, - 17601, - 17607, - 17620, - 17628, - 17635, - 17652, - 17668, - 17675, - 17681, - 17685, - 17687, - 17690, - 17696, - 17709, - 17726, - 17742, - 17749, - 17755, - 17759, - 17761, - 17764, - 17770, - 17783, - 17800, - 17816, - 17823, - 17829, - 17834, -}; - -static const nir_algebraic_table nir_opt_algebraic_table = { - .transforms = nir_opt_algebraic_transforms, - .transform_offsets = nir_opt_algebraic_transform_offsets, - .pass_op_table = nir_opt_algebraic_pass_op_table, - .values = nir_opt_algebraic_values, - .expression_cond = nir_opt_algebraic_expression_cond, - .variable_cond = nir_opt_algebraic_variable_cond, -}; - -bool -nir_opt_algebraic(nir_shader *shader) -{ - bool progress = false; - bool condition_flags[127]; - const nir_shader_compiler_options *options = shader->options; - const shader_info *info = &shader->info; - (void) options; - (void) info; - - /* This is not a great place for this, but it seems to be the best place - * for it. Check that at most one kind of lowering is requested for - * bitfield extract and bitfield insert. Otherwise the lowering can fight - * with each other and optimizations. - */ - assert((int)options->lower_bitfield_extract + - (int)options->lower_bitfield_extract_to_shifts <= 1); - assert((int)options->lower_bitfield_insert + - (int)options->lower_bitfield_insert_to_shifts + - (int)options->lower_bitfield_insert_to_bitfield_select <= 1); - - - STATIC_ASSERT(6173 == ARRAY_SIZE(nir_opt_algebraic_values)); - condition_flags[0] = true; - condition_flags[1] = !options->lower_bitops; - condition_flags[2] = options->lower_bitops; - condition_flags[3] = !options->lower_bitops && (options->lower_int64_options & (nir_lower_imul64 | nir_lower_shift64)) == nir_lower_imul64; - condition_flags[4] = options->lower_mul_2x32_64; - condition_flags[5] = !options->lower_ftrunc || options->lower_ffloor; - condition_flags[6] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 16); - condition_flags[7] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[8] = !options->lower_iadd_sat; - condition_flags[9] = !options->lower_uadd_sat; - condition_flags[10] = options->has_fmulz && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[11] = !options->has_sdot_4x8; - condition_flags[12] = !options->has_udot_4x8; - condition_flags[13] = !options->has_sudot_4x8; - condition_flags[14] = !options->has_dot_2x16; - condition_flags[15] = options->lower_flrp16; - condition_flags[16] = !options->lower_flrp16; - condition_flags[17] = options->lower_flrp32; - condition_flags[18] = !options->lower_flrp32; - condition_flags[19] = options->lower_flrp64; - condition_flags[20] = !options->lower_flrp64; - condition_flags[21] = options->lower_ftrunc; - condition_flags[22] = options->lower_ftrunc || (options->lower_doubles_options & nir_lower_dtrunc); - condition_flags[23] = options->lower_ffloor; - condition_flags[24] = (options->lower_ffloor || (options->lower_doubles_options & nir_lower_dfloor)) && !(options->lower_doubles_options & nir_lower_dfract); - condition_flags[25] = !options->lower_ffloor; - condition_flags[26] = !options->lower_ffloor && !(options->lower_doubles_options & nir_lower_dfloor); - condition_flags[27] = options->lower_ffract; - condition_flags[28] = options->lower_ffract || (options->lower_doubles_options & nir_lower_dfract); - condition_flags[29] = options->lower_fceil; - condition_flags[30] = options->lower_ffma16; - condition_flags[31] = options->lower_ffma32; - condition_flags[32] = options->lower_ffma64; - condition_flags[33] = options->fuse_ffma16; - condition_flags[34] = options->fuse_ffma32; - condition_flags[35] = options->fuse_ffma64; - condition_flags[36] = options->lower_fdph; - condition_flags[37] = !options->lower_fdph; - condition_flags[38] = options->lower_fdot; - condition_flags[39] = !options->lower_fsat; - condition_flags[40] = !options->lower_iabs; - condition_flags[41] = options->lower_fsat; - condition_flags[42] = !options->lower_fsat && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[43] = !options->lower_fsign; - condition_flags[44] = options->lower_umax; - condition_flags[45] = options->lower_umin; - condition_flags[46] = !options->lower_umax; - condition_flags[47] = !options->lower_umin; - condition_flags[48] = options->lower_scmp; - condition_flags[49] = options->lower_vector_cmp; - condition_flags[50] = !options->lower_pack_64_2x32_split; - condition_flags[51] = !options->lower_rotate; - condition_flags[52] = options->lower_rotate; - condition_flags[53] = options->lower_fpow; - condition_flags[54] = !options->lower_fpow; - condition_flags[55] = options->lower_fdiv; - condition_flags[56] = options->lower_fsqrt; - condition_flags[57] = !options->lower_fsqrt; - condition_flags[58] = options->lower_sincos; - condition_flags[59] = !(options->lower_doubles_options & nir_lower_fp64_full_software); - condition_flags[60] = !options->lower_extract_byte; - condition_flags[61] = !options->lower_extract_word; - condition_flags[62] = options->has_pack_32_4x8; - condition_flags[63] = options->lower_pack_64_2x32_split; - condition_flags[64] = options->lower_pack_32_2x16_split; - condition_flags[65] = options->has_pack_half_2x16_rtz; - condition_flags[66] = options->lower_unpack_64_2x32_split; - condition_flags[67] = options->lower_unpack_32_2x16_split; - condition_flags[68] = options->has_find_msb_rev; - condition_flags[69] = !options->lower_find_msb_to_reverse; - condition_flags[70] = !options->lower_find_lsb; - condition_flags[71] = options->lower_fmod; - condition_flags[72] = options->lower_uadd_carry; - condition_flags[73] = options->lower_usub_borrow; - condition_flags[74] = options->lower_bitfield_insert; - condition_flags[75] = options->lower_hadd; - condition_flags[76] = options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[77] = options->lower_mul_32x16; - condition_flags[78] = options->lower_uadd_sat || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[79] = options->lower_uadd_sat; - condition_flags[80] = options->lower_usub_sat; - condition_flags[81] = (options->lower_int64_options & nir_lower_usub_sat64) != 0; - condition_flags[82] = (options->lower_int64_options & nir_lower_iadd_sat64) != 0; - condition_flags[83] = (options->lower_int64_options & nir_lower_minmax64) != 0; - condition_flags[84] = (options->lower_int64_options & nir_lower_icmp64) != 0; - condition_flags[85] = options->lower_bitfield_insert_to_shifts; - condition_flags[86] = options->lower_bitfield_insert_to_bitfield_select; - condition_flags[87] = options->lower_bitfield_extract; - condition_flags[88] = options->lower_bitfield_insert_to_bitfield_select || options->lower_bitfield_insert; - condition_flags[89] = options->lower_bitfield_extract_to_shifts; - condition_flags[90] = options->lower_ifind_msb; - condition_flags[91] = options->lower_find_msb_to_reverse; - condition_flags[92] = options->lower_ifind_msb_to_uclz; - condition_flags[93] = options->lower_ufind_msb_to_uclz; - condition_flags[94] = options->lower_uclz; - condition_flags[95] = options->lower_find_lsb; - condition_flags[96] = options->lower_extract_byte; - condition_flags[97] = options->lower_extract_word; - condition_flags[98] = options->lower_pack_unorm_2x16; - condition_flags[99] = options->lower_pack_unorm_4x8; - condition_flags[100] = options->lower_pack_snorm_2x16; - condition_flags[101] = options->lower_pack_snorm_4x8; - condition_flags[102] = options->lower_unpack_unorm_2x16; - condition_flags[103] = options->lower_unpack_unorm_4x8; - condition_flags[104] = options->lower_unpack_snorm_2x16; - condition_flags[105] = options->lower_unpack_snorm_4x8; - condition_flags[106] = options->lower_pack_split; - condition_flags[107] = options->lower_isign; - condition_flags[108] = !options->lower_isign; - condition_flags[109] = options->lower_fsign; - condition_flags[110] = !options->has_imul24; - condition_flags[111] = !options->has_umul24; - condition_flags[112] = !options->has_umad24; - condition_flags[113] = options->has_imul24; - condition_flags[114] = options->has_umad24; - condition_flags[115] = options->has_umul24; - condition_flags[116] = !options->lower_uadd_sat && !(options->lower_int64_options & nir_lower_iadd64); - condition_flags[117] = !options->lower_usub_sat; - condition_flags[118] = !options->lower_usub_sat && !(options->lower_int64_options & nir_lower_usub_sat64); - condition_flags[119] = options->lower_iadd_sat; - condition_flags[120] = options->support_8bit_alu; - condition_flags[121] = options->support_16bit_alu; - condition_flags[122] = options->lower_ldexp; - condition_flags[123] = !options->lower_bitfield_reverse; - condition_flags[124] = info->stage == MESA_SHADER_COMPUTE && info->cs.derivative_group == DERIVATIVE_GROUP_NONE; - condition_flags[125] = options->lower_fisnormal; - condition_flags[126] = !options->vectorize_vec2_16bit; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_algebraic_impl(function->impl, condition_flags, - &nir_opt_algebraic_table); - } - } - - return progress; -} - - -#include "nir.h" -#include "nir_builder.h" -#include "nir_search.h" -#include "nir_search_helpers.h" - -/* What follows is NIR algebraic transform code for the following 15 - * transforms: - * ('~fmul(is_used_once)', ('fmul(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('fmul', ('fmul', 'a', 'c'), 'b') - * ('imul(is_used_once)', ('imul(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('imul', ('imul', 'a', 'c'), 'b') - * ('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('fadd', ('fadd', 'a', 'c'), 'b') - * ('iadd(is_used_once)', ('iadd(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('iadd', ('iadd', 'a', 'c'), 'b') - * ('~fadd', ('fmul', 'a', 'b'), ('fmul', 'a', 'c')) => ('fmul', 'a', ('fadd', 'b', 'c')) - * ('iadd', ('imul', 'a', 'b'), ('imul', 'a', 'c')) => ('imul', 'a', ('iadd', 'b', 'c')) - * ('~fadd', ('fneg', 'a'), 'a') => 0.0 - * ('iadd', ('ineg', 'a'), 'a') => 0 - * ('iadd', ('ineg', 'a'), ('iadd', 'a', 'b')) => b - * ('iadd', 'a', ('iadd', ('ineg', 'a'), 'b')) => b - * ('~fadd', ('fneg', 'a'), ('fadd', 'a', 'b')) => b - * ('~fadd', 'a', ('fadd', ('fneg', 'a'), 'b')) => b - * ('~flrp', ('fadd(is_used_once)', 'a', -1.0), ('fadd(is_used_once)', 'a', 1.0), 'd') => ('fadd', ('flrp', -1.0, 1.0, 'd'), 'a') - * ('~flrp', ('fadd(is_used_once)', 'a', 1.0), ('fadd(is_used_once)', 'a', -1.0), 'd') => ('fadd', ('flrp', 1.0, -1.0, 'd'), 'a') - * ('~flrp', ('fadd(is_used_once)', 'a', '#b'), ('fadd(is_used_once)', 'a', '#c'), 'd') => ('fadd', ('fmul', 'd', ('fadd', 'c', ('fneg', 'b'))), ('fadd', 'a', 'b')) - */ - - -static const nir_search_value_union nir_opt_algebraic_before_ffma_values[] = { - /* ('~fmul(is_used_once)', ('fmul(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('fmul', ('fmul', 'a', 'c'), 'b') */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - 0, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 0, 1 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - false, - nir_type_invalid, - 0, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fmul, - 0, 2, - { 2, 3 }, - 0, - } }, - - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 5, 6 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 7, 8 }, - -1, - } }, - - /* ('imul(is_used_once)', ('imul(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('imul', ('imul', 'a', 'c'), 'b') */ - /* search2162_0_0 -> 0 in the cache */ - /* search2162_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 0, 1 }, - 0, - } }, - /* search2162_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 10, 3 }, - 0, - } }, - - /* replace2162_0_0 -> 5 in the cache */ - /* replace2162_0_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 5, 6 }, - -1, - } }, - /* replace2162_1 -> 8 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 12, 8 }, - -1, - } }, - - /* ('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('fadd', ('fadd', 'a', 'c'), 'b') */ - /* search2163_0_0 -> 0 in the cache */ - /* search2163_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 0, 1 }, - 0, - } }, - /* search2163_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 14, 3 }, - 0, - } }, - - /* replace2163_0_0 -> 5 in the cache */ - /* replace2163_0_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 5, 6 }, - -1, - } }, - /* replace2163_1 -> 8 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 16, 8 }, - -1, - } }, - - /* ('iadd(is_used_once)', ('iadd(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)') => ('iadd', ('iadd', 'a', 'c'), 'b') */ - /* search2164_0_0 -> 0 in the cache */ - /* search2164_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 0, 1 }, - 0, - } }, - /* search2164_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 18, 3 }, - 0, - } }, - - /* replace2164_0_0 -> 5 in the cache */ - /* replace2164_0_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 5, 6 }, - -1, - } }, - /* replace2164_1 -> 8 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 20, 8 }, - -1, - } }, - - /* ('~fadd', ('fmul', 'a', 'b'), ('fmul', 'a', 'c')) => ('fmul', 'a', ('fadd', 'b', 'c')) */ - /* search2165_0_0 -> 5 in the cache */ - /* search2165_0_1 -> 8 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 5, 8 }, - -1, - } }, - /* search2165_1_0 -> 5 in the cache */ - /* search2165_1_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 5, 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 22, 23 }, - -1, - } }, - - /* replace2165_0 -> 5 in the cache */ - /* replace2165_1_0 -> 8 in the cache */ - /* replace2165_1_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 8, 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmul, - 0, 2, - { 5, 25 }, - -1, - } }, - - /* ('iadd', ('imul', 'a', 'b'), ('imul', 'a', 'c')) => ('imul', 'a', ('iadd', 'b', 'c')) */ - /* search2166_0_0 -> 5 in the cache */ - /* search2166_0_1 -> 8 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 1, 1, - { 5, 8 }, - -1, - } }, - /* search2166_1_0 -> 5 in the cache */ - /* search2166_1_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 2, 1, - { 5, 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 3, - { 27, 28 }, - -1, - } }, - - /* replace2166_0 -> 5 in the cache */ - /* replace2166_1_0 -> 8 in the cache */ - /* replace2166_1_1 -> 6 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 8, 6 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_imul, - 0, 2, - { 5, 30 }, - -1, - } }, - - /* ('~fadd', ('fneg', 'a'), 'a') => 0.0 */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 32 }, - -1, - } }, - /* search2167_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fadd, - 0, 1, - { 33, 32 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - - /* ('iadd', ('ineg', 'a'), 'a') => 0 */ - /* search2168_0_0 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 32 }, - -1, - } }, - /* search2168_1 -> 32 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 36, 32 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - - /* ('iadd', ('ineg', 'a'), ('iadd', 'a', 'b')) => b */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 39 }, - -1, - } }, - /* search2169_1_0 -> 39 in the cache */ - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 39, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 40, 42 }, - -1, - } }, - - /* replace2169 -> 41 in the cache */ - - /* ('iadd', 'a', ('iadd', ('ineg', 'a'), 'b')) => b */ - /* search2170_0 -> 39 in the cache */ - /* search2170_1_0_0 -> 39 in the cache */ - /* search2170_1_0 -> 40 in the cache */ - /* search2170_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 40, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 39, 44 }, - -1, - } }, - - /* replace2170 -> 41 in the cache */ - - /* ('~fadd', ('fneg', 'a'), ('fadd', 'a', 'b')) => b */ - /* search2171_0_0 -> 39 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 39 }, - -1, - } }, - /* search2171_1_0 -> 39 in the cache */ - /* search2171_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 39, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 46, 47 }, - -1, - } }, - - /* replace2171 -> 41 in the cache */ - - /* ('~fadd', 'a', ('fadd', ('fneg', 'a'), 'b')) => b */ - /* search2172_0 -> 39 in the cache */ - /* search2172_1_0_0 -> 39 in the cache */ - /* search2172_1_0 -> 46 in the cache */ - /* search2172_1_1 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 46, 41 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 39, 49 }, - -1, - } }, - - /* replace2172 -> 41 in the cache */ - - /* ('~flrp', ('fadd(is_used_once)', 'a', -1.0), ('fadd(is_used_once)', 'a', 1.0), 'd') => ('fadd', ('flrp', -1.0, 1.0, 'd'), 'a') */ - /* search2173_0_0 -> 39 in the cache */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 39, 51 }, - 0, - } }, - /* search2173_1_0 -> 39 in the cache */ - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 39, 53 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 52, 54, 55 }, - -1, - } }, - - /* replace2173_0_0 -> 51 in the cache */ - /* replace2173_0_1 -> 53 in the cache */ - /* replace2173_0_2 -> 55 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 51, 53, 55 }, - -1, - } }, - /* replace2173_1 -> 39 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 57, 39 }, - -1, - } }, - - /* ('~flrp', ('fadd(is_used_once)', 'a', 1.0), ('fadd(is_used_once)', 'a', -1.0), 'd') => ('fadd', ('flrp', 1.0, -1.0, 'd'), 'a') */ - /* search2174_0_0 -> 39 in the cache */ - /* search2174_0_1 -> 53 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 39, 53 }, - 0, - } }, - /* search2174_1_0 -> 39 in the cache */ - /* search2174_1_1 -> 51 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 39, 51 }, - 0, - } }, - /* search2174_2 -> 55 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 59, 60, 55 }, - -1, - } }, - - /* replace2174_0_0 -> 53 in the cache */ - /* replace2174_0_1 -> 51 in the cache */ - /* replace2174_0_2 -> 55 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 53, 51, 55 }, - -1, - } }, - /* replace2174_1 -> 39 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 62, 39 }, - -1, - } }, - - /* ('~flrp', ('fadd(is_used_once)', 'a', '#b'), ('fadd(is_used_once)', 'a', '#c'), 'd') => ('fadd', ('fmul', 'd', ('fadd', 'c', ('fneg', 'b'))), ('fadd', 'a', 'b')) */ - { .variable = { - { nir_search_value_variable, -4 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 64, 65 }, - 0, - } }, - /* search2175_1_0 -> 64 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 64, 67 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 66, 68, 69 }, - -1, - } }, - - /* replace2175_0_0 -> 69 in the cache */ - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 72 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 71, 73 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 69, 74 }, - -1, - } }, - /* replace2175_1_0 -> 64 in the cache */ - /* replace2175_1_1 -> 72 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 3, 1, - { 64, 72 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 4, - { 75, 76 }, - -1, - } }, - -}; - -static const nir_search_expression_cond nir_opt_algebraic_before_ffma_expression_cond[] = { - (is_used_once), -}; - -static const nir_search_variable_cond nir_opt_algebraic_before_ffma_variable_cond[] = { - (is_not_const), -}; - -static const struct transform nir_opt_algebraic_before_ffma_transforms[] = { - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 17, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 35, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 17, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 35, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 24, 26, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 35, 0 }, - { 48, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 17, 0 }, - { 34, 35, 0 }, - { 48, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4, 9, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4, 9, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 19, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 37, 38, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 19, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 37, 38, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 29, 31, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 37, 38, 0 }, - { 43, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 19, 21, 0 }, - { 37, 38, 0 }, - { 43, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 11, 13, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 11, 13, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 56, 58, 0 }, - { 61, 63, 0 }, - { 70, 77, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 50, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 17, 0 }, - { 50, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 50, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 17, 0 }, - { 50, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 35, 0 }, - { 48, 41, 0 }, - { 50, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 17, 0 }, - { 34, 35, 0 }, - { 48, 41, 0 }, - { 50, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 45, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 19, 21, 0 }, - { 45, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 45, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 19, 21, 0 }, - { 45, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 37, 38, 0 }, - { 43, 41, 0 }, - { 45, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 19, 21, 0 }, - { 37, 38, 0 }, - { 43, 41, 0 }, - { 45, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - -}; - -static const struct per_op_table nir_opt_algebraic_before_ffma_pass_op_table[nir_num_search_ops] = { - [nir_op_fmul] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 2, - 3, - 19, - 3, - 3, - 20, - 19, - 20, - 19, - }, - }, - [nir_op_imul] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 4, - 5, - 28, - 5, - 5, - 29, - 28, - 29, - 28, - }, - }, - [nir_op_fadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 2, - 2, - 0, - 0, - 3, - 4, - 0, - 0, - 5, - 0, - 3, - 6, - 4, - 7, - 3, - 6, - 6, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 6, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 6, - 7, - 6, - 6, - 12, - 13, - 31, - 32, - 7, - 7, - 7, - 7, - 14, - 15, - 33, - 34, - 6, - 7, - 16, - 6, - 12, - 13, - 31, - 32, - 6, - 7, - 6, - 6, - 12, - 17, - 31, - 32, - 12, - 14, - 12, - 12, - 12, - 18, - 32, - 32, - 13, - 15, - 13, - 17, - 18, - 13, - 35, - 36, - 31, - 33, - 31, - 31, - 32, - 35, - 31, - 32, - 32, - 34, - 32, - 32, - 32, - 36, - 32, - 32, - }, - }, - [nir_op_iadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 2, - 2, - 0, - 0, - 3, - 4, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 6, - 4, - 7, - 3, - 6, - 6, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 4, - 6, - 6, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 8, - 9, - 8, - 8, - 21, - 22, - 37, - 38, - 9, - 9, - 9, - 9, - 23, - 24, - 39, - 40, - 8, - 9, - 25, - 8, - 21, - 22, - 37, - 38, - 8, - 9, - 8, - 8, - 21, - 26, - 37, - 38, - 21, - 23, - 21, - 21, - 21, - 27, - 38, - 38, - 22, - 24, - 22, - 26, - 27, - 22, - 41, - 42, - 37, - 39, - 37, - 37, - 38, - 41, - 37, - 38, - 38, - 40, - 38, - 38, - 38, - 42, - 38, - 38, - }, - }, - [nir_op_fneg] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 10, - }, - }, - [nir_op_ineg] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 11, - }, - }, - [nir_op_flrp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 0, - 0, - 0, - 30, - 30, - }, - }, -}; - -/* Mapping from state index to offset in transforms (0 being no transforms) */ -static const uint16_t nir_opt_algebraic_before_ffma_transform_offsets[] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 3, - 5, - 7, - 9, - 11, - 14, - 18, - 20, - 22, - 24, - 26, - 28, - 30, - 32, - 35, - 39, - 41, - 43, - 47, - 49, - 52, - 54, - 57, - 61, - 66, - 68, - 71, - 73, - 76, - 80, -}; - -static const nir_algebraic_table nir_opt_algebraic_before_ffma_table = { - .transforms = nir_opt_algebraic_before_ffma_transforms, - .transform_offsets = nir_opt_algebraic_before_ffma_transform_offsets, - .pass_op_table = nir_opt_algebraic_before_ffma_pass_op_table, - .values = nir_opt_algebraic_before_ffma_values, - .expression_cond = nir_opt_algebraic_before_ffma_expression_cond, - .variable_cond = nir_opt_algebraic_before_ffma_variable_cond, -}; - -bool -nir_opt_algebraic_before_ffma(nir_shader *shader) -{ - bool progress = false; - bool condition_flags[127]; - const nir_shader_compiler_options *options = shader->options; - const shader_info *info = &shader->info; - (void) options; - (void) info; - - /* This is not a great place for this, but it seems to be the best place - * for it. Check that at most one kind of lowering is requested for - * bitfield extract and bitfield insert. Otherwise the lowering can fight - * with each other and optimizations. - */ - assert((int)options->lower_bitfield_extract + - (int)options->lower_bitfield_extract_to_shifts <= 1); - assert((int)options->lower_bitfield_insert + - (int)options->lower_bitfield_insert_to_shifts + - (int)options->lower_bitfield_insert_to_bitfield_select <= 1); - - - STATIC_ASSERT(78 == ARRAY_SIZE(nir_opt_algebraic_before_ffma_values)); - condition_flags[0] = true; - condition_flags[1] = !options->lower_bitops; - condition_flags[2] = options->lower_bitops; - condition_flags[3] = !options->lower_bitops && (options->lower_int64_options & (nir_lower_imul64 | nir_lower_shift64)) == nir_lower_imul64; - condition_flags[4] = options->lower_mul_2x32_64; - condition_flags[5] = !options->lower_ftrunc || options->lower_ffloor; - condition_flags[6] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 16); - condition_flags[7] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[8] = !options->lower_iadd_sat; - condition_flags[9] = !options->lower_uadd_sat; - condition_flags[10] = options->has_fmulz && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[11] = !options->has_sdot_4x8; - condition_flags[12] = !options->has_udot_4x8; - condition_flags[13] = !options->has_sudot_4x8; - condition_flags[14] = !options->has_dot_2x16; - condition_flags[15] = options->lower_flrp16; - condition_flags[16] = !options->lower_flrp16; - condition_flags[17] = options->lower_flrp32; - condition_flags[18] = !options->lower_flrp32; - condition_flags[19] = options->lower_flrp64; - condition_flags[20] = !options->lower_flrp64; - condition_flags[21] = options->lower_ftrunc; - condition_flags[22] = options->lower_ftrunc || (options->lower_doubles_options & nir_lower_dtrunc); - condition_flags[23] = options->lower_ffloor; - condition_flags[24] = (options->lower_ffloor || (options->lower_doubles_options & nir_lower_dfloor)) && !(options->lower_doubles_options & nir_lower_dfract); - condition_flags[25] = !options->lower_ffloor; - condition_flags[26] = !options->lower_ffloor && !(options->lower_doubles_options & nir_lower_dfloor); - condition_flags[27] = options->lower_ffract; - condition_flags[28] = options->lower_ffract || (options->lower_doubles_options & nir_lower_dfract); - condition_flags[29] = options->lower_fceil; - condition_flags[30] = options->lower_ffma16; - condition_flags[31] = options->lower_ffma32; - condition_flags[32] = options->lower_ffma64; - condition_flags[33] = options->fuse_ffma16; - condition_flags[34] = options->fuse_ffma32; - condition_flags[35] = options->fuse_ffma64; - condition_flags[36] = options->lower_fdph; - condition_flags[37] = !options->lower_fdph; - condition_flags[38] = options->lower_fdot; - condition_flags[39] = !options->lower_fsat; - condition_flags[40] = !options->lower_iabs; - condition_flags[41] = options->lower_fsat; - condition_flags[42] = !options->lower_fsat && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[43] = !options->lower_fsign; - condition_flags[44] = options->lower_umax; - condition_flags[45] = options->lower_umin; - condition_flags[46] = !options->lower_umax; - condition_flags[47] = !options->lower_umin; - condition_flags[48] = options->lower_scmp; - condition_flags[49] = options->lower_vector_cmp; - condition_flags[50] = !options->lower_pack_64_2x32_split; - condition_flags[51] = !options->lower_rotate; - condition_flags[52] = options->lower_rotate; - condition_flags[53] = options->lower_fpow; - condition_flags[54] = !options->lower_fpow; - condition_flags[55] = options->lower_fdiv; - condition_flags[56] = options->lower_fsqrt; - condition_flags[57] = !options->lower_fsqrt; - condition_flags[58] = options->lower_sincos; - condition_flags[59] = !(options->lower_doubles_options & nir_lower_fp64_full_software); - condition_flags[60] = !options->lower_extract_byte; - condition_flags[61] = !options->lower_extract_word; - condition_flags[62] = options->has_pack_32_4x8; - condition_flags[63] = options->lower_pack_64_2x32_split; - condition_flags[64] = options->lower_pack_32_2x16_split; - condition_flags[65] = options->has_pack_half_2x16_rtz; - condition_flags[66] = options->lower_unpack_64_2x32_split; - condition_flags[67] = options->lower_unpack_32_2x16_split; - condition_flags[68] = options->has_find_msb_rev; - condition_flags[69] = !options->lower_find_msb_to_reverse; - condition_flags[70] = !options->lower_find_lsb; - condition_flags[71] = options->lower_fmod; - condition_flags[72] = options->lower_uadd_carry; - condition_flags[73] = options->lower_usub_borrow; - condition_flags[74] = options->lower_bitfield_insert; - condition_flags[75] = options->lower_hadd; - condition_flags[76] = options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[77] = options->lower_mul_32x16; - condition_flags[78] = options->lower_uadd_sat || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[79] = options->lower_uadd_sat; - condition_flags[80] = options->lower_usub_sat; - condition_flags[81] = (options->lower_int64_options & nir_lower_usub_sat64) != 0; - condition_flags[82] = (options->lower_int64_options & nir_lower_iadd_sat64) != 0; - condition_flags[83] = (options->lower_int64_options & nir_lower_minmax64) != 0; - condition_flags[84] = (options->lower_int64_options & nir_lower_icmp64) != 0; - condition_flags[85] = options->lower_bitfield_insert_to_shifts; - condition_flags[86] = options->lower_bitfield_insert_to_bitfield_select; - condition_flags[87] = options->lower_bitfield_extract; - condition_flags[88] = options->lower_bitfield_insert_to_bitfield_select || options->lower_bitfield_insert; - condition_flags[89] = options->lower_bitfield_extract_to_shifts; - condition_flags[90] = options->lower_ifind_msb; - condition_flags[91] = options->lower_find_msb_to_reverse; - condition_flags[92] = options->lower_ifind_msb_to_uclz; - condition_flags[93] = options->lower_ufind_msb_to_uclz; - condition_flags[94] = options->lower_uclz; - condition_flags[95] = options->lower_find_lsb; - condition_flags[96] = options->lower_extract_byte; - condition_flags[97] = options->lower_extract_word; - condition_flags[98] = options->lower_pack_unorm_2x16; - condition_flags[99] = options->lower_pack_unorm_4x8; - condition_flags[100] = options->lower_pack_snorm_2x16; - condition_flags[101] = options->lower_pack_snorm_4x8; - condition_flags[102] = options->lower_unpack_unorm_2x16; - condition_flags[103] = options->lower_unpack_unorm_4x8; - condition_flags[104] = options->lower_unpack_snorm_2x16; - condition_flags[105] = options->lower_unpack_snorm_4x8; - condition_flags[106] = options->lower_pack_split; - condition_flags[107] = options->lower_isign; - condition_flags[108] = !options->lower_isign; - condition_flags[109] = options->lower_fsign; - condition_flags[110] = !options->has_imul24; - condition_flags[111] = !options->has_umul24; - condition_flags[112] = !options->has_umad24; - condition_flags[113] = options->has_imul24; - condition_flags[114] = options->has_umad24; - condition_flags[115] = options->has_umul24; - condition_flags[116] = !options->lower_uadd_sat && !(options->lower_int64_options & nir_lower_iadd64); - condition_flags[117] = !options->lower_usub_sat; - condition_flags[118] = !options->lower_usub_sat && !(options->lower_int64_options & nir_lower_usub_sat64); - condition_flags[119] = options->lower_iadd_sat; - condition_flags[120] = options->support_8bit_alu; - condition_flags[121] = options->support_16bit_alu; - condition_flags[122] = options->lower_ldexp; - condition_flags[123] = !options->lower_bitfield_reverse; - condition_flags[124] = info->stage == MESA_SHADER_COMPUTE && info->cs.derivative_group == DERIVATIVE_GROUP_NONE; - condition_flags[125] = options->lower_fisnormal; - condition_flags[126] = !options->vectorize_vec2_16bit; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_algebraic_impl(function->impl, condition_flags, - &nir_opt_algebraic_before_ffma_table); - } - } - - return progress; -} - - -#include "nir.h" -#include "nir_builder.h" -#include "nir_search.h" -#include "nir_search_helpers.h" - -/* What follows is NIR algebraic transform code for the following 205 - * transforms: - * ('flt', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('flt', 'a', ('fneg', 'b')) - * ('flt', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b')), 0.0) => ('flt', ('fneg', 'a'), 'b') - * ('flt', 0.0, ('fadd(is_used_once)', 'a', 'b')) => ('flt', ('fneg', 'a'), 'b') - * ('flt', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b'))) => ('flt', 'a', ('fneg', 'b')) - * ('~fge', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('fge', 'a', ('fneg', 'b')) - * ('~fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b')), 0.0) => ('fge', ('fneg', 'a'), 'b') - * ('~fge', 0.0, ('fadd(is_used_once)', 'a', 'b')) => ('fge', ('fneg', 'a'), 'b') - * ('~fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b'))) => ('fge', 'a', ('fneg', 'b')) - * ('~feq', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('feq', 'a', ('fneg', 'b')) - * ('~fneu', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('fneu', 'a', ('fneg', 'b')) - * ('fge', ('fadd(is_used_once)', 'a(is_finite)', 'b'), 0.0) => ('fge', 'a', ('fneg', 'b')) - * ('fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', 'b')), 0.0) => ('fge', ('fneg', 'a'), 'b') - * ('fge', 0.0, ('fadd(is_used_once)', 'a(is_finite)', 'b')) => ('fge', ('fneg', 'a'), 'b') - * ('fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', 'b'))) => ('fge', 'a', ('fneg', 'b')) - * ('feq', ('fadd(is_used_once)', 'a(is_finite)', 'b'), 0.0) => ('feq', 'a', ('fneg', 'b')) - * ('fneu', ('fadd(is_used_once)', 'a(is_finite)', 'b'), 0.0) => ('fneu', 'a', ('fneg', 'b')) - * ('iand', ('fneu', 'a', 'b'), ('iand', ('feq', 'a', 'a'), ('feq', 'b', 'b'))) => ('ior', ('!flt', 'a', 'b'), ('!flt', 'b', 'a')) - * ('iand', ('fneu', 'a', 0.0), ('feq', 'a', 'a')) => ('!flt', 0.0, ('fabs', 'a')) - * ('ior', ('feq', 'a', 'b'), ('ior', ('fneu', 'a', 'a'), ('fneu', 'b', 'b'))) => ('inot', ('ior', ('!flt', 'a', 'b'), ('!flt', 'b', 'a'))) - * ('ior', ('feq', 'a', 0.0), ('fneu', 'a', 'a')) => ('inot', ('!flt', 0.0, ('fabs', 'a'))) - * ('fneg', ('fneg', 'a')) => a - * ('~fadd@16', ('fmul(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffma', 'a', 'b', 'c') - * ('~fadd@16', ('fneg(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fneg', 'a'), 'b', 'c') - * ('~fadd@16', ('fabs(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fabs', 'a'), ('fabs', 'b'), 'c') - * ('~fadd@16', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmul(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffma', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') - * ('~fadd@32', ('fmul(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffma', 'a', 'b', 'c') - * ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fneg', 'a'), 'b', 'c') - * ('~fadd@32', ('fabs(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fabs', 'a'), ('fabs', 'b'), 'c') - * ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmul(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffma', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') - * ('~fadd@32', ('fmulz(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffmaz', 'a', 'b', 'c') - * ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fmulz(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffmaz', ('fneg', 'a'), 'b', 'c') - * ('~fadd@32', ('fabs(is_only_used_by_fadd)', ('fmulz(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffmaz', ('fabs', 'a'), ('fabs', 'b'), 'c') - * ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmulz(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffmaz', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') - * ('~fadd@64', ('fmul(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffma', 'a', 'b', 'c') - * ('~fadd@64', ('fneg(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fneg', 'a'), 'b', 'c') - * ('~fadd@64', ('fabs(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fabs', 'a'), ('fabs', 'b'), 'c') - * ('~fadd@64', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmul(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffma', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') - * ('fadd@8', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') - * ('fadd@16', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') - * ('fadd@32', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') - * ('fadd@64', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') - * ('fneg', 'a') => ('fmul', 'a', -1.0) - * ('iadd', 'a', ('ineg', 'b')) => ('isub', 'a', 'b') - * ('ineg', 'a') => ('isub', 0, 'a') - * ('iabs', 'a') => ('imax', 'a', ('ineg', 'a')) - * ('iadd', ('iadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)') => ('iadd3', 'a', 'b', 'c') - * ('iadd', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)') => ('iadd3', 'a', ('ineg', 'b'), 'c') - * ('isub', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)') => ('iadd3', 'a', ('ineg', 'b'), ('ineg', 'c')) - * ('vec2(is_only_used_as_float)', ('fneg@16', 'a'), 'b') => ('fmul', ('vec2', 'a', 'b'), ('vec2', -1.0, 1.0)) - * ('vec2(is_only_used_as_float)', 'a', ('fneg@16', 'b')) => ('fmul', ('vec2', 'a', 'b'), ('vec2', 1.0, -1.0)) - * ('flt', '#b(is_gt_0_and_lt_1)', ('fsat(is_used_once)', 'a')) => ('flt', 'b', 'a') - * ('fge', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fge', 'a', 'b') - * ('feq', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('feq', 'a', 'b') - * ('fneu', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fneu', 'a', 'b') - * ('fge', ('fsat(is_used_once)', 'a'), 1.0) => ('fge', 'a', 1.0) - * ('~fge', ('fmin(is_used_once)', ('fadd(is_used_once)', 'a', 'b'), ('fadd', 'c', 'd')), 0.0) => ('iand', ('fge', 'a', ('fneg', 'b')), ('fge', 'c', ('fneg', 'd'))) - * ('flt', ('fneg', 'a'), ('fneg', 'b')) => ('flt', 'b', 'a') - * ('fge', ('fneg', 'a'), ('fneg', 'b')) => ('fge', 'b', 'a') - * ('feq', ('fneg', 'a'), ('fneg', 'b')) => ('feq', 'b', 'a') - * ('fneu', ('fneg', 'a'), ('fneg', 'b')) => ('fneu', 'b', 'a') - * ('flt', ('fneg', 'a'), -1.0) => ('flt', 1.0, 'a') - * ('flt', -1.0, ('fneg', 'a')) => ('flt', 'a', 1.0) - * ('fge', ('fneg', 'a'), -1.0) => ('fge', 1.0, 'a') - * ('fge', -1.0, ('fneg', 'a')) => ('fge', 'a', 1.0) - * ('fneu', ('fneg', 'a'), -1.0) => ('fneu', 1.0, 'a') - * ('feq', -1.0, ('fneg', 'a')) => ('feq', 'a', 1.0) - * ('ior', 'a', 'a') => a - * ('iand', 'a', 'a') => a - * ('~fadd', ('fneg(is_used_once)', ('fsat(is_used_once)', 'a(is_not_fmul)')), 1.0) => ('fsat', ('fadd', 1.0, ('fneg', 'a'))) - * ('fdot2', 'a', 'b') => ('fdot2_replicated', 'a', 'b') - * ('fdot3', 'a', 'b') => ('fdot3_replicated', 'a', 'b') - * ('fdot4', 'a', 'b') => ('fdot4_replicated', 'a', 'b') - * ('fdph', 'a', 'b') => ('fdph_replicated', 'a', 'b') - * ('~flrp', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') - * ('fround_even', 'a') => ('bcsel', ('feq', ('ffract', 'a'), 0.5), ('fadd', ('ffloor', ('fadd', 'a', 0.5)), 1.0), ('ffloor', ('fadd', 'a', 0.5))) - * ('~ffma@32', 'a', 2.0, -1.0) => ('flrp', -1.0, 1.0, 'a') - * ('~ffma@32', 'a', -2.0, -1.0) => ('flrp', -1.0, 1.0, ('fneg', 'a')) - * ('~ffma@32', 'a', -2.0, 1.0) => ('flrp', 1.0, -1.0, 'a') - * ('~ffma@32', 'a', 2.0, 1.0) => ('flrp', 1.0, -1.0, ('fneg', 'a')) - * ('~fadd@32', ('fmul(is_used_once)', 2.0, 'a'), -1.0) => ('flrp', -1.0, 1.0, 'a') - * ('~fadd@32', ('fmul(is_used_once)', -2.0, 'a'), -1.0) => ('flrp', -1.0, 1.0, ('fneg', 'a')) - * ('~fadd@32', ('fmul(is_used_once)', -2.0, 'a'), 1.0) => ('flrp', 1.0, -1.0, 'a') - * ('~fadd@32', ('fmul(is_used_once)', 2.0, 'a'), 1.0) => ('flrp', 1.0, -1.0, ('fneg', 'a')) - * ('~ffma@32', ('fadd', 'b', ('fneg', 'a')), 'a', 'a') => ('flrp', 'a', 'b', 'a') - * ('~ffma@32', 'a', 2.0, ('fneg', ('fmul', 'a', 'a'))) => ('flrp', 'a', 1.0, 'a') - * ('~ffma@32', 'a', 2.0, ('fmul', ('fneg', 'a'), 'a')) => ('flrp', 'a', 1.0, 'a') - * ('~ffma@32', 'a', ('fneg', 'a'), ('fmul', 2.0, 'a')) => ('flrp', 'a', 1.0, 'a') - * ('~fmul@32', 'a', ('fadd', 2.0, ('fneg', 'a'))) => ('flrp', 'a', 1.0, 'a') - * ('fmin', ('fadd(is_used_once)', '#c', 'a'), ('fadd(is_used_once)', '#c', 'b')) => ('fadd', 'c', ('fmin', 'a', 'b')) - * ('fmax', ('fadd(is_used_once)', '#c', 'a'), ('fadd(is_used_once)', '#c', 'b')) => ('fadd', 'c', ('fmax', 'a', 'b')) - * ('bcsel', ('feq', ('fsqrt', 'a(is_not_negative)'), 0.0), 3.4028234663852886e+38, ('frsq', 'a')) => ('fmin', ('frsq', 'a'), 3.4028234663852886e+38) - * ('~fadd', ('ffma(is_used_once)', 'a', 'b', ('ffma', 'c', 'd', ('fmul(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)'))), 'g(is_not_const)') => ('ffma', 'a', 'b', ('ffma', 'c', 'd', ('ffma', 'e', 'f', 'g'))) - * ('~fadd', ('ffma(is_used_once)', 'a', 'b', ('fmul(is_used_once)', 'c(is_not_const_and_not_fsign)', 'd(is_not_const_and_not_fsign)')), 'e(is_not_const)') => ('ffma', 'a', 'b', ('ffma', 'c', 'd', 'e')) - * ('~fadd', ('fneg', ('ffma(is_used_once)', 'a', 'b', ('ffma', 'c', 'd', ('fmul(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)')))), 'g(is_not_const)') => ('ffma', ('fneg', 'a'), 'b', ('ffma', ('fneg', 'c'), 'd', ('ffma', ('fneg', 'e'), 'f', 'g'))) - * ('~fadd', ('ffmaz(is_used_once)', 'a', 'b', ('ffmaz', 'c', 'd', ('fmulz(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)'))), 'g(is_not_const)') => ('ffmaz', 'a', 'b', ('ffmaz', 'c', 'd', ('ffmaz', 'e', 'f', 'g'))) - * ('~fadd', ('ffmaz(is_used_once)', 'a', 'b', ('fmulz(is_used_once)', 'c(is_not_const_and_not_fsign)', 'd(is_not_const_and_not_fsign)')), 'e(is_not_const)') => ('ffmaz', 'a', 'b', ('ffmaz', 'c', 'd', 'e')) - * ('~fadd', ('fneg', ('ffmaz(is_used_once)', 'a', 'b', ('ffmaz', 'c', 'd', ('fmulz(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)')))), 'g(is_not_const)') => ('ffmaz', ('fneg', 'a'), 'b', ('ffmaz', ('fneg', 'c'), 'd', ('ffmaz', ('fneg', 'e'), 'f', 'g'))) - * ('ubfe', 'a', 'b', 0) => 0 - * ('ibfe', 'a', 'b', 0) => 0 - * ('ubfe', 'a', '#b', '#c') => ('iand', ('ushr', 4294967295, ('ineg', 'c')), ('ushr', 'a', 'b')) - * ('ibfe', 'a', '#b', '#c') => ('ishr', ('ishl', 'a', ('ineg', ('iadd', 'b', 'c'))), ('ineg', 'c')) - * ('ishl', 'a', 0) => a - * ('ishl', 'a', -32) => a - * ('ishr', 'a', 0) => a - * ('ishr', 'a', -32) => a - * ('ushr', 'a', 0) => a - * ('extract_i8', ('extract_i8', 'a', 'b'), 0) => ('extract_i8', 'a', 'b') - * ('extract_i8', ('extract_u8', 'a', 'b'), 0) => ('extract_i8', 'a', 'b') - * ('extract_u8', ('extract_i8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') - * ('extract_u8', ('extract_u8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') - * ('u2u16', ('u2u8', 'a@16')) => ('extract_u8', 'a', 0) - * ('u2u16', ('i2i8', 'a@16')) => ('extract_u8', 'a', 0) - * ('i2i16', ('u2u8', 'a@16')) => ('extract_i8', 'a', 0) - * ('i2i16', ('i2i8', 'a@16')) => ('extract_i8', 'a', 0) - * ('u2u32', ('u2u8', 'a@32')) => ('extract_u8', 'a', 0) - * ('u2u32', ('i2i8', 'a@32')) => ('extract_u8', 'a', 0) - * ('u2u32', ('u2u16', 'a@32')) => ('extract_u16', 'a', 0) - * ('u2u32', ('i2i16', 'a@32')) => ('extract_u16', 'a', 0) - * ('i2i32', ('u2u8', 'a@32')) => ('extract_i8', 'a', 0) - * ('i2i32', ('i2i8', 'a@32')) => ('extract_i8', 'a', 0) - * ('i2i32', ('u2u16', 'a@32')) => ('extract_i16', 'a', 0) - * ('i2i32', ('i2i16', 'a@32')) => ('extract_i16', 'a', 0) - * ('ishl', ('extract_u8', 'a@32', 0), 8) => ('insert_u8', 'a', 1) - * ('ishl', ('extract_u8', 'a@32', 0), 16) => ('insert_u8', 'a', 2) - * ('ishl', ('extract_u8', 'a@32', 0), 24) => ('insert_u8', 'a', 3) - * ('iand', ('ishl', 'a@32', 8), 65280) => ('insert_u8', 'a', 1) - * ('iand', ('ishl', 'a@32', 16), 16711680) => ('insert_u8', 'a', 2) - * ('iand', ('ishl', 'a@32', 24), 4278190080) => ('insert_u8', 'a', 3) - * ('ishl', 'a@32', 24) => ('insert_u8', 'a', 3) - * ('ishl', 'a@32', 16) => ('insert_u16', 'a', 1) - * ('insert_u8', ('extract_u8', 'a', 0), 'b') => ('insert_u8', 'a', 'b') - * ('insert_u16', ('extract_u16', 'a', 0), 'b') => ('insert_u16', 'a', 'b') - * ('iand', ('ine(is_used_once)', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ieq(is_used_once)', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('iand', ('ine(is_used_once)', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ieq(is_used_once)', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('iand', ('ine(is_used_once)', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ieq(is_used_once)', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('iand', ('ine(is_used_once)', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('umin', 'a', 'b'), 0) - * ('ior', ('ieq(is_used_once)', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('umin', 'a', 'b'), 0) - * ('~fadd@16', 1.0, ('fmul(is_used_once)', 'c', ('fadd', 'b', -1.0))) => ('fadd', ('fadd', 1.0, ('fneg', 'c')), ('fmul', 'b', 'c')) - * ('bcsel', 'a', 0, ('b2f16', ('inot', 'b@bool'))) => ('b2f16', ('inot', ('ior', 'a', 'b'))) - * ('~fadd@32', 1.0, ('fmul(is_used_once)', 'c', ('fadd', 'b', -1.0))) => ('fadd', ('fadd', 1.0, ('fneg', 'c')), ('fmul', 'b', 'c')) - * ('bcsel', 'a', 0, ('b2f32', ('inot', 'b@bool'))) => ('b2f32', ('inot', ('ior', 'a', 'b'))) - * ('~fadd@64', 1.0, ('fmul(is_used_once)', 'c', ('fadd', 'b', -1.0))) => ('fadd', ('fadd', 1.0, ('fneg', 'c')), ('fmul', 'b', 'c')) - * ('bcsel', 'a', 0, ('b2f64', ('inot', 'b@bool'))) => ('b2f64', ('inot', ('ior', 'a', 'b'))) - * ('bcsel', 'a', ('fadd(is_used_once)', 'b', 'c'), ('fadd', 'b', 'd')) => ('fadd', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('fadd', 'b', 'c'), ('fadd(is_used_once)', 'b', 'd')) => ('fadd', 'b', ('bcsel', 'a', 'c', 'd')) - * ('bcsel', 'a', ('ffma(is_used_once)', 'b', 'c', 'd'), ('ffma', 'b', 'c', 'e')) => ('ffma', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('ffma', 'b', 'c', 'd'), ('ffma(is_used_once)', 'b', 'c', 'e')) => ('ffma', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('ffma(is_used_once)', 'b', 'c', 'd'), ('ffma', 'b', 'e', 'd')) => ('ffma', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('bcsel', 'a', ('ffma', 'b', 'c', 'd'), ('ffma(is_used_once)', 'b', 'e', 'd')) => ('ffma', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('bcsel', 'a', ('ffmaz(is_used_once)', 'b', 'c', 'd'), ('ffmaz', 'b', 'c', 'e')) => ('ffmaz', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('ffmaz', 'b', 'c', 'd'), ('ffmaz(is_used_once)', 'b', 'c', 'e')) => ('ffmaz', 'b', 'c', ('bcsel', 'a', 'd', 'e')) - * ('bcsel', 'a', ('ffmaz(is_used_once)', 'b', 'c', 'd'), ('ffmaz', 'b', 'e', 'd')) => ('ffmaz', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('bcsel', 'a', ('ffmaz', 'b', 'c', 'd'), ('ffmaz(is_used_once)', 'b', 'e', 'd')) => ('ffmaz', 'b', ('bcsel', 'a', 'c', 'e'), 'd') - * ('~f2f32', ('fabs', ('f2fmp', 'a'))) => ('fabs', 'a') - * ('~f2f32', ('fceil', ('f2fmp', 'a'))) => ('fceil', 'a') - * ('~f2f32', ('fcos', ('f2fmp', 'a'))) => ('fcos', 'a') - * ('~f2f32', ('fexp2', ('f2fmp', 'a'))) => ('fexp2', 'a') - * ('~f2f32', ('ffloor', ('f2fmp', 'a'))) => ('ffloor', 'a') - * ('~f2f32', ('ffract', ('f2fmp', 'a'))) => ('ffract', 'a') - * ('~f2f32', ('flog2', ('f2fmp', 'a'))) => ('flog2', 'a') - * ('~f2f32', ('fneg', ('f2fmp', 'a'))) => ('fneg', 'a') - * ('~f2f32', ('frcp', ('f2fmp', 'a'))) => ('frcp', 'a') - * ('~f2f32', ('fround_even', ('f2fmp', 'a'))) => ('fround_even', 'a') - * ('~f2f32', ('frsq', ('f2fmp', 'a'))) => ('frsq', 'a') - * ('~f2f32', ('fsat', ('f2fmp', 'a'))) => ('fsat', 'a') - * ('~f2f32', ('fsign', ('f2fmp', 'a'))) => ('fsign', 'a') - * ('~f2f32', ('fsin', ('f2fmp', 'a'))) => ('fsin', 'a') - * ('~f2f32', ('fsqrt', ('f2fmp', 'a'))) => ('fsqrt', 'a') - * ('~f2f32', ('fadd', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fadd', 'a', 'b') - * ('~f2f32', ('fdiv', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fdiv', 'a', 'b') - * ('~f2f32', ('fmax', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmax', 'a', 'b') - * ('~f2f32', ('fmin', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmin', 'a', 'b') - * ('~f2f32', ('fmod', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmod', 'a', 'b') - * ('~f2f32', ('fmul', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmul', 'a', 'b') - * ('~f2f32', ('fpow', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fpow', 'a', 'b') - * ('~f2f32', ('frem', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('frem', 'a', 'b') - * ('~f2f32', ('ffma', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c'))) => ('ffma', 'a', 'b', 'c') - * ('~f2f32', ('flrp', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c'))) => ('flrp', 'a', 'b', 'c') - * ('~feq', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('feq', 'a', 'b') - * ('~fge', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('fge', 'a', 'b') - * ('~flt', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('flt', 'a', 'b') - * ('~fneu', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('fneu', 'a', 'b') - * ('f2fmp', 'a') => ('f2f16', 'a') - * ('f2imp', 'a') => ('f2i16', 'a') - * ('f2ump', 'a') => ('f2u16', 'a') - * ('i2imp', 'a') => ('i2i16', 'a') - * ('i2fmp', 'a') => ('i2f16', 'a') - * ('i2imp', 'a') => ('u2u16', 'a') - * ('u2fmp', 'a') => ('u2f16', 'a') - * ('fisfinite', 'a') => ('flt', ('fabs', 'a'), inf) - * ('fcsel', ('slt', 0, 'a'), 'b', 'c') => ('fcsel_gt', 'a', 'b', 'c') - * ('fcsel', ('slt', 'a', 0), 'b', 'c') => ('fcsel_gt', ('fneg', 'a'), 'b', 'c') - * ('fcsel', ('sge', 'a', 0), 'b', 'c') => ('fcsel_ge', 'a', 'b', 'c') - * ('fcsel', ('sge', 0, 'a'), 'b', 'c') => ('fcsel_ge', ('fneg', 'a'), 'b', 'c') - * ('bcsel', ('ilt', 0, 'a@32'), 'b@32', 'c@32') => ('i32csel_gt', 'a', 'b', 'c') - * ('bcsel', ('ilt', 'a@32', 0), 'b@32', 'c@32') => ('i32csel_ge', 'a', 'c', 'b') - * ('bcsel', ('ige', 'a@32', 0), 'b@32', 'c@32') => ('i32csel_ge', 'a', 'b', 'c') - * ('bcsel', ('ige', 0, 'a@32'), 'b@32', 'c@32') => ('i32csel_gt', 'a', 'c', 'b') - * ('bcsel', ('flt', 0, 'a@32'), 'b@32', 'c@32') => ('fcsel_gt', 'a', 'b', 'c') - * ('bcsel', ('flt', 'a@32', 0), 'b@32', 'c@32') => ('fcsel_gt', ('fneg', 'a'), 'b', 'c') - * ('bcsel', ('fge', 'a@32', 0), 'b@32', 'c@32') => ('fcsel_ge', 'a', 'b', 'c') - * ('bcsel', ('fge', 0, 'a@32'), 'b@32', 'c@32') => ('fcsel_ge', ('fneg', 'a'), 'b', 'c') - */ - - -static const nir_search_value_union nir_opt_algebraic_late_values[] = { - /* ('flt', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('flt', 'a', ('fneg', 'b')) */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 0, 1 }, - 0, - } }, - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 2, 3 }, - -1, - } }, - - /* replace2176_0 -> 0 in the cache */ - /* replace2176_1_0 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 1 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 0, 5 }, - -1, - } }, - - /* ('flt', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b')), 0.0) => ('flt', ('fneg', 'a'), 'b') */ - /* search2177_0_0_0 -> 0 in the cache */ - /* search2177_0_0_1 -> 1 in the cache */ - /* search2177_0_0 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 2 }, - 0, - } }, - /* search2177_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 7, 3 }, - -1, - } }, - - /* replace2177_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 0 }, - -1, - } }, - /* replace2177_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 9, 1 }, - -1, - } }, - - /* ('flt', 0.0, ('fadd(is_used_once)', 'a', 'b')) => ('flt', ('fneg', 'a'), 'b') */ - /* search2178_0 -> 3 in the cache */ - /* search2178_1_0 -> 0 in the cache */ - /* search2178_1_1 -> 1 in the cache */ - /* search2178_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 3, 2 }, - -1, - } }, - - /* replace2178_0_0 -> 0 in the cache */ - /* replace2178_0 -> 9 in the cache */ - /* replace2178_1 -> 1 in the cache */ - /* replace2178 -> 10 in the cache */ - - /* ('flt', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b'))) => ('flt', 'a', ('fneg', 'b')) */ - /* search2179_0 -> 3 in the cache */ - /* search2179_1_0_0 -> 0 in the cache */ - /* search2179_1_0_1 -> 1 in the cache */ - /* search2179_1_0 -> 2 in the cache */ - /* search2179_1 -> 7 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 1, - { 3, 7 }, - -1, - } }, - - /* replace2179_0 -> 0 in the cache */ - /* replace2179_1_0 -> 1 in the cache */ - /* replace2179_1 -> 5 in the cache */ - /* replace2179 -> 6 in the cache */ - - /* ('~fge', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('fge', 'a', ('fneg', 'b')) */ - /* search2180_0_0 -> 0 in the cache */ - /* search2180_0_1 -> 1 in the cache */ - /* search2180_0 -> 2 in the cache */ - /* search2180_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 2, 3 }, - -1, - } }, - - /* replace2180_0 -> 0 in the cache */ - /* replace2180_1_0 -> 1 in the cache */ - /* replace2180_1 -> 5 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 0, 5 }, - -1, - } }, - - /* ('~fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b')), 0.0) => ('fge', ('fneg', 'a'), 'b') */ - /* search2181_0_0_0 -> 0 in the cache */ - /* search2181_0_0_1 -> 1 in the cache */ - /* search2181_0_0 -> 2 in the cache */ - /* search2181_0 -> 7 in the cache */ - /* search2181_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 7, 3 }, - -1, - } }, - - /* replace2181_0_0 -> 0 in the cache */ - /* replace2181_0 -> 9 in the cache */ - /* replace2181_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 9, 1 }, - -1, - } }, - - /* ('~fge', 0.0, ('fadd(is_used_once)', 'a', 'b')) => ('fge', ('fneg', 'a'), 'b') */ - /* search2182_0 -> 3 in the cache */ - /* search2182_1_0 -> 0 in the cache */ - /* search2182_1_1 -> 1 in the cache */ - /* search2182_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 3, 2 }, - -1, - } }, - - /* replace2182_0_0 -> 0 in the cache */ - /* replace2182_0 -> 9 in the cache */ - /* replace2182_1 -> 1 in the cache */ - /* replace2182 -> 16 in the cache */ - - /* ('~fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a', 'b'))) => ('fge', 'a', ('fneg', 'b')) */ - /* search2183_0 -> 3 in the cache */ - /* search2183_1_0_0 -> 0 in the cache */ - /* search2183_1_0_1 -> 1 in the cache */ - /* search2183_1_0 -> 2 in the cache */ - /* search2183_1 -> 7 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 1, - { 3, 7 }, - -1, - } }, - - /* replace2183_0 -> 0 in the cache */ - /* replace2183_1_0 -> 1 in the cache */ - /* replace2183_1 -> 5 in the cache */ - /* replace2183 -> 14 in the cache */ - - /* ('~feq', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('feq', 'a', ('fneg', 'b')) */ - /* search2184_0_0 -> 0 in the cache */ - /* search2184_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 0, 1 }, - 0, - } }, - /* search2184_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_feq, - 0, 2, - { 19, 3 }, - -1, - } }, - - /* replace2184_0 -> 0 in the cache */ - /* replace2184_1_0 -> 1 in the cache */ - /* replace2184_1 -> 5 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 0, 5 }, - -1, - } }, - - /* ('~fneu', ('fadd(is_used_once)', 'a', 'b'), 0.0) => ('fneu', 'a', ('fneg', 'b')) */ - /* search2185_0_0 -> 0 in the cache */ - /* search2185_0_1 -> 1 in the cache */ - /* search2185_0 -> 19 in the cache */ - /* search2185_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fneu, - 0, 2, - { 19, 3 }, - -1, - } }, - - /* replace2185_0 -> 0 in the cache */ - /* replace2185_1_0 -> 1 in the cache */ - /* replace2185_1 -> 5 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 0, 5 }, - -1, - } }, - - /* ('fge', ('fadd(is_used_once)', 'a(is_finite)', 'b'), 0.0) => ('fge', 'a', ('fneg', 'b')) */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - 0, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2186_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 24, 1 }, - 0, - } }, - /* search2186_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 25, 3 }, - -1, - } }, - - /* replace2186_0 -> 0 in the cache */ - /* replace2186_1_0 -> 1 in the cache */ - /* replace2186_1 -> 5 in the cache */ - /* replace2186 -> 14 in the cache */ - - /* ('fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', 'b')), 0.0) => ('fge', ('fneg', 'a'), 'b') */ - /* search2187_0_0_0 -> 24 in the cache */ - /* search2187_0_0_1 -> 1 in the cache */ - /* search2187_0_0 -> 25 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 25 }, - 0, - } }, - /* search2187_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 27, 3 }, - -1, - } }, - - /* replace2187_0_0 -> 0 in the cache */ - /* replace2187_0 -> 9 in the cache */ - /* replace2187_1 -> 1 in the cache */ - /* replace2187 -> 16 in the cache */ - - /* ('fge', 0.0, ('fadd(is_used_once)', 'a(is_finite)', 'b')) => ('fge', ('fneg', 'a'), 'b') */ - /* search2188_0 -> 3 in the cache */ - /* search2188_1_0 -> 24 in the cache */ - /* search2188_1_1 -> 1 in the cache */ - /* search2188_1 -> 25 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 3, 25 }, - -1, - } }, - - /* replace2188_0_0 -> 0 in the cache */ - /* replace2188_0 -> 9 in the cache */ - /* replace2188_1 -> 1 in the cache */ - /* replace2188 -> 16 in the cache */ - - /* ('fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', 'b'))) => ('fge', 'a', ('fneg', 'b')) */ - /* search2189_0 -> 3 in the cache */ - /* search2189_1_0_0 -> 24 in the cache */ - /* search2189_1_0_1 -> 1 in the cache */ - /* search2189_1_0 -> 25 in the cache */ - /* search2189_1 -> 27 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 1, - { 3, 27 }, - -1, - } }, - - /* replace2189_0 -> 0 in the cache */ - /* replace2189_1_0 -> 1 in the cache */ - /* replace2189_1 -> 5 in the cache */ - /* replace2189 -> 14 in the cache */ - - /* ('feq', ('fadd(is_used_once)', 'a(is_finite)', 'b'), 0.0) => ('feq', 'a', ('fneg', 'b')) */ - /* search2190_0_0 -> 24 in the cache */ - /* search2190_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 24, 1 }, - 0, - } }, - /* search2190_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 2, - { 31, 3 }, - -1, - } }, - - /* replace2190_0 -> 0 in the cache */ - /* replace2190_1_0 -> 1 in the cache */ - /* replace2190_1 -> 5 in the cache */ - /* replace2190 -> 21 in the cache */ - - /* ('fneu', ('fadd(is_used_once)', 'a(is_finite)', 'b'), 0.0) => ('fneu', 'a', ('fneg', 'b')) */ - /* search2191_0_0 -> 24 in the cache */ - /* search2191_0_1 -> 1 in the cache */ - /* search2191_0 -> 31 in the cache */ - /* search2191_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 2, - { 31, 3 }, - -1, - } }, - - /* replace2191_0 -> 0 in the cache */ - /* replace2191_1_0 -> 1 in the cache */ - /* replace2191_1 -> 5 in the cache */ - /* replace2191 -> 23 in the cache */ - - /* ('iand', ('fneu', 'a', 'b'), ('iand', ('feq', 'a', 'a'), ('feq', 'b', 'b'))) => ('ior', ('!flt', 'a', 'b'), ('!flt', 'b', 'a')) */ - /* search2192_0_0 -> 0 in the cache */ - /* search2192_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 0, 1 }, - -1, - } }, - /* search2192_1_0_0 -> 0 in the cache */ - /* search2192_1_0_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - -1, 0, - { 0, 0 }, - -1, - } }, - /* search2192_1_1_0 -> 1 in the cache */ - /* search2192_1_1_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - -1, 0, - { 1, 1 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 2, 1, - { 35, 36 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 34, 37 }, - -1, - } }, - - /* replace2192_0_0 -> 0 in the cache */ - /* replace2192_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 0, 1 }, - -1, - } }, - /* replace2192_1_0 -> 1 in the cache */ - /* replace2192_1_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 1, 0 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 39, 40 }, - -1, - } }, - - /* ('iand', ('fneu', 'a', 0.0), ('feq', 'a', 'a')) => ('!flt', 0.0, ('fabs', 'a')) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 1, 1, - { 42, 43 }, - -1, - } }, - /* search2193_1_0 -> 42 in the cache */ - /* search2193_1_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - -1, 0, - { 42, 42 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 2, - { 44, 45 }, - -1, - } }, - - /* replace2193_0 -> 43 in the cache */ - /* replace2193_1_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 42 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - true, - false, - nir_op_flt, - -1, 0, - { 43, 47 }, - -1, - } }, - - /* ('ior', ('feq', 'a', 'b'), ('ior', ('fneu', 'a', 'a'), ('fneu', 'b', 'b'))) => ('inot', ('ior', ('!flt', 'a', 'b'), ('!flt', 'b', 'a'))) */ - /* search2194_0_0 -> 0 in the cache */ - /* search2194_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 0, 1 }, - -1, - } }, - /* search2194_1_0_0 -> 0 in the cache */ - /* search2194_1_0_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - -1, 0, - { 0, 0 }, - -1, - } }, - /* search2194_1_1_0 -> 1 in the cache */ - /* search2194_1_1_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - -1, 0, - { 1, 1 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 2, 1, - { 50, 51 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 49, 52 }, - -1, - } }, - - /* replace2194_0_0_0 -> 0 in the cache */ - /* replace2194_0_0_1 -> 1 in the cache */ - /* replace2194_0_0 -> 39 in the cache */ - /* replace2194_0_1_0 -> 1 in the cache */ - /* replace2194_0_1_1 -> 0 in the cache */ - /* replace2194_0_1 -> 40 in the cache */ - /* replace2194_0 -> 41 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 41 }, - -1, - } }, - - /* ('ior', ('feq', 'a', 0.0), ('fneu', 'a', 'a')) => ('inot', ('!flt', 0.0, ('fabs', 'a'))) */ - /* search2195_0_0 -> 42 in the cache */ - /* search2195_0_1 -> 43 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 1, 1, - { 42, 43 }, - -1, - } }, - /* search2195_1_0 -> 42 in the cache */ - /* search2195_1_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - -1, 0, - { 42, 42 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 2, - { 55, 56 }, - -1, - } }, - - /* replace2195_0_0 -> 43 in the cache */ - /* replace2195_0_1_0 -> 42 in the cache */ - /* replace2195_0_1 -> 47 in the cache */ - /* replace2195_0 -> 48 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 48 }, - -1, - } }, - - /* ('fneg', ('fneg', 'a')) => a */ - /* search2196_0_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 42 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 59 }, - -1, - } }, - - /* replace2196 -> 42 in the cache */ - - /* ('~fadd@16', ('fmul(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffma', 'a', 'b', 'c') */ - { .variable = { - { nir_search_value_variable, 16 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 16 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 61, 62 }, - 1, - } }, - { .variable = { - { nir_search_value_variable, 16 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 63, 64 }, - -1, - } }, - - /* replace2197_0 -> 61 in the cache */ - /* replace2197_1 -> 62 in the cache */ - /* replace2197_2 -> 64 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 61, 62, 64 }, - -1, - } }, - - /* ('~fadd@16', ('fneg(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fneg', 'a'), 'b', 'c') */ - /* search2198_0_0_0 -> 61 in the cache */ - /* search2198_0_0_1 -> 62 in the cache */ - /* search2198_0_0 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 63 }, - 1, - } }, - /* search2198_1 -> 64 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 67, 64 }, - -1, - } }, - - /* replace2198_0_0 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 61 }, - -1, - } }, - /* replace2198_1 -> 62 in the cache */ - /* replace2198_2 -> 64 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 69, 62, 64 }, - -1, - } }, - - /* ('~fadd@16', ('fabs(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fabs', 'a'), ('fabs', 'b'), 'c') */ - /* search2199_0_0_0 -> 61 in the cache */ - /* search2199_0_0_1 -> 62 in the cache */ - /* search2199_0_0 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 63 }, - 1, - } }, - /* search2199_1 -> 64 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 71, 64 }, - -1, - } }, - - /* replace2199_0_0 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 61 }, - -1, - } }, - /* replace2199_1_0 -> 62 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 62 }, - -1, - } }, - /* replace2199_2 -> 64 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 73, 74, 64 }, - -1, - } }, - - /* ('~fadd@16', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmul(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffma', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') */ - /* search2200_0_0_0_0 -> 61 in the cache */ - /* search2200_0_0_0_1 -> 62 in the cache */ - /* search2200_0_0_0 -> 63 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 63 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 76 }, - 1, - } }, - /* search2200_1 -> 64 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 77, 64 }, - -1, - } }, - - /* replace2200_0_0_0 -> 61 in the cache */ - /* replace2200_0_0 -> 73 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 73 }, - -1, - } }, - /* replace2200_1_0 -> 62 in the cache */ - /* replace2200_1 -> 74 in the cache */ - /* replace2200_2 -> 64 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 79, 74, 64 }, - -1, - } }, - - /* ('~fadd@32', ('fmul(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffma', 'a', 'b', 'c') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 81, 82 }, - 1, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 83, 84 }, - -1, - } }, - - /* replace2201_0 -> 81 in the cache */ - /* replace2201_1 -> 82 in the cache */ - /* replace2201_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 81, 82, 84 }, - -1, - } }, - - /* ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fneg', 'a'), 'b', 'c') */ - /* search2202_0_0_0 -> 81 in the cache */ - /* search2202_0_0_1 -> 82 in the cache */ - /* search2202_0_0 -> 83 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 83 }, - 1, - } }, - /* search2202_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 87, 84 }, - -1, - } }, - - /* replace2202_0_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 81 }, - -1, - } }, - /* replace2202_1 -> 82 in the cache */ - /* replace2202_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 89, 82, 84 }, - -1, - } }, - - /* ('~fadd@32', ('fabs(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fabs', 'a'), ('fabs', 'b'), 'c') */ - /* search2203_0_0_0 -> 81 in the cache */ - /* search2203_0_0_1 -> 82 in the cache */ - /* search2203_0_0 -> 83 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 83 }, - 1, - } }, - /* search2203_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 91, 84 }, - -1, - } }, - - /* replace2203_0_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 81 }, - -1, - } }, - /* replace2203_1_0 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 82 }, - -1, - } }, - /* replace2203_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 93, 94, 84 }, - -1, - } }, - - /* ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmul(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffma', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') */ - /* search2204_0_0_0_0 -> 81 in the cache */ - /* search2204_0_0_0_1 -> 82 in the cache */ - /* search2204_0_0_0 -> 83 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 83 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 96 }, - 1, - } }, - /* search2204_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 97, 84 }, - -1, - } }, - - /* replace2204_0_0_0 -> 81 in the cache */ - /* replace2204_0_0 -> 93 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 93 }, - -1, - } }, - /* replace2204_1_0 -> 82 in the cache */ - /* replace2204_1 -> 94 in the cache */ - /* replace2204_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 99, 94, 84 }, - -1, - } }, - - /* ('~fadd@32', ('fmulz(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffmaz', 'a', 'b', 'c') */ - /* search2205_0_0 -> 81 in the cache */ - /* search2205_0_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 1, 1, - { 81, 82 }, - 1, - } }, - /* search2205_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 101, 84 }, - -1, - } }, - - /* replace2205_0 -> 81 in the cache */ - /* replace2205_1 -> 82 in the cache */ - /* replace2205_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 81, 82, 84 }, - -1, - } }, - - /* ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fmulz(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffmaz', ('fneg', 'a'), 'b', 'c') */ - /* search2206_0_0_0 -> 81 in the cache */ - /* search2206_0_0_1 -> 82 in the cache */ - /* search2206_0_0 -> 101 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 101 }, - 1, - } }, - /* search2206_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 104, 84 }, - -1, - } }, - - /* replace2206_0_0 -> 81 in the cache */ - /* replace2206_0 -> 89 in the cache */ - /* replace2206_1 -> 82 in the cache */ - /* replace2206_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 89, 82, 84 }, - -1, - } }, - - /* ('~fadd@32', ('fabs(is_only_used_by_fadd)', ('fmulz(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffmaz', ('fabs', 'a'), ('fabs', 'b'), 'c') */ - /* search2207_0_0_0 -> 81 in the cache */ - /* search2207_0_0_1 -> 82 in the cache */ - /* search2207_0_0 -> 101 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 101 }, - 1, - } }, - /* search2207_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 107, 84 }, - -1, - } }, - - /* replace2207_0_0 -> 81 in the cache */ - /* replace2207_0 -> 93 in the cache */ - /* replace2207_1_0 -> 82 in the cache */ - /* replace2207_1 -> 94 in the cache */ - /* replace2207_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 93, 94, 84 }, - -1, - } }, - - /* ('~fadd@32', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmulz(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffmaz', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') */ - /* search2208_0_0_0_0 -> 81 in the cache */ - /* search2208_0_0_0_1 -> 82 in the cache */ - /* search2208_0_0_0 -> 101 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 101 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 110 }, - 1, - } }, - /* search2208_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 111, 84 }, - -1, - } }, - - /* replace2208_0_0_0 -> 81 in the cache */ - /* replace2208_0_0 -> 93 in the cache */ - /* replace2208_0 -> 99 in the cache */ - /* replace2208_1_0 -> 82 in the cache */ - /* replace2208_1 -> 94 in the cache */ - /* replace2208_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 99, 94, 84 }, - -1, - } }, - - /* ('~fadd@64', ('fmul(is_only_used_by_fadd)', 'a', 'b'), 'c') => ('ffma', 'a', 'b', 'c') */ - { .variable = { - { nir_search_value_variable, 64 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 64 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 114, 115 }, - 1, - } }, - { .variable = { - { nir_search_value_variable, 64 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 116, 117 }, - -1, - } }, - - /* replace2209_0 -> 114 in the cache */ - /* replace2209_1 -> 115 in the cache */ - /* replace2209_2 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 114, 115, 117 }, - -1, - } }, - - /* ('~fadd@64', ('fneg(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fneg', 'a'), 'b', 'c') */ - /* search2210_0_0_0 -> 114 in the cache */ - /* search2210_0_0_1 -> 115 in the cache */ - /* search2210_0_0 -> 116 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 116 }, - 1, - } }, - /* search2210_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 120, 117 }, - -1, - } }, - - /* replace2210_0_0 -> 114 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 114 }, - -1, - } }, - /* replace2210_1 -> 115 in the cache */ - /* replace2210_2 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 122, 115, 117 }, - -1, - } }, - - /* ('~fadd@64', ('fabs(is_only_used_by_fadd)', ('fmul(is_only_used_by_fadd)', 'a', 'b')), 'c') => ('ffma', ('fabs', 'a'), ('fabs', 'b'), 'c') */ - /* search2211_0_0_0 -> 114 in the cache */ - /* search2211_0_0_1 -> 115 in the cache */ - /* search2211_0_0 -> 116 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 116 }, - 1, - } }, - /* search2211_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 124, 117 }, - -1, - } }, - - /* replace2211_0_0 -> 114 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 114 }, - -1, - } }, - /* replace2211_1_0 -> 115 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 115 }, - -1, - } }, - /* replace2211_2 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 126, 127, 117 }, - -1, - } }, - - /* ('~fadd@64', ('fneg(is_only_used_by_fadd)', ('fabs', ('fmul(is_only_used_by_fadd)', 'a', 'b'))), 'c') => ('ffma', ('fneg', ('fabs', 'a')), ('fabs', 'b'), 'c') */ - /* search2212_0_0_0_0 -> 114 in the cache */ - /* search2212_0_0_0_1 -> 115 in the cache */ - /* search2212_0_0_0 -> 116 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 116 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 129 }, - 1, - } }, - /* search2212_1 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 130, 117 }, - -1, - } }, - - /* replace2212_0_0_0 -> 114 in the cache */ - /* replace2212_0_0 -> 126 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 126 }, - -1, - } }, - /* replace2212_1_0 -> 115 in the cache */ - /* replace2212_1 -> 127 in the cache */ - /* replace2212_2 -> 117 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 132, 127, 117 }, - -1, - } }, - - /* ('fadd@8', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') */ - { .variable = { - { nir_search_value_variable, 8 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 8 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 135 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 134, 136 }, - -1, - } }, - - /* replace2213_0 -> 134 in the cache */ - /* replace2213_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 134, 135 }, - -1, - } }, - - /* ('fadd@16', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') */ - /* search2214_0 -> 61 in the cache */ - /* search2214_1_0 -> 62 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 62 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 61, 139 }, - -1, - } }, - - /* replace2214_0 -> 61 in the cache */ - /* replace2214_1 -> 62 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 61, 62 }, - -1, - } }, - - /* ('fadd@32', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') */ - /* search2215_0 -> 81 in the cache */ - /* search2215_1_0 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 82 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 81, 142 }, - -1, - } }, - - /* replace2215_0 -> 81 in the cache */ - /* replace2215_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 81, 82 }, - -1, - } }, - - /* ('fadd@64', 'a', ('fneg', 'b')) => ('fsub', 'a', 'b') */ - /* search2216_0 -> 114 in the cache */ - /* search2216_1_0 -> 115 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 115 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 114, 145 }, - -1, - } }, - - /* replace2216_0 -> 114 in the cache */ - /* replace2216_1 -> 115 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fsub, - -1, 0, - { 114, 115 }, - -1, - } }, - - /* ('fneg', 'a') => ('fmul', 'a', -1.0) */ - /* search2217_0 -> 42 in the cache */ - /* search2217 -> 59 in the cache */ - - /* replace2217_0 -> 42 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 42, 148 }, - -1, - } }, - - /* ('iadd', 'a', ('ineg', 'b')) => ('isub', 'a', 'b') */ - /* search2218_0 -> 0 in the cache */ - /* search2218_1_0 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 1 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 0, 150 }, - -1, - } }, - - /* replace2218_0 -> 0 in the cache */ - /* replace2218_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* ('ineg', 'a') => ('isub', 0, 'a') */ - /* search2219_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 42 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - /* replace2219_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 154, 42 }, - -1, - } }, - - /* ('iabs', 'a') => ('imax', 'a', ('ineg', 'a')) */ - /* search2220_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iabs, - -1, 0, - { 42 }, - -1, - } }, - - /* replace2220_0 -> 42 in the cache */ - /* replace2220_1_0 -> 42 in the cache */ - /* replace2220_1 -> 153 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_imax, - 0, 1, - { 42, 153 }, - -1, - } }, - - /* ('iadd', ('iadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)') => ('iadd3', 'a', 'b', 'c') */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - false, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 1, 1, - { 158, 159 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - false, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 2, - { 160, 161 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd3, - 0, 1, - { 163, 164, 165 }, - -1, - } }, - - /* ('iadd', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)') => ('iadd3', 'a', ('ineg', 'b'), 'c') */ - /* search2222_0_0 -> 158 in the cache */ - /* search2222_0_1 -> 159 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 158, 159 }, - 0, - } }, - /* search2222_1 -> 161 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 167, 161 }, - -1, - } }, - - /* replace2222_0 -> 163 in the cache */ - /* replace2222_1_0 -> 164 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 164 }, - -1, - } }, - /* replace2222_2 -> 165 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd3, - 0, 1, - { 163, 169, 165 }, - -1, - } }, - - /* ('isub', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)') => ('iadd3', 'a', ('ineg', 'b'), ('ineg', 'c')) */ - /* search2223_0_0 -> 158 in the cache */ - /* search2223_0_1 -> 159 in the cache */ - /* search2223_0 -> 167 in the cache */ - /* search2223_1 -> 161 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_isub, - -1, 0, - { 167, 161 }, - -1, - } }, - - /* replace2223_0 -> 163 in the cache */ - /* replace2223_1_0 -> 164 in the cache */ - /* replace2223_1 -> 169 in the cache */ - /* replace2223_2_0 -> 165 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 165 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_iadd3, - 0, 1, - { 163, 169, 172 }, - -1, - } }, - - /* ('vec2(is_only_used_as_float)', ('fneg@16', 'a'), 'b') => ('fmul', ('vec2', 'a', 'b'), ('vec2', -1.0, 1.0)) */ - /* search2224_0_0 -> 61 in the cache */ - /* search2224_0 -> 69 in the cache */ - /* search2224_1 -> 62 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 69, 62 }, - 2, - } }, - - /* replace2224_0_0 -> 61 in the cache */ - /* replace2224_0_1 -> 62 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 61, 62 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 176, 177 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 175, 178 }, - -1, - } }, - - /* ('vec2(is_only_used_as_float)', 'a', ('fneg@16', 'b')) => ('fmul', ('vec2', 'a', 'b'), ('vec2', 1.0, -1.0)) */ - /* search2225_0 -> 61 in the cache */ - /* search2225_1_0 -> 62 in the cache */ - /* search2225_1 -> 139 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 61, 139 }, - 2, - } }, - - /* replace2225_0_0 -> 61 in the cache */ - /* replace2225_0_1 -> 62 in the cache */ - /* replace2225_0 -> 175 in the cache */ - /* replace2225_1_0 -> 177 in the cache */ - /* replace2225_1_1 -> 176 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_vec2, - -1, 0, - { 177, 176 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 175, 181 }, - -1, - } }, - - /* ('flt', '#b(is_gt_0_and_lt_1)', ('fsat(is_used_once)', 'a')) => ('flt', 'b', 'a') */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* b */ - true, - nir_type_invalid, - 2, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 184 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 183, 185 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* replace2226_1 -> 184 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 187, 184 }, - -1, - } }, - - /* ('fge', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fge', 'a', 'b') */ - /* search2227_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 0 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - true, - nir_type_invalid, - 2, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 189, 190 }, - -1, - } }, - - /* replace2227_0 -> 0 in the cache */ - /* replace2227_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* ('feq', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('feq', 'a', 'b') */ - /* search2228_0_0 -> 0 in the cache */ - /* search2228_0 -> 189 in the cache */ - /* search2228_1 -> 190 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 189, 190 }, - -1, - } }, - - /* replace2228_0 -> 0 in the cache */ - /* replace2228_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* ('fneu', ('fsat(is_used_once)', 'a'), '#b(is_gt_0_and_lt_1)') => ('fneu', 'a', 'b') */ - /* search2229_0_0 -> 0 in the cache */ - /* search2229_0 -> 189 in the cache */ - /* search2229_1 -> 190 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 189, 190 }, - -1, - } }, - - /* replace2229_0 -> 0 in the cache */ - /* replace2229_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* ('fge', ('fsat(is_used_once)', 'a'), 1.0) => ('fge', 'a', 1.0) */ - /* search2230_0_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 42 }, - 0, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 197, 198 }, - -1, - } }, - - /* replace2230_0 -> 42 in the cache */ - /* replace2230_1 -> 198 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 42, 198 }, - -1, - } }, - - /* ('~fge', ('fmin(is_used_once)', ('fadd(is_used_once)', 'a', 'b'), ('fadd', 'c', 'd')), 0.0) => ('iand', ('fge', 'a', ('fneg', 'b')), ('fge', 'c', ('fneg', 'd'))) */ - { .variable = { - { nir_search_value_variable, -4 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 201, 202 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -4 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 204, 205 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fmin, - 0, 3, - { 203, 206 }, - 0, - } }, - { .constant = { - { nir_search_value_constant, -4 }, - nir_type_float, { 0x0 /* 0.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 3, - { 207, 208 }, - -1, - } }, - - /* replace2231_0_0 -> 201 in the cache */ - /* replace2231_0_1_0 -> 202 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 202 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 201, 210 }, - -1, - } }, - /* replace2231_1_0 -> 204 in the cache */ - /* replace2231_1_1_0 -> 205 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 205 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 204, 212 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 211, 213 }, - -1, - } }, - - /* ('flt', ('fneg', 'a'), ('fneg', 'b')) => ('flt', 'b', 'a') */ - /* search2232_0_0 -> 0 in the cache */ - /* search2232_0 -> 9 in the cache */ - /* search2232_1_0 -> 1 in the cache */ - /* search2232_1 -> 5 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 9, 5 }, - -1, - } }, - - /* replace2232_0 -> 1 in the cache */ - /* replace2232_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 1, 0 }, - -1, - } }, - - /* ('fge', ('fneg', 'a'), ('fneg', 'b')) => ('fge', 'b', 'a') */ - /* search2233_0_0 -> 0 in the cache */ - /* search2233_0 -> 9 in the cache */ - /* search2233_1_0 -> 1 in the cache */ - /* search2233_1 -> 5 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 9, 5 }, - -1, - } }, - - /* replace2233_0 -> 1 in the cache */ - /* replace2233_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 1, 0 }, - -1, - } }, - - /* ('feq', ('fneg', 'a'), ('fneg', 'b')) => ('feq', 'b', 'a') */ - /* search2234_0_0 -> 0 in the cache */ - /* search2234_0 -> 9 in the cache */ - /* search2234_1_0 -> 1 in the cache */ - /* search2234_1 -> 5 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 9, 5 }, - -1, - } }, - - /* replace2234_0 -> 1 in the cache */ - /* replace2234_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 1, 0 }, - -1, - } }, - - /* ('fneu', ('fneg', 'a'), ('fneg', 'b')) => ('fneu', 'b', 'a') */ - /* search2235_0_0 -> 0 in the cache */ - /* search2235_0 -> 9 in the cache */ - /* search2235_1_0 -> 1 in the cache */ - /* search2235_1 -> 5 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 9, 5 }, - -1, - } }, - - /* replace2235_0 -> 1 in the cache */ - /* replace2235_1 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 1, 0 }, - -1, - } }, - - /* ('flt', ('fneg', 'a'), -1.0) => ('flt', 1.0, 'a') */ - /* search2236_0_0 -> 42 in the cache */ - /* search2236_0 -> 59 in the cache */ - /* search2236_1 -> 148 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 59, 148 }, - -1, - } }, - - /* replace2236_0 -> 198 in the cache */ - /* replace2236_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 198, 42 }, - -1, - } }, - - /* ('flt', -1.0, ('fneg', 'a')) => ('flt', 'a', 1.0) */ - /* search2237_0 -> 148 in the cache */ - /* search2237_1_0 -> 42 in the cache */ - /* search2237_1 -> 59 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 148, 59 }, - -1, - } }, - - /* replace2237_0 -> 42 in the cache */ - /* replace2237_1 -> 198 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 42, 198 }, - -1, - } }, - - /* ('fge', ('fneg', 'a'), -1.0) => ('fge', 1.0, 'a') */ - /* search2238_0_0 -> 42 in the cache */ - /* search2238_0 -> 59 in the cache */ - /* search2238_1 -> 148 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 59, 148 }, - -1, - } }, - - /* replace2238_0 -> 198 in the cache */ - /* replace2238_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 198, 42 }, - -1, - } }, - - /* ('fge', -1.0, ('fneg', 'a')) => ('fge', 'a', 1.0) */ - /* search2239_0 -> 148 in the cache */ - /* search2239_1_0 -> 42 in the cache */ - /* search2239_1 -> 59 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 148, 59 }, - -1, - } }, - - /* replace2239_0 -> 42 in the cache */ - /* replace2239_1 -> 198 in the cache */ - /* replace2239 -> 200 in the cache */ - - /* ('fneu', ('fneg', 'a'), -1.0) => ('fneu', 1.0, 'a') */ - /* search2240_0_0 -> 42 in the cache */ - /* search2240_0 -> 59 in the cache */ - /* search2240_1 -> 148 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 59, 148 }, - -1, - } }, - - /* replace2240_0 -> 198 in the cache */ - /* replace2240_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 198, 42 }, - -1, - } }, - - /* ('feq', -1.0, ('fneg', 'a')) => ('feq', 'a', 1.0) */ - /* search2241_0 -> 148 in the cache */ - /* search2241_1_0 -> 42 in the cache */ - /* search2241_1 -> 59 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 148, 59 }, - -1, - } }, - - /* replace2241_0 -> 42 in the cache */ - /* replace2241_1 -> 198 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 42, 198 }, - -1, - } }, - - /* ('ior', 'a', 'a') => a */ - /* search2242_0 -> 42 in the cache */ - /* search2242_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ior, - -1, 0, - { 42, 42 }, - -1, - } }, - - /* replace2242 -> 42 in the cache */ - - /* ('iand', 'a', 'a') => a */ - /* search2243_0 -> 42 in the cache */ - /* search2243_1 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_iand, - -1, 0, - { 42, 42 }, - -1, - } }, - - /* replace2243 -> 42 in the cache */ - - /* ('~fadd', ('fneg(is_used_once)', ('fsat(is_used_once)', 'a(is_not_fmul)')), 1.0) => ('fsat', ('fadd', 1.0, ('fneg', 'a'))) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 3, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 236 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 237 }, - 0, - } }, - /* search2244_1 -> 198 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - true, - false, - false, - nir_op_fadd, - 0, 1, - { 238, 198 }, - -1, - } }, - - /* replace2244_0_0 -> 198 in the cache */ - /* replace2244_0_1_0 -> 42 in the cache */ - /* replace2244_0_1 -> 59 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 198, 59 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsat, - -1, 1, - { 240 }, - -1, - } }, - - /* ('fdot2', 'a', 'b') => ('fdot2_replicated', 'a', 'b') */ - /* search2245_0 -> 0 in the cache */ - /* search2245_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* replace2245_0 -> 0 in the cache */ - /* replace2245_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2_replicated, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* ('fdot3', 'a', 'b') => ('fdot3_replicated', 'a', 'b') */ - /* search2246_0 -> 0 in the cache */ - /* search2246_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* replace2246_0 -> 0 in the cache */ - /* replace2246_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3_replicated, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* ('fdot4', 'a', 'b') => ('fdot4_replicated', 'a', 'b') */ - /* search2247_0 -> 0 in the cache */ - /* search2247_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* replace2247_0 -> 0 in the cache */ - /* replace2247_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4_replicated, - 0, 1, - { 0, 1 }, - -1, - } }, - - /* ('fdph', 'a', 'b') => ('fdph_replicated', 'a', 'b') */ - /* search2248_0 -> 0 in the cache */ - /* search2248_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdph, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* replace2248_0 -> 0 in the cache */ - /* replace2248_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdph_replicated, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* ('~flrp', ('fadd(is_used_once)', 'a', 'b'), ('fadd(is_used_once)', 'a', 'c'), 'd') => ('fadd', ('flrp', 'b', 'c', 'd'), 'a') */ - /* search2249_0_0 -> 201 in the cache */ - /* search2249_0_1 -> 202 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 201, 202 }, - 0, - } }, - /* search2249_1_0 -> 201 in the cache */ - /* search2249_1_1 -> 204 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 201, 204 }, - 0, - } }, - /* search2249_2 -> 205 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - true, - false, - false, - nir_op_flrp, - -1, 2, - { 250, 251, 205 }, - -1, - } }, - - /* replace2249_0_0 -> 202 in the cache */ - /* replace2249_0_1 -> 204 in the cache */ - /* replace2249_0_2 -> 205 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 202, 204, 205 }, - -1, - } }, - /* replace2249_1 -> 201 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 253, 201 }, - -1, - } }, - - /* ('fround_even', 'a') => ('bcsel', ('feq', ('ffract', 'a'), 0.5), ('fadd', ('ffloor', ('fadd', 'a', 0.5)), 1.0), ('ffloor', ('fadd', 'a', 0.5))) */ - /* search2250_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fround_even, - -1, 0, - { 42 }, - -1, - } }, - - /* replace2250_0_0_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffract, - -1, 0, - { 42 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x3fe0000000000000 /* 0.5 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 256, 257 }, - -1, - } }, - /* replace2250_1_0_0_0 -> 42 in the cache */ - /* replace2250_1_0_0_1 -> 257 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 42, 257 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffloor, - -1, 1, - { 259 }, - -1, - } }, - /* replace2250_1_1 -> 198 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 1, 2, - { 260, 198 }, - -1, - } }, - /* replace2250_2_0_0 -> 42 in the cache */ - /* replace2250_2_0_1 -> 257 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fadd, - 3, 1, - { 42, 257 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ffloor, - -1, 1, - { 262 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_bcsel, - -1, 4, - { 258, 261, 263 }, - -1, - } }, - - /* ('~ffma@32', 'a', 2.0, -1.0) => ('flrp', -1.0, 1.0, 'a') */ - /* search2251_0 -> 81 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x4000000000000000 /* 2.0 */ }, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 81, 265, 266 }, - -1, - } }, - - /* replace2251_0 -> 266 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - /* replace2251_2 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 266, 268, 81 }, - -1, - } }, - - /* ('~ffma@32', 'a', -2.0, -1.0) => ('flrp', -1.0, 1.0, ('fneg', 'a')) */ - /* search2252_0 -> 81 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_float, { 0xc000000000000000 /* -2.0 */ }, - } }, - /* search2252_2 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 81, 270, 266 }, - -1, - } }, - - /* replace2252_0 -> 266 in the cache */ - /* replace2252_1 -> 268 in the cache */ - /* replace2252_2_0 -> 81 in the cache */ - /* replace2252_2 -> 89 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 266, 268, 89 }, - -1, - } }, - - /* ('~ffma@32', 'a', -2.0, 1.0) => ('flrp', 1.0, -1.0, 'a') */ - /* search2253_0 -> 81 in the cache */ - /* search2253_1 -> 270 in the cache */ - /* search2253_2 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 81, 270, 268 }, - -1, - } }, - - /* replace2253_0 -> 268 in the cache */ - /* replace2253_1 -> 266 in the cache */ - /* replace2253_2 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 268, 266, 81 }, - -1, - } }, - - /* ('~ffma@32', 'a', 2.0, 1.0) => ('flrp', 1.0, -1.0, ('fneg', 'a')) */ - /* search2254_0 -> 81 in the cache */ - /* search2254_1 -> 265 in the cache */ - /* search2254_2 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 81, 265, 268 }, - -1, - } }, - - /* replace2254_0 -> 268 in the cache */ - /* replace2254_1 -> 266 in the cache */ - /* replace2254_2_0 -> 81 in the cache */ - /* replace2254_2 -> 89 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 268, 266, 89 }, - -1, - } }, - - /* ('~fadd@32', ('fmul(is_used_once)', 2.0, 'a'), -1.0) => ('flrp', -1.0, 1.0, 'a') */ - /* search2255_0_0 -> 265 in the cache */ - /* search2255_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 265, 81 }, - 0, - } }, - /* search2255_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 277, 266 }, - -1, - } }, - - /* replace2255_0 -> 266 in the cache */ - /* replace2255_1 -> 268 in the cache */ - /* replace2255_2 -> 81 in the cache */ - /* replace2255 -> 269 in the cache */ - - /* ('~fadd@32', ('fmul(is_used_once)', -2.0, 'a'), -1.0) => ('flrp', -1.0, 1.0, ('fneg', 'a')) */ - /* search2256_0_0 -> 270 in the cache */ - /* search2256_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 270, 81 }, - 0, - } }, - /* search2256_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 279, 266 }, - -1, - } }, - - /* replace2256_0 -> 266 in the cache */ - /* replace2256_1 -> 268 in the cache */ - /* replace2256_2_0 -> 81 in the cache */ - /* replace2256_2 -> 89 in the cache */ - /* replace2256 -> 272 in the cache */ - - /* ('~fadd@32', ('fmul(is_used_once)', -2.0, 'a'), 1.0) => ('flrp', 1.0, -1.0, 'a') */ - /* search2257_0_0 -> 270 in the cache */ - /* search2257_0_1 -> 81 in the cache */ - /* search2257_0 -> 279 in the cache */ - /* search2257_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 279, 268 }, - -1, - } }, - - /* replace2257_0 -> 268 in the cache */ - /* replace2257_1 -> 266 in the cache */ - /* replace2257_2 -> 81 in the cache */ - /* replace2257 -> 274 in the cache */ - - /* ('~fadd@32', ('fmul(is_used_once)', 2.0, 'a'), 1.0) => ('flrp', 1.0, -1.0, ('fneg', 'a')) */ - /* search2258_0_0 -> 265 in the cache */ - /* search2258_0_1 -> 81 in the cache */ - /* search2258_0 -> 277 in the cache */ - /* search2258_1 -> 268 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 2, - { 277, 268 }, - -1, - } }, - - /* replace2258_0 -> 268 in the cache */ - /* replace2258_1 -> 266 in the cache */ - /* replace2258_2_0 -> 81 in the cache */ - /* replace2258_2 -> 89 in the cache */ - /* replace2258 -> 276 in the cache */ - - /* ('~ffma@32', ('fadd', 'b', ('fneg', 'a')), 'a', 'a') => ('flrp', 'a', 'b', 'a') */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 284 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 283, 285 }, - -1, - } }, - /* search2259_1 -> 284 in the cache */ - /* search2259_2 -> 284 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 286, 284, 284 }, - -1, - } }, - - /* replace2259_0 -> 284 in the cache */ - /* replace2259_1 -> 283 in the cache */ - /* replace2259_2 -> 284 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 284, 283, 284 }, - -1, - } }, - - /* ('~ffma@32', 'a', 2.0, ('fneg', ('fmul', 'a', 'a'))) => ('flrp', 'a', 1.0, 'a') */ - /* search2260_0 -> 81 in the cache */ - /* search2260_1 -> 265 in the cache */ - /* search2260_2_0_0 -> 81 in the cache */ - /* search2260_2_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - -1, 0, - { 81, 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 289 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 1, - { 81, 265, 290 }, - -1, - } }, - - /* replace2260_0 -> 81 in the cache */ - /* replace2260_1 -> 268 in the cache */ - /* replace2260_2 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 81, 268, 81 }, - -1, - } }, - - /* ('~ffma@32', 'a', 2.0, ('fmul', ('fneg', 'a'), 'a')) => ('flrp', 'a', 1.0, 'a') */ - /* search2261_0 -> 81 in the cache */ - /* search2261_1 -> 265 in the cache */ - /* search2261_2_0_0 -> 81 in the cache */ - /* search2261_2_0 -> 89 in the cache */ - /* search2261_2_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 89, 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 81, 265, 293 }, - -1, - } }, - - /* replace2261_0 -> 81 in the cache */ - /* replace2261_1 -> 268 in the cache */ - /* replace2261_2 -> 81 in the cache */ - /* replace2261 -> 292 in the cache */ - - /* ('~ffma@32', 'a', ('fneg', 'a'), ('fmul', 2.0, 'a')) => ('flrp', 'a', 1.0, 'a') */ - /* search2262_0 -> 81 in the cache */ - /* search2262_1_0 -> 81 in the cache */ - /* search2262_1 -> 89 in the cache */ - /* search2262_2_0 -> 265 in the cache */ - /* search2262_2_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 1, - { 265, 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_ffma, - 0, 2, - { 81, 89, 295 }, - -1, - } }, - - /* replace2262_0 -> 81 in the cache */ - /* replace2262_1 -> 268 in the cache */ - /* replace2262_2 -> 81 in the cache */ - /* replace2262 -> 292 in the cache */ - - /* ('~fmul@32', 'a', ('fadd', 2.0, ('fneg', 'a'))) => ('flrp', 'a', 1.0, 'a') */ - /* search2263_0 -> 81 in the cache */ - /* search2263_1_0 -> 265 in the cache */ - /* search2263_1_1_0 -> 81 in the cache */ - /* search2263_1_1 -> 89 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 265, 89 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fmul, - 0, 2, - { 81, 297 }, - -1, - } }, - - /* replace2263_0 -> 81 in the cache */ - /* replace2263_1 -> 268 in the cache */ - /* replace2263_2 -> 81 in the cache */ - /* replace2263 -> 292 in the cache */ - - /* ('fmin', ('fadd(is_used_once)', '#c', 'a'), ('fadd(is_used_once)', '#c', 'b')) => ('fadd', 'c', ('fmin', 'a', 'b')) */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 299, 300 }, - 0, - } }, - /* search2264_1_0 -> 299 in the cache */ - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 299, 302 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 0, 3, - { 301, 303 }, - -1, - } }, - - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* replace2264_1_0 -> 300 in the cache */ - /* replace2264_1_1 -> 302 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmin, - 1, 1, - { 300, 302 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 305, 306 }, - -1, - } }, - - /* ('fmax', ('fadd(is_used_once)', '#c', 'a'), ('fadd(is_used_once)', '#c', 'b')) => ('fadd', 'c', ('fmax', 'a', 'b')) */ - /* search2265_0_0 -> 299 in the cache */ - /* search2265_0_1 -> 300 in the cache */ - /* search2265_0 -> 301 in the cache */ - /* search2265_1_0 -> 299 in the cache */ - /* search2265_1_1 -> 302 in the cache */ - /* search2265_1 -> 303 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 0, 3, - { 301, 303 }, - -1, - } }, - - /* replace2265_0 -> 305 in the cache */ - /* replace2265_1_0 -> 300 in the cache */ - /* replace2265_1_1 -> 302 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fmax, - 1, 1, - { 300, 302 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fadd, - 0, 2, - { 305, 309 }, - -1, - } }, - - /* ('bcsel', ('feq', ('fsqrt', 'a(is_not_negative)'), 0.0), 3.4028234663852886e+38, ('frsq', 'a')) => ('fmin', ('frsq', 'a'), 3.4028234663852886e+38) */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - 4, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 311 }, - -1, - } }, - /* search2266_0_1 -> 43 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 312, 43 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x47efffffe0000000 /* 3.4028234663852886e+38 */ }, - } }, - /* search2266_2_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_frsq, - -1, 0, - { 42 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_bcsel, - -1, 1, - { 313, 314, 315 }, - -1, - } }, - - /* replace2266_0_0 -> 42 in the cache */ - /* replace2266_0 -> 315 in the cache */ - /* replace2266_1 -> 314 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 315, 314 }, - -1, - } }, - - /* ('~fadd', ('ffma(is_used_once)', 'a', 'b', ('ffma', 'c', 'd', ('fmul(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)'))), 'g(is_not_const)') => ('ffma', 'a', 'b', ('ffma', 'c', 'd', ('ffma', 'e', 'f', 'g'))) */ - { .variable = { - { nir_search_value_variable, -7 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 4, /* e */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 5, /* f */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_fmul, - 3, 1, - { 322, 323 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 2, 2, - { 320, 321, 324 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 1, 3, - { 318, 319, 325 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 6, /* g */ - false, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 326, 327 }, - -1, - } }, - - /* replace2267_0 -> 318 in the cache */ - /* replace2267_1 -> 319 in the cache */ - /* replace2267_2_0 -> 320 in the cache */ - /* replace2267_2_1 -> 321 in the cache */ - { .variable = { - { nir_search_value_variable, -7 }, - 4, /* e */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 5, /* f */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -7 }, - 6, /* g */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 2, 1, - { 329, 330, 331 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 1, 2, - { 320, 321, 332 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 0, 3, - { 318, 319, 333 }, - -1, - } }, - - /* ('~fadd', ('ffma(is_used_once)', 'a', 'b', ('fmul(is_used_once)', 'c(is_not_const_and_not_fsign)', 'd(is_not_const_and_not_fsign)')), 'e(is_not_const)') => ('ffma', 'a', 'b', ('ffma', 'c', 'd', 'e')) */ - { .variable = { - { nir_search_value_variable, -5 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 2, /* c */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 3, /* d */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 337, 338 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 1, 2, - { 335, 336, 339 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 4, /* e */ - false, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 340, 341 }, - -1, - } }, - - /* replace2268_0 -> 335 in the cache */ - /* replace2268_1 -> 336 in the cache */ - { .variable = { - { nir_search_value_variable, -5 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, -5 }, - 4, /* e */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 343, 344, 345 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 0, 2, - { 335, 336, 346 }, - -1, - } }, - - /* ('~fadd', ('fneg', ('ffma(is_used_once)', 'a', 'b', ('ffma', 'c', 'd', ('fmul(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)')))), 'g(is_not_const)') => ('ffma', ('fneg', 'a'), 'b', ('ffma', ('fneg', 'c'), 'd', ('ffma', ('fneg', 'e'), 'f', 'g'))) */ - /* search2269_0_0_0 -> 318 in the cache */ - /* search2269_0_0_1 -> 319 in the cache */ - /* search2269_0_0_2_0 -> 320 in the cache */ - /* search2269_0_0_2_1 -> 321 in the cache */ - /* search2269_0_0_2_2_0 -> 322 in the cache */ - /* search2269_0_0_2_2_1 -> 323 in the cache */ - /* search2269_0_0_2_2 -> 324 in the cache */ - /* search2269_0_0_2 -> 325 in the cache */ - /* search2269_0_0 -> 326 in the cache */ - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_fneg, - -1, 3, - { 326 }, - -1, - } }, - /* search2269_1 -> 327 in the cache */ - { .expression = { - { nir_search_value_expression, -7 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 348, 327 }, - -1, - } }, - - /* replace2269_0_0 -> 318 in the cache */ - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 318 }, - -1, - } }, - /* replace2269_1 -> 319 in the cache */ - /* replace2269_2_0_0 -> 320 in the cache */ - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 320 }, - -1, - } }, - /* replace2269_2_1 -> 321 in the cache */ - /* replace2269_2_2_0_0 -> 329 in the cache */ - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 329 }, - -1, - } }, - /* replace2269_2_2_1 -> 330 in the cache */ - /* replace2269_2_2_2 -> 331 in the cache */ - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 2, 1, - { 352, 330, 331 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 1, 2, - { 351, 321, 353 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -7 }, - false, - false, - false, - nir_op_ffma, - 0, 3, - { 350, 319, 354 }, - -1, - } }, - - /* ('~fadd', ('ffmaz(is_used_once)', 'a', 'b', ('ffmaz', 'c', 'd', ('fmulz(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)'))), 'g(is_not_const)') => ('ffmaz', 'a', 'b', ('ffmaz', 'c', 'd', ('ffmaz', 'e', 'f', 'g'))) */ - /* search2270_0_0 -> 81 in the cache */ - /* search2270_0_1 -> 82 in the cache */ - /* search2270_0_2_0 -> 84 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 3, /* d */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 4, /* e */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 5, /* f */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 3, 1, - { 357, 358 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 2, 2, - { 84, 356, 359 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 3, - { 81, 82, 360 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 6, /* g */ - false, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 361, 362 }, - -1, - } }, - - /* replace2270_0 -> 81 in the cache */ - /* replace2270_1 -> 82 in the cache */ - /* replace2270_2_0 -> 84 in the cache */ - /* replace2270_2_1 -> 356 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 4, /* e */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 5, /* f */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 6, /* g */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 2, 1, - { 364, 365, 366 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 2, - { 84, 356, 367 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 3, - { 81, 82, 368 }, - -1, - } }, - - /* ('~fadd', ('ffmaz(is_used_once)', 'a', 'b', ('fmulz(is_used_once)', 'c(is_not_const_and_not_fsign)', 'd(is_not_const_and_not_fsign)')), 'e(is_not_const)') => ('ffmaz', 'a', 'b', ('ffmaz', 'c', 'd', 'e')) */ - /* search2271_0_0 -> 81 in the cache */ - /* search2271_0_1 -> 82 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 3, /* d */ - false, - nir_type_invalid, - 5, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmulz, - 2, 1, - { 370, 371 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 2, - { 81, 82, 372 }, - 0, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 4, /* e */ - false, - nir_type_invalid, - 1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 373, 374 }, - -1, - } }, - - /* replace2271_0 -> 81 in the cache */ - /* replace2271_1 -> 82 in the cache */ - /* replace2271_2_0 -> 84 in the cache */ - /* replace2271_2_1 -> 356 in the cache */ - /* replace2271_2_2 -> 364 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 84, 356, 364 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 2, - { 81, 82, 376 }, - -1, - } }, - - /* ('~fadd', ('fneg', ('ffmaz(is_used_once)', 'a', 'b', ('ffmaz', 'c', 'd', ('fmulz(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)')))), 'g(is_not_const)') => ('ffmaz', ('fneg', 'a'), 'b', ('ffmaz', ('fneg', 'c'), 'd', ('ffmaz', ('fneg', 'e'), 'f', 'g'))) */ - /* search2272_0_0_0 -> 81 in the cache */ - /* search2272_0_0_1 -> 82 in the cache */ - /* search2272_0_0_2_0 -> 84 in the cache */ - /* search2272_0_0_2_1 -> 356 in the cache */ - /* search2272_0_0_2_2_0 -> 357 in the cache */ - /* search2272_0_0_2_2_1 -> 358 in the cache */ - /* search2272_0_0_2_2 -> 359 in the cache */ - /* search2272_0_0_2 -> 360 in the cache */ - /* search2272_0_0 -> 361 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 3, - { 361 }, - -1, - } }, - /* search2272_1 -> 362 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 4, - { 378, 362 }, - -1, - } }, - - /* replace2272_0_0 -> 81 in the cache */ - /* replace2272_0 -> 89 in the cache */ - /* replace2272_1 -> 82 in the cache */ - /* replace2272_2_0_0 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 84 }, - -1, - } }, - /* replace2272_2_1 -> 356 in the cache */ - /* replace2272_2_2_0_0 -> 364 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 364 }, - -1, - } }, - /* replace2272_2_2_1 -> 365 in the cache */ - /* replace2272_2_2_2 -> 366 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 2, 1, - { 381, 365, 366 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 2, - { 380, 356, 382 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 3, - { 89, 82, 383 }, - -1, - } }, - - /* ('ubfe', 'a', 'b', 0) => 0 */ - /* search2273_0 -> 81 in the cache */ - /* search2273_1 -> 82 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 81, 82, 385 }, - -1, - } }, - - /* replace2273 -> 385 in the cache */ - - /* ('ibfe', 'a', 'b', 0) => 0 */ - /* search2274_0 -> 81 in the cache */ - /* search2274_1 -> 82 in the cache */ - /* search2274_2 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 81, 82, 385 }, - -1, - } }, - - /* replace2274 -> 385 in the cache */ - - /* ('ubfe', 'a', '#b', '#c') => ('iand', ('ushr', 4294967295, ('ineg', 'c')), ('ushr', 'a', 'b')) */ - /* search2275_0 -> 81 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 1, /* b */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .variable = { - { nir_search_value_variable, 32 }, - 2, /* c */ - true, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ubfe, - -1, 0, - { 81, 388, 389 }, - -1, - } }, - - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xffffffff /* 4294967295 */ }, - } }, - /* replace2275_0_1_0 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 0, - { 84 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 391, 392 }, - -1, - } }, - /* replace2275_1_0 -> 81 in the cache */ - /* replace2275_1_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 81, 82 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 393, 394 }, - -1, - } }, - - /* ('ibfe', 'a', '#b', '#c') => ('ishr', ('ishl', 'a', ('ineg', ('iadd', 'b', 'c'))), ('ineg', 'c')) */ - /* search2276_0 -> 81 in the cache */ - /* search2276_1 -> 388 in the cache */ - /* search2276_2 -> 389 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ibfe, - -1, 0, - { 81, 388, 389 }, - -1, - } }, - - /* replace2276_0_0 -> 81 in the cache */ - /* replace2276_0_1_0_0 -> 82 in the cache */ - /* replace2276_0_1_0_1 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iadd, - 0, 1, - { 82, 84 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ineg, - -1, 1, - { 397 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 1, - { 81, 398 }, - -1, - } }, - /* replace2276_1_0 -> 84 in the cache */ - /* replace2276_1 -> 392 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishr, - -1, 1, - { 399, 392 }, - -1, - } }, - - /* ('ishl', 'a', 0) => a */ - /* search2277_0 -> 42 in the cache */ - /* search2277_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 42, 385 }, - -1, - } }, - - /* replace2277 -> 42 in the cache */ - - /* ('ishl', 'a', -32) => a */ - /* search2278_0 -> 42 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { -0x20 /* -32 */ }, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 42, 402 }, - -1, - } }, - - /* replace2278 -> 42 in the cache */ - - /* ('ishr', 'a', 0) => a */ - /* search2279_0 -> 42 in the cache */ - /* search2279_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 42, 385 }, - -1, - } }, - - /* replace2279 -> 42 in the cache */ - - /* ('ishr', 'a', -32) => a */ - /* search2280_0 -> 42 in the cache */ - /* search2280_1 -> 402 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ishr, - -1, 0, - { 42, 402 }, - -1, - } }, - - /* replace2280 -> 42 in the cache */ - - /* ('ushr', 'a', 0) => a */ - /* search2281_0 -> 42 in the cache */ - /* search2281_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_ushr, - -1, 0, - { 42, 385 }, - -1, - } }, - - /* replace2281 -> 42 in the cache */ - - /* ('extract_i8', ('extract_i8', 'a', 'b'), 0) => ('extract_i8', 'a', 'b') */ - /* search2282_0_0 -> 0 in the cache */ - /* search2282_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 0, 1 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, -2 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 407, 408 }, - -1, - } }, - - /* replace2282_0 -> 0 in the cache */ - /* replace2282_1 -> 1 in the cache */ - /* replace2282 -> 407 in the cache */ - - /* ('extract_i8', ('extract_u8', 'a', 'b'), 0) => ('extract_i8', 'a', 'b') */ - /* search2283_0_0 -> 0 in the cache */ - /* search2283_0_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 0, 1 }, - -1, - } }, - /* search2283_1 -> 408 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 410, 408 }, - -1, - } }, - - /* replace2283_0 -> 0 in the cache */ - /* replace2283_1 -> 1 in the cache */ - /* replace2283 -> 407 in the cache */ - - /* ('extract_u8', ('extract_i8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') */ - /* search2284_0_0 -> 0 in the cache */ - /* search2284_0_1 -> 1 in the cache */ - /* search2284_0 -> 407 in the cache */ - /* search2284_1 -> 408 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 407, 408 }, - -1, - } }, - - /* replace2284_0 -> 0 in the cache */ - /* replace2284_1 -> 1 in the cache */ - /* replace2284 -> 410 in the cache */ - - /* ('extract_u8', ('extract_u8', 'a', 'b'), 0) => ('extract_u8', 'a', 'b') */ - /* search2285_0_0 -> 0 in the cache */ - /* search2285_0_1 -> 1 in the cache */ - /* search2285_0 -> 410 in the cache */ - /* search2285_1 -> 408 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 410, 408 }, - -1, - } }, - - /* replace2285_0 -> 0 in the cache */ - /* replace2285_1 -> 1 in the cache */ - /* replace2285 -> 410 in the cache */ - - /* ('u2u16', ('u2u8', 'a@16')) => ('extract_u8', 'a', 0) */ - /* search2286_0_0 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 61 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 414 }, - -1, - } }, - - /* replace2286_0 -> 61 in the cache */ - { .constant = { - { nir_search_value_constant, 16 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 61, 416 }, - -1, - } }, - - /* ('u2u16', ('i2i8', 'a@16')) => ('extract_u8', 'a', 0) */ - /* search2287_0_0 -> 61 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 61 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 418 }, - -1, - } }, - - /* replace2287_0 -> 61 in the cache */ - /* replace2287_1 -> 416 in the cache */ - /* replace2287 -> 417 in the cache */ - - /* ('i2i16', ('u2u8', 'a@16')) => ('extract_i8', 'a', 0) */ - /* search2288_0_0 -> 61 in the cache */ - /* search2288_0 -> 414 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 414 }, - -1, - } }, - - /* replace2288_0 -> 61 in the cache */ - /* replace2288_1 -> 416 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 61, 416 }, - -1, - } }, - - /* ('i2i16', ('i2i8', 'a@16')) => ('extract_i8', 'a', 0) */ - /* search2289_0_0 -> 61 in the cache */ - /* search2289_0 -> 418 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 418 }, - -1, - } }, - - /* replace2289_0 -> 61 in the cache */ - /* replace2289_1 -> 416 in the cache */ - /* replace2289 -> 421 in the cache */ - - /* ('u2u32', ('u2u8', 'a@32')) => ('extract_u8', 'a', 0) */ - /* search2290_0_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_u2u8, - -1, 0, - { 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 423 }, - -1, - } }, - - /* replace2290_0 -> 81 in the cache */ - /* replace2290_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 81, 385 }, - -1, - } }, - - /* ('u2u32', ('i2i8', 'a@32')) => ('extract_u8', 'a', 0) */ - /* search2291_0_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_i2i8, - -1, 0, - { 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 426 }, - -1, - } }, - - /* replace2291_0 -> 81 in the cache */ - /* replace2291_1 -> 385 in the cache */ - /* replace2291 -> 425 in the cache */ - - /* ('u2u32', ('u2u16', 'a@32')) => ('extract_u16', 'a', 0) */ - /* search2292_0_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2u16, - -1, 0, - { 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 428 }, - -1, - } }, - - /* replace2292_0 -> 81 in the cache */ - /* replace2292_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 81, 385 }, - -1, - } }, - - /* ('u2u32', ('i2i16', 'a@32')) => ('extract_u16', 'a', 0) */ - /* search2293_0_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2i16, - -1, 0, - { 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_u2u32, - -1, 0, - { 431 }, - -1, - } }, - - /* replace2293_0 -> 81 in the cache */ - /* replace2293_1 -> 385 in the cache */ - /* replace2293 -> 430 in the cache */ - - /* ('i2i32', ('u2u8', 'a@32')) => ('extract_i8', 'a', 0) */ - /* search2294_0_0 -> 81 in the cache */ - /* search2294_0 -> 423 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 423 }, - -1, - } }, - - /* replace2294_0 -> 81 in the cache */ - /* replace2294_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i8, - -1, 0, - { 81, 385 }, - -1, - } }, - - /* ('i2i32', ('i2i8', 'a@32')) => ('extract_i8', 'a', 0) */ - /* search2295_0_0 -> 81 in the cache */ - /* search2295_0 -> 426 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 426 }, - -1, - } }, - - /* replace2295_0 -> 81 in the cache */ - /* replace2295_1 -> 385 in the cache */ - /* replace2295 -> 434 in the cache */ - - /* ('i2i32', ('u2u16', 'a@32')) => ('extract_i16', 'a', 0) */ - /* search2296_0_0 -> 81 in the cache */ - /* search2296_0 -> 428 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 428 }, - -1, - } }, - - /* replace2296_0 -> 81 in the cache */ - /* replace2296_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_extract_i16, - -1, 0, - { 81, 385 }, - -1, - } }, - - /* ('i2i32', ('i2i16', 'a@32')) => ('extract_i16', 'a', 0) */ - /* search2297_0_0 -> 81 in the cache */ - /* search2297_0 -> 431 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i2i32, - -1, 0, - { 431 }, - -1, - } }, - - /* replace2297_0 -> 81 in the cache */ - /* replace2297_1 -> 385 in the cache */ - /* replace2297 -> 437 in the cache */ - - /* ('ishl', ('extract_u8', 'a@32', 0), 8) => ('insert_u8', 'a', 1) */ - /* search2298_0_0 -> 81 in the cache */ - /* search2298_0_1 -> 385 in the cache */ - /* search2298_0 -> 425 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x8 /* 8 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 425, 439 }, - -1, - } }, - - /* replace2298_0 -> 81 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x1 /* 1 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_insert_u8, - -1, 0, - { 81, 441 }, - -1, - } }, - - /* ('ishl', ('extract_u8', 'a@32', 0), 16) => ('insert_u8', 'a', 2) */ - /* search2299_0_0 -> 81 in the cache */ - /* search2299_0_1 -> 385 in the cache */ - /* search2299_0 -> 425 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x10 /* 16 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 425, 443 }, - -1, - } }, - - /* replace2299_0 -> 81 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x2 /* 2 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_insert_u8, - -1, 0, - { 81, 445 }, - -1, - } }, - - /* ('ishl', ('extract_u8', 'a@32', 0), 24) => ('insert_u8', 'a', 3) */ - /* search2300_0_0 -> 81 in the cache */ - /* search2300_0_1 -> 385 in the cache */ - /* search2300_0 -> 425 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x18 /* 24 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 425, 447 }, - -1, - } }, - - /* replace2300_0 -> 81 in the cache */ - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0x3 /* 3 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_insert_u8, - -1, 0, - { 81, 449 }, - -1, - } }, - - /* ('iand', ('ishl', 'a@32', 8), 65280) => ('insert_u8', 'a', 1) */ - /* search2301_0_0 -> 81 in the cache */ - /* search2301_0_1 -> 439 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 81, 439 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xff00 /* 65280 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 451, 452 }, - -1, - } }, - - /* replace2301_0 -> 81 in the cache */ - /* replace2301_1 -> 441 in the cache */ - /* replace2301 -> 442 in the cache */ - - /* ('iand', ('ishl', 'a@32', 16), 16711680) => ('insert_u8', 'a', 2) */ - /* search2302_0_0 -> 81 in the cache */ - /* search2302_0_1 -> 443 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 81, 443 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xff0000 /* 16711680 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 454, 455 }, - -1, - } }, - - /* replace2302_0 -> 81 in the cache */ - /* replace2302_1 -> 445 in the cache */ - /* replace2302 -> 446 in the cache */ - - /* ('iand', ('ishl', 'a@32', 24), 4278190080) => ('insert_u8', 'a', 3) */ - /* search2303_0_0 -> 81 in the cache */ - /* search2303_0_1 -> 447 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ishl, - -1, 0, - { 81, 447 }, - -1, - } }, - { .constant = { - { nir_search_value_constant, 32 }, - nir_type_int, { 0xff000000 /* 4278190080 */ }, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_iand, - 0, 1, - { 457, 458 }, - -1, - } }, - - /* replace2303_0 -> 81 in the cache */ - /* replace2303_1 -> 449 in the cache */ - /* replace2303 -> 450 in the cache */ - - /* ('ishl', 'a@32', 24) => ('insert_u8', 'a', 3) */ - /* search2304_0 -> 81 in the cache */ - /* search2304_1 -> 447 in the cache */ - /* search2304 -> 457 in the cache */ - - /* replace2304_0 -> 81 in the cache */ - /* replace2304_1 -> 449 in the cache */ - /* replace2304 -> 450 in the cache */ - - /* ('ishl', 'a@32', 16) => ('insert_u16', 'a', 1) */ - /* search2305_0 -> 81 in the cache */ - /* search2305_1 -> 443 in the cache */ - /* search2305 -> 454 in the cache */ - - /* replace2305_0 -> 81 in the cache */ - /* replace2305_1 -> 441 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_insert_u16, - -1, 0, - { 81, 441 }, - -1, - } }, - - /* ('insert_u8', ('extract_u8', 'a', 0), 'b') => ('insert_u8', 'a', 'b') */ - /* search2306_0_0 -> 0 in the cache */ - /* search2306_0_1 -> 408 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u8, - -1, 0, - { 0, 408 }, - -1, - } }, - /* search2306_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_insert_u8, - -1, 0, - { 461, 1 }, - -1, - } }, - - /* replace2306_0 -> 0 in the cache */ - /* replace2306_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_insert_u8, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* ('insert_u16', ('extract_u16', 'a', 0), 'b') => ('insert_u16', 'a', 'b') */ - /* search2307_0_0 -> 0 in the cache */ - /* search2307_0_1 -> 408 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_extract_u16, - -1, 0, - { 0, 408 }, - -1, - } }, - /* search2307_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_insert_u16, - -1, 0, - { 464, 1 }, - -1, - } }, - - /* replace2307_0 -> 0 in the cache */ - /* replace2307_1 -> 1 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_insert_u16, - -1, 0, - { 0, 1 }, - -1, - } }, - - /* ('iand', ('ine(is_used_once)', 'a@8', 0), ('ine', 'b@8', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search2308_0_0 -> 134 in the cache */ - { .constant = { - { nir_search_value_constant, 8 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 134, 467 }, - 0, - } }, - /* search2308_1_0 -> 135 in the cache */ - /* search2308_1_1 -> 467 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 135, 467 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 468, 469 }, - -1, - } }, - - /* replace2308_0_0 -> 134 in the cache */ - /* replace2308_0_1 -> 135 in the cache */ - { .expression = { - { nir_search_value_expression, 8 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 134, 135 }, - -1, - } }, - /* replace2308_1 -> 467 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 471, 467 }, - -1, - } }, - - /* ('ior', ('ieq(is_used_once)', 'a@8', 0), ('ieq', 'b@8', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search2309_0_0 -> 134 in the cache */ - /* search2309_0_1 -> 467 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 134, 467 }, - 0, - } }, - /* search2309_1_0 -> 135 in the cache */ - /* search2309_1_1 -> 467 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 135, 467 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 473, 474 }, - -1, - } }, - - /* replace2309_0_0 -> 134 in the cache */ - /* replace2309_0_1 -> 135 in the cache */ - /* replace2309_0 -> 471 in the cache */ - /* replace2309_1 -> 467 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 471, 467 }, - -1, - } }, - - /* ('iand', ('ine(is_used_once)', 'a@16', 0), ('ine', 'b@16', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search2310_0_0 -> 61 in the cache */ - /* search2310_0_1 -> 416 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 61, 416 }, - 0, - } }, - /* search2310_1_0 -> 62 in the cache */ - /* search2310_1_1 -> 416 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 62, 416 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 477, 478 }, - -1, - } }, - - /* replace2310_0_0 -> 61 in the cache */ - /* replace2310_0_1 -> 62 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 61, 62 }, - -1, - } }, - /* replace2310_1 -> 416 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 480, 416 }, - -1, - } }, - - /* ('ior', ('ieq(is_used_once)', 'a@16', 0), ('ieq', 'b@16', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search2311_0_0 -> 61 in the cache */ - /* search2311_0_1 -> 416 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 61, 416 }, - 0, - } }, - /* search2311_1_0 -> 62 in the cache */ - /* search2311_1_1 -> 416 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 62, 416 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 482, 483 }, - -1, - } }, - - /* replace2311_0_0 -> 61 in the cache */ - /* replace2311_0_1 -> 62 in the cache */ - /* replace2311_0 -> 480 in the cache */ - /* replace2311_1 -> 416 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 480, 416 }, - -1, - } }, - - /* ('iand', ('ine(is_used_once)', 'a@32', 0), ('ine', 'b@32', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search2312_0_0 -> 81 in the cache */ - /* search2312_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 81, 385 }, - 0, - } }, - /* search2312_1_0 -> 82 in the cache */ - /* search2312_1_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 82, 385 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 486, 487 }, - -1, - } }, - - /* replace2312_0_0 -> 81 in the cache */ - /* replace2312_0_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 81, 82 }, - -1, - } }, - /* replace2312_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 489, 385 }, - -1, - } }, - - /* ('ior', ('ieq(is_used_once)', 'a@32', 0), ('ieq', 'b@32', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search2313_0_0 -> 81 in the cache */ - /* search2313_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 81, 385 }, - 0, - } }, - /* search2313_1_0 -> 82 in the cache */ - /* search2313_1_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 82, 385 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 491, 492 }, - -1, - } }, - - /* replace2313_0_0 -> 81 in the cache */ - /* replace2313_0_1 -> 82 in the cache */ - /* replace2313_0 -> 489 in the cache */ - /* replace2313_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 489, 385 }, - -1, - } }, - - /* ('iand', ('ine(is_used_once)', 'a@64', 0), ('ine', 'b@64', 0)) => ('ine', ('umin', 'a', 'b'), 0) */ - /* search2314_0_0 -> 114 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_int, { 0x0 /* 0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 1, 1, - { 114, 495 }, - 0, - } }, - /* search2314_1_0 -> 115 in the cache */ - /* search2314_1_1 -> 495 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 2, 1, - { 115, 495 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_iand, - 0, 3, - { 496, 497 }, - -1, - } }, - - /* replace2314_0_0 -> 114 in the cache */ - /* replace2314_0_1 -> 115 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_umin, - 1, 1, - { 114, 115 }, - -1, - } }, - /* replace2314_1 -> 495 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ine, - 0, 2, - { 499, 495 }, - -1, - } }, - - /* ('ior', ('ieq(is_used_once)', 'a@64', 0), ('ieq', 'b@64', 0)) => ('ieq', ('umin', 'a', 'b'), 0) */ - /* search2315_0_0 -> 114 in the cache */ - /* search2315_0_1 -> 495 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 1, 1, - { 114, 495 }, - 0, - } }, - /* search2315_1_0 -> 115 in the cache */ - /* search2315_1_1 -> 495 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 2, 1, - { 115, 495 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 3, - { 501, 502 }, - -1, - } }, - - /* replace2315_0_0 -> 114 in the cache */ - /* replace2315_0_1 -> 115 in the cache */ - /* replace2315_0 -> 499 in the cache */ - /* replace2315_1 -> 495 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ieq, - 0, 2, - { 499, 495 }, - -1, - } }, - - /* ('~fadd@16', 1.0, ('fmul(is_used_once)', 'c', ('fadd', 'b', -1.0))) => ('fadd', ('fadd', 1.0, ('fneg', 'c')), ('fmul', 'b', 'c')) */ - /* search2316_0 -> 177 in the cache */ - { .variable = { - { nir_search_value_variable, 16 }, - 0, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2316_1_1_0 -> 62 in the cache */ - /* search2316_1_1_1 -> 176 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 62, 176 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 505, 506 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 177, 507 }, - -1, - } }, - - /* replace2316_0_0 -> 177 in the cache */ - /* replace2316_0_1_0 -> 505 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 505 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 177, 509 }, - -1, - } }, - /* replace2316_1_0 -> 62 in the cache */ - /* replace2316_1_1 -> 505 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 62, 505 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 3, - { 510, 511 }, - -1, - } }, - - /* ('bcsel', 'a', 0, ('b2f16', ('inot', 'b@bool'))) => ('b2f16', ('inot', ('ior', 'a', 'b'))) */ - { .variable = { - { nir_search_value_variable, 1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2317_1 -> 416 in the cache */ - { .variable = { - { nir_search_value_variable, 1 }, - 1, /* b */ - false, - nir_type_bool, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 0, - { 514 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2f16, - -1, 0, - { 515 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 416, 516 }, - -1, - } }, - - /* replace2317_0_0_0 -> 513 in the cache */ - { .variable = { - { nir_search_value_variable, 1 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ior, - 0, 1, - { 513, 518 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_inot, - -1, 1, - { 519 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_b2f16, - -1, 1, - { 520 }, - -1, - } }, - - /* ('~fadd@32', 1.0, ('fmul(is_used_once)', 'c', ('fadd', 'b', -1.0))) => ('fadd', ('fadd', 1.0, ('fneg', 'c')), ('fmul', 'b', 'c')) */ - /* search2318_0 -> 268 in the cache */ - { .variable = { - { nir_search_value_variable, 32 }, - 0, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2318_1_1_0 -> 82 in the cache */ - /* search2318_1_1_1 -> 266 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 82, 266 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 522, 523 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 268, 524 }, - -1, - } }, - - /* replace2318_0_0 -> 268 in the cache */ - /* replace2318_0_1_0 -> 522 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 522 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 268, 526 }, - -1, - } }, - /* replace2318_1_0 -> 82 in the cache */ - /* replace2318_1_1 -> 522 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 82, 522 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 3, - { 527, 528 }, - -1, - } }, - - /* ('bcsel', 'a', 0, ('b2f32', ('inot', 'b@bool'))) => ('b2f32', ('inot', ('ior', 'a', 'b'))) */ - /* search2319_0 -> 513 in the cache */ - /* search2319_1 -> 385 in the cache */ - /* search2319_2_0_0 -> 514 in the cache */ - /* search2319_2_0 -> 515 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2f32, - -1, 0, - { 515 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 385, 530 }, - -1, - } }, - - /* replace2319_0_0_0 -> 513 in the cache */ - /* replace2319_0_0_1 -> 518 in the cache */ - /* replace2319_0_0 -> 519 in the cache */ - /* replace2319_0 -> 520 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_b2f32, - -1, 1, - { 520 }, - -1, - } }, - - /* ('~fadd@64', 1.0, ('fmul(is_used_once)', 'c', ('fadd', 'b', -1.0))) => ('fadd', ('fadd', 1.0, ('fneg', 'c')), ('fmul', 'b', 'c')) */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_float, { 0x3ff0000000000000 /* 1.0 */ }, - } }, - { .variable = { - { nir_search_value_variable, 64 }, - 0, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - /* search2320_1_1_0 -> 115 in the cache */ - { .constant = { - { nir_search_value_constant, 64 }, - nir_type_float, { 0xbff0000000000000 /* -1.0 */ }, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 2, 1, - { 115, 535 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 1, 2, - { 534, 536 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - true, - false, - false, - nir_op_fadd, - 0, 3, - { 533, 537 }, - -1, - } }, - - /* replace2320_0_0 -> 533 in the cache */ - /* replace2320_0_1_0 -> 534 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 534 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 533, 539 }, - -1, - } }, - /* replace2320_1_0 -> 115 in the cache */ - /* replace2320_1_1 -> 534 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fmul, - 2, 1, - { 115, 534 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_fadd, - 0, 3, - { 540, 541 }, - -1, - } }, - - /* ('bcsel', 'a', 0, ('b2f64', ('inot', 'b@bool'))) => ('b2f64', ('inot', ('ior', 'a', 'b'))) */ - /* search2321_0 -> 513 in the cache */ - /* search2321_1 -> 495 in the cache */ - /* search2321_2_0_0 -> 514 in the cache */ - /* search2321_2_0 -> 515 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2f64, - -1, 0, - { 515 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 495, 543 }, - -1, - } }, - - /* replace2321_0_0_0 -> 513 in the cache */ - /* replace2321_0_0_1 -> 518 in the cache */ - /* replace2321_0_0 -> 519 in the cache */ - /* replace2321_0 -> 520 in the cache */ - { .expression = { - { nir_search_value_expression, 64 }, - false, - false, - false, - nir_op_b2f64, - -1, 1, - { 520 }, - -1, - } }, - - /* ('bcsel', 'a', ('fadd(is_used_once)', 'b', 'c'), ('fadd', 'b', 'd')) => ('fadd', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2322_0 -> 513 in the cache */ - /* search2322_1_0 -> 202 in the cache */ - /* search2322_1_1 -> 204 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 202, 204 }, - 0, - } }, - /* search2322_2_0 -> 202 in the cache */ - /* search2322_2_1 -> 205 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 202, 205 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 546, 547 }, - -1, - } }, - - /* replace2322_0 -> 202 in the cache */ - /* replace2322_1_0 -> 513 in the cache */ - /* replace2322_1_1 -> 204 in the cache */ - /* replace2322_1_2 -> 205 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 204, 205 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 202, 549 }, - -1, - } }, - - /* ('bcsel', 'a', ('fadd', 'b', 'c'), ('fadd(is_used_once)', 'b', 'd')) => ('fadd', 'b', ('bcsel', 'a', 'c', 'd')) */ - /* search2323_0 -> 513 in the cache */ - /* search2323_1_0 -> 202 in the cache */ - /* search2323_1_1 -> 204 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 202, 204 }, - -1, - } }, - /* search2323_2_0 -> 202 in the cache */ - /* search2323_2_1 -> 205 in the cache */ - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_fadd, - 1, 1, - { 202, 205 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -4 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 551, 552 }, - -1, - } }, - - /* replace2323_0 -> 202 in the cache */ - /* replace2323_1_0 -> 513 in the cache */ - /* replace2323_1_1 -> 204 in the cache */ - /* replace2323_1_2 -> 205 in the cache */ - /* replace2323_1 -> 549 in the cache */ - /* replace2323 -> 550 in the cache */ - - /* ('bcsel', 'a', ('ffma(is_used_once)', 'b', 'c', 'd'), ('ffma', 'b', 'c', 'e')) => ('ffma', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search2324_0 -> 513 in the cache */ - /* search2324_1_0 -> 336 in the cache */ - /* search2324_1_1 -> 343 in the cache */ - /* search2324_1_2 -> 344 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 336, 343, 344 }, - 0, - } }, - /* search2324_2_0 -> 336 in the cache */ - /* search2324_2_1 -> 343 in the cache */ - /* search2324_2_2 -> 345 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 336, 343, 345 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 554, 555 }, - -1, - } }, - - /* replace2324_0 -> 336 in the cache */ - /* replace2324_1 -> 343 in the cache */ - /* replace2324_2_0 -> 513 in the cache */ - /* replace2324_2_1 -> 344 in the cache */ - /* replace2324_2_2 -> 345 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 344, 345 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 336, 343, 557 }, - -1, - } }, - - /* ('bcsel', 'a', ('ffma', 'b', 'c', 'd'), ('ffma(is_used_once)', 'b', 'c', 'e')) => ('ffma', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search2325_0 -> 513 in the cache */ - /* search2325_1_0 -> 336 in the cache */ - /* search2325_1_1 -> 343 in the cache */ - /* search2325_1_2 -> 344 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 336, 343, 344 }, - -1, - } }, - /* search2325_2_0 -> 336 in the cache */ - /* search2325_2_1 -> 343 in the cache */ - /* search2325_2_2 -> 345 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 336, 343, 345 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 559, 560 }, - -1, - } }, - - /* replace2325_0 -> 336 in the cache */ - /* replace2325_1 -> 343 in the cache */ - /* replace2325_2_0 -> 513 in the cache */ - /* replace2325_2_1 -> 344 in the cache */ - /* replace2325_2_2 -> 345 in the cache */ - /* replace2325_2 -> 557 in the cache */ - /* replace2325 -> 558 in the cache */ - - /* ('bcsel', 'a', ('ffma(is_used_once)', 'b', 'c', 'd'), ('ffma', 'b', 'e', 'd')) => ('ffma', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search2326_0 -> 513 in the cache */ - /* search2326_1_0 -> 336 in the cache */ - /* search2326_1_1 -> 343 in the cache */ - /* search2326_1_2 -> 344 in the cache */ - /* search2326_1 -> 554 in the cache */ - /* search2326_2_0 -> 336 in the cache */ - /* search2326_2_1 -> 345 in the cache */ - /* search2326_2_2 -> 344 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 336, 345, 344 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 554, 562 }, - -1, - } }, - - /* replace2326_0 -> 336 in the cache */ - /* replace2326_1_0 -> 513 in the cache */ - /* replace2326_1_1 -> 343 in the cache */ - /* replace2326_1_2 -> 345 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 343, 345 }, - -1, - } }, - /* replace2326_2 -> 344 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 336, 564, 344 }, - -1, - } }, - - /* ('bcsel', 'a', ('ffma', 'b', 'c', 'd'), ('ffma(is_used_once)', 'b', 'e', 'd')) => ('ffma', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search2327_0 -> 513 in the cache */ - /* search2327_1_0 -> 336 in the cache */ - /* search2327_1_1 -> 343 in the cache */ - /* search2327_1_2 -> 344 in the cache */ - /* search2327_1 -> 559 in the cache */ - /* search2327_2_0 -> 336 in the cache */ - /* search2327_2_1 -> 345 in the cache */ - /* search2327_2_2 -> 344 in the cache */ - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_ffma, - 1, 1, - { 336, 345, 344 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -5 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 559, 566 }, - -1, - } }, - - /* replace2327_0 -> 336 in the cache */ - /* replace2327_1_0 -> 513 in the cache */ - /* replace2327_1_1 -> 343 in the cache */ - /* replace2327_1_2 -> 345 in the cache */ - /* replace2327_1 -> 564 in the cache */ - /* replace2327_2 -> 344 in the cache */ - /* replace2327 -> 565 in the cache */ - - /* ('bcsel', 'a', ('ffmaz(is_used_once)', 'b', 'c', 'd'), ('ffmaz', 'b', 'c', 'e')) => ('ffmaz', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search2328_0 -> 513 in the cache */ - /* search2328_1_0 -> 82 in the cache */ - /* search2328_1_1 -> 84 in the cache */ - /* search2328_1_2 -> 356 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 82, 84, 356 }, - 0, - } }, - /* search2328_2_0 -> 82 in the cache */ - /* search2328_2_1 -> 84 in the cache */ - /* search2328_2_2 -> 364 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 82, 84, 364 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 568, 569 }, - -1, - } }, - - /* replace2328_0 -> 82 in the cache */ - /* replace2328_1 -> 84 in the cache */ - /* replace2328_2_0 -> 513 in the cache */ - /* replace2328_2_1 -> 356 in the cache */ - /* replace2328_2_2 -> 364 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 356, 364 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 82, 84, 571 }, - -1, - } }, - - /* ('bcsel', 'a', ('ffmaz', 'b', 'c', 'd'), ('ffmaz(is_used_once)', 'b', 'c', 'e')) => ('ffmaz', 'b', 'c', ('bcsel', 'a', 'd', 'e')) */ - /* search2329_0 -> 513 in the cache */ - /* search2329_1_0 -> 82 in the cache */ - /* search2329_1_1 -> 84 in the cache */ - /* search2329_1_2 -> 356 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 82, 84, 356 }, - -1, - } }, - /* search2329_2_0 -> 82 in the cache */ - /* search2329_2_1 -> 84 in the cache */ - /* search2329_2_2 -> 364 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 82, 84, 364 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 573, 574 }, - -1, - } }, - - /* replace2329_0 -> 82 in the cache */ - /* replace2329_1 -> 84 in the cache */ - /* replace2329_2_0 -> 513 in the cache */ - /* replace2329_2_1 -> 356 in the cache */ - /* replace2329_2_2 -> 364 in the cache */ - /* replace2329_2 -> 571 in the cache */ - /* replace2329 -> 572 in the cache */ - - /* ('bcsel', 'a', ('ffmaz(is_used_once)', 'b', 'c', 'd'), ('ffmaz', 'b', 'e', 'd')) => ('ffmaz', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search2330_0 -> 513 in the cache */ - /* search2330_1_0 -> 82 in the cache */ - /* search2330_1_1 -> 84 in the cache */ - /* search2330_1_2 -> 356 in the cache */ - /* search2330_1 -> 568 in the cache */ - /* search2330_2_0 -> 82 in the cache */ - /* search2330_2_1 -> 364 in the cache */ - /* search2330_2_2 -> 356 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 82, 364, 356 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 568, 576 }, - -1, - } }, - - /* replace2330_0 -> 82 in the cache */ - /* replace2330_1_0 -> 513 in the cache */ - /* replace2330_1_1 -> 84 in the cache */ - /* replace2330_1_2 -> 364 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 513, 84, 364 }, - -1, - } }, - /* replace2330_2 -> 356 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 0, 1, - { 82, 578, 356 }, - -1, - } }, - - /* ('bcsel', 'a', ('ffmaz', 'b', 'c', 'd'), ('ffmaz(is_used_once)', 'b', 'e', 'd')) => ('ffmaz', 'b', ('bcsel', 'a', 'c', 'e'), 'd') */ - /* search2331_0 -> 513 in the cache */ - /* search2331_1_0 -> 82 in the cache */ - /* search2331_1_1 -> 84 in the cache */ - /* search2331_1_2 -> 356 in the cache */ - /* search2331_1 -> 573 in the cache */ - /* search2331_2_0 -> 82 in the cache */ - /* search2331_2_1 -> 364 in the cache */ - /* search2331_2_2 -> 356 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffmaz, - 1, 1, - { 82, 364, 356 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 2, - { 513, 573, 580 }, - -1, - } }, - - /* replace2331_0 -> 82 in the cache */ - /* replace2331_1_0 -> 513 in the cache */ - /* replace2331_1_1 -> 84 in the cache */ - /* replace2331_1_2 -> 364 in the cache */ - /* replace2331_1 -> 578 in the cache */ - /* replace2331_2 -> 356 in the cache */ - /* replace2331 -> 579 in the cache */ - - /* ('~f2f32', ('fabs', ('f2fmp', 'a'))) => ('fabs', 'a') */ - /* search2332_0_0_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 81 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 583 }, - -1, - } }, - - /* replace2332_0 -> 81 in the cache */ - /* replace2332 -> 93 in the cache */ - - /* ('~f2f32', ('fceil', ('f2fmp', 'a'))) => ('fceil', 'a') */ - /* search2333_0_0_0 -> 81 in the cache */ - /* search2333_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fceil, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 585 }, - -1, - } }, - - /* replace2333_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fceil, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fcos', ('f2fmp', 'a'))) => ('fcos', 'a') */ - /* search2334_0_0_0 -> 81 in the cache */ - /* search2334_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fcos, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 588 }, - -1, - } }, - - /* replace2334_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcos, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fexp2', ('f2fmp', 'a'))) => ('fexp2', 'a') */ - /* search2335_0_0_0 -> 81 in the cache */ - /* search2335_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 591 }, - -1, - } }, - - /* replace2335_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fexp2, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('ffloor', ('f2fmp', 'a'))) => ('ffloor', 'a') */ - /* search2336_0_0_0 -> 81 in the cache */ - /* search2336_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 594 }, - -1, - } }, - - /* replace2336_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffloor, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('ffract', ('f2fmp', 'a'))) => ('ffract', 'a') */ - /* search2337_0_0_0 -> 81 in the cache */ - /* search2337_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffract, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 597 }, - -1, - } }, - - /* replace2337_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_ffract, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('flog2', ('f2fmp', 'a'))) => ('flog2', 'a') */ - /* search2338_0_0_0 -> 81 in the cache */ - /* search2338_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 600 }, - -1, - } }, - - /* replace2338_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flog2, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fneg', ('f2fmp', 'a'))) => ('fneg', 'a') */ - /* search2339_0_0_0 -> 81 in the cache */ - /* search2339_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 603 }, - -1, - } }, - - /* replace2339_0 -> 81 in the cache */ - /* replace2339 -> 89 in the cache */ - - /* ('~f2f32', ('frcp', ('f2fmp', 'a'))) => ('frcp', 'a') */ - /* search2340_0_0_0 -> 81 in the cache */ - /* search2340_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 605 }, - -1, - } }, - - /* replace2340_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_frcp, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fround_even', ('f2fmp', 'a'))) => ('fround_even', 'a') */ - /* search2341_0_0_0 -> 81 in the cache */ - /* search2341_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fround_even, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 608 }, - -1, - } }, - - /* replace2341_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fround_even, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('frsq', ('f2fmp', 'a'))) => ('frsq', 'a') */ - /* search2342_0_0_0 -> 81 in the cache */ - /* search2342_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_frsq, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 611 }, - -1, - } }, - - /* replace2342_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_frsq, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fsat', ('f2fmp', 'a'))) => ('fsat', 'a') */ - /* search2343_0_0_0 -> 81 in the cache */ - /* search2343_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 614 }, - -1, - } }, - - /* replace2343_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsat, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fsign', ('f2fmp', 'a'))) => ('fsign', 'a') */ - /* search2344_0_0_0 -> 81 in the cache */ - /* search2344_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 617 }, - -1, - } }, - - /* replace2344_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fsin', ('f2fmp', 'a'))) => ('fsin', 'a') */ - /* search2345_0_0_0 -> 81 in the cache */ - /* search2345_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsin, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 620 }, - -1, - } }, - - /* replace2345_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsin, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fsqrt', ('f2fmp', 'a'))) => ('fsqrt', 'a') */ - /* search2346_0_0_0 -> 81 in the cache */ - /* search2346_0_0 -> 582 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 582 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 623 }, - -1, - } }, - - /* replace2346_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fsqrt, - -1, 0, - { 81 }, - -1, - } }, - - /* ('~f2f32', ('fadd', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fadd', 'a', 'b') */ - /* search2347_0_0_0 -> 81 in the cache */ - /* search2347_0_0 -> 582 in the cache */ - /* search2347_0_1_0 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 82 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 1, - { 627 }, - -1, - } }, - - /* replace2347_0 -> 81 in the cache */ - /* replace2347_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('fdiv', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fdiv', 'a', 'b') */ - /* search2348_0_0_0 -> 81 in the cache */ - /* search2348_0_0 -> 582 in the cache */ - /* search2348_0_1_0 -> 82 in the cache */ - /* search2348_0_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fdiv, - -1, 0, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 630 }, - -1, - } }, - - /* replace2348_0 -> 81 in the cache */ - /* replace2348_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fdiv, - -1, 0, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('fmax', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmax', 'a', 'b') */ - /* search2349_0_0_0 -> 81 in the cache */ - /* search2349_0_0 -> 582 in the cache */ - /* search2349_0_1_0 -> 82 in the cache */ - /* search2349_0_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 1, - { 633 }, - -1, - } }, - - /* replace2349_0 -> 81 in the cache */ - /* replace2349_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('fmin', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmin', 'a', 'b') */ - /* search2350_0_0_0 -> 81 in the cache */ - /* search2350_0_0 -> 582 in the cache */ - /* search2350_0_1_0 -> 82 in the cache */ - /* search2350_0_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 1, - { 636 }, - -1, - } }, - - /* replace2350_0 -> 81 in the cache */ - /* replace2350_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('fmod', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmod', 'a', 'b') */ - /* search2351_0_0_0 -> 81 in the cache */ - /* search2351_0_0 -> 582 in the cache */ - /* search2351_0_1_0 -> 82 in the cache */ - /* search2351_0_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmod, - -1, 0, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 639 }, - -1, - } }, - - /* replace2351_0 -> 81 in the cache */ - /* replace2351_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmod, - -1, 0, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('fmul', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fmul', 'a', 'b') */ - /* search2352_0_0_0 -> 81 in the cache */ - /* search2352_0_0 -> 582 in the cache */ - /* search2352_0_1_0 -> 82 in the cache */ - /* search2352_0_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 1, - { 642 }, - -1, - } }, - - /* replace2352_0 -> 81 in the cache */ - /* replace2352_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('fpow', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('fpow', 'a', 'b') */ - /* search2353_0_0_0 -> 81 in the cache */ - /* search2353_0_0 -> 582 in the cache */ - /* search2353_0_1_0 -> 82 in the cache */ - /* search2353_0_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 645 }, - -1, - } }, - - /* replace2353_0 -> 81 in the cache */ - /* replace2353_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fpow, - -1, 0, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('frem', ('f2fmp', 'a'), ('f2fmp', 'b'))) => ('frem', 'a', 'b') */ - /* search2354_0_0_0 -> 81 in the cache */ - /* search2354_0_0 -> 582 in the cache */ - /* search2354_0_1_0 -> 82 in the cache */ - /* search2354_0_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_frem, - -1, 0, - { 582, 626 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 648 }, - -1, - } }, - - /* replace2354_0 -> 81 in the cache */ - /* replace2354_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_frem, - -1, 0, - { 81, 82 }, - -1, - } }, - - /* ('~f2f32', ('ffma', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c'))) => ('ffma', 'a', 'b', 'c') */ - /* search2355_0_0_0 -> 81 in the cache */ - /* search2355_0_0 -> 582 in the cache */ - /* search2355_0_1_0 -> 82 in the cache */ - /* search2355_0_1 -> 626 in the cache */ - /* search2355_0_2_0 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2fmp, - -1, 0, - { 84 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 582, 626, 651 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 1, - { 652 }, - -1, - } }, - - /* replace2355_0 -> 81 in the cache */ - /* replace2355_1 -> 82 in the cache */ - /* replace2355_2 -> 84 in the cache */ - /* replace2355 -> 86 in the cache */ - - /* ('~f2f32', ('flrp', ('f2fmp', 'a'), ('f2fmp', 'b'), ('f2fmp', 'c'))) => ('flrp', 'a', 'b', 'c') */ - /* search2356_0_0_0 -> 81 in the cache */ - /* search2356_0_0 -> 582 in the cache */ - /* search2356_0_1_0 -> 82 in the cache */ - /* search2356_0_1 -> 626 in the cache */ - /* search2356_0_2_0 -> 84 in the cache */ - /* search2356_0_2 -> 651 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 582, 626, 651 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, 32 }, - true, - false, - false, - nir_op_f2f32, - -1, 0, - { 654 }, - -1, - } }, - - /* replace2356_0 -> 81 in the cache */ - /* replace2356_1 -> 82 in the cache */ - /* replace2356_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 81, 82, 84 }, - -1, - } }, - - /* ('~feq', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('feq', 'a', 'b') */ - /* search2357_0_0 -> 81 in the cache */ - /* search2357_0 -> 582 in the cache */ - /* search2357_1_0 -> 82 in the cache */ - /* search2357_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_feq, - 0, 1, - { 582, 626 }, - -1, - } }, - - /* replace2357_0 -> 81 in the cache */ - /* replace2357_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_feq, - 0, 1, - { 81, 82 }, - -1, - } }, - - /* ('~fge', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('fge', 'a', 'b') */ - /* search2358_0_0 -> 81 in the cache */ - /* search2358_0 -> 582 in the cache */ - /* search2358_1_0 -> 82 in the cache */ - /* search2358_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fge, - -1, 0, - { 582, 626 }, - -1, - } }, - - /* replace2358_0 -> 81 in the cache */ - /* replace2358_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 81, 82 }, - -1, - } }, - - /* ('~flt', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('flt', 'a', 'b') */ - /* search2359_0_0 -> 81 in the cache */ - /* search2359_0 -> 582 in the cache */ - /* search2359_1_0 -> 82 in the cache */ - /* search2359_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_flt, - -1, 0, - { 582, 626 }, - -1, - } }, - - /* replace2359_0 -> 81 in the cache */ - /* replace2359_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 81, 82 }, - -1, - } }, - - /* ('~fneu', ('f2fmp', 'a'), ('f2fmp', 'b')) => ('fneu', 'a', 'b') */ - /* search2360_0_0 -> 81 in the cache */ - /* search2360_0 -> 582 in the cache */ - /* search2360_1_0 -> 82 in the cache */ - /* search2360_1 -> 626 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - true, - false, - false, - nir_op_fneu, - 0, 1, - { 582, 626 }, - -1, - } }, - - /* replace2360_0 -> 81 in the cache */ - /* replace2360_1 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fneu, - 0, 1, - { 81, 82 }, - -1, - } }, - - /* ('f2fmp', 'a') => ('f2f16', 'a') */ - /* search2361_0 -> 81 in the cache */ - /* search2361 -> 582 in the cache */ - - /* replace2361_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2f16, - -1, 0, - { 81 }, - -1, - } }, - - /* ('f2imp', 'a') => ('f2i16', 'a') */ - /* search2362_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2imp, - -1, 0, - { 81 }, - -1, - } }, - - /* replace2362_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2i16, - -1, 0, - { 81 }, - -1, - } }, - - /* ('f2ump', 'a') => ('f2u16', 'a') */ - /* search2363_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2ump, - -1, 0, - { 81 }, - -1, - } }, - - /* replace2363_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_f2u16, - -1, 0, - { 81 }, - -1, - } }, - - /* ('i2imp', 'a') => ('i2i16', 'a') */ - /* search2364_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2imp, - -1, 0, - { 81 }, - -1, - } }, - - /* replace2364_0 -> 81 in the cache */ - /* replace2364 -> 431 in the cache */ - - /* ('i2fmp', 'a') => ('i2f16', 'a') */ - /* search2365_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2fmp, - -1, 0, - { 81 }, - -1, - } }, - - /* replace2365_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_i2f16, - -1, 0, - { 81 }, - -1, - } }, - - /* ('i2imp', 'a') => ('u2u16', 'a') */ - /* search2366_0 -> 81 in the cache */ - /* search2366 -> 670 in the cache */ - - /* replace2366_0 -> 81 in the cache */ - /* replace2366 -> 428 in the cache */ - - /* ('u2fmp', 'a') => ('u2f16', 'a') */ - /* search2367_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2fmp, - -1, 0, - { 81 }, - -1, - } }, - - /* replace2367_0 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 16 }, - false, - false, - false, - nir_op_u2f16, - -1, 0, - { 81 }, - -1, - } }, - - /* ('fisfinite', 'a') => ('flt', ('fabs', 'a'), inf) */ - /* search2368_0 -> 42 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fisfinite, - -1, 0, - { 42 }, - -1, - } }, - - /* replace2368_0_0 -> 42 in the cache */ - /* replace2368_0 -> 47 in the cache */ - { .constant = { - { nir_search_value_constant, -1 }, - nir_type_float, { 0x7ff0000000000000 /* inf */ }, - } }, - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 47, 676 }, - -1, - } }, - - /* ('fcsel', ('slt', 0, 'a'), 'b', 'c') => ('fcsel_gt', 'a', 'b', 'c') */ - /* search2369_0_0 -> 385 in the cache */ - /* search2369_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_slt, - -1, 0, - { 385, 81 }, - -1, - } }, - /* search2369_1 -> 82 in the cache */ - /* search2369_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel, - -1, 0, - { 678, 82, 84 }, - -1, - } }, - - /* replace2369_0 -> 81 in the cache */ - /* replace2369_1 -> 82 in the cache */ - /* replace2369_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel_gt, - -1, 0, - { 81, 82, 84 }, - -1, - } }, - - /* ('fcsel', ('slt', 'a', 0), 'b', 'c') => ('fcsel_gt', ('fneg', 'a'), 'b', 'c') */ - /* search2370_0_0 -> 81 in the cache */ - /* search2370_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_slt, - -1, 0, - { 81, 385 }, - -1, - } }, - /* search2370_1 -> 82 in the cache */ - /* search2370_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel, - -1, 0, - { 681, 82, 84 }, - -1, - } }, - - /* replace2370_0_0 -> 81 in the cache */ - /* replace2370_0 -> 89 in the cache */ - /* replace2370_1 -> 82 in the cache */ - /* replace2370_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel_gt, - -1, 0, - { 89, 82, 84 }, - -1, - } }, - - /* ('fcsel', ('sge', 'a', 0), 'b', 'c') => ('fcsel_ge', 'a', 'b', 'c') */ - /* search2371_0_0 -> 81 in the cache */ - /* search2371_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sge, - -1, 0, - { 81, 385 }, - -1, - } }, - /* search2371_1 -> 82 in the cache */ - /* search2371_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel, - -1, 0, - { 684, 82, 84 }, - -1, - } }, - - /* replace2371_0 -> 81 in the cache */ - /* replace2371_1 -> 82 in the cache */ - /* replace2371_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel_ge, - -1, 0, - { 81, 82, 84 }, - -1, - } }, - - /* ('fcsel', ('sge', 0, 'a'), 'b', 'c') => ('fcsel_ge', ('fneg', 'a'), 'b', 'c') */ - /* search2372_0_0 -> 385 in the cache */ - /* search2372_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_sge, - -1, 0, - { 385, 81 }, - -1, - } }, - /* search2372_1 -> 82 in the cache */ - /* search2372_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel, - -1, 0, - { 687, 82, 84 }, - -1, - } }, - - /* replace2372_0_0 -> 81 in the cache */ - /* replace2372_0 -> 89 in the cache */ - /* replace2372_1 -> 82 in the cache */ - /* replace2372_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_fcsel_ge, - -1, 0, - { 89, 82, 84 }, - -1, - } }, - - /* ('bcsel', ('ilt', 0, 'a@32'), 'b@32', 'c@32') => ('i32csel_gt', 'a', 'b', 'c') */ - /* search2373_0_0 -> 385 in the cache */ - /* search2373_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 385, 81 }, - -1, - } }, - /* search2373_1 -> 82 in the cache */ - /* search2373_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 690, 82, 84 }, - -1, - } }, - - /* replace2373_0 -> 81 in the cache */ - /* replace2373_1 -> 82 in the cache */ - /* replace2373_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i32csel_gt, - -1, 0, - { 81, 82, 84 }, - -1, - } }, - - /* ('bcsel', ('ilt', 'a@32', 0), 'b@32', 'c@32') => ('i32csel_ge', 'a', 'c', 'b') */ - /* search2374_0_0 -> 81 in the cache */ - /* search2374_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ilt, - -1, 0, - { 81, 385 }, - -1, - } }, - /* search2374_1 -> 82 in the cache */ - /* search2374_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 693, 82, 84 }, - -1, - } }, - - /* replace2374_0 -> 81 in the cache */ - /* replace2374_1 -> 84 in the cache */ - /* replace2374_2 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i32csel_ge, - -1, 0, - { 81, 84, 82 }, - -1, - } }, - - /* ('bcsel', ('ige', 'a@32', 0), 'b@32', 'c@32') => ('i32csel_ge', 'a', 'b', 'c') */ - /* search2375_0_0 -> 81 in the cache */ - /* search2375_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 81, 385 }, - -1, - } }, - /* search2375_1 -> 82 in the cache */ - /* search2375_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 696, 82, 84 }, - -1, - } }, - - /* replace2375_0 -> 81 in the cache */ - /* replace2375_1 -> 82 in the cache */ - /* replace2375_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i32csel_ge, - -1, 0, - { 81, 82, 84 }, - -1, - } }, - - /* ('bcsel', ('ige', 0, 'a@32'), 'b@32', 'c@32') => ('i32csel_gt', 'a', 'c', 'b') */ - /* search2376_0_0 -> 385 in the cache */ - /* search2376_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_ige, - -1, 0, - { 385, 81 }, - -1, - } }, - /* search2376_1 -> 82 in the cache */ - /* search2376_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 699, 82, 84 }, - -1, - } }, - - /* replace2376_0 -> 81 in the cache */ - /* replace2376_1 -> 84 in the cache */ - /* replace2376_2 -> 82 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_i32csel_gt, - -1, 0, - { 81, 84, 82 }, - -1, - } }, - - /* ('bcsel', ('flt', 0, 'a@32'), 'b@32', 'c@32') => ('fcsel_gt', 'a', 'b', 'c') */ - /* search2377_0_0 -> 385 in the cache */ - /* search2377_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 385, 81 }, - -1, - } }, - /* search2377_1 -> 82 in the cache */ - /* search2377_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 702, 82, 84 }, - -1, - } }, - - /* replace2377_0 -> 81 in the cache */ - /* replace2377_1 -> 82 in the cache */ - /* replace2377_2 -> 84 in the cache */ - /* replace2377 -> 680 in the cache */ - - /* ('bcsel', ('flt', 'a@32', 0), 'b@32', 'c@32') => ('fcsel_gt', ('fneg', 'a'), 'b', 'c') */ - /* search2378_0_0 -> 81 in the cache */ - /* search2378_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_flt, - -1, 0, - { 81, 385 }, - -1, - } }, - /* search2378_1 -> 82 in the cache */ - /* search2378_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 704, 82, 84 }, - -1, - } }, - - /* replace2378_0_0 -> 81 in the cache */ - /* replace2378_0 -> 89 in the cache */ - /* replace2378_1 -> 82 in the cache */ - /* replace2378_2 -> 84 in the cache */ - /* replace2378 -> 683 in the cache */ - - /* ('bcsel', ('fge', 'a@32', 0), 'b@32', 'c@32') => ('fcsel_ge', 'a', 'b', 'c') */ - /* search2379_0_0 -> 81 in the cache */ - /* search2379_0_1 -> 385 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 81, 385 }, - -1, - } }, - /* search2379_1 -> 82 in the cache */ - /* search2379_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 706, 82, 84 }, - -1, - } }, - - /* replace2379_0 -> 81 in the cache */ - /* replace2379_1 -> 82 in the cache */ - /* replace2379_2 -> 84 in the cache */ - /* replace2379 -> 686 in the cache */ - - /* ('bcsel', ('fge', 0, 'a@32'), 'b@32', 'c@32') => ('fcsel_ge', ('fneg', 'a'), 'b', 'c') */ - /* search2380_0_0 -> 385 in the cache */ - /* search2380_0_1 -> 81 in the cache */ - { .expression = { - { nir_search_value_expression, 1 }, - false, - false, - false, - nir_op_fge, - -1, 0, - { 385, 81 }, - -1, - } }, - /* search2380_1 -> 82 in the cache */ - /* search2380_2 -> 84 in the cache */ - { .expression = { - { nir_search_value_expression, 32 }, - false, - false, - false, - nir_op_bcsel, - -1, 0, - { 708, 82, 84 }, - -1, - } }, - - /* replace2380_0_0 -> 81 in the cache */ - /* replace2380_0 -> 89 in the cache */ - /* replace2380_1 -> 82 in the cache */ - /* replace2380_2 -> 84 in the cache */ - /* replace2380 -> 689 in the cache */ - -}; - -static const nir_search_expression_cond nir_opt_algebraic_late_expression_cond[] = { - (is_used_once), - (is_only_used_by_fadd), - (is_only_used_as_float), -}; - -static const nir_search_variable_cond nir_opt_algebraic_late_variable_cond[] = { - (is_finite), - (is_not_const), - (is_gt_0_and_lt_1), - (is_not_fmul), - (is_not_negative), - (is_not_const_and_not_fsign), -}; - -static const struct transform nir_opt_algebraic_late_transforms[] = { - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 234, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 153, 155, 131 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 156, 157, 132 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 242, 243, 135 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 244, 245, 135 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 246, 247, 135 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 248, 249, 135 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 255, 264, 136 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 269, 18 }, - { 271, 272, 18 }, - { 273, 274, 18 }, - { 275, 276, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 386, 385, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 386, 385, 0 }, - { 390, 395, 138 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 387, 385, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 387, 385, 0 }, - { 396, 400, 138 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 401, 42, 0 }, - { 403, 42, 0 }, - { 457, 450, 139 }, - { 454, 460, 140 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 404, 42, 0 }, - { 405, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 406, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 582, 665, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 666, 667, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 668, 669, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 670, 431, 0 }, - { 670, 428, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 671, 672, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 673, 674, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 675, 677, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 703, 680, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 703, 680, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 703, 680, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 703, 680, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 703, 680, 141 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 703, 680, 141 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 703, 680, 141 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 703, 680, 141 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 707, 686, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 707, 686, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 707, 686, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 707, 686, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 707, 686, 141 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 707, 686, 141 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 707, 686, 141 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 707, 686, 141 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 691, 692, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 691, 692, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 691, 692, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 691, 692, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 691, 692, 141 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 691, 692, 141 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 691, 692, 141 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 691, 692, 141 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 697, 698, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 697, 698, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 697, 698, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 697, 698, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 697, 698, 141 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 548, 550, 0 }, - { 553, 550, 0 }, - { 697, 698, 141 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 556, 558, 0 }, - { 561, 558, 0 }, - { 563, 565, 0 }, - { 567, 565, 0 }, - { 697, 698, 141 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 570, 572, 0 }, - { 575, 572, 0 }, - { 577, 579, 0 }, - { 581, 579, 0 }, - { 697, 698, 141 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 11, 10, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 225, 226, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 186, 188, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4, 6, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 223, 224, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 215, 216, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 661, 662, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 60, 42, 0 }, - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 17, 16, 0 }, - { 29, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 229, 200, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 13, 14, 0 }, - { 26, 14, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 227, 228, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 217, 218, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 191, 192, 0 }, - { 199, 200, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 659, 660, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 20, 21, 0 }, - { 32, 21, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 232, 233, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 193, 194, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 219, 220, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 657, 658, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 22, 23, 0 }, - { 33, 23, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 230, 231, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 195, 196, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 221, 222, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 663, 664, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 304, 307, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 252, 254, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 308, 310, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 278, 269, 18 }, - { 280, 272, 18 }, - { 281, 274, 18 }, - { 282, 276, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 102, 103, 34 }, - { 118, 119, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 180, 182, 134 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 179, 134 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 174, 179, 134 }, - { 180, 182, 134 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 296, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 42, 0 }, - { 453, 442, 139 }, - { 456, 446, 139 }, - { 459, 450, 139 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 46, 48, 0 }, - { 235, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 235, 42, 0 }, - { 470, 472, 0 }, - { 479, 481, 0 }, - { 488, 490, 0 }, - { 498, 500, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 57, 58, 0 }, - { 234, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 234, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 234, 42, 0 }, - { 475, 476, 0 }, - { 484, 485, 0 }, - { 493, 494, 0 }, - { 503, 504, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 162, 166, 133 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 151, 152, 130 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 168, 170, 133 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 151, 152, 130 }, - { 162, 166, 133 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 162, 166, 133 }, - { 168, 170, 133 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 151, 152, 130 }, - { 168, 170, 133 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 171, 173, 133 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 409, 407, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 411, 407, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 412, 410, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 413, 410, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 401, 42, 0 }, - { 403, 42, 0 }, - { 440, 442, 139 }, - { 444, 446, 139 }, - { 448, 450, 139 }, - { 457, 450, 139 }, - { 454, 460, 140 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 462, 463, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 415, 417, 60 }, - { 424, 425, 60 }, - { 429, 430, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 419, 417, 60 }, - { 427, 425, 60 }, - { 432, 430, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 420, 421, 60 }, - { 433, 434, 60 }, - { 436, 437, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 422, 421, 60 }, - { 435, 434, 60 }, - { 438, 437, 61 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 465, 466, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 255, 264, 136 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 682, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 679, 680, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 679, 680, 141 }, - { 682, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 685, 686, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 688, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 685, 686, 141 }, - { 688, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 12, 6, 0 }, - { 225, 226, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 8, 10, 0 }, - { 223, 224, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 18, 14, 0 }, - { 30, 14, 0 }, - { 229, 200, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 16, 0 }, - { 28, 16, 0 }, - { 227, 228, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 209, 214, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 239, 241, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 508, 512, 15 }, - { 525, 529, 17 }, - { 538, 542, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 278, 269, 18 }, - { 280, 272, 18 }, - { 281, 274, 18 }, - { 282, 276, 18 }, - { 508, 512, 15 }, - { 525, 529, 17 }, - { 538, 542, 19 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 68, 70, 33 }, - { 85, 86, 34 }, - { 88, 90, 34 }, - { 118, 119, 35 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 105, 106, 34 }, - { 118, 119, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 72, 75, 33 }, - { 85, 86, 34 }, - { 92, 95, 34 }, - { 118, 119, 35 }, - { 125, 128, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 108, 109, 34 }, - { 118, 119, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 102, 103, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 102, 103, 34 }, - { 125, 128, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 108, 109, 34 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 105, 106, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 72, 75, 33 }, - { 88, 90, 34 }, - { 92, 95, 34 }, - { 121, 123, 35 }, - { 125, 128, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 108, 109, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 105, 106, 34 }, - { 125, 128, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 108, 109, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 342, 347, 137 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 108, 109, 34 }, - { 125, 128, 35 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 291, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 294, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 287, 288, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 287, 288, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 287, 288, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 294, 292, 18 }, - { 296, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 267, 269, 18 }, - { 271, 272, 18 }, - { 273, 274, 18 }, - { 275, 276, 18 }, - { 287, 288, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 287, 288, 18 }, - { 291, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 287, 288, 18 }, - { 294, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 287, 288, 18 }, - { 296, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 604, 89, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 637, 638, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 655, 656, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 643, 644, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 634, 635, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 628, 629, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 653, 86, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 584, 93, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 615, 616, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 609, 610, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 624, 625, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 612, 613, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 586, 587, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 589, 590, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 592, 593, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 595, 596, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 598, 599, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 601, 602, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 606, 607, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 618, 619, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 621, 622, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 631, 632, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 640, 641, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 646, 647, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 649, 650, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 703, 680, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 703, 680, 141 }, - { 705, 683, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 707, 686, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 707, 686, 141 }, - { 709, 689, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 691, 692, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 691, 692, 141 }, - { 694, 695, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 697, 698, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 517, 521, 0 }, - { 531, 532, 0 }, - { 544, 545, 0 }, - { 697, 698, 141 }, - { 700, 701, 141 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 316, 317, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 298, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 298, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 298, 292, 18 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 38, 41, 0 }, - { 235, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 53, 54, 0 }, - { 234, 42, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 78, 80, 33 }, - { 85, 86, 34 }, - { 98, 100, 34 }, - { 118, 119, 35 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 112, 113, 34 }, - { 118, 119, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 102, 103, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 78, 80, 33 }, - { 88, 90, 34 }, - { 98, 100, 34 }, - { 121, 123, 35 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 112, 113, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 105, 106, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 328, 334, 137 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 342, 347, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 342, 347, 137 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 78, 80, 33 }, - { 92, 95, 34 }, - { 98, 100, 34 }, - { 125, 128, 35 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 112, 113, 34 }, - { 125, 128, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 108, 109, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 328, 334, 137 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 363, 369, 137 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 328, 334, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 328, 334, 137 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 112, 113, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 59, 149, 129 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 65, 66, 33 }, - { 85, 86, 34 }, - { 118, 119, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 102, 103, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 68, 70, 33 }, - { 88, 90, 34 }, - { 121, 123, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 105, 106, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 342, 347, 137 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 342, 347, 137 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 72, 75, 33 }, - { 92, 95, 34 }, - { 125, 128, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 108, 109, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { 375, 377, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 375, 377, 137 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 328, 334, 137 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 328, 334, 137 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 78, 80, 33 }, - { 98, 100, 34 }, - { 131, 133, 35 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 112, 113, 34 }, - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { 363, 369, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 363, 369, 137 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 137, 138, 127 }, - { 140, 141, 127 }, - { 143, 144, 127 }, - { 146, 147, 128 }, - { 349, 355, 137 }, - { 379, 384, 137 }, - { ~0, ~0, ~0 }, /* Sentinel */ - -}; - -static const struct per_op_table nir_opt_algebraic_late_pass_op_table[nir_num_search_ops] = { - [nir_op_flt] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - }, - - .num_filtered_states = 7, - .table = (const uint16_t []) { - - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 121, - 122, - 123, - 3, - 235, - 0, - 124, - 0, - 0, - 0, - 0, - 0, - 0, - 125, - 0, - 126, - 0, - 0, - 126, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 127, - 0, - 0, - 236, - 0, - 126, - 0, - 0, - 126, - }, - }, - [nir_op_fadd] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 7, - 8, - 9, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 3, - 11, - 4, - 10, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 13, - 14, - 0, - 15, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 12, - 0, - 12, - 16, - 12, - 0, - 0, - 12, - 12, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 11, - 10, - 0, - 0, - 17, - 18, - 19, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 20, - 21, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 22, - .table = (const uint16_t []) { - - 5, - 6, - 165, - 166, - 166, - 167, - 5, - 240, - 241, - 165, - 166, - 166, - 242, - 243, - 244, - 245, - 344, - 345, - 346, - 347, - 394, - 395, - 6, - 6, - 168, - 169, - 170, - 171, - 6, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 348, - 349, - 350, - 351, - 396, - 397, - 165, - 168, - 165, - 172, - 172, - 173, - 165, - 240, - 241, - 165, - 172, - 172, - 255, - 256, - 257, - 258, - 352, - 345, - 346, - 353, - 394, - 395, - 166, - 169, - 172, - 166, - 166, - 174, - 166, - 259, - 260, - 172, - 166, - 166, - 261, - 262, - 263, - 264, - 354, - 355, - 356, - 357, - 398, - 399, - 166, - 170, - 172, - 166, - 166, - 174, - 166, - 259, - 260, - 172, - 166, - 166, - 261, - 262, - 263, - 264, - 354, - 355, - 356, - 357, - 398, - 399, - 167, - 171, - 173, - 174, - 174, - 167, - 167, - 265, - 266, - 173, - 174, - 174, - 267, - 268, - 269, - 270, - 358, - 359, - 360, - 361, - 400, - 401, - 5, - 6, - 165, - 166, - 166, - 167, - 175, - 240, - 241, - 165, - 166, - 166, - 242, - 243, - 244, - 245, - 344, - 345, - 346, - 347, - 394, - 395, - 240, - 246, - 240, - 259, - 259, - 265, - 240, - 240, - 271, - 240, - 259, - 259, - 272, - 273, - 274, - 275, - 362, - 363, - 364, - 365, - 402, - 403, - 241, - 247, - 241, - 260, - 260, - 266, - 241, - 271, - 241, - 241, - 260, - 260, - 276, - 277, - 278, - 279, - 366, - 367, - 368, - 369, - 404, - 405, - 165, - 248, - 165, - 172, - 172, - 173, - 165, - 240, - 241, - 165, - 172, - 172, - 255, - 256, - 257, - 258, - 352, - 345, - 346, - 353, - 394, - 395, - 166, - 249, - 172, - 166, - 166, - 174, - 166, - 259, - 260, - 172, - 166, - 166, - 261, - 262, - 263, - 264, - 354, - 355, - 356, - 357, - 398, - 399, - 166, - 250, - 172, - 166, - 166, - 174, - 166, - 259, - 260, - 172, - 166, - 166, - 261, - 262, - 263, - 264, - 354, - 355, - 356, - 357, - 398, - 399, - 242, - 251, - 255, - 261, - 261, - 267, - 242, - 272, - 276, - 255, - 261, - 261, - 242, - 280, - 281, - 282, - 370, - 371, - 372, - 373, - 406, - 407, - 243, - 252, - 256, - 262, - 262, - 268, - 243, - 273, - 277, - 256, - 262, - 262, - 280, - 243, - 283, - 284, - 374, - 375, - 376, - 377, - 408, - 409, - 244, - 253, - 257, - 263, - 263, - 269, - 244, - 274, - 278, - 257, - 263, - 263, - 281, - 283, - 244, - 285, - 378, - 379, - 380, - 381, - 410, - 411, - 245, - 254, - 258, - 264, - 264, - 270, - 245, - 275, - 279, - 258, - 264, - 264, - 282, - 284, - 285, - 245, - 382, - 383, - 384, - 385, - 412, - 413, - 344, - 348, - 352, - 354, - 354, - 358, - 344, - 362, - 366, - 352, - 354, - 354, - 370, - 374, - 378, - 382, - 344, - 386, - 387, - 388, - 414, - 415, - 345, - 349, - 345, - 355, - 355, - 359, - 345, - 363, - 367, - 345, - 355, - 355, - 371, - 375, - 379, - 383, - 386, - 345, - 389, - 390, - 416, - 417, - 346, - 350, - 346, - 356, - 356, - 360, - 346, - 364, - 368, - 346, - 356, - 356, - 372, - 376, - 380, - 384, - 387, - 389, - 346, - 391, - 418, - 419, - 347, - 351, - 353, - 357, - 357, - 361, - 347, - 365, - 369, - 353, - 357, - 357, - 373, - 377, - 381, - 385, - 388, - 390, - 391, - 347, - 420, - 421, - 394, - 396, - 394, - 398, - 398, - 400, - 394, - 402, - 404, - 394, - 398, - 398, - 406, - 408, - 410, - 412, - 414, - 416, - 418, - 420, - 394, - 422, - 395, - 397, - 395, - 399, - 399, - 401, - 395, - 403, - 405, - 395, - 399, - 399, - 407, - 409, - 411, - 413, - 415, - 417, - 419, - 421, - 422, - 395, - }, - }, - [nir_op_fneg] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 4, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 9, - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 0, - 0, - 2, - 2, - 10, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - }, - - .num_filtered_states = 11, - .table = (const uint16_t []) { - - 7, - 128, - 129, - 130, - 131, - 132, - 133, - 341, - 342, - 392, - 393, - }, - }, - [nir_op_fge] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 134, - 135, - 9, - 9, - 237, - 9, - 0, - 136, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 137, - 0, - 138, - 0, - 0, - 138, - 0, - 0, - 139, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 140, - 0, - 0, - 0, - 238, - 0, - 138, - 0, - 0, - 138, - 0, - 0, - 239, - 0, - 0, - 0, - 0, - 0, - 0, - }, - }, - [nir_op_feq] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - }, - - .num_filtered_states = 7, - .table = (const uint16_t []) { - - 11, - 12, - 11, - 11, - 11, - 11, - 11, - 12, - 12, - 141, - 142, - 143, - 144, - 12, - 11, - 141, - 11, - 11, - 11, - 11, - 11, - 11, - 142, - 11, - 145, - 11, - 11, - 11, - 11, - 143, - 11, - 11, - 11, - 11, - 11, - 11, - 144, - 11, - 11, - 11, - 11, - 11, - 11, - 12, - 11, - 11, - 11, - 11, - 146, - }, - }, - [nir_op_fneu] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 2, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 13, - 14, - 13, - 13, - 13, - 13, - 14, - 14, - 147, - 148, - 149, - 14, - 13, - 147, - 13, - 13, - 13, - 13, - 13, - 148, - 13, - 150, - 13, - 13, - 13, - 149, - 13, - 13, - 13, - 13, - 13, - 14, - 13, - 13, - 13, - 151, - }, - }, - [nir_op_iand] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 2, - 2, - 4, - 4, - 4, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 8, - .table = (const uint16_t []) { - - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 182, - 15, - 15, - 15, - 15, - 183, - 15, - 184, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 339, - 15, - 15, - 184, - 15, - 15, - 15, - 15, - 339, - 15, - 182, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 15, - 185, - 15, - 15, - 15, - 15, - 339, - 339, - 15, - 15, - 15, - }, - }, - [nir_op_ior] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 2, - 2, - 1, - 1, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 16, - 340, - 16, - 16, - 16, - 186, - 16, - 340, - 16, - 16, - 186, - 187, - 16, - 16, - 16, - 16, - 16, - 16, - 188, - 16, - 16, - 340, - 340, - 16, - 16, - 16, - }, - }, - [nir_op_fmul] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 2, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 3, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 2, - 5, - 5, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 0, - 0, - 5, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 6, - .table = (const uint16_t []) { - - 17, - 18, - 157, - 158, - 17, - 336, - 18, - 18, - 159, - 160, - 18, - 337, - 157, - 159, - 157, - 161, - 157, - 336, - 158, - 160, - 161, - 158, - 158, - 338, - 17, - 18, - 157, - 158, - 162, - 336, - 336, - 337, - 336, - 338, - 336, - 336, - }, - }, - [nir_op_fabs] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 0, - 189, - 190, - 191, - }, - }, - [nir_op_fmulz] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 19, - }, - }, - [nir_op_iadd] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 20, - 193, - 194, - 195, - 193, - 193, - 196, - 197, - 194, - 196, - 194, - 198, - 195, - 197, - 198, - 195, - }, - }, - [nir_op_ineg] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 21, - }, - }, - [nir_op_iabs] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 22, - }, - }, - [nir_op_isub] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 23, - 23, - 199, - 199, - }, - }, - [nir_op_vec2] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 176, - 177, - 178, - }, - }, - [nir_op_fsat] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 24, - 212, - }, - }, - [nir_op_fmin] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 2, - 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 0, - 0, - 152, - 152, - 0, - 0, - 152, - 153, - 0, - 0, - 0, - 0, - 154, - }, - }, - [nir_op_fdot2] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 25, - }, - }, - [nir_op_fdot3] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 26, - }, - }, - [nir_op_fdot4] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 27, - }, - }, - [nir_op_fdph] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 28, - }, - }, - [nir_op_flrp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 155, - 155, - 155, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 156, - }, - }, - [nir_op_fround_even] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 29, - 213, - }, - }, - [nir_op_ffma] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 6, - 2, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 7, - 4, - 8, - 7, - 3, - 0, - 0, - 9, - 0, - 0, - 9, - 0, - 0, - 0, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 9, - 9, - 0, - 0, - 0, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 10, - 0, - 10, - 0, - 10, - 0, - 0, - 10, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 4, - 7, - 0, - 0, - 2, - 2, - 0, - 0, - 9, - 9, - 0, - 0, - 9, - 9, - 0, - 9, - 9, - 0, - 9, - 9, - 0, - 0, - 9, - 9, - 0, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 9, - 9, - 0, - 0, - 9, - 9, - 0, - 0, - 9, - 9, - 0, - 0, - 9, - 9, - 0, - 9, - 9, - 0, - 9, - 9, - 9, - 2, - 2, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - }, - - .num_filtered_states = 11, - .table = (const uint16_t []) { - - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 31, - 30, - 179, - 180, - 30, - 287, - 288, - 292, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 31, - 30, - 179, - 180, - 30, - 287, - 288, - 292, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 289, - 293, - 289, - 290, - 290, - 289, - 294, - 295, - 295, - 289, - 291, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 31, - 30, - 179, - 180, - 30, - 287, - 288, - 292, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 289, - 289, - 289, - 290, - 296, - 289, - 289, - 290, - 296, - 289, - 291, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 181, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 31, - 30, - 179, - 180, - 30, - 287, - 288, - 292, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 289, - 289, - 289, - 290, - 296, - 289, - 289, - 290, - 296, - 289, - 291, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 289, - 293, - 289, - 290, - 290, - 289, - 294, - 295, - 295, - 289, - 291, - 289, - 289, - 289, - 290, - 296, - 289, - 289, - 290, - 296, - 289, - 291, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 289, - 289, - 289, - 290, - 296, - 289, - 289, - 290, - 296, - 289, - 291, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 31, - 30, - 179, - 179, - 30, - 287, - 288, - 288, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 180, - 30, - 30, - 179, - 180, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - 289, - 289, - 289, - 290, - 290, - 289, - 289, - 290, - 290, - 289, - 291, - 30, - 30, - 30, - 179, - 179, - 30, - 30, - 179, - 179, - 30, - 286, - }, - }, - [nir_op_fmax] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 0, - 163, - 0, - 0, - 0, - 164, - }, - }, - [nir_op_bcsel] = { - .filter = (const uint16_t []) { - 0, - 1, - 2, - 3, - 4, - 5, - 5, - 0, - 6, - 7, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 9, - 0, - 10, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 13, - 14, - 15, - 16, - 17, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 3, - 3, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 7, - 7, - 6, - 6, - 0, - 6, - 0, - 0, - 0, - 0, - 18, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 19, - 0, - 0, - 0, - 10, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 2, - 7, - 6, - 6, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 11, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 0, - 0, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - 5, - }, - - .num_filtered_states = 20, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 323, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 74, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 75, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 76, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 73, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 324, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 78, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 79, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 80, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 77, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 325, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 82, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 83, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 84, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 81, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 326, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 86, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 87, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 88, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 85, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 327, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 90, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 91, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 92, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 89, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 328, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 94, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 95, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 96, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 93, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 329, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 98, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 99, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 100, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 97, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 330, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 102, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 103, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 104, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 101, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 331, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 106, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 107, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 108, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 105, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 332, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 110, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 111, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 112, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 109, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 333, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 114, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 115, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 116, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 113, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 334, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 118, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 119, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 120, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 117, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 335, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 322, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 70, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 71, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 72, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - }, - [nir_op_fsqrt] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 32, - 214, - }, - }, - [nir_op_frsq] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 33, - 215, - }, - }, - [nir_op_ffmaz] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 34, - 192, - 343, - 34, - 192, - 343, - 34, - 192, - 343, - 34, - 192, - 343, - 34, - 192, - 343, - 34, - 192, - 343, - 34, - 192, - 343, - 34, - 192, - 343, - 34, - 192, - 343, - }, - }, - [nir_op_ubfe] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 35, - 0, - 36, - 0, - 35, - 0, - 36, - }, - }, - [nir_op_ibfe] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 37, - 0, - 38, - 0, - 37, - 0, - 38, - }, - }, - [nir_op_ishl] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 0, - 39, - 0, - 0, - 39, - 0, - 0, - 204, - 0, - }, - }, - [nir_op_ishr] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 40, - 0, - 40, - }, - }, - [nir_op_ushr] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 41, - 0, - 41, - }, - }, - [nir_op_extract_i8] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 42, - 42, - 42, - 42, - 42, - 42, - 42, - 42, - 42, - 200, - 42, - 42, - 42, - 201, - 42, - 42, - }, - }, - [nir_op_extract_u8] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 2, - 3, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 4, - .table = (const uint16_t []) { - - 43, - 44, - 43, - 43, - 43, - 44, - 43, - 43, - 43, - 202, - 43, - 43, - 43, - 203, - 43, - 43, - }, - }, - [nir_search_op_u2u] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 45, - 206, - 207, - }, - }, - [nir_search_op_i2i] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 46, - 208, - 209, - }, - }, - [nir_op_insert_u8] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 205, - 205, - }, - }, - [nir_op_insert_u16] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 210, - 210, - }, - }, - [nir_op_extract_u16] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 47, - 0, - 47, - }, - }, - [nir_op_ine] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 48, - 48, - 48, - }, - }, - [nir_op_ieq] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 49, - 49, - 49, - }, - }, - [nir_search_op_b2f] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 211, - }, - }, - [nir_op_inot] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 50, - }, - }, - [nir_search_op_f2f] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 26, - .table = (const uint16_t []) { - - 0, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - }, - }, - [nir_op_f2fmp] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 51, - }, - }, - [nir_op_fceil] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 216, - }, - }, - [nir_op_fcos] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 217, - }, - }, - [nir_op_fexp2] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 218, - }, - }, - [nir_op_ffloor] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 219, - }, - }, - [nir_op_ffract] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 220, - }, - }, - [nir_op_flog2] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 221, - }, - }, - [nir_op_frcp] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 222, - }, - }, - [nir_op_fsign] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 223, - }, - }, - [nir_op_fsin] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 224, - }, - }, - [nir_op_fdiv] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 225, - }, - }, - [nir_op_fmod] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 226, - }, - }, - [nir_op_fpow] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 227, - }, - }, - [nir_op_frem] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 228, - }, - }, - [nir_op_f2imp] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 52, - }, - }, - [nir_op_f2ump] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 53, - }, - }, - [nir_op_i2imp] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 54, - }, - }, - [nir_op_i2fmp] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 55, - }, - }, - [nir_op_u2fmp] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 56, - }, - }, - [nir_op_fisfinite] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 57, - }, - }, - [nir_op_fcsel] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 7, - .table = (const uint16_t []) { - - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 229, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 230, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 231, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 232, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 233, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - 234, - }, - }, - [nir_op_slt] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 58, - 59, - 60, - }, - }, - [nir_op_sge] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 61, - 62, - 63, - }, - }, - [nir_op_ilt] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 64, - 65, - 66, - }, - }, - [nir_op_ige] = { - .filter = (const uint16_t []) { - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 0, - 67, - 68, - 69, - }, - }, -}; - -/* Mapping from state index to offset in transforms (0 being no transforms) */ -static const uint16_t nir_opt_algebraic_late_transform_offsets[] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 5, - 0, - 0, - 0, - 0, - 7, - 9, - 0, - 0, - 11, - 13, - 15, - 17, - 19, - 0, - 21, - 0, - 0, - 0, - 26, - 28, - 31, - 33, - 36, - 41, - 44, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 46, - 48, - 50, - 52, - 55, - 57, - 59, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 61, - 64, - 69, - 74, - 76, - 80, - 86, - 92, - 94, - 98, - 104, - 110, - 113, - 118, - 125, - 132, - 134, - 138, - 144, - 150, - 152, - 156, - 162, - 168, - 171, - 176, - 183, - 190, - 192, - 196, - 202, - 208, - 210, - 214, - 220, - 226, - 229, - 234, - 241, - 248, - 250, - 254, - 260, - 266, - 268, - 272, - 278, - 284, - 287, - 292, - 299, - 306, - 308, - 310, - 312, - 314, - 316, - 318, - 320, - 322, - 325, - 327, - 329, - 331, - 333, - 336, - 338, - 341, - 343, - 345, - 348, - 350, - 353, - 355, - 0, - 357, - 359, - 361, - 364, - 366, - 368, - 370, - 0, - 372, - 0, - 374, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 376, - 0, - 378, - 383, - 387, - 389, - 394, - 398, - 406, - 408, - 416, - 422, - 0, - 427, - 429, - 431, - 0, - 434, - 0, - 436, - 441, - 443, - 446, - 452, - 455, - 457, - 0, - 0, - 0, - 0, - 463, - 465, - 467, - 469, - 472, - 475, - 478, - 480, - 482, - 484, - 486, - 488, - 496, - 498, - 502, - 506, - 510, - 514, - 0, - 0, - 516, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 518, - 520, - 522, - 525, - 527, - 529, - 532, - 535, - 538, - 542, - 546, - 548, - 556, - 562, - 564, - 568, - 570, - 572, - 580, - 586, - 592, - 599, - 610, - 612, - 616, - 618, - 620, - 626, - 634, - 640, - 646, - 657, - 666, - 671, - 678, - 683, - 688, - 697, - 704, - 707, - 712, - 715, - 718, - 727, - 736, - 747, - 756, - 765, - 772, - 781, - 788, - 795, - 800, - 803, - 806, - 811, - 816, - 0, - 819, - 821, - 823, - 825, - 827, - 829, - 832, - 838, - 841, - 844, - 847, - 849, - 851, - 853, - 855, - 857, - 859, - 861, - 863, - 865, - 867, - 869, - 871, - 873, - 875, - 877, - 879, - 881, - 883, - 885, - 887, - 889, - 891, - 893, - 895, - 897, - 901, - 906, - 911, - 917, - 922, - 927, - 933, - 938, - 943, - 949, - 954, - 959, - 965, - 967, - 969, - 971, - 973, - 976, - 979, - 981, - 0, - 983, - 985, - 993, - 999, - 1001, - 1003, - 1011, - 1017, - 1019, - 1025, - 1031, - 1036, - 1047, - 1056, - 1061, - 1064, - 1073, - 1080, - 1083, - 1092, - 1103, - 1112, - 1121, - 1128, - 1137, - 1144, - 1151, - 1154, - 1163, - 1170, - 1173, - 1178, - 1189, - 1198, - 1203, - 1206, - 1215, - 1222, - 1225, - 1228, - 1237, - 1244, - 1247, - 1256, - 1263, - 1266, - 1275, - 1284, - 1291, - 1293, - 1295, - 1301, - 1307, - 1313, - 1319, - 1328, - 1337, - 1344, - 1351, - 1360, - 1369, - 1376, - 1383, - 1390, - 1397, - 1406, - 1415, - 1422, - 1429, - 1436, - 1443, - 1450, - 1457, - 1466, - 1475, - 1482, - 1489, - 1496, - 1503, -}; - -static const nir_algebraic_table nir_opt_algebraic_late_table = { - .transforms = nir_opt_algebraic_late_transforms, - .transform_offsets = nir_opt_algebraic_late_transform_offsets, - .pass_op_table = nir_opt_algebraic_late_pass_op_table, - .values = nir_opt_algebraic_late_values, - .expression_cond = nir_opt_algebraic_late_expression_cond, - .variable_cond = nir_opt_algebraic_late_variable_cond, -}; - -bool -nir_opt_algebraic_late(nir_shader *shader) -{ - bool progress = false; - bool condition_flags[142]; - const nir_shader_compiler_options *options = shader->options; - const shader_info *info = &shader->info; - (void) options; - (void) info; - - /* This is not a great place for this, but it seems to be the best place - * for it. Check that at most one kind of lowering is requested for - * bitfield extract and bitfield insert. Otherwise the lowering can fight - * with each other and optimizations. - */ - assert((int)options->lower_bitfield_extract + - (int)options->lower_bitfield_extract_to_shifts <= 1); - assert((int)options->lower_bitfield_insert + - (int)options->lower_bitfield_insert_to_shifts + - (int)options->lower_bitfield_insert_to_bitfield_select <= 1); - - - STATIC_ASSERT(710 == ARRAY_SIZE(nir_opt_algebraic_late_values)); - condition_flags[0] = true; - condition_flags[1] = !options->lower_bitops; - condition_flags[2] = options->lower_bitops; - condition_flags[3] = !options->lower_bitops && (options->lower_int64_options & (nir_lower_imul64 | nir_lower_shift64)) == nir_lower_imul64; - condition_flags[4] = options->lower_mul_2x32_64; - condition_flags[5] = !options->lower_ftrunc || options->lower_ffloor; - condition_flags[6] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 16); - condition_flags[7] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[8] = !options->lower_iadd_sat; - condition_flags[9] = !options->lower_uadd_sat; - condition_flags[10] = options->has_fmulz && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[11] = !options->has_sdot_4x8; - condition_flags[12] = !options->has_udot_4x8; - condition_flags[13] = !options->has_sudot_4x8; - condition_flags[14] = !options->has_dot_2x16; - condition_flags[15] = options->lower_flrp16; - condition_flags[16] = !options->lower_flrp16; - condition_flags[17] = options->lower_flrp32; - condition_flags[18] = !options->lower_flrp32; - condition_flags[19] = options->lower_flrp64; - condition_flags[20] = !options->lower_flrp64; - condition_flags[21] = options->lower_ftrunc; - condition_flags[22] = options->lower_ftrunc || (options->lower_doubles_options & nir_lower_dtrunc); - condition_flags[23] = options->lower_ffloor; - condition_flags[24] = (options->lower_ffloor || (options->lower_doubles_options & nir_lower_dfloor)) && !(options->lower_doubles_options & nir_lower_dfract); - condition_flags[25] = !options->lower_ffloor; - condition_flags[26] = !options->lower_ffloor && !(options->lower_doubles_options & nir_lower_dfloor); - condition_flags[27] = options->lower_ffract; - condition_flags[28] = options->lower_ffract || (options->lower_doubles_options & nir_lower_dfract); - condition_flags[29] = options->lower_fceil; - condition_flags[30] = options->lower_ffma16; - condition_flags[31] = options->lower_ffma32; - condition_flags[32] = options->lower_ffma64; - condition_flags[33] = options->fuse_ffma16; - condition_flags[34] = options->fuse_ffma32; - condition_flags[35] = options->fuse_ffma64; - condition_flags[36] = options->lower_fdph; - condition_flags[37] = !options->lower_fdph; - condition_flags[38] = options->lower_fdot; - condition_flags[39] = !options->lower_fsat; - condition_flags[40] = !options->lower_iabs; - condition_flags[41] = options->lower_fsat; - condition_flags[42] = !options->lower_fsat && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[43] = !options->lower_fsign; - condition_flags[44] = options->lower_umax; - condition_flags[45] = options->lower_umin; - condition_flags[46] = !options->lower_umax; - condition_flags[47] = !options->lower_umin; - condition_flags[48] = options->lower_scmp; - condition_flags[49] = options->lower_vector_cmp; - condition_flags[50] = !options->lower_pack_64_2x32_split; - condition_flags[51] = !options->lower_rotate; - condition_flags[52] = options->lower_rotate; - condition_flags[53] = options->lower_fpow; - condition_flags[54] = !options->lower_fpow; - condition_flags[55] = options->lower_fdiv; - condition_flags[56] = options->lower_fsqrt; - condition_flags[57] = !options->lower_fsqrt; - condition_flags[58] = options->lower_sincos; - condition_flags[59] = !(options->lower_doubles_options & nir_lower_fp64_full_software); - condition_flags[60] = !options->lower_extract_byte; - condition_flags[61] = !options->lower_extract_word; - condition_flags[62] = options->has_pack_32_4x8; - condition_flags[63] = options->lower_pack_64_2x32_split; - condition_flags[64] = options->lower_pack_32_2x16_split; - condition_flags[65] = options->has_pack_half_2x16_rtz; - condition_flags[66] = options->lower_unpack_64_2x32_split; - condition_flags[67] = options->lower_unpack_32_2x16_split; - condition_flags[68] = options->has_find_msb_rev; - condition_flags[69] = !options->lower_find_msb_to_reverse; - condition_flags[70] = !options->lower_find_lsb; - condition_flags[71] = options->lower_fmod; - condition_flags[72] = options->lower_uadd_carry; - condition_flags[73] = options->lower_usub_borrow; - condition_flags[74] = options->lower_bitfield_insert; - condition_flags[75] = options->lower_hadd; - condition_flags[76] = options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[77] = options->lower_mul_32x16; - condition_flags[78] = options->lower_uadd_sat || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[79] = options->lower_uadd_sat; - condition_flags[80] = options->lower_usub_sat; - condition_flags[81] = (options->lower_int64_options & nir_lower_usub_sat64) != 0; - condition_flags[82] = (options->lower_int64_options & nir_lower_iadd_sat64) != 0; - condition_flags[83] = (options->lower_int64_options & nir_lower_minmax64) != 0; - condition_flags[84] = (options->lower_int64_options & nir_lower_icmp64) != 0; - condition_flags[85] = options->lower_bitfield_insert_to_shifts; - condition_flags[86] = options->lower_bitfield_insert_to_bitfield_select; - condition_flags[87] = options->lower_bitfield_extract; - condition_flags[88] = options->lower_bitfield_insert_to_bitfield_select || options->lower_bitfield_insert; - condition_flags[89] = options->lower_bitfield_extract_to_shifts; - condition_flags[90] = options->lower_ifind_msb; - condition_flags[91] = options->lower_find_msb_to_reverse; - condition_flags[92] = options->lower_ifind_msb_to_uclz; - condition_flags[93] = options->lower_ufind_msb_to_uclz; - condition_flags[94] = options->lower_uclz; - condition_flags[95] = options->lower_find_lsb; - condition_flags[96] = options->lower_extract_byte; - condition_flags[97] = options->lower_extract_word; - condition_flags[98] = options->lower_pack_unorm_2x16; - condition_flags[99] = options->lower_pack_unorm_4x8; - condition_flags[100] = options->lower_pack_snorm_2x16; - condition_flags[101] = options->lower_pack_snorm_4x8; - condition_flags[102] = options->lower_unpack_unorm_2x16; - condition_flags[103] = options->lower_unpack_unorm_4x8; - condition_flags[104] = options->lower_unpack_snorm_2x16; - condition_flags[105] = options->lower_unpack_snorm_4x8; - condition_flags[106] = options->lower_pack_split; - condition_flags[107] = options->lower_isign; - condition_flags[108] = !options->lower_isign; - condition_flags[109] = options->lower_fsign; - condition_flags[110] = !options->has_imul24; - condition_flags[111] = !options->has_umul24; - condition_flags[112] = !options->has_umad24; - condition_flags[113] = options->has_imul24; - condition_flags[114] = options->has_umad24; - condition_flags[115] = options->has_umul24; - condition_flags[116] = !options->lower_uadd_sat && !(options->lower_int64_options & nir_lower_iadd64); - condition_flags[117] = !options->lower_usub_sat; - condition_flags[118] = !options->lower_usub_sat && !(options->lower_int64_options & nir_lower_usub_sat64); - condition_flags[119] = options->lower_iadd_sat; - condition_flags[120] = options->support_8bit_alu; - condition_flags[121] = options->support_16bit_alu; - condition_flags[122] = options->lower_ldexp; - condition_flags[123] = !options->lower_bitfield_reverse; - condition_flags[124] = info->stage == MESA_SHADER_COMPUTE && info->cs.derivative_group == DERIVATIVE_GROUP_NONE; - condition_flags[125] = options->lower_fisnormal; - condition_flags[126] = !options->vectorize_vec2_16bit; - condition_flags[127] = options->has_fsub; - condition_flags[128] = options->has_fsub && !(options->lower_doubles_options & nir_lower_dsub); - condition_flags[129] = options->lower_fneg; - condition_flags[130] = options->has_isub || options->lower_ineg; - condition_flags[131] = options->lower_ineg; - condition_flags[132] = options->lower_iabs; - condition_flags[133] = options->has_iadd3; - condition_flags[134] = options->vectorize_vec2_16bit; - condition_flags[135] = options->fdot_replicates; - condition_flags[136] = options->lower_fround_even; - condition_flags[137] = (info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4; - condition_flags[138] = options->avoid_ternary_with_two_constants; - condition_flags[139] = !options->lower_insert_byte; - condition_flags[140] = !options->lower_insert_word; - condition_flags[141] = options->has_fused_comp_and_csel; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_algebraic_impl(function->impl, condition_flags, - &nir_opt_algebraic_late_table); - } - } - - return progress; -} - - -#include "nir.h" -#include "nir_builder.h" -#include "nir_search.h" -#include "nir_search_helpers.h" - -/* What follows is NIR algebraic transform code for the following 19 - * transforms: - * ('fmul', ('fneg', 'a'), ('fneg', 'b')) => ('fmul', 'a', 'b') - * ('ffma', ('fneg', 'a'), ('fneg', 'b'), 'c') => ('ffma', 'a', 'b', 'c') - * ('fdot2_replicated', ('fneg', 'a'), ('fneg', 'b')) => ('fdot2_replicated', 'a', 'b') - * ('fdot3_replicated', ('fneg', 'a'), ('fneg', 'b')) => ('fdot3_replicated', 'a', 'b') - * ('fdot4_replicated', ('fneg', 'a'), ('fneg', 'b')) => ('fdot4_replicated', 'a', 'b') - * ('fneg', ('fneg', 'a')) => a - * ('fneg', ('fmul(is_used_once)', 'a', 'b')) => ('fmul', ('fneg', 'a'), 'b') - * ('fabs', ('fmul(is_used_once)', 'a', 'b')) => ('fmul', ('fabs', 'a'), ('fabs', 'b')) - * ('fneg', ('ffma(is_used_once)', 'a', 'b', 'c')) => ('ffma', ('fneg', 'a'), 'b', ('fneg', 'c')) - * ('fneg', ('flrp(is_used_once)', 'a', 'b', 'c')) => ('flrp', ('fneg', 'a'), ('fneg', 'b'), 'c') - * ('fneg', ('~fadd(is_used_once)', 'a', 'b')) => ('fadd', ('fneg', 'a'), ('fneg', 'b')) - * ('fneg', ('fmin(is_used_once)', 'a', 'b')) => ('fmax', ('fneg', 'a'), ('fneg', 'b')) - * ('fneg', ('fmax(is_used_once)', 'a', 'b')) => ('fmin', ('fneg', 'a'), ('fneg', 'b')) - * ('fneg', ('fdot2_replicated(is_used_once)', 'a', 'b')) => ('fdot2_replicated', ('fneg', 'a'), 'b') - * ('fneg', ('fdot3_replicated(is_used_once)', 'a', 'b')) => ('fdot3_replicated', ('fneg', 'a'), 'b') - * ('fneg', ('fdot4_replicated(is_used_once)', 'a', 'b')) => ('fdot4_replicated', ('fneg', 'a'), 'b') - * ('fneg', ('fdph_replicated(is_used_once)', 'a', 'b')) => ('fdph_replicated', 'a', ('fneg', 'b')) - * ('fneg', ('fsign(is_used_once)', 'a')) => ('fsign', ('fneg', 'a')) - * ('fabs', ('fsign(is_used_once)', 'a')) => ('fsign', ('fabs', 'a')) - */ - - -static const nir_search_value_union nir_opt_algebraic_distribute_src_mods_values[] = { - /* ('fmul', ('fneg', 'a'), ('fneg', 'b')) => ('fmul', 'a', 'b') */ - { .variable = { - { nir_search_value_variable, -2 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 0 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -2 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 2 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 1, 3 }, - -1, - } }, - - /* replace2381_0 -> 0 in the cache */ - /* replace2381_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 0, 2 }, - -1, - } }, - - /* ('ffma', ('fneg', 'a'), ('fneg', 'b'), 'c') => ('ffma', 'a', 'b', 'c') */ - { .variable = { - { nir_search_value_variable, -3 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 6 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 1, /* b */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 8 }, - -1, - } }, - { .variable = { - { nir_search_value_variable, -3 }, - 2, /* c */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 7, 9, 10 }, - -1, - } }, - - /* replace2382_0 -> 6 in the cache */ - /* replace2382_1 -> 8 in the cache */ - /* replace2382_2 -> 10 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 6, 8, 10 }, - -1, - } }, - - /* ('fdot2_replicated', ('fneg', 'a'), ('fneg', 'b')) => ('fdot2_replicated', 'a', 'b') */ - /* search2383_0_0 -> 0 in the cache */ - /* search2383_0 -> 1 in the cache */ - /* search2383_1_0 -> 2 in the cache */ - /* search2383_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2_replicated, - 0, 1, - { 1, 3 }, - -1, - } }, - - /* replace2383_0 -> 0 in the cache */ - /* replace2383_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2_replicated, - 0, 1, - { 0, 2 }, - -1, - } }, - - /* ('fdot3_replicated', ('fneg', 'a'), ('fneg', 'b')) => ('fdot3_replicated', 'a', 'b') */ - /* search2384_0_0 -> 0 in the cache */ - /* search2384_0 -> 1 in the cache */ - /* search2384_1_0 -> 2 in the cache */ - /* search2384_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3_replicated, - 0, 1, - { 1, 3 }, - -1, - } }, - - /* replace2384_0 -> 0 in the cache */ - /* replace2384_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3_replicated, - 0, 1, - { 0, 2 }, - -1, - } }, - - /* ('fdot4_replicated', ('fneg', 'a'), ('fneg', 'b')) => ('fdot4_replicated', 'a', 'b') */ - /* search2385_0_0 -> 0 in the cache */ - /* search2385_0 -> 1 in the cache */ - /* search2385_1_0 -> 2 in the cache */ - /* search2385_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4_replicated, - 0, 1, - { 1, 3 }, - -1, - } }, - - /* replace2385_0 -> 0 in the cache */ - /* replace2385_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4_replicated, - 0, 1, - { 0, 2 }, - -1, - } }, - - /* ('fneg', ('fneg', 'a')) => a */ - { .variable = { - { nir_search_value_variable, -1 }, - 0, /* a */ - false, - nir_type_invalid, - -1, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 20 }, - -1, - } }, - - /* replace2386 -> 19 in the cache */ - - /* ('fneg', ('fmul(is_used_once)', 'a', 'b')) => ('fmul', ('fneg', 'a'), 'b') */ - /* search2387_0_0 -> 0 in the cache */ - /* search2387_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 22 }, - -1, - } }, - - /* replace2387_0_0 -> 0 in the cache */ - /* replace2387_0 -> 1 in the cache */ - /* replace2387_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 1, 2 }, - -1, - } }, - - /* ('fabs', ('fmul(is_used_once)', 'a', 'b')) => ('fmul', ('fabs', 'a'), ('fabs', 'b')) */ - /* search2388_0_0 -> 0 in the cache */ - /* search2388_0_1 -> 2 in the cache */ - /* search2388_0 -> 22 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 1, - { 22 }, - -1, - } }, - - /* replace2388_0_0 -> 0 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 0 }, - -1, - } }, - /* replace2388_1_0 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 2 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmul, - 0, 1, - { 26, 27 }, - -1, - } }, - - /* ('fneg', ('ffma(is_used_once)', 'a', 'b', 'c')) => ('ffma', ('fneg', 'a'), 'b', ('fneg', 'c')) */ - /* search2389_0_0 -> 6 in the cache */ - /* search2389_0_1 -> 8 in the cache */ - /* search2389_0_2 -> 10 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 6, 8, 10 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 29 }, - -1, - } }, - - /* replace2389_0_0 -> 6 in the cache */ - /* replace2389_0 -> 7 in the cache */ - /* replace2389_1 -> 8 in the cache */ - /* replace2389_2_0 -> 10 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 10 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_ffma, - 0, 1, - { 7, 8, 31 }, - -1, - } }, - - /* ('fneg', ('flrp(is_used_once)', 'a', 'b', 'c')) => ('flrp', ('fneg', 'a'), ('fneg', 'b'), 'c') */ - /* search2390_0_0 -> 6 in the cache */ - /* search2390_0_1 -> 8 in the cache */ - /* search2390_0_2 -> 10 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 6, 8, 10 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 33 }, - -1, - } }, - - /* replace2390_0_0 -> 6 in the cache */ - /* replace2390_0 -> 7 in the cache */ - /* replace2390_1_0 -> 8 in the cache */ - /* replace2390_1 -> 9 in the cache */ - /* replace2390_2 -> 10 in the cache */ - { .expression = { - { nir_search_value_expression, -3 }, - false, - false, - false, - nir_op_flrp, - -1, 0, - { 7, 9, 10 }, - -1, - } }, - - /* ('fneg', ('~fadd(is_used_once)', 'a', 'b')) => ('fadd', ('fneg', 'a'), ('fneg', 'b')) */ - /* search2391_0_0 -> 0 in the cache */ - /* search2391_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - true, - false, - false, - nir_op_fadd, - 0, 1, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 36 }, - -1, - } }, - - /* replace2391_0_0 -> 0 in the cache */ - /* replace2391_0 -> 1 in the cache */ - /* replace2391_1_0 -> 2 in the cache */ - /* replace2391_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fadd, - 0, 1, - { 1, 3 }, - -1, - } }, - - /* ('fneg', ('fmin(is_used_once)', 'a', 'b')) => ('fmax', ('fneg', 'a'), ('fneg', 'b')) */ - /* search2392_0_0 -> 0 in the cache */ - /* search2392_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 39 }, - -1, - } }, - - /* replace2392_0_0 -> 0 in the cache */ - /* replace2392_0 -> 1 in the cache */ - /* replace2392_1_0 -> 2 in the cache */ - /* replace2392_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 1, 3 }, - -1, - } }, - - /* ('fneg', ('fmax(is_used_once)', 'a', 'b')) => ('fmin', ('fneg', 'a'), ('fneg', 'b')) */ - /* search2393_0_0 -> 0 in the cache */ - /* search2393_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmax, - 0, 1, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 42 }, - -1, - } }, - - /* replace2393_0_0 -> 0 in the cache */ - /* replace2393_0 -> 1 in the cache */ - /* replace2393_1_0 -> 2 in the cache */ - /* replace2393_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fmin, - 0, 1, - { 1, 3 }, - -1, - } }, - - /* ('fneg', ('fdot2_replicated(is_used_once)', 'a', 'b')) => ('fdot2_replicated', ('fneg', 'a'), 'b') */ - /* search2394_0_0 -> 0 in the cache */ - /* search2394_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2_replicated, - 0, 1, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 45 }, - -1, - } }, - - /* replace2394_0_0 -> 0 in the cache */ - /* replace2394_0 -> 1 in the cache */ - /* replace2394_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot2_replicated, - 0, 1, - { 1, 2 }, - -1, - } }, - - /* ('fneg', ('fdot3_replicated(is_used_once)', 'a', 'b')) => ('fdot3_replicated', ('fneg', 'a'), 'b') */ - /* search2395_0_0 -> 0 in the cache */ - /* search2395_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3_replicated, - 0, 1, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 48 }, - -1, - } }, - - /* replace2395_0_0 -> 0 in the cache */ - /* replace2395_0 -> 1 in the cache */ - /* replace2395_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot3_replicated, - 0, 1, - { 1, 2 }, - -1, - } }, - - /* ('fneg', ('fdot4_replicated(is_used_once)', 'a', 'b')) => ('fdot4_replicated', ('fneg', 'a'), 'b') */ - /* search2396_0_0 -> 0 in the cache */ - /* search2396_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4_replicated, - 0, 1, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 1, - { 51 }, - -1, - } }, - - /* replace2396_0_0 -> 0 in the cache */ - /* replace2396_0 -> 1 in the cache */ - /* replace2396_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdot4_replicated, - 0, 1, - { 1, 2 }, - -1, - } }, - - /* ('fneg', ('fdph_replicated(is_used_once)', 'a', 'b')) => ('fdph_replicated', 'a', ('fneg', 'b')) */ - /* search2397_0_0 -> 0 in the cache */ - /* search2397_0_1 -> 2 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdph_replicated, - -1, 0, - { 0, 2 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 54 }, - -1, - } }, - - /* replace2397_0 -> 0 in the cache */ - /* replace2397_1_0 -> 2 in the cache */ - /* replace2397_1 -> 3 in the cache */ - { .expression = { - { nir_search_value_expression, -2 }, - false, - false, - false, - nir_op_fdph_replicated, - -1, 0, - { 0, 3 }, - -1, - } }, - - /* ('fneg', ('fsign(is_used_once)', 'a')) => ('fsign', ('fneg', 'a')) */ - /* search2398_0_0 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 19 }, - 0, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fneg, - -1, 0, - { 57 }, - -1, - } }, - - /* replace2398_0_0 -> 19 in the cache */ - /* replace2398_0 -> 20 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 20 }, - -1, - } }, - - /* ('fabs', ('fsign(is_used_once)', 'a')) => ('fsign', ('fabs', 'a')) */ - /* search2399_0_0 -> 19 in the cache */ - /* search2399_0 -> 57 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 57 }, - -1, - } }, - - /* replace2399_0_0 -> 19 in the cache */ - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fabs, - -1, 0, - { 19 }, - -1, - } }, - { .expression = { - { nir_search_value_expression, -1 }, - false, - false, - false, - nir_op_fsign, - -1, 0, - { 61 }, - -1, - } }, - -}; - -static const nir_search_expression_cond nir_opt_algebraic_distribute_src_mods_expression_cond[] = { - (is_used_once), -}; - - -static const struct transform nir_opt_algebraic_distribute_src_mods_transforms[] = { - { ~0, ~0, ~0 }, /* Sentinel */ - - { 23, 24, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 21, 19, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 30, 32, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 46, 47, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 49, 50, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 52, 53, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 34, 35, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 37, 38, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 40, 41, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 43, 44, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 55, 56, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 58, 59, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 25, 28, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 60, 62, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 4, 5, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 11, 12, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 13, 14, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 15, 16, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - - { 17, 18, 0 }, - { ~0, ~0, ~0 }, /* Sentinel */ - -}; - -static const struct per_op_table nir_opt_algebraic_distribute_src_mods_pass_op_table[nir_num_search_ops] = { - [nir_op_fmul] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 2, - 2, - 2, - 28, - }, - }, - [nir_op_fneg] = { - .filter = (const uint16_t []) { - 0, - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 2, - 0, - 0, - 1, - 3, - 4, - 5, - 6, - }, - - .num_filtered_states = 13, - .table = (const uint16_t []) { - - 3, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - }, - }, - [nir_op_ffma] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 4, - 4, - 4, - 4, - 4, - 4, - 29, - 29, - }, - }, - [nir_op_fdot2_replicated] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 5, - 5, - 5, - 30, - }, - }, - [nir_op_fdot3_replicated] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 6, - 6, - 6, - 31, - }, - }, - [nir_op_fdot4_replicated] = { - .filter = (const uint16_t []) { - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 2, - .table = (const uint16_t []) { - - 7, - 7, - 7, - 32, - }, - }, - [nir_op_fabs] = { - .filter = (const uint16_t []) { - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - }, - - .num_filtered_states = 3, - .table = (const uint16_t []) { - - 0, - 26, - 27, - }, - }, - [nir_op_flrp] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 8, - }, - }, - [nir_op_fadd] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 9, - }, - }, - [nir_op_fmin] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 10, - }, - }, - [nir_op_fmax] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 11, - }, - }, - [nir_op_fdph_replicated] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 12, - }, - }, - [nir_op_fsign] = { - .filter = NULL, - - .num_filtered_states = 1, - .table = (const uint16_t []) { - - 13, - }, - }, -}; - -/* Mapping from state index to offset in transforms (0 being no transforms) */ -static const uint16_t nir_opt_algebraic_distribute_src_mods_transform_offsets[] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 3, - 5, - 7, - 9, - 11, - 13, - 15, - 17, - 19, - 21, - 23, - 25, - 27, - 29, - 31, - 33, - 35, - 37, -}; - -static const nir_algebraic_table nir_opt_algebraic_distribute_src_mods_table = { - .transforms = nir_opt_algebraic_distribute_src_mods_transforms, - .transform_offsets = nir_opt_algebraic_distribute_src_mods_transform_offsets, - .pass_op_table = nir_opt_algebraic_distribute_src_mods_pass_op_table, - .values = nir_opt_algebraic_distribute_src_mods_values, - .expression_cond = nir_opt_algebraic_distribute_src_mods_expression_cond, - .variable_cond = NULL, -}; - -bool -nir_opt_algebraic_distribute_src_mods(nir_shader *shader) -{ - bool progress = false; - bool condition_flags[142]; - const nir_shader_compiler_options *options = shader->options; - const shader_info *info = &shader->info; - (void) options; - (void) info; - - /* This is not a great place for this, but it seems to be the best place - * for it. Check that at most one kind of lowering is requested for - * bitfield extract and bitfield insert. Otherwise the lowering can fight - * with each other and optimizations. - */ - assert((int)options->lower_bitfield_extract + - (int)options->lower_bitfield_extract_to_shifts <= 1); - assert((int)options->lower_bitfield_insert + - (int)options->lower_bitfield_insert_to_shifts + - (int)options->lower_bitfield_insert_to_bitfield_select <= 1); - - - STATIC_ASSERT(63 == ARRAY_SIZE(nir_opt_algebraic_distribute_src_mods_values)); - condition_flags[0] = true; - condition_flags[1] = !options->lower_bitops; - condition_flags[2] = options->lower_bitops; - condition_flags[3] = !options->lower_bitops && (options->lower_int64_options & (nir_lower_imul64 | nir_lower_shift64)) == nir_lower_imul64; - condition_flags[4] = options->lower_mul_2x32_64; - condition_flags[5] = !options->lower_ftrunc || options->lower_ffloor; - condition_flags[6] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 16); - condition_flags[7] = !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[8] = !options->lower_iadd_sat; - condition_flags[9] = !options->lower_uadd_sat; - condition_flags[10] = options->has_fmulz && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[11] = !options->has_sdot_4x8; - condition_flags[12] = !options->has_udot_4x8; - condition_flags[13] = !options->has_sudot_4x8; - condition_flags[14] = !options->has_dot_2x16; - condition_flags[15] = options->lower_flrp16; - condition_flags[16] = !options->lower_flrp16; - condition_flags[17] = options->lower_flrp32; - condition_flags[18] = !options->lower_flrp32; - condition_flags[19] = options->lower_flrp64; - condition_flags[20] = !options->lower_flrp64; - condition_flags[21] = options->lower_ftrunc; - condition_flags[22] = options->lower_ftrunc || (options->lower_doubles_options & nir_lower_dtrunc); - condition_flags[23] = options->lower_ffloor; - condition_flags[24] = (options->lower_ffloor || (options->lower_doubles_options & nir_lower_dfloor)) && !(options->lower_doubles_options & nir_lower_dfract); - condition_flags[25] = !options->lower_ffloor; - condition_flags[26] = !options->lower_ffloor && !(options->lower_doubles_options & nir_lower_dfloor); - condition_flags[27] = options->lower_ffract; - condition_flags[28] = options->lower_ffract || (options->lower_doubles_options & nir_lower_dfract); - condition_flags[29] = options->lower_fceil; - condition_flags[30] = options->lower_ffma16; - condition_flags[31] = options->lower_ffma32; - condition_flags[32] = options->lower_ffma64; - condition_flags[33] = options->fuse_ffma16; - condition_flags[34] = options->fuse_ffma32; - condition_flags[35] = options->fuse_ffma64; - condition_flags[36] = options->lower_fdph; - condition_flags[37] = !options->lower_fdph; - condition_flags[38] = options->lower_fdot; - condition_flags[39] = !options->lower_fsat; - condition_flags[40] = !options->lower_iabs; - condition_flags[41] = options->lower_fsat; - condition_flags[42] = !options->lower_fsat && !nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32); - condition_flags[43] = !options->lower_fsign; - condition_flags[44] = options->lower_umax; - condition_flags[45] = options->lower_umin; - condition_flags[46] = !options->lower_umax; - condition_flags[47] = !options->lower_umin; - condition_flags[48] = options->lower_scmp; - condition_flags[49] = options->lower_vector_cmp; - condition_flags[50] = !options->lower_pack_64_2x32_split; - condition_flags[51] = !options->lower_rotate; - condition_flags[52] = options->lower_rotate; - condition_flags[53] = options->lower_fpow; - condition_flags[54] = !options->lower_fpow; - condition_flags[55] = options->lower_fdiv; - condition_flags[56] = options->lower_fsqrt; - condition_flags[57] = !options->lower_fsqrt; - condition_flags[58] = options->lower_sincos; - condition_flags[59] = !(options->lower_doubles_options & nir_lower_fp64_full_software); - condition_flags[60] = !options->lower_extract_byte; - condition_flags[61] = !options->lower_extract_word; - condition_flags[62] = options->has_pack_32_4x8; - condition_flags[63] = options->lower_pack_64_2x32_split; - condition_flags[64] = options->lower_pack_32_2x16_split; - condition_flags[65] = options->has_pack_half_2x16_rtz; - condition_flags[66] = options->lower_unpack_64_2x32_split; - condition_flags[67] = options->lower_unpack_32_2x16_split; - condition_flags[68] = options->has_find_msb_rev; - condition_flags[69] = !options->lower_find_msb_to_reverse; - condition_flags[70] = !options->lower_find_lsb; - condition_flags[71] = options->lower_fmod; - condition_flags[72] = options->lower_uadd_carry; - condition_flags[73] = options->lower_usub_borrow; - condition_flags[74] = options->lower_bitfield_insert; - condition_flags[75] = options->lower_hadd; - condition_flags[76] = options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[77] = options->lower_mul_32x16; - condition_flags[78] = options->lower_uadd_sat || (options->lower_int64_options & nir_lower_iadd64) != 0; - condition_flags[79] = options->lower_uadd_sat; - condition_flags[80] = options->lower_usub_sat; - condition_flags[81] = (options->lower_int64_options & nir_lower_usub_sat64) != 0; - condition_flags[82] = (options->lower_int64_options & nir_lower_iadd_sat64) != 0; - condition_flags[83] = (options->lower_int64_options & nir_lower_minmax64) != 0; - condition_flags[84] = (options->lower_int64_options & nir_lower_icmp64) != 0; - condition_flags[85] = options->lower_bitfield_insert_to_shifts; - condition_flags[86] = options->lower_bitfield_insert_to_bitfield_select; - condition_flags[87] = options->lower_bitfield_extract; - condition_flags[88] = options->lower_bitfield_insert_to_bitfield_select || options->lower_bitfield_insert; - condition_flags[89] = options->lower_bitfield_extract_to_shifts; - condition_flags[90] = options->lower_ifind_msb; - condition_flags[91] = options->lower_find_msb_to_reverse; - condition_flags[92] = options->lower_ifind_msb_to_uclz; - condition_flags[93] = options->lower_ufind_msb_to_uclz; - condition_flags[94] = options->lower_uclz; - condition_flags[95] = options->lower_find_lsb; - condition_flags[96] = options->lower_extract_byte; - condition_flags[97] = options->lower_extract_word; - condition_flags[98] = options->lower_pack_unorm_2x16; - condition_flags[99] = options->lower_pack_unorm_4x8; - condition_flags[100] = options->lower_pack_snorm_2x16; - condition_flags[101] = options->lower_pack_snorm_4x8; - condition_flags[102] = options->lower_unpack_unorm_2x16; - condition_flags[103] = options->lower_unpack_unorm_4x8; - condition_flags[104] = options->lower_unpack_snorm_2x16; - condition_flags[105] = options->lower_unpack_snorm_4x8; - condition_flags[106] = options->lower_pack_split; - condition_flags[107] = options->lower_isign; - condition_flags[108] = !options->lower_isign; - condition_flags[109] = options->lower_fsign; - condition_flags[110] = !options->has_imul24; - condition_flags[111] = !options->has_umul24; - condition_flags[112] = !options->has_umad24; - condition_flags[113] = options->has_imul24; - condition_flags[114] = options->has_umad24; - condition_flags[115] = options->has_umul24; - condition_flags[116] = !options->lower_uadd_sat && !(options->lower_int64_options & nir_lower_iadd64); - condition_flags[117] = !options->lower_usub_sat; - condition_flags[118] = !options->lower_usub_sat && !(options->lower_int64_options & nir_lower_usub_sat64); - condition_flags[119] = options->lower_iadd_sat; - condition_flags[120] = options->support_8bit_alu; - condition_flags[121] = options->support_16bit_alu; - condition_flags[122] = options->lower_ldexp; - condition_flags[123] = !options->lower_bitfield_reverse; - condition_flags[124] = info->stage == MESA_SHADER_COMPUTE && info->cs.derivative_group == DERIVATIVE_GROUP_NONE; - condition_flags[125] = options->lower_fisnormal; - condition_flags[126] = !options->vectorize_vec2_16bit; - condition_flags[127] = options->has_fsub; - condition_flags[128] = options->has_fsub && !(options->lower_doubles_options & nir_lower_dsub); - condition_flags[129] = options->lower_fneg; - condition_flags[130] = options->has_isub || options->lower_ineg; - condition_flags[131] = options->lower_ineg; - condition_flags[132] = options->lower_iabs; - condition_flags[133] = options->has_iadd3; - condition_flags[134] = options->vectorize_vec2_16bit; - condition_flags[135] = options->fdot_replicates; - condition_flags[136] = options->lower_fround_even; - condition_flags[137] = (info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4; - condition_flags[138] = options->avoid_ternary_with_two_constants; - condition_flags[139] = !options->lower_insert_byte; - condition_flags[140] = !options->lower_insert_word; - condition_flags[141] = options->has_fused_comp_and_csel; - - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_algebraic_impl(function->impl, condition_flags, - &nir_opt_algebraic_distribute_src_mods_table); - } - } - - return progress; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_algebraic.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_algebraic.py deleted file mode 100644 index 96c3e47..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_algebraic.py +++ /dev/null @@ -1,3190 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2014 Intel Corporation -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. - -from collections import OrderedDict -import nir_algebraic -from nir_opcodes import type_sizes -import itertools -import struct -from math import pi -import math - -# Convenience variables -a = 'a' -b = 'b' -c = 'c' -d = 'd' -e = 'e' - -signed_zero_inf_nan_preserve_16 = 'nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 16)' -signed_zero_inf_nan_preserve_32 = 'nir_is_float_control_signed_zero_inf_nan_preserve(info->float_controls_execution_mode, 32)' - -ignore_exact = nir_algebraic.ignore_exact - -# Written in the form (, ) where is an expression -# and is either an expression or a value. An expression is -# defined as a tuple of the form ([~], , , , ) -# where each source is either an expression or a value. A value can be -# either a numeric constant or a string representing a variable name. -# -# If the opcode in a search expression is prefixed by a '~' character, this -# indicates that the operation is inexact. Such operations will only get -# applied to SSA values that do not have the exact bit set. This should be -# used by by any optimizations that are not bit-for-bit exact. It should not, -# however, be used for backend-requested lowering operations as those need to -# happen regardless of precision. -# -# Variable names are specified as "[#]name[@type][(cond)][.swiz]" where: -# "#" indicates that the given variable will only match constants, -# type indicates that the given variable will only match values from ALU -# instructions with the given output type, -# (cond) specifies an additional condition function (see nir_search_helpers.h), -# swiz is a swizzle applied to the variable (only in the expression) -# -# For constants, you have to be careful to make sure that it is the right -# type because python is unaware of the source and destination types of the -# opcodes. -# -# All expression types can have a bit-size specified. For opcodes, this -# looks like "op@32", for variables it is "a@32" or "a@uint32" to specify a -# type and size. In the search half of the expression this indicates that it -# should only match that particular bit-size. In the replace half of the -# expression this indicates that the constructed value should have that -# bit-size. -# -# If the opcode in a replacement expression is prefixed by a '!' character, -# this indicated that the new expression will be marked exact. -# -# A special condition "many-comm-expr" can be used with expressions to note -# that the expression and its subexpressions have more commutative expressions -# than nir_replace_instr can handle. If this special condition is needed with -# another condition, the two can be separated by a comma (e.g., -# "(many-comm-expr,is_used_once)"). - -# based on https://web.archive.org/web/20180105155939/http://forum.devmaster.net/t/fast-and-accurate-sine-cosine/9648 -def lowered_sincos(c): - x = ('fsub', ('fmul', 2.0, ('ffract', ('fadd', ('fmul', 0.5 / pi, a), c))), 1.0) - x = ('fmul', ('fsub', x, ('fmul', x, ('fabs', x))), 4.0) - return ('ffma', ('ffma', x, ('fabs', x), ('fneg', x)), 0.225, x) - -def intBitsToFloat(i): - return struct.unpack('!f', struct.pack('!I', i))[0] - -optimizations = [ - - (('imul', a, '#b(is_pos_power_of_two)'), ('ishl', a, ('find_lsb', b)), '!options->lower_bitops'), - (('imul', 'a@8', 0x80), ('ishl', a, 7), '!options->lower_bitops'), - (('imul', 'a@16', 0x8000), ('ishl', a, 15), '!options->lower_bitops'), - (('imul', 'a@32', 0x80000000), ('ishl', a, 31), '!options->lower_bitops'), - (('imul', 'a@64', 0x8000000000000000), ('ishl', a, 63), '!options->lower_bitops'), - (('imul', a, '#b(is_neg_power_of_two)'), ('ineg', ('ishl', a, ('find_lsb', ('iabs', b)))), '!options->lower_bitops'), - (('ishl', a, '#b'), ('imul', a, ('ishl', 1, b)), 'options->lower_bitops'), - - (('imul@64', a, '#b(is_bitcount2)'), ('iadd', ('ishl', a, ('ufind_msb', b)), ('ishl', a, ('find_lsb', b))), - '!options->lower_bitops && (options->lower_int64_options & (nir_lower_imul64 | nir_lower_shift64)) == nir_lower_imul64'), - - (('unpack_64_2x32_split_x', ('imul_2x32_64(is_used_once)', a, b)), ('imul', a, b)), - (('unpack_64_2x32_split_x', ('umul_2x32_64(is_used_once)', a, b)), ('imul', a, b)), - (('imul_2x32_64', a, b), ('pack_64_2x32_split', ('imul', a, b), ('imul_high', a, b)), 'options->lower_mul_2x32_64'), - (('umul_2x32_64', a, b), ('pack_64_2x32_split', ('imul', a, b), ('umul_high', a, b)), 'options->lower_mul_2x32_64'), - (('udiv', a, 1), a), - (('idiv', a, 1), a), - (('umod', a, 1), 0), - (('imod', a, 1), 0), - (('imod', a, -1), 0), - (('irem', a, 1), 0), - (('irem', a, -1), 0), - (('udiv', a, '#b(is_pos_power_of_two)'), ('ushr', a, ('find_lsb', b)), '!options->lower_bitops'), - (('idiv', a, '#b(is_pos_power_of_two)'), ('imul', ('isign', a), ('ushr', ('iabs', a), ('find_lsb', b))), '!options->lower_bitops'), - (('idiv', a, '#b(is_neg_power_of_two)'), ('ineg', ('imul', ('isign', a), ('ushr', ('iabs', a), ('find_lsb', ('iabs', b))))), '!options->lower_bitops'), - (('umod', a, '#b(is_pos_power_of_two)'), ('iand', a, ('isub', b, 1)), '!options->lower_bitops'), - (('imod', a, '#b(is_pos_power_of_two)'), ('iand', a, ('isub', b, 1)), '!options->lower_bitops'), - (('imod', a, '#b(is_neg_power_of_two)'), ('bcsel', ('ieq', ('ior', a, b), b), 0, ('ior', a, b)), '!options->lower_bitops'), - # 'irem(a, b)' -> 'a - ((a < 0 ? (a + b - 1) : a) & -b)' - (('irem', a, '#b(is_pos_power_of_two)'), - ('isub', a, ('iand', ('bcsel', ('ilt', a, 0), ('iadd', a, ('isub', b, 1)), a), ('ineg', b))), - '!options->lower_bitops'), - (('irem', a, '#b(is_neg_power_of_two)'), ('irem', a, ('iabs', b)), '!options->lower_bitops'), - - (('~fmul', ('fsign', a), ('ffloor', ('fadd', ('fabs', a), 0.5))), ('ftrunc', ('fadd', a, ('fmul', ('fsign', a), 0.5))), '!options->lower_ftrunc || options->lower_ffloor'), - - (('~fneg', ('fneg', a)), a), - (('ineg', ('ineg', a)), a), - (('fabs', ('fneg', a)), ('fabs', a)), - (('fabs', ('u2f', a)), ('u2f', a)), - (('iabs', ('iabs', a)), ('iabs', a)), - (('iabs', ('ineg', a)), ('iabs', a)), - (('~fadd', a, 0.0), a), - # a+0.0 is 'a' unless 'a' is denormal or -0.0. If it's only used by a - # floating point instruction, they should flush any input denormals and we - # can replace -0.0 with 0.0 if the float execution mode allows it. - (('fadd(is_only_used_as_float)', 'a@16', 0.0), a, '!'+signed_zero_inf_nan_preserve_16), - (('fadd(is_only_used_as_float)', 'a@32', 0.0), a, '!'+signed_zero_inf_nan_preserve_32), - (('iadd', a, 0), a), - (('iadd_sat', a, 0), a), - (('isub_sat', a, 0), a), - (('uadd_sat', a, 0), a), - (('usub_sat', a, 0), a), - (('usadd_4x8_vc4', a, 0), a), - (('usadd_4x8_vc4', a, ~0), ~0), - (('~fadd', ('fmul', a, b), ('fmul', a, c)), ('fmul', a, ('fadd', b, c))), - (('~fadd', ('fmulz', a, b), ('fmulz', a, c)), ('fmulz', a, ('fadd', b, c))), - (('~ffma', a, b, ('ffma(is_used_once)', a, c, d)), ('ffma', a, ('fadd', b, c), d)), - (('~ffma', a, b, ('fmul(is_used_once)', a, c)), ('fmul', a, ('fadd', b, c))), - (('~fadd', ('fmul(is_used_once)', a, b), ('ffma(is_used_once)', a, c, d)), ('ffma', a, ('fadd', b, c), d)), - (('~ffma', a, ('fmul(is_used_once)', b, c), ('fmul(is_used_once)', b, d)), ('fmul', b, ('ffma', a, c, d))), - (('~ffmaz', a, b, ('ffmaz(is_used_once)', a, c, d)), ('ffmaz', a, ('fadd', b, c), d)), - (('~ffmaz', a, b, ('fmulz(is_used_once)', a, c)), ('fmulz', a, ('fadd', b, c))), - (('~fadd', ('fmulz(is_used_once)', a, b), ('ffmaz(is_used_once)', a, c, d)), ('ffmaz', a, ('fadd', b, c), d)), - (('~ffmaz', a, ('fmulz(is_used_once)', b, c), ('fmulz(is_used_once)', b, d)), ('fmulz', b, ('ffmaz', a, c, d))), - (('iadd', ('imul', a, b), ('imul', a, c)), ('imul', a, ('iadd', b, c))), - (('iadd', ('ishl', b, a), ('ishl', c, a)), ('ishl', ('iadd', b, c), a)), - (('iand', ('ior', a, b), ('ior', a, c)), ('ior', a, ('iand', b, c))), - (('ior', ('iand', a, b), ('iand', a, c)), ('iand', a, ('ior', b, c))), - (('ieq', ('iand', a, '#b(is_pos_power_of_two)'), b), ('ine', ('iand', a, b), 0)), - (('ine', ('iand', a, '#b(is_pos_power_of_two)'), b), ('ieq', ('iand', a, b), 0)), - (('ieq', ('ushr(is_used_once)', a, '#b'), 0), ('ult', a, ('ishl', 1, b))), - (('ine', ('ushr(is_used_once)', a, '#b'), 0), ('uge', a, ('ishl', 1, b))), - (('~fadd', ('fneg', a), a), 0.0), - (('iadd', ('ineg', a), a), 0), - (('iadd', ('ineg', a), ('iadd', a, b)), b), - (('iadd', a, ('iadd', ('ineg', a), b)), b), - (('~fadd', ('fneg', a), ('fadd', a, b)), b), - (('~fadd', a, ('fadd', ('fneg', a), b)), b), - (('fadd', ('fsat', a), ('fsat', ('fneg', a))), ('fsat', ('fabs', a))), - (('~fmul', a, 0.0), 0.0), - # The only effect a*0.0 should have is when 'a' is infinity, -0.0 or NaN - (('fmul', 'a@16', 0.0), 0.0, '!'+signed_zero_inf_nan_preserve_16), - (('fmul', 'a@32', 0.0), 0.0, '!'+signed_zero_inf_nan_preserve_32), - (('fmulz', a, 0.0), 0.0), - (('fmulz', a, 'b(is_finite_not_zero)'), ('fmul', a, b), '!'+signed_zero_inf_nan_preserve_32), - (('fmulz', 'a(is_finite)', 'b(is_finite)'), ('fmul', a, b)), - (('fmulz', a, a), ('fmul', a, a)), - (('ffmaz', a, 'b(is_finite_not_zero)', c), ('ffma', a, b, c), '!'+signed_zero_inf_nan_preserve_32), - (('ffmaz', 'a(is_finite)', 'b(is_finite)', c), ('ffma', a, b, c)), - (('ffmaz', a, a, b), ('ffma', a, a, b)), - (('imul', a, 0), 0), - (('umul_unorm_4x8_vc4', a, 0), 0), - (('umul_unorm_4x8_vc4', a, ~0), a), - (('~fmul', a, 1.0), a), - (('~fmulz', a, 1.0), a), - # The only effect a*1.0 can have is flushing denormals. If it's only used by - # a floating point instruction, they should flush any input denormals and - # this multiplication isn't needed. - (('fmul(is_only_used_as_float)', a, 1.0), a), - (('imul', a, 1), a), - (('fmul', a, -1.0), ('fneg', a)), - (('imul', a, -1), ('ineg', a)), - # If a < 0: fsign(a)*a*a => -1*a*a => -a*a => abs(a)*a - # If a > 0: fsign(a)*a*a => 1*a*a => a*a => abs(a)*a - # If a == 0: fsign(a)*a*a => 0*0*0 => abs(0)*0 - # If a != a: fsign(a)*a*a => 0*NaN*NaN => abs(NaN)*NaN - (('fmul', ('fsign', a), ('fmul', a, a)), ('fmul', ('fabs', a), a)), - (('fmul', ('fmul', ('fsign', a), a), a), ('fmul', ('fabs', a), a)), - (('~ffma', 0.0, a, b), b), - (('ffma@16(is_only_used_as_float)', 0.0, a, b), b, '!'+signed_zero_inf_nan_preserve_16), - (('ffma@32(is_only_used_as_float)', 0.0, a, b), b, '!'+signed_zero_inf_nan_preserve_32), - (('ffmaz', 0.0, a, b), ('fadd', 0.0, b)), - (('~ffma', a, b, 0.0), ('fmul', a, b)), - (('ffma@16', a, b, 0.0), ('fmul', a, b), '!'+signed_zero_inf_nan_preserve_16), - (('ffma@32', a, b, 0.0), ('fmul', a, b), '!'+signed_zero_inf_nan_preserve_32), - (('ffmaz', a, b, 0.0), ('fmulz', a, b), '!'+signed_zero_inf_nan_preserve_32), - (('ffma', 1.0, a, b), ('fadd', a, b)), - (('ffmaz', 1.0, a, b), ('fadd', a, b), '!'+signed_zero_inf_nan_preserve_32), - (('ffma', -1.0, a, b), ('fadd', ('fneg', a), b)), - (('ffmaz', -1.0, a, b), ('fadd', ('fneg', a), b), '!'+signed_zero_inf_nan_preserve_32), - (('~ffma', '#a', '#b', c), ('fadd', ('fmul', a, b), c)), - (('~ffmaz', '#a', '#b', c), ('fadd', ('fmulz', a, b), c)), - (('~flrp', a, b, 0.0), a), - (('~flrp', a, b, 1.0), b), - (('~flrp', a, a, b), a), - (('~flrp', 0.0, a, b), ('fmul', a, b)), - - # flrp(a, a + b, c) => a + flrp(0, b, c) => a + (b * c) - (('~flrp', a, ('fadd(is_used_once)', a, b), c), ('fadd', ('fmul', b, c), a)), - - (('sdot_4x8_iadd', a, 0, b), b), - (('udot_4x8_uadd', a, 0, b), b), - (('sdot_4x8_iadd_sat', a, 0, b), b), - (('udot_4x8_uadd_sat', a, 0, b), b), - (('sdot_2x16_iadd', a, 0, b), b), - (('udot_2x16_uadd', a, 0, b), b), - (('sdot_2x16_iadd_sat', a, 0, b), b), - (('udot_2x16_uadd_sat', a, 0, b), b), - - # sudot_4x8_iadd is not commutative at all, so the patterns must be - # duplicated with zeros on each of the first positions. - (('sudot_4x8_iadd', a, 0, b), b), - (('sudot_4x8_iadd', 0, a, b), b), - (('sudot_4x8_iadd_sat', a, 0, b), b), - (('sudot_4x8_iadd_sat', 0, a, b), b), - - (('iadd', ('sdot_4x8_iadd(is_used_once)', a, b, '#c'), '#d'), ('sdot_4x8_iadd', a, b, ('iadd', c, d))), - (('iadd', ('udot_4x8_uadd(is_used_once)', a, b, '#c'), '#d'), ('udot_4x8_uadd', a, b, ('iadd', c, d))), - (('iadd', ('sudot_4x8_iadd(is_used_once)', a, b, '#c'), '#d'), ('sudot_4x8_iadd', a, b, ('iadd', c, d))), - (('iadd', ('sdot_2x16_iadd(is_used_once)', a, b, '#c'), '#d'), ('sdot_2x16_iadd', a, b, ('iadd', c, d))), - (('iadd', ('udot_2x16_uadd(is_used_once)', a, b, '#c'), '#d'), ('udot_2x16_uadd', a, b, ('iadd', c, d))), - - # Try to let constant folding eliminate the dot-product part. These are - # safe because the dot product cannot overflow 32 bits. - (('iadd', ('sdot_4x8_iadd', 'a(is_not_const)', b, 0), c), ('sdot_4x8_iadd', a, b, c)), - (('iadd', ('udot_4x8_uadd', 'a(is_not_const)', b, 0), c), ('udot_4x8_uadd', a, b, c)), - (('iadd', ('sudot_4x8_iadd', 'a(is_not_const)', b, 0), c), ('sudot_4x8_iadd', a, b, c)), - (('iadd', ('sudot_4x8_iadd', a, 'b(is_not_const)', 0), c), ('sudot_4x8_iadd', a, b, c)), - (('iadd', ('sdot_2x16_iadd', 'a(is_not_const)', b, 0), c), ('sdot_2x16_iadd', a, b, c)), - (('iadd', ('udot_2x16_uadd', 'a(is_not_const)', b, 0), c), ('udot_2x16_uadd', a, b, c)), - (('sdot_4x8_iadd', '#a', '#b', 'c(is_not_const)'), ('iadd', ('sdot_4x8_iadd', a, b, 0), c)), - (('udot_4x8_uadd', '#a', '#b', 'c(is_not_const)'), ('iadd', ('udot_4x8_uadd', a, b, 0), c)), - (('sudot_4x8_iadd', '#a', '#b', 'c(is_not_const)'), ('iadd', ('sudot_4x8_iadd', a, b, 0), c)), - (('sdot_2x16_iadd', '#a', '#b', 'c(is_not_const)'), ('iadd', ('sdot_2x16_iadd', a, b, 0), c)), - (('udot_2x16_uadd', '#a', '#b', 'c(is_not_const)'), ('iadd', ('udot_2x16_uadd', a, b, 0), c)), - (('sdot_4x8_iadd_sat', '#a', '#b', 'c(is_not_const)'), ('iadd_sat', ('sdot_4x8_iadd', a, b, 0), c), '!options->lower_iadd_sat'), - (('udot_4x8_uadd_sat', '#a', '#b', 'c(is_not_const)'), ('uadd_sat', ('udot_4x8_uadd', a, b, 0), c), '!options->lower_uadd_sat'), - (('sudot_4x8_iadd_sat', '#a', '#b', 'c(is_not_const)'), ('iadd_sat', ('sudot_4x8_iadd', a, b, 0), c), '!options->lower_iadd_sat'), - (('sdot_2x16_iadd_sat', '#a', '#b', 'c(is_not_const)'), ('iadd_sat', ('sdot_2x16_iadd', a, b, 0), c), '!options->lower_iadd_sat'), - (('udot_2x16_uadd_sat', '#a', '#b', 'c(is_not_const)'), ('uadd_sat', ('udot_2x16_uadd', a, b, 0), c), '!options->lower_uadd_sat'), - - # Optimize open-coded fmulz. - # (b==0.0 ? 0.0 : a) * (a==0.0 ? 0.0 : b) -> fmulz(a, b) - (('fmul@32', ('bcsel', ignore_exact('feq', b, 0.0), 0.0, a), ('bcsel', ignore_exact('feq', a, 0.0), 0.0, b)), - ('fmulz', a, b), 'options->has_fmulz && !'+signed_zero_inf_nan_preserve_32), - (('fmul@32', a, ('bcsel', ignore_exact('feq', a, 0.0), 0.0, '#b(is_not_const_zero)')), - ('fmulz', a, b), 'options->has_fmulz && !'+signed_zero_inf_nan_preserve_32), - - # ffma(b==0.0 ? 0.0 : a, a==0.0 ? 0.0 : b, c) -> ffmaz(a, b, c) - (('ffma@32', ('bcsel', ignore_exact('feq', b, 0.0), 0.0, a), ('bcsel', ignore_exact('feq', a, 0.0), 0.0, b), c), - ('ffmaz', a, b, c), 'options->has_fmulz && !'+signed_zero_inf_nan_preserve_32), - (('ffma@32', a, ('bcsel', ignore_exact('feq', a, 0.0), 0.0, '#b(is_not_const_zero)'), c), - ('ffmaz', a, b, c), 'options->has_fmulz && !'+signed_zero_inf_nan_preserve_32), - - # b == 0.0 ? 1.0 : fexp2(fmul(a, b)) -> fexp2(fmulz(a, b)) - (('bcsel', ignore_exact('feq', b, 0.0), 1.0, ('fexp2', ('fmul@32', a, b))), - ('fexp2', ('fmulz', a, b)), - 'options->has_fmulz && !'+signed_zero_inf_nan_preserve_32), -] - -# Shorthand for the expansion of just the dot product part of the [iu]dp4a -# instructions. -sdot_4x8_a_b = ('iadd', ('iadd', ('imul', ('extract_i8', a, 0), ('extract_i8', b, 0)), - ('imul', ('extract_i8', a, 1), ('extract_i8', b, 1))), - ('iadd', ('imul', ('extract_i8', a, 2), ('extract_i8', b, 2)), - ('imul', ('extract_i8', a, 3), ('extract_i8', b, 3)))) -udot_4x8_a_b = ('iadd', ('iadd', ('imul', ('extract_u8', a, 0), ('extract_u8', b, 0)), - ('imul', ('extract_u8', a, 1), ('extract_u8', b, 1))), - ('iadd', ('imul', ('extract_u8', a, 2), ('extract_u8', b, 2)), - ('imul', ('extract_u8', a, 3), ('extract_u8', b, 3)))) -sudot_4x8_a_b = ('iadd', ('iadd', ('imul', ('extract_i8', a, 0), ('extract_u8', b, 0)), - ('imul', ('extract_i8', a, 1), ('extract_u8', b, 1))), - ('iadd', ('imul', ('extract_i8', a, 2), ('extract_u8', b, 2)), - ('imul', ('extract_i8', a, 3), ('extract_u8', b, 3)))) -sdot_2x16_a_b = ('iadd', ('imul', ('extract_i16', a, 0), ('extract_i16', b, 0)), - ('imul', ('extract_i16', a, 1), ('extract_i16', b, 1))) -udot_2x16_a_b = ('iadd', ('imul', ('extract_u16', a, 0), ('extract_u16', b, 0)), - ('imul', ('extract_u16', a, 1), ('extract_u16', b, 1))) - -optimizations.extend([ - (('sdot_4x8_iadd', a, b, c), ('iadd', sdot_4x8_a_b, c), '!options->has_sdot_4x8'), - (('udot_4x8_uadd', a, b, c), ('iadd', udot_4x8_a_b, c), '!options->has_udot_4x8'), - (('sudot_4x8_iadd', a, b, c), ('iadd', sudot_4x8_a_b, c), '!options->has_sudot_4x8'), - (('sdot_2x16_iadd', a, b, c), ('iadd', sdot_2x16_a_b, c), '!options->has_dot_2x16'), - (('udot_2x16_uadd', a, b, c), ('iadd', udot_2x16_a_b, c), '!options->has_dot_2x16'), - - # For the unsigned dot-product, the largest possible value 4*(255*255) = - # 0x3f804, so we don't have to worry about that intermediate result - # overflowing. 0x100000000 - 0x3f804 = 0xfffc07fc. If c is a constant - # that is less than 0xfffc07fc, then the result cannot overflow ever. - (('udot_4x8_uadd_sat', a, b, '#c(is_ult_0xfffc07fc)'), ('udot_4x8_uadd', a, b, c)), - (('udot_4x8_uadd_sat', a, b, c), ('uadd_sat', udot_4x8_a_b, c), '!options->has_udot_4x8'), - - # For the signed dot-product, the largest positive value is 4*(-128*-128) = - # 0x10000, and the largest negative value is 4*(-128*127) = -0xfe00. We - # don't have to worry about that intermediate result overflowing or - # underflowing. - (('sdot_4x8_iadd_sat', a, b, c), ('iadd_sat', sdot_4x8_a_b, c), '!options->has_sdot_4x8'), - - (('sudot_4x8_iadd_sat', a, b, c), ('iadd_sat', sudot_4x8_a_b, c), '!options->has_sudot_4x8'), - - (('udot_2x16_uadd_sat', a, b, c), ('uadd_sat', udot_2x16_a_b, c), '!options->has_dot_2x16'), - (('sdot_2x16_iadd_sat', a, b, c), ('iadd_sat', sdot_2x16_a_b, c), '!options->has_dot_2x16'), -]) - -# Float sizes -for s in [16, 32, 64]: - optimizations.extend([ - (('~flrp@{}'.format(s), a, b, ('b2f', 'c@1')), ('bcsel', c, b, a), 'options->lower_flrp{}'.format(s)), - - (('~flrp@{}'.format(s), a, ('fadd', a, b), c), ('fadd', ('fmul', b, c), a), 'options->lower_flrp{}'.format(s)), - (('~flrp@{}'.format(s), ('fadd(is_used_once)', a, b), ('fadd(is_used_once)', a, c), d), ('fadd', ('flrp', b, c, d), a), 'options->lower_flrp{}'.format(s)), - (('~flrp@{}'.format(s), a, ('fmul(is_used_once)', a, b), c), ('fmul', ('flrp', 1.0, b, c), a), 'options->lower_flrp{}'.format(s)), - - (('~fadd@{}'.format(s), ('fmul', a, ('fadd', 1.0, ('fneg', c))), ('fmul', b, c)), ('flrp', a, b, c), '!options->lower_flrp{}'.format(s)), - # These are the same as the previous three rules, but it depends on - # 1-fsat(x) <=> fsat(1-x). See below. - (('~fadd@{}'.format(s), ('fmul', a, ('fsat', ('fadd', 1.0, ('fneg', c)))), ('fmul', b, ('fsat', c))), ('flrp', a, b, ('fsat', c)), '!options->lower_flrp{}'.format(s)), - (('~fadd@{}'.format(s), a, ('fmul', c, ('fadd', b, ('fneg', a)))), ('flrp', a, b, c), '!options->lower_flrp{}'.format(s)), - - (('~fadd@{}'.format(s), ('fmul', a, ('fadd', 1.0, ('fneg', ('b2f', 'c@1')))), ('fmul', b, ('b2f', c))), ('bcsel', c, b, a), 'options->lower_flrp{}'.format(s)), - (('~fadd@{}'.format(s), a, ('fmul', ('b2f', 'c@1'), ('fadd', b, ('fneg', a)))), ('bcsel', c, b, a), 'options->lower_flrp{}'.format(s)), - - (('~ffma@{}'.format(s), a, ('fadd', 1.0, ('fneg', ('b2f', 'c@1'))), ('fmul', b, ('b2f', 'c@1'))), ('bcsel', c, b, a)), - (('~ffma@{}'.format(s), b, ('b2f', 'c@1'), ('ffma', ('fneg', a), ('b2f', 'c@1'), a)), ('bcsel', c, b, a)), - - # These two aren't flrp lowerings, but do appear in some shaders. - (('~ffma@{}'.format(s), ('b2f', 'c@1'), ('fadd', b, ('fneg', a)), a), ('bcsel', c, b, a)), - (('~ffma@{}'.format(s), ('b2f', 'c@1'), ('ffma', ('fneg', a), b, d), ('fmul', a, b)), ('bcsel', c, d, ('fmul', a, b))), - - # 1 - ((1 - a) * (1 - b)) - # 1 - (1 - a - b + a*b) - # 1 - 1 + a + b - a*b - # a + b - a*b - # a + b*(1 - a) - # b*(1 - a) + 1*a - # flrp(b, 1, a) - (('~fadd@{}'.format(s), 1.0, ('fneg', ('fmul', ('fadd', 1.0, ('fneg', a)), ('fadd', 1.0, ('fneg', b))))), ('flrp', b, 1.0, a), '!options->lower_flrp{}'.format(s)), - ]) - -optimizations.extend([ - (('~flrp', ('fmul(is_used_once)', a, b), ('fmul(is_used_once)', a, c), d), ('fmul', ('flrp', b, c, d), a)), - - (('~flrp', a, 0.0, c), ('fadd', ('fmul', ('fneg', a), c), a)), - - (('ftrunc@16', a), ('bcsel', ('flt', a, 0.0), ('fneg', ('ffloor', ('fabs', a))), ('ffloor', ('fabs', a))), 'options->lower_ftrunc'), - (('ftrunc@32', a), ('bcsel', ('flt', a, 0.0), ('fneg', ('ffloor', ('fabs', a))), ('ffloor', ('fabs', a))), 'options->lower_ftrunc'), - (('ftrunc@64', a), ('bcsel', ('flt', a, 0.0), ('fneg', ('ffloor', ('fabs', a))), ('ffloor', ('fabs', a))), 'options->lower_ftrunc || (options->lower_doubles_options & nir_lower_dtrunc)'), - - (('ffloor@16', a), ('fsub', a, ('ffract', a)), 'options->lower_ffloor'), - (('ffloor@32', a), ('fsub', a, ('ffract', a)), 'options->lower_ffloor'), - (('ffloor@64', a), ('fsub', a, ('ffract', a)), '(options->lower_ffloor || (options->lower_doubles_options & nir_lower_dfloor)) && !(options->lower_doubles_options & nir_lower_dfract)'), - (('fadd@16', a, ('fadd@16', b, ('fneg', ('ffract', a)))), ('fadd@16', b, ('ffloor', a)), '!options->lower_ffloor'), - (('fadd@32', a, ('fadd@32', b, ('fneg', ('ffract', a)))), ('fadd@32', b, ('ffloor', a)), '!options->lower_ffloor'), - (('fadd@64', a, ('fadd@64', b, ('fneg', ('ffract', a)))), ('fadd@64', b, ('ffloor', a)), '!options->lower_ffloor && !(options->lower_doubles_options & nir_lower_dfloor)'), - (('fadd@16', a, ('fneg', ('ffract', a))), ('ffloor', a), '!options->lower_ffloor'), - (('fadd@32', a, ('fneg', ('ffract', a))), ('ffloor', a), '!options->lower_ffloor'), - (('fadd@64', a, ('fneg', ('ffract', a))), ('ffloor', a), '!options->lower_ffloor && !(options->lower_doubles_options & nir_lower_dfloor)'), - (('ffract@16', a), ('fsub', a, ('ffloor', a)), 'options->lower_ffract'), - (('ffract@32', a), ('fsub', a, ('ffloor', a)), 'options->lower_ffract'), - (('ffract@64', a), ('fsub', a, ('ffloor', a)), 'options->lower_ffract || (options->lower_doubles_options & nir_lower_dfract)'), - (('fceil', a), ('fneg', ('ffloor', ('fneg', a))), 'options->lower_fceil'), - (('ffma@16', a, b, c), ('fadd', ('fmul', a, b), c), 'options->lower_ffma16'), - (('ffma@32', a, b, c), ('fadd', ('fmul', a, b), c), 'options->lower_ffma32'), - (('ffma@64', a, b, c), ('fadd', ('fmul', a, b), c), 'options->lower_ffma64'), - (('ffmaz', a, b, c), ('fadd', ('fmulz', a, b), c), 'options->lower_ffma32'), - # Always lower inexact ffma, because it will be fused back by late optimizations (nir_opt_algebraic_late). - (('~ffma@16', a, b, c), ('fadd', ('fmul', a, b), c), 'options->fuse_ffma16'), - (('~ffma@32', a, b, c), ('fadd', ('fmul', a, b), c), 'options->fuse_ffma32'), - (('~ffma@64', a, b, c), ('fadd', ('fmul', a, b), c), 'options->fuse_ffma64'), - (('~ffmaz', a, b, c), ('fadd', ('fmulz', a, b), c), 'options->fuse_ffma32'), - - (('~fmul', ('fadd', ('iand', ('ineg', ('b2i', 'a@bool')), ('fmul', b, c)), '#d'), '#e'), - ('bcsel', a, ('fmul', ('fadd', ('fmul', b, c), d), e), ('fmul', d, e))), - - (('fdph', a, b), ('fdot4', ('vec4', 'a.x', 'a.y', 'a.z', 1.0), b), 'options->lower_fdph'), - - (('fdot4', a, 0.0), 0.0), - (('fdot3', a, 0.0), 0.0), - (('fdot2', a, 0.0), 0.0), - - (('fdot4', ('vec4', a, b, c, 1.0), d), ('fdph', ('vec3', a, b, c), d), '!options->lower_fdph'), - (('fdot4', ('vec4', a, 0.0, 0.0, 0.0), b), ('fmul', a, b)), - (('fdot4', ('vec4', a, b, 0.0, 0.0), c), ('fdot2', ('vec2', a, b), c)), - (('fdot4', ('vec4', a, b, c, 0.0), d), ('fdot3', ('vec3', a, b, c), d)), - - (('fdot3', ('vec3', a, 0.0, 0.0), b), ('fmul', a, b)), - (('fdot3', ('vec3', a, b, 0.0), c), ('fdot2', ('vec2', a, b), c)), - - (('fdot2', ('vec2', a, 0.0), b), ('fmul', a, b)), - (('fdot2', a, 1.0), ('fadd', 'a.x', 'a.y')), - - # Lower fdot to fsum when it is available - (('fdot2', a, b), ('fsum2', ('fmul', a, b)), 'options->lower_fdot'), - (('fdot3', a, b), ('fsum3', ('fmul', a, b)), 'options->lower_fdot'), - (('fdot4', a, b), ('fsum4', ('fmul', a, b)), 'options->lower_fdot'), - (('fsum2', a), ('fadd', 'a.x', 'a.y'), 'options->lower_fdot'), - - # If x >= 0 and x <= 1: fsat(1 - x) == 1 - fsat(x) trivially - # If x < 0: 1 - fsat(x) => 1 - 0 => 1 and fsat(1 - x) => fsat(> 1) => 1 - # If x > 1: 1 - fsat(x) => 1 - 1 => 0 and fsat(1 - x) => fsat(< 0) => 0 - (('~fadd', ('fneg(is_used_once)', ('fsat(is_used_once)', 'a(is_not_fmul)')), 1.0), ('fsat', ('fadd', 1.0, ('fneg', a)))), - - # (a * #b + #c) << #d - # ((a * #b) << #d) + (#c << #d) - # (a * (#b << #d)) + (#c << #d) - (('ishl', ('iadd', ('imul', a, '#b'), '#c'), '#d'), - ('iadd', ('imul', a, ('ishl', b, d)), ('ishl', c, d))), - - # (a * #b) << #c - # a * (#b << #c) - (('ishl', ('imul', a, '#b'), '#c'), ('imul', a, ('ishl', b, c))), -]) - -# Care must be taken here. Shifts in NIR uses only the lower log2(bitsize) -# bits of the second source. These replacements must correctly handle the -# case where (b % bitsize) + (c % bitsize) >= bitsize. -for s in [8, 16, 32, 64]: - mask = s - 1 - - ishl = "ishl@{}".format(s) - ishr = "ishr@{}".format(s) - ushr = "ushr@{}".format(s) - - in_bounds = ('ult', ('iadd', ('iand', b, mask), ('iand', c, mask)), s) - - optimizations.extend([ - ((ishl, (ishl, a, '#b'), '#c'), ('bcsel', in_bounds, (ishl, a, ('iadd', b, c)), 0)), - ((ushr, (ushr, a, '#b'), '#c'), ('bcsel', in_bounds, (ushr, a, ('iadd', b, c)), 0)), - - # To get get -1 for large shifts of negative values, ishr must instead - # clamp the shift count to the maximum value. - ((ishr, (ishr, a, '#b'), '#c'), - (ishr, a, ('imin', ('iadd', ('iand', b, mask), ('iand', c, mask)), s - 1))), - ]) - -# Optimize a pattern of address calculation created by DXVK where the offset is -# divided by 4 and then multipled by 4. This can be turned into an iand and the -# additions before can be reassociated to CSE the iand instruction. - -for size, mask in ((8, 0xff), (16, 0xffff), (32, 0xffffffff), (64, 0xffffffffffffffff)): - a_sz = 'a@{}'.format(size) - - optimizations.extend([ - # 'a >> #b << #b' -> 'a & ~((1 << #b) - 1)' - (('ishl', ('ushr', a_sz, '#b'), b), ('iand', a, ('ishl', mask, b))), - (('ishl', ('ishr', a_sz, '#b'), b), ('iand', a, ('ishl', mask, b))), - - # This does not trivially work with ishr. - (('ushr', ('ishl', a_sz, '#b'), b), ('iand', a, ('ushr', mask, b))), - ]) - -optimizations.extend([ - (('iand', ('ishl', 'a@32', '#b(is_first_5_bits_uge_2)'), -4), ('ishl', a, b)), - (('iand', ('imul', a, '#b(is_unsigned_multiple_of_4)'), -4), ('imul', a, b)), -]) - -for log2 in range(1, 7): # powers of two from 2 to 64 - v = 1 << log2 - mask = 0xffffffff & ~(v - 1) - b_is_multiple = '#b(is_unsigned_multiple_of_{})'.format(v) - - optimizations.extend([ - # Reassociate for improved CSE - (('iand@32', ('iadd@32', a, b_is_multiple), mask), ('iadd', ('iand', a, mask), b)), - ]) - -# To save space in the state tables, reduce to the set that is known to help. -# Previously, this was range(1, 32). In addition, a couple rules inside the -# loop are commented out. Revisit someday, probably after mesa/#2635 has some -# resolution. -for i in [1, 2, 16, 24]: - lo_mask = 0xffffffff >> i - hi_mask = (0xffffffff << i) & 0xffffffff - - optimizations.extend([ - # This pattern seems to only help in the soft-fp64 code. - (('ishl@32', ('iand', 'a@32', lo_mask), i), ('ishl', a, i)), -# (('ushr@32', ('iand', 'a@32', hi_mask), i), ('ushr', a, i)), -# (('ishr@32', ('iand', 'a@32', hi_mask), i), ('ishr', a, i)), - - (('iand', ('ishl', 'a@32', i), hi_mask), ('ishl', a, i)), - (('iand', ('ushr', 'a@32', i), lo_mask), ('ushr', a, i)), -# (('iand', ('ishr', 'a@32', i), lo_mask), ('ushr', a, i)), # Yes, ushr is correct - ]) - -optimizations.extend([ - # This is common for address calculations. Reassociating may enable the - # 'a< (a * #c) + (#b * #c) - (('imul', ('iadd(is_used_once)', a, '#b'), '#c'), ('iadd', ('imul', a, c), ('imul', b, c))), - - # ((a + #b) + c) * #d => ((a + c) * #d) + (#b * #d) - (('imul', ('iadd(is_used_once)', ('iadd(is_used_once)', a, '#b'), c), '#d'), - ('iadd', ('imul', ('iadd', a, c), d), ('imul', b, d))), - (('ishl', ('iadd(is_used_once)', ('iadd(is_used_once)', a, '#b'), c), '#d'), - ('iadd', ('ishl', ('iadd', a, c), d), ('ishl', b, d))), - - # Comparison simplifications - (('inot', ('flt(is_used_once)', 'a(is_a_number)', 'b(is_a_number)')), ('fge', a, b)), - (('inot', ('fge(is_used_once)', 'a(is_a_number)', 'b(is_a_number)')), ('flt', a, b)), - (('inot', ('feq(is_used_once)', a, b)), ('fneu', a, b)), - (('inot', ('fneu(is_used_once)', a, b)), ('feq', a, b)), - (('inot', ('ilt(is_used_once)', a, b)), ('ige', a, b)), - (('inot', ('ult(is_used_once)', a, b)), ('uge', a, b)), - (('inot', ('ige(is_used_once)', a, b)), ('ilt', a, b)), - (('inot', ('uge(is_used_once)', a, b)), ('ult', a, b)), - (('inot', ('ieq(is_used_once)', a, b)), ('ine', a, b)), - (('inot', ('ine(is_used_once)', a, b)), ('ieq', a, b)), - - (('iand', ('feq', a, b), ('fneu', a, b)), False), - (('iand', ('flt', a, b), ('flt', b, a)), False), - (('iand', ('ieq', a, b), ('ine', a, b)), False), - (('iand', ('ilt', a, b), ('ilt', b, a)), False), - (('iand', ('ult', a, b), ('ult', b, a)), False), - - # This helps some shaders because, after some optimizations, they end up - # with patterns like (-a < -b) || (b < a). In an ideal world, this sort of - # matching would be handled by CSE. - (('flt', ('fneg', a), ('fneg', b)), ('flt', b, a)), - (('fge', ('fneg', a), ('fneg', b)), ('fge', b, a)), - (('feq', ('fneg', a), ('fneg', b)), ('feq', b, a)), - (('fneu', ('fneg', a), ('fneg', b)), ('fneu', b, a)), - (('flt', ('fneg', a), -1.0), ('flt', 1.0, a)), - (('flt', -1.0, ('fneg', a)), ('flt', a, 1.0)), - (('fge', ('fneg', a), -1.0), ('fge', 1.0, a)), - (('fge', -1.0, ('fneg', a)), ('fge', a, 1.0)), - (('fneu', ('fneg', a), -1.0), ('fneu', 1.0, a)), - (('feq', -1.0, ('fneg', a)), ('feq', a, 1.0)), - - (('ieq', ('ineg', a), 0), ('ieq', a, 0)), - (('ine', ('ineg', a), 0), ('ine', a, 0)), - (('ieq', ('iabs', a), 0), ('ieq', a, 0)), - (('ine', ('iabs', a), 0), ('ine', a, 0)), - - # b < fsat(NaN) -> b < 0 -> false, and b < Nan -> false. - (('flt', '#b(is_gt_0_and_lt_1)', ('fsat(is_used_once)', a)), ('flt', b, a)), - - # fsat(NaN) >= b -> 0 >= b -> false, and NaN >= b -> false. - (('fge', ('fsat(is_used_once)', a), '#b(is_gt_0_and_lt_1)'), ('fge', a, b)), - - # b == fsat(NaN) -> b == 0 -> false, and b == NaN -> false. - (('feq', ('fsat(is_used_once)', a), '#b(is_gt_0_and_lt_1)'), ('feq', a, b)), - - # b != fsat(NaN) -> b != 0 -> true, and b != NaN -> true. - (('fneu', ('fsat(is_used_once)', a), '#b(is_gt_0_and_lt_1)'), ('fneu', a, b)), - - # fsat(NaN) >= 1 -> 0 >= 1 -> false, and NaN >= 1 -> false. - (('fge', ('fsat(is_used_once)', a), 1.0), ('fge', a, 1.0)), - - # 0 < fsat(NaN) -> 0 < 0 -> false, and 0 < NaN -> false. - (('flt', 0.0, ('fsat(is_used_once)', a)), ('flt', 0.0, a)), - - # 0.0 >= b2f(a) - # b2f(a) <= 0.0 - # b2f(a) == 0.0 because b2f(a) can only be 0 or 1 - # inot(a) - (('fge', 0.0, ('b2f', 'a@1')), ('inot', a)), - - (('fge', ('fneg', ('b2f', 'a@1')), 0.0), ('inot', a)), - - (('fneu', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0), ('ior', a, b)), - (('fneu', ('bcsel', a, 1.0, ('b2f', 'b@1')) , 0.0), ('ior', a, b)), - (('fneu', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), ('ior', a, b)), - (('fneu', ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0), ('iand', a, b)), - (('fneu', ('bcsel', a, ('b2f', 'b@1'), 0.0) , 0.0), ('iand', a, b)), - (('fneu', ('fadd', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), 0.0), ('ixor', a, b)), - (('fneu', ('b2f', 'a@1') , ('b2f', 'b@1') ), ('ixor', a, b)), - (('fneu', ('fneg', ('b2f', 'a@1')), ('fneg', ('b2f', 'b@1'))), ('ixor', a, b)), - (('feq', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0), ('inot', ('ior', a, b))), - (('feq', ('bcsel', a, 1.0, ('b2f', 'b@1')) , 0.0), ('inot', ('ior', a, b))), - (('feq', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), ('inot', ('ior', a, b))), - (('feq', ('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')), 0.0), ('inot', ('iand', a, b))), - (('feq', ('bcsel', a, ('b2f', 'b@1'), 0.0) , 0.0), ('inot', ('iand', a, b))), - (('feq', ('fadd', ('b2f', 'a@1'), ('fneg', ('b2f', 'b@1'))), 0.0), ('ieq', a, b)), - (('feq', ('b2f', 'a@1') , ('b2f', 'b@1') ), ('ieq', a, b)), - (('feq', ('fneg', ('b2f', 'a@1')), ('fneg', ('b2f', 'b@1'))), ('ieq', a, b)), - - # -(b2f(a) + b2f(b)) < 0 - # 0 < b2f(a) + b2f(b) - # 0 != b2f(a) + b2f(b) b2f must be 0 or 1, so the sum is non-negative - # a || b - (('flt', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), 0.0), ('ior', a, b)), - (('flt', 0.0, ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), ('ior', a, b)), - - # -(b2f(a) + b2f(b)) >= 0 - # 0 >= b2f(a) + b2f(b) - # 0 == b2f(a) + b2f(b) b2f must be 0 or 1, so the sum is non-negative - # !(a || b) - (('fge', ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), 0.0), ('inot', ('ior', a, b))), - (('fge', 0.0, ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), ('inot', ('ior', a, b))), - - (('flt', a, ('fneg', a)), ('flt', a, 0.0)), - (('fge', a, ('fneg', a)), ('fge', a, 0.0)), - - # Some optimizations (below) convert things like (a < b || c < b) into - # (min(a, c) < b). However, this interfers with the previous optimizations - # that try to remove comparisons with negated sums of b2f. This just - # breaks that apart. - (('flt', ('fmin', c, ('fneg', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1')))), 0.0), - ('ior', ('flt', c, 0.0), ('ior', a, b))), - - (('~flt', ('fadd', a, b), a), ('flt', b, 0.0)), - (('~fge', ('fadd', a, b), a), ('fge', b, 0.0)), - (('~feq', ('fadd', a, b), a), ('feq', b, 0.0)), - (('~fneu', ('fadd', a, b), a), ('fneu', b, 0.0)), - (('~flt', ('fadd(is_used_once)', a, '#b'), '#c'), ('flt', a, ('fadd', c, ('fneg', b)))), - (('~flt', ('fneg(is_used_once)', ('fadd(is_used_once)', a, '#b')), '#c'), ('flt', ('fneg', ('fadd', c, b)), a)), - (('~fge', ('fadd(is_used_once)', a, '#b'), '#c'), ('fge', a, ('fadd', c, ('fneg', b)))), - (('~fge', ('fneg(is_used_once)', ('fadd(is_used_once)', a, '#b')), '#c'), ('fge', ('fneg', ('fadd', c, b)), a)), - (('~feq', ('fadd(is_used_once)', a, '#b'), '#c'), ('feq', a, ('fadd', c, ('fneg', b)))), - (('~feq', ('fneg(is_used_once)', ('fadd(is_used_once)', a, '#b')), '#c'), ('feq', ('fneg', ('fadd', c, b)), a)), - (('~fneu', ('fadd(is_used_once)', a, '#b'), '#c'), ('fneu', a, ('fadd', c, ('fneg', b)))), - (('~fneu', ('fneg(is_used_once)', ('fadd(is_used_once)', a, '#b')), '#c'), ('fneu', ('fneg', ('fadd', c, b)), a)), - - # Cannot remove the addition from ilt or ige due to overflow. - (('ieq', ('iadd', a, b), a), ('ieq', b, 0)), - (('ine', ('iadd', a, b), a), ('ine', b, 0)), - - (('feq', ('b2f', 'a@1'), 0.0), ('inot', a)), - (('fneu', ('b2f', 'a@1'), 0.0), a), - (('ieq', ('b2i', 'a@1'), 0), ('inot', a)), - (('ine', ('b2i', 'a@1'), 0), a), - - (('fneu', ('u2f', a), 0.0), ('ine', a, 0)), - (('feq', ('u2f', a), 0.0), ('ieq', a, 0)), - (('fge', ('u2f', a), 0.0), True), - (('fge', 0.0, ('u2f', a)), ('uge', 0, a)), # ieq instead? - (('flt', ('u2f', a), 0.0), False), - (('flt', 0.0, ('u2f', a)), ('ult', 0, a)), # ine instead? - (('fneu', ('i2f', a), 0.0), ('ine', a, 0)), - (('feq', ('i2f', a), 0.0), ('ieq', a, 0)), - (('fge', ('i2f', a), 0.0), ('ige', a, 0)), - (('fge', 0.0, ('i2f', a)), ('ige', 0, a)), - (('flt', ('i2f', a), 0.0), ('ilt', a, 0)), - (('flt', 0.0, ('i2f', a)), ('ilt', 0, a)), - - # 0.0 < fabs(a) - # fabs(a) > 0.0 - # fabs(a) != 0.0 because fabs(a) must be >= 0 - # a != 0.0 - (('~flt', 0.0, ('fabs', a)), ('fneu', a, 0.0)), - - # -fabs(a) < 0.0 - # fabs(a) > 0.0 - (('~flt', ('fneg', ('fabs', a)), 0.0), ('fneu', a, 0.0)), - - # 0.0 >= fabs(a) - # 0.0 == fabs(a) because fabs(a) must be >= 0 - # 0.0 == a - (('fge', 0.0, ('fabs', a)), ('feq', a, 0.0)), - - # -fabs(a) >= 0.0 - # 0.0 >= fabs(a) - (('fge', ('fneg', ('fabs', a)), 0.0), ('feq', a, 0.0)), - - # (a >= 0.0) && (a <= 1.0) -> fsat(a) == a - # - # This should be NaN safe. - # - # NaN >= 0 && 1 >= NaN -> false && false -> false - # - # vs. - # - # NaN == fsat(NaN) -> NaN == 0 -> false - (('iand', ('fge', a, 0.0), ('fge', 1.0, a)), ('feq', a, ('fsat', a)), '!options->lower_fsat'), - - # Note: fmin(-a, -b) == -fmax(a, b) - (('fmax', ('b2f(is_used_once)', 'a@1'), ('b2f', 'b@1')), ('b2f', ('ior', a, b))), - (('fmax', ('fneg(is_used_once)', ('b2f(is_used_once)', 'a@1')), ('fneg', ('b2f', 'b@1'))), ('fneg', ('b2f', ('iand', a, b)))), - (('fmin', ('b2f(is_used_once)', 'a@1'), ('b2f', 'b@1')), ('b2f', ('iand', a, b))), - (('fmin', ('fneg(is_used_once)', ('b2f(is_used_once)', 'a@1')), ('fneg', ('b2f', 'b@1'))), ('fneg', ('b2f', ('ior', a, b)))), - - # fmin(b2f(a), b) - # bcsel(a, fmin(b2f(a), b), fmin(b2f(a), b)) - # bcsel(a, fmin(b2f(True), b), fmin(b2f(False), b)) - # bcsel(a, fmin(1.0, b), fmin(0.0, b)) - # - # Since b is a constant, constant folding will eliminate the fmin and the - # fmax. If b is > 1.0, the bcsel will be replaced with a b2f. - (('fmin', ('b2f', 'a@1'), '#b'), ('bcsel', a, ('fmin', b, 1.0), ('fmin', b, 0.0))), - - (('flt', ('fadd(is_used_once)', a, ('fneg', b)), 0.0), ('flt', a, b)), - - (('fge', ('fneg', ('fabs', a)), 0.0), ('feq', a, 0.0)), - (('~bcsel', ('flt', b, a), b, a), ('fmin', a, b)), - (('~bcsel', ('flt', a, b), b, a), ('fmax', a, b)), - (('~bcsel', ('fge', a, b), b, a), ('fmin', a, b)), - (('~bcsel', ('fge', b, a), b, a), ('fmax', a, b)), - (('bcsel', ('ult', b, a), b, a), ('umin', a, b)), - (('bcsel', ('ult', a, b), b, a), ('umax', a, b)), - (('bcsel', ('uge', a, b), b, a), ('umin', a, b)), - (('bcsel', ('uge', b, a), b, a), ('umax', a, b)), - (('bcsel', ('ilt', b, a), b, a), ('imin', a, b)), - (('bcsel', ('ilt', a, b), b, a), ('imax', a, b)), - (('bcsel', ('ige', a, b), b, a), ('imin', a, b)), - (('bcsel', ('ige', b, a), b, a), ('imax', a, b)), - (('bcsel', ('inot', a), b, c), ('bcsel', a, c, b)), - (('bcsel', a, ('bcsel', a, b, c), d), ('bcsel', a, b, d)), - (('bcsel', a, b, ('bcsel', a, c, d)), ('bcsel', a, b, d)), - (('bcsel', a, ('bcsel', b, c, d), ('bcsel(is_used_once)', b, c, 'e')), ('bcsel', b, c, ('bcsel', a, d, 'e'))), - (('bcsel', a, ('bcsel(is_used_once)', b, c, d), ('bcsel', b, c, 'e')), ('bcsel', b, c, ('bcsel', a, d, 'e'))), - (('bcsel', a, ('bcsel', b, c, d), ('bcsel(is_used_once)', b, 'e', d)), ('bcsel', b, ('bcsel', a, c, 'e'), d)), - (('bcsel', a, ('bcsel(is_used_once)', b, c, d), ('bcsel', b, 'e', d)), ('bcsel', b, ('bcsel', a, c, 'e'), d)), - (('bcsel', a, True, b), ('ior', a, b)), - (('bcsel', a, a, b), ('ior', a, b)), - (('bcsel', a, b, False), ('iand', a, b)), - (('bcsel', a, b, a), ('iand', a, b)), - (('~fmin', a, a), a), - (('~fmax', a, a), a), - (('imin', a, a), a), - (('imax', a, a), a), - (('umin', a, a), a), - (('umin', a, 0), 0), - (('umin', a, -1), a), - (('umax', a, a), a), - (('umax', a, 0), a), - (('umax', a, -1), -1), - (('fmax', ('fmax', a, b), b), ('fmax', a, b)), - (('umax', ('umax', a, b), b), ('umax', a, b)), - (('imax', ('imax', a, b), b), ('imax', a, b)), - (('fmin', ('fmin', a, b), b), ('fmin', a, b)), - (('umin', ('umin', a, b), b), ('umin', a, b)), - (('imin', ('imin', a, b), b), ('imin', a, b)), - (('fmax', ('fmax', ('fmax', a, b), c), a), ('fmax', ('fmax', a, b), c)), - (('umax', ('umax', ('umax', a, b), c), a), ('umax', ('umax', a, b), c)), - (('imax', ('imax', ('imax', a, b), c), a), ('imax', ('imax', a, b), c)), - (('fmin', ('fmin', ('fmin', a, b), c), a), ('fmin', ('fmin', a, b), c)), - (('umin', ('umin', ('umin', a, b), c), a), ('umin', ('umin', a, b), c)), - (('imin', ('imin', ('imin', a, b), c), a), ('imin', ('imin', a, b), c)), -]) - -for N in [8, 16, 32, 64]: - b2iN = 'b2i{0}'.format(N) - optimizations.extend([ - (('ieq', (b2iN, 'a@1'), (b2iN, 'b@1')), ('ieq', a, b)), - (('ine', (b2iN, 'a@1'), (b2iN, 'b@1')), ('ine', a, b)), - ]) - -for N in [16, 32, 64]: - b2fN = 'b2f{0}'.format(N) - optimizations.extend([ - (('feq', (b2fN, 'a@1'), (b2fN, 'b@1')), ('ieq', a, b)), - (('fneu', (b2fN, 'a@1'), (b2fN, 'b@1')), ('ine', a, b)), - ]) - -# Integer sizes -for s in [8, 16, 32, 64]: - optimizations.extend([ - (('iand@{}'.format(s), a, ('inot', ('ishr', a, s - 1))), ('imax', a, 0)), - - # Simplify logic to detect sign of an integer. - (('ieq', ('iand', 'a@{}'.format(s), 1 << (s - 1)), 0), ('ige', a, 0)), - (('ine', ('iand', 'a@{}'.format(s), 1 << (s - 1)), 1 << (s - 1)), ('ige', a, 0)), - (('ine', ('iand', 'a@{}'.format(s), 1 << (s - 1)), 0), ('ilt', a, 0)), - (('ieq', ('iand', 'a@{}'.format(s), 1 << (s - 1)), 1 << (s - 1)), ('ilt', a, 0)), - (('ine', ('ushr', 'a@{}'.format(s), s - 1), 0), ('ilt', a, 0)), - (('ieq', ('ushr', 'a@{}'.format(s), s - 1), 0), ('ige', a, 0)), - (('ieq', ('ushr', 'a@{}'.format(s), s - 1), 1), ('ilt', a, 0)), - (('ine', ('ushr', 'a@{}'.format(s), s - 1), 1), ('ige', a, 0)), - (('ine', ('ishr', 'a@{}'.format(s), s - 1), 0), ('ilt', a, 0)), - (('ieq', ('ishr', 'a@{}'.format(s), s - 1), 0), ('ige', a, 0)), - (('ieq', ('ishr', 'a@{}'.format(s), s - 1), -1), ('ilt', a, 0)), - (('ine', ('ishr', 'a@{}'.format(s), s - 1), -1), ('ige', a, 0)), - ]) - -optimizations.extend([ - (('fmin', a, ('fneg', a)), ('fneg', ('fabs', a))), - (('imin', a, ('ineg', a)), ('ineg', ('iabs', a))), - (('fmin', a, ('fneg', ('fabs', a))), ('fneg', ('fabs', a))), - (('imin', a, ('ineg', ('iabs', a))), ('ineg', ('iabs', a))), - (('~fmin', a, ('fabs', a)), a), - (('imin', a, ('iabs', a)), a), - (('~fmax', a, ('fneg', ('fabs', a))), a), - (('imax', a, ('ineg', ('iabs', a))), a), - (('fmax', a, ('fabs', a)), ('fabs', a)), - (('imax', a, ('iabs', a)), ('iabs', a)), - (('fmax', a, ('fneg', a)), ('fabs', a)), - (('imax', a, ('ineg', a)), ('iabs', a), '!options->lower_iabs'), - (('~fmax', ('fabs', a), 0.0), ('fabs', a)), - (('fmin', ('fmax', a, 0.0), 1.0), ('fsat', a), '!options->lower_fsat'), - # fmax(fmin(a, 1.0), 0.0) is inexact because it returns 1.0 on NaN, while - # fsat(a) returns 0.0. - (('~fmax', ('fmin', a, 1.0), 0.0), ('fsat', a), '!options->lower_fsat'), - # fmin(fmax(a, -1.0), 0.0) is inexact because it returns -1.0 on NaN, while - # fneg(fsat(fneg(a))) returns -0.0 on NaN. - (('~fmin', ('fmax', a, -1.0), 0.0), ('fneg', ('fsat', ('fneg', a))), '!options->lower_fsat'), - # fmax(fmin(a, 0.0), -1.0) is inexact because it returns 0.0 on NaN, while - # fneg(fsat(fneg(a))) returns -0.0 on NaN. This only matters if - # SignedZeroInfNanPreserve is set, but we don't currently have any way of - # representing this in the optimizations other than the usual ~. - (('~fmax', ('fmin', a, 0.0), -1.0), ('fneg', ('fsat', ('fneg', a))), '!options->lower_fsat'), - # fsat(fsign(NaN)) = fsat(0) = 0, and b2f(0 < NaN) = b2f(False) = 0. Mark - # the new comparison precise to prevent it being changed to 'a != 0'. - (('fsat', ('fsign', a)), ('b2f', ('!flt', 0.0, a))), - (('fsat', ('b2f', a)), ('b2f', a)), - (('fsat', a), ('fmin', ('fmax', a, 0.0), 1.0), 'options->lower_fsat'), - (('fsat', ('fsat', a)), ('fsat', a)), - (('fsat', ('fneg(is_used_once)', ('fadd(is_used_once)', a, b))), ('fsat', ('fadd', ('fneg', a), ('fneg', b))), '!options->lower_fsat'), - (('fsat', ('fneg(is_used_once)', ('fmul(is_used_once)', a, b))), ('fsat', ('fmul', ('fneg', a), b)), '!options->lower_fsat'), - (('fsat', ('fneg(is_used_once)', ('fmulz(is_used_once)', a, b))), ('fsat', ('fmulz', ('fneg', a), b)), '!options->lower_fsat && !'+signed_zero_inf_nan_preserve_32), - (('fsat', ('fabs(is_used_once)', ('fmul(is_used_once)', a, b))), ('fsat', ('fmul', ('fabs', a), ('fabs', b))), '!options->lower_fsat'), - (('fmin', ('fmax', ('fmin', ('fmax', a, b), c), b), c), ('fmin', ('fmax', a, b), c)), - (('imin', ('imax', ('imin', ('imax', a, b), c), b), c), ('imin', ('imax', a, b), c)), - (('umin', ('umax', ('umin', ('umax', a, b), c), b), c), ('umin', ('umax', a, b), c)), - # Both the left and right patterns are "b" when isnan(a), so this is exact. - (('fmax', ('fsat', a), '#b(is_zero_to_one)'), ('fsat', ('fmax', a, b))), - (('fmax', ('fsat(is_used_once)', a), ('fsat(is_used_once)', b)), ('fsat', ('fmax', a, b))), - # The left pattern is 0.0 when isnan(a) (because fmin(fsat(NaN), b) -> - # fmin(0.0, b)) while the right one is "b", so this optimization is inexact. - (('~fmin', ('fsat', a), '#b(is_zero_to_one)'), ('fsat', ('fmin', a, b))), - - # max(-min(b, a), b) -> max(abs(b), -a) - # min(-max(b, a), b) -> min(-abs(b), -a) - (('fmax', ('fneg', ('fmin', b, a)), b), ('fmax', ('fabs', b), ('fneg', a))), - (('fmin', ('fneg', ('fmax', b, a)), b), ('fmin', ('fneg', ('fabs', b)), ('fneg', a))), - - # If a in [0,b] then b-a is also in [0,b]. Since b in [0,1], max(b-a, 0) = - # fsat(b-a). - # - # If a > b, then b-a < 0 and max(b-a, 0) = fsat(b-a) = 0 - # - # This should be NaN safe since max(NaN, 0) = fsat(NaN) = 0. - (('fmax', ('fadd(is_used_once)', ('fneg', 'a(is_not_negative)'), '#b(is_zero_to_one)'), 0.0), - ('fsat', ('fadd', ('fneg', a), b)), '!options->lower_fsat'), - - (('extract_u8', ('imin', ('imax', a, 0), 0xff), 0), ('imin', ('imax', a, 0), 0xff)), - - # The ior versions are exact because fmin and fmax will always pick a - # non-NaN value, if one exists. Therefore (a < NaN) || (a < c) == a < - # fmax(NaN, c) == a < c. Mark the fmin or fmax in the replacement as exact - # to prevent other optimizations from ruining the "NaN clensing" property - # of the fmin or fmax. - (('ior', ('flt(is_used_once)', a, b), ('flt', a, c)), ('flt', a, ('!fmax', b, c))), - (('ior', ('flt(is_used_once)', a, c), ('flt', b, c)), ('flt', ('!fmin', a, b), c)), - (('ior', ('fge(is_used_once)', a, b), ('fge', a, c)), ('fge', a, ('!fmin', b, c))), - (('ior', ('fge(is_used_once)', a, c), ('fge', b, c)), ('fge', ('!fmax', a, b), c)), - (('ior', ('flt', a, '#b'), ('flt', a, '#c')), ('flt', a, ('!fmax', b, c))), - (('ior', ('flt', '#a', c), ('flt', '#b', c)), ('flt', ('!fmin', a, b), c)), - (('ior', ('fge', a, '#b'), ('fge', a, '#c')), ('fge', a, ('!fmin', b, c))), - (('ior', ('fge', '#a', c), ('fge', '#b', c)), ('fge', ('!fmax', a, b), c)), - (('~iand', ('flt(is_used_once)', a, b), ('flt', a, c)), ('flt', a, ('fmin', b, c))), - (('~iand', ('flt(is_used_once)', a, c), ('flt', b, c)), ('flt', ('fmax', a, b), c)), - (('~iand', ('fge(is_used_once)', a, b), ('fge', a, c)), ('fge', a, ('fmax', b, c))), - (('~iand', ('fge(is_used_once)', a, c), ('fge', b, c)), ('fge', ('fmin', a, b), c)), - (('iand', ('flt', a, '#b(is_a_number)'), ('flt', a, '#c(is_a_number)')), ('flt', a, ('fmin', b, c))), - (('iand', ('flt', '#a(is_a_number)', c), ('flt', '#b(is_a_number)', c)), ('flt', ('fmax', a, b), c)), - (('iand', ('fge', a, '#b(is_a_number)'), ('fge', a, '#c(is_a_number)')), ('fge', a, ('fmax', b, c))), - (('iand', ('fge', '#a(is_a_number)', c), ('fge', '#b(is_a_number)', c)), ('fge', ('fmin', a, b), c)), - - (('ior', ('ilt(is_used_once)', a, b), ('ilt', a, c)), ('ilt', a, ('imax', b, c))), - (('ior', ('ilt(is_used_once)', a, c), ('ilt', b, c)), ('ilt', ('imin', a, b), c)), - (('ior', ('ige(is_used_once)', a, b), ('ige', a, c)), ('ige', a, ('imin', b, c))), - (('ior', ('ige(is_used_once)', a, c), ('ige', b, c)), ('ige', ('imax', a, b), c)), - (('ior', ('ult(is_used_once)', a, b), ('ult', a, c)), ('ult', a, ('umax', b, c))), - (('ior', ('ult(is_used_once)', a, c), ('ult', b, c)), ('ult', ('umin', a, b), c)), - (('ior', ('uge(is_used_once)', a, b), ('uge', a, c)), ('uge', a, ('umin', b, c))), - (('ior', ('uge(is_used_once)', a, c), ('uge', b, c)), ('uge', ('umax', a, b), c)), - (('iand', ('ilt(is_used_once)', a, b), ('ilt', a, c)), ('ilt', a, ('imin', b, c))), - (('iand', ('ilt(is_used_once)', a, c), ('ilt', b, c)), ('ilt', ('imax', a, b), c)), - (('iand', ('ige(is_used_once)', a, b), ('ige', a, c)), ('ige', a, ('imax', b, c))), - (('iand', ('ige(is_used_once)', a, c), ('ige', b, c)), ('ige', ('imin', a, b), c)), - (('iand', ('ult(is_used_once)', a, b), ('ult', a, c)), ('ult', a, ('umin', b, c))), - (('iand', ('ult(is_used_once)', a, c), ('ult', b, c)), ('ult', ('umax', a, b), c)), - (('iand', ('uge(is_used_once)', a, b), ('uge', a, c)), ('uge', a, ('umax', b, c))), - (('iand', ('uge(is_used_once)', a, c), ('uge', b, c)), ('uge', ('umin', a, b), c)), - - # A number of shaders contain a pattern like a.x < 0.0 || a.x > 1.0 || a.y - # < 0.0, || a.y > 1.0 || ... These patterns rearrange and replace in a - # single step. Doing just the replacement can lead to an infinite loop as - # the pattern is repeatedly applied to the result of the previous - # application of the pattern. - (('ior', ('ior(is_used_once)', ('flt(is_used_once)', a, c), d), ('flt', b, c)), ('ior', ('flt', ('!fmin', a, b), c), d)), - (('ior', ('ior(is_used_once)', ('flt', a, c), d), ('flt(is_used_once)', b, c)), ('ior', ('flt', ('!fmin', a, b), c), d)), - (('ior', ('ior(is_used_once)', ('flt(is_used_once)', a, b), d), ('flt', a, c)), ('ior', ('flt', a, ('!fmax', b, c)), d)), - (('ior', ('ior(is_used_once)', ('flt', a, b), d), ('flt(is_used_once)', a, c)), ('ior', ('flt', a, ('!fmax', b, c)), d)), - - # This is how SpvOpFOrdNotEqual might be implemented. If both values are - # numbers, then it can be replaced with fneu. - (('ior', ('flt', 'a(is_a_number)', 'b(is_a_number)'), ('flt', b, a)), ('fneu', a, b)), - - # Other patterns may optimize the resulting iand tree further. - (('umin', ('iand', a, '#b(is_pos_power_of_two)'), ('iand', c, b)), - ('iand', ('iand', a, b), ('iand', c, b))), -]) - -# Float sizes -for s in [16, 32, 64]: - optimizations.extend([ - # These derive from the previous patterns with the application of b < 0 <=> - # 0 < -b. The transformation should be applied if either comparison is - # used once as this ensures that the number of comparisons will not - # increase. The sources to the ior and iand are not symmetric, so the - # rules have to be duplicated to get this behavior. - (('ior', ('flt(is_used_once)', 0.0, 'a@{}'.format(s)), ('flt', 'b@{}'.format(s), 0.0)), ('flt', 0.0, ('fmax', a, ('fneg', b)))), - (('ior', ('flt', 0.0, 'a@{}'.format(s)), ('flt(is_used_once)', 'b@{}'.format(s), 0.0)), ('flt', 0.0, ('fmax', a, ('fneg', b)))), - (('ior', ('fge(is_used_once)', 0.0, 'a@{}'.format(s)), ('fge', 'b@{}'.format(s), 0.0)), ('fge', 0.0, ('fmin', a, ('fneg', b)))), - (('ior', ('fge', 0.0, 'a@{}'.format(s)), ('fge(is_used_once)', 'b@{}'.format(s), 0.0)), ('fge', 0.0, ('fmin', a, ('fneg', b)))), - (('~iand', ('flt(is_used_once)', 0.0, 'a@{}'.format(s)), ('flt', 'b@{}'.format(s), 0.0)), ('flt', 0.0, ('fmin', a, ('fneg', b)))), - (('~iand', ('flt', 0.0, 'a@{}'.format(s)), ('flt(is_used_once)', 'b@{}'.format(s), 0.0)), ('flt', 0.0, ('fmin', a, ('fneg', b)))), - (('~iand', ('fge(is_used_once)', 0.0, 'a@{}'.format(s)), ('fge', 'b@{}'.format(s), 0.0)), ('fge', 0.0, ('fmax', a, ('fneg', b)))), - (('~iand', ('fge', 0.0, 'a@{}'.format(s)), ('fge(is_used_once)', 'b@{}'.format(s), 0.0)), ('fge', 0.0, ('fmax', a, ('fneg', b)))), - - (('ior', ('feq(is_used_once)', 'a@{}'.format(s), 0.0), ('feq', 'b@{}'.format(s), 0.0)), ('feq', ('fmin', ('fabs', a), ('fabs', b)), 0.0)), - (('ior', ('fneu(is_used_once)', 'a@{}'.format(s), 0.0), ('fneu', 'b@{}'.format(s), 0.0)), ('fneu', ('fadd', ('fabs', a), ('fabs', b)), 0.0)), - (('iand', ('feq(is_used_once)', 'a@{}'.format(s), 0.0), ('feq', 'b@{}'.format(s), 0.0)), ('feq', ('fadd', ('fabs', a), ('fabs', b)), 0.0)), - (('iand', ('fneu(is_used_once)', 'a@{}'.format(s), 0.0), ('fneu', 'b@{}'.format(s), 0.0)), ('fneu', ('fmin', ('fabs', a), ('fabs', b)), 0.0)), - - # The (i2f32, ...) part is an open-coded fsign. When that is combined - # with the bcsel, it's basically copysign(1.0, a). There are some - # behavior differences between this pattern and copysign w.r.t. ±0 and - # NaN. copysign(x, y) blindly takes the sign bit from y and applies it - # to x, regardless of whether either or both values are NaN. - # - # If a != a: bcsel(False, 1.0, i2f(b2i(False) - b2i(False))) = 0, - # int(NaN >= 0.0) - int(NaN < 0.0) = 0 - 0 = 0 - # If a == ±0: bcsel(True, 1.0, ...) = 1.0, - # int(±0.0 >= 0.0) - int(±0.0 < 0.0) = 1 - 0 = 1 - # - # For all other values of 'a', the original and replacement behave as - # copysign. - # - # Marking the replacement comparisons as precise prevents any future - # optimizations from replacing either of the comparisons with the - # logical-not of the other. - # - # Note: Use b2i32 in the replacement because some platforms that - # support fp16 don't support int16. - (('bcsel@{}'.format(s), ('feq', a, 0.0), 1.0, ('i2f{}'.format(s), ('iadd', ('b2i{}'.format(s), ('flt', 0.0, 'a@{}'.format(s))), ('ineg', ('b2i{}'.format(s), ('flt', 'a@{}'.format(s), 0.0)))))), - ('i2f{}'.format(s), ('iadd', ('b2i32', ('!fge', a, 0.0)), ('ineg', ('b2i32', ('!flt', a, 0.0)))))), - - (('bcsel', a, ('b2f(is_used_once)', 'b@{}'.format(s)), ('b2f', 'c@{}'.format(s))), ('b2f', ('bcsel', a, b, c))), - - # The C spec says, "If the value of the integral part cannot be represented - # by the integer type, the behavior is undefined." "Undefined" can mean - # "the conversion doesn't happen at all." - (('~i2f{}'.format(s), ('f2i', 'a@{}'.format(s))), ('ftrunc', a)), - - # Ironically, mark these as imprecise because removing the conversions may - # preserve more precision than doing the conversions (e.g., - # uint(float(0x81818181u)) == 0x81818200). - (('~f2i{}'.format(s), ('i2f', 'a@{}'.format(s))), a), - (('~f2i{}'.format(s), ('u2f', 'a@{}'.format(s))), a), - (('~f2u{}'.format(s), ('i2f', 'a@{}'.format(s))), a), - (('~f2u{}'.format(s), ('u2f', 'a@{}'.format(s))), a), - - (('fadd', ('b2f{}'.format(s), ('flt', 0.0, 'a@{}'.format(s))), ('fneg', ('b2f{}'.format(s), ('flt', 'a@{}'.format(s), 0.0)))), ('fsign', a), '!options->lower_fsign'), - (('iadd', ('b2i{}'.format(s), ('flt', 0, 'a@{}'.format(s))), ('ineg', ('b2i{}'.format(s), ('flt', 'a@{}'.format(s), 0)))), ('f2i{}'.format(s), ('fsign', a)), '!options->lower_fsign'), - - # float? -> float? -> floatS ==> float? -> floatS - (('~f2f{}'.format(s), ('f2f', a)), ('f2f{}'.format(s), a)), - - # int? -> float? -> floatS ==> int? -> floatS - (('~f2f{}'.format(s), ('u2f', a)), ('u2f{}'.format(s), a)), - (('~f2f{}'.format(s), ('i2f', a)), ('i2f{}'.format(s), a)), - - # float? -> float? -> intS ==> float? -> intS - (('~f2u{}'.format(s), ('f2f', a)), ('f2u{}'.format(s), a)), - (('~f2i{}'.format(s), ('f2f', a)), ('f2i{}'.format(s), a)), - - # HLSL's sign function returns an integer - (('i2f{}'.format(s), ('f2i', ('fsign', 'a@{}'.format(s)))), ('fsign', a)), - ]) - - for B in [32, 64]: - if s < B: - optimizations.extend([ - # S = smaller, B = bigger - # floatS -> floatB -> floatS ==> identity - (('~f2f{}'.format(s), ('f2f{}'.format(B), 'a@{}'.format(s))), a), - - # floatS -> floatB -> intB ==> floatS -> intB - (('f2u{}'.format(B), ('f2f{}'.format(B), 'a@{}'.format(s))), ('f2u{}'.format(B), a)), - (('f2i{}'.format(B), ('f2f{}'.format(B), 'a@{}'.format(s))), ('f2i{}'.format(B), a)), - - # int? -> floatB -> floatS ==> int? -> floatS - (('f2f{}'.format(s), ('u2f{}'.format(B), a)), ('u2f{}'.format(s), a)), - (('f2f{}'.format(s), ('i2f{}'.format(B), a)), ('i2f{}'.format(s), a)), - ]) - -for S in [1, 8, 16, 32]: - for B in [8, 16, 32, 64]: - if B <= S: - continue - optimizations.extend([ - # intS -> intB -> intS ==> identity - (('i2i{}'.format(S), ('i2i{}'.format(B), 'a@{}'.format(S))), a), - (('u2u{}'.format(S), ('u2u{}'.format(B), 'a@{}'.format(S))), a), - ]) - - if B < 16: - continue - for C in [8, 16, 32, 64]: - if C <= S: - continue - optimizations.extend([ - # intS -> intC -> floatB ==> intS -> floatB - (('u2f{}'.format(B), ('u2u{}'.format(C), 'a@{}'.format(S))), ('u2f{}'.format(B), a)), - (('i2f{}'.format(B), ('i2i{}'.format(C), 'a@{}'.format(S))), ('i2f{}'.format(B), a)), - ]) - -# mediump variants of the above -optimizations.extend([ - # int32 -> float32 -> float16 ==> int32 -> float16 - (('f2fmp', ('u2f32', 'a@32')), ('u2fmp', a)), - (('f2fmp', ('i2f32', 'a@32')), ('i2fmp', a)), - - # float32 -> float16 -> int16 ==> float32 -> int16 - (('f2u16', ('f2fmp', 'a@32')), ('f2u16', a)), - (('f2i16', ('f2fmp', 'a@32')), ('f2i16', a)), - - # float32 -> int32 -> int16 ==> float32 -> int16 - (('i2imp', ('f2u32', 'a@32')), ('f2ump', a)), - (('i2imp', ('f2i32', 'a@32')), ('f2imp', a)), - - # int32 -> int16 -> float16 ==> int32 -> float16 - (('u2f16', ('i2imp', 'a@32')), ('u2f16', a)), - (('i2f16', ('i2imp', 'a@32')), ('i2f16', a)), -]) - -# Clean up junk left from 8-bit integer to 16-bit integer lowering. -optimizations.extend([ - # The u2u16(u2u8(X)) just masks off the upper 8-bits of X. This can be - # accomplished by mask the upper 8-bit of the immediate operand to the - # iand instruction. Often times, both patterns will end up being applied - # to the same original expression tree. - (('iand', ('u2u16', ('u2u8', 'a@16')), '#b'), ('iand', a, ('iand', b, 0xff))), - (('u2u16', ('u2u8(is_used_once)', ('iand', 'a@16', '#b'))), ('iand', a, ('iand', b, 0xff))), -]) - -for op in ['iand', 'ior', 'ixor']: - optimizations.extend([ - (('u2u8', (op, ('u2u16', ('u2u8', 'a@16')), ('u2u16', ('u2u8', 'b@16')))), ('u2u8', (op, a, b))), - (('u2u8', (op, ('u2u16', ('u2u8', 'a@32')), ('u2u16', ('u2u8', 'b@32')))), ('u2u8', (op, a, b))), - - # Undistribute extract from a logic op - ((op, ('extract_i8', a, '#b'), ('extract_i8', c, b)), ('extract_i8', (op, a, c), b)), - ((op, ('extract_u8', a, '#b'), ('extract_u8', c, b)), ('extract_u8', (op, a, c), b)), - ((op, ('extract_i16', a, '#b'), ('extract_i16', c, b)), ('extract_i16', (op, a, c), b)), - ((op, ('extract_u16', a, '#b'), ('extract_u16', c, b)), ('extract_u16', (op, a, c), b)), - - # Undistribute shifts from a logic op - ((op, ('ushr(is_used_once)', a, '#b'), ('ushr', c, b)), ('ushr', (op, a, c), b)), - ((op, ('ishr(is_used_once)', a, '#b'), ('ishr', c, b)), ('ishr', (op, a, c), b)), - ((op, ('ishl(is_used_once)', a, '#b'), ('ishl', c, b)), ('ishl', (op, a, c), b)), - ]) - -# Integer sizes -for s in [8, 16, 32, 64]: - last_shift_bit = int(math.log2(s)) - 1 - - optimizations.extend([ - (('iand', ('ieq', 'a@{}'.format(s), 0), ('ieq', 'b@{}'.format(s), 0)), ('ieq', ('ior', a, b), 0), 'options->lower_umax'), - (('ior', ('ine', 'a@{}'.format(s), 0), ('ine', 'b@{}'.format(s), 0)), ('ine', ('ior', a, b), 0), 'options->lower_umin'), - (('iand', ('ieq', 'a@{}'.format(s), 0), ('ieq', 'b@{}'.format(s), 0)), ('ieq', ('umax', a, b), 0), '!options->lower_umax'), - (('ior', ('ieq', 'a@{}'.format(s), 0), ('ieq', 'b@{}'.format(s), 0)), ('ieq', ('umin', a, b), 0), '!options->lower_umin'), - (('iand', ('ine', 'a@{}'.format(s), 0), ('ine', 'b@{}'.format(s), 0)), ('ine', ('umin', a, b), 0), '!options->lower_umin'), - (('ior', ('ine', 'a@{}'.format(s), 0), ('ine', 'b@{}'.format(s), 0)), ('ine', ('umax', a, b), 0), '!options->lower_umax'), - - # True/False are ~0 and 0 in NIR. b2i of True is 1, and -1 is ~0 (True). - (('ineg', ('b2i{}'.format(s), 'a@{}'.format(s))), a), - - # SM5 32-bit shifts are defined to use the 5 least significant bits (or 4 bits for 16 bits) - (('ishl', 'a@{}'.format(s), ('iand', s - 1, b)), ('ishl', a, b)), - (('ishr', 'a@{}'.format(s), ('iand', s - 1, b)), ('ishr', a, b)), - (('ushr', 'a@{}'.format(s), ('iand', s - 1, b)), ('ushr', a, b)), - (('ushr', 'a@{}'.format(s), ('ishl(is_used_once)', ('iand', b, 1), last_shift_bit)), ('ushr', a, ('ishl', b, last_shift_bit))), - ]) - -optimizations.extend([ - # Common pattern like 'if (i == 0 || i == 1 || ...)' - (('ior', ('ieq', a, 0), ('ieq', a, 1)), ('uge', 1, a)), - (('ior', ('uge', 1, a), ('ieq', a, 2)), ('uge', 2, a)), - (('ior', ('uge', 2, a), ('ieq', a, 3)), ('uge', 3, a)), - (('ior', a, ('ieq', a, False)), True), - - (('ine', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), ('ine', a, b)), - (('b2i', ('ine', 'a@1', 'b@1')), ('b2i', ('ixor', a, b))), - - (('ishl', ('b2i32', ('ine', ('iand', 'a@32', '#b(is_pos_power_of_two)'), 0)), '#c'), - ('bcsel', ('ige', ('iand', c, 31), ('find_lsb', b)), - ('ishl', ('iand', a, b), ('iadd', ('iand', c, 31), ('ineg', ('find_lsb', b)))), - ('ushr', ('iand', a, b), ('iadd', ('ineg', ('iand', c, 31)), ('find_lsb', b))) - ) - ), - - (('b2i32', ('ine', ('iand', 'a@32', '#b(is_pos_power_of_two)'), 0)), - ('ushr', ('iand', a, b), ('find_lsb', b)), '!options->lower_bitops'), - - (('ior', ('b2i', a), ('iand', b, 1)), ('iand', ('ior', ('b2i', a), b), 1)), - (('iand', ('b2i', a), ('iand', b, 1)), ('iand', ('b2i', a), b)), - - # This pattern occurs coutresy of __flt64_nonnan in the soft-fp64 code. - # The first part of the iand comes from the !__feq64_nonnan. - # - # The second pattern is a reformulation of the first based on the relation - # (a == 0 || y == 0) <=> umin(a, y) == 0, where b in the first equation - # happens to be y == 0. - (('iand', ('inot', ('iand', ('ior', ('ieq', a, 0), b), c)), ('ilt', a, 0)), - ('iand', ('inot', ('iand', b , c)), ('ilt', a, 0))), - (('iand', ('inot', ('iand', ('ieq', ('umin', a, b), 0), c)), ('ilt', a, 0)), - ('iand', ('inot', ('iand', ('ieq', b , 0), c)), ('ilt', a, 0))), - - # These patterns can result when (a < b || a < c) => (a < min(b, c)) - # transformations occur before constant propagation and loop-unrolling. - # - # The flt versions are exact. If isnan(a), the original pattern is - # trivially false, and the replacements are false too. If isnan(b): - # - # a < fmax(NaN, a) => a < a => false vs a < NaN => false - (('flt', a, ('fmax', b, a)), ('flt', a, b)), - (('flt', ('fmin', a, b), a), ('flt', b, a)), - (('~fge', a, ('fmin', b, a)), True), - (('~fge', ('fmax', a, b), a), True), - (('flt', a, ('fmin', b, a)), False), - (('flt', ('fmax', a, b), a), False), - (('~fge', a, ('fmax', b, a)), ('fge', a, b)), - (('~fge', ('fmin', a, b), a), ('fge', b, a)), - - (('ilt', a, ('imax', b, a)), ('ilt', a, b)), - (('ilt', ('imin', a, b), a), ('ilt', b, a)), - (('ige', a, ('imin', b, a)), True), - (('ige', ('imax', a, b), a), True), - (('ult', a, ('umax', b, a)), ('ult', a, b)), - (('ult', ('umin', a, b), a), ('ult', b, a)), - (('uge', a, ('umin', b, a)), True), - (('uge', ('umax', a, b), a), True), - (('ilt', a, ('imin', b, a)), False), - (('ilt', ('imax', a, b), a), False), - (('ige', a, ('imax', b, a)), ('ige', a, b)), - (('ige', ('imin', a, b), a), ('ige', b, a)), - (('ult', a, ('umin', b, a)), False), - (('ult', ('umax', a, b), a), False), - (('uge', a, ('umax', b, a)), ('uge', a, b)), - (('uge', ('umin', a, b), a), ('uge', b, a)), - (('ult', a, ('iand', b, a)), False), - (('ult', ('ior', a, b), a), False), - (('uge', a, ('iand', b, a)), True), - (('uge', ('ior', a, b), a), True), - - (('ilt', '#a', ('imax', '#b', c)), ('ior', ('ilt', a, b), ('ilt', a, c))), - (('ilt', ('imin', '#a', b), '#c'), ('ior', ('ilt', a, c), ('ilt', b, c))), - (('ige', '#a', ('imin', '#b', c)), ('ior', ('ige', a, b), ('ige', a, c))), - (('ige', ('imax', '#a', b), '#c'), ('ior', ('ige', a, c), ('ige', b, c))), - (('ult', '#a', ('umax', '#b', c)), ('ior', ('ult', a, b), ('ult', a, c))), - (('ult', ('umin', '#a', b), '#c'), ('ior', ('ult', a, c), ('ult', b, c))), - (('uge', '#a', ('umin', '#b', c)), ('ior', ('uge', a, b), ('uge', a, c))), - (('uge', ('umax', '#a', b), '#c'), ('ior', ('uge', a, c), ('uge', b, c))), - (('ilt', '#a', ('imin', '#b', c)), ('iand', ('ilt', a, b), ('ilt', a, c))), - (('ilt', ('imax', '#a', b), '#c'), ('iand', ('ilt', a, c), ('ilt', b, c))), - (('ige', '#a', ('imax', '#b', c)), ('iand', ('ige', a, b), ('ige', a, c))), - (('ige', ('imin', '#a', b), '#c'), ('iand', ('ige', a, c), ('ige', b, c))), - (('ult', '#a', ('umin', '#b', c)), ('iand', ('ult', a, b), ('ult', a, c))), - (('ult', ('umax', '#a', b), '#c'), ('iand', ('ult', a, c), ('ult', b, c))), - (('uge', '#a', ('umax', '#b', c)), ('iand', ('uge', a, b), ('uge', a, c))), - (('uge', ('umin', '#a', b), '#c'), ('iand', ('uge', a, c), ('uge', b, c))), - - # Thanks to sign extension, the ishr(a, b) is negative if and only if a is - # negative. - (('bcsel', ('ilt', a, 0), ('ineg', ('ishr', a, b)), ('ishr', a, b)), - ('iabs', ('ishr', a, b))), - (('iabs', ('ishr', ('iabs', a), b)), ('ishr', ('iabs', a), b)), - - (('fabs', ('slt', a, b)), ('slt', a, b)), - (('fabs', ('sge', a, b)), ('sge', a, b)), - (('fabs', ('seq', a, b)), ('seq', a, b)), - (('fabs', ('sne', a, b)), ('sne', a, b)), - (('slt', a, b), ('b2f', ('flt', a, b)), 'options->lower_scmp'), - (('sge', a, b), ('b2f', ('fge', a, b)), 'options->lower_scmp'), - (('seq', a, b), ('b2f', ('feq', a, b)), 'options->lower_scmp'), - (('sne', a, b), ('b2f', ('fneu', a, b)), 'options->lower_scmp'), - (('seq', ('seq', a, b), 1.0), ('seq', a, b)), - (('seq', ('sne', a, b), 1.0), ('sne', a, b)), - (('seq', ('slt', a, b), 1.0), ('slt', a, b)), - (('seq', ('sge', a, b), 1.0), ('sge', a, b)), - (('sne', ('seq', a, b), 0.0), ('seq', a, b)), - (('sne', ('sne', a, b), 0.0), ('sne', a, b)), - (('sne', ('slt', a, b), 0.0), ('slt', a, b)), - (('sne', ('sge', a, b), 0.0), ('sge', a, b)), - (('seq', ('seq', a, b), 0.0), ('sne', a, b)), - (('seq', ('sne', a, b), 0.0), ('seq', a, b)), - (('seq', ('slt', a, b), 0.0), ('sge', a, b)), - (('seq', ('sge', a, b), 0.0), ('slt', a, b)), - (('sne', ('seq', a, b), 1.0), ('sne', a, b)), - (('sne', ('sne', a, b), 1.0), ('seq', a, b)), - (('sne', ('slt', a, b), 1.0), ('sge', a, b)), - (('sne', ('sge', a, b), 1.0), ('slt', a, b)), - (('fall_equal2', a, b), ('fmin', ('seq', 'a.x', 'b.x'), ('seq', 'a.y', 'b.y')), 'options->lower_vector_cmp'), - (('fall_equal3', a, b), ('seq', ('fany_nequal3', a, b), 0.0), 'options->lower_vector_cmp'), - (('fall_equal4', a, b), ('seq', ('fany_nequal4', a, b), 0.0), 'options->lower_vector_cmp'), - (('fall_equal8', a, b), ('seq', ('fany_nequal8', a, b), 0.0), 'options->lower_vector_cmp'), - (('fall_equal16', a, b), ('seq', ('fany_nequal16', a, b), 0.0), 'options->lower_vector_cmp'), - (('fany_nequal2', a, b), ('fmax', ('sne', 'a.x', 'b.x'), ('sne', 'a.y', 'b.y')), 'options->lower_vector_cmp'), - (('fany_nequal3', a, b), ('fsat', ('fdot3', ('sne', a, b), ('sne', a, b))), 'options->lower_vector_cmp'), - (('fany_nequal4', a, b), ('fsat', ('fdot4', ('sne', a, b), ('sne', a, b))), 'options->lower_vector_cmp'), - (('fany_nequal8', a, b), ('fsat', ('fdot8', ('sne', a, b), ('sne', a, b))), 'options->lower_vector_cmp'), - (('fany_nequal16', a, b), ('fsat', ('fdot16', ('sne', a, b), ('sne', a, b))), 'options->lower_vector_cmp'), -]) - -def vector_cmp(reduce_op, cmp_op, comps): - if len(comps) == 1: - return (cmp_op, 'a.' + comps[0], 'b.' + comps[0]) - else: - mid = len(comps) // 2 - return (reduce_op, vector_cmp(reduce_op, cmp_op, comps[:mid]), - vector_cmp(reduce_op, cmp_op, comps[mid:])) - -for op in [ - ('ball_iequal', 'ieq', 'iand'), - ('ball_fequal', 'feq', 'iand'), - ('bany_inequal', 'ine', 'ior'), - ('bany_fnequal', 'fneu', 'ior'), -]: - optimizations.extend([ - ((op[0] + '2', a, b), vector_cmp(op[2], op[1], 'xy'), 'options->lower_vector_cmp'), - ((op[0] + '3', a, b), vector_cmp(op[2], op[1], 'xyz'), 'options->lower_vector_cmp'), - ((op[0] + '4', a, b), vector_cmp(op[2], op[1], 'xyzw'), 'options->lower_vector_cmp'), - ((op[0] + '8', a, b), vector_cmp(op[2], op[1], 'abcdefgh'), 'options->lower_vector_cmp'), - ((op[0] + '16', a, b), vector_cmp(op[2], op[1], 'abcdefghijklmnop'), 'options->lower_vector_cmp'), - ]) - -optimizations.extend([ - (('feq', ('seq', a, b), 1.0), ('feq', a, b)), - (('feq', ('sne', a, b), 1.0), ('fneu', a, b)), - (('feq', ('slt', a, b), 1.0), ('flt', a, b)), - (('feq', ('sge', a, b), 1.0), ('fge', a, b)), - (('fneu', ('seq', a, b), 0.0), ('feq', a, b)), - (('fneu', ('sne', a, b), 0.0), ('fneu', a, b)), - (('fneu', ('slt', a, b), 0.0), ('flt', a, b)), - (('fneu', ('sge', a, b), 0.0), ('fge', a, b)), - (('feq', ('seq', a, b), 0.0), ('fneu', a, b)), - (('feq', ('sne', a, b), 0.0), ('feq', a, b)), - (('feq', ('slt', a, b), 0.0), ('fge', a, b)), - (('feq', ('sge', a, b), 0.0), ('flt', a, b)), - (('fneu', ('seq', a, b), 1.0), ('fneu', a, b)), - (('fneu', ('sne', a, b), 1.0), ('feq', a, b)), - (('fneu', ('slt', a, b), 1.0), ('fge', a, b)), - (('fneu', ('sge', a, b), 1.0), ('flt', a, b)), - - (('fneu', ('fneg', a), a), ('fneu', a, 0.0)), - (('feq', ('fneg', a), a), ('feq', a, 0.0)), - # Emulating booleans - (('imul', ('b2i', 'a@1'), ('b2i', 'b@1')), ('b2i', ('iand', a, b))), - (('iand', ('b2i', 'a@1'), ('b2i', 'b@1')), ('b2i', ('iand', a, b))), - (('ior', ('b2i', 'a@1'), ('b2i', 'b@1')), ('b2i', ('ior', a, b))), - (('fmul', ('b2f', 'a@1'), ('b2f', 'b@1')), ('b2f', ('iand', a, b))), - (('fsat', ('fadd', ('b2f', 'a@1'), ('b2f', 'b@1'))), ('b2f', ('ior', a, b))), - (('iand', 'a@bool16', 1.0), ('b2f', a)), - (('iand', 'a@bool32', 1.0), ('b2f', a)), - (('flt', ('fneg', ('b2f', 'a@1')), 0), a), # Generated by TGSI KILL_IF. - # Comparison with the same args. Note that these are only done for the - # float versions when the source must be a number. Generally, NaN cmp NaN - # produces the opposite result of X cmp X. flt is the outlier. NaN < NaN - # is false, and, for any number X, X < X is also false. - (('ilt', a, a), False), - (('ige', a, a), True), - (('ieq', a, a), True), - (('ine', a, a), False), - (('ult', a, a), False), - (('uge', a, a), True), - (('flt', a, a), False), - (('fge', 'a(is_a_number)', a), True), - (('feq', 'a(is_a_number)', a), True), - (('fneu', 'a(is_a_number)', a), False), - # Logical and bit operations - (('iand', a, a), a), - (('iand', a, 0), 0), - (('iand', a, -1), a), - (('iand', a, ('inot', a)), 0), - (('ior', a, a), a), - (('ior', a, 0), a), - (('ior', a, -1), -1), - (('ior', a, ('inot', a)), -1), - (('ixor', a, a), 0), - (('ixor', a, 0), a), - (('ixor', a, ('ixor', a, b)), b), - (('ixor', a, -1), ('inot', a)), - (('inot', ('inot', a)), a), - (('ior', ('iand', a, b), b), b), - (('ior', ('ior', a, b), b), ('ior', a, b)), - (('iand', ('ior', a, b), b), b), - (('iand', ('iand', a, b), b), ('iand', a, b)), - - # It is common for sequences of (x & 1) to occur in large trees. Replacing - # an expression like ((a & 1) & (b & 1)) with ((a & b) & 1) allows the "& - # 1" to eventually bubble up to the top of the tree. - (('iand', ('iand(is_used_once)', a, b), ('iand(is_used_once)', a, c)), - ('iand', a, ('iand', b, c))), - - (('iand@64', a, '#b(is_lower_half_zero)'), - ('pack_64_2x32_split', 0, - ('iand', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))), - '!options->lower_pack_64_2x32_split'), - (('iand@64', a, '#b(is_upper_half_zero)'), - ('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)), - 0), - '!options->lower_pack_64_2x32_split'), - (('iand@64', a, '#b(is_lower_half_negative_one)'), - ('pack_64_2x32_split', ('unpack_64_2x32_split_x', a), - ('iand', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))), - '!options->lower_pack_64_2x32_split'), - (('iand@64', a, '#b(is_upper_half_negative_one)'), - ('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)), - ('unpack_64_2x32_split_y', a)), - '!options->lower_pack_64_2x32_split'), - - (('ior@64', a, '#b(is_lower_half_zero)'), - ('pack_64_2x32_split', ('unpack_64_2x32_split_x', a), - ('ior', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))), - '!options->lower_pack_64_2x32_split'), - (('ior@64', a, '#b(is_upper_half_zero)'), - ('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)), - ('unpack_64_2x32_split_y', a)), - '!options->lower_pack_64_2x32_split'), - (('ior@64', a, '#b(is_lower_half_negative_one)'), - ('pack_64_2x32_split', -1, - ('ior', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))), - '!options->lower_pack_64_2x32_split'), - (('ior@64', a, '#b(is_upper_half_negative_one)'), - ('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)), - -1), - '!options->lower_pack_64_2x32_split'), - - (('ixor@64', a, '#b(is_lower_half_zero)'), - ('pack_64_2x32_split', ('unpack_64_2x32_split_x', a), - ('ixor', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))), - '!options->lower_pack_64_2x32_split'), - (('ixor@64', a, '#b(is_upper_half_zero)'), - ('pack_64_2x32_split', ('ixor', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)), - ('unpack_64_2x32_split_y', a)), - '!options->lower_pack_64_2x32_split'), - - # DeMorgan's Laws - (('iand', ('inot', a), ('inot', b)), ('inot', ('ior', a, b))), - (('ior', ('inot', a), ('inot', b)), ('inot', ('iand', a, b))), - # Shift optimizations - (('ishl', 0, a), 0), - (('ishl', a, 0), a), - (('ishr', 0, a), 0), - (('ishr', -1, a), -1), - (('ishr', a, 0), a), - (('ushr', 0, a), 0), - (('ushr', a, 0), a), - (('ior', ('ishl@16', a, b), ('ushr@16', a, ('iadd', 16, ('ineg', b)))), ('urol', a, b), '!options->lower_rotate'), - (('ior', ('ishl@16', a, b), ('ushr@16', a, ('isub', 16, b))), ('urol', a, b), '!options->lower_rotate'), - (('ior', ('ishl@32', a, b), ('ushr@32', a, ('iadd', 32, ('ineg', b)))), ('urol', a, b), '!options->lower_rotate'), - (('ior', ('ishl@32', a, b), ('ushr@32', a, ('isub', 32, b))), ('urol', a, b), '!options->lower_rotate'), - (('ior', ('ushr@16', a, b), ('ishl@16', a, ('iadd', 16, ('ineg', b)))), ('uror', a, b), '!options->lower_rotate'), - (('ior', ('ushr@16', a, b), ('ishl@16', a, ('isub', 16, b))), ('uror', a, b), '!options->lower_rotate'), - (('ior', ('ushr@32', a, b), ('ishl@32', a, ('iadd', 32, ('ineg', b)))), ('uror', a, b), '!options->lower_rotate'), - (('ior', ('ushr@32', a, b), ('ishl@32', a, ('isub', 32, b))), ('uror', a, b), '!options->lower_rotate'), - (('urol@8', a, b), ('ior', ('ishl', a, b), ('ushr', a, ('isub', 8, b))), 'options->lower_rotate'), - (('urol@16', a, b), ('ior', ('ishl', a, b), ('ushr', a, ('isub', 16, b))), 'options->lower_rotate'), - (('urol@32', a, b), ('ior', ('ishl', a, b), ('ushr', a, ('isub', 32, b))), 'options->lower_rotate'), - (('urol@64', a, b), ('ior', ('ishl', a, b), ('ushr', a, ('isub', 64, b))), 'options->lower_rotate'), - (('uror@8', a, b), ('ior', ('ushr', a, b), ('ishl', a, ('isub', 8, b))), 'options->lower_rotate'), - (('uror@16', a, b), ('ior', ('ushr', a, b), ('ishl', a, ('isub', 16, b))), 'options->lower_rotate'), - (('uror@32', a, b), ('ior', ('ushr', a, b), ('ishl', a, ('isub', 32, b))), 'options->lower_rotate'), - (('uror@64', a, b), ('ior', ('ushr', a, b), ('ishl', a, ('isub', 64, b))), 'options->lower_rotate'), - # Exponential/logarithmic identities - (('~fexp2', ('flog2', a)), a), # 2^lg2(a) = a - (('~flog2', ('fexp2', a)), a), # lg2(2^a) = a - (('fpow', a, b), ('fexp2', ('fmul', ('flog2', a), b)), 'options->lower_fpow'), # a^b = 2^(lg2(a)*b) - (('~fexp2', ('fmul', ('flog2', a), b)), ('fpow', a, b), '!options->lower_fpow'), # 2^(lg2(a)*b) = a^b - (('~fexp2', ('fadd', ('fmul', ('flog2', a), b), ('fmul', ('flog2', c), d))), - ('~fmul', ('fpow', a, b), ('fpow', c, d)), '!options->lower_fpow'), # 2^(lg2(a) * b + lg2(c) + d) = a^b * c^d - (('~fexp2', ('fmul', ('flog2', a), 0.5)), ('fsqrt', a)), - (('~fexp2', ('fmul', ('flog2', a), 2.0)), ('fmul', a, a)), - (('~fexp2', ('fmul', ('flog2', a), 4.0)), ('fmul', ('fmul', a, a), ('fmul', a, a))), - (('~fpow', a, 1.0), a), - (('~fpow', a, 2.0), ('fmul', a, a)), - (('~fpow', a, 4.0), ('fmul', ('fmul', a, a), ('fmul', a, a))), - (('~fpow', 2.0, a), ('fexp2', a)), - (('~fpow', ('fpow', a, 2.2), 0.454545), a), - (('~fpow', ('fabs', ('fpow', a, 2.2)), 0.454545), ('fabs', a)), - (('~fsqrt', ('fexp2', a)), ('fexp2', ('fmul', 0.5, a))), - (('~frcp', ('fexp2', a)), ('fexp2', ('fneg', a))), - (('~frsq', ('fexp2', a)), ('fexp2', ('fmul', -0.5, a))), - (('~flog2', ('fsqrt', a)), ('fmul', 0.5, ('flog2', a))), - (('~flog2', ('frcp', a)), ('fneg', ('flog2', a))), - (('~flog2', ('frsq', a)), ('fmul', -0.5, ('flog2', a))), - (('~flog2', ('fpow', a, b)), ('fmul', b, ('flog2', a))), - (('~fmul', ('fexp2(is_used_once)', a), ('fexp2(is_used_once)', b)), ('fexp2', ('fadd', a, b))), - (('bcsel', ('flt', a, 0.0), 0.0, ('fsqrt', a)), ('fsqrt', ('fmax', a, 0.0))), - (('~fmul', ('fsqrt', a), ('fsqrt', a)), ('fabs',a)), - (('~fmulz', ('fsqrt', a), ('fsqrt', a)), ('fabs', a)), - # Division and reciprocal - (('~fdiv', 1.0, a), ('frcp', a)), - (('fdiv', a, b), ('fmul', a, ('frcp', b)), 'options->lower_fdiv'), - (('~frcp', ('frcp', a)), a), - (('~frcp', ('fsqrt', a)), ('frsq', a)), - (('fsqrt', a), ('frcp', ('frsq', a)), 'options->lower_fsqrt'), - (('~frcp', ('frsq', a)), ('fsqrt', a), '!options->lower_fsqrt'), - # Trig - (('fsin', a), lowered_sincos(0.5), 'options->lower_sincos'), - (('fcos', a), lowered_sincos(0.75), 'options->lower_sincos'), - # Boolean simplifications - (('ieq', a, True), a), - (('ine(is_not_used_by_if)', a, True), ('inot', a)), - (('ine', a, False), a), - (('ieq(is_not_used_by_if)', a, False), ('inot', 'a')), - (('bcsel', a, True, False), a), - (('bcsel', a, False, True), ('inot', a)), - (('bcsel', True, b, c), b), - (('bcsel', False, b, c), c), - - (('bcsel@16', a, 1.0, 0.0), ('b2f', a)), - (('bcsel@16', a, 0.0, 1.0), ('b2f', ('inot', a))), - (('bcsel@16', a, -1.0, -0.0), ('fneg', ('b2f', a))), - (('bcsel@16', a, -0.0, -1.0), ('fneg', ('b2f', ('inot', a)))), - (('bcsel@32', a, 1.0, 0.0), ('b2f', a)), - (('bcsel@32', a, 0.0, 1.0), ('b2f', ('inot', a))), - (('bcsel@32', a, -1.0, -0.0), ('fneg', ('b2f', a))), - (('bcsel@32', a, -0.0, -1.0), ('fneg', ('b2f', ('inot', a)))), - (('bcsel@64', a, 1.0, 0.0), ('b2f', a), '!(options->lower_doubles_options & nir_lower_fp64_full_software)'), - (('bcsel@64', a, 0.0, 1.0), ('b2f', ('inot', a)), '!(options->lower_doubles_options & nir_lower_fp64_full_software)'), - (('bcsel@64', a, -1.0, -0.0), ('fneg', ('b2f', a)), '!(options->lower_doubles_options & nir_lower_fp64_full_software)'), - (('bcsel@64', a, -0.0, -1.0), ('fneg', ('b2f', ('inot', a))), '!(options->lower_doubles_options & nir_lower_fp64_full_software)'), - - (('bcsel', a, b, b), b), - (('~fcsel', a, b, b), b), - - # D3D Boolean emulation - (('bcsel', a, -1, 0), ('ineg', ('b2i', 'a@1'))), - (('bcsel', a, 0, -1), ('ineg', ('b2i', ('inot', a)))), - (('bcsel', a, 1, 0), ('b2i', 'a@1')), - (('bcsel', a, 0, 1), ('b2i', ('inot', a))), - (('iand', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), - ('ineg', ('b2i', ('iand', a, b)))), - (('ior', ('ineg', ('b2i','a@1')), ('ineg', ('b2i', 'b@1'))), - ('ineg', ('b2i', ('ior', a, b)))), - (('ieq', ('ineg', ('b2i', 'a@1')), -1), a), - (('ine', ('ineg', ('b2i', 'a@1')), -1), ('inot', a)), - (('ige', ('ineg', ('b2i', 'a@1')), 0), ('inot', a)), - (('ilt', ('ineg', ('b2i', 'a@1')), 0), a), - (('ult', 0, ('ineg', ('b2i', 'a@1'))), a), - (('iand', ('ineg', ('b2i', a)), 1.0), ('b2f', a)), - (('iand', ('ineg', ('b2i', a)), 1), ('b2i', a)), - - # With D3D booleans, imax is AND and umax is OR - (('imax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), - ('ineg', ('b2i', ('iand', a, b)))), - (('imin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), - ('ineg', ('b2i', ('ior', a, b)))), - (('umax', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), - ('ineg', ('b2i', ('ior', a, b)))), - (('umin', ('ineg', ('b2i', 'a@1')), ('ineg', ('b2i', 'b@1'))), - ('ineg', ('b2i', ('iand', a, b)))), - (('umax', ('b2i', 'a@1'), ('b2i', 'b@1')), ('b2i', ('ior', a, b))), - (('umin', ('b2i', 'a@1'), ('b2i', 'b@1')), ('b2i', ('iand', a, b))), - - (('ine', ('umin', ('ineg', ('b2i', 'a@1')), b), 0), ('iand', a, ('ine', b, 0))), - (('ine', ('umax', ('ineg', ('b2i', 'a@1')), b), 0), ('ior' , a, ('ine', b, 0))), - - # Conversions - (('f2i', ('ftrunc', a)), ('f2i', a)), - (('f2u', ('ftrunc', a)), ('f2u', a)), - - # Conversions from 16 bits to 32 bits and back can always be removed - (('f2fmp', ('f2f32', 'a@16')), a), - (('i2imp', ('i2i32', 'a@16')), a), - (('i2imp', ('u2u32', 'a@16')), a), - - (('f2imp', ('f2f32', 'a@16')), ('f2i16', a)), - (('f2ump', ('f2f32', 'a@16')), ('f2u16', a)), - (('i2fmp', ('i2i32', 'a@16')), ('i2f16', a)), - (('u2fmp', ('u2u32', 'a@16')), ('u2f16', a)), - - (('f2fmp', ('b2f32', 'a@1')), ('b2f16', a)), - (('i2imp', ('b2i32', 'a@1')), ('b2i16', a)), - (('i2imp', ('b2i32', 'a@1')), ('b2i16', a)), - - (('f2imp', ('b2f32', 'a@1')), ('b2i16', a)), - (('f2ump', ('b2f32', 'a@1')), ('b2i16', a)), - (('i2fmp', ('b2i32', 'a@1')), ('b2f16', a)), - (('u2fmp', ('b2i32', 'a@1')), ('b2f16', a)), - - # Conversions to 16 bits would be lossy so they should only be removed if - # the instruction was generated by the precision lowering pass. - (('f2f32', ('f2fmp', 'a@32')), a), - (('i2i32', ('i2imp', 'a@32')), a), - (('u2u32', ('i2imp', 'a@32')), a), - - # typeA@32 -> typeB@16 -> typeB@32 ==> typeA@32 -> typeB@32 - (('i2i32', ('f2imp', 'a@32')), ('f2i32', a)), - (('u2u32', ('f2ump', 'a@32')), ('f2u32', a)), - (('f2f32', ('i2fmp', 'a@32')), ('i2f32', a)), - (('f2f32', ('u2fmp', 'a@32')), ('u2f32', a)), - - # typeA@32 -> typeA@16 -> typeB@32 ==> typeA@32 -> typeB@32 - (('f2i32', ('f2fmp', 'a@32')), ('f2i32', a)), - (('f2u32', ('f2fmp', 'a@32')), ('f2u32', a)), - (('i2f32', ('i2imp', 'a@32')), ('i2f32', a)), - - (('ffloor', 'a(is_integral)'), a), - (('fceil', 'a(is_integral)'), a), - (('ftrunc', 'a(is_integral)'), a), - (('fround_even', 'a(is_integral)'), a), - - # fract(x) = x - floor(x), so fract(NaN) = NaN - (('~ffract', 'a(is_integral)'), 0.0), - (('fabs', 'a(is_not_negative)'), a), - (('iabs', 'a(is_not_negative)'), a), - (('fsat', 'a(is_not_positive)'), 0.0), - - (('~fmin', 'a(is_not_negative)', 1.0), ('fsat', a), '!options->lower_fsat'), - - # The result of the multiply must be in [-1, 0], so the result of the ffma - # must be in [0, 1]. - (('flt', ('fadd', ('fmul', ('fsat', a), ('fneg', ('fsat', a))), 1.0), 0.0), False), - (('flt', ('fadd', ('fneg', ('fmul', ('fsat', a), ('fsat', a))), 1.0), 0.0), False), - (('fmax', ('fadd', ('fmul', ('fsat', a), ('fneg', ('fsat', a))), 1.0), 0.0), ('fadd', ('fmul', ('fsat', a), ('fneg', ('fsat', a))), 1.0)), - (('fmax', ('fadd', ('fneg', ('fmul', ('fsat', a), ('fsat', a))), 1.0), 0.0), ('fadd', ('fneg', ('fmul', ('fsat', a), ('fsat', a))), 1.0)), - - (('fneu', 'a(is_not_zero)', 0.0), True), - (('feq', 'a(is_not_zero)', 0.0), False), - - # In this chart, + means value > 0 and - means value < 0. - # - # + >= + -> unknown 0 >= + -> false - >= + -> false - # + >= 0 -> true 0 >= 0 -> true - >= 0 -> false - # + >= - -> true 0 >= - -> true - >= - -> unknown - # - # Using grouping conceptually similar to a Karnaugh map... - # - # (+ >= 0, + >= -, 0 >= 0, 0 >= -) == (is_not_negative >= is_not_positive) -> true - # (0 >= +, - >= +) == (is_not_positive >= gt_zero) -> false - # (- >= +, - >= 0) == (lt_zero >= is_not_negative) -> false - # - # The flt / ilt cases just invert the expected result. - # - # The results expecting true, must be marked imprecise. The results - # expecting false are fine because NaN compared >= or < anything is false. - - (('fge', 'a(is_a_number_not_negative)', 'b(is_a_number_not_positive)'), True), - (('fge', 'a(is_not_positive)', 'b(is_gt_zero)'), False), - (('fge', 'a(is_lt_zero)', 'b(is_not_negative)'), False), - - (('flt', 'a(is_not_negative)', 'b(is_not_positive)'), False), - (('flt', 'a(is_a_number_not_positive)', 'b(is_a_number_gt_zero)'), True), - (('flt', 'a(is_a_number_lt_zero)', 'b(is_a_number_not_negative)'), True), - - (('ine', 'a(is_not_zero)', 0), True), - (('ieq', 'a(is_not_zero)', 0), False), - - (('ige', 'a(is_not_negative)', 'b(is_not_positive)'), True), - (('ige', 'a(is_not_positive)', 'b(is_gt_zero)'), False), - (('ige', 'a(is_lt_zero)', 'b(is_not_negative)'), False), - - (('ilt', 'a(is_not_negative)', 'b(is_not_positive)'), False), - (('ilt', 'a(is_not_positive)', 'b(is_gt_zero)'), True), - (('ilt', 'a(is_lt_zero)', 'b(is_not_negative)'), True), - - (('ult', 0, 'a(is_gt_zero)'), True), - (('ult', a, 0), False), - - # Packing and then unpacking does nothing - (('unpack_64_2x32_split_x', ('pack_64_2x32_split', a, b)), a), - (('unpack_64_2x32_split_y', ('pack_64_2x32_split', a, b)), b), - (('unpack_64_2x32_split_x', ('pack_64_2x32', a)), 'a.x'), - (('unpack_64_2x32_split_y', ('pack_64_2x32', a)), 'a.y'), - (('unpack_64_2x32_split_x', ('u2u64', 'a@32')), a), - (('unpack_64_2x32_split_y', ('u2u64', a)), 0), - (('unpack_64_2x32_split_x', ('i2i64', 'a@32')), a), - (('unpack_64_2x32_split_y', ('i2i64(is_used_once)', 'a@32')), ('ishr', a, 31)), - (('unpack_64_2x32', ('pack_64_2x32_split', a, b)), ('vec2', a, b)), - (('unpack_64_2x32', ('pack_64_2x32', a)), a), - (('unpack_double_2x32_dxil', ('pack_double_2x32_dxil', a)), a), - (('pack_64_2x32_split', ('unpack_64_2x32_split_x', a), - ('unpack_64_2x32_split_y', a)), a), - (('pack_64_2x32', ('vec2', ('unpack_64_2x32_split_x', a), - ('unpack_64_2x32_split_y', a))), a), - (('pack_64_2x32', ('unpack_64_2x32', a)), a), - (('pack_double_2x32_dxil', ('unpack_double_2x32_dxil', a)), a), - - # Comparing two halves of an unpack separately. While this optimization - # should be correct for non-constant values, it's less obvious that it's - # useful in that case. For constant values, the pack will fold and we're - # guaranteed to reduce the whole tree to one instruction. - (('iand', ('ieq', ('unpack_32_2x16_split_x', a), '#b'), - ('ieq', ('unpack_32_2x16_split_y', a), '#c')), - ('ieq', a, ('pack_32_2x16_split', b, c))), - - # Byte extraction - (('ushr', 'a@16', 8), ('extract_u8', a, 1), '!options->lower_extract_byte'), - (('ushr', 'a@32', 24), ('extract_u8', a, 3), '!options->lower_extract_byte'), - (('ushr', 'a@64', 56), ('extract_u8', a, 7), '!options->lower_extract_byte'), - (('ishr', 'a@16', 8), ('extract_i8', a, 1), '!options->lower_extract_byte'), - (('ishr', 'a@32', 24), ('extract_i8', a, 3), '!options->lower_extract_byte'), - (('ishr', 'a@64', 56), ('extract_i8', a, 7), '!options->lower_extract_byte'), - (('iand', 0xff, a), ('extract_u8', a, 0), '!options->lower_extract_byte'), - - # Common pattern in many Vulkan CTS tests that read 8-bit integers from a - # storage buffer. - (('u2u8', ('extract_u16', a, 1)), ('u2u8', ('extract_u8', a, 2)), '!options->lower_extract_byte'), - (('u2u8', ('ushr', a, 8)), ('u2u8', ('extract_u8', a, 1)), '!options->lower_extract_byte'), - - # Common pattern after lowering 8-bit integers to 16-bit. - (('i2i16', ('u2u8', ('extract_u8', a, b))), ('i2i16', ('extract_i8', a, b))), - (('u2u16', ('u2u8', ('extract_u8', a, b))), ('u2u16', ('extract_u8', a, b))), - - (('ubfe', a, 0, 8), ('extract_u8', a, 0), '!options->lower_extract_byte'), - (('ubfe', a, 8, 8), ('extract_u8', a, 1), '!options->lower_extract_byte'), - (('ubfe', a, 16, 8), ('extract_u8', a, 2), '!options->lower_extract_byte'), - (('ubfe', a, 24, 8), ('extract_u8', a, 3), '!options->lower_extract_byte'), - (('ibfe', a, 0, 8), ('extract_i8', a, 0), '!options->lower_extract_byte'), - (('ibfe', a, 8, 8), ('extract_i8', a, 1), '!options->lower_extract_byte'), - (('ibfe', a, 16, 8), ('extract_i8', a, 2), '!options->lower_extract_byte'), - (('ibfe', a, 24, 8), ('extract_i8', a, 3), '!options->lower_extract_byte'), - - (('extract_u8', ('extract_i8', a, b), 0), ('extract_u8', a, b)), - (('extract_u8', ('extract_u8', a, b), 0), ('extract_u8', a, b)), - - # Word extraction - (('ushr', ('ishl', 'a@32', 16), 16), ('extract_u16', a, 0), '!options->lower_extract_word'), - (('ushr', 'a@32', 16), ('extract_u16', a, 1), '!options->lower_extract_word'), - (('ishr', ('ishl', 'a@32', 16), 16), ('extract_i16', a, 0), '!options->lower_extract_word'), - (('ishr', 'a@32', 16), ('extract_i16', a, 1), '!options->lower_extract_word'), - (('iand', 0xffff, a), ('extract_u16', a, 0), '!options->lower_extract_word'), - - (('ubfe', a, 0, 16), ('extract_u16', a, 0), '!options->lower_extract_word'), - (('ubfe', a, 16, 16), ('extract_u16', a, 1), '!options->lower_extract_word'), - (('ibfe', a, 0, 16), ('extract_i16', a, 0), '!options->lower_extract_word'), - (('ibfe', a, 16, 16), ('extract_i16', a, 1), '!options->lower_extract_word'), - - # Packing a u8vec4 to write to an SSBO. - (('ior', ('ishl', ('u2u32', 'a@8'), 24), ('ior', ('ishl', ('u2u32', 'b@8'), 16), ('ior', ('ishl', ('u2u32', 'c@8'), 8), ('u2u32', 'd@8')))), - ('pack_32_4x8', ('vec4', d, c, b, a)), 'options->has_pack_32_4x8'), - - (('extract_u16', ('extract_i16', a, b), 0), ('extract_u16', a, b)), - (('extract_u16', ('extract_u16', a, b), 0), ('extract_u16', a, b)), - - # Lower pack/unpack - (('pack_64_2x32_split', a, b), ('ior', ('u2u64', a), ('ishl', ('u2u64', b), 32)), 'options->lower_pack_64_2x32_split'), - (('pack_32_2x16_split', a, b), ('ior', ('u2u32', a), ('ishl', ('u2u32', b), 16)), 'options->lower_pack_32_2x16_split'), - (('pack_half_2x16_split', a, b), ('pack_half_2x16_rtz_split', a, b), 'options->has_pack_half_2x16_rtz'), - (('unpack_64_2x32_split_x', a), ('u2u32', a), 'options->lower_unpack_64_2x32_split'), - (('unpack_64_2x32_split_y', a), ('u2u32', ('ushr', a, 32)), 'options->lower_unpack_64_2x32_split'), - (('unpack_32_2x16_split_x', a), ('u2u16', a), 'options->lower_unpack_32_2x16_split'), - (('unpack_32_2x16_split_y', a), ('u2u16', ('ushr', a, 16)), 'options->lower_unpack_32_2x16_split'), - - # Useless masking before unpacking - (('unpack_half_2x16_split_x', ('iand', a, 0xffff)), ('unpack_half_2x16_split_x', a)), - (('unpack_32_2x16_split_x', ('iand', a, 0xffff)), ('unpack_32_2x16_split_x', a)), - (('unpack_64_2x32_split_x', ('iand', a, 0xffffffff)), ('unpack_64_2x32_split_x', a)), - (('unpack_half_2x16_split_y', ('iand', a, 0xffff0000)), ('unpack_half_2x16_split_y', a)), - (('unpack_32_2x16_split_y', ('iand', a, 0xffff0000)), ('unpack_32_2x16_split_y', a)), - (('unpack_64_2x32_split_y', ('iand', a, 0xffffffff00000000)), ('unpack_64_2x32_split_y', a)), - - (('unpack_half_2x16_split_x', ('extract_u16', a, 0)), ('unpack_half_2x16_split_x', a)), - (('unpack_half_2x16_split_x', ('extract_u16', a, 1)), ('unpack_half_2x16_split_y', a)), - (('unpack_half_2x16_split_x', ('ushr', a, 16)), ('unpack_half_2x16_split_y', a)), - (('unpack_32_2x16_split_x', ('extract_u16', a, 0)), ('unpack_32_2x16_split_x', a)), - (('unpack_32_2x16_split_x', ('extract_u16', a, 1)), ('unpack_32_2x16_split_y', a)), - - # Optimize half packing - (('ishl', ('pack_half_2x16', ('vec2', a, 0)), 16), ('pack_half_2x16', ('vec2', 0, a))), - (('ushr', ('pack_half_2x16', ('vec2', 0, a)), 16), ('pack_half_2x16', ('vec2', a, 0))), - - (('iadd', ('pack_half_2x16', ('vec2', a, 0)), ('pack_half_2x16', ('vec2', 0, b))), - ('pack_half_2x16', ('vec2', a, b))), - (('ior', ('pack_half_2x16', ('vec2', a, 0)), ('pack_half_2x16', ('vec2', 0, b))), - ('pack_half_2x16', ('vec2', a, b))), - - (('ishl', ('pack_half_2x16_split', a, 0), 16), ('pack_half_2x16_split', 0, a)), - (('ushr', ('pack_half_2x16_split', 0, a), 16), ('pack_half_2x16_split', a, 0)), - (('extract_u16', ('pack_half_2x16_split', 0, a), 1), ('pack_half_2x16_split', a, 0)), - - (('ishl', ('pack_half_2x16_rtz_split', a, 0), 16), ('pack_half_2x16_rtz_split', 0, a)), - (('ushr', ('pack_half_2x16_rtz_split', 0, a), 16), ('pack_half_2x16_rtz_split', a, 0)), - (('extract_u16', ('pack_half_2x16_rtz_split', 0, a), 1), ('pack_half_2x16_rtz_split', a, 0)), - - (('iadd', ('pack_half_2x16_split', a, 0), ('pack_half_2x16_split', 0, b)), ('pack_half_2x16_split', a, b)), - (('ior', ('pack_half_2x16_split', a, 0), ('pack_half_2x16_split', 0, b)), ('pack_half_2x16_split', a, b)), - - (('iadd', ('pack_half_2x16_rtz_split', a, 0), ('pack_half_2x16_rtz_split', 0, b)), ('pack_half_2x16_rtz_split', a, b)), - (('ior', ('pack_half_2x16_rtz_split', a, 0), ('pack_half_2x16_rtz_split', 0, b)), ('pack_half_2x16_rtz_split', a, b)), - - (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 0), ('i2i', a)), - (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 1), ('i2i', b)), - (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 2), ('i2i', c)), - (('extract_i8', ('pack_32_4x8_split', a, b, c, d), 3), ('i2i', d)), - (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 0), ('u2u', a)), - (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 1), ('u2u', b)), - (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 2), ('u2u', c)), - (('extract_u8', ('pack_32_4x8_split', a, b, c, d), 3), ('u2u', d)), -]) - -# After the ('extract_u8', a, 0) pattern, above, triggers, there will be -# patterns like those below. -for op in ('ushr', 'ishr'): - optimizations.extend([(('extract_u8', (op, 'a@16', 8), 0), ('extract_u8', a, 1))]) - optimizations.extend([(('extract_u8', (op, 'a@32', 8 * i), 0), ('extract_u8', a, i)) for i in range(1, 4)]) - optimizations.extend([(('extract_u8', (op, 'a@64', 8 * i), 0), ('extract_u8', a, i)) for i in range(1, 8)]) - -optimizations.extend([(('extract_u8', ('extract_u16', a, 1), 0), ('extract_u8', a, 2))]) - -# After the ('extract_[iu]8', a, 3) patterns, above, trigger, there will be -# patterns like those below. -for op in ('extract_u8', 'extract_i8'): - optimizations.extend([((op, ('ishl', 'a@16', 8), 1), (op, a, 0))]) - optimizations.extend([((op, ('ishl', 'a@32', 24 - 8 * i), 3), (op, a, i)) for i in range(2, -1, -1)]) - optimizations.extend([((op, ('ishl', 'a@64', 56 - 8 * i), 7), (op, a, i)) for i in range(6, -1, -1)]) - -optimizations.extend([ - # Subtracts - (('ussub_4x8_vc4', a, 0), a), - (('ussub_4x8_vc4', a, ~0), 0), - # Lower all Subtractions first - they can get recombined later - (('fsub', a, b), ('fadd', a, ('fneg', b))), - (('isub', a, b), ('iadd', a, ('ineg', b))), - (('uabs_usub', a, b), ('bcsel', ('ult', a, b), ('ineg', ('isub', a, b)), ('isub', a, b))), - # This is correct. We don't need isub_sat because the result type is unsigned, so it cannot overflow. - (('uabs_isub', a, b), ('bcsel', ('ilt', a, b), ('ineg', ('isub', a, b)), ('isub', a, b))), - - # Propagate negation up multiplication chains - (('fmul(is_used_by_non_fsat)', ('fneg', a), b), ('fneg', ('fmul', a, b))), - (('fmulz(is_used_by_non_fsat)', ('fneg', a), b), ('fneg', ('fmulz', a, b)), '!'+signed_zero_inf_nan_preserve_32), - (('ffma', ('fneg', a), ('fneg', b), c), ('ffma', a, b, c)), - (('ffmaz', ('fneg', a), ('fneg', b), c), ('ffmaz', a, b, c)), - (('imul', ('ineg', a), b), ('ineg', ('imul', a, b))), - - # Propagate constants up multiplication chains - (('~fmul(is_used_once)', ('fmul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c'), ('fmul', ('fmul', a, c), b)), - (('~fmulz(is_used_once)', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c'), ('fmulz', ('fmulz', a, c), b)), - (('~fmul(is_used_once)', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c(is_finite_not_zero)'), ('fmulz', ('fmul', a, c), b)), - (('imul(is_used_once)', ('imul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c'), ('imul', ('imul', a, c), b)), - (('~ffma', ('fmul(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c', d), ('ffma', ('fmul', a, c), b, d)), - (('~ffmaz', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c', d), ('ffmaz', ('fmulz', a, c), b, d)), - (('~ffma', ('fmulz(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c(is_finite_not_zero)', d), ('ffmaz', ('fmul', a, c), b, d)), - # Prefer moving out a multiplication for more MAD/FMA-friendly code - (('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', 'b(is_fmul)'), '#c'), ('fadd', ('fadd', a, c), b)), - (('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c'), ('fadd', ('fadd', a, c), b)), - (('~fadd(is_used_once)', ('ffma(is_used_once)', 'a(is_not_const)', b, 'c(is_not_const)'), '#d'), ('fadd', ('ffma', a, b, d), c)), - (('~fadd(is_used_once)', ('ffmaz(is_used_once)', 'a(is_not_const)', b, 'c(is_not_const)'), '#d'), ('fadd', ('ffmaz', a, b, d), c)), - (('iadd(is_used_once)', ('iadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), '#c'), ('iadd', ('iadd', a, c), b)), - - # Reassociate constants in add/mul chains so they can be folded together. - # For now, we mostly only handle cases where the constants are separated by - # a single non-constant. We could do better eventually. - (('~fmul', '#a', ('fmul', 'b(is_not_const)', '#c')), ('fmul', ('fmul', a, c), b)), - (('~fmulz', '#a', ('fmulz', 'b(is_not_const)', '#c')), ('fmulz', ('fmulz', a, c), b)), - (('~fmul', '#a(is_finite_not_zero)', ('fmulz', 'b(is_not_const)', '#c')), ('fmulz', ('fmul', a, c), b)), - (('~ffma', '#a', ('fmul', 'b(is_not_const)', '#c'), d), ('ffma', ('fmul', a, c), b, d)), - (('~ffmaz', '#a', ('fmulz', 'b(is_not_const)', '#c'), d), ('ffmaz', ('fmulz', a, c), b, d)), - (('~ffmaz', '#a(is_finite_not_zero)', ('fmulz', 'b(is_not_const)', '#c'), d), ('ffmaz', ('fmul', a, c), b, d)), - (('imul', '#a', ('imul', 'b(is_not_const)', '#c')), ('imul', ('imul', a, c), b)), - (('~fadd', '#a', ('fadd', 'b(is_not_const)', '#c')), ('fadd', ('fadd', a, c), b)), - (('~fadd', '#a', ('fneg', ('fadd', 'b(is_not_const)', '#c'))), ('fadd', ('fadd', a, ('fneg', c)), ('fneg', b))), - (('~fadd', '#a', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d')), ('ffma', b, c, ('fadd', a, d))), - (('~fadd', '#a', ('fneg', ('ffma', 'b(is_not_const)', 'c(is_not_const)', '#d'))), ('ffma', ('fneg', b), c, ('fadd', a, ('fneg', d)))), - (('~fadd', '#a', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d')), ('ffmaz', b, c, ('fadd', a, d))), - (('~fadd', '#a', ('fneg', ('ffmaz', 'b(is_not_const)', 'c(is_not_const)', '#d'))), ('ffmaz', ('fneg', b), c, ('fadd', a, ('fneg', d)))), - (('iadd', '#a', ('iadd', 'b(is_not_const)', '#c')), ('iadd', ('iadd', a, c), b)), - (('iand', '#a', ('iand', 'b(is_not_const)', '#c')), ('iand', ('iand', a, c), b)), - (('ior', '#a', ('ior', 'b(is_not_const)', '#c')), ('ior', ('ior', a, c), b)), - (('ixor', '#a', ('ixor', 'b(is_not_const)', '#c')), ('ixor', ('ixor', a, c), b)), - - # Reassociate add chains for more MAD/FMA-friendly code - (('~fadd', ('fadd(is_used_once)', 'a(is_fmul)', 'b(is_fmul)'), 'c(is_not_fmul)'), ('fadd', ('fadd', a, c), b)), - - # Drop mul-div by the same value when there's no wrapping. - (('idiv', ('imul(no_signed_wrap)', a, b), b), a), - - # By definition... - (('bcsel', ('ige', ('find_lsb', a), 0), ('find_lsb', a), -1), ('find_lsb', a)), - (('bcsel', ('ige', ('ifind_msb', a), 0), ('ifind_msb', a), -1), ('ifind_msb', a)), - (('bcsel', ('ige', ('ufind_msb', a), 0), ('ufind_msb', a), -1), ('ufind_msb', a)), - (('bcsel', ('ige', ('ifind_msb_rev', a), 0), ('ifind_msb_rev', a), -1), ('ifind_msb_rev', a)), - (('bcsel', ('ige', ('ufind_msb_rev', a), 0), ('ufind_msb_rev', a), -1), ('ufind_msb_rev', a)), - - (('bcsel', ('ine', a, 0), ('find_lsb', a), -1), ('find_lsb', a)), - (('bcsel', ('ine', a, 0), ('ifind_msb', a), -1), ('ifind_msb', a)), - (('bcsel', ('ine', a, 0), ('ufind_msb', a), -1), ('ufind_msb', a)), - (('bcsel', ('ine', a, 0), ('ifind_msb_rev', a), -1), ('ifind_msb_rev', a)), - (('bcsel', ('ine', a, 0), ('ufind_msb_rev', a), -1), ('ufind_msb_rev', a)), - - (('bcsel', ('ine', a, -1), ('ifind_msb', a), -1), ('ifind_msb', a)), - (('bcsel', ('ine', a, -1), ('ifind_msb_rev', a), -1), ('ifind_msb_rev', a)), - - (('bcsel', ('ine', ('ifind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb', a))), -1), ('ifind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ine', ('ufind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb', a))), -1), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ieq', ('ifind_msb', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ifind_msb', a)))), ('ifind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ieq', ('ufind_msb', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ufind_msb', a)))), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ine', ('ifind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb', a))), ('ifind_msb', a)), ('ifind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ine', ('ufind_msb', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb', a))), ('ufind_msb', a)), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ieq', ('ifind_msb', 'a@32'), -1), ('ifind_msb', a), ('iadd', 31, ('ineg', ('ifind_msb', a)))), ('ifind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ieq', ('ufind_msb', 'a@32'), -1), ('ufind_msb', a), ('iadd', 31, ('ineg', ('ufind_msb', a)))), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb', a))), -1), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ieq', 'a@32', 0), -1, ('iadd', 31, ('ineg', ('ufind_msb', a)))), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb', a))), ('ufind_msb', a)), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('bcsel', ('ieq', 'a@32', 0), ('ufind_msb', a), ('iadd', 31, ('ineg', ('ufind_msb', a)))), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - - (('bcsel', ('ine', ('ifind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb_rev', a))), -1), ('ifind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ine', ('ufind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb_rev', a))), -1), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ieq', ('ifind_msb_rev', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ifind_msb_rev', a)))), ('ifind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ieq', ('ufind_msb_rev', 'a@32'), -1), -1, ('iadd', 31, ('ineg', ('ufind_msb_rev', a)))), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ine', ('ifind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ifind_msb_rev', a))), ('ifind_msb_rev', a)), ('ifind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ine', ('ufind_msb_rev', 'a@32'), -1), ('iadd', 31, ('ineg', ('ufind_msb_rev', a))), ('ufind_msb_rev', a)), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ieq', ('ifind_msb_rev', 'a@32'), -1), ('ifind_msb_rev', a), ('iadd', 31, ('ineg', ('ifind_msb_rev', a)))), ('ifind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ieq', ('ufind_msb_rev', 'a@32'), -1), ('ufind_msb_rev', a), ('iadd', 31, ('ineg', ('ufind_msb_rev', a)))), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb_rev', a))), -1), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ieq', 'a@32', 0), -1, ('iadd', 31, ('ineg', ('ufind_msb_rev', a)))), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ine', 'a@32', 0), ('iadd', 31, ('ineg', ('ufind_msb_rev', a))), ('ufind_msb_rev', a)), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - (('bcsel', ('ieq', 'a@32', 0), ('ufind_msb_rev', a), ('iadd', 31, ('ineg', ('ufind_msb_rev', a)))), ('ufind_msb', a), '!options->lower_find_msb_to_reverse'), - - # This is safe. Both ufind_msb_rev and bitfield_reverse can only have - # 32-bit sources, so the transformation can only generate correct NIR. - (('find_lsb', ('bitfield_reverse', a)), ('ufind_msb_rev', a), 'options->has_find_msb_rev'), - (('ufind_msb_rev', ('bitfield_reverse', a)), ('find_lsb', a), '!options->lower_find_lsb'), - - (('ifind_msb', ('f2i32(is_used_once)', a)), ('ufind_msb', ('f2i32', ('fabs', a)))), - - (('~fmul', ('bcsel(is_used_once)', c, -1.0, 1.0), b), ('bcsel', c, ('fneg', b), b)), - (('~fmul', ('bcsel(is_used_once)', c, 1.0, -1.0), b), ('bcsel', c, b, ('fneg', b))), - (('~fmulz', ('bcsel(is_used_once)', c, -1.0, 1.0), b), ('bcsel', c, ('fneg', b), b)), - (('~fmulz', ('bcsel(is_used_once)', c, 1.0, -1.0), b), ('bcsel', c, b, ('fneg', b))), - (('fabs', ('bcsel(is_used_once)', b, ('fneg', a), a)), ('fabs', a)), - (('fabs', ('bcsel(is_used_once)', b, a, ('fneg', a))), ('fabs', a)), - (('~bcsel', ('flt', a, 0.0), ('fneg', a), a), ('fabs', a)), - - (('bcsel', a, ('bcsel', b, c, d), d), ('bcsel', ('iand', a, b), c, d)), - (('bcsel', a, b, ('bcsel', c, b, d)), ('bcsel', ('ior', a, c), b, d)), - - # Misc. lowering - (('fmod', a, b), ('fsub', a, ('fmul', b, ('ffloor', ('fdiv', a, b)))), 'options->lower_fmod'), - (('frem', a, b), ('fsub', a, ('fmul', b, ('ftrunc', ('fdiv', a, b)))), 'options->lower_fmod'), - (('uadd_carry', a, b), ('b2i', ('ult', ('iadd', a, b), a)), 'options->lower_uadd_carry'), - (('usub_borrow', a, b), ('b2i', ('ult', a, b)), 'options->lower_usub_borrow'), - - (('bitfield_insert', 'base', 'insert', 'offset', 'bits'), - ('bcsel', ('ult', 31, 'bits'), 'insert', - ('bfi', ('bfm', 'bits', 'offset'), 'insert', 'base')), - 'options->lower_bitfield_insert'), - (('ihadd', a, b), ('iadd', ('iand', a, b), ('ishr', ('ixor', a, b), 1)), 'options->lower_hadd'), - (('uhadd', a, b), ('iadd', ('iand', a, b), ('ushr', ('ixor', a, b), 1)), 'options->lower_hadd'), - (('irhadd', a, b), ('isub', ('ior', a, b), ('ishr', ('ixor', a, b), 1)), 'options->lower_hadd'), - (('urhadd', a, b), ('isub', ('ior', a, b), ('ushr', ('ixor', a, b), 1)), 'options->lower_hadd'), - (('ihadd@64', a, b), ('iadd', ('iand', a, b), ('ishr', ('ixor', a, b), 1)), 'options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0'), - (('uhadd@64', a, b), ('iadd', ('iand', a, b), ('ushr', ('ixor', a, b), 1)), 'options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0'), - (('irhadd@64', a, b), ('isub', ('ior', a, b), ('ishr', ('ixor', a, b), 1)), 'options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0'), - (('urhadd@64', a, b), ('isub', ('ior', a, b), ('ushr', ('ixor', a, b), 1)), 'options->lower_hadd64 || (options->lower_int64_options & nir_lower_iadd64) != 0'), - - (('imul_32x16', a, b), ('imul', a, ('extract_i16', b, 0)), 'options->lower_mul_32x16'), - (('umul_32x16', a, b), ('imul', a, ('extract_u16', b, 0)), 'options->lower_mul_32x16'), - - (('uadd_sat@64', a, b), ('bcsel', ('ult', ('iadd', a, b), a), -1, ('iadd', a, b)), 'options->lower_uadd_sat || (options->lower_int64_options & nir_lower_iadd64) != 0'), - (('uadd_sat', a, b), ('bcsel', ('ult', ('iadd', a, b), a), -1, ('iadd', a, b)), 'options->lower_uadd_sat'), - (('usub_sat', a, b), ('bcsel', ('ult', a, b), 0, ('isub', a, b)), 'options->lower_usub_sat'), - (('usub_sat@64', a, b), ('bcsel', ('ult', a, b), 0, ('isub', a, b)), '(options->lower_int64_options & nir_lower_usub_sat64) != 0'), - - # int64_t sum = a + b; - # - # if (a < 0 && b < 0 && a < sum) - # sum = INT64_MIN; - # } else if (a >= 0 && b >= 0 && sum < a) - # sum = INT64_MAX; - # } - # - # A couple optimizations are applied. - # - # 1. a < sum => sum >= 0. This replacement works because it is known that - # a < 0 and b < 0, so sum should also be < 0 unless there was - # underflow. - # - # 2. sum < a => sum < 0. This replacement works because it is known that - # a >= 0 and b >= 0, so sum should also be >= 0 unless there was - # overflow. - # - # 3. Invert the second if-condition and swap the order of parameters for - # the bcsel. !(a >= 0 && b >= 0 && sum < 0) becomes !(a >= 0) || !(b >= - # 0) || !(sum < 0), and that becomes (a < 0) || (b < 0) || (sum >= 0) - # - # On Intel Gen11, this saves ~11 instructions. - (('iadd_sat@64', a, b), ('bcsel', - ('iand', ('iand', ('ilt', a, 0), ('ilt', b, 0)), ('ige', ('iadd', a, b), 0)), - 0x8000000000000000, - ('bcsel', - ('ior', ('ior', ('ilt', a, 0), ('ilt', b, 0)), ('ige', ('iadd', a, b), 0)), - ('iadd', a, b), - 0x7fffffffffffffff)), - '(options->lower_int64_options & nir_lower_iadd_sat64) != 0'), - - # int64_t sum = a - b; - # - # if (a < 0 && b >= 0 && a < sum) - # sum = INT64_MIN; - # } else if (a >= 0 && b < 0 && a >= sum) - # sum = INT64_MAX; - # } - # - # Optimizations similar to the iadd_sat case are applied here. - (('isub_sat@64', a, b), ('bcsel', - ('iand', ('iand', ('ilt', a, 0), ('ige', b, 0)), ('ige', ('isub', a, b), 0)), - 0x8000000000000000, - ('bcsel', - ('ior', ('ior', ('ilt', a, 0), ('ige', b, 0)), ('ige', ('isub', a, b), 0)), - ('isub', a, b), - 0x7fffffffffffffff)), - '(options->lower_int64_options & nir_lower_iadd_sat64) != 0'), - - # These are done here instead of in the backend because the int64 lowering - # pass will make a mess of the patterns. The first patterns are - # conditioned on nir_lower_minmax64 because it was not clear that it was - # always an improvement on platforms that have real int64 support. No - # shaders in shader-db hit this, so it was hard to say one way or the - # other. - (('ilt', ('imax(is_used_once)', 'a@64', 'b@64'), 0), ('ilt', ('imax', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)), 0), '(options->lower_int64_options & nir_lower_minmax64) != 0'), - (('ilt', ('imin(is_used_once)', 'a@64', 'b@64'), 0), ('ilt', ('imin', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)), 0), '(options->lower_int64_options & nir_lower_minmax64) != 0'), - (('ige', ('imax(is_used_once)', 'a@64', 'b@64'), 0), ('ige', ('imax', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)), 0), '(options->lower_int64_options & nir_lower_minmax64) != 0'), - (('ige', ('imin(is_used_once)', 'a@64', 'b@64'), 0), ('ige', ('imin', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)), 0), '(options->lower_int64_options & nir_lower_minmax64) != 0'), - (('ilt', 'a@64', 0), ('ilt', ('unpack_64_2x32_split_y', a), 0), '(options->lower_int64_options & nir_lower_icmp64) != 0'), - (('ige', 'a@64', 0), ('ige', ('unpack_64_2x32_split_y', a), 0), '(options->lower_int64_options & nir_lower_icmp64) != 0'), - - (('ine', 'a@64', 0), ('ine', ('ior', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_y', a)), 0), '(options->lower_int64_options & nir_lower_icmp64) != 0'), - (('ieq', 'a@64', 0), ('ieq', ('ior', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_y', a)), 0), '(options->lower_int64_options & nir_lower_icmp64) != 0'), - # 0u < uint(a) <=> uint(a) != 0u - (('ult', 0, 'a@64'), ('ine', ('ior', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_y', a)), 0), '(options->lower_int64_options & nir_lower_icmp64) != 0'), - - # Alternative lowering that doesn't rely on bfi. - (('bitfield_insert', 'base', 'insert', 'offset', 'bits'), - ('bcsel', ('ult', 31, 'bits'), - 'insert', - (('ior', - ('iand', 'base', ('inot', ('ishl', ('isub', ('ishl', 1, 'bits'), 1), 'offset'))), - ('iand', ('ishl', 'insert', 'offset'), ('ishl', ('isub', ('ishl', 1, 'bits'), 1), 'offset'))))), - 'options->lower_bitfield_insert_to_shifts'), - - # Alternative lowering that uses bitfield_select. - (('bitfield_insert', 'base', 'insert', 'offset', 'bits'), - ('bcsel', ('ult', 31, 'bits'), 'insert', - ('bitfield_select', ('bfm', 'bits', 'offset'), ('ishl', 'insert', 'offset'), 'base')), - 'options->lower_bitfield_insert_to_bitfield_select'), - - (('ibitfield_extract', 'value', 'offset', 'bits'), - ('bcsel', ('ult', 31, 'bits'), 'value', - ('ibfe', 'value', 'offset', 'bits')), - 'options->lower_bitfield_extract'), - - (('ubitfield_extract', 'value', 'offset', 'bits'), - ('bcsel', ('ult', 31, 'bits'), 'value', - ('ubfe', 'value', 'offset', 'bits')), - 'options->lower_bitfield_extract'), - - # (src0 & src1) | (~src0 & src2). Constant fold if src2 is 0. - (('bitfield_select', a, b, 0), ('iand', a, b)), - (('bitfield_select', a, ('iand', a, b), c), ('bitfield_select', a, b, c)), - - # Note that these opcodes are defined to only use the five least significant bits of 'offset' and 'bits' - (('ubfe', 'value', 'offset', ('iand', 31, 'bits')), ('ubfe', 'value', 'offset', 'bits')), - (('ubfe', 'value', ('iand', 31, 'offset'), 'bits'), ('ubfe', 'value', 'offset', 'bits')), - (('ibfe', 'value', 'offset', ('iand', 31, 'bits')), ('ibfe', 'value', 'offset', 'bits')), - (('ibfe', 'value', ('iand', 31, 'offset'), 'bits'), ('ibfe', 'value', 'offset', 'bits')), - (('bfm', 'bits', ('iand', 31, 'offset')), ('bfm', 'bits', 'offset')), - (('bfm', ('iand', 31, 'bits'), 'offset'), ('bfm', 'bits', 'offset')), - - # Optimizations for ubitfield_extract(value, offset, umin(bits, 32-(offset&0x1f))) and such - (('ult', a, ('umin', ('iand', a, b), c)), False), - (('ult', 31, ('umin', '#bits(is_ult_32)', a)), False), - (('ubfe', 'value', 'offset', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset'))))), - ('ubfe', 'value', 'offset', 'width')), - (('ibfe', 'value', 'offset', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset'))))), - ('ibfe', 'value', 'offset', 'width')), - (('bfm', ('umin', 'width', ('iadd', 32, ('ineg', ('iand', 31, 'offset')))), 'offset'), - ('bfm', 'width', 'offset')), - - # open-coded BFM - (('iadd@32', ('ishl', 1, a), -1), ('bfm', a, 0), 'options->lower_bitfield_insert_to_bitfield_select || options->lower_bitfield_insert'), - (('ishl', ('bfm', a, 0), b), ('bfm', a, b)), - - # Section 8.8 (Integer Functions) of the GLSL 4.60 spec says: - # - # If bits is zero, the result will be zero. - # - # These patterns prevent other patterns from generating invalid results - # when count is zero. - (('ubfe', a, b, 0), 0), - (('ibfe', a, b, 0), 0), - - (('ubfe', a, 0, '#b'), ('iand', a, ('ushr', 0xffffffff, ('ineg', b)))), - - (('b2i32', ('ine', ('ubfe', a, b, 1), 0)), ('ubfe', a, b, 1)), - (('b2i32', ('ine', ('ibfe', a, b, 1), 0)), ('ubfe', a, b, 1)), # ubfe in the replacement is correct - (('ine', ('ibfe(is_used_once)', a, '#b', '#c'), 0), ('ine', ('iand', a, ('ishl', ('ushr', 0xffffffff, ('ineg', c)), b)), 0)), - (('ieq', ('ibfe(is_used_once)', a, '#b', '#c'), 0), ('ieq', ('iand', a, ('ishl', ('ushr', 0xffffffff, ('ineg', c)), b)), 0)), - (('ine', ('ubfe(is_used_once)', a, '#b', '#c'), 0), ('ine', ('iand', a, ('ishl', ('ushr', 0xffffffff, ('ineg', c)), b)), 0)), - (('ieq', ('ubfe(is_used_once)', a, '#b', '#c'), 0), ('ieq', ('iand', a, ('ishl', ('ushr', 0xffffffff, ('ineg', c)), b)), 0)), - - (('ibitfield_extract', 'value', 'offset', 'bits'), - ('bcsel', ('ieq', 0, 'bits'), - 0, - ('ishr', - ('ishl', 'value', ('isub', ('isub', 32, 'bits'), 'offset')), - ('isub', 32, 'bits'))), - 'options->lower_bitfield_extract_to_shifts'), - - (('ubitfield_extract', 'value', 'offset', 'bits'), - ('iand', - ('ushr', 'value', 'offset'), - ('bcsel', ('ieq', 'bits', 32), - 0xffffffff, - ('isub', ('ishl', 1, 'bits'), 1))), - 'options->lower_bitfield_extract_to_shifts'), - - (('ifind_msb', 'value'), - ('ufind_msb', ('bcsel', ('ilt', 'value', 0), ('inot', 'value'), 'value')), - 'options->lower_ifind_msb'), - - (('ifind_msb', 'value'), - ('bcsel', ('ige', ('ifind_msb_rev', 'value'), 0), - ('isub', 31, ('ifind_msb_rev', 'value')), - ('ifind_msb_rev', 'value')), - 'options->lower_find_msb_to_reverse'), - - # uclz of an absolute value source almost always does the right thing. - # There are a couple problem values: - # - # * 0x80000000. Since abs(0x80000000) == 0x80000000, uclz returns 0. - # However, findMSB(int(0x80000000)) == 30. - # - # * 0xffffffff. Since abs(0xffffffff) == 1, uclz returns 31. Section 8.8 - # (Integer Functions) of the GLSL 4.50 spec says: - # - # For a value of zero or negative one, -1 will be returned. - # - # * Negative powers of two. uclz(abs(-(1<> 31)). - (('ifind_msb', 'value'), - ('isub', 31, ('uclz', ('ixor', 'value', ('ishr', 'value', 31)))), - 'options->lower_ifind_msb_to_uclz'), - - (('ufind_msb', 'value@32'), - ('bcsel', ('ige', ('ufind_msb_rev', 'value'), 0), - ('isub', 31, ('ufind_msb_rev', 'value')), - ('ufind_msb_rev', 'value')), - 'options->lower_find_msb_to_reverse'), - - (('ufind_msb', 'value@32'), - ('isub', 31, ('uclz', 'value')), - 'options->lower_ufind_msb_to_uclz'), - - (('uclz', a), ('umin', 32, ('ufind_msb_rev', a)), 'options->lower_uclz'), - - (('find_lsb', 'value@64'), - ('ufind_msb', ('iand', 'value', ('ineg', 'value'))), - 'options->lower_find_lsb'), - - (('find_lsb', 'value'), - ('ufind_msb', ('u2u32', ('iand', 'value', ('ineg', 'value')))), - 'options->lower_find_lsb'), - - (('extract_i8', a, 'b@32'), - ('ishr', ('ishl', a, ('imul', ('isub', 3, b), 8)), 24), - 'options->lower_extract_byte'), - - (('extract_u8', a, 'b@32'), - ('iand', ('ushr', a, ('imul', b, 8)), 0xff), - 'options->lower_extract_byte'), - - (('extract_i16', a, 'b@32'), - ('ishr', ('ishl', a, ('imul', ('isub', 1, b), 16)), 16), - 'options->lower_extract_word'), - - (('extract_u16', a, 'b@32'), - ('iand', ('ushr', a, ('imul', b, 16)), 0xffff), - 'options->lower_extract_word'), - - (('pack_unorm_2x16', 'v'), - ('pack_uvec2_to_uint', - ('f2u32', ('fround_even', ('fmul', ('fsat', 'v'), 65535.0)))), - 'options->lower_pack_unorm_2x16'), - - (('pack_unorm_4x8', 'v'), - ('pack_uvec4_to_uint', - ('f2u32', ('fround_even', ('fmul', ('fsat', 'v'), 255.0)))), - 'options->lower_pack_unorm_4x8'), - - (('pack_snorm_2x16', 'v'), - ('pack_uvec2_to_uint', - ('f2i32', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 32767.0)))), - 'options->lower_pack_snorm_2x16'), - - (('pack_snorm_4x8', 'v'), - ('pack_uvec4_to_uint', - ('f2i32', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 127.0)))), - 'options->lower_pack_snorm_4x8'), - - (('unpack_unorm_2x16', 'v'), - ('fdiv', ('u2f32', ('vec2', ('extract_u16', 'v', 0), - ('extract_u16', 'v', 1))), - 65535.0), - 'options->lower_unpack_unorm_2x16'), - - (('unpack_unorm_4x8', 'v'), - ('fdiv', ('u2f32', ('vec4', ('extract_u8', 'v', 0), - ('extract_u8', 'v', 1), - ('extract_u8', 'v', 2), - ('extract_u8', 'v', 3))), - 255.0), - 'options->lower_unpack_unorm_4x8'), - - (('unpack_snorm_2x16', 'v'), - ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec2', ('extract_i16', 'v', 0), - ('extract_i16', 'v', 1))), - 32767.0))), - 'options->lower_unpack_snorm_2x16'), - - (('unpack_snorm_4x8', 'v'), - ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec4', ('extract_i8', 'v', 0), - ('extract_i8', 'v', 1), - ('extract_i8', 'v', 2), - ('extract_i8', 'v', 3))), - 127.0))), - 'options->lower_unpack_snorm_4x8'), - - (('pack_half_2x16_split', 'a@32', 'b@32'), - ('ior', ('ishl', ('u2u32', ('f2f16', b)), 16), ('u2u32', ('f2f16', a))), - 'options->lower_pack_split'), - - (('unpack_half_2x16_split_x', 'a@32'), - ('f2f32', ('u2u16', a)), - 'options->lower_pack_split'), - - (('unpack_half_2x16_split_y', 'a@32'), - ('f2f32', ('u2u16', ('ushr', a, 16))), - 'options->lower_pack_split'), - - (('pack_32_2x16_split', 'a@16', 'b@16'), - ('ior', ('ishl', ('u2u32', b), 16), ('u2u32', a)), - 'options->lower_pack_split'), - - (('unpack_32_2x16_split_x', 'a@32'), - ('u2u16', a), - 'options->lower_pack_split'), - - (('unpack_32_2x16_split_y', 'a@32'), - ('u2u16', ('ushr', 'a', 16)), - 'options->lower_pack_split'), - - (('isign', a), ('imin', ('imax', a, -1), 1), 'options->lower_isign'), - (('imin', ('imax', a, -1), 1), ('isign', a), '!options->lower_isign'), - (('imax', ('imin', a, 1), -1), ('isign', a), '!options->lower_isign'), - # float(0 < NaN) - float(NaN < 0) = float(False) - float(False) = 0 - 0 = 0 - # Mark the new comparisons precise to prevent them being changed to 'a != - # 0' or 'a == 0'. - (('fsign', a), ('fsub', ('b2f', ('!flt', 0.0, a)), ('b2f', ('!flt', a, 0.0))), 'options->lower_fsign'), - - # Address/offset calculations: - # Drivers supporting imul24 should use the nir_lower_amul() pass, this - # rule converts everyone else to imul: - (('amul', a, b), ('imul', a, b), '!options->has_imul24'), - - (('umul24', a, b), - ('imul', ('iand', a, 0xffffff), ('iand', b, 0xffffff)), - '!options->has_umul24'), - (('umad24', a, b, c), - ('iadd', ('imul', ('iand', a, 0xffffff), ('iand', b, 0xffffff)), c), - '!options->has_umad24'), - - # Relaxed 24bit ops - (('imul24_relaxed', a, b), ('imul24', a, b), 'options->has_imul24'), - (('imul24_relaxed', a, b), ('imul', a, b), '!options->has_imul24'), - (('umad24_relaxed', a, b, c), ('umad24', a, b, c), 'options->has_umad24'), - (('umad24_relaxed', a, b, c), ('iadd', ('umul24_relaxed', a, b), c), '!options->has_umad24'), - (('umul24_relaxed', a, b), ('umul24', a, b), 'options->has_umul24'), - (('umul24_relaxed', a, b), ('imul', a, b), '!options->has_umul24'), - - (('imad24_ir3', a, b, 0), ('imul24', a, b)), - (('imad24_ir3', a, 0, c), (c)), - (('imad24_ir3', a, 1, c), ('iadd', a, c)), - - # if first two srcs are const, crack apart the imad so constant folding - # can clean up the imul: - # TODO ffma should probably get a similar rule: - (('imad24_ir3', '#a', '#b', c), ('iadd', ('imul', a, b), c)), - - # These will turn 24b address/offset calc back into 32b shifts, but - # it should be safe to get back some of the bits of precision that we - # already decided were no necessary: - (('imul24', a, '#b@32(is_pos_power_of_two)'), ('ishl', a, ('find_lsb', b)), '!options->lower_bitops'), - (('imul24', a, '#b@32(is_neg_power_of_two)'), ('ineg', ('ishl', a, ('find_lsb', ('iabs', b)))), '!options->lower_bitops'), - (('imul24', a, 0), (0)), -]) - -for bit_size in [8, 16, 32, 64]: - cond = '!options->lower_uadd_sat' - if bit_size == 64: - cond += ' && !(options->lower_int64_options & nir_lower_iadd64)' - add = 'iadd@' + str(bit_size) - - optimizations += [ - (('bcsel', ('ult', ('iadd', a, b), a), -1, (add, a, b)), ('uadd_sat', a, b), cond), - (('bcsel', ('uge', ('iadd', a, b), a), (add, a, b), -1), ('uadd_sat', a, b), cond), - (('bcsel', ('ieq', ('uadd_carry', a, b), 0), (add, a, b), -1), ('uadd_sat', a, b), cond), - (('bcsel', ('ine', ('uadd_carry', a, b), 0), -1, (add, a, b)), ('uadd_sat', a, b), cond), - ] - -for bit_size in [8, 16, 32, 64]: - cond = '!options->lower_usub_sat' - if bit_size == 64: - cond += ' && !(options->lower_int64_options & nir_lower_usub_sat64)' - add = 'iadd@' + str(bit_size) - - optimizations += [ - (('bcsel', ('ult', a, b), 0, (add, a, ('ineg', b))), ('usub_sat', a, b), cond), - (('bcsel', ('uge', a, b), (add, a, ('ineg', b)), 0), ('usub_sat', a, b), cond), - (('bcsel', ('ieq', ('usub_borrow', a, b), 0), (add, a, ('ineg', b)), 0), ('usub_sat', a, b), cond), - (('bcsel', ('ine', ('usub_borrow', a, b), 0), 0, (add, a, ('ineg', b))), ('usub_sat', a, b), cond), - ] - -# bit_size dependent lowerings -for bit_size in [8, 16, 32, 64]: - # convenience constants - intmax = (1 << (bit_size - 1)) - 1 - intmin = 1 << (bit_size - 1) - - optimizations += [ - (('iadd_sat@' + str(bit_size), a, b), - ('bcsel', ('ige', b, 1), ('bcsel', ('ilt', ('iadd', a, b), a), intmax, ('iadd', a, b)), - ('bcsel', ('ilt', a, ('iadd', a, b)), intmin, ('iadd', a, b))), 'options->lower_iadd_sat'), - (('isub_sat@' + str(bit_size), a, b), - ('bcsel', ('ilt', b, 0), ('bcsel', ('ilt', ('isub', a, b), a), intmax, ('isub', a, b)), - ('bcsel', ('ilt', a, ('isub', a, b)), intmin, ('isub', a, b))), 'options->lower_iadd_sat'), - ] - -invert = OrderedDict([('feq', 'fneu'), ('fneu', 'feq')]) - -for left, right in itertools.combinations_with_replacement(invert.keys(), 2): - optimizations.append((('inot', ('ior(is_used_once)', (left, a, b), (right, c, d))), - ('iand', (invert[left], a, b), (invert[right], c, d)))) - optimizations.append((('inot', ('iand(is_used_once)', (left, a, b), (right, c, d))), - ('ior', (invert[left], a, b), (invert[right], c, d)))) - -# Optimize x2yN(b2x(x)) -> b2y -for x, y in itertools.product(['f', 'u', 'i'], ['f', 'u', 'i']): - if x != 'f' and y != 'f' and x != y: - continue - - b2x = 'b2f' if x == 'f' else 'b2i' - b2y = 'b2f' if y == 'f' else 'b2i' - x2yN = '{}2{}'.format(x, y) - optimizations.append(((x2yN, (b2x, a)), (b2y, a))) - -# Optimize away x2xN(a@N) -for t in ['int', 'uint', 'float', 'bool']: - for N in type_sizes(t): - x2xN = '{0}2{0}{1}'.format(t[0], N) - aN = 'a@{0}'.format(N) - optimizations.append(((x2xN, aN), a)) - -# Optimize x2xN(y2yM(a@P)) -> y2yN(a) for integers -# In particular, we can optimize away everything except upcast of downcast and -# upcasts where the type differs from the other cast -for N, M in itertools.product(type_sizes('uint'), type_sizes('uint')): - if N < M: - # The outer cast is a down-cast. It doesn't matter what the size of the - # argument of the inner cast is because we'll never been in the upcast - # of downcast case. Regardless of types, we'll always end up with y2yN - # in the end. - for x, y in itertools.product(['i', 'u'], ['i', 'u']): - x2xN = '{0}2{0}{1}'.format(x, N) - y2yM = '{0}2{0}{1}'.format(y, M) - y2yN = '{0}2{0}{1}'.format(y, N) - optimizations.append(((x2xN, (y2yM, a)), (y2yN, a))) - elif N > M: - # If the outer cast is an up-cast, we have to be more careful about the - # size of the argument of the inner cast and with types. In this case, - # the type is always the type of type up-cast which is given by the - # outer cast. - for P in type_sizes('uint'): - # We can't optimize away up-cast of down-cast. - if M < P: - continue - - # Because we're doing down-cast of down-cast, the types always have - # to match between the two casts - for x in ['i', 'u']: - x2xN = '{0}2{0}{1}'.format(x, N) - x2xM = '{0}2{0}{1}'.format(x, M) - aP = 'a@{0}'.format(P) - optimizations.append(((x2xN, (x2xM, aP)), (x2xN, a))) - else: - # The N == M case is handled by other optimizations - pass - -# Downcast operations should be able to see through pack -for t in ['i', 'u']: - for N in [8, 16, 32]: - x2xN = '{0}2{0}{1}'.format(t, N) - optimizations += [ - ((x2xN, ('pack_64_2x32_split', a, b)), (x2xN, a)), - ((x2xN, ('pack_64_2x32_split', a, b)), (x2xN, a)), - ] - -# Optimize comparisons with up-casts -for t in ['int', 'uint', 'float']: - for N, M in itertools.product(type_sizes(t), repeat=2): - if N == 1 or N >= M: - continue - - cond = 'true' - if N == 8: - cond = 'options->support_8bit_alu' - elif N == 16: - cond = 'options->support_16bit_alu' - x2xM = '{0}2{0}{1}'.format(t[0], M) - x2xN = '{0}2{0}{1}'.format(t[0], N) - aN = 'a@' + str(N) - bN = 'b@' + str(N) - xeq = 'feq' if t == 'float' else 'ieq' - xne = 'fneu' if t == 'float' else 'ine' - xge = '{0}ge'.format(t[0]) - xlt = '{0}lt'.format(t[0]) - - # Up-casts are lossless so for correctly signed comparisons of - # up-casted values we can do the comparison at the largest of the two - # original sizes and drop one or both of the casts. (We have - # optimizations to drop the no-op casts which this may generate.) - for P in type_sizes(t): - if P == 1 or P > N: - continue - - bP = 'b@' + str(P) - optimizations += [ - ((xeq, (x2xM, aN), (x2xM, bP)), (xeq, a, (x2xN, b)), cond), - ((xne, (x2xM, aN), (x2xM, bP)), (xne, a, (x2xN, b)), cond), - ((xge, (x2xM, aN), (x2xM, bP)), (xge, a, (x2xN, b)), cond), - ((xlt, (x2xM, aN), (x2xM, bP)), (xlt, a, (x2xN, b)), cond), - ((xge, (x2xM, bP), (x2xM, aN)), (xge, (x2xN, b), a), cond), - ((xlt, (x2xM, bP), (x2xM, aN)), (xlt, (x2xN, b), a), cond), - ] - - # The next bit doesn't work on floats because the range checks would - # get way too complicated. - if t in ['int', 'uint']: - if t == 'int': - xN_min = -(1 << (N - 1)) - xN_max = (1 << (N - 1)) - 1 - elif t == 'uint': - xN_min = 0 - xN_max = (1 << N) - 1 - else: - assert False - - # If we're up-casting and comparing to a constant, we can unfold - # the comparison into a comparison with the shrunk down constant - # and a check that the constant fits in the smaller bit size. - optimizations += [ - ((xeq, (x2xM, aN), '#b'), - ('iand', (xeq, a, (x2xN, b)), (xeq, (x2xM, (x2xN, b)), b)), cond), - ((xne, (x2xM, aN), '#b'), - ('ior', (xne, a, (x2xN, b)), (xne, (x2xM, (x2xN, b)), b)), cond), - ((xlt, (x2xM, aN), '#b'), - ('iand', (xlt, xN_min, b), - ('ior', (xlt, xN_max, b), (xlt, a, (x2xN, b)))), cond), - ((xlt, '#a', (x2xM, bN)), - ('iand', (xlt, a, xN_max), - ('ior', (xlt, a, xN_min), (xlt, (x2xN, a), b))), cond), - ((xge, (x2xM, aN), '#b'), - ('iand', (xge, xN_max, b), - ('ior', (xge, xN_min, b), (xge, a, (x2xN, b)))), cond), - ((xge, '#a', (x2xM, bN)), - ('iand', (xge, a, xN_min), - ('ior', (xge, a, xN_max), (xge, (x2xN, a), b))), cond), - ] - -# Convert masking followed by signed downcast to just unsigned downcast -optimizations += [ - (('i2i32', ('iand', 'a@64', 0xffffffff)), ('u2u32', a)), - (('i2i16', ('iand', 'a@32', 0xffff)), ('u2u16', a)), - (('i2i16', ('iand', 'a@64', 0xffff)), ('u2u16', a)), - (('i2i8', ('iand', 'a@16', 0xff)), ('u2u8', a)), - (('i2i8', ('iand', 'a@32', 0xff)), ('u2u8', a)), - (('i2i8', ('iand', 'a@64', 0xff)), ('u2u8', a)), -] - -# Some operations such as iadd have the property that the bottom N bits of the -# output only depends on the bottom N bits of each of the inputs so we can -# remove casts -for N in [16, 32]: - for M in [8, 16]: - if M >= N: - continue - - aN = 'a@' + str(N) - u2uM = 'u2u{0}'.format(M) - i2iM = 'i2i{0}'.format(M) - - for x in ['u', 'i']: - x2xN = '{0}2{0}{1}'.format(x, N) - extract_xM = 'extract_{0}{1}'.format(x, M) - - x2xN_M_bits = '{0}(only_lower_{1}_bits_used)'.format(x2xN, M) - extract_xM_M_bits = \ - '{0}(only_lower_{1}_bits_used)'.format(extract_xM, M) - optimizations += [ - ((x2xN_M_bits, (u2uM, aN)), a), - ((extract_xM_M_bits, aN, 0), a), - ] - - bcsel_M_bits = 'bcsel(only_lower_{0}_bits_used)'.format(M) - optimizations += [ - ((bcsel_M_bits, c, (x2xN, (u2uM, aN)), b), ('bcsel', c, a, b)), - ((bcsel_M_bits, c, (x2xN, (i2iM, aN)), b), ('bcsel', c, a, b)), - ((bcsel_M_bits, c, (extract_xM, aN, 0), b), ('bcsel', c, a, b)), - ] - - for op in ['iadd', 'imul', 'iand', 'ior', 'ixor']: - op_M_bits = '{0}(only_lower_{1}_bits_used)'.format(op, M) - optimizations += [ - ((op_M_bits, (x2xN, (u2uM, aN)), b), (op, a, b)), - ((op_M_bits, (x2xN, (i2iM, aN)), b), (op, a, b)), - ((op_M_bits, (extract_xM, aN, 0), b), (op, a, b)), - ] - -def fexp2i(exp, bits): - # Generate an expression which constructs value 2.0^exp or 0.0. - # - # We assume that exp is already in a valid range: - # - # * [-15, 15] for 16-bit float - # * [-127, 127] for 32-bit float - # * [-1023, 1023] for 16-bit float - # - # If exp is the lowest value in the valid range, a value of 0.0 is - # constructed. Otherwise, the value 2.0^exp is constructed. - if bits == 16: - return ('i2i16', ('ishl', ('iadd', exp, 15), 10)) - elif bits == 32: - return ('ishl', ('iadd', exp, 127), 23) - elif bits == 64: - return ('pack_64_2x32_split', 0, ('ishl', ('iadd', exp, 1023), 20)) - else: - assert False - -def ldexp(f, exp, bits): - # The maximum possible range for a normal exponent is [-126, 127] and, - # throwing in denormals, you get a maximum range of [-149, 127]. This - # means that we can potentially have a swing of +-276. If you start with - # FLT_MAX, you actually have to do ldexp(FLT_MAX, -278) to get it to flush - # all the way to zero. The GLSL spec only requires that we handle a subset - # of this range. From version 4.60 of the spec: - # - # "If exp is greater than +128 (single-precision) or +1024 - # (double-precision), the value returned is undefined. If exp is less - # than -126 (single-precision) or -1022 (double-precision), the value - # returned may be flushed to zero. Additionally, splitting the value - # into a significand and exponent using frexp() and then reconstructing - # a floating-point value using ldexp() should yield the original input - # for zero and all finite non-denormalized values." - # - # The SPIR-V spec has similar language. - # - # In order to handle the maximum value +128 using the fexp2i() helper - # above, we have to split the exponent in half and do two multiply - # operations. - # - # First, we clamp exp to a reasonable range. Specifically, we clamp to - # twice the full range that is valid for the fexp2i() function above. If - # exp/2 is the bottom value of that range, the fexp2i() expression will - # yield 0.0f which, when multiplied by f, will flush it to zero which is - # allowed by the GLSL and SPIR-V specs for low exponent values. If the - # value is clamped from above, then it must have been above the supported - # range of the GLSL built-in and therefore any return value is acceptable. - if bits == 16: - exp = ('imin', ('imax', exp, -30), 30) - elif bits == 32: - exp = ('imin', ('imax', exp, -254), 254) - elif bits == 64: - exp = ('imin', ('imax', exp, -2046), 2046) - else: - assert False - - # Now we compute two powers of 2, one for exp/2 and one for exp-exp/2. - # (We use ishr which isn't the same for -1, but the -1 case still works - # since we use exp-exp/2 as the second exponent.) While the spec - # technically defines ldexp as f * 2.0^exp, simply multiplying once doesn't - # work with denormals and doesn't allow for the full swing in exponents - # that you can get with normalized values. Instead, we create two powers - # of two and multiply by them each in turn. That way the effective range - # of our exponent is doubled. - pow2_1 = fexp2i(('ishr', exp, 1), bits) - pow2_2 = fexp2i(('isub', exp, ('ishr', exp, 1)), bits) - return ('fmul', ('fmul', f, pow2_1), pow2_2) - -optimizations += [ - (('ldexp@16', 'x', 'exp'), ldexp('x', 'exp', 16), 'options->lower_ldexp'), - (('ldexp@32', 'x', 'exp'), ldexp('x', 'exp', 32), 'options->lower_ldexp'), - (('ldexp@64', 'x', 'exp'), ldexp('x', 'exp', 64), 'options->lower_ldexp'), -] - -# Unreal Engine 4 demo applications open-codes bitfieldReverse() -def bitfield_reverse_ue4(u): - step1 = ('ior', ('ishl', u, 16), ('ushr', u, 16)) - step2 = ('ior', ('ishl', ('iand', step1, 0x00ff00ff), 8), ('ushr', ('iand', step1, 0xff00ff00), 8)) - step3 = ('ior', ('ishl', ('iand', step2, 0x0f0f0f0f), 4), ('ushr', ('iand', step2, 0xf0f0f0f0), 4)) - step4 = ('ior', ('ishl', ('iand', step3, 0x33333333), 2), ('ushr', ('iand', step3, 0xcccccccc), 2)) - step5 = ('ior(many-comm-expr)', ('ishl', ('iand', step4, 0x55555555), 1), ('ushr', ('iand', step4, 0xaaaaaaaa), 1)) - - return step5 - -# Cyberpunk 2077 open-codes bitfieldReverse() -def bitfield_reverse_cp2077(u): - step1 = ('ior', ('ishl', u, 16), ('ushr', u, 16)) - step2 = ('ior', ('iand', ('ishl', step1, 1), 0xaaaaaaaa), ('iand', ('ushr', step1, 1), 0x55555555)) - step3 = ('ior', ('iand', ('ishl', step2, 2), 0xcccccccc), ('iand', ('ushr', step2, 2), 0x33333333)) - step4 = ('ior', ('iand', ('ishl', step3, 4), 0xf0f0f0f0), ('iand', ('ushr', step3, 4), 0x0f0f0f0f)) - step5 = ('ior(many-comm-expr)', ('iand', ('ishl', step4, 8), 0xff00ff00), ('iand', ('ushr', step4, 8), 0x00ff00ff)) - - return step5 - -optimizations += [(bitfield_reverse_ue4('x@32'), ('bitfield_reverse', 'x'), '!options->lower_bitfield_reverse')] -optimizations += [(bitfield_reverse_cp2077('x@32'), ('bitfield_reverse', 'x'), '!options->lower_bitfield_reverse')] - -# VKD3D-Proton DXBC f32 to f16 conversion implements a float conversion using PackHalf2x16. -# Because the spec does not specify a rounding mode or behaviour regarding infinity, -# it emits a sequence to ensure D3D-like behaviour for infinity. -# When we know the current backend already behaves like we need, we can eliminate the extra sequence. -# -# Input is f32, output is u32 that has the f16 packed into its low bits. -def vkd3d_proton_packed_f2f16_rtz_lo(a, abs_a): - packed_half = ('pack_half_2x16_rtz_split', a, 0) - packed_half_minus1 = ('iadd', packed_half, 0xffffffff) - f32_was_not_inf = ('ine', abs_a, 0x7f800000) - f16_is_now_inf = ('ieq', ('iand', packed_half, 0x7fff), 0x7c00) - return ('bcsel', ('iand', f32_was_not_inf, f16_is_now_inf), packed_half_minus1, packed_half) - -optimizations += [ - (vkd3d_proton_packed_f2f16_rtz_lo('x', ('fabs', 'x')), ('pack_half_2x16_rtz_split', 'x', 0)), - (vkd3d_proton_packed_f2f16_rtz_lo('x(is_not_negative)', 'x'), ('pack_half_2x16_rtz_split', 'x', 0)), - (vkd3d_proton_packed_f2f16_rtz_lo(('fneg', 'x'), ('fabs', 'x')), ('pack_half_2x16_rtz_split', ('fneg', 'x'), 0)), -] - - -# "all_equal(eq(a, b), vec(~0))" is the same as "all_equal(a, b)" -# "any_nequal(neq(a, b), vec(0))" is the same as "any_nequal(a, b)" -for ncomp in [2, 3, 4, 8, 16]: - optimizations += [ - (('ball_iequal' + str(ncomp), ('ieq', a, b), ~0), ('ball_iequal' + str(ncomp), a, b)), - (('ball_iequal' + str(ncomp), ('feq', a, b), ~0), ('ball_fequal' + str(ncomp), a, b)), - (('bany_inequal' + str(ncomp), ('ine', a, b), 0), ('bany_inequal' + str(ncomp), a, b)), - (('bany_inequal' + str(ncomp), ('fneu', a, b), 0), ('bany_fnequal' + str(ncomp), a, b)), - ] - -# For any float comparison operation, "cmp", if you have "a == a && a cmp b" -# then the "a == a" is redundant because it's equivalent to "a is not NaN" -# and, if a is a NaN then the second comparison will fail anyway. -for op in ['flt', 'fge', 'feq']: - optimizations += [ - (('iand', ('feq', a, a), (op, a, b)), ('!' + op, a, b)), - (('iand', ('feq', a, a), (op, b, a)), ('!' + op, b, a)), - ] - -# Add optimizations to handle the case where the result of a ternary is -# compared to a constant. This way we can take things like -# -# (a ? 0 : 1) > 0 -# -# and turn it into -# -# a ? (0 > 0) : (1 > 0) -# -# which constant folding will eat for lunch. The resulting ternary will -# further get cleaned up by the boolean reductions above and we will be -# left with just the original variable "a". -for op in ['feq', 'fneu', 'ieq', 'ine']: - optimizations += [ - ((op, ('bcsel', 'a', '#b', '#c'), '#d'), - ('bcsel', 'a', (op, 'b', 'd'), (op, 'c', 'd'))), - ] - -for op in ['flt', 'fge', 'ilt', 'ige', 'ult', 'uge']: - optimizations += [ - ((op, ('bcsel', 'a', '#b', '#c'), '#d'), - ('bcsel', 'a', (op, 'b', 'd'), (op, 'c', 'd'))), - ((op, '#d', ('bcsel', a, '#b', '#c')), - ('bcsel', 'a', (op, 'd', 'b'), (op, 'd', 'c'))), - ] - - -# For example, this converts things like -# -# 1 + mix(0, a - 1, condition) -# -# into -# -# mix(1, (a-1)+1, condition) -# -# Other optimizations will rearrange the constants. -for op in ['fadd', 'fmul', 'fmulz', 'iadd', 'imul']: - optimizations += [ - ((op, ('bcsel(is_used_once)', a, '#b', c), '#d'), ('bcsel', a, (op, b, d), (op, c, d))) - ] - -# For derivatives in compute shaders, GLSL_NV_compute_shader_derivatives -# states: -# -# If neither layout qualifier is specified, derivatives in compute shaders -# return zero, which is consistent with the handling of built-in texture -# functions like texture() in GLSL 4.50 compute shaders. -for op in ['fddx', 'fddx_fine', 'fddx_coarse', - 'fddy', 'fddy_fine', 'fddy_coarse']: - optimizations += [ - ((op, 'a'), 0.0, 'info->stage == MESA_SHADER_COMPUTE && info->cs.derivative_group == DERIVATIVE_GROUP_NONE') -] - -# Some optimizations for ir3-specific instructions. -optimizations += [ - # 'al * bl': If either 'al' or 'bl' is zero, return zero. - (('umul_low', '#a(is_lower_half_zero)', 'b'), (0)), - # '(ah * bl) << 16 + c': If either 'ah' or 'bl' is zero, return 'c'. - (('imadsh_mix16', '#a@32(is_lower_half_zero)', 'b@32', 'c@32'), ('c')), - (('imadsh_mix16', 'a@32', '#b@32(is_upper_half_zero)', 'c@32'), ('c')), -] - -# These kinds of sequences can occur after nir_opt_peephole_select. -# -# NOTE: fadd is not handled here because that gets in the way of ffma -# generation in the i965 driver. Instead, fadd and ffma are handled in -# late_optimizations. - -for op in ['flrp']: - optimizations += [ - (('bcsel', a, (op + '(is_used_once)', b, c, d), (op, b, c, e)), (op, b, c, ('bcsel', a, d, e))), - (('bcsel', a, (op, b, c, d), (op + '(is_used_once)', b, c, e)), (op, b, c, ('bcsel', a, d, e))), - (('bcsel', a, (op + '(is_used_once)', b, c, d), (op, b, e, d)), (op, b, ('bcsel', a, c, e), d)), - (('bcsel', a, (op, b, c, d), (op + '(is_used_once)', b, e, d)), (op, b, ('bcsel', a, c, e), d)), - (('bcsel', a, (op + '(is_used_once)', b, c, d), (op, e, c, d)), (op, ('bcsel', a, b, e), c, d)), - (('bcsel', a, (op, b, c, d), (op + '(is_used_once)', e, c, d)), (op, ('bcsel', a, b, e), c, d)), - ] - -for op in ['fmulz', 'fmul', 'iadd', 'imul', 'iand', 'ior', 'ixor', 'fmin', 'fmax', 'imin', 'imax', 'umin', 'umax']: - optimizations += [ - (('bcsel', a, (op + '(is_used_once)', b, c), (op, b, 'd(is_not_const)')), (op, b, ('bcsel', a, c, d))), - (('bcsel', a, (op + '(is_used_once)', b, 'c(is_not_const)'), (op, b, d)), (op, b, ('bcsel', a, c, d))), - (('bcsel', a, (op, b, 'c(is_not_const)'), (op + '(is_used_once)', b, d)), (op, b, ('bcsel', a, c, d))), - (('bcsel', a, (op, b, c), (op + '(is_used_once)', b, 'd(is_not_const)')), (op, b, ('bcsel', a, c, d))), - ] - -for op in ['fpow']: - optimizations += [ - (('bcsel', a, (op + '(is_used_once)', b, c), (op, b, d)), (op, b, ('bcsel', a, c, d))), - (('bcsel', a, (op, b, c), (op + '(is_used_once)', b, d)), (op, b, ('bcsel', a, c, d))), - (('bcsel', a, (op + '(is_used_once)', b, c), (op, d, c)), (op, ('bcsel', a, b, d), c)), - (('bcsel', a, (op, b, c), (op + '(is_used_once)', d, c)), (op, ('bcsel', a, b, d), c)), - ] - -for op in ['frcp', 'frsq', 'fsqrt', 'fexp2', 'flog2', 'fsign', 'fsin', 'fcos', 'fsin_amd', 'fcos_amd', 'fsin_mdg', 'fcos_mdg', 'fsin_agx', 'fneg', 'fabs', 'fsign']: - optimizations += [ - (('bcsel', c, (op + '(is_used_once)', a), (op + '(is_used_once)', b)), (op, ('bcsel', c, a, b))), - ] - -for op in ['ineg', 'iabs', 'inot', 'isign']: - optimizations += [ - ((op, ('bcsel', c, '#a', '#b')), ('bcsel', c, (op, a), (op, b))), - ] - -optimizations.extend([ - (('fisnormal', 'a@16'), ('ult', 0xfff, ('iadd', ('ishl', a, 1), 0x800)), 'options->lower_fisnormal'), - (('fisnormal', 'a@32'), ('ult', 0x1ffffff, ('iadd', ('ishl', a, 1), 0x1000000)), 'options->lower_fisnormal'), - (('fisnormal', 'a@64'), ('ult', 0x3fffffffffffff, ('iadd', ('ishl', a, 1), 0x20000000000000)), 'options->lower_fisnormal') - ]) - -# This section contains optimizations to propagate downsizing conversions of -# constructed vectors into vectors of downsized components. Whether this is -# useful depends on the SIMD semantics of the backend. On a true SIMD machine, -# this reduces the register pressure of the vector itself and often enables the -# conversions to be eliminated via other algebraic rules or constant folding. -# In the worst case on a SIMD architecture, the propagated conversions may be -# revectorized via nir_opt_vectorize so instruction count is minimally -# impacted. -# -# On a machine with SIMD-within-a-register only, this actually -# counterintuitively hurts instruction count. These machines are the same that -# require vectorize_vec2_16bit, so we predicate the optimizations on that flag -# not being set. -# -# Finally for scalar architectures, there should be no difference in generated -# code since it all ends up scalarized at the end, but it might minimally help -# compile-times. - -for i in range(2, 4 + 1): - for T in ('f', 'u', 'i'): - vec_inst = ('vec' + str(i),) - - indices = ['a', 'b', 'c', 'd'] - suffix_in = tuple((indices[j] + '@32') for j in range(i)) - - to_16 = '{}2{}16'.format(T, T) - to_mp = '{}2{}mp'.format(T, T) - - out_16 = tuple((to_16, indices[j]) for j in range(i)) - out_mp = tuple((to_mp, indices[j]) for j in range(i)) - - optimizations += [ - ((to_16, vec_inst + suffix_in), vec_inst + out_16, '!options->vectorize_vec2_16bit'), - ] - # u2ump doesn't exist, because it's equal to i2imp - if T in ['f', 'i']: - optimizations += [ - ((to_mp, vec_inst + suffix_in), vec_inst + out_mp, '!options->vectorize_vec2_16bit') - ] - -# This section contains "late" optimizations that should be run before -# creating ffmas and calling regular optimizations for the final time. -# Optimizations should go here if they help code generation and conflict -# with the regular optimizations. -before_ffma_optimizations = [ - # Propagate constants down multiplication chains - (('~fmul(is_used_once)', ('fmul(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)'), ('fmul', ('fmul', a, c), b)), - (('imul(is_used_once)', ('imul(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)'), ('imul', ('imul', a, c), b)), - (('~fadd(is_used_once)', ('fadd(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)'), ('fadd', ('fadd', a, c), b)), - (('iadd(is_used_once)', ('iadd(is_used_once)', 'a(is_not_const)', '#b'), 'c(is_not_const)'), ('iadd', ('iadd', a, c), b)), - - (('~fadd', ('fmul', a, b), ('fmul', a, c)), ('fmul', a, ('fadd', b, c))), - (('iadd', ('imul', a, b), ('imul', a, c)), ('imul', a, ('iadd', b, c))), - (('~fadd', ('fneg', a), a), 0.0), - (('iadd', ('ineg', a), a), 0), - (('iadd', ('ineg', a), ('iadd', a, b)), b), - (('iadd', a, ('iadd', ('ineg', a), b)), b), - (('~fadd', ('fneg', a), ('fadd', a, b)), b), - (('~fadd', a, ('fadd', ('fneg', a), b)), b), - - (('~flrp', ('fadd(is_used_once)', a, -1.0), ('fadd(is_used_once)', a, 1.0), d), ('fadd', ('flrp', -1.0, 1.0, d), a)), - (('~flrp', ('fadd(is_used_once)', a, 1.0), ('fadd(is_used_once)', a, -1.0), d), ('fadd', ('flrp', 1.0, -1.0, d), a)), - (('~flrp', ('fadd(is_used_once)', a, '#b'), ('fadd(is_used_once)', a, '#c'), d), ('fadd', ('fmul', d, ('fadd', c, ('fneg', b))), ('fadd', a, b))), -] - -# This section contains "late" optimizations that should be run after the -# regular optimizations have finished. Optimizations should go here if -# they help code generation but do not necessarily produce code that is -# more easily optimizable. -late_optimizations = [ - # The rearrangements are fine w.r.t. NaN. However, they produce incorrect - # results if one operand is +Inf and the other is -Inf. - # - # 1. Inf + -Inf = NaN - # 2. ∀x: x + NaN = NaN and x - NaN = NaN - # 3. ∀x: x != NaN = true - # 4. ∀x, ∀ cmp ∈ {<, >, ≤, ≥, =}: x cmp NaN = false - # - # a=Inf, b=-Inf a=-Inf, b=Inf a=NaN b=NaN - # (a+b) < 0 false false false false - # a < -b false false false false - # -(a+b) < 0 false false false false - # -a < b false false false false - # (a+b) >= 0 false false false false - # a >= -b true true false false - # -(a+b) >= 0 false false false false - # -a >= b true true false false - # (a+b) == 0 false false false false - # a == -b true true false false - # (a+b) != 0 true true true true - # a != -b false false true true - (('flt', ('fadd(is_used_once)', a, b), 0.0), ('flt', a, ('fneg', b))), - (('flt', ('fneg(is_used_once)', ('fadd(is_used_once)', a, b)), 0.0), ('flt', ('fneg', a), b)), - (('flt', 0.0, ('fadd(is_used_once)', a, b) ), ('flt', ('fneg', a), b)), - (('flt', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', a, b))), ('flt', a, ('fneg', b))), - (('~fge', ('fadd(is_used_once)', a, b), 0.0), ('fge', a, ('fneg', b))), - (('~fge', ('fneg(is_used_once)', ('fadd(is_used_once)', a, b)), 0.0), ('fge', ('fneg', a), b)), - (('~fge', 0.0, ('fadd(is_used_once)', a, b) ), ('fge', ('fneg', a), b)), - (('~fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', a, b))), ('fge', a, ('fneg', b))), - (('~feq', ('fadd(is_used_once)', a, b), 0.0), ('feq', a, ('fneg', b))), - (('~fneu', ('fadd(is_used_once)', a, b), 0.0), ('fneu', a, ('fneg', b))), - - # If either source must be finite, then the original (a+b) cannot produce - # NaN due to Inf-Inf. The patterns and the replacements produce the same - # result if b is NaN. Therefore, the replacements are exact. - (('fge', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('fge', a, ('fneg', b))), - (('fge', ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', b)), 0.0), ('fge', ('fneg', a), b)), - (('fge', 0.0, ('fadd(is_used_once)', 'a(is_finite)', b) ), ('fge', ('fneg', a), b)), - (('fge', 0.0, ('fneg(is_used_once)', ('fadd(is_used_once)', 'a(is_finite)', b))), ('fge', a, ('fneg', b))), - (('feq', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('feq', a, ('fneg', b))), - (('fneu', ('fadd(is_used_once)', 'a(is_finite)', b), 0.0), ('fneu', a, ('fneg', b))), - - # This is how SpvOpFOrdNotEqual might be implemented. Replace it with - # SpvOpLessOrGreater. - (('iand', ('fneu', a, b), ('iand', ('feq', a, a), ('feq', b, b))), ('ior', ('!flt', a, b), ('!flt', b, a))), - (('iand', ('fneu', a, 0.0), ('feq', a, a) ), ('!flt', 0.0, ('fabs', a))), - - # This is how SpvOpFUnordEqual might be implemented. Replace it with - # !SpvOpLessOrGreater. - (('ior', ('feq', a, b), ('ior', ('fneu', a, a), ('fneu', b, b))), ('inot', ('ior', ('!flt', a, b), ('!flt', b, a)))), - (('ior', ('feq', a, 0.0), ('fneu', a, a), ), ('inot', ('!flt', 0.0, ('fabs', a)))), - - # nir_lower_to_source_mods will collapse this, but its existence during the - # optimization loop can prevent other optimizations. - (('fneg', ('fneg', a)), a) -] - -# re-combine inexact mul+add to ffma. Do this before fsub so that a * b - c -# gets combined to fma(a, b, -c). -for sz, mulz in itertools.product([16, 32, 64], [False, True]): - # fmulz/ffmaz only for fp32 - if mulz and sz != 32: - continue - - # Fuse the correct fmul. Only consider fmuls where the only users are fadd - # (or fneg/fabs which are assumed to be propagated away), as a heuristic to - # avoid fusing in cases where it's harmful. - fmul = ('fmulz' if mulz else 'fmul') + '(is_only_used_by_fadd)' - ffma = 'ffmaz' if mulz else 'ffma' - - fadd = '~fadd@{}'.format(sz) - option = 'options->fuse_ffma{}'.format(sz) - - late_optimizations.extend([ - ((fadd, (fmul, a, b), c), (ffma, a, b, c), option), - - ((fadd, ('fneg(is_only_used_by_fadd)', (fmul, a, b)), c), - (ffma, ('fneg', a), b, c), option), - - ((fadd, ('fabs(is_only_used_by_fadd)', (fmul, a, b)), c), - (ffma, ('fabs', a), ('fabs', b), c), option), - - ((fadd, ('fneg(is_only_used_by_fadd)', ('fabs', (fmul, a, b))), c), - (ffma, ('fneg', ('fabs', a)), ('fabs', b), c), option), - ]) - -late_optimizations.extend([ - # Subtractions get lowered during optimization, so we need to recombine them - (('fadd@8', a, ('fneg', 'b')), ('fsub', 'a', 'b'), 'options->has_fsub'), - (('fadd@16', a, ('fneg', 'b')), ('fsub', 'a', 'b'), 'options->has_fsub'), - (('fadd@32', a, ('fneg', 'b')), ('fsub', 'a', 'b'), 'options->has_fsub'), - (('fadd@64', a, ('fneg', 'b')), ('fsub', 'a', 'b'), 'options->has_fsub && !(options->lower_doubles_options & nir_lower_dsub)'), - - (('fneg', a), ('fmul', a, -1.0), 'options->lower_fneg'), - (('iadd', a, ('ineg', 'b')), ('isub', 'a', 'b'), 'options->has_isub || options->lower_ineg'), - (('ineg', a), ('isub', 0, a), 'options->lower_ineg'), - (('iabs', a), ('imax', a, ('ineg', a)), 'options->lower_iabs'), - - (('iadd', ('iadd(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)'), ('iadd3', a, b, c), 'options->has_iadd3'), - (('iadd', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)'), ('iadd3', a, ('ineg', b), c), 'options->has_iadd3'), - (('isub', ('isub(is_used_once)', 'a(is_not_const)', 'b(is_not_const)'), 'c(is_not_const)'), ('iadd3', a, ('ineg', b), ('ineg', c)), 'options->has_iadd3'), - - # fneg_lo / fneg_hi - (('vec2(is_only_used_as_float)', ('fneg@16', a), b), ('fmul', ('vec2', a, b), ('vec2', -1.0, 1.0)), 'options->vectorize_vec2_16bit'), - (('vec2(is_only_used_as_float)', a, ('fneg@16', b)), ('fmul', ('vec2', a, b), ('vec2', 1.0, -1.0)), 'options->vectorize_vec2_16bit'), - - # These are duplicated from the main optimizations table. The late - # patterns that rearrange expressions like x - .5 < 0 to x < .5 can create - # new patterns like these. The patterns that compare with zero are removed - # because they are unlikely to be created in by anything in - # late_optimizations. - (('flt', '#b(is_gt_0_and_lt_1)', ('fsat(is_used_once)', a)), ('flt', b, a)), - (('fge', ('fsat(is_used_once)', a), '#b(is_gt_0_and_lt_1)'), ('fge', a, b)), - (('feq', ('fsat(is_used_once)', a), '#b(is_gt_0_and_lt_1)'), ('feq', a, b)), - (('fneu', ('fsat(is_used_once)', a), '#b(is_gt_0_and_lt_1)'), ('fneu', a, b)), - - (('fge', ('fsat(is_used_once)', a), 1.0), ('fge', a, 1.0)), - - (('~fge', ('fmin(is_used_once)', ('fadd(is_used_once)', a, b), ('fadd', c, d)), 0.0), ('iand', ('fge', a, ('fneg', b)), ('fge', c, ('fneg', d)))), - - (('flt', ('fneg', a), ('fneg', b)), ('flt', b, a)), - (('fge', ('fneg', a), ('fneg', b)), ('fge', b, a)), - (('feq', ('fneg', a), ('fneg', b)), ('feq', b, a)), - (('fneu', ('fneg', a), ('fneg', b)), ('fneu', b, a)), - (('flt', ('fneg', a), -1.0), ('flt', 1.0, a)), - (('flt', -1.0, ('fneg', a)), ('flt', a, 1.0)), - (('fge', ('fneg', a), -1.0), ('fge', 1.0, a)), - (('fge', -1.0, ('fneg', a)), ('fge', a, 1.0)), - (('fneu', ('fneg', a), -1.0), ('fneu', 1.0, a)), - (('feq', -1.0, ('fneg', a)), ('feq', a, 1.0)), - - (('ior', a, a), a), - (('iand', a, a), a), - - (('~fadd', ('fneg(is_used_once)', ('fsat(is_used_once)', 'a(is_not_fmul)')), 1.0), ('fsat', ('fadd', 1.0, ('fneg', a)))), - - (('fdot2', a, b), ('fdot2_replicated', a, b), 'options->fdot_replicates'), - (('fdot3', a, b), ('fdot3_replicated', a, b), 'options->fdot_replicates'), - (('fdot4', a, b), ('fdot4_replicated', a, b), 'options->fdot_replicates'), - (('fdph', a, b), ('fdph_replicated', a, b), 'options->fdot_replicates'), - - (('~flrp', ('fadd(is_used_once)', a, b), ('fadd(is_used_once)', a, c), d), ('fadd', ('flrp', b, c, d), a)), - - # Approximate handling of fround_even for DX9 addressing from gallium nine on - # DX9-class hardware with no proper fround support. This is in - # late_optimizations so that the is_integral() opts in the main pass get a - # chance to eliminate the fround_even first. - (('fround_even', a), ('bcsel', - ('feq', ('ffract', a), 0.5), - ('fadd', ('ffloor', ('fadd', a, 0.5)), 1.0), - ('ffloor', ('fadd', a, 0.5))), 'options->lower_fround_even'), - - # A similar operation could apply to any ffma(#a, b, #(-a/2)), but this - # particular operation is common for expanding values stored in a texture - # from [0,1] to [-1,1]. - (('~ffma@32', a, 2.0, -1.0), ('flrp', -1.0, 1.0, a ), '!options->lower_flrp32'), - (('~ffma@32', a, -2.0, -1.0), ('flrp', -1.0, 1.0, ('fneg', a)), '!options->lower_flrp32'), - (('~ffma@32', a, -2.0, 1.0), ('flrp', 1.0, -1.0, a ), '!options->lower_flrp32'), - (('~ffma@32', a, 2.0, 1.0), ('flrp', 1.0, -1.0, ('fneg', a)), '!options->lower_flrp32'), - (('~fadd@32', ('fmul(is_used_once)', 2.0, a), -1.0), ('flrp', -1.0, 1.0, a ), '!options->lower_flrp32'), - (('~fadd@32', ('fmul(is_used_once)', -2.0, a), -1.0), ('flrp', -1.0, 1.0, ('fneg', a)), '!options->lower_flrp32'), - (('~fadd@32', ('fmul(is_used_once)', -2.0, a), 1.0), ('flrp', 1.0, -1.0, a ), '!options->lower_flrp32'), - (('~fadd@32', ('fmul(is_used_once)', 2.0, a), 1.0), ('flrp', 1.0, -1.0, ('fneg', a)), '!options->lower_flrp32'), - - # flrp(a, b, a) - # a*(1-a) + b*a - # a + -a*a + a*b (1) - # a + a*(b - a) - # Option 1: ffma(a, (b-a), a) - # - # Alternately, after (1): - # a*(1+b) + -a*a - # a*((1+b) + -a) - # - # Let b=1 - # - # Option 2: ffma(a, 2, -(a*a)) - # Option 3: ffma(a, 2, (-a)*a) - # Option 4: ffma(a, -a, (2*a) - # Option 5: a * (2 - a) - # - # There are a lot of other possible combinations. - (('~ffma@32', ('fadd', b, ('fneg', a)), a, a), ('flrp', a, b, a), '!options->lower_flrp32'), - (('~ffma@32', a, 2.0, ('fneg', ('fmul', a, a))), ('flrp', a, 1.0, a), '!options->lower_flrp32'), - (('~ffma@32', a, 2.0, ('fmul', ('fneg', a), a)), ('flrp', a, 1.0, a), '!options->lower_flrp32'), - (('~ffma@32', a, ('fneg', a), ('fmul', 2.0, a)), ('flrp', a, 1.0, a), '!options->lower_flrp32'), - (('~fmul@32', a, ('fadd', 2.0, ('fneg', a))), ('flrp', a, 1.0, a), '!options->lower_flrp32'), - - # we do these late so that we don't get in the way of creating ffmas - (('fmin', ('fadd(is_used_once)', '#c', a), ('fadd(is_used_once)', '#c', b)), ('fadd', c, ('fmin', a, b))), - (('fmax', ('fadd(is_used_once)', '#c', a), ('fadd(is_used_once)', '#c', b)), ('fadd', c, ('fmax', a, b))), - - # Putting this in 'optimizations' interferes with the bcsel(a, op(b, c), - # op(b, d)) => op(b, bcsel(a, c, d)) transformations. I do not know why. - (('bcsel', ('feq', ('fsqrt', 'a(is_not_negative)'), 0.0), intBitsToFloat(0x7f7fffff), ('frsq', a)), - ('fmin', ('frsq', a), intBitsToFloat(0x7f7fffff))), - - # Things that look like DPH in the source shader may get expanded to - # something that looks like dot(v1.xyz, v2.xyz) + v1.w by the time it gets - # to NIR. After FFMA is generated, this can look like: - # - # fadd(ffma(v1.z, v2.z, ffma(v1.y, v2.y, fmul(v1.x, v2.x))), v1.w) - # - # Reassociate the last addition into the first multiplication. - # - # Some shaders do not use 'invariant' in vertex and (possibly) geometry - # shader stages on some outputs that are intended to be invariant. For - # various reasons, this optimization may not be fully applied in all - # shaders used for different rendering passes of the same geometry. This - # can result in Z-fighting artifacts (at best). For now, disable this - # optimization in these stages. See bugzilla #111490. In tessellation - # stages applications seem to use 'precise' when necessary, so allow the - # optimization in those stages. - (('~fadd', ('ffma(is_used_once)', a, b, ('ffma', c, d, ('fmul(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)'))), 'g(is_not_const)'), - ('ffma', a, b, ('ffma', c, d, ('ffma', e, 'f', 'g'))), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'), - (('~fadd', ('ffma(is_used_once)', a, b, ('fmul(is_used_once)', 'c(is_not_const_and_not_fsign)', 'd(is_not_const_and_not_fsign)') ), 'e(is_not_const)'), - ('ffma', a, b, ('ffma', c, d, e)), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'), - (('~fadd', ('fneg', ('ffma(is_used_once)', a, b, ('ffma', c, d, ('fmul(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)')))), 'g(is_not_const)'), - ('ffma', ('fneg', a), b, ('ffma', ('fneg', c), d, ('ffma', ('fneg', e), 'f', 'g'))), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'), - - (('~fadd', ('ffmaz(is_used_once)', a, b, ('ffmaz', c, d, ('fmulz(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)'))), 'g(is_not_const)'), - ('ffmaz', a, b, ('ffmaz', c, d, ('ffmaz', e, 'f', 'g'))), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'), - (('~fadd', ('ffmaz(is_used_once)', a, b, ('fmulz(is_used_once)', 'c(is_not_const_and_not_fsign)', 'd(is_not_const_and_not_fsign)') ), 'e(is_not_const)'), - ('ffmaz', a, b, ('ffmaz', c, d, e)), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'), - (('~fadd', ('fneg', ('ffmaz(is_used_once)', a, b, ('ffmaz', c, d, ('fmulz(is_used_once)', 'e(is_not_const_and_not_fsign)', 'f(is_not_const_and_not_fsign)')))), 'g(is_not_const)'), - ('ffmaz', ('fneg', a), b, ('ffmaz', ('fneg', c), d, ('ffmaz', ('fneg', e), 'f', 'g'))), '(info->stage != MESA_SHADER_VERTEX && info->stage != MESA_SHADER_GEOMETRY) && !options->intel_vec4'), - - # Section 8.8 (Integer Functions) of the GLSL 4.60 spec says: - # - # If bits is zero, the result will be zero. - # - # These prevent the next two lowerings generating incorrect results when - # count is zero. - (('ubfe', a, b, 0), 0), - (('ibfe', a, b, 0), 0), - - # On Intel GPUs, BFE is a 3-source instruction. Like all 3-source - # instructions on Intel GPUs, it cannot have an immediate values as - # sources. There are also limitations on source register strides. As a - # result, it is very easy for 3-source instruction combined with either - # loads of immediate values or copies from weird register strides to be - # more expensive than the primitive instructions it represents. - (('ubfe', a, '#b', '#c'), ('iand', ('ushr', 0xffffffff, ('ineg', c)), ('ushr', a, b)), 'options->avoid_ternary_with_two_constants'), - - # b is the lowest order bit to be extracted and c is the number of bits to - # extract. The inner shift removes the bits above b + c by shifting left - # 32 - (b + c). ishl only sees the low 5 bits of the shift count, which is - # -(b + c). The outer shift moves the bit that was at b to bit zero. - # After the first shift, that bit is now at b + (32 - (b + c)) or 32 - c. - # This means that it must be shifted right by 32 - c or -c bits. - (('ibfe', a, '#b', '#c'), ('ishr', ('ishl', a, ('ineg', ('iadd', b, c))), ('ineg', c)), 'options->avoid_ternary_with_two_constants'), - - # Clean up no-op shifts that may result from the bfe lowerings. - (('ishl', a, 0), a), - (('ishl', a, -32), a), - (('ishr', a, 0), a), - (('ishr', a, -32), a), - (('ushr', a, 0), a), - - (('extract_i8', ('extract_i8', a, b), 0), ('extract_i8', a, b)), - (('extract_i8', ('extract_u8', a, b), 0), ('extract_i8', a, b)), - (('extract_u8', ('extract_i8', a, b), 0), ('extract_u8', a, b)), - (('extract_u8', ('extract_u8', a, b), 0), ('extract_u8', a, b)), -]) - -# A few more extract cases we'd rather leave late -for N in [16, 32]: - aN = 'a@{0}'.format(N) - u2uM = 'u2u{0}'.format(M) - i2iM = 'i2i{0}'.format(M) - - for x in ['u', 'i']: - x2xN = '{0}2{0}{1}'.format(x, N) - extract_x8 = 'extract_{0}8'.format(x) - extract_x16 = 'extract_{0}16'.format(x) - - late_optimizations.extend([ - ((x2xN, ('u2u8', aN)), (extract_x8, a, 0), '!options->lower_extract_byte'), - ((x2xN, ('i2i8', aN)), (extract_x8, a, 0), '!options->lower_extract_byte'), - ]) - - if N > 16: - late_optimizations.extend([ - ((x2xN, ('u2u16', aN)), (extract_x16, a, 0), '!options->lower_extract_word'), - ((x2xN, ('i2i16', aN)), (extract_x16, a, 0), '!options->lower_extract_word'), - ]) - -# Byte insertion -late_optimizations.extend([(('ishl', ('extract_u8', 'a@32', 0), 8 * i), ('insert_u8', a, i), '!options->lower_insert_byte') for i in range(1, 4)]) -late_optimizations.extend([(('iand', ('ishl', 'a@32', 8 * i), 0xff << (8 * i)), ('insert_u8', a, i), '!options->lower_insert_byte') for i in range(1, 4)]) -late_optimizations.append((('ishl', 'a@32', 24), ('insert_u8', a, 3), '!options->lower_insert_byte')) - -late_optimizations += [ - # Word insertion - (('ishl', 'a@32', 16), ('insert_u16', a, 1), '!options->lower_insert_word'), - - # Extract and then insert - (('insert_u8', ('extract_u8', 'a', 0), b), ('insert_u8', a, b)), - (('insert_u16', ('extract_u16', 'a', 0), b), ('insert_u16', a, b)), -] - -# Integer sizes -for s in [8, 16, 32, 64]: - late_optimizations.extend([ - (('iand', ('ine(is_used_once)', 'a@{}'.format(s), 0), ('ine', 'b@{}'.format(s), 0)), ('ine', ('umin', a, b), 0)), - (('ior', ('ieq(is_used_once)', 'a@{}'.format(s), 0), ('ieq', 'b@{}'.format(s), 0)), ('ieq', ('umin', a, b), 0)), - ]) - -# Float sizes -for s in [16, 32, 64]: - late_optimizations.extend([ - (('~fadd@{}'.format(s), 1.0, ('fmul(is_used_once)', c , ('fadd', b, -1.0 ))), ('fadd', ('fadd', 1.0, ('fneg', c)), ('fmul', b, c)), 'options->lower_flrp{}'.format(s)), - (('bcsel', a, 0, ('b2f{}'.format(s), ('inot', 'b@bool'))), ('b2f{}'.format(s), ('inot', ('ior', a, b)))), - ]) - -for op in ['fadd']: - late_optimizations += [ - (('bcsel', a, (op + '(is_used_once)', b, c), (op, b, d)), (op, b, ('bcsel', a, c, d))), - (('bcsel', a, (op, b, c), (op + '(is_used_once)', b, d)), (op, b, ('bcsel', a, c, d))), - ] - -for op in ['ffma', 'ffmaz']: - late_optimizations += [ - (('bcsel', a, (op + '(is_used_once)', b, c, d), (op, b, c, e)), (op, b, c, ('bcsel', a, d, e))), - (('bcsel', a, (op, b, c, d), (op + '(is_used_once)', b, c, e)), (op, b, c, ('bcsel', a, d, e))), - - (('bcsel', a, (op + '(is_used_once)', b, c, d), (op, b, e, d)), (op, b, ('bcsel', a, c, e), d)), - (('bcsel', a, (op, b, c, d), (op + '(is_used_once)', b, e, d)), (op, b, ('bcsel', a, c, e), d)), - ] - -# mediump: If an opcode is surrounded by conversions, remove the conversions. -# The rationale is that type conversions + the low precision opcode are more -# expensive that the same arithmetic opcode at higher precision. -# -# This must be done in late optimizations, because we need normal optimizations to -# first eliminate temporary up-conversions such as in op1(f2fmp(f2f32(op2()))). -# -# Unary opcodes -for op in ['fabs', 'fceil', 'fcos', 'fexp2', 'ffloor', 'ffract', 'flog2', 'fneg', - 'frcp', 'fround_even', 'frsq', 'fsat', 'fsign', 'fsin', 'fsqrt']: - late_optimizations += [(('~f2f32', (op, ('f2fmp', a))), (op, a))] - -# Binary opcodes -for op in ['fadd', 'fdiv', 'fmax', 'fmin', 'fmod', 'fmul', 'fpow', 'frem']: - late_optimizations += [(('~f2f32', (op, ('f2fmp', a), ('f2fmp', b))), (op, a, b))] - -# Ternary opcodes -for op in ['ffma', 'flrp']: - late_optimizations += [(('~f2f32', (op, ('f2fmp', a), ('f2fmp', b), ('f2fmp', c))), (op, a, b, c))] - -# Comparison opcodes -for op in ['feq', 'fge', 'flt', 'fneu']: - late_optimizations += [(('~' + op, ('f2fmp', a), ('f2fmp', b)), (op, a, b))] - -# Do this last, so that the f2fmp patterns above have effect. -late_optimizations += [ - # Convert *2*mp instructions to concrete *2*16 instructions. At this point - # any conversions that could have been removed will have been removed in - # nir_opt_algebraic so any remaining ones are required. - (('f2fmp', a), ('f2f16', a)), - (('f2imp', a), ('f2i16', a)), - (('f2ump', a), ('f2u16', a)), - (('i2imp', a), ('i2i16', a)), - (('i2fmp', a), ('i2f16', a)), - (('i2imp', a), ('u2u16', a)), - (('u2fmp', a), ('u2f16', a)), - (('fisfinite', a), ('flt', ('fabs', a), float("inf"))), - - (('fcsel', ('slt', 0, a), b, c), ('fcsel_gt', a, b, c), "options->has_fused_comp_and_csel"), - (('fcsel', ('slt', a, 0), b, c), ('fcsel_gt', ('fneg', a), b, c), "options->has_fused_comp_and_csel"), - (('fcsel', ('sge', a, 0), b, c), ('fcsel_ge', a, b, c), "options->has_fused_comp_and_csel"), - (('fcsel', ('sge', 0, a), b, c), ('fcsel_ge', ('fneg', a), b, c), "options->has_fused_comp_and_csel"), - - (('bcsel', ('ilt', 0, 'a@32'), 'b@32', 'c@32'), ('i32csel_gt', a, b, c), "options->has_fused_comp_and_csel"), - (('bcsel', ('ilt', 'a@32', 0), 'b@32', 'c@32'), ('i32csel_ge', a, c, b), "options->has_fused_comp_and_csel"), - (('bcsel', ('ige', 'a@32', 0), 'b@32', 'c@32'), ('i32csel_ge', a, b, c), "options->has_fused_comp_and_csel"), - (('bcsel', ('ige', 0, 'a@32'), 'b@32', 'c@32'), ('i32csel_gt', a, c, b), "options->has_fused_comp_and_csel"), - - (('bcsel', ('flt', 0, 'a@32'), 'b@32', 'c@32'), ('fcsel_gt', a, b, c), "options->has_fused_comp_and_csel"), - (('bcsel', ('flt', 'a@32', 0), 'b@32', 'c@32'), ('fcsel_gt', ('fneg', a), b, c), "options->has_fused_comp_and_csel"), - (('bcsel', ('fge', 'a@32', 0), 'b@32', 'c@32'), ('fcsel_ge', a, b, c), "options->has_fused_comp_and_csel"), - (('bcsel', ('fge', 0, 'a@32'), 'b@32', 'c@32'), ('fcsel_ge', ('fneg', a), b, c), "options->has_fused_comp_and_csel"), -] - -distribute_src_mods = [ - # Try to remove some spurious negations rather than pushing them down. - (('fmul', ('fneg', a), ('fneg', b)), ('fmul', a, b)), - (('ffma', ('fneg', a), ('fneg', b), c), ('ffma', a, b, c)), - (('fdot2_replicated', ('fneg', a), ('fneg', b)), ('fdot2_replicated', a, b)), - (('fdot3_replicated', ('fneg', a), ('fneg', b)), ('fdot3_replicated', a, b)), - (('fdot4_replicated', ('fneg', a), ('fneg', b)), ('fdot4_replicated', a, b)), - (('fneg', ('fneg', a)), a), - - (('fneg', ('fmul(is_used_once)', a, b)), ('fmul', ('fneg', a), b)), - (('fabs', ('fmul(is_used_once)', a, b)), ('fmul', ('fabs', a), ('fabs', b))), - - (('fneg', ('ffma(is_used_once)', a, b, c)), ('ffma', ('fneg', a), b, ('fneg', c))), - (('fneg', ('flrp(is_used_once)', a, b, c)), ('flrp', ('fneg', a), ('fneg', b), c)), - (('fneg', ('~fadd(is_used_once)', a, b)), ('fadd', ('fneg', a), ('fneg', b))), - - # Note that fmin <-> fmax. I don't think there is a way to distribute - # fabs() into fmin or fmax. - (('fneg', ('fmin(is_used_once)', a, b)), ('fmax', ('fneg', a), ('fneg', b))), - (('fneg', ('fmax(is_used_once)', a, b)), ('fmin', ('fneg', a), ('fneg', b))), - - (('fneg', ('fdot2_replicated(is_used_once)', a, b)), ('fdot2_replicated', ('fneg', a), b)), - (('fneg', ('fdot3_replicated(is_used_once)', a, b)), ('fdot3_replicated', ('fneg', a), b)), - (('fneg', ('fdot4_replicated(is_used_once)', a, b)), ('fdot4_replicated', ('fneg', a), b)), - - # fdph works mostly like fdot, but to get the correct result, the negation - # must be applied to the second source. - (('fneg', ('fdph_replicated(is_used_once)', a, b)), ('fdph_replicated', a, ('fneg', b))), - - (('fneg', ('fsign(is_used_once)', a)), ('fsign', ('fneg', a))), - (('fabs', ('fsign(is_used_once)', a)), ('fsign', ('fabs', a))), -] - -print(nir_algebraic.AlgebraicPass("nir_opt_algebraic", optimizations).render()) -print(nir_algebraic.AlgebraicPass("nir_opt_algebraic_before_ffma", - before_ffma_optimizations).render()) -print(nir_algebraic.AlgebraicPass("nir_opt_algebraic_late", - late_optimizations).render()) -print(nir_algebraic.AlgebraicPass("nir_opt_algebraic_distribute_src_mods", - distribute_src_mods).render()) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_barriers.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_barriers.c deleted file mode 100644 index e3393c2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_barriers.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -static bool -nir_opt_combine_barriers_impl( - nir_function_impl *impl, nir_combine_barrier_cb combine_cb, void *data) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_intrinsic_instr *prev = NULL; - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) { - prev = NULL; - continue; - } - - nir_intrinsic_instr *current = nir_instr_as_intrinsic(instr); - if (current->intrinsic != nir_intrinsic_scoped_barrier) { - prev = NULL; - continue; - } - - if (prev && combine_cb(prev, current, data)) { - nir_instr_remove(¤t->instr); - progress = true; - } else { - prev = current; - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -/* Combine adjacent scoped barriers. */ -bool -nir_opt_combine_barriers( - nir_shader *shader, nir_combine_barrier_cb combine_cb, void *data) -{ - assert(combine_cb); - - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && - nir_opt_combine_barriers_impl(function->impl, combine_cb, data)) { - progress = true; - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_combine_stores.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_combine_stores.c deleted file mode 100644 index cb8b695..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_combine_stores.c +++ /dev/null @@ -1,470 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -#include "../../util/bitscan.h" -#include "../glsl/list.h" -#include "../../util/u_math.h" - -/* Combine stores of vectors to the same deref into a single store. - * - * This per-block pass keeps track of stores of vectors to the same - * destination and combines them into the last store of the sequence. Dead - * stores (or parts of the store) found during the process are removed. - * - * A pending combination becomes an actual combination in various situations: - * at the end of the block, when another instruction uses the memory or due to - * barriers. - * - * Besides vectors, the pass also look at array derefs of vectors. For direct - * array derefs, it works like a write mask access to the given component. - * For indirect access there's no way to know before hand what component it - * will overlap with, so the combination is finished -- the indirect remains - * unmodified. - */ - -/* Keep track of a group of stores that can be combined. All stores share the - * same destination. - */ -struct combined_store { - struct list_head link; - - nir_component_mask_t write_mask; - nir_deref_instr *dst; - - /* Latest store added. It is reused when combining. */ - nir_intrinsic_instr *latest; - - /* Original store for each component. The number of times a store appear - * in this array is kept in the store's pass_flags. - */ - nir_intrinsic_instr *stores[NIR_MAX_VEC_COMPONENTS]; -}; - -struct combine_stores_state { - nir_variable_mode modes; - - /* Pending store combinations. */ - struct list_head pending; - - /* Per function impl state. */ - nir_builder b; - bool progress; - - - /* Allocator and freelist to reuse structs between functions. */ - void *lin_ctx; - struct list_head freelist; -}; - -static struct combined_store * -alloc_combined_store(struct combine_stores_state *state) -{ - struct combined_store *result; - if (list_is_empty(&state->freelist)) { - result = linear_zalloc_child(state->lin_ctx, sizeof(*result)); - } else { - result = list_first_entry(&state->freelist, - struct combined_store, - link); - list_del(&result->link); - memset(result, 0, sizeof(*result)); - } - return result; -} - -static void -free_combined_store(struct combine_stores_state *state, - struct combined_store *combo) -{ - list_del(&combo->link); - combo->write_mask = 0; - list_add(&combo->link, &state->freelist); -} - -static void -combine_stores(struct combine_stores_state *state, - struct combined_store *combo) -{ - assert(combo->latest); - assert(combo->latest->intrinsic == nir_intrinsic_store_deref); - - /* If the combined writemask is the same as the latest store, we know there - * is only one store in the combination, so nothing to combine. - */ - if ((combo->write_mask & nir_intrinsic_write_mask(combo->latest)) == - combo->write_mask) - return; - - state->b.cursor = nir_before_instr(&combo->latest->instr); - - /* Build a new vec, to be used as source for the combined store. As it - * gets build, remove previous stores that are not needed anymore. - */ - nir_ssa_scalar comps[NIR_MAX_VEC_COMPONENTS] = {0}; - unsigned num_components = glsl_get_vector_elements(combo->dst->type); - unsigned bit_size = combo->latest->src[1].ssa->bit_size; - for (unsigned i = 0; i < num_components; i++) { - nir_intrinsic_instr *store = combo->stores[i]; - if (combo->write_mask & (1 << i)) { - assert(store); - assert(store->src[1].is_ssa); - - /* If store->num_components == 1 then we are in the deref-of-vec case - * and store->src[1] is a scalar. Otherwise, we're a regular vector - * load and we have to pick off a component. - */ - comps[i] = nir_get_ssa_scalar(store->src[1].ssa, store->num_components == 1 ? 0 : i); - - assert(store->instr.pass_flags > 0); - if (--store->instr.pass_flags == 0 && store != combo->latest) - nir_instr_remove(&store->instr); - } else { - comps[i] = nir_get_ssa_scalar(nir_ssa_undef(&state->b, 1, bit_size), 0); - } - } - assert(combo->latest->instr.pass_flags == 0); - nir_ssa_def *vec = nir_vec_scalars(&state->b, comps, num_components); - - /* Fix the latest store with the combined information. */ - nir_intrinsic_instr *store = combo->latest; - - /* In this case, our store is as an array deref of a vector so we need to - * rewrite it to use a deref to the whole vector. - */ - if (store->num_components == 1) { - store->num_components = num_components; - nir_instr_rewrite_src(&store->instr, &store->src[0], - nir_src_for_ssa(&combo->dst->dest.ssa)); - } - - assert(store->num_components == num_components); - nir_intrinsic_set_write_mask(store, combo->write_mask); - nir_instr_rewrite_src(&store->instr, &store->src[1], - nir_src_for_ssa(vec)); - state->progress = true; -} - -static void -combine_stores_with_deref(struct combine_stores_state *state, - nir_deref_instr *deref) -{ - if (!nir_deref_mode_may_be(deref, state->modes)) - return; - - list_for_each_entry_safe(struct combined_store, combo, &state->pending, link) { - if (nir_compare_derefs(combo->dst, deref) & nir_derefs_may_alias_bit) { - combine_stores(state, combo); - free_combined_store(state, combo); - } - } -} - -static void -combine_stores_with_modes(struct combine_stores_state *state, - nir_variable_mode modes) -{ - if ((state->modes & modes) == 0) - return; - - list_for_each_entry_safe(struct combined_store, combo, &state->pending, link) { - if (nir_deref_mode_may_be(combo->dst, modes)) { - combine_stores(state, combo); - free_combined_store(state, combo); - } - } -} - -static struct combined_store * -find_matching_combined_store(struct combine_stores_state *state, - nir_deref_instr *deref) -{ - list_for_each_entry(struct combined_store, combo, &state->pending, link) { - if (nir_compare_derefs(combo->dst, deref) & nir_derefs_equal_bit) - return combo; - } - return NULL; -} - -static void -update_combined_store(struct combine_stores_state *state, - nir_intrinsic_instr *intrin) -{ - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_may_be(dst, state->modes)) - return; - - unsigned vec_mask; - nir_deref_instr *vec_dst; - - if (glsl_type_is_vector(dst->type)) { - vec_mask = nir_intrinsic_write_mask(intrin); - vec_dst = dst; - } else { - /* Besides vectors, only direct array derefs of vectors are handled. */ - if (dst->deref_type != nir_deref_type_array || - !nir_src_is_const(dst->arr.index) || - !glsl_type_is_vector(nir_deref_instr_parent(dst)->type)) { - combine_stores_with_deref(state, dst); - return; - } - - uint64_t index = nir_src_as_uint(dst->arr.index); - vec_dst = nir_deref_instr_parent(dst); - - if (index >= glsl_get_vector_elements(vec_dst->type)) { - /* Storing to an invalid index is a no-op. */ - nir_instr_remove(&intrin->instr); - state->progress = true; - return; - } - - vec_mask = 1 << index; - } - - struct combined_store *combo = find_matching_combined_store(state, vec_dst); - if (!combo) { - combo = alloc_combined_store(state); - combo->dst = vec_dst; - list_add(&combo->link, &state->pending); - } - - /* Use pass_flags to reference count the store based on how many - * components are still used by the combination. - */ - intrin->instr.pass_flags = util_bitcount(vec_mask); - combo->latest = intrin; - - /* Update the combined_store, clearing up older overlapping references. */ - combo->write_mask |= vec_mask; - while (vec_mask) { - unsigned i = u_bit_scan(&vec_mask); - nir_intrinsic_instr *prev_store = combo->stores[i]; - - if (prev_store) { - if (--prev_store->instr.pass_flags == 0) { - nir_instr_remove(&prev_store->instr); - } else { - assert(glsl_type_is_vector( - nir_src_as_deref(prev_store->src[0])->type)); - nir_component_mask_t prev_mask = nir_intrinsic_write_mask(prev_store); - nir_intrinsic_set_write_mask(prev_store, prev_mask & ~(1 << i)); - } - state->progress = true; - } - combo->stores[i] = combo->latest; - } -} - -static void -combine_stores_block(struct combine_stores_state *state, nir_block *block) -{ - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_call) { - combine_stores_with_modes(state, nir_var_shader_out | - nir_var_shader_temp | - nir_var_function_temp | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global); - continue; - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_store_deref: - if (nir_intrinsic_access(intrin) & ACCESS_VOLATILE) { - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - /* When we see a volatile store, we go ahead and combine all - * previous non-volatile stores which touch that address and - * specifically don't add the volatile store to the list. This - * way we guarantee that the volatile store isn't combined with - * anything and no non-volatile stores are combined across a - * volatile store. - */ - combine_stores_with_deref(state, dst); - } else { - update_combined_store(state, intrin); - } - break; - - case nir_intrinsic_control_barrier: - case nir_intrinsic_group_memory_barrier: - case nir_intrinsic_memory_barrier: - combine_stores_with_modes(state, nir_var_shader_out | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global); - break; - - case nir_intrinsic_memory_barrier_buffer: - combine_stores_with_modes(state, nir_var_mem_ssbo | - nir_var_mem_global); - break; - - case nir_intrinsic_memory_barrier_shared: - combine_stores_with_modes(state, nir_var_mem_shared); - break; - - case nir_intrinsic_memory_barrier_tcs_patch: - combine_stores_with_modes(state, nir_var_shader_out); - break; - - case nir_intrinsic_scoped_barrier: - if (nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_RELEASE) { - combine_stores_with_modes(state, - nir_intrinsic_memory_modes(intrin)); - } - break; - - case nir_intrinsic_emit_vertex: - case nir_intrinsic_emit_vertex_with_counter: - combine_stores_with_modes(state, nir_var_shader_out); - break; - - case nir_intrinsic_report_ray_intersection: - combine_stores_with_modes(state, nir_var_mem_ssbo | - nir_var_mem_global | - nir_var_shader_call_data | - nir_var_ray_hit_attrib); - break; - - case nir_intrinsic_ignore_ray_intersection: - case nir_intrinsic_terminate_ray: - combine_stores_with_modes(state, nir_var_mem_ssbo | - nir_var_mem_global | - nir_var_shader_call_data); - break; - - case nir_intrinsic_load_deref: { - nir_deref_instr *src = nir_src_as_deref(intrin->src[0]); - combine_stores_with_deref(state, src); - break; - } - - case nir_intrinsic_load_deref_block_intel: - case nir_intrinsic_store_deref_block_intel: { - /* Combine all the stores that may alias with the whole variable (or - * cast). - */ - nir_deref_instr *operand = nir_src_as_deref(intrin->src[0]); - while (nir_deref_instr_parent(operand)) - operand = nir_deref_instr_parent(operand); - assert(operand->deref_type == nir_deref_type_var || - operand->deref_type == nir_deref_type_cast); - - combine_stores_with_deref(state, operand); - break; - } - - case nir_intrinsic_copy_deref: - case nir_intrinsic_memcpy_deref: { - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - nir_deref_instr *src = nir_src_as_deref(intrin->src[1]); - combine_stores_with_deref(state, dst); - combine_stores_with_deref(state, src); - break; - } - - case nir_intrinsic_trace_ray: - case nir_intrinsic_execute_callable: - case nir_intrinsic_rt_trace_ray: - case nir_intrinsic_rt_execute_callable: { - nir_deref_instr *payload = - nir_src_as_deref(*nir_get_shader_call_payload_src(intrin)); - combine_stores_with_deref(state, payload); - break; - } - - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: { - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - combine_stores_with_deref(state, dst); - break; - } - - default: - break; - } - } - - /* At the end of the block, try all the remaining combinations. */ - combine_stores_with_modes(state, state->modes); -} - -static bool -combine_stores_impl(struct combine_stores_state *state, nir_function_impl *impl) -{ - state->progress = false; - nir_builder_init(&state->b, impl); - - nir_foreach_block(block, impl) - combine_stores_block(state, block); - - if (state->progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return state->progress; -} - -bool -nir_opt_combine_stores(nir_shader *shader, nir_variable_mode modes) -{ - void *mem_ctx = ralloc_context(NULL); - struct combine_stores_state state = { - .modes = modes, - .lin_ctx = linear_zalloc_parent(mem_ctx, 0), - }; - - list_inithead(&state.pending); - list_inithead(&state.freelist); - - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - progress |= combine_stores_impl(&state, function->impl); - } - - ralloc_free(mem_ctx); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_comparison_pre.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_comparison_pre.c deleted file mode 100644 index e8624be..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_comparison_pre.c +++ /dev/null @@ -1,412 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_instr_set.h" -#include "nir_search_helpers.h" -#include "nir_builder.h" -#include "../../util/u_vector.h" - -/* Partial redundancy elimination of compares - * - * Seaches for comparisons of the form 'a cmp b' that dominate arithmetic - * instructions like 'b - a'. The comparison is replaced by the arithmetic - * instruction, and the result is compared with zero. For example, - * - * vec1 32 ssa_111 = flt 0.37, ssa_110.w - * if ssa_111 { - * block block_1: - * vec1 32 ssa_112 = fadd ssa_110.w, -0.37 - * ... - * - * becomes - * - * vec1 32 ssa_111 = fadd ssa_110.w, -0.37 - * vec1 32 ssa_112 = flt 0.0, ssa_111 - * if ssa_112 { - * block block_1: - * ... - */ - -struct block_queue { - /** - * Stack of blocks from the current location in the CFG to the entry point - * of the function. - * - * This is sort of a poor man's dominator tree. - */ - struct exec_list blocks; - - /** List of freed block_instructions structures that can be reused. */ - struct exec_list reusable_blocks; -}; - -struct block_instructions { - struct exec_node node; - - /** - * Set of comparison instructions from the block that are candidates for - * being replaced by add instructions. - */ - struct u_vector instructions; -}; - -static void -block_queue_init(struct block_queue *bq) -{ - exec_list_make_empty(&bq->blocks); - exec_list_make_empty(&bq->reusable_blocks); -} - -static void -block_queue_finish(struct block_queue *bq) -{ - struct block_instructions *n; - - while ((n = (struct block_instructions *) exec_list_pop_head(&bq->blocks)) != NULL) { - u_vector_finish(&n->instructions); - free(n); - } - - while ((n = (struct block_instructions *) exec_list_pop_head(&bq->reusable_blocks)) != NULL) { - free(n); - } -} - -static struct block_instructions * -push_block(struct block_queue *bq) -{ - struct block_instructions *bi = - (struct block_instructions *) exec_list_pop_head(&bq->reusable_blocks); - - if (bi == NULL) { - bi = calloc(1, sizeof(struct block_instructions)); - - if (bi == NULL) - return NULL; - } - - if (!u_vector_init_pow2(&bi->instructions, 8, sizeof(nir_alu_instr *))) { - free(bi); - return NULL; - } - - exec_list_push_tail(&bq->blocks, &bi->node); - - return bi; -} - -static void -pop_block(struct block_queue *bq, struct block_instructions *bi) -{ - u_vector_finish(&bi->instructions); - exec_node_remove(&bi->node); - exec_list_push_head(&bq->reusable_blocks, &bi->node); -} - -static void -add_instruction_for_block(struct block_instructions *bi, - nir_alu_instr *alu) -{ - nir_alu_instr **data = - u_vector_add(&bi->instructions); - - *data = alu; -} - -/** - * Determine if the ALU instruction is used by an if-condition or used by a - * logic-not that is used by an if-condition. - */ -static bool -is_compatible_condition(const nir_alu_instr *instr) -{ - if (is_used_by_if(instr)) - return true; - - nir_foreach_use(src, &instr->dest.dest.ssa) { - const nir_instr *const user_instr = src->parent_instr; - - if (user_instr->type != nir_instr_type_alu) - continue; - - const nir_alu_instr *const user_alu = nir_instr_as_alu(user_instr); - - if (user_alu->op != nir_op_inot) - continue; - - if (is_used_by_if(user_alu)) - return true; - } - - return false; -} - -static void -rewrite_compare_instruction(nir_builder *bld, nir_alu_instr *orig_cmp, - nir_alu_instr *orig_add, bool zero_on_left) -{ - bld->cursor = nir_before_instr(&orig_cmp->instr); - - /* This is somewhat tricky. The compare instruction may be something like - * (fcmp, a, b) while the add instruction is something like (fadd, fneg(a), - * b). This is problematic because the SSA value for the fneg(a) may not - * exist yet at the compare instruction. - * - * We fabricate the operands of the new add. This is done using - * information provided by zero_on_left. If zero_on_left is true, we know - * the resulting compare instruction is (fcmp, 0.0, (fadd, x, y)). If the - * original compare instruction was (fcmp, a, b), x = b and y = -a. If - * zero_on_left is false, the resulting compare instruction is (fcmp, - * (fadd, x, y), 0.0) and x = a and y = -b. - */ - nir_ssa_def *const a = nir_ssa_for_alu_src(bld, orig_cmp, 0); - nir_ssa_def *const b = nir_ssa_for_alu_src(bld, orig_cmp, 1); - - nir_ssa_def *const fadd = zero_on_left - ? nir_fadd(bld, b, nir_fneg(bld, a)) - : nir_fadd(bld, a, nir_fneg(bld, b)); - - nir_ssa_def *const zero = - nir_imm_floatN_t(bld, 0.0, orig_add->dest.dest.ssa.bit_size); - - nir_ssa_def *const cmp = zero_on_left - ? nir_build_alu(bld, orig_cmp->op, zero, fadd, NULL, NULL) - : nir_build_alu(bld, orig_cmp->op, fadd, zero, NULL, NULL); - - /* Generating extra moves of the results is the easy way to make sure the - * writemasks match the original instructions. Later optimization passes - * will clean these up. This is similar to nir_replace_instr (in - * nir_search.c). - */ - nir_alu_instr *mov_add = nir_alu_instr_create(bld->shader, nir_op_mov); - mov_add->dest.write_mask = orig_add->dest.write_mask; - nir_ssa_dest_init(&mov_add->instr, &mov_add->dest.dest, - orig_add->dest.dest.ssa.num_components, - orig_add->dest.dest.ssa.bit_size, NULL); - mov_add->src[0].src = nir_src_for_ssa(fadd); - - nir_builder_instr_insert(bld, &mov_add->instr); - - nir_alu_instr *mov_cmp = nir_alu_instr_create(bld->shader, nir_op_mov); - mov_cmp->dest.write_mask = orig_cmp->dest.write_mask; - nir_ssa_dest_init(&mov_cmp->instr, &mov_cmp->dest.dest, - orig_cmp->dest.dest.ssa.num_components, - orig_cmp->dest.dest.ssa.bit_size, NULL); - mov_cmp->src[0].src = nir_src_for_ssa(cmp); - - nir_builder_instr_insert(bld, &mov_cmp->instr); - - nir_ssa_def_rewrite_uses(&orig_cmp->dest.dest.ssa, - &mov_cmp->dest.dest.ssa); - nir_ssa_def_rewrite_uses(&orig_add->dest.dest.ssa, - &mov_add->dest.dest.ssa); - - /* We know these have no more uses because we just rewrote them all, so we - * can remove them. - */ - nir_instr_remove(&orig_cmp->instr); - nir_instr_remove(&orig_add->instr); -} - -static bool -comparison_pre_block(nir_block *block, struct block_queue *bq, nir_builder *bld) -{ - bool progress = false; - - struct block_instructions *bi = push_block(bq); - if (bi == NULL) - return false; - - /* Starting with the current block, examine each instruction. If the - * instruction is a comparison that matches the '±a cmp ±b' pattern, add it - * to the block_instructions::instructions set. If the instruction is an - * add instruction, walk up the block queue looking at the stored - * instructions. If a matching comparison is found, move the addition and - * replace the comparison with a different comparison based on the result - * of the addition. All of the blocks in the queue are guaranteed to be - * dominators of the current block. - * - * After processing the current block, recurse into the blocks dominated by - * the current block. - */ - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *const alu = nir_instr_as_alu(instr); - - if (alu->dest.dest.ssa.num_components != 1) - continue; - - if (alu->dest.saturate) - continue; - - static const uint8_t swizzle[NIR_MAX_VEC_COMPONENTS] = {0}; - - switch (alu->op) { - case nir_op_fadd: { - /* If the instruction is fadd, check it against comparison - * instructions that dominate it. - */ - struct block_instructions *b = - (struct block_instructions *) exec_list_get_head_raw(&bq->blocks); - - while (b->node.next != NULL) { - nir_alu_instr **a; - bool rewrote_compare = false; - - u_vector_foreach(a, &b->instructions) { - nir_alu_instr *const cmp = *a; - - if (cmp == NULL) - continue; - - /* The operands of both instructions are, with some liberty, - * commutative. Check all four permutations. The third and - * fourth permutations are negations of the first two. - */ - if ((nir_alu_srcs_equal(cmp, alu, 0, 0) && - nir_alu_srcs_negative_equal(cmp, alu, 1, 1)) || - (nir_alu_srcs_equal(cmp, alu, 0, 1) && - nir_alu_srcs_negative_equal(cmp, alu, 1, 0))) { - /* These are the cases where (A cmp B) matches either (A + - * -B) or (-B + A) - * - * A cmp B <=> A + -B cmp 0 - */ - rewrite_compare_instruction(bld, cmp, alu, false); - - *a = NULL; - rewrote_compare = true; - break; - } else if ((nir_alu_srcs_equal(cmp, alu, 1, 0) && - nir_alu_srcs_negative_equal(cmp, alu, 0, 1)) || - (nir_alu_srcs_equal(cmp, alu, 1, 1) && - nir_alu_srcs_negative_equal(cmp, alu, 0, 0))) { - /* This is the case where (A cmp B) matches (B + -A) or (-A - * + B). - * - * A cmp B <=> 0 cmp B + -A - */ - rewrite_compare_instruction(bld, cmp, alu, true); - - *a = NULL; - rewrote_compare = true; - break; - } - } - - /* Bail after a compare in the most dominating block is found. - * This is necessary because 'alu' has been removed from the - * instruction stream. Should there be a matching compare in - * another block, calling rewrite_compare_instruction again will - * try to operate on a node that is not in the list as if it were - * in the list. - * - * FINISHME: There may be opportunity for additional optimization - * here. I discovered this problem due to a shader in Guacamelee. - * It may be possible to rewrite the matching compares that are - * encountered later to reuse the result from the compare that was - * first rewritten. It's also possible that this is just taken - * care of by calling the optimization pass repeatedly. - */ - if (rewrote_compare) { - progress = true; - break; - } - - b = (struct block_instructions *) b->node.next; - } - - break; - } - - case nir_op_flt: - case nir_op_fge: - case nir_op_fneu: - case nir_op_feq: - /* If the instruction is a comparison that is used by an if-statement - * and neither operand is immediate value 0, add it to the set. - */ - if (is_compatible_condition(alu) && - is_not_const_zero(NULL, alu, 0, 1, swizzle) && - is_not_const_zero(NULL, alu, 1, 1, swizzle)) - add_instruction_for_block(bi, alu); - - break; - - default: - break; - } - } - - for (unsigned i = 0; i < block->num_dom_children; i++) { - nir_block *child = block->dom_children[i]; - - if (comparison_pre_block(child, bq, bld)) - progress = true; - } - - pop_block(bq, bi); - - return progress; -} - -bool -nir_opt_comparison_pre_impl(nir_function_impl *impl) -{ - struct block_queue bq; - nir_builder bld; - - block_queue_init(&bq); - nir_builder_init(&bld, impl); - - nir_metadata_require(impl, nir_metadata_dominance); - - const bool progress = - comparison_pre_block(nir_start_block(impl), &bq, &bld); - - block_queue_finish(&bq); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_comparison_pre(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_opt_comparison_pre_impl(function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_conditional_discard.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_conditional_discard.c deleted file mode 100644 index 0737bf3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_conditional_discard.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright © 2016 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** @file nir_opt_conditional_discard.c - * - * Handles optimization of lowering of - * - if (cond) discard to discard_if(cond) and - * - if (cond) demote to demote_if(cond) - * - if (cond) terminate to terminate_if(cond) - */ - -static bool -nir_opt_conditional_discard_block(nir_builder *b, nir_block *block) -{ - if (nir_cf_node_is_first(&block->cf_node)) - return false; - - nir_cf_node *prev_node = nir_cf_node_prev(&block->cf_node); - if (prev_node->type != nir_cf_node_if) - return false; - - nir_if *if_stmt = nir_cf_node_as_if(prev_node); - nir_block *then_block = nir_if_first_then_block(if_stmt); - nir_block *else_block = nir_if_first_else_block(if_stmt); - - /* check there is only one else block and it is empty */ - if (nir_if_last_else_block(if_stmt) != else_block) - return false; - if (!exec_list_is_empty(&else_block->instr_list)) - return false; - - /* check there is only one then block and it has only one instruction in it */ - if (nir_if_last_then_block(if_stmt) != then_block) - return false; - if (exec_list_is_empty(&then_block->instr_list)) - return false; - if (exec_list_length(&then_block->instr_list) > 1) - return false; - /* - * make sure no subsequent phi nodes point at this if. - */ - nir_block *after = nir_cf_node_as_block(nir_cf_node_next(&if_stmt->cf_node)); - nir_foreach_instr_safe(instr, after) { - if (instr->type != nir_instr_type_phi) - break; - nir_phi_instr *phi = nir_instr_as_phi(instr); - - nir_foreach_phi_src(phi_src, phi) { - if (phi_src->pred == then_block || - phi_src->pred == else_block) - return false; - } - } - - /* Get the first instruction in the then block and confirm it is - * a discard or a demote instruction. - */ - nir_instr *instr = nir_block_first_instr(then_block); - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - nir_intrinsic_op op = intrin->intrinsic; - assert(if_stmt->condition.is_ssa); - nir_ssa_def *cond = if_stmt->condition.ssa; - b->cursor = nir_before_cf_node(prev_node); - - switch (intrin->intrinsic) { - case nir_intrinsic_discard: - op = nir_intrinsic_discard_if; - break; - case nir_intrinsic_demote: - op = nir_intrinsic_demote_if; - break; - case nir_intrinsic_terminate: - op = nir_intrinsic_terminate_if; - break; - case nir_intrinsic_discard_if: - case nir_intrinsic_demote_if: - case nir_intrinsic_terminate_if: - assert(intrin->src[0].is_ssa); - cond = nir_iand(b, cond, intrin->src[0].ssa); - break; - default: - return false; - } - - nir_intrinsic_instr *discard_if = - nir_intrinsic_instr_create(b->shader, op); - discard_if->src[0] = nir_src_for_ssa(cond); - - nir_instr_insert_before_cf(prev_node, &discard_if->instr); - nir_instr_remove(&intrin->instr); - nir_cf_node_remove(&if_stmt->cf_node); - - return true; -} - -bool -nir_opt_conditional_discard(nir_shader *shader) -{ - bool progress = false; - - nir_builder builder; - - nir_foreach_function(function, shader) { - if (function->impl) { - nir_builder_init(&builder, function->impl); - - bool impl_progress = false; - nir_foreach_block_safe(block, function->impl) { - if (nir_opt_conditional_discard_block(&builder, block)) - impl_progress = true; - } - - if (impl_progress) { - nir_metadata_preserve(function->impl, nir_metadata_none); - progress = true; - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - } - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_constant_folding.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_constant_folding.c deleted file mode 100644 index 281104f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_constant_folding.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_constant_expressions.h" -#include "nir_deref.h" -#include - -/* - * Implements SSA-based constant folding. - */ - -struct constant_fold_state { - bool has_load_constant; - bool has_indirect_load_const; -}; - -static bool -try_fold_alu(nir_builder *b, nir_alu_instr *alu) -{ - nir_const_value src[NIR_MAX_VEC_COMPONENTS][NIR_MAX_VEC_COMPONENTS]; - - if (!alu->dest.dest.is_ssa) - return false; - - /* In the case that any outputs/inputs have unsized types, then we need to - * guess the bit-size. In this case, the validator ensures that all - * bit-sizes match so we can just take the bit-size from first - * output/input with an unsized type. If all the outputs/inputs are sized - * then we don't need to guess the bit-size at all because the code we - * generate for constant opcodes in this case already knows the sizes of - * the types involved and does not need the provided bit-size for anything - * (although it still requires to receive a valid bit-size). - */ - unsigned bit_size = 0; - if (!nir_alu_type_get_type_size(nir_op_infos[alu->op].output_type)) - bit_size = alu->dest.dest.ssa.bit_size; - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (!alu->src[i].src.is_ssa) - return false; - - if (bit_size == 0 && - !nir_alu_type_get_type_size(nir_op_infos[alu->op].input_types[i])) - bit_size = alu->src[i].src.ssa->bit_size; - - nir_instr *src_instr = alu->src[i].src.ssa->parent_instr; - - if (src_instr->type != nir_instr_type_load_const) - return false; - nir_load_const_instr* load_const = nir_instr_as_load_const(src_instr); - - for (unsigned j = 0; j < nir_ssa_alu_instr_src_components(alu, i); - j++) { - src[i][j] = load_const->value[alu->src[i].swizzle[j]]; - } - - /* We shouldn't have any source modifiers in the optimization loop. */ - assert(!alu->src[i].abs && !alu->src[i].negate); - } - - if (bit_size == 0) - bit_size = 32; - - /* We shouldn't have any saturate modifiers in the optimization loop. */ - assert(!alu->dest.saturate); - - nir_const_value dest[NIR_MAX_VEC_COMPONENTS]; - nir_const_value *srcs[NIR_MAX_VEC_COMPONENTS]; - memset(dest, 0, sizeof(dest)); - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; ++i) - srcs[i] = src[i]; - nir_eval_const_opcode(alu->op, dest, alu->dest.dest.ssa.num_components, - bit_size, srcs, - b->shader->info.float_controls_execution_mode); - - b->cursor = nir_before_instr(&alu->instr); - nir_ssa_def *imm = nir_build_imm(b, alu->dest.dest.ssa.num_components, - alu->dest.dest.ssa.bit_size, - dest); - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, imm); - nir_instr_remove(&alu->instr); - nir_instr_free(&alu->instr); - - return true; -} - -static nir_const_value * -const_value_for_deref(nir_deref_instr *deref) -{ - if (!nir_deref_mode_is(deref, nir_var_mem_constant)) - return NULL; - - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - if (path.path[0]->deref_type != nir_deref_type_var) - goto fail; - - nir_variable *var = path.path[0]->var; - assert(var->data.mode == nir_var_mem_constant); - if (var->constant_initializer == NULL) - goto fail; - - nir_constant *c = var->constant_initializer; - nir_const_value *v = NULL; /* Vector value for array-deref-of-vec */ - - for (unsigned i = 1; path.path[i] != NULL; i++) { - nir_deref_instr *p = path.path[i]; - switch (p->deref_type) { - case nir_deref_type_var: - unreachable("Deref paths can only start with a var deref"); - - case nir_deref_type_array: { - assert(v == NULL); - if (!nir_src_is_const(p->arr.index)) - goto fail; - - uint64_t idx = nir_src_as_uint(p->arr.index); - if (c->num_elements > 0) { - assert(glsl_type_is_array(path.path[i-1]->type)); - if (idx >= c->num_elements) - goto fail; - c = c->elements[idx]; - } else { - assert(glsl_type_is_vector(path.path[i-1]->type)); - assert(glsl_type_is_scalar(p->type)); - if (idx >= NIR_MAX_VEC_COMPONENTS) - goto fail; - v = &c->values[idx]; - } - break; - } - - case nir_deref_type_struct: - assert(glsl_type_is_struct(path.path[i-1]->type)); - assert(v == NULL && c->num_elements > 0); - if (p->strct.index >= c->num_elements) - goto fail; - c = c->elements[p->strct.index]; - break; - - default: - goto fail; - } - } - - /* We have to have ended at a vector */ - assert(c->num_elements == 0); - nir_deref_path_finish(&path); - return v ? v : c->values; - -fail: - nir_deref_path_finish(&path); - return NULL; -} - -static bool -try_fold_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin, - struct constant_fold_state *state) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_demote_if: - case nir_intrinsic_discard_if: - case nir_intrinsic_terminate_if: - if (nir_src_is_const(intrin->src[0])) { - if (nir_src_as_bool(intrin->src[0])) { - b->cursor = nir_before_instr(&intrin->instr); - nir_intrinsic_op op; - switch (intrin->intrinsic) { - case nir_intrinsic_discard_if: - op = nir_intrinsic_discard; - break; - case nir_intrinsic_demote_if: - op = nir_intrinsic_demote; - break; - case nir_intrinsic_terminate_if: - op = nir_intrinsic_terminate; - break; - default: - unreachable("invalid intrinsic"); - } - nir_intrinsic_instr *new_instr = - nir_intrinsic_instr_create(b->shader, op); - nir_builder_instr_insert(b, &new_instr->instr); - } - nir_instr_remove(&intrin->instr); - return true; - } - return false; - - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_const_value *v = const_value_for_deref(deref); - if (v) { - b->cursor = nir_before_instr(&intrin->instr); - nir_ssa_def *val = nir_build_imm(b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size, v); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, val); - nir_instr_remove(&intrin->instr); - return true; - } - return false; - } - - case nir_intrinsic_load_constant: { - state->has_load_constant = true; - - if (!nir_src_is_const(intrin->src[0])) { - state->has_indirect_load_const = true; - return false; - } - - unsigned offset = nir_src_as_uint(intrin->src[0]); - unsigned base = nir_intrinsic_base(intrin); - unsigned range = nir_intrinsic_range(intrin); - assert(base + range <= b->shader->constant_data_size); - - b->cursor = nir_before_instr(&intrin->instr); - nir_ssa_def *val; - if (offset >= range) { - val = nir_ssa_undef(b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - } else { - nir_const_value imm[NIR_MAX_VEC_COMPONENTS]; - memset(imm, 0, sizeof(imm)); - uint8_t *data = (uint8_t*)b->shader->constant_data + base; - for (unsigned i = 0; i < intrin->num_components; i++) { - unsigned bytes = intrin->dest.ssa.bit_size / 8; - bytes = MIN2(bytes, range - offset); - - memcpy(&imm[i].u64, data + offset, bytes); - offset += bytes; - } - val = nir_build_imm(b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size, imm); - } - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, val); - nir_instr_remove(&intrin->instr); - return true; - } - - case nir_intrinsic_vote_any: - case nir_intrinsic_vote_all: - case nir_intrinsic_read_invocation: - case nir_intrinsic_read_first_invocation: - case nir_intrinsic_shuffle: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - case nir_intrinsic_quad_swizzle_amd: - case nir_intrinsic_masked_swizzle_amd: - /* All of these have the data payload in the first source. They may - * have a second source with a shuffle index but that doesn't matter if - * the data is constant. - */ - if (nir_src_is_const(intrin->src[0])) { - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - intrin->src[0].ssa); - nir_instr_remove(&intrin->instr); - return true; - } - return false; - - case nir_intrinsic_vote_feq: - case nir_intrinsic_vote_ieq: - if (nir_src_is_const(intrin->src[0])) { - b->cursor = nir_before_instr(&intrin->instr); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - nir_imm_true(b)); - nir_instr_remove(&intrin->instr); - return true; - } - return false; - - default: - return false; - } -} - -static bool -try_fold_txb_to_tex(nir_builder *b, nir_tex_instr *tex) -{ - assert(tex->op == nir_texop_txb); - - const int bias_idx = nir_tex_instr_src_index(tex, nir_tex_src_bias); - - /* nir_to_tgsi_lower_tex mangles many kinds of texture instructions, - * including txb, into invalid states. It removes the special - * parameters and appends the values to the texture coordinate. - */ - if (bias_idx < 0) - return false; - - if (nir_src_is_const(tex->src[bias_idx].src) && - nir_src_as_float(tex->src[bias_idx].src) == 0.0) { - nir_tex_instr_remove_src(tex, bias_idx); - tex->op = nir_texop_tex; - return true; - } - - return false; -} - -static bool -try_fold_tex_offset(nir_tex_instr *tex, unsigned *index, - nir_tex_src_type src_type) -{ - const int src_idx = nir_tex_instr_src_index(tex, src_type); - if (src_idx < 0) - return false; - - if (!nir_src_is_const(tex->src[src_idx].src)) - return false; - - *index += nir_src_as_uint(tex->src[src_idx].src); - nir_tex_instr_remove_src(tex, src_idx); - - return true; -} - -static bool -try_fold_tex(nir_builder *b, nir_tex_instr *tex) -{ - bool progress = false; - - progress |= try_fold_tex_offset(tex, &tex->texture_index, - nir_tex_src_texture_offset); - progress |= try_fold_tex_offset(tex, &tex->sampler_index, - nir_tex_src_sampler_offset); - - /* txb with a bias of constant zero is just tex. */ - if (tex->op == nir_texop_txb) - progress |= try_fold_txb_to_tex(b, tex); - - return progress; -} - -static bool -try_fold_instr(nir_builder *b, nir_instr *instr, void *_state) -{ - switch (instr->type) { - case nir_instr_type_alu: - return try_fold_alu(b, nir_instr_as_alu(instr)); - case nir_instr_type_intrinsic: - return try_fold_intrinsic(b, nir_instr_as_intrinsic(instr), _state); - case nir_instr_type_tex: - return try_fold_tex(b, nir_instr_as_tex(instr)); - default: - /* Don't know how to constant fold */ - return false; - } -} - -bool -nir_opt_constant_folding(nir_shader *shader) -{ - struct constant_fold_state state; - state.has_load_constant = false; - state.has_indirect_load_const = false; - - bool progress = nir_shader_instructions_pass(shader, try_fold_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &state); - - /* This doesn't free the constant data if there are no constant loads because - * the data might still be used but the loads have been lowered to load_ubo - */ - if (state.has_load_constant && !state.has_indirect_load_const && - shader->constant_data_size) { - ralloc_free(shader->constant_data); - shader->constant_data = NULL; - shader->constant_data_size = 0; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_copy_prop_vars.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_copy_prop_vars.c deleted file mode 100644 index 1eb78b3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_copy_prop_vars.c +++ /dev/null @@ -1,1547 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -#include "../../util/bitscan.h" -#include "../../util/u_dynarray.h" - -static const bool debug = false; - -/** - * Variable-based copy propagation - * - * Normally, NIR trusts in SSA form for most of its copy-propagation needs. - * However, there are cases, especially when dealing with indirects, where SSA - * won't help you. This pass is for those times. Specifically, it handles - * the following things that the rest of NIR can't: - * - * 1) Copy-propagation on variables that have indirect access. This includes - * propagating from indirect stores into indirect loads. - * - * 2) Removal of redundant load_deref intrinsics. We can't trust regular CSE - * to do this because it isn't aware of variable writes that may alias the - * value and make the former load invalid. - * - * This pass uses an intermediate solution between being local / "per-block" - * and a complete data-flow analysis. It follows the control flow graph, and - * propagate the available copy information forward, invalidating data at each - * cf_node. - * - * Removal of dead writes to variables is handled by another pass. - */ - -struct copies { - struct list_head node; - - /* Hash table of copies referenced by variables */ - struct hash_table ht; - - /* Array of derefs that can't be chased back to a variable */ - struct util_dynarray arr; -}; - -struct copies_dynarray { - struct list_head node; - struct util_dynarray arr; -}; - -struct vars_written { - nir_variable_mode modes; - - /* Key is deref and value is the uintptr_t with the write mask. */ - struct hash_table *derefs; -}; - -struct value { - bool is_ssa; - union { - struct { - nir_ssa_def *def[NIR_MAX_VEC_COMPONENTS]; - uint8_t component[NIR_MAX_VEC_COMPONENTS]; - } ssa; - nir_deref_and_path deref; - }; -}; - -static void -value_set_ssa_components(struct value *value, nir_ssa_def *def, - unsigned num_components) -{ - if (!value->is_ssa) - memset(&value->ssa, 0, sizeof(value->ssa)); - value->is_ssa = true; - for (unsigned i = 0; i < num_components; i++) { - value->ssa.def[i] = def; - value->ssa.component[i] = i; - } -} - -struct copy_entry { - struct value src; - - nir_deref_and_path dst; -}; - -struct copy_prop_var_state { - nir_function_impl *impl; - - void *mem_ctx; - void *lin_ctx; - - /* Maps nodes to vars_written. Used to invalidate copy entries when - * visiting each node. - */ - struct hash_table *vars_written_map; - - /* List of copy structures ready for reuse */ - struct list_head unused_copy_structs_list; - - /* List of dynamic arrays ready for reuse */ - struct list_head unused_copy_dynarray_list; - - bool progress; -}; - -static bool -value_equals_store_src(struct value *value, nir_intrinsic_instr *intrin) -{ - assert(intrin->intrinsic == nir_intrinsic_store_deref); - nir_component_mask_t write_mask = nir_intrinsic_write_mask(intrin); - - for (unsigned i = 0; i < intrin->num_components; i++) { - if ((write_mask & (1 << i)) && - (value->ssa.def[i] != intrin->src[1].ssa || - value->ssa.component[i] != i)) - return false; - } - - return true; -} - -static struct vars_written * -create_vars_written(struct copy_prop_var_state *state) -{ - struct vars_written *written = - linear_zalloc_child(state->lin_ctx, sizeof(struct vars_written)); - written->derefs = _mesa_pointer_hash_table_create(state->mem_ctx); - return written; -} - -static void -gather_vars_written(struct copy_prop_var_state *state, - struct vars_written *written, - nir_cf_node *cf_node) -{ - struct vars_written *new_written = NULL; - - switch (cf_node->type) { - case nir_cf_node_function: { - nir_function_impl *impl = nir_cf_node_as_function(cf_node); - foreach_list_typed_safe(nir_cf_node, cf_node, node, &impl->body) - gather_vars_written(state, NULL, cf_node); - break; - } - - case nir_cf_node_block: { - if (!written) - break; - - nir_block *block = nir_cf_node_as_block(cf_node); - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_call) { - written->modes |= nir_var_shader_out | - nir_var_shader_temp | - nir_var_function_temp | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global; - continue; - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_control_barrier: - case nir_intrinsic_group_memory_barrier: - case nir_intrinsic_memory_barrier: - written->modes |= nir_var_shader_out | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global; - break; - - case nir_intrinsic_scoped_barrier: - if (nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_ACQUIRE) - written->modes |= nir_intrinsic_memory_modes(intrin); - break; - - case nir_intrinsic_emit_vertex: - case nir_intrinsic_emit_vertex_with_counter: - written->modes = nir_var_shader_out; - break; - - case nir_intrinsic_trace_ray: - case nir_intrinsic_execute_callable: - case nir_intrinsic_rt_trace_ray: - case nir_intrinsic_rt_execute_callable: { - nir_deref_instr *payload = - nir_src_as_deref(*nir_get_shader_call_payload_src(intrin)); - - nir_component_mask_t mask = (1 << glsl_get_vector_elements(payload->type)) - 1; - - struct hash_entry *ht_entry = - _mesa_hash_table_search(written->derefs, payload); - if (ht_entry) { - ht_entry->data = (void *)(mask | (uintptr_t)ht_entry->data); - } else { - _mesa_hash_table_insert(written->derefs, payload, - (void *)(uintptr_t)mask); - } - break; - } - - case nir_intrinsic_report_ray_intersection: - written->modes |= nir_var_mem_ssbo | - nir_var_mem_global | - nir_var_shader_call_data | - nir_var_ray_hit_attrib; - break; - - case nir_intrinsic_ignore_ray_intersection: - case nir_intrinsic_terminate_ray: - written->modes |= nir_var_mem_ssbo | - nir_var_mem_global | - nir_var_shader_call_data; - break; - - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fcomp_swap: - case nir_intrinsic_store_deref: - case nir_intrinsic_copy_deref: - case nir_intrinsic_memcpy_deref: { - /* Destination in all of store_deref, copy_deref and the atomics is src[0]. */ - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - - uintptr_t mask = intrin->intrinsic == nir_intrinsic_store_deref ? - nir_intrinsic_write_mask(intrin) : (1 << glsl_get_vector_elements(dst->type)) - 1; - - struct hash_entry *ht_entry = _mesa_hash_table_search(written->derefs, dst); - if (ht_entry) - ht_entry->data = (void *)(mask | (uintptr_t)ht_entry->data); - else - _mesa_hash_table_insert(written->derefs, dst, (void *)mask); - - break; - } - - default: - break; - } - } - - break; - } - - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(cf_node); - - new_written = create_vars_written(state); - - foreach_list_typed_safe(nir_cf_node, cf_node, node, &if_stmt->then_list) - gather_vars_written(state, new_written, cf_node); - - foreach_list_typed_safe(nir_cf_node, cf_node, node, &if_stmt->else_list) - gather_vars_written(state, new_written, cf_node); - - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - - new_written = create_vars_written(state); - - foreach_list_typed_safe(nir_cf_node, cf_node, node, &loop->body) - gather_vars_written(state, new_written, cf_node); - - break; - } - - default: - unreachable("Invalid CF node type"); - } - - if (new_written) { - /* Merge new information to the parent control flow node. */ - if (written) { - written->modes |= new_written->modes; - hash_table_foreach(new_written->derefs, new_entry) { - struct hash_entry *old_entry = - _mesa_hash_table_search_pre_hashed(written->derefs, new_entry->hash, - new_entry->key); - if (old_entry) { - nir_component_mask_t merged = (uintptr_t) new_entry->data | - (uintptr_t) old_entry->data; - old_entry->data = (void *) ((uintptr_t) merged); - } else { - _mesa_hash_table_insert_pre_hashed(written->derefs, new_entry->hash, - new_entry->key, new_entry->data); - } - } - } - _mesa_hash_table_insert(state->vars_written_map, cf_node, new_written); - } -} - -static struct copies_dynarray * -get_copies_dynarray(struct copy_prop_var_state *state) -{ - struct copies_dynarray *cp_arr; - if (list_is_empty(&state->unused_copy_dynarray_list)) { - cp_arr = ralloc(state->mem_ctx, struct copies_dynarray); - util_dynarray_init(&cp_arr->arr, state->mem_ctx); - } else { - cp_arr = list_entry(state->unused_copy_dynarray_list.next, - struct copies_dynarray, node); - list_del(&cp_arr->node); - util_dynarray_clear(&cp_arr->arr); - } - - return cp_arr; -} - -static struct util_dynarray * -copies_array_for_var(struct copy_prop_var_state *state, - struct hash_table *copies, nir_variable *var) -{ - struct hash_entry *entry = _mesa_hash_table_search(copies, var); - if (entry != NULL) - return &((struct copies_dynarray *) entry->data)->arr; - - struct copies_dynarray *copies_array = get_copies_dynarray(state); - - _mesa_hash_table_insert(copies, var, copies_array); - - return &copies_array->arr; -} - -static struct util_dynarray * -copies_array_for_deref(struct copy_prop_var_state *state, - struct copies *copies, nir_deref_and_path *deref) -{ - nir_get_deref_path(state->mem_ctx, deref); - - struct util_dynarray *copies_array; - if (deref->_path->path[0]->deref_type != nir_deref_type_var) { - copies_array = &copies->arr; - } else { - copies_array = - copies_array_for_var(state, &copies->ht, deref->_path->path[0]->var); - } - - return copies_array; -} - - -static struct copy_entry * -copy_entry_create(struct copy_prop_var_state *state, - struct copies *copies, nir_deref_and_path *deref) -{ - struct util_dynarray *copies_array = - copies_array_for_deref(state, copies, deref); - - struct copy_entry new_entry = { - .dst = *deref, - }; - util_dynarray_append(copies_array, struct copy_entry, new_entry); - return util_dynarray_top_ptr(copies_array, struct copy_entry); -} - -/* Remove copy entry by swapping it with the last element and reducing the - * size. If used inside an iteration on copies, it must be a reverse - * (backwards) iteration. It is safe to use in those cases because the swap - * will not affect the rest of the iteration. - */ -static void -copy_entry_remove(struct util_dynarray *copies, - struct copy_entry *entry, - struct copy_entry **relocated_entry) -{ - const struct copy_entry *src = - util_dynarray_pop_ptr(copies, struct copy_entry); - - /* Because we're removing elements from an array, pointers to those - * elements are not stable as we modify the array. - * If relocated_entry != NULL, it's points to an entry we saved off earlier - * and want to keep pointing to the right spot. - */ - if (relocated_entry && *relocated_entry == src) - *relocated_entry = entry; - - if (src != entry) - *entry = *src; -} - -static bool -is_array_deref_of_vector(const nir_deref_and_path *deref) -{ - if (deref->instr->deref_type != nir_deref_type_array) - return false; - nir_deref_instr *parent = nir_deref_instr_parent(deref->instr); - return glsl_type_is_vector(parent->type); -} - -static struct copy_entry * -lookup_entry_for_deref(struct copy_prop_var_state *state, - struct copies *copies, - nir_deref_and_path *deref, - nir_deref_compare_result allowed_comparisons, - bool *equal) -{ - struct util_dynarray *copies_array = - copies_array_for_deref(state, copies, deref); - - struct copy_entry *entry = NULL; - util_dynarray_foreach(copies_array, struct copy_entry, iter) { - nir_deref_compare_result result = - nir_compare_derefs_and_paths(state->mem_ctx, &iter->dst, deref); - if (result & allowed_comparisons) { - entry = iter; - if (result & nir_derefs_equal_bit) { - if (equal != NULL) - *equal = true; - break; - } - /* Keep looking in case we have an equal match later in the array. */ - } - } - - return entry; -} - -static void -lookup_entry_and_kill_aliases_copy_array(struct copy_prop_var_state *state, - struct util_dynarray *copies_array, - nir_deref_and_path *deref, - unsigned write_mask, - bool remove_entry, - struct copy_entry **entry, - bool *entry_removed) -{ - util_dynarray_foreach_reverse(copies_array, struct copy_entry, iter) { - if (!iter->src.is_ssa) { - /* If this write aliases the source of some entry, get rid of it */ - nir_deref_compare_result result = - nir_compare_derefs_and_paths(state->mem_ctx, &iter->src.deref, deref); - if (result & nir_derefs_may_alias_bit) { - copy_entry_remove(copies_array, iter, entry); - continue; - } - } - - nir_deref_compare_result comp = - nir_compare_derefs_and_paths(state->mem_ctx, &iter->dst, deref); - - if (comp & nir_derefs_equal_bit) { - /* Make sure it is unique. */ - assert(!*entry && !*entry_removed); - if (remove_entry) { - copy_entry_remove(copies_array, iter, NULL); - *entry_removed = true; - } else { - *entry = iter; - } - } else if (comp & nir_derefs_may_alias_bit) { - copy_entry_remove(copies_array, iter, entry); - } - } -} - -static struct copy_entry * -lookup_entry_and_kill_aliases(struct copy_prop_var_state *state, - struct copies *copies, - nir_deref_and_path *deref, - unsigned write_mask, - bool remove_entry) -{ - /* TODO: Take into account the write_mask. */ - - bool UNUSED entry_removed = false; - struct copy_entry *entry = NULL; - - nir_get_deref_path(state->mem_ctx, deref); - - /* For any other variable types if the variables are different, - * they don't alias. So we only need to compare different vars and loop - * over the hash table for ssbos and shared vars. - */ - if (deref->_path->path[0]->deref_type != nir_deref_type_var || - deref->_path->path[0]->var->data.mode == nir_var_mem_ssbo || - deref->_path->path[0]->var->data.mode == nir_var_mem_shared) { - - hash_table_foreach(&copies->ht, ht_entry) { - struct util_dynarray *copies_array = - &((struct copies_dynarray *) ht_entry->data)->arr; - - nir_variable *var = (nir_variable *) ht_entry->key; - if (deref->_path->path[0]->deref_type == nir_deref_type_var && - var->data.mode != deref->_path->path[0]->var->data.mode) - continue; - - lookup_entry_and_kill_aliases_copy_array(state, copies_array, deref, - write_mask, remove_entry, - &entry, &entry_removed); - } - - lookup_entry_and_kill_aliases_copy_array(state, &copies->arr, deref, - write_mask, remove_entry, - &entry, &entry_removed); - } else { - struct util_dynarray *copies_array = - copies_array_for_var(state, &copies->ht, deref->_path->path[0]->var); - - lookup_entry_and_kill_aliases_copy_array(state, copies_array, deref, - write_mask, remove_entry, - &entry, &entry_removed); - } - - return entry; -} - -static void -kill_aliases(struct copy_prop_var_state *state, - struct copies *copies, - nir_deref_and_path *deref, - unsigned write_mask) -{ - /* TODO: Take into account the write_mask. */ - - lookup_entry_and_kill_aliases(state, copies, deref, write_mask, true); -} - -static struct copy_entry * -get_entry_and_kill_aliases(struct copy_prop_var_state *state, - struct copies *copies, - nir_deref_and_path *deref, - unsigned write_mask) -{ - /* TODO: Take into account the write_mask. */ - - struct copy_entry *entry = - lookup_entry_and_kill_aliases(state, copies, deref, write_mask, false); - if (entry == NULL) - entry = copy_entry_create(state, copies, deref); - - return entry; -} - -static void -apply_barrier_for_modes_to_dynarr(struct util_dynarray *copies_array, - nir_variable_mode modes) -{ - util_dynarray_foreach_reverse(copies_array, struct copy_entry, iter) { - if (nir_deref_mode_may_be(iter->dst.instr, modes) || - (!iter->src.is_ssa && nir_deref_mode_may_be(iter->src.deref.instr, modes))) - copy_entry_remove(copies_array, iter, NULL); - } -} - -static void -apply_barrier_for_modes(struct copies *copies, - nir_variable_mode modes) -{ - hash_table_foreach(&copies->ht, ht_entry) { - struct util_dynarray *copies_array = - &((struct copies_dynarray *) ht_entry->data)->arr; - apply_barrier_for_modes_to_dynarr(copies_array, modes); - } - - apply_barrier_for_modes_to_dynarr(&copies->arr, modes); -} - -static void -value_set_from_value(struct value *value, const struct value *from, - unsigned base_index, unsigned write_mask) -{ - /* We can't have non-zero indexes with non-trivial write masks */ - assert(base_index == 0 || write_mask == 1); - - if (from->is_ssa) { - /* Clear value if it was being used as non-SSA. */ - if (!value->is_ssa) - memset(&value->ssa, 0, sizeof(value->ssa)); - value->is_ssa = true; - /* Only overwrite the written components */ - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - if (write_mask & (1 << i)) { - value->ssa.def[base_index + i] = from->ssa.def[i]; - value->ssa.component[base_index + i] = from->ssa.component[i]; - } - } - } else { - /* Non-ssa stores always write everything */ - value->is_ssa = false; - value->deref = from->deref; - } -} - -/* Try to load a single element of a vector from the copy_entry. If the data - * isn't available, just let the original intrinsic do the work. - */ -static bool -load_element_from_ssa_entry_value(struct copy_prop_var_state *state, - struct copy_entry *entry, - nir_builder *b, nir_intrinsic_instr *intrin, - struct value *value, unsigned index) -{ - assert(index < glsl_get_vector_elements(entry->dst.instr->type)); - - /* We don't have the element available, so let the instruction do the work. */ - if (!entry->src.ssa.def[index]) - return false; - - b->cursor = nir_instr_remove(&intrin->instr); - intrin->instr.block = NULL; - - assert(entry->src.ssa.component[index] < - entry->src.ssa.def[index]->num_components); - nir_ssa_def *def = nir_channel(b, entry->src.ssa.def[index], - entry->src.ssa.component[index]); - - *value = (struct value) { - .is_ssa = true, - { - .ssa = { - .def = { def }, - .component = { 0 }, - }, - } - }; - - return true; -} - -/* Do a "load" from an SSA-based entry return it in "value" as a value with a - * single SSA def. Because an entry could reference multiple different SSA - * defs, a vecN operation may be inserted to combine them into a single SSA - * def before handing it back to the caller. If the load instruction is no - * longer needed, it is removed and nir_instr::block is set to NULL. (It is - * possible, in some cases, for the load to be used in the vecN operation in - * which case it isn't deleted.) - */ -static bool -load_from_ssa_entry_value(struct copy_prop_var_state *state, - struct copy_entry *entry, - nir_builder *b, nir_intrinsic_instr *intrin, - nir_deref_and_path *src, struct value *value) -{ - if (is_array_deref_of_vector(src)) { - if (nir_src_is_const(src->instr->arr.index)) { - unsigned index = nir_src_as_uint(src->instr->arr.index); - return load_element_from_ssa_entry_value(state, entry, b, intrin, - value, index); - } - - /* An SSA copy_entry for the vector won't help indirect load. */ - if (glsl_type_is_vector(entry->dst.instr->type)) { - assert(entry->dst.instr->type == nir_deref_instr_parent(src->instr)->type); - /* TODO: If all SSA entries are there, try an if-ladder. */ - return false; - } - } - - *value = entry->src; - assert(value->is_ssa); - - const struct glsl_type *type = entry->dst.instr->type; - unsigned num_components = glsl_get_vector_elements(type); - - nir_component_mask_t available = 0; - bool all_same = true; - for (unsigned i = 0; i < num_components; i++) { - if (value->ssa.def[i]) - available |= (1 << i); - - if (value->ssa.def[i] != value->ssa.def[0]) - all_same = false; - - if (value->ssa.component[i] != i) - all_same = false; - } - - if (all_same) { - /* Our work here is done */ - b->cursor = nir_instr_remove(&intrin->instr); - intrin->instr.block = NULL; - return true; - } - - if (available != (1 << num_components) - 1 && - intrin->intrinsic == nir_intrinsic_load_deref && - (available & nir_ssa_def_components_read(&intrin->dest.ssa)) == 0) { - /* If none of the components read are available as SSA values, then we - * should just bail. Otherwise, we would end up replacing the uses of - * the load_deref a vecN() that just gathers up its components. - */ - return false; - } - - b->cursor = nir_after_instr(&intrin->instr); - - nir_ssa_def *load_def = - intrin->intrinsic == nir_intrinsic_load_deref ? &intrin->dest.ssa : NULL; - - bool keep_intrin = false; - nir_ssa_scalar comps[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < num_components; i++) { - if (value->ssa.def[i]) { - comps[i] = nir_get_ssa_scalar(value->ssa.def[i], value->ssa.component[i]); - } else { - /* We don't have anything for this component in our - * list. Just re-use a channel from the load. - */ - if (load_def == NULL) - load_def = nir_load_deref(b, entry->dst.instr); - - if (load_def->parent_instr == &intrin->instr) - keep_intrin = true; - - comps[i] = nir_get_ssa_scalar(load_def, i); - } - } - - nir_ssa_def *vec = nir_vec_scalars(b, comps, num_components); - value_set_ssa_components(value, vec, num_components); - - if (!keep_intrin) { - /* Removing this instruction should not touch the cursor because we - * created the cursor after the intrinsic and have added at least one - * instruction (the vec) since then. - */ - assert(b->cursor.instr != &intrin->instr); - nir_instr_remove(&intrin->instr); - intrin->instr.block = NULL; - } - - return true; -} - -/** - * Specialize the wildcards in a deref chain - * - * This function returns a deref chain identical to \param deref except that - * some of its wildcards are replaced with indices from \param specific. The - * process is guided by \param guide which references the same type as \param - * specific but has the same wildcard array lengths as \param deref. - */ -static nir_deref_instr * -specialize_wildcards(nir_builder *b, - nir_deref_path *deref, - nir_deref_path *guide, - nir_deref_path *specific) -{ - nir_deref_instr **deref_p = &deref->path[1]; - nir_deref_instr **guide_p = &guide->path[1]; - nir_deref_instr **spec_p = &specific->path[1]; - nir_deref_instr *ret_tail = deref->path[0]; - for (; *deref_p; deref_p++) { - if ((*deref_p)->deref_type == nir_deref_type_array_wildcard) { - /* This is where things get tricky. We have to search through - * the entry deref to find its corresponding wildcard and fill - * this slot in with the value from the src. - */ - while (*guide_p && - (*guide_p)->deref_type != nir_deref_type_array_wildcard) { - guide_p++; - spec_p++; - } - assert(*guide_p && *spec_p); - - ret_tail = nir_build_deref_follower(b, ret_tail, *spec_p); - - guide_p++; - spec_p++; - } else { - ret_tail = nir_build_deref_follower(b, ret_tail, *deref_p); - } - } - - return ret_tail; -} - -/* Do a "load" from an deref-based entry return it in "value" as a value. The - * deref returned in "value" will always be a fresh copy so the caller can - * steal it and assign it to the instruction directly without copying it - * again. - */ -static bool -load_from_deref_entry_value(struct copy_prop_var_state *state, - struct copy_entry *entry, - nir_builder *b, nir_intrinsic_instr *intrin, - nir_deref_and_path *src, struct value *value) -{ - *value = entry->src; - - b->cursor = nir_instr_remove(&intrin->instr); - - nir_deref_path *entry_dst_path = nir_get_deref_path(state->mem_ctx, &entry->dst); - nir_deref_path *src_path = nir_get_deref_path(state->mem_ctx, src); - - bool need_to_specialize_wildcards = false; - nir_deref_instr **entry_p = &entry_dst_path->path[1]; - nir_deref_instr **src_p = &src_path->path[1]; - while (*entry_p && *src_p) { - nir_deref_instr *entry_tail = *entry_p++; - nir_deref_instr *src_tail = *src_p++; - - if (src_tail->deref_type == nir_deref_type_array && - entry_tail->deref_type == nir_deref_type_array_wildcard) - need_to_specialize_wildcards = true; - } - - /* If the entry deref is longer than the source deref then it refers to a - * smaller type and we can't source from it. - */ - assert(*entry_p == NULL); - - value->deref._path = NULL; - - if (need_to_specialize_wildcards) { - /* The entry has some wildcards that are not in src. This means we need - * to construct a new deref based on the entry but using the wildcards - * from the source and guided by the entry dst. Oof. - */ - nir_deref_path *entry_src_path = - nir_get_deref_path(state->mem_ctx, &entry->src.deref); - value->deref.instr = specialize_wildcards(b, entry_src_path, - entry_dst_path, src_path); - } - - /* If our source deref is longer than the entry deref, that's ok because - * it just means the entry deref needs to be extended a bit. - */ - while (*src_p) { - nir_deref_instr *src_tail = *src_p++; - value->deref.instr = nir_build_deref_follower(b, value->deref.instr, src_tail); - } - - return true; -} - -static bool -try_load_from_entry(struct copy_prop_var_state *state, struct copy_entry *entry, - nir_builder *b, nir_intrinsic_instr *intrin, - nir_deref_and_path *src, struct value *value) -{ - if (entry == NULL) - return false; - - if (entry->src.is_ssa) { - return load_from_ssa_entry_value(state, entry, b, intrin, src, value); - } else { - return load_from_deref_entry_value(state, entry, b, intrin, src, value); - } -} - -static void -invalidate_copies_for_cf_node(struct copy_prop_var_state *state, - struct copies *copies, - nir_cf_node *cf_node) -{ - struct hash_entry *ht_entry = _mesa_hash_table_search(state->vars_written_map, cf_node); - assert(ht_entry); - - struct vars_written *written = ht_entry->data; - if (written->modes) { - hash_table_foreach(&copies->ht, ht_entry) { - struct util_dynarray *copies_array = - &((struct copies_dynarray *) ht_entry->data)->arr; - util_dynarray_foreach_reverse(copies_array, struct copy_entry, entry) { - if (nir_deref_mode_may_be(entry->dst.instr, written->modes)) - copy_entry_remove(copies_array, entry, NULL); - } - } - - util_dynarray_foreach_reverse(&copies->arr, struct copy_entry, entry) { - if (nir_deref_mode_may_be(entry->dst.instr, written->modes)) - copy_entry_remove(&copies->arr, entry, NULL); - } - } - - hash_table_foreach (written->derefs, entry) { - nir_deref_instr *deref_written = (nir_deref_instr *)entry->key; - nir_deref_and_path deref = {deref_written, NULL}; - kill_aliases(state, copies, &deref, (uintptr_t)entry->data); - } -} - -static void -print_value(struct value *value, unsigned num_components) -{ - if (!value->is_ssa) { - printf(" %s ", glsl_get_type_name(value->deref.instr->type)); - nir_print_deref(value->deref.instr, stdout); - return; - } - - bool same_ssa = true; - for (unsigned i = 0; i < num_components; i++) { - if (value->ssa.component[i] != i || - (i > 0 && value->ssa.def[i - 1] != value->ssa.def[i])) { - same_ssa = false; - break; - } - } - if (same_ssa) { - printf(" ssa_%d", value->ssa.def[0]->index); - } else { - for (int i = 0; i < num_components; i++) { - if (value->ssa.def[i]) - printf(" ssa_%d[%u]", value->ssa.def[i]->index, value->ssa.component[i]); - else - printf(" _"); - } - } -} - -static void -print_copy_entry(struct copy_entry *entry) -{ - printf(" %s ", glsl_get_type_name(entry->dst.instr->type)); - nir_print_deref(entry->dst.instr, stdout); - printf(":\t"); - - unsigned num_components = glsl_get_vector_elements(entry->dst.instr->type); - print_value(&entry->src, num_components); - printf("\n"); -} - -static void -dump_instr(nir_instr *instr) -{ - printf(" "); - nir_print_instr(instr, stdout); - printf("\n"); -} - -static void -dump_copy_entries(struct copies *copies) -{ - hash_table_foreach(&copies->ht, ht_entry) { - struct util_dynarray *copies_array = - &((struct copies_dynarray *) ht_entry->data)->arr; - - util_dynarray_foreach(copies_array, struct copy_entry, iter) - print_copy_entry(iter); - } - - util_dynarray_foreach(&copies->arr, struct copy_entry, iter) - print_copy_entry(iter); - - printf("\n"); -} - -static void -copy_prop_vars_block(struct copy_prop_var_state *state, - nir_builder *b, nir_block *block, - struct copies *copies) -{ - if (debug) { - printf("# block%d\n", block->index); - dump_copy_entries(copies); - } - - nir_foreach_instr_safe(instr, block) { - if (debug && instr->type == nir_instr_type_deref) - dump_instr(instr); - - if (instr->type == nir_instr_type_call) { - if (debug) dump_instr(instr); - apply_barrier_for_modes(copies, nir_var_shader_out | - nir_var_shader_temp | - nir_var_function_temp | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global); - if (debug) dump_copy_entries(copies); - continue; - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_control_barrier: - case nir_intrinsic_memory_barrier: - if (debug) dump_instr(instr); - - apply_barrier_for_modes(copies, nir_var_shader_out | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global); - break; - - case nir_intrinsic_memory_barrier_buffer: - if (debug) dump_instr(instr); - - apply_barrier_for_modes(copies, nir_var_mem_ssbo | - nir_var_mem_global); - break; - - case nir_intrinsic_memory_barrier_shared: - if (debug) dump_instr(instr); - - apply_barrier_for_modes(copies, nir_var_mem_shared); - break; - - case nir_intrinsic_memory_barrier_tcs_patch: - if (debug) dump_instr(instr); - - apply_barrier_for_modes(copies, nir_var_shader_out); - break; - - case nir_intrinsic_scoped_barrier: - if (debug) dump_instr(instr); - - if (nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_ACQUIRE) - apply_barrier_for_modes(copies, nir_intrinsic_memory_modes(intrin)); - break; - - case nir_intrinsic_emit_vertex: - case nir_intrinsic_emit_vertex_with_counter: - if (debug) dump_instr(instr); - - apply_barrier_for_modes(copies, nir_var_shader_out); - break; - - case nir_intrinsic_report_ray_intersection: - apply_barrier_for_modes(copies, nir_var_mem_ssbo | - nir_var_mem_global | - nir_var_shader_call_data | - nir_var_ray_hit_attrib); - break; - - case nir_intrinsic_ignore_ray_intersection: - case nir_intrinsic_terminate_ray: - apply_barrier_for_modes(copies, nir_var_mem_ssbo | - nir_var_mem_global | - nir_var_shader_call_data); - break; - - case nir_intrinsic_load_deref: { - if (debug) dump_instr(instr); - - if (nir_intrinsic_access(intrin) & ACCESS_VOLATILE) - break; - - nir_deref_and_path src = {nir_src_as_deref(intrin->src[0]), NULL}; - - /* If this is a load from a read-only mode, then all this pass would - * do is combine redundant loads and CSE should be more efficient for - * that. - */ - nir_variable_mode ignore = nir_var_read_only_modes & ~nir_var_vec_indexable_modes; - if (nir_deref_mode_must_be(src.instr, ignore)) - break; - - /* Direct array_derefs of vectors operate on the vectors (the parent - * deref). Indirects will be handled like other derefs. - */ - int vec_index = 0; - nir_deref_and_path vec_src = src; - if (is_array_deref_of_vector(&src) && nir_src_is_const(src.instr->arr.index)) { - vec_src.instr = nir_deref_instr_parent(src.instr); - unsigned vec_comps = glsl_get_vector_elements(vec_src.instr->type); - vec_index = nir_src_as_uint(src.instr->arr.index); - - /* Loading from an invalid index yields an undef */ - if (vec_index >= vec_comps) { - b->cursor = nir_instr_remove(instr); - nir_ssa_def *u = nir_ssa_undef(b, 1, intrin->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, u); - state->progress = true; - break; - } - } - - bool src_entry_equal = false; - struct copy_entry *src_entry = - lookup_entry_for_deref(state, copies, &src, - nir_derefs_a_contains_b_bit, &src_entry_equal); - struct value value = {0}; - if (try_load_from_entry(state, src_entry, b, intrin, &src, &value)) { - if (value.is_ssa) { - /* lookup_load has already ensured that we get a single SSA - * value that has all of the channels. We just have to do the - * rewrite operation. Note for array derefs of vectors, the - * channel 0 is used. - */ - if (intrin->instr.block) { - /* The lookup left our instruction in-place. This means it - * must have used it to vec up a bunch of different sources. - * We need to be careful when rewriting uses so we don't - * rewrite the vecN itself. - */ - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - value.ssa.def[0], - value.ssa.def[0]->parent_instr); - } else { - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - value.ssa.def[0]); - } - } else { - /* We're turning it into a load of a different variable */ - intrin->src[0] = nir_src_for_ssa(&value.deref.instr->dest.ssa); - - /* Put it back in again. */ - nir_builder_instr_insert(b, instr); - value_set_ssa_components(&value, &intrin->dest.ssa, - intrin->num_components); - } - state->progress = true; - } else { - value_set_ssa_components(&value, &intrin->dest.ssa, - intrin->num_components); - } - - /* Now that we have a value, we're going to store it back so that we - * have the right value next time we come looking for it. In order - * to do this, we need an exact match, not just something that - * contains what we're looking for. - * - * We avoid doing another lookup if src.instr == vec_src.instr. - */ - struct copy_entry *entry = src_entry; - if (src.instr != vec_src.instr) - entry = lookup_entry_for_deref(state, copies, &vec_src, - nir_derefs_equal_bit, NULL); - else if (!src_entry_equal) - entry = NULL; - - if (!entry) - entry = copy_entry_create(state, copies, &vec_src); - - /* Update the entry with the value of the load. This way - * we can potentially remove subsequent loads. - */ - value_set_from_value(&entry->src, &value, vec_index, - (1 << intrin->num_components) - 1); - break; - } - - case nir_intrinsic_store_deref: { - if (debug) dump_instr(instr); - - nir_deref_and_path dst = {nir_src_as_deref(intrin->src[0]), NULL}; - assert(glsl_type_is_vector_or_scalar(dst.instr->type)); - - /* Direct array_derefs of vectors operate on the vectors (the parent - * deref). Indirects will be handled like other derefs. - */ - int vec_index = 0; - nir_deref_and_path vec_dst = dst; - if (is_array_deref_of_vector(&dst) && nir_src_is_const(dst.instr->arr.index)) { - vec_dst.instr = nir_deref_instr_parent(dst.instr); - unsigned vec_comps = glsl_get_vector_elements(vec_dst.instr->type); - - vec_index = nir_src_as_uint(dst.instr->arr.index); - - /* Storing to an invalid index is a no-op. */ - if (vec_index >= vec_comps) { - nir_instr_remove(instr); - state->progress = true; - break; - } - } - - if (nir_intrinsic_access(intrin) & ACCESS_VOLATILE) { - unsigned wrmask = nir_intrinsic_write_mask(intrin); - kill_aliases(state, copies, &dst, wrmask); - break; - } - - struct copy_entry *entry = - lookup_entry_for_deref(state, copies, &dst, nir_derefs_equal_bit, NULL); - if (entry && value_equals_store_src(&entry->src, intrin)) { - /* If we are storing the value from a load of the same var the - * store is redundant so remove it. - */ - nir_instr_remove(instr); - state->progress = true; - } else { - struct value value = {0}; - value_set_ssa_components(&value, intrin->src[1].ssa, - intrin->num_components); - unsigned wrmask = nir_intrinsic_write_mask(intrin); - struct copy_entry *entry = - get_entry_and_kill_aliases(state, copies, &vec_dst, wrmask); - value_set_from_value(&entry->src, &value, vec_index, wrmask); - } - - break; - } - - case nir_intrinsic_copy_deref: { - if (debug) dump_instr(instr); - - nir_deref_and_path dst = {nir_src_as_deref(intrin->src[0]), NULL}; - nir_deref_and_path src = {nir_src_as_deref(intrin->src[1]), NULL}; - - /* The copy_deref intrinsic doesn't keep track of num_components, so - * get it ourselves. - */ - unsigned num_components = glsl_get_vector_elements(dst.instr->type); - unsigned full_mask = (1 << num_components) - 1; - - if ((nir_intrinsic_src_access(intrin) & ACCESS_VOLATILE) || - (nir_intrinsic_dst_access(intrin) & ACCESS_VOLATILE)) { - kill_aliases(state, copies, &dst, full_mask); - break; - } - - nir_deref_compare_result comp = - nir_compare_derefs_and_paths(state->mem_ctx, &src, &dst); - if (comp & nir_derefs_equal_bit) { - /* This is a no-op self-copy. Get rid of it */ - nir_instr_remove(instr); - state->progress = true; - continue; - } - - /* Copy of direct array derefs of vectors are not handled. Just - * invalidate what's written and bail. - */ - if ((is_array_deref_of_vector(&src) && nir_src_is_const(src.instr->arr.index)) || - (is_array_deref_of_vector(&dst) && nir_src_is_const(dst.instr->arr.index))) { - kill_aliases(state, copies, &dst, full_mask); - break; - } - - struct copy_entry *src_entry = - lookup_entry_for_deref(state, copies, &src, nir_derefs_a_contains_b_bit, NULL); - struct value value; - if (try_load_from_entry(state, src_entry, b, intrin, &src, &value)) { - /* If load works, intrin (the copy_deref) is removed. */ - if (value.is_ssa) { - nir_store_deref(b, dst.instr, value.ssa.def[0], full_mask); - } else { - /* If this would be a no-op self-copy, don't bother. */ - comp = nir_compare_derefs_and_paths(state->mem_ctx, &value.deref, &dst); - if (comp & nir_derefs_equal_bit) - continue; - - /* Just turn it into a copy of a different deref */ - intrin->src[1] = nir_src_for_ssa(&value.deref.instr->dest.ssa); - - /* Put it back in again. */ - nir_builder_instr_insert(b, instr); - } - - state->progress = true; - } else { - value = (struct value) { - .is_ssa = false, - { .deref = src }, - }; - } - - nir_variable *src_var = nir_deref_instr_get_variable(src.instr); - if (src_var && src_var->data.cannot_coalesce) { - /* The source cannot be coaleseced, which means we can't propagate - * this copy. - */ - break; - } - - struct copy_entry *dst_entry = - get_entry_and_kill_aliases(state, copies, &dst, full_mask); - value_set_from_value(&dst_entry->src, &value, 0, full_mask); - break; - } - - case nir_intrinsic_trace_ray: - case nir_intrinsic_execute_callable: - case nir_intrinsic_rt_trace_ray: - case nir_intrinsic_rt_execute_callable: { - if (debug) dump_instr(instr); - - nir_deref_and_path payload = { - nir_src_as_deref(*nir_get_shader_call_payload_src(intrin)), NULL}; - nir_component_mask_t full_mask = (1 << glsl_get_vector_elements(payload.instr->type)) - 1; - kill_aliases(state, copies, &payload, full_mask); - break; - } - - case nir_intrinsic_memcpy_deref: - case nir_intrinsic_deref_atomic_add: - case nir_intrinsic_deref_atomic_fadd: - case nir_intrinsic_deref_atomic_imin: - case nir_intrinsic_deref_atomic_umin: - case nir_intrinsic_deref_atomic_fmin: - case nir_intrinsic_deref_atomic_imax: - case nir_intrinsic_deref_atomic_umax: - case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_and: - case nir_intrinsic_deref_atomic_or: - case nir_intrinsic_deref_atomic_xor: - case nir_intrinsic_deref_atomic_exchange: - case nir_intrinsic_deref_atomic_comp_swap: - case nir_intrinsic_deref_atomic_fcomp_swap: - if (debug) dump_instr(instr); - - nir_deref_and_path dst = {nir_src_as_deref(intrin->src[0]), NULL}; - unsigned num_components = glsl_get_vector_elements(dst.instr->type); - unsigned full_mask = (1 << num_components) - 1; - kill_aliases(state, copies, &dst, full_mask); - break; - - case nir_intrinsic_store_deref_block_intel: { - if (debug) dump_instr(instr); - - /* Invalidate the whole variable (or cast) and anything that alias - * with it. - */ - nir_deref_and_path dst = {nir_src_as_deref(intrin->src[0]), NULL}; - while (nir_deref_instr_parent(dst.instr)) - dst.instr = nir_deref_instr_parent(dst.instr); - assert(dst.instr->deref_type == nir_deref_type_var || - dst.instr->deref_type == nir_deref_type_cast); - - unsigned num_components = glsl_get_vector_elements(dst.instr->type); - unsigned full_mask = (1 << num_components) - 1; - kill_aliases(state, copies, &dst, full_mask); - break; - } - - default: - continue; /* To skip the debug below. */ - } - - if (debug) dump_copy_entries(copies); - } -} - -static void -clone_copies(struct copy_prop_var_state *state, struct copies *clones, - struct copies *copies) -{ - hash_table_foreach(&copies->ht, entry) { - struct copies_dynarray *cloned_copies = get_copies_dynarray(state); - util_dynarray_append_dynarray(&cloned_copies->arr, - &((struct copies_dynarray *) entry->data)->arr); - _mesa_hash_table_insert(&clones->ht, entry->key, cloned_copies); - } - - util_dynarray_clone(&clones->arr, state->mem_ctx, &copies->arr); -} - -/* Returns an existing struct for reuse or creates a new on if they are - * all in use. This greatly reduces the time spent allocating memory if we - * were to just creating a fresh one each time. - */ -static struct copies * -get_copies_structure(struct copy_prop_var_state *state) -{ - struct copies *copies; - if (list_is_empty(&state->unused_copy_structs_list)) { - copies = ralloc(state->mem_ctx, struct copies); - - _mesa_hash_table_init(&copies->ht, state->mem_ctx, _mesa_hash_pointer, - _mesa_key_pointer_equal); - util_dynarray_init(&copies->arr, state->mem_ctx); - } else { - copies = list_entry(state->unused_copy_structs_list.next, - struct copies, node); - list_del(&copies->node); - } - - return copies; -} - -static void -clear_copies_structure(struct copy_prop_var_state *state, - struct copies *copies) -{ - hash_table_foreach_remove(&copies->ht, entry) { - struct copies_dynarray *cp_arr = - (struct copies_dynarray *) entry->data; - list_add(&cp_arr->node, &state->unused_copy_dynarray_list); - } - - list_add(&copies->node, &state->unused_copy_structs_list); -} - -static void -copy_prop_vars_cf_node(struct copy_prop_var_state *state, - struct copies *copies, nir_cf_node *cf_node) -{ - switch (cf_node->type) { - case nir_cf_node_function: { - nir_function_impl *impl = nir_cf_node_as_function(cf_node); - - struct copies *impl_copies = get_copies_structure(state); - - foreach_list_typed_safe(nir_cf_node, cf_node, node, &impl->body) - copy_prop_vars_cf_node(state, impl_copies, cf_node); - - clear_copies_structure(state, impl_copies); - - break; - } - - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(cf_node); - nir_builder b; - nir_builder_init(&b, state->impl); - copy_prop_vars_block(state, &b, block, copies); - break; - } - - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(cf_node); - - /* Create new hash tables for tracking vars and fill it with clones of - * the copy arrays for each variable we are tracking. - * - * We clone the copies for each branch of the if statement. The idea is - * that they both see the same state of available copies, but do not - * interfere to each other. - */ - struct copies *then_copies = get_copies_structure(state); - clone_copies(state, then_copies, copies); - - foreach_list_typed_safe(nir_cf_node, cf_node, node, &if_stmt->then_list) - copy_prop_vars_cf_node(state, then_copies, cf_node); - - clear_copies_structure(state, then_copies); - - struct copies *else_copies = get_copies_structure(state); - clone_copies(state, else_copies, copies); - - foreach_list_typed_safe(nir_cf_node, cf_node, node, &if_stmt->else_list) - copy_prop_vars_cf_node(state, else_copies, cf_node); - - clear_copies_structure(state, else_copies); - - /* Both branches copies can be ignored, since the effect of running both - * branches was captured in the first pass that collects vars_written. - */ - - invalidate_copies_for_cf_node(state, copies, cf_node); - - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - - /* Invalidate before cloning the copies for the loop, since the loop - * body can be executed more than once. - */ - - invalidate_copies_for_cf_node(state, copies, cf_node); - - struct copies *loop_copies = get_copies_structure(state); - clone_copies(state, loop_copies, copies); - - foreach_list_typed_safe(nir_cf_node, cf_node, node, &loop->body) - copy_prop_vars_cf_node(state, loop_copies, cf_node); - - clear_copies_structure(state, loop_copies); - - break; - } - - default: - unreachable("Invalid CF node type"); - } -} - -static bool -nir_copy_prop_vars_impl(nir_function_impl *impl) -{ - void *mem_ctx = ralloc_context(NULL); - - if (debug) { - nir_metadata_require(impl, nir_metadata_block_index); - printf("## nir_copy_prop_vars_impl for %s\n", impl->function->name); - } - - struct copy_prop_var_state state = { - .impl = impl, - .mem_ctx = mem_ctx, - .lin_ctx = linear_zalloc_parent(mem_ctx, 0), - - .vars_written_map = _mesa_pointer_hash_table_create(mem_ctx), - }; - list_inithead(&state.unused_copy_structs_list); - list_inithead(&state.unused_copy_dynarray_list); - - gather_vars_written(&state, NULL, &impl->cf_node); - - copy_prop_vars_cf_node(&state, NULL, &impl->cf_node); - - if (state.progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - ralloc_free(mem_ctx); - return state.progress; -} - -bool -nir_opt_copy_prop_vars(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - progress |= nir_copy_prop_vars_impl(function->impl); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_copy_propagate.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_copy_propagate.c deleted file mode 100644 index 15fd953..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_copy_propagate.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "nir_builder.h" - -/** - * SSA-based copy propagation - */ - -static bool -is_swizzleless_move(nir_alu_instr *instr) -{ - unsigned num_comp = instr->dest.dest.ssa.num_components; - - if (instr->src[0].src.ssa->num_components != num_comp) - return false; - - if (instr->op == nir_op_mov) { - for (unsigned i = 0; i < num_comp; i++) { - if (instr->src[0].swizzle[i] != i) - return false; - } - } else { - for (unsigned i = 0; i < num_comp; i++) { - if (instr->src[i].swizzle[0] != i || - instr->src[i].src.ssa != instr->src[0].src.ssa) - return false; - } - } - - return true; -} - -static bool -rewrite_to_vec(nir_function_impl *impl, nir_alu_instr *mov, nir_alu_instr *vec) -{ - if (mov->op != nir_op_mov) - return false; - - nir_builder b; - nir_builder_init(&b, impl); - b.cursor = nir_after_instr(&mov->instr); - - unsigned num_comp = mov->dest.dest.ssa.num_components; - nir_alu_instr *new_vec = nir_alu_instr_create(b.shader, nir_op_vec(num_comp)); - for (unsigned i = 0; i < num_comp; i++) - new_vec->src[i] = vec->src[mov->src[0].swizzle[i]]; - - nir_ssa_def *new = nir_builder_alu_instr_finish_and_insert(&b, new_vec); - nir_ssa_def_rewrite_uses(&mov->dest.dest.ssa, new); - - /* If we remove "mov" and it's the next instruction in the - * nir_foreach_instr_safe() loop, then we would end copy-propagation early. */ - - return true; -} - -static bool -copy_propagate_alu(nir_function_impl *impl, nir_alu_src *src, nir_alu_instr *copy) -{ - nir_ssa_def *def = NULL; - nir_alu_instr *user = nir_instr_as_alu(src->src.parent_instr); - unsigned src_idx = src - user->src; - assert(src_idx < nir_op_infos[user->op].num_inputs); - unsigned num_comp = nir_ssa_alu_instr_src_components(user, src_idx); - - if (copy->op == nir_op_mov) { - def = copy->src[0].src.ssa; - - for (unsigned i = 0; i < num_comp; i++) - src->swizzle[i] = copy->src[0].swizzle[src->swizzle[i]]; - } else { - def = copy->src[src->swizzle[0]].src.ssa; - - for (unsigned i = 1; i < num_comp; i++) { - if (copy->src[src->swizzle[i]].src.ssa != def) - return rewrite_to_vec(impl, user, copy); - } - - for (unsigned i = 0; i < num_comp; i++) - src->swizzle[i] = copy->src[src->swizzle[i]].swizzle[0]; - } - - nir_instr_rewrite_src_ssa(src->src.parent_instr, &src->src, def); - - return true; -} - -static bool -copy_propagate(nir_src *src, nir_alu_instr *copy) -{ - if (!is_swizzleless_move(copy)) - return false; - - nir_src_rewrite_ssa(src, copy->src[0].src.ssa); - - return true; -} - -static bool -copy_prop_instr(nir_function_impl *impl, nir_instr *instr) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *mov = nir_instr_as_alu(instr); - - if (!nir_alu_instr_is_copy(mov)) - return false; - - bool progress = false; - - nir_foreach_use_including_if_safe(src, &mov->dest.dest.ssa) { - if (!src->is_if && src->parent_instr->type == nir_instr_type_alu) - progress |= copy_propagate_alu(impl, container_of(src, nir_alu_src, src), mov); - else - progress |= copy_propagate(src, mov); - } - - if (progress && nir_ssa_def_is_unused(&mov->dest.dest.ssa)) - nir_instr_remove(&mov->instr); - - return progress; -} - -bool -nir_copy_prop_impl(nir_function_impl *impl) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - progress |= copy_prop_instr(impl, instr); - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_copy_prop(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && nir_copy_prop_impl(function->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_cse.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_cse.c deleted file mode 100644 index c9b2d5c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_cse.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_instr_set.h" - -/* - * Implements common subexpression elimination - */ - -static bool -dominates(const nir_instr *old_instr, const nir_instr *new_instr) -{ - return nir_block_dominates(old_instr->block, new_instr->block); -} - -static bool -nir_opt_cse_impl(nir_function_impl *impl) -{ - struct set *instr_set = nir_instr_set_create(NULL); - - _mesa_set_resize(instr_set, impl->ssa_alloc); - - nir_metadata_require(impl, nir_metadata_dominance); - - bool progress = false; - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) - progress |= nir_instr_set_add_or_rewrite(instr_set, instr, dominates); - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - nir_instr_set_destroy(instr_set); - return progress; -} - -bool -nir_opt_cse(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_opt_cse_impl(function->impl); - } - - return progress; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dce.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dce.c deleted file mode 100644 index f94173c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dce.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" - -static bool -is_dest_live(const nir_dest *dest, BITSET_WORD *defs_live) -{ - return !dest->is_ssa || BITSET_TEST(defs_live, dest->ssa.index); -} - -static bool -mark_src_live(const nir_src *src, BITSET_WORD *defs_live) -{ - if (src->is_ssa && !BITSET_TEST(defs_live, src->ssa->index)) { - BITSET_SET(defs_live, src->ssa->index); - return true; - } else { - return false; - } -} - -static bool -mark_live_cb(nir_src *src, void *defs_live) -{ - mark_src_live(src, defs_live); - return true; -} - -static bool -is_live(BITSET_WORD *defs_live, nir_instr *instr) -{ - switch (instr->type) { - case nir_instr_type_call: - case nir_instr_type_jump: - return true; - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - return is_dest_live(&alu->dest.dest, defs_live); - } - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - return is_dest_live(&deref->dest, defs_live); - } - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - const nir_intrinsic_info *info = &nir_intrinsic_infos[intrin->intrinsic]; - return !(info->flags & NIR_INTRINSIC_CAN_ELIMINATE) || - (info->has_dest && is_dest_live(&intrin->dest, defs_live)); - } - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - return is_dest_live(&tex->dest, defs_live); - } - case nir_instr_type_phi: { - nir_phi_instr *phi = nir_instr_as_phi(instr); - return is_dest_live(&phi->dest, defs_live); - } - case nir_instr_type_load_const: { - nir_load_const_instr *lc = nir_instr_as_load_const(instr); - return BITSET_TEST(defs_live, lc->def.index); - } - case nir_instr_type_ssa_undef: { - nir_ssa_undef_instr *undef = nir_instr_as_ssa_undef(instr); - return BITSET_TEST(defs_live, undef->def.index); - } - case nir_instr_type_parallel_copy: { - nir_parallel_copy_instr *pc = nir_instr_as_parallel_copy(instr); - nir_foreach_parallel_copy_entry(entry, pc) { - if (is_dest_live(&entry->dest, defs_live)) - return true; - } - return false; - } - default: - unreachable("unexpected instr type"); - } -} - -struct loop_state { - bool header_phis_changed; - nir_block *preheader; -}; - -static bool -dce_block(nir_block *block, BITSET_WORD *defs_live, struct loop_state *loop, - struct exec_list *dead_instrs) -{ - bool progress = false; - bool phis_changed = false; - nir_foreach_instr_reverse_safe(instr, block) { - bool live = is_live(defs_live, instr); - if (live) { - if (instr->type == nir_instr_type_phi) { - nir_foreach_phi_src(src, nir_instr_as_phi(instr)) { - phis_changed |= mark_src_live(&src->src, defs_live) && - src->pred != loop->preheader; - } - } else { - nir_foreach_src(instr, mark_live_cb, defs_live); - } - } - - /* If we're not in a loop, remove it now if it's dead. If we are in a - * loop, leave instructions to be removed later if they're still dead. - */ - if (loop->preheader) { - instr->pass_flags = live; - } else if (!live) { - nir_instr_remove(instr); - exec_list_push_tail(dead_instrs, &instr->node); - progress = true; - } - } - - /* Because blocks are visited in reverse and this stomps header_phis_changed, - * we don't have to check whether the current block is a loop header before - * setting header_phis_changed. - */ - loop->header_phis_changed = phis_changed; - - return progress; -} - -static bool -dce_cf_list(struct exec_list *cf_list, BITSET_WORD *defs_live, - struct loop_state *parent_loop, struct exec_list *dead_instrs) -{ - bool progress = false; - foreach_list_typed_reverse(nir_cf_node, cf_node, node, cf_list) { - switch (cf_node->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(cf_node); - progress |= dce_block(block, defs_live, parent_loop, dead_instrs); - break; - } - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(cf_node); - progress |= dce_cf_list(&nif->else_list, defs_live, parent_loop, dead_instrs); - progress |= dce_cf_list(&nif->then_list, defs_live, parent_loop, dead_instrs); - mark_src_live(&nif->condition, defs_live); - break; - } - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - - struct loop_state inner_state; - inner_state.preheader = nir_cf_node_as_block(nir_cf_node_prev(cf_node)); - inner_state.header_phis_changed = false; - - /* Fast path if the loop has no continues: we can remove instructions - * as we mark the others live. - */ - struct set *predecessors = nir_loop_first_block(loop)->predecessors; - if (predecessors->entries == 1 && - _mesa_set_next_entry(predecessors, NULL)->key == inner_state.preheader) { - progress |= dce_cf_list(&loop->body, defs_live, parent_loop, dead_instrs); - break; - } - - /* Mark instructions as live until there is no more progress. */ - do { - /* dce_cf_list() resets inner_state.header_phis_changed itself, so - * it doesn't have to be done here. - */ - dce_cf_list(&loop->body, defs_live, &inner_state, dead_instrs); - } while (inner_state.header_phis_changed); - - /* We don't know how many times mark_cf_list() will repeat, so - * remove instructions separately. - * - * By checking parent_loop->preheader, we ensure that we only do this - * walk for the outer-most loops so it only happens once. - */ - if (!parent_loop->preheader) { - nir_foreach_block_in_cf_node(block, cf_node) { - nir_foreach_instr_safe(instr, block) { - if (!instr->pass_flags) { - nir_instr_remove(instr); - exec_list_push_tail(dead_instrs, &instr->node); - progress = true; - } - } - } - } - break; - } - case nir_cf_node_function: - unreachable("Invalid cf type"); - } - } - - return progress; -} - -static bool -nir_opt_dce_impl(nir_function_impl *impl) -{ - assert(impl->structured); - - BITSET_WORD *defs_live = rzalloc_array(NULL, BITSET_WORD, - BITSET_WORDS(impl->ssa_alloc)); - - struct exec_list dead_instrs; - exec_list_make_empty(&dead_instrs); - - struct loop_state loop; - loop.preheader = NULL; - bool progress = dce_cf_list(&impl->body, defs_live, &loop, &dead_instrs); - - ralloc_free(defs_live); - - nir_instr_free_list(&dead_instrs); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_dce(nir_shader *shader) -{ - bool progress = false; - nir_foreach_function(function, shader) { - if (function->impl && nir_opt_dce_impl(function->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dead_cf.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dead_cf.c deleted file mode 100644 index 5f394a5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dead_cf.c +++ /dev/null @@ -1,433 +0,0 @@ -/* - * Copyright © 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "nir_control_flow.h" - -/* - * This file implements an optimization that deletes statically - * unreachable/dead code. In NIR, one way this can happen is when an if - * statement has a constant condition: - * - * if (true) { - * ... - * } - * - * We delete the if statement and paste the contents of the always-executed - * branch into the surrounding control flow, possibly removing more code if - * the branch had a jump at the end. - * - * Another way is that control flow can end in a jump so that code after it - * never gets executed. In particular, this can happen after optimizing - * something like: - * - * if (true) { - * ... - * break; - * } - * ... - * - * We also consider the case where both branches of an if end in a jump, e.g.: - * - * if (...) { - * break; - * } else { - * continue; - * } - * ... - * - * Finally, we also handle removing useless loops and ifs, i.e. loops and ifs - * with no side effects and without any definitions that are used - * elsewhere. This case is a little different from the first two in that the - * code is actually run (it just never does anything), but there are similar - * issues with needing to be careful with restarting after deleting the - * cf_node (see dead_cf_list()) so this is a convenient place to remove them. - */ - -static void -remove_after_cf_node(nir_cf_node *node) -{ - nir_cf_node *end = node; - while (!nir_cf_node_is_last(end)) - end = nir_cf_node_next(end); - - nir_cf_list list; - nir_cf_extract(&list, nir_after_cf_node(node), nir_after_cf_node(end)); - nir_cf_delete(&list); -} - -static void -opt_constant_if(nir_if *if_stmt, bool condition) -{ - nir_block *last_block = condition ? nir_if_last_then_block(if_stmt) - : nir_if_last_else_block(if_stmt); - - /* The control flow list we're about to paste in may include a jump at the - * end, and in that case we have to delete the rest of the control flow - * list after the if since it's unreachable and the validator will balk if - * we don't. - */ - - if (nir_block_ends_in_jump(last_block)) { - remove_after_cf_node(&if_stmt->cf_node); - } else { - /* Remove any phi nodes after the if by rewriting uses to point to the - * correct source. - */ - nir_block *after = nir_cf_node_as_block(nir_cf_node_next(&if_stmt->cf_node)); - nir_foreach_instr_safe(instr, after) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_ssa_def *def = NULL; - nir_foreach_phi_src(phi_src, phi) { - if (phi_src->pred != last_block) - continue; - - assert(phi_src->src.is_ssa); - def = phi_src->src.ssa; - } - - assert(def); - assert(phi->dest.is_ssa); - nir_ssa_def_rewrite_uses(&phi->dest.ssa, def); - nir_instr_remove(&phi->instr); - } - } - - /* Finally, actually paste in the then or else branch and delete the if. */ - struct exec_list *cf_list = condition ? &if_stmt->then_list - : &if_stmt->else_list; - - nir_cf_list list; - nir_cf_list_extract(&list, cf_list); - nir_cf_reinsert(&list, nir_after_cf_node(&if_stmt->cf_node)); - nir_cf_node_remove(&if_stmt->cf_node); -} - -static bool -def_only_used_in_cf_node(nir_ssa_def *def, void *_node) -{ - nir_cf_node *node = _node; - assert(node->type == nir_cf_node_loop || node->type == nir_cf_node_if); - - nir_block *before = nir_cf_node_as_block(nir_cf_node_prev(node)); - nir_block *after = nir_cf_node_as_block(nir_cf_node_next(node)); - - nir_foreach_use_including_if(use, def) { - nir_block *block; - - if (use->is_if) - block = nir_cf_node_as_block(nir_cf_node_prev(&use->parent_if->cf_node)); - else - block = use->parent_instr->block; - - /* Because NIR is structured, we can easily determine whether or not a - * value escapes a CF node by looking at the block indices of its uses - * to see if they lie outside the bounds of the CF node. - * - * Note: Normally, the uses of a phi instruction are considered to be - * used in the block that is the predecessor of the phi corresponding to - * that use. If we were computing liveness or something similar, that - * would mean a special case here for phis. However, we're trying here - * to determine if the SSA def ever escapes the loop. If it's used by a - * phi that lives outside the loop then it doesn't matter if the - * corresponding predecessor is inside the loop or not because the value - * can go through the phi into the outside world and escape the loop. - */ - if (block->index <= before->index || block->index >= after->index) - return false; - } - - return true; -} - -/* - * Test if a loop or if node is dead. Such nodes are dead if: - * - * 1) It has no side effects (i.e. intrinsics which could possibly affect the - * state of the program aside from producing an SSA value, indicated by a lack - * of NIR_INTRINSIC_CAN_ELIMINATE). - * - * 2) It has no phi instructions after it, since those indicate values inside - * the node being used after the node. - * - * 3) None of the values defined inside the node is used outside the node, - * i.e. none of the definitions that dominate the node exit are used outside. - * - * If those conditions hold, then the node is dead and can be deleted. - */ - -static bool -node_is_dead(nir_cf_node *node) -{ - assert(node->type == nir_cf_node_loop || node->type == nir_cf_node_if); - - nir_block *after = nir_cf_node_as_block(nir_cf_node_next(node)); - - /* Quick check if there are any phis that follow this CF node. If there - * are, then we automatically know it isn't dead. - */ - if (!exec_list_is_empty(&after->instr_list) && - nir_block_first_instr(after)->type == nir_instr_type_phi) - return false; - - nir_function_impl *impl = nir_cf_node_get_function(node); - nir_metadata_require(impl, nir_metadata_block_index); - - nir_foreach_block_in_cf_node(block, node) { - bool inside_loop = node->type == nir_cf_node_loop; - for (nir_cf_node *n = &block->cf_node; - !inside_loop && n != node; n = n->parent) { - if (n->type == nir_cf_node_loop) - inside_loop = true; - } - - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_call) - return false; - - /* Return and halt instructions can cause us to skip over other - * side-effecting instructions after the loop, so consider them to - * have side effects here. - * - * When the block is not inside a loop, break and continue might also - * cause a skip. - */ - if (instr->type == nir_instr_type_jump && - (!inside_loop || - nir_instr_as_jump(instr)->type == nir_jump_return || - nir_instr_as_jump(instr)->type == nir_jump_halt)) - return false; - - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (!(nir_intrinsic_infos[intrin->intrinsic].flags & - NIR_INTRINSIC_CAN_ELIMINATE)) - return false; - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_global: - /* If there's a memory barrier after the loop, a load might be - * required to happen before some other instruction after the - * barrier, so it is not valid to eliminate it -- unless we - * know we can reorder it. - * - * Consider only loads that the result can be affected by other - * invocations. - */ - if (intrin->intrinsic == nir_intrinsic_load_deref) { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_may_be(deref, nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global | - nir_var_shader_out)) - break; - } - if (nir_intrinsic_access(intrin) & ACCESS_CAN_REORDER) - break; - return false; - - case nir_intrinsic_load_shared: - case nir_intrinsic_load_shared2_amd: - case nir_intrinsic_load_output: - case nir_intrinsic_load_per_vertex_output: - /* Same as above loads. */ - return false; - - default: - /* Do nothing. */ - break; - } - } - - if (!nir_foreach_ssa_def(instr, def_only_used_in_cf_node, node)) - return false; - } - } - - return true; -} - -static bool -dead_cf_block(nir_block *block) -{ - /* opt_constant_if() doesn't handle this case. */ - if (nir_block_ends_in_jump(block) && - !exec_node_is_tail_sentinel(block->cf_node.node.next)) { - remove_after_cf_node(&block->cf_node); - return true; - } - - nir_if *following_if = nir_block_get_following_if(block); - if (following_if) { - if (nir_src_is_const(following_if->condition)) { - opt_constant_if(following_if, nir_src_as_bool(following_if->condition)); - return true; - } - - if (node_is_dead(&following_if->cf_node)) { - nir_cf_node_remove(&following_if->cf_node); - return true; - } - } - - nir_loop *following_loop = nir_block_get_following_loop(block); - if (!following_loop) - return false; - - if (!node_is_dead(&following_loop->cf_node)) - return false; - - nir_cf_node_remove(&following_loop->cf_node); - return true; -} - -static bool -dead_cf_list(struct exec_list *list, bool *list_ends_in_jump) -{ - bool progress = false; - *list_ends_in_jump = false; - - nir_cf_node *prev = NULL; - - foreach_list_typed(nir_cf_node, cur, node, list) { - switch (cur->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(cur); - if (dead_cf_block(block)) { - /* We just deleted the if or loop after this block, so we may have - * deleted the block before or after it -- which one is an - * implementation detail. Therefore, to recover the place we were - * at, we have to use the previous cf_node. - */ - - if (prev) { - cur = nir_cf_node_next(prev); - } else { - cur = exec_node_data(nir_cf_node, exec_list_get_head(list), - node); - } - - block = nir_cf_node_as_block(cur); - - progress = true; - } - - if (nir_block_ends_in_jump(block)) { - assert(exec_node_is_tail_sentinel(cur->node.next)); - *list_ends_in_jump = true; - } - - break; - } - - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(cur); - bool then_ends_in_jump, else_ends_in_jump; - progress |= dead_cf_list(&if_stmt->then_list, &then_ends_in_jump); - progress |= dead_cf_list(&if_stmt->else_list, &else_ends_in_jump); - - if (then_ends_in_jump && else_ends_in_jump) { - *list_ends_in_jump = true; - nir_block *next = nir_cf_node_as_block(nir_cf_node_next(cur)); - if (!exec_list_is_empty(&next->instr_list) || - !exec_node_is_tail_sentinel(next->cf_node.node.next)) { - remove_after_cf_node(cur); - return true; - } - } - - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cur); - assert(!nir_loop_has_continue_construct(loop)); - bool dummy; - progress |= dead_cf_list(&loop->body, &dummy); - - nir_block *next = nir_cf_node_as_block(nir_cf_node_next(cur)); - if (next->predecessors->entries == 0 && - (!exec_list_is_empty(&next->instr_list) || - !exec_node_is_tail_sentinel(next->cf_node.node.next))) { - remove_after_cf_node(cur); - return true; - } - break; - } - - default: - unreachable("unknown cf node type"); - } - - prev = cur; - } - - return progress; -} - -static bool -opt_dead_cf_impl(nir_function_impl *impl) -{ - bool dummy; - bool progress = dead_cf_list(&impl->body, &dummy); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_none); - - /* The CF manipulation code called by this pass is smart enough to keep - * from breaking any SSA use/def chains by replacing any uses of removed - * instructions with SSA undefs. However, it's not quite smart enough - * to always preserve the dominance properties. In particular, if you - * remove the one break from a loop, stuff in the loop may still be used - * outside the loop even though there's no path between the two. We can - * easily fix these issues by calling nir_repair_ssa which will ensure - * that the dominance properties hold. - */ - nir_repair_ssa_impl(impl); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_dead_cf(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) - if (function->impl) - progress |= opt_dead_cf_impl(function->impl); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dead_write_vars.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dead_write_vars.c deleted file mode 100644 index dc710b3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_dead_write_vars.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -#include "../../util/u_dynarray.h" - -/** - * Elimination of dead writes based on derefs. - * - * Dead writes are stores and copies that write to a deref, which then gets - * another write before it was used (read or sourced for a copy). Those - * writes can be removed since they don't affect anything. - * - * For derefs that refer to a memory area that can be read after the program, - * the last write is considered used. The presence of certain instructions - * may also cause writes to be considered used, e.g. memory barrier (in this case - * the value must be written as other thread might use it). - * - * The write mask for store instructions is considered, so it is possible that - * a store is removed because of the combination of other stores overwritten - * its value. - */ - -/* Entry for unused_writes arrays. */ -struct write_entry { - /* If NULL indicates the entry is free to be reused. */ - nir_intrinsic_instr *intrin; - nir_component_mask_t mask; - nir_deref_instr *dst; -}; - -static void -clear_unused_for_modes(struct util_dynarray *unused_writes, nir_variable_mode modes) -{ - util_dynarray_foreach_reverse(unused_writes, struct write_entry, entry) { - if (nir_deref_mode_may_be(entry->dst, modes)) - *entry = util_dynarray_pop(unused_writes, struct write_entry); - } -} - -static void -clear_unused_for_read(struct util_dynarray *unused_writes, nir_deref_instr *src) -{ - util_dynarray_foreach_reverse(unused_writes, struct write_entry, entry) { - if (nir_compare_derefs(src, entry->dst) & nir_derefs_may_alias_bit) - *entry = util_dynarray_pop(unused_writes, struct write_entry); - } -} - -static bool -update_unused_writes(struct util_dynarray *unused_writes, - nir_intrinsic_instr *intrin, - nir_deref_instr *dst, nir_component_mask_t mask) -{ - bool progress = false; - - /* This pass assumes that destination of copies and stores are derefs that - * end in a vector or scalar (it is OK to have wildcards or indirects for - * arrays). - */ - assert(glsl_type_is_vector_or_scalar(dst->type)); - - /* Find writes that are unused and can be removed. */ - util_dynarray_foreach_reverse(unused_writes, struct write_entry, entry) { - nir_deref_compare_result comp = nir_compare_derefs(dst, entry->dst); - if (comp & nir_derefs_a_contains_b_bit) { - entry->mask &= ~mask; - if (entry->mask == 0) { - nir_instr_remove(&entry->intrin->instr); - *entry = util_dynarray_pop(unused_writes, struct write_entry); - progress = true; - } - } - } - - /* Add the new write to the unused array. */ - struct write_entry new_entry = { - .intrin = intrin, - .mask = mask, - .dst = dst, - }; - - util_dynarray_append(unused_writes, struct write_entry, new_entry); - - return progress; -} - -static bool -remove_dead_write_vars_local(void *mem_ctx, nir_shader *shader, nir_block *block) -{ - bool progress = false; - - struct util_dynarray unused_writes; - util_dynarray_init(&unused_writes, mem_ctx); - - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_call) { - clear_unused_for_modes(&unused_writes, nir_var_shader_out | - nir_var_shader_temp | - nir_var_function_temp | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global); - continue; - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_control_barrier: - case nir_intrinsic_group_memory_barrier: - case nir_intrinsic_memory_barrier: { - clear_unused_for_modes(&unused_writes, nir_var_shader_out | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global); - break; - } - - case nir_intrinsic_memory_barrier_buffer: - clear_unused_for_modes(&unused_writes, nir_var_mem_ssbo | - nir_var_mem_global); - break; - - case nir_intrinsic_memory_barrier_shared: - clear_unused_for_modes(&unused_writes, nir_var_mem_shared); - break; - - case nir_intrinsic_memory_barrier_tcs_patch: - clear_unused_for_modes(&unused_writes, nir_var_shader_out); - break; - - case nir_intrinsic_scoped_barrier: { - if (nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_RELEASE) { - clear_unused_for_modes(&unused_writes, - nir_intrinsic_memory_modes(intrin)); - } - break; - } - - case nir_intrinsic_emit_vertex: - case nir_intrinsic_emit_vertex_with_counter: { - clear_unused_for_modes(&unused_writes, nir_var_shader_out); - break; - } - - case nir_intrinsic_execute_callable: - case nir_intrinsic_rt_execute_callable: { - /* Mark payload as it can be used by the callee */ - nir_deref_instr *src = nir_src_as_deref(intrin->src[1]); - clear_unused_for_read(&unused_writes, src); - break; - } - - case nir_intrinsic_trace_ray: - case nir_intrinsic_rt_trace_ray: { - /* Mark payload as it can be used by the callees */ - nir_deref_instr *src = nir_src_as_deref(intrin->src[10]); - clear_unused_for_read(&unused_writes, src); - break; - } - - case nir_intrinsic_load_deref: { - nir_deref_instr *src = nir_src_as_deref(intrin->src[0]); - if (nir_deref_mode_must_be(src, nir_var_read_only_modes)) - break; - clear_unused_for_read(&unused_writes, src); - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - - if (nir_intrinsic_access(intrin) & ACCESS_VOLATILE) { - /* Consider a volatile write to also be a sort of read. This - * prevents us from deleting a non-volatile write just before a - * volatile write thanks to a non-volatile write afterwards. It's - * quite the corner case, but this should be safer and more - * predictable for the programmer than allowing two non-volatile - * writes to be combined with a volatile write between them. - */ - clear_unused_for_read(&unused_writes, dst); - break; - } - - nir_component_mask_t mask = nir_intrinsic_write_mask(intrin); - progress |= update_unused_writes(&unused_writes, intrin, dst, mask); - break; - } - - case nir_intrinsic_copy_deref: { - nir_deref_instr *src = nir_src_as_deref(intrin->src[1]); - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - - if (nir_intrinsic_dst_access(intrin) & ACCESS_VOLATILE) { - clear_unused_for_read(&unused_writes, src); - clear_unused_for_read(&unused_writes, dst); - break; - } - - /* Self-copy is removed. */ - if (nir_compare_derefs(src, dst) & nir_derefs_equal_bit) { - nir_instr_remove(instr); - progress = true; - break; - } - - clear_unused_for_read(&unused_writes, src); - nir_component_mask_t mask = (1 << glsl_get_vector_elements(dst->type)) - 1; - progress |= update_unused_writes(&unused_writes, intrin, dst, mask); - break; - } - - default: - break; - } - } - - /* All unused writes at the end of the block are kept, since we can't be - * sure they'll be overwritten or not with local analysis only. - */ - - return progress; -} - -static bool -remove_dead_write_vars_impl(void *mem_ctx, nir_shader *shader, nir_function_impl *impl) -{ - bool progress = false; - - nir_metadata_require(impl, nir_metadata_block_index); - - nir_foreach_block(block, impl) - progress |= remove_dead_write_vars_local(mem_ctx, shader, block); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_dead_write_vars(nir_shader *shader) -{ - void *mem_ctx = ralloc_context(NULL); - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - progress |= remove_dead_write_vars_impl(mem_ctx, shader, function->impl); - } - - ralloc_free(mem_ctx); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_find_array_copies.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_find_array_copies.c deleted file mode 100644 index ff6ca95..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_find_array_copies.c +++ /dev/null @@ -1,685 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -struct match_node { - /* Note: these fields are only valid for leaf nodes */ - - unsigned next_array_idx; - int src_wildcard_idx; - nir_deref_path first_src_path; - - /* The index of the first read of the source path that's part of the copy - * we're matching. If the last write to the source path is after this, we - * would get a different result from reading it at the end and we can't - * emit the copy. - */ - unsigned first_src_read; - - /* The last time there was a write to this node. */ - unsigned last_overwritten; - - /* The last time there was a write to this node which successfully advanced - * next_array_idx. This helps us catch any intervening aliased writes. - */ - unsigned last_successful_write; - - unsigned num_children; - struct match_node *children[]; -}; - -struct match_state { - /* Map from nir_variable * -> match_node */ - struct hash_table *var_nodes; - /* Map from cast nir_deref_instr * -> match_node */ - struct hash_table *cast_nodes; - - unsigned cur_instr; - - nir_builder builder; - - void *dead_ctx; -}; - -static struct match_node * -create_match_node(const struct glsl_type *type, struct match_state *state) -{ - unsigned num_children = 0; - if (glsl_type_is_array_or_matrix(type)) { - /* One for wildcards */ - num_children = glsl_get_length(type) + 1; - } else if (glsl_type_is_struct_or_ifc(type)) { - num_children = glsl_get_length(type); - } - - struct match_node *node = rzalloc_size(state->dead_ctx, - sizeof(struct match_node) + - num_children * sizeof(struct match_node *)); - node->num_children = num_children; - node->src_wildcard_idx = -1; - node->first_src_read = UINT32_MAX; - return node; -} - -static struct match_node * -node_for_deref(nir_deref_instr *instr, struct match_node *parent, - struct match_state *state) -{ - unsigned idx; - switch (instr->deref_type) { - case nir_deref_type_var: { - struct hash_entry *entry = - _mesa_hash_table_search(state->var_nodes, instr->var); - if (entry) { - return entry->data; - } else { - struct match_node *node = create_match_node(instr->type, state); - _mesa_hash_table_insert(state->var_nodes, instr->var, node); - return node; - } - } - - case nir_deref_type_cast: { - struct hash_entry *entry = - _mesa_hash_table_search(state->cast_nodes, instr); - if (entry) { - return entry->data; - } else { - struct match_node *node = create_match_node(instr->type, state); - _mesa_hash_table_insert(state->cast_nodes, instr, node); - return node; - } - } - - case nir_deref_type_array_wildcard: - idx = parent->num_children - 1; - break; - - case nir_deref_type_array: - if (nir_src_is_const(instr->arr.index)) { - idx = nir_src_as_uint(instr->arr.index); - assert(idx < parent->num_children - 1); - } else { - idx = parent->num_children - 1; - } - break; - - case nir_deref_type_struct: - idx = instr->strct.index; - break; - - default: - unreachable("bad deref type"); - } - - assert(idx < parent->num_children); - if (parent->children[idx]) { - return parent->children[idx]; - } else { - struct match_node *node = create_match_node(instr->type, state); - parent->children[idx] = node; - return node; - } -} - -static struct match_node * -node_for_wildcard(const struct glsl_type *type, struct match_node *parent, - struct match_state *state) -{ - assert(glsl_type_is_array_or_matrix(type)); - unsigned idx = glsl_get_length(type); - - if (parent->children[idx]) { - return parent->children[idx]; - } else { - struct match_node *node = - create_match_node(glsl_get_array_element(type), state); - parent->children[idx] = node; - return node; - } -} - -static struct match_node * -node_for_path(nir_deref_path *path, struct match_state *state) -{ - struct match_node *node = NULL; - for (nir_deref_instr **instr = path->path; *instr; instr++) - node = node_for_deref(*instr, node, state); - - return node; -} - -static struct match_node * -node_for_path_with_wildcard(nir_deref_path *path, unsigned wildcard_idx, - struct match_state *state) -{ - struct match_node *node = NULL; - unsigned idx = 0; - for (nir_deref_instr **instr = path->path; *instr; instr++, idx++) { - if (idx == wildcard_idx) - node = node_for_wildcard((*(instr - 1))->type, node, state); - else - node = node_for_deref(*instr, node, state); - } - - return node; -} - -typedef void (*match_cb)(struct match_node *, struct match_state *); - -static void -_foreach_child(match_cb cb, struct match_node *node, struct match_state *state) -{ - if (node->num_children == 0) { - cb(node, state); - } else { - for (unsigned i = 0; i < node->num_children; i++) { - if (node->children[i]) - _foreach_child(cb, node->children[i], state); - } - } -} - -static void -_foreach_aliasing(nir_deref_instr **deref, match_cb cb, - struct match_node *node, struct match_state *state) -{ - if (*deref == NULL) { - cb(node, state); - return; - } - - switch ((*deref)->deref_type) { - case nir_deref_type_struct: { - struct match_node *child = node->children[(*deref)->strct.index]; - if (child) - _foreach_aliasing(deref + 1, cb, child, state); - return; - } - - case nir_deref_type_array: - case nir_deref_type_array_wildcard: { - if ((*deref)->deref_type == nir_deref_type_array_wildcard || - !nir_src_is_const((*deref)->arr.index)) { - /* This access may touch any index, so we have to visit all of - * them. - */ - for (unsigned i = 0; i < node->num_children; i++) { - if (node->children[i]) - _foreach_aliasing(deref + 1, cb, node->children[i], state); - } - } else { - /* Visit the wildcard entry if any */ - if (node->children[node->num_children - 1]) { - _foreach_aliasing(deref + 1, cb, - node->children[node->num_children - 1], state); - } - - unsigned index = nir_src_as_uint((*deref)->arr.index); - /* Check that the index is in-bounds */ - if (index < node->num_children - 1 && node->children[index]) - _foreach_aliasing(deref + 1, cb, node->children[index], state); - } - return; - } - - case nir_deref_type_cast: - _foreach_child(cb, node, state); - return; - - default: - unreachable("bad deref type"); - } -} - -/* Given a deref path, find all the leaf deref nodes that alias it. */ - -static void -foreach_aliasing_node(nir_deref_path *path, - match_cb cb, - struct match_state *state) -{ - if (path->path[0]->deref_type == nir_deref_type_var) { - struct hash_entry *entry = _mesa_hash_table_search(state->var_nodes, - path->path[0]->var); - if (entry) - _foreach_aliasing(&path->path[1], cb, entry->data, state); - - hash_table_foreach(state->cast_nodes, entry) - _foreach_child(cb, entry->data, state); - } else { - /* Casts automatically alias anything that isn't a cast */ - assert(path->path[0]->deref_type == nir_deref_type_cast); - hash_table_foreach(state->var_nodes, entry) - _foreach_child(cb, entry->data, state); - - /* Casts alias other casts if the casts are different or if they're the - * same and the path from the cast may alias as per the usual rules. - */ - hash_table_foreach(state->cast_nodes, entry) { - const nir_deref_instr *cast = entry->key; - assert(cast->deref_type == nir_deref_type_cast); - if (cast == path->path[0]) - _foreach_aliasing(&path->path[1], cb, entry->data, state); - else - _foreach_child(cb, entry->data, state); - } - } -} - -static nir_deref_instr * -build_wildcard_deref(nir_builder *b, nir_deref_path *path, - unsigned wildcard_idx) -{ - assert(path->path[wildcard_idx]->deref_type == nir_deref_type_array); - - nir_deref_instr *tail = - nir_build_deref_array_wildcard(b, path->path[wildcard_idx - 1]); - - for (unsigned i = wildcard_idx + 1; path->path[i]; i++) - tail = nir_build_deref_follower(b, tail, path->path[i]); - - return tail; -} - -static void -clobber(struct match_node *node, struct match_state *state) -{ - node->last_overwritten = state->cur_instr; -} - -static bool -try_match_deref(nir_deref_path *base_path, int *path_array_idx, - nir_deref_path *deref_path, int arr_idx, - nir_deref_instr *dst) -{ - for (int i = 0; ; i++) { - nir_deref_instr *b = base_path->path[i]; - nir_deref_instr *d = deref_path->path[i]; - /* They have to be the same length */ - if ((b == NULL) != (d == NULL)) - return false; - - if (b == NULL) - break; - - /* This can happen if one is a deref_array and the other a wildcard */ - if (b->deref_type != d->deref_type) - return false;; - - switch (b->deref_type) { - case nir_deref_type_var: - if (b->var != d->var) - return false; - continue; - - case nir_deref_type_array: - assert(b->arr.index.is_ssa && d->arr.index.is_ssa); - const bool const_b_idx = nir_src_is_const(b->arr.index); - const bool const_d_idx = nir_src_is_const(d->arr.index); - const unsigned b_idx = const_b_idx ? nir_src_as_uint(b->arr.index) : 0; - const unsigned d_idx = const_d_idx ? nir_src_as_uint(d->arr.index) : 0; - - /* If we don't have an index into the path yet or if this entry in - * the path is at the array index, see if this is a candidate. We're - * looking for an index which is zero in the base deref and arr_idx - * in the search deref and has a matching array size. - */ - if ((*path_array_idx < 0 || *path_array_idx == i) && - const_b_idx && b_idx == 0 && - const_d_idx && d_idx == arr_idx && - glsl_get_length(nir_deref_instr_parent(b)->type) == - glsl_get_length(nir_deref_instr_parent(dst)->type)) { - *path_array_idx = i; - continue; - } - - /* We're at the array index but not a candidate */ - if (*path_array_idx == i) - return false; - - /* If we're not the path array index, we must match exactly. We - * could probably just compare SSA values and trust in copy - * propagation but doing it ourselves means this pass can run a bit - * earlier. - */ - if (b->arr.index.ssa == d->arr.index.ssa || - (const_b_idx && const_d_idx && b_idx == d_idx)) - continue; - - return false; - - case nir_deref_type_array_wildcard: - continue; - - case nir_deref_type_struct: - if (b->strct.index != d->strct.index) - return false; - continue; - - default: - unreachable("Invalid deref type in a path"); - } - } - - /* If we got here without failing, we've matched. However, it isn't an - * array match unless we found an altered array index. - */ - return *path_array_idx > 0; -} - -static void -handle_read(nir_deref_instr *src, struct match_state *state) -{ - /* We only need to create an entry for sources that might be used to form - * an array copy. Hence no indirects or indexing into a vector. - */ - if (nir_deref_instr_has_indirect(src) || - nir_deref_instr_is_known_out_of_bounds(src) || - (src->deref_type == nir_deref_type_array && - glsl_type_is_vector(nir_src_as_deref(src->parent)->type))) - return; - - nir_deref_path src_path; - nir_deref_path_init(&src_path, src, state->dead_ctx); - - /* Create a node for this source if it doesn't exist. The point of this is - * to know which nodes aliasing a given store we actually need to care - * about, to avoid creating an excessive amount of nodes. - */ - node_for_path(&src_path, state); -} - -/* The core implementation, which is used for both copies and writes. Return - * true if a copy is created. - */ -static bool -handle_write(nir_deref_instr *dst, nir_deref_instr *src, - unsigned write_index, unsigned read_index, - struct match_state *state) -{ - nir_builder *b = &state->builder; - - nir_deref_path dst_path; - nir_deref_path_init(&dst_path, dst, state->dead_ctx); - - unsigned idx = 0; - for (nir_deref_instr **instr = dst_path.path; *instr; instr++, idx++) { - if ((*instr)->deref_type != nir_deref_type_array) - continue; - - /* Get the entry where the index is replaced by a wildcard, so that we - * hopefully can keep matching an array copy. - */ - struct match_node *dst_node = - node_for_path_with_wildcard(&dst_path, idx, state); - - if (!src) - goto reset; - - if (nir_src_as_uint((*instr)->arr.index) != dst_node->next_array_idx) - goto reset; - - if (dst_node->next_array_idx == 0) { - /* At this point there may be multiple source indices which are zero, - * so we can't pin down the actual source index. Just store it and - * move on. - */ - nir_deref_path_init(&dst_node->first_src_path, src, state->dead_ctx); - } else { - nir_deref_path src_path; - nir_deref_path_init(&src_path, src, state->dead_ctx); - bool result = try_match_deref(&dst_node->first_src_path, - &dst_node->src_wildcard_idx, - &src_path, dst_node->next_array_idx, - *instr); - nir_deref_path_finish(&src_path); - if (!result) - goto reset; - } - - /* Check if an aliasing write clobbered the array after the last normal - * write. For example, with a sequence like this: - * - * dst[0][*] = src[0][*]; - * dst[0][0] = 0; // invalidates the array copy dst[*][*] = src[*][*] - * dst[1][*] = src[1][*]; - * - * Note that the second write wouldn't reset the entry for dst[*][*] - * by itself, but it'll be caught by this check when processing the - * third copy. - */ - if (dst_node->last_successful_write < dst_node->last_overwritten) - goto reset; - - dst_node->last_successful_write = write_index; - - /* In this case we've successfully processed an array element. Check if - * this is the last, so that we can emit an array copy. - */ - dst_node->next_array_idx++; - dst_node->first_src_read = MIN2(dst_node->first_src_read, read_index); - if (dst_node->next_array_idx > 1 && - dst_node->next_array_idx == glsl_get_length((*(instr - 1))->type)) { - /* Make sure that nothing was overwritten. */ - struct match_node *src_node = - node_for_path_with_wildcard(&dst_node->first_src_path, - dst_node->src_wildcard_idx, - state); - - if (src_node->last_overwritten <= dst_node->first_src_read) { - nir_copy_deref(b, build_wildcard_deref(b, &dst_path, idx), - build_wildcard_deref(b, &dst_node->first_src_path, - dst_node->src_wildcard_idx)); - foreach_aliasing_node(&dst_path, clobber, state); - return true; - } - } else { - continue; - } - -reset: - dst_node->next_array_idx = 0; - dst_node->src_wildcard_idx = -1; - dst_node->last_successful_write = 0; - dst_node->first_src_read = UINT32_MAX; - } - - /* Mark everything aliasing dst_path as clobbered. This needs to happen - * last since in the loop above we need to know what last clobbered - * dst_node and this overwrites that. - */ - foreach_aliasing_node(&dst_path, clobber, state); - - return false; -} - -static bool -opt_find_array_copies_block(nir_builder *b, nir_block *block, - struct match_state *state) -{ - bool progress = false; - - unsigned next_index = 0; - - _mesa_hash_table_clear(state->var_nodes, NULL); - _mesa_hash_table_clear(state->cast_nodes, NULL); - - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - /* Index the instructions before we do anything else. */ - instr->index = next_index++; - - /* Save the index of this instruction */ - state->cur_instr = instr->index; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - if (intrin->intrinsic == nir_intrinsic_load_deref) { - handle_read(nir_src_as_deref(intrin->src[0]), state); - continue; - } - - if (intrin->intrinsic != nir_intrinsic_copy_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *dst_deref = nir_src_as_deref(intrin->src[0]); - - /* The destination must be local. If we see a non-local store, we - * continue on because it won't affect local stores or read-only - * variables. - */ - if (!nir_deref_mode_may_be(dst_deref, nir_var_function_temp)) - continue; - - if (!nir_deref_mode_must_be(dst_deref, nir_var_function_temp)) { - /* This only happens if we have something that might be a local store - * but we don't know. In this case, clear everything. - */ - nir_deref_path dst_path; - nir_deref_path_init(&dst_path, dst_deref, state->dead_ctx); - foreach_aliasing_node(&dst_path, clobber, state); - continue; - } - - /* If there are any known out-of-bounds writes, then we can just skip - * this write as it's undefined and won't contribute to building up an - * array copy anyways. - */ - if (nir_deref_instr_is_known_out_of_bounds(dst_deref)) - continue; - - nir_deref_instr *src_deref; - unsigned load_index = 0; - if (intrin->intrinsic == nir_intrinsic_copy_deref) { - src_deref = nir_src_as_deref(intrin->src[1]); - load_index = intrin->instr.index; - } else { - assert(intrin->intrinsic == nir_intrinsic_store_deref); - nir_intrinsic_instr *load = nir_src_as_intrinsic(intrin->src[1]); - if (load == NULL || load->intrinsic != nir_intrinsic_load_deref) { - src_deref = NULL; - } else { - src_deref = nir_src_as_deref(load->src[0]); - load_index = load->instr.index; - } - - if (nir_intrinsic_write_mask(intrin) != - (1 << glsl_get_components(dst_deref->type)) - 1) { - src_deref = NULL; - } - } - - /* The source must be either local or something that's guaranteed to be - * read-only. - */ - if (src_deref && - !nir_deref_mode_must_be(src_deref, nir_var_function_temp | - nir_var_read_only_modes)) { - src_deref = NULL; - } - - /* There must be no indirects in the source or destination and no known - * out-of-bounds accesses in the source, and the copy must be fully - * qualified, or else we can't build up the array copy. We handled - * out-of-bounds accesses to the dest above. The types must match, since - * copy_deref currently can't bitcast mismatched deref types. - */ - if (src_deref && - (nir_deref_instr_has_indirect(src_deref) || - nir_deref_instr_is_known_out_of_bounds(src_deref) || - nir_deref_instr_has_indirect(dst_deref) || - !glsl_type_is_vector_or_scalar(src_deref->type) || - glsl_get_bare_type(src_deref->type) != - glsl_get_bare_type(dst_deref->type))) { - src_deref = NULL; - } - - state->builder.cursor = nir_after_instr(instr); - progress |= handle_write(dst_deref, src_deref, instr->index, - load_index, state); - } - - return progress; -} - -static bool -opt_find_array_copies_impl(nir_function_impl *impl) -{ - nir_builder b; - nir_builder_init(&b, impl); - - bool progress = false; - - struct match_state s; - s.dead_ctx = ralloc_context(NULL); - s.var_nodes = _mesa_pointer_hash_table_create(s.dead_ctx); - s.cast_nodes = _mesa_pointer_hash_table_create(s.dead_ctx); - nir_builder_init(&s.builder, impl); - - nir_foreach_block(block, impl) { - if (opt_find_array_copies_block(&b, block, &s)) - progress = true; - } - - ralloc_free(s.dead_ctx); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -/** - * This peephole optimization looks for a series of load/store_deref or - * copy_deref instructions that copy an array from one variable to another and - * turns it into a copy_deref that copies the entire array. The pattern it - * looks for is extremely specific but it's good enough to pick up on the - * input array copies in DXVK and should also be able to pick up the sequence - * generated by spirv_to_nir for a OpLoad of a large composite followed by - * OpStore. - * - * TODO: Support out-of-order copies. - */ -bool -nir_opt_find_array_copies(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && opt_find_array_copies_impl(function->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_fragdepth.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_fragdepth.c deleted file mode 100644 index fc0c22c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_fragdepth.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright © 2021 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** - * This pass removes no-op assignment to gl_FragDepth. - * - * gl_FragDepth implicit value is gl_FragCoord.z, so if a shader only assign - * this value to gl_FragDepth, the store instruction is removed. - */ - -static bool -ssa_def_is_source_depth(nir_ssa_def *def) -{ - nir_ssa_scalar scalar = nir_ssa_scalar_resolved(def, 0); - nir_instr *instr = scalar.def->parent_instr; - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_frag_coord) - return false; - - /* Depth is gl_FragCoord.z */ - return scalar.comp == 2; -} - -bool -nir_opt_fragdepth(nir_shader *shader) -{ - bool progress = false; - nir_intrinsic_instr *store_intrin = NULL; - - if (shader->info.stage != MESA_SHADER_FRAGMENT) - goto end; - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_shader_out)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var->data.location != FRAG_RESULT_DEPTH) - continue; - - /* We found a write to gl_FragDepth */ - if (store_intrin) { - /* This isn't the only write: give up on this optimization */ - goto end; - } else { - if (ssa_def_is_source_depth(intrin->src[1].ssa)) { - /* We're writing gl_FragCoord.z in gl_FragDepth: remember - * intrin so we can try to remove it later. */ - store_intrin = intrin; - } else { - /* We're writing something else: give up. */ - goto end; - } - } - } - } - - if (store_intrin) { - /* Found a single store to gl_FragDepth, and it writes gl_FragCoord.z to it. - * Remove it since that's the implicit value of gl_FragDepth. - */ - nir_instr_remove(&store_intrin->instr); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_loop_analysis | - nir_metadata_instr_index); - progress = true; - } - -end: - if (!progress) - nir_shader_preserve_all_metadata(shader); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_gcm.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_gcm.c deleted file mode 100644 index c175a28..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_gcm.c +++ /dev/null @@ -1,887 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_instr_set.h" - -/* - * Implements Global Code Motion. A description of GCM can be found in - * "Global Code Motion; Global Value Numbering" by Cliff Click. - * Unfortunately, the algorithm presented in the paper is broken in a - * number of ways. The algorithm used here differs substantially from the - * one in the paper but it is, in my opinion, much easier to read and - * verify correcness. - */ - -/* This is used to stop GCM moving instruction out of a loop if the loop - * contains too many instructions and moving them would create excess spilling. - * - * TODO: Figure out a better way to decide if we should remove instructions from - * a loop. - */ -#define MAX_LOOP_INSTRUCTIONS 100 - -struct gcm_block_info { - /* Number of loops this block is inside */ - unsigned loop_depth; - - /* Number of ifs this block is inside */ - unsigned if_depth; - - unsigned loop_instr_count; - - /* The loop the block is nested inside or NULL */ - nir_loop *loop; - - /* The last instruction inserted into this block. This is used as we - * traverse the instructions and insert them back into the program to - * put them in the right order. - */ - nir_instr *last_instr; -}; - -struct gcm_instr_info { - nir_block *early_block; -}; - -/* Flags used in the instr->pass_flags field for various instruction states */ -enum { - GCM_INSTR_PINNED = (1 << 0), - GCM_INSTR_SCHEDULE_EARLIER_ONLY = (1 << 1), - GCM_INSTR_SCHEDULED_EARLY = (1 << 2), - GCM_INSTR_SCHEDULED_LATE = (1 << 3), - GCM_INSTR_PLACED = (1 << 4), -}; - -struct gcm_state { - nir_function_impl *impl; - nir_instr *instr; - - bool progress; - - /* The list of non-pinned instructions. As we do the late scheduling, - * we pull non-pinned instructions out of their blocks and place them in - * this list. This saves us from having linked-list problems when we go - * to put instructions back in their blocks. - */ - struct exec_list instrs; - - struct gcm_block_info *blocks; - - unsigned num_instrs; - struct gcm_instr_info *instr_infos; -}; - -static unsigned -get_loop_instr_count(struct exec_list *cf_list) -{ - unsigned loop_instr_count = 0; - foreach_list_typed(nir_cf_node, node, node, cf_list) { - switch (node->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(node); - nir_foreach_instr(instr, block) { - loop_instr_count++; - } - break; - } - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(node); - loop_instr_count += get_loop_instr_count(&if_stmt->then_list); - loop_instr_count += get_loop_instr_count(&if_stmt->else_list); - break; - } - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - assert(!nir_loop_has_continue_construct(loop)); - loop_instr_count += get_loop_instr_count(&loop->body); - break; - } - default: - unreachable("Invalid CF node type"); - } - } - - return loop_instr_count; -} - -/* Recursively walks the CFG and builds the block_info structure */ -static void -gcm_build_block_info(struct exec_list *cf_list, struct gcm_state *state, - nir_loop *loop, unsigned loop_depth, unsigned if_depth, - unsigned loop_instr_count) -{ - foreach_list_typed(nir_cf_node, node, node, cf_list) { - switch (node->type) { - case nir_cf_node_block: { - nir_block *block = nir_cf_node_as_block(node); - state->blocks[block->index].if_depth = if_depth; - state->blocks[block->index].loop_depth = loop_depth; - state->blocks[block->index].loop_instr_count = loop_instr_count; - state->blocks[block->index].loop = loop; - break; - } - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(node); - gcm_build_block_info(&if_stmt->then_list, state, loop, loop_depth, - if_depth + 1, ~0u); - gcm_build_block_info(&if_stmt->else_list, state, loop, loop_depth, - if_depth + 1, ~0u); - break; - } - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(node); - assert(!nir_loop_has_continue_construct(loop)); - gcm_build_block_info(&loop->body, state, loop, loop_depth + 1, if_depth, - get_loop_instr_count(&loop->body)); - break; - } - default: - unreachable("Invalid CF node type"); - } - } -} - -static bool -is_src_scalarizable(nir_src *src) -{ - assert(src->is_ssa); - - nir_instr *src_instr = src->ssa->parent_instr; - switch (src_instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *src_alu = nir_instr_as_alu(src_instr); - - /* ALU operations with output_size == 0 should be scalarized. We - * will also see a bunch of vecN operations from scalarizing ALU - * operations and, since they can easily be copy-propagated, they - * are ok too. - */ - return nir_op_infos[src_alu->op].output_size == 0 || - src_alu->op == nir_op_vec2 || - src_alu->op == nir_op_vec3 || - src_alu->op == nir_op_vec4; - } - - case nir_instr_type_load_const: - /* These are trivially scalarizable */ - return true; - - case nir_instr_type_ssa_undef: - return true; - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *src_intrin = nir_instr_as_intrinsic(src_instr); - - switch (src_intrin->intrinsic) { - case nir_intrinsic_load_deref: { - /* Don't scalarize if we see a load of a local variable because it - * might turn into one of the things we can't scalarize. - */ - nir_deref_instr *deref = nir_src_as_deref(src_intrin->src[0]); - return !nir_deref_mode_may_be(deref, (nir_var_function_temp | - nir_var_shader_temp)); - } - - case nir_intrinsic_interp_deref_at_centroid: - case nir_intrinsic_interp_deref_at_sample: - case nir_intrinsic_interp_deref_at_offset: - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_global: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_input: - return true; - default: - break; - } - - return false; - } - - default: - /* We can't scalarize this type of instruction */ - return false; - } -} - -static bool -is_binding_uniform(nir_src src) -{ - nir_binding binding = nir_chase_binding(src); - if (!binding.success) - return false; - - for (unsigned i = 0; i < binding.num_indices; i++) { - if (!nir_src_is_always_uniform(binding.indices[i])) - return false; - } - - return true; -} - -static void -pin_intrinsic(nir_intrinsic_instr *intrin) -{ - nir_instr *instr = &intrin->instr; - - if (!nir_intrinsic_can_reorder(intrin)) { - instr->pass_flags = GCM_INSTR_PINNED; - return; - } - - instr->pass_flags = 0; - - /* If the intrinsic requires a uniform source, we can't safely move it across non-uniform - * control flow if it's not uniform at the point it's defined. - * Stores and atomics can never be re-ordered, so we don't have to consider them here. - */ - bool non_uniform = nir_intrinsic_has_access(intrin) && - (nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM); - if (!non_uniform && - (intrin->intrinsic == nir_intrinsic_load_ubo || - intrin->intrinsic == nir_intrinsic_load_ssbo || - intrin->intrinsic == nir_intrinsic_get_ubo_size || - intrin->intrinsic == nir_intrinsic_get_ssbo_size || - nir_intrinsic_has_image_dim(intrin) || - ((intrin->intrinsic == nir_intrinsic_load_deref || - intrin->intrinsic == nir_intrinsic_deref_buffer_array_length) && - nir_deref_mode_may_be(nir_src_as_deref(intrin->src[0]), - nir_var_mem_ubo | nir_var_mem_ssbo)))) { - if (!is_binding_uniform(intrin->src[0])) - instr->pass_flags = GCM_INSTR_PINNED; - } else if (intrin->intrinsic == nir_intrinsic_load_push_constant) { - if (!nir_src_is_always_uniform(intrin->src[0])) - instr->pass_flags = GCM_INSTR_PINNED; - } else if (intrin->intrinsic == nir_intrinsic_load_deref && - nir_deref_mode_is(nir_src_as_deref(intrin->src[0]), - nir_var_mem_push_const)) { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - while (deref->deref_type != nir_deref_type_var) { - if ((deref->deref_type == nir_deref_type_array || - deref->deref_type == nir_deref_type_ptr_as_array) && - !nir_src_is_always_uniform(deref->arr.index)) { - instr->pass_flags = GCM_INSTR_PINNED; - return; - } - deref = nir_deref_instr_parent(deref); - if (!deref) { - instr->pass_flags = GCM_INSTR_PINNED; - return; - } - } - } -} - -/* Walks the instruction list and marks immovable instructions as pinned or - * placed. - * - * This function also serves to initialize the instr->pass_flags field. - * After this is completed, all instructions' pass_flags fields will be set - * to either GCM_INSTR_PINNED, GCM_INSTR_PLACED or 0. - */ -static void -gcm_pin_instructions(nir_function_impl *impl, struct gcm_state *state) -{ - state->num_instrs = 0; - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - /* Index the instructions for use in gcm_state::instrs */ - instr->index = state->num_instrs++; - - switch (instr->type) { - case nir_instr_type_alu: - switch (nir_instr_as_alu(instr)->op) { - case nir_op_fddx: - case nir_op_fddy: - case nir_op_fddx_fine: - case nir_op_fddy_fine: - case nir_op_fddx_coarse: - case nir_op_fddy_coarse: - /* These can only go in uniform control flow */ - instr->pass_flags = GCM_INSTR_SCHEDULE_EARLIER_ONLY; - break; - - case nir_op_mov: - if (!is_src_scalarizable(&(nir_instr_as_alu(instr)->src[0].src))) { - instr->pass_flags = GCM_INSTR_PINNED; - break; - } - - - default: - instr->pass_flags = 0; - break; - } - break; - - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - if (nir_tex_instr_has_implicit_derivative(tex)) - instr->pass_flags = GCM_INSTR_SCHEDULE_EARLIER_ONLY; - - for (unsigned i = 0; i < tex->num_srcs; i++) { - nir_tex_src *src = &tex->src[i]; - switch (src->src_type) { - case nir_tex_src_texture_deref: - if (!tex->texture_non_uniform && !is_binding_uniform(src->src)) - instr->pass_flags = GCM_INSTR_PINNED; - break; - case nir_tex_src_sampler_deref: - if (!tex->sampler_non_uniform && !is_binding_uniform(src->src)) - instr->pass_flags = GCM_INSTR_PINNED; - break; - case nir_tex_src_texture_offset: - case nir_tex_src_texture_handle: - if (!tex->texture_non_uniform && !nir_src_is_always_uniform(src->src)) - instr->pass_flags = GCM_INSTR_PINNED; - break; - case nir_tex_src_sampler_offset: - case nir_tex_src_sampler_handle: - if (!tex->sampler_non_uniform && !nir_src_is_always_uniform(src->src)) - instr->pass_flags = GCM_INSTR_PINNED; - break; - default: - break; - } - } - break; - } - - case nir_instr_type_deref: - case nir_instr_type_load_const: - instr->pass_flags = 0; - break; - - case nir_instr_type_intrinsic: - pin_intrinsic(nir_instr_as_intrinsic(instr)); - break; - - case nir_instr_type_call: - instr->pass_flags = GCM_INSTR_PINNED; - break; - - case nir_instr_type_jump: - case nir_instr_type_ssa_undef: - case nir_instr_type_phi: - instr->pass_flags = GCM_INSTR_PLACED; - break; - - default: - unreachable("Invalid instruction type in GCM"); - } - - if (!(instr->pass_flags & GCM_INSTR_PLACED)) { - /* If this is an unplaced instruction, go ahead and pull it out of - * the program and put it on the instrs list. This has a couple - * of benifits. First, it makes the scheduling algorithm more - * efficient because we can avoid walking over basic blocks. - * Second, it keeps us from causing linked list confusion when - * we're trying to put everything in its proper place at the end - * of the pass. - * - * Note that we don't use nir_instr_remove here because that also - * cleans up uses and defs and we want to keep that information. - */ - exec_node_remove(&instr->node); - exec_list_push_tail(&state->instrs, &instr->node); - } - } - } -} - -static void -gcm_schedule_early_instr(nir_instr *instr, struct gcm_state *state); - -/** Update an instructions schedule for the given source - * - * This function is called iteratively as we walk the sources of an - * instruction. It ensures that the given source instruction has been - * scheduled and then update this instruction's block if the source - * instruction is lower down the tree. - */ -static bool -gcm_schedule_early_src(nir_src *src, void *void_state) -{ - struct gcm_state *state = void_state; - nir_instr *instr = state->instr; - - assert(src->is_ssa); - - gcm_schedule_early_instr(src->ssa->parent_instr, void_state); - - /* While the index isn't a proper dominance depth, it does have the - * property that if A dominates B then A->index <= B->index. Since we - * know that this instruction must have been dominated by all of its - * sources at some point (even if it's gone through value-numbering), - * all of the sources must lie on the same branch of the dominance tree. - * Therefore, we can just go ahead and just compare indices. - */ - struct gcm_instr_info *src_info = - &state->instr_infos[src->ssa->parent_instr->index]; - struct gcm_instr_info *info = &state->instr_infos[instr->index]; - if (info->early_block->index < src_info->early_block->index) - info->early_block = src_info->early_block; - - /* We need to restore the state instruction because it may have been - * changed through the gcm_schedule_early_instr call above. Since we - * may still be iterating through sources and future calls to - * gcm_schedule_early_src for the same instruction will still need it. - */ - state->instr = instr; - - return true; -} - -/** Schedules an instruction early - * - * This function performs a recursive depth-first search starting at the - * given instruction and proceeding through the sources to schedule - * instructions as early as they can possibly go in the dominance tree. - * The instructions are "scheduled" by updating the early_block field of - * the corresponding gcm_instr_state entry. - */ -static void -gcm_schedule_early_instr(nir_instr *instr, struct gcm_state *state) -{ - if (instr->pass_flags & GCM_INSTR_SCHEDULED_EARLY) - return; - - instr->pass_flags |= GCM_INSTR_SCHEDULED_EARLY; - - /* Pinned/placed instructions always get scheduled in their original block so - * we don't need to do anything. Also, bailing here keeps us from ever - * following the sources of phi nodes which can be back-edges. - */ - if (instr->pass_flags & GCM_INSTR_PINNED || - instr->pass_flags & GCM_INSTR_PLACED) { - state->instr_infos[instr->index].early_block = instr->block; - return; - } - - /* Start with the instruction at the top. As we iterate over the - * sources, it will get moved down as needed. - */ - state->instr_infos[instr->index].early_block = nir_start_block(state->impl); - state->instr = instr; - - nir_foreach_src(instr, gcm_schedule_early_src, state); -} - -static bool -set_block_for_loop_instr(struct gcm_state *state, nir_instr *instr, - nir_block *block) -{ - /* If the instruction wasn't in a loop to begin with we don't want to push - * it down into one. - */ - nir_loop *loop = state->blocks[instr->block->index].loop; - if (loop == NULL) - return true; - - assert(!nir_loop_has_continue_construct(loop)); - if (nir_block_dominates(instr->block, block)) - return true; - - /* If the loop only executes a single time i.e its wrapped in a: - * do{ ... break; } while(true) - * Don't move the instruction as it will not help anything. - */ - if (loop->info->limiting_terminator == NULL && !loop->info->complex_loop && - nir_block_ends_in_break(nir_loop_last_block(loop))) - return false; - - /* Being too aggressive with how we pull instructions out of loops can - * result in extra register pressure and spilling. For example its fairly - * common for loops in compute shaders to calculate SSBO offsets using - * the workgroup id, subgroup id and subgroup invocation, pulling all - * these calculations outside the loop causes register pressure. - * - * To work around these issues for now we only allow constant and texture - * instructions to be moved outside their original loops, or instructions - * where the total loop instruction count is less than - * MAX_LOOP_INSTRUCTIONS. - * - * TODO: figure out some more heuristics to allow more to be moved out of - * loops. - */ - if (state->blocks[instr->block->index].loop_instr_count < MAX_LOOP_INSTRUCTIONS) - return true; - - if (instr->type == nir_instr_type_load_const || - instr->type == nir_instr_type_tex) - return true; - - return false; -} - -static bool -set_block_to_if_block(struct gcm_state *state, nir_instr *instr, - nir_block *block) -{ - if (instr->type == nir_instr_type_load_const) - return true; - - /* TODO: Figure out some more heuristics to allow more to be moved into - * if-statements. - */ - - return false; -} - -static nir_block * -gcm_choose_block_for_instr(nir_instr *instr, nir_block *early_block, - nir_block *late_block, struct gcm_state *state) -{ - assert(nir_block_dominates(early_block, late_block)); - - bool block_set = false; - - /* First see if we can push the instruction down into an if-statements block */ - nir_block *best = late_block; - for (nir_block *block = late_block; block != NULL; block = block->imm_dom) { - if (state->blocks[block->index].loop_depth > - state->blocks[instr->block->index].loop_depth) - continue; - - if (state->blocks[block->index].if_depth >= - state->blocks[best->index].if_depth && - set_block_to_if_block(state, instr, block)) { - /* If we are pushing the instruction into an if we want it to be - * in the earliest block not the latest to avoid creating register - * pressure issues. So we don't break unless we come across the - * block the instruction was originally in. - */ - best = block; - block_set = true; - if (block == instr->block) - break; - } else if (block == instr->block) { - /* If we couldn't push the instruction later just put is back where it - * was previously. - */ - if (!block_set) - best = block; - break; - } - - if (block == early_block) - break; - } - - /* Now see if we can evict the instruction from a loop */ - for (nir_block *block = late_block; block != NULL; block = block->imm_dom) { - if (state->blocks[block->index].loop_depth < - state->blocks[best->index].loop_depth) { - if (set_block_for_loop_instr(state, instr, block)) { - best = block; - } else if (block == instr->block) { - if (!block_set) - best = block; - break; - } - } - - if (block == early_block) - break; - } - - return best; -} - -static void -gcm_schedule_late_instr(nir_instr *instr, struct gcm_state *state); - -/** Schedules the instruction associated with the given SSA def late - * - * This function works by first walking all of the uses of the given SSA - * definition, ensuring that they are scheduled, and then computing the LCA - * (least common ancestor) of its uses. It then schedules this instruction - * as close to the LCA as possible while trying to stay out of loops. - */ -static bool -gcm_schedule_late_def(nir_ssa_def *def, void *void_state) -{ - struct gcm_state *state = void_state; - - nir_block *lca = NULL; - - nir_foreach_use(use_src, def) { - nir_instr *use_instr = use_src->parent_instr; - - gcm_schedule_late_instr(use_instr, state); - - /* Phi instructions are a bit special. SSA definitions don't have to - * dominate the sources of the phi nodes that use them; instead, they - * have to dominate the predecessor block corresponding to the phi - * source. We handle this by looking through the sources, finding - * any that are usingg this SSA def, and using those blocks instead - * of the one the phi lives in. - */ - if (use_instr->type == nir_instr_type_phi) { - nir_phi_instr *phi = nir_instr_as_phi(use_instr); - - nir_foreach_phi_src(phi_src, phi) { - if (phi_src->src.ssa == def) - lca = nir_dominance_lca(lca, phi_src->pred); - } - } else { - lca = nir_dominance_lca(lca, use_instr->block); - } - } - - nir_foreach_if_use(use_src, def) { - nir_if *if_stmt = use_src->parent_if; - - /* For if statements, we consider the block to be the one immediately - * preceding the if CF node. - */ - nir_block *pred_block = - nir_cf_node_as_block(nir_cf_node_prev(&if_stmt->cf_node)); - - lca = nir_dominance_lca(lca, pred_block); - } - - nir_block *early_block = - state->instr_infos[def->parent_instr->index].early_block; - - /* Some instructions may never be used. Flag them and the instruction - * placement code will get rid of them for us. - */ - if (lca == NULL) { - def->parent_instr->block = NULL; - return true; - } - - if (def->parent_instr->pass_flags & GCM_INSTR_SCHEDULE_EARLIER_ONLY && - lca != def->parent_instr->block && - nir_block_dominates(def->parent_instr->block, lca)) { - lca = def->parent_instr->block; - } - - /* We now have the LCA of all of the uses. If our invariants hold, - * this is dominated by the block that we chose when scheduling early. - * We now walk up the dominance tree and pick the lowest block that is - * as far outside loops as we can get. - */ - nir_block *best_block = - gcm_choose_block_for_instr(def->parent_instr, early_block, lca, state); - - if (def->parent_instr->block != best_block) - state->progress = true; - - def->parent_instr->block = best_block; - - return true; -} - -/** Schedules an instruction late - * - * This function performs a depth-first search starting at the given - * instruction and proceeding through its uses to schedule instructions as - * late as they can reasonably go in the dominance tree. The instructions - * are "scheduled" by updating their instr->block field. - * - * The name of this function is actually a bit of a misnomer as it doesn't - * schedule them "as late as possible" as the paper implies. Instead, it - * first finds the lates possible place it can schedule the instruction and - * then possibly schedules it earlier than that. The actual location is as - * far down the tree as we can go while trying to stay out of loops. - */ -static void -gcm_schedule_late_instr(nir_instr *instr, struct gcm_state *state) -{ - if (instr->pass_flags & GCM_INSTR_SCHEDULED_LATE) - return; - - instr->pass_flags |= GCM_INSTR_SCHEDULED_LATE; - - /* Pinned/placed instructions are already scheduled so we don't need to do - * anything. Also, bailing here keeps us from ever following phi nodes - * which can be back-edges. - */ - if (instr->pass_flags & GCM_INSTR_PLACED || - instr->pass_flags & GCM_INSTR_PINNED) - return; - - nir_foreach_ssa_def(instr, gcm_schedule_late_def, state); -} - -static bool -gcm_replace_def_with_undef(nir_ssa_def *def, void *void_state) -{ - struct gcm_state *state = void_state; - - if (nir_ssa_def_is_unused(def)) - return true; - - nir_ssa_undef_instr *undef = - nir_ssa_undef_instr_create(state->impl->function->shader, - def->num_components, def->bit_size); - nir_instr_insert(nir_before_cf_list(&state->impl->body), &undef->instr); - nir_ssa_def_rewrite_uses(def, &undef->def); - - return true; -} - -/** Places an instrution back into the program - * - * The earlier passes of GCM simply choose blocks for each instruction and - * otherwise leave them alone. This pass actually places the instructions - * into their chosen blocks. - * - * To do so, we simply insert instructions in the reverse order they were - * extracted. This will simply place instructions that were scheduled earlier - * onto the end of their new block and instructions that were scheduled later to - * the start of their new block. - */ -static void -gcm_place_instr(nir_instr *instr, struct gcm_state *state) -{ - if (instr->pass_flags & GCM_INSTR_PLACED) - return; - - instr->pass_flags |= GCM_INSTR_PLACED; - - if (instr->block == NULL) { - nir_foreach_ssa_def(instr, gcm_replace_def_with_undef, state); - nir_instr_remove(instr); - return; - } - - struct gcm_block_info *block_info = &state->blocks[instr->block->index]; - exec_node_remove(&instr->node); - - if (block_info->last_instr) { - exec_node_insert_node_before(&block_info->last_instr->node, - &instr->node); - } else { - /* Schedule it at the end of the block */ - nir_instr *jump_instr = nir_block_last_instr(instr->block); - if (jump_instr && jump_instr->type == nir_instr_type_jump) { - exec_node_insert_node_before(&jump_instr->node, &instr->node); - } else { - exec_list_push_tail(&instr->block->instr_list, &instr->node); - } - } - - block_info->last_instr = instr; -} - -/** - * Are instructions a and b both contained in the same if/else block? - */ -static bool -weak_gvn(const nir_instr *a, const nir_instr *b) -{ - const struct nir_cf_node *ap = a->block->cf_node.parent; - const struct nir_cf_node *bp = b->block->cf_node.parent; - return ap && ap == bp && ap->type == nir_cf_node_if; -} - -static bool -opt_gcm_impl(nir_shader *shader, nir_function_impl *impl, bool value_number) -{ - nir_metadata_require(impl, nir_metadata_block_index | - nir_metadata_dominance); - nir_metadata_require(impl, nir_metadata_loop_analysis, - shader->options->force_indirect_unrolling, - shader->options->force_indirect_unrolling_sampler); - - /* A previous pass may have left pass_flags dirty, so clear it all out. */ - nir_foreach_block(block, impl) - nir_foreach_instr(instr, block) - instr->pass_flags = 0; - - struct gcm_state state; - - state.impl = impl; - state.instr = NULL; - state.progress = false; - exec_list_make_empty(&state.instrs); - state.blocks = rzalloc_array(NULL, struct gcm_block_info, impl->num_blocks); - - gcm_build_block_info(&impl->body, &state, NULL, 0, 0, ~0u); - - gcm_pin_instructions(impl, &state); - - state.instr_infos = - rzalloc_array(NULL, struct gcm_instr_info, state.num_instrs); - - /* Perform (at least some) Global Value Numbering (GVN). - * - * We perform full GVN when `value_number' is true. This can be too - * aggressive, moving values far away and extending their live ranges, - * so we don't always want to do it. - * - * Otherwise, we perform 'weaker' GVN: if identical ALU instructions appear - * on both sides of the same if/else block, we allow them to be moved. - * This cleans up a lot of mess without being -too- aggressive. - */ - struct set *gvn_set = nir_instr_set_create(NULL); - foreach_list_typed_safe(nir_instr, instr, node, &state.instrs) { - if (instr->pass_flags & GCM_INSTR_PINNED) - continue; - - if (nir_instr_set_add_or_rewrite(gvn_set, instr, - value_number ? NULL : weak_gvn)) - state.progress = true; - } - nir_instr_set_destroy(gvn_set); - - foreach_list_typed(nir_instr, instr, node, &state.instrs) - gcm_schedule_early_instr(instr, &state); - - foreach_list_typed(nir_instr, instr, node, &state.instrs) - gcm_schedule_late_instr(instr, &state); - - while (!exec_list_is_empty(&state.instrs)) { - nir_instr *instr = exec_node_data(nir_instr, - state.instrs.tail_sentinel.prev, node); - gcm_place_instr(instr, &state); - } - - ralloc_free(state.blocks); - ralloc_free(state.instr_infos); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_loop_analysis); - - return state.progress; -} - -bool -nir_opt_gcm(nir_shader *shader, bool value_number) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= opt_gcm_impl(shader, function->impl, value_number); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_idiv_const.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_idiv_const.c deleted file mode 100644 index 9b00c2b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_idiv_const.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../util/fast_idiv_by_const.h" -#include "../../util/u_math.h" - -static nir_ssa_def * -build_udiv(nir_builder *b, nir_ssa_def *n, uint64_t d) -{ - if (d == 0) { - return nir_imm_intN_t(b, 0, n->bit_size); - } else if (util_is_power_of_two_or_zero64(d)) { - return nir_ushr_imm(b, n, util_logbase2_64(d)); - } else { - struct util_fast_udiv_info m = - util_compute_fast_udiv_info(d, n->bit_size, n->bit_size); - - if (m.pre_shift) - n = nir_ushr_imm(b, n, m.pre_shift); - if (m.increment) - n = nir_uadd_sat(b, n, nir_imm_intN_t(b, m.increment, n->bit_size)); - n = nir_umul_high(b, n, nir_imm_intN_t(b, m.multiplier, n->bit_size)); - if (m.post_shift) - n = nir_ushr_imm(b, n, m.post_shift); - - return n; - } -} - -static nir_ssa_def * -build_umod(nir_builder *b, nir_ssa_def *n, uint64_t d) -{ - if (d == 0) { - return nir_imm_intN_t(b, 0, n->bit_size); - } else if (util_is_power_of_two_or_zero64(d)) { - return nir_iand(b, n, nir_imm_intN_t(b, d - 1, n->bit_size)); - } else { - return nir_isub(b, n, nir_imul(b, build_udiv(b, n, d), - nir_imm_intN_t(b, d, n->bit_size))); - } -} - -static nir_ssa_def * -build_idiv(nir_builder *b, nir_ssa_def *n, int64_t d) -{ - int64_t int_min = u_intN_min(n->bit_size); - if (d == int_min) - return nir_b2iN(b, nir_ieq_imm(b, n, int_min), n->bit_size); - - uint64_t abs_d = d < 0 ? -d : d; - - if (d == 0) { - return nir_imm_intN_t(b, 0, n->bit_size); - } else if (d == 1) { - return n; - } else if (d == -1) { - return nir_ineg(b, n); - } else if (util_is_power_of_two_or_zero64(abs_d)) { - nir_ssa_def *uq = nir_ushr_imm(b, nir_iabs(b, n), util_logbase2_64(abs_d)); - nir_ssa_def *n_neg = nir_ilt(b, n, nir_imm_intN_t(b, 0, n->bit_size)); - nir_ssa_def *neg = d < 0 ? nir_inot(b, n_neg) : n_neg; - return nir_bcsel(b, neg, nir_ineg(b, uq), uq); - } else { - struct util_fast_sdiv_info m = - util_compute_fast_sdiv_info(d, n->bit_size); - - nir_ssa_def *res = - nir_imul_high(b, n, nir_imm_intN_t(b, m.multiplier, n->bit_size)); - if (d > 0 && m.multiplier < 0) - res = nir_iadd(b, res, n); - if (d < 0 && m.multiplier > 0) - res = nir_isub(b, res, n); - if (m.shift) - res = nir_ishr_imm(b, res, m.shift); - res = nir_iadd(b, res, nir_ushr_imm(b, res, n->bit_size - 1)); - - return res; - } -} - -static nir_ssa_def * -build_irem(nir_builder *b, nir_ssa_def *n, int64_t d) -{ - int64_t int_min = u_intN_min(n->bit_size); - if (d == 0) { - return nir_imm_intN_t(b, 0, n->bit_size); - } else if (d == int_min) { - return nir_bcsel(b, nir_ieq_imm(b, n, int_min), nir_imm_intN_t(b, 0, n->bit_size), n); - } else { - d = d < 0 ? -d : d; - if (util_is_power_of_two_or_zero64(d)) { - nir_ssa_def *tmp = nir_bcsel(b, nir_ilt(b, n, nir_imm_intN_t(b, 0, n->bit_size)), - nir_iadd_imm(b, n, d - 1), n); - return nir_isub(b, n, nir_iand_imm(b, tmp, -d)); - } else { - return nir_isub(b, n, nir_imul(b, build_idiv(b, n, d), - nir_imm_intN_t(b, d, n->bit_size))); - } - } -} - -static nir_ssa_def * -build_imod(nir_builder *b, nir_ssa_def *n, int64_t d) -{ - int64_t int_min = u_intN_min(n->bit_size); - if (d == 0) { - return nir_imm_intN_t(b, 0, n->bit_size); - } else if (d == int_min) { - nir_ssa_def *int_min_def = nir_imm_intN_t(b, int_min, n->bit_size); - nir_ssa_def *is_neg_not_int_min = nir_ult(b, int_min_def, n); - nir_ssa_def *is_zero = nir_ieq_imm(b, n, 0); - return nir_bcsel(b, nir_ior(b, is_neg_not_int_min, is_zero), n, nir_iadd(b, int_min_def, n)); - } else if (d > 0 && util_is_power_of_two_or_zero64(d)) { - return nir_iand(b, n, nir_imm_intN_t(b, d - 1, n->bit_size)); - } else if (d < 0 && util_is_power_of_two_or_zero64(-d)) { - nir_ssa_def *d_def = nir_imm_intN_t(b, d, n->bit_size); - nir_ssa_def *res = nir_ior(b, n, d_def); - return nir_bcsel(b, nir_ieq(b, res, d_def), nir_imm_intN_t(b, 0, n->bit_size), res); - } else { - nir_ssa_def *rem = build_irem(b, n, d); - nir_ssa_def *zero = nir_imm_intN_t(b, 0, n->bit_size); - nir_ssa_def *sign_same = d < 0 ? nir_ilt(b, n, zero) : nir_ige(b, n, zero); - nir_ssa_def *rem_zero = nir_ieq(b, rem, zero); - return nir_bcsel(b, nir_ior(b, rem_zero, sign_same), rem, nir_iadd_imm(b, rem, d)); - } -} - -static bool -nir_opt_idiv_const_instr(nir_builder *b, nir_instr *instr, void *user_data) -{ - unsigned *min_bit_size = user_data; - - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (alu->op != nir_op_udiv && - alu->op != nir_op_idiv && - alu->op != nir_op_umod && - alu->op != nir_op_imod && - alu->op != nir_op_irem) - return false; - - assert(alu->dest.dest.is_ssa); - assert(alu->src[0].src.is_ssa && alu->src[1].src.is_ssa); - - if (alu->dest.dest.ssa.bit_size < *min_bit_size) - return false; - - if (!nir_src_is_const(alu->src[1].src)) - return false; - - unsigned bit_size = alu->src[1].src.ssa->bit_size; - - b->cursor = nir_before_instr(&alu->instr); - - nir_ssa_def *q[NIR_MAX_VEC_COMPONENTS]; - for (unsigned comp = 0; comp < alu->dest.dest.ssa.num_components; comp++) { - /* Get the numerator for the channel */ - nir_ssa_def *n = nir_channel(b, alu->src[0].src.ssa, - alu->src[0].swizzle[comp]); - - /* Get the denominator for the channel */ - int64_t d = nir_src_comp_as_int(alu->src[1].src, - alu->src[1].swizzle[comp]); - - nir_alu_type d_type = nir_op_infos[alu->op].input_types[1]; - if (nir_alu_type_get_base_type(d_type) == nir_type_uint) { - /* The code above sign-extended. If we're lowering an unsigned op, - * we need to mask it off to the correct number of bits so that a - * cast to uint64_t will do the right thing. - */ - if (bit_size < 64) - d &= (1ull << bit_size) - 1; - } - - switch (alu->op) { - case nir_op_udiv: - q[comp] = build_udiv(b, n, d); - break; - case nir_op_idiv: - q[comp] = build_idiv(b, n, d); - break; - case nir_op_umod: - q[comp] = build_umod(b, n, d); - break; - case nir_op_imod: - q[comp] = build_imod(b, n, d); - break; - case nir_op_irem: - q[comp] = build_irem(b, n, d); - break; - default: - unreachable("Unknown integer division op"); - } - } - - nir_ssa_def *qvec = nir_vec(b, q, alu->dest.dest.ssa.num_components); - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, qvec); - nir_instr_remove(&alu->instr); - - return true; -} - -bool -nir_opt_idiv_const(nir_shader *shader, unsigned min_bit_size) -{ - return nir_shader_instructions_pass(shader, nir_opt_idiv_const_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &min_bit_size); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_if.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_if.c deleted file mode 100644 index 38cf039..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_if.c +++ /dev/null @@ -1,1753 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_constant_expressions.h" -#include "nir_control_flow.h" -#include "nir_loop_analyze.h" - -static nir_ssa_def *clone_alu_and_replace_src_defs(nir_builder *b, - const nir_alu_instr *alu, - nir_ssa_def **src_defs); - -/** - * Gets the single block that jumps back to the loop header. Already assumes - * there is exactly one such block. - */ -static nir_block* -find_continue_block(nir_loop *loop) -{ - nir_block *header_block = nir_loop_first_block(loop); - nir_block *prev_block = - nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - - assert(header_block->predecessors->entries == 2); - - set_foreach(header_block->predecessors, pred_entry) { - if (pred_entry->key != prev_block) - return (nir_block*)pred_entry->key; - } - - unreachable("Continue block not found!"); -} - -/** - * Does a phi have one constant value from outside a loop and one from inside? - */ -static bool -phi_has_constant_from_outside_and_one_from_inside_loop(nir_phi_instr *phi, - const nir_block *entry_block, - bool *entry_val, - bool *continue_val) -{ - /* We already know we have exactly one continue */ - assert(exec_list_length(&phi->srcs) == 2); - - *entry_val = false; - *continue_val = false; - - nir_foreach_phi_src(src, phi) { - if (!nir_src_is_const(src->src)) - return false; - - if (src->pred != entry_block) { - *continue_val = nir_src_as_bool(src->src); - } else { - *entry_val = nir_src_as_bool(src->src); - } - } - - return true; -} - -/** - * This optimization detects if statements at the tops of loops where the - * condition is a phi node of two constants and moves half of the if to above - * the loop and the other half of the if to the end of the loop. A simple for - * loop "for (int i = 0; i < 4; i++)", when run through the SPIR-V front-end, - * ends up looking something like this: - * - * vec1 32 ssa_0 = load_const (0x00000000) - * vec1 32 ssa_1 = load_const (0xffffffff) - * loop { - * block block_1: - * vec1 32 ssa_2 = phi block_0: ssa_0, block_7: ssa_5 - * vec1 32 ssa_3 = phi block_0: ssa_0, block_7: ssa_1 - * if ssa_3 { - * block block_2: - * vec1 32 ssa_4 = load_const (0x00000001) - * vec1 32 ssa_5 = iadd ssa_2, ssa_4 - * } else { - * block block_3: - * } - * block block_4: - * vec1 32 ssa_6 = load_const (0x00000004) - * vec1 32 ssa_7 = ilt ssa_5, ssa_6 - * if ssa_7 { - * block block_5: - * } else { - * block block_6: - * break - * } - * block block_7: - * } - * - * This turns it into something like this: - * - * // Stuff from block 1 - * // Stuff from block 3 - * loop { - * block block_1: - * vec1 32 ssa_2 = phi block_0: ssa_0, block_7: ssa_5 - * vec1 32 ssa_6 = load_const (0x00000004) - * vec1 32 ssa_7 = ilt ssa_2, ssa_6 - * if ssa_7 { - * block block_5: - * } else { - * block block_6: - * break - * } - * block block_7: - * // Stuff from block 1 - * // Stuff from block 2 - * vec1 32 ssa_4 = load_const (0x00000001) - * vec1 32 ssa_5 = iadd ssa_2, ssa_4 - * } - */ -static bool -opt_peel_loop_initial_if(nir_loop *loop) -{ - nir_block *header_block = nir_loop_first_block(loop); - nir_block *const prev_block = - nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - - /* It would be insane if this were not true */ - assert(_mesa_set_search(header_block->predecessors, prev_block)); - - /* The loop must have exactly one continue block which could be a block - * ending in a continue instruction or the "natural" continue from the - * last block in the loop back to the top. - */ - if (header_block->predecessors->entries != 2) - return false; - - nir_cf_node *if_node = nir_cf_node_next(&header_block->cf_node); - if (!if_node || if_node->type != nir_cf_node_if) - return false; - - nir_if *nif = nir_cf_node_as_if(if_node); - if (!nif->condition.is_ssa) - return false; - - nir_ssa_def *cond = nif->condition.ssa; - if (cond->parent_instr->type != nir_instr_type_phi) - return false; - - nir_phi_instr *cond_phi = nir_instr_as_phi(cond->parent_instr); - if (cond->parent_instr->block != header_block) - return false; - - bool entry_val = false, continue_val = false; - if (!phi_has_constant_from_outside_and_one_from_inside_loop(cond_phi, - prev_block, - &entry_val, - &continue_val)) - return false; - - /* If they both execute or both don't execute, this is a job for - * nir_dead_cf, not this pass. - */ - if ((entry_val && continue_val) || (!entry_val && !continue_val)) - return false; - - struct exec_list *continue_list, *entry_list; - if (continue_val) { - continue_list = &nif->then_list; - entry_list = &nif->else_list; - } else { - continue_list = &nif->else_list; - entry_list = &nif->then_list; - } - - /* We want to be moving the contents of entry_list to above the loop so it - * can't contain any break or continue instructions. - */ - foreach_list_typed(nir_cf_node, cf_node, node, entry_list) { - nir_foreach_block_in_cf_node(block, cf_node) { - nir_instr *last_instr = nir_block_last_instr(block); - if (last_instr && last_instr->type == nir_instr_type_jump) - return false; - } - } - - /* We're about to re-arrange a bunch of blocks so make sure that we don't - * have deref uses which cross block boundaries. We don't want a deref - * accidentally ending up in a phi. - */ - nir_rematerialize_derefs_in_use_blocks_impl( - nir_cf_node_get_function(&loop->cf_node)); - - /* Before we do anything, convert the loop to LCSSA. We're about to - * replace a bunch of SSA defs with registers and this will prevent any of - * it from leaking outside the loop. - */ - nir_convert_loop_to_lcssa(loop); - - nir_block *after_if_block = - nir_cf_node_as_block(nir_cf_node_next(&nif->cf_node)); - - /* Get rid of phis in the header block since we will be duplicating it */ - nir_lower_phis_to_regs_block(header_block); - /* Get rid of phis after the if since dominance will change */ - nir_lower_phis_to_regs_block(after_if_block); - - /* Get rid of SSA defs in the pieces we're about to move around */ - nir_lower_ssa_defs_to_regs_block(header_block); - nir_foreach_block_in_cf_node(block, &nif->cf_node) - nir_lower_ssa_defs_to_regs_block(block); - - nir_cf_list header, tmp; - nir_cf_extract(&header, nir_before_block(header_block), - nir_after_block(header_block)); - - nir_cf_list_clone(&tmp, &header, &loop->cf_node, NULL); - nir_cf_reinsert(&tmp, nir_before_cf_node(&loop->cf_node)); - nir_cf_extract(&tmp, nir_before_cf_list(entry_list), - nir_after_cf_list(entry_list)); - nir_cf_reinsert(&tmp, nir_before_cf_node(&loop->cf_node)); - - nir_cf_reinsert(&header, - nir_after_block_before_jump(find_continue_block(loop))); - - bool continue_list_jumps = - nir_block_ends_in_jump(exec_node_data(nir_block, - exec_list_get_tail(continue_list), - cf_node.node)); - - nir_cf_extract(&tmp, nir_before_cf_list(continue_list), - nir_after_cf_list(continue_list)); - - /* Get continue block again as the previous reinsert might have removed the - * block. Also, if both the continue list and the continue block ends in - * jump instructions, removes the jump from the latter, as it will not be - * executed if we insert the continue list before it. */ - - nir_block *continue_block = find_continue_block(loop); - - if (continue_list_jumps) { - nir_instr *last_instr = nir_block_last_instr(continue_block); - if (last_instr && last_instr->type == nir_instr_type_jump) - nir_instr_remove(last_instr); - } - - nir_cf_reinsert(&tmp, - nir_after_block_before_jump(continue_block)); - - nir_cf_node_remove(&nif->cf_node); - - return true; -} - -static bool -alu_instr_is_comparison(const nir_alu_instr *alu) -{ - switch (alu->op) { - case nir_op_flt32: - case nir_op_fge32: - case nir_op_feq32: - case nir_op_fneu32: - case nir_op_ilt32: - case nir_op_ult32: - case nir_op_ige32: - case nir_op_uge32: - case nir_op_ieq32: - case nir_op_ine32: - return true; - default: - return nir_alu_instr_is_comparison(alu); - } -} - -static bool -alu_instr_is_type_conversion(const nir_alu_instr *alu) -{ - return nir_op_infos[alu->op].num_inputs == 1 && - nir_op_infos[alu->op].output_type != nir_op_infos[alu->op].input_types[0]; -} - -static bool -is_trivial_bcsel(const nir_instr *instr, bool allow_non_phi_src) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *const bcsel = nir_instr_as_alu(instr); - if (!nir_op_is_selection(bcsel->op)) - return false; - - for (unsigned i = 0; i < 3; i++) { - if (!nir_alu_src_is_trivial_ssa(bcsel, i) || - bcsel->src[i].src.ssa->parent_instr->block != instr->block) - return false; - - if (bcsel->src[i].src.ssa->parent_instr->type != nir_instr_type_phi) { - /* opt_split_alu_of_phi() is able to peel that src from the loop */ - if (i == 0 || !allow_non_phi_src) - return false; - allow_non_phi_src = false; - } - } - - nir_foreach_phi_src(src, nir_instr_as_phi(bcsel->src[0].src.ssa->parent_instr)) { - if (!nir_src_is_const(src->src)) - return false; - } - - return true; -} - -/** - * Splits ALU instructions that have a source that is a phi node - * - * ALU instructions in the header block of a loop that meet the following - * criteria can be split. - * - * - The loop has no continue instructions other than the "natural" continue - * at the bottom of the loop. - * - * - At least one source of the instruction is a phi node from the header block. - * - * - Any non-phi sources of the ALU instruction come from a block that - * dominates the block before the loop. The most common failure mode for - * this check is sources that are generated in the loop header block. - * - * - The phi node selects a constant or undef from the block before the loop or - * the only ALU user is a trivial bcsel that gets removed by peeling the ALU - * - * The split process splits the original ALU instruction into two, one at the - * bottom of the loop and one at the block before the loop. The instruction - * before the loop computes the value on the first iteration, and the - * instruction at the bottom computes the value on the second, third, and so - * on. A new phi node is added to the header block that selects either the - * instruction before the loop or the one at the end, and uses of the original - * instruction are replaced by this phi. - * - * The splitting transforms a loop like: - * - * vec1 32 ssa_8 = load_const (0x00000001) - * vec1 32 ssa_10 = load_const (0x00000000) - * // succs: block_1 - * loop { - * block block_1: - * // preds: block_0 block_4 - * vec1 32 ssa_11 = phi block_0: ssa_10, block_4: ssa_15 - * vec1 32 ssa_12 = phi block_0: ssa_1, block_4: ssa_15 - * vec1 32 ssa_13 = phi block_0: ssa_10, block_4: ssa_16 - * vec1 32 ssa_14 = iadd ssa_11, ssa_8 - * vec1 32 ssa_15 = b32csel ssa_13, ssa_14, ssa_12 - * ... - * // succs: block_1 - * } - * - * into: - * - * vec1 32 ssa_8 = load_const (0x00000001) - * vec1 32 ssa_10 = load_const (0x00000000) - * vec1 32 ssa_22 = iadd ssa_10, ssa_8 - * // succs: block_1 - * loop { - * block block_1: - * // preds: block_0 block_4 - * vec1 32 ssa_11 = phi block_0: ssa_10, block_4: ssa_15 - * vec1 32 ssa_12 = phi block_0: ssa_1, block_4: ssa_15 - * vec1 32 ssa_13 = phi block_0: ssa_10, block_4: ssa_16 - * vec1 32 ssa_21 = phi block_0: ssa_22, block_4: ssa_20 - * vec1 32 ssa_15 = b32csel ssa_13, ssa_21, ssa_12 - * ... - * vec1 32 ssa_20 = iadd ssa_15, ssa_8 - * // succs: block_1 - * } - */ -static bool -opt_split_alu_of_phi(nir_builder *b, nir_loop *loop) -{ - bool progress = false; - nir_block *header_block = nir_loop_first_block(loop); - nir_block *const prev_block = - nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - - /* It would be insane if this were not true */ - assert(_mesa_set_search(header_block->predecessors, prev_block)); - - /* The loop must have exactly one continue block which could be a block - * ending in a continue instruction or the "natural" continue from the - * last block in the loop back to the top. - */ - if (header_block->predecessors->entries != 2) - return false; - - nir_block *continue_block = find_continue_block(loop); - if (continue_block == header_block) - return false; - - nir_foreach_instr_safe(instr, header_block) { - if (instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *const alu = nir_instr_as_alu(instr); - - /* nir_op_vec{2,3,4} and nir_op_mov are excluded because they can easily - * lead to infinite optimization loops. Splitting comparisons can lead - * to loop unrolling not recognizing loop termintators, and type - * conversions also lead to regressions. - */ - if (nir_op_is_vec(alu->op) || - alu_instr_is_comparison(alu) || - alu_instr_is_type_conversion(alu)) - continue; - - bool has_phi_src_from_prev_block = false; - bool all_non_phi_exist_in_prev_block = true; - bool is_prev_result_undef = true; - bool is_prev_result_const = true; - nir_ssa_def *prev_srcs[8]; // FINISHME: Array size? - nir_ssa_def *continue_srcs[8]; // FINISHME: Array size? - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - nir_instr *const src_instr = alu->src[i].src.ssa->parent_instr; - - /* If the source is a phi in the loop header block, then the - * prev_srcs and continue_srcs will come from the different sources - * of the phi. - */ - if (src_instr->type == nir_instr_type_phi && - src_instr->block == header_block) { - nir_phi_instr *const phi = nir_instr_as_phi(src_instr); - - /* Only strictly need to NULL out the pointers when the assertions - * (below) are compiled in. Debugging a NULL pointer deref in the - * wild is easier than debugging a random pointer deref, so set - * NULL unconditionally just to be safe. - */ - prev_srcs[i] = NULL; - continue_srcs[i] = NULL; - - nir_foreach_phi_src(src_of_phi, phi) { - if (src_of_phi->pred == prev_block) { - if (src_of_phi->src.ssa->parent_instr->type != - nir_instr_type_ssa_undef) { - is_prev_result_undef = false; - } - - if (src_of_phi->src.ssa->parent_instr->type != - nir_instr_type_load_const) { - is_prev_result_const = false; - } - - prev_srcs[i] = src_of_phi->src.ssa; - has_phi_src_from_prev_block = true; - } else - continue_srcs[i] = src_of_phi->src.ssa; - } - - assert(prev_srcs[i] != NULL); - assert(continue_srcs[i] != NULL); - } else { - /* If the source is not a phi (or a phi in a block other than the - * loop header), then the value must exist in prev_block. - */ - if (!nir_block_dominates(src_instr->block, prev_block)) { - all_non_phi_exist_in_prev_block = false; - break; - } - - prev_srcs[i] = alu->src[i].src.ssa; - continue_srcs[i] = alu->src[i].src.ssa; - } - } - - if (!has_phi_src_from_prev_block || !all_non_phi_exist_in_prev_block) - continue; - - if (!is_prev_result_undef && !is_prev_result_const) { - /* check if the only user is a trivial bcsel */ - if (!list_is_singular(&alu->dest.dest.ssa.uses)) - continue; - - nir_src *use = list_first_entry(&alu->dest.dest.ssa.uses, nir_src, use_link); - if (use->is_if || !is_trivial_bcsel(use->parent_instr, true)) - continue; - } - - /* Split ALU of Phi */ - b->cursor = nir_after_block(prev_block); - nir_ssa_def *prev_value = clone_alu_and_replace_src_defs(b, alu, prev_srcs); - - /* Make a copy of the original ALU instruction. Replace the sources - * of the new instruction that read a phi with an undef source from - * prev_block with the non-undef source of that phi. - * - * Insert the new instruction at the end of the continue block. - */ - b->cursor = nir_after_block_before_jump(continue_block); - - nir_ssa_def *const alu_copy = - clone_alu_and_replace_src_defs(b, alu, continue_srcs); - - /* Make a new phi node that selects a value from prev_block and the - * result of the new instruction from continue_block. - */ - nir_phi_instr *const phi = nir_phi_instr_create(b->shader); - nir_phi_instr_add_src(phi, prev_block, nir_src_for_ssa(prev_value)); - nir_phi_instr_add_src(phi, continue_block, nir_src_for_ssa(alu_copy)); - - nir_ssa_dest_init(&phi->instr, &phi->dest, - alu_copy->num_components, alu_copy->bit_size, NULL); - - b->cursor = nir_after_phis(header_block); - nir_builder_instr_insert(b, &phi->instr); - - /* Modify all readers of the original ALU instruction to read the - * result of the phi. - */ - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, - &phi->dest.ssa); - - /* Since the original ALU instruction no longer has any readers, just - * remove it. - */ - nir_instr_remove_v(&alu->instr); - nir_instr_free(&alu->instr); - - progress = true; - } - - return progress; -} - -/** - * Simplify a bcsel whose sources are all phi nodes from the loop header block - * - * bcsel instructions in a loop that meet the following criteria can be - * converted to phi nodes: - * - * - The loop has no continue instructions other than the "natural" continue - * at the bottom of the loop. - * - * - All of the sources of the bcsel are phi nodes in the header block of the - * loop. - * - * - The phi node representing the condition of the bcsel instruction chooses - * only constant values. - * - * The contant value from the condition will select one of the other sources - * when entered from outside the loop and the remaining source when entered - * from the continue block. Since each of these sources is also a phi node in - * the header block, the value of the phi node can be "evaluated." These - * evaluated phi nodes provide the sources for a new phi node. All users of - * the bcsel result are updated to use the phi node result. - * - * The replacement transforms loops like: - * - * vec1 32 ssa_7 = undefined - * vec1 32 ssa_8 = load_const (0x00000001) - * vec1 32 ssa_9 = load_const (0x000000c8) - * vec1 32 ssa_10 = load_const (0x00000000) - * // succs: block_1 - * loop { - * block block_1: - * // preds: block_0 block_4 - * vec1 32 ssa_11 = phi block_0: ssa_1, block_4: ssa_14 - * vec1 32 ssa_12 = phi block_0: ssa_10, block_4: ssa_15 - * vec1 32 ssa_13 = phi block_0: ssa_7, block_4: ssa_25 - * vec1 32 ssa_14 = b32csel ssa_12, ssa_13, ssa_11 - * vec1 32 ssa_16 = ige32 ssa_14, ssa_9 - * ... - * vec1 32 ssa_15 = load_const (0xffffffff) - * ... - * vec1 32 ssa_25 = iadd ssa_14, ssa_8 - * // succs: block_1 - * } - * - * into: - * - * vec1 32 ssa_7 = undefined - * vec1 32 ssa_8 = load_const (0x00000001) - * vec1 32 ssa_9 = load_const (0x000000c8) - * vec1 32 ssa_10 = load_const (0x00000000) - * // succs: block_1 - * loop { - * block block_1: - * // preds: block_0 block_4 - * vec1 32 ssa_11 = phi block_0: ssa_1, block_4: ssa_14 - * vec1 32 ssa_12 = phi block_0: ssa_10, block_4: ssa_15 - * vec1 32 ssa_13 = phi block_0: ssa_7, block_4: ssa_25 - * vec1 32 sss_26 = phi block_0: ssa_1, block_4: ssa_25 - * vec1 32 ssa_16 = ige32 ssa_26, ssa_9 - * ... - * vec1 32 ssa_15 = load_const (0xffffffff) - * ... - * vec1 32 ssa_25 = iadd ssa_26, ssa_8 - * // succs: block_1 - * } - * - * \note - * It may be possible modify this function to not require a phi node as the - * source of the bcsel that is selected when entering from outside the loop. - * The only restriction is that the source must be geneated outside the loop - * (since it will become the source of a phi node in the header block of the - * loop). - */ -static bool -opt_simplify_bcsel_of_phi(nir_builder *b, nir_loop *loop) -{ - bool progress = false; - nir_block *header_block = nir_loop_first_block(loop); - nir_block *const prev_block = - nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - - /* It would be insane if this were not true */ - assert(_mesa_set_search(header_block->predecessors, prev_block)); - - /* The loop must have exactly one continue block which could be a block - * ending in a continue instruction or the "natural" continue from the - * last block in the loop back to the top. - */ - if (header_block->predecessors->entries != 2) - return false; - - /* We can move any bcsel that can guaranteed to execut on every iteration - * of a loop. For now this is accomplished by only taking bcsels from the - * header_block. In the future, this could be expanced to include any - * bcsel that must come before any break. - * - * For more details, see - * https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/170#note_110305 - */ - nir_foreach_instr_safe(instr, header_block) { - if (!is_trivial_bcsel(instr, false)) - continue; - - nir_alu_instr *const bcsel = nir_instr_as_alu(instr); - nir_phi_instr *const cond_phi = - nir_instr_as_phi(bcsel->src[0].src.ssa->parent_instr); - - bool entry_val = false, continue_val = false; - if (!phi_has_constant_from_outside_and_one_from_inside_loop(cond_phi, - prev_block, - &entry_val, - &continue_val)) - continue; - - /* If they both execute or both don't execute, this is a job for - * nir_dead_cf, not this pass. - */ - if ((entry_val && continue_val) || (!entry_val && !continue_val)) - continue; - - const unsigned entry_src = entry_val ? 1 : 2; - const unsigned continue_src = entry_val ? 2 : 1; - - /* Create a new phi node that selects the value for prev_block from - * the bcsel source that is selected by entry_val and the value for - * continue_block from the other bcsel source. Both sources have - * already been verified to be phi nodes. - */ - nir_block *continue_block = find_continue_block(loop); - nir_phi_instr *const phi = nir_phi_instr_create(b->shader); - nir_phi_instr_add_src(phi, prev_block, - nir_phi_get_src_from_block(nir_instr_as_phi(bcsel->src[entry_src].src.ssa->parent_instr), - prev_block)->src); - - nir_phi_instr_add_src(phi, continue_block, - nir_phi_get_src_from_block(nir_instr_as_phi(bcsel->src[continue_src].src.ssa->parent_instr), - continue_block)->src); - - nir_ssa_dest_init(&phi->instr, - &phi->dest, - nir_dest_num_components(bcsel->dest.dest), - nir_dest_bit_size(bcsel->dest.dest), - NULL); - - b->cursor = nir_after_phis(header_block); - nir_builder_instr_insert(b, &phi->instr); - - /* Modify all readers of the bcsel instruction to read the result of - * the phi. - */ - nir_ssa_def_rewrite_uses(&bcsel->dest.dest.ssa, - &phi->dest.ssa); - - /* Since the original bcsel instruction no longer has any readers, - * just remove it. - */ - nir_instr_remove_v(&bcsel->instr); - nir_instr_free(&bcsel->instr); - - progress = true; - } - - return progress; -} - -static bool -is_block_empty(nir_block *block) -{ - return nir_cf_node_is_last(&block->cf_node) && - exec_list_is_empty(&block->instr_list); -} - -static bool -nir_block_ends_in_continue(nir_block *block) -{ - if (exec_list_is_empty(&block->instr_list)) - return false; - - nir_instr *instr = nir_block_last_instr(block); - return instr->type == nir_instr_type_jump && - nir_instr_as_jump(instr)->type == nir_jump_continue; -} - -/** - * This optimization turns: - * - * loop { - * ... - * if (cond) { - * do_work_1(); - * continue; - * } else { - * } - * do_work_2(); - * } - * - * into: - * - * loop { - * ... - * if (cond) { - * do_work_1(); - * continue; - * } else { - * do_work_2(); - * } - * } - * - * The continue should then be removed by nir_opt_trivial_continues() and the - * loop can potentially be unrolled. - * - * Note: Unless the function param aggressive_last_continue==true do_work_2() - * is only ever blocks and nested loops. We avoid nesting other if-statments - * in the branch as this can result in increased register pressure, and in - * the i965 driver it causes a large amount of spilling in shader-db. - * For RADV however nesting these if-statements allows further continues to be - * remove and provides a significant FPS boost in Doom, which is why we have - * opted for this special bool to enable more aggresive optimisations. - * TODO: The GCM pass solves most of the spilling regressions in i965, if it - * is ever enabled we should consider removing the aggressive_last_continue - * param. - */ -static bool -opt_if_loop_last_continue(nir_loop *loop, bool aggressive_last_continue) -{ - nir_if *nif = NULL; - bool then_ends_in_continue = false; - bool else_ends_in_continue = false; - - /* Scan the control flow of the loop from the last to the first node - * looking for an if-statement we can optimise. - */ - nir_block *last_block = nir_loop_last_block(loop); - nir_cf_node *if_node = nir_cf_node_prev(&last_block->cf_node); - while (if_node) { - if (if_node->type == nir_cf_node_if) { - nif = nir_cf_node_as_if(if_node); - nir_block *then_block = nir_if_last_then_block(nif); - nir_block *else_block = nir_if_last_else_block(nif); - - then_ends_in_continue = nir_block_ends_in_continue(then_block); - else_ends_in_continue = nir_block_ends_in_continue(else_block); - - /* If both branches end in a jump do nothing, this should be handled - * by nir_opt_dead_cf(). - */ - if ((then_ends_in_continue || nir_block_ends_in_break(then_block)) && - (else_ends_in_continue || nir_block_ends_in_break(else_block))) - return false; - - /* If continue found stop scanning and attempt optimisation, or - */ - if (then_ends_in_continue || else_ends_in_continue || - !aggressive_last_continue) - break; - } - - if_node = nir_cf_node_prev(if_node); - } - - /* If we didn't find an if to optimise return */ - if (!nif || (!then_ends_in_continue && !else_ends_in_continue)) - return false; - - /* If there is nothing after the if-statement we bail */ - if (&nif->cf_node == nir_cf_node_prev(&last_block->cf_node) && - exec_list_is_empty(&last_block->instr_list)) - return false; - - /* If there are single-source phis in the last block, - * get rid of them first - */ - nir_opt_remove_phis_block(last_block); - - /* Move the last block of the loop inside the last if-statement */ - nir_cf_list tmp; - nir_cf_extract(&tmp, nir_after_cf_node(if_node), - nir_after_block(last_block)); - if (then_ends_in_continue) - nir_cf_reinsert(&tmp, nir_after_cf_list(&nif->else_list)); - else - nir_cf_reinsert(&tmp, nir_after_cf_list(&nif->then_list)); - - /* In order to avoid running nir_lower_regs_to_ssa_impl() every time an if - * opt makes progress we leave nir_opt_trivial_continues() to remove the - * continue now that the end of the loop has been simplified. - */ - - return true; -} - -/* Walk all the phis in the block immediately following the if statement and - * swap the blocks. - */ -static void -rewrite_phi_predecessor_blocks(nir_if *nif, - nir_block *old_then_block, - nir_block *old_else_block, - nir_block *new_then_block, - nir_block *new_else_block) -{ - nir_block *after_if_block = - nir_cf_node_as_block(nir_cf_node_next(&nif->cf_node)); - - nir_foreach_instr(instr, after_if_block) { - if (instr->type != nir_instr_type_phi) - continue; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - - nir_foreach_phi_src(src, phi) { - if (src->pred == old_then_block) { - src->pred = new_then_block; - } else if (src->pred == old_else_block) { - src->pred = new_else_block; - } - } - } -} - -/** - * This optimization turns: - * - * if (cond) { - * } else { - * do_work(); - * } - * - * into: - * - * if (!cond) { - * do_work(); - * } else { - * } - */ -static bool -opt_if_simplification(nir_builder *b, nir_if *nif) -{ - /* Only simplify if the then block is empty and the else block is not. */ - if (!is_block_empty(nir_if_first_then_block(nif)) || - is_block_empty(nir_if_first_else_block(nif))) - return false; - - /* Make sure the condition is a comparison operation. */ - nir_instr *src_instr = nif->condition.ssa->parent_instr; - if (src_instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu_instr = nir_instr_as_alu(src_instr); - if (!nir_alu_instr_is_comparison(alu_instr)) - return false; - - /* Insert the inverted instruction and rewrite the condition. */ - b->cursor = nir_after_instr(&alu_instr->instr); - - nir_ssa_def *new_condition = - nir_inot(b, &alu_instr->dest.dest.ssa); - - nir_if_rewrite_condition(nif, nir_src_for_ssa(new_condition)); - - /* Grab pointers to the last then/else blocks for fixing up the phis. */ - nir_block *then_block = nir_if_last_then_block(nif); - nir_block *else_block = nir_if_last_else_block(nif); - - if (nir_block_ends_in_jump(else_block)) { - /* Even though this if statement has a jump on one side, we may still have - * phis afterwards. Single-source phis can be produced by loop unrolling - * or dead control-flow passes and are perfectly legal. Run a quick phi - * removal on the block after the if to clean up any such phis. - */ - nir_block *const next_block = - nir_cf_node_as_block(nir_cf_node_next(&nif->cf_node)); - nir_opt_remove_phis_block(next_block); - } - - rewrite_phi_predecessor_blocks(nif, then_block, else_block, else_block, - then_block); - - /* Finally, move the else block to the then block. */ - nir_cf_list tmp; - nir_cf_extract(&tmp, nir_before_cf_list(&nif->else_list), - nir_after_cf_list(&nif->else_list)); - nir_cf_reinsert(&tmp, nir_before_cf_list(&nif->then_list)); - - return true; -} - -/* Find phi statements after an if that choose between true and false, and - * replace them with the if statement's condition (or an inot of it). - */ -static bool -opt_if_phi_is_condition(nir_builder *b, nir_if *nif) -{ - /* Grab pointers to the last then/else blocks for looking in the phis. */ - nir_block *then_block = nir_if_last_then_block(nif); - ASSERTED nir_block *else_block = nir_if_last_else_block(nif); - nir_ssa_def *cond = nif->condition.ssa; - bool progress = false; - - nir_block *after_if_block = nir_cf_node_as_block(nir_cf_node_next(&nif->cf_node)); - nir_foreach_instr_safe(instr, after_if_block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - if (phi->dest.ssa.bit_size != cond->bit_size || - phi->dest.ssa.num_components != 1) - continue; - - enum opt_bool { - T, F, UNKNOWN - } then_val = UNKNOWN, else_val = UNKNOWN; - - nir_foreach_phi_src(src, phi) { - assert(src->pred == then_block || src->pred == else_block); - enum opt_bool *pred_val = src->pred == then_block ? &then_val : &else_val; - - nir_ssa_scalar val = nir_ssa_scalar_resolved(src->src.ssa, 0); - if (!nir_ssa_scalar_is_const(val)) - break; - - if (nir_ssa_scalar_as_int(val) == -1) - *pred_val = T; - else if (nir_ssa_scalar_as_uint(val) == 0) - *pred_val = F; - else - break; - } - if (then_val == T && else_val == F) { - nir_ssa_def_rewrite_uses(&phi->dest.ssa, cond); - progress = true; - } else if (then_val == F && else_val == T) { - b->cursor = nir_before_cf_node(&nif->cf_node); - nir_ssa_def_rewrite_uses(&phi->dest.ssa, nir_inot(b, cond)); - progress = true; - } - } - - return progress; -} - -/** - * This optimization tries to merge two break statements into a single break. - * For this purpose, it checks if both branch legs end in a break or - * if one branch leg ends in a break, and the other one does so after the - * branch. - * - * This optimization turns - * - * loop { - * ... - * if (cond) { - * do_work_1(); - * break; - * } else { - * do_work_2(); - * break; - * } - * } - * - * into: - * - * loop { - * ... - * if (cond) { - * do_work_1(); - * } else { - * do_work_2(); - * } - * break; - * } - * - * but also situations like - * - * loop { - * ... - * if (cond1) { - * if (cond2) { - * do_work_1(); - * break; - * } else { - * do_work_2(); - * } - * do_work_3(); - * break; - * } else { - * ... - * } - * } - * - * into: - * - * loop { - * ... - * if (cond1) { - * if (cond2) { - * do_work_1(); - * } else { - * do_work_2(); - * do_work_3(); - * } - * break; - * } else { - * ... - * } - * } - */ -static bool -opt_merge_breaks(nir_if *nif) -{ - nir_block *last_then = nir_if_last_then_block(nif); - nir_block *last_else = nir_if_last_else_block(nif); - bool then_break = nir_block_ends_in_break(last_then); - bool else_break = nir_block_ends_in_break(last_else); - - /* If both branch legs end in a break, merge the break after the branch */ - if (then_break && else_break) { - nir_block *after_if = nir_cf_node_cf_tree_next(&nif->cf_node); - /* Make sure that the successor is empty. - * If not we let nir_opt_dead_cf() clean it up first. - */ - if (!is_block_empty(after_if)) - return false; - - nir_lower_phis_to_regs_block(last_then->successors[0]); - nir_instr_remove_v(nir_block_last_instr(last_then)); - nir_instr *jump = nir_block_last_instr(last_else); - nir_instr_remove_v(jump); - nir_instr_insert(nir_after_block(after_if), jump); - return true; - } - - /* Single break: If there's a break after the branch and the non-breaking - * side of the if falls through to it, then hoist that code after up into - * the if and leave just a single break there. - */ - if (then_break || else_break) { - - /* At least one branch leg must fall-through */ - if (nir_block_ends_in_jump(last_then) && nir_block_ends_in_jump(last_else)) - return false; - - /* Check if there is a single break after the IF */ - nir_cf_node *first = nir_cf_node_next(&nif->cf_node); - nir_cf_node *last = first; - while (!nir_cf_node_is_last(last)) { - if (contains_other_jump (last, NULL)) - return false; - last = nir_cf_node_next(last); - } - - assert(last->type == nir_cf_node_block); - if (!nir_block_ends_in_break(nir_cf_node_as_block(last))) - return false; - - /* Hoist the code from after the IF into the falling-through branch leg */ - nir_opt_remove_phis_block(nir_cf_node_as_block(first)); - nir_block *break_block = then_break ? last_then : last_else; - nir_lower_phis_to_regs_block(break_block->successors[0]); - - nir_cf_list tmp; - nir_cf_extract(&tmp, nir_before_cf_node(first), - nir_after_block_before_jump(nir_cf_node_as_block(last))); - if (then_break) - nir_cf_reinsert(&tmp, nir_after_block(last_else)); - else - nir_cf_reinsert(&tmp, nir_after_block(last_then)); - - nir_instr_remove_v(nir_block_last_instr(break_block)); - return true; - } - - return false; -} - -/** - * This optimization simplifies potential loop terminators which then allows - * other passes such as opt_if_simplification() and loop unrolling to progress - * further: - * - * if (cond) { - * ... then block instructions ... - * } else { - * ... - * break; - * } - * - * into: - * - * if (cond) { - * } else { - * ... - * break; - * } - * ... then block instructions ... - */ -static bool -opt_if_loop_terminator(nir_if *nif) -{ - nir_block *break_blk = NULL; - nir_block *continue_from_blk = NULL; - bool continue_from_then = true; - - nir_block *last_then = nir_if_last_then_block(nif); - nir_block *last_else = nir_if_last_else_block(nif); - - if (nir_block_ends_in_break(last_then)) { - break_blk = last_then; - continue_from_blk = last_else; - continue_from_then = false; - } else if (nir_block_ends_in_break(last_else)) { - break_blk = last_else; - continue_from_blk = last_then; - } - - /* Continue if the if-statement contained no jumps at all */ - if (!break_blk) - return false; - - /* If the continue from block is empty then return as there is nothing to - * move. - */ - nir_block *first_continue_from_blk = continue_from_then ? - nir_if_first_then_block(nif) : - nir_if_first_else_block(nif); - if (is_block_empty(first_continue_from_blk)) - return false; - - if (nir_block_ends_in_jump(continue_from_blk)) - return false; - - /* Even though this if statement has a jump on one side, we may still have - * phis afterwards. Single-source phis can be produced by loop unrolling - * or dead control-flow passes and are perfectly legal. Run a quick phi - * removal on the block after the if to clean up any such phis. - */ - nir_opt_remove_phis_block(nir_cf_node_as_block(nir_cf_node_next(&nif->cf_node))); - - /* Finally, move the continue from branch after the if-statement. */ - nir_cf_list tmp; - nir_cf_extract(&tmp, nir_before_block(first_continue_from_blk), - nir_after_block(continue_from_blk)); - nir_cf_reinsert(&tmp, nir_after_cf_node(&nif->cf_node)); - - return true; -} - -static bool -evaluate_if_condition(nir_if *nif, nir_cursor cursor, bool *value) -{ - nir_block *use_block = nir_cursor_current_block(cursor); - if (nir_block_dominates(nir_if_first_then_block(nif), use_block)) { - *value = true; - return true; - } else if (nir_block_dominates(nir_if_first_else_block(nif), use_block)) { - *value = false; - return true; - } else { - return false; - } -} - -static nir_ssa_def * -clone_alu_and_replace_src_defs(nir_builder *b, const nir_alu_instr *alu, - nir_ssa_def **src_defs) -{ - nir_alu_instr *nalu = nir_alu_instr_create(b->shader, alu->op); - nalu->exact = alu->exact; - - nir_ssa_dest_init(&nalu->instr, &nalu->dest.dest, - alu->dest.dest.ssa.num_components, - alu->dest.dest.ssa.bit_size, NULL); - - nalu->dest.saturate = alu->dest.saturate; - nalu->dest.write_mask = alu->dest.write_mask; - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - assert(alu->src[i].src.is_ssa); - nalu->src[i].src = nir_src_for_ssa(src_defs[i]); - nalu->src[i].negate = alu->src[i].negate; - nalu->src[i].abs = alu->src[i].abs; - memcpy(nalu->src[i].swizzle, alu->src[i].swizzle, - sizeof(nalu->src[i].swizzle)); - } - - nir_builder_instr_insert(b, &nalu->instr); - - return &nalu->dest.dest.ssa;; -} - -/* - * This propagates if condition evaluation down the chain of some alu - * instructions. For example by checking the use of some of the following alu - * instruction we can eventually replace ssa_107 with NIR_TRUE. - * - * loop { - * block block_1: - * vec1 32 ssa_85 = load_const (0x00000002) - * vec1 32 ssa_86 = ieq ssa_48, ssa_85 - * vec1 32 ssa_87 = load_const (0x00000001) - * vec1 32 ssa_88 = ieq ssa_48, ssa_87 - * vec1 32 ssa_89 = ior ssa_86, ssa_88 - * vec1 32 ssa_90 = ieq ssa_48, ssa_0 - * vec1 32 ssa_91 = ior ssa_89, ssa_90 - * if ssa_86 { - * block block_2: - * ... - * break - * } else { - * block block_3: - * } - * block block_4: - * if ssa_88 { - * block block_5: - * ... - * break - * } else { - * block block_6: - * } - * block block_7: - * if ssa_90 { - * block block_8: - * ... - * break - * } else { - * block block_9: - * } - * block block_10: - * vec1 32 ssa_107 = inot ssa_91 - * if ssa_107 { - * block block_11: - * break - * } else { - * block block_12: - * } - * } - */ -static bool -propagate_condition_eval(nir_builder *b, nir_if *nif, nir_src *use_src, - nir_src *alu_use, nir_alu_instr *alu) -{ - bool bool_value; - b->cursor = nir_before_src(alu_use); - if (!evaluate_if_condition(nif, b->cursor, &bool_value)) - return false; - - nir_ssa_def *def[NIR_MAX_VEC_COMPONENTS] = {0}; - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (alu->src[i].src.ssa == use_src->ssa) { - def[i] = nir_imm_bool(b, bool_value); - } else { - def[i] = alu->src[i].src.ssa; - } - } - - nir_ssa_def *nalu = clone_alu_and_replace_src_defs(b, alu, def); - - /* Rewrite use to use new alu instruction */ - nir_src new_src = nir_src_for_ssa(nalu); - - if (alu_use->is_if) - nir_if_rewrite_condition(alu_use->parent_if, new_src); - else - nir_instr_rewrite_src(alu_use->parent_instr, alu_use, new_src); - - return true; -} - -static bool -can_propagate_through_alu(nir_src *src) -{ - if (src->parent_instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(src->parent_instr); - switch (alu->op) { - case nir_op_ior: - case nir_op_iand: - case nir_op_inot: - case nir_op_b2i32: - return true; - case nir_op_bcsel: - return src == &alu->src[0].src; - default: - return false; - } -} - -static bool -evaluate_condition_use(nir_builder *b, nir_if *nif, nir_src *use_src) -{ - bool progress = false; - - b->cursor = nir_before_src(use_src); - - bool bool_value; - if (evaluate_if_condition(nif, b->cursor, &bool_value)) { - /* Rewrite use to use const */ - nir_src imm_src = nir_src_for_ssa(nir_imm_bool(b, bool_value)); - if (use_src->is_if) - nir_if_rewrite_condition(use_src->parent_if, imm_src); - else - nir_instr_rewrite_src(use_src->parent_instr, use_src, imm_src); - - progress = true; - } - - if (!use_src->is_if && can_propagate_through_alu(use_src)) { - nir_alu_instr *alu = nir_instr_as_alu(use_src->parent_instr); - - nir_foreach_use_including_if_safe(alu_use, &alu->dest.dest.ssa) - progress |= propagate_condition_eval(b, nif, use_src, alu_use, alu); - } - - return progress; -} - -static bool -opt_if_evaluate_condition_use(nir_builder *b, nir_if *nif) -{ - bool progress = false; - - /* Evaluate any uses of the if condition inside the if branches */ - assert(nif->condition.is_ssa); - nir_foreach_use_including_if_safe(use_src, nif->condition.ssa) { - if (!(use_src->is_if && use_src->parent_if == nif)) - progress |= evaluate_condition_use(b, nif, use_src); - } - - return progress; -} - -static bool -rewrite_comp_uses_within_if(nir_builder *b, nir_if *nif, bool invert, - nir_ssa_scalar scalar, nir_ssa_scalar new_scalar) -{ - bool progress = false; - - nir_block *first = invert ? nir_if_first_else_block(nif) : nir_if_first_then_block(nif); - nir_block *last = invert ? nir_if_last_else_block(nif) : nir_if_last_then_block(nif); - - nir_ssa_def *new_ssa = NULL; - nir_foreach_use_safe(use, scalar.def) { - if (use->parent_instr->block->index < first->index || - use->parent_instr->block->index > last->index) - continue; - - /* Only rewrite users which use only the new component. This is to avoid a - * situation where copy propagation will undo the rewrite and we risk an infinite - * loop. - * - * We could rewrite users which use a mix of the old and new components, but if - * nir_src_components_read() is incomplete, then we risk the new component actually being - * unused and some optimization later undoing the rewrite. - */ - if (nir_src_components_read(use) != BITFIELD64_BIT(scalar.comp)) - continue; - - if (!new_ssa) { - b->cursor = nir_before_cf_node(&nif->cf_node); - new_ssa = nir_channel(b, new_scalar.def, new_scalar.comp); - if (scalar.def->num_components > 1) { - nir_ssa_def *vec = nir_ssa_undef(b, scalar.def->num_components, scalar.def->bit_size); - new_ssa = nir_vector_insert_imm(b, vec, new_ssa, scalar.comp); - } - } - - nir_instr_rewrite_src_ssa(use->parent_instr, use, new_ssa); - progress = true; - } - - return progress; -} - -/* - * This optimization turns: - * - * if (a == (b=readfirstlane(a))) - * use(a) - * if (c == (d=load_const)) - * use(c) - * - * into: - * - * if (a == (b=readfirstlane(a))) - * use(b) - * if (c == (d=load_const)) - * use(d) -*/ -static bool -opt_if_rewrite_uniform_uses(nir_builder *b, nir_if *nif, nir_ssa_scalar cond, bool accept_ine) -{ - bool progress = false; - - if (!nir_ssa_scalar_is_alu(cond)) - return false; - - nir_op op = nir_ssa_scalar_alu_op(cond); - if (op == nir_op_iand) { - progress |= opt_if_rewrite_uniform_uses(b, nif, nir_ssa_scalar_chase_alu_src(cond, 0), false); - progress |= opt_if_rewrite_uniform_uses(b, nif, nir_ssa_scalar_chase_alu_src(cond, 1), false); - return progress; - } - - if (op != nir_op_ieq && (op != nir_op_ine || !accept_ine)) - return false; - - for (unsigned i = 0; i < 2; i++) { - nir_ssa_scalar src_uni = nir_ssa_scalar_chase_alu_src(cond, i); - nir_ssa_scalar src_div = nir_ssa_scalar_chase_alu_src(cond, !i); - - if (src_uni.def->parent_instr->type == nir_instr_type_load_const && src_div.def != src_uni.def) - return rewrite_comp_uses_within_if(b, nif, op == nir_op_ine, src_div, src_uni); - - if (src_uni.def->parent_instr->type != nir_instr_type_intrinsic) - continue; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(src_uni.def->parent_instr); - if (intrin->intrinsic != nir_intrinsic_read_first_invocation && - (intrin->intrinsic != nir_intrinsic_reduce || nir_intrinsic_cluster_size(intrin))) - continue; - - nir_ssa_scalar intrin_src = {intrin->src[0].ssa, src_uni.comp}; - nir_ssa_scalar resolved_intrin_src = nir_ssa_scalar_resolved(intrin_src.def, intrin_src.comp); - - if (resolved_intrin_src.comp != src_div.comp || resolved_intrin_src.def != src_div.def) - continue; - - progress |= rewrite_comp_uses_within_if(b, nif, op == nir_op_ine, resolved_intrin_src, src_uni); - if (intrin_src.comp != resolved_intrin_src.comp || intrin_src.def != resolved_intrin_src.def) - progress |= rewrite_comp_uses_within_if(b, nif, op == nir_op_ine, intrin_src, src_uni); - - return progress; - } - - return false; -} - -static void -simple_merge_if(nir_if *dest_if, nir_if *src_if, bool dest_if_then, - bool src_if_then) -{ - /* Now merge the if branch */ - nir_block *dest_blk = dest_if_then ? nir_if_last_then_block(dest_if) - : nir_if_last_else_block(dest_if); - - struct exec_list *list = src_if_then ? &src_if->then_list - : &src_if->else_list; - - nir_cf_list if_cf_list; - nir_cf_extract(&if_cf_list, nir_before_cf_list(list), - nir_after_cf_list(list)); - nir_cf_reinsert(&if_cf_list, nir_after_block(dest_blk)); -} - -static bool -opt_if_merge(nir_if *nif) -{ - bool progress = false; - - nir_block *next_blk = nir_cf_node_cf_tree_next(&nif->cf_node); - if (!next_blk || !nif->condition.is_ssa) - return false; - - nir_if *next_if = nir_block_get_following_if(next_blk); - if (!next_if || !next_if->condition.is_ssa) - return false; - - /* Here we merge two consecutive ifs that have the same condition e.g: - * - * if ssa_12 { - * ... - * } else { - * ... - * } - * if ssa_12 { - * ... - * } else { - * ... - * } - * - * Note: This only merges if-statements when the block between them is - * empty. The reason we don't try to merge ifs that just have phis between - * them is because this can result in increased register pressure. For - * example when merging if ladders created by indirect indexing. - */ - if (nif->condition.ssa == next_if->condition.ssa && - exec_list_is_empty(&next_blk->instr_list)) { - - /* This optimization isn't made to work in this case and - * opt_if_evaluate_condition_use will optimize it later. - */ - if (nir_block_ends_in_jump(nir_if_last_then_block(nif)) || - nir_block_ends_in_jump(nir_if_last_else_block(nif))) - return false; - - simple_merge_if(nif, next_if, true, true); - simple_merge_if(nif, next_if, false, false); - - nir_block *new_then_block = nir_if_last_then_block(nif); - nir_block *new_else_block = nir_if_last_else_block(nif); - - nir_block *old_then_block = nir_if_last_then_block(next_if); - nir_block *old_else_block = nir_if_last_else_block(next_if); - - /* Rewrite the predecessor block for any phis following the second - * if-statement. - */ - rewrite_phi_predecessor_blocks(next_if, old_then_block, - old_else_block, - new_then_block, - new_else_block); - - /* Move phis after merged if to avoid them being deleted when we remove - * the merged if-statement. - */ - nir_block *after_next_if_block = - nir_cf_node_as_block(nir_cf_node_next(&next_if->cf_node)); - - nir_foreach_instr_safe(instr, after_next_if_block) { - if (instr->type != nir_instr_type_phi) - break; - - exec_node_remove(&instr->node); - exec_list_push_tail(&next_blk->instr_list, &instr->node); - instr->block = next_blk; - } - - nir_cf_node_remove(&next_if->cf_node); - - progress = true; - } - - return progress; -} - -static bool -opt_if_cf_list(nir_builder *b, struct exec_list *cf_list, - nir_opt_if_options options) -{ - bool progress = false; - foreach_list_typed(nir_cf_node, cf_node, node, cf_list) { - switch (cf_node->type) { - case nir_cf_node_block: - break; - - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(cf_node); - progress |= opt_if_cf_list(b, &nif->then_list, - options); - progress |= opt_if_cf_list(b, &nif->else_list, - options); - progress |= opt_if_loop_terminator(nif); - progress |= opt_if_merge(nif); - progress |= opt_if_simplification(b, nif); - if (options & nir_opt_if_optimize_phi_true_false) - progress |= opt_if_phi_is_condition(b, nif); - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - progress |= opt_if_cf_list(b, &loop->body, - options); - progress |= opt_simplify_bcsel_of_phi(b, loop); - progress |= opt_if_loop_last_continue(loop, - options & nir_opt_if_aggressive_last_continue); - break; - } - - case nir_cf_node_function: - unreachable("Invalid cf type"); - } - } - - return progress; -} - -/** - * Optimizations which can create registers are done after other optimizations - * which require SSA. - */ -static bool -opt_if_regs_cf_list(struct exec_list *cf_list) -{ - bool progress = false; - foreach_list_typed(nir_cf_node, cf_node, node, cf_list) { - switch (cf_node->type) { - case nir_cf_node_block: - break; - - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(cf_node); - progress |= opt_if_regs_cf_list(&nif->then_list); - progress |= opt_if_regs_cf_list(&nif->else_list); - if (opt_merge_breaks(nif)) { - /* This optimization might move blocks - * from after the NIF into the NIF */ - progress = true; - opt_if_regs_cf_list(&nif->then_list); - opt_if_regs_cf_list(&nif->else_list); - } - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - progress |= opt_if_regs_cf_list(&loop->body); - progress |= opt_peel_loop_initial_if(loop); - break; - } - - case nir_cf_node_function: - unreachable("Invalid cf type"); - } - } - - return progress; -} - -/** - * These optimisations depend on nir_metadata_block_index and therefore must - * not do anything to cause the metadata to become invalid. - */ -static bool -opt_if_safe_cf_list(nir_builder *b, struct exec_list *cf_list) -{ - bool progress = false; - foreach_list_typed(nir_cf_node, cf_node, node, cf_list) { - switch (cf_node->type) { - case nir_cf_node_block: - break; - - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(cf_node); - progress |= opt_if_safe_cf_list(b, &nif->then_list); - progress |= opt_if_safe_cf_list(b, &nif->else_list); - progress |= opt_if_evaluate_condition_use(b, nif); - nir_ssa_scalar cond = nir_ssa_scalar_resolved(nif->condition.ssa, 0); - progress |= opt_if_rewrite_uniform_uses(b, nif, cond, true); - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - progress |= opt_if_safe_cf_list(b, &loop->body); - progress |= opt_split_alu_of_phi(b, loop); - break; - } - - case nir_cf_node_function: - unreachable("Invalid cf type"); - } - } - - return progress; -} - -bool -nir_opt_if(nir_shader *shader, nir_opt_if_options options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl == NULL) - continue; - - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_metadata_require(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - progress = opt_if_safe_cf_list(&b, &function->impl->body); - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - - bool preserve = true; - - if (opt_if_cf_list(&b, &function->impl->body, options)) { - preserve = false; - progress = true; - } - - if (opt_if_regs_cf_list(&function->impl->body)) { - preserve = false; - progress = true; - - /* If that made progress, we're no longer really in SSA form. We - * need to convert registers back into SSA defs and clean up SSA defs - * that don't dominate their uses. - */ - nir_lower_regs_to_ssa_impl(function->impl); - } - - if (preserve) { - nir_metadata_preserve(function->impl, nir_metadata_none); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_intrinsics.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_intrinsics.c deleted file mode 100644 index 908d193..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_intrinsics.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright © 2017 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** - * \file nir_opt_intrinsics.c - */ - -static bool -src_is_single_use_shuffle(nir_src src, nir_ssa_def **data, nir_ssa_def **index) -{ - nir_intrinsic_instr *shuffle = nir_src_as_intrinsic(src); - if (shuffle == NULL || shuffle->intrinsic != nir_intrinsic_shuffle) - return false; - - /* This is only called when src is part of an ALU op so requiring no if - * uses is reasonable. If we ever want to use this from an if statement, - * we can change it then. - */ - if (!list_is_singular(&shuffle->dest.ssa.uses)) - return false; - - if (nir_ssa_def_used_by_if(&shuffle->dest.ssa)) - return false; - - assert(shuffle->src[0].is_ssa); - assert(shuffle->src[1].is_ssa); - - *data = shuffle->src[0].ssa; - *index = shuffle->src[1].ssa; - - return true; -} - -static nir_ssa_def * -try_opt_bcsel_of_shuffle(nir_builder *b, nir_alu_instr *alu, - bool block_has_discard) -{ - assert(alu->op == nir_op_bcsel); - - /* If we've seen a discard in this block, don't do the optimization. We - * could try to do something fancy where we check if the shuffle is on our - * side of the discard or not but this is good enough for correctness for - * now and subgroup ops in the presence of discard aren't common. - */ - if (block_has_discard) - return false; - - if (!nir_alu_src_is_trivial_ssa(alu, 0)) - return NULL; - - nir_ssa_def *data1, *index1; - if (!nir_alu_src_is_trivial_ssa(alu, 1) || - alu->src[1].src.ssa->parent_instr->block != alu->instr.block || - !src_is_single_use_shuffle(alu->src[1].src, &data1, &index1)) - return NULL; - - nir_ssa_def *data2, *index2; - if (!nir_alu_src_is_trivial_ssa(alu, 2) || - alu->src[2].src.ssa->parent_instr->block != alu->instr.block || - !src_is_single_use_shuffle(alu->src[2].src, &data2, &index2)) - return NULL; - - if (data1 != data2) - return NULL; - - nir_ssa_def *index = nir_bcsel(b, alu->src[0].src.ssa, index1, index2); - nir_ssa_def *shuffle = nir_shuffle(b, data1, index); - - return shuffle; -} - -static bool -opt_intrinsics_alu(nir_builder *b, nir_alu_instr *alu, - bool block_has_discard) -{ - nir_ssa_def *replacement = NULL; - - switch (alu->op) { - case nir_op_bcsel: - replacement = try_opt_bcsel_of_shuffle(b, alu, block_has_discard); - break; - - default: - break; - } - - if (replacement) { - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, - replacement); - nir_instr_remove(&alu->instr); - return true; - } else { - return false; - } -} - -static bool -opt_intrinsics_intrin(nir_builder *b, nir_intrinsic_instr *intrin, - const struct nir_shader_compiler_options *options) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_load_sample_mask_in: { - /* Transform: - * gl_SampleMaskIn == 0 ---> gl_HelperInvocation - * gl_SampleMaskIn != 0 ---> !gl_HelperInvocation - */ - if (!options->optimize_sample_mask_in) - return false; - - bool progress = false; - nir_foreach_use_safe(use_src, &intrin->dest.ssa) { - if (use_src->parent_instr->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(use_src->parent_instr); - - if (alu->op == nir_op_ieq || - alu->op == nir_op_ine) { - /* Check for 0 in either operand. */ - nir_const_value *const_val = - nir_src_as_const_value(alu->src[0].src); - if (!const_val) - const_val = nir_src_as_const_value(alu->src[1].src); - if (!const_val || const_val->i32 != 0) - continue; - - nir_ssa_def *new_expr = nir_load_helper_invocation(b, 1); - - if (alu->op == nir_op_ine) - new_expr = nir_inot(b, new_expr); - - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, - new_expr); - nir_instr_remove(&alu->instr); - progress = true; - } - } - } - return progress; - } - - default: - return false; - } -} - -static bool -opt_intrinsics_impl(nir_function_impl *impl, - const struct nir_shader_compiler_options *options) -{ - nir_builder b; - nir_builder_init(&b, impl); - bool progress = false; - - nir_foreach_block(block, impl) { - bool block_has_discard = false; - - nir_foreach_instr_safe(instr, block) { - b.cursor = nir_before_instr(instr); - - switch (instr->type) { - case nir_instr_type_alu: - if (opt_intrinsics_alu(&b, nir_instr_as_alu(instr), - block_has_discard)) - progress = true; - break; - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic == nir_intrinsic_discard || - intrin->intrinsic == nir_intrinsic_discard_if || - intrin->intrinsic == nir_intrinsic_demote || - intrin->intrinsic == nir_intrinsic_demote_if || - intrin->intrinsic == nir_intrinsic_terminate || - intrin->intrinsic == nir_intrinsic_terminate_if) - block_has_discard = true; - - if (opt_intrinsics_intrin(&b, intrin, options)) - progress = true; - break; - } - - default: - break; - } - } - } - - return progress; -} - -bool -nir_opt_intrinsics(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - if (opt_intrinsics_impl(function->impl, shader->options)) { - progress = true; - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_large_constants.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_large_constants.c deleted file mode 100644 index 3c4fc27..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_large_constants.c +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" - -struct var_info { - nir_variable *var; - - bool is_constant; - bool found_read; - bool duplicate; - - /* Block that has all the variable stores. All the blocks with reads - * should be dominated by this block. - */ - nir_block *block; - - /* If is_constant, hold the collected constant data for this var. */ - uint32_t constant_data_size; - void *constant_data; -}; - -static int -var_info_cmp(const void *_a, const void *_b) -{ - const struct var_info *a = _a; - const struct var_info *b = _b; - uint32_t a_size = a->constant_data_size; - uint32_t b_size = b->constant_data_size; - - if (a->is_constant != b->is_constant) { - return (int)a->is_constant - (int)b->is_constant; - } else if (a_size < b_size) { - return -1; - } else if (a_size > b_size) { - return 1; - } else if (a_size == 0) { - /* Don't call memcmp with invalid pointers. */ - return 0; - } else { - return memcmp(a->constant_data, b->constant_data, a_size); - } -} - -static nir_ssa_def * -build_constant_load(nir_builder *b, nir_deref_instr *deref, - glsl_type_size_align_func size_align) -{ - nir_variable *var = nir_deref_instr_get_variable(deref); - - const unsigned bit_size = glsl_get_bit_size(deref->type); - const unsigned num_components = glsl_get_vector_elements(deref->type); - - UNUSED unsigned var_size, var_align; - size_align(var->type, &var_size, &var_align); - assert(var->data.location % var_align == 0); - - UNUSED unsigned deref_size, deref_align; - size_align(deref->type, &deref_size, &deref_align); - - nir_ssa_def *src = nir_build_deref_offset(b, deref, size_align); - nir_ssa_def *load = - nir_load_constant(b, num_components, bit_size, src, - .base = var->data.location, - .range = var_size, - .align_mul = deref_align, - .align_offset = 0); - - if (load->bit_size < 8) { - /* Booleans are special-cased to be 32-bit */ - assert(glsl_type_is_boolean(deref->type)); - assert(deref_size == num_components * 4); - load->bit_size = 32; - return nir_b2b1(b, load); - } else { - assert(deref_size == num_components * bit_size / 8); - return load; - } -} - -static void -handle_constant_store(void *mem_ctx, struct var_info *info, - nir_deref_instr *deref, nir_const_value *val, - unsigned writemask, - glsl_type_size_align_func size_align) -{ - assert(!nir_deref_instr_has_indirect(deref)); - const unsigned bit_size = glsl_get_bit_size(deref->type); - const unsigned num_components = glsl_get_vector_elements(deref->type); - - if (info->constant_data_size == 0) { - unsigned var_size, var_align; - size_align(info->var->type, &var_size, &var_align); - info->constant_data_size = var_size; - info->constant_data = rzalloc_size(mem_ctx, var_size); - } - - const unsigned offset = nir_deref_instr_get_const_offset(deref, size_align); - if (offset >= info->constant_data_size) - return; - - char *dst = (char *)info->constant_data + offset; - - for (unsigned i = 0; i < num_components; i++) { - if (!(writemask & (1 << i))) - continue; - - switch (bit_size) { - case 1: - /* Booleans are special-cased to be 32-bit */ - ((int32_t *)dst)[i] = -(int)val[i].b; - break; - - case 8: - ((uint8_t *)dst)[i] = val[i].u8; - break; - - case 16: - ((uint16_t *)dst)[i] = val[i].u16; - break; - - case 32: - ((uint32_t *)dst)[i] = val[i].u32; - break; - - case 64: - ((uint64_t *)dst)[i] = val[i].u64; - break; - - default: - unreachable("Invalid bit size"); - } - } -} - -/** Lower large constant variables to shader constant data - * - * This pass looks for large (type_size(var->type) > threshold) variables - * which are statically constant and moves them into shader constant data. - * This is especially useful when large tables are baked into the shader - * source code because they can be moved into a UBO by the driver to reduce - * register pressure and make indirect access cheaper. - */ -bool -nir_opt_large_constants(nir_shader *shader, - glsl_type_size_align_func size_align, - unsigned threshold) -{ - /* Default to a natural alignment if none is provided */ - if (size_align == NULL) - size_align = glsl_get_natural_size_align_bytes; - - /* This only works with a single entrypoint */ - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - - unsigned num_locals = nir_function_impl_index_vars(impl); - - if (num_locals == 0) { - nir_shader_preserve_all_metadata(shader); - return false; - } - - struct var_info *var_infos = ralloc_array(NULL, struct var_info, num_locals); - nir_foreach_function_temp_variable(var, impl) { - var_infos[var->index] = (struct var_info) { - .var = var, - .is_constant = true, - .found_read = false, - }; - } - - nir_metadata_require(impl, nir_metadata_dominance); - - /* First, walk through the shader and figure out what variables we can - * lower to the constant blob. - */ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_deref) { - /* If we ever see a complex use of a deref_var, we have to assume - * that variable is non-constant because we can't guarantee we - * will find all of the writers of that variable. - */ - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type == nir_deref_type_var && - deref->var->data.mode == nir_var_function_temp && - nir_deref_instr_has_complex_use(deref, 0)) - var_infos[deref->var->index].is_constant = false; - continue; - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - bool src_is_const = false; - nir_deref_instr *src_deref = NULL, *dst_deref = NULL; - unsigned writemask = 0; - switch (intrin->intrinsic) { - case nir_intrinsic_store_deref: - dst_deref = nir_src_as_deref(intrin->src[0]); - src_is_const = nir_src_is_const(intrin->src[1]); - writemask = nir_intrinsic_write_mask(intrin); - break; - - case nir_intrinsic_load_deref: - src_deref = nir_src_as_deref(intrin->src[0]); - break; - - case nir_intrinsic_copy_deref: - assert(!"Lowering of copy_deref with large constants is prohibited"); - break; - - default: - continue; - } - - if (dst_deref && nir_deref_mode_must_be(dst_deref, nir_var_function_temp)) { - nir_variable *var = nir_deref_instr_get_variable(dst_deref); - if (var == NULL) - continue; - - assert(var->data.mode == nir_var_function_temp); - - struct var_info *info = &var_infos[var->index]; - if (!info->is_constant) - continue; - - if (!info->block) - info->block = block; - - /* We only consider variables constant if they only have constant - * stores, all the stores come before any reads, and all stores - * come from the same block. We also can't handle indirect stores. - */ - if (!src_is_const || info->found_read || block != info->block || - nir_deref_instr_has_indirect(dst_deref)) { - info->is_constant = false; - } else { - nir_const_value *val = nir_src_as_const_value(intrin->src[1]); - handle_constant_store(var_infos, info, dst_deref, val, writemask, - size_align); - } - } - - if (src_deref && nir_deref_mode_must_be(src_deref, nir_var_function_temp)) { - nir_variable *var = nir_deref_instr_get_variable(src_deref); - if (var == NULL) - continue; - - assert(var->data.mode == nir_var_function_temp); - - /* We only consider variables constant if all the reads are - * dominated by the block that writes to it. - */ - struct var_info *info = &var_infos[var->index]; - if (!info->is_constant) - continue; - - if (!info->block || !nir_block_dominates(info->block, block)) - info->is_constant = false; - - info->found_read = true; - } - } - } - - /* Allocate constant data space for each variable that just has constant - * data. We sort them by size and content so we can easily find - * duplicates. - */ - const unsigned old_constant_data_size = shader->constant_data_size; - qsort(var_infos, num_locals, sizeof(struct var_info), var_info_cmp); - for (int i = 0; i < num_locals; i++) { - struct var_info *info = &var_infos[i]; - - /* Fix up indices after we sorted. */ - info->var->index = i; - - if (!info->is_constant) - continue; - - unsigned var_size, var_align; - size_align(info->var->type, &var_size, &var_align); - if (var_size <= threshold || !info->found_read) { - /* Don't bother lowering small stuff or data that's never read */ - info->is_constant = false; - continue; - } - - if (i > 0 && var_info_cmp(info, &var_infos[i - 1]) == 0) { - info->var->data.location = var_infos[i - 1].var->data.location; - info->duplicate = true; - } else { - info->var->data.location = ALIGN_POT(shader->constant_data_size, var_align); - shader->constant_data_size = info->var->data.location + var_size; - } - } - - if (shader->constant_data_size == old_constant_data_size) { - nir_shader_preserve_all_metadata(shader); - ralloc_free(var_infos); - return false; - } - - assert(shader->constant_data_size > old_constant_data_size); - shader->constant_data = rerzalloc_size(shader, shader->constant_data, - old_constant_data_size, - shader->constant_data_size); - for (int i = 0; i < num_locals; i++) { - struct var_info *info = &var_infos[i]; - if (!info->duplicate && info->is_constant) { - memcpy((char *)shader->constant_data + info->var->data.location, - info->constant_data, info->constant_data_size); - } - } - - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_function_temp)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var == NULL) - continue; - - struct var_info *info = &var_infos[var->index]; - if (info->is_constant) { - b.cursor = nir_after_instr(&intrin->instr); - nir_ssa_def *val = build_constant_load(&b, deref, size_align); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - val); - nir_instr_remove(&intrin->instr); - nir_deref_instr_remove_if_unused(deref); - } - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is(deref, nir_var_function_temp)) - continue; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var == NULL) - continue; - - struct var_info *info = &var_infos[var->index]; - if (info->is_constant) { - nir_instr_remove(&intrin->instr); - nir_deref_instr_remove_if_unused(deref); - } - break; - } - case nir_intrinsic_copy_deref: - default: - continue; - } - } - } - - /* Clean up the now unused variables */ - for (int i = 0; i < num_locals; i++) { - struct var_info *info = &var_infos[i]; - if (info->is_constant) - exec_node_remove(&info->var->node); - } - - ralloc_free(var_infos); - - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_load_store_vectorize.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_load_store_vectorize.c deleted file mode 100644 index e757b5a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_load_store_vectorize.c +++ /dev/null @@ -1,1549 +0,0 @@ -/* - * Copyright © 2019 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * Although it's called a load/store "vectorization" pass, this also combines - * intersecting and identical loads/stores. It currently supports derefs, ubo, - * ssbo and push constant loads/stores. - * - * This doesn't handle copy_deref intrinsics and assumes that - * nir_lower_alu_to_scalar() has been called and that the IR is free from ALU - * modifiers. It also assumes that derefs have explicitly laid out types. - * - * After vectorization, the backend may want to call nir_lower_alu_to_scalar() - * and nir_lower_pack(). Also this creates cast instructions taking derefs as a - * source and some parts of NIR may not be able to handle that well. - * - * There are a few situations where this doesn't vectorize as well as it could: - * - It won't turn four consecutive vec3 loads into 3 vec4 loads. - * - It doesn't do global vectorization. - * Handling these cases probably wouldn't provide much benefit though. - * - * This probably doesn't handle big-endian GPUs correctly. -*/ - -#include "nir.h" -#include "nir_deref.h" -#include "nir_builder.h" -#include "nir_worklist.h" -#include "../../util/u_dynarray.h" - -#include - -struct intrinsic_info { - nir_variable_mode mode; /* 0 if the mode is obtained from the deref. */ - nir_intrinsic_op op; - bool is_atomic; - /* Indices into nir_intrinsic::src[] or -1 if not applicable. */ - int resource_src; /* resource (e.g. from vulkan_resource_index) */ - int base_src; /* offset which it loads/stores from */ - int deref_src; /* deref which is loads/stores from */ - int value_src; /* the data it is storing */ -}; - -static const struct intrinsic_info * -get_info(nir_intrinsic_op op) { - switch (op) { -#define INFO(mode, op, atomic, res, base, deref, val) \ -case nir_intrinsic_##op: {\ - static const struct intrinsic_info op##_info = {mode, nir_intrinsic_##op, atomic, res, base, deref, val};\ - return &op##_info;\ -} -#define LOAD(mode, op, res, base, deref) INFO(mode, load_##op, false, res, base, deref, -1) -#define STORE(mode, op, res, base, deref, val) INFO(mode, store_##op, false, res, base, deref, val) -#define ATOMIC(mode, type, op, res, base, deref, val) INFO(mode, type##_atomic_##op, true, res, base, deref, val) - LOAD(nir_var_mem_push_const, push_constant, -1, 0, -1) - LOAD(nir_var_mem_ubo, ubo, 0, 1, -1) - LOAD(nir_var_mem_ssbo, ssbo, 0, 1, -1) - STORE(nir_var_mem_ssbo, ssbo, 1, 2, -1, 0) - LOAD(0, deref, -1, -1, 0) - STORE(0, deref, -1, -1, 0, 1) - LOAD(nir_var_mem_shared, shared, -1, 0, -1) - STORE(nir_var_mem_shared, shared, -1, 1, -1, 0) - LOAD(nir_var_mem_global, global, -1, 0, -1) - STORE(nir_var_mem_global, global, -1, 1, -1, 0) - LOAD(nir_var_mem_task_payload, task_payload, -1, 0, -1) - STORE(nir_var_mem_task_payload, task_payload, -1, 1, -1, 0) - ATOMIC(nir_var_mem_ssbo, ssbo, add, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, imin, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, umin, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, imax, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, umax, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, and, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, or, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, xor, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, exchange, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, comp_swap, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, fadd, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, fmin, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, fmax, 0, 1, -1, 2) - ATOMIC(nir_var_mem_ssbo, ssbo, fcomp_swap, 0, 1, -1, 2) - ATOMIC(0, deref, add, -1, -1, 0, 1) - ATOMIC(0, deref, imin, -1, -1, 0, 1) - ATOMIC(0, deref, umin, -1, -1, 0, 1) - ATOMIC(0, deref, imax, -1, -1, 0, 1) - ATOMIC(0, deref, umax, -1, -1, 0, 1) - ATOMIC(0, deref, and, -1, -1, 0, 1) - ATOMIC(0, deref, or, -1, -1, 0, 1) - ATOMIC(0, deref, xor, -1, -1, 0, 1) - ATOMIC(0, deref, exchange, -1, -1, 0, 1) - ATOMIC(0, deref, comp_swap, -1, -1, 0, 1) - ATOMIC(0, deref, fadd, -1, -1, 0, 1) - ATOMIC(0, deref, fmin, -1, -1, 0, 1) - ATOMIC(0, deref, fmax, -1, -1, 0, 1) - ATOMIC(0, deref, fcomp_swap, -1, -1, 0, 1) - ATOMIC(nir_var_mem_shared, shared, add, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, imin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, umin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, imax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, umax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, and, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, or, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, xor, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, exchange, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, comp_swap, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, fadd, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, fmin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, fmax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_shared, shared, fcomp_swap, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, add, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, imin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, umin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, imax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, umax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, and, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, or, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, xor, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, exchange, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, comp_swap, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, fadd, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, fmin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, fmax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_global, global, fcomp_swap, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, add, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, imin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, umin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, imax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, umax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, and, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, or, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, xor, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, exchange, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, comp_swap, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, fadd, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, fmin, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, fmax, -1, 0, -1, 1) - ATOMIC(nir_var_mem_task_payload, task_payload, fcomp_swap, -1, 0, -1, 1) - LOAD(nir_var_shader_temp, stack, -1, -1, -1) - STORE(nir_var_shader_temp, stack, -1, -1, -1, 0) - LOAD(nir_var_mem_ssbo, ssbo_uniform_block_intel, 0, 1, -1) - LOAD(nir_var_mem_shared, shared_uniform_block_intel, -1, 0, -1) - default: - break; -#undef ATOMIC -#undef STORE -#undef LOAD -#undef INFO - } - return NULL; -} - -/* - * Information used to compare memory operations. - * It canonically represents an offset as: - * `offset_defs[0]*offset_defs_mul[0] + offset_defs[1]*offset_defs_mul[1] + ...` - * "offset_defs" is sorted in ascenting order by the ssa definition's index. - * "resource" or "var" may be NULL. - */ -struct entry_key { - nir_ssa_def *resource; - nir_variable *var; - unsigned offset_def_count; - nir_ssa_scalar *offset_defs; - uint64_t *offset_defs_mul; -}; - -/* Information on a single memory operation. */ -struct entry { - struct list_head head; - unsigned index; - - struct entry_key *key; - union { - uint64_t offset; /* sign-extended */ - int64_t offset_signed; - }; - uint32_t align_mul; - uint32_t align_offset; - - nir_instr *instr; - nir_intrinsic_instr *intrin; - const struct intrinsic_info *info; - enum gl_access_qualifier access; - bool is_store; - - nir_deref_instr *deref; -}; - -struct vectorize_ctx { - nir_shader *shader; - const nir_load_store_vectorize_options *options; - struct list_head entries[nir_num_variable_modes]; - struct hash_table *loads[nir_num_variable_modes]; - struct hash_table *stores[nir_num_variable_modes]; -}; - -static uint32_t hash_entry_key(const void *key_) -{ - /* this is careful to not include pointers in the hash calculation so that - * the order of the hash table walk is deterministic */ - struct entry_key *key = (struct entry_key*)key_; - - uint32_t hash = 0; - if (key->resource) - hash = XXH32(&key->resource->index, sizeof(key->resource->index), hash); - if (key->var) { - hash = XXH32(&key->var->index, sizeof(key->var->index), hash); - unsigned mode = key->var->data.mode; - hash = XXH32(&mode, sizeof(mode), hash); - } - - for (unsigned i = 0; i < key->offset_def_count; i++) { - hash = XXH32(&key->offset_defs[i].def->index, sizeof(key->offset_defs[i].def->index), hash); - hash = XXH32(&key->offset_defs[i].comp, sizeof(key->offset_defs[i].comp), hash); - } - - hash = XXH32(key->offset_defs_mul, key->offset_def_count * sizeof(uint64_t), hash); - - return hash; -} - -static bool entry_key_equals(const void *a_, const void *b_) -{ - struct entry_key *a = (struct entry_key*)a_; - struct entry_key *b = (struct entry_key*)b_; - - if (a->var != b->var || a->resource != b->resource) - return false; - - if (a->offset_def_count != b->offset_def_count) - return false; - - for (unsigned i = 0; i < a->offset_def_count; i++) { - if (a->offset_defs[i].def != b->offset_defs[i].def || - a->offset_defs[i].comp != b->offset_defs[i].comp) - return false; - } - - size_t offset_def_mul_size = a->offset_def_count * sizeof(uint64_t); - if (a->offset_def_count && - memcmp(a->offset_defs_mul, b->offset_defs_mul, offset_def_mul_size)) - return false; - - return true; -} - -static void delete_entry_dynarray(struct hash_entry *entry) -{ - struct util_dynarray *arr = (struct util_dynarray *)entry->data; - ralloc_free(arr); -} - -static int sort_entries(const void *a_, const void *b_) -{ - struct entry *a = *(struct entry*const*)a_; - struct entry *b = *(struct entry*const*)b_; - - if (a->offset_signed > b->offset_signed) - return 1; - else if (a->offset_signed < b->offset_signed) - return -1; - else - return 0; -} - -static unsigned -get_bit_size(struct entry *entry) -{ - unsigned size = entry->is_store ? - entry->intrin->src[entry->info->value_src].ssa->bit_size : - entry->intrin->dest.ssa.bit_size; - return size == 1 ? 32u : size; -} - -/* If "def" is from an alu instruction with the opcode "op" and one of it's - * sources is a constant, update "def" to be the non-constant source, fill "c" - * with the constant and return true. */ -static bool -parse_alu(nir_ssa_scalar *def, nir_op op, uint64_t *c) -{ - if (!nir_ssa_scalar_is_alu(*def) || nir_ssa_scalar_alu_op(*def) != op) - return false; - - nir_ssa_scalar src0 = nir_ssa_scalar_chase_alu_src(*def, 0); - nir_ssa_scalar src1 = nir_ssa_scalar_chase_alu_src(*def, 1); - if (op != nir_op_ishl && nir_ssa_scalar_is_const(src0)) { - *c = nir_ssa_scalar_as_uint(src0); - *def = src1; - } else if (nir_ssa_scalar_is_const(src1)) { - *c = nir_ssa_scalar_as_uint(src1); - *def = src0; - } else { - return false; - } - return true; -} - -/* Parses an offset expression such as "a * 16 + 4" and "(a * 16 + 4) * 64 + 32". */ -static void -parse_offset(nir_ssa_scalar *base, uint64_t *base_mul, uint64_t *offset) -{ - if (nir_ssa_scalar_is_const(*base)) { - *offset = nir_ssa_scalar_as_uint(*base); - base->def = NULL; - return; - } - - uint64_t mul = 1; - uint64_t add = 0; - bool progress = false; - do { - uint64_t mul2 = 1, add2 = 0; - - progress = parse_alu(base, nir_op_imul, &mul2); - mul *= mul2; - - mul2 = 0; - progress |= parse_alu(base, nir_op_ishl, &mul2); - mul <<= mul2; - - progress |= parse_alu(base, nir_op_iadd, &add2); - add += add2 * mul; - - if (nir_ssa_scalar_is_alu(*base) && nir_ssa_scalar_alu_op(*base) == nir_op_mov) { - *base = nir_ssa_scalar_chase_alu_src(*base, 0); - progress = true; - } - } while (progress); - - if (base->def->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(base->def->parent_instr); - if (intrin->intrinsic == nir_intrinsic_load_vulkan_descriptor) - base->def = NULL; - } - - *base_mul = mul; - *offset = add; -} - -static unsigned -type_scalar_size_bytes(const struct glsl_type *type) -{ - assert(glsl_type_is_vector_or_scalar(type) || - glsl_type_is_matrix(type)); - return glsl_type_is_boolean(type) ? 4u : glsl_get_bit_size(type) / 8u; -} - -static unsigned -add_to_entry_key(nir_ssa_scalar *offset_defs, uint64_t *offset_defs_mul, - unsigned offset_def_count, nir_ssa_scalar def, uint64_t mul) -{ - mul = util_mask_sign_extend(mul, def.def->bit_size); - - for (unsigned i = 0; i <= offset_def_count; i++) { - if (i == offset_def_count || def.def->index > offset_defs[i].def->index) { - /* insert before i */ - memmove(offset_defs + i + 1, offset_defs + i, - (offset_def_count - i) * sizeof(nir_ssa_scalar)); - memmove(offset_defs_mul + i + 1, offset_defs_mul + i, - (offset_def_count - i) * sizeof(uint64_t)); - offset_defs[i] = def; - offset_defs_mul[i] = mul; - return 1; - } else if (def.def == offset_defs[i].def && - def.comp == offset_defs[i].comp) { - /* merge with offset_def at i */ - offset_defs_mul[i] += mul; - return 0; - } - } - unreachable("Unreachable."); - return 0; -} - -static struct entry_key * -create_entry_key_from_deref(void *mem_ctx, - struct vectorize_ctx *ctx, - nir_deref_path *path, - uint64_t *offset_base) -{ - unsigned path_len = 0; - while (path->path[path_len]) - path_len++; - - nir_ssa_scalar offset_defs_stack[32]; - uint64_t offset_defs_mul_stack[32]; - nir_ssa_scalar *offset_defs = offset_defs_stack; - uint64_t *offset_defs_mul = offset_defs_mul_stack; - if (path_len > 32) { - offset_defs = malloc(path_len * sizeof(nir_ssa_scalar)); - offset_defs_mul = malloc(path_len * sizeof(uint64_t)); - } - unsigned offset_def_count = 0; - - struct entry_key* key = ralloc(mem_ctx, struct entry_key); - key->resource = NULL; - key->var = NULL; - *offset_base = 0; - - for (unsigned i = 0; i < path_len; i++) { - nir_deref_instr *parent = i ? path->path[i - 1] : NULL; - nir_deref_instr *deref = path->path[i]; - - switch (deref->deref_type) { - case nir_deref_type_var: { - assert(!parent); - key->var = deref->var; - break; - } - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: { - assert(parent); - nir_ssa_def *index = deref->arr.index.ssa; - uint32_t stride = nir_deref_instr_array_stride(deref); - - nir_ssa_scalar base = {.def=index, .comp=0}; - uint64_t offset = 0, base_mul = 1; - parse_offset(&base, &base_mul, &offset); - offset = util_mask_sign_extend(offset, index->bit_size); - - *offset_base += offset * stride; - if (base.def) { - offset_def_count += add_to_entry_key(offset_defs, offset_defs_mul, - offset_def_count, - base, base_mul * stride); - } - break; - } - case nir_deref_type_struct: { - assert(parent); - int offset = glsl_get_struct_field_offset(parent->type, deref->strct.index); - *offset_base += offset; - break; - } - case nir_deref_type_cast: { - if (!parent) - key->resource = deref->parent.ssa; - break; - } - default: - unreachable("Unhandled deref type"); - } - } - - key->offset_def_count = offset_def_count; - key->offset_defs = ralloc_array(mem_ctx, nir_ssa_scalar, offset_def_count); - key->offset_defs_mul = ralloc_array(mem_ctx, uint64_t, offset_def_count); - memcpy(key->offset_defs, offset_defs, offset_def_count * sizeof(nir_ssa_scalar)); - memcpy(key->offset_defs_mul, offset_defs_mul, offset_def_count * sizeof(uint64_t)); - - if (offset_defs != offset_defs_stack) - free(offset_defs); - if (offset_defs_mul != offset_defs_mul_stack) - free(offset_defs_mul); - - return key; -} - -static unsigned -parse_entry_key_from_offset(struct entry_key *key, unsigned size, unsigned left, - nir_ssa_scalar base, uint64_t base_mul, uint64_t *offset) -{ - uint64_t new_mul; - uint64_t new_offset; - parse_offset(&base, &new_mul, &new_offset); - *offset += new_offset * base_mul; - - if (!base.def) - return 0; - - base_mul *= new_mul; - - assert(left >= 1); - - if (left >= 2) { - if (nir_ssa_scalar_is_alu(base) && nir_ssa_scalar_alu_op(base) == nir_op_iadd) { - nir_ssa_scalar src0 = nir_ssa_scalar_chase_alu_src(base, 0); - nir_ssa_scalar src1 = nir_ssa_scalar_chase_alu_src(base, 1); - unsigned amount = parse_entry_key_from_offset(key, size, left - 1, src0, base_mul, offset); - amount += parse_entry_key_from_offset(key, size + amount, left - amount, src1, base_mul, offset); - return amount; - } - } - - return add_to_entry_key(key->offset_defs, key->offset_defs_mul, size, base, base_mul); -} - -static struct entry_key * -create_entry_key_from_offset(void *mem_ctx, nir_ssa_def *base, uint64_t base_mul, uint64_t *offset) -{ - struct entry_key *key = ralloc(mem_ctx, struct entry_key); - key->resource = NULL; - key->var = NULL; - if (base) { - nir_ssa_scalar offset_defs[32]; - uint64_t offset_defs_mul[32]; - key->offset_defs = offset_defs; - key->offset_defs_mul = offset_defs_mul; - - nir_ssa_scalar scalar = {.def=base, .comp=0}; - key->offset_def_count = parse_entry_key_from_offset(key, 0, 32, scalar, base_mul, offset); - - key->offset_defs = ralloc_array(mem_ctx, nir_ssa_scalar, key->offset_def_count); - key->offset_defs_mul = ralloc_array(mem_ctx, uint64_t, key->offset_def_count); - memcpy(key->offset_defs, offset_defs, key->offset_def_count * sizeof(nir_ssa_scalar)); - memcpy(key->offset_defs_mul, offset_defs_mul, key->offset_def_count * sizeof(uint64_t)); - } else { - key->offset_def_count = 0; - key->offset_defs = NULL; - key->offset_defs_mul = NULL; - } - return key; -} - -static nir_variable_mode -get_variable_mode(struct entry *entry) -{ - if (entry->info->mode) - return entry->info->mode; - assert(entry->deref && util_bitcount(entry->deref->modes) == 1); - return entry->deref->modes; -} - -static unsigned -mode_to_index(nir_variable_mode mode) -{ - assert(util_bitcount(mode) == 1); - - /* Globals and SSBOs should be tracked together */ - if (mode == nir_var_mem_global) - mode = nir_var_mem_ssbo; - - return ffs(mode) - 1; -} - -static nir_variable_mode -aliasing_modes(nir_variable_mode modes) -{ - /* Global and SSBO can alias */ - if (modes & (nir_var_mem_ssbo | nir_var_mem_global)) - modes |= nir_var_mem_ssbo | nir_var_mem_global; - return modes; -} - -static void -calc_alignment(struct entry *entry) -{ - uint32_t align_mul = 31; - for (unsigned i = 0; i < entry->key->offset_def_count; i++) { - if (entry->key->offset_defs_mul[i]) - align_mul = MIN2(align_mul, ffsll(entry->key->offset_defs_mul[i])); - } - - entry->align_mul = 1u << (align_mul - 1); - bool has_align = nir_intrinsic_infos[entry->intrin->intrinsic].index_map[NIR_INTRINSIC_ALIGN_MUL]; - if (!has_align || entry->align_mul >= nir_intrinsic_align_mul(entry->intrin)) { - entry->align_offset = entry->offset % entry->align_mul; - } else { - entry->align_mul = nir_intrinsic_align_mul(entry->intrin); - entry->align_offset = nir_intrinsic_align_offset(entry->intrin); - } -} - -static struct entry * -create_entry(struct vectorize_ctx *ctx, - const struct intrinsic_info *info, - nir_intrinsic_instr *intrin) -{ - struct entry *entry = rzalloc(ctx, struct entry); - entry->intrin = intrin; - entry->instr = &intrin->instr; - entry->info = info; - entry->is_store = entry->info->value_src >= 0; - - if (entry->info->deref_src >= 0) { - entry->deref = nir_src_as_deref(intrin->src[entry->info->deref_src]); - nir_deref_path path; - nir_deref_path_init(&path, entry->deref, NULL); - entry->key = create_entry_key_from_deref(entry, ctx, &path, &entry->offset); - nir_deref_path_finish(&path); - } else { - nir_ssa_def *base = entry->info->base_src >= 0 ? - intrin->src[entry->info->base_src].ssa : NULL; - uint64_t offset = 0; - if (nir_intrinsic_has_base(intrin)) - offset += nir_intrinsic_base(intrin); - entry->key = create_entry_key_from_offset(entry, base, 1, &offset); - entry->offset = offset; - - if (base) - entry->offset = util_mask_sign_extend(entry->offset, base->bit_size); - } - - if (entry->info->resource_src >= 0) - entry->key->resource = intrin->src[entry->info->resource_src].ssa; - - if (nir_intrinsic_has_access(intrin)) - entry->access = nir_intrinsic_access(intrin); - else if (entry->key->var) - entry->access = entry->key->var->data.access; - - if (nir_intrinsic_can_reorder(intrin)) - entry->access |= ACCESS_CAN_REORDER; - - uint32_t restrict_modes = nir_var_shader_in | nir_var_shader_out; - restrict_modes |= nir_var_shader_temp | nir_var_function_temp; - restrict_modes |= nir_var_uniform | nir_var_mem_push_const; - restrict_modes |= nir_var_system_value | nir_var_mem_shared; - restrict_modes |= nir_var_mem_task_payload; - if (get_variable_mode(entry) & restrict_modes) - entry->access |= ACCESS_RESTRICT; - - calc_alignment(entry); - - return entry; -} - -static nir_deref_instr * -cast_deref(nir_builder *b, unsigned num_components, unsigned bit_size, nir_deref_instr *deref) -{ - if (glsl_get_components(deref->type) == num_components && - type_scalar_size_bytes(deref->type)*8u == bit_size) - return deref; - - enum glsl_base_type types[] = { - GLSL_TYPE_UINT8, GLSL_TYPE_UINT16, GLSL_TYPE_UINT, GLSL_TYPE_UINT64}; - enum glsl_base_type base = types[ffs(bit_size / 8u) - 1u]; - const struct glsl_type *type = glsl_vector_type(base, num_components); - - if (deref->type == type) - return deref; - - return nir_build_deref_cast(b, &deref->dest.ssa, deref->modes, type, 0); -} - -/* Return true if "new_bit_size" is a usable bit size for a vectorized load/store - * of "low" and "high". */ -static bool -new_bitsize_acceptable(struct vectorize_ctx *ctx, unsigned new_bit_size, - struct entry *low, struct entry *high, unsigned size) -{ - if (size % new_bit_size != 0) - return false; - - unsigned new_num_components = size / new_bit_size; - if (!nir_num_components_valid(new_num_components)) - return false; - - unsigned high_offset = high->offset_signed - low->offset_signed; - - /* check nir_extract_bits limitations */ - unsigned common_bit_size = MIN2(get_bit_size(low), get_bit_size(high)); - common_bit_size = MIN2(common_bit_size, new_bit_size); - if (high_offset > 0) - common_bit_size = MIN2(common_bit_size, (1u << (ffs(high_offset * 8) - 1))); - if (new_bit_size / common_bit_size > NIR_MAX_VEC_COMPONENTS) - return false; - - if (!ctx->options->callback(low->align_mul, - low->align_offset, - new_bit_size, new_num_components, - low->intrin, high->intrin, - ctx->options->cb_data)) - return false; - - if (low->is_store) { - unsigned low_size = low->intrin->num_components * get_bit_size(low); - unsigned high_size = high->intrin->num_components * get_bit_size(high); - - if (low_size % new_bit_size != 0) - return false; - if (high_size % new_bit_size != 0) - return false; - - unsigned write_mask = nir_intrinsic_write_mask(low->intrin); - if (!nir_component_mask_can_reinterpret(write_mask, get_bit_size(low), new_bit_size)) - return false; - - write_mask = nir_intrinsic_write_mask(high->intrin); - if (!nir_component_mask_can_reinterpret(write_mask, get_bit_size(high), new_bit_size)) - return false; - } - - return true; -} - -static nir_deref_instr *subtract_deref(nir_builder *b, nir_deref_instr *deref, int64_t offset) -{ - /* avoid adding another deref to the path */ - if (deref->deref_type == nir_deref_type_ptr_as_array && - nir_src_is_const(deref->arr.index) && - offset % nir_deref_instr_array_stride(deref) == 0) { - unsigned stride = nir_deref_instr_array_stride(deref); - nir_ssa_def *index = nir_imm_intN_t(b, nir_src_as_int(deref->arr.index) - offset / stride, - deref->dest.ssa.bit_size); - return nir_build_deref_ptr_as_array(b, nir_deref_instr_parent(deref), index); - } - - if (deref->deref_type == nir_deref_type_array && - nir_src_is_const(deref->arr.index)) { - nir_deref_instr *parent = nir_deref_instr_parent(deref); - unsigned stride = glsl_get_explicit_stride(parent->type); - if (offset % stride == 0) - return nir_build_deref_array_imm( - b, parent, nir_src_as_int(deref->arr.index) - offset / stride); - } - - - deref = nir_build_deref_cast(b, &deref->dest.ssa, deref->modes, - glsl_scalar_type(GLSL_TYPE_UINT8), 1); - return nir_build_deref_ptr_as_array( - b, deref, nir_imm_intN_t(b, -offset, deref->dest.ssa.bit_size)); -} - -static void -vectorize_loads(nir_builder *b, struct vectorize_ctx *ctx, - struct entry *low, struct entry *high, - struct entry *first, struct entry *second, - unsigned new_bit_size, unsigned new_num_components, - unsigned high_start) -{ - unsigned low_bit_size = get_bit_size(low); - unsigned high_bit_size = get_bit_size(high); - bool low_bool = low->intrin->dest.ssa.bit_size == 1; - bool high_bool = high->intrin->dest.ssa.bit_size == 1; - nir_ssa_def *data = &first->intrin->dest.ssa; - - b->cursor = nir_after_instr(first->instr); - - /* update the load's destination size and extract data for each of the original loads */ - data->num_components = new_num_components; - data->bit_size = new_bit_size; - - nir_ssa_def *low_def = nir_extract_bits( - b, &data, 1, 0, low->intrin->num_components, low_bit_size); - nir_ssa_def *high_def = nir_extract_bits( - b, &data, 1, high_start, high->intrin->num_components, high_bit_size); - - /* convert booleans */ - low_def = low_bool ? nir_i2b(b, low_def) : nir_mov(b, low_def); - high_def = high_bool ? nir_i2b(b, high_def) : nir_mov(b, high_def); - - /* update uses */ - if (first == low) { - nir_ssa_def_rewrite_uses_after(&low->intrin->dest.ssa, low_def, - high_def->parent_instr); - nir_ssa_def_rewrite_uses(&high->intrin->dest.ssa, high_def); - } else { - nir_ssa_def_rewrite_uses(&low->intrin->dest.ssa, low_def); - nir_ssa_def_rewrite_uses_after(&high->intrin->dest.ssa, high_def, - high_def->parent_instr); - } - - /* update the intrinsic */ - first->intrin->num_components = new_num_components; - - const struct intrinsic_info *info = first->info; - - /* update the offset */ - if (first != low && info->base_src >= 0) { - /* let nir_opt_algebraic() remove this addition. this doesn't have much - * issues with subtracting 16 from expressions like "(i + 1) * 16" because - * nir_opt_algebraic() turns them into "i * 16 + 16" */ - b->cursor = nir_before_instr(first->instr); - - nir_ssa_def *new_base = first->intrin->src[info->base_src].ssa; - new_base = nir_iadd_imm(b, new_base, -(int)(high_start / 8u)); - - nir_instr_rewrite_src(first->instr, &first->intrin->src[info->base_src], - nir_src_for_ssa(new_base)); - } - - /* update the deref */ - if (info->deref_src >= 0) { - b->cursor = nir_before_instr(first->instr); - - nir_deref_instr *deref = nir_src_as_deref(first->intrin->src[info->deref_src]); - if (first != low && high_start != 0) - deref = subtract_deref(b, deref, high_start / 8u); - first->deref = cast_deref(b, new_num_components, new_bit_size, deref); - - nir_instr_rewrite_src(first->instr, &first->intrin->src[info->deref_src], - nir_src_for_ssa(&first->deref->dest.ssa)); - } - - /* update align */ - if (nir_intrinsic_has_range_base(first->intrin)) { - uint32_t low_base = nir_intrinsic_range_base(low->intrin); - uint32_t high_base = nir_intrinsic_range_base(high->intrin); - uint32_t low_end = low_base + nir_intrinsic_range(low->intrin); - uint32_t high_end = high_base + nir_intrinsic_range(high->intrin); - - nir_intrinsic_set_range_base(first->intrin, low_base); - nir_intrinsic_set_range(first->intrin, MAX2(low_end, high_end) - low_base); - } else if (nir_intrinsic_has_base(first->intrin) && info->base_src == -1 && info->deref_src == -1) { - nir_intrinsic_set_base(first->intrin, nir_intrinsic_base(low->intrin)); - } - - first->key = low->key; - first->offset = low->offset; - - first->align_mul = low->align_mul; - first->align_offset = low->align_offset; - - nir_instr_remove(second->instr); -} - -static void -vectorize_stores(nir_builder *b, struct vectorize_ctx *ctx, - struct entry *low, struct entry *high, - struct entry *first, struct entry *second, - unsigned new_bit_size, unsigned new_num_components, - unsigned high_start) -{ - ASSERTED unsigned low_size = low->intrin->num_components * get_bit_size(low); - assert(low_size % new_bit_size == 0); - - b->cursor = nir_before_instr(second->instr); - - /* get new writemasks */ - uint32_t low_write_mask = nir_intrinsic_write_mask(low->intrin); - uint32_t high_write_mask = nir_intrinsic_write_mask(high->intrin); - low_write_mask = nir_component_mask_reinterpret(low_write_mask, - get_bit_size(low), - new_bit_size); - high_write_mask = nir_component_mask_reinterpret(high_write_mask, - get_bit_size(high), - new_bit_size); - high_write_mask <<= high_start / new_bit_size; - - uint32_t write_mask = low_write_mask | high_write_mask; - - /* convert booleans */ - nir_ssa_def *low_val = low->intrin->src[low->info->value_src].ssa; - nir_ssa_def *high_val = high->intrin->src[high->info->value_src].ssa; - low_val = low_val->bit_size == 1 ? nir_b2iN(b, low_val, 32) : low_val; - high_val = high_val->bit_size == 1 ? nir_b2iN(b, high_val, 32) : high_val; - - /* combine the data */ - nir_ssa_def *data_channels[NIR_MAX_VEC_COMPONENTS]; - for (unsigned i = 0; i < new_num_components; i++) { - bool set_low = low_write_mask & (1 << i); - bool set_high = high_write_mask & (1 << i); - - if (set_low && (!set_high || low == second)) { - unsigned offset = i * new_bit_size; - data_channels[i] = nir_extract_bits(b, &low_val, 1, offset, 1, new_bit_size); - } else if (set_high) { - assert(!set_low || high == second); - unsigned offset = i * new_bit_size - high_start; - data_channels[i] = nir_extract_bits(b, &high_val, 1, offset, 1, new_bit_size); - } else { - data_channels[i] = nir_ssa_undef(b, 1, new_bit_size); - } - } - nir_ssa_def *data = nir_vec(b, data_channels, new_num_components); - - /* update the intrinsic */ - nir_intrinsic_set_write_mask(second->intrin, write_mask); - second->intrin->num_components = data->num_components; - - const struct intrinsic_info *info = second->info; - assert(info->value_src >= 0); - nir_instr_rewrite_src(second->instr, &second->intrin->src[info->value_src], - nir_src_for_ssa(data)); - - /* update the offset */ - if (second != low && info->base_src >= 0) - nir_instr_rewrite_src(second->instr, &second->intrin->src[info->base_src], - low->intrin->src[info->base_src]); - - /* update the deref */ - if (info->deref_src >= 0) { - b->cursor = nir_before_instr(second->instr); - second->deref = cast_deref(b, new_num_components, new_bit_size, - nir_src_as_deref(low->intrin->src[info->deref_src])); - nir_instr_rewrite_src(second->instr, &second->intrin->src[info->deref_src], - nir_src_for_ssa(&second->deref->dest.ssa)); - } - - /* update base/align */ - if (second != low && nir_intrinsic_has_base(second->intrin)) - nir_intrinsic_set_base(second->intrin, nir_intrinsic_base(low->intrin)); - - second->key = low->key; - second->offset = low->offset; - - second->align_mul = low->align_mul; - second->align_offset = low->align_offset; - - list_del(&first->head); - nir_instr_remove(first->instr); -} - -/* Returns true if it can prove that "a" and "b" point to different bindings - * and either one uses ACCESS_RESTRICT. */ -static bool -bindings_different_restrict(nir_shader *shader, struct entry *a, struct entry *b) -{ - bool different_bindings = false; - nir_variable *a_var = NULL, *b_var = NULL; - if (a->key->resource && b->key->resource) { - nir_binding a_res = nir_chase_binding(nir_src_for_ssa(a->key->resource)); - nir_binding b_res = nir_chase_binding(nir_src_for_ssa(b->key->resource)); - if (!a_res.success || !b_res.success) - return false; - - if (a_res.num_indices != b_res.num_indices || - a_res.desc_set != b_res.desc_set || - a_res.binding != b_res.binding) - different_bindings = true; - - for (unsigned i = 0; i < a_res.num_indices; i++) { - if (nir_src_is_const(a_res.indices[i]) && nir_src_is_const(b_res.indices[i]) && - nir_src_as_uint(a_res.indices[i]) != nir_src_as_uint(b_res.indices[i])) - different_bindings = true; - } - - if (different_bindings) { - a_var = nir_get_binding_variable(shader, a_res); - b_var = nir_get_binding_variable(shader, b_res); - } - } else if (a->key->var && b->key->var) { - a_var = a->key->var; - b_var = b->key->var; - different_bindings = a_var != b_var; - } else if (!!a->key->resource != !!b->key->resource) { - /* comparing global and ssbo access */ - different_bindings = true; - - if (a->key->resource) { - nir_binding a_res = nir_chase_binding(nir_src_for_ssa(a->key->resource)); - a_var = nir_get_binding_variable(shader, a_res); - } - - if (b->key->resource) { - nir_binding b_res = nir_chase_binding(nir_src_for_ssa(b->key->resource)); - b_var = nir_get_binding_variable(shader, b_res); - } - } else { - return false; - } - - unsigned a_access = a->access | (a_var ? a_var->data.access : 0); - unsigned b_access = b->access | (b_var ? b_var->data.access : 0); - - return different_bindings && - ((a_access | b_access) & ACCESS_RESTRICT); -} - -static int64_t -compare_entries(struct entry *a, struct entry *b) -{ - if (!entry_key_equals(a->key, b->key)) - return INT64_MAX; - return b->offset_signed - a->offset_signed; -} - -static bool -may_alias(nir_shader *shader, struct entry *a, struct entry *b) -{ - assert(mode_to_index(get_variable_mode(a)) == - mode_to_index(get_variable_mode(b))); - - if ((a->access | b->access) & ACCESS_CAN_REORDER) - return false; - - /* if the resources/variables are definitively different and both have - * ACCESS_RESTRICT, we can assume they do not alias. */ - if (bindings_different_restrict(shader, a, b)) - return false; - - /* we can't compare offsets if the resources/variables might be different */ - if (a->key->var != b->key->var || a->key->resource != b->key->resource) - return true; - - /* use adjacency information */ - /* TODO: we can look closer at the entry keys */ - int64_t diff = compare_entries(a, b); - if (diff != INT64_MAX) { - /* with atomics, intrin->num_components can be 0 */ - if (diff < 0) - return llabs(diff) < MAX2(b->intrin->num_components, 1u) * (get_bit_size(b) / 8u); - else - return diff < MAX2(a->intrin->num_components, 1u) * (get_bit_size(a) / 8u); - } - - /* TODO: we can use deref information */ - - return true; -} - -static bool -check_for_aliasing(struct vectorize_ctx *ctx, struct entry *first, struct entry *second) -{ - nir_variable_mode mode = get_variable_mode(first); - if (mode & (nir_var_uniform | nir_var_system_value | - nir_var_mem_push_const | nir_var_mem_ubo)) - return false; - - unsigned mode_index = mode_to_index(mode); - if (first->is_store) { - /* find first entry that aliases "first" */ - list_for_each_entry_from(struct entry, next, first, &ctx->entries[mode_index], head) { - if (next == first) - continue; - if (next == second) - return false; - if (may_alias(ctx->shader, first, next)) - return true; - } - } else { - /* find previous store that aliases this load */ - list_for_each_entry_from_rev(struct entry, prev, second, &ctx->entries[mode_index], head) { - if (prev == second) - continue; - if (prev == first) - return false; - if (prev->is_store && may_alias(ctx->shader, second, prev)) - return true; - } - } - - return false; -} - -static uint64_t -calc_gcd(uint64_t a, uint64_t b) -{ - while (b != 0) { - int tmp_a = a; - a = b; - b = tmp_a % b; - } - return a; -} - -static uint64_t -round_down(uint64_t a, uint64_t b) -{ - return a / b * b; -} - -static bool -addition_wraps(uint64_t a, uint64_t b, unsigned bits) -{ - uint64_t mask = BITFIELD64_MASK(bits); - return ((a + b) & mask) < (a & mask); -} - -/* Return true if the addition of "low"'s offset and "high_offset" could wrap - * around. - * - * This is to prevent a situation where the hardware considers the high load - * out-of-bounds after vectorization if the low load is out-of-bounds, even if - * the wrap-around from the addition could make the high load in-bounds. - */ -static bool -check_for_robustness(struct vectorize_ctx *ctx, struct entry *low, uint64_t high_offset) -{ - nir_variable_mode mode = get_variable_mode(low); - if (!(mode & ctx->options->robust_modes)) - return false; - - /* First, try to use alignment information in case the application provided some. If the addition - * of the maximum offset of the low load and "high_offset" wraps around, we can't combine the low - * and high loads. - */ - uint64_t max_low = round_down(UINT64_MAX, low->align_mul) + low->align_offset; - if (!addition_wraps(max_low, high_offset, 64)) - return false; - - /* We can't obtain addition_bits */ - if (low->info->base_src < 0) - return true; - - /* Second, use information about the factors from address calculation (offset_defs_mul). These - * are not guaranteed to be power-of-2. - */ - uint64_t stride = 0; - for (unsigned i = 0; i < low->key->offset_def_count; i++) - stride = calc_gcd(low->key->offset_defs_mul[i], stride); - - unsigned addition_bits = low->intrin->src[low->info->base_src].ssa->bit_size; - /* low's offset must be a multiple of "stride" plus "low->offset". */ - max_low = low->offset; - if (stride) - max_low = round_down(BITFIELD64_MASK(addition_bits), stride) + (low->offset % stride); - return addition_wraps(max_low, high_offset, addition_bits); -} - -static bool -is_strided_vector(const struct glsl_type *type) -{ - if (glsl_type_is_vector(type)) { - unsigned explicit_stride = glsl_get_explicit_stride(type); - return explicit_stride != 0 && explicit_stride != - type_scalar_size_bytes(glsl_get_array_element(type)); - } else { - return false; - } -} - -static bool -can_vectorize(struct vectorize_ctx *ctx, struct entry *first, struct entry *second) -{ - if (!(get_variable_mode(first) & ctx->options->modes) || - !(get_variable_mode(second) & ctx->options->modes)) - return false; - - if (check_for_aliasing(ctx, first, second)) - return false; - - /* we can only vectorize non-volatile loads/stores of the same type and with - * the same access */ - if (first->info != second->info || first->access != second->access || - (first->access & ACCESS_VOLATILE) || first->info->is_atomic) - return false; - - return true; -} - -static bool -try_vectorize(nir_function_impl *impl, struct vectorize_ctx *ctx, - struct entry *low, struct entry *high, - struct entry *first, struct entry *second) -{ - if (!can_vectorize(ctx, first, second)) - return false; - - uint64_t diff = high->offset_signed - low->offset_signed; - if (check_for_robustness(ctx, low, diff)) - return false; - - /* don't attempt to vectorize accesses of row-major matrix columns */ - if (first->deref) { - const struct glsl_type *first_type = first->deref->type; - const struct glsl_type *second_type = second->deref->type; - if (is_strided_vector(first_type) || is_strided_vector(second_type)) - return false; - } - - /* gather information */ - unsigned low_bit_size = get_bit_size(low); - unsigned high_bit_size = get_bit_size(high); - unsigned low_size = low->intrin->num_components * low_bit_size; - unsigned high_size = high->intrin->num_components * high_bit_size; - unsigned new_size = MAX2(diff * 8u + high_size, low_size); - - /* find a good bit size for the new load/store */ - unsigned new_bit_size = 0; - if (new_bitsize_acceptable(ctx, low_bit_size, low, high, new_size)) { - new_bit_size = low_bit_size; - } else if (low_bit_size != high_bit_size && - new_bitsize_acceptable(ctx, high_bit_size, low, high, new_size)) { - new_bit_size = high_bit_size; - } else { - new_bit_size = 64; - for (; new_bit_size >= 8; new_bit_size /= 2) { - /* don't repeat trying out bitsizes */ - if (new_bit_size == low_bit_size || new_bit_size == high_bit_size) - continue; - if (new_bitsize_acceptable(ctx, new_bit_size, low, high, new_size)) - break; - } - if (new_bit_size < 8) - return false; - } - unsigned new_num_components = new_size / new_bit_size; - - /* vectorize the loads/stores */ - nir_builder b; - nir_builder_init(&b, impl); - - if (first->is_store) - vectorize_stores(&b, ctx, low, high, first, second, - new_bit_size, new_num_components, diff * 8u); - else - vectorize_loads(&b, ctx, low, high, first, second, - new_bit_size, new_num_components, diff * 8u); - - return true; -} - -static bool -try_vectorize_shared2(nir_function_impl *impl, struct vectorize_ctx *ctx, - struct entry *low, struct entry *high, - struct entry *first, struct entry *second) -{ - if (!can_vectorize(ctx, first, second) || first->deref) - return false; - - unsigned low_bit_size = get_bit_size(low); - unsigned high_bit_size = get_bit_size(high); - unsigned low_size = low->intrin->num_components * low_bit_size / 8; - unsigned high_size = high->intrin->num_components * high_bit_size / 8; - if ((low_size != 4 && low_size != 8) || (high_size != 4 && high_size != 8)) - return false; - if (low_size != high_size) - return false; - if (low->align_mul % low_size || low->align_offset % low_size) - return false; - if (high->align_mul % low_size || high->align_offset % low_size) - return false; - - uint64_t diff = high->offset_signed - low->offset_signed; - bool st64 = diff % (64 * low_size) == 0; - unsigned stride = st64 ? 64 * low_size : low_size; - if (diff % stride || diff > 255 * stride) - return false; - - /* try to avoid creating accesses we can't combine additions/offsets into */ - if (high->offset > 255 * stride || (st64 && high->offset % stride)) - return false; - - if (first->is_store) { - if (nir_intrinsic_write_mask(low->intrin) != BITFIELD_MASK(low->intrin->num_components)) - return false; - if (nir_intrinsic_write_mask(high->intrin) != BITFIELD_MASK(high->intrin->num_components)) - return false; - } - - /* vectorize the accesses */ - nir_builder b; - nir_builder_init(&b, impl); - - b.cursor = nir_after_instr(first->is_store ? second->instr : first->instr); - - nir_ssa_def *offset = first->intrin->src[first->is_store].ssa; - offset = nir_iadd_imm(&b, offset, nir_intrinsic_base(first->intrin)); - if (first != low) - offset = nir_iadd_imm(&b, offset, -(int)diff); - - if (first->is_store) { - nir_ssa_def *low_val = low->intrin->src[low->info->value_src].ssa; - nir_ssa_def *high_val = high->intrin->src[high->info->value_src].ssa; - nir_ssa_def *val = nir_vec2(&b, nir_bitcast_vector(&b, low_val, low_size * 8u), - nir_bitcast_vector(&b, high_val, low_size * 8u)); - nir_store_shared2_amd(&b, val, offset, .offset1=diff/stride, .st64=st64); - } else { - nir_ssa_def *new_def = nir_load_shared2_amd(&b, low_size * 8u, offset, .offset1=diff/stride, - .st64=st64); - nir_ssa_def_rewrite_uses(&low->intrin->dest.ssa, - nir_bitcast_vector(&b, nir_channel(&b, new_def, 0), low_bit_size)); - nir_ssa_def_rewrite_uses(&high->intrin->dest.ssa, - nir_bitcast_vector(&b, nir_channel(&b, new_def, 1), high_bit_size)); - } - - nir_instr_remove(first->instr); - nir_instr_remove(second->instr); - - return true; -} - -static bool -update_align(struct entry *entry) -{ - if (nir_intrinsic_has_align_mul(entry->intrin) && - (entry->align_mul != nir_intrinsic_align_mul(entry->intrin) || - entry->align_offset != nir_intrinsic_align_offset(entry->intrin))) { - nir_intrinsic_set_align(entry->intrin, entry->align_mul, entry->align_offset); - return true; - } - return false; -} - -static bool -vectorize_sorted_entries(struct vectorize_ctx *ctx, nir_function_impl *impl, - struct util_dynarray *arr) -{ - unsigned num_entries = util_dynarray_num_elements(arr, struct entry *); - - bool progress = false; - for (unsigned first_idx = 0; first_idx < num_entries; first_idx++) { - struct entry *low = *util_dynarray_element(arr, struct entry *, first_idx); - if (!low) - continue; - - for (unsigned second_idx = first_idx + 1; second_idx < num_entries; second_idx++) { - struct entry *high = *util_dynarray_element(arr, struct entry *, second_idx); - if (!high) - continue; - - struct entry *first = low->index < high->index ? low : high; - struct entry *second = low->index < high->index ? high : low; - - uint64_t diff = high->offset_signed - low->offset_signed; - bool separate = diff > get_bit_size(low) / 8u * low->intrin->num_components; - if (separate) { - if (!ctx->options->has_shared2_amd || - get_variable_mode(first) != nir_var_mem_shared) - break; - - if (try_vectorize_shared2(impl, ctx, low, high, first, second)) { - low = NULL; - *util_dynarray_element(arr, struct entry *, second_idx) = NULL; - progress = true; - break; - } - } else { - if (try_vectorize(impl, ctx, low, high, first, second)) { - low = low->is_store ? second : first; - *util_dynarray_element(arr, struct entry *, second_idx) = NULL; - progress = true; - } - } - } - - *util_dynarray_element(arr, struct entry *, first_idx) = low; - } - - return progress; -} - -static bool -vectorize_entries(struct vectorize_ctx *ctx, nir_function_impl *impl, struct hash_table *ht) -{ - if (!ht) - return false; - - bool progress = false; - hash_table_foreach(ht, entry) { - struct util_dynarray *arr = entry->data; - if (!arr->size) - continue; - - qsort(util_dynarray_begin(arr), - util_dynarray_num_elements(arr, struct entry *), - sizeof(struct entry *), &sort_entries); - - while (vectorize_sorted_entries(ctx, impl, arr)) - progress = true; - - util_dynarray_foreach(arr, struct entry *, elem) { - if (*elem) - progress |= update_align(*elem); - } - } - - _mesa_hash_table_clear(ht, delete_entry_dynarray); - - return progress; -} - -static bool -handle_barrier(struct vectorize_ctx *ctx, bool *progress, nir_function_impl *impl, nir_instr *instr) -{ - unsigned modes = 0; - bool acquire = true; - bool release = true; - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_group_memory_barrier: - case nir_intrinsic_memory_barrier: - modes = nir_var_mem_ssbo | nir_var_mem_shared | nir_var_mem_global | - nir_var_mem_task_payload; - break; - /* prevent speculative loads/stores */ - case nir_intrinsic_discard_if: - case nir_intrinsic_discard: - case nir_intrinsic_terminate_if: - case nir_intrinsic_terminate: - case nir_intrinsic_launch_mesh_workgroups: - modes = nir_var_all; - break; - case nir_intrinsic_demote_if: - case nir_intrinsic_demote: - acquire = false; - modes = nir_var_all; - break; - case nir_intrinsic_memory_barrier_buffer: - modes = nir_var_mem_ssbo | nir_var_mem_global; - break; - case nir_intrinsic_memory_barrier_shared: - modes = nir_var_mem_shared | nir_var_mem_task_payload; - break; - case nir_intrinsic_scoped_barrier: - if (nir_intrinsic_memory_scope(intrin) == NIR_SCOPE_NONE) - break; - - modes = nir_intrinsic_memory_modes(intrin) & (nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global | - nir_var_mem_task_payload); - acquire = nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_ACQUIRE; - release = nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_RELEASE; - switch (nir_intrinsic_memory_scope(intrin)) { - case NIR_SCOPE_INVOCATION: - /* a barier should never be required for correctness with these scopes */ - modes = 0; - break; - default: - break; - } - break; - default: - return false; - } - } else if (instr->type == nir_instr_type_call) { - modes = nir_var_all; - } else { - return false; - } - - while (modes) { - unsigned mode_index = u_bit_scan(&modes); - if ((1 << mode_index) == nir_var_mem_global) { - /* Global should be rolled in with SSBO */ - assert(list_is_empty(&ctx->entries[mode_index])); - assert(ctx->loads[mode_index] == NULL); - assert(ctx->stores[mode_index] == NULL); - continue; - } - - if (acquire) - *progress |= vectorize_entries(ctx, impl, ctx->loads[mode_index]); - if (release) - *progress |= vectorize_entries(ctx, impl, ctx->stores[mode_index]); - } - - return true; -} - -static bool -process_block(nir_function_impl *impl, struct vectorize_ctx *ctx, nir_block *block) -{ - bool progress = false; - - for (unsigned i = 0; i < nir_num_variable_modes; i++) { - list_inithead(&ctx->entries[i]); - if (ctx->loads[i]) - _mesa_hash_table_clear(ctx->loads[i], delete_entry_dynarray); - if (ctx->stores[i]) - _mesa_hash_table_clear(ctx->stores[i], delete_entry_dynarray); - } - - /* create entries */ - unsigned next_index = 0; - - nir_foreach_instr_safe(instr, block) { - if (handle_barrier(ctx, &progress, impl, instr)) - continue; - - /* gather information */ - if (instr->type != nir_instr_type_intrinsic) - continue; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - const struct intrinsic_info *info = get_info(intrin->intrinsic); - if (!info) - continue; - - nir_variable_mode mode = info->mode; - if (!mode) - mode = nir_src_as_deref(intrin->src[info->deref_src])->modes; - if (!(mode & aliasing_modes(ctx->options->modes))) - continue; - unsigned mode_index = mode_to_index(mode); - - /* create entry */ - struct entry *entry = create_entry(ctx, info, intrin); - entry->index = next_index++; - - list_addtail(&entry->head, &ctx->entries[mode_index]); - - /* add the entry to a hash table */ - - struct hash_table *adj_ht = NULL; - if (entry->is_store) { - if (!ctx->stores[mode_index]) - ctx->stores[mode_index] = _mesa_hash_table_create(ctx, &hash_entry_key, &entry_key_equals); - adj_ht = ctx->stores[mode_index]; - } else { - if (!ctx->loads[mode_index]) - ctx->loads[mode_index] = _mesa_hash_table_create(ctx, &hash_entry_key, &entry_key_equals); - adj_ht = ctx->loads[mode_index]; - } - - uint32_t key_hash = hash_entry_key(entry->key); - struct hash_entry *adj_entry = _mesa_hash_table_search_pre_hashed(adj_ht, key_hash, entry->key); - struct util_dynarray *arr; - if (adj_entry && adj_entry->data) { - arr = (struct util_dynarray *)adj_entry->data; - } else { - arr = ralloc(ctx, struct util_dynarray); - util_dynarray_init(arr, arr); - _mesa_hash_table_insert_pre_hashed(adj_ht, key_hash, entry->key, arr); - } - util_dynarray_append(arr, struct entry *, entry); - } - - /* sort and combine entries */ - for (unsigned i = 0; i < nir_num_variable_modes; i++) { - progress |= vectorize_entries(ctx, impl, ctx->loads[i]); - progress |= vectorize_entries(ctx, impl, ctx->stores[i]); - } - - return progress; -} - -bool -nir_opt_load_store_vectorize(nir_shader *shader, const nir_load_store_vectorize_options *options) -{ - bool progress = false; - - struct vectorize_ctx *ctx = rzalloc(NULL, struct vectorize_ctx); - ctx->shader = shader; - ctx->options = options; - - nir_shader_index_vars(shader, options->modes); - - nir_foreach_function(function, shader) { - if (function->impl) { - if (options->modes & nir_var_function_temp) - nir_function_impl_index_vars(function->impl); - - nir_foreach_block(block, function->impl) - progress |= process_block(function->impl, ctx, block); - - nir_metadata_preserve(function->impl, - nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs); - } - } - - ralloc_free(ctx); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_loop_unroll.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_loop_unroll.c deleted file mode 100644 index 3ba5282..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_loop_unroll.c +++ /dev/null @@ -1,1172 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_control_flow.h" -#include "nir_loop_analyze.h" - - -/* This limit is chosen fairly arbitrarily. GLSL IR max iteration is 32 - * instructions. (Multiply counting nodes and magic number 5.) But there is - * no 1:1 mapping between GLSL IR and NIR so 25 was picked because it seemed - * to give about the same results. Around 5 instructions per node. But some - * loops that would unroll with GLSL IR fail to unroll if we set this to 25 so - * we set it to 26. - */ -#define LOOP_UNROLL_LIMIT 26 - -/* Prepare this loop for unrolling by first converting to lcssa and then - * converting the phis from the top level of the loop body to regs. - * Partially converting out of SSA allows us to unroll the loop without having - * to keep track of and update phis along the way which gets tricky and - * doesn't add much value over converting to regs. - * - * The loop may have a jump instruction at the end of the loop which does - * nothing. Once we're out of SSA, we can safely delete it so we don't have - * to deal with it later. - */ -static void -loop_prepare_for_unroll(nir_loop *loop) -{ - nir_rematerialize_derefs_in_use_blocks_impl( - nir_cf_node_get_function(&loop->cf_node)); - - nir_convert_loop_to_lcssa(loop); - - /* Lower phis at the top level of the loop body */ - foreach_list_typed_safe(nir_cf_node, node, node, &loop->body) { - if (nir_cf_node_block == node->type) { - nir_lower_phis_to_regs_block(nir_cf_node_as_block(node)); - } - } - - /* Lower phis after the loop */ - nir_block *block_after_loop = - nir_cf_node_as_block(nir_cf_node_next(&loop->cf_node)); - - nir_lower_phis_to_regs_block(block_after_loop); - - /* Remove jump if it's the last instruction in the loop */ - nir_instr *last_instr = nir_block_last_instr(nir_loop_last_block(loop)); - if (last_instr && last_instr->type == nir_instr_type_jump) { - nir_instr_remove(last_instr); - } -} - -static void -get_first_blocks_in_terminator(nir_loop_terminator *term, - nir_block **first_break_block, - nir_block **first_continue_block) -{ - if (term->continue_from_then) { - *first_continue_block = nir_if_first_then_block(term->nif); - *first_break_block = nir_if_first_else_block(term->nif); - } else { - *first_continue_block = nir_if_first_else_block(term->nif); - *first_break_block = nir_if_first_then_block(term->nif); - } -} - -/** - * Unroll a loop where we know exactly how many iterations there are and there - * is only a single exit point. Note here we can unroll loops with multiple - * theoretical exits that only have a single terminating exit that we always - * know is the "real" exit. - * - * loop { - * ...instrs... - * } - * - * And the iteration count is 3, the output will be: - * - * ...instrs... ...instrs... ...instrs... - */ -static void -simple_unroll(nir_loop *loop) -{ - nir_loop_terminator *limiting_term = loop->info->limiting_terminator; - assert(nir_is_trivial_loop_if(limiting_term->nif, - limiting_term->break_block)); - - loop_prepare_for_unroll(loop); - - /* Skip over loop terminator and get the loop body. */ - list_for_each_entry(nir_loop_terminator, terminator, - &loop->info->loop_terminator_list, - loop_terminator_link) { - - /* Remove all but the limiting terminator as we know the other exit - * conditions can never be met. Note we need to extract any instructions - * in the continue from branch and insert then into the loop body before - * removing it. - */ - if (terminator->nif != limiting_term->nif) { - nir_block *first_break_block; - nir_block *first_continue_block; - get_first_blocks_in_terminator(terminator, &first_break_block, - &first_continue_block); - - assert(nir_is_trivial_loop_if(terminator->nif, - terminator->break_block)); - - nir_cf_list continue_from_lst; - nir_cf_extract(&continue_from_lst, - nir_before_block(first_continue_block), - nir_after_block(terminator->continue_from_block)); - nir_cf_reinsert(&continue_from_lst, - nir_after_cf_node(&terminator->nif->cf_node)); - - nir_cf_node_remove(&terminator->nif->cf_node); - } - } - - nir_block *first_break_block; - nir_block *first_continue_block; - get_first_blocks_in_terminator(limiting_term, &first_break_block, - &first_continue_block); - - /* Pluck out the loop header */ - nir_block *header_blk = nir_loop_first_block(loop); - nir_cf_list lp_header; - nir_cf_extract(&lp_header, nir_before_block(header_blk), - nir_before_cf_node(&limiting_term->nif->cf_node)); - - /* Add the continue from block of the limiting terminator to the loop body - */ - nir_cf_list continue_from_lst; - nir_cf_extract(&continue_from_lst, nir_before_block(first_continue_block), - nir_after_block(limiting_term->continue_from_block)); - nir_cf_reinsert(&continue_from_lst, - nir_after_cf_node(&limiting_term->nif->cf_node)); - - /* Pluck out the loop body */ - nir_cf_list loop_body; - nir_cf_extract(&loop_body, nir_after_cf_node(&limiting_term->nif->cf_node), - nir_after_block(nir_loop_last_block(loop))); - - struct hash_table *remap_table = _mesa_pointer_hash_table_create(NULL); - - /* Clone the loop header and insert before the loop */ - nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent, - nir_before_cf_node(&loop->cf_node), - remap_table); - - for (unsigned i = 0; i < loop->info->max_trip_count; i++) { - /* Clone loop body and insert before the loop */ - nir_cf_list_clone_and_reinsert(&loop_body, loop->cf_node.parent, - nir_before_cf_node(&loop->cf_node), - remap_table); - - /* Clone loop header and insert after loop body */ - nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent, - nir_before_cf_node(&loop->cf_node), - remap_table); - } - - /* Remove the break from the loop terminator and add instructions from - * the break block after the unrolled loop. - */ - nir_instr *break_instr = nir_block_last_instr(limiting_term->break_block); - nir_instr_remove(break_instr); - nir_cf_list break_list; - nir_cf_extract(&break_list, nir_before_block(first_break_block), - nir_after_block(limiting_term->break_block)); - - /* Clone so things get properly remapped */ - nir_cf_list_clone_and_reinsert(&break_list, loop->cf_node.parent, - nir_before_cf_node(&loop->cf_node), - remap_table); - - /* Remove the loop */ - nir_cf_node_remove(&loop->cf_node); - - /* Delete the original loop body, break block & header */ - nir_cf_delete(&lp_header); - nir_cf_delete(&loop_body); - nir_cf_delete(&break_list); - - _mesa_hash_table_destroy(remap_table, NULL); -} - -static void -move_cf_list_into_loop_term(nir_cf_list *lst, nir_loop_terminator *term) -{ - /* Move the rest of the loop inside the continue-from-block */ - nir_cf_reinsert(lst, nir_after_block(term->continue_from_block)); - - /* Remove the break */ - nir_instr_remove(nir_block_last_instr(term->break_block)); -} - -static nir_cursor -get_complex_unroll_insert_location(nir_cf_node *node, bool continue_from_then) -{ - if (node->type == nir_cf_node_loop) { - return nir_before_cf_node(node); - } else { - nir_if *if_stmt = nir_cf_node_as_if(node); - if (continue_from_then) { - return nir_after_block(nir_if_last_then_block(if_stmt)); - } else { - return nir_after_block(nir_if_last_else_block(if_stmt)); - } - } -} - -static nir_cf_node * -complex_unroll_loop_body(nir_loop *loop, nir_loop_terminator *unlimit_term, - nir_cf_list *lp_header, nir_cf_list *lp_body, - struct hash_table *remap_table, - unsigned num_times_to_clone) -{ - /* In the terminator that we have no trip count for move everything after - * the terminator into the continue from branch. - */ - nir_cf_list loop_end; - nir_cf_extract(&loop_end, nir_after_cf_node(&unlimit_term->nif->cf_node), - nir_after_block(nir_loop_last_block(loop))); - move_cf_list_into_loop_term(&loop_end, unlimit_term); - - /* Pluck out the loop body. */ - nir_cf_extract(lp_body, nir_before_block(nir_loop_first_block(loop)), - nir_after_block(nir_loop_last_block(loop))); - - /* Set unroll_loc to the loop as we will insert the unrolled loop before it - */ - nir_cf_node *unroll_loc = &loop->cf_node; - - /* Temp list to store the cloned loop as we unroll */ - nir_cf_list unrolled_lp_body; - - for (unsigned i = 0; i < num_times_to_clone; i++) { - - nir_cursor cursor = - get_complex_unroll_insert_location(unroll_loc, - unlimit_term->continue_from_then); - - /* Clone loop header and insert in if branch */ - nir_cf_list_clone_and_reinsert(lp_header, loop->cf_node.parent, - cursor, remap_table); - - cursor = - get_complex_unroll_insert_location(unroll_loc, - unlimit_term->continue_from_then); - - /* Clone loop body */ - nir_cf_list_clone(&unrolled_lp_body, lp_body, loop->cf_node.parent, - remap_table); - - unroll_loc = exec_node_data(nir_cf_node, - exec_list_get_tail(&unrolled_lp_body.list), - node); - assert(unroll_loc->type == nir_cf_node_block && - exec_list_is_empty(&nir_cf_node_as_block(unroll_loc)->instr_list)); - - /* Get the unrolled if node */ - unroll_loc = nir_cf_node_prev(unroll_loc); - - /* Insert unrolled loop body */ - nir_cf_reinsert(&unrolled_lp_body, cursor); - } - - return unroll_loc; -} - -/** - * Unroll a loop with two exists when the trip count of one of the exits is - * unknown. If continue_from_then is true, the loop is repeated only when the - * "then" branch of the if is taken; otherwise it is repeated only - * when the "else" branch of the if is taken. - * - * For example, if the input is: - * - * loop { - * ...phis/condition... - * if condition { - * ...then instructions... - * } else { - * ...continue instructions... - * break - * } - * ...body... - * } - * - * And the iteration count is 3, and unlimit_term->continue_from_then is true, - * then the output will be: - * - * ...condition... - * if condition { - * ...then instructions... - * ...body... - * if condition { - * ...then instructions... - * ...body... - * if condition { - * ...then instructions... - * ...body... - * } else { - * ...continue instructions... - * } - * } else { - * ...continue instructions... - * } - * } else { - * ...continue instructions... - * } - */ -static void -complex_unroll(nir_loop *loop, nir_loop_terminator *unlimit_term, - bool limiting_term_second) -{ - assert(nir_is_trivial_loop_if(unlimit_term->nif, - unlimit_term->break_block)); - - nir_loop_terminator *limiting_term = loop->info->limiting_terminator; - assert(nir_is_trivial_loop_if(limiting_term->nif, - limiting_term->break_block)); - - loop_prepare_for_unroll(loop); - - nir_block *header_blk = nir_loop_first_block(loop); - - nir_cf_list lp_header; - nir_cf_list limit_break_list; - unsigned num_times_to_clone; - if (limiting_term_second) { - /* Pluck out the loop header */ - nir_cf_extract(&lp_header, nir_before_block(header_blk), - nir_before_cf_node(&unlimit_term->nif->cf_node)); - - /* We need some special handling when its the second terminator causing - * us to exit the loop for example: - * - * for (int i = 0; i < uniform_lp_count; i++) { - * colour = vec4(0.0, 1.0, 0.0, 1.0); - * - * if (i == 1) { - * break; - * } - * ... any further code is unreachable after i == 1 ... - * } - */ - nir_cf_list after_lt; - nir_if *limit_if = limiting_term->nif; - nir_cf_extract(&after_lt, nir_after_cf_node(&limit_if->cf_node), - nir_after_block(nir_loop_last_block(loop))); - move_cf_list_into_loop_term(&after_lt, limiting_term); - - /* Because the trip count is the number of times we pass over the entire - * loop before hitting a break when the second terminator is the - * limiting terminator we can actually execute code inside the loop when - * trip count == 0 e.g. the code above the break. So we need to bump - * the trip_count in order for the code below to clone anything. When - * trip count == 1 we execute the code above the break twice and the - * code below it once so we need clone things twice and so on. - */ - num_times_to_clone = loop->info->max_trip_count + 1; - } else { - /* Pluck out the loop header */ - nir_cf_extract(&lp_header, nir_before_block(header_blk), - nir_before_cf_node(&limiting_term->nif->cf_node)); - - nir_block *first_break_block; - nir_block *first_continue_block; - get_first_blocks_in_terminator(limiting_term, &first_break_block, - &first_continue_block); - - /* Remove the break then extract instructions from the break block so we - * can insert them in the innermost else of the unrolled loop. - */ - nir_instr *break_instr = nir_block_last_instr(limiting_term->break_block); - nir_instr_remove(break_instr); - nir_cf_extract(&limit_break_list, nir_before_block(first_break_block), - nir_after_block(limiting_term->break_block)); - - nir_cf_list continue_list; - nir_cf_extract(&continue_list, nir_before_block(first_continue_block), - nir_after_block(limiting_term->continue_from_block)); - - nir_cf_reinsert(&continue_list, - nir_after_cf_node(&limiting_term->nif->cf_node)); - - nir_cf_node_remove(&limiting_term->nif->cf_node); - - num_times_to_clone = loop->info->max_trip_count; - } - - struct hash_table *remap_table = _mesa_pointer_hash_table_create(NULL); - - nir_cf_list lp_body; - nir_cf_node *unroll_loc = - complex_unroll_loop_body(loop, unlimit_term, &lp_header, &lp_body, - remap_table, num_times_to_clone); - - if (!limiting_term_second) { - assert(unroll_loc->type == nir_cf_node_if); - - nir_cursor cursor = - get_complex_unroll_insert_location(unroll_loc, - unlimit_term->continue_from_then); - - /* Clone loop header and insert in if branch */ - nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent, - cursor, remap_table); - - cursor = - get_complex_unroll_insert_location(unroll_loc, - unlimit_term->continue_from_then); - - /* Clone so things get properly remapped, and insert break block from - * the limiting terminator. - */ - nir_cf_list_clone_and_reinsert(&limit_break_list, loop->cf_node.parent, - cursor, remap_table); - - nir_cf_delete(&limit_break_list); - } - - /* The loop has been unrolled so remove it. */ - nir_cf_node_remove(&loop->cf_node); - - /* Delete the original loop header and body */ - nir_cf_delete(&lp_header); - nir_cf_delete(&lp_body); - - _mesa_hash_table_destroy(remap_table, NULL); -} - -/** - * Unroll loops where we only have a single terminator but the exact trip - * count is unknown. For example: - * - * for (int i = 0; i < imin(x, 4); i++) - * ... - */ -static void -complex_unroll_single_terminator(nir_loop *loop) -{ - assert(list_is_singular(&loop->info->loop_terminator_list)); - assert(loop->info->limiting_terminator); - assert(nir_is_trivial_loop_if(loop->info->limiting_terminator->nif, - loop->info->limiting_terminator->break_block)); - - nir_loop_terminator *terminator = loop->info->limiting_terminator; - - loop_prepare_for_unroll(loop); - - /* Pluck out the loop header */ - nir_cf_list lp_header; - nir_cf_extract(&lp_header, nir_before_block(nir_loop_first_block(loop)), - nir_before_cf_node(&terminator->nif->cf_node)); - - struct hash_table *remap_table = - _mesa_hash_table_create(NULL, _mesa_hash_pointer, - _mesa_key_pointer_equal); - - /* We need to clone the loop one extra time in order to clone the lcssa - * vars for the last iteration (they are inside the following ifs break - * branch). We leave other passes to clean up this redundant if. - */ - unsigned num_times_to_clone = loop->info->max_trip_count + 1; - - nir_cf_list lp_body; - UNUSED nir_cf_node *unroll_loc = - complex_unroll_loop_body(loop, terminator, &lp_header, &lp_body, - remap_table, num_times_to_clone); - - assert(unroll_loc->type == nir_cf_node_if); - - /* We need to clone the lcssa vars in order to insert them on both sides - * of the if in the last iteration/if-statement. Otherwise the optimisation - * passes will have trouble optimising the unrolled if ladder. - */ - nir_cursor cursor = - get_complex_unroll_insert_location(unroll_loc, - terminator->continue_from_then); - - nir_if *if_stmt = nir_cf_node_as_if(unroll_loc); - nir_cursor start_cursor; - nir_cursor end_cursor; - if (terminator->continue_from_then) { - start_cursor = nir_before_block(nir_if_first_else_block(if_stmt)); - end_cursor = nir_after_block(nir_if_last_else_block(if_stmt)); - } else { - start_cursor = nir_before_block(nir_if_first_then_block(if_stmt)); - end_cursor = nir_after_block(nir_if_last_then_block(if_stmt)); - } - - nir_cf_list lcssa_list; - nir_cf_extract(&lcssa_list, start_cursor, end_cursor); - - /* Insert the cloned vars in the last continue branch */ - nir_cf_list_clone_and_reinsert(&lcssa_list, loop->cf_node.parent, - cursor, remap_table); - - start_cursor = terminator->continue_from_then ? - nir_before_block(nir_if_first_else_block(if_stmt)) : - nir_before_block(nir_if_first_then_block(if_stmt)); - - /* Reinsert the cloned vars back where they came from */ - nir_cf_reinsert(&lcssa_list, start_cursor); - - /* Delete the original loop header and body */ - nir_cf_delete(&lp_header); - nir_cf_delete(&lp_body); - - /* The original loop has been replaced so remove it. */ - nir_cf_node_remove(&loop->cf_node); - - _mesa_hash_table_destroy(remap_table, NULL); -} - -/* Unrolls the classic wrapper loops e.g - * - * do { - * // ... - * } while (false) - */ -static bool -wrapper_unroll(nir_loop *loop) -{ - if (!list_is_empty(&loop->info->loop_terminator_list)) { - - /* Unrolling a loop with a large number of exits can result in a - * large inrease in register pressure. For now we just skip - * unrolling if we have more than 3 exits (not including the break - * at the end of the loop). - * - * TODO: Most loops that fit this pattern are simply switch - * statements that are converted to a loop to take advantage of - * exiting jump instruction handling. In this case we could make - * use of a binary seach pattern like we do in - * nir_lower_indirect_derefs(), this should allow us to unroll the - * loops in an optimal way and should also avoid some of the - * register pressure that comes from simply nesting the - * terminators one after the other. - */ - if (list_length(&loop->info->loop_terminator_list) > 3) - return false; - - loop_prepare_for_unroll(loop); - - nir_cursor loop_end = nir_after_block(nir_loop_last_block(loop)); - list_for_each_entry(nir_loop_terminator, terminator, - &loop->info->loop_terminator_list, - loop_terminator_link) { - - /* Remove break from the terminator */ - nir_instr *break_instr = - nir_block_last_instr(terminator->break_block); - nir_instr_remove(break_instr); - - /* Pluck out the loop body. */ - nir_cf_list loop_body; - nir_cf_extract(&loop_body, - nir_after_cf_node(&terminator->nif->cf_node), - loop_end); - - /* Reinsert loop body into continue from block */ - nir_cf_reinsert(&loop_body, - nir_after_block(terminator->continue_from_block)); - - loop_end = terminator->continue_from_then ? - nir_after_block(nir_if_last_then_block(terminator->nif)) : - nir_after_block(nir_if_last_else_block(terminator->nif)); - } - } else { - loop_prepare_for_unroll(loop); - } - - /* Pluck out the loop body. */ - nir_cf_list loop_body; - nir_cf_extract(&loop_body, nir_before_block(nir_loop_first_block(loop)), - nir_after_block(nir_loop_last_block(loop))); - - /* Reinsert loop body after the loop */ - nir_cf_reinsert(&loop_body, nir_after_cf_node(&loop->cf_node)); - - /* The loop has been unrolled so remove it. */ - nir_cf_node_remove(&loop->cf_node); - - return true; -} - -static bool -is_access_out_of_bounds(nir_loop_terminator *term, nir_deref_instr *deref, - unsigned trip_count) -{ - for (nir_deref_instr *d = deref; d; d = nir_deref_instr_parent(d)) { - if (d->deref_type != nir_deref_type_array) - continue; - - nir_alu_instr *alu = nir_instr_as_alu(term->conditional_instr); - nir_src src = term->induction_rhs ? alu->src[1].src : alu->src[0].src; - if (!nir_srcs_equal(d->arr.index, src)) - continue; - - nir_deref_instr *parent = nir_deref_instr_parent(d); - assert(glsl_type_is_array(parent->type) || - glsl_type_is_matrix(parent->type) || - glsl_type_is_vector(parent->type)); - - /* We have already unrolled the loop and the new one will be imbedded in - * the innermost continue branch. So unless the array is greater than - * the trip count any iteration over the loop will be an out of bounds - * access of the array. - */ - unsigned length = glsl_type_is_vector(parent->type) ? - glsl_get_vector_elements(parent->type) : - glsl_get_length(parent->type); - return length <= trip_count; - } - - return false; -} - -/* If we know an array access is going to be out of bounds remove or replace - * the access with an undef. This can later result in the entire loop being - * removed by nir_opt_dead_cf(). - */ -static void -remove_out_of_bounds_induction_use(nir_shader *shader, nir_loop *loop, - nir_loop_terminator *term, - nir_cf_list *lp_header, - nir_cf_list *lp_body, - unsigned trip_count) -{ - if (!loop->info->guessed_trip_count) - return; - - /* Temporarily recreate the original loop so we can alter it */ - nir_cf_reinsert(lp_header, nir_after_block(nir_loop_last_block(loop))); - nir_cf_reinsert(lp_body, nir_after_block(nir_loop_last_block(loop))); - - nir_builder b; - nir_builder_init(&b, nir_cf_node_get_function(&loop->cf_node)); - - nir_foreach_block_in_cf_node(block, &loop->cf_node) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - /* Check for arrays variably-indexed by a loop induction variable. - * If this access is out of bounds remove the instruction or replace - * its use with an undefined instruction. - * If the loop is no longer useful we leave it for the appropriate - * pass to clean it up for us. - */ - if (intrin->intrinsic == nir_intrinsic_load_deref || - intrin->intrinsic == nir_intrinsic_store_deref || - intrin->intrinsic == nir_intrinsic_copy_deref) { - - if (is_access_out_of_bounds(term, nir_src_as_deref(intrin->src[0]), - trip_count)) { - if (intrin->intrinsic == nir_intrinsic_load_deref) { - nir_ssa_def *undef = - nir_ssa_undef(&b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - undef); - } else { - nir_instr_remove(instr); - continue; - } - } - - if (intrin->intrinsic == nir_intrinsic_copy_deref && - is_access_out_of_bounds(term, nir_src_as_deref(intrin->src[1]), - trip_count)) { - nir_instr_remove(instr); - } - } - } - } - - /* Now that we are done extract the loop header and body again */ - nir_cf_extract(lp_header, nir_before_block(nir_loop_first_block(loop)), - nir_before_cf_node(&term->nif->cf_node)); - nir_cf_extract(lp_body, nir_before_block(nir_loop_first_block(loop)), - nir_after_block(nir_loop_last_block(loop))); -} - -/* Partially unrolls loops that don't have a known trip count. - */ -static void -partial_unroll(nir_shader *shader, nir_loop *loop, unsigned trip_count) -{ - assert(list_is_singular(&loop->info->loop_terminator_list)); - - nir_loop_terminator *terminator = - list_first_entry(&loop->info->loop_terminator_list, - nir_loop_terminator, loop_terminator_link); - - assert(nir_is_trivial_loop_if(terminator->nif, terminator->break_block)); - - loop_prepare_for_unroll(loop); - - /* Pluck out the loop header */ - nir_cf_list lp_header; - nir_cf_extract(&lp_header, nir_before_block(nir_loop_first_block(loop)), - nir_before_cf_node(&terminator->nif->cf_node)); - - struct hash_table *remap_table = - _mesa_hash_table_create(NULL, _mesa_hash_pointer, - _mesa_key_pointer_equal); - - nir_cf_list lp_body; - nir_cf_node *unroll_loc = - complex_unroll_loop_body(loop, terminator, &lp_header, &lp_body, - remap_table, trip_count); - - /* Attempt to remove out of bounds array access */ - remove_out_of_bounds_induction_use(shader, loop, terminator, &lp_header, - &lp_body, trip_count); - - nir_cursor cursor = - get_complex_unroll_insert_location(unroll_loc, - terminator->continue_from_then); - - /* Reinsert the loop in the innermost nested continue branch of the unrolled - * loop. - */ - nir_loop *new_loop = nir_loop_create(shader); - nir_cf_node_insert(cursor, &new_loop->cf_node); - new_loop->partially_unrolled = true; - - /* Clone loop header and insert into new loop */ - nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent, - nir_after_cf_list(&new_loop->body), - remap_table); - - /* Clone loop body and insert into new loop */ - nir_cf_list_clone_and_reinsert(&lp_body, loop->cf_node.parent, - nir_after_cf_list(&new_loop->body), - remap_table); - - /* Insert break back into terminator */ - nir_jump_instr *brk = nir_jump_instr_create(shader, nir_jump_break); - nir_if *nif = nir_block_get_following_if(nir_loop_first_block(new_loop)); - if (terminator->continue_from_then) { - nir_instr_insert_after_block(nir_if_last_else_block(nif), &brk->instr); - } else { - nir_instr_insert_after_block(nir_if_last_then_block(nif), &brk->instr); - } - - /* Delete the original loop header and body */ - nir_cf_delete(&lp_header); - nir_cf_delete(&lp_body); - - /* The original loop has been replaced so remove it. */ - nir_cf_node_remove(&loop->cf_node); - - _mesa_hash_table_destroy(remap_table, NULL); -} - -static bool -is_indirect_load(nir_instr *instr) -{ - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - if ((intrin->intrinsic == nir_intrinsic_load_ubo || - intrin->intrinsic == nir_intrinsic_load_ssbo) && - !nir_src_is_const(intrin->src[1])) { - return true; - } - - if (intrin->intrinsic == nir_intrinsic_load_global) - return true; - - if (intrin->intrinsic == nir_intrinsic_load_deref || - intrin->intrinsic == nir_intrinsic_store_deref) { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - nir_variable_mode mem_modes = nir_var_mem_ssbo | nir_var_mem_ubo | nir_var_mem_global; - if (!nir_deref_mode_may_be(deref, mem_modes)) - return false; - while (deref) { - if ((deref->deref_type == nir_deref_type_array || - deref->deref_type == nir_deref_type_ptr_as_array) && - !nir_src_is_const(deref->arr.index)) { - return true; - } - deref = nir_deref_instr_parent(deref); - } - } - } else if (instr->type == nir_instr_type_tex) { - nir_tex_instr *tex = nir_instr_as_tex(instr); - - for (unsigned i = 0; i < tex->num_srcs; i++) { - if (!nir_src_is_const(tex->src[i].src)) - return true; - } - } - - return false; -} - -static bool -can_pipeline_loads(nir_loop *loop) -{ - if (!loop->info->exact_trip_count_known) - return false; - - bool interesting_loads = false; - - foreach_list_typed(nir_cf_node, cf_node, node, &loop->body) { - if (cf_node == &loop->info->limiting_terminator->nif->cf_node) - continue; - - /* Control flow usually prevents useful scheduling */ - if (cf_node->type != nir_cf_node_block) - return false; - - if (interesting_loads) - continue; - - nir_block *block = nir_cf_node_as_block(cf_node); - nir_foreach_instr(instr, block) { - if (is_indirect_load(instr)) { - interesting_loads = true; - break; - } - } - } - - return interesting_loads; -} - -/* - * Returns true if we should unroll the loop, otherwise false. - */ -static bool -check_unrolling_restrictions(nir_shader *shader, nir_loop *loop) -{ - if (loop->control == nir_loop_control_unroll) - return true; - - if (loop->control == nir_loop_control_dont_unroll) - return false; - - nir_loop_info *li = loop->info; - unsigned max_iter = shader->options->max_unroll_iterations; - /* Unroll much more aggressively if it can hide load latency. */ - if (shader->options->max_unroll_iterations_aggressive && can_pipeline_loads(loop)) - max_iter = shader->options->max_unroll_iterations_aggressive; - /* Tune differently if the loop has double ops and soft fp64 is in use */ - else if (shader->options->max_unroll_iterations_fp64 && loop->info->has_soft_fp64) - max_iter = shader->options->max_unroll_iterations_fp64; - unsigned trip_count = - li->max_trip_count ? li->max_trip_count : li->guessed_trip_count; - - if (li->force_unroll && !li->guessed_trip_count && trip_count <= max_iter) - return true; - - unsigned cost_limit = max_iter * LOOP_UNROLL_LIMIT; - unsigned cost = li->instr_cost * trip_count; - - if (cost <= cost_limit && trip_count <= max_iter) - return true; - - return false; -} - -static bool -process_loops(nir_shader *sh, nir_cf_node *cf_node, bool *has_nested_loop_out, - bool *unrolled_this_block); - -static bool -process_loops_in_block(nir_shader *sh, struct exec_list *block, - bool *has_nested_loop_out) -{ - /* We try to unroll as many loops in one pass as possible. - * E.g. we can safely unroll both loops in this block: - * - * if (...) { - * loop {...} - * } - * - * if (...) { - * loop {...} - * } - * - * Unrolling one loop doesn't affect the other one. - * - * On the other hand for block with: - * - * loop {...} - * ... - * loop {...} - * - * It is unsafe to unroll both loops in one pass without taking - * complicating precautions, since the structure of the block would - * change after unrolling the first loop. So in such a case we leave - * the second loop for the next iteration of unrolling to handle. - */ - - bool progress = false; - bool unrolled_this_block = false; - - foreach_list_typed(nir_cf_node, nested_node, node, block) { - if (process_loops(sh, nested_node, - has_nested_loop_out, &unrolled_this_block)) { - progress = true; - - /* If current node is unrolled we could not safely continue - * our iteration since we don't know the next node - * and it's hard to guarantee that we won't end up unrolling - * inner loop of the currently unrolled one, if such exists. - */ - if (unrolled_this_block) { - break; - } - } - } - - return progress; -} - -static bool -process_loops(nir_shader *sh, nir_cf_node *cf_node, bool *has_nested_loop_out, - bool *unrolled_this_block) -{ - bool progress = false; - bool has_nested_loop = false; - nir_loop *loop; - - switch (cf_node->type) { - case nir_cf_node_block: - return progress; - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(cf_node); - progress |= process_loops_in_block(sh, &if_stmt->then_list, - has_nested_loop_out); - progress |= process_loops_in_block(sh, &if_stmt->else_list, - has_nested_loop_out); - return progress; - } - case nir_cf_node_loop: { - loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - progress |= process_loops_in_block(sh, &loop->body, &has_nested_loop); - - break; - } - default: - unreachable("unknown cf node type"); - } - - const bool unrolled_child_block = progress; - - /* Don't attempt to unroll a second inner loop in this pass, wait until the - * next pass as we have altered the cf. - */ - if (!progress && loop->control != nir_loop_control_dont_unroll) { - - /* Remove the conditional break statements associated with all terminators - * that are associated with a fixed iteration count, except for the one - * associated with the limiting terminator--that one needs to stay, since - * it terminates the loop. - */ - if (loop->info->limiting_terminator) { - list_for_each_entry_safe(nir_loop_terminator, t, - &loop->info->loop_terminator_list, - loop_terminator_link) { - if (t->exact_trip_count_unknown) - continue; - - if (t != loop->info->limiting_terminator) { - - /* Only delete the if-statement if the continue block is empty. - * We trust that nir_opt_if() does its job well enough to - * remove all instructions from the continue block when possible. - */ - nir_block *first_continue_from_blk = t->continue_from_then ? - nir_if_first_then_block(t->nif) : - nir_if_first_else_block(t->nif); - - if (!(nir_cf_node_is_last(&first_continue_from_blk->cf_node) && - exec_list_is_empty(&first_continue_from_blk->instr_list))) - continue; - - /* Now delete the if */ - nir_cf_node_remove(&t->nif->cf_node); - - /* Also remove it from the terminator list */ - list_del(&t->loop_terminator_link); - - progress = true; - } - } - } - - /* Check for the classic - * - * do { - * // ... - * } while (false) - * - * that is used to wrap multi-line macros. GLSL IR also wraps switch - * statements in a loop like this. - */ - if (loop->info->limiting_terminator == NULL && - !loop->info->complex_loop) { - - nir_block *last_loop_blk = nir_loop_last_block(loop); - if (nir_block_ends_in_break(last_loop_blk)) { - progress = wrapper_unroll(loop); - goto exit; - } - - /* If we were able to guess the loop iteration based on array access - * then do a partial unroll. - */ - bool one_lt = list_is_singular(&loop->info->loop_terminator_list); - if (!has_nested_loop && one_lt && !loop->partially_unrolled && - loop->info->guessed_trip_count && - check_unrolling_restrictions(sh, loop)) { - partial_unroll(sh, loop, loop->info->guessed_trip_count); - progress = true; - } - } - - /* Intentionally don't consider exact_trip_count_known here. When - * max_trip_count is non-zero, it is the upper bound on the number of - * times the loop will iterate, but the loop may iterate less. For - * example, the following loop will iterate 0 or 1 time: - * - * for (i = 0; i < min(x, 1); i++) { ... } - * - * Trivial single-interation loops (e.g., do { ... } while (false)) and - * trivial zero-iteration loops (e.g., while (false) { ... }) will have - * already been handled. - * - * If the loop is known to execute at most once and meets the other - * unrolling criteria, unroll it even if it has nested loops. - * - * It is unlikely that such loops exist in real shaders. GraphicsFuzz is - * known to generate spurious loops that iterate exactly once. It is - * plausible that it could eventually start generating loops like the - * example above, so it seems logical to defend against it now. - */ - if (!loop->info->limiting_terminator || - (loop->info->max_trip_count != 1 && has_nested_loop)) - goto exit; - - if (!check_unrolling_restrictions(sh, loop)) - goto exit; - - if (loop->info->exact_trip_count_known) { - simple_unroll(loop); - progress = true; - } else { - /* Attempt to unroll loops with two terminators. */ - unsigned num_lt = list_length(&loop->info->loop_terminator_list); - if (num_lt == 2 && - !loop->info->limiting_terminator->exact_trip_count_unknown) { - bool limiting_term_second = true; - nir_loop_terminator *terminator = - list_first_entry(&loop->info->loop_terminator_list, - nir_loop_terminator, loop_terminator_link); - - - if (terminator->nif == loop->info->limiting_terminator->nif) { - limiting_term_second = false; - terminator = - list_last_entry(&loop->info->loop_terminator_list, - nir_loop_terminator, loop_terminator_link); - } - - /* If the first terminator has a trip count of zero and is the - * limiting terminator just do a simple unroll as the second - * terminator can never be reached. - */ - if (loop->info->max_trip_count == 0 && !limiting_term_second) { - simple_unroll(loop); - } else { - complex_unroll(loop, terminator, limiting_term_second); - } - progress = true; - } - - if (num_lt == 1) { - assert(loop->info->limiting_terminator->exact_trip_count_unknown); - complex_unroll_single_terminator(loop); - progress = true; - } - } - } - -exit: - *has_nested_loop_out = true; - if (progress && !unrolled_child_block) - *unrolled_this_block = true; - - return progress; -} - -static bool -nir_opt_loop_unroll_impl(nir_function_impl *impl, - nir_variable_mode indirect_mask, - bool force_unroll_sampler_indirect) -{ - bool progress = false; - nir_metadata_require(impl, nir_metadata_loop_analysis, indirect_mask, - (int) force_unroll_sampler_indirect); - nir_metadata_require(impl, nir_metadata_block_index); - - bool has_nested_loop = false; - progress |= process_loops_in_block(impl->function->shader, &impl->body, - &has_nested_loop); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_none); - nir_lower_regs_to_ssa_impl(impl); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -/** - * indirect_mask specifies which type of indirectly accessed variables - * should force loop unrolling. - */ -bool -nir_opt_loop_unroll(nir_shader *shader) -{ - bool progress = false; - - bool force_unroll_sampler_indirect = shader->options->force_indirect_unrolling_sampler; - nir_variable_mode indirect_mask = shader->options->force_indirect_unrolling; - nir_foreach_function(function, shader) { - if (function->impl) { - progress |= nir_opt_loop_unroll_impl(function->impl, indirect_mask, - force_unroll_sampler_indirect); - } - } - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_memcpy.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_memcpy.c deleted file mode 100644 index ded32ae..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_memcpy.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_builder.h" - -static bool -opt_memcpy_deref_cast(nir_intrinsic_instr *cpy, nir_src *deref_src) -{ - assert(cpy->intrinsic == nir_intrinsic_memcpy_deref); - - nir_deref_instr *cast = nir_src_as_deref(*deref_src); - if (cast == NULL || cast->deref_type != nir_deref_type_cast) - return false; - - /* We always have to replace the source with a deref, not a bare uint - * pointer. If it's the first deref in the chain, bail. - */ - nir_deref_instr *parent = nir_src_as_deref(cast->parent); - if (parent == NULL) - return false; - - /* If it has useful alignment information, we want to keep that */ - if (cast->cast.align_mul > 0) - return false; - - /* Casts to uint8 or int8 never do us any good; get rid of them */ - if (cast->type == glsl_int8_t_type() || - cast->type == glsl_uint8_t_type()) { - nir_instr_rewrite_src(&cpy->instr, deref_src, - nir_src_for_ssa(&parent->dest.ssa)); - return true; - } - - int64_t parent_type_size = glsl_get_explicit_size(parent->type, false); - if (parent_type_size < 0) - return false; - - if (!nir_src_is_const(cpy->src[2])) - return false; - - /* We don't want to get rid of the cast if the resulting type would be - * smaller than the amount of data we're copying. - */ - if (nir_src_as_uint(cpy->src[2]) < (uint64_t)parent_type_size) - return false; - - nir_instr_rewrite_src(&cpy->instr, deref_src, - nir_src_for_ssa(&parent->dest.ssa)); - return true; -} - -static bool -type_is_tightly_packed(const struct glsl_type *type, unsigned *size_out) -{ - unsigned size = 0; - if (glsl_type_is_struct_or_ifc(type)) { - unsigned num_fields = glsl_get_length(type); - for (unsigned i = 0; i < num_fields; i++) { - const struct glsl_struct_field *field = - glsl_get_struct_field_data(type, i); - - if (field->offset < 0 || field->offset != size) - return false; - - unsigned field_size; - if (!type_is_tightly_packed(field->type, &field_size)) - return false; - - size = field->offset + field_size; - } - } else if (glsl_type_is_array_or_matrix(type)) { - if (glsl_type_is_unsized_array(type)) - return false; - - unsigned stride = glsl_get_explicit_stride(type); - if (stride == 0) - return false; - - const struct glsl_type *elem_type = glsl_get_array_element(type); - - unsigned elem_size; - if (!type_is_tightly_packed(elem_type, &elem_size)) - return false; - - if (elem_size != stride) - return false; - - size = stride * glsl_get_length(type); - } else { - assert(glsl_type_is_vector_or_scalar(type)); - if (glsl_get_explicit_stride(type) > 0) - return false; - - if (glsl_type_is_boolean(type)) - return false; - - size = glsl_get_explicit_size(type, false); - } - - if (size_out) - *size_out = size; - return true; -} - -static bool -try_lower_memcpy(nir_builder *b, nir_intrinsic_instr *cpy, - struct set *complex_vars) -{ - nir_deref_instr *dst = nir_src_as_deref(cpy->src[0]); - nir_deref_instr *src = nir_src_as_deref(cpy->src[1]); - - /* A self-copy can always be eliminated */ - if (dst == src) { - nir_instr_remove(&cpy->instr); - return true; - } - - if (!nir_src_is_const(cpy->src[2])) - return false; - - uint64_t size = nir_src_as_uint(cpy->src[2]); - if (size == 0) { - nir_instr_remove(&cpy->instr); - return true; - } - - if (glsl_type_is_vector_or_scalar(src->type) && - glsl_type_is_vector_or_scalar(dst->type) && - glsl_get_explicit_size(dst->type, false) == size && - glsl_get_explicit_size(src->type, false) == size) { - b->cursor = nir_instr_remove(&cpy->instr); - nir_ssa_def *data = - nir_load_deref_with_access(b, src, nir_intrinsic_src_access(cpy)); - data = nir_bitcast_vector(b, data, glsl_get_bit_size(dst->type)); - assert(data->num_components == glsl_get_vector_elements(dst->type)); - nir_store_deref_with_access(b, dst, data, ~0 /* write mask */, - nir_intrinsic_dst_access(cpy)); - return true; - } - - unsigned type_size; - if (dst->type == src->type && - type_is_tightly_packed(dst->type, &type_size) && - type_size == size) { - b->cursor = nir_instr_remove(&cpy->instr); - nir_copy_deref_with_access(b, dst, src, - nir_intrinsic_dst_access(cpy), - nir_intrinsic_src_access(cpy)); - return true; - } - - /* If one of the two types is tightly packed and happens to equal the - * memcpy size, then we can get the memcpy by casting to that type and - * doing a deref copy. - * - * However, if we blindly apply this logic, we may end up with extra casts - * where we don't want them. The whole point of converting memcpy to - * copy_deref is in the hopes that nir_opt_copy_prop_vars or - * nir_lower_vars_to_ssa will get rid of the copy and those passes don't - * handle casts well. Heuristically, only do this optimization if the - * tightly packed type is on a deref with nir_var_function_temp so we stick - * the cast on the other mode. - */ - if (dst->modes == nir_var_function_temp && - type_is_tightly_packed(dst->type, &type_size) && - type_size == size) { - b->cursor = nir_instr_remove(&cpy->instr); - src = nir_build_deref_cast(b, &src->dest.ssa, - src->modes, dst->type, 0); - nir_copy_deref_with_access(b, dst, src, - nir_intrinsic_dst_access(cpy), - nir_intrinsic_src_access(cpy)); - return true; - } - - /* If we can get at the variable AND the only complex use of that variable - * is as a memcpy destination, then we don't have to care about any empty - * space in the variable. In particular, we know that the variable is never - * cast to any other type and it's never used as a memcpy source so nothing - * can see any padding bytes. This holds even if some other memcpy only - * writes to part of the variable. - */ - if (dst->deref_type == nir_deref_type_var && - dst->modes == nir_var_function_temp && - _mesa_set_search(complex_vars, dst->var) == NULL && - glsl_get_explicit_size(dst->type, false) <= size) { - b->cursor = nir_instr_remove(&cpy->instr); - src = nir_build_deref_cast(b, &src->dest.ssa, - src->modes, dst->type, 0); - nir_copy_deref_with_access(b, dst, src, - nir_intrinsic_dst_access(cpy), - nir_intrinsic_src_access(cpy)); - return true; - } - - if (src->modes == nir_var_function_temp && - type_is_tightly_packed(src->type, &type_size) && - type_size == size) { - b->cursor = nir_instr_remove(&cpy->instr); - dst = nir_build_deref_cast(b, &dst->dest.ssa, - dst->modes, src->type, 0); - nir_copy_deref_with_access(b, dst, src, - nir_intrinsic_dst_access(cpy), - nir_intrinsic_src_access(cpy)); - return true; - } - - return false; -} - -static bool -opt_memcpy_impl(nir_function_impl *impl) -{ - bool progress = false; - - nir_builder b; - nir_builder_init(&b, impl); - - struct set *complex_vars = _mesa_pointer_set_create(NULL); - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type != nir_deref_type_var) - continue; - - nir_deref_instr_has_complex_use_options opts = - nir_deref_instr_has_complex_use_allow_memcpy_dst; - if (nir_deref_instr_has_complex_use(deref, opts)) - _mesa_set_add(complex_vars, deref->var); - } - } - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *cpy = nir_instr_as_intrinsic(instr); - if (cpy->intrinsic != nir_intrinsic_memcpy_deref) - continue; - - while (opt_memcpy_deref_cast(cpy, &cpy->src[0])) - progress = true; - while (opt_memcpy_deref_cast(cpy, &cpy->src[1])) - progress = true; - - if (try_lower_memcpy(&b, cpy, complex_vars)) { - progress = true; - continue; - } - } - } - - _mesa_set_destroy(complex_vars, NULL); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_memcpy(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl && opt_memcpy_impl(function->impl)) - progress = true; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_move.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_move.c deleted file mode 100644 index 25b9254..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_move.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * Copyright © 2019 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -/** - * \file nir_opt_move.c - * - * This pass can move various operations just before their first use inside the - * same basic block. Usually this is to reduce register usage. It's probably - * not a good idea to use this in an optimization loop. - * - * Moving comparisons is useful because many GPUs generate condition codes - * for comparisons, and use predication for conditional selects and control - * flow. In a sequence such as: - * - * vec1 32 ssa_1 = flt a b - * - * vec1 32 ssa_2 = bcsel ssa_1 c d - * - * the backend would likely do the comparison, producing condition codes, - * then save those to a boolean value. The intervening operations might - * trash the condition codes. Then, in order to do the bcsel, it would - * need to re-populate the condition code register based on the boolean. - * - * By moving the comparison just before the bcsel, the condition codes could - * be used directly. This eliminates the need to reload them from the boolean - * (generally eliminating an instruction). It may also eliminate the need to - * create a boolean value altogether (unless it's used elsewhere), which could - * lower register pressure. - */ - -static inline bool -src_is_ssa(nir_src *src, void *state) -{ - return src->is_ssa; -} - -static inline bool -instr_reads_register(nir_instr *instr) -{ - return !nir_foreach_src(instr, src_is_ssa, NULL); -} - -static bool -nir_opt_move_block(nir_block *block, nir_move_options options) -{ - bool progress = false; - nir_instr *last_instr = nir_block_ends_in_jump(block) ? - nir_block_last_instr(block) : NULL; - const nir_if *iff = nir_block_get_following_if(block); - const nir_instr *if_cond_instr = iff ? iff->condition.ssa->parent_instr : NULL; - - /* Walk the instructions backwards. - * The instructions get indexed while iterating. - * For each instruction which can be moved, find the earliest user - * and insert the instruction before it. - * If multiple instructions have the same user, - * the original order is kept. - */ - unsigned index = 1; - unsigned last_reg_def_index = 0; - nir_foreach_instr_reverse_safe(instr, block) { - instr->index = index++; - - /* Don't move register defs */ - if (nir_instr_def_is_register(instr)) { - last_reg_def_index = instr->index; - continue; - } - - /* Check if this instruction can be moved downwards */ - if (!nir_can_move_instr(instr, options)) - continue; - - /* Check all users in this block which is the first */ - const nir_ssa_def *def = nir_instr_ssa_def(instr); - nir_instr *first_user = instr == if_cond_instr ? NULL : last_instr; - nir_foreach_use(use, def) { - nir_instr *parent = use->parent_instr; - if (parent->type == nir_instr_type_phi || parent->block != block) - continue; - if (!first_user || parent->index > first_user->index) - first_user = parent; - } - - if (first_user) { - /* Check predecessor instructions for the same index to keep the order */ - while (nir_instr_prev(first_user)->index == first_user->index) - first_user = nir_instr_prev(first_user); - - /* check if the user is already the immediate successor */ - if (nir_instr_prev(first_user) == instr) - continue; - - /* Don't move register reads past register defs */ - if (first_user->index < last_reg_def_index && - instr_reads_register(instr)) { - continue; - } - - /* Insert the instruction before it's first user */ - exec_node_remove(&instr->node); - instr->index = first_user->index; - exec_node_insert_node_before(&first_user->node, &instr->node); - progress = true; - continue; - } - - /* No user was found in this block: - * This instruction will be moved to the end of the block. - */ - assert(nir_block_last_instr(block)->type != nir_instr_type_jump); - if (instr == nir_block_last_instr(block)) - continue; - - exec_node_remove(&instr->node); - instr->index = 0; - exec_list_push_tail(&block->instr_list, &instr->node); - - /* update last_instr */ - last_instr = instr; - - progress = true; - } - - return progress; -} - -bool -nir_opt_move(nir_shader *shader, nir_move_options options) -{ - bool progress = false; - - nir_foreach_function(func, shader) { - if (!func->impl) - continue; - - bool impl_progress = false; - nir_foreach_block(block, func->impl) { - if (nir_opt_move_block(block, options)) - impl_progress = true; - } - - if (impl_progress) { - nir_metadata_preserve(func->impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs); - progress = true; - } else { - nir_metadata_preserve(func->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_move_discards_to_top.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_move_discards_to_top.c deleted file mode 100644 index d31de33..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_move_discards_to_top.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_control_flow.h" -#include "nir_worklist.h" - -static bool -nir_op_is_derivative(nir_op op) -{ - return op == nir_op_fddx || - op == nir_op_fddy || - op == nir_op_fddx_fine || - op == nir_op_fddy_fine || - op == nir_op_fddx_coarse || - op == nir_op_fddy_coarse; -} - -static bool -nir_texop_implies_derivative(nir_texop op) -{ - return op == nir_texop_tex || - op == nir_texop_txb || - op == nir_texop_lod; -} -#define MOVE_INSTR_FLAG 1 -#define STOP_PROCESSING_INSTR_FLAG 2 - -/** Check recursively if the source can be moved to the top of the shader. - * Sets instr->pass_flags to MOVE_INSTR_FLAG and adds the instr - * to the given worklist - */ -static bool -can_move_src(nir_src *src, void *worklist) -{ - if (!src->is_ssa) - return false; - - nir_instr *instr = src->ssa->parent_instr; - if (instr->pass_flags) - return true; - - /* Phi instructions can't be moved at all. Also, if we're dependent on - * a phi then we are dependent on some other bit of control flow and - * it's hard to figure out the proper condition. - */ - if (instr->type == nir_instr_type_phi) - return false; - - if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic == nir_intrinsic_load_deref) { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_is_one_of(deref, nir_var_read_only_modes)) - return false; - } else if (!(nir_intrinsic_infos[intrin->intrinsic].flags & - NIR_INTRINSIC_CAN_REORDER)) { - return false; - } - } - - /* set pass_flags and remember the instruction for potential cleanup */ - instr->pass_flags = MOVE_INSTR_FLAG; - nir_instr_worklist_push_tail(worklist, instr); - - if (!nir_foreach_src(instr, can_move_src, worklist)) { - return false; - } - return true; -} - -/** Try to mark a discard or demote instruction for moving - * - * This function does two things. One is that it searches through the - * dependency chain to see if this discard is an instruction that we can move - * up to the top. Second, if the discard is one we can move, it tags the - * discard and its dependencies (using pass_flags = 1). - * Demote are handled the same way, except that they can still be moved up - * when implicit derivatives are used. - */ -static bool -try_move_discard(nir_intrinsic_instr *discard) -{ - /* We require the discard to be in the top level of control flow. We - * could, in theory, move discards that are inside ifs or loops but that - * would be a lot more work. - */ - if (discard->instr.block->cf_node.parent->type != nir_cf_node_function) - return false; - - /* Build the set of all instructions discard depends on to be able to - * clear the flags in case the discard cannot be moved. - */ - nir_instr_worklist *work = nir_instr_worklist_create(); - if (!work) - return false; - discard->instr.pass_flags = MOVE_INSTR_FLAG; - - bool can_move_discard = can_move_src(&discard->src[0], work); - if (!can_move_discard) { - /* Moving the discard is impossible: clear the flags */ - discard->instr.pass_flags = 0; - nir_foreach_instr_in_worklist(instr, work) - instr->pass_flags = 0; - } - - nir_instr_worklist_destroy(work); - - return can_move_discard; -} - -static bool -opt_move_discards_to_top_impl(nir_function_impl *impl) -{ - bool progress = false; - bool consider_discards = true; - bool moved = false; - - /* Walk through the instructions and look for a discard that we can move - * to the top of the program. If we hit any operation along the way that - * we cannot safely move a discard above, break out of the loop and stop - * trying to move any more discards. - */ - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - instr->pass_flags = 0; - - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (nir_op_is_derivative(alu->op)) - consider_discards = false; - continue; - } - - case nir_instr_type_deref: - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: - case nir_instr_type_phi: - /* These are all safe */ - continue; - - case nir_instr_type_call: - instr->pass_flags = STOP_PROCESSING_INSTR_FLAG; - /* We don't know what the function will do */ - goto break_all; - - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - if (nir_texop_implies_derivative(tex->op)) - consider_discards = false; - continue; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (nir_intrinsic_writes_external_memory(intrin)) { - instr->pass_flags = STOP_PROCESSING_INSTR_FLAG; - goto break_all; - } - - if ((intrin->intrinsic == nir_intrinsic_discard_if && consider_discards) || - intrin->intrinsic == nir_intrinsic_demote_if) - moved = moved || try_move_discard(intrin); - continue; - } - - case nir_instr_type_jump: { - nir_jump_instr *jump = nir_instr_as_jump(instr); - /* A return would cause the discard to not get executed */ - if (jump->type == nir_jump_return) { - instr->pass_flags = STOP_PROCESSING_INSTR_FLAG; - goto break_all; - } - continue; - } - - case nir_instr_type_parallel_copy: - unreachable("Unhanded instruction type"); - } - } - } -break_all: - - if (moved) { - /* Walk the list of instructions and move the discard/demote and - * everything it depends on to the top. We walk the instruction list - * here because it ensures that everything stays in its original order. - * This provides stability for the algorithm and ensures that we don't - * accidentally get dependencies out-of-order. - */ - nir_cursor cursor = nir_before_block(nir_start_block(impl)); - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->pass_flags == STOP_PROCESSING_INSTR_FLAG) - return progress; - if (instr->pass_flags == MOVE_INSTR_FLAG) { - progress |= nir_instr_move(cursor, instr); - cursor = nir_after_instr(instr); - } - } - } - } - - return progress; -} - -/* This optimization only operates on discard_if/demoe_if so - * nir_opt_conditional_discard and nir_lower_discard_or_demote - * should have been called before. - */ -bool -nir_opt_move_discards_to_top(nir_shader *shader) -{ - assert(shader->info.stage == MESA_SHADER_FRAGMENT); - - bool progress = false; - - if (!shader->info.fs.uses_discard) - return false; - - nir_foreach_function(function, shader) { - if (function->impl && opt_move_discards_to_top_impl(function->impl)) { - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - progress = true; - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_non_uniform_access.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_non_uniform_access.c deleted file mode 100644 index 1e407bc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_non_uniform_access.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright © 2022 Collabora Ltd. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -is_ubo_intrinsic(nir_intrinsic_instr *intrin) -{ - return intrin->intrinsic == nir_intrinsic_load_ubo; -} - -static bool -is_ssbo_intrinsic(nir_intrinsic_instr *intrin) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_load_ssbo: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: - case nir_intrinsic_ssbo_atomic_fadd: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_fcomp_swap: - return true; - - default: - return false; - } -} - -static bool -is_image_intrinsic(nir_intrinsic_instr *intrin) -{ - switch (intrin->intrinsic) { - case nir_intrinsic_image_load: - case nir_intrinsic_image_sparse_load: - case nir_intrinsic_image_store: - case nir_intrinsic_image_atomic_add: - case nir_intrinsic_image_atomic_imin: - case nir_intrinsic_image_atomic_umin: - case nir_intrinsic_image_atomic_imax: - case nir_intrinsic_image_atomic_umax: - case nir_intrinsic_image_atomic_and: - case nir_intrinsic_image_atomic_or: - case nir_intrinsic_image_atomic_xor: - case nir_intrinsic_image_atomic_exchange: - case nir_intrinsic_image_atomic_comp_swap: - case nir_intrinsic_image_atomic_fadd: - case nir_intrinsic_image_atomic_fmin: - case nir_intrinsic_image_atomic_fmax: - case nir_intrinsic_image_size: - case nir_intrinsic_image_samples: - case nir_intrinsic_image_fragment_mask_load_amd: - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_bindless_image_sparse_load: - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_fmax: - case nir_intrinsic_bindless_image_size: - case nir_intrinsic_bindless_image_samples: - case nir_intrinsic_bindless_image_fragment_mask_load_amd: - case nir_intrinsic_image_deref_load: - case nir_intrinsic_image_deref_sparse_load: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_image_deref_fragment_mask_load_amd: - return true; - - default: - return false; - } -} - -static bool -has_non_uniform_tex_access(nir_tex_instr *tex) -{ - return tex->texture_non_uniform || tex->sampler_non_uniform; -} - -static bool -has_non_uniform_access_intrin(nir_intrinsic_instr *intrin) -{ - return (nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM) != 0; -} - -static bool -nir_has_non_uniform_access_impl(nir_function_impl *impl, enum nir_lower_non_uniform_access_type types) -{ - nir_foreach_block_safe(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - if ((types & nir_lower_non_uniform_texture_access) && - has_non_uniform_tex_access(tex)) - return true; - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (is_ubo_intrinsic(intrin)) { - if ((types & nir_lower_non_uniform_ubo_access) && - has_non_uniform_access_intrin(intrin)) - return true; - } else if (is_ssbo_intrinsic(intrin)) { - if ((types & nir_lower_non_uniform_ssbo_access) && - has_non_uniform_access_intrin(intrin)) - return true; - } else if (is_image_intrinsic(intrin)) { - if ((types & nir_lower_non_uniform_image_access) && - has_non_uniform_access_intrin(intrin)) - return true; - } else { - /* Nothing to do */ - } - break; - } - - default: - /* Nothing to do */ - break; - } - } - } - - return false; -} - -bool -nir_has_non_uniform_access(nir_shader *shader, enum nir_lower_non_uniform_access_type types) -{ - nir_foreach_function(function, shader) { - if (function->impl && nir_has_non_uniform_access_impl(function->impl, types)) - return true; - } - - return false; -} - -static bool -opt_non_uniform_tex_access(nir_tex_instr *tex) -{ - if (!has_non_uniform_tex_access(tex)) - return false; - - bool progress = false; - - for (unsigned i = 0; i < tex->num_srcs; i++) { - switch (tex->src[i].src_type) { - case nir_tex_src_texture_offset: - case nir_tex_src_texture_handle: - case nir_tex_src_texture_deref: - if (tex->texture_non_uniform && !tex->src[i].src.ssa->divergent) { - tex->texture_non_uniform = false; - progress = true; - } - break; - - case nir_tex_src_sampler_offset: - case nir_tex_src_sampler_handle: - case nir_tex_src_sampler_deref: - if (tex->sampler_non_uniform && !tex->src[i].src.ssa->divergent) { - tex->sampler_non_uniform = false; - progress = true; - } - break; - - default: - break; - } - } - - return progress; -} - -static bool -opt_non_uniform_access_intrin(nir_intrinsic_instr *intrin, unsigned handle_src) -{ - if (!has_non_uniform_access_intrin(intrin)) - return false; - - if (intrin->src[handle_src].ssa->divergent) - return false; - - nir_intrinsic_set_access(intrin, nir_intrinsic_access(intrin) & ~ACCESS_NON_UNIFORM); - - return true; -} - -static bool -nir_opt_non_uniform_access_instr(nir_builder *b, nir_instr *instr, UNUSED void *user_data) -{ - switch (instr->type) { - case nir_instr_type_tex: - return opt_non_uniform_tex_access(nir_instr_as_tex(instr)); - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (is_ubo_intrinsic(intrin) || is_ssbo_intrinsic(intrin) || is_image_intrinsic(intrin)) { - unsigned handle_src = 0; - /* SSBO Stores put the index in the second source */ - if (intrin->intrinsic == nir_intrinsic_store_ssbo) - handle_src = 1; - return opt_non_uniform_access_intrin(intrin, handle_src); - } - break; - } - - default: - /* Nothing to do */ - break; - } - - return false; -} - -bool -nir_opt_non_uniform_access(nir_shader *shader) -{ - NIR_PASS(_, shader, nir_convert_to_lcssa, true, true); - nir_divergence_analysis(shader); - - bool progress = nir_shader_instructions_pass(shader, - nir_opt_non_uniform_access_instr, - nir_metadata_all, NULL); - - NIR_PASS(_, shader, nir_opt_remove_phis); /* cleanup LCSSA phis */ - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_offsets.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_offsets.c deleted file mode 100644 index 025d311..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_offsets.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Timur Kristóf - * - */ - -#include "nir.h" -#include "nir_builder.h" - -typedef struct -{ - struct hash_table *range_ht; - const nir_opt_offsets_options *options; -} opt_offsets_state; - -static nir_ssa_scalar -try_extract_const_addition(nir_builder *b, nir_ssa_scalar val, opt_offsets_state *state, unsigned *out_const, uint32_t max) -{ - val = nir_ssa_scalar_chase_movs(val); - - if (!nir_ssa_scalar_is_alu(val)) - return val; - - nir_alu_instr *alu = nir_instr_as_alu(val.def->parent_instr); - if (alu->op != nir_op_iadd || - !alu->src[0].src.is_ssa || - !alu->src[1].src.is_ssa || - alu->src[0].negate || alu->src[0].abs || - alu->src[1].negate || alu->src[1].abs) - return val; - - nir_ssa_scalar src[2] = { - {alu->src[0].src.ssa, alu->src[0].swizzle[val.comp]}, - {alu->src[1].src.ssa, alu->src[1].swizzle[val.comp]}, - }; - - /* Make sure that we aren't taking out an addition that could trigger - * unsigned wrapping in a way that would change the semantics of the load. - * Ignored for ints-as-floats (lower_bitops is a proxy for that), where - * unsigned wrapping doesn't make sense. - */ - if (!alu->no_unsigned_wrap && !b->shader->options->lower_bitops) { - if (!state->range_ht) { - /* Cache for nir_unsigned_upper_bound */ - state->range_ht = _mesa_pointer_hash_table_create(NULL); - } - - /* Check if there can really be an unsigned wrap. */ - uint32_t ub0 = nir_unsigned_upper_bound(b->shader, state->range_ht, src[0], NULL); - uint32_t ub1 = nir_unsigned_upper_bound(b->shader, state->range_ht, src[1], NULL); - - if ((UINT32_MAX - ub0) < ub1) - return val; - - /* We proved that unsigned wrap won't be possible, so we can set the flag too. */ - alu->no_unsigned_wrap = true; - } - - for (unsigned i = 0; i < 2; ++i) { - src[i] = nir_ssa_scalar_chase_movs(src[i]); - if (nir_ssa_scalar_is_const(src[i])) { - uint32_t offset = nir_ssa_scalar_as_uint(src[i]); - if (offset + *out_const <= max) { - *out_const += offset; - return try_extract_const_addition(b, src[1 - i], state, out_const, max); - } - } - } - - uint32_t orig_offset = *out_const; - src[0] = try_extract_const_addition(b, src[0], state, out_const, max); - src[1] = try_extract_const_addition(b, src[1], state, out_const, max); - if (*out_const == orig_offset) - return val; - - b->cursor = nir_before_instr(&alu->instr); - nir_ssa_def *r = - nir_iadd(b, nir_channel(b, src[0].def, src[0].comp), - nir_channel(b, src[1].def, src[1].comp)); - return nir_get_ssa_scalar(r, 0); -} - -static bool -try_fold_load_store(nir_builder *b, - nir_intrinsic_instr *intrin, - opt_offsets_state *state, - unsigned offset_src_idx, - uint32_t max) -{ - /* Assume that BASE is the constant offset of a load/store. - * Try to constant-fold additions to the offset source - * into the actual const offset of the instruction. - */ - - unsigned off_const = nir_intrinsic_base(intrin); - nir_src *off_src = &intrin->src[offset_src_idx]; - nir_ssa_def *replace_src = NULL; - - if (!off_src->is_ssa || off_src->ssa->bit_size != 32) - return false; - - if (!nir_src_is_const(*off_src)) { - uint32_t add_offset = 0; - nir_ssa_scalar val = {.def = off_src->ssa, .comp = 0}; - val = try_extract_const_addition(b, val, state, &add_offset, max - off_const); - if (add_offset == 0) - return false; - off_const += add_offset; - b->cursor = nir_before_instr(&intrin->instr); - replace_src = nir_channel(b, val.def, val.comp); - } else if (nir_src_as_uint(*off_src) && off_const + nir_src_as_uint(*off_src) <= max) { - off_const += nir_src_as_uint(*off_src); - b->cursor = nir_before_instr(&intrin->instr); - replace_src = nir_imm_zero(b, off_src->ssa->num_components, off_src->ssa->bit_size); - } - - if (!replace_src) - return false; - - nir_instr_rewrite_src(&intrin->instr, &intrin->src[offset_src_idx], nir_src_for_ssa(replace_src)); - - assert(off_const <= max); - nir_intrinsic_set_base(intrin, off_const); - return true; -} - -static bool -try_fold_shared2(nir_builder *b, - nir_intrinsic_instr *intrin, - opt_offsets_state *state, - unsigned offset_src_idx) -{ - unsigned comp_size = (intrin->intrinsic == nir_intrinsic_load_shared2_amd ? - intrin->dest.ssa.bit_size : intrin->src[0].ssa->bit_size) / 8; - unsigned stride = (nir_intrinsic_st64(intrin) ? 64 : 1) * comp_size; - unsigned offset0 = nir_intrinsic_offset0(intrin) * stride; - unsigned offset1 = nir_intrinsic_offset1(intrin) * stride; - nir_src *off_src = &intrin->src[offset_src_idx]; - - if (!nir_src_is_const(*off_src)) - return false; - - unsigned const_offset = nir_src_as_uint(*off_src); - offset0 += const_offset; - offset1 += const_offset; - bool st64 = offset0 % (64 * comp_size) == 0 && offset1 % (64 * comp_size) == 0; - stride = (st64 ? 64 : 1) * comp_size; - if (const_offset % stride || offset0 > 255 * stride || offset1 > 255 * stride) - return false; - - b->cursor = nir_before_instr(&intrin->instr); - nir_instr_rewrite_src(&intrin->instr, off_src, nir_src_for_ssa(nir_imm_zero(b, 1, 32))); - nir_intrinsic_set_offset0(intrin, offset0 / stride); - nir_intrinsic_set_offset1(intrin, offset1 / stride); - nir_intrinsic_set_st64(intrin, st64); - - return true; -} - -static bool -process_instr(nir_builder *b, nir_instr *instr, void *s) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - opt_offsets_state *state = (opt_offsets_state *) s; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_uniform: - return try_fold_load_store(b, intrin, state, 0, state->options->uniform_max); - case nir_intrinsic_load_ubo_vec4: - return try_fold_load_store(b, intrin, state, 1, state->options->ubo_vec4_max); - case nir_intrinsic_load_shared: - case nir_intrinsic_load_shared_ir3: - return try_fold_load_store(b, intrin, state, 0, state->options->shared_max); - case nir_intrinsic_store_shared: - case nir_intrinsic_store_shared_ir3: - return try_fold_load_store(b, intrin, state, 1, state->options->shared_max); - case nir_intrinsic_load_shared2_amd: - return try_fold_shared2(b, intrin, state, 0); - case nir_intrinsic_store_shared2_amd: - return try_fold_shared2(b, intrin, state, 1); - case nir_intrinsic_load_buffer_amd: - return try_fold_load_store(b, intrin, state, 1, state->options->buffer_max); - case nir_intrinsic_store_buffer_amd: - return try_fold_load_store(b, intrin, state, 2, state->options->buffer_max); - default: - return false; - } - - unreachable("Can't reach here."); -} - -bool -nir_opt_offsets(nir_shader *shader, const nir_opt_offsets_options *options) -{ - opt_offsets_state state; - state.range_ht = NULL; - state.options = options; - - bool p = nir_shader_instructions_pass(shader, process_instr, - nir_metadata_block_index | - nir_metadata_dominance, - &state); - - if (state.range_ht) - _mesa_hash_table_destroy(state.range_ht, NULL); - - - return p; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_peephole_select.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_peephole_select.c deleted file mode 100644 index 9890c65..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_peephole_select.c +++ /dev/null @@ -1,519 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_control_flow.h" -#include "nir_search_helpers.h" - -/* - * Implements a small peephole optimization that looks for - * - * if (cond) { - * - * } else { - * - * } - * phi - * ... - * phi - * - * and replaces it with: - * - * - * - * bcsel - * ... - * bcsel - * - * where the SSA defs are ALU operations or other cheap instructions (not - * texturing, for example). - * - * If the number of ALU operations in the branches is greater than the limit - * parameter, then the optimization is skipped. In limit=0 mode, the SSA defs - * must only be MOVs which we expect to get copy-propagated away once they're - * out of the inner blocks. - */ - -static bool -block_check_for_allowed_instrs(nir_block *block, unsigned *count, - unsigned limit, bool indirect_load_ok, - bool expensive_alu_ok) -{ - bool alu_ok = limit != 0; - - /* Used on non-control-flow HW to flatten all IFs. */ - if (limit == ~0) { - nir_foreach_instr(instr, block) { - switch (instr->type) { - case nir_instr_type_alu: - case nir_instr_type_deref: - case nir_instr_type_load_const: - case nir_instr_type_phi: - case nir_instr_type_ssa_undef: - case nir_instr_type_tex: - break; - - case nir_instr_type_intrinsic: - if (!nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr))) - return false; - break; - - case nir_instr_type_call: - case nir_instr_type_jump: - case nir_instr_type_parallel_copy: - return false; - } - } - return true; - } - - nir_foreach_instr(instr, block) { - switch (instr->type) { - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: { - nir_deref_instr *const deref = nir_src_as_deref(intrin->src[0]); - - switch (deref->modes) { - case nir_var_shader_in: - case nir_var_uniform: - case nir_var_image: - /* Don't try to remove flow control around an indirect load - * because that flow control may be trying to avoid invalid - * loads. - */ - if (!indirect_load_ok && nir_deref_instr_has_indirect(deref)) - return false; - - break; - - default: - return false; - } - break; - } - - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_preamble: - case nir_intrinsic_load_helper_invocation: - case nir_intrinsic_is_helper_invocation: - case nir_intrinsic_load_front_face: - case nir_intrinsic_load_view_index: - case nir_intrinsic_load_layer_id: - case nir_intrinsic_load_frag_coord: - case nir_intrinsic_load_sample_pos: - case nir_intrinsic_load_sample_pos_or_center: - case nir_intrinsic_load_sample_id: - case nir_intrinsic_load_sample_mask_in: - case nir_intrinsic_load_vertex_id_zero_base: - case nir_intrinsic_load_first_vertex: - case nir_intrinsic_load_base_instance: - case nir_intrinsic_load_instance_id: - case nir_intrinsic_load_draw_id: - case nir_intrinsic_load_num_workgroups: - case nir_intrinsic_load_workgroup_id: - case nir_intrinsic_load_local_invocation_id: - case nir_intrinsic_load_local_invocation_index: - case nir_intrinsic_load_subgroup_id: - case nir_intrinsic_load_subgroup_invocation: - case nir_intrinsic_load_num_subgroups: - case nir_intrinsic_load_frag_shading_rate: - case nir_intrinsic_is_sparse_texels_resident: - case nir_intrinsic_sparse_residency_code_and: - if (!alu_ok) - return false; - break; - - default: - return false; - } - - break; - } - - case nir_instr_type_deref: - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: - break; - - case nir_instr_type_alu: { - nir_alu_instr *mov = nir_instr_as_alu(instr); - bool movelike = false; - - switch (mov->op) { - case nir_op_mov: - case nir_op_fneg: - case nir_op_ineg: - case nir_op_fabs: - case nir_op_iabs: - case nir_op_vec2: - case nir_op_vec3: - case nir_op_vec4: - case nir_op_vec5: - case nir_op_vec8: - case nir_op_vec16: - movelike = true; - break; - - case nir_op_fcos: - case nir_op_fdiv: - case nir_op_fexp2: - case nir_op_flog2: - case nir_op_fmod: - case nir_op_fpow: - case nir_op_frcp: - case nir_op_frem: - case nir_op_frsq: - case nir_op_fsin: - case nir_op_idiv: - case nir_op_irem: - case nir_op_udiv: - if (!alu_ok || !expensive_alu_ok) - return false; - - break; - - default: - if (!alu_ok) { - /* It must be a move-like operation. */ - return false; - } - break; - } - - /* It must be SSA */ - if (!mov->dest.dest.is_ssa) - return false; - - if (alu_ok) { - /* If the ALU operation is an fsat or a move-like operation, do - * not count it. The expectation is that it will eventually be - * merged as a destination modifier or source modifier on some - * other instruction. - */ - if (mov->op != nir_op_fsat && !movelike) - (*count)++; - } else { - /* Can't handle saturate */ - if (mov->dest.saturate) - return false; - - /* The only uses of this definition must be phis in the successor */ - nir_foreach_use_including_if(use, &mov->dest.dest.ssa) { - if (use->is_if || - use->parent_instr->type != nir_instr_type_phi || - use->parent_instr->block != block->successors[0]) - return false; - } - } - break; - } - - default: - return false; - } - } - - return true; -} - -/** - * Try to collapse nested ifs: - * This optimization turns - * - * if (cond1) { - * - * if (cond2) { - * - * } else { - * } - * } else { - * } - * - * into - * - * - * if (cond1 && cond2) { - * - * } else { - * } - * - */ -static bool -nir_opt_collapse_if(nir_if *if_stmt, nir_shader *shader, unsigned limit, - bool indirect_load_ok, bool expensive_alu_ok) -{ - /* the if has to be nested */ - if (if_stmt->cf_node.parent->type != nir_cf_node_if) - return false; - - nir_if *parent_if = nir_cf_node_as_if(if_stmt->cf_node.parent); - if (parent_if->control == nir_selection_control_dont_flatten) - return false; - - /* check if the else block is empty */ - if (!nir_cf_list_is_empty_block(&if_stmt->else_list)) - return false; - - /* this opt doesn't make much sense if the branch is empty */ - if (nir_cf_list_is_empty_block(&if_stmt->then_list)) - return false; - - /* the nested if has to be the only cf_node: - * i.e. */ - if (exec_list_length(&parent_if->then_list) != 3) - return false; - - /* check if the else block of the parent if is empty */ - if (!nir_cf_list_is_empty_block(&parent_if->else_list)) - return false; - - /* check if the block after the nested if is empty except for phis */ - nir_block *last = nir_if_last_then_block(parent_if); - nir_instr *last_instr = nir_block_last_instr(last); - if (last_instr && last_instr->type != nir_instr_type_phi) - return false; - - /* check if all outer phis become trivial after merging the ifs */ - nir_foreach_instr(instr, last) { - if (parent_if->control == nir_selection_control_flatten) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_phi_src *else_src = - nir_phi_get_src_from_block(phi, nir_if_first_else_block(if_stmt)); - - nir_foreach_use (src, &phi->dest.ssa) { - assert(src->parent_instr->type == nir_instr_type_phi); - nir_phi_src *phi_src = - nir_phi_get_src_from_block(nir_instr_as_phi(src->parent_instr), - nir_if_first_else_block(parent_if)); - if (phi_src->src.ssa != else_src->src.ssa) - return false; - } - } - - if (parent_if->control == nir_selection_control_flatten) { - /* Override driver defaults */ - indirect_load_ok = true; - expensive_alu_ok = true; - } - - /* check if the block before the nested if matches the requirements */ - nir_block *first = nir_if_first_then_block(parent_if); - unsigned count = 0; - if (!block_check_for_allowed_instrs(first, &count, limit != 0, - indirect_load_ok, expensive_alu_ok)) - return false; - - if (count > limit && parent_if->control != nir_selection_control_flatten) - return false; - - /* trivialize succeeding phis */ - nir_foreach_instr(instr, last) { - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_phi_src *else_src = - nir_phi_get_src_from_block(phi, nir_if_first_else_block(if_stmt)); - nir_foreach_use_safe(src, &phi->dest.ssa) { - nir_phi_src *phi_src = - nir_phi_get_src_from_block(nir_instr_as_phi(src->parent_instr), - nir_if_first_else_block(parent_if)); - if (phi_src->src.ssa == else_src->src.ssa) - nir_instr_rewrite_src(src->parent_instr, &phi_src->src, - nir_src_for_ssa(&phi->dest.ssa)); - } - } - - /* combine the conditions */ - struct nir_builder b; - nir_builder_init(&b, nir_cf_node_get_function(&if_stmt->cf_node)->function->impl); - b.cursor = nir_before_cf_node(&if_stmt->cf_node); - nir_ssa_def *cond = nir_iand(&b, if_stmt->condition.ssa, - parent_if->condition.ssa); - nir_if_rewrite_condition(if_stmt, nir_src_for_ssa(cond)); - - /* move the whole inner if before the parent if */ - nir_cf_list tmp; - nir_cf_extract(&tmp, nir_before_block(first), - nir_after_block(last)); - nir_cf_reinsert(&tmp, nir_before_cf_node(&parent_if->cf_node)); - - /* The now empty parent if will be cleaned up by other passes */ - return true; -} - -static bool -nir_opt_peephole_select_block(nir_block *block, nir_shader *shader, - unsigned limit, bool indirect_load_ok, - bool expensive_alu_ok) -{ - if (nir_cf_node_is_first(&block->cf_node)) - return false; - - nir_cf_node *prev_node = nir_cf_node_prev(&block->cf_node); - if (prev_node->type != nir_cf_node_if) - return false; - - nir_block *prev_block = nir_cf_node_as_block(nir_cf_node_prev(prev_node)); - - /* If the last instruction before this if/else block is a jump, we can't - * append stuff after it because it would break a bunch of assumption about - * control flow (nir_validate expects the successor of a return/halt jump - * to be the end of the function, which might not match the successor of - * the if/else blocks). - */ - if (nir_block_ends_in_return_or_halt(prev_block)) - return false; - - nir_if *if_stmt = nir_cf_node_as_if(prev_node); - - /* first, try to collapse the if */ - if (nir_opt_collapse_if(if_stmt, shader, limit, - indirect_load_ok, expensive_alu_ok)) - return true; - - if (if_stmt->control == nir_selection_control_dont_flatten) - return false; - - nir_block *then_block = nir_if_first_then_block(if_stmt); - nir_block *else_block = nir_if_first_else_block(if_stmt); - - /* We can only have one block in each side ... */ - if (nir_if_last_then_block(if_stmt) != then_block || - nir_if_last_else_block(if_stmt) != else_block) - return false; - - if (if_stmt->control == nir_selection_control_flatten) { - /* Override driver defaults */ - indirect_load_ok = true; - expensive_alu_ok = true; - } - - /* ... and those blocks must only contain "allowed" instructions. */ - unsigned count = 0; - if (!block_check_for_allowed_instrs(then_block, &count, limit, - indirect_load_ok, expensive_alu_ok) || - !block_check_for_allowed_instrs(else_block, &count, limit, - indirect_load_ok, expensive_alu_ok)) - return false; - - if (count > limit && if_stmt->control != nir_selection_control_flatten) - return false; - - /* At this point, we know that the previous CFG node is an if-then - * statement containing only moves to phi nodes in this block. We can - * just remove that entire CF node and replace all of the phi nodes with - * selects. - */ - - /* First, we move the remaining instructions from the blocks to the - * block before. We have already guaranteed that this is safe by - * calling block_check_for_allowed_instrs() - */ - nir_foreach_instr_safe(instr, then_block) { - exec_node_remove(&instr->node); - instr->block = prev_block; - exec_list_push_tail(&prev_block->instr_list, &instr->node); - } - - nir_foreach_instr_safe(instr, else_block) { - exec_node_remove(&instr->node); - instr->block = prev_block; - exec_list_push_tail(&prev_block->instr_list, &instr->node); - } - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_alu_instr *sel = nir_alu_instr_create(shader, nir_op_bcsel); - nir_src_copy(&sel->src[0].src, &if_stmt->condition, &sel->instr); - /* Splat the condition to all channels */ - memset(sel->src[0].swizzle, 0, sizeof sel->src[0].swizzle); - - assert(exec_list_length(&phi->srcs) == 2); - nir_foreach_phi_src(src, phi) { - assert(src->pred == then_block || src->pred == else_block); - assert(src->src.is_ssa); - - unsigned idx = src->pred == then_block ? 1 : 2; - nir_src_copy(&sel->src[idx].src, &src->src, &sel->instr); - } - - nir_ssa_dest_init(&sel->instr, &sel->dest.dest, - phi->dest.ssa.num_components, - phi->dest.ssa.bit_size, NULL); - sel->dest.write_mask = (1 << phi->dest.ssa.num_components) - 1; - - nir_ssa_def_rewrite_uses(&phi->dest.ssa, - &sel->dest.dest.ssa); - - nir_instr_insert_before(&phi->instr, &sel->instr); - nir_instr_remove(&phi->instr); - } - - nir_cf_node_remove(&if_stmt->cf_node); - return true; -} - -static bool -nir_opt_peephole_select_impl(nir_function_impl *impl, unsigned limit, - bool indirect_load_ok, bool expensive_alu_ok) -{ - nir_shader *shader = impl->function->shader; - bool progress = false; - - nir_foreach_block_safe(block, impl) { - progress |= nir_opt_peephole_select_block(block, shader, limit, - indirect_load_ok, - expensive_alu_ok); - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_none); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_peephole_select(nir_shader *shader, unsigned limit, - bool indirect_load_ok, bool expensive_alu_ok) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_opt_peephole_select_impl(function->impl, limit, - indirect_load_ok, - expensive_alu_ok); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_phi_precision.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_phi_precision.c deleted file mode 100644 index b80c629..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_phi_precision.c +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Copyright © 2021 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* - * This pass tries to reduce the bitsize of phi instructions by either - * moving narrowing conversions from the phi's consumers to the phi's - * sources, if all the uses of the phi are equivalent narrowing - * instructions. In other words, convert: - * - * vec1 32 ssa_124 = load_const (0x00000000) - * ... - * loop { - * ... - * vec1 32 ssa_155 = phi block_0: ssa_124, block_4: ssa_53 - * vec1 16 ssa_8 = i2imp ssa_155 - * ... - * vec1 32 ssa_53 = i2i32 ssa_52 - * } - * - * into: - * - * vec1 32 ssa_124 = load_const (0x00000000) - * vec1 16 ssa_156 = i2imp ssa_124 - * ... - * loop { - * ... - * vec1 16 ssa_8 = phi block_0: ssa_156, block_4: ssa_157 - * ... - * vec1 32 ssa_53 = i2i32 ssa_52 - * vec1 16 ssa_157 = i2i16 ssa_53 - * } - * - * Or failing that, tries to push widening conversion of phi srcs to - * the phi def. In this case, since load_const is frequently one - * of the phi sources this pass checks if can be narrowed without a - * loss of precision: - * - * vec1 32 ssa_0 = load_const (0x00000000) - * ... - * loop { - * ... - * vec1 32 ssa_8 = phi block_0: ssa_0, block_4: ssa_19 - * ... - * vec1 16 ssa_18 = iadd ssa_21, ssa_3 - * vec1 32 ssa_19 = i2i32 ssa_18 - * } - * - * into: - * - * vec1 32 ssa_0 = load_const (0x00000000) - * vec1 16 ssa_22 = i2i16 ssa_0 - * ... - * loop { - * ... - * vec1 16 ssa_8 = phi block_0: ssa_22, block_4: ssa_18 - * vec1 32 ssa_23 = i2i32 ssa_8 - * ... - * vec1 16 ssa_18 = iadd ssa_21, ssa_3 - * } - * - * Note that either transformations can convert x2ymp into x2y16, which - * is normally done later in nir_opt_algebraic_late(), losing the option - * to fold away sequences like (i2i32 (i2imp (x))), but algebraic opts - * cannot see through phis. - */ - -#define INVALID_OP nir_num_opcodes - -/** - * Get the corresponding exact conversion for a x2ymp conversion - */ -static nir_op -concrete_conversion(nir_op op) -{ - switch (op) { - case nir_op_i2imp: return nir_op_i2i16; - case nir_op_i2fmp: return nir_op_i2f16; - case nir_op_u2fmp: return nir_op_u2f16; - case nir_op_f2fmp: return nir_op_f2f16; - case nir_op_f2imp: return nir_op_f2i16; - case nir_op_f2ump: return nir_op_f2u16; - default: return op; - } -} - -static nir_op -narrowing_conversion_op(nir_instr *instr, nir_op current_op) -{ - if (instr->type != nir_instr_type_alu) - return INVALID_OP; - - nir_op op = nir_instr_as_alu(instr)->op; - switch (op) { - case nir_op_i2imp: - case nir_op_i2i16: - case nir_op_i2fmp: - case nir_op_i2f16: - case nir_op_u2fmp: - case nir_op_u2f16: - case nir_op_f2fmp: - case nir_op_f2f16: - case nir_op_f2imp: - case nir_op_f2i16: - case nir_op_f2ump: - case nir_op_f2u16: - case nir_op_f2f16_rtne: - case nir_op_f2f16_rtz: - break; - default: - return INVALID_OP; - } - - /* If we've already picked a conversion op from a previous phi use, - * make sure it is compatible with the current use - */ - if (current_op != INVALID_OP) { - if (current_op != op) { - /* If we have different conversions, but one can be converted - * to the other, then let's do that: - */ - if (concrete_conversion(current_op) == concrete_conversion(op)) { - op = concrete_conversion(op); - } else { - return INVALID_OP; - } - } - } - - return op; -} - -static nir_op -widening_conversion_op(nir_instr *instr, unsigned *bit_size) -{ - if (instr->type != nir_instr_type_alu) - return INVALID_OP; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - switch (alu->op) { - case nir_op_i2i32: - case nir_op_i2f32: - case nir_op_u2f32: - case nir_op_f2f32: - case nir_op_f2i32: - case nir_op_f2u32: - break; - default: - return INVALID_OP; - } - - *bit_size = nir_src_bit_size(alu->src[0].src); - - /* We also need to check that the conversion's dest was actually - * wider: - */ - if (nir_dest_bit_size(alu->dest.dest) <= *bit_size) - return INVALID_OP; - - return alu->op; -} - -static nir_alu_type -op_to_type(nir_op op) -{ - return nir_alu_type_get_base_type(nir_op_infos[op].output_type); -} - -/* Try to move narrowing instructions consuming the phi into the phi's - * sources to reduce the phi's precision: - */ -static bool -try_move_narrowing_dst(nir_builder *b, nir_phi_instr *phi) -{ - nir_op op = INVALID_OP; - - assert(phi->dest.is_ssa); - - /* If the phi has already been narrowed, nothing more to do: */ - if (phi->dest.ssa.bit_size != 32) - return false; - - /* Are the only uses of the phi conversion instructions, and - * are they all the same conversion? - */ - nir_foreach_use_including_if (use, &phi->dest.ssa) { - /* an if use means the phi is used directly in a conditional, ie. - * without a conversion - */ - if (use->is_if) - return false; - - op = narrowing_conversion_op(use->parent_instr, op); - - /* Not a (compatible) narrowing conversion: */ - if (op == INVALID_OP) - return false; - } - - /* If the phi has no uses, then nothing to do: */ - if (op == INVALID_OP) - return false; - - /* construct replacement phi instruction: */ - nir_phi_instr *new_phi = nir_phi_instr_create(b->shader); - nir_ssa_dest_init(&new_phi->instr, &new_phi->dest, - phi->dest.ssa.num_components, - nir_alu_type_get_type_size(nir_op_infos[op].output_type), - NULL); - - /* Push the conversion into the new phi sources: */ - nir_foreach_phi_src (src, phi) { - assert(src->src.is_ssa); - - /* insert new conversion instr in block of original phi src: */ - b->cursor = nir_after_instr_and_phis(src->src.ssa->parent_instr); - nir_ssa_def *old_src = src->src.ssa; - nir_ssa_def *new_src = nir_build_alu(b, op, old_src, NULL, NULL, NULL); - - /* and add corresponding phi_src to the new_phi: */ - nir_phi_instr_add_src(new_phi, src->pred, nir_src_for_ssa(new_src)); - } - - /* And finally rewrite the original uses of the original phi uses to - * directly use the new phi, skipping the conversion out of the orig - * phi - */ - nir_foreach_use (use, &phi->dest.ssa) { - /* We've previously established that all the uses were alu - * conversion ops. Turn them into movs instead. - */ - nir_alu_instr *alu = nir_instr_as_alu(use->parent_instr); - alu->op = nir_op_mov; - } - nir_ssa_def_rewrite_uses(&phi->dest.ssa, &new_phi->dest.ssa); - - /* And finally insert the new phi after all sources are in place: */ - b->cursor = nir_after_instr(&phi->instr); - nir_builder_instr_insert(b, &new_phi->instr); - - return true; -} - -static bool -can_convert_load_const(nir_load_const_instr *lc, nir_op op) -{ - nir_alu_type type = op_to_type(op); - - /* Note that we only handle phi's with bit_size == 32: */ - assert(lc->def.bit_size == 32); - - for (unsigned i = 0; i < lc->def.num_components; i++) { - switch (type) { - case nir_type_int: - if (lc->value[i].i32 != (int32_t)(int16_t)lc->value[i].i32) - return false; - break; - case nir_type_uint: - if (lc->value[i].u32 != (uint32_t)(uint16_t)lc->value[i].u32) - return false; - break; - case nir_type_float: - if (lc->value[i].f32 != _mesa_half_to_float( - _mesa_float_to_half(lc->value[i].f32))) - return false; - break; - default: - unreachable("bad type"); - return false; - } - } - - return true; -} - -/* Check all the phi sources to see if they are the same widening op, in - * which case we can push the widening op to the other side of the phi - */ -static nir_op -find_widening_op(nir_phi_instr *phi, unsigned *bit_size) -{ - nir_op op = INVALID_OP; - - bool has_load_const = false; - *bit_size = 0; - - nir_foreach_phi_src (src, phi) { - assert(src->src.is_ssa); - - nir_instr *instr = src->src.ssa->parent_instr; - if (instr->type == nir_instr_type_load_const) { - has_load_const = true; - continue; - } - - unsigned src_bit_size; - nir_op src_op = widening_conversion_op(instr, &src_bit_size); - - /* Not a widening conversion: */ - if (src_op == INVALID_OP) - return INVALID_OP; - - /* If it is a widening conversion, it needs to be the same op as - * other phi sources: - */ - if ((op != INVALID_OP) && (op != src_op)) - return INVALID_OP; - - if (*bit_size && (*bit_size != src_bit_size)) - return INVALID_OP; - - op = src_op; - *bit_size = src_bit_size; - } - - if ((op == INVALID_OP) || !has_load_const) - return op; - - /* If we could otherwise move widening sources, but load_const is - * one of the phi sources (and does not have a widening conversion, - * but could have a narrowing->widening sequence inserted without - * loss of precision), then we could insert a narrowing->widening - * sequence to make the rest of the transformation possible: - */ - nir_foreach_phi_src (src, phi) { - assert(src->src.is_ssa); - - nir_instr *instr = src->src.ssa->parent_instr; - if (instr->type != nir_instr_type_load_const) - continue; - - if (!can_convert_load_const(nir_instr_as_load_const(instr), op)) - return INVALID_OP; - } - - return op; -} - -/* Try to move widening conversions into the phi to the phi's output - * to reduce the phi's precision: - */ -static bool -try_move_widening_src(nir_builder *b, nir_phi_instr *phi) -{ - assert(phi->dest.is_ssa); - - /* If the phi has already been narrowed, nothing more to do: */ - if (phi->dest.ssa.bit_size != 32) - return false; - - unsigned bit_size; - nir_op op = find_widening_op(phi, &bit_size); - - if (op == INVALID_OP) - return false; - - /* construct replacement phi instruction: */ - nir_phi_instr *new_phi = nir_phi_instr_create(b->shader); - nir_ssa_dest_init(&new_phi->instr, &new_phi->dest, - phi->dest.ssa.num_components, - bit_size, NULL); - - /* Remove the widening conversions from the phi sources: */ - nir_foreach_phi_src (src, phi) { - assert(src->src.is_ssa); - - nir_instr *instr = src->src.ssa->parent_instr; - nir_ssa_def *new_src; - - b->cursor = nir_after_instr(instr); - - if (instr->type == nir_instr_type_load_const) { - /* if the src is a load_const, we've already verified that it - * is safe to insert a narrowing conversion to make the rest - * of this transformation legal: - */ - nir_load_const_instr *lc = nir_instr_as_load_const(instr); - - if (op_to_type(op) == nir_type_float) { - new_src = nir_f2f16(b, &lc->def); - } else { - new_src = nir_i2i16(b, &lc->def); - } - } else { - /* at this point we know the sources source is a conversion: */ - nir_alu_instr *alu = nir_instr_as_alu(instr); - - /* The conversion we are stripping off could have had a swizzle, - * so replace it with a mov if necessary: - */ - unsigned num_comp = nir_dest_num_components(alu->dest.dest); - new_src = nir_mov_alu(b, alu->src[0], num_comp); - } - - /* add corresponding phi_src to the new_phi: */ - nir_phi_instr_add_src(new_phi, src->pred, nir_src_for_ssa(new_src)); - } - - /* And insert the new phi after all sources are in place: */ - b->cursor = nir_after_instr(&phi->instr); - nir_builder_instr_insert(b, &new_phi->instr); - - /* And finally add back the widening conversion after the phi, - * and re-write the original phi's uses - */ - b->cursor = nir_after_instr_and_phis(&new_phi->instr); - nir_ssa_def *def = nir_build_alu(b, op, &new_phi->dest.ssa, NULL, NULL, NULL); - - nir_ssa_def_rewrite_uses(&phi->dest.ssa, def); - - return true; -} - -static bool -lower_phi(nir_builder *b, nir_phi_instr *phi) -{ - bool progress = try_move_narrowing_dst(b, phi); - if (!progress) - progress = try_move_widening_src(b, phi); - return progress; -} - -bool -nir_opt_phi_precision(nir_shader *shader) -{ - bool progress = false; - - /* If 8b or 16b bit_sizes are not used, no point to run this pass: */ - unsigned bit_sizes_used = shader->info.bit_sizes_float | - shader->info.bit_sizes_int; - - if (!bit_sizes_used) { - nir_shader_gather_info(shader, nir_shader_get_entrypoint(shader)); - bit_sizes_used = shader->info.bit_sizes_float | - shader->info.bit_sizes_int; - } - - if (!(bit_sizes_used & (8 | 16))) - return false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_foreach_block (block, function->impl) { - nir_foreach_instr_safe (instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - progress |= lower_phi(&b, nir_instr_as_phi(instr)); - } - } - - if (progress) { - nir_metadata_preserve(function->impl, - nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_preamble.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_preamble.c deleted file mode 100644 index d738975..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_preamble.c +++ /dev/null @@ -1,604 +0,0 @@ -/* - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* This pass provides a way to move computations that are always the same for - * an entire draw/compute dispatch into a "preamble" that runs before the main - * entrypoint. - * - * We also expose a separate API to get or construct the preamble of a shader - * in case backends want to insert their own code. - */ - - -nir_function_impl * -nir_shader_get_preamble(nir_shader *shader) -{ - nir_function_impl *entrypoint = nir_shader_get_entrypoint(shader); - if (entrypoint->preamble) { - return entrypoint->preamble->impl; - } else { - nir_function *preamble = nir_function_create(shader, "@preamble"); - preamble->is_preamble = true; - nir_function_impl *impl = nir_function_impl_create(preamble); - entrypoint->preamble = preamble; - return impl; - } -} - -typedef struct { - bool can_move; - bool candidate; - bool must_stay; - bool replace; - - unsigned can_move_users; - - unsigned size, align; - - unsigned offset; - - /* Average the cost of a value among its users, to try to account for - * values that have multiple can_move uses. - */ - float value; - - /* Overall benefit, i.e. the value minus any cost to inserting - * load_preamble. - */ - float benefit; -} def_state; - -typedef struct { - /* Per-definition array of states */ - def_state *states; - - nir_ssa_def *def; - - const nir_opt_preamble_options *options; -} opt_preamble_ctx; - -static float -get_instr_cost(nir_instr *instr, const nir_opt_preamble_options *options) -{ - /* No backend will want to hoist load_const or undef by itself, so handle - * this for them. - */ - if (instr->type == nir_instr_type_load_const || - instr->type == nir_instr_type_ssa_undef) - return 0; - - return options->instr_cost_cb(instr, options->cb_data); -} - -static bool -can_move_src(nir_src *src, void *state) -{ - opt_preamble_ctx *ctx = state; - - assert(src->is_ssa); - return ctx->states[src->ssa->index].can_move; -} - -static bool -can_move_srcs(nir_instr *instr, opt_preamble_ctx *ctx) -{ - return nir_foreach_src(instr, can_move_src, ctx); -} - -static bool -can_move_intrinsic(nir_intrinsic_instr *instr, opt_preamble_ctx *ctx) -{ - switch (instr->intrinsic) { - /* Intrinsics which can always be moved */ - case nir_intrinsic_load_push_constant: - case nir_intrinsic_load_work_dim: - case nir_intrinsic_load_num_workgroups: - case nir_intrinsic_load_workgroup_size: - case nir_intrinsic_load_ray_launch_size: - case nir_intrinsic_load_ray_launch_size_addr_amd: - case nir_intrinsic_load_sbt_base_amd: - case nir_intrinsic_load_is_indexed_draw: - case nir_intrinsic_load_viewport_scale: - case nir_intrinsic_load_user_clip_plane: - case nir_intrinsic_load_viewport_x_scale: - case nir_intrinsic_load_viewport_y_scale: - case nir_intrinsic_load_viewport_z_scale: - case nir_intrinsic_load_viewport_offset: - case nir_intrinsic_load_viewport_x_offset: - case nir_intrinsic_load_viewport_y_offset: - case nir_intrinsic_load_viewport_z_offset: - case nir_intrinsic_load_blend_const_color_a_float: - case nir_intrinsic_load_blend_const_color_b_float: - case nir_intrinsic_load_blend_const_color_g_float: - case nir_intrinsic_load_blend_const_color_r_float: - case nir_intrinsic_load_blend_const_color_rgba: - case nir_intrinsic_load_blend_const_color_aaaa8888_unorm: - case nir_intrinsic_load_blend_const_color_rgba8888_unorm: - case nir_intrinsic_load_line_width: - case nir_intrinsic_load_aa_line_width: - case nir_intrinsic_load_fb_layers_v3d: - case nir_intrinsic_load_tcs_num_patches_amd: - case nir_intrinsic_load_sample_positions_pan: - case nir_intrinsic_load_pipeline_stat_query_enabled_amd: - case nir_intrinsic_load_prim_gen_query_enabled_amd: - case nir_intrinsic_load_prim_xfb_query_enabled_amd: - case nir_intrinsic_load_clamp_vertex_color_amd: - case nir_intrinsic_load_cull_front_face_enabled_amd: - case nir_intrinsic_load_cull_back_face_enabled_amd: - case nir_intrinsic_load_cull_ccw_amd: - case nir_intrinsic_load_cull_small_primitives_enabled_amd: - case nir_intrinsic_load_cull_any_enabled_amd: - case nir_intrinsic_load_cull_small_prim_precision_amd: - case nir_intrinsic_load_texture_base_agx: - case nir_intrinsic_load_ubo_base_agx: - case nir_intrinsic_load_vbo_base_agx: - return true; - - /* Intrinsics which can be moved depending on hardware */ - case nir_intrinsic_load_base_instance: - case nir_intrinsic_load_base_vertex: - case nir_intrinsic_load_first_vertex: - case nir_intrinsic_load_draw_id: - return ctx->options->drawid_uniform; - - case nir_intrinsic_load_subgroup_size: - case nir_intrinsic_load_num_subgroups: - return ctx->options->subgroup_size_uniform; - - /* Intrinsics which can be moved if the sources can */ - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_ubo_vec4: - case nir_intrinsic_get_ubo_size: - case nir_intrinsic_get_ssbo_size: - case nir_intrinsic_ballot_bitfield_extract: - case nir_intrinsic_ballot_find_lsb: - case nir_intrinsic_ballot_find_msb: - case nir_intrinsic_ballot_bit_count_reduce: - case nir_intrinsic_load_deref: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_preamble: - case nir_intrinsic_load_constant: - case nir_intrinsic_load_sample_pos_from_id: - case nir_intrinsic_load_kernel_input: - case nir_intrinsic_load_buffer_amd: - case nir_intrinsic_image_samples: - case nir_intrinsic_image_deref_samples: - case nir_intrinsic_bindless_image_samples: - case nir_intrinsic_image_size: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_bindless_image_size: - case nir_intrinsic_vulkan_resource_index: - case nir_intrinsic_vulkan_resource_reindex: - case nir_intrinsic_load_vulkan_descriptor: - case nir_intrinsic_quad_swizzle_amd: - case nir_intrinsic_masked_swizzle_amd: - case nir_intrinsic_load_ssbo_address: - case nir_intrinsic_bindless_resource_ir3: - case nir_intrinsic_load_constant_agx: - return can_move_srcs(&instr->instr, ctx); - - /* Image/SSBO loads can be moved if they are CAN_REORDER and their - * sources can be moved. - */ - case nir_intrinsic_image_load: - case nir_intrinsic_image_samples_identical: - case nir_intrinsic_bindless_image_load: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_ssbo_ir3: - return (nir_intrinsic_access(instr) & ACCESS_CAN_REORDER) && - can_move_srcs(&instr->instr, ctx); - - default: - return false; - } -} - -static bool -can_move_instr(nir_instr *instr, opt_preamble_ctx *ctx) -{ - switch (instr->type) { - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - /* See note below about derivatives. We have special code to convert tex - * to txd, though, because it's a common case. - */ - if (nir_tex_instr_has_implicit_derivative(tex) && - tex->op != nir_texop_tex) { - return false; - } - return can_move_srcs(instr, ctx); - } - case nir_instr_type_alu: { - /* The preamble is presumably run with only one thread, so we can't run - * derivatives in it. - * TODO: Replace derivatives with 0 instead, if real apps hit this. - */ - nir_alu_instr *alu = nir_instr_as_alu(instr); - switch (alu->op) { - case nir_op_fddx: - case nir_op_fddy: - case nir_op_fddx_fine: - case nir_op_fddy_fine: - case nir_op_fddx_coarse: - case nir_op_fddy_coarse: - return false; - default: - return can_move_srcs(instr, ctx); - } - } - case nir_instr_type_intrinsic: - return can_move_intrinsic(nir_instr_as_intrinsic(instr), ctx); - - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: - return true; - - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type == nir_deref_type_var) { - switch (deref->modes) { - case nir_var_uniform: - case nir_var_mem_ubo: - return true; - default: - return false; - } - } else { - return can_move_srcs(instr, ctx); - } - } - - case nir_instr_type_phi: - /* TODO: we could move an if-statement if everything inside it is - * moveable. - */ - return false; - - default: - return false; - } -} - -/* True if we should avoid making this a candidate. This is only called on - * instructions we already determined we can move, this just makes it so that - * uses of this instruction cannot be rewritten. Typically this happens - * because of static constraints on the IR, for example some deref chains - * cannot be broken. - */ -static bool -avoid_instr(nir_instr *instr, const nir_opt_preamble_options *options) -{ - if (instr->type == nir_instr_type_deref) - return true; - - return options->avoid_instr_cb(instr, options->cb_data); -} - -static bool -update_src_value(nir_src *src, void *data) -{ - opt_preamble_ctx *ctx = data; - - def_state *state = &ctx->states[ctx->def->index]; - def_state *src_state = &ctx->states[src->ssa->index]; - - assert(src_state->can_move); - - /* If an instruction has can_move and non-can_move users, it becomes a - * candidate and its value shouldn't propagate downwards. For example, - * imagine a chain like this: - * - * -- F (cannot move) - * / - * A <-- B <-- C <-- D <-- E (cannot move) - * - * B and D are marked candidates. Picking B removes A and B, picking D - * removes C and D, and picking both removes all 4. Therefore B and D are - * independent and B's value shouldn't flow into D. - * - * A similar argument holds for must_stay values. - */ - if (!src_state->must_stay && !src_state->candidate) - state->value += src_state->value; - return true; -} - -static int -candidate_sort(const void *data1, const void *data2) -{ - const def_state *state1 = *(def_state **)data1; - const def_state *state2 = *(def_state **)data2; - - float value1 = state1->value / state1->size; - float value2 = state2->value / state2->size; - if (value1 < value2) - return 1; - else if (value1 > value2) - return -1; - else - return 0; -} - -bool -nir_opt_preamble(nir_shader *shader, const nir_opt_preamble_options *options, - unsigned *size) -{ - opt_preamble_ctx ctx = { - .options = options, - }; - - nir_function_impl *impl = nir_shader_get_entrypoint(shader); - ctx.states = calloc(impl->ssa_alloc, sizeof(*ctx.states)); - - /* Step 1: Calculate can_move */ - nir_foreach_block (block, impl) { - nir_foreach_instr (instr, block) { - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (!def) - continue; - - def_state *state = &ctx.states[def->index]; - - state->can_move = can_move_instr(instr, &ctx); - } - } - - /* Step 2: Calculate is_candidate. This is complicated by the presence of - * non-candidate instructions like derefs whose users cannot be rewritten. - * If a deref chain is used at all by a non-can_move thing, then any offset - * sources anywhere along the chain should be considered candidates because - * the entire deref chain will never be deleted, but if it's only used by - * can_move things then it becomes subsumed by its users and none of the - * offset sources should be considered candidates as they will be removed - * when the users of the deref chain are moved. We need to replace "are - * there any non-can_move users" with "are there any non-can_move users, - * *recursing through non-candidate users*". We do this by walking backward - * and marking when a non-candidate instruction must stay in the final - * program because it has a non-can_move user, including recursively. - */ - unsigned num_candidates = 0; - nir_foreach_block_reverse (block, impl) { - nir_foreach_instr_reverse (instr, block) { - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (!def) - continue; - - def_state *state = &ctx.states[def->index]; - if (!state->can_move) - continue; - - state->value = get_instr_cost(instr, options); - bool is_candidate = !avoid_instr(instr, options); - state->candidate = false; - state->must_stay = false; - nir_foreach_use (use, def) { - nir_ssa_def *use_def = nir_instr_ssa_def(use->parent_instr); - if (!use_def || !ctx.states[use_def->index].can_move || - ctx.states[use_def->index].must_stay) { - if (is_candidate) - state->candidate = true; - else - state->must_stay = true; - } else { - state->can_move_users++; - } - } - - nir_foreach_if_use (use, def) { - if (is_candidate) - state->candidate = true; - else - state->must_stay = true; - break; - } - - if (state->candidate) - num_candidates++; - } - } - - if (num_candidates == 0) { - free(ctx.states); - return false; - } - - def_state **candidates = malloc(sizeof(*candidates) * num_candidates); - unsigned candidate_idx = 0; - unsigned total_size = 0; - - /* Step 3: Calculate value of candidates by propagating downwards. We try - * to share the value amongst can_move uses, in case there are multiple. - * This won't always find the most optimal solution, but is hopefully a - * good heuristic. - * - * Note that we use the can_move adjusted in the last pass, because if a - * can_move instruction cannot be moved because it's not a candidate and it - * has a non-can_move source then we don't want to count it as a use. - * - * While we're here, also collect an array of candidates. - */ - nir_foreach_block (block, impl) { - nir_foreach_instr (instr, block) { - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (!def) - continue; - - def_state *state = &ctx.states[def->index]; - if (!state->can_move || state->must_stay) - continue; - - ctx.def = def; - nir_foreach_src(instr, update_src_value, &ctx); - - /* If this instruction is a candidate, its value shouldn't be - * propagated so we skip dividing it. - * - * Note: if it's can_move but not a candidate, then all its users - * must be can_move, so if there are no users then it must be dead. - */ - if (!state->candidate && !state->must_stay) { - if (state->can_move_users > 0) - state->value /= state->can_move_users; - else - state->value = 0; - } - - if (state->candidate) { - state->benefit = state->value - - options->rewrite_cost_cb(def, options->cb_data); - - if (state->benefit > 0) { - options->def_size(def, &state->size, &state->align); - total_size = ALIGN_POT(total_size, state->align); - total_size += state->size; - candidates[candidate_idx++] = state; - } - } - } - } - - assert(candidate_idx <= num_candidates); - num_candidates = candidate_idx; - - if (num_candidates == 0) { - free(ctx.states); - free(candidates); - return false; - } - - /* Step 4: Figure out which candidates we're going to replace and assign an - * offset. Assuming there is no expression sharing, this is similar to the - * 0-1 knapsack problem, except when there is a gap introduced by - * alignment. We use a well-known greedy approximation, sorting by value - * divided by size. - */ - - if (((*size) + total_size) > options->preamble_storage_size) { - qsort(candidates, num_candidates, sizeof(*candidates), candidate_sort); - } - - unsigned offset = *size; - for (unsigned i = 0; i < num_candidates; i++) { - def_state *state = candidates[i]; - offset = ALIGN_POT(offset, state->align); - - if (offset + state->size > options->preamble_storage_size) - break; - - state->replace = true; - state->offset = offset; - - offset += state->size; - } - - *size = offset; - - free(candidates); - - /* Step 5: Actually do the replacement. */ - struct hash_table *remap_table = - _mesa_pointer_hash_table_create(NULL); - nir_function_impl *preamble = - nir_shader_get_preamble(impl->function->shader); - nir_builder _b; - nir_builder *b = &_b; - nir_builder_init(b, preamble); - b->cursor = nir_before_cf_list(&preamble->body); - - nir_foreach_block (block, impl) { - nir_foreach_instr (instr, block) { - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (!def) - continue; - - def_state *state = &ctx.states[def->index]; - if (!state->can_move) - continue; - - nir_instr *clone = nir_instr_clone_deep(impl->function->shader, - instr, remap_table); - - nir_builder_instr_insert(b, clone); - - if (clone->type == nir_instr_type_tex) { - nir_tex_instr *tex = nir_instr_as_tex(clone); - if (tex->op == nir_texop_tex) { - /* For maximum compatibility, replace normal textures with - * textureGrad with a gradient of 0. - * TODO: Handle txb somehow. - */ - b->cursor = nir_before_instr(clone); - - nir_ssa_def *zero = - nir_imm_zero(b, tex->coord_components - tex->is_array, 32); - nir_tex_instr_add_src(tex, nir_tex_src_ddx, nir_src_for_ssa(zero)); - nir_tex_instr_add_src(tex, nir_tex_src_ddy, nir_src_for_ssa(zero)); - tex->op = nir_texop_txd; - - b->cursor = nir_after_instr(clone); - } - } - - if (state->replace) { - nir_ssa_def *clone_def = nir_instr_ssa_def(clone); - nir_store_preamble(b, clone_def, .base = state->offset); - } - } - } - - nir_builder_init(b, impl); - - nir_foreach_block (block, impl) { - nir_foreach_instr_safe (instr, block) { - nir_ssa_def *def = nir_instr_ssa_def(instr); - if (!def) - continue; - - def_state *state = &ctx.states[def->index]; - if (!state->replace) - continue; - - b->cursor = nir_before_instr(instr); - - nir_ssa_def *new_def = - nir_load_preamble(b, def->num_components, def->bit_size, - .base = state->offset); - - - nir_ssa_def_rewrite_uses(def, new_def); - nir_instr_free_and_dce(instr); - } - } - - nir_metadata_preserve(impl, - nir_metadata_block_index | - nir_metadata_dominance); - - ralloc_free(remap_table); - free(ctx.states); - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_ray_queries.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_ray_queries.c deleted file mode 100644 index 33a2214..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_ray_queries.c +++ /dev/null @@ -1,429 +0,0 @@ -/* - * Copyright © 2021 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -#include "../../util/hash_table.h" -#include "../../util/set.h" -#include "../../util/macros.h" -#include "../../util/u_dynarray.h" - -/** @file nir_opt_ray_queries.c - * - * 1. Remove ray queries that the shader is not using the result of. - * 2. Combine ray queries which are not simultaneously. - */ - -static void -mark_query_read(struct set *queries, - nir_intrinsic_instr *intrin) -{ - nir_ssa_def *rq_def = intrin->src[0].ssa; - - nir_variable *query; - if (rq_def->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *load_deref = - nir_instr_as_intrinsic(rq_def->parent_instr); - assert(load_deref->intrinsic == nir_intrinsic_load_deref); - - query = nir_intrinsic_get_var(load_deref, 0); - } else if (rq_def->parent_instr->type == nir_instr_type_deref) { - query = nir_deref_instr_get_variable( - nir_instr_as_deref(rq_def->parent_instr)); - } else { - return; - } - assert(query); - - _mesa_set_add(queries, query); -} - -static void -nir_find_ray_queries_read(struct set *queries, - nir_shader *shader) -{ - nir_foreach_function(function, shader) { - nir_function_impl *impl = function->impl; - - if (!impl) - continue; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_rq_proceed: - if (!list_is_empty(&intrin->dest.ssa.uses)) - mark_query_read(queries, intrin); - break; - case nir_intrinsic_rq_load: - mark_query_read(queries, intrin); - break; - default: - break; - } - } - } - } -} - -static bool -nir_replace_unread_queries_instr(nir_builder *b, nir_instr *instr, void *data) -{ - struct set *queries = data; - - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_rq_initialize: - case nir_intrinsic_rq_terminate: - case nir_intrinsic_rq_generate_intersection: - case nir_intrinsic_rq_confirm_intersection: - break; - case nir_intrinsic_rq_proceed: - break; - default: - return false; - } - - nir_variable *query = nir_intrinsic_get_var(intrin, 0); - assert(query); - - struct set_entry *entry = _mesa_set_search(queries, query); - if (entry) - return false; - - if (intrin->intrinsic == nir_intrinsic_rq_load) - assert(list_is_empty(&intrin->dest.ssa.uses)); - - nir_instr_remove(instr); - - return true; -} - -bool -nir_opt_ray_queries(nir_shader *shader) -{ - struct set *read_queries = _mesa_pointer_set_create(NULL); - nir_find_ray_queries_read(read_queries, shader); - - bool progress = - nir_shader_instructions_pass(shader, - nir_replace_unread_queries_instr, - nir_metadata_block_index | - nir_metadata_dominance, - read_queries); - - /* Update the number of queries if some have been removed. */ - if (progress) { - nir_remove_dead_derefs(shader); - nir_remove_dead_variables(shader, - nir_var_shader_temp | nir_var_function_temp, - NULL); - } - - _mesa_set_destroy(read_queries, NULL); - - return progress; -} - -/** - * Merge ray queries that are not used in parallel to reduce scratch memory: - * - * 1. Store all the ray queries we will consider into an array for - * convenient access. Ignore arrays since it would be really complex - * to handle and will be rare in praxis. - * - * 2. Count the number of ray query ranges and allocate the required ranges. - * - * 3. Populate the ray query range array. A range is started and termninated - * rq_initialize (the terminating rq_initialize will be the start of the - * next range). There are two hazards: - * - * 1. rq_initialize can be inside some form of controlflow which can result - * in incorrect ranges and invalid merging. - * - * SOLUTION: Discard the entire ray query when encountering an - * instruction that is not dominated by the rq_initialize - * of the range. - * - * 2. With loops, we can underestimate the range because the state may - * have to be preserved for multiple iterations. - * - * SOLUTION: Track parent loops. - * - * 4. Try to rewrite the variables. For that, we iterate over every ray query - * and try to move its ranges to the preceding ray queries. - */ - -struct rq_range { - nir_variable *variable; - - uint32_t first; - uint32_t last; - - struct util_dynarray instrs; - struct set *loops; -}; - -#define RQ_NEW_INDEX_NONE 0xFFFFFFFF - -static bool -count_ranges(struct nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *intrinsic = nir_instr_as_intrinsic(instr); - if (intrinsic->intrinsic == nir_intrinsic_rq_initialize) - (*(uint32_t *) data)++; - - return false; -} - -static nir_cf_node * -get_parent_loop(nir_cf_node *node) -{ - nir_cf_node *result = NULL; - while (node) { - if (node->type == nir_cf_node_loop) - result = node; - - node = node->parent; - } - return result; -} - -bool -nir_opt_ray_query_ranges(nir_shader *shader) -{ - assert(exec_list_length(&shader->functions) == 1); - - struct nir_function *func = - (struct nir_function *)exec_list_get_head_const(&shader->functions); - assert(func->impl); - - uint32_t ray_query_count = 0; - nir_foreach_variable_in_shader(var, shader) { - if (!var->data.ray_query || glsl_type_is_array(var->type)) - continue; - ray_query_count++; - } - nir_foreach_function_temp_variable(var, func->impl) { - if (!var->data.ray_query || glsl_type_is_array(var->type)) - continue; - ray_query_count++; - } - - if (ray_query_count <= 1) { - nir_metadata_preserve(func->impl, nir_metadata_all); - return false; - } - - void *mem_ctx = ralloc_context(NULL); - - nir_metadata_require(func->impl, nir_metadata_instr_index | nir_metadata_dominance); - - nir_variable **ray_queries = ralloc_array(mem_ctx, nir_variable*, ray_query_count); - ray_query_count = 0; - - nir_foreach_variable_in_shader(var, shader) { - if (!var->data.ray_query || glsl_type_is_array(var->type)) - continue; - - ray_queries[ray_query_count] = var; - ray_query_count++; - } - - nir_foreach_function_temp_variable(var, func->impl) { - if (!var->data.ray_query || glsl_type_is_array(var->type)) - continue; - - ray_queries[ray_query_count] = var; - ray_query_count++; - } - - uint32_t range_count = 0; - nir_shader_instructions_pass(shader, count_ranges, nir_metadata_all, &range_count); - - struct rq_range *ranges = rzalloc_array(mem_ctx, struct rq_range, range_count); - - struct hash_table *range_indices = _mesa_pointer_hash_table_create(mem_ctx); - uint32_t target_index = 0; - - nir_foreach_block(block, func->impl) { - nir_cf_node *parent_loop = get_parent_loop(&block->cf_node); - - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrinsic = nir_instr_as_intrinsic(instr); - if (!nir_intrinsic_is_ray_query(intrinsic->intrinsic)) - continue; - - nir_deref_instr *ray_query_deref = - nir_instr_as_deref(intrinsic->src[0].ssa->parent_instr); - - if (ray_query_deref->deref_type != nir_deref_type_var) - continue; - - if (intrinsic->intrinsic == nir_intrinsic_rq_initialize) { - _mesa_hash_table_insert(range_indices, ray_query_deref->var, - (void *)(uintptr_t)target_index); - - ranges[target_index].variable = ray_query_deref->var; - ranges[target_index].first = instr->index; - ranges[target_index].last = instr->index; - util_dynarray_init(&ranges[target_index].instrs, mem_ctx); - ranges[target_index].loops = _mesa_pointer_set_create(mem_ctx); - - target_index++; - } - - struct hash_entry *index_entry = - _mesa_hash_table_search(range_indices, ray_query_deref->var); - struct rq_range *range = ranges + (uintptr_t)index_entry->data; - - if (intrinsic->intrinsic != nir_intrinsic_rq_initialize) { - /* If the initialize instruction does not dominate every other - * instruction in the range, we have to reject the enire query - * since we can not be certain about the ranges: - * - * rayQuery rq; - * if (i == 0) - * init(rq); - * ... <-- Another ray query that would get merged. - * if (i == 1) - * init(rq); <--+ - * if (i == 0) | - * proceed(rq); <--+ Not dominated by init! - * if (i == 1) - * proceed(rq); - */ - nir_instr *init = *util_dynarray_element(&range->instrs, nir_instr *, 0); - if (!nir_block_dominates(init->block, instr->block)) { - for (uint32_t i = 0; i < ray_query_count; i++) { - if (ray_queries[i] == ray_query_deref->var) { - ray_queries[i] = NULL; - break; - } - } - - continue; - } - - range->last = MAX2(range->last, instr->index); - } - - util_dynarray_append(&range->instrs, nir_instr *, instr); - - if (parent_loop) - _mesa_set_add(range->loops, parent_loop); - } - } - - range_count = target_index; - - /* Try to push ray query ranges 'down'. */ - for (uint32_t rq_index = 1; rq_index < ray_query_count; rq_index++) { - if (!ray_queries[rq_index]) - continue; - - for (uint32_t dom_rq_index = 0; dom_rq_index < rq_index; dom_rq_index++) { - if (!ray_queries[dom_rq_index]) - continue; - - bool collides = false; - - for (uint32_t range_index = 0; range_index < range_count; range_index++) { - if (ranges[range_index].variable != ray_queries[rq_index]) - continue; - - for (uint32_t dom_range_index = 0; dom_range_index < range_count; dom_range_index++) { - if (ranges[dom_range_index].variable != ray_queries[dom_rq_index]) - continue; - - if (!(ranges[dom_range_index].first > ranges[range_index].last || - ranges[dom_range_index].last < ranges[range_index].first)) { - collides = true; - break; - } - - if (_mesa_set_intersects(ranges[dom_range_index].loops, - ranges[range_index].loops)) { - collides = true; - break; - } - } - - if (collides) - break; - } - - if (collides) - continue; - - for (uint32_t range_index = 0; range_index < range_count; range_index++) { - if (ranges[range_index].variable != ray_queries[rq_index]) - continue; - - ranges[range_index].variable = ray_queries[dom_rq_index]; - } - } - } - - /* Remap the ray query derefs to the new variables. */ - bool progress = false; - for (uint32_t range_index = 0; range_index < range_count; range_index++) { - struct rq_range *range = ranges + range_index; - util_dynarray_foreach(&range->instrs, nir_instr *, instr) { - nir_intrinsic_instr *intrinsic = nir_instr_as_intrinsic(*instr); - nir_deref_instr *ray_query_deref = - nir_instr_as_deref(intrinsic->src[0].ssa->parent_instr); - if (ray_query_deref->var != range->variable) { - ray_query_deref->var = range->variable; - progress = true; - } - } - } - - nir_metadata_preserve(func->impl, nir_metadata_all); - - /* Remove dead ray queries. */ - if (progress) { - nir_remove_dead_derefs(shader); - nir_remove_dead_variables(shader, nir_var_shader_temp | nir_var_function_temp, - NULL); - } - - ralloc_free(mem_ctx); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_rematerialize_compares.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_rematerialize_compares.c deleted file mode 100644 index 656095b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_rematerialize_compares.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_constant_expressions.h" -#include "nir_control_flow.h" -#include "nir_loop_analyze.h" - -static bool -is_two_src_comparison(const nir_alu_instr *instr) -{ - switch (instr->op) { - case nir_op_flt: - case nir_op_flt32: - case nir_op_fge: - case nir_op_fge32: - case nir_op_feq: - case nir_op_feq32: - case nir_op_fneu: - case nir_op_fneu32: - case nir_op_ilt: - case nir_op_ilt32: - case nir_op_ult: - case nir_op_ult32: - case nir_op_ige: - case nir_op_ige32: - case nir_op_uge: - case nir_op_uge32: - case nir_op_ieq: - case nir_op_ieq32: - case nir_op_ine: - case nir_op_ine32: - return true; - default: - return false; - } -} - -static bool -all_srcs_are_ssa(const nir_alu_instr *instr) -{ - for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++) { - if (!instr->src[i].src.is_ssa) - return false; - } - - return true; -} - - -static bool -all_uses_are_bcsel(const nir_alu_instr *instr) -{ - if (!instr->dest.dest.is_ssa) - return false; - - nir_foreach_use(use, &instr->dest.dest.ssa) { - if (use->parent_instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *const alu = nir_instr_as_alu(use->parent_instr); - if (alu->op != nir_op_bcsel && - alu->op != nir_op_b32csel) - return false; - - /* Not only must the result be used by a bcsel, but it must be used as - * the first source (the condition). - */ - if (alu->src[0].src.ssa != &instr->dest.dest.ssa) - return false; - } - - return true; -} - -static bool -nir_opt_rematerialize_compares_impl(nir_shader *shader, nir_function_impl *impl) -{ - bool progress = false; - - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_alu) - continue; - - nir_alu_instr *const alu = nir_instr_as_alu(instr); - if (!is_two_src_comparison(alu)) - continue; - - if (!all_srcs_are_ssa(alu)) - continue; - - if (!all_uses_are_bcsel(alu)) - continue; - - /* At this point it is known that alu is a comparison instruction - * that is only used by nir_op_bcsel and possibly by if-statements - * (though the latter has not been explicitly checked). - * - * Iterate through each use of the comparison. For every use (or use - * by an if-statement) that is in a different block, emit a copy of - * the comparison. Care must be taken here. The original - * instruction must be duplicated only once in each block because CSE - * cannot be run after this pass. - */ - nir_foreach_use_including_if_safe(use, &alu->dest.dest.ssa) { - if (use->is_if) { - nir_if *const if_stmt = use->parent_if; - - nir_block *const prev_block = - nir_cf_node_as_block(nir_cf_node_prev(&if_stmt->cf_node)); - - /* If the compare is from the previous block, don't - * rematerialize. - */ - if (prev_block == alu->instr.block) - continue; - - nir_alu_instr *clone = nir_alu_instr_clone(shader, alu); - - nir_instr_insert_after_block(prev_block, &clone->instr); - - nir_if_rewrite_condition(if_stmt, - nir_src_for_ssa(&clone->dest.dest.ssa)); - progress = true; - } else { - nir_instr *const use_instr = use->parent_instr; - - /* If the use is in the same block as the def, don't - * rematerialize. - */ - if (use_instr->block == alu->instr.block) - continue; - - nir_alu_instr *clone = nir_alu_instr_clone(shader, alu); - - nir_instr_insert_before(use_instr, &clone->instr); - - nir_alu_instr *const use_alu = nir_instr_as_alu(use_instr); - for (unsigned i = 0; i < nir_op_infos[use_alu->op].num_inputs; i++) { - if (use_alu->src[i].src.ssa == &alu->dest.dest.ssa) { - nir_instr_rewrite_src(&use_alu->instr, - &use_alu->src[i].src, - nir_src_for_ssa(&clone->dest.dest.ssa)); - progress = true; - } - } - } - } - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_rematerialize_compares(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl == NULL) - continue; - - progress = nir_opt_rematerialize_compares_impl(shader, function->impl) - || progress; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_remove_phis.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_remove_phis.c deleted file mode 100644 index 071b1e5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_remove_phis.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright © 2015 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "nir_builder.h" - -static nir_alu_instr * -get_parent_mov(nir_ssa_def *ssa) -{ - if (ssa->parent_instr->type != nir_instr_type_alu) - return NULL; - - nir_alu_instr *alu = nir_instr_as_alu(ssa->parent_instr); - return (alu->op == nir_op_mov) ? alu : NULL; -} - -static bool -matching_mov(nir_alu_instr *mov1, nir_ssa_def *ssa) -{ - if (!mov1) - return false; - - nir_alu_instr *mov2 = get_parent_mov(ssa); - return mov2 && nir_alu_srcs_equal(mov1, mov2, 0, 0); -} - -/* - * This is a pass for removing phi nodes that look like: - * a = phi(b, b, b, ...) - * - * Note that we can't always ignore undef sources here, or else we may create a - * situation where the definition of b isn't dominated by its uses. We're - * allowed to do this since the definition of b must dominate all of the - * phi node's predecessors, which means it must dominate the phi node as well - * as all of the phi node's uses. In essence, the phi node acts as a copy - * instruction. b can't be another phi node in the same block, since the only - * time when phi nodes can source other phi nodes defined in the same block is - * at the loop header, and in that case one of the sources of the phi has to - * be from before the loop and that source can't be b. - */ - -static bool -remove_phis_block(nir_block *block, nir_builder *b) -{ - bool progress = false; - - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_phi) - break; - - nir_phi_instr *phi = nir_instr_as_phi(instr); - - nir_ssa_def *def = NULL; - nir_alu_instr *mov = NULL; - bool srcs_same = true; - - nir_foreach_phi_src(src, phi) { - assert(src->src.is_ssa); - - /* For phi nodes at the beginning of loops, we may encounter some - * sources from backedges that point back to the destination of the - * same phi, i.e. something like: - * - * a = phi(a, b, ...) - * - * We can safely ignore these sources, since if all of the normal - * sources point to the same definition, then that definition must - * still dominate the phi node, and the phi will still always take - * the value of that definition. - */ - if (src->src.ssa == &phi->dest.ssa) - continue; - - if (def == NULL) { - def = src->src.ssa; - mov = get_parent_mov(def); - } else if (nir_src_is_undef(src->src) && - nir_block_dominates(def->parent_instr->block, src->pred)) { - /* Ignore this undef source. */ - } else { - if (src->src.ssa != def && !matching_mov(mov, src->src.ssa)) { - srcs_same = false; - break; - } - } - } - - if (!srcs_same) - continue; - - if (!def) { - /* In this case, the phi had no sources. So turn it into an undef. */ - - b->cursor = nir_after_phis(block); - def = nir_ssa_undef(b, phi->dest.ssa.num_components, - phi->dest.ssa.bit_size); - } else if (mov) { - /* If the sources were all movs from the same source with the same - * swizzle, then we can't just pick a random move because it may not - * dominate the phi node. Instead, we need to emit our own move after - * the phi which uses the shared source, and rewrite uses of the phi - * to use the move instead. This is ok, because while the movs may - * not all dominate the phi node, their shared source does. - */ - - b->cursor = nir_after_phis(block); - def = nir_mov_alu(b, mov->src[0], def->num_components); - } - - assert(phi->dest.is_ssa); - nir_ssa_def_rewrite_uses(&phi->dest.ssa, def); - nir_instr_remove(instr); - - progress = true; - } - - return progress; -} - -bool -nir_opt_remove_phis_block(nir_block *block) -{ - nir_builder b; - nir_builder_init(&b, nir_cf_node_get_function(&block->cf_node)); - return remove_phis_block(block, &b); -} - -static bool -nir_opt_remove_phis_impl(nir_function_impl *impl) -{ - bool progress = false; - nir_builder bld; - nir_builder_init(&bld, impl); - - nir_metadata_require(impl, nir_metadata_dominance); - - nir_foreach_block(block, impl) { - progress |= remove_phis_block(block, &bld); - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -bool -nir_opt_remove_phis(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) - if (function->impl) - progress = nir_opt_remove_phis_impl(function->impl) || progress; - - return progress; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_shrink_stores.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_shrink_stores.c deleted file mode 100644 index 9618581..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_shrink_stores.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright © 2020 Google LLC - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 - * - * Removes unused trailing components from store data. - * - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -opt_shrink_vectors_image_store(nir_builder *b, nir_intrinsic_instr *instr) -{ - enum pipe_format format; - if (instr->intrinsic == nir_intrinsic_image_deref_store) { - nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - format = nir_deref_instr_get_variable(deref)->data.image.format; - } else { - format = nir_intrinsic_format(instr); - } - if (format == PIPE_FORMAT_NONE) - return false; - - unsigned components = util_format_get_nr_components(format); - if (components >= instr->num_components) - return false; - - nir_ssa_def *data = nir_trim_vector(b, instr->src[3].ssa, components); - nir_instr_rewrite_src(&instr->instr, &instr->src[3], nir_src_for_ssa(data)); - instr->num_components = components; - - return true; -} - -static bool -opt_shrink_store_instr(nir_builder *b, nir_intrinsic_instr *instr, bool shrink_image_store) -{ - b->cursor = nir_before_instr(&instr->instr); - - switch (instr->intrinsic) { - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_vertex_output: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_global: - case nir_intrinsic_store_scratch: - break; - case nir_intrinsic_bindless_image_store: - case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_store: - return shrink_image_store && opt_shrink_vectors_image_store(b, instr); - default: - return false; - } - - /* Must be a vectorized intrinsic that we can resize. */ - assert(instr->num_components != 0); - - /* Trim the num_components stored according to the write mask. */ - unsigned write_mask = nir_intrinsic_write_mask(instr); - unsigned last_bit = util_last_bit(write_mask); - if (last_bit < instr->num_components && instr->src[0].is_ssa) { - nir_ssa_def *def = nir_trim_vector(b, instr->src[0].ssa, last_bit); - nir_instr_rewrite_src(&instr->instr, - &instr->src[0], - nir_src_for_ssa(def)); - instr->num_components = last_bit; - - return true; - } - - return false; -} - -bool -nir_opt_shrink_stores(nir_shader *shader, bool shrink_image_store) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - progress |= opt_shrink_store_instr(&b, intrin, shrink_image_store); - } - } - - if (progress) { - nir_metadata_preserve(function->impl, - nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_shrink_vectors.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_shrink_vectors.c deleted file mode 100644 index 5853ea7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_shrink_vectors.c +++ /dev/null @@ -1,505 +0,0 @@ -/* - * Copyright © 2020 Google LLC - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 - * - * Removes unused components of SSA defs. - * - * Due to various optimization passes (or frontend implementations, - * particularly prog_to_nir), we may have instructions generating vectors - * whose components don't get read by any instruction. - * - * For memory loads, while it can be tricky to eliminate unused low components - * or channels in the middle of a writemask (you might need to increment some - * offset from a load_uniform, for example), it is trivial to just drop the - * trailing components. - * For vector ALU and load_const, only used by other ALU instructions, - * this pass eliminates arbitrary channels as well as duplicate channels, - * and reswizzles the uses. - * - * This pass is probably only of use to vector backends -- scalar backends - * typically get unused def channel trimming by scalarizing and dead code - * elimination. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "../../util/u_math.h" - -/* - * Round up a vector size to a vector size that's valid in NIR. At present, NIR - * supports only vec2-5, vec8, and vec16. Attempting to generate other sizes - * will fail validation. - */ -static unsigned -round_up_components(unsigned n) -{ - return (n > 5) ? util_next_power_of_two(n) : n; -} - -static bool -shrink_dest_to_read_mask(nir_ssa_def *def) -{ - /* early out if there's nothing to do. */ - if (def->num_components == 1) - return false; - - /* don't remove any channels if used by an intrinsic */ - nir_foreach_use(use_src, def) { - if (use_src->parent_instr->type == nir_instr_type_intrinsic) - return false; - } - - unsigned mask = nir_ssa_def_components_read(def); - int last_bit = util_last_bit(mask); - - /* If nothing was read, leave it up to DCE. */ - if (!mask) - return false; - - unsigned rounded = round_up_components(last_bit); - assert(rounded <= def->num_components); - last_bit = rounded; - - if (def->num_components > last_bit) { - def->num_components = last_bit; - return true; - } - - return false; -} - -static void -reswizzle_alu_uses(nir_ssa_def *def, uint8_t *reswizzle) -{ - nir_foreach_use(use_src, def) { - /* all uses must be ALU instructions */ - assert(use_src->parent_instr->type == nir_instr_type_alu); - nir_alu_src *alu_src = (nir_alu_src*)use_src; - - /* reswizzle ALU sources */ - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) - alu_src->swizzle[i] = reswizzle[alu_src->swizzle[i]]; - } -} - -static bool -is_only_used_by_alu(nir_ssa_def *def) -{ - nir_foreach_use(use_src, def) { - if (use_src->parent_instr->type != nir_instr_type_alu) - return false; - } - - return true; -} - -static bool -opt_shrink_vector(nir_builder *b, nir_alu_instr *instr) -{ - nir_ssa_def *def = &instr->dest.dest.ssa; - unsigned mask = nir_ssa_def_components_read(def); - - /* If nothing was read, leave it up to DCE. */ - if (mask == 0) - return false; - - /* don't remove any channels if used by non-ALU */ - if (!is_only_used_by_alu(def)) - return false; - - uint8_t reswizzle[NIR_MAX_VEC_COMPONENTS] = { 0 }; - nir_ssa_scalar srcs[NIR_MAX_VEC_COMPONENTS] = { 0 }; - unsigned num_components = 0; - for (unsigned i = 0; i < def->num_components; i++) { - if (!((mask >> i) & 0x1)) - continue; - - nir_ssa_scalar scalar = nir_get_ssa_scalar(instr->src[i].src.ssa, instr->src[i].swizzle[0]); - - /* Try reuse a component with the same value */ - unsigned j; - for (j = 0; j < num_components; j++) { - if (scalar.def == srcs[j].def && scalar.comp == srcs[j].comp) { - reswizzle[i] = j; - break; - } - } - - /* Otherwise, just append the value */ - if (j == num_components) { - srcs[num_components] = scalar; - reswizzle[i] = num_components++; - } - } - - /* return if no component was removed */ - if (num_components == def->num_components) - return false; - - /* create new vecN and replace uses */ - nir_ssa_def *new_vec = nir_vec_scalars(b, srcs, num_components); - nir_ssa_def_rewrite_uses(def, new_vec); - reswizzle_alu_uses(new_vec, reswizzle); - - return true; -} - -static bool -opt_shrink_vectors_alu(nir_builder *b, nir_alu_instr *instr) -{ - nir_ssa_def *def = &instr->dest.dest.ssa; - - /* Nothing to shrink */ - if (def->num_components == 1) - return false; - - switch (instr->op) { - /* don't use nir_op_is_vec() as not all vector sizes are supported. */ - case nir_op_vec4: - case nir_op_vec3: - case nir_op_vec2: - return opt_shrink_vector(b, instr); - default: - if (nir_op_infos[instr->op].output_size != 0) - return false; - break; - } - - /* don't remove any channels if used by non-ALU */ - if (!is_only_used_by_alu(def)) - return false; - - unsigned mask = nir_ssa_def_components_read(def); - /* return, if there is nothing to do */ - if (mask == 0) - return false; - - uint8_t reswizzle[NIR_MAX_VEC_COMPONENTS] = { 0 }; - unsigned num_components = 0; - bool progress = false; - for (unsigned i = 0; i < def->num_components; i++) { - /* skip unused components */ - if (!((mask >> i) & 0x1)) - continue; - - /* Try reuse a component with the same swizzles */ - unsigned j; - for (j = 0; j < num_components; j++) { - bool duplicate_channel = true; - for (unsigned k = 0; k < nir_op_infos[instr->op].num_inputs; k++) { - if (nir_op_infos[instr->op].input_sizes[k] != 0 || - instr->src[k].swizzle[i] != instr->src[k].swizzle[j]) { - duplicate_channel = false; - break; - } - } - - if (duplicate_channel) { - reswizzle[i] = j; - progress = true; - break; - } - } - - /* Otherwise, just append the value */ - if (j == num_components) { - for (int k = 0; k < nir_op_infos[instr->op].num_inputs; k++) { - instr->src[k].swizzle[num_components] = instr->src[k].swizzle[i]; - } - if (i != num_components) - progress = true; - reswizzle[i] = num_components++; - } - } - - /* update uses */ - if (progress) - reswizzle_alu_uses(def, reswizzle); - - unsigned rounded = round_up_components(num_components); - assert(rounded <= def->num_components); - if (rounded < def->num_components) - progress = true; - - /* update dest */ - def->num_components = rounded; - instr->dest.write_mask = BITFIELD_MASK(rounded); - - return progress; -} - -static bool -opt_shrink_vectors_intrinsic(nir_builder *b, nir_intrinsic_instr *instr) -{ - switch (instr->intrinsic) { - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_input: - case nir_intrinsic_load_input_vertex: - case nir_intrinsic_load_per_vertex_input: - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_push_constant: - case nir_intrinsic_load_constant: - case nir_intrinsic_load_shared: - case nir_intrinsic_load_global: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_kernel_input: - case nir_intrinsic_load_scratch: - break; - default: - return false; - } - - /* Must be a vectorized intrinsic that we can resize. */ - assert(instr->num_components != 0); - - /* Trim the dest to the used channels */ - if (shrink_dest_to_read_mask(&instr->dest.ssa)) { - instr->num_components = instr->dest.ssa.num_components; - return true; - } - - return false; -} - -static bool -opt_shrink_vectors_load_const(nir_load_const_instr *instr) -{ - nir_ssa_def *def = &instr->def; - - /* early out if there's nothing to do. */ - if (def->num_components == 1) - return false; - - /* don't remove any channels if used by non-ALU */ - if (!is_only_used_by_alu(def)) - return false; - - unsigned mask = nir_ssa_def_components_read(def); - - /* If nothing was read, leave it up to DCE. */ - if (!mask) - return false; - - uint8_t reswizzle[NIR_MAX_VEC_COMPONENTS] = { 0 }; - unsigned num_components = 0; - bool progress = false; - for (unsigned i = 0; i < def->num_components; i++) { - if (!((mask >> i) & 0x1)) - continue; - - /* Try reuse a component with the same constant */ - unsigned j; - for (j = 0; j < num_components; j++) { - if (instr->value[i].u64 == instr->value[j].u64) { - reswizzle[i] = j; - progress = true; - break; - } - } - - /* Otherwise, just append the value */ - if (j == num_components) { - instr->value[num_components] = instr->value[i]; - if (i != num_components) - progress = true; - reswizzle[i] = num_components++; - } - } - - if (progress) - reswizzle_alu_uses(def, reswizzle); - - unsigned rounded = round_up_components(num_components); - assert(rounded <= def->num_components); - if (rounded < def->num_components) - progress = true; - - def->num_components = rounded; - - return progress; -} - -static bool -opt_shrink_vectors_ssa_undef(nir_ssa_undef_instr *instr) -{ - return shrink_dest_to_read_mask(&instr->def); -} - -static bool -opt_shrink_vectors_phi(nir_builder *b, nir_phi_instr *instr) -{ - nir_ssa_def *def = &instr->dest.ssa; - - /* early out if there's nothing to do. */ - if (def->num_components == 1) - return false; - - /* Ignore large vectors for now. */ - if (def->num_components > 4) - return false; - - - /* Check the uses. */ - nir_component_mask_t mask = 0; - nir_foreach_use(src, def) { - if (src->parent_instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(src->parent_instr); - - nir_alu_src *alu_src = exec_node_data(nir_alu_src, src, src); - int src_idx = alu_src - &alu->src[0]; - nir_component_mask_t src_read_mask = nir_alu_instr_src_read_mask(alu, src_idx); - - nir_ssa_def *alu_def = &alu->dest.dest.ssa; - - /* We don't mark the channels used if the only reader is the original phi. - * This can happen in the case of loops. - */ - nir_foreach_use(alu_use_src, alu_def) { - if (alu_use_src->parent_instr != &instr->instr) { - mask |= src_read_mask; - } - } - - /* However, even if the instruction only points back at the phi, we still - * need to check that the swizzles are trivial. - */ - if (nir_op_is_vec(alu->op) && alu->op != nir_op_mov) { - if (src_idx != alu->src[src_idx].swizzle[0]) { - mask |= src_read_mask; - } - } else if (!nir_alu_src_is_trivial_ssa(alu, src_idx)) { - mask |= src_read_mask; - } - } - - /* DCE will handle this. */ - if (mask == 0) - return false; - - /* Nothing to shrink? */ - if (BITFIELD_MASK(def->num_components) == mask) - return false; - - /* Set up the reswizzles. */ - unsigned num_components = 0; - uint8_t reswizzle[NIR_MAX_VEC_COMPONENTS] = { 0 }; - uint8_t src_reswizzle[NIR_MAX_VEC_COMPONENTS] = { 0 }; - for (unsigned i = 0; i < def->num_components; i++) { - if (!((mask >> i) & 0x1)) - continue; - src_reswizzle[num_components] = i; - reswizzle[i] = num_components++; - } - - /* Shrink the phi, this part is simple. */ - def->num_components = num_components; - - /* We can't swizzle phi sources directly so just insert extra mov - * with the correct swizzle and let the other parts of nir_shrink_vectors - * do its job on the original source instruction. If the original source was - * used only in the phi, the movs will disappear later after copy propagate. - */ - nir_foreach_phi_src(phi_src, instr) { - b->cursor = nir_after_instr_and_phis(phi_src->src.ssa->parent_instr); - - nir_alu_src alu_src = { - .src = nir_src_for_ssa(phi_src->src.ssa) - }; - - for (unsigned i = 0; i < num_components; i++) - alu_src.swizzle[i] = src_reswizzle[i]; - nir_ssa_def *mov = nir_mov_alu(b, alu_src, num_components); - - nir_instr_rewrite_src_ssa(&instr->instr, &phi_src->src, mov); - } - b->cursor = nir_before_instr(&instr->instr); - - /* Reswizzle readers. */ - reswizzle_alu_uses(def, reswizzle); - - return true; -} - -static bool -opt_shrink_vectors_instr(nir_builder *b, nir_instr *instr) -{ - b->cursor = nir_before_instr(instr); - - switch (instr->type) { - case nir_instr_type_alu: - return opt_shrink_vectors_alu(b, nir_instr_as_alu(instr)); - - case nir_instr_type_intrinsic: - return opt_shrink_vectors_intrinsic(b, nir_instr_as_intrinsic(instr)); - - case nir_instr_type_load_const: - return opt_shrink_vectors_load_const(nir_instr_as_load_const(instr)); - - case nir_instr_type_ssa_undef: - return opt_shrink_vectors_ssa_undef(nir_instr_as_ssa_undef(instr)); - - case nir_instr_type_phi: - return opt_shrink_vectors_phi(b, nir_instr_as_phi(instr)); - - default: - return false; - } - - return true; -} - -bool -nir_opt_shrink_vectors(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_builder b; - nir_builder_init(&b, function->impl); - - nir_foreach_block_reverse(block, function->impl) { - nir_foreach_instr_reverse(instr, block) { - progress |= opt_shrink_vectors_instr(&b, instr); - } - } - - if (progress) { - nir_metadata_preserve(function->impl, - nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_sink.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_sink.c deleted file mode 100644 index 40eaae4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_sink.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright © 2018 Red Hat - * Copyright © 2019 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Rob Clark (robdclark@gmail.com> - * Daniel Schürmann (daniel.schuermann@campus.tu-berlin.de) - * Rhys Perry (pendingchaos02@gmail.com) - * - */ - -#include "nir.h" - - -/* - * A simple pass that moves some instructions into the least common - * anscestor of consuming instructions. - */ - -bool -nir_can_move_instr(nir_instr *instr, nir_move_options options) -{ - switch (instr->type) { - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: { - return options & nir_move_const_undef; - } - case nir_instr_type_alu: { - if (nir_op_is_vec(nir_instr_as_alu(instr)->op) || - nir_instr_as_alu(instr)->op == nir_op_b2i32) - return options & nir_move_copies; - if (nir_alu_instr_is_comparison(nir_instr_as_alu(instr))) - return options & nir_move_comparisons; - return false; - } - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_ubo_vec4: - return options & nir_move_load_ubo; - case nir_intrinsic_load_ssbo: - return (options & nir_move_load_ssbo) && nir_intrinsic_can_reorder(intrin); - case nir_intrinsic_load_input: - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_load_per_vertex_input: - return options & nir_move_load_input; - case nir_intrinsic_load_uniform: - return options & nir_move_load_uniform; - default: - return false; - } - } - default: - return false; - } -} - -static nir_loop * -get_innermost_loop(nir_cf_node *node) -{ - for (; node != NULL; node = node->parent) { - if (node->type == nir_cf_node_loop) - return (nir_loop*)node; - } - return NULL; -} - -static bool -loop_contains_block(nir_loop *loop, nir_block *block) -{ - assert(!nir_loop_has_continue_construct(loop)); - nir_block *before = nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - nir_block *after = nir_cf_node_as_block(nir_cf_node_next(&loop->cf_node)); - - return block->index > before->index && block->index < after->index; -} - -/* Given the LCA of all uses and the definition, find a block on the path - * between them in the dominance tree that is outside of as many loops as - * possible. If "sink_out_of_loops" is false, then we disallow sinking the - * definition outside of the loop it's defined in (if any). - */ - -static nir_block * -adjust_block_for_loops(nir_block *use_block, nir_block *def_block, - bool sink_out_of_loops) -{ - nir_loop *def_loop = NULL; - if (!sink_out_of_loops) - def_loop = get_innermost_loop(&def_block->cf_node); - - for (nir_block *cur_block = use_block; cur_block != def_block->imm_dom; - cur_block = cur_block->imm_dom) { - if (!sink_out_of_loops && def_loop && - !loop_contains_block(def_loop, use_block)) { - use_block = cur_block; - continue; - } - - nir_cf_node *next = nir_cf_node_next(&cur_block->cf_node); - if (next && next->type == nir_cf_node_loop) { - nir_loop *following_loop = nir_cf_node_as_loop(next); - if (loop_contains_block(following_loop, use_block)) { - use_block = cur_block; - continue; - } - } - } - - return use_block; -} - -/* iterate a ssa def's use's and try to find a more optimal block to - * move it to, using the dominance tree. In short, if all of the uses - * are contained in a single block, the load will be moved there, - * otherwise it will be move to the least common ancestor block of all - * the uses - */ -static nir_block * -get_preferred_block(nir_ssa_def *def, bool sink_out_of_loops) -{ - nir_block *lca = NULL; - - nir_foreach_use_including_if(use, def) { - nir_block *use_block; - - if (use->is_if) { - use_block = - nir_cf_node_as_block(nir_cf_node_prev(&use->parent_if->cf_node)); - } else { - nir_instr *instr = use->parent_instr; - use_block = instr->block; - - /* - * Kind of an ugly special-case, but phi instructions - * need to appear first in the block, so by definition - * we can't move an instruction into a block where it is - * consumed by a phi instruction. We could conceivably - * move it into a dominator block. - */ - if (instr->type == nir_instr_type_phi) { - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_block *phi_lca = NULL; - nir_foreach_phi_src(src, phi) { - if (&src->src == use) - phi_lca = nir_dominance_lca(phi_lca, src->pred); - } - use_block = phi_lca; - } - } - - lca = nir_dominance_lca(lca, use_block); - } - - /* return in case, we didn't find a reachable user */ - if (!lca) - return NULL; - - /* We don't sink any instructions into loops to avoid repeated executions - * This might occasionally increase register pressure, but seems overall - * the better choice. - */ - lca = adjust_block_for_loops(lca, def->parent_instr->block, - sink_out_of_loops); - assert(nir_block_dominates(def->parent_instr->block, lca)); - - return lca; -} - -static bool -can_sink_out_of_loop(nir_intrinsic_instr *intrin) -{ - /* Don't sink buffer loads out of loops because that can make its - * resource divergent and break code like that which is generated - * by nir_lower_non_uniform_access. - */ - return intrin->intrinsic != nir_intrinsic_load_ubo && - intrin->intrinsic != nir_intrinsic_load_ssbo; -} - -bool -nir_opt_sink(nir_shader *shader, nir_move_options options) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_metadata_require(function->impl, - nir_metadata_block_index | nir_metadata_dominance); - - nir_foreach_block_reverse(block, function->impl) { - nir_foreach_instr_reverse_safe(instr, block) { - if (!nir_can_move_instr(instr, options)) - continue; - - nir_ssa_def *def = nir_instr_ssa_def(instr); - - bool sink_out_of_loops = - instr->type != nir_instr_type_intrinsic || - can_sink_out_of_loop(nir_instr_as_intrinsic(instr)); - nir_block *use_block = - get_preferred_block(def, sink_out_of_loops); - - if (!use_block || use_block == instr->block) - continue; - - nir_instr_remove(instr); - nir_instr_insert(nir_after_phis(use_block), instr); - - progress = true; - } - } - - nir_metadata_preserve(function->impl, - nir_metadata_block_index | nir_metadata_dominance); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_trivial_continues.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_trivial_continues.c deleted file mode 100644 index 347d19a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_trivial_continues.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -static bool -instr_is_continue(nir_instr *instr) -{ - if (instr->type != nir_instr_type_jump) - return false; - - return nir_instr_as_jump(instr)->type == nir_jump_continue; -} - -static bool -lower_trivial_continues_block(nir_block *block, nir_loop *loop) -{ - bool progress = false; - nir_instr *first_instr = nir_block_first_instr(block); - if (!first_instr || instr_is_continue(first_instr)) { - /* The block contains only a continue if anything */ - nir_cf_node *prev_node = nir_cf_node_prev(&block->cf_node); - if (prev_node && prev_node->type == nir_cf_node_if) { - nir_if *prev_if = nir_cf_node_as_if(prev_node); - progress |= lower_trivial_continues_block( - nir_if_last_then_block(prev_if), loop); - progress |= lower_trivial_continues_block( - nir_if_last_else_block(prev_if), loop); - } - - /* The lower_phis_to_regs helper is smart enough to push phi sources as - * far up if-ladders as it possibly can. In other words, the recursive - * calls above shouldn't be adding instructions to this block since it - * follows an if statement. - */ - first_instr = nir_block_first_instr(block); - assert(!first_instr || instr_is_continue(first_instr)); - } - - nir_instr *last_instr = nir_block_last_instr(block); - if (!last_instr || !instr_is_continue(last_instr)) - return progress; - - /* We're at the end of a block that goes straight through to the end of the - * loop and continues to the top. We can exit normally instead of jump. - */ - nir_lower_phis_to_regs_block(nir_loop_first_block(loop)); - nir_instr_remove(last_instr); - return true; -} - -static bool -lower_trivial_continues_list(struct exec_list *cf_list, - bool list_ends_at_loop_tail, - nir_loop *loop) -{ - bool progress = false; - foreach_list_typed(nir_cf_node, cf_node, node, cf_list) { - bool at_loop_tail = list_ends_at_loop_tail && - &cf_node->node == exec_list_get_tail(cf_list); - switch (cf_node->type) { - case nir_cf_node_block: - break; - - case nir_cf_node_if: { - nir_if *nif = nir_cf_node_as_if(cf_node); - if (lower_trivial_continues_list(&nif->then_list, at_loop_tail, loop)) - progress = true; - if (lower_trivial_continues_list(&nif->else_list, at_loop_tail, loop)) - progress = true; - break; - } - - case nir_cf_node_loop: { - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - if (lower_trivial_continues_list(&loop->body, true, loop)) - progress = true; - if (lower_trivial_continues_block(nir_loop_last_block(loop), loop)) - progress = true; - break; - } - - case nir_cf_node_function: - unreachable("Invalid cf type"); - } - } - - return progress; -} - -/** - * This simple pass gets rid of any "trivial" continues, i.e. those that are - * at the tail of a loop where we can just delete the continue instruction and - * control-flow will naturally and harmlessly take us back to the top of the - * loop. - */ -bool -nir_opt_trivial_continues(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl == NULL) - continue; - - /* First we run the simple pass to get rid of pesky continues */ - if (lower_trivial_continues_list(&function->impl->body, false, NULL)) { - nir_metadata_preserve(function->impl, nir_metadata_none); - - /* If that made progress, we're no longer really in SSA form. */ - nir_lower_regs_to_ssa_impl(function->impl); - progress = true; - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_undef.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_undef.c deleted file mode 100644 index 8c723c1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_undef.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright © 2015 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/** @file nir_opt_undef.c - * - * Handles optimization of operations involving ssa_undef. - */ - -/** - * Turn conditional selects between an undef and some other value into a move - * of that other value (on the assumption that the condition's going to be - * choosing the defined value). This reduces work after if flattening when - * each side of the if is defining a variable. - */ -static bool -opt_undef_csel(nir_alu_instr *instr) -{ - if (!nir_op_is_selection(instr->op)) - return false; - - assert(instr->dest.dest.is_ssa); - - for (int i = 1; i <= 2; i++) { - if (!instr->src[i].src.is_ssa) - continue; - - nir_instr *parent = instr->src[i].src.ssa->parent_instr; - if (parent->type != nir_instr_type_ssa_undef) - continue; - - /* We can't just use nir_alu_src_copy, because we need the def/use - * updated. - */ - nir_instr_rewrite_src(&instr->instr, &instr->src[0].src, - instr->src[i == 1 ? 2 : 1].src); - nir_alu_src_copy(&instr->src[0], &instr->src[i == 1 ? 2 : 1], - instr); - - nir_src empty_src; - memset(&empty_src, 0, sizeof(empty_src)); - nir_instr_rewrite_src(&instr->instr, &instr->src[1].src, empty_src); - nir_instr_rewrite_src(&instr->instr, &instr->src[2].src, empty_src); - instr->op = nir_op_mov; - - return true; - } - - return false; -} - -/** - * Replace vecN(undef, undef, ...) with a single undef. - */ -static bool -opt_undef_vecN(nir_builder *b, nir_alu_instr *alu) -{ - if (!nir_op_is_vec(alu->op)) - return false; - - assert(alu->dest.dest.is_ssa); - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (!alu->src[i].src.is_ssa || - alu->src[i].src.ssa->parent_instr->type != nir_instr_type_ssa_undef) - return false; - } - - b->cursor = nir_before_instr(&alu->instr); - nir_ssa_def *undef = nir_ssa_undef(b, alu->dest.dest.ssa.num_components, - nir_dest_bit_size(alu->dest.dest)); - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, undef); - - return true; -} - -static uint32_t -nir_get_undef_mask(nir_ssa_def *def) -{ - nir_instr *instr = def->parent_instr; - - if (instr->type == nir_instr_type_ssa_undef) - return BITSET_MASK(def->num_components); - - if (instr->type != nir_instr_type_alu) - return 0; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - unsigned undef = 0; - - /* nir_op_mov of undef is handled by opt_undef_vecN() */ - if (nir_op_is_vec(alu->op) && alu->op != nir_op_mov) { - for (int i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (alu->src[i].src.is_ssa && - alu->src[i].src.ssa->parent_instr->type == - nir_instr_type_ssa_undef) { - undef |= BITSET_MASK(nir_ssa_alu_instr_src_components(alu, i)) << i; - } - } - } - - return undef; -} - -/** - * Remove any store intrinsic writemask channels whose value is undefined (the - * existing value is a fine representation of "undefined"). - */ -static bool -opt_undef_store(nir_intrinsic_instr *intrin) -{ - int arg_index; - switch (intrin->intrinsic) { - case nir_intrinsic_store_deref: - arg_index = 1; - break; - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_vertex_output: - case nir_intrinsic_store_per_primitive_output: - case nir_intrinsic_store_ssbo: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_global: - case nir_intrinsic_store_scratch: - arg_index = 0; - break; - default: - return false; - } - - if (!intrin->src[arg_index].is_ssa) - return false; - - nir_ssa_def *def = intrin->src[arg_index].ssa; - - unsigned write_mask = nir_intrinsic_write_mask(intrin); - unsigned undef_mask = nir_get_undef_mask(def); - - if (!(write_mask & undef_mask)) - return false; - - write_mask &= ~undef_mask; - if (!write_mask) - nir_instr_remove(&intrin->instr); - else - nir_intrinsic_set_write_mask(intrin, write_mask); - - return true; -} - -static bool -opt_undef_pack(nir_builder *b, nir_alu_instr *alu) -{ - switch (alu->op) { - case nir_op_unpack_64_2x32_split_x: - case nir_op_unpack_64_2x32_split_y: - case nir_op_unpack_64_2x32: - if (nir_src_is_undef(alu->src[0].src)) - break; - return false; - default: - return false; - } - unsigned num_components = nir_dest_num_components(alu->dest.dest); - b->cursor = nir_before_instr(&alu->instr); - nir_ssa_def *def = nir_ssa_undef(b, num_components, 32); - nir_ssa_def_rewrite_uses_after(&alu->dest.dest.ssa, def, &alu->instr); - nir_instr_remove(&alu->instr); - return true; -} - -static bool -nir_opt_undef_instr(nir_builder *b, nir_instr *instr, void *data) -{ - if (instr->type == nir_instr_type_alu) { - nir_alu_instr *alu = nir_instr_as_alu(instr); - return opt_undef_csel(alu) || opt_undef_vecN(b, alu) || opt_undef_pack(b, alu); - } else if (instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - return opt_undef_store(intrin); - } - - return false; -} - -bool -nir_opt_undef(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, - nir_opt_undef_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_uniform_atomics.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_uniform_atomics.c deleted file mode 100644 index b83c3e3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_uniform_atomics.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright © 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -/* - * Optimizes atomics (with uniform offsets) using subgroup operations to ensure - * only one atomic operation is done per subgroup. So res = atomicAdd(addr, 1) - * would become something like: - * - * uint tmp = subgroupAdd(1); - * uint res; - * if (subgroupElect()) - * res = atomicAdd(addr, tmp); - * res = subgroupBroadcastFirst(res) + subgroupExclusiveAdd(1); - * - * This pass requires and preserves LCSSA and divergence information. - */ - -#include "nir.h" -#include "nir_builder.h" - -static nir_op -parse_atomic_op(nir_intrinsic_op op, unsigned *offset_src, unsigned *data_src, - unsigned *offset2_src) -{ - switch (op) { - #define OP_NOIMG(intrin, alu) \ - case nir_intrinsic_ssbo_atomic_##intrin: \ - *offset_src = 1; \ - *data_src = 2; \ - *offset2_src = *offset_src; \ - return nir_op_##alu; \ - case nir_intrinsic_shared_atomic_##intrin: \ - case nir_intrinsic_global_atomic_##intrin: \ - case nir_intrinsic_deref_atomic_##intrin: \ - *offset_src = 0; \ - *data_src = 1; \ - *offset2_src = *offset_src; \ - return nir_op_##alu; \ - case nir_intrinsic_global_atomic_##intrin##_amd: \ - *offset_src = 0; \ - *data_src = 1; \ - *offset2_src = 2; \ - return nir_op_##alu; - #define OP(intrin, alu) \ - OP_NOIMG(intrin, alu) \ - case nir_intrinsic_image_deref_atomic_##intrin: \ - case nir_intrinsic_image_atomic_##intrin: \ - case nir_intrinsic_bindless_image_atomic_##intrin: \ - *offset_src = 1; \ - *data_src = 3; \ - *offset2_src = *offset_src; \ - return nir_op_##alu; - OP(add, iadd) - OP(imin, imin) - OP(umin, umin) - OP(imax, imax) - OP(umax, umax) - OP(and, iand) - OP(or, ior) - OP(xor, ixor) - OP(fadd, fadd) - OP_NOIMG(fmin, fmin) - OP_NOIMG(fmax, fmax) - #undef OP_NOIMG - #undef OP - default: - return nir_num_opcodes; - } -} - -static unsigned -get_dim(nir_ssa_scalar scalar) -{ - if (!scalar.def->divergent) - return 0; - - if (scalar.def->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(scalar.def->parent_instr); - if (intrin->intrinsic == nir_intrinsic_load_subgroup_invocation) - return 0x8; - else if (intrin->intrinsic == nir_intrinsic_load_local_invocation_index) - return 0x7; - else if (intrin->intrinsic == nir_intrinsic_load_local_invocation_id) - return 1 << scalar.comp; - else if (intrin->intrinsic == nir_intrinsic_load_global_invocation_index) - return 0x7; - else if (intrin->intrinsic == nir_intrinsic_load_global_invocation_id) - return 1 << scalar.comp; - } else if (nir_ssa_scalar_is_alu(scalar)) { - if (nir_ssa_scalar_alu_op(scalar) == nir_op_iadd || - nir_ssa_scalar_alu_op(scalar) == nir_op_imul) { - nir_ssa_scalar src0 = nir_ssa_scalar_chase_alu_src(scalar, 0); - nir_ssa_scalar src1 = nir_ssa_scalar_chase_alu_src(scalar, 1); - - unsigned src0_dim = get_dim(src0); - if (!src0_dim && src0.def->divergent) - return 0; - unsigned src1_dim = get_dim(src1); - if (!src1_dim && src1.def->divergent) - return 0; - - return src0_dim | src1_dim; - } else if (nir_ssa_scalar_alu_op(scalar) == nir_op_ishl) { - nir_ssa_scalar src0 = nir_ssa_scalar_chase_alu_src(scalar, 0); - nir_ssa_scalar src1 = nir_ssa_scalar_chase_alu_src(scalar, 1); - return src1.def->divergent ? 0 : get_dim(src0); - } - } - - return 0; -} - -/* Returns a bitmask of invocation indices that are compared against a subgroup - * uniform value. - */ -static unsigned -match_invocation_comparison(nir_ssa_scalar scalar) -{ - bool is_alu = nir_ssa_scalar_is_alu(scalar); - if (is_alu && nir_ssa_scalar_alu_op(scalar) == nir_op_iand) { - return match_invocation_comparison(nir_ssa_scalar_chase_alu_src(scalar, 0)) | - match_invocation_comparison(nir_ssa_scalar_chase_alu_src(scalar, 1)); - } else if (is_alu && nir_ssa_scalar_alu_op(scalar) == nir_op_ieq) { - if (!nir_ssa_scalar_chase_alu_src(scalar, 0).def->divergent) - return get_dim(nir_ssa_scalar_chase_alu_src(scalar, 1)); - if (!nir_ssa_scalar_chase_alu_src(scalar, 1).def->divergent) - return get_dim(nir_ssa_scalar_chase_alu_src(scalar, 0)); - } else if (scalar.def->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(scalar.def->parent_instr); - if (intrin->intrinsic == nir_intrinsic_elect) - return 0x8; - } - - return 0; -} - -/* Returns true if the intrinsic is already conditional so that at most one - * invocation in the subgroup does the atomic. - */ -static bool -is_atomic_already_optimized(nir_shader *shader, nir_intrinsic_instr *instr) -{ - unsigned dims = 0; - for (nir_cf_node *cf = &instr->instr.block->cf_node; cf; cf = cf->parent) { - if (cf->type == nir_cf_node_if) { - nir_block *first_then = nir_if_first_then_block(nir_cf_node_as_if(cf)); - nir_block *last_then = nir_if_last_then_block(nir_cf_node_as_if(cf)); - bool within_then = instr->instr.block->index >= first_then->index; - within_then = within_then && instr->instr.block->index <= last_then->index; - if (!within_then) - continue; - - nir_ssa_scalar cond = {nir_cf_node_as_if(cf)->condition.ssa, 0}; - dims |= match_invocation_comparison(cond); - } - } - - if (gl_shader_stage_uses_workgroup(shader->info.stage)) { - unsigned dims_needed = 0; - for (unsigned i = 0; i < 3; i++) - dims_needed |= (shader->info.workgroup_size_variable || - shader->info.workgroup_size[i] > 1) << i; - if ((dims & dims_needed) == dims_needed) - return true; - } - - return dims & 0x8; -} - -/* Perform a reduction and/or exclusive scan. */ -static void -reduce_data(nir_builder *b, nir_op op, nir_ssa_def *data, - nir_ssa_def **reduce, nir_ssa_def **scan) -{ - if (scan) { - *scan = nir_exclusive_scan(b, data, .reduction_op=op); - if (reduce) { - nir_ssa_def *last_lane = nir_last_invocation(b); - nir_ssa_def *res = nir_build_alu(b, op, *scan, data, NULL, NULL); - *reduce = nir_read_invocation(b, res, last_lane); - } - } else { - *reduce = nir_reduce(b, data, .reduction_op=op); - } -} - -static nir_ssa_def * -optimize_atomic(nir_builder *b, nir_intrinsic_instr *intrin, bool return_prev) -{ - unsigned offset_src = 0; - unsigned data_src = 0; - unsigned offset2_src = 0; - nir_op op = parse_atomic_op(intrin->intrinsic, &offset_src, &data_src, &offset2_src); - nir_ssa_def *data = intrin->src[data_src].ssa; - - /* Separate uniform reduction and scan is faster than doing a combined scan+reduce */ - bool combined_scan_reduce = return_prev && data->divergent; - nir_ssa_def *reduce = NULL, *scan = NULL; - reduce_data(b, op, data, &reduce, combined_scan_reduce ? &scan : NULL); - - nir_instr_rewrite_src(&intrin->instr, &intrin->src[data_src], nir_src_for_ssa(reduce)); - nir_update_instr_divergence(b->shader, &intrin->instr); - - nir_ssa_def *cond = nir_elect(b, 1); - - nir_if *nif = nir_push_if(b, cond); - - nir_instr_remove(&intrin->instr); - nir_builder_instr_insert(b, &intrin->instr); - - if (return_prev) { - nir_push_else(b, nif); - - nir_ssa_def *undef = nir_ssa_undef(b, 1, intrin->dest.ssa.bit_size); - - nir_pop_if(b, nif); - nir_ssa_def *result = nir_if_phi(b, &intrin->dest.ssa, undef); - result = nir_read_first_invocation(b, result); - - if (!combined_scan_reduce) - reduce_data(b, op, data, NULL, &scan); - - return nir_build_alu(b, op, result, scan, NULL, NULL); - } else { - nir_pop_if(b, nif); - return NULL; - } -} - -static void -optimize_and_rewrite_atomic(nir_builder *b, nir_intrinsic_instr *intrin) -{ - nir_if *helper_nif = NULL; - if (b->shader->info.stage == MESA_SHADER_FRAGMENT) { - nir_ssa_def *helper = nir_is_helper_invocation(b, 1); - helper_nif = nir_push_if(b, nir_inot(b, helper)); - } - - ASSERTED bool original_result_divergent = intrin->dest.ssa.divergent; - bool return_prev = !nir_ssa_def_is_unused(&intrin->dest.ssa); - - nir_ssa_def old_result = intrin->dest.ssa; - list_replace(&intrin->dest.ssa.uses, &old_result.uses); - nir_ssa_dest_init(&intrin->instr, &intrin->dest, 1, intrin->dest.ssa.bit_size, NULL); - - nir_ssa_def *result = optimize_atomic(b, intrin, return_prev); - - if (helper_nif) { - nir_push_else(b, helper_nif); - nir_ssa_def *undef = result ? nir_ssa_undef(b, 1, result->bit_size) : NULL; - nir_pop_if(b, helper_nif); - if (result) - result = nir_if_phi(b, result, undef); - } - - if (result) { - assert(result->divergent == original_result_divergent); - nir_ssa_def_rewrite_uses(&old_result, result); - } -} - -static bool -opt_uniform_atomics(nir_function_impl *impl) -{ - bool progress = false; - nir_builder b; - nir_builder_init(&b, impl); - b.update_divergence = true; - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - unsigned offset_src, data_src, offset2_src; - if (parse_atomic_op(intrin->intrinsic, &offset_src, &data_src, &offset2_src) == - nir_num_opcodes) - continue; - - if (nir_src_is_divergent(intrin->src[offset_src])) - continue; - if (nir_src_is_divergent(intrin->src[offset2_src])) - continue; - - if (is_atomic_already_optimized(b.shader, intrin)) - continue; - - b.cursor = nir_before_instr(instr); - optimize_and_rewrite_atomic(&b, intrin); - progress = true; - } - } - - return progress; -} - -bool -nir_opt_uniform_atomics(nir_shader *shader) -{ - bool progress = false; - - /* A 1x1x1 workgroup only ever has one active lane, so there's no point in - * optimizing any atomics. - */ - if (gl_shader_stage_uses_workgroup(shader->info.stage) && - !shader->info.workgroup_size_variable && - shader->info.workgroup_size[0] == 1 && shader->info.workgroup_size[1] == 1 && - shader->info.workgroup_size[2] == 1) - return false; - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - if (opt_uniform_atomics(function->impl)) { - progress = true; - nir_metadata_preserve(function->impl, nir_metadata_none); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_vectorize.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_vectorize.c deleted file mode 100644 index f2ea7b9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_opt_vectorize.c +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright © 2015 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -/** - * nir_opt_vectorize() aims to vectorize ALU instructions. - * - * The default vectorization width is 4. - * If desired, a callback function which returns the max vectorization width - * per instruction can be provided. - * - * The max vectorization width must be a power of 2. - */ - -#include "nir.h" -#include "nir_vla.h" -#include "nir_builder.h" -#include "../../util/u_dynarray.h" - -#define HASH(hash, data) XXH32(&data, sizeof(data), hash) - -static uint32_t -hash_src(uint32_t hash, const nir_src *src) -{ - assert(src->is_ssa); - void *hash_data = nir_src_is_const(*src) ? NULL : src->ssa; - - return HASH(hash, hash_data); -} - -static uint32_t -hash_alu_src(uint32_t hash, const nir_alu_src *src, - uint32_t num_components, uint32_t max_vec) -{ - assert(!src->abs && !src->negate); - - /* hash whether a swizzle accesses elements beyond the maximum - * vectorization factor: - * For example accesses to .x and .y are considered different variables - * compared to accesses to .z and .w for 16-bit vec2. - */ - uint32_t swizzle = (src->swizzle[0] & ~(max_vec - 1)); - hash = HASH(hash, swizzle); - - return hash_src(hash, &src->src); -} - -static uint32_t -hash_instr(const void *data) -{ - const nir_instr *instr = (nir_instr *) data; - assert(instr->type == nir_instr_type_alu); - nir_alu_instr *alu = nir_instr_as_alu(instr); - - uint32_t hash = HASH(0, alu->op); - hash = HASH(hash, alu->dest.dest.ssa.bit_size); - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) - hash = hash_alu_src(hash, &alu->src[i], - alu->dest.dest.ssa.num_components, - instr->pass_flags); - - return hash; -} - -static bool -srcs_equal(const nir_src *src1, const nir_src *src2) -{ - assert(src1->is_ssa); - assert(src2->is_ssa); - - return src1->ssa == src2->ssa || - (nir_src_is_const(*src1) && nir_src_is_const(*src2)); -} - -static bool -alu_srcs_equal(const nir_alu_src *src1, const nir_alu_src *src2, - uint32_t max_vec) -{ - assert(!src1->abs); - assert(!src1->negate); - assert(!src2->abs); - assert(!src2->negate); - - uint32_t mask = ~(max_vec - 1); - if ((src1->swizzle[0] & mask) != (src2->swizzle[0] & mask)) - return false; - - return srcs_equal(&src1->src, &src2->src); -} - -static bool -instrs_equal(const void *data1, const void *data2) -{ - const nir_instr *instr1 = (nir_instr *) data1; - const nir_instr *instr2 = (nir_instr *) data2; - assert(instr1->type == nir_instr_type_alu); - assert(instr2->type == nir_instr_type_alu); - - nir_alu_instr *alu1 = nir_instr_as_alu(instr1); - nir_alu_instr *alu2 = nir_instr_as_alu(instr2); - - if (alu1->op != alu2->op) - return false; - - if (alu1->dest.dest.ssa.bit_size != alu2->dest.dest.ssa.bit_size) - return false; - - for (unsigned i = 0; i < nir_op_infos[alu1->op].num_inputs; i++) { - if (!alu_srcs_equal(&alu1->src[i], &alu2->src[i], instr1->pass_flags)) - return false; - } - - return true; -} - -static bool -instr_can_rewrite(nir_instr *instr) -{ - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - - /* Don't try and vectorize mov's. Either they'll be handled by copy - * prop, or they're actually necessary and trying to vectorize them - * would result in fighting with copy prop. - */ - if (alu->op == nir_op_mov) - return false; - - /* no need to hash instructions which are already vectorized */ - if (alu->dest.dest.ssa.num_components >= instr->pass_flags) - return false; - - if (nir_op_infos[alu->op].output_size != 0) - return false; - - for (unsigned i = 0; i < nir_op_infos[alu->op].num_inputs; i++) { - if (nir_op_infos[alu->op].input_sizes[i] != 0) - return false; - - /* don't hash instructions which are already swizzled - * outside of max_components: these should better be scalarized */ - uint32_t mask = ~(instr->pass_flags - 1); - for (unsigned j = 1; j < alu->dest.dest.ssa.num_components; j++) { - if ((alu->src[i].swizzle[0] & mask) != (alu->src[i].swizzle[j] & mask)) - return false; - } - } - - return true; - } - - /* TODO support phi nodes */ - default: - break; - } - - return false; -} - -/* - * Tries to combine two instructions whose sources are different components of - * the same instructions into one vectorized instruction. Note that instr1 - * should dominate instr2. - */ -static nir_instr * -instr_try_combine(struct set *instr_set, nir_instr *instr1, nir_instr *instr2) -{ - assert(instr1->type == nir_instr_type_alu); - assert(instr2->type == nir_instr_type_alu); - nir_alu_instr *alu1 = nir_instr_as_alu(instr1); - nir_alu_instr *alu2 = nir_instr_as_alu(instr2); - - assert(alu1->dest.dest.ssa.bit_size == alu2->dest.dest.ssa.bit_size); - unsigned alu1_components = alu1->dest.dest.ssa.num_components; - unsigned alu2_components = alu2->dest.dest.ssa.num_components; - unsigned total_components = alu1_components + alu2_components; - - assert(instr1->pass_flags == instr2->pass_flags); - if (total_components > instr1->pass_flags) - return NULL; - - nir_builder b; - nir_builder_init(&b, nir_cf_node_get_function(&instr1->block->cf_node)); - b.cursor = nir_after_instr(instr1); - - nir_alu_instr *new_alu = nir_alu_instr_create(b.shader, alu1->op); - nir_ssa_dest_init(&new_alu->instr, &new_alu->dest.dest, - total_components, alu1->dest.dest.ssa.bit_size, NULL); - new_alu->dest.write_mask = (1 << total_components) - 1; - new_alu->instr.pass_flags = alu1->instr.pass_flags; - - /* If either channel is exact, we have to preserve it even if it's - * not optimal for other channels. - */ - new_alu->exact = alu1->exact || alu2->exact; - - /* If all channels don't wrap, we can say that the whole vector doesn't - * wrap. - */ - new_alu->no_signed_wrap = alu1->no_signed_wrap && alu2->no_signed_wrap; - new_alu->no_unsigned_wrap = alu1->no_unsigned_wrap && alu2->no_unsigned_wrap; - - for (unsigned i = 0; i < nir_op_infos[alu1->op].num_inputs; i++) { - /* handle constant merging case */ - if (alu1->src[i].src.ssa != alu2->src[i].src.ssa) { - nir_const_value *c1 = nir_src_as_const_value(alu1->src[i].src); - nir_const_value *c2 = nir_src_as_const_value(alu2->src[i].src); - assert(c1 && c2); - nir_const_value value[NIR_MAX_VEC_COMPONENTS]; - unsigned bit_size = alu1->src[i].src.ssa->bit_size; - - for (unsigned j = 0; j < total_components; j++) { - value[j].u64 = j < alu1_components ? - c1[alu1->src[i].swizzle[j]].u64 : - c2[alu2->src[i].swizzle[j - alu1_components]].u64; - } - nir_ssa_def *def = nir_build_imm(&b, total_components, bit_size, value); - - new_alu->src[i].src = nir_src_for_ssa(def); - for (unsigned j = 0; j < total_components; j++) - new_alu->src[i].swizzle[j] = j; - continue; - } - - new_alu->src[i].src = alu1->src[i].src; - - for (unsigned j = 0; j < alu1_components; j++) - new_alu->src[i].swizzle[j] = alu1->src[i].swizzle[j]; - - for (unsigned j = 0; j < alu2_components; j++) { - new_alu->src[i].swizzle[j + alu1_components] = - alu2->src[i].swizzle[j]; - } - } - - nir_builder_instr_insert(&b, &new_alu->instr); - - /* update all ALU uses */ - nir_foreach_use_safe(src, &alu1->dest.dest.ssa) { - nir_instr *user_instr = src->parent_instr; - if (user_instr->type == nir_instr_type_alu) { - /* Check if user is found in the hashset */ - struct set_entry *entry = _mesa_set_search(instr_set, user_instr); - - /* For ALU instructions, rewrite the source directly to avoid a - * round-trip through copy propagation. - */ - nir_instr_rewrite_src(user_instr, src, - nir_src_for_ssa(&new_alu->dest.dest.ssa)); - - /* Rehash user if it was found in the hashset */ - if (entry && entry->key == user_instr) { - _mesa_set_remove(instr_set, entry); - _mesa_set_add(instr_set, user_instr); - } - } - } - - nir_foreach_use_safe(src, &alu2->dest.dest.ssa) { - if (src->parent_instr->type == nir_instr_type_alu) { - /* For ALU instructions, rewrite the source directly to avoid a - * round-trip through copy propagation. - */ - nir_instr_rewrite_src(src->parent_instr, src, - nir_src_for_ssa(&new_alu->dest.dest.ssa)); - - nir_alu_src *alu_src = container_of(src, nir_alu_src, src); - nir_alu_instr *use = nir_instr_as_alu(src->parent_instr); - unsigned components = nir_ssa_alu_instr_src_components(use, alu_src - use->src); - for (unsigned i = 0; i < components; i++) - alu_src->swizzle[i] += alu1_components; - } - } - - /* update all other uses if there are any */ - unsigned swiz[NIR_MAX_VEC_COMPONENTS]; - - if (!nir_ssa_def_is_unused(&alu1->dest.dest.ssa)) { - for (unsigned i = 0; i < alu1_components; i++) - swiz[i] = i; - nir_ssa_def *new_alu1 = nir_swizzle(&b, &new_alu->dest.dest.ssa, swiz, - alu1_components); - nir_ssa_def_rewrite_uses(&alu1->dest.dest.ssa, new_alu1); - } - - if (!nir_ssa_def_is_unused(&alu2->dest.dest.ssa)) { - for (unsigned i = 0; i < alu2_components; i++) - swiz[i] = i + alu1_components; - nir_ssa_def *new_alu2 = nir_swizzle(&b, &new_alu->dest.dest.ssa, swiz, - alu2_components); - nir_ssa_def_rewrite_uses(&alu2->dest.dest.ssa, new_alu2); - } - - nir_instr_remove(instr1); - nir_instr_remove(instr2); - - return &new_alu->instr; -} - -static struct set * -vec_instr_set_create(void) -{ - return _mesa_set_create(NULL, hash_instr, instrs_equal); -} - -static void -vec_instr_set_destroy(struct set *instr_set) -{ - _mesa_set_destroy(instr_set, NULL); -} - -static bool -vec_instr_set_add_or_rewrite(struct set *instr_set, nir_instr *instr, - nir_vectorize_cb filter, void *data) -{ - /* set max vector to instr pass flags: this is used to hash swizzles */ - instr->pass_flags = filter ? filter(instr, data) : 4; - assert(util_is_power_of_two_or_zero(instr->pass_flags)); - - if (!instr_can_rewrite(instr)) - return false; - - struct set_entry *entry = _mesa_set_search(instr_set, instr); - if (entry) { - nir_instr *old_instr = (nir_instr *) entry->key; - _mesa_set_remove(instr_set, entry); - nir_instr *new_instr = instr_try_combine(instr_set, old_instr, instr); - if (new_instr) { - if (instr_can_rewrite(new_instr)) - _mesa_set_add(instr_set, new_instr); - return true; - } - } - - _mesa_set_add(instr_set, instr); - return false; -} - -static bool -vectorize_block(nir_block *block, struct set *instr_set, - nir_vectorize_cb filter, void *data) -{ - bool progress = false; - - nir_foreach_instr_safe(instr, block) { - if (vec_instr_set_add_or_rewrite(instr_set, instr, filter, data)) - progress = true; - } - - for (unsigned i = 0; i < block->num_dom_children; i++) { - nir_block *child = block->dom_children[i]; - progress |= vectorize_block(child, instr_set, filter, data); - } - - nir_foreach_instr_reverse(instr, block) { - if (instr_can_rewrite(instr)) - _mesa_set_remove_key(instr_set, instr); - } - - return progress; -} - -static bool -nir_opt_vectorize_impl(nir_function_impl *impl, - nir_vectorize_cb filter, void *data) -{ - struct set *instr_set = vec_instr_set_create(); - - nir_metadata_require(impl, nir_metadata_dominance); - - bool progress = vectorize_block(nir_start_block(impl), instr_set, - filter, data); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - vec_instr_set_destroy(instr_set); - return progress; -} - -bool -nir_opt_vectorize(nir_shader *shader, nir_vectorize_cb filter, - void *data) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress |= nir_opt_vectorize_impl(function->impl, filter, data); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_passthrough_gs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_passthrough_gs.c deleted file mode 100644 index 57c82f0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_passthrough_gs.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright © 2022 Collabora Ltc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_xfb_info.h" -#include "nir_builder.h" -#include "../../util/u_memory.h" - -static unsigned int -gs_in_prim_for_topology(enum shader_prim prim) -{ - switch (prim) { - case SHADER_PRIM_QUADS: - return SHADER_PRIM_LINES_ADJACENCY; - default: - return prim; - } -} - -static enum shader_prim -gs_out_prim_for_topology(enum shader_prim prim) -{ - switch (prim) { - case SHADER_PRIM_POINTS: - return SHADER_PRIM_POINTS; - case SHADER_PRIM_LINES: - case SHADER_PRIM_LINE_LOOP: - case SHADER_PRIM_LINES_ADJACENCY: - case SHADER_PRIM_LINE_STRIP_ADJACENCY: - case SHADER_PRIM_LINE_STRIP: - return SHADER_PRIM_LINE_STRIP; - case SHADER_PRIM_TRIANGLES: - case SHADER_PRIM_TRIANGLE_STRIP: - case SHADER_PRIM_TRIANGLE_FAN: - case SHADER_PRIM_TRIANGLES_ADJACENCY: - case SHADER_PRIM_TRIANGLE_STRIP_ADJACENCY: - case SHADER_PRIM_POLYGON: - return SHADER_PRIM_TRIANGLE_STRIP; - case SHADER_PRIM_QUADS: - case SHADER_PRIM_QUAD_STRIP: - case SHADER_PRIM_PATCHES: - default: - return SHADER_PRIM_QUADS; - } -} - -static unsigned int -vertices_for_prim(enum shader_prim prim) -{ - switch (prim) { - case SHADER_PRIM_POINTS: - return 1; - case SHADER_PRIM_LINES: - case SHADER_PRIM_LINE_LOOP: - case SHADER_PRIM_LINES_ADJACENCY: - case SHADER_PRIM_LINE_STRIP_ADJACENCY: - case SHADER_PRIM_LINE_STRIP: - return 2; - case SHADER_PRIM_TRIANGLES: - case SHADER_PRIM_TRIANGLE_STRIP: - case SHADER_PRIM_TRIANGLE_FAN: - case SHADER_PRIM_TRIANGLES_ADJACENCY: - case SHADER_PRIM_TRIANGLE_STRIP_ADJACENCY: - case SHADER_PRIM_POLYGON: - return 3; - case SHADER_PRIM_QUADS: - case SHADER_PRIM_QUAD_STRIP: - return 4; - case SHADER_PRIM_PATCHES: - default: - unreachable("unsupported primitive for gs input"); - } -} - -static unsigned int -array_size_for_prim(enum shader_prim prim) -{ - switch (prim) { - case SHADER_PRIM_POINTS: - return 1; - case SHADER_PRIM_LINES: - case SHADER_PRIM_LINE_LOOP: - case SHADER_PRIM_LINE_STRIP: - return 2; - case SHADER_PRIM_LINES_ADJACENCY: - case SHADER_PRIM_LINE_STRIP_ADJACENCY: - return 4; - case SHADER_PRIM_TRIANGLES: - case SHADER_PRIM_TRIANGLE_STRIP: - case SHADER_PRIM_TRIANGLE_FAN: - case SHADER_PRIM_POLYGON: - return 3; - case SHADER_PRIM_TRIANGLES_ADJACENCY: - case SHADER_PRIM_TRIANGLE_STRIP_ADJACENCY: - return 6; - case SHADER_PRIM_QUADS: - case SHADER_PRIM_QUAD_STRIP: - return 4; - case SHADER_PRIM_PATCHES: - default: - unreachable("unsupported primitive for gs input"); - } -} - -static void -copy_vars(nir_builder *b, nir_deref_instr *dst, nir_deref_instr *src) -{ - assert(glsl_get_bare_type(dst->type) == glsl_get_bare_type(src->type)); - if (glsl_type_is_struct_or_ifc(dst->type)) { - for (unsigned i = 0; i < glsl_get_length(dst->type); ++i) { - copy_vars(b, nir_build_deref_struct(b, dst, i), nir_build_deref_struct(b, src, i)); - } - } else if (glsl_type_is_array_or_matrix(dst->type)) { - unsigned count = glsl_type_is_array(dst->type) ? glsl_array_size(dst->type) : glsl_get_matrix_columns(dst->type); - for (unsigned i = 0; i < count; i++) { - copy_vars(b, nir_build_deref_array_imm(b, dst, i), nir_build_deref_array_imm(b, src, i)); - } - } else { - nir_ssa_def *load = nir_load_deref(b, src); - nir_store_deref(b, dst, load, BITFIELD_MASK(load->num_components)); - } -} - -/* - * A helper to create a passthrough GS shader for drivers that needs to lower - * some rendering tasks to the GS. - */ - -nir_shader * -nir_create_passthrough_gs(const nir_shader_compiler_options *options, - const nir_shader *prev_stage, - enum shader_prim primitive_type, - int flat_interp_mask_offset, - int last_pv_vert_offset, - bool emulate_edgeflags, - bool force_line_strip_out) -{ - unsigned int vertices_out = vertices_for_prim(primitive_type); - emulate_edgeflags = emulate_edgeflags && (prev_stage->info.outputs_written & VARYING_BIT_EDGE); - bool needs_closing = (force_line_strip_out || emulate_edgeflags) && vertices_out >= 3; - enum shader_prim original_our_prim = gs_out_prim_for_topology(primitive_type); - nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_GEOMETRY, - options, - "gs passthrough"); - - nir_shader *nir = b.shader; - nir->info.gs.input_primitive = gs_in_prim_for_topology(primitive_type); - nir->info.gs.output_primitive = (force_line_strip_out || emulate_edgeflags) ? - SHADER_PRIM_LINE_STRIP : original_our_prim; - nir->info.gs.vertices_in = vertices_out; - nir->info.gs.vertices_out = needs_closing ? vertices_out + 1 : vertices_out; - nir->info.gs.invocations = 1; - nir->info.gs.active_stream_mask = 1; - - nir->info.has_transform_feedback_varyings = prev_stage->info.has_transform_feedback_varyings; - memcpy(nir->info.xfb_stride, prev_stage->info.xfb_stride, sizeof(prev_stage->info.xfb_stride)); - if (prev_stage->xfb_info) { - nir->xfb_info = mem_dup(prev_stage->xfb_info, nir_xfb_info_size(prev_stage->xfb_info->output_count)); - } - - bool handle_flat = nir->info.gs.output_primitive == SHADER_PRIM_LINE_STRIP && - nir->info.gs.output_primitive != original_our_prim; - nir_variable *in_vars[VARYING_SLOT_MAX * 4]; - nir_variable *out_vars[VARYING_SLOT_MAX * 4]; - unsigned num_inputs = 0, num_outputs = 0; - - /* Create input/output variables. */ - nir_foreach_shader_out_variable(var, prev_stage) { - assert(!var->data.patch); - - /* input vars can't be created for those */ - if (var->data.location == VARYING_SLOT_LAYER || - var->data.location == VARYING_SLOT_VIEW_INDEX) - continue; - - char name[100]; - if (var->name) - snprintf(name, sizeof(name), "in_%s", var->name); - else - snprintf(name, sizeof(name), "in_%d", var->data.driver_location); - - nir_variable *in = nir_variable_clone(var, nir); - ralloc_free(in->name); - in->name = ralloc_strdup(in, name); - in->type = glsl_array_type(var->type, 6, false); - in->data.mode = nir_var_shader_in; - nir_shader_add_variable(nir, in); - - in_vars[num_inputs++] = in; - - nir->num_inputs++; - if (in->data.location == VARYING_SLOT_EDGE) - continue; - - if (var->data.location != VARYING_SLOT_POS) - nir->num_outputs++; - - if (var->name) - snprintf(name, sizeof(name), "out_%s", var->name); - else - snprintf(name, sizeof(name), "out_%d", var->data.driver_location); - - nir_variable *out = nir_variable_clone(var, nir); - ralloc_free(out->name); - out->name = ralloc_strdup(out, name); - out->data.mode = nir_var_shader_out; - nir_shader_add_variable(nir, out); - - out_vars[num_outputs++] = out; - } - - unsigned int start_vert = 0; - unsigned int end_vert = vertices_out; - unsigned int vert_step = 1; - switch (primitive_type) { - case PIPE_PRIM_LINES_ADJACENCY: - case PIPE_PRIM_LINE_STRIP_ADJACENCY: - start_vert = 1; - end_vert += 1; - break; - case PIPE_PRIM_TRIANGLES_ADJACENCY: - case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: - end_vert = 5; - vert_step = 2; - break; - default: - break; - } - - nir_variable *edge_var = nir_find_variable_with_location(nir, nir_var_shader_in, VARYING_SLOT_EDGE); - nir_ssa_def *flat_interp_mask_def = nir_load_ubo(&b, 1, 32, - nir_imm_int(&b, 0), nir_imm_int(&b, flat_interp_mask_offset), - .align_mul = 4, .align_offset = 0, .range_base = 0, .range = ~0); - nir_ssa_def *last_pv_vert_def = nir_load_ubo(&b, 1, 32, - nir_imm_int(&b, 0), nir_imm_int(&b, last_pv_vert_offset), - .align_mul = 4, .align_offset = 0, .range_base = 0, .range = ~0); - last_pv_vert_def = nir_ine_imm(&b, last_pv_vert_def, 0); - nir_ssa_def *start_vert_index = nir_imm_int(&b, start_vert); - nir_ssa_def *end_vert_index = nir_imm_int(&b, end_vert - 1); - nir_ssa_def *pv_vert_index = nir_bcsel(&b, last_pv_vert_def, end_vert_index, start_vert_index); - for (unsigned i = start_vert; i < end_vert || needs_closing; i += vert_step) { - int idx = i < end_vert ? i : start_vert; - /* Copy inputs to outputs. */ - for (unsigned j = 0, oj = 0, of = 0; j < num_inputs; ++j) { - if (in_vars[j]->data.location == VARYING_SLOT_EDGE) { - continue; - } - /* no need to use copy_var to save a lower pass */ - nir_ssa_def *index; - if (in_vars[j]->data.location == VARYING_SLOT_POS || !handle_flat) - index = nir_imm_int(&b, idx); - else { - unsigned mask = 1u << (of++); - index = nir_bcsel(&b, nir_ieq_imm(&b, nir_iand_imm(&b, flat_interp_mask_def, mask), 0), nir_imm_int(&b, idx), pv_vert_index); - } - nir_deref_instr *value = nir_build_deref_array(&b, nir_build_deref_var(&b, in_vars[j]), index); - copy_vars(&b, nir_build_deref_var(&b, out_vars[oj]), value); - ++oj; - } - nir_emit_vertex(&b, 0); - if (emulate_edgeflags) { - nir_ssa_def *edge_value = nir_channel(&b, nir_load_array_var_imm(&b, edge_var, idx), 0); - nir_if *edge_if = nir_push_if(&b, nir_fneu(&b, edge_value, nir_imm_float(&b, 1.0))); - nir_end_primitive(&b, 0); - nir_pop_if(&b, edge_if); - } - if (i >= end_vert) - break; - } - - nir_end_primitive(&b, 0); - nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir)); - nir_validate_shader(nir, "in nir_create_passthrough_gs"); - - return nir; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_passthrough_tcs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_passthrough_tcs.c deleted file mode 100644 index c425aeb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_passthrough_tcs.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright © 2022 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* - * A helper to create a passthrough TCS shader for drivers that cannot handle - * having a TES without TCS. - * - * Uses the load_tess_level_outer_default and load_tess_level_inner_default - * intrinsics to load the gl_TessLevelOuter and gl_TessLevelInner values, - * so driver will somehow need to implement those to load the values set - * by pipe_context::set_tess_state() or similar. - */ - -nir_shader * -nir_create_passthrough_tcs_impl(const nir_shader_compiler_options *options, - unsigned *locations, unsigned num_locations, - uint8_t patch_vertices) -{ - nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_TESS_CTRL, options, - "tcs passthrough"); - - unsigned num_inputs = 0; - unsigned num_outputs = 0; - - nir_variable *in_inner = - nir_variable_create(b.shader, nir_var_system_value, glsl_vec_type(2), - "tess inner default"); - in_inner->data.location = SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT; - - nir_variable *out_inner = - nir_variable_create(b.shader, nir_var_shader_out, glsl_vec_type(2), - "tess inner"); - out_inner->data.location = VARYING_SLOT_TESS_LEVEL_INNER; - out_inner->data.driver_location = num_outputs++; - - nir_ssa_def *inner = nir_load_var(&b, in_inner); - nir_store_var(&b, out_inner, inner, 0x3); - - nir_variable *in_outer = - nir_variable_create(b.shader, nir_var_system_value, glsl_vec4_type(), - "tess outer default"); - in_outer->data.location = SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT; - - nir_variable *out_outer = - nir_variable_create(b.shader, nir_var_shader_out, glsl_vec4_type(), - "tess outer"); - out_outer->data.location = VARYING_SLOT_TESS_LEVEL_OUTER; - out_outer->data.driver_location = num_outputs++; - - nir_ssa_def *outer = nir_load_var(&b, in_outer); - nir_store_var(&b, out_outer, outer, 0xf); - - nir_ssa_def *id = nir_load_invocation_id(&b); - for (unsigned i = 0; i < num_locations; i++) { - const struct glsl_type *type; - unsigned semantic = locations[i]; - if ((semantic <= VARYING_SLOT_VAR31 && semantic != VARYING_SLOT_EDGE) || - semantic >= VARYING_SLOT_VAR0_16BIT) - type = glsl_array_type(glsl_vec4_type(), 0, 0); - else - continue; - - char name[10]; - snprintf(name, sizeof(name), "in_%d", i); - nir_variable *in = nir_variable_create(b.shader, nir_var_shader_in, type, name); - in->data.location = semantic; - in->data.driver_location = num_inputs++; - - snprintf(name, sizeof(name), "out_%d", i); - nir_variable *out = nir_variable_create(b.shader, nir_var_shader_out, type, name); - out->data.location = semantic; - out->data.driver_location = num_outputs++; - - /* no need to use copy_var to save a lower pass */ - nir_ssa_def *value = nir_load_array_var(&b, in, id); - nir_store_array_var(&b, out, id, value, 0xf); - } - - b.shader->num_inputs = num_inputs; - b.shader->num_outputs = num_outputs; - - b.shader->info.tess.tcs_vertices_out = patch_vertices; - - nir_validate_shader(b.shader, "in nir_create_passthrough_tcs"); - - return b.shader; -} - - -nir_shader * -nir_create_passthrough_tcs(const nir_shader_compiler_options *options, - const nir_shader *vs, uint8_t patch_vertices) -{ - unsigned locations[MAX_VARYING]; - unsigned num_outputs = 0; - - nir_foreach_shader_out_variable (var, vs) { - assert(num_outputs < ARRAY_SIZE(locations)); - locations[num_outputs++] = var->data.location; - } - - return nir_create_passthrough_tcs_impl(options, locations, num_outputs, patch_vertices); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_phi_builder.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_phi_builder.c deleted file mode 100644 index 8ea5131..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_phi_builder.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_phi_builder.h" -#include "nir_vla.h" - -struct nir_phi_builder { - nir_shader *shader; - nir_function_impl *impl; - - /* Copied from the impl for easy access */ - unsigned num_blocks; - - /* Array of all blocks indexed by block->index. */ - nir_block **blocks; - - /* Hold on to the values so we can easily iterate over them. */ - struct exec_list values; - - /* Worklist for phi adding */ - unsigned iter_count; - unsigned *work; - nir_block **W; -}; - -#define NEEDS_PHI ((nir_ssa_def *)(intptr_t)-1) - -struct nir_phi_builder_value { - struct exec_node node; - - struct nir_phi_builder *builder; - - /* Needed so we can create phis and undefs */ - unsigned num_components; - unsigned bit_size; - - /* The list of phi nodes associated with this value. Phi nodes are not - * added directly. Instead, they are created, the instr->block pointer - * set, and then added to this list. Later, in phi_builder_finish, we - * set up their sources and add them to the top of their respective - * blocks. - */ - struct exec_list phis; - - /* Array of SSA defs, indexed by block. For each block, this array has has - * one of three types of values: - * - * - NULL. Indicates that there is no known definition in this block. If - * you need to find one, look at the block's immediate dominator. - * - * - NEEDS_PHI. Indicates that the block may need a phi node but none has - * been created yet. If a def is requested for a block, a phi will need - * to be created. - * - * - A regular SSA def. This will be either the result of a phi node or - * one of the defs provided by nir_phi_builder_value_set_blocK_def(). - */ - struct hash_table ht; -}; - -/** - * Convert a block index into a value that can be used as a key for a hash table - * - * The hash table functions want a pointer that is not \c NULL. - * _mesa_hash_pointer drops the two least significant bits, but that's where - * most of our data likely is. Shift by 2 and add 1 to make everything happy. - */ -#define INDEX_TO_KEY(x) ((void *)(uintptr_t) ((x << 2) + 1)) - -struct nir_phi_builder * -nir_phi_builder_create(nir_function_impl *impl) -{ - struct nir_phi_builder *pb = rzalloc(NULL, struct nir_phi_builder); - - pb->shader = impl->function->shader; - pb->impl = impl; - - assert(impl->valid_metadata & (nir_metadata_block_index | - nir_metadata_dominance)); - - pb->num_blocks = impl->num_blocks; - pb->blocks = ralloc_array(pb, nir_block *, pb->num_blocks); - nir_foreach_block(block, impl) { - pb->blocks[block->index] = block; - } - - exec_list_make_empty(&pb->values); - - pb->iter_count = 0; - pb->work = rzalloc_array(pb, unsigned, pb->num_blocks); - pb->W = ralloc_array(pb, nir_block *, pb->num_blocks); - - return pb; -} - -struct nir_phi_builder_value * -nir_phi_builder_add_value(struct nir_phi_builder *pb, unsigned num_components, - unsigned bit_size, const BITSET_WORD *defs) -{ - struct nir_phi_builder_value *val; - unsigned i, w_start = 0, w_end = 0; - - val = rzalloc_size(pb, sizeof(*val)); - val->builder = pb; - val->num_components = num_components; - val->bit_size = bit_size; - exec_list_make_empty(&val->phis); - exec_list_push_tail(&pb->values, &val->node); - - _mesa_hash_table_init(&val->ht, pb, _mesa_hash_pointer, - _mesa_key_pointer_equal); - - pb->iter_count++; - - BITSET_FOREACH_SET(i, defs, pb->num_blocks) { - if (pb->work[i] < pb->iter_count) - pb->W[w_end++] = pb->blocks[i]; - pb->work[i] = pb->iter_count; - } - - while (w_start != w_end) { - nir_block *cur = pb->W[w_start++]; - set_foreach(cur->dom_frontier, dom_entry) { - nir_block *next = (nir_block *) dom_entry->key; - - /* If there's more than one return statement, then the end block - * can be a join point for some definitions. However, there are - * no instructions in the end block, so nothing would use those - * phi nodes. Of course, we couldn't place those phi nodes - * anyways due to the restriction of having no instructions in the - * end block... - */ - if (next == pb->impl->end_block) - continue; - - if (_mesa_hash_table_search(&val->ht, INDEX_TO_KEY(next->index)) == NULL) { - /* Instead of creating a phi node immediately, we simply set the - * value to the magic value NEEDS_PHI. Later, we create phi nodes - * on demand in nir_phi_builder_value_get_block_def(). - */ - nir_phi_builder_value_set_block_def(val, next, NEEDS_PHI); - - if (pb->work[next->index] < pb->iter_count) { - pb->work[next->index] = pb->iter_count; - pb->W[w_end++] = next; - } - } - } - } - - return val; -} - -void -nir_phi_builder_value_set_block_def(struct nir_phi_builder_value *val, - nir_block *block, nir_ssa_def *def) -{ - _mesa_hash_table_insert(&val->ht, INDEX_TO_KEY(block->index), def); -} - -nir_ssa_def * -nir_phi_builder_value_get_block_def(struct nir_phi_builder_value *val, - nir_block *block) -{ - /* Crawl up the dominance tree and find the closest dominator for which we - * have a valid ssa_def, if any. - */ - nir_block *dom = block; - struct hash_entry *he = NULL; - - while (dom != NULL) { - he = _mesa_hash_table_search(&val->ht, INDEX_TO_KEY(dom->index)); - if (he != NULL) - break; - - dom = dom->imm_dom; - } - - /* Exactly one of (he != NULL) and (dom == NULL) must be true. */ - assert((he != NULL) != (dom == NULL)); - - nir_ssa_def *def; - if (dom == NULL) { - /* No dominator means either that we crawled to the top without ever - * finding a definition or that this block is unreachable. In either - * case, the value is undefined so we need an SSA undef. - */ - nir_ssa_undef_instr *undef = - nir_ssa_undef_instr_create(val->builder->shader, - val->num_components, - val->bit_size); - nir_instr_insert(nir_before_cf_list(&val->builder->impl->body), - &undef->instr); - def = &undef->def; - } else if (he->data == NEEDS_PHI) { - /* The magic value NEEDS_PHI indicates that the block needs a phi node - * but none has been created. We need to create one now so we can - * return it to the caller. - * - * Because a phi node may use SSA defs that it does not dominate (this - * happens in loops), we do not yet have enough information to fully - * fill out the phi node. Instead, the phi nodes we create here will be - * empty (have no sources) and won't actually be placed in the block's - * instruction list yet. Later, in nir_phi_builder_finish(), we walk - * over all of the phi instructions, fill out the sources lists, and - * place them at the top of their respective block's instruction list. - * - * Creating phi nodes on-demand allows us to avoid creating dead phi - * nodes that will just get deleted later. While this probably isn't a - * big win for a full into-SSA pass, other users may use the phi builder - * to make small SSA form repairs where most of the phi nodes will never - * be used. - */ - nir_phi_instr *phi = nir_phi_instr_create(val->builder->shader); - nir_ssa_dest_init(&phi->instr, &phi->dest, val->num_components, - val->bit_size, NULL); - phi->instr.block = dom; - exec_list_push_tail(&val->phis, &phi->instr.node); - def = &phi->dest.ssa; - he->data = def; - } else { - /* In this case, we have an actual SSA def. It's either the result of a - * phi node created by the case above or one passed to us through - * nir_phi_builder_value_set_block_def(). - */ - def = (struct nir_ssa_def *) he->data; - } - - /* Walk the chain and stash the def in all of the applicable blocks. We do - * this for two reasons: - * - * 1) To speed up lookup next time even if the next time is called from a - * block that is not dominated by this one. - * 2) To avoid unneeded recreation of phi nodes and undefs. - */ - for (dom = block; dom != NULL; dom = dom->imm_dom) { - if (_mesa_hash_table_search(&val->ht, INDEX_TO_KEY(dom->index)) != NULL) - break; - - nir_phi_builder_value_set_block_def(val, dom, def); - } - - return def; -} - -void -nir_phi_builder_finish(struct nir_phi_builder *pb) -{ - foreach_list_typed(struct nir_phi_builder_value, val, node, &pb->values) { - /* We treat the linked list of phi nodes like a worklist. The list is - * pre-populated by calls to nir_phi_builder_value_get_block_def() that - * create phi nodes. As we fill in the sources of phi nodes, more may - * be created and are added to the end of the list. - * - * Because we are adding and removing phi nodes from the list as we go, - * we can't iterate over it normally. Instead, we just iterate until - * the list is empty. - */ - while (!exec_list_is_empty(&val->phis)) { - struct exec_node *head = exec_list_get_head(&val->phis); - nir_phi_instr *phi = exec_node_data(nir_phi_instr, head, instr.node); - assert(phi->instr.type == nir_instr_type_phi); - - exec_node_remove(&phi->instr.node); - - /* XXX: Constructing the array this many times seems expensive. */ - nir_block **preds = nir_block_get_predecessors_sorted(phi->instr.block, pb); - - for (unsigned i = 0; i < phi->instr.block->predecessors->entries; i++) { - nir_phi_instr_add_src(phi, preds[i], - nir_src_for_ssa(nir_phi_builder_value_get_block_def(val, preds[i]))); - } - - ralloc_free(preds); - - nir_instr_insert(nir_before_block(phi->instr.block), &phi->instr); - } - } - - ralloc_free(pb); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_phi_builder.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_phi_builder.h deleted file mode 100644 index 649d00f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_phi_builder.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_PHI_BUILDER_H -#define NIR_PHI_BUILDER_H - -#include "nir.h" - -/** A helper for placing phi nodes in a NIR shader - * - * Basic usage goes something like this: - * - * each variable, var, has: - * a bitset var.defs of blocks where the variable is defined - * a struct nir_phi_builder_value *pb_val - * - * // initialize bitsets - * foreach block: - * foreach def of variable var: - * var.defs[def.block] = true; - * - * // initialize phi builder - * pb = nir_phi_builder_create() - * foreach var: - * var.pb_val = nir_phi_builder_add_value(pb, var.defs) - * - * // Visit each block. This needs to visit dominators first; - * // nir_foreach_block() will be ok. - * - * foreach block: - * foreach instruction: - * foreach use of variable var: - * replace use with nir_phi_builder_get_block_def(var.pb_val) - * foreach def of variable var: - * create ssa def, register with - * nir_phi_builder_set_block_def(var.pb_val) - * - * nir_phi_builder_finish(pb) - */ -struct nir_phi_builder; - -struct nir_phi_builder_value; - -/* Create a new phi builder. - * - * While this is fairly cheap, it does allocate some memory and walk the list - * of blocks so it's recommended that you only call it once and use it to - * build phis for several values. - */ -struct nir_phi_builder *nir_phi_builder_create(nir_function_impl *impl); - -/* Register a value with the builder. - * - * The 'defs' parameter specifies a bitset of blocks in which the given value - * is defined. This is used to determine where to place the phi nodes. - */ -struct nir_phi_builder_value * -nir_phi_builder_add_value(struct nir_phi_builder *pb, unsigned num_components, - unsigned bit_size, const BITSET_WORD *defs); - -/* Register a definition for the given value and block. - * - * It is safe to call this function as many times as you wish for any given - * block/value pair. However, it always replaces whatever was there - * previously even if that definition is from a phi node. The phi builder - * always uses the latest information it has, so you must be careful about the - * order in which you register definitions. The final value at the end of the - * block must be the last value registered. - */ -void -nir_phi_builder_value_set_block_def(struct nir_phi_builder_value *val, - nir_block *block, nir_ssa_def *def); - -/* Get the definition for the given value in the given block. - * - * This definition will always be the latest definition known for the given - * block. If no definition is immediately available, it will crawl up the - * dominance tree and insert phi nodes as needed until it finds one. In the - * case that no suitable definition is found, it will return the result of a - * nir_ssa_undef_instr with the correct number of components. - * - * Because this function only uses the latest available information for any - * given block, you must have already finished registering definitions for any - * blocks that dominate the current block in order to get the correct result. - */ -nir_ssa_def * -nir_phi_builder_value_get_block_def(struct nir_phi_builder_value *val, - nir_block *block); - -/* Finish building phi nodes and free the builder. - * - * This function does far more than just free memory. Prior to calling - * nir_phi_builder_finish, no phi nodes have actually been inserted in the - * program. This function is what finishes setting up phi node sources and - * adds the phi nodes to the program. - */ -void nir_phi_builder_finish(struct nir_phi_builder *pb); - -#endif /* NIR_PHI_BUILDER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_print.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_print.c deleted file mode 100644 index d2ab605..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_print.c +++ /dev/null @@ -1,2146 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "../shader_enums.h" -#include "../../util/half_float.h" -#include "../../util/mesa-sha1.h" -#include "vulkan/vulkan_core.h" -#include -#include -#include /* for PRIx64 macro */ - -static void -print_tabs(unsigned num_tabs, FILE *fp) -{ - for (unsigned i = 0; i < num_tabs; i++) - fprintf(fp, "\t"); -} - -typedef struct { - FILE *fp; - nir_shader *shader; - /** map from nir_variable -> printable name */ - struct hash_table *ht; - - /** set of names used so far for nir_variables */ - struct set *syms; - - /* an index used to make new non-conflicting names */ - unsigned index; - - /** - * Optional table of annotations mapping nir object - * (such as instr or var) to message to print. - */ - struct hash_table *annotations; -} print_state; - -static void -print_annotation(print_state *state, void *obj) -{ - FILE *fp = state->fp; - - if (!state->annotations) - return; - - struct hash_entry *entry = _mesa_hash_table_search(state->annotations, obj); - if (!entry) - return; - - const char *note = entry->data; - _mesa_hash_table_remove(state->annotations, entry); - - fprintf(fp, "%s\n\n", note); -} - -static void -print_register(nir_register *reg, print_state *state) -{ - FILE *fp = state->fp; - fprintf(fp, "r%u", reg->index); -} - -static const char *sizes[] = { "error", "vec1", "vec2", "vec3", "vec4", - "vec5", "error", "error", "vec8", - "error", "error", "error", "error", - "error", "error", "error", "vec16"}; - -static const char * -divergence_status(print_state *state, bool divergent) -{ - if (state->shader->info.divergence_analysis_run) - return divergent ? "div " : "con "; - - return ""; -} - -static void -print_register_decl(nir_register *reg, print_state *state) -{ - FILE *fp = state->fp; - fprintf(fp, "decl_reg %s %u %s", sizes[reg->num_components], - reg->bit_size, divergence_status(state, reg->divergent)); - - print_register(reg, state); - if (reg->num_array_elems != 0) - fprintf(fp, "[%u]", reg->num_array_elems); - fprintf(fp, "\n"); -} - -static void -print_ssa_def(nir_ssa_def *def, print_state *state) -{ - FILE *fp = state->fp; - - fprintf(fp, "%s %2u %sssa_%u", sizes[def->num_components], def->bit_size, - divergence_status(state, def->divergent), def->index); -} - -static void -print_const_from_load(nir_load_const_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - - /* - * we don't really know the type of the constant (if it will be used as a - * float or an int), so just print the raw constant in hex for fidelity - * and then print in float again for readability. - */ - - fprintf(fp, "("); - - for (unsigned i = 0; i < instr->def.num_components; i++) { - if (i != 0) - fprintf(fp, ", "); - - switch (instr->def.bit_size) { - case 64: - fprintf(fp, "0x%016" PRIx64, instr->value[i].u64); - break; - case 32: - fprintf(fp, "0x%08x", instr->value[i].u32); - break; - case 16: - fprintf(fp, "0x%04x", instr->value[i].u16); - break; - case 8: - fprintf(fp, "0x%02x", instr->value[i].u8); - break; - case 1: - fprintf(fp, "%s", instr->value[i].b ? "true" : "false"); - break; - } - } - - if (instr->def.bit_size > 8) { - if (instr->def.num_components > 1) - fprintf(fp, ") = ("); - else - fprintf(fp, " = "); - - for (unsigned i = 0; i < instr->def.num_components; i++) { - if (i != 0) - fprintf(fp, ", "); - - switch (instr->def.bit_size) { - case 64: - fprintf(fp, "%f", instr->value[i].f64); - break; - case 32: - fprintf(fp, "%f", instr->value[i].f32); - break; - case 16: - fprintf(fp, "%f", _mesa_half_to_float(instr->value[i].u16)); - break; - default: - unreachable("unhandled bit size"); - } - } - } - - fprintf(fp, ")"); -} - -static void -print_load_const_instr(nir_load_const_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - - print_ssa_def(&instr->def, state); - - fprintf(fp, " = load_const "); - - print_const_from_load(instr, state); -} - -static void -print_ssa_use(nir_ssa_def *def, print_state *state) -{ - FILE *fp = state->fp; - fprintf(fp, "ssa_%u", def->index); - nir_instr *instr = def->parent_instr; - if (instr->type == nir_instr_type_load_const && NIR_DEBUG(PRINT_CONSTS)) { - fprintf(fp, " /*"); - print_const_from_load(nir_instr_as_load_const(instr), state); - fprintf(fp, "*/"); - } -} - -static void print_src(const nir_src *src, print_state *state); - -static void -print_reg_src(const nir_reg_src *src, print_state *state) -{ - FILE *fp = state->fp; - print_register(src->reg, state); - if (src->reg->num_array_elems != 0) { - fprintf(fp, "[%u", src->base_offset); - if (src->indirect != NULL) { - fprintf(fp, " + "); - print_src(src->indirect, state); - } - fprintf(fp, "]"); - } -} - -static void -print_reg_dest(nir_reg_dest *dest, print_state *state) -{ - FILE *fp = state->fp; - fprintf(fp, "%s", divergence_status(state, dest->reg->divergent)); - print_register(dest->reg, state); - if (dest->reg->num_array_elems != 0) { - fprintf(fp, "[%u", dest->base_offset); - if (dest->indirect != NULL) { - fprintf(fp, " + "); - print_src(dest->indirect, state); - } - fprintf(fp, "]"); - } -} - -static void -print_src(const nir_src *src, print_state *state) -{ - if (src->is_ssa) - print_ssa_use(src->ssa, state); - else - print_reg_src(&src->reg, state); -} - -static void -print_dest(nir_dest *dest, print_state *state) -{ - if (dest->is_ssa) - print_ssa_def(&dest->ssa, state); - else - print_reg_dest(&dest->reg, state); -} - -static const char * -comp_mask_string(unsigned num_components) -{ - return (num_components > 4) ? "abcdefghijklmnop" : "xyzw"; -} - -static void -print_alu_src(nir_alu_instr *instr, unsigned src, print_state *state) -{ - FILE *fp = state->fp; - - if (instr->src[src].negate) - fprintf(fp, "-"); - if (instr->src[src].abs) - fprintf(fp, "abs("); - - print_src(&instr->src[src].src, state); - - bool print_swizzle = false; - nir_component_mask_t used_channels = 0; - - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - if (!nir_alu_instr_channel_used(instr, src, i)) - continue; - - used_channels++; - - if (instr->src[src].swizzle[i] != i) { - print_swizzle = true; - break; - } - } - - unsigned live_channels = nir_src_num_components(instr->src[src].src); - - if (print_swizzle || used_channels != live_channels) { - fprintf(fp, "."); - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - if (!nir_alu_instr_channel_used(instr, src, i)) - continue; - - fprintf(fp, "%c", comp_mask_string(live_channels)[instr->src[src].swizzle[i]]); - } - } - - if (instr->src[src].abs) - fprintf(fp, ")"); -} - -static void -print_alu_dest(nir_alu_dest *dest, print_state *state) -{ - FILE *fp = state->fp; - /* we're going to print the saturate modifier later, after the opcode */ - - print_dest(&dest->dest, state); - - if (!dest->dest.is_ssa && - dest->write_mask != (1 << dest->dest.reg.reg->num_components) - 1) { - unsigned live_channels = dest->dest.reg.reg->num_components; - fprintf(fp, "."); - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) - if ((dest->write_mask >> i) & 1) - fprintf(fp, "%c", comp_mask_string(live_channels)[i]); - } -} - -static void -print_alu_instr(nir_alu_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - - print_alu_dest(&instr->dest, state); - - fprintf(fp, " = %s", nir_op_infos[instr->op].name); - if (instr->exact) - fprintf(fp, "!"); - if (instr->dest.saturate) - fprintf(fp, ".sat"); - if (instr->no_signed_wrap) - fprintf(fp, ".nsw"); - if (instr->no_unsigned_wrap) - fprintf(fp, ".nuw"); - fprintf(fp, " "); - - for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++) { - if (i != 0) - fprintf(fp, ", "); - - print_alu_src(instr, i, state); - } -} - -static const char * -get_var_name(nir_variable *var, print_state *state) -{ - if (state->ht == NULL) - return var->name ? var->name : "unnamed"; - - assert(state->syms); - - struct hash_entry *entry = _mesa_hash_table_search(state->ht, var); - if (entry) - return entry->data; - - char *name; - if (var->name == NULL) { - name = ralloc_asprintf(state->syms, "@%u", state->index++); - } else { - struct set_entry *set_entry = _mesa_set_search(state->syms, var->name); - if (set_entry != NULL) { - /* we have a collision with another name, append an @ + a unique - * index */ - name = ralloc_asprintf(state->syms, "%s@%u", var->name, - state->index++); - } else { - /* Mark this one as seen */ - _mesa_set_add(state->syms, var->name); - name = var->name; - } - } - - _mesa_hash_table_insert(state->ht, var, name); - - return name; -} - -static const char * -get_constant_sampler_addressing_mode(enum cl_sampler_addressing_mode mode) -{ - switch (mode) { - case SAMPLER_ADDRESSING_MODE_NONE: return "none"; - case SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE: return "clamp_to_edge"; - case SAMPLER_ADDRESSING_MODE_CLAMP: return "clamp"; - case SAMPLER_ADDRESSING_MODE_REPEAT: return "repeat"; - case SAMPLER_ADDRESSING_MODE_REPEAT_MIRRORED: return "repeat_mirrored"; - default: unreachable("Invalid addressing mode"); - } -} - -static const char * -get_constant_sampler_filter_mode(enum cl_sampler_filter_mode mode) -{ - switch (mode) { - case SAMPLER_FILTER_MODE_NEAREST: return "nearest"; - case SAMPLER_FILTER_MODE_LINEAR: return "linear"; - default: unreachable("Invalid filter mode"); - } -} - -static void -print_constant(nir_constant *c, const struct glsl_type *type, print_state *state) -{ - FILE *fp = state->fp; - const unsigned rows = glsl_get_vector_elements(type); - const unsigned cols = glsl_get_matrix_columns(type); - unsigned i; - - switch (glsl_get_base_type(type)) { - case GLSL_TYPE_BOOL: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (i = 0; i < rows; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "%s", c->values[i].b ? "true" : "false"); - } - break; - - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (i = 0; i < rows; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "0x%02x", c->values[i].u8); - } - break; - - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (i = 0; i < rows; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "0x%04x", c->values[i].u16); - } - break; - - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (i = 0; i < rows; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "0x%08x", c->values[i].u32); - } - break; - - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_DOUBLE: - if (cols > 1) { - for (i = 0; i < cols; i++) { - if (i > 0) fprintf(fp, ", "); - print_constant(c->elements[i], glsl_get_column_type(type), state); - } - } else { - switch (glsl_get_base_type(type)) { - case GLSL_TYPE_FLOAT16: - for (i = 0; i < rows; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "%f", _mesa_half_to_float(c->values[i].u16)); - } - break; - - case GLSL_TYPE_FLOAT: - for (i = 0; i < rows; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "%f", c->values[i].f32); - } - break; - - case GLSL_TYPE_DOUBLE: - for (i = 0; i < rows; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "%f", c->values[i].f64); - } - break; - - default: - unreachable("Cannot get here from the first level switch"); - } - } - break; - - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - /* Only float base types can be matrices. */ - assert(cols == 1); - - for (i = 0; i < cols; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "0x%08" PRIx64, c->values[i].u64); - } - break; - - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_INTERFACE: - for (i = 0; i < c->num_elements; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "{ "); - print_constant(c->elements[i], glsl_get_struct_field(type, i), state); - fprintf(fp, " }"); - } - break; - - case GLSL_TYPE_ARRAY: - for (i = 0; i < c->num_elements; i++) { - if (i > 0) fprintf(fp, ", "); - fprintf(fp, "{ "); - print_constant(c->elements[i], glsl_get_array_element(type), state); - fprintf(fp, " }"); - } - break; - - default: - unreachable("not reached"); - } -} - -static const char * -get_variable_mode_str(nir_variable_mode mode, bool want_local_global_mode) -{ - switch (mode) { - case nir_var_shader_in: - return "shader_in"; - case nir_var_shader_out: - return "shader_out"; - case nir_var_uniform: - return "uniform"; - case nir_var_mem_ubo: - return "ubo"; - case nir_var_system_value: - return "system"; - case nir_var_mem_ssbo: - return "ssbo"; - case nir_var_mem_shared: - return "shared"; - case nir_var_mem_global: - return "global"; - case nir_var_mem_push_const: - return "push_const"; - case nir_var_mem_constant: - return "constant"; - case nir_var_image: - return "image"; - case nir_var_shader_temp: - return want_local_global_mode ? "shader_temp" : ""; - case nir_var_function_temp: - return want_local_global_mode ? "function_temp" : ""; - case nir_var_shader_call_data: - return "shader_call_data"; - case nir_var_ray_hit_attrib: - return "ray_hit_attrib"; - case nir_var_mem_task_payload: - return "task_payload"; - default: - if (mode && (mode & nir_var_mem_generic) == mode) - return "generic"; - return ""; - } -} - -static const char * -get_location_str(unsigned location, gl_shader_stage stage, - nir_variable_mode mode, char *buf) -{ - switch (stage) { - case MESA_SHADER_VERTEX: - if (mode == nir_var_shader_in) - return gl_vert_attrib_name(location); - else if (mode == nir_var_shader_out) - return gl_varying_slot_name_for_stage(location, stage); - - break; - case MESA_SHADER_TASK: - case MESA_SHADER_MESH: - case MESA_SHADER_GEOMETRY: - if (mode == nir_var_shader_in || mode == nir_var_shader_out) - return gl_varying_slot_name_for_stage(location, stage); - - break; - case MESA_SHADER_FRAGMENT: - if (mode == nir_var_shader_in) - return gl_varying_slot_name_for_stage(location, stage); - else if (mode == nir_var_shader_out) - return gl_frag_result_name(location); - - break; - case MESA_SHADER_TESS_CTRL: - case MESA_SHADER_TESS_EVAL: - case MESA_SHADER_COMPUTE: - case MESA_SHADER_KERNEL: - default: - /* TODO */ - break; - } - - if (location == ~0) { - return "~0"; - } else { - snprintf(buf, 4, "%u", location); - return buf; - } -} - -static void -print_var_decl(nir_variable *var, print_state *state) -{ - FILE *fp = state->fp; - - fprintf(fp, "decl_var "); - - const char *const bindless = (var->data.bindless) ? "bindless " : ""; - const char *const cent = (var->data.centroid) ? "centroid " : ""; - const char *const samp = (var->data.sample) ? "sample " : ""; - const char *const patch = (var->data.patch) ? "patch " : ""; - const char *const inv = (var->data.invariant) ? "invariant " : ""; - const char *const per_view = (var->data.per_view) ? "per_view " : ""; - const char *const per_primitive = (var->data.per_primitive) ? "per_primitive " : ""; - const char *const ray_query = (var->data.ray_query) ? "ray_query " : ""; - fprintf(fp, "%s%s%s%s%s%s%s%s%s %s ", - bindless, cent, samp, patch, inv, per_view, per_primitive, ray_query, - get_variable_mode_str(var->data.mode, false), - glsl_interp_mode_name(var->data.interpolation)); - - enum gl_access_qualifier access = var->data.access; - const char *const coher = (access & ACCESS_COHERENT) ? "coherent " : ""; - const char *const volat = (access & ACCESS_VOLATILE) ? "volatile " : ""; - const char *const restr = (access & ACCESS_RESTRICT) ? "restrict " : ""; - const char *const ronly = (access & ACCESS_NON_WRITEABLE) ? "readonly " : ""; - const char *const wonly = (access & ACCESS_NON_READABLE) ? "writeonly " : ""; - const char *const reorder = (access & ACCESS_CAN_REORDER) ? "reorderable " : ""; - const char *const stream_cache_policy = (access & ACCESS_STREAM_CACHE_POLICY) ? - "stream-cache-policy " : ""; - const char *const include_helpers = (access & ACCESS_INCLUDE_HELPERS) ? - "include-helpers " : ""; - fprintf(fp, "%s%s%s%s%s%s%s%s", coher, volat, restr, ronly, wonly, reorder, - stream_cache_policy, include_helpers); - - if (glsl_get_base_type(glsl_without_array(var->type)) == GLSL_TYPE_IMAGE) { - fprintf(fp, "%s ", util_format_short_name(var->data.image.format)); - } - - if (var->data.precision) { - const char *precisions[] = { - "", - "highp", - "mediump", - "lowp", - }; - fprintf(fp, "%s ", precisions[var->data.precision]); - } - - fprintf(fp, "%s %s", glsl_get_type_name(var->type), - get_var_name(var, state)); - - if (var->data.mode & (nir_var_shader_in | - nir_var_shader_out | - nir_var_uniform | - nir_var_mem_ubo | - nir_var_mem_ssbo | - nir_var_image)) { - char buf[4]; - const char *loc = get_location_str(var->data.location, - state->shader->info.stage, - var->data.mode, buf); - - /* For shader I/O vars that have been split to components or packed, - * print the fractional location within the input/output. - */ - unsigned int num_components = - glsl_get_components(glsl_without_array(var->type)); - const char *components = NULL; - char components_local[18] = {'.' /* the rest is 0-filled */}; - switch (var->data.mode) { - case nir_var_shader_in: - case nir_var_shader_out: - if (num_components < 16 && num_components != 0) { - const char *xyzw = comp_mask_string(num_components); - for (int i = 0; i < num_components; i++) - components_local[i + 1] = xyzw[i + var->data.location_frac]; - - components = components_local; - } - break; - default: - break; - } - - fprintf(fp, " (%s%s, %u, %u)%s", loc, - components ? components : "", - var->data.driver_location, var->data.binding, - var->data.compact ? " compact" : ""); - } - - if (var->constant_initializer) { - fprintf(fp, " = { "); - print_constant(var->constant_initializer, var->type, state); - fprintf(fp, " }"); - } - if (glsl_type_is_sampler(var->type) && var->data.sampler.is_inline_sampler) { - fprintf(fp, " = { %s, %s, %s }", - get_constant_sampler_addressing_mode(var->data.sampler.addressing_mode), - var->data.sampler.normalized_coordinates ? "true" : "false", - get_constant_sampler_filter_mode(var->data.sampler.filter_mode)); - } - if (var->pointer_initializer) - fprintf(fp, " = &%s", get_var_name(var->pointer_initializer, state)); - - fprintf(fp, "\n"); - print_annotation(state, var); -} - -static void -print_deref_link(const nir_deref_instr *instr, bool whole_chain, print_state *state) -{ - FILE *fp = state->fp; - - if (instr->deref_type == nir_deref_type_var) { - fprintf(fp, "%s", get_var_name(instr->var, state)); - return; - } else if (instr->deref_type == nir_deref_type_cast) { - fprintf(fp, "(%s *)", glsl_get_type_name(instr->type)); - print_src(&instr->parent, state); - return; - } - - assert(instr->parent.is_ssa); - nir_deref_instr *parent = - nir_instr_as_deref(instr->parent.ssa->parent_instr); - - /* Is the parent we're going to print a bare cast? */ - const bool is_parent_cast = - whole_chain && parent->deref_type == nir_deref_type_cast; - - /* If we're not printing the whole chain, the parent we print will be a SSA - * value that represents a pointer. The only deref type that naturally - * gives a pointer is a cast. - */ - const bool is_parent_pointer = - !whole_chain || parent->deref_type == nir_deref_type_cast; - - /* Struct derefs have a nice syntax that works on pointers, arrays derefs - * do not. - */ - const bool need_deref = - is_parent_pointer && instr->deref_type != nir_deref_type_struct; - - /* Cast need extra parens and so * dereferences */ - if (is_parent_cast || need_deref) - fprintf(fp, "("); - - if (need_deref) - fprintf(fp, "*"); - - if (whole_chain) { - print_deref_link(parent, whole_chain, state); - } else { - print_src(&instr->parent, state); - } - - if (is_parent_cast || need_deref) - fprintf(fp, ")"); - - switch (instr->deref_type) { - case nir_deref_type_struct: - fprintf(fp, "%s%s", is_parent_pointer ? "->" : ".", - glsl_get_struct_elem_name(parent->type, instr->strct.index)); - break; - - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: { - if (nir_src_is_const(instr->arr.index)) { - fprintf(fp, "[%"PRId64"]", nir_src_as_int(instr->arr.index)); - } else { - fprintf(fp, "["); - print_src(&instr->arr.index, state); - fprintf(fp, "]"); - } - break; - } - - case nir_deref_type_array_wildcard: - fprintf(fp, "[*]"); - break; - - default: - unreachable("Invalid deref instruction type"); - } -} - -static void -print_deref_instr(nir_deref_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - - print_dest(&instr->dest, state); - - switch (instr->deref_type) { - case nir_deref_type_var: - fprintf(fp, " = deref_var "); - break; - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - fprintf(fp, " = deref_array "); - break; - case nir_deref_type_struct: - fprintf(fp, " = deref_struct "); - break; - case nir_deref_type_cast: - fprintf(fp, " = deref_cast "); - break; - case nir_deref_type_ptr_as_array: - fprintf(fp, " = deref_ptr_as_array "); - break; - default: - unreachable("Invalid deref instruction type"); - } - - /* Only casts naturally return a pointer type */ - if (instr->deref_type != nir_deref_type_cast) - fprintf(fp, "&"); - - print_deref_link(instr, false, state); - - fprintf(fp, " ("); - unsigned modes = instr->modes; - while (modes) { - int m = u_bit_scan(&modes); - fprintf(fp, "%s%s", get_variable_mode_str(1 << m, true), - modes ? "|" : ""); - } - fprintf(fp, " %s) ", glsl_get_type_name(instr->type)); - - if (instr->deref_type != nir_deref_type_var && - instr->deref_type != nir_deref_type_cast) { - /* Print the entire chain as a comment */ - fprintf(fp, "/* &"); - print_deref_link(instr, true, state); - fprintf(fp, " */"); - } - - if (instr->deref_type == nir_deref_type_cast) { - fprintf(fp, " /* ptr_stride=%u, align_mul=%u, align_offset=%u */", - instr->cast.ptr_stride, - instr->cast.align_mul, instr->cast.align_offset); - } -} - -static const char * -vulkan_descriptor_type_name(VkDescriptorType type) -{ - switch (type) { - case VK_DESCRIPTOR_TYPE_SAMPLER: return "sampler"; - case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: return "texture+sampler"; - case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: return "texture"; - case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: return "image"; - case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: return "texture-buffer"; - case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: return "image-buffer"; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: return "UBO"; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: return "SSBO"; - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: return "UBO"; - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: return "SSBO"; - case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: return "input-att"; - case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: return "inline-UBO"; - case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: return "accel-struct"; - default: return "unknown"; - } -} - -static void -print_alu_type(nir_alu_type type, print_state *state) -{ - FILE *fp = state->fp; - unsigned size = nir_alu_type_get_type_size(type); - const char *name; - - switch (nir_alu_type_get_base_type(type)) { - case nir_type_int: name = "int"; break; - case nir_type_uint: name = "uint"; break; - case nir_type_bool: name = "bool"; break; - case nir_type_float: name = "float"; break; - default: name = "invalid"; - } - if (size) - fprintf(fp, "%s%u", name, size); - else - fprintf(fp, "%s", name); -} - -static void -print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - unsigned num_srcs = info->num_srcs; - FILE *fp = state->fp; - - if (info->has_dest) { - print_dest(&instr->dest, state); - fprintf(fp, " = "); - } - - fprintf(fp, "intrinsic %s (", info->name); - - for (unsigned i = 0; i < num_srcs; i++) { - if (i != 0) - fprintf(fp, ", "); - - print_src(&instr->src[i], state); - } - - fprintf(fp, ") ("); - - for (unsigned i = 0; i < info->num_indices; i++) { - unsigned idx = info->indices[i]; - bool print_raw = true; - if (i != 0) - fprintf(fp, ", "); - switch (idx) { - case NIR_INTRINSIC_WRITE_MASK: { - /* special case wrmask to show it as a writemask.. */ - unsigned wrmask = nir_intrinsic_write_mask(instr); - fprintf(fp, "wrmask="); - for (unsigned i = 0; i < instr->num_components; i++) - if ((wrmask >> i) & 1) - fprintf(fp, "%c", comp_mask_string(instr->num_components)[i]); - break; - } - - case NIR_INTRINSIC_REDUCTION_OP: { - nir_op reduction_op = nir_intrinsic_reduction_op(instr); - fprintf(fp, "reduction_op=%s", nir_op_infos[reduction_op].name); - break; - } - - case NIR_INTRINSIC_IMAGE_DIM: { - static const char *dim_name[] = { - [GLSL_SAMPLER_DIM_1D] = "1D", - [GLSL_SAMPLER_DIM_2D] = "2D", - [GLSL_SAMPLER_DIM_3D] = "3D", - [GLSL_SAMPLER_DIM_CUBE] = "Cube", - [GLSL_SAMPLER_DIM_RECT] = "Rect", - [GLSL_SAMPLER_DIM_BUF] = "Buf", - [GLSL_SAMPLER_DIM_MS] = "2D-MSAA", - [GLSL_SAMPLER_DIM_SUBPASS] = "Subpass", - [GLSL_SAMPLER_DIM_SUBPASS_MS] = "Subpass-MSAA", - }; - enum glsl_sampler_dim dim = nir_intrinsic_image_dim(instr); - assert(dim < ARRAY_SIZE(dim_name) && dim_name[dim]); - fprintf(fp, "image_dim=%s", dim_name[dim]); - break; - } - - case NIR_INTRINSIC_IMAGE_ARRAY: { - bool array = nir_intrinsic_image_array(instr); - fprintf(fp, "image_array=%s", array ? "true" : "false"); - break; - } - - case NIR_INTRINSIC_FORMAT: { - enum pipe_format format = nir_intrinsic_format(instr); - fprintf(fp, "format=%s", util_format_short_name(format)); - break; - } - - case NIR_INTRINSIC_DESC_TYPE: { - VkDescriptorType desc_type = nir_intrinsic_desc_type(instr); - fprintf(fp, "desc_type=%s", vulkan_descriptor_type_name(desc_type)); - break; - } - - case NIR_INTRINSIC_SRC_TYPE: { - fprintf(fp, "src_type="); - print_alu_type(nir_intrinsic_src_type(instr), state); - break; - } - - case NIR_INTRINSIC_DEST_TYPE: { - fprintf(fp, "dest_type="); - print_alu_type(nir_intrinsic_dest_type(instr), state); - break; - } - - case NIR_INTRINSIC_SWIZZLE_MASK: { - fprintf(fp, "swizzle_mask="); - unsigned mask = nir_intrinsic_swizzle_mask(instr); - if (instr->intrinsic == nir_intrinsic_quad_swizzle_amd) { - for (unsigned i = 0; i < 4; i++) - fprintf(fp, "%d", (mask >> (i * 2) & 3)); - } else if (instr->intrinsic == nir_intrinsic_masked_swizzle_amd) { - fprintf(fp, "((id & %d) | %d) ^ %d", mask & 0x1F, - (mask >> 5) & 0x1F, - (mask >> 10) & 0x1F); - } else { - fprintf(fp, "%d", mask); - } - break; - } - - case NIR_INTRINSIC_MEMORY_SEMANTICS: { - nir_memory_semantics semantics = nir_intrinsic_memory_semantics(instr); - fprintf(fp, "mem_semantics="); - switch (semantics & (NIR_MEMORY_ACQUIRE | NIR_MEMORY_RELEASE)) { - case 0: fprintf(fp, "NONE"); break; - case NIR_MEMORY_ACQUIRE: fprintf(fp, "ACQ"); break; - case NIR_MEMORY_RELEASE: fprintf(fp, "REL"); break; - default: fprintf(fp, "ACQ|REL"); break; - } - if (semantics & (NIR_MEMORY_MAKE_AVAILABLE)) fprintf(fp, "|AVAILABLE"); - if (semantics & (NIR_MEMORY_MAKE_VISIBLE)) fprintf(fp, "|VISIBLE"); - break; - } - - case NIR_INTRINSIC_MEMORY_MODES: { - fprintf(fp, "mem_modes="); - unsigned int modes = nir_intrinsic_memory_modes(instr); - while (modes) { - nir_variable_mode m = u_bit_scan(&modes); - fprintf(fp, "%s%s", get_variable_mode_str(1 << m, true), modes ? "|" : ""); - } - break; - } - - case NIR_INTRINSIC_EXECUTION_SCOPE: - case NIR_INTRINSIC_MEMORY_SCOPE: { - fprintf(fp, "%s=", nir_intrinsic_index_names[idx]); - nir_scope scope = - idx == NIR_INTRINSIC_MEMORY_SCOPE ? nir_intrinsic_memory_scope(instr) - : nir_intrinsic_execution_scope(instr); - switch (scope) { - case NIR_SCOPE_NONE: fprintf(fp, "NONE"); break; - case NIR_SCOPE_DEVICE: fprintf(fp, "DEVICE"); break; - case NIR_SCOPE_QUEUE_FAMILY: fprintf(fp, "QUEUE_FAMILY"); break; - case NIR_SCOPE_WORKGROUP: fprintf(fp, "WORKGROUP"); break; - case NIR_SCOPE_SHADER_CALL: fprintf(fp, "SHADER_CALL"); break; - case NIR_SCOPE_SUBGROUP: fprintf(fp, "SUBGROUP"); break; - case NIR_SCOPE_INVOCATION: fprintf(fp, "INVOCATION"); break; - } - break; - } - - case NIR_INTRINSIC_IO_SEMANTICS: { - struct nir_io_semantics io = nir_intrinsic_io_semantics(instr); - - /* Try to figure out the mode so we can interpret the location */ - nir_variable_mode mode = nir_var_mem_generic; - switch (instr->intrinsic) { - case nir_intrinsic_load_input: - case nir_intrinsic_load_interpolated_input: - mode = nir_var_shader_in; - break; - - case nir_intrinsic_load_output: - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_primitive_output: - case nir_intrinsic_store_per_vertex_output: - mode = nir_var_shader_out; - break; - - default: - break; - } - - /* Using that mode, we should be able to name the location */ - char buf[4]; - const char *loc = get_location_str(io.location, - state->shader->info.stage, mode, - buf); - - fprintf(fp, "io location=%s slots=%u", loc, io.num_slots); - - if (io.dual_source_blend_index) - fprintf(fp, " dualsrc"); - - if (io.fb_fetch_output) - fprintf(fp, " fbfetch"); - - if (io.per_view) - fprintf(fp, " perview"); - - if (io.medium_precision) - fprintf(fp, " mediump"); - - if (io.high_16bits) - fprintf(fp, " high_16bits"); - - if (io.no_varying) - fprintf(fp, " no_varying"); - - if (io.no_sysval_output) - fprintf(fp, " no_sysval_output"); - - if (state->shader && - state->shader->info.stage == MESA_SHADER_GEOMETRY && - (instr->intrinsic == nir_intrinsic_store_output || - instr->intrinsic == nir_intrinsic_store_per_primitive_output || - instr->intrinsic == nir_intrinsic_store_per_vertex_output)) { - unsigned gs_streams = io.gs_streams; - fprintf(fp, " gs_streams("); - for (unsigned i = 0; i < 4; i++) { - fprintf(fp, "%s%c=%u", i ? " " : "", "xyzw"[i], - (gs_streams >> (i * 2)) & 0x3); - } - fprintf(fp, ")"); - } - - break; - } - - case NIR_INTRINSIC_IO_XFB: - case NIR_INTRINSIC_IO_XFB2: { - /* This prints both IO_XFB and IO_XFB2. */ - fprintf(fp, "xfb%s(", idx == NIR_INTRINSIC_IO_XFB ? "" : "2"); - bool first = true; - for (unsigned i = 0; i < 2; i++) { - unsigned start_comp = (idx == NIR_INTRINSIC_IO_XFB ? 0 : 2) + i; - nir_io_xfb xfb = start_comp < 2 ? nir_intrinsic_io_xfb(instr) : - nir_intrinsic_io_xfb2(instr); - - if (!xfb.out[i].num_components) - continue; - - if (!first) - fprintf(fp, ", "); - first = false; - - if (xfb.out[i].num_components > 1) { - fprintf(fp, "components=%u..%u", - start_comp, start_comp + xfb.out[i].num_components - 1); - } else { - fprintf(fp, "component=%u", start_comp); - } - fprintf(fp, " buffer=%u offset=%u", - xfb.out[i].buffer, (uint32_t)xfb.out[i].offset * 4); - } - fprintf(fp, ")"); - break; - } - - case NIR_INTRINSIC_ROUNDING_MODE: { - fprintf(fp, "rounding_mode="); - switch (nir_intrinsic_rounding_mode(instr)) { - case nir_rounding_mode_undef: fprintf(fp, "undef"); break; - case nir_rounding_mode_rtne: fprintf(fp, "rtne"); break; - case nir_rounding_mode_ru: fprintf(fp, "ru"); break; - case nir_rounding_mode_rd: fprintf(fp, "rd"); break; - case nir_rounding_mode_rtz: fprintf(fp, "rtz"); break; - default: fprintf(fp, "unkown"); break; - } - break; - } - - case NIR_INTRINSIC_RAY_QUERY_VALUE: { - fprintf(fp, "ray_query_value="); - switch (nir_intrinsic_ray_query_value(instr)) { -#define VAL(_name) case nir_ray_query_value_##_name: fprintf(fp, #_name); break - VAL(intersection_type); - VAL(intersection_t); - VAL(intersection_instance_custom_index); - VAL(intersection_instance_id); - VAL(intersection_instance_sbt_index); - VAL(intersection_geometry_index); - VAL(intersection_primitive_index); - VAL(intersection_barycentrics); - VAL(intersection_front_face); - VAL(intersection_object_ray_direction); - VAL(intersection_object_ray_origin); - VAL(intersection_object_to_world); - VAL(intersection_world_to_object); - VAL(intersection_candidate_aabb_opaque); - VAL(tmin); - VAL(flags); - VAL(world_ray_direction); - VAL(world_ray_origin); -#undef VAL - default: fprintf(fp, "unknown"); break; - } - break; - } - - default: { - unsigned off = info->index_map[idx] - 1; - fprintf(fp, "%s=%d", nir_intrinsic_index_names[idx], instr->const_index[off]); - print_raw = false; - break; - } - } - if (print_raw) - fprintf(fp, " /*%d*/", instr->const_index[i]); - } - fprintf(fp, ")"); - - if (!state->shader) - return; - - nir_variable_mode var_mode; - switch (instr->intrinsic) { - case nir_intrinsic_load_uniform: - var_mode = nir_var_uniform; - break; - case nir_intrinsic_load_input: - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_load_per_vertex_input: - var_mode = nir_var_shader_in; - break; - case nir_intrinsic_load_output: - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_vertex_output: - var_mode = nir_var_shader_out; - break; - default: - return; - } - - nir_foreach_variable_with_modes(var, state->shader, var_mode) { - if ((var->data.driver_location == nir_intrinsic_base(instr)) && - (instr->intrinsic == nir_intrinsic_load_uniform || - (nir_intrinsic_component(instr) >= var->data.location_frac && - nir_intrinsic_component(instr) < - (var->data.location_frac + glsl_get_components(var->type)))) && - var->name) { - fprintf(fp, "\t/* %s */", var->name); - break; - } - } -} - -static void -print_tex_instr(nir_tex_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - - print_dest(&instr->dest, state); - - fprintf(fp, " = ("); - print_alu_type(instr->dest_type, state); - fprintf(fp, ")"); - - switch (instr->op) { - case nir_texop_tex: - fprintf(fp, "tex "); - break; - case nir_texop_txb: - fprintf(fp, "txb "); - break; - case nir_texop_txl: - fprintf(fp, "txl "); - break; - case nir_texop_txd: - fprintf(fp, "txd "); - break; - case nir_texop_txf: - fprintf(fp, "txf "); - break; - case nir_texop_txf_ms: - fprintf(fp, "txf_ms "); - break; - case nir_texop_txf_ms_fb: - fprintf(fp, "txf_ms_fb "); - break; - case nir_texop_txf_ms_mcs_intel: - fprintf(fp, "txf_ms_mcs_intel "); - break; - case nir_texop_txs: - fprintf(fp, "txs "); - break; - case nir_texop_lod: - fprintf(fp, "lod "); - break; - case nir_texop_tg4: - fprintf(fp, "tg4 "); - break; - case nir_texop_query_levels: - fprintf(fp, "query_levels "); - break; - case nir_texop_texture_samples: - fprintf(fp, "texture_samples "); - break; - case nir_texop_samples_identical: - fprintf(fp, "samples_identical "); - break; - case nir_texop_tex_prefetch: - fprintf(fp, "tex (pre-dispatchable) "); - break; - case nir_texop_fragment_fetch_amd: - fprintf(fp, "fragment_fetch_amd "); - break; - case nir_texop_fragment_mask_fetch_amd: - fprintf(fp, "fragment_mask_fetch_amd "); - break; - case nir_texop_descriptor_amd: - fprintf(fp, "descriptor_amd "); - break; - case nir_texop_sampler_descriptor_amd: - fprintf(fp, "sampler_descriptor_amd "); - break; - case nir_texop_lod_bias_agx: - fprintf(fp, "lod_bias_agx "); - break; - default: - unreachable("Invalid texture operation"); - break; - } - - bool has_texture_deref = false, has_sampler_deref = false; - for (unsigned i = 0; i < instr->num_srcs; i++) { - if (i > 0) { - fprintf(fp, ", "); - } - - print_src(&instr->src[i].src, state); - fprintf(fp, " "); - - switch(instr->src[i].src_type) { - case nir_tex_src_backend1: - fprintf(fp, "(backend1)"); - break; - case nir_tex_src_backend2: - fprintf(fp, "(backend2)"); - break; - case nir_tex_src_coord: - fprintf(fp, "(coord)"); - break; - case nir_tex_src_projector: - fprintf(fp, "(projector)"); - break; - case nir_tex_src_comparator: - fprintf(fp, "(comparator)"); - break; - case nir_tex_src_offset: - fprintf(fp, "(offset)"); - break; - case nir_tex_src_bias: - fprintf(fp, "(bias)"); - break; - case nir_tex_src_lod: - fprintf(fp, "(lod)"); - break; - case nir_tex_src_min_lod: - fprintf(fp, "(min_lod)"); - break; - case nir_tex_src_ms_index: - fprintf(fp, "(ms_index)"); - break; - case nir_tex_src_ms_mcs_intel: - fprintf(fp, "(ms_mcs_intel)"); - break; - case nir_tex_src_ddx: - fprintf(fp, "(ddx)"); - break; - case nir_tex_src_ddy: - fprintf(fp, "(ddy)"); - break; - case nir_tex_src_texture_deref: - has_texture_deref = true; - fprintf(fp, "(texture_deref)"); - break; - case nir_tex_src_sampler_deref: - has_sampler_deref = true; - fprintf(fp, "(sampler_deref)"); - break; - case nir_tex_src_texture_offset: - fprintf(fp, "(texture_offset)"); - break; - case nir_tex_src_sampler_offset: - fprintf(fp, "(sampler_offset)"); - break; - case nir_tex_src_texture_handle: - fprintf(fp, "(texture_handle)"); - break; - case nir_tex_src_sampler_handle: - fprintf(fp, "(sampler_handle)"); - break; - case nir_tex_src_plane: - fprintf(fp, "(plane)"); - break; - - default: - unreachable("Invalid texture source type"); - break; - } - } - - if (instr->op == nir_texop_tg4) { - fprintf(fp, ", %u (gather_component)", instr->component); - } - - if (nir_tex_instr_has_explicit_tg4_offsets(instr)) { - fprintf(fp, ", { (%i, %i)", instr->tg4_offsets[0][0], instr->tg4_offsets[0][1]); - for (unsigned i = 1; i < 4; ++i) - fprintf(fp, ", (%i, %i)", instr->tg4_offsets[i][0], - instr->tg4_offsets[i][1]); - fprintf(fp, " } (offsets)"); - } - - if (instr->op != nir_texop_txf_ms_fb && !has_texture_deref) { - fprintf(fp, ", %u (texture)", instr->texture_index); - } - - if (nir_tex_instr_need_sampler(instr) && !has_sampler_deref) { - fprintf(fp, ", %u (sampler)", instr->sampler_index); - } - - if (instr->texture_non_uniform) { - fprintf(fp, ", texture non-uniform"); - } - - if (instr->sampler_non_uniform) { - fprintf(fp, ", sampler non-uniform"); - } - - if (instr->is_sparse) { - fprintf(fp, ", sparse"); - } -} - -static void -print_call_instr(nir_call_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - - fprintf(fp, "call %s ", instr->callee->name); - - for (unsigned i = 0; i < instr->num_params; i++) { - if (i != 0) - fprintf(fp, ", "); - - print_src(&instr->params[i], state); - } -} - -static void -print_jump_instr(nir_jump_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - - switch (instr->type) { - case nir_jump_break: - fprintf(fp, "break"); - break; - - case nir_jump_continue: - fprintf(fp, "continue"); - break; - - case nir_jump_return: - fprintf(fp, "return"); - break; - - case nir_jump_halt: - fprintf(fp, "halt"); - break; - - case nir_jump_goto: - fprintf(fp, "goto block_%u", - instr->target ? instr->target->index : -1); - break; - - case nir_jump_goto_if: - fprintf(fp, "goto block_%u if ", - instr->target ? instr->target->index : -1); - print_src(&instr->condition, state); - fprintf(fp, " else block_%u", - instr->else_target ? instr->else_target->index : -1); - break; - } -} - -static void -print_ssa_undef_instr(nir_ssa_undef_instr* instr, print_state *state) -{ - FILE *fp = state->fp; - print_ssa_def(&instr->def, state); - fprintf(fp, " = undefined"); -} - -static void -print_phi_instr(nir_phi_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - print_dest(&instr->dest, state); - fprintf(fp, " = phi "); - nir_foreach_phi_src(src, instr) { - if (&src->node != exec_list_get_head(&instr->srcs)) - fprintf(fp, ", "); - - fprintf(fp, "block_%u: ", src->pred->index); - print_src(&src->src, state); - } -} - -static void -print_parallel_copy_instr(nir_parallel_copy_instr *instr, print_state *state) -{ - FILE *fp = state->fp; - nir_foreach_parallel_copy_entry(entry, instr) { - if (&entry->node != exec_list_get_head(&instr->entries)) - fprintf(fp, "; "); - - print_dest(&entry->dest, state); - fprintf(fp, " = "); - print_src(&entry->src, state); - } -} - -static void -print_instr(const nir_instr *instr, print_state *state, unsigned tabs) -{ - FILE *fp = state->fp; - print_tabs(tabs, fp); - - switch (instr->type) { - case nir_instr_type_alu: - print_alu_instr(nir_instr_as_alu(instr), state); - break; - - case nir_instr_type_deref: - print_deref_instr(nir_instr_as_deref(instr), state); - break; - - case nir_instr_type_call: - print_call_instr(nir_instr_as_call(instr), state); - break; - - case nir_instr_type_intrinsic: - print_intrinsic_instr(nir_instr_as_intrinsic(instr), state); - break; - - case nir_instr_type_tex: - print_tex_instr(nir_instr_as_tex(instr), state); - break; - - case nir_instr_type_load_const: - print_load_const_instr(nir_instr_as_load_const(instr), state); - break; - - case nir_instr_type_jump: - print_jump_instr(nir_instr_as_jump(instr), state); - break; - - case nir_instr_type_ssa_undef: - print_ssa_undef_instr(nir_instr_as_ssa_undef(instr), state); - break; - - case nir_instr_type_phi: - print_phi_instr(nir_instr_as_phi(instr), state); - break; - - case nir_instr_type_parallel_copy: - print_parallel_copy_instr(nir_instr_as_parallel_copy(instr), state); - break; - - default: - unreachable("Invalid instruction type"); - break; - } -} - -static void print_cf_node(nir_cf_node *node, print_state *state, - unsigned tabs); - -static void -print_block(nir_block *block, print_state *state, unsigned tabs) -{ - FILE *fp = state->fp; - - print_tabs(tabs, fp); - fprintf(fp, "block block_%u:\n", block->index); - - nir_block **preds = nir_block_get_predecessors_sorted(block, NULL); - - print_tabs(tabs, fp); - fprintf(fp, "/* preds: "); - for (unsigned i = 0; i < block->predecessors->entries; i++) { - fprintf(fp, "block_%u ", preds[i]->index); - } - fprintf(fp, "*/\n"); - - ralloc_free(preds); - - nir_foreach_instr(instr, block) { - print_instr(instr, state, tabs); - fprintf(fp, "\n"); - print_annotation(state, instr); - } - - print_tabs(tabs, fp); - fprintf(fp, "/* succs: "); - for (unsigned i = 0; i < 2; i++) - if (block->successors[i]) { - fprintf(fp, "block_%u ", block->successors[i]->index); - } - fprintf(fp, "*/\n"); -} - -static void -print_if(nir_if *if_stmt, print_state *state, unsigned tabs) -{ - FILE *fp = state->fp; - - print_tabs(tabs, fp); - fprintf(fp, "if "); - print_src(&if_stmt->condition, state); - switch (if_stmt->control) { - case nir_selection_control_flatten: - fprintf(fp, " /* flatten */"); - break; - case nir_selection_control_dont_flatten: - fprintf(fp, " /* don't flatten */"); - break; - case nir_selection_control_divergent_always_taken: - fprintf(fp, " /* divergent always taken */"); - break; - case nir_selection_control_none: - default: - break; - } - fprintf(fp, " {\n"); - foreach_list_typed(nir_cf_node, node, node, &if_stmt->then_list) { - print_cf_node(node, state, tabs + 1); - } - print_tabs(tabs, fp); - fprintf(fp, "} else {\n"); - foreach_list_typed(nir_cf_node, node, node, &if_stmt->else_list) { - print_cf_node(node, state, tabs + 1); - } - print_tabs(tabs, fp); - fprintf(fp, "}\n"); -} - -static void -print_loop(nir_loop *loop, print_state *state, unsigned tabs) -{ - FILE *fp = state->fp; - - print_tabs(tabs, fp); - fprintf(fp, "loop {\n"); - foreach_list_typed(nir_cf_node, node, node, &loop->body) { - print_cf_node(node, state, tabs + 1); - } - print_tabs(tabs, fp); - - if (nir_loop_has_continue_construct(loop)) { - fprintf(fp, "} continue {\n"); - foreach_list_typed(nir_cf_node, node, node, &loop->continue_list) { - print_cf_node(node, state, tabs + 1); - } - print_tabs(tabs, fp); - } - - fprintf(fp, "}\n"); -} - -static void -print_cf_node(nir_cf_node *node, print_state *state, unsigned int tabs) -{ - switch (node->type) { - case nir_cf_node_block: - print_block(nir_cf_node_as_block(node), state, tabs); - break; - - case nir_cf_node_if: - print_if(nir_cf_node_as_if(node), state, tabs); - break; - - case nir_cf_node_loop: - print_loop(nir_cf_node_as_loop(node), state, tabs); - break; - - default: - unreachable("Invalid CFG node type"); - } -} - -static void -print_function_impl(nir_function_impl *impl, print_state *state) -{ - FILE *fp = state->fp; - - fprintf(fp, "\nimpl %s ", impl->function->name); - - fprintf(fp, "{\n"); - - if (impl->preamble) { - fprintf(fp, "\tpreamble %s\n", impl->preamble->name); - } - - nir_foreach_function_temp_variable(var, impl) { - fprintf(fp, "\t"); - print_var_decl(var, state); - } - - foreach_list_typed(nir_register, reg, node, &impl->registers) { - fprintf(fp, "\t"); - print_register_decl(reg, state); - } - - nir_index_blocks(impl); - - foreach_list_typed(nir_cf_node, node, node, &impl->body) { - print_cf_node(node, state, 1); - } - - fprintf(fp, "\tblock block_%u:\n}\n\n", impl->end_block->index); -} - -static void -print_function(nir_function *function, print_state *state) -{ - FILE *fp = state->fp; - - fprintf(fp, "decl_function %s (%d params)", function->name, - function->num_params); - - fprintf(fp, "\n"); - - if (function->impl != NULL) { - print_function_impl(function->impl, state); - return; - } -} - -static void -init_print_state(print_state *state, nir_shader *shader, FILE *fp) -{ - state->fp = fp; - state->shader = shader; - state->ht = _mesa_pointer_hash_table_create(NULL); - state->syms = _mesa_set_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - state->index = 0; -} - -static void -destroy_print_state(print_state *state) -{ - _mesa_hash_table_destroy(state->ht, NULL); - _mesa_set_destroy(state->syms, NULL); -} - -static const char * -primitive_name(unsigned primitive) -{ -#define PRIM(X) case SHADER_PRIM_ ## X : return #X - switch (primitive) { - PRIM(POINTS); - PRIM(LINES); - PRIM(LINE_LOOP); - PRIM(LINE_STRIP); - PRIM(TRIANGLES); - PRIM(TRIANGLE_STRIP); - PRIM(TRIANGLE_FAN); - PRIM(QUADS); - PRIM(QUAD_STRIP); - PRIM(POLYGON); - default: - return "UNKNOWN"; - } -} - -static void -print_bitset(FILE *fp, const char *label, const unsigned *words, int size) -{ - fprintf(fp, "%s: ", label); - /* Iterate back-to-front to get proper digit order (most significant first). */ - for (int i = size - 1; i >= 0; --i) { - fprintf(fp, (i == size - 1) ? "0x%08x" : "'%08x", words[i]); - } - fprintf(fp, "\n"); -} - -/* Print bitset, only if some bits are set */ -static void -print_nz_bitset(FILE *fp, const char *label, const unsigned *words, int size) -{ - bool is_all_zero = true; - for (int i = 0; i < size; ++i) { - if (words[i]) { - is_all_zero = false; - break; - } - } - - if (!is_all_zero) - print_bitset(fp, label, words, size); -} - -/* Print uint64_t value, only if non-zero. - * The value is printed by enumerating the ranges of bits that are set. - * E.g. inputs_read: 0,15-17 - */ -static void -print_nz_x64(FILE *fp, const char *label, uint64_t value) -{ - if (value) { - char acc[256] = {0}; - char buf[32]; - int start = 0; - int count = 0; - while (value) { - u_bit_scan_consecutive_range64(&value, &start, &count); - assert(count > 0); - bool is_first = !acc[0]; - if (count > 1) { - snprintf(buf, sizeof(buf), is_first ? "%d-%d" : ",%d-%d", start, start + count - 1); - } else { - snprintf(buf, sizeof(buf), is_first ? "%d" : ",%d", start); - } - assert(strlen(acc) + strlen(buf) + 1 < sizeof(acc)); - strcat(acc, buf); - } - fprintf(fp, "%s: %s\n", label, acc); - } -} - -/* Print uint32_t value in hex, only if non-zero */ -static void -print_nz_x32(FILE *fp, const char *label, uint32_t value) -{ - if (value) - fprintf(fp, "%s: 0x%08" PRIx32 "\n", label, value); -} - -/* Print uint16_t value in hex, only if non-zero */ -static void -print_nz_x16(FILE *fp, const char *label, uint16_t value) -{ - if (value) - fprintf(fp, "%s: 0x%04x\n", label, value); -} - -/* Print uint8_t value in hex, only if non-zero */ -static void -print_nz_x8(FILE *fp, const char *label, uint8_t value) -{ - if (value) - fprintf(fp, "%s: 0x%02x\n", label, value); -} - -/* Print unsigned value in decimal, only if non-zero */ -static void -print_nz_unsigned(FILE *fp, const char *label, unsigned value) -{ - if (value) - fprintf(fp, "%s: %u\n", label, value); -} - -/* Print bool only if set */ -static void -print_nz_bool(FILE *fp, const char *label, bool value) -{ - if (value) - fprintf(fp, "%s: true\n", label); -} - -static void -print_shader_info(const struct shader_info *info, FILE *fp) -{ - fprintf(fp, "shader: %s\n", gl_shader_stage_name(info->stage)); - - fprintf(fp, "source_sha1: {"); - _mesa_sha1_print(fp, info->source_sha1); - fprintf(fp, "}\n"); - - if (info->name) - fprintf(fp, "name: %s\n", info->name); - - if (info->label) - fprintf(fp, "label: %s\n", info->label); - - if (gl_shader_stage_uses_workgroup(info->stage)) { - fprintf(fp, "workgroup-size: %u, %u, %u%s\n", - info->workgroup_size[0], - info->workgroup_size[1], - info->workgroup_size[2], - info->workgroup_size_variable ? " (variable)" : ""); - fprintf(fp, "shared-size: %u\n", info->shared_size); - } - - fprintf(fp, "stage: %d\n" - "next_stage: %d\n", - info->stage, info->next_stage); - - print_nz_unsigned(fp, "num_textures", info->num_textures); - print_nz_unsigned(fp, "num_ubos", info->num_ubos); - print_nz_unsigned(fp, "num_abos", info->num_abos); - print_nz_unsigned(fp, "num_ssbos", info->num_ssbos); - print_nz_unsigned(fp, "num_images", info->num_images); - - print_nz_x64(fp, "inputs_read", info->inputs_read); - print_nz_x64(fp, "outputs_written", info->outputs_written); - print_nz_x64(fp, "outputs_read", info->outputs_read); - - print_nz_bitset(fp, "system_values_read", info->system_values_read, ARRAY_SIZE(info->system_values_read)); - - print_nz_x64(fp, "per_primitive_inputs", info->per_primitive_inputs); - print_nz_x64(fp, "per_primitive_outputs", info->per_primitive_outputs); - print_nz_x64(fp, "per_view_outputs", info->per_view_outputs); - - print_nz_x16(fp, "inputs_read_16bit", info->inputs_read_16bit); - print_nz_x16(fp, "outputs_written_16bit", info->outputs_written_16bit); - print_nz_x16(fp, "outputs_read_16bit", info->outputs_read_16bit); - print_nz_x16(fp, "inputs_read_indirectly_16bit", info->inputs_read_indirectly_16bit); - print_nz_x16(fp, "outputs_accessed_indirectly_16bit", info->outputs_accessed_indirectly_16bit); - - print_nz_x32(fp, "patch_inputs_read", info->patch_inputs_read); - print_nz_x32(fp, "patch_outputs_written", info->patch_outputs_written); - print_nz_x32(fp, "patch_outputs_read", info->patch_outputs_read); - - print_nz_x64(fp, "inputs_read_indirectly", info->inputs_read_indirectly); - print_nz_x64(fp, "outputs_accessed_indirectly", info->outputs_accessed_indirectly); - print_nz_x64(fp, "patch_inputs_read_indirectly", info->patch_inputs_read_indirectly); - print_nz_x64(fp, "patch_outputs_accessed_indirectly", info->patch_outputs_accessed_indirectly); - - print_nz_bitset(fp, "textures_used", info->textures_used, ARRAY_SIZE(info->textures_used)); - print_nz_bitset(fp, "textures_used_by_txf", info->textures_used_by_txf, ARRAY_SIZE(info->textures_used_by_txf)); - print_nz_bitset(fp, "samplers_used", info->samplers_used, ARRAY_SIZE(info->samplers_used)); - print_nz_bitset(fp, "images_used", info->images_used, ARRAY_SIZE(info->images_used)); - print_nz_bitset(fp, "image_buffers", info->image_buffers, ARRAY_SIZE(info->image_buffers)); - print_nz_bitset(fp, "msaa_images", info->msaa_images, ARRAY_SIZE(info->msaa_images)); - - print_nz_x16(fp, "float_controls_execution_mode", info->float_controls_execution_mode); - - print_nz_unsigned(fp, "shared_size", info->shared_size); - - if (info->stage == MESA_SHADER_MESH || info->stage == MESA_SHADER_TASK) { - fprintf(fp, "task_payload_size: %u\n", info->task_payload_size); - } - - print_nz_unsigned(fp, "ray queries", info->ray_queries); - - fprintf(fp, "subgroup_size: %u\n", info->subgroup_size); - - print_nz_bool(fp, "uses_wide_subgroup_intrinsics", info->uses_wide_subgroup_intrinsics); - - bool has_xfb_stride = info->xfb_stride[0] || info->xfb_stride[1] || info->xfb_stride[2] || info->xfb_stride[3]; - if (has_xfb_stride) - fprintf(fp, "xfb_stride: {%u, %u, %u, %u}\n", - info->xfb_stride[0], - info->xfb_stride[1], - info->xfb_stride[2], - info->xfb_stride[3]); - - bool has_inlinable_uniform_dw_offsets = info->inlinable_uniform_dw_offsets[0] - || info->inlinable_uniform_dw_offsets[1] - || info->inlinable_uniform_dw_offsets[2] - || info->inlinable_uniform_dw_offsets[3]; - if (has_inlinable_uniform_dw_offsets) - fprintf(fp, "inlinable_uniform_dw_offsets: {%u, %u, %u, %u}\n", - info->inlinable_uniform_dw_offsets[0], - info->inlinable_uniform_dw_offsets[1], - info->inlinable_uniform_dw_offsets[2], - info->inlinable_uniform_dw_offsets[3]); - - print_nz_unsigned(fp, "num_inlinable_uniforms", info->num_inlinable_uniforms); - print_nz_unsigned(fp, "clip_distance_array_size", info->clip_distance_array_size); - print_nz_unsigned(fp, "cull_distance_array_size", info->cull_distance_array_size); - - print_nz_bool(fp, "uses_texture_gather", info->uses_texture_gather); - print_nz_bool(fp, "uses_resource_info_query", info->uses_resource_info_query); - print_nz_bool(fp, "uses_fddx_fddy", info->uses_fddx_fddy); - print_nz_bool(fp, "divergence_analysis_run", info->divergence_analysis_run); - - print_nz_x8(fp, "bit_sizes_float", info->bit_sizes_float); - print_nz_x8(fp, "bit_sizes_int", info->bit_sizes_int); - - print_nz_bool(fp, "first_ubo_is_default_ubo", info->first_ubo_is_default_ubo); - print_nz_bool(fp, "separate_shader", info->separate_shader); - print_nz_bool(fp, "has_transform_feedback_varyings", info->has_transform_feedback_varyings); - print_nz_bool(fp, "flrp_lowered", info->flrp_lowered); - print_nz_bool(fp, "io_lowered", info->io_lowered); - print_nz_bool(fp, "writes_memory", info->writes_memory); - - switch (info->stage) { - case MESA_SHADER_VERTEX: - print_nz_x64(fp, "double_inputs", info->vs.double_inputs); - print_nz_unsigned(fp, "blit_sgprs_amd", info->vs.blit_sgprs_amd); - print_nz_bool(fp, "window_space_position", info->vs.window_space_position); - print_nz_bool(fp, "needs_edge_flag", info->vs.needs_edge_flag); - break; - - case MESA_SHADER_TESS_CTRL: - case MESA_SHADER_TESS_EVAL: - fprintf(fp, "primitive_mode: %u\n", info->tess._primitive_mode); - fprintf(fp, "tcs_vertices_out: %u\n", info->tess.tcs_vertices_out); - fprintf(fp, "spacing: %u\n", info->tess.spacing); - - print_nz_bool(fp, "ccw", info->tess.ccw); - print_nz_bool(fp, "point_mode", info->tess.point_mode); - print_nz_x64(fp, "tcs_cross_invocation_inputs_read", info->tess.tcs_cross_invocation_inputs_read); - print_nz_x64(fp, "tcs_cross_invocation_outputs_read", info->tess.tcs_cross_invocation_outputs_read); - break; - - case MESA_SHADER_GEOMETRY: - fprintf(fp, "output_primitive: %s\n", primitive_name(info->gs.output_primitive)); - fprintf(fp, "input_primitive: %s\n", primitive_name(info->gs.input_primitive)); - fprintf(fp, "vertices_out: %u\n", info->gs.vertices_out); - fprintf(fp, "invocations: %u\n", info->gs.invocations); - fprintf(fp, "vertices_in: %u\n", info->gs.vertices_in); - print_nz_bool(fp, "uses_end_primitive", info->gs.uses_end_primitive); - fprintf(fp, "active_stream_mask: 0x%02x\n", info->gs.active_stream_mask); - break; - - case MESA_SHADER_FRAGMENT: - print_nz_bool(fp, "uses_discard", info->fs.uses_discard); - print_nz_bool(fp, "uses_demote", info->fs.uses_demote); - print_nz_bool(fp, "uses_fbfetch_output", info->fs.uses_fbfetch_output); - print_nz_bool(fp, "color_is_dual_source", info->fs.color_is_dual_source); - - print_nz_bool(fp, "needs_quad_helper_invocations", info->fs.needs_quad_helper_invocations); - print_nz_bool(fp, "needs_all_helper_invocations", info->fs.needs_all_helper_invocations); - print_nz_bool(fp, "uses_sample_qualifier", info->fs.uses_sample_qualifier); - print_nz_bool(fp, "uses_sample_shading", info->fs.uses_sample_shading); - print_nz_bool(fp, "early_fragment_tests", info->fs.early_fragment_tests); - print_nz_bool(fp, "inner_coverage", info->fs.inner_coverage); - print_nz_bool(fp, "post_depth_coverage", info->fs.post_depth_coverage); - - print_nz_bool(fp, "pixel_center_integer", info->fs.pixel_center_integer); - print_nz_bool(fp, "origin_upper_left", info->fs.origin_upper_left); - print_nz_bool(fp, "pixel_interlock_ordered", info->fs.pixel_interlock_ordered); - print_nz_bool(fp, "pixel_interlock_unordered", info->fs.pixel_interlock_unordered); - print_nz_bool(fp, "sample_interlock_ordered", info->fs.sample_interlock_ordered); - print_nz_bool(fp, "sample_interlock_unordered", info->fs.sample_interlock_unordered); - print_nz_bool(fp, "untyped_color_outputs", info->fs.untyped_color_outputs); - - print_nz_unsigned(fp, "depth_layout", info->fs.depth_layout); - - if (info->fs.color0_interp != INTERP_MODE_NONE) { - fprintf(fp, "color0_interp: %s\n", - glsl_interp_mode_name(info->fs.color0_interp)); - } - print_nz_bool(fp, "color0_sample", info->fs.color0_sample); - print_nz_bool(fp, "color0_centroid", info->fs.color0_centroid); - - if (info->fs.color1_interp != INTERP_MODE_NONE) { - fprintf(fp, "color1_interp: %s\n", - glsl_interp_mode_name(info->fs.color1_interp)); - } - print_nz_bool(fp, "color1_sample", info->fs.color1_sample); - print_nz_bool(fp, "color1_centroid", info->fs.color1_centroid); - - print_nz_x32(fp, "advanced_blend_modes", info->fs.advanced_blend_modes); - break; - - case MESA_SHADER_COMPUTE: - if (info->cs.workgroup_size_hint[0] - || info->cs.workgroup_size_hint[1] - || info->cs.workgroup_size_hint[2]) - fprintf(fp, "workgroup_size_hint: {%u, %u, %u}\n", - info->cs.workgroup_size_hint[0], - info->cs.workgroup_size_hint[1], - info->cs.workgroup_size_hint[2]); - print_nz_unsigned(fp, "user_data_components_amd", info->cs.user_data_components_amd); - print_nz_unsigned(fp, "derivative_group", info->cs.derivative_group); - fprintf(fp, "ptr_size: %u\n", info->cs.ptr_size); - break; - - case MESA_SHADER_MESH: - print_nz_x64(fp, "ms_cross_invocation_output_access", info->mesh.ms_cross_invocation_output_access); - fprintf(fp, "max_vertices_out: %u\n", info->mesh.max_vertices_out); - fprintf(fp, "max_primitives_out: %u\n", info->mesh.max_primitives_out); - fprintf(fp, "primitive_type: %s\n", primitive_name(info->mesh.primitive_type)); - print_nz_bool(fp, "nv", info->mesh.nv); - break; - - default: - fprintf(fp, "Unhandled stage %d\n", info->stage); - } -} - -void -nir_print_shader_annotated(nir_shader *shader, FILE *fp, - struct hash_table *annotations) -{ - print_state state; - init_print_state(&state, shader, fp); - state.annotations = annotations; - - print_shader_info(&shader->info, fp); - - fprintf(fp, "inputs: %u\n", shader->num_inputs); - fprintf(fp, "outputs: %u\n", shader->num_outputs); - fprintf(fp, "uniforms: %u\n", shader->num_uniforms); - if (shader->scratch_size) - fprintf(fp, "scratch: %u\n", shader->scratch_size); - if (shader->constant_data_size) - fprintf(fp, "constants: %u\n", shader->constant_data_size); - - nir_foreach_variable_in_shader(var, shader) - print_var_decl(var, &state); - - foreach_list_typed(nir_function, func, node, &shader->functions) { - print_function(func, &state); - } - - destroy_print_state(&state); -} - -void -nir_print_shader(nir_shader *shader, FILE *fp) -{ - nir_print_shader_annotated(shader, fp, NULL); - fflush(fp); -} - -void -nir_print_instr(const nir_instr *instr, FILE *fp) -{ - print_state state = { - .fp = fp, - }; - if (instr->block) { - nir_function_impl *impl = nir_cf_node_get_function(&instr->block->cf_node); - state.shader = impl->function->shader; - } - - print_instr(instr, &state, 0); -} - -void -nir_print_deref(const nir_deref_instr *deref, FILE *fp) -{ - print_state state = { - .fp = fp, - }; - print_deref_link(deref, true, &state); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_propagate_invariant.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_propagate_invariant.c deleted file mode 100644 index b881c5c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_propagate_invariant.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -static void -add_src(nir_src *src, struct set *invariants) -{ - if (src->is_ssa) { - _mesa_set_add(invariants, src->ssa); - } else { - _mesa_set_add(invariants, src->reg.reg); - } -} - -static bool -add_src_cb(nir_src *src, void *state) -{ - add_src(src, state); - return true; -} - -static bool -dest_is_invariant(nir_dest *dest, struct set *invariants) -{ - if (dest->is_ssa) { - return _mesa_set_search(invariants, &dest->ssa); - } else { - return _mesa_set_search(invariants, dest->reg.reg); - } -} - -static void -add_cf_node(nir_cf_node *cf, struct set *invariants) -{ - if (cf->type == nir_cf_node_if) { - nir_if *if_stmt = nir_cf_node_as_if(cf); - add_src(&if_stmt->condition, invariants); - } - - if (cf->parent) - add_cf_node(cf->parent, invariants); -} - -static void -add_var(nir_variable *var, struct set *invariants) -{ - /* Because we pass the result of nir_intrinsic_get_var directly to this - * function, it's possible for var to be NULL if, for instance, there's a - * cast somewhere in the chain. - */ - if (var != NULL) - _mesa_set_add(invariants, var); -} - -static bool -var_is_invariant(nir_variable *var, struct set * invariants) -{ - /* Because we pass the result of nir_intrinsic_get_var directly to this - * function, it's possible for var to be NULL if, for instance, there's a - * cast somewhere in the chain. - */ - return var && (var->data.invariant || _mesa_set_search(invariants, var)); -} - -static void -propagate_invariant_instr(nir_instr *instr, struct set *invariants) -{ - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (!dest_is_invariant(&alu->dest.dest, invariants)) - break; - - alu->exact = true; - nir_foreach_src(instr, add_src_cb, invariants); - break; - } - - case nir_instr_type_tex: { - nir_tex_instr *tex = nir_instr_as_tex(instr); - if (dest_is_invariant(&tex->dest, invariants)) - nir_foreach_src(instr, add_src_cb, invariants); - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_copy_deref: - /* If the destination is invariant then so is the source */ - if (var_is_invariant(nir_intrinsic_get_var(intrin, 0), invariants)) - add_var(nir_intrinsic_get_var(intrin, 1), invariants); - break; - - case nir_intrinsic_load_deref: - if (dest_is_invariant(&intrin->dest, invariants)) - add_var(nir_intrinsic_get_var(intrin, 0), invariants); - break; - - case nir_intrinsic_store_deref: - if (var_is_invariant(nir_intrinsic_get_var(intrin, 0), invariants)) - add_src(&intrin->src[1], invariants); - break; - - default: - /* Nothing to do */ - break; - } - - } - - case nir_instr_type_deref: - case nir_instr_type_jump: - case nir_instr_type_ssa_undef: - case nir_instr_type_load_const: - break; /* Nothing to do */ - - case nir_instr_type_phi: { - nir_phi_instr *phi = nir_instr_as_phi(instr); - if (!dest_is_invariant(&phi->dest, invariants)) - break; - - nir_foreach_phi_src(src, phi) { - add_src(&src->src, invariants); - add_cf_node(&src->pred->cf_node, invariants); - } - break; - } - - case nir_instr_type_call: - unreachable("This pass must be run after function inlining"); - - case nir_instr_type_parallel_copy: - default: - unreachable("Cannot have this instruction type"); - } -} - -static bool -propagate_invariant_impl(nir_function_impl *impl, struct set *invariants) -{ - bool progress = false; - - while (true) { - uint32_t prev_entries = invariants->entries; - - nir_foreach_block_reverse(block, impl) { - nir_foreach_instr_reverse(instr, block) - propagate_invariant_instr(instr, invariants); - } - - /* Keep running until we make no more progress. */ - if (invariants->entries > prev_entries) { - progress = true; - continue; - } else { - break; - } - } - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance | - nir_metadata_live_ssa_defs); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} - -/* If invariant_prim=true, this pass considers all geometry-affecting - * outputs as invariant. Doing this works around a common class of application - * bugs appearing as flickering. - */ -bool -nir_propagate_invariant(nir_shader *shader, bool invariant_prim) -{ - /* Hash set of invariant things */ - struct set *invariants = _mesa_pointer_set_create(NULL); - - if (shader->info.stage != MESA_SHADER_FRAGMENT && invariant_prim) { - nir_foreach_shader_out_variable(var, shader) { - switch (var->data.location) { - case VARYING_SLOT_POS: - case VARYING_SLOT_PSIZ: - case VARYING_SLOT_CLIP_DIST0: - case VARYING_SLOT_CLIP_DIST1: - case VARYING_SLOT_CULL_DIST0: - case VARYING_SLOT_CULL_DIST1: - case VARYING_SLOT_TESS_LEVEL_OUTER: - case VARYING_SLOT_TESS_LEVEL_INNER: - if (!var->data.invariant) - _mesa_set_add(invariants, var); - break; - default: - break; - } - } - } - - bool progress = false; - nir_foreach_function(function, shader) { - if (function->impl && propagate_invariant_impl(function->impl, invariants)) - progress = true; - } - - _mesa_set_destroy(invariants, NULL); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_range_analysis.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_range_analysis.c deleted file mode 100644 index 15ec79e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_range_analysis.c +++ /dev/null @@ -1,2169 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#include -#include -#include "nir.h" -#include "nir_range_analysis.h" -#include "../../util/hash_table.h" -#include "../../util/u_math.h" -#include "../../util/u_dynarray.h" -#include "../../../include/c99_alloca.h" - -/** - * Analyzes a sequence of operations to determine some aspects of the range of - * the result. - */ - -struct analysis_query { - uint32_t pushed_queries; - uint32_t result_index; -}; - -struct analysis_state { - nir_shader *shader; - const nir_unsigned_upper_bound_config *config; - struct hash_table *range_ht; - - struct util_dynarray query_stack; - struct util_dynarray result_stack; - - size_t query_size; - uintptr_t (*get_key)(struct analysis_query *q); - void (*process_query)(struct analysis_state *state, struct analysis_query *q, - uint32_t *result, const uint32_t *src); -}; - -static void * -push_analysis_query(struct analysis_state *state, size_t size) -{ - struct analysis_query *q = util_dynarray_grow_bytes(&state->query_stack, 1, size); - q->pushed_queries = 0; - q->result_index = util_dynarray_num_elements(&state->result_stack, uint32_t); - - util_dynarray_append(&state->result_stack, uint32_t, 0); - - return q; -} - -/* Helper for performing range analysis without recursion. */ -static uint32_t -perform_analysis(struct analysis_state *state) -{ - while (state->query_stack.size) { - struct analysis_query *cur = - (struct analysis_query *)((char*)util_dynarray_end(&state->query_stack) - state->query_size); - uint32_t *result = util_dynarray_element(&state->result_stack, uint32_t, cur->result_index); - - uintptr_t key = state->get_key(cur); - struct hash_entry *he = NULL; - /* There might be a cycle-resolving entry for loop header phis. Ignore this when finishing - * them by testing pushed_queries. - */ - if (cur->pushed_queries == 0 && key && - (he = _mesa_hash_table_search(state->range_ht, (void*)key))) { - *result = (uintptr_t)he->data; - state->query_stack.size -= state->query_size; - continue; - } - - uint32_t *src = (uint32_t*)util_dynarray_end(&state->result_stack) - cur->pushed_queries; - state->result_stack.size -= sizeof(uint32_t) * cur->pushed_queries; - - uint32_t prev_num_queries = state->query_stack.size; - state->process_query(state, cur, result, src); - - uint32_t num_queries = state->query_stack.size; - if (num_queries > prev_num_queries) { - cur = (struct analysis_query *)util_dynarray_element(&state->query_stack, char, - prev_num_queries - state->query_size); - cur->pushed_queries = (num_queries - prev_num_queries) / state->query_size; - continue; - } - - if (key) - _mesa_hash_table_insert(state->range_ht, (void*)key, (void*)(uintptr_t)*result); - - state->query_stack.size -= state->query_size; - } - - assert(state->result_stack.size == sizeof(uint32_t)); - - uint32_t res = util_dynarray_top(&state->result_stack, uint32_t); - util_dynarray_fini(&state->query_stack); - util_dynarray_fini(&state->result_stack); - - return res; -} - -static bool -is_not_negative(enum ssa_ranges r) -{ - return r == gt_zero || r == ge_zero || r == eq_zero; -} - -static bool -is_not_zero(enum ssa_ranges r) -{ - return r == gt_zero || r == lt_zero || r == ne_zero; -} - -static uint32_t -pack_data(const struct ssa_result_range r) -{ - return r.range | r.is_integral << 8 | r.is_finite << 9 | r.is_a_number << 10; -} - -static struct ssa_result_range -unpack_data(uint32_t v) -{ - return (struct ssa_result_range){ - .range = v & 0xff, - .is_integral = (v & 0x00100) != 0, - .is_finite = (v & 0x00200) != 0, - .is_a_number = (v & 0x00400) != 0 - }; -} - -static nir_alu_type -nir_alu_src_type(const nir_alu_instr *instr, unsigned src) -{ - return nir_alu_type_get_base_type(nir_op_infos[instr->op].input_types[src]) | - nir_src_bit_size(instr->src[src].src); -} - -static struct ssa_result_range -analyze_constant(const struct nir_alu_instr *instr, unsigned src, - nir_alu_type use_type) -{ - uint8_t swizzle[NIR_MAX_VEC_COMPONENTS] = { 0, 1, 2, 3, - 4, 5, 6, 7, - 8, 9, 10, 11, - 12, 13, 14, 15 }; - - /* If the source is an explicitly sized source, then we need to reset - * both the number of components and the swizzle. - */ - const unsigned num_components = nir_ssa_alu_instr_src_components(instr, src); - - for (unsigned i = 0; i < num_components; ++i) - swizzle[i] = instr->src[src].swizzle[i]; - - const nir_load_const_instr *const load = - nir_instr_as_load_const(instr->src[src].src.ssa->parent_instr); - - struct ssa_result_range r = { unknown, false, false, false }; - - switch (nir_alu_type_get_base_type(use_type)) { - case nir_type_float: { - double min_value = DBL_MAX; - double max_value = -DBL_MAX; - bool any_zero = false; - bool all_zero = true; - - r.is_integral = true; - r.is_a_number = true; - r.is_finite = true; - - for (unsigned i = 0; i < num_components; ++i) { - const double v = nir_const_value_as_float(load->value[swizzle[i]], - load->def.bit_size); - - if (floor(v) != v) - r.is_integral = false; - - if (isnan(v)) - r.is_a_number = false; - - if (!isfinite(v)) - r.is_finite = false; - - any_zero = any_zero || (v == 0.0); - all_zero = all_zero && (v == 0.0); - min_value = MIN2(min_value, v); - max_value = MAX2(max_value, v); - } - - assert(any_zero >= all_zero); - assert(isnan(max_value) || max_value >= min_value); - - if (all_zero) - r.range = eq_zero; - else if (min_value > 0.0) - r.range = gt_zero; - else if (min_value == 0.0) - r.range = ge_zero; - else if (max_value < 0.0) - r.range = lt_zero; - else if (max_value == 0.0) - r.range = le_zero; - else if (!any_zero) - r.range = ne_zero; - else - r.range = unknown; - - return r; - } - - case nir_type_int: - case nir_type_bool: { - int64_t min_value = INT_MAX; - int64_t max_value = INT_MIN; - bool any_zero = false; - bool all_zero = true; - - for (unsigned i = 0; i < num_components; ++i) { - const int64_t v = nir_const_value_as_int(load->value[swizzle[i]], - load->def.bit_size); - - any_zero = any_zero || (v == 0); - all_zero = all_zero && (v == 0); - min_value = MIN2(min_value, v); - max_value = MAX2(max_value, v); - } - - assert(any_zero >= all_zero); - assert(max_value >= min_value); - - if (all_zero) - r.range = eq_zero; - else if (min_value > 0) - r.range = gt_zero; - else if (min_value == 0) - r.range = ge_zero; - else if (max_value < 0) - r.range = lt_zero; - else if (max_value == 0) - r.range = le_zero; - else if (!any_zero) - r.range = ne_zero; - else - r.range = unknown; - - return r; - } - - case nir_type_uint: { - bool any_zero = false; - bool all_zero = true; - - for (unsigned i = 0; i < num_components; ++i) { - const uint64_t v = nir_const_value_as_uint(load->value[swizzle[i]], - load->def.bit_size); - - any_zero = any_zero || (v == 0); - all_zero = all_zero && (v == 0); - } - - assert(any_zero >= all_zero); - - if (all_zero) - r.range = eq_zero; - else if (any_zero) - r.range = ge_zero; - else - r.range = gt_zero; - - return r; - } - - default: - unreachable("Invalid alu source type"); - } -} - -/** - * Short-hand name for use in the tables in process_fp_query. If this name - * becomes a problem on some compiler, we can change it to _. - */ -#define _______ unknown - - -#if defined(__clang__) - /* clang wants _Pragma("unroll X") */ - #define pragma_unroll_5 _Pragma("unroll 5") - #define pragma_unroll_7 _Pragma("unroll 7") -/* gcc wants _Pragma("GCC unroll X") */ -#elif defined(__GNUC__) - #if __GNUC__ >= 8 - #define pragma_unroll_5 _Pragma("GCC unroll 5") - #define pragma_unroll_7 _Pragma("GCC unroll 7") - #else - #pragma GCC optimize ("unroll-loops") - #define pragma_unroll_5 - #define pragma_unroll_7 - #endif -#else - /* MSVC doesn't have C99's _Pragma() */ - #define pragma_unroll_5 - #define pragma_unroll_7 -#endif - - -#ifndef NDEBUG -#define ASSERT_TABLE_IS_COMMUTATIVE(t) \ - do { \ - static bool first = true; \ - if (first) { \ - first = false; \ - pragma_unroll_7 \ - for (unsigned r = 0; r < ARRAY_SIZE(t); r++) { \ - pragma_unroll_7 \ - for (unsigned c = 0; c < ARRAY_SIZE(t[0]); c++) \ - assert(t[r][c] == t[c][r]); \ - } \ - } \ - } while (false) - -#define ASSERT_TABLE_IS_DIAGONAL(t) \ - do { \ - static bool first = true; \ - if (first) { \ - first = false; \ - pragma_unroll_7 \ - for (unsigned r = 0; r < ARRAY_SIZE(t); r++) \ - assert(t[r][r] == r); \ - } \ - } while (false) - -#else -#define ASSERT_TABLE_IS_COMMUTATIVE(t) -#define ASSERT_TABLE_IS_DIAGONAL(t) -#endif /* !defined(NDEBUG) */ - -static enum ssa_ranges -union_ranges(enum ssa_ranges a, enum ssa_ranges b) -{ - static const enum ssa_ranges union_table[last_range + 1][last_range + 1] = { - /* left\right unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - /* unknown */ { _______, _______, _______, _______, _______, _______, _______ }, - /* lt_zero */ { _______, lt_zero, le_zero, ne_zero, _______, ne_zero, le_zero }, - /* le_zero */ { _______, le_zero, le_zero, _______, _______, _______, le_zero }, - /* gt_zero */ { _______, ne_zero, _______, gt_zero, ge_zero, ne_zero, ge_zero }, - /* ge_zero */ { _______, _______, _______, ge_zero, ge_zero, _______, ge_zero }, - /* ne_zero */ { _______, ne_zero, _______, ne_zero, _______, ne_zero, _______ }, - /* eq_zero */ { _______, le_zero, le_zero, ge_zero, ge_zero, _______, eq_zero }, - }; - - ASSERT_TABLE_IS_COMMUTATIVE(union_table); - ASSERT_TABLE_IS_DIAGONAL(union_table); - - return union_table[a][b]; -} - -#ifndef NDEBUG -/* Verify that the 'unknown' entry in each row (or column) of the table is the - * union of all the other values in the row (or column). - */ -#define ASSERT_UNION_OF_OTHERS_MATCHES_UNKNOWN_2_SOURCE(t) \ - do { \ - static bool first = true; \ - if (first) { \ - first = false; \ - pragma_unroll_7 \ - for (unsigned i = 0; i < last_range; i++) { \ - enum ssa_ranges col_range = t[i][unknown + 1]; \ - enum ssa_ranges row_range = t[unknown + 1][i]; \ - \ - pragma_unroll_5 \ - for (unsigned j = unknown + 2; j < last_range; j++) { \ - col_range = union_ranges(col_range, t[i][j]); \ - row_range = union_ranges(row_range, t[j][i]); \ - } \ - \ - assert(col_range == t[i][unknown]); \ - assert(row_range == t[unknown][i]); \ - } \ - } \ - } while (false) - -/* For most operations, the union of ranges for a strict inequality and - * equality should be the range of the non-strict inequality (e.g., - * union_ranges(range(op(lt_zero), range(op(eq_zero))) == range(op(le_zero)). - * - * Does not apply to selection-like opcodes (bcsel, fmin, fmax, etc.). - */ -#define ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_1_SOURCE(t) \ - do { \ - assert(union_ranges(t[lt_zero], t[eq_zero]) == t[le_zero]); \ - assert(union_ranges(t[gt_zero], t[eq_zero]) == t[ge_zero]); \ - } while (false) - -#define ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_2_SOURCE(t) \ - do { \ - static bool first = true; \ - if (first) { \ - first = false; \ - pragma_unroll_7 \ - for (unsigned i = 0; i < last_range; i++) { \ - assert(union_ranges(t[i][lt_zero], t[i][eq_zero]) == t[i][le_zero]); \ - assert(union_ranges(t[i][gt_zero], t[i][eq_zero]) == t[i][ge_zero]); \ - assert(union_ranges(t[lt_zero][i], t[eq_zero][i]) == t[le_zero][i]); \ - assert(union_ranges(t[gt_zero][i], t[eq_zero][i]) == t[ge_zero][i]); \ - } \ - } \ - } while (false) - -/* Several other unordered tuples span the range of "everything." Each should - * have the same value as unknown: (lt_zero, ge_zero), (le_zero, gt_zero), and - * (eq_zero, ne_zero). union_ranges is already commutative, so only one - * ordering needs to be checked. - * - * Does not apply to selection-like opcodes (bcsel, fmin, fmax, etc.). - * - * In cases where this can be used, it is unnecessary to also use - * ASSERT_UNION_OF_OTHERS_MATCHES_UNKNOWN_*_SOURCE. For any range X, - * union_ranges(X, X) == X. The disjoint ranges cover all of the non-unknown - * possibilities, so the union of all the unions of disjoint ranges is - * equivalent to the union of "others." - */ -#define ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_1_SOURCE(t) \ - do { \ - assert(union_ranges(t[lt_zero], t[ge_zero]) == t[unknown]); \ - assert(union_ranges(t[le_zero], t[gt_zero]) == t[unknown]); \ - assert(union_ranges(t[eq_zero], t[ne_zero]) == t[unknown]); \ - } while (false) - -#define ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_2_SOURCE(t) \ - do { \ - static bool first = true; \ - if (first) { \ - first = false; \ - pragma_unroll_7 \ - for (unsigned i = 0; i < last_range; i++) { \ - assert(union_ranges(t[i][lt_zero], t[i][ge_zero]) == \ - t[i][unknown]); \ - assert(union_ranges(t[i][le_zero], t[i][gt_zero]) == \ - t[i][unknown]); \ - assert(union_ranges(t[i][eq_zero], t[i][ne_zero]) == \ - t[i][unknown]); \ - \ - assert(union_ranges(t[lt_zero][i], t[ge_zero][i]) == \ - t[unknown][i]); \ - assert(union_ranges(t[le_zero][i], t[gt_zero][i]) == \ - t[unknown][i]); \ - assert(union_ranges(t[eq_zero][i], t[ne_zero][i]) == \ - t[unknown][i]); \ - } \ - } \ - } while (false) - -#else -#define ASSERT_UNION_OF_OTHERS_MATCHES_UNKNOWN_2_SOURCE(t) -#define ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_1_SOURCE(t) -#define ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_2_SOURCE(t) -#define ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_1_SOURCE(t) -#define ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_2_SOURCE(t) -#endif /* !defined(NDEBUG) */ - -struct fp_query { - struct analysis_query head; - const nir_alu_instr *instr; - unsigned src; - nir_alu_type use_type; -}; - -static void -push_fp_query(struct analysis_state *state, const nir_alu_instr *alu, unsigned src, nir_alu_type type) -{ - struct fp_query *pushed_q = push_analysis_query(state, sizeof(struct fp_query)); - pushed_q->instr = alu; - pushed_q->src = src; - pushed_q->use_type = type == nir_type_invalid ? nir_alu_src_type(alu, src) : type; -} - -static uintptr_t -get_fp_key(struct analysis_query *q) -{ - struct fp_query *fp_q = (struct fp_query *)q; - const nir_src *src = &fp_q->instr->src[fp_q->src].src; - - if (!src->is_ssa || src->ssa->parent_instr->type != nir_instr_type_alu) - return 0; - - uintptr_t type_encoding; - uintptr_t ptr = (uintptr_t)nir_instr_as_alu(src->ssa->parent_instr); - - /* The low 2 bits have to be zero or this whole scheme falls apart. */ - assert((ptr & 0x3) == 0); - - /* NIR is typeless in the sense that sequences of bits have whatever - * meaning is attached to them by the instruction that consumes them. - * However, the number of bits must match between producer and consumer. - * As a result, the number of bits does not need to be encoded here. - */ - switch (nir_alu_type_get_base_type(fp_q->use_type)) { - case nir_type_int: type_encoding = 0; break; - case nir_type_uint: type_encoding = 1; break; - case nir_type_bool: type_encoding = 2; break; - case nir_type_float: type_encoding = 3; break; - default: unreachable("Invalid base type."); - } - - return ptr | type_encoding; -} - -/** - * Analyze an expression to determine the range of its result - * - * The end result of this analysis is a token that communicates something - * about the range of values. There's an implicit grammar that produces - * tokens from sequences of literal values, other tokens, and operations. - * This function implements this grammar as a recursive-descent parser. Some - * (but not all) of the grammar is listed in-line in the function. - */ -static void -process_fp_query(struct analysis_state *state, struct analysis_query *aq, uint32_t *result, - const uint32_t *src_res) -{ - /* Ensure that the _Pragma("GCC unroll 7") above are correct. */ - STATIC_ASSERT(last_range + 1 == 7); - - struct fp_query q = *(struct fp_query *)aq; - const nir_alu_instr *instr = q.instr; - unsigned src = q.src; - nir_alu_type use_type = q.use_type; - - if (!instr->src[src].src.is_ssa) { - *result = pack_data((struct ssa_result_range){unknown, false, false, false}); - return; - } - - if (nir_src_is_const(instr->src[src].src)) { - *result = pack_data(analyze_constant(instr, src, use_type)); - return; - } - - if (instr->src[src].src.ssa->parent_instr->type != nir_instr_type_alu) { - *result = pack_data((struct ssa_result_range){unknown, false, false, false}); - return; - } - - const struct nir_alu_instr *const alu = - nir_instr_as_alu(instr->src[src].src.ssa->parent_instr); - - /* Bail if the type of the instruction generating the value does not match - * the type the value will be interpreted as. int/uint/bool can be - * reinterpreted trivially. The most important cases are between float and - * non-float. - */ - if (alu->op != nir_op_mov && alu->op != nir_op_bcsel) { - const nir_alu_type use_base_type = - nir_alu_type_get_base_type(use_type); - const nir_alu_type src_base_type = - nir_alu_type_get_base_type(nir_op_infos[alu->op].output_type); - - if (use_base_type != src_base_type && - (use_base_type == nir_type_float || - src_base_type == nir_type_float)) { - *result = pack_data((struct ssa_result_range){unknown, false, false, false}); - return; - } - } - - if (!aq->pushed_queries) { - switch (alu->op) { - case nir_op_bcsel: - push_fp_query(state, alu, 1, use_type); - push_fp_query(state, alu, 2, use_type); - return; - case nir_op_mov: - push_fp_query(state, alu, 0, use_type); - return; - case nir_op_i2f32: - case nir_op_u2f32: - case nir_op_fabs: - case nir_op_fexp2: - case nir_op_frcp: - case nir_op_fneg: - case nir_op_fsat: - case nir_op_fsign: - case nir_op_ffloor: - case nir_op_fceil: - case nir_op_ftrunc: - case nir_op_fdot2: - case nir_op_fdot3: - case nir_op_fdot4: - case nir_op_fdot8: - case nir_op_fdot16: - case nir_op_fdot2_replicated: - case nir_op_fdot3_replicated: - case nir_op_fdot4_replicated: - case nir_op_fdot8_replicated: - case nir_op_fdot16_replicated: - push_fp_query(state, alu, 0, nir_type_invalid); - return; - case nir_op_fadd: - case nir_op_fmax: - case nir_op_fmin: - case nir_op_fmul: - case nir_op_fmulz: - case nir_op_fpow: - push_fp_query(state, alu, 0, nir_type_invalid); - push_fp_query(state, alu, 1, nir_type_invalid); - return; - case nir_op_ffma: - case nir_op_flrp: - push_fp_query(state, alu, 0, nir_type_invalid); - push_fp_query(state, alu, 1, nir_type_invalid); - push_fp_query(state, alu, 2, nir_type_invalid); - return; - default: - break; - } - } - - struct ssa_result_range r = {unknown, false, false, false}; - - /* ge_zero: ge_zero + ge_zero - * - * gt_zero: gt_zero + eq_zero - * | gt_zero + ge_zero - * | eq_zero + gt_zero # Addition is commutative - * | ge_zero + gt_zero # Addition is commutative - * | gt_zero + gt_zero - * ; - * - * le_zero: le_zero + le_zero - * - * lt_zero: lt_zero + eq_zero - * | lt_zero + le_zero - * | eq_zero + lt_zero # Addition is commutative - * | le_zero + lt_zero # Addition is commutative - * | lt_zero + lt_zero - * ; - * - * ne_zero: eq_zero + ne_zero - * | ne_zero + eq_zero # Addition is commutative - * ; - * - * eq_zero: eq_zero + eq_zero - * ; - * - * All other cases are 'unknown'. The seeming odd entry is (ne_zero, - * ne_zero), but that could be (-5, +5) which is not ne_zero. - */ - static const enum ssa_ranges fadd_table[last_range + 1][last_range + 1] = { - /* left\right unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - /* unknown */ { _______, _______, _______, _______, _______, _______, _______ }, - /* lt_zero */ { _______, lt_zero, lt_zero, _______, _______, _______, lt_zero }, - /* le_zero */ { _______, lt_zero, le_zero, _______, _______, _______, le_zero }, - /* gt_zero */ { _______, _______, _______, gt_zero, gt_zero, _______, gt_zero }, - /* ge_zero */ { _______, _______, _______, gt_zero, ge_zero, _______, ge_zero }, - /* ne_zero */ { _______, _______, _______, _______, _______, _______, ne_zero }, - /* eq_zero */ { _______, lt_zero, le_zero, gt_zero, ge_zero, ne_zero, eq_zero }, - }; - - ASSERT_TABLE_IS_COMMUTATIVE(fadd_table); - ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_2_SOURCE(fadd_table); - ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_2_SOURCE(fadd_table); - - /* Due to flush-to-zero semanatics of floating-point numbers with very - * small mangnitudes, we can never really be sure a result will be - * non-zero. - * - * ge_zero: ge_zero * ge_zero - * | ge_zero * gt_zero - * | ge_zero * eq_zero - * | le_zero * lt_zero - * | lt_zero * le_zero # Multiplication is commutative - * | le_zero * le_zero - * | gt_zero * ge_zero # Multiplication is commutative - * | eq_zero * ge_zero # Multiplication is commutative - * | a * a # Left source == right source - * | gt_zero * gt_zero - * | lt_zero * lt_zero - * ; - * - * le_zero: ge_zero * le_zero - * | ge_zero * lt_zero - * | lt_zero * ge_zero # Multiplication is commutative - * | le_zero * ge_zero # Multiplication is commutative - * | le_zero * gt_zero - * | lt_zero * gt_zero - * | gt_zero * lt_zero # Multiplication is commutative - * ; - * - * eq_zero: eq_zero * - * * eq_zero # Multiplication is commutative - * - * All other cases are 'unknown'. - */ - static const enum ssa_ranges fmul_table[last_range + 1][last_range + 1] = { - /* left\right unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - /* unknown */ { _______, _______, _______, _______, _______, _______, eq_zero }, - /* lt_zero */ { _______, ge_zero, ge_zero, le_zero, le_zero, _______, eq_zero }, - /* le_zero */ { _______, ge_zero, ge_zero, le_zero, le_zero, _______, eq_zero }, - /* gt_zero */ { _______, le_zero, le_zero, ge_zero, ge_zero, _______, eq_zero }, - /* ge_zero */ { _______, le_zero, le_zero, ge_zero, ge_zero, _______, eq_zero }, - /* ne_zero */ { _______, _______, _______, _______, _______, _______, eq_zero }, - /* eq_zero */ { eq_zero, eq_zero, eq_zero, eq_zero, eq_zero, eq_zero, eq_zero } - }; - - ASSERT_TABLE_IS_COMMUTATIVE(fmul_table); - ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_2_SOURCE(fmul_table); - ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_2_SOURCE(fmul_table); - - static const enum ssa_ranges fneg_table[last_range + 1] = { - /* unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - _______, gt_zero, ge_zero, lt_zero, le_zero, ne_zero, eq_zero - }; - - ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_1_SOURCE(fneg_table); - ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_1_SOURCE(fneg_table); - - - switch (alu->op) { - case nir_op_b2f32: - case nir_op_b2i32: - /* b2f32 will generate either 0.0 or 1.0. This case is trivial. - * - * b2i32 will generate either 0x00000000 or 0x00000001. When those bit - * patterns are interpreted as floating point, they are 0.0 and - * 1.401298464324817e-45. The latter is subnormal, but it is finite and - * a number. - */ - r = (struct ssa_result_range){ge_zero, alu->op == nir_op_b2f32, true, true}; - break; - - case nir_op_bcsel: { - const struct ssa_result_range left = unpack_data(src_res[0]); - const struct ssa_result_range right = unpack_data(src_res[1]); - - r.is_integral = left.is_integral && right.is_integral; - - /* This could be better, but it would require a lot of work. For - * example, the result of the following is a number: - * - * bcsel(a > 0.0, a, 38.6) - * - * If the result of 'a > 0.0' is true, then the use of 'a' in the true - * part of the bcsel must be a number. - * - * Other cases are even more challenging. - * - * bcsel(a > 0.5, a - 0.5, 0.0) - */ - r.is_a_number = left.is_a_number && right.is_a_number; - r.is_finite = left.is_finite && right.is_finite; - - r.range = union_ranges(left.range, right.range); - break; - } - - case nir_op_i2f32: - case nir_op_u2f32: - r = unpack_data(src_res[0]); - - r.is_integral = true; - r.is_a_number = true; - r.is_finite = true; - - if (r.range == unknown && alu->op == nir_op_u2f32) - r.range = ge_zero; - - break; - - case nir_op_fabs: - r = unpack_data(src_res[0]); - - switch (r.range) { - case unknown: - case le_zero: - case ge_zero: - r.range = ge_zero; - break; - - case lt_zero: - case gt_zero: - case ne_zero: - r.range = gt_zero; - break; - - case eq_zero: - break; - } - - break; - - case nir_op_fadd: { - const struct ssa_result_range left = unpack_data(src_res[0]); - const struct ssa_result_range right = unpack_data(src_res[1]); - - r.is_integral = left.is_integral && right.is_integral; - r.range = fadd_table[left.range][right.range]; - - /* X + Y is NaN if either operand is NaN or if one operand is +Inf and - * the other is -Inf. If neither operand is NaN and at least one of the - * operands is finite, then the result cannot be NaN. - */ - r.is_a_number = left.is_a_number && right.is_a_number && - (left.is_finite || right.is_finite); - break; - } - - case nir_op_fexp2: { - /* If the parameter might be less than zero, the mathematically result - * will be on (0, 1). For sufficiently large magnitude negative - * parameters, the result will flush to zero. - */ - static const enum ssa_ranges table[last_range + 1] = { - /* unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - ge_zero, ge_zero, ge_zero, gt_zero, gt_zero, ge_zero, gt_zero - }; - - r = unpack_data(src_res[0]); - - ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_1_SOURCE(table); - ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_1_SOURCE(table); - - r.is_integral = r.is_integral && is_not_negative(r.range); - r.range = table[r.range]; - - /* Various cases can result in NaN, so assume the worst. */ - r.is_finite = false; - r.is_a_number = false; - break; - } - - case nir_op_fmax: { - const struct ssa_result_range left = unpack_data(src_res[0]); - const struct ssa_result_range right = unpack_data(src_res[1]); - - r.is_integral = left.is_integral && right.is_integral; - - /* This is conservative. It may be possible to determine that the - * result must be finite in more cases, but it would take some effort to - * work out all the corners. For example, fmax({lt_zero, finite}, - * {lt_zero}) should result in {lt_zero, finite}. - */ - r.is_finite = left.is_finite && right.is_finite; - - /* If one source is NaN, fmax always picks the other source. */ - r.is_a_number = left.is_a_number || right.is_a_number; - - /* gt_zero: fmax(gt_zero, *) - * | fmax(*, gt_zero) # Treat fmax as commutative - * ; - * - * ge_zero: fmax(ge_zero, ne_zero) - * | fmax(ge_zero, lt_zero) - * | fmax(ge_zero, le_zero) - * | fmax(ge_zero, eq_zero) - * | fmax(ne_zero, ge_zero) # Treat fmax as commutative - * | fmax(lt_zero, ge_zero) # Treat fmax as commutative - * | fmax(le_zero, ge_zero) # Treat fmax as commutative - * | fmax(eq_zero, ge_zero) # Treat fmax as commutative - * | fmax(ge_zero, ge_zero) - * ; - * - * le_zero: fmax(le_zero, lt_zero) - * | fmax(lt_zero, le_zero) # Treat fmax as commutative - * | fmax(le_zero, le_zero) - * ; - * - * lt_zero: fmax(lt_zero, lt_zero) - * ; - * - * ne_zero: fmax(ne_zero, lt_zero) - * | fmax(lt_zero, ne_zero) # Treat fmax as commutative - * | fmax(ne_zero, ne_zero) - * ; - * - * eq_zero: fmax(eq_zero, le_zero) - * | fmax(eq_zero, lt_zero) - * | fmax(le_zero, eq_zero) # Treat fmax as commutative - * | fmax(lt_zero, eq_zero) # Treat fmax as commutative - * | fmax(eq_zero, eq_zero) - * ; - * - * All other cases are 'unknown'. - */ - static const enum ssa_ranges table[last_range + 1][last_range + 1] = { - /* left\right unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - /* unknown */ { _______, _______, _______, gt_zero, ge_zero, _______, _______ }, - /* lt_zero */ { _______, lt_zero, le_zero, gt_zero, ge_zero, ne_zero, eq_zero }, - /* le_zero */ { _______, le_zero, le_zero, gt_zero, ge_zero, _______, eq_zero }, - /* gt_zero */ { gt_zero, gt_zero, gt_zero, gt_zero, gt_zero, gt_zero, gt_zero }, - /* ge_zero */ { ge_zero, ge_zero, ge_zero, gt_zero, ge_zero, ge_zero, ge_zero }, - /* ne_zero */ { _______, ne_zero, _______, gt_zero, ge_zero, ne_zero, _______ }, - /* eq_zero */ { _______, eq_zero, eq_zero, gt_zero, ge_zero, _______, eq_zero } - }; - - /* Treat fmax as commutative. */ - ASSERT_TABLE_IS_COMMUTATIVE(table); - ASSERT_TABLE_IS_DIAGONAL(table); - ASSERT_UNION_OF_OTHERS_MATCHES_UNKNOWN_2_SOURCE(table); - - r.range = table[left.range][right.range]; - - /* Recall that when either value is NaN, fmax will pick the other value. - * This means the result range of the fmax will either be the "ideal" - * result range (calculated above) or the range of the non-NaN value. - */ - if (!left.is_a_number) - r.range = union_ranges(r.range, right.range); - - if (!right.is_a_number) - r.range = union_ranges(r.range, left.range); - - break; - } - - case nir_op_fmin: { - const struct ssa_result_range left = unpack_data(src_res[0]); - const struct ssa_result_range right = unpack_data(src_res[1]); - - r.is_integral = left.is_integral && right.is_integral; - - /* This is conservative. It may be possible to determine that the - * result must be finite in more cases, but it would take some effort to - * work out all the corners. For example, fmin({gt_zero, finite}, - * {gt_zero}) should result in {gt_zero, finite}. - */ - r.is_finite = left.is_finite && right.is_finite; - - /* If one source is NaN, fmin always picks the other source. */ - r.is_a_number = left.is_a_number || right.is_a_number; - - /* lt_zero: fmin(lt_zero, *) - * | fmin(*, lt_zero) # Treat fmin as commutative - * ; - * - * le_zero: fmin(le_zero, ne_zero) - * | fmin(le_zero, gt_zero) - * | fmin(le_zero, ge_zero) - * | fmin(le_zero, eq_zero) - * | fmin(ne_zero, le_zero) # Treat fmin as commutative - * | fmin(gt_zero, le_zero) # Treat fmin as commutative - * | fmin(ge_zero, le_zero) # Treat fmin as commutative - * | fmin(eq_zero, le_zero) # Treat fmin as commutative - * | fmin(le_zero, le_zero) - * ; - * - * ge_zero: fmin(ge_zero, gt_zero) - * | fmin(gt_zero, ge_zero) # Treat fmin as commutative - * | fmin(ge_zero, ge_zero) - * ; - * - * gt_zero: fmin(gt_zero, gt_zero) - * ; - * - * ne_zero: fmin(ne_zero, gt_zero) - * | fmin(gt_zero, ne_zero) # Treat fmin as commutative - * | fmin(ne_zero, ne_zero) - * ; - * - * eq_zero: fmin(eq_zero, ge_zero) - * | fmin(eq_zero, gt_zero) - * | fmin(ge_zero, eq_zero) # Treat fmin as commutative - * | fmin(gt_zero, eq_zero) # Treat fmin as commutative - * | fmin(eq_zero, eq_zero) - * ; - * - * All other cases are 'unknown'. - */ - static const enum ssa_ranges table[last_range + 1][last_range + 1] = { - /* left\right unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - /* unknown */ { _______, lt_zero, le_zero, _______, _______, _______, _______ }, - /* lt_zero */ { lt_zero, lt_zero, lt_zero, lt_zero, lt_zero, lt_zero, lt_zero }, - /* le_zero */ { le_zero, lt_zero, le_zero, le_zero, le_zero, le_zero, le_zero }, - /* gt_zero */ { _______, lt_zero, le_zero, gt_zero, ge_zero, ne_zero, eq_zero }, - /* ge_zero */ { _______, lt_zero, le_zero, ge_zero, ge_zero, _______, eq_zero }, - /* ne_zero */ { _______, lt_zero, le_zero, ne_zero, _______, ne_zero, _______ }, - /* eq_zero */ { _______, lt_zero, le_zero, eq_zero, eq_zero, _______, eq_zero } - }; - - /* Treat fmin as commutative. */ - ASSERT_TABLE_IS_COMMUTATIVE(table); - ASSERT_TABLE_IS_DIAGONAL(table); - ASSERT_UNION_OF_OTHERS_MATCHES_UNKNOWN_2_SOURCE(table); - - r.range = table[left.range][right.range]; - - /* Recall that when either value is NaN, fmin will pick the other value. - * This means the result range of the fmin will either be the "ideal" - * result range (calculated above) or the range of the non-NaN value. - */ - if (!left.is_a_number) - r.range = union_ranges(r.range, right.range); - - if (!right.is_a_number) - r.range = union_ranges(r.range, left.range); - - break; - } - - case nir_op_fmul: - case nir_op_fmulz: { - const struct ssa_result_range left = unpack_data(src_res[0]); - const struct ssa_result_range right = unpack_data(src_res[1]); - - r.is_integral = left.is_integral && right.is_integral; - - /* x * x => ge_zero */ - if (left.range != eq_zero && nir_alu_srcs_equal(alu, alu, 0, 1)) { - /* Even if x > 0, the result of x*x can be zero when x is, for - * example, a subnormal number. - */ - r.range = ge_zero; - } else if (left.range != eq_zero && nir_alu_srcs_negative_equal(alu, alu, 0, 1)) { - /* -x * x => le_zero. */ - r.range = le_zero; - } else - r.range = fmul_table[left.range][right.range]; - - if (alu->op == nir_op_fmul) { - /* Mulitpliation produces NaN for X * NaN and for 0 * ±Inf. If both - * operands are numbers and either both are finite or one is finite and - * the other cannot be zero, then the result must be a number. - */ - r.is_a_number = (left.is_a_number && right.is_a_number) && - ((left.is_finite && right.is_finite) || - (!is_not_zero(left.range) && right.is_finite) || - (left.is_finite && !is_not_zero(right.range))); - } else { - /* nir_op_fmulz: unlike nir_op_fmul, 0 * ±Inf is a number. */ - r.is_a_number = left.is_a_number && right.is_a_number; - } - - break; - } - - case nir_op_frcp: - r = (struct ssa_result_range){ - unpack_data(src_res[0]).range, - false, - false, /* Various cases can result in NaN, so assume the worst. */ - false /* " " " " " " " " " " */ - }; - break; - - case nir_op_mov: - r = unpack_data(src_res[0]); - break; - - case nir_op_fneg: - r = unpack_data(src_res[0]); - r.range = fneg_table[r.range]; - break; - - case nir_op_fsat: { - const struct ssa_result_range left = unpack_data(src_res[0]); - - /* fsat(NaN) = 0. */ - r.is_a_number = true; - r.is_finite = true; - - switch (left.range) { - case le_zero: - case lt_zero: - case eq_zero: - r.range = eq_zero; - r.is_integral = true; - break; - - case gt_zero: - /* fsat is equivalent to fmin(fmax(X, 0.0), 1.0), so if X is not a - * number, the result will be 0. - */ - r.range = left.is_a_number ? gt_zero : ge_zero; - r.is_integral = left.is_integral; - break; - - case ge_zero: - case ne_zero: - case unknown: - /* Since the result must be in [0, 1], the value must be >= 0. */ - r.range = ge_zero; - r.is_integral = left.is_integral; - break; - } - break; - } - - case nir_op_fsign: - r = (struct ssa_result_range){ - unpack_data(src_res[0]).range, - true, - true, /* fsign is -1, 0, or 1, even for NaN, so it must be a number. */ - true /* fsign is -1, 0, or 1, even for NaN, so it must be finite. */ - }; - break; - - case nir_op_fsqrt: - case nir_op_frsq: - r = (struct ssa_result_range){ge_zero, false, false, false}; - break; - - case nir_op_ffloor: { - const struct ssa_result_range left = unpack_data(src_res[0]); - - r.is_integral = true; - - /* In IEEE 754, floor(NaN) is NaN, and floor(±Inf) is ±Inf. See - * https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/functions/floor.html - */ - r.is_a_number = left.is_a_number; - r.is_finite = left.is_finite; - - if (left.is_integral || left.range == le_zero || left.range == lt_zero) - r.range = left.range; - else if (left.range == ge_zero || left.range == gt_zero) - r.range = ge_zero; - else if (left.range == ne_zero) - r.range = unknown; - - break; - } - - case nir_op_fceil: { - const struct ssa_result_range left = unpack_data(src_res[0]); - - r.is_integral = true; - - /* In IEEE 754, ceil(NaN) is NaN, and ceil(±Inf) is ±Inf. See - * https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/functions/ceil.html - */ - r.is_a_number = left.is_a_number; - r.is_finite = left.is_finite; - - if (left.is_integral || left.range == ge_zero || left.range == gt_zero) - r.range = left.range; - else if (left.range == le_zero || left.range == lt_zero) - r.range = le_zero; - else if (left.range == ne_zero) - r.range = unknown; - - break; - } - - case nir_op_ftrunc: { - const struct ssa_result_range left = unpack_data(src_res[0]); - - r.is_integral = true; - - /* In IEEE 754, trunc(NaN) is NaN, and trunc(±Inf) is ±Inf. See - * https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/functions/trunc.html - */ - r.is_a_number = left.is_a_number; - r.is_finite = left.is_finite; - - if (left.is_integral) - r.range = left.range; - else if (left.range == ge_zero || left.range == gt_zero) - r.range = ge_zero; - else if (left.range == le_zero || left.range == lt_zero) - r.range = le_zero; - else if (left.range == ne_zero) - r.range = unknown; - - break; - } - - case nir_op_flt: - case nir_op_fge: - case nir_op_feq: - case nir_op_fneu: - case nir_op_ilt: - case nir_op_ige: - case nir_op_ieq: - case nir_op_ine: - case nir_op_ult: - case nir_op_uge: - /* Boolean results are 0 or -1. */ - r = (struct ssa_result_range){le_zero, false, true, false}; - break; - - case nir_op_fdot2: - case nir_op_fdot3: - case nir_op_fdot4: - case nir_op_fdot8: - case nir_op_fdot16: - case nir_op_fdot2_replicated: - case nir_op_fdot3_replicated: - case nir_op_fdot4_replicated: - case nir_op_fdot8_replicated: - case nir_op_fdot16_replicated: { - const struct ssa_result_range left = unpack_data(src_res[0]); - - /* If the two sources are the same SSA value, then the result is either - * NaN or some number >= 0. If one source is the negation of the other, - * the result is either NaN or some number <= 0. - * - * In either of these two cases, if one source is a number, then the - * other must also be a number. Since it should not be possible to get - * Inf-Inf in the dot-product, the result must also be a number. - */ - if (nir_alu_srcs_equal(alu, alu, 0, 1)) { - r = (struct ssa_result_range){ge_zero, false, left.is_a_number, false }; - } else if (nir_alu_srcs_negative_equal(alu, alu, 0, 1)) { - r = (struct ssa_result_range){le_zero, false, left.is_a_number, false }; - } else { - r = (struct ssa_result_range){unknown, false, false, false}; - } - break; - } - - case nir_op_fpow: { - /* Due to flush-to-zero semanatics of floating-point numbers with very - * small mangnitudes, we can never really be sure a result will be - * non-zero. - * - * NIR uses pow() and powf() to constant evaluate nir_op_fpow. The man - * page for that function says: - * - * If y is 0, the result is 1.0 (even if x is a NaN). - * - * gt_zero: pow(*, eq_zero) - * | pow(eq_zero, lt_zero) # 0^-y = +inf - * | pow(eq_zero, le_zero) # 0^-y = +inf or 0^0 = 1.0 - * ; - * - * eq_zero: pow(eq_zero, gt_zero) - * ; - * - * ge_zero: pow(gt_zero, gt_zero) - * | pow(gt_zero, ge_zero) - * | pow(gt_zero, lt_zero) - * | pow(gt_zero, le_zero) - * | pow(gt_zero, ne_zero) - * | pow(gt_zero, unknown) - * | pow(ge_zero, gt_zero) - * | pow(ge_zero, ge_zero) - * | pow(ge_zero, lt_zero) - * | pow(ge_zero, le_zero) - * | pow(ge_zero, ne_zero) - * | pow(ge_zero, unknown) - * | pow(eq_zero, ge_zero) # 0^0 = 1.0 or 0^+y = 0.0 - * | pow(eq_zero, ne_zero) # 0^-y = +inf or 0^+y = 0.0 - * | pow(eq_zero, unknown) # union of all other y cases - * ; - * - * All other cases are unknown. - * - * We could do better if the right operand is a constant, integral - * value. - */ - static const enum ssa_ranges table[last_range + 1][last_range + 1] = { - /* left\right unknown lt_zero le_zero gt_zero ge_zero ne_zero eq_zero */ - /* unknown */ { _______, _______, _______, _______, _______, _______, gt_zero }, - /* lt_zero */ { _______, _______, _______, _______, _______, _______, gt_zero }, - /* le_zero */ { _______, _______, _______, _______, _______, _______, gt_zero }, - /* gt_zero */ { ge_zero, ge_zero, ge_zero, ge_zero, ge_zero, ge_zero, gt_zero }, - /* ge_zero */ { ge_zero, ge_zero, ge_zero, ge_zero, ge_zero, ge_zero, gt_zero }, - /* ne_zero */ { _______, _______, _______, _______, _______, _______, gt_zero }, - /* eq_zero */ { ge_zero, gt_zero, gt_zero, eq_zero, ge_zero, ge_zero, gt_zero }, - }; - - const struct ssa_result_range left = unpack_data(src_res[0]); - const struct ssa_result_range right = unpack_data(src_res[1]); - - ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_2_SOURCE(table); - ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_2_SOURCE(table); - - r.is_integral = left.is_integral && right.is_integral && - is_not_negative(right.range); - r.range = table[left.range][right.range]; - - /* Various cases can result in NaN, so assume the worst. */ - r.is_a_number = false; - - break; - } - - case nir_op_ffma: { - const struct ssa_result_range first = unpack_data(src_res[0]); - const struct ssa_result_range second = unpack_data(src_res[1]); - const struct ssa_result_range third = unpack_data(src_res[2]); - - r.is_integral = first.is_integral && second.is_integral && - third.is_integral; - - /* Various cases can result in NaN, so assume the worst. */ - r.is_a_number = false; - - enum ssa_ranges fmul_range; - - if (first.range != eq_zero && nir_alu_srcs_equal(alu, alu, 0, 1)) { - /* See handling of nir_op_fmul for explanation of why ge_zero is the - * range. - */ - fmul_range = ge_zero; - } else if (first.range != eq_zero && nir_alu_srcs_negative_equal(alu, alu, 0, 1)) { - /* -x * x => le_zero */ - fmul_range = le_zero; - } else - fmul_range = fmul_table[first.range][second.range]; - - r.range = fadd_table[fmul_range][third.range]; - break; - } - - case nir_op_flrp: { - const struct ssa_result_range first = unpack_data(src_res[0]); - const struct ssa_result_range second = unpack_data(src_res[1]); - const struct ssa_result_range third = unpack_data(src_res[2]); - - r.is_integral = first.is_integral && second.is_integral && - third.is_integral; - - /* Various cases can result in NaN, so assume the worst. */ - r.is_a_number = false; - - /* Decompose the flrp to first + third * (second + -first) */ - const enum ssa_ranges inner_fadd_range = - fadd_table[second.range][fneg_table[first.range]]; - - const enum ssa_ranges fmul_range = - fmul_table[third.range][inner_fadd_range]; - - r.range = fadd_table[first.range][fmul_range]; - break; - } - - default: - r = (struct ssa_result_range){unknown, false, false, false}; - break; - } - - if (r.range == eq_zero) - r.is_integral = true; - - /* Just like isfinite(), the is_finite flag implies the value is a number. */ - assert((int) r.is_finite <= (int) r.is_a_number); - - *result = pack_data(r); -} - -#undef _______ - -struct ssa_result_range -nir_analyze_range(struct hash_table *range_ht, - const nir_alu_instr *alu, unsigned src) -{ - struct fp_query query_alloc[64]; - uint32_t result_alloc[64]; - - struct analysis_state state; - state.range_ht = range_ht; - util_dynarray_init_from_stack(&state.query_stack, query_alloc, sizeof(query_alloc)); - util_dynarray_init_from_stack(&state.result_stack, result_alloc, sizeof(result_alloc)); - state.query_size = sizeof(struct fp_query); - state.get_key = &get_fp_key; - state.process_query = &process_fp_query; - - push_fp_query(&state, alu, src, nir_type_invalid); - - return unpack_data(perform_analysis(&state)); -} - -static uint32_t bitmask(uint32_t size) { - return size >= 32 ? 0xffffffffu : ((uint32_t)1 << size) - 1u; -} - -static uint64_t mul_clamp(uint32_t a, uint32_t b) -{ - if (a != 0 && (a * b) / a != b) - return (uint64_t)UINT32_MAX + 1; - else - return a * b; -} - -/* recursively gather at most "buf_size" phi/bcsel sources */ -static unsigned -search_phi_bcsel(nir_ssa_scalar scalar, nir_ssa_scalar *buf, unsigned buf_size, struct set *visited) -{ - if (_mesa_set_search(visited, scalar.def)) - return 0; - _mesa_set_add(visited, scalar.def); - - if (scalar.def->parent_instr->type == nir_instr_type_phi) { - nir_phi_instr *phi = nir_instr_as_phi(scalar.def->parent_instr); - unsigned num_sources_left = exec_list_length(&phi->srcs); - if (buf_size >= num_sources_left) { - unsigned total_added = 0; - nir_foreach_phi_src(src, phi) { - num_sources_left--; - unsigned added = search_phi_bcsel(nir_get_ssa_scalar(src->src.ssa, scalar.comp), - buf + total_added, buf_size - num_sources_left, visited); - assert(added <= buf_size); - buf_size -= added; - total_added += added; - } - return total_added; - } - } - - if (nir_ssa_scalar_is_alu(scalar)) { - nir_op op = nir_ssa_scalar_alu_op(scalar); - - if ((op == nir_op_bcsel || op == nir_op_b32csel) && buf_size >= 2) { - nir_ssa_scalar src1 = nir_ssa_scalar_chase_alu_src(scalar, 1); - nir_ssa_scalar src2 = nir_ssa_scalar_chase_alu_src(scalar, 2); - - unsigned added = search_phi_bcsel(src1, buf, buf_size - 1, visited); - buf_size -= added; - added += search_phi_bcsel(src2, buf + added, buf_size, visited); - return added; - } - } - - buf[0] = scalar; - return 1; -} - -static nir_variable * -lookup_input(nir_shader *shader, unsigned driver_location) -{ - return nir_find_variable_with_driver_location(shader, nir_var_shader_in, - driver_location); -} - -/* The config here should be generic enough to be correct on any HW. */ -static const nir_unsigned_upper_bound_config default_ub_config = { - .min_subgroup_size = 1u, - .max_subgroup_size = UINT16_MAX, - .max_workgroup_invocations = UINT16_MAX, - - /* max_workgroup_count represents the maximum compute shader / kernel - * dispatchable work size. On most hardware, this is essentially - * unbounded. On some hardware max_workgroup_count[1] and - * max_workgroup_count[2] may be smaller. - */ - .max_workgroup_count = {UINT32_MAX, UINT32_MAX, UINT32_MAX}, - - /* max_workgroup_size is the local invocation maximum. This is generally - * small the OpenGL 4.2 minimum maximum is 1024. - */ - .max_workgroup_size = {UINT16_MAX, UINT16_MAX, UINT16_MAX}, - - .vertex_attrib_max = { - UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, - UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, - UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, - UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, UINT32_MAX, - }, -}; - -struct uub_query { - struct analysis_query head; - nir_ssa_scalar scalar; -}; - -static void -push_uub_query(struct analysis_state *state, nir_ssa_scalar scalar) -{ - struct uub_query *pushed_q = push_analysis_query(state, sizeof(struct uub_query)); - pushed_q->scalar = scalar; -} - -static uintptr_t -get_uub_key(struct analysis_query *q) -{ - nir_ssa_scalar scalar = ((struct uub_query *)q)->scalar; - /* keys can't be 0, so we have to add 1 to the index */ - unsigned shift_amount = ffs(NIR_MAX_VEC_COMPONENTS) - 1; - return nir_ssa_scalar_is_const(scalar) - ? 0 - : ((uintptr_t)(scalar.def->index + 1) << shift_amount) | scalar.comp; -} - -static void -get_intrinsic_uub(struct analysis_state *state, struct uub_query q, uint32_t *result, - const uint32_t *src) -{ - nir_shader *shader = state->shader; - const nir_unsigned_upper_bound_config *config = state->config; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(q.scalar.def->parent_instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_local_invocation_index: - /* The local invocation index is used under the hood by RADV for - * some non-compute-like shaders (eg. LS and NGG). These technically - * run in workgroups on the HW, even though this fact is not exposed - * by the API. - * They can safely use the same code path here as variable sized - * compute-like shader stages. - */ - if (!gl_shader_stage_uses_workgroup(shader->info.stage) || - shader->info.workgroup_size_variable) { - *result = config->max_workgroup_invocations - 1; - } else { - *result = (shader->info.workgroup_size[0] * - shader->info.workgroup_size[1] * - shader->info.workgroup_size[2]) - 1u; - } - break; - case nir_intrinsic_load_local_invocation_id: - if (shader->info.workgroup_size_variable) - *result = config->max_workgroup_size[q.scalar.comp] - 1u; - else - *result = shader->info.workgroup_size[q.scalar.comp] - 1u; - break; - case nir_intrinsic_load_workgroup_id: - *result = config->max_workgroup_count[q.scalar.comp] - 1u; - break; - case nir_intrinsic_load_num_workgroups: - *result = config->max_workgroup_count[q.scalar.comp]; - break; - case nir_intrinsic_load_global_invocation_id: - if (shader->info.workgroup_size_variable) { - *result = mul_clamp(config->max_workgroup_size[q.scalar.comp], - config->max_workgroup_count[q.scalar.comp]) - 1u; - } else { - *result = (shader->info.workgroup_size[q.scalar.comp] * - config->max_workgroup_count[q.scalar.comp]) - 1u; - } - break; - case nir_intrinsic_load_invocation_id: - if (shader->info.stage == MESA_SHADER_TESS_CTRL) - *result = shader->info.tess.tcs_vertices_out - ? (shader->info.tess.tcs_vertices_out - 1) - : 511; /* Generous maximum output patch size of 512 */ - break; - case nir_intrinsic_load_subgroup_invocation: - case nir_intrinsic_first_invocation: - *result = config->max_subgroup_size - 1; - break; - case nir_intrinsic_mbcnt_amd: { - if (!q.head.pushed_queries) { - push_uub_query(state, nir_get_ssa_scalar(intrin->src[1].ssa, 0)); - return; - } else { - uint32_t src0 = config->max_subgroup_size - 1; - uint32_t src1 = src[0]; - if (src0 + src1 >= src0) /* check overflow */ - *result = src0 + src1; - } - break; - } - case nir_intrinsic_load_subgroup_size: - *result = config->max_subgroup_size; - break; - case nir_intrinsic_load_subgroup_id: - case nir_intrinsic_load_num_subgroups: { - uint32_t workgroup_size = config->max_workgroup_invocations; - if (gl_shader_stage_uses_workgroup(shader->info.stage) && - !shader->info.workgroup_size_variable) { - workgroup_size = shader->info.workgroup_size[0] * - shader->info.workgroup_size[1] * - shader->info.workgroup_size[2]; - } - *result = DIV_ROUND_UP(workgroup_size, config->min_subgroup_size); - if (intrin->intrinsic == nir_intrinsic_load_subgroup_id) - (*result)--; - break; - } - case nir_intrinsic_load_input: { - if (shader->info.stage == MESA_SHADER_VERTEX && nir_src_is_const(intrin->src[0])) { - nir_variable *var = lookup_input(shader, nir_intrinsic_base(intrin)); - if (var) { - int loc = var->data.location - VERT_ATTRIB_GENERIC0; - if (loc >= 0) - *result = config->vertex_attrib_max[loc]; - } - } - break; - } - case nir_intrinsic_reduce: - case nir_intrinsic_inclusive_scan: - case nir_intrinsic_exclusive_scan: { - nir_op op = nir_intrinsic_reduction_op(intrin); - if (op == nir_op_umin || op == nir_op_umax || op == nir_op_imin || op == nir_op_imax) { - if (!q.head.pushed_queries) { - push_uub_query(state, nir_get_ssa_scalar(intrin->src[0].ssa, q.scalar.comp)); - return; - } else { - *result = src[0]; - } - } - break; - } - case nir_intrinsic_read_first_invocation: - case nir_intrinsic_read_invocation: - case nir_intrinsic_shuffle: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - case nir_intrinsic_quad_swizzle_amd: - case nir_intrinsic_masked_swizzle_amd: - if (!q.head.pushed_queries) { - push_uub_query(state, nir_get_ssa_scalar(intrin->src[0].ssa, q.scalar.comp)); - return; - } else { - *result = src[0]; - } - break; - case nir_intrinsic_write_invocation_amd: - if (!q.head.pushed_queries) { - push_uub_query(state, nir_get_ssa_scalar(intrin->src[0].ssa, q.scalar.comp)); - push_uub_query(state, nir_get_ssa_scalar(intrin->src[1].ssa, q.scalar.comp)); - return; - } else { - *result = MAX2(src[0], src[1]); - } - break; - case nir_intrinsic_load_tess_rel_patch_id_amd: - case nir_intrinsic_load_tcs_num_patches_amd: - /* Very generous maximum: TCS/TES executed by largest possible workgroup */ - *result = config->max_workgroup_invocations / MAX2(shader->info.tess.tcs_vertices_out, 1u); - break; - case nir_intrinsic_load_typed_buffer_amd: { - const enum pipe_format format = nir_intrinsic_format(intrin); - if (format == PIPE_FORMAT_NONE) - break; - - const struct util_format_description* desc = util_format_description(format); - if (desc->channel[q.scalar.comp].type != UTIL_FORMAT_TYPE_UNSIGNED) - break; - - if (desc->channel[q.scalar.comp].normalized) { - *result = fui(1.0); - break; - } - - const uint32_t chan_max = u_uintN_max(desc->channel[q.scalar.comp].size); - *result = desc->channel[q.scalar.comp].pure_integer ? chan_max : fui(chan_max); - break; - } - case nir_intrinsic_load_scalar_arg_amd: - case nir_intrinsic_load_vector_arg_amd: { - uint32_t upper_bound = nir_intrinsic_arg_upper_bound_u32_amd(intrin); - if (upper_bound) - *result = upper_bound; - break; - } - default: - break; - } -} - -static void -get_alu_uub(struct analysis_state *state, struct uub_query q, uint32_t *result, const uint32_t *src) -{ - nir_op op = nir_ssa_scalar_alu_op(q.scalar); - - /* Early exit for unsupported ALU opcodes. */ - switch (op) { - case nir_op_umin: - case nir_op_imin: - case nir_op_imax: - case nir_op_umax: - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - case nir_op_ishl: - case nir_op_imul: - case nir_op_ushr: - case nir_op_ishr: - case nir_op_iadd: - case nir_op_umod: - case nir_op_udiv: - case nir_op_bcsel: - case nir_op_b32csel: - case nir_op_ubfe: - case nir_op_bfm: - case nir_op_fmul: - case nir_op_fmulz: - case nir_op_extract_u8: - case nir_op_extract_i8: - case nir_op_extract_u16: - case nir_op_extract_i16: - case nir_op_b2i8: - case nir_op_b2i16: - case nir_op_b2i32: - break; - case nir_op_u2u1: - case nir_op_u2u8: - case nir_op_u2u16: - case nir_op_u2u32: - case nir_op_f2u32: - if (nir_ssa_scalar_chase_alu_src(q.scalar, 0).def->bit_size > 32) { - /* If src is >32 bits, return max */ - return; - } - break; - default: - return; - } - - if (!q.head.pushed_queries) { - for (unsigned i = 0; i < nir_op_infos[op].num_inputs; i++) - push_uub_query(state, nir_ssa_scalar_chase_alu_src(q.scalar, i)); - return; - } - - uint32_t max = bitmask(q.scalar.def->bit_size); - switch (op) { - case nir_op_umin: - *result = src[0] < src[1] ? src[0] : src[1]; - break; - case nir_op_imin: - case nir_op_imax: - case nir_op_umax: - *result = src[0] > src[1] ? src[0] : src[1]; - break; - case nir_op_iand: - *result = bitmask(util_last_bit64(src[0])) & bitmask(util_last_bit64(src[1])); - break; - case nir_op_ior: - case nir_op_ixor: - *result = bitmask(util_last_bit64(src[0])) | bitmask(util_last_bit64(src[1])); - break; - case nir_op_ishl: { - uint32_t src1 = MIN2(src[1], q.scalar.def->bit_size - 1u); - if (util_last_bit64(src[0]) + src1 <= q.scalar.def->bit_size) /* check overflow */ - *result = src[0] << src1; - break; - } - case nir_op_imul: - if (src[0] == 0 || (src[0] * src[1]) / src[0] == src[1]) /* check overflow */ - *result = src[0] * src[1]; - break; - case nir_op_ushr: { - nir_ssa_scalar src1_scalar = nir_ssa_scalar_chase_alu_src(q.scalar, 1); - uint32_t mask = q.scalar.def->bit_size - 1u; - if (nir_ssa_scalar_is_const(src1_scalar)) - *result = src[0] >> (nir_ssa_scalar_as_uint(src1_scalar) & mask); - else - *result = src[0]; - break; - } - case nir_op_ishr: { - nir_ssa_scalar src1_scalar = nir_ssa_scalar_chase_alu_src(q.scalar, 1); - uint32_t mask = q.scalar.def->bit_size - 1u; - if (src[0] <= 2147483647 && nir_ssa_scalar_is_const(src1_scalar)) - *result = src[0] >> (nir_ssa_scalar_as_uint(src1_scalar) & mask); - else - *result = src[0]; - break; - } - case nir_op_iadd: - if (src[0] + src[1] >= src[0]) /* check overflow */ - *result = src[0] + src[1]; - break; - case nir_op_umod: - *result = src[1] ? src[1] - 1 : 0; - break; - case nir_op_udiv: { - nir_ssa_scalar src1_scalar = nir_ssa_scalar_chase_alu_src(q.scalar, 1); - if (nir_ssa_scalar_is_const(src1_scalar)) - *result = nir_ssa_scalar_as_uint(src1_scalar) - ? src[0] / nir_ssa_scalar_as_uint(src1_scalar) : 0; - else - *result = src[0]; - break; - } - case nir_op_bcsel: - case nir_op_b32csel: - *result = src[1] > src[2] ? src[1] : src[2]; - break; - case nir_op_ubfe: - *result = bitmask(MIN2(src[2], q.scalar.def->bit_size)); - break; - case nir_op_bfm: { - nir_ssa_scalar src1_scalar = nir_ssa_scalar_chase_alu_src(q.scalar, 1); - if (nir_ssa_scalar_is_const(src1_scalar)) { - uint32_t src0 = MIN2(src[0], 31); - uint32_t src1 = nir_ssa_scalar_as_uint(src1_scalar) & 0x1fu; - *result = bitmask(src0) << src1; - } else { - uint32_t src0 = MIN2(src[0], 31); - uint32_t src1 = MIN2(src[1], 31); - *result = bitmask(MIN2(src0 + src1, 32)); - } - break; - } - /* limited floating-point support for f2u32(fmul(load_input(), )) */ - case nir_op_f2u32: - /* infinity/NaN starts at 0x7f800000u, negative numbers at 0x80000000 */ - if (src[0] < 0x7f800000u) { - float val; - memcpy(&val, &src[0], 4); - *result = (uint32_t)val; - } - break; - case nir_op_fmul: - case nir_op_fmulz: - /* infinity/NaN starts at 0x7f800000u, negative numbers at 0x80000000 */ - if (src[0] < 0x7f800000u && src[1] < 0x7f800000u) { - float src0_f, src1_f; - memcpy(&src0_f, &src[0], 4); - memcpy(&src1_f, &src[1], 4); - /* not a proper rounding-up multiplication, but should be good enough */ - float max_f = ceilf(src0_f) * ceilf(src1_f); - memcpy(result, &max_f, 4); - } - break; - case nir_op_u2u1: - case nir_op_u2u8: - case nir_op_u2u16: - case nir_op_u2u32: - *result = MIN2(src[0], max); - break; - case nir_op_b2i8: - case nir_op_b2i16: - case nir_op_b2i32: - *result = 1; - break; - case nir_op_sad_u8x4: - *result = src[2] + 4 * 255; - break; - case nir_op_extract_u8: - *result = MIN2(src[0], UINT8_MAX); - break; - case nir_op_extract_i8: - *result = (src[0] >= 0x80) ? max : MIN2(src[0], INT8_MAX); - break; - case nir_op_extract_u16: - *result = MIN2(src[0], UINT16_MAX); - break; - case nir_op_extract_i16: - *result = (src[0] >= 0x8000) ? max : MIN2(src[0], INT16_MAX); - break; - default: - break; - } -} - -static void -get_phi_uub(struct analysis_state *state, struct uub_query q, uint32_t *result, const uint32_t *src) -{ - nir_phi_instr *phi = nir_instr_as_phi(q.scalar.def->parent_instr); - - if (exec_list_is_empty(&phi->srcs)) - return; - - if (q.head.pushed_queries) { - *result = src[0]; - for (unsigned i = 1; i < q.head.pushed_queries; i++) - *result = MAX2(*result, src[i]); - return; - } - - nir_cf_node *prev = nir_cf_node_prev(&phi->instr.block->cf_node); - if (!prev || prev->type == nir_cf_node_block) { - /* Resolve cycles by inserting max into range_ht. */ - uint32_t max = bitmask(q.scalar.def->bit_size); - _mesa_hash_table_insert(state->range_ht, (void*)get_uub_key(&q.head), (void*)(uintptr_t)max); - - struct set *visited = _mesa_pointer_set_create(NULL); - nir_ssa_scalar *defs = alloca(sizeof(nir_ssa_scalar) * 64); - unsigned def_count = search_phi_bcsel(q.scalar, defs, 64, visited); - _mesa_set_destroy(visited, NULL); - - for (unsigned i = 0; i < def_count; i++) - push_uub_query(state, defs[i]); - } else { - nir_foreach_phi_src(src, phi) - push_uub_query(state, nir_get_ssa_scalar(src->src.ssa, q.scalar.comp)); - } -} - -static void -process_uub_query(struct analysis_state *state, struct analysis_query *aq, uint32_t *result, - const uint32_t *src) -{ - struct uub_query q = *(struct uub_query *)aq; - - *result = bitmask(q.scalar.def->bit_size); - if (nir_ssa_scalar_is_const(q.scalar)) - *result = nir_ssa_scalar_as_uint(q.scalar); - else if (q.scalar.def->parent_instr->type == nir_instr_type_intrinsic) - get_intrinsic_uub(state, q, result, src); - else if (nir_ssa_scalar_is_alu(q.scalar)) - get_alu_uub(state, q, result, src); - else if (q.scalar.def->parent_instr->type == nir_instr_type_phi) - get_phi_uub(state, q, result, src); -} - -uint32_t -nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht, - nir_ssa_scalar scalar, - const nir_unsigned_upper_bound_config *config) { - if (!config) - config = &default_ub_config; - - struct uub_query query_alloc[16]; - uint32_t result_alloc[16]; - - struct analysis_state state; - state.shader = shader; - state.config = config; - state.range_ht = range_ht; - util_dynarray_init_from_stack(&state.query_stack, query_alloc, sizeof(query_alloc)); - util_dynarray_init_from_stack(&state.result_stack, result_alloc, sizeof(result_alloc)); - state.query_size = sizeof(struct uub_query); - state.get_key = &get_uub_key; - state.process_query = &process_uub_query; - - push_uub_query(&state, scalar); - - return perform_analysis(&state); -} - -bool -nir_addition_might_overflow(nir_shader *shader, struct hash_table *range_ht, - nir_ssa_scalar ssa, unsigned const_val, - const nir_unsigned_upper_bound_config *config) -{ - if (nir_ssa_scalar_is_alu(ssa)) { - nir_op alu_op = nir_ssa_scalar_alu_op(ssa); - - /* iadd(imul(a, #b), #c) */ - if (alu_op == nir_op_imul || alu_op == nir_op_ishl) { - nir_ssa_scalar mul_src0 = nir_ssa_scalar_chase_alu_src(ssa, 0); - nir_ssa_scalar mul_src1 = nir_ssa_scalar_chase_alu_src(ssa, 1); - uint32_t stride = 1; - if (nir_ssa_scalar_is_const(mul_src0)) - stride = nir_ssa_scalar_as_uint(mul_src0); - else if (nir_ssa_scalar_is_const(mul_src1)) - stride = nir_ssa_scalar_as_uint(mul_src1); - - if (alu_op == nir_op_ishl) - stride = 1u << (stride % 32u); - - if (!stride || const_val <= UINT32_MAX - (UINT32_MAX / stride * stride)) - return false; - } - - /* iadd(iand(a, #b), #c) */ - if (alu_op == nir_op_iand) { - nir_ssa_scalar and_src0 = nir_ssa_scalar_chase_alu_src(ssa, 0); - nir_ssa_scalar and_src1 = nir_ssa_scalar_chase_alu_src(ssa, 1); - uint32_t mask = 0xffffffff; - if (nir_ssa_scalar_is_const(and_src0)) - mask = nir_ssa_scalar_as_uint(and_src0); - else if (nir_ssa_scalar_is_const(and_src1)) - mask = nir_ssa_scalar_as_uint(and_src1); - if (mask == 0 || const_val < (1u << (ffs(mask) - 1))) - return false; - } - } - - uint32_t ub = nir_unsigned_upper_bound(shader, range_ht, ssa, config); - return const_val + ub < const_val; -} - -static uint64_t -ssa_def_bits_used(const nir_ssa_def *def, int recur) -{ - uint64_t bits_used = 0; - uint64_t all_bits = BITFIELD64_MASK(def->bit_size); - - /* Querying the bits used from a vector is too hard of a question to - * answer. Return the conservative answer that all bits are used. To - * handle this, the function would need to be extended to be a query of a - * single component of the vector. That would also necessary to fully - * handle the 'num_components > 1' inside the loop below. - * - * FINISHME: This restriction will eventually need to be restricted to be - * useful for hardware that uses u16vec2 as the native 16-bit integer type. - */ - if (def->num_components > 1) - return all_bits; - - /* Limit recursion */ - if (recur-- <= 0) - return all_bits; - - nir_foreach_use(src, def) { - switch (src->parent_instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *use_alu = nir_instr_as_alu(src->parent_instr); - unsigned src_idx = container_of(src, nir_alu_src, src) - use_alu->src; - - /* If a user of the value produces a vector result, return the - * conservative answer that all bits are used. It is possible to - * answer this query by looping over the components used. For example, - * - * vec4 32 ssa_5 = load_const(0x0000f000, 0x00000f00, 0x000000f0, 0x0000000f) - * ... - * vec4 32 ssa_8 = iand ssa_7.xxxx, ssa_5 - * - * could conceivably return 0x0000ffff when queyring the bits used of - * ssa_7. This is unlikely to be worth the effort because the - * question can eventually answered after the shader has been - * scalarized. - */ - if (use_alu->dest.dest.ssa.num_components > 1) - return all_bits; - - switch (use_alu->op) { - case nir_op_u2u8: - case nir_op_i2i8: - bits_used |= 0xff; - break; - - case nir_op_u2u16: - case nir_op_i2i16: - bits_used |= all_bits & 0xffff; - break; - - case nir_op_u2u32: - case nir_op_i2i32: - bits_used |= all_bits & 0xffffffff; - break; - - case nir_op_extract_u8: - case nir_op_extract_i8: - if (src_idx == 0 && nir_src_is_const(use_alu->src[1].src)) { - unsigned chunk = nir_src_comp_as_uint(use_alu->src[1].src, - use_alu->src[1].swizzle[0]); - bits_used |= 0xffull << (chunk * 8); - break; - } else { - return all_bits; - } - - case nir_op_extract_u16: - case nir_op_extract_i16: - if (src_idx == 0 && nir_src_is_const(use_alu->src[1].src)) { - unsigned chunk = nir_src_comp_as_uint(use_alu->src[1].src, - use_alu->src[1].swizzle[0]); - bits_used |= 0xffffull << (chunk * 16); - break; - } else { - return all_bits; - } - - case nir_op_ishl: - case nir_op_ishr: - case nir_op_ushr: - if (src_idx == 1) { - bits_used |= (nir_src_bit_size(use_alu->src[0].src) - 1); - break; - } else { - return all_bits; - } - - case nir_op_iand: - assert(src_idx < 2); - if (nir_src_is_const(use_alu->src[1 - src_idx].src)) { - uint64_t u64 = nir_src_comp_as_uint(use_alu->src[1 - src_idx].src, - use_alu->src[1 - src_idx].swizzle[0]); - bits_used |= u64; - break; - } else { - return all_bits; - } - - case nir_op_ior: - assert(src_idx < 2); - if (nir_src_is_const(use_alu->src[1 - src_idx].src)) { - uint64_t u64 = nir_src_comp_as_uint(use_alu->src[1 - src_idx].src, - use_alu->src[1 - src_idx].swizzle[0]); - bits_used |= all_bits & ~u64; - break; - } else { - return all_bits; - } - - default: - /* We don't know what this op does */ - return all_bits; - } - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *use_intrin = - nir_instr_as_intrinsic(src->parent_instr); - unsigned src_idx = src - use_intrin->src; - - switch (use_intrin->intrinsic) { - case nir_intrinsic_read_invocation: - case nir_intrinsic_shuffle: - case nir_intrinsic_shuffle_up: - case nir_intrinsic_shuffle_down: - case nir_intrinsic_shuffle_xor: - case nir_intrinsic_quad_broadcast: - case nir_intrinsic_quad_swap_horizontal: - case nir_intrinsic_quad_swap_vertical: - case nir_intrinsic_quad_swap_diagonal: - if (src_idx == 0) { - assert(use_intrin->dest.is_ssa); - bits_used |= ssa_def_bits_used(&use_intrin->dest.ssa, recur); - } else { - if (use_intrin->intrinsic == nir_intrinsic_quad_broadcast) { - bits_used |= 3; - } else { - /* Subgroups larger than 128 are not a thing */ - bits_used |= 127; - } - } - break; - - case nir_intrinsic_reduce: - case nir_intrinsic_inclusive_scan: - case nir_intrinsic_exclusive_scan: - assert(src_idx == 0); - switch (nir_intrinsic_reduction_op(use_intrin)) { - case nir_op_iadd: - case nir_op_imul: - case nir_op_ior: - case nir_op_iand: - case nir_op_ixor: - bits_used |= ssa_def_bits_used(&use_intrin->dest.ssa, recur); - break; - - default: - return all_bits; - } - break; - - default: - /* We don't know what this op does */ - return all_bits; - } - break; - } - - case nir_instr_type_phi: { - nir_phi_instr *use_phi = nir_instr_as_phi(src->parent_instr); - bits_used |= ssa_def_bits_used(&use_phi->dest.ssa, recur); - break; - } - - default: - return all_bits; - } - - /* If we've somehow shown that all our bits are used, we're done */ - assert((bits_used & ~all_bits) == 0); - if (bits_used == all_bits) - return all_bits; - } - - return bits_used; -} - -uint64_t -nir_ssa_def_bits_used(const nir_ssa_def *def) -{ - return ssa_def_bits_used(def, 2); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_range_analysis.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_range_analysis.h deleted file mode 100644 index db3b781..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_range_analysis.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#ifndef _NIR_RANGE_ANALYSIS_H_ -#define _NIR_RANGE_ANALYSIS_H_ - -#include "nir.h" - -enum PACKED ssa_ranges { - unknown = 0, - lt_zero, - le_zero, - gt_zero, - ge_zero, - ne_zero, - eq_zero, - last_range = eq_zero -}; - -struct ssa_result_range { - enum ssa_ranges range; - - /** A floating-point value that can only have integer values. */ - bool is_integral; - - /** A floating-point value that cannot be NaN. */ - bool is_a_number; - - /** Is the value known to be a finite number? */ - bool is_finite; -}; - -#ifdef __cplusplus -extern "C" { -#endif - -extern struct ssa_result_range -nir_analyze_range(struct hash_table *range_ht, - const nir_alu_instr *instr, unsigned src); - -uint64_t nir_ssa_def_bits_used(const nir_ssa_def *def); - -#ifdef __cplusplus -} -#endif -#endif /* _NIR_RANGE_ANALYSIS_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_remove_dead_variables.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_remove_dead_variables.c deleted file mode 100644 index 6045707..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_remove_dead_variables.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" - -static bool -deref_used_for_not_store(nir_deref_instr *deref) -{ - nir_foreach_use(src, &deref->dest.ssa) { - switch (src->parent_instr->type) { - case nir_instr_type_deref: - if (deref_used_for_not_store(nir_instr_as_deref(src->parent_instr))) - return true; - break; - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = - nir_instr_as_intrinsic(src->parent_instr); - /* The first source of copy and store intrinsics is the deref to - * write. Don't record those. - */ - if ((intrin->intrinsic != nir_intrinsic_store_deref && - intrin->intrinsic != nir_intrinsic_copy_deref) || - src != &intrin->src[0]) - return true; - break; - } - - default: - /* If it's used by any other instruction type (most likely a texture - * or call instruction), consider it used. - */ - return true; - } - } - - return false; -} - -static void -add_var_use_deref(nir_deref_instr *deref, struct set *live) -{ - if (deref->deref_type != nir_deref_type_var) - return; - - /* Since these local variables don't escape the shader, writing doesn't - * make them live. Only keep them if they are used by some intrinsic. - */ - if ((deref->var->data.mode & (nir_var_function_temp | - nir_var_shader_temp)) && - !deref_used_for_not_store(deref)) - return; - - /* - * Shared memory blocks (interface type) alias each other, so be - * conservative in that case. - */ - if ((deref->var->data.mode & nir_var_mem_shared) && - !glsl_type_is_interface(deref->var->type) && - !deref_used_for_not_store(deref)) - return; - - nir_variable *var = deref->var; - do { - _mesa_set_add(live, var); - /* Also mark the chain of variables used to initialize it. */ - var = var->pointer_initializer; - } while (var); -} - -static void -add_var_use_shader(nir_shader *shader, struct set *live, nir_variable_mode modes) -{ - nir_foreach_function(function, shader) { - if (function->impl) { - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_deref) - add_var_use_deref(nir_instr_as_deref(instr), live); - } - } - } - } -} - -static void -remove_dead_var_writes(nir_shader *shader) -{ - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_foreach_block(block, function->impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (deref->deref_type == nir_deref_type_cast && - !nir_deref_instr_parent(deref)) - continue; - - nir_variable_mode parent_modes; - if (deref->deref_type == nir_deref_type_var) - parent_modes = deref->var->data.mode; - else - parent_modes = nir_deref_instr_parent(deref)->modes; - - /* If the parent mode is 0, then it references a dead variable. - * Flag this deref as dead and remove it. - */ - if (parent_modes == 0) { - deref->modes = 0; - nir_instr_remove(&deref->instr); - } - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_copy_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - break; - - if (nir_src_as_deref(intrin->src[0])->modes == 0) - nir_instr_remove(instr); - break; - } - - default: - break; /* Nothing to do */ - } - } - } - } -} - -static bool -remove_dead_vars(struct exec_list *var_list, nir_variable_mode modes, - struct set *live, const nir_remove_dead_variables_options *opts) -{ - bool progress = false; - - nir_foreach_variable_in_list_safe(var, var_list) { - if (!(var->data.mode & modes)) - continue; - - if (opts && opts->can_remove_var && - !opts->can_remove_var(var, opts->can_remove_var_data)) - continue; - - struct set_entry *entry = _mesa_set_search(live, var); - if (entry == NULL) { - /* Mark this variable as used by setting the mode to 0 */ - var->data.mode = 0; - exec_node_remove(&var->node); - progress = true; - } - } - - return progress; -} - -bool -nir_remove_dead_variables(nir_shader *shader, nir_variable_mode modes, - const nir_remove_dead_variables_options *opts) -{ - bool progress = false; - struct set *live = _mesa_pointer_set_create(NULL); - - add_var_use_shader(shader, live, modes); - - if (modes & ~nir_var_function_temp) { - progress = remove_dead_vars(&shader->variables, modes, - live, opts) || progress; - } - - if (modes & nir_var_function_temp) { - nir_foreach_function(function, shader) { - if (function->impl) { - if (remove_dead_vars(&function->impl->locals, - nir_var_function_temp, - live, opts)) - progress = true; - } - } - } - - _mesa_set_destroy(live, NULL); - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - if (progress) { - remove_dead_var_writes(shader); - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_repair_ssa.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_repair_ssa.c deleted file mode 100644 index b456c90..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_repair_ssa.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_phi_builder.h" - -struct repair_ssa_state { - nir_function_impl *impl; - - BITSET_WORD *def_set; - struct nir_phi_builder *phi_builder; - - bool progress; -}; - -/* Get ready to build a phi and return the builder */ -static struct nir_phi_builder * -prep_build_phi(struct repair_ssa_state *state) -{ - const unsigned num_words = BITSET_WORDS(state->impl->num_blocks); - - /* We create the phi builder on-demand. */ - if (state->phi_builder == NULL) { - state->phi_builder = nir_phi_builder_create(state->impl); - state->def_set = ralloc_array(NULL, BITSET_WORD, num_words); - } - - /* We're going to build a phi. That's progress. */ - state->progress = true; - - /* Set the defs set to empty */ - memset(state->def_set, 0, num_words * sizeof(*state->def_set)); - - return state->phi_builder; -} - -static nir_block * -get_src_block(nir_src *src) -{ - if (src->is_if) { - return nir_cf_node_as_block(nir_cf_node_prev(&src->parent_if->cf_node)); - } else if (src->parent_instr->type == nir_instr_type_phi) { - return exec_node_data(nir_phi_src, src, src)->pred; - } else { - return src->parent_instr->block; - } -} - -static bool -repair_ssa_def(nir_ssa_def *def, void *void_state) -{ - struct repair_ssa_state *state = void_state; - - bool is_valid = true; - nir_foreach_use_including_if(src, def) { - nir_block *src_block = get_src_block(src); - - if (nir_block_is_unreachable(src_block) || - !nir_block_dominates(def->parent_instr->block, src_block)) { - is_valid = false; - break; - } - } - - if (is_valid) - return true; - - struct nir_phi_builder *pb = prep_build_phi(state); - - BITSET_SET(state->def_set, def->parent_instr->block->index); - - struct nir_phi_builder_value *val = - nir_phi_builder_add_value(pb, def->num_components, def->bit_size, - state->def_set); - - nir_phi_builder_value_set_block_def(val, def->parent_instr->block, def); - - nir_foreach_use_including_if_safe(src, def) { - nir_block *block = get_src_block(src); - - if (block == def->parent_instr->block) { - assert(nir_phi_builder_value_get_block_def(val, block) == def); - continue; - } - - nir_ssa_def *block_def = - nir_phi_builder_value_get_block_def(val, block); - if (block_def == def) - continue; - - /* If def was a deref and the use we're looking at is a deref that - * isn't a cast, we need to wrap it in a cast so we don't loose any - * deref information. - */ - if (!src->is_if && - def->parent_instr->type == nir_instr_type_deref && - src->parent_instr->type == nir_instr_type_deref && - nir_instr_as_deref(src->parent_instr)->deref_type != nir_deref_type_cast) { - nir_deref_instr *cast = - nir_deref_instr_create(state->impl->function->shader, - nir_deref_type_cast); - - nir_deref_instr *deref = nir_instr_as_deref(def->parent_instr); - cast->modes = deref->modes; - cast->type = deref->type; - cast->parent = nir_src_for_ssa(block_def); - cast->cast.ptr_stride = nir_deref_instr_array_stride(deref); - - nir_ssa_dest_init(&cast->instr, &cast->dest, - def->num_components, def->bit_size, NULL); - nir_instr_insert(nir_before_instr(src->parent_instr), - &cast->instr); - block_def = &cast->dest.ssa; - } - - if (src->is_if) - nir_if_rewrite_condition(src->parent_if, nir_src_for_ssa(block_def)); - else - nir_instr_rewrite_src(src->parent_instr, src, nir_src_for_ssa(block_def)); - } - - return true; -} - -bool -nir_repair_ssa_impl(nir_function_impl *impl) -{ - struct repair_ssa_state state; - - state.impl = impl; - state.phi_builder = NULL; - state.progress = false; - - nir_metadata_require(impl, nir_metadata_block_index | - nir_metadata_dominance); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - nir_foreach_ssa_def(instr, repair_ssa_def, &state); - } - } - - if (state.progress) - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - - if (state.phi_builder) { - nir_phi_builder_finish(state.phi_builder); - ralloc_free(state.def_set); - } - - return state.progress; -} - -/** This pass can be used to repair SSA form in a shader. - * - * Sometimes a transformation (such as return lowering) will have to make - * changes to a shader which, while still correct, break some of NIR's SSA - * invariants. This pass will insert ssa_undefs and phi nodes as needed to - * get the shader back into SSA that the validator will like. - */ -bool -nir_repair_ssa(nir_shader *shader) -{ - bool progress = false; - - nir_foreach_function(function, shader) { - if (function->impl) - progress = nir_repair_ssa_impl(function->impl) || progress; - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_scale_fdiv.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_scale_fdiv.c deleted file mode 100644 index cd73ef4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_scale_fdiv.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2020 Microsoft Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -static bool -nir_scale_fdiv_instr(nir_builder *b, nir_instr *instr, UNUSED void *_data) -{ - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (alu->op != nir_op_fdiv || alu->src[0].src.ssa->bit_size != 32) - return false; - - b->cursor = nir_before_instr(&alu->instr); - - nir_ssa_def *orig_a = nir_ssa_for_alu_src(b, alu, 0); - nir_ssa_def *orig_b = nir_ssa_for_alu_src(b, alu, 1); - nir_ssa_def *fabs = nir_fabs(b, orig_b); - nir_ssa_def *big = nir_flt(b, nir_imm_int(b, 0x7e800000), fabs); - nir_ssa_def *small = nir_flt(b, fabs, nir_imm_int(b, 0x00800000)); - - nir_ssa_def *scaled_down_a = nir_fmul_imm(b, orig_a, 0.25); - nir_ssa_def *scaled_down_b = nir_fmul_imm(b, orig_b, 0.25); - nir_ssa_def *scaled_up_a = nir_fmul_imm(b, orig_a, 16777216.0); - nir_ssa_def *scaled_up_b = nir_fmul_imm(b, orig_b, 16777216.0); - - nir_ssa_def *final_a = - nir_bcsel(b, big, scaled_down_a, - (nir_bcsel(b, small, scaled_up_a, orig_a))); - nir_ssa_def *final_b = - nir_bcsel(b, big, scaled_down_b, - (nir_bcsel(b, small, scaled_up_b, orig_b))); - - nir_ssa_def *new_div = nir_fdiv(b, final_a, final_b); - nir_ssa_def_rewrite_uses(&alu->dest.dest.ssa, new_div); - - return true; -} - -/** Scale both sides of an fdiv if needed to prevent denorm flushing - * - * This may be needed to satisfy the precision requirements of OpenCL. When - * fdiv is lowered to frcp+fmul, denorm flushing may cause the frcp to return - * zero even for finite floats. This multiplies both sides of an fdiv by a - * constant, if needed, to prevent such flushing. - */ -bool -nir_scale_fdiv(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, nir_scale_fdiv_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_schedule.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_schedule.c deleted file mode 100644 index 2d5c212..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_schedule.c +++ /dev/null @@ -1,1220 +0,0 @@ -/* - * Copyright © 2019 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_schedule.h" -#include "../../util/dag.h" -#include "../../util/u_dynarray.h" - -/** @file - * - * Implements basic-block-level prepass instruction scheduling in NIR to - * manage register pressure. - * - * This is based on the Goodman/Hsu paper (1988, cached copy at - * https://people.freedesktop.org/~anholt/scheduling-goodman-hsu.pdf). We - * make up the DDG for NIR (which can be mostly done using the NIR def/use - * chains for SSA instructions, plus some edges for ordering register writes - * vs reads, and some more for ordering intrinsics). Then we pick heads off - * of the DDG using their heuristic to emit the NIR instructions back into the - * block in their new order. - * - * The hard case for prepass scheduling on GPUs seems to always be consuming - * texture/ubo results. The register pressure heuristic doesn't want to pick - * an instr that starts consuming texture results because it usually won't be - * the only usage, so that instruction will increase pressure. - * - * If you try to force consumption of tex results always, then in a case where - * single sample is used for many outputs, you'll end up picking every other - * user and expanding register pressure. The partially_evaluated_path flag - * helps tremendously, in that if you happen for whatever reason to pick a - * texture sample's output, then you'll try to finish off that sample. Future - * work may include doing some local search before locking in a choice, to try - * to more reliably find the case where just a few choices going against the - * heuristic can manage to free the whole vector. - */ - -static bool debug; - -/** - * Represents a node in the DDG for a NIR instruction. - */ -typedef struct { - struct dag_node dag; /* must be first for our u_dynarray_foreach */ - nir_instr *instr; - bool partially_evaluated_path; - - /* Approximate estimate of the delay between starting this instruction and - * its results being available. - * - * Accuracy is not too important, given that we're prepass scheduling here - * and just trying to reduce excess dependencies introduced by a register - * allocator by stretching out the live intervals of expensive - * instructions. - */ - uint32_t delay; - - /* Cost of the maximum-delay path from this node to the leaves. */ - uint32_t max_delay; - - /* scoreboard->time value when this instruction can be scheduled without - * any stalls expected. - */ - uint32_t ready_time; -} nir_schedule_node; - -typedef struct { - struct dag *dag; - - nir_shader *shader; - - /* Mapping from nir_register * or nir_ssa_def * to a struct set of - * instructions remaining to be scheduled using the register. - */ - struct hash_table *remaining_uses; - - /* Map from nir_instr to nir_schedule_node * */ - struct hash_table *instr_map; - - /* Set of nir_register * or nir_ssa_def * that have had any instruction - * scheduled on them. - */ - struct set *live_values; - - /* An abstract approximation of the number of nir_scheduler_node->delay - * units since the start of the shader. - */ - uint32_t time; - - /* Number of channels currently used by the NIR instructions that have been - * scheduled. - */ - int pressure; - - /* Options specified by the backend */ - const nir_schedule_options *options; -} nir_schedule_scoreboard; - -/* When walking the instructions in reverse, we use this flag to swap - * before/after in add_dep(). - */ -enum direction { F, R }; - -struct nir_schedule_class_dep { - int klass; - nir_schedule_node *node; - struct nir_schedule_class_dep *next; -}; - -typedef struct { - nir_schedule_scoreboard *scoreboard; - - /* Map from nir_register to nir_schedule_node * */ - struct hash_table *reg_map; - - /* Scheduler nodes for last instruction involved in some class of dependency. - */ - nir_schedule_node *load_input; - nir_schedule_node *store_shared; - nir_schedule_node *unknown_intrinsic; - nir_schedule_node *discard; - nir_schedule_node *jump; - - struct nir_schedule_class_dep *class_deps; - - enum direction dir; -} nir_deps_state; - -static void * -_mesa_hash_table_search_data(struct hash_table *ht, void *key) -{ - struct hash_entry *entry = _mesa_hash_table_search(ht, key); - if (!entry) - return NULL; - return entry->data; -} - -static nir_schedule_node * -nir_schedule_get_node(struct hash_table *instr_map, nir_instr *instr) -{ - return _mesa_hash_table_search_data(instr_map, instr); -} - -static struct set * -nir_schedule_scoreboard_get_src(nir_schedule_scoreboard *scoreboard, nir_src *src) -{ - if (src->is_ssa) { - return _mesa_hash_table_search_data(scoreboard->remaining_uses, src->ssa); - } else { - return _mesa_hash_table_search_data(scoreboard->remaining_uses, - src->reg.reg); - } -} - -static int -nir_schedule_def_pressure(nir_ssa_def *def) -{ - return def->num_components; -} - -static int -nir_schedule_src_pressure(nir_src *src) -{ - if (src->is_ssa) - return nir_schedule_def_pressure(src->ssa); - else - return src->reg.reg->num_components; -} - -static int -nir_schedule_dest_pressure(nir_dest *dest) -{ - if (dest->is_ssa) - return nir_schedule_def_pressure(&dest->ssa); - else - return dest->reg.reg->num_components; -} - -/** - * Adds a dependency such that @after must appear in the final program after - * @before. - * - * We add @before as a child of @after, so that DAG heads are the outputs of - * the program and we make our scheduling decisions bottom to top. - */ -static void -add_dep(nir_deps_state *state, - nir_schedule_node *before, - nir_schedule_node *after) -{ - if (!before || !after) - return; - - assert(before != after); - - if (state->dir == F) - dag_add_edge(&before->dag, &after->dag, 0); - else - dag_add_edge(&after->dag, &before->dag, 0); -} - - -static void -add_read_dep(nir_deps_state *state, - nir_schedule_node *before, - nir_schedule_node *after) -{ - add_dep(state, before, after); -} - -static void -add_write_dep(nir_deps_state *state, - nir_schedule_node **before, - nir_schedule_node *after) -{ - add_dep(state, *before, after); - *before = after; -} - -static bool -nir_schedule_reg_src_deps(nir_src *src, void *in_state) -{ - nir_deps_state *state = in_state; - - if (src->is_ssa) - return true; - - struct hash_entry *entry = _mesa_hash_table_search(state->reg_map, - src->reg.reg); - if (!entry) - return true; - nir_schedule_node *dst_n = entry->data; - - nir_schedule_node *src_n = - nir_schedule_get_node(state->scoreboard->instr_map, - src->parent_instr); - - add_dep(state, dst_n, src_n); - - return true; -} - -static bool -nir_schedule_reg_dest_deps(nir_dest *dest, void *in_state) -{ - nir_deps_state *state = in_state; - - if (dest->is_ssa) - return true; - - nir_schedule_node *dest_n = - nir_schedule_get_node(state->scoreboard->instr_map, - dest->reg.parent_instr); - - struct hash_entry *entry = _mesa_hash_table_search(state->reg_map, - dest->reg.reg); - if (!entry) { - _mesa_hash_table_insert(state->reg_map, dest->reg.reg, dest_n); - return true; - } - nir_schedule_node **before = (nir_schedule_node **)&entry->data; - - add_write_dep(state, before, dest_n); - - return true; -} - -static bool -nir_schedule_ssa_deps(nir_ssa_def *def, void *in_state) -{ - nir_deps_state *state = in_state; - struct hash_table *instr_map = state->scoreboard->instr_map; - nir_schedule_node *def_n = nir_schedule_get_node(instr_map, def->parent_instr); - - nir_foreach_use(src, def) { - nir_schedule_node *use_n = nir_schedule_get_node(instr_map, - src->parent_instr); - - add_read_dep(state, def_n, use_n); - } - - return true; -} - -static struct nir_schedule_class_dep * -nir_schedule_get_class_dep(nir_deps_state *state, - int klass) -{ - for (struct nir_schedule_class_dep *class_dep = state->class_deps; - class_dep != NULL; - class_dep = class_dep->next) { - if (class_dep->klass == klass) - return class_dep; - } - - struct nir_schedule_class_dep *class_dep = - ralloc(state->reg_map, struct nir_schedule_class_dep); - - class_dep->klass = klass; - class_dep->node = NULL; - class_dep->next = state->class_deps; - - state->class_deps = class_dep; - - return class_dep; -} - -static void -nir_schedule_intrinsic_deps(nir_deps_state *state, - nir_intrinsic_instr *instr) -{ - nir_schedule_node *n = nir_schedule_get_node(state->scoreboard->instr_map, - &instr->instr); - const nir_schedule_options *options = state->scoreboard->options; - nir_schedule_dependency dep; - - if (options->intrinsic_cb && - options->intrinsic_cb(instr, &dep, options->intrinsic_cb_data)) { - struct nir_schedule_class_dep *class_dep = - nir_schedule_get_class_dep(state, dep.klass); - - switch (dep.type) { - case NIR_SCHEDULE_READ_DEPENDENCY: - add_read_dep(state, class_dep->node, n); - break; - case NIR_SCHEDULE_WRITE_DEPENDENCY: - add_write_dep(state, &class_dep->node, n); - break; - } - } - - switch (instr->intrinsic) { - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_front_face: - break; - - case nir_intrinsic_discard: - case nir_intrinsic_discard_if: - case nir_intrinsic_demote: - case nir_intrinsic_demote_if: - case nir_intrinsic_terminate: - case nir_intrinsic_terminate_if: - /* We are adding two dependencies: - * - * * A individual one that we could use to add a read_dep while handling - * nir_instr_type_tex - * - * * Include it on the unknown intrinsic set, as we want discard to be - * serialized in in the same order relative to intervening stores or - * atomic accesses to SSBOs and images - */ - add_write_dep(state, &state->discard, n); - add_write_dep(state, &state->unknown_intrinsic, n); - break; - - case nir_intrinsic_store_output: - /* For some hardware and stages, output stores affect the same shared - * memory as input loads. - */ - if ((state->scoreboard->options->stages_with_shared_io_memory & - (1 << state->scoreboard->shader->info.stage))) - add_write_dep(state, &state->load_input, n); - - /* Make sure that preceding discards stay before the store_output */ - add_read_dep(state, state->discard, n); - - break; - - case nir_intrinsic_load_input: - case nir_intrinsic_load_per_vertex_input: - add_read_dep(state, state->load_input, n); - break; - - case nir_intrinsic_load_shared: - case nir_intrinsic_load_shared2_amd: - /* Don't move load_shared beyond a following store_shared, as it could - * change their value - */ - add_read_dep(state, state->store_shared, n); - break; - - case nir_intrinsic_store_shared: - case nir_intrinsic_store_shared2_amd: - add_write_dep(state, &state->store_shared, n); - break; - - case nir_intrinsic_control_barrier: - case nir_intrinsic_memory_barrier_shared: - case nir_intrinsic_group_memory_barrier: - /* A generic memory barrier can be emitted when multiple synchronization - * semantics are involved, including shared memory. - */ - case nir_intrinsic_memory_barrier: - add_write_dep(state, &state->store_shared, n); - - /* Serialize against ssbos/atomics/etc. */ - add_write_dep(state, &state->unknown_intrinsic, n); - break; - - case nir_intrinsic_scoped_barrier: { - const nir_variable_mode modes = nir_intrinsic_memory_modes(instr); - - if (modes & nir_var_mem_shared) - add_write_dep(state, &state->store_shared, n); - - /* Serialize against other categories. */ - add_write_dep(state, &state->unknown_intrinsic, n); - - break; - } - - default: - /* Attempt to handle other intrinsics that we haven't individually - * categorized by serializing them in the same order relative to each - * other. - */ - add_write_dep(state, &state->unknown_intrinsic, n); - break; - } -} - -/** - * Common code for dependencies that need to be tracked both forward and - * backward. - * - * This is for things like "all reads of r4 have to happen between the r4 - * writes that surround them". - */ -static void -nir_schedule_calculate_deps(nir_deps_state *state, nir_schedule_node *n) -{ - nir_instr *instr = n->instr; - - /* For NIR SSA defs, we only need to do a single pass of making the uses - * depend on the def. - */ - if (state->dir == F) - nir_foreach_ssa_def(instr, nir_schedule_ssa_deps, state); - - /* For NIR regs, track the last writer in the scheduler state so that we - * can keep the writes in order and let reads get reordered only between - * each write. - */ - nir_foreach_src(instr, nir_schedule_reg_src_deps, state); - - nir_foreach_dest(instr, nir_schedule_reg_dest_deps, state); - - /* Make sure any other instructions keep their positions relative to - * jumps. - */ - if (instr->type != nir_instr_type_jump) - add_read_dep(state, state->jump, n); - - switch (instr->type) { - case nir_instr_type_ssa_undef: - case nir_instr_type_load_const: - case nir_instr_type_alu: - case nir_instr_type_deref: - break; - - case nir_instr_type_tex: - /* Don't move texture ops before a discard, as that could increase - * memory bandwidth for reading the discarded samples. - */ - add_read_dep(state, state->discard, n); - break; - - case nir_instr_type_jump: - add_write_dep(state, &state->jump, n); - break; - - case nir_instr_type_call: - unreachable("Calls should have been lowered"); - break; - - case nir_instr_type_parallel_copy: - unreachable("Parallel copies should have been lowered"); - break; - - case nir_instr_type_phi: - unreachable("nir_schedule() should be called after lowering from SSA"); - break; - - case nir_instr_type_intrinsic: - nir_schedule_intrinsic_deps(state, nir_instr_as_intrinsic(instr)); - break; - } -} - -static void -calculate_forward_deps(nir_schedule_scoreboard *scoreboard, nir_block *block) -{ - nir_deps_state state = { - .scoreboard = scoreboard, - .dir = F, - .reg_map = _mesa_pointer_hash_table_create(NULL), - }; - - nir_foreach_instr(instr, block) { - nir_schedule_node *node = nir_schedule_get_node(scoreboard->instr_map, - instr); - nir_schedule_calculate_deps(&state, node); - } - - ralloc_free(state.reg_map); -} - -static void -calculate_reverse_deps(nir_schedule_scoreboard *scoreboard, nir_block *block) -{ - nir_deps_state state = { - .scoreboard = scoreboard, - .dir = R, - .reg_map = _mesa_pointer_hash_table_create(NULL), - }; - - nir_foreach_instr_reverse(instr, block) { - nir_schedule_node *node = nir_schedule_get_node(scoreboard->instr_map, - instr); - nir_schedule_calculate_deps(&state, node); - } - - ralloc_free(state.reg_map); -} - -typedef struct { - nir_schedule_scoreboard *scoreboard; - int regs_freed; -} nir_schedule_regs_freed_state; - -static bool -nir_schedule_regs_freed_src_cb(nir_src *src, void *in_state) -{ - nir_schedule_regs_freed_state *state = in_state; - nir_schedule_scoreboard *scoreboard = state->scoreboard; - struct set *remaining_uses = nir_schedule_scoreboard_get_src(scoreboard, src); - - if (remaining_uses->entries == 1 && - _mesa_set_search(remaining_uses, src->parent_instr)) { - state->regs_freed += nir_schedule_src_pressure(src); - } - - return true; -} - -static bool -nir_schedule_regs_freed_def_cb(nir_ssa_def *def, void *in_state) -{ - nir_schedule_regs_freed_state *state = in_state; - - state->regs_freed -= nir_schedule_def_pressure(def); - - return true; -} - -static bool -nir_schedule_regs_freed_dest_cb(nir_dest *dest, void *in_state) -{ - nir_schedule_regs_freed_state *state = in_state; - nir_schedule_scoreboard *scoreboard = state->scoreboard; - - if (dest->is_ssa) - return true; - - nir_register *reg = dest->reg.reg; - - /* Only the first def of a reg counts against register pressure. */ - if (!_mesa_set_search(scoreboard->live_values, reg)) - state->regs_freed -= nir_schedule_dest_pressure(dest); - - return true; -} - -static int -nir_schedule_regs_freed(nir_schedule_scoreboard *scoreboard, nir_schedule_node *n) -{ - nir_schedule_regs_freed_state state = { - .scoreboard = scoreboard, - }; - - nir_foreach_src(n->instr, nir_schedule_regs_freed_src_cb, &state); - - nir_foreach_ssa_def(n->instr, nir_schedule_regs_freed_def_cb, &state); - - nir_foreach_dest(n->instr, nir_schedule_regs_freed_dest_cb, &state); - - return state.regs_freed; -} - -/** - * Chooses an instruction that will minimise the register pressure as much as - * possible. This should only be used as a fallback when the regular scheduling - * generates a shader whose register allocation fails. - */ -static nir_schedule_node * -nir_schedule_choose_instruction_fallback(nir_schedule_scoreboard *scoreboard) -{ - nir_schedule_node *chosen = NULL; - - /* Find the leader in the ready (shouldn't-stall) set with the mininum - * cost. - */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (scoreboard->time < n->ready_time) - continue; - - if (!chosen || chosen->max_delay > n->max_delay) - chosen = n; - } - if (chosen) { - if (debug) { - fprintf(stderr, "chose (ready fallback): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; - } - - /* Otherwise, choose the leader with the minimum cost. */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (!chosen || chosen->max_delay > n->max_delay) - chosen = n; - } - if (debug) { - fprintf(stderr, "chose (leader fallback): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; -} - -/** - * Chooses an instruction to schedule using the Goodman/Hsu (1988) CSP (Code - * Scheduling for Parallelism) heuristic. - * - * Picks an instruction on the critical that's ready to execute without - * stalls, if possible, otherwise picks the instruction on the critical path. - */ -static nir_schedule_node * -nir_schedule_choose_instruction_csp(nir_schedule_scoreboard *scoreboard) -{ - nir_schedule_node *chosen = NULL; - - /* Find the leader in the ready (shouldn't-stall) set with the maximum - * cost. - */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (scoreboard->time < n->ready_time) - continue; - - if (!chosen || chosen->max_delay < n->max_delay) - chosen = n; - } - if (chosen) { - if (debug) { - fprintf(stderr, "chose (ready): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; - } - - /* Otherwise, choose the leader with the maximum cost. */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (!chosen || chosen->max_delay < n->max_delay) - chosen = n; - } - if (debug) { - fprintf(stderr, "chose (leader): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; -} - -/** - * Chooses an instruction to schedule using the Goodman/Hsu (1988) CSR (Code - * Scheduling for Register pressure) heuristic. - */ -static nir_schedule_node * -nir_schedule_choose_instruction_csr(nir_schedule_scoreboard *scoreboard) -{ - nir_schedule_node *chosen = NULL; - - /* Find a ready inst with regs freed and pick the one with max cost. */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (n->ready_time > scoreboard->time) - continue; - - int regs_freed = nir_schedule_regs_freed(scoreboard, n); - - if (regs_freed > 0 && (!chosen || chosen->max_delay < n->max_delay)) { - chosen = n; - } - } - if (chosen) { - if (debug) { - fprintf(stderr, "chose (freed+ready): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; - } - - /* Find a leader with regs freed and pick the one with max cost. */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - int regs_freed = nir_schedule_regs_freed(scoreboard, n); - - if (regs_freed > 0 && (!chosen || chosen->max_delay < n->max_delay)) { - chosen = n; - } - } - if (chosen) { - if (debug) { - fprintf(stderr, "chose (regs freed): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; - } - - /* Find a partially evaluated path and try to finish it off */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (n->partially_evaluated_path && - (!chosen || chosen->max_delay < n->max_delay)) { - chosen = n; - } - } - if (chosen) { - if (debug) { - fprintf(stderr, "chose (partial path): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; - } - - /* Contra the paper, pick a leader with no effect on used regs. This may - * open up new opportunities, as otherwise a single-operand instr consuming - * a value will tend to block finding freeing that value. This had a - * massive effect on reducing spilling on V3D. - * - * XXX: Should this prioritize ready? - */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (nir_schedule_regs_freed(scoreboard, n) != 0) - continue; - - if (!chosen || chosen->max_delay < n->max_delay) - chosen = n; - } - if (chosen) { - if (debug) { - fprintf(stderr, "chose (regs no-op): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; - } - - /* Pick the max delay of the remaining ready set. */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (n->ready_time > scoreboard->time) - continue; - if (!chosen || chosen->max_delay < n->max_delay) - chosen = n; - } - if (chosen) { - if (debug) { - fprintf(stderr, "chose (ready max delay): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - return chosen; - } - - /* Pick the max delay of the remaining leaders. */ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - if (!chosen || chosen->max_delay < n->max_delay) - chosen = n; - } - - if (debug) { - fprintf(stderr, "chose (max delay): "); - nir_print_instr(chosen->instr, stderr); - fprintf(stderr, "\n"); - } - - return chosen; -} - -static void -dump_state(nir_schedule_scoreboard *scoreboard) -{ - list_for_each_entry(nir_schedule_node, n, &scoreboard->dag->heads, dag.link) { - fprintf(stderr, "maxdel %5d ", n->max_delay); - nir_print_instr(n->instr, stderr); - fprintf(stderr, "\n"); - - util_dynarray_foreach(&n->dag.edges, struct dag_edge, edge) { - nir_schedule_node *child = (nir_schedule_node *)edge->child; - - fprintf(stderr, " -> (%d parents) ", child->dag.parent_count); - nir_print_instr(child->instr, stderr); - fprintf(stderr, "\n"); - } - } -} - -static void -nir_schedule_mark_use(nir_schedule_scoreboard *scoreboard, - void *reg_or_def, - nir_instr *reg_or_def_parent, - int pressure) -{ - /* Make the value live if it's the first time it's been used. */ - if (!_mesa_set_search(scoreboard->live_values, reg_or_def)) { - _mesa_set_add(scoreboard->live_values, reg_or_def); - scoreboard->pressure += pressure; - } - - /* Make the value dead if it's the last remaining use. Be careful when one - * instruction uses a value twice to not decrement pressure twice. - */ - struct set *remaining_uses = - _mesa_hash_table_search_data(scoreboard->remaining_uses, reg_or_def); - struct set_entry *entry = _mesa_set_search(remaining_uses, reg_or_def_parent); - if (entry) { - _mesa_set_remove(remaining_uses, entry); - - if (remaining_uses->entries == 0) - scoreboard->pressure -= pressure; - } -} - -static bool -nir_schedule_mark_src_scheduled(nir_src *src, void *state) -{ - nir_schedule_scoreboard *scoreboard = state; - struct set *remaining_uses = nir_schedule_scoreboard_get_src(scoreboard, src); - - struct set_entry *entry = _mesa_set_search(remaining_uses, - src->parent_instr); - if (entry) { - /* Once we've used an SSA value in one instruction, bump the priority of - * the other uses so the SSA value can get fully consumed. - * - * We don't do this for registers, and it's would be a hassle and it's - * unclear if that would help or not. Also, skip it for constants, as - * they're often folded as immediates into backend instructions and have - * many unrelated instructions all referencing the same value (0). - */ - if (src->is_ssa && - src->ssa->parent_instr->type != nir_instr_type_load_const) { - nir_foreach_use(other_src, src->ssa) { - if (other_src->parent_instr == src->parent_instr) - continue; - - nir_schedule_node *n = - nir_schedule_get_node(scoreboard->instr_map, - other_src->parent_instr); - - if (n && !n->partially_evaluated_path) { - if (debug) { - fprintf(stderr, " New partially evaluated path: "); - nir_print_instr(n->instr, stderr); - fprintf(stderr, "\n"); - } - - n->partially_evaluated_path = true; - } - } - } - } - - nir_schedule_mark_use(scoreboard, - src->is_ssa ? (void *)src->ssa : (void *)src->reg.reg, - src->parent_instr, - nir_schedule_src_pressure(src)); - - return true; -} - -static bool -nir_schedule_mark_def_scheduled(nir_ssa_def *def, void *state) -{ - nir_schedule_scoreboard *scoreboard = state; - - nir_schedule_mark_use(scoreboard, def, def->parent_instr, - nir_schedule_def_pressure(def)); - - return true; -} - -static bool -nir_schedule_mark_dest_scheduled(nir_dest *dest, void *state) -{ - nir_schedule_scoreboard *scoreboard = state; - - /* SSA defs were handled in nir_schedule_mark_def_scheduled() - */ - if (dest->is_ssa) - return true; - - /* XXX: This is not actually accurate for regs -- the last use of a reg may - * have a live interval that extends across control flow. We should - * calculate the live ranges of regs, and have scheduler nodes for the CF - * nodes that also "use" the reg. - */ - nir_schedule_mark_use(scoreboard, dest->reg.reg, - dest->reg.parent_instr, - nir_schedule_dest_pressure(dest)); - - return true; -} - -static void -nir_schedule_mark_node_scheduled(nir_schedule_scoreboard *scoreboard, - nir_schedule_node *n) -{ - nir_foreach_src(n->instr, nir_schedule_mark_src_scheduled, scoreboard); - nir_foreach_ssa_def(n->instr, nir_schedule_mark_def_scheduled, scoreboard); - nir_foreach_dest(n->instr, nir_schedule_mark_dest_scheduled, scoreboard); - - util_dynarray_foreach(&n->dag.edges, struct dag_edge, edge) { - nir_schedule_node *child = (nir_schedule_node *)edge->child; - - child->ready_time = MAX2(child->ready_time, - scoreboard->time + n->delay); - - if (child->dag.parent_count == 1) { - if (debug) { - fprintf(stderr, " New DAG head: "); - nir_print_instr(child->instr, stderr); - fprintf(stderr, "\n"); - } - } - } - - dag_prune_head(scoreboard->dag, &n->dag); - - scoreboard->time = MAX2(n->ready_time, scoreboard->time); - scoreboard->time++; -} - -static void -nir_schedule_instructions(nir_schedule_scoreboard *scoreboard, nir_block *block) -{ - while (!list_is_empty(&scoreboard->dag->heads)) { - if (debug) { - fprintf(stderr, "current list:\n"); - dump_state(scoreboard); - } - - nir_schedule_node *chosen; - if (scoreboard->options->fallback) - chosen = nir_schedule_choose_instruction_fallback(scoreboard); - else if (scoreboard->pressure < scoreboard->options->threshold) - chosen = nir_schedule_choose_instruction_csp(scoreboard); - else - chosen = nir_schedule_choose_instruction_csr(scoreboard); - - /* Now that we've scheduled a new instruction, some of its children may - * be promoted to the list of instructions ready to be scheduled. - */ - nir_schedule_mark_node_scheduled(scoreboard, chosen); - - /* Move the instruction to the end (so our first chosen instructions are - * the start of the program). - */ - exec_node_remove(&chosen->instr->node); - exec_list_push_tail(&block->instr_list, &chosen->instr->node); - - if (debug) - fprintf(stderr, "\n"); - } -} - -static uint32_t -nir_schedule_get_delay(nir_schedule_scoreboard *scoreboard, nir_instr *instr) -{ - if (scoreboard->options->instr_delay_cb) { - void *cb_data = scoreboard->options->instr_delay_cb_data; - return scoreboard->options->instr_delay_cb(instr, cb_data); - } - - switch (instr->type) { - case nir_instr_type_ssa_undef: - case nir_instr_type_load_const: - case nir_instr_type_alu: - case nir_instr_type_deref: - case nir_instr_type_jump: - case nir_instr_type_parallel_copy: - case nir_instr_type_call: - case nir_instr_type_phi: - return 1; - - case nir_instr_type_intrinsic: - switch (nir_instr_as_intrinsic(instr)->intrinsic) { - case nir_intrinsic_load_ubo: - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_scratch: - case nir_intrinsic_load_shared: - case nir_intrinsic_image_load: - return 50; - default: - return 1; - } - break; - - case nir_instr_type_tex: - /* Pick some large number to try to fetch textures early and sample them - * late. - */ - return 100; - } - - return 0; -} - -static void -nir_schedule_dag_max_delay_cb(struct dag_node *node, void *state) -{ - nir_schedule_node *n = (nir_schedule_node *)node; - uint32_t max_delay = 0; - - util_dynarray_foreach(&n->dag.edges, struct dag_edge, edge) { - nir_schedule_node *child = (nir_schedule_node *)edge->child; - max_delay = MAX2(child->max_delay, max_delay); - } - - n->max_delay = MAX2(n->max_delay, max_delay + n->delay); - } - -static void -nir_schedule_block(nir_schedule_scoreboard *scoreboard, nir_block *block) -{ - void *mem_ctx = ralloc_context(NULL); - scoreboard->instr_map = _mesa_pointer_hash_table_create(mem_ctx); - - scoreboard->dag = dag_create(mem_ctx); - - nir_foreach_instr(instr, block) { - nir_schedule_node *n = - rzalloc(mem_ctx, nir_schedule_node); - - n->instr = instr; - n->delay = nir_schedule_get_delay(scoreboard, instr); - dag_init_node(scoreboard->dag, &n->dag); - - _mesa_hash_table_insert(scoreboard->instr_map, instr, n); - } - - calculate_forward_deps(scoreboard, block); - calculate_reverse_deps(scoreboard, block); - - dag_traverse_bottom_up(scoreboard->dag, nir_schedule_dag_max_delay_cb, NULL); - - nir_schedule_instructions(scoreboard, block); - - ralloc_free(mem_ctx); - scoreboard->instr_map = NULL; -} - -static bool -nir_schedule_ssa_def_init_scoreboard(nir_ssa_def *def, void *state) -{ - nir_schedule_scoreboard *scoreboard = state; - struct set *def_uses = _mesa_pointer_set_create(scoreboard); - - _mesa_hash_table_insert(scoreboard->remaining_uses, def, def_uses); - - _mesa_set_add(def_uses, def->parent_instr); - - nir_foreach_use(src, def) { - _mesa_set_add(def_uses, src->parent_instr); - } - - /* XXX: Handle if uses */ - - return true; -} - -static nir_schedule_scoreboard * -nir_schedule_get_scoreboard(nir_shader *shader, - const nir_schedule_options *options) -{ - nir_schedule_scoreboard *scoreboard = rzalloc(NULL, nir_schedule_scoreboard); - - scoreboard->shader = shader; - scoreboard->live_values = _mesa_pointer_set_create(scoreboard); - scoreboard->remaining_uses = _mesa_pointer_hash_table_create(scoreboard); - scoreboard->options = options; - scoreboard->pressure = 0; - - nir_foreach_function(function, shader) { - nir_foreach_register(reg, &function->impl->registers) { - struct set *register_uses = - _mesa_pointer_set_create(scoreboard); - - _mesa_hash_table_insert(scoreboard->remaining_uses, reg, register_uses); - - nir_foreach_use(src, reg) { - _mesa_set_add(register_uses, src->parent_instr); - } - - /* XXX: Handle if uses */ - - nir_foreach_def(dest, reg) { - _mesa_set_add(register_uses, dest->reg.parent_instr); - } - } - - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - nir_foreach_ssa_def(instr, nir_schedule_ssa_def_init_scoreboard, - scoreboard); - } - - /* XXX: We're ignoring if uses, which may prioritize scheduling other - * uses of the if src even when it doesn't help. That's not many - * values, though, so meh. - */ - } - } - - return scoreboard; -} - -static void -nir_schedule_validate_uses(nir_schedule_scoreboard *scoreboard) -{ -#ifdef NDEBUG - return; -#endif - - bool any_uses = false; - - hash_table_foreach(scoreboard->remaining_uses, entry) { - struct set *remaining_uses = entry->data; - - set_foreach(remaining_uses, instr_entry) { - if (!any_uses) { - fprintf(stderr, "Tracked uses remain after scheduling. " - "Affected instructions: \n"); - any_uses = true; - } - nir_print_instr(instr_entry->key, stderr); - fprintf(stderr, "\n"); - } - } - - assert(!any_uses); -} - -/** - * Schedules the NIR instructions to try to decrease stalls (for example, - * delaying texture reads) while managing register pressure. - * - * The threshold represents "number of NIR register/SSA def channels live - * before switching the scheduling heuristic to reduce register pressure", - * since most of our GPU architectures are scalar (extending to vector with a - * flag wouldn't be hard). This number should be a bit below the number of - * registers available (counting any that may be occupied by system value - * payload values, for example), since the heuristic may not always be able to - * free a register immediately. The amount below the limit is up to you to - * tune. - */ -void -nir_schedule(nir_shader *shader, - const nir_schedule_options *options) -{ - nir_schedule_scoreboard *scoreboard = nir_schedule_get_scoreboard(shader, - options); - - if (debug) { - fprintf(stderr, "NIR shader before scheduling:\n"); - nir_print_shader(shader, stderr); - } - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_foreach_block(block, function->impl) { - nir_schedule_block(scoreboard, block); - } - } - - nir_schedule_validate_uses(scoreboard); - - ralloc_free(scoreboard); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_schedule.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_schedule.h deleted file mode 100644 index 263136e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_schedule.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright © 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_SCHEDULE_H -#define NIR_SCHEDULE_H - -#include "nir.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Struct filled in by the intrinsic_cb callback of nir_schedule_options to - * specify a backend-specific dependency on an intrinsic. - */ -typedef struct nir_schedule_dependency { - /* Which class of dependency this is. The meanings of the classes are - * specific to the backend. This must be less than - * NIR_SCHEDULE_N_DEPENDENCY_CLASSES. - */ - int klass; - /* The type of dependency */ - enum { - NIR_SCHEDULE_READ_DEPENDENCY, - NIR_SCHEDULE_WRITE_DEPENDENCY, - } type; -} nir_schedule_dependency; - -typedef struct nir_schedule_options { - /* On some hardware with some stages the inputs and outputs to the shader - * share the same memory. In that case the scheduler needs to ensure that - * all output writes are scheduled after all of the input writes to avoid - * overwriting them. This is a bitmask of stages that need that. - */ - unsigned stages_with_shared_io_memory; - /* The approximate amount of register pressure at which point the scheduler - * will try to reduce register usage. - */ - int threshold; - /* If set, instead of trying to optimise parallelism, the scheduler will try - * to always minimise register pressure. This can be used as a fallback when - * register allocation fails so that it can at least try to generate a - * working shader even if it’s inefficient. - */ - bool fallback; - /* Callback used to add custom dependencies on intrinsics. If it returns - * true then a dependency should be added and dep is filled in to describe - * it. - */ - bool (* intrinsic_cb)(nir_intrinsic_instr *intr, - nir_schedule_dependency *dep, - void *user_data); - - /* Data to pass to the intrinsic callback */ - void *intrinsic_cb_data; - - /* Callback used to specify instruction delays */ - unsigned (* instr_delay_cb)(nir_instr *instr, void *user_data); - - /* Data to pass to the instruction delay callback */ - void *instr_delay_cb_data; - -} nir_schedule_options; - -void nir_schedule(nir_shader *shader, const nir_schedule_options *options); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* NIR_SCHEDULE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search.c deleted file mode 100644 index 09cc05c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search.c +++ /dev/null @@ -1,950 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include "nir_search.h" -#include "nir_builder.h" -#include "nir_worklist.h" -#include "../../util/half_float.h" - -/* This should be the same as nir_search_max_comm_ops in nir_algebraic.py. */ -#define NIR_SEARCH_MAX_COMM_OPS 8 - -struct match_state { - bool inexact_match; - bool has_exact_alu; - uint8_t comm_op_direction; - unsigned variables_seen; - - /* Used for running the automaton on newly-constructed instructions. */ - struct util_dynarray *states; - const struct per_op_table *pass_op_table; - const nir_algebraic_table *table; - - nir_alu_src variables[NIR_SEARCH_MAX_VARIABLES]; - struct hash_table *range_ht; -}; - -static bool -match_expression(const nir_algebraic_table *table, const nir_search_expression *expr, nir_alu_instr *instr, - unsigned num_components, const uint8_t *swizzle, - struct match_state *state); -static bool -nir_algebraic_automaton(nir_instr *instr, struct util_dynarray *states, - const struct per_op_table *pass_op_table); - -static const uint8_t identity_swizzle[NIR_MAX_VEC_COMPONENTS] = -{ - 0, 1, 2, 3, - 4, 5, 6, 7, - 8, 9, 10, 11, - 12, 13, 14, 15, -}; - -/** - * Check if a source produces a value of the given type. - * - * Used for satisfying 'a@type' constraints. - */ -static bool -src_is_type(nir_src src, nir_alu_type type) -{ - assert(type != nir_type_invalid); - - if (!src.is_ssa) - return false; - - if (src.ssa->parent_instr->type == nir_instr_type_alu) { - nir_alu_instr *src_alu = nir_instr_as_alu(src.ssa->parent_instr); - nir_alu_type output_type = nir_op_infos[src_alu->op].output_type; - - if (type == nir_type_bool) { - switch (src_alu->op) { - case nir_op_iand: - case nir_op_ior: - case nir_op_ixor: - return src_is_type(src_alu->src[0].src, nir_type_bool) && - src_is_type(src_alu->src[1].src, nir_type_bool); - case nir_op_inot: - return src_is_type(src_alu->src[0].src, nir_type_bool); - default: - break; - } - } - - return nir_alu_type_get_base_type(output_type) == type; - } else if (src.ssa->parent_instr->type == nir_instr_type_intrinsic) { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(src.ssa->parent_instr); - - if (type == nir_type_bool) { - return intr->intrinsic == nir_intrinsic_load_front_face || - intr->intrinsic == nir_intrinsic_load_helper_invocation; - } - } - - /* don't know */ - return false; -} - -static bool -nir_op_matches_search_op(nir_op nop, uint16_t sop) -{ - if (sop <= nir_last_opcode) - return nop == sop; - -#define MATCH_FCONV_CASE(op) \ - case nir_search_op_##op: \ - return nop == nir_op_##op##16 || \ - nop == nir_op_##op##32 || \ - nop == nir_op_##op##64; - -#define MATCH_ICONV_CASE(op) \ - case nir_search_op_##op: \ - return nop == nir_op_##op##8 || \ - nop == nir_op_##op##16 || \ - nop == nir_op_##op##32 || \ - nop == nir_op_##op##64; - - switch (sop) { - MATCH_FCONV_CASE(i2f) - MATCH_FCONV_CASE(u2f) - MATCH_FCONV_CASE(f2f) - MATCH_ICONV_CASE(f2u) - MATCH_ICONV_CASE(f2i) - MATCH_ICONV_CASE(u2u) - MATCH_ICONV_CASE(i2i) - MATCH_FCONV_CASE(b2f) - MATCH_ICONV_CASE(b2i) - default: - unreachable("Invalid nir_search_op"); - } - -#undef MATCH_FCONV_CASE -#undef MATCH_ICONV_CASE -} - -uint16_t -nir_search_op_for_nir_op(nir_op nop) -{ -#define MATCH_FCONV_CASE(op) \ - case nir_op_##op##16: \ - case nir_op_##op##32: \ - case nir_op_##op##64: \ - return nir_search_op_##op; - -#define MATCH_ICONV_CASE(op) \ - case nir_op_##op##8: \ - case nir_op_##op##16: \ - case nir_op_##op##32: \ - case nir_op_##op##64: \ - return nir_search_op_##op; - - - switch (nop) { - MATCH_FCONV_CASE(i2f) - MATCH_FCONV_CASE(u2f) - MATCH_FCONV_CASE(f2f) - MATCH_ICONV_CASE(f2u) - MATCH_ICONV_CASE(f2i) - MATCH_ICONV_CASE(u2u) - MATCH_ICONV_CASE(i2i) - MATCH_FCONV_CASE(b2f) - MATCH_ICONV_CASE(b2i) - default: - return nop; - } - -#undef MATCH_FCONV_CASE -#undef MATCH_ICONV_CASE -} - -static nir_op -nir_op_for_search_op(uint16_t sop, unsigned bit_size) -{ - if (sop <= nir_last_opcode) - return sop; - -#define RET_FCONV_CASE(op) \ - case nir_search_op_##op: \ - switch (bit_size) { \ - case 16: return nir_op_##op##16; \ - case 32: return nir_op_##op##32; \ - case 64: return nir_op_##op##64; \ - default: unreachable("Invalid bit size"); \ - } - -#define RET_ICONV_CASE(op) \ - case nir_search_op_##op: \ - switch (bit_size) { \ - case 8: return nir_op_##op##8; \ - case 16: return nir_op_##op##16; \ - case 32: return nir_op_##op##32; \ - case 64: return nir_op_##op##64; \ - default: unreachable("Invalid bit size"); \ - } - - switch (sop) { - RET_FCONV_CASE(i2f) - RET_FCONV_CASE(u2f) - RET_FCONV_CASE(f2f) - RET_ICONV_CASE(f2u) - RET_ICONV_CASE(f2i) - RET_ICONV_CASE(u2u) - RET_ICONV_CASE(i2i) - RET_FCONV_CASE(b2f) - RET_ICONV_CASE(b2i) - default: - unreachable("Invalid nir_search_op"); - } - -#undef RET_FCONV_CASE -#undef RET_ICONV_CASE -} - -static bool -match_value(const nir_algebraic_table *table, - const nir_search_value *value, nir_alu_instr *instr, unsigned src, - unsigned num_components, const uint8_t *swizzle, - struct match_state *state) -{ - uint8_t new_swizzle[NIR_MAX_VEC_COMPONENTS]; - - /* Searching only works on SSA values because, if it's not SSA, we can't - * know if the value changed between one instance of that value in the - * expression and another. Also, the replace operation will place reads of - * that value right before the last instruction in the expression we're - * replacing so those reads will happen after the original reads and may - * not be valid if they're register reads. - */ - assert(instr->src[src].src.is_ssa); - - /* If the source is an explicitly sized source, then we need to reset - * both the number of components and the swizzle. - */ - if (nir_op_infos[instr->op].input_sizes[src] != 0) { - num_components = nir_op_infos[instr->op].input_sizes[src]; - swizzle = identity_swizzle; - } - - for (unsigned i = 0; i < num_components; ++i) - new_swizzle[i] = instr->src[src].swizzle[swizzle[i]]; - - /* If the value has a specific bit size and it doesn't match, bail */ - if (value->bit_size > 0 && - nir_src_bit_size(instr->src[src].src) != value->bit_size) - return false; - - switch (value->type) { - case nir_search_value_expression: - if (instr->src[src].src.ssa->parent_instr->type != nir_instr_type_alu) - return false; - - return match_expression(table, nir_search_value_as_expression(value), - nir_instr_as_alu(instr->src[src].src.ssa->parent_instr), - num_components, new_swizzle, state); - - case nir_search_value_variable: { - nir_search_variable *var = nir_search_value_as_variable(value); - assert(var->variable < NIR_SEARCH_MAX_VARIABLES); - - if (state->variables_seen & (1 << var->variable)) { - if (state->variables[var->variable].src.ssa != instr->src[src].src.ssa) - return false; - - assert(!instr->src[src].abs && !instr->src[src].negate); - - for (unsigned i = 0; i < num_components; ++i) { - if (state->variables[var->variable].swizzle[i] != new_swizzle[i]) - return false; - } - - return true; - } else { - if (var->is_constant && - instr->src[src].src.ssa->parent_instr->type != nir_instr_type_load_const) - return false; - - if (var->cond_index != -1 && !table->variable_cond[var->cond_index](state->range_ht, instr, - src, num_components, new_swizzle)) - return false; - - if (var->type != nir_type_invalid && - !src_is_type(instr->src[src].src, var->type)) - return false; - - state->variables_seen |= (1 << var->variable); - state->variables[var->variable].src = instr->src[src].src; - state->variables[var->variable].abs = false; - state->variables[var->variable].negate = false; - - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; ++i) { - if (i < num_components) - state->variables[var->variable].swizzle[i] = new_swizzle[i]; - else - state->variables[var->variable].swizzle[i] = 0; - } - - return true; - } - } - - case nir_search_value_constant: { - nir_search_constant *const_val = nir_search_value_as_constant(value); - - if (!nir_src_is_const(instr->src[src].src)) - return false; - - switch (const_val->type) { - case nir_type_float: { - nir_load_const_instr *const load = - nir_instr_as_load_const(instr->src[src].src.ssa->parent_instr); - - /* There are 8-bit and 1-bit integer types, but there are no 8-bit or - * 1-bit float types. This prevents potential assertion failures in - * nir_src_comp_as_float. - */ - if (load->def.bit_size < 16) - return false; - - for (unsigned i = 0; i < num_components; ++i) { - double val = nir_src_comp_as_float(instr->src[src].src, - new_swizzle[i]); - if (val != const_val->data.d) - return false; - } - return true; - } - - case nir_type_int: - case nir_type_uint: - case nir_type_bool: { - unsigned bit_size = nir_src_bit_size(instr->src[src].src); - uint64_t mask = u_uintN_max(bit_size); - for (unsigned i = 0; i < num_components; ++i) { - uint64_t val = nir_src_comp_as_uint(instr->src[src].src, - new_swizzle[i]); - if ((val & mask) != (const_val->data.u & mask)) - return false; - } - return true; - } - - default: - unreachable("Invalid alu source type"); - } - } - - default: - unreachable("Invalid search value type"); - } -} - -static bool -match_expression(const nir_algebraic_table *table, const nir_search_expression *expr, nir_alu_instr *instr, - unsigned num_components, const uint8_t *swizzle, - struct match_state *state) -{ - if (expr->cond_index != -1 && !table->expression_cond[expr->cond_index](instr)) - return false; - - if (!nir_op_matches_search_op(instr->op, expr->opcode)) - return false; - - assert(instr->dest.dest.is_ssa); - - if (expr->value.bit_size > 0 && - instr->dest.dest.ssa.bit_size != expr->value.bit_size) - return false; - - state->inexact_match = expr->inexact || state->inexact_match; - state->has_exact_alu = (instr->exact && !expr->ignore_exact) || state->has_exact_alu; - if (state->inexact_match && state->has_exact_alu) - return false; - - assert(!instr->dest.saturate); - assert(nir_op_infos[instr->op].num_inputs > 0); - - /* If we have an explicitly sized destination, we can only handle the - * identity swizzle. While dot(vec3(a, b, c).zxy) is a valid - * expression, we don't have the information right now to propagate that - * swizzle through. We can only properly propagate swizzles if the - * instruction is vectorized. - */ - if (nir_op_infos[instr->op].output_size != 0) { - for (unsigned i = 0; i < num_components; i++) { - if (swizzle[i] != i) - return false; - } - } - - /* If this is a commutative expression and it's one of the first few, look - * up its direction for the current search operation. We'll use that value - * to possibly flip the sources for the match. - */ - unsigned comm_op_flip = - (expr->comm_expr_idx >= 0 && - expr->comm_expr_idx < NIR_SEARCH_MAX_COMM_OPS) ? - ((state->comm_op_direction >> expr->comm_expr_idx) & 1) : 0; - - bool matched = true; - for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++) { - /* 2src_commutative instructions that have 3 sources are only commutative - * in the first two sources. Source 2 is always source 2. - */ - if (!match_value(table, &state->table->values[expr->srcs[i]].value, instr, - i < 2 ? i ^ comm_op_flip : i, - num_components, swizzle, state)) { - matched = false; - break; - } - } - - return matched; -} - -static unsigned -replace_bitsize(const nir_search_value *value, unsigned search_bitsize, - struct match_state *state) -{ - if (value->bit_size > 0) - return value->bit_size; - if (value->bit_size < 0) - return nir_src_bit_size(state->variables[-value->bit_size - 1].src); - return search_bitsize; -} - -static nir_alu_src -construct_value(nir_builder *build, - const nir_search_value *value, - unsigned num_components, unsigned search_bitsize, - struct match_state *state, - nir_instr *instr) -{ - switch (value->type) { - case nir_search_value_expression: { - const nir_search_expression *expr = nir_search_value_as_expression(value); - unsigned dst_bit_size = replace_bitsize(value, search_bitsize, state); - nir_op op = nir_op_for_search_op(expr->opcode, dst_bit_size); - - if (nir_op_infos[op].output_size != 0) - num_components = nir_op_infos[op].output_size; - - nir_alu_instr *alu = nir_alu_instr_create(build->shader, op); - nir_ssa_dest_init(&alu->instr, &alu->dest.dest, num_components, - dst_bit_size, NULL); - alu->dest.write_mask = (1 << num_components) - 1; - alu->dest.saturate = false; - - /* We have no way of knowing what values in a given search expression - * map to a particular replacement value. Therefore, if the - * expression we are replacing has any exact values, the entire - * replacement should be exact. - */ - alu->exact = state->has_exact_alu || expr->exact; - - for (unsigned i = 0; i < nir_op_infos[op].num_inputs; i++) { - /* If the source is an explicitly sized source, then we need to reset - * the number of components to match. - */ - if (nir_op_infos[alu->op].input_sizes[i] != 0) - num_components = nir_op_infos[alu->op].input_sizes[i]; - - alu->src[i] = construct_value(build, &state->table->values[expr->srcs[i]].value, - num_components, search_bitsize, - state, instr); - } - - nir_builder_instr_insert(build, &alu->instr); - - assert(alu->dest.dest.ssa.index == - util_dynarray_num_elements(state->states, uint16_t)); - util_dynarray_append(state->states, uint16_t, 0); - nir_algebraic_automaton(&alu->instr, state->states, state->pass_op_table); - - nir_alu_src val; - val.src = nir_src_for_ssa(&alu->dest.dest.ssa); - val.negate = false; - val.abs = false, - memcpy(val.swizzle, identity_swizzle, sizeof val.swizzle); - - return val; - } - - case nir_search_value_variable: { - const nir_search_variable *var = nir_search_value_as_variable(value); - assert(state->variables_seen & (1 << var->variable)); - - nir_alu_src val = { NIR_SRC_INIT }; - nir_alu_src_copy(&val, &state->variables[var->variable], NULL); - assert(!var->is_constant); - - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) - val.swizzle[i] = state->variables[var->variable].swizzle[var->swizzle[i]]; - - return val; - } - - case nir_search_value_constant: { - const nir_search_constant *c = nir_search_value_as_constant(value); - unsigned bit_size = replace_bitsize(value, search_bitsize, state); - - nir_ssa_def *cval; - switch (c->type) { - case nir_type_float: - cval = nir_imm_floatN_t(build, c->data.d, bit_size); - break; - - case nir_type_int: - case nir_type_uint: - cval = nir_imm_intN_t(build, c->data.i, bit_size); - break; - - case nir_type_bool: - cval = nir_imm_boolN_t(build, c->data.u, bit_size); - break; - - default: - unreachable("Invalid alu source type"); - } - - assert(cval->index == - util_dynarray_num_elements(state->states, uint16_t)); - util_dynarray_append(state->states, uint16_t, 0); - nir_algebraic_automaton(cval->parent_instr, state->states, - state->pass_op_table); - - nir_alu_src val; - val.src = nir_src_for_ssa(cval); - val.negate = false; - val.abs = false, - memset(val.swizzle, 0, sizeof val.swizzle); - - return val; - } - - default: - unreachable("Invalid search value type"); - } -} - -UNUSED static void dump_value(const nir_algebraic_table *table, const nir_search_value *val) -{ - switch (val->type) { - case nir_search_value_constant: { - const nir_search_constant *sconst = nir_search_value_as_constant(val); - switch (sconst->type) { - case nir_type_float: - fprintf(stderr, "%f", sconst->data.d); - break; - case nir_type_int: - fprintf(stderr, "%"PRId64, sconst->data.i); - break; - case nir_type_uint: - fprintf(stderr, "0x%"PRIx64, sconst->data.u); - break; - case nir_type_bool: - fprintf(stderr, "%s", sconst->data.u != 0 ? "True" : "False"); - break; - default: - unreachable("bad const type"); - } - break; - } - - case nir_search_value_variable: { - const nir_search_variable *var = nir_search_value_as_variable(val); - if (var->is_constant) - fprintf(stderr, "#"); - fprintf(stderr, "%c", var->variable + 'a'); - break; - } - - case nir_search_value_expression: { - const nir_search_expression *expr = nir_search_value_as_expression(val); - fprintf(stderr, "("); - if (expr->inexact) - fprintf(stderr, "~"); - switch (expr->opcode) { -#define CASE(n) \ - case nir_search_op_##n: fprintf(stderr, #n); break; - CASE(b2f) - CASE(b2i) - CASE(i2i) - CASE(f2i) - CASE(i2f) -#undef CASE - default: - fprintf(stderr, "%s", nir_op_infos[expr->opcode].name); - } - - unsigned num_srcs = 1; - if (expr->opcode <= nir_last_opcode) - num_srcs = nir_op_infos[expr->opcode].num_inputs; - - for (unsigned i = 0; i < num_srcs; i++) { - fprintf(stderr, " "); - dump_value(table, &table->values[expr->srcs[i]].value); - } - - fprintf(stderr, ")"); - break; - } - } - - if (val->bit_size > 0) - fprintf(stderr, "@%d", val->bit_size); -} - -static void -add_uses_to_worklist(nir_instr *instr, - nir_instr_worklist *worklist, - struct util_dynarray *states, - const struct per_op_table *pass_op_table) -{ - nir_ssa_def *def = nir_instr_ssa_def(instr); - - nir_foreach_use_safe(use_src, def) { - if (nir_algebraic_automaton(use_src->parent_instr, states, pass_op_table)) - nir_instr_worklist_push_tail(worklist, use_src->parent_instr); - } -} - -static void -nir_algebraic_update_automaton(nir_instr *new_instr, - nir_instr_worklist *algebraic_worklist, - struct util_dynarray *states, - const struct per_op_table *pass_op_table) -{ - - nir_instr_worklist *automaton_worklist = nir_instr_worklist_create(); - - /* Walk through the tree of uses of our new instruction's SSA value, - * recursively updating the automaton state until it stabilizes. - */ - add_uses_to_worklist(new_instr, automaton_worklist, states, pass_op_table); - - nir_instr *instr; - while ((instr = nir_instr_worklist_pop_head(automaton_worklist))) { - nir_instr_worklist_push_tail(algebraic_worklist, instr); - add_uses_to_worklist(instr, automaton_worklist, states, pass_op_table); - } - - nir_instr_worklist_destroy(automaton_worklist); -} - -static nir_ssa_def * -nir_replace_instr(nir_builder *build, nir_alu_instr *instr, - struct hash_table *range_ht, - struct util_dynarray *states, - const nir_algebraic_table *table, - const nir_search_expression *search, - const nir_search_value *replace, - nir_instr_worklist *algebraic_worklist, - struct exec_list *dead_instrs) -{ - uint8_t swizzle[NIR_MAX_VEC_COMPONENTS] = { 0 }; - - for (unsigned i = 0; i < instr->dest.dest.ssa.num_components; ++i) - swizzle[i] = i; - - assert(instr->dest.dest.is_ssa); - - struct match_state state; - state.inexact_match = false; - state.has_exact_alu = false; - state.range_ht = range_ht; - state.pass_op_table = table->pass_op_table; - state.table = table; - - STATIC_ASSERT(sizeof(state.comm_op_direction) * 8 >= NIR_SEARCH_MAX_COMM_OPS); - - unsigned comm_expr_combinations = - 1 << MIN2(search->comm_exprs, NIR_SEARCH_MAX_COMM_OPS); - - bool found = false; - for (unsigned comb = 0; comb < comm_expr_combinations; comb++) { - /* The bitfield of directions is just the current iteration. Hooray for - * binary. - */ - state.comm_op_direction = comb; - state.variables_seen = 0; - - if (match_expression(table, search, instr, - instr->dest.dest.ssa.num_components, - swizzle, &state)) { - found = true; - break; - } - } - if (!found) - return NULL; - -#if 0 - fprintf(stderr, "matched: "); - dump_value(&search->value); - fprintf(stderr, " -> "); - dump_value(replace); - fprintf(stderr, " ssa_%d\n", instr->dest.dest.ssa.index); -#endif - - /* If the instruction at the root of the expression tree being replaced is - * a unary operation, insert the replacement instructions at the location - * of the source of the unary operation. Otherwise, insert the replacement - * instructions at the location of the expression tree root. - * - * For the unary operation case, this is done to prevent some spurious code - * motion that can dramatically extend live ranges. Imagine an expression - * like -(A+B) where the addtion and the negation are separated by flow - * control and thousands of instructions. If this expression is replaced - * with -A+-B, inserting the new instructions at the site of the negation - * could extend the live range of A and B dramtically. This could increase - * register pressure and cause spilling. - * - * It may well be that moving instructions around is a good thing, but - * keeping algebraic optimizations and code motion optimizations separate - * seems safest. - */ - nir_alu_instr *const src_instr = nir_src_as_alu_instr(instr->src[0].src); - if (src_instr != NULL && - (instr->op == nir_op_fneg || instr->op == nir_op_fabs || - instr->op == nir_op_ineg || instr->op == nir_op_iabs || - instr->op == nir_op_inot)) { - /* Insert new instructions *after*. Otherwise a hypothetical - * replacement fneg(X) -> fabs(X) would insert the fabs() instruction - * before X! This can also occur for things like fneg(X.wzyx) -> X.wzyx - * in vector mode. A move instruction to handle the swizzle will get - * inserted before X. - * - * This manifested in a single OpenGL ES 2.0 CTS vertex shader test on - * older Intel GPU that use vector-mode vertex processing. - */ - build->cursor = nir_after_instr(&src_instr->instr); - } else { - build->cursor = nir_before_instr(&instr->instr); - } - - state.states = states; - - nir_alu_src val = construct_value(build, replace, - instr->dest.dest.ssa.num_components, - instr->dest.dest.ssa.bit_size, - &state, &instr->instr); - - /* Note that NIR builder will elide the MOV if it's a no-op, which may - * allow more work to be done in a single pass through algebraic. - */ - nir_ssa_def *ssa_val = - nir_mov_alu(build, val, instr->dest.dest.ssa.num_components); - if (ssa_val->index == util_dynarray_num_elements(states, uint16_t)) { - util_dynarray_append(states, uint16_t, 0); - nir_algebraic_automaton(ssa_val->parent_instr, states, table->pass_op_table); - } - - /* Rewrite the uses of the old SSA value to the new one, and recurse - * through the uses updating the automaton's state. - */ - nir_ssa_def_rewrite_uses(&instr->dest.dest.ssa, ssa_val); - nir_algebraic_update_automaton(ssa_val->parent_instr, algebraic_worklist, - states, table->pass_op_table); - - /* Nothing uses the instr any more, so drop it out of the program. Note - * that the instr may be in the worklist still, so we can't free it - * directly. - */ - assert(instr->instr.pass_flags == 0); - instr->instr.pass_flags = 1; - nir_instr_remove(&instr->instr); - exec_list_push_tail(dead_instrs, &instr->instr.node); - - return ssa_val; -} - -static bool -nir_algebraic_automaton(nir_instr *instr, struct util_dynarray *states, - const struct per_op_table *pass_op_table) -{ - switch (instr->type) { - case nir_instr_type_alu: { - nir_alu_instr *alu = nir_instr_as_alu(instr); - nir_op op = alu->op; - uint16_t search_op = nir_search_op_for_nir_op(op); - const struct per_op_table *tbl = &pass_op_table[search_op]; - if (tbl->num_filtered_states == 0) - return false; - - /* Calculate the index into the transition table. Note the index - * calculated must match the iteration order of Python's - * itertools.product(), which was used to emit the transition - * table. - */ - unsigned index = 0; - for (unsigned i = 0; i < nir_op_infos[op].num_inputs; i++) { - index *= tbl->num_filtered_states; - if (tbl->filter) - index += tbl->filter[*util_dynarray_element(states, uint16_t, - alu->src[i].src.ssa->index)]; - } - - uint16_t *state = util_dynarray_element(states, uint16_t, - alu->dest.dest.ssa.index); - if (*state != tbl->table[index]) { - *state = tbl->table[index]; - return true; - } - return false; - } - - case nir_instr_type_load_const: { - nir_load_const_instr *load_const = nir_instr_as_load_const(instr); - uint16_t *state = util_dynarray_element(states, uint16_t, - load_const->def.index); - if (*state != CONST_STATE) { - *state = CONST_STATE; - return true; - } - return false; - } - - default: - return false; - } -} - -static bool -nir_algebraic_instr(nir_builder *build, nir_instr *instr, - struct hash_table *range_ht, - const bool *condition_flags, - const nir_algebraic_table *table, - struct util_dynarray *states, - nir_instr_worklist *worklist, - struct exec_list *dead_instrs) -{ - - if (instr->type != nir_instr_type_alu) - return false; - - nir_alu_instr *alu = nir_instr_as_alu(instr); - if (!alu->dest.dest.is_ssa) - return false; - - unsigned bit_size = alu->dest.dest.ssa.bit_size; - const unsigned execution_mode = - build->shader->info.float_controls_execution_mode; - const bool ignore_inexact = - nir_is_float_control_signed_zero_inf_nan_preserve(execution_mode, bit_size) || - nir_is_denorm_flush_to_zero(execution_mode, bit_size); - - int xform_idx = *util_dynarray_element(states, uint16_t, - alu->dest.dest.ssa.index); - for (const struct transform *xform = &table->transforms[table->transform_offsets[xform_idx]]; - xform->condition_offset != ~0; - xform++) { - if (condition_flags[xform->condition_offset] && - !(table->values[xform->search].expression.inexact && ignore_inexact) && - nir_replace_instr(build, alu, range_ht, states, table, - &table->values[xform->search].expression, - &table->values[xform->replace].value, worklist, dead_instrs)) { - _mesa_hash_table_clear(range_ht, NULL); - return true; - } - } - - return false; -} - -bool -nir_algebraic_impl(nir_function_impl *impl, - const bool *condition_flags, - const nir_algebraic_table *table) -{ - bool progress = false; - - nir_builder build; - nir_builder_init(&build, impl); - - /* Note: it's important here that we're allocating a zeroed array, since - * state 0 is the default state, which means we don't have to visit - * anything other than constants and ALU instructions. - */ - struct util_dynarray states = {0}; - if (!util_dynarray_resize(&states, uint16_t, impl->ssa_alloc)) { - nir_metadata_preserve(impl, nir_metadata_all); - return false; - } - memset(states.data, 0, states.size); - - struct hash_table *range_ht = _mesa_pointer_hash_table_create(NULL); - - nir_instr_worklist *worklist = nir_instr_worklist_create(); - - /* Walk top-to-bottom setting up the automaton state. */ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - nir_algebraic_automaton(instr, &states, table->pass_op_table); - } - } - - /* Put our instrs in the worklist such that we're popping the last instr - * first. This will encourage us to match the biggest source patterns when - * possible. - */ - nir_foreach_block_reverse(block, impl) { - nir_foreach_instr_reverse(instr, block) { - instr->pass_flags = 0; - if (instr->type == nir_instr_type_alu) - nir_instr_worklist_push_tail(worklist, instr); - } - } - - struct exec_list dead_instrs; - exec_list_make_empty(&dead_instrs); - - nir_instr *instr; - while ((instr = nir_instr_worklist_pop_head(worklist))) { - /* The worklist can have an instr pushed to it multiple times if it was - * the src of multiple instrs that also got optimized, so make sure that - * we don't try to re-optimize an instr we already handled. - */ - if (instr->pass_flags) - continue; - - progress |= nir_algebraic_instr(&build, instr, - range_ht, condition_flags, - table, &states, worklist, &dead_instrs); - } - - nir_instr_free_list(&dead_instrs); - - nir_instr_worklist_destroy(worklist); - ralloc_free(range_ht); - util_dynarray_fini(&states); - - if (progress) { - nir_metadata_preserve(impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(impl, nir_metadata_all); - } - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search.h deleted file mode 100644 index 780f67b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search.h +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_SEARCH_ -#define _NIR_SEARCH_ - -#include "nir.h" -#include "nir_worklist.h" -#include "../../util/u_dynarray.h" - -#define NIR_SEARCH_MAX_VARIABLES 16 - -struct nir_builder; - -typedef enum PACKED { - nir_search_value_expression, - nir_search_value_variable, - nir_search_value_constant, -} nir_search_value_type; - -typedef struct { - nir_search_value_type type; - - /** - * Bit size of the value. It is interpreted as follows: - * - * For a search expression: - * - If bit_size > 0, then the value only matches an SSA value with the - * given bit size. - * - If bit_size <= 0, then the value matches any size SSA value. - * - * For a replace expression: - * - If bit_size > 0, then the value is constructed with the given bit size. - * - If bit_size == 0, then the value is constructed with the same bit size - * as the search value. - * - If bit_size < 0, then the value is constructed with the same bit size - * as variable (-bit_size - 1). - */ - int8_t bit_size; -} nir_search_value; - -typedef struct { - nir_search_value value; - - /** The variable index; Must be less than NIR_SEARCH_MAX_VARIABLES */ - uint8_t variable : 7; - - /** Indicates that the given variable must be a constant - * - * This is only allowed in search expressions and indicates that the - * given variable is only allowed to match constant values. - */ - bool is_constant : 1; - - /** Indicates that the given variable must have a certain type - * - * This is only allowed in search expressions and indicates that the - * given variable is only allowed to match values that come from an ALU - * instruction with the given output type. A type of nir_type_void - * means it can match any type. - * - * Note: A variable that is both constant and has a non-void type will - * never match anything. - */ - nir_alu_type type; - - /** Optional table->variable_cond[] fxn ptr index - * - * This is only allowed in search expressions, and allows additional - * constraints to be placed on the match. Typically used for 'is_constant' - * variables to require, for example, power-of-two in order for the search - * to match. - */ - int16_t cond_index; - - /** Swizzle (for replace only) */ - uint8_t swizzle[NIR_MAX_VEC_COMPONENTS]; -} nir_search_variable; - -typedef struct { - nir_search_value value; - - nir_alu_type type; - - union { - uint64_t u; - int64_t i; - double d; - } data; -} nir_search_constant; - -enum nir_search_op { - nir_search_op_i2f = nir_last_opcode + 1, - nir_search_op_u2f, - nir_search_op_f2f, - nir_search_op_f2u, - nir_search_op_f2i, - nir_search_op_u2u, - nir_search_op_i2i, - nir_search_op_b2f, - nir_search_op_b2i, - nir_num_search_ops, -}; - -uint16_t nir_search_op_for_nir_op(nir_op op); - -typedef struct { - nir_search_value value; - - /* When set on a search expression, the expression will only match an SSA - * value that does *not* have the exact bit set. If unset, the exact bit - * on the SSA value is ignored. - */ - bool inexact : 1; - - /** In a replacement, requests that the instruction be marked exact. */ - bool exact : 1; - - /** Don't make the replacement exact if the search expression is exact. */ - bool ignore_exact : 1; - - /* One of nir_op or nir_search_op */ - uint16_t opcode : 13; - - /* Commutative expression index. This is assigned by opt_algebraic.py when - * search structures are constructed and is a unique (to this structure) - * index within the commutative operation bitfield used for searching for - * all combinations of expressions containing commutative operations. - */ - int8_t comm_expr_idx; - - /* Number of commutative expressions in this expression including this one - * (if it is commutative). - */ - uint8_t comm_exprs; - - /* Index in table->values[] for the expression operands */ - uint16_t srcs[4]; - - /** Optional table->expression_cond[] fxn ptr index - * - * This allows additional constraints on expression matching, it is - * typically used to match an expressions uses such as the number of times - * the expression is used, and whether its used by an if. - */ - int16_t cond_index; -} nir_search_expression; - -struct per_op_table { - const uint16_t *filter; - unsigned num_filtered_states; - const uint16_t *table; -}; - -struct transform { - uint16_t search; /* Index in table->values[] for the search expression. */ - uint16_t replace; /* Index in table->values[] for the replace value. */ - unsigned condition_offset; -}; - -typedef union { - nir_search_value value; /* base type of the union, first element of each variant struct */ - - nir_search_constant constant; - nir_search_variable variable; - nir_search_expression expression; -} nir_search_value_union; - -typedef bool (*nir_search_expression_cond)(const nir_alu_instr *instr); -typedef bool (*nir_search_variable_cond)(struct hash_table *range_ht, - const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle); - -/* Generated data table for an algebraic optimization pass. */ -typedef struct { - /** Array of all transforms in the pass. */ - const struct transform *transforms; - /** Mapping from automaton state index to location in *transforms. */ - const uint16_t *transform_offsets; - const struct per_op_table *pass_op_table; - const nir_search_value_union *values; - - /** - * Array of condition functions for expressions, referenced by - * nir_search_expression->cond. - */ - const nir_search_expression_cond *expression_cond; - - /** - * Array of condition functions for variables, referenced by - * nir_search_variable->cond. - */ - const nir_search_variable_cond *variable_cond; -} nir_algebraic_table; - -/* Note: these must match the start states created in - * TreeAutomaton._build_table() - */ - -/* WILDCARD_STATE = 0 is set by zeroing the state array */ -static const uint16_t CONST_STATE = 1; - -NIR_DEFINE_CAST(nir_search_value_as_variable, nir_search_value, - nir_search_variable, value, - type, nir_search_value_variable) -NIR_DEFINE_CAST(nir_search_value_as_constant, nir_search_value, - nir_search_constant, value, - type, nir_search_value_constant) -NIR_DEFINE_CAST(nir_search_value_as_expression, nir_search_value, - nir_search_expression, value, - type, nir_search_value_expression) - -bool -nir_algebraic_impl(nir_function_impl *impl, - const bool *condition_flags, - const nir_algebraic_table *table); - -#endif /* _NIR_SEARCH_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search_helpers.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search_helpers.h deleted file mode 100644 index 8117bd3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_search_helpers.h +++ /dev/null @@ -1,661 +0,0 @@ -/* - * Copyright © 2016 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Rob Clark - */ - -#ifndef _NIR_SEARCH_HELPERS_ -#define _NIR_SEARCH_HELPERS_ - -#include "nir.h" -#include "../../util/bitscan.h" -#include "nir_range_analysis.h" -#include - -static inline bool -is_pos_power_of_two(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - /* only constant srcs: */ - if (!nir_src_is_const(instr->src[src].src)) - return false; - - for (unsigned i = 0; i < num_components; i++) { - nir_alu_type type = nir_op_infos[instr->op].input_types[src]; - switch (nir_alu_type_get_base_type(type)) { - case nir_type_int: { - int64_t val = nir_src_comp_as_int(instr->src[src].src, swizzle[i]); - if (val <= 0 || !util_is_power_of_two_or_zero64(val)) - return false; - break; - } - case nir_type_uint: { - uint64_t val = nir_src_comp_as_uint(instr->src[src].src, swizzle[i]); - if (val == 0 || !util_is_power_of_two_or_zero64(val)) - return false; - break; - } - default: - return false; - } - } - - return true; -} - -static inline bool -is_neg_power_of_two(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - /* only constant srcs: */ - if (!nir_src_is_const(instr->src[src].src)) - return false; - - int64_t int_min = u_intN_min(instr->src[src].src.ssa->bit_size); - - for (unsigned i = 0; i < num_components; i++) { - nir_alu_type type = nir_op_infos[instr->op].input_types[src]; - switch (nir_alu_type_get_base_type(type)) { - case nir_type_int: { - int64_t val = nir_src_comp_as_int(instr->src[src].src, swizzle[i]); - /* "int_min" is a power-of-two, but negation can cause overflow. */ - if (val == int_min || val >= 0 || !util_is_power_of_two_or_zero64(-val)) - return false; - break; - } - default: - return false; - } - } - - return true; -} - -static inline bool -is_bitcount2(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - /* only constant srcs: */ - if (!nir_src_is_const(instr->src[src].src)) - return false; - - for (unsigned i = 0; i < num_components; i++) { - uint64_t val = nir_src_comp_as_uint(instr->src[src].src, swizzle[i]); - if (util_bitcount64(val) != 2) - return false; - } - - return true; -} - -#define MULTIPLE(test) \ -static inline bool \ -is_unsigned_multiple_of_ ## test(UNUSED struct hash_table *ht, \ - const nir_alu_instr *instr, \ - unsigned src, unsigned num_components, \ - const uint8_t *swizzle) \ -{ \ - /* only constant srcs: */ \ - if (!nir_src_is_const(instr->src[src].src)) \ - return false; \ - \ - for (unsigned i = 0; i < num_components; i++) { \ - uint64_t val = nir_src_comp_as_uint(instr->src[src].src, swizzle[i]); \ - if (val % test != 0) \ - return false; \ - } \ - \ - return true; \ -} - -MULTIPLE(2) -MULTIPLE(4) -MULTIPLE(8) -MULTIPLE(16) -MULTIPLE(32) -MULTIPLE(64) - -static inline bool -is_zero_to_one(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - /* only constant srcs: */ - if (!nir_src_is_const(instr->src[src].src)) - return false; - - for (unsigned i = 0; i < num_components; i++) { - nir_alu_type type = nir_op_infos[instr->op].input_types[src]; - switch (nir_alu_type_get_base_type(type)) { - case nir_type_float: { - double val = nir_src_comp_as_float(instr->src[src].src, swizzle[i]); - if (isnan(val) || val < 0.0f || val > 1.0f) - return false; - break; - } - default: - return false; - } - } - - return true; -} - -/** - * Exclusive compare with (0, 1). - * - * This differs from \c is_zero_to_one because that function tests 0 <= src <= - * 1 while this function tests 0 < src < 1. - */ -static inline bool -is_gt_0_and_lt_1(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - /* only constant srcs: */ - if (!nir_src_is_const(instr->src[src].src)) - return false; - - for (unsigned i = 0; i < num_components; i++) { - nir_alu_type type = nir_op_infos[instr->op].input_types[src]; - switch (nir_alu_type_get_base_type(type)) { - case nir_type_float: { - double val = nir_src_comp_as_float(instr->src[src].src, swizzle[i]); - if (isnan(val) || val <= 0.0f || val >= 1.0f) - return false; - break; - } - default: - return false; - } - } - - return true; -} - -static inline bool -is_not_const_zero(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - if (nir_src_as_const_value(instr->src[src].src) == NULL) - return true; - - for (unsigned i = 0; i < num_components; i++) { - nir_alu_type type = nir_op_infos[instr->op].input_types[src]; - switch (nir_alu_type_get_base_type(type)) { - case nir_type_float: - if (nir_src_comp_as_float(instr->src[src].src, swizzle[i]) == 0.0) - return false; - break; - case nir_type_bool: - case nir_type_int: - case nir_type_uint: - if (nir_src_comp_as_uint(instr->src[src].src, swizzle[i]) == 0) - return false; - break; - default: - return false; - } - } - - return true; -} - -/** Is value unsigned less than the limit? */ -static inline bool -is_ult(const nir_alu_instr *instr, unsigned src, unsigned num_components, const uint8_t *swizzle, - uint64_t limit) -{ - /* only constant srcs: */ - if (!nir_src_is_const(instr->src[src].src)) - return false; - - for (unsigned i = 0; i < num_components; i++) { - const uint64_t val = - nir_src_comp_as_uint(instr->src[src].src, swizzle[i]); - - if (val >= limit) - return false; - } - - return true; -} - -/** Is value unsigned less than 32? */ -static inline bool -is_ult_32(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - return is_ult(instr, src, num_components, swizzle, 32); -} - -/** Is value unsigned less than 0xfffc07fc? */ -static inline bool -is_ult_0xfffc07fc(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - return is_ult(instr, src, num_components, swizzle, 0xfffc07fcU); -} - -/** Is the first 5 bits of value unsigned greater than or equal 2? */ -static inline bool -is_first_5_bits_uge_2(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - /* only constant srcs: */ - if (!nir_src_is_const(instr->src[src].src)) - return false; - - for (unsigned i = 0; i < num_components; i++) { - const unsigned val = - nir_src_comp_as_uint(instr->src[src].src, swizzle[i]); - - if ((val & 0x1f) < 2) - return false; - } - - return true; -} - -static inline bool -is_not_const(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, UNUSED unsigned num_components, - UNUSED const uint8_t *swizzle) -{ - return !nir_src_is_const(instr->src[src].src); -} - -static inline bool -is_not_fmul(struct hash_table *ht, const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - nir_alu_instr *src_alu = - nir_src_as_alu_instr(instr->src[src].src); - - if (src_alu == NULL) - return true; - - if (src_alu->op == nir_op_fneg) - return is_not_fmul(ht, src_alu, 0, 0, NULL); - - return src_alu->op != nir_op_fmul && src_alu->op != nir_op_fmulz; -} - -static inline bool -is_fmul(struct hash_table *ht, const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - nir_alu_instr *src_alu = - nir_src_as_alu_instr(instr->src[src].src); - - if (src_alu == NULL) - return false; - - if (src_alu->op == nir_op_fneg) - return is_fmul(ht, src_alu, 0, 0, NULL); - - return src_alu->op == nir_op_fmul || src_alu->op == nir_op_fmulz; -} - -static inline bool -is_fsign(const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - nir_alu_instr *src_alu = - nir_src_as_alu_instr(instr->src[src].src); - - if (src_alu == NULL) - return false; - - if (src_alu->op == nir_op_fneg) - src_alu = nir_src_as_alu_instr(src_alu->src[0].src); - - return src_alu != NULL && src_alu->op == nir_op_fsign; -} - -static inline bool -is_not_const_and_not_fsign(struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - return is_not_const(ht, instr, src, num_components, swizzle) && - !is_fsign(instr, src, num_components, swizzle); -} - -static inline bool -is_used_once(const nir_alu_instr *instr) -{ - return list_is_singular(&instr->dest.dest.ssa.uses); -} - -static inline bool -is_used_by_if(const nir_alu_instr *instr) -{ - return nir_ssa_def_used_by_if(&instr->dest.dest.ssa); -} - -static inline bool -is_not_used_by_if(const nir_alu_instr *instr) -{ - return !is_used_by_if(instr); -} - -static inline bool -is_used_by_non_fsat(const nir_alu_instr *instr) -{ - nir_foreach_use(src, &instr->dest.dest.ssa) { - const nir_instr *const user_instr = src->parent_instr; - - if (user_instr->type != nir_instr_type_alu) - return true; - - const nir_alu_instr *const user_alu = nir_instr_as_alu(user_instr); - - assert(instr != user_alu); - if (user_alu->op != nir_op_fsat) - return true; - } - - return false; -} - -static inline bool -is_only_used_as_float(const nir_alu_instr *instr) -{ - nir_foreach_use(src, &instr->dest.dest.ssa) { - const nir_instr *const user_instr = src->parent_instr; - if (user_instr->type != nir_instr_type_alu) - return false; - - const nir_alu_instr *const user_alu = nir_instr_as_alu(user_instr); - assert(instr != user_alu); - - unsigned index = (nir_alu_src*)container_of(src, nir_alu_src, src) - user_alu->src; - nir_alu_type type = nir_op_infos[user_alu->op].input_types[index]; - if (nir_alu_type_get_base_type(type) != nir_type_float) - return false; - } - - return true; -} - -static inline bool -is_only_used_by_fadd(const nir_alu_instr *instr) -{ - nir_foreach_use(src, &instr->dest.dest.ssa) { - const nir_instr *const user_instr = src->parent_instr; - if (user_instr->type != nir_instr_type_alu) - return false; - - const nir_alu_instr *const user_alu = nir_instr_as_alu(user_instr); - assert(instr != user_alu); - - if (user_alu->op == nir_op_fneg || user_alu->op == nir_op_fabs) { - if (!is_only_used_by_fadd(user_alu)) - return false; - } else if (user_alu->op != nir_op_fadd) { - return false; - } - } - - return true; -} - -static inline bool -only_lower_8_bits_used(const nir_alu_instr *instr) -{ - return (nir_ssa_def_bits_used(&instr->dest.dest.ssa) & ~0xffull) == 0; -} - -static inline bool -only_lower_16_bits_used(const nir_alu_instr *instr) -{ - return (nir_ssa_def_bits_used(&instr->dest.dest.ssa) & ~0xffffull) == 0; -} - -/** - * Returns true if a NIR ALU src represents a constant integer - * of either 32 or 64 bits, and the higher word (bit-size / 2) - * of all its components is zero. - */ -static inline bool -is_upper_half_zero(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - if (nir_src_as_const_value(instr->src[src].src) == NULL) - return false; - - for (unsigned i = 0; i < num_components; i++) { - unsigned half_bit_size = nir_src_bit_size(instr->src[src].src) / 2; - uint64_t high_bits = u_bit_consecutive64(half_bit_size, half_bit_size); - if ((nir_src_comp_as_uint(instr->src[src].src, - swizzle[i]) & high_bits) != 0) { - return false; - } - } - - return true; -} - -/** - * Returns true if a NIR ALU src represents a constant integer - * of either 32 or 64 bits, and the lower word (bit-size / 2) - * of all its components is zero. - */ -static inline bool -is_lower_half_zero(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - if (nir_src_as_const_value(instr->src[src].src) == NULL) - return false; - - for (unsigned i = 0; i < num_components; i++) { - uint64_t low_bits = u_bit_consecutive64(0, nir_src_bit_size(instr->src[src].src) / 2); - if ((nir_src_comp_as_uint(instr->src[src].src, swizzle[i]) & low_bits) != 0) - return false; - } - - return true; -} - -static inline bool -is_upper_half_negative_one(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - if (nir_src_as_const_value(instr->src[src].src) == NULL) - return false; - - for (unsigned i = 0; i < num_components; i++) { - unsigned half_bit_size = nir_src_bit_size(instr->src[src].src) / 2; - uint64_t high_bits = u_bit_consecutive64(half_bit_size, half_bit_size); - if ((nir_src_comp_as_uint(instr->src[src].src, - swizzle[i]) & high_bits) != high_bits) { - return false; - } - } - - return true; -} - -static inline bool -is_lower_half_negative_one(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, unsigned num_components, - const uint8_t *swizzle) -{ - if (nir_src_as_const_value(instr->src[src].src) == NULL) - return false; - - for (unsigned i = 0; i < num_components; i++) { - uint64_t low_bits = u_bit_consecutive64(0, nir_src_bit_size(instr->src[src].src) / 2); - if ((nir_src_comp_as_uint(instr->src[src].src, swizzle[i]) & low_bits) != low_bits) - return false; - } - - return true; -} - -static inline bool -no_signed_wrap(const nir_alu_instr *instr) -{ - return instr->no_signed_wrap; -} - -static inline bool -no_unsigned_wrap(const nir_alu_instr *instr) -{ - return instr->no_unsigned_wrap; -} - -static inline bool -is_integral(struct hash_table *ht, const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range r = nir_analyze_range(ht, instr, src); - - return r.is_integral; -} - -/** - * Is the value finite? - */ -static inline bool -is_finite(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, UNUSED unsigned num_components, - UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - - return v.is_finite; -} - -static inline bool -is_finite_not_zero(UNUSED struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, UNUSED unsigned num_components, - UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - - return v.is_finite && - (v.range == lt_zero || v.range == gt_zero || v.range == ne_zero); -} - - -#define RELATION(r) \ -static inline bool \ -is_ ## r (struct hash_table *ht, const nir_alu_instr *instr, \ - unsigned src, UNUSED unsigned num_components, \ - UNUSED const uint8_t *swizzle) \ -{ \ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); \ - return v.range == r; \ -} \ - \ -static inline bool \ -is_a_number_ ## r (struct hash_table *ht, const nir_alu_instr *instr, \ - unsigned src, UNUSED unsigned num_components, \ - UNUSED const uint8_t *swizzle) \ -{ \ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); \ - return v.is_a_number && v.range == r; \ -} - -RELATION(lt_zero) -RELATION(le_zero) -RELATION(gt_zero) -RELATION(ge_zero) -RELATION(ne_zero) - -static inline bool -is_not_negative(struct hash_table *ht, const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - return v.range == ge_zero || v.range == gt_zero || v.range == eq_zero; -} - -static inline bool -is_a_number_not_negative(struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, UNUSED unsigned num_components, - UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - return v.is_a_number && - (v.range == ge_zero || v.range == gt_zero || v.range == eq_zero); -} - - -static inline bool -is_not_positive(struct hash_table *ht, const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - return v.range == le_zero || v.range == lt_zero || v.range == eq_zero; -} - -static inline bool -is_a_number_not_positive(struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, UNUSED unsigned num_components, - UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - return v.is_a_number && - (v.range == le_zero || v.range == lt_zero || v.range == eq_zero); -} - -static inline bool -is_not_zero(struct hash_table *ht, const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - return v.range == lt_zero || v.range == gt_zero || v.range == ne_zero; -} - -static inline bool -is_a_number_not_zero(struct hash_table *ht, const nir_alu_instr *instr, - unsigned src, UNUSED unsigned num_components, - UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - return v.is_a_number && - (v.range == lt_zero || v.range == gt_zero || v.range == ne_zero); -} - -static inline bool -is_a_number(struct hash_table *ht, const nir_alu_instr *instr, unsigned src, - UNUSED unsigned num_components, UNUSED const uint8_t *swizzle) -{ - const struct ssa_result_range v = nir_analyze_range(ht, instr, src); - return v.is_a_number; -} - -#endif /* _NIR_SEARCH_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_serialize.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_serialize.c deleted file mode 100644 index 58a27ed..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_serialize.c +++ /dev/null @@ -1,2281 +0,0 @@ -/* - * Copyright © 2017 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_serialize.h" -#include "nir_control_flow.h" -#include "nir_xfb_info.h" -#include "../../util/u_dynarray.h" -#include "../../util/u_math.h" - -#define NIR_SERIALIZE_FUNC_HAS_IMPL ((void *)(intptr_t)1) -#define MAX_OBJECT_IDS (1 << 20) - -typedef struct { - size_t blob_offset; - nir_ssa_def *src; - nir_block *block; -} write_phi_fixup; - -typedef struct { - const nir_shader *nir; - - struct blob *blob; - - /* maps pointer to index */ - struct hash_table *remap_table; - - /* the next index to assign to a NIR in-memory object */ - uint32_t next_idx; - - /* Array of write_phi_fixup structs representing phi sources that need to - * be resolved in the second pass. - */ - struct util_dynarray phi_fixups; - - /* The last serialized type. */ - const struct glsl_type *last_type; - const struct glsl_type *last_interface_type; - struct nir_variable_data last_var_data; - - /* For skipping equal ALU headers (typical after scalarization). */ - nir_instr_type last_instr_type; - uintptr_t last_alu_header_offset; - uint32_t last_alu_header; - - /* Don't write optional data such as variable names. */ - bool strip; -} write_ctx; - -typedef struct { - nir_shader *nir; - - struct blob_reader *blob; - - /* the next index to assign to a NIR in-memory object */ - uint32_t next_idx; - - /* The length of the index -> object table */ - uint32_t idx_table_len; - - /* map from index to deserialized pointer */ - void **idx_table; - - /* List of phi sources. */ - struct list_head phi_srcs; - - /* The last deserialized type. */ - const struct glsl_type *last_type; - const struct glsl_type *last_interface_type; - struct nir_variable_data last_var_data; -} read_ctx; - -static void -write_add_object(write_ctx *ctx, const void *obj) -{ - uint32_t index = ctx->next_idx++; - assert(index != MAX_OBJECT_IDS); - _mesa_hash_table_insert(ctx->remap_table, obj, (void *)(uintptr_t) index); -} - -static uint32_t -write_lookup_object(write_ctx *ctx, const void *obj) -{ - struct hash_entry *entry = _mesa_hash_table_search(ctx->remap_table, obj); - assert(entry); - return (uint32_t)(uintptr_t) entry->data; -} - -static void -read_add_object(read_ctx *ctx, void *obj) -{ - assert(ctx->next_idx < ctx->idx_table_len); - ctx->idx_table[ctx->next_idx++] = obj; -} - -static void * -read_lookup_object(read_ctx *ctx, uint32_t idx) -{ - assert(idx < ctx->idx_table_len); - return ctx->idx_table[idx]; -} - -static void * -read_object(read_ctx *ctx) -{ - return read_lookup_object(ctx, blob_read_uint32(ctx->blob)); -} - -static uint32_t -encode_bit_size_3bits(uint8_t bit_size) -{ - /* Encode values of 0, 1, 2, 4, 8, 16, 32, 64 in 3 bits. */ - assert(bit_size <= 64 && util_is_power_of_two_or_zero(bit_size)); - if (bit_size) - return util_logbase2(bit_size) + 1; - return 0; -} - -static uint8_t -decode_bit_size_3bits(uint8_t bit_size) -{ - if (bit_size) - return 1 << (bit_size - 1); - return 0; -} - -#define NUM_COMPONENTS_IS_SEPARATE_7 7 - -static uint8_t -encode_num_components_in_3bits(uint8_t num_components) -{ - if (num_components <= 4) - return num_components; - if (num_components == 8) - return 5; - if (num_components == 16) - return 6; - - /* special value indicating that num_components is in the next uint32 */ - return NUM_COMPONENTS_IS_SEPARATE_7; -} - -static uint8_t -decode_num_components_in_3bits(uint8_t value) -{ - if (value <= 4) - return value; - if (value == 5) - return 8; - if (value == 6) - return 16; - - unreachable("invalid num_components encoding"); - return 0; -} - -static void -write_constant(write_ctx *ctx, const nir_constant *c) -{ - blob_write_bytes(ctx->blob, c->values, sizeof(c->values)); - blob_write_uint32(ctx->blob, c->num_elements); - for (unsigned i = 0; i < c->num_elements; i++) - write_constant(ctx, c->elements[i]); -} - -static nir_constant * -read_constant(read_ctx *ctx, nir_variable *nvar) -{ - nir_constant *c = ralloc(nvar, nir_constant); - - blob_copy_bytes(ctx->blob, (uint8_t *)c->values, sizeof(c->values)); - c->num_elements = blob_read_uint32(ctx->blob); - c->elements = ralloc_array(nvar, nir_constant *, c->num_elements); - for (unsigned i = 0; i < c->num_elements; i++) - c->elements[i] = read_constant(ctx, nvar); - - return c; -} - -enum var_data_encoding { - var_encode_full, - var_encode_shader_temp, - var_encode_function_temp, - var_encode_location_diff, -}; - -union packed_var { - uint32_t u32; - struct { - unsigned has_name:1; - unsigned has_constant_initializer:1; - unsigned has_pointer_initializer:1; - unsigned has_interface_type:1; - unsigned num_state_slots:7; - unsigned data_encoding:2; - unsigned type_same_as_last:1; - unsigned interface_type_same_as_last:1; - unsigned ray_query:1; - unsigned num_members:16; - } u; -}; - -union packed_var_data_diff { - uint32_t u32; - struct { - int location:13; - int location_frac:3; - int driver_location:16; - } u; -}; - -static void -write_variable(write_ctx *ctx, const nir_variable *var) -{ - write_add_object(ctx, var); - - assert(var->num_state_slots < (1 << 7)); - - STATIC_ASSERT(sizeof(union packed_var) == 4); - union packed_var flags; - flags.u32 = 0; - - flags.u.has_name = !ctx->strip && var->name; - flags.u.has_constant_initializer = !!(var->constant_initializer); - flags.u.has_pointer_initializer = !!(var->pointer_initializer); - flags.u.has_interface_type = !!(var->interface_type); - flags.u.type_same_as_last = var->type == ctx->last_type; - flags.u.interface_type_same_as_last = - var->interface_type && var->interface_type == ctx->last_interface_type; - flags.u.num_state_slots = var->num_state_slots; - flags.u.num_members = var->num_members; - - struct nir_variable_data data = var->data; - - /* When stripping, we expect that the location is no longer needed, - * which is typically after shaders are linked. - */ - if (ctx->strip && - data.mode != nir_var_system_value && - data.mode != nir_var_shader_in && - data.mode != nir_var_shader_out) - data.location = 0; - - /* Temporary variables don't serialize var->data. */ - if (data.mode == nir_var_shader_temp) - flags.u.data_encoding = var_encode_shader_temp; - else if (data.mode == nir_var_function_temp) - flags.u.data_encoding = var_encode_function_temp; - else { - struct nir_variable_data tmp = data; - - tmp.location = ctx->last_var_data.location; - tmp.location_frac = ctx->last_var_data.location_frac; - tmp.driver_location = ctx->last_var_data.driver_location; - - /* See if we can encode only the difference in locations from the last - * variable. - */ - if (memcmp(&ctx->last_var_data, &tmp, sizeof(tmp)) == 0 && - abs((int)data.location - - (int)ctx->last_var_data.location) < (1 << 12) && - abs((int)data.driver_location - - (int)ctx->last_var_data.driver_location) < (1 << 15)) - flags.u.data_encoding = var_encode_location_diff; - else - flags.u.data_encoding = var_encode_full; - } - - flags.u.ray_query = var->data.ray_query; - - blob_write_uint32(ctx->blob, flags.u32); - - if (!flags.u.type_same_as_last) { - encode_type_to_blob(ctx->blob, var->type); - ctx->last_type = var->type; - } - - if (var->interface_type && !flags.u.interface_type_same_as_last) { - encode_type_to_blob(ctx->blob, var->interface_type); - ctx->last_interface_type = var->interface_type; - } - - if (flags.u.has_name) - blob_write_string(ctx->blob, var->name); - - if (flags.u.data_encoding == var_encode_full || - flags.u.data_encoding == var_encode_location_diff) { - if (flags.u.data_encoding == var_encode_full) { - blob_write_bytes(ctx->blob, &data, sizeof(data)); - } else { - /* Serialize only the difference in locations from the last variable. - */ - union packed_var_data_diff diff; - - diff.u.location = data.location - ctx->last_var_data.location; - diff.u.location_frac = data.location_frac - - ctx->last_var_data.location_frac; - diff.u.driver_location = data.driver_location - - ctx->last_var_data.driver_location; - - blob_write_uint32(ctx->blob, diff.u32); - } - - ctx->last_var_data = data; - } - - for (unsigned i = 0; i < var->num_state_slots; i++) { - blob_write_bytes(ctx->blob, &var->state_slots[i], - sizeof(var->state_slots[i])); - } - if (var->constant_initializer) - write_constant(ctx, var->constant_initializer); - if (var->pointer_initializer) - blob_write_uint32(ctx->blob, - write_lookup_object(ctx, var->pointer_initializer)); - if (var->num_members > 0) { - blob_write_bytes(ctx->blob, (uint8_t *) var->members, - var->num_members * sizeof(*var->members)); - } -} - -static nir_variable * -read_variable(read_ctx *ctx) -{ - nir_variable *var = rzalloc(ctx->nir, nir_variable); - read_add_object(ctx, var); - - union packed_var flags; - flags.u32 = blob_read_uint32(ctx->blob); - - if (flags.u.type_same_as_last) { - var->type = ctx->last_type; - } else { - var->type = decode_type_from_blob(ctx->blob); - ctx->last_type = var->type; - } - - if (flags.u.has_interface_type) { - if (flags.u.interface_type_same_as_last) { - var->interface_type = ctx->last_interface_type; - } else { - var->interface_type = decode_type_from_blob(ctx->blob); - ctx->last_interface_type = var->interface_type; - } - } - - if (flags.u.has_name) { - const char *name = blob_read_string(ctx->blob); - var->name = ralloc_strdup(var, name); - } else { - var->name = NULL; - } - - if (flags.u.data_encoding == var_encode_shader_temp) - var->data.mode = nir_var_shader_temp; - else if (flags.u.data_encoding == var_encode_function_temp) - var->data.mode = nir_var_function_temp; - else if (flags.u.data_encoding == var_encode_full) { - blob_copy_bytes(ctx->blob, (uint8_t *) &var->data, sizeof(var->data)); - ctx->last_var_data = var->data; - } else { /* var_encode_location_diff */ - union packed_var_data_diff diff; - diff.u32 = blob_read_uint32(ctx->blob); - - var->data = ctx->last_var_data; - var->data.location += diff.u.location; - var->data.location_frac += diff.u.location_frac; - var->data.driver_location += diff.u.driver_location; - - ctx->last_var_data = var->data; - } - - var->data.ray_query = flags.u.ray_query; - - var->num_state_slots = flags.u.num_state_slots; - if (var->num_state_slots != 0) { - var->state_slots = ralloc_array(var, nir_state_slot, - var->num_state_slots); - for (unsigned i = 0; i < var->num_state_slots; i++) { - blob_copy_bytes(ctx->blob, &var->state_slots[i], - sizeof(var->state_slots[i])); - } - } - if (flags.u.has_constant_initializer) - var->constant_initializer = read_constant(ctx, var); - else - var->constant_initializer = NULL; - - if (flags.u.has_pointer_initializer) - var->pointer_initializer = read_object(ctx); - else - var->pointer_initializer = NULL; - - var->num_members = flags.u.num_members; - if (var->num_members > 0) { - var->members = ralloc_array(var, struct nir_variable_data, - var->num_members); - blob_copy_bytes(ctx->blob, (uint8_t *) var->members, - var->num_members * sizeof(*var->members)); - } - - return var; -} - -static void -write_var_list(write_ctx *ctx, const struct exec_list *src) -{ - blob_write_uint32(ctx->blob, exec_list_length(src)); - foreach_list_typed(nir_variable, var, node, src) { - write_variable(ctx, var); - } -} - -static void -read_var_list(read_ctx *ctx, struct exec_list *dst) -{ - exec_list_make_empty(dst); - unsigned num_vars = blob_read_uint32(ctx->blob); - for (unsigned i = 0; i < num_vars; i++) { - nir_variable *var = read_variable(ctx); - exec_list_push_tail(dst, &var->node); - } -} - -static void -write_register(write_ctx *ctx, const nir_register *reg) -{ - write_add_object(ctx, reg); - blob_write_uint32(ctx->blob, reg->num_components); - blob_write_uint32(ctx->blob, reg->bit_size); - blob_write_uint32(ctx->blob, reg->num_array_elems); - blob_write_uint32(ctx->blob, reg->index); - blob_write_uint8(ctx->blob, reg->divergent); -} - -static nir_register * -read_register(read_ctx *ctx) -{ - nir_register *reg = ralloc(ctx->nir, nir_register); - read_add_object(ctx, reg); - reg->num_components = blob_read_uint32(ctx->blob); - reg->bit_size = blob_read_uint32(ctx->blob); - reg->num_array_elems = blob_read_uint32(ctx->blob); - reg->index = blob_read_uint32(ctx->blob); - reg->divergent = blob_read_uint8(ctx->blob); - - list_inithead(®->uses); - list_inithead(®->defs); - - return reg; -} - -static void -write_reg_list(write_ctx *ctx, const struct exec_list *src) -{ - blob_write_uint32(ctx->blob, exec_list_length(src)); - foreach_list_typed(nir_register, reg, node, src) - write_register(ctx, reg); -} - -static void -read_reg_list(read_ctx *ctx, struct exec_list *dst) -{ - exec_list_make_empty(dst); - unsigned num_regs = blob_read_uint32(ctx->blob); - for (unsigned i = 0; i < num_regs; i++) { - nir_register *reg = read_register(ctx); - exec_list_push_tail(dst, ®->node); - } -} - -union packed_src { - uint32_t u32; - struct { - unsigned is_ssa:1; /* <-- Header */ - unsigned is_indirect:1; - unsigned object_idx:20; - unsigned _footer:10; /* <-- Footer */ - } any; - struct { - unsigned _header:22; /* <-- Header */ - unsigned negate:1; /* <-- Footer */ - unsigned abs:1; - unsigned swizzle_x:2; - unsigned swizzle_y:2; - unsigned swizzle_z:2; - unsigned swizzle_w:2; - } alu; - struct { - unsigned _header:22; /* <-- Header */ - unsigned src_type:5; /* <-- Footer */ - unsigned _pad:5; - } tex; -}; - -static void -write_src_full(write_ctx *ctx, const nir_src *src, union packed_src header) -{ - /* Since sources are very frequent, we try to save some space when storing - * them. In particular, we store whether the source is a register and - * whether the register has an indirect index in the low two bits. We can - * assume that the high two bits of the index are zero, since otherwise our - * address space would've been exhausted allocating the remap table! - */ - header.any.is_ssa = src->is_ssa; - if (src->is_ssa) { - header.any.object_idx = write_lookup_object(ctx, src->ssa); - blob_write_uint32(ctx->blob, header.u32); - } else { - header.any.object_idx = write_lookup_object(ctx, src->reg.reg); - header.any.is_indirect = !!src->reg.indirect; - blob_write_uint32(ctx->blob, header.u32); - blob_write_uint32(ctx->blob, src->reg.base_offset); - if (src->reg.indirect) { - union packed_src header = {0}; - write_src_full(ctx, src->reg.indirect, header); - } - } -} - -static void -write_src(write_ctx *ctx, const nir_src *src) -{ - union packed_src header = {0}; - write_src_full(ctx, src, header); -} - -static union packed_src -read_src(read_ctx *ctx, nir_src *src) -{ - STATIC_ASSERT(sizeof(union packed_src) == 4); - union packed_src header; - header.u32 = blob_read_uint32(ctx->blob); - - src->is_ssa = header.any.is_ssa; - if (src->is_ssa) { - src->ssa = read_lookup_object(ctx, header.any.object_idx); - } else { - src->reg.reg = read_lookup_object(ctx, header.any.object_idx); - src->reg.base_offset = blob_read_uint32(ctx->blob); - if (header.any.is_indirect) { - src->reg.indirect = gc_alloc(ctx->nir->gctx, nir_src, 1); - read_src(ctx, src->reg.indirect); - } else { - src->reg.indirect = NULL; - } - } - return header; -} - -union packed_dest { - uint8_t u8; - struct { - uint8_t is_ssa:1; - uint8_t num_components:3; - uint8_t bit_size:3; - uint8_t divergent:1; - } ssa; - struct { - uint8_t is_ssa:1; - uint8_t is_indirect:1; - uint8_t _pad:6; - } reg; -}; - -enum intrinsic_const_indices_encoding { - /* Use packed_const_indices to store tightly packed indices. - * - * The common case for load_ubo is 0, 0, 0, which is trivially represented. - * The common cases for load_interpolated_input also fit here, e.g.: 7, 3 - */ - const_indices_all_combined, - - const_indices_8bit, /* 8 bits per element */ - const_indices_16bit, /* 16 bits per element */ - const_indices_32bit, /* 32 bits per element */ -}; - -enum load_const_packing { - /* Constants are not packed and are stored in following dwords. */ - load_const_full, - - /* packed_value contains high 19 bits, low bits are 0, - * good for floating-point decimals - */ - load_const_scalar_hi_19bits, - - /* packed_value contains low 19 bits, high bits are sign-extended */ - load_const_scalar_lo_19bits_sext, -}; - -union packed_instr { - uint32_t u32; - struct { - unsigned instr_type:4; /* always present */ - unsigned _pad:20; - unsigned dest:8; /* always last */ - } any; - struct { - unsigned instr_type:4; - unsigned exact:1; - unsigned no_signed_wrap:1; - unsigned no_unsigned_wrap:1; - unsigned saturate:1; - /* Reg: writemask; SSA: swizzles for 2 srcs */ - unsigned writemask_or_two_swizzles:4; - unsigned op:9; - unsigned packed_src_ssa_16bit:1; - /* Scalarized ALUs always have the same header. */ - unsigned num_followup_alu_sharing_header:2; - unsigned dest:8; - } alu; - struct { - unsigned instr_type:4; - unsigned deref_type:3; - unsigned cast_type_same_as_last:1; - unsigned modes:5; /* See (de|en)code_deref_modes() */ - unsigned _pad:9; - unsigned in_bounds:1; - unsigned packed_src_ssa_16bit:1; /* deref_var redefines this */ - unsigned dest:8; - } deref; - struct { - unsigned instr_type:4; - unsigned deref_type:3; - unsigned _pad:1; - unsigned object_idx:16; /* if 0, the object ID is a separate uint32 */ - unsigned dest:8; - } deref_var; - struct { - unsigned instr_type:4; - unsigned intrinsic:10; - unsigned const_indices_encoding:2; - unsigned packed_const_indices:8; - unsigned dest:8; - } intrinsic; - struct { - unsigned instr_type:4; - unsigned last_component:4; - unsigned bit_size:3; - unsigned packing:2; /* enum load_const_packing */ - unsigned packed_value:19; /* meaning determined by packing */ - } load_const; - struct { - unsigned instr_type:4; - unsigned last_component:4; - unsigned bit_size:3; - unsigned _pad:21; - } undef; - struct { - unsigned instr_type:4; - unsigned num_srcs:4; - unsigned op:5; - unsigned _pad:11; - unsigned dest:8; - } tex; - struct { - unsigned instr_type:4; - unsigned num_srcs:20; - unsigned dest:8; - } phi; - struct { - unsigned instr_type:4; - unsigned type:2; - unsigned _pad:26; - } jump; -}; - -/* Write "lo24" as low 24 bits in the first uint32. */ -static void -write_dest(write_ctx *ctx, const nir_dest *dst, union packed_instr header, - nir_instr_type instr_type) -{ - STATIC_ASSERT(sizeof(union packed_dest) == 1); - union packed_dest dest; - dest.u8 = 0; - - dest.ssa.is_ssa = dst->is_ssa; - if (dst->is_ssa) { - dest.ssa.num_components = - encode_num_components_in_3bits(dst->ssa.num_components); - dest.ssa.bit_size = encode_bit_size_3bits(dst->ssa.bit_size); - dest.ssa.divergent = dst->ssa.divergent; - } else { - dest.reg.is_indirect = !!(dst->reg.indirect); - } - header.any.dest = dest.u8; - - /* Check if the current ALU instruction has the same header as the previous - * instruction that is also ALU. If it is, we don't have to write - * the current header. This is a typical occurence after scalarization. - */ - if (instr_type == nir_instr_type_alu) { - bool equal_header = false; - - if (ctx->last_instr_type == nir_instr_type_alu) { - assert(ctx->last_alu_header_offset); - union packed_instr last_header; - last_header.u32 = ctx->last_alu_header; - - /* Clear the field that counts ALUs with equal headers. */ - union packed_instr clean_header; - clean_header.u32 = last_header.u32; - clean_header.alu.num_followup_alu_sharing_header = 0; - - /* There can be at most 4 consecutive ALU instructions - * sharing the same header. - */ - if (last_header.alu.num_followup_alu_sharing_header < 3 && - header.u32 == clean_header.u32) { - last_header.alu.num_followup_alu_sharing_header++; - blob_overwrite_uint32(ctx->blob, ctx->last_alu_header_offset, - last_header.u32); - ctx->last_alu_header = last_header.u32; - equal_header = true; - } - } - - if (!equal_header) { - ctx->last_alu_header_offset = blob_reserve_uint32(ctx->blob); - blob_overwrite_uint32(ctx->blob, ctx->last_alu_header_offset, header.u32); - ctx->last_alu_header = header.u32; - } - } else { - blob_write_uint32(ctx->blob, header.u32); - } - - if (dest.ssa.is_ssa && - dest.ssa.num_components == NUM_COMPONENTS_IS_SEPARATE_7) - blob_write_uint32(ctx->blob, dst->ssa.num_components); - - if (dst->is_ssa) { - write_add_object(ctx, &dst->ssa); - } else { - blob_write_uint32(ctx->blob, write_lookup_object(ctx, dst->reg.reg)); - blob_write_uint32(ctx->blob, dst->reg.base_offset); - if (dst->reg.indirect) - write_src(ctx, dst->reg.indirect); - } -} - -static void -read_dest(read_ctx *ctx, nir_dest *dst, nir_instr *instr, - union packed_instr header) -{ - union packed_dest dest; - dest.u8 = header.any.dest; - - if (dest.ssa.is_ssa) { - unsigned bit_size = decode_bit_size_3bits(dest.ssa.bit_size); - unsigned num_components; - if (dest.ssa.num_components == NUM_COMPONENTS_IS_SEPARATE_7) - num_components = blob_read_uint32(ctx->blob); - else - num_components = decode_num_components_in_3bits(dest.ssa.num_components); - nir_ssa_dest_init(instr, dst, num_components, bit_size, NULL); - dst->ssa.divergent = dest.ssa.divergent; - read_add_object(ctx, &dst->ssa); - } else { - dst->reg.reg = read_object(ctx); - dst->reg.base_offset = blob_read_uint32(ctx->blob); - if (dest.reg.is_indirect) { - dst->reg.indirect = gc_alloc(ctx->nir->gctx, nir_src, 1); - read_src(ctx, dst->reg.indirect); - } - } -} - -static bool -are_object_ids_16bit(write_ctx *ctx) -{ - /* Check the highest object ID, because they are monotonic. */ - return ctx->next_idx < (1 << 16); -} - -static bool -is_alu_src_ssa_16bit(write_ctx *ctx, const nir_alu_instr *alu) -{ - unsigned num_srcs = nir_op_infos[alu->op].num_inputs; - - for (unsigned i = 0; i < num_srcs; i++) { - if (!alu->src[i].src.is_ssa || alu->src[i].abs || alu->src[i].negate) - return false; - - unsigned src_components = nir_ssa_alu_instr_src_components(alu, i); - - for (unsigned chan = 0; chan < src_components; chan++) { - /* The swizzles for src0.x and src1.x are stored - * in writemask_or_two_swizzles for SSA ALUs. - */ - if (alu->dest.dest.is_ssa && i < 2 && chan == 0 && - alu->src[i].swizzle[chan] < 4) - continue; - - if (alu->src[i].swizzle[chan] != chan) - return false; - } - } - - return are_object_ids_16bit(ctx); -} - -static void -write_alu(write_ctx *ctx, const nir_alu_instr *alu) -{ - unsigned num_srcs = nir_op_infos[alu->op].num_inputs; - unsigned dst_components = nir_dest_num_components(alu->dest.dest); - - /* 9 bits for nir_op */ - STATIC_ASSERT(nir_num_opcodes <= 512); - union packed_instr header; - header.u32 = 0; - - header.alu.instr_type = alu->instr.type; - header.alu.exact = alu->exact; - header.alu.no_signed_wrap = alu->no_signed_wrap; - header.alu.no_unsigned_wrap = alu->no_unsigned_wrap; - header.alu.saturate = alu->dest.saturate; - header.alu.op = alu->op; - header.alu.packed_src_ssa_16bit = is_alu_src_ssa_16bit(ctx, alu); - - if (header.alu.packed_src_ssa_16bit && - alu->dest.dest.is_ssa) { - /* For packed srcs of SSA ALUs, this field stores the swizzles. */ - header.alu.writemask_or_two_swizzles = alu->src[0].swizzle[0]; - if (num_srcs > 1) - header.alu.writemask_or_two_swizzles |= alu->src[1].swizzle[0] << 2; - } else if (!alu->dest.dest.is_ssa && dst_components <= 4) { - /* For vec4 registers, this field is a writemask. */ - header.alu.writemask_or_two_swizzles = alu->dest.write_mask; - } - - write_dest(ctx, &alu->dest.dest, header, alu->instr.type); - - if (!alu->dest.dest.is_ssa && dst_components > 4) - blob_write_uint32(ctx->blob, alu->dest.write_mask); - - if (header.alu.packed_src_ssa_16bit) { - for (unsigned i = 0; i < num_srcs; i++) { - assert(alu->src[i].src.is_ssa); - unsigned idx = write_lookup_object(ctx, alu->src[i].src.ssa); - assert(idx < (1 << 16)); - blob_write_uint16(ctx->blob, idx); - } - } else { - for (unsigned i = 0; i < num_srcs; i++) { - unsigned src_channels = nir_ssa_alu_instr_src_components(alu, i); - unsigned src_components = nir_src_num_components(alu->src[i].src); - union packed_src src; - bool packed = src_components <= 4 && src_channels <= 4; - src.u32 = 0; - - src.alu.negate = alu->src[i].negate; - src.alu.abs = alu->src[i].abs; - - if (packed) { - src.alu.swizzle_x = alu->src[i].swizzle[0]; - src.alu.swizzle_y = alu->src[i].swizzle[1]; - src.alu.swizzle_z = alu->src[i].swizzle[2]; - src.alu.swizzle_w = alu->src[i].swizzle[3]; - } - - write_src_full(ctx, &alu->src[i].src, src); - - /* Store swizzles for vec8 and vec16. */ - if (!packed) { - for (unsigned o = 0; o < src_channels; o += 8) { - unsigned value = 0; - - for (unsigned j = 0; j < 8 && o + j < src_channels; j++) { - value |= (uint32_t)alu->src[i].swizzle[o + j] << - (4 * j); /* 4 bits per swizzle */ - } - - blob_write_uint32(ctx->blob, value); - } - } - } - } -} - -static nir_alu_instr * -read_alu(read_ctx *ctx, union packed_instr header) -{ - unsigned num_srcs = nir_op_infos[header.alu.op].num_inputs; - nir_alu_instr *alu = nir_alu_instr_create(ctx->nir, header.alu.op); - - alu->exact = header.alu.exact; - alu->no_signed_wrap = header.alu.no_signed_wrap; - alu->no_unsigned_wrap = header.alu.no_unsigned_wrap; - alu->dest.saturate = header.alu.saturate; - - read_dest(ctx, &alu->dest.dest, &alu->instr, header); - - unsigned dst_components = nir_dest_num_components(alu->dest.dest); - - if (alu->dest.dest.is_ssa) { - alu->dest.write_mask = u_bit_consecutive(0, dst_components); - } else if (dst_components <= 4) { - alu->dest.write_mask = header.alu.writemask_or_two_swizzles; - } else { - alu->dest.write_mask = blob_read_uint32(ctx->blob); - } - - if (header.alu.packed_src_ssa_16bit) { - for (unsigned i = 0; i < num_srcs; i++) { - nir_alu_src *src = &alu->src[i]; - src->src.is_ssa = true; - src->src.ssa = read_lookup_object(ctx, blob_read_uint16(ctx->blob)); - - memset(&src->swizzle, 0, sizeof(src->swizzle)); - - unsigned src_components = nir_ssa_alu_instr_src_components(alu, i); - - for (unsigned chan = 0; chan < src_components; chan++) - src->swizzle[chan] = chan; - } - } else { - for (unsigned i = 0; i < num_srcs; i++) { - union packed_src src = read_src(ctx, &alu->src[i].src); - unsigned src_channels = nir_ssa_alu_instr_src_components(alu, i); - unsigned src_components = nir_src_num_components(alu->src[i].src); - bool packed = src_components <= 4 && src_channels <= 4; - - alu->src[i].negate = src.alu.negate; - alu->src[i].abs = src.alu.abs; - - memset(&alu->src[i].swizzle, 0, sizeof(alu->src[i].swizzle)); - - if (packed) { - alu->src[i].swizzle[0] = src.alu.swizzle_x; - alu->src[i].swizzle[1] = src.alu.swizzle_y; - alu->src[i].swizzle[2] = src.alu.swizzle_z; - alu->src[i].swizzle[3] = src.alu.swizzle_w; - } else { - /* Load swizzles for vec8 and vec16. */ - for (unsigned o = 0; o < src_channels; o += 8) { - unsigned value = blob_read_uint32(ctx->blob); - - for (unsigned j = 0; j < 8 && o + j < src_channels; j++) { - alu->src[i].swizzle[o + j] = - (value >> (4 * j)) & 0xf; /* 4 bits per swizzle */ - } - } - } - } - } - - if (header.alu.packed_src_ssa_16bit && - alu->dest.dest.is_ssa) { - alu->src[0].swizzle[0] = header.alu.writemask_or_two_swizzles & 0x3; - if (num_srcs > 1) - alu->src[1].swizzle[0] = header.alu.writemask_or_two_swizzles >> 2; - } - - return alu; -} - -#define MODE_ENC_GENERIC_BIT (1 << 4) - -static nir_variable_mode -decode_deref_modes(unsigned modes) -{ - if (modes & MODE_ENC_GENERIC_BIT) { - modes &= ~MODE_ENC_GENERIC_BIT; - return modes << (ffs(nir_var_mem_generic) - 1); - } else { - return 1 << modes; - } -} - -static unsigned -encode_deref_modes(nir_variable_mode modes) -{ - /* Mode sets on derefs generally come in two forms. For certain OpenCL - * cases, we can have more than one of the generic modes set. In this - * case, we need the full bitfield. Fortunately, there are only 4 of - * these. For all other modes, we can only have one mode at a time so we - * can compress them by only storing the bit position. This, plus one bit - * to select encoding, lets us pack the entire bitfield in 5 bits. - */ - STATIC_ASSERT((nir_var_all & ~nir_var_mem_generic) < - (1 << MODE_ENC_GENERIC_BIT)); - - unsigned enc; - if (modes == 0 || (modes & nir_var_mem_generic)) { - assert(!(modes & ~nir_var_mem_generic)); - enc = modes >> (ffs(nir_var_mem_generic) - 1); - assert(enc < MODE_ENC_GENERIC_BIT); - enc |= MODE_ENC_GENERIC_BIT; - } else { - assert(util_is_power_of_two_nonzero(modes)); - enc = ffs(modes) - 1; - assert(enc < MODE_ENC_GENERIC_BIT); - } - assert(modes == decode_deref_modes(enc)); - return enc; -} - -static void -write_deref(write_ctx *ctx, const nir_deref_instr *deref) -{ - assert(deref->deref_type < 8); - - union packed_instr header; - header.u32 = 0; - - header.deref.instr_type = deref->instr.type; - header.deref.deref_type = deref->deref_type; - - if (deref->deref_type == nir_deref_type_cast) { - header.deref.modes = encode_deref_modes(deref->modes); - header.deref.cast_type_same_as_last = deref->type == ctx->last_type; - } - - unsigned var_idx = 0; - if (deref->deref_type == nir_deref_type_var) { - var_idx = write_lookup_object(ctx, deref->var); - if (var_idx && var_idx < (1 << 16)) - header.deref_var.object_idx = var_idx; - } - - if (deref->deref_type == nir_deref_type_array || - deref->deref_type == nir_deref_type_ptr_as_array) { - header.deref.packed_src_ssa_16bit = - deref->parent.is_ssa && deref->arr.index.is_ssa && - are_object_ids_16bit(ctx); - - header.deref.in_bounds = deref->arr.in_bounds; - } - - write_dest(ctx, &deref->dest, header, deref->instr.type); - - switch (deref->deref_type) { - case nir_deref_type_var: - if (!header.deref_var.object_idx) - blob_write_uint32(ctx->blob, var_idx); - break; - - case nir_deref_type_struct: - write_src(ctx, &deref->parent); - blob_write_uint32(ctx->blob, deref->strct.index); - break; - - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: - if (header.deref.packed_src_ssa_16bit) { - blob_write_uint16(ctx->blob, - write_lookup_object(ctx, deref->parent.ssa)); - blob_write_uint16(ctx->blob, - write_lookup_object(ctx, deref->arr.index.ssa)); - } else { - write_src(ctx, &deref->parent); - write_src(ctx, &deref->arr.index); - } - break; - - case nir_deref_type_cast: - write_src(ctx, &deref->parent); - blob_write_uint32(ctx->blob, deref->cast.ptr_stride); - blob_write_uint32(ctx->blob, deref->cast.align_mul); - blob_write_uint32(ctx->blob, deref->cast.align_offset); - if (!header.deref.cast_type_same_as_last) { - encode_type_to_blob(ctx->blob, deref->type); - ctx->last_type = deref->type; - } - break; - - case nir_deref_type_array_wildcard: - write_src(ctx, &deref->parent); - break; - - default: - unreachable("Invalid deref type"); - } -} - -static nir_deref_instr * -read_deref(read_ctx *ctx, union packed_instr header) -{ - nir_deref_type deref_type = header.deref.deref_type; - nir_deref_instr *deref = nir_deref_instr_create(ctx->nir, deref_type); - - read_dest(ctx, &deref->dest, &deref->instr, header); - - nir_deref_instr *parent; - - switch (deref->deref_type) { - case nir_deref_type_var: - if (header.deref_var.object_idx) - deref->var = read_lookup_object(ctx, header.deref_var.object_idx); - else - deref->var = read_object(ctx); - - deref->type = deref->var->type; - break; - - case nir_deref_type_struct: - read_src(ctx, &deref->parent); - parent = nir_src_as_deref(deref->parent); - deref->strct.index = blob_read_uint32(ctx->blob); - deref->type = glsl_get_struct_field(parent->type, deref->strct.index); - break; - - case nir_deref_type_array: - case nir_deref_type_ptr_as_array: - if (header.deref.packed_src_ssa_16bit) { - deref->parent.is_ssa = true; - deref->parent.ssa = read_lookup_object(ctx, blob_read_uint16(ctx->blob)); - deref->arr.index.is_ssa = true; - deref->arr.index.ssa = read_lookup_object(ctx, blob_read_uint16(ctx->blob)); - } else { - read_src(ctx, &deref->parent); - read_src(ctx, &deref->arr.index); - } - - deref->arr.in_bounds = header.deref.in_bounds; - - parent = nir_src_as_deref(deref->parent); - if (deref->deref_type == nir_deref_type_array) - deref->type = glsl_get_array_element(parent->type); - else - deref->type = parent->type; - break; - - case nir_deref_type_cast: - read_src(ctx, &deref->parent); - deref->cast.ptr_stride = blob_read_uint32(ctx->blob); - deref->cast.align_mul = blob_read_uint32(ctx->blob); - deref->cast.align_offset = blob_read_uint32(ctx->blob); - if (header.deref.cast_type_same_as_last) { - deref->type = ctx->last_type; - } else { - deref->type = decode_type_from_blob(ctx->blob); - ctx->last_type = deref->type; - } - break; - - case nir_deref_type_array_wildcard: - read_src(ctx, &deref->parent); - parent = nir_src_as_deref(deref->parent); - deref->type = glsl_get_array_element(parent->type); - break; - - default: - unreachable("Invalid deref type"); - } - - if (deref_type == nir_deref_type_var) { - deref->modes = deref->var->data.mode; - } else if (deref->deref_type == nir_deref_type_cast) { - deref->modes = decode_deref_modes(header.deref.modes); - } else { - assert(deref->parent.is_ssa); - deref->modes = nir_instr_as_deref(deref->parent.ssa->parent_instr)->modes; - } - - return deref; -} - -static void -write_intrinsic(write_ctx *ctx, const nir_intrinsic_instr *intrin) -{ - /* 10 bits for nir_intrinsic_op */ - STATIC_ASSERT(nir_num_intrinsics <= 1024); - unsigned num_srcs = nir_intrinsic_infos[intrin->intrinsic].num_srcs; - unsigned num_indices = nir_intrinsic_infos[intrin->intrinsic].num_indices; - assert(intrin->intrinsic < 1024); - - union packed_instr header; - header.u32 = 0; - - header.intrinsic.instr_type = intrin->instr.type; - header.intrinsic.intrinsic = intrin->intrinsic; - - /* Analyze constant indices to decide how to encode them. */ - if (num_indices) { - unsigned max_bits = 0; - for (unsigned i = 0; i < num_indices; i++) { - unsigned max = util_last_bit(intrin->const_index[i]); - max_bits = MAX2(max_bits, max); - } - - if (max_bits * num_indices <= 8) { - header.intrinsic.const_indices_encoding = const_indices_all_combined; - - /* Pack all const indices into 8 bits. */ - unsigned bit_size = 8 / num_indices; - for (unsigned i = 0; i < num_indices; i++) { - header.intrinsic.packed_const_indices |= - intrin->const_index[i] << (i * bit_size); - } - } else if (max_bits <= 8) - header.intrinsic.const_indices_encoding = const_indices_8bit; - else if (max_bits <= 16) - header.intrinsic.const_indices_encoding = const_indices_16bit; - else - header.intrinsic.const_indices_encoding = const_indices_32bit; - } - - if (nir_intrinsic_infos[intrin->intrinsic].has_dest) - write_dest(ctx, &intrin->dest, header, intrin->instr.type); - else - blob_write_uint32(ctx->blob, header.u32); - - for (unsigned i = 0; i < num_srcs; i++) - write_src(ctx, &intrin->src[i]); - - if (num_indices) { - switch (header.intrinsic.const_indices_encoding) { - case const_indices_8bit: - for (unsigned i = 0; i < num_indices; i++) - blob_write_uint8(ctx->blob, intrin->const_index[i]); - break; - case const_indices_16bit: - for (unsigned i = 0; i < num_indices; i++) - blob_write_uint16(ctx->blob, intrin->const_index[i]); - break; - case const_indices_32bit: - for (unsigned i = 0; i < num_indices; i++) - blob_write_uint32(ctx->blob, intrin->const_index[i]); - break; - } - } -} - -static nir_intrinsic_instr * -read_intrinsic(read_ctx *ctx, union packed_instr header) -{ - nir_intrinsic_op op = header.intrinsic.intrinsic; - nir_intrinsic_instr *intrin = nir_intrinsic_instr_create(ctx->nir, op); - - unsigned num_srcs = nir_intrinsic_infos[op].num_srcs; - unsigned num_indices = nir_intrinsic_infos[op].num_indices; - - if (nir_intrinsic_infos[op].has_dest) - read_dest(ctx, &intrin->dest, &intrin->instr, header); - - for (unsigned i = 0; i < num_srcs; i++) - read_src(ctx, &intrin->src[i]); - - /* Vectorized instrinsics have num_components same as dst or src that has - * 0 components in the info. Find it. - */ - if (nir_intrinsic_infos[op].has_dest && - nir_intrinsic_infos[op].dest_components == 0) { - intrin->num_components = nir_dest_num_components(intrin->dest); - } else { - for (unsigned i = 0; i < num_srcs; i++) { - if (nir_intrinsic_infos[op].src_components[i] == 0) { - intrin->num_components = nir_src_num_components(intrin->src[i]); - break; - } - } - } - - if (num_indices) { - switch (header.intrinsic.const_indices_encoding) { - case const_indices_all_combined: { - unsigned bit_size = 8 / num_indices; - unsigned bit_mask = u_bit_consecutive(0, bit_size); - for (unsigned i = 0; i < num_indices; i++) { - intrin->const_index[i] = - (header.intrinsic.packed_const_indices >> (i * bit_size)) & - bit_mask; - } - break; - } - case const_indices_8bit: - for (unsigned i = 0; i < num_indices; i++) - intrin->const_index[i] = blob_read_uint8(ctx->blob); - break; - case const_indices_16bit: - for (unsigned i = 0; i < num_indices; i++) - intrin->const_index[i] = blob_read_uint16(ctx->blob); - break; - case const_indices_32bit: - for (unsigned i = 0; i < num_indices; i++) - intrin->const_index[i] = blob_read_uint32(ctx->blob); - break; - } - } - - return intrin; -} - -static void -write_load_const(write_ctx *ctx, const nir_load_const_instr *lc) -{ - assert(lc->def.num_components >= 1 && lc->def.num_components <= 16); - union packed_instr header; - header.u32 = 0; - - header.load_const.instr_type = lc->instr.type; - header.load_const.last_component = lc->def.num_components - 1; - header.load_const.bit_size = encode_bit_size_3bits(lc->def.bit_size); - header.load_const.packing = load_const_full; - - /* Try to pack 1-component constants into the 19 free bits in the header. */ - if (lc->def.num_components == 1) { - switch (lc->def.bit_size) { - case 64: - if ((lc->value[0].u64 & 0x1fffffffffffull) == 0) { - /* packed_value contains high 19 bits, low bits are 0 */ - header.load_const.packing = load_const_scalar_hi_19bits; - header.load_const.packed_value = lc->value[0].u64 >> 45; - } else if (util_mask_sign_extend(lc->value[0].i64, 19) == lc->value[0].i64) { - /* packed_value contains low 19 bits, high bits are sign-extended */ - header.load_const.packing = load_const_scalar_lo_19bits_sext; - header.load_const.packed_value = lc->value[0].u64; - } - break; - - case 32: - if ((lc->value[0].u32 & 0x1fff) == 0) { - header.load_const.packing = load_const_scalar_hi_19bits; - header.load_const.packed_value = lc->value[0].u32 >> 13; - } else if (util_mask_sign_extend(lc->value[0].i32, 19) == lc->value[0].i32) { - header.load_const.packing = load_const_scalar_lo_19bits_sext; - header.load_const.packed_value = lc->value[0].u32; - } - break; - - case 16: - header.load_const.packing = load_const_scalar_lo_19bits_sext; - header.load_const.packed_value = lc->value[0].u16; - break; - case 8: - header.load_const.packing = load_const_scalar_lo_19bits_sext; - header.load_const.packed_value = lc->value[0].u8; - break; - case 1: - header.load_const.packing = load_const_scalar_lo_19bits_sext; - header.load_const.packed_value = lc->value[0].b; - break; - default: - unreachable("invalid bit_size"); - } - } - - blob_write_uint32(ctx->blob, header.u32); - - if (header.load_const.packing == load_const_full) { - switch (lc->def.bit_size) { - case 64: - blob_write_bytes(ctx->blob, lc->value, - sizeof(*lc->value) * lc->def.num_components); - break; - - case 32: - for (unsigned i = 0; i < lc->def.num_components; i++) - blob_write_uint32(ctx->blob, lc->value[i].u32); - break; - - case 16: - for (unsigned i = 0; i < lc->def.num_components; i++) - blob_write_uint16(ctx->blob, lc->value[i].u16); - break; - - default: - assert(lc->def.bit_size <= 8); - for (unsigned i = 0; i < lc->def.num_components; i++) - blob_write_uint8(ctx->blob, lc->value[i].u8); - break; - } - } - - write_add_object(ctx, &lc->def); -} - -static nir_load_const_instr * -read_load_const(read_ctx *ctx, union packed_instr header) -{ - nir_load_const_instr *lc = - nir_load_const_instr_create(ctx->nir, header.load_const.last_component + 1, - decode_bit_size_3bits(header.load_const.bit_size)); - lc->def.divergent = false; - - switch (header.load_const.packing) { - case load_const_scalar_hi_19bits: - switch (lc->def.bit_size) { - case 64: - lc->value[0].u64 = (uint64_t)header.load_const.packed_value << 45; - break; - case 32: - lc->value[0].u32 = (uint64_t)header.load_const.packed_value << 13; - break; - default: - unreachable("invalid bit_size"); - } - break; - - case load_const_scalar_lo_19bits_sext: - switch (lc->def.bit_size) { - case 64: - lc->value[0].i64 = ((int64_t)header.load_const.packed_value << 45) >> 45; - break; - case 32: - lc->value[0].i32 = ((int32_t)header.load_const.packed_value << 13) >> 13; - break; - case 16: - lc->value[0].u16 = header.load_const.packed_value; - break; - case 8: - lc->value[0].u8 = header.load_const.packed_value; - break; - case 1: - lc->value[0].b = header.load_const.packed_value; - break; - default: - unreachable("invalid bit_size"); - } - break; - - case load_const_full: - switch (lc->def.bit_size) { - case 64: - blob_copy_bytes(ctx->blob, lc->value, sizeof(*lc->value) * lc->def.num_components); - break; - - case 32: - for (unsigned i = 0; i < lc->def.num_components; i++) - lc->value[i].u32 = blob_read_uint32(ctx->blob); - break; - - case 16: - for (unsigned i = 0; i < lc->def.num_components; i++) - lc->value[i].u16 = blob_read_uint16(ctx->blob); - break; - - default: - assert(lc->def.bit_size <= 8); - for (unsigned i = 0; i < lc->def.num_components; i++) - lc->value[i].u8 = blob_read_uint8(ctx->blob); - break; - } - break; - } - - read_add_object(ctx, &lc->def); - return lc; -} - -static void -write_ssa_undef(write_ctx *ctx, const nir_ssa_undef_instr *undef) -{ - assert(undef->def.num_components >= 1 && undef->def.num_components <= 16); - - union packed_instr header; - header.u32 = 0; - - header.undef.instr_type = undef->instr.type; - header.undef.last_component = undef->def.num_components - 1; - header.undef.bit_size = encode_bit_size_3bits(undef->def.bit_size); - - blob_write_uint32(ctx->blob, header.u32); - write_add_object(ctx, &undef->def); -} - -static nir_ssa_undef_instr * -read_ssa_undef(read_ctx *ctx, union packed_instr header) -{ - nir_ssa_undef_instr *undef = - nir_ssa_undef_instr_create(ctx->nir, header.undef.last_component + 1, - decode_bit_size_3bits(header.undef.bit_size)); - - undef->def.divergent = false; - - read_add_object(ctx, &undef->def); - return undef; -} - -union packed_tex_data { - uint32_t u32; - struct { - unsigned sampler_dim:4; - unsigned dest_type:8; - unsigned coord_components:3; - unsigned is_array:1; - unsigned is_shadow:1; - unsigned is_new_style_shadow:1; - unsigned is_sparse:1; - unsigned component:2; - unsigned texture_non_uniform:1; - unsigned sampler_non_uniform:1; - unsigned array_is_lowered_cube:1; - unsigned unused:6; /* Mark unused for valgrind. */ - } u; -}; - -static void -write_tex(write_ctx *ctx, const nir_tex_instr *tex) -{ - assert(tex->num_srcs < 16); - assert(tex->op < 32); - - union packed_instr header; - header.u32 = 0; - - header.tex.instr_type = tex->instr.type; - header.tex.num_srcs = tex->num_srcs; - header.tex.op = tex->op; - - write_dest(ctx, &tex->dest, header, tex->instr.type); - - blob_write_uint32(ctx->blob, tex->texture_index); - blob_write_uint32(ctx->blob, tex->sampler_index); - if (tex->op == nir_texop_tg4) - blob_write_bytes(ctx->blob, tex->tg4_offsets, sizeof(tex->tg4_offsets)); - - STATIC_ASSERT(sizeof(union packed_tex_data) == sizeof(uint32_t)); - union packed_tex_data packed = { - .u.sampler_dim = tex->sampler_dim, - .u.dest_type = tex->dest_type, - .u.coord_components = tex->coord_components, - .u.is_array = tex->is_array, - .u.is_shadow = tex->is_shadow, - .u.is_new_style_shadow = tex->is_new_style_shadow, - .u.is_sparse = tex->is_sparse, - .u.component = tex->component, - .u.texture_non_uniform = tex->texture_non_uniform, - .u.sampler_non_uniform = tex->sampler_non_uniform, - .u.array_is_lowered_cube = tex->array_is_lowered_cube, - }; - blob_write_uint32(ctx->blob, packed.u32); - - for (unsigned i = 0; i < tex->num_srcs; i++) { - union packed_src src; - src.u32 = 0; - src.tex.src_type = tex->src[i].src_type; - write_src_full(ctx, &tex->src[i].src, src); - } -} - -static nir_tex_instr * -read_tex(read_ctx *ctx, union packed_instr header) -{ - nir_tex_instr *tex = nir_tex_instr_create(ctx->nir, header.tex.num_srcs); - - read_dest(ctx, &tex->dest, &tex->instr, header); - - tex->op = header.tex.op; - tex->texture_index = blob_read_uint32(ctx->blob); - tex->sampler_index = blob_read_uint32(ctx->blob); - if (tex->op == nir_texop_tg4) - blob_copy_bytes(ctx->blob, tex->tg4_offsets, sizeof(tex->tg4_offsets)); - - union packed_tex_data packed; - packed.u32 = blob_read_uint32(ctx->blob); - tex->sampler_dim = packed.u.sampler_dim; - tex->dest_type = packed.u.dest_type; - tex->coord_components = packed.u.coord_components; - tex->is_array = packed.u.is_array; - tex->is_shadow = packed.u.is_shadow; - tex->is_new_style_shadow = packed.u.is_new_style_shadow; - tex->is_sparse = packed.u.is_sparse; - tex->component = packed.u.component; - tex->texture_non_uniform = packed.u.texture_non_uniform; - tex->sampler_non_uniform = packed.u.sampler_non_uniform; - tex->array_is_lowered_cube = packed.u.array_is_lowered_cube; - - for (unsigned i = 0; i < tex->num_srcs; i++) { - union packed_src src = read_src(ctx, &tex->src[i].src); - tex->src[i].src_type = src.tex.src_type; - } - - return tex; -} - -static void -write_phi(write_ctx *ctx, const nir_phi_instr *phi) -{ - union packed_instr header; - header.u32 = 0; - - header.phi.instr_type = phi->instr.type; - header.phi.num_srcs = exec_list_length(&phi->srcs); - - /* Phi nodes are special, since they may reference SSA definitions and - * basic blocks that don't exist yet. We leave two empty uint32_t's here, - * and then store enough information so that a later fixup pass can fill - * them in correctly. - */ - write_dest(ctx, &phi->dest, header, phi->instr.type); - - nir_foreach_phi_src(src, phi) { - assert(src->src.is_ssa); - size_t blob_offset = blob_reserve_uint32(ctx->blob); - ASSERTED size_t blob_offset2 = blob_reserve_uint32(ctx->blob); - assert(blob_offset + sizeof(uint32_t) == blob_offset2); - write_phi_fixup fixup = { - .blob_offset = blob_offset, - .src = src->src.ssa, - .block = src->pred, - }; - util_dynarray_append(&ctx->phi_fixups, write_phi_fixup, fixup); - } -} - -static void -write_fixup_phis(write_ctx *ctx) -{ - util_dynarray_foreach(&ctx->phi_fixups, write_phi_fixup, fixup) { - blob_overwrite_uint32(ctx->blob, fixup->blob_offset, - write_lookup_object(ctx, fixup->src)); - blob_overwrite_uint32(ctx->blob, fixup->blob_offset + sizeof(uint32_t), - write_lookup_object(ctx, fixup->block)); - } - - util_dynarray_clear(&ctx->phi_fixups); -} - -static nir_phi_instr * -read_phi(read_ctx *ctx, nir_block *blk, union packed_instr header) -{ - nir_phi_instr *phi = nir_phi_instr_create(ctx->nir); - - read_dest(ctx, &phi->dest, &phi->instr, header); - - /* For similar reasons as before, we just store the index directly into the - * pointer, and let a later pass resolve the phi sources. - * - * In order to ensure that the copied sources (which are just the indices - * from the blob for now) don't get inserted into the old shader's use-def - * lists, we have to add the phi instruction *before* we set up its - * sources. - */ - nir_instr_insert_after_block(blk, &phi->instr); - - for (unsigned i = 0; i < header.phi.num_srcs; i++) { - nir_ssa_def *def = (nir_ssa_def *)(uintptr_t) blob_read_uint32(ctx->blob); - nir_block *pred = (nir_block *)(uintptr_t) blob_read_uint32(ctx->blob); - nir_phi_src *src = nir_phi_instr_add_src(phi, pred, nir_src_for_ssa(def)); - - /* Since we're not letting nir_insert_instr handle use/def stuff for us, - * we have to set the parent_instr manually. It doesn't really matter - * when we do it, so we might as well do it here. - */ - src->src.parent_instr = &phi->instr; - - /* Stash it in the list of phi sources. We'll walk this list and fix up - * sources at the very end of read_function_impl. - */ - list_add(&src->src.use_link, &ctx->phi_srcs); - } - - return phi; -} - -static void -read_fixup_phis(read_ctx *ctx) -{ - list_for_each_entry_safe(nir_phi_src, src, &ctx->phi_srcs, src.use_link) { - src->pred = read_lookup_object(ctx, (uintptr_t)src->pred); - src->src.ssa = read_lookup_object(ctx, (uintptr_t)src->src.ssa); - - /* Remove from this list */ - list_del(&src->src.use_link); - - list_addtail(&src->src.use_link, &src->src.ssa->uses); - } - assert(list_is_empty(&ctx->phi_srcs)); -} - -static void -write_jump(write_ctx *ctx, const nir_jump_instr *jmp) -{ - /* These aren't handled because they require special block linking */ - assert(jmp->type != nir_jump_goto && jmp->type != nir_jump_goto_if); - - assert(jmp->type < 4); - - union packed_instr header; - header.u32 = 0; - - header.jump.instr_type = jmp->instr.type; - header.jump.type = jmp->type; - - blob_write_uint32(ctx->blob, header.u32); -} - -static nir_jump_instr * -read_jump(read_ctx *ctx, union packed_instr header) -{ - /* These aren't handled because they require special block linking */ - assert(header.jump.type != nir_jump_goto && - header.jump.type != nir_jump_goto_if); - - nir_jump_instr *jmp = nir_jump_instr_create(ctx->nir, header.jump.type); - return jmp; -} - -static void -write_call(write_ctx *ctx, const nir_call_instr *call) -{ - blob_write_uint32(ctx->blob, write_lookup_object(ctx, call->callee)); - - for (unsigned i = 0; i < call->num_params; i++) - write_src(ctx, &call->params[i]); -} - -static nir_call_instr * -read_call(read_ctx *ctx) -{ - nir_function *callee = read_object(ctx); - nir_call_instr *call = nir_call_instr_create(ctx->nir, callee); - - for (unsigned i = 0; i < call->num_params; i++) - read_src(ctx, &call->params[i]); - - return call; -} - -static void -write_instr(write_ctx *ctx, const nir_instr *instr) -{ - /* We have only 4 bits for the instruction type. */ - assert(instr->type < 16); - - switch (instr->type) { - case nir_instr_type_alu: - write_alu(ctx, nir_instr_as_alu(instr)); - break; - case nir_instr_type_deref: - write_deref(ctx, nir_instr_as_deref(instr)); - break; - case nir_instr_type_intrinsic: - write_intrinsic(ctx, nir_instr_as_intrinsic(instr)); - break; - case nir_instr_type_load_const: - write_load_const(ctx, nir_instr_as_load_const(instr)); - break; - case nir_instr_type_ssa_undef: - write_ssa_undef(ctx, nir_instr_as_ssa_undef(instr)); - break; - case nir_instr_type_tex: - write_tex(ctx, nir_instr_as_tex(instr)); - break; - case nir_instr_type_phi: - write_phi(ctx, nir_instr_as_phi(instr)); - break; - case nir_instr_type_jump: - write_jump(ctx, nir_instr_as_jump(instr)); - break; - case nir_instr_type_call: - blob_write_uint32(ctx->blob, instr->type); - write_call(ctx, nir_instr_as_call(instr)); - break; - case nir_instr_type_parallel_copy: - unreachable("Cannot write parallel copies"); - default: - unreachable("bad instr type"); - } -} - -/* Return the number of instructions read. */ -static unsigned -read_instr(read_ctx *ctx, nir_block *block) -{ - STATIC_ASSERT(sizeof(union packed_instr) == 4); - union packed_instr header; - header.u32 = blob_read_uint32(ctx->blob); - nir_instr *instr; - - switch (header.any.instr_type) { - case nir_instr_type_alu: - for (unsigned i = 0; i <= header.alu.num_followup_alu_sharing_header; i++) - nir_instr_insert_after_block(block, &read_alu(ctx, header)->instr); - return header.alu.num_followup_alu_sharing_header + 1; - case nir_instr_type_deref: - instr = &read_deref(ctx, header)->instr; - break; - case nir_instr_type_intrinsic: - instr = &read_intrinsic(ctx, header)->instr; - break; - case nir_instr_type_load_const: - instr = &read_load_const(ctx, header)->instr; - break; - case nir_instr_type_ssa_undef: - instr = &read_ssa_undef(ctx, header)->instr; - break; - case nir_instr_type_tex: - instr = &read_tex(ctx, header)->instr; - break; - case nir_instr_type_phi: - /* Phi instructions are a bit of a special case when reading because we - * don't want inserting the instruction to automatically handle use/defs - * for us. Instead, we need to wait until all the blocks/instructions - * are read so that we can set their sources up. - */ - read_phi(ctx, block, header); - return 1; - case nir_instr_type_jump: - instr = &read_jump(ctx, header)->instr; - break; - case nir_instr_type_call: - instr = &read_call(ctx)->instr; - break; - case nir_instr_type_parallel_copy: - unreachable("Cannot read parallel copies"); - default: - unreachable("bad instr type"); - } - - nir_instr_insert_after_block(block, instr); - return 1; -} - -static void -write_block(write_ctx *ctx, const nir_block *block) -{ - write_add_object(ctx, block); - blob_write_uint32(ctx->blob, exec_list_length(&block->instr_list)); - - ctx->last_instr_type = ~0; - ctx->last_alu_header_offset = 0; - - nir_foreach_instr(instr, block) { - write_instr(ctx, instr); - ctx->last_instr_type = instr->type; - } -} - -static void -read_block(read_ctx *ctx, struct exec_list *cf_list) -{ - /* Don't actually create a new block. Just use the one from the tail of - * the list. NIR guarantees that the tail of the list is a block and that - * no two blocks are side-by-side in the IR; It should be empty. - */ - nir_block *block = - exec_node_data(nir_block, exec_list_get_tail(cf_list), cf_node.node); - - read_add_object(ctx, block); - unsigned num_instrs = blob_read_uint32(ctx->blob); - for (unsigned i = 0; i < num_instrs;) { - i += read_instr(ctx, block); - } -} - -static void -write_cf_list(write_ctx *ctx, const struct exec_list *cf_list); - -static void -read_cf_list(read_ctx *ctx, struct exec_list *cf_list); - -static void -write_if(write_ctx *ctx, nir_if *nif) -{ - write_src(ctx, &nif->condition); - blob_write_uint8(ctx->blob, nif->control); - - write_cf_list(ctx, &nif->then_list); - write_cf_list(ctx, &nif->else_list); -} - -static void -read_if(read_ctx *ctx, struct exec_list *cf_list) -{ - nir_if *nif = nir_if_create(ctx->nir); - - read_src(ctx, &nif->condition); - nif->control = blob_read_uint8(ctx->blob); - - nir_cf_node_insert_end(cf_list, &nif->cf_node); - - read_cf_list(ctx, &nif->then_list); - read_cf_list(ctx, &nif->else_list); -} - -static void -write_loop(write_ctx *ctx, nir_loop *loop) -{ - blob_write_uint8(ctx->blob, loop->control); - blob_write_uint8(ctx->blob, loop->divergent); - bool has_continue_construct = nir_loop_has_continue_construct(loop); - blob_write_uint8(ctx->blob, has_continue_construct); - - write_cf_list(ctx, &loop->body); - if (has_continue_construct) { - write_cf_list(ctx, &loop->continue_list); - } -} - -static void -read_loop(read_ctx *ctx, struct exec_list *cf_list) -{ - nir_loop *loop = nir_loop_create(ctx->nir); - - nir_cf_node_insert_end(cf_list, &loop->cf_node); - - loop->control = blob_read_uint8(ctx->blob); - loop->divergent = blob_read_uint8(ctx->blob); - bool has_continue_construct = blob_read_uint8(ctx->blob); - - read_cf_list(ctx, &loop->body); - if (has_continue_construct) { - nir_loop_add_continue_construct(loop); - read_cf_list(ctx, &loop->continue_list); - } -} - -static void -write_cf_node(write_ctx *ctx, nir_cf_node *cf) -{ - blob_write_uint32(ctx->blob, cf->type); - - switch (cf->type) { - case nir_cf_node_block: - write_block(ctx, nir_cf_node_as_block(cf)); - break; - case nir_cf_node_if: - write_if(ctx, nir_cf_node_as_if(cf)); - break; - case nir_cf_node_loop: - write_loop(ctx, nir_cf_node_as_loop(cf)); - break; - default: - unreachable("bad cf type"); - } -} - -static void -read_cf_node(read_ctx *ctx, struct exec_list *list) -{ - nir_cf_node_type type = blob_read_uint32(ctx->blob); - - switch (type) { - case nir_cf_node_block: - read_block(ctx, list); - break; - case nir_cf_node_if: - read_if(ctx, list); - break; - case nir_cf_node_loop: - read_loop(ctx, list); - break; - default: - unreachable("bad cf type"); - } -} - -static void -write_cf_list(write_ctx *ctx, const struct exec_list *cf_list) -{ - blob_write_uint32(ctx->blob, exec_list_length(cf_list)); - foreach_list_typed(nir_cf_node, cf, node, cf_list) { - write_cf_node(ctx, cf); - } -} - -static void -read_cf_list(read_ctx *ctx, struct exec_list *cf_list) -{ - uint32_t num_cf_nodes = blob_read_uint32(ctx->blob); - for (unsigned i = 0; i < num_cf_nodes; i++) - read_cf_node(ctx, cf_list); -} - -static void -write_function_impl(write_ctx *ctx, const nir_function_impl *fi) -{ - blob_write_uint8(ctx->blob, fi->structured); - blob_write_uint8(ctx->blob, !!fi->preamble); - - if (fi->preamble) - blob_write_uint32(ctx->blob, write_lookup_object(ctx, fi->preamble)); - - write_var_list(ctx, &fi->locals); - write_reg_list(ctx, &fi->registers); - blob_write_uint32(ctx->blob, fi->reg_alloc); - - write_cf_list(ctx, &fi->body); - write_fixup_phis(ctx); -} - -static nir_function_impl * -read_function_impl(read_ctx *ctx, nir_function *fxn) -{ - nir_function_impl *fi = nir_function_impl_create_bare(ctx->nir); - fi->function = fxn; - - fi->structured = blob_read_uint8(ctx->blob); - bool preamble = blob_read_uint8(ctx->blob); - - if (preamble) - fi->preamble = read_object(ctx); - - read_var_list(ctx, &fi->locals); - read_reg_list(ctx, &fi->registers); - fi->reg_alloc = blob_read_uint32(ctx->blob); - - read_cf_list(ctx, &fi->body); - read_fixup_phis(ctx); - - fi->valid_metadata = 0; - - return fi; -} - -static void -write_function(write_ctx *ctx, const nir_function *fxn) -{ - uint32_t flags = 0; - if (fxn->is_entrypoint) - flags |= 0x1; - if (fxn->is_preamble) - flags |= 0x2; - if (fxn->name) - flags |= 0x4; - if (fxn->impl) - flags |= 0x8; - blob_write_uint32(ctx->blob, flags); - if (fxn->name) - blob_write_string(ctx->blob, fxn->name); - - write_add_object(ctx, fxn); - - blob_write_uint32(ctx->blob, fxn->num_params); - for (unsigned i = 0; i < fxn->num_params; i++) { - uint32_t val = - ((uint32_t)fxn->params[i].num_components) | - ((uint32_t)fxn->params[i].bit_size) << 8; - blob_write_uint32(ctx->blob, val); - } - - /* At first glance, it looks like we should write the function_impl here. - * However, call instructions need to be able to reference at least the - * function and those will get processed as we write the function_impls. - * We stop here and write function_impls as a second pass. - */ -} - -static void -read_function(read_ctx *ctx) -{ - uint32_t flags = blob_read_uint32(ctx->blob); - bool has_name = flags & 0x4; - char *name = has_name ? blob_read_string(ctx->blob) : NULL; - - nir_function *fxn = nir_function_create(ctx->nir, name); - - read_add_object(ctx, fxn); - - fxn->num_params = blob_read_uint32(ctx->blob); - fxn->params = ralloc_array(fxn, nir_parameter, fxn->num_params); - for (unsigned i = 0; i < fxn->num_params; i++) { - uint32_t val = blob_read_uint32(ctx->blob); - fxn->params[i].num_components = val & 0xff; - fxn->params[i].bit_size = (val >> 8) & 0xff; - } - - fxn->is_entrypoint = flags & 0x1; - fxn->is_preamble = flags & 0x2; - if (flags & 0x8) - fxn->impl = NIR_SERIALIZE_FUNC_HAS_IMPL; -} - -static void -write_xfb_info(write_ctx *ctx, const nir_xfb_info *xfb) -{ - if (xfb == NULL) { - blob_write_uint32(ctx->blob, 0); - } else { - size_t size = nir_xfb_info_size(xfb->output_count); - assert(size <= UINT32_MAX); - blob_write_uint32(ctx->blob, size); - blob_write_bytes(ctx->blob, xfb, size); - } -} - -static nir_xfb_info * -read_xfb_info(read_ctx *ctx) -{ - uint32_t size = blob_read_uint32(ctx->blob); - if (size == 0) - return NULL; - - struct nir_xfb_info *xfb = ralloc_size(ctx->nir, size); - blob_copy_bytes(ctx->blob, (void *)xfb, size); - - return xfb; -} - -/** - * Serialize NIR into a binary blob. - * - * \param strip Don't serialize information only useful for debugging, - * such as variable names, making cache hits from similar - * shaders more likely. - */ -void -nir_serialize(struct blob *blob, const nir_shader *nir, bool strip) -{ - write_ctx ctx = {0}; - ctx.remap_table = _mesa_pointer_hash_table_create(NULL); - ctx.blob = blob; - ctx.nir = nir; - ctx.strip = strip; - util_dynarray_init(&ctx.phi_fixups, NULL); - - size_t idx_size_offset = blob_reserve_uint32(blob); - - struct shader_info info = nir->info; - uint32_t strings = 0; - if (!strip && info.name) - strings |= 0x1; - if (!strip && info.label) - strings |= 0x2; - blob_write_uint32(blob, strings); - if (!strip && info.name) - blob_write_string(blob, info.name); - if (!strip && info.label) - blob_write_string(blob, info.label); - info.name = info.label = NULL; - blob_write_bytes(blob, (uint8_t *) &info, sizeof(info)); - - write_var_list(&ctx, &nir->variables); - - blob_write_uint32(blob, nir->num_inputs); - blob_write_uint32(blob, nir->num_uniforms); - blob_write_uint32(blob, nir->num_outputs); - blob_write_uint32(blob, nir->scratch_size); - - blob_write_uint32(blob, exec_list_length(&nir->functions)); - nir_foreach_function(fxn, nir) { - write_function(&ctx, fxn); - } - - nir_foreach_function(fxn, nir) { - if (fxn->impl) - write_function_impl(&ctx, fxn->impl); - } - - blob_write_uint32(blob, nir->constant_data_size); - if (nir->constant_data_size > 0) - blob_write_bytes(blob, nir->constant_data, nir->constant_data_size); - - write_xfb_info(&ctx, nir->xfb_info); - - if (nir->info.stage == MESA_SHADER_KERNEL) { - blob_write_uint32(blob, nir->printf_info_count); - for (int i = 0; i < nir->printf_info_count; i++) { - u_printf_info *info = &nir->printf_info[i]; - blob_write_uint32(blob, info->num_args); - blob_write_uint32(blob, info->string_size); - blob_write_bytes(blob, info->arg_sizes, - info->num_args * sizeof(*info->arg_sizes)); - /* we can't use blob_write_string, because it contains multiple NULL - * terminated strings */ - blob_write_bytes(blob, info->strings, - info->string_size * sizeof(*info->strings)); - } - } - - blob_overwrite_uint32(blob, idx_size_offset, ctx.next_idx); - - _mesa_hash_table_destroy(ctx.remap_table, NULL); - util_dynarray_fini(&ctx.phi_fixups); -} - -nir_shader * -nir_deserialize(void *mem_ctx, - const struct nir_shader_compiler_options *options, - struct blob_reader *blob) -{ - read_ctx ctx = {0}; - ctx.blob = blob; - list_inithead(&ctx.phi_srcs); - ctx.idx_table_len = blob_read_uint32(blob); - ctx.idx_table = calloc(ctx.idx_table_len, sizeof(uintptr_t)); - - uint32_t strings = blob_read_uint32(blob); - char *name = (strings & 0x1) ? blob_read_string(blob) : NULL; - char *label = (strings & 0x2) ? blob_read_string(blob) : NULL; - - struct shader_info info; - blob_copy_bytes(blob, (uint8_t *) &info, sizeof(info)); - - ctx.nir = nir_shader_create(mem_ctx, info.stage, options, NULL); - - info.name = name ? ralloc_strdup(ctx.nir, name) : NULL; - info.label = label ? ralloc_strdup(ctx.nir, label) : NULL; - - ctx.nir->info = info; - - read_var_list(&ctx, &ctx.nir->variables); - - ctx.nir->num_inputs = blob_read_uint32(blob); - ctx.nir->num_uniforms = blob_read_uint32(blob); - ctx.nir->num_outputs = blob_read_uint32(blob); - ctx.nir->scratch_size = blob_read_uint32(blob); - - unsigned num_functions = blob_read_uint32(blob); - for (unsigned i = 0; i < num_functions; i++) - read_function(&ctx); - - nir_foreach_function(fxn, ctx.nir) { - if (fxn->impl == NIR_SERIALIZE_FUNC_HAS_IMPL) - fxn->impl = read_function_impl(&ctx, fxn); - } - - ctx.nir->constant_data_size = blob_read_uint32(blob); - if (ctx.nir->constant_data_size > 0) { - ctx.nir->constant_data = - ralloc_size(ctx.nir, ctx.nir->constant_data_size); - blob_copy_bytes(blob, ctx.nir->constant_data, - ctx.nir->constant_data_size); - } - - ctx.nir->xfb_info = read_xfb_info(&ctx); - - if (ctx.nir->info.stage == MESA_SHADER_KERNEL) { - ctx.nir->printf_info_count = blob_read_uint32(blob); - ctx.nir->printf_info = - ralloc_array(ctx.nir, u_printf_info, ctx.nir->printf_info_count); - - for (int i = 0; i < ctx.nir->printf_info_count; i++) { - u_printf_info *info = &ctx.nir->printf_info[i]; - info->num_args = blob_read_uint32(blob); - info->string_size = blob_read_uint32(blob); - info->arg_sizes = ralloc_array(ctx.nir, unsigned, info->num_args); - blob_copy_bytes(blob, info->arg_sizes, - info->num_args * sizeof(*info->arg_sizes)); - info->strings = ralloc_array(ctx.nir, char, info->string_size); - blob_copy_bytes(blob, info->strings, - info->string_size * sizeof(*info->strings)); - } - } - - free(ctx.idx_table); - - nir_validate_shader(ctx.nir, "after deserialize"); - - return ctx.nir; -} - -void -nir_shader_serialize_deserialize(nir_shader *shader) -{ - const struct nir_shader_compiler_options *options = shader->options; - - struct blob writer; - blob_init(&writer); - nir_serialize(&writer, shader, false); - - /* Delete all of dest's ralloc children but leave dest alone */ - void *dead_ctx = ralloc_context(NULL); - ralloc_adopt(dead_ctx, shader); - ralloc_free(dead_ctx); - - dead_ctx = ralloc_context(NULL); - - struct blob_reader reader; - blob_reader_init(&reader, writer.data, writer.size); - nir_shader *copy = nir_deserialize(dead_ctx, options, &reader); - - blob_finish(&writer); - - nir_shader_replace(shader, copy); - ralloc_free(dead_ctx); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_serialize.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_serialize.h deleted file mode 100644 index 99847e5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_serialize.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2017 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_SERIALIZE_H -#define _NIR_SERIALIZE_H - -#include "nir.h" -#include "../../util/blob.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void nir_serialize(struct blob *blob, const nir_shader *nir, bool strip); -nir_shader *nir_deserialize(void *mem_ctx, - const struct nir_shader_compiler_options *options, - struct blob_reader *blob); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_64bit_vec3_and_vec4.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_64bit_vec3_and_vec4.c deleted file mode 100644 index 0ce1a72..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_64bit_vec3_and_vec4.c +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Copyright © 2022 Collabora Ltd - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Gert Wollny - */ - -#include "nir.h" -#include "nir_builder.h" - -#include "nir_deref.h" -#include "../../util/hash_table.h" - -/* This pass splits stores to and loads from 64 bit vec3 - * and vec4 local variables to use at most vec2, and it also - * splits phi nodes accordingly. - * - * Arrays of vec3 and vec4 are handled directly, arrays of arrays - * are lowered to arrays on the fly. - */ - -static bool -nir_split_64bit_vec3_and_vec4_filter(const nir_instr *instr, - const void *data) -{ - switch (instr->type) { - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - - switch (intr->intrinsic) { - case nir_intrinsic_load_deref: { - if (nir_dest_bit_size(intr->dest) != 64) - return false; - nir_variable *var = nir_intrinsic_get_var(intr, 0); - if (var->data.mode != nir_var_function_temp) - return false; - return nir_dest_num_components(intr->dest) >= 3; - } - case nir_intrinsic_store_deref: { - if (nir_src_bit_size(intr->src[1]) != 64) - return false; - nir_variable *var = nir_intrinsic_get_var(intr, 0); - if (var->data.mode != nir_var_function_temp) - return false; - return nir_src_num_components(intr->src[1]) >= 3; - default: - return false; - } - } - } - case nir_instr_type_phi: { - nir_phi_instr *phi = nir_instr_as_phi(instr); - if (nir_dest_bit_size(phi->dest) != 64) - return false; - return nir_dest_num_components(phi->dest) >= 3; - } - - default: - return false; - } -} - -typedef struct { - nir_variable *xy; - nir_variable *zw; -} variable_pair; - - -static nir_ssa_def * -merge_to_vec3_or_vec4(nir_builder *b, nir_ssa_def *load1, - nir_ssa_def *load2) -{ - assert(load2->num_components > 0 && load2->num_components < 3); - - if (load2->num_components == 1) - return nir_vec3(b, nir_channel(b, load1, 0), - nir_channel(b, load1, 1), - nir_channel(b, load2, 0)); - else - return nir_vec4(b, nir_channel(b, load1, 0), - nir_channel(b, load1, 1), - nir_channel(b, load2, 0), - nir_channel(b, load2, 1)); -} - -static nir_ssa_def * -get_linear_array_offset(nir_builder *b, nir_deref_instr *deref) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - nir_ssa_def *offset = nir_imm_intN_t(b, 0, deref->dest.ssa.bit_size); - for (nir_deref_instr **p = &path.path[1]; *p; p++) { - switch ((*p)->deref_type) { - case nir_deref_type_array: { - nir_ssa_def *index = nir_ssa_for_src(b, (*p)->arr.index, 1); - int stride = glsl_array_size((*p)->type); - if (stride >= 0) - offset = nir_iadd(b, offset, nir_amul_imm(b, index, stride)); - else - offset = nir_iadd(b, offset, index); - break; - } - default: - unreachable("Not part of the path"); - } - } - nir_deref_path_finish(&path); - return offset; -} - - -static variable_pair * -get_var_pair(nir_builder *b, nir_variable *old_var, - struct hash_table *split_vars) -{ - variable_pair *new_var = NULL; - unsigned old_components = glsl_get_components( - glsl_without_array_or_matrix(old_var->type)); - - assert(old_components > 2 && old_components <= 4); - - struct hash_entry *entry = _mesa_hash_table_search(split_vars, old_var); - if (!entry) { - new_var = (variable_pair *)calloc(1, sizeof(variable_pair)); - new_var->xy = nir_variable_clone(old_var, b->shader); - new_var->zw = nir_variable_clone(old_var, b->shader); - new_var->xy->type = glsl_dvec_type(2); - new_var->zw->type = glsl_dvec_type(old_components - 2); - - if (glsl_type_is_array_or_matrix(old_var->type)) { - const struct glsl_type *element_type = glsl_without_array(old_var->type); - unsigned array_size = glsl_get_aoa_size(old_var->type) * glsl_get_matrix_columns(element_type); - new_var->xy->type = glsl_array_type(new_var->xy->type, - array_size, 0); - new_var->zw->type = glsl_array_type(new_var->zw->type, - array_size, 0); - } - - exec_list_push_tail(&b->impl->locals, &new_var->xy->node); - exec_list_push_tail(&b->impl->locals, &new_var->zw->node); - - _mesa_hash_table_insert(split_vars, old_var, new_var); - } else - new_var = (variable_pair *)entry->data; - return new_var; -} - -static nir_ssa_def * -split_load_deref(nir_builder *b, nir_intrinsic_instr *intr, - nir_ssa_def *offset, struct hash_table *split_vars) -{ - nir_variable *old_var = nir_intrinsic_get_var(intr, 0); - unsigned old_components = glsl_get_components( - glsl_without_array_or_matrix(old_var->type)); - - variable_pair *vars = get_var_pair(b, old_var, split_vars); - - nir_deref_instr *deref1 = nir_build_deref_var(b, vars->xy); - nir_deref_instr *deref2 = nir_build_deref_var(b, vars->zw); - - if (offset) { - deref1 = nir_build_deref_array(b, deref1, offset); - deref2 = nir_build_deref_array(b, deref2, offset); - } - - nir_ssa_def *load1 = nir_build_load_deref(b, 2, 64, &deref1->dest.ssa, 0); - nir_ssa_def *load2 = nir_build_load_deref(b, old_components - 2, 64, - &deref2->dest.ssa, 0); - - return merge_to_vec3_or_vec4(b, load1, load2); -} - -static nir_ssa_def * -split_store_deref(nir_builder *b, nir_intrinsic_instr *intr, - nir_ssa_def *offset, struct hash_table *split_vars) -{ - nir_variable *old_var = nir_intrinsic_get_var(intr, 0); - - variable_pair *vars = get_var_pair(b, old_var, split_vars); - - nir_deref_instr *deref_xy = nir_build_deref_var(b, vars->xy); - nir_deref_instr *deref_zw = nir_build_deref_var(b, vars->zw); - - if (offset) { - deref_xy = nir_build_deref_array(b, deref_xy, offset); - deref_zw = nir_build_deref_array(b, deref_zw, offset); - } - - int write_mask_xy = nir_intrinsic_write_mask(intr) & 3; - if (write_mask_xy) { - nir_ssa_def *src_xy = nir_channels(b, intr->src[1].ssa, 3); - nir_build_store_deref(b, &deref_xy->dest.ssa, src_xy, write_mask_xy); - } - - int write_mask_zw = nir_intrinsic_write_mask(intr) & 0xc; - if (write_mask_zw) { - nir_ssa_def *src_zw = nir_channels(b, intr->src[1].ssa, - nir_component_mask(intr->src[1].ssa->num_components) & 0xc); - nir_build_store_deref(b, &deref_zw->dest.ssa, src_zw, write_mask_zw >> 2); - } - - return NIR_LOWER_INSTR_PROGRESS_REPLACE; -} - -static nir_ssa_def * -split_phi(nir_builder *b, nir_phi_instr *phi) -{ - nir_op vec_op = nir_op_vec(phi->dest.ssa.num_components); - - nir_alu_instr *vec = nir_alu_instr_create(b->shader, vec_op); - nir_ssa_dest_init(&vec->instr, &vec->dest.dest, - phi->dest.ssa.num_components, - 64, NULL); - vec->dest.write_mask = (1 << phi->dest.ssa.num_components) - 1; - - int num_comp[2] = {2, phi->dest.ssa.num_components - 2}; - - nir_phi_instr *new_phi[2]; - - for (unsigned i = 0; i < 2; i++) { - new_phi[i] = nir_phi_instr_create(b->shader); - nir_ssa_dest_init(&new_phi[i]->instr, &new_phi[i]->dest, num_comp[i], - phi->dest.ssa.bit_size, NULL); - - nir_foreach_phi_src(src, phi) { - /* Insert at the end of the predecessor but before the jump - * (This was inspired by nir_lower_phi_to_scalar) */ - nir_instr *pred_last_instr = nir_block_last_instr(src->pred); - - if (pred_last_instr && pred_last_instr->type == nir_instr_type_jump) - b->cursor = nir_before_instr(pred_last_instr); - else - b->cursor = nir_after_block(src->pred); - - nir_ssa_def *new_src = nir_channels(b, src->src.ssa, - ((1 << num_comp[i]) - 1) << (2 * i)); - - nir_phi_instr_add_src(new_phi[i], src->pred, nir_src_for_ssa(new_src)); - } - nir_instr_insert_before(&phi->instr, &new_phi[i]->instr); - } - - b->cursor = nir_after_instr(&phi->instr); - return merge_to_vec3_or_vec4(b, &new_phi[0]->dest.ssa, &new_phi[1]->dest.ssa); -}; - -static nir_ssa_def * -nir_split_64bit_vec3_and_vec4_impl(nir_builder *b, nir_instr *instr, void *d) -{ - struct hash_table *split_vars = (struct hash_table *)d; - - switch (instr->type) { - - case nir_instr_type_intrinsic: { - - nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - switch (intr->intrinsic) { - - case nir_intrinsic_load_deref: { - nir_deref_instr *deref = - nir_instr_as_deref(intr->src[0].ssa->parent_instr); - if (deref->deref_type == nir_deref_type_var) - return split_load_deref(b, intr, NULL, split_vars); - else if (deref->deref_type == nir_deref_type_array) { - return split_load_deref(b, intr, get_linear_array_offset(b, deref), split_vars); - } - else - unreachable("Only splitting of loads from vars and arrays"); - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *deref = - nir_instr_as_deref(intr->src[0].ssa->parent_instr); - if (deref->deref_type == nir_deref_type_var) - return split_store_deref(b, intr, NULL, split_vars); - else if (deref->deref_type == nir_deref_type_array) - return split_store_deref(b, intr, get_linear_array_offset(b, deref), split_vars); - else - unreachable("Only splitting of stores to vars and arrays"); - } - - default: - unreachable("Only splitting load_deref and store_deref"); - } - } - - case nir_instr_type_phi: { - nir_phi_instr *phi = nir_instr_as_phi(instr); - return split_phi(b, phi); - } - - default: - unreachable("Only splitting load_deref/store_deref and phi"); - } - - return NULL; -} - - -bool -nir_split_64bit_vec3_and_vec4(nir_shader *sh) -{ - struct hash_table *split_vars = _mesa_pointer_hash_table_create(NULL); - - bool progress = - nir_shader_lower_instructions(sh, - nir_split_64bit_vec3_and_vec4_filter, - nir_split_64bit_vec3_and_vec4_impl, - split_vars); - - _mesa_hash_table_destroy(split_vars, NULL); - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_per_member_structs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_per_member_structs.c deleted file mode 100644 index 59440b2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_per_member_structs.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_deref.h" - -struct split_struct_state { - void *dead_ctx; - - struct hash_table *var_to_member_map; -}; - -static nir_variable * -find_var_member(struct nir_variable *var, unsigned member, - struct hash_table *var_to_member_map) -{ - struct hash_entry *map_entry = - _mesa_hash_table_search(var_to_member_map, var); - if (map_entry == NULL) - return NULL; - - nir_variable **members = map_entry->data; - assert(member < var->num_members); - return members[member]; -} - -static const struct glsl_type * -member_type(const struct glsl_type *type, unsigned index) -{ - if (glsl_type_is_array(type)) { - const struct glsl_type *elem = - member_type(glsl_get_array_element(type), index); - assert(glsl_get_explicit_stride(type) == 0); - return glsl_array_type(elem, glsl_get_length(type), 0); - } else { - assert(glsl_type_is_struct_or_ifc(type)); - assert(index < glsl_get_length(type)); - return glsl_get_struct_field(type, index); - } -} - -static void -split_variable(struct nir_variable *var, nir_shader *shader, - struct hash_table *var_to_member_map, void *dead_ctx) -{ - assert(var->state_slots == NULL); - - /* Constant initializers are currently not handled */ - assert(var->constant_initializer == NULL && var->pointer_initializer == NULL); - - nir_variable **members = - ralloc_array(dead_ctx, nir_variable *, var->num_members); - - for (unsigned i = 0; i < var->num_members; i++) { - char *member_name = NULL; - if (var->name) { - /* Calculate a reasonable variable name */ - member_name = ralloc_strdup(dead_ctx, var->name); - const struct glsl_type *t = var->type; - while (glsl_type_is_array(t)) { - ralloc_strcat(&member_name, "[*]"); - t = glsl_get_array_element(t); - } - const char *field_name = glsl_get_struct_elem_name(t, i); - if (field_name) { - member_name = ralloc_asprintf(dead_ctx, "%s.%s", - member_name, field_name); - } else { - member_name = ralloc_asprintf(dead_ctx, "%s.@%d", member_name, i); - } - } - - members[i] = - nir_variable_create(shader, var->members[i].mode, - member_type(var->type, i), member_name); - if (var->interface_type) { - members[i]->interface_type = - glsl_get_struct_field(var->interface_type, i); - } - members[i]->data = var->members[i]; - } - - _mesa_hash_table_insert(var_to_member_map, var, members); -} - -static nir_deref_instr * -build_member_deref(nir_builder *b, nir_deref_instr *deref, nir_variable *member) -{ - if (deref->deref_type == nir_deref_type_var) { - return nir_build_deref_var(b, member); - } else { - nir_deref_instr *parent = - build_member_deref(b, nir_deref_instr_parent(deref), member); - return nir_build_deref_follower(b, parent, deref); - } -} - -static bool -rewrite_deref_instr(nir_builder *b, nir_instr *instr, void *cb_data) -{ - if (instr->type != nir_instr_type_deref) - return false; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - struct hash_table *var_to_member_map = cb_data; - - /* We must be a struct deref */ - if (deref->deref_type != nir_deref_type_struct) - return false; - - nir_deref_instr *base; - for (base = nir_deref_instr_parent(deref); - base && base->deref_type != nir_deref_type_var; - base = nir_deref_instr_parent(base)) { - - /* If this struct is nested inside another, bail */ - if (base->deref_type == nir_deref_type_struct) - return false; - } - - /* We must be on a variable with members */ - if (!base || base->var->num_members == 0) - return false; - - nir_variable *member = find_var_member(base->var, deref->strct.index, - var_to_member_map); - assert(member); - - b->cursor = nir_before_instr(&deref->instr); - nir_deref_instr *member_deref = - build_member_deref(b, nir_deref_instr_parent(deref), member); - nir_ssa_def_rewrite_uses(&deref->dest.ssa, - &member_deref->dest.ssa); - - /* The referenced variable is no longer valid, clean up the deref */ - nir_deref_instr_remove_if_unused(deref); - - return true; -} - -bool -nir_split_per_member_structs(nir_shader *shader) -{ - bool progress = false; - void *dead_ctx = ralloc_context(NULL); - struct hash_table *var_to_member_map = - _mesa_pointer_hash_table_create(dead_ctx); - - nir_foreach_variable_with_modes_safe(var, shader, nir_var_shader_in | - nir_var_shader_out | - nir_var_system_value) { - if (var->num_members == 0) - continue; - - split_variable(var, shader, var_to_member_map, dead_ctx); - exec_node_remove(&var->node); - progress = true; - } - - if (!progress) { - ralloc_free(dead_ctx); - return false; - } - - nir_shader_instructions_pass(shader, rewrite_deref_instr, - nir_metadata_block_index | - nir_metadata_dominance, - var_to_member_map); - - ralloc_free(dead_ctx); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_var_copies.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_var_copies.c deleted file mode 100644 index c8f7395..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_var_copies.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" - -/* - * Implements "copy splitting" which is similar to structure splitting only - * it works on copy operations rather than the datatypes themselves. The - * GLSL language allows you to copy one variable to another an entire - * structure (which may contain arrays or other structures) at a time. - * Normally, in a language such as C this would be handled by a "structure - * splitting" pass that breaks up the structures. Unfortunately for us, - * structures used in inputs or outputs can't be split. Therefore, - * regardlesss of what we do, we have to be able to copy to/from - * structures. - * - * The primary purpose of structure splitting is to allow you to better - * optimize variable access and lower things to registers where you can. - * The primary issue here is that, if you lower the copy to a bunch of - * loads and stores, you loose a lot of information about the copy - * operation that you would like to keep around. To solve this problem, we - * have a "copy splitting" pass that, instead of splitting the structures - * or lowering the copy into loads and storres, splits the copy operation - * into a bunch of copy operations one for each leaf of the structure tree. - * If an intermediate array is encountered, it is referenced with a - * wildcard reference to indicate that the entire array is to be copied. - * - * As things become direct, array copies may be able to be losslessly - * lowered to having fewer and fewer wildcards. However, until that - * happens we want to keep the information about the arrays intact. - * - * Prior to the copy splitting pass, there are no wildcard references but - * there may be incomplete references where the tail of the deref chain is - * an array or a structure and not a specific element. After the copy - * splitting pass has completed, every variable deref will be a full-length - * dereference pointing to a single leaf in the structure type tree with - * possibly a few wildcard array dereferences. - */ - -static void -split_deref_copy_instr(nir_builder *b, - nir_deref_instr *dst, nir_deref_instr *src, - enum gl_access_qualifier dst_access, - enum gl_access_qualifier src_access) -{ - assert(glsl_get_bare_type(dst->type) == - glsl_get_bare_type(src->type)); - if (glsl_type_is_vector_or_scalar(src->type)) { - nir_copy_deref_with_access(b, dst, src, dst_access, src_access); - } else if (glsl_type_is_struct_or_ifc(src->type)) { - for (unsigned i = 0; i < glsl_get_length(src->type); i++) { - split_deref_copy_instr(b, nir_build_deref_struct(b, dst, i), - nir_build_deref_struct(b, src, i), - dst_access, src_access); - } - } else { - assert(glsl_type_is_matrix(src->type) || glsl_type_is_array(src->type)); - split_deref_copy_instr(b, nir_build_deref_array_wildcard(b, dst), - nir_build_deref_array_wildcard(b, src), - dst_access, src_access); - } -} - -static bool -split_var_copies_instr(nir_builder *b, nir_instr *instr, UNUSED void *cb_data) -{ - if (instr->type != nir_instr_type_intrinsic) - return false; - - nir_intrinsic_instr *copy = nir_instr_as_intrinsic(instr); - if (copy->intrinsic != nir_intrinsic_copy_deref) - return false; - - b->cursor = nir_instr_remove(©->instr); - - nir_deref_instr *dst = nir_instr_as_deref(copy->src[0].ssa->parent_instr); - nir_deref_instr *src = nir_instr_as_deref(copy->src[1].ssa->parent_instr); - split_deref_copy_instr(b, dst, src, - nir_intrinsic_dst_access(copy), - nir_intrinsic_src_access(copy)); - - return true; -} - -bool -nir_split_var_copies(nir_shader *shader) -{ - return nir_shader_instructions_pass(shader, split_var_copies_instr, - nir_metadata_block_index | - nir_metadata_dominance, - NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_vars.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_vars.c deleted file mode 100644 index 67953d4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_split_vars.c +++ /dev/null @@ -1,1708 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" -#include "nir_builder.h" -#include "nir_deref.h" -#include "nir_vla.h" - -#include "../../util/set.h" -#include "../../util/u_math.h" - -static struct set * -get_complex_used_vars(nir_shader *shader, void *mem_ctx) -{ - struct set *complex_vars = _mesa_pointer_set_create(mem_ctx); - - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - nir_foreach_block(block, function->impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - - /* We only need to consider var derefs because - * nir_deref_instr_has_complex_use is recursive. - */ - if (deref->deref_type == nir_deref_type_var && - nir_deref_instr_has_complex_use(deref, 0)) - _mesa_set_add(complex_vars, deref->var); - } - } - } - - return complex_vars; -} - -struct split_var_state { - void *mem_ctx; - - nir_shader *shader; - nir_function_impl *impl; - - nir_variable *base_var; -}; - -struct field { - struct field *parent; - - const struct glsl_type *type; - - unsigned num_fields; - struct field *fields; - - nir_variable *var; -}; - -static int -num_array_levels_in_array_of_vector_type(const struct glsl_type *type) -{ - int num_levels = 0; - while (true) { - if (glsl_type_is_array_or_matrix(type)) { - num_levels++; - type = glsl_get_array_element(type); - } else if (glsl_type_is_vector_or_scalar(type)) { - return num_levels; - } else { - /* Not an array of vectors */ - return -1; - } - } -} - -static void -init_field_for_type(struct field *field, struct field *parent, - const struct glsl_type *type, - const char *name, - struct split_var_state *state) -{ - *field = (struct field) { - .parent = parent, - .type = type, - }; - - const struct glsl_type *struct_type = glsl_without_array(type); - if (glsl_type_is_struct_or_ifc(struct_type)) { - field->num_fields = glsl_get_length(struct_type), - field->fields = ralloc_array(state->mem_ctx, struct field, - field->num_fields); - for (unsigned i = 0; i < field->num_fields; i++) { - char *field_name = NULL; - if (name) { - field_name = ralloc_asprintf(state->mem_ctx, "%s_%s", name, - glsl_get_struct_elem_name(struct_type, i)); - } else { - field_name = ralloc_asprintf(state->mem_ctx, "{unnamed %s}_%s", - glsl_get_type_name(struct_type), - glsl_get_struct_elem_name(struct_type, i)); - } - init_field_for_type(&field->fields[i], field, - glsl_get_struct_field(struct_type, i), - field_name, state); - } - } else { - const struct glsl_type *var_type = type; - for (struct field *f = field->parent; f; f = f->parent) - var_type = glsl_type_wrap_in_arrays(var_type, f->type); - - nir_variable_mode mode = state->base_var->data.mode; - if (mode == nir_var_function_temp) { - field->var = nir_local_variable_create(state->impl, var_type, name); - } else { - field->var = nir_variable_create(state->shader, mode, var_type, name); - } - field->var->data.ray_query = state->base_var->data.ray_query; - } -} - -static bool -split_var_list_structs(nir_shader *shader, - nir_function_impl *impl, - struct exec_list *vars, - nir_variable_mode mode, - struct hash_table *var_field_map, - struct set **complex_vars, - void *mem_ctx) -{ - struct split_var_state state = { - .mem_ctx = mem_ctx, - .shader = shader, - .impl = impl, - }; - - struct exec_list split_vars; - exec_list_make_empty(&split_vars); - - /* To avoid list confusion (we'll be adding things as we split variables), - * pull all of the variables we plan to split off of the list - */ - nir_foreach_variable_in_list_safe(var, vars) { - if (var->data.mode != mode) - continue; - - if (!glsl_type_is_struct_or_ifc(glsl_without_array(var->type))) - continue; - - if (*complex_vars == NULL) - *complex_vars = get_complex_used_vars(shader, mem_ctx); - - /* We can't split a variable that's referenced with deref that has any - * sort of complex usage. - */ - if (_mesa_set_search(*complex_vars, var)) - continue; - - exec_node_remove(&var->node); - exec_list_push_tail(&split_vars, &var->node); - } - - nir_foreach_variable_in_list(var, &split_vars) { - state.base_var = var; - - struct field *root_field = ralloc(mem_ctx, struct field); - init_field_for_type(root_field, NULL, var->type, var->name, &state); - _mesa_hash_table_insert(var_field_map, var, root_field); - } - - return !exec_list_is_empty(&split_vars); -} - -static void -split_struct_derefs_impl(nir_function_impl *impl, - struct hash_table *var_field_map, - nir_variable_mode modes, - void *mem_ctx) -{ - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_deref) - continue; - - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (!nir_deref_mode_may_be(deref, modes)) - continue; - - /* Clean up any dead derefs we find lying around. They may refer to - * variables we're planning to split. - */ - if (nir_deref_instr_remove_if_unused(deref)) - continue; - - if (!glsl_type_is_vector_or_scalar(deref->type)) - continue; - - nir_variable *base_var = nir_deref_instr_get_variable(deref); - /* If we can't chase back to the variable, then we're a complex use. - * This should have been detected by get_complex_used_vars() and the - * variable should not have been split. However, we have no way of - * knowing that here, so we just have to trust it. - */ - if (base_var == NULL) - continue; - - struct hash_entry *entry = - _mesa_hash_table_search(var_field_map, base_var); - if (!entry) - continue; - - struct field *root_field = entry->data; - - nir_deref_path path; - nir_deref_path_init(&path, deref, mem_ctx); - - struct field *tail_field = root_field; - for (unsigned i = 0; path.path[i]; i++) { - if (path.path[i]->deref_type != nir_deref_type_struct) - continue; - - assert(i > 0); - assert(glsl_type_is_struct_or_ifc(path.path[i - 1]->type)); - assert(path.path[i - 1]->type == - glsl_without_array(tail_field->type)); - - tail_field = &tail_field->fields[path.path[i]->strct.index]; - } - nir_variable *split_var = tail_field->var; - - nir_deref_instr *new_deref = NULL; - for (unsigned i = 0; path.path[i]; i++) { - nir_deref_instr *p = path.path[i]; - b.cursor = nir_after_instr(&p->instr); - - switch (p->deref_type) { - case nir_deref_type_var: - assert(new_deref == NULL); - new_deref = nir_build_deref_var(&b, split_var); - break; - - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - new_deref = nir_build_deref_follower(&b, new_deref, p); - break; - - case nir_deref_type_struct: - /* Nothing to do; we're splitting structs */ - break; - - default: - unreachable("Invalid deref type in path"); - } - } - - assert(new_deref->type == deref->type); - nir_ssa_def_rewrite_uses(&deref->dest.ssa, - &new_deref->dest.ssa); - nir_deref_instr_remove_if_unused(deref); - } - } -} - -/** A pass for splitting structs into multiple variables - * - * This pass splits arrays of structs into multiple variables, one for each - * (possibly nested) structure member. After this pass completes, no - * variables of the given mode will contain a struct type. - */ -bool -nir_split_struct_vars(nir_shader *shader, nir_variable_mode modes) -{ - void *mem_ctx = ralloc_context(NULL); - struct hash_table *var_field_map = - _mesa_pointer_hash_table_create(mem_ctx); - struct set *complex_vars = NULL; - - assert((modes & (nir_var_shader_temp | nir_var_ray_hit_attrib | nir_var_function_temp)) == modes); - - bool has_global_splits = false; - nir_variable_mode global_modes = modes & (nir_var_shader_temp | nir_var_ray_hit_attrib); - if (global_modes) { - has_global_splits = split_var_list_structs(shader, NULL, - &shader->variables, - global_modes, - var_field_map, - &complex_vars, - mem_ctx); - } - - bool progress = false; - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - bool has_local_splits = false; - if (modes & nir_var_function_temp) { - has_local_splits = split_var_list_structs(shader, function->impl, - &function->impl->locals, - nir_var_function_temp, - var_field_map, - &complex_vars, - mem_ctx); - } - - if (has_global_splits || has_local_splits) { - split_struct_derefs_impl(function->impl, var_field_map, - modes, mem_ctx); - - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - progress = true; - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - ralloc_free(mem_ctx); - - return progress; -} - -struct array_level_info { - unsigned array_len; - bool split; -}; - -struct array_split { - /* Only set if this is the tail end of the splitting */ - nir_variable *var; - - unsigned num_splits; - struct array_split *splits; -}; - -struct array_var_info { - nir_variable *base_var; - - const struct glsl_type *split_var_type; - - bool split_var; - struct array_split root_split; - - unsigned num_levels; - struct array_level_info levels[0]; -}; - -static bool -init_var_list_array_infos(nir_shader *shader, - struct exec_list *vars, - nir_variable_mode mode, - struct hash_table *var_info_map, - struct set **complex_vars, - void *mem_ctx) -{ - bool has_array = false; - - nir_foreach_variable_in_list(var, vars) { - if (var->data.mode != mode) - continue; - - int num_levels = num_array_levels_in_array_of_vector_type(var->type); - if (num_levels <= 0) - continue; - - if (*complex_vars == NULL) - *complex_vars = get_complex_used_vars(shader, mem_ctx); - - /* We can't split a variable that's referenced with deref that has any - * sort of complex usage. - */ - if (_mesa_set_search(*complex_vars, var)) - continue; - - struct array_var_info *info = - rzalloc_size(mem_ctx, sizeof(*info) + - num_levels * sizeof(info->levels[0])); - - info->base_var = var; - info->num_levels = num_levels; - - const struct glsl_type *type = var->type; - for (int i = 0; i < num_levels; i++) { - info->levels[i].array_len = glsl_get_length(type); - type = glsl_get_array_element(type); - - /* All levels start out initially as split */ - info->levels[i].split = true; - } - - _mesa_hash_table_insert(var_info_map, var, info); - has_array = true; - } - - return has_array; -} - -static struct array_var_info * -get_array_var_info(nir_variable *var, - struct hash_table *var_info_map) -{ - struct hash_entry *entry = - _mesa_hash_table_search(var_info_map, var); - return entry ? entry->data : NULL; -} - -static struct array_var_info * -get_array_deref_info(nir_deref_instr *deref, - struct hash_table *var_info_map, - nir_variable_mode modes) -{ - if (!nir_deref_mode_may_be(deref, modes)) - return NULL; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var == NULL) - return NULL; - - return get_array_var_info(var, var_info_map); -} - -static void -mark_array_deref_used(nir_deref_instr *deref, - struct hash_table *var_info_map, - nir_variable_mode modes, - void *mem_ctx) -{ - struct array_var_info *info = - get_array_deref_info(deref, var_info_map, modes); - if (!info) - return; - - nir_deref_path path; - nir_deref_path_init(&path, deref, mem_ctx); - - /* Walk the path and look for indirects. If we have an array deref with an - * indirect, mark the given level as not being split. - */ - for (unsigned i = 0; i < info->num_levels; i++) { - nir_deref_instr *p = path.path[i + 1]; - if (p->deref_type == nir_deref_type_array && - !nir_src_is_const(p->arr.index)) - info->levels[i].split = false; - } -} - -static void -mark_array_usage_impl(nir_function_impl *impl, - struct hash_table *var_info_map, - nir_variable_mode modes, - void *mem_ctx) -{ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_copy_deref: - mark_array_deref_used(nir_src_as_deref(intrin->src[1]), - var_info_map, modes, mem_ctx); - - - case nir_intrinsic_load_deref: - case nir_intrinsic_store_deref: - mark_array_deref_used(nir_src_as_deref(intrin->src[0]), - var_info_map, modes, mem_ctx); - break; - - default: - break; - } - } - } -} - -static void -create_split_array_vars(struct array_var_info *var_info, - unsigned level, - struct array_split *split, - const char *name, - nir_shader *shader, - nir_function_impl *impl, - void *mem_ctx) -{ - while (level < var_info->num_levels && !var_info->levels[level].split) { - name = ralloc_asprintf(mem_ctx, "%s[*]", name); - level++; - } - - if (level == var_info->num_levels) { - /* We add parens to the variable name so it looks like "(foo[2][*])" so - * that further derefs will look like "(foo[2][*])[ssa_6]" - */ - name = ralloc_asprintf(mem_ctx, "(%s)", name); - - nir_variable_mode mode = var_info->base_var->data.mode; - if (mode == nir_var_function_temp) { - split->var = nir_local_variable_create(impl, - var_info->split_var_type, name); - } else { - split->var = nir_variable_create(shader, mode, - var_info->split_var_type, name); - } - split->var->data.ray_query = var_info->base_var->data.ray_query; - } else { - assert(var_info->levels[level].split); - split->num_splits = var_info->levels[level].array_len; - split->splits = rzalloc_array(mem_ctx, struct array_split, - split->num_splits); - for (unsigned i = 0; i < split->num_splits; i++) { - create_split_array_vars(var_info, level + 1, &split->splits[i], - ralloc_asprintf(mem_ctx, "%s[%d]", name, i), - shader, impl, mem_ctx); - } - } -} - -static bool -split_var_list_arrays(nir_shader *shader, - nir_function_impl *impl, - struct exec_list *vars, - nir_variable_mode mode, - struct hash_table *var_info_map, - void *mem_ctx) -{ - struct exec_list split_vars; - exec_list_make_empty(&split_vars); - - nir_foreach_variable_in_list_safe(var, vars) { - if (var->data.mode != mode) - continue; - - struct array_var_info *info = get_array_var_info(var, var_info_map); - if (!info) - continue; - - bool has_split = false; - const struct glsl_type *split_type = - glsl_without_array_or_matrix(var->type); - for (int i = info->num_levels - 1; i >= 0; i--) { - if (info->levels[i].split) { - has_split = true; - continue; - } - - /* If the original type was a matrix type, we'd like to keep that so - * we don't convert matrices into arrays. - */ - if (i == info->num_levels - 1 && - glsl_type_is_matrix(glsl_without_array(var->type))) { - split_type = glsl_matrix_type(glsl_get_base_type(split_type), - glsl_get_components(split_type), - info->levels[i].array_len); - } else { - split_type = glsl_array_type(split_type, info->levels[i].array_len, 0); - } - } - - if (has_split) { - info->split_var_type = split_type; - /* To avoid list confusion (we'll be adding things as we split - * variables), pull all of the variables we plan to split off of the - * main variable list. - */ - exec_node_remove(&var->node); - exec_list_push_tail(&split_vars, &var->node); - } else { - assert(split_type == glsl_get_bare_type(var->type)); - /* If we're not modifying this variable, delete the info so we skip - * it faster in later passes. - */ - _mesa_hash_table_remove_key(var_info_map, var); - } - } - - nir_foreach_variable_in_list(var, &split_vars) { - struct array_var_info *info = get_array_var_info(var, var_info_map); - create_split_array_vars(info, 0, &info->root_split, var->name, - shader, impl, mem_ctx); - } - - return !exec_list_is_empty(&split_vars); -} - -static bool -deref_has_split_wildcard(nir_deref_path *path, - struct array_var_info *info) -{ - if (info == NULL) - return false; - - assert(path->path[0]->var == info->base_var); - for (unsigned i = 0; i < info->num_levels; i++) { - if (path->path[i + 1]->deref_type == nir_deref_type_array_wildcard && - info->levels[i].split) - return true; - } - - return false; -} - -static bool -array_path_is_out_of_bounds(nir_deref_path *path, - struct array_var_info *info) -{ - if (info == NULL) - return false; - - assert(path->path[0]->var == info->base_var); - for (unsigned i = 0; i < info->num_levels; i++) { - nir_deref_instr *p = path->path[i + 1]; - if (p->deref_type == nir_deref_type_array_wildcard) - continue; - - if (nir_src_is_const(p->arr.index) && - nir_src_as_uint(p->arr.index) >= info->levels[i].array_len) - return true; - } - - return false; -} - -static void -emit_split_copies(nir_builder *b, - struct array_var_info *dst_info, nir_deref_path *dst_path, - unsigned dst_level, nir_deref_instr *dst, - struct array_var_info *src_info, nir_deref_path *src_path, - unsigned src_level, nir_deref_instr *src) -{ - nir_deref_instr *dst_p, *src_p; - - while ((dst_p = dst_path->path[dst_level + 1])) { - if (dst_p->deref_type == nir_deref_type_array_wildcard) - break; - - dst = nir_build_deref_follower(b, dst, dst_p); - dst_level++; - } - - while ((src_p = src_path->path[src_level + 1])) { - if (src_p->deref_type == nir_deref_type_array_wildcard) - break; - - src = nir_build_deref_follower(b, src, src_p); - src_level++; - } - - if (src_p == NULL || dst_p == NULL) { - assert(src_p == NULL && dst_p == NULL); - nir_copy_deref(b, dst, src); - } else { - assert(dst_p->deref_type == nir_deref_type_array_wildcard && - src_p->deref_type == nir_deref_type_array_wildcard); - - if ((dst_info && dst_info->levels[dst_level].split) || - (src_info && src_info->levels[src_level].split)) { - /* There are no indirects at this level on one of the source or the - * destination so we are lowering it. - */ - assert(glsl_get_length(dst_path->path[dst_level]->type) == - glsl_get_length(src_path->path[src_level]->type)); - unsigned len = glsl_get_length(dst_path->path[dst_level]->type); - for (unsigned i = 0; i < len; i++) { - emit_split_copies(b, dst_info, dst_path, dst_level + 1, - nir_build_deref_array_imm(b, dst, i), - src_info, src_path, src_level + 1, - nir_build_deref_array_imm(b, src, i)); - } - } else { - /* Neither side is being split so we just keep going */ - emit_split_copies(b, dst_info, dst_path, dst_level + 1, - nir_build_deref_array_wildcard(b, dst), - src_info, src_path, src_level + 1, - nir_build_deref_array_wildcard(b, src)); - } - } -} - -static void -split_array_copies_impl(nir_function_impl *impl, - struct hash_table *var_info_map, - nir_variable_mode modes, - void *mem_ctx) -{ - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *copy = nir_instr_as_intrinsic(instr); - if (copy->intrinsic != nir_intrinsic_copy_deref) - continue; - - nir_deref_instr *dst_deref = nir_src_as_deref(copy->src[0]); - nir_deref_instr *src_deref = nir_src_as_deref(copy->src[1]); - - struct array_var_info *dst_info = - get_array_deref_info(dst_deref, var_info_map, modes); - struct array_var_info *src_info = - get_array_deref_info(src_deref, var_info_map, modes); - - if (!src_info && !dst_info) - continue; - - nir_deref_path dst_path, src_path; - nir_deref_path_init(&dst_path, dst_deref, mem_ctx); - nir_deref_path_init(&src_path, src_deref, mem_ctx); - - if (!deref_has_split_wildcard(&dst_path, dst_info) && - !deref_has_split_wildcard(&src_path, src_info)) - continue; - - b.cursor = nir_instr_remove(©->instr); - - emit_split_copies(&b, dst_info, &dst_path, 0, dst_path.path[0], - src_info, &src_path, 0, src_path.path[0]); - } - } -} - -static void -split_array_access_impl(nir_function_impl *impl, - struct hash_table *var_info_map, - nir_variable_mode modes, - void *mem_ctx) -{ - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - if (instr->type == nir_instr_type_deref) { - /* Clean up any dead derefs we find lying around. They may refer - * to variables we're planning to split. - */ - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (nir_deref_mode_may_be(deref, modes)) - nir_deref_instr_remove_if_unused(deref); - continue; - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref && - intrin->intrinsic != nir_intrinsic_copy_deref) - continue; - - const unsigned num_derefs = - intrin->intrinsic == nir_intrinsic_copy_deref ? 2 : 1; - - for (unsigned d = 0; d < num_derefs; d++) { - nir_deref_instr *deref = nir_src_as_deref(intrin->src[d]); - - struct array_var_info *info = - get_array_deref_info(deref, var_info_map, modes); - if (!info) - continue; - - nir_deref_path path; - nir_deref_path_init(&path, deref, mem_ctx); - - b.cursor = nir_before_instr(&intrin->instr); - - if (array_path_is_out_of_bounds(&path, info)) { - /* If one of the derefs is out-of-bounds, we just delete the - * instruction. If a destination is out of bounds, then it may - * have been in-bounds prior to shrinking so we don't want to - * accidentally stomp something. However, we've already proven - * that it will never be read so it's safe to delete. If a - * source is out of bounds then it is loading random garbage. - * For loads, we replace their uses with an undef instruction - * and for copies we just delete the copy since it was writing - * undefined garbage anyway and we may as well leave the random - * garbage in the destination alone. - */ - if (intrin->intrinsic == nir_intrinsic_load_deref) { - nir_ssa_def *u = - nir_ssa_undef(&b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - u); - } - nir_instr_remove(&intrin->instr); - for (unsigned i = 0; i < num_derefs; i++) - nir_deref_instr_remove_if_unused(nir_src_as_deref(intrin->src[i])); - break; - } - - struct array_split *split = &info->root_split; - for (unsigned i = 0; i < info->num_levels; i++) { - if (info->levels[i].split) { - nir_deref_instr *p = path.path[i + 1]; - unsigned index = nir_src_as_uint(p->arr.index); - assert(index < info->levels[i].array_len); - split = &split->splits[index]; - } - } - assert(!split->splits && split->var); - - nir_deref_instr *new_deref = nir_build_deref_var(&b, split->var); - for (unsigned i = 0; i < info->num_levels; i++) { - if (!info->levels[i].split) { - new_deref = nir_build_deref_follower(&b, new_deref, - path.path[i + 1]); - } - } - assert(new_deref->type == deref->type); - - /* Rewrite the deref source to point to the split one */ - nir_instr_rewrite_src(&intrin->instr, &intrin->src[d], - nir_src_for_ssa(&new_deref->dest.ssa)); - nir_deref_instr_remove_if_unused(deref); - } - } - } -} - -/** A pass for splitting arrays of vectors into multiple variables - * - * This pass looks at arrays (possibly multiple levels) of vectors (not - * structures or other types) and tries to split them into piles of variables, - * one for each array element. The heuristic used is simple: If a given array - * level is never used with an indirect, that array level will get split. - * - * This pass probably could handles structures easily enough but making a pass - * that could see through an array of structures of arrays would be difficult - * so it's best to just run nir_split_struct_vars first. - */ -bool -nir_split_array_vars(nir_shader *shader, nir_variable_mode modes) -{ - void *mem_ctx = ralloc_context(NULL); - struct hash_table *var_info_map = _mesa_pointer_hash_table_create(mem_ctx); - struct set *complex_vars = NULL; - - assert((modes & (nir_var_shader_temp | nir_var_ray_hit_attrib | nir_var_function_temp)) == modes); - - bool has_global_array = false; - if (modes & (nir_var_shader_temp | nir_var_ray_hit_attrib)) { - has_global_array = init_var_list_array_infos(shader, - &shader->variables, - modes, - var_info_map, - &complex_vars, - mem_ctx); - } - - bool has_any_array = false; - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - bool has_local_array = false; - if (modes & nir_var_function_temp) { - has_local_array = init_var_list_array_infos(shader, - &function->impl->locals, - nir_var_function_temp, - var_info_map, - &complex_vars, - mem_ctx); - } - - if (has_global_array || has_local_array) { - has_any_array = true; - mark_array_usage_impl(function->impl, var_info_map, modes, mem_ctx); - } - } - - /* If we failed to find any arrays of arrays, bail early. */ - if (!has_any_array) { - ralloc_free(mem_ctx); - nir_shader_preserve_all_metadata(shader); - return false; - } - - bool has_global_splits = false; - if (modes & (nir_var_shader_temp | nir_var_ray_hit_attrib)) { - has_global_splits = split_var_list_arrays(shader, NULL, - &shader->variables, - modes, - var_info_map, mem_ctx); - } - - bool progress = false; - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - bool has_local_splits = false; - if (modes & nir_var_function_temp) { - has_local_splits = split_var_list_arrays(shader, function->impl, - &function->impl->locals, - nir_var_function_temp, - var_info_map, mem_ctx); - } - - if (has_global_splits || has_local_splits) { - split_array_copies_impl(function->impl, var_info_map, modes, mem_ctx); - split_array_access_impl(function->impl, var_info_map, modes, mem_ctx); - - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - progress = true; - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - ralloc_free(mem_ctx); - - return progress; -} - -struct array_level_usage { - unsigned array_len; - - /* The value UINT_MAX will be used to indicate an indirect */ - unsigned max_read; - unsigned max_written; - - /* True if there is a copy that isn't to/from a shrinkable array */ - bool has_external_copy; - struct set *levels_copied; -}; - -struct vec_var_usage { - /* Convenience set of all components this variable has */ - nir_component_mask_t all_comps; - - nir_component_mask_t comps_read; - nir_component_mask_t comps_written; - - nir_component_mask_t comps_kept; - - /* True if there is a copy that isn't to/from a shrinkable vector */ - bool has_external_copy; - bool has_complex_use; - struct set *vars_copied; - - unsigned num_levels; - struct array_level_usage levels[0]; -}; - -static struct vec_var_usage * -get_vec_var_usage(nir_variable *var, - struct hash_table *var_usage_map, - bool add_usage_entry, void *mem_ctx) -{ - struct hash_entry *entry = _mesa_hash_table_search(var_usage_map, var); - if (entry) - return entry->data; - - if (!add_usage_entry) - return NULL; - - /* Check to make sure that we are working with an array of vectors. We - * don't bother to shrink single vectors because we figure that we can - * clean it up better with SSA than by inserting piles of vecN instructions - * to compact results. - */ - int num_levels = num_array_levels_in_array_of_vector_type(var->type); - if (num_levels < 1) - return NULL; /* Not an array of vectors */ - - struct vec_var_usage *usage = - rzalloc_size(mem_ctx, sizeof(*usage) + - num_levels * sizeof(usage->levels[0])); - - usage->num_levels = num_levels; - const struct glsl_type *type = var->type; - for (unsigned i = 0; i < num_levels; i++) { - usage->levels[i].array_len = glsl_get_length(type); - type = glsl_get_array_element(type); - } - assert(glsl_type_is_vector_or_scalar(type)); - - usage->all_comps = (1 << glsl_get_components(type)) - 1; - - _mesa_hash_table_insert(var_usage_map, var, usage); - - return usage; -} - -static struct vec_var_usage * -get_vec_deref_usage(nir_deref_instr *deref, - struct hash_table *var_usage_map, - nir_variable_mode modes, - bool add_usage_entry, void *mem_ctx) -{ - if (!nir_deref_mode_may_be(deref, modes)) - return NULL; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var == NULL) - return NULL; - - return get_vec_var_usage(nir_deref_instr_get_variable(deref), - var_usage_map, add_usage_entry, mem_ctx); -} - -static void -mark_deref_if_complex(nir_deref_instr *deref, - struct hash_table *var_usage_map, - nir_variable_mode modes, - void *mem_ctx) -{ - /* Only bother with var derefs because nir_deref_instr_has_complex_use is - * recursive. - */ - if (deref->deref_type != nir_deref_type_var) - return; - - if (!(deref->var->data.mode & modes)) - return; - - if (!nir_deref_instr_has_complex_use(deref, 0)) - return; - - struct vec_var_usage *usage = - get_vec_var_usage(deref->var, var_usage_map, true, mem_ctx); - if (!usage) - return; - - usage->has_complex_use = true; -} - -static void -mark_deref_used(nir_deref_instr *deref, - nir_component_mask_t comps_read, - nir_component_mask_t comps_written, - nir_deref_instr *copy_deref, - struct hash_table *var_usage_map, - nir_variable_mode modes, - void *mem_ctx) -{ - if (!nir_deref_mode_may_be(deref, modes)) - return; - - nir_variable *var = nir_deref_instr_get_variable(deref); - if (var == NULL) - return; - - struct vec_var_usage *usage = - get_vec_var_usage(var, var_usage_map, true, mem_ctx); - if (!usage) - return; - - usage->comps_read |= comps_read & usage->all_comps; - usage->comps_written |= comps_written & usage->all_comps; - - struct vec_var_usage *copy_usage = NULL; - if (copy_deref) { - copy_usage = get_vec_deref_usage(copy_deref, var_usage_map, modes, - true, mem_ctx); - if (copy_usage) { - if (usage->vars_copied == NULL) { - usage->vars_copied = _mesa_pointer_set_create(mem_ctx); - } - _mesa_set_add(usage->vars_copied, copy_usage); - } else { - usage->has_external_copy = true; - } - } - - nir_deref_path path; - nir_deref_path_init(&path, deref, mem_ctx); - - nir_deref_path copy_path; - if (copy_usage) - nir_deref_path_init(©_path, copy_deref, mem_ctx); - - unsigned copy_i = 0; - for (unsigned i = 0; i < usage->num_levels; i++) { - struct array_level_usage *level = &usage->levels[i]; - nir_deref_instr *deref = path.path[i + 1]; - assert(deref->deref_type == nir_deref_type_array || - deref->deref_type == nir_deref_type_array_wildcard); - - unsigned max_used; - if (deref->deref_type == nir_deref_type_array) { - max_used = nir_src_is_const(deref->arr.index) ? - nir_src_as_uint(deref->arr.index) : UINT_MAX; - } else { - /* For wildcards, we read or wrote the whole thing. */ - assert(deref->deref_type == nir_deref_type_array_wildcard); - max_used = level->array_len - 1; - - if (copy_usage) { - /* Match each wildcard level with the level on copy_usage */ - for (; copy_path.path[copy_i + 1]; copy_i++) { - if (copy_path.path[copy_i + 1]->deref_type == - nir_deref_type_array_wildcard) - break; - } - struct array_level_usage *copy_level = - ©_usage->levels[copy_i++]; - - if (level->levels_copied == NULL) { - level->levels_copied = _mesa_pointer_set_create(mem_ctx); - } - _mesa_set_add(level->levels_copied, copy_level); - } else { - /* We have a wildcard and it comes from a variable we aren't - * tracking; flag it and we'll know to not shorten this array. - */ - level->has_external_copy = true; - } - } - - if (comps_written) - level->max_written = MAX2(level->max_written, max_used); - if (comps_read) - level->max_read = MAX2(level->max_read, max_used); - } -} - -static bool -src_is_load_deref(nir_src src, nir_src deref_src) -{ - nir_intrinsic_instr *load = nir_src_as_intrinsic(src); - if (load == NULL || load->intrinsic != nir_intrinsic_load_deref) - return false; - - assert(load->src[0].is_ssa); - - return load->src[0].ssa == deref_src.ssa; -} - -/* Returns all non-self-referential components of a store instruction. A - * component is self-referential if it comes from the same component of a load - * instruction on the same deref. If the only data in a particular component - * of a variable came directly from that component then it's undefined. The - * only way to get defined data into a component of a variable is for it to - * get written there by something outside or from a different component. - * - * This is a fairly common pattern in shaders that come from either GLSL IR or - * GLSLang because both glsl_to_nir and GLSLang implement write-masking with - * load-vec-store. - */ -static nir_component_mask_t -get_non_self_referential_store_comps(nir_intrinsic_instr *store) -{ - nir_component_mask_t comps = nir_intrinsic_write_mask(store); - - assert(store->src[1].is_ssa); - nir_instr *src_instr = store->src[1].ssa->parent_instr; - if (src_instr->type != nir_instr_type_alu) - return comps; - - nir_alu_instr *src_alu = nir_instr_as_alu(src_instr); - - if (src_alu->op == nir_op_mov) { - /* If it's just a swizzle of a load from the same deref, discount any - * channels that don't move in the swizzle. - */ - if (src_is_load_deref(src_alu->src[0].src, store->src[0])) { - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - if (src_alu->src[0].swizzle[i] == i) - comps &= ~(1u << i); - } - } - } else if (nir_op_is_vec(src_alu->op)) { - /* If it's a vec, discount any channels that are just loads from the - * same deref put in the same spot. - */ - for (unsigned i = 0; i < nir_op_infos[src_alu->op].num_inputs; i++) { - if (src_is_load_deref(src_alu->src[i].src, store->src[0]) && - src_alu->src[i].swizzle[0] == i) - comps &= ~(1u << i); - } - } - - return comps; -} - -static void -find_used_components_impl(nir_function_impl *impl, - struct hash_table *var_usage_map, - nir_variable_mode modes, - void *mem_ctx) -{ - nir_foreach_block(block, impl) { - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_deref) { - mark_deref_if_complex(nir_instr_as_deref(instr), - var_usage_map, modes, mem_ctx); - } - - if (instr->type != nir_instr_type_intrinsic) - continue; - - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - switch (intrin->intrinsic) { - case nir_intrinsic_load_deref: - mark_deref_used(nir_src_as_deref(intrin->src[0]), - nir_ssa_def_components_read(&intrin->dest.ssa), 0, - NULL, var_usage_map, modes, mem_ctx); - break; - - case nir_intrinsic_store_deref: - mark_deref_used(nir_src_as_deref(intrin->src[0]), - 0, get_non_self_referential_store_comps(intrin), - NULL, var_usage_map, modes, mem_ctx); - break; - - case nir_intrinsic_copy_deref: { - /* Just mark everything used for copies. */ - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - nir_deref_instr *src = nir_src_as_deref(intrin->src[1]); - mark_deref_used(dst, 0, ~0, src, var_usage_map, modes, mem_ctx); - mark_deref_used(src, ~0, 0, dst, var_usage_map, modes, mem_ctx); - break; - } - - default: - break; - } - } - } -} - -static bool -shrink_vec_var_list(struct exec_list *vars, - nir_variable_mode mode, - struct hash_table *var_usage_map) -{ - /* Initialize the components kept field of each variable. This is the - * AND of the components written and components read. If a component is - * written but never read, it's dead. If it is read but never written, - * then all values read are undefined garbage and we may as well not read - * them. - * - * The same logic applies to the array length. We make the array length - * the minimum needed required length between read and write and plan to - * discard any OOB access. The one exception here is indirect writes - * because we don't know where they will land and we can't shrink an array - * with indirect writes because previously in-bounds writes may become - * out-of-bounds and have undefined behavior. - * - * Also, if we have a copy that to/from something we can't shrink, we need - * to leave components and array_len of any wildcards alone. - */ - nir_foreach_variable_in_list(var, vars) { - if (var->data.mode != mode) - continue; - - struct vec_var_usage *usage = - get_vec_var_usage(var, var_usage_map, false, NULL); - if (!usage) - continue; - - assert(usage->comps_kept == 0); - if (usage->has_external_copy || usage->has_complex_use) - usage->comps_kept = usage->all_comps; - else - usage->comps_kept = usage->comps_read & usage->comps_written; - - for (unsigned i = 0; i < usage->num_levels; i++) { - struct array_level_usage *level = &usage->levels[i]; - assert(level->array_len > 0); - - if (level->max_written == UINT_MAX || level->has_external_copy || - usage->has_complex_use) - continue; /* Can't shrink */ - - unsigned max_used = MIN2(level->max_read, level->max_written); - level->array_len = MIN2(max_used, level->array_len - 1) + 1; - } - } - - /* In order for variable copies to work, we have to have the same data type - * on the source and the destination. In order to satisfy this, we run a - * little fixed-point algorithm to transitively ensure that we get enough - * components and array elements for this to hold for all copies. - */ - bool fp_progress; - do { - fp_progress = false; - nir_foreach_variable_in_list(var, vars) { - if (var->data.mode != mode) - continue; - - struct vec_var_usage *var_usage = - get_vec_var_usage(var, var_usage_map, false, NULL); - if (!var_usage || !var_usage->vars_copied) - continue; - - set_foreach(var_usage->vars_copied, copy_entry) { - struct vec_var_usage *copy_usage = (void *)copy_entry->key; - if (copy_usage->comps_kept != var_usage->comps_kept) { - nir_component_mask_t comps_kept = - (var_usage->comps_kept | copy_usage->comps_kept); - var_usage->comps_kept = comps_kept; - copy_usage->comps_kept = comps_kept; - fp_progress = true; - } - } - - for (unsigned i = 0; i < var_usage->num_levels; i++) { - struct array_level_usage *var_level = &var_usage->levels[i]; - if (!var_level->levels_copied) - continue; - - set_foreach(var_level->levels_copied, copy_entry) { - struct array_level_usage *copy_level = (void *)copy_entry->key; - if (var_level->array_len != copy_level->array_len) { - unsigned array_len = - MAX2(var_level->array_len, copy_level->array_len); - var_level->array_len = array_len; - copy_level->array_len = array_len; - fp_progress = true; - } - } - } - } - } while (fp_progress); - - bool vars_shrunk = false; - nir_foreach_variable_in_list_safe(var, vars) { - if (var->data.mode != mode) - continue; - - struct vec_var_usage *usage = - get_vec_var_usage(var, var_usage_map, false, NULL); - if (!usage) - continue; - - bool shrunk = false; - const struct glsl_type *vec_type = var->type; - for (unsigned i = 0; i < usage->num_levels; i++) { - /* If we've reduced the array to zero elements at some level, just - * set comps_kept to 0 and delete the variable. - */ - if (usage->levels[i].array_len == 0) { - usage->comps_kept = 0; - break; - } - - assert(usage->levels[i].array_len <= glsl_get_length(vec_type)); - if (usage->levels[i].array_len < glsl_get_length(vec_type)) - shrunk = true; - vec_type = glsl_get_array_element(vec_type); - } - assert(glsl_type_is_vector_or_scalar(vec_type)); - - assert(usage->comps_kept == (usage->comps_kept & usage->all_comps)); - if (usage->comps_kept != usage->all_comps) - shrunk = true; - - if (usage->comps_kept == 0) { - /* This variable is dead, remove it */ - vars_shrunk = true; - exec_node_remove(&var->node); - continue; - } - - if (!shrunk) { - /* This variable doesn't need to be shrunk. Remove it from the - * hash table so later steps will ignore it. - */ - _mesa_hash_table_remove_key(var_usage_map, var); - continue; - } - - /* Build the new var type */ - unsigned new_num_comps = util_bitcount(usage->comps_kept); - const struct glsl_type *new_type = - glsl_vector_type(glsl_get_base_type(vec_type), new_num_comps); - for (int i = usage->num_levels - 1; i >= 0; i--) { - assert(usage->levels[i].array_len > 0); - /* If the original type was a matrix type, we'd like to keep that so - * we don't convert matrices into arrays. - */ - if (i == usage->num_levels - 1 && - glsl_type_is_matrix(glsl_without_array(var->type)) && - new_num_comps > 1 && usage->levels[i].array_len > 1) { - new_type = glsl_matrix_type(glsl_get_base_type(new_type), - new_num_comps, - usage->levels[i].array_len); - } else { - new_type = glsl_array_type(new_type, usage->levels[i].array_len, 0); - } - } - var->type = new_type; - - vars_shrunk = true; - } - - return vars_shrunk; -} - -static bool -vec_deref_is_oob(nir_deref_instr *deref, - struct vec_var_usage *usage) -{ - nir_deref_path path; - nir_deref_path_init(&path, deref, NULL); - - bool oob = false; - for (unsigned i = 0; i < usage->num_levels; i++) { - nir_deref_instr *p = path.path[i + 1]; - if (p->deref_type == nir_deref_type_array_wildcard) - continue; - - if (nir_src_is_const(p->arr.index) && - nir_src_as_uint(p->arr.index) >= usage->levels[i].array_len) { - oob = true; - break; - } - } - - nir_deref_path_finish(&path); - - return oob; -} - -static bool -vec_deref_is_dead_or_oob(nir_deref_instr *deref, - struct hash_table *var_usage_map, - nir_variable_mode modes) -{ - struct vec_var_usage *usage = - get_vec_deref_usage(deref, var_usage_map, modes, false, NULL); - if (!usage) - return false; - - return usage->comps_kept == 0 || vec_deref_is_oob(deref, usage); -} - -static void -shrink_vec_var_access_impl(nir_function_impl *impl, - struct hash_table *var_usage_map, - nir_variable_mode modes) -{ - nir_builder b; - nir_builder_init(&b, impl); - - nir_foreach_block(block, impl) { - nir_foreach_instr_safe(instr, block) { - switch (instr->type) { - case nir_instr_type_deref: { - nir_deref_instr *deref = nir_instr_as_deref(instr); - if (!nir_deref_mode_may_be(deref, modes)) - break; - - /* Clean up any dead derefs we find lying around. They may refer - * to variables we've deleted. - */ - if (nir_deref_instr_remove_if_unused(deref)) - break; - - /* Update the type in the deref to keep the types consistent as - * you walk down the chain. We don't need to check if this is one - * of the derefs we're shrinking because this is a no-op if it - * isn't. The worst that could happen is that we accidentally fix - * an invalid deref. - */ - if (deref->deref_type == nir_deref_type_var) { - deref->type = deref->var->type; - } else if (deref->deref_type == nir_deref_type_array || - deref->deref_type == nir_deref_type_array_wildcard) { - nir_deref_instr *parent = nir_deref_instr_parent(deref); - assert(glsl_type_is_array(parent->type) || - glsl_type_is_matrix(parent->type)); - deref->type = glsl_get_array_element(parent->type); - } - break; - } - - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); - - /* If we have a copy whose source or destination has been deleted - * because we determined the variable was dead, then we just - * delete the copy instruction. If the source variable was dead - * then it was writing undefined garbage anyway and if it's the - * destination variable that's dead then the write isn't needed. - */ - if (intrin->intrinsic == nir_intrinsic_copy_deref) { - nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]); - nir_deref_instr *src = nir_src_as_deref(intrin->src[1]); - if (vec_deref_is_dead_or_oob(dst, var_usage_map, modes) || - vec_deref_is_dead_or_oob(src, var_usage_map, modes)) { - nir_instr_remove(&intrin->instr); - nir_deref_instr_remove_if_unused(dst); - nir_deref_instr_remove_if_unused(src); - } - continue; - } - - if (intrin->intrinsic != nir_intrinsic_load_deref && - intrin->intrinsic != nir_intrinsic_store_deref) - continue; - - nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); - if (!nir_deref_mode_may_be(deref, modes)) - continue; - - struct vec_var_usage *usage = - get_vec_deref_usage(deref, var_usage_map, modes, false, NULL); - if (!usage) - continue; - - if (usage->comps_kept == 0 || vec_deref_is_oob(deref, usage)) { - if (intrin->intrinsic == nir_intrinsic_load_deref) { - nir_ssa_def *u = - nir_ssa_undef(&b, intrin->dest.ssa.num_components, - intrin->dest.ssa.bit_size); - nir_ssa_def_rewrite_uses(&intrin->dest.ssa, - u); - } - nir_instr_remove(&intrin->instr); - nir_deref_instr_remove_if_unused(deref); - continue; - } - - /* If we're not dropping any components, there's no need to - * compact vectors. - */ - if (usage->comps_kept == usage->all_comps) - continue; - - if (intrin->intrinsic == nir_intrinsic_load_deref) { - b.cursor = nir_after_instr(&intrin->instr); - - nir_ssa_def *undef = - nir_ssa_undef(&b, 1, intrin->dest.ssa.bit_size); - nir_ssa_def *vec_srcs[NIR_MAX_VEC_COMPONENTS]; - unsigned c = 0; - for (unsigned i = 0; i < intrin->num_components; i++) { - if (usage->comps_kept & (1u << i)) - vec_srcs[i] = nir_channel(&b, &intrin->dest.ssa, c++); - else - vec_srcs[i] = undef; - } - nir_ssa_def *vec = nir_vec(&b, vec_srcs, intrin->num_components); - - nir_ssa_def_rewrite_uses_after(&intrin->dest.ssa, - vec, - vec->parent_instr); - - /* The SSA def is now only used by the swizzle. It's safe to - * shrink the number of components. - */ - assert(list_length(&intrin->dest.ssa.uses) == c); - intrin->num_components = c; - intrin->dest.ssa.num_components = c; - } else { - nir_component_mask_t write_mask = - nir_intrinsic_write_mask(intrin); - - unsigned swizzle[NIR_MAX_VEC_COMPONENTS]; - nir_component_mask_t new_write_mask = 0; - unsigned c = 0; - for (unsigned i = 0; i < intrin->num_components; i++) { - if (usage->comps_kept & (1u << i)) { - swizzle[c] = i; - if (write_mask & (1u << i)) - new_write_mask |= 1u << c; - c++; - } - } - - b.cursor = nir_before_instr(&intrin->instr); - - nir_ssa_def *swizzled = - nir_swizzle(&b, intrin->src[1].ssa, swizzle, c); - - /* Rewrite to use the compacted source */ - nir_instr_rewrite_src(&intrin->instr, &intrin->src[1], - nir_src_for_ssa(swizzled)); - nir_intrinsic_set_write_mask(intrin, new_write_mask); - intrin->num_components = c; - } - break; - } - - default: - break; - } - } - } -} - -static bool -function_impl_has_vars_with_modes(nir_function_impl *impl, - nir_variable_mode modes) -{ - nir_shader *shader = impl->function->shader; - - if (modes & ~nir_var_function_temp) { - nir_foreach_variable_with_modes(var, shader, - modes & ~nir_var_function_temp) - return true; - } - - if ((modes & nir_var_function_temp) && !exec_list_is_empty(&impl->locals)) - return true; - - return false; -} - -/** Attempt to shrink arrays of vectors - * - * This pass looks at variables which contain a vector or an array (possibly - * multiple dimensions) of vectors and attempts to lower to a smaller vector - * or array. If the pass can prove that a component of a vector (or array of - * vectors) is never really used, then that component will be removed. - * Similarly, the pass attempts to shorten arrays based on what elements it - * can prove are never read or never contain valid data. - */ -bool -nir_shrink_vec_array_vars(nir_shader *shader, nir_variable_mode modes) -{ - assert((modes & (nir_var_shader_temp | nir_var_function_temp)) == modes); - - void *mem_ctx = ralloc_context(NULL); - - struct hash_table *var_usage_map = - _mesa_pointer_hash_table_create(mem_ctx); - - bool has_vars_to_shrink = false; - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - /* Don't even bother crawling the IR if we don't have any variables. - * Given that this pass deletes any unused variables, it's likely that - * we will be in this scenario eventually. - */ - if (function_impl_has_vars_with_modes(function->impl, modes)) { - has_vars_to_shrink = true; - find_used_components_impl(function->impl, var_usage_map, - modes, mem_ctx); - } - } - if (!has_vars_to_shrink) { - ralloc_free(mem_ctx); - nir_shader_preserve_all_metadata(shader); - return false; - } - - bool globals_shrunk = false; - if (modes & nir_var_shader_temp) { - globals_shrunk = shrink_vec_var_list(&shader->variables, - nir_var_shader_temp, - var_usage_map); - } - - bool progress = false; - nir_foreach_function(function, shader) { - if (!function->impl) - continue; - - bool locals_shrunk = false; - if (modes & nir_var_function_temp) { - locals_shrunk = shrink_vec_var_list(&function->impl->locals, - nir_var_function_temp, - var_usage_map); - } - - if (globals_shrunk || locals_shrunk) { - shrink_vec_var_access_impl(function->impl, var_usage_map, modes); - - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - progress = true; - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - ralloc_free(mem_ctx); - - return progress; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_sweep.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_sweep.c deleted file mode 100644 index 1174a8c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_sweep.c +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir.h" - -/** - * \file nir_sweep.c - * - * The nir_sweep() pass performs a mark and sweep pass over a nir_shader's associated - * memory - anything still connected to the program will be kept, and any dead memory - * we dropped on the floor will be freed. - * - * The expectation is that drivers should call this when finished compiling the shader - * (after any optimization, lowering, and so on). However, it's also fine to call it - * earlier, and even many times, trading CPU cycles for memory savings. - */ - -#define steal_list(mem_ctx, type, list) \ - foreach_list_typed(type, obj, node, list) { ralloc_steal(mem_ctx, obj); } - -static void sweep_cf_node(nir_shader *nir, nir_cf_node *cf_node); - -static bool -sweep_src_indirect(nir_src *src, void *nir) -{ - if (!src->is_ssa && src->reg.indirect) - gc_mark_live(((nir_shader*)nir)->gctx, src->reg.indirect); - - return true; -} - -static bool -sweep_dest_indirect(nir_dest *dest, void *nir) -{ - if (!dest->is_ssa && dest->reg.indirect) - gc_mark_live(((nir_shader*)nir)->gctx, dest->reg.indirect); - - return true; -} - -static void -sweep_block(nir_shader *nir, nir_block *block) -{ - ralloc_steal(nir, block); - - /* sweep_impl will mark all metadata invalid. We can safely release all of - * this here. - */ - ralloc_free(block->live_in); - block->live_in = NULL; - - ralloc_free(block->live_out); - block->live_out = NULL; - - nir_foreach_instr(instr, block) { - gc_mark_live(nir->gctx, instr); - - switch (instr->type) { - case nir_instr_type_tex: - gc_mark_live(nir->gctx, nir_instr_as_tex(instr)->src); - break; - case nir_instr_type_phi: - nir_foreach_phi_src(src, nir_instr_as_phi(instr)) - gc_mark_live(nir->gctx, src); - break; - default: - break; - } - - nir_foreach_src(instr, sweep_src_indirect, nir); - nir_foreach_dest(instr, sweep_dest_indirect, nir); - } -} - -static void -sweep_if(nir_shader *nir, nir_if *iff) -{ - ralloc_steal(nir, iff); - - foreach_list_typed(nir_cf_node, cf_node, node, &iff->then_list) { - sweep_cf_node(nir, cf_node); - } - - foreach_list_typed(nir_cf_node, cf_node, node, &iff->else_list) { - sweep_cf_node(nir, cf_node); - } -} - -static void -sweep_loop(nir_shader *nir, nir_loop *loop) -{ - assert(!nir_loop_has_continue_construct(loop)); - ralloc_steal(nir, loop); - - foreach_list_typed(nir_cf_node, cf_node, node, &loop->body) { - sweep_cf_node(nir, cf_node); - } -} - -static void -sweep_cf_node(nir_shader *nir, nir_cf_node *cf_node) -{ - switch (cf_node->type) { - case nir_cf_node_block: - sweep_block(nir, nir_cf_node_as_block(cf_node)); - break; - case nir_cf_node_if: - sweep_if(nir, nir_cf_node_as_if(cf_node)); - break; - case nir_cf_node_loop: - sweep_loop(nir, nir_cf_node_as_loop(cf_node)); - break; - default: - unreachable("Invalid CF node type"); - } -} - -static void -sweep_impl(nir_shader *nir, nir_function_impl *impl) -{ - ralloc_steal(nir, impl); - - steal_list(nir, nir_variable, &impl->locals); - steal_list(nir, nir_register, &impl->registers); - - foreach_list_typed(nir_cf_node, cf_node, node, &impl->body) { - sweep_cf_node(nir, cf_node); - } - - sweep_block(nir, impl->end_block); - - /* Wipe out all the metadata, if any. */ - nir_metadata_preserve(impl, nir_metadata_none); -} - -static void -sweep_function(nir_shader *nir, nir_function *f) -{ - ralloc_steal(nir, f); - ralloc_steal(nir, f->params); - - if (f->impl) - sweep_impl(nir, f->impl); -} - -void -nir_sweep(nir_shader *nir) -{ - void *rubbish = ralloc_context(NULL); - - struct list_head instr_gc_list; - list_inithead(&instr_gc_list); - - /* First, move ownership of all the memory to a temporary context; assume dead. */ - ralloc_adopt(rubbish, nir); - - /* Start sweeping */ - gc_sweep_start(nir->gctx); - - ralloc_steal(nir, nir->gctx); - ralloc_steal(nir, (char *)nir->info.name); - if (nir->info.label) - ralloc_steal(nir, (char *)nir->info.label); - - /* Variables and registers are not dead. Steal them back. */ - steal_list(nir, nir_variable, &nir->variables); - - /* Recurse into functions, stealing their contents back. */ - foreach_list_typed(nir_function, func, node, &nir->functions) { - sweep_function(nir, func); - } - - ralloc_steal(nir, nir->constant_data); - ralloc_steal(nir, nir->xfb_info); - ralloc_steal(nir, nir->printf_info); - for (int i = 0; i < nir->printf_info_count; i++) { - ralloc_steal(nir, nir->printf_info[i].arg_sizes); - ralloc_steal(nir, nir->printf_info[i].strings); - } - - /* Free everything we didn't steal back. */ - gc_sweep_end(nir->gctx); - ralloc_free(rubbish); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_to_lcssa.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_to_lcssa.c deleted file mode 100644 index e280f32..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_to_lcssa.c +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Copyright © 2015 Thomas Helland - * Copyright © 2019 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * This pass converts the ssa-graph into "Loop Closed SSA form". This is - * done by placing phi nodes at the exits of the loop for all values - * that are used outside the loop. The result is it transforms: - * - * loop { -> loop { - * ssa2 = .... -> ssa2 = ... - * if (cond) -> if (cond) - * break; -> break; - * ssa3 = ssa2 * ssa4 -> ssa3 = ssa2 * ssa4 - * } -> } - * ssa6 = ssa2 + 4 -> ssa5 = phi(ssa2) - * ssa6 = ssa5 + 4 - */ - -#include "nir.h" - -typedef struct { - /* The nir_shader we are transforming */ - nir_shader *shader; - - /* The loop we store information for */ - nir_loop *loop; - nir_block *block_after_loop; - nir_block **exit_blocks; - - /* Whether to skip loop invariant variables */ - bool skip_invariants; - bool skip_bool_invariants; - - bool progress; -} lcssa_state; - -static bool -is_if_use_inside_loop(nir_src *use, nir_loop *loop) -{ - nir_block *block_before_loop = - nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - nir_block *block_after_loop = - nir_cf_node_as_block(nir_cf_node_next(&loop->cf_node)); - - nir_block *prev_block = - nir_cf_node_as_block(nir_cf_node_prev(&use->parent_if->cf_node)); - if (prev_block->index <= block_before_loop->index || - prev_block->index >= block_after_loop->index) { - return false; - } - - return true; -} - -static bool -is_use_inside_loop(nir_src *use, nir_loop *loop) -{ - nir_block *block_before_loop = - nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - nir_block *block_after_loop = - nir_cf_node_as_block(nir_cf_node_next(&loop->cf_node)); - - if (use->parent_instr->block->index <= block_before_loop->index || - use->parent_instr->block->index >= block_after_loop->index) { - return false; - } - - return true; -} - -static bool -is_defined_before_loop(nir_ssa_def *def, nir_loop *loop) -{ - nir_instr *instr = def->parent_instr; - nir_block *block_before_loop = - nir_cf_node_as_block(nir_cf_node_prev(&loop->cf_node)); - - return instr->block->index <= block_before_loop->index; -} - -typedef enum instr_invariance { - undefined = 0, - invariant, - not_invariant, -} instr_invariance; - -static instr_invariance -instr_is_invariant(nir_instr *instr, nir_loop *loop); - -static bool -def_is_invariant(nir_ssa_def *def, nir_loop *loop) -{ - if (is_defined_before_loop(def, loop)) - return invariant; - - if (def->parent_instr->pass_flags == undefined) - def->parent_instr->pass_flags = instr_is_invariant(def->parent_instr, loop); - - return def->parent_instr->pass_flags == invariant; -} - -static bool -src_is_invariant(nir_src *src, void *state) -{ - assert(src->is_ssa); - return def_is_invariant(src->ssa, (nir_loop *)state); -} - -static instr_invariance -phi_is_invariant(nir_phi_instr *instr, nir_loop *loop) -{ - /* Base case: it's a phi at the loop header - * Loop-header phis are updated in each loop iteration with - * the loop-carried value, and thus control-flow dependent - * on the loop itself. - */ - if (instr->instr.block == nir_loop_first_block(loop)) - return not_invariant; - - nir_foreach_phi_src(src, instr) { - if (!src_is_invariant(&src->src, loop)) - return not_invariant; - } - - /* All loop header- and LCSSA-phis should be handled by this point. */ - nir_cf_node *prev = nir_cf_node_prev(&instr->instr.block->cf_node); - assert(prev && prev->type == nir_cf_node_if); - - /* Invariance of phis after if-nodes also depends on the invariance - * of the branch condition. - */ - nir_if *if_node = nir_cf_node_as_if(prev); - if (!def_is_invariant(if_node->condition.ssa, loop)) - return not_invariant; - - return invariant; -} - - -/* An instruction is said to be loop-invariant if it - * - has no sideeffects and - * - solely depends on variables defined outside of the loop or - * by other invariant instructions - */ -static instr_invariance -instr_is_invariant(nir_instr *instr, nir_loop *loop) -{ - assert(instr->pass_flags == undefined); - - switch (instr->type) { - case nir_instr_type_load_const: - case nir_instr_type_ssa_undef: - return invariant; - case nir_instr_type_call: - return not_invariant; - case nir_instr_type_phi: - return phi_is_invariant(nir_instr_as_phi(instr), loop); - case nir_instr_type_intrinsic: { - nir_intrinsic_instr *intrinsic = nir_instr_as_intrinsic(instr); - if (!(nir_intrinsic_infos[intrinsic->intrinsic].flags & NIR_INTRINSIC_CAN_REORDER)) - return not_invariant; - } - - default: - return nir_foreach_src(instr, src_is_invariant, loop) ? invariant : not_invariant; - } - - return invariant; -} - -static bool -convert_loop_exit_for_ssa(nir_ssa_def *def, void *void_state) -{ - lcssa_state *state = void_state; - bool all_uses_inside_loop = true; - - /* Don't create LCSSA-Phis for loop-invariant variables */ - if (state->skip_invariants && - (def->bit_size != 1 || state->skip_bool_invariants)) { - assert(def->parent_instr->pass_flags != undefined); - if (def->parent_instr->pass_flags == invariant) - return true; - } - - nir_foreach_use_including_if(use, def) { - if (use->is_if) { - if (!is_if_use_inside_loop(use, state->loop)) - all_uses_inside_loop = false; - - continue; - } - - if (use->parent_instr->type == nir_instr_type_phi && - use->parent_instr->block == state->block_after_loop) { - continue; - } - - if (!is_use_inside_loop(use, state->loop)) { - all_uses_inside_loop = false; - } - } - - /* There where no sources that had defs outside the loop */ - if (all_uses_inside_loop) - return true; - - /* Initialize a phi-instruction */ - nir_phi_instr *phi = nir_phi_instr_create(state->shader); - nir_ssa_dest_init(&phi->instr, &phi->dest, - def->num_components, def->bit_size, "LCSSA-phi"); - - /* Create a phi node with as many sources pointing to the same ssa_def as - * the block has predecessors. - */ - uint32_t num_exits = state->block_after_loop->predecessors->entries; - for (uint32_t i = 0; i < num_exits; i++) { - nir_phi_instr_add_src(phi, state->exit_blocks[i], nir_src_for_ssa(def)); - } - - nir_instr_insert_before_block(state->block_after_loop, &phi->instr); - nir_ssa_def *dest = &phi->dest.ssa; - - /* deref instructions need a cast after the phi */ - if (def->parent_instr->type == nir_instr_type_deref) { - nir_deref_instr *cast = - nir_deref_instr_create(state->shader, nir_deref_type_cast); - - nir_deref_instr *instr = nir_instr_as_deref(def->parent_instr); - cast->modes = instr->modes; - cast->type = instr->type; - cast->parent = nir_src_for_ssa(&phi->dest.ssa); - cast->cast.ptr_stride = nir_deref_instr_array_stride(instr); - - nir_ssa_dest_init(&cast->instr, &cast->dest, - phi->dest.ssa.num_components, - phi->dest.ssa.bit_size, NULL); - nir_instr_insert(nir_after_phis(state->block_after_loop), &cast->instr); - dest = &cast->dest.ssa; - } - - /* Run through all uses and rewrite those outside the loop to point to - * the phi instead of pointing to the ssa-def. - */ - nir_foreach_use_including_if_safe(use, def) { - if (use->is_if) { - if (!is_if_use_inside_loop(use, state->loop)) - nir_if_rewrite_condition(use->parent_if, nir_src_for_ssa(dest)); - - continue; - } - - if (use->parent_instr->type == nir_instr_type_phi && - state->block_after_loop == use->parent_instr->block) { - continue; - } - - if (!is_use_inside_loop(use, state->loop)) { - nir_instr_rewrite_src(use->parent_instr, use, nir_src_for_ssa(dest)); - } - } - - state->progress = true; - return true; -} - -static void -setup_loop_state(lcssa_state *state, nir_loop *loop) -{ - state->loop = loop; - state->block_after_loop = - nir_cf_node_as_block(nir_cf_node_next(&loop->cf_node)); - - ralloc_free(state->exit_blocks); - state->exit_blocks = nir_block_get_predecessors_sorted(state->block_after_loop, state); -} - -static void -convert_to_lcssa(nir_cf_node *cf_node, lcssa_state *state) -{ - switch (cf_node->type) { - case nir_cf_node_block: - return; - case nir_cf_node_if: { - nir_if *if_stmt = nir_cf_node_as_if(cf_node); - foreach_list_typed(nir_cf_node, nested_node, node, &if_stmt->then_list) - convert_to_lcssa(nested_node, state); - foreach_list_typed(nir_cf_node, nested_node, node, &if_stmt->else_list) - convert_to_lcssa(nested_node, state); - return; - } - case nir_cf_node_loop: { - if (state->skip_invariants) { - nir_foreach_block_in_cf_node(block, cf_node) { - nir_foreach_instr(instr, block) - instr->pass_flags = undefined; - } - } - - /* first, convert inner loops */ - nir_loop *loop = nir_cf_node_as_loop(cf_node); - assert(!nir_loop_has_continue_construct(loop)); - foreach_list_typed(nir_cf_node, nested_node, node, &loop->body) - convert_to_lcssa(nested_node, state); - - setup_loop_state(state, loop); - - /* mark loop-invariant instructions */ - if (state->skip_invariants) { - /* Without a loop all instructions are invariant. - * For outer loops, multiple breaks can still create phis. - * The variance then depends on all (nested) break conditions. - * We don't consider this, but assume all not_invariant. - */ - if (nir_loop_first_block(loop)->predecessors->entries == 1) - goto end; - - nir_foreach_block_in_cf_node(block, cf_node) { - nir_foreach_instr(instr, block) { - if (instr->pass_flags == undefined) - instr->pass_flags = instr_is_invariant(instr, nir_cf_node_as_loop(cf_node)); - } - } - } - - nir_foreach_block_in_cf_node(block, cf_node) { - nir_foreach_instr(instr, block) { - nir_foreach_ssa_def(instr, convert_loop_exit_for_ssa, state); - - /* for outer loops, invariant instructions can be variant */ - if (state->skip_invariants && instr->pass_flags == invariant) - instr->pass_flags = undefined; - } - } - -end: - /* For outer loops, the LCSSA-phi should be considered not invariant */ - if (state->skip_invariants) { - nir_foreach_instr(instr, state->block_after_loop) { - if (instr->type == nir_instr_type_phi) - instr->pass_flags = not_invariant; - else - break; - } - } - return; - } - default: - unreachable("unknown cf node type"); - } -} - -void -nir_convert_loop_to_lcssa(nir_loop *loop) -{ - assert(!nir_loop_has_continue_construct(loop)); - nir_function_impl *impl = nir_cf_node_get_function(&loop->cf_node); - - nir_metadata_require(impl, nir_metadata_block_index); - - lcssa_state *state = rzalloc(NULL, lcssa_state); - setup_loop_state(state, loop); - state->shader = impl->function->shader; - state->skip_invariants = false; - state->skip_bool_invariants = false; - - nir_foreach_block_in_cf_node (block, &loop->cf_node) { - nir_foreach_instr(instr, block) - nir_foreach_ssa_def(instr, convert_loop_exit_for_ssa, state); - } - - ralloc_free(state); -} - -bool -nir_convert_to_lcssa(nir_shader *shader, bool skip_invariants, bool skip_bool_invariants) -{ - bool progress = false; - lcssa_state *state = rzalloc(NULL, lcssa_state); - state->shader = shader; - state->skip_invariants = skip_invariants; - state->skip_bool_invariants = skip_bool_invariants; - - nir_foreach_function(function, shader) { - if (function->impl == NULL) - continue; - - state->progress = false; - nir_metadata_require(function->impl, nir_metadata_block_index); - - foreach_list_typed(nir_cf_node, node, node, &function->impl->body) - convert_to_lcssa(node, state); - - if (state->progress) { - progress = true; - nir_metadata_preserve(function->impl, nir_metadata_block_index | - nir_metadata_dominance); - } else { - nir_metadata_preserve(function->impl, nir_metadata_all); - } - } - - ralloc_free(state); - return progress; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_validate.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_validate.c deleted file mode 100644 index 62af7a2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_validate.c +++ /dev/null @@ -1,1898 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir.h" -#include "nir_xfb_info.h" -#include "../../../include/c11/threads.h" -#include "../../util/simple_mtx.h" -#include - -/* - * This file checks for invalid IR indicating a bug somewhere in the compiler. - */ - -/* Since this file is just a pile of asserts, don't bother compiling it if - * we're not building a debug build. - */ -#ifndef NDEBUG - -/* - * Per-register validation state. - */ - -typedef struct { - /* - * equivalent to the uses and defs in nir_register, but built up by the - * validator. At the end, we verify that the sets have the same entries. - */ - struct set *uses, *defs; - nir_function_impl *where_defined; /* NULL for global registers */ -} reg_validate_state; - -typedef struct { - void *mem_ctx; - - /* map of register -> validation state (struct above) */ - struct hash_table *regs; - - /* the current shader being validated */ - nir_shader *shader; - - /* the current instruction being validated */ - nir_instr *instr; - - /* the current variable being validated */ - nir_variable *var; - - /* the current basic block being validated */ - nir_block *block; - - /* the current if statement being validated */ - nir_if *if_stmt; - - /* the current loop being visited */ - nir_loop *loop; - - /* weather the loop continue construct is being visited */ - bool in_loop_continue_construct; - - /* the parent of the current cf node being visited */ - nir_cf_node *parent_node; - - /* the current function implementation being validated */ - nir_function_impl *impl; - - /* Set of all blocks in the list */ - struct set *blocks; - - /* Set of seen SSA sources */ - struct set *ssa_srcs; - - /* bitset of ssa definitions we have found; used to check uniqueness */ - BITSET_WORD *ssa_defs_found; - - /* bitset of registers we have currently found; used to check uniqueness */ - BITSET_WORD *regs_found; - - /* map of variable -> function implementation where it is defined or NULL - * if it is a global variable - */ - struct hash_table *var_defs; - - /* map of instruction/var/etc to failed assert string */ - struct hash_table *errors; -} validate_state; - -static void -log_error(validate_state *state, const char *cond, const char *file, int line) -{ - const void *obj; - - if (state->instr) - obj = state->instr; - else if (state->var) - obj = state->var; - else - obj = cond; - - char *msg = ralloc_asprintf(state->errors, "error: %s (%s:%d)", - cond, file, line); - - _mesa_hash_table_insert(state->errors, obj, msg); -} - -static bool -validate_assert_impl(validate_state *state, bool cond, const char *str, - const char *file, unsigned line) -{ - if (!cond) - log_error(state, str, file, line); - return cond; -} - -#define validate_assert(state, cond) \ - validate_assert_impl(state, (cond), #cond, __FILE__, __LINE__) - - -static void validate_src(nir_src *src, validate_state *state, - unsigned bit_sizes, unsigned num_components); - -static void -validate_num_components(validate_state *state, unsigned num_components) -{ - validate_assert(state, nir_num_components_valid(num_components)); -} - -static void -validate_reg_src(nir_src *src, validate_state *state, - unsigned bit_sizes, unsigned num_components) -{ - validate_assert(state, src->reg.reg != NULL); - - struct hash_entry *entry; - entry = _mesa_hash_table_search(state->regs, src->reg.reg); - validate_assert(state, entry); - - reg_validate_state *reg_state = (reg_validate_state *) entry->data; - - if (state->instr) { - _mesa_set_add(reg_state->uses, src); - } else { - validate_assert(state, state->if_stmt); - validate_assert(state, src->is_if); - _mesa_set_add(reg_state->uses, src); - } - - validate_assert(state, reg_state->where_defined == state->impl && - "using a register declared in a different function"); - - if (bit_sizes) - validate_assert(state, src->reg.reg->bit_size & bit_sizes); - if (num_components) - validate_assert(state, src->reg.reg->num_components == num_components); - - validate_assert(state, (src->reg.reg->num_array_elems == 0 || - src->reg.base_offset < src->reg.reg->num_array_elems) && - "definitely out-of-bounds array access"); - - if (src->reg.indirect) { - validate_assert(state, src->reg.reg->num_array_elems != 0); - validate_assert(state, (src->reg.indirect->is_ssa || - src->reg.indirect->reg.indirect == NULL) && - "only one level of indirection allowed"); - validate_src(src->reg.indirect, state, 32, 1); - } -} - -static void -validate_ssa_src(nir_src *src, validate_state *state, - unsigned bit_sizes, unsigned num_components) -{ - validate_assert(state, src->ssa != NULL); - - /* As we walk SSA defs, we add every use to this set. We need to make sure - * our use is seen in a use list. - */ - struct set_entry *entry = _mesa_set_search(state->ssa_srcs, src); - validate_assert(state, entry); - - /* This will let us prove that we've seen all the sources */ - if (entry) - _mesa_set_remove(state->ssa_srcs, entry); - - if (bit_sizes) - validate_assert(state, src->ssa->bit_size & bit_sizes); - if (num_components) - validate_assert(state, src->ssa->num_components == num_components); - - /* TODO validate that the use is dominated by the definition */ -} - -static void -validate_src(nir_src *src, validate_state *state, - unsigned bit_sizes, unsigned num_components) -{ - if (state->instr) - validate_assert(state, src->parent_instr == state->instr); - else - validate_assert(state, src->parent_if == state->if_stmt); - - if (src->is_ssa) - validate_ssa_src(src, state, bit_sizes, num_components); - else - validate_reg_src(src, state, bit_sizes, num_components); -} - -static void -validate_alu_src(nir_alu_instr *instr, unsigned index, validate_state *state) -{ - nir_alu_src *src = &instr->src[index]; - - if (instr->op == nir_op_mov) - assert(!src->abs && !src->negate); - - unsigned num_components = nir_src_num_components(src->src); - for (unsigned i = 0; i < NIR_MAX_VEC_COMPONENTS; i++) { - validate_assert(state, src->swizzle[i] < NIR_MAX_VEC_COMPONENTS); - - if (nir_alu_instr_channel_used(instr, index, i)) - validate_assert(state, src->swizzle[i] < num_components); - } - - validate_src(&src->src, state, 0, 0); -} - -static void -validate_reg_dest(nir_reg_dest *dest, validate_state *state, - unsigned bit_sizes, unsigned num_components) -{ - validate_assert(state, dest->reg != NULL); - - validate_assert(state, dest->parent_instr == state->instr); - - struct hash_entry *entry2; - entry2 = _mesa_hash_table_search(state->regs, dest->reg); - - validate_assert(state, entry2); - - reg_validate_state *reg_state = (reg_validate_state *) entry2->data; - _mesa_set_add(reg_state->defs, dest); - - validate_assert(state, reg_state->where_defined == state->impl && - "writing to a register declared in a different function"); - - if (bit_sizes) - validate_assert(state, dest->reg->bit_size & bit_sizes); - if (num_components) - validate_assert(state, dest->reg->num_components == num_components); - - validate_assert(state, (dest->reg->num_array_elems == 0 || - dest->base_offset < dest->reg->num_array_elems) && - "definitely out-of-bounds array access"); - - if (dest->indirect) { - validate_assert(state, dest->reg->num_array_elems != 0); - validate_assert(state, (dest->indirect->is_ssa || dest->indirect->reg.indirect == NULL) && - "only one level of indirection allowed"); - validate_src(dest->indirect, state, 32, 1); - } -} - -static void -validate_ssa_def(nir_ssa_def *def, validate_state *state) -{ - validate_assert(state, def->index < state->impl->ssa_alloc); - validate_assert(state, !BITSET_TEST(state->ssa_defs_found, def->index)); - BITSET_SET(state->ssa_defs_found, def->index); - - validate_assert(state, def->parent_instr == state->instr); - validate_num_components(state, def->num_components); - - list_validate(&def->uses); - nir_foreach_use_including_if(src, def) { - validate_assert(state, src->is_ssa); - validate_assert(state, src->ssa == def); - - bool already_seen = false; - _mesa_set_search_and_add(state->ssa_srcs, src, &already_seen); - /* A nir_src should only appear once and only in one SSA def use list */ - validate_assert(state, !already_seen); - } -} - -static void -validate_dest(nir_dest *dest, validate_state *state, - unsigned bit_sizes, unsigned num_components) -{ - if (dest->is_ssa) { - if (bit_sizes) - validate_assert(state, dest->ssa.bit_size & bit_sizes); - if (num_components) - validate_assert(state, dest->ssa.num_components == num_components); - validate_ssa_def(&dest->ssa, state); - } else { - validate_reg_dest(&dest->reg, state, bit_sizes, num_components); - } -} - -static void -validate_alu_dest(nir_alu_instr *instr, validate_state *state) -{ - nir_alu_dest *dest = &instr->dest; - - if (instr->op == nir_op_mov) - assert(!dest->saturate); - - unsigned dest_size = nir_dest_num_components(dest->dest); - /* - * validate that the instruction doesn't write to components not in the - * register/SSA value - */ - validate_assert(state, !(dest->write_mask & ~nir_component_mask(dest_size))); - - /* validate that saturate is only ever used on instructions with - * destinations of type float - */ - nir_alu_instr *alu = nir_instr_as_alu(state->instr); - validate_assert(state, - (nir_alu_type_get_base_type(nir_op_infos[alu->op].output_type) == - nir_type_float) || - !dest->saturate); - - validate_dest(&dest->dest, state, 0, 0); -} - -static void -validate_alu_instr(nir_alu_instr *instr, validate_state *state) -{ - validate_assert(state, instr->op < nir_num_opcodes); - - unsigned instr_bit_size = 0; - for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++) { - nir_alu_type src_type = nir_op_infos[instr->op].input_types[i]; - unsigned src_bit_size = nir_src_bit_size(instr->src[i].src); - if (nir_alu_type_get_type_size(src_type)) { - validate_assert(state, src_bit_size == nir_alu_type_get_type_size(src_type)); - } else if (instr_bit_size) { - validate_assert(state, src_bit_size == instr_bit_size); - } else { - instr_bit_size = src_bit_size; - } - - if (nir_alu_type_get_base_type(src_type) == nir_type_float) { - /* 8-bit float isn't a thing */ - validate_assert(state, src_bit_size == 16 || src_bit_size == 32 || - src_bit_size == 64); - } - - /* In nir_opcodes.py, these are defined to take general uint or int - * sources. However, they're really only defined for 32-bit or 64-bit - * sources. This seems to be the only place to enforce this - * restriction. - */ - switch (instr->op) { - case nir_op_ufind_msb: - case nir_op_ufind_msb_rev: - validate_assert(state, src_bit_size == 32 || src_bit_size == 64); - break; - - default: - break; - } - - validate_alu_src(instr, i, state); - } - - nir_alu_type dest_type = nir_op_infos[instr->op].output_type; - unsigned dest_bit_size = nir_dest_bit_size(instr->dest.dest); - if (nir_alu_type_get_type_size(dest_type)) { - validate_assert(state, dest_bit_size == nir_alu_type_get_type_size(dest_type)); - } else if (instr_bit_size) { - validate_assert(state, dest_bit_size == instr_bit_size); - } else { - /* The only unsized thing is the destination so it's vacuously valid */ - } - - if (nir_alu_type_get_base_type(dest_type) == nir_type_float) { - /* 8-bit float isn't a thing */ - validate_assert(state, dest_bit_size == 16 || dest_bit_size == 32 || - dest_bit_size == 64); - } - - validate_alu_dest(instr, state); -} - -static void -validate_var_use(nir_variable *var, validate_state *state) -{ - struct hash_entry *entry = _mesa_hash_table_search(state->var_defs, var); - validate_assert(state, entry); - if (entry && var->data.mode == nir_var_function_temp) - validate_assert(state, (nir_function_impl *) entry->data == state->impl); -} - -static void -validate_deref_instr(nir_deref_instr *instr, validate_state *state) -{ - if (instr->deref_type == nir_deref_type_var) { - /* Variable dereferences are stupid simple. */ - validate_assert(state, instr->modes == instr->var->data.mode); - validate_assert(state, instr->type == instr->var->type); - validate_var_use(instr->var, state); - } else if (instr->deref_type == nir_deref_type_cast) { - /* For cast, we simply have to trust the instruction. It's up to - * lowering passes and front/back-ends to make them sane. - */ - validate_src(&instr->parent, state, 0, 0); - - /* Most variable modes in NIR can only exist by themselves. */ - if (instr->modes & ~nir_var_mem_generic) - validate_assert(state, util_bitcount(instr->modes) == 1); - - nir_deref_instr *parent = nir_src_as_deref(instr->parent); - if (parent) { - /* Casts can change the mode but it can't change completely. The new - * mode must have some bits in common with the old. - */ - validate_assert(state, instr->modes & parent->modes); - } else { - /* If our parent isn't a deref, just assert the mode is there */ - validate_assert(state, instr->modes != 0); - } - - /* We just validate that the type is there */ - validate_assert(state, instr->type); - if (instr->cast.align_mul > 0) { - validate_assert(state, util_is_power_of_two_nonzero(instr->cast.align_mul)); - validate_assert(state, instr->cast.align_offset < instr->cast.align_mul); - } else { - validate_assert(state, instr->cast.align_offset == 0); - } - } else { - /* We require the parent to be SSA. This may be lifted in the future */ - validate_assert(state, instr->parent.is_ssa); - - /* The parent pointer value must have the same number of components - * as the destination. - */ - validate_src(&instr->parent, state, nir_dest_bit_size(instr->dest), - nir_dest_num_components(instr->dest)); - - nir_instr *parent_instr = instr->parent.ssa->parent_instr; - - /* The parent must come from another deref instruction */ - validate_assert(state, parent_instr->type == nir_instr_type_deref); - - nir_deref_instr *parent = nir_instr_as_deref(parent_instr); - - validate_assert(state, instr->modes == parent->modes); - - switch (instr->deref_type) { - case nir_deref_type_struct: - validate_assert(state, glsl_type_is_struct_or_ifc(parent->type)); - validate_assert(state, - instr->strct.index < glsl_get_length(parent->type)); - validate_assert(state, instr->type == - glsl_get_struct_field(parent->type, instr->strct.index)); - break; - - case nir_deref_type_array: - case nir_deref_type_array_wildcard: - if (instr->modes & nir_var_vec_indexable_modes) { - /* Shared variables and UBO/SSBOs have a bit more relaxed rules - * because we need to be able to handle array derefs on vectors. - * Fortunately, nir_lower_io handles these just fine. - */ - validate_assert(state, glsl_type_is_array(parent->type) || - glsl_type_is_matrix(parent->type) || - glsl_type_is_vector(parent->type)); - } else { - /* Most of NIR cannot handle array derefs on vectors */ - validate_assert(state, glsl_type_is_array(parent->type) || - glsl_type_is_matrix(parent->type)); - } - validate_assert(state, - instr->type == glsl_get_array_element(parent->type)); - - if (instr->deref_type == nir_deref_type_array) { - validate_src(&instr->arr.index, state, - nir_dest_bit_size(instr->dest), 1); - } - break; - - case nir_deref_type_ptr_as_array: - /* ptr_as_array derefs must have a parent that is either an array, - * ptr_as_array, or cast. If the parent is a cast, we get the stride - * information (if any) from the cast deref. - */ - validate_assert(state, - parent->deref_type == nir_deref_type_array || - parent->deref_type == nir_deref_type_ptr_as_array || - parent->deref_type == nir_deref_type_cast); - validate_src(&instr->arr.index, state, - nir_dest_bit_size(instr->dest), 1); - break; - - default: - unreachable("Invalid deref instruction type"); - } - } - - /* We intentionally don't validate the size of the destination because we - * want to let other compiler components such as SPIR-V decide how big - * pointers should be. - */ - validate_dest(&instr->dest, state, 0, 0); - - /* Certain modes cannot be used as sources for phi instructions because - * way too many passes assume that they can always chase deref chains. - */ - nir_foreach_use_including_if(use, &instr->dest.ssa) { - /* Deref instructions as if conditions don't make sense because if - * conditions expect well-formed Booleans. If you want to compare with - * NULL, an explicit comparison operation should be used. - */ - if (!validate_assert(state, !use->is_if)) - continue; - - if (use->parent_instr->type == nir_instr_type_phi) { - validate_assert(state, !(instr->modes & (nir_var_shader_in | - nir_var_shader_out | - nir_var_shader_out | - nir_var_uniform))); - } - } -} - -static bool -vectorized_intrinsic(nir_intrinsic_instr *intr) -{ - const nir_intrinsic_info *info = &nir_intrinsic_infos[intr->intrinsic]; - - if (info->dest_components == 0) - return true; - - for (unsigned i = 0; i < info->num_srcs; i++) - if (info->src_components[i] == 0) - return true; - - return false; -} - -/** Returns the image format or PIPE_FORMAT_COUNT for incomplete derefs - * - * We use PIPE_FORMAT_COUNT for incomplete derefs because PIPE_FORMAT_NONE - * indicates that we found the variable but it has no format specified. - */ -static enum pipe_format -image_intrin_format(nir_intrinsic_instr *instr) -{ - if (nir_intrinsic_format(instr) != PIPE_FORMAT_NONE) - return nir_intrinsic_format(instr); - - /* If this not a deref intrinsic, PIPE_FORMAT_NONE is the best we can do */ - if (nir_intrinsic_infos[instr->intrinsic].src_components[0] != -1) - return PIPE_FORMAT_NONE; - - nir_variable *var = nir_intrinsic_get_var(instr, 0); - if (var == NULL) - return PIPE_FORMAT_COUNT; - - return var->data.image.format; -} - -static void -validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state) -{ - unsigned dest_bit_size = 0; - unsigned src_bit_sizes[NIR_INTRINSIC_MAX_INPUTS] = { 0, }; - switch (instr->intrinsic) { - case nir_intrinsic_convert_alu_types: { - nir_alu_type src_type = nir_intrinsic_src_type(instr); - nir_alu_type dest_type = nir_intrinsic_dest_type(instr); - dest_bit_size = nir_alu_type_get_type_size(dest_type); - src_bit_sizes[0] = nir_alu_type_get_type_size(src_type); - validate_assert(state, dest_bit_size != 0); - validate_assert(state, src_bit_sizes[0] != 0); - break; - } - - case nir_intrinsic_load_param: { - unsigned param_idx = nir_intrinsic_param_idx(instr); - validate_assert(state, param_idx < state->impl->function->num_params); - nir_parameter *param = &state->impl->function->params[param_idx]; - validate_assert(state, instr->num_components == param->num_components); - dest_bit_size = param->bit_size; - break; - } - - case nir_intrinsic_load_deref: { - nir_deref_instr *src = nir_src_as_deref(instr->src[0]); - assert(src); - validate_assert(state, glsl_type_is_vector_or_scalar(src->type) || - (src->modes == nir_var_uniform && - glsl_get_base_type(src->type) == GLSL_TYPE_SUBROUTINE)); - validate_assert(state, instr->num_components == - glsl_get_vector_elements(src->type)); - dest_bit_size = glsl_get_bit_size(src->type); - /* Also allow 32-bit boolean load operations */ - if (glsl_type_is_boolean(src->type)) - dest_bit_size |= 32; - break; - } - - case nir_intrinsic_store_deref: { - nir_deref_instr *dst = nir_src_as_deref(instr->src[0]); - assert(dst); - validate_assert(state, glsl_type_is_vector_or_scalar(dst->type)); - validate_assert(state, instr->num_components == - glsl_get_vector_elements(dst->type)); - src_bit_sizes[1] = glsl_get_bit_size(dst->type); - /* Also allow 32-bit boolean store operations */ - if (glsl_type_is_boolean(dst->type)) - src_bit_sizes[1] |= 32; - validate_assert(state, !nir_deref_mode_may_be(dst, nir_var_read_only_modes)); - break; - } - - case nir_intrinsic_copy_deref: { - nir_deref_instr *dst = nir_src_as_deref(instr->src[0]); - nir_deref_instr *src = nir_src_as_deref(instr->src[1]); - validate_assert(state, glsl_get_bare_type(dst->type) == - glsl_get_bare_type(src->type)); - validate_assert(state, !nir_deref_mode_may_be(dst, nir_var_read_only_modes)); - /* FIXME: now that we track if the var copies were lowered, it would be - * good to validate here that no new copy derefs were added. Right now - * we can't as there are some specific cases where copies are added even - * after the lowering. One example is the Intel compiler, that calls - * nir_lower_io_to_temporaries when linking some shader stages. - */ - break; - } - - case nir_intrinsic_load_ubo_vec4: { - int bit_size = nir_dest_bit_size(instr->dest); - validate_assert(state, bit_size >= 8); - validate_assert(state, (nir_intrinsic_component(instr) + - instr->num_components) * (bit_size / 8) <= 16); - break; - } - - case nir_intrinsic_load_ubo: - /* Make sure that the creator didn't forget to set the range_base+range. */ - validate_assert(state, nir_intrinsic_range(instr) != 0); - - case nir_intrinsic_load_ssbo: - case nir_intrinsic_load_shared: - case nir_intrinsic_load_global: - case nir_intrinsic_load_global_constant: - case nir_intrinsic_load_scratch: - case nir_intrinsic_load_constant: - /* These memory load operations must have alignments */ - validate_assert(state, - util_is_power_of_two_nonzero(nir_intrinsic_align_mul(instr))); - validate_assert(state, nir_intrinsic_align_offset(instr) < - nir_intrinsic_align_mul(instr)); - - - case nir_intrinsic_load_uniform: - case nir_intrinsic_load_input: - case nir_intrinsic_load_per_vertex_input: - case nir_intrinsic_load_interpolated_input: - case nir_intrinsic_load_output: - case nir_intrinsic_load_per_vertex_output: - case nir_intrinsic_load_per_primitive_output: - case nir_intrinsic_load_push_constant: - /* All memory load operations must load at least a byte */ - validate_assert(state, nir_dest_bit_size(instr->dest) >= 8); - break; - - case nir_intrinsic_store_ssbo: - case nir_intrinsic_store_shared: - case nir_intrinsic_store_global: - case nir_intrinsic_store_scratch: - /* These memory store operations must also have alignments */ - validate_assert(state, - util_is_power_of_two_nonzero(nir_intrinsic_align_mul(instr))); - validate_assert(state, nir_intrinsic_align_offset(instr) < - nir_intrinsic_align_mul(instr)); - - - case nir_intrinsic_store_output: - case nir_intrinsic_store_per_vertex_output: - /* All memory store operations must store at least a byte */ - validate_assert(state, nir_src_bit_size(instr->src[0]) >= 8); - break; - - case nir_intrinsic_deref_mode_is: - case nir_intrinsic_addr_mode_is: - validate_assert(state, - util_bitcount(nir_intrinsic_memory_modes(instr)) == 1); - break; - - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_atomic_add: - case nir_intrinsic_image_atomic_imin: - case nir_intrinsic_image_atomic_umin: - case nir_intrinsic_image_atomic_imax: - case nir_intrinsic_image_atomic_umax: - case nir_intrinsic_image_atomic_and: - case nir_intrinsic_image_atomic_or: - case nir_intrinsic_image_atomic_xor: - case nir_intrinsic_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_atomic_comp_swap: { - enum pipe_format format = image_intrin_format(instr); - if (format != PIPE_FORMAT_COUNT) { - validate_assert(state, format == PIPE_FORMAT_R32_UINT || - format == PIPE_FORMAT_R32_SINT || - format == PIPE_FORMAT_R64_UINT || - format == PIPE_FORMAT_R64_SINT); - validate_assert(state, nir_dest_bit_size(instr->dest) == - util_format_get_blocksizebits(format)); - } - break; - } - - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_exchange: { - enum pipe_format format = image_intrin_format(instr); - if (format != PIPE_FORMAT_COUNT) { - validate_assert(state, format == PIPE_FORMAT_R32_UINT || - format == PIPE_FORMAT_R32_SINT || - format == PIPE_FORMAT_R32_FLOAT || - format == PIPE_FORMAT_R64_UINT || - format == PIPE_FORMAT_R64_SINT); - validate_assert(state, nir_dest_bit_size(instr->dest) == - util_format_get_blocksizebits(format)); - } - break; - } - - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_fadd: { - enum pipe_format format = image_intrin_format(instr); - validate_assert(state, format == PIPE_FORMAT_COUNT || - format == PIPE_FORMAT_R32_FLOAT); - validate_assert(state, nir_dest_bit_size(instr->dest) == 32); - break; - } - - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_atomic_fmin: - case nir_intrinsic_image_atomic_fmax: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_fmax: { - enum pipe_format format = image_intrin_format(instr); - validate_assert(state, format == PIPE_FORMAT_COUNT || - format == PIPE_FORMAT_R16_FLOAT || - format == PIPE_FORMAT_R32_FLOAT || - format == PIPE_FORMAT_R64_FLOAT); - validate_assert(state, nir_dest_bit_size(instr->dest) == - util_format_get_blocksizebits(format)); - break; - } - - case nir_intrinsic_store_buffer_amd: - if (nir_intrinsic_access(instr) & ACCESS_USES_FORMAT_AMD) { - unsigned writemask = nir_intrinsic_write_mask(instr); - - /* Make sure the writemask is derived from the component count. */ - validate_assert(state, - writemask == - BITFIELD_MASK(nir_src_num_components(instr->src[0]))); - } - break; - - default: - break; - } - - if (instr->num_components > 0) - validate_num_components(state, instr->num_components); - - const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - unsigned num_srcs = info->num_srcs; - for (unsigned i = 0; i < num_srcs; i++) { - unsigned components_read = nir_intrinsic_src_components(instr, i); - - validate_num_components(state, components_read); - - validate_src(&instr->src[i], state, src_bit_sizes[i], components_read); - } - - if (nir_intrinsic_infos[instr->intrinsic].has_dest) { - unsigned components_written = nir_intrinsic_dest_components(instr); - unsigned bit_sizes = info->dest_bit_sizes; - if (!bit_sizes && info->bit_size_src >= 0) - bit_sizes = nir_src_bit_size(instr->src[info->bit_size_src]); - - validate_num_components(state, components_written); - if (dest_bit_size && bit_sizes) - validate_assert(state, dest_bit_size & bit_sizes); - else - dest_bit_size = dest_bit_size ? dest_bit_size : bit_sizes; - - validate_dest(&instr->dest, state, dest_bit_size, components_written); - } - - if (!vectorized_intrinsic(instr)) - validate_assert(state, instr->num_components == 0); - - if (nir_intrinsic_has_write_mask(instr)) { - unsigned component_mask = BITFIELD_MASK(instr->num_components); - validate_assert(state, (nir_intrinsic_write_mask(instr) & ~component_mask) == 0); - } - - if (nir_intrinsic_has_io_xfb(instr)) { - unsigned used_mask = 0; - - for (unsigned i = 0; i < 4; i++) { - nir_io_xfb xfb = i < 2 ? nir_intrinsic_io_xfb(instr) : - nir_intrinsic_io_xfb2(instr); - unsigned xfb_mask = BITFIELD_RANGE(i, xfb.out[i % 2].num_components); - - /* Each component can be used only once by transform feedback info. */ - validate_assert(state, (xfb_mask & used_mask) == 0); - used_mask |= xfb_mask; - } - } - - if (nir_intrinsic_has_io_semantics(instr) && - !nir_intrinsic_infos[instr->intrinsic].has_dest) { - nir_io_semantics sem = nir_intrinsic_io_semantics(instr); - - /* An output that has no effect shouldn't be present in the IR. */ - validate_assert(state, - (nir_slot_is_sysval_output(sem.location) && - !sem.no_sysval_output) || - (nir_slot_is_varying(sem.location) && !sem.no_varying) || - nir_instr_xfb_write_mask(instr)); - } -} - -static void -validate_tex_instr(nir_tex_instr *instr, validate_state *state) -{ - bool src_type_seen[nir_num_tex_src_types]; - for (unsigned i = 0; i < nir_num_tex_src_types; i++) - src_type_seen[i] = false; - - for (unsigned i = 0; i < instr->num_srcs; i++) { - validate_assert(state, !src_type_seen[instr->src[i].src_type]); - src_type_seen[instr->src[i].src_type] = true; - validate_src(&instr->src[i].src, state, - 0, nir_tex_instr_src_size(instr, i)); - - switch (instr->src[i].src_type) { - - case nir_tex_src_comparator: - validate_assert(state, instr->is_shadow); - break; - - case nir_tex_src_bias: - validate_assert(state, instr->op == nir_texop_txb || - instr->op == nir_texop_tg4); - break; - - case nir_tex_src_lod: - validate_assert(state, instr->op != nir_texop_tex && - instr->op != nir_texop_txb && - instr->op != nir_texop_txd && - instr->op != nir_texop_lod); - break; - - case nir_tex_src_ddx: - case nir_tex_src_ddy: - validate_assert(state, instr->op == nir_texop_txd); - break; - - case nir_tex_src_texture_deref: { - nir_deref_instr *deref = nir_src_as_deref(instr->src[i].src); - if (!validate_assert(state, deref)) - break; - - validate_assert(state, glsl_type_is_image(deref->type) || - glsl_type_is_texture(deref->type) || - glsl_type_is_sampler(deref->type)); - switch (instr->op) { - case nir_texop_descriptor_amd: - case nir_texop_sampler_descriptor_amd: - break; - case nir_texop_lod: - case nir_texop_lod_bias_agx: - validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_float); - break; - case nir_texop_samples_identical: - validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_bool); - break; - case nir_texop_txs: - case nir_texop_texture_samples: - case nir_texop_query_levels: - case nir_texop_fragment_mask_fetch_amd: - case nir_texop_txf_ms_mcs_intel: - validate_assert(state, nir_alu_type_get_base_type(instr->dest_type) == nir_type_int || - nir_alu_type_get_base_type(instr->dest_type) == nir_type_uint); - - break; - default: - validate_assert(state, - glsl_get_sampler_result_type(deref->type) == GLSL_TYPE_VOID || - glsl_base_type_is_integer(glsl_get_sampler_result_type(deref->type)) == - (nir_alu_type_get_base_type(instr->dest_type) == nir_type_int || - nir_alu_type_get_base_type(instr->dest_type) == nir_type_uint)); - } - break; - } - - case nir_tex_src_sampler_deref: { - nir_deref_instr *deref = nir_src_as_deref(instr->src[i].src); - if (!validate_assert(state, deref)) - break; - - validate_assert(state, glsl_type_is_sampler(deref->type)); - break; - } - - case nir_tex_src_coord: - case nir_tex_src_projector: - case nir_tex_src_offset: - case nir_tex_src_min_lod: - case nir_tex_src_ms_index: - case nir_tex_src_texture_offset: - case nir_tex_src_sampler_offset: - case nir_tex_src_plane: - case nir_tex_src_texture_handle: - case nir_tex_src_sampler_handle: - break; - - default: - break; - } - } - - if (instr->op != nir_texop_tg4) - validate_assert(state, instr->component == 0); - - if (nir_tex_instr_has_explicit_tg4_offsets(instr)) { - validate_assert(state, instr->op == nir_texop_tg4); - validate_assert(state, !src_type_seen[nir_tex_src_offset]); - } - - validate_dest(&instr->dest, state, 0, nir_tex_instr_dest_size(instr)); - - unsigned bit_size = nir_alu_type_get_type_size(instr->dest_type); - validate_assert(state, - (bit_size ? bit_size : 32) == - nir_dest_bit_size(instr->dest)); -} - -static void -validate_call_instr(nir_call_instr *instr, validate_state *state) -{ - validate_assert(state, instr->num_params == instr->callee->num_params); - - for (unsigned i = 0; i < instr->num_params; i++) { - validate_src(&instr->params[i], state, - instr->callee->params[i].bit_size, - instr->callee->params[i].num_components); - } -} - -static void -validate_const_value(nir_const_value *val, unsigned bit_size, - validate_state *state) -{ - /* In order for block copies to work properly for things like instruction - * comparisons and [de]serialization, we require the unused bits of the - * nir_const_value to be zero. - */ - nir_const_value cmp_val; - memset(&cmp_val, 0, sizeof(cmp_val)); - switch (bit_size) { - case 1: - cmp_val.b = val->b; - break; - case 8: - cmp_val.u8 = val->u8; - break; - case 16: - cmp_val.u16 = val->u16; - break; - case 32: - cmp_val.u32 = val->u32; - break; - case 64: - cmp_val.u64 = val->u64; - break; - default: - validate_assert(state, !"Invalid load_const bit size"); - } - validate_assert(state, memcmp(val, &cmp_val, sizeof(cmp_val)) == 0); -} - -static void -validate_load_const_instr(nir_load_const_instr *instr, validate_state *state) -{ - validate_ssa_def(&instr->def, state); - - for (unsigned i = 0; i < instr->def.num_components; i++) - validate_const_value(&instr->value[i], instr->def.bit_size, state); -} - -static void -validate_ssa_undef_instr(nir_ssa_undef_instr *instr, validate_state *state) -{ - validate_ssa_def(&instr->def, state); -} - -static void -validate_phi_instr(nir_phi_instr *instr, validate_state *state) -{ - /* - * don't validate the sources until we get to them from their predecessor - * basic blocks, to avoid validating an SSA use before its definition. - */ - - validate_dest(&instr->dest, state, 0, 0); - - exec_list_validate(&instr->srcs); - validate_assert(state, exec_list_length(&instr->srcs) == - state->block->predecessors->entries); -} - -static void -validate_jump_instr(nir_jump_instr *instr, validate_state *state) -{ - nir_block *block = state->block; - validate_assert(state, &instr->instr == nir_block_last_instr(block)); - - switch (instr->type) { - case nir_jump_return: - case nir_jump_halt: - validate_assert(state, block->successors[0] == state->impl->end_block); - validate_assert(state, block->successors[1] == NULL); - validate_assert(state, instr->target == NULL); - validate_assert(state, instr->else_target == NULL); - validate_assert(state, !state->in_loop_continue_construct); - break; - - case nir_jump_break: - validate_assert(state, state->impl->structured); - validate_assert(state, state->loop != NULL); - if (state->loop) { - nir_block *after = - nir_cf_node_as_block(nir_cf_node_next(&state->loop->cf_node)); - validate_assert(state, block->successors[0] == after); - } - validate_assert(state, block->successors[1] == NULL); - validate_assert(state, instr->target == NULL); - validate_assert(state, instr->else_target == NULL); - break; - - case nir_jump_continue: - validate_assert(state, state->impl->structured); - validate_assert(state, state->loop != NULL); - if (state->loop) { - nir_block *cont_block = nir_loop_continue_target(state->loop); - validate_assert(state, block->successors[0] == cont_block); - } - validate_assert(state, block->successors[1] == NULL); - validate_assert(state, instr->target == NULL); - validate_assert(state, instr->else_target == NULL); - validate_assert(state, !state->in_loop_continue_construct); - break; - - case nir_jump_goto: - validate_assert(state, !state->impl->structured); - validate_assert(state, instr->target == block->successors[0]); - validate_assert(state, instr->target != NULL); - validate_assert(state, instr->else_target == NULL); - break; - - case nir_jump_goto_if: - validate_assert(state, !state->impl->structured); - validate_assert(state, instr->target == block->successors[1]); - validate_assert(state, instr->else_target == block->successors[0]); - validate_src(&instr->condition, state, 0, 1); - validate_assert(state, instr->target != NULL); - validate_assert(state, instr->else_target != NULL); - break; - - default: - validate_assert(state, !"Invalid jump instruction type"); - break; - } -} - -static void -validate_instr(nir_instr *instr, validate_state *state) -{ - validate_assert(state, instr->block == state->block); - - state->instr = instr; - - switch (instr->type) { - case nir_instr_type_alu: - validate_alu_instr(nir_instr_as_alu(instr), state); - break; - - case nir_instr_type_deref: - validate_deref_instr(nir_instr_as_deref(instr), state); - break; - - case nir_instr_type_call: - validate_call_instr(nir_instr_as_call(instr), state); - break; - - case nir_instr_type_intrinsic: - validate_intrinsic_instr(nir_instr_as_intrinsic(instr), state); - break; - - case nir_instr_type_tex: - validate_tex_instr(nir_instr_as_tex(instr), state); - break; - - case nir_instr_type_load_const: - validate_load_const_instr(nir_instr_as_load_const(instr), state); - break; - - case nir_instr_type_phi: - validate_phi_instr(nir_instr_as_phi(instr), state); - break; - - case nir_instr_type_ssa_undef: - validate_ssa_undef_instr(nir_instr_as_ssa_undef(instr), state); - break; - - case nir_instr_type_jump: - validate_jump_instr(nir_instr_as_jump(instr), state); - break; - - default: - validate_assert(state, !"Invalid ALU instruction type"); - break; - } - - state->instr = NULL; -} - -static void -validate_phi_src(nir_phi_instr *instr, nir_block *pred, validate_state *state) -{ - state->instr = &instr->instr; - - validate_assert(state, instr->dest.is_ssa); - - exec_list_validate(&instr->srcs); - nir_foreach_phi_src(src, instr) { - if (src->pred == pred) { - validate_assert(state, src->src.is_ssa); - validate_src(&src->src, state, instr->dest.ssa.bit_size, - instr->dest.ssa.num_components); - state->instr = NULL; - return; - } - } - validate_assert(state, !"Phi does not have a source corresponding to one " - "of its predecessor blocks"); -} - -static void -validate_phi_srcs(nir_block *block, nir_block *succ, validate_state *state) -{ - nir_foreach_instr(instr, succ) { - if (instr->type != nir_instr_type_phi) - break; - - validate_phi_src(nir_instr_as_phi(instr), block, state); - } -} - -static void -collect_blocks(struct exec_list *cf_list, validate_state *state) -{ - /* We walk the blocks manually here rather than using nir_foreach_block for - * a few reasons: - * - * 1. nir_foreach_block() doesn't work properly for unstructured NIR and - * we need to be able to handle all forms of NIR here. - * - * 2. We want to call exec_list_validate() on every linked list in the IR - * which means we need to touch every linked and just walking blocks - * with nir_foreach_block() would make that difficult. In particular, - * we want to validate each list before the first time we walk it so - * that we catch broken lists in exec_list_validate() instead of - * getting stuck in a hard-to-debug infinite loop in the validator. - * - * 3. nir_foreach_block() depends on several invariants of the CF node - * hierarchy which nir_validate_shader() is responsible for verifying. - * If we used nir_foreach_block() in nir_validate_shader(), we could - * end up blowing up on a bad list walk instead of throwing the much - * easier to debug validation error. - */ - exec_list_validate(cf_list); - foreach_list_typed(nir_cf_node, node, node, cf_list) { - switch (node->type) { - case nir_cf_node_block: - _mesa_set_add(state->blocks, nir_cf_node_as_block(node)); - break; - - case nir_cf_node_if: - collect_blocks(&nir_cf_node_as_if(node)->then_list, state); - collect_blocks(&nir_cf_node_as_if(node)->else_list, state); - break; - - case nir_cf_node_loop: - collect_blocks(&nir_cf_node_as_loop(node)->body, state); - collect_blocks(&nir_cf_node_as_loop(node)->continue_list, state); - break; - - default: - unreachable("Invalid CF node type"); - } - } -} - -static void validate_cf_node(nir_cf_node *node, validate_state *state); - -static void -validate_block_predecessors(nir_block *block, validate_state *state) -{ - for (unsigned i = 0; i < 2; i++) { - if (block->successors[i] == NULL) - continue; - - /* The block has to exist in the nir_function_impl */ - validate_assert(state, _mesa_set_search(state->blocks, - block->successors[i])); - - /* And we have to be in our successor's predecessors set */ - validate_assert(state, - _mesa_set_search(block->successors[i]->predecessors, block)); - - validate_phi_srcs(block, block->successors[i], state); - } - - /* The start block cannot have any predecessors */ - if (block == nir_start_block(state->impl)) - validate_assert(state, block->predecessors->entries == 0); - - set_foreach(block->predecessors, entry) { - const nir_block *pred = entry->key; - validate_assert(state, _mesa_set_search(state->blocks, pred)); - validate_assert(state, pred->successors[0] == block || - pred->successors[1] == block); - } -} - -static void -validate_block(nir_block *block, validate_state *state) -{ - validate_assert(state, block->cf_node.parent == state->parent_node); - - state->block = block; - - exec_list_validate(&block->instr_list); - nir_foreach_instr(instr, block) { - if (instr->type == nir_instr_type_phi) { - validate_assert(state, instr == nir_block_first_instr(block) || - nir_instr_prev(instr)->type == nir_instr_type_phi); - } - - validate_instr(instr, state); - } - - validate_assert(state, block->successors[0] != NULL); - validate_assert(state, block->successors[0] != block->successors[1]); - validate_block_predecessors(block, state); - - if (!state->impl->structured) { - validate_assert(state, nir_block_ends_in_jump(block)); - } else if (!nir_block_ends_in_jump(block)) { - nir_cf_node *next = nir_cf_node_next(&block->cf_node); - if (next == NULL) { - switch (state->parent_node->type) { - case nir_cf_node_loop: { - if (block == nir_loop_last_block(state->loop)) { - nir_block *cont = nir_loop_continue_target(state->loop); - validate_assert(state, block->successors[0] == cont); - } else { - validate_assert(state, nir_loop_has_continue_construct(state->loop) && - block == nir_loop_last_continue_block(state->loop)); - nir_block *head = nir_loop_first_block(state->loop); - validate_assert(state, block->successors[0] == head); - } - /* due to the hack for infinite loops, block->successors[1] may - * point to the block after the loop. - */ - break; - } - - case nir_cf_node_if: { - nir_block *after = - nir_cf_node_as_block(nir_cf_node_next(state->parent_node)); - validate_assert(state, block->successors[0] == after); - validate_assert(state, block->successors[1] == NULL); - break; - } - - case nir_cf_node_function: - validate_assert(state, block->successors[0] == state->impl->end_block); - validate_assert(state, block->successors[1] == NULL); - break; - - default: - unreachable("unknown control flow node type"); - } - } else { - if (next->type == nir_cf_node_if) { - nir_if *if_stmt = nir_cf_node_as_if(next); - validate_assert(state, block->successors[0] == - nir_if_first_then_block(if_stmt)); - validate_assert(state, block->successors[1] == - nir_if_first_else_block(if_stmt)); - } else if (next->type == nir_cf_node_loop) { - nir_loop *loop = nir_cf_node_as_loop(next); - validate_assert(state, block->successors[0] == - nir_loop_first_block(loop)); - validate_assert(state, block->successors[1] == NULL); - } else { - validate_assert(state, - !"Structured NIR cannot have consecutive blocks"); - } - } - } -} - - -static void -validate_end_block(nir_block *block, validate_state *state) -{ - validate_assert(state, block->cf_node.parent == &state->impl->cf_node); - - exec_list_validate(&block->instr_list); - validate_assert(state, exec_list_is_empty(&block->instr_list)); - - validate_assert(state, block->successors[0] == NULL); - validate_assert(state, block->successors[1] == NULL); - validate_block_predecessors(block, state); -} - -static void -validate_if(nir_if *if_stmt, validate_state *state) -{ - validate_assert(state, state->impl->structured); - - state->if_stmt = if_stmt; - - validate_assert(state, !exec_node_is_head_sentinel(if_stmt->cf_node.node.prev)); - nir_cf_node *prev_node = nir_cf_node_prev(&if_stmt->cf_node); - validate_assert(state, prev_node->type == nir_cf_node_block); - - validate_assert(state, !exec_node_is_tail_sentinel(if_stmt->cf_node.node.next)); - nir_cf_node *next_node = nir_cf_node_next(&if_stmt->cf_node); - validate_assert(state, next_node->type == nir_cf_node_block); - - validate_assert(state, if_stmt->condition.is_if); - validate_src(&if_stmt->condition, state, 0, 1); - - validate_assert(state, !exec_list_is_empty(&if_stmt->then_list)); - validate_assert(state, !exec_list_is_empty(&if_stmt->else_list)); - - nir_cf_node *old_parent = state->parent_node; - state->parent_node = &if_stmt->cf_node; - - foreach_list_typed(nir_cf_node, cf_node, node, &if_stmt->then_list) { - validate_cf_node(cf_node, state); - } - - foreach_list_typed(nir_cf_node, cf_node, node, &if_stmt->else_list) { - validate_cf_node(cf_node, state); - } - - state->parent_node = old_parent; - state->if_stmt = NULL; -} - -static void -validate_loop(nir_loop *loop, validate_state *state) -{ - validate_assert(state, state->impl->structured); - - validate_assert(state, !exec_node_is_head_sentinel(loop->cf_node.node.prev)); - nir_cf_node *prev_node = nir_cf_node_prev(&loop->cf_node); - validate_assert(state, prev_node->type == nir_cf_node_block); - - validate_assert(state, !exec_node_is_tail_sentinel(loop->cf_node.node.next)); - nir_cf_node *next_node = nir_cf_node_next(&loop->cf_node); - validate_assert(state, next_node->type == nir_cf_node_block); - - validate_assert(state, !exec_list_is_empty(&loop->body)); - - nir_cf_node *old_parent = state->parent_node; - state->parent_node = &loop->cf_node; - nir_loop *old_loop = state->loop; - bool old_continue_construct = state->in_loop_continue_construct; - state->loop = loop; - state->in_loop_continue_construct = false; - - foreach_list_typed(nir_cf_node, cf_node, node, &loop->body) { - validate_cf_node(cf_node, state); - } - state->in_loop_continue_construct = true; - foreach_list_typed(nir_cf_node, cf_node, node, &loop->continue_list) { - validate_cf_node(cf_node, state); - } - state->in_loop_continue_construct = false; - state->parent_node = old_parent; - state->loop = old_loop; - state->in_loop_continue_construct = old_continue_construct; -} - -static void -validate_cf_node(nir_cf_node *node, validate_state *state) -{ - validate_assert(state, node->parent == state->parent_node); - - switch (node->type) { - case nir_cf_node_block: - validate_block(nir_cf_node_as_block(node), state); - break; - - case nir_cf_node_if: - validate_if(nir_cf_node_as_if(node), state); - break; - - case nir_cf_node_loop: - validate_loop(nir_cf_node_as_loop(node), state); - break; - - default: - unreachable("Invalid CF node type"); - } -} - -static void -prevalidate_reg_decl(nir_register *reg, validate_state *state) -{ - validate_assert(state, reg->index < state->impl->reg_alloc); - validate_assert(state, !BITSET_TEST(state->regs_found, reg->index)); - validate_num_components(state, reg->num_components); - BITSET_SET(state->regs_found, reg->index); - - list_validate(®->uses); - list_validate(®->defs); - - reg_validate_state *reg_state = ralloc(state->regs, reg_validate_state); - reg_state->uses = _mesa_pointer_set_create(reg_state); - reg_state->defs = _mesa_pointer_set_create(reg_state); - - reg_state->where_defined = state->impl; - - _mesa_hash_table_insert(state->regs, reg, reg_state); -} - -static void -postvalidate_reg_decl(nir_register *reg, validate_state *state) -{ - struct hash_entry *entry = _mesa_hash_table_search(state->regs, reg); - - assume(entry); - reg_validate_state *reg_state = (reg_validate_state *) entry->data; - - nir_foreach_use_including_if(src, reg) { - struct set_entry *entry = _mesa_set_search(reg_state->uses, src); - validate_assert(state, entry); - _mesa_set_remove(reg_state->uses, entry); - } - validate_assert(state, reg_state->uses->entries == 0); - - nir_foreach_def(src, reg) { - struct set_entry *entry = _mesa_set_search(reg_state->defs, src); - validate_assert(state, entry); - _mesa_set_remove(reg_state->defs, entry); - } - validate_assert(state, reg_state->defs->entries == 0); -} - -static void -validate_constant(nir_constant *c, const struct glsl_type *type, - validate_state *state) -{ - if (glsl_type_is_vector_or_scalar(type)) { - unsigned num_components = glsl_get_vector_elements(type); - unsigned bit_size = glsl_get_bit_size(type); - for (unsigned i = 0; i < num_components; i++) - validate_const_value(&c->values[i], bit_size, state); - for (unsigned i = num_components; i < NIR_MAX_VEC_COMPONENTS; i++) - validate_assert(state, c->values[i].u64 == 0); - } else { - validate_assert(state, c->num_elements == glsl_get_length(type)); - if (glsl_type_is_struct_or_ifc(type)) { - for (unsigned i = 0; i < c->num_elements; i++) { - const struct glsl_type *elem_type = glsl_get_struct_field(type, i); - validate_constant(c->elements[i], elem_type, state); - } - } else if (glsl_type_is_array_or_matrix(type)) { - const struct glsl_type *elem_type = glsl_get_array_element(type); - for (unsigned i = 0; i < c->num_elements; i++) - validate_constant(c->elements[i], elem_type, state); - } else { - validate_assert(state, !"Invalid type for nir_constant"); - } - } -} - -static void -validate_var_decl(nir_variable *var, nir_variable_mode valid_modes, - validate_state *state) -{ - state->var = var; - - /* Must have exactly one mode set */ - validate_assert(state, util_is_power_of_two_nonzero(var->data.mode)); - validate_assert(state, var->data.mode & valid_modes); - - if (var->data.compact) { - /* The "compact" flag is only valid on arrays of scalars. */ - assert(glsl_type_is_array(var->type)); - - const struct glsl_type *type = glsl_get_array_element(var->type); - if (nir_is_arrayed_io(var, state->shader->info.stage)) { - if (var->data.per_view) { - assert(glsl_type_is_array(type)); - type = glsl_get_array_element(type); - } - assert(glsl_type_is_array(type)); - assert(glsl_type_is_scalar(glsl_get_array_element(type))); - } else { - assert(glsl_type_is_scalar(type)); - } - } - - if (var->num_members > 0) { - const struct glsl_type *without_array = glsl_without_array(var->type); - validate_assert(state, glsl_type_is_struct_or_ifc(without_array)); - validate_assert(state, var->num_members == glsl_get_length(without_array)); - validate_assert(state, var->members != NULL); - } - - if (var->data.per_view) - validate_assert(state, glsl_type_is_array(var->type)); - - if (var->constant_initializer) - validate_constant(var->constant_initializer, var->type, state); - - if (var->data.mode == nir_var_image) { - validate_assert(state, !var->data.bindless); - validate_assert(state, glsl_type_is_image(glsl_without_array(var->type))); - } - - /* - * TODO validate some things ir_validate.cpp does (requires more GLSL type - * support) - */ - - _mesa_hash_table_insert(state->var_defs, var, - valid_modes == nir_var_function_temp ? - state->impl : NULL); - - state->var = NULL; -} - -static bool -validate_ssa_def_dominance(nir_ssa_def *def, void *_state) -{ - validate_state *state = _state; - - validate_assert(state, def->index < state->impl->ssa_alloc); - validate_assert(state, !BITSET_TEST(state->ssa_defs_found, def->index)); - BITSET_SET(state->ssa_defs_found, def->index); - - return true; -} - -static bool -validate_src_dominance(nir_src *src, void *_state) -{ - validate_state *state = _state; - if (!src->is_ssa) - return true; - - if (src->ssa->parent_instr->block == src->parent_instr->block) { - validate_assert(state, src->ssa->index < state->impl->ssa_alloc); - validate_assert(state, BITSET_TEST(state->ssa_defs_found, - src->ssa->index)); - } else { - validate_assert(state, nir_block_dominates(src->ssa->parent_instr->block, - src->parent_instr->block)); - } - return true; -} - -static void -validate_ssa_dominance(nir_function_impl *impl, validate_state *state) -{ - nir_metadata_require(impl, nir_metadata_dominance); - - nir_foreach_block(block, impl) { - state->block = block; - nir_foreach_instr(instr, block) { - state->instr = instr; - if (instr->type == nir_instr_type_phi) { - nir_phi_instr *phi = nir_instr_as_phi(instr); - nir_foreach_phi_src(src, phi) { - validate_assert(state, - nir_block_dominates(src->src.ssa->parent_instr->block, - src->pred)); - } - } else { - nir_foreach_src(instr, validate_src_dominance, state); - } - nir_foreach_ssa_def(instr, validate_ssa_def_dominance, state); - } - } -} - -static void -validate_function_impl(nir_function_impl *impl, validate_state *state) -{ - /* Resize the ssa_srcs set. It's likely that the size of this set will - * never actually hit the number of SSA defs because we remove sources from - * the set as we visit them. (It could actually be much larger because - * each SSA def can be used more than once.) However, growing it now costs - * us very little (the extra memory is already dwarfed by the SSA defs - * themselves) and makes collisions much less likely. - */ - _mesa_set_resize(state->ssa_srcs, impl->ssa_alloc); - - validate_assert(state, impl->function->impl == impl); - validate_assert(state, impl->cf_node.parent == NULL); - - if (impl->preamble) { - validate_assert(state, impl->function->is_entrypoint); - validate_assert(state, impl->preamble->is_preamble); - } - - validate_assert(state, exec_list_is_empty(&impl->end_block->instr_list)); - validate_assert(state, impl->end_block->successors[0] == NULL); - validate_assert(state, impl->end_block->successors[1] == NULL); - - state->impl = impl; - state->parent_node = &impl->cf_node; - - exec_list_validate(&impl->locals); - nir_foreach_function_temp_variable(var, impl) { - validate_var_decl(var, nir_var_function_temp, state); - } - - state->regs_found = reralloc(state->mem_ctx, state->regs_found, - BITSET_WORD, BITSET_WORDS(impl->reg_alloc)); - memset(state->regs_found, 0, BITSET_WORDS(impl->reg_alloc) * - sizeof(BITSET_WORD)); - exec_list_validate(&impl->registers); - foreach_list_typed(nir_register, reg, node, &impl->registers) { - prevalidate_reg_decl(reg, state); - } - - state->ssa_defs_found = reralloc(state->mem_ctx, state->ssa_defs_found, - BITSET_WORD, BITSET_WORDS(impl->ssa_alloc)); - memset(state->ssa_defs_found, 0, BITSET_WORDS(impl->ssa_alloc) * - sizeof(BITSET_WORD)); - - _mesa_set_clear(state->blocks, NULL); - _mesa_set_resize(state->blocks, impl->num_blocks); - collect_blocks(&impl->body, state); - _mesa_set_add(state->blocks, impl->end_block); - validate_assert(state, !exec_list_is_empty(&impl->body)); - foreach_list_typed(nir_cf_node, node, node, &impl->body) { - validate_cf_node(node, state); - } - validate_end_block(impl->end_block, state); - - foreach_list_typed(nir_register, reg, node, &impl->registers) { - postvalidate_reg_decl(reg, state); - } - - validate_assert(state, state->ssa_srcs->entries == 0); - _mesa_set_clear(state->ssa_srcs, NULL); - - static int validate_dominance = -1; - if (validate_dominance < 0) { - validate_dominance = - NIR_DEBUG(VALIDATE_SSA_DOMINANCE); - } - if (validate_dominance) { - memset(state->ssa_defs_found, 0, BITSET_WORDS(impl->ssa_alloc) * - sizeof(BITSET_WORD)); - validate_ssa_dominance(impl, state); - } -} - -static void -validate_function(nir_function *func, validate_state *state) -{ - if (func->impl != NULL) { - validate_assert(state, func->impl->function == func); - validate_function_impl(func->impl, state); - } -} - -static void -init_validate_state(validate_state *state) -{ - state->mem_ctx = ralloc_context(NULL); - state->regs = _mesa_pointer_hash_table_create(state->mem_ctx); - state->ssa_srcs = _mesa_pointer_set_create(state->mem_ctx); - state->ssa_defs_found = NULL; - state->regs_found = NULL; - state->blocks = _mesa_pointer_set_create(state->mem_ctx); - state->var_defs = _mesa_pointer_hash_table_create(state->mem_ctx); - state->errors = _mesa_pointer_hash_table_create(state->mem_ctx); - - state->loop = NULL; - state->in_loop_continue_construct = false; - state->instr = NULL; - state->var = NULL; -} - -static void -destroy_validate_state(validate_state *state) -{ - ralloc_free(state->mem_ctx); -} - -simple_mtx_t fail_dump_mutex = SIMPLE_MTX_INITIALIZER; - -static void -dump_errors(validate_state *state, const char *when) -{ - struct hash_table *errors = state->errors; - - /* Lock around dumping so that we get clean dumps in a multi-threaded - * scenario - */ - simple_mtx_lock(&fail_dump_mutex); - - if (when) { - fprintf(stderr, "NIR validation failed %s\n", when); - fprintf(stderr, "%d errors:\n", _mesa_hash_table_num_entries(errors)); - } else { - fprintf(stderr, "NIR validation failed with %d errors:\n", - _mesa_hash_table_num_entries(errors)); - } - - nir_print_shader_annotated(state->shader, stderr, errors); - - if (_mesa_hash_table_num_entries(errors) > 0) { - fprintf(stderr, "%d additional errors:\n", - _mesa_hash_table_num_entries(errors)); - hash_table_foreach(errors, entry) { - fprintf(stderr, "%s\n", (char *)entry->data); - } - } - - simple_mtx_unlock(&fail_dump_mutex); - - abort(); -} - -void -nir_validate_shader(nir_shader *shader, const char *when) -{ - if (NIR_DEBUG(NOVALIDATE)) - return; - - validate_state state; - init_validate_state(&state); - - state.shader = shader; - - nir_variable_mode valid_modes = - nir_var_shader_in | - nir_var_shader_out | - nir_var_shader_temp | - nir_var_uniform | - nir_var_mem_ubo | - nir_var_system_value | - nir_var_mem_ssbo | - nir_var_mem_shared | - nir_var_mem_global | - nir_var_mem_push_const | - nir_var_mem_constant | - nir_var_image; - - if (gl_shader_stage_is_callable(shader->info.stage)) - valid_modes |= nir_var_shader_call_data; - - if (shader->info.stage == MESA_SHADER_ANY_HIT || - shader->info.stage == MESA_SHADER_CLOSEST_HIT || - shader->info.stage == MESA_SHADER_INTERSECTION) - valid_modes |= nir_var_ray_hit_attrib; - - if (shader->info.stage == MESA_SHADER_TASK || - shader->info.stage == MESA_SHADER_MESH) - valid_modes |= nir_var_mem_task_payload; - - exec_list_validate(&shader->variables); - nir_foreach_variable_in_shader(var, shader) - validate_var_decl(var, valid_modes, &state); - - exec_list_validate(&shader->functions); - foreach_list_typed(nir_function, func, node, &shader->functions) { - validate_function(func, &state); - } - - if (shader->xfb_info != NULL) { - /* At least validate that, if nir_shader::xfb_info exists, the shader - * has real transform feedback going on. - */ - validate_assert(&state, shader->info.stage == MESA_SHADER_VERTEX || - shader->info.stage == MESA_SHADER_TESS_EVAL || - shader->info.stage == MESA_SHADER_GEOMETRY); - validate_assert(&state, shader->xfb_info->buffers_written != 0); - validate_assert(&state, shader->xfb_info->streams_written != 0); - validate_assert(&state, shader->xfb_info->output_count > 0); - } - - if (_mesa_hash_table_num_entries(state.errors) > 0) - dump_errors(&state, when); - - destroy_validate_state(&state); -} - -void -nir_validate_ssa_dominance(nir_shader *shader, const char *when) -{ - if (NIR_DEBUG(NOVALIDATE)) - return; - - validate_state state; - init_validate_state(&state); - - state.shader = shader; - - nir_foreach_function(func, shader) { - if (func->impl == NULL) - continue; - - state.ssa_defs_found = reralloc(state.mem_ctx, state.ssa_defs_found, - BITSET_WORD, - BITSET_WORDS(func->impl->ssa_alloc)); - memset(state.ssa_defs_found, 0, BITSET_WORDS(func->impl->ssa_alloc) * - sizeof(BITSET_WORD)); - - state.impl = func->impl; - validate_ssa_dominance(func->impl, &state); - } - - if (_mesa_hash_table_num_entries(state.errors) > 0) - dump_errors(&state, when); - - destroy_validate_state(&state); -} - -#endif /* NDEBUG */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_vla.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_vla.h deleted file mode 100644 index d26453b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_vla.h +++ /dev/null @@ -1,56 +0,0 @@ -/************************************************************************** - * - * Copyright 2015 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef NIR_VLA_H -#define NIR_VLA_H - -#include "../../../include/c99_alloca.h" - - -/* Declare a variable length array, with no initialization */ -#define NIR_VLA(_type, _name, _length) \ - _type *_name = alloca((_length) * sizeof *_name) - - -/* Declare a variable length array, and initialize it with the given byte. - * - * _length is evaluated twice, so expressions with side-effects must be - * avoided. - */ -#define NIR_VLA_FILL(_type, _name, _length, _byte) \ - _type *_name = memset(alloca((_length) * sizeof *_name), _byte, (_length) * sizeof *_name) - - -/* Declare a variable length array, and zero it. - * - * Just like NIR_VLA_FILL, _length is evaluated twice, so expressions with - * side-effects must be avoided. - */ -#define NIR_VLA_ZERO(_type, _name, _length) \ - NIR_VLA_FILL(_type, _name, _length, 0) - -#endif /* NIR_VLA_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_vulkan.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_vulkan.h deleted file mode 100644 index 7512f3a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_vulkan.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2020 Jonathan Marek - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_VULKAN_H -#define NIR_VULKAN_H - -#include "nir.h" -#include "nir_builder.h" -#include "vulkan/vulkan_core.h" - -#ifdef __cplusplus -extern "C" { -#endif - -nir_ssa_def * -nir_convert_ycbcr_to_rgb(nir_builder *b, - VkSamplerYcbcrModelConversion model, - VkSamplerYcbcrRange range, - nir_ssa_def *raw_channels, - uint32_t *bpcs); - -struct vk_ycbcr_conversion; - -typedef const struct vk_ycbcr_conversion_state * - (*nir_vk_ycbcr_conversion_lookup_cb)(const void *data, uint32_t set, - uint32_t binding, uint32_t array_index); - -bool nir_vk_lower_ycbcr_tex(nir_shader *nir, - nir_vk_ycbcr_conversion_lookup_cb cb, - const void *cb_data); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* NIR_VULKAN_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_worklist.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_worklist.c deleted file mode 100644 index 2a8b3ef..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_worklist.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "nir_worklist.h" - -void -nir_block_worklist_add_all(nir_block_worklist *w, nir_function_impl *impl) -{ - nir_foreach_block(block, impl) { - nir_block_worklist_push_tail(w, block); - } -} - -static bool -nir_instr_worklist_add_srcs_cb(nir_src *src, void *state) -{ - nir_instr_worklist *wl = state; - - if (src->is_ssa) - nir_instr_worklist_push_tail(wl, src->ssa->parent_instr); - - return true; -} - -void -nir_instr_worklist_add_ssa_srcs(nir_instr_worklist *wl, nir_instr *instr) -{ - nir_foreach_src(instr, nir_instr_worklist_add_srcs_cb, wl); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_worklist.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_worklist.h deleted file mode 100644 index ea7913e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_worklist.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _NIR_WORKLIST_ -#define _NIR_WORKLIST_ - -#include "nir.h" -#include "../../util/set.h" -#include "../../util/u_vector.h" -#include "../../util/u_worklist.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef u_worklist nir_block_worklist; - -#define nir_block_worklist_init(w, num_blocks, mem_ctx) \ - u_worklist_init(w, num_blocks, mem_ctx) - -#define nir_block_worklist_fini(w) u_worklist_fini(w) - -#define nir_block_worklist_is_empty(w) u_worklist_is_empty(w) - -#define nir_block_worklist_push_head(w, block) \ - u_worklist_push_head(w, block, index) - -#define nir_block_worklist_peek_head(w) \ - u_worklist_peek_head(w, nir_block, index) - -#define nir_block_worklist_pop_head(w) \ - u_worklist_pop_head(w, nir_block, index) - -#define nir_block_worklist_push_tail(w, block) \ - u_worklist_push_tail(w, block, index) - -#define nir_block_worklist_peek_tail(w) \ - u_worklist_peek_tail(w, nir_block, index) - -#define nir_block_worklist_pop_tail(w) \ - u_worklist_pop_tail(w, nir_block, index) - -void nir_block_worklist_add_all(nir_block_worklist *w, nir_function_impl *impl); - -/* - * This worklist implementation, in contrast to the block worklist, does not - * have unique entries, meaning a nir_instr can be inserted more than once - * into the worklist. It uses u_vector to keep the overhead and memory - * footprint at a minimum. - * - * Making it unique by using a set was tested, but for the single usecase - * (nir_opt_dce) it did not improve speed. There we check the pass_flag bit - * and abort immediately if there's nothing to do, so the added overhead of - * the set was higher than just processing the few extra entries. - */ - -typedef struct { - struct u_vector instr_vec; -} nir_instr_worklist; - -static inline nir_instr_worklist * -nir_instr_worklist_create() { - nir_instr_worklist *wl = malloc(sizeof(nir_instr_worklist)); - if (!wl) - return NULL; - - if (!u_vector_init_pow2(&wl->instr_vec, 8, sizeof(struct nir_instr *))) { - free(wl); - return NULL; - } - - return wl; -} - -static inline uint32_t -nir_instr_worklist_length(nir_instr_worklist *wl) -{ - return u_vector_length(&wl->instr_vec); -} - -static inline bool -nir_instr_worklist_is_empty(nir_instr_worklist *wl) -{ - return nir_instr_worklist_length(wl) == 0; -} - -static inline void -nir_instr_worklist_destroy(nir_instr_worklist *wl) -{ - u_vector_finish(&wl->instr_vec); - free(wl); -} - -static inline void -nir_instr_worklist_push_tail(nir_instr_worklist *wl, nir_instr *instr) -{ - struct nir_instr **vec_instr = u_vector_add(&wl->instr_vec); - *vec_instr = instr; -} - -static inline nir_instr * -nir_instr_worklist_pop_head(nir_instr_worklist *wl) -{ - struct nir_instr **vec_instr = u_vector_remove(&wl->instr_vec); - - if (vec_instr == NULL) - return NULL; - - return *vec_instr; -} - -void -nir_instr_worklist_add_ssa_srcs(nir_instr_worklist *wl, nir_instr *instr); - -#define nir_foreach_instr_in_worklist(instr, wl) \ - for (nir_instr *instr; (instr = nir_instr_worklist_pop_head(wl));) - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* _NIR_WORKLIST_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_xfb_info.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_xfb_info.h deleted file mode 100644 index 1ae470d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir/nir_xfb_info.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef NIR_XFB_INFO_H -#define NIR_XFB_INFO_H - -#include "nir.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define NIR_MAX_XFB_BUFFERS 4 -#define NIR_MAX_XFB_STREAMS 4 - -typedef struct { - uint16_t stride; - uint16_t varying_count; -} nir_xfb_buffer_info; - -typedef struct { - uint8_t buffer; - uint16_t offset; - uint8_t location; - bool high_16bits; - uint8_t component_mask; - uint8_t component_offset; -} nir_xfb_output_info; - -typedef struct { - const struct glsl_type *type; - uint8_t buffer; - uint16_t offset; -} nir_xfb_varying_info; - -typedef struct nir_xfb_info { - uint8_t buffers_written; - uint8_t streams_written; - - nir_xfb_buffer_info buffers[NIR_MAX_XFB_BUFFERS]; - uint8_t buffer_to_stream[NIR_MAX_XFB_BUFFERS]; - - uint16_t output_count; - nir_xfb_output_info outputs[0]; -} nir_xfb_info; - -typedef struct nir_xfb_varyings_info { - uint16_t varying_count; - nir_xfb_varying_info varyings[0]; -} nir_xfb_varyings_info; - -static inline size_t -nir_xfb_info_size(uint16_t output_count) -{ - return sizeof(nir_xfb_info) + sizeof(nir_xfb_output_info) * output_count; -} - -void nir_shader_gather_xfb_info(nir_shader *shader); - -void -nir_gather_xfb_info_with_varyings(nir_shader *shader, - void *mem_ctx, - nir_xfb_varyings_info **varyings_info); - -void -nir_gather_xfb_info_from_intrinsics(nir_shader *nir); - -void -nir_print_xfb_info(nir_xfb_info *info, FILE *fp); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* NIR_XFB_INFO_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_gl_types.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_gl_types.h deleted file mode 100644 index 70a7342..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_gl_types.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2017 Igalia - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Neil Roberts. - * - */ - -#ifndef NIR_GL_TYPES_H -#define NIR_GL_TYPES_H - -#include "../util/glheader.h" - -#ifdef __cplusplus -extern "C" { -#endif - -GLenum glsl_get_gl_type(const struct glsl_type *type); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_types.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_types.cpp deleted file mode 100644 index 89a3efe..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_types.cpp +++ /dev/null @@ -1,1127 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#include "nir_types.h" -#include "nir_gl_types.h" -#include "./glsl/ir.h" - -const char * -glsl_get_type_name(const glsl_type *type) -{ - return type->name; -} - -int -glsl_array_size(const struct glsl_type *type) -{ - return type->array_size(); -} - -const glsl_type * -glsl_get_array_element(const glsl_type* type) -{ - if (type->is_matrix()) - return type->column_type(); - else if (type->is_vector()) - return type->get_scalar_type(); - return type->fields.array; -} - -const glsl_type * -glsl_without_array(const glsl_type *type) -{ - return type->without_array(); -} - -const glsl_type * -glsl_without_array_or_matrix(const glsl_type *type) -{ - type = type->without_array(); - if (type->is_matrix()) - type = type->column_type(); - return type; -} - -const glsl_type * -glsl_get_bare_type(const glsl_type *type) -{ - return type->get_bare_type(); -} - -const glsl_type * -glsl_get_struct_field(const glsl_type *type, unsigned index) -{ - assert(type->is_struct() || type->is_interface()); - assert(index < type->length); - return type->fields.structure[index].type; -} - -int -glsl_get_struct_field_offset(const struct glsl_type *type, - unsigned index) -{ - return type->fields.structure[index].offset; -} - -const struct glsl_struct_field * -glsl_get_struct_field_data(const struct glsl_type *type, unsigned index) -{ - assert(type->is_struct() || type->is_interface()); - assert(index < type->length); - return &type->fields.structure[index]; -} - -unsigned -glsl_get_explicit_stride(const struct glsl_type *type) -{ - return type->explicit_stride; -} - -const glsl_type * -glsl_get_function_return_type(const glsl_type *type) -{ - return type->fields.parameters[0].type; -} - -const glsl_function_param * -glsl_get_function_param(const glsl_type *type, unsigned index) -{ - return &type->fields.parameters[index + 1]; -} - -const glsl_type * -glsl_texture_type_to_sampler(const glsl_type *type, bool is_shadow) -{ - assert(glsl_type_is_texture(type)); - return glsl_sampler_type((glsl_sampler_dim)type->sampler_dimensionality, - is_shadow, type->sampler_array, - (glsl_base_type)type->sampled_type); -} - -const glsl_type * -glsl_sampler_type_to_texture(const glsl_type *type) -{ - assert(glsl_type_is_sampler(type) && !glsl_type_is_bare_sampler(type)); - return glsl_texture_type((glsl_sampler_dim)type->sampler_dimensionality, - type->sampler_array, - (glsl_base_type)type->sampled_type); -} - -const struct glsl_type * -glsl_get_column_type(const struct glsl_type *type) -{ - return type->column_type(); -} - -GLenum -glsl_get_gl_type(const struct glsl_type *type) -{ - return type->gl_type; -} - -enum glsl_base_type -glsl_get_base_type(const struct glsl_type *type) -{ - return type->base_type; -} - -unsigned -glsl_get_vector_elements(const struct glsl_type *type) -{ - return type->vector_elements; -} - -unsigned -glsl_get_components(const struct glsl_type *type) -{ - return type->components(); -} - -unsigned -glsl_get_matrix_columns(const struct glsl_type *type) -{ - return type->matrix_columns; -} - -unsigned -glsl_get_length(const struct glsl_type *type) -{ - return type->is_matrix() ? type->matrix_columns : type->length; -} - -unsigned -glsl_get_aoa_size(const struct glsl_type *type) -{ - return type->arrays_of_arrays_size(); -} - -unsigned -glsl_count_vec4_slots(const struct glsl_type *type, - bool is_gl_vertex_input, bool is_bindless) -{ - return type->count_vec4_slots(is_gl_vertex_input, is_bindless); -} - -unsigned -glsl_count_dword_slots(const struct glsl_type *type, bool is_bindless) -{ - return type->count_dword_slots(is_bindless); -} - -unsigned -glsl_count_attribute_slots(const struct glsl_type *type, - bool is_gl_vertex_input) -{ - return type->count_attribute_slots(is_gl_vertex_input); -} - -unsigned -glsl_get_component_slots(const struct glsl_type *type) -{ - return type->component_slots(); -} - -unsigned -glsl_get_component_slots_aligned(const struct glsl_type *type, unsigned offset) -{ - return type->component_slots_aligned(offset); -} - -unsigned -glsl_varying_count(const struct glsl_type *type) -{ - return type->varying_count(); -} - -const char * -glsl_get_struct_elem_name(const struct glsl_type *type, unsigned index) -{ - return type->fields.structure[index].name; -} - -glsl_sampler_dim -glsl_get_sampler_dim(const struct glsl_type *type) -{ - assert(glsl_type_is_sampler(type) || - glsl_type_is_texture(type) || - glsl_type_is_image(type)); - return (glsl_sampler_dim)type->sampler_dimensionality; -} - -glsl_base_type -glsl_get_sampler_result_type(const struct glsl_type *type) -{ - assert(glsl_type_is_sampler(type) || - glsl_type_is_texture(type) || - glsl_type_is_image(type)); - return (glsl_base_type)type->sampled_type; -} - -unsigned -glsl_get_sampler_target(const struct glsl_type *type) -{ - assert(glsl_type_is_sampler(type)); - return type->sampler_index(); -} - -int -glsl_get_sampler_coordinate_components(const struct glsl_type *type) -{ - assert(glsl_type_is_sampler(type) || - glsl_type_is_texture(type) || - glsl_type_is_image(type)); - return type->coordinate_components(); -} - -unsigned -glsl_get_struct_location_offset(const struct glsl_type *type, - unsigned length) -{ - return type->struct_location_offset(length); -} - -bool -glsl_type_is_16bit(const glsl_type *type) -{ - return type->is_16bit(); -} - -bool -glsl_type_is_32bit(const glsl_type *type) -{ - return type->is_32bit(); -} - -bool -glsl_type_is_64bit(const glsl_type *type) -{ - return type->is_64bit(); -} - -bool -glsl_type_is_void(const glsl_type *type) -{ - return type->is_void(); -} - -bool -glsl_type_is_error(const glsl_type *type) -{ - return type->is_error(); -} - -bool -glsl_type_is_vector(const struct glsl_type *type) -{ - return type->is_vector(); -} - -bool -glsl_type_is_scalar(const struct glsl_type *type) -{ - return type->is_scalar(); -} - -bool -glsl_type_is_vector_or_scalar(const struct glsl_type *type) -{ - return type->is_vector() || type->is_scalar(); -} - -bool -glsl_type_is_matrix(const struct glsl_type *type) -{ - return type->is_matrix(); -} - -bool -glsl_matrix_type_is_row_major(const struct glsl_type *type) -{ - assert((type->is_matrix() && type->explicit_stride) || type->is_interface()); - return type->interface_row_major; -} - -bool -glsl_type_is_array(const struct glsl_type *type) -{ - return type->is_array(); -} - -bool -glsl_type_is_unsized_array(const struct glsl_type *type) -{ - return type->is_unsized_array(); -} - -bool -glsl_type_is_array_of_arrays(const struct glsl_type *type) -{ - return type->is_array_of_arrays(); -} - -bool -glsl_type_is_array_or_matrix(const struct glsl_type *type) -{ - return type->is_array() || type->is_matrix(); -} - -bool -glsl_type_is_struct(const struct glsl_type *type) -{ - return type->is_struct(); -} - -bool -glsl_type_is_interface(const struct glsl_type *type) -{ - return type->is_interface(); -} - -bool -glsl_type_is_struct_or_ifc(const struct glsl_type *type) -{ - return type->is_struct() || type->is_interface(); -} - -bool -glsl_type_is_sampler(const struct glsl_type *type) -{ - return type->is_sampler(); -} - -bool -glsl_type_is_bare_sampler(const struct glsl_type *type) -{ - return type->is_sampler() && type->sampled_type == GLSL_TYPE_VOID; -} - -bool -glsl_type_is_texture(const struct glsl_type *type) -{ - return type->is_texture(); -} - -bool -glsl_type_is_image(const struct glsl_type *type) -{ - return type->is_image(); -} - -bool -glsl_sampler_type_is_shadow(const struct glsl_type *type) -{ - assert(glsl_type_is_sampler(type)); - return type->sampler_shadow; -} - -bool -glsl_sampler_type_is_array(const struct glsl_type *type) -{ - assert(glsl_type_is_sampler(type) || - glsl_type_is_texture(type) || - glsl_type_is_image(type)); - return type->sampler_array; -} - -bool -glsl_struct_type_is_packed(const struct glsl_type *type) -{ - assert(glsl_type_is_struct(type)); - return type->packed; -} - -bool -glsl_type_is_dual_slot(const struct glsl_type *type) -{ - return type->is_dual_slot(); -} - -bool -glsl_type_is_numeric(const struct glsl_type *type) -{ - return type->is_numeric(); -} - -bool -glsl_type_is_boolean(const struct glsl_type *type) -{ - return type->is_boolean(); -} -bool -glsl_type_is_integer(const struct glsl_type *type) -{ - return type->is_integer(); -} - -bool -glsl_type_contains_64bit(const struct glsl_type *type) -{ - return type->contains_64bit(); -} - -bool -glsl_type_contains_image(const struct glsl_type *type) -{ - return type->contains_image(); -} - -bool -glsl_contains_double(const struct glsl_type *type) -{ - return type->contains_double(); -} - -bool -glsl_contains_integer(const struct glsl_type *type) -{ - return type->contains_integer(); -} - -bool -glsl_record_compare(const struct glsl_type *a, const struct glsl_type *b, - bool match_name, bool match_locations, bool match_precision) -{ - return a->record_compare(b, match_name, match_locations, match_precision); -} - -const glsl_type * -glsl_void_type(void) -{ - return glsl_type::void_type; -} - -const glsl_type * -glsl_float_type(void) -{ - return glsl_type::float_type; -} - -const glsl_type * -glsl_double_type(void) -{ - return glsl_type::double_type; -} - -const glsl_type * -glsl_float16_t_type(void) -{ - return glsl_type::float16_t_type; -} - -const glsl_type * -glsl_floatN_t_type(unsigned bit_size) -{ - switch (bit_size) { - case 16: return glsl_type::float16_t_type; - case 32: return glsl_type::float_type; - case 64: return glsl_type::double_type; - default: - unreachable("Unsupported bit size"); - } -} - -const glsl_type * -glsl_vec_type(unsigned n) -{ - return glsl_type::vec(n); -} - -const glsl_type * -glsl_dvec_type(unsigned n) -{ - return glsl_type::dvec(n); -} - -const glsl_type * -glsl_vec4_type(void) -{ - return glsl_type::vec4_type; -} - -const glsl_type * -glsl_uvec4_type(void) -{ - return glsl_type::uvec4_type; -} - -const glsl_type * -glsl_ivec4_type(void) -{ - return glsl_type::ivec4_type; -} - -const glsl_type * -glsl_int_type(void) -{ - return glsl_type::int_type; -} - -const glsl_type * -glsl_uint_type(void) -{ - return glsl_type::uint_type; -} - -const glsl_type * -glsl_int64_t_type(void) -{ - return glsl_type::int64_t_type; -} - -const glsl_type * -glsl_uint64_t_type(void) -{ - return glsl_type::uint64_t_type; -} - -const glsl_type * -glsl_int16_t_type(void) -{ - return glsl_type::int16_t_type; -} - -const glsl_type * -glsl_uint16_t_type(void) -{ - return glsl_type::uint16_t_type; -} - -const glsl_type * -glsl_int8_t_type(void) -{ - return glsl_type::int8_t_type; -} - -const glsl_type * -glsl_uint8_t_type(void) -{ - return glsl_type::uint8_t_type; -} - -const glsl_type * -glsl_intN_t_type(unsigned bit_size) -{ - switch (bit_size) { - case 8: return glsl_type::int8_t_type; - case 16: return glsl_type::int16_t_type; - case 32: return glsl_type::int_type; - case 64: return glsl_type::int64_t_type; - default: - unreachable("Unsupported bit size"); - } -} - -const glsl_type * -glsl_uintN_t_type(unsigned bit_size) -{ - switch (bit_size) { - case 8: return glsl_type::uint8_t_type; - case 16: return glsl_type::uint16_t_type; - case 32: return glsl_type::uint_type; - case 64: return glsl_type::uint64_t_type; - default: - unreachable("Unsupported bit size"); - } -} - -const glsl_type * -glsl_bool_type(void) -{ - return glsl_type::bool_type; -} - -const glsl_type * -glsl_scalar_type(enum glsl_base_type base_type) -{ - return glsl_type::get_instance(base_type, 1, 1); -} - -const glsl_type * -glsl_vector_type(enum glsl_base_type base_type, unsigned components) -{ - const glsl_type *t = glsl_type::get_instance(base_type, components, 1); - assert(t != glsl_type::error_type); - return t; -} - -const glsl_type * -glsl_matrix_type(enum glsl_base_type base_type, unsigned rows, unsigned columns) -{ - const glsl_type *t = glsl_type::get_instance(base_type, rows, columns); - assert(t != glsl_type::error_type); - return t; -} - -const glsl_type * -glsl_explicit_matrix_type(const glsl_type *mat, - unsigned stride, bool row_major) -{ - assert(stride > 0); - const glsl_type *t = glsl_type::get_instance(mat->base_type, - mat->vector_elements, - mat->matrix_columns, - stride, row_major); - assert(t != glsl_type::error_type); - return t; -} - -const glsl_type * -glsl_array_type(const glsl_type *base, unsigned elements, - unsigned explicit_stride) -{ - return glsl_type::get_array_instance(base, elements, explicit_stride); -} - -const glsl_type * -glsl_replace_vector_type(const glsl_type *t, unsigned components) -{ - if (glsl_type_is_array(t)) { - return glsl_array_type( - glsl_replace_vector_type(t->fields.array, components), t->length, - t->explicit_stride); - } else if (glsl_type_is_vector_or_scalar(t)) { - return glsl_vector_type(t->base_type, components); - } else { - unreachable("Unhandled base type glsl_replace_vector_type()"); - } -} - -const glsl_type * -glsl_struct_type(const glsl_struct_field *fields, - unsigned num_fields, const char *name, - bool packed) -{ - return glsl_type::get_struct_instance(fields, num_fields, name, packed); -} - -const glsl_type * -glsl_interface_type(const glsl_struct_field *fields, - unsigned num_fields, - enum glsl_interface_packing packing, - bool row_major, - const char *block_name) -{ - return glsl_type::get_interface_instance(fields, num_fields, packing, - row_major, block_name); -} - -const struct glsl_type * -glsl_sampler_type(enum glsl_sampler_dim dim, bool is_shadow, bool is_array, - enum glsl_base_type base_type) -{ - return glsl_type::get_sampler_instance(dim, is_shadow, is_array, base_type); -} - -const struct glsl_type * -glsl_bare_sampler_type() -{ - return glsl_type::sampler_type; -} - -const struct glsl_type * -glsl_bare_shadow_sampler_type() -{ - return glsl_type::samplerShadow_type; -} - -const struct glsl_type * -glsl_texture_type(enum glsl_sampler_dim dim, bool is_array, - enum glsl_base_type base_type) -{ - return glsl_type::get_texture_instance(dim, is_array, base_type); -} - -const struct glsl_type * -glsl_image_type(enum glsl_sampler_dim dim, bool is_array, - enum glsl_base_type base_type) -{ - return glsl_type::get_image_instance(dim, is_array, base_type); -} - -const glsl_type * -glsl_function_type(const glsl_type *return_type, - const glsl_function_param *params, unsigned num_params) -{ - return glsl_type::get_function_instance(return_type, params, num_params); -} - -const glsl_type * -glsl_transposed_type(const struct glsl_type *type) -{ - assert(glsl_type_is_matrix(type)); - return glsl_type::get_instance(type->base_type, type->matrix_columns, - type->vector_elements); -} - -const glsl_type * -glsl_channel_type(const glsl_type *t) -{ - switch (t->base_type) { - case GLSL_TYPE_ARRAY: - return glsl_array_type(glsl_channel_type(t->fields.array), t->length, - t->explicit_stride); - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: - case GLSL_TYPE_BOOL: - return glsl_type::get_instance(t->base_type, 1, 1); - default: - unreachable("Unhandled base type glsl_channel_type()"); - } -} - -const glsl_type * -glsl_float16_type(const struct glsl_type *type) -{ - return type->get_float16_type(); -} - -const glsl_type * -glsl_int16_type(const struct glsl_type *type) -{ - return type->get_int16_type(); -} - -const glsl_type * -glsl_uint16_type(const struct glsl_type *type) -{ - return type->get_uint16_type(); -} - -const struct glsl_type * -glsl_type_to_16bit(const struct glsl_type *old_type) -{ - if (glsl_type_is_array(old_type)) { - return glsl_array_type(glsl_type_to_16bit(glsl_get_array_element(old_type)), - glsl_get_length(old_type), - glsl_get_explicit_stride(old_type)); - } - - if (glsl_type_is_vector_or_scalar(old_type)) { - switch (glsl_get_base_type(old_type)) { - case GLSL_TYPE_FLOAT: - return glsl_float16_type(old_type); - case GLSL_TYPE_UINT: - return glsl_uint16_type(old_type); - case GLSL_TYPE_INT: - return glsl_int16_type(old_type); - default: - break; - } - } - - return old_type; -} - -static void -glsl_size_align_handle_array_and_structs(const struct glsl_type *type, - glsl_type_size_align_func size_align, - unsigned *size, unsigned *align) -{ - if (type->base_type == GLSL_TYPE_ARRAY) { - unsigned elem_size = 0, elem_align = 0; - size_align(type->fields.array, &elem_size, &elem_align); - *align = elem_align; - *size = type->length * ALIGN_POT(elem_size, elem_align); - } else { - assert(type->base_type == GLSL_TYPE_STRUCT || - type->base_type == GLSL_TYPE_INTERFACE); - - *size = 0; - *align = 0; - for (unsigned i = 0; i < type->length; i++) { - unsigned elem_size = 0, elem_align = 0; - size_align(type->fields.structure[i].type, &elem_size, &elem_align); - *align = MAX2(*align, elem_align); - *size = ALIGN_POT(*size, elem_align) + elem_size; - } - } -} - -void -glsl_get_natural_size_align_bytes(const struct glsl_type *type, - unsigned *size, unsigned *align) -{ - switch (type->base_type) { - case GLSL_TYPE_BOOL: - /* We special-case Booleans to 32 bits to not cause heartburn for - * drivers that suddenly get an 8-bit load. - */ - *size = 4 * type->components(); - *align = 4; - break; - - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: { - unsigned N = glsl_get_bit_size(type) / 8; - *size = N * type->components(); - *align = N; - break; - } - - case GLSL_TYPE_ARRAY: - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_STRUCT: - glsl_size_align_handle_array_and_structs(type, - glsl_get_natural_size_align_bytes, - size, align); - break; - - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - /* Bindless samplers and images. */ - *size = 8; - *align = 8; - break; - - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - case GLSL_TYPE_FUNCTION: - unreachable("type does not have a natural size"); - } -} - -/** - * Returns a byte size/alignment for a type where each array element or struct - * field is aligned to 16 bytes. - */ -void -glsl_get_vec4_size_align_bytes(const struct glsl_type *type, - unsigned *size, unsigned *align) -{ - switch (type->base_type) { - case GLSL_TYPE_BOOL: - /* We special-case Booleans to 32 bits to not cause heartburn for - * drivers that suddenly get an 8-bit load. - */ - *size = 4 * type->components(); - *align = 16; - break; - - case GLSL_TYPE_UINT8: - case GLSL_TYPE_INT8: - case GLSL_TYPE_UINT16: - case GLSL_TYPE_INT16: - case GLSL_TYPE_FLOAT16: - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_DOUBLE: - case GLSL_TYPE_UINT64: - case GLSL_TYPE_INT64: { - unsigned N = glsl_get_bit_size(type) / 8; - *size = 16 * (type->matrix_columns - 1) + N * type->vector_elements; - *align = 16; - break; - } - - case GLSL_TYPE_ARRAY: - case GLSL_TYPE_INTERFACE: - case GLSL_TYPE_STRUCT: - glsl_size_align_handle_array_and_structs(type, - glsl_get_vec4_size_align_bytes, - size, align); - break; - - case GLSL_TYPE_SAMPLER: - case GLSL_TYPE_TEXTURE: - case GLSL_TYPE_IMAGE: - case GLSL_TYPE_ATOMIC_UINT: - case GLSL_TYPE_SUBROUTINE: - case GLSL_TYPE_VOID: - case GLSL_TYPE_ERROR: - case GLSL_TYPE_FUNCTION: - unreachable("type does not make sense for glsl_get_vec4_size_align_bytes()"); - } -} - -const glsl_type * -glsl_atomic_uint_type(void) -{ - return glsl_type::atomic_uint_type; -} - -unsigned -glsl_atomic_size(const struct glsl_type *type) -{ - return type->atomic_size(); -} - -bool -glsl_contains_atomic(const struct glsl_type *type) -{ - return type->contains_atomic(); -} - -bool -glsl_contains_opaque(const struct glsl_type *type) -{ - return type->contains_opaque(); -} - -int -glsl_get_cl_size(const struct glsl_type *type) -{ - return type->cl_size(); -} - -int -glsl_get_cl_alignment(const struct glsl_type *type) -{ - return type->cl_alignment(); -} - -void -glsl_get_cl_type_size_align(const struct glsl_type *type, - unsigned *size, unsigned *align) -{ - *size = glsl_get_cl_size(type); - *align = glsl_get_cl_alignment(type); -} - -static unsigned -glsl_type_count(const glsl_type *type, glsl_base_type base_type) -{ - if (glsl_type_is_array(type)) { - return glsl_get_length(type) * - glsl_type_count(glsl_get_array_element(type), base_type); - } - - /* Ignore interface blocks - they can only contain bindless samplers, - * which we shouldn't count. - */ - if (glsl_type_is_struct(type)) { - unsigned count = 0; - for (unsigned i = 0; i < glsl_get_length(type); i++) - count += glsl_type_count(glsl_get_struct_field(type, i), base_type); - return count; - } - - if (glsl_get_base_type(type) == base_type) - return 1; - - return 0; -} - -unsigned -glsl_type_get_sampler_count(const struct glsl_type *type) -{ - return glsl_type_count(type, GLSL_TYPE_SAMPLER); -} - -unsigned -glsl_type_get_texture_count(const struct glsl_type *type) -{ - return glsl_type_count(type, GLSL_TYPE_TEXTURE); -} - -unsigned -glsl_type_get_image_count(const struct glsl_type *type) -{ - return glsl_type_count(type, GLSL_TYPE_IMAGE); -} - -int -glsl_get_field_index(const struct glsl_type *type, const char *name) -{ - return type->field_index(name); -} - -enum glsl_interface_packing -glsl_get_internal_ifc_packing(const struct glsl_type *type, - bool std430_supported) -{ - return type->get_internal_ifc_packing(std430_supported); -} - -enum glsl_interface_packing -glsl_get_ifc_packing(const struct glsl_type *type) -{ - return type->get_interface_packing(); -} - -unsigned -glsl_get_std140_base_alignment(const struct glsl_type *type, bool row_major) -{ - return type->std140_base_alignment(row_major); -} - -unsigned -glsl_get_std140_size(const struct glsl_type *type, bool row_major) -{ - return type->std140_size(row_major); -} - -unsigned -glsl_get_std430_base_alignment(const struct glsl_type *type, bool row_major) -{ - return type->std430_base_alignment(row_major); -} - -unsigned -glsl_get_std430_size(const struct glsl_type *type, bool row_major) -{ - return type->std430_size(row_major); -} - -unsigned -glsl_get_explicit_size(const struct glsl_type *type, bool align_to_stride) -{ - return type->explicit_size(align_to_stride); -} - -unsigned -glsl_get_explicit_alignment(const struct glsl_type *type) -{ - return type->explicit_alignment; -} - -bool -glsl_type_is_packed(const struct glsl_type *type) -{ - return type->packed; -} - -bool -glsl_type_is_leaf(const struct glsl_type *type) -{ - if (glsl_type_is_struct_or_ifc(type) || - (glsl_type_is_array(type) && - (glsl_type_is_array(glsl_get_array_element(type)) || - glsl_type_is_struct_or_ifc(glsl_get_array_element(type))))) { - return false; - } else { - return true; - } -} - -const struct glsl_type * -glsl_get_explicit_type_for_size_align(const struct glsl_type *type, - glsl_type_size_align_func type_info, - unsigned *size, unsigned *align) -{ - return type->get_explicit_type_for_size_align(type_info, size, align); -} - -const struct glsl_type * -glsl_type_wrap_in_arrays(const struct glsl_type *type, - const struct glsl_type *arrays) -{ - if (!glsl_type_is_array(arrays)) - return type; - - const glsl_type *elem_type = - glsl_type_wrap_in_arrays(type, glsl_get_array_element(arrays)); - return glsl_array_type(elem_type, glsl_get_length(arrays), - glsl_get_explicit_stride(arrays)); -} - -const struct glsl_type * -glsl_type_replace_vec3_with_vec4(const struct glsl_type *type) -{ - return type->replace_vec3_with_vec4(); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_types.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_types.h deleted file mode 100644 index 4bc209b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/nir_types.h +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright © 2014 Connor Abbott - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Connor Abbott (cwabbott0@gmail.com) - * - */ - -#ifndef NIR_TYPES_H -#define NIR_TYPES_H - -#include -#include - -/* C wrapper around compiler/glsl_types.h */ - -#include "glsl_types.h" - -#ifdef __cplusplus -extern "C" { -#else -struct glsl_type; -#endif - -const char *glsl_get_type_name(const struct glsl_type *type); - -const struct glsl_type *glsl_get_struct_field(const struct glsl_type *type, - unsigned index); - -int glsl_get_struct_field_offset(const struct glsl_type *type, - unsigned index); - -const struct glsl_struct_field * -glsl_get_struct_field_data(const struct glsl_type *type, unsigned index); - -enum glsl_interface_packing -glsl_get_internal_ifc_packing(const struct glsl_type *type, - bool std430_supported); -enum glsl_interface_packing -glsl_get_ifc_packing(const struct glsl_type *type); - -unsigned glsl_get_std140_base_alignment(const struct glsl_type *type, - bool row_major); -unsigned glsl_get_std140_size(const struct glsl_type *type, bool row_major); -unsigned glsl_get_std430_base_alignment(const struct glsl_type *type, - bool row_major); -unsigned glsl_get_std430_size(const struct glsl_type *type, bool row_major); -unsigned glsl_get_explicit_stride(const struct glsl_type *type); -int glsl_array_size(const struct glsl_type *type); -const struct glsl_type *glsl_get_array_element(const struct glsl_type *type); -const struct glsl_type *glsl_without_array(const struct glsl_type *type); -const struct glsl_type *glsl_without_array_or_matrix(const struct glsl_type *type); -const struct glsl_type *glsl_get_bare_type(const struct glsl_type *type); - -const struct glsl_type *glsl_get_column_type(const struct glsl_type *type); - -const struct glsl_type * -glsl_get_function_return_type(const struct glsl_type *type); - -const struct glsl_function_param * -glsl_get_function_param(const struct glsl_type *type, unsigned index); - -const struct glsl_type * -glsl_texture_type_to_sampler(const struct glsl_type *type, bool is_shadow); -const struct glsl_type * -glsl_sampler_type_to_texture(const struct glsl_type *type); - -enum glsl_base_type glsl_get_base_type(const struct glsl_type *type); - -unsigned glsl_get_vector_elements(const struct glsl_type *type); - -unsigned glsl_get_components(const struct glsl_type *type); - -unsigned glsl_get_matrix_columns(const struct glsl_type *type); - -unsigned glsl_get_length(const struct glsl_type *type); - -unsigned glsl_get_aoa_size(const struct glsl_type *type); - -unsigned glsl_count_vec4_slots(const struct glsl_type *type, - bool is_gl_vertex_input, bool is_bindless); -unsigned glsl_count_dword_slots(const struct glsl_type *type, bool is_bindless); -unsigned glsl_count_attribute_slots(const struct glsl_type *type, - bool is_gl_vertex_input); -unsigned glsl_get_component_slots(const struct glsl_type *type); -unsigned glsl_get_component_slots_aligned(const struct glsl_type *type, - unsigned offset); -unsigned glsl_varying_count(const struct glsl_type *type); - -const char *glsl_get_struct_elem_name(const struct glsl_type *type, - unsigned index); - -enum glsl_sampler_dim glsl_get_sampler_dim(const struct glsl_type *type); -enum glsl_base_type glsl_get_sampler_result_type(const struct glsl_type *type); -unsigned glsl_get_sampler_target(const struct glsl_type *type); -int glsl_get_sampler_coordinate_components(const struct glsl_type *type); - -unsigned glsl_get_struct_location_offset(const struct glsl_type *type, - unsigned length); - -unsigned glsl_atomic_size(const struct glsl_type *type); - -int glsl_get_cl_size(const struct glsl_type *type); - -int glsl_get_cl_alignment(const struct glsl_type *type); - -void glsl_get_cl_type_size_align(const struct glsl_type *type, - unsigned *size, unsigned *align); - -unsigned glsl_get_explicit_size(const struct glsl_type *type, bool align_to_stride); -unsigned glsl_get_explicit_alignment(const struct glsl_type *type); - -static inline unsigned -glsl_get_bit_size(const struct glsl_type *type) -{ - return glsl_base_type_get_bit_size(glsl_get_base_type(type)); -} - -bool glsl_type_is_packed(const struct glsl_type *type); -bool glsl_type_is_16bit(const struct glsl_type *type); -bool glsl_type_is_32bit(const struct glsl_type *type); -bool glsl_type_is_64bit(const struct glsl_type *type); -bool glsl_type_is_void(const struct glsl_type *type); -bool glsl_type_is_error(const struct glsl_type *type); -bool glsl_type_is_vector(const struct glsl_type *type); -bool glsl_type_is_scalar(const struct glsl_type *type); -bool glsl_type_is_vector_or_scalar(const struct glsl_type *type); -bool glsl_type_is_matrix(const struct glsl_type *type); -bool glsl_matrix_type_is_row_major(const struct glsl_type *type); -bool glsl_type_is_array(const struct glsl_type *type); -bool glsl_type_is_unsized_array(const struct glsl_type *type); -bool glsl_type_is_array_of_arrays(const struct glsl_type *type); -bool glsl_type_is_array_or_matrix(const struct glsl_type *type); -bool glsl_type_is_struct(const struct glsl_type *type); -bool glsl_type_is_interface(const struct glsl_type *type); -bool glsl_type_is_struct_or_ifc(const struct glsl_type *type); -bool glsl_type_is_sampler(const struct glsl_type *type); -bool glsl_type_is_bare_sampler(const struct glsl_type *type); -bool glsl_type_is_texture(const struct glsl_type *type); -bool glsl_type_is_image(const struct glsl_type *type); -bool glsl_type_is_dual_slot(const struct glsl_type *type); -bool glsl_type_is_numeric(const struct glsl_type *type); -bool glsl_type_is_boolean(const struct glsl_type *type); -bool glsl_type_is_integer(const struct glsl_type *type); -bool glsl_type_contains_64bit(const struct glsl_type *type); -bool glsl_type_contains_image(const struct glsl_type *type); -bool glsl_sampler_type_is_shadow(const struct glsl_type *type); -bool glsl_sampler_type_is_array(const struct glsl_type *type); -bool glsl_struct_type_is_packed(const struct glsl_type *type); -bool glsl_contains_atomic(const struct glsl_type *type); -bool glsl_contains_double(const struct glsl_type *type); -bool glsl_contains_integer(const struct glsl_type *type); -bool glsl_contains_opaque(const struct glsl_type *type); -bool glsl_record_compare(const struct glsl_type *a, const struct glsl_type *b, - bool match_name, bool match_locations, - bool match_precision); - -const struct glsl_type *glsl_void_type(void); -const struct glsl_type *glsl_float_type(void); -const struct glsl_type *glsl_float16_t_type(void); -const struct glsl_type *glsl_double_type(void); -const struct glsl_type *glsl_floatN_t_type(unsigned bit_size); -const struct glsl_type *glsl_vec_type(unsigned n); -const struct glsl_type *glsl_dvec_type(unsigned n); -const struct glsl_type *glsl_vec4_type(void); -const struct glsl_type *glsl_uvec4_type(void); -const struct glsl_type *glsl_ivec4_type(void); -const struct glsl_type *glsl_int_type(void); -const struct glsl_type *glsl_uint_type(void); -const struct glsl_type *glsl_int64_t_type(void); -const struct glsl_type *glsl_uint64_t_type(void); -const struct glsl_type *glsl_int16_t_type(void); -const struct glsl_type *glsl_uint16_t_type(void); -const struct glsl_type *glsl_int8_t_type(void); -const struct glsl_type *glsl_uint8_t_type(void); -const struct glsl_type *glsl_intN_t_type(unsigned bit_size); -const struct glsl_type *glsl_uintN_t_type(unsigned bit_size); -const struct glsl_type *glsl_bool_type(void); - -const struct glsl_type *glsl_scalar_type(enum glsl_base_type base_type); -const struct glsl_type *glsl_vector_type(enum glsl_base_type base_type, - unsigned components); -const struct glsl_type * glsl_replace_vector_type(const struct glsl_type *t, - unsigned components); -const struct glsl_type *glsl_matrix_type(enum glsl_base_type base_type, - unsigned rows, unsigned columns); -const struct glsl_type *glsl_explicit_matrix_type(const struct glsl_type *mat, - unsigned stride, - bool row_major); - -const struct glsl_type *glsl_array_type(const struct glsl_type *base, - unsigned elements, - unsigned explicit_stride); - -const struct glsl_type *glsl_struct_type(const struct glsl_struct_field *fields, - unsigned num_fields, const char *name, - bool packed); -const struct glsl_type *glsl_interface_type(const struct glsl_struct_field *fields, - unsigned num_fields, - enum glsl_interface_packing packing, - bool row_major, - const char *block_name); -const struct glsl_type *glsl_sampler_type(enum glsl_sampler_dim dim, - bool is_shadow, bool is_array, - enum glsl_base_type base_type); -const struct glsl_type *glsl_bare_sampler_type(); -const struct glsl_type *glsl_bare_shadow_sampler_type(); -const struct glsl_type *glsl_texture_type(enum glsl_sampler_dim dim, - bool is_array, - enum glsl_base_type base_type); -const struct glsl_type *glsl_image_type(enum glsl_sampler_dim dim, - bool is_array, - enum glsl_base_type base_type); -const struct glsl_type * glsl_function_type(const struct glsl_type *return_type, - const struct glsl_function_param *params, - unsigned num_params); - -const struct glsl_type *glsl_transposed_type(const struct glsl_type *type); - -const struct glsl_type *glsl_channel_type(const struct glsl_type *type); - -const struct glsl_type *glsl_float16_type(const struct glsl_type *type); -const struct glsl_type *glsl_int16_type(const struct glsl_type *type); -const struct glsl_type *glsl_uint16_type(const struct glsl_type *type); -const struct glsl_type *glsl_type_to_16bit(const struct glsl_type *old_type); - -void glsl_get_natural_size_align_bytes(const struct glsl_type *type, - unsigned *size, unsigned *align); -void glsl_get_vec4_size_align_bytes(const struct glsl_type *type, - unsigned *size, unsigned *align); - -const struct glsl_type *glsl_atomic_uint_type(void); - -const struct glsl_type *glsl_get_explicit_type_for_size_align(const struct glsl_type *type, - glsl_type_size_align_func type_info, - unsigned *size, unsigned *align); - -const struct glsl_type *glsl_type_wrap_in_arrays(const struct glsl_type *type, - const struct glsl_type *arrays); - -const struct glsl_type *glsl_type_replace_vec3_with_vec4(const struct glsl_type *type); - -unsigned glsl_type_get_sampler_count(const struct glsl_type *type); -unsigned glsl_type_get_texture_count(const struct glsl_type *type); -unsigned glsl_type_get_image_count(const struct glsl_type *type); - -int glsl_get_field_index(const struct glsl_type *type, const char *name); - -bool glsl_type_is_leaf(const struct glsl_type *type); - -#ifdef __cplusplus -} -#endif - -#endif /* NIR_TYPES_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/shader_enums.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/shader_enums.c deleted file mode 100644 index 7c513f1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/shader_enums.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright © 2015 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Rob Clark - */ - -#include "shader_enums.h" -#include "../util/macros.h" -#include "../mesa/main/config.h" - -#define ENUM(x) [x] = #x -#define NAME(val) ((((val) < ARRAY_SIZE(names)) && names[(val)]) ? names[(val)] : "UNKNOWN") - -const char * -gl_shader_stage_name(gl_shader_stage stage) -{ - static const char *names[] = { - ENUM(MESA_SHADER_VERTEX), - ENUM(MESA_SHADER_TESS_CTRL), - ENUM(MESA_SHADER_TESS_EVAL), - ENUM(MESA_SHADER_GEOMETRY), - ENUM(MESA_SHADER_FRAGMENT), - ENUM(MESA_SHADER_COMPUTE), - ENUM(MESA_SHADER_TASK), - ENUM(MESA_SHADER_MESH), - ENUM(MESA_SHADER_RAYGEN), - ENUM(MESA_SHADER_ANY_HIT), - ENUM(MESA_SHADER_CLOSEST_HIT), - ENUM(MESA_SHADER_MISS), - ENUM(MESA_SHADER_INTERSECTION), - ENUM(MESA_SHADER_CALLABLE), - ENUM(MESA_SHADER_KERNEL), - }; - STATIC_ASSERT(ARRAY_SIZE(names) == MESA_ALL_SHADER_STAGES); - return NAME(stage); -} - -/** - * Translate a gl_shader_stage to a short shader stage name for debug - * printouts and error messages. - */ -const char * -_mesa_shader_stage_to_string(unsigned stage) -{ - switch (stage) { - case MESA_SHADER_VERTEX: return "vertex"; - case MESA_SHADER_FRAGMENT: return "fragment"; - case MESA_SHADER_GEOMETRY: return "geometry"; - case MESA_SHADER_COMPUTE: return "compute"; - case MESA_SHADER_KERNEL: return "kernel"; - case MESA_SHADER_TESS_CTRL: return "tessellation control"; - case MESA_SHADER_TESS_EVAL: return "tessellation evaluation"; - case MESA_SHADER_TASK: return "task"; - case MESA_SHADER_MESH: return "mesh"; - case MESA_SHADER_RAYGEN: return "raygen"; - case MESA_SHADER_ANY_HIT: return "any hit"; - case MESA_SHADER_CLOSEST_HIT: return "closest hit"; - case MESA_SHADER_MISS: return "miss"; - case MESA_SHADER_INTERSECTION: return "intersection"; - case MESA_SHADER_CALLABLE: return "callable"; - } - - unreachable("Unknown shader stage."); -} - -/** - * Translate a gl_shader_stage to a shader stage abbreviation (VS, GS, FS) - * for debug printouts and error messages. - */ -const char * -_mesa_shader_stage_to_abbrev(unsigned stage) -{ - switch (stage) { - case MESA_SHADER_VERTEX: return "VS"; - case MESA_SHADER_FRAGMENT: return "FS"; - case MESA_SHADER_GEOMETRY: return "GS"; - case MESA_SHADER_COMPUTE: return "CS"; - case MESA_SHADER_KERNEL: return "CL"; - case MESA_SHADER_TESS_CTRL: return "TCS"; - case MESA_SHADER_TESS_EVAL: return "TES"; - case MESA_SHADER_TASK: return "TASK"; - case MESA_SHADER_MESH: return "MESH"; - case MESA_SHADER_RAYGEN: return "RGEN"; - case MESA_SHADER_ANY_HIT: return "RAHIT"; - case MESA_SHADER_CLOSEST_HIT: return "RCHIT"; - case MESA_SHADER_MISS: return "RMISS"; - case MESA_SHADER_INTERSECTION: return "RINT"; - case MESA_SHADER_CALLABLE: return "RCALL"; - } - - unreachable("Unknown shader stage."); -} - -const char * -gl_vert_attrib_name(gl_vert_attrib attrib) -{ - static const char *names[] = { - ENUM(VERT_ATTRIB_POS), - ENUM(VERT_ATTRIB_NORMAL), - ENUM(VERT_ATTRIB_COLOR0), - ENUM(VERT_ATTRIB_COLOR1), - ENUM(VERT_ATTRIB_FOG), - ENUM(VERT_ATTRIB_COLOR_INDEX), - ENUM(VERT_ATTRIB_TEX0), - ENUM(VERT_ATTRIB_TEX1), - ENUM(VERT_ATTRIB_TEX2), - ENUM(VERT_ATTRIB_TEX3), - ENUM(VERT_ATTRIB_TEX4), - ENUM(VERT_ATTRIB_TEX5), - ENUM(VERT_ATTRIB_TEX6), - ENUM(VERT_ATTRIB_TEX7), - ENUM(VERT_ATTRIB_POINT_SIZE), - ENUM(VERT_ATTRIB_GENERIC0), - ENUM(VERT_ATTRIB_GENERIC1), - ENUM(VERT_ATTRIB_GENERIC2), - ENUM(VERT_ATTRIB_GENERIC3), - ENUM(VERT_ATTRIB_GENERIC4), - ENUM(VERT_ATTRIB_GENERIC5), - ENUM(VERT_ATTRIB_GENERIC6), - ENUM(VERT_ATTRIB_GENERIC7), - ENUM(VERT_ATTRIB_GENERIC8), - ENUM(VERT_ATTRIB_GENERIC9), - ENUM(VERT_ATTRIB_GENERIC10), - ENUM(VERT_ATTRIB_GENERIC11), - ENUM(VERT_ATTRIB_GENERIC12), - ENUM(VERT_ATTRIB_GENERIC13), - ENUM(VERT_ATTRIB_GENERIC14), - ENUM(VERT_ATTRIB_GENERIC15), - ENUM(VERT_ATTRIB_EDGEFLAG), - }; - STATIC_ASSERT(ARRAY_SIZE(names) == VERT_ATTRIB_MAX); - return NAME(attrib); -} - -const char * -gl_varying_slot_name_for_stage(gl_varying_slot slot, gl_shader_stage stage) -{ - if (stage != MESA_SHADER_FRAGMENT && slot == VARYING_SLOT_PRIMITIVE_SHADING_RATE) - return "VARYING_SLOT_PRIMITIVE_SHADING_RATE"; - - switch (stage) { - case MESA_SHADER_MESH: - switch (slot) { - case VARYING_SLOT_PRIMITIVE_COUNT: return "VARYING_SLOT_PRIMITIVE_COUNT"; - case VARYING_SLOT_PRIMITIVE_INDICES: return "VARYING_SLOT_PRIMITIVE_INDICES"; - case VARYING_SLOT_CULL_PRIMITIVE: return "VARYING_SLOT_CULL_PRIMITIVE"; - default: - /* Not an overlapping value. */ - break; - } - break; - - case MESA_SHADER_TASK: - switch (slot) { - case VARYING_SLOT_TASK_COUNT: return "VARYING_SLOT_TASK_COUNT"; - default: - /* Not an overlapping value. */ - break; - } - break; - - default: - break; - } - - static const char *names[] = { - ENUM(VARYING_SLOT_POS), - ENUM(VARYING_SLOT_COL0), - ENUM(VARYING_SLOT_COL1), - ENUM(VARYING_SLOT_FOGC), - ENUM(VARYING_SLOT_TEX0), - ENUM(VARYING_SLOT_TEX1), - ENUM(VARYING_SLOT_TEX2), - ENUM(VARYING_SLOT_TEX3), - ENUM(VARYING_SLOT_TEX4), - ENUM(VARYING_SLOT_TEX5), - ENUM(VARYING_SLOT_TEX6), - ENUM(VARYING_SLOT_TEX7), - ENUM(VARYING_SLOT_PSIZ), - ENUM(VARYING_SLOT_BFC0), - ENUM(VARYING_SLOT_BFC1), - ENUM(VARYING_SLOT_EDGE), - ENUM(VARYING_SLOT_CLIP_VERTEX), - ENUM(VARYING_SLOT_CLIP_DIST0), - ENUM(VARYING_SLOT_CLIP_DIST1), - ENUM(VARYING_SLOT_CULL_DIST0), - ENUM(VARYING_SLOT_CULL_DIST1), - ENUM(VARYING_SLOT_PRIMITIVE_ID), - ENUM(VARYING_SLOT_LAYER), - ENUM(VARYING_SLOT_VIEWPORT), - ENUM(VARYING_SLOT_FACE), - ENUM(VARYING_SLOT_PNTC), - ENUM(VARYING_SLOT_TESS_LEVEL_OUTER), - ENUM(VARYING_SLOT_TESS_LEVEL_INNER), - ENUM(VARYING_SLOT_BOUNDING_BOX0), - ENUM(VARYING_SLOT_BOUNDING_BOX1), - ENUM(VARYING_SLOT_VIEW_INDEX), - ENUM(VARYING_SLOT_VIEWPORT_MASK), - ENUM(VARYING_SLOT_VAR0), - ENUM(VARYING_SLOT_VAR1), - ENUM(VARYING_SLOT_VAR2), - ENUM(VARYING_SLOT_VAR3), - ENUM(VARYING_SLOT_VAR4), - ENUM(VARYING_SLOT_VAR5), - ENUM(VARYING_SLOT_VAR6), - ENUM(VARYING_SLOT_VAR7), - ENUM(VARYING_SLOT_VAR8), - ENUM(VARYING_SLOT_VAR9), - ENUM(VARYING_SLOT_VAR10), - ENUM(VARYING_SLOT_VAR11), - ENUM(VARYING_SLOT_VAR12), - ENUM(VARYING_SLOT_VAR13), - ENUM(VARYING_SLOT_VAR14), - ENUM(VARYING_SLOT_VAR15), - ENUM(VARYING_SLOT_VAR16), - ENUM(VARYING_SLOT_VAR17), - ENUM(VARYING_SLOT_VAR18), - ENUM(VARYING_SLOT_VAR19), - ENUM(VARYING_SLOT_VAR20), - ENUM(VARYING_SLOT_VAR21), - ENUM(VARYING_SLOT_VAR22), - ENUM(VARYING_SLOT_VAR23), - ENUM(VARYING_SLOT_VAR24), - ENUM(VARYING_SLOT_VAR25), - ENUM(VARYING_SLOT_VAR26), - ENUM(VARYING_SLOT_VAR27), - ENUM(VARYING_SLOT_VAR28), - ENUM(VARYING_SLOT_VAR29), - ENUM(VARYING_SLOT_VAR30), - ENUM(VARYING_SLOT_VAR31), - }; - STATIC_ASSERT(ARRAY_SIZE(names) == VARYING_SLOT_MAX); - return NAME(slot); -} - -const char * -gl_system_value_name(gl_system_value sysval) -{ - static const char *names[] = { - ENUM(SYSTEM_VALUE_SUBGROUP_SIZE), - ENUM(SYSTEM_VALUE_SUBGROUP_INVOCATION), - ENUM(SYSTEM_VALUE_SUBGROUP_EQ_MASK), - ENUM(SYSTEM_VALUE_SUBGROUP_GE_MASK), - ENUM(SYSTEM_VALUE_SUBGROUP_GT_MASK), - ENUM(SYSTEM_VALUE_SUBGROUP_LE_MASK), - ENUM(SYSTEM_VALUE_SUBGROUP_LT_MASK), - ENUM(SYSTEM_VALUE_NUM_SUBGROUPS), - ENUM(SYSTEM_VALUE_SUBGROUP_ID), - ENUM(SYSTEM_VALUE_VERTEX_ID), - ENUM(SYSTEM_VALUE_INSTANCE_ID), - ENUM(SYSTEM_VALUE_INSTANCE_INDEX), - ENUM(SYSTEM_VALUE_VERTEX_ID_ZERO_BASE), - ENUM(SYSTEM_VALUE_BASE_VERTEX), - ENUM(SYSTEM_VALUE_FIRST_VERTEX), - ENUM(SYSTEM_VALUE_IS_INDEXED_DRAW), - ENUM(SYSTEM_VALUE_BASE_INSTANCE), - ENUM(SYSTEM_VALUE_DRAW_ID), - ENUM(SYSTEM_VALUE_INVOCATION_ID), - ENUM(SYSTEM_VALUE_FRAG_COORD), - ENUM(SYSTEM_VALUE_POINT_COORD), - ENUM(SYSTEM_VALUE_LINE_COORD), - ENUM(SYSTEM_VALUE_FRONT_FACE), - ENUM(SYSTEM_VALUE_SAMPLE_ID), - ENUM(SYSTEM_VALUE_SAMPLE_POS), - ENUM(SYSTEM_VALUE_SAMPLE_MASK_IN), - ENUM(SYSTEM_VALUE_HELPER_INVOCATION), - ENUM(SYSTEM_VALUE_COLOR0), - ENUM(SYSTEM_VALUE_COLOR1), - ENUM(SYSTEM_VALUE_TESS_COORD), - ENUM(SYSTEM_VALUE_VERTICES_IN), - ENUM(SYSTEM_VALUE_PRIMITIVE_ID), - ENUM(SYSTEM_VALUE_TESS_LEVEL_OUTER), - ENUM(SYSTEM_VALUE_TESS_LEVEL_INNER), - ENUM(SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT), - ENUM(SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT), - ENUM(SYSTEM_VALUE_LOCAL_INVOCATION_ID), - ENUM(SYSTEM_VALUE_LOCAL_INVOCATION_INDEX), - ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID), - ENUM(SYSTEM_VALUE_BASE_GLOBAL_INVOCATION_ID), - ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX), - ENUM(SYSTEM_VALUE_WORKGROUP_ID), - ENUM(SYSTEM_VALUE_NUM_WORKGROUPS), - ENUM(SYSTEM_VALUE_WORKGROUP_SIZE), - ENUM(SYSTEM_VALUE_GLOBAL_GROUP_SIZE), - ENUM(SYSTEM_VALUE_USER_DATA_AMD), - ENUM(SYSTEM_VALUE_WORK_DIM), - ENUM(SYSTEM_VALUE_DEVICE_INDEX), - ENUM(SYSTEM_VALUE_VIEW_INDEX), - ENUM(SYSTEM_VALUE_VERTEX_CNT), - ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL), - ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE), - ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID), - ENUM(SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTER_RHW), - ENUM(SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL), - ENUM(SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID), - ENUM(SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE), - ENUM(SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL), - ENUM(SYSTEM_VALUE_RAY_LAUNCH_ID), - ENUM(SYSTEM_VALUE_RAY_LAUNCH_SIZE), - ENUM(SYSTEM_VALUE_RAY_LAUNCH_SIZE_ADDR_AMD), - ENUM(SYSTEM_VALUE_RAY_WORLD_ORIGIN), - ENUM(SYSTEM_VALUE_RAY_WORLD_DIRECTION), - ENUM(SYSTEM_VALUE_RAY_OBJECT_ORIGIN), - ENUM(SYSTEM_VALUE_RAY_OBJECT_DIRECTION), - ENUM(SYSTEM_VALUE_RAY_T_MIN), - ENUM(SYSTEM_VALUE_RAY_T_MAX), - ENUM(SYSTEM_VALUE_RAY_OBJECT_TO_WORLD), - ENUM(SYSTEM_VALUE_RAY_WORLD_TO_OBJECT), - ENUM(SYSTEM_VALUE_RAY_HIT_KIND), - ENUM(SYSTEM_VALUE_RAY_FLAGS), - ENUM(SYSTEM_VALUE_RAY_GEOMETRY_INDEX), - ENUM(SYSTEM_VALUE_CULL_MASK), - ENUM(SYSTEM_VALUE_MESH_VIEW_COUNT), - ENUM(SYSTEM_VALUE_MESH_VIEW_INDICES), - ENUM(SYSTEM_VALUE_GS_HEADER_IR3), - ENUM(SYSTEM_VALUE_TCS_HEADER_IR3), - ENUM(SYSTEM_VALUE_REL_PATCH_ID_IR3), - ENUM(SYSTEM_VALUE_FRAG_SHADING_RATE), - ENUM(SYSTEM_VALUE_FULLY_COVERED), - ENUM(SYSTEM_VALUE_FRAG_SIZE), - ENUM(SYSTEM_VALUE_FRAG_INVOCATION_COUNT), - }; - STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX); - return NAME(sysval); -} - -const char * -glsl_interp_mode_name(enum glsl_interp_mode qual) -{ - static const char *names[] = { - ENUM(INTERP_MODE_NONE), - ENUM(INTERP_MODE_SMOOTH), - ENUM(INTERP_MODE_FLAT), - ENUM(INTERP_MODE_NOPERSPECTIVE), - ENUM(INTERP_MODE_EXPLICIT), - ENUM(INTERP_MODE_COLOR), - }; - STATIC_ASSERT(ARRAY_SIZE(names) == INTERP_MODE_COUNT); - return NAME(qual); -} - -const char * -gl_frag_result_name(gl_frag_result result) -{ - static const char *names[] = { - ENUM(FRAG_RESULT_DEPTH), - ENUM(FRAG_RESULT_STENCIL), - ENUM(FRAG_RESULT_COLOR), - ENUM(FRAG_RESULT_SAMPLE_MASK), - ENUM(FRAG_RESULT_DATA0), - ENUM(FRAG_RESULT_DATA1), - ENUM(FRAG_RESULT_DATA2), - ENUM(FRAG_RESULT_DATA3), - ENUM(FRAG_RESULT_DATA4), - ENUM(FRAG_RESULT_DATA5), - ENUM(FRAG_RESULT_DATA6), - ENUM(FRAG_RESULT_DATA7), - }; - STATIC_ASSERT(ARRAY_SIZE(names) == FRAG_RESULT_MAX); - return NAME(result); -} - -unsigned -num_mesh_vertices_per_primitive(unsigned prim) -{ - switch (prim) { - case SHADER_PRIM_POINTS: - return 1; - case SHADER_PRIM_LINES: - return 2; - case SHADER_PRIM_TRIANGLES: - return 3; - default: - unreachable("invalid mesh shader primitive type"); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/shader_enums.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/shader_enums.h deleted file mode 100644 index 5344130..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/compiler/shader_enums.h +++ /dev/null @@ -1,1324 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef SHADER_ENUMS_H -#define SHADER_ENUMS_H - -#include "../util/macros.h" - -#include - -/* Project-wide (GL and Vulkan) maximum. */ -#define MAX_DRAW_BUFFERS 8 - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Shader stages. - * - * The order must match how shaders are ordered in the pipeline. - * The GLSL linker assumes that if i is the maximum number of - * invocations in a sub-group. The maximum - * supported in this extension is 64." - * - * The spec defines this as a uniform. However, it's highly unlikely that - * implementations actually treat it as a uniform (which is loaded from a - * constant buffer). Most likely, this is an implementation-wide constant, - * or perhaps something that depends on the shader stage. - */ - SYSTEM_VALUE_SUBGROUP_SIZE, - - /** - * From the GL_ARB_shader_ballot spec: - * - * "The variable holds the index of the - * invocation within sub-group. This variable is in the range 0 to - * -1, where is the total - * number of invocations in a sub-group." - */ - SYSTEM_VALUE_SUBGROUP_INVOCATION, - - /** - * From the GL_ARB_shader_ballot spec: - * - * "The variables provide a bitmask for all - * invocations, with one bit per invocation starting with the least - * significant bit, according to the following table, - * - * variable equation for bit values - * -------------------- ------------------------------------ - * gl_SubGroupEqMaskARB bit index == gl_SubGroupInvocationARB - * gl_SubGroupGeMaskARB bit index >= gl_SubGroupInvocationARB - * gl_SubGroupGtMaskARB bit index > gl_SubGroupInvocationARB - * gl_SubGroupLeMaskARB bit index <= gl_SubGroupInvocationARB - * gl_SubGroupLtMaskARB bit index < gl_SubGroupInvocationARB - */ - SYSTEM_VALUE_SUBGROUP_EQ_MASK, - SYSTEM_VALUE_SUBGROUP_GE_MASK, - SYSTEM_VALUE_SUBGROUP_GT_MASK, - SYSTEM_VALUE_SUBGROUP_LE_MASK, - SYSTEM_VALUE_SUBGROUP_LT_MASK, - /*@}*/ - - /** - * Builtin variables added by VK_KHR_subgroups - */ - /*@{*/ - SYSTEM_VALUE_NUM_SUBGROUPS, - SYSTEM_VALUE_SUBGROUP_ID, - /*@}*/ - - /*@}*/ - - /** - * \name Vertex shader system values - */ - /*@{*/ - /** - * OpenGL-style vertex ID. - * - * Section 2.11.7 (Shader Execution), subsection Shader Inputs, of the - * OpenGL 3.3 core profile spec says: - * - * "gl_VertexID holds the integer index i implicitly passed by - * DrawArrays or one of the other drawing commands defined in section - * 2.8.3." - * - * Section 2.8.3 (Drawing Commands) of the same spec says: - * - * "The commands....are equivalent to the commands with the same base - * name (without the BaseVertex suffix), except that the ith element - * transferred by the corresponding draw call will be taken from - * element indices[i] + basevertex of each enabled array." - * - * Additionally, the overview in the GL_ARB_shader_draw_parameters spec - * says: - * - * "In unextended GL, vertex shaders have inputs named gl_VertexID and - * gl_InstanceID, which contain, respectively the index of the vertex - * and instance. The value of gl_VertexID is the implicitly passed - * index of the vertex being processed, which includes the value of - * baseVertex, for those commands that accept it." - * - * gl_VertexID gets basevertex added in. This differs from DirectX where - * SV_VertexID does \b not get basevertex added in. - * - * \note - * If all system values are available, \c SYSTEM_VALUE_VERTEX_ID will be - * equal to \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus - * \c SYSTEM_VALUE_BASE_VERTEX. - * - * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_BASE_VERTEX - */ - SYSTEM_VALUE_VERTEX_ID, - - /** - * Instanced ID as supplied to gl_InstanceID - * - * Values assigned to gl_InstanceID always begin with zero, regardless of - * the value of baseinstance. - * - * Section 11.1.3.9 (Shader Inputs) of the OpenGL 4.4 core profile spec - * says: - * - * "gl_InstanceID holds the integer instance number of the current - * primitive in an instanced draw call (see section 10.5)." - * - * Through a big chain of pseudocode, section 10.5 describes that - * baseinstance is not counted by gl_InstanceID. In that section, notice - * - * "If an enabled vertex attribute array is instanced (it has a - * non-zero divisor as specified by VertexAttribDivisor), the element - * index that is transferred to the GL, for all vertices, is given by - * - * floor(instance/divisor) + baseinstance - * - * If an array corresponding to an attribute required by a vertex - * shader is not enabled, then the corresponding element is taken from - * the current attribute state (see section 10.2)." - * - * Note that baseinstance is \b not included in the value of instance. - */ - SYSTEM_VALUE_INSTANCE_ID, - - /** - * Vulkan InstanceIndex. - * - * InstanceIndex = gl_InstanceID + gl_BaseInstance - */ - SYSTEM_VALUE_INSTANCE_INDEX, - - /** - * DirectX-style vertex ID. - * - * Unlike \c SYSTEM_VALUE_VERTEX_ID, this system value does \b not include - * the value of basevertex. - * - * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_BASE_VERTEX - */ - SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, - - /** - * Value of \c basevertex passed to \c glDrawElementsBaseVertex and similar - * functions. - * - * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE - */ - SYSTEM_VALUE_BASE_VERTEX, - - /** - * Depending on the type of the draw call (indexed or non-indexed), - * is the value of \c basevertex passed to \c glDrawElementsBaseVertex and - * similar, or is the value of \c first passed to \c glDrawArrays and - * similar. - * - * \note - * It can be used to calculate the \c SYSTEM_VALUE_VERTEX_ID as - * \c SYSTEM_VALUE_VERTEX_ID_ZERO_BASE plus \c SYSTEM_VALUE_FIRST_VERTEX. - * - * \sa SYSTEM_VALUE_VERTEX_ID_ZERO_BASE, SYSTEM_VALUE_VERTEX_ID - */ - SYSTEM_VALUE_FIRST_VERTEX, - - /** - * If the Draw command used to start the rendering was an indexed draw - * or not (~0/0). Useful to calculate \c SYSTEM_VALUE_BASE_VERTEX as - * \c SYSTEM_VALUE_IS_INDEXED_DRAW & \c SYSTEM_VALUE_FIRST_VERTEX. - */ - SYSTEM_VALUE_IS_INDEXED_DRAW, - - /** - * Value of \c baseinstance passed to instanced draw entry points - * - * \sa SYSTEM_VALUE_INSTANCE_ID - */ - SYSTEM_VALUE_BASE_INSTANCE, - - /** - * From _ARB_shader_draw_parameters: - * - * "Additionally, this extension adds a further built-in variable, - * gl_DrawID to the shading language. This variable contains the index - * of the draw currently being processed by a Multi* variant of a - * drawing command (such as MultiDrawElements or - * MultiDrawArraysIndirect)." - * - * If GL_ARB_multi_draw_indirect is not supported, this is always 0. - */ - SYSTEM_VALUE_DRAW_ID, - /*@}*/ - - /** - * \name Geometry shader system values - */ - /*@{*/ - SYSTEM_VALUE_INVOCATION_ID, /**< (Also in Tessellation Control shader) */ - /*@}*/ - - /** - * \name Fragment shader system values - */ - /*@{*/ - SYSTEM_VALUE_FRAG_COORD, - SYSTEM_VALUE_POINT_COORD, - SYSTEM_VALUE_LINE_COORD, /**< Coord along axis perpendicular to line */ - SYSTEM_VALUE_FRONT_FACE, - SYSTEM_VALUE_SAMPLE_ID, - SYSTEM_VALUE_SAMPLE_POS, - SYSTEM_VALUE_SAMPLE_POS_OR_CENTER, - SYSTEM_VALUE_SAMPLE_MASK_IN, - SYSTEM_VALUE_HELPER_INVOCATION, - SYSTEM_VALUE_COLOR0, - SYSTEM_VALUE_COLOR1, - /*@}*/ - - /** - * \name Tessellation Evaluation shader system values - */ - /*@{*/ - SYSTEM_VALUE_TESS_COORD, - SYSTEM_VALUE_VERTICES_IN, /**< Tessellation vertices in input patch */ - SYSTEM_VALUE_PRIMITIVE_ID, - SYSTEM_VALUE_TESS_LEVEL_OUTER, /**< TES input */ - SYSTEM_VALUE_TESS_LEVEL_INNER, /**< TES input */ - SYSTEM_VALUE_TESS_LEVEL_OUTER_DEFAULT, /**< TCS input for passthru TCS */ - SYSTEM_VALUE_TESS_LEVEL_INNER_DEFAULT, /**< TCS input for passthru TCS */ - /*@}*/ - - /** - * \name Compute shader system values - */ - /*@{*/ - SYSTEM_VALUE_LOCAL_INVOCATION_ID, - SYSTEM_VALUE_LOCAL_INVOCATION_INDEX, - SYSTEM_VALUE_GLOBAL_INVOCATION_ID, - SYSTEM_VALUE_BASE_GLOBAL_INVOCATION_ID, - SYSTEM_VALUE_GLOBAL_INVOCATION_INDEX, - SYSTEM_VALUE_WORKGROUP_ID, - SYSTEM_VALUE_WORKGROUP_INDEX, - SYSTEM_VALUE_NUM_WORKGROUPS, - SYSTEM_VALUE_WORKGROUP_SIZE, - SYSTEM_VALUE_GLOBAL_GROUP_SIZE, - SYSTEM_VALUE_WORK_DIM, - SYSTEM_VALUE_USER_DATA_AMD, - /*@}*/ - - /** Required for VK_KHR_device_group */ - SYSTEM_VALUE_DEVICE_INDEX, - - /** Required for VK_KHX_multiview */ - SYSTEM_VALUE_VIEW_INDEX, - - /** - * Driver internal vertex-count, used (for example) for drivers to - * calculate stride for stream-out outputs. Not externally visible. - */ - SYSTEM_VALUE_VERTEX_CNT, - - /** - * Required for AMD_shader_explicit_vertex_parameter and also used for - * varying-fetch instructions. - * - * The _SIZE value is "primitive size", used to scale i/j in primitive - * space to pixel space. - */ - SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL, - SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE, - SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID, - SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTER_RHW, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID, - SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE, - SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL, - - /** - * \name Ray tracing shader system values - */ - /*@{*/ - SYSTEM_VALUE_RAY_LAUNCH_ID, - SYSTEM_VALUE_RAY_LAUNCH_SIZE, - SYSTEM_VALUE_RAY_LAUNCH_SIZE_ADDR_AMD, - SYSTEM_VALUE_RAY_WORLD_ORIGIN, - SYSTEM_VALUE_RAY_WORLD_DIRECTION, - SYSTEM_VALUE_RAY_OBJECT_ORIGIN, - SYSTEM_VALUE_RAY_OBJECT_DIRECTION, - SYSTEM_VALUE_RAY_T_MIN, - SYSTEM_VALUE_RAY_T_MAX, - SYSTEM_VALUE_RAY_OBJECT_TO_WORLD, - SYSTEM_VALUE_RAY_WORLD_TO_OBJECT, - SYSTEM_VALUE_RAY_HIT_KIND, - SYSTEM_VALUE_RAY_FLAGS, - SYSTEM_VALUE_RAY_GEOMETRY_INDEX, - SYSTEM_VALUE_RAY_INSTANCE_CUSTOM_INDEX, - SYSTEM_VALUE_CULL_MASK, - /*@}*/ - - /** - * \name Task/Mesh shader system values - */ - /*@{*/ - SYSTEM_VALUE_MESH_VIEW_COUNT, - SYSTEM_VALUE_MESH_VIEW_INDICES, - /*@}*/ - - /** - * IR3 specific geometry shader and tesselation control shader system - * values that packs invocation id, thread id and vertex id. Having this - * as a nir level system value lets us do the unpacking in nir. - */ - SYSTEM_VALUE_GS_HEADER_IR3, - SYSTEM_VALUE_TCS_HEADER_IR3, - - /* IR3 specific system value that contains the patch id for the current - * subdraw. - */ - SYSTEM_VALUE_REL_PATCH_ID_IR3, - - /** - * Fragment shading rate used for KHR_fragment_shading_rate (Vulkan). - */ - SYSTEM_VALUE_FRAG_SHADING_RATE, - - /* - * Rasterized fragment is fully covered by the generating primitive - * (SPV_EXT_fragment_fully_covered). - */ - SYSTEM_VALUE_FULLY_COVERED, - - /* - * Fragment size and invocation count used for - * EXT_fragment_invocation_density (Vulkan). - */ - SYSTEM_VALUE_FRAG_SIZE, - SYSTEM_VALUE_FRAG_INVOCATION_COUNT, - - SYSTEM_VALUE_MAX /**< Number of values */ -} gl_system_value; - -const char *gl_system_value_name(gl_system_value sysval); - -/** - * The possible interpolation qualifiers that can be applied to a fragment - * shader input in GLSL. - * - * Note: INTERP_MODE_NONE must be 0 so that memsetting the - * ir_variable data structure to 0 causes the default behavior. - */ -enum glsl_interp_mode -{ - INTERP_MODE_NONE = 0, - INTERP_MODE_SMOOTH, - INTERP_MODE_FLAT, - INTERP_MODE_NOPERSPECTIVE, - INTERP_MODE_EXPLICIT, - INTERP_MODE_COLOR, /**< glShadeModel determines the interp mode */ - INTERP_MODE_COUNT /**< Number of interpolation qualifiers */ -}; - -enum glsl_interface_packing { - GLSL_INTERFACE_PACKING_STD140, - GLSL_INTERFACE_PACKING_SHARED, - GLSL_INTERFACE_PACKING_PACKED, - GLSL_INTERFACE_PACKING_STD430 -}; - -const char *glsl_interp_mode_name(enum glsl_interp_mode qual); - -/** - * Fragment program results - */ -typedef enum -{ - FRAG_RESULT_DEPTH = 0, - FRAG_RESULT_STENCIL = 1, - /* If a single color should be written to all render targets, this - * register is written. No FRAG_RESULT_DATAn will be written. - */ - FRAG_RESULT_COLOR = 2, - FRAG_RESULT_SAMPLE_MASK = 3, - - /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n] - * or ARB_fragment_program fragment.color[n]) color results. If - * any are written, FRAG_RESULT_COLOR will not be written. - * FRAG_RESULT_DATA1 and up are simply for the benefit of - * gl_frag_result_name() and not to be construed as an upper bound - */ - FRAG_RESULT_DATA0 = 4, - FRAG_RESULT_DATA1, - FRAG_RESULT_DATA2, - FRAG_RESULT_DATA3, - FRAG_RESULT_DATA4, - FRAG_RESULT_DATA5, - FRAG_RESULT_DATA6, - FRAG_RESULT_DATA7, -} gl_frag_result; - -const char *gl_frag_result_name(gl_frag_result result); - -#define FRAG_RESULT_MAX (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS) - -/** - * \brief Layout qualifiers for gl_FragDepth. - * - * Extension AMD_conservative_depth allows gl_FragDepth to be redeclared with - * a layout qualifier. - * - * \see enum ir_depth_layout - */ -enum gl_frag_depth_layout -{ - FRAG_DEPTH_LAYOUT_NONE, /**< No layout is specified. */ - FRAG_DEPTH_LAYOUT_ANY, - FRAG_DEPTH_LAYOUT_GREATER, - FRAG_DEPTH_LAYOUT_LESS, - FRAG_DEPTH_LAYOUT_UNCHANGED -}; - -/** - * \brief Layout qualifiers for AMD_shader_early_and_late_fragment_tests. - */ -enum gl_frag_stencil_layout -{ - FRAG_STENCIL_LAYOUT_NONE, /**< No layout is specified. */ - FRAG_STENCIL_LAYOUT_ANY, - FRAG_STENCIL_LAYOUT_GREATER, - FRAG_STENCIL_LAYOUT_LESS, - FRAG_STENCIL_LAYOUT_UNCHANGED -}; - -/** - * \brief Buffer access qualifiers - */ -enum gl_access_qualifier -{ - ACCESS_COHERENT = (1 << 0), - ACCESS_RESTRICT = (1 << 1), - ACCESS_VOLATILE = (1 << 2), - - /* The memory used by the access/variable is not read. */ - ACCESS_NON_READABLE = (1 << 3), - - /* The memory used by the access/variable is not written. */ - ACCESS_NON_WRITEABLE = (1 << 4), - - /** - * The access may use a non-uniform buffer or image index. - * - * This is not allowed in either OpenGL or OpenGL ES, or Vulkan unless - * VK_EXT_descriptor_indexing is supported and the appropriate capability is - * enabled. - * - * Some GL spec archaeology justifying this: - * - * Up through at least GLSL ES 3.20 and GLSL 4.50, "Opaque Types" says "When - * aggregated into arrays within a shader, opaque types can only be indexed - * with a dynamically uniform integral expression (see section 3.9.3) unless - * otherwise noted; otherwise, results are undefined." - * - * The original GL_AB_shader_image_load_store specification for desktop GL - * didn't have this restriction ("Images may be aggregated into arrays within - * a shader (using square brackets [ ]) and can be indexed with general - * integer expressions.") At the same time, - * GL_ARB_shader_storage_buffer_objects *did* have the uniform restriction - * ("A uniform or shader storage block array can only be indexed with a - * dynamically uniform integral expression, otherwise results are - * undefined"), just like ARB_gpu_shader5 did when it first introduced a - * non-constant indexing of an opaque type with samplers. So, we assume that - * this was an oversight in the original image_load_store spec, and was - * considered a correction in the merge to core. - */ - ACCESS_NON_UNIFORM = (1 << 5), - - /* This has the same semantics as NIR_INTRINSIC_CAN_REORDER, only to be - * used with loads. In other words, it means that the load can be - * arbitrarily reordered, or combined with other loads to the same address. - * It is implied by ACCESS_NON_WRITEABLE and a lack of ACCESS_VOLATILE. - */ - ACCESS_CAN_REORDER = (1 << 6), - - /** Use as little cache space as possible. */ - ACCESS_STREAM_CACHE_POLICY = (1 << 7), - - /** Execute instruction also in helpers. */ - ACCESS_INCLUDE_HELPERS = (1 << 8), - - /** - * Whether the address bits are swizzled by the hw. This practically means - * that loads can't be vectorized and must be exactly 32 bits on some chips. - * The swizzle amount is determined by the descriptor. - */ - ACCESS_IS_SWIZZLED_AMD = (1 << 9), - - /** - * Whether an AMD-specific buffer intrinsic uses a format conversion. - * - * If unset, the intrinsic will access raw memory without any conversion. - * - * If set, the memory opcode performs a format conversion according to - * the format determined by the descriptor (in a manner identical to image - * buffers and sampler buffers). - */ - ACCESS_USES_FORMAT_AMD = (1 << 10), - - /** - * Whether a multi sample image load intrinsic uses sample index extracted - * from fragment mask buffer. - */ - ACCESS_FMASK_LOWERED_AMD = (1 << 11), -}; - -/** - * \brief Blend support qualifiers - */ -enum gl_advanced_blend_mode -{ - BLEND_NONE = 0, - BLEND_MULTIPLY, - BLEND_SCREEN, - BLEND_OVERLAY, - BLEND_DARKEN, - BLEND_LIGHTEN, - BLEND_COLORDODGE, - BLEND_COLORBURN, - BLEND_HARDLIGHT, - BLEND_SOFTLIGHT, - BLEND_DIFFERENCE, - BLEND_EXCLUSION, - BLEND_HSL_HUE, - BLEND_HSL_SATURATION, - BLEND_HSL_COLOR, - BLEND_HSL_LUMINOSITY, -}; - -enum blend_func -{ - BLEND_FUNC_ADD, - BLEND_FUNC_SUBTRACT, - BLEND_FUNC_REVERSE_SUBTRACT, - BLEND_FUNC_MIN, - BLEND_FUNC_MAX, -}; - -enum blend_factor -{ - BLEND_FACTOR_ZERO, - BLEND_FACTOR_SRC_COLOR, - BLEND_FACTOR_SRC1_COLOR, - BLEND_FACTOR_DST_COLOR, - BLEND_FACTOR_SRC_ALPHA, - BLEND_FACTOR_SRC1_ALPHA, - BLEND_FACTOR_DST_ALPHA, - BLEND_FACTOR_CONSTANT_COLOR, - BLEND_FACTOR_CONSTANT_ALPHA, - BLEND_FACTOR_SRC_ALPHA_SATURATE, -}; - -enum gl_tess_spacing -{ - TESS_SPACING_UNSPECIFIED, - TESS_SPACING_EQUAL, - TESS_SPACING_FRACTIONAL_ODD, - TESS_SPACING_FRACTIONAL_EVEN, -}; - -enum tess_primitive_mode -{ - TESS_PRIMITIVE_UNSPECIFIED, - TESS_PRIMITIVE_TRIANGLES, - TESS_PRIMITIVE_QUADS, - TESS_PRIMITIVE_ISOLINES, -}; - -/* these also map directly to GL and gallium prim types. */ -enum shader_prim -{ - SHADER_PRIM_POINTS, - SHADER_PRIM_LINES, - SHADER_PRIM_LINE_LOOP, - SHADER_PRIM_LINE_STRIP, - SHADER_PRIM_TRIANGLES, - SHADER_PRIM_TRIANGLE_STRIP, - SHADER_PRIM_TRIANGLE_FAN, - SHADER_PRIM_QUADS, - SHADER_PRIM_QUAD_STRIP, - SHADER_PRIM_POLYGON, - SHADER_PRIM_LINES_ADJACENCY, - SHADER_PRIM_LINE_STRIP_ADJACENCY, - SHADER_PRIM_TRIANGLES_ADJACENCY, - SHADER_PRIM_TRIANGLE_STRIP_ADJACENCY, - SHADER_PRIM_PATCHES, - SHADER_PRIM_MAX = SHADER_PRIM_PATCHES, - SHADER_PRIM_UNKNOWN = (SHADER_PRIM_MAX * 2), -}; - -/** - * Number of vertices per mesh shader primitive. - */ -unsigned num_mesh_vertices_per_primitive(unsigned prim); - -/** - * A compare function enum for use in compiler lowering passes. This is in - * the same order as GL's compare functions (shifted down by GL_NEVER), and is - * exactly the same as gallium's PIPE_FUNC_*. - */ -enum compare_func -{ - COMPARE_FUNC_NEVER, - COMPARE_FUNC_LESS, - COMPARE_FUNC_EQUAL, - COMPARE_FUNC_LEQUAL, - COMPARE_FUNC_GREATER, - COMPARE_FUNC_NOTEQUAL, - COMPARE_FUNC_GEQUAL, - COMPARE_FUNC_ALWAYS, -}; - -/** - * Arrangements for grouping invocations from NV_compute_shader_derivatives. - * - * The extension provides new layout qualifiers that support two different - * arrangements of compute shader invocations for the purpose of derivative - * computation. When specifying - * - * layout(derivative_group_quadsNV) in; - * - * compute shader invocations are grouped into 2x2x1 arrays whose four local - * invocation ID values follow the pattern: - * - * +-----------------+------------------+ - * | (2x+0, 2y+0, z) | (2x+1, 2y+0, z) | - * +-----------------+------------------+ - * | (2x+0, 2y+1, z) | (2x+1, 2y+1, z) | - * +-----------------+------------------+ - * - * where Y increases from bottom to top. When specifying - * - * layout(derivative_group_linearNV) in; - * - * compute shader invocations are grouped into 2x2x1 arrays whose four local - * invocation index values follow the pattern: - * - * +------+------+ - * | 4n+0 | 4n+1 | - * +------+------+ - * | 4n+2 | 4n+3 | - * +------+------+ - * - * If neither layout qualifier is specified, derivatives in compute shaders - * return zero, which is consistent with the handling of built-in texture - * functions like texture() in GLSL 4.50 compute shaders. - */ -enum gl_derivative_group { - DERIVATIVE_GROUP_NONE = 0, - DERIVATIVE_GROUP_QUADS, - DERIVATIVE_GROUP_LINEAR, -}; - -enum float_controls -{ - FLOAT_CONTROLS_DEFAULT_FLOAT_CONTROL_MODE = 0x0000, - FLOAT_CONTROLS_DENORM_PRESERVE_FP16 = 0x0001, - FLOAT_CONTROLS_DENORM_PRESERVE_FP32 = 0x0002, - FLOAT_CONTROLS_DENORM_PRESERVE_FP64 = 0x0004, - FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP16 = 0x0008, - FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP32 = 0x0010, - FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP64 = 0x0020, - FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP16 = 0x0040, - FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP32 = 0x0080, - FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP64 = 0x0100, - FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP16 = 0x0200, - FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP32 = 0x0400, - FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP64 = 0x0800, - FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP16 = 0x1000, - FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP32 = 0x2000, - FLOAT_CONTROLS_ROUNDING_MODE_RTZ_FP64 = 0x4000, -}; - -/** -* Enums to describe sampler properties used by OpenCL's inline constant samplers. -* These values match the meanings described in the SPIR-V spec. -*/ -enum cl_sampler_addressing_mode { - SAMPLER_ADDRESSING_MODE_NONE = 0, - SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE = 1, - SAMPLER_ADDRESSING_MODE_CLAMP = 2, - SAMPLER_ADDRESSING_MODE_REPEAT = 3, - SAMPLER_ADDRESSING_MODE_REPEAT_MIRRORED = 4, -}; - -enum cl_sampler_filter_mode { - SAMPLER_FILTER_MODE_NEAREST = 0, - SAMPLER_FILTER_MODE_LINEAR = 1, -}; - -/** - * \name Bit flags used for updating material values. - */ -/*@{*/ -#define MAT_ATTRIB_FRONT_AMBIENT 0 -#define MAT_ATTRIB_BACK_AMBIENT 1 -#define MAT_ATTRIB_FRONT_DIFFUSE 2 -#define MAT_ATTRIB_BACK_DIFFUSE 3 -#define MAT_ATTRIB_FRONT_SPECULAR 4 -#define MAT_ATTRIB_BACK_SPECULAR 5 -#define MAT_ATTRIB_FRONT_EMISSION 6 -#define MAT_ATTRIB_BACK_EMISSION 7 -#define MAT_ATTRIB_FRONT_SHININESS 8 -#define MAT_ATTRIB_BACK_SHININESS 9 -#define MAT_ATTRIB_FRONT_INDEXES 10 -#define MAT_ATTRIB_BACK_INDEXES 11 -#define MAT_ATTRIB_MAX 12 - -#define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f)) -#define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f)) -#define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f)) -#define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f)) -#define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f)) -#define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f)) - -#define MAT_BIT_FRONT_AMBIENT (1< - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_XFB_BUFFERS 4 -#define MAX_INLINABLE_UNIFORMS 4 - -struct spirv_supported_capabilities { - bool address; - bool amd_fragment_mask; - bool amd_gcn_shader; - bool amd_image_gather_bias_lod; - bool amd_image_read_write_lod; - bool amd_shader_ballot; - bool amd_shader_explicit_vertex_parameter; - bool amd_trinary_minmax; - bool atomic_storage; - bool demote_to_helper_invocation; - bool derivative_group; - bool descriptor_array_dynamic_indexing; - bool descriptor_array_non_uniform_indexing; - bool descriptor_indexing; - bool device_group; - bool draw_parameters; - bool float_controls; - bool float16_atomic_add; - bool float16_atomic_min_max; - bool float16; - bool float32_atomic_add; - bool float32_atomic_min_max; - bool float64_atomic_add; - bool float64_atomic_min_max; - bool float64; - bool fragment_density; - bool fragment_fully_covered; - bool fragment_shader_pixel_interlock; - bool fragment_shader_sample_interlock; - bool fragment_shading_rate; - bool generic_pointers; - bool geometry_streams; - bool groups; - bool image_atomic_int64; - bool image_ms_array; - bool image_read_without_format; - bool image_write_without_format; - bool int16; - bool int64_atomics; - bool int64; - bool int8; - bool integer_functions2; - bool kernel_image_read_write; - bool kernel_image; - bool kernel; - bool linkage; - bool literal_sampler; - bool mesh_shading_nv; - bool mesh_shading; - bool min_lod; - bool multiview; - bool per_view_attributes_nv; - bool physical_storage_buffer_address; - bool post_depth_coverage; - bool printf; - bool ray_cull_mask; - bool ray_query; - bool ray_tracing; - bool ray_traversal_primitive_culling; - bool runtime_descriptor_array; - bool shader_clock; - bool shader_viewport_index_layer; - bool shader_viewport_mask_nv; - bool sparse_residency; - bool stencil_export; - bool storage_16bit; - bool storage_8bit; - bool storage_image_ms; - bool subgroup_arithmetic; - bool subgroup_ballot; - bool subgroup_basic; - bool subgroup_dispatch; - bool subgroup_quad; - bool subgroup_rotate; - bool subgroup_shuffle; - bool subgroup_uniform_control_flow; - bool subgroup_vote; - bool tessellation; - bool transform_feedback; - bool variable_pointers; - bool vk_memory_model_device_scope; - bool vk_memory_model; - bool workgroup_memory_explicit_layout; - - bool intel_subgroup_shuffle; - bool intel_subgroup_buffer_block_io; -}; - -typedef struct shader_info { - const char *name; - - /* Descriptive name provided by the client; may be NULL */ - const char *label; - - /* Shader is internal, and should be ignored by things like NIR_DEBUG=print */ - bool internal; - - /* SHA1 of the original source, used by shader detection in drivers. */ - uint8_t source_sha1[SHA1_DIGEST_LENGTH]; - - /** The shader stage, such as MESA_SHADER_VERTEX. */ - gl_shader_stage stage:8; - - /** The shader stage in a non SSO linked program that follows this stage, - * such as MESA_SHADER_FRAGMENT. - */ - gl_shader_stage next_stage:8; - - /* Number of textures used by this shader */ - uint8_t num_textures; - /* Number of uniform buffers used by this shader */ - uint8_t num_ubos; - /* Number of atomic buffers used by this shader */ - uint8_t num_abos; - /* Number of shader storage buffers (max .driver_location + 1) used by this - * shader. In the case of nir_lower_atomics_to_ssbo being used, this will - * be the number of actual SSBOs in gl_program->info, and the lowered SSBOs - * and atomic counters in nir_shader->info. - */ - uint8_t num_ssbos; - /* Number of images used by this shader */ - uint8_t num_images; - - /* Which inputs are actually read */ - uint64_t inputs_read; - /* Which outputs are actually written */ - uint64_t outputs_written; - /* Which outputs are actually read */ - uint64_t outputs_read; - /* Which system values are actually read */ - BITSET_DECLARE(system_values_read, SYSTEM_VALUE_MAX); - - /* Which I/O is per-primitive, for read/written information combine with - * the fields above. - */ - uint64_t per_primitive_inputs; - uint64_t per_primitive_outputs; - - /* Which I/O is per-view */ - uint64_t per_view_outputs; - - /* Which 16-bit inputs and outputs are used corresponding to - * VARYING_SLOT_VARn_16BIT. - */ - uint16_t inputs_read_16bit; - uint16_t outputs_written_16bit; - uint16_t outputs_read_16bit; - uint16_t inputs_read_indirectly_16bit; - uint16_t outputs_accessed_indirectly_16bit; - - /* Which patch inputs are actually read */ - uint32_t patch_inputs_read; - /* Which patch outputs are actually written */ - uint32_t patch_outputs_written; - /* Which patch outputs are read */ - uint32_t patch_outputs_read; - - /* Which inputs are read indirectly (subset of inputs_read) */ - uint64_t inputs_read_indirectly; - /* Which outputs are read or written indirectly */ - uint64_t outputs_accessed_indirectly; - /* Which patch inputs are read indirectly (subset of patch_inputs_read) */ - uint64_t patch_inputs_read_indirectly; - /* Which patch outputs are read or written indirectly */ - uint64_t patch_outputs_accessed_indirectly; - - /** Bitfield of which textures are used */ - BITSET_DECLARE(textures_used, 128); - - /** Bitfield of which textures are used by texelFetch() */ - BITSET_DECLARE(textures_used_by_txf, 128); - - /** Bitfield of which samplers are used */ - BITSET_DECLARE(samplers_used, 32); - - /** Bitfield of which images are used */ - BITSET_DECLARE(images_used, 64); - /** Bitfield of which images are buffers. */ - BITSET_DECLARE(image_buffers, 64); - /** Bitfield of which images are MSAA. */ - BITSET_DECLARE(msaa_images, 64); - - /* SPV_KHR_float_controls: execution mode for floating point ops */ - uint16_t float_controls_execution_mode; - - /** - * Size of shared variables accessed by compute/task/mesh shaders. - */ - unsigned shared_size; - - /** - * Size of task payload variables accessed by task/mesh shaders. - */ - unsigned task_payload_size; - - /** - * Number of ray tracing queries in the shader (counts all elements of all - * variables). - */ - unsigned ray_queries; - - /** - * Local workgroup size used by compute/task/mesh shaders. - */ - uint16_t workgroup_size[3]; - - enum gl_subgroup_size subgroup_size; - - /** - * Uses subgroup intrinsics which can communicate across a quad. - */ - bool uses_wide_subgroup_intrinsics; - - /* Transform feedback buffer strides in dwords, max. 1K - 4. */ - uint8_t xfb_stride[MAX_XFB_BUFFERS]; - - uint16_t inlinable_uniform_dw_offsets[MAX_INLINABLE_UNIFORMS]; - uint8_t num_inlinable_uniforms:4; - - /* The size of the gl_ClipDistance[] array, if declared. */ - uint8_t clip_distance_array_size:4; - - /* The size of the gl_CullDistance[] array, if declared. */ - uint8_t cull_distance_array_size:4; - - /* Whether or not this shader ever uses textureGather() */ - bool uses_texture_gather:1; - - /* Whether texture size, levels, or samples is queried. */ - bool uses_resource_info_query:1; - - /** - * True if this shader uses the fddx/fddy opcodes. - * - * Note that this does not include the "fine" and "coarse" variants. - */ - bool uses_fddx_fddy:1; - - /** Has divergence analysis ever been run? */ - bool divergence_analysis_run:1; - - /* Bitmask of bit-sizes used with ALU instructions. */ - uint8_t bit_sizes_float; - uint8_t bit_sizes_int; - - /* Whether the first UBO is the default uniform buffer, i.e. uniforms. */ - bool first_ubo_is_default_ubo:1; - - /* Whether or not separate shader objects were used */ - bool separate_shader:1; - - /** Was this shader linked with any transform feedback varyings? */ - bool has_transform_feedback_varyings:1; - - /* Whether flrp has been lowered. */ - bool flrp_lowered:1; - - /* Whether nir_lower_io has been called to lower derefs. - * nir_variables for inputs and outputs might not be present in the IR. - */ - bool io_lowered:1; - - /** Has nir_lower_var_copies called. To avoid calling any - * lowering/optimization that would introduce any copy_deref later. - */ - bool var_copies_lowered:1; - - /* Whether the shader writes memory, including transform feedback. */ - bool writes_memory:1; - - /* Whether gl_Layer is viewport-relative */ - bool layer_viewport_relative:1; - - /* Whether explicit barriers are used */ - bool uses_control_barrier : 1; - bool uses_memory_barrier : 1; - - /* Whether ARB_bindless_texture ops or variables are used */ - bool uses_bindless : 1; - - /** - * Shared memory types have explicit layout set. Used for - * SPV_KHR_workgroup_storage_explicit_layout. - */ - bool shared_memory_explicit_layout:1; - - /** - * Used for VK_KHR_zero_initialize_workgroup_memory. - */ - bool zero_initialize_shared_memory:1; - - /** - * Used for ARB_compute_variable_group_size. - */ - bool workgroup_size_variable:1; - - /** - * Set if this shader uses legacy (DX9 or ARB assembly) math rules. - * - * From the ARB_fragment_program specification: - * - * "The following rules apply to multiplication: - * - * 1. * == * , for all and . - * 2. +/-0.0 * = +/-0.0, at least for all that correspond to - * *representable numbers (IEEE "not a number" and "infinity" - * *encodings may be exceptions). - * 3. +1.0 * = , for all ."" - * - * However, in effect this was due to DX9 semantics implying that 0*x=0 even - * for inf/nan if the hardware generated them instead of float_min/max. So, - * you should not have an exception for inf/nan to rule 2 above. - * - * One implementation of this behavior would be to flush all generated NaNs - * to zero, at which point 0*Inf=Nan=0. Most DX9/ARB-asm hardware did not - * generate NaNs, and the only way the GPU saw one was to possibly feed it - * in as a uniform. - */ - bool use_legacy_math_rules; - - union { - struct { - /* Which inputs are doubles */ - uint64_t double_inputs; - - /* For AMD-specific driver-internal shaders. It replaces vertex - * buffer loads with code generating VS inputs from scalar registers. - * - * Valid values: SI_VS_BLIT_SGPRS_POS_* - */ - uint8_t blit_sgprs_amd:4; - - /* True if the shader writes position in window space coordinates pre-transform */ - bool window_space_position:1; - - /** Is an edge flag input needed? */ - bool needs_edge_flag:1; - } vs; - - struct { - /** The output primitive type */ - uint16_t output_primitive; - - /** The input primitive type */ - uint16_t input_primitive; - - /** The maximum number of vertices the geometry shader might write. */ - uint16_t vertices_out; - - /** 1 .. MAX_GEOMETRY_SHADER_INVOCATIONS */ - uint8_t invocations; - - /** The number of vertices received per input primitive (max. 6) */ - uint8_t vertices_in:3; - - /** Whether or not this shader uses EndPrimitive */ - bool uses_end_primitive:1; - - /** The streams used in this shaders (max. 4) */ - uint8_t active_stream_mask:4; - } gs; - - struct { - bool uses_discard:1; - bool uses_demote:1; - bool uses_fbfetch_output:1; - bool fbfetch_coherent:1; - bool color_is_dual_source:1; - - /** - * True if this fragment shader requires helper invocations. This - * can be caused by the use of ALU derivative ops, texture - * instructions which do implicit derivatives, and the use of quad - * subgroup operations. - */ - bool needs_quad_helper_invocations:1; - - /** - * True if this fragment shader requires helper invocations for - * all subgroup operations, not just quad ops and derivatives. - */ - bool needs_all_helper_invocations:1; - - /** - * Whether any inputs are declared with the "sample" qualifier. - */ - bool uses_sample_qualifier:1; - - /** - * Whether sample shading is used. - */ - bool uses_sample_shading:1; - - /** - * Whether early fragment tests are enabled as defined by - * ARB_shader_image_load_store. - */ - bool early_fragment_tests:1; - - /** - * Defined by INTEL_conservative_rasterization. - */ - bool inner_coverage:1; - - bool post_depth_coverage:1; - - /** - * \name ARB_fragment_coord_conventions - * @{ - */ - bool pixel_center_integer:1; - bool origin_upper_left:1; - /*@}*/ - - bool pixel_interlock_ordered:1; - bool pixel_interlock_unordered:1; - bool sample_interlock_ordered:1; - bool sample_interlock_unordered:1; - - /** - * Flags whether NIR's base types on the FS color outputs should be - * ignored. - * - * GLSL requires that fragment shader output base types match the - * render target's base types for the behavior to be defined. From - * the GL 4.6 spec: - * - * "If the values written by the fragment shader do not match the - * format(s) of the corresponding color buffer(s), the result is - * undefined." - * - * However, for NIR shaders translated from TGSI, we don't have the - * output types any more, so the driver will need to do whatever - * fixups are necessary to handle effectively untyped data being - * output from the FS. - */ - bool untyped_color_outputs:1; - - /** gl_FragDepth layout for ARB_conservative_depth. */ - enum gl_frag_depth_layout depth_layout:3; - - /** - * Interpolation qualifiers for drivers that lowers color inputs - * to system values. - */ - unsigned color0_interp:3; /* glsl_interp_mode */ - bool color0_sample:1; - bool color0_centroid:1; - unsigned color1_interp:3; /* glsl_interp_mode */ - bool color1_sample:1; - bool color1_centroid:1; - - /* Bitmask of gl_advanced_blend_mode values that may be used with this - * shader. - */ - unsigned advanced_blend_modes; - - /** - * Defined by AMD_shader_early_and_late_fragment_tests. - */ - bool early_and_late_fragment_tests:1; - enum gl_frag_stencil_layout stencil_front_layout:3; - enum gl_frag_stencil_layout stencil_back_layout:3; - } fs; - - struct { - uint16_t workgroup_size_hint[3]; - - uint8_t user_data_components_amd:3; - - /* - * Arrangement of invocations used to calculate derivatives in a compute - * shader. From NV_compute_shader_derivatives. - */ - enum gl_derivative_group derivative_group:2; - - /* - * If the shader might run with shared mem on top of `shared_size`. - */ - bool has_variable_shared_mem:1; - - /** - * pointer size is: - * AddressingModelLogical: 0 (default) - * AddressingModelPhysical32: 32 - * AddressingModelPhysical64: 64 - */ - unsigned ptr_size; - } cs; - - /* Applies to both TCS and TES. */ - struct { - enum tess_primitive_mode _primitive_mode; - - /** The number of vertices in the TCS output patch. */ - uint8_t tcs_vertices_out; - unsigned spacing:2; /*gl_tess_spacing*/ - - /** Is the vertex order counterclockwise? */ - bool ccw:1; - bool point_mode:1; - - /* Bit mask of TCS per-vertex inputs (VS outputs) that are used - * with a vertex index that is NOT the invocation id - */ - uint64_t tcs_cross_invocation_inputs_read; - - /* Bit mask of TCS per-vertex outputs that are used - * with a vertex index that is NOT the invocation id - */ - uint64_t tcs_cross_invocation_outputs_read; - } tess; - - /* Applies to MESH and TASK. */ - struct { - /* Bit mask of MS outputs that are used - * with an index that is NOT the local invocation index. - */ - uint64_t ms_cross_invocation_output_access; - - /* Dimensions of task->mesh dispatch (EmitMeshTasksEXT) - * when they are known compile-time constants. - * 0 means they are not known. - */ - uint32_t ts_mesh_dispatch_dimensions[3]; - - uint16_t max_vertices_out; - uint16_t max_primitives_out; - uint16_t primitive_type; /* GL_POINTS, GL_LINES or GL_TRIANGLES. */ - - /* TODO: remove this when we stop supporting NV_mesh_shader. */ - bool nv; - } mesh; - }; -} shader_info; - -#ifdef __cplusplus -} -#endif - -#endif /* SHADER_INFO_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/auxiliary/util/u_half.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/auxiliary/util/u_half.h deleted file mode 100644 index 43b8b0e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/auxiliary/util/u_half.h +++ /dev/null @@ -1,136 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 Luca Barbieri - * - * 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 (including the - * next paragraph) 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 THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -#ifndef U_HALF_H -#define U_HALF_H - -#include "../../include/pipe/p_compiler.h" -#include "../../../util/u_math.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * References for float <-> half conversions - * - * http://fgiesen.wordpress.com/2012/03/28/half-to-float-done-quic/ - * https://gist.github.com/2156668 - * https://gist.github.com/2144712 - */ - -static inline uint16_t -util_float_to_half(float f) -{ - uint32_t sign_mask = 0x80000000; - uint32_t round_mask = ~0xfff; - uint32_t f32inf = 0xff << 23; - uint32_t f16inf = 0x1f << 23; - uint32_t sign; - union fi magic; - union fi f32; - uint16_t f16; - - magic.ui = 0xf << 23; - - f32.f = f; - - /* Sign */ - sign = f32.ui & sign_mask; - f32.ui ^= sign; - - if (f32.ui == f32inf) { - /* Inf */ - f16 = 0x7c00; - } else if (f32.ui > f32inf) { - /* NaN */ - f16 = 0x7e00; - } else { - /* Number */ - f32.ui &= round_mask; - f32.f *= magic.f; - f32.ui -= round_mask; - /* - * XXX: The magic mul relies on denorms being available, otherwise - * all f16 denorms get flushed to zero - hence when this is used - * for tgsi_exec in softpipe we won't get f16 denorms. - */ - /* - * Clamp to max finite value if overflowed. - * OpenGL has completely undefined rounding behavior for float to - * half-float conversions, and this matches what is mandated for float - * to fp11/fp10, which recommend round-to-nearest-finite too. - * (d3d10 is deeply unhappy about flushing such values to infinity, and - * while it also mandates round-to-zero it doesn't care nearly as much - * about that.) - */ - if (f32.ui > f16inf) - f32.ui = f16inf - 1; - - f16 = f32.ui >> 13; - } - - /* Sign */ - f16 |= sign >> 16; - - return f16; -} - -static inline float -util_half_to_float(uint16_t f16) -{ - union fi infnan; - union fi magic; - union fi f32; - - infnan.ui = 0x8f << 23; - infnan.f = 65536.0f; - magic.ui = 0xef << 23; - - /* Exponent / Mantissa */ - f32.ui = (f16 & 0x7fff) << 13; - - /* Adjust */ - f32.f *= magic.f; - /* XXX: The magic mul relies on denorms being available */ - - /* Inf / NaN */ - if (f32.f >= infnan.f) - f32.ui |= 0xff << 23; - - /* Sign */ - f32.ui |= (uint32_t)(f16 & 0x8000) << 16; - - return f32.f; -} - -#ifdef __cplusplus -} -#endif - -#endif /* U_HALF_H */ - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/frontend/api.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/frontend/api.h deleted file mode 100644 index efca406..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/frontend/api.h +++ /dev/null @@ -1,336 +0,0 @@ -/********************************************************** - * Copyright 2010 VMware, Inc. 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 THE AUTHORS OR COPYRIGHT HOLDERS - * 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. - * - **********************************************************/ - - -#ifndef _API_H_ -#define _API_H_ - -#include "../../../util/format/u_formats.h" - -struct st_context; - -/** - * \file API for communication between gallium frontends and supporting - * frontends such as DRI. - * - * This file defines the API that the GL frontend uses to talk to - * the DRI/GLX/WGL frontends. - */ - - -/** - * Context flags. - */ -#define ST_CONTEXT_FLAG_DEBUG (1 << 0) -#define ST_CONTEXT_FLAG_FORWARD_COMPATIBLE (1 << 1) -#define ST_CONTEXT_FLAG_NO_ERROR (1 << 2) -#define ST_CONTEXT_FLAG_RELEASE_NONE (1 << 3) - - -/** - * Reasons that context creation might fail. - */ -enum st_context_error { - ST_CONTEXT_SUCCESS = 0, - ST_CONTEXT_ERROR_NO_MEMORY, - ST_CONTEXT_ERROR_BAD_VERSION, -}; - -/** - * Available attachments of framebuffer. - */ -enum st_attachment_type { - ST_ATTACHMENT_FRONT_LEFT, - ST_ATTACHMENT_BACK_LEFT, - ST_ATTACHMENT_FRONT_RIGHT, - ST_ATTACHMENT_BACK_RIGHT, - ST_ATTACHMENT_DEPTH_STENCIL, - ST_ATTACHMENT_ACCUM, - - ST_ATTACHMENT_COUNT, - ST_ATTACHMENT_INVALID = -1 -}; - -/* for buffer_mask in st_visual */ -#define ST_ATTACHMENT_FRONT_LEFT_MASK (1 << ST_ATTACHMENT_FRONT_LEFT) -#define ST_ATTACHMENT_BACK_LEFT_MASK (1 << ST_ATTACHMENT_BACK_LEFT) -#define ST_ATTACHMENT_FRONT_RIGHT_MASK (1 << ST_ATTACHMENT_FRONT_RIGHT) -#define ST_ATTACHMENT_BACK_RIGHT_MASK (1 << ST_ATTACHMENT_BACK_RIGHT) -#define ST_ATTACHMENT_DEPTH_STENCIL_MASK (1 << ST_ATTACHMENT_DEPTH_STENCIL) -#define ST_ATTACHMENT_ACCUM_MASK (1 << ST_ATTACHMENT_ACCUM) - -/** - * Flush flags. - */ -#define ST_FLUSH_FRONT (1 << 0) -#define ST_FLUSH_END_OF_FRAME (1 << 1) -#define ST_FLUSH_WAIT (1 << 2) -#define ST_FLUSH_FENCE_FD (1 << 3) - -/** - * State invalidation flags to notify st_context that states have been changed - * behind their back. - */ -#define ST_INVALIDATE_FS_SAMPLER_VIEWS (1 << 0) -#define ST_INVALIDATE_FS_CONSTBUF0 (1 << 1) -#define ST_INVALIDATE_VS_CONSTBUF0 (1 << 2) -#define ST_INVALIDATE_VERTEX_BUFFERS (1 << 3) -#define ST_INVALIDATE_FB_STATE (1 << 4) - -/** - * Value to pipe_frontend_streen::get_param function. - */ -enum st_manager_param { - /** - * The DRI frontend on old libGL's doesn't do the right thing - * with regards to invalidating the framebuffers. - * - * For the GL gallium frontend that means that it needs to invalidate - * the framebuffer in glViewport itself. - */ - ST_MANAGER_BROKEN_INVALIDATE -}; - -struct pipe_resource; -struct util_queue_monitoring; - -/** - * Used in pipe_frontend_screen::get_egl_image. - */ -struct st_egl_image -{ - /* this is owned by the caller */ - struct pipe_resource *texture; - - /* format only differs from texture->format for multi-planar (YUV): */ - enum pipe_format format; - - unsigned level; - unsigned layer; - /* GL internal format. */ - unsigned internalformat; - - /* one of __DRI_YUV_COLOR_SPACE_* */ - unsigned yuv_color_space; - - /* one of __DRI_YUV_RANGE_* */ - unsigned yuv_range; - - bool imported_dmabuf; -}; - -/** - * Represent the visual of a framebuffer. - */ -struct st_visual -{ - /** - * Available buffers. Bitfield of ST_ATTACHMENT_*_MASK bits. - */ - unsigned buffer_mask; - - /** - * Buffer formats. The formats are always set even when the buffer is - * not available. - */ - enum pipe_format color_format; - enum pipe_format depth_stencil_format; - enum pipe_format accum_format; - unsigned samples; -}; - - -/** - * Configuration options from driconf - */ -struct st_config_options -{ - bool disable_blend_func_extended; - bool disable_glsl_line_continuations; - bool disable_arb_gpu_shader5; - bool disable_uniform_array_resize; - bool force_compat_shaders; - bool force_glsl_extensions_warn; - unsigned force_glsl_version; - bool allow_extra_pp_tokens; - bool allow_glsl_extension_directive_midshader; - bool allow_glsl_120_subset_in_110; - bool allow_glsl_builtin_const_expression; - bool allow_glsl_relaxed_es; - bool allow_glsl_builtin_variable_redeclaration; - bool allow_higher_compat_version; - bool allow_glsl_compat_shaders; - bool glsl_ignore_write_to_readonly_var; - bool glsl_zero_init; - bool vs_position_always_invariant; - bool vs_position_always_precise; - bool force_glsl_abs_sqrt; - bool allow_glsl_cross_stage_interpolation_mismatch; - bool do_dce_before_clip_cull_analysis; - bool allow_draw_out_of_order; - bool glthread_nop_check_framebuffer_status; - bool ignore_map_unsynchronized; - bool ignore_discard_framebuffer; - bool force_integer_tex_nearest; - bool force_gl_names_reuse; - bool force_gl_map_buffer_synchronized; - bool transcode_etc; - bool transcode_astc; - char *force_gl_vendor; - char *force_gl_renderer; - char *mesa_extension_override; - unsigned char config_options_sha1[20]; -}; - -struct pipe_frontend_screen; - -/** - * Represent a windowing system drawable. - * - * This is inherited by the drawable implementation of the DRI/GLX/WGL - * frontends, e.g. this is the first field in dri_drawable. - * - * st_context uses the callbacks to invoke one of the DRI/GLX/WGL-specific - * functions. - * - * This drawable can be shared between different threads. The atomic stamp - * is used to communicate that the drawable has been changed, and - * the framebuffer state should be updated. - */ -struct pipe_frontend_drawable -{ - /** - * Atomic stamp which changes when framebuffers need to be updated. - */ - int32_t stamp; - - /** - * Identifier that uniquely identifies the framebuffer interface object. - */ - uint32_t ID; - - /** - * The frontend screen for DRI/GLX/WGL. This is e.g. dri_screen. - */ - struct pipe_frontend_screen *fscreen; - - /** - * The visual of the framebuffer. - */ - const struct st_visual *visual; - - /** - * Flush the front buffer. - * - * On some window systems, changes to the front buffers are not immediately - * visible. They need to be flushed. - * - * @att is one of the front buffer attachments. - */ - bool (*flush_front)(struct st_context *st, - struct pipe_frontend_drawable *drawable, - enum st_attachment_type statt); - - /** - * The GL frontend asks for the framebuffer attachments it needs. - * - * It should try to only ask for attachments that it currently renders - * to, thus allowing the winsys to delay the allocation of textures not - * needed. For example front buffer attachments are not needed if you - * only do back buffer rendering. - * - * The implementor of this function needs to also ensure - * thread safty as this call might be done from multiple threads. - * - * The returned textures are owned by the caller. They should be - * unreferenced when no longer used. If this function is called multiple - * times with different sets of attachments, those buffers not included in - * the last call might be destroyed. - */ - bool (*validate)(struct st_context *st, - struct pipe_frontend_drawable *drawable, - const enum st_attachment_type *statts, - unsigned count, - struct pipe_resource **out, - struct pipe_resource **resolve); - - bool (*flush_swapbuffers)(struct st_context *st, - struct pipe_frontend_drawable *drawable); -}; - - -/** - * This is inherited by a screen in the DRI/GLX/WGL frontends, e.g. dri_screen. - */ -struct pipe_frontend_screen -{ - struct pipe_screen *screen; - - /** - * Look up and return the info of an EGLImage. - * - * This is used to implement for example EGLImageTargetTexture2DOES. - * The GLeglImageOES agrument of that call is passed directly to this - * function call and the information needed to access this is returned - * in the given struct out. - * - * @fscreen: the screen - * @egl_image: EGLImage that caller recived - * @out: return struct filled out with access information. - * - * This function is optional. - */ - bool (*get_egl_image)(struct pipe_frontend_screen *fscreen, - void *egl_image, - struct st_egl_image *out); - - /** - * Validate EGLImage passed to get_egl_image. - */ - bool (*validate_egl_image)(struct pipe_frontend_screen *fscreen, - void *egl_image); - - /** - * Query a feature or property from the DRI/GLX/WGL frontend. - */ - int (*get_param)(struct pipe_frontend_screen *fscreen, - enum st_manager_param param); - - /** - * Call the loader function setBackgroundContext. Called from the worker - * thread. - */ - void (*set_background_context)(struct st_context *st, - struct util_queue_monitoring *queue_info); - - /** - * GL frontend state associated with the screen. - * - * This is where st_context stores the state shared by all contexts. - */ - void *st_screen; -}; - -#endif /* _API_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_compiler.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_compiler.h deleted file mode 100644 index a48f7c0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_compiler.h +++ /dev/null @@ -1,70 +0,0 @@ -/************************************************************************** - * - * Copyright 2007-2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef P_COMPILER_H -#define P_COMPILER_H - - -#include "../../../util/compiler.h" -#include "../../../util/detect.h" -#include "../../../util/macros.h" - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -#if !defined(__HAIKU__) && !defined(__USE_MISC) -#if !DETECT_OS_ANDROID -typedef unsigned int uint; -#endif -typedef unsigned short ushort; -#endif -typedef unsigned char ubyte; - -typedef unsigned char boolean; -#ifndef TRUE -#define TRUE true -#endif -#ifndef FALSE -#define FALSE false -#endif - -#if defined(__cplusplus) -} -#endif - - -#endif /* P_COMPILER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_context.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_context.h deleted file mode 100644 index 0922e38..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_context.h +++ /dev/null @@ -1,1218 +0,0 @@ -/************************************************************************** - * - * Copyright 2007 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef PIPE_CONTEXT_H -#define PIPE_CONTEXT_H - -#include "p_compiler.h" -#include "../../../util/format/u_formats.h" -#include "p_video_enums.h" -#include "p_defines.h" -#include "../../../util/u_debug.h" -#include -//#include "frontend/winsys_handle.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -struct pipe_blend_color; -struct pipe_blend_state; -struct pipe_blit_info; -struct pipe_box; -struct pipe_clip_state; -struct pipe_compute_state_object_info; -struct pipe_constant_buffer; -struct pipe_depth_stencil_alpha_state; -struct pipe_device_reset_callback; -struct pipe_draw_info; -struct pipe_draw_indirect_info; -struct pipe_draw_start_count_bias; -struct pipe_draw_vertex_state_info; -struct pipe_grid_info; -struct pipe_fence_handle; -struct pipe_framebuffer_state; -struct pipe_image_view; -struct pipe_query; -struct pipe_poly_stipple; -struct pipe_rasterizer_state; -struct pipe_resolve_info; -struct pipe_resource; -struct pipe_sampler_state; -struct pipe_sampler_view; -struct pipe_scissor_state; -struct pipe_shader_buffer; -struct pipe_shader_state; -struct pipe_stencil_ref; -struct pipe_stream_output_target; -struct pipe_surface; -struct pipe_transfer; -struct pipe_vertex_buffer; -struct pipe_vertex_element; -struct pipe_vertex_state; -struct pipe_video_buffer; -struct pipe_video_codec; -struct pipe_viewport_state; -struct pipe_compute_state; -union pipe_color_union; -union pipe_query_result; -struct u_log_context; -struct u_upload_mgr; -struct util_debug_callback; -struct u_vbuf; - -/** - * Gallium rendering context. Basically: - * - state setting functions - * - VBO drawing functions - * - surface functions - */ -struct pipe_context { - struct pipe_screen *screen; - - void *priv; /**< context private data (for DRI for example) */ - void *draw; /**< private, for draw module (temporary?) */ - struct u_vbuf *vbuf; /**< for cso_context, don't use in drivers */ - - /** - * Stream uploaders created by the driver. All drivers, gallium frontends, and - * modules should use them. - * - * Use u_upload_alloc or u_upload_data as many times as you want. - * Once you are done, use u_upload_unmap. - */ - struct u_upload_mgr *stream_uploader; /* everything but shader constants */ - struct u_upload_mgr *const_uploader; /* shader constants only */ - - /** - * Debug callback set by u_default_set_debug_callback. Frontends should use - * set_debug_callback in case drivers need to flush compiler queues. - */ - struct util_debug_callback debug; - - void (*destroy)(struct pipe_context *); - - /** - * VBO drawing - */ - /*@{*/ - /** - * Multi draw. - * - * For indirect multi draws, num_draws is 1 and indirect->draw_count - * is used instead. - * - * Caps: - * - Always supported: Direct multi draws - * - PIPE_CAP_MULTI_DRAW_INDIRECT: Indirect multi draws - * - PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS: Indirect draw count - * - * Differences against glMultiDraw and glMultiMode: - * - "info->mode" and "draws->index_bias" are always constant due to the lack - * of hardware support and CPU performance concerns. Only start and count - * vary. - * - if "info->increment_draw_id" is false, draw_id doesn't change between - * draws - * - * Direct multi draws are also generated by u_threaded_context, which looks - * ahead in gallium command buffers and merges single draws. - * - * \param pipe context - * \param info draw info - * \param drawid_offset offset to add for drawid param of each draw - * \param indirect indirect multi draws - * \param draws array of (start, count) pairs for direct draws - * \param num_draws number of direct draws; 1 for indirect multi draws - */ - void (*draw_vbo)(struct pipe_context *pipe, - const struct pipe_draw_info *info, - unsigned drawid_offset, - const struct pipe_draw_indirect_info *indirect, - const struct pipe_draw_start_count_bias *draws, - unsigned num_draws); - - /** - * Multi draw for display lists. - * - * For more information, see pipe_vertex_state and - * pipe_draw_vertex_state_info. - * - * Explanation of partial_vertex_mask: - * - * 1. pipe_vertex_state::input::elements have a monotonic logical index - * determined by pipe_vertex_state::input::full_velem_mask, specifically, - * the position of the i-th bit set is the logical index of the i-th - * vertex element, up to 31. - * - * 2. pipe_vertex_state::input::partial_velem_mask is a subset of - * full_velem_mask where the bits set determine which vertex elements - * should be bound contiguously. The vertex elements corresponding to - * the bits not set in partial_velem_mask should be ignored. - * - * Those two allow creating pipe_vertex_state that has more vertex - * attributes than the vertex shader has inputs. The idea is that - * pipe_vertex_state can be used with any vertex shader that has the same - * number of inputs and same logical indices or less. This may sound like - * an overly complicated way to bind a subset of vertex elements, but it - * actually simplifies everything else: - * - * - In st/mesa, full_velem_mask is exactly the mask of enabled vertex - * attributes (VERT_ATTRIB_x) in the display list VAO, while - * partial_velem_mask is exactly the inputs_read mask of the vertex - * shader (also VERT_ATTRIB_x). - * - * - In the driver, some bit ops and popcnt is needed to assemble vertex - * elements very quickly. - */ - void (*draw_vertex_state)(struct pipe_context *ctx, - struct pipe_vertex_state *state, - uint32_t partial_velem_mask, - struct pipe_draw_vertex_state_info info, - const struct pipe_draw_start_count_bias *draws, - unsigned num_draws); - /*@}*/ - - /** - * Predicate subsequent rendering on occlusion query result - * \param query the query predicate, or NULL if no predicate - * \param condition whether to skip on FALSE or TRUE query results - * \param mode one of PIPE_RENDER_COND_x - */ - void (*render_condition)(struct pipe_context *pipe, - struct pipe_query *query, - bool condition, - enum pipe_render_cond_flag mode); - - /** - * Predicate subsequent rendering on a value in a buffer - * \param buffer The buffer to query for the value - * \param offset Offset in the buffer to query 32-bit - * \param condition whether to skip on FALSE or TRUE query results - */ - void (*render_condition_mem)(struct pipe_context *pipe, - struct pipe_resource *buffer, - uint32_t offset, - bool condition); - /** - * Query objects - */ - /*@{*/ - struct pipe_query *(*create_query)(struct pipe_context *pipe, - unsigned query_type, - unsigned index); - - /** - * Create a query object that queries all given query types simultaneously. - * - * This can only be used for those query types for which - * get_driver_query_info indicates that it must be used. Only one batch - * query object may be active at a time. - * - * There may be additional constraints on which query types can be used - * together, in particular those that are implied by - * get_driver_query_group_info. - * - * \param num_queries the number of query types - * \param query_types array of \p num_queries query types - * \return a query object, or NULL on error. - */ - struct pipe_query *(*create_batch_query)(struct pipe_context *pipe, - unsigned num_queries, - unsigned *query_types); - - void (*destroy_query)(struct pipe_context *pipe, - struct pipe_query *q); - - bool (*begin_query)(struct pipe_context *pipe, struct pipe_query *q); - bool (*end_query)(struct pipe_context *pipe, struct pipe_query *q); - - /** - * Get results of a query. - * \param wait if true, this query will block until the result is ready - * \return TRUE if results are ready, FALSE otherwise - */ - bool (*get_query_result)(struct pipe_context *pipe, - struct pipe_query *q, - bool wait, - union pipe_query_result *result); - - /** - * Get results of a query, storing into resource. Note that this may not - * be used with batch queries. - * - * \param wait if true, this query will block until the result is ready - * \param result_type the type of the value being stored: - * \param index for queries that return multiple pieces of data, which - * item of that data to store (e.g. for - * PIPE_QUERY_PIPELINE_STATISTICS). - * When the index is -1, instead of the value of the query - * the driver should instead write a 1 or 0 to the appropriate - * location with 1 meaning that the query result is available. - */ - void (*get_query_result_resource)(struct pipe_context *pipe, - struct pipe_query *q, - enum pipe_query_flags flags, - enum pipe_query_value_type result_type, - int index, - struct pipe_resource *resource, - unsigned offset); - - /** - * Set whether all current non-driver queries except TIME_ELAPSED are - * active or paused. - */ - void (*set_active_query_state)(struct pipe_context *pipe, bool enable); - - /** - * INTEL Performance Query - */ - /*@{*/ - - unsigned (*init_intel_perf_query_info)(struct pipe_context *pipe); - - void (*get_intel_perf_query_info)(struct pipe_context *pipe, - unsigned query_index, - const char **name, - uint32_t *data_size, - uint32_t *n_counters, - uint32_t *n_active); - - void (*get_intel_perf_query_counter_info)(struct pipe_context *pipe, - unsigned query_index, - unsigned counter_index, - const char **name, - const char **desc, - uint32_t *offset, - uint32_t *data_size, - uint32_t *type_enum, - uint32_t *data_type_enum, - uint64_t *raw_max); - - struct pipe_query *(*new_intel_perf_query_obj)(struct pipe_context *pipe, - unsigned query_index); - - bool (*begin_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q); - - void (*end_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q); - - void (*delete_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q); - - void (*wait_intel_perf_query)(struct pipe_context *pipe, struct pipe_query *q); - - bool (*is_intel_perf_query_ready)(struct pipe_context *pipe, struct pipe_query *q); - - bool (*get_intel_perf_query_data)(struct pipe_context *pipe, - struct pipe_query *q, - size_t data_size, - uint32_t *data, - uint32_t *bytes_written); - - /*@}*/ - - /** - * \name GLSL shader/program functions. - */ - /*@{*/ - /** - * Called when a shader program is linked. - * \param handles Array of shader handles attached to this program. - * The size of the array is \c PIPE_SHADER_TYPES, and each - * position contains the corresponding \c pipe_shader_state* - * or \c pipe_compute_state*, or \c NULL. - * E.g. You can retrieve the fragment shader handle with - * \c handles[PIPE_SHADER_FRAGMENT] - */ - void (*link_shader)(struct pipe_context *, void** handles); - /*@}*/ - - /** - * State functions (create/bind/destroy state objects) - */ - /*@{*/ - void * (*create_blend_state)(struct pipe_context *, - const struct pipe_blend_state *); - void (*bind_blend_state)(struct pipe_context *, void *); - void (*delete_blend_state)(struct pipe_context *, void *); - - void * (*create_sampler_state)(struct pipe_context *, - const struct pipe_sampler_state *); - void (*bind_sampler_states)(struct pipe_context *, - enum pipe_shader_type shader, - unsigned start_slot, unsigned num_samplers, - void **samplers); - void (*delete_sampler_state)(struct pipe_context *, void *); - - void * (*create_rasterizer_state)(struct pipe_context *, - const struct pipe_rasterizer_state *); - void (*bind_rasterizer_state)(struct pipe_context *, void *); - void (*delete_rasterizer_state)(struct pipe_context *, void *); - - void * (*create_depth_stencil_alpha_state)(struct pipe_context *, - const struct pipe_depth_stencil_alpha_state *); - void (*bind_depth_stencil_alpha_state)(struct pipe_context *, void *); - void (*delete_depth_stencil_alpha_state)(struct pipe_context *, void *); - - void * (*create_fs_state)(struct pipe_context *, - const struct pipe_shader_state *); - void (*bind_fs_state)(struct pipe_context *, void *); - void (*delete_fs_state)(struct pipe_context *, void *); - - void * (*create_vs_state)(struct pipe_context *, - const struct pipe_shader_state *); - void (*bind_vs_state)(struct pipe_context *, void *); - void (*delete_vs_state)(struct pipe_context *, void *); - - void * (*create_gs_state)(struct pipe_context *, - const struct pipe_shader_state *); - void (*bind_gs_state)(struct pipe_context *, void *); - void (*delete_gs_state)(struct pipe_context *, void *); - - void * (*create_tcs_state)(struct pipe_context *, - const struct pipe_shader_state *); - void (*bind_tcs_state)(struct pipe_context *, void *); - void (*delete_tcs_state)(struct pipe_context *, void *); - - void * (*create_tes_state)(struct pipe_context *, - const struct pipe_shader_state *); - void (*bind_tes_state)(struct pipe_context *, void *); - void (*delete_tes_state)(struct pipe_context *, void *); - - void * (*create_vertex_elements_state)(struct pipe_context *, - unsigned num_elements, - const struct pipe_vertex_element *); - void (*bind_vertex_elements_state)(struct pipe_context *, void *); - void (*delete_vertex_elements_state)(struct pipe_context *, void *); - - /*@}*/ - - /** - * Parameter-like state (or properties) - */ - /*@{*/ - void (*set_blend_color)(struct pipe_context *, - const struct pipe_blend_color *); - - void (*set_stencil_ref)(struct pipe_context *, - const struct pipe_stencil_ref ref); - - void (*set_sample_mask)(struct pipe_context *, - unsigned sample_mask); - - void (*set_min_samples)(struct pipe_context *, - unsigned min_samples); - - void (*set_clip_state)(struct pipe_context *, - const struct pipe_clip_state *); - - /** - * Set constant buffer - * - * \param shader Shader stage - * \param index Buffer binding slot index within a shader stage - * \param take_ownership The callee takes ownership of the buffer reference. - * (the callee shouldn't increment the ref count) - * \param buf Constant buffer parameters - */ - void (*set_constant_buffer)(struct pipe_context *, - enum pipe_shader_type shader, uint index, - bool take_ownership, - const struct pipe_constant_buffer *buf); - - /** - * Set inlinable constants for constant buffer 0. - * - * These are constants that the driver would like to inline in the IR - * of the current shader and recompile it. Drivers can determine which - * constants they prefer to inline in finalize_nir and store that - * information in shader_info::*inlinable_uniform*. When the state tracker - * or frontend uploads constants to a constant buffer, it can pass - * inlinable constants separately via this call. - * - * Any set_constant_buffer call invalidates this state, so this function - * must be called after it. Binding a shader also invalidates this state. - * - * There is no PIPE_CAP for this. Drivers shouldn't set the shader_info - * fields if they don't want this or if they don't implement this. - */ - void (*set_inlinable_constants)(struct pipe_context *, - enum pipe_shader_type shader, - uint num_values, uint32_t *values); - - void (*set_framebuffer_state)(struct pipe_context *, - const struct pipe_framebuffer_state *); - - /** - * Set the sample locations used during rasterization. When NULL or sized - * zero, the default locations are used. - * - * Note that get_sample_position() still returns the default locations. - * - * The samples are accessed with - * locations[(pixel_y*grid_w+pixel_x)*ms+i], - * where: - * ms = the sample count - * grid_w = the pixel grid width for the sample count - * grid_w = the pixel grid height for the sample count - * pixel_x = the window x coordinate modulo grid_w - * pixel_y = the window y coordinate modulo grid_w - * i = the sample index - * This gives a result with the x coordinate as the low 4 bits and the y - * coordinate as the high 4 bits. For each coordinate 0 is the left or top - * edge of the pixel's rectangle and 16 (not 15) is the right or bottom edge. - * - * Out of bounds accesses are return undefined values. - * - * The pixel grid is used to vary sample locations across pixels and its - * size can be queried with get_sample_pixel_grid(). - */ - void (*set_sample_locations)(struct pipe_context *, - size_t size, const uint8_t *locations); - - void (*set_polygon_stipple)(struct pipe_context *, - const struct pipe_poly_stipple *); - - void (*set_scissor_states)(struct pipe_context *, - unsigned start_slot, - unsigned num_scissors, - const struct pipe_scissor_state *); - - void (*set_window_rectangles)(struct pipe_context *, - bool include, - unsigned num_rectangles, - const struct pipe_scissor_state *); - - void (*set_viewport_states)(struct pipe_context *, - unsigned start_slot, - unsigned num_viewports, - const struct pipe_viewport_state *); - - void (*set_sampler_views)(struct pipe_context *, - enum pipe_shader_type shader, - unsigned start_slot, unsigned num_views, - unsigned unbind_num_trailing_slots, - bool take_ownership, - struct pipe_sampler_view **views); - - void (*set_tess_state)(struct pipe_context *, - const float default_outer_level[4], - const float default_inner_level[2]); - - /** - * Set the number of vertices per input patch for tessellation. - */ - void (*set_patch_vertices)(struct pipe_context *ctx, uint8_t patch_vertices); - - /** - * Sets the debug callback. If the pointer is null, then no callback is - * set, otherwise a copy of the data should be made. - */ - void (*set_debug_callback)(struct pipe_context *, - const struct util_debug_callback *); - - /** - * Bind an array of shader buffers that will be used by a shader. - * Any buffers that were previously bound to the specified range - * will be unbound. - * - * \param shader selects shader stage - * \param start_slot first buffer slot to bind. - * \param count number of consecutive buffers to bind. - * \param buffers array of pointers to the buffers to bind, it - * should contain at least \a count elements - * unless it's NULL, in which case no buffers will - * be bound. - * \param writable_bitmask If bit i is not set, buffers[i] will only be - * used with loads. If unsure, set to ~0. - */ - void (*set_shader_buffers)(struct pipe_context *, - enum pipe_shader_type shader, - unsigned start_slot, unsigned count, - const struct pipe_shader_buffer *buffers, - unsigned writable_bitmask); - - /** - * Bind an array of hw atomic buffers for use by all shaders. - * And buffers that were previously bound to the specified range - * will be unbound. - * - * \param start_slot first buffer slot to bind. - * \param count number of consecutive buffers to bind. - * \param buffers array of pointers to the buffers to bind, it - * should contain at least \a count elements - * unless it's NULL, in which case no buffers will - * be bound. - */ - void (*set_hw_atomic_buffers)(struct pipe_context *, - unsigned start_slot, unsigned count, - const struct pipe_shader_buffer *buffers); - - /** - * Bind an array of images that will be used by a shader. - * Any images that were previously bound to the specified range - * will be unbound. - * - * \param shader selects shader stage - * \param start_slot first image slot to bind. - * \param count number of consecutive images to bind. - * \param unbind_num_trailing_slots number of images to unbind after - * the bound slot - * \param buffers array of the images to bind, it - * should contain at least \a count elements - * unless it's NULL, in which case no images will - * be bound. - */ - void (*set_shader_images)(struct pipe_context *, - enum pipe_shader_type shader, - unsigned start_slot, unsigned count, - unsigned unbind_num_trailing_slots, - const struct pipe_image_view *images); - - /** - * Bind an array of vertex buffers to the specified slots. - * - * \param start_slot first vertex buffer slot - * \param count number of consecutive vertex buffers to bind. - * \param unbind_num_trailing_slots unbind slots after the bound slots - * \param take_ownership the caller holds buffer references and they - * should be taken over by the callee. This means - * that drivers shouldn't increment reference counts. - * \param buffers array of the buffers to bind - */ - void (*set_vertex_buffers)(struct pipe_context *, - unsigned start_slot, - unsigned num_buffers, - unsigned unbind_num_trailing_slots, - bool take_ownership, - const struct pipe_vertex_buffer *); - - /*@}*/ - - /** - * Stream output functions. - */ - /*@{*/ - - struct pipe_stream_output_target *(*create_stream_output_target)( - struct pipe_context *, - struct pipe_resource *, - unsigned buffer_offset, - unsigned buffer_size); - - void (*stream_output_target_destroy)(struct pipe_context *, - struct pipe_stream_output_target *); - - void (*set_stream_output_targets)(struct pipe_context *, - unsigned num_targets, - struct pipe_stream_output_target **targets, - const unsigned *offsets); - - uint32_t (*stream_output_target_offset)(struct pipe_stream_output_target *target); - - /*@}*/ - - - /** - * INTEL_blackhole_render - */ - /*@{*/ - - void (*set_frontend_noop)(struct pipe_context *, - bool enable); - - /*@}*/ - - - /** - * Resource functions for blit-like functionality - * - * If a driver supports multisampling, blit must implement color resolve. - */ - /*@{*/ - - /** - * Copy a block of pixels from one resource to another. - * The resource must be of the same format. - * Resources with nr_samples > 1 are not allowed. - */ - void (*resource_copy_region)(struct pipe_context *pipe, - struct pipe_resource *dst, - unsigned dst_level, - unsigned dstx, unsigned dsty, unsigned dstz, - struct pipe_resource *src, - unsigned src_level, - const struct pipe_box *src_box); - - /* Optimal hardware path for blitting pixels. - * Scaling, format conversion, up- and downsampling (resolve) are allowed. - */ - void (*blit)(struct pipe_context *pipe, - const struct pipe_blit_info *info); - - /*@}*/ - - /** - * Clear the specified set of currently bound buffers to specified values. - * The entire buffers are cleared (no scissor, no colormask, etc). - * - * \param buffers bitfield of PIPE_CLEAR_* values. - * \param scissor_state the scissored region to clear - * \param color pointer to a union of fiu array for each of r, g, b, a. - * \param depth depth clear value in [0,1]. - * \param stencil stencil clear value - */ - void (*clear)(struct pipe_context *pipe, - unsigned buffers, - const struct pipe_scissor_state *scissor_state, - const union pipe_color_union *color, - double depth, - unsigned stencil); - - /** - * Clear a color rendertarget surface. - * \param color pointer to an union of fiu array for each of r, g, b, a. - */ - void (*clear_render_target)(struct pipe_context *pipe, - struct pipe_surface *dst, - const union pipe_color_union *color, - unsigned dstx, unsigned dsty, - unsigned width, unsigned height, - bool render_condition_enabled); - - /** - * Clear a depth-stencil surface. - * \param clear_flags bitfield of PIPE_CLEAR_DEPTH/STENCIL values. - * \param depth depth clear value in [0,1]. - * \param stencil stencil clear value - */ - void (*clear_depth_stencil)(struct pipe_context *pipe, - struct pipe_surface *dst, - unsigned clear_flags, - double depth, - unsigned stencil, - unsigned dstx, unsigned dsty, - unsigned width, unsigned height, - bool render_condition_enabled); - - /** - * Clear the texture with the specified texel. Not guaranteed to be a - * renderable format. Data provided in the resource's format. - */ - void (*clear_texture)(struct pipe_context *pipe, - struct pipe_resource *res, - unsigned level, - const struct pipe_box *box, - const void *data); - - /** - * Clear a buffer. Runs a memset over the specified region with the element - * value passed in through clear_value of size clear_value_size. - */ - void (*clear_buffer)(struct pipe_context *pipe, - struct pipe_resource *res, - unsigned offset, - unsigned size, - const void *clear_value, - int clear_value_size); - - /** - * If a depth buffer is rendered with different sample location state than - * what is current at the time of reading, the values may differ because - * depth buffer compression can depend the sample locations. - * - * This function is a hint to decompress the current depth buffer to avoid - * such problems. - */ - void (*evaluate_depth_buffer)(struct pipe_context *pipe); - - /** - * Flush draw commands. - * - * This guarantees that the new fence (if any) will finish in finite time, - * unless PIPE_FLUSH_DEFERRED is used. - * - * Subsequent operations on other contexts of the same screen are guaranteed - * to execute after the flushed commands, unless PIPE_FLUSH_ASYNC is used. - * - * NOTE: use screen->fence_reference() (or equivalent) to transfer - * new fence ref to **fence, to ensure that previous fence is unref'd - * - * \param fence if not NULL, an old fence to unref and transfer a - * new fence reference to - * \param flags bitfield of enum pipe_flush_flags values. - */ - void (*flush)(struct pipe_context *pipe, - struct pipe_fence_handle **fence, - unsigned flags); - - /** - * Create a fence from a fd. - * - * This is used for importing a foreign/external fence fd. - * - * \param fence if not NULL, an old fence to unref and transfer a - * new fence reference to - * \param fd fd representing the fence object - * \param type indicates which fence types backs fd - */ - void (*create_fence_fd)(struct pipe_context *pipe, - struct pipe_fence_handle **fence, - int fd, - enum pipe_fd_type type); - - /** - * Insert commands to have GPU wait for fence to be signaled. - */ - void (*fence_server_sync)(struct pipe_context *pipe, - struct pipe_fence_handle *fence); - - /** - * Insert commands to have the GPU signal a fence. - */ - void (*fence_server_signal)(struct pipe_context *pipe, - struct pipe_fence_handle *fence); - - /** - * Create a view on a texture to be used by a shader stage. - */ - struct pipe_sampler_view * (*create_sampler_view)(struct pipe_context *ctx, - struct pipe_resource *texture, - const struct pipe_sampler_view *templat); - - /** - * Destroy a view on a texture. - * - * \param ctx the current context - * \param view the view to be destroyed - * - * \note The current context may not be the context in which the view was - * created (view->context). However, the caller must guarantee that - * the context which created the view is still alive. - */ - void (*sampler_view_destroy)(struct pipe_context *ctx, - struct pipe_sampler_view *view); - - - /** - * Get a surface which is a "view" into a resource, used by - * render target / depth stencil stages. - */ - struct pipe_surface *(*create_surface)(struct pipe_context *ctx, - struct pipe_resource *resource, - const struct pipe_surface *templat); - - void (*surface_destroy)(struct pipe_context *ctx, - struct pipe_surface *); - - - /** - * Map a resource. - * - * Transfers are (by default) context-private and allow uploads to be - * interleaved with rendering. - * - * out_transfer will contain the transfer object that must be passed - * to all the other transfer functions. It also contains useful - * information (like texture strides for texture_map). - */ - void *(*buffer_map)(struct pipe_context *, - struct pipe_resource *resource, - unsigned level, - unsigned usage, /* a combination of PIPE_MAP_x */ - const struct pipe_box *, - struct pipe_transfer **out_transfer); - - /* If transfer was created with WRITE|FLUSH_EXPLICIT, only the - * regions specified with this call are guaranteed to be written to - * the resource. - */ - void (*transfer_flush_region)(struct pipe_context *, - struct pipe_transfer *transfer, - const struct pipe_box *); - - void (*buffer_unmap)(struct pipe_context *, - struct pipe_transfer *transfer); - - void *(*texture_map)(struct pipe_context *, - struct pipe_resource *resource, - unsigned level, - unsigned usage, /* a combination of PIPE_MAP_x */ - const struct pipe_box *, - struct pipe_transfer **out_transfer); - - void (*texture_unmap)(struct pipe_context *, - struct pipe_transfer *transfer); - - /* One-shot transfer operation with data supplied in a user - * pointer. - */ - void (*buffer_subdata)(struct pipe_context *, - struct pipe_resource *, - unsigned usage, /* a combination of PIPE_MAP_x */ - unsigned offset, - unsigned size, - const void *data); - - void (*texture_subdata)(struct pipe_context *, - struct pipe_resource *, - unsigned level, - unsigned usage, /* a combination of PIPE_MAP_x */ - const struct pipe_box *, - const void *data, - unsigned stride, - unsigned layer_stride); - - /** - * Flush any pending framebuffer writes and invalidate texture caches. - */ - void (*texture_barrier)(struct pipe_context *, unsigned flags); - - /** - * Flush caches according to flags. - */ - void (*memory_barrier)(struct pipe_context *, unsigned flags); - - /** - * Change the commitment status of a part of the given resource, which must - * have been created with the PIPE_RESOURCE_FLAG_SPARSE bit. - * - * \param level The texture level whose commitment should be changed. - * \param box The region of the resource whose commitment should be changed. - * \param commit Whether memory should be committed or un-committed. - * - * \return false if out of memory, true on success. - */ - bool (*resource_commit)(struct pipe_context *, struct pipe_resource *, - unsigned level, struct pipe_box *box, bool commit); - - /** - * Creates a video codec for a specific video format/profile - */ - struct pipe_video_codec *(*create_video_codec)(struct pipe_context *context, - const struct pipe_video_codec *templat); - - /** - * Creates a video buffer as decoding target - */ - struct pipe_video_buffer *(*create_video_buffer)(struct pipe_context *context, - const struct pipe_video_buffer *templat); - - /** - * Compute kernel execution - */ - /*@{*/ - /** - * Define the compute program and parameters to be used by - * pipe_context::launch_grid. - */ - void *(*create_compute_state)(struct pipe_context *context, - const struct pipe_compute_state *); - void (*bind_compute_state)(struct pipe_context *, void *); - void (*delete_compute_state)(struct pipe_context *, void *); - - void (*get_compute_state_info)(struct pipe_context *, void *, - struct pipe_compute_state_object_info *); - - /** - * Bind an array of shader resources that will be used by the - * compute program. Any resources that were previously bound to - * the specified range will be unbound after this call. - * - * \param start first resource to bind. - * \param count number of consecutive resources to bind. - * \param resources array of pointers to the resources to bind, it - * should contain at least \a count elements - * unless it's NULL, in which case no new - * resources will be bound. - */ - void (*set_compute_resources)(struct pipe_context *, - unsigned start, unsigned count, - struct pipe_surface **resources); - - /** - * Bind an array of buffers to be mapped into the address space of - * the GLOBAL resource. Any buffers that were previously bound - * between [first, first + count - 1] are unbound after this call. - * - * \param first first buffer to map. - * \param count number of consecutive buffers to map. - * \param resources array of pointers to the buffers to map, it - * should contain at least \a count elements - * unless it's NULL, in which case no new - * resources will be bound. - * \param handles array of pointers to the memory locations that - * will be updated with the address each buffer - * will be mapped to. The base memory address of - * each of the buffers will be added to the value - * pointed to by its corresponding handle to form - * the final address argument. It should contain - * at least \a count elements, unless \a - * resources is NULL in which case \a handles - * should be NULL as well. - * - * Note that the driver isn't required to make any guarantees about - * the contents of the \a handles array being valid anytime except - * during the subsequent calls to pipe_context::launch_grid. This - * means that the only sensible location handles[i] may point to is - * somewhere within the INPUT buffer itself. This is so to - * accommodate implementations that lack virtual memory but - * nevertheless migrate buffers on the fly, leading to resource - * base addresses that change on each kernel invocation or are - * unknown to the pipe driver. - */ - void (*set_global_binding)(struct pipe_context *context, - unsigned first, unsigned count, - struct pipe_resource **resources, - uint32_t **handles); - - /** - * Launch the compute kernel starting from instruction \a pc of the - * currently bound compute program. - */ - void (*launch_grid)(struct pipe_context *context, - const struct pipe_grid_info *info); - /*@}*/ - - /** - * SVM (Share Virtual Memory) helpers - */ - /*@{*/ - /** - * Migrate range of virtual address to device or host memory. - * - * \param to_device - true if the virtual memory is migrated to the device - * false if the virtual memory is migrated to the host - * \param migrate_content - whether the content should be migrated as well - */ - void (*svm_migrate)(struct pipe_context *context, unsigned num_ptrs, - const void* const* ptrs, const size_t *sizes, - bool to_device, bool migrate_content); - /*@}*/ - - /** - * Get the default sample position for an individual sample point. - * - * \param sample_count - total number of samples - * \param sample_index - sample to get the position values for - * \param out_value - return value of 2 floats for x and y position for - * requested sample. - */ - void (*get_sample_position)(struct pipe_context *context, - unsigned sample_count, - unsigned sample_index, - float *out_value); - - /** - * Query a timestamp in nanoseconds. This is completely equivalent to - * pipe_screen::get_timestamp() but takes a context handle for drivers - * that require a context. - */ - uint64_t (*get_timestamp)(struct pipe_context *); - - /** - * Flush the resource cache, so that the resource can be used - * by an external client. Possible usage: - * - flushing a resource before presenting it on the screen - * - flushing a resource if some other process or device wants to use it - * This shouldn't be used to flush caches if the resource is only managed - * by a single pipe_screen and is not shared with another process. - * (i.e. you shouldn't use it to flush caches explicitly if you want to e.g. - * use the resource for texturing) - */ - void (*flush_resource)(struct pipe_context *ctx, - struct pipe_resource *resource); - - /** - * Invalidate the contents of the resource. This is used to - * - * (1) implement EGL's semantic of undefined depth/stencil - * contents after a swapbuffers. This allows a tiled renderer (for - * example) to not store the depth buffer. - * - * (2) implement GL's InvalidateBufferData. For backwards compatibility, - * you must only rely on the usability for this purpose when - * PIPE_CAP_INVALIDATE_BUFFER is enabled. - */ - void (*invalidate_resource)(struct pipe_context *ctx, - struct pipe_resource *resource); - - /** - * Return information about unexpected device resets. - */ - enum pipe_reset_status (*get_device_reset_status)(struct pipe_context *ctx); - - /** - * Sets the reset status callback. If the pointer is null, then no callback - * is set, otherwise a copy of the data should be made. - */ - void (*set_device_reset_callback)(struct pipe_context *ctx, - const struct pipe_device_reset_callback *cb); - - /** - * Dump driver-specific debug information into a stream. This is - * used by debugging tools. - * - * \param ctx pipe context - * \param stream where the output should be written to - * \param flags a mask of PIPE_DUMP_* flags - */ - void (*dump_debug_state)(struct pipe_context *ctx, FILE *stream, - unsigned flags); - - /** - * Set the log context to which the driver should write internal debug logs - * (internal states, command streams). - * - * The caller must ensure that the log context is destroyed and reset to - * NULL before the pipe context is destroyed, and that log context functions - * are only called from the driver thread. - * - * \param ctx pipe context - * \param log logging context - */ - void (*set_log_context)(struct pipe_context *ctx, struct u_log_context *log); - - /** - * Emit string marker in cmdstream - */ - void (*emit_string_marker)(struct pipe_context *ctx, - const char *string, - int len); - - /** - * Generate mipmap. - * \return TRUE if mipmap generation succeeds, FALSE otherwise - */ - bool (*generate_mipmap)(struct pipe_context *ctx, - struct pipe_resource *resource, - enum pipe_format format, - unsigned base_level, - unsigned last_level, - unsigned first_layer, - unsigned last_layer); - - /** - * Create a 64-bit texture handle. - * - * \param ctx pipe context - * \param view pipe sampler view object - * \param state pipe sampler state template - * \return a 64-bit texture handle if success, 0 otherwise - */ - uint64_t (*create_texture_handle)(struct pipe_context *ctx, - struct pipe_sampler_view *view, - const struct pipe_sampler_state *state); - - /** - * Delete a texture handle. - * - * \param ctx pipe context - * \param handle 64-bit texture handle - */ - void (*delete_texture_handle)(struct pipe_context *ctx, uint64_t handle); - - /** - * Make a texture handle resident. - * - * \param ctx pipe context - * \param handle 64-bit texture handle - * \param resident TRUE for resident, FALSE otherwise - */ - void (*make_texture_handle_resident)(struct pipe_context *ctx, - uint64_t handle, bool resident); - - /** - * Create a 64-bit image handle. - * - * \param ctx pipe context - * \param image pipe image view template - * \return a 64-bit image handle if success, 0 otherwise - */ - uint64_t (*create_image_handle)(struct pipe_context *ctx, - const struct pipe_image_view *image); - - /** - * Delete an image handle. - * - * \param ctx pipe context - * \param handle 64-bit image handle - */ - void (*delete_image_handle)(struct pipe_context *ctx, uint64_t handle); - - /** - * Make an image handle resident. - * - * \param ctx pipe context - * \param handle 64-bit image handle - * \param access GL_READ_ONLY, GL_WRITE_ONLY or GL_READ_WRITE - * \param resident TRUE for resident, FALSE otherwise - */ - void (*make_image_handle_resident)(struct pipe_context *ctx, uint64_t handle, - unsigned access, bool resident); - - /** - * Call the given function from the driver thread. - * - * This is set by threaded contexts for use by debugging wrappers. - * - * \param asap if true, run the callback immediately if there are no pending - * commands to be processed by the driver thread - */ - void (*callback)(struct pipe_context *ctx, void (*fn)(void *), void *data, - bool asap); - - /** - * Set a context parameter See enum pipe_context_param for more details. - */ - void (*set_context_param)(struct pipe_context *ctx, - enum pipe_context_param param, - unsigned value); - - /** - * Creates a video buffer as decoding target, with modifiers. - */ - struct pipe_video_buffer *(*create_video_buffer_with_modifiers)(struct pipe_context *context, - const struct pipe_video_buffer *templat, - const uint64_t *modifiers, - unsigned int modifiers_count); - - /** - * Creates a video buffer as decoding target, from external memory - */ - struct pipe_video_buffer *(*video_buffer_from_handle)( struct pipe_context *context, - const struct pipe_video_buffer *templat, - struct winsys_handle *handle, - unsigned usage ); - -}; - - -#ifdef __cplusplus -} -#endif - -#endif /* PIPE_CONTEXT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_defines.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_defines.h deleted file mode 100644 index 5792868..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_defines.h +++ /dev/null @@ -1,1413 +0,0 @@ -/************************************************************************** - * - * Copyright 2007 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef PIPE_DEFINES_H -#define PIPE_DEFINES_H - -#include "p_compiler.h" - -#include "../../../compiler/shader_enums.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Gallium error codes. - * - * - A zero value always means success. - * - A negative value always means failure. - * - The meaning of a positive value is function dependent. - */ -enum pipe_error -{ - PIPE_OK = 0, - PIPE_ERROR = -1, /**< Generic error */ - PIPE_ERROR_BAD_INPUT = -2, - PIPE_ERROR_OUT_OF_MEMORY = -3, - PIPE_ERROR_RETRY = -4 - /* TODO */ -}; - -enum pipe_blendfactor { - PIPE_BLENDFACTOR_ONE = 1, - PIPE_BLENDFACTOR_SRC_COLOR, - PIPE_BLENDFACTOR_SRC_ALPHA, - PIPE_BLENDFACTOR_DST_ALPHA, - PIPE_BLENDFACTOR_DST_COLOR, - PIPE_BLENDFACTOR_SRC_ALPHA_SATURATE, - PIPE_BLENDFACTOR_CONST_COLOR, - PIPE_BLENDFACTOR_CONST_ALPHA, - PIPE_BLENDFACTOR_SRC1_COLOR, - PIPE_BLENDFACTOR_SRC1_ALPHA, - - PIPE_BLENDFACTOR_ZERO = 0x11, - PIPE_BLENDFACTOR_INV_SRC_COLOR, - PIPE_BLENDFACTOR_INV_SRC_ALPHA, - PIPE_BLENDFACTOR_INV_DST_ALPHA, - PIPE_BLENDFACTOR_INV_DST_COLOR, - - PIPE_BLENDFACTOR_INV_CONST_COLOR = 0x17, - PIPE_BLENDFACTOR_INV_CONST_ALPHA, - PIPE_BLENDFACTOR_INV_SRC1_COLOR, - PIPE_BLENDFACTOR_INV_SRC1_ALPHA, -}; - -enum pipe_blend_func { - PIPE_BLEND_ADD, - PIPE_BLEND_SUBTRACT, - PIPE_BLEND_REVERSE_SUBTRACT, - PIPE_BLEND_MIN, - PIPE_BLEND_MAX, -}; - -enum pipe_logicop { - PIPE_LOGICOP_CLEAR, - PIPE_LOGICOP_NOR, - PIPE_LOGICOP_AND_INVERTED, - PIPE_LOGICOP_COPY_INVERTED, - PIPE_LOGICOP_AND_REVERSE, - PIPE_LOGICOP_INVERT, - PIPE_LOGICOP_XOR, - PIPE_LOGICOP_NAND, - PIPE_LOGICOP_AND, - PIPE_LOGICOP_EQUIV, - PIPE_LOGICOP_NOOP, - PIPE_LOGICOP_OR_INVERTED, - PIPE_LOGICOP_COPY, - PIPE_LOGICOP_OR_REVERSE, - PIPE_LOGICOP_OR, - PIPE_LOGICOP_SET, -}; - -#define PIPE_MASK_R 0x1 -#define PIPE_MASK_G 0x2 -#define PIPE_MASK_B 0x4 -#define PIPE_MASK_A 0x8 -#define PIPE_MASK_RGBA 0xf -#define PIPE_MASK_Z 0x10 -#define PIPE_MASK_S 0x20 -#define PIPE_MASK_ZS 0x30 -#define PIPE_MASK_RGBAZS (PIPE_MASK_RGBA|PIPE_MASK_ZS) - - -/** - * Inequality functions. Used for depth test, stencil compare, alpha - * test, shadow compare, etc. - */ -enum pipe_compare_func { - PIPE_FUNC_NEVER, - PIPE_FUNC_LESS, - PIPE_FUNC_EQUAL, - PIPE_FUNC_LEQUAL, - PIPE_FUNC_GREATER, - PIPE_FUNC_NOTEQUAL, - PIPE_FUNC_GEQUAL, - PIPE_FUNC_ALWAYS, -}; - -/** Polygon fill mode */ -enum { - PIPE_POLYGON_MODE_FILL, - PIPE_POLYGON_MODE_LINE, - PIPE_POLYGON_MODE_POINT, - PIPE_POLYGON_MODE_FILL_RECTANGLE, -}; - -/** Polygon face specification, eg for culling */ -#define PIPE_FACE_NONE 0 -#define PIPE_FACE_FRONT 1 -#define PIPE_FACE_BACK 2 -#define PIPE_FACE_FRONT_AND_BACK (PIPE_FACE_FRONT | PIPE_FACE_BACK) - -/** Stencil ops */ -enum pipe_stencil_op { - PIPE_STENCIL_OP_KEEP, - PIPE_STENCIL_OP_ZERO, - PIPE_STENCIL_OP_REPLACE, - PIPE_STENCIL_OP_INCR, - PIPE_STENCIL_OP_DECR, - PIPE_STENCIL_OP_INCR_WRAP, - PIPE_STENCIL_OP_DECR_WRAP, - PIPE_STENCIL_OP_INVERT, -}; - -/** Texture types. - * See the documentation for info on PIPE_TEXTURE_RECT vs PIPE_TEXTURE_2D - */ -enum pipe_texture_target -{ - PIPE_BUFFER, - PIPE_TEXTURE_1D, - PIPE_TEXTURE_2D, - PIPE_TEXTURE_3D, - PIPE_TEXTURE_CUBE, - PIPE_TEXTURE_RECT, - PIPE_TEXTURE_1D_ARRAY, - PIPE_TEXTURE_2D_ARRAY, - PIPE_TEXTURE_CUBE_ARRAY, - PIPE_MAX_TEXTURE_TYPES, -}; - -enum pipe_tex_face { - PIPE_TEX_FACE_POS_X, - PIPE_TEX_FACE_NEG_X, - PIPE_TEX_FACE_POS_Y, - PIPE_TEX_FACE_NEG_Y, - PIPE_TEX_FACE_POS_Z, - PIPE_TEX_FACE_NEG_Z, - PIPE_TEX_FACE_MAX, -}; - -enum pipe_tex_wrap { - PIPE_TEX_WRAP_REPEAT, - PIPE_TEX_WRAP_CLAMP, - PIPE_TEX_WRAP_CLAMP_TO_EDGE, - PIPE_TEX_WRAP_CLAMP_TO_BORDER, - PIPE_TEX_WRAP_MIRROR_REPEAT, - PIPE_TEX_WRAP_MIRROR_CLAMP, - PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE, - PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER, -}; - -/** Between mipmaps, ie mipfilter */ -enum pipe_tex_mipfilter { - PIPE_TEX_MIPFILTER_NEAREST, - PIPE_TEX_MIPFILTER_LINEAR, - PIPE_TEX_MIPFILTER_NONE, -}; - -/** Within a mipmap, ie min/mag filter */ -enum pipe_tex_filter { - PIPE_TEX_FILTER_NEAREST, - PIPE_TEX_FILTER_LINEAR, -}; - -enum pipe_tex_compare { - PIPE_TEX_COMPARE_NONE, - PIPE_TEX_COMPARE_R_TO_TEXTURE, -}; - -enum pipe_tex_reduction_mode { - PIPE_TEX_REDUCTION_WEIGHTED_AVERAGE, - PIPE_TEX_REDUCTION_MIN, - PIPE_TEX_REDUCTION_MAX, -}; - -/** - * Clear buffer bits - */ -#define PIPE_CLEAR_DEPTH (1 << 0) -#define PIPE_CLEAR_STENCIL (1 << 1) -#define PIPE_CLEAR_COLOR0 (1 << 2) -#define PIPE_CLEAR_COLOR1 (1 << 3) -#define PIPE_CLEAR_COLOR2 (1 << 4) -#define PIPE_CLEAR_COLOR3 (1 << 5) -#define PIPE_CLEAR_COLOR4 (1 << 6) -#define PIPE_CLEAR_COLOR5 (1 << 7) -#define PIPE_CLEAR_COLOR6 (1 << 8) -#define PIPE_CLEAR_COLOR7 (1 << 9) -/** Combined flags */ -/** All color buffers currently bound */ -#define PIPE_CLEAR_COLOR (PIPE_CLEAR_COLOR0 | PIPE_CLEAR_COLOR1 | \ - PIPE_CLEAR_COLOR2 | PIPE_CLEAR_COLOR3 | \ - PIPE_CLEAR_COLOR4 | PIPE_CLEAR_COLOR5 | \ - PIPE_CLEAR_COLOR6 | PIPE_CLEAR_COLOR7) -#define PIPE_CLEAR_DEPTHSTENCIL (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL) - -/** - * CPU access map flags - */ -enum pipe_map_flags -{ - /** - * Resource contents read back (or accessed directly) at transfer - * create time. - */ - PIPE_MAP_READ = 1 << 0, - - /** - * Resource contents will be written back at buffer/texture_unmap - * time (or modified as a result of being accessed directly). - */ - PIPE_MAP_WRITE = 1 << 1, - - /** - * Read/modify/write - */ - PIPE_MAP_READ_WRITE = PIPE_MAP_READ | PIPE_MAP_WRITE, - - /** - * The transfer should map the texture storage directly. The driver may - * return NULL if that isn't possible, and the gallium frontend needs to cope - * with that and use an alternative path without this flag. - * - * E.g. the gallium frontend could have a simpler path which maps textures and - * does read/modify/write cycles on them directly, and a more complicated - * path which uses minimal read and write transfers. - * - * This flag supresses implicit "DISCARD" for buffer_subdata. - */ - PIPE_MAP_DIRECTLY = 1 << 2, - - /** - * Discards the memory within the mapped region. - * - * It should not be used with PIPE_MAP_READ. - * - * See also: - * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_RANGE_BIT flag. - */ - PIPE_MAP_DISCARD_RANGE = 1 << 3, - - /** - * Fail if the resource cannot be mapped immediately. - * - * See also: - * - Direct3D's D3DLOCK_DONOTWAIT flag. - * - Mesa's MESA_MAP_NOWAIT_BIT flag. - * - WDDM's D3DDDICB_LOCKFLAGS.DonotWait flag. - */ - PIPE_MAP_DONTBLOCK = 1 << 4, - - /** - * Do not attempt to synchronize pending operations on the resource when mapping. - * - * It should not be used with PIPE_MAP_READ. - * - * See also: - * - OpenGL's ARB_map_buffer_range extension, MAP_UNSYNCHRONIZED_BIT flag. - * - Direct3D's D3DLOCK_NOOVERWRITE flag. - * - WDDM's D3DDDICB_LOCKFLAGS.IgnoreSync flag. - */ - PIPE_MAP_UNSYNCHRONIZED = 1 << 5, - - /** - * Written ranges will be notified later with - * pipe_context::transfer_flush_region. - * - * It should not be used with PIPE_MAP_READ. - * - * See also: - * - pipe_context::transfer_flush_region - * - OpenGL's ARB_map_buffer_range extension, MAP_FLUSH_EXPLICIT_BIT flag. - */ - PIPE_MAP_FLUSH_EXPLICIT = 1 << 6, - - /** - * Discards all memory backing the resource. - * - * It should not be used with PIPE_MAP_READ. - * - * This is equivalent to: - * - OpenGL's ARB_map_buffer_range extension, MAP_INVALIDATE_BUFFER_BIT - * - BufferData(NULL) on a GL buffer - * - Direct3D's D3DLOCK_DISCARD flag. - * - WDDM's D3DDDICB_LOCKFLAGS.Discard flag. - * - D3D10 DDI's D3D10_DDI_MAP_WRITE_DISCARD flag - * - D3D10's D3D10_MAP_WRITE_DISCARD flag. - */ - PIPE_MAP_DISCARD_WHOLE_RESOURCE = 1 << 7, - - /** - * Allows the resource to be used for rendering while mapped. - * - * PIPE_RESOURCE_FLAG_MAP_PERSISTENT must be set when creating - * the resource. - * - * If COHERENT is not set, memory_barrier(PIPE_BARRIER_MAPPED_BUFFER) - * must be called to ensure the device can see what the CPU has written. - */ - PIPE_MAP_PERSISTENT = 1 << 8, - - /** - * If PERSISTENT is set, this ensures any writes done by the device are - * immediately visible to the CPU and vice versa. - * - * PIPE_RESOURCE_FLAG_MAP_COHERENT must be set when creating - * the resource. - */ - PIPE_MAP_COHERENT = 1 << 9, - - /** - * Map a resource in a thread-safe manner, because the calling thread can - * be any thread. It can only be used if both WRITE and UNSYNCHRONIZED are - * set. - */ - PIPE_MAP_THREAD_SAFE = 1 << 10, - - /** - * Map only the depth aspect of a resource - */ - PIPE_MAP_DEPTH_ONLY = 1 << 11, - - /** - * Map only the stencil aspect of a resource - */ - PIPE_MAP_STENCIL_ONLY = 1 << 12, - - /** - * Mapping will be used only once (never remapped). - */ - PIPE_MAP_ONCE = 1 << 13, - - /** - * This and higher bits are reserved for private use by drivers. Drivers - * should use this as (PIPE_MAP_DRV_PRV << i). - */ - PIPE_MAP_DRV_PRV = 1 << 14, -}; - -/** - * Flags for the flush function. - */ -enum pipe_flush_flags -{ - PIPE_FLUSH_END_OF_FRAME = (1 << 0), - PIPE_FLUSH_DEFERRED = (1 << 1), - PIPE_FLUSH_FENCE_FD = (1 << 2), - PIPE_FLUSH_ASYNC = (1 << 3), - PIPE_FLUSH_HINT_FINISH = (1 << 4), - PIPE_FLUSH_TOP_OF_PIPE = (1 << 5), - PIPE_FLUSH_BOTTOM_OF_PIPE = (1 << 6), -}; - -/** - * Flags for pipe_context::dump_debug_state. - */ -#define PIPE_DUMP_DEVICE_STATUS_REGISTERS (1 << 0) - -/** - * Create a compute-only context. Use in pipe_screen::context_create. - * This disables draw, blit, and clear*, render_condition, and other graphics - * functions. Interop with other graphics contexts is still allowed. - * This allows scheduling jobs on a compute-only hardware command queue that - * can run in parallel with graphics without stalling it. - */ -#define PIPE_CONTEXT_COMPUTE_ONLY (1 << 0) - -/** - * Gather debug information and expect that pipe_context::dump_debug_state - * will be called. Use in pipe_screen::context_create. - */ -#define PIPE_CONTEXT_DEBUG (1 << 1) - -/** - * Whether out-of-bounds shader loads must return zero and out-of-bounds - * shader stores must be dropped. - */ -#define PIPE_CONTEXT_ROBUST_BUFFER_ACCESS (1 << 2) - -/** - * Prefer threaded pipe_context. It also implies that video codec functions - * will not be used. (they will be either no-ops or NULL when threading is - * enabled) - */ -#define PIPE_CONTEXT_PREFER_THREADED (1 << 3) - -/** - * Create a high priority context. - */ -#define PIPE_CONTEXT_HIGH_PRIORITY (1 << 4) - -/** - * Create a low priority context. - */ -#define PIPE_CONTEXT_LOW_PRIORITY (1 << 5) - -/** Stop execution if the device is reset. */ -#define PIPE_CONTEXT_LOSE_CONTEXT_ON_RESET (1 << 6) - -/** - * Create a protected context to access protected content (surfaces, - * textures, ...) - * - * This is required to access protected images and surfaces if - * EGL_EXT_protected_surface is not supported. - */ -#define PIPE_CONTEXT_PROTECTED (1 << 7) - -/** - * Flags for pipe_context::memory_barrier. - */ -#define PIPE_BARRIER_MAPPED_BUFFER (1 << 0) -#define PIPE_BARRIER_SHADER_BUFFER (1 << 1) -#define PIPE_BARRIER_QUERY_BUFFER (1 << 2) -#define PIPE_BARRIER_VERTEX_BUFFER (1 << 3) -#define PIPE_BARRIER_INDEX_BUFFER (1 << 4) -#define PIPE_BARRIER_CONSTANT_BUFFER (1 << 5) -#define PIPE_BARRIER_INDIRECT_BUFFER (1 << 6) -#define PIPE_BARRIER_TEXTURE (1 << 7) -#define PIPE_BARRIER_IMAGE (1 << 8) -#define PIPE_BARRIER_FRAMEBUFFER (1 << 9) -#define PIPE_BARRIER_STREAMOUT_BUFFER (1 << 10) -#define PIPE_BARRIER_GLOBAL_BUFFER (1 << 11) -#define PIPE_BARRIER_UPDATE_BUFFER (1 << 12) -#define PIPE_BARRIER_UPDATE_TEXTURE (1 << 13) -#define PIPE_BARRIER_ALL ((1 << 14) - 1) - -#define PIPE_BARRIER_UPDATE \ - (PIPE_BARRIER_UPDATE_BUFFER | PIPE_BARRIER_UPDATE_TEXTURE) - -/** - * Flags for pipe_context::texture_barrier. - */ -#define PIPE_TEXTURE_BARRIER_SAMPLER (1 << 0) -#define PIPE_TEXTURE_BARRIER_FRAMEBUFFER (1 << 1) - -/** - * Resource binding flags -- gallium frontends must specify in advance all - * the ways a resource might be used. - */ -#define PIPE_BIND_DEPTH_STENCIL (1 << 0) /* create_surface */ -#define PIPE_BIND_RENDER_TARGET (1 << 1) /* create_surface */ -#define PIPE_BIND_BLENDABLE (1 << 2) /* create_surface */ -#define PIPE_BIND_SAMPLER_VIEW (1 << 3) /* create_sampler_view */ -#define PIPE_BIND_VERTEX_BUFFER (1 << 4) /* set_vertex_buffers */ -#define PIPE_BIND_INDEX_BUFFER (1 << 5) /* draw_elements */ -#define PIPE_BIND_CONSTANT_BUFFER (1 << 6) /* set_constant_buffer */ -#define PIPE_BIND_DISPLAY_TARGET (1 << 7) /* flush_front_buffer */ -#define PIPE_BIND_VERTEX_STATE (1 << 8) /* create_vertex_state */ -/* gap */ -#define PIPE_BIND_STREAM_OUTPUT (1 << 10) /* set_stream_output_buffers */ -#define PIPE_BIND_CURSOR (1 << 11) /* mouse cursor */ -#define PIPE_BIND_CUSTOM (1 << 12) /* gallium frontend/winsys usages */ -#define PIPE_BIND_GLOBAL (1 << 13) /* set_global_binding */ -#define PIPE_BIND_SHADER_BUFFER (1 << 14) /* set_shader_buffers */ -#define PIPE_BIND_SHADER_IMAGE (1 << 15) /* set_shader_images */ -#define PIPE_BIND_COMPUTE_RESOURCE (1 << 16) /* set_compute_resources */ -#define PIPE_BIND_COMMAND_ARGS_BUFFER (1 << 17) /* pipe_draw_info.indirect */ -#define PIPE_BIND_QUERY_BUFFER (1 << 18) /* get_query_result_resource */ - -/** - * The first two flags above were previously part of the amorphous - * TEXTURE_USAGE, most of which are now descriptions of the ways a - * particular texture can be bound to the gallium pipeline. The two flags - * below do not fit within that and probably need to be migrated to some - * other place. - * - * Scanout is used to ask for a texture suitable for actual scanout (hence - * the name), which implies extra layout constraints on some hardware. - * It may also have some special meaning regarding mouse cursor images. - * - * The shared flag is quite underspecified, but certainly isn't a - * binding flag - it seems more like a message to the winsys to create - * a shareable allocation. - * - * The third flag has been added to be able to force textures to be created - * in linear mode (no tiling). - */ -#define PIPE_BIND_SCANOUT (1 << 19) /* */ -#define PIPE_BIND_SHARED (1 << 20) /* get_texture_handle ??? */ -#define PIPE_BIND_LINEAR (1 << 21) -#define PIPE_BIND_PROTECTED (1 << 22) /* Resource will be protected/encrypted */ -#define PIPE_BIND_SAMPLER_REDUCTION_MINMAX (1 << 23) /* PIPE_CAP_SAMPLER_REDUCTION_MINMAX */ -/* Resource is the DRI_PRIME blit destination. Only set on on the render GPU. */ -#define PIPE_BIND_PRIME_BLIT_DST (1 << 24) -#define PIPE_BIND_USE_FRONT_RENDERING (1 << 25) /* Resource may be used for frontbuffer rendering */ - - -/** - * Flags for the driver about resource behaviour: - */ -#define PIPE_RESOURCE_FLAG_MAP_PERSISTENT (1 << 0) -#define PIPE_RESOURCE_FLAG_MAP_COHERENT (1 << 1) -#define PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY (1 << 2) -#define PIPE_RESOURCE_FLAG_SPARSE (1 << 3) -#define PIPE_RESOURCE_FLAG_SINGLE_THREAD_USE (1 << 4) -#define PIPE_RESOURCE_FLAG_ENCRYPTED (1 << 5) -#define PIPE_RESOURCE_FLAG_DONT_OVER_ALLOCATE (1 << 6) -#define PIPE_RESOURCE_FLAG_DONT_MAP_DIRECTLY (1 << 7) /* for small visible VRAM */ -#define PIPE_RESOURCE_FLAG_UNMAPPABLE (1 << 8) /* implies staging transfers due to VK interop */ -#define PIPE_RESOURCE_FLAG_DRV_PRIV (1 << 9) /* driver/winsys private */ -#define PIPE_RESOURCE_FLAG_FRONTEND_PRIV (1 << 24) /* gallium frontend private */ - -/** - * Hint about the expected lifecycle of a resource. - * Sorted according to GPU vs CPU access. - */ -enum pipe_resource_usage { - PIPE_USAGE_DEFAULT, /* fast GPU access */ - PIPE_USAGE_IMMUTABLE, /* fast GPU access, immutable */ - PIPE_USAGE_DYNAMIC, /* uploaded data is used multiple times */ - PIPE_USAGE_STREAM, /* uploaded data is used once */ - PIPE_USAGE_STAGING, /* fast CPU access */ -}; - -/** - * Primitive types: - */ -enum PACKED pipe_prim_type { - PIPE_PRIM_POINTS, - PIPE_PRIM_LINES, - PIPE_PRIM_LINE_LOOP, - PIPE_PRIM_LINE_STRIP, - PIPE_PRIM_TRIANGLES, - PIPE_PRIM_TRIANGLE_STRIP, - PIPE_PRIM_TRIANGLE_FAN, - PIPE_PRIM_QUADS, - PIPE_PRIM_QUAD_STRIP, - PIPE_PRIM_POLYGON, - PIPE_PRIM_LINES_ADJACENCY, - PIPE_PRIM_LINE_STRIP_ADJACENCY, - PIPE_PRIM_TRIANGLES_ADJACENCY, - PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY, - PIPE_PRIM_PATCHES, - PIPE_PRIM_MAX, -}; - -/** - * Tessellator spacing types - */ -enum pipe_tess_spacing { - PIPE_TESS_SPACING_FRACTIONAL_ODD, - PIPE_TESS_SPACING_FRACTIONAL_EVEN, - PIPE_TESS_SPACING_EQUAL, -}; - -/** - * Query object types - */ -enum pipe_query_type { - PIPE_QUERY_OCCLUSION_COUNTER, - PIPE_QUERY_OCCLUSION_PREDICATE, - PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE, - PIPE_QUERY_TIMESTAMP, - PIPE_QUERY_TIMESTAMP_DISJOINT, - PIPE_QUERY_TIME_ELAPSED, - PIPE_QUERY_PRIMITIVES_GENERATED, - PIPE_QUERY_PRIMITIVES_EMITTED, - PIPE_QUERY_SO_STATISTICS, - PIPE_QUERY_SO_OVERFLOW_PREDICATE, - PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE, - PIPE_QUERY_GPU_FINISHED, - PIPE_QUERY_PIPELINE_STATISTICS, - PIPE_QUERY_PIPELINE_STATISTICS_SINGLE, - PIPE_QUERY_TYPES, - /* start of driver queries, see pipe_screen::get_driver_query_info */ - PIPE_QUERY_DRIVER_SPECIFIC = 256, -}; - -/** - * Index for PIPE_QUERY_PIPELINE_STATISTICS subqueries. - */ -enum pipe_statistics_query_index { - PIPE_STAT_QUERY_IA_VERTICES, - PIPE_STAT_QUERY_IA_PRIMITIVES, - PIPE_STAT_QUERY_VS_INVOCATIONS, - PIPE_STAT_QUERY_GS_INVOCATIONS, - PIPE_STAT_QUERY_GS_PRIMITIVES, - PIPE_STAT_QUERY_C_INVOCATIONS, - PIPE_STAT_QUERY_C_PRIMITIVES, - PIPE_STAT_QUERY_PS_INVOCATIONS, - PIPE_STAT_QUERY_HS_INVOCATIONS, - PIPE_STAT_QUERY_DS_INVOCATIONS, - PIPE_STAT_QUERY_CS_INVOCATIONS, -}; - -/** - * Conditional rendering modes - */ -enum pipe_render_cond_flag { - PIPE_RENDER_COND_WAIT, - PIPE_RENDER_COND_NO_WAIT, - PIPE_RENDER_COND_BY_REGION_WAIT, - PIPE_RENDER_COND_BY_REGION_NO_WAIT, -}; - -/** - * Point sprite coord modes - */ -enum pipe_sprite_coord_mode { - PIPE_SPRITE_COORD_UPPER_LEFT, - PIPE_SPRITE_COORD_LOWER_LEFT, -}; - -/** - * Texture & format swizzles - */ -enum pipe_swizzle { - PIPE_SWIZZLE_X, - PIPE_SWIZZLE_Y, - PIPE_SWIZZLE_Z, - PIPE_SWIZZLE_W, - PIPE_SWIZZLE_0, - PIPE_SWIZZLE_1, - PIPE_SWIZZLE_NONE, - PIPE_SWIZZLE_MAX, /**< Number of enums counter (must be last) */ -}; - -/** - * Viewport swizzles - */ -enum pipe_viewport_swizzle { - PIPE_VIEWPORT_SWIZZLE_POSITIVE_X, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_X, - PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_Y, - PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_Z, - PIPE_VIEWPORT_SWIZZLE_POSITIVE_W, - PIPE_VIEWPORT_SWIZZLE_NEGATIVE_W, -}; - -#define PIPE_TIMEOUT_INFINITE 0xffffffffffffffffull - - -/** - * Device reset status. - */ -enum pipe_reset_status -{ - PIPE_NO_RESET, - PIPE_GUILTY_CONTEXT_RESET, - PIPE_INNOCENT_CONTEXT_RESET, - PIPE_UNKNOWN_CONTEXT_RESET, -}; - - -/** - * Conservative rasterization modes. - */ -enum pipe_conservative_raster_mode -{ - PIPE_CONSERVATIVE_RASTER_OFF, - - /** - * The post-snap mode means the conservative rasterization occurs after - * the conversion from floating-point to fixed-point coordinates - * on the subpixel grid. - */ - PIPE_CONSERVATIVE_RASTER_POST_SNAP, - - /** - * The pre-snap mode means the conservative rasterization occurs before - * the conversion from floating-point to fixed-point coordinates. - */ - PIPE_CONSERVATIVE_RASTER_PRE_SNAP, -}; - - -/** - * resource_get_handle flags. - */ -/* Requires pipe_context::flush_resource before external use. */ -#define PIPE_HANDLE_USAGE_EXPLICIT_FLUSH (1 << 0) -/* Expected external use of the resource: */ -#define PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE (1 << 1) -#define PIPE_HANDLE_USAGE_SHADER_WRITE (1 << 2) - -/** - * pipe_image_view access flags. - */ -#define PIPE_IMAGE_ACCESS_READ (1 << 0) -#define PIPE_IMAGE_ACCESS_WRITE (1 << 1) -#define PIPE_IMAGE_ACCESS_READ_WRITE (PIPE_IMAGE_ACCESS_READ | \ - PIPE_IMAGE_ACCESS_WRITE) -#define PIPE_IMAGE_ACCESS_COHERENT (1 << 2) -#define PIPE_IMAGE_ACCESS_VOLATILE (1 << 3) -#define PIPE_IMAGE_ACCESS_TEX2D_FROM_BUFFER (1 << 4) - -/** - * Implementation capabilities/limits which are queried through - * pipe_screen::get_param() - */ -enum pipe_cap -{ - PIPE_CAP_GRAPHICS, - PIPE_CAP_NPOT_TEXTURES, - PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS, - PIPE_CAP_ANISOTROPIC_FILTER, - PIPE_CAP_MAX_RENDER_TARGETS, - PIPE_CAP_OCCLUSION_QUERY, - PIPE_CAP_QUERY_TIME_ELAPSED, - PIPE_CAP_TEXTURE_SHADOW_MAP, - PIPE_CAP_TEXTURE_SWIZZLE, - PIPE_CAP_MAX_TEXTURE_2D_SIZE, - PIPE_CAP_MAX_TEXTURE_3D_LEVELS, - PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS, - PIPE_CAP_TEXTURE_MIRROR_CLAMP, - PIPE_CAP_BLEND_EQUATION_SEPARATE, - PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS, - PIPE_CAP_PRIMITIVE_RESTART, - /** subset of PRIMITIVE_RESTART where the restart index is always the fixed - * maximum value for the index type - */ - PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX, - /** blend enables and write masks per rendertarget */ - PIPE_CAP_INDEP_BLEND_ENABLE, - /** different blend funcs per rendertarget */ - PIPE_CAP_INDEP_BLEND_FUNC, - PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS, - PIPE_CAP_FS_COORD_ORIGIN_UPPER_LEFT, - PIPE_CAP_FS_COORD_ORIGIN_LOWER_LEFT, - PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER, - PIPE_CAP_FS_COORD_PIXEL_CENTER_INTEGER, - PIPE_CAP_DEPTH_CLIP_DISABLE, - PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE, - PIPE_CAP_DEPTH_CLAMP_ENABLE, - PIPE_CAP_SHADER_STENCIL_EXPORT, - PIPE_CAP_VS_INSTANCEID, - PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, - PIPE_CAP_FRAGMENT_COLOR_CLAMPED, - PIPE_CAP_MIXED_COLORBUFFER_FORMATS, - PIPE_CAP_SEAMLESS_CUBE_MAP, - PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE, - PIPE_CAP_MIN_TEXEL_OFFSET, - PIPE_CAP_MAX_TEXEL_OFFSET, - PIPE_CAP_CONDITIONAL_RENDER, - PIPE_CAP_TEXTURE_BARRIER, - PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS, - PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS, - PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME, - PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS, - PIPE_CAP_VERTEX_COLOR_UNCLAMPED, - PIPE_CAP_VERTEX_COLOR_CLAMPED, - PIPE_CAP_GLSL_FEATURE_LEVEL, - PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY, - PIPE_CAP_ESSL_FEATURE_LEVEL, - PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION, - PIPE_CAP_USER_VERTEX_BUFFERS, - PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY, - PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY, - PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY, - PIPE_CAP_VERTEX_ATTRIB_ELEMENT_ALIGNED_ONLY, - PIPE_CAP_COMPUTE, - PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT, - PIPE_CAP_START_INSTANCE, - PIPE_CAP_QUERY_TIMESTAMP, - PIPE_CAP_TEXTURE_MULTISAMPLE, - PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT, - PIPE_CAP_CUBE_MAP_ARRAY, - PIPE_CAP_TEXTURE_BUFFER_OBJECTS, - PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT, - PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY, - PIPE_CAP_TGSI_TEXCOORD, - PIPE_CAP_LINEAR_IMAGE_PITCH_ALIGNMENT, - PIPE_CAP_LINEAR_IMAGE_BASE_ADDRESS_ALIGNMENT, - PIPE_CAP_TEXTURE_TRANSFER_MODES, - PIPE_CAP_QUERY_PIPELINE_STATISTICS, - PIPE_CAP_TEXTURE_BORDER_COLOR_QUIRK, - PIPE_CAP_MAX_TEXEL_BUFFER_ELEMENTS_UINT, - PIPE_CAP_MAX_VIEWPORTS, - PIPE_CAP_ENDIANNESS, - PIPE_CAP_MIXED_FRAMEBUFFER_SIZES, - PIPE_CAP_VS_LAYER_VIEWPORT, - PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES, - PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, - PIPE_CAP_MAX_TEXTURE_GATHER_COMPONENTS, - PIPE_CAP_TEXTURE_GATHER_SM5, - PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT, - PIPE_CAP_FAKE_SW_MSAA, - PIPE_CAP_TEXTURE_QUERY_LOD, - PIPE_CAP_MIN_TEXTURE_GATHER_OFFSET, - PIPE_CAP_MAX_TEXTURE_GATHER_OFFSET, - PIPE_CAP_SAMPLE_SHADING, - PIPE_CAP_TEXTURE_GATHER_OFFSETS, - PIPE_CAP_VS_WINDOW_SPACE_POSITION, - PIPE_CAP_MAX_VERTEX_STREAMS, - PIPE_CAP_DRAW_INDIRECT, - PIPE_CAP_FS_FINE_DERIVATIVE, - PIPE_CAP_VENDOR_ID, - PIPE_CAP_DEVICE_ID, - PIPE_CAP_ACCELERATED, - PIPE_CAP_VIDEO_MEMORY, - PIPE_CAP_UMA, - PIPE_CAP_CONDITIONAL_RENDER_INVERTED, - PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE, - PIPE_CAP_SAMPLER_VIEW_TARGET, - PIPE_CAP_CLIP_HALFZ, - PIPE_CAP_POLYGON_OFFSET_CLAMP, - PIPE_CAP_MULTISAMPLE_Z_RESOLVE, - PIPE_CAP_RESOURCE_FROM_USER_MEMORY, - PIPE_CAP_RESOURCE_FROM_USER_MEMORY_COMPUTE_ONLY, - PIPE_CAP_DEVICE_RESET_STATUS_QUERY, - PIPE_CAP_MAX_SHADER_PATCH_VARYINGS, - PIPE_CAP_TEXTURE_FLOAT_LINEAR, - PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR, - PIPE_CAP_DEPTH_BOUNDS_TEST, - PIPE_CAP_TEXTURE_QUERY_SAMPLES, - PIPE_CAP_FORCE_PERSAMPLE_INTERP, - PIPE_CAP_SHAREABLE_SHADERS, - PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS, - PIPE_CAP_CLEAR_TEXTURE, - PIPE_CAP_CLEAR_SCISSORED, - PIPE_CAP_DRAW_PARAMETERS, - PIPE_CAP_SHADER_PACK_HALF_FLOAT, - PIPE_CAP_MULTI_DRAW_INDIRECT, - PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS, - PIPE_CAP_MULTI_DRAW_INDIRECT_PARTIAL_STRIDE, - PIPE_CAP_FS_POSITION_IS_SYSVAL, - PIPE_CAP_FS_POINT_IS_SYSVAL, - PIPE_CAP_FS_FACE_IS_INTEGER_SYSVAL, - PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT, - PIPE_CAP_INVALIDATE_BUFFER, - PIPE_CAP_GENERATE_MIPMAP, - PIPE_CAP_STRING_MARKER, - PIPE_CAP_SURFACE_REINTERPRET_BLOCKS, - PIPE_CAP_QUERY_BUFFER_OBJECT, - PIPE_CAP_QUERY_MEMORY_INFO, - PIPE_CAP_PCI_GROUP, - PIPE_CAP_PCI_BUS, - PIPE_CAP_PCI_DEVICE, - PIPE_CAP_PCI_FUNCTION, - PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT, - PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR, - PIPE_CAP_CULL_DISTANCE, - PIPE_CAP_CULL_DISTANCE_NOCOMBINE, - PIPE_CAP_SHADER_GROUP_VOTE, - PIPE_CAP_MAX_WINDOW_RECTANGLES, - PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED, - PIPE_CAP_VIEWPORT_SUBPIXEL_BITS, - PIPE_CAP_RASTERIZER_SUBPIXEL_BITS, - PIPE_CAP_MIXED_COLOR_DEPTH_BITS, - PIPE_CAP_SHADER_ARRAY_COMPONENTS, - PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS, - PIPE_CAP_SHADER_CAN_READ_OUTPUTS, - PIPE_CAP_NATIVE_FENCE_FD, - PIPE_CAP_GLSL_TESS_LEVELS_AS_INPUTS, - PIPE_CAP_FBFETCH, - PIPE_CAP_LEGACY_MATH_RULES, - PIPE_CAP_DOUBLES, - PIPE_CAP_INT64, - PIPE_CAP_INT64_DIVMOD, - PIPE_CAP_TGSI_TEX_TXF_LZ, - PIPE_CAP_SHADER_CLOCK, - PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE, - PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE, - PIPE_CAP_SHADER_BALLOT, - PIPE_CAP_TES_LAYER_VIEWPORT, - PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX, - PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION, - PIPE_CAP_POST_DEPTH_COVERAGE, - PIPE_CAP_BINDLESS_TEXTURE, - PIPE_CAP_NIR_SAMPLERS_AS_DEREF, - PIPE_CAP_QUERY_SO_OVERFLOW, - PIPE_CAP_MEMOBJ, - PIPE_CAP_LOAD_CONSTBUF, - PIPE_CAP_TILE_RASTER_ORDER, - PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, - PIPE_CAP_FRAMEBUFFER_MSAA_CONSTRAINTS, - PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET, - PIPE_CAP_CONTEXT_PRIORITY_MASK, - PIPE_CAP_FENCE_SIGNAL, - PIPE_CAP_CONSTBUF0_FLAGS, - PIPE_CAP_PACKED_UNIFORMS, - PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_TRIANGLES, - PIPE_CAP_CONSERVATIVE_RASTER_POST_SNAP_POINTS_LINES, - PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_TRIANGLES, - PIPE_CAP_CONSERVATIVE_RASTER_PRE_SNAP_POINTS_LINES, - PIPE_CAP_MAX_CONSERVATIVE_RASTER_SUBPIXEL_PRECISION_BIAS, - PIPE_CAP_CONSERVATIVE_RASTER_POST_DEPTH_COVERAGE, - PIPE_CAP_CONSERVATIVE_RASTER_INNER_COVERAGE, - PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS, - PIPE_CAP_MAX_GS_INVOCATIONS, - PIPE_CAP_MAX_SHADER_BUFFER_SIZE_UINT, - PIPE_CAP_TEXTURE_MIRROR_CLAMP_TO_EDGE, - PIPE_CAP_MAX_COMBINED_SHADER_BUFFERS, - PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTERS, - PIPE_CAP_MAX_COMBINED_HW_ATOMIC_COUNTER_BUFFERS, - PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET, - PIPE_CAP_MAX_VERTEX_ELEMENT_SRC_OFFSET, - PIPE_CAP_SURFACE_SAMPLE_COUNT, - PIPE_CAP_IMAGE_ATOMIC_FLOAT_ADD, - PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE, - PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND, - PIPE_CAP_DEST_SURFACE_SRGB_CONTROL, - PIPE_CAP_NIR_COMPACT_ARRAYS, - PIPE_CAP_MAX_VARYINGS, - PIPE_CAP_COMPUTE_GRID_INFO_LAST_BLOCK, - PIPE_CAP_COMPUTE_SHADER_DERIVATIVES, - PIPE_CAP_IMAGE_LOAD_FORMATTED, - PIPE_CAP_IMAGE_STORE_FORMATTED, - PIPE_CAP_THROTTLE, - PIPE_CAP_DMABUF, - PIPE_CAP_PREFER_COMPUTE_FOR_MULTIMEDIA, - PIPE_CAP_FRAGMENT_SHADER_INTERLOCK, - PIPE_CAP_FBFETCH_COHERENT, - PIPE_CAP_ATOMIC_FLOAT_MINMAX, - PIPE_CAP_TGSI_DIV, - PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD, - PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES, - PIPE_CAP_TEXTURE_SHADOW_LOD, - PIPE_CAP_SHADER_SAMPLES_IDENTICAL, - PIPE_CAP_IMAGE_ATOMIC_INC_WRAP, - PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF, - PIPE_CAP_GL_SPIRV, - PIPE_CAP_GL_SPIRV_VARIABLE_POINTERS, - PIPE_CAP_DEMOTE_TO_HELPER_INVOCATION, - PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE, - PIPE_CAP_FLATSHADE, - PIPE_CAP_ALPHA_TEST, - PIPE_CAP_POINT_SIZE_FIXED, - PIPE_CAP_TWO_SIDED_COLOR, - PIPE_CAP_CLIP_PLANES, - PIPE_CAP_MAX_VERTEX_BUFFERS, - PIPE_CAP_OPENCL_INTEGER_FUNCTIONS, - PIPE_CAP_INTEGER_MULTIPLY_32X16, - /* Turn draw, dispatch, blit into NOOP */ - PIPE_CAP_FRONTEND_NOOP, - PIPE_CAP_NIR_IMAGES_AS_DEREF, - PIPE_CAP_PACKED_STREAM_OUTPUT, - PIPE_CAP_VIEWPORT_TRANSFORM_LOWERED, - PIPE_CAP_PSIZ_CLAMPED, - PIPE_CAP_GL_BEGIN_END_BUFFER_SIZE, - PIPE_CAP_VIEWPORT_SWIZZLE, - PIPE_CAP_SYSTEM_SVM, - PIPE_CAP_VIEWPORT_MASK, - PIPE_CAP_ALPHA_TO_COVERAGE_DITHER_CONTROL, - PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE, - PIPE_CAP_GLSL_ZERO_INIT, - PIPE_CAP_BLEND_EQUATION_ADVANCED, - PIPE_CAP_NIR_ATOMICS_AS_DEREF, - PIPE_CAP_NO_CLIP_ON_COPY_TEX, - PIPE_CAP_MAX_TEXTURE_MB, - PIPE_CAP_SHADER_ATOMIC_INT64, - /** For EGL_EXT_protected_surface */ - PIPE_CAP_DEVICE_PROTECTED_SURFACE, - PIPE_CAP_PREFER_REAL_BUFFER_IN_CONSTBUF0, - PIPE_CAP_GL_CLAMP, - PIPE_CAP_TEXRECT, - PIPE_CAP_SAMPLER_REDUCTION_MINMAX, - PIPE_CAP_SAMPLER_REDUCTION_MINMAX_ARB, - PIPE_CAP_ALLOW_DYNAMIC_VAO_FASTPATH, - PIPE_CAP_EMULATE_NONFIXED_PRIMITIVE_RESTART, - PIPE_CAP_SUPPORTED_PRIM_MODES, - PIPE_CAP_SUPPORTED_PRIM_MODES_WITH_RESTART, - PIPE_CAP_PREFER_BACK_BUFFER_REUSE, - PIPE_CAP_DRAW_VERTEX_STATE, - PIPE_CAP_PREFER_POT_ALIGNED_VARYINGS, - PIPE_CAP_MAX_SPARSE_TEXTURE_SIZE, - PIPE_CAP_MAX_SPARSE_3D_TEXTURE_SIZE, - PIPE_CAP_MAX_SPARSE_ARRAY_TEXTURE_LAYERS, - PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS, - PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY, - PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD, - PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER, - PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT, - PIPE_CAP_HARDWARE_GL_SELECT, - PIPE_CAP_DITHERING, - PIPE_CAP_FBFETCH_ZS, - PIPE_CAP_TIMELINE_SEMAPHORE_IMPORT, - PIPE_CAP_QUERY_TIMESTAMP_BITS, - /** For EGL_EXT_protected_content */ - PIPE_CAP_DEVICE_PROTECTED_CONTEXT, - PIPE_CAP_ALLOW_GLTHREAD_BUFFER_SUBDATA_OPT, - PIPE_CAP_NULL_TEXTURES, - PIPE_CAP_ASTC_VOID_EXTENTS_NEED_DENORM_FLUSH, - - PIPE_CAP_VALIDATE_ALL_DIRTY_STATES, - PIPE_CAP_LAST, - /* XXX do not add caps after PIPE_CAP_LAST! */ -}; - -enum pipe_texture_transfer_mode { - PIPE_TEXTURE_TRANSFER_DEFAULT = 0, - PIPE_TEXTURE_TRANSFER_BLIT = (1 << 0), - PIPE_TEXTURE_TRANSFER_COMPUTE = (1 << 1), -}; - -/** - * Possible bits for PIPE_CAP_CONTEXT_PRIORITY_MASK param, which should - * return a bitmask of the supported priorities. If the driver does not - * support prioritized contexts, it can return 0. - * - * Note that these match __EGL_CONTEXT_PRIORITY_*_BIT. - */ -#define PIPE_CONTEXT_PRIORITY_LOW (1 << 0) -#define PIPE_CONTEXT_PRIORITY_MEDIUM (1 << 1) -#define PIPE_CONTEXT_PRIORITY_HIGH (1 << 2) - -enum pipe_quirk_texture_border_color_swizzle { - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 = (1 << 0), - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_R600 = (1 << 1), - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_FREEDRENO = (1 << 2), - PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_ALPHA_NOT_W = (1 << 3), -}; - -enum pipe_endian -{ - PIPE_ENDIAN_LITTLE = 0, - PIPE_ENDIAN_BIG = 1, -#if UTIL_ARCH_LITTLE_ENDIAN - PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_LITTLE -#elif UTIL_ARCH_BIG_ENDIAN - PIPE_ENDIAN_NATIVE = PIPE_ENDIAN_BIG -#endif -}; - -/** - * Implementation limits which are queried through - * pipe_screen::get_paramf() - */ -enum pipe_capf -{ - PIPE_CAPF_MIN_LINE_WIDTH, - PIPE_CAPF_MIN_LINE_WIDTH_AA, - PIPE_CAPF_MAX_LINE_WIDTH, - PIPE_CAPF_MAX_LINE_WIDTH_AA, - PIPE_CAPF_LINE_WIDTH_GRANULARITY, - PIPE_CAPF_MIN_POINT_SIZE, - PIPE_CAPF_MIN_POINT_SIZE_AA, - PIPE_CAPF_MAX_POINT_SIZE, - PIPE_CAPF_MAX_POINT_SIZE_AA, - PIPE_CAPF_POINT_SIZE_GRANULARITY, - PIPE_CAPF_MAX_TEXTURE_ANISOTROPY, - PIPE_CAPF_MAX_TEXTURE_LOD_BIAS, - PIPE_CAPF_MIN_CONSERVATIVE_RASTER_DILATE, - PIPE_CAPF_MAX_CONSERVATIVE_RASTER_DILATE, - PIPE_CAPF_CONSERVATIVE_RASTER_DILATE_GRANULARITY, -}; - -/** Shader caps not specific to any single stage */ -enum pipe_shader_cap -{ - PIPE_SHADER_CAP_MAX_INSTRUCTIONS, /* if 0, it means the stage is unsupported */ - PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS, - PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS, - PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS, - PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH, - PIPE_SHADER_CAP_MAX_INPUTS, - PIPE_SHADER_CAP_MAX_OUTPUTS, - PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE, - PIPE_SHADER_CAP_MAX_CONST_BUFFERS, - PIPE_SHADER_CAP_MAX_TEMPS, - /* boolean caps */ - PIPE_SHADER_CAP_CONT_SUPPORTED, - PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR, - PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR, - PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR, - PIPE_SHADER_CAP_INDIRECT_CONST_ADDR, - PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */ - PIPE_SHADER_CAP_INTEGERS, - PIPE_SHADER_CAP_INT64_ATOMICS, - PIPE_SHADER_CAP_FP16, - PIPE_SHADER_CAP_FP16_DERIVATIVES, - PIPE_SHADER_CAP_FP16_CONST_BUFFERS, - PIPE_SHADER_CAP_INT16, - PIPE_SHADER_CAP_GLSL_16BIT_CONSTS, - PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS, - PIPE_SHADER_CAP_PREFERRED_IR, - PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED, - PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS, - PIPE_SHADER_CAP_DROUND_SUPPORTED, /* all rounding modes */ - PIPE_SHADER_CAP_TGSI_ANY_INOUT_DECL_RANGE, - PIPE_SHADER_CAP_MAX_SHADER_BUFFERS, - PIPE_SHADER_CAP_SUPPORTED_IRS, - PIPE_SHADER_CAP_MAX_SHADER_IMAGES, - PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS, - PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS, -}; - -/** - * Shader intermediate representation. - * - * Note that if the driver requests something other than TGSI, it must - * always be prepared to receive TGSI in addition to its preferred IR. - * If the driver requests TGSI as its preferred IR, it will *always* - * get TGSI. - * - * Note that PIPE_SHADER_IR_TGSI should be zero for backwards compat with - * gallium frontends that only understand TGSI. - */ -enum pipe_shader_ir -{ - PIPE_SHADER_IR_TGSI = 0, - PIPE_SHADER_IR_NATIVE, - PIPE_SHADER_IR_NIR, - PIPE_SHADER_IR_NIR_SERIALIZED, -}; - -/** - * Compute-specific implementation capability. They can be queried - * using pipe_screen::get_compute_param. - */ -enum pipe_compute_cap -{ - PIPE_COMPUTE_CAP_ADDRESS_BITS, - PIPE_COMPUTE_CAP_IR_TARGET, - PIPE_COMPUTE_CAP_GRID_DIMENSION, - PIPE_COMPUTE_CAP_MAX_GRID_SIZE, - PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, - PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK, - PIPE_COMPUTE_CAP_MAX_GLOBAL_SIZE, - PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE, - PIPE_COMPUTE_CAP_MAX_PRIVATE_SIZE, - PIPE_COMPUTE_CAP_MAX_INPUT_SIZE, - PIPE_COMPUTE_CAP_MAX_MEM_ALLOC_SIZE, - PIPE_COMPUTE_CAP_MAX_CLOCK_FREQUENCY, - PIPE_COMPUTE_CAP_MAX_COMPUTE_UNITS, - PIPE_COMPUTE_CAP_IMAGES_SUPPORTED, - PIPE_COMPUTE_CAP_SUBGROUP_SIZE, - PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK, -}; - -/** - * Resource parameters. They can be queried using - * pipe_screen::get_resource_param. - */ -enum pipe_resource_param -{ - PIPE_RESOURCE_PARAM_NPLANES, - PIPE_RESOURCE_PARAM_STRIDE, - PIPE_RESOURCE_PARAM_OFFSET, - PIPE_RESOURCE_PARAM_MODIFIER, - PIPE_RESOURCE_PARAM_HANDLE_TYPE_SHARED, - PIPE_RESOURCE_PARAM_HANDLE_TYPE_KMS, - PIPE_RESOURCE_PARAM_HANDLE_TYPE_FD, - PIPE_RESOURCE_PARAM_LAYER_STRIDE, -}; - -/** - * Types of parameters for pipe_context::set_context_param. - */ -enum pipe_context_param -{ - /* A hint for the driver that it should pin its execution threads to - * a group of cores sharing a specific L3 cache if the CPU has multiple - * L3 caches. This is needed for good multithreading performance on - * AMD Zen CPUs. "value" is the L3 cache index. Drivers that don't have - * any internal threads or don't run on affected CPUs can ignore this. - */ - PIPE_CONTEXT_PARAM_PIN_THREADS_TO_L3_CACHE, -}; - -/** - * Composite query types - */ - -/** - * Query result for PIPE_QUERY_SO_STATISTICS. - */ -struct pipe_query_data_so_statistics -{ - uint64_t num_primitives_written; - uint64_t primitives_storage_needed; -}; - -/** - * Query result for PIPE_QUERY_TIMESTAMP_DISJOINT. - */ -struct pipe_query_data_timestamp_disjoint -{ - uint64_t frequency; - bool disjoint; -}; - -/** - * Query result for PIPE_QUERY_PIPELINE_STATISTICS. - */ -struct pipe_query_data_pipeline_statistics -{ - union { - struct { - uint64_t ia_vertices; /**< Num vertices read by the vertex fetcher. */ - uint64_t ia_primitives; /**< Num primitives read by the vertex fetcher. */ - uint64_t vs_invocations; /**< Num vertex shader invocations. */ - uint64_t gs_invocations; /**< Num geometry shader invocations. */ - uint64_t gs_primitives; /**< Num primitives output by a geometry shader. */ - uint64_t c_invocations; /**< Num primitives sent to the rasterizer. */ - uint64_t c_primitives; /**< Num primitives that were rendered. */ - uint64_t ps_invocations; /**< Num pixel shader invocations. */ - uint64_t hs_invocations; /**< Num hull shader invocations. */ - uint64_t ds_invocations; /**< Num domain shader invocations. */ - uint64_t cs_invocations; /**< Num compute shader invocations. */ - }; - uint64_t counters[11]; - }; -}; - -/** - * For batch queries. - */ -union pipe_numeric_type_union -{ - uint64_t u64; - uint32_t u32; - float f; -}; - -/** - * Query result (returned by pipe_context::get_query_result). - */ -union pipe_query_result -{ - /* PIPE_QUERY_OCCLUSION_PREDICATE */ - /* PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE */ - /* PIPE_QUERY_SO_OVERFLOW_PREDICATE */ - /* PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE */ - /* PIPE_QUERY_GPU_FINISHED */ - bool b; - - /* PIPE_QUERY_OCCLUSION_COUNTER */ - /* PIPE_QUERY_TIMESTAMP */ - /* PIPE_QUERY_TIME_ELAPSED */ - /* PIPE_QUERY_PRIMITIVES_GENERATED */ - /* PIPE_QUERY_PRIMITIVES_EMITTED */ - /* PIPE_DRIVER_QUERY_TYPE_UINT64 */ - /* PIPE_DRIVER_QUERY_TYPE_BYTES */ - /* PIPE_DRIVER_QUERY_TYPE_MICROSECONDS */ - /* PIPE_DRIVER_QUERY_TYPE_HZ */ - uint64_t u64; - - /* PIPE_DRIVER_QUERY_TYPE_UINT */ - uint32_t u32; - - /* PIPE_DRIVER_QUERY_TYPE_FLOAT */ - /* PIPE_DRIVER_QUERY_TYPE_PERCENTAGE */ - float f; - - /* PIPE_QUERY_SO_STATISTICS */ - struct pipe_query_data_so_statistics so_statistics; - - /* PIPE_QUERY_TIMESTAMP_DISJOINT */ - struct pipe_query_data_timestamp_disjoint timestamp_disjoint; - - /* PIPE_QUERY_PIPELINE_STATISTICS */ - struct pipe_query_data_pipeline_statistics pipeline_statistics; - - /* batch queries (variable length) */ - union pipe_numeric_type_union batch[1]; -}; - -enum pipe_query_value_type -{ - PIPE_QUERY_TYPE_I32, - PIPE_QUERY_TYPE_U32, - PIPE_QUERY_TYPE_I64, - PIPE_QUERY_TYPE_U64, -}; - -enum pipe_query_flags -{ - PIPE_QUERY_WAIT = (1 << 0), - PIPE_QUERY_PARTIAL = (1 << 1), -}; - -union pipe_color_union -{ - float f[4]; - int i[4]; - unsigned int ui[4]; -}; - -enum pipe_driver_query_type -{ - PIPE_DRIVER_QUERY_TYPE_UINT64, - PIPE_DRIVER_QUERY_TYPE_UINT, - PIPE_DRIVER_QUERY_TYPE_FLOAT, - PIPE_DRIVER_QUERY_TYPE_PERCENTAGE, - PIPE_DRIVER_QUERY_TYPE_BYTES, - PIPE_DRIVER_QUERY_TYPE_MICROSECONDS, - PIPE_DRIVER_QUERY_TYPE_HZ, - PIPE_DRIVER_QUERY_TYPE_DBM, - PIPE_DRIVER_QUERY_TYPE_TEMPERATURE, - PIPE_DRIVER_QUERY_TYPE_VOLTS, - PIPE_DRIVER_QUERY_TYPE_AMPS, - PIPE_DRIVER_QUERY_TYPE_WATTS, -}; - -/* Whether an average value per frame or a cumulative value should be - * displayed. - */ -enum pipe_driver_query_result_type -{ - PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE, - PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE, -}; - -/** - * Some hardware requires some hardware-specific queries to be submitted - * as batched queries. The corresponding query objects are created using - * create_batch_query, and at most one such query may be active at - * any time. - */ -#define PIPE_DRIVER_QUERY_FLAG_BATCH (1 << 0) - -/* Do not list this query in the HUD. */ -#define PIPE_DRIVER_QUERY_FLAG_DONT_LIST (1 << 1) - -struct pipe_driver_query_info -{ - const char *name; - unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */ - union pipe_numeric_type_union max_value; /* max value that can be returned */ - enum pipe_driver_query_type type; - enum pipe_driver_query_result_type result_type; - unsigned group_id; - unsigned flags; -}; - -struct pipe_driver_query_group_info -{ - const char *name; - unsigned max_active_queries; - unsigned num_queries; -}; - -enum pipe_fd_type -{ - PIPE_FD_TYPE_NATIVE_SYNC, - PIPE_FD_TYPE_SYNCOBJ, - PIPE_FD_TYPE_TIMELINE_SEMAPHORE, -}; - -/** - * counter type and counter data type enums used by INTEL_performance_query - * APIs in gallium drivers. - */ -enum pipe_perf_counter_type -{ - PIPE_PERF_COUNTER_TYPE_EVENT, - PIPE_PERF_COUNTER_TYPE_DURATION_NORM, - PIPE_PERF_COUNTER_TYPE_DURATION_RAW, - PIPE_PERF_COUNTER_TYPE_THROUGHPUT, - PIPE_PERF_COUNTER_TYPE_RAW, - PIPE_PERF_COUNTER_TYPE_TIMESTAMP, -}; - -enum pipe_perf_counter_data_type -{ - PIPE_PERF_COUNTER_DATA_TYPE_BOOL32, - PIPE_PERF_COUNTER_DATA_TYPE_UINT32, - PIPE_PERF_COUNTER_DATA_TYPE_UINT64, - PIPE_PERF_COUNTER_DATA_TYPE_FLOAT, - PIPE_PERF_COUNTER_DATA_TYPE_DOUBLE, -}; - -#define PIPE_UUID_SIZE 16 -#define PIPE_LUID_SIZE 8 - -#if DETECT_OS_UNIX -#define PIPE_MEMORY_FD -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_screen.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_screen.h deleted file mode 100644 index c936502..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_screen.h +++ /dev/null @@ -1,809 +0,0 @@ -/************************************************************************** - * - * Copyright 2007 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * - * Screen, Adapter or GPU - * - * These are driver functions/facilities that are context independent. - */ - - -#ifndef P_SCREEN_H -#define P_SCREEN_H - - -#include "p_compiler.h" -#include "../../../util/format/u_formats.h" -#include "p_defines.h" -#include "p_video_enums.h" - - - -#ifdef __cplusplus -extern "C" { -#endif - - -/** Opaque types */ -struct winsys_handle; -struct pipe_fence_handle; -struct pipe_resource; -struct pipe_surface; -struct pipe_transfer; -struct pipe_box; -struct pipe_memory_info; -struct pipe_vertex_buffer; -struct pipe_vertex_element; -struct pipe_vertex_state; -struct disk_cache; -struct driOptionCache; -struct u_transfer_helper; -struct pipe_screen; -struct util_queue_fence; - -typedef struct pipe_vertex_state * - (*pipe_create_vertex_state_func)(struct pipe_screen *screen, - struct pipe_vertex_buffer *buffer, - const struct pipe_vertex_element *elements, - unsigned num_elements, - struct pipe_resource *indexbuf, - uint32_t full_velem_mask); -typedef void (*pipe_vertex_state_destroy_func)(struct pipe_screen *screen, - struct pipe_vertex_state *); -typedef void (*pipe_driver_thread_func)(void *job, void *gdata, int thread_index); - - - -/** - * Gallium screen/adapter context. Basically everything - * hardware-specific that doesn't actually require a rendering - * context. - */ -struct pipe_screen { - int refcnt; - void *winsys_priv; - - /** - * Get the fd associated with the screen - * The fd returned is considered read-only, and in particular will not - * be close()d. It must remain valid for as long as the screen exists. - */ - int (*get_screen_fd)(struct pipe_screen *); - - /** - * Atomically incremented by drivers to track the number of contexts. - * If it's 0, it can be assumed that contexts are not tracked. - * Used by some places to skip locking if num_contexts == 1. - */ - unsigned num_contexts; - - /** - * For drivers using u_transfer_helper: - */ - struct u_transfer_helper *transfer_helper; - - void (*destroy)(struct pipe_screen *); - - const char *(*get_name)(struct pipe_screen *); - - const char *(*get_vendor)(struct pipe_screen *); - - /** - * Returns the device vendor. - * - * The returned value should return the actual device vendor/manufacturer, - * rather than a potentially generic driver string. - */ - const char *(*get_device_vendor)(struct pipe_screen *); - - /** - * Returns the latest OpenCL CTS version passed - * - * The returned value should be the git tag used when passing conformance. - */ - const char *(*get_cl_cts_version)(struct pipe_screen *); - - /** - * Query an integer-valued capability/parameter/limit - * \param param one of PIPE_CAP_x - */ - int (*get_param)(struct pipe_screen *, enum pipe_cap param); - - /** - * Query a float-valued capability/parameter/limit - * \param param one of PIPE_CAP_x - */ - float (*get_paramf)(struct pipe_screen *, enum pipe_capf param); - - /** - * Query a per-shader-stage integer-valued capability/parameter/limit - * \param param one of PIPE_CAP_x - */ - int (*get_shader_param)(struct pipe_screen *, enum pipe_shader_type shader, - enum pipe_shader_cap param); - - /** - * Query an integer-valued capability/parameter/limit for a codec/profile - * \param param one of PIPE_VIDEO_CAP_x - */ - int (*get_video_param)(struct pipe_screen *, - enum pipe_video_profile profile, - enum pipe_video_entrypoint entrypoint, - enum pipe_video_cap param); - - /** - * Query a compute-specific capability/parameter/limit. - * \param ir_type shader IR type for which the param applies, or don't care - * if the param is not shader related - * \param param one of PIPE_COMPUTE_CAP_x - * \param ret pointer to a preallocated buffer that will be - * initialized to the parameter value, or NULL. - * \return size in bytes of the parameter value that would be - * returned. - */ - int (*get_compute_param)(struct pipe_screen *, - enum pipe_shader_ir ir_type, - enum pipe_compute_cap param, - void *ret); - - /** - * Get the sample pixel grid's size. This function requires - * PIPE_CAP_PROGRAMMABLE_SAMPLE_LOCATIONS to be callable. - * - * \param sample_count - total number of samples - * \param out_width - the width of the pixel grid - * \param out_height - the height of the pixel grid - */ - void (*get_sample_pixel_grid)(struct pipe_screen *, unsigned sample_count, - unsigned *out_width, unsigned *out_height); - - /** - * Query a timestamp in nanoseconds. The returned value should match - * PIPE_QUERY_TIMESTAMP. This function returns immediately and doesn't - * wait for rendering to complete (which cannot be achieved with queries). - */ - uint64_t (*get_timestamp)(struct pipe_screen *); - - /** - * Return an equivalent canonical format which has the same component sizes - * and swizzles as the original, and it is supported by the driver. Gallium - * already does a first canonicalization step (see get_canonical_format() - * on st_cb_copyimage.c) and it calls this function (if defined) to get an - * alternative format if the picked is not supported by the driver. - */ - enum pipe_format (*get_canonical_format)(struct pipe_screen *, - enum pipe_format format); - - /** - * Create a context. - * - * \param screen pipe screen - * \param priv a pointer to set in pipe_context::priv - * \param flags a mask of PIPE_CONTEXT_* flags - */ - struct pipe_context * (*context_create)(struct pipe_screen *screen, - void *priv, unsigned flags); - - /** - * Check if the given image copy will be faster on compute - * \param cpu If true, this is checking against CPU fallback, - * otherwise the copy will be on GFX - */ - bool (*is_compute_copy_faster)(struct pipe_screen *, - enum pipe_format src_format, - enum pipe_format dst_format, - unsigned width, - unsigned height, - unsigned depth, - bool cpu); - - /** - * Check if the given pipe_format is supported as a texture or - * drawing surface. - * \param bindings bitmask of PIPE_BIND_* - */ - bool (*is_format_supported)(struct pipe_screen *, - enum pipe_format format, - enum pipe_texture_target target, - unsigned sample_count, - unsigned storage_sample_count, - unsigned bindings); - - /** - * Check if the given pipe_format is supported as output for this - * codec/profile. - * \param profile profile to check, may also be PIPE_VIDEO_PROFILE_UNKNOWN - */ - bool (*is_video_format_supported)(struct pipe_screen *, - enum pipe_format format, - enum pipe_video_profile profile, - enum pipe_video_entrypoint entrypoint); - - /** - * Check if we can actually create the given resource (test the dimension, - * overall size, etc). Used to implement proxy textures. - * \return TRUE if size is OK, FALSE if too large. - */ - bool (*can_create_resource)(struct pipe_screen *screen, - const struct pipe_resource *templat); - - /** - * Create a new texture object, using the given template info. - */ - struct pipe_resource * (*resource_create)(struct pipe_screen *, - const struct pipe_resource *templat); - - struct pipe_resource * (*resource_create_drawable)(struct pipe_screen *, - const struct pipe_resource *tmpl, - const void *loader_private); - - struct pipe_resource * (*resource_create_front)(struct pipe_screen *, - const struct pipe_resource *templat, - const void *map_front_private); - - /** - * Create a texture from a winsys_handle. The handle is often created in - * another process by first creating a pipe texture and then calling - * resource_get_handle. - * - * NOTE: in the case of WINSYS_HANDLE_TYPE_FD handles, the caller - * retains ownership of the FD. (This is consistent with - * EGL_EXT_image_dma_buf_import) - * - * \param usage A combination of PIPE_HANDLE_USAGE_* flags. - */ - struct pipe_resource * (*resource_from_handle)(struct pipe_screen *, - const struct pipe_resource *templat, - struct winsys_handle *handle, - unsigned usage); - - /** - * Create a resource from user memory. This maps the user memory into - * the device address space. - */ - struct pipe_resource * (*resource_from_user_memory)(struct pipe_screen *, - const struct pipe_resource *t, - void *user_memory); - - /** - * Unlike pipe_resource::bind, which describes what gallium frontends want, - * resources can have much greater capabilities in practice, often implied - * by the tiling layout or memory placement. This function allows querying - * whether a capability is supported beyond what was requested by state - * trackers. It's also useful for querying capabilities of imported - * resources where the capabilities are unknown at first. - * - * Only these flags are allowed: - * - PIPE_BIND_SCANOUT - * - PIPE_BIND_CURSOR - * - PIPE_BIND_LINEAR - */ - bool (*check_resource_capability)(struct pipe_screen *screen, - struct pipe_resource *resource, - unsigned bind); - - /** - * Get a winsys_handle from a texture. Some platforms/winsys requires - * that the texture is created with a special usage flag like - * DISPLAYTARGET or PRIMARY. - * - * The context parameter can optionally be used to flush the resource and - * the context to make sure the resource is coherent with whatever user - * will use it. Some drivers may also use the context to convert - * the resource into a format compatible for sharing. The use case is - * OpenGL-OpenCL interop. The context parameter is allowed to be NULL. - * - * NOTE: for multi-planar resources (which may or may not have the planes - * chained through the pipe_resource next pointer) the frontend will - * always call this function with the first resource of the chain. It is - * the pipe drivers responsibility to walk the resources as needed when - * called with handle->plane != 0. - * - * NOTE: in the case of WINSYS_HANDLE_TYPE_FD handles, the caller - * takes ownership of the FD. (This is consistent with - * EGL_MESA_image_dma_buf_export) - * - * \param usage A combination of PIPE_HANDLE_USAGE_* flags. - */ - bool (*resource_get_handle)(struct pipe_screen *, - struct pipe_context *context, - struct pipe_resource *tex, - struct winsys_handle *handle, - unsigned usage); - - /** - * Get info for the given pipe resource without the need to get a - * winsys_handle. - * - * The context parameter can optionally be used to flush the resource and - * the context to make sure the resource is coherent with whatever user - * will use it. Some drivers may also use the context to convert - * the resource into a format compatible for sharing. The context parameter - * is allowed to be NULL. - */ - bool (*resource_get_param)(struct pipe_screen *screen, - struct pipe_context *context, - struct pipe_resource *resource, - unsigned plane, - unsigned layer, - unsigned level, - enum pipe_resource_param param, - unsigned handle_usage, - uint64_t *value); - - /** - * Get stride and offset for the given pipe resource without the need to get - * a winsys_handle. - */ - void (*resource_get_info)(struct pipe_screen *screen, - struct pipe_resource *resource, - unsigned *stride, - unsigned *offset); - - /** - * Mark the resource as changed so derived internal resources will be - * recreated on next use. - * - * This is necessary when reimporting external images that can't be directly - * used as texture sampler source, to avoid sampling from old copies. - */ - void (*resource_changed)(struct pipe_screen *, struct pipe_resource *pt); - - void (*resource_destroy)(struct pipe_screen *, - struct pipe_resource *pt); - - - /** - * Do any special operations to ensure frontbuffer contents are - * displayed, eg copy fake frontbuffer. - * \param winsys_drawable_handle an opaque handle that the calling context - * gets out-of-band - * \param subbox an optional sub region to flush - */ - void (*flush_frontbuffer)(struct pipe_screen *screen, - struct pipe_context *ctx, - struct pipe_resource *resource, - unsigned level, unsigned layer, - void *winsys_drawable_handle, - struct pipe_box *subbox); - - /** Set ptr = fence, with reference counting */ - void (*fence_reference)(struct pipe_screen *screen, - struct pipe_fence_handle **ptr, - struct pipe_fence_handle *fence); - - /** - * Wait for the fence to finish. - * - * If the fence was created with PIPE_FLUSH_DEFERRED, and the context is - * still unflushed, and the ctx parameter of fence_finish is equal to - * the context where the fence was created, fence_finish will flush - * the context prior to waiting for the fence. - * - * In all other cases, the ctx parameter has no effect. - * - * \param timeout in nanoseconds (may be PIPE_TIMEOUT_INFINITE). - */ - bool (*fence_finish)(struct pipe_screen *screen, - struct pipe_context *ctx, - struct pipe_fence_handle *fence, - uint64_t timeout); - - /** - * For fences created with PIPE_FLUSH_FENCE_FD (exported fd) or - * by create_fence_fd() (imported fd), return the native fence fd - * associated with the fence. This may return -1 for fences - * created with PIPE_FLUSH_DEFERRED if the fence command has not - * been flushed yet. - */ - int (*fence_get_fd)(struct pipe_screen *screen, - struct pipe_fence_handle *fence); - - /** - * Create a fence from an Win32 handle. - * - * This is used for importing a foreign/external fence handle. - * - * \param fence if not NULL, an old fence to unref and transfer a - * new fence reference to - * \param handle opaque handle representing the fence object - * \param type indicates which fence types backs the handle - */ - void (*create_fence_win32)(struct pipe_screen *screen, - struct pipe_fence_handle **fence, - void *handle, - const void *name, - enum pipe_fd_type type); - - /** - * Returns a driver-specific query. - * - * If \p info is NULL, the number of available queries is returned. - * Otherwise, the driver query at the specified \p index is returned - * in \p info. The function returns non-zero on success. - */ - int (*get_driver_query_info)(struct pipe_screen *screen, - unsigned index, - struct pipe_driver_query_info *info); - - /** - * Returns a driver-specific query group. - * - * If \p info is NULL, the number of available groups is returned. - * Otherwise, the driver query group at the specified \p index is returned - * in \p info. The function returns non-zero on success. - */ - int (*get_driver_query_group_info)(struct pipe_screen *screen, - unsigned index, - struct pipe_driver_query_group_info *info); - - /** - * Query information about memory usage. - */ - void (*query_memory_info)(struct pipe_screen *screen, - struct pipe_memory_info *info); - - /** - * Get IR specific compiler options struct. For PIPE_SHADER_IR_NIR this - * returns a 'struct nir_shader_compiler_options'. Drivers reporting - * NIR as the preferred IR must implement this. - */ - const void *(*get_compiler_options)(struct pipe_screen *screen, - enum pipe_shader_ir ir, - enum pipe_shader_type shader); - - /** - * Returns a pointer to a driver-specific on-disk shader cache. If the - * driver failed to create the cache or does not support an on-disk shader - * cache NULL is returned. The callback itself may also be NULL if the - * driver doesn't support an on-disk shader cache. - */ - struct disk_cache *(*get_disk_shader_cache)(struct pipe_screen *screen); - - /** - * Create a new texture object from the given template info, taking - * format modifiers into account. \p modifiers specifies a list of format - * modifier tokens, as defined in drm_fourcc.h. The driver then picks the - * best modifier among these and creates the resource. \p count must - * contain the size of \p modifiers array. - * - * Returns NULL if an entry in \p modifiers is unsupported by the driver, - * or if only DRM_FORMAT_MOD_INVALID is provided. - */ - struct pipe_resource * (*resource_create_with_modifiers)( - struct pipe_screen *, - const struct pipe_resource *templat, - const uint64_t *modifiers, int count); - - /** - * Get supported modifiers for a format. - * If \p max is 0, the total number of supported modifiers for the supplied - * format is returned in \p count, with no modification to \p modifiers. - * Otherwise, \p modifiers is filled with upto \p max supported modifier - * codes, and \p count with the number of modifiers copied. - * The \p external_only array is used to return whether the format and - * modifier combination can only be used with an external texture target. - */ - void (*query_dmabuf_modifiers)(struct pipe_screen *screen, - enum pipe_format format, int max, - uint64_t *modifiers, - unsigned int *external_only, int *count); - - /** - * Create a memory object from a winsys handle - * - * The underlying memory is most often allocated in by a foregin API. - * Then the underlying memory object is then exported through interfaces - * compatible with EXT_external_resources. - * - * Note: For WINSYS_HANDLE_TYPE_FD handles, the caller retains ownership - * of the fd. - * - * \param handle A handle representing the memory object to import - */ - struct pipe_memory_object *(*memobj_create_from_handle)(struct pipe_screen *screen, - struct winsys_handle *handle, - bool dedicated); - - /** - * Destroy a memory object - * - * \param memobj The memory object to destroy - */ - void (*memobj_destroy)(struct pipe_screen *screen, - struct pipe_memory_object *memobj); - - /** - * Create a texture from a memory object - * - * \param t texture template - * \param memobj The memory object used to back the texture - */ - struct pipe_resource * (*resource_from_memobj)(struct pipe_screen *screen, - const struct pipe_resource *t, - struct pipe_memory_object *memobj, - uint64_t offset); - - /** - * Fill @uuid with a unique driver identifier - * - * \param uuid pointer to a memory region of PIPE_UUID_SIZE bytes - */ - void (*get_driver_uuid)(struct pipe_screen *screen, char *uuid); - - /** - * Fill @uuid with a unique device identifier - * - * \param uuid pointer to a memory region of PIPE_UUID_SIZE bytes - */ - void (*get_device_uuid)(struct pipe_screen *screen, char *uuid); - - /** - * Fill @luid with the locally unique identifier of the context - * The LUID returned, paired together with the contexts node mask, - * allows matching the context to an IDXGIAdapter1 object - * - * \param luid pointer to a memory region of PIPE_LUID_SIZE bytes - */ - void (*get_device_luid)(struct pipe_screen *screen, char *luid); - - /** - * Return the device node mask identifying the context - * Together with the contexts LUID, this allows matching - * the context to an IDXGIAdapter1 object. - * - * within a linked device adapter - */ - uint32_t (*get_device_node_mask)(struct pipe_screen *screen); - - /** - * Set the maximum number of parallel shader compiler threads. - */ - void (*set_max_shader_compiler_threads)(struct pipe_screen *screen, - unsigned max_threads); - - /** - * Return whether parallel shader compilation has finished. - */ - bool (*is_parallel_shader_compilation_finished)(struct pipe_screen *screen, - void *shader, - enum pipe_shader_type shader_type); - - void (*driver_thread_add_job)(struct pipe_screen *screen, - void *job, - struct util_queue_fence *fence, - pipe_driver_thread_func execute, - pipe_driver_thread_func cleanup, - const size_t job_size); - - /** - * Set the damage region (called when KHR_partial_update() is invoked). - * This function is passed an array of rectangles encoding the damage area. - * rects are using the bottom-left origin convention. - * nrects = 0 means 'reset the damage region'. What 'reset' implies is HW - * specific. For tile-based renderers, the damage extent is typically set - * to cover the whole resource with no damage rect (or a 0-size damage - * rect). This way, the existing resource content is reloaded into the - * local tile buffer for every tile thus making partial tile update - * possible. For HW operating in immediate mode, this reset operation is - * likely to be a NOOP. - */ - void (*set_damage_region)(struct pipe_screen *screen, - struct pipe_resource *resource, - unsigned int nrects, - const struct pipe_box *rects); - - /** - * Run driver-specific NIR lowering and optimization passes. - * - * gallium frontends should call this before passing shaders to drivers, - * and ideally also before shader caching. - * - * The driver may return a non-NULL string to trigger GLSL link failure - * and logging of that message in the GLSL linker log. - */ - char *(*finalize_nir)(struct pipe_screen *screen, void *nir); - - /*Separated memory/resource allocations interfaces for Vulkan */ - - /** - * Create a resource, and retrieve the required size for it but don't - * allocate any backing memory. - */ - struct pipe_resource * (*resource_create_unbacked)(struct pipe_screen *, - const struct pipe_resource *templat, - uint64_t *size_required); - - /** - * Allocate backing memory to be bound to resources. - */ - struct pipe_memory_allocation *(*allocate_memory)(struct pipe_screen *screen, - uint64_t size); - /** - * Free previously allocated backing memory. - */ - void (*free_memory)(struct pipe_screen *screen, - struct pipe_memory_allocation *); - - /** - * Allocate fd-based memory to be bound to resources. - */ - struct pipe_memory_allocation *(*allocate_memory_fd)(struct pipe_screen *screen, - uint64_t size, - int *fd); - - /** - * Import memory from an fd-handle. - */ - bool (*import_memory_fd)(struct pipe_screen *screen, - int fd, - struct pipe_memory_allocation **pmem, - uint64_t *size); - - /** - * Free previously allocated fd-based memory. - */ - void (*free_memory_fd)(struct pipe_screen *screen, - struct pipe_memory_allocation *pmem); - - /** - * Bind memory to a resource. - */ - bool (*resource_bind_backing)(struct pipe_screen *screen, - struct pipe_resource *pt, - struct pipe_memory_allocation *pmem, - uint64_t offset); - - /** - * Map backing memory. - */ - void *(*map_memory)(struct pipe_screen *screen, - struct pipe_memory_allocation *pmem); - - /** - * Unmap backing memory. - */ - void (*unmap_memory)(struct pipe_screen *screen, - struct pipe_memory_allocation *pmem); - - /** - * Determine whether the screen supports the specified modifier - * - * Query whether the driver supports a \p modifier in combination with - * \p format. If \p external_only is not NULL, the value it points to will - * be set to 0 or a non-zero value to indicate whether the modifier and - * format combination is supported only with external, or also with non- - * external texture targets respectively. The \p external_only parameter is - * not used when the function returns false. - * - * \return true if the format+modifier pair is supported on \p screen, false - * otherwise. - */ - bool (*is_dmabuf_modifier_supported)(struct pipe_screen *screen, - uint64_t modifier, enum pipe_format, - bool *external_only); - - /** - * Get the number of planes required for a given modifier/format pair. - * - * If not NULL, this function returns the number of planes needed to - * represent \p format in the layout specified by \p modifier, including - * any driver-specific auxiliary data planes. - * - * Must only be called on a modifier supported by the screen for the - * specified format. - * - * If NULL, no auxiliary planes are required for any modifier+format pairs - * supported by \p screen. Hence, the plane count can be derived directly - * from \p format. - * - * \return Number of planes needed to store image data in the layout defined - * by \p format and \p modifier. - */ - unsigned int (*get_dmabuf_modifier_planes)(struct pipe_screen *screen, - uint64_t modifier, - enum pipe_format format); - - /** - * Get supported page sizes for sparse texture. - * - * \p size is the array size of \p x, \p y and \p z. - * - * \p offset sets an offset into the possible format page size array, - * used to pick a specific xyz size combination. - * - * \return Number of supported page sizes, 0 means not support. - */ - int (*get_sparse_texture_virtual_page_size)(struct pipe_screen *screen, - enum pipe_texture_target target, - bool multi_sample, - enum pipe_format format, - unsigned offset, unsigned size, - int *x, int *y, int *z); - - /** - * Vertex state CSO functions for precomputing vertex and index buffer - * states for display lists. - */ - pipe_create_vertex_state_func create_vertex_state; - pipe_vertex_state_destroy_func vertex_state_destroy; - - /** - * Update a timeline semaphore value stored within a driver fence object. - * Future waits and signals will use the new value. - */ - void (*set_fence_timeline_value)(struct pipe_screen *screen, - struct pipe_fence_handle *fence, - uint64_t value); - - /** - * Get additional data for interop_query_device_info - * - * \p in_data_size is how much data was allocated by the caller - * \p data is the buffer to fill - * - * \return how much data was written - */ - uint32_t (*interop_query_device_info)(struct pipe_screen *screen, - uint32_t in_data_size, - void *data); - - /** - * Get additional data for interop_export_object - * - * \p in_data_size is how much data was allocated by the caller - * \p data is the buffer to fill - * \p need_export_dmabuf can be set to false to prevent - * a following call to resource_get_handle, if the private - * data contains the exported data - * - * \return how much data was written - */ - uint32_t (*interop_export_object)(struct pipe_screen *screen, - struct pipe_resource *res, - uint32_t in_data_size, - void *data, - bool *need_export_dmabuf); -}; - - -/** - * Global configuration options for screen creation. - */ -struct pipe_screen_config { - struct driOptionCache *options; - const struct driOptionCache *options_info; -}; - - -#ifdef __cplusplus -} -#endif - -#endif /* P_SCREEN_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_shader_tokens.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_shader_tokens.h deleted file mode 100644 index 170c5e4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_shader_tokens.h +++ /dev/null @@ -1,824 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * Copyright 2009-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef P_SHADER_TOKENS_H -#define P_SHADER_TOKENS_H - -#ifdef __cplusplus -extern "C" { -#endif - - -struct tgsi_header -{ - unsigned HeaderSize : 8; - unsigned BodySize : 24; -}; - -struct tgsi_processor -{ - unsigned Processor : 4; /* PIPE_SHADER_ */ - unsigned Padding : 28; -}; - -enum tgsi_token_type { - TGSI_TOKEN_TYPE_DECLARATION, - TGSI_TOKEN_TYPE_IMMEDIATE, - TGSI_TOKEN_TYPE_INSTRUCTION, - TGSI_TOKEN_TYPE_PROPERTY, -}; - -struct tgsi_token -{ - unsigned Type : 4; /**< TGSI_TOKEN_TYPE_x */ - unsigned NrTokens : 8; /**< UINT */ - unsigned Padding : 20; -}; - -enum tgsi_file_type { - TGSI_FILE_NULL, - TGSI_FILE_CONSTANT, - TGSI_FILE_INPUT, - TGSI_FILE_OUTPUT, - TGSI_FILE_TEMPORARY, - TGSI_FILE_SAMPLER, - TGSI_FILE_ADDRESS, - TGSI_FILE_IMMEDIATE, - TGSI_FILE_SYSTEM_VALUE, - TGSI_FILE_IMAGE, - TGSI_FILE_SAMPLER_VIEW, - TGSI_FILE_BUFFER, - TGSI_FILE_MEMORY, - TGSI_FILE_CONSTBUF, - TGSI_FILE_HW_ATOMIC, - TGSI_FILE_COUNT, /**< how many TGSI_FILE_ types */ -}; - - -#define TGSI_WRITEMASK_NONE 0x00 -#define TGSI_WRITEMASK_X 0x01 -#define TGSI_WRITEMASK_Y 0x02 -#define TGSI_WRITEMASK_XY 0x03 -#define TGSI_WRITEMASK_Z 0x04 -#define TGSI_WRITEMASK_XZ 0x05 -#define TGSI_WRITEMASK_YZ 0x06 -#define TGSI_WRITEMASK_XYZ 0x07 -#define TGSI_WRITEMASK_W 0x08 -#define TGSI_WRITEMASK_XW 0x09 -#define TGSI_WRITEMASK_YW 0x0A -#define TGSI_WRITEMASK_XYW 0x0B -#define TGSI_WRITEMASK_ZW 0x0C -#define TGSI_WRITEMASK_XZW 0x0D -#define TGSI_WRITEMASK_YZW 0x0E -#define TGSI_WRITEMASK_XYZW 0x0F - -enum tgsi_interpolate_mode { - TGSI_INTERPOLATE_CONSTANT, - TGSI_INTERPOLATE_LINEAR, - TGSI_INTERPOLATE_PERSPECTIVE, - TGSI_INTERPOLATE_COLOR, /* special color case for smooth/flat */ - TGSI_INTERPOLATE_COUNT, -}; - -enum tgsi_interpolate_loc { - TGSI_INTERPOLATE_LOC_CENTER, - TGSI_INTERPOLATE_LOC_CENTROID, - TGSI_INTERPOLATE_LOC_SAMPLE, - TGSI_INTERPOLATE_LOC_COUNT, -}; - -enum tgsi_memory_type { - TGSI_MEMORY_TYPE_GLOBAL, /* OpenCL global */ - TGSI_MEMORY_TYPE_SHARED, /* OpenCL local / GLSL shared */ - TGSI_MEMORY_TYPE_PRIVATE, /* OpenCL private */ - TGSI_MEMORY_TYPE_INPUT, /* OpenCL kernel input params */ - TGSI_MEMORY_TYPE_COUNT, -}; - -struct tgsi_declaration -{ - unsigned Type : 4; /**< TGSI_TOKEN_TYPE_DECLARATION */ - unsigned NrTokens : 8; /**< UINT */ - unsigned File : 4; /**< one of TGSI_FILE_x */ - unsigned UsageMask : 4; /**< bitmask of TGSI_WRITEMASK_x flags */ - unsigned Dimension : 1; /**< any extra dimension info? */ - unsigned Semantic : 1; /**< BOOL, any semantic info? */ - unsigned Interpolate : 1; /**< any interpolation info? */ - unsigned Invariant : 1; /**< invariant optimization? */ - unsigned Local : 1; /**< optimize as subroutine local variable? */ - unsigned Array : 1; /**< extra array info? */ - unsigned Atomic : 1; /**< atomic only? for TGSI_FILE_BUFFER */ - unsigned MemType : 2; /**< TGSI_MEMORY_TYPE_x for TGSI_FILE_MEMORY */ - unsigned Padding : 3; -}; - -struct tgsi_declaration_range -{ - unsigned First : 16; /**< UINT */ - unsigned Last : 16; /**< UINT */ -}; - -struct tgsi_declaration_dimension -{ - unsigned Index2D:16; /**< UINT */ - unsigned Padding:16; -}; - -struct tgsi_declaration_interp -{ - unsigned Interpolate : 4; /**< one of TGSI_INTERPOLATE_x */ - unsigned Location : 2; /**< one of TGSI_INTERPOLATE_LOC_x */ - unsigned Padding : 26; -}; - -enum tgsi_semantic { - TGSI_SEMANTIC_POSITION, - TGSI_SEMANTIC_COLOR, - TGSI_SEMANTIC_BCOLOR, /**< back-face color */ - TGSI_SEMANTIC_FOG, - TGSI_SEMANTIC_PSIZE, - TGSI_SEMANTIC_GENERIC, - TGSI_SEMANTIC_NORMAL, - TGSI_SEMANTIC_FACE, - TGSI_SEMANTIC_EDGEFLAG, - TGSI_SEMANTIC_PRIMID, - TGSI_SEMANTIC_INSTANCEID, /**< doesn't include start_instance */ - TGSI_SEMANTIC_VERTEXID, - TGSI_SEMANTIC_STENCIL, - TGSI_SEMANTIC_CLIPDIST, - TGSI_SEMANTIC_CLIPVERTEX, - TGSI_SEMANTIC_GRID_SIZE, /**< grid size in blocks */ - TGSI_SEMANTIC_BLOCK_ID, /**< id of the current block */ - TGSI_SEMANTIC_BLOCK_SIZE, /**< block size in threads */ - TGSI_SEMANTIC_THREAD_ID, /**< block-relative id of the current thread */ - TGSI_SEMANTIC_TEXCOORD, /**< texture or sprite coordinates */ - TGSI_SEMANTIC_PCOORD, /**< point sprite coordinate */ - TGSI_SEMANTIC_VIEWPORT_INDEX, /**< viewport index */ - TGSI_SEMANTIC_LAYER, /**< layer (rendertarget index) */ - TGSI_SEMANTIC_SAMPLEID, - TGSI_SEMANTIC_SAMPLEPOS, - TGSI_SEMANTIC_SAMPLEMASK, - TGSI_SEMANTIC_INVOCATIONID, - TGSI_SEMANTIC_VERTEXID_NOBASE, - TGSI_SEMANTIC_BASEVERTEX, - TGSI_SEMANTIC_PATCH, /**< generic per-patch semantic */ - TGSI_SEMANTIC_TESSCOORD, /**< coordinate being processed by tess */ - TGSI_SEMANTIC_TESSOUTER, /**< outer tessellation levels */ - TGSI_SEMANTIC_TESSINNER, /**< inner tessellation levels */ - TGSI_SEMANTIC_VERTICESIN, /**< number of input vertices */ - TGSI_SEMANTIC_HELPER_INVOCATION, /**< current invocation is helper */ - TGSI_SEMANTIC_BASEINSTANCE, - TGSI_SEMANTIC_DRAWID, - TGSI_SEMANTIC_WORK_DIM, /**< opencl get_work_dim value */ - TGSI_SEMANTIC_SUBGROUP_SIZE, - TGSI_SEMANTIC_SUBGROUP_INVOCATION, - TGSI_SEMANTIC_SUBGROUP_EQ_MASK, - TGSI_SEMANTIC_SUBGROUP_GE_MASK, - TGSI_SEMANTIC_SUBGROUP_GT_MASK, - TGSI_SEMANTIC_SUBGROUP_LE_MASK, - TGSI_SEMANTIC_SUBGROUP_LT_MASK, - TGSI_SEMANTIC_CS_USER_DATA_AMD, - TGSI_SEMANTIC_VIEWPORT_MASK, - TGSI_SEMANTIC_TESS_DEFAULT_OUTER_LEVEL, /**< from set_tess_state */ - TGSI_SEMANTIC_TESS_DEFAULT_INNER_LEVEL, /**< from set_tess_state */ - TGSI_SEMANTIC_COUNT, /**< number of semantic values */ -}; - -struct tgsi_declaration_semantic -{ - unsigned Name : 8; /**< one of TGSI_SEMANTIC_x */ - unsigned Index : 16; /**< UINT */ - unsigned StreamX : 2; /**< vertex stream (for GS output) */ - unsigned StreamY : 2; - unsigned StreamZ : 2; - unsigned StreamW : 2; -}; - -struct tgsi_declaration_image { - unsigned Resource : 8; /**< one of TGSI_TEXTURE_ */ - unsigned Raw : 1; - unsigned Writable : 1; - unsigned Format : 10; /**< one of PIPE_FORMAT_ */ - unsigned Padding : 12; -}; - -enum tgsi_return_type { - TGSI_RETURN_TYPE_UNORM = 0, - TGSI_RETURN_TYPE_SNORM, - TGSI_RETURN_TYPE_SINT, - TGSI_RETURN_TYPE_UINT, - TGSI_RETURN_TYPE_FLOAT, - TGSI_RETURN_TYPE_UNKNOWN, - TGSI_RETURN_TYPE_COUNT -}; - -struct tgsi_declaration_sampler_view { - unsigned Resource : 8; /**< one of TGSI_TEXTURE_ */ - unsigned ReturnTypeX : 6; /**< one of enum tgsi_return_type */ - unsigned ReturnTypeY : 6; /**< one of enum tgsi_return_type */ - unsigned ReturnTypeZ : 6; /**< one of enum tgsi_return_type */ - unsigned ReturnTypeW : 6; /**< one of enum tgsi_return_type */ -}; - -struct tgsi_declaration_array { - unsigned ArrayID : 10; - unsigned Padding : 22; -}; - -enum tgsi_imm_type { - TGSI_IMM_FLOAT32, - TGSI_IMM_UINT32, - TGSI_IMM_INT32, - TGSI_IMM_FLOAT64, - TGSI_IMM_UINT64, - TGSI_IMM_INT64, -}; - -struct tgsi_immediate -{ - unsigned Type : 4; /**< TGSI_TOKEN_TYPE_IMMEDIATE */ - unsigned NrTokens : 14; /**< UINT */ - unsigned DataType : 4; /**< one of TGSI_IMM_x */ - unsigned Padding : 10; -}; - -union tgsi_immediate_data -{ - float Float; - unsigned Uint; - int Int; -}; - -enum tgsi_property_name { - TGSI_PROPERTY_GS_INPUT_PRIM, - TGSI_PROPERTY_GS_OUTPUT_PRIM, - TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES, - TGSI_PROPERTY_FS_COORD_ORIGIN, - TGSI_PROPERTY_FS_COORD_PIXEL_CENTER, - TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS, - TGSI_PROPERTY_FS_DEPTH_LAYOUT, - TGSI_PROPERTY_VS_PROHIBIT_UCPS, - TGSI_PROPERTY_GS_INVOCATIONS, - TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION, - TGSI_PROPERTY_TCS_VERTICES_OUT, - TGSI_PROPERTY_TES_PRIM_MODE, - TGSI_PROPERTY_TES_SPACING, - TGSI_PROPERTY_TES_VERTEX_ORDER_CW, - TGSI_PROPERTY_TES_POINT_MODE, - TGSI_PROPERTY_NUM_CLIPDIST_ENABLED, - TGSI_PROPERTY_NUM_CULLDIST_ENABLED, - TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL, - TGSI_PROPERTY_FS_POST_DEPTH_COVERAGE, - TGSI_PROPERTY_NEXT_SHADER, - TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH, - TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT, - TGSI_PROPERTY_CS_FIXED_BLOCK_DEPTH, - TGSI_PROPERTY_LEGACY_MATH_RULES, - TGSI_PROPERTY_VS_BLIT_SGPRS_AMD, - TGSI_PROPERTY_CS_USER_DATA_COMPONENTS_AMD, - TGSI_PROPERTY_LAYER_VIEWPORT_RELATIVE, - TGSI_PROPERTY_FS_BLEND_EQUATION_ADVANCED, - TGSI_PROPERTY_SEPARABLE_PROGRAM, - TGSI_PROPERTY_COUNT, -}; - -struct tgsi_property { - unsigned Type : 4; /**< TGSI_TOKEN_TYPE_PROPERTY */ - unsigned NrTokens : 8; /**< UINT */ - unsigned PropertyName : 8; /**< one of TGSI_PROPERTY */ - unsigned Padding : 12; -}; - -enum tgsi_fs_coord_origin { - TGSI_FS_COORD_ORIGIN_UPPER_LEFT, - TGSI_FS_COORD_ORIGIN_LOWER_LEFT, -}; - -enum tgsi_fs_coord_pixcenter { - TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER, - TGSI_FS_COORD_PIXEL_CENTER_INTEGER, -}; - -enum tgsi_fs_depth_layout { - TGSI_FS_DEPTH_LAYOUT_NONE, - TGSI_FS_DEPTH_LAYOUT_ANY, - TGSI_FS_DEPTH_LAYOUT_GREATER, - TGSI_FS_DEPTH_LAYOUT_LESS, - TGSI_FS_DEPTH_LAYOUT_UNCHANGED, -}; - -struct tgsi_property_data { - unsigned Data; -}; - -/* TGSI opcodes. - * - * For more information on semantics of opcodes and - * which APIs are known to use which opcodes, see - * gallium/docs/source/tgsi.rst - */ -enum tgsi_opcode { - TGSI_OPCODE_ARL = 0, - TGSI_OPCODE_MOV = 1, - TGSI_OPCODE_LIT = 2, - TGSI_OPCODE_RCP = 3, - TGSI_OPCODE_RSQ = 4, - TGSI_OPCODE_EXP = 5, - TGSI_OPCODE_LOG = 6, - TGSI_OPCODE_MUL = 7, - TGSI_OPCODE_ADD = 8, - TGSI_OPCODE_DP3 = 9, - TGSI_OPCODE_DP4 = 10, - TGSI_OPCODE_DST = 11, - TGSI_OPCODE_MIN = 12, - TGSI_OPCODE_MAX = 13, - TGSI_OPCODE_SLT = 14, - TGSI_OPCODE_SGE = 15, - TGSI_OPCODE_MAD = 16, - TGSI_OPCODE_TEX_LZ = 17, - TGSI_OPCODE_LRP = 18, - TGSI_OPCODE_FMA = 19, - TGSI_OPCODE_SQRT = 20, - TGSI_OPCODE_LDEXP = 21, - TGSI_OPCODE_F2U64 = 22, - TGSI_OPCODE_F2I64 = 23, - TGSI_OPCODE_FRC = 24, - TGSI_OPCODE_TXF_LZ = 25, - TGSI_OPCODE_FLR = 26, - TGSI_OPCODE_ROUND = 27, - TGSI_OPCODE_EX2 = 28, - TGSI_OPCODE_LG2 = 29, - TGSI_OPCODE_POW = 30, - TGSI_OPCODE_DEMOTE = 31, - TGSI_OPCODE_U2I64 = 32, - TGSI_OPCODE_CLOCK = 33, - TGSI_OPCODE_I2I64 = 34, - TGSI_OPCODE_READ_HELPER = 35, - TGSI_OPCODE_COS = 36, - TGSI_OPCODE_DDX = 37, - TGSI_OPCODE_DDY = 38, - TGSI_OPCODE_KILL = 39 /* unconditional */, - TGSI_OPCODE_PK2H = 40, - TGSI_OPCODE_PK2US = 41, - TGSI_OPCODE_PK4B = 42, - TGSI_OPCODE_PK4UB = 43, - TGSI_OPCODE_D2U64 = 44, - TGSI_OPCODE_SEQ = 45, - TGSI_OPCODE_D2I64 = 46, - TGSI_OPCODE_SGT = 47, - TGSI_OPCODE_SIN = 48, - TGSI_OPCODE_SLE = 49, - TGSI_OPCODE_SNE = 50, - TGSI_OPCODE_U642D = 51, - TGSI_OPCODE_TEX = 52, - TGSI_OPCODE_TXD = 53, - TGSI_OPCODE_TXP = 54, - TGSI_OPCODE_UP2H = 55, - TGSI_OPCODE_UP2US = 56, - TGSI_OPCODE_UP4B = 57, - TGSI_OPCODE_UP4UB = 58, - TGSI_OPCODE_U642F = 59, - TGSI_OPCODE_I642F = 60, - TGSI_OPCODE_ARR = 61, - TGSI_OPCODE_I642D = 62, - TGSI_OPCODE_CAL = 63, - TGSI_OPCODE_RET = 64, - TGSI_OPCODE_SSG = 65 /* SGN */, - TGSI_OPCODE_CMP = 66, - /* gap */ - TGSI_OPCODE_TXB = 68, - TGSI_OPCODE_FBFETCH = 69, - TGSI_OPCODE_DIV = 70, - TGSI_OPCODE_DP2 = 71, - TGSI_OPCODE_TXL = 72, - TGSI_OPCODE_BRK = 73, - TGSI_OPCODE_IF = 74, - TGSI_OPCODE_UIF = 75, - TGSI_OPCODE_READ_INVOC = 76, - TGSI_OPCODE_ELSE = 77, - TGSI_OPCODE_ENDIF = 78, - TGSI_OPCODE_DDX_FINE = 79, - TGSI_OPCODE_DDY_FINE = 80, - /* gap */ - TGSI_OPCODE_CEIL = 83, - TGSI_OPCODE_I2F = 84, - TGSI_OPCODE_NOT = 85, - TGSI_OPCODE_TRUNC = 86, - TGSI_OPCODE_SHL = 87, - TGSI_OPCODE_BALLOT = 88, - TGSI_OPCODE_AND = 89, - TGSI_OPCODE_OR = 90, - TGSI_OPCODE_MOD = 91, - TGSI_OPCODE_XOR = 92, - /* gap */ - TGSI_OPCODE_TXF = 94, - TGSI_OPCODE_TXQ = 95, - TGSI_OPCODE_CONT = 96, - TGSI_OPCODE_EMIT = 97, - TGSI_OPCODE_ENDPRIM = 98, - TGSI_OPCODE_BGNLOOP = 99, - TGSI_OPCODE_BGNSUB = 100, - TGSI_OPCODE_ENDLOOP = 101, - TGSI_OPCODE_ENDSUB = 102, - TGSI_OPCODE_ATOMFADD = 103, - TGSI_OPCODE_TXQS = 104, - TGSI_OPCODE_RESQ = 105, - TGSI_OPCODE_READ_FIRST = 106, - TGSI_OPCODE_NOP = 107, - - TGSI_OPCODE_FSEQ = 108, - TGSI_OPCODE_FSGE = 109, - TGSI_OPCODE_FSLT = 110, - TGSI_OPCODE_FSNE = 111, - - TGSI_OPCODE_MEMBAR = 112, - /* gap */ - TGSI_OPCODE_KILL_IF = 116 /* conditional kill */, - TGSI_OPCODE_END = 117 /* aka HALT */, - TGSI_OPCODE_DFMA = 118, - TGSI_OPCODE_F2I = 119, - TGSI_OPCODE_IDIV = 120, - TGSI_OPCODE_IMAX = 121, - TGSI_OPCODE_IMIN = 122, - TGSI_OPCODE_INEG = 123, - TGSI_OPCODE_ISGE = 124, - TGSI_OPCODE_ISHR = 125, - TGSI_OPCODE_ISLT = 126, - TGSI_OPCODE_F2U = 127, - TGSI_OPCODE_U2F = 128, - TGSI_OPCODE_UADD = 129, - TGSI_OPCODE_UDIV = 130, - TGSI_OPCODE_UMAD = 131, - TGSI_OPCODE_UMAX = 132, - TGSI_OPCODE_UMIN = 133, - TGSI_OPCODE_UMOD = 134, - TGSI_OPCODE_UMUL = 135, - TGSI_OPCODE_USEQ = 136, - TGSI_OPCODE_USGE = 137, - TGSI_OPCODE_USHR = 138, - TGSI_OPCODE_USLT = 139, - TGSI_OPCODE_USNE = 140, - TGSI_OPCODE_SWITCH = 141, - TGSI_OPCODE_CASE = 142, - TGSI_OPCODE_DEFAULT = 143, - TGSI_OPCODE_ENDSWITCH = 144, - - /* resource related opcodes */ - TGSI_OPCODE_SAMPLE = 145, - TGSI_OPCODE_SAMPLE_I = 146, - TGSI_OPCODE_SAMPLE_I_MS = 147, - TGSI_OPCODE_SAMPLE_B = 148, - TGSI_OPCODE_SAMPLE_C = 149, - TGSI_OPCODE_SAMPLE_C_LZ = 150, - TGSI_OPCODE_SAMPLE_D = 151, - TGSI_OPCODE_SAMPLE_L = 152, - TGSI_OPCODE_GATHER4 = 153, - TGSI_OPCODE_SVIEWINFO = 154, - TGSI_OPCODE_SAMPLE_POS = 155, - TGSI_OPCODE_SAMPLE_INFO = 156, - - TGSI_OPCODE_UARL = 157, - TGSI_OPCODE_UCMP = 158, - TGSI_OPCODE_IABS = 159, - TGSI_OPCODE_ISSG = 160, - - TGSI_OPCODE_LOAD = 161, - TGSI_OPCODE_STORE = 162, - TGSI_OPCODE_IMG2HND = 163, - TGSI_OPCODE_SAMP2HND = 164, - /* gap */ - TGSI_OPCODE_BARRIER = 166, - - TGSI_OPCODE_ATOMUADD = 167, - TGSI_OPCODE_ATOMXCHG = 168, - TGSI_OPCODE_ATOMCAS = 169, - TGSI_OPCODE_ATOMAND = 170, - TGSI_OPCODE_ATOMOR = 171, - TGSI_OPCODE_ATOMXOR = 172, - TGSI_OPCODE_ATOMUMIN = 173, - TGSI_OPCODE_ATOMUMAX = 174, - TGSI_OPCODE_ATOMIMIN = 175, - TGSI_OPCODE_ATOMIMAX = 176, - - /* to be used for shadow cube map compares */ - TGSI_OPCODE_TEX2 = 177, - TGSI_OPCODE_TXB2 = 178, - TGSI_OPCODE_TXL2 = 179, - - TGSI_OPCODE_IMUL_HI = 180, - TGSI_OPCODE_UMUL_HI = 181, - - TGSI_OPCODE_TG4 = 182, - - TGSI_OPCODE_LODQ = 183, - - TGSI_OPCODE_IBFE = 184, - TGSI_OPCODE_UBFE = 185, - TGSI_OPCODE_BFI = 186, - TGSI_OPCODE_BREV = 187, - TGSI_OPCODE_POPC = 188, - TGSI_OPCODE_LSB = 189, - TGSI_OPCODE_IMSB = 190, - TGSI_OPCODE_UMSB = 191, - - TGSI_OPCODE_INTERP_CENTROID = 192, - TGSI_OPCODE_INTERP_SAMPLE = 193, - TGSI_OPCODE_INTERP_OFFSET = 194, - - /* sm5 marked opcodes are supported in D3D11 optionally - also DMOV, DMOVC */ - TGSI_OPCODE_F2D = 195 /* SM5 */, - TGSI_OPCODE_D2F = 196, - TGSI_OPCODE_DABS = 197, - TGSI_OPCODE_DNEG = 198 /* SM5 */, - TGSI_OPCODE_DADD = 199 /* SM5 */, - TGSI_OPCODE_DMUL = 200 /* SM5 */, - TGSI_OPCODE_DMAX = 201 /* SM5 */, - TGSI_OPCODE_DMIN = 202 /* SM5 */, - TGSI_OPCODE_DSLT = 203 /* SM5 */, - TGSI_OPCODE_DSGE = 204 /* SM5 */, - TGSI_OPCODE_DSEQ = 205 /* SM5 */, - TGSI_OPCODE_DSNE = 206 /* SM5 */, - TGSI_OPCODE_DRCP = 207 /* eg, cayman */, - TGSI_OPCODE_DSQRT = 208 /* eg, cayman also has DRSQ */, - TGSI_OPCODE_DMAD = 209, - TGSI_OPCODE_DFRAC = 210 /* eg, cayman */, - TGSI_OPCODE_DLDEXP = 211 /* eg, cayman */, - TGSI_OPCODE_D2I = 213, - TGSI_OPCODE_I2D = 214, - TGSI_OPCODE_D2U = 215, - TGSI_OPCODE_U2D = 216, - TGSI_OPCODE_DRSQ = 217 /* eg, cayman also has DRSQ */, - TGSI_OPCODE_DTRUNC = 218 /* nvc0 */, - TGSI_OPCODE_DCEIL = 219 /* nvc0 */, - TGSI_OPCODE_DFLR = 220 /* nvc0 */, - TGSI_OPCODE_DROUND = 221 /* nvc0 */, - TGSI_OPCODE_DSSG = 222, - - TGSI_OPCODE_VOTE_ANY = 223, - TGSI_OPCODE_VOTE_ALL = 224, - TGSI_OPCODE_VOTE_EQ = 225, - - TGSI_OPCODE_U64SEQ = 226, - TGSI_OPCODE_U64SNE = 227, - TGSI_OPCODE_I64SLT = 228, - TGSI_OPCODE_U64SLT = 229, - TGSI_OPCODE_I64SGE = 230, - TGSI_OPCODE_U64SGE = 231, - - TGSI_OPCODE_I64MIN = 232, - TGSI_OPCODE_U64MIN = 233, - TGSI_OPCODE_I64MAX = 234, - TGSI_OPCODE_U64MAX = 235, - - TGSI_OPCODE_I64ABS = 236, - TGSI_OPCODE_I64SSG = 237, - TGSI_OPCODE_I64NEG = 238, - - TGSI_OPCODE_U64ADD = 239, - TGSI_OPCODE_U64MUL = 240, - TGSI_OPCODE_U64SHL = 241, - TGSI_OPCODE_I64SHR = 242, - TGSI_OPCODE_U64SHR = 243, - - TGSI_OPCODE_I64DIV = 244, - TGSI_OPCODE_U64DIV = 245, - TGSI_OPCODE_I64MOD = 246, - TGSI_OPCODE_U64MOD = 247, - - TGSI_OPCODE_DDIV = 248, - - TGSI_OPCODE_LOD = 249, - - TGSI_OPCODE_ATOMINC_WRAP = 250, - TGSI_OPCODE_ATOMDEC_WRAP = 251, - - TGSI_OPCODE_LAST = 252, -}; - - -/** - * Opcode is the operation code to execute. A given operation defines the - * semantics how the source registers (if any) are interpreted and what is - * written to the destination registers (if any) as a result of execution. - * - * NumDstRegs and NumSrcRegs is the number of destination and source registers, - * respectively. For a given operation code, those numbers are fixed and are - * present here only for convenience. - * - * Saturate controls how are final results in destination registers modified. - */ - -struct tgsi_instruction -{ - unsigned Type : 4; /* TGSI_TOKEN_TYPE_INSTRUCTION */ - unsigned NrTokens : 8; /* UINT */ - unsigned Opcode : 8; /* TGSI_OPCODE_ */ - unsigned Saturate : 1; /* BOOL */ - unsigned NumDstRegs : 2; /* UINT */ - unsigned NumSrcRegs : 4; /* UINT */ - unsigned Label : 1; - unsigned Texture : 1; - unsigned Memory : 1; - unsigned Precise : 1; - unsigned Padding : 1; -}; - -/* - * If tgsi_instruction::Label is TRUE, tgsi_instruction_label follows. - * - * If tgsi_instruction::Texture is TRUE, tgsi_instruction_texture follows. - * if texture instruction has a number of offsets, - * then tgsi_instruction::Texture::NumOffset of tgsi_texture_offset follow. - * - * Then, tgsi_instruction::NumDstRegs of tgsi_dst_register follow. - * - * Then, tgsi_instruction::NumSrcRegs of tgsi_src_register follow. - * - * tgsi_instruction::NrTokens contains the total number of words that make the - * instruction, including the instruction word. - */ - -enum tgsi_swizzle { - TGSI_SWIZZLE_X, - TGSI_SWIZZLE_Y, - TGSI_SWIZZLE_Z, - TGSI_SWIZZLE_W, -}; - -struct tgsi_instruction_label -{ - unsigned Label : 24; /* UINT */ - unsigned Padding : 8; -}; - -enum tgsi_texture_type { - TGSI_TEXTURE_BUFFER, - TGSI_TEXTURE_1D, - TGSI_TEXTURE_2D, - TGSI_TEXTURE_3D, - TGSI_TEXTURE_CUBE, - TGSI_TEXTURE_RECT, - TGSI_TEXTURE_SHADOW1D, - TGSI_TEXTURE_SHADOW2D, - TGSI_TEXTURE_SHADOWRECT, - TGSI_TEXTURE_1D_ARRAY, - TGSI_TEXTURE_2D_ARRAY, - TGSI_TEXTURE_SHADOW1D_ARRAY, - TGSI_TEXTURE_SHADOW2D_ARRAY, - TGSI_TEXTURE_SHADOWCUBE, - TGSI_TEXTURE_2D_MSAA, - TGSI_TEXTURE_2D_ARRAY_MSAA, - TGSI_TEXTURE_CUBE_ARRAY, - TGSI_TEXTURE_SHADOWCUBE_ARRAY, - TGSI_TEXTURE_UNKNOWN, - TGSI_TEXTURE_COUNT, -}; - -struct tgsi_instruction_texture -{ - unsigned Texture : 8; /* TGSI_TEXTURE_ */ - unsigned NumOffsets : 4; - unsigned ReturnType : 3; /* TGSI_RETURN_TYPE_x */ - unsigned Padding : 17; -}; - -/* for texture offsets in GLSL and DirectX. - * Generally these always come from TGSI_FILE_IMMEDIATE, - * however DX11 appears to have the capability to do - * non-constant texture offsets. - */ -struct tgsi_texture_offset -{ - int Index : 16; - unsigned File : 4; /**< one of TGSI_FILE_x */ - unsigned SwizzleX : 2; /* TGSI_SWIZZLE_x */ - unsigned SwizzleY : 2; /* TGSI_SWIZZLE_x */ - unsigned SwizzleZ : 2; /* TGSI_SWIZZLE_x */ - unsigned Padding : 6; -}; - -/** - * File specifies the register array to access. - * - * Index specifies the element number of a register in the register file. - * - * If Indirect is TRUE, Index should be offset by the X component of the indirect - * register that follows. The register can be now fetched into local storage - * for further processing. - * - * If Negate is TRUE, all components of the fetched register are negated. - * - * The fetched register components are swizzled according to SwizzleX, SwizzleY, - * SwizzleZ and SwizzleW. - * - */ - -struct tgsi_src_register -{ - unsigned File : 4; /* TGSI_FILE_ */ - unsigned Indirect : 1; /* BOOL */ - unsigned Dimension : 1; /* BOOL */ - int Index : 16; /* SINT */ - unsigned SwizzleX : 2; /* TGSI_SWIZZLE_ */ - unsigned SwizzleY : 2; /* TGSI_SWIZZLE_ */ - unsigned SwizzleZ : 2; /* TGSI_SWIZZLE_ */ - unsigned SwizzleW : 2; /* TGSI_SWIZZLE_ */ - unsigned Absolute : 1; /* BOOL */ - unsigned Negate : 1; /* BOOL */ -}; - -/** - * If tgsi_src_register::Indirect is TRUE, tgsi_ind_register follows. - * - * File, Index and Swizzle are handled the same as in tgsi_src_register. - * - * If ArrayID is zero the whole register file might be indirectly addressed, - * if not only the Declaration with this ArrayID is accessed by this operand. - * - */ - -struct tgsi_ind_register -{ - unsigned File : 4; /* TGSI_FILE_ */ - int Index : 16; /* SINT */ - unsigned Swizzle : 2; /* TGSI_SWIZZLE_ */ - unsigned ArrayID : 10; /* UINT */ -}; - -/** - * If tgsi_src_register::Dimension is TRUE, tgsi_dimension follows. - */ - -struct tgsi_dimension -{ - unsigned Indirect : 1; /* BOOL */ - unsigned Dimension : 1; /* BOOL */ - unsigned Padding : 14; - int Index : 16; /* SINT */ -}; - -struct tgsi_dst_register -{ - unsigned File : 4; /* TGSI_FILE_ */ - unsigned WriteMask : 4; /* TGSI_WRITEMASK_ */ - unsigned Indirect : 1; /* BOOL */ - unsigned Dimension : 1; /* BOOL */ - int Index : 16; /* SINT */ - unsigned Padding : 6; -}; - -#define TGSI_MEMORY_COHERENT (1 << 0) -#define TGSI_MEMORY_RESTRICT (1 << 1) -#define TGSI_MEMORY_VOLATILE (1 << 2) -/* The "stream" cache policy will minimize memory cache usage if other - * memory operations need the cache. - */ -#define TGSI_MEMORY_STREAM_CACHE_POLICY (1 << 3) - -/** - * Specifies the type of memory access to do for the LOAD/STORE instruction. - */ -struct tgsi_instruction_memory -{ - unsigned Qualifier : 4; /* TGSI_MEMORY_ */ - unsigned Texture : 8; /* only for images: TGSI_TEXTURE_ */ - unsigned Format : 10; /* only for images: PIPE_FORMAT_ */ - unsigned Padding : 10; -}; - -#define TGSI_MEMBAR_SHADER_BUFFER (1 << 0) -#define TGSI_MEMBAR_ATOMIC_BUFFER (1 << 1) -#define TGSI_MEMBAR_SHADER_IMAGE (1 << 2) -#define TGSI_MEMBAR_SHARED (1 << 3) -#define TGSI_MEMBAR_THREAD_GROUP (1 << 4) - -#ifdef __cplusplus -} -#endif - -#endif /* P_SHADER_TOKENS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_state.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_state.h deleted file mode 100644 index cc0d306..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_state.h +++ /dev/null @@ -1,1102 +0,0 @@ -/************************************************************************** - * - * Copyright 2007 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * - * Abstract graphics pipe state objects. - * - * Basic notes: - * 1. Want compact representations, so we use bitfields. - * 2. Put bitfields before other (GLfloat) fields. - * 3. enum bitfields need to be at least one bit extra in size so the most - * significant bit is zero. MSVC treats enums as signed so if the high - * bit is set, the value will be interpreted as a negative number. - * That causes trouble in various places. - */ - - -#ifndef PIPE_STATE_H -#define PIPE_STATE_H - -#include "../../../util/u_memory.h" - -#include "p_compiler.h" -#include "p_defines.h" -#include "../../../util/format/u_formats.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Implementation limits - */ -#define PIPE_MAX_ATTRIBS 32 -#define PIPE_MAX_CLIP_PLANES 8 -#define PIPE_MAX_COLOR_BUFS 8 -#define PIPE_MAX_CONSTANT_BUFFERS 32 -#define PIPE_MAX_SAMPLERS 32 -#define PIPE_MAX_SHADER_INPUTS 80 /* 32 GENERIC + 32 PATCH + 16 others */ -#define PIPE_MAX_SHADER_OUTPUTS 80 /* 32 GENERIC + 32 PATCH + 16 others */ -#define PIPE_MAX_SHADER_SAMPLER_VIEWS 128 -#define PIPE_MAX_SHADER_BUFFERS 32 -#define PIPE_MAX_SHADER_IMAGES 64 -#define PIPE_MAX_TEXTURE_LEVELS 16 -#define PIPE_MAX_SO_BUFFERS 4 -#define PIPE_MAX_SO_OUTPUTS 64 -#define PIPE_MAX_VIEWPORTS 16 -#define PIPE_MAX_CLIP_OR_CULL_DISTANCE_COUNT 8 -#define PIPE_MAX_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT 2 -#define PIPE_MAX_WINDOW_RECTANGLES 8 -#define PIPE_MAX_SAMPLE_LOCATION_GRID_SIZE 4 - -#define PIPE_MAX_HW_ATOMIC_BUFFERS 32 -#define PIPE_MAX_VERTEX_STREAMS 4 - -struct pipe_reference -{ - int32_t count; /* atomic */ -}; - - - -/** - * Primitive (point/line/tri) rasterization info - */ -struct pipe_rasterizer_state -{ - unsigned flatshade:1; - unsigned light_twoside:1; - unsigned clamp_vertex_color:1; - unsigned clamp_fragment_color:1; - unsigned front_ccw:1; - unsigned cull_face:2; /**< PIPE_FACE_x */ - unsigned fill_front:2; /**< PIPE_POLYGON_MODE_x */ - unsigned fill_back:2; /**< PIPE_POLYGON_MODE_x */ - unsigned offset_point:1; - unsigned offset_line:1; - unsigned offset_tri:1; - unsigned scissor:1; - unsigned poly_smooth:1; - unsigned poly_stipple_enable:1; - unsigned point_smooth:1; - unsigned sprite_coord_mode:1; /**< PIPE_SPRITE_COORD_ */ - unsigned point_quad_rasterization:1; /** points rasterized as quads or points */ - unsigned point_tri_clip:1; /** large points clipped as tris or points */ - unsigned point_size_per_vertex:1; /**< size computed in vertex shader */ - unsigned multisample:1; /* XXX maybe more ms state in future */ - unsigned no_ms_sample_mask_out:1; - unsigned force_persample_interp:1; - unsigned line_smooth:1; - unsigned line_stipple_enable:1; - unsigned line_last_pixel:1; - unsigned line_rectangular:1; /** lines rasterized as rectangles or parallelograms */ - unsigned conservative_raster_mode:2; /**< PIPE_CONSERVATIVE_RASTER_x */ - - /** - * Use the first vertex of a primitive as the provoking vertex for - * flat shading. - */ - unsigned flatshade_first:1; - - unsigned half_pixel_center:1; - unsigned bottom_edge_rule:1; - - /* - * Conservative rasterization subpixel precision bias in bits - */ - unsigned subpixel_precision_x:4; - unsigned subpixel_precision_y:4; - - /** - * When true, rasterization is disabled and no pixels are written. - * This only makes sense with the Stream Out functionality. - */ - unsigned rasterizer_discard:1; - - /** - * Exposed by PIPE_CAP_TILE_RASTER_ORDER. When true, - * tile_raster_order_increasing_* indicate the order that the rasterizer - * should render tiles, to meet the requirements of - * GL_MESA_tile_raster_order. - */ - unsigned tile_raster_order_fixed:1; - unsigned tile_raster_order_increasing_x:1; - unsigned tile_raster_order_increasing_y:1; - - /** - * When false, depth clipping is disabled and the depth value will be - * clamped later at the per-pixel level before depth testing. - * This depends on PIPE_CAP_DEPTH_CLIP_DISABLE. - * - * If PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE is unsupported, depth_clip_near - * is equal to depth_clip_far. - */ - unsigned depth_clip_near:1; - unsigned depth_clip_far:1; - - /** - * When true, depth clamp is enabled. - * If PIPE_CAP_DEPTH_CLAMP_ENABLE is unsupported, this is always the inverse - * of depth_clip_far. - */ - unsigned depth_clamp:1; - - /** - * When true clip space in the z axis goes from [0..1] (D3D). When false - * [-1, 1] (GL). - * - * NOTE: D3D will always use depth clamping. - */ - unsigned clip_halfz:1; - - /** - * When true do not scale offset_units and use same rules for unorm and - * float depth buffers (D3D9). When false use GL/D3D1X behaviour. - * This depends on PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED. - */ - unsigned offset_units_unscaled:1; - - /** - * Depth values output from fragment shader may be outside 0..1. - * These have to be clamped for use with UNORM buffers. - * Vulkan can allow this with an extension, - * GL could with NV_depth_buffer_float, but GLES doesn't. - */ - unsigned unclamped_fragment_depth_values:1; - - /** - * Enable bits for clipping half-spaces. - * This applies to both user clip planes and shader clip distances. - * Note that if the bound shader exports any clip distances, these - * replace all user clip planes, and clip half-spaces enabled here - * but not written by the shader count as disabled. - */ - unsigned clip_plane_enable:PIPE_MAX_CLIP_PLANES; - - unsigned line_stipple_factor:8; /**< [1..256] actually */ - unsigned line_stipple_pattern:16; - - /** - * Replace the given TEXCOORD inputs with point coordinates, max. 8 inputs. - * If TEXCOORD (including PCOORD) are unsupported, replace GENERIC inputs - * instead. Max. 9 inputs: 8x GENERIC to emulate TEXCOORD, and 1x GENERIC - * to emulate PCOORD. - */ - uint16_t sprite_coord_enable; /* 0-7: TEXCOORD/GENERIC, 8: PCOORD */ - - float line_width; - float point_size; /**< used when no per-vertex size */ - float offset_units; - float offset_scale; - float offset_clamp; - float conservative_raster_dilate; -}; - - -struct pipe_poly_stipple -{ - unsigned stipple[32]; -}; - - -struct pipe_viewport_state -{ - float scale[3]; - float translate[3]; - enum pipe_viewport_swizzle swizzle_x:8; - enum pipe_viewport_swizzle swizzle_y:8; - enum pipe_viewport_swizzle swizzle_z:8; - enum pipe_viewport_swizzle swizzle_w:8; -}; - - -struct pipe_scissor_state -{ - unsigned minx:16; - unsigned miny:16; - unsigned maxx:16; - unsigned maxy:16; -}; - - -struct pipe_clip_state -{ - float ucp[PIPE_MAX_CLIP_PLANES][4]; -}; - -/** - * A single output for vertex transform feedback. - */ -struct pipe_stream_output -{ - unsigned register_index:6; /**< 0 to 63 (OUT index) */ - unsigned start_component:2; /** 0 to 3 */ - unsigned num_components:3; /** 1 to 4 */ - unsigned output_buffer:3; /**< 0 to PIPE_MAX_SO_BUFFERS */ - unsigned dst_offset:16; /**< offset into the buffer in dwords */ - unsigned stream:2; /**< 0 to 3 */ -}; - -/** - * Stream output for vertex transform feedback. - */ -struct pipe_stream_output_info -{ - unsigned num_outputs; - /** stride for an entire vertex for each buffer in dwords */ - uint16_t stride[PIPE_MAX_SO_BUFFERS]; - - /** - * Array of stream outputs, in the order they are to be written in. - * Selected components are tightly packed into the output buffer. - */ - struct pipe_stream_output output[PIPE_MAX_SO_OUTPUTS]; -}; - -/** - * The 'type' parameter identifies whether the shader state contains TGSI - * tokens, etc. If the driver returns 'PIPE_SHADER_IR_TGSI' for the - * 'PIPE_SHADER_CAP_PREFERRED_IR' shader param, the ir will *always* be - * 'PIPE_SHADER_IR_TGSI' and the tokens ptr will be valid. If the driver - * requests a different 'pipe_shader_ir' type, then it must check the 'type' - * enum to see if it is getting TGSI tokens or its preferred IR. - * - * TODO pipe_compute_state should probably get similar treatment to handle - * multiple IR's in a cleaner way.. - * - * NOTE: since it is expected that the consumer will want to perform - * additional passes on the nir_shader, the driver takes ownership of - * the nir_shader. If gallium frontends need to hang on to the IR (for - * example, variant management), it should use nir_shader_clone(). - */ -struct pipe_shader_state -{ - enum pipe_shader_ir type; - /* TODO move tokens into union. */ - const struct tgsi_token *tokens; - union { - void *native; - void *nir; - } ir; - struct pipe_stream_output_info stream_output; -}; - -static inline void -pipe_shader_state_from_tgsi(struct pipe_shader_state *state, - const struct tgsi_token *tokens) -{ - state->type = PIPE_SHADER_IR_TGSI; - state->tokens = tokens; - memset(&state->stream_output, 0, sizeof(state->stream_output)); -} - - -struct pipe_stencil_state -{ - unsigned enabled:1; /**< stencil[0]: stencil enabled, stencil[1]: two-side enabled */ - unsigned func:3; /**< PIPE_FUNC_x */ - unsigned fail_op:3; /**< PIPE_STENCIL_OP_x */ - unsigned zpass_op:3; /**< PIPE_STENCIL_OP_x */ - unsigned zfail_op:3; /**< PIPE_STENCIL_OP_x */ - unsigned valuemask:8; - unsigned writemask:8; -}; - - -struct pipe_depth_stencil_alpha_state -{ - struct pipe_stencil_state stencil[2]; /**< [0] = front, [1] = back */ - - unsigned alpha_enabled:1; /**< alpha test enabled? */ - unsigned alpha_func:3; /**< PIPE_FUNC_x */ - - unsigned depth_enabled:1; /**< depth test enabled? */ - unsigned depth_writemask:1; /**< allow depth buffer writes? */ - unsigned depth_func:3; /**< depth test func (PIPE_FUNC_x) */ - unsigned depth_bounds_test:1; /**< depth bounds test enabled? */ - - float alpha_ref_value; /**< reference value */ - double depth_bounds_min; /**< minimum depth bound */ - double depth_bounds_max; /**< maximum depth bound */ -}; - - -struct pipe_rt_blend_state -{ - unsigned blend_enable:1; - - unsigned rgb_func:3; /**< PIPE_BLEND_x */ - unsigned rgb_src_factor:5; /**< PIPE_BLENDFACTOR_x */ - unsigned rgb_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ - - unsigned alpha_func:3; /**< PIPE_BLEND_x */ - unsigned alpha_src_factor:5; /**< PIPE_BLENDFACTOR_x */ - unsigned alpha_dst_factor:5; /**< PIPE_BLENDFACTOR_x */ - - unsigned colormask:4; /**< bitmask of PIPE_MASK_R/G/B/A */ -}; - - -struct pipe_blend_state -{ - unsigned independent_blend_enable:1; - unsigned logicop_enable:1; - unsigned logicop_func:4; /**< PIPE_LOGICOP_x */ - unsigned dither:1; - unsigned alpha_to_coverage:1; - unsigned alpha_to_coverage_dither:1; - unsigned alpha_to_one:1; - unsigned max_rt:3; /* index of max rt, Ie. # of cbufs minus 1 */ - unsigned advanced_blend_func:4; - unsigned blend_coherent:1; - struct pipe_rt_blend_state rt[PIPE_MAX_COLOR_BUFS]; -}; - - -struct pipe_blend_color -{ - float color[4]; -}; - - -struct pipe_stencil_ref -{ - ubyte ref_value[2]; -}; - - -/** - * Note that pipe_surfaces are "texture views for rendering" - * and so in the case of ARB_framebuffer_no_attachment there - * is no pipe_surface state available such that we may - * extract the number of samples and layers. - */ -struct pipe_framebuffer_state -{ - uint16_t width, height; - uint16_t layers; /**< Number of layers in a no-attachment framebuffer */ - ubyte samples; /**< Number of samples in a no-attachment framebuffer */ - - /** multiple color buffers for multiple render targets */ - ubyte nr_cbufs; - struct pipe_surface *cbufs[PIPE_MAX_COLOR_BUFS]; - - struct pipe_surface *zsbuf; /**< Z/stencil buffer */ - - struct pipe_resource *resolve; -}; - - -/** - * Texture sampler state. - */ -struct pipe_sampler_state -{ - unsigned wrap_s:3; /**< PIPE_TEX_WRAP_x */ - unsigned wrap_t:3; /**< PIPE_TEX_WRAP_x */ - unsigned wrap_r:3; /**< PIPE_TEX_WRAP_x */ - unsigned min_img_filter:1; /**< PIPE_TEX_FILTER_x */ - unsigned min_mip_filter:2; /**< PIPE_TEX_MIPFILTER_x */ - unsigned mag_img_filter:1; /**< PIPE_TEX_FILTER_x */ - unsigned compare_mode:1; /**< PIPE_TEX_COMPARE_x */ - unsigned compare_func:3; /**< PIPE_FUNC_x */ - unsigned unnormalized_coords:1; /**< Are coords normalized to [0,1]? */ - unsigned max_anisotropy:5; - unsigned seamless_cube_map:1; - unsigned border_color_is_integer:1; - unsigned reduction_mode:2; /**< PIPE_TEX_REDUCTION_x */ - unsigned pad:5; /**< take bits from this for new members */ - float lod_bias; /**< LOD/lambda bias */ - float min_lod, max_lod; /**< LOD clamp range, after bias */ - union pipe_color_union border_color; - enum pipe_format border_color_format; /**< only with PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_FREEDRENO, must be last */ -}; - -union pipe_surface_desc { - struct { - unsigned level; - unsigned first_layer:16; - unsigned last_layer:16; - } tex; - struct { - unsigned first_element; - unsigned last_element; - } buf; -}; - -/** - * A view into a texture that can be bound to a color render target / - * depth stencil attachment point. - */ -struct pipe_surface -{ - struct pipe_reference reference; - enum pipe_format format:16; - unsigned writable:1; /**< writable shader resource */ - struct pipe_resource *texture; /**< resource into which this is a view */ - struct pipe_context *context; /**< context this surface belongs to */ - - /* XXX width/height should be removed */ - uint16_t width; /**< logical width in pixels */ - uint16_t height; /**< logical height in pixels */ - - /** - * Number of samples for the surface. This will be 0 if rendering - * should use the resource's nr_samples, or another value if the resource - * is bound using FramebufferTexture2DMultisampleEXT. - */ - unsigned nr_samples:8; - - union pipe_surface_desc u; -}; - - -/** - * A view into a texture that can be bound to a shader stage. - */ -struct pipe_sampler_view -{ - /* Put the refcount on its own cache line to prevent "False sharing". */ - EXCLUSIVE_CACHELINE(struct pipe_reference reference); - - enum pipe_format format:14; /**< typed PIPE_FORMAT_x */ - bool is_tex2d_from_buf:1; /**< true if union is tex2d_from_buf */ - enum pipe_texture_target target:5; /**< PIPE_TEXTURE_x */ - unsigned swizzle_r:3; /**< PIPE_SWIZZLE_x for red component */ - unsigned swizzle_g:3; /**< PIPE_SWIZZLE_x for green component */ - unsigned swizzle_b:3; /**< PIPE_SWIZZLE_x for blue component */ - unsigned swizzle_a:3; /**< PIPE_SWIZZLE_x for alpha component */ - struct pipe_resource *texture; /**< texture into which this is a view */ - struct pipe_context *context; /**< context this view belongs to */ - union { - struct { - unsigned first_layer:16; /**< first layer to use for array textures */ - unsigned last_layer:16; /**< last layer to use for array textures */ - unsigned first_level:8; /**< first mipmap level to use */ - unsigned last_level:8; /**< last mipmap level to use */ - } tex; - struct { - unsigned offset; /**< offset in bytes */ - unsigned size; /**< size of the readable sub-range in bytes */ - } buf; - struct { - unsigned offset; /**< offset in pixels */ - uint16_t row_stride; /**< size of the image row_stride in pixels */ - uint16_t width; /**< width of image provided by application */ - uint16_t height; /**< height of image provided by application */ - } tex2d_from_buf; /**< used in cl extension cl_khr_image2d_from_buffer */ - } u; -}; - - -/** - * A description of a buffer or texture image that can be bound to a shader - * stage. - * - * Note that pipe_image_view::access comes from the frontend API, while - * shader_access comes from the shader and may contain additional information - * (ie. coherent/volatile may be set on shader_access but not on access) - */ -struct pipe_image_view -{ - struct pipe_resource *resource; /**< resource into which this is a view */ - enum pipe_format format; /**< typed PIPE_FORMAT_x */ - uint16_t access; /**< PIPE_IMAGE_ACCESS_x */ - uint16_t shader_access; /**< PIPE_IMAGE_ACCESS_x */ - union { - struct { - unsigned first_layer:16; /**< first layer to use for array textures */ - unsigned last_layer:16; /**< last layer to use for array textures */ - unsigned level:8; /**< mipmap level to use */ - } tex; - struct { - unsigned offset; /**< offset in bytes */ - unsigned size; /**< size of the accessible sub-range in bytes */ - } buf; - struct { - unsigned offset; /**< offset in pixels */ - uint16_t row_stride; /**< size of the image row_stride in pixels */ - uint16_t width; /**< width of image provided by application */ - uint16_t height; /**< height of image provided by application */ - } tex2d_from_buf; /**< used in cl extension cl_khr_image2d_from_buffer */ - } u; -}; - - -/** - * Subregion of 1D/2D/3D image resource. - */ -struct pipe_box -{ - /* Fields only used by textures use int16_t instead of int. - * x and width are used by buffers, so they need the full 32-bit range. - */ - int x; - int16_t y; - int16_t z; - int width; - int16_t height; - int16_t depth; -}; - - -/** - * A memory object/resource such as a vertex buffer or texture. - */ -struct pipe_resource -{ - /* Put the refcount on its own cache line to prevent "False sharing". */ - EXCLUSIVE_CACHELINE(struct pipe_reference reference); - - unsigned width0; /**< Used by both buffers and textures. */ - uint16_t height0; /* Textures: The maximum height/depth/array_size is 16k. */ - uint16_t depth0; - uint16_t array_size; - - enum pipe_format format:16; /**< PIPE_FORMAT_x */ - enum pipe_texture_target target:8; /**< PIPE_TEXTURE_x */ - unsigned last_level:8; /**< Index of last mipmap level present/defined */ - - /** Number of samples determining quality, driving rasterizer, shading, - * and framebuffer. - */ - unsigned nr_samples:8; - - /** Multiple samples within a pixel can have the same value. - * nr_storage_samples determines how many slots for different values - * there are per pixel. Only color buffers can set this lower than - * nr_samples. - */ - unsigned nr_storage_samples:8; - - unsigned nr_sparse_levels:8; /**< Mipmap levels support partial resident */ - - unsigned usage:8; /**< PIPE_USAGE_x (not a bitmask) */ - unsigned bind; /**< bitmask of PIPE_BIND_x */ - unsigned flags; /**< bitmask of PIPE_RESOURCE_FLAG_x */ - - /** - * For planar images, ie. YUV EGLImage external, etc, pointer to the - * next plane. - */ - struct pipe_resource *next; - /* The screen pointer should be last for optimal structure packing. */ - struct pipe_screen *screen; /**< screen that this texture belongs to */ -}; - -/** - * Opaque object used for separate resource/memory allocations. - */ -struct pipe_memory_allocation; - -/** - * Transfer object. For data transfer to/from a resource. - */ -struct pipe_transfer -{ - struct pipe_resource *resource; /**< resource to transfer to/from */ - enum pipe_map_flags usage:24; - unsigned level:8; /**< texture mipmap level */ - struct pipe_box box; /**< region of the resource to access */ - unsigned stride; /**< row stride in bytes */ - unsigned layer_stride; /**< image/layer stride in bytes */ - - /* Offset into a driver-internal staging buffer to make use of unused - * padding in this structure. - */ - unsigned offset; -}; - - -/** - * A vertex buffer. Typically, all the vertex data/attributes for - * drawing something will be in one buffer. But it's also possible, for - * example, to put colors in one buffer and texcoords in another. - */ -struct pipe_vertex_buffer -{ - uint16_t stride; /**< stride to same attrib in next vertex, in bytes */ - bool is_user_buffer; - unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ - - union { - struct pipe_resource *resource; /**< the actual buffer */ - const void *user; /**< pointer to a user buffer */ - } buffer; -}; - - -/** - * A constant buffer. A subrange of an existing buffer can be set - * as a constant buffer. - */ -struct pipe_constant_buffer -{ - struct pipe_resource *buffer; /**< the actual buffer */ - unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ - unsigned buffer_size; /**< how much data can be read in shader */ - const void *user_buffer; /**< pointer to a user buffer if buffer == NULL */ -}; - - -/** - * An untyped shader buffer supporting loads, stores, and atomics. - */ -struct pipe_shader_buffer { - struct pipe_resource *buffer; /**< the actual buffer */ - unsigned buffer_offset; /**< offset to start of data in buffer, in bytes */ - unsigned buffer_size; /**< how much data can be read in shader */ -}; - - -/** - * A stream output target. The structure specifies the range vertices can - * be written to. - * - * In addition to that, the structure should internally maintain the offset - * into the buffer, which should be incremented everytime something is written - * (appended) to it. The internal offset is buffer_offset + how many bytes - * have been written. The internal offset can be stored on the device - * and the CPU actually doesn't have to query it. - * - * Note that the buffer_size variable is actually specifying the available - * space in the buffer, not the size of the attached buffer. - * In other words in majority of cases buffer_size would simply be - * 'buffer->width0 - buffer_offset', so buffer_size refers to the size - * of the buffer left, after accounting for buffer offset, for stream output - * to write to. - * - * Use PIPE_QUERY_SO_STATISTICS to know how many primitives have - * actually been written. - */ -struct pipe_stream_output_target -{ - struct pipe_reference reference; - struct pipe_resource *buffer; /**< the output buffer */ - struct pipe_context *context; /**< context this SO target belongs to */ - - unsigned buffer_offset; /**< offset where data should be written, in bytes */ - unsigned buffer_size; /**< how much data is allowed to be written */ -}; - - -/** - * Information to describe a vertex attribute (position, color, etc) - */ -struct pipe_vertex_element -{ - /** Offset of this attribute, in bytes, from the start of the vertex */ - uint16_t src_offset; - - /** Which vertex_buffer (as given to pipe->set_vertex_buffer()) does - * this attribute live in? - */ - uint8_t vertex_buffer_index:7; - - /** - * Whether this element refers to a dual-slot vertex shader input. - * The purpose of this field is to do dual-slot lowering when the CSO is - * created instead of during every state change. - * - * It's lowered by util_lower_uint64_vertex_elements. - */ - bool dual_slot:1; - - /** - * This has only 8 bits because all vertex formats should be <= 255. - */ - uint8_t src_format; /* low 8 bits of enum pipe_format. */ - - /** Instance data rate divisor. 0 means this is per-vertex data, - * n means per-instance data used for n consecutive instances (n > 0). - */ - unsigned instance_divisor; -}; - -/** - * Opaque refcounted constant state object encapsulating a vertex buffer, - * index buffer, and vertex elements. Used by display lists to bind those - * states and pass buffer references quickly. - * - * The state contains 1 index buffer, 0 or 1 vertex buffer, and 0 or more - * vertex elements. - * - * Constraints on the buffers to get the fastest codepath: - * - All buffer contents are considered immutable and read-only after - * initialization. This implies the following things. - * - No place is required to track whether these buffers are busy. - * - All CPU mappings of these buffers can be forced to UNSYNCHRONIZED by - * both drivers and common code unconditionally. - * - Buffer invalidation can be skipped by both drivers and common code - * unconditionally. - */ -struct pipe_vertex_state { - struct pipe_reference reference; - struct pipe_screen *screen; - - /* The following structure is used as a key for util_vertex_state_cache - * to deduplicate identical state objects and thus enable more - * opportunities for draw merging. - */ - struct { - struct pipe_resource *indexbuf; - struct pipe_vertex_buffer vbuffer; - unsigned num_elements; - struct pipe_vertex_element elements[PIPE_MAX_ATTRIBS]; - uint32_t full_velem_mask; - } input; -}; - -struct pipe_draw_indirect_info -{ - unsigned offset; /**< must be 4 byte aligned */ - unsigned stride; /**< must be 4 byte aligned */ - unsigned draw_count; /**< number of indirect draws */ - unsigned indirect_draw_count_offset; /**< must be 4 byte aligned */ - - /* Indirect draw parameters resource is laid out as follows: - * - * if using indexed drawing: - * struct { - * uint32_t count; - * uint32_t instance_count; - * uint32_t start; - * int32_t index_bias; - * uint32_t start_instance; - * }; - * otherwise: - * struct { - * uint32_t count; - * uint32_t instance_count; - * uint32_t start; - * uint32_t start_instance; - * }; - * - * If NULL, count_from_stream_output != NULL. - */ - struct pipe_resource *buffer; - - /* Indirect draw count resource: If not NULL, contains a 32-bit value which - * is to be used as the real draw_count. - */ - struct pipe_resource *indirect_draw_count; - - /** - * Stream output target. If not NULL, it's used to provide the 'count' - * parameter based on the number vertices captured by the stream output - * stage. (or generally, based on the number of bytes captured) - * - * Only 'mode', 'start_instance', and 'instance_count' are taken into - * account, all the other variables from pipe_draw_info are ignored. - * - * 'start' is implicitly 0 and 'count' is set as discussed above. - * The draw command is non-indexed. - * - * Note that this only provides the count. The vertex buffers must - * be set via set_vertex_buffers manually. - */ - struct pipe_stream_output_target *count_from_stream_output; -}; - -struct pipe_draw_start_count_bias { - unsigned start; - unsigned count; - int index_bias; /**< a bias to be added to each index */ -}; - -/** - * Draw vertex state description. It's translated to pipe_draw_info as follows: - * - mode comes from this structure - * - index_size is 4 - * - instance_count is 1 - * - index.resource comes from pipe_vertex_state - * - everything else is 0 - */ -struct pipe_draw_vertex_state_info { -#if defined(__GNUC__) - /* sizeof(mode) == 1 because it's a packed enum. */ - enum pipe_prim_type mode; /**< the mode of the primitive */ -#else - /* sizeof(mode) == 1 is required by draw merging in u_threaded_context. */ - uint8_t mode; /**< the mode of the primitive */ -#endif - bool take_vertex_state_ownership; /**< for skipping reference counting */ -}; - -/** - * Information to describe a draw_vbo call. - */ -struct pipe_draw_info -{ -#if defined(__GNUC__) - /* sizeof(mode) == 1 because it's a packed enum. */ - enum pipe_prim_type mode; /**< the mode of the primitive */ -#else - /* sizeof(mode) == 1 is required by draw merging in u_threaded_context. */ - uint8_t mode; /**< the mode of the primitive */ -#endif - uint8_t index_size; /**< if 0, the draw is not indexed. */ - uint8_t view_mask; /**< mask of multiviews for this draw */ - bool primitive_restart:1; - bool has_user_indices:1; /**< if true, use index.user_buffer */ - bool index_bounds_valid:1; /**< whether min_index and max_index are valid; - they're always invalid if index_size == 0 */ - bool increment_draw_id:1; /**< whether drawid increments for direct draws */ - bool take_index_buffer_ownership:1; /**< callee inherits caller's refcount - (no need to reference indexbuf, but still needs to unreference it) */ - bool index_bias_varies:1; /**< true if index_bias varies between draws */ - bool was_line_loop:1; /**< true if pipe_prim_type was LINE_LOOP before translation */ - uint8_t _pad:1; - - unsigned start_instance; /**< first instance id */ - unsigned instance_count; /**< number of instances */ - - /** - * Primitive restart enable/index (only applies to indexed drawing) - */ - unsigned restart_index; - - /* Pointers must be placed appropriately for optimal structure packing on - * 64-bit CPUs. - */ - - /** - * An index buffer. When an index buffer is bound, all indices to vertices - * will be looked up from the buffer. - * - * If has_user_indices, use index.user, else use index.resource. - */ - union { - struct pipe_resource *resource; /**< real buffer */ - const void *user; /**< pointer to a user buffer */ - } index; - - /* These must be last for better packing in u_threaded_context. */ - unsigned min_index; /**< the min index */ - unsigned max_index; /**< the max index */ -}; - - -/** - * Information to describe a blit call. - */ -struct pipe_blit_info -{ - struct { - struct pipe_resource *resource; - unsigned level; - struct pipe_box box; /**< negative width, height only legal for src */ - /* For pipe_surface-like format casting: */ - enum pipe_format format; /**< must be supported for sampling (src) - or rendering (dst), ZS is always supported */ - } dst, src; - - unsigned mask; /**< bitmask of PIPE_MASK_R/G/B/A/Z/S */ - unsigned filter; /**< PIPE_TEX_FILTER_* */ - uint8_t dst_sample; /**< if non-zero, set sample_mask to (1 << (dst_sample - 1)) */ - bool sample0_only; - bool scissor_enable; - struct pipe_scissor_state scissor; - - /* Window rectangles can either be inclusive or exclusive. */ - bool window_rectangle_include; - unsigned num_window_rectangles; - struct pipe_scissor_state window_rectangles[PIPE_MAX_WINDOW_RECTANGLES]; - - bool render_condition_enable; /**< whether the blit should honor the - current render condition */ - bool alpha_blend; /* dst.rgb = src.rgb * src.a + dst.rgb * (1 - src.a) */ -}; - -/** - * Information to describe a launch_grid call. - */ -struct pipe_grid_info -{ - /** - * For drivers that use PIPE_SHADER_IR_NATIVE as their prefered IR, this - * value will be the index of the kernel in the opencl.kernels metadata - * list. - */ - uint32_t pc; - - /** - * Will be used to initialize the INPUT resource, and it should point to a - * buffer of at least pipe_compute_state::req_input_mem bytes. - */ - const void *input; - - /** - * Variable shared memory used by this invocation. - * - * This comes on top of shader declared shared memory. - */ - uint32_t variable_shared_mem; - - /** - * Grid number of dimensions, 1-3, e.g. the work_dim parameter passed to - * clEnqueueNDRangeKernel. Note block[] and grid[] must be padded with - * 1 for non-used dimensions. - */ - uint work_dim; - - /** - * Determine the layout of the working block (in thread units) to be used. - */ - uint block[3]; - - /** - * last_block allows disabling threads at the farthermost grid boundary. - * Full blocks as specified by "block" are launched, but the threads - * outside of "last_block" dimensions are disabled. - * - * If a block touches the grid boundary in the i-th axis, threads with - * THREAD_ID[i] >= last_block[i] are disabled. - * - * If last_block[i] is 0, it has the same behavior as last_block[i] = block[i], - * meaning no effect. - * - * It's equivalent to doing this at the beginning of the compute shader: - * - * for (i = 0; i < 3; i++) { - * if (block_id[i] == grid[i] - 1 && - * last_block[i] && thread_id[i] >= last_block[i]) - * return; - * } - */ - uint last_block[3]; - - /** - * Determine the layout of the grid (in block units) to be used. - */ - uint grid[3]; - - /** - * Base offsets to launch grids from - */ - uint grid_base[3]; - - /* Indirect compute parameters resource: If not NULL, block sizes are taken - * from this buffer instead, which is laid out as follows: - * - * struct { - * uint32_t num_blocks_x; - * uint32_t num_blocks_y; - * uint32_t num_blocks_z; - * }; - */ - struct pipe_resource *indirect; - unsigned indirect_offset; /**< must be 4 byte aligned */ -}; - -/** - * Structure used as a header for serialized compute programs. - */ -struct pipe_binary_program_header -{ - uint32_t num_bytes; /**< Number of bytes in the LLVM bytecode program. */ - char blob[]; -}; - -struct pipe_compute_state -{ - enum pipe_shader_ir ir_type; /**< IR type contained in prog. */ - const void *prog; /**< Compute program to be executed. */ - unsigned static_shared_mem; /**< equal to info.shared_size, used for shaders passed as TGSI */ - unsigned req_input_mem; /**< Required size of the INPUT resource. */ -}; - -struct pipe_compute_state_object_info -{ - /** - * Max number of threads per block supported for the given cso. - */ - unsigned max_threads; - - /** - * Which multiple should the block size be of for best performance. - * - * E.g. for 8 a block with n * 8 threads would result in optimal utilization - * of the hardware. - */ - unsigned preferred_simd_size; - - /** - * How much private memory does this CSO require per thread (a.k.a. NIR scratch memory). - */ - unsigned private_memory; -}; - -/** - * Structure that contains a callback for device reset messages from the driver - * back to the gallium frontend. - * - * The callback must not be called from driver-created threads. - */ -struct pipe_device_reset_callback -{ - /** - * Callback for the driver to report when a device reset is detected. - * - * \param data user-supplied data pointer - * \param status PIPE_*_RESET - */ - void (*reset)(void *data, enum pipe_reset_status status); - - void *data; -}; - -/** - * Information about memory usage. All sizes are in kilobytes. - */ -struct pipe_memory_info -{ - unsigned total_device_memory; /**< size of device memory, e.g. VRAM */ - unsigned avail_device_memory; /**< free device memory at the moment */ - unsigned total_staging_memory; /**< size of staging memory, e.g. GART */ - unsigned avail_staging_memory; /**< free staging memory at the moment */ - unsigned device_memory_evicted; /**< size of memory evicted (monotonic counter) */ - unsigned nr_device_memory_evictions; /**< # of evictions (monotonic counter) */ -}; - -/** - * Structure that contains information about external memory - */ -struct pipe_memory_object -{ - bool dedicated; -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_video_enums.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_video_enums.h deleted file mode 100644 index d37f7c6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/gallium/include/pipe/p_video_enums.h +++ /dev/null @@ -1,202 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 Younes Manton. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef PIPE_VIDEO_ENUMS_H -#define PIPE_VIDEO_ENUMS_H - -#ifdef __cplusplus -extern "C" { -#endif - -enum pipe_video_format -{ - PIPE_VIDEO_FORMAT_UNKNOWN = 0, - PIPE_VIDEO_FORMAT_MPEG12, /**< MPEG1, MPEG2 */ - PIPE_VIDEO_FORMAT_MPEG4, /**< DIVX, XVID */ - PIPE_VIDEO_FORMAT_VC1, /**< WMV */ - PIPE_VIDEO_FORMAT_MPEG4_AVC,/**< H.264 */ - PIPE_VIDEO_FORMAT_HEVC, /**< H.265 */ - PIPE_VIDEO_FORMAT_JPEG, /**< JPEG */ - PIPE_VIDEO_FORMAT_VP9, /**< VP9 */ - PIPE_VIDEO_FORMAT_AV1 /**< AV1 */ -}; - -enum pipe_video_profile -{ - PIPE_VIDEO_PROFILE_UNKNOWN, - PIPE_VIDEO_PROFILE_MPEG1, - PIPE_VIDEO_PROFILE_MPEG2_SIMPLE, - PIPE_VIDEO_PROFILE_MPEG2_MAIN, - PIPE_VIDEO_PROFILE_MPEG4_SIMPLE, - PIPE_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE, - PIPE_VIDEO_PROFILE_VC1_SIMPLE, - PIPE_VIDEO_PROFILE_VC1_MAIN, - PIPE_VIDEO_PROFILE_VC1_ADVANCED, - PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE, - PIPE_VIDEO_PROFILE_MPEG4_AVC_CONSTRAINED_BASELINE, - PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN, - PIPE_VIDEO_PROFILE_MPEG4_AVC_EXTENDED, - PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH, - PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH10, - PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH422, - PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH444, - PIPE_VIDEO_PROFILE_HEVC_MAIN, - PIPE_VIDEO_PROFILE_HEVC_MAIN_10, - PIPE_VIDEO_PROFILE_HEVC_MAIN_STILL, - PIPE_VIDEO_PROFILE_HEVC_MAIN_12, - PIPE_VIDEO_PROFILE_HEVC_MAIN_444, - PIPE_VIDEO_PROFILE_JPEG_BASELINE, - PIPE_VIDEO_PROFILE_VP9_PROFILE0, - PIPE_VIDEO_PROFILE_VP9_PROFILE2, - PIPE_VIDEO_PROFILE_AV1_MAIN, - PIPE_VIDEO_PROFILE_MAX -}; - -/* Video caps, can be different for each codec/profile */ -enum pipe_video_cap -{ - PIPE_VIDEO_CAP_SUPPORTED = 0, - PIPE_VIDEO_CAP_NPOT_TEXTURES = 1, - PIPE_VIDEO_CAP_MAX_WIDTH = 2, - PIPE_VIDEO_CAP_MAX_HEIGHT = 3, - PIPE_VIDEO_CAP_PREFERED_FORMAT = 4, - PIPE_VIDEO_CAP_PREFERS_INTERLACED = 5, - PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE = 6, - PIPE_VIDEO_CAP_SUPPORTS_INTERLACED = 7, - PIPE_VIDEO_CAP_MAX_LEVEL = 8, - PIPE_VIDEO_CAP_STACKED_FRAMES = 9, - PIPE_VIDEO_CAP_MAX_MACROBLOCKS = 10, - PIPE_VIDEO_CAP_MAX_TEMPORAL_LAYERS = 11, - PIPE_VIDEO_CAP_EFC_SUPPORTED = 12, - PIPE_VIDEO_CAP_ENC_MAX_SLICES_PER_FRAME = 13, - PIPE_VIDEO_CAP_ENC_SLICES_STRUCTURE = 14, - PIPE_VIDEO_CAP_ENC_MAX_REFERENCES_PER_FRAME = 15, - PIPE_VIDEO_CAP_VPP_ORIENTATION_MODES = 16, - PIPE_VIDEO_CAP_VPP_BLEND_MODES = 17, - PIPE_VIDEO_CAP_VPP_MAX_INPUT_WIDTH = 18, - PIPE_VIDEO_CAP_VPP_MAX_INPUT_HEIGHT = 19, - PIPE_VIDEO_CAP_VPP_MIN_INPUT_WIDTH = 20, - PIPE_VIDEO_CAP_VPP_MIN_INPUT_HEIGHT = 21, - PIPE_VIDEO_CAP_VPP_MAX_OUTPUT_WIDTH = 22, - PIPE_VIDEO_CAP_VPP_MAX_OUTPUT_HEIGHT = 23, - PIPE_VIDEO_CAP_VPP_MIN_OUTPUT_WIDTH = 24, - PIPE_VIDEO_CAP_VPP_MIN_OUTPUT_HEIGHT = 25, - PIPE_VIDEO_CAP_ENC_QUALITY_LEVEL = 26, - /* If true, when mapping planar textures like NV12 or P016 the mapped buffer contains - all the planes contiguously. This allows for use with some frontends functions that - require this like vaDeriveImage */ - PIPE_VIDEO_CAP_SUPPORTS_CONTIGUOUS_PLANES_MAP = 27, - PIPE_VIDEO_CAP_ENC_SUPPORTS_MAX_FRAME_SIZE = 28, - PIPE_VIDEO_CAP_ENC_HEVC_BLOCK_SIZES = 29, - PIPE_VIDEO_CAP_ENC_HEVC_FEATURE_FLAGS = 30, - PIPE_VIDEO_CAP_ENC_HEVC_PREDICTION_DIRECTION = 31, - /* - If reported by the driver, then pipe_video_codec.flush(...) - needs to be called after pipe_video_codec.end_frame(...) - to kick off the work in the device - */ - PIPE_VIDEO_CAP_REQUIRES_FLUSH_ON_END_FRAME = 32, - - /* - If reported by the driver, then multiple p_video_codec encode - operations can be asynchronously enqueued (and also flushed) - with different feedback values in the device before get_feedback - is called on them to synchronize. The device can block on begin_frame - when it has reached its maximum async depth capacity - */ - PIPE_VIDEO_CAP_ENC_SUPPORTS_ASYNC_OPERATION = 33, -}; - -/* To be used with PIPE_VIDEO_CAP_VPP_ORIENTATION_MODES and for VPP state*/ -enum pipe_video_vpp_orientation -{ - PIPE_VIDEO_VPP_ORIENTATION_DEFAULT = 0x0, - PIPE_VIDEO_VPP_ROTATION_90 = 0x01, - PIPE_VIDEO_VPP_ROTATION_180 = 0x02, - PIPE_VIDEO_VPP_ROTATION_270 = 0x04, - PIPE_VIDEO_VPP_FLIP_HORIZONTAL = 0x08, - PIPE_VIDEO_VPP_FLIP_VERTICAL = 0x10, -}; - -/* To be used with PIPE_VIDEO_CAP_VPP_BLEND_MODES and for VPP state*/ -enum pipe_video_vpp_blend_mode -{ - PIPE_VIDEO_VPP_BLEND_MODE_NONE = 0x0, - PIPE_VIDEO_VPP_BLEND_MODE_GLOBAL_ALPHA = 0x1, -}; - - -/* To be used with cap PIPE_VIDEO_CAP_ENC_SLICES_STRUCTURE*/ -/** - * pipe_video_cap_slice_structure - * - * This attribute determines slice structures supported by the - * driver for encoding. This attribute is a hint to the user so - * that he can choose a suitable surface size and how to arrange - * the encoding process of multiple slices per frame. - * - * More specifically, for H.264 encoding, this attribute - * determines the range of accepted values to - * h264_slice_descriptor::macroblock_address and - * h264_slice_descriptor::num_macroblocks. - */ -enum pipe_video_cap_slice_structure -{ - /* Driver does not supports multiple slice per frame.*/ - PIPE_VIDEO_CAP_SLICE_STRUCTURE_NONE = 0x00000000, - /* Driver supports a power-of-two number of rows per slice.*/ - PIPE_VIDEO_CAP_SLICE_STRUCTURE_POWER_OF_TWO_ROWS = 0x00000001, - /* Driver supports an arbitrary number of macroblocks per slice.*/ - PIPE_VIDEO_CAP_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS = 0x00000002, - /* Driver support 1 row per slice*/ - PIPE_VIDEO_CAP_SLICE_STRUCTURE_EQUAL_ROWS = 0x00000004, - /* Driver support max encoded slice size per slice */ - PIPE_VIDEO_CAP_SLICE_STRUCTURE_MAX_SLICE_SIZE = 0x00000008, - /* Driver supports an arbitrary number of rows per slice. */ - PIPE_VIDEO_CAP_SLICE_STRUCTURE_ARBITRARY_ROWS = 0x00000010, - /* Driver supports any number of rows per slice but they must be the same - * for all slices except for the last one, which must be equal or smaller - * to the previous slices. */ - PIPE_VIDEO_CAP_SLICE_STRUCTURE_EQUAL_MULTI_ROWS = 0x00000020, -}; - - -enum pipe_video_entrypoint -{ - PIPE_VIDEO_ENTRYPOINT_UNKNOWN, - PIPE_VIDEO_ENTRYPOINT_BITSTREAM, - PIPE_VIDEO_ENTRYPOINT_IDCT, - PIPE_VIDEO_ENTRYPOINT_MC, - PIPE_VIDEO_ENTRYPOINT_ENCODE, - PIPE_VIDEO_ENTRYPOINT_PROCESSING, -}; - -#if defined(__cplusplus) -} -#endif - -#endif /* PIPE_VIDEO_ENUMS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/git_sha1.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/git_sha1.h deleted file mode 100644 index 99f83a3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/git_sha1.h +++ /dev/null @@ -1 +0,0 @@ -#define MESA_GIT_SHA1 " (git-0f4715a71a)" \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mapi/glapi/glapi.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mapi/glapi/glapi.h deleted file mode 100644 index aec25e8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mapi/glapi/glapi.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -/** - * \mainpage Mesa GL API Module - * - * \section GLAPIIntroduction Introduction - * - * The Mesa GL API module is responsible for dispatching all the - * gl*() functions. All GL functions are dispatched by jumping through - * the current dispatch table (basically a struct full of function - * pointers.) - * - * A per-thread current dispatch table and per-thread current context - * pointer are managed by this module too. - * - * This module is intended to be non-Mesa-specific so it can be used - * with the X/DRI libGL also. - */ - - -#ifndef _GLAPI_H -#define _GLAPI_H - -#include "../../util/macros.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -#ifdef _GLAPI_NO_EXPORTS -# define _GLAPI_EXPORT -#else /* _GLAPI_NO_EXPORTS */ -# ifdef _WIN32 -# ifdef _GLAPI_DLL_EXPORTS -# define _GLAPI_EXPORT __declspec(dllexport) -# else -# define _GLAPI_EXPORT __declspec(dllimport) -# endif -# elif defined(__GNUC__) -# define _GLAPI_EXPORT __attribute__((visibility("default"))) -# else -# define _GLAPI_EXPORT -# endif -#endif /* _GLAPI_NO_EXPORTS */ - - -typedef void (*_glapi_proc)(void); - -typedef void (*_glapi_nop_handler_proc)(const char *name); - -struct _glapi_table; - - -#if defined (USE_ELF_TLS) - -_GLAPI_EXPORT extern __thread struct _glapi_table * _glapi_tls_Dispatch - __attribute__((tls_model("initial-exec"))); - -_GLAPI_EXPORT extern __thread void * _glapi_tls_Context - __attribute__((tls_model("initial-exec"))); - -_GLAPI_EXPORT extern const struct _glapi_table *_glapi_Dispatch; -_GLAPI_EXPORT extern const void *_glapi_Context; - -# define GET_DISPATCH() _glapi_tls_Dispatch -# define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) _glapi_tls_Context - -#else - -_GLAPI_EXPORT extern struct _glapi_table *_glapi_Dispatch; -_GLAPI_EXPORT extern void *_glapi_Context; - -#define GET_DISPATCH() \ - (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch()) - -#define GET_CURRENT_CONTEXT(C) struct gl_context *C = (struct gl_context *) \ - (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context()) - -#endif /* defined (USE_ELF_TLS) */ - - -_GLAPI_EXPORT void -_glapi_destroy_multithread(void); - - -_GLAPI_EXPORT void -_glapi_check_multithread(void); - - -_GLAPI_EXPORT void -_glapi_set_context(void *context); - - -_GLAPI_EXPORT void * -_glapi_get_context(void); - - -_GLAPI_EXPORT void -_glapi_set_dispatch(struct _glapi_table *dispatch); - - -_GLAPI_EXPORT struct _glapi_table * -_glapi_get_dispatch(void); - - -_GLAPI_EXPORT unsigned int -_glapi_get_dispatch_table_size(void); - - -_GLAPI_EXPORT int -_glapi_add_dispatch( const char * const * function_names, - const char * parameter_signature ); - -_GLAPI_EXPORT int -_glapi_get_proc_offset(const char *funcName); - - -_GLAPI_EXPORT _glapi_proc -_glapi_get_proc_address(const char *funcName); - - -_GLAPI_EXPORT const char * -_glapi_get_proc_name(unsigned int offset); - - -#if defined(GLX_USE_APPLEGL) || defined(GLX_USE_WINDOWSGL) -_GLAPI_EXPORT struct _glapi_table * -_glapi_create_table_from_handle(void *handle, const char *symbol_prefix); - -_GLAPI_EXPORT void -_glapi_table_patch(struct _glapi_table *, const char *name, void *wrapper); -#endif - - -_GLAPI_EXPORT void -_glapi_set_nop_handler(_glapi_nop_handler_proc func); - -/** Return pointer to new dispatch table filled with no-op functions */ -_GLAPI_EXPORT struct _glapi_table * -_glapi_new_nop_table(unsigned num_entries); - - -/** Deprecated function */ -_GLAPI_EXPORT unsigned long -_glthread_GetID(void); - - -/* - * These stubs are kept so that the old DRI drivers still load. - */ -_GLAPI_EXPORT void -_glapi_noop_enable_warnings(unsigned char enable); - - -_GLAPI_EXPORT void -_glapi_set_warning_func(_glapi_proc func); - - -#ifdef __cplusplus -} -#endif - -#endif /* _GLAPI_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/compiler.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/compiler.h deleted file mode 100644 index c46a9aa..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/compiler.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 compiler.h - * Compiler-related stuff. - */ - - -#ifndef COMPILER_H -#define COMPILER_H - - -#include - -#include "macros.h" - -#include "../../../include/c99_compat.h" /* inline, __func__, etc. */ - - -/** - * Either define MESA_BIG_ENDIAN or MESA_LITTLE_ENDIAN, and CPU_TO_LE32. - * Do not use these unless absolutely necessary! - * Try to use a runtime test instead. - * For now, only used by some DRI hardware drivers for color/texel packing. - */ -#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN -#if defined(__linux__) -#include -#define CPU_TO_LE32( x ) bswap_32( x ) -#elif defined(__APPLE__) -#include -#define CPU_TO_LE32( x ) CFSwapInt32HostToLittle( x ) -#elif defined(__OpenBSD__) -#include -#define CPU_TO_LE32( x ) htole32( x ) -#else /*__linux__ */ -#include -#define CPU_TO_LE32( x ) bswap32( x ) -#endif /*__linux__*/ -#define MESA_BIG_ENDIAN 1 -#else -#define CPU_TO_LE32( x ) ( x ) -#define MESA_LITTLE_ENDIAN 1 -#endif -#define LE32_TO_CPU( x ) CPU_TO_LE32( x ) - - - -#define IEEE_ONE 0x3f800000 - - -#endif /* COMPILER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/config.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/config.h deleted file mode 100644 index f93d42d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/config.h +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * Copyright (C) 2008 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 config.h - * Tunable configuration parameters. - */ - -#ifndef MESA_CONFIG_H_INCLUDED -#define MESA_CONFIG_H_INCLUDED - -#include "../../compiler/shader_enums.h" - -/** - * \name OpenGL implementation limits - */ -/*@{*/ - -/** Maximum modelview matrix stack depth */ -#define MAX_MODELVIEW_STACK_DEPTH 32 - -/** Maximum projection matrix stack depth */ -#define MAX_PROJECTION_STACK_DEPTH 32 - -/** Maximum texture matrix stack depth */ -#define MAX_TEXTURE_STACK_DEPTH 10 - -/** Maximum attribute stack depth */ -#define MAX_ATTRIB_STACK_DEPTH 16 - -/** Maximum client attribute stack depth */ -#define MAX_CLIENT_ATTRIB_STACK_DEPTH 16 - -/** Maximum recursion depth of display list calls */ -#define MAX_LIST_NESTING 64 - -/** Maximum number of lights */ -#define MAX_LIGHTS 8 - -/** - * Maximum number of user-defined clipping planes supported by any driver in - * Mesa. This is used to size arrays. - */ -#define MAX_CLIP_PLANES 8 - -/** Maximum pixel map lookup table size */ -#define MAX_PIXEL_MAP_TABLE 256 - -/** Maximum number of auxillary color buffers */ -#define MAX_AUX_BUFFERS 1 - -/** Maximum order (degree) of curves */ -#define MAX_EVAL_ORDER 30 - -/** Maximum Name stack depth */ -#define MAX_NAME_STACK_DEPTH 64 - -/** Minimum point size */ -#define MIN_POINT_SIZE 1.0 -/** Maximum point size */ -#define MAX_POINT_SIZE 60.0 -/** Point size granularity */ -#define POINT_SIZE_GRANULARITY 0.1 - -/** Minimum line width */ -#define MIN_LINE_WIDTH 1.0 -/** Maximum line width */ -#define MAX_LINE_WIDTH 10.0 -/** Line width granularity */ -#define LINE_WIDTH_GRANULARITY 0.1 - -/** Max memory to allow for a single texture image (in megabytes) */ -#define MAX_TEXTURE_MBYTES 1024 - -/** Number of 1D/2D texture mipmap levels */ -#define MAX_TEXTURE_LEVELS 15 - -/** Number of 3D texture mipmap levels */ -#define MAX_3D_TEXTURE_LEVELS 15 - -/** Number of cube texture mipmap levels - GL_ARB_texture_cube_map */ -#define MAX_CUBE_TEXTURE_LEVELS 15 - -/** Maximum rectangular texture size - GL_NV_texture_rectangle */ -#define MAX_TEXTURE_RECT_SIZE 16384 - -/** - * Maximum number of layers in a 1D or 2D array texture - GL_MESA_texture_array - */ -#define MAX_ARRAY_TEXTURE_LAYERS 64 - -/** - * Max number of texture coordinate units. This mainly just applies to - * the fixed-function vertex code. This will be difficult to raise above - * eight because of various vertex attribute bitvectors. - */ -#define MAX_TEXTURE_COORD_UNITS 8 - -/** - * Max number of texture image units. Also determines number of texture - * samplers in shaders. - */ -#define MAX_TEXTURE_IMAGE_UNITS 32 - -/** - * Larger of MAX_TEXTURE_COORD_UNITS and MAX_TEXTURE_IMAGE_UNITS. - * This value is only used for dimensioning arrays. - * Either MAX_TEXTURE_COORD_UNITS or MAX_TEXTURE_IMAGE_UNITS (or the - * corresponding ctx->Const.MaxTextureCoord/ImageUnits fields) should be - * used almost everywhere else. - */ -#define MAX_TEXTURE_UNITS ((MAX_TEXTURE_COORD_UNITS > MAX_TEXTURE_IMAGE_UNITS) ? MAX_TEXTURE_COORD_UNITS : MAX_TEXTURE_IMAGE_UNITS) - -/** Maximum number of viewports supported with ARB_viewport_array */ -#define MAX_VIEWPORTS 16 - -/** Maximum number of window rectangles supported with EXT_window_rectangles */ -#define MAX_WINDOW_RECTANGLES 8 - -/** Maximum size for CVA. May be overridden by the drivers. */ -#define MAX_ARRAY_LOCK_SIZE 3000 - -/** Subpixel precision for antialiasing, window coordinate snapping */ -#define SUB_PIXEL_BITS 4 - -/** For GL_ARB_texture_compression */ -#define MAX_COMPRESSED_TEXTURE_FORMATS 25 - -/** For GL_EXT_texture_filter_anisotropic */ -#define MAX_TEXTURE_MAX_ANISOTROPY 16.0 - -/** For GL_EXT_texture_lod_bias (typically MAX_TEXTURE_LEVELS - 1) */ -#define MAX_TEXTURE_LOD_BIAS 14.0 - -/** For any program target/extension */ -/*@{*/ -#define MAX_PROGRAM_INSTRUCTIONS (16 * 1024) - -/** - * Per-program constants (power of two) - * - * \c MAX_PROGRAM_LOCAL_PARAMS and \c MAX_UNIFORMS are just the assembly shader - * and GLSL shader names for the same thing. They should \b always have the - * same value. Each refers to the number of vec4 values supplied as - * per-program parameters. - */ -/*@{*/ -#define MAX_PROGRAM_LOCAL_PARAMS 4096 -#define MAX_UNIFORMS 4096 -#define MAX_UNIFORM_BUFFERS 15 /* + 1 default uniform buffer */ -#define MAX_SHADER_STORAGE_BUFFERS 16 -/* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */ -#define MAX_COMBINED_UNIFORM_BUFFERS (MAX_UNIFORM_BUFFERS * 6) -#define MAX_COMBINED_SHADER_STORAGE_BUFFERS (MAX_SHADER_STORAGE_BUFFERS * 6) -#define MAX_ATOMIC_COUNTERS 4096 -/* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */ -#define MAX_COMBINED_ATOMIC_BUFFERS (MAX_UNIFORM_BUFFERS * 6) -/* Size of an atomic counter in bytes according to ARB_shader_atomic_counters */ -#define ATOMIC_COUNTER_SIZE 4 -#define MAX_IMAGE_UNIFORMS 32 -/* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */ -#define MAX_IMAGE_UNITS (MAX_IMAGE_UNIFORMS * 6) -/*@}*/ - -/** - * Per-context constants (power of two) - * - * \note - * This value should always be less than or equal to \c MAX_PROGRAM_LOCAL_PARAMS - * and \c MAX_VERTEX_PROGRAM_PARAMS. Otherwise some applications will make - * incorrect assumptions. - */ -#define MAX_PROGRAM_ENV_PARAMS 256 - -#define MAX_PROGRAM_MATRICES 8 -#define MAX_PROGRAM_MATRIX_STACK_DEPTH 4 -#define MAX_PROGRAM_CALL_DEPTH 8 -#define MAX_PROGRAM_TEMPS 256 -#define MAX_PROGRAM_ADDRESS_REGS 1 -#define MAX_SAMPLERS MAX_TEXTURE_IMAGE_UNITS -#define MAX_PROGRAM_INPUTS 32 -#define MAX_PROGRAM_OUTPUTS 64 -/*@}*/ - -/** For GL_ARB_vertex_program */ -/*@{*/ -#define MAX_VERTEX_PROGRAM_ADDRESS_REGS 1 -#define MAX_VERTEX_PROGRAM_PARAMS MAX_UNIFORMS -/*@}*/ - -/** For GL_ARB_fragment_program */ -/*@{*/ -#define MAX_FRAGMENT_PROGRAM_ADDRESS_REGS 0 -#define MAX_FRAGMENT_PROGRAM_PARAMS 64 -#define MAX_FRAGMENT_PROGRAM_INPUTS 12 -/*@}*/ - -/** For GL_ARB_vertex_shader */ -/*@{*/ -#define MAX_VERTEX_GENERIC_ATTRIBS 16 -/* 6 is for vertex, hull, domain, geometry, fragment, and compute shader. */ -#define MAX_COMBINED_TEXTURE_IMAGE_UNITS (MAX_TEXTURE_IMAGE_UNITS * 6) -/*@}*/ - - -/** For GL_EXT_framebuffer_object */ -/*@{*/ -#define MAX_COLOR_ATTACHMENTS 8 -#define MAX_RENDERBUFFER_SIZE 16384 -/*@}*/ - -/** For GL_ATI_envmap_bump - support bump mapping on first 8 units */ -#define SUPPORTED_ATI_BUMP_UNITS 0xff - -/** For GL_EXT_transform_feedback */ -#define MAX_FEEDBACK_BUFFERS 4 -#define MAX_FEEDBACK_ATTRIBS 32 - -/** For geometry shader */ -/*@{*/ -#define MAX_GEOMETRY_UNIFORM_COMPONENTS 512 -#define MAX_GEOMETRY_OUTPUT_VERTICES 256 -#define MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 1024 -/*@}*/ - -/** For GL_ARB_debug_output and GL_KHR_debug */ -/*@{*/ -#define MAX_DEBUG_LOGGED_MESSAGES 10 -#define MAX_DEBUG_MESSAGE_LENGTH 4096 -/*@}*/ - -/** For GL_KHR_debug */ -/*@{*/ -#define MAX_LABEL_LENGTH 256 -#define MAX_DEBUG_GROUP_STACK_DEPTH 64 -/*@}*/ - -/** For GL_ARB_gpu_shader5 */ -/*@{*/ -#define MAX_GEOMETRY_SHADER_INVOCATIONS 32 -#define MIN_FRAGMENT_INTERPOLATION_OFFSET -0.5 -#define MAX_FRAGMENT_INTERPOLATION_OFFSET 0.5 -#define FRAGMENT_INTERPOLATION_OFFSET_BITS 4 -#define MAX_VERTEX_STREAMS 4 -/*@}*/ - -/** For GL_ARB_shader_subroutine */ -/*@{*/ -#define MAX_SUBROUTINES 256 -#define MAX_SUBROUTINE_UNIFORM_LOCATIONS 1024 -/*@}*/ - -/** For GL_INTEL_performance_query */ -/*@{*/ -#define MAX_PERFQUERY_QUERY_NAME_LENGTH 256 -#define MAX_PERFQUERY_COUNTER_NAME_LENGTH 256 -#define MAX_PERFQUERY_COUNTER_DESC_LENGTH 1024 -#define PERFQUERY_HAVE_GPA_EXTENDED_COUNTERS 0 -/*@}*/ - -/** For GL_ARB_pipeline_statistics_query */ -#define MAX_PIPELINE_STATISTICS 11 - -/** For GL_ARB_tessellation_shader */ -/*@{*/ -#define MAX_TESS_GEN_LEVEL 64 -#define MAX_PATCH_VERTICES 32 -#define MAX_TESS_PATCH_COMPONENTS 120 -#define MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 4096 -/*@}*/ - -/* - * Color channel component order - * - * \note Changes will almost certainly cause problems at this time. - */ -#define RCOMP 0 -#define GCOMP 1 -#define BCOMP 2 -#define ACOMP 3 - - -/** - * Maximum number of temporary vertices required for clipping. - * - * Used in array_cache and tnl modules. - */ -#define MAX_CLIPPED_VERTICES ((2 * (6 + MAX_CLIP_PLANES))+1) - - -/** For GL_ARB_sample_locations - maximum of SAMPLE_LOCATION_PIXEL_GRID_*_ARB */ -#define MAX_SAMPLE_LOCATION_GRID_SIZE 4 - -/* It is theoretically possible for Consts.MaxSamples to be >32 but - * other code seems to assume that is not the case. - */ -#define MAX_SAMPLE_LOCATION_TABLE_SIZE \ - (MAX_SAMPLE_LOCATION_GRID_SIZE * MAX_SAMPLE_LOCATION_GRID_SIZE * 32) - -#endif /* MESA_CONFIG_H_INCLUDED */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/consts_exts.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/consts_exts.h deleted file mode 100644 index 5941dfd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/consts_exts.h +++ /dev/null @@ -1,1000 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 consts_exts.h - * Mesa Constants and GL Extensions data structures. - */ - -#ifndef __CONSTS_EXTS_H__ -#define __CONSTS_EXTS_H__ - -#include "glheader.h" -#include "../../compiler/shader_enums.h" -#include "../../compiler/shader_info.h" - -struct nir_shader_compiler_options; - -/** - * Enable flag for each OpenGL extension. Different device drivers will - * enable different extensions at runtime. - */ -struct gl_extensions -{ - GLboolean dummy; /* don't remove this! */ - GLboolean dummy_true; /* Set true by _mesa_init_extensions(). */ - GLboolean ANGLE_texture_compression_dxt; - GLboolean ARB_ES2_compatibility; - GLboolean ARB_ES3_compatibility; - GLboolean ARB_ES3_1_compatibility; - GLboolean ARB_ES3_2_compatibility; - GLboolean ARB_arrays_of_arrays; - GLboolean ARB_base_instance; - GLboolean ARB_bindless_texture; - GLboolean ARB_blend_func_extended; - GLboolean ARB_buffer_storage; - GLboolean ARB_clear_texture; - GLboolean ARB_clip_control; - GLboolean ARB_color_buffer_float; - GLboolean ARB_compatibility; - GLboolean ARB_compute_shader; - GLboolean ARB_compute_variable_group_size; - GLboolean ARB_conditional_render_inverted; - GLboolean ARB_conservative_depth; - GLboolean ARB_copy_image; - GLboolean ARB_cull_distance; - GLboolean EXT_color_buffer_half_float; - GLboolean ARB_depth_buffer_float; - GLboolean ARB_depth_clamp; - GLboolean ARB_derivative_control; - GLboolean ARB_draw_buffers_blend; - GLboolean ARB_draw_elements_base_vertex; - GLboolean ARB_draw_indirect; - GLboolean ARB_draw_instanced; - GLboolean ARB_fragment_coord_conventions; - GLboolean ARB_fragment_layer_viewport; - GLboolean ARB_fragment_program; - GLboolean ARB_fragment_program_shadow; - GLboolean ARB_fragment_shader; - GLboolean ARB_framebuffer_no_attachments; - GLboolean ARB_framebuffer_object; - GLboolean ARB_fragment_shader_interlock; - GLboolean ARB_enhanced_layouts; - GLboolean ARB_explicit_attrib_location; - GLboolean ARB_explicit_uniform_location; - GLboolean ARB_gl_spirv; - GLboolean ARB_gpu_shader5; - GLboolean ARB_gpu_shader_fp64; - GLboolean ARB_gpu_shader_int64; - GLboolean ARB_half_float_vertex; - GLboolean ARB_indirect_parameters; - GLboolean ARB_instanced_arrays; - GLboolean ARB_internalformat_query; - GLboolean ARB_internalformat_query2; - GLboolean ARB_map_buffer_range; - GLboolean ARB_occlusion_query; - GLboolean ARB_occlusion_query2; - GLboolean ARB_pipeline_statistics_query; - GLboolean ARB_polygon_offset_clamp; - GLboolean ARB_post_depth_coverage; - GLboolean ARB_query_buffer_object; - GLboolean ARB_robust_buffer_access_behavior; - GLboolean ARB_sample_locations; - GLboolean ARB_sample_shading; - GLboolean ARB_seamless_cube_map; - GLboolean ARB_shader_atomic_counter_ops; - GLboolean ARB_shader_atomic_counters; - GLboolean ARB_shader_ballot; - GLboolean ARB_shader_bit_encoding; - GLboolean ARB_shader_clock; - GLboolean ARB_shader_draw_parameters; - GLboolean ARB_shader_group_vote; - GLboolean ARB_shader_image_load_store; - GLboolean ARB_shader_image_size; - GLboolean ARB_shader_precision; - GLboolean ARB_shader_stencil_export; - GLboolean ARB_shader_storage_buffer_object; - GLboolean ARB_shader_texture_image_samples; - GLboolean ARB_shader_texture_lod; - GLboolean ARB_shader_viewport_layer_array; - GLboolean ARB_shading_language_packing; - GLboolean ARB_shading_language_420pack; - GLboolean ARB_shadow; - GLboolean ARB_sparse_buffer; - GLboolean ARB_sparse_texture; - GLboolean ARB_sparse_texture2; - GLboolean ARB_sparse_texture_clamp; - GLboolean ARB_stencil_texturing; - GLboolean ARB_spirv_extensions; - GLboolean ARB_sync; - GLboolean ARB_tessellation_shader; - GLboolean ARB_texture_buffer_object; - GLboolean ARB_texture_buffer_object_rgb32; - GLboolean ARB_texture_buffer_range; - GLboolean ARB_texture_compression_bptc; - GLboolean ARB_texture_compression_rgtc; - GLboolean ARB_texture_cube_map_array; - GLboolean ARB_texture_filter_anisotropic; - GLboolean ARB_texture_filter_minmax; - GLboolean ARB_texture_float; - GLboolean ARB_texture_gather; - GLboolean ARB_texture_mirror_clamp_to_edge; - GLboolean ARB_texture_multisample; - GLboolean ARB_texture_non_power_of_two; - GLboolean ARB_texture_stencil8; - GLboolean ARB_texture_query_levels; - GLboolean ARB_texture_query_lod; - GLboolean ARB_texture_rg; - GLboolean ARB_texture_rgb10_a2ui; - GLboolean ARB_texture_view; - GLboolean ARB_timer_query; - GLboolean ARB_transform_feedback2; - GLboolean ARB_transform_feedback3; - GLboolean ARB_transform_feedback_instanced; - GLboolean ARB_transform_feedback_overflow_query; - GLboolean ARB_uniform_buffer_object; - GLboolean ARB_vertex_attrib_64bit; - GLboolean ARB_vertex_program; - GLboolean ARB_vertex_shader; - GLboolean ARB_vertex_type_10f_11f_11f_rev; - GLboolean ARB_vertex_type_2_10_10_10_rev; - GLboolean ARB_viewport_array; - GLboolean EXT_blend_equation_separate; - GLboolean EXT_demote_to_helper_invocation; - GLboolean EXT_depth_bounds_test; - GLboolean EXT_disjoint_timer_query; - GLboolean EXT_draw_buffers2; - GLboolean EXT_EGL_image_storage; - GLboolean EXT_float_blend; - GLboolean EXT_framebuffer_multisample; - GLboolean EXT_framebuffer_multisample_blit_scaled; - GLboolean EXT_framebuffer_sRGB; - GLboolean EXT_gpu_program_parameters; - GLboolean EXT_gpu_shader4; - GLboolean EXT_memory_object; - GLboolean EXT_memory_object_fd; - GLboolean EXT_memory_object_win32; - GLboolean EXT_multisampled_render_to_texture; - GLboolean EXT_packed_float; - GLboolean EXT_provoking_vertex; - GLboolean EXT_render_snorm; - GLboolean EXT_semaphore; - GLboolean EXT_semaphore_fd; - GLboolean EXT_semaphore_win32; - GLboolean EXT_shader_image_load_formatted; - GLboolean EXT_shader_image_load_store; - GLboolean EXT_shader_integer_mix; - GLboolean EXT_shader_samples_identical; - GLboolean EXT_sRGB; - GLboolean EXT_stencil_two_side; - GLboolean EXT_texture_array; - GLboolean EXT_texture_buffer_object; - GLboolean EXT_texture_compression_latc; - GLboolean EXT_texture_compression_s3tc; - GLboolean EXT_texture_compression_s3tc_srgb; - GLboolean EXT_texture_env_dot3; - GLboolean EXT_texture_filter_anisotropic; - GLboolean EXT_texture_filter_minmax; - GLboolean EXT_texture_integer; - GLboolean EXT_texture_mirror_clamp; - GLboolean EXT_texture_norm16; - GLboolean EXT_texture_shadow_lod; - GLboolean EXT_texture_shared_exponent; - GLboolean EXT_texture_snorm; - GLboolean EXT_texture_sRGB; - GLboolean EXT_texture_sRGB_R8; - GLboolean EXT_texture_sRGB_RG8; - GLboolean EXT_texture_sRGB_decode; - GLboolean EXT_texture_swizzle; - GLboolean EXT_texture_type_2_10_10_10_REV; - GLboolean EXT_transform_feedback; - GLboolean EXT_timer_query; - GLboolean EXT_vertex_array_bgra; - GLboolean EXT_window_rectangles; - GLboolean OES_copy_image; - GLboolean OES_primitive_bounding_box; - GLboolean OES_sample_variables; - GLboolean OES_standard_derivatives; - GLboolean OES_texture_buffer; - GLboolean OES_texture_cube_map_array; - GLboolean OES_texture_view; - GLboolean OES_viewport_array; - /* vendor extensions */ - GLboolean AMD_compressed_ATC_texture; - GLboolean AMD_framebuffer_multisample_advanced; - GLboolean AMD_depth_clamp_separate; - GLboolean AMD_performance_monitor; - GLboolean AMD_pinned_memory; - GLboolean AMD_seamless_cubemap_per_texture; - GLboolean AMD_vertex_shader_layer; - GLboolean AMD_vertex_shader_viewport_index; - GLboolean ANDROID_extension_pack_es31a; - GLboolean ARM_shader_framebuffer_fetch_depth_stencil; - GLboolean ATI_meminfo; - GLboolean ATI_texture_compression_3dc; - GLboolean ATI_texture_mirror_once; - GLboolean ATI_texture_env_combine3; - GLboolean ATI_fragment_shader; - GLboolean GREMEDY_string_marker; - GLboolean INTEL_blackhole_render; - GLboolean INTEL_conservative_rasterization; - GLboolean INTEL_performance_query; - GLboolean INTEL_shader_atomic_float_minmax; - GLboolean INTEL_shader_integer_functions2; - GLboolean KHR_blend_equation_advanced; - GLboolean KHR_blend_equation_advanced_coherent; - GLboolean KHR_robustness; - GLboolean KHR_texture_compression_astc_hdr; - GLboolean KHR_texture_compression_astc_ldr; - GLboolean KHR_texture_compression_astc_sliced_3d; - GLboolean MESA_framebuffer_flip_y; - GLboolean MESA_pack_invert; - GLboolean MESA_tile_raster_order; - GLboolean EXT_shader_framebuffer_fetch; - GLboolean EXT_shader_framebuffer_fetch_non_coherent; - GLboolean MESA_shader_integer_functions; - GLboolean MESA_window_pos; - GLboolean MESA_ycbcr_texture; - GLboolean NV_alpha_to_coverage_dither_control; - GLboolean NV_compute_shader_derivatives; - GLboolean NV_conditional_render; - GLboolean NV_copy_depth_to_color; - GLboolean NV_copy_image; - GLboolean NV_fill_rectangle; - GLboolean NV_fog_distance; - GLboolean NV_primitive_restart; - GLboolean NV_shader_atomic_float; - GLboolean NV_shader_atomic_int64; - GLboolean NV_texture_barrier; - GLboolean NV_texture_env_combine4; - GLboolean NV_texture_rectangle; - GLboolean NV_vdpau_interop; - GLboolean NV_conservative_raster; - GLboolean NV_conservative_raster_dilate; - GLboolean NV_conservative_raster_pre_snap_triangles; - GLboolean NV_conservative_raster_pre_snap; - GLboolean NV_viewport_array2; - GLboolean NV_viewport_swizzle; - GLboolean NVX_gpu_memory_info; - GLboolean TDFX_texture_compression_FXT1; - GLboolean OES_EGL_image; - GLboolean OES_draw_texture; - GLboolean OES_depth_texture_cube_map; - GLboolean OES_EGL_image_external; - GLboolean OES_texture_3D; - GLboolean OES_texture_float; - GLboolean OES_texture_float_linear; - GLboolean OES_texture_half_float; - GLboolean OES_texture_half_float_linear; - GLboolean OES_compressed_ETC1_RGB8_texture; - GLboolean OES_geometry_shader; - GLboolean OES_texture_compression_astc; - GLboolean extension_sentinel; - /** The extension string */ - const GLubyte *String; - /** Number of supported extensions */ - GLuint Count; - /** - * The context version which extension helper functions compare against. - * By default, the value is equal to ctx->Version. This changes to ~0 - * while meta is in progress. - */ - GLubyte Version; -}; - -/** - * Compiler options for a single GLSL shaders type - */ -struct gl_shader_compiler_options -{ - /** Driver-selectable options: */ - GLboolean EmitNoCont; /**< Emit CONT opcode? */ - GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ - GLboolean LowerCombinedClipCullDistance; /** Lower gl_ClipDistance and - * gl_CullDistance together from - * float[8] to vec4[2] - **/ - GLbitfield LowerBuiltinVariablesXfb; /**< Which builtin variables should - * be lowered for transform feedback - **/ - - /** - * If we can lower the precision of variables based on precision - * qualifiers - */ - GLboolean LowerPrecisionFloat16; - GLboolean LowerPrecisionInt16; - GLboolean LowerPrecisionDerivatives; - GLboolean LowerPrecisionFloat16Uniforms; - - /** - * This enables lowering of 16b constants. Some drivers may not - * to lower constants to 16b (ie. if the hw can do automatic - * narrowing on constant load) - */ - GLboolean LowerPrecisionConstants; - - /** - * \name Forms of indirect addressing the driver cannot do. - */ - /*@{*/ - GLboolean EmitNoIndirectInput; /**< No indirect addressing of inputs */ - GLboolean EmitNoIndirectOutput; /**< No indirect addressing of outputs */ - GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */ - GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ - /*@}*/ - - GLuint MaxIfDepth; /**< Maximum nested IF blocks */ - - /** - * Optimize code for array of structures backends. - * - * This is a proxy for: - * - preferring DP4 instructions (rather than MUL/MAD) for - * matrix * vector operations, such as position transformation. - */ - GLboolean OptimizeForAOS; - - /** Clamp UBO and SSBO block indices so they don't go out-of-bounds. */ - GLboolean ClampBlockIndicesToArrayBounds; - - /** (driconf) Force gl_Position to be considered invariant */ - GLboolean PositionAlwaysInvariant; - - /** (driconf) Force gl_Position to be considered precise */ - GLboolean PositionAlwaysPrecise; - - const struct nir_shader_compiler_options *NirOptions; -}; - -/** - * Precision info for shader datatypes. See glGetShaderPrecisionFormat(). - */ -struct gl_precision -{ - GLushort RangeMin; /**< min value exponent */ - GLushort RangeMax; /**< max value exponent */ - GLushort Precision; /**< number of mantissa bits */ -}; - -/** - * Limits for vertex, geometry and fragment programs/shaders. - */ -struct gl_program_constants -{ - /* logical limits */ - GLuint MaxInstructions; - GLuint MaxAluInstructions; - GLuint MaxTexInstructions; - GLuint MaxTexIndirections; - GLuint MaxAttribs; - GLuint MaxTemps; - GLuint MaxAddressRegs; - GLuint MaxAddressOffset; /**< [-MaxAddressOffset, MaxAddressOffset-1] */ - GLuint MaxParameters; - GLuint MaxLocalParams; - GLuint MaxEnvParams; - /* native/hardware limits */ - GLuint MaxNativeInstructions; - GLuint MaxNativeAluInstructions; - GLuint MaxNativeTexInstructions; - GLuint MaxNativeTexIndirections; - GLuint MaxNativeAttribs; - GLuint MaxNativeTemps; - GLuint MaxNativeAddressRegs; - GLuint MaxNativeParameters; - /* For shaders */ - GLuint MaxUniformComponents; /**< Usually == MaxParameters * 4 */ - - /** - * \name Per-stage input / output limits - * - * Previous to OpenGL 3.2, the intrastage data limits were advertised with - * a single value: GL_MAX_VARYING_COMPONENTS (GL_MAX_VARYING_VECTORS in - * ES). This is stored as \c gl_constants::MaxVarying. - * - * Starting with OpenGL 3.2, the limits are advertised with per-stage - * variables. Each stage as a certain number of outputs that it can feed - * to the next stage and a certain number inputs that it can consume from - * the previous stage. - * - * Vertex shader inputs do not participate this in this accounting. - * These are tracked exclusively by \c gl_program_constants::MaxAttribs. - * - * Fragment shader outputs do not participate this in this accounting. - * These are tracked exclusively by \c gl_constants::MaxDrawBuffers. - */ - /*@{*/ - GLuint MaxInputComponents; - GLuint MaxOutputComponents; - /*@}*/ - - /* ES 2.0 and GL_ARB_ES2_compatibility */ - struct gl_precision LowFloat, MediumFloat, HighFloat; - struct gl_precision LowInt, MediumInt, HighInt; - /* GL_ARB_uniform_buffer_object */ - GLuint MaxUniformBlocks; - uint64_t MaxCombinedUniformComponents; - GLuint MaxTextureImageUnits; - - /* GL_ARB_shader_atomic_counters */ - GLuint MaxAtomicBuffers; - GLuint MaxAtomicCounters; - - /* GL_ARB_shader_image_load_store */ - GLuint MaxImageUniforms; - - /* GL_ARB_shader_storage_buffer_object */ - GLuint MaxShaderStorageBlocks; -}; - -/** - * Constants which may be overridden by device driver during context creation - * but are never changed after that. - */ -struct gl_constants -{ - /** - * Bitmask of valid primitive types supported by the driver, - */ - GLbitfield DriverSupportedPrimMask; - - GLuint MaxTextureMbytes; /**< Max memory per image, in MB */ - GLuint MaxTextureSize; /**< Max 1D/2D texture size, in pixels*/ - GLuint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */ - GLuint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */ - GLuint MaxArrayTextureLayers; /**< Max layers in array textures */ - GLuint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */ - GLuint MaxTextureCoordUnits; - GLuint MaxCombinedTextureImageUnits; - GLuint MaxTextureUnits; /**< = MIN(CoordUnits, FragmentProgram.ImageUnits) */ - GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ - GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ - GLuint MaxTextureBufferSize; /**< GL_ARB_texture_buffer_object */ - - GLuint TextureBufferOffsetAlignment; /**< GL_ARB_texture_buffer_range */ - - GLuint MaxArrayLockSize; - - GLint SubPixelBits; - - GLfloat MinPointSize, MaxPointSize; /**< aliased */ - GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */ - GLfloat PointSizeGranularity; - GLfloat MinLineWidth, MaxLineWidth; /**< aliased */ - GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */ - GLfloat LineWidthGranularity; - - GLuint MaxClipPlanes; - GLuint MaxLights; - GLfloat MaxShininess; /**< GL_NV_light_max_exponent */ - GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */ - - GLuint MaxViewportWidth, MaxViewportHeight; - GLuint MaxViewports; /**< GL_ARB_viewport_array */ - GLuint ViewportSubpixelBits; /**< GL_ARB_viewport_array */ - struct { - GLfloat Min; - GLfloat Max; - } ViewportBounds; /**< GL_ARB_viewport_array */ - GLuint MaxWindowRectangles; /**< GL_EXT_window_rectangles */ - - struct gl_program_constants Program[MESA_SHADER_STAGES]; - GLuint MaxProgramMatrices; - GLuint MaxProgramMatrixStackDepth; - - struct { - GLuint SamplesPassed; - GLuint TimeElapsed; - GLuint Timestamp; - GLuint PrimitivesGenerated; - GLuint PrimitivesWritten; - GLuint VerticesSubmitted; - GLuint PrimitivesSubmitted; - GLuint VsInvocations; - GLuint TessPatches; - GLuint TessInvocations; - GLuint GsInvocations; - GLuint GsPrimitives; - GLuint FsInvocations; - GLuint ComputeInvocations; - GLuint ClInPrimitives; - GLuint ClOutPrimitives; - } QueryCounterBits; - - GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */ - - GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */ - GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ - GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ - - /** - * GL_ARB_framebuffer_no_attachments - */ - GLuint MaxFramebufferWidth; - GLuint MaxFramebufferHeight; - GLuint MaxFramebufferLayers; - GLuint MaxFramebufferSamples; - - /** Number of varying vectors between any two shader stages. */ - GLuint MaxVarying; - - /** @{ - * GL_ARB_uniform_buffer_object - */ - GLuint MaxCombinedUniformBlocks; - GLuint MaxUniformBufferBindings; - GLuint MaxUniformBlockSize; - GLuint UniformBufferOffsetAlignment; - /** @} */ - - /** @{ - * GL_ARB_shader_storage_buffer_object - */ - GLuint MaxCombinedShaderStorageBlocks; - GLuint MaxShaderStorageBufferBindings; - GLuint MaxShaderStorageBlockSize; - GLuint ShaderStorageBufferOffsetAlignment; - /** @} */ - - /** - * GL_ARB_explicit_uniform_location - */ - GLuint MaxUserAssignableUniformLocations; - - /** geometry shader */ - GLuint MaxGeometryOutputVertices; - GLuint MaxGeometryTotalOutputComponents; - GLuint MaxGeometryShaderInvocations; - - GLuint GLSLVersion; /**< Desktop GLSL version supported (ex: 120 = 1.20) */ - GLuint GLSLVersionCompat; /**< Desktop compat GLSL version supported */ - - /** - * Changes default GLSL extension behavior from "error" to "warn". It's out - * of spec, but it can make some apps work that otherwise wouldn't. - */ - GLboolean ForceGLSLExtensionsWarn; - - /** - * Force all shaders to behave as if they were declared with the - * compatibility token. - */ - GLboolean ForceCompatShaders; - - /** - * If non-zero, forces GLSL shaders to behave as if they began - * with "#version ForceGLSLVersion". - */ - GLuint ForceGLSLVersion; - - /** - * Allow GLSL #extension directives in the middle of shaders. - */ - GLboolean AllowGLSLExtensionDirectiveMidShader; - - /** - * Allow a subset of GLSL 1.20 in GLSL 1.10 as needed by SPECviewperf13. - */ - GLboolean AllowGLSL120SubsetIn110; - - /** - * Allow builtins as part of constant expressions. This was not allowed - * until GLSL 1.20 this allows it everywhere. - */ - GLboolean AllowGLSLBuiltinConstantExpression; - - /** - * Allow some relaxation of GLSL ES shader restrictions. This encompasses - * a number of relaxations to the ES shader rules. - */ - GLboolean AllowGLSLRelaxedES; - - /** - * Allow GLSL built-in variables to be redeclared verbatim - */ - GLboolean AllowGLSLBuiltinVariableRedeclaration; - - /** - * Allow GLSL interpolation qualifier mismatch across shader stages. - */ - GLboolean AllowGLSLCrossStageInterpolationMismatch; - - /** - * Allow creating a higher compat profile (version 3.1+) for apps that - * request it. Be careful when adding that driconf option because some - * features are unimplemented and might not work correctly. - */ - GLboolean AllowHigherCompatVersion; - - /** - * Allow GLSL shaders with the compatibility version directive - * in non-compatibility profiles. (for shader-db) - */ - GLboolean AllowGLSLCompatShaders; - - /** - * Allow extra tokens at end of preprocessor directives. The CTS now tests - * to make sure these are not allowed. However, previously drivers would - * allow them to exist and just issue a warning so some old applications - * depend on this. - */ - GLboolean AllowExtraPPTokens; - - /** - * The spec forbids a shader to "statically write both gl_ClipVertex - * and gl_ClipDistance". - * This option adds a tolerance for shader that statically writes to - * both but at least one of the write can be removed by a dead code - * elimination pass. - */ - GLboolean DoDCEBeforeClipCullAnalysis; - - /** - * Force computing the absolute value for sqrt() and inversesqrt() to follow - * D3D9 when apps rely on this behaviour. - */ - GLboolean ForceGLSLAbsSqrt; - - /** - * Forces the GLSL compiler to ignore writes to readonly vars rather than - * throwing an error. - */ - GLboolean GLSLIgnoreWriteToReadonlyVar; - - /** - * Types of variable to default initialized to zero. Supported values are: - * - 0: no zero initialization - * - 1: all shader variables and gl_FragColor are initialiazed to 0 - * - 2: same as 1, but shader out variables are *not* initialized, while - * function out variables are now initialized. - */ - GLchar GLSLZeroInit; - - /** - * Force GL names reuse. Needed by SPECviewperf13. - */ - GLboolean ForceGLNamesReuse; - - /** - * Treat integer textures using GL_LINEAR filters as GL_NEAREST. - */ - GLboolean ForceIntegerTexNearest; - - /** - * Treat 32-bit floating-point textures using GL_LINEAR filters as - * GL_NEAREST. - */ - GLboolean ForceFloat32TexNearest; - - /** - * Does the driver support real 32-bit integers? (Otherwise, integers are - * simulated via floats.) - */ - GLboolean NativeIntegers; - - /** - * If the driver supports real 32-bit integers, what integer value should be - * used for boolean true in uniform uploads? (Usually 1 or ~0.) - */ - GLuint UniformBooleanTrue; - - /** - * Maximum amount of time, measured in nanseconds, that the server can wait. - */ - GLuint64 MaxServerWaitTimeout; - - /** GL_EXT_provoking_vertex */ - GLboolean QuadsFollowProvokingVertexConvention; - - /** GL_ARB_viewport_array */ - GLenum16 LayerAndVPIndexProvokingVertex; - - /** OpenGL version 3.0 */ - GLbitfield ContextFlags; /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */ - - /** OpenGL version 3.2 */ - GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ - - /** OpenGL version 4.4 */ - GLuint MaxVertexAttribStride; - - /** GL_EXT_transform_feedback */ - GLuint MaxTransformFeedbackBuffers; - GLuint MaxTransformFeedbackSeparateComponents; - GLuint MaxTransformFeedbackInterleavedComponents; - GLuint MaxVertexStreams; - - /** GL_EXT_gpu_shader4 */ - GLint MinProgramTexelOffset, MaxProgramTexelOffset; - - /** GL_ARB_texture_gather */ - GLuint MinProgramTextureGatherOffset; - GLuint MaxProgramTextureGatherOffset; - GLuint MaxProgramTextureGatherComponents; - - /* GL_ARB_robustness */ - GLenum16 ResetStrategy; - - /* GL_KHR_robustness */ - GLboolean RobustAccess; - - /* GL_ARB_blend_func_extended */ - GLuint MaxDualSourceDrawBuffers; - - /** - * For drivers which can do a better job at eliminating unused uniforms - * than the GLSL compiler. - * - * XXX Remove these as soon as a better solution is available. - */ - GLboolean GLSLSkipStrictMaxUniformLimitCheck; - - /** - * Whether gl_FragCoord, gl_PointCoord and gl_FrontFacing - * are system values. - **/ - bool GLSLFragCoordIsSysVal; - bool GLSLPointCoordIsSysVal; - bool GLSLFrontFacingIsSysVal; - - /** - * Whether to call lower_const_arrays_to_uniforms() during linking. - */ - bool GLSLLowerConstArrays; - - /** - * True if gl_TessLevelInner/Outer[] in the TES should be inputs - * (otherwise, they're system values). - */ - bool GLSLTessLevelsAsInputs; - - /** GL_ARB_map_buffer_alignment */ - GLuint MinMapBufferAlignment; - - /** - * Disable varying packing. This is out of spec, but potentially useful - * for older platforms that supports a limited number of texture - * indirections--on these platforms, unpacking the varyings in the fragment - * shader increases the number of texture indirections by 1, which might - * make some shaders not executable at all. - * - * Drivers that support transform feedback must set this value to GL_FALSE. - */ - GLboolean DisableVaryingPacking; - - /** - * Disable varying packing if used for transform feedback. This is needed - * for some drivers (e.g. Panfrost) where transform feedback requires - * unpacked varyings. - * - * This variable is mutually exlusive with DisableVaryingPacking. - */ - GLboolean DisableTransformFeedbackPacking; - - /** - * Disable the glsl optimisation that resizes uniform arrays. - */ - bool DisableUniformArrayResize; - - /** - * Align varyings to POT in a slot - * - * Drivers that prefer varyings to be aligned to POT must set this value to GL_TRUE - */ - GLboolean PreferPOTAlignedVaryings; - - - /** - * UBOs and SSBOs can be packed tightly by the OpenGL implementation when - * layout is set as shared (the default) or packed. However most Mesa drivers - * just use STD140 for these layouts. This flag allows drivers to use STD430 - * for packed and shared layouts which allows arrays to be packed more - * tightly. - */ - bool UseSTD430AsDefaultPacking; - - /** - * Should meaningful names be generated for compiler temporary variables? - * - * Generally, it is not useful to have the compiler generate "meaningful" - * names for temporary variables that it creates. This can, however, be a - * useful debugging aid. In Mesa debug builds or release builds when - * MESA_GLSL is set at run-time, meaningful names will be generated. - * Drivers can also force names to be generated by setting this field. - * For example, the i965 driver may set it when INTEL_DEBUG=vs (to dump - * vertex shader assembly) is set at run-time. - */ - bool GenerateTemporaryNames; - - /* - * Maximum value supported for an index in DrawElements and friends. - * - * This must be at least (1ull<<24)-1. The default value is - * (1ull<<32)-1. - * - * \since ES 3.0 or GL_ARB_ES3_compatibility - * \sa _mesa_init_constants - */ - GLuint64 MaxElementIndex; - - /** - * Disable interpretation of line continuations (lines ending with a - * backslash character ('\') in GLSL source. - */ - GLboolean DisableGLSLLineContinuations; - - /** GL_ARB_texture_multisample */ - GLint MaxColorTextureSamples; - GLint MaxDepthTextureSamples; - GLint MaxIntegerSamples; - - /** GL_AMD_framebuffer_multisample_advanced */ - GLint MaxColorFramebufferSamples; - GLint MaxColorFramebufferStorageSamples; - GLint MaxDepthStencilFramebufferSamples; - - /* An array of supported MSAA modes allowing different sample - * counts per attachment type. - */ - struct { - GLint NumColorSamples; - GLint NumColorStorageSamples; - GLint NumDepthStencilSamples; - } SupportedMultisampleModes[40]; - GLint NumSupportedMultisampleModes; - - /** GL_ARB_shader_atomic_counters */ - GLuint MaxAtomicBufferBindings; - GLuint MaxAtomicBufferSize; - GLuint MaxCombinedAtomicBuffers; - GLuint MaxCombinedAtomicCounters; - - /** GL_ARB_vertex_attrib_binding */ - GLint MaxVertexAttribRelativeOffset; - GLint MaxVertexAttribBindings; - - /* GL_ARB_shader_image_load_store */ - GLuint MaxImageUnits; - GLuint MaxCombinedShaderOutputResources; - GLuint MaxImageSamples; - GLuint MaxCombinedImageUniforms; - - /** GL_ARB_compute_shader */ - GLuint MaxComputeWorkGroupCount[3]; /* Array of x, y, z dimensions */ - GLuint MaxComputeWorkGroupSize[3]; /* Array of x, y, z dimensions */ - GLuint MaxComputeWorkGroupInvocations; - GLuint MaxComputeSharedMemorySize; - - /** GL_ARB_compute_variable_group_size */ - GLuint MaxComputeVariableGroupSize[3]; /* Array of x, y, z dimensions */ - GLuint MaxComputeVariableGroupInvocations; - - /** GL_ARB_gpu_shader5 */ - GLfloat MinFragmentInterpolationOffset; - GLfloat MaxFragmentInterpolationOffset; - - GLboolean FakeSWMSAA; - - /** GL_KHR_context_flush_control */ - GLenum16 ContextReleaseBehavior; - - struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_STAGES]; - - /** GL_ARB_tessellation_shader */ - GLuint MaxPatchVertices; - GLuint MaxTessGenLevel; - GLuint MaxTessPatchComponents; - GLuint MaxTessControlTotalOutputComponents; - bool PrimitiveRestartForPatches; - - /** GL_OES_primitive_bounding_box */ - bool NoPrimitiveBoundingBoxOutput; - - /** GL_ARB_sparse_buffer */ - GLuint SparseBufferPageSize; - - /** Used as an input for sha1 generation in the on-disk shader cache */ - unsigned char *dri_config_options_sha1; - - /** When drivers are OK with mapped buffers during draw and other calls. */ - bool AllowMappedBuffersDuringExecution; - - /** Override GL_MAP_UNSYNCHRONIZED_BIT */ - bool ForceMapBufferSynchronized; - - /** GL_ARB_get_program_binary */ - GLuint NumProgramBinaryFormats; - - /** GL_ARB_gl_spirv */ - GLuint NumShaderBinaryFormats; - - /** GL_NV_conservative_raster */ - GLuint MaxSubpixelPrecisionBiasBits; - - /** GL_NV_conservative_raster_dilate */ - GLfloat ConservativeRasterDilateRange[2]; - GLfloat ConservativeRasterDilateGranularity; - - /** Is the drivers uniform storage packed or padded to 16 bytes. */ - bool PackedDriverUniformStorage; - - /** Wether or not glBitmap uses red textures rather than alpha */ - bool BitmapUsesRed; - - /** Whether the vertex buffer offset is a signed 32-bit integer. */ - bool VertexBufferOffsetIsInt32; - - /** Whether out-of-order draw (Begin/End) optimizations are allowed. */ - bool AllowDrawOutOfOrder; - - /** Whether to allow the fast path for frequently updated VAOs. */ - bool AllowDynamicVAOFastPath; - - /** Whether the driver can support primitive restart with a fixed index. - * This is essentially a subset of NV_primitive_restart with enough support - * to be able to enable GLES 3.1. Some hardware can support this but not the - * full NV extension with arbitrary restart indices. - */ - bool PrimitiveRestartFixedIndex; - - /** GL_ARB_gl_spirv */ - struct spirv_supported_capabilities SpirVCapabilities; - - /** GL_ARB_spirv_extensions */ - struct spirv_supported_extensions *SpirVExtensions; - - char *VendorOverride; - char *RendererOverride; - - /** Buffer size used to upload vertices from glBegin/glEnd. */ - unsigned glBeginEndBufferSize; - - /** Whether the driver doesn't want x/y/width/height clipped based on src size - * when doing a copy texture operation (eg: may want out-of-bounds reads that - * produce 0 instead of leaving the texture content undefined). - */ - bool NoClippingOnCopyTex; - - /** - * Force glthread to always return GL_FRAMEBUFFER_COMPLETE to prevent - * synchronization. Used for apps that call it every frame or multiple times - * a frame, but always getting framebuffer completeness. - */ - bool GLThreadNopCheckFramebufferStatus; - - /** GL_ARB_sparse_texture */ - GLuint MaxSparseTextureSize; - GLuint MaxSparse3DTextureSize; - GLuint MaxSparseArrayTextureLayers; - bool SparseTextureFullArrayCubeMipmaps; - - /** Use hardware accelerated GL_SELECT */ - bool HardwareAcceleratedSelect; - - /** Allow GLThread to convert glBuffer */ - bool AllowGLThreadBufferSubDataOpt; -}; -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/context.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/context.h deleted file mode 100644 index 140808c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/context.h +++ /dev/null @@ -1,496 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 context.h - * Mesa context and visual-related functions. - * - * There are three large Mesa data types/classes which are meant to be - * used by device drivers: - * - struct gl_context: this contains the Mesa rendering state - * - struct gl_config: this describes the color buffer (RGB vs. ci), whether - * or not there's a depth buffer, stencil buffer, etc. - * - struct gl_framebuffer: contains pointers to the depth buffer, stencil - * buffer, accum buffer and alpha buffers. - * - * These types should be encapsulated by corresponding device driver - * data types. See xmesa.h and xmesaP.h for an example. - * - * In OOP terms, struct gl_context, struct gl_config, and struct gl_framebuffer - * are base classes which the device driver must derive from. - * - * The following functions create and destroy these data types. - */ - - -#ifndef CONTEXT_H -#define CONTEXT_H - - -#include "errors.h" - -#include "extensions.h" -#include "mtypes.h" -#include "../vbo/vbo.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -struct _glapi_table; - - -/** \name Context-related functions */ -/*@{*/ - -extern void -_mesa_initialize(const char *extensions_override); - -extern GLboolean -_mesa_initialize_context( struct gl_context *ctx, - gl_api api, - bool no_error, - const struct gl_config *visual, - struct gl_context *share_list, - const struct dd_function_table *driverFunctions); - -extern struct _glapi_table * -_mesa_alloc_dispatch_table(bool glthread); - -extern void -_mesa_init_dispatch(struct gl_context *ctx); - -extern bool -_mesa_alloc_dispatch_tables(gl_api api, struct gl_dispatch *d, bool glthread); - -extern bool -_mesa_initialize_dispatch_tables(struct gl_context *ctx); - -extern struct _glapi_table * -_mesa_new_nop_table(unsigned numEntries, bool glthread); - -extern void -_mesa_free_context_data(struct gl_context *ctx, bool destroy_debug_output); - -extern void -_mesa_copy_context(const struct gl_context *src, struct gl_context *dst, GLuint mask); - -extern GLboolean -_mesa_make_current( struct gl_context *ctx, struct gl_framebuffer *drawBuffer, - struct gl_framebuffer *readBuffer ); - -extern GLboolean -_mesa_share_state(struct gl_context *ctx, struct gl_context *ctxToShare); - -extern struct gl_context * -_mesa_get_current_context(void); - -/*@}*/ - -extern void -_mesa_init_constants(struct gl_constants *consts, gl_api api); - -extern void -_mesa_set_context_lost_dispatch(struct gl_context *ctx); - - - -/** \name Miscellaneous */ -/*@{*/ - -extern void -_mesa_flush(struct gl_context *ctx); - -/*@}*/ - - -/** - * Are we currently between glBegin and glEnd? - * During execution, not display list compilation. - */ -static inline GLboolean -_mesa_inside_begin_end(const struct gl_context *ctx) -{ - return ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END; -} - - -/** - * Are we currently between glBegin and glEnd in a display list? - */ -static inline GLboolean -_mesa_inside_dlist_begin_end(const struct gl_context *ctx) -{ - return ctx->Driver.CurrentSavePrimitive <= PRIM_MAX; -} - - - -/** - * \name Macros for flushing buffered rendering commands before state changes, - * checking if inside glBegin/glEnd, etc. - */ -/*@{*/ - -/** - * Flush vertices. - * - * \param ctx GL context. - * \param newstate new state. - * - * Checks if dd_function_table::NeedFlush is marked to flush stored vertices, - * and calls dd_function_table::FlushVertices if so. Marks - * __struct gl_contextRec::NewState with \p newstate. - */ -#define FLUSH_VERTICES(ctx, newstate, pop_attrib_mask) \ -do { \ - if (MESA_VERBOSE & VERBOSE_STATE) \ - _mesa_debug(ctx, "FLUSH_VERTICES in %s\n", __func__); \ - if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \ - vbo_exec_FlushVertices(ctx, FLUSH_STORED_VERTICES); \ - ctx->NewState |= newstate; \ - ctx->PopAttribState |= pop_attrib_mask; \ -} while (0) - -/** - * Flush current state. - * - * \param ctx GL context. - * \param newstate new state. - * - * Checks if dd_function_table::NeedFlush is marked to flush current state, - * and calls dd_function_table::FlushVertices if so. Marks - * __struct gl_contextRec::NewState with \p newstate. - */ -#define FLUSH_CURRENT(ctx, newstate) \ -do { \ - if (MESA_VERBOSE & VERBOSE_STATE) \ - _mesa_debug(ctx, "FLUSH_CURRENT in %s\n", __func__); \ - if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ - vbo_exec_FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ - ctx->NewState |= newstate; \ -} while (0) - -/** - * Flush vertices. - * - * \param ctx GL context. - * - * Checks if dd_function_table::NeedFlush is marked to flush stored vertices - * or current state and calls dd_function_table::FlushVertices if so. - */ -#define FLUSH_FOR_DRAW(ctx) \ -do { \ - if (MESA_VERBOSE & VERBOSE_STATE) \ - _mesa_debug(ctx, "FLUSH_FOR_DRAW in %s\n", __func__); \ - if (ctx->Driver.NeedFlush) { \ - if (ctx->_AllowDrawOutOfOrder) { \ - if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \ - vbo_exec_FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \ - } else { \ - vbo_exec_FlushVertices(ctx, ctx->Driver.NeedFlush); \ - } \ - } \ -} while (0) - -/** - * Macro to assert that the API call was made outside the - * glBegin()/glEnd() pair, with return value. - * - * \param ctx GL context. - * \param retval value to return in case the assertion fails. - */ -#define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \ -do { \ - if (_mesa_inside_begin_end(ctx)) { \ - _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ - return retval; \ - } \ -} while (0) - -/** - * Macro to assert that the API call was made outside the - * glBegin()/glEnd() pair. - * - * \param ctx GL context. - */ -#define ASSERT_OUTSIDE_BEGIN_END(ctx) \ -do { \ - if (_mesa_inside_begin_end(ctx)) { \ - _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ - return; \ - } \ -} while (0) - -/*@}*/ - - -/** - * Checks if the context is for Desktop GL Compatibility - */ -static inline bool -_mesa_is_desktop_gl_compat(const struct gl_context *ctx) -{ -#if HAVE_OPENGL - return ctx->API == API_OPENGL_COMPAT; -#else - return false; -#endif -} - -/** - * Checks if the context is for Desktop GL Core - */ -static inline bool -_mesa_is_desktop_gl_core(const struct gl_context *ctx) -{ -#if HAVE_OPENGL - return ctx->API == API_OPENGL_CORE; -#else - return false; -#endif -} - -/** - * Checks if the context is for Desktop GL (Compatibility or Core) - */ -static inline bool -_mesa_is_desktop_gl(const struct gl_context *ctx) -{ - return _mesa_is_desktop_gl_compat(ctx) || _mesa_is_desktop_gl_core(ctx); -} - -/** - * Checks if the context is for GLES 1.0 - */ -static inline bool -_mesa_is_gles1(const struct gl_context *ctx) -{ -#if HAVE_OPENGL_ES_1 - return ctx->API == API_OPENGLES; -#else - return false; -#endif -} - -/** - * Checks if the context is for GLES 2.0 or later - */ -static inline bool -_mesa_is_gles2(const struct gl_context *ctx) -{ - return _mesa_is_api_gles2(ctx->API); -} - -/** - * Checks if the context is for any GLES version - */ -static inline bool -_mesa_is_gles(const struct gl_context *ctx) -{ - return _mesa_is_gles1(ctx) || _mesa_is_gles2(ctx); -} - -/** - * Checks if the context is for GLES 3.0 or later - */ -static inline bool -_mesa_is_gles3(const struct gl_context *ctx) -{ - return _mesa_is_gles2(ctx) && ctx->Version >= 30; -} - - -/** - * Checks if the context is for GLES 3.1 or later - */ -static inline bool -_mesa_is_gles31(const struct gl_context *ctx) -{ - return _mesa_is_gles2(ctx) && ctx->Version >= 31; -} - - -/** - * Checks if the context is for GLES 3.2 or later - */ -static inline bool -_mesa_is_gles32(const struct gl_context *ctx) -{ - return _mesa_is_gles2(ctx) && ctx->Version >= 32; -} - - -static inline bool -_mesa_is_no_error_enabled(const struct gl_context *ctx) -{ - return ctx->Const.ContextFlags & GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR; -} - - -static inline bool -_mesa_has_integer_textures(const struct gl_context *ctx) -{ - return _mesa_has_EXT_texture_integer(ctx) || _mesa_is_gles3(ctx); -} - -static inline bool -_mesa_has_half_float_textures(const struct gl_context *ctx) -{ - return _mesa_has_ARB_texture_float(ctx) || - _mesa_has_OES_texture_half_float(ctx); -} - -static inline bool -_mesa_has_float_textures(const struct gl_context *ctx) -{ - return _mesa_has_ARB_texture_float(ctx) || - _mesa_has_OES_texture_float(ctx) || _mesa_is_gles3(ctx); -} - -static inline bool -_mesa_has_texture_rgb10_a2ui(const struct gl_context *ctx) -{ - return _mesa_has_ARB_texture_rgb10_a2ui(ctx) || _mesa_is_gles3(ctx); -} - -static inline bool -_mesa_has_float_depth_buffer(const struct gl_context *ctx) -{ - return _mesa_has_ARB_depth_buffer_float(ctx) || _mesa_is_gles3(ctx); -} - -static inline bool -_mesa_has_packed_float(const struct gl_context *ctx) -{ - return _mesa_has_EXT_packed_float(ctx) || _mesa_is_gles3(ctx); -} - -static inline bool -_mesa_has_rg_textures(const struct gl_context *ctx) -{ - return _mesa_has_ARB_texture_rg(ctx) || _mesa_has_EXT_texture_rg(ctx) || - _mesa_is_gles3(ctx); -} - -static inline bool -_mesa_has_texture_shared_exponent(const struct gl_context *ctx) -{ - return _mesa_has_EXT_texture_shared_exponent(ctx) || _mesa_is_gles3(ctx); -} - -static inline bool -_mesa_has_texture_type_2_10_10_10_REV(const struct gl_context *ctx) -{ - return _mesa_is_desktop_gl(ctx) || - _mesa_has_EXT_texture_type_2_10_10_10_REV(ctx); -} - -/** - * Checks if the context supports geometry shaders. - */ -static inline bool -_mesa_has_geometry_shaders(const struct gl_context *ctx) -{ - return _mesa_has_OES_geometry_shader(ctx) || - (_mesa_is_desktop_gl(ctx) && ctx->Version >= 32); -} - - -/** - * Checks if the context supports compute shaders. - */ -static inline bool -_mesa_has_compute_shaders(const struct gl_context *ctx) -{ - return _mesa_has_ARB_compute_shader(ctx) || - _mesa_is_gles31(ctx); -} - -/** - * Checks if the context supports tessellation. - */ -static inline bool -_mesa_has_tessellation(const struct gl_context *ctx) -{ - /* _mesa_has_EXT_tessellation_shader(ctx) is redundant with the OES - * check, so don't bother calling it. - */ - return _mesa_has_OES_tessellation_shader(ctx) || - _mesa_has_ARB_tessellation_shader(ctx); -} - -static inline bool -_mesa_has_texture_cube_map_array(const struct gl_context *ctx) -{ - return _mesa_has_ARB_texture_cube_map_array(ctx) || - _mesa_has_OES_texture_cube_map_array(ctx); -} - -static inline bool -_mesa_has_texture_view(const struct gl_context *ctx) -{ - return _mesa_has_ARB_texture_view(ctx) || - _mesa_has_OES_texture_view(ctx); -} - -static inline bool -_mesa_hw_select_enabled(const struct gl_context *ctx) -{ - return ctx->RenderMode == GL_SELECT && - ctx->Const.HardwareAcceleratedSelect; -} - -static inline bool -_mesa_has_occlusion_query(const struct gl_context *ctx) -{ - return _mesa_has_ARB_occlusion_query(ctx) || - _mesa_has_ARB_occlusion_query2(ctx) || - (_mesa_is_desktop_gl(ctx) && ctx->Version >= 15); -} - -static inline bool -_mesa_has_occlusion_query_boolean(const struct gl_context *ctx) -{ - return _mesa_has_ARB_occlusion_query2(ctx) || - _mesa_has_EXT_occlusion_query_boolean(ctx) || - (_mesa_is_desktop_gl(ctx) && ctx->Version >= 33); -} - -static inline bool -_mesa_has_pipeline_statistics(const struct gl_context *ctx) -{ - return _mesa_has_ARB_pipeline_statistics_query(ctx) || - (_mesa_is_desktop_gl(ctx) && ctx->Version >= 46); -} - -#ifdef __cplusplus -} -#endif - - -#endif /* CONTEXT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/dd.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/dd.h deleted file mode 100644 index bacee69..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/dd.h +++ /dev/null @@ -1,273 +0,0 @@ -/** - * \file dd.h - * Device driver interfaces. - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef DD_INCLUDED -#define DD_INCLUDED - -#include "../../util/glheader.h" -#include "formats.h" -#include "menums.h" -#include "../../compiler/shader_enums.h" - -#if defined(_WIN32) && defined(_WINDOWS_) -#error "Should not include here" -#endif - -struct gl_buffer_object; -struct gl_context; -struct gl_display_list; -struct gl_framebuffer; -struct gl_image_unit; -struct gl_pixelstore_attrib; -struct gl_program; -struct gl_renderbuffer; -struct gl_renderbuffer_attachment; -struct gl_shader; -struct gl_shader_program; -struct gl_texture_image; -struct gl_texture_object; -struct gl_memory_info; -struct gl_memory_object; -struct gl_query_object; -struct gl_sampler_object; -struct gl_transform_feedback_object; -struct gl_vertex_array_object; -struct ati_fragment_shader; -struct util_queue_monitoring; -struct pipe_draw_info; -struct pipe_draw_start_count_bias; -struct pipe_vertex_state; -struct pipe_draw_vertex_state_info; -struct pipe_vertex_buffer; -struct pipe_vertex_element; - -/* GL_ARB_vertex_buffer_object */ -/* Modifies GL_MAP_UNSYNCHRONIZED_BIT to allow driver to fail (return - * NULL) if buffer is unavailable for immediate mapping. - * - * Does GL_MAP_INVALIDATE_RANGE_BIT do this? It seems so, but it - * would require more book-keeping in the driver than seems necessary - * at this point. - * - * Does GL_MAP_INVALDIATE_BUFFER_BIT do this? Not really -- we don't - * want to provoke the driver to throw away the old storage, we will - * respect the contents of already referenced data. - */ -#define MESA_MAP_NOWAIT_BIT 0x4000 - -/* Mapping a buffer is allowed from any thread. */ -#define MESA_MAP_THREAD_SAFE_BIT 0x8000 - -/* This buffer will only be mapped/unmapped once */ -#define MESA_MAP_ONCE 0x10000 - -/* This BufferStorage flag indicates that the buffer will be used - * by pipe_vertex_state, which doesn't track buffer busyness and doesn't - * support invalidations. - */ -#define MESA_GALLIUM_VERTEX_STATE_STORAGE 0x20000 - - -/** - * Device driver function table. - * Core Mesa uses these function pointers to call into device drivers. - * Most of these functions directly correspond to OpenGL state commands. - * Core Mesa will call these functions after error checking has been done - * so that the drivers don't have to worry about error testing. - * - * Vertex transformation/clipping/lighting is patched into the T&L module. - * Rasterization functions are patched into the swrast module. - * - * Note: when new functions are added here, the drivers/common/driverfuncs.c - * file should be updated too!!! - */ -struct dd_function_table { - /** - * \name Vertex/fragment program functions - */ - /** Allocate a new program */ - struct gl_program * (*NewProgram)(struct gl_context *ctx, - gl_shader_stage stage, - GLuint id, bool is_arb_asm); - /** - * \name Draw functions. - */ - /*@{*/ - /** - * For indirect array drawing: - * - * typedef struct { - * GLuint count; - * GLuint primCount; - * GLuint first; - * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise - * } DrawArraysIndirectCommand; - * - * For indirect indexed drawing: - * - * typedef struct { - * GLuint count; - * GLuint primCount; - * GLuint firstIndex; - * GLint baseVertex; - * GLuint baseInstance; // in GL 4.2 and later, must be zero otherwise - * } DrawElementsIndirectCommand; - */ - - /** - * Optimal Gallium version of Draw() that doesn't require translation - * of draw info in the state tracker. - * - * The interface is identical to pipe_context::draw_vbo - * with indirect == NULL. - * - * "info" is not const and the following fields can be changed by - * the callee, so callers should be aware: - * - info->index_bounds_valid (if false) - * - info->min_index (if index_bounds_valid is false) - * - info->max_index (if index_bounds_valid is false) - * - info->drawid (if increment_draw_id is true) - */ - void (*DrawGallium)(struct gl_context *ctx, - struct pipe_draw_info *info, - unsigned drawid_offset, - const struct pipe_draw_start_count_bias *draws, - unsigned num_draws); - - /** - * Same as DrawGallium, but mode can also change between draws. - * - * "info" is not const and the following fields can be changed by - * the callee in addition to the fields listed by DrawGallium: - * - info->mode - * - * This function exists to decrease complexity of DrawGallium. - */ - void (*DrawGalliumMultiMode)(struct gl_context *ctx, - struct pipe_draw_info *info, - const struct pipe_draw_start_count_bias *draws, - const unsigned char *mode, - unsigned num_draws); - - void (*DrawGalliumVertexState)(struct gl_context *ctx, - struct pipe_vertex_state *state, - struct pipe_draw_vertex_state_info info, - const struct pipe_draw_start_count_bias *draws, - const uint8_t *mode, - unsigned num_draws); - /*@}*/ - - struct pipe_vertex_state * - (*CreateGalliumVertexState)(struct gl_context *ctx, - const struct gl_vertex_array_object *vao, - struct gl_buffer_object *indexbuf, - uint32_t enabled_attribs); - - /** - * \name Support for multiple T&L engines - */ - /*@{*/ - - /** - * Set by the driver-supplied T&L engine. - * - * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd(). - */ - GLuint CurrentExecPrimitive; - - /** - * Current glBegin state of an in-progress compilation. May be - * GL_POINTS, GL_TRIANGLE_STRIP, etc. or PRIM_OUTSIDE_BEGIN_END - * or PRIM_UNKNOWN. - */ - GLuint CurrentSavePrimitive; - - -#define FLUSH_STORED_VERTICES 0x1 -#define FLUSH_UPDATE_CURRENT 0x2 - /** - * Set by the driver-supplied T&L engine whenever vertices are buffered - * between glBegin()/glEnd() objects or __struct gl_contextRec::Current - * is not updated. A bitmask of the FLUSH_x values above. - * - * The dd_function_table::FlushVertices call below may be used to resolve - * these conditions. - */ - GLbitfield NeedFlush; - - /** Need to call vbo_save_SaveFlushVertices() upon state change? */ - GLboolean SaveNeedFlush; - - /**@}*/ - - /** - * Query reset status for GL_ARB_robustness - * - * Per \c glGetGraphicsResetStatusARB, this function should return a - * non-zero value once after a reset. If a reset is non-atomic, the - * non-zero status should be returned for the duration of the reset. - */ - GLenum (*GetGraphicsResetStatus)(struct gl_context *ctx); - - /** - * \name GL_ARB_get_program_binary - */ - /*@{*/ - /** - * Calls to retrieve/store a binary serialized copy of the current program. - */ - void (*ProgramBinarySerializeDriverBlob)(struct gl_context *ctx, - struct gl_shader_program *shProg, - struct gl_program *prog); - - void (*ProgramBinaryDeserializeDriverBlob)(struct gl_context *ctx, - struct gl_shader_program *shProg, - struct gl_program *prog); - /*@}*/ - - /** - * \name Disk shader cache functions - */ - /*@{*/ - /** - * Called to initialize gl_program::driver_cache_blob (and size) with a - * ralloc allocated buffer. - * - * This buffer will be saved and restored as part of the gl_program - * serialization and deserialization. - */ - void (*ShaderCacheSerializeDriverBlob)(struct gl_context *ctx, - struct gl_program *prog); - /*@}*/ - - GLboolean (*ValidateEGLImage)(struct gl_context *ctx, GLeglImageOES image_handle); -}; - -#endif /* DD_INCLUDED */ \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/debug_output.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/debug_output.c deleted file mode 100644 index 1df58d3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/debug_output.c +++ /dev/null @@ -1,919 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2016 Brian Paul, et al 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#include "context.h" -#include "debug_output.h" - -#include "hash.h" -#include "mtypes.h" -#include "version.h" -#include "../../util/hash_table.h" - -#include "../../gallium/include/pipe/p_context.h" - -static GLuint PrevDynamicID = 0; - - -/** - * A namespace element. - */ -struct gl_debug_element -{ - struct list_head link; - - GLuint ID; - /* at which severity levels (mesa_debug_severity) is the message enabled */ - GLbitfield State; -}; - - -struct gl_debug_namespace -{ - struct list_head Elements; - GLbitfield DefaultState; -}; - - -struct gl_debug_group { - struct gl_debug_namespace Namespaces[MESA_DEBUG_SOURCE_COUNT][MESA_DEBUG_TYPE_COUNT]; -}; - - -/** - * An error, warning, or other piece of debug information for an application - * to consume via GL_ARB_debug_output/GL_KHR_debug. - */ -struct gl_debug_message -{ - enum mesa_debug_source source; - enum mesa_debug_type type; - GLuint id; - enum mesa_debug_severity severity; - /* length as given by the user - if message was explicitly null terminated, - * length can be negative */ - GLsizei length; - GLcharARB *message; -}; - - -/** - * Debug message log. It works like a ring buffer. - */ -struct gl_debug_log { - struct gl_debug_message Messages[MAX_DEBUG_LOGGED_MESSAGES]; - GLint NextMessage; - GLint NumMessages; -}; - - -struct gl_debug_state -{ - GLDEBUGPROC Callback; - const void *CallbackData; - GLboolean SyncOutput; - GLboolean DebugOutput; - GLboolean LogToStderr; - - struct gl_debug_group *Groups[MAX_DEBUG_GROUP_STACK_DEPTH]; - struct gl_debug_message GroupMessages[MAX_DEBUG_GROUP_STACK_DEPTH]; - GLint CurrentGroup; // GroupStackDepth - 1 - - struct gl_debug_log Log; -}; - - -static char out_of_memory[] = "Debugging error: out of memory"; - -static const GLenum debug_source_enums[] = { - GL_DEBUG_SOURCE_API, - GL_DEBUG_SOURCE_WINDOW_SYSTEM, - GL_DEBUG_SOURCE_SHADER_COMPILER, - GL_DEBUG_SOURCE_THIRD_PARTY, - GL_DEBUG_SOURCE_APPLICATION, - GL_DEBUG_SOURCE_OTHER, -}; - -static const GLenum debug_type_enums[] = { - GL_DEBUG_TYPE_ERROR, - GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR, - GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR, - GL_DEBUG_TYPE_PORTABILITY, - GL_DEBUG_TYPE_PERFORMANCE, - GL_DEBUG_TYPE_OTHER, - GL_DEBUG_TYPE_MARKER, - GL_DEBUG_TYPE_PUSH_GROUP, - GL_DEBUG_TYPE_POP_GROUP, -}; - -static const GLenum debug_severity_enums[] = { - GL_DEBUG_SEVERITY_LOW, - GL_DEBUG_SEVERITY_MEDIUM, - GL_DEBUG_SEVERITY_HIGH, - GL_DEBUG_SEVERITY_NOTIFICATION, -}; - - -static enum mesa_debug_source -gl_enum_to_debug_source(GLenum e) -{ - unsigned i; - - for (i = 0; i < ARRAY_SIZE(debug_source_enums); i++) { - if (debug_source_enums[i] == e) - break; - } - return i; -} - -static enum mesa_debug_type -gl_enum_to_debug_type(GLenum e) -{ - unsigned i; - - for (i = 0; i < ARRAY_SIZE(debug_type_enums); i++) { - if (debug_type_enums[i] == e) - break; - } - return i; -} - -static enum mesa_debug_severity -gl_enum_to_debug_severity(GLenum e) -{ - unsigned i; - - for (i = 0; i < ARRAY_SIZE(debug_severity_enums); i++) { - if (debug_severity_enums[i] == e) - break; - } - return i; -} - - -/** - * Handles generating a GL_ARB_debug_output message ID generated by the GL or - * GLSL compiler. - * - * The GL API has this "ID" mechanism, where the intention is to allow a - * client to filter in/out messages based on source, type, and ID. Of course, - * building a giant enum list of all debug output messages that Mesa might - * generate is ridiculous, so instead we have our caller pass us a pointer to - * static storage where the ID should get stored. This ID will be shared - * across all contexts for that message (which seems like a desirable - * property, even if it's not expected by the spec), but note that it won't be - * the same between executions if messages aren't generated in the same order. - */ -void -_mesa_debug_get_id(GLuint *id) -{ - if (!(*id)) { - /* Don't update *id if we raced with some other thread. */ - p_atomic_cmpxchg(id, 0, p_atomic_inc_return(&PrevDynamicID)); - } -} - -static void -debug_message_clear(struct gl_debug_message *msg) -{ - if (msg->message != (char*)out_of_memory) - free(msg->message); - msg->message = NULL; - msg->length = 0; -} - -static void -debug_message_store(struct gl_debug_message *msg, - enum mesa_debug_source source, - enum mesa_debug_type type, GLuint id, - enum mesa_debug_severity severity, - GLsizei len, const char *buf) -{ - GLsizei length = len; - - assert(!msg->message && !msg->length); - - if (length < 0) - length = strlen(buf); - - msg->message = malloc(length+1); - if (msg->message) { - (void) strncpy(msg->message, buf, (size_t)length); - msg->message[length] = '\0'; - - msg->length = len; - msg->source = source; - msg->type = type; - msg->id = id; - msg->severity = severity; - } else { - static GLuint oom_msg_id = 0; - _mesa_debug_get_id(&oom_msg_id); - - /* malloc failed! */ - msg->message = out_of_memory; - msg->length = -1; - msg->source = MESA_DEBUG_SOURCE_OTHER; - msg->type = MESA_DEBUG_TYPE_ERROR; - msg->id = oom_msg_id; - msg->severity = MESA_DEBUG_SEVERITY_HIGH; - } -} - -static void -debug_namespace_init(struct gl_debug_namespace *ns) -{ - list_inithead(&ns->Elements); - - /* Enable all the messages with severity HIGH or MEDIUM by default */ - ns->DefaultState = (1 << MESA_DEBUG_SEVERITY_MEDIUM ) | - (1 << MESA_DEBUG_SEVERITY_HIGH) | - (1 << MESA_DEBUG_SEVERITY_NOTIFICATION); -} - -static void -debug_namespace_clear(struct gl_debug_namespace *ns) -{ - list_for_each_entry_safe(struct gl_debug_element, elem, &ns->Elements, link) - free(elem); -} - -static bool -debug_namespace_copy(struct gl_debug_namespace *dst, - const struct gl_debug_namespace *src) -{ - dst->DefaultState = src->DefaultState; - - list_inithead(&dst->Elements); - list_for_each_entry(struct gl_debug_element, elem, &src->Elements, link) { - struct gl_debug_element *copy; - - copy = malloc(sizeof(*copy)); - if (!copy) { - debug_namespace_clear(dst); - return false; - } - - copy->ID = elem->ID; - copy->State = elem->State; - list_addtail(©->link, &dst->Elements); - } - - return true; -} - -/** - * Set the state of \p id in the namespace. - */ -static bool -debug_namespace_set(struct gl_debug_namespace *ns, - GLuint id, bool enabled) -{ - const uint32_t state = (enabled) ? - ((1 << MESA_DEBUG_SEVERITY_COUNT) - 1) : 0; - struct gl_debug_element *elem = NULL; - - /* find the element */ - list_for_each_entry(struct gl_debug_element, tmp, &ns->Elements, link) { - if (tmp->ID == id) { - elem = tmp; - break; - } - } - - /* we do not need the element if it has the default state */ - if (ns->DefaultState == state) { - if (elem) { - list_del(&elem->link); - free(elem); - } - return true; - } - - if (!elem) { - elem = malloc(sizeof(*elem)); - if (!elem) - return false; - - elem->ID = id; - list_addtail(&elem->link, &ns->Elements); - } - - elem->State = state; - - return true; -} - -/** - * Set the default state of the namespace for \p severity. When \p severity - * is MESA_DEBUG_SEVERITY_COUNT, the default values for all severities are - * updated. - */ -static void -debug_namespace_set_all(struct gl_debug_namespace *ns, - enum mesa_debug_severity severity, - bool enabled) -{ - uint32_t mask, val; - - /* set all elements to the same state */ - if (severity == MESA_DEBUG_SEVERITY_COUNT) { - ns->DefaultState = (enabled) ? ((1 << severity) - 1) : 0; - debug_namespace_clear(ns); - list_inithead(&ns->Elements); - return; - } - - mask = 1 << severity; - val = (enabled) ? mask : 0; - - ns->DefaultState = (ns->DefaultState & ~mask) | val; - - list_for_each_entry_safe(struct gl_debug_element, elem, &ns->Elements, - link) { - elem->State = (elem->State & ~mask) | val; - if (elem->State == ns->DefaultState) { - list_del(&elem->link); - free(elem); - } - } -} - -/** - * Get the state of \p id in the namespace. - */ -static bool -debug_namespace_get(const struct gl_debug_namespace *ns, GLuint id, - enum mesa_debug_severity severity) -{ - uint32_t state; - - state = ns->DefaultState; - list_for_each_entry(struct gl_debug_element, elem, &ns->Elements, link) { - if (elem->ID == id) { - state = elem->State; - break; - } - } - - return (state & (1 << severity)); -} - -/** - * Allocate and initialize context debug state. - */ -static struct gl_debug_state * -debug_create(void) -{ - struct gl_debug_state *debug; - int s, t; - - debug = CALLOC_STRUCT(gl_debug_state); - if (!debug) - return NULL; - - debug->Groups[0] = malloc(sizeof(*debug->Groups[0])); - if (!debug->Groups[0]) { - free(debug); - return NULL; - } - - /* Initialize state for filtering known debug messages. */ - for (s = 0; s < MESA_DEBUG_SOURCE_COUNT; s++) { - for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) - debug_namespace_init(&debug->Groups[0]->Namespaces[s][t]); - } - - return debug; -} - -/** - * Return true if the top debug group points to the group below it. - */ -static bool -debug_is_group_read_only(const struct gl_debug_state *debug) -{ - const GLint gstack = debug->CurrentGroup; - return (gstack > 0 && debug->Groups[gstack] == debug->Groups[gstack - 1]); -} - -/** - * Make the top debug group writable. - */ -static bool -debug_make_group_writable(struct gl_debug_state *debug) -{ - const GLint gstack = debug->CurrentGroup; - const struct gl_debug_group *src = debug->Groups[gstack]; - struct gl_debug_group *dst; - int s, t; - - if (!debug_is_group_read_only(debug)) - return true; - - dst = malloc(sizeof(*dst)); - if (!dst) - return false; - - for (s = 0; s < MESA_DEBUG_SOURCE_COUNT; s++) { - for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) { - if (!debug_namespace_copy(&dst->Namespaces[s][t], - &src->Namespaces[s][t])) { - /* error path! */ - for (t = t - 1; t >= 0; t--) - debug_namespace_clear(&dst->Namespaces[s][t]); - for (s = s - 1; s >= 0; s--) { - for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) - debug_namespace_clear(&dst->Namespaces[s][t]); - } - free(dst); - return false; - } - } - } - - debug->Groups[gstack] = dst; - - return true; -} - -/** - * Free the top debug group. - */ -static void -debug_clear_group(struct gl_debug_state *debug) -{ - const GLint gstack = debug->CurrentGroup; - - if (!debug_is_group_read_only(debug)) { - struct gl_debug_group *grp = debug->Groups[gstack]; - int s, t; - - for (s = 0; s < MESA_DEBUG_SOURCE_COUNT; s++) { - for (t = 0; t < MESA_DEBUG_TYPE_COUNT; t++) - debug_namespace_clear(&grp->Namespaces[s][t]); - } - - free(grp); - } - - debug->Groups[gstack] = NULL; -} - -/** - * Delete the oldest debug messages out of the log. - */ -static void -debug_delete_messages(struct gl_debug_state *debug, int count) -{ - struct gl_debug_log *log = &debug->Log; - - if (count > log->NumMessages) - count = log->NumMessages; - - while (count--) { - struct gl_debug_message *msg = &log->Messages[log->NextMessage]; - - debug_message_clear(msg); - - log->NumMessages--; - log->NextMessage++; - log->NextMessage %= MAX_DEBUG_LOGGED_MESSAGES; - } -} - -/** - * Loop through debug group stack tearing down states for - * filtering debug messages. Then free debug output state. - */ -static void -debug_destroy(struct gl_debug_state *debug) -{ - while (debug->CurrentGroup > 0) { - debug_clear_group(debug); - debug->CurrentGroup--; - } - - debug_clear_group(debug); - debug_delete_messages(debug, debug->Log.NumMessages); - free(debug); -} - -/** - * Sets the state of the given message source/type/ID tuple. - */ -static void -debug_set_message_enable(struct gl_debug_state *debug, - enum mesa_debug_source source, - enum mesa_debug_type type, - GLuint id, GLboolean enabled) -{ - const GLint gstack = debug->CurrentGroup; - struct gl_debug_namespace *ns; - - debug_make_group_writable(debug); - ns = &debug->Groups[gstack]->Namespaces[source][type]; - - debug_namespace_set(ns, id, enabled); -} - -/* - * Set the state of all message IDs found in the given intersection of - * 'source', 'type', and 'severity'. The _COUNT enum can be used for - * GL_DONT_CARE (include all messages in the class). - * - * This requires both setting the state of all previously seen message - * IDs in the hash table, and setting the default state for all - * applicable combinations of source/type/severity, so that all the - * yet-unknown message IDs that may be used in the future will be - * impacted as if they were already known. - */ -static void -debug_set_message_enable_all(struct gl_debug_state *debug, - enum mesa_debug_source source, - enum mesa_debug_type type, - enum mesa_debug_severity severity, - GLboolean enabled) -{ - const GLint gstack = debug->CurrentGroup; - int s, t, smax, tmax; - - if (source == MESA_DEBUG_SOURCE_COUNT) { - source = 0; - smax = MESA_DEBUG_SOURCE_COUNT; - } else { - smax = source+1; - } - - if (type == MESA_DEBUG_TYPE_COUNT) { - type = 0; - tmax = MESA_DEBUG_TYPE_COUNT; - } else { - tmax = type+1; - } - - debug_make_group_writable(debug); - - for (s = source; s < smax; s++) { - for (t = type; t < tmax; t++) { - struct gl_debug_namespace *nspace = - &debug->Groups[gstack]->Namespaces[s][t]; - debug_namespace_set_all(nspace, severity, enabled); - } - } -} - -/** - * Returns if the given message source/type/ID tuple is enabled. - */ -bool -_mesa_debug_is_message_enabled(const struct gl_debug_state *debug, - enum mesa_debug_source source, - enum mesa_debug_type type, - GLuint id, - enum mesa_debug_severity severity) -{ - const GLint gstack = debug->CurrentGroup; - struct gl_debug_group *grp = debug->Groups[gstack]; - struct gl_debug_namespace *nspace = &grp->Namespaces[source][type]; - - if (!debug->DebugOutput) - return false; - - return debug_namespace_get(nspace, id, severity); -} - -/** - * Return the oldest debug message out of the log. - */ -static const struct gl_debug_message * -debug_fetch_message(const struct gl_debug_state *debug) -{ - const struct gl_debug_log *log = &debug->Log; - - return (log->NumMessages) ? &log->Messages[log->NextMessage] : NULL; -} - -static struct gl_debug_message * -debug_get_group_message(struct gl_debug_state *debug) -{ - return &debug->GroupMessages[debug->CurrentGroup]; -} - -static void -debug_push_group(struct gl_debug_state *debug) -{ - const GLint gstack = debug->CurrentGroup; - - /* just point to the previous stack */ - debug->Groups[gstack + 1] = debug->Groups[gstack]; - debug->CurrentGroup++; -} - -static void -debug_pop_group(struct gl_debug_state *debug) -{ - debug_clear_group(debug); - debug->CurrentGroup--; -} - - -/** - * Installed as util_debug_callback when GL_DEBUG_OUTPUT is enabled. - */ -static void -_debug_message(void *data, - unsigned *id, - enum util_debug_type ptype, - const char *fmt, - va_list args) -{ - struct gl_context *ctx = data; - enum mesa_debug_source source; - enum mesa_debug_type type; - enum mesa_debug_severity severity; - - switch (ptype) { - case UTIL_DEBUG_TYPE_OUT_OF_MEMORY: - source = MESA_DEBUG_SOURCE_API; - type = MESA_DEBUG_TYPE_ERROR; - severity = MESA_DEBUG_SEVERITY_MEDIUM; - break; - case UTIL_DEBUG_TYPE_ERROR: - source = MESA_DEBUG_SOURCE_API; - type = MESA_DEBUG_TYPE_ERROR; - severity = MESA_DEBUG_SEVERITY_MEDIUM; - break; - case UTIL_DEBUG_TYPE_SHADER_INFO: - source = MESA_DEBUG_SOURCE_SHADER_COMPILER; - type = MESA_DEBUG_TYPE_OTHER; - severity = MESA_DEBUG_SEVERITY_NOTIFICATION; - break; - case UTIL_DEBUG_TYPE_PERF_INFO: - source = MESA_DEBUG_SOURCE_API; - type = MESA_DEBUG_TYPE_PERFORMANCE; - severity = MESA_DEBUG_SEVERITY_NOTIFICATION; - break; - case UTIL_DEBUG_TYPE_INFO: - source = MESA_DEBUG_SOURCE_API; - type = MESA_DEBUG_TYPE_OTHER; - severity = MESA_DEBUG_SEVERITY_NOTIFICATION; - break; - case UTIL_DEBUG_TYPE_FALLBACK: - source = MESA_DEBUG_SOURCE_API; - type = MESA_DEBUG_TYPE_PERFORMANCE; - severity = MESA_DEBUG_SEVERITY_NOTIFICATION; - break; - case UTIL_DEBUG_TYPE_CONFORMANCE: - source = MESA_DEBUG_SOURCE_API; - type = MESA_DEBUG_TYPE_OTHER; - severity = MESA_DEBUG_SEVERITY_NOTIFICATION; - break; - default: - unreachable("invalid debug type"); - } - _mesa_gl_vdebugf(ctx, id, source, type, severity, fmt, args); -} - -void -_mesa_update_debug_callback(struct gl_context *ctx) -{ - struct pipe_context *pipe = ctx->pipe; - - if (!pipe->set_debug_callback) - return; - - if (_mesa_get_debug_state_int(ctx, GL_DEBUG_OUTPUT)) { - struct util_debug_callback cb; - memset(&cb, 0, sizeof(cb)); - cb.async = !_mesa_get_debug_state_int(ctx, GL_DEBUG_OUTPUT_SYNCHRONOUS); - cb.debug_message = _debug_message; - cb.data = ctx; - pipe->set_debug_callback(pipe, &cb); - } else { - pipe->set_debug_callback(pipe, NULL); - } -} - -/** - * Lock and return debug state for the context. The debug state will be - * allocated and initialized upon the first call. When NULL is returned, the - * debug state is not locked. - */ -static struct gl_debug_state * -_mesa_lock_debug_state(struct gl_context *ctx) -{ - return NULL; - /* - simple_mtx_lock(&ctx->DebugMutex); - - if (!ctx->Debug) { - ctx->Debug = debug_create(); - if (!ctx->Debug) { - //GET_CURRENT_CONTEXT(cur); - simple_mtx_unlock(&ctx->DebugMutex); - - /* - * This function may be called from other threads. When that is the - * case, we cannot record this OOM error. - - //if (ctx == cur) _mesa_error(ctx, GL_OUT_OF_MEMORY, "allocating debug state"); - - return NULL; - } - } - - return ctx->Debug; - */ -} - -static void -_mesa_unlock_debug_state(struct gl_context *ctx) -{ - //simple_mtx_unlock(&ctx->DebugMutex); -} - -/** - * Set the integer debug state specified by \p pname. This can be called from - * _mesa_set_enable for example. - */ -bool -_mesa_set_debug_state_int(struct gl_context *ctx, GLenum pname, GLint val) -{ - struct gl_debug_state *debug = _mesa_lock_debug_state(ctx); - - if (!debug) - return false; - - switch (pname) { - case GL_DEBUG_OUTPUT: - debug->DebugOutput = (val != 0); - break; - case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: - debug->SyncOutput = (val != 0); - break; - default: - assert(!"unknown debug output param"); - break; - } - - _mesa_unlock_debug_state(ctx); - - return true; -} - -/** - * Query the integer debug state specified by \p pname. This can be called - * _mesa_GetIntegerv for example. - */ -GLint -_mesa_get_debug_state_int(struct gl_context *ctx, GLenum pname) -{ - GLint val; - - struct gl_debug_state *debug = _mesa_lock_debug_state(ctx); - if (!debug) - return 0; - - switch (pname) { - case GL_DEBUG_OUTPUT: - val = debug->DebugOutput; - break; - case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: - val = debug->SyncOutput; - break; - case GL_DEBUG_LOGGED_MESSAGES: - val = debug->Log.NumMessages; - break; - case GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH: - val = (debug->Log.NumMessages) ? - debug->Log.Messages[debug->Log.NextMessage].length + 1 : 0; - break; - case GL_DEBUG_GROUP_STACK_DEPTH: - val = debug->CurrentGroup + 1; - break; - default: - assert(!"unknown debug output param"); - val = 0; - break; - } - - _mesa_unlock_debug_state(ctx); - - return val; -} - -/** - * Query the pointer debug state specified by \p pname. This can be called - * _mesa_GetPointerv for example. - */ -void * -_mesa_get_debug_state_ptr(struct gl_context *ctx, GLenum pname) -{ - void *val; - struct gl_debug_state *debug = _mesa_lock_debug_state(ctx); - - if (!debug) - return NULL; - - switch (pname) { - case GL_DEBUG_CALLBACK_FUNCTION_ARB: - val = (void *) debug->Callback; - break; - case GL_DEBUG_CALLBACK_USER_PARAM_ARB: - val = (void *) debug->CallbackData; - break; - default: - assert(!"unknown debug output param"); - val = NULL; - break; - } - - _mesa_unlock_debug_state(ctx); - - return val; -} - -/** - * Insert a debug message. The mutex is assumed to be locked, and will be - * unlocked by this call. - */ -static void -log_msg_locked_and_unlock(struct gl_context *ctx, - enum mesa_debug_source source, - enum mesa_debug_type type, GLuint id, - enum mesa_debug_severity severity, - GLint len, const char *buf) -{ - _mesa_log_msg(ctx, source, type, id, severity, len, buf); - /* - struct gl_debug_state *debug = ctx->Debug; - - if (!_mesa_debug_is_message_enabled(debug, source, type, id, severity)) { - _mesa_unlock_debug_state(ctx); - return; - } - - if (ctx->Debug->Callback) { - // Call the user's callback function - GLenum gl_source = debug_source_enums[source]; - GLenum gl_type = debug_type_enums[type]; - GLenum gl_severity = debug_severity_enums[severity]; - GLDEBUGPROC callback = ctx->Debug->Callback; - const void *data = ctx->Debug->CallbackData; - - /* - * When ctx->Debug->SyncOutput is GL_FALSE, the client is prepared for - * unsynchronous calls. When it is GL_TRUE, we will not spawn threads. - * In either case, we can call the callback unlocked. - - _mesa_unlock_debug_state(ctx); - callback(gl_source, gl_type, id, gl_severity, len, buf, data); - } - else { - // add debug message to queue - debug_log_message(ctx->Debug, source, type, id, severity, len, buf); - _mesa_unlock_debug_state(ctx); - }*/ - -} - -/** - * Log a client or driver debug message. - */ -void -_mesa_log_msg(struct gl_context *ctx, enum mesa_debug_source source, - enum mesa_debug_type type, GLuint id, - enum mesa_debug_severity severity, GLint len, const char *buf) -{ - printf("MESA: %s\n", buf); - /* - struct gl_debug_state *debug = _mesa_lock_debug_state(ctx); - - if (!debug) - return; - - log_msg_locked_and_unlock(ctx, source, type, id, severity, len, buf); - */ -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/debug_output.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/debug_output.h deleted file mode 100644 index f75bd2f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/debug_output.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2016 Brian Paul, et al 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef DEBUG_OUTPUT_H -#define DEBUG_OUTPUT_H - - -#include -#include -#include "glheader.h" -#include "menums.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; - - -void -_mesa_free_errors_data(struct gl_context *ctx); - -void -_mesa_debug_get_id(GLuint *id); - -bool -_mesa_set_debug_state_int(struct gl_context *ctx, GLenum pname, GLint val); - -GLint -_mesa_get_debug_state_int(struct gl_context *ctx, GLenum pname); - -void * -_mesa_get_debug_state_ptr(struct gl_context *ctx, GLenum pname); - -void -_mesa_log_msg(struct gl_context *ctx, enum mesa_debug_source source, - enum mesa_debug_type type, GLuint id, - enum mesa_debug_severity severity, GLint len, const char *buf); - -bool -_mesa_debug_is_message_enabled(const struct gl_debug_state *debug, - enum mesa_debug_source source, - enum mesa_debug_type type, - GLuint id, - enum mesa_debug_severity severity); - -#ifdef __cplusplus -} -#endif - - -#endif /* DEBUG_OUTPUT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/dlist.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/dlist.h deleted file mode 100644 index 02dd4d6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/dlist.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Created by serpentspirale on 30/09/23. -// - -#ifndef GL4ES_EXTRA_DLIST_H -#define GL4ES_EXTRA_DLIST_H - -#define VBO_ATTRIB_POS VERT_ATTRIB_POS -#define VBO_ATTRIB_NORMAL VERT_ATTRIB_NORMAL -#define VBO_ATTRIB_COLOR0 VERT_ATTRIB_COLOR0 -#define VBO_ATTRIB_COLOR1 VERT_ATTRIB_COLOR1 -#define VBO_ATTRIB_FOG VERT_ATTRIB_FOG -#define VBO_ATTRIB_COLOR_INDEX VERT_ATTRIB_COLOR_INDEX -#define VBO_ATTRIB_EDGEFLAG VERT_ATTRIB_EDGEFLAG -#define VBO_ATTRIB_TEX0 VERT_ATTRIB_TEX0 -#define VBO_ATTRIB_GENERIC0 VERT_ATTRIB_GENERIC0 -#define VBO_ATTRIB_MAX VERT_ATTRIB_MAX - -#endif //GL4ES_EXTRA_DLIST_H diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/draw.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/draw.h deleted file mode 100644 index 059c77b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/draw.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * \brief Array type draw functions, the main workhorse of any OpenGL API - * \author Keith Whitwell - */ - - -#ifndef DRAW_H -#define DRAW_H - -#include -#include "glheader.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; - -struct _mesa_prim -{ - GLuint mode:8; /**< GL_POINTS, GL_LINES, GL_QUAD_STRIP, etc */ - GLuint indexed:1; - GLuint begin:1; - GLuint end:1; - GLuint is_indirect:1; - GLuint pad:20; - - GLuint start; - GLuint count; - GLint basevertex; - GLuint num_instances; - GLuint base_instance; - GLuint draw_id; - - GLsizeiptr indirect_offset; -}; - -/* Would like to call this a "vbo_index_buffer", but this would be - * confusing as the indices are not neccessarily yet in a non-null - * buffer object. - */ -struct _mesa_index_buffer -{ - GLuint count; - unsigned index_size; - struct gl_buffer_object *obj; - const void *ptr; -}; - - -void -_mesa_initialize_exec_dispatch(const struct gl_context *ctx, - struct _glapi_table *exec); - - -void -_mesa_draw_indirect(struct gl_context *ctx, GLuint mode, - struct gl_buffer_object *indirect_data, - GLsizeiptr indirect_offset, unsigned draw_count, - unsigned stride, - struct gl_buffer_object *indirect_draw_count_buffer, - GLsizeiptr indirect_draw_count_offset, - const struct _mesa_index_buffer *ib); - - -void GLAPIENTRY -_mesa_DrawArrays(GLenum mode, GLint first, GLsizei count); - - -void GLAPIENTRY -_mesa_DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, - GLsizei primcount); - - -void GLAPIENTRY -_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices); - - -void GLAPIENTRY -_mesa_DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, - GLenum type, const GLvoid *indices); - - -void GLAPIENTRY -_mesa_DrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices, GLint basevertex); - - -void GLAPIENTRY -_mesa_DrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, - GLsizei count, GLenum type, - const GLvoid *indices, - GLint basevertex); - - -void GLAPIENTRY -_mesa_DrawTransformFeedback(GLenum mode, GLuint name); - - - -void GLAPIENTRY -_mesa_MultiDrawArrays(GLenum mode, const GLint *first, - const GLsizei *count, GLsizei primcount); - - -void GLAPIENTRY -_mesa_MultiDrawElements(GLenum mode, const GLsizei *count, GLenum type, - const GLvoid *const *indices, GLsizei primcount); - - -void GLAPIENTRY -_mesa_MultiDrawElementsBaseVertex(GLenum mode, - const GLsizei *count, GLenum type, - const GLvoid * const * indices, GLsizei primcount, - const GLint *basevertex); - - -void GLAPIENTRY -_mesa_MultiModeDrawArraysIBM(const GLenum * mode, const GLint * first, - const GLsizei * count, - GLsizei primcount, GLint modestride); - - -void GLAPIENTRY -_mesa_MultiModeDrawElementsIBM(const GLenum * mode, const GLsizei * count, - GLenum type, const GLvoid * const * indices, - GLsizei primcount, GLint modestride); - - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/enums.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/enums.h deleted file mode 100644 index 239f41a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/enums.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - * \file enums.h - * Enumeration name/number lookup functions. - * - * \if subset - * (No-op) - * - * \endif - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef _ENUMS_H_ -#define _ENUMS_H_ - - -#ifdef __cplusplus -extern "C" { -#endif - - -//extern const char *_mesa_enum_to_string( int nr ); - -/* Get the name of an enum given that it is a primitive type. Avoids - * GL_FALSE/GL_POINTS ambiguity and others. - */ -const char *_mesa_lookup_prim_by_nr( unsigned nr ); - - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/errors.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/errors.c deleted file mode 100644 index cf204c8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/errors.c +++ /dev/null @@ -1,198 +0,0 @@ -/** - * \file errors.c - * Mesa debugging and error handling functions. - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2007 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#include -#include -#include "errors.h" -#include "enums.h" - -#include "context.h" -#include "debug_output.h" -#include "../../util/log.h" - - -/** - * When a new type of error is recorded, print a message describing - * previous errors which were accumulated. - */ -static void -flush_delayed_errors( struct gl_context *ctx ) -{ - char s[MAX_DEBUG_MESSAGE_LENGTH]; - /* - if (ctx->ErrorDebugCount) { - snprintf(s, MAX_DEBUG_MESSAGE_LENGTH, "%d similar %s errors", - ctx->ErrorDebugCount, - _mesa_enum_to_string(ctx->ErrorValue)); - - output_if_debug(MESA_LOG_ERROR, s); - - ctx->ErrorDebugCount = 0; - } - */ -} - -static GLboolean -should_output(struct gl_context *ctx, GLenum error, const char *fmtString) -{ - return GL_TRUE; - /* - static GLint debug = -1; - - if (debug == -1) { - const char *debugEnv = getenv("MESA_DEBUG"); - -#ifndef NDEBUG - if (debugEnv && strstr(debugEnv, "silent")) - debug = GL_FALSE; - else - debug = GL_TRUE; -#else - if (debugEnv) - debug = GL_TRUE; - else - debug = GL_FALSE; -#endif - } - - if (debug) { - if (ctx->ErrorValue != error || - ctx->ErrorDebugFmtString != fmtString) { - flush_delayed_errors( ctx ); - ctx->ErrorDebugFmtString = fmtString; - ctx->ErrorDebugCount = 0; - return GL_TRUE; - } - ctx->ErrorDebugCount++; - } - return GL_FALSE; - */ -} - - -void -_mesa_gl_vdebugf(struct gl_context *ctx, - GLuint *id, - enum mesa_debug_source source, - enum mesa_debug_type type, - enum mesa_debug_severity severity, - const char *fmtString, - va_list args) -{ - char s[MAX_DEBUG_MESSAGE_LENGTH]; - int len; - - _mesa_debug_get_id(id); - - len = vsnprintf(s, MAX_DEBUG_MESSAGE_LENGTH, fmtString, args); - if (len >= MAX_DEBUG_MESSAGE_LENGTH) - /* message was truncated */ - len = MAX_DEBUG_MESSAGE_LENGTH - 1; - - _mesa_log_msg(ctx, source, type, *id, severity, len, s); -} - - -void -_mesa_gl_debugf(struct gl_context *ctx, - GLuint *id, - enum mesa_debug_source source, - enum mesa_debug_type type, - enum mesa_debug_severity severity, - const char *fmtString, ...) -{ - va_list args; - va_start(args, fmtString); - _mesa_gl_vdebugf(ctx, id, source, type, severity, fmtString, args); - va_end(args); -} - - -void -_mesa_error_no_memory(const char *caller) -{ - //GET_CURRENT_CONTEXT(ctx); - //_mesa_error(ctx, GL_OUT_OF_MEMORY, "out of memory in %s", caller); -} - -/** - * Report an internal implementation problem. - * Prints the message to stderr via fprintf(). - * - * \param ctx GL context. - * \param fmtString problem description string. - */ -void -_mesa_problem( const struct gl_context *ctx, const char *fmtString, ... ) -{ - va_list args; - char str[MAX_DEBUG_MESSAGE_LENGTH]; - static int numCalls = 0; - - (void) ctx; - - if (numCalls < 50) { - numCalls++; - - va_start( args, fmtString ); - vsnprintf( str, MAX_DEBUG_MESSAGE_LENGTH, fmtString, args ); - va_end( args ); - fprintf(stderr, "Mesa " " implementation error: %s\n", - str); - fprintf(stderr, "Please report at " "\n"); - } -} - -/** - * Report debug information from the shader compiler via GL_ARB_debug_output. - * - * \param ctx GL context. - * \param type The namespace to which this message belongs. - * \param id The message ID within the given namespace. - * \param msg The message to output. Must be null-terminated. - */ -void -_mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint *id, - const char *msg) -{ - enum mesa_debug_source source = MESA_DEBUG_SOURCE_SHADER_COMPILER; - enum mesa_debug_severity severity = MESA_DEBUG_SEVERITY_HIGH; - int len; - - _mesa_debug_get_id(id); - - len = strlen(msg); - - /* Truncate the message if necessary. */ - if (len >= MAX_DEBUG_MESSAGE_LENGTH) - len = MAX_DEBUG_MESSAGE_LENGTH - 1; - - _mesa_log_msg(ctx, source, type, *id, severity, len, msg); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/errors.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/errors.h deleted file mode 100644 index 52cf917..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/errors.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 errors.h - * Mesa debugging and error handling functions. - * - * This file provides functions to record errors, warnings, and miscellaneous - * debug information. - */ - - -#ifndef ERRORS_H -#define ERRORS_H - - -#include -#include -#include "../../util/glheader.h" -#include "menums.h" - - - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; - -extern void -_mesa_problem( const struct gl_context *ctx, const char *fmtString, ... ) ; - -extern void -_mesa_error_no_memory(const char *caller); - -extern void -_mesa_log(const char *fmtString, ...) ; - -extern void -_mesa_log_direct(const char *string); - - - -void -_mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint *id, - const char *msg); - -extern void -_mesa_gl_vdebugf(struct gl_context *ctx, - GLuint *id, - enum mesa_debug_source source, - enum mesa_debug_type type, - enum mesa_debug_severity severity, - const char *fmtString, - va_list args); - -extern void -_mesa_gl_debugf(struct gl_context *ctx, - GLuint *id, - enum mesa_debug_source source, - enum mesa_debug_type type, - enum mesa_debug_severity severity, - const char *fmtString, ...) ; - -extern size_t -_mesa_gl_debug(struct gl_context *ctx, - GLuint *id, - enum mesa_debug_source source, - enum mesa_debug_type type, - enum mesa_debug_severity severity, - const char *msg); - -#define _mesa_perf_debug(ctx, sev, ...) do { \ - static GLuint msg_id = 0; \ - if (unlikely(ctx->Const.ContextFlags & GL_CONTEXT_FLAG_DEBUG_BIT)) { \ - _mesa_gl_debugf(ctx, &msg_id, \ - MESA_DEBUG_SOURCE_API, \ - MESA_DEBUG_TYPE_PERFORMANCE, \ - sev, \ - __VA_ARGS__); \ - } \ -} while (0) - -#ifdef __cplusplus -} -#endif - - -#endif /* ERRORS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions.h deleted file mode 100644 index 705d65d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions.h +++ /dev/null @@ -1,125 +0,0 @@ -/** - * \file extensions.h - * Extension handling. - * - * \if subset - * (No-op) - * - * \endif - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef _EXTENSIONS_H_ -#define _EXTENSIONS_H_ - -#include "mtypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; -struct gl_extensions; - -extern void _mesa_enable_sw_extensions(struct gl_context *ctx); - -extern void _mesa_one_time_init_extension_overrides(struct gl_context *ctx); - -extern void _mesa_init_extensions(struct gl_extensions *extentions); - -extern GLubyte *_mesa_make_extension_string(struct gl_context *ctx); - -extern void _mesa_override_extensions(struct gl_context *ctx); - -extern GLuint -_mesa_get_extension_count(struct gl_context *ctx); - -extern const GLubyte * -_mesa_get_enabled_extension(struct gl_context *ctx, GLuint index); - - -/** - * \brief An element of the \c extension_table. - */ -struct mesa_extension { - /** Name of extension, such as "GL_ARB_depth_clamp". */ - const char *name; - - /** Offset (in bytes) of the corresponding member in struct gl_extensions. */ - size_t offset; - - /** Minimum version the extension requires for the given API - * (see gl_api defined in mtypes.h). The value is equal to: - * 10 * major_version + minor_version - */ - uint8_t version[API_OPENGL_LAST + 1]; - - /** Year the extension was proposed or approved. Used to sort the - * extension string chronologically. */ - uint16_t year; -}; - -extern const struct mesa_extension _mesa_extension_table[]; - - -/* Generate enums for the functions below */ -enum { -#define EXT(name_str, ...) MESA_EXTENSION_##name_str, -#include "extensions_table.h" -#undef EXT -MESA_EXTENSION_COUNT -}; - - -/** Checks if the context supports a user-facing extension */ -#define EXT(name_str, driver_cap, ...) \ -static inline bool \ -_mesa_has_##name_str(const struct gl_context *ctx) \ -{ \ - return ctx->Extensions.driver_cap && (ctx->Extensions.Version >= \ - _mesa_extension_table[MESA_EXTENSION_##name_str].version[ctx->API]); \ -} -#include "extensions_table.h" -#undef EXT - -/* Sometimes the driver wants to query the extension override status before - * a context is created. These variables are filled with extension override - * information before context creation. - * - * This can be useful during extension bring-up when an extension is - * partially implemented, but cannot yet be advertised as supported. - * - * Use it with care and keep access read-only. - */ -extern struct gl_extensions _mesa_extension_override_enables; -extern struct gl_extensions _mesa_extension_override_disables; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions_table.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions_table.c deleted file mode 100644 index 1adcd2b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions_table.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "extensions.h" - -/** - * Given a member \c x of struct gl_extensions, return offset of - * \c x in bytes. - */ -#define o(x) offsetof(struct gl_extensions, x) - -/** - * \brief Table of supported OpenGL extensions for all API's. - */ -const struct mesa_extension _mesa_extension_table[] = { -#define EXT(name_str, driver_cap, gll_ver, glc_ver, gles_ver, gles2_ver, yyyy) \ - { .name = "GL_" #name_str, .offset = o(driver_cap), \ - .version = { \ - [API_OPENGL_COMPAT] = gll_ver, \ - [API_OPENGL_CORE] = glc_ver, \ - [API_OPENGLES] = gles_ver, \ - [API_OPENGLES2] = gles2_ver, \ - }, \ - .year = yyyy \ - }, -#include "extensions_table.h" -#undef EXT -}; diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions_table.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions_table.h deleted file mode 100644 index ff40815..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/extensions_table.h +++ /dev/null @@ -1,510 +0,0 @@ -/* The extension table is alphabetically sorted by the extension name string column. */ - -#define GLL 0 -#define GLC 0 -#define ES1 0 -#define ES2 0 -#define x ~0 - -EXT(3DFX_texture_compression_FXT1 , TDFX_texture_compression_FXT1 , GLL, GLC, x , x , 1999) - -EXT(AMD_compressed_ATC_texture , AMD_compressed_ATC_texture , x , x , ES1, ES2, 2008) -EXT(AMD_conservative_depth , ARB_conservative_depth , GLL, GLC, x , x , 2009) -EXT(AMD_depth_clamp_separate , AMD_depth_clamp_separate , GLL, GLC, x , x , 2009) -EXT(AMD_draw_buffers_blend , ARB_draw_buffers_blend , GLL, GLC, x , x , 2009) -EXT(AMD_framebuffer_multisample_advanced , AMD_framebuffer_multisample_advanced , GLL, GLC, x , ES2, 2018) -EXT(AMD_gpu_shader_int64 , ARB_gpu_shader_int64 , x , GLC, x , x , 2015) -EXT(AMD_multi_draw_indirect , ARB_draw_indirect , GLL, GLC, x , x , 2011) -EXT(AMD_performance_monitor , AMD_performance_monitor , GLL, GLC, x , ES2, 2007) -EXT(AMD_pinned_memory , AMD_pinned_memory , GLL, GLC, x , x , 2013) -EXT(AMD_query_buffer_object , ARB_query_buffer_object , GLL, GLC, x , x , 2012) -EXT(AMD_seamless_cubemap_per_texture , AMD_seamless_cubemap_per_texture , GLL, GLC, x , x , 2009) -EXT(AMD_shader_stencil_export , ARB_shader_stencil_export , GLL, GLC, x , x , 2009) -EXT(AMD_shader_trinary_minmax , dummy_true , GLL, GLC, x , x , 2012) -EXT(AMD_texture_texture4 , ARB_texture_gather , GLL, GLC, x , x , 2008) -EXT(AMD_vertex_shader_layer , AMD_vertex_shader_layer , GLL, GLC, x , x , 2012) -EXT(AMD_vertex_shader_viewport_index , AMD_vertex_shader_viewport_index , GLL, GLC, x , x , 2012) - -EXT(ANDROID_extension_pack_es31a , ANDROID_extension_pack_es31a , x , x , x , 31, 2014) - -EXT(ANGLE_pack_reverse_row_order , dummy_true , x , x , x , ES2, 2011) -EXT(ANGLE_texture_compression_dxt3 , ANGLE_texture_compression_dxt , GLL, GLC, ES1, ES2, 2011) -EXT(ANGLE_texture_compression_dxt5 , ANGLE_texture_compression_dxt , GLL, GLC, ES1, ES2, 2011) - -EXT(APPLE_packed_pixels , dummy_true , GLL, x , x , x , 2002) -EXT(APPLE_texture_max_level , dummy_true , x , x , ES1, ES2, 2009) - -EXT(ARB_ES2_compatibility , ARB_ES2_compatibility , GLL, GLC, x , x , 2009) -EXT(ARB_ES3_1_compatibility , ARB_ES3_1_compatibility , GLL, GLC, x , x , 2014) -EXT(ARB_ES3_2_compatibility , ARB_ES3_2_compatibility , GLL, GLC, x , x , 2015) -EXT(ARB_ES3_compatibility , ARB_ES3_compatibility , GLL, GLC, x , x , 2012) -EXT(ARB_arrays_of_arrays , ARB_arrays_of_arrays , GLL, GLC, x , x , 2012) -EXT(ARB_base_instance , ARB_base_instance , GLL, GLC, x , x , 2011) -EXT(ARB_bindless_texture , ARB_bindless_texture , GLL, GLC, x , x , 2013) -EXT(ARB_blend_func_extended , ARB_blend_func_extended , GLL, GLC, x , x , 2009) -EXT(ARB_buffer_storage , ARB_buffer_storage , GLL, GLC, x , x , 2013) -EXT(ARB_clear_buffer_object , dummy_true , GLL, GLC, x , x , 2012) -EXT(ARB_clear_texture , ARB_clear_texture , GLL, GLC, x , x , 2013) -EXT(ARB_clip_control , ARB_clip_control , GLL, GLC, x , x , 2014) -EXT(ARB_color_buffer_float , ARB_color_buffer_float , GLL, GLC, x , x , 2004) -EXT(ARB_compatibility , ARB_compatibility , GLL, x , x , x , 2009) -EXT(ARB_compressed_texture_pixel_storage , dummy_true , GLL, GLC, x , x , 2011) -EXT(ARB_compute_shader , ARB_compute_shader , GLL, GLC, x , x , 2012) -EXT(ARB_compute_variable_group_size , ARB_compute_variable_group_size , GLL, GLC, x , x , 2013) -EXT(ARB_conditional_render_inverted , ARB_conditional_render_inverted , GLL, GLC, x , x , 2014) -EXT(ARB_conservative_depth , ARB_conservative_depth , GLL, GLC, x , x , 2011) -EXT(ARB_copy_buffer , dummy_true , GLL, GLC, x , x , 2008) -EXT(ARB_copy_image , ARB_copy_image , GLL, GLC, x , x , 2012) -EXT(ARB_cull_distance , ARB_cull_distance , GLL, GLC, x , x , 2014) -EXT(ARB_debug_output , dummy_true , GLL, GLC, x , x , 2009) -EXT(ARB_depth_buffer_float , ARB_depth_buffer_float , GLL, GLC, x , x , 2008) -EXT(ARB_depth_clamp , ARB_depth_clamp , GLL, GLC, x , x , 2003) -EXT(ARB_depth_texture , dummy_true , GLL, x , x , x , 2001) -EXT(ARB_derivative_control , ARB_derivative_control , GLL, GLC, x , x , 2014) -EXT(ARB_direct_state_access , dummy_true , 31, GLC, x , x , 2014) -EXT(ARB_draw_buffers , dummy_true , GLL, GLC, x , x , 2002) -EXT(ARB_draw_buffers_blend , ARB_draw_buffers_blend , GLL, GLC, x , x , 2009) -EXT(ARB_draw_elements_base_vertex , ARB_draw_elements_base_vertex , GLL, GLC, x , x , 2009) -EXT(ARB_draw_indirect , ARB_draw_indirect , GLL, GLC, x , x , 2010) -EXT(ARB_draw_instanced , ARB_draw_instanced , GLL, GLC, x , x , 2008) -EXT(ARB_enhanced_layouts , ARB_enhanced_layouts , GLL, GLC, x , x , 2013) -EXT(ARB_explicit_attrib_location , ARB_explicit_attrib_location , GLL, GLC, x , x , 2009) -EXT(ARB_explicit_uniform_location , ARB_explicit_uniform_location , GLL, GLC, x , x , 2012) -EXT(ARB_fragment_coord_conventions , ARB_fragment_coord_conventions , GLL, GLC, x , x , 2009) -EXT(ARB_fragment_layer_viewport , ARB_fragment_layer_viewport , GLL, GLC, x , x , 2012) -EXT(ARB_fragment_program , ARB_fragment_program , GLL, x , x , x , 2002) -EXT(ARB_fragment_program_shadow , ARB_fragment_program_shadow , GLL, x , x , x , 2003) -EXT(ARB_fragment_shader , ARB_fragment_shader , GLL, GLC, x , x , 2002) -EXT(ARB_fragment_shader_interlock , ARB_fragment_shader_interlock , GLL, GLC, x , x , 2015) -EXT(ARB_framebuffer_no_attachments , ARB_framebuffer_no_attachments , GLL, GLC, x , x , 2012) -EXT(ARB_framebuffer_object , ARB_framebuffer_object , GLL, GLC, x , x , 2005) -EXT(ARB_framebuffer_sRGB , EXT_framebuffer_sRGB , GLL, GLC, x , x , 1998) -EXT(ARB_get_program_binary , dummy_true , GLL, GLC, x , x , 2010) -EXT(ARB_get_texture_sub_image , dummy_true , GLL, GLC, x , x , 2014) -EXT(ARB_gl_spirv , ARB_gl_spirv , GLL, GLC, x , x , 2016) -EXT(ARB_gpu_shader5 , ARB_gpu_shader5 , GLL, GLC, x , x , 2010) -EXT(ARB_gpu_shader_fp64 , ARB_gpu_shader_fp64 , 32, GLC, x , x , 2010) -EXT(ARB_gpu_shader_int64 , ARB_gpu_shader_int64 , 40, GLC, x , x , 2015) -EXT(ARB_half_float_pixel , dummy_true , GLL, GLC, x , x , 2003) -EXT(ARB_half_float_vertex , ARB_half_float_vertex , GLL, GLC, x , x , 2008) -EXT(ARB_indirect_parameters , ARB_indirect_parameters , GLL, GLC, x , x , 2013) -EXT(ARB_instanced_arrays , ARB_instanced_arrays , GLL, GLC, x , x , 2008) -EXT(ARB_internalformat_query , ARB_internalformat_query , GLL, GLC, x , x , 2011) -EXT(ARB_internalformat_query2 , ARB_internalformat_query2 , GLL, GLC, x , x , 2013) -EXT(ARB_invalidate_subdata , dummy_true , GLL, GLC, x , x , 2012) -EXT(ARB_map_buffer_alignment , dummy_true , GLL, GLC, x , x , 2011) -EXT(ARB_map_buffer_range , ARB_map_buffer_range , GLL, GLC, x , x , 2008) -EXT(ARB_multi_bind , dummy_true , GLL, GLC, x , x , 2013) -EXT(ARB_multi_draw_indirect , ARB_draw_indirect , GLL, GLC, x , x , 2012) -EXT(ARB_multisample , dummy_true , GLL, x , x , x , 1994) -EXT(ARB_multitexture , dummy_true , GLL, x , x , x , 1998) -EXT(ARB_occlusion_query , ARB_occlusion_query , GLL, x , x , x , 2001) -EXT(ARB_occlusion_query2 , ARB_occlusion_query2 , GLL, GLC, x , x , 2003) -EXT(ARB_parallel_shader_compile , dummy_true , GLL, GLC, x , x , 2015) -EXT(ARB_pipeline_statistics_query , ARB_pipeline_statistics_query , GLL, GLC, x , x , 2014) -EXT(ARB_pixel_buffer_object , dummy_true , GLL, GLC, x , x , 2004) -EXT(ARB_point_parameters , dummy_true , GLL, x , x , x , 1997) -EXT(ARB_point_sprite , dummy_true , GLL, GLC, x , x , 2003) -EXT(ARB_polygon_offset_clamp , ARB_polygon_offset_clamp , GLL, GLC, x , x , 2017) -EXT(ARB_post_depth_coverage , ARB_post_depth_coverage , GLL, GLC, x , x, 2015) -EXT(ARB_program_interface_query , dummy_true , GLL, GLC, x , x , 2012) -EXT(ARB_provoking_vertex , EXT_provoking_vertex , GLL, GLC, x , x , 2009) -EXT(ARB_query_buffer_object , ARB_query_buffer_object , GLL, GLC, x , x , 2013) -EXT(ARB_robust_buffer_access_behavior , ARB_robust_buffer_access_behavior , GLL, GLC, x , x , 2012) -EXT(ARB_robustness , dummy_true , GLL, GLC, x , x , 2010) -EXT(ARB_sample_locations , ARB_sample_locations , GLL, GLC, x , x , 2015) -EXT(ARB_sample_shading , ARB_sample_shading , GLL, GLC, x , x , 2009) -EXT(ARB_sampler_objects , dummy_true , GLL, GLC, x , x , 2009) -EXT(ARB_seamless_cube_map , ARB_seamless_cube_map , GLL, GLC, x , x , 2009) -EXT(ARB_seamless_cubemap_per_texture , AMD_seamless_cubemap_per_texture , GLL, GLC, x , x , 2013) -EXT(ARB_separate_shader_objects , dummy_true , GLL, GLC, x , x , 2010) -EXT(ARB_shader_atomic_counter_ops , ARB_shader_atomic_counter_ops , GLL, GLC, x , x , 2015) -EXT(ARB_shader_atomic_counters , ARB_shader_atomic_counters , GLL, GLC, x , x , 2011) -EXT(ARB_shader_ballot , ARB_shader_ballot , GLL, GLC, x , x , 2015) -EXT(ARB_shader_bit_encoding , ARB_shader_bit_encoding , GLL, GLC, x , x , 2010) -EXT(ARB_shader_clock , ARB_shader_clock , GLL, GLC, x , x , 2015) -EXT(ARB_shader_draw_parameters , ARB_shader_draw_parameters , GLL, GLC, x , x , 2013) -EXT(ARB_shader_group_vote , ARB_shader_group_vote , GLL, GLC, x , x , 2013) -EXT(ARB_shader_image_load_store , ARB_shader_image_load_store , GLL, GLC, x , x , 2011) -EXT(ARB_shader_image_size , ARB_shader_image_size , GLL, GLC, x , x , 2012) -EXT(ARB_shader_objects , dummy_true , GLL, GLC, x , x , 2002) -EXT(ARB_shader_precision , ARB_shader_precision , GLL, GLC, x , x , 2010) -EXT(ARB_shader_stencil_export , ARB_shader_stencil_export , GLL, GLC, x , x , 2009) -EXT(ARB_shader_storage_buffer_object , ARB_shader_storage_buffer_object , GLL, GLC, x , x , 2012) -EXT(ARB_shader_subroutine , dummy_true , 31, GLC, x , x , 2010) -EXT(ARB_shader_texture_image_samples , ARB_shader_texture_image_samples , GLL, GLC, x , x , 2014) -EXT(ARB_shader_texture_lod , ARB_shader_texture_lod , GLL, GLC, x , x , 2009) -EXT(ARB_shader_viewport_layer_array , ARB_shader_viewport_layer_array , GLL, GLC, x , x , 2015) -EXT(ARB_shading_language_100 , dummy_true , GLL, x , x , x , 2003) -EXT(ARB_shading_language_420pack , ARB_shading_language_420pack , GLL, GLC, x , x , 2011) -EXT(ARB_shading_language_include , dummy_true , GLL, GLC, x , x , 2013) -EXT(ARB_shading_language_packing , ARB_shading_language_packing , GLL, GLC, x , x , 2011) -EXT(ARB_shadow , ARB_shadow , GLL, x , x , x , 2001) -EXT(ARB_sparse_buffer , ARB_sparse_buffer , GLL, GLC, x , x , 2014) -EXT(ARB_sparse_texture , ARB_sparse_texture , GLL, GLC, x , x , 2013) -EXT(ARB_sparse_texture2 , ARB_sparse_texture2 , GLL, GLC, x , x , 2015) -EXT(ARB_sparse_texture_clamp , ARB_sparse_texture_clamp , GLL, GLC, x , x , 2015) -EXT(ARB_spirv_extensions , ARB_spirv_extensions , GLL, GLC, x , x , 2016) -EXT(ARB_stencil_texturing , ARB_stencil_texturing , GLL, GLC, x , x , 2012) -EXT(ARB_sync , ARB_sync , GLL, GLC, x , x , 2003) -EXT(ARB_tessellation_shader , ARB_tessellation_shader , GLL, GLC, x , x , 2009) -EXT(ARB_texture_barrier , NV_texture_barrier , GLL, GLC, x , x , 2014) -EXT(ARB_texture_border_clamp , dummy_true , GLL, x , x , x , 2000) -EXT(ARB_texture_buffer_object , ARB_texture_buffer_object , GLL, GLC, x , x , 2008) -EXT(ARB_texture_buffer_object_rgb32 , ARB_texture_buffer_object_rgb32 , GLL, GLC, x , x , 2009) -EXT(ARB_texture_buffer_range , ARB_texture_buffer_range , GLL, GLC, x , x , 2012) -EXT(ARB_texture_compression , dummy_true , GLL, x , x , x , 2000) -EXT(ARB_texture_compression_bptc , ARB_texture_compression_bptc , GLL, GLC, x , x , 2010) -EXT(ARB_texture_compression_rgtc , ARB_texture_compression_rgtc , GLL, GLC, x , x , 2004) -EXT(ARB_texture_cube_map , dummy_true , GLL, x , x , x , 1999) -EXT(ARB_texture_cube_map_array , ARB_texture_cube_map_array , GLL, GLC, x , x , 2009) -EXT(ARB_texture_env_add , dummy_true , GLL, x , x , x , 1999) -EXT(ARB_texture_env_combine , dummy_true , GLL, x , x , x , 2001) -EXT(ARB_texture_env_crossbar , dummy_true , GLL, x , x , x , 2001) -EXT(ARB_texture_env_dot3 , dummy_true , GLL, x , x , x , 2001) -EXT(ARB_texture_filter_anisotropic , ARB_texture_filter_anisotropic , GLL, GLC, x , x , 2017) -EXT(ARB_texture_filter_minmax , ARB_texture_filter_minmax , GLL, GLC, x , x , 2015) -EXT(ARB_texture_float , ARB_texture_float , GLL, GLC, x , x , 2004) -EXT(ARB_texture_gather , ARB_texture_gather , GLL, GLC, x , x , 2009) -EXT(ARB_texture_mirror_clamp_to_edge , ARB_texture_mirror_clamp_to_edge , GLL, GLC, x , x , 2013) -EXT(ARB_texture_mirrored_repeat , dummy_true , GLL, x , x , x , 2001) -EXT(ARB_texture_multisample , ARB_texture_multisample , GLL, GLC, x , x , 2009) -EXT(ARB_texture_non_power_of_two , ARB_texture_non_power_of_two , GLL, GLC, x , x , 2003) -EXT(ARB_texture_query_levels , ARB_texture_query_levels , GLL, GLC, x , x , 2012) -EXT(ARB_texture_query_lod , ARB_texture_query_lod , GLL, GLC, x , x , 2009) -EXT(ARB_texture_rectangle , NV_texture_rectangle , GLL, GLC, x , x , 2004) -EXT(ARB_texture_rg , ARB_texture_rg , GLL, GLC, x , x , 2008) -EXT(ARB_texture_rgb10_a2ui , ARB_texture_rgb10_a2ui , GLL, GLC, x , x , 2009) -EXT(ARB_texture_stencil8 , ARB_texture_stencil8 , GLL, GLC, x , x , 2013) -EXT(ARB_texture_storage , dummy_true , GLL, GLC, x , x , 2011) -EXT(ARB_texture_storage_multisample , ARB_texture_multisample , GLL, GLC, x , x , 2012) -EXT(ARB_texture_swizzle , EXT_texture_swizzle , GLL, GLC, x , x , 2008) -EXT(ARB_texture_view , ARB_texture_view , GLL, GLC, x , x , 2012) -EXT(ARB_timer_query , ARB_timer_query , GLL, GLC, x , x , 2010) -EXT(ARB_transform_feedback2 , ARB_transform_feedback2 , GLL, GLC, x , x , 2010) -EXT(ARB_transform_feedback3 , ARB_transform_feedback3 , GLL, GLC, x , x , 2010) -EXT(ARB_transform_feedback_instanced , ARB_transform_feedback_instanced , GLL, GLC, x , x , 2011) -EXT(ARB_transform_feedback_overflow_query , ARB_transform_feedback_overflow_query , GLL, GLC, x , x , 2014) -EXT(ARB_transpose_matrix , dummy_true , GLL, x , x , x , 1999) -EXT(ARB_uniform_buffer_object , ARB_uniform_buffer_object , GLL, GLC, x , x , 2009) -EXT(ARB_vertex_array_bgra , EXT_vertex_array_bgra , GLL, GLC, x , x , 2008) -EXT(ARB_vertex_array_object , dummy_true , GLL, GLC, x , x , 2006) -EXT(ARB_vertex_attrib_64bit , ARB_vertex_attrib_64bit , 32, GLC, x , x , 2010) -EXT(ARB_vertex_attrib_binding , dummy_true , GLL, GLC, x , x , 2012) -EXT(ARB_vertex_buffer_object , dummy_true , GLL, GLC, x , x , 2003) -EXT(ARB_vertex_program , ARB_vertex_program , GLL, x , x , x , 2002) -EXT(ARB_vertex_shader , ARB_vertex_shader , GLL, GLC, x , x , 2002) -EXT(ARB_vertex_type_10f_11f_11f_rev , ARB_vertex_type_10f_11f_11f_rev , GLL, GLC, x , x , 2013) -EXT(ARB_vertex_type_2_10_10_10_rev , ARB_vertex_type_2_10_10_10_rev , GLL, GLC, x , x , 2009) -EXT(ARB_viewport_array , ARB_viewport_array , GLL, GLC, x , x , 2010) -EXT(ARB_window_pos , dummy_true , GLL, x , x , x , 2001) - -EXT(ARM_shader_framebuffer_fetch_depth_stencil, ARM_shader_framebuffer_fetch_depth_stencil, GLL, GLC, x , ES2, 2014) - -EXT(ATI_blend_equation_separate , EXT_blend_equation_separate , GLL, GLC, x , x , 2003) -EXT(ATI_draw_buffers , dummy_true , GLL, x , x , x , 2002) -EXT(ATI_fragment_shader , ATI_fragment_shader , GLL, x , x , x , 2001) -EXT(ATI_meminfo , ATI_meminfo , GLL, GLC, x , x , 2009) -EXT(ATI_separate_stencil , EXT_stencil_two_side , GLL, x , x , x , 2006) -EXT(ATI_texture_compression_3dc , ATI_texture_compression_3dc , GLL, x , x , x , 2004) -EXT(ATI_texture_env_combine3 , ATI_texture_env_combine3 , GLL, x , x , x , 2002) -EXT(ATI_texture_float , ARB_texture_float , GLL, GLC, x , x , 2002) -EXT(ATI_texture_mirror_once , ATI_texture_mirror_once , GLL, GLC, x , x , 2006) - -EXT(EXT_EGL_image_storage , EXT_EGL_image_storage , GLL, GLC , x , 30, 2018) -EXT(EXT_EGL_sync , dummy_true , GLL, GLC, x , x , 2019) -EXT(EXT_abgr , dummy_true , GLL, GLC, x , x , 1995) -EXT(EXT_base_instance , ARB_base_instance , x , x , x , 30, 2014) -EXT(EXT_bgra , dummy_true , GLL, x , x , x , 1995) -EXT(EXT_blend_color , dummy_true , GLL, x , x , x , 1995) -EXT(EXT_blend_equation_separate , EXT_blend_equation_separate , GLL, GLC, x , x , 2003) -EXT(EXT_blend_func_extended , ARB_blend_func_extended , x , x , x , ES2, 2015) -EXT(EXT_blend_func_separate , dummy_true , GLL, x , x , x , 1999) -EXT(EXT_blend_minmax , dummy_true , GLL, x , ES1, ES2, 1995) -EXT(EXT_blend_subtract , dummy_true , GLL, x , x , x , 1995) -EXT(EXT_buffer_storage , ARB_buffer_storage , x , x , x , 31, 2015) -EXT(EXT_clear_texture , ARB_clear_texture , x , x , x , 31, 2016) -EXT(EXT_clip_control , ARB_clip_control , x , x , x , ES2, 2017) -EXT(EXT_clip_cull_distance , ARB_cull_distance , x , x , x , 30, 2016) -EXT(EXT_color_buffer_float , dummy_true , x , x , x , 30, 2013) -EXT(EXT_color_buffer_half_float , EXT_color_buffer_half_float , x , x , x , 20, 2017) -EXT(EXT_compiled_vertex_array , dummy_true , GLL, x , x , x , 1996) -EXT(EXT_compressed_ETC1_RGB8_sub_texture , OES_compressed_ETC1_RGB8_texture , x , x , ES1, ES2, 2014) -EXT(EXT_copy_image , OES_copy_image , x , x , x , 30, 2014) -EXT(EXT_copy_texture , dummy_true , GLL, x , x , x , 1995) -EXT(EXT_debug_label , dummy_true , GLL, GLC, 11, ES2, 2013) -EXT(EXT_demote_to_helper_invocation , EXT_demote_to_helper_invocation , GLL, GLC, ES1, ES2, 2019) -EXT(EXT_depth_bounds_test , EXT_depth_bounds_test , GLL, GLC, x , x , 2002) -EXT(EXT_depth_clamp , ARB_depth_clamp , x , x , x , ES2, 2019) -EXT(EXT_direct_state_access , dummy_true , GLL, x , x , x , 2010) -EXT(EXT_discard_framebuffer , dummy_true , x , x , ES1, ES2, 2009) -EXT(EXT_disjoint_timer_query , EXT_disjoint_timer_query , x , x , x , ES2, 2016) -EXT(EXT_draw_buffers , dummy_true , x , x , x , ES2, 2012) -EXT(EXT_draw_buffers2 , EXT_draw_buffers2 , GLL, GLC, x , x , 2006) -EXT(EXT_draw_buffers_indexed , ARB_draw_buffers_blend , x , x , x , 30, 2014) -EXT(EXT_draw_elements_base_vertex , ARB_draw_elements_base_vertex , x , x , x , ES2, 2014) -EXT(EXT_draw_instanced , ARB_draw_instanced , GLL, GLC, x , ES2 , 2006) -EXT(EXT_draw_range_elements , dummy_true , GLL, x , x , x , 1997) -EXT(EXT_float_blend , EXT_float_blend , x , x , x , 30, 2015) -EXT(EXT_fog_coord , dummy_true , GLL, x , x , x , 1999) -EXT(EXT_frag_depth , dummy_true , x , x , x , ES2, 2010) -EXT(EXT_framebuffer_blit , dummy_true , GLL, GLC, x , x , 2005) -EXT(EXT_framebuffer_multisample , EXT_framebuffer_multisample , GLL, GLC, x , x , 2005) -EXT(EXT_framebuffer_multisample_blit_scaled , EXT_framebuffer_multisample_blit_scaled, GLL, GLC, x , x , 2011) -EXT(EXT_framebuffer_object , dummy_true , GLL, GLC, x , x , 2000) -EXT(EXT_framebuffer_sRGB , EXT_framebuffer_sRGB , GLL, GLC, x , x , 1998) -EXT(EXT_geometry_point_size , OES_geometry_shader , x , x , x , 31, 2015) -EXT(EXT_geometry_shader , OES_geometry_shader , x , x , x , 31, 2015) -EXT(EXT_gpu_program_parameters , EXT_gpu_program_parameters , GLL, x , x , x , 2006) -/* Since all of EXT_gpu_shader4 features were rolled into GLSL 1.40, it shouldn't be exposed in a core context. - * Additionally, EXT_gpu_shader4 would reintroduce functions that were removed in GLSL 1.40. */ -EXT(EXT_gpu_shader4 , EXT_gpu_shader4 , GLL, x , x , x , 2006) -EXT(EXT_gpu_shader5 , ARB_gpu_shader5 , x , x , x , 31, 2014) -EXT(EXT_instanced_arrays , ARB_instanced_arrays , x , x , x , ES2, 2012) -EXT(EXT_map_buffer_range , ARB_map_buffer_range , x , x , ES1, ES2, 2012) -EXT(EXT_memory_object , EXT_memory_object , GLL, GLC, x , ES2, 2017) -EXT(EXT_memory_object_fd , EXT_memory_object_fd , GLL, GLC, x , ES2, 2017) -EXT(EXT_memory_object_win32 , EXT_memory_object_win32 , GLL, GLC, x , ES2, 2017) -EXT(EXT_multi_draw_arrays , dummy_true , GLL, x , ES1, ES2, 1999) -EXT(EXT_multisampled_render_to_texture , EXT_multisampled_render_to_texture , x , x , x , ES2, 2016) -EXT(EXT_multisampled_render_to_texture2 , EXT_multisampled_render_to_texture , x , x , x , ES2, 2016) -EXT(EXT_occlusion_query_boolean , ARB_occlusion_query2 , x , x , x , ES2, 2011) -EXT(EXT_packed_depth_stencil , dummy_true , GLL, GLC, x , x , 2005) -EXT(EXT_packed_float , EXT_packed_float , GLL, GLC, x , x , 2004) -EXT(EXT_packed_pixels , dummy_true , GLL, x , x , x , 1997) -EXT(EXT_pixel_buffer_object , dummy_true , GLL, GLC, x , x , 2004) -EXT(EXT_point_parameters , dummy_true , GLL, x , x , x , 1997) -EXT(EXT_polygon_offset_clamp , ARB_polygon_offset_clamp , GLL, GLC, ES1, ES2, 2014) -EXT(EXT_primitive_bounding_box , OES_primitive_bounding_box , x , x , x , 31, 2014) -EXT(EXT_provoking_vertex , EXT_provoking_vertex , GLL, GLC, x , x , 2009) -EXT(EXT_read_format_bgra , dummy_true , x , x , ES1, ES2, 2009) -EXT(EXT_render_snorm , EXT_render_snorm , x , x , x, 31, 2014) -EXT(EXT_rescale_normal , dummy_true , GLL, x , x , x , 1997) -EXT(EXT_robustness , KHR_robustness , x, x, x , ES2, 2011) -EXT(EXT_sRGB_write_control , EXT_framebuffer_sRGB , x, x , x , 30, 2013) -EXT(EXT_secondary_color , dummy_true , GLL, x , x , x , 1999) -EXT(EXT_semaphore , EXT_semaphore , GLL, GLC, x , ES2, 2017) -EXT(EXT_semaphore_fd , EXT_semaphore_fd , GLL, GLC, x , ES2, 2017) -EXT(EXT_semaphore_win32 , EXT_semaphore_win32 , GLL, GLC, x , ES2, 2017) -EXT(EXT_separate_shader_objects , dummy_true , x , x , x , ES2, 2013) -EXT(EXT_separate_specular_color , dummy_true , GLL, x , x , x , 1997) -EXT(EXT_shader_framebuffer_fetch , EXT_shader_framebuffer_fetch , GLL, GLC, x , ES2, 2013) -EXT(EXT_shader_framebuffer_fetch_non_coherent, EXT_shader_framebuffer_fetch_non_coherent, GLL, GLC, x, ES2, 2018) -EXT(EXT_shader_group_vote , ARB_shader_group_vote , x, x, x , 30, 2013) -EXT(EXT_shader_image_load_formatted , EXT_shader_image_load_formatted , GLL, GLC, x , x , 2014) -EXT(EXT_shader_image_load_store , EXT_shader_image_load_store , GLL, GLC, x , x , 2010) -EXT(EXT_shader_implicit_conversions , dummy_true , x , x , x , 31, 2013) -EXT(EXT_shader_integer_mix , EXT_shader_integer_mix , GLL, GLC, x , 30, 2013) -EXT(EXT_shader_io_blocks , dummy_true , x , x , x , 31, 2014) -EXT(EXT_shader_samples_identical , EXT_shader_samples_identical , GLL, GLC, x , 31, 2015) -EXT(EXT_shadow_funcs , ARB_shadow , GLL, x , x , x , 2002) -EXT(EXT_stencil_two_side , EXT_stencil_two_side , GLL, x , x , x , 2001) -EXT(EXT_stencil_wrap , dummy_true , GLL, x , x , x , 2002) -EXT(EXT_subtexture , dummy_true , GLL, x , x , x , 1995) -EXT(EXT_tessellation_point_size , ARB_tessellation_shader , x , x , x , 31, 2013) -EXT(EXT_tessellation_shader , ARB_tessellation_shader , x , x , x , 31, 2013) -EXT(EXT_texture , dummy_true , GLL, x , x , x , 1996) -EXT(EXT_texture3D , dummy_true , GLL, x , x , x , 1996) -EXT(EXT_texture_array , EXT_texture_array , GLL, GLC, x , x , 2006) -EXT(EXT_texture_border_clamp , dummy_true , x , x , x , ES2, 2014) -EXT(EXT_texture_buffer , OES_texture_buffer , x , x , x , 31, 2014) -EXT(EXT_texture_buffer_object , EXT_texture_buffer_object , GLL, x , x , x , 2007) -EXT(EXT_texture_compression_bptc , ARB_texture_compression_bptc , x , x , x , 30, 2017) -EXT(EXT_texture_compression_dxt1 , ANGLE_texture_compression_dxt , GLL, GLC, ES1, ES2, 2004) -EXT(EXT_texture_compression_latc , EXT_texture_compression_latc , GLL, x , x , x , 2006) -EXT(EXT_texture_compression_rgtc , ARB_texture_compression_rgtc , GLL, GLC, x , 30, 2004) -EXT(EXT_texture_compression_s3tc , EXT_texture_compression_s3tc , GLL, GLC, x , ES2, 2000) -EXT(EXT_texture_compression_s3tc_srgb , EXT_texture_compression_s3tc_srgb , x , x, x , ES2, 2016) -EXT(EXT_texture_cube_map , dummy_true , GLL, x , x , x , 2001) -EXT(EXT_texture_cube_map_array , OES_texture_cube_map_array , x , x , x , 31, 2014) -EXT(EXT_texture_edge_clamp , dummy_true , GLL, x , x , x , 1997) -EXT(EXT_texture_env_add , dummy_true , GLL, x , x , x , 1999) -EXT(EXT_texture_env_combine , dummy_true , GLL, x , x , x , 2000) -EXT(EXT_texture_env_dot3 , EXT_texture_env_dot3 , GLL, x , x , x , 2000) -EXT(EXT_texture_filter_anisotropic , EXT_texture_filter_anisotropic , GLL, GLC, ES1, ES2, 1999) -EXT(EXT_texture_filter_minmax , EXT_texture_filter_minmax , GLL, GLC, x , 30, 2015) -EXT(EXT_texture_format_BGRA8888 , dummy_true , x , x , ES1, ES2, 2005) -EXT(EXT_texture_integer , EXT_texture_integer , GLL, GLC, x , x , 2006) -EXT(EXT_texture_lod_bias , dummy_true , GLL, x , ES1, x , 1999) -EXT(EXT_texture_mirror_clamp , EXT_texture_mirror_clamp , GLL, GLC, x , x , 2004) -EXT(EXT_texture_mirror_clamp_to_edge , ARB_texture_mirror_clamp_to_edge , x , x , x , ES2, 2017) -EXT(EXT_texture_norm16 , EXT_texture_norm16 , x , x , x , 31, 2014) -EXT(EXT_texture_object , dummy_true , GLL, x , x , x , 1995) -EXT(EXT_texture_query_lod , ARB_texture_query_lod , x , x , x , 30, 2019) -EXT(EXT_texture_rectangle , NV_texture_rectangle , GLL, x , x , x , 2004) -EXT(EXT_texture_rg , ARB_texture_rg , x , x , x , ES2, 2011) -EXT(EXT_texture_sRGB , EXT_texture_sRGB , GLL, GLC, x , x , 2004) -EXT(EXT_texture_sRGB_R8 , EXT_texture_sRGB_R8 , GLL, GLC, x , 30, 2015) -EXT(EXT_texture_sRGB_RG8 , EXT_texture_sRGB_RG8 , GLL, GLC, x , 30, 2015) -EXT(EXT_texture_sRGB_decode , EXT_texture_sRGB_decode , GLL, GLC, x , 30, 2006) -EXT(EXT_texture_shadow_lod , EXT_texture_shadow_lod , GLL, GLC, x , 30, 2018) -EXT(EXT_texture_shared_exponent , EXT_texture_shared_exponent , GLL, GLC, x , x , 2004) -EXT(EXT_texture_snorm , EXT_texture_snorm , GLL, GLC, x , x , 2009) -EXT(EXT_texture_swizzle , EXT_texture_swizzle , GLL, GLC, x , x , 2008) -EXT(EXT_texture_type_2_10_10_10_REV , EXT_texture_type_2_10_10_10_REV , x , x , x , ES2, 2008) -EXT(EXT_texture_view , OES_texture_view , x , x , x , 31, 2014) -EXT(EXT_timer_query , EXT_timer_query , GLL, GLC, x , x , 2006) -EXT(EXT_transform_feedback , EXT_transform_feedback , GLL, GLC, x , x , 2011) -EXT(EXT_unpack_subimage , dummy_true , x , x , x , ES2, 2011) -EXT(EXT_vertex_array , dummy_true , GLL, x , x , x , 1995) -EXT(EXT_vertex_array_bgra , EXT_vertex_array_bgra , GLL, GLC, x , x , 2008) -EXT(EXT_vertex_attrib_64bit , ARB_vertex_attrib_64bit , 32, GLC, x , x , 2010) -EXT(EXT_window_rectangles , EXT_window_rectangles , GLL, GLC, x , 30, 2016) - -EXT(GREMEDY_string_marker , GREMEDY_string_marker , GLL, GLC, x , x , 2007) - -EXT(IBM_multimode_draw_arrays , dummy_true , GLL, GLC, x , x , 1998) -EXT(IBM_rasterpos_clip , dummy_true , GLL, x , x , x , 1996) -EXT(IBM_texture_mirrored_repeat , dummy_true , GLL, x , x , x , 1998) - -EXT(INGR_blend_func_separate , dummy_true , GLL, x , x , x , 1999) - -EXT(INTEL_blackhole_render , INTEL_blackhole_render , 30, 30, x , ES2, 2018) -EXT(INTEL_conservative_rasterization , INTEL_conservative_rasterization , x , GLC, x , 31, 2013) -EXT(INTEL_performance_query , INTEL_performance_query , GLL, GLC, x , ES2, 2013) -EXT(INTEL_shader_atomic_float_minmax , INTEL_shader_atomic_float_minmax , GLL, GLC, x , x , 2018) -EXT(INTEL_shader_integer_functions2 , INTEL_shader_integer_functions2 , GLL, GLC, x , x , 2018) - -EXT(KHR_blend_equation_advanced , KHR_blend_equation_advanced , GLL, GLC, x , ES2, 2014) -EXT(KHR_blend_equation_advanced_coherent , KHR_blend_equation_advanced_coherent , GLL, GLC, x , ES2, 2014) -EXT(KHR_context_flush_control , dummy_true , GLL, GLC, x , ES2, 2014) -EXT(KHR_debug , dummy_true , GLL, GLC, 11, ES2, 2012) -EXT(KHR_no_error , dummy_true , GLL, GLC, ES1, ES2, 2015) -EXT(KHR_parallel_shader_compile , dummy_true , GLL, GLC, x , ES2, 2017) -EXT(KHR_robust_buffer_access_behavior , ARB_robust_buffer_access_behavior , GLL, GLC, x , ES2, 2014) -EXT(KHR_robustness , KHR_robustness , GLL, GLC, x , ES2, 2012) -EXT(KHR_texture_compression_astc_hdr , KHR_texture_compression_astc_hdr , GLL, GLC, x , ES2, 2012) -EXT(KHR_texture_compression_astc_ldr , KHR_texture_compression_astc_ldr , GLL, GLC, x , ES2, 2012) -EXT(KHR_texture_compression_astc_sliced_3d , KHR_texture_compression_astc_sliced_3d , GLL, GLC, x , ES2, 2015) - -EXT(MESA_bgra , dummy_true , x , x , x , ES2, 2021) -EXT(MESA_framebuffer_flip_y , MESA_framebuffer_flip_y , 43, 43, x , 30, 2018) -EXT(MESA_pack_invert , MESA_pack_invert , GLL, GLC, x , x , 2002) -EXT(MESA_shader_integer_functions , MESA_shader_integer_functions , GLL, GLC, x , 30, 2016) -EXT(MESA_texture_signed_rgba , EXT_texture_snorm , GLL, GLC, x , x , 2009) -EXT(MESA_tile_raster_order , MESA_tile_raster_order , GLL, GLC, x , ES2, 2017) -EXT(MESA_window_pos , MESA_window_pos , GLL, x , x , x , 2000) -EXT(MESA_ycbcr_texture , MESA_ycbcr_texture , GLL, GLC, x , x , 2002) - -EXT(NVX_gpu_memory_info , NVX_gpu_memory_info , GLL, GLC, x , x , 2013) - -EXT(NV_ES1_1_compatibility , dummy_true , GLL, x , x , x , 2022) -EXT(NV_alpha_to_coverage_dither_control , NV_alpha_to_coverage_dither_control , GLL, GLC, x , ES2, 2017) -EXT(NV_blend_square , dummy_true , GLL, x , x , x , 1999) -EXT(NV_compute_shader_derivatives , NV_compute_shader_derivatives , GLL, GLC, x , 32, 2018) -EXT(NV_conditional_render , NV_conditional_render , GLL, GLC, x , ES2, 2008) -EXT(NV_conservative_raster , NV_conservative_raster , GLL, GLC, ES1, ES2, 2015) -EXT(NV_conservative_raster_dilate , NV_conservative_raster_dilate , GLL, GLC, ES1, ES2, 2015) -EXT(NV_conservative_raster_pre_snap , NV_conservative_raster_pre_snap , GLL, GLC, ES1, ES2, 2017) -EXT(NV_conservative_raster_pre_snap_triangles, NV_conservative_raster_pre_snap_triangles, GLL, GLC, ES1, ES2, 2015) -EXT(NV_copy_depth_to_color , NV_copy_depth_to_color , GLL, x , x , x, 2001) -EXT(NV_copy_image , NV_copy_image , GLL, GLC, x , x, 2009) -EXT(NV_depth_clamp , ARB_depth_clamp , GLL, GLC, x , x , 2001) -EXT(NV_draw_buffers , dummy_true , x , x , x , ES2, 2011) -EXT(NV_fbo_color_attachments , dummy_true , x , x , x , ES2, 2010) -EXT(NV_fill_rectangle , NV_fill_rectangle , GLL, GLC, x , x , 2015) -EXT(NV_fog_distance , NV_fog_distance , GLL, x , x , x , 2001) -EXT(NV_fragment_shader_interlock , ARB_fragment_shader_interlock , GLL, GLC, x , 31, 2015) -EXT(NV_generate_mipmap_sRGB , EXT_framebuffer_sRGB , x , x , ES1, ES2, 2012) -EXT(NV_half_float , ARB_half_float_vertex , GLL, x , x , x , 2001) -EXT(NV_image_formats , dummy_true , x , x , x , 31, 2014) -EXT(NV_light_max_exponent , dummy_true , GLL, x , x , x , 1999) -EXT(NV_pack_subimage , dummy_true , x , x , x , ES2, 2009) -EXT(NV_packed_depth_stencil , dummy_true , GLL, GLC, x , x , 2000) -EXT(NV_pixel_buffer_object , dummy_true , x , x , x , ES2, 2012) -EXT(NV_primitive_restart , NV_primitive_restart , GLL, x , x , x , 2002) -EXT(NV_read_buffer , dummy_true , x , x , x , ES2, 2011) -EXT(NV_read_depth , dummy_true , x , x , x , ES2, 2011) -EXT(NV_read_depth_stencil , dummy_true , x , x , x , ES2, 2011) -EXT(NV_read_stencil , dummy_true , x , x , x , ES2, 2011) -EXT(NV_sample_locations , ARB_sample_locations , GLL, GLC, x , ES2, 2015) -EXT(NV_shader_atomic_float , NV_shader_atomic_float , GLL, GLC, x , x , 2012) -EXT(NV_shader_atomic_int64 , NV_shader_atomic_int64 , GLL, GLC, x , x , 2014) -EXT(NV_shader_noperspective_interpolation , EXT_gpu_shader4 , x , x , x , 30, 2014) -EXT(NV_texgen_reflection , dummy_true , GLL, x , x , x , 1999) -EXT(NV_texture_barrier , NV_texture_barrier , GLL, GLC, x , x , 2009) -EXT(NV_texture_env_combine4 , NV_texture_env_combine4 , GLL, x , x , x , 1999) -EXT(NV_texture_rectangle , NV_texture_rectangle , GLL, x , x , x , 2000) -EXT(NV_vdpau_interop , NV_vdpau_interop , GLL, GLC, x , x , 2010) -EXT(NV_viewport_array2 , NV_viewport_array2 , GLL, GLC, x , 31, 2015) -EXT(NV_viewport_swizzle , NV_viewport_swizzle , GLL, GLC, x , 31, 2015) - -EXT(OES_EGL_image , OES_EGL_image , GLL, GLC, ES1, ES2, 2006) /* FIXME: Mesa expects GL_OES_EGL_image to be available in OpenGL contexts. */ -EXT(OES_EGL_image_external , OES_EGL_image_external , x , x , ES1, ES2, 2010) -EXT(OES_EGL_image_external_essl3 , OES_EGL_image_external , x , x , x , 30, 2015) -EXT(OES_EGL_sync , dummy_true , x , x , ES1, ES2, 2010) -EXT(OES_blend_equation_separate , EXT_blend_equation_separate , x , x , ES1, x , 2009) -EXT(OES_blend_func_separate , dummy_true , x , x , ES1, x , 2009) -EXT(OES_blend_subtract , dummy_true , x , x , ES1, x , 2009) -EXT(OES_byte_coordinates , dummy_true , x , x , ES1, x , 2002) -EXT(OES_compressed_ETC1_RGB8_texture , OES_compressed_ETC1_RGB8_texture , x , x , ES1, ES2, 2005) -EXT(OES_compressed_paletted_texture , dummy_true , x , x , ES1, x , 2003) -EXT(OES_copy_image , OES_copy_image , x , x , x , 30, 2014) -EXT(OES_depth24 , dummy_true , x , x , ES1, ES2, 2005) -EXT(OES_depth_texture , dummy_true , x , x , x , ES2, 2006) -EXT(OES_depth_texture_cube_map , OES_depth_texture_cube_map , x , x , x , ES2, 2012) -EXT(OES_draw_buffers_indexed , ARB_draw_buffers_blend , x , x , x , 30, 2014) -EXT(OES_draw_elements_base_vertex , ARB_draw_elements_base_vertex , x , x , x , ES2, 2014) -EXT(OES_draw_texture , OES_draw_texture , x , x , ES1, x , 2004) -EXT(OES_element_index_uint , dummy_true , x , x , ES1, ES2, 2005) -EXT(OES_fbo_render_mipmap , dummy_true , x , x , ES1, ES2, 2005) -EXT(OES_fixed_point , dummy_true , x , x , ES1, x , 2002) -EXT(OES_framebuffer_object , dummy_true , x , x , ES1, x , 2005) -EXT(OES_geometry_point_size , OES_geometry_shader , x , x , x , 31, 2015) -EXT(OES_geometry_shader , OES_geometry_shader , x , x , x , 31, 2015) -EXT(OES_get_program_binary , dummy_true , x , x , x , ES2, 2008) -EXT(OES_gpu_shader5 , ARB_gpu_shader5 , x , x , x , 31, 2014) -EXT(OES_mapbuffer , dummy_true , x , x , ES1, ES2, 2005) -EXT(OES_packed_depth_stencil , dummy_true , x , x , ES1, ES2, 2007) -EXT(OES_point_size_array , dummy_true , x , x , ES1, x , 2004) -EXT(OES_point_sprite , dummy_true , x , x , ES1, x , 2004) -EXT(OES_primitive_bounding_box , OES_primitive_bounding_box , x , x , x , 31, 2014) -EXT(OES_query_matrix , dummy_true , x , x , ES1, x , 2003) -EXT(OES_read_format , dummy_true , GLL, x , ES1, x , 2003) -EXT(OES_required_internalformat , dummy_true , x , x , ES1, ES2, 2012) -EXT(OES_rgb8_rgba8 , dummy_true , x , x , ES1, ES2, 2005) -EXT(OES_sample_shading , OES_sample_variables , x , x , x , 30, 2014) -EXT(OES_sample_variables , OES_sample_variables , x , x , x , 30, 2014) -EXT(OES_shader_image_atomic , dummy_true , x , x , x , 31, 2015) -EXT(OES_shader_io_blocks , dummy_true , x , x , x , 31, 2014) -EXT(OES_shader_multisample_interpolation , OES_sample_variables , x , x , x , 30, 2014) -EXT(OES_single_precision , dummy_true , x , x , ES1, x , 2003) -EXT(OES_standard_derivatives , OES_standard_derivatives , x , x , x , ES2, 2005) -EXT(OES_stencil8 , dummy_true , x , x , ES1, ES2, 2005) -EXT(OES_stencil_wrap , dummy_true , x , x , ES1, x , 2002) -EXT(OES_surfaceless_context , dummy_true , x , x , ES1, ES2, 2012) -EXT(OES_tessellation_point_size , ARB_tessellation_shader , x , x , x , 31, 2014) -EXT(OES_tessellation_shader , ARB_tessellation_shader , x , x , x , 31, 2014) -EXT(OES_texture_3D , OES_texture_3D , x , x , x , ES2, 2005) -EXT(OES_texture_border_clamp , dummy_true , x , x , x , ES2, 2014) -EXT(OES_texture_buffer , OES_texture_buffer , x , x , x , 31, 2014) -EXT(OES_texture_compression_astc , OES_texture_compression_astc , x , x , ES1, ES2, 2015) -EXT(OES_texture_cube_map , dummy_true , x , x , ES1, x , 2007) -EXT(OES_texture_cube_map_array , OES_texture_cube_map_array , x , x , x , 31, 2014) -EXT(OES_texture_env_crossbar , dummy_true , x , x , ES1, x , 2005) -EXT(OES_texture_float , OES_texture_float , x , x , x , ES2, 2005) -EXT(OES_texture_float_linear , OES_texture_float_linear , x , x , x , ES2, 2005) -EXT(OES_texture_half_float , OES_texture_half_float , x , x , x , ES2, 2005) -EXT(OES_texture_half_float_linear , OES_texture_half_float_linear , x , x , x , ES2, 2005) -EXT(OES_texture_mirrored_repeat , dummy_true , x , x , ES1, x , 2005) -EXT(OES_texture_npot , ARB_texture_non_power_of_two , x , x , ES1, ES2, 2005) -EXT(OES_texture_stencil8 , ARB_texture_stencil8 , x , x , x , 30, 2014) -EXT(OES_texture_storage_multisample_2d_array, ARB_texture_multisample , x , x , x , 31, 2014) -EXT(OES_texture_view , OES_texture_view , x , x , x , 31, 2014) -EXT(OES_vertex_array_object , dummy_true , x , x , ES1, ES2, 2010) -EXT(OES_vertex_half_float , ARB_half_float_vertex , x , x , x , ES2, 2005) -EXT(OES_viewport_array , OES_viewport_array , x , x , x , 31, 2010) - -EXT(S3_s3tc , ANGLE_texture_compression_dxt , GLL, GLC, x , x , 1999) - -EXT(SGIS_generate_mipmap , dummy_true , GLL, x , x , x , 1997) -EXT(SGIS_texture_border_clamp , dummy_true , GLL, x , x , x , 1997) -EXT(SGIS_texture_edge_clamp , dummy_true , GLL, x , x , x , 1997) -EXT(SGIS_texture_lod , dummy_true , GLL, x , x , x , 1997) - -EXT(SUN_multi_draw_arrays , dummy_true , GLL, x , x , x , 1999) -#undef GLL -#undef GLC -#undef ES1 -#undef ES2 -#undef x diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/formats.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/formats.h deleted file mode 100644 index 1cea58b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/formats.h +++ /dev/null @@ -1,745 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (c) 2008-2009 VMware, Inc. - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * Authors: - * Brian Paul - */ - - -#ifndef FORMATS_H -#define FORMATS_H - - -#include -#include -#include -//#include "../../gallium/include/pipe/p_format.h" -#include "../../util/u_endian.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * OpenGL doesn't have GL_UNSIGNED_BYTE_4_4, so we must define our own type - * for GL_LUMINANCE4_ALPHA4. - */ -#define MESA_UNSIGNED_BYTE_4_4 (GL_UNSIGNED_BYTE<<1) - - -/** - * Max number of bytes for any non-compressed pixel format below, or for - * intermediate pixel storage in Mesa. This should never be less than - * 16. Maybe 32 someday? - */ -#define MAX_PIXEL_BYTES 16 - -/** - * Specifies the layout of a pixel format. See the MESA_FORMAT - * documentation below. - */ -enum mesa_format_layout { - MESA_FORMAT_LAYOUT_ARRAY, - MESA_FORMAT_LAYOUT_PACKED, - MESA_FORMAT_LAYOUT_S3TC, - MESA_FORMAT_LAYOUT_RGTC, - MESA_FORMAT_LAYOUT_LATC, - MESA_FORMAT_LAYOUT_FXT1, - MESA_FORMAT_LAYOUT_ETC1, - MESA_FORMAT_LAYOUT_ETC2, - MESA_FORMAT_LAYOUT_BPTC, - MESA_FORMAT_LAYOUT_ASTC, - MESA_FORMAT_LAYOUT_ATC, - MESA_FORMAT_LAYOUT_OTHER, -}; - -/** - * An enum representing different possible swizzling values. This is used - * to interpret the output of _mesa_get_format_swizzle - */ -enum { - MESA_FORMAT_SWIZZLE_X = 0, - MESA_FORMAT_SWIZZLE_Y = 1, - MESA_FORMAT_SWIZZLE_Z = 2, - MESA_FORMAT_SWIZZLE_W = 3, - MESA_FORMAT_SWIZZLE_ZERO = 4, - MESA_FORMAT_SWIZZLE_ONE = 5, - MESA_FORMAT_SWIZZLE_NONE = 6, -}; - -/** - * An uint32_t that encodes the information necessary to represent an - * array format - */ -typedef uint32_t mesa_array_format; - -/** - * Encoding for valid array format data types - */ -enum mesa_array_format_datatype { - MESA_ARRAY_FORMAT_TYPE_UBYTE = 0x0, - MESA_ARRAY_FORMAT_TYPE_USHORT = 0x1, - MESA_ARRAY_FORMAT_TYPE_UINT = 0x2, - MESA_ARRAY_FORMAT_TYPE_BYTE = 0x4, - MESA_ARRAY_FORMAT_TYPE_SHORT = 0x5, - MESA_ARRAY_FORMAT_TYPE_INT = 0x6, - MESA_ARRAY_FORMAT_TYPE_HALF = 0xd, - MESA_ARRAY_FORMAT_TYPE_FLOAT = 0xe, -}; - -enum mesa_array_format_base_format { - MESA_ARRAY_FORMAT_BASE_FORMAT_RGBA_VARIANTS = 0x0, - MESA_ARRAY_FORMAT_BASE_FORMAT_DEPTH = 0x1, - MESA_ARRAY_FORMAT_BASE_FORMAT_STENCIL = 0x2, -}; - -/** - * An enum useful to encode/decode information stored in a mesa_array_format - */ -enum { - MESA_ARRAY_FORMAT_TYPE_IS_SIGNED = 0x4, - MESA_ARRAY_FORMAT_TYPE_IS_FLOAT = 0x8, - MESA_ARRAY_FORMAT_TYPE_NORMALIZED = 0x10, - MESA_ARRAY_FORMAT_DATATYPE_MASK = 0xf, - MESA_ARRAY_FORMAT_TYPE_MASK = 0x1f, - MESA_ARRAY_FORMAT_TYPE_SIZE_MASK = 0x3, - MESA_ARRAY_FORMAT_NUM_CHANS_MASK = 0xe0, - MESA_ARRAY_FORMAT_SWIZZLE_X_MASK = 0x00700, - MESA_ARRAY_FORMAT_SWIZZLE_Y_MASK = 0x03800, - MESA_ARRAY_FORMAT_SWIZZLE_Z_MASK = 0x1c000, - MESA_ARRAY_FORMAT_SWIZZLE_W_MASK = 0xe0000, - MESA_ARRAY_FORMAT_BASE_FORMAT_MASK = 0x300000, - MESA_ARRAY_FORMAT_BIT = 0x80000000 -}; - -#define MESA_ARRAY_FORMAT(BASE_FORMAT, SIZE, SIGNED, IS_FLOAT, NORM, NUM_CHANS, \ - SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_W) ( \ - (((SIZE >> 1) ) & MESA_ARRAY_FORMAT_TYPE_SIZE_MASK) | \ - (((SIGNED) << 2 ) & MESA_ARRAY_FORMAT_TYPE_IS_SIGNED) | \ - (((IS_FLOAT) << 3 ) & MESA_ARRAY_FORMAT_TYPE_IS_FLOAT) | \ - (((NORM) << 4 ) & MESA_ARRAY_FORMAT_TYPE_NORMALIZED) | \ - (((NUM_CHANS) << 5 ) & MESA_ARRAY_FORMAT_NUM_CHANS_MASK) | \ - (((SWIZZLE_X) << 8 ) & MESA_ARRAY_FORMAT_SWIZZLE_X_MASK) | \ - (((SWIZZLE_Y) << 11) & MESA_ARRAY_FORMAT_SWIZZLE_Y_MASK) | \ - (((SWIZZLE_Z) << 14) & MESA_ARRAY_FORMAT_SWIZZLE_Z_MASK) | \ - (((SWIZZLE_W) << 17) & MESA_ARRAY_FORMAT_SWIZZLE_W_MASK) | \ - (((BASE_FORMAT) << 20) & MESA_ARRAY_FORMAT_BASE_FORMAT_MASK) | \ - MESA_ARRAY_FORMAT_BIT) - -/** - * Various helpers to access the data encoded in a mesa_array_format - */ -static inline bool -_mesa_array_format_is_signed(mesa_array_format f) -{ - return (f & MESA_ARRAY_FORMAT_TYPE_IS_SIGNED) != 0; -} - -static inline bool -_mesa_array_format_is_float(mesa_array_format f) -{ - return (f & MESA_ARRAY_FORMAT_TYPE_IS_FLOAT) != 0; -} - -static inline bool -_mesa_array_format_is_normalized(mesa_array_format f) -{ - return (f & MESA_ARRAY_FORMAT_TYPE_NORMALIZED) !=0; -} - -static inline enum mesa_array_format_base_format -_mesa_array_format_get_base_format(mesa_array_format f) -{ - return (enum mesa_array_format_base_format) - ((f & MESA_ARRAY_FORMAT_BASE_FORMAT_MASK) >> 20); -} - -static inline enum mesa_array_format_datatype -_mesa_array_format_get_datatype(mesa_array_format f) -{ - return (enum mesa_array_format_datatype) - (f & MESA_ARRAY_FORMAT_DATATYPE_MASK); -} - -static inline int -_mesa_array_format_datatype_get_size(enum mesa_array_format_datatype type) -{ - return 1 << (type & MESA_ARRAY_FORMAT_TYPE_SIZE_MASK); -} - -static inline int -_mesa_array_format_get_type_size(mesa_array_format f) -{ - return 1 << (f & MESA_ARRAY_FORMAT_TYPE_SIZE_MASK); -} - -static inline int -_mesa_array_format_get_num_channels(mesa_array_format f) -{ - return (f & MESA_ARRAY_FORMAT_NUM_CHANS_MASK) >> 5; -} - -static inline void -_mesa_array_format_get_swizzle(mesa_array_format f, uint8_t *swizzle) -{ - swizzle[0] = (f & MESA_ARRAY_FORMAT_SWIZZLE_X_MASK) >> 8; - swizzle[1] = (f & MESA_ARRAY_FORMAT_SWIZZLE_Y_MASK) >> 11; - swizzle[2] = (f & MESA_ARRAY_FORMAT_SWIZZLE_Z_MASK) >> 14; - swizzle[3] = (f & MESA_ARRAY_FORMAT_SWIZZLE_W_MASK) >> 17; -} - -static inline void -_mesa_array_format_set_swizzle(mesa_array_format *f, - int32_t x, int32_t y, int32_t z, int32_t w) -{ - *f &= ~(MESA_ARRAY_FORMAT_SWIZZLE_X_MASK | - MESA_ARRAY_FORMAT_SWIZZLE_Y_MASK | - MESA_ARRAY_FORMAT_SWIZZLE_Z_MASK | - MESA_ARRAY_FORMAT_SWIZZLE_W_MASK); - - *f |= ((x << 8 ) & MESA_ARRAY_FORMAT_SWIZZLE_X_MASK) | - ((y << 11) & MESA_ARRAY_FORMAT_SWIZZLE_Y_MASK) | - ((z << 14) & MESA_ARRAY_FORMAT_SWIZZLE_Z_MASK) | - ((w << 17) & MESA_ARRAY_FORMAT_SWIZZLE_W_MASK); -} - -/** - * A helper to know if the format stored in a uint32_t is a mesa_format - * or a mesa_array_format - */ -static inline bool -_mesa_format_is_mesa_array_format(uint32_t f) -{ - return (f & MESA_ARRAY_FORMAT_BIT) != 0; -} - -/** - * Mesa texture/renderbuffer image formats. These are just other names of the - * gallium p_format.h formats. - */ -typedef enum pipe_format mesa_format; - - /** - * \name Basic hardware formats - * - * The mesa format name specification is as follows: - * - * There shall be 3 naming format base types: those for component array - * formats (type A); those for compressed formats (type C); and those for - * packed component formats (type P). With type A formats, color component - * order does not change with endianess. Each format name shall begin with - * MESA_FORMAT_, followed by a component label (from the Component Label - * list below) for each component in the order that the component(s) occur - * in the format, except for non-linear color formats where the first - * letter shall be 'S'. For type P formats, each component label is - * followed by the number of bits that represent it in the fundamental - * data type used by the format. - * - * Following the listing of the component labels shall be an underscore; a - * compression type followed by an underscore for Type C formats only; a - * storage type from the list below; and a bit with for type A formats, - * which is the bit width for each array element. - * - * - * ---------- Format Base Type A: Array ---------- - * MESA_FORMAT_[component list]_[storage type][array element bit width] - * - * examples: - * MESA_FORMAT_A_SNORM8 - uchar[i] = A - * MESA_FORMAT_RGBA_16 - ushort[i * 4 + 0] = R, ushort[i * 4 + 1] = G, - * ushort[i * 4 + 2] = B, ushort[i * 4 + 3] = A - * MESA_FORMAT_Z_UNORM32 - float[i] = Z - * - * - * - * ---------- Format Base Type C: Compressed ---------- - * MESA_FORMAT_[component list*][_*][compression type][storage type*] - * * where required - * - * examples: - * MESA_FORMAT_RGB_ETC1 - * MESA_FORMAT_RGBA_ETC2 - * MESA_FORMAT_LATC1_UNORM - * MESA_FORMAT_RGBA_FXT1 - * - * - * - * ---------- Format Base Type P: Packed ---------- - * MESA_FORMAT_[[component list,bit width][storage type*][_]][_][storage type**] - * * when type differs between component - * ** when type applies to all components - * - * examples: msb <------ TEXEL BITS -----------> lsb - * MESA_FORMAT_A8B8G8R8_UNORM, RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA - * MESA_FORMAT_R5G6B5_UNORM BBBB BGGG GGGR RRRR - * MESA_FORMAT_B4G4R4X4_UNORM XXXX RRRR GGGG BBBB - * MESA_FORMAT_Z32_FLOAT_S8X24_UINT - * MESA_FORMAT_R10G10B10A2_UINT - * MESA_FORMAT_R9G9B9E5_FLOAT - * - * - * - * ---------- Component Labels: ---------- - * A - Alpha - * B - Blue - * DU - Delta U - * DV - Delta V - * E - Shared Exponent - * G - Green - * I - Intensity - * L - Luminance - * R - Red - * S - Stencil (when not followed by RGB or RGBA) - * U - Chrominance - * V - Chrominance - * Y - Luma - * X - Packing bits - * Z - Depth - * - * - * - * ---------- Type C Compression Types: ---------- - * DXT1 - Color component labels shall be given - * DXT3 - Color component labels shall be given - * DXT5 - Color component labels shall be given - * ETC1 - No other information required - * ETC2 - No other information required - * FXT1 - Color component labels shall be given - * FXT3 - Color component labels shall be given - * LATC1 - Fundamental data type shall be given - * LATC2 - Fundamental data type shall be given - * RGTC1 - Color component labels and data type shall be given - * RGTC2 - Color component labels and data type shall be given - * - * - * - * ---------- Storage Types: ---------- - * FLOAT - * SINT - * UINT - * SNORM - * UNORM - * SRGB - RGB components, or L are UNORMs in sRGB color space. - * Alpha, if present is linear. - * - */ - -#define MESA_FORMAT_NONE PIPE_FORMAT_NONE -#define MESA_FORMAT_A8B8G8R8_UNORM PIPE_FORMAT_ABGR8888_UNORM -#define MESA_FORMAT_X8B8G8R8_UNORM PIPE_FORMAT_XBGR8888_UNORM -#define MESA_FORMAT_R8G8B8A8_UNORM PIPE_FORMAT_RGBA8888_UNORM -#define MESA_FORMAT_R8G8B8X8_UNORM PIPE_FORMAT_RGBX8888_UNORM -#define MESA_FORMAT_B8G8R8A8_UNORM PIPE_FORMAT_BGRA8888_UNORM -#define MESA_FORMAT_B8G8R8X8_UNORM PIPE_FORMAT_BGRX8888_UNORM -#define MESA_FORMAT_A8R8G8B8_UNORM PIPE_FORMAT_ARGB8888_UNORM -#define MESA_FORMAT_X8R8G8B8_UNORM PIPE_FORMAT_XRGB8888_UNORM -#define MESA_FORMAT_B5G6R5_UNORM PIPE_FORMAT_B5G6R5_UNORM -#define MESA_FORMAT_R5G6B5_UNORM PIPE_FORMAT_R5G6B5_UNORM -#define MESA_FORMAT_B4G4R4A4_UNORM PIPE_FORMAT_B4G4R4A4_UNORM -#define MESA_FORMAT_B4G4R4X4_UNORM PIPE_FORMAT_B4G4R4X4_UNORM -#define MESA_FORMAT_A4R4G4B4_UNORM PIPE_FORMAT_A4R4G4B4_UNORM -#define MESA_FORMAT_A1B5G5R5_UNORM PIPE_FORMAT_A1B5G5R5_UNORM -#define MESA_FORMAT_X1B5G5R5_UNORM PIPE_FORMAT_X1B5G5R5_UNORM -#define MESA_FORMAT_B5G5R5A1_UNORM PIPE_FORMAT_B5G5R5A1_UNORM -#define MESA_FORMAT_B5G5R5X1_UNORM PIPE_FORMAT_B5G5R5X1_UNORM -#define MESA_FORMAT_A1R5G5B5_UNORM PIPE_FORMAT_A1R5G5B5_UNORM -#define MESA_FORMAT_L4A4_UNORM PIPE_FORMAT_L4A4_UNORM -#define MESA_FORMAT_B2G3R3_UNORM PIPE_FORMAT_B2G3R3_UNORM -#define MESA_FORMAT_B10G10R10A2_UNORM PIPE_FORMAT_B10G10R10A2_UNORM -#define MESA_FORMAT_B10G10R10X2_UNORM PIPE_FORMAT_B10G10R10X2_UNORM -#define MESA_FORMAT_R10G10B10A2_UNORM PIPE_FORMAT_R10G10B10A2_UNORM -#define MESA_FORMAT_R10G10B10X2_UNORM PIPE_FORMAT_R10G10B10X2_UNORM -#define MESA_FORMAT_S8_UINT_Z24_UNORM PIPE_FORMAT_S8_UINT_Z24_UNORM -#define MESA_FORMAT_X8_UINT_Z24_UNORM PIPE_FORMAT_X8Z24_UNORM -#define MESA_FORMAT_Z24_UNORM_S8_UINT PIPE_FORMAT_Z24_UNORM_S8_UINT -#define MESA_FORMAT_Z24_UNORM_X8_UINT PIPE_FORMAT_Z24X8_UNORM -#define MESA_FORMAT_R3G3B2_UNORM PIPE_FORMAT_R3G3B2_UNORM -#define MESA_FORMAT_A4B4G4R4_UNORM PIPE_FORMAT_A4B4G4R4_UNORM -#define MESA_FORMAT_R4G4B4A4_UNORM PIPE_FORMAT_R4G4B4A4_UNORM -#define MESA_FORMAT_R5G5B5A1_UNORM PIPE_FORMAT_R5G5B5A1_UNORM -#define MESA_FORMAT_A2B10G10R10_UNORM PIPE_FORMAT_A2B10G10R10_UNORM -#define MESA_FORMAT_A2R10G10B10_UNORM PIPE_FORMAT_A2R10G10B10_UNORM -#define MESA_FORMAT_YCBCR PIPE_FORMAT_UYVY -#define MESA_FORMAT_YCBCR_REV PIPE_FORMAT_YUYV -#define MESA_FORMAT_A_UNORM8 PIPE_FORMAT_A8_UNORM -#define MESA_FORMAT_A_UNORM16 PIPE_FORMAT_A16_UNORM -#define MESA_FORMAT_L_UNORM8 PIPE_FORMAT_L8_UNORM -#define MESA_FORMAT_L_UNORM16 PIPE_FORMAT_L16_UNORM -#define MESA_FORMAT_LA_UNORM8 PIPE_FORMAT_L8A8_UNORM -#define MESA_FORMAT_LA_UNORM16 PIPE_FORMAT_L16A16_UNORM -#define MESA_FORMAT_I_UNORM8 PIPE_FORMAT_I8_UNORM -#define MESA_FORMAT_I_UNORM16 PIPE_FORMAT_I16_UNORM -#define MESA_FORMAT_R_UNORM8 PIPE_FORMAT_R8_UNORM -#define MESA_FORMAT_R_UNORM16 PIPE_FORMAT_R16_UNORM -#define MESA_FORMAT_RG_UNORM8 PIPE_FORMAT_R8G8_UNORM -#define MESA_FORMAT_RG_UNORM16 PIPE_FORMAT_R16G16_UNORM -#define MESA_FORMAT_BGR_UNORM8 PIPE_FORMAT_B8G8R8_UNORM -#define MESA_FORMAT_RGB_UNORM8 PIPE_FORMAT_R8G8B8_UNORM -#define MESA_FORMAT_RGBA_UNORM16 PIPE_FORMAT_R16G16B16A16_UNORM -#define MESA_FORMAT_RGBX_UNORM16 PIPE_FORMAT_R16G16B16X16_UNORM -#define MESA_FORMAT_Z_UNORM16 PIPE_FORMAT_Z16_UNORM -#define MESA_FORMAT_Z_UNORM32 PIPE_FORMAT_Z32_UNORM -#define MESA_FORMAT_S_UINT8 PIPE_FORMAT_S8_UINT -#define MESA_FORMAT_A8B8G8R8_SNORM PIPE_FORMAT_ABGR8888_SNORM -#define MESA_FORMAT_X8B8G8R8_SNORM PIPE_FORMAT_XBGR8888_SNORM -#define MESA_FORMAT_R8G8B8A8_SNORM PIPE_FORMAT_RGBA8888_SNORM -#define MESA_FORMAT_R8G8B8X8_SNORM PIPE_FORMAT_RGBX8888_SNORM -#define MESA_FORMAT_A_SNORM8 PIPE_FORMAT_A8_SNORM -#define MESA_FORMAT_A_SNORM16 PIPE_FORMAT_A16_SNORM -#define MESA_FORMAT_L_SNORM8 PIPE_FORMAT_L8_SNORM -#define MESA_FORMAT_L_SNORM16 PIPE_FORMAT_L16_SNORM -#define MESA_FORMAT_I_SNORM8 PIPE_FORMAT_I8_SNORM -#define MESA_FORMAT_I_SNORM16 PIPE_FORMAT_I16_SNORM -#define MESA_FORMAT_R_SNORM8 PIPE_FORMAT_R8_SNORM -#define MESA_FORMAT_R_SNORM16 PIPE_FORMAT_R16_SNORM -#define MESA_FORMAT_LA_SNORM8 PIPE_FORMAT_L8A8_SNORM -#define MESA_FORMAT_LA_SNORM16 PIPE_FORMAT_L16A16_SNORM -#define MESA_FORMAT_RG_SNORM8 PIPE_FORMAT_R8G8_SNORM -#define MESA_FORMAT_RG_SNORM16 PIPE_FORMAT_R16G16_SNORM -#define MESA_FORMAT_RGB_SNORM16 PIPE_FORMAT_R16G16B16_SNORM -#define MESA_FORMAT_RGBA_SNORM16 PIPE_FORMAT_R16G16B16A16_SNORM -#define MESA_FORMAT_RGBX_SNORM16 PIPE_FORMAT_R16G16B16X16_SNORM -#define MESA_FORMAT_A8B8G8R8_SRGB PIPE_FORMAT_ABGR8888_SRGB -#define MESA_FORMAT_B8G8R8A8_SRGB PIPE_FORMAT_BGRA8888_SRGB -#define MESA_FORMAT_A8R8G8B8_SRGB PIPE_FORMAT_ARGB8888_SRGB -#define MESA_FORMAT_B8G8R8X8_SRGB PIPE_FORMAT_BGRX8888_SRGB -#define MESA_FORMAT_X8R8G8B8_SRGB PIPE_FORMAT_XRGB8888_SRGB -#define MESA_FORMAT_R8G8B8A8_SRGB PIPE_FORMAT_RGBA8888_SRGB -#define MESA_FORMAT_R8G8B8X8_SRGB PIPE_FORMAT_RGBX8888_SRGB -#define MESA_FORMAT_X8B8G8R8_SRGB PIPE_FORMAT_XBGR8888_SRGB -#define MESA_FORMAT_R_SRGB8 PIPE_FORMAT_R8_SRGB -#define MESA_FORMAT_L_SRGB8 PIPE_FORMAT_L8_SRGB -#define MESA_FORMAT_LA_SRGB8 PIPE_FORMAT_L8A8_SRGB -#define MESA_FORMAT_BGR_SRGB8 PIPE_FORMAT_R8G8B8_SRGB -#define MESA_FORMAT_R9G9B9E5_FLOAT PIPE_FORMAT_R9G9B9E5_FLOAT -#define MESA_FORMAT_R11G11B10_FLOAT PIPE_FORMAT_R11G11B10_FLOAT -#define MESA_FORMAT_Z32_FLOAT_S8X24_UINT PIPE_FORMAT_Z32_FLOAT_S8X24_UINT -#define MESA_FORMAT_A_FLOAT16 PIPE_FORMAT_A16_FLOAT -#define MESA_FORMAT_A_FLOAT32 PIPE_FORMAT_A32_FLOAT -#define MESA_FORMAT_L_FLOAT16 PIPE_FORMAT_L16_FLOAT -#define MESA_FORMAT_L_FLOAT32 PIPE_FORMAT_L32_FLOAT -#define MESA_FORMAT_LA_FLOAT16 PIPE_FORMAT_L16A16_FLOAT -#define MESA_FORMAT_LA_FLOAT32 PIPE_FORMAT_L32A32_FLOAT -#define MESA_FORMAT_I_FLOAT16 PIPE_FORMAT_I16_FLOAT -#define MESA_FORMAT_I_FLOAT32 PIPE_FORMAT_I32_FLOAT -#define MESA_FORMAT_R_FLOAT16 PIPE_FORMAT_R16_FLOAT -#define MESA_FORMAT_R_FLOAT32 PIPE_FORMAT_R32_FLOAT -#define MESA_FORMAT_RG_FLOAT16 PIPE_FORMAT_R16G16_FLOAT -#define MESA_FORMAT_RG_FLOAT32 PIPE_FORMAT_R32G32_FLOAT -#define MESA_FORMAT_RGB_FLOAT16 PIPE_FORMAT_R16G16B16_FLOAT -#define MESA_FORMAT_RGB_FLOAT32 PIPE_FORMAT_R32G32B32_FLOAT -#define MESA_FORMAT_RGBA_FLOAT16 PIPE_FORMAT_R16G16B16A16_FLOAT -#define MESA_FORMAT_RGBA_FLOAT32 PIPE_FORMAT_R32G32B32A32_FLOAT -#define MESA_FORMAT_RGBX_FLOAT16 PIPE_FORMAT_R16G16B16X16_FLOAT -#define MESA_FORMAT_RGBX_FLOAT32 PIPE_FORMAT_R32G32B32X32_FLOAT -#define MESA_FORMAT_Z_FLOAT32 PIPE_FORMAT_Z32_FLOAT -#define MESA_FORMAT_A8B8G8R8_UINT PIPE_FORMAT_ABGR8888_UINT -#define MESA_FORMAT_A8R8G8B8_UINT PIPE_FORMAT_ARGB8888_UINT -#define MESA_FORMAT_R8G8B8A8_UINT PIPE_FORMAT_RGBA8888_UINT -#define MESA_FORMAT_B8G8R8A8_UINT PIPE_FORMAT_BGRA8888_UINT -#define MESA_FORMAT_B10G10R10A2_UINT PIPE_FORMAT_B10G10R10A2_UINT -#define MESA_FORMAT_R10G10B10A2_UINT PIPE_FORMAT_R10G10B10A2_UINT -#define MESA_FORMAT_A2B10G10R10_UINT PIPE_FORMAT_A2B10G10R10_UINT -#define MESA_FORMAT_A2R10G10B10_UINT PIPE_FORMAT_A2R10G10B10_UINT -#define MESA_FORMAT_B5G6R5_UINT PIPE_FORMAT_B5G6R5_UINT -#define MESA_FORMAT_R5G6B5_UINT PIPE_FORMAT_R5G6B5_UINT -#define MESA_FORMAT_B2G3R3_UINT PIPE_FORMAT_B2G3R3_UINT -#define MESA_FORMAT_R3G3B2_UINT PIPE_FORMAT_R3G3B2_UINT -#define MESA_FORMAT_A4B4G4R4_UINT PIPE_FORMAT_A4B4G4R4_UINT -#define MESA_FORMAT_R4G4B4A4_UINT PIPE_FORMAT_R4G4B4A4_UINT -#define MESA_FORMAT_B4G4R4A4_UINT PIPE_FORMAT_B4G4R4A4_UINT -#define MESA_FORMAT_A4R4G4B4_UINT PIPE_FORMAT_A4R4G4B4_UINT -#define MESA_FORMAT_A1B5G5R5_UINT PIPE_FORMAT_A1B5G5R5_UINT -#define MESA_FORMAT_B5G5R5A1_UINT PIPE_FORMAT_B5G5R5A1_UINT -#define MESA_FORMAT_A1R5G5B5_UINT PIPE_FORMAT_A1R5G5B5_UINT -#define MESA_FORMAT_R5G5B5A1_UINT PIPE_FORMAT_R5G5B5A1_UINT -#define MESA_FORMAT_A_UINT8 PIPE_FORMAT_A8_UINT -#define MESA_FORMAT_A_UINT16 PIPE_FORMAT_A16_UINT -#define MESA_FORMAT_A_UINT32 PIPE_FORMAT_A32_UINT -#define MESA_FORMAT_A_SINT8 PIPE_FORMAT_A8_SINT -#define MESA_FORMAT_A_SINT16 PIPE_FORMAT_A16_SINT -#define MESA_FORMAT_A_SINT32 PIPE_FORMAT_A32_SINT -#define MESA_FORMAT_I_UINT8 PIPE_FORMAT_I8_UINT -#define MESA_FORMAT_I_UINT16 PIPE_FORMAT_I16_UINT -#define MESA_FORMAT_I_UINT32 PIPE_FORMAT_I32_UINT -#define MESA_FORMAT_I_SINT8 PIPE_FORMAT_I8_SINT -#define MESA_FORMAT_I_SINT16 PIPE_FORMAT_I16_SINT -#define MESA_FORMAT_I_SINT32 PIPE_FORMAT_I32_SINT -#define MESA_FORMAT_L_UINT8 PIPE_FORMAT_L8_UINT -#define MESA_FORMAT_L_UINT16 PIPE_FORMAT_L16_UINT -#define MESA_FORMAT_L_UINT32 PIPE_FORMAT_L32_UINT -#define MESA_FORMAT_L_SINT8 PIPE_FORMAT_L8_SINT -#define MESA_FORMAT_L_SINT16 PIPE_FORMAT_L16_SINT -#define MESA_FORMAT_L_SINT32 PIPE_FORMAT_L32_SINT -#define MESA_FORMAT_LA_UINT8 PIPE_FORMAT_L8A8_UINT -#define MESA_FORMAT_LA_UINT16 PIPE_FORMAT_L16A16_UINT -#define MESA_FORMAT_LA_UINT32 PIPE_FORMAT_L32A32_UINT -#define MESA_FORMAT_LA_SINT8 PIPE_FORMAT_L8A8_SINT -#define MESA_FORMAT_LA_SINT16 PIPE_FORMAT_L16A16_SINT -#define MESA_FORMAT_LA_SINT32 PIPE_FORMAT_L32A32_SINT -#define MESA_FORMAT_R_UINT8 PIPE_FORMAT_R8_UINT -#define MESA_FORMAT_R_UINT16 PIPE_FORMAT_R16_UINT -#define MESA_FORMAT_R_UINT32 PIPE_FORMAT_R32_UINT -#define MESA_FORMAT_R_SINT8 PIPE_FORMAT_R8_SINT -#define MESA_FORMAT_R_SINT16 PIPE_FORMAT_R16_SINT -#define MESA_FORMAT_R_SINT32 PIPE_FORMAT_R32_SINT -#define MESA_FORMAT_RG_UINT8 PIPE_FORMAT_R8G8_UINT -#define MESA_FORMAT_RG_UINT16 PIPE_FORMAT_R16G16_UINT -#define MESA_FORMAT_RG_UINT32 PIPE_FORMAT_R32G32_UINT -#define MESA_FORMAT_RG_SINT8 PIPE_FORMAT_R8G8_SINT -#define MESA_FORMAT_RG_SINT16 PIPE_FORMAT_R16G16_SINT -#define MESA_FORMAT_RG_SINT32 PIPE_FORMAT_R32G32_SINT -#define MESA_FORMAT_RGB_UINT8 PIPE_FORMAT_R8G8B8_UINT -#define MESA_FORMAT_RGB_UINT16 PIPE_FORMAT_R16G16B16_UINT -#define MESA_FORMAT_RGB_UINT32 PIPE_FORMAT_R32G32B32_UINT -#define MESA_FORMAT_RGB_SINT8 PIPE_FORMAT_R8G8B8_SINT -#define MESA_FORMAT_RGB_SINT16 PIPE_FORMAT_R16G16B16_SINT -#define MESA_FORMAT_RGB_SINT32 PIPE_FORMAT_R32G32B32_SINT -#define MESA_FORMAT_RGBA_UINT16 PIPE_FORMAT_R16G16B16A16_UINT -#define MESA_FORMAT_RGBA_UINT32 PIPE_FORMAT_R32G32B32A32_UINT -#define MESA_FORMAT_RGBA_SINT8 PIPE_FORMAT_R8G8B8A8_SINT -#define MESA_FORMAT_RGBA_SINT16 PIPE_FORMAT_R16G16B16A16_SINT -#define MESA_FORMAT_RGBA_SINT32 PIPE_FORMAT_R32G32B32A32_SINT -#define MESA_FORMAT_RGBX_UINT8 PIPE_FORMAT_R8G8B8X8_UINT -#define MESA_FORMAT_RGBX_UINT16 PIPE_FORMAT_R16G16B16X16_UINT -#define MESA_FORMAT_RGBX_UINT32 PIPE_FORMAT_R32G32B32X32_UINT -#define MESA_FORMAT_RGBX_SINT8 PIPE_FORMAT_R8G8B8X8_SINT -#define MESA_FORMAT_RGBX_SINT16 PIPE_FORMAT_R16G16B16X16_SINT -#define MESA_FORMAT_RGBX_SINT32 PIPE_FORMAT_R32G32B32X32_SINT -#define MESA_FORMAT_RGB_DXT1 PIPE_FORMAT_DXT1_RGB -#define MESA_FORMAT_RGBA_DXT1 PIPE_FORMAT_DXT1_RGBA -#define MESA_FORMAT_RGBA_DXT3 PIPE_FORMAT_DXT3_RGBA -#define MESA_FORMAT_RGBA_DXT5 PIPE_FORMAT_DXT5_RGBA -#define MESA_FORMAT_SRGB_DXT1 PIPE_FORMAT_DXT1_SRGB -#define MESA_FORMAT_SRGBA_DXT1 PIPE_FORMAT_DXT1_SRGBA -#define MESA_FORMAT_SRGBA_DXT3 PIPE_FORMAT_DXT3_SRGBA -#define MESA_FORMAT_SRGBA_DXT5 PIPE_FORMAT_DXT5_SRGBA -#define MESA_FORMAT_RGB_FXT1 PIPE_FORMAT_FXT1_RGB -#define MESA_FORMAT_RGBA_FXT1 PIPE_FORMAT_FXT1_RGBA -#define MESA_FORMAT_R_RGTC1_UNORM PIPE_FORMAT_RGTC1_UNORM -#define MESA_FORMAT_R_RGTC1_SNORM PIPE_FORMAT_RGTC1_SNORM -#define MESA_FORMAT_RG_RGTC2_UNORM PIPE_FORMAT_RGTC2_UNORM -#define MESA_FORMAT_RG_RGTC2_SNORM PIPE_FORMAT_RGTC2_SNORM -#define MESA_FORMAT_L_LATC1_UNORM PIPE_FORMAT_LATC1_UNORM -#define MESA_FORMAT_L_LATC1_SNORM PIPE_FORMAT_LATC1_SNORM -#define MESA_FORMAT_LA_LATC2_UNORM PIPE_FORMAT_LATC2_UNORM -#define MESA_FORMAT_LA_LATC2_SNORM PIPE_FORMAT_LATC2_SNORM -#define MESA_FORMAT_ETC1_RGB8 PIPE_FORMAT_ETC1_RGB8 -#define MESA_FORMAT_ETC2_RGB8 PIPE_FORMAT_ETC2_RGB8 -#define MESA_FORMAT_ETC2_SRGB8 PIPE_FORMAT_ETC2_SRGB8 -#define MESA_FORMAT_ETC2_RGBA8_EAC PIPE_FORMAT_ETC2_RGBA8 -#define MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC PIPE_FORMAT_ETC2_SRGBA8 -#define MESA_FORMAT_ETC2_R11_EAC PIPE_FORMAT_ETC2_R11_UNORM -#define MESA_FORMAT_ETC2_RG11_EAC PIPE_FORMAT_ETC2_RG11_UNORM -#define MESA_FORMAT_ETC2_SIGNED_R11_EAC PIPE_FORMAT_ETC2_R11_SNORM -#define MESA_FORMAT_ETC2_SIGNED_RG11_EAC PIPE_FORMAT_ETC2_RG11_SNORM -#define MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1 PIPE_FORMAT_ETC2_RGB8A1 -#define MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1 PIPE_FORMAT_ETC2_SRGB8A1 -#define MESA_FORMAT_BPTC_RGBA_UNORM PIPE_FORMAT_BPTC_RGBA_UNORM -#define MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM PIPE_FORMAT_BPTC_SRGBA -#define MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT PIPE_FORMAT_BPTC_RGB_FLOAT -#define MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT PIPE_FORMAT_BPTC_RGB_UFLOAT -#define MESA_FORMAT_RGBA_ASTC_4x4 PIPE_FORMAT_ASTC_4x4 -#define MESA_FORMAT_RGBA_ASTC_5x4 PIPE_FORMAT_ASTC_5x4 -#define MESA_FORMAT_RGBA_ASTC_5x5 PIPE_FORMAT_ASTC_5x5 -#define MESA_FORMAT_RGBA_ASTC_6x5 PIPE_FORMAT_ASTC_6x5 -#define MESA_FORMAT_RGBA_ASTC_6x6 PIPE_FORMAT_ASTC_6x6 -#define MESA_FORMAT_RGBA_ASTC_8x5 PIPE_FORMAT_ASTC_8x5 -#define MESA_FORMAT_RGBA_ASTC_8x6 PIPE_FORMAT_ASTC_8x6 -#define MESA_FORMAT_RGBA_ASTC_8x8 PIPE_FORMAT_ASTC_8x8 -#define MESA_FORMAT_RGBA_ASTC_10x5 PIPE_FORMAT_ASTC_10x5 -#define MESA_FORMAT_RGBA_ASTC_10x6 PIPE_FORMAT_ASTC_10x6 -#define MESA_FORMAT_RGBA_ASTC_10x8 PIPE_FORMAT_ASTC_10x8 -#define MESA_FORMAT_RGBA_ASTC_10x10 PIPE_FORMAT_ASTC_10x10 -#define MESA_FORMAT_RGBA_ASTC_12x10 PIPE_FORMAT_ASTC_12x10 -#define MESA_FORMAT_RGBA_ASTC_12x12 PIPE_FORMAT_ASTC_12x12 -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4 PIPE_FORMAT_ASTC_4x4_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4 PIPE_FORMAT_ASTC_5x4_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5 PIPE_FORMAT_ASTC_5x5_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5 PIPE_FORMAT_ASTC_6x5_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6 PIPE_FORMAT_ASTC_6x6_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5 PIPE_FORMAT_ASTC_8x5_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6 PIPE_FORMAT_ASTC_8x6_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8 PIPE_FORMAT_ASTC_8x8_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5 PIPE_FORMAT_ASTC_10x5_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6 PIPE_FORMAT_ASTC_10x6_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8 PIPE_FORMAT_ASTC_10x8_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10 PIPE_FORMAT_ASTC_10x10_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10 PIPE_FORMAT_ASTC_12x10_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12 PIPE_FORMAT_ASTC_12x12_SRGB -#define MESA_FORMAT_RGBA_ASTC_3x3x3 PIPE_FORMAT_ASTC_3x3x3 -#define MESA_FORMAT_RGBA_ASTC_4x3x3 PIPE_FORMAT_ASTC_4x3x3 -#define MESA_FORMAT_RGBA_ASTC_4x4x3 PIPE_FORMAT_ASTC_4x4x3 -#define MESA_FORMAT_RGBA_ASTC_4x4x4 PIPE_FORMAT_ASTC_4x4x4 -#define MESA_FORMAT_RGBA_ASTC_5x4x4 PIPE_FORMAT_ASTC_5x4x4 -#define MESA_FORMAT_RGBA_ASTC_5x5x4 PIPE_FORMAT_ASTC_5x5x4 -#define MESA_FORMAT_RGBA_ASTC_5x5x5 PIPE_FORMAT_ASTC_5x5x5 -#define MESA_FORMAT_RGBA_ASTC_6x5x5 PIPE_FORMAT_ASTC_6x5x5 -#define MESA_FORMAT_RGBA_ASTC_6x6x5 PIPE_FORMAT_ASTC_6x6x5 -#define MESA_FORMAT_RGBA_ASTC_6x6x6 PIPE_FORMAT_ASTC_6x6x6 -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_3x3x3 PIPE_FORMAT_ASTC_3x3x3_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x3x3 PIPE_FORMAT_ASTC_4x3x3_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x3 PIPE_FORMAT_ASTC_4x4x3_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4x4 PIPE_FORMAT_ASTC_4x4x4_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4x4 PIPE_FORMAT_ASTC_5x4x4_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x4 PIPE_FORMAT_ASTC_5x5x4_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5x5 PIPE_FORMAT_ASTC_5x5x5_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5x5 PIPE_FORMAT_ASTC_6x5x5_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x5 PIPE_FORMAT_ASTC_6x6x5_SRGB -#define MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6x6 PIPE_FORMAT_ASTC_6x6x6_SRGB -#define MESA_FORMAT_ATC_RGB PIPE_FORMAT_ATC_RGB -#define MESA_FORMAT_ATC_RGBA_EXPLICIT PIPE_FORMAT_ATC_RGBA_EXPLICIT -#define MESA_FORMAT_ATC_RGBA_INTERPOLATED PIPE_FORMAT_ATC_RGBA_INTERPOLATED -#define MESA_FORMAT_COUNT PIPE_FORMAT_COUNT - -/* Packed to array format adapters */ -#if UTIL_ARCH_LITTLE_ENDIAN -#define MESA_FORMAT_RGBA_UINT8 MESA_FORMAT_R8G8B8A8_UINT -#else -#define MESA_FORMAT_RGBA_UINT8 MESA_FORMAT_A8B8G8R8_UINT -#endif - -extern const char * -_mesa_get_format_name(mesa_format format); - -extern int -_mesa_get_format_bytes(mesa_format format); - -extern GLint -_mesa_get_format_bits(mesa_format format, GLenum pname); - -extern unsigned int -_mesa_get_format_max_bits(mesa_format format); - -extern enum mesa_format_layout -_mesa_get_format_layout(mesa_format format); - -extern GLenum -_mesa_get_format_datatype(mesa_format format); - -extern GLenum -_mesa_get_format_base_format(uint32_t format); - -extern void -_mesa_get_format_block_size(mesa_format format, - unsigned int *bw, unsigned int *bh); - -extern void -_mesa_get_format_block_size_3d(mesa_format format, unsigned int *bw, - unsigned int *bh, unsigned int *bd); - -extern mesa_array_format -_mesa_array_format_flip_channels(mesa_array_format format); - -extern void -_mesa_get_format_swizzle(mesa_format format, uint8_t swizzle_out[4]); - -extern uint32_t -_mesa_format_to_array_format(mesa_format format); - -extern mesa_format -_mesa_format_from_array_format(uint32_t array_format); - -extern bool -_mesa_is_format_compressed(mesa_format format); - -extern bool -_mesa_is_format_packed_depth_stencil(mesa_format format); - -extern bool -_mesa_is_format_integer_color(mesa_format format); - -extern bool -_mesa_is_format_unsigned(mesa_format format); - -extern bool -_mesa_is_format_signed(mesa_format format); - -extern bool -_mesa_is_format_integer(mesa_format format); - -extern bool -_mesa_is_format_etc2(mesa_format format); - -bool -_mesa_is_format_astc_2d(mesa_format format); - -bool -_mesa_is_format_color_format(mesa_format format); - -bool -_mesa_is_format_srgb(mesa_format format); - -extern uint32_t -_mesa_format_image_size(mesa_format format, int width, - int height, int depth); - -extern uint64_t -_mesa_format_image_size64(mesa_format format, int width, - int height, int depth); - -extern int32_t -_mesa_format_row_stride(mesa_format format, int width); - -extern void -_mesa_uncompressed_format_to_type_and_comps(mesa_format format, - GLenum *datatype, GLuint *comps); - -extern void -_mesa_test_formats(void); - -extern mesa_format -_mesa_get_srgb_format_linear(mesa_format format); - -extern mesa_format -_mesa_get_linear_format_srgb(mesa_format format); - -extern mesa_format -_mesa_get_intensity_format_red(mesa_format format); - -extern mesa_format -_mesa_get_uncompressed_format(mesa_format format); - -extern unsigned int -_mesa_format_num_components(mesa_format format); - -extern bool -_mesa_format_has_color_component(mesa_format format, int component); - -bool -_mesa_format_matches_format_and_type(mesa_format mesa_format, - GLenum format, GLenum type, - bool swapBytes, GLenum *error); - -mesa_format -_mesa_format_fallback_rgbx_to_rgba(mesa_format format); - -#ifdef __cplusplus -} -#endif - -#endif /* FORMATS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/glconfig.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/glconfig.h deleted file mode 100644 index 0def844..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/glconfig.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __GL_CONFIG_H__ -#define __GL_CONFIG_H__ - -#include "glheader.h" - -/** - * Framebuffer configuration (aka visual / pixelformat) - * Note: some of these fields should be boolean, but it appears that - * code in drivers/dri/common/util.c requires int-sized fields. - */ -struct gl_config -{ - GLboolean floatMode; - GLuint doubleBufferMode; - GLuint stereoMode; - - GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */ - GLuint redMask, greenMask, blueMask, alphaMask; - GLint redShift, greenShift, blueShift, alphaShift; - GLint rgbBits; /* total bits for rgb */ - - GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; - GLint depthBits; - GLint stencilBits; - - /* ARB_multisample / SGIS_multisample */ - GLuint samples; - - /* OML_swap_method */ - GLint swapMethod; - - /* EXT_framebuffer_sRGB */ - GLint sRGBCapable; -}; - - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/glheader.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/glheader.h deleted file mode 100644 index 6547489..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/glheader.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 glheader.h - * Wrapper for GL/gl.h and GL/glext.h - */ - - -#ifndef GLHEADER_H -#define GLHEADER_H - - -#define GL_GLEXT_PROTOTYPES -#include "../../../include/GL/gl.h" -#include "../../../include/GL/glext.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Custom Mesa types to save space. */ -typedef unsigned short GLenum16; -typedef unsigned char GLbitfield8; -typedef unsigned short GLbitfield16; -typedef GLuint64 GLbitfield64; - -/* Common GLES 1.0 and 2.0 tokens */ - -#ifndef GL_OES_EGL_image_external -#define GL_TEXTURE_EXTERNAL_OES 0x8D65 -#define GL_SAMPLER_EXTERNAL_OES 0x8D66 -#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 -#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 -#endif - -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_ETC1_RGB8_OES 0x8D64 -#endif - - -/* GLES 1.0 only tokens */ - -typedef int GLclampx; - -#ifndef GL_OES_point_size_array -#define GL_POINT_SIZE_ARRAY_OES 0x8B9C -#define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A -#define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B -#define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C -#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F -#endif - - -#ifndef GL_OES_draw_texture -#define GL_TEXTURE_CROP_RECT_OES 0x8B9D -#endif - -#ifndef GL_TEXTURE_GEN_STR_OES -#define GL_TEXTURE_GEN_STR_OES 0x8D60 -#endif - - -/* GLES 2.0 only tokens */ - -#ifndef GL_PROGRAM_BINARY_LENGTH_OES -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -#endif - -#ifndef GL_OES_texture_compression_astc -#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 -#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 -#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 -#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 -#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 -#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 -#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 -#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 -#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 -#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 -#endif - -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif - -#ifndef GL_EXT_disjoint_timer_query -#define GL_GPU_DISJOINT_EXT 0x8FBB -#endif - -/* Inexplicably, GL_HALF_FLOAT_OES has a different value than GL_HALF_FLOAT. - */ -#ifndef GL_HALF_FLOAT_OES -#define GL_HALF_FLOAT_OES 0x8D61 -#endif - -/* There is no formal spec for the following extension. */ -#ifndef GL_ATI_texture_compression_3dc -#define GL_ATI_texture_compression_3dc 1 -#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 -#endif - -#ifndef GL_EXT_texture_sRGB_R8 -#define GL_SR8_EXT 0x8FBD -#endif - -#ifndef GL_AMD_compressed_ATC_texture -#define GL_ATC_RGB_AMD 0x8C92 -#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 -#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE -#endif - -/** - * Internal token to represent a GLSL shader program (a collection of - * one or more shaders that get linked together). Note that GLSL - * shaders and shader programs share one name space (one hash table) - * so we need a value that's different from any of the - * GL_VERTEX/FRAGMENT/GEOMETRY_PROGRAM tokens. - */ -#define GL_SHADER_PROGRAM_MESA 0x9999 - -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* GLHEADER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/hash.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/hash.h deleted file mode 100644 index 5270e6f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/hash.h +++ /dev/null @@ -1,179 +0,0 @@ -/** - * \file hash.h - * Generic hash table. - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef HASH_H -#define HASH_H - - -#include "glheader.h" -#include "imports.h" -//#include "../../../include/c11/threads.h" - -/** - * Magic GLuint object name that gets stored outside of the struct hash_table. - * - * The hash table needs a particular pointer to be the marker for a key that - * was deleted from the table, along with NULL for the "never allocated in the - * table" marker. Legacy GL allows any GLuint to be used as a GL object name, - * and we use a 1:1 mapping from GLuints to key pointers, so we need to be - * able to track a GLuint that happens to match the deleted key outside of - * struct hash_table. We tell the hash table to use "1" as the deleted key - * value, so that we test the deleted-key-in-the-table path as best we can. - */ -#define DELETED_KEY_VALUE 1 - -/** @{ - * Mapping from our use of GLuint as both the key and the hash value to the - * hash_table.h API - * - * There exist many integer hash functions, designed to avoid collisions when - * the integers are spread across key space with some patterns. In GL, the - * pattern (in the case of glGen*()ed object IDs) is that the keys are unique - * contiguous integers starting from 1. Because of that, we just use the key - * as the hash value, to minimize the cost of the hash function. If objects - * are never deleted, we will never see a collision in the table, because the - * table resizes itself when it approaches full, and thus key % table_size == - * key. - * - * The case where we could have collisions for genned objects would be - * something like: glGenBuffers(&a, 100); glDeleteBuffers(&a + 50, 50); - * glGenBuffers(&b, 100), because objects 1-50 and 101-200 are allocated at - * the end of that sequence, instead of 1-150. So far it doesn't appear to be - * a problem. - */ -static inline bool -uint_key_compare(const void *a, const void *b) -{ - return a == b; -} - -static inline uint32_t -uint_hash(GLuint id) -{ - return id; -} - -static inline uint32_t -uint_key_hash(const void *key) -{ - return uint_hash((uintptr_t)key); -} - -static inline void * -uint_key(GLuint id) -{ - return (void *)(uintptr_t) id; -} -/** @} */ - -/** - * The hash table data structure. - */ -struct _mesa_HashTable { - struct hash_table *ht; - GLuint MaxKey; /**< highest key inserted so far */ - //mtx_t Mutex; /**< mutual exclusion lock */ - GLboolean InDeleteAll; /**< Debug check */ - /** Value that would be in the table for DELETED_KEY_VALUE. */ - void *deleted_key_data; -}; - -extern struct _mesa_HashTable *_mesa_NewHashTable(void); - -extern void _mesa_DeleteHashTable(struct _mesa_HashTable *table); - -extern void *_mesa_HashLookup(struct _mesa_HashTable *table, GLuint key); - -extern void _mesa_HashInsert(struct _mesa_HashTable *table, GLuint key, void *data); - -extern void _mesa_HashRemove(struct _mesa_HashTable *table, GLuint key); - -/** - * Lock the hash table mutex. - * - * This function should be used when multiple objects need - * to be looked up in the hash table, to avoid having to lock - * and unlock the mutex each time. - * - * \param table the hash table. - */ -static inline void -_mesa_HashLockMutex(struct _mesa_HashTable *table) -{ - assert(table); - //mtx_lock(&table->Mutex); -} - - -/** - * Unlock the hash table mutex. - * - * \param table the hash table. - */ -static inline void -_mesa_HashUnlockMutex(struct _mesa_HashTable *table) -{ - assert(table); - //mtx_unlock(&table->Mutex); -} - -extern void *_mesa_HashLookupLocked(struct _mesa_HashTable *table, GLuint key); - -extern void _mesa_HashInsertLocked(struct _mesa_HashTable *table, - GLuint key, void *data); - -extern void _mesa_HashRemoveLocked(struct _mesa_HashTable *table, GLuint key); - -extern void -_mesa_HashDeleteAll(struct _mesa_HashTable *table, - void (*callback)(GLuint key, void *data, void *userData), - void *userData); - -extern void -_mesa_HashWalk(const struct _mesa_HashTable *table, - void (*callback)(GLuint key, void *data, void *userData), - void *userData); - -extern void -_mesa_HashWalkLocked(const struct _mesa_HashTable *table, - void (*callback)(GLuint key, void *data, void *userData), - void *userData); - -extern void _mesa_HashPrint(const struct _mesa_HashTable *table); - -extern GLuint _mesa_HashFindFreeKeyBlock(struct _mesa_HashTable *table, GLuint numKeys); - -extern GLuint -_mesa_HashNumEntries(const struct _mesa_HashTable *table); - -extern void _mesa_test_hash_functions(void); - - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/imports.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/imports.c deleted file mode 100644 index c6a8ae8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/imports.c +++ /dev/null @@ -1,234 +0,0 @@ -/** - * \file imports.c - * Standard C library function wrappers. - * - * Imports are services which the device driver or window system or - * operating system provides to the core renderer. The core renderer (Mesa) - * will call these functions in order to do memory allocation, simple I/O, - * etc. - * - * Some drivers will want to override/replace this file with something - * specialized, but that'll be rare. - * - * Eventually, I want to move roll the glheader.h file into this. - * - * \todo Functions still needed: - * - scanf - * - qsort - * - rand and RAND_MAX - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2007 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include "../../../include/c99_math.h" -#include "imports.h" -#include "context.h" -#include "version.h" - -#ifdef _GNU_SOURCE -#include -#ifdef __APPLE__ -#include -#endif -#endif - - -#ifdef _WIN32 -#define vsnprintf _vsnprintf -#elif defined(__IBMC__) || defined(__IBMCPP__) -extern int vsnprintf(char *str, size_t count, const char *fmt, va_list arg); -#endif - -/**********************************************************************/ -/** \name Memory */ -/*@{*/ - -/** - * Allocate aligned memory. - * - * \param bytes number of bytes to allocate. - * \param alignment alignment (must be greater than zero). - * - * Allocates extra memory to accommodate rounding up the address for - * alignment and to record the real malloc address. - * - * \sa _mesa_align_free(). - */ -void * -_mesa_align_malloc(size_t bytes, unsigned long alignment) -{ -#if defined(HAVE_POSIX_MEMALIGN) - void *mem; - int err = posix_memalign(& mem, alignment, bytes); - if (err) - return NULL; - return mem; -#elif defined(_WIN32) - return _aligned_malloc(bytes, alignment); -#else - uintptr_t ptr, buf; - - assert( alignment > 0 ); - - ptr = (uintptr_t)malloc(bytes + alignment + sizeof(void *)); - if (!ptr) - return NULL; - - buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1); - *(uintptr_t *)(buf - sizeof(void *)) = ptr; - -#ifndef NDEBUG - /* mark the non-aligned area */ - while ( ptr < buf - sizeof(void *) ) { - *(unsigned long *)ptr = 0xcdcdcdcd; - ptr += sizeof(unsigned long); - } -#endif - - return (void *) buf; -#endif /* defined(HAVE_POSIX_MEMALIGN) */ -} - -/** - * Same as _mesa_align_malloc(), but using calloc(1, ) instead of - * malloc() - */ -void * -_mesa_align_calloc(size_t bytes, unsigned long alignment) -{ -#if defined(HAVE_POSIX_MEMALIGN) - void *mem; - - mem = _mesa_align_malloc(bytes, alignment); - if (mem != NULL) { - (void) memset(mem, 0, bytes); - } - - return mem; -#elif defined(_WIN32) - void *mem; - - mem = _aligned_malloc(bytes, alignment); - if (mem != NULL) { - (void) memset(mem, 0, bytes); - } - - return mem; -#else - uintptr_t ptr, buf; - - assert( alignment > 0 ); - - ptr = (uintptr_t)calloc(1, bytes + alignment + sizeof(void *)); - if (!ptr) - return NULL; - - buf = (ptr + alignment + sizeof(void *)) & ~(uintptr_t)(alignment - 1); - *(uintptr_t *)(buf - sizeof(void *)) = ptr; - -#ifndef NDEBUG - /* mark the non-aligned area */ - while ( ptr < buf - sizeof(void *) ) { - *(unsigned long *)ptr = 0xcdcdcdcd; - ptr += sizeof(unsigned long); - } -#endif - - return (void *)buf; -#endif /* defined(HAVE_POSIX_MEMALIGN) */ -} - -/** - * Free memory which was allocated with either _mesa_align_malloc() - * or _mesa_align_calloc(). - * \param ptr pointer to the memory to be freed. - * The actual address to free is stored in the word immediately before the - * address the client sees. - * Note that it is legal to pass NULL pointer to this function and will be - * handled accordingly. - */ -void -_mesa_align_free(void *ptr) -{ -#if defined(HAVE_POSIX_MEMALIGN) - free(ptr); -#elif defined(_WIN32) - _aligned_free(ptr); -#else - if (ptr) { - void **cubbyHole = (void **) ((char *) ptr - sizeof(void *)); - void *realAddr = *cubbyHole; - free(realAddr); - } -#endif /* defined(HAVE_POSIX_MEMALIGN) */ -} - -/** - * Reallocate memory, with alignment. - */ -void * -_mesa_align_realloc(void *oldBuffer, size_t oldSize, size_t newSize, - unsigned long alignment) -{ -#if defined(_WIN32) - (void) oldSize; - return _aligned_realloc(oldBuffer, newSize, alignment); -#else - const size_t copySize = (oldSize < newSize) ? oldSize : newSize; - void *newBuf = _mesa_align_malloc(newSize, alignment); - if (newBuf && oldBuffer && copySize > 0) { - memcpy(newBuf, oldBuffer, copySize); - } - - _mesa_align_free(oldBuffer); - return newBuf; -#endif -} - -/*@}*/ - - -/** Needed due to #ifdef's, above. */ -int -_mesa_vsnprintf(char *str, size_t size, const char *fmt, va_list args) -{ - return vsnprintf( str, size, fmt, args); -} - -/** Wrapper around vsnprintf() */ -int -_mesa_snprintf( char *str, size_t size, const char *fmt, ... ) -{ - int r; - va_list args; - va_start( args, fmt ); - r = vsnprintf( str, size, fmt, args ); - va_end( args ); - return r; -} - - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/imports.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/imports.h deleted file mode 100644 index da7af47..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/imports.h +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 imports.h - * Standard C library function wrappers. - * - * This file provides wrappers for all the standard C library functions - * like malloc(), free(), printf(), getenv(), etc. - */ - - -#ifndef IMPORTS_H -#define IMPORTS_H - - -#include -#include -#include -#include "compiler.h" -#include "glheader.h" -#include "../../util/bitscan.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/**********************************************************************/ -/** Memory macros */ -/*@{*/ - -/** Allocate a structure of type \p T */ -#define MALLOC_STRUCT(T) (struct T *) malloc(sizeof(struct T)) -/** Allocate and zero a structure of type \p T */ -#define CALLOC_STRUCT(T) (struct T *) calloc(1, sizeof(struct T)) - -/*@}*/ - - -/* - * For GL_ARB_vertex_buffer_object we need to treat vertex array pointers - * as offsets into buffer stores. Since the vertex array pointer and - * buffer store pointer are both pointers and we need to add them, we use - * this macro. - * Both pointers/offsets are expressed in bytes. - */ -#define ADD_POINTERS(A, B) ( (GLubyte *) (A) + (uintptr_t) (B) ) - - -/** - * Sometimes we treat GLfloats as GLints. On x86 systems, moving a float - * as an int (thereby using integer registers instead of FP registers) is - * a performance win. Typically, this can be done with ordinary casts. - * But with gcc's -fstrict-aliasing flag (which defaults to on in gcc 3.0) - * these casts generate warnings. - * The following union typedef is used to solve that. - */ -typedef union { GLfloat f; GLint i; GLuint u; } fi_type; - - - -/*@}*/ - - -/*** - *** LOG2: Log base 2 of float - ***/ -static inline GLfloat LOG2(GLfloat x) -{ -#if 0 - /* This is pretty fast, but not accurate enough (only 2 fractional bits). - * Based on code from http://www.stereopsis.com/log2.html - */ - const GLfloat y = x * x * x * x; - const GLuint ix = *((GLuint *) &y); - const GLuint exp = (ix >> 23) & 0xFF; - const GLint log2 = ((GLint) exp) - 127; - return (GLfloat) log2 * (1.0 / 4.0); /* 4, because of x^4 above */ -#endif - /* Pretty fast, and accurate. - * Based on code from http://www.flipcode.com/totd/ - */ - fi_type num; - GLint log_2; - num.f = x; - log_2 = ((num.i >> 23) & 255) - 128; - num.i &= ~(255 << 23); - num.i += 127 << 23; - num.f = ((-1.0f/3) * num.f + 2) * num.f - 2.0f/3; - return num.f + log_2; -} - - - -/** - * finite macro. - */ -#if defined(_MSC_VER) -# define finite _finite -#endif - - -/*** - *** IS_INF_OR_NAN: test if float is infinite or NaN - ***/ -#if defined(isfinite) -#define IS_INF_OR_NAN(x) (!isfinite(x)) -#elif defined(finite) -#define IS_INF_OR_NAN(x) (!finite(x)) -#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#define IS_INF_OR_NAN(x) (!isfinite(x)) -#else -#define IS_INF_OR_NAN(x) (!finite(x)) -#endif - - -/** - * Convert float to int by rounding to nearest integer, away from zero. - */ -static inline int IROUND(float f) -{ - return (int) ((f >= 0.0F) ? (f + 0.5F) : (f - 0.5F)); -} - -/** - * Convert double to int by rounding to nearest integer, away from zero. - */ -static inline int IROUNDD(double d) -{ - return (int) ((d >= 0.0) ? (d + 0.5) : (d - 0.5)); -} - -/** - * Convert float to int64 by rounding to nearest integer. - */ -static inline GLint64 IROUND64(float f) -{ - return (GLint64) ((f >= 0.0F) ? (f + 0.5F) : (f - 0.5F)); -} - - -/** - * Convert positive float to int by rounding to nearest integer. - */ -static inline int IROUND_POS(float f) -{ - assert(f >= 0.0F); - return (int) (f + 0.5F); -} - -/** Return (as an integer) floor of float */ -static inline int IFLOOR(float f) -{ -#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) - /* - * IEEE floor for computers that round to nearest or even. - * 'f' must be between -4194304 and 4194303. - * This floor operation is done by "(iround(f + .5) + iround(f - .5)) >> 1", - * but uses some IEEE specific tricks for better speed. - * Contributed by Josh Vanderhoof - */ - int ai, bi; - double af, bf; - af = (3 << 22) + 0.5 + (double)f; - bf = (3 << 22) + 0.5 - (double)f; - /* GCC generates an extra fstp/fld without this. */ - __asm__ ("fstps %0" : "=m" (ai) : "t" (af) : "st"); - __asm__ ("fstps %0" : "=m" (bi) : "t" (bf) : "st"); - return (ai - bi) >> 1; -#else - int ai, bi; - double af, bf; - fi_type u; - af = (3 << 22) + 0.5 + (double)f; - bf = (3 << 22) + 0.5 - (double)f; - u.f = (float) af; ai = u.i; - u.f = (float) bf; bi = u.i; - return (ai - bi) >> 1; -#endif -} - - -/** - * Is x a power of two? - */ -static inline int -_mesa_is_pow_two(int x) -{ - return !(x & (x - 1)); -} - -/** - * Round given integer to next higer power of two - * If X is zero result is undefined. - * - * Source for the fallback implementation is - * Sean Eron Anderson's webpage "Bit Twiddling Hacks" - * http://graphics.stanford.edu/~seander/bithacks.html - * - * When using builtin function have to do some work - * for case when passed values 1 to prevent hiting - * undefined result from __builtin_clz. Undefined - * results would be different depending on optimization - * level used for build. - */ -static inline int32_t -_mesa_next_pow_two_32(uint32_t x) -{ -#ifdef HAVE___BUILTIN_CLZ - uint32_t y = (x != 1); - return (1 + y) << ((__builtin_clz(x - y) ^ 31) ); -#else - x--; - x |= x >> 1; - x |= x >> 2; - x |= x >> 4; - x |= x >> 8; - x |= x >> 16; - x++; - return x; -#endif -} - -static inline int64_t -_mesa_next_pow_two_64(uint64_t x) -{ -#ifdef HAVE___BUILTIN_CLZLL - uint64_t y = (x != 1); - STATIC_ASSERT(sizeof(x) == sizeof(long long)); - return (1 + y) << ((__builtin_clzll(x - y) ^ 63)); -#else - x--; - x |= x >> 1; - x |= x >> 2; - x |= x >> 4; - x |= x >> 8; - x |= x >> 16; - x |= x >> 32; - x++; - return x; -#endif -} - - -/* - * Returns the floor form of binary logarithm for a 32-bit integer. - */ -static inline GLuint -_mesa_logbase2(GLuint n) -{ -#ifdef HAVE___BUILTIN_CLZ - return (31 - __builtin_clz(n | 1)); -#else - GLuint pos = 0; - if (n >= 1<<16) { n >>= 16; pos += 16; } - if (n >= 1<< 8) { n >>= 8; pos += 8; } - if (n >= 1<< 4) { n >>= 4; pos += 4; } - if (n >= 1<< 2) { n >>= 2; pos += 2; } - if (n >= 1<< 1) { pos += 1; } - return pos; -#endif -} - - -/********************************************************************** - * Functions - */ - -extern void * -_mesa_align_malloc( size_t bytes, unsigned long alignment ); - -extern void * -_mesa_align_calloc( size_t bytes, unsigned long alignment ); - -extern void -_mesa_align_free( void *ptr ); - -extern void * -_mesa_align_realloc(void *oldBuffer, size_t oldSize, size_t newSize, - unsigned long alignment); - -extern int -_mesa_snprintf( char *str, size_t size, const char *fmt, ... ); - -extern int -_mesa_vsnprintf(char *str, size_t size, const char *fmt, va_list arg); - - -#if defined(_WIN32) && !defined(HAVE_STRTOK_R) -#define strtok_r strtok_s -#endif - -#ifdef __cplusplus -} -#endif - - -#endif /* IMPORTS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/macros.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/macros.h deleted file mode 100644 index a0c7e19..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/macros.h +++ /dev/null @@ -1,719 +0,0 @@ -/** - * \file macros.h - * A collection of useful macros. - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef MACROS_H -#define MACROS_H - -//#include "macros.h" -#include "../../util/u_math.h" -#include "../../util/rounding.h" -#include "imports.h" -#include "../../../include/GL/gl.h" - - - -/** - * \name Integer / float conversion for colors, normals, etc. - */ -/*@{*/ - -/** Convert GLubyte in [0,255] to GLfloat in [0.0,1.0] */ -extern GLfloat _mesa_ubyte_to_float_color_tab[256]; -#define UBYTE_TO_FLOAT(u) _mesa_ubyte_to_float_color_tab[(unsigned int)(u)] - -/** Convert GLfloat in [0.0,1.0] to GLubyte in [0,255] */ -#define FLOAT_TO_UBYTE(X) ((GLubyte) (GLint) ((X) * 255.0F)) - - -/** Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0] */ -#define BYTE_TO_FLOAT(B) ((2.0F * (B) + 1.0F) * (1.0F/255.0F)) - -/** Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127] */ -#define FLOAT_TO_BYTE(X) ( (((GLint) (255.0F * (X))) - 1) / 2 ) - - -/** Convert GLbyte to GLfloat while preserving zero */ -#define BYTE_TO_FLOATZ(B) ((B) == 0 ? 0.0F : BYTE_TO_FLOAT(B)) - - -/** Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0], texture/fb data */ -#define BYTE_TO_FLOAT_TEX(B) ((B) == -128 ? -1.0F : (B) * (1.0F/127.0F)) - -/** Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127], texture/fb data */ -#define FLOAT_TO_BYTE_TEX(X) CLAMP( (GLint) (127.0F * (X)), -128, 127 ) - -/** Convert GLushort in [0,65535] to GLfloat in [0.0,1.0] */ -#define USHORT_TO_FLOAT(S) ((GLfloat) (S) * (1.0F / 65535.0F)) - -/** Convert GLfloat in [0.0,1.0] to GLushort in [0, 65535] */ -#define FLOAT_TO_USHORT(X) ((GLuint) ((X) * 65535.0F)) - - -/** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */ -#define SHORT_TO_FLOAT(S) ((2.0F * (S) + 1.0F) * (1.0F/65535.0F)) - -/** Convert GLfloat in [-1.0,1.0] to GLshort in [-32768,32767] */ -#define FLOAT_TO_SHORT(X) ( (((GLint) (65535.0F * (X))) - 1) / 2 ) - -/** Convert GLshort to GLfloat while preserving zero */ -#define SHORT_TO_FLOATZ(S) ((S) == 0 ? 0.0F : SHORT_TO_FLOAT(S)) - - -/** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0], texture/fb data */ -#define SHORT_TO_FLOAT_TEX(S) ((S) == -32768 ? -1.0F : (S) * (1.0F/32767.0F)) - -/** Convert GLfloat in [-1.0,1.0] to GLshort in [-32768,32767], texture/fb data */ -#define FLOAT_TO_SHORT_TEX(X) ( (GLint) (32767.0F * (X)) ) - - -/** Convert GLuint in [0,4294967295] to GLfloat in [0.0,1.0] */ -#define UINT_TO_FLOAT(U) ((GLfloat) ((U) * (1.0F / 4294967295.0))) - -/** Convert GLfloat in [0.0,1.0] to GLuint in [0,4294967295] */ -#define FLOAT_TO_UINT(X) ((GLuint) ((X) * 4294967295.0)) - - -/** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0] */ -#define INT_TO_FLOAT(I) ((GLfloat) ((2.0F * (I) + 1.0F) * (1.0F/4294967294.0))) - -/** Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647] */ -/* causes overflow: -#define FLOAT_TO_INT(X) ( (((GLint) (4294967294.0 * (X))) - 1) / 2 ) -*/ -/* a close approximation: */ -#define FLOAT_TO_INT(X) ( (GLint) (2147483647.0 * (X)) ) - -/** Convert GLfloat in [-1.0,1.0] to GLint64 in [-(1<<63),(1 << 63) -1] */ -#define FLOAT_TO_INT64(X) ( (GLint64) (9223372036854775807.0 * (double)(X)) ) - - -/** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0], texture/fb data */ -#define INT_TO_FLOAT_TEX(I) ((I) == -2147483648 ? -1.0F : (I) * (1.0F/2147483647.0)) - -/** Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647], texture/fb data */ -#define FLOAT_TO_INT_TEX(X) ( (GLint) (2147483647.0 * (X)) ) - - -#define BYTE_TO_UBYTE(b) ((GLubyte) ((b) < 0 ? 0 : (GLubyte) (b))) -#define SHORT_TO_UBYTE(s) ((GLubyte) ((s) < 0 ? 0 : (GLubyte) ((s) >> 7))) -#define USHORT_TO_UBYTE(s) ((GLubyte) ((s) >> 8)) -#define INT_TO_UBYTE(i) ((GLubyte) ((i) < 0 ? 0 : (GLubyte) ((i) >> 23))) -#define UINT_TO_UBYTE(i) ((GLubyte) ((i) >> 24)) - - -#define BYTE_TO_USHORT(b) ((b) < 0 ? 0 : ((GLushort) (((b) * 65535) / 255))) -#define UBYTE_TO_USHORT(b) (((GLushort) (b) << 8) | (GLushort) (b)) -#define SHORT_TO_USHORT(s) ((s) < 0 ? 0 : ((GLushort) (((s) * 65535 / 32767)))) -#define INT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 15))) -#define UINT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 16))) -#define UNCLAMPED_FLOAT_TO_USHORT(us, f) \ - us = ( (GLushort) _mesa_lroundevenf( CLAMP((f), 0.0F, 1.0F) * 65535.0F) ) -#define CLAMPED_FLOAT_TO_USHORT(us, f) \ - us = ( (GLushort) _mesa_lroundevenf( (f) * 65535.0F) ) - -#define UNCLAMPED_FLOAT_TO_SHORT(s, f) \ - s = ( (GLshort) _mesa_lroundevenf( CLAMP((f), -1.0F, 1.0F) * 32767.0F) ) - -/*** - *** UNCLAMPED_FLOAT_TO_UBYTE: clamp float to [0,1] and map to ubyte in [0,255] - *** CLAMPED_FLOAT_TO_UBYTE: map float known to be in [0,1] to ubyte in [0,255] - ***/ -#ifndef DEBUG -/* This function/macro is sensitive to precision. Test very carefully - * if you change it! - */ -#define UNCLAMPED_FLOAT_TO_UBYTE(UB, FLT) \ - do { \ - fi_type __tmp; \ - __tmp.f = (FLT); \ - if (__tmp.i < 0) \ - UB = (GLubyte) 0; \ - else if (__tmp.i >= IEEE_ONE) \ - UB = (GLubyte) 255; \ - else { \ - __tmp.f = __tmp.f * (255.0F/256.0F) + 32768.0F; \ - UB = (GLubyte) __tmp.i; \ - } \ - } while (0) -#define CLAMPED_FLOAT_TO_UBYTE(UB, FLT) \ - do { \ - fi_type __tmp; \ - __tmp.f = (FLT) * (255.0F/256.0F) + 32768.0F; \ - UB = (GLubyte) __tmp.i; \ - } while (0) -#else -#define UNCLAMPED_FLOAT_TO_UBYTE(ub, f) \ - ub = ((GLubyte) _mesa_lroundevenf(CLAMP((f), 0.0F, 1.0F) * 255.0F)) -#define CLAMPED_FLOAT_TO_UBYTE(ub, f) \ - ub = ((GLubyte) _mesa_lroundevenf((f) * 255.0F)) -#endif - - -/** - * Convert a floating point value to an unsigned fixed point value. - * - * \param frac_bits The number of bits used to store the fractional part. - */ -static inline uint32_t -U_FIXED(float value, uint32_t frac_bits) -{ - value *= (1 << frac_bits); - return value < 0.0f ? 0 : (uint32_t) value; -} - -/** - * Convert a floating point value to an signed fixed point value. - * - * \param frac_bits The number of bits used to store the fractional part. - */ -static inline int32_t -S_FIXED(float value, uint32_t frac_bits) -{ - return (int32_t) (value * (1 << frac_bits)); -} -/*@}*/ - - -/** Stepping a GLfloat pointer by a byte stride */ -#define STRIDE_F(p, i) (p = (GLfloat *)((GLubyte *)p + i)) -/** Stepping a GLuint pointer by a byte stride */ -#define STRIDE_UI(p, i) (p = (GLuint *)((GLubyte *)p + i)) -/** Stepping a GLubyte[4] pointer by a byte stride */ -#define STRIDE_4UB(p, i) (p = (GLubyte (*)[4])((GLubyte *)p + i)) -/** Stepping a GLfloat[4] pointer by a byte stride */ -#define STRIDE_4F(p, i) (p = (GLfloat (*)[4])((GLubyte *)p + i)) -/** Stepping a \p t pointer by a byte stride */ -#define STRIDE_T(p, t, i) (p = (t)((GLubyte *)p + i)) - - -/**********************************************************************/ -/** \name 4-element vector operations */ -/*@{*/ - -/** Zero */ -#define ZERO_4V( DST ) (DST)[0] = (DST)[1] = (DST)[2] = (DST)[3] = 0 - -/** Test for equality */ -#define TEST_EQ_4V(a,b) ((a)[0] == (b)[0] && \ - (a)[1] == (b)[1] && \ - (a)[2] == (b)[2] && \ - (a)[3] == (b)[3]) - -/** Test for equality (unsigned bytes) */ -static inline GLboolean -TEST_EQ_4UBV(const GLubyte a[4], const GLubyte b[4]) -{ -#if defined(__i386__) - return *((const GLuint *) a) == *((const GLuint *) b); -#else - return TEST_EQ_4V(a, b); -#endif -} - - -/** Copy a 4-element vector */ -#define COPY_4V( DST, SRC ) \ -do { \ - (DST)[0] = (SRC)[0]; \ - (DST)[1] = (SRC)[1]; \ - (DST)[2] = (SRC)[2]; \ - (DST)[3] = (SRC)[3]; \ -} while (0) - -/** Copy a 4-element unsigned byte vector */ -static inline void -COPY_4UBV(GLubyte dst[4], const GLubyte src[4]) -{ -#if defined(__i386__) - *((GLuint *) dst) = *((GLuint *) src); -#else - /* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */ - COPY_4V(dst, src); -#endif -} - -/** Copy \p SZ elements into a 4-element vector */ -#define COPY_SZ_4V(DST, SZ, SRC) \ -do { \ - switch (SZ) { \ - case 4: (DST)[3] = (SRC)[3]; \ - case 3: (DST)[2] = (SRC)[2]; \ - case 2: (DST)[1] = (SRC)[1]; \ - case 1: (DST)[0] = (SRC)[0]; \ - } \ -} while(0) - -/** Copy \p SZ elements into a homegeneous (4-element) vector, giving - * default values to the remaining */ -#define COPY_CLEAN_4V(DST, SZ, SRC) \ -do { \ - ASSIGN_4V( DST, 0, 0, 0, 1 ); \ - COPY_SZ_4V( DST, SZ, SRC ); \ -} while (0) - -/** Subtraction */ -#define SUB_4V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] - (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] - (SRCB)[1]; \ - (DST)[2] = (SRCA)[2] - (SRCB)[2]; \ - (DST)[3] = (SRCA)[3] - (SRCB)[3]; \ -} while (0) - -/** Addition */ -#define ADD_4V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] + (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] + (SRCB)[1]; \ - (DST)[2] = (SRCA)[2] + (SRCB)[2]; \ - (DST)[3] = (SRCA)[3] + (SRCB)[3]; \ -} while (0) - -/** Element-wise multiplication */ -#define SCALE_4V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] * (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] * (SRCB)[1]; \ - (DST)[2] = (SRCA)[2] * (SRCB)[2]; \ - (DST)[3] = (SRCA)[3] * (SRCB)[3]; \ -} while (0) - -/** In-place addition */ -#define ACC_4V( DST, SRC ) \ -do { \ - (DST)[0] += (SRC)[0]; \ - (DST)[1] += (SRC)[1]; \ - (DST)[2] += (SRC)[2]; \ - (DST)[3] += (SRC)[3]; \ -} while (0) - -/** Element-wise multiplication and addition */ -#define ACC_SCALE_4V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] += (SRCA)[0] * (SRCB)[0]; \ - (DST)[1] += (SRCA)[1] * (SRCB)[1]; \ - (DST)[2] += (SRCA)[2] * (SRCB)[2]; \ - (DST)[3] += (SRCA)[3] * (SRCB)[3]; \ -} while (0) - -/** In-place scalar multiplication and addition */ -#define ACC_SCALE_SCALAR_4V( DST, S, SRCB ) \ -do { \ - (DST)[0] += S * (SRCB)[0]; \ - (DST)[1] += S * (SRCB)[1]; \ - (DST)[2] += S * (SRCB)[2]; \ - (DST)[3] += S * (SRCB)[3]; \ -} while (0) - -/** Scalar multiplication */ -#define SCALE_SCALAR_4V( DST, S, SRCB ) \ -do { \ - (DST)[0] = S * (SRCB)[0]; \ - (DST)[1] = S * (SRCB)[1]; \ - (DST)[2] = S * (SRCB)[2]; \ - (DST)[3] = S * (SRCB)[3]; \ -} while (0) - -/** In-place scalar multiplication */ -#define SELF_SCALE_SCALAR_4V( DST, S ) \ -do { \ - (DST)[0] *= S; \ - (DST)[1] *= S; \ - (DST)[2] *= S; \ - (DST)[3] *= S; \ -} while (0) - -/*@}*/ - - -/**********************************************************************/ -/** \name 3-element vector operations*/ -/*@{*/ - -/** Zero */ -#define ZERO_3V( DST ) (DST)[0] = (DST)[1] = (DST)[2] = 0 - -/** Test for equality */ -#define TEST_EQ_3V(a,b) \ - ((a)[0] == (b)[0] && \ - (a)[1] == (b)[1] && \ - (a)[2] == (b)[2]) - -/** Copy a 3-element vector */ -#define COPY_3V( DST, SRC ) \ -do { \ - (DST)[0] = (SRC)[0]; \ - (DST)[1] = (SRC)[1]; \ - (DST)[2] = (SRC)[2]; \ -} while (0) - -/** Copy a 3-element vector with cast */ -#define COPY_3V_CAST( DST, SRC, CAST ) \ -do { \ - (DST)[0] = (CAST)(SRC)[0]; \ - (DST)[1] = (CAST)(SRC)[1]; \ - (DST)[2] = (CAST)(SRC)[2]; \ -} while (0) - -/** Copy a 3-element float vector */ -#define COPY_3FV( DST, SRC ) \ -do { \ - const GLfloat *_tmp = (SRC); \ - (DST)[0] = _tmp[0]; \ - (DST)[1] = _tmp[1]; \ - (DST)[2] = _tmp[2]; \ -} while (0) - -/** Subtraction */ -#define SUB_3V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] - (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] - (SRCB)[1]; \ - (DST)[2] = (SRCA)[2] - (SRCB)[2]; \ -} while (0) - -/** Addition */ -#define ADD_3V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] + (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] + (SRCB)[1]; \ - (DST)[2] = (SRCA)[2] + (SRCB)[2]; \ -} while (0) - -/** In-place scalar multiplication */ -#define SCALE_3V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] * (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] * (SRCB)[1]; \ - (DST)[2] = (SRCA)[2] * (SRCB)[2]; \ -} while (0) - -/** In-place element-wise multiplication */ -#define SELF_SCALE_3V( DST, SRC ) \ -do { \ - (DST)[0] *= (SRC)[0]; \ - (DST)[1] *= (SRC)[1]; \ - (DST)[2] *= (SRC)[2]; \ -} while (0) - -/** In-place addition */ -#define ACC_3V( DST, SRC ) \ -do { \ - (DST)[0] += (SRC)[0]; \ - (DST)[1] += (SRC)[1]; \ - (DST)[2] += (SRC)[2]; \ -} while (0) - -/** Element-wise multiplication and addition */ -#define ACC_SCALE_3V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] += (SRCA)[0] * (SRCB)[0]; \ - (DST)[1] += (SRCA)[1] * (SRCB)[1]; \ - (DST)[2] += (SRCA)[2] * (SRCB)[2]; \ -} while (0) - -/** Scalar multiplication */ -#define SCALE_SCALAR_3V( DST, S, SRCB ) \ -do { \ - (DST)[0] = S * (SRCB)[0]; \ - (DST)[1] = S * (SRCB)[1]; \ - (DST)[2] = S * (SRCB)[2]; \ -} while (0) - -/** In-place scalar multiplication and addition */ -#define ACC_SCALE_SCALAR_3V( DST, S, SRCB ) \ -do { \ - (DST)[0] += S * (SRCB)[0]; \ - (DST)[1] += S * (SRCB)[1]; \ - (DST)[2] += S * (SRCB)[2]; \ -} while (0) - -/** In-place scalar multiplication */ -#define SELF_SCALE_SCALAR_3V( DST, S ) \ -do { \ - (DST)[0] *= S; \ - (DST)[1] *= S; \ - (DST)[2] *= S; \ -} while (0) - -/** In-place scalar addition */ -#define ACC_SCALAR_3V( DST, S ) \ -do { \ - (DST)[0] += S; \ - (DST)[1] += S; \ - (DST)[2] += S; \ -} while (0) - -/** Assignment */ -#define ASSIGN_3V( V, V0, V1, V2 ) \ -do { \ - V[0] = V0; \ - V[1] = V1; \ - V[2] = V2; \ -} while(0) - -/*@}*/ - - -/**********************************************************************/ -/** \name 2-element vector operations*/ -/*@{*/ - -/** Zero */ -#define ZERO_2V( DST ) (DST)[0] = (DST)[1] = 0 - -/** Copy a 2-element vector */ -#define COPY_2V( DST, SRC ) \ -do { \ - (DST)[0] = (SRC)[0]; \ - (DST)[1] = (SRC)[1]; \ -} while (0) - -/** Copy a 2-element vector with cast */ -#define COPY_2V_CAST( DST, SRC, CAST ) \ -do { \ - (DST)[0] = (CAST)(SRC)[0]; \ - (DST)[1] = (CAST)(SRC)[1]; \ -} while (0) - -/** Copy a 2-element float vector */ -#define COPY_2FV( DST, SRC ) \ -do { \ - const GLfloat *_tmp = (SRC); \ - (DST)[0] = _tmp[0]; \ - (DST)[1] = _tmp[1]; \ -} while (0) - -/** Subtraction */ -#define SUB_2V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] - (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] - (SRCB)[1]; \ -} while (0) - -/** Addition */ -#define ADD_2V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] + (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] + (SRCB)[1]; \ -} while (0) - -/** In-place scalar multiplication */ -#define SCALE_2V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] = (SRCA)[0] * (SRCB)[0]; \ - (DST)[1] = (SRCA)[1] * (SRCB)[1]; \ -} while (0) - -/** In-place addition */ -#define ACC_2V( DST, SRC ) \ -do { \ - (DST)[0] += (SRC)[0]; \ - (DST)[1] += (SRC)[1]; \ -} while (0) - -/** Element-wise multiplication and addition */ -#define ACC_SCALE_2V( DST, SRCA, SRCB ) \ -do { \ - (DST)[0] += (SRCA)[0] * (SRCB)[0]; \ - (DST)[1] += (SRCA)[1] * (SRCB)[1]; \ -} while (0) - -/** Scalar multiplication */ -#define SCALE_SCALAR_2V( DST, S, SRCB ) \ -do { \ - (DST)[0] = S * (SRCB)[0]; \ - (DST)[1] = S * (SRCB)[1]; \ -} while (0) - -/** In-place scalar multiplication and addition */ -#define ACC_SCALE_SCALAR_2V( DST, S, SRCB ) \ -do { \ - (DST)[0] += S * (SRCB)[0]; \ - (DST)[1] += S * (SRCB)[1]; \ -} while (0) - -/** In-place scalar multiplication */ -#define SELF_SCALE_SCALAR_2V( DST, S ) \ -do { \ - (DST)[0] *= S; \ - (DST)[1] *= S; \ -} while (0) - -/** In-place scalar addition */ -#define ACC_SCALAR_2V( DST, S ) \ -do { \ - (DST)[0] += S; \ - (DST)[1] += S; \ -} while (0) - -/** Assign scalers to short vectors */ -#define ASSIGN_2V( V, V0, V1 ) \ -do { \ - V[0] = V0; \ - V[1] = V1; \ -} while(0) - -/*@}*/ - - -/** \name Linear interpolation functions */ -/*@{*/ - -static inline GLfloat -LINTERP(GLfloat t, GLfloat out, GLfloat in) -{ - return out + t * (in - out); -} - -static inline void -INTERP_3F(GLfloat t, GLfloat dst[3], const GLfloat out[3], const GLfloat in[3]) -{ - dst[0] = LINTERP( t, out[0], in[0] ); - dst[1] = LINTERP( t, out[1], in[1] ); - dst[2] = LINTERP( t, out[2], in[2] ); -} - -static inline void -INTERP_4F(GLfloat t, GLfloat dst[4], const GLfloat out[4], const GLfloat in[4]) -{ - dst[0] = LINTERP( t, out[0], in[0] ); - dst[1] = LINTERP( t, out[1], in[1] ); - dst[2] = LINTERP( t, out[2], in[2] ); - dst[3] = LINTERP( t, out[3], in[3] ); -} - -/*@}*/ - - - -static inline unsigned -minify(unsigned value, unsigned levels) -{ - return MAX2(1, value >> levels); -} - - -/** Cross product of two 3-element vectors */ -static inline void -CROSS3(GLfloat n[3], const GLfloat u[3], const GLfloat v[3]) -{ - n[0] = u[1] * v[2] - u[2] * v[1]; - n[1] = u[2] * v[0] - u[0] * v[2]; - n[2] = u[0] * v[1] - u[1] * v[0]; -} - - -/** Dot product of two 2-element vectors */ -static inline GLfloat -DOT2(const GLfloat a[2], const GLfloat b[2]) -{ - return a[0] * b[0] + a[1] * b[1]; -} - -static inline GLfloat -DOT3(const GLfloat a[3], const GLfloat b[3]) -{ - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; -} - -static inline GLfloat -DOT4(const GLfloat a[4], const GLfloat b[4]) -{ - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; -} - - -static inline GLfloat -LEN_SQUARED_3FV(const GLfloat v[3]) -{ - return DOT3(v, v); -} - -static inline GLfloat -LEN_SQUARED_2FV(const GLfloat v[2]) -{ - return DOT2(v, v); -} - - -static inline GLfloat -LEN_3FV(const GLfloat v[3]) -{ - return sqrtf(LEN_SQUARED_3FV(v)); -} - -static inline GLfloat -LEN_2FV(const GLfloat v[2]) -{ - return sqrtf(LEN_SQUARED_2FV(v)); -} - - -/* Normalize a 3-element vector to unit length. */ -static inline void -NORMALIZE_3FV(GLfloat v[3]) -{ - GLfloat len = (GLfloat) LEN_SQUARED_3FV(v); - if (len) { - len = 1.0f / sqrtf(len); - v[0] *= len; - v[1] *= len; - v[2] *= len; - } -} - - -/** Test two floats have opposite signs */ -static inline GLboolean -DIFFERENT_SIGNS(GLfloat x, GLfloat y) -{ -#ifdef _MSC_VER -#pragma warning( push ) -#pragma warning( disable : 6334 ) /* sizeof operator applied to an expression with an operator may yield unexpected results */ -#endif - return signbit(x) != signbit(y); -#ifdef _MSC_VER -#pragma warning( pop ) -#endif -} - - -/** casts to silence warnings with some compilers */ -#define ENUM_TO_INT(E) ((GLint)(E)) -#define ENUM_TO_FLOAT(E) ((GLfloat)(GLint)(E)) -#define ENUM_TO_DOUBLE(E) ((GLdouble)(GLint)(E)) -#define ENUM_TO_BOOLEAN(E) ((E) ? GL_TRUE : GL_FALSE) - - -/* Stringify */ -#define STRINGIFY(x) #x - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/menums.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/menums.h deleted file mode 100644 index 71d3b76..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/menums.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. All Rights Reserved. - * Copyright (C) 2018 Advanced Micro Devices, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 menums.h - * Often used definitions and enums. - */ - -#ifndef MENUMS_H -#define MENUMS_H - -#include -#include "macros.h" - -/** - * Enum for the OpenGL APIs we know about and may support. - * - * NOTE: This must match the api_enum table in - * src/mesa/main/get_hash_generator.py - */ -typedef enum -{ - API_OPENGL_COMPAT, /* legacy / compatibility contexts */ - API_OPENGLES, - API_OPENGLES2, - API_OPENGL_CORE, - API_OPENGL_LAST = API_OPENGL_CORE -} gl_api; - -/** - * Checks if the api is for GLES 2.0 or later - */ -static inline bool -_mesa_is_api_gles2(gl_api api) -{ -#if HAVE_OPENGL_ES_2 - return api == API_OPENGLES2; -#else - return false; -#endif -} - -/** - * An index for each type of texture object. These correspond to the GL - * texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc. - * Note: the order is from highest priority to lowest priority. - */ -typedef enum -{ - TEXTURE_2D_MULTISAMPLE_INDEX, - TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX, - TEXTURE_CUBE_ARRAY_INDEX, - TEXTURE_BUFFER_INDEX, - TEXTURE_2D_ARRAY_INDEX, - TEXTURE_1D_ARRAY_INDEX, - TEXTURE_EXTERNAL_INDEX, - TEXTURE_CUBE_INDEX, - TEXTURE_3D_INDEX, - TEXTURE_RECT_INDEX, - TEXTURE_2D_INDEX, - TEXTURE_1D_INDEX, - NUM_TEXTURE_TARGETS -} gl_texture_index; - -/** - * Remapped color logical operations - * - * With the exception of NVIDIA hardware, which consumes the OpenGL enumerants - * directly, everything wants this mapping of color logical operations. - * - * Fun fact: These values are just the bit-reverse of the low-nibble of the GL - * enumerant values (i.e., `GL_NOOP & 0x0f` is `b0101' while - * \c COLOR_LOGICOP_NOOP is `b1010`). - * - * Fun fact #2: These values are just an encoding of the operation as a table - * of bit values. The result of the logic op is: - * - * result_bit = (logic_op >> (2 * src_bit + dst_bit)) & 1 - * - * For the GL enums, the result is: - * - * result_bit = logic_op & (1 << (2 * src_bit + dst_bit)) - */ -enum gl_logicop_mode { - COLOR_LOGICOP_CLEAR = 0, - COLOR_LOGICOP_NOR = 1, - COLOR_LOGICOP_AND_INVERTED = 2, - COLOR_LOGICOP_COPY_INVERTED = 3, - COLOR_LOGICOP_AND_REVERSE = 4, - COLOR_LOGICOP_INVERT = 5, - COLOR_LOGICOP_XOR = 6, - COLOR_LOGICOP_NAND = 7, - COLOR_LOGICOP_AND = 8, - COLOR_LOGICOP_EQUIV = 9, - COLOR_LOGICOP_NOOP = 10, - COLOR_LOGICOP_OR_INVERTED = 11, - COLOR_LOGICOP_COPY = 12, - COLOR_LOGICOP_OR_REVERSE = 13, - COLOR_LOGICOP_OR = 14, - COLOR_LOGICOP_SET = 15 -}; - -/** - * Indexes for all renderbuffers - */ -typedef enum -{ - /* the four standard color buffers */ - BUFFER_FRONT_LEFT, - BUFFER_BACK_LEFT, - BUFFER_FRONT_RIGHT, - BUFFER_BACK_RIGHT, - BUFFER_DEPTH, - BUFFER_STENCIL, - BUFFER_ACCUM, - /* generic renderbuffers */ - BUFFER_COLOR0, - BUFFER_COLOR1, - BUFFER_COLOR2, - BUFFER_COLOR3, - BUFFER_COLOR4, - BUFFER_COLOR5, - BUFFER_COLOR6, - BUFFER_COLOR7, - BUFFER_COUNT, - BUFFER_NONE = -1, -} gl_buffer_index; - -typedef enum -{ - MAP_USER, - MAP_INTERNAL, - MAP_GLTHREAD, - MAP_COUNT -} gl_map_buffer_index; - -/** @{ - * - * These are a mapping of the GL_ARB_debug_output/GL_KHR_debug enums - * to small enums suitable for use as an array index. - */ - -enum mesa_debug_source -{ - MESA_DEBUG_SOURCE_API, - MESA_DEBUG_SOURCE_WINDOW_SYSTEM, - MESA_DEBUG_SOURCE_SHADER_COMPILER, - MESA_DEBUG_SOURCE_THIRD_PARTY, - MESA_DEBUG_SOURCE_APPLICATION, - MESA_DEBUG_SOURCE_OTHER, - MESA_DEBUG_SOURCE_COUNT -}; - -enum mesa_debug_type -{ - MESA_DEBUG_TYPE_ERROR, - MESA_DEBUG_TYPE_DEPRECATED, - MESA_DEBUG_TYPE_UNDEFINED, - MESA_DEBUG_TYPE_PORTABILITY, - MESA_DEBUG_TYPE_PERFORMANCE, - MESA_DEBUG_TYPE_OTHER, - MESA_DEBUG_TYPE_MARKER, - MESA_DEBUG_TYPE_PUSH_GROUP, - MESA_DEBUG_TYPE_POP_GROUP, - MESA_DEBUG_TYPE_COUNT -}; - -enum mesa_debug_severity -{ - MESA_DEBUG_SEVERITY_LOW, - MESA_DEBUG_SEVERITY_MEDIUM, - MESA_DEBUG_SEVERITY_HIGH, - MESA_DEBUG_SEVERITY_NOTIFICATION, - MESA_DEBUG_SEVERITY_COUNT -}; - -/** @} */ - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/mtypes.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/mtypes.h deleted file mode 100644 index 4bf581c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/mtypes.h +++ /dev/null @@ -1,3705 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 mtypes.h - * Main Mesa data structures. - * - * Please try to mark derived values with a leading underscore ('_'). - */ - -#ifndef MTYPES_H -#define MTYPES_H - - -#include /* uint32_t */ -#include -#include "../../../include/c11/threads.h" - -#include "glheader.h" -#include "consts_exts.h" -#include "shader_types.h" -#include "glconfig.h" -#include "menums.h" -#include "config.h" -#include "../../mapi/glapi/glapi.h" -#include "../math/m_matrix.h" /* GLmatrix */ -#include "../../compiler/shader_enums.h" -#include "../../compiler/shader_info.h" -#include "formats.h" /* MESA_FORMAT_COUNT */ -#include "../../util/list.h" -#include "../../compiler/glsl/ir_uniform.h" -#include "../../util/u_idalloc.h" -#include "../../util/simple_mtx.h" -#include "../../util/u_dynarray.h" -#include "../../util/mesa-sha1.h" -#include "../vbo/vbo.h" - -#include "../../gallium/include/pipe/p_state.h" - -#include "../../gallium/include/frontend/api.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define GET_COLORMASK_BIT(mask, buf, chan) (((mask) >> (4 * (buf) + (chan))) & 0x1) -#define GET_COLORMASK(mask, buf) (((mask) >> (4 * (buf))) & 0xf) - - -/** - * \name Some forward type declarations - */ -/*@{*/ -struct _mesa_HashTable; -struct gl_attrib_node; -struct gl_list_extensions; -struct gl_meta_state; -struct gl_program_cache; -struct gl_texture_object; -struct gl_debug_state; -struct gl_context; -struct st_context; -struct gl_uniform_storage; -struct prog_instruction; -struct gl_program_parameter_list; -struct gl_shader_spirv_data; -struct set; -struct shader_includes; -/*@}*/ - - -/** Extra draw modes beyond GL_POINTS, GL_TRIANGLE_FAN, etc */ -#define PRIM_MAX GL_PATCHES -#define PRIM_OUTSIDE_BEGIN_END (PRIM_MAX + 1) -#define PRIM_UNKNOWN (PRIM_MAX + 2) - -/** - * Bit flags for all renderbuffers - */ -#define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT) -#define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT) -#define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT) -#define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT) -#define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH) -#define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL) -#define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM) -#define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0) -#define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1) -#define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2) -#define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3) -#define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4) -#define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5) -#define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6) -#define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7) - -/** - * Mask of all the color buffer bits (but not accum). - */ -#define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \ - BUFFER_BIT_BACK_LEFT | \ - BUFFER_BIT_FRONT_RIGHT | \ - BUFFER_BIT_BACK_RIGHT | \ - BUFFER_BIT_COLOR0 | \ - BUFFER_BIT_COLOR1 | \ - BUFFER_BIT_COLOR2 | \ - BUFFER_BIT_COLOR3 | \ - BUFFER_BIT_COLOR4 | \ - BUFFER_BIT_COLOR5 | \ - BUFFER_BIT_COLOR6 | \ - BUFFER_BIT_COLOR7) - -/* Mask of bits for depth+stencil buffers */ -#define BUFFER_BITS_DEPTH_STENCIL (BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL) - - -#define FRONT_MATERIAL_BITS (MAT_BIT_FRONT_EMISSION | \ - MAT_BIT_FRONT_AMBIENT | \ - MAT_BIT_FRONT_DIFFUSE | \ - MAT_BIT_FRONT_SPECULAR | \ - MAT_BIT_FRONT_SHININESS | \ - MAT_BIT_FRONT_INDEXES) - -#define BACK_MATERIAL_BITS (MAT_BIT_BACK_EMISSION | \ - MAT_BIT_BACK_AMBIENT | \ - MAT_BIT_BACK_DIFFUSE | \ - MAT_BIT_BACK_SPECULAR | \ - MAT_BIT_BACK_SHININESS | \ - MAT_BIT_BACK_INDEXES) - -#define ALL_MATERIAL_BITS (FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS) -/*@}*/ - - -/** - * Material state. - */ -struct gl_material -{ - GLfloat Attrib[MAT_ATTRIB_MAX][4]; -}; - - -/** - * Light state flags. - */ -/*@{*/ -#define LIGHT_SPOT 0x1 -#define LIGHT_LOCAL_VIEWER 0x2 -#define LIGHT_POSITIONAL 0x4 -#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER) -/*@}*/ - - -/** - * Light source state. - */ -struct gl_light -{ - GLboolean Enabled; /**< On/off flag */ - - /** - * \name Derived fields - */ - /*@{*/ - GLbitfield _Flags; /**< Mask of LIGHT_x bits defined above */ - - GLfloat _Position[4]; /**< position in eye/obj coordinates */ - GLfloat _VP_inf_norm[3]; /**< Norm direction to infinite light */ - GLfloat _h_inf_norm[3]; /**< Norm( _VP_inf_norm + <0,0,1> ) */ - GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */ - GLfloat _VP_inf_spot_attenuation; - - GLfloat _MatAmbient[2][3]; /**< material ambient * light ambient */ - GLfloat _MatDiffuse[2][3]; /**< material diffuse * light diffuse */ - GLfloat _MatSpecular[2][3]; /**< material spec * light specular */ - /*@}*/ -}; - - -/** - * Light model state. - */ -struct gl_lightmodel -{ - GLfloat Ambient[4]; /**< ambient color */ - GLboolean LocalViewer; /**< Local (or infinite) view point? */ - GLboolean TwoSide; /**< Two (or one) sided lighting? */ - GLenum16 ColorControl; /**< either GL_SINGLE_COLOR - or GL_SEPARATE_SPECULAR_COLOR */ -}; - - -/** - * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT) - */ -struct gl_accum_attrib -{ - GLfloat ClearColor[4]; /**< Accumulation buffer clear color */ -}; - - -/** - * Used for storing clear color, texture border color, etc. - * The float values are typically unclamped. - */ -union gl_color_union -{ - GLfloat f[4]; - GLint i[4]; - GLuint ui[4]; -}; - - -/** - * Color buffer attribute group (GL_COLOR_BUFFER_BIT). - */ -struct gl_colorbuffer_attrib -{ - GLuint ClearIndex; /**< Index for glClear */ - union gl_color_union ClearColor; /**< Color for glClear, unclamped */ - GLuint IndexMask; /**< Color index write mask */ - - /** 4 colormask bits per draw buffer, max 8 draw buffers. 4*8 = 32 bits */ - GLbitfield ColorMask; - - GLenum16 DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */ - - /** - * \name alpha testing - */ - /*@{*/ - GLboolean AlphaEnabled; /**< Alpha test enabled flag */ - GLenum16 AlphaFunc; /**< Alpha test function */ - GLfloat AlphaRefUnclamped; - GLclampf AlphaRef; /**< Alpha reference value */ - /*@}*/ - - /** - * \name Blending - */ - /*@{*/ - GLbitfield BlendEnabled; /**< Per-buffer blend enable flags */ - - /* NOTE: this does _not_ depend on fragment clamping or any other clamping - * control, only on the fixed-pointness of the render target. - * The query does however depend on fragment color clamping. - */ - GLfloat BlendColorUnclamped[4]; /**< Blending color */ - GLfloat BlendColor[4]; /**< Blending color */ - - struct - { - GLenum16 SrcRGB; /**< RGB blend source term */ - GLenum16 DstRGB; /**< RGB blend dest term */ - GLenum16 SrcA; /**< Alpha blend source term */ - GLenum16 DstA; /**< Alpha blend dest term */ - GLenum16 EquationRGB; /**< GL_ADD, GL_SUBTRACT, etc. */ - GLenum16 EquationA; /**< GL_ADD, GL_SUBTRACT, etc. */ - } Blend[MAX_DRAW_BUFFERS]; - /** Bitfield of color buffers with enabled dual source blending. */ - GLbitfield _BlendUsesDualSrc; - /** Are the blend func terms currently different for each buffer/target? */ - GLboolean _BlendFuncPerBuffer; - /** Are the blend equations currently different for each buffer/target? */ - GLboolean _BlendEquationPerBuffer; - - /** - * Which advanced blending mode is in use (or BLEND_NONE). - * - * KHR_blend_equation_advanced only allows advanced blending with a single - * draw buffer, and NVX_blend_equation_advanced_multi_draw_buffer still - * requires all draw buffers to match, so we only need a single value. - */ - enum gl_advanced_blend_mode _AdvancedBlendMode; - - /** Coherency requested via glEnable(GL_BLEND_ADVANCED_COHERENT_KHR)? */ - bool BlendCoherent; - /*@}*/ - - /** - * \name Logic op - */ - /*@{*/ - GLboolean IndexLogicOpEnabled; /**< Color index logic op enabled flag */ - GLboolean ColorLogicOpEnabled; /**< RGBA logic op enabled flag */ - GLenum16 LogicOp; /**< Logic operator */ - enum gl_logicop_mode _LogicOp; - /*@}*/ - - GLboolean DitherFlag; /**< Dither enable flag */ - - GLboolean _ClampFragmentColor; /** < with GL_FIXED_ONLY_ARB resolved */ - GLenum16 ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ - GLenum16 ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ - - GLboolean sRGBEnabled; /**< Framebuffer sRGB blending/updating requested */ -}; - -/** - * Vertex format to describe a vertex element. - */ -struct gl_vertex_format -{ - //union gl_vertex_format_user User; - enum pipe_format _PipeFormat:16; /**< pipe_format for Gallium */ - GLushort _ElementSize; /**< Size of each element in bytes */ -}; - - -/** - * Current attribute group (GL_CURRENT_BIT). - */ -struct gl_current_attrib -{ - /** - * \name Current vertex attributes (color, texcoords, etc). - * \note Values are valid only after FLUSH_VERTICES has been called. - * \note Index and Edgeflag current values are stored as floats in the - * SIX and SEVEN attribute slots. - * \note We need double storage for 64-bit vertex attributes - */ - GLfloat Attrib[VERT_ATTRIB_MAX][4*2]; - - /** - * \name Current raster position attributes (always up to date after a - * glRasterPos call). - */ - GLfloat RasterPos[4]; - GLfloat RasterDistance; - GLfloat RasterColor[4]; - GLfloat RasterSecondaryColor[4]; - GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4]; - GLboolean RasterPosValid; -}; - - -/** - * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT). - */ -struct gl_depthbuffer_attrib -{ - GLenum16 Func; /**< Function for depth buffer compare */ - GLclampd Clear; /**< Value to clear depth buffer to */ - GLboolean Test; /**< Depth buffering enabled flag */ - GLboolean Mask; /**< Depth buffer writable? */ - GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */ - GLclampd BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */ -}; - - -/** - * Evaluator attribute group (GL_EVAL_BIT). - */ -struct gl_eval_attrib -{ - /** - * \name Enable bits - */ - /*@{*/ - GLboolean Map1Color4; - GLboolean Map1Index; - GLboolean Map1Normal; - GLboolean Map1TextureCoord1; - GLboolean Map1TextureCoord2; - GLboolean Map1TextureCoord3; - GLboolean Map1TextureCoord4; - GLboolean Map1Vertex3; - GLboolean Map1Vertex4; - GLboolean Map2Color4; - GLboolean Map2Index; - GLboolean Map2Normal; - GLboolean Map2TextureCoord1; - GLboolean Map2TextureCoord2; - GLboolean Map2TextureCoord3; - GLboolean Map2TextureCoord4; - GLboolean Map2Vertex3; - GLboolean Map2Vertex4; - GLboolean AutoNormal; - /*@}*/ - - /** - * \name Map Grid endpoints and divisions and calculated du values - */ - /*@{*/ - GLint MapGrid1un; - GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du; - GLint MapGrid2un, MapGrid2vn; - GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du; - GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv; - /*@}*/ -}; - - -/** - * Compressed fog mode. - */ -enum gl_fog_mode -{ - FOG_NONE, - FOG_LINEAR, - FOG_EXP, - FOG_EXP2, -}; - - -/** - * Fog attribute group (GL_FOG_BIT). - */ -struct gl_fog_attrib -{ - GLboolean Enabled; /**< Fog enabled flag */ - GLboolean ColorSumEnabled; - uint8_t _PackedMode; /**< Fog mode as 2 bits */ - uint8_t _PackedEnabledMode; /**< Masked CompressedMode */ - GLfloat ColorUnclamped[4]; /**< Fog color */ - GLfloat Color[4]; /**< Fog color */ - GLfloat Density; /**< Density >= 0.0 */ - GLfloat Start; /**< Start distance in eye coords */ - GLfloat End; /**< End distance in eye coords */ - GLfloat Index; /**< Fog index */ - GLenum16 Mode; /**< Fog mode */ - GLenum16 FogCoordinateSource;/**< GL_EXT_fog_coord */ - GLenum16 FogDistanceMode; /**< GL_NV_fog_distance */ -}; - - -/** - * Hint attribute group (GL_HINT_BIT). - * - * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE. - */ -struct gl_hint_attrib -{ - GLenum16 PerspectiveCorrection; - GLenum16 PointSmooth; - GLenum16 LineSmooth; - GLenum16 PolygonSmooth; - GLenum16 Fog; - GLenum16 TextureCompression; /**< GL_ARB_texture_compression */ - GLenum16 GenerateMipmap; /**< GL_SGIS_generate_mipmap */ - GLenum16 FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ - GLuint MaxShaderCompilerThreads; /**< GL_ARB_parallel_shader_compile */ -}; - - -struct gl_light_uniforms { - /* These must be in the same order as the STATE_* enums, - * which should also match the order of gl_LightSource members. - */ - GLfloat Ambient[4]; /**< STATE_AMBIENT */ - GLfloat Diffuse[4]; /**< STATE_DIFFUSE */ - GLfloat Specular[4]; /**< STATE_SPECULAR */ - GLfloat EyePosition[4]; /**< STATE_POSITION in eye coordinates */ - GLfloat _HalfVector[4]; /**< STATE_HALF_VECTOR */ - GLfloat SpotDirection[3]; /**< STATE_SPOT_DIRECTION in eye coordinates */ - GLfloat _CosCutoff; /**< = MAX(0, cos(SpotCutoff)) */ - GLfloat ConstantAttenuation; /**< STATE_ATTENUATION */ - GLfloat LinearAttenuation; - GLfloat QuadraticAttenuation; - GLfloat SpotExponent; - GLfloat SpotCutoff; /**< STATE_SPOT_CUTOFF in degrees */ -}; - - -/** - * Lighting attribute group (GL_LIGHT_BIT). - */ -struct gl_light_attrib -{ - /* gl_LightSource uniforms */ - union { - struct gl_light_uniforms LightSource[MAX_LIGHTS]; - GLfloat LightSourceData[(sizeof(struct gl_light_uniforms) / 4) * MAX_LIGHTS]; - }; - - struct gl_light Light[MAX_LIGHTS]; /**< Array of light sources */ - struct gl_lightmodel Model; /**< Lighting model */ - - /** - * Front and back material values. - * Note: must call FLUSH_VERTICES() before using. - */ - struct gl_material Material; - - GLboolean Enabled; /**< Lighting enabled flag */ - GLboolean ColorMaterialEnabled; - - GLenum16 ShadeModel; /**< GL_FLAT or GL_SMOOTH */ - GLenum16 ProvokingVertex; /**< GL_EXT_provoking_vertex */ - GLenum16 ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */ - GLenum16 ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */ - GLbitfield _ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ - - - GLboolean _ClampVertexColor; - GLenum16 ClampVertexColor; /**< GL_TRUE, GL_FALSE, GL_FIXED_ONLY */ - - /** - * Derived state for optimizations: - */ - /*@{*/ - GLbitfield _EnabledLights; /**< bitmask containing enabled lights */ - - GLboolean _NeedEyeCoords; - GLboolean _NeedVertices; /**< Use fast shader? */ - - GLfloat _BaseColor[2][3]; - /*@}*/ -}; - - -/** - * Line attribute group (GL_LINE_BIT). - */ -struct gl_line_attrib -{ - GLboolean SmoothFlag; /**< GL_LINE_SMOOTH enabled? */ - GLboolean StippleFlag; /**< GL_LINE_STIPPLE enabled? */ - GLushort StipplePattern; /**< Stipple pattern */ - GLint StippleFactor; /**< Stipple repeat factor */ - GLfloat Width; /**< Line width */ -}; - - -/** - * Display list attribute group (GL_LIST_BIT). - */ -struct gl_list_attrib -{ - GLuint ListBase; -}; - - -/** - * Multisample attribute group (GL_MULTISAMPLE_BIT). - */ -struct gl_multisample_attrib -{ - GLboolean Enabled; - GLboolean SampleAlphaToCoverage; - GLboolean SampleAlphaToOne; - GLboolean SampleCoverage; - GLboolean SampleCoverageInvert; - GLboolean SampleShading; - - /* ARB_texture_multisample / GL3.2 additions */ - GLboolean SampleMask; - - GLfloat SampleCoverageValue; /**< In range [0, 1] */ - GLfloat MinSampleShadingValue; /**< In range [0, 1] */ - - /** The GL spec defines this as an array but >32x MSAA is madness */ - GLbitfield SampleMaskValue; - - /* NV_alpha_to_coverage_dither_control */ - GLenum SampleAlphaToCoverageDitherControl; -}; - - -/** - * A pixelmap (see glPixelMap) - */ -struct gl_pixelmap -{ - GLint Size; - GLfloat Map[MAX_PIXEL_MAP_TABLE]; -}; - - -/** - * Collection of all pixelmaps - */ -struct gl_pixelmaps -{ - struct gl_pixelmap RtoR; /**< i.e. GL_PIXEL_MAP_R_TO_R */ - struct gl_pixelmap GtoG; - struct gl_pixelmap BtoB; - struct gl_pixelmap AtoA; - struct gl_pixelmap ItoR; - struct gl_pixelmap ItoG; - struct gl_pixelmap ItoB; - struct gl_pixelmap ItoA; - struct gl_pixelmap ItoI; - struct gl_pixelmap StoS; -}; - - -/** - * Pixel attribute group (GL_PIXEL_MODE_BIT). - */ -struct gl_pixel_attrib -{ - GLenum16 ReadBuffer; /**< source buffer for glRead/CopyPixels() */ - - /*--- Begin Pixel Transfer State ---*/ - /* Fields are in the order in which they're applied... */ - - /** Scale & Bias (index shift, offset) */ - /*@{*/ - GLfloat RedBias, RedScale; - GLfloat GreenBias, GreenScale; - GLfloat BlueBias, BlueScale; - GLfloat AlphaBias, AlphaScale; - GLfloat DepthBias, DepthScale; - GLint IndexShift, IndexOffset; - /*@}*/ - - /* Pixel Maps */ - /* Note: actual pixel maps are not part of this attrib group */ - GLboolean MapColorFlag; - GLboolean MapStencilFlag; - - /*--- End Pixel Transfer State ---*/ - - /** glPixelZoom */ - GLfloat ZoomX, ZoomY; -}; - - -/** - * Point attribute group (GL_POINT_BIT). - */ -struct gl_point_attrib -{ - GLfloat Size; /**< User-specified point size */ - GLfloat Params[3]; /**< GL_EXT_point_parameters */ - GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */ - GLfloat Threshold; /**< GL_EXT_point_parameters */ - GLboolean SmoothFlag; /**< True if GL_POINT_SMOOTH is enabled */ - GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */ - GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */ - GLbitfield CoordReplace; /**< GL_ARB_point_sprite*/ - GLenum16 SpriteOrigin; /**< GL_ARB_point_sprite */ -}; - - -/** - * Polygon attribute group (GL_POLYGON_BIT). - */ -struct gl_polygon_attrib -{ - GLenum16 FrontFace; /**< Either GL_CW or GL_CCW */ - GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ - GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ - GLboolean CullFlag; /**< Culling on/off flag */ - GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */ - GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */ - GLenum16 CullFaceMode; /**< Culling mode GL_FRONT or GL_BACK */ - GLfloat OffsetFactor; /**< Polygon offset factor, from user */ - GLfloat OffsetUnits; /**< Polygon offset units, from user */ - GLfloat OffsetClamp; /**< Polygon offset clamp, from user */ - GLboolean OffsetPoint; /**< Offset in GL_POINT mode */ - GLboolean OffsetLine; /**< Offset in GL_LINE mode */ - GLboolean OffsetFill; /**< Offset in GL_FILL mode */ -}; - - -/** - * Scissor attributes (GL_SCISSOR_BIT). - */ -struct gl_scissor_rect -{ - GLint X, Y; /**< Lower left corner of box */ - GLsizei Width, Height; /**< Size of box */ -}; - - -struct gl_scissor_attrib -{ - GLbitfield EnableFlags; /**< Scissor test enabled? */ - struct gl_scissor_rect ScissorArray[MAX_VIEWPORTS]; - GLint NumWindowRects; /**< Count of enabled window rectangles */ - GLenum16 WindowRectMode; /**< Whether to include or exclude the rects */ - struct gl_scissor_rect WindowRects[MAX_WINDOW_RECTANGLES]; -}; - - -/** - * Stencil attribute group (GL_STENCIL_BUFFER_BIT). - * - * Three sets of stencil data are tracked so that OpenGL 2.0, - * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported - * simultaneously. In each of the stencil state arrays, element 0 corresponds - * to GL_FRONT. Element 1 corresponds to the OpenGL 2.0 / - * GL_ATI_separate_stencil GL_BACK state. Element 2 corresponds to the - * GL_EXT_stencil_two_side GL_BACK state. - * - * The derived value \c _BackFace is either 1 or 2 depending on whether or - * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled. - * - * The derived value \c _TestTwoSide is set when the front-face and back-face - * stencil state are different. - */ -struct gl_stencil_attrib -{ - GLboolean Enabled; /**< Enabled flag */ - GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ - GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ - GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ - GLenum16 Function[3]; /**< Stencil function */ - GLenum16 FailFunc[3]; /**< Fail function */ - GLenum16 ZPassFunc[3]; /**< Depth buffer pass function */ - GLenum16 ZFailFunc[3]; /**< Depth buffer fail function */ - GLint Ref[3]; /**< Reference value */ - GLuint ValueMask[3]; /**< Value mask */ - GLuint WriteMask[3]; /**< Write mask */ - GLuint Clear; /**< Clear value */ -}; - - -/** - * Bit flags for each type of texture object - */ -/*@{*/ -#define TEXTURE_2D_MULTISAMPLE_BIT (1 << TEXTURE_2D_MULTISAMPLE_INDEX) -#define TEXTURE_2D_MULTISAMPLE_ARRAY_BIT (1 << TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX) -#define TEXTURE_CUBE_ARRAY_BIT (1 << TEXTURE_CUBE_ARRAY_INDEX) -#define TEXTURE_BUFFER_BIT (1 << TEXTURE_BUFFER_INDEX) -#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) -#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) -#define TEXTURE_EXTERNAL_BIT (1 << TEXTURE_EXTERNAL_INDEX) -#define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX) -#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) -#define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX) -#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) -#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) -/*@}*/ - - -/** - * Texture image state. Drivers will typically create a subclass of this - * with extra fields for memory buffers, etc. - */ -struct gl_texture_image -{ - GLint InternalFormat; /**< Internal format as given by the user */ - GLenum16 _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, - * GL_LUMINANCE, GL_LUMINANCE_ALPHA, - * GL_INTENSITY, GL_DEPTH_COMPONENT or - * GL_DEPTH_STENCIL_EXT only. Used for - * choosing TexEnv arithmetic. - */ - mesa_format TexFormat; /**< The actual texture memory format */ - - GLuint Border; /**< 0 or 1 */ - GLuint Width; /**< = 2^WidthLog2 + 2*Border */ - GLuint Height; /**< = 2^HeightLog2 + 2*Border */ - GLuint Depth; /**< = 2^DepthLog2 + 2*Border */ - GLuint Width2; /**< = Width - 2*Border */ - GLuint Height2; /**< = Height - 2*Border */ - GLuint Depth2; /**< = Depth - 2*Border */ - GLuint WidthLog2; /**< = log2(Width2) */ - GLuint HeightLog2; /**< = log2(Height2) */ - GLuint DepthLog2; /**< = log2(Depth2) */ - GLuint MaxNumLevels; /**< = maximum possible number of mipmap - levels, computed from the dimensions */ - - struct gl_texture_object *TexObject; /**< Pointer back to parent object */ - GLuint Level; /**< Which mipmap level am I? */ - /** Cube map face: index into gl_texture_object::Image[] array */ - GLuint Face; - - unsigned FormatSwizzle; - unsigned FormatSwizzleGLSL130; //for depth formats - - /** GL_ARB_texture_multisample */ - GLuint NumSamples; /**< Sample count, or 0 for non-multisample */ - GLboolean FixedSampleLocations; /**< Same sample locations for all pixels? */ - - /* If stImage->pt != NULL, image data is stored here. - * Else there is no image data. - */ - struct pipe_resource *pt; - - /* List of transfers, allocated on demand. - * transfer[layer] is a mapping for that layer. - */ - struct st_texture_image_transfer *transfer; - unsigned num_transfers; - - /* For compressed images unsupported by the driver. Keep track of - * the original data. This is necessary for mapping/unmapping, - * as well as image copies. - */ - struct st_compressed_data* compressed_data; -}; - - -/** - * Indexes for cube map faces. - */ -typedef enum -{ - FACE_POS_X = 0, - FACE_NEG_X = 1, - FACE_POS_Y = 2, - FACE_NEG_Y = 3, - FACE_POS_Z = 4, - FACE_NEG_Z = 5, - MAX_FACES = 6 -} gl_face_index; - -/** - * Sampler state saved and restore by glPush/PopAttrib. - * - * Don't put fields here that glPushAttrib shouldn't save. - * E.g. no GLES fields because GLES doesn't have glPushAttrib. - */ -struct gl_sampler_attrib -{ - GLenum16 WrapS; /**< S-axis texture image wrap mode */ - GLenum16 WrapT; /**< T-axis texture image wrap mode */ - GLenum16 WrapR; /**< R-axis texture image wrap mode */ - GLenum16 MinFilter; /**< minification filter */ - GLenum16 MagFilter; /**< magnification filter */ - GLenum16 sRGBDecode; /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */ - GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ - GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */ - GLfloat LodBias; /**< OpenGL 1.4 */ - GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ - GLenum16 CompareMode; /**< GL_ARB_shadow */ - GLenum16 CompareFunc; /**< GL_ARB_shadow */ - GLboolean CubeMapSeamless; /**< GL_AMD_seamless_cubemap_per_texture */ - GLboolean IsBorderColorNonZero; /**< Does the border color have any effect? */ - GLenum16 ReductionMode; /**< GL_EXT_texture_filter_minmax */ - - struct pipe_sampler_state state; /**< Gallium representation */ -}; - -/** - * Texture state saved and restored by glPush/PopAttrib. - * - * Don't put fields here that glPushAttrib shouldn't save. - * E.g. no GLES fields because GLES doesn't have glPushAttrib. - */ -struct gl_texture_object_attrib -{ - GLfloat Priority; /**< in [0,1] */ - GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */ - GLint MaxLevel; /**< max mipmap level (max=1000), OpenGL 1.2 */ - GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */ - GLushort _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */ - GLenum16 DepthMode; /**< GL_ARB_depth_texture */ - GLenum16 ImageFormatCompatibilityType; /**< GL_ARB_shader_image_load_store */ - GLushort MinLayer; /**< GL_ARB_texture_view */ - GLushort NumLayers; /**< GL_ARB_texture_view */ - GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ - GLbyte ImmutableLevels; /**< ES 3.0 / ARB_texture_view */ - GLubyte MinLevel; /**< GL_ARB_texture_view */ - GLubyte NumLevels; /**< GL_ARB_texture_view */ -}; - - -typedef enum -{ - WRAP_S = (1<<0), - WRAP_T = (1<<1), - WRAP_R = (1<<2), -} gl_sampler_wrap; - -/** - * Sampler object state. These objects are new with GL_ARB_sampler_objects - * and OpenGL 3.3. Legacy texture objects also contain a sampler object. - */ -struct gl_sampler_object -{ - GLuint Name; - GLchar *Label; /**< GL_KHR_debug */ - GLint RefCount; - - struct gl_sampler_attrib Attrib; /**< State saved by glPushAttrib */ - - uint8_t glclamp_mask; /**< mask of GL_CLAMP wraps active */ - - /** GL_ARB_bindless_texture */ - bool HandleAllocated; - struct util_dynarray Handles; -}; - -/** - * YUV color space that should be used to sample textures backed by YUV - * images. - */ -enum gl_texture_yuv_color_space -{ - GL_TEXTURE_YUV_COLOR_SPACE_REC601, - GL_TEXTURE_YUV_COLOR_SPACE_REC709, - GL_TEXTURE_YUV_COLOR_SPACE_REC2020, -}; - -/** - * Texture object state. Contains the array of mipmap images, border color, - * wrap modes, filter modes, and shadow/texcompare state. - */ -struct gl_texture_object -{ - GLint RefCount; /**< reference count */ - GLuint Name; /**< the user-visible texture object ID */ - GLenum16 Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ - GLchar *Label; /**< GL_KHR_debug */ - - struct gl_sampler_object Sampler; - struct gl_texture_object_attrib Attrib; /**< State saved by glPushAttrib */ - - gl_texture_index TargetIndex; /**< The gl_texture_unit::CurrentTex index. - Only valid when Target is valid. */ - GLbyte _MaxLevel; /**< actual max mipmap level (q in the spec) */ - GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - p in spec) */ - GLint CropRect[4]; /**< GL_OES_draw_texture */ - GLboolean _BaseComplete; /**< Is the base texture level valid? */ - GLboolean _MipmapComplete; /**< Is the whole mipmap valid? */ - GLboolean _IsIntegerFormat; /**< Does the texture store integer values? */ - GLboolean _RenderToTexture; /**< Any rendering to this texture? */ - GLboolean Immutable; /**< GL_ARB_texture_storage */ - GLboolean _IsFloat; /**< GL_OES_float_texture */ - GLboolean _IsHalfFloat; /**< GL_OES_half_float_texture */ - bool HandleAllocated; /**< GL_ARB_bindless_texture */ - - /* This should not be restored by glPopAttrib: */ - bool StencilSampling; /**< Should we sample stencil instead of depth? */ - - /** GL_OES_EGL_image_external */ - GLboolean External; - GLubyte RequiredTextureImageUnits; - - GLboolean NullTexture; /**< this texture is incomplete and should be passed to the driver as NULL */ - - /** GL_EXT_memory_object */ - GLenum16 TextureTiling; - - /** GL_ARB_texture_buffer_object */ - GLenum16 BufferObjectFormat; - /** Equivalent Mesa format for BufferObjectFormat. */ - mesa_format _BufferObjectFormat; - /* TODO: BufferObject->Name should be restored by glPopAttrib(GL_TEXTURE_BIT); */ - struct gl_buffer_object *BufferObject; - - /** GL_ARB_texture_buffer_range */ - GLintptr BufferOffset; - GLsizeiptr BufferSize; /**< if this is -1, use BufferObject->Size instead */ - - /** Actual texture images, indexed by [cube face] and [mipmap level] */ - struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS]; - - /** GL_ARB_bindless_texture */ - struct util_dynarray SamplerHandles; - struct util_dynarray ImageHandles; - - /** GL_ARB_sparse_texture */ - GLboolean IsSparse; - GLint VirtualPageSizeIndex; - GLint NumSparseLevels; - - /* The texture must include at levels [0..lastLevel] once validated: - */ - GLuint lastLevel; - - unsigned Swizzle; - unsigned SwizzleGLSL130; - - unsigned int validated_first_level; - unsigned int validated_last_level; - - /* On validation any active images held in main memory or in other - * textures will be copied to this texture and the old storage freed. - */ - struct pipe_resource *pt; - - /* Protect modifications of the sampler_views array */ - simple_mtx_t validate_mutex; - - /* Container of sampler views (one per context) attached to this texture - * object. Created lazily on first binding in context. - * - * Purely read-only accesses to the current context's own sampler view - * require no locking. Another thread may simultaneously replace the - * container object in order to grow the array, but the old container will - * be kept alive. - * - * Writing to the container (even for modifying the current context's own - * sampler view) always requires taking the validate_mutex to protect against - * concurrent container switches. - * - * NULL'ing another context's sampler view is allowed only while - * implementing an API call that modifies the texture: an application which - * calls those while simultaneously reading the texture in another context - * invokes undefined behavior. (TODO: a dubious violation of this rule is - * st_finalize_texture, which is a lazy operation that corresponds to a - * texture modification.) - */ - struct st_sampler_views *sampler_views; - - /* Old sampler views container objects that have not been freed yet because - * other threads/contexts may still be reading from them. - */ - struct st_sampler_views *sampler_views_old; - - /* True if this texture comes from the window system. Such a texture - * cannot be reallocated and the format can only be changed with a sampler - * view or a surface. - */ - GLboolean surface_based; - - /* If surface_based is true, this format should be used for all sampler - * views and surfaces instead of pt->format. - */ - enum pipe_format surface_format; - - /* If surface_based is true and surface_format is a YUV format, these - * settings should be used to convert from YUV to RGB. - */ - enum gl_texture_yuv_color_space yuv_color_space; - bool yuv_full_range; - - /* When non-negative, samplers should use this level instead of the level - * range specified by the GL state. - * - * This is used for EGL images, which may correspond to a single level out - * of an imported pipe_resources with multiple mip levels. - */ - int level_override; - - /* When non-negative, samplers should use this layer instead of the one - * specified by the GL state. - * - * This is used for EGL images and VDPAU interop, where imported - * pipe_resources may be cube, 3D, or array textures (containing layers - * with different fields in the case of VDPAU) even though the GL state - * describes one non-array texture per field. - */ - int layer_override; - - /** - * Set when the texture images of this texture object might not all be in - * the pipe_resource *pt above. - */ - bool needs_validation; -}; - - -/** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */ -#define MAX_COMBINER_TERMS 4 - - -/** - * Texture combine environment state. - */ -struct gl_tex_env_combine_state -{ - GLenum16 ModeRGB; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ - GLenum16 ModeA; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ - /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */ - GLenum16 SourceRGB[MAX_COMBINER_TERMS]; - GLenum16 SourceA[MAX_COMBINER_TERMS]; - /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */ - GLenum16 OperandRGB[MAX_COMBINER_TERMS]; - GLenum16 OperandA[MAX_COMBINER_TERMS]; - GLubyte ScaleShiftRGB; /**< 0, 1 or 2 */ - GLubyte ScaleShiftA; /**< 0, 1 or 2 */ - GLubyte _NumArgsRGB; /**< Number of inputs used for the RGB combiner */ - GLubyte _NumArgsA; /**< Number of inputs used for the A combiner */ -}; - - -/** Compressed TexEnv effective Combine mode */ -enum gl_tex_env_mode -{ - TEXENV_MODE_REPLACE, /* r = a0 */ - TEXENV_MODE_MODULATE, /* r = a0 * a1 */ - TEXENV_MODE_ADD, /* r = a0 + a1 */ - TEXENV_MODE_ADD_SIGNED, /* r = a0 + a1 - 0.5 */ - TEXENV_MODE_INTERPOLATE, /* r = a0 * a2 + a1 * (1 - a2) */ - TEXENV_MODE_SUBTRACT, /* r = a0 - a1 */ - TEXENV_MODE_DOT3_RGB, /* r = a0 . a1 */ - TEXENV_MODE_DOT3_RGB_EXT, /* r = a0 . a1 */ - TEXENV_MODE_DOT3_RGBA, /* r = a0 . a1 */ - TEXENV_MODE_DOT3_RGBA_EXT, /* r = a0 . a1 */ - TEXENV_MODE_MODULATE_ADD_ATI, /* r = a0 * a2 + a1 */ - TEXENV_MODE_MODULATE_SIGNED_ADD_ATI, /* r = a0 * a2 + a1 - 0.5 */ - TEXENV_MODE_MODULATE_SUBTRACT_ATI, /* r = a0 * a2 - a1 */ - TEXENV_MODE_ADD_PRODUCTS_NV, /* r = a0 * a1 + a2 * a3 */ - TEXENV_MODE_ADD_PRODUCTS_SIGNED_NV, /* r = a0 * a1 + a2 * a3 - 0.5 */ -}; - - -/** Compressed TexEnv Combine source */ -enum gl_tex_env_source -{ - TEXENV_SRC_TEXTURE0, - TEXENV_SRC_TEXTURE1, - TEXENV_SRC_TEXTURE2, - TEXENV_SRC_TEXTURE3, - TEXENV_SRC_TEXTURE4, - TEXENV_SRC_TEXTURE5, - TEXENV_SRC_TEXTURE6, - TEXENV_SRC_TEXTURE7, - TEXENV_SRC_TEXTURE, - TEXENV_SRC_PREVIOUS, - TEXENV_SRC_PRIMARY_COLOR, - TEXENV_SRC_CONSTANT, - TEXENV_SRC_ZERO, - TEXENV_SRC_ONE, -}; - - -/** Compressed TexEnv Combine operand */ -enum gl_tex_env_operand -{ - TEXENV_OPR_COLOR, - TEXENV_OPR_ONE_MINUS_COLOR, - TEXENV_OPR_ALPHA, - TEXENV_OPR_ONE_MINUS_ALPHA, -}; - - -/** Compressed TexEnv Combine argument */ -struct gl_tex_env_argument -{ -#ifdef __GNUC__ - __extension__ uint8_t Source:4; /**< TEXENV_SRC_x */ - __extension__ uint8_t Operand:2; /**< TEXENV_OPR_x */ -#else - uint8_t Source; /**< SRC_x */ - uint8_t Operand; /**< OPR_x */ -#endif -}; - - -/*** - * Compressed TexEnv Combine state. - */ -struct gl_tex_env_combine_packed -{ - uint32_t ModeRGB:4; /**< Effective mode for RGB as 4 bits */ - uint32_t ModeA:4; /**< Effective mode for RGB as 4 bits */ - uint32_t ScaleShiftRGB:2; /**< 0, 1 or 2 */ - uint32_t ScaleShiftA:2; /**< 0, 1 or 2 */ - uint32_t NumArgsRGB:3; /**< Number of inputs used for the RGB combiner */ - uint32_t NumArgsA:3; /**< Number of inputs used for the A combiner */ - /** Source arguments in a packed manner */ - struct gl_tex_env_argument ArgsRGB[MAX_COMBINER_TERMS]; - struct gl_tex_env_argument ArgsA[MAX_COMBINER_TERMS]; -}; - - -/** - * TexGenEnabled flags. - */ -/*@{*/ -#define S_BIT 1 -#define T_BIT 2 -#define R_BIT 4 -#define Q_BIT 8 -#define STR_BITS (S_BIT | T_BIT | R_BIT) -/*@}*/ - - -/** - * Bit flag versions of the corresponding GL_ constants. - */ -/*@{*/ -#define TEXGEN_SPHERE_MAP 0x1 -#define TEXGEN_OBJ_LINEAR 0x2 -#define TEXGEN_EYE_LINEAR 0x4 -#define TEXGEN_REFLECTION_MAP_NV 0x8 -#define TEXGEN_NORMAL_MAP_NV 0x10 - -#define TEXGEN_NEED_NORMALS (TEXGEN_SPHERE_MAP | \ - TEXGEN_REFLECTION_MAP_NV | \ - TEXGEN_NORMAL_MAP_NV) -#define TEXGEN_NEED_EYE_COORD (TEXGEN_SPHERE_MAP | \ - TEXGEN_REFLECTION_MAP_NV | \ - TEXGEN_NORMAL_MAP_NV | \ - TEXGEN_EYE_LINEAR) -/*@}*/ - - - -/** Tex-gen enabled for texture unit? */ -#define ENABLE_TEXGEN(unit) (1 << (unit)) - -/** Non-identity texture matrix for texture unit? */ -#define ENABLE_TEXMAT(unit) (1 << (unit)) - - -/** - * Texture coord generation state. - */ -struct gl_texgen -{ - GLenum16 Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */ - GLbitfield8 _ModeBit; /**< TEXGEN_x bit corresponding to Mode */ -}; - - -/** - * Sampler-related subset of a texture unit, like current texture objects. - */ -struct gl_texture_unit -{ - GLfloat LodBias; /**< for biasing mipmap levels */ - float LodBiasQuantized; /**< to reduce pipe_sampler_state variants */ - - /** Texture targets that have a non-default texture bound */ - GLbitfield _BoundTextures; - - /** Current sampler object (GL_ARB_sampler_objects) */ - struct gl_sampler_object *Sampler; - - /** Current texture object pointers */ - struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; - - /** Points to highest priority, complete and enabled texture object */ - struct gl_texture_object *_Current; -}; - -enum { - GEN_S, - GEN_T, - GEN_R, - GEN_Q, - NUM_GEN, -}; - -/** - * Fixed-function-related subset of a texture unit, like enable flags, - * texture environment/function/combiners, and texgen state. - */ -struct gl_fixedfunc_texture_unit -{ - GLbitfield16 Enabled; /**< bitmask of TEXTURE_*_BIT flags */ - - GLenum16 EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ - GLclampf EnvColor[4]; - GLfloat EnvColorUnclamped[4]; - - struct gl_texgen GenS; - struct gl_texgen GenT; - struct gl_texgen GenR; - struct gl_texgen GenQ; - - GLfloat EyePlane[NUM_GEN][4]; - GLfloat ObjectPlane[NUM_GEN][4]; - - GLbitfield8 TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ - GLbitfield8 _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */ - - /** - * \name GL_EXT_texture_env_combine - */ - struct gl_tex_env_combine_state Combine; - - /** - * Derived state based on \c EnvMode and the \c BaseFormat of the - * currently enabled texture. - */ - struct gl_tex_env_combine_state _EnvMode; - - /** Current compressed TexEnv & Combine state */ - struct gl_tex_env_combine_packed _CurrentCombinePacked; - - /** - * Currently enabled combiner state. This will point to either - * \c Combine or \c _EnvMode. - */ - struct gl_tex_env_combine_state *_CurrentCombine; -}; - - -/** - * Texture attribute group (GL_TEXTURE_BIT). - */ -struct gl_texture_attrib -{ - struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS]; - - /** GL_ARB_texture_buffer_object */ - struct gl_buffer_object *BufferObject; - - GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ - - /** Texture coord units/sets used for fragment texturing */ - GLbitfield8 _EnabledCoordUnits; - - /** Texture coord units that have texgen enabled */ - GLbitfield8 _TexGenEnabled; - - /** Texture coord units that have non-identity matrices */ - GLbitfield8 _TexMatEnabled; - - /** Bitwise-OR of all Texture.Unit[i]._GenFlags */ - GLbitfield8 _GenFlags; - - /** Largest index of a texture unit with _Current != NULL. */ - GLshort _MaxEnabledTexImageUnit; - - /** Largest index + 1 of texture units that have had any CurrentTex set. */ - GLubyte NumCurrentTexUsed; - - /** GL_ARB_seamless_cubemap */ - GLboolean CubeMapSeamless; - - struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; - struct gl_fixedfunc_texture_unit FixedFuncUnit[MAX_TEXTURE_COORD_UNITS]; -}; - - -/** - * Data structure representing a single clip plane (e.g. one of the elements - * of the ctx->Transform.EyeUserPlane or ctx->Transform._ClipUserPlane array). - */ -typedef GLfloat gl_clip_plane[4]; - - -/** - * Transformation attribute group (GL_TRANSFORM_BIT). - */ -struct gl_transform_attrib -{ - GLenum16 MatrixMode; /**< Matrix mode */ - gl_clip_plane EyeUserPlane[MAX_CLIP_PLANES]; /**< User clip planes */ - gl_clip_plane _ClipUserPlane[MAX_CLIP_PLANES]; /**< derived */ - GLbitfield ClipPlanesEnabled; /**< on/off bitmask */ - GLboolean Normalize; /**< Normalize all normals? */ - GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ - GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ - GLboolean DepthClampNear; /**< GL_AMD_depth_clamp_separate */ - GLboolean DepthClampFar; /**< GL_AMD_depth_clamp_separate */ - /** GL_ARB_clip_control */ - GLenum16 ClipOrigin; /**< GL_LOWER_LEFT or GL_UPPER_LEFT */ - GLenum16 ClipDepthMode;/**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */ -}; - - -/** - * Viewport attribute group (GL_VIEWPORT_BIT). - */ -struct gl_viewport_attrib -{ - GLfloat X, Y; /**< position */ - GLfloat Width, Height; /**< size */ - GLfloat Near, Far; /**< Depth buffer range */ - - /**< GL_NV_viewport_swizzle */ - GLenum16 SwizzleX, SwizzleY, SwizzleZ, SwizzleW; -}; - - -/** - * Fields describing a mapped buffer range. - */ -struct gl_buffer_mapping -{ - GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */ - GLvoid *Pointer; /**< User-space address of mapping */ - GLintptr Offset; /**< Mapped offset */ - GLsizeiptr Length; /**< Mapped length */ -}; - - -/** - * Usages we've seen for a buffer object. - */ -typedef enum -{ - USAGE_UNIFORM_BUFFER = 0x1, - USAGE_TEXTURE_BUFFER = 0x2, - USAGE_ATOMIC_COUNTER_BUFFER = 0x4, - USAGE_SHADER_STORAGE_BUFFER = 0x8, - USAGE_TRANSFORM_FEEDBACK_BUFFER = 0x10, - USAGE_PIXEL_PACK_BUFFER = 0x20, - USAGE_ARRAY_BUFFER = 0x40, - USAGE_DISABLE_MINMAX_CACHE = 0x100, -} gl_buffer_usage; - - -/** - * GL_ARB_vertex/pixel_buffer_object buffer object - */ -struct gl_buffer_object -{ - GLint RefCount; - GLuint Name; - - /** - * The context that holds a global buffer reference for the lifetime of - * the GL buffer ID to skip refcounting for all its private bind points. - * Other contexts must still do refcounting as usual. Shared binding points - * like TBO within gl_texture_object are always refcounted. - * - * Implementation details: - * - Only the context that creates the buffer ("creating context") skips - * refcounting. - * - Only buffers represented by an OpenGL buffer ID skip refcounting. - * Other internal buffers don't. (glthread requires refcounting for - * internal buffers, etc.) - * - glDeleteBuffers removes the global buffer reference and increments - * RefCount for all private bind points where the deleted buffer is bound - * (e.g. unbound VAOs that are not changed by glDeleteBuffers), - * effectively enabling refcounting for that context. This is the main - * point where the global buffer reference is removed. - * - glDeleteBuffers called from a different context adds the buffer into - * the ZombieBufferObjects list, which is a way to notify the creating - * context that it should remove its global buffer reference to allow - * freeing the buffer. The creating context walks over that list in a few - * GL functions. - * - xxxDestroyContext walks over all buffers and removes its global - * reference from those buffers that it created. - */ - struct gl_context *Ctx; - GLint CtxRefCount; /**< Non-atomic references held by Ctx. */ - - gl_buffer_usage UsageHistory; /**< How has this buffer been used so far? */ - - struct pipe_resource *buffer; - struct gl_context *private_refcount_ctx; - /* This mechanism allows passing buffer references to the driver without - * using atomics to increase the reference count. - * - * This private refcount can be decremented without atomics but only one - * context (ctx above) can use this counter to be thread-safe. - * - * This number is atomically added to buffer->reference.count at - * initialization. If it's never used, the same number is atomically - * subtracted from buffer->reference.count before destruction. If this - * number is decremented, we can pass that reference to the driver without - * touching reference.count. At buffer destruction we only subtract - * the number of references we did not return. This can possibly turn - * a million atomic increments into 1 add and 1 subtract atomic op. - */ - int private_refcount; - - GLbitfield StorageFlags; /**< GL_MAP_PERSISTENT_BIT, etc. */ - - /** Memoization of min/max index computations for static index buffers */ - unsigned MinMaxCacheHitIndices; - unsigned MinMaxCacheMissIndices; - struct hash_table *MinMaxCache; - simple_mtx_t MinMaxCacheMutex; - bool MinMaxCacheDirty:1; - - bool DeletePending:1; /**< true if buffer object is removed from the hash */ - bool Immutable:1; /**< GL_ARB_buffer_storage */ - bool HandleAllocated:1; /**< GL_ARB_bindless_texture */ - bool GLThreadInternal:1; /**< Created by glthread. */ - GLenum16 Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ - GLchar *Label; /**< GL_KHR_debug */ - GLsizeiptrARB Size; /**< Size of buffer storage in bytes */ - - /** Counters used for buffer usage warnings */ - GLuint NumSubDataCalls; - GLuint NumMapBufferWriteCalls; - - struct gl_buffer_mapping Mappings[MAP_COUNT]; - struct pipe_transfer *transfer[MAP_COUNT]; -}; - - -/** - * Client pixel packing/unpacking attributes - */ -struct gl_pixelstore_attrib -{ - GLint Alignment; - GLint RowLength; - GLint SkipPixels; - GLint SkipRows; - GLint ImageHeight; - GLint SkipImages; - GLboolean SwapBytes; - GLboolean LsbFirst; - GLboolean Invert; /**< GL_MESA_pack_invert */ - GLint CompressedBlockWidth; /**< GL_ARB_compressed_texture_pixel_storage */ - GLint CompressedBlockHeight; - GLint CompressedBlockDepth; - GLint CompressedBlockSize; - struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */ -}; - - -/** - * Enum for defining the mapping for the position/generic0 attribute. - * - * Do not change the order of the values as these are used as - * array indices. - */ -typedef enum -{ - ATTRIBUTE_MAP_MODE_IDENTITY, /**< 1:1 mapping */ - ATTRIBUTE_MAP_MODE_POSITION, /**< get position and generic0 from position */ - ATTRIBUTE_MAP_MODE_GENERIC0, /**< get position and generic0 from generic0 */ - ATTRIBUTE_MAP_MODE_MAX /**< for sizing arrays */ -} gl_attribute_map_mode; - - -/** - * Attributes to describe a vertex array. - * - * Contains the size, type, format and normalization flag, - * along with the index of a vertex buffer binding point. - * - * Note that the Stride field corresponds to VERTEX_ATTRIB_ARRAY_STRIDE - * and is only present for backwards compatibility reasons. - * Rendering always uses VERTEX_BINDING_STRIDE. - * The gl*Pointer() functions will set VERTEX_ATTRIB_ARRAY_STRIDE - * and VERTEX_BINDING_STRIDE to the same value, while - * glBindVertexBuffer() will only set VERTEX_BINDING_STRIDE. - */ -struct gl_array_attributes -{ - /** Points to client array data. Not used when a VBO is bound */ - const GLubyte *Ptr; - /** Offset of the first element relative to the binding offset */ - GLuint RelativeOffset; - /** Vertex format */ - struct gl_vertex_format Format; - /** Stride as specified with gl*Pointer() */ - GLshort Stride; - /** Index into gl_vertex_array_object::BufferBinding[] array */ - GLubyte BufferBindingIndex; - - /** - * Derived effective buffer binding index - * - * Index into the gl_vertex_buffer_binding array of the vao. - * Similar to BufferBindingIndex, but with the mapping of the - * position/generic0 attributes applied and with identical - * gl_vertex_buffer_binding entries collapsed to a single - * entry within the vao. - * - * The value is valid past calling _mesa_update_vao_derived_arrays. - * Note that _mesa_update_vao_derived_arrays is called when binding - * the VAO to Array._DrawVAO. - */ - GLubyte _EffBufferBindingIndex; - /** - * Derived effective relative offset. - * - * Relative offset to the effective buffers offset in - * gl_vertex_buffer_binding::_EffOffset. - * - * The value is valid past calling _mesa_update_vao_derived_arrays. - * Note that _mesa_update_vao_derived_arrays is called when binding - * the VAO to Array._DrawVAO. - */ - GLushort _EffRelativeOffset; -}; - - -/** - * This describes the buffer object used for a vertex array (or - * multiple vertex arrays). If BufferObj points to the default/null - * buffer object, then the vertex array lives in user memory and not a VBO. - */ -struct gl_vertex_buffer_binding -{ - GLintptr Offset; /**< User-specified offset */ - GLsizei Stride; /**< User-specified stride */ - GLuint InstanceDivisor; /**< GL_ARB_instanced_arrays */ - struct gl_buffer_object *BufferObj; /**< GL_ARB_vertex_buffer_object */ - GLbitfield _BoundArrays; /**< Arrays bound to this binding point */ - - /** - * Derived effective bound arrays. - * - * The effective binding handles enabled arrays past the - * position/generic0 attribute mapping and reduces the refered - * gl_vertex_buffer_binding entries to a unique subset. - * - * The value is valid past calling _mesa_update_vao_derived_arrays. - * Note that _mesa_update_vao_derived_arrays is called when binding - * the VAO to Array._DrawVAO. - */ - GLbitfield _EffBoundArrays; - /** - * Derived offset. - * - * The absolute offset to that we can collapse some attributes - * to this unique effective binding. - * For user space array bindings this contains the smallest pointer value - * in the bound and interleaved arrays. - * For VBO bindings this contains an offset that lets the attributes - * _EffRelativeOffset stay positive and in bounds with - * Const.MaxVertexAttribRelativeOffset - * - * The value is valid past calling _mesa_update_vao_derived_arrays. - * Note that _mesa_update_vao_derived_arrays is called when binding - * the VAO to Array._DrawVAO. - */ - GLintptr _EffOffset; -}; - - -/** - * A representation of "Vertex Array Objects" (VAOs) from OpenGL 3.1+ / - * the GL_ARB_vertex_array_object extension. - */ -struct gl_vertex_array_object -{ - /** Name of the VAO as received from glGenVertexArray. */ - GLuint Name; - - GLint RefCount; - - GLchar *Label; /**< GL_KHR_debug */ - - /** - * Has this array object been bound? - */ - GLboolean EverBound; - - /** - * Whether the VAO is changed by the application so often that some of - * the derived fields are not updated at all to decrease overhead. - * Also, interleaved arrays are not detected, because it's too expensive - * to do that before every draw call. - */ - bool IsDynamic; - - /** - * Marked to true if the object is shared between contexts and immutable. - * Then reference counting is done using atomics and thread safe. - * Is used for dlist VAOs. - */ - bool SharedAndImmutable; - - /** - * Number of updates that were done by the application. This is used to - * decide whether the VAO is static or dynamic. - */ - unsigned NumUpdates; - - /** Vertex attribute arrays */ - struct gl_array_attributes VertexAttrib[VERT_ATTRIB_MAX]; - - /** Vertex buffer bindings */ - struct gl_vertex_buffer_binding BufferBinding[VERT_ATTRIB_MAX]; - - /** Mask indicating which vertex arrays have vertex buffer associated. */ - GLbitfield VertexAttribBufferMask; - - /** Mask indicating which vertex arrays have a non-zero instance divisor. */ - GLbitfield NonZeroDivisorMask; - - /** Mask of VERT_BIT_* values indicating which arrays are enabled */ - GLbitfield Enabled; - - /** - * Mask indicating which VertexAttrib and BufferBinding structures have - * been changed since the VAO creation. No bit is ever cleared to 0 by - * state updates. Setting to the default state doesn't update this. - * (e.g. unbinding) Setting the derived state (_* fields) doesn't update - * this either. - */ - GLbitfield NonDefaultStateMask; - - /** Denotes the way the position/generic0 attribute is mapped */ - gl_attribute_map_mode _AttributeMapMode; - - /** "Enabled" with the position/generic0 attribute aliasing resolved */ - GLbitfield _EnabledWithMapMode; - - /** The index buffer (also known as the element array buffer in OpenGL). */ - struct gl_buffer_object *IndexBufferObj; -}; - - -/** - * Vertex array state - */ -struct gl_array_attrib -{ - /** Currently bound array object. */ - struct gl_vertex_array_object *VAO; - - /** The default vertex array object */ - struct gl_vertex_array_object *DefaultVAO; - - /** The last VAO accessed by a DSA function */ - struct gl_vertex_array_object *LastLookedUpVAO; - - /** These contents are copied to newly created VAOs. */ - struct gl_vertex_array_object DefaultVAOState; - - /** Array objects (GL_ARB_vertex_array_object) */ - struct _mesa_HashTable *Objects; - - GLint ActiveTexture; /**< Client Active Texture */ - GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ - GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ - - /** - * \name Primitive restart controls - * - * Primitive restart is enabled if either \c PrimitiveRestart or - * \c PrimitiveRestartFixedIndex is set. - */ - /*@{*/ - GLboolean PrimitiveRestart; - GLboolean PrimitiveRestartFixedIndex; - GLboolean _PrimitiveRestart[3]; /**< Enable indexed by index_size_shift. */ - GLuint RestartIndex; - GLuint _RestartIndex[3]; /**< Restart indices indexed by index_size_shift. */ - /*@}*/ - - /* GL_ARB_vertex_buffer_object */ - struct gl_buffer_object *ArrayBufferObj; - - /** - * Vertex array object that is used with the currently active draw command. - * The _DrawVAO is either set to the currently bound VAO for array type - * draws or to internal VAO's set up by the vbo module to execute immediate - * mode or display list draws. - */ - struct gl_vertex_array_object *_DrawVAO; - - /** - * Whether per-vertex edge flags are enabled and should be processed by - * the vertex shader. - */ - bool _PerVertexEdgeFlagsEnabled; - - /** - * Whether all edge flags are false, causing all points and lines generated - * by polygon mode to be not drawn. (i.e. culled) - */ - bool _PolygonModeAlwaysCulls; - - /** - * If gallium vertex buffers are dirty, this flag indicates whether gallium - * vertex elements are dirty too. If this is false, GL states corresponding - * to vertex elements have not been changed. Thus, this affects what will - * happen when ST_NEW_VERTEX_ARRAYS is set. - * - * The driver should clear this when it's done. - */ - bool NewVertexElements; - - /** Legal array datatypes and the API for which they have been computed */ - GLbitfield LegalTypesMask; - gl_api LegalTypesMaskAPI; -}; - - -/** - * Feedback buffer state - */ -struct gl_feedback -{ - GLenum16 Type; - GLbitfield _Mask; /**< FB_* bits */ - GLfloat *Buffer; - GLuint BufferSize; - GLuint Count; -}; - - -/** - * Selection buffer state - */ -struct gl_selection -{ - GLuint *Buffer; /**< selection buffer */ - GLuint BufferSize; /**< size of the selection buffer */ - GLuint BufferCount; /**< number of values in the selection buffer */ - GLuint Hits; /**< number of records in the selection buffer */ - GLuint NameStackDepth; /**< name stack depth */ - GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */ - GLboolean HitFlag; /**< hit flag */ - GLfloat HitMinZ; /**< minimum hit depth */ - GLfloat HitMaxZ; /**< maximum hit depth */ - - /* HW GL_SELECT */ - void *SaveBuffer; /**< array holds multi stack data */ - GLuint SaveBufferTail; /**< offset to SaveBuffer's tail */ - GLuint SavedStackNum; /**< number of saved stacks */ - - GLboolean ResultUsed; /**< whether any draw used result buffer */ - GLuint ResultOffset; /**< offset into result buffer */ - struct gl_buffer_object *Result; /**< result buffer */ -}; - - -/** - * 1-D Evaluator control points - */ -struct gl_1d_map -{ - GLuint Order; /**< Number of control points */ - GLfloat u1, u2, du; /**< u1, u2, 1.0/(u2-u1) */ - GLfloat *Points; /**< Points to contiguous control points */ -}; - - -/** - * 2-D Evaluator control points - */ -struct gl_2d_map -{ - GLuint Uorder; /**< Number of control points in U dimension */ - GLuint Vorder; /**< Number of control points in V dimension */ - GLfloat u1, u2, du; - GLfloat v1, v2, dv; - GLfloat *Points; /**< Points to contiguous control points */ -}; - - -/** - * All evaluator control point state - */ -struct gl_evaluators -{ - /** - * \name 1-D maps - */ - /*@{*/ - struct gl_1d_map Map1Vertex3; - struct gl_1d_map Map1Vertex4; - struct gl_1d_map Map1Index; - struct gl_1d_map Map1Color4; - struct gl_1d_map Map1Normal; - struct gl_1d_map Map1Texture1; - struct gl_1d_map Map1Texture2; - struct gl_1d_map Map1Texture3; - struct gl_1d_map Map1Texture4; - /*@}*/ - - /** - * \name 2-D maps - */ - /*@{*/ - struct gl_2d_map Map2Vertex3; - struct gl_2d_map Map2Vertex4; - struct gl_2d_map Map2Index; - struct gl_2d_map Map2Color4; - struct gl_2d_map Map2Normal; - struct gl_2d_map Map2Texture1; - struct gl_2d_map Map2Texture2; - struct gl_2d_map Map2Texture3; - struct gl_2d_map Map2Texture4; - /*@}*/ -}; - - -/** - * Transform feedback object state - */ -struct gl_transform_feedback_object -{ - GLuint Name; /**< AKA the object ID */ - GLint RefCount; - GLchar *Label; /**< GL_KHR_debug */ - GLboolean Active; /**< Is transform feedback enabled? */ - GLboolean Paused; /**< Is transform feedback paused? */ - GLboolean EndedAnytime; /**< Has EndTransformFeedback been called - at least once? */ - GLboolean EverBound; /**< Has this object been bound? */ - - /** - * GLES: if Active is true, remaining number of primitives which can be - * rendered without overflow. This is necessary to track because GLES - * requires us to generate INVALID_OPERATION if a call to glDrawArrays or - * glDrawArraysInstanced would overflow transform feedback buffers. - * Undefined if Active is false. - * - * Not tracked for desktop GL since it's unnecessary. - */ - unsigned GlesRemainingPrims; - - /** - * The program active when BeginTransformFeedback() was called. - * When active and unpaused, this equals ctx->Shader.CurrentProgram[stage], - * where stage is the pipeline stage that is the source of data for - * transform feedback. - */ - struct gl_program *program; - - /** The feedback buffers */ - GLuint BufferNames[MAX_FEEDBACK_BUFFERS]; - struct gl_buffer_object *Buffers[MAX_FEEDBACK_BUFFERS]; - - /** Start of feedback data in dest buffer */ - GLintptr Offset[MAX_FEEDBACK_BUFFERS]; - - /** - * Max data to put into dest buffer (in bytes). Computed based on - * RequestedSize and the actual size of the buffer. - */ - GLsizeiptr Size[MAX_FEEDBACK_BUFFERS]; - - /** - * Size that was specified when the buffer was bound. If the buffer was - * bound with glBindBufferBase() or glBindBufferOffsetEXT(), this value is - * zero. - */ - GLsizeiptr RequestedSize[MAX_FEEDBACK_BUFFERS]; - - unsigned num_targets; - struct pipe_stream_output_target *targets[PIPE_MAX_SO_BUFFERS]; - - /* This encapsulates the count that can be used as a source for draw_vbo. - * It contains stream output targets from the last call of - * EndTransformFeedback for each stream. */ - struct pipe_stream_output_target *draw_count[MAX_VERTEX_STREAMS]; -}; - - -/** - * Context state for transform feedback. - */ -struct gl_transform_feedback_state -{ - GLenum16 Mode; /**< GL_POINTS, GL_LINES or GL_TRIANGLES */ - - /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */ - struct gl_buffer_object *CurrentBuffer; - - /** The table of all transform feedback objects */ - struct _mesa_HashTable *Objects; - - /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */ - struct gl_transform_feedback_object *CurrentObject; - - /** The default xform-fb object (Name==0) */ - struct gl_transform_feedback_object *DefaultObject; -}; - - -/** - * A "performance monitor" as described in AMD_performance_monitor. - */ -struct gl_perf_monitor_object -{ - GLuint Name; - - /** True if the monitor is currently active (Begin called but not End). */ - GLboolean Active; - - /** - * True if the monitor has ended. - * - * This is distinct from !Active because it may never have began. - */ - GLboolean Ended; - - /** - * A list of groups with currently active counters. - * - * ActiveGroups[g] == n if there are n counters active from group 'g'. - */ - unsigned *ActiveGroups; - - /** - * An array of bitsets, subscripted by group ID, then indexed by counter ID. - * - * Checking whether counter 'c' in group 'g' is active can be done via: - * - * BITSET_TEST(ActiveCounters[g], c) - */ - GLuint **ActiveCounters; - - unsigned num_active_counters; - - struct gl_perf_counter_object { - struct pipe_query *query; - int id; - int group_id; - unsigned batch_index; - } *active_counters; - - struct pipe_query *batch_query; - union pipe_query_result *batch_result; -}; - - -union gl_perf_monitor_counter_value -{ - float f; - uint64_t u64; - uint32_t u32; -}; - - -struct gl_perf_monitor_counter -{ - /** Human readable name for the counter. */ - const char *Name; - - /** - * Data type of the counter. Valid values are FLOAT, UNSIGNED_INT, - * UNSIGNED_INT64_AMD, and PERCENTAGE_AMD. - */ - GLenum16 Type; - - /** Minimum counter value. */ - union gl_perf_monitor_counter_value Minimum; - - /** Maximum counter value. */ - union gl_perf_monitor_counter_value Maximum; - - unsigned query_type; - unsigned flags; -}; - - -struct gl_perf_monitor_group -{ - /** Human readable name for the group. */ - const char *Name; - - /** - * Maximum number of counters in this group which can be active at the - * same time. - */ - GLuint MaxActiveCounters; - - /** Array of counters within this group. */ - const struct gl_perf_monitor_counter *Counters; - GLuint NumCounters; - - bool has_batch; -}; - -/** - * A query object instance as described in INTEL_performance_query. - * - * NB: We want to keep this and the corresponding backend structure - * relatively lean considering that applications may expect to - * allocate enough objects to be able to query around all draw calls - * in a frame. - */ -struct gl_perf_query_object -{ - GLuint Id; /**< hash table ID/name */ - unsigned Used:1; /**< has been used for 1 or more queries */ - unsigned Active:1; /**< inside Begin/EndPerfQuery */ - unsigned Ready:1; /**< result is ready? */ -}; - - -/** - * Context state for AMD_performance_monitor. - */ -struct gl_perf_monitor_state -{ - /** Array of performance monitor groups (indexed by group ID) */ - const struct gl_perf_monitor_group *Groups; - GLuint NumGroups; - - /** The table of all performance monitors. */ - struct _mesa_HashTable *Monitors; -}; - - -/** - * Context state for INTEL_performance_query. - */ -struct gl_perf_query_state -{ - struct _mesa_HashTable *Objects; /**< The table of all performance query objects */ -}; - - -/** - * State common to vertex and fragment programs. - */ -struct gl_program_state -{ - GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */ - const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */ -}; - - -/** - * Context state for vertex programs. - */ -struct gl_vertex_program_state -{ - GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ - GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ - GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ - /** Whether the fixed-func program is being used right now. */ - GLboolean _UsesTnlProgram; - - struct gl_program *Current; /**< User-bound vertex program */ - - /** Currently enabled and valid vertex program (including internal - * programs, user-defined vertex programs and GLSL vertex shaders). - * This is the program we must use when rendering. - */ - struct gl_program *_Current; - - GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ - - /** Program to emulate fixed-function T&L (see above) */ - struct gl_program *_TnlProgram; - - /** Cache of fixed-function programs */ - struct gl_program_cache *Cache; - - GLboolean _Overriden; - - bool _VPModeOptimizesConstantAttribs; - - /** - * If we have a vertex program, a TNL program or no program at all. - * Note that this value should be kept up to date all the time, - * nevertheless its correctness is asserted in _mesa_update_state. - * The reason is to avoid calling _mesa_update_state twice we need - * this value on draw *before* actually calling _mesa_update_state. - * Also it should need to get recomputed only on changes to the - * vertex program which are heavyweight already. - */ - gl_vertex_processing_mode _VPMode; - - GLbitfield _VaryingInputs; /**< mask of VERT_BIT_* flags */ - GLbitfield _VPModeInputFilter; -}; - -/** - * Context state for tessellation control programs. - */ -struct gl_tess_ctrl_program_state -{ - /** Currently bound and valid shader. */ - struct gl_program *_Current; - - GLint patch_vertices; - GLfloat patch_default_outer_level[4]; - GLfloat patch_default_inner_level[2]; -}; - -/** - * Context state for tessellation evaluation programs. - */ -struct gl_tess_eval_program_state -{ - /** Currently bound and valid shader. */ - struct gl_program *_Current; -}; - -/** - * Context state for geometry programs. - */ -struct gl_geometry_program_state -{ - /** - * Currently enabled and valid program (including internal programs - * and compiled shader programs). - */ - struct gl_program *_Current; -}; - -/** - * Context state for fragment programs. - */ -struct gl_fragment_program_state -{ - GLboolean Enabled; /**< User-set fragment program enable flag */ - /** Whether the fixed-func program is being used right now. */ - GLboolean _UsesTexEnvProgram; - - struct gl_program *Current; /**< User-bound fragment program */ - - /** - * Currently enabled and valid fragment program (including internal - * programs, user-defined fragment programs and GLSL fragment shaders). - * This is the program we must use when rendering. - */ - struct gl_program *_Current; - - GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ - - /** Program to emulate fixed-function texture env/combine (see above) */ - struct gl_program *_TexEnvProgram; - - /** Cache of fixed-function programs */ - struct gl_program_cache *Cache; -}; - - -/** - * Context state for compute programs. - */ -struct gl_compute_program_state -{ - /** Currently enabled and valid program (including internal programs - * and compiled shader programs). - */ - struct gl_program *_Current; -}; - - -/** - * ATI_fragment_shader runtime state - */ - -struct atifs_instruction; -struct atifs_setupinst; - -/** - * ATI fragment shader - */ -struct ati_fragment_shader -{ - GLuint Id; - GLint RefCount; - struct atifs_instruction *Instructions[2]; - struct atifs_setupinst *SetupInst[2]; - GLfloat Constants[8][4]; - GLbitfield LocalConstDef; /**< Indicates which constants have been set */ - GLubyte numArithInstr[2]; - GLubyte regsAssigned[2]; - GLubyte NumPasses; /**< 1 or 2 */ - /** - * Current compile stage: 0 setup pass1, 1 arith pass1, - * 2 setup pass2, 3 arith pass2. - */ - GLubyte cur_pass; - GLubyte last_optype; - GLboolean interpinp1; - GLboolean isValid; - /** - * Array of 2 bit values for each tex unit to remember whether - * STR or STQ swizzle was used - */ - GLuint swizzlerq; - struct gl_program *Program; -}; - -/** - * Context state for GL_ATI_fragment_shader - */ -struct gl_ati_fragment_shader_state -{ - GLboolean Enabled; - GLboolean Compiling; - GLfloat GlobalConstants[8][4]; - struct ati_fragment_shader *Current; -}; - -#define GLSL_DUMP 0x1 /**< Dump shaders to stdout */ -#define GLSL_LOG 0x2 /**< Write shaders to files */ -#define GLSL_UNIFORMS 0x4 /**< Print glUniform calls */ -#define GLSL_NOP_VERT 0x8 /**< Force no-op vertex shaders */ -#define GLSL_NOP_FRAG 0x10 /**< Force no-op fragment shaders */ -#define GLSL_USE_PROG 0x20 /**< Log glUseProgram calls */ -#define GLSL_REPORT_ERRORS 0x40 /**< Print compilation errors */ -#define GLSL_DUMP_ON_ERROR 0x80 /**< Dump shaders to stderr on compile error */ -#define GLSL_CACHE_INFO 0x100 /**< Print debug information about shader cache */ -#define GLSL_CACHE_FALLBACK 0x200 /**< Force shader cache fallback paths */ -#define GLSL_SOURCE 0x400 /**< Only dump GLSL */ - - -/** - * Context state for GLSL vertex/fragment shaders. - * Extended to support pipeline object - */ -struct gl_pipeline_object -{ - /** Name of the pipeline object as received from glGenProgramPipelines. - * It would be 0 for shaders without separate shader objects. - */ - GLuint Name; - - GLint RefCount; - - GLchar *Label; /**< GL_KHR_debug */ - - /** - * Programs used for rendering - * - * There is a separate program set for each shader stage. - */ - struct gl_program *CurrentProgram[MESA_SHADER_STAGES]; - - struct gl_shader_program *ReferencedPrograms[MESA_SHADER_STAGES]; - - /** - * Program used by glUniform calls. - * - * Explicitly set by \c glUseProgram and \c glActiveProgramEXT. - */ - struct gl_shader_program *ActiveProgram; - - GLbitfield Flags; /**< Mask of GLSL_x flags */ - GLboolean EverBound; /**< Has the pipeline object been created */ - GLboolean Validated; /**< Pipeline Validation status */ - GLboolean UserValidated; /**< Validation status initiated by the user */ - - GLchar *InfoLog; -}; - -/** - * Context state for GLSL pipeline shaders. - */ -struct gl_pipeline_shader_state -{ - /** Currently bound pipeline object. See _mesa_BindProgramPipeline() */ - struct gl_pipeline_object *Current; - - /** Default Object to ensure that _Shader is never NULL */ - struct gl_pipeline_object *Default; - - /** Pipeline objects */ - struct _mesa_HashTable *Objects; -}; - -/** - * Occlusion/timer query object. - */ -struct gl_query_object -{ - GLenum16 Target; /**< The query target, when active */ - GLuint Id; /**< hash table ID/name */ - GLchar *Label; /**< GL_KHR_debug */ - GLuint64EXT Result; /**< the counter */ - GLboolean Active; /**< inside Begin/EndQuery */ - GLboolean Ready; /**< result is ready? */ - GLboolean EverBound;/**< has query object ever been bound */ - GLuint Stream; /**< The stream */ - - struct pipe_query *pq; - - /* Begin TIMESTAMP query for GL_TIME_ELAPSED_EXT queries */ - struct pipe_query *pq_begin; - - unsigned type; /**< PIPE_QUERY_x */ -}; - - -/** - * Context state for query objects. - */ -struct gl_query_state -{ - struct _mesa_HashTable *QueryObjects; - struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */ - struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */ - - /** GL_NV_conditional_render */ - struct gl_query_object *CondRenderQuery; - - /** GL_EXT_transform_feedback */ - struct gl_query_object *PrimitivesGenerated[MAX_VERTEX_STREAMS]; - struct gl_query_object *PrimitivesWritten[MAX_VERTEX_STREAMS]; - - /** GL_ARB_transform_feedback_overflow_query */ - struct gl_query_object *TransformFeedbackOverflow[MAX_VERTEX_STREAMS]; - struct gl_query_object *TransformFeedbackOverflowAny; - - /** GL_ARB_timer_query */ - struct gl_query_object *TimeElapsed; - - /** GL_ARB_pipeline_statistics_query */ - struct gl_query_object *pipeline_stats[MAX_PIPELINE_STATISTICS]; - - GLenum16 CondRenderMode; -}; - - -/** Sync object state */ -struct gl_sync_object -{ - GLuint Name; /**< Fence name */ - GLint RefCount; /**< Reference count */ - GLchar *Label; /**< GL_KHR_debug */ - GLboolean DeletePending; /**< Object was deleted while there were still - * live references (e.g., sync not yet finished) - */ - GLenum16 SyncCondition; - GLbitfield Flags; /**< Flags passed to glFenceSync */ - GLuint StatusFlag:1; /**< Has the sync object been signaled? */ - - struct pipe_fence_handle *fence; - simple_mtx_t mutex; /**< protects "fence" */ -}; - - -/** - * State which can be shared by multiple contexts: - */ -struct gl_shared_state -{ - simple_mtx_t Mutex; /**< for thread safety */ - GLint RefCount; /**< Reference count */ - bool DisplayListsAffectGLThread; - - struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ - struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ - - /** Default texture objects (shared by all texture units) */ - struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS]; - - /** Fallback texture used when a bound texture is incomplete */ - struct gl_texture_object *FallbackTex[NUM_TEXTURE_TARGETS][2]; /**< [color, depth] */ - - /** - * \name Thread safety and statechange notification for texture - * objects. - * - * \todo Improve the granularity of locking. - */ - /*@{*/ - simple_mtx_t TexMutex; /**< texobj thread safety */ - GLuint TextureStateStamp; /**< state notification for shared tex */ - /*@}*/ - - /** - * \name Vertex/geometry/fragment programs - */ - /*@{*/ - struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */ - struct gl_program *DefaultVertexProgram; - struct gl_program *DefaultFragmentProgram; - /*@}*/ - - /* GL_ATI_fragment_shader */ - struct _mesa_HashTable *ATIShaders; - struct ati_fragment_shader *DefaultFragmentShader; - - struct _mesa_HashTable *BufferObjects; - - /* Buffer objects released by a different context than the one that - * created them. Since the creating context holds one global buffer - * reference for each buffer it created and skips reference counting, - * deleting a buffer by another context can't touch the buffer reference - * held by the context that created it. Only the creating context can - * remove its global buffer reference. - * - * This list contains all buffers that were deleted by a different context - * than the one that created them. This list should be probed by all - * contexts regularly and remove references of those buffers that they own. - */ - struct set *ZombieBufferObjects; - - /** Table of both gl_shader and gl_shader_program objects */ - struct _mesa_HashTable *ShaderObjects; - - /* GL_EXT_framebuffer_object */ - struct _mesa_HashTable *RenderBuffers; - struct _mesa_HashTable *FrameBuffers; - - /* GL_ARB_sync */ - struct set *SyncObjects; - - /** GL_ARB_sampler_objects */ - struct _mesa_HashTable *SamplerObjects; - - /* GL_ARB_bindless_texture */ - struct hash_table_u64 *TextureHandles; - struct hash_table_u64 *ImageHandles; - mtx_t HandlesMutex; /**< For texture/image handles safety */ - - /* GL_ARB_shading_language_include */ - struct shader_includes *ShaderIncludes; - /* glCompileShaderInclude expects ShaderIncludes not to change while it is - * in progress. - */ - simple_mtx_t ShaderIncludeMutex; - - /** - * Some context in this share group was affected by a GPU reset - * - * On the next call to \c glGetGraphicsResetStatus, contexts that have not - * been affected by a GPU reset must also return - * \c GL_INNOCENT_CONTEXT_RESET_ARB. - * - * Once this field becomes true, it is never reset to false. - */ - bool ShareGroupReset; - - /** EXT_external_objects */ - struct _mesa_HashTable *MemoryObjects; - - /** EXT_semaphore */ - struct _mesa_HashTable *SemaphoreObjects; - - /** - * Some context in this share group was affected by a disjoint - * operation. This operation can be anything that has effects on - * values of timer queries in such manner that they become invalid for - * performance metrics. As example gpu reset, counter overflow or gpu - * frequency changes. - */ - bool DisjointOperation; - - /** - * Whether at least one image has been imported or exported, excluding - * the default framebuffer. If this is false, glFlush can be executed - * asynchronously because there is no invisible dependency on external - * users. - */ - bool HasExternallySharedImages; - - /* Small display list storage */ - struct { - union gl_dlist_node *ptr; - struct util_idalloc free_idx; - unsigned size; - } small_dlist_store; - - /* Global GLThread state. */ - struct { - /* The last context that locked global mutexes. */ - struct gl_context *LastExecutingCtx; - - /* The last time LastExecutingCtx started executing after a different - * context (the time of multiple active contexts). - */ - int64_t LastContextSwitchTime; - - /* The time for which no context can lock global mutexes since - * LastContextSwitchTime. - */ - int64_t NoLockDuration; - } GLThread; -}; - - - -/** - * Renderbuffers represent drawing surfaces such as color, depth and/or - * stencil. A framebuffer object has a set of renderbuffers. - * Drivers will typically derive subclasses of this type. - */ -struct gl_renderbuffer -{ - GLuint ClassID; /**< Useful for drivers */ - GLuint Name; - GLchar *Label; /**< GL_KHR_debug */ - GLint RefCount; - GLuint Width, Height; - GLuint Depth; - GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */ - GLubyte NumSamples; /**< zero means not multisampled */ - GLubyte NumStorageSamples; /**< for AMD_framebuffer_multisample_advanced */ - GLenum16 InternalFormat; /**< The user-specified format */ - GLenum16 _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or - GL_STENCIL_INDEX. */ - mesa_format Format; /**< The actual renderbuffer memory format */ - /** - * Pointer to the texture image if this renderbuffer wraps a texture, - * otherwise NULL. - * - * Note that the reference on the gl_texture_object containing this - * TexImage is held by the gl_renderbuffer_attachment. - */ - struct gl_texture_image *TexImage; - - /** Delete this renderbuffer */ - void (*Delete)(struct gl_context *ctx, struct gl_renderbuffer *rb); - - /** Allocate new storage for this renderbuffer */ - GLboolean (*AllocStorage)(struct gl_context *ctx, - struct gl_renderbuffer *rb, - GLenum internalFormat, - GLuint width, GLuint height); - - struct pipe_resource *texture; - /* This points to either "surface_linear" or "surface_srgb". - * It doesn't hold the pipe_surface reference. The other two do. - */ - struct pipe_surface *surface; - struct pipe_surface *surface_linear; - struct pipe_surface *surface_srgb; - GLboolean defined; /**< defined contents? */ - - struct pipe_transfer *transfer; /**< only used when mapping the resource */ - - /** - * Used only when hardware accumulation buffers are not supported. - */ - boolean software; - void *data; - - bool use_readpix_cache; - - /* Inputs from Driver.RenderTexture, don't use directly. */ - boolean is_rtt; /**< whether Driver.RenderTexture was called */ - unsigned rtt_face, rtt_slice; - boolean rtt_layered; /**< whether glFramebufferTexture was called */ - unsigned rtt_nr_samples; /**< from FramebufferTexture2DMultisampleEXT */ -}; - - -/** - * A renderbuffer attachment points to either a texture object (and specifies - * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer. - */ -struct gl_renderbuffer_attachment -{ - GLenum16 Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */ - GLboolean Complete; - - /** - * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the - * application supplied renderbuffer object. - */ - struct gl_renderbuffer *Renderbuffer; - - /** - * If \c Type is \c GL_TEXTURE, this stores a pointer to the application - * supplied texture object. - */ - struct gl_texture_object *Texture; - GLuint TextureLevel; /**< Attached mipmap level. */ - GLsizei NumSamples; /**< from FramebufferTexture2DMultisampleEXT */ - GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */ - GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D - * and 2D array textures */ - GLboolean Layered; -}; - - -/** - * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc). - * In C++ terms, think of this as a base class from which device drivers - * will make derived classes. - */ -struct gl_framebuffer -{ - simple_mtx_t Mutex; /**< for thread safety */ - /** - * If zero, this is a window system framebuffer. If non-zero, this - * is a FBO framebuffer; note that for some devices (i.e. those with - * a natural pixel coordinate system for FBOs that differs from the - * OpenGL/Mesa coordinate system), this means that the viewport, - * polygon face orientation, and polygon stipple will have to be inverted. - */ - GLuint Name; - GLint RefCount; - - GLchar *Label; /**< GL_KHR_debug */ - - GLboolean DeletePending; - - /** - * The framebuffer's visual. Immutable if this is a window system buffer. - * Computed from attachments if user-made FBO. - */ - struct gl_config Visual; - - /** - * Size of frame buffer in pixels. If there are no attachments, then both - * of these are 0. - */ - GLuint Width, Height; - - /** - * In the case that the framebuffer has no attachment (i.e. - * GL_ARB_framebuffer_no_attachments) then the geometry of - * the framebuffer is specified by the default values. - */ - struct { - GLuint Width, Height, Layers, NumSamples; - GLboolean FixedSampleLocations; - /* Derived from NumSamples by the driver so that it can choose a valid - * value for the hardware. - */ - GLuint _NumSamples; - } DefaultGeometry; - - /** \name Drawing bounds (Intersection of buffer size and scissor box) - * The drawing region is given by [_Xmin, _Xmax) x [_Ymin, _Ymax), - * (inclusive for _Xmin and _Ymin while exclusive for _Xmax and _Ymax) - */ - /*@{*/ - GLint _Xmin, _Xmax; - GLint _Ymin, _Ymax; - /*@}*/ - - /** \name Derived Z buffer stuff */ - /*@{*/ - GLuint _DepthMax; /**< Max depth buffer value */ - GLfloat _DepthMaxF; /**< Float max depth buffer value */ - GLfloat _MRD; /**< minimum resolvable difference in Z values */ - /*@}*/ - - /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ - GLenum16 _Status; - - /** Whether one of Attachment has Type != GL_NONE - * NOTE: the values for Width and Height are set to 0 in case of having - * no attachments, a backend driver supporting the extension - * GL_ARB_framebuffer_no_attachments must check for the flag _HasAttachments - * and if GL_FALSE, must then use the values in DefaultGeometry to initialize - * its viewport, scissor and so on (in particular _Xmin, _Xmax, _Ymin and - * _Ymax do NOT take into account _HasAttachments being false). To get the - * geometry of the framebuffer, the helper functions - * _mesa_geometric_width(), - * _mesa_geometric_height(), - * _mesa_geometric_samples() and - * _mesa_geometric_layers() - * are available that check _HasAttachments. - */ - bool _HasAttachments; - - GLbitfield _IntegerBuffers; /**< Which color buffers are integer valued */ - GLbitfield _BlendForceAlphaToOne; /**< Which color buffers need blend factor adjustment */ - GLbitfield _IsRGB; /**< Which color buffers have an RGB base format? */ - GLbitfield _FP32Buffers; /**< Which color buffers are FP32 */ - - /* ARB_color_buffer_float */ - GLboolean _AllColorBuffersFixedPoint; /* no integer, no float */ - GLboolean _HasSNormOrFloatColorBuffer; - - /** - * The maximum number of layers in the framebuffer, or 0 if the framebuffer - * is not layered. For cube maps and cube map arrays, each cube face - * counts as a layer. As the case for Width, Height a backend driver - * supporting GL_ARB_framebuffer_no_attachments must use DefaultGeometry - * in the case that _HasAttachments is false - */ - GLuint MaxNumLayers; - - /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ - struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; - struct pipe_resource *resolve; /**< color resolve attachment */ - - /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER - * attribute group and GL_PIXEL attribute group, respectively. - */ - GLenum16 ColorDrawBuffer[MAX_DRAW_BUFFERS]; - GLenum16 ColorReadBuffer; - - /* GL_ARB_sample_locations */ - GLfloat *SampleLocationTable; /**< If NULL, no table has been specified */ - GLboolean ProgrammableSampleLocations; - GLboolean SampleLocationPixelGrid; - - /** Computed from ColorDraw/ReadBuffer above */ - GLuint _NumColorDrawBuffers; - gl_buffer_index _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; - gl_buffer_index _ColorReadBufferIndex; - struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; - struct gl_renderbuffer *_ColorReadBuffer; - - /* GL_MESA_framebuffer_flip_y */ - bool FlipY; - - /** Delete this framebuffer */ - void (*Delete)(struct gl_framebuffer *fb); - - struct pipe_frontend_drawable *drawable; - enum st_attachment_type statts[ST_ATTACHMENT_COUNT]; - unsigned num_statts; - int32_t stamp; - int32_t drawable_stamp; - uint32_t drawable_ID; - - /* list of framebuffer objects */ - struct list_head head; -}; - -/** - * A stack of matrices (projection, modelview, color, texture, etc). - */ -struct gl_matrix_stack -{ - GLmatrix *Top; /**< points into Stack */ - GLmatrix *Stack; /**< array [MaxDepth] of GLmatrix */ - unsigned StackSize; /**< Number of elements in Stack */ - GLuint Depth; /**< 0 <= Depth < MaxDepth */ - GLuint MaxDepth; /**< size of Stack[] array */ - GLuint DirtyFlag; /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */ - bool ChangedSincePush; -}; - - -/** - * \name Bits for image transfer operations - * \sa __struct gl_contextRec::ImageTransferState. - */ -/*@{*/ -#define IMAGE_SCALE_BIAS_BIT 0x1 -#define IMAGE_SHIFT_OFFSET_BIT 0x2 -#define IMAGE_MAP_COLOR_BIT 0x4 -#define IMAGE_CLAMP_BIT 0x800 - - -/** Pixel Transfer ops */ -#define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT | \ - IMAGE_SHIFT_OFFSET_BIT | \ - IMAGE_MAP_COLOR_BIT) - - -/** - * \name Bits to indicate what state has changed. - */ -/*@{*/ -#define _NEW_MODELVIEW (1u << 0) /**< gl_context::ModelView */ -#define _NEW_PROJECTION (1u << 1) /**< gl_context::Projection */ -#define _NEW_TEXTURE_MATRIX (1u << 2) /**< gl_context::TextureMatrix */ -#define _NEW_COLOR (1u << 3) /**< gl_context::Color */ -#define _NEW_DEPTH (1u << 4) /**< gl_context::Depth */ -#define _NEW_TNL_SPACES (1u << 5) /**< _mesa_update_tnl_spaces */ -#define _NEW_FOG (1u << 6) /**< gl_context::Fog */ -#define _NEW_HINT (1u << 7) /**< gl_context::Hint */ -#define _NEW_LIGHT_CONSTANTS (1u << 8) /**< gl_context::Light */ -#define _NEW_LINE (1u << 9) /**< gl_context::Line */ -#define _NEW_PIXEL (1u << 10) /**< gl_context::Pixel */ -#define _NEW_POINT (1u << 11) /**< gl_context::Point */ -#define _NEW_POLYGON (1u << 12) /**< gl_context::Polygon */ -#define _NEW_POLYGONSTIPPLE (1u << 13) /**< gl_context::PolygonStipple */ -#define _NEW_SCISSOR (1u << 14) /**< gl_context::Scissor */ -#define _NEW_STENCIL (1u << 15) /**< gl_context::Stencil */ -#define _NEW_TEXTURE_OBJECT (1u << 16) /**< gl_context::Texture (bindings only) */ -#define _NEW_TRANSFORM (1u << 17) /**< gl_context::Transform */ -#define _NEW_VIEWPORT (1u << 18) /**< gl_context::Viewport */ -#define _NEW_TEXTURE_STATE (1u << 19) /**< gl_context::Texture (states only) */ -#define _NEW_LIGHT_STATE (1u << 20) /**< gl_context::Light */ -#define _NEW_RENDERMODE (1u << 21) /**< gl_context::RenderMode, etc */ -#define _NEW_BUFFERS (1u << 22) /**< gl_context::Visual, DrawBuffer, */ -#define _NEW_CURRENT_ATTRIB (1u << 23) /**< gl_context::Current */ -#define _NEW_MULTISAMPLE (1u << 24) /**< gl_context::Multisample */ -#define _NEW_TRACK_MATRIX (1u << 25) /**< gl_context::VertexProgram */ -#define _NEW_PROGRAM (1u << 26) /**< New program/shader state */ -#define _NEW_PROGRAM_CONSTANTS (1u << 27) -#define _NEW_FF_VERT_PROGRAM (1u << 28) -#define _NEW_FRAG_CLAMP (1u << 29) -#define _NEW_MATERIAL (1u << 30) /**< gl_context::Light.Material */ -#define _NEW_FF_FRAG_PROGRAM (1u << 31) -#define _NEW_ALL ~0 -/*@}*/ - - -/* This has to be included here. */ -#include "dd.h" -#include "dlist.h" - - -/** Opaque declaration of display list payload data type */ -union gl_dlist_node; - - -/** - * Per-display list information. - */ -struct gl_display_list -{ - GLuint Name; - bool execute_glthread; - bool small_list; - GLchar *Label; /**< GL_KHR_debug */ - /** The dlist commands are in a linked list of nodes */ - union { - /* Big lists allocate their own storage */ - union gl_dlist_node *Head; - /* Small lists use ctx->Shared->small_dlist_store */ - struct { - unsigned start; - unsigned count; - }; - }; -}; - - -/** - * State used during display list compilation and execution. - */ -struct gl_dlist_state -{ - struct gl_display_list *CurrentList; /**< List currently being compiled */ - union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */ - GLuint CurrentPos; /**< Index into current block of nodes */ - GLuint CallDepth; /**< Current recursion calling depth */ - GLuint LastInstSize; /**< Size of the last node. */ - - GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; - uint32_t CurrentAttrib[VERT_ATTRIB_MAX][8]; - - GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; - GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; - - struct { - /* State known to have been set by the currently-compiling display - * list. Used to eliminate some redundant state changes. - */ - GLenum16 ShadeModel; - bool UseLoopback; - } Current; -}; - -/** - * Driver-specific state flags. - * - * These are or'd with gl_context::NewDriverState to notify a driver about - * a state change. The driver sets the flags at context creation and - * the meaning of the bits set is opaque to core Mesa. - */ -struct gl_driver_flags -{ - /** - * gl_context::AtomicBufferBindings - */ - uint64_t NewAtomicBuffer; - - /** gl_context::Color::Alpha* */ - uint64_t NewAlphaTest; - - /** gl_context::Multisample::Enabled */ - uint64_t NewMultisampleEnable; - - /** gl_context::Multisample::(Min)SampleShading */ - uint64_t NewSampleShading; - - /** gl_context::Transform::ClipPlanesEnabled */ - uint64_t NewClipPlaneEnable; - - /** gl_context::Color::ClampFragmentColor */ - uint64_t NewFragClamp; - - /** Shader constants (uniforms, program parameters, state constants) */ - uint64_t NewShaderConstants[MESA_SHADER_STAGES]; - - /** For GL_CLAMP emulation */ - uint64_t NewSamplersWithClamp; -}; - -struct gl_buffer_binding -{ - struct gl_buffer_object *BufferObject; - /** Start of uniform block data in the buffer */ - GLintptr Offset; - /** Size of data allowed to be referenced from the buffer (in bytes) */ - GLsizeiptr Size; - /** - * glBindBufferBase() indicates that the Size should be ignored and only - * limited by the current size of the BufferObject. - */ - GLboolean AutomaticSize; -}; - -/** - * ARB_shader_image_load_store image unit. - */ -struct gl_image_unit -{ - /** - * Texture object bound to this unit. - */ - struct gl_texture_object *TexObj; - - /** - * Level of the texture object bound to this unit. - */ - GLubyte Level; - - /** - * \c GL_TRUE if the whole level is bound as an array of layers, \c - * GL_FALSE if only some specific layer of the texture is bound. - * \sa Layer - */ - GLboolean Layered; - - /** - * Layer of the texture object bound to this unit as specified by the - * application. - */ - GLushort Layer; - - /** - * Layer of the texture object bound to this unit, or zero if - * Layered == false. - */ - GLushort _Layer; - - /** - * Access allowed to this texture image. Either \c GL_READ_ONLY, - * \c GL_WRITE_ONLY or \c GL_READ_WRITE. - */ - GLenum16 Access; - - /** - * GL internal format that determines the interpretation of the - * image memory when shader image operations are performed through - * this unit. - */ - GLenum16 Format; - - /** - * Mesa format corresponding to \c Format. - */ - mesa_format _ActualFormat:16; -}; - -/** - * Shader subroutines storage - */ -struct gl_subroutine_index_binding -{ - GLuint NumIndex; - GLuint *IndexPtr; -}; - -struct gl_texture_handle_object -{ - struct gl_texture_object *texObj; - struct gl_sampler_object *sampObj; - GLuint64 handle; -}; - -struct gl_image_handle_object -{ - struct gl_image_unit imgObj; - GLuint64 handle; -}; - -struct gl_memory_object -{ - GLuint Name; /**< hash table ID/name */ - GLboolean Immutable; /**< denotes mutability state of parameters */ - GLboolean Dedicated; /**< import memory from a dedicated allocation */ - - struct pipe_memory_object *memory; - - /* TEXTURE_TILING_EXT param from gl_texture_object */ - GLuint TextureTiling; -}; - -struct gl_semaphore_object -{ - GLuint Name; /**< hash table ID/name */ - struct pipe_fence_handle *fence; - enum pipe_fd_type type; - uint64_t timeline_value; -}; - -/** - * One element of the client attrib stack. - */ -struct gl_client_attrib_node -{ - GLbitfield Mask; - struct gl_array_attrib Array; - struct gl_vertex_array_object VAO; - struct gl_pixelstore_attrib Pack; - struct gl_pixelstore_attrib Unpack; -}; - - -/** - * glEnable node for the attribute stack. (glPushAttrib/glPopAttrib) - */ -struct gl_enable_attrib_node -{ - GLboolean AlphaTest; - GLboolean AutoNormal; - GLboolean Blend; - GLbitfield ClipPlanes; - GLboolean ColorMaterial; - GLboolean CullFace; - GLboolean DepthClampNear; - GLboolean DepthClampFar; - GLboolean DepthTest; - GLboolean Dither; - GLboolean Fog; - GLboolean Light[MAX_LIGHTS]; - GLboolean Lighting; - GLboolean LineSmooth; - GLboolean LineStipple; - GLboolean IndexLogicOp; - GLboolean ColorLogicOp; - - GLboolean Map1Color4; - GLboolean Map1Index; - GLboolean Map1Normal; - GLboolean Map1TextureCoord1; - GLboolean Map1TextureCoord2; - GLboolean Map1TextureCoord3; - GLboolean Map1TextureCoord4; - GLboolean Map1Vertex3; - GLboolean Map1Vertex4; - GLboolean Map2Color4; - GLboolean Map2Index; - GLboolean Map2Normal; - GLboolean Map2TextureCoord1; - GLboolean Map2TextureCoord2; - GLboolean Map2TextureCoord3; - GLboolean Map2TextureCoord4; - GLboolean Map2Vertex3; - GLboolean Map2Vertex4; - - GLboolean Normalize; - GLboolean PixelTexture; - GLboolean PointSmooth; - GLboolean PolygonOffsetPoint; - GLboolean PolygonOffsetLine; - GLboolean PolygonOffsetFill; - GLboolean PolygonSmooth; - GLboolean PolygonStipple; - GLboolean RescaleNormals; - GLbitfield Scissor; - GLboolean Stencil; - GLboolean StencilTwoSide; /* GL_EXT_stencil_two_side */ - GLboolean MultisampleEnabled; /* GL_ARB_multisample */ - GLboolean SampleAlphaToCoverage; /* GL_ARB_multisample */ - GLboolean SampleAlphaToOne; /* GL_ARB_multisample */ - GLboolean SampleCoverage; /* GL_ARB_multisample */ - GLboolean RasterPositionUnclipped; /* GL_IBM_rasterpos_clip */ - - GLbitfield Texture[MAX_TEXTURE_UNITS]; - GLbitfield TexGen[MAX_TEXTURE_UNITS]; - - /* GL_ARB_vertex_program */ - GLboolean VertexProgram; - GLboolean VertexProgramPointSize; - GLboolean VertexProgramTwoSide; - - /* GL_ARB_fragment_program */ - GLboolean FragmentProgram; - - /* GL_ARB_point_sprite */ - GLboolean PointSprite; - GLboolean FragmentShaderATI; - - /* GL_ARB_framebuffer_sRGB / GL_EXT_framebuffer_sRGB */ - GLboolean sRGBEnabled; - - /* GL_NV_conservative_raster */ - GLboolean ConservativeRasterization; -}; - -/** - * Texture node for the attribute stack. (glPushAttrib/glPopAttrib) - */ -struct gl_texture_attrib_node -{ - GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ - GLuint NumTexSaved; - struct gl_fixedfunc_texture_unit FixedFuncUnit[MAX_TEXTURE_COORD_UNITS]; - GLfloat LodBias[MAX_TEXTURE_UNITS]; - float LodBiasQuantized[MAX_TEXTURE_UNITS]; - - /** Saved default texture object state. */ - struct gl_texture_object SavedDefaultObj[NUM_TEXTURE_TARGETS]; - - /* For saving per texture object state (wrap modes, filters, etc), - * SavedObj[][].Target is unused, so the value is invalid. - */ - struct gl_texture_object SavedObj[MAX_COMBINED_TEXTURE_IMAGE_UNITS][NUM_TEXTURE_TARGETS]; -}; - - -/** - * Node for the attribute stack. (glPushAttrib/glPopAttrib) - */ -struct gl_attrib_node -{ - GLbitfield Mask; - GLbitfield OldPopAttribStateMask; - struct gl_accum_attrib Accum; - struct gl_colorbuffer_attrib Color; - struct gl_current_attrib Current; - struct gl_depthbuffer_attrib Depth; - struct gl_enable_attrib_node Enable; - struct gl_eval_attrib Eval; - struct gl_fog_attrib Fog; - struct gl_hint_attrib Hint; - struct gl_light_attrib Light; - struct gl_line_attrib Line; - struct gl_list_attrib List; - struct gl_pixel_attrib Pixel; - struct gl_point_attrib Point; - struct gl_polygon_attrib Polygon; - GLuint PolygonStipple[32]; - struct gl_scissor_attrib Scissor; - struct gl_stencil_attrib Stencil; - struct gl_transform_attrib Transform; - struct gl_multisample_attrib Multisample; - struct gl_texture_attrib_node Texture; - - struct viewport_state - { - struct gl_viewport_attrib ViewportArray[MAX_VIEWPORTS]; - GLuint SubpixelPrecisionBias[2]; - } Viewport; -}; - -/** - * Dispatch tables. - */ -struct gl_dispatch -{ - /** - * For non-displaylist-saving, non-begin/end. - */ - struct _glapi_table *OutsideBeginEnd; - - /** - * The dispatch table used between glBegin() and glEnd() (outside of a - * display list). Only valid functions between those two are set. - */ - struct _glapi_table *BeginEnd; - - /** - * Same as BeginEnd except glVertex{Attrib} functions. Used when - * HW GL_SELECT mode instead of BeginEnd to insert extra code - * for GL_SELECT. - */ - struct _glapi_table *HWSelectModeBeginEnd; - - /** - * The dispatch table used between glNewList() and glEndList(). - */ - struct _glapi_table *Save; - - /** - * Dispatch table for when a graphics reset has happened. - */ - struct _glapi_table *ContextLost; - - /** - * The current dispatch table for non-displaylist-saving execution. - * It can be equal to one of these: - * - OutsideBeginEnd - * - BeginEnd - * - HWSelectModeBeginEnd - */ - struct _glapi_table *Exec; - - /** - * The current dispatch table overall. It can be equal to one of these: - * - Exec - * - Save - * - ContextLost - */ - struct _glapi_table *Current; -}; - -/** - * Mesa rendering context. - * - * This is the central context data structure for Mesa. Almost all - * OpenGL state is contained in this structure. - * Think of this as a base class from which device drivers will derive - * sub classes. - */ -struct gl_context -{ - /** State possibly shared with other contexts in the address space */ - struct gl_shared_state *Shared; - - /** Whether Shared->BufferObjects has already been locked for this context. */ - bool BufferObjectsLocked; - /** Whether Shared->TexMutex has already been locked for this context. */ - bool TexturesLocked; - - /** \name API function pointer tables */ - /*@{*/ - gl_api API; - - /** - * Dispatch tables implementing OpenGL functions. GLThread has no effect - * on this. - */ - struct gl_dispatch Dispatch; - - /** - * Dispatch table used by GLThread, a component used to marshal API - * calls from an application to a separate thread. - */ - struct _glapi_table *MarshalExec; - - /** - * Dispatch table currently in use for fielding API calls from the client - * program. If API calls are being marshalled to another thread, this == - * MarshalExec. Otherwise it == Dispatch.Current. - */ - struct _glapi_table *GLApi; - - /*@}*/ - - - - struct gl_config Visual; - struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ - struct gl_framebuffer *ReadBuffer; /**< buffer for reading */ - struct gl_framebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */ - struct gl_framebuffer *WinSysReadBuffer; /**< set with MakeCurrent */ - - /** - * Device driver function pointer table - */ - struct dd_function_table Driver; - - /** Core/Driver constants */ - struct gl_constants Const; - - /** - * Bitmask of valid primitive types supported by this context type, - * GL version, and extensions, not taking current states into account. - * Current states can further reduce the final bitmask at draw time. - */ - GLbitfield SupportedPrimMask; - - /** - * Bitmask of valid primitive types depending on current states (such as - * shaders). This is 0 if the current states should result in - * GL_INVALID_OPERATION in draw calls. - */ - GLbitfield ValidPrimMask; - - GLenum16 DrawGLError; /**< GL error to return from draw calls */ - - /** - * Same as ValidPrimMask, but should be applied to glDrawElements*. - */ - GLbitfield ValidPrimMaskIndexed; - - /** DrawID for the next non-multi non-indirect draw. Only set by glthread. */ - GLuint DrawID; - - /** - * Whether DrawPixels/CopyPixels/Bitmap are valid to render. - */ - bool DrawPixValid; - - /** \name The various 4x4 matrix stacks */ - /*@{*/ - struct gl_matrix_stack ModelviewMatrixStack; - struct gl_matrix_stack ProjectionMatrixStack; - struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS]; - struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES]; - struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */ - /*@}*/ - - /** Combined modelview and projection matrix */ - GLmatrix _ModelProjectMatrix; - - /** \name Display lists */ - struct gl_dlist_state ListState; - - GLboolean ExecuteFlag; /**< Execute GL commands? */ - GLboolean CompileFlag; /**< Compile GL commands into display list? */ - - /** Extension information */ - struct gl_extensions Extensions; - - /** GL version integer, for example 31 for GL 3.1, or 20 for GLES 2.0. */ - GLuint Version; - char *VersionString; - - /** \name State attribute stack (for glPush/PopAttrib) */ - /*@{*/ - GLuint AttribStackDepth; - struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH]; - /*@}*/ - - /** \name Renderer attribute groups - * - * We define a struct for each attribute group to make pushing and popping - * attributes easy. Also it's a good organization. - */ - /*@{*/ - struct gl_accum_attrib Accum; /**< Accum buffer attributes */ - struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */ - struct gl_current_attrib Current; /**< Current attributes */ - struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */ - struct gl_eval_attrib Eval; /**< Eval attributes */ - struct gl_fog_attrib Fog; /**< Fog attributes */ - struct gl_hint_attrib Hint; /**< Hint attributes */ - struct gl_light_attrib Light; /**< Light attributes */ - struct gl_line_attrib Line; /**< Line attributes */ - struct gl_list_attrib List; /**< List attributes */ - struct gl_multisample_attrib Multisample; - struct gl_pixel_attrib Pixel; /**< Pixel attributes */ - struct gl_point_attrib Point; /**< Point attributes */ - struct gl_polygon_attrib Polygon; /**< Polygon attributes */ - GLuint PolygonStipple[32]; /**< Polygon stipple */ - struct gl_scissor_attrib Scissor; /**< Scissor attributes */ - struct gl_stencil_attrib Stencil; /**< Stencil buffer attributes */ - struct gl_texture_attrib Texture; /**< Texture attributes */ - struct gl_transform_attrib Transform; /**< Transformation attributes */ - struct gl_viewport_attrib ViewportArray[MAX_VIEWPORTS]; /**< Viewport attributes */ - GLuint SubpixelPrecisionBias[2]; /**< Viewport attributes */ - /*@}*/ - - /** \name Client attribute stack */ - /*@{*/ - GLuint ClientAttribStackDepth; - struct gl_client_attrib_node ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; - /*@}*/ - - /** \name Client attribute groups */ - /*@{*/ - struct gl_array_attrib Array; /**< Vertex arrays */ - struct gl_pixelstore_attrib Pack; /**< Pixel packing */ - struct gl_pixelstore_attrib Unpack; /**< Pixel unpacking */ - struct gl_pixelstore_attrib DefaultPacking; /**< Default params */ - /*@}*/ - - /** \name Other assorted state (not pushed/popped on attribute stack) */ - /*@{*/ - struct gl_pixelmaps PixelMaps; - - struct gl_evaluators EvalMap; /**< All evaluators */ - struct gl_feedback Feedback; /**< Feedback */ - struct gl_selection Select; /**< Selection */ - - struct gl_program_state Program; /**< general program state */ - struct gl_vertex_program_state VertexProgram; - struct gl_fragment_program_state FragmentProgram; - struct gl_geometry_program_state GeometryProgram; - struct gl_compute_program_state ComputeProgram; - struct gl_tess_ctrl_program_state TessCtrlProgram; - struct gl_tess_eval_program_state TessEvalProgram; - struct gl_ati_fragment_shader_state ATIFragmentShader; - - struct gl_pipeline_shader_state Pipeline; /**< GLSL pipeline shader object state */ - struct gl_pipeline_object Shader; /**< GLSL shader object state */ - - /** - * Current active shader pipeline state - * - * Almost all internal users want ::_Shader instead of ::Shader. The - * exceptions are bits of legacy GLSL API that do not know about separate - * shader objects. - * - * If a program is active via \c glUseProgram, this will point to - * \c ::Shader. - * - * If a program pipeline is active via \c glBindProgramPipeline, this will - * point to \c ::Pipeline.Current. - * - * If neither a program nor a program pipeline is active, this will point to - * \c ::Pipeline.Default. This ensures that \c ::_Shader will never be - * \c NULL. - */ - struct gl_pipeline_object *_Shader; - - /** - * NIR containing the functions that implement software fp64 support. - */ - struct nir_shader *SoftFP64; - - struct gl_query_state Query; /**< occlusion, timer queries */ - - struct gl_transform_feedback_state TransformFeedback; - - struct gl_perf_monitor_state PerfMonitor; - struct gl_perf_query_state PerfQuery; - - struct gl_buffer_object *DrawIndirectBuffer; /** < GL_ARB_draw_indirect */ - struct gl_buffer_object *ParameterBuffer; /** < GL_ARB_indirect_parameters */ - struct gl_buffer_object *DispatchIndirectBuffer; /** < GL_ARB_compute_shader */ - - struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */ - struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */ - - struct gl_buffer_object *QueryBuffer; /**< GL_ARB_query_buffer_object */ - - /** - * Current GL_ARB_uniform_buffer_object binding referenced by - * GL_UNIFORM_BUFFER target for glBufferData, glMapBuffer, etc. - */ - struct gl_buffer_object *UniformBuffer; - - /** - * Current GL_ARB_shader_storage_buffer_object binding referenced by - * GL_SHADER_STORAGE_BUFFER target for glBufferData, glMapBuffer, etc. - */ - struct gl_buffer_object *ShaderStorageBuffer; - - /** - * Array of uniform buffers for GL_ARB_uniform_buffer_object and GL 3.1. - * This is set up using glBindBufferRange() or glBindBufferBase(). They are - * associated with uniform blocks by glUniformBlockBinding()'s state in the - * shader program. - */ - struct gl_buffer_binding - UniformBufferBindings[MAX_COMBINED_UNIFORM_BUFFERS]; - - /** - * Array of shader storage buffers for ARB_shader_storage_buffer_object - * and GL 4.3. This is set up using glBindBufferRange() or - * glBindBufferBase(). They are associated with shader storage blocks by - * glShaderStorageBlockBinding()'s state in the shader program. - */ - struct gl_buffer_binding - ShaderStorageBufferBindings[MAX_COMBINED_SHADER_STORAGE_BUFFERS]; - - /** - * Object currently associated with the GL_ATOMIC_COUNTER_BUFFER - * target. - */ - struct gl_buffer_object *AtomicBuffer; - - /** - * Object currently associated w/ the GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD - * target. - */ - struct gl_buffer_object *ExternalVirtualMemoryBuffer; - - /** - * Array of atomic counter buffer binding points. - */ - struct gl_buffer_binding - AtomicBufferBindings[MAX_COMBINED_ATOMIC_BUFFERS]; - - /** - * Array of image units for ARB_shader_image_load_store. - */ - struct gl_image_unit ImageUnits[MAX_IMAGE_UNITS]; - - struct gl_subroutine_index_binding SubroutineIndex[MESA_SHADER_STAGES]; - /*@}*/ - - struct gl_meta_state *Meta; /**< for "meta" operations */ - - /* GL_EXT_framebuffer_object */ - struct gl_renderbuffer *CurrentRenderbuffer; - - GLenum16 ErrorValue; /**< Last error code */ - - /** - * Recognize and silence repeated error debug messages in buggy apps. - */ - const char *ErrorDebugFmtString; - GLuint ErrorDebugCount; - - /* GL_ARB_debug_output/GL_KHR_debug */ - simple_mtx_t DebugMutex; - struct gl_debug_state *Debug; - - GLenum16 RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */ - GLbitfield NewState; /**< bitwise-or of _NEW_* flags */ - GLbitfield PopAttribState; /**< Updated state since glPushAttrib */ - uint64_t NewDriverState; /**< bitwise-or of flags from DriverFlags */ - - struct gl_driver_flags DriverFlags; - - GLboolean ViewportInitialized; /**< has viewport size been initialized? */ - GLboolean _AllowDrawOutOfOrder; - - /** \name Derived state */ - GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ - GLfloat _EyeZDir[3]; - GLfloat _ModelViewInvScale; /* may be for model- or eyespace lighting */ - GLfloat _ModelViewInvScaleEyespace; /* always factor defined in spec */ - GLboolean _NeedEyeCoords; - - GLuint TextureStateTimestamp; /**< detect changes to shared state */ - - GLboolean PointSizeIsSet; /**< the glPointSize value in the shader is set */ - - /** \name For debugging/development only */ - /*@{*/ - GLboolean FirstTimeCurrent; - /*@}*/ - - /** - * False if this context was created without a config. This is needed - * because the initial state of glDrawBuffers depends on this - */ - GLboolean HasConfig; - - GLboolean TextureFormatSupported[MESA_FORMAT_COUNT]; - - GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */ - GLboolean IntelConservativeRasterization; /**< GL_CONSERVATIVE_RASTERIZATION_INTEL */ - GLboolean ConservativeRasterization; /**< GL_CONSERVATIVE_RASTERIZATION_NV */ - GLfloat ConservativeRasterDilate; - GLenum16 ConservativeRasterMode; - - GLboolean IntelBlackholeRender; /**< GL_INTEL_blackhole_render */ - - /** Does glVertexAttrib(0) alias glVertex()? */ - bool _AttribZeroAliasesVertex; - - /** - * When set, TileRasterOrderIncreasingX/Y control the order that a tiled - * renderer's tiles should be excecuted, to meet the requirements of - * GL_MESA_tile_raster_order. - */ - GLboolean TileRasterOrderFixed; - GLboolean TileRasterOrderIncreasingX; - GLboolean TileRasterOrderIncreasingY; - - /** - * \name Hooks for module contexts. - * - * These will eventually live in the driver or elsewhere. - */ - /*@{*/ - //struct vbo_context vbo_context; - struct st_context *st; - struct pipe_screen *screen; - struct pipe_context *pipe; - struct st_config_options *st_opts; - struct cso_context *cso_context; - bool has_invalidate_buffer; - bool has_string_marker; - /* On old libGL's for linux we need to invalidate the drawables - * on glViewpport calls, this is set via a option. - */ - bool invalidate_on_gl_viewport; - - /*@}*/ - - /** - * \name NV_vdpau_interop - */ - /*@{*/ - const void *vdpDevice; - const void *vdpGetProcAddress; - struct set *vdpSurfaces; - /*@}*/ - - /** - * Has this context observed a GPU reset in any context in the share group? - * - * Once this field becomes true, it is never reset to false. - */ - GLboolean ShareGroupReset; - - /** - * \name OES_primitive_bounding_box - * - * Stores the arguments to glPrimitiveBoundingBox - */ - GLfloat PrimitiveBoundingBox[8]; - - struct disk_cache *Cache; - - /** - * \name GL_ARB_bindless_texture - */ - /*@{*/ - struct hash_table_u64 *ResidentTextureHandles; - struct hash_table_u64 *ResidentImageHandles; - /*@}*/ - - bool shader_builtin_ref; - - struct pipe_draw_start_count_bias *tmp_draws; - unsigned num_tmp_draws; -}; - -#ifndef NDEBUG -extern int MESA_VERBOSE; -extern int MESA_DEBUG_FLAGS; -#else -# define MESA_VERBOSE 0 -# define MESA_DEBUG_FLAGS 0 -#endif - - -/** The MESA_VERBOSE var is a bitmask of these flags */ -enum _verbose -{ - VERBOSE_VARRAY = 0x0001, - VERBOSE_TEXTURE = 0x0002, - VERBOSE_MATERIAL = 0x0004, - VERBOSE_PIPELINE = 0x0008, - VERBOSE_DRIVER = 0x0010, - VERBOSE_STATE = 0x0020, - VERBOSE_API = 0x0040, - VERBOSE_DISPLAY_LIST = 0x0100, - VERBOSE_LIGHTING = 0x0200, - VERBOSE_PRIMS = 0x0400, - VERBOSE_VERTS = 0x0800, - VERBOSE_DISASSEM = 0x1000, - VERBOSE_SWAPBUFFERS = 0x4000 -}; - - -/** The MESA_DEBUG_FLAGS var is a bitmask of these flags */ -enum _debug -{ - DEBUG_SILENT = (1 << 0), - DEBUG_ALWAYS_FLUSH = (1 << 1), - DEBUG_INCOMPLETE_TEXTURE = (1 << 2), - DEBUG_INCOMPLETE_FBO = (1 << 3), - DEBUG_CONTEXT = (1 << 4) -}; - -#ifdef __cplusplus -} -#endif - -#endif /* MTYPES_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/shader_types.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/shader_types.h deleted file mode 100644 index 194c7f0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/shader_types.h +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 shader_types.h - * All the GL shader/program types. - */ - -#ifndef SHADER_TYPES_H -#define SHADER_TYPES_H - -#include "config.h" /* for MAX_FEEDBACK_BUFFERS */ -#include "glheader.h" -#include "menums.h" -#include "../../util/mesa-sha1.h" -#include "../../compiler/shader_info.h" -#include "../../compiler/glsl/list.h" -#include "../../compiler/glsl/ir_uniform.h" - -#include "../../gallium/include/pipe/p_state.h" - -/** - * Shader information needed by both gl_shader and gl_linked shader. - */ -struct gl_shader_info -{ - /** - * Tessellation Control shader state from layout qualifiers. - */ - struct { - /** - * 0 - vertices not declared in shader, or - * 1 .. GL_MAX_PATCH_VERTICES - */ - GLint VerticesOut; - } TessCtrl; - - /** - * Tessellation Evaluation shader state from layout qualifiers. - */ - struct { - enum tess_primitive_mode _PrimitiveMode; - - enum gl_tess_spacing Spacing; - - /** - * GL_CW, GL_CCW, or 0 if it's not set in this shader. - */ - GLenum16 VertexOrder; - /** - * 1, 0, or -1 if it's not set in this shader. - */ - int PointMode; - } TessEval; - - /** - * Geometry shader state from GLSL 1.50 layout qualifiers. - */ - struct { - GLint VerticesOut; - /** - * 0 - Invocations count not declared in shader, or - * 1 .. Const.MaxGeometryShaderInvocations - */ - GLint Invocations; - /** - * GL_POINTS, GL_LINES, GL_LINES_ADJACENCY, GL_TRIANGLES, or - * GL_TRIANGLES_ADJACENCY, or PRIM_UNKNOWN if it's not set in this - * shader. - */ - enum shader_prim InputType; - /** - * GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP, or PRIM_UNKNOWN if - * it's not set in this shader. - */ - enum shader_prim OutputType; - } Geom; - - /** - * Compute shader state from ARB_compute_shader and - * ARB_compute_variable_group_size layout qualifiers. - */ - struct { - /** - * Size specified using local_size_{x,y,z}, or all 0's to indicate that - * it's not set in this shader. - */ - unsigned LocalSize[3]; - - /** - * Whether a variable work group size has been specified as defined by - * ARB_compute_variable_group_size. - */ - bool LocalSizeVariable; - - /* - * Arrangement of invocations used to calculate derivatives in a compute - * shader. From NV_compute_shader_derivatives. - */ - enum gl_derivative_group DerivativeGroup; - } Comp; -}; - -/** - * Compile status enum. COMPILE_SKIPPED is used to indicate the compile - * was skipped due to the shader matching one that's been seen before by - * the on-disk cache. - */ -enum gl_compile_status -{ - COMPILE_FAILURE = 0, - COMPILE_SUCCESS, - COMPILE_SKIPPED -}; - -/** - * A GLSL shader object. - */ -struct gl_shader -{ - /** GL_FRAGMENT_SHADER || GL_VERTEX_SHADER || GL_GEOMETRY_SHADER_ARB || - * GL_TESS_CONTROL_SHADER || GL_TESS_EVALUATION_SHADER. - * Must be the first field. - */ - GLenum16 Type; - gl_shader_stage Stage; - GLuint Name; /**< AKA the handle */ - GLint RefCount; /**< Reference count */ - GLchar *Label; /**< GL_KHR_debug */ - GLboolean DeletePending; - bool IsES; /**< True if this shader uses GLSL ES */ - - enum gl_compile_status CompileStatus; - - /** SHA1 of the pre-processed source used by the disk cache. */ - uint8_t disk_cache_sha1[SHA1_DIGEST_LENGTH]; - /** SHA1 of the original source before replacement, set by glShaderSource. */ - uint8_t source_sha1[SHA1_DIGEST_LENGTH]; - /** SHA1 of FallbackSource (a copy of some original source before replacement). */ - uint8_t fallback_source_sha1[SHA1_DIGEST_LENGTH]; - /** SHA1 of the current compiled source, set by successful glCompileShader. */ - uint8_t compiled_source_sha1[SHA1_DIGEST_LENGTH]; - - const GLchar *Source; /**< Source code string */ - const GLchar *FallbackSource; /**< Fallback string used by on-disk cache*/ - - GLchar *InfoLog; - - unsigned Version; /**< GLSL version used for linking */ - - /** - * A bitmask of gl_advanced_blend_mode values - */ - GLbitfield BlendSupport; - - struct exec_list *ir; - struct glsl_symbol_table *symbols; - - /** - * Whether early fragment tests are enabled as defined by - * ARB_shader_image_load_store. - */ - bool EarlyFragmentTests; - - bool ARB_fragment_coord_conventions_enable; - bool OES_geometry_point_size_enable; - bool OES_tessellation_point_size_enable; - - bool redeclares_gl_fragcoord; - bool uses_gl_fragcoord; - - bool PostDepthCoverage; - bool PixelInterlockOrdered; - bool PixelInterlockUnordered; - bool SampleInterlockOrdered; - bool SampleInterlockUnordered; - bool InnerCoverage; - - /** - * Fragment shader state from GLSL 1.50 layout qualifiers. - */ - bool origin_upper_left; - bool pixel_center_integer; - - /** - * Whether bindless_sampler/bindless_image, and respectively - * bound_sampler/bound_image are declared at global scope as defined by - * ARB_bindless_texture. - */ - bool bindless_sampler; - bool bindless_image; - bool bound_sampler; - bool bound_image; - - /** - * Whether layer output is viewport-relative. - */ - bool redeclares_gl_layer; - bool layer_viewport_relative; - - /** Global xfb_stride out qualifier if any */ - GLuint TransformFeedbackBufferStride[MAX_FEEDBACK_BUFFERS]; - - struct gl_shader_info info; - - /* ARB_gl_spirv related data */ - struct gl_shader_spirv_data *spirv_data; -}; - -/** - * A linked GLSL shader object. - */ -struct gl_linked_shader -{ - gl_shader_stage Stage; - - /** All gl_shader::compiled_source_sha1 combined. */ - uint8_t linked_source_sha1[SHA1_DIGEST_LENGTH]; - - struct gl_program *Program; /**< Post-compile assembly code */ - - /** - * \name Sampler tracking - * - * \note Each of these fields is only set post-linking. - */ - /*@{*/ - GLbitfield shadow_samplers; /**< Samplers used for shadow sampling. */ - /*@}*/ - - /** - * Number of default uniform block components used by this shader. - * - * This field is only set post-linking. - */ - unsigned num_uniform_components; - - /** - * Number of combined uniform components used by this shader. - * - * This field is only set post-linking. It is the sum of the uniform block - * sizes divided by sizeof(float), and num_uniform_compoennts. - */ - unsigned num_combined_uniform_components; - - struct exec_list *ir; - struct glsl_symbol_table *symbols; - - /** - * ARB_gl_spirv related data. - * - * This is actually a reference to the gl_shader::spirv_data, which - * stores information that is also needed during linking. - */ - struct gl_shader_spirv_data *spirv_data; -}; - - -/** - * Link status enum. LINKING_SKIPPED is used to indicate linking - * was skipped due to the shader being loaded from the on-disk cache. - */ -enum gl_link_status -{ - LINKING_FAILURE = 0, - LINKING_SUCCESS, - LINKING_SKIPPED -}; - -/* All GLSL program resource types are next to each other, so we can use that - * to make them 0-based like this: - */ -#define GET_PROGRAM_RESOURCE_TYPE_FROM_GLENUM(x) ((x) - GL_UNIFORM) -#define NUM_PROGRAM_RESOURCE_TYPES (GL_TRANSFORM_FEEDBACK_VARYING - GL_UNIFORM + 1) - -/** - * A data structure to be shared by gl_shader_program and gl_program. - */ -struct gl_shader_program_data -{ - GLint RefCount; /**< Reference count */ - - /** SHA1 hash of linked shader program */ - unsigned char sha1[20]; - - unsigned NumUniformStorage; - unsigned NumHiddenUniforms; - struct gl_uniform_storage *UniformStorage; - - unsigned NumUniformBlocks; - unsigned NumShaderStorageBlocks; - - struct gl_uniform_block *UniformBlocks; - struct gl_uniform_block *ShaderStorageBlocks; - - struct gl_active_atomic_buffer *AtomicBuffers; - unsigned NumAtomicBuffers; - - /* Shader cache variables used during restore */ - unsigned NumUniformDataSlots; - union gl_constant_value *UniformDataSlots; - - /* Used to hold initial uniform values for program binary restores. - * - * From the ARB_get_program_binary spec: - * - * "A successful call to ProgramBinary will reset all uniform - * variables to their initial values. The initial value is either - * the value of the variable's initializer as specified in the - * original shader source, or 0 if no initializer was present. - */ - union gl_constant_value *UniformDataDefaults; - - /** Hash for quick search by name. */ - struct hash_table *ProgramResourceHash[NUM_PROGRAM_RESOURCE_TYPES]; - - GLboolean Validated; - - /** List of all active resources after linking. */ - struct gl_program_resource *ProgramResourceList; - unsigned NumProgramResourceList; - - enum gl_link_status LinkStatus; /**< GL_LINK_STATUS */ - GLchar *InfoLog; - - /* Mask of stages this program was linked against */ - unsigned linked_stages; - - /* Whether the shaders of this program are loaded from SPIR-V binaries - * (all have the SPIR_V_BINARY_ARB state). This was introduced by the - * ARB_gl_spirv extension. - */ - bool spirv; -}; - -/** - * A GLSL program object. - * Basically a linked collection of vertex and fragment shaders. - */ -struct gl_shader_program -{ - GLenum16 Type; /**< Always GL_SHADER_PROGRAM (internal token) */ - GLuint Name; /**< aka handle or ID */ - GLchar *Label; /**< GL_KHR_debug */ - GLint RefCount; /**< Reference count */ - GLboolean DeletePending; - - /** - * Is the application intending to glGetProgramBinary this program? - * - * BinaryRetrievableHint is the currently active hint that gets set - * during initialization and after linking and BinaryRetrievableHintPending - * is the hint set by the user to be active when program is linked next time. - */ - GLboolean BinaryRetrievableHint; - GLboolean BinaryRetrievableHintPending; - - /** - * Indicates whether program can be bound for individual pipeline stages - * using UseProgramStages after it is next linked. - */ - GLboolean SeparateShader; - - GLuint NumShaders; /**< number of attached shaders */ - struct gl_shader **Shaders; /**< List of attached the shaders */ - - /** - * User-defined attribute bindings - * - * These are set via \c glBindAttribLocation and are used to direct the - * GLSL linker. These are \b not the values used in the compiled shader, - * and they are \b not the values returned by \c glGetAttribLocation. - */ - struct string_to_uint_map *AttributeBindings; - - /** - * User-defined fragment data bindings - * - * These are set via \c glBindFragDataLocation and are used to direct the - * GLSL linker. These are \b not the values used in the compiled shader, - * and they are \b not the values returned by \c glGetFragDataLocation. - */ - struct string_to_uint_map *FragDataBindings; - struct string_to_uint_map *FragDataIndexBindings; - - /** - * Transform feedback varyings last specified by - * glTransformFeedbackVaryings(). - * - * For the current set of transform feedback varyings used for transform - * feedback output, see LinkedTransformFeedback. - */ - struct { - GLenum16 BufferMode; - /** Global xfb_stride out qualifier if any */ - GLuint BufferStride[MAX_FEEDBACK_BUFFERS]; - GLuint NumVarying; - GLchar **VaryingNames; /**< Array [NumVarying] of char * */ - } TransformFeedback; - - struct gl_program *last_vert_prog; - - /** Post-link gl_FragDepth layout for ARB_conservative_depth. */ - enum gl_frag_depth_layout FragDepthLayout; - - /** - * Geometry shader state - copied into gl_program by - * _mesa_copy_linked_program_data(). - */ - struct { - GLint VerticesIn; - - bool UsesEndPrimitive; - unsigned ActiveStreamMask; - } Geom; - - /** Data shared by gl_program and gl_shader_program */ - struct gl_shader_program_data *data; - - /** - * Mapping from GL uniform locations returned by \c glUniformLocation to - * UniformStorage entries. Arrays will have multiple contiguous slots - * in the UniformRemapTable, all pointing to the same UniformStorage entry. - */ - unsigned NumUniformRemapTable; - struct gl_uniform_storage **UniformRemapTable; - - /** - * Sometimes there are empty slots left over in UniformRemapTable after we - * allocate slots to explicit locations. This list stores the blocks of - * continuous empty slots inside UniformRemapTable. - */ - struct exec_list EmptyUniformLocations; - - /** - * Total number of explicit uniform location including inactive uniforms. - */ - unsigned NumExplicitUniformLocations; - - /** - * Map of active uniform names to locations - * - * Maps any active uniform that is not an array element to a location. - * Each active uniform, including individual structure members will appear - * in this map. This roughly corresponds to the set of names that would be - * enumerated by \c glGetActiveUniform. - */ - struct string_to_uint_map *UniformHash; - - GLboolean SamplersValidated; /**< Samplers validated against texture units? */ - - bool IsES; /**< True if this program uses GLSL ES */ - - /** - * Per-stage shaders resulting from the first stage of linking. - * - * Set of linked shaders for this program. The array is accessed using the - * \c MESA_SHADER_* defines. Entries for non-existent stages will be - * \c NULL. - */ - struct gl_linked_shader *_LinkedShaders[MESA_SHADER_STAGES]; - - /** - * True if any of the fragment shaders attached to this program use: - * #extension ARB_fragment_coord_conventions: enable - */ - GLboolean ARB_fragment_coord_conventions_enable; - - unsigned GLSL_Version; /**< GLSL version used for linking */ -}; - -/** - * Base class for any kind of program object - */ -struct gl_program -{ - /** FIXME: This must be first until we split shader_info from nir_shader */ - struct shader_info info; - - GLuint Id; - GLint RefCount; - GLubyte *String; /**< Null-terminated program text */ - - /** GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_GEOMETRY_PROGRAM_NV */ - GLenum16 Target; - GLenum16 Format; /**< String encoding format */ - - GLboolean _Used; /**< Ever used for drawing? Used for debugging */ - - struct nir_shader *nir; - - /* Saved and restored with metadata. Freed with ralloc. */ - void *driver_cache_blob; - size_t driver_cache_blob_size; - - /** Is this program written to on disk shader cache */ - bool program_written_to_cache; - - /** whether to skip VARYING_SLOT_PSIZ in st_translate_stream_output_info() */ - bool skip_pointsize_xfb; - - /** A bitfield indicating which vertex shader inputs consume two slots - * - * This is used for mapping from single-slot input locations in the GL API - * to dual-slot double input locations in the shader. This field is set - * once as part of linking and never updated again to ensure the mapping - * remains consistent. - * - * Note: There may be dual-slot variables in the original shader source - * which do not appear in this bitfield due to having been eliminated by - * the compiler prior to DualSlotInputs being calculated. There may also - * be bits set in this bitfield which are set but which the shader never - * reads due to compiler optimizations eliminating such variables after - * DualSlotInputs is calculated. - */ - GLbitfield64 DualSlotInputs; - /** Subset of OutputsWritten outputs written with non-zero index. */ - GLbitfield64 SecondaryOutputsWritten; - /** TEXTURE_x_BIT bitmask */ - GLbitfield16 TexturesUsed[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; - /** Bitfield of which samplers are used */ - GLbitfield SamplersUsed; - /** Texture units used for shadow sampling. */ - GLbitfield ShadowSamplers; - /** Texture units used for samplerExternalOES */ - GLbitfield ExternalSamplersUsed; - - /** Named parameters, constants, etc. from program text */ - struct gl_program_parameter_list *Parameters; - - /** Map from sampler unit to texture unit (set by glUniform1i()) */ - GLubyte SamplerUnits[MAX_SAMPLERS]; - - struct pipe_shader_state state; - struct ati_fragment_shader *ati_fs; - uint64_t affected_states; /**< ST_NEW_* flags to mark dirty when binding */ - - void *serialized_nir; - unsigned serialized_nir_size; - - struct gl_shader_program *shader_program; - - struct st_variant *variants; - - union { - /** Fields used by GLSL programs */ - struct { - /** Data shared by gl_program and gl_shader_program */ - struct gl_shader_program_data *data; - - struct gl_active_atomic_buffer **AtomicBuffers; - - /** Post-link transform feedback info. */ - struct gl_transform_feedback_info *LinkedTransformFeedback; - - /** - * Number of types for subroutine uniforms. - */ - GLuint NumSubroutineUniformTypes; - - /** - * Subroutine uniform remap table - * based on the program level uniform remap table. - */ - GLuint NumSubroutineUniforms; /* non-sparse total */ - GLuint NumSubroutineUniformRemapTable; - struct gl_uniform_storage **SubroutineUniformRemapTable; - - /** - * Num of subroutine functions for this stage and storage for them. - */ - GLuint NumSubroutineFunctions; - GLuint MaxSubroutineFunctionIndex; - struct gl_subroutine_function *SubroutineFunctions; - - /** - * Map from image uniform index to image unit (set by glUniform1i()) - * - * An image uniform index is associated with each image uniform by - * the linker. The image index associated with each uniform is - * stored in the \c gl_uniform_storage::image field. - */ - GLubyte ImageUnits[MAX_IMAGE_UNIFORMS]; - - /** Access qualifier from linked shader - */ - enum gl_access_qualifier image_access[MAX_IMAGE_UNIFORMS]; - - GLuint NumUniformBlocks; - struct gl_uniform_block **UniformBlocks; - struct gl_uniform_block **ShaderStorageBlocks; - - /** - * Bitmask of shader storage blocks not declared as read-only. - */ - unsigned ShaderStorageBlocksWriteAccess; - - /** Which texture target is being sampled - * (TEXTURE_1D/2D/3D/etc_INDEX) - */ - GLubyte SamplerTargets[MAX_SAMPLERS]; - - /** - * Number of samplers declared with the bindless_sampler layout - * qualifier as specified by ARB_bindless_texture. - */ - GLuint NumBindlessSamplers; - GLboolean HasBoundBindlessSampler; - struct gl_bindless_sampler *BindlessSamplers; - - /** - * Number of images declared with the bindless_image layout qualifier - * as specified by ARB_bindless_texture. - */ - GLuint NumBindlessImages; - GLboolean HasBoundBindlessImage; - struct gl_bindless_image *BindlessImages; - } sh; - - /** ARB assembly-style program fields */ - struct { - struct prog_instruction *Instructions; - - /** - * Local parameters used by the program. - * - * It's dynamically allocated because it is rarely used (just - * assembly-style programs), and MAX_PROGRAM_LOCAL_PARAMS entries - * once it's allocated. - */ - GLfloat (*LocalParams)[4]; - unsigned MaxLocalParams; - - /** Bitmask of which register files are read/written with indirect - * addressing. Mask of (1 << PROGRAM_x) bits. - */ - GLbitfield IndirectRegisterFiles; - - /** Logical counts */ - /*@{*/ - GLuint NumInstructions; - GLuint NumTemporaries; - GLuint NumParameters; - GLuint NumAttributes; - GLuint NumAddressRegs; - GLuint NumAluInstructions; - GLuint NumTexInstructions; - GLuint NumTexIndirections; - /*@}*/ - /** Native, actual h/w counts */ - /*@{*/ - GLuint NumNativeInstructions; - GLuint NumNativeTemporaries; - GLuint NumNativeParameters; - GLuint NumNativeAttributes; - GLuint NumNativeAddressRegs; - GLuint NumNativeAluInstructions; - GLuint NumNativeTexInstructions; - GLuint NumNativeTexIndirections; - /*@}*/ - - /** Used by ARB assembly-style programs. Can only be true for vertex - * programs. - */ - GLboolean IsPositionInvariant; - } arb; - }; -}; - -/* - * State/IR translators needs to store some extra vp info. - */ -struct gl_vertex_program -{ - struct gl_program Base; - - uint32_t vert_attrib_mask; /**< mask of sourced vertex attribs */ - ubyte num_inputs; - - /** Maps VARYING_SLOT_x to slot */ - ubyte result_to_output[VARYING_SLOT_MAX]; -}; - -/** - * Structure that represents a reference to an atomic buffer from some - * shader program. - */ -struct gl_active_atomic_buffer -{ - /** Uniform indices of the atomic counters declared within it. */ - GLuint *Uniforms; - GLuint NumUniforms; - - /** Binding point index associated with it. */ - GLuint Binding; - - /** Minimum reasonable size it is expected to have. */ - GLuint MinimumSize; - - /** Shader stages making use of it. */ - GLboolean StageReferences[MESA_SHADER_STAGES]; -}; - -struct gl_transform_feedback_varying_info -{ - struct gl_resource_name name; - GLenum16 Type; - GLint BufferIndex; - GLint Size; - GLint Offset; -}; - - -/** - * Per-output info vertex shaders for transform feedback. - */ -struct gl_transform_feedback_output -{ - uint32_t OutputRegister; - uint32_t OutputBuffer; - uint32_t NumComponents; - uint32_t StreamId; - - /** offset (in DWORDs) of this output within the interleaved structure */ - uint32_t DstOffset; - - /** - * Offset into the output register of the data to output. For example, - * if NumComponents is 2 and ComponentOffset is 1, then the data to - * offset is in the y and z components of the output register. - */ - uint32_t ComponentOffset; -}; - - -struct gl_transform_feedback_buffer -{ - uint32_t Binding; - - uint32_t NumVaryings; - - /** - * Total number of components stored in each buffer. This may be used by - * hardware back-ends to determine the correct stride when interleaving - * multiple transform feedback outputs in the same buffer. - */ - uint32_t Stride; - - /** - * Which transform feedback stream this buffer binding is associated with. - */ - uint32_t Stream; -}; - - -/** Post-link transform feedback info. */ -struct gl_transform_feedback_info -{ - unsigned NumOutputs; - - /* Bitmask of active buffer indices. */ - unsigned ActiveBuffers; - - struct gl_transform_feedback_output *Outputs; - - /** Transform feedback varyings used for the linking of this shader program. - * - * Use for glGetTransformFeedbackVarying(). - */ - struct gl_transform_feedback_varying_info *Varyings; - GLint NumVarying; - - struct gl_transform_feedback_buffer Buffers[MAX_FEEDBACK_BUFFERS]; -}; - -/** - * Shader subroutine function definition - */ -struct gl_subroutine_function -{ - struct gl_resource_name name; - int index; - int num_compat_types; - const struct glsl_type **types; -}; - -/** - * Active resource in a gl_shader_program - */ -struct gl_program_resource -{ - GLenum16 Type; /** Program interface type. */ - const void *Data; /** Pointer to resource associated data structure. */ - uint8_t StageReferences; /** Bitmask of shader stage references. */ -}; - -struct gl_uniform_buffer_variable -{ - char *Name; - - /** - * Name of the uniform as seen by glGetUniformIndices. - * - * glGetUniformIndices requires that the block instance index \b not be - * present in the name of queried uniforms. - * - * \note - * \c gl_uniform_buffer_variable::IndexName and - * \c gl_uniform_buffer_variable::Name may point to identical storage. - */ - char *IndexName; - - const struct glsl_type *Type; - unsigned int Offset; - GLboolean RowMajor; -}; - - -struct gl_uniform_block -{ - /** Declared name of the uniform block */ - struct gl_resource_name name; - - /** Array of supplemental information about UBO ir_variables. */ - struct gl_uniform_buffer_variable *Uniforms; - GLuint NumUniforms; - - /** - * Index (GL_UNIFORM_BLOCK_BINDING) into ctx->UniformBufferBindings[] to use - * with glBindBufferBase to bind a buffer object to this uniform block. - */ - GLuint Binding; - - /** - * Minimum size (in bytes) of a buffer object to back this uniform buffer - * (GL_UNIFORM_BLOCK_DATA_SIZE). - */ - GLuint UniformBufferSize; - - /** Stages that reference this block */ - uint8_t stageref; - - /** - * Linearized array index for uniform block instance arrays - * - * Given a uniform block instance array declared with size - * blk[s_0][s_1]..[s_m], the block referenced by blk[i_0][i_1]..[i_m] will - * have the linearized array index - * - * m-1 m - * i_m + ∑ i_j * ∏ s_k - * j=0 k=j+1 - * - * For a uniform block instance that is not an array, this is always 0. - */ - uint8_t linearized_array_index; - - /** - * Layout specified in the shader - * - * This isn't accessible through the API, but it is used while - * cross-validating uniform blocks. - */ - enum glsl_interface_packing _Packing; - GLboolean _RowMajor; -}; - -/** - * A bindless sampler object. - */ -struct gl_bindless_sampler -{ - /** Texture unit (set by glUniform1()). */ - GLubyte unit; - - /** Whether this bindless sampler is bound to a unit. */ - GLboolean bound; - - /** Texture Target (TEXTURE_1D/2D/3D/etc_INDEX). */ - gl_texture_index target; - - /** Pointer to the base of the data. */ - GLvoid *data; -}; - - -/** - * A bindless image object. - */ -struct gl_bindless_image -{ - /** Image unit (set by glUniform1()). */ - GLubyte unit; - - /** Whether this bindless image is bound to a unit. */ - GLboolean bound; - - /** Access qualifier from linked shader - */ - enum gl_access_qualifier image_access; - - /** Pointer to the base of the data. */ - GLvoid *data; -}; - -/** - * Data container for shader queries. This holds only the minimal - * amount of required information for resource queries to work. - */ -struct gl_shader_variable -{ - /** - * Declared type of the variable - */ - const struct glsl_type *type; - - /** - * If the variable is in an interface block, this is the type of the block. - */ - const struct glsl_type *interface_type; - - /** - * For variables inside structs (possibly recursively), this is the - * outermost struct type. - */ - const struct glsl_type *outermost_struct_type; - - /** - * Declared name of the variable - */ - struct gl_resource_name name; - - /** - * Storage location of the base of this variable - * - * The precise meaning of this field depends on the nature of the variable. - * - * - Vertex shader input: one of the values from \c gl_vert_attrib. - * - Vertex shader output: one of the values from \c gl_varying_slot. - * - Geometry shader input: one of the values from \c gl_varying_slot. - * - Geometry shader output: one of the values from \c gl_varying_slot. - * - Fragment shader input: one of the values from \c gl_varying_slot. - * - Fragment shader output: one of the values from \c gl_frag_result. - * - Uniforms: Per-stage uniform slot number for default uniform block. - * - Uniforms: Index within the uniform block definition for UBO members. - * - Non-UBO Uniforms: explicit location until linking then reused to - * store uniform slot number. - * - Other: This field is not currently used. - * - * If the variable is a uniform, shader input, or shader output, and the - * slot has not been assigned, the value will be -1. - */ - int location; - - /** - * Specifies the first component the variable is stored in as per - * ARB_enhanced_layouts. - */ - unsigned component:2; - - /** - * Output index for dual source blending. - * - * \note - * The GLSL spec only allows the values 0 or 1 for the index in \b dual - * source blending. - */ - unsigned index:1; - - /** - * Specifies whether a shader input/output is per-patch in tessellation - * shader stages. - */ - unsigned patch:1; - - /** - * Storage class of the variable. - * - * \sa (n)ir_variable_mode - */ - unsigned mode:4; - - /** - * Interpolation mode for shader inputs / outputs - * - * \sa glsl_interp_mode - */ - unsigned interpolation:2; - - /** - * Was the location explicitly set in the shader? - * - * If the location is explicitly set in the shader, it \b cannot be changed - * by the linker or by the API (e.g., calls to \c glBindAttribLocation have - * no effect). - */ - unsigned explicit_location:1; - - /** - * Precision qualifier. - */ - unsigned precision:2; -}; - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/shaderobj.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/shaderobj.h deleted file mode 100644 index a83547a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/shaderobj.h +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 2004-2007 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef SHADEROBJ_H -#define SHADEROBJ_H - - -#include "glheader.h" -#include "../../compiler/shader_enums.h" -#include "../program/link_program.h" -#include "macros.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_shader_program_data; -struct gl_linked_shader; -struct dd_function_table; -struct gl_pipeline_object; - -/** - * Internal functions - */ - -extern void -_mesa_init_shader_state(struct gl_context * ctx); - -extern void -_mesa_free_shader_state(struct gl_context *ctx); - - -extern void -_mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr, - struct gl_shader *sh); - -extern struct gl_shader * -_mesa_lookup_shader(struct gl_context *ctx, GLuint name); - -extern struct gl_shader * -_mesa_lookup_shader_err(struct gl_context *ctx, GLuint name, const char *caller); - - - -extern void -_mesa_reference_shader_program_(struct gl_context *ctx, - struct gl_shader_program **ptr, - struct gl_shader_program *shProg); - -void -_mesa_reference_shader_program_data(struct gl_shader_program_data **ptr, - struct gl_shader_program_data *data); - -static inline void -_mesa_reference_shader_program(struct gl_context *ctx, - struct gl_shader_program **ptr, - struct gl_shader_program *shProg) -{ - if (*ptr != shProg) - _mesa_reference_shader_program_(ctx, ptr, shProg); -} - -extern struct gl_shader * -_mesa_new_shader(GLuint name, gl_shader_stage type); - -extern void -_mesa_delete_shader(struct gl_context *ctx, struct gl_shader *sh); - -extern void -_mesa_delete_linked_shader(struct gl_context *ctx, - struct gl_linked_shader *sh); - -extern struct gl_shader_program * -_mesa_lookup_shader_program(struct gl_context *ctx, GLuint name); - -extern struct gl_shader_program * -_mesa_lookup_shader_program_err_glthread(struct gl_context *ctx, GLuint name, - bool glthread, const char *caller); - -extern struct gl_shader_program * -_mesa_lookup_shader_program_err(struct gl_context *ctx, GLuint name, - const char *caller); - -extern struct gl_shader_program * -_mesa_new_shader_program(GLuint name); - -extern struct gl_shader_program_data * -_mesa_create_shader_program_data(void); - -extern void -_mesa_clear_shader_program_data(struct gl_context *ctx, - struct gl_shader_program *shProg); - -extern void -_mesa_free_shader_program_data(struct gl_context *ctx, - struct gl_shader_program *shProg); - -extern void -_mesa_delete_shader_program(struct gl_context *ctx, - struct gl_shader_program *shProg); - -static inline gl_shader_stage -_mesa_shader_enum_to_shader_stage(GLenum v) -{ - switch (v) { - case GL_VERTEX_SHADER: - return MESA_SHADER_VERTEX; - case GL_FRAGMENT_SHADER: - return MESA_SHADER_FRAGMENT; - case GL_GEOMETRY_SHADER: - return MESA_SHADER_GEOMETRY; - case GL_TESS_CONTROL_SHADER: - return MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_SHADER: - return MESA_SHADER_TESS_EVAL; - default: - unreachable("bad value in _mesa_shader_enum_to_shader_stage()"); - } -} - -/* 8 bytes + another underscore */ -#define MESA_SUBROUTINE_PREFIX_LEN 9 -static inline const char * -_mesa_shader_stage_to_subroutine_prefix(gl_shader_stage stage) -{ - switch (stage) { - case MESA_SHADER_VERTEX: - return "__subu_v"; - case MESA_SHADER_GEOMETRY: - return "__subu_g"; - case MESA_SHADER_FRAGMENT: - return "__subu_f"; - case MESA_SHADER_COMPUTE: - return "__subu_c"; - case MESA_SHADER_TESS_CTRL: - return "__subu_t"; - case MESA_SHADER_TESS_EVAL: - return "__subu_e"; - default: - return NULL; - } -} - -static inline gl_shader_stage -_mesa_shader_stage_from_subroutine_uniform(GLenum subuniform) -{ - switch (subuniform) { - case GL_VERTEX_SUBROUTINE_UNIFORM: - return MESA_SHADER_VERTEX; - case GL_GEOMETRY_SUBROUTINE_UNIFORM: - return MESA_SHADER_GEOMETRY; - case GL_FRAGMENT_SUBROUTINE_UNIFORM: - return MESA_SHADER_FRAGMENT; - case GL_COMPUTE_SUBROUTINE_UNIFORM: - return MESA_SHADER_COMPUTE; - case GL_TESS_CONTROL_SUBROUTINE_UNIFORM: - return MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM: - return MESA_SHADER_TESS_EVAL; - } - unreachable("not reached"); -} - -static inline gl_shader_stage -_mesa_shader_stage_from_subroutine(GLenum subroutine) -{ - switch (subroutine) { - case GL_VERTEX_SUBROUTINE: - return MESA_SHADER_VERTEX; - case GL_GEOMETRY_SUBROUTINE: - return MESA_SHADER_GEOMETRY; - case GL_FRAGMENT_SUBROUTINE: - return MESA_SHADER_FRAGMENT; - case GL_COMPUTE_SUBROUTINE: - return MESA_SHADER_COMPUTE; - case GL_TESS_CONTROL_SUBROUTINE: - return MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_SUBROUTINE: - return MESA_SHADER_TESS_EVAL; - default: - unreachable("not reached"); - } -} - -static inline GLenum -_mesa_shader_stage_to_subroutine(gl_shader_stage stage) -{ - switch (stage) { - case MESA_SHADER_VERTEX: - return GL_VERTEX_SUBROUTINE; - case MESA_SHADER_GEOMETRY: - return GL_GEOMETRY_SUBROUTINE; - case MESA_SHADER_FRAGMENT: - return GL_FRAGMENT_SUBROUTINE; - case MESA_SHADER_COMPUTE: - return GL_COMPUTE_SUBROUTINE; - case MESA_SHADER_TESS_CTRL: - return GL_TESS_CONTROL_SUBROUTINE; - case MESA_SHADER_TESS_EVAL: - return GL_TESS_EVALUATION_SUBROUTINE; - default: - unreachable("not reached"); - } -} - -static inline GLenum -_mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage) -{ - switch (stage) { - case MESA_SHADER_VERTEX: - return GL_VERTEX_SUBROUTINE_UNIFORM; - case MESA_SHADER_GEOMETRY: - return GL_GEOMETRY_SUBROUTINE_UNIFORM; - case MESA_SHADER_FRAGMENT: - return GL_FRAGMENT_SUBROUTINE_UNIFORM; - case MESA_SHADER_COMPUTE: - return GL_COMPUTE_SUBROUTINE_UNIFORM; - case MESA_SHADER_TESS_CTRL: - return GL_TESS_CONTROL_SUBROUTINE_UNIFORM; - case MESA_SHADER_TESS_EVAL: - return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM; - default: - unreachable("not reached"); - } -} - -extern bool -_mesa_validate_pipeline_io(struct gl_pipeline_object *); - -#ifdef __cplusplus -} -#endif - -#endif /* SHADEROBJ_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/uniforms.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/uniforms.h deleted file mode 100644 index 43c2674..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/uniforms.h +++ /dev/null @@ -1,523 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 2010 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef UNIFORMS_H -#define UNIFORMS_H - -#include "glheader.h" -#include "../../compiler/glsl_types.h" -#include "../../compiler/glsl/ir_uniform.h" -#include "../program/prog_parameter.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -struct gl_program; -struct _glapi_table; - -void GLAPIENTRY -_mesa_Uniform1f(GLint, GLfloat); -void GLAPIENTRY -_mesa_Uniform2f(GLint, GLfloat, GLfloat); -void GLAPIENTRY -_mesa_Uniform3f(GLint, GLfloat, GLfloat, GLfloat); -void GLAPIENTRY -_mesa_Uniform4f(GLint, GLfloat, GLfloat, GLfloat, GLfloat); -void GLAPIENTRY -_mesa_Uniform1i(GLint, GLint); -void GLAPIENTRY -_mesa_Uniform2i(GLint, GLint, GLint); -void GLAPIENTRY -_mesa_Uniform3i(GLint, GLint, GLint, GLint); -void GLAPIENTRY -_mesa_Uniform4i(GLint, GLint, GLint, GLint, GLint); -void GLAPIENTRY -_mesa_Uniform1fv(GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_Uniform2fv(GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_Uniform3fv(GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_Uniform4fv(GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_Uniform1iv(GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_Uniform2iv(GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_Uniform3iv(GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_Uniform4iv(GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_Uniform1ui(GLint location, GLuint v0); -void GLAPIENTRY -_mesa_Uniform2ui(GLint location, GLuint v0, GLuint v1); -void GLAPIENTRY -_mesa_Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2); -void GLAPIENTRY -_mesa_Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -void GLAPIENTRY -_mesa_Uniform1uiv(GLint location, GLsizei count, const GLuint *value); -void GLAPIENTRY -_mesa_Uniform2uiv(GLint location, GLsizei count, const GLuint *value); -void GLAPIENTRY -_mesa_Uniform3uiv(GLint location, GLsizei count, const GLuint *value); -void GLAPIENTRY -_mesa_Uniform4uiv(GLint location, GLsizei count, const GLuint *value); -void GLAPIENTRY -_mesa_UniformMatrix2fv(GLint, GLsizei, GLboolean, const GLfloat *); -void GLAPIENTRY -_mesa_UniformMatrix3fv(GLint, GLsizei, GLboolean, const GLfloat *); -void GLAPIENTRY -_mesa_UniformMatrix4fv(GLint, GLsizei, GLboolean, const GLfloat *); -void GLAPIENTRY -_mesa_UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); -void GLAPIENTRY -_mesa_UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); -void GLAPIENTRY -_mesa_UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); -void GLAPIENTRY -_mesa_UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); -void GLAPIENTRY -_mesa_UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); -void GLAPIENTRY -_mesa_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, - const GLfloat *value); - -void GLAPIENTRY -_mesa_UniformHandleui64ARB(GLint location, GLuint64 value); -void GLAPIENTRY -_mesa_UniformHandleui64vARB(GLint location, GLsizei count, - const GLuint64 *value); -void GLAPIENTRY -_mesa_ProgramUniformHandleui64ARB(GLuint program, GLint location, - GLuint64 value); -void GLAPIENTRY -_mesa_ProgramUniformHandleui64vARB(GLuint program, GLint location, - GLsizei count, const GLuint64 *values); - -void GLAPIENTRY -_mesa_ProgramUniform1f(GLuint program, GLint, GLfloat); -void GLAPIENTRY -_mesa_ProgramUniform2f(GLuint program, GLint, GLfloat, GLfloat); -void GLAPIENTRY -_mesa_ProgramUniform3f(GLuint program, GLint, GLfloat, GLfloat, GLfloat); -void GLAPIENTRY -_mesa_ProgramUniform4f(GLuint program, GLint, GLfloat, GLfloat, GLfloat, GLfloat); -void GLAPIENTRY -_mesa_ProgramUniform1i(GLuint program, GLint, GLint); -void GLAPIENTRY -_mesa_ProgramUniform2i(GLuint program, GLint, GLint, GLint); -void GLAPIENTRY -_mesa_ProgramUniform3i(GLuint program, GLint, GLint, GLint, GLint); -void GLAPIENTRY -_mesa_ProgramUniform4i(GLuint program, GLint, GLint, GLint, GLint, GLint); -void GLAPIENTRY -_mesa_ProgramUniform1fv(GLuint program, GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_ProgramUniform2fv(GLuint program, GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_ProgramUniform3fv(GLuint program, GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_ProgramUniform4fv(GLuint program, GLint, GLsizei, const GLfloat *); -void GLAPIENTRY -_mesa_ProgramUniform1iv(GLuint program, GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_ProgramUniform2iv(GLuint program, GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_ProgramUniform3iv(GLuint program, GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_ProgramUniform4iv(GLuint program, GLint, GLsizei, const GLint *); -void GLAPIENTRY -_mesa_ProgramUniform1ui(GLuint program, GLint location, GLuint v0); -void GLAPIENTRY -_mesa_ProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1); -void GLAPIENTRY -_mesa_ProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, - GLuint v2); -void GLAPIENTRY -_mesa_ProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, - GLuint v2, GLuint v3); -void GLAPIENTRY -_mesa_ProgramUniform1uiv(GLuint program, GLint location, GLsizei count, - const GLuint *value); -void GLAPIENTRY -_mesa_ProgramUniform2uiv(GLuint program, GLint location, GLsizei count, - const GLuint *value); -void GLAPIENTRY -_mesa_ProgramUniform3uiv(GLuint program, GLint location, GLsizei count, - const GLuint *value); -void GLAPIENTRY -_mesa_ProgramUniform4uiv(GLuint program, GLint location, GLsizei count, - const GLuint *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix2fv(GLuint program, GLint, GLsizei, GLboolean, - const GLfloat *); -void GLAPIENTRY -_mesa_ProgramUniformMatrix3fv(GLuint program, GLint, GLsizei, GLboolean, - const GLfloat *); -void GLAPIENTRY -_mesa_ProgramUniformMatrix4fv(GLuint program, GLint, GLsizei, GLboolean, - const GLfloat *); -void GLAPIENTRY -_mesa_ProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLfloat *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLfloat *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLfloat *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLfloat *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLfloat *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLfloat *value); - -void GLAPIENTRY -_mesa_GetnUniformfvARB(GLuint, GLint, GLsizei, GLfloat *); -void GLAPIENTRY -_mesa_GetUniformfv(GLuint, GLint, GLfloat *); -void GLAPIENTRY -_mesa_GetnUniformivARB(GLuint, GLint, GLsizei, GLint *); -void GLAPIENTRY -_mesa_GetUniformuiv(GLuint, GLint, GLuint *); -void GLAPIENTRY -_mesa_GetnUniformuivARB(GLuint, GLint, GLsizei, GLuint *); -void GLAPIENTRY -_mesa_GetUniformuiv(GLuint program, GLint location, GLuint *params); -void GLAPIENTRY -_mesa_GetnUniformdvARB(GLuint, GLint, GLsizei, GLdouble *); -void GLAPIENTRY -_mesa_GetUniformdv(GLuint, GLint, GLdouble *); -GLint GLAPIENTRY -_mesa_GetUniformLocation(GLuint, const GLcharARB *); -GLint GLAPIENTRY -_mesa_GetUniformLocation_no_error(GLuint, const GLcharARB *); -GLuint GLAPIENTRY -_mesa_GetUniformBlockIndex(GLuint program, - const GLchar *uniformBlockName); -void GLAPIENTRY -_mesa_GetUniformIndices(GLuint program, - GLsizei uniformCount, - const GLchar * const *uniformNames, - GLuint *uniformIndices); - -void GLAPIENTRY -_mesa_UniformBlockBinding_no_error(GLuint program, GLuint uniformBlockIndex, - GLuint uniformBlockBinding); - -void GLAPIENTRY -_mesa_UniformBlockBinding(GLuint program, - GLuint uniformBlockIndex, - GLuint uniformBlockBinding); - -void GLAPIENTRY -_mesa_ShaderStorageBlockBinding_no_error(GLuint program, - GLuint shaderStorageBlockIndex, - GLuint shaderStorageBlockBinding); - -void GLAPIENTRY -_mesa_ShaderStorageBlockBinding(GLuint program, - GLuint shaderStorageBlockIndex, - GLuint shaderStorageBlockBinding); -void GLAPIENTRY -_mesa_GetActiveAtomicCounterBufferiv(GLuint program, GLuint bufferIndex, - GLenum pname, GLint *params); -void GLAPIENTRY -_mesa_GetActiveUniformBlockiv(GLuint program, - GLuint uniformBlockIndex, - GLenum pname, - GLint *params); -void GLAPIENTRY -_mesa_GetActiveUniformBlockName(GLuint program, - GLuint uniformBlockIndex, - GLsizei bufSize, - GLsizei *length, - GLchar *uniformBlockName); -void GLAPIENTRY -_mesa_GetActiveUniformName(GLuint program, GLuint uniformIndex, - GLsizei bufSize, GLsizei *length, - GLchar *uniformName); -void GLAPIENTRY -_mesa_GetActiveUniform(GLuint, GLuint, GLsizei, GLsizei *, - GLint *, GLenum *, GLcharARB *); -void GLAPIENTRY -_mesa_GetActiveUniformsiv(GLuint program, - GLsizei uniformCount, - const GLuint *uniformIndices, - GLenum pname, - GLint *params); -void GLAPIENTRY -_mesa_GetUniformiv(GLuint, GLint, GLint *); - -void GLAPIENTRY -_mesa_Uniform1d(GLint, GLdouble); -void GLAPIENTRY -_mesa_Uniform2d(GLint, GLdouble, GLdouble); -void GLAPIENTRY -_mesa_Uniform3d(GLint, GLdouble, GLdouble, GLdouble); -void GLAPIENTRY -_mesa_Uniform4d(GLint, GLdouble, GLdouble, GLdouble, GLdouble); - -void GLAPIENTRY -_mesa_Uniform1dv(GLint, GLsizei, const GLdouble *); -void GLAPIENTRY -_mesa_Uniform2dv(GLint, GLsizei, const GLdouble *); -void GLAPIENTRY -_mesa_Uniform3dv(GLint, GLsizei, const GLdouble *); -void GLAPIENTRY -_mesa_Uniform4dv(GLint, GLsizei, const GLdouble *); - -void GLAPIENTRY -_mesa_GetUniformi64vARB(GLuint, GLint, GLint64 *); -void GLAPIENTRY -_mesa_GetUniformui64vARB(GLuint, GLint, GLuint64 *); - -void GLAPIENTRY -_mesa_GetnUniformi64vARB(GLuint, GLint, GLsizei, GLint64 *); -void GLAPIENTRY -_mesa_GetnUniformui64vARB(GLuint, GLint, GLsizei, GLuint64 *); - -void GLAPIENTRY -_mesa_UniformMatrix2dv(GLint, GLsizei, GLboolean, const GLdouble *); -void GLAPIENTRY -_mesa_UniformMatrix3dv(GLint, GLsizei, GLboolean, const GLdouble *); -void GLAPIENTRY -_mesa_UniformMatrix4dv(GLint, GLsizei, GLboolean, const GLdouble *); -void GLAPIENTRY -_mesa_UniformMatrix2x3dv(GLint location, GLsizei count, GLboolean transpose, - const GLdouble *value); -void GLAPIENTRY -_mesa_UniformMatrix3x2dv(GLint location, GLsizei count, GLboolean transpose, - const GLdouble *value); -void GLAPIENTRY -_mesa_UniformMatrix2x4dv(GLint location, GLsizei count, GLboolean transpose, - const GLdouble *value); -void GLAPIENTRY -_mesa_UniformMatrix4x2dv(GLint location, GLsizei count, GLboolean transpose, - const GLdouble *value); -void GLAPIENTRY -_mesa_UniformMatrix3x4dv(GLint location, GLsizei count, GLboolean transpose, - const GLdouble *value); -void GLAPIENTRY -_mesa_UniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, - const GLdouble *value); - -void GLAPIENTRY -_mesa_ProgramUniform1d(GLuint program, GLint, GLdouble); -void GLAPIENTRY -_mesa_ProgramUniform2d(GLuint program, GLint, GLdouble, GLdouble); -void GLAPIENTRY -_mesa_ProgramUniform3d(GLuint program, GLint, GLdouble, GLdouble, GLdouble); -void GLAPIENTRY -_mesa_ProgramUniform4d(GLuint program, GLint, GLdouble, GLdouble, GLdouble, GLdouble); - -void GLAPIENTRY -_mesa_ProgramUniform1dv(GLuint program, GLint, GLsizei, const GLdouble *); -void GLAPIENTRY -_mesa_ProgramUniform2dv(GLuint program, GLint, GLsizei, const GLdouble *); -void GLAPIENTRY -_mesa_ProgramUniform3dv(GLuint program, GLint, GLsizei, const GLdouble *); -void GLAPIENTRY -_mesa_ProgramUniform4dv(GLuint program, GLint, GLsizei, const GLdouble *); - -void GLAPIENTRY -_mesa_ProgramUniformMatrix2dv(GLuint program, GLint, GLsizei, GLboolean, - const GLdouble *); -void GLAPIENTRY -_mesa_ProgramUniformMatrix3dv(GLuint program, GLint, GLsizei, GLboolean, - const GLdouble *); -void GLAPIENTRY -_mesa_ProgramUniformMatrix4dv(GLuint program, GLint, GLsizei, GLboolean, - const GLdouble *); -void GLAPIENTRY -_mesa_ProgramUniformMatrix2x3dv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLdouble *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix3x2dv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLdouble *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix2x4dv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLdouble *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix4x2dv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLdouble *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix3x4dv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLdouble *value); -void GLAPIENTRY -_mesa_ProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count, - GLboolean transpose, const GLdouble *value); - -void GLAPIENTRY -_mesa_Uniform1i64ARB(GLint, GLint64); -void GLAPIENTRY -_mesa_Uniform2i64ARB(GLint, GLint64, GLint64); -void GLAPIENTRY -_mesa_Uniform3i64ARB(GLint, GLint64, GLint64, GLint64); -void GLAPIENTRY -_mesa_Uniform4i64ARB(GLint, GLint64, GLint64, GLint64, GLint64); - -void GLAPIENTRY -_mesa_Uniform1i64vARB(GLint, GLsizei, const GLint64 *); -void GLAPIENTRY -_mesa_Uniform2i64vARB(GLint, GLsizei, const GLint64 *); -void GLAPIENTRY -_mesa_Uniform3i64vARB(GLint, GLsizei, const GLint64 *); -void GLAPIENTRY -_mesa_Uniform4i64vARB(GLint, GLsizei, const GLint64 *); - -void GLAPIENTRY -_mesa_Uniform1ui64ARB(GLint, GLuint64); -void GLAPIENTRY -_mesa_Uniform2ui64ARB(GLint, GLuint64, GLuint64); -void GLAPIENTRY -_mesa_Uniform3ui64ARB(GLint, GLuint64, GLuint64, GLuint64); -void GLAPIENTRY -_mesa_Uniform4ui64ARB(GLint, GLuint64, GLuint64, GLuint64, GLuint64); - -void GLAPIENTRY -_mesa_Uniform1ui64vARB(GLint, GLsizei, const GLuint64 *); -void GLAPIENTRY -_mesa_Uniform2ui64vARB(GLint, GLsizei, const GLuint64 *); -void GLAPIENTRY -_mesa_Uniform3ui64vARB(GLint, GLsizei, const GLuint64 *); -void GLAPIENTRY -_mesa_Uniform4ui64vARB(GLint, GLsizei, const GLuint64 *); - -void GLAPIENTRY -_mesa_ProgramUniform1i64ARB(GLuint, GLint, GLint64); -void GLAPIENTRY -_mesa_ProgramUniform2i64ARB(GLuint, GLint, GLint64, GLint64); -void GLAPIENTRY -_mesa_ProgramUniform3i64ARB(GLuint, GLint, GLint64, GLint64, GLint64); -void GLAPIENTRY -_mesa_ProgramUniform4i64ARB(GLuint, GLint, GLint64, GLint64, GLint64, GLint64); - -void GLAPIENTRY -_mesa_ProgramUniform1i64vARB(GLuint, GLint, GLsizei, const GLint64 *); -void GLAPIENTRY -_mesa_ProgramUniform2i64vARB(GLuint, GLint, GLsizei, const GLint64 *); -void GLAPIENTRY -_mesa_ProgramUniform3i64vARB(GLuint, GLint, GLsizei, const GLint64 *); -void GLAPIENTRY -_mesa_ProgramUniform4i64vARB(GLuint, GLint, GLsizei, const GLint64 *); - -void GLAPIENTRY -_mesa_ProgramUniform1ui64ARB(GLuint, GLint, GLuint64); -void GLAPIENTRY -_mesa_ProgramUniform2ui64ARB(GLuint, GLint, GLuint64, GLuint64); -void GLAPIENTRY -_mesa_ProgramUniform3ui64ARB(GLuint, GLint, GLuint64, GLuint64, GLuint64); -void GLAPIENTRY -_mesa_ProgramUniform4ui64ARB(GLuint, GLint, GLuint64, GLuint64, GLuint64, GLuint64); - -void GLAPIENTRY -_mesa_ProgramUniform1ui64vARB(GLuint, GLint, GLsizei, const GLuint64 *); -void GLAPIENTRY -_mesa_ProgramUniform2ui64vARB(GLuint, GLint, GLsizei, const GLuint64 *); -void GLAPIENTRY -_mesa_ProgramUniform3ui64vARB(GLuint, GLint, GLsizei, const GLuint64 *); -void GLAPIENTRY -_mesa_ProgramUniform4ui64vARB(GLuint, GLint, GLsizei, const GLuint64 *); - -void -_mesa_uniform(GLint location, GLsizei count, const GLvoid *values, - struct gl_context *, struct gl_shader_program *, - enum glsl_base_type basicType, unsigned src_components); - -void -_mesa_uniform_matrix(GLint location, GLsizei count, - GLboolean transpose, const void *values, - struct gl_context *, struct gl_shader_program *, - GLuint cols, GLuint rows, enum glsl_base_type basicType); - -void -_mesa_uniform_handle(GLint location, GLsizei count, const GLvoid *values, - struct gl_context *, struct gl_shader_program *); - -void -_mesa_get_uniform(struct gl_context *ctx, GLuint program, GLint location, - GLsizei bufSize, enum glsl_base_type returnType, - GLvoid *paramsOut); - -extern void -_mesa_uniform_attach_driver_storage(struct gl_uniform_storage *, - unsigned element_stride, - unsigned vector_stride, - enum gl_uniform_driver_format format, - void *data); - -extern void -_mesa_uniform_detach_all_driver_storage(struct gl_uniform_storage *uni); - -extern void -_mesa_propagate_uniforms_to_driver_storage(struct gl_uniform_storage *uni, - unsigned array_index, - unsigned count); - -extern void -_mesa_update_shader_textures_used(struct gl_shader_program *shProg, - struct gl_program *prog); - -extern bool -_mesa_sampler_uniforms_are_valid(const struct gl_shader_program *shProg, - char *errMsg, size_t errMsgLength); -extern bool -_mesa_sampler_uniforms_pipeline_are_valid(struct gl_pipeline_object *); - -extern void -_mesa_flush_vertices_for_uniforms(struct gl_context *ctx, - const struct gl_uniform_storage *uni); - -struct gl_builtin_uniform_element { - const char *field; - gl_state_index16 tokens[STATE_LENGTH]; - int swizzle; -}; - -struct gl_builtin_uniform_desc { - const char *name; - const struct gl_builtin_uniform_element *elements; - unsigned int num_elements; -}; - -#ifdef __cplusplus -} -#endif - - -#endif /* UNIFORMS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/version.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/version.h deleted file mode 100644 index 4469509..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/main/version.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef VERSION_H -#define VERSION_H - -#include -#include "glheader.h" -#include "menums.h" - -struct gl_context; -struct gl_constants; -struct gl_extensions; - -extern GLuint -_mesa_get_version(const struct gl_extensions *extensions, - struct gl_constants *consts, gl_api api); - -extern void -_mesa_compute_version(struct gl_context *ctx); - -extern bool -_mesa_override_gl_version_contextless(struct gl_constants *consts, - gl_api *apiOut, GLuint *versionOut); - -extern void -_mesa_override_gl_version(struct gl_context *ctx); - -extern void -_mesa_override_glsl_version(struct gl_constants *consts); - -extern void -_mesa_get_driver_uuid(struct gl_context *ctx, GLint *uuid); - -extern void -_mesa_get_device_uuid(struct gl_context *ctx, GLint *uuid); - -extern int -_mesa_get_shading_language_version(const struct gl_context *ctx, - int index, - char **versionOut); - -#endif /* VERSION_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/math/m_matrix.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/math/m_matrix.h deleted file mode 100644 index 9ef9eb0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/math/m_matrix.h +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2005 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 math/m_matrix.h - * Defines basic structures for matrix-handling. - */ - -#ifndef _M_MATRIX_H -#define _M_MATRIX_H - - -#include "../main/glheader.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * \name Symbolic names to some of the entries in the matrix - * - * These are handy for the viewport mapping, which is expressed as a matrix. - */ -/*@{*/ -#define MAT_SX 0 -#define MAT_SY 5 -#define MAT_SZ 10 -#define MAT_TX 12 -#define MAT_TY 13 -#define MAT_TZ 14 -/*@}*/ - - -/** - * Different kinds of 4x4 transformation matrices. - * We use these to select specific optimized vertex transformation routines. - */ -enum GLmatrixtype { - MATRIX_GENERAL, /**< general 4x4 matrix */ - MATRIX_IDENTITY, /**< identity matrix */ - MATRIX_3D_NO_ROT, /**< orthogonal projection and others... */ - MATRIX_PERSPECTIVE, /**< perspective projection matrix */ - MATRIX_2D, /**< 2-D transformation */ - MATRIX_2D_NO_ROT, /**< 2-D scale & translate only */ - MATRIX_3D /**< 3-D transformation */ -} ; - -/** - * Matrix type to represent 4x4 transformation matrices. - */ -typedef struct { - GLfloat *m; /**< 16 matrix elements (16-byte aligned) */ - GLfloat *inv; /**< 16-element inverse (16-byte aligned) */ - GLuint flags; /**< possible values determined by (of \link - * MatFlags MAT_FLAG_* flags\endlink) - */ - enum GLmatrixtype type; -} GLmatrix; - - - - -extern void -_math_matrix_ctr( GLmatrix *m ); - -extern void -_math_matrix_dtr( GLmatrix *m ); - -extern void -_math_matrix_mul_matrix( GLmatrix *dest, const GLmatrix *a, const GLmatrix *b ); - -extern void -_math_matrix_mul_floats( GLmatrix *dest, const GLfloat *b ); - -extern void -_math_matrix_loadf( GLmatrix *mat, const GLfloat *m ); - -extern void -_math_matrix_translate( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z ); - -extern void -_math_matrix_rotate( GLmatrix *m, GLfloat angle, - GLfloat x, GLfloat y, GLfloat z ); - -extern void -_math_matrix_scale( GLmatrix *mat, GLfloat x, GLfloat y, GLfloat z ); - -extern void -_math_matrix_ortho( GLmatrix *mat, - GLfloat left, GLfloat right, - GLfloat bottom, GLfloat top, - GLfloat nearval, GLfloat farval ); - -extern void -_math_matrix_frustum( GLmatrix *mat, - GLfloat left, GLfloat right, - GLfloat bottom, GLfloat top, - GLfloat nearval, GLfloat farval ); - -extern void -_math_matrix_viewport( GLmatrix *m, const float scale[3], - const float translate[3], double depthMax ); - -extern void -_math_matrix_set_identity( GLmatrix *dest ); - -extern void -_math_matrix_copy( GLmatrix *to, const GLmatrix *from ); - -extern void -_math_matrix_analyse( GLmatrix *mat ); - -extern void -_math_matrix_print( const GLmatrix *m ); - -extern GLboolean -_math_matrix_is_length_preserving( const GLmatrix *m ); - -extern GLboolean -_math_matrix_has_rotation( const GLmatrix *m ); - -extern GLboolean -_math_matrix_is_general_scale( const GLmatrix *m ); - -extern GLboolean -_math_matrix_is_dirty( const GLmatrix *m ); - - -/** - * \name Related functions that don't actually operate on GLmatrix structs - */ -/*@{*/ - -extern void -_math_transposef( GLfloat to[16], const GLfloat from[16] ); - -extern void -_math_transposed( GLdouble to[16], const GLdouble from[16] ); - -extern void -_math_transposefd( GLfloat to[16], const GLdouble from[16] ); - - -/* - * Transform a point (column vector) by a matrix: Q = M * P - */ -#define TRANSFORM_POINT( Q, M, P ) \ - Q[0] = M[0] * P[0] + M[4] * P[1] + M[8] * P[2] + M[12] * P[3]; \ - Q[1] = M[1] * P[0] + M[5] * P[1] + M[9] * P[2] + M[13] * P[3]; \ - Q[2] = M[2] * P[0] + M[6] * P[1] + M[10] * P[2] + M[14] * P[3]; \ - Q[3] = M[3] * P[0] + M[7] * P[1] + M[11] * P[2] + M[15] * P[3]; - - -#define TRANSFORM_POINT3( Q, M, P ) \ - Q[0] = M[0] * P[0] + M[4] * P[1] + M[8] * P[2] + M[12]; \ - Q[1] = M[1] * P[0] + M[5] * P[1] + M[9] * P[2] + M[13]; \ - Q[2] = M[2] * P[0] + M[6] * P[1] + M[10] * P[2] + M[14]; \ - Q[3] = M[3] * P[0] + M[7] * P[1] + M[11] * P[2] + M[15]; - - -/* - * Transform a normal (row vector) by a matrix: [NX NY NZ] = N * MAT - */ -#define TRANSFORM_NORMAL( TO, N, MAT ) \ -do { \ - TO[0] = N[0] * MAT[0] + N[1] * MAT[1] + N[2] * MAT[2]; \ - TO[1] = N[0] * MAT[4] + N[1] * MAT[5] + N[2] * MAT[6]; \ - TO[2] = N[0] * MAT[8] + N[1] * MAT[9] + N[2] * MAT[10]; \ -} while (0) - - -/** - * Transform a direction by a matrix. - */ -#define TRANSFORM_DIRECTION( TO, DIR, MAT ) \ -do { \ - TO[0] = DIR[0] * MAT[0] + DIR[1] * MAT[4] + DIR[2] * MAT[8]; \ - TO[1] = DIR[0] * MAT[1] + DIR[1] * MAT[5] + DIR[2] * MAT[9]; \ - TO[2] = DIR[0] * MAT[2] + DIR[1] * MAT[6] + DIR[2] * MAT[10];\ -} while (0) - - -extern void -_mesa_transform_vector(GLfloat u[4], const GLfloat v[4], const GLfloat m[16]); - - -/*@}*/ - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/ir_to_mesa.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/ir_to_mesa.h deleted file mode 100644 index 442004e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/ir_to_mesa.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_TO_MESA_H -#define IR_TO_MESA_H - -#include "../main/glheader.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; -struct gl_program; -struct gl_shader; -struct gl_shader_program; -struct gl_linked_shader; -struct gl_program_parameter_list; - -void _mesa_glsl_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); -GLboolean _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog); - -void -_mesa_generate_parameters_list_for_uniforms(struct gl_context *ctx, - struct gl_shader_program - *shader_program, - struct gl_linked_shader *sh, - struct gl_program_parameter_list - *params); -void -_mesa_associate_uniform_storage(struct gl_context *ctx, - struct gl_shader_program *shader_program, - struct gl_program *prog); - -#ifdef __cplusplus -} -#endif - -#endif /* IR_TO_MESA_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/link_program.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/link_program.h deleted file mode 100644 index b3b5be2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/link_program.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef IR_TO_MESA_H -#define IR_TO_MESA_H - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; -struct gl_shader_program; - -#ifdef __cplusplus -} -#endif - -#endif /* IR_TO_MESA_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_instruction.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_instruction.h deleted file mode 100644 index ac8301f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_instruction.h +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 prog_instruction.h - * - * Vertex/fragment program instruction datatypes and constants. - * - * \author Brian Paul - * \author Keith Whitwell - * \author Ian Romanick - */ - - -#ifndef PROG_INSTRUCTION_H -#define PROG_INSTRUCTION_H - - -#include "../main/glheader.h" - - -/** - * Swizzle indexes. - * Do not change! - */ -/*@{*/ -#define SWIZZLE_X 0 -#define SWIZZLE_Y 1 -#define SWIZZLE_Z 2 -#define SWIZZLE_W 3 -#define SWIZZLE_ZERO 4 /**< For SWZ instruction only */ -#define SWIZZLE_ONE 5 /**< For SWZ instruction only */ -#define SWIZZLE_NIL 7 /**< used during shader code gen (undefined value) */ -/*@}*/ - -#define MAKE_SWIZZLE4(a,b,c,d) (((a)<<0) | ((b)<<3) | ((c)<<6) | ((d)<<9)) -#define SWIZZLE_NOOP MAKE_SWIZZLE4(0,1,2,3) -#define GET_SWZ(swz, idx) (((swz) >> ((idx)*3)) & 0x7) -#define GET_BIT(msk, idx) (((msk) >> (idx)) & 0x1) -/** Determine if swz contains SWIZZLE_ZERO/ONE/NIL for any components. */ -#define HAS_EXTENDED_SWIZZLE(swz) (swz & 0x924) - -#define SWIZZLE_XYZW MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_W) -#define SWIZZLE_XXXX MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X) -#define SWIZZLE_YYYY MAKE_SWIZZLE4(SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y) -#define SWIZZLE_ZZZZ MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z, SWIZZLE_Z) -#define SWIZZLE_WWWW MAKE_SWIZZLE4(SWIZZLE_W, SWIZZLE_W, SWIZZLE_W, SWIZZLE_W) - - -/** - * Writemask values, 1 bit per component. - */ -/*@{*/ -#define WRITEMASK_X 0x1 -#define WRITEMASK_Y 0x2 -#define WRITEMASK_XY 0x3 -#define WRITEMASK_Z 0x4 -#define WRITEMASK_XZ 0x5 -#define WRITEMASK_YZ 0x6 -#define WRITEMASK_XYZ 0x7 -#define WRITEMASK_W 0x8 -#define WRITEMASK_XW 0x9 -#define WRITEMASK_YW 0xa -#define WRITEMASK_XYW 0xb -#define WRITEMASK_ZW 0xc -#define WRITEMASK_XZW 0xd -#define WRITEMASK_YZW 0xe -#define WRITEMASK_XYZW 0xf -/*@}*/ - - -/** - * Per-component negation masks - */ -/*@{*/ -#define NEGATE_X 0x1 -#define NEGATE_Y 0x2 -#define NEGATE_Z 0x4 -#define NEGATE_W 0x8 -#define NEGATE_XYZ 0x7 -#define NEGATE_XYZW 0xf -#define NEGATE_NONE 0x0 -/*@}*/ - - -/** - * Program instruction opcodes for vertex, fragment and geometry programs. - */ -enum prog_opcode { - /* ARB_vp ARB_fp NV_vp NV_fp GLSL */ - /*------------------------------------------*/ - OPCODE_NOP = 0, /* X */ - OPCODE_ABS, /* X X 1.1 X */ - OPCODE_ADD, /* X X X X X */ - OPCODE_ARL, /* X X X */ - OPCODE_BGNLOOP, /* opt */ - OPCODE_BGNSUB, /* opt */ - OPCODE_BRK, /* 2 opt */ - OPCODE_CAL, /* 2 2 opt */ - OPCODE_CMP, /* X X */ - OPCODE_CONT, /* opt */ - OPCODE_COS, /* X 2 X X */ - OPCODE_DDX, /* X X */ - OPCODE_DDY, /* X X */ - OPCODE_DP2, /* 2 X */ - OPCODE_DP3, /* X X X X X */ - OPCODE_DP4, /* X X X X X */ - OPCODE_DPH, /* X X 1.1 */ - OPCODE_DST, /* X X X X */ - OPCODE_ELSE, /* opt */ - OPCODE_END, /* X X X X opt */ - OPCODE_ENDIF, /* opt */ - OPCODE_ENDLOOP, /* opt */ - OPCODE_ENDSUB, /* opt */ - OPCODE_EX2, /* X X 2 X X */ - OPCODE_EXP, /* X X */ - OPCODE_FLR, /* X X 2 X X */ - OPCODE_FRC, /* X X 2 X X */ - OPCODE_IF, /* opt */ - OPCODE_KIL, /* X X */ - OPCODE_LG2, /* X X 2 X X */ - OPCODE_LIT, /* X X X X */ - OPCODE_LOG, /* X X */ - OPCODE_LRP, /* X X */ - OPCODE_MAD, /* X X X X X */ - OPCODE_MAX, /* X X X X X */ - OPCODE_MIN, /* X X X X X */ - OPCODE_MOV, /* X X X X X */ - OPCODE_MUL, /* X X X X X */ - OPCODE_NOISE1, /* X */ - OPCODE_NOISE2, /* X */ - OPCODE_NOISE3, /* X */ - OPCODE_NOISE4, /* X */ - OPCODE_POW, /* X X X X */ - OPCODE_RCP, /* X X X X X */ - OPCODE_RET, /* 2 2 opt */ - OPCODE_RSQ, /* X X X X X */ - OPCODE_SCS, /* X X */ - OPCODE_SGE, /* X X X X X */ - OPCODE_SIN, /* X 2 X X */ - OPCODE_SLT, /* X X X X X */ - OPCODE_SSG, /* 2 X */ - OPCODE_SUB, /* X X 1.1 X X */ - OPCODE_SWZ, /* X X X */ - OPCODE_TEX, /* X 3 X X */ - OPCODE_TXB, /* X 3 X */ - OPCODE_TXD, /* X X */ - OPCODE_TXL, /* 3 2 X */ - OPCODE_TXP, /* X X */ - OPCODE_TRUNC, /* X */ - OPCODE_XPD, /* X X */ - MAX_OPCODE -}; - - -/** - * Number of bits for the src/dst register Index field. - * This limits the size of temp/uniform register files. - */ -#define INST_INDEX_BITS 12 - - -/** - * Instruction source register. - */ -struct prog_src_register -{ - GLuint File:4; /**< One of the PROGRAM_* register file values. */ - GLint Index:(INST_INDEX_BITS+1); /**< Extra bit here for sign bit. - * May be negative for relative addressing. - */ - GLuint Swizzle:12; - GLuint RelAddr:1; - - /** - * Negation. - * This will either be NEGATE_NONE or NEGATE_XYZW, except for the SWZ - * instruction which allows per-component negation. - */ - GLuint Negate:4; -}; - - -/** - * Instruction destination register. - */ -struct prog_dst_register -{ - GLuint File:4; /**< One of the PROGRAM_* register file values */ - GLuint Index:INST_INDEX_BITS; /**< Unsigned, never negative */ - GLuint WriteMask:4; - GLuint RelAddr:1; -}; - - -/** - * Vertex/fragment program instruction. - */ -struct prog_instruction -{ - enum prog_opcode Opcode; - struct prog_src_register SrcReg[3]; - struct prog_dst_register DstReg; - - /** - * Saturate each value of the vectored result to the range [0,1]. - * - * \since - * ARB_fragment_program - */ - GLuint Saturate:1; - - /** - * \name Extra fields for TEX, TXB, TXD, TXL, TXP instructions. - */ - /*@{*/ - /** Source texture unit. */ - GLuint TexSrcUnit:5; - - /** Source texture target, one of TEXTURE_{1D,2D,3D,CUBE,RECT}_INDEX */ - GLuint TexSrcTarget:4; - - /** True if tex instruction should do shadow comparison */ - GLuint TexShadow:1; - /*@}*/ - - /** - * For BRA and CAL instructions, the location to jump to. - * For BGNLOOP, points to ENDLOOP (and vice-versa). - * For BRK, points to ENDLOOP - * For IF, points to ELSE or ENDIF. - * For ELSE, points to ENDIF. - */ - GLint BranchTarget; -}; - - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_program; - -extern void -_mesa_init_instructions(struct prog_instruction *inst, GLuint count); - -extern struct prog_instruction * -_mesa_copy_instructions(struct prog_instruction *dest, - const struct prog_instruction *src, GLuint n); - -extern GLuint -_mesa_num_inst_src_regs(enum prog_opcode opcode); - -extern GLuint -_mesa_num_inst_dst_regs(enum prog_opcode opcode); - -extern GLboolean -_mesa_is_tex_instruction(enum prog_opcode opcode); - -extern GLboolean -_mesa_check_soa_dependencies(const struct prog_instruction *inst); - -extern const char * -_mesa_opcode_string(enum prog_opcode opcode); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PROG_INSTRUCTION_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_parameter.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_parameter.c deleted file mode 100644 index b8ba16d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_parameter.c +++ /dev/null @@ -1,487 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 prog_parameter.c - * Program parameter lists and functions. - * \author Brian Paul - */ - -#include "../../util/glheader.h" -#include "../main/macros.h" -#include "../main/errors.h" -#include "../../util/u_memory.h" -#include "prog_instruction.h" -#include "prog_parameter.h" -#include "prog_statevars.h" - - -/** - * Look for a float vector in the given parameter list. The float vector - * may be of length 1, 2, 3 or 4. If swizzleOut is non-null, we'll try - * swizzling to find a match. - * \param list the parameter list to search - * \param v the float vector to search for - * \param vSize number of element in v - * \param posOut returns the position of the constant, if found - * \param swizzleOut returns a swizzle mask describing location of the - * vector elements if found. - * \return GL_TRUE if found, GL_FALSE if not found - */ -static GLboolean -lookup_parameter_constant(const struct gl_program_parameter_list *list, - const gl_constant_value v[], GLuint vSize, - GLint *posOut, GLuint *swizzleOut) -{ - GLuint i; - - assert(vSize >= 1); - assert(vSize <= 4); - - if (!list) { - *posOut = -1; - return GL_FALSE; - } - - for (i = 0; i < list->NumParameters; i++) { - if (list->Parameters[i].Type == PROGRAM_CONSTANT) { - unsigned offset = list->Parameters[i].ValueOffset; - - if (!swizzleOut) { - /* swizzle not allowed */ - GLuint j, match = 0; - for (j = 0; j < vSize; j++) { - if (v[j].u == list->ParameterValues[offset + j].u) - match++; - } - if (match == vSize) { - *posOut = i; - return GL_TRUE; - } - } - else { - /* try matching w/ swizzle */ - if (vSize == 1) { - /* look for v[0] anywhere within float[4] value */ - GLuint j; - for (j = 0; j < list->Parameters[i].Size; j++) { - if (list->ParameterValues[offset + j].u == v[0].u) { - /* found it */ - *posOut = i; - *swizzleOut = MAKE_SWIZZLE4(j, j, j, j); - return GL_TRUE; - } - } - } - else if (vSize <= list->Parameters[i].Size) { - /* see if we can match this constant (with a swizzle) */ - GLuint swz[4]; - GLuint match = 0, j, k; - for (j = 0; j < vSize; j++) { - if (v[j].u == list->ParameterValues[offset + j].u) { - swz[j] = j; - match++; - } - else { - for (k = 0; k < list->Parameters[i].Size; k++) { - if (v[j].u == list->ParameterValues[offset + k].u) { - swz[j] = k; - match++; - break; - } - } - } - } - /* smear last value to remaining positions */ - for (; j < 4; j++) - swz[j] = swz[j-1]; - - if (match == vSize) { - *posOut = i; - *swizzleOut = MAKE_SWIZZLE4(swz[0], swz[1], swz[2], swz[3]); - return GL_TRUE; - } - } - } - } - } - - *posOut = -1; - return GL_FALSE; -} - - -struct gl_program_parameter_list * -_mesa_new_parameter_list(void) -{ - struct gl_program_parameter_list *list = - CALLOC_STRUCT(gl_program_parameter_list); - if (!list) - return NULL; - - list->UniformBytes = 0; - list->FirstStateVarIndex = INT_MAX; - list->LastStateVarIndex = 0; - return list; -} - - -struct gl_program_parameter_list * -_mesa_new_parameter_list_sized(unsigned size) -{ - struct gl_program_parameter_list *p = _mesa_new_parameter_list(); - - - if ((p != NULL) && (size != 0)) { - _mesa_reserve_parameter_storage(p, size, size); - - if ((p->Parameters == NULL) || (p->ParameterValues == NULL)) { - free(p->Parameters); - align_free(p->ParameterValues); - free(p); - p = NULL; - } - } - - return p; -} - - -/** - * Free a parameter list and all its parameters - */ -void -_mesa_free_parameter_list(struct gl_program_parameter_list *paramList) -{ - GLuint i; - for (i = 0; i < paramList->NumParameters; i++) { - free((void *)paramList->Parameters[i].Name); - } - free(paramList->Parameters); - align_free(paramList->ParameterValues); - FREE(paramList); -} - - -/** - * Make sure there are enough unused parameter slots. Reallocate the list - * if needed. - * - * \param paramList where to reserve parameter slots - * \param reserve_params number of parameter description slots - * \param reserve_values number of parameter vec4 slots - */ -void -_mesa_reserve_parameter_storage(struct gl_program_parameter_list *paramList, - unsigned reserve_params, - unsigned reserve_values) -{ - const GLuint oldNum = paramList->NumParameters; - const unsigned oldValNum = paramList->NumParameterValues; - const unsigned needSizeValues = oldValNum + reserve_values * 4; - - if (paramList->DisallowRealloc && - (oldNum + reserve_params > paramList->Size || - needSizeValues > paramList->SizeValues)) { - _mesa_problem(NULL, "Parameter storage reallocation disallowed.\n" - "This is a Mesa bug.\n" - "Increase the reservation size in the code (wanted bytes %u, have %u || wanted values %u have %u).", - oldNum + reserve_params, paramList->Size, needSizeValues, paramList->SizeValues); - abort(); - } - - if (oldNum + reserve_params > paramList->Size) { - /* Need to grow the parameter list array (alloc some extra) */ - paramList->Size += 4 * reserve_params; - - /* realloc arrays */ - paramList->Parameters = - realloc(paramList->Parameters, - paramList->Size * sizeof(struct gl_program_parameter)); - } - - if (needSizeValues > paramList->SizeValues) { - unsigned oldSize = paramList->SizeValues; - paramList->SizeValues = needSizeValues + 16; /* alloc some extra */ - - paramList->ParameterValues = (gl_constant_value *) - align_realloc(paramList->ParameterValues, /* old buf */ - oldValNum * sizeof(gl_constant_value),/* old sz */ - /* Overallocate the size by 12 because matrix rows can - * be allocated partially but fetch_state always writes - * 4 components (16 bytes). - */ - paramList->SizeValues * sizeof(gl_constant_value) + - 12, 16); - /* The values are written to the shader cache, so clear them. */ - memset(paramList->ParameterValues + oldSize, 0, - (paramList->SizeValues - oldSize) * sizeof(gl_constant_value)); - } -} - - -/** - * Disallow reallocating the parameter storage, so that uniform storage - * can have pointers pointing to it. - */ -void -_mesa_disallow_parameter_storage_realloc(struct gl_program_parameter_list *paramList) -{ - paramList->DisallowRealloc = true; -} - - -/** - * Add a new parameter to a parameter list. - * Note that parameter values are usually 4-element GLfloat vectors. - * When size > 4 we'll allocate a sequential block of parameters to - * store all the values (in blocks of 4). - * - * \param paramList the list to add the parameter to - * \param type type of parameter, such as - * \param name the parameter name, will be duplicated/copied! - * \param size number of elements in 'values' vector (1..4, or more) - * \param datatype GL_FLOAT, GL_FLOAT_VECx, GL_INT, GL_INT_VECx or GL_NONE. - * \param values initial parameter value, up to 4 gl_constant_values, or NULL - * \param state state indexes, or NULL - * \return index of new parameter in the list, or -1 if error (out of mem) - */ -GLint -_mesa_add_parameter(struct gl_program_parameter_list *paramList, - gl_register_file type, const char *name, - GLuint size, GLenum datatype, - const gl_constant_value *values, - const gl_state_index16 state[STATE_LENGTH], - bool pad_and_align) -{ - assert(0 < size); - const int oldNum = paramList->NumParameters; - unsigned oldValNum = paramList->NumParameterValues; - const unsigned padded_size = pad_and_align ? align(size, 4) : size; - - if (pad_and_align) - oldValNum = align(oldValNum, 4); /* pad start to a vec4 boundary */ - else if (_mesa_gl_datatype_is_64bit(datatype)) - oldValNum = align(oldValNum, 2); /* pad start to 64-bit */ - - unsigned elements = (oldValNum - paramList->NumParameterValues) + padded_size; - _mesa_reserve_parameter_storage(paramList, 1, DIV_ROUND_UP(elements, 4)); - - if (!paramList->Parameters || - !paramList->ParameterValues) { - /* out of memory */ - paramList->NumParameters = 0; - paramList->Size = 0; - paramList->SizeValues = 0; - return -1; - } - - paramList->NumParameters = oldNum + 1; - - paramList->NumParameterValues = oldValNum + padded_size; - - memset(¶mList->Parameters[oldNum], 0, - sizeof(struct gl_program_parameter)); - - struct gl_program_parameter *p = paramList->Parameters + oldNum; - p->Name = strdup(name ? name : ""); - p->Type = type; - p->Size = size; - p->Padded = pad_and_align; - p->DataType = datatype; - - paramList->Parameters[oldNum].ValueOffset = oldValNum; - if (values) { - if (size >= 4) { - memcpy(paramList->ParameterValues + oldValNum, values, - size * sizeof(values[0])); - } else { - /* copy 1, 2 or 3 values */ - assert(size < 4); - unsigned j; - for (j = 0; j < size; j++) { - paramList->ParameterValues[oldValNum + j].f = values[j].f; - } - - /* Zero out padding (if any) to avoid valgrind errors */ - for (; j < padded_size; j++) { - paramList->ParameterValues[oldValNum + j].f = 0; - } - } - } else { - for (unsigned j = 0; j < padded_size; j++) { - paramList->ParameterValues[oldValNum + j].f = 0; - } - } - - if (state) { - for (unsigned i = 0; i < STATE_LENGTH; i++) - paramList->Parameters[oldNum].StateIndexes[i] = state[i]; - } else { - paramList->Parameters[oldNum].StateIndexes[0] = STATE_NOT_STATE_VAR; - } - - if (type == PROGRAM_UNIFORM || type == PROGRAM_CONSTANT) { - paramList->UniformBytes = - MAX2(paramList->UniformBytes, - (paramList->Parameters[oldNum].ValueOffset + - paramList->Parameters[oldNum].Size) * 4); - } else if (type == PROGRAM_STATE_VAR) { - paramList->FirstStateVarIndex = - MIN2(paramList->FirstStateVarIndex, oldNum); - paramList->LastStateVarIndex = - MAX2(paramList->LastStateVarIndex, oldNum); - } else { - unreachable("invalid parameter type"); - } - - assert(paramList->NumParameters <= paramList->Size); - assert(paramList->NumParameterValues <= paramList->SizeValues); - - return (GLint) oldNum; -} - - -/** - * Add a new unnamed constant to the parameter list. This will be used - * when a fragment/vertex program contains something like this: - * MOV r, { 0, 1, 2, 3 }; - * If swizzleOut is non-null we'll search the parameter list for an - * existing instance of the constant which matches with a swizzle. - * - * \param paramList the parameter list - * \param values four float values - * \param swizzleOut returns swizzle mask for accessing the constant - * \return index/position of the new parameter in the parameter list. - */ -GLint -_mesa_add_typed_unnamed_constant(struct gl_program_parameter_list *paramList, - const gl_constant_value *values, GLuint size, - GLenum datatype, GLuint *swizzleOut) -{ - GLint pos; - assert(size >= 1); - assert(size <= 4); - - if (swizzleOut && - lookup_parameter_constant(paramList, values, size, &pos, swizzleOut)) { - return pos; - } - - /* Look for empty space in an already unnamed constant parameter - * to add this constant. This will only work for single-element - * constants because we rely on smearing (i.e. .yyyy or .zzzz). - */ - if (size == 1 && swizzleOut) { - for (pos = 0; pos < (GLint) paramList->NumParameters; pos++) { - struct gl_program_parameter *p = paramList->Parameters + pos; - unsigned offset = paramList->Parameters[pos].ValueOffset; - if (p->Type == PROGRAM_CONSTANT && p->Size + size <= 4) { - /* ok, found room */ - gl_constant_value *pVal = paramList->ParameterValues + offset; - GLuint swz = p->Size; /* 1, 2 or 3 for Y, Z, W */ - pVal[p->Size] = values[0]; - p->Size++; - *swizzleOut = MAKE_SWIZZLE4(swz, swz, swz, swz); - return pos; - } - } - } - - /* add a new parameter to store this constant */ - pos = _mesa_add_parameter(paramList, PROGRAM_CONSTANT, NULL, - size, datatype, values, NULL, true); - if (pos >= 0 && swizzleOut) { - if (size == 1) - *swizzleOut = SWIZZLE_XXXX; - else - *swizzleOut = SWIZZLE_NOOP; - } - return pos; -} - -GLint -_mesa_add_sized_state_reference(struct gl_program_parameter_list *paramList, - const gl_state_index16 stateTokens[STATE_LENGTH], - const unsigned size, bool pad_and_align) -{ - char *name; - GLint index; - - /* Check if the state reference is already in the list */ - for (index = 0; index < (GLint) paramList->NumParameters; index++) { - if (!memcmp(paramList->Parameters[index].StateIndexes, - stateTokens, - sizeof(paramList->Parameters[index].StateIndexes))) { - return index; - } - } - - name = _mesa_program_state_string(stateTokens); - index = _mesa_add_parameter(paramList, PROGRAM_STATE_VAR, name, - size, GL_NONE, NULL, stateTokens, - pad_and_align); - paramList->StateFlags |= _mesa_program_state_flags(stateTokens); - - /* free name string here since we duplicated it in add_parameter() */ - free(name); - - return index; -} - - -/** - * Add a new state reference to the parameter list. - * This will be used when the program contains something like this: - * PARAM ambient = state.material.front.ambient; - * - * \param paramList the parameter list - * \param stateTokens an array of STATE_LENGTH state tokens - * \return index of the new parameter. - */ -GLint -_mesa_add_state_reference(struct gl_program_parameter_list *paramList, - const gl_state_index16 stateTokens[STATE_LENGTH]) -{ - return _mesa_add_sized_state_reference(paramList, stateTokens, 4, true); -} - -void -_mesa_recompute_parameter_bounds(struct gl_program_parameter_list *list) -{ - list->UniformBytes = 0; - list->FirstStateVarIndex = INT_MAX; - list->LastStateVarIndex = 0; - - for (int i = 0; i < (int)list->NumParameters; i++) { - if (list->Parameters[i].Type == PROGRAM_STATE_VAR) { - list->FirstStateVarIndex = MIN2(list->FirstStateVarIndex, i); - list->LastStateVarIndex = MAX2(list->LastStateVarIndex, i); - } else { - list->UniformBytes = MAX2(list->UniformBytes, - (list->Parameters[i].ValueOffset + - list->Parameters[i].Size) * 4); - } - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_parameter.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_parameter.h deleted file mode 100644 index 7a27841..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_parameter.h +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 prog_parameter.c - * Program parameter lists and functions. - * \author Brian Paul - */ - -#ifndef PROG_PARAMETER_H -#define PROG_PARAMETER_H - -#include -#include -#include "prog_statevars.h" - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Names of the various vertex/fragment program register files, etc. - * - * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c) - * All values should fit in a 4-bit field. - * - * NOTE: PROGRAM_STATE_VAR, PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be - * considered to be "uniform" variables since they can only be set outside - * glBegin/End. They're also all stored in the same Parameters array. - */ -typedef enum -{ - PROGRAM_TEMPORARY, /**< machine->Temporary[] */ - PROGRAM_INPUT, /**< machine->Inputs[] */ - PROGRAM_OUTPUT, /**< machine->Outputs[] */ - PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */ - PROGRAM_CONSTANT, /**< gl_program->Parameters[] */ - PROGRAM_UNIFORM, /**< gl_program->Parameters[] */ - PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */ - PROGRAM_ADDRESS, /**< machine->AddressReg */ - PROGRAM_SYSTEM_VALUE,/**< InstanceId, PrimitiveID, etc. */ - PROGRAM_UNDEFINED, /**< Invalid/TBD value */ - PROGRAM_FILE_MAX -} gl_register_file; - - -/** - * Actual data for constant values of parameters. - */ -typedef union gl_constant_value -{ - GLfloat f; - GLint b; - GLint i; - GLuint u; -} gl_constant_value; - - -/** - * Program parameter. - * Used by shaders/programs for uniforms, constants, varying vars, etc. - */ -struct gl_program_parameter -{ - const char *Name; /**< Null-terminated string */ - gl_register_file Type:5; /**< PROGRAM_CONSTANT or STATE_VAR */ - - /** - * We need to keep track of whether the param is padded for use in the - * shader cache. - */ - bool Padded:1; - - GLenum16 DataType; /**< GL_FLOAT, GL_FLOAT_VEC2, etc */ - - /** - * Number of components (1..4), or more. - * If the number of components is greater than 4, - * this parameter is part of a larger uniform like a GLSL matrix or array. - */ - GLushort Size; - /** - * A sequence of STATE_* tokens and integers to identify GL state. - */ - gl_state_index16 StateIndexes[STATE_LENGTH]; - - /** - * Offset within ParameterValues where this parameter is stored. - */ - unsigned ValueOffset; - - /** - * Index of this parameter's uniform storage. - */ - uint32_t UniformStorageIndex; - - /** - * Index of the first uniform storage that is associated with the same - * variable as this parameter. - */ - uint32_t MainUniformStorageIndex; -}; - - -/** - * List of gl_program_parameter instances. - */ -struct gl_program_parameter_list -{ - unsigned Size; /**< allocated size of Parameters */ - unsigned SizeValues; /**< alllocate size of ParameterValues */ - GLuint NumParameters; /**< number of used parameters in array */ - unsigned NumParameterValues; /**< number of used parameter values array */ - struct gl_program_parameter *Parameters; /**< Array [Size] */ - gl_constant_value *ParameterValues; /**< Array [Size] of gl_constant_value */ - GLbitfield StateFlags; /**< _NEW_* flags indicating which state changes - might invalidate ParameterValues[] */ - bool DisallowRealloc; - - /* Parameters are optionally sorted as follows. Uniforms and constants - * are first, then state vars. This should be true in all cases except - * ir_to_mesa, which adds constants at the end, and ARB_vp with ARL, - * which can't sort parameters. - */ - int UniformBytes; - int FirstStateVarIndex; - int LastStateVarIndex; -}; - - -extern struct gl_program_parameter_list * -_mesa_new_parameter_list(void); - -extern struct gl_program_parameter_list * -_mesa_new_parameter_list_sized(unsigned size); - -extern void -_mesa_free_parameter_list(struct gl_program_parameter_list *paramList); - -extern void -_mesa_reserve_parameter_storage(struct gl_program_parameter_list *paramList, - unsigned reserve_params, - unsigned reserve_values); - -extern void -_mesa_disallow_parameter_storage_realloc(struct gl_program_parameter_list *paramList); - -extern GLint -_mesa_add_parameter(struct gl_program_parameter_list *paramList, - gl_register_file type, const char *name, - GLuint size, GLenum datatype, - const gl_constant_value *values, - const gl_state_index16 state[STATE_LENGTH], - bool pad_and_align); - -extern GLint -_mesa_add_typed_unnamed_constant(struct gl_program_parameter_list *paramList, - const gl_constant_value *values, GLuint size, - GLenum datatype, GLuint *swizzleOut); - -static inline GLint -_mesa_add_unnamed_constant(struct gl_program_parameter_list *paramList, - const gl_constant_value *values, GLuint size, - GLuint *swizzleOut) -{ - return _mesa_add_typed_unnamed_constant(paramList, values, size, GL_NONE, - swizzleOut); -} - -extern GLint -_mesa_add_sized_state_reference(struct gl_program_parameter_list *paramList, - const gl_state_index16 stateTokens[STATE_LENGTH], - const unsigned size, bool pad_and_align); - -extern GLint -_mesa_add_state_reference(struct gl_program_parameter_list *paramList, - const gl_state_index16 stateTokens[STATE_LENGTH]); - - -static inline GLint -_mesa_lookup_parameter_index(const struct gl_program_parameter_list *paramList, - const char *name) -{ - if (!paramList) - return -1; - - /* name must be null-terminated */ - for (GLint i = 0; i < (GLint) paramList->NumParameters; i++) { - if (paramList->Parameters[i].Name && - strcmp(paramList->Parameters[i].Name, name) == 0) - return i; - } - - return -1; -} - -static inline bool -_mesa_gl_datatype_is_64bit(GLenum datatype) -{ - switch (datatype) { - case GL_DOUBLE: - case GL_DOUBLE_VEC2: - case GL_DOUBLE_VEC3: - case GL_DOUBLE_VEC4: - case GL_DOUBLE_MAT2: - case GL_DOUBLE_MAT2x3: - case GL_DOUBLE_MAT2x4: - case GL_DOUBLE_MAT3: - case GL_DOUBLE_MAT3x2: - case GL_DOUBLE_MAT3x4: - case GL_DOUBLE_MAT4: - case GL_DOUBLE_MAT4x2: - case GL_DOUBLE_MAT4x3: - case GL_INT64_ARB: - case GL_INT64_VEC2_ARB: - case GL_INT64_VEC3_ARB: - case GL_INT64_VEC4_ARB: - case GL_UNSIGNED_INT64_ARB: - case GL_UNSIGNED_INT64_VEC2_ARB: - case GL_UNSIGNED_INT64_VEC3_ARB: - case GL_UNSIGNED_INT64_VEC4_ARB: - return true; - default: - return false; - } -} - -void -_mesa_recompute_parameter_bounds(struct gl_program_parameter_list *list); - -#ifdef __cplusplus -} -#endif - -#endif /* PROG_PARAMETER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_statevars.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_statevars.h deleted file mode 100644 index 631f308..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/prog_statevars.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2007 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef PROG_STATEVARS_H -#define PROG_STATEVARS_H - - -#include "../../util/glheader.h" -#include "../../compiler/shader_enums.h" -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - -struct gl_context; -struct gl_constants; -struct gl_program_parameter_list; - - -/** - * Used for describing GL state referenced from inside ARB vertex and - * fragment programs. - * A string such as "state.light[0].ambient" gets translated into a - * sequence of tokens such as [ STATE_LIGHT, 0, STATE_AMBIENT ]. - * - * For state that's an array, like STATE_CLIPPLANE, the 2nd token [1] should - * always be the array index. - */ -typedef enum gl_state_index_ { - STATE_NOT_STATE_VAR = 0, - - STATE_MATERIAL, - - STATE_LIGHT, /* One gl_light attribute. */ - STATE_LIGHT_ARRAY, /* Multiple gl_light attributes loaded at once. */ - STATE_LIGHT_ATTENUATION_ARRAY, - STATE_LIGHTMODEL_AMBIENT, - STATE_LIGHTMODEL_SCENECOLOR, - STATE_LIGHTPROD, - STATE_LIGHTPROD_ARRAY_FRONT, /* multiple lights, only front faces */ - STATE_LIGHTPROD_ARRAY_BACK, /* multiple lights, only back faces */ - STATE_LIGHTPROD_ARRAY_TWOSIDE, /* multiple lights, both sides */ - - STATE_TEXGEN, - STATE_TEXENV_COLOR, - - STATE_FOG_COLOR, - STATE_FOG_PARAMS, - - STATE_CLIPPLANE, - - STATE_POINT_SIZE, - STATE_POINT_ATTENUATION, - - STATE_MODELVIEW_MATRIX, - STATE_MODELVIEW_MATRIX_INVERSE, - STATE_MODELVIEW_MATRIX_TRANSPOSE, - STATE_MODELVIEW_MATRIX_INVTRANS, - - STATE_PROJECTION_MATRIX, - STATE_PROJECTION_MATRIX_INVERSE, - STATE_PROJECTION_MATRIX_TRANSPOSE, - STATE_PROJECTION_MATRIX_INVTRANS, - - STATE_MVP_MATRIX, - STATE_MVP_MATRIX_INVERSE, - STATE_MVP_MATRIX_TRANSPOSE, - STATE_MVP_MATRIX_INVTRANS, - - STATE_TEXTURE_MATRIX, - STATE_TEXTURE_MATRIX_INVERSE, - STATE_TEXTURE_MATRIX_TRANSPOSE, - STATE_TEXTURE_MATRIX_INVTRANS, - - STATE_PROGRAM_MATRIX, - STATE_PROGRAM_MATRIX_INVERSE, - STATE_PROGRAM_MATRIX_TRANSPOSE, - STATE_PROGRAM_MATRIX_INVTRANS, - - STATE_NUM_SAMPLES, /* An integer, not a float like the other state vars */ - - STATE_DEPTH_RANGE, - - STATE_FRAGMENT_PROGRAM_ENV, - STATE_FRAGMENT_PROGRAM_ENV_ARRAY, - STATE_FRAGMENT_PROGRAM_LOCAL, - STATE_FRAGMENT_PROGRAM_LOCAL_ARRAY, - STATE_VERTEX_PROGRAM_ENV, - STATE_VERTEX_PROGRAM_ENV_ARRAY, - STATE_VERTEX_PROGRAM_LOCAL, - STATE_VERTEX_PROGRAM_LOCAL_ARRAY, - - STATE_NORMAL_SCALE_EYESPACE, - STATE_CURRENT_ATTRIB, /* ctx->Current vertex attrib value */ - STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED, /* ctx->Current vertex attrib value after passthrough vertex processing */ - STATE_NORMAL_SCALE, - STATE_FOG_PARAMS_OPTIMIZED, /* for faster fog calc */ - STATE_POINT_SIZE_CLAMPED, /* includes implementation dependent size clamp */ - STATE_LIGHT_SPOT_DIR_NORMALIZED, /* pre-normalized spot dir */ - STATE_LIGHT_POSITION, /* object vs eye space */ - STATE_LIGHT_POSITION_ARRAY, - STATE_LIGHT_POSITION_NORMALIZED, /* object vs eye space */ - STATE_LIGHT_POSITION_NORMALIZED_ARRAY, - STATE_LIGHT_HALF_VECTOR, /* object vs eye space */ - STATE_PT_SCALE, /**< Pixel transfer RGBA scale */ - STATE_PT_BIAS, /**< Pixel transfer RGBA bias */ - STATE_FB_SIZE, /**< (width-1, height-1, 0, 0) */ - STATE_FB_WPOS_Y_TRANSFORM, /**< (1, 0, -1, height) if a FBO is bound, (-1, height, 1, 0) otherwise */ - STATE_FB_PNTC_Y_TRANSFORM, /**< (1, 0, 0, 0) if point origin is upper left, (-1, 1, 0, 0) otherwise */ - STATE_TCS_PATCH_VERTICES_IN, /**< gl_PatchVerticesIn for TCS (integer) */ - STATE_TES_PATCH_VERTICES_IN, /**< gl_PatchVerticesIn for TES (integer) */ - /** - * A single enum gl_blend_support_qualifier value representing the - * currently active advanced blending equation, or zero if disabled. - */ - STATE_ADVANCED_BLENDING_MODE, - STATE_ALPHA_REF, /* alpha-test reference value */ - STATE_CLIP_INTERNAL, /* similar to STATE_CLIPPLANE, but in clip-space */ - STATE_ATOMIC_COUNTER_OFFSET, /* the byte offset to add to atomic counter bindings */ - - STATE_INTERNAL_DRIVER, /* first available state index for drivers (must be last) */ - - - /** All enums below don't occur in state[0]. **/ - - /* These 8 enums must be in the same order as the gl_light union members, - * which should also match the order of gl_LightSource members. - */ - STATE_AMBIENT, - STATE_DIFFUSE, - STATE_SPECULAR, - STATE_POSITION, /**< xyzw = position */ - STATE_HALF_VECTOR, - STATE_SPOT_DIRECTION, /**< xyz = direction, w = cos(cutoff) */ - STATE_ATTENUATION, /**< xyz = attenuation, w = spot exponent */ - STATE_SPOT_CUTOFF, /**< x = cutoff, yzw = undefined */ - - STATE_EMISSION, - STATE_SHININESS, - - /* These 8 enums must be in the same order as the memory layout of - * gl_fixedfunc_texture_unit::EyePlane/ObjectPlane. - */ - STATE_TEXGEN_EYE_S, - STATE_TEXGEN_EYE_T, - STATE_TEXGEN_EYE_R, - STATE_TEXGEN_EYE_Q, - STATE_TEXGEN_OBJECT_S, - STATE_TEXGEN_OBJECT_T, - STATE_TEXGEN_OBJECT_R, - STATE_TEXGEN_OBJECT_Q, -} gl_state_index; - - -extern void -_mesa_load_state_parameters(struct gl_context *ctx, - struct gl_program_parameter_list *paramList); - -extern void -_mesa_upload_state_parameters(struct gl_context *ctx, - struct gl_program_parameter_list *paramList, - uint32_t *dst); - -extern void -_mesa_optimize_state_parameters(struct gl_constants *consts, - struct gl_program_parameter_list *list); - -extern unsigned -_mesa_program_state_value_size(const gl_state_index16 state[STATE_LENGTH]); - -extern GLbitfield -_mesa_program_state_flags(const gl_state_index16 state[STATE_LENGTH]); - - -extern char * -_mesa_program_state_string(const gl_state_index16 state[STATE_LENGTH]); - - - -#ifdef __cplusplus -} -#endif - -#endif /* PROG_STATEVARS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/program.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/program.h deleted file mode 100644 index 49e888e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/program.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2007 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 program.c - * Vertex and fragment program support functions. - * \author Brian Paul - */ - - -/** - * \mainpage Mesa vertex and fragment program module - * - * This module or directory contains most of the code for vertex and - * fragment programs and shaders, including state management, parsers, - * and (some) software routines for executing programs - */ - -#ifndef PROGRAM_H -#define PROGRAM_H - -#include "prog_parameter.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -extern struct gl_program _mesa_DummyProgram; - - -extern void -_mesa_init_program(struct gl_context *ctx); - -extern void -_mesa_free_program_data(struct gl_context *ctx); - -extern void -_mesa_update_default_objects_program(struct gl_context *ctx); - -extern void -_mesa_set_program_error(struct gl_context *ctx, GLint pos, const char *string); - -extern struct gl_program * -_mesa_init_gl_program(struct gl_program *prog, GLenum target, GLuint id, - bool is_arb_asm); - -extern struct gl_program * -_mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id, - bool is_arb_asm); - -extern void -_mesa_delete_program(struct gl_context *ctx, struct gl_program *prog); - -extern struct gl_program * -_mesa_lookup_program(struct gl_context *ctx, GLuint id); - -extern void -_mesa_reference_program_(struct gl_context *ctx, - struct gl_program **ptr, - struct gl_program *prog); - -static inline void -_mesa_reference_program(struct gl_context *ctx, - struct gl_program **ptr, - struct gl_program *prog) -{ - if (*ptr != prog) - _mesa_reference_program_(ctx, ptr, prog); -} - -extern GLboolean -_mesa_insert_instructions(struct gl_program *prog, GLuint start, GLuint count); - -extern GLboolean -_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count, - void *mem_ctx); - -extern void -_mesa_find_used_registers(const struct gl_program *prog, - gl_register_file file, - GLboolean used[], GLuint usedSize); - -extern GLint -_mesa_find_free_register(const GLboolean used[], - GLuint maxRegs, GLuint firstReg); - -extern GLint -_mesa_get_min_invocations_per_fragment(struct gl_context *ctx, - const struct gl_program *prog); - -static inline GLuint -_mesa_program_enum_to_shader_stage(GLenum v) -{ - switch (v) { - case GL_VERTEX_PROGRAM_ARB: - return MESA_SHADER_VERTEX; - case GL_FRAGMENT_PROGRAM_ARB: - return MESA_SHADER_FRAGMENT; - case GL_FRAGMENT_SHADER_ATI: - return MESA_SHADER_FRAGMENT; - case GL_GEOMETRY_PROGRAM_NV: - return MESA_SHADER_GEOMETRY; - case GL_TESS_CONTROL_PROGRAM_NV: - return MESA_SHADER_TESS_CTRL; - case GL_TESS_EVALUATION_PROGRAM_NV: - return MESA_SHADER_TESS_EVAL; - case GL_COMPUTE_PROGRAM_NV: - return MESA_SHADER_COMPUTE; - default: - assert(0); - return ~0; - } -} - - -static inline GLenum -_mesa_shader_stage_to_program(unsigned stage) -{ - switch (stage) { - case MESA_SHADER_VERTEX: - return GL_VERTEX_PROGRAM_ARB; - case MESA_SHADER_FRAGMENT: - return GL_FRAGMENT_PROGRAM_ARB; - case MESA_SHADER_GEOMETRY: - return GL_GEOMETRY_PROGRAM_NV; - case MESA_SHADER_TESS_CTRL: - return GL_TESS_CONTROL_PROGRAM_NV; - case MESA_SHADER_TESS_EVAL: - return GL_TESS_EVALUATION_PROGRAM_NV; - case MESA_SHADER_COMPUTE: - return GL_COMPUTE_PROGRAM_NV; - } - - assert(!"Unexpected shader stage in _mesa_shader_stage_to_program"); - return GL_VERTEX_PROGRAM_ARB; -} - - -GLbitfield -gl_external_samplers(const struct gl_program *prog); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PROGRAM_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/symbol_table.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/symbol_table.c deleted file mode 100644 index 0e42ba3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/symbol_table.c +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright © 2008 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../main/imports.h" -#include "../main/errors.h" -#include "symbol_table.h" -#include "../../util/hash_table.h" -#include "../../util/u_string.h" - -struct symbol { - /** Symbol name. */ - char *name; - - /** - * Link to the next symbol in the table with the same name - * - * The linked list of symbols with the same name is ordered by scope - * from inner-most to outer-most. - */ - struct symbol *next_with_same_name; - - /** - * Link to the next symbol in the table with the same scope - * - * The linked list of symbols with the same scope is unordered. Symbols - * in this list my have unique names. - */ - struct symbol *next_with_same_scope; - - /** Scope depth where this symbol was defined. */ - unsigned depth; - - /** - * Arbitrary user supplied data. - */ - void *data; -}; - - -/** - * Element of the scope stack. - */ -struct scope_level { - /** Link to next (inner) scope level. */ - struct scope_level *next; - - /** Linked list of symbols with the same scope. */ - struct symbol *symbols; -}; - - -/** - * - */ -struct _mesa_symbol_table { - /** Hash table containing all symbols in the symbol table. */ - struct hash_table *ht; - - /** Top of scope stack. */ - struct scope_level *current_scope; - - /** Current scope depth. */ - unsigned depth; -}; - -void -_mesa_symbol_table_pop_scope(struct _mesa_symbol_table *table) -{ - struct scope_level *const scope = table->current_scope; - struct symbol *sym = scope->symbols; - - table->current_scope = scope->next; - table->depth--; - - free(scope); - - while (sym != NULL) { - struct symbol *const next = sym->next_with_same_scope; - struct hash_entry *hte = _mesa_hash_table_search(table->ht, - sym->name); - if (sym->next_with_same_name) { - /* If there is a symbol with this name in an outer scope update - * the hash table to point to it. - */ - hte->key = sym->next_with_same_name->name; - hte->data = sym->next_with_same_name; - } else { - _mesa_hash_table_remove(table->ht, hte); - free(sym->name); - } - - free(sym); - sym = next; - } -} - - -void -_mesa_symbol_table_push_scope(struct _mesa_symbol_table *table) -{ - struct scope_level *const scope = calloc(1, sizeof(*scope)); - if (scope == NULL) { - _mesa_error_no_memory(__func__); - return; - } - - scope->next = table->current_scope; - table->current_scope = scope; - table->depth++; -} - - -static struct symbol * -find_symbol(struct _mesa_symbol_table *table, const char *name) -{ - struct hash_entry *entry = _mesa_hash_table_search(table->ht, name); - return entry ? (struct symbol *) entry->data : NULL; -} - - -/** - * Determine the scope "distance" of a symbol from the current scope - * - * \return - * A non-negative number for the number of scopes between the current scope - * and the scope where a symbol was defined. A value of zero means the current - * scope. A negative number if the symbol does not exist. - */ -int -_mesa_symbol_table_symbol_scope(struct _mesa_symbol_table *table, - const char *name) -{ - struct symbol *const sym = find_symbol(table, name); - - if (sym) { - assert(sym->depth <= table->depth); - return sym->depth - table->depth; - } - - return -1; -} - - -void * -_mesa_symbol_table_find_symbol(struct _mesa_symbol_table *table, - const char *name) -{ - struct symbol *const sym = find_symbol(table, name); - if (sym) - return sym->data; - - return NULL; -} - - -int -_mesa_symbol_table_add_symbol(struct _mesa_symbol_table *table, - const char *name, void *declaration) -{ - struct symbol *new_sym; - struct symbol *sym = find_symbol(table, name); - - if (sym && sym->depth == table->depth) - return -1; - - new_sym = calloc(1, sizeof(*sym)); - if (new_sym == NULL) { - _mesa_error_no_memory(__func__); - return -1; - } - - if (sym) { - /* Store link to symbol in outer scope with the same name */ - new_sym->next_with_same_name = sym; - new_sym->name = sym->name; - } else { - new_sym->name = strdup(name); - if (new_sym->name == NULL) { - free(new_sym); - _mesa_error_no_memory(__func__); - return -1; - } - } - - new_sym->next_with_same_scope = table->current_scope->symbols; - new_sym->data = declaration; - new_sym->depth = table->depth; - - table->current_scope->symbols = new_sym; - - _mesa_hash_table_insert(table->ht, new_sym->name, new_sym); - - return 0; -} - -int -_mesa_symbol_table_replace_symbol(struct _mesa_symbol_table *table, - const char *name, - void *declaration) -{ - struct symbol *sym = find_symbol(table, name); - - /* If the symbol doesn't exist, it cannot be replaced. */ - if (sym == NULL) - return -1; - - sym->data = declaration; - return 0; -} - -int -_mesa_symbol_table_add_global_symbol(struct _mesa_symbol_table *table, - const char *name, void *declaration) -{ - struct scope_level *top_scope; - struct symbol *inner_sym = NULL; - struct symbol *sym = find_symbol(table, name); - - while (sym) { - if (sym->depth == 0) - return -1; - - inner_sym = sym; - - /* Get symbol from the outer scope with the same name */ - sym = sym->next_with_same_name; - } - - /* Find the top-level scope */ - for (top_scope = table->current_scope; top_scope->next != NULL; - top_scope = top_scope->next) { - /* empty */ - } - - sym = calloc(1, sizeof(*sym)); - if (sym == NULL) { - _mesa_error_no_memory(__func__); - return -1; - } - - if (inner_sym) { - /* In case we add the global out of order store a link to the global - * symbol in global. - */ - inner_sym->next_with_same_name = sym; - - sym->name = inner_sym->name; - } else { - sym->name = strdup(name); - if (sym->name == NULL) { - free(sym); - _mesa_error_no_memory(__func__); - return -1; - } - } - - sym->next_with_same_scope = top_scope->symbols; - sym->data = declaration; - - top_scope->symbols = sym; - - _mesa_hash_table_insert(table->ht, sym->name, sym); - - return 0; -} - - - -struct _mesa_symbol_table * -_mesa_symbol_table_ctor(void) -{ - struct _mesa_symbol_table *table = calloc(1, sizeof(*table)); - - if (table != NULL) { - table->ht = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - - _mesa_symbol_table_push_scope(table); - } - - return table; -} - - -void -_mesa_symbol_table_dtor(struct _mesa_symbol_table *table) -{ - while (table->current_scope != NULL) { - _mesa_symbol_table_pop_scope(table); - } - - _mesa_hash_table_destroy(table->ht, NULL); - free(table); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/symbol_table.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/symbol_table.h deleted file mode 100644 index 6db2164..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/program/symbol_table.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2008 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ -#ifndef MESA_SYMBOL_TABLE_H -#define MESA_SYMBOL_TABLE_H - -#ifdef __cplusplus -extern "C" { -#endif - -struct _mesa_symbol_table; - -extern void _mesa_symbol_table_push_scope(struct _mesa_symbol_table *table); - -extern void _mesa_symbol_table_pop_scope(struct _mesa_symbol_table *table); - -extern int _mesa_symbol_table_add_symbol(struct _mesa_symbol_table *symtab, - const char *name, void *declaration); - -extern int _mesa_symbol_table_replace_symbol(struct _mesa_symbol_table *table, - const char *name, - void *declaration); - -extern int -_mesa_symbol_table_add_global_symbol(struct _mesa_symbol_table *symtab, - const char *name, - void *declaration); - -extern int _mesa_symbol_table_symbol_scope(struct _mesa_symbol_table *table, - const char *name); - -extern void *_mesa_symbol_table_find_symbol(struct _mesa_symbol_table *symtab, - const char *name); - -extern struct _mesa_symbol_table *_mesa_symbol_table_ctor(void); - -extern void _mesa_symbol_table_dtor(struct _mesa_symbol_table *); - -#ifdef __cplusplus -} -#endif - -#endif /* MESA_SYMBOL_TABLE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/vbo/vbo.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/vbo/vbo.h deleted file mode 100644 index d9aaa8a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/vbo/vbo.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * mesa 3-D graphics library - * - * Copyright (C) 1999-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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/** - * \brief Public interface to the VBO module - * \author Keith Whitwell - */ - - -#ifndef _VBO_H -#define _VBO_H - -#include -#include "../../util/glheader.h" -#include "vbo_attrib.h" -#include "../../gallium/include/pipe/p_state.h" -#include "../main/dlist.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct gl_context; -struct pipe_draw_info; -struct pipe_draw_start_count_bias; - -/** - * Max number of primitives (number of glBegin/End pairs) per VBO. - */ -#define VBO_MAX_PRIM 64 - - -/** - * Current vertex processing mode: fixed function vs. shader. - * In reality, fixed function is probably implemented by a shader but that's - * not what we care about here. - */ -typedef enum -{ - VP_MODE_FF, /**< legacy / fixed function */ - VP_MODE_SHADER, /**< ARB vertex program or GLSL vertex shader */ - VP_MODE_MAX /**< for sizing arrays */ -} gl_vertex_processing_mode; - - -struct vbo_exec_eval1_map { - struct gl_1d_map *map; - GLuint sz; -}; - -struct vbo_exec_eval2_map { - struct gl_2d_map *map; - GLuint sz; -}; - -struct vbo_exec_copied_vtx { - fi_type buffer[VBO_ATTRIB_MAX * 4 * VBO_MAX_COPIED_VERTS]; - GLuint nr; -}; - -struct vbo_markers -{ - /** - * If false and the primitive is a line loop, the first vertex is - * the beginning of the line loop and it won't be drawn. - * Instead, it will be moved to the end. - * - * Drivers shouldn't reset the line stipple pattern walker if begin is - * false and mode is a line strip. - */ - bool begin; - - /** - * If true and the primitive is a line loop, it will be closed. - */ - bool end; -}; - - -GLboolean -_mesa_using_noop_vtxfmt(const struct _glapi_table *dispatch); - -GLboolean -_vbo_CreateContext(struct gl_context *ctx); - -void -_vbo_DestroyContext(struct gl_context *ctx); - -void -vbo_init_dispatch_begin_end(struct gl_context *ctx); - -void -vbo_init_dispatch_hw_select_begin_end(struct gl_context *ctx); - -void -vbo_install_exec_vtxfmt_noop(struct gl_context *ctx); - -void -vbo_install_save_vtxfmt_noop(struct gl_context *ctx); - -void -vbo_exec_update_eval_maps(struct gl_context *ctx); - -void -vbo_exec_FlushVertices(struct gl_context *ctx, GLuint flags); - -void -vbo_save_SaveFlushVertices(struct gl_context *ctx); - -void -vbo_save_NotifyBegin(struct gl_context *ctx, GLenum mode, - bool no_current_update); - -void -vbo_save_NewList(struct gl_context *ctx, GLuint list, GLenum mode); - -void -vbo_save_EndList(struct gl_context *ctx); - -void -vbo_delete_minmax_cache(struct gl_buffer_object *bufferObj); - -void -vbo_get_minmax_index_mapped(unsigned count, unsigned index_size, - unsigned restartIndex, bool restart, - const void *indices, - unsigned *min_index, unsigned *max_index); - -void -vbo_get_minmax_index(struct gl_context *ctx, struct gl_buffer_object *obj, - const void *ptr, GLintptr offset, unsigned count, - unsigned index_size, bool primitive_restart, - unsigned restart_index, GLuint *min_index, - GLuint *max_index); - -bool -vbo_get_minmax_indices_gallium(struct gl_context *ctx, - struct pipe_draw_info *info, - const struct pipe_draw_start_count_bias *draws, - unsigned num_draws); - -const struct gl_array_attributes* -_vbo_current_attrib(const struct gl_context *ctx, gl_vert_attrib attr); - -void GLAPIENTRY -_es_Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a); - -void GLAPIENTRY -_es_Normal3f(GLfloat x, GLfloat y, GLfloat z); - -void GLAPIENTRY -_es_MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); - -void GLAPIENTRY -_es_Materialfv(GLenum face, GLenum pname, const GLfloat *params); - -void GLAPIENTRY -_es_Materialf(GLenum face, GLenum pname, GLfloat param); - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/vbo/vbo_attrib.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/vbo/vbo_attrib.h deleted file mode 100644 index e6b50e1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/mesa/vbo/vbo_attrib.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - Copyright (C) Intel Corp. 2006. All Rights Reserved. - Intel funded Tungsten Graphics to - develop this 3D driver. - - 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 (including the - next paragraph) 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 THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS 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. - - **********************************************************************/ -/* - * Authors: - * Keith Whitwell - */ - -#ifndef VBO_ATTRIB_H -#define VBO_ATTRIB_H - -/* - * Note: The first 32 attributes match the VERT_ATTRIB_* definitions. - * However, we have extra attributes for storing per-vertex glMaterial - * values. The material attributes get shifted into the generic positions - * at draw time. - * - * One reason we can't alias materials and generics here is display lists. - * A display list might contain both generic attributes and material - * attributes which are selected at draw time depending on whether we're - * using fixed function or a shader. - */ -enum vbo_attrib { - VBO_ATTRIB_POS, - VBO_ATTRIB_NORMAL, - VBO_ATTRIB_COLOR0, - VBO_ATTRIB_COLOR1, - VBO_ATTRIB_FOG, - VBO_ATTRIB_COLOR_INDEX, - VBO_ATTRIB_TEX0, - VBO_ATTRIB_TEX1, - VBO_ATTRIB_TEX2, - VBO_ATTRIB_TEX3, - VBO_ATTRIB_TEX4, - VBO_ATTRIB_TEX5, - VBO_ATTRIB_TEX6, - VBO_ATTRIB_TEX7, - VBO_ATTRIB_POINT_SIZE, - - VBO_ATTRIB_GENERIC0, /* Not used? */ - VBO_ATTRIB_GENERIC1, - VBO_ATTRIB_GENERIC2, - VBO_ATTRIB_GENERIC3, - VBO_ATTRIB_GENERIC4, - VBO_ATTRIB_GENERIC5, - VBO_ATTRIB_GENERIC6, - VBO_ATTRIB_GENERIC7, - VBO_ATTRIB_GENERIC8, - VBO_ATTRIB_GENERIC9, - VBO_ATTRIB_GENERIC10, - VBO_ATTRIB_GENERIC11, - VBO_ATTRIB_GENERIC12, - VBO_ATTRIB_GENERIC13, - VBO_ATTRIB_GENERIC14, - VBO_ATTRIB_GENERIC15, - VBO_ATTRIB_EDGEFLAG, - - /* XXX: in the vertex program inputs_read flag, we alias - * materials and generics and use knowledge about the program - * (whether it is a fixed-function emulation) to - * differentiate. Here we must keep them apart instead. - */ - VBO_ATTRIB_MAT_FRONT_AMBIENT, - VBO_ATTRIB_MAT_BACK_AMBIENT, - VBO_ATTRIB_MAT_FRONT_DIFFUSE, - VBO_ATTRIB_MAT_BACK_DIFFUSE, - VBO_ATTRIB_MAT_FRONT_SPECULAR, - VBO_ATTRIB_MAT_BACK_SPECULAR, - VBO_ATTRIB_MAT_FRONT_EMISSION, - VBO_ATTRIB_MAT_BACK_EMISSION, - VBO_ATTRIB_MAT_FRONT_SHININESS, - VBO_ATTRIB_MAT_BACK_SHININESS, - VBO_ATTRIB_MAT_FRONT_INDEXES, - VBO_ATTRIB_MAT_BACK_INDEXES, - - /* Offset into HW GL_SELECT result buffer. */ - VBO_ATTRIB_SELECT_RESULT_OFFSET, - - VBO_ATTRIB_MAX -}; - -#define VBO_ATTRIB_FIRST_MATERIAL VBO_ATTRIB_MAT_FRONT_AMBIENT -#define VBO_ATTRIB_LAST_MATERIAL VBO_ATTRIB_MAT_BACK_INDEXES - - -/** VBO_ATTRIB_POS .. VBO_ATTRIB_POINT_SIZE */ -#define VBO_ATTRIBS_LEGACY (BITFIELD64_MASK(VBO_ATTRIB_GENERIC0) | \ - BITFIELD64_BIT(VBO_ATTRIB_EDGEFLAG)) - -/** VBO_ATTRIB_MAT_FRONT_AMBIENT .. VBO_ATTRIB_MAT_BACK_INDEXES */ -#define VBO_ATTRIBS_MATERIALS BITFIELD64_RANGE(VBO_ATTRIB_MAT_FRONT_AMBIENT, \ - VBO_ATTRIB_LAST_MATERIAL - VBO_ATTRIB_FIRST_MATERIAL + 1) - -/** - * Move material attribs to the last generic attribs, moving LAST_MATERIAL - * to GENERIC15, etc. - */ -#define VBO_MATERIAL_SHIFT (VBO_ATTRIB_LAST_MATERIAL - VBO_ATTRIB_GENERIC15) - - - -#define VBO_MAX_COPIED_VERTS 31 - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/00-mesa-defaults.conf b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/00-mesa-defaults.conf deleted file mode 100644 index 2b45eda..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/00-mesa-defaults.conf +++ /dev/null @@ -1,1158 +0,0 @@ - - - - - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/00-radv-defaults.conf b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/00-radv-defaults.conf deleted file mode 100644 index f127955..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/00-radv-defaults.conf +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/anon_file.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/anon_file.c deleted file mode 100644 index ecac799..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/anon_file.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright © 2012 Collabora, Ltd. - * - * 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 (including the - * next paragraph) 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 THE AUTHORS OR COPYRIGHT HOLDERS - * 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. - */ - -/* - * Based on weston shared/os-compatibility.c - */ - -#include "anon_file.h" - -#ifndef _WIN32 - -#include -#include -#include -#include - -#if defined(HAVE_MEMFD_CREATE) || defined(__FreeBSD__) || defined(__OpenBSD__) -#include -#elif defined(ANDROID) -#include -#include -#else -#include -#endif - -#if !(defined(__FreeBSD__) || defined(HAVE_MEMFD_CREATE) || defined(HAVE_MKOSTEMP) || defined(ANDROID)) -static int -set_cloexec_or_close(int fd) -{ - long flags; - - if (fd == -1) - return -1; - - flags = fcntl(fd, F_GETFD); - if (flags == -1) - goto err; - - if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) - goto err; - - return fd; - -err: - close(fd); - return -1; -} -#endif - -#if !(defined(__FreeBSD__) || defined(HAVE_MEMFD_CREATE) || defined(ANDROID)) -static int -create_tmpfile_cloexec(char *tmpname) -{ - int fd; - -#ifdef HAVE_MKOSTEMP - fd = mkostemp(tmpname, O_CLOEXEC); -#else - fd = mkstemp(tmpname); -#endif - - if (fd < 0) { - return fd; - } - -#ifndef HAVE_MKOSTEMP - fd = set_cloexec_or_close(fd); -#endif - - unlink(tmpname); - return fd; -} -#endif - -/* - * Create a new, unique, anonymous file of the given size, and - * return the file descriptor for it. The file descriptor is set - * CLOEXEC. The file is immediately suitable for mmap()'ing - * the given size at offset zero. - * - * An optional name for debugging can be provided as the second argument. - * - * The file should not have a permanent backing store like a disk, - * but may have if XDG_RUNTIME_DIR is not properly implemented in OS. - * - * If memfd or SHM_ANON is supported, the filesystem is not touched at all. - * Otherwise, the file name is deleted from the file system. - * - * The file is suitable for buffer sharing between processes by - * transmitting the file descriptor over Unix sockets using the - * SCM_RIGHTS methods. - */ -int -os_create_anonymous_file(int64_t size, const char *debug_name) -{ - int fd, ret; -#if defined(HAVE_MEMFD_CREATE) - if (!debug_name) - debug_name = "mesa-shared"; - fd = memfd_create(debug_name, MFD_CLOEXEC | MFD_ALLOW_SEALING); -#elif defined(ANDROID) - if (!debug_name) - debug_name = "mesa-shared"; - fd = syscall(SYS_memfd_create, debug_name, MFD_CLOEXEC | MFD_ALLOW_SEALING); -#elif defined(__FreeBSD__) - fd = shm_open(SHM_ANON, O_CREAT | O_RDWR | O_CLOEXEC, 0600); -#elif defined(__OpenBSD__) - char template[] = "/tmp/mesa-XXXXXXXXXX"; - fd = shm_mkstemp(template); - if (fd != -1) - shm_unlink(template); -#else - const char *path; - char *name; - - path = getenv("XDG_RUNTIME_DIR"); - if (!path) { - errno = ENOENT; - return -1; - } - - if (debug_name) - asprintf(&name, "%s/mesa-shared-%s-XXXXXX", path, debug_name); - else - asprintf(&name, "%s/mesa-shared-XXXXXX", path); - if (!name) - return -1; - - fd = create_tmpfile_cloexec(name); - - free(name); -#endif - - if (fd < 0) - return -1; - - ret = ftruncate(fd, (off_t)size); - if (ret < 0) { - close(fd); - return -1; - } - - return fd; -} -#else - -#include -#include - -int -os_create_anonymous_file(int64_t size, const char *debug_name) -{ - (void)debug_name; - HANDLE h = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, - PAGE_READWRITE, (size >> 32), size & 0xFFFFFFFF, NULL); - return _open_osfhandle((intptr_t)h, 0); -} -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/anon_file.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/anon_file.h deleted file mode 100644 index bdd7420..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/anon_file.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2012 Collabora, Ltd. - * - * 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 (including the - * next paragraph) 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 THE AUTHORS OR COPYRIGHT HOLDERS - * 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. - */ - -#ifndef _ANON_FILE_H_ -#define _ANON_FILE_H_ - -#include - -/* On win32, off_t is only 32 bit, so always using 64 bit size */ -int os_create_anonymous_file(int64_t size, const char *debug_name); - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bigmath.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bigmath.h deleted file mode 100644 index 7eb30d1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bigmath.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef UTIL_BIGMATH_H -#define UTIL_BIGMATH_H - -#include "macros.h" - -#include -#include -#include - -static inline bool -_ubm_add_u32arr(uint32_t *dst, unsigned dst_len, - uint32_t *a, unsigned a_len, - uint32_t *b, unsigned b_len) -{ - uint32_t carry = 0; - for (unsigned i = 0; i < dst_len; i++) { - uint64_t sum = carry; - if (i < a_len) - sum += a[i]; - if (i < b_len) - sum += b[i]; - dst[i] = sum; - carry = sum >> 32; - } - - /* Now compute overflow */ - - for (unsigned i = dst_len; i < a_len; i++) { - if (a[i]) - return true; - } - - for (unsigned i = dst_len; i < b_len; i++) { - if (b[i]) - return true; - } - - return carry; -} -#define ubm_add_u32arr(dst, a, b) \ - _ubm_add_u32arr(dst, ARRAY_SIZE(dst), a, ARRAY_SIZE(a), b, ARRAY_SIZE(b)) - -static inline bool -_ubm_mul_u32arr(uint32_t *dst, unsigned dst_len, - uint32_t *a, unsigned a_len, - uint32_t *b, unsigned b_len) -{ - memset(dst, 0, dst_len * sizeof(*dst)); - - bool overflow = false; - - for (unsigned i = 0; i < a_len; i++) { - uint32_t carry = 0; - for (unsigned j = 0; j < b_len; j++) { - /* The maximum values of a[i] and b[i] are UINT32_MAX so the maximum - * value of tmp is UINT32_MAX * UINT32_MAX. The maximum value that - * will fit in tmp is - * - * UINT64_MAX = UINT32_MAX << 32 + UINT32_MAX - * = UINT32_MAX * (UINT32_MAX + 1) + UINT32_MAX - * = UINT32_MAX * UINT32_MAX + 2 * UINT32_MAX - * - * so we're guaranteed that we can add in two more 32-bit values - * without overflowing tmp. - */ - uint64_t tmp = (uint64_t)a[i] * (uint64_t)b[j]; - tmp += carry; - if (i + j < dst_len) { - tmp += dst[i + j]; - dst[i + j] = tmp; - carry = tmp >> 32; - } else { - /* We're trying to write a value that doesn't fit */ - overflow = overflow || tmp > 0; - break; - } - } - if (i + b_len < dst_len) - dst[i + b_len] = carry; - else - overflow = overflow || carry > 0; - } - - return overflow; -} -#define ubm_mul_u32arr(dst, a, b) \ - _ubm_mul_u32arr(dst, ARRAY_SIZE(dst), a, ARRAY_SIZE(a), b, ARRAY_SIZE(b)) - -#endif /* UTIL_BIGMATH_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitpack_helpers.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitpack_helpers.h deleted file mode 100644 index 5713772..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitpack_helpers.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Copyright (C) 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef UTIL_BITPACK_HELPERS_H -#define UTIL_BITPACK_HELPERS_H - -#include -#include - -#include "macros.h" -#include "u_math.h" - -#ifdef HAVE_VALGRIND -#include -#include -#ifndef NDEBUG -#define util_bitpack_validate_value(x) \ - VALGRIND_CHECK_MEM_IS_DEFINED(&(x), sizeof(x)) -#endif -#endif - -#ifndef util_bitpack_validate_value -#define util_bitpack_validate_value(x) -#endif - -ALWAYS_INLINE static uint64_t -util_bitpack_ones(uint32_t start, uint32_t end) -{ - return (~0ull >> (64 - (end - start + 1))) << start; -} - -ALWAYS_INLINE static uint64_t -util_bitpack_uint(uint64_t v, uint32_t start, UNUSED uint32_t end) -{ - util_bitpack_validate_value(v); - -#ifndef NDEBUG - const int bits = end - start + 1; - if (bits < 64) { - const uint64_t max = u_uintN_max(bits); - assert(v <= max); - } -#endif - - return v << start; -} - -ALWAYS_INLINE static uint64_t -util_bitpack_uint_nonzero(uint64_t v, uint32_t start, uint32_t end) -{ - assert(v != 0ull); - return util_bitpack_uint(v, start, end); -} - -ALWAYS_INLINE static uint64_t -util_bitpack_sint(int64_t v, uint32_t start, uint32_t end) -{ - const int bits = end - start + 1; - - util_bitpack_validate_value(v); - -#ifndef NDEBUG - if (bits < 64) { - const int64_t min = u_intN_min(bits); - const int64_t max = u_intN_max(bits); - assert(min <= v && v <= max); - } -#endif - - const uint64_t mask = BITFIELD64_MASK(bits); - - return (v & mask) << start; -} - -ALWAYS_INLINE static uint64_t -util_bitpack_sint_nonzero(int64_t v, uint32_t start, uint32_t end) -{ - assert(v != 0ll); - return util_bitpack_sint(v, start, end); -} - -ALWAYS_INLINE static uint32_t -util_bitpack_float(float v) -{ - util_bitpack_validate_value(v); - union { float f; uint32_t dw; } x; - x.f = v; - return x.dw; -} - -ALWAYS_INLINE static uint32_t -util_bitpack_float_nonzero(float v) -{ - assert(v != 0.0f); - return util_bitpack_float(v); -} - -ALWAYS_INLINE static uint64_t -util_bitpack_sfixed(float v, uint32_t start, uint32_t end, - uint32_t fract_bits) -{ - util_bitpack_validate_value(v); - - const float factor = (1 << fract_bits); - -#ifndef NDEBUG - const int total_bits = end - start + 1; - const float min = u_intN_min(total_bits) / factor; - const float max = u_intN_max(total_bits) / factor; - assert(min <= v && v <= max); -#endif - - const int64_t int_val = llroundf(v * factor); - const uint64_t mask = ~0ull >> (64 - (end - start + 1)); - - return (int_val & mask) << start; -} - -ALWAYS_INLINE static uint64_t -util_bitpack_sfixed_clamp(float v, uint32_t start, uint32_t end, - uint32_t fract_bits) -{ - util_bitpack_validate_value(v); - - const float factor = (1 << fract_bits); - - const int total_bits = end - start + 1; - const float min = u_intN_min(total_bits) / factor; - const float max = u_intN_max(total_bits) / factor; - - const int64_t int_val = llroundf(CLAMP(v, min, max) * factor); - const uint64_t mask = ~0ull >> (64 - (end - start + 1)); - - return (int_val & mask) << start; -} - -ALWAYS_INLINE static uint64_t -util_bitpack_sfixed_nonzero(float v, uint32_t start, uint32_t end, - uint32_t fract_bits) -{ - assert(v != 0.0f); - return util_bitpack_sfixed(v, start, end, fract_bits); -} - -ALWAYS_INLINE static uint64_t -util_bitpack_ufixed(float v, uint32_t start, ASSERTED uint32_t end, - uint32_t fract_bits) -{ - util_bitpack_validate_value(v); - - const float factor = (1 << fract_bits); - -#ifndef NDEBUG - const int total_bits = end - start + 1; - const float min = 0.0f; - const float max = u_uintN_max(total_bits) / factor; - assert(min <= v && v <= max); -#endif - - const uint64_t uint_val = llroundf(v * factor); - - return uint_val << start; -} - -ALWAYS_INLINE static uint64_t -util_bitpack_ufixed_clamp(float v, uint32_t start, ASSERTED uint32_t end, - uint32_t fract_bits) -{ - util_bitpack_validate_value(v); - - const float factor = (1 << fract_bits); - - const int total_bits = end - start + 1; - const float min = 0.0f; - const float max = u_uintN_max(total_bits) / factor; - - const uint64_t uint_val = llroundf(CLAMP(v, min, max) * factor); - - return uint_val << start; -} - -ALWAYS_INLINE static uint64_t -util_bitpack_ufixed_nonzero(float v, uint32_t start, uint32_t end, - uint32_t fract_bits) -{ - assert(v != 0.0f); - return util_bitpack_ufixed(v, start, end, fract_bits); -} - -#endif /* UTIL_BITPACK_HELPERS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitscan.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitscan.c deleted file mode 100644 index 88d7f94..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitscan.c +++ /dev/null @@ -1,80 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -#include "bitscan.h" - -#ifdef HAVE___BUILTIN_FFS -#elif defined(_MSC_VER) && (_M_IX86 || _M_ARM || _M_AMD64 || _M_IA64) -#else -int -ffs(int i) -{ - int bit = 0; - if (!i) - return bit; - if (!(i & 0xffff)) { - bit += 16; - i >>= 16; - } - if (!(i & 0xff)) { - bit += 8; - i >>= 8; - } - if (!(i & 0xf)) { - bit += 4; - i >>= 4; - } - if (!(i & 0x3)) { - bit += 2; - i >>= 2; - } - if (!(i & 0x1)) - bit += 1; - return bit + 1; -} -#endif - -#ifdef HAVE___BUILTIN_FFSLL -#elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM64 || _M_IA64) -#else -int -ffsll(long long int val) -{ - int bit; - - bit = ffs((unsigned) (val & 0xffffffff)); - if (bit != 0) - return bit; - - bit = ffs((unsigned) (val >> 32)); - if (bit != 0) - return 32 + bit; - - return 0; -} -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitscan.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitscan.h deleted file mode 100644 index 53cbb91..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitscan.h +++ /dev/null @@ -1,395 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -#ifndef BITSCAN_H -#define BITSCAN_H - -#include -#include -#include -#include - -#if defined(_MSC_VER) -#include -#endif - -#if defined(__POPCNT__) -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * Find first bit set in word. Least significant bit is 1. - * Return 0 if no bits set. - */ -#ifdef HAVE___BUILTIN_FFS -#define ffs __builtin_ffs -#elif defined(_MSC_VER) && (_M_IX86 || _M_ARM || _M_AMD64 || _M_IA64) -static inline -int ffs(int i) -{ - unsigned long index; - if (_BitScanForward(&index, i)) - return index + 1; - else - return 0; -} -#else -extern -int ffs(int i); -#endif - -#ifdef HAVE___BUILTIN_FFSLL -#define ffsll __builtin_ffsll -#elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM64 || _M_IA64) -static inline int -ffsll(long long int i) -{ - unsigned long index; - if (_BitScanForward64(&index, i)) - return index + 1; - else - return 0; -} -#else -extern int -ffsll(long long int val); -#endif - - -/* Destructively loop over all of the bits in a mask as in: - * - * while (mymask) { - * int i = u_bit_scan(&mymask); - * ... process element i - * } - * - */ -static inline int -u_bit_scan(unsigned *mask) -{ - const int i = ffs(*mask) - 1; - *mask ^= (1u << i); - return i; -} - -#define u_foreach_bit(b, dword) \ - for (uint32_t __dword = (dword), b; \ - ((b) = ffs(__dword) - 1, __dword); \ - __dword &= ~(1 << (b))) - -static inline int -u_bit_scan64(uint64_t *mask) -{ - const int i = ffsll(*mask) - 1; - *mask ^= (((uint64_t)1) << i); - return i; -} - -#define u_foreach_bit64(b, dword) \ - for (uint64_t __dword = (dword), b; \ - ((b) = ffsll(__dword) - 1, __dword); \ - __dword &= ~(1ull << (b))) - -/* Determine if an unsigned value is a power of two. - * - * \note - * Zero is treated as a power of two. - */ -static inline bool -util_is_power_of_two_or_zero(unsigned v) -{ - return (v & (v - 1)) == 0; -} - -/* Determine if an uint64_t value is a power of two. - * - * \note - * Zero is treated as a power of two. - */ -static inline bool -util_is_power_of_two_or_zero64(uint64_t v) -{ - return (v & (v - 1)) == 0; -} - -/* Determine if an unsigned value is a power of two. - * - * \note - * Zero is \b not treated as a power of two. - */ -static inline bool -util_is_power_of_two_nonzero(unsigned v) -{ - /* __POPCNT__ is different from HAVE___BUILTIN_POPCOUNT. The latter - * indicates the existence of the __builtin_popcount function. The former - * indicates that _mm_popcnt_u32 exists and is a native instruction. - * - * The other alternative is to use SSE 4.2 compile-time flags. This has - * two drawbacks. First, there is currently no build infrastructure for - * SSE 4.2 (only 4.1), so that would have to be added. Second, some AMD - * CPUs support POPCNT but not SSE 4.2 (e.g., Barcelona). - */ -#ifdef __POPCNT__ - return _mm_popcnt_u32(v) == 1; -#else - return v != 0 && (v & (v - 1)) == 0; -#endif -} - -/* For looping over a bitmask when you want to loop over consecutive bits - * manually, for example: - * - * while (mask) { - * int start, count, i; - * - * u_bit_scan_consecutive_range(&mask, &start, &count); - * - * for (i = 0; i < count; i++) - * ... process element (start+i) - * } - */ -static inline void -u_bit_scan_consecutive_range(unsigned *mask, int *start, int *count) -{ - if (*mask == 0xffffffff) { - *start = 0; - *count = 32; - *mask = 0; - return; - } - *start = ffs(*mask) - 1; - *count = ffs(~(*mask >> *start)) - 1; - *mask &= ~(((1u << *count) - 1) << *start); -} - -static inline void -u_bit_scan_consecutive_range64(uint64_t *mask, int *start, int *count) -{ - if (*mask == ~0ull) { - *start = 0; - *count = 64; - *mask = 0; - return; - } - *start = ffsll(*mask) - 1; - *count = ffsll(~(*mask >> *start)) - 1; - *mask &= ~(((((uint64_t)1) << *count) - 1) << *start); -} - - -/** - * Find last bit set in a word. The least significant bit is 1. - * Return 0 if no bits are set. - * Essentially ffs() in the reverse direction. - */ -static inline unsigned -util_last_bit(unsigned u) -{ -#if defined(HAVE___BUILTIN_CLZ) - return u == 0 ? 0 : 32 - __builtin_clz(u); -#elif defined(_MSC_VER) && (_M_IX86 || _M_ARM || _M_AMD64 || _M_IA64) - unsigned long index; - if (_BitScanReverse(&index, u)) - return index + 1; - else - return 0; -#else - unsigned r = 0; - while (u) { - r++; - u >>= 1; - } - return r; -#endif -} - -/** - * Find last bit set in a word. The least significant bit is 1. - * Return 0 if no bits are set. - * Essentially ffsll() in the reverse direction. - */ -static inline unsigned -util_last_bit64(uint64_t u) -{ -#if defined(HAVE___BUILTIN_CLZLL) - return u == 0 ? 0 : 64 - __builtin_clzll(u); -#elif defined(_MSC_VER) && (_M_AMD64 || _M_ARM64 || _M_IA64) - unsigned long index; - if (_BitScanReverse64(&index, u)) - return index + 1; - else - return 0; -#else - unsigned r = 0; - while (u) { - r++; - u >>= 1; - } - return r; -#endif -} - -/** - * Find last bit in a word that does not match the sign bit. The least - * significant bit is 1. - * Return 0 if no bits are set. - */ -static inline unsigned -util_last_bit_signed(int i) -{ - if (i >= 0) - return util_last_bit(i); - else - return util_last_bit(~(unsigned)i); -} - -/* Returns a bitfield in which the first count bits starting at start are - * set. - */ -static inline unsigned -u_bit_consecutive(unsigned start, unsigned count) -{ - assert(start + count <= 32); - if (count == 32) - return ~0; - return ((1u << count) - 1) << start; -} - -static inline uint64_t -u_bit_consecutive64(unsigned start, unsigned count) -{ - assert(start + count <= 64); - if (count == 64) - return ~(uint64_t)0; - return (((uint64_t)1 << count) - 1) << start; -} - -/** - * Return number of bits set in n. - */ -static inline unsigned -util_bitcount(unsigned n) -{ -#if defined(HAVE___BUILTIN_POPCOUNT) - return __builtin_popcount(n); -#else - /* K&R classic bitcount. - * - * For each iteration, clear the LSB from the bitfield. - * Requires only one iteration per set bit, instead of - * one iteration per bit less than highest set bit. - */ - unsigned bits; - for (bits = 0; n; bits++) { - n &= n - 1; - } - return bits; -#endif -} - -/** - * Return the number of bits set in n using the native popcnt instruction. - * The caller is responsible for ensuring that popcnt is supported by the CPU. - * - * gcc doesn't use it if -mpopcnt or -march= that has popcnt is missing. - * - */ -static inline unsigned -util_popcnt_inline_asm(unsigned n) -{ -#if defined(USE_X86_64_ASM) || defined(USE_X86_ASM) - uint32_t out; - __asm volatile("popcnt %1, %0" : "=r"(out) : "r"(n)); - return out; -#else - /* We should never get here by accident, but I'm sure it'll happen. */ - return util_bitcount(n); -#endif -} - -static inline unsigned -util_bitcount64(uint64_t n) -{ -#ifdef HAVE___BUILTIN_POPCOUNTLL - return __builtin_popcountll(n); -#else - return util_bitcount(n) + util_bitcount(n >> 32); -#endif -} - -/** - * Widens the given bit mask by a multiplier, meaning that it will - * replicate each bit by that amount. - * - * For example: - * 0b101 widened by 2 will become: 0b110011 - * - * This is typically used in shader I/O to transform a 64-bit - * writemask to a 32-bit writemask. - */ -static inline uint32_t -util_widen_mask(uint32_t mask, unsigned multiplier) -{ - uint32_t new_mask = 0; - u_foreach_bit(i, mask) - new_mask |= ((1u << multiplier) - 1u) << (i * multiplier); - return new_mask; -} - -#ifdef __cplusplus -} - -/* util_bitcount has large measurable overhead (~2%), so it's recommended to - * use the POPCNT instruction via inline assembly if the CPU supports it. - */ -enum util_popcnt { - POPCNT_NO, - POPCNT_YES, -}; - -/* Convenient function to select popcnt through a C++ template argument. - * This should be used as part of larger functions that are optimized - * as a whole. - */ -template inline unsigned -util_bitcount_fast(unsigned n) -{ - if (POPCNT == POPCNT_YES) - return util_popcnt_inline_asm(n); - else - return util_bitcount(n); -} - -#endif /* __cplusplus */ - -#endif /* BITSCAN_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitset.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitset.h deleted file mode 100644 index a44f2dd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/bitset.h +++ /dev/null @@ -1,556 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 bitset.h - * \brief Bitset of arbitrary size definitions. - * \author Michal Krol - */ - -#ifndef BITSET_H -#define BITSET_H - -#include "bitscan.h" -#include "macros.h" - -/**************************************************************************** - * generic bitset implementation - */ - -#define BITSET_WORD unsigned int -#define BITSET_WORDBITS (sizeof (BITSET_WORD) * 8) - -/* bitset declarations - */ -#define BITSET_WORDS(bits) (((bits) + BITSET_WORDBITS - 1) / BITSET_WORDBITS) -#define BITSET_DECLARE(name, bits) BITSET_WORD name[BITSET_WORDS(bits)] - -/* bitset operations - */ -#define BITSET_COPY(x, y) memcpy( (x), (y), sizeof (x) ) -#define BITSET_EQUAL(x, y) (memcmp( (x), (y), sizeof (x) ) == 0) -#define BITSET_ZERO(x) memset( (x), 0, sizeof (x) ) -#define BITSET_ONES(x) memset( (x), 0xff, sizeof (x) ) -#define BITSET_SIZE(x) (8 * sizeof(x)) // bitset size in bits - -#define BITSET_BITWORD(b) ((b) / BITSET_WORDBITS) -#define BITSET_BIT(b) (1u << ((b) % BITSET_WORDBITS)) - -/* single bit operations - */ -#define BITSET_TEST(x, b) (((x)[BITSET_BITWORD(b)] & BITSET_BIT(b)) != 0) -#define BITSET_SET(x, b) ((x)[BITSET_BITWORD(b)] |= BITSET_BIT(b)) -#define BITSET_CLEAR(x, b) ((x)[BITSET_BITWORD(b)] &= ~BITSET_BIT(b)) - -#define BITSET_MASK(b) (((b) % BITSET_WORDBITS == 0) ? ~0 : BITSET_BIT(b) - 1) -#define BITSET_RANGE(b, e) ((BITSET_MASK((e) + 1)) & ~(BITSET_BIT(b) - 1)) - -/* logic bit operations - */ -static inline void -__bitset_and(BITSET_WORD *r, const BITSET_WORD *x, const BITSET_WORD *y, unsigned n) -{ - for (unsigned i = 0; i < n; i++) - r[i] = x[i] & y[i]; -} - -static inline void -__bitset_or(BITSET_WORD *r, const BITSET_WORD *x, const BITSET_WORD *y, unsigned n) -{ - for (unsigned i = 0; i < n; i++) - r[i] = x[i] | y[i]; -} - -static inline void -__bitset_not(BITSET_WORD *x, unsigned n) -{ - for (unsigned i = 0; i < n; i++) - x[i] = ~x[i]; -} - -#define BITSET_AND(r, x, y) \ - do { \ - assert(ARRAY_SIZE(r) == ARRAY_SIZE(x)); \ - assert(ARRAY_SIZE(r) == ARRAY_SIZE(y)); \ - __bitset_and(r, x, y, ARRAY_SIZE(r)); \ - } while (0) - -#define BITSET_OR(r, x, y) \ - do { \ - assert(ARRAY_SIZE(r) == ARRAY_SIZE(x)); \ - assert(ARRAY_SIZE(r) == ARRAY_SIZE(y)); \ - __bitset_or(r, x, y, ARRAY_SIZE(r)); \ - } while (0) - -#define BITSET_NOT(x) \ - __bitset_not(x, ARRAY_SIZE(x)) - -static inline void -__bitset_rotate_right(BITSET_WORD *x, unsigned amount, unsigned n) -{ - assert(amount < BITSET_WORDBITS); - - if (amount == 0) - return; - - for (unsigned i = 0; i < n - 1; i++) { - x[i] = (x[i] >> amount) | (x[i + 1] << (BITSET_WORDBITS - amount)); - } - - x[n - 1] = x[n - 1] >> amount; -} - -static inline void -__bitset_rotate_left(BITSET_WORD *x, unsigned amount, unsigned n) -{ - assert(amount < BITSET_WORDBITS); - - if (amount == 0) - return; - - for (int i = n - 1; i > 0; i--) { - x[i] = (x[i] << amount) | (x[i - 1] >> (BITSET_WORDBITS - amount)); - } - - x[0] = x[0] << amount; -} - -static inline void -__bitset_shr(BITSET_WORD *x, unsigned amount, unsigned n) -{ - const unsigned int words = amount / BITSET_WORDBITS; - - if (amount == 0) - return; - - if (words) { - unsigned i; - - for (i = 0; i < n - words; i++) - x[i] = x[i + words]; - - while (i < n) - x[i++] = 0; - - amount %= BITSET_WORDBITS; - } - - __bitset_rotate_right(x, amount, n); -} - - -static inline void -__bitset_shl(BITSET_WORD *x, unsigned amount, unsigned n) -{ - const int words = amount / BITSET_WORDBITS; - - if (amount == 0) - return; - - if (words) { - int i; - - for (i = n - 1; i >= words; i--) { - x[i] = x[i - words]; - } - - while (i >= 0) { - x[i--] = 0; - } - - amount %= BITSET_WORDBITS; - } - - __bitset_rotate_left(x, amount, n); -} - -#define BITSET_SHR(x, n) \ - __bitset_shr(x, n, ARRAY_SIZE(x)); - -#define BITSET_SHL(x, n) \ - __bitset_shl(x, n, ARRAY_SIZE(x)); - -/* bit range operations - */ -#define BITSET_TEST_RANGE_INSIDE_WORD(x, b, e) \ - (BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \ - (((x)[BITSET_BITWORD(b)] & BITSET_RANGE(b, e)) != 0) : \ - (assert (!"BITSET_TEST_RANGE: bit range crosses word boundary"), 0)) -#define BITSET_SET_RANGE_INSIDE_WORD(x, b, e) \ - (BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \ - ((x)[BITSET_BITWORD(b)] |= BITSET_RANGE(b, e)) : \ - (assert (!"BITSET_SET_RANGE_INSIDE_WORD: bit range crosses word boundary"), 0)) -#define BITSET_CLEAR_RANGE_INSIDE_WORD(x, b, e) \ - (BITSET_BITWORD(b) == BITSET_BITWORD(e) ? \ - ((x)[BITSET_BITWORD(b)] &= ~BITSET_RANGE(b, e)) : \ - (assert (!"BITSET_CLEAR_RANGE: bit range crosses word boundary"), 0)) - -static inline bool -__bitset_test_range(const BITSET_WORD *r, unsigned start, unsigned end) -{ - const unsigned size = end - start + 1; - const unsigned start_mod = start % BITSET_WORDBITS; - - if (start_mod + size <= BITSET_WORDBITS) { - return BITSET_TEST_RANGE_INSIDE_WORD(r, start, end); - } else { - const unsigned first_size = BITSET_WORDBITS - start_mod; - - return __bitset_test_range(r, start, start + first_size - 1) || - __bitset_test_range(r, start + first_size, end); - } -} - -#define BITSET_TEST_RANGE(x, b, e) \ - __bitset_test_range(x, b, e) - -static inline void -__bitset_set_range(BITSET_WORD *r, unsigned start, unsigned end) -{ - const unsigned size = end - start + 1; - const unsigned start_mod = start % BITSET_WORDBITS; - - if (start_mod + size <= BITSET_WORDBITS) { - BITSET_SET_RANGE_INSIDE_WORD(r, start, end); - } else { - const unsigned first_size = BITSET_WORDBITS - start_mod; - - __bitset_set_range(r, start, start + first_size - 1); - __bitset_set_range(r, start + first_size, end); - } -} - -#define BITSET_SET_RANGE(x, b, e) \ - __bitset_set_range(x, b, e) - -static inline void -__bitclear_clear_range(BITSET_WORD *r, unsigned start, unsigned end) -{ - const unsigned size = end - start + 1; - const unsigned start_mod = start % BITSET_WORDBITS; - - if (start_mod + size <= BITSET_WORDBITS) { - BITSET_CLEAR_RANGE_INSIDE_WORD(r, start, end); - } else { - const unsigned first_size = BITSET_WORDBITS - start_mod; - - __bitclear_clear_range(r, start, start + first_size - 1); - __bitclear_clear_range(r, start + first_size, end); - } -} - -#define BITSET_CLEAR_RANGE(x, b, e) \ - __bitclear_clear_range(x, b, e) - -static inline unsigned -__bitset_prefix_sum(const BITSET_WORD *x, unsigned b, unsigned n) -{ - unsigned prefix = 0; - - for (unsigned i = 0; i < n; i++) { - if ((i + 1) * BITSET_WORDBITS <= b) { - prefix += util_bitcount(x[i]); - } else { - prefix += util_bitcount(x[i] & BITFIELD_MASK(b - i * BITSET_WORDBITS)); - break; - } - } - return prefix; -} - -/* Count set bits in the bitset (compute the size/cardinality of the bitset). - * This is a special case of prefix sum, but this convenience method is more - * natural when applicable. - */ - -static inline unsigned -__bitset_count(const BITSET_WORD *x, unsigned n) -{ - return __bitset_prefix_sum(x, ~0, n); -} - -#define BITSET_PREFIX_SUM(x, b) \ - __bitset_prefix_sum(x, b, ARRAY_SIZE(x)) - -#define BITSET_COUNT(x) \ - __bitset_count(x, ARRAY_SIZE(x)) - -/* Get first bit set in a bitset. - */ -static inline int -__bitset_ffs(const BITSET_WORD *x, int n) -{ - for (int i = 0; i < n; i++) { - if (x[i]) - return ffs(x[i]) + BITSET_WORDBITS * i; - } - - return 0; -} - -/* Get the last bit set in a bitset. - */ -static inline int -__bitset_last_bit(const BITSET_WORD *x, int n) -{ - for (int i = n - 1; i >= 0; i--) { - if (x[i]) - return util_last_bit(x[i]) + BITSET_WORDBITS * i; - } - - return 0; -} - -#define BITSET_FFS(x) __bitset_ffs(x, ARRAY_SIZE(x)) -#define BITSET_LAST_BIT(x) __bitset_last_bit(x, ARRAY_SIZE(x)) -#define BITSET_LAST_BIT_SIZED(x, size) __bitset_last_bit(x, size) - -static inline unsigned -__bitset_next_set(unsigned i, BITSET_WORD *tmp, - const BITSET_WORD *set, unsigned size) -{ - unsigned bit, word; - - /* NOTE: The initial conditions for this function are very specific. At - * the start of the loop, the tmp variable must be set to *set and the - * initial i value set to 0. This way, if there is a bit set in the first - * word, we ignore the i-value and just grab that bit (so 0 is ok, even - * though 0 may be returned). If the first word is 0, then the value of - * `word` will be 0 and we will go on to look at the second word. - */ - word = BITSET_BITWORD(i); - while (*tmp == 0) { - word++; - - if (word >= BITSET_WORDS(size)) - return size; - - *tmp = set[word]; - } - - /* Find the next set bit in the non-zero word */ - bit = ffs(*tmp) - 1; - - /* Unset the bit */ - *tmp &= ~(1ull << bit); - - return word * BITSET_WORDBITS + bit; -} - -/** - * Iterates over each set bit in a set - * - * @param __i iteration variable, bit number - * @param __set the bitset to iterate (will not be modified) - * @param __size number of bits in the set to consider - */ -#define BITSET_FOREACH_SET(__i, __set, __size) \ - for (BITSET_WORD __tmp = (__size) == 0 ? 0 : *(__set), *__foo = &__tmp; __foo != NULL; __foo = NULL) \ - for (__i = 0; \ - (__i = __bitset_next_set(__i, &__tmp, __set, __size)) < __size;) - -static inline void -__bitset_next_range(unsigned *start, unsigned *end, const BITSET_WORD *set, - unsigned size) -{ - /* To find the next start, start searching from end. In the first iteration - * it will be at 0, in every subsequent iteration it will be at the first - * 0-bit after the range. - */ - unsigned word = BITSET_BITWORD(*end); - if (word >= BITSET_WORDS(size)) { - *start = *end = size; - return; - } - BITSET_WORD tmp = set[word] & ~(BITSET_BIT(*end) - 1); - while (!tmp) { - word++; - if (word >= BITSET_WORDS(size)) { - *start = *end = size; - return; - } - tmp = set[word]; - } - - *start = word * BITSET_WORDBITS + ffs(tmp) - 1; - - /* Now do the opposite to find end. Here we can start at start + 1, because - * we know that the bit at start is 1 and we're searching for the first - * 0-bit. - */ - word = BITSET_BITWORD(*start + 1); - if (word >= BITSET_WORDS(size)) { - *end = size; - return; - } - tmp = set[word] | (BITSET_BIT(*start + 1) - 1); - while (~tmp == 0) { - word++; - if (word >= BITSET_WORDS(size)) { - *end = size; - return; - } - tmp = set[word]; - } - - /* Cap "end" at "size" in case there are extra bits past "size" set in the - * word. This is only necessary for "end" because we terminate the loop if - * "start" goes past "size". - */ - *end = MIN2(word * BITSET_WORDBITS + ffs(~tmp) - 1, size); -} - -/** - * Iterates over each contiguous range of set bits in a set - * - * @param __start the first 1 bit of the current range - * @param __end the bit after the last 1 bit of the current range - * @param __set the bitset to iterate (will not be modified) - * @param __size number of bits in the set to consider - */ -#define BITSET_FOREACH_RANGE(__start, __end, __set, __size) \ - for (__start = 0, __end = 0, \ - __bitset_next_range(&__start, &__end, __set, __size); \ - __start < __size; \ - __bitset_next_range(&__start, &__end, __set, __size)) - - -#ifdef __cplusplus - -/** - * Simple C++ wrapper of a bitset type of static size, with value semantics - * and basic bitwise arithmetic operators. The operators defined below are - * expected to have the same semantics as the same operator applied to other - * fundamental integer types. T is the name of the struct to instantiate - * it as, and N is the number of bits in the bitset. - */ -#define DECLARE_BITSET_T(T, N) struct T { \ - explicit \ - operator bool() const \ - { \ - for (unsigned i = 0; i < BITSET_WORDS(N); i++) \ - if (words[i]) \ - return true; \ - return false; \ - } \ - \ - T & \ - operator=(int x) \ - { \ - const T c = {{ (BITSET_WORD)x }}; \ - return *this = c; \ - } \ - \ - friend bool \ - operator==(const T &b, const T &c) \ - { \ - return BITSET_EQUAL(b.words, c.words); \ - } \ - \ - friend bool \ - operator!=(const T &b, const T &c) \ - { \ - return !(b == c); \ - } \ - \ - friend bool \ - operator==(const T &b, int x) \ - { \ - const T c = {{ (BITSET_WORD)x }}; \ - return b == c; \ - } \ - \ - friend bool \ - operator!=(const T &b, int x) \ - { \ - return !(b == x); \ - } \ - \ - friend T \ - operator~(const T &b) \ - { \ - T c; \ - for (unsigned i = 0; i < BITSET_WORDS(N); i++) \ - c.words[i] = ~b.words[i]; \ - return c; \ - } \ - \ - T & \ - operator|=(const T &b) \ - { \ - for (unsigned i = 0; i < BITSET_WORDS(N); i++) \ - words[i] |= b.words[i]; \ - return *this; \ - } \ - \ - friend T \ - operator|(const T &b, const T &c) \ - { \ - T d = b; \ - d |= c; \ - return d; \ - } \ - \ - T & \ - operator&=(const T &b) \ - { \ - for (unsigned i = 0; i < BITSET_WORDS(N); i++) \ - words[i] &= b.words[i]; \ - return *this; \ - } \ - \ - friend T \ - operator&(const T &b, const T &c) \ - { \ - T d = b; \ - d &= c; \ - return d; \ - } \ - \ - bool \ - test(unsigned i) const \ - { \ - return BITSET_TEST(words, i); \ - } \ - \ - T & \ - set(unsigned i) \ - { \ - BITSET_SET(words, i); \ - return *this; \ - } \ - \ - T & \ - clear(unsigned i) \ - { \ - BITSET_CLEAR(words, i); \ - return *this; \ - } \ - \ - BITSET_WORD words[BITSET_WORDS(N)]; \ - } - -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/blob.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/blob.c deleted file mode 100644 index 4e1ed7c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/blob.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include - -#include "blob.h" -#include "u_math.h" - -#ifdef HAVE_VALGRIND -#include -#include -#define VG(x) x -#else -#define VG(x) -#endif - -#define BLOB_INITIAL_SIZE 4096 - -/* Ensure that \blob will be able to fit an additional object of size - * \additional. The growing (if any) will occur by doubling the existing - * allocation. - */ -static bool -grow_to_fit(struct blob *blob, size_t additional) -{ - size_t to_allocate; - uint8_t *new_data; - - if (blob->out_of_memory) - return false; - - if (blob->size + additional <= blob->allocated) - return true; - - if (blob->fixed_allocation) { - blob->out_of_memory = true; - return false; - } - - if (blob->allocated == 0) - to_allocate = BLOB_INITIAL_SIZE; - else - to_allocate = blob->allocated * 2; - - to_allocate = MAX2(to_allocate, blob->allocated + additional); - - new_data = realloc(blob->data, to_allocate); - if (new_data == NULL) { - blob->out_of_memory = true; - return false; - } - - blob->data = new_data; - blob->allocated = to_allocate; - - return true; -} - -/* Align the blob->size so that reading or writing a value at (blob->data + - * blob->size) will result in an access aligned to a granularity of \alignment - * bytes. - * - * \return True unless allocation fails - */ -bool -blob_align(struct blob *blob, size_t alignment) -{ - const size_t new_size = align64(blob->size, alignment); - - if (blob->size < new_size) { - if (!grow_to_fit(blob, new_size - blob->size)) - return false; - - if (blob->data) - memset(blob->data + blob->size, 0, new_size - blob->size); - blob->size = new_size; - } - - return true; -} - -void -blob_reader_align(struct blob_reader *blob, size_t alignment) -{ - blob->current = blob->data + align64(blob->current - blob->data, alignment); -} - -void -blob_init(struct blob *blob) -{ - blob->data = NULL; - blob->allocated = 0; - blob->size = 0; - blob->fixed_allocation = false; - blob->out_of_memory = false; -} - -void -blob_init_fixed(struct blob *blob, void *data, size_t size) -{ - blob->data = data; - blob->allocated = size; - blob->size = 0; - blob->fixed_allocation = true; - blob->out_of_memory = false; -} - -void -blob_finish_get_buffer(struct blob *blob, void **buffer, size_t *size) -{ - *buffer = blob->data; - *size = blob->size; - blob->data = NULL; - - /* Trim the buffer. */ - *buffer = realloc(*buffer, *size); -} - -bool -blob_overwrite_bytes(struct blob *blob, - size_t offset, - const void *bytes, - size_t to_write) -{ - /* Detect an attempt to overwrite data out of bounds. */ - if (offset + to_write < offset || blob->size < offset + to_write) - return false; - - VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write)); - - if (blob->data) - memcpy(blob->data + offset, bytes, to_write); - - return true; -} - -bool -blob_write_bytes(struct blob *blob, const void *bytes, size_t to_write) -{ - if (! grow_to_fit(blob, to_write)) - return false; - - if (blob->data && to_write > 0) { - VG(VALGRIND_CHECK_MEM_IS_DEFINED(bytes, to_write)); - memcpy(blob->data + blob->size, bytes, to_write); - } - blob->size += to_write; - - return true; -} - -intptr_t -blob_reserve_bytes(struct blob *blob, size_t to_write) -{ - intptr_t ret; - - if (! grow_to_fit (blob, to_write)) - return -1; - - ret = blob->size; - blob->size += to_write; - - return ret; -} - -intptr_t -blob_reserve_uint32(struct blob *blob) -{ - blob_align(blob, sizeof(uint32_t)); - return blob_reserve_bytes(blob, sizeof(uint32_t)); -} - -intptr_t -blob_reserve_intptr(struct blob *blob) -{ - blob_align(blob, sizeof(intptr_t)); - return blob_reserve_bytes(blob, sizeof(intptr_t)); -} - -#define BLOB_WRITE_TYPE(name, type) \ -bool \ -name(struct blob *blob, type value) \ -{ \ - blob_align(blob, sizeof(value)); \ - return blob_write_bytes(blob, &value, sizeof(value)); \ -} - -BLOB_WRITE_TYPE(blob_write_uint8, uint8_t) -BLOB_WRITE_TYPE(blob_write_uint16, uint16_t) -BLOB_WRITE_TYPE(blob_write_uint32, uint32_t) -BLOB_WRITE_TYPE(blob_write_uint64, uint64_t) -BLOB_WRITE_TYPE(blob_write_intptr, intptr_t) - -#define ASSERT_ALIGNED(_offset, _align) \ - assert(align64((_offset), (_align)) == (_offset)) - -bool -blob_overwrite_uint8 (struct blob *blob, - size_t offset, - uint8_t value) -{ - ASSERT_ALIGNED(offset, sizeof(value)); - return blob_overwrite_bytes(blob, offset, &value, sizeof(value)); -} - -bool -blob_overwrite_uint32 (struct blob *blob, - size_t offset, - uint32_t value) -{ - ASSERT_ALIGNED(offset, sizeof(value)); - return blob_overwrite_bytes(blob, offset, &value, sizeof(value)); -} - -bool -blob_overwrite_intptr (struct blob *blob, - size_t offset, - intptr_t value) -{ - ASSERT_ALIGNED(offset, sizeof(value)); - return blob_overwrite_bytes(blob, offset, &value, sizeof(value)); -} - -bool -blob_write_string(struct blob *blob, const char *str) -{ - return blob_write_bytes(blob, str, strlen(str) + 1); -} - -void -blob_reader_init(struct blob_reader *blob, const void *data, size_t size) -{ - blob->data = data; - blob->end = blob->data + size; - blob->current = data; - blob->overrun = false; -} - -/* Check that an object of size \size can be read from this blob. - * - * If not, set blob->overrun to indicate that we attempted to read too far. - */ -static bool -ensure_can_read(struct blob_reader *blob, size_t size) -{ - if (blob->overrun) - return false; - - if (blob->current <= blob->end && blob->end - blob->current >= size) - return true; - - blob->overrun = true; - - return false; -} - -const void * -blob_read_bytes(struct blob_reader *blob, size_t size) -{ - const void *ret; - - if (! ensure_can_read (blob, size)) - return NULL; - - ret = blob->current; - - blob->current += size; - - return ret; -} - -void -blob_copy_bytes(struct blob_reader *blob, void *dest, size_t size) -{ - const void *bytes; - - bytes = blob_read_bytes(blob, size); - if (bytes == NULL || size == 0) - return; - - memcpy(dest, bytes, size); -} - -void -blob_skip_bytes(struct blob_reader *blob, size_t size) -{ - if (ensure_can_read (blob, size)) - blob->current += size; -} - -#define BLOB_READ_TYPE(name, type) \ -type \ -name(struct blob_reader *blob) \ -{ \ - type ret = 0; \ - int size = sizeof(ret); \ - blob_reader_align(blob, size); \ - blob_copy_bytes(blob, &ret, size); \ - return ret; \ -} - -BLOB_READ_TYPE(blob_read_uint8, uint8_t) -BLOB_READ_TYPE(blob_read_uint16, uint16_t) -BLOB_READ_TYPE(blob_read_uint32, uint32_t) -BLOB_READ_TYPE(blob_read_uint64, uint64_t) -BLOB_READ_TYPE(blob_read_intptr, intptr_t) - -char * -blob_read_string(struct blob_reader *blob) -{ - int size; - char *ret; - uint8_t *nul; - - /* If we're already at the end, then this is an overrun. */ - if (blob->current >= blob->end) { - blob->overrun = true; - return NULL; - } - - /* Similarly, if there is no zero byte in the data remaining in this blob, - * we also consider that an overrun. - */ - nul = memchr(blob->current, 0, blob->end - blob->current); - - if (nul == NULL) { - blob->overrun = true; - return NULL; - } - - size = nul - blob->current + 1; - - assert(ensure_can_read(blob, size)); - - ret = (char *) blob->current; - - blob->current += size; - - return ret; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/blob.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/blob.h deleted file mode 100644 index 91b0590..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/blob.h +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef BLOB_H -#define BLOB_H - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* The blob functions implement a simple, low-level API for serializing and - * deserializing. - * - * All objects written to a blob will be serialized directly, (without any - * additional meta-data to describe the data written). Therefore, it is the - * caller's responsibility to ensure that any data can be read later, (either - * by knowing exactly what data is expected, or by writing to the blob - * sufficient meta-data to describe what has been written). - * - * A blob is efficient in that it dynamically grows by doubling in size, so - * allocation costs are logarithmic. - */ - -struct blob { - /* The data actually written to the blob. Never read or write this directly - * when serializing, use blob_reserve_* and blob_overwrite_* instead which - * check for out_of_memory and handle fixed-size blobs correctly. - */ - uint8_t *data; - - /** Number of bytes that have been allocated for \c data. */ - size_t allocated; - - /** The number of bytes that have actual data written to them. */ - size_t size; - - /** True if \c data a fixed allocation that we cannot resize - * - * \see blob_init_fixed - */ - bool fixed_allocation; - - /** - * True if we've ever failed to realloc or if we go pas the end of a fixed - * allocation blob. - */ - bool out_of_memory; -}; - -/* When done reading, the caller can ensure that everything was consumed by - * checking the following: - * - * 1. blob->current should be equal to blob->end, (if not, too little was - * read). - * - * 2. blob->overrun should be false, (otherwise, too much was read). - */ -struct blob_reader { - const uint8_t *data; - const uint8_t *end; - const uint8_t *current; - bool overrun; -}; - -/** - * Init a new, empty blob. - */ -void -blob_init(struct blob *blob); - -/** - * Init a new, fixed-size blob. - * - * A fixed-size blob has a fixed block of data that will not be freed on - * blob_finish and will never be grown. If we hit the end, we simply start - * returning false from the write functions. - * - * If a fixed-size blob has a NULL data pointer then the data is written but - * it otherwise operates normally. This can be used to determine the size - * that will be required to write a given data structure. - */ -void -blob_init_fixed(struct blob *blob, void *data, size_t size); - -/** - * Finish a blob and free its memory. - * - * If \blob was initialized with blob_init_fixed, the data pointer is - * considered to be owned by the user and will not be freed. - */ -static inline void -blob_finish(struct blob *blob) -{ - if (!blob->fixed_allocation) - free(blob->data); -} - -void -blob_finish_get_buffer(struct blob *blob, void **buffer, size_t *size); - -/** - * Aligns the blob to the given alignment. - * - * \see blob_reader_align - * - * \return True unless allocation fails - */ -bool -blob_align(struct blob *blob, size_t alignment); - -/** - * Add some unstructured, fixed-size data to a blob. - * - * \return True unless allocation failed. - */ -bool -blob_write_bytes(struct blob *blob, const void *bytes, size_t to_write); - -/** - * Reserve space in \blob for a number of bytes. - * - * Space will be allocated within the blob for these byes, but the bytes will - * be left uninitialized. The caller is expected to use \sa - * blob_overwrite_bytes to write to these bytes. - * - * \return An offset to space allocated within \blob to which \to_write bytes - * can be written, (or -1 in case of any allocation error). - */ -intptr_t -blob_reserve_bytes(struct blob *blob, size_t to_write); - -/** - * Similar to \sa blob_reserve_bytes, but only reserves an uint32_t worth of - * space. Note that this must be used if later reading with \sa - * blob_read_uint32, since it aligns the offset correctly. - */ -intptr_t -blob_reserve_uint32(struct blob *blob); - -/** - * Similar to \sa blob_reserve_bytes, but only reserves an intptr_t worth of - * space. Note that this must be used if later reading with \sa - * blob_read_intptr, since it aligns the offset correctly. - */ -intptr_t -blob_reserve_intptr(struct blob *blob); - -/** - * Overwrite some data previously written to the blob. - * - * Writes data to an existing portion of the blob at an offset of \offset. - * This data range must have previously been written to the blob by one of the - * blob_write_* calls. - * - * For example usage, see blob_overwrite_uint32 - * - * \return True unless the requested offset or offset+to_write lie outside - * the current blob's size. - */ -bool -blob_overwrite_bytes(struct blob *blob, - size_t offset, - const void *bytes, - size_t to_write); - -/** - * Add a uint8_t to a blob. - * - * \return True unless allocation failed. - */ -bool -blob_write_uint8(struct blob *blob, uint8_t value); - -/** - * Overwrite a uint8_t previously written to the blob. - * - * Writes a uint8_t value to an existing portion of the blob at an offset of - * \offset. This data range must have previously been written to the blob by - * one of the blob_write_* calls. - * - * \return True unless the requested position or position+to_write lie outside - * the current blob's size. - */ -bool -blob_overwrite_uint8(struct blob *blob, - size_t offset, - uint8_t value); - -/** - * Add a uint16_t to a blob. - * - * \note This function will only write to a uint16_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be added to the - * blob if this write follows some unaligned write (such as - * blob_write_string). - * - * \return True unless allocation failed. - */ -bool -blob_write_uint16(struct blob *blob, uint16_t value); - -/** - * Add a uint32_t to a blob. - * - * \note This function will only write to a uint32_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be added to the - * blob if this write follows some unaligned write (such as - * blob_write_string). - * - * \return True unless allocation failed. - */ -bool -blob_write_uint32(struct blob *blob, uint32_t value); - -/** - * Overwrite a uint32_t previously written to the blob. - * - * Writes a uint32_t value to an existing portion of the blob at an offset of - * \offset. This data range must have previously been written to the blob by - * one of the blob_write_* calls. - * - * - * The expected usage is something like the following pattern: - * - * size_t offset; - * - * offset = blob_reserve_uint32(blob); - * ... various blob write calls, writing N items ... - * blob_overwrite_uint32 (blob, offset, N); - * - * \return True unless the requested position or position+to_write lie outside - * the current blob's size. - */ -bool -blob_overwrite_uint32(struct blob *blob, - size_t offset, - uint32_t value); - -/** - * Add a uint64_t to a blob. - * - * \note This function will only write to a uint64_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be added to the - * blob if this write follows some unaligned write (such as - * blob_write_string). - * - * \return True unless allocation failed. - */ -bool -blob_write_uint64(struct blob *blob, uint64_t value); - -/** - * Add an intptr_t to a blob. - * - * \note This function will only write to an intptr_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be added to the - * blob if this write follows some unaligned write (such as - * blob_write_string). - * - * \return True unless allocation failed. - */ -bool -blob_write_intptr(struct blob *blob, intptr_t value); - -/** - * Overwrite an intptr_t previously written to the blob. - * - * Writes a intptr_t value to an existing portion of the blob at an offset of - * \offset. This data range must have previously been written to the blob by - * one of the blob_write_* calls. - * - * For example usage, see blob_overwrite_uint32 - * - * \return True unless the requested position or position+to_write lie outside - * the current blob's size. - */ -bool -blob_overwrite_intptr(struct blob *blob, - size_t offset, - intptr_t value); - -/** - * Add a NULL-terminated string to a blob, (including the NULL terminator). - * - * \return True unless allocation failed. - */ -bool -blob_write_string(struct blob *blob, const char *str); - -/** - * Start reading a blob, (initializing the contents of \blob for reading). - * - * After this call, the caller can use the various blob_read_* functions to - * read elements from the data array. - * - * For all of the blob_read_* functions, if there is insufficient data - * remaining, the functions will do nothing, (perhaps returning default values - * such as 0). The caller can detect this by noting that the blob_reader's - * current value is unchanged before and after the call. - */ -void -blob_reader_init(struct blob_reader *blob, const void *data, size_t size); - -/** - * Align the current offset of the blob reader to the given alignment. - * - * This may be useful if you need the result of blob_read_bytes to have a - * particular alignment. Note that this only aligns relative to blob->data - * and the alignment of the resulting pointer is only guaranteed if blob->data - * is also aligned to the requested alignment. - */ -void -blob_reader_align(struct blob_reader *blob, size_t alignment); - -/** - * Read some unstructured, fixed-size data from the current location, (and - * update the current location to just past this data). - * - * \note The memory returned belongs to the data underlying the blob reader. The - * caller must copy the data in order to use it after the lifetime of the data - * underlying the blob reader. - * - * \return The bytes read (see note above about memory lifetime). - */ -const void * -blob_read_bytes(struct blob_reader *blob, size_t size); - -/** - * Read some unstructured, fixed-size data from the current location, copying - * it to \dest (and update the current location to just past this data) - */ -void -blob_copy_bytes(struct blob_reader *blob, void *dest, size_t size); - -/** - * Skip \size bytes within the blob. - */ -void -blob_skip_bytes(struct blob_reader *blob, size_t size); - -/** - * Read a uint8_t from the current location, (and update the current location - * to just past this uint8_t). - * - * \return The uint8_t read - */ -uint8_t -blob_read_uint8(struct blob_reader *blob); - -/** - * Read a uint16_t from the current location, (and update the current location - * to just past this uint16_t). - * - * \note This function will only read from a uint16_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be skipped. - * - * \return The uint16_t read - */ -uint16_t -blob_read_uint16(struct blob_reader *blob); - -/** - * Read a uint32_t from the current location, (and update the current location - * to just past this uint32_t). - * - * \note This function will only read from a uint32_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be skipped. - * - * \return The uint32_t read - */ -uint32_t -blob_read_uint32(struct blob_reader *blob); - -/** - * Read a uint64_t from the current location, (and update the current location - * to just past this uint64_t). - * - * \note This function will only read from a uint64_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be skipped. - * - * \return The uint64_t read - */ -uint64_t -blob_read_uint64(struct blob_reader *blob); - -/** - * Read an intptr_t value from the current location, (and update the - * current location to just past this intptr_t). - * - * \note This function will only read from an intptr_t-aligned offset from the - * beginning of the blob's data, so some padding bytes may be skipped. - * - * \return The intptr_t read - */ -intptr_t -blob_read_intptr(struct blob_reader *blob); - -/** - * Read a NULL-terminated string from the current location, (and update the - * current location to just past this string). - * - * \note The memory returned belongs to the data underlying the blob reader. The - * caller must copy the string in order to use the string after the lifetime - * of the data underlying the blob reader. - * - * \return The string read (see note above about memory lifetime). However, if - * there is no NULL byte remaining within the blob, this function returns - * NULL. - */ -char * -blob_read_string(struct blob_reader *blob); - -#ifdef __cplusplus -} -#endif - -#endif /* BLOB_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/build_id.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/build_id.c deleted file mode 100644 index 17186c6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/build_id.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifdef HAVE_DL_ITERATE_PHDR -#include -#include -#include -#include - -#include "build_id.h" -#include "macros.h" - -#ifndef NT_GNU_BUILD_ID -#define NT_GNU_BUILD_ID 3 -#endif - -#ifndef ElfW -#define ElfW(type) Elf_##type -#endif - -struct build_id_note { - ElfW(Nhdr) nhdr; - - char name[4]; /* Note name for build-id is "GNU\0" */ - uint8_t build_id[0]; -}; - -struct callback_data { - /* Base address of shared object, taken from Dl_info::dli_fbase */ - const void *dli_fbase; - - struct build_id_note *note; -}; - -static int -build_id_find_nhdr_callback(struct dl_phdr_info *info, size_t size, void *data_) -{ - struct callback_data *data = data_; - - /* Calculate address where shared object is mapped into the process space. - * (Using the base address and the virtual address of the first LOAD segment) - */ - void *map_start = NULL; - for (unsigned i = 0; i < info->dlpi_phnum; i++) { - if (info->dlpi_phdr[i].p_type == PT_LOAD) { - map_start = (void *)(info->dlpi_addr + info->dlpi_phdr[i].p_vaddr); - break; - } - } - - if (map_start != data->dli_fbase) - return 0; - - for (unsigned i = 0; i < info->dlpi_phnum; i++) { - if (info->dlpi_phdr[i].p_type != PT_NOTE) - continue; - - struct build_id_note *note = (void *)(info->dlpi_addr + - info->dlpi_phdr[i].p_vaddr); - ptrdiff_t len = info->dlpi_phdr[i].p_filesz; - - while (len >= sizeof(struct build_id_note)) { - if (note->nhdr.n_type == NT_GNU_BUILD_ID && - note->nhdr.n_descsz != 0 && - note->nhdr.n_namesz == 4 && - memcmp(note->name, "GNU", 4) == 0) { - data->note = note; - return 1; - } - - size_t offset = sizeof(ElfW(Nhdr)) + - ALIGN_POT(note->nhdr.n_namesz, 4) + - ALIGN_POT(note->nhdr.n_descsz, 4); - note = (struct build_id_note *)((char *)note + offset); - len -= offset; - } - } - - return 0; -} - -const struct build_id_note * -build_id_find_nhdr_for_addr(const void *addr) -{ - Dl_info info; - - if (!dladdr(addr, &info)) - return NULL; - - if (!info.dli_fbase) - return NULL; - - struct callback_data data = { - .dli_fbase = info.dli_fbase, - .note = NULL, - }; - - if (!dl_iterate_phdr(build_id_find_nhdr_callback, &data)) - return NULL; - - return data.note; -} - -unsigned -build_id_length(const struct build_id_note *note) -{ - return note->nhdr.n_descsz; -} - -const uint8_t * -build_id_data(const struct build_id_note *note) -{ - return note->build_id; -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/build_id.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/build_id.h deleted file mode 100644 index 2ff596e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/build_id.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2016 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef BUILD_ID_H -#define BUILD_ID_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef HAVE_DL_ITERATE_PHDR - -#include - -struct build_id_note; - -const struct build_id_note * -build_id_find_nhdr_for_addr(const void *addr); - -unsigned -build_id_length(const struct build_id_note *note); - -const uint8_t * -build_id_data(const struct build_id_note *note); - -#endif - -#ifdef __cplusplus -} -#endif -#endif /* BUILD_ID_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/cnd_monotonic.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/cnd_monotonic.h deleted file mode 100644 index cdac738..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/cnd_monotonic.h +++ /dev/null @@ -1,149 +0,0 @@ -/************************************************************************** - * - * Copyright 2020 Lag Free Games, LLC - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef CND_MONOTONIC_H -#define CND_MONOTONIC_H - -#include "../../include/c11/threads.h" -#include "os_time.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct u_cnd_monotonic -{ -#ifdef _WIN32 - CONDITION_VARIABLE condvar; -#else - pthread_cond_t cond; -#endif -}; - -static inline int -u_cnd_monotonic_init(struct u_cnd_monotonic *cond) -{ - assert(cond != NULL); - -#ifdef _WIN32 - InitializeConditionVariable(&cond->condvar); - return thrd_success; -#else - int ret = thrd_error; - pthread_condattr_t condattr; - if (pthread_condattr_init(&condattr) == 0) { - if ((pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC) == 0) && - (pthread_cond_init(&cond->cond, &condattr) == 0)) { - ret = thrd_success; - } - - pthread_condattr_destroy(&condattr); - } - - return ret; -#endif -} - -static inline void -u_cnd_monotonic_destroy(struct u_cnd_monotonic *cond) -{ - assert(cond != NULL); - -#ifdef _WIN32 - // Do nothing -#else - pthread_cond_destroy(&cond->cond); -#endif -} - -static inline int -u_cnd_monotonic_broadcast(struct u_cnd_monotonic *cond) -{ - assert(cond != NULL); - -#ifdef _WIN32 - WakeAllConditionVariable(&cond->condvar); - return thrd_success; -#else - return (pthread_cond_broadcast(&cond->cond) == 0) ? thrd_success : thrd_error; -#endif -} - -static inline int -u_cnd_monotonic_signal(struct u_cnd_monotonic *cond) -{ - assert(cond != NULL); - -#ifdef _WIN32 - WakeConditionVariable(&cond->condvar); - return thrd_success; -#else - return (pthread_cond_signal(&cond->cond) == 0) ? thrd_success : thrd_error; -#endif -} - -static inline int -u_cnd_monotonic_timedwait(struct u_cnd_monotonic *cond, mtx_t *mtx, const struct timespec *abs_time) -{ - assert(cond != NULL); - assert(mtx != NULL); - assert(abs_time != NULL); - -#ifdef _WIN32 - const uint64_t future = (abs_time->tv_sec * 1000) + (abs_time->tv_nsec / 1000000); - const uint64_t now = os_time_get_nano() / 1000000; - const DWORD timeout = (future > now) ? (DWORD)(future - now) : 0; - if (SleepConditionVariableCS(&cond->condvar, mtx, timeout)) - return thrd_success; - return (GetLastError() == ERROR_TIMEOUT) ? thrd_timedout : thrd_error; -#else - int rt = pthread_cond_timedwait(&cond->cond, mtx, abs_time); - if (rt == ETIMEDOUT) - return thrd_timedout; - return (rt == 0) ? thrd_success : thrd_error; -#endif -} - -static inline int -u_cnd_monotonic_wait(struct u_cnd_monotonic *cond, mtx_t *mtx) -{ - assert(cond != NULL); - assert(mtx != NULL); - -#ifdef _WIN32 - SleepConditionVariableCS(&cond->condvar, mtx, INFINITE); - return thrd_success; -#else - return (pthread_cond_wait(&cond->cond, mtx) == 0) ? thrd_success : thrd_error; -#endif -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compat_layer.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compat_layer.cpp deleted file mode 100644 index a172509..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compat_layer.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// -// Created by serpentspirale on 16/06/23. -// - - -#include "compat_layer.h" - - -int vscprintf (const char * format, va_list pargs) -{ - int retval; - va_list argcopy; - va_copy(argcopy, pargs); - retval = vsnprintf(NULL, 0, format, argcopy); - va_end(argcopy); - return retval; -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compat_layer.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compat_layer.h deleted file mode 100644 index 5fa436e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compat_layer.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by serpentspirale on 16/06/23. -// - -#include -#include - -#ifndef GLSLOPTIMIZERV2_COMPAT_LAYER_H -#define GLSLOPTIMIZERV2_COMPAT_LAYER_H - -int vscprintf (const char * format, va_list pargs); - -#endif //GLSLOPTIMIZERV2_COMPAT_LAYER_H diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compiler.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compiler.h deleted file mode 100644 index 76bbf9e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compiler.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2009 VMware, Inc. 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 compiler.h - * Compiler-related stuff. - */ - - -#ifndef COMPILER_H -#define COMPILER_H - - -#include - -#include "macros.h" -#include "u_endian.h" -#include "detect_arch.h" - -/** - * Define CPU_TO_LE32 - * Do not use these unless absolutely necessary! - * Try to use a runtime test instead. - * For now, only used by some DRI hardware drivers for color/texel packing. - */ -#if UTIL_ARCH_BIG_ENDIAN -#if defined(__linux__) -#include -#define CPU_TO_LE32( x ) bswap_32( x ) -#elif defined(__APPLE__) -#include -#define CPU_TO_LE32( x ) CFSwapInt32HostToLittle( x ) -#elif defined(__OpenBSD__) -#include -#define CPU_TO_LE32( x ) htole32( x ) -#else /*__linux__ */ -#include -#define CPU_TO_LE32( x ) bswap32( x ) -#endif /*__linux__*/ -#else -#define CPU_TO_LE32( x ) ( x ) -#endif -#define LE32_TO_CPU( x ) CPU_TO_LE32( x ) - - -/* Macro for stack alignment. */ -#if defined(__GNUC__) && DETECT_ARCH_X86 -#define UTIL_ALIGN_STACK __attribute__((force_align_arg_pointer)) -#else -#define UTIL_ALIGN_STACK -#endif - -#define IEEE_ONE 0x3f800000 - -#ifndef __has_attribute -# define __has_attribute(x) 0 -#endif - -#if defined(__has_cpp_attribute) && defined(__clang__) -/* We do not do the same trick as __has_attribute because parsing - * clang::fallthrough in the preprocessor fails in GCC. */ -# define HAS_CLANG_FALLTHROUGH __has_cpp_attribute(clang::fallthrough) -#else -# define HAS_CLANG_FALLTHROUGH 0 -#endif - -#if (defined(__cplusplus) && (__cplusplus >= 201703L)) || \ - (defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L)) -/* Standard C++17/C23 attribute */ -#define FALLTHROUGH [[fallthrough]] -#elif HAS_CLANG_FALLTHROUGH -/* Clang++ specific */ -#define FALLTHROUGH [[clang::fallthrough]] -#elif __has_attribute(fallthrough) -/* Non-standard but supported by at least gcc and clang */ -#define FALLTHROUGH __attribute__((fallthrough)) -#else -#define FALLTHROUGH do { } while(0) -#endif - -#endif /* COMPILER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compress.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compress.c deleted file mode 100644 index 3fe6874..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compress.c +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifdef HAVE_COMPRESSION - -#include - -/* Ensure that zlib uses 'const' in 'z_const' declarations. */ -#ifndef ZLIB_CONST -#define ZLIB_CONST -#endif - -#ifdef HAVE_ZLIB -#include "zlib.h" -#endif - -#ifdef HAVE_ZSTD -#include "zstd.h" -#endif - -#include "compress.h" -#include "macros.h" - -/* 3 is the recomended level, with 22 as the absolute maximum */ -#define ZSTD_COMPRESSION_LEVEL 3 - -size_t -util_compress_max_compressed_len(size_t in_data_size) -{ -#ifdef HAVE_ZSTD - /* from the zstd docs (https://facebook.github.io/zstd/zstd_manual.html): - * compression runs faster if `dstCapacity` >= `ZSTD_compressBound(srcSize)`. - */ - return ZSTD_compressBound(in_data_size); -#elif defined(HAVE_ZLIB) - /* From https://zlib.net/zlib_tech.html: - * - * "In the worst possible case, where the other block types would expand - * the data, deflation falls back to stored (uncompressed) blocks. Thus - * for the default settings used by deflateInit(), compress(), and - * compress2(), the only expansion is an overhead of five bytes per 16 KB - * block (about 0.03%), plus a one-time overhead of six bytes for the - * entire stream." - */ - size_t num_blocks = (in_data_size + 16383) / 16384; /* round up blocks */ - return in_data_size + 6 + (num_blocks * 5); -#else - STATIC_ASSERT(false); -#endif -} - -/* Compress data and return the size of the compressed data */ -size_t -util_compress_deflate(const uint8_t *in_data, size_t in_data_size, - uint8_t *out_data, size_t out_buff_size) -{ -#ifdef HAVE_ZSTD - size_t ret = ZSTD_compress(out_data, out_buff_size, in_data, in_data_size, - ZSTD_COMPRESSION_LEVEL); - if (ZSTD_isError(ret)) - return 0; - - return ret; -#elif defined(HAVE_ZLIB) - size_t compressed_size = 0; - - /* allocate deflate state */ - z_stream strm; - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.next_in = in_data; - strm.next_out = out_data; - strm.avail_in = in_data_size; - strm.avail_out = out_buff_size; - - int ret = deflateInit(&strm, Z_BEST_COMPRESSION); - if (ret != Z_OK) { - (void) deflateEnd(&strm); - return 0; - } - - /* compress until end of in_data */ - ret = deflate(&strm, Z_FINISH); - - /* stream should be complete */ - assert(ret == Z_STREAM_END); - if (ret == Z_STREAM_END) { - compressed_size = strm.total_out; - } - - /* clean up and return */ - (void) deflateEnd(&strm); - return compressed_size; -#else - STATIC_ASSERT(false); -# endif -} - -/** - * Decompresses data, returns true if successful. - */ -bool -util_compress_inflate(const uint8_t *in_data, size_t in_data_size, - uint8_t *out_data, size_t out_data_size) -{ -#ifdef HAVE_ZSTD - size_t ret = ZSTD_decompress(out_data, out_data_size, in_data, in_data_size); - return !ZSTD_isError(ret); -#elif defined(HAVE_ZLIB) - z_stream strm; - - /* allocate inflate state */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.next_in = in_data; - strm.avail_in = in_data_size; - strm.next_out = out_data; - strm.avail_out = out_data_size; - - int ret = inflateInit(&strm); - if (ret != Z_OK) - return false; - - ret = inflate(&strm, Z_NO_FLUSH); - assert(ret != Z_STREAM_ERROR); /* state not clobbered */ - - /* Unless there was an error we should have decompressed everything in one - * go as we know the uncompressed file size. - */ - if (ret != Z_STREAM_END) { - (void)inflateEnd(&strm); - return false; - } - assert(strm.avail_out == 0); - - /* clean up and return */ - (void)inflateEnd(&strm); - return true; -#else - STATIC_ASSERT(false); -#endif -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compress.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compress.h deleted file mode 100644 index fffaaa7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/compress.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifdef HAVE_COMPRESSION - -#include -#include - -size_t -util_compress_max_compressed_len(size_t in_data_size); - -bool -util_compress_inflate(const uint8_t *in_data, size_t in_data_size, - uint8_t *out_data, size_t out_data_size); - -size_t -util_compress_deflate(const uint8_t *in_data, size_t in_data_size, - uint8_t *out_data, size_t out_buff_size); - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/crc32.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/crc32.c deleted file mode 100644 index ec5ad2c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/crc32.c +++ /dev/null @@ -1,134 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * CRC32 implementation. - * - * @author Jose Fonseca - */ - - -#ifdef HAVE_ZLIB -#include -#endif -#include "crc32.h" - - -static const uint32_t -util_crc32_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d -}; - - -/** - * @sa http://www.w3.org/TR/PNG/#D-CRCAppendix - */ -uint32_t -util_hash_crc32(const void *data, size_t size) -{ - const uint8_t *p = data; - uint32_t crc = 0xffffffff; - -#ifdef HAVE_ZLIB - /* Prefer zlib's implementation for better performance. - * zlib's uInt is always "unsigned int" while size_t can be 64bit. - * Since 1.2.9 there's crc32_z that takes size_t, but use the more - * available function to avoid build system complications. - */ - if ((uInt)size == size) - return ~crc32(0, data, size); -#endif - - while (size--) - crc = util_crc32_table[(crc ^ *p++) & 0xff] ^ (crc >> 8); - - return crc; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/crc32.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/crc32.h deleted file mode 100644 index 3ddfc16..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/crc32.h +++ /dev/null @@ -1,55 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * CRC32 function. - * - * @author Jose Fonseca - */ - -#ifndef CRC32_H_ -#define CRC32_H_ - -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - -uint32_t -util_hash_crc32(const void *data, size_t size); - - -#ifdef __cplusplus -} -#endif - -#endif /* CRC32_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/dag.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/dag.c deleted file mode 100644 index 62f5eaa..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/dag.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright © 2019 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "set.h" -#include "dag.h" -#include - -static void -append_edge(struct dag_node *parent, struct dag_node *child, uintptr_t data) -{ - /* Remove the child as a DAG head. */ - list_delinit(&child->link); - - struct dag_edge edge = { - .child = child, - .data = data, - }; - - util_dynarray_append(&parent->edges, struct dag_edge, edge); - child->parent_count++; -} - -/** - * Adds a directed edge from the parent node to the child. - * - * Both nodes should have been initialized with dag_init_node(). The edge - * list may contain multiple edges to the same child with different data. - */ -void -dag_add_edge(struct dag_node *parent, struct dag_node *child, uintptr_t data) -{ - util_dynarray_foreach(&parent->edges, struct dag_edge, edge) { - if (edge->child == child && edge->data == data) - return; - } - - append_edge(parent, child, data); -} - -/** - * Adds a directed edge from the parent node to the child. - * - * Both nodes should have been initialized with dag_init_node(). If there is - * already an existing edge, the data is updated to the maximum of the - * previous data and the new data. This is useful if the data represents a - * delay. - */ -void -dag_add_edge_max_data(struct dag_node *parent, struct dag_node *child, - uintptr_t data) -{ - util_dynarray_foreach(&parent->edges, struct dag_edge, edge) { - if (edge->child == child) { - edge->data = MAX2(edge->data, data); - return; - } - } - - append_edge(parent, child, data); -} - -/* Removes a single edge from the graph, promoting the child to a DAG head. - * - * Note that calling this other than through dag_prune_head() means that you - * need to be careful when iterating the edges of remaining nodes for NULL - * children. - */ -void -dag_remove_edge(struct dag *dag, struct dag_edge *edge) -{ - if (!edge->child) - return; - - struct dag_node *child = edge->child; - child->parent_count--; - if (child->parent_count == 0) - list_addtail(&child->link, &dag->heads); - - edge->child = NULL; - edge->data = 0; -} - -/** - * Removes a DAG head from the graph, and moves any new dag heads into the - * heads list. - */ -void -dag_prune_head(struct dag *dag, struct dag_node *node) -{ - assert(!node->parent_count); - - list_delinit(&node->link); - - util_dynarray_foreach(&node->edges, struct dag_edge, edge) { - dag_remove_edge(dag, edge); - } -} - -/** - * Initializes DAG node (probably embedded in some other datastructure in the - * user). - */ -void -dag_init_node(struct dag *dag, struct dag_node *node) -{ - util_dynarray_init(&node->edges, dag); - list_addtail(&node->link, &dag->heads); -} - -struct dag_traverse_bottom_up_state { - struct set *seen; - void (*cb)(struct dag_node *node, void *data); - void *data; -}; - -static void -dag_traverse_bottom_up_node(struct dag_node *node, - struct dag_traverse_bottom_up_state *state) -{ - if (_mesa_set_search(state->seen, node)) - return; - - struct util_dynarray stack; - util_dynarray_init(&stack, NULL); - - do { - assert(node); - - while (node->edges.size != 0) { - util_dynarray_append(&stack, struct dag_node *, node); - - /* Push unprocessed children onto stack in reverse order. Note that - * it's possible for any of the children nodes to already be on the - * stack. - */ - util_dynarray_foreach_reverse(&node->edges, struct dag_edge, edge) { - if (!_mesa_set_search(state->seen, edge->child)) { - util_dynarray_append(&stack, struct dag_node *, edge->child); - } - } - - /* Get last element pushed: either left-most child or current node. - * If it's the current node, that means that we've processed all its - * children already. - */ - struct dag_node *top = util_dynarray_pop(&stack, struct dag_node *); - if (top == node) - break; - node = top; - } - - /* Process the node */ - state->cb(node, state->data); - _mesa_set_add(state->seen, node); - - /* Find the next unprocessed node in the stack */ - do { - node = NULL; - if (stack.size == 0) - break; - - node = util_dynarray_pop(&stack, struct dag_node *); - } while (_mesa_set_search(state->seen, node)); - } while (node); - - util_dynarray_fini(&stack); -} - -/** - * Walks the DAG from leaves to the root, ensuring that each node is only seen - * once its children have been, and each node is only traversed once. - */ -void -dag_traverse_bottom_up(struct dag *dag, void (*cb)(struct dag_node *node, - void *data), void *data) -{ - struct dag_traverse_bottom_up_state state = { - .seen = _mesa_pointer_set_create(NULL), - .data = data, - .cb = cb, - }; - - list_for_each_entry(struct dag_node, node, &dag->heads, link) { - dag_traverse_bottom_up_node(node, &state); - } - - ralloc_free(state.seen); -} - -/** - * Creates an empty DAG datastructure. - */ -struct dag * -dag_create(void *mem_ctx) -{ - struct dag *dag = rzalloc(mem_ctx, struct dag); - - list_inithead(&dag->heads); - - return dag; -} - -struct dag_validate_state { - struct util_dynarray stack; - struct set *stack_set; - struct set *seen; - void (*cb)(const struct dag_node *node, void *data); - void *data; -}; - -static void -dag_validate_node(struct dag_node *node, - struct dag_validate_state *state) -{ - if (_mesa_set_search(state->stack_set, node)) { - fprintf(stderr, "DAG validation failed at:\n"); - fprintf(stderr, " %p: ", node); - state->cb(node, state->data); - fprintf(stderr, "\n"); - fprintf(stderr, "Nodes in stack:\n"); - util_dynarray_foreach(&state->stack, struct dag_node *, nodep) { - struct dag_node *node = *nodep; - fprintf(stderr, " %p: ", node); - state->cb(node, state->data); - fprintf(stderr, "\n"); - } - abort(); - } - - if (_mesa_set_search(state->seen, node)) - return; - - _mesa_set_add(state->stack_set, node); - _mesa_set_add(state->seen, node); - util_dynarray_append(&state->stack, struct dag_node *, node); - - util_dynarray_foreach(&node->edges, struct dag_edge, edge) { - dag_validate_node(edge->child, state); - } - - (void)util_dynarray_pop(&state->stack, struct dag_node *); - _mesa_set_remove_key(state->stack_set, node); -} - -void -dag_validate(struct dag *dag, void (*cb)(const struct dag_node *node, - void *data), - void *data) -{ - void *mem_ctx = ralloc_context(NULL); - struct dag_validate_state state = { - .stack_set = _mesa_pointer_set_create(mem_ctx), - .seen = _mesa_pointer_set_create(mem_ctx), - .cb = cb, - .data = data, - }; - - util_dynarray_init(&state.stack, mem_ctx); - - list_validate(&dag->heads); - - list_for_each_entry(struct dag_node, node, &dag->heads, link) { - dag_validate_node(node, &state); - } - - ralloc_free(mem_ctx); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/dag.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/dag.h deleted file mode 100644 index 62390c6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/dag.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright © 2019 Broadcom - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef DAG_H -#define DAG_H - -#include -#include "list.h" -#include "u_dynarray.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct dag_edge { - struct dag_node *child; - /* User-defined data associated with the edge. */ - uintptr_t data; -}; - -struct dag_node { - /* Position in the DAG heads list (or a self-link) */ - struct list_head link; - /* Array struct edge to the children. */ - struct util_dynarray edges; - uint32_t parent_count; -}; - -struct dag { - struct list_head heads; -}; - -struct dag *dag_create(void *mem_ctx); -void dag_init_node(struct dag *dag, struct dag_node *node); -void dag_add_edge(struct dag_node *parent, struct dag_node *child, uintptr_t data); -void dag_add_edge_max_data(struct dag_node *parent, struct dag_node *child, uintptr_t data); -void dag_remove_edge(struct dag *dag, struct dag_edge *edge); -void dag_traverse_bottom_up(struct dag *dag, void (*cb)(struct dag_node *node, - void *data), void *data); -void dag_prune_head(struct dag *dag, struct dag_node *node); -void dag_validate(struct dag *dag, void (*cb)(const struct dag_node *node, - void *data), void *data); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect.h deleted file mode 100644 index bc89242..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect.h +++ /dev/null @@ -1,68 +0,0 @@ -/************************************************************************** - * - * Copyright 2022 Yonggang Luo - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Mesa configuration defines. - * - * This header file sets several defines based on the compiler, processor - * architecture, and operating system being used. These defines are comes - * from corresponding headers. - * - * See: - * - http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html - * - echo | gcc -dM -E - | sort - * - http://msdn.microsoft.com/en-us/library/b0084kay.aspx - * - https://sourceforge.net/p/predef/wiki/Home/ - */ - -#ifndef UTIL_DETECT_H_ -#define UTIL_DETECT_H_ - -#include - -/* - * Compiler detection - */ -#include "detect_cc.h" - -/* - * Processor architecture detection - */ -#include "detect_arch.h" - -/* - * Endian detection detection - */ -#include "u_endian.h" - -/* - * Operating system family detection - */ -#include "detect_os.h" - -#endif /* UTIL_DETECT_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_arch.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_arch.h deleted file mode 100644 index f5a208e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_arch.h +++ /dev/null @@ -1,140 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Gallium configuration defines. - * - * This header file sets several defines based on the compiler, processor - * architecture, and operating system being used. These defines should be used - * throughout the code to facilitate porting to new platforms. It is likely that - * this file is auto-generated by an autoconf-like tool at some point, as some - * things cannot be determined by pre-defined environment alone. - * - * See also: - * - http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html - * - echo | gcc -dM -E - | sort - * - http://msdn.microsoft.com/en-us/library/b0084kay.aspx - * - * @author Jos√© Fonseca - */ - -#ifndef UTIL_DETECT_ARCH_H_ -#define UTIL_DETECT_ARCH_H_ - -#include - -#include "detect_cc.h" - -/* - * Processor architecture - */ - -#if defined(__i386__) /* gcc */ || defined(_M_IX86) /* msvc */ || defined(_X86_) || defined(__386__) || defined(i386) || defined(__i386) /* Sun cc */ -#define DETECT_ARCH_X86 1 -#endif - -#if defined(__x86_64__) /* gcc */ || defined(_M_X64) /* msvc */ || defined(_M_AMD64) /* msvc */ || defined(__x86_64) /* Sun cc */ -#define DETECT_ARCH_X86_64 1 -#endif - -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 -#if DETECT_CC_GCC && !defined(__SSE2__) -/* #warning SSE2 support requires -msse -msse2 compiler options */ -#else -#define DETECT_ARCH_SSE 1 -#endif -#endif - -#if defined(__ppc__) || defined(__ppc64__) || defined(__PPC__) || defined(__PPC64__) -#define DETECT_ARCH_PPC 1 -#if defined(__ppc64__) || defined(__PPC64__) -#define DETECT_ARCH_PPC_64 1 -#endif -#endif - -#if defined(__s390x__) -#define DETECT_ARCH_S390 1 -#endif - -#if defined(__arm__) -#define DETECT_ARCH_ARM 1 -#endif - -#if defined(__aarch64__) || defined(_M_ARM64) -#define DETECT_ARCH_AARCH64 1 -#endif - -#if defined(__mips64) && defined(__LP64__) -#define DETECT_ARCH_MIPS64 1 -#endif - -#if defined(__mips__) -#define DETECT_ARCH_MIPS 1 -#endif - -#ifndef DETECT_ARCH_X86 -#define DETECT_ARCH_X86 0 -#endif - -#ifndef DETECT_ARCH_X86_64 -#define DETECT_ARCH_X86_64 0 -#endif - -#ifndef DETECT_ARCH_SSE -#define DETECT_ARCH_SSE 0 -#endif - -#ifndef DETECT_ARCH_PPC -#define DETECT_ARCH_PPC 0 -#endif - -#ifndef DETECT_ARCH_PPC_64 -#define DETECT_ARCH_PPC_64 0 -#endif - -#ifndef DETECT_ARCH_S390 -#define DETECT_ARCH_S390 0 -#endif - -#ifndef DETECT_ARCH_ARM -#define DETECT_ARCH_ARM 0 -#endif - -#ifndef DETECT_ARCH_AARCH64 -#define DETECT_ARCH_AARCH64 0 -#endif - -#ifndef DETECT_ARCH_MIPS64 -#define DETECT_ARCH_MIPS64 0 -#endif - -#ifndef DETECT_ARCH_MIPS -#define DETECT_ARCH_MIPS 0 -#endif - -#endif /* UTIL_DETECT_ARCH_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_cc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_cc.h deleted file mode 100644 index 0cb11d5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_cc.h +++ /dev/null @@ -1,88 +0,0 @@ -/************************************************************************** - * - * Copyright 2022 Yonggang Luo - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Compiler configuration defines. - * - * See: - * - http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html - * - echo | gcc -dM -E - | sort - * - http://msdn.microsoft.com/en-us/library/b0084kay.aspx - * - https://sourceforge.net/p/predef/wiki/Home/ - */ - -#ifndef UTIL_DETECT_CC_H_ -#define UTIL_DETECT_CC_H_ - -/* - * Compiler - */ - -#if defined(__GNUC__) -#define DETECT_CC_GCC 1 -#define DETECT_CC_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) -#endif - -/* - * Meaning of _MSC_VER value: - * - 1800: Visual Studio 2013 - * - 1700: Visual Studio 2012 - * - 1600: Visual Studio 2010 - * - 1500: Visual Studio 2008 - * - 1400: Visual C++ 2005 - * - 1310: Visual C++ .NET 2003 - * - 1300: Visual C++ .NET 2002 - * - * __MSC__ seems to be an old macro -- it is not pre-defined on recent MSVC - * versions. - */ -#if defined(_MSC_VER) || defined(__MSC__) -#define DETECT_CC_MSVC 1 -#endif - -#if defined(__ICL) -#define DETECT_CC_ICL 1 -#endif - -#ifndef DETECT_CC_GCC -#define DETECT_CC_GCC 0 -#endif - -#ifndef DETECT_CC_GCC_VERSION -#define DETECT_CC_GCC_VERSION 0 -#endif - -#ifndef DETECT_CC_MSVC -#define DETECT_CC_MSVC 0 -#endif - -#ifndef DETECT_CC_ICL -#define DETECT_CC_ICL 0 -#endif - -#endif /* UTIL_DETECT_CC_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_os.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_os.h deleted file mode 100644 index 6506948..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/detect_os.h +++ /dev/null @@ -1,131 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* Copyright 2008 VMware, Inc. */ - -/** - * Auto-detect the operating system family. - * - * See also: - * - http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html - * - echo | gcc -dM -E - | sort - * - http://msdn.microsoft.com/en-us/library/b0084kay.aspx - * - * @author José Fonseca - */ - -#ifndef DETECT_OS_H -#define DETECT_OS_H - -#if defined(__linux__) -#define DETECT_OS_LINUX 1 -#define DETECT_OS_UNIX 1 -#endif - -/* - * Android defines __linux__, so DETECT_OS_LINUX and DETECT_OS_UNIX will - * also be defined. - */ -#if defined(ANDROID) -#define DETECT_OS_ANDROID 1 -#endif - -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) -#define DETECT_OS_FREEBSD 1 -#define DETECT_OS_BSD 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(__OpenBSD__) -#define DETECT_OS_OPENBSD 1 -#define DETECT_OS_BSD 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(__NetBSD__) -#define DETECT_OS_NETBSD 1 -#define DETECT_OS_BSD 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(__DragonFly__) -#define DETECT_OS_DRAGONFLY 1 -#define DETECT_OS_BSD 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(__GNU__) -#define DETECT_OS_HURD 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(__sun) -#define DETECT_OS_SOLARIS 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(__APPLE__) -#define DETECT_OS_APPLE 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(_WIN32) || defined(WIN32) -#define DETECT_OS_WINDOWS 1 -#endif - -#if defined(__HAIKU__) -#define DETECT_OS_HAIKU 1 -#define DETECT_OS_UNIX 1 -#endif - -#if defined(__CYGWIN__) -#define DETECT_OS_CYGWIN 1 -#define DETECT_OS_UNIX 1 -#endif - - -/* - * Make sure DETECT_OS_* are always defined, so that they can be used with #if - */ -#ifndef DETECT_OS_ANDROID -#define DETECT_OS_ANDROID 0 -#endif -#ifndef DETECT_OS_APPLE -#define DETECT_OS_APPLE 0 -#endif -#ifndef DETECT_OS_BSD -#define DETECT_OS_BSD 0 -#endif -#ifndef DETECT_OS_CYGWIN -#define DETECT_OS_CYGWIN 0 -#endif -#ifndef DETECT_OS_DRAGONFLY -#define DETECT_OS_DRAGONFLY 0 -#endif -#ifndef DETECT_OS_FREEBSD -#define DETECT_OS_FREEBSD 0 -#endif -#ifndef DETECT_OS_HAIKU -#define DETECT_OS_HAIKU 0 -#endif -#ifndef DETECT_OS_HURD -#define DETECT_OS_HURD 0 -#endif -#ifndef DETECT_OS_LINUX -#define DETECT_OS_LINUX 0 -#endif -#ifndef DETECT_OS_NETBSD -#define DETECT_OS_NETBSD 0 -#endif -#ifndef DETECT_OS_OPENBSD -#define DETECT_OS_OPENBSD 0 -#endif -#ifndef DETECT_OS_SOLARIS -#define DETECT_OS_SOLARIS 0 -#endif -#ifndef DETECT_OS_UNIX -#define DETECT_OS_UNIX 0 -#endif -#ifndef DETECT_OS_WINDOWS -#define DETECT_OS_WINDOWS 0 -#endif - -#endif /* DETECT_OS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache.c deleted file mode 100644 index 33e80e0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache.c +++ /dev/null @@ -1,692 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifdef ENABLE_SHADER_CACHE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "compress.h" -#include "crc32.h" -#include "u_debug.h" -#include "rand_xor.h" -#include "u_atomic.h" -#include "mesa-sha1.h" -#include "./perf/cpu_trace.h" -#include "ralloc.h" -#include "compiler.h" - -#include "disk_cache.h" -#include "disk_cache_os.h" - -/* The cache version should be bumped whenever a change is made to the - * structure of cache entries or the index. This will give any 3rd party - * applications reading the cache entries a chance to adjust to the changes. - * - * - The cache version is checked internally when reading a cache entry. If we - * ever have a mismatch we are in big trouble as this means we had a cache - * collision. In case of such an event please check the skys for giant - * asteroids and that the entire Mesa team hasn't been eaten by wolves. - * - * - There is no strict requirement that cache versions be backwards - * compatible but effort should be taken to limit disruption where possible. - */ -#define CACHE_VERSION 1 - -#define DRV_KEY_CPY(_dst, _src, _src_size) \ -do { \ - memcpy(_dst, _src, _src_size); \ - _dst += _src_size; \ -} while (0); - -static bool -disk_cache_init_queue(struct disk_cache *cache) -{ - if (util_queue_is_initialized(&cache->cache_queue)) - return true; - - /* 4 threads were chosen below because just about all modern CPUs currently - * available that run Mesa have *at least* 4 cores. For these CPUs allowing - * more threads can result in the queue being processed faster, thus - * avoiding excessive memory use due to a backlog of cache entrys building - * up in the queue. Since we set the UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY - * flag this should have little negative impact on low core systems. - * - * The queue will resize automatically when it's full, so adding new jobs - * doesn't stall. - */ - return util_queue_init(&cache->cache_queue, "disk$", 32, 4, - UTIL_QUEUE_INIT_SCALE_THREADS | - UTIL_QUEUE_INIT_RESIZE_IF_FULL | - UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY | - UTIL_QUEUE_INIT_SET_FULL_THREAD_AFFINITY, NULL); -} - -static struct disk_cache * -disk_cache_type_create(const char *gpu_name, - const char *driver_id, - uint64_t driver_flags, - enum disk_cache_type cache_type) -{ - void *local; - struct disk_cache *cache = NULL; - char *max_size_str; - uint64_t max_size; - - uint8_t cache_version = CACHE_VERSION; - size_t cv_size = sizeof(cache_version); - - if (!disk_cache_enabled()) - return NULL; - - /* A ralloc context for transient data during this invocation. */ - local = ralloc_context(NULL); - if (local == NULL) - goto fail; - - cache = rzalloc(NULL, struct disk_cache); - if (cache == NULL) - goto fail; - - /* Assume failure. */ - cache->path_init_failed = true; - cache->type = DISK_CACHE_NONE; - -#ifdef ANDROID - /* Android needs the "disk cache" to be enabled for - * EGL_ANDROID_blob_cache's callbacks to be called, but it doesn't actually - * want any storing to disk to happen inside of the driver. - */ - goto path_fail; -#endif - - char *path = disk_cache_generate_cache_dir(local, gpu_name, driver_id, - cache_type); - if (!path) - goto path_fail; - - cache->path = ralloc_strdup(cache, path); - if (cache->path == NULL) - goto path_fail; - - /* Cache tests that want to have a disabled cache compression are using - * the "make_check_uncompressed" for the driver_id name. Hence here we - * disable disk cache compression when mesa's build tests require it. - */ - if (strcmp(driver_id, "make_check_uncompressed") == 0) - cache->compression_disabled = true; - - if (cache_type == DISK_CACHE_SINGLE_FILE) { - if (!disk_cache_load_cache_index_foz(local, cache)) - goto path_fail; - } else if (cache_type == DISK_CACHE_DATABASE) { - if (!disk_cache_db_load_cache_index(local, cache)) - goto path_fail; - } - - cache->type = cache_type; - - cache->stats.enabled = debug_get_bool_option("MESA_SHADER_CACHE_SHOW_STATS", - false); - - if (!disk_cache_mmap_cache_index(local, cache, path)) - goto path_fail; - - max_size = 0; - - max_size_str = getenv("MESA_SHADER_CACHE_MAX_SIZE"); - - if (!max_size_str) { - max_size_str = getenv("MESA_GLSL_CACHE_MAX_SIZE"); - if (max_size_str) - fprintf(stderr, - "*** MESA_GLSL_CACHE_MAX_SIZE is deprecated; " - "use MESA_SHADER_CACHE_MAX_SIZE instead ***\n"); - } - - #ifdef MESA_SHADER_CACHE_MAX_SIZE - if( !max_size_str ) { - max_size_str = MESA_SHADER_CACHE_MAX_SIZE; - } - #endif - - if (max_size_str) { - char *end; - max_size = strtoul(max_size_str, &end, 10); - if (end == max_size_str) { - max_size = 0; - } else { - switch (*end) { - case 'K': - case 'k': - max_size *= 1024; - break; - case 'M': - case 'm': - max_size *= 1024*1024; - break; - case '\0': - case 'G': - case 'g': - default: - max_size *= 1024*1024*1024; - break; - } - } - } - - /* Default to 1GB for maximum cache size. */ - if (max_size == 0) { - max_size = 1024*1024*1024; - } - - cache->max_size = max_size; - - if (cache->type == DISK_CACHE_DATABASE) - mesa_cache_db_multipart_set_size_limit(&cache->cache_db, cache->max_size); - - if (!disk_cache_init_queue(cache)) - goto fail; - - cache->path_init_failed = false; - - path_fail: - - cache->driver_keys_blob_size = cv_size; - - /* Create driver id keys */ - size_t id_size = strlen(driver_id) + 1; - size_t gpu_name_size = strlen(gpu_name) + 1; - cache->driver_keys_blob_size += id_size; - cache->driver_keys_blob_size += gpu_name_size; - - /* We sometimes store entire structs that contains a pointers in the cache, - * use pointer size as a key to avoid hard to debug issues. - */ - uint8_t ptr_size = sizeof(void *); - size_t ptr_size_size = sizeof(ptr_size); - cache->driver_keys_blob_size += ptr_size_size; - - size_t driver_flags_size = sizeof(driver_flags); - cache->driver_keys_blob_size += driver_flags_size; - - cache->driver_keys_blob = - ralloc_size(cache, cache->driver_keys_blob_size); - if (!cache->driver_keys_blob) - goto fail; - - uint8_t *drv_key_blob = cache->driver_keys_blob; - DRV_KEY_CPY(drv_key_blob, &cache_version, cv_size) - DRV_KEY_CPY(drv_key_blob, driver_id, id_size) - DRV_KEY_CPY(drv_key_blob, gpu_name, gpu_name_size) - DRV_KEY_CPY(drv_key_blob, &ptr_size, ptr_size_size) - DRV_KEY_CPY(drv_key_blob, &driver_flags, driver_flags_size) - - /* Seed our rand function */ - s_rand_xorshift128plus(cache->seed_xorshift128plus, true); - - ralloc_free(local); - - return cache; - - fail: - if (cache) - ralloc_free(cache); - ralloc_free(local); - - return NULL; -} - -struct disk_cache * -disk_cache_create(const char *gpu_name, const char *driver_id, - uint64_t driver_flags) -{ - enum disk_cache_type cache_type; - struct disk_cache *cache; - - if (debug_get_bool_option("MESA_DISK_CACHE_SINGLE_FILE", false)) - cache_type = DISK_CACHE_SINGLE_FILE; - else if (debug_get_bool_option("MESA_DISK_CACHE_DATABASE", false)) - cache_type = DISK_CACHE_DATABASE; - else - cache_type = DISK_CACHE_MULTI_FILE; - - /* Create main writable cache. */ - cache = disk_cache_type_create(gpu_name, driver_id, driver_flags, - cache_type); - if (!cache) - return NULL; - - /* If MESA_DISK_CACHE_SINGLE_FILE is unset and MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ - * is set, then enable additional Fossilize RO caches together with the RW - * cache. At first we will check cache entry presence in the RO caches and - * if entry isn't found there, then we'll fall back to the RW cache. - */ - if (cache_type != DISK_CACHE_SINGLE_FILE && !cache->path_init_failed && - debug_get_bool_option("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", false)) { - - /* Create read-only cache used for sharing prebuilt shaders. - * If cache entry will be found in this cache, then the main cache - * will be bypassed. - */ - cache->foz_ro_cache = disk_cache_type_create(gpu_name, driver_id, - driver_flags, - DISK_CACHE_SINGLE_FILE); - } - - return cache; -} - -void -disk_cache_destroy(struct disk_cache *cache) -{ - if (unlikely(cache && cache->stats.enabled)) { - printf("disk shader cache: hits = %u, misses = %u\n", - cache->stats.hits, - cache->stats.misses); - } - - if (cache && util_queue_is_initialized(&cache->cache_queue)) { - util_queue_finish(&cache->cache_queue); - util_queue_destroy(&cache->cache_queue); - - if (cache->foz_ro_cache) - disk_cache_destroy(cache->foz_ro_cache); - - if (cache->type == DISK_CACHE_SINGLE_FILE) - foz_destroy(&cache->foz_db); - - if (cache->type == DISK_CACHE_DATABASE) - mesa_cache_db_multipart_close(&cache->cache_db); - - disk_cache_destroy_mmap(cache); - } - - ralloc_free(cache); -} - -void -disk_cache_wait_for_idle(struct disk_cache *cache) -{ - util_queue_finish(&cache->cache_queue); -} - -void -disk_cache_remove(struct disk_cache *cache, const cache_key key) -{ - if (cache->type == DISK_CACHE_DATABASE) { - mesa_cache_db_multipart_entry_remove(&cache->cache_db, key); - return; - } - - char *filename = disk_cache_get_cache_filename(cache, key); - if (filename == NULL) { - return; - } - - disk_cache_evict_item(cache, filename); -} - -static struct disk_cache_put_job * -create_put_job(struct disk_cache *cache, const cache_key key, - void *data, size_t size, - struct cache_item_metadata *cache_item_metadata, - bool take_ownership) -{ - struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *) - malloc(sizeof(struct disk_cache_put_job) + (take_ownership ? 0 : size)); - - if (dc_job) { - dc_job->cache = cache; - memcpy(dc_job->key, key, sizeof(cache_key)); - if (take_ownership) { - dc_job->data = data; - } else { - dc_job->data = dc_job + 1; - memcpy(dc_job->data, data, size); - } - dc_job->size = size; - - /* Copy the cache item metadata */ - if (cache_item_metadata) { - dc_job->cache_item_metadata.type = cache_item_metadata->type; - if (cache_item_metadata->type == CACHE_ITEM_TYPE_GLSL) { - dc_job->cache_item_metadata.num_keys = - cache_item_metadata->num_keys; - dc_job->cache_item_metadata.keys = (cache_key *) - malloc(cache_item_metadata->num_keys * sizeof(cache_key)); - - if (!dc_job->cache_item_metadata.keys) - goto fail; - - memcpy(dc_job->cache_item_metadata.keys, - cache_item_metadata->keys, - sizeof(cache_key) * cache_item_metadata->num_keys); - } - } else { - dc_job->cache_item_metadata.type = CACHE_ITEM_TYPE_UNKNOWN; - dc_job->cache_item_metadata.keys = NULL; - } - } - - return dc_job; - -fail: - free(dc_job); - - return NULL; -} - -static void -destroy_put_job(void *job, void *gdata, int thread_index) -{ - if (job) { - struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *) job; - free(dc_job->cache_item_metadata.keys); - free(job); - } -} - -static void -destroy_put_job_nocopy(void *job, void *gdata, int thread_index) -{ - struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *) job; - free(dc_job->data); - destroy_put_job(job, gdata, thread_index); -} - -static void -blob_put_compressed(struct disk_cache *cache, const cache_key key, - const void *data, size_t size); - -static void -cache_put(void *job, void *gdata, int thread_index) -{ - assert(job); - - unsigned i = 0; - char *filename = NULL; - struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *) job; - - if (dc_job->cache->blob_put_cb) { - blob_put_compressed(dc_job->cache, dc_job->key, dc_job->data, dc_job->size); - } else if (dc_job->cache->type == DISK_CACHE_SINGLE_FILE) { - disk_cache_write_item_to_disk_foz(dc_job); - } else if (dc_job->cache->type == DISK_CACHE_DATABASE) { - disk_cache_db_write_item_to_disk(dc_job); - } else { - filename = disk_cache_get_cache_filename(dc_job->cache, dc_job->key); - if (filename == NULL) - goto done; - - /* If the cache is too large, evict something else first. */ - while (*dc_job->cache->size + dc_job->size > dc_job->cache->max_size && - i < 8) { - disk_cache_evict_lru_item(dc_job->cache); - i++; - } - - disk_cache_write_item_to_disk(dc_job, filename); - -done: - free(filename); - } -} - -struct blob_cache_entry { - uint32_t uncompressed_size; - uint8_t compressed_data[]; -}; - -static void -blob_put_compressed(struct disk_cache *cache, const cache_key key, - const void *data, size_t size) -{ - MESA_TRACE_FUNC(); - - size_t max_buf = util_compress_max_compressed_len(size); - struct blob_cache_entry *entry = malloc(max_buf + sizeof(*entry)); - if (!entry) - goto out; - - entry->uncompressed_size = size; - - MESA_TRACE_BEGIN("deflate"); - size_t compressed_size = - util_compress_deflate(data, size, entry->compressed_data, max_buf); - MESA_TRACE_END(); - if (!compressed_size) - goto out; - - unsigned entry_size = compressed_size + sizeof(*entry); - MESA_TRACE_BEGIN("blob_put"); - cache->blob_put_cb(key, CACHE_KEY_SIZE, entry, entry_size); - MESA_TRACE_END(); - -out: - free(entry); -} - -static void * -blob_get_compressed(struct disk_cache *cache, const cache_key key, - size_t *size) -{ - MESA_TRACE_FUNC(); - - /* This is what Android EGL defines as the maxValueSize in egl_cache_t - * class implementation. - */ - const signed long max_blob_size = 64 * 1024; - struct blob_cache_entry *entry = malloc(max_blob_size); - if (!entry) - return NULL; - - MESA_TRACE_BEGIN("blob_get"); - signed long entry_size = - cache->blob_get_cb(key, CACHE_KEY_SIZE, entry, max_blob_size); - MESA_TRACE_END(); - - if (!entry_size) { - free(entry); - return NULL; - } - - void *data = malloc(entry->uncompressed_size); - if (!data) { - free(entry); - return NULL; - } - - unsigned compressed_size = entry_size - sizeof(*entry); - MESA_TRACE_BEGIN("inflate"); - bool ret = util_compress_inflate(entry->compressed_data, compressed_size, - data, entry->uncompressed_size); - MESA_TRACE_END(); - if (!ret) { - free(data); - free(entry); - return NULL; - } - - if (size) - *size = entry->uncompressed_size; - - free(entry); - - return data; -} - -void -disk_cache_put(struct disk_cache *cache, const cache_key key, - const void *data, size_t size, - struct cache_item_metadata *cache_item_metadata) -{ - if (!util_queue_is_initialized(&cache->cache_queue)) - return; - - struct disk_cache_put_job *dc_job = - create_put_job(cache, key, (void*)data, size, cache_item_metadata, false); - - if (dc_job) { - util_queue_fence_init(&dc_job->fence); - util_queue_add_job(&cache->cache_queue, dc_job, &dc_job->fence, - cache_put, destroy_put_job, dc_job->size); - } -} - -void -disk_cache_put_nocopy(struct disk_cache *cache, const cache_key key, - void *data, size_t size, - struct cache_item_metadata *cache_item_metadata) -{ - if (!util_queue_is_initialized(&cache->cache_queue)) { - free(data); - return; - } - - struct disk_cache_put_job *dc_job = - create_put_job(cache, key, data, size, cache_item_metadata, true); - - if (dc_job) { - util_queue_fence_init(&dc_job->fence); - util_queue_add_job(&cache->cache_queue, dc_job, &dc_job->fence, - cache_put, destroy_put_job_nocopy, dc_job->size); - } -} - -void * -disk_cache_get(struct disk_cache *cache, const cache_key key, size_t *size) -{ - void *buf = NULL; - - if (size) - *size = 0; - - if (cache->foz_ro_cache) - buf = disk_cache_load_item_foz(cache->foz_ro_cache, key, size); - - if (!buf) { - if (cache->blob_get_cb) { - buf = blob_get_compressed(cache, key, size); - } else if (cache->type == DISK_CACHE_SINGLE_FILE) { - buf = disk_cache_load_item_foz(cache, key, size); - } else if (cache->type == DISK_CACHE_DATABASE) { - buf = disk_cache_db_load_item(cache, key, size); - } else { - char *filename = disk_cache_get_cache_filename(cache, key); - if (filename) - buf = disk_cache_load_item(cache, filename, size); - } - } - - if (unlikely(cache->stats.enabled)) { - if (buf) - p_atomic_inc(&cache->stats.hits); - else - p_atomic_inc(&cache->stats.misses); - } - - return buf; -} - -void -disk_cache_put_key(struct disk_cache *cache, const cache_key key) -{ - const uint32_t *key_chunk = (const uint32_t *) key; - int i = CPU_TO_LE32(*key_chunk) & CACHE_INDEX_KEY_MASK; - unsigned char *entry; - - if (cache->blob_put_cb) { - cache->blob_put_cb(key, CACHE_KEY_SIZE, key_chunk, sizeof(uint32_t)); - return; - } - - if (cache->path_init_failed) - return; - - entry = &cache->stored_keys[i * CACHE_KEY_SIZE]; - - memcpy(entry, key, CACHE_KEY_SIZE); -} - -/* This function lets us test whether a given key was previously - * stored in the cache with disk_cache_put_key(). The implement is - * efficient by not using syscalls or hitting the disk. It's not - * race-free, but the races are benign. If we race with someone else - * calling disk_cache_put_key, then that's just an extra cache miss and an - * extra recompile. - */ -bool -disk_cache_has_key(struct disk_cache *cache, const cache_key key) -{ - const uint32_t *key_chunk = (const uint32_t *) key; - int i = CPU_TO_LE32(*key_chunk) & CACHE_INDEX_KEY_MASK; - unsigned char *entry; - - if (cache->blob_get_cb) { - uint32_t blob; - return cache->blob_get_cb(key, CACHE_KEY_SIZE, &blob, sizeof(uint32_t)); - } - - if (cache->path_init_failed) - return false; - - entry = &cache->stored_keys[i * CACHE_KEY_SIZE]; - - return memcmp(entry, key, CACHE_KEY_SIZE) == 0; -} - -void -disk_cache_compute_key(struct disk_cache *cache, const void *data, size_t size, - cache_key key) -{ - struct mesa_sha1 ctx; - - _mesa_sha1_init(&ctx); - _mesa_sha1_update(&ctx, cache->driver_keys_blob, - cache->driver_keys_blob_size); - _mesa_sha1_update(&ctx, data, size); - _mesa_sha1_final(&ctx, key); -} - -void -disk_cache_set_callbacks(struct disk_cache *cache, disk_cache_put_cb put, - disk_cache_get_cb get) -{ - cache->blob_put_cb = put; - cache->blob_get_cb = get; - disk_cache_init_queue(cache); -} - -#endif /* ENABLE_SHADER_CACHE */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache.h deleted file mode 100644 index 26bf4cc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache.h +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef DISK_CACHE_H -#define DISK_CACHE_H - -#ifdef HAVE_DLFCN_H -#include -#include -#include "build_id.h" -#endif -#include -#include -#include -#include -#include "mesa-sha1.h" -#include "detect_os.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Size of cache keys in bytes. */ -#define CACHE_KEY_SIZE 20 - -#define CACHE_DIR_NAME "mesa_shader_cache" -#define CACHE_DIR_NAME_SF "mesa_shader_cache_sf" -#define CACHE_DIR_NAME_DB "mesa_shader_cache_db" - -typedef uint8_t cache_key[CACHE_KEY_SIZE]; - -/* WARNING: 3rd party applications might be reading the cache item metadata. - * Do not change these values without making the change widely known. - * Please contact Valve developers and make them aware of this change. - */ -#define CACHE_ITEM_TYPE_UNKNOWN 0x0 -#define CACHE_ITEM_TYPE_GLSL 0x1 - -typedef void -(*disk_cache_put_cb) (const void *key, signed long keySize, - const void *value, signed long valueSize); - -typedef signed long -(*disk_cache_get_cb) (const void *key, signed long keySize, - void *value, signed long valueSize); - -struct cache_item_metadata { - /** - * The cache item type. This could be used to identify a GLSL cache item, - * a certain type of IR (tgsi, nir, etc), or signal that it is the final - * binary form of the shader. - */ - uint32_t type; - - /** GLSL cache item metadata */ - cache_key *keys; /* sha1 list of shaders that make up the cache item */ - uint32_t num_keys; -}; - -struct disk_cache; - -static inline char * -disk_cache_format_hex_id(char *buf, const uint8_t *hex_id, unsigned size) -{ - static const char hex_digits[] = "0123456789abcdef"; - unsigned i; - - for (i = 0; i < size; i += 2) { - buf[i] = hex_digits[hex_id[i >> 1] >> 4]; - buf[i + 1] = hex_digits[hex_id[i >> 1] & 0x0f]; - } - buf[i] = '\0'; - - return buf; -} - -#ifdef HAVE_DLADDR -static inline bool -disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp) -{ - Dl_info info; - struct stat st; - if (!dladdr(ptr, &info) || !info.dli_fname) { - return false; - } - if (stat(info.dli_fname, &st)) { - return false; - } - - if (!st.st_mtime) { - fprintf(stderr, "Mesa: The provided filesystem timestamp for the cache " - "is bogus! Disabling On-disk cache.\n"); - return false; - } - - *timestamp = st.st_mtime; - - return true; -} - -static inline bool -disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx) -{ - uint32_t timestamp; - -#ifdef HAVE_DL_ITERATE_PHDR - const struct build_id_note *note = NULL; - if ((note = build_id_find_nhdr_for_addr(ptr))) { - _mesa_sha1_update(ctx, build_id_data(note), build_id_length(note)); - } else -#endif - if (disk_cache_get_function_timestamp(ptr, ×tamp)) { - _mesa_sha1_update(ctx, ×tamp, sizeof(timestamp)); - } else - return false; - return true; -} -#elif DETECT_OS_WINDOWS -bool -disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx); -#else -static inline bool -disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx) -{ - return false; -} -#endif - -/* Provide inlined stub functions if the shader cache is disabled. */ - -#ifdef ENABLE_SHADER_CACHE - -/** - * Create a new cache object. - * - * This function creates the handle necessary for all subsequent cache_* - * functions. - * - * This cache provides two distinct operations: - * - * o Storage and retrieval of arbitrary objects by cryptographic - * name (or "key"). This is provided via disk_cache_put() and - * disk_cache_get(). - * - * o The ability to store a key alone and check later whether the - * key was previously stored. This is provided via disk_cache_put_key() - * and disk_cache_has_key(). - * - * The put_key()/has_key() operations are conceptually identical to - * put()/get() with no data, but are provided separately to allow for - * a more efficient implementation. - * - * In all cases, the keys are sequences of 20 bytes. It is anticipated - * that callers will compute appropriate SHA-1 signatures for keys, - * (though nothing in this implementation directly relies on how the - * names are computed). See mesa-sha1.h and _mesa_sha1_compute for - * assistance in computing SHA-1 signatures. - */ -struct disk_cache * -disk_cache_create(const char *gpu_name, const char *timestamp, - uint64_t driver_flags); - -/** - * Destroy a cache object, (freeing all associated resources). - */ -void -disk_cache_destroy(struct disk_cache *cache); - -/* Wait for all previous disk_cache_put() calls to be processed (used for unit - * testing). - */ -void -disk_cache_wait_for_idle(struct disk_cache *cache); - -/** - * Remove the item in the cache under the name \key. - */ -void -disk_cache_remove(struct disk_cache *cache, const cache_key key); - -/** - * Store an item in the cache under the name \key. - * - * The item can be retrieved later with disk_cache_get(), (unless the item has - * been evicted in the interim). - * - * Any call to disk_cache_put() may cause an existing, random item to be - * evicted from the cache. - */ -void -disk_cache_put(struct disk_cache *cache, const cache_key key, - const void *data, size_t size, - struct cache_item_metadata *cache_item_metadata); - -/** - * Store an item in the cache under the name \key without copying the data param. - * - * The item can be retrieved later with disk_cache_get(), (unless the item has - * been evicted in the interim). - * - * Any call to disk_cache_put() may cause an existing, random item to be - * evicted from the cache. - * - * @p data will be freed - */ -void -disk_cache_put_nocopy(struct disk_cache *cache, const cache_key key, - void *data, size_t size, - struct cache_item_metadata *cache_item_metadata); - -/** - * Retrieve an item previously stored in the cache with the name . - * - * The item must have been previously stored with a call to disk_cache_put(). - * - * If \size is non-NULL, then, on successful return, it will be set to the - * size of the object. - * - * \return A pointer to the stored object if found. NULL if the object - * is not found, or if any error occurs, (memory allocation failure, - * filesystem error, etc.). The returned data is malloc'ed so the - * caller should call free() it when finished. - */ -void * -disk_cache_get(struct disk_cache *cache, const cache_key key, size_t *size); - -/** - * Store the name \key within the cache, (without any associated data). - * - * Later this key can be checked with disk_cache_has_key(), (unless the key - * has been evicted in the interim). - * - * Any call to disk_cache_put_key() may cause an existing, random key to be - * evicted from the cache. - */ -void -disk_cache_put_key(struct disk_cache *cache, const cache_key key); - -/** - * Test whether the name \key was previously recorded in the cache. - * - * Return value: True if disk_cache_put_key() was previously called with - * \key, (and the key was not evicted in the interim). - * - * Note: disk_cache_has_key() will only return true for keys passed to - * disk_cache_put_key(). Specifically, a call to disk_cache_put() will not cause - * disk_cache_has_key() to return true for the same key. - */ -bool -disk_cache_has_key(struct disk_cache *cache, const cache_key key); - -/** - * Compute the name \key from \data of given \size. - */ -void -disk_cache_compute_key(struct disk_cache *cache, const void *data, size_t size, - cache_key key); - -void -disk_cache_set_callbacks(struct disk_cache *cache, disk_cache_put_cb put, - disk_cache_get_cb get); - -#else - -static inline struct disk_cache * -disk_cache_create(const char *gpu_name, const char *timestamp, - uint64_t driver_flags) -{ - return NULL; -} - -static inline void -disk_cache_destroy(struct disk_cache *cache) -{ -} - -static inline void -disk_cache_put(struct disk_cache *cache, const cache_key key, - const void *data, size_t size, - struct cache_item_metadata *cache_item_metadata) -{ -} - -static inline void -disk_cache_put_nocopy(struct disk_cache *cache, const cache_key key, - void *data, size_t size, - struct cache_item_metadata *cache_item_metadata) -{ -} - -static inline void -disk_cache_remove(struct disk_cache *cache, const cache_key key) -{ -} - -static inline uint8_t * -disk_cache_get(struct disk_cache *cache, const cache_key key, size_t *size) -{ - return NULL; -} - -static inline void -disk_cache_put_key(struct disk_cache *cache, const cache_key key) -{ -} - -static inline bool -disk_cache_has_key(struct disk_cache *cache, const cache_key key) -{ - return false; -} - -static inline void -disk_cache_compute_key(struct disk_cache *cache, const void *data, size_t size, - cache_key key) -{ -} - -static inline void -disk_cache_set_callbacks(struct disk_cache *cache, disk_cache_put_cb put, - disk_cache_get_cb get) -{ -} - -#endif /* ENABLE_SHADER_CACHE */ - -#ifdef __cplusplus -} -#endif - -#endif /* CACHE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache_os.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache_os.c deleted file mode 100644 index 56b3e6b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache_os.c +++ /dev/null @@ -1,1117 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "compress.h" -#include "crc32.h" -#include "disk_cache.h" -#include "disk_cache_os.h" - -#if DETECT_OS_WINDOWS - -#include - -bool -disk_cache_get_function_identifier(void *ptr, struct mesa_sha1 *ctx) -{ - HMODULE mod = NULL; - GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - (LPCWSTR)ptr, - &mod); - if (!mod) - return false; - - WCHAR filename[MAX_PATH]; - DWORD filename_length = GetModuleFileNameW(mod, filename, ARRAY_SIZE(filename)); - - if (filename_length == 0 || filename_length == ARRAY_SIZE(filename)) - return false; - - HANDLE mod_as_file = CreateFileW( - filename, - GENERIC_READ, - FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (mod_as_file == INVALID_HANDLE_VALUE) - return false; - - FILETIME time; - bool ret = GetFileTime(mod_as_file, NULL, NULL, &time); - if (ret) - _mesa_sha1_update(ctx, &time, sizeof(time)); - CloseHandle(mod_as_file); - return ret; -} - -#endif - -#ifdef ENABLE_SHADER_CACHE - -#if DETECT_OS_WINDOWS -/* TODO: implement disk cache support on windows */ - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "blob.h" -#include "crc32.h" -#include "u_debug.h" -#include "ralloc.h" -#include "rand_xor.h" - -/* Create a directory named 'path' if it does not already exist. - * - * Returns: 0 if path already exists as a directory or if created. - * -1 in all other cases. - */ -static int -mkdir_if_needed(const char *path) -{ - struct stat sb; - - /* If the path exists already, then our work is done if it's a - * directory, but it's an error if it is not. - */ - if (stat(path, &sb) == 0) { - if (S_ISDIR(sb.st_mode)) { - return 0; - } else { - fprintf(stderr, "Cannot use %s for shader cache (not a directory)" - "---disabling.\n", path); - return -1; - } - } - - int ret = mkdir(path, 0700); - if (ret == 0 || (ret == -1 && errno == EEXIST)) - return 0; - - fprintf(stderr, "Failed to create %s for shader cache (%s)---disabling.\n", - path, strerror(errno)); - - return -1; -} - -/* Concatenate an existing path and a new name to form a new path. If the new - * path does not exist as a directory, create it then return the resulting - * name of the new path (ralloc'ed off of 'ctx'). - * - * Returns NULL on any error, such as: - * - * does not exist or is not a directory - * / exists but is not a directory - * / cannot be created as a directory - */ -static char * -concatenate_and_mkdir(void *ctx, const char *path, const char *name) -{ - char *new_path; - struct stat sb; - - if (stat(path, &sb) != 0 || ! S_ISDIR(sb.st_mode)) - return NULL; - - new_path = ralloc_asprintf(ctx, "%s/%s", path, name); - - if (mkdir_if_needed(new_path) == 0) - return new_path; - else - return NULL; -} - -struct lru_file { - struct list_head node; - char *lru_name; - size_t lru_file_size; - time_t lru_atime; -}; - -static void -free_lru_file_list(struct list_head *lru_file_list) -{ - struct lru_file *e, *next; - LIST_FOR_EACH_ENTRY_SAFE(e, next, lru_file_list, node) { - free(e->lru_name); - free(e); - } - free(lru_file_list); -} - -/* Given a directory path and predicate function, create a linked list of entrys - * with the oldest access time in that directory for which the predicate - * returns true. - * - * Returns: A malloc'ed linkd list for the paths of chosen files, (or - * NULL on any error). The caller should free the linked list via - * free_lru_file_list() when finished. - */ -static struct list_head * -choose_lru_file_matching(const char *dir_path, - bool (*predicate)(const char *dir_path, - const struct stat *, - const char *, const size_t)) -{ - DIR *dir; - struct dirent *dir_ent; - - dir = opendir(dir_path); - if (dir == NULL) - return NULL; - - const int dir_fd = dirfd(dir); - - /* First count the number of files in the directory */ - unsigned total_file_count = 0; - while ((dir_ent = readdir(dir)) != NULL) { -#ifdef HAVE_DIRENT_D_TYPE - if (dir_ent->d_type == DT_REG) { /* If the entry is a regular file */ - total_file_count++; - } -#else - struct stat st; - - if (fstatat(dir_fd, dir_ent->d_name, &st, AT_SYMLINK_NOFOLLOW) == 0) { - if (S_ISREG(st.st_mode)) { - total_file_count++; - } - } -#endif - } - - /* Reset to the start of the directory */ - rewinddir(dir); - - /* Collect 10% of files in this directory for removal. Note: This should work - * out to only be around 0.04% of total cache items. - */ - unsigned lru_file_count = total_file_count > 10 ? total_file_count / 10 : 1; - struct list_head *lru_file_list = malloc(sizeof(struct list_head)); - list_inithead(lru_file_list); - - unsigned processed_files = 0; - while (1) { - dir_ent = readdir(dir); - if (dir_ent == NULL) - break; - - struct stat sb; - if (fstatat(dir_fd, dir_ent->d_name, &sb, 0) == 0) { - struct lru_file *entry = NULL; - if (!list_is_empty(lru_file_list)) - entry = list_first_entry(lru_file_list, struct lru_file, node); - - if (!entry|| sb.st_atime < entry->lru_atime) { - size_t len = strlen(dir_ent->d_name); - if (!predicate(dir_path, &sb, dir_ent->d_name, len)) - continue; - - bool new_entry = false; - if (processed_files < lru_file_count) { - entry = calloc(1, sizeof(struct lru_file)); - new_entry = true; - } - processed_files++; - - char *tmp = realloc(entry->lru_name, len + 1); - if (tmp) { - /* Find location to insert new lru item. We want to keep the - * list ordering from most recently used to least recently used. - * This allows us to just evict the head item from the list as - * we process the directory and find older entrys. - */ - struct list_head *list_node = lru_file_list; - struct lru_file *e; - LIST_FOR_EACH_ENTRY(e, lru_file_list, node) { - if (sb.st_atime < entry->lru_atime) { - list_node = &e->node; - break; - } - } - - if (new_entry) { - list_addtail(&entry->node, list_node); - } else { - if (list_node != lru_file_list) { - list_del(lru_file_list); - list_addtail(lru_file_list, list_node); - } - } - - entry->lru_name = tmp; - memcpy(entry->lru_name, dir_ent->d_name, len + 1); - entry->lru_atime = sb.st_atime; - entry->lru_file_size = sb.st_blocks * 512; - } - } - } - } - - if (list_is_empty(lru_file_list)) { - closedir(dir); - free(lru_file_list); - return NULL; - } - - /* Create the full path for the file list we found */ - struct lru_file *e; - LIST_FOR_EACH_ENTRY(e, lru_file_list, node) { - char *filename = e->lru_name; - if (asprintf(&e->lru_name, "%s/%s", dir_path, filename) < 0) - e->lru_name = NULL; - - free(filename); - } - - closedir(dir); - - return lru_file_list; -} - -/* Is entry a regular file, and not having a name with a trailing - * ".tmp" - */ -static bool -is_regular_non_tmp_file(const char *path, const struct stat *sb, - const char *d_name, const size_t len) -{ - if (!S_ISREG(sb->st_mode)) - return false; - - if (len >= 4 && strcmp(&d_name[len-4], ".tmp") == 0) - return false; - - return true; -} - -/* Returns the size of the deleted file, (or 0 on any error). */ -static size_t -unlink_lru_file_from_directory(const char *path) -{ - struct list_head *lru_file_list = - choose_lru_file_matching(path, is_regular_non_tmp_file); - if (lru_file_list == NULL) - return 0; - - assert(!list_is_empty(lru_file_list)); - - size_t total_unlinked_size = 0; - struct lru_file *e; - LIST_FOR_EACH_ENTRY(e, lru_file_list, node) { - if (unlink(e->lru_name) == 0) - total_unlinked_size += e->lru_file_size; - } - free_lru_file_list(lru_file_list); - - return total_unlinked_size; -} - -/* Is entry a directory with a two-character name, (and not the - * special name of ".."). We also return false if the dir is empty. - */ -static bool -is_two_character_sub_directory(const char *path, const struct stat *sb, - const char *d_name, const size_t len) -{ - if (!S_ISDIR(sb->st_mode)) - return false; - - if (len != 2) - return false; - - if (strcmp(d_name, "..") == 0) - return false; - - char *subdir; - if (asprintf(&subdir, "%s/%s", path, d_name) == -1) - return false; - DIR *dir = opendir(subdir); - free(subdir); - - if (dir == NULL) - return false; - - unsigned subdir_entries = 0; - struct dirent *d; - while ((d = readdir(dir)) != NULL) { - if(++subdir_entries > 2) - break; - } - closedir(dir); - - /* If dir only contains '.' and '..' it must be empty */ - if (subdir_entries <= 2) - return false; - - return true; -} - -/* Create the directory that will be needed for the cache file for \key. - * - * Obviously, the implementation here must closely match - * _get_cache_file above. -*/ -static void -make_cache_file_directory(struct disk_cache *cache, const cache_key key) -{ - char *dir; - char buf[41]; - - _mesa_sha1_format(buf, key); - if (asprintf(&dir, "%s/%c%c", cache->path, buf[0], buf[1]) == -1) - return; - - mkdir_if_needed(dir); - free(dir); -} - -static ssize_t -read_all(int fd, void *buf, size_t count) -{ - char *in = buf; - ssize_t read_ret; - size_t done; - - for (done = 0; done < count; done += read_ret) { - read_ret = read(fd, in + done, count - done); - if (read_ret == -1 || read_ret == 0) - return -1; - } - return done; -} - -static ssize_t -write_all(int fd, const void *buf, size_t count) -{ - const char *out = buf; - ssize_t written; - size_t done; - - for (done = 0; done < count; done += written) { - written = write(fd, out + done, count - done); - if (written == -1) - return -1; - } - return done; -} - -/* Evict least recently used cache item */ -void -disk_cache_evict_lru_item(struct disk_cache *cache) -{ - char *dir_path; - - /* With a reasonably-sized, full cache, (and with keys generated - * from a cryptographic hash), we can choose two random hex digits - * and reasonably expect the directory to exist with a file in it. - * Provides pseudo-LRU eviction to reduce checking all cache files. - */ - uint64_t rand64 = rand_xorshift128plus(cache->seed_xorshift128plus); - if (asprintf(&dir_path, "%s/%02" PRIx64 , cache->path, rand64 & 0xff) < 0) - return; - - size_t size = unlink_lru_file_from_directory(dir_path); - - free(dir_path); - - if (size) { - p_atomic_add(cache->size, - (uint64_t)size); - return; - } - - /* In the case where the random choice of directory didn't find - * something, we choose the least recently accessed from the - * existing directories. - * - * Really, the only reason this code exists is to allow the unit - * tests to work, (which use an artificially-small cache to be able - * to force a single cached item to be evicted). - */ - struct list_head *lru_file_list = - choose_lru_file_matching(cache->path, is_two_character_sub_directory); - if (lru_file_list == NULL) - return; - - assert(!list_is_empty(lru_file_list)); - - struct lru_file *lru_file_dir = - list_first_entry(lru_file_list, struct lru_file, node); - - size = unlink_lru_file_from_directory(lru_file_dir->lru_name); - - free_lru_file_list(lru_file_list); - - if (size) - p_atomic_add(cache->size, - (uint64_t)size); -} - -void -disk_cache_evict_item(struct disk_cache *cache, char *filename) -{ - struct stat sb; - if (stat(filename, &sb) == -1) { - free(filename); - return; - } - - unlink(filename); - free(filename); - - if (sb.st_blocks) - p_atomic_add(cache->size, - (uint64_t)sb.st_blocks * 512); -} - -static void * -parse_and_validate_cache_item(struct disk_cache *cache, void *cache_item, - size_t cache_item_size, size_t *size) -{ - uint8_t *uncompressed_data = NULL; - - struct blob_reader ci_blob_reader; - blob_reader_init(&ci_blob_reader, cache_item, cache_item_size); - - size_t header_size = cache->driver_keys_blob_size; - const void *keys_blob = blob_read_bytes(&ci_blob_reader, header_size); - if (ci_blob_reader.overrun) - goto fail; - - /* Check for extremely unlikely hash collisions */ - if (memcmp(cache->driver_keys_blob, keys_blob, header_size) != 0) { - assert(!"Mesa cache keys mismatch!"); - goto fail; - } - - uint32_t md_type = blob_read_uint32(&ci_blob_reader); - if (ci_blob_reader.overrun) - goto fail; - - if (md_type == CACHE_ITEM_TYPE_GLSL) { - uint32_t num_keys = blob_read_uint32(&ci_blob_reader); - if (ci_blob_reader.overrun) - goto fail; - - /* The cache item metadata is currently just used for distributing - * precompiled shaders, they are not used by Mesa so just skip them for - * now. - * TODO: pass the metadata back to the caller and do some basic - * validation. - */ - const void UNUSED *metadata = - blob_read_bytes(&ci_blob_reader, num_keys * sizeof(cache_key)); - if (ci_blob_reader.overrun) - goto fail; - } - - /* Load the CRC that was created when the file was written. */ - struct cache_entry_file_data *cf_data = - (struct cache_entry_file_data *) - blob_read_bytes(&ci_blob_reader, sizeof(struct cache_entry_file_data)); - if (ci_blob_reader.overrun) - goto fail; - - size_t cache_data_size = ci_blob_reader.end - ci_blob_reader.current; - const uint8_t *data = (uint8_t *) blob_read_bytes(&ci_blob_reader, cache_data_size); - - /* Check the data for corruption */ - if (cf_data->crc32 != util_hash_crc32(data, cache_data_size)) - goto fail; - - /* Uncompress the cache data */ - uncompressed_data = malloc(cf_data->uncompressed_size); - if (!uncompressed_data) - goto fail; - - if (cache->compression_disabled) { - if (cf_data->uncompressed_size != cache_data_size) - goto fail; - - memcpy(uncompressed_data, data, cache_data_size); - } else { - if (!util_compress_inflate(data, cache_data_size, uncompressed_data, - cf_data->uncompressed_size)) - goto fail; - } - - if (size) - *size = cf_data->uncompressed_size; - - return uncompressed_data; - - fail: - if (uncompressed_data) - free(uncompressed_data); - - return NULL; -} - -void * -disk_cache_load_item(struct disk_cache *cache, char *filename, size_t *size) -{ - uint8_t *data = NULL; - - int fd = open(filename, O_RDONLY | O_CLOEXEC); - if (fd == -1) - goto fail; - - struct stat sb; - if (fstat(fd, &sb) == -1) - goto fail; - - data = malloc(sb.st_size); - if (data == NULL) - goto fail; - - /* Read entire file into memory */ - int ret = read_all(fd, data, sb.st_size); - if (ret == -1) - goto fail; - - uint8_t *uncompressed_data = - parse_and_validate_cache_item(cache, data, sb.st_size, size); - if (!uncompressed_data) - goto fail; - - free(data); - free(filename); - close(fd); - - return uncompressed_data; - - fail: - if (data) - free(data); - if (filename) - free(filename); - if (fd != -1) - close(fd); - - return NULL; -} - -/* Return a filename within the cache's directory corresponding to 'key'. - * - * Returns NULL if out of memory. - */ -char * -disk_cache_get_cache_filename(struct disk_cache *cache, const cache_key key) -{ - char buf[41]; - char *filename; - - if (cache->path_init_failed) - return NULL; - - _mesa_sha1_format(buf, key); - if (asprintf(&filename, "%s/%c%c/%s", cache->path, buf[0], - buf[1], buf + 2) == -1) - return NULL; - - return filename; -} - -static bool -create_cache_item_header_and_blob(struct disk_cache_put_job *dc_job, - struct blob *cache_blob) -{ - - /* Compress the cache item data */ - size_t max_buf = util_compress_max_compressed_len(dc_job->size); - size_t compressed_size; - void *compressed_data; - - if (dc_job->cache->compression_disabled) { - compressed_size = dc_job->size; - compressed_data = dc_job->data; - } else { - compressed_data = malloc(max_buf); - if (compressed_data == NULL) - return false; - compressed_size = - util_compress_deflate(dc_job->data, dc_job->size, - compressed_data, max_buf); - if (compressed_size == 0) - goto fail; - } - - /* Copy the driver_keys_blob, this can be used find information about the - * mesa version that produced the entry or deal with hash collisions, - * should that ever become a real problem. - */ - if (!blob_write_bytes(cache_blob, dc_job->cache->driver_keys_blob, - dc_job->cache->driver_keys_blob_size)) - goto fail; - - /* Write the cache item metadata. This data can be used to deal with - * hash collisions, as well as providing useful information to 3rd party - * tools reading the cache files. - */ - if (!blob_write_uint32(cache_blob, dc_job->cache_item_metadata.type)) - goto fail; - - if (dc_job->cache_item_metadata.type == CACHE_ITEM_TYPE_GLSL) { - if (!blob_write_uint32(cache_blob, dc_job->cache_item_metadata.num_keys)) - goto fail; - - size_t metadata_keys_size = - dc_job->cache_item_metadata.num_keys * sizeof(cache_key); - if (!blob_write_bytes(cache_blob, dc_job->cache_item_metadata.keys[0], - metadata_keys_size)) - goto fail; - } - - /* Create CRC of the compressed data. We will read this when restoring the - * cache and use it to check for corruption. - */ - struct cache_entry_file_data cf_data; - cf_data.crc32 = util_hash_crc32(compressed_data, compressed_size); - cf_data.uncompressed_size = dc_job->size; - - if (!blob_write_bytes(cache_blob, &cf_data, sizeof(cf_data))) - goto fail; - - /* Finally copy the compressed cache blob */ - if (!blob_write_bytes(cache_blob, compressed_data, compressed_size)) - goto fail; - - if (!dc_job->cache->compression_disabled) - free(compressed_data); - - return true; - - fail: - if (!dc_job->cache->compression_disabled) - free(compressed_data); - - return false; -} - -void -disk_cache_write_item_to_disk(struct disk_cache_put_job *dc_job, - char *filename) -{ - int fd = -1, fd_final = -1; - struct blob cache_blob; - blob_init(&cache_blob); - - /* Write to a temporary file to allow for an atomic rename to the - * final destination filename, (to prevent any readers from seeing - * a partially written file). - */ - char *filename_tmp = NULL; - if (asprintf(&filename_tmp, "%s.tmp", filename) == -1) - goto done; - - fd = open(filename_tmp, O_WRONLY | O_CLOEXEC | O_CREAT, 0644); - - /* Make the two-character subdirectory within the cache as needed. */ - if (fd == -1) { - if (errno != ENOENT) - goto done; - - make_cache_file_directory(dc_job->cache, dc_job->key); - - fd = open(filename_tmp, O_WRONLY | O_CLOEXEC | O_CREAT, 0644); - if (fd == -1) - goto done; - } - - /* With the temporary file open, we take an exclusive flock on - * it. If the flock fails, then another process still has the file - * open with the flock held. So just let that file be responsible - * for writing the file. - */ -#ifdef HAVE_FLOCK - int err = flock(fd, LOCK_EX | LOCK_NB); -#else - struct flock lock = { - .l_start = 0, - .l_len = 0, /* entire file */ - .l_type = F_WRLCK, - .l_whence = SEEK_SET - }; - int err = fcntl(fd, F_SETLK, &lock); -#endif - if (err == -1) - goto done; - - /* Now that we have the lock on the open temporary file, we can - * check to see if the destination file already exists. If so, - * another process won the race between when we saw that the file - * didn't exist and now. In this case, we don't do anything more, - * (to ensure the size accounting of the cache doesn't get off). - */ - fd_final = open(filename, O_RDONLY | O_CLOEXEC); - if (fd_final != -1) { - unlink(filename_tmp); - goto done; - } - - /* OK, we're now on the hook to write out a file that we know is - * not in the cache, and is also not being written out to the cache - * by some other process. - */ - if (!create_cache_item_header_and_blob(dc_job, &cache_blob)) { - unlink(filename_tmp); - goto done; - } - - /* Now, finally, write out the contents to the temporary file, then - * rename them atomically to the destination filename, and also - * perform an atomic increment of the total cache size. - */ - int ret = write_all(fd, cache_blob.data, cache_blob.size); - if (ret == -1) { - unlink(filename_tmp); - goto done; - } - - ret = rename(filename_tmp, filename); - if (ret == -1) { - unlink(filename_tmp); - goto done; - } - - struct stat sb; - if (stat(filename, &sb) == -1) { - /* Something went wrong remove the file */ - unlink(filename); - goto done; - } - - p_atomic_add(dc_job->cache->size, sb.st_blocks * 512); - - done: - if (fd_final != -1) - close(fd_final); - /* This close finally releases the flock, (now that the final file - * has been renamed into place and the size has been added). - */ - if (fd != -1) - close(fd); - free(filename_tmp); - blob_finish(&cache_blob); -} - -/* Determine path for cache based on the first defined name as follows: - * - * $MESA_SHADER_CACHE_DIR - * $XDG_CACHE_HOME/mesa_shader_cache - * /.cache/mesa_shader_cache - */ -char * -disk_cache_generate_cache_dir(void *mem_ctx, const char *gpu_name, - const char *driver_id, - enum disk_cache_type cache_type) -{ - char *cache_dir_name = CACHE_DIR_NAME; - if (cache_type == DISK_CACHE_SINGLE_FILE) - cache_dir_name = CACHE_DIR_NAME_SF; - else if (cache_type == DISK_CACHE_DATABASE) - cache_dir_name = CACHE_DIR_NAME_DB; - - char *path = getenv("MESA_SHADER_CACHE_DIR"); - - if (!path) { - path = getenv("MESA_GLSL_CACHE_DIR"); - if (path) - fprintf(stderr, - "*** MESA_GLSL_CACHE_DIR is deprecated; " - "use MESA_SHADER_CACHE_DIR instead ***\n"); - } - - if (path) { - if (mkdir_if_needed(path) == -1) - return NULL; - - path = concatenate_and_mkdir(mem_ctx, path, cache_dir_name); - if (!path) - return NULL; - } - - if (path == NULL) { - char *xdg_cache_home = getenv("XDG_CACHE_HOME"); - - if (xdg_cache_home) { - if (mkdir_if_needed(xdg_cache_home) == -1) - return NULL; - - path = concatenate_and_mkdir(mem_ctx, xdg_cache_home, cache_dir_name); - if (!path) - return NULL; - } - } - - if (!path) { - char *buf; - size_t buf_size; - struct passwd pwd, *result; - - buf_size = sysconf(_SC_GETPW_R_SIZE_MAX); - if (buf_size == -1) - buf_size = 512; - - /* Loop until buf_size is large enough to query the directory */ - while (1) { - buf = ralloc_size(mem_ctx, buf_size); - - getpwuid_r(getuid(), &pwd, buf, buf_size, &result); - if (result) - break; - - if (errno == ERANGE) { - ralloc_free(buf); - buf = NULL; - buf_size *= 2; - } else { - return NULL; - } - } - - path = concatenate_and_mkdir(mem_ctx, pwd.pw_dir, ".cache"); - if (!path) - return NULL; - - path = concatenate_and_mkdir(mem_ctx, path, cache_dir_name); - if (!path) - return NULL; - } - - if (cache_type == DISK_CACHE_SINGLE_FILE) { - path = concatenate_and_mkdir(mem_ctx, path, driver_id); - if (!path) - return NULL; - - path = concatenate_and_mkdir(mem_ctx, path, gpu_name); - if (!path) - return NULL; - } - - return path; -} - -bool -disk_cache_enabled() -{ - /* If running as a users other than the real user disable cache */ - if (geteuid() != getuid()) - return false; - - /* At user request, disable shader cache entirely. */ -#ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - bool disable_by_default = true; -#else - bool disable_by_default = false; -#endif - char *envvar_name = "MESA_SHADER_CACHE_DISABLE"; - if (!getenv(envvar_name)) { - envvar_name = "MESA_GLSL_CACHE_DISABLE"; - if (getenv(envvar_name)) - fprintf(stderr, - "*** MESA_GLSL_CACHE_DISABLE is deprecated; " - "use MESA_SHADER_CACHE_DISABLE instead ***\n"); - } - - if (debug_get_bool_option(envvar_name, disable_by_default)) - return false; - - return true; -} - -void * -disk_cache_load_item_foz(struct disk_cache *cache, const cache_key key, - size_t *size) -{ - size_t cache_tem_size = 0; - void *cache_item = foz_read_entry(&cache->foz_db, key, &cache_tem_size); - if (!cache_item) - return NULL; - - uint8_t *uncompressed_data = - parse_and_validate_cache_item(cache, cache_item, cache_tem_size, size); - free(cache_item); - - return uncompressed_data; -} - -bool -disk_cache_write_item_to_disk_foz(struct disk_cache_put_job *dc_job) -{ - struct blob cache_blob; - blob_init(&cache_blob); - - if (!create_cache_item_header_and_blob(dc_job, &cache_blob)) - return false; - - bool r = foz_write_entry(&dc_job->cache->foz_db, dc_job->key, - cache_blob.data, cache_blob.size); - - blob_finish(&cache_blob); - return r; -} - -bool -disk_cache_load_cache_index_foz(void *mem_ctx, struct disk_cache *cache) -{ - /* Load cache index into a hash map (from fossilise files) */ - return foz_prepare(&cache->foz_db, cache->path); -} - -bool -disk_cache_mmap_cache_index(void *mem_ctx, struct disk_cache *cache, - char *path) -{ - int fd = -1; - bool mapped = false; - - path = ralloc_asprintf(mem_ctx, "%s/index", cache->path); - if (path == NULL) - goto path_fail; - - fd = open(path, O_RDWR | O_CREAT | O_CLOEXEC, 0644); - if (fd == -1) - goto path_fail; - - struct stat sb; - if (fstat(fd, &sb) == -1) - goto path_fail; - - /* Force the index file to be the expected size. */ - size_t size = sizeof(*cache->size) + CACHE_INDEX_MAX_KEYS * CACHE_KEY_SIZE; - if (sb.st_size != size) { -#if HAVE_POSIX_FALLOCATE - /* posix_fallocate() ensures disk space is allocated otherwise it - * fails if there is not enough space on the disk. - */ - if (posix_fallocate(fd, 0, size) != 0) - goto path_fail; -#else - /* ftruncate() allocates disk space lazily. If the disk is full - * and it is unable to allocate disk space when accessed via - * mmap, it will crash with a SIGBUS. - */ - if (ftruncate(fd, size) == -1) - goto path_fail; -#endif - } - - /* We map this shared so that other processes see updates that we - * make. - * - * Note: We do use atomic addition to ensure that multiple - * processes don't scramble the cache size recorded in the - * index. But we don't use any locking to prevent multiple - * processes from updating the same entry simultaneously. The idea - * is that if either result lands entirely in the index, then - * that's equivalent to a well-ordered write followed by an - * eviction and a write. On the other hand, if the simultaneous - * writes result in a corrupt entry, that's not really any - * different than both entries being evicted, (since within the - * guarantees of the cryptographic hash, a corrupt entry is - * unlikely to ever match a real cache key). - */ - cache->index_mmap = mmap(NULL, size, PROT_READ | PROT_WRITE, - MAP_SHARED, fd, 0); - if (cache->index_mmap == MAP_FAILED) - goto path_fail; - cache->index_mmap_size = size; - - cache->size = (uint64_t *) cache->index_mmap; - cache->stored_keys = cache->index_mmap + sizeof(uint64_t); - mapped = true; - -path_fail: - if (fd != -1) - close(fd); - - return mapped; -} - -void -disk_cache_destroy_mmap(struct disk_cache *cache) -{ - munmap(cache->index_mmap, cache->index_mmap_size); -} - -void * -disk_cache_db_load_item(struct disk_cache *cache, const cache_key key, - size_t *size) -{ - size_t cache_tem_size = 0; - void *cache_item = mesa_cache_db_multipart_read_entry(&cache->cache_db, - key, &cache_tem_size); - if (!cache_item) - return NULL; - - uint8_t *uncompressed_data = - parse_and_validate_cache_item(cache, cache_item, cache_tem_size, size); - free(cache_item); - - return uncompressed_data; -} - -bool -disk_cache_db_write_item_to_disk(struct disk_cache_put_job *dc_job) -{ - struct blob cache_blob; - blob_init(&cache_blob); - - if (!create_cache_item_header_and_blob(dc_job, &cache_blob)) - return false; - - bool r = mesa_cache_db_multipart_entry_write(&dc_job->cache->cache_db, - dc_job->key, cache_blob.data, - cache_blob.size); - - blob_finish(&cache_blob); - return r; -} - -bool -disk_cache_db_load_cache_index(void *mem_ctx, struct disk_cache *cache) -{ - return mesa_cache_db_multipart_open(&cache->cache_db, cache->path); -} -#endif - -#endif /* ENABLE_SHADER_CACHE */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache_os.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache_os.h deleted file mode 100644 index 823b31e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/disk_cache_os.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef DISK_CACHE_OS_H -#define DISK_CACHE_OS_H - -#include "u_queue.h" - -#if DETECT_OS_WINDOWS - -/* TODO: implement disk cache support on windows */ - -#else - -#include "fossilize_db.h" -#include "mesa_cache_db.h" -#include "mesa_cache_db_multipart.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Number of bits to mask off from a cache key to get an index. */ -#define CACHE_INDEX_KEY_BITS 16 - -/* Mask for computing an index from a key. */ -#define CACHE_INDEX_KEY_MASK ((1 << CACHE_INDEX_KEY_BITS) - 1) - -/* The number of keys that can be stored in the index. */ -#define CACHE_INDEX_MAX_KEYS (1 << CACHE_INDEX_KEY_BITS) - -enum disk_cache_type { - DISK_CACHE_NONE, - DISK_CACHE_MULTI_FILE, - DISK_CACHE_SINGLE_FILE, - DISK_CACHE_DATABASE, -}; - -struct disk_cache { - /* The path to the cache directory. */ - char *path; - bool path_init_failed; - - /* Thread queue for compressing and writing cache entries to disk */ - struct util_queue cache_queue; - - struct foz_db foz_db; - - struct mesa_cache_db_multipart cache_db; - - enum disk_cache_type type; - - /* Seed for rand, which is used to pick a random directory */ - uint64_t seed_xorshift128plus[2]; - - /* A pointer to the mmapped index file within the cache directory. */ - uint8_t *index_mmap; - size_t index_mmap_size; - - /* Pointer to total size of all objects in cache (within index_mmap) */ - p_atomic_uint64_t *size; - - /* Pointer to stored keys, (within index_mmap). */ - uint8_t *stored_keys; - - /* Maximum size of all cached objects (in bytes). */ - uint64_t max_size; - - /* Driver cache keys. */ - uint8_t *driver_keys_blob; - size_t driver_keys_blob_size; - - disk_cache_put_cb blob_put_cb; - disk_cache_get_cb blob_get_cb; - - /* Don't compress cached data. This is for testing purposes only. */ - bool compression_disabled; - - struct { - bool enabled; - unsigned hits; - unsigned misses; - } stats; - - /* Internal RO FOZ cache for combined use of RO and RW caches. */ - struct disk_cache *foz_ro_cache; -}; - -struct cache_entry_file_data { - uint32_t crc32; - uint32_t uncompressed_size; -}; - -struct disk_cache_put_job { - struct util_queue_fence fence; - - struct disk_cache *cache; - - cache_key key; - - /* Copy of cache data to be compressed and written. */ - void *data; - - /* Size of data to be compressed and written. */ - size_t size; - - struct cache_item_metadata cache_item_metadata; -}; - -char * -disk_cache_generate_cache_dir(void *mem_ctx, const char *gpu_name, - const char *driver_id, - enum disk_cache_type cache_type); - -void -disk_cache_evict_lru_item(struct disk_cache *cache); - -void -disk_cache_evict_item(struct disk_cache *cache, char *filename); - -void * -disk_cache_load_item_foz(struct disk_cache *cache, const cache_key key, - size_t *size); - -void * -disk_cache_load_item(struct disk_cache *cache, char *filename, size_t *size); - -char * -disk_cache_get_cache_filename(struct disk_cache *cache, const cache_key key); - -bool -disk_cache_write_item_to_disk_foz(struct disk_cache_put_job *dc_job); - -void -disk_cache_write_item_to_disk(struct disk_cache_put_job *dc_job, - char *filename); - -bool -disk_cache_enabled(void); - -bool -disk_cache_load_cache_index_foz(void *mem_ctx, struct disk_cache *cache); - -bool -disk_cache_mmap_cache_index(void *mem_ctx, struct disk_cache *cache, - char *path); - -void -disk_cache_destroy_mmap(struct disk_cache *cache); - -void * -disk_cache_db_load_item(struct disk_cache *cache, const cache_key key, - size_t *size); - -bool -disk_cache_db_write_item_to_disk(struct disk_cache_put_job *dc_job); - -bool -disk_cache_db_load_cache_index(void *mem_ctx, struct disk_cache *cache); - -#ifdef __cplusplus -} -#endif - -#endif - -#endif /* DISK_CACHE_OS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/double.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/double.c deleted file mode 100644 index ea86e9c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/double.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 2018-2019 Intel Corporation - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "softfloat.h" -#include "double.h" - -float -_mesa_double_to_float(double val) -{ - return _mesa_double_to_f32(val, false); -} - -float -_mesa_double_to_float_rtz(double val) -{ - return _mesa_double_to_f32(val, true); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/double.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/double.h deleted file mode 100644 index 784aa30..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/double.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 2018-2019 Intel Corporation - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _DOUBLE_H_ -#define _DOUBLE_H_ - - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This API is no more than a wrapper to the counterpart softfloat.h - * calls. Still, softfloat.h conversion API is meant to be kept private. In - * other words, only use the API published here, instead of calling directly - * the softfloat.h one. - */ - -float _mesa_double_to_float(double val); -float _mesa_double_to_float_rtz(double val); - -static inline float -_mesa_double_to_float_rtne(double val) -{ - return _mesa_double_to_float(val); -} - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* _DOUBLE_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/driconf_static.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/driconf_static.py deleted file mode 100644 index ed4cf9e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/driconf_static.py +++ /dev/null @@ -1,242 +0,0 @@ -# -# Copyright (C) 2021 Google, Inc. -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. - -from mako.template import Template -from xml.etree import ElementTree -import argparse -import os - -def dbg(str): - if False: - print(str) - -cnt = 0 -def cname(name): - global cnt - cnt = cnt + 1 - return name + '_' + str(cnt) - -class Option(object): - def __init__(self, xml): - self.cname = cname('option') - self.name = xml.attrib['name'] - self.value = xml.attrib['value'] - -class Application(object): - def __init__(self, xml): - self.cname = cname('application') - self.name = xml.attrib['name'] - self.executable = xml.attrib.get('executable', None) - self.executable_regexp = xml.attrib.get('executable_regexp', None) - self.sha1 = xml.attrib.get('sha1', None) - self.application_name_match = xml.attrib.get('application_name_match', None) - self.application_versions = xml.attrib.get('application_versions', None) - self.options = [] - - for option in xml.findall('option'): - self.options.append(Option(option)) - -class Engine(object): - def __init__(self, xml): - self.cname = cname('engine') - self.engine_name_match = xml.attrib['engine_name_match'] - self.engine_versions = xml.attrib.get('engine_versions', None) - self.options = [] - - for option in xml.findall('option'): - self.options.append(Option(option)) - -class Device(object): - def __init__(self, xml): - self.cname = cname('device') - self.driver = xml.attrib.get('driver', None) - self.device = xml.attrib.get('device', None) - self.applications = [] - self.engines = [] - - for application in xml.findall('application'): - self.applications.append(Application(application)) - - for engine in xml.findall('engine'): - self.engines.append(Engine(engine)) - -class DriConf(object): - def __init__(self, xmlpaths): - self.devices = [] - for xmlpath in xmlpaths: - root = ElementTree.parse(xmlpath).getroot() - - for device in root.findall('device'): - self.devices.append(Device(device)) - - -template = """\ -/* Copyright (C) 2021 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -struct driconf_option { - const char *name; - const char *value; -}; - -struct driconf_application { - const char *name; - const char *executable; - const char *executable_regexp; - const char *sha1; - const char *application_name_match; - const char *application_versions; - unsigned num_options; - const struct driconf_option *options; -}; - -struct driconf_engine { - const char *engine_name_match; - const char *engine_versions; - unsigned num_options; - const struct driconf_option *options; -}; - -struct driconf_device { - const char *driver; - const char *device; - unsigned num_engines; - const struct driconf_engine *engines; - unsigned num_applications; - const struct driconf_application *applications; -}; - -<%def name="render_options(cname, options)"> -static const struct driconf_option ${cname}[] = { -% for option in options: - { .name = "${option.name}", .value = "${option.value}" }, -% endfor -}; - - -%for device in driconf.devices: -% for engine in device.engines: - ${render_options(engine.cname + '_options', engine.options)} -% endfor - -%if len(device.engines) > 0: -static const struct driconf_engine ${device.cname}_engines[] = { -% for engine in device.engines: - { .engine_name_match = "${engine.engine_name_match}", -% if engine.engine_versions: - .engine_versions = "${engine.engine_versions}", -% endif - .num_options = ${len(engine.options)}, - .options = ${engine.cname + '_options'}, - }, -% endfor -}; -%endif - -% for application in device.applications: - ${render_options(application.cname + '_options', application.options)} -% endfor - -%if len(device.applications) > 0: -static const struct driconf_application ${device.cname}_applications[] = { -% for application in device.applications: - { .name = "${application.name}", -% if application.executable: - .executable = "${application.executable}", -% endif -% if application.executable_regexp: - .executable_regexp = "${application.executable_regexp}", -% endif -% if application.sha1: - .sha1 = "${application.sha1}", -% endif -% if application.application_name_match: - .application_name_match = "${application.application_name_match}", -% endif -% if application.application_versions: - .application_versions = "${application.application_versions}", -% endif - .num_options = ${len(application.options)}, - .options = ${application.cname + '_options'}, - }, -% endfor -}; -%endif - -static const struct driconf_device ${device.cname} = { -% if device.driver: - .driver = "${device.driver}", -% endif -% if device.device: - .device = "${device.device}", -% endif - .num_engines = ${len(device.engines)}, -% if len(device.engines) > 0: - .engines = ${device.cname}_engines, -% endif - .num_applications = ${len(device.applications)}, -% if len(device.applications) > 0: - .applications = ${device.cname}_applications, -% endif -}; -%endfor - -static const struct driconf_device *driconf[] = { -%for device in driconf.devices: - &${device.cname}, -%endfor -}; -""" - -parser = argparse.ArgumentParser() -parser.add_argument('drirc', - nargs=argparse.ONE_OR_MORE, - help='drirc *.conf file(s) to statically include') -parser.add_argument('header', - help='C header file to output the static configuration to') -args = parser.parse_args() - -xml = args.drirc -dst = args.header - -with open(dst, 'wb') as f: - f.write(Template(template, output_encoding='utf-8').render(driconf=DriConf(xml))) - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/enum_operators.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/enum_operators.h deleted file mode 100644 index 9860cf9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/enum_operators.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2020 Red Hat Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifdef __cplusplus - -#include "macros.h" -#include - -// some enum helpers -#define MESA_DEFINE_CPP_ENUM_BINARY_OPERATOR(Enum, op) \ -extern "C++" { \ -UNUSED static constexpr \ -Enum operator op (Enum a, Enum b) \ -{ \ - using IntType = std::underlying_type_t; \ - IntType ua = static_cast(a); \ - IntType ub = static_cast(b); \ - return static_cast(ua op ub); \ -} \ - \ -UNUSED static constexpr \ -Enum& operator op##= (Enum &a, Enum b) \ -{ \ - using IntType = std::underlying_type_t; \ - IntType ua = static_cast(a); \ - IntType ub = static_cast(b); \ - ua op##= ub; \ - a = static_cast(ua); \ - return a; \ -} \ -} - -#define MESA_DEFINE_CPP_ENUM_UNARY_OPERATOR(Enum, op) \ -extern "C++" { \ -UNUSED static constexpr \ -Enum operator op (Enum a) \ -{ \ - using IntType = std::underlying_type_t; \ - IntType ua = static_cast(a); \ - return static_cast(op ua); \ -} \ -} - -#define MESA_DEFINE_CPP_ENUM_BITFIELD_OPERATORS(Enum) \ -MESA_DEFINE_CPP_ENUM_BINARY_OPERATOR(Enum, |) \ -MESA_DEFINE_CPP_ENUM_BINARY_OPERATOR(Enum, &) \ -MESA_DEFINE_CPP_ENUM_BINARY_OPERATOR(Enum, ^) \ -MESA_DEFINE_CPP_ENUM_UNARY_OPERATOR(Enum, ~) - -#else - -#define MESA_DEFINE_CPP_ENUM_BITFIELD_OPERATORS(Enum) - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_idiv_by_const.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_idiv_by_const.c deleted file mode 100644 index 6d3d12a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_idiv_by_const.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright © 2018 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* Imported from: - * https://raw.githubusercontent.com/ridiculousfish/libdivide/master/divide_by_constants_codegen_reference.c - * Paper: - * http://ridiculousfish.com/files/faster_unsigned_division_by_constants.pdf - * - * The author, ridiculous_fish, wrote: - * - * ''Reference implementations of computing and using the "magic number" - * approach to dividing by constants, including codegen instructions. - * The unsigned division incorporates the "round down" optimization per - * ridiculous_fish. - * - * This is free and unencumbered software. Any copyright is dedicated - * to the Public Domain.'' - */ - -#include "fast_idiv_by_const.h" -#include "u_math.h" -#include "macros.h" -#include -#include - -struct util_fast_udiv_info -util_compute_fast_udiv_info(uint64_t D, unsigned num_bits, unsigned UINT_BITS) -{ - /* The numerator must fit in a uint64_t */ - assert(num_bits > 0 && num_bits <= UINT_BITS); - assert(D != 0); - - /* The eventual result */ - struct util_fast_udiv_info result; - - if (util_is_power_of_two_or_zero64(D)) { - unsigned div_shift = util_logbase2_64(D); - - if (div_shift) { - /* Dividing by a power of two. */ - result.multiplier = 1ull << (UINT_BITS - div_shift); - result.pre_shift = 0; - result.post_shift = 0; - result.increment = 0; - return result; - } else { - /* Dividing by 1. */ - /* Assuming: floor((num + 1) * (2^32 - 1) / 2^32) = num */ - result.multiplier = u_uintN_max(UINT_BITS); - result.pre_shift = 0; - result.post_shift = 0; - result.increment = 1; - return result; - } - } - - /* The extra shift implicit in the difference between UINT_BITS and num_bits - */ - const unsigned extra_shift = UINT_BITS - num_bits; - - /* The initial power of 2 is one less than the first one that can possibly - * work. - */ - const uint64_t initial_power_of_2 = (uint64_t)1 << (UINT_BITS-1); - - /* The remainder and quotient of our power of 2 divided by d */ - uint64_t quotient = initial_power_of_2 / D; - uint64_t remainder = initial_power_of_2 % D; - - /* ceil(log_2 D) */ - unsigned ceil_log_2_D; - - /* The magic info for the variant "round down" algorithm */ - uint64_t down_multiplier = 0; - unsigned down_exponent = 0; - int has_magic_down = 0; - - /* Compute ceil(log_2 D) */ - ceil_log_2_D = 0; - uint64_t tmp; - for (tmp = D; tmp > 0; tmp >>= 1) - ceil_log_2_D += 1; - - - /* Begin a loop that increments the exponent, until we find a power of 2 - * that works. - */ - unsigned exponent; - for (exponent = 0; ; exponent++) { - /* Quotient and remainder is from previous exponent; compute it for this - * exponent. - */ - if (remainder >= D - remainder) { - /* Doubling remainder will wrap around D */ - quotient = quotient * 2 + 1; - remainder = remainder * 2 - D; - } else { - /* Remainder will not wrap */ - quotient = quotient * 2; - remainder = remainder * 2; - } - - /* We're done if this exponent works for the round_up algorithm. - * Note that exponent may be larger than the maximum shift supported, - * so the check for >= ceil_log_2_D is critical. - */ - if ((exponent + extra_shift >= ceil_log_2_D) || - (D - remainder) <= ((uint64_t)1 << (exponent + extra_shift))) - break; - - /* Set magic_down if we have not set it yet and this exponent works for - * the round_down algorithm - */ - if (!has_magic_down && - remainder <= ((uint64_t)1 << (exponent + extra_shift))) { - has_magic_down = 1; - down_multiplier = quotient; - down_exponent = exponent; - } - } - - if (exponent < ceil_log_2_D) { - /* magic_up is efficient */ - result.multiplier = quotient + 1; - result.pre_shift = 0; - result.post_shift = exponent; - result.increment = 0; - } else if (D & 1) { - /* Odd divisor, so use magic_down, which must have been set */ - assert(has_magic_down); - result.multiplier = down_multiplier; - result.pre_shift = 0; - result.post_shift = down_exponent; - result.increment = 1; - } else { - /* Even divisor, so use a prefix-shifted dividend */ - unsigned pre_shift = 0; - uint64_t shifted_D = D; - while ((shifted_D & 1) == 0) { - shifted_D >>= 1; - pre_shift += 1; - } - result = util_compute_fast_udiv_info(shifted_D, num_bits - pre_shift, - UINT_BITS); - /* expect no increment or pre_shift in this path */ - assert(result.increment == 0 && result.pre_shift == 0); - result.pre_shift = pre_shift; - } - return result; -} - -struct util_fast_sdiv_info -util_compute_fast_sdiv_info(int64_t D, unsigned SINT_BITS) -{ - /* D must not be zero. */ - assert(D != 0); - /* The result is not correct for these divisors. */ - assert(D != 1 && D != -1); - - /* Our result */ - struct util_fast_sdiv_info result; - - /* Absolute value of D (we know D is not the most negative value since - * that's a power of 2) - */ - const uint64_t abs_d = (D < 0 ? -D : D); - - /* The initial power of 2 is one less than the first one that can possibly - * work */ - /* "two31" in Warren */ - unsigned exponent = SINT_BITS - 1; - const uint64_t initial_power_of_2 = (uint64_t)1 << exponent; - - /* Compute the absolute value of our "test numerator," - * which is the largest dividend whose remainder with d is d-1. - * This is called anc in Warren. - */ - const uint64_t tmp = initial_power_of_2 + (D < 0); - const uint64_t abs_test_numer = tmp - 1 - tmp % abs_d; - - /* Initialize our quotients and remainders (q1, r1, q2, r2 in Warren) */ - uint64_t quotient1 = initial_power_of_2 / abs_test_numer; - uint64_t remainder1 = initial_power_of_2 % abs_test_numer; - uint64_t quotient2 = initial_power_of_2 / abs_d; - uint64_t remainder2 = initial_power_of_2 % abs_d; - uint64_t delta; - - /* Begin our loop */ - do { - /* Update the exponent */ - exponent++; - - /* Update quotient1 and remainder1 */ - quotient1 *= 2; - remainder1 *= 2; - if (remainder1 >= abs_test_numer) { - quotient1 += 1; - remainder1 -= abs_test_numer; - } - - /* Update quotient2 and remainder2 */ - quotient2 *= 2; - remainder2 *= 2; - if (remainder2 >= abs_d) { - quotient2 += 1; - remainder2 -= abs_d; - } - - /* Keep going as long as (2**exponent) / abs_d <= delta */ - delta = abs_d - remainder2; - } while (quotient1 < delta || (quotient1 == delta && remainder1 == 0)); - - result.multiplier = util_sign_extend(quotient2 + 1, SINT_BITS); - if (D < 0) result.multiplier = -result.multiplier; - result.shift = exponent - SINT_BITS; - return result; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_idiv_by_const.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_idiv_by_const.h deleted file mode 100644 index 638b52a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_idiv_by_const.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright © 2018 Advanced Micro Devices, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef FAST_IDIV_BY_CONST_H -#define FAST_IDIV_BY_CONST_H - -/* Imported from: - * https://raw.githubusercontent.com/ridiculousfish/libdivide/master/divide_by_constants_codegen_reference.c - */ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Computes "magic info" for performing signed division by a fixed integer D. - * The type 'sint_t' is assumed to be defined as a signed integer type large - * enough to hold both the dividend and the divisor. - * Here >> is arithmetic (signed) shift, and >>> is logical shift. - * - * To emit code for n/d, rounding towards zero, use the following sequence: - * - * m = compute_signed_magic_info(D) - * emit("result = (m.multiplier * n) >> SINT_BITS"); - * if d > 0 and m.multiplier < 0: emit("result += n") - * if d < 0 and m.multiplier > 0: emit("result -= n") - * if m.post_shift > 0: emit("result >>= m.shift") - * emit("result += (result < 0)") - * - * The shifts by SINT_BITS may be "free" if the high half of the full multiply - * is put in a separate register. - * - * The final add can of course be implemented via the sign bit, e.g. - * result += (result >>> (SINT_BITS - 1)) - * or - * result -= (result >> (SINT_BITS - 1)) - * - * This code is heavily indebted to Hacker's Delight by Henry Warren. - * See http://www.hackersdelight.org/HDcode/magic.c.txt - * Used with permission from http://www.hackersdelight.org/permissions.htm - */ - -struct util_fast_sdiv_info { - int64_t multiplier; /* the "magic number" multiplier */ - unsigned shift; /* shift for the dividend after multiplying */ -}; - -struct util_fast_sdiv_info -util_compute_fast_sdiv_info(int64_t D, unsigned SINT_BITS); - -/* Computes "magic info" for performing unsigned division by a fixed positive - * integer D. UINT_BITS is the bit size at which the final "magic" - * calculation will be performed; it is assumed to be large enough to hold - * both the dividand and the divisor. num_bits can be set appropriately if n - * is known to be smaller than calc_bits; if this is not known then UINT_BITS - * for num_bits. - * - * Assume we have a hardware register of width UINT_BITS, a known constant D - * which is not zero and not a power of 2, and a variable n of width num_bits - * (which may be up to UINT_BITS). To emit code for n/d, use one of the two - * following sequences (here >>> refers to a logical bitshift): - * - * m = compute_unsigned_magic_info(D, num_bits) - * if m.pre_shift > 0: emit("n >>>= m.pre_shift") - * if m.increment: emit("n = saturated_increment(n)") - * emit("result = (m.multiplier * n) >>> UINT_BITS") - * if m.post_shift > 0: emit("result >>>= m.post_shift") - * - * or - * - * m = compute_unsigned_magic_info(D, num_bits) - * if m.pre_shift > 0: emit("n >>>= m.pre_shift") - * emit("result = m.multiplier * n") - * if m.increment: emit("result = result + m.multiplier") - * emit("result >>>= UINT_BITS") - * if m.post_shift > 0: emit("result >>>= m.post_shift") - * - * This second version works even if D is 1. The shifts by UINT_BITS may be - * "free" if the high half of the full multiply is put in a separate register. - * - * saturated_increment(n) means "increment n unless it would wrap to 0," i.e. - * if n == (1 << UINT_BITS)-1: result = n - * else: result = n+1 - * A common way to implement this is with the carry bit. For example, on x86: - * add 1 - * sbb 0 - * - * Some invariants: - * 1: At least one of pre_shift and increment is zero - * 2: multiplier is never zero - * - * This code incorporates the "round down" optimization per ridiculous_fish. - */ - -struct util_fast_udiv_info { - uint64_t multiplier; /* the "magic number" multiplier */ - unsigned pre_shift; /* shift for the dividend before multiplying */ - unsigned post_shift; /* shift for the dividend after multiplying */ - int increment; /* 0 or 1; if set then increment the numerator, using one of - the two strategies */ -}; - -struct util_fast_udiv_info -util_compute_fast_udiv_info(uint64_t D, unsigned num_bits, unsigned UINT_BITS); - -/* Below are possible options for dividing by a uniform in a shader where - * the divisor is constant but not known at compile time. - */ - -/* Full version. */ -static inline uint32_t -util_fast_udiv32(uint32_t n, struct util_fast_udiv_info info) -{ - n = n >> info.pre_shift; - /* If the divisor is not 1, you can instead use a 32-bit ADD that clamps - * to UINT_MAX. Dividing by 1 needs the full 64-bit ADD. - * - * If you have unsigned 64-bit MAD with 32-bit inputs, you can do: - * increment = increment ? multiplier : 0; // on the CPU - * (n * multiplier + increment) // on the GPU using unsigned 64-bit MAD - */ - n = (((uint64_t)n + info.increment) * info.multiplier) >> 32; - n = n >> info.post_shift; - return n; -} - -/* A little more efficient version if n != UINT_MAX, i.e. no unsigned - * wraparound in the computation. - */ -static inline uint32_t -util_fast_udiv32_nuw(uint32_t n, struct util_fast_udiv_info info) -{ - assert(n != UINT32_MAX); - n = n >> info.pre_shift; - n = n + info.increment; - n = ((uint64_t)n * info.multiplier) >> 32; - n = n >> info.post_shift; - return n; -} - -/* Even faster version but both operands must be 31-bit unsigned integers - * and the divisor must be greater than 1. - * - * info must be computed with num_bits == 31. - */ -static inline uint32_t -util_fast_udiv32_u31_d_not_one(uint32_t n, struct util_fast_udiv_info info) -{ - assert(info.pre_shift == 0); - assert(info.increment == 0); - n = ((uint64_t)n * info.multiplier) >> 32; - n = n >> info.post_shift; - return n; -} - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* FAST_IDIV_BY_CONST_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_urem_by_const.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_urem_by_const.h deleted file mode 100644 index beb253d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fast_urem_by_const.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2010 Valve Software - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include - -/* - * Code for fast 32-bit unsigned remainder, based off of "Faster Remainder by - * Direct Computation: Applications to Compilers and Software Libraries," - * available at https://arxiv.org/pdf/1902.01961.pdf. - * - * util_fast_urem32(n, d, REMAINDER_MAGIC(d)) returns the same thing as - * n % d for any unsigned n and d, however it compiles down to only a few - * multiplications, so it should be faster than plain uint32_t modulo if the - * same divisor is used many times. - */ - -#define REMAINDER_MAGIC(divisor) \ - ((uint64_t) ~0ull / (divisor) + 1) - -/* - * Get bits 64-96 of a 32x64-bit multiply. If __int128_t is available, we use - * it, which usually compiles down to one instruction on 64-bit architectures. - * Otherwise on 32-bit architectures we usually get four instructions (one - * 32x32->64 multiply, one 32x32->32 multiply, and one 64-bit add). - */ - -static inline uint32_t -_mul32by64_hi(uint32_t a, uint64_t b) -{ -#ifdef HAVE_UINT128 - return ((__uint128_t) b * a) >> 64; -#else - /* - * Let b = b0 + 2^32 * b1. Then a * b = a * b0 + 2^32 * a * b1. We would - * have to do a 96-bit addition to get the full result, except that only - * one term has non-zero lower 32 bits, which means that to get the high 32 - * bits, we only have to add the high 64 bits of each term. Unfortunately, - * we have to do the 64-bit addition in case the low 32 bits overflow. - */ - uint32_t b0 = (uint32_t) b; - uint32_t b1 = b >> 32; - return ((((uint64_t) a * b0) >> 32) + (uint64_t) a * b1) >> 32; -#endif -} - -static inline uint32_t -util_fast_urem32(uint32_t n, uint32_t d, uint64_t magic) -{ - uint64_t lowbits = magic * n; - uint32_t result = _mul32by64_hi(d, lowbits); - assert(result == n % d); - return result; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/format_utils.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/format_utils.h deleted file mode 100644 index 11e5e40..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/format_utils.h +++ /dev/null @@ -1,207 +0,0 @@ -/** - * \file format_utils.h - * A collection of format conversion utility functions. - */ - -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. - * Copyright (C) 2014 Intel Corporation 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef UTIL_FORMAT_UTILS_H -#define UTIL_FORMAT_UTILS_H - -#include "../half_float.h" -#include "../rounding.h" - -/* Extends an integer of size SRC_BITS to one of size DST_BITS linearly */ -#define EXTEND_NORMALIZED_INT(X, SRC_BITS, DST_BITS) \ - (((X) * (int)(u_uintN_max(DST_BITS) / u_uintN_max(SRC_BITS))) + \ - (((DST_BITS) % (SRC_BITS)) ? ((X) >> ((SRC_BITS) - (DST_BITS) % (SRC_BITS))) : 0)) - -static inline float -_mesa_unorm_to_float(unsigned x, unsigned src_bits) -{ - return x * (1.0f / (float)u_uintN_max(src_bits)); -} - -static inline float -_mesa_snorm_to_float(int x, unsigned src_bits) -{ - if (x <= -u_intN_max(src_bits)) - return -1.0f; - else - return x * (1.0f / (float)u_intN_max(src_bits)); -} - -static inline uint16_t -_mesa_unorm_to_half(unsigned x, unsigned src_bits) -{ - return _mesa_float_to_half(_mesa_unorm_to_float(x, src_bits)); -} - -static inline uint16_t -_mesa_snorm_to_half(int x, unsigned src_bits) -{ - return _mesa_float_to_half(_mesa_snorm_to_float(x, src_bits)); -} - -static inline unsigned -_mesa_float_to_unorm(float x, unsigned dst_bits) -{ - if (x < 0.0f) - return 0; - else if (x > 1.0f) - return u_uintN_max(dst_bits); - else - return _mesa_i64roundevenf(x * u_uintN_max(dst_bits)); -} - -static inline unsigned -_mesa_half_to_unorm(uint16_t x, unsigned dst_bits) -{ - return _mesa_float_to_unorm(_mesa_half_to_float(x), dst_bits); -} - -static inline unsigned -_mesa_unorm_to_unorm(unsigned x, unsigned src_bits, unsigned dst_bits) -{ - if (src_bits < dst_bits) { - return EXTEND_NORMALIZED_INT(x, src_bits, dst_bits); - } else if (src_bits > dst_bits) { - unsigned src_half = (1u << (src_bits - 1)) - 1; - - if (src_bits + dst_bits > sizeof(x) * 8) { - assert(src_bits + dst_bits <= sizeof(uint64_t) * 8); - return (((uint64_t) x * u_uintN_max(dst_bits) + src_half) / - u_uintN_max(src_bits)); - } else { - return (x * u_uintN_max(dst_bits) + src_half) / u_uintN_max(src_bits); - } - } else { - return x; - } -} - -static inline unsigned -_mesa_snorm_to_unorm(int x, unsigned src_bits, unsigned dst_bits) -{ - if (x < 0) - return 0; - else - return _mesa_unorm_to_unorm(x, src_bits - 1, dst_bits); -} - -static inline int -_mesa_float_to_snorm(float x, unsigned dst_bits) -{ - if (x < -1.0f) - return -u_intN_max(dst_bits); - else if (x > 1.0f) - return u_intN_max(dst_bits); - else - return _mesa_lroundevenf(x * u_intN_max(dst_bits)); -} - -static inline int -_mesa_half_to_snorm(uint16_t x, unsigned dst_bits) -{ - return _mesa_float_to_snorm(_mesa_half_to_float(x), dst_bits); -} - -static inline int -_mesa_unorm_to_snorm(unsigned x, unsigned src_bits, unsigned dst_bits) -{ - return _mesa_unorm_to_unorm(x, src_bits, dst_bits - 1); -} - -static inline int -_mesa_snorm_to_snorm(int x, unsigned src_bits, unsigned dst_bits) -{ - if (x < -u_intN_max(src_bits)) - return -u_intN_max(dst_bits); - else if (src_bits < dst_bits) - return EXTEND_NORMALIZED_INT(x, src_bits - 1, dst_bits - 1); - else - return x >> (src_bits - dst_bits); -} - -static inline unsigned -_mesa_unsigned_to_unsigned(unsigned src, unsigned dst_size) -{ - return MIN2(src, u_uintN_max(dst_size)); -} - -static inline int -_mesa_unsigned_to_signed(unsigned src, unsigned dst_size) -{ - return MIN2(src, (unsigned)u_intN_max(dst_size)); -} - -static inline int -_mesa_signed_to_signed(int src, unsigned dst_size) -{ - return CLAMP(src, u_intN_min(dst_size), u_intN_max(dst_size)); -} - -static inline unsigned -_mesa_signed_to_unsigned(int src, unsigned dst_size) -{ - return CLAMP(src, 0, u_uintN_max(dst_size)); -} - -static inline unsigned -_mesa_float_to_unsigned(float src, unsigned dst_bits) -{ - if (src < 0.0f) - return 0; - if (src > (float)u_uintN_max(dst_bits)) - return u_uintN_max(dst_bits); - return _mesa_signed_to_unsigned(src, dst_bits); -} - -static inline unsigned -_mesa_float_to_signed(float src, unsigned dst_bits) -{ - if (src < (float)(-u_intN_max(dst_bits))) - return -u_intN_max(dst_bits); - if (src > (float)u_intN_max(dst_bits)) - return u_intN_max(dst_bits); - return _mesa_signed_to_signed(src, dst_bits); -} - -static inline unsigned -_mesa_half_to_unsigned(uint16_t src, unsigned dst_bits) -{ - if (_mesa_half_is_negative(src)) - return 0; - return _mesa_unsigned_to_unsigned(_mesa_float_to_half(src), dst_bits); -} - -static inline unsigned -_mesa_half_to_signed(uint16_t src, unsigned dst_bits) -{ - return _mesa_float_to_signed(_mesa_half_to_float(src), dst_bits); -} - -#endif /* UTIL_FORMAT_UTILS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/meson.build b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/meson.build deleted file mode 100644 index f84d83a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/meson.build +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright © 2019 Google LLC - -# 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 THE -# AUTHORS OR COPYRIGHT HOLDERS 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. - -files_mesa_format = [ - 'u_format.c', - 'u_format_bptc.c', - 'u_format_etc.c', - 'u_format_fxt1.c', - 'u_format_latc.c', - 'u_format_other.c', - 'u_format_rgtc.c', - 'u_format_s3tc.c', - 'u_format_tests.c', - 'u_format_unpack_neon.c', - 'u_format_yuv.c', - 'u_format_zs.c', -] - -# TODO: remove the quirk when GCC get test and fix inside release -# See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108163 -arm_neon_workaround = [] -if cc.get_id() == 'gcc' and host_machine.cpu_family().contains('arm') - arm_neon_workaround = gcc_lto_quirk -endif - -u_format_pack_h = custom_target( - 'u_format_pack.h', - input : ['u_format_table.py', 'u_format.csv'], - output : 'u_format_pack.h', - command : [prog_python, '@INPUT@', '--header'], - depend_files : files('u_format_pack.py', 'u_format_parse.py'), - capture : true, -) - -u_format_table_c = custom_target( - 'u_format_table.c', - input : ['u_format_table.py', 'u_format.csv'], - output : 'u_format_table.c', - command : [prog_python, '@INPUT@'], - depend_files : files('u_format_pack.py', 'u_format_parse.py'), - capture : true, -) - -libmesa_format = static_library( - 'mesa_format', - [files_mesa_format, u_format_table_c, u_format_pack_h], - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - # NOTE dep_valgrind used here instead of idep_mesautil due to chicken/egg - # dependencies between util and util/format - dependencies : [dep_m, dep_valgrind], - c_args : [c_msvc_compat_args, arm_neon_workaround], - gnu_symbol_visibility : 'hidden', - build_by_default : false -) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_bptc_tmp.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_bptc_tmp.h deleted file mode 100644 index be90c5c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_bptc_tmp.h +++ /dev/null @@ -1,1861 +0,0 @@ -/* - * Copyright (C) 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * Included by texcompress_bptc and gallium to define BPTC decoding routines. - */ - -#ifndef TEXCOMPRESS_BPTC_TMP_H -#define TEXCOMPRESS_BPTC_TMP_H - -#include "../bitscan.h" -#include "../format_srgb.h" -#include "../half_float.h" -#include "../u_math.h" - -#define BLOCK_SIZE 4 -#define N_PARTITIONS 64 -#define BLOCK_BYTES 16 - -struct bptc_unorm_mode { - int n_subsets; - int n_partition_bits; - bool has_rotation_bits; - bool has_index_selection_bit; - int n_color_bits; - int n_alpha_bits; - bool has_endpoint_pbits; - bool has_shared_pbits; - int n_index_bits; - int n_secondary_index_bits; -}; - -struct bptc_float_bitfield { - int8_t endpoint; - uint8_t component; - uint8_t offset; - uint8_t n_bits; - bool reverse; -}; - -struct bptc_float_mode { - bool reserved; - bool transformed_endpoints; - int n_partition_bits; - int n_endpoint_bits; - int n_index_bits; - int n_delta_bits[3]; - struct bptc_float_bitfield bitfields[24]; -}; - -struct bit_writer { - uint8_t buf; - int pos; - uint8_t *dst; -}; - -static const struct bptc_unorm_mode -bptc_unorm_modes[] = { - /* 0 */ { 3, 4, false, false, 4, 0, true, false, 3, 0 }, - /* 1 */ { 2, 6, false, false, 6, 0, false, true, 3, 0 }, - /* 2 */ { 3, 6, false, false, 5, 0, false, false, 2, 0 }, - /* 3 */ { 2, 6, false, false, 7, 0, true, false, 2, 0 }, - /* 4 */ { 1, 0, true, true, 5, 6, false, false, 2, 3 }, - /* 5 */ { 1, 0, true, false, 7, 8, false, false, 2, 2 }, - /* 6 */ { 1, 0, false, false, 7, 7, true, false, 4, 0 }, - /* 7 */ { 2, 6, false, false, 5, 5, true, false, 2, 0 } -}; - -static const struct bptc_float_mode -bptc_float_modes[] = { - /* 00 */ - { false, true, 5, 10, 3, { 5, 5, 5 }, - { { 2, 1, 4, 1, false }, { 2, 2, 4, 1, false }, { 3, 2, 4, 1, false }, - { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 5, false }, { 3, 1, 4, 1, false }, { 2, 1, 0, 4, false }, - { 1, 1, 0, 5, false }, { 3, 2, 0, 1, false }, { 3, 1, 0, 4, false }, - { 1, 2, 0, 5, false }, { 3, 2, 1, 1, false }, { 2, 2, 0, 4, false }, - { 2, 0, 0, 5, false }, { 3, 2, 2, 1, false }, { 3, 0, 0, 5, false }, - { 3, 2, 3, 1, false }, - { -1 } } - }, - /* 01 */ - { false, true, 5, 7, 3, { 6, 6, 6 }, - { { 2, 1, 5, 1, false }, { 3, 1, 4, 1, false }, { 3, 1, 5, 1, false }, - { 0, 0, 0, 7, false }, { 3, 2, 0, 1, false }, { 3, 2, 1, 1, false }, - { 2, 2, 4, 1, false }, { 0, 1, 0, 7, false }, { 2, 2, 5, 1, false }, - { 3, 2, 2, 1, false }, { 2, 1, 4, 1, false }, { 0, 2, 0, 7, false }, - { 3, 2, 3, 1, false }, { 3, 2, 5, 1, false }, { 3, 2, 4, 1, false }, - { 1, 0, 0, 6, false }, { 2, 1, 0, 4, false }, { 1, 1, 0, 6, false }, - { 3, 1, 0, 4, false }, { 1, 2, 0, 6, false }, { 2, 2, 0, 4, false }, - { 2, 0, 0, 6, false }, - { 3, 0, 0, 6, false }, - { -1 } } - }, - /* 00010 */ - { false, true, 5, 11, 3, { 5, 4, 4 }, - { { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 5, false }, { 0, 0, 10, 1, false }, { 2, 1, 0, 4, false }, - { 1, 1, 0, 4, false }, { 0, 1, 10, 1, false }, { 3, 2, 0, 1, false }, - { 3, 1, 0, 4, false }, { 1, 2, 0, 4, false }, { 0, 2, 10, 1, false }, - { 3, 2, 1, 1, false }, { 2, 2, 0, 4, false }, { 2, 0, 0, 5, false }, - { 3, 2, 2, 1, false }, { 3, 0, 0, 5, false }, { 3, 2, 3, 1, false }, - { -1 } } - }, - /* 00011 */ - { false, false, 0, 10, 4, { 10, 10, 10 }, - { { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 10, false }, { 1, 1, 0, 10, false }, { 1, 2, 0, 10, false }, - { -1 } } - }, - /* 00110 */ - { false, true, 5, 11, 3, { 4, 5, 4 }, - { { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 4, false }, { 0, 0, 10, 1, false }, { 3, 1, 4, 1, false }, - { 2, 1, 0, 4, false }, { 1, 1, 0, 5, false }, { 0, 1, 10, 1, false }, - { 3, 1, 0, 4, false }, { 1, 2, 0, 4, false }, { 0, 2, 10, 1, false }, - { 3, 2, 1, 1, false }, { 2, 2, 0, 4, false }, { 2, 0, 0, 4, false }, - { 3, 2, 0, 1, false }, { 3, 2, 2, 1, false }, { 3, 0, 0, 4, false }, - { 2, 1, 4, 1, false }, { 3, 2, 3, 1, false }, - { -1 } } - }, - /* 00111 */ - { false, true, 0, 11, 4, { 9, 9, 9 }, - { { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 9, false }, { 0, 0, 10, 1, false }, { 1, 1, 0, 9, false }, - { 0, 1, 10, 1, false }, { 1, 2, 0, 9, false }, { 0, 2, 10, 1, false }, - { -1 } } - }, - /* 01010 */ - { false, true, 5, 11, 3, { 4, 4, 5 }, - { { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 4, false }, { 0, 0, 10, 1, false }, { 2, 2, 4, 1, false }, - { 2, 1, 0, 4, false }, { 1, 1, 0, 4, false }, { 0, 1, 10, 1, false }, - { 3, 2, 0, 1, false }, { 3, 1, 0, 4, false }, { 1, 2, 0, 5, false }, - { 0, 2, 10, 1, false }, { 2, 2, 0, 4, false }, { 2, 0, 0, 4, false }, - { 3, 2, 1, 1, false }, { 3, 2, 2, 1, false }, { 3, 0, 0, 4, false }, - { 3, 2, 4, 1, false }, { 3, 2, 3, 1, false }, - { -1 } } - }, - /* 01011 */ - { false, true, 0, 12, 4, { 8, 8, 8 }, - { { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 8, false }, { 0, 0, 10, 2, true }, { 1, 1, 0, 8, false }, - { 0, 1, 10, 2, true }, { 1, 2, 0, 8, false }, { 0, 2, 10, 2, true }, - { -1 } } - }, - /* 01110 */ - { false, true, 5, 9, 3, { 5, 5, 5 }, - { { 0, 0, 0, 9, false }, { 2, 2, 4, 1, false }, { 0, 1, 0, 9, false }, - { 2, 1, 4, 1, false }, { 0, 2, 0, 9, false }, { 3, 2, 4, 1, false }, - { 1, 0, 0, 5, false }, { 3, 1, 4, 1, false }, { 2, 1, 0, 4, false }, - { 1, 1, 0, 5, false }, { 3, 2, 0, 1, false }, { 3, 1, 0, 4, false }, - { 1, 2, 0, 5, false }, { 3, 2, 1, 1, false }, { 2, 2, 0, 4, false }, - { 2, 0, 0, 5, false }, { 3, 2, 2, 1, false }, { 3, 0, 0, 5, false }, - { 3, 2, 3, 1, false }, - { -1 } } - }, - /* 01111 */ - { false, true, 0, 16, 4, { 4, 4, 4 }, - { { 0, 0, 0, 10, false }, { 0, 1, 0, 10, false }, { 0, 2, 0, 10, false }, - { 1, 0, 0, 4, false }, { 0, 0, 10, 6, true }, { 1, 1, 0, 4, false }, - { 0, 1, 10, 6, true }, { 1, 2, 0, 4, false }, { 0, 2, 10, 6, true }, - { -1 } } - }, - /* 10010 */ - { false, true, 5, 8, 3, { 6, 5, 5 }, - { { 0, 0, 0, 8, false }, { 3, 1, 4, 1, false }, { 2, 2, 4, 1, false }, - { 0, 1, 0, 8, false }, { 3, 2, 2, 1, false }, { 2, 1, 4, 1, false }, - { 0, 2, 0, 8, false }, { 3, 2, 3, 1, false }, { 3, 2, 4, 1, false }, - { 1, 0, 0, 6, false }, { 2, 1, 0, 4, false }, { 1, 1, 0, 5, false }, - { 3, 2, 0, 1, false }, { 3, 1, 0, 4, false }, { 1, 2, 0, 5, false }, - { 3, 2, 1, 1, false }, { 2, 2, 0, 4, false }, { 2, 0, 0, 6, false }, - { 3, 0, 0, 6, false }, - { -1 } } - }, - /* 10011 */ - { true /* reserved */ }, - /* 10110 */ - { false, true, 5, 8, 3, { 5, 6, 5 }, - { { 0, 0, 0, 8, false }, { 3, 2, 0, 1, false }, { 2, 2, 4, 1, false }, - { 0, 1, 0, 8, false }, { 2, 1, 5, 1, false }, { 2, 1, 4, 1, false }, - { 0, 2, 0, 8, false }, { 3, 1, 5, 1, false }, { 3, 2, 4, 1, false }, - { 1, 0, 0, 5, false }, { 3, 1, 4, 1, false }, { 2, 1, 0, 4, false }, - { 1, 1, 0, 6, false }, { 3, 1, 0, 4, false }, { 1, 2, 0, 5, false }, - { 3, 2, 1, 1, false }, { 2, 2, 0, 4, false }, { 2, 0, 0, 5, false }, - { 3, 2, 2, 1, false }, { 3, 0, 0, 5, false }, { 3, 2, 3, 1, false }, - { -1 } } - }, - /* 10111 */ - { true /* reserved */ }, - /* 11010 */ - { false, true, 5, 8, 3, { 5, 5, 6 }, - { { 0, 0, 0, 8, false }, { 3, 2, 1, 1, false }, { 2, 2, 4, 1, false }, - { 0, 1, 0, 8, false }, { 2, 2, 5, 1, false }, { 2, 1, 4, 1, false }, - { 0, 2, 0, 8, false }, { 3, 2, 5, 1, false }, { 3, 2, 4, 1, false }, - { 1, 0, 0, 5, false }, { 3, 1, 4, 1, false }, { 2, 1, 0, 4, false }, - { 1, 1, 0, 5, false }, { 3, 2, 0, 1, false }, { 3, 1, 0, 4, false }, - { 1, 2, 0, 6, false }, { 2, 2, 0, 4, false }, { 2, 0, 0, 5, false }, - { 3, 2, 2, 1, false }, { 3, 0, 0, 5, false }, { 3, 2, 3, 1, false }, - { -1 } } - }, - /* 11011 */ - { true /* reserved */ }, - /* 11110 */ - { false, false, 5, 6, 3, { 6, 6, 6 }, - { { 0, 0, 0, 6, false }, { 3, 1, 4, 1, false }, { 3, 2, 0, 1, false }, - { 3, 2, 1, 1, false }, { 2, 2, 4, 1, false }, { 0, 1, 0, 6, false }, - { 2, 1, 5, 1, false }, { 2, 2, 5, 1, false }, { 3, 2, 2, 1, false }, - { 2, 1, 4, 1, false }, { 0, 2, 0, 6, false }, { 3, 1, 5, 1, false }, - { 3, 2, 3, 1, false }, { 3, 2, 5, 1, false }, { 3, 2, 4, 1, false }, - { 1, 0, 0, 6, false }, { 2, 1, 0, 4, false }, { 1, 1, 0, 6, false }, - { 3, 1, 0, 4, false }, { 1, 2, 0, 6, false }, { 2, 2, 0, 4, false }, - { 2, 0, 0, 6, false }, { 3, 0, 0, 6, false }, - { -1 } } - }, - /* 11111 */ - { true /* reserved */ }, -}; - -/* This partition table is used when the mode has two subsets. Each - * partition is represented by a 32-bit value which gives 2 bits per texel - * within the block. The value of the two bits represents which subset to use - * (0 or 1). - */ -static const uint32_t -partition_table1[N_PARTITIONS] = { - 0x50505050U, 0x40404040U, 0x54545454U, 0x54505040U, - 0x50404000U, 0x55545450U, 0x55545040U, 0x54504000U, - 0x50400000U, 0x55555450U, 0x55544000U, 0x54400000U, - 0x55555440U, 0x55550000U, 0x55555500U, 0x55000000U, - 0x55150100U, 0x00004054U, 0x15010000U, 0x00405054U, - 0x00004050U, 0x15050100U, 0x05010000U, 0x40505054U, - 0x00404050U, 0x05010100U, 0x14141414U, 0x05141450U, - 0x01155440U, 0x00555500U, 0x15014054U, 0x05414150U, - 0x44444444U, 0x55005500U, 0x11441144U, 0x05055050U, - 0x05500550U, 0x11114444U, 0x41144114U, 0x44111144U, - 0x15055054U, 0x01055040U, 0x05041050U, 0x05455150U, - 0x14414114U, 0x50050550U, 0x41411414U, 0x00141400U, - 0x00041504U, 0x00105410U, 0x10541000U, 0x04150400U, - 0x50410514U, 0x41051450U, 0x05415014U, 0x14054150U, - 0x41050514U, 0x41505014U, 0x40011554U, 0x54150140U, - 0x50505500U, 0x00555050U, 0x15151010U, 0x54540404U, -}; - -/* This partition table is used when the mode has three subsets. In this case - * the values can be 0, 1 or 2. - */ -static const uint32_t -partition_table2[N_PARTITIONS] = { - 0xaa685050U, 0x6a5a5040U, 0x5a5a4200U, 0x5450a0a8U, - 0xa5a50000U, 0xa0a05050U, 0x5555a0a0U, 0x5a5a5050U, - 0xaa550000U, 0xaa555500U, 0xaaaa5500U, 0x90909090U, - 0x94949494U, 0xa4a4a4a4U, 0xa9a59450U, 0x2a0a4250U, - 0xa5945040U, 0x0a425054U, 0xa5a5a500U, 0x55a0a0a0U, - 0xa8a85454U, 0x6a6a4040U, 0xa4a45000U, 0x1a1a0500U, - 0x0050a4a4U, 0xaaa59090U, 0x14696914U, 0x69691400U, - 0xa08585a0U, 0xaa821414U, 0x50a4a450U, 0x6a5a0200U, - 0xa9a58000U, 0x5090a0a8U, 0xa8a09050U, 0x24242424U, - 0x00aa5500U, 0x24924924U, 0x24499224U, 0x50a50a50U, - 0x500aa550U, 0xaaaa4444U, 0x66660000U, 0xa5a0a5a0U, - 0x50a050a0U, 0x69286928U, 0x44aaaa44U, 0x66666600U, - 0xaa444444U, 0x54a854a8U, 0x95809580U, 0x96969600U, - 0xa85454a8U, 0x80959580U, 0xaa141414U, 0x96960000U, - 0xaaaa1414U, 0xa05050a0U, 0xa0a5a5a0U, 0x96000000U, - 0x40804080U, 0xa9a8a9a8U, 0xaaaaaa44U, 0x2a4a5254U -}; - -static const uint8_t -anchor_indices[][N_PARTITIONS] = { - /* Anchor index values for the second subset of two-subset partitioning */ - { - 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, - 0xf,0x2,0x8,0x2,0x2,0x8,0x8,0xf,0x2,0x8,0x2,0x2,0x8,0x8,0x2,0x2, - 0xf,0xf,0x6,0x8,0x2,0x8,0xf,0xf,0x2,0x8,0x2,0x2,0x2,0xf,0xf,0x6, - 0x6,0x2,0x6,0x8,0xf,0xf,0x2,0x2,0xf,0xf,0xf,0xf,0xf,0x2,0x2,0xf - }, - - /* Anchor index values for the second subset of three-subset partitioning */ - { - 0x3,0x3,0xf,0xf,0x8,0x3,0xf,0xf,0x8,0x8,0x6,0x6,0x6,0x5,0x3,0x3, - 0x3,0x3,0x8,0xf,0x3,0x3,0x6,0xa,0x5,0x8,0x8,0x6,0x8,0x5,0xf,0xf, - 0x8,0xf,0x3,0x5,0x6,0xa,0x8,0xf,0xf,0x3,0xf,0x5,0xf,0xf,0xf,0xf, - 0x3,0xf,0x5,0x5,0x5,0x8,0x5,0xa,0x5,0xa,0x8,0xd,0xf,0xc,0x3,0x3 - }, - - /* Anchor index values for the third subset of three-subset - * partitioning - */ - { - 0xf,0x8,0x8,0x3,0xf,0xf,0x3,0x8,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0x8, - 0xf,0x8,0xf,0x3,0xf,0x8,0xf,0x8,0x3,0xf,0x6,0xa,0xf,0xf,0xa,0x8, - 0xf,0x3,0xf,0xa,0xa,0x8,0x9,0xa,0x6,0xf,0x8,0xf,0x3,0x6,0x6,0x8, - 0xf,0x3,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0x3,0xf,0xf,0x8 - } -}; - -static int -extract_bits(const uint8_t *block, - int offset, - int n_bits) -{ - int byte_index = offset / 8; - int bit_index = offset % 8; - int n_bits_in_byte = MIN2(n_bits, 8 - bit_index); - int result = 0; - int bit = 0; - - while (true) { - result |= ((block[byte_index] >> bit_index) & - ((1 << n_bits_in_byte) - 1)) << bit; - - n_bits -= n_bits_in_byte; - - if (n_bits <= 0) - return result; - - bit += n_bits_in_byte; - byte_index++; - bit_index = 0; - n_bits_in_byte = MIN2(n_bits, 8); - } -} - -static uint8_t -expand_component(uint8_t byte, - int n_bits) -{ - /* Expands a n-bit quantity into a byte by copying the most-significant - * bits into the unused least-significant bits. - */ - return byte << (8 - n_bits) | (byte >> (2 * n_bits - 8)); -} - -static int -extract_unorm_endpoints(const struct bptc_unorm_mode *mode, - const uint8_t *block, - int bit_offset, - uint8_t endpoints[][4]) -{ - int component; - int subset; - int endpoint; - int pbit; - int n_components; - - /* Extract each color component */ - for (component = 0; component < 3; component++) { - for (subset = 0; subset < mode->n_subsets; subset++) { - for (endpoint = 0; endpoint < 2; endpoint++) { - endpoints[subset * 2 + endpoint][component] = - extract_bits(block, bit_offset, mode->n_color_bits); - bit_offset += mode->n_color_bits; - } - } - } - - /* Extract the alpha values */ - if (mode->n_alpha_bits > 0) { - for (subset = 0; subset < mode->n_subsets; subset++) { - for (endpoint = 0; endpoint < 2; endpoint++) { - endpoints[subset * 2 + endpoint][3] = - extract_bits(block, bit_offset, mode->n_alpha_bits); - bit_offset += mode->n_alpha_bits; - } - } - - n_components = 4; - } else { - for (subset = 0; subset < mode->n_subsets; subset++) - for (endpoint = 0; endpoint < 2; endpoint++) - endpoints[subset * 2 + endpoint][3] = 255; - - n_components = 3; - } - - /* Add in the p-bits */ - if (mode->has_endpoint_pbits) { - for (subset = 0; subset < mode->n_subsets; subset++) { - for (endpoint = 0; endpoint < 2; endpoint++) { - pbit = extract_bits(block, bit_offset, 1); - bit_offset += 1; - - for (component = 0; component < n_components; component++) { - endpoints[subset * 2 + endpoint][component] <<= 1; - endpoints[subset * 2 + endpoint][component] |= pbit; - } - } - } - } else if (mode->has_shared_pbits) { - for (subset = 0; subset < mode->n_subsets; subset++) { - pbit = extract_bits(block, bit_offset, 1); - bit_offset += 1; - - for (endpoint = 0; endpoint < 2; endpoint++) { - for (component = 0; component < n_components; component++) { - endpoints[subset * 2 + endpoint][component] <<= 1; - endpoints[subset * 2 + endpoint][component] |= pbit; - } - } - } - } - - /* Expand the n-bit values to a byte */ - for (subset = 0; subset < mode->n_subsets; subset++) { - for (endpoint = 0; endpoint < 2; endpoint++) { - for (component = 0; component < 3; component++) { - endpoints[subset * 2 + endpoint][component] = - expand_component(endpoints[subset * 2 + endpoint][component], - mode->n_color_bits + - mode->has_endpoint_pbits + - mode->has_shared_pbits); - } - - if (mode->n_alpha_bits > 0) { - endpoints[subset * 2 + endpoint][3] = - expand_component(endpoints[subset * 2 + endpoint][3], - mode->n_alpha_bits + - mode->has_endpoint_pbits + - mode->has_shared_pbits); - } - } - } - - return bit_offset; -} - -static bool -is_anchor(int n_subsets, - int partition_num, - int texel) -{ - if (texel == 0) - return true; - - switch (n_subsets) { - case 1: - return false; - case 2: - return anchor_indices[0][partition_num] == texel; - case 3: - return (anchor_indices[1][partition_num] == texel || - anchor_indices[2][partition_num] == texel); - default: - assert(false); - return false; - } -} - -static int -count_anchors_before_texel(int n_subsets, - int partition_num, - int texel) -{ - int count = 1; - - if (texel == 0) - return 0; - - switch (n_subsets) { - case 1: - break; - case 2: - if (texel > anchor_indices[0][partition_num]) - count++; - break; - case 3: - if (texel > anchor_indices[1][partition_num]) - count++; - if (texel > anchor_indices[2][partition_num]) - count++; - break; - default: - assert(false); - return 0; - } - - return count; -} - -static int32_t -interpolate(int32_t a, int32_t b, - int index, - int index_bits) -{ - static const uint8_t weights2[] = { 0, 21, 43, 64 }; - static const uint8_t weights3[] = { 0, 9, 18, 27, 37, 46, 55, 64 }; - static const uint8_t weights4[] = - { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; - static const uint8_t *weights[] = { - NULL, NULL, weights2, weights3, weights4 - }; - int weight; - - weight = weights[index_bits][index]; - - return ((64 - weight) * a + weight * b + 32) >> 6; -} - -static void -apply_rotation(int rotation, - uint8_t *result) -{ - uint8_t t; - - if (rotation == 0) - return; - - rotation--; - - t = result[rotation]; - result[rotation] = result[3]; - result[3] = t; -} - -static void -fetch_rgba_unorm_from_block(const uint8_t *block, - uint8_t *result, - int texel) -{ - int mode_num = ffs(block[0]); - const struct bptc_unorm_mode *mode; - int bit_offset, secondary_bit_offset; - int partition_num; - int subset_num; - int rotation; - int index_selection; - int index_bits; - int indices[2]; - int index; - int anchors_before_texel; - bool anchor; - uint8_t endpoints[3 * 2][4]; - uint32_t subsets; - int component; - - if (mode_num == 0) { - /* According to the spec this mode is reserved and shouldn't be used. */ - memset(result, 0, 4); - return; - } - - mode = bptc_unorm_modes + mode_num - 1; - bit_offset = mode_num; - - partition_num = extract_bits(block, bit_offset, mode->n_partition_bits); - bit_offset += mode->n_partition_bits; - - switch (mode->n_subsets) { - case 1: - subsets = 0; - break; - case 2: - subsets = partition_table1[partition_num]; - break; - case 3: - subsets = partition_table2[partition_num]; - break; - default: - assert(false); - return; - } - - if (mode->has_rotation_bits) { - rotation = extract_bits(block, bit_offset, 2); - bit_offset += 2; - } else { - rotation = 0; - } - - if (mode->has_index_selection_bit) { - index_selection = extract_bits(block, bit_offset, 1); - bit_offset++; - } else { - index_selection = 0; - } - - bit_offset = extract_unorm_endpoints(mode, block, bit_offset, endpoints); - - anchors_before_texel = count_anchors_before_texel(mode->n_subsets, - partition_num, texel); - - /* Calculate the offset to the secondary index */ - secondary_bit_offset = (bit_offset + - BLOCK_SIZE * BLOCK_SIZE * mode->n_index_bits - - mode->n_subsets + - mode->n_secondary_index_bits * texel - - anchors_before_texel); - - /* Calculate the offset to the primary index for this texel */ - bit_offset += mode->n_index_bits * texel - anchors_before_texel; - - subset_num = (subsets >> (texel * 2)) & 3; - - anchor = is_anchor(mode->n_subsets, partition_num, texel); - - index_bits = mode->n_index_bits; - if (anchor) - index_bits--; - indices[0] = extract_bits(block, bit_offset, index_bits); - - if (mode->n_secondary_index_bits) { - index_bits = mode->n_secondary_index_bits; - if (anchor) - index_bits--; - indices[1] = extract_bits(block, secondary_bit_offset, index_bits); - } - - index = indices[index_selection]; - index_bits = (index_selection ? - mode->n_secondary_index_bits : - mode->n_index_bits); - - for (component = 0; component < 3; component++) - result[component] = interpolate(endpoints[subset_num * 2][component], - endpoints[subset_num * 2 + 1][component], - index, - index_bits); - - /* Alpha uses the opposite index from the color components */ - if (mode->n_secondary_index_bits && !index_selection) { - index = indices[1]; - index_bits = mode->n_secondary_index_bits; - } else { - index = indices[0]; - index_bits = mode->n_index_bits; - } - - result[3] = interpolate(endpoints[subset_num * 2][3], - endpoints[subset_num * 2 + 1][3], - index, - index_bits); - - apply_rotation(rotation, result); -} - -static void -decompress_rgba_unorm_block(int src_width, int src_height, - const uint8_t *block, - uint8_t *dst_row, int dst_rowstride) -{ - int mode_num = ffs(block[0]); - const struct bptc_unorm_mode *mode; - int bit_offset_head, bit_offset, secondary_bit_offset; - int partition_num; - int subset_num; - int rotation; - int index_selection; - int index_bits; - int indices[2]; - int index; - int anchors_before_texel; - bool anchor; - uint8_t endpoints[3 * 2][4]; - uint32_t subsets; - int component; - unsigned x, y; - - if (mode_num == 0) { - /* According to the spec this mode is reserved and shouldn't be used. */ - for(y = 0; y < src_height; y += 1) { - uint8_t *result = dst_row; - memset(result, 0, 4 * src_width); - dst_row += dst_rowstride; - } - return; - } - - mode = bptc_unorm_modes + mode_num - 1; - bit_offset_head = mode_num; - - partition_num = extract_bits(block, bit_offset_head, mode->n_partition_bits); - bit_offset_head += mode->n_partition_bits; - - switch (mode->n_subsets) { - case 1: - subsets = 0; - break; - case 2: - subsets = partition_table1[partition_num]; - break; - case 3: - subsets = partition_table2[partition_num]; - break; - default: - assert(false); - return; - } - - if (mode->has_rotation_bits) { - rotation = extract_bits(block, bit_offset_head, 2); - bit_offset_head += 2; - } else { - rotation = 0; - } - - if (mode->has_index_selection_bit) { - index_selection = extract_bits(block, bit_offset_head, 1); - bit_offset_head++; - } else { - index_selection = 0; - } - - bit_offset_head = extract_unorm_endpoints(mode, block, bit_offset_head, endpoints); - - for(y = 0; y < src_height; y += 1) { - uint8_t *result = dst_row; - for(x = 0; x < src_width; x += 1) { - int texel; - texel = x + y * 4; - bit_offset = bit_offset_head; - - anchors_before_texel = count_anchors_before_texel(mode->n_subsets, - partition_num, - texel); - - /* Calculate the offset to the secondary index */ - secondary_bit_offset = (bit_offset + - BLOCK_SIZE * BLOCK_SIZE * mode->n_index_bits - - mode->n_subsets + - mode->n_secondary_index_bits * texel - - anchors_before_texel); - - /* Calculate the offset to the primary index for this texel */ - bit_offset += mode->n_index_bits * texel - anchors_before_texel; - - subset_num = (subsets >> (texel * 2)) & 3; - - anchor = is_anchor(mode->n_subsets, partition_num, texel); - - index_bits = mode->n_index_bits; - if (anchor) - index_bits--; - indices[0] = extract_bits(block, bit_offset, index_bits); - - if (mode->n_secondary_index_bits) { - index_bits = mode->n_secondary_index_bits; - if (anchor) - index_bits--; - indices[1] = extract_bits(block, secondary_bit_offset, index_bits); - } - - index = indices[index_selection]; - index_bits = (index_selection ? - mode->n_secondary_index_bits : - mode->n_index_bits); - - for (component = 0; component < 3; component++) - result[component] = interpolate(endpoints[subset_num * 2][component], - endpoints[subset_num * 2 + 1][component], - index, - index_bits); - - /* Alpha uses the opposite index from the color components */ - if (mode->n_secondary_index_bits && !index_selection) { - index = indices[1]; - index_bits = mode->n_secondary_index_bits; - } else { - index = indices[0]; - index_bits = mode->n_index_bits; - } - - result[3] = interpolate(endpoints[subset_num * 2][3], - endpoints[subset_num * 2 + 1][3], - index, - index_bits); - - apply_rotation(rotation, result); - result += 4; - } - dst_row += dst_rowstride; - } -} - -static void -decompress_rgba_unorm(int width, int height, - const uint8_t *src, int src_rowstride, - uint8_t *dst, int dst_rowstride) -{ - int src_row_diff; - int y, x; - - if (src_rowstride >= width * 4) - src_row_diff = src_rowstride - ((width + 3) & ~3) * 4; - else - src_row_diff = 0; - - for (y = 0; y < height; y += BLOCK_SIZE) { - for (x = 0; x < width; x += BLOCK_SIZE) { - decompress_rgba_unorm_block(MIN2(width - x, BLOCK_SIZE), - MIN2(height - y, BLOCK_SIZE), - src, - dst + x * 4 + y * dst_rowstride, - dst_rowstride); - src += BLOCK_BYTES; - } - src += src_row_diff; - } -} - -static int -signed_unquantize(int value, int n_endpoint_bits) -{ - bool sign; - - if (n_endpoint_bits >= 16) - return value; - - if (value == 0) - return 0; - - sign = false; - - if (value < 0) { - sign = true; - value = -value; - } - - if (value >= (1 << (n_endpoint_bits - 1)) - 1) - value = 0x7fff; - else - value = ((value << 15) + 0x4000) >> (n_endpoint_bits - 1); - - if (sign) - value = -value; - - return value; -} - -static int -unsigned_unquantize(int value, int n_endpoint_bits) -{ - if (n_endpoint_bits >= 15) - return value; - - if (value == 0) - return 0; - - if (value == (1 << n_endpoint_bits) - 1) - return 0xffff; - - return ((value << 15) + 0x4000) >> (n_endpoint_bits - 1); -} - -static int -extract_float_endpoints(const struct bptc_float_mode *mode, - const uint8_t *block, - int bit_offset, - int32_t endpoints[][3], - bool is_signed) -{ - const struct bptc_float_bitfield *bitfield; - int endpoint, component; - int n_endpoints; - int value; - int i; - - if (mode->n_partition_bits) - n_endpoints = 4; - else - n_endpoints = 2; - - memset(endpoints, 0, sizeof endpoints[0][0] * n_endpoints * 3); - - for (bitfield = mode->bitfields; bitfield->endpoint != -1; bitfield++) { - value = extract_bits(block, bit_offset, bitfield->n_bits); - bit_offset += bitfield->n_bits; - - if (bitfield->reverse) { - for (i = 0; i < bitfield->n_bits; i++) { - if (value & (1 << i)) - endpoints[bitfield->endpoint][bitfield->component] |= - 1 << ((bitfield->n_bits - 1 - i) + bitfield->offset); - } - } else { - endpoints[bitfield->endpoint][bitfield->component] |= - value << bitfield->offset; - } - } - - if (mode->transformed_endpoints) { - /* The endpoints are specified as signed offsets from e0 */ - for (endpoint = 1; endpoint < n_endpoints; endpoint++) { - for (component = 0; component < 3; component++) { - value = util_sign_extend(endpoints[endpoint][component], - mode->n_delta_bits[component]); - endpoints[endpoint][component] = - ((endpoints[0][component] + value) & - ((1 << mode->n_endpoint_bits) - 1)); - } - } - } - - if (is_signed) { - for (endpoint = 0; endpoint < n_endpoints; endpoint++) { - for (component = 0; component < 3; component++) { - value = util_sign_extend(endpoints[endpoint][component], - mode->n_endpoint_bits); - endpoints[endpoint][component] = - signed_unquantize(value, mode->n_endpoint_bits); - } - } - } else { - for (endpoint = 0; endpoint < n_endpoints; endpoint++) { - for (component = 0; component < 3; component++) { - endpoints[endpoint][component] = - unsigned_unquantize(endpoints[endpoint][component], - mode->n_endpoint_bits); - } - } - } - - return bit_offset; -} - -static int32_t -finish_unsigned_unquantize(int32_t value) -{ - return value * 31 / 64; -} - -static int32_t -finish_signed_unquantize(int32_t value) -{ - if (value < 0) - return (-value * 31 / 32) | 0x8000; - else - return value * 31 / 32; -} - -static void -fetch_rgb_float_from_block(const uint8_t *block, - float *result, - int texel, - bool is_signed) -{ - int mode_num; - const struct bptc_float_mode *mode; - int bit_offset; - int partition_num; - int subset_num; - int index_bits; - int index; - int anchors_before_texel; - int32_t endpoints[2 * 2][3]; - uint32_t subsets; - int n_subsets; - int component; - int32_t value; - - if (block[0] & 0x2) { - mode_num = (((block[0] >> 1) & 0xe) | (block[0] & 1)) + 2; - bit_offset = 5; - } else { - mode_num = block[0] & 3; - bit_offset = 2; - } - - mode = bptc_float_modes + mode_num; - - if (mode->reserved) { - memset(result, 0, sizeof result[0] * 3); - result[3] = 1.0f; - return; - } - - bit_offset = extract_float_endpoints(mode, block, bit_offset, - endpoints, is_signed); - - if (mode->n_partition_bits) { - partition_num = extract_bits(block, bit_offset, mode->n_partition_bits); - bit_offset += mode->n_partition_bits; - - subsets = partition_table1[partition_num]; - n_subsets = 2; - } else { - partition_num = 0; - subsets = 0; - n_subsets = 1; - } - - anchors_before_texel = - count_anchors_before_texel(n_subsets, partition_num, texel); - - /* Calculate the offset to the primary index for this texel */ - bit_offset += mode->n_index_bits * texel - anchors_before_texel; - - subset_num = (subsets >> (texel * 2)) & 3; - - index_bits = mode->n_index_bits; - if (is_anchor(n_subsets, partition_num, texel)) - index_bits--; - index = extract_bits(block, bit_offset, index_bits); - - for (component = 0; component < 3; component++) { - value = interpolate(endpoints[subset_num * 2][component], - endpoints[subset_num * 2 + 1][component], - index, - mode->n_index_bits); - - if (is_signed) - value = finish_signed_unquantize(value); - else - value = finish_unsigned_unquantize(value); - - result[component] = _mesa_half_to_float(value); - } - - result[3] = 1.0f; -} - -static void -decompress_rgb_float_block(unsigned src_width, unsigned src_height, - const uint8_t *block, - float *dst_row, unsigned dst_rowstride, - bool is_signed) -{ - int mode_num; - const struct bptc_float_mode *mode; - int bit_offset_head, bit_offset; - int partition_num; - int subset_num; - int index_bits; - int index; - int anchors_before_texel; - int32_t endpoints[2 * 2][3]; - uint32_t subsets; - int n_subsets; - int component; - int32_t value; - unsigned x, y; - - if (block[0] & 0x2) { - mode_num = (((block[0] >> 1) & 0xe) | (block[0] & 1)) + 2; - bit_offset_head = 5; - } else { - mode_num = block[0] & 3; - bit_offset_head = 2; - } - - mode = bptc_float_modes + mode_num; - - if (mode->reserved) { - for(y = 0; y < src_height; y += 1) { - float *result = dst_row; - memset(result, 0, sizeof result[0] * 4 * src_width); - for(x = 0; x < src_width; x += 1) { - result[3] = 1.0f; - result += 4; - } - dst_row += dst_rowstride / sizeof dst_row[0]; - } - return; - } - - bit_offset_head = extract_float_endpoints(mode, block, bit_offset_head, - endpoints, is_signed); - - if (mode->n_partition_bits) { - partition_num = extract_bits(block, bit_offset_head, mode->n_partition_bits); - bit_offset_head += mode->n_partition_bits; - - subsets = partition_table1[partition_num]; - n_subsets = 2; - } else { - partition_num = 0; - subsets = 0; - n_subsets = 1; - } - - for(y = 0; y < src_height; y += 1) { - float *result = dst_row; - for(x = 0; x < src_width; x += 1) { - int texel; - - bit_offset = bit_offset_head; - - texel = x + y * 4; - - anchors_before_texel = - count_anchors_before_texel(n_subsets, partition_num, texel); - - /* Calculate the offset to the primary index for this texel */ - bit_offset += mode->n_index_bits * texel - anchors_before_texel; - - subset_num = (subsets >> (texel * 2)) & 3; - - index_bits = mode->n_index_bits; - if (is_anchor(n_subsets, partition_num, texel)) - index_bits--; - index = extract_bits(block, bit_offset, index_bits); - - for (component = 0; component < 3; component++) { - value = interpolate(endpoints[subset_num * 2][component], - endpoints[subset_num * 2 + 1][component], - index, - mode->n_index_bits); - - if (is_signed) - value = finish_signed_unquantize(value); - else - value = finish_unsigned_unquantize(value); - - result[component] = _mesa_half_to_float(value); - } - - result[3] = 1.0f; - result += 4; - } - dst_row += dst_rowstride / sizeof dst_row[0]; - } -} - -static void -decompress_rgb_float(int width, int height, - const uint8_t *src, int src_rowstride, - float *dst, int dst_rowstride, bool is_signed) -{ - int src_row_diff; - int y, x; - - if (src_rowstride >= width * 4) - src_row_diff = src_rowstride - ((width + 3) & ~3) * 4; - else - src_row_diff = 0; - - for (y = 0; y < height; y += BLOCK_SIZE) { - for (x = 0; x < width; x += BLOCK_SIZE) { - decompress_rgb_float_block(MIN2(width - x, BLOCK_SIZE), - MIN2(height - y, BLOCK_SIZE), - src, - (dst + x * 4 + - (y * dst_rowstride / sizeof dst[0])), - dst_rowstride, is_signed); - src += BLOCK_BYTES; - } - src += src_row_diff; - } -} - -static void -decompress_rgb_fp16_block(unsigned src_width, unsigned src_height, - const uint8_t *block, - uint16_t *dst_row, unsigned dst_rowstride, - bool is_signed) -{ - int mode_num; - const struct bptc_float_mode *mode; - int bit_offset_head, bit_offset; - int partition_num; - int subset_num; - int index_bits; - int index; - int anchors_before_texel; - int32_t endpoints[2 * 2][3]; - uint32_t subsets; - int n_subsets; - int component; - int32_t value; - unsigned x, y; - - if (block[0] & 0x2) { - mode_num = (((block[0] >> 1) & 0xe) | (block[0] & 1)) + 2; - bit_offset_head = 5; - } else { - mode_num = block[0] & 3; - bit_offset_head = 2; - } - - mode = bptc_float_modes + mode_num; - - if (mode->reserved) { - for(y = 0; y < src_height; y += 1) { - uint16_t *result = dst_row; - memset(result, 0, sizeof result[0] * 4 * src_width); - for(x = 0; x < src_width; x += 1) { - result[3] = 1.0f; - result += 4; - } - dst_row += dst_rowstride / sizeof dst_row[0]; - } - return; - } - - bit_offset_head = extract_float_endpoints(mode, block, bit_offset_head, - endpoints, is_signed); - - if (mode->n_partition_bits) { - partition_num = extract_bits(block, bit_offset_head, mode->n_partition_bits); - bit_offset_head += mode->n_partition_bits; - - subsets = partition_table1[partition_num]; - n_subsets = 2; - } else { - partition_num = 0; - subsets = 0; - n_subsets = 1; - } - - for(y = 0; y < src_height; y += 1) { - uint16_t *result = dst_row; - for(x = 0; x < src_width; x += 1) { - int texel; - - bit_offset = bit_offset_head; - - texel = x + y * 4; - - anchors_before_texel = - count_anchors_before_texel(n_subsets, partition_num, texel); - - /* Calculate the offset to the primary index for this texel */ - bit_offset += mode->n_index_bits * texel - anchors_before_texel; - - subset_num = (subsets >> (texel * 2)) & 3; - - index_bits = mode->n_index_bits; - if (is_anchor(n_subsets, partition_num, texel)) - index_bits--; - index = extract_bits(block, bit_offset, index_bits); - - for (component = 0; component < 3; component++) { - value = interpolate(endpoints[subset_num * 2][component], - endpoints[subset_num * 2 + 1][component], - index, - mode->n_index_bits); - - if (is_signed) - value = finish_signed_unquantize(value); - else - value = finish_unsigned_unquantize(value); - - result[component] = (uint16_t)value; - } - - result[3] = FP16_ONE; - result += 4; - } - dst_row += dst_rowstride / sizeof dst_row[0]; - } -} - -static void -decompress_rgb_fp16(int width, int height, - const uint8_t *src, int src_rowstride, - uint16_t *dst, int dst_rowstride, bool is_signed) -{ - int src_row_diff; - int y, x; - - if (src_rowstride >= width * 4) - src_row_diff = src_rowstride - ((width + 3) & ~3) * 4; - else - src_row_diff = 0; - - for (y = 0; y < height; y += BLOCK_SIZE) { - for (x = 0; x < width; x += BLOCK_SIZE) { - decompress_rgb_fp16_block(MIN2(width - x, BLOCK_SIZE), - MIN2(height - y, BLOCK_SIZE), - src, - (dst + x * 4 + - (y * dst_rowstride / sizeof dst[0])), - dst_rowstride, is_signed); - src += BLOCK_BYTES; - } - src += src_row_diff; - } -} - -static void -write_bits(struct bit_writer *writer, int n_bits, int value) -{ - do { - if (n_bits + writer->pos >= 8) { - *(writer->dst++) = writer->buf | (value << writer->pos); - writer->buf = 0; - value >>= (8 - writer->pos); - n_bits -= (8 - writer->pos); - writer->pos = 0; - } else { - writer->buf |= value << writer->pos; - writer->pos += n_bits; - break; - } - } while (n_bits > 0); -} - -static void -get_average_luminance_alpha_unorm(int width, int height, - const uint8_t *src, int src_rowstride, - int *average_luminance, int *average_alpha) -{ - int luminance_sum = 0, alpha_sum = 0; - int y, x; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - luminance_sum += src[0] + src[1] + src[2]; - alpha_sum += src[3]; - src += 4; - } - src += src_rowstride - width * 4; - } - - *average_luminance = luminance_sum / (width * height); - *average_alpha = alpha_sum / (width * height); -} - -static void -get_rgba_endpoints_unorm(int width, int height, - const uint8_t *src, int src_rowstride, - int average_luminance, int average_alpha, - uint8_t endpoints[][4]) -{ - int endpoint_luminances[2]; - int midpoint; - int sums[2][4]; - int endpoint; - int luminance; - uint8_t temp[3]; - const uint8_t *p = src; - int rgb_left_endpoint_count = 0; - int alpha_left_endpoint_count = 0; - int y, x, i; - - memset(sums, 0, sizeof sums); - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - luminance = p[0] + p[1] + p[2]; - if (luminance < average_luminance) { - endpoint = 0; - rgb_left_endpoint_count++; - } else { - endpoint = 1; - } - for (i = 0; i < 3; i++) - sums[endpoint][i] += p[i]; - - if (p[2] < average_alpha) { - endpoint = 0; - alpha_left_endpoint_count++; - } else { - endpoint = 1; - } - sums[endpoint][3] += p[3]; - - p += 4; - } - - p += src_rowstride - width * 4; - } - - if (rgb_left_endpoint_count == 0 || - rgb_left_endpoint_count == width * height) { - for (i = 0; i < 3; i++) - endpoints[0][i] = endpoints[1][i] = - (sums[0][i] + sums[1][i]) / (width * height); - } else { - for (i = 0; i < 3; i++) { - endpoints[0][i] = sums[0][i] / rgb_left_endpoint_count; - endpoints[1][i] = (sums[1][i] / - (width * height - rgb_left_endpoint_count)); - } - } - - if (alpha_left_endpoint_count == 0 || - alpha_left_endpoint_count == width * height) { - endpoints[0][3] = endpoints[1][3] = - (sums[0][3] + sums[1][3]) / (width * height); - } else { - endpoints[0][3] = sums[0][3] / alpha_left_endpoint_count; - endpoints[1][3] = (sums[1][3] / - (width * height - alpha_left_endpoint_count)); - } - - /* We may need to swap the endpoints to ensure the most-significant bit of - * the first index is zero */ - - for (endpoint = 0; endpoint < 2; endpoint++) { - endpoint_luminances[endpoint] = - endpoints[endpoint][0] + - endpoints[endpoint][1] + - endpoints[endpoint][2]; - } - midpoint = (endpoint_luminances[0] + endpoint_luminances[1]) / 2; - - if ((src[0] + src[1] + src[2] <= midpoint) != - (endpoint_luminances[0] <= midpoint)) { - memcpy(temp, endpoints[0], 3); - memcpy(endpoints[0], endpoints[1], 3); - memcpy(endpoints[1], temp, 3); - } - - /* Same for the alpha endpoints */ - - midpoint = (endpoints[0][3] + endpoints[1][3]) / 2; - - if ((src[3] <= midpoint) != (endpoints[0][3] <= midpoint)) { - temp[0] = endpoints[0][3]; - endpoints[0][3] = endpoints[1][3]; - endpoints[1][3] = temp[0]; - } -} - -static void -write_rgb_indices_unorm(struct bit_writer *writer, - int src_width, int src_height, - const uint8_t *src, int src_rowstride, - uint8_t endpoints[][4]) -{ - int luminance; - int endpoint_luminances[2]; - int endpoint; - int index; - int y, x; - - for (endpoint = 0; endpoint < 2; endpoint++) { - endpoint_luminances[endpoint] = - endpoints[endpoint][0] + - endpoints[endpoint][1] + - endpoints[endpoint][2]; - } - - /* If the endpoints have the same luminance then we'll just use index 0 for - * all of the texels */ - if (endpoint_luminances[0] == endpoint_luminances[1]) { - write_bits(writer, BLOCK_SIZE * BLOCK_SIZE * 2 - 1, 0); - return; - } - - for (y = 0; y < src_height; y++) { - for (x = 0; x < src_width; x++) { - luminance = src[0] + src[1] + src[2]; - - index = ((luminance - endpoint_luminances[0]) * 3 / - (endpoint_luminances[1] - endpoint_luminances[0])); - if (index < 0) - index = 0; - else if (index > 3) - index = 3; - - assert(x != 0 || y != 0 || index < 2); - - write_bits(writer, (x == 0 && y == 0) ? 1 : 2, index); - - src += 4; - } - - /* Pad the indices out to the block size */ - if (src_width < BLOCK_SIZE) - write_bits(writer, 2 * (BLOCK_SIZE - src_width), 0); - - src += src_rowstride - src_width * 4; - } - - /* Pad the indices out to the block size */ - if (src_height < BLOCK_SIZE) - write_bits(writer, 2 * BLOCK_SIZE * (BLOCK_SIZE - src_height), 0); -} - -static void -write_alpha_indices_unorm(struct bit_writer *writer, - int src_width, int src_height, - const uint8_t *src, int src_rowstride, - uint8_t endpoints[][4]) -{ - int index; - int y, x; - - /* If the endpoints have the same alpha then we'll just use index 0 for - * all of the texels */ - if (endpoints[0][3] == endpoints[1][3]) { - write_bits(writer, BLOCK_SIZE * BLOCK_SIZE * 3 - 1, 0); - return; - } - - for (y = 0; y < src_height; y++) { - for (x = 0; x < src_width; x++) { - index = (((int) src[3] - (int) endpoints[0][3]) * 7 / - ((int) endpoints[1][3] - endpoints[0][3])); - if (index < 0) - index = 0; - else if (index > 7) - index = 7; - - assert(x != 0 || y != 0 || index < 4); - - /* The first index has one less bit */ - write_bits(writer, (x == 0 && y == 0) ? 2 : 3, index); - - src += 4; - } - - /* Pad the indices out to the block size */ - if (src_width < BLOCK_SIZE) - write_bits(writer, 3 * (BLOCK_SIZE - src_width), 0); - - src += src_rowstride - src_width * 4; - } - - /* Pad the indices out to the block size */ - if (src_height < BLOCK_SIZE) - write_bits(writer, 3 * BLOCK_SIZE * (BLOCK_SIZE - src_height), 0); -} - -static void -compress_rgba_unorm_block(int src_width, int src_height, - const uint8_t *src, int src_rowstride, - uint8_t *dst) -{ - int average_luminance, average_alpha; - uint8_t endpoints[2][4]; - struct bit_writer writer; - int component, endpoint; - - get_average_luminance_alpha_unorm(src_width, src_height, src, src_rowstride, - &average_luminance, &average_alpha); - get_rgba_endpoints_unorm(src_width, src_height, src, src_rowstride, - average_luminance, average_alpha, - endpoints); - - writer.dst = dst; - writer.pos = 0; - writer.buf = 0; - - write_bits(&writer, 5, 0x10); /* mode 4 */ - write_bits(&writer, 2, 0); /* rotation 0 */ - write_bits(&writer, 1, 0); /* index selection bit */ - - /* Write the color endpoints */ - for (component = 0; component < 3; component++) - for (endpoint = 0; endpoint < 2; endpoint++) - write_bits(&writer, 5, endpoints[endpoint][component] >> 3); - - /* Write the alpha endpoints */ - for (endpoint = 0; endpoint < 2; endpoint++) - write_bits(&writer, 6, endpoints[endpoint][3] >> 2); - - write_rgb_indices_unorm(&writer, - src_width, src_height, - src, src_rowstride, - endpoints); - write_alpha_indices_unorm(&writer, - src_width, src_height, - src, src_rowstride, - endpoints); -} - -static void -compress_rgba_unorm(int width, int height, - const uint8_t *src, int src_rowstride, - uint8_t *dst, int dst_rowstride) -{ - int dst_row_diff; - int y, x; - - if (dst_rowstride >= width * 4) - dst_row_diff = dst_rowstride - ((width + 3) & ~3) * 4; - else - dst_row_diff = 0; - - for (y = 0; y < height; y += BLOCK_SIZE) { - for (x = 0; x < width; x += BLOCK_SIZE) { - compress_rgba_unorm_block(MIN2(width - x, BLOCK_SIZE), - MIN2(height - y, BLOCK_SIZE), - src + x * 4 + y * src_rowstride, - src_rowstride, - dst); - dst += BLOCK_BYTES; - } - dst += dst_row_diff; - } -} - -static float -get_average_luminance_float(int width, int height, - const float *src, int src_rowstride) -{ - float luminance_sum = 0; - int y, x; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - luminance_sum += src[0] + src[1] + src[2]; - src += 3; - } - src += (src_rowstride - width * 3 * sizeof (float)) / sizeof (float); - } - - return luminance_sum / (width * height); -} - -static float -clamp_value(float value, bool is_signed) -{ - if (value > 65504.0f) - return 65504.0f; - - if (is_signed) { - if (value < -65504.0f) - return -65504.0f; - else - return value; - } - - if (value < 0.0f) - return 0.0f; - - return value; -} - -static void -get_endpoints_float(int width, int height, - const float *src, int src_rowstride, - float average_luminance, float endpoints[][3], - bool is_signed) -{ - float endpoint_luminances[2]; - float midpoint; - float sums[2][3]; - int endpoint, component; - float luminance; - float temp[3]; - const float *p = src; - int left_endpoint_count = 0; - int y, x, i; - - memset(sums, 0, sizeof sums); - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - luminance = p[0] + p[1] + p[2]; - if (luminance < average_luminance) { - endpoint = 0; - left_endpoint_count++; - } else { - endpoint = 1; - } - for (i = 0; i < 3; i++) - sums[endpoint][i] += p[i]; - - p += 3; - } - - p += (src_rowstride - width * 3 * sizeof (float)) / sizeof (float); - } - - if (left_endpoint_count == 0 || - left_endpoint_count == width * height) { - for (i = 0; i < 3; i++) - endpoints[0][i] = endpoints[1][i] = - (sums[0][i] + sums[1][i]) / (width * height); - } else { - for (i = 0; i < 3; i++) { - endpoints[0][i] = sums[0][i] / left_endpoint_count; - endpoints[1][i] = sums[1][i] / (width * height - left_endpoint_count); - } - } - - /* Clamp the endpoints to the range of a half float and strip out - * infinities */ - for (endpoint = 0; endpoint < 2; endpoint++) { - for (component = 0; component < 3; component++) { - endpoints[endpoint][component] = - clamp_value(endpoints[endpoint][component], is_signed); - } - } - - /* We may need to swap the endpoints to ensure the most-significant bit of - * the first index is zero */ - - for (endpoint = 0; endpoint < 2; endpoint++) { - endpoint_luminances[endpoint] = - endpoints[endpoint][0] + - endpoints[endpoint][1] + - endpoints[endpoint][2]; - } - midpoint = (endpoint_luminances[0] + endpoint_luminances[1]) / 2.0f; - - if ((src[0] + src[1] + src[2] <= midpoint) != - (endpoint_luminances[0] <= midpoint)) { - memcpy(temp, endpoints[0], sizeof temp); - memcpy(endpoints[0], endpoints[1], sizeof temp); - memcpy(endpoints[1], temp, sizeof temp); - } -} - -static void -write_rgb_indices_float(struct bit_writer *writer, - int src_width, int src_height, - const float *src, int src_rowstride, - float endpoints[][3]) -{ - float luminance; - float endpoint_luminances[2]; - int endpoint; - int index; - int y, x; - - for (endpoint = 0; endpoint < 2; endpoint++) { - endpoint_luminances[endpoint] = - endpoints[endpoint][0] + - endpoints[endpoint][1] + - endpoints[endpoint][2]; - } - - /* If the endpoints have the same luminance then we'll just use index 0 for - * all of the texels */ - if (endpoint_luminances[0] == endpoint_luminances[1]) { - write_bits(writer, BLOCK_SIZE * BLOCK_SIZE * 4 - 1, 0); - return; - } - - for (y = 0; y < src_height; y++) { - for (x = 0; x < src_width; x++) { - luminance = src[0] + src[1] + src[2]; - - index = ((luminance - endpoint_luminances[0]) * 15 / - (endpoint_luminances[1] - endpoint_luminances[0])); - if (index < 0) - index = 0; - else if (index > 15) - index = 15; - - assert(x != 0 || y != 0 || index < 8); - - write_bits(writer, (x == 0 && y == 0) ? 3 : 4, index); - - src += 3; - } - - /* Pad the indices out to the block size */ - if (src_width < BLOCK_SIZE) - write_bits(writer, 4 * (BLOCK_SIZE - src_width), 0); - - src += (src_rowstride - src_width * 3 * sizeof (float)) / sizeof (float); - } - - /* Pad the indices out to the block size */ - if (src_height < BLOCK_SIZE) - write_bits(writer, 4 * BLOCK_SIZE * (BLOCK_SIZE - src_height), 0); -} - -static int -get_endpoint_value(float value, bool is_signed) -{ - bool sign = false; - int half; - - if (is_signed) { - half = _mesa_float_to_half(value); - - if (half & 0x8000) { - half &= 0x7fff; - sign = true; - } - - half = (32 * half / 31) >> 6; - - if (sign) - half = -half & ((1 << 10) - 1); - - return half; - } else { - if (value <= 0.0f) - return 0; - - half = _mesa_float_to_half(value); - - return (64 * half / 31) >> 6; - } -} - -static void -compress_rgb_float_block(int src_width, int src_height, - const float *src, int src_rowstride, - uint8_t *dst, - bool is_signed) -{ - float average_luminance; - float endpoints[2][3]; - struct bit_writer writer; - int component, endpoint; - int endpoint_value; - - average_luminance = - get_average_luminance_float(src_width, src_height, src, src_rowstride); - get_endpoints_float(src_width, src_height, src, src_rowstride, - average_luminance, endpoints, is_signed); - - writer.dst = dst; - writer.pos = 0; - writer.buf = 0; - - write_bits(&writer, 5, 3); /* mode 3 */ - - /* Write the endpoints */ - for (endpoint = 0; endpoint < 2; endpoint++) { - for (component = 0; component < 3; component++) { - endpoint_value = - get_endpoint_value(endpoints[endpoint][component], is_signed); - write_bits(&writer, 10, endpoint_value); - } - } - - write_rgb_indices_float(&writer, - src_width, src_height, - src, src_rowstride, - endpoints); -} - -static void -compress_rgb_float(int width, int height, - const float *src, int src_rowstride, - uint8_t *dst, int dst_rowstride, - bool is_signed) -{ - int dst_row_diff; - int y, x; - - if (dst_rowstride >= width * 4) - dst_row_diff = dst_rowstride - ((width + 3) & ~3) * 4; - else - dst_row_diff = 0; - - for (y = 0; y < height; y += BLOCK_SIZE) { - for (x = 0; x < width; x += BLOCK_SIZE) { - compress_rgb_float_block(MIN2(width - x, BLOCK_SIZE), - MIN2(height - y, BLOCK_SIZE), - src + x * 3 + - y * src_rowstride / sizeof (float), - src_rowstride, - dst, - is_signed); - dst += BLOCK_BYTES; - } - dst += dst_row_diff; - } -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_etc_tmp.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_etc_tmp.h deleted file mode 100644 index 5497566..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_etc_tmp.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2011 LunarG, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * Included by texcompress_etc1 and gallium to define ETC1 decoding routines. - */ - -struct TAG(etc1_block) { - uint32_t pixel_indices; - int flipped; - const int *modifier_tables[2]; - UINT8_TYPE base_colors[2][3]; -}; - -static UINT8_TYPE -TAG(etc1_base_color_diff_hi)(UINT8_TYPE in) -{ - return (in & 0xf8) | (in >> 5); -} - -static UINT8_TYPE -TAG(etc1_base_color_diff_lo)(UINT8_TYPE in) -{ - static const int lookup[8] = { 0, 1, 2, 3, -4, -3, -2, -1 }; - - in = (in >> 3) + lookup[in & 0x7]; - - return (in << 3) | (in >> 2); -} - -static UINT8_TYPE -TAG(etc1_base_color_ind_hi)(UINT8_TYPE in) -{ - return (in & 0xf0) | ((in & 0xf0) >> 4); -} - -static UINT8_TYPE -TAG(etc1_base_color_ind_lo)(UINT8_TYPE in) -{ - return ((in & 0xf) << 4) | (in & 0xf); -} - -static UINT8_TYPE -TAG(etc1_clamp)(UINT8_TYPE base, int modifier) -{ - int tmp = (int) base + modifier; - - /* CLAMP(tmp, 0, 255) */ - return (UINT8_TYPE) ((tmp < 0) ? 0 : ((tmp > 255) ? 255 : tmp)); -} - -static const int TAG(etc1_modifier_tables)[8][4] = { - { 2, 8, -2, -8}, - { 5, 17, -5, -17}, - { 9, 29, -9, -29}, - { 13, 42, -13, -42}, - { 18, 60, -18, -60}, - { 24, 80, -24, -80}, - { 33, 106, -33, -106}, - { 47, 183, -47, -183} -}; - -static void -TAG(etc1_parse_block)(struct TAG(etc1_block) *block, const UINT8_TYPE *src) -{ - if (src[3] & 0x2) { - /* differential mode */ - block->base_colors[0][0] = (int) TAG(etc1_base_color_diff_hi)(src[0]); - block->base_colors[1][0] = (int) TAG(etc1_base_color_diff_lo)(src[0]); - block->base_colors[0][1] = (int) TAG(etc1_base_color_diff_hi)(src[1]); - block->base_colors[1][1] = (int) TAG(etc1_base_color_diff_lo)(src[1]); - block->base_colors[0][2] = (int) TAG(etc1_base_color_diff_hi)(src[2]); - block->base_colors[1][2] = (int) TAG(etc1_base_color_diff_lo)(src[2]); - } - else { - /* individual mode */ - block->base_colors[0][0] = (int) TAG(etc1_base_color_ind_hi)(src[0]); - block->base_colors[1][0] = (int) TAG(etc1_base_color_ind_lo)(src[0]); - block->base_colors[0][1] = (int) TAG(etc1_base_color_ind_hi)(src[1]); - block->base_colors[1][1] = (int) TAG(etc1_base_color_ind_lo)(src[1]); - block->base_colors[0][2] = (int) TAG(etc1_base_color_ind_hi)(src[2]); - block->base_colors[1][2] = (int) TAG(etc1_base_color_ind_lo)(src[2]); - } - - /* pick modifier tables */ - block->modifier_tables[0] = TAG(etc1_modifier_tables)[(src[3] >> 5) & 0x7]; - block->modifier_tables[1] = TAG(etc1_modifier_tables)[(src[3] >> 2) & 0x7]; - - block->flipped = (src[3] & 0x1); - - block->pixel_indices = - (src[4] << 24) | (src[5] << 16) | (src[6] << 8) | src[7]; -} - -static void -TAG(etc1_fetch_texel)(const struct TAG(etc1_block) *block, - int x, int y, UINT8_TYPE *dst) -{ - const UINT8_TYPE *base_color; - int modifier, bit, idx, blk; - - /* get pixel index */ - bit = y + x * 4; - idx = ((block->pixel_indices >> (15 + bit)) & 0x2) | - ((block->pixel_indices >> (bit)) & 0x1); - - /* get subblock */ - blk = (block->flipped) ? (y >= 2) : (x >= 2); - - base_color = block->base_colors[blk]; - modifier = block->modifier_tables[blk][idx]; - - dst[0] = TAG(etc1_clamp)(base_color[0], modifier); - dst[1] = TAG(etc1_clamp)(base_color[1], modifier); - dst[2] = TAG(etc1_clamp)(base_color[2], modifier); -} - -static void -etc1_unpack_rgba8888(uint8_t *dst_row, - unsigned dst_stride, - const uint8_t *src_row, - unsigned src_stride, - unsigned width, - unsigned height) -{ - const unsigned bw = 4, bh = 4, bs = 8, comps = 4; - struct etc1_block block; - unsigned x, y, i, j; - - for (y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - - for (x = 0; x < width; x+= bw) { - etc1_parse_block(&block, src); - - for (j = 0; j < MIN2(bh, height - y); j++) { - uint8_t *dst = dst_row + (y + j) * dst_stride + x * comps; - for (i = 0; i < MIN2(bw, width - x); i++) { - etc1_fetch_texel(&block, i, j, dst); - dst[3] = 255; - dst += comps; - } - } - - src += bs; - } - - src_row += src_stride; - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_s3tc_tmp.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_s3tc_tmp.h deleted file mode 100644 index 0735c52..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/texcompress_s3tc_tmp.h +++ /dev/null @@ -1,1034 +0,0 @@ -/* - * libtxc_dxtn - * Version: 1.0 - * - * Copyright (C) 2004 Roland Scheidegger 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. - */ - -#ifndef TEXCOMPRESS_S3TC_TMP_H -#define TEXCOMPRESS_S3TC_TMP_H - -#include "../glheader.h" - -typedef GLubyte GLchan; -#define UBYTE_TO_CHAN(b) (b) -#define CHAN_MAX 255 -#define RCOMP 0 -#define GCOMP 1 -#define BCOMP 2 -#define ACOMP 3 - -#define EXP5TO8R(packedcol) \ - ((((packedcol) >> 8) & 0xf8) | (((packedcol) >> 13) & 0x7)) - -#define EXP6TO8G(packedcol) \ - ((((packedcol) >> 3) & 0xfc) | (((packedcol) >> 9) & 0x3)) - -#define EXP5TO8B(packedcol) \ - ((((packedcol) << 3) & 0xf8) | (((packedcol) >> 2) & 0x7)) - -#define EXP4TO8(col) \ - ((col) | ((col) << 4)) - -/* inefficient. To be efficient, it would be necessary to decode 16 pixels at once */ - -static void dxt135_decode_imageblock ( const GLubyte *img_block_src, - GLint i, GLint j, GLuint dxt_type, GLvoid *texel ) { - GLchan *rgba = (GLchan *) texel; - const GLushort color0 = img_block_src[0] | (img_block_src[1] << 8); - const GLushort color1 = img_block_src[2] | (img_block_src[3] << 8); - const GLuint bits = img_block_src[4] | (img_block_src[5] << 8) | - (img_block_src[6] << 16) | ((GLuint)img_block_src[7] << 24); - /* What about big/little endian? */ - GLubyte bit_pos = 2 * (j * 4 + i) ; - GLubyte code = (GLubyte) ((bits >> bit_pos) & 3); - - rgba[ACOMP] = CHAN_MAX; - switch (code) { - case 0: - rgba[RCOMP] = UBYTE_TO_CHAN( EXP5TO8R(color0) ); - rgba[GCOMP] = UBYTE_TO_CHAN( EXP6TO8G(color0) ); - rgba[BCOMP] = UBYTE_TO_CHAN( EXP5TO8B(color0) ); - break; - case 1: - rgba[RCOMP] = UBYTE_TO_CHAN( EXP5TO8R(color1) ); - rgba[GCOMP] = UBYTE_TO_CHAN( EXP6TO8G(color1) ); - rgba[BCOMP] = UBYTE_TO_CHAN( EXP5TO8B(color1) ); - break; - case 2: - if ((dxt_type > 1) || (color0 > color1)) { - rgba[RCOMP] = UBYTE_TO_CHAN( ((EXP5TO8R(color0) * 2 + EXP5TO8R(color1)) / 3) ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((EXP6TO8G(color0) * 2 + EXP6TO8G(color1)) / 3) ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((EXP5TO8B(color0) * 2 + EXP5TO8B(color1)) / 3) ); - } - else { - rgba[RCOMP] = UBYTE_TO_CHAN( ((EXP5TO8R(color0) + EXP5TO8R(color1)) / 2) ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((EXP6TO8G(color0) + EXP6TO8G(color1)) / 2) ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((EXP5TO8B(color0) + EXP5TO8B(color1)) / 2) ); - } - break; - case 3: - if ((dxt_type > 1) || (color0 > color1)) { - rgba[RCOMP] = UBYTE_TO_CHAN( ((EXP5TO8R(color0) + EXP5TO8R(color1) * 2) / 3) ); - rgba[GCOMP] = UBYTE_TO_CHAN( ((EXP6TO8G(color0) + EXP6TO8G(color1) * 2) / 3) ); - rgba[BCOMP] = UBYTE_TO_CHAN( ((EXP5TO8B(color0) + EXP5TO8B(color1) * 2) / 3) ); - } - else { - rgba[RCOMP] = 0; - rgba[GCOMP] = 0; - rgba[BCOMP] = 0; - if (dxt_type == 1) rgba[ACOMP] = UBYTE_TO_CHAN(0); - } - break; - default: - /* CANNOT happen (I hope) */ - break; - } -} - - -static void fetch_2d_texel_rgb_dxt1(GLint srcRowStride, const GLubyte *pixdata, - GLint i, GLint j, GLvoid *texel) -{ - /* Extract the (i,j) pixel from pixdata and return it - * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. - */ - - const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 8); - dxt135_decode_imageblock(blksrc, (i&3), (j&3), 0, texel); -} - - -static void fetch_2d_texel_rgba_dxt1(GLint srcRowStride, const GLubyte *pixdata, - GLint i, GLint j, GLvoid *texel) -{ - /* Extract the (i,j) pixel from pixdata and return it - * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. - */ - - const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 8); - dxt135_decode_imageblock(blksrc, (i&3), (j&3), 1, texel); -} - -static void fetch_2d_texel_rgba_dxt3(GLint srcRowStride, const GLubyte *pixdata, - GLint i, GLint j, GLvoid *texel) { - - /* Extract the (i,j) pixel from pixdata and return it - * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. - */ - - GLchan *rgba = (GLchan *) texel; - const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 16); - const GLubyte anibble = (blksrc[((j&3) * 4 + (i&3)) / 2] >> (4 * (i&1))) & 0xf; - dxt135_decode_imageblock(blksrc + 8, (i&3), (j&3), 2, texel); - rgba[ACOMP] = UBYTE_TO_CHAN( (GLubyte)(EXP4TO8(anibble)) ); -} - -static void fetch_2d_texel_rgba_dxt5(GLint srcRowStride, const GLubyte *pixdata, - GLint i, GLint j, GLvoid *texel) { - - /* Extract the (i,j) pixel from pixdata and return it - * in texel[RCOMP], texel[GCOMP], texel[BCOMP], texel[ACOMP]. - */ - - GLchan *rgba = (GLchan *) texel; - const GLubyte *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 16); - const GLubyte alpha0 = blksrc[0]; - const GLubyte alpha1 = blksrc[1]; - const GLubyte bit_pos = ((j&3) * 4 + (i&3)) * 3; - const GLubyte acodelow = blksrc[2 + bit_pos / 8]; - const GLubyte acodehigh = blksrc[3 + bit_pos / 8]; - const GLubyte code = (acodelow >> (bit_pos & 0x7) | - (acodehigh << (8 - (bit_pos & 0x7)))) & 0x7; - dxt135_decode_imageblock(blksrc + 8, (i&3), (j&3), 2, texel); - if (code == 0) - rgba[ACOMP] = UBYTE_TO_CHAN( alpha0 ); - else if (code == 1) - rgba[ACOMP] = UBYTE_TO_CHAN( alpha1 ); - else if (alpha0 > alpha1) - rgba[ACOMP] = UBYTE_TO_CHAN( ((alpha0 * (8 - code) + (alpha1 * (code - 1))) / 7) ); - else if (code < 6) - rgba[ACOMP] = UBYTE_TO_CHAN( ((alpha0 * (6 - code) + (alpha1 * (code - 1))) / 5) ); - else if (code == 6) - rgba[ACOMP] = 0; - else - rgba[ACOMP] = CHAN_MAX; -} - - -/* weights used for error function, basically weights (unsquared 2/4/1) according to rgb->luminance conversion - not sure if this really reflects visual perception */ -#define REDWEIGHT 4 -#define GREENWEIGHT 16 -#define BLUEWEIGHT 1 - -#define ALPHACUT 127 - -static void fancybasecolorsearch( UNUSED GLubyte *blkaddr, GLubyte srccolors[4][4][4], GLubyte *bestcolor[2], - GLint numxpixels, GLint numypixels, UNUSED GLint type, UNUSED GLboolean haveAlpha) -{ - /* use same luminance-weighted distance metric to determine encoding as for finding the base colors */ - - /* TODO could also try to find a better encoding for the 3-color-encoding type, this really should be done - if it's rgba_dxt1 and we have alpha in the block, currently even values which will be mapped to black - due to their alpha value will influence the result */ - GLint i, j, colors, z; - GLuint pixerror, pixerrorred, pixerrorgreen, pixerrorblue, pixerrorbest; - GLint colordist, blockerrlin[2][3]; - GLubyte nrcolor[2]; - GLint pixerrorcolorbest[3] = {0}; - GLubyte enc = 0; - GLubyte cv[4][4]; - GLubyte testcolor[2][3]; - -/* fprintf(stderr, "color begin 0 r/g/b %d/%d/%d, 1 r/g/b %d/%d/%d\n", - bestcolor[0][0], bestcolor[0][1], bestcolor[0][2], bestcolor[1][0], bestcolor[1][1], bestcolor[1][2]);*/ - if (((bestcolor[0][0] & 0xf8) << 8 | (bestcolor[0][1] & 0xfc) << 3 | bestcolor[0][2] >> 3) < - ((bestcolor[1][0] & 0xf8) << 8 | (bestcolor[1][1] & 0xfc) << 3 | bestcolor[1][2] >> 3)) { - testcolor[0][0] = bestcolor[0][0]; - testcolor[0][1] = bestcolor[0][1]; - testcolor[0][2] = bestcolor[0][2]; - testcolor[1][0] = bestcolor[1][0]; - testcolor[1][1] = bestcolor[1][1]; - testcolor[1][2] = bestcolor[1][2]; - } - else { - testcolor[1][0] = bestcolor[0][0]; - testcolor[1][1] = bestcolor[0][1]; - testcolor[1][2] = bestcolor[0][2]; - testcolor[0][0] = bestcolor[1][0]; - testcolor[0][1] = bestcolor[1][1]; - testcolor[0][2] = bestcolor[1][2]; - } - - for (i = 0; i < 3; i ++) { - cv[0][i] = testcolor[0][i]; - cv[1][i] = testcolor[1][i]; - cv[2][i] = (testcolor[0][i] * 2 + testcolor[1][i]) / 3; - cv[3][i] = (testcolor[0][i] + testcolor[1][i] * 2) / 3; - } - - blockerrlin[0][0] = 0; - blockerrlin[0][1] = 0; - blockerrlin[0][2] = 0; - blockerrlin[1][0] = 0; - blockerrlin[1][1] = 0; - blockerrlin[1][2] = 0; - - nrcolor[0] = 0; - nrcolor[1] = 0; - - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - pixerrorbest = 0xffffffff; - for (colors = 0; colors < 4; colors++) { - colordist = srccolors[j][i][0] - (cv[colors][0]); - pixerror = colordist * colordist * REDWEIGHT; - pixerrorred = colordist; - colordist = srccolors[j][i][1] - (cv[colors][1]); - pixerror += colordist * colordist * GREENWEIGHT; - pixerrorgreen = colordist; - colordist = srccolors[j][i][2] - (cv[colors][2]); - pixerror += colordist * colordist * BLUEWEIGHT; - pixerrorblue = colordist; - if (pixerror < pixerrorbest) { - enc = colors; - pixerrorbest = pixerror; - pixerrorcolorbest[0] = pixerrorred; - pixerrorcolorbest[1] = pixerrorgreen; - pixerrorcolorbest[2] = pixerrorblue; - } - } - if (enc == 0) { - for (z = 0; z < 3; z++) { - blockerrlin[0][z] += 3 * pixerrorcolorbest[z]; - } - nrcolor[0] += 3; - } - else if (enc == 2) { - for (z = 0; z < 3; z++) { - blockerrlin[0][z] += 2 * pixerrorcolorbest[z]; - } - nrcolor[0] += 2; - for (z = 0; z < 3; z++) { - blockerrlin[1][z] += 1 * pixerrorcolorbest[z]; - } - nrcolor[1] += 1; - } - else if (enc == 3) { - for (z = 0; z < 3; z++) { - blockerrlin[0][z] += 1 * pixerrorcolorbest[z]; - } - nrcolor[0] += 1; - for (z = 0; z < 3; z++) { - blockerrlin[1][z] += 2 * pixerrorcolorbest[z]; - } - nrcolor[1] += 2; - } - else if (enc == 1) { - for (z = 0; z < 3; z++) { - blockerrlin[1][z] += 3 * pixerrorcolorbest[z]; - } - nrcolor[1] += 3; - } - } - } - if (nrcolor[0] == 0) nrcolor[0] = 1; - if (nrcolor[1] == 0) nrcolor[1] = 1; - for (j = 0; j < 2; j++) { - for (i = 0; i < 3; i++) { - GLint newvalue = testcolor[j][i] + blockerrlin[j][i] / nrcolor[j]; - if (newvalue <= 0) - testcolor[j][i] = 0; - else if (newvalue >= 255) - testcolor[j][i] = 255; - else testcolor[j][i] = newvalue; - } - } - - if ((abs(testcolor[0][0] - testcolor[1][0]) < 8) && - (abs(testcolor[0][1] - testcolor[1][1]) < 4) && - (abs(testcolor[0][2] - testcolor[1][2]) < 8)) { - /* both colors are so close they might get encoded as the same 16bit values */ - GLubyte coldiffred, coldiffgreen, coldiffblue, coldiffmax, factor, ind0, ind1; - - coldiffred = abs(testcolor[0][0] - testcolor[1][0]); - coldiffgreen = 2 * abs(testcolor[0][1] - testcolor[1][1]); - coldiffblue = abs(testcolor[0][2] - testcolor[1][2]); - coldiffmax = coldiffred; - if (coldiffmax < coldiffgreen) coldiffmax = coldiffgreen; - if (coldiffmax < coldiffblue) coldiffmax = coldiffblue; - if (coldiffmax > 0) { - if (coldiffmax > 4) factor = 2; - else if (coldiffmax > 2) factor = 3; - else factor = 4; - /* Won't do much if the color value is near 255... */ - /* argh so many ifs */ - if (testcolor[1][1] >= testcolor[0][1]) { - ind1 = 1; ind0 = 0; - } - else { - ind1 = 0; ind0 = 1; - } - if ((testcolor[ind1][1] + factor * coldiffgreen) <= 255) - testcolor[ind1][1] += factor * coldiffgreen; - else testcolor[ind1][1] = 255; - if ((testcolor[ind1][0] - testcolor[ind0][1]) > 0) { - if ((testcolor[ind1][0] + factor * coldiffred) <= 255) - testcolor[ind1][0] += factor * coldiffred; - else testcolor[ind1][0] = 255; - } - else { - if ((testcolor[ind0][0] + factor * coldiffred) <= 255) - testcolor[ind0][0] += factor * coldiffred; - else testcolor[ind0][0] = 255; - } - if ((testcolor[ind1][2] - testcolor[ind0][2]) > 0) { - if ((testcolor[ind1][2] + factor * coldiffblue) <= 255) - testcolor[ind1][2] += factor * coldiffblue; - else testcolor[ind1][2] = 255; - } - else { - if ((testcolor[ind0][2] + factor * coldiffblue) <= 255) - testcolor[ind0][2] += factor * coldiffblue; - else testcolor[ind0][2] = 255; - } - } - } - - if (((testcolor[0][0] & 0xf8) << 8 | (testcolor[0][1] & 0xfc) << 3 | testcolor[0][2] >> 3) < - ((testcolor[1][0] & 0xf8) << 8 | (testcolor[1][1] & 0xfc) << 3 | testcolor[1][2]) >> 3) { - for (i = 0; i < 3; i++) { - bestcolor[0][i] = testcolor[0][i]; - bestcolor[1][i] = testcolor[1][i]; - } - } - else { - for (i = 0; i < 3; i++) { - bestcolor[0][i] = testcolor[1][i]; - bestcolor[1][i] = testcolor[0][i]; - } - } - -/* fprintf(stderr, "color end 0 r/g/b %d/%d/%d, 1 r/g/b %d/%d/%d\n", - bestcolor[0][0], bestcolor[0][1], bestcolor[0][2], bestcolor[1][0], bestcolor[1][1], bestcolor[1][2]);*/ -} - - - -static void storedxtencodedblock( GLubyte *blkaddr, GLubyte srccolors[4][4][4], GLubyte *bestcolor[2], - GLint numxpixels, GLint numypixels, GLuint type, GLboolean haveAlpha) -{ - /* use same luminance-weighted distance metric to determine encoding as for finding the base colors */ - - GLint i, j, colors; - GLuint testerror, testerror2, pixerror, pixerrorbest; - GLint colordist; - GLushort color0, color1, tempcolor; - GLuint bits = 0, bits2 = 0; - GLubyte *colorptr; - GLubyte enc = 0; - GLubyte cv[4][4]; - - bestcolor[0][0] = bestcolor[0][0] & 0xf8; - bestcolor[0][1] = bestcolor[0][1] & 0xfc; - bestcolor[0][2] = bestcolor[0][2] & 0xf8; - bestcolor[1][0] = bestcolor[1][0] & 0xf8; - bestcolor[1][1] = bestcolor[1][1] & 0xfc; - bestcolor[1][2] = bestcolor[1][2] & 0xf8; - - color0 = bestcolor[0][0] << 8 | bestcolor[0][1] << 3 | bestcolor[0][2] >> 3; - color1 = bestcolor[1][0] << 8 | bestcolor[1][1] << 3 | bestcolor[1][2] >> 3; - if (color0 < color1) { - tempcolor = color0; color0 = color1; color1 = tempcolor; - colorptr = bestcolor[0]; bestcolor[0] = bestcolor[1]; bestcolor[1] = colorptr; - } - - - for (i = 0; i < 3; i++) { - cv[0][i] = bestcolor[0][i]; - cv[1][i] = bestcolor[1][i]; - cv[2][i] = (bestcolor[0][i] * 2 + bestcolor[1][i]) / 3; - cv[3][i] = (bestcolor[0][i] + bestcolor[1][i] * 2) / 3; - } - - testerror = 0; - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - pixerrorbest = 0xffffffff; - for (colors = 0; colors < 4; colors++) { - colordist = srccolors[j][i][0] - cv[colors][0]; - pixerror = colordist * colordist * REDWEIGHT; - colordist = srccolors[j][i][1] - cv[colors][1]; - pixerror += colordist * colordist * GREENWEIGHT; - colordist = srccolors[j][i][2] - cv[colors][2]; - pixerror += colordist * colordist * BLUEWEIGHT; - if (pixerror < pixerrorbest) { - pixerrorbest = pixerror; - enc = colors; - } - } - testerror += pixerrorbest; - bits |= (uint32_t)enc << (2 * (j * 4 + i)); - } - } - /* some hw might disagree but actually decoding should always use 4-color encoding - for non-dxt1 formats */ - if (type == GL_COMPRESSED_RGB_S3TC_DXT1_EXT || type == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) { - for (i = 0; i < 3; i++) { - cv[2][i] = (bestcolor[0][i] + bestcolor[1][i]) / 2; - /* this isn't used. Looks like the black color constant can only be used - with RGB_DXT1 if I read the spec correctly (note though that the radeon gpu disagrees, - it will decode 3 to black even with DXT3/5), and due to how the color searching works - it won't get used even then */ - cv[3][i] = 0; - } - testerror2 = 0; - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - pixerrorbest = 0xffffffff; - if ((type == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) && (srccolors[j][i][3] <= ALPHACUT)) { - enc = 3; - pixerrorbest = 0; /* don't calculate error */ - } - else { - /* we're calculating the same what we have done already for colors 0-1 above... */ - for (colors = 0; colors < 3; colors++) { - colordist = srccolors[j][i][0] - cv[colors][0]; - pixerror = colordist * colordist * REDWEIGHT; - colordist = srccolors[j][i][1] - cv[colors][1]; - pixerror += colordist * colordist * GREENWEIGHT; - colordist = srccolors[j][i][2] - cv[colors][2]; - pixerror += colordist * colordist * BLUEWEIGHT; - if (pixerror < pixerrorbest) { - pixerrorbest = pixerror; - /* need to exchange colors later */ - if (colors > 1) enc = colors; - else enc = colors ^ 1; - } - } - } - testerror2 += pixerrorbest; - bits2 |= (uint32_t)enc << (2 * (j * 4 + i)); - } - } - } else { - testerror2 = 0xffffffff; - } - - /* finally we're finished, write back colors and bits */ - if ((testerror > testerror2) || (haveAlpha)) { - *blkaddr++ = color1 & 0xff; - *blkaddr++ = color1 >> 8; - *blkaddr++ = color0 & 0xff; - *blkaddr++ = color0 >> 8; - *blkaddr++ = bits2 & 0xff; - *blkaddr++ = ( bits2 >> 8) & 0xff; - *blkaddr++ = ( bits2 >> 16) & 0xff; - *blkaddr = bits2 >> 24; - } - else { - *blkaddr++ = color0 & 0xff; - *blkaddr++ = color0 >> 8; - *blkaddr++ = color1 & 0xff; - *blkaddr++ = color1 >> 8; - *blkaddr++ = bits & 0xff; - *blkaddr++ = ( bits >> 8) & 0xff; - *blkaddr++ = ( bits >> 16) & 0xff; - *blkaddr = bits >> 24; - } -} - -static void encodedxtcolorblockfaster( GLubyte *blkaddr, GLubyte srccolors[4][4][4], - GLint numxpixels, GLint numypixels, GLuint type ) -{ -/* simplistic approach. We need two base colors, simply use the "highest" and the "lowest" color - present in the picture as base colors */ - - /* define lowest and highest color as shortest and longest vector to 0/0/0, though the - vectors are weighted similar to their importance in rgb-luminance conversion - doesn't work too well though... - This seems to be a rather difficult problem */ - - GLubyte *bestcolor[2]; - GLubyte basecolors[2][3]; - GLubyte i, j; - GLuint lowcv, highcv, testcv; - GLboolean haveAlpha = GL_FALSE; - - lowcv = highcv = srccolors[0][0][0] * srccolors[0][0][0] * REDWEIGHT + - srccolors[0][0][1] * srccolors[0][0][1] * GREENWEIGHT + - srccolors[0][0][2] * srccolors[0][0][2] * BLUEWEIGHT; - bestcolor[0] = bestcolor[1] = srccolors[0][0]; - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - /* don't use this as a base color if the pixel will get black/transparent anyway */ - if ((type != GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) || (srccolors[j][i][3] > ALPHACUT)) { - testcv = srccolors[j][i][0] * srccolors[j][i][0] * REDWEIGHT + - srccolors[j][i][1] * srccolors[j][i][1] * GREENWEIGHT + - srccolors[j][i][2] * srccolors[j][i][2] * BLUEWEIGHT; - if (testcv > highcv) { - highcv = testcv; - bestcolor[1] = srccolors[j][i]; - } - else if (testcv < lowcv) { - lowcv = testcv; - bestcolor[0] = srccolors[j][i]; - } - } - else haveAlpha = GL_TRUE; - } - } - /* make sure the original color values won't get touched... */ - for (j = 0; j < 2; j++) { - for (i = 0; i < 3; i++) { - basecolors[j][i] = bestcolor[j][i]; - } - } - bestcolor[0] = basecolors[0]; - bestcolor[1] = basecolors[1]; - - /* try to find better base colors */ - fancybasecolorsearch(blkaddr, srccolors, bestcolor, numxpixels, numypixels, type, haveAlpha); - /* find the best encoding for these colors, and store the result */ - storedxtencodedblock(blkaddr, srccolors, bestcolor, numxpixels, numypixels, type, haveAlpha); -} - -static void writedxt5encodedalphablock( GLubyte *blkaddr, GLubyte alphabase1, GLubyte alphabase2, - GLubyte alphaenc[16]) -{ - *blkaddr++ = alphabase1; - *blkaddr++ = alphabase2; - *blkaddr++ = alphaenc[0] | (alphaenc[1] << 3) | ((alphaenc[2] & 3) << 6); - *blkaddr++ = (alphaenc[2] >> 2) | (alphaenc[3] << 1) | (alphaenc[4] << 4) | ((alphaenc[5] & 1) << 7); - *blkaddr++ = (alphaenc[5] >> 1) | (alphaenc[6] << 2) | (alphaenc[7] << 5); - *blkaddr++ = alphaenc[8] | (alphaenc[9] << 3) | ((alphaenc[10] & 3) << 6); - *blkaddr++ = (alphaenc[10] >> 2) | (alphaenc[11] << 1) | (alphaenc[12] << 4) | ((alphaenc[13] & 1) << 7); - *blkaddr++ = (alphaenc[13] >> 1) | (alphaenc[14] << 2) | (alphaenc[15] << 5); -} - -static void encodedxt5alpha(GLubyte *blkaddr, GLubyte srccolors[4][4][4], - GLint numxpixels, GLint numypixels) -{ - GLubyte alphabase[2], alphause[2]; - GLshort alphatest[2]; - GLuint alphablockerror1, alphablockerror2, alphablockerror3; - GLubyte i, j, aindex, acutValues[7]; - GLubyte alphaenc1[16], alphaenc2[16], alphaenc3[16]; - GLboolean alphaabsmin = GL_FALSE; - GLboolean alphaabsmax = GL_FALSE; - GLshort alphadist; - - /* find lowest and highest alpha value in block, alphabase[0] lowest, alphabase[1] highest */ - alphabase[0] = 0xff; alphabase[1] = 0x0; - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - if (srccolors[j][i][3] == 0) - alphaabsmin = GL_TRUE; - else if (srccolors[j][i][3] == 255) - alphaabsmax = GL_TRUE; - else { - if (srccolors[j][i][3] > alphabase[1]) - alphabase[1] = srccolors[j][i][3]; - if (srccolors[j][i][3] < alphabase[0]) - alphabase[0] = srccolors[j][i][3]; - } - } - } - - - if ((alphabase[0] > alphabase[1]) && !(alphaabsmin && alphaabsmax)) { /* one color, either max or min */ - /* shortcut here since it is a very common case (and also avoids later problems) */ - /* || (alphabase[0] == alphabase[1] && !alphaabsmin && !alphaabsmax) */ - /* could also thest for alpha0 == alpha1 (and not min/max), but probably not common, so don't bother */ - - *blkaddr++ = srccolors[0][0][3]; - blkaddr++; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; -/* fprintf(stderr, "enc0 used\n");*/ - return; - } - - /* find best encoding for alpha0 > alpha1 */ - /* it's possible this encoding is better even if both alphaabsmin and alphaabsmax are true */ - alphablockerror1 = 0x0; - alphablockerror2 = 0xffffffff; - alphablockerror3 = 0xffffffff; - if (alphaabsmin) alphause[0] = 0; - else alphause[0] = alphabase[0]; - if (alphaabsmax) alphause[1] = 255; - else alphause[1] = alphabase[1]; - /* calculate the 7 cut values, just the middle between 2 of the computed alpha values */ - for (aindex = 0; aindex < 7; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphause[0] * (2*aindex + 1) + alphause[1] * (14 - (2*aindex + 1))) / 14; - } - - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - /* maybe it's overkill to have the most complicated calculation just for the error - calculation which we only need to figure out if encoding1 or encoding2 is better... */ - if (srccolors[j][i][3] > acutValues[0]) { - alphaenc1[4*j + i] = 0; - alphadist = srccolors[j][i][3] - alphause[1]; - } - else if (srccolors[j][i][3] > acutValues[1]) { - alphaenc1[4*j + i] = 2; - alphadist = srccolors[j][i][3] - (alphause[1] * 6 + alphause[0] * 1) / 7; - } - else if (srccolors[j][i][3] > acutValues[2]) { - alphaenc1[4*j + i] = 3; - alphadist = srccolors[j][i][3] - (alphause[1] * 5 + alphause[0] * 2) / 7; - } - else if (srccolors[j][i][3] > acutValues[3]) { - alphaenc1[4*j + i] = 4; - alphadist = srccolors[j][i][3] - (alphause[1] * 4 + alphause[0] * 3) / 7; - } - else if (srccolors[j][i][3] > acutValues[4]) { - alphaenc1[4*j + i] = 5; - alphadist = srccolors[j][i][3] - (alphause[1] * 3 + alphause[0] * 4) / 7; - } - else if (srccolors[j][i][3] > acutValues[5]) { - alphaenc1[4*j + i] = 6; - alphadist = srccolors[j][i][3] - (alphause[1] * 2 + alphause[0] * 5) / 7; - } - else if (srccolors[j][i][3] > acutValues[6]) { - alphaenc1[4*j + i] = 7; - alphadist = srccolors[j][i][3] - (alphause[1] * 1 + alphause[0] * 6) / 7; - } - else { - alphaenc1[4*j + i] = 1; - alphadist = srccolors[j][i][3] - alphause[0]; - } - alphablockerror1 += alphadist * alphadist; - } - } -/* for (i = 0; i < 16; i++) { - fprintf(stderr, "%d ", alphaenc1[i]); - } - fprintf(stderr, "cutVals "); - for (i = 0; i < 8; i++) { - fprintf(stderr, "%d ", acutValues[i]); - } - fprintf(stderr, "srcVals "); - for (j = 0; j < numypixels; j++) - for (i = 0; i < numxpixels; i++) { - fprintf(stderr, "%d ", srccolors[j][i][3]); - } - - fprintf(stderr, "\n"); - }*/ - /* it's not very likely this encoding is better if both alphaabsmin and alphaabsmax - are false but try it anyway */ - if (alphablockerror1 >= 32) { - - /* don't bother if encoding is already very good, this condition should also imply - we have valid alphabase colors which we absolutely need (alphabase[0] <= alphabase[1]) */ - alphablockerror2 = 0; - for (aindex = 0; aindex < 5; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphabase[0] * (10 - (2*aindex + 1)) + alphabase[1] * (2*aindex + 1)) / 10; - } - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - /* maybe it's overkill to have the most complicated calculation just for the error - calculation which we only need to figure out if encoding1 or encoding2 is better... */ - if (srccolors[j][i][3] == 0) { - alphaenc2[4*j + i] = 6; - alphadist = 0; - } - else if (srccolors[j][i][3] == 255) { - alphaenc2[4*j + i] = 7; - alphadist = 0; - } - else if (srccolors[j][i][3] <= acutValues[0]) { - alphaenc2[4*j + i] = 0; - alphadist = srccolors[j][i][3] - alphabase[0]; - } - else if (srccolors[j][i][3] <= acutValues[1]) { - alphaenc2[4*j + i] = 2; - alphadist = srccolors[j][i][3] - (alphabase[0] * 4 + alphabase[1] * 1) / 5; - } - else if (srccolors[j][i][3] <= acutValues[2]) { - alphaenc2[4*j + i] = 3; - alphadist = srccolors[j][i][3] - (alphabase[0] * 3 + alphabase[1] * 2) / 5; - } - else if (srccolors[j][i][3] <= acutValues[3]) { - alphaenc2[4*j + i] = 4; - alphadist = srccolors[j][i][3] - (alphabase[0] * 2 + alphabase[1] * 3) / 5; - } - else if (srccolors[j][i][3] <= acutValues[4]) { - alphaenc2[4*j + i] = 5; - alphadist = srccolors[j][i][3] - (alphabase[0] * 1 + alphabase[1] * 4) / 5; - } - else { - alphaenc2[4*j + i] = 1; - alphadist = srccolors[j][i][3] - alphabase[1]; - } - alphablockerror2 += alphadist * alphadist; - } - } - - - /* skip this if the error is already very small - this encoding is MUCH better on average than #2 though, but expensive! */ - if ((alphablockerror2 > 96) && (alphablockerror1 > 96)) { - GLshort blockerrlin1 = 0; - GLshort blockerrlin2 = 0; - GLubyte nralphainrangelow = 0; - GLubyte nralphainrangehigh = 0; - alphatest[0] = 0xff; - alphatest[1] = 0x0; - /* if we have large range it's likely there are values close to 0/255, try to map them to 0/255 */ - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - if ((srccolors[j][i][3] > alphatest[1]) && (srccolors[j][i][3] < (255 -(alphabase[1] - alphabase[0]) / 28))) - alphatest[1] = srccolors[j][i][3]; - if ((srccolors[j][i][3] < alphatest[0]) && (srccolors[j][i][3] > (alphabase[1] - alphabase[0]) / 28)) - alphatest[0] = srccolors[j][i][3]; - } - } - /* shouldn't happen too often, don't really care about those degenerated cases */ - if (alphatest[1] <= alphatest[0]) { - alphatest[0] = 1; - alphatest[1] = 254; -/* fprintf(stderr, "only 1 or 0 colors for encoding!\n");*/ - } - for (aindex = 0; aindex < 5; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphatest[0] * (10 - (2*aindex + 1)) + alphatest[1] * (2*aindex + 1)) / 10; - } - - /* find the "average" difference between the alpha values and the next encoded value. - This is then used to calculate new base values. - Should there be some weighting, i.e. those values closer to alphatest[x] have more weight, - since they will see more improvement, and also because the values in the middle are somewhat - likely to get no improvement at all (because the base values might move in different directions)? - OTOH it would mean the values in the middle are even less likely to get an improvement - */ - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - if (srccolors[j][i][3] <= alphatest[0] / 2) { - } - else if (srccolors[j][i][3] > ((255 + alphatest[1]) / 2)) { - } - else if (srccolors[j][i][3] <= acutValues[0]) { - blockerrlin1 += (srccolors[j][i][3] - alphatest[0]); - nralphainrangelow += 1; - } - else if (srccolors[j][i][3] <= acutValues[1]) { - blockerrlin1 += (srccolors[j][i][3] - (alphatest[0] * 4 + alphatest[1] * 1) / 5); - blockerrlin2 += (srccolors[j][i][3] - (alphatest[0] * 4 + alphatest[1] * 1) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else if (srccolors[j][i][3] <= acutValues[2]) { - blockerrlin1 += (srccolors[j][i][3] - (alphatest[0] * 3 + alphatest[1] * 2) / 5); - blockerrlin2 += (srccolors[j][i][3] - (alphatest[0] * 3 + alphatest[1] * 2) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else if (srccolors[j][i][3] <= acutValues[3]) { - blockerrlin1 += (srccolors[j][i][3] - (alphatest[0] * 2 + alphatest[1] * 3) / 5); - blockerrlin2 += (srccolors[j][i][3] - (alphatest[0] * 2 + alphatest[1] * 3) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else if (srccolors[j][i][3] <= acutValues[4]) { - blockerrlin1 += (srccolors[j][i][3] - (alphatest[0] * 1 + alphatest[1] * 4) / 5); - blockerrlin2 += (srccolors[j][i][3] - (alphatest[0] * 1 + alphatest[1] * 4) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else { - blockerrlin2 += (srccolors[j][i][3] - alphatest[1]); - nralphainrangehigh += 1; - } - } - } - /* shouldn't happen often, needed to avoid div by zero */ - if (nralphainrangelow == 0) nralphainrangelow = 1; - if (nralphainrangehigh == 0) nralphainrangehigh = 1; - alphatest[0] = alphatest[0] + (blockerrlin1 / nralphainrangelow); -/* fprintf(stderr, "block err lin low %d, nr %d\n", blockerrlin1, nralphainrangelow); - fprintf(stderr, "block err lin high %d, nr %d\n", blockerrlin2, nralphainrangehigh);*/ - /* again shouldn't really happen often... */ - if (alphatest[0] < 0) { - alphatest[0] = 0; -/* fprintf(stderr, "adj alpha base val to 0\n");*/ - } - alphatest[1] = alphatest[1] + (blockerrlin2 / nralphainrangehigh); - if (alphatest[1] > 255) { - alphatest[1] = 255; -/* fprintf(stderr, "adj alpha base val to 255\n");*/ - } - - alphablockerror3 = 0; - for (aindex = 0; aindex < 5; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphatest[0] * (10 - (2*aindex + 1)) + alphatest[1] * (2*aindex + 1)) / 10; - } - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - /* maybe it's overkill to have the most complicated calculation just for the error - calculation which we only need to figure out if encoding1 or encoding2 is better... */ - if (srccolors[j][i][3] <= alphatest[0] / 2) { - alphaenc3[4*j + i] = 6; - alphadist = srccolors[j][i][3]; - } - else if (srccolors[j][i][3] > ((255 + alphatest[1]) / 2)) { - alphaenc3[4*j + i] = 7; - alphadist = 255 - srccolors[j][i][3]; - } - else if (srccolors[j][i][3] <= acutValues[0]) { - alphaenc3[4*j + i] = 0; - alphadist = srccolors[j][i][3] - alphatest[0]; - } - else if (srccolors[j][i][3] <= acutValues[1]) { - alphaenc3[4*j + i] = 2; - alphadist = srccolors[j][i][3] - (alphatest[0] * 4 + alphatest[1] * 1) / 5; - } - else if (srccolors[j][i][3] <= acutValues[2]) { - alphaenc3[4*j + i] = 3; - alphadist = srccolors[j][i][3] - (alphatest[0] * 3 + alphatest[1] * 2) / 5; - } - else if (srccolors[j][i][3] <= acutValues[3]) { - alphaenc3[4*j + i] = 4; - alphadist = srccolors[j][i][3] - (alphatest[0] * 2 + alphatest[1] * 3) / 5; - } - else if (srccolors[j][i][3] <= acutValues[4]) { - alphaenc3[4*j + i] = 5; - alphadist = srccolors[j][i][3] - (alphatest[0] * 1 + alphatest[1] * 4) / 5; - } - else { - alphaenc3[4*j + i] = 1; - alphadist = srccolors[j][i][3] - alphatest[1]; - } - alphablockerror3 += alphadist * alphadist; - } - } - } - } - /* write the alpha values and encoding back. */ - if ((alphablockerror1 <= alphablockerror2) && (alphablockerror1 <= alphablockerror3)) { -/* if (alphablockerror1 > 96) fprintf(stderr, "enc1 used, error %d\n", alphablockerror1);*/ - writedxt5encodedalphablock( blkaddr, alphause[1], alphause[0], alphaenc1 ); - } - else if (alphablockerror2 <= alphablockerror3) { -/* if (alphablockerror2 > 96) fprintf(stderr, "enc2 used, error %d\n", alphablockerror2);*/ - writedxt5encodedalphablock( blkaddr, alphabase[0], alphabase[1], alphaenc2 ); - } - else { -/* fprintf(stderr, "enc3 used, error %d\n", alphablockerror3);*/ - writedxt5encodedalphablock( blkaddr, (GLubyte)alphatest[0], (GLubyte)alphatest[1], alphaenc3 ); - } -} - -static void extractsrccolors( GLubyte srcpixels[4][4][4], const GLchan *srcaddr, - GLint srcRowStride, GLint numxpixels, GLint numypixels, GLint comps) -{ - GLubyte i, j, c; - const GLchan *curaddr; - for (j = 0; j < numypixels; j++) { - curaddr = srcaddr + j * srcRowStride * comps; - for (i = 0; i < numxpixels; i++) { - for (c = 0; c < comps; c++) { - srcpixels[j][i][c] = *curaddr++ / (CHAN_MAX / 255); - } - } - } -} - - -static void -tx_compress_dxt1(int srccomps, int width, int height, - const GLubyte *srcPixData, GLubyte *dest, int dstRowStride, - unsigned dstComps) -{ - GLenum destFormat = dstComps == 3 ? GL_COMPRESSED_RGB_S3TC_DXT1_EXT - : GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; - GLubyte *blkaddr = dest; - GLubyte srcpixels[4][4][4]; - const GLchan *srcaddr = srcPixData; - int numxpixels, numypixels; - - /* hmm we used to get called without dstRowStride... */ - int dstRowDiff = dstRowStride >= (width * 2) ? - dstRowStride - (((width + 3) & ~3) * 2) : 0; - /* fprintf(stderr, "dxt1 tex width %d tex height %d dstRowStride %d\n", - width, height, dstRowStride); */ - for (int j = 0; j < height; j += 4) { - if (height > j + 3) numypixels = 4; - else numypixels = height - j; - srcaddr = srcPixData + j * width * srccomps; - for (int i = 0; i < width; i += 4) { - if (width > i + 3) numxpixels = 4; - else numxpixels = width - i; - extractsrccolors(srcpixels, srcaddr, width, numxpixels, numypixels, srccomps); - encodedxtcolorblockfaster(blkaddr, srcpixels, numxpixels, numypixels, destFormat); - srcaddr += srccomps * numxpixels; - blkaddr += 8; - } - blkaddr += dstRowDiff; - } -} - -static void -tx_compress_dxt3(int srccomps, int width, int height, - const GLubyte *srcPixData, GLubyte *dest, int dstRowStride) -{ - GLenum destFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; - GLubyte *blkaddr = dest; - GLubyte srcpixels[4][4][4]; - const GLchan *srcaddr = srcPixData; - int numxpixels, numypixels; - - int dstRowDiff = dstRowStride >= (width * 4) ? - dstRowStride - (((width + 3) & ~3) * 4) : 0; - /* fprintf(stderr, "dxt3 tex width %d tex height %d dstRowStride %d\n", - width, height, dstRowStride); */ - for (int j = 0; j < height; j += 4) { - if (height > j + 3) numypixels = 4; - else numypixels = height - j; - srcaddr = srcPixData + j * width * srccomps; - for (int i = 0; i < width; i += 4) { - if (width > i + 3) numxpixels = 4; - else numxpixels = width - i; - extractsrccolors(srcpixels, srcaddr, width, numxpixels, numypixels, srccomps); - *blkaddr++ = (srcpixels[0][0][3] >> 4) | (srcpixels[0][1][3] & 0xf0); - *blkaddr++ = (srcpixels[0][2][3] >> 4) | (srcpixels[0][3][3] & 0xf0); - *blkaddr++ = (srcpixels[1][0][3] >> 4) | (srcpixels[1][1][3] & 0xf0); - *blkaddr++ = (srcpixels[1][2][3] >> 4) | (srcpixels[1][3][3] & 0xf0); - *blkaddr++ = (srcpixels[2][0][3] >> 4) | (srcpixels[2][1][3] & 0xf0); - *blkaddr++ = (srcpixels[2][2][3] >> 4) | (srcpixels[2][3][3] & 0xf0); - *blkaddr++ = (srcpixels[3][0][3] >> 4) | (srcpixels[3][1][3] & 0xf0); - *blkaddr++ = (srcpixels[3][2][3] >> 4) | (srcpixels[3][3][3] & 0xf0); - encodedxtcolorblockfaster(blkaddr, srcpixels, numxpixels, numypixels, destFormat); - srcaddr += srccomps * numxpixels; - blkaddr += 8; - } - blkaddr += dstRowDiff; - } -} - -static void -tx_compress_dxt5(int srccomps, int width, int height, - const GLubyte *srcPixData, GLubyte *dest, int dstRowStride) -{ - GLenum destFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; - GLubyte *blkaddr = dest; - GLubyte srcpixels[4][4][4]; - const GLchan *srcaddr = srcPixData; - int numxpixels, numypixels; - - int dstRowDiff = dstRowStride >= (width * 4) ? - dstRowStride - (((width + 3) & ~3) * 4) : 0; - /* fprintf(stderr, "dxt5 tex width %d tex height %d dstRowStride %d\n", - width, height, dstRowStride); */ - for (int j = 0; j < height; j += 4) { - if (height > j + 3) numypixels = 4; - else numypixels = height - j; - srcaddr = srcPixData + j * width * srccomps; - for (int i = 0; i < width; i += 4) { - if (width > i + 3) numxpixels = 4; - else numxpixels = width - i; - extractsrccolors(srcpixels, srcaddr, width, numxpixels, numypixels, srccomps); - encodedxt5alpha(blkaddr, srcpixels, numxpixels, numypixels); - encodedxtcolorblockfaster(blkaddr + 8, srcpixels, numxpixels, numypixels, destFormat); - srcaddr += srccomps * numxpixels; - blkaddr += 16; - } - blkaddr += dstRowDiff; - } -} - -static void -tx_compress_dxtn(GLint srccomps, GLint width, GLint height, - const GLubyte *srcPixData, GLenum destFormat, - GLubyte *dest, GLint dstRowStride) -{ - switch (destFormat) { - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - tx_compress_dxt1(srccomps, width, height, srcPixData, - dest, dstRowStride, 3); - break; - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - tx_compress_dxt1(srccomps, width, height, srcPixData, - dest, dstRowStride, 4); - break; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - tx_compress_dxt3(srccomps, width, height, srcPixData, - dest, dstRowStride); - break; - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - tx_compress_dxt5(srccomps, width, height, srcPixData, - dest, dstRowStride); - break; - default: - unreachable("unknown DXTn format"); - } -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.c deleted file mode 100644 index e38cf25..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.c +++ /dev/null @@ -1,1436 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Pixel format accessor functions. - * - * @author Jose Fonseca - */ - -#include "../../../include/c11/threads.h" -#include "../detect_arch.h" -#include "u_format.h" -#include "u_format_s3tc.h" -#include "../u_math.h" - -#include "../../gallium/include/pipe/p_defines.h" -#include "../../gallium/include/pipe/p_screen.h" - - -/** - * Copy 2D rect from one place to another. - * Position and sizes are in pixels. - * src_stride may be negative to do vertical flip of pixels from source. - */ -void -util_copy_rect(void * dst_in, - enum pipe_format format, - unsigned dst_stride, - unsigned dst_x, - unsigned dst_y, - unsigned width, - unsigned height, - const void * src_in, - int src_stride, - unsigned src_x, - unsigned src_y) -{ - uint8_t *dst = dst_in; - const uint8_t *src = src_in; - unsigned i; - int src_stride_pos = src_stride < 0 ? -src_stride : src_stride; - int blocksize = util_format_get_blocksize(format); - int blockwidth = util_format_get_blockwidth(format); - int blockheight = util_format_get_blockheight(format); - - assert(blocksize > 0); - assert(blockwidth > 0); - assert(blockheight > 0); - - dst_x /= blockwidth; - dst_y /= blockheight; - width = (width + blockwidth - 1)/blockwidth; - height = (height + blockheight - 1)/blockheight; - src_x /= blockwidth; - src_y /= blockheight; - - dst += dst_x * blocksize; - src += src_x * blocksize; - dst += dst_y * dst_stride; - src += src_y * src_stride_pos; - width *= blocksize; - - if (width == dst_stride && width == (unsigned)src_stride) - memcpy(dst, src, height * width); - else { - for (i = 0; i < height; i++) { - memcpy(dst, src, width); - dst += dst_stride; - src += src_stride; - } - } -} - - -bool -util_format_is_float(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - int i; - - i = util_format_get_first_non_void_channel(format); - if (i < 0) { - return false; - } - - return desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT ? true : false; -} - - -/** Test if the format contains RGB, but not alpha */ -bool -util_format_has_alpha(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - return (desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || - desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && - desc->swizzle[3] != PIPE_SWIZZLE_1; -} - -/** Test if format has alpha as 1 (like RGBX) */ -bool -util_format_has_alpha1(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - return (desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || - desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && - desc->nr_channels == 4 && - desc->swizzle[3] == PIPE_SWIZZLE_1; -} - -bool -util_format_is_luminance(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || - desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && - desc->swizzle[0] == PIPE_SWIZZLE_X && - desc->swizzle[1] == PIPE_SWIZZLE_X && - desc->swizzle[2] == PIPE_SWIZZLE_X && - desc->swizzle[3] == PIPE_SWIZZLE_1) { - return true; - } - return false; -} - -bool -util_format_is_alpha(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || - desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && - desc->swizzle[0] == PIPE_SWIZZLE_0 && - desc->swizzle[1] == PIPE_SWIZZLE_0 && - desc->swizzle[2] == PIPE_SWIZZLE_0 && - desc->swizzle[3] == PIPE_SWIZZLE_X) { - return true; - } - return false; -} - -bool -util_format_is_pure_integer(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - int i; - - if (desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) { - if (util_format_has_depth(desc)) - return false; - - assert(util_format_has_stencil(desc)); - return true; - } - - /* Find the first non-void channel. */ - i = util_format_get_first_non_void_channel(format); - if (i == -1) - return false; - - return desc->channel[i].pure_integer ? true : false; -} - -bool -util_format_is_pure_sint(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - int i; - - i = util_format_get_first_non_void_channel(format); - if (i == -1) - return false; - - return (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED && desc->channel[i].pure_integer) ? true : false; -} - -bool -util_format_is_pure_uint(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - int i; - - i = util_format_get_first_non_void_channel(format); - if (i == -1) - return false; - - return (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED && desc->channel[i].pure_integer) ? true : false; -} - -/** - * Returns true if the format contains normalized signed channels. - */ -bool -util_format_is_snorm(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - return desc->is_snorm; -} - -/** - * Returns true if the format contains normalized unsigned channels. - */ -bool -util_format_is_unorm(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - return desc->is_unorm; -} - -/** - * Returns true if the format contains scaled integer format channels. - */ -bool -util_format_is_scaled(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - int i; - - /* format none is described as scaled but not for this check */ - if (format == PIPE_FORMAT_NONE) - return false; - - /* Find the first non-void channel. */ - i = util_format_get_first_non_void_channel(format); - if (i == -1) - return false; - - return !desc->channel[i].pure_integer && !desc->channel[i].normalized && - (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED || - desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED); -} - -bool -util_format_is_snorm8(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - int i; - - if (desc->is_mixed) - return false; - - i = util_format_get_first_non_void_channel(format); - if (i == -1) - return false; - - return desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED && - !desc->channel[i].pure_integer && - desc->channel[i].normalized && - desc->channel[i].size == 8; -} - -bool -util_format_is_luminance_alpha(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || - desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && - desc->swizzle[0] == PIPE_SWIZZLE_X && - desc->swizzle[1] == PIPE_SWIZZLE_X && - desc->swizzle[2] == PIPE_SWIZZLE_X && - desc->swizzle[3] == PIPE_SWIZZLE_Y) { - return true; - } - return false; -} - - -bool -util_format_is_intensity(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || - desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && - desc->swizzle[0] == PIPE_SWIZZLE_X && - desc->swizzle[1] == PIPE_SWIZZLE_X && - desc->swizzle[2] == PIPE_SWIZZLE_X && - desc->swizzle[3] == PIPE_SWIZZLE_X) { - return true; - } - return false; -} - -bool -util_format_is_subsampled_422(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - return desc->layout == UTIL_FORMAT_LAYOUT_SUBSAMPLED && - desc->block.width == 2 && - desc->block.height == 1 && - desc->block.bits == 32; -} - -/** - * Calculates the MRD for the depth format. MRD is used in depth bias - * for UNORM and unbound depth buffers. When the depth buffer is floating - * point, the depth bias calculation does not use the MRD. However, the - * default MRD will be 1.0 / ((1 << 24) - 1). - */ -double -util_get_depth_format_mrd(const struct util_format_description *desc) -{ - /* - * Depth buffer formats without a depth component OR scenarios - * without a bound depth buffer default to D24. - */ - double mrd = 1.0 / ((1 << 24) - 1); - unsigned depth_channel; - - /* - * Some depth formats do not store the depth component in the first - * channel, detect the format and adjust the depth channel. Get the - * swizzled depth component channel. - */ - depth_channel = desc->swizzle[0]; - - if (desc->channel[depth_channel].type == UTIL_FORMAT_TYPE_UNSIGNED && - desc->channel[depth_channel].normalized) { - int depth_bits; - - depth_bits = desc->channel[depth_channel].size; - mrd = 1.0 / ((1ULL << depth_bits) - 1); - } - - return mrd; -} - -void -util_format_unpack_rgba_rect(enum pipe_format format, - void *dst, unsigned dst_stride, - const void *src, unsigned src_stride, - unsigned w, unsigned h) -{ - const struct util_format_unpack_description *unpack = - util_format_unpack_description(format); - - /* Optimized function for block-compressed formats */ - if (unpack->unpack_rgba_rect) { - unpack->unpack_rgba_rect(dst, dst_stride, src, src_stride, w, h); - } else { - for (unsigned y = 0; y < h; y++) { - unpack->unpack_rgba(dst, src, w); - src = (const char *)src + src_stride; - dst = (char *)dst + dst_stride; - } - } -} - -void -util_format_unpack_rgba_8unorm_rect(enum pipe_format format, - void *dst, unsigned dst_stride, - const void *src, unsigned src_stride, - unsigned w, unsigned h) -{ - const struct util_format_unpack_description *unpack = - util_format_unpack_description(format); - - /* Optimized function for block-compressed formats */ - if (unpack->unpack_rgba_8unorm_rect) { - unpack->unpack_rgba_8unorm_rect(dst, dst_stride, src, src_stride, w, h); - } else { - for (unsigned y = 0; y < h; y++) { - unpack->unpack_rgba_8unorm(dst, src, w); - src = (const char *)src + src_stride; - dst = (char *)dst + dst_stride; - } - } -} - -void -util_format_read_4(enum pipe_format format, - void *dst, unsigned dst_stride, - const void *src, unsigned src_stride, - unsigned x, unsigned y, unsigned w, unsigned h) -{ - const struct util_format_description *format_desc; - const uint8_t *src_row; - - format_desc = util_format_description(format); - - assert(x % format_desc->block.width == 0); - assert(y % format_desc->block.height == 0); - - src_row = (const uint8_t *)src + y*src_stride + x*(format_desc->block.bits/8); - - util_format_unpack_rgba_rect(format, dst, dst_stride, src_row, src_stride, w, h); -} - - -void -util_format_write_4(enum pipe_format format, - const void *src, unsigned src_stride, - void *dst, unsigned dst_stride, - unsigned x, unsigned y, unsigned w, unsigned h) -{ - const struct util_format_description *format_desc; - const struct util_format_pack_description *pack = - util_format_pack_description(format); - uint8_t *dst_row; - - format_desc = util_format_description(format); - - assert(x % format_desc->block.width == 0); - assert(y % format_desc->block.height == 0); - - dst_row = (uint8_t *)dst + y*dst_stride + x*(format_desc->block.bits/8); - - if (util_format_is_pure_uint(format)) - pack->pack_rgba_uint(dst_row, dst_stride, src, src_stride, w, h); - else if (util_format_is_pure_sint(format)) - pack->pack_rgba_sint(dst_row, dst_stride, src, src_stride, w, h); - else - pack->pack_rgba_float(dst_row, dst_stride, src, src_stride, w, h); -} - - -void -util_format_read_4ub(enum pipe_format format, uint8_t *dst, unsigned dst_stride, const void *src, unsigned src_stride, unsigned x, unsigned y, unsigned w, unsigned h) -{ - const struct util_format_description *format_desc; - const uint8_t *src_row; - - format_desc = util_format_description(format); - - assert(x % format_desc->block.width == 0); - assert(y % format_desc->block.height == 0); - - src_row = (const uint8_t *)src + y*src_stride + x*(format_desc->block.bits/8); - - util_format_unpack_rgba_8unorm_rect(format, dst, dst_stride, src_row, src_stride, w, h); -} - - -void -util_format_write_4ub(enum pipe_format format, const uint8_t *src, unsigned src_stride, void *dst, unsigned dst_stride, unsigned x, unsigned y, unsigned w, unsigned h) -{ - const struct util_format_description *format_desc; - const struct util_format_pack_description *pack = - util_format_pack_description(format); - uint8_t *dst_row; - const uint8_t *src_row; - - format_desc = util_format_description(format); - - assert(x % format_desc->block.width == 0); - assert(y % format_desc->block.height == 0); - - dst_row = (uint8_t *)dst + y*dst_stride + x*(format_desc->block.bits/8); - src_row = src; - - pack->pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, w, h); -} - -/** - * Check if we can safely memcopy from the source format to the dest format. - * This basically covers the cases of a "used" channel copied to a typeless - * channel, plus some 1-channel cases. - * Examples of compatible copy formats include: - * b8g8r8a8_unorm -> b8g8r8x8_unorm - * a8r8g8b8_unorm -> x8r8g8b8_unorm - * b5g5r5a1_unorm -> b5g5r5x1_unorm - * b4g4r4a4_unorm -> b4g4r4x4_unorm - * l8_unorm -> r8_unorm - * i8_unorm -> l8_unorm - * i8_unorm -> a8_unorm - * i8_unorm -> r8_unorm - * l16_unorm -> r16_unorm - * z24_unorm_s8_uint -> z24x8_unorm - * s8_uint_z24_unorm -> x8z24_unorm - * r8g8b8a8_unorm -> r8g8b8x8_unorm - * a8b8g8r8_srgb -> x8b8g8r8_srgb - * b8g8r8a8_srgb -> b8g8r8x8_srgb - * a8r8g8b8_srgb -> x8r8g8b8_srgb - * a8b8g8r8_unorm -> x8b8g8r8_unorm - * r10g10b10a2_uscaled -> r10g10b10x2_uscaled - * r10sg10sb10sa2u_norm -> r10g10b10x2_snorm - */ -bool -util_is_format_compatible(const struct util_format_description *src_desc, - const struct util_format_description *dst_desc) -{ - unsigned chan; - - if (src_desc->format == dst_desc->format) { - return true; - } - - if (src_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN || - dst_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN) { - return false; - } - - if (src_desc->block.bits != dst_desc->block.bits || - src_desc->nr_channels != dst_desc->nr_channels || - src_desc->colorspace != dst_desc->colorspace) { - return false; - } - - for (chan = 0; chan < 4; ++chan) { - if (src_desc->channel[chan].size != - dst_desc->channel[chan].size) { - return false; - } - } - - for (chan = 0; chan < 4; ++chan) { - enum pipe_swizzle swizzle = dst_desc->swizzle[chan]; - - if (swizzle < 4) { - if (src_desc->swizzle[chan] != swizzle) { - return false; - } - if ((src_desc->channel[swizzle].type != - dst_desc->channel[swizzle].type) || - (src_desc->channel[swizzle].normalized != - dst_desc->channel[swizzle].normalized)) { - return false; - } - } - } - - return true; -} - - -bool -util_format_fits_8unorm(const struct util_format_description *format_desc) -{ - unsigned chan; - - /* - * After linearized sRGB values require more than 8bits. - */ - - if (format_desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) { - return false; - } - - switch (format_desc->layout) { - - case UTIL_FORMAT_LAYOUT_S3TC: - /* - * These are straight forward. - */ - return true; - case UTIL_FORMAT_LAYOUT_RGTC: - if (format_desc->format == PIPE_FORMAT_RGTC1_SNORM || - format_desc->format == PIPE_FORMAT_RGTC2_SNORM || - format_desc->format == PIPE_FORMAT_LATC1_SNORM || - format_desc->format == PIPE_FORMAT_LATC2_SNORM) - return false; - return true; - case UTIL_FORMAT_LAYOUT_BPTC: - if (format_desc->format == PIPE_FORMAT_BPTC_RGBA_UNORM) - return true; - return false; - - case UTIL_FORMAT_LAYOUT_ETC: - if (format_desc->format == PIPE_FORMAT_ETC1_RGB8) - return true; - return false; - - case UTIL_FORMAT_LAYOUT_PLAIN: - /* - * For these we can find a generic rule. - */ - - for (chan = 0; chan < format_desc->nr_channels; ++chan) { - switch (format_desc->channel[chan].type) { - case UTIL_FORMAT_TYPE_VOID: - break; - case UTIL_FORMAT_TYPE_UNSIGNED: - if (!format_desc->channel[chan].normalized || - format_desc->channel[chan].size > 8) { - return false; - } - break; - default: - return false; - } - } - return true; - - default: - /* - * Handle all others on a case by case basis. - */ - - switch (format_desc->format) { - case PIPE_FORMAT_R1_UNORM: - case PIPE_FORMAT_UYVY: - case PIPE_FORMAT_YUYV: - case PIPE_FORMAT_R8G8_B8G8_UNORM: - case PIPE_FORMAT_G8R8_G8B8_UNORM: - return true; - - default: - return false; - } - } -} - - -bool -util_format_translate(enum pipe_format dst_format, - void *dst, unsigned dst_stride, - unsigned dst_x, unsigned dst_y, - enum pipe_format src_format, - const void *src, unsigned src_stride, - unsigned src_x, unsigned src_y, - unsigned width, unsigned height) -{ - const struct util_format_description *dst_format_desc; - const struct util_format_description *src_format_desc; - const struct util_format_pack_description *pack = - util_format_pack_description(dst_format); - const struct util_format_unpack_description *unpack = - util_format_unpack_description(src_format); - uint8_t *dst_row; - const uint8_t *src_row; - unsigned x_step, y_step; - unsigned dst_step; - unsigned src_step; - - dst_format_desc = util_format_description(dst_format); - src_format_desc = util_format_description(src_format); - - if (util_is_format_compatible(src_format_desc, dst_format_desc)) { - /* - * Trivial case. - */ - - util_copy_rect(dst, dst_format, dst_stride, dst_x, dst_y, - width, height, src, (int)src_stride, - src_x, src_y); - return true; - } - - assert(dst_x % dst_format_desc->block.width == 0); - assert(dst_y % dst_format_desc->block.height == 0); - assert(src_x % src_format_desc->block.width == 0); - assert(src_y % src_format_desc->block.height == 0); - - dst_row = (uint8_t *)dst + dst_y*dst_stride + dst_x*(dst_format_desc->block.bits/8); - src_row = (const uint8_t *)src + src_y*src_stride + src_x*(src_format_desc->block.bits/8); - - /* - * This works because all pixel formats have pixel blocks with power of two - * sizes. - */ - - y_step = MAX2(dst_format_desc->block.height, src_format_desc->block.height); - x_step = MAX2(dst_format_desc->block.width, src_format_desc->block.width); - assert(y_step % dst_format_desc->block.height == 0); - assert(y_step % src_format_desc->block.height == 0); - - dst_step = y_step / dst_format_desc->block.height * dst_stride; - src_step = y_step / src_format_desc->block.height * src_stride; - - /* - * TODO: double formats will loose precision - * TODO: Add a special case for formats that are mere swizzles of each other - */ - - if (src_format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS || - dst_format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) { - float *tmp_z = NULL; - uint8_t *tmp_s = NULL; - - assert(x_step == 1); - assert(y_step == 1); - - if (unpack->unpack_z_float && pack->pack_z_float) { - tmp_z = malloc(width * sizeof *tmp_z); - } - - if (unpack->unpack_s_8uint && pack->pack_s_8uint) { - tmp_s = malloc(width * sizeof *tmp_s); - } - - while (height--) { - if (tmp_z) { - util_format_unpack_z_float(src_format, tmp_z, src_row, width); - util_format_pack_z_float(dst_format, dst_row, tmp_z, width); - } - - if (tmp_s) { - util_format_unpack_s_8uint(src_format, tmp_s, src_row, width); - util_format_pack_s_8uint(dst_format, dst_row, tmp_s, width); - } - - dst_row += dst_step; - src_row += src_step; - } - - free(tmp_s); - - free(tmp_z); - - return true; - } - - if (util_format_fits_8unorm(src_format_desc) || - util_format_fits_8unorm(dst_format_desc)) { - unsigned tmp_stride; - uint8_t *tmp_row; - - if ((!unpack->unpack_rgba_8unorm && !unpack->unpack_rgba_8unorm_rect) || - !pack->pack_rgba_8unorm) { - return false; - } - - tmp_stride = MAX2(width, x_step) * 4 * sizeof *tmp_row; - tmp_row = malloc(y_step * tmp_stride); - if (!tmp_row) - return false; - - while (height >= y_step) { - util_format_unpack_rgba_8unorm_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, y_step); - pack->pack_rgba_8unorm(dst_row, dst_stride, tmp_row, tmp_stride, width, y_step); - - dst_row += dst_step; - src_row += src_step; - height -= y_step; - } - - if (height) { - util_format_unpack_rgba_8unorm_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, height); - pack->pack_rgba_8unorm(dst_row, dst_stride, tmp_row, tmp_stride, width, height); - } - - free(tmp_row); - } - else if (util_format_is_pure_sint(src_format) || - util_format_is_pure_sint(dst_format)) { - unsigned tmp_stride; - int *tmp_row; - - if (util_format_is_pure_sint(src_format) != - util_format_is_pure_sint(dst_format)) { - return false; - } - - tmp_stride = MAX2(width, x_step) * 4 * sizeof *tmp_row; - tmp_row = malloc(y_step * tmp_stride); - if (!tmp_row) - return false; - - while (height >= y_step) { - util_format_unpack_rgba_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, y_step); - pack->pack_rgba_sint(dst_row, dst_stride, tmp_row, tmp_stride, width, y_step); - - dst_row += dst_step; - src_row += src_step; - height -= y_step; - } - - if (height) { - util_format_unpack_rgba_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, height); - pack->pack_rgba_sint(dst_row, dst_stride, tmp_row, tmp_stride, width, height); - } - - free(tmp_row); - } - else if (util_format_is_pure_uint(src_format) || - util_format_is_pure_uint(dst_format)) { - unsigned tmp_stride; - unsigned int *tmp_row; - - if ((!unpack->unpack_rgba && !unpack->unpack_rgba_rect) || - !pack->pack_rgba_uint) { - return false; - } - - tmp_stride = MAX2(width, x_step) * 4 * sizeof *tmp_row; - tmp_row = malloc(y_step * tmp_stride); - if (!tmp_row) - return false; - - while (height >= y_step) { - util_format_unpack_rgba_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, y_step); - pack->pack_rgba_uint(dst_row, dst_stride, tmp_row, tmp_stride, width, y_step); - - dst_row += dst_step; - src_row += src_step; - height -= y_step; - } - - if (height) { - util_format_unpack_rgba_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, height); - pack->pack_rgba_uint(dst_row, dst_stride, tmp_row, tmp_stride, width, height); - } - - free(tmp_row); - } - else { - unsigned tmp_stride; - float *tmp_row; - - if ((!unpack->unpack_rgba && !unpack->unpack_rgba_rect) || - !pack->pack_rgba_float) { - return false; - } - - tmp_stride = MAX2(width, x_step) * 4 * sizeof *tmp_row; - tmp_row = malloc(y_step * tmp_stride); - if (!tmp_row) - return false; - - while (height >= y_step) { - util_format_unpack_rgba_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, y_step); - pack->pack_rgba_float(dst_row, dst_stride, tmp_row, tmp_stride, width, y_step); - - dst_row += dst_step; - src_row += src_step; - height -= y_step; - } - - if (height) { - util_format_unpack_rgba_rect(src_format, tmp_row, tmp_stride, src_row, src_stride, width, height); - pack->pack_rgba_float(dst_row, dst_stride, tmp_row, tmp_stride, width, height); - } - - free(tmp_row); - } - return true; -} - -bool -util_format_translate_3d(enum pipe_format dst_format, - void *dst, unsigned dst_stride, - unsigned dst_slice_stride, - unsigned dst_x, unsigned dst_y, - unsigned dst_z, - enum pipe_format src_format, - const void *src, unsigned src_stride, - unsigned src_slice_stride, - unsigned src_x, unsigned src_y, - unsigned src_z, unsigned width, - unsigned height, unsigned depth) -{ - uint8_t *dst_layer; - const uint8_t *src_layer; - unsigned z; - dst_layer = dst; - src_layer = src; - dst_layer += dst_z * dst_slice_stride; - src_layer += src_z * src_slice_stride; - for (z = 0; z < depth; ++z) { - if (!util_format_translate(dst_format, dst_layer, dst_stride, - dst_x, dst_y, - src_format, src_layer, src_stride, - src_x, src_y, - width, height)) - return false; - - dst_layer += dst_slice_stride; - src_layer += src_slice_stride; - } - return true; -} - -void util_format_compose_swizzles(const unsigned char swz1[4], - const unsigned char swz2[4], - unsigned char dst[4]) -{ - unsigned i; - - for (i = 0; i < 4; i++) { - dst[i] = swz2[i] <= PIPE_SWIZZLE_W ? - swz1[swz2[i]] : swz2[i]; - } -} - -void util_format_apply_color_swizzle(union pipe_color_union *dst, - const union pipe_color_union *src, - const unsigned char swz[4], - const bool is_integer) -{ - unsigned c; - - if (is_integer) { - for (c = 0; c < 4; ++c) { - switch (swz[c]) { - case PIPE_SWIZZLE_X: dst->ui[c] = src->ui[0]; break; - case PIPE_SWIZZLE_Y: dst->ui[c] = src->ui[1]; break; - case PIPE_SWIZZLE_Z: dst->ui[c] = src->ui[2]; break; - case PIPE_SWIZZLE_W: dst->ui[c] = src->ui[3]; break; - default: - dst->ui[c] = (swz[c] == PIPE_SWIZZLE_1) ? 1 : 0; - break; - } - } - } else { - for (c = 0; c < 4; ++c) { - switch (swz[c]) { - case PIPE_SWIZZLE_X: dst->f[c] = src->f[0]; break; - case PIPE_SWIZZLE_Y: dst->f[c] = src->f[1]; break; - case PIPE_SWIZZLE_Z: dst->f[c] = src->f[2]; break; - case PIPE_SWIZZLE_W: dst->f[c] = src->f[3]; break; - default: - dst->f[c] = (swz[c] == PIPE_SWIZZLE_1) ? 1.0f : 0.0f; - break; - } - } - } -} - -void pipe_swizzle_4f(float *dst, const float *src, - const unsigned char swz[4]) -{ - unsigned i; - - for (i = 0; i < 4; i++) { - if (swz[i] <= PIPE_SWIZZLE_W) - dst[i] = src[swz[i]]; - else if (swz[i] == PIPE_SWIZZLE_0) - dst[i] = 0; - else if (swz[i] == PIPE_SWIZZLE_1) - dst[i] = 1; - } -} - -void util_format_unswizzle_4f(float *dst, const float *src, - const unsigned char swz[4]) -{ - unsigned i; - - for (i = 0; i < 4; i++) { - switch (swz[i]) { - case PIPE_SWIZZLE_X: - dst[0] = src[i]; - break; - case PIPE_SWIZZLE_Y: - dst[1] = src[i]; - break; - case PIPE_SWIZZLE_Z: - dst[2] = src[i]; - break; - case PIPE_SWIZZLE_W: - dst[3] = src[i]; - break; - } - } -} - -enum pipe_format -util_format_snorm_to_sint(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_R32_SNORM: - return PIPE_FORMAT_R32_SINT; - case PIPE_FORMAT_R32G32_SNORM: - return PIPE_FORMAT_R32G32_SINT; - case PIPE_FORMAT_R32G32B32_SNORM: - return PIPE_FORMAT_R32G32B32_SINT; - case PIPE_FORMAT_R32G32B32A32_SNORM: - return PIPE_FORMAT_R32G32B32A32_SINT; - - case PIPE_FORMAT_R16_SNORM: - return PIPE_FORMAT_R16_SINT; - case PIPE_FORMAT_R16G16_SNORM: - return PIPE_FORMAT_R16G16_SINT; - case PIPE_FORMAT_R16G16B16_SNORM: - return PIPE_FORMAT_R16G16B16_SINT; - case PIPE_FORMAT_R16G16B16A16_SNORM: - return PIPE_FORMAT_R16G16B16A16_SINT; - - case PIPE_FORMAT_R8_SNORM: - return PIPE_FORMAT_R8_SINT; - case PIPE_FORMAT_R8G8_SNORM: - return PIPE_FORMAT_R8G8_SINT; - case PIPE_FORMAT_R8G8B8_SNORM: - return PIPE_FORMAT_R8G8B8_SINT; - case PIPE_FORMAT_B8G8R8_SNORM: - return PIPE_FORMAT_B8G8R8_SINT; - case PIPE_FORMAT_R8G8B8A8_SNORM: - return PIPE_FORMAT_R8G8B8A8_SINT; - case PIPE_FORMAT_B8G8R8A8_SNORM: - return PIPE_FORMAT_B8G8R8A8_SINT; - - case PIPE_FORMAT_R10G10B10A2_SNORM: - return PIPE_FORMAT_R10G10B10A2_SINT; - case PIPE_FORMAT_B10G10R10A2_SNORM: - return PIPE_FORMAT_B10G10R10A2_SINT; - - case PIPE_FORMAT_R10G10B10X2_SNORM: - return PIPE_FORMAT_R10G10B10X2_SINT; - - case PIPE_FORMAT_A8_SNORM: - return PIPE_FORMAT_A8_SINT; - case PIPE_FORMAT_L8_SNORM: - return PIPE_FORMAT_L8_SINT; - case PIPE_FORMAT_L8A8_SNORM: - return PIPE_FORMAT_L8A8_SINT; - case PIPE_FORMAT_I8_SNORM: - return PIPE_FORMAT_I8_SINT; - - case PIPE_FORMAT_A16_SNORM: - return PIPE_FORMAT_A16_SINT; - case PIPE_FORMAT_L16_SNORM: - return PIPE_FORMAT_L16_SINT; - case PIPE_FORMAT_L16A16_SNORM: - return PIPE_FORMAT_L16A16_SINT; - case PIPE_FORMAT_I16_SNORM: - return PIPE_FORMAT_I16_SINT; - - case PIPE_FORMAT_R8G8B8X8_SNORM: - return PIPE_FORMAT_R8G8B8X8_SINT; - case PIPE_FORMAT_R16G16B16X16_SNORM: - return PIPE_FORMAT_R16G16B16X16_SINT; - - case PIPE_FORMAT_R8A8_SNORM: - return PIPE_FORMAT_R8A8_SINT; - case PIPE_FORMAT_R16A16_SNORM: - return PIPE_FORMAT_R16A16_SINT; - - case PIPE_FORMAT_G8R8_SNORM: - return PIPE_FORMAT_G8R8_SINT; - case PIPE_FORMAT_G16R16_SNORM: - return PIPE_FORMAT_G16R16_SINT; - - case PIPE_FORMAT_A8B8G8R8_SNORM: - return PIPE_FORMAT_A8B8G8R8_SINT; - case PIPE_FORMAT_X8B8G8R8_SNORM: - return PIPE_FORMAT_X8B8G8R8_SINT; - - case PIPE_FORMAT_B8G8R8X8_SNORM: - return PIPE_FORMAT_B8G8R8X8_SINT; - case PIPE_FORMAT_A8R8G8B8_SNORM: - return PIPE_FORMAT_A8R8G8B8_SINT; - case PIPE_FORMAT_X8R8G8B8_SNORM: - return PIPE_FORMAT_X8R8G8B8_SINT; - case PIPE_FORMAT_B10G10R10X2_SNORM: - return PIPE_FORMAT_B10G10R10X2_SINT; - - default: - return format; - } -} - -/** - * If the format is RGB, return BGR. If the format is BGR, return RGB. - * This may fail by returning PIPE_FORMAT_NONE. - */ -enum pipe_format -util_format_rgb_to_bgr(enum pipe_format format) -{ -#define REMAP_RGB_ONE(r, rs, g, gs, b, bs, type) \ - case PIPE_FORMAT_##r##rs##g##gs##b##bs##_##type: \ - return PIPE_FORMAT_##b##bs##g##gs##r##rs##_##type; - -#define REMAP_RGB(rs, gs, bs, type) \ - REMAP_RGB_ONE(R, rs, G, gs, B, bs, type) \ - REMAP_RGB_ONE(B, bs, G, gs, R, rs, type) \ - -#define REMAP_RGBA_ONE(r, rs, g, gs, b, bs, a, as, type) \ - case PIPE_FORMAT_##r##rs##g##gs##b##bs##a##as##_##type: \ - return PIPE_FORMAT_##b##bs##g##gs##r##rs##a##as##_##type; - -#define REMAP_ARGB_ONE(a, as, r, rs, g, gs, b, bs, type) \ - case PIPE_FORMAT_##a##as##r##rs##g##gs##b##bs##_##type: \ - return PIPE_FORMAT_##a##as##b##bs##g##gs##r##rs##_##type; - -#define REMAP_RGB_AX(A, rs, gs, bs, as, type) \ - REMAP_RGBA_ONE(R, rs, G, gs, B, bs, A, as, type) \ - REMAP_RGBA_ONE(B, bs, G, gs, R, rs, A, as, type) \ - -#define REMAP_AX_RGB(A, rs, gs, bs, as, type) \ - REMAP_ARGB_ONE(A, as, R, rs, G, gs, B, bs, type) \ - REMAP_ARGB_ONE(A, as, B, bs, G, gs, R, rs, type) \ - -#define REMAP_RGBA(rs, gs, bs, as, type) REMAP_RGB_AX(A, rs, gs, bs, as, type) -#define REMAP_RGBX(rs, gs, bs, as, type) REMAP_RGB_AX(X, rs, gs, bs, as, type) -#define REMAP_ARGB(rs, gs, bs, as, type) REMAP_AX_RGB(A, rs, gs, bs, as, type) -#define REMAP_XRGB(rs, gs, bs, as, type) REMAP_AX_RGB(X, rs, gs, bs, as, type) - -#define REMAP_RGBA_ALL(rs, gs, bs, as, type) \ - REMAP_RGBA(rs, gs, bs, as, type) \ - REMAP_RGBX(rs, gs, bs, as, type) \ - REMAP_ARGB(rs, gs, bs, as, type) \ - REMAP_XRGB(rs, gs, bs, as, type) - - switch (format) { - REMAP_RGB(3, 3, 2, UNORM); - REMAP_RGB(3, 3, 2, UINT); - REMAP_RGB(5, 6, 5, SRGB); - REMAP_RGB(5, 6, 5, UNORM); - REMAP_RGB(5, 6, 5, UINT); - REMAP_RGB(8, 8, 8, SRGB); - REMAP_RGB(8, 8, 8, UNORM); - REMAP_RGB(8, 8, 8, SNORM); - REMAP_RGB(8, 8, 8, UINT); - REMAP_RGB(8, 8, 8, SINT); - REMAP_RGB(8, 8, 8, USCALED); - REMAP_RGB(8, 8, 8, SSCALED); - - /* Complete format sets. */ - REMAP_RGBA_ALL(5, 5, 5, 1, UNORM); - REMAP_RGBA_ALL(8, 8, 8, 8, SRGB); - REMAP_RGBA_ALL(8, 8, 8, 8, UNORM); - REMAP_RGBA_ALL(8, 8, 8, 8, SNORM); - REMAP_RGBA_ALL(8, 8, 8, 8, SINT); - - /* Format sets missing XRGB/XBGR. */ - REMAP_RGBA(4, 4, 4, 4, UNORM); - REMAP_RGBX(4, 4, 4, 4, UNORM); - REMAP_ARGB(4, 4, 4, 4, UNORM); - - REMAP_RGBA(8, 8, 8, 8, UINT); - REMAP_RGBX(8, 8, 8, 8, UINT); - REMAP_ARGB(8, 8, 8, 8, UINT); - - REMAP_RGBA(10, 10, 10, 2, UNORM); - REMAP_RGBX(10, 10, 10, 2, UNORM); - REMAP_ARGB(10, 10, 10, 2, UNORM); - - /* Format sets missing a half of combinations. */ - REMAP_RGBA(4, 4, 4, 4, UINT); - REMAP_ARGB(4, 4, 4, 4, UINT); - - REMAP_RGBA(5, 5, 5, 1, UINT); - REMAP_ARGB(5, 5, 5, 1, UINT); - - REMAP_RGBA(10, 10, 10, 2, SNORM); - REMAP_RGBX(10, 10, 10, 2, SNORM); - - REMAP_RGBA(10, 10, 10, 2, UINT); - REMAP_ARGB(10, 10, 10, 2, UINT); - - REMAP_RGBA(10, 10, 10, 2, SINT); - REMAP_RGBX(10, 10, 10, 2, SINT); - - /* Format sets having only RGBA/BGRA. */ - REMAP_RGBA(8, 8, 8, 8, USCALED); - REMAP_RGBA(8, 8, 8, 8, SSCALED); - REMAP_RGBA(10, 10, 10, 2, USCALED); - REMAP_RGBA(10, 10, 10, 2, SSCALED); - - default: - return PIPE_FORMAT_NONE; - } -} - -static const struct util_format_unpack_description *util_format_unpack_table[PIPE_FORMAT_COUNT]; - -static void -util_format_unpack_table_init(void) -{ - for (enum pipe_format format = PIPE_FORMAT_NONE; format < PIPE_FORMAT_COUNT; format++) { -#if (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__) - const struct util_format_unpack_description *unpack = util_format_unpack_description_neon(format); - if (unpack) { - util_format_unpack_table[format] = unpack; - continue; - } -#endif - - util_format_unpack_table[format] = util_format_unpack_description_generic(format); - } -} - -const struct util_format_unpack_description * -util_format_unpack_description(enum pipe_format format) -{ - static once_flag flag = ONCE_FLAG_INIT; - call_once(&flag, util_format_unpack_table_init); - - return util_format_unpack_table[format]; -} - -enum pipe_format -util_format_snorm_to_unorm(enum pipe_format format) -{ -#define CASE(x) case PIPE_FORMAT_##x##_SNORM: return PIPE_FORMAT_##x##_UNORM - - switch (format) { - CASE(R8G8B8A8); - CASE(R8G8B8X8); - CASE(B8G8R8A8); - CASE(B8G8R8X8); - CASE(A8R8G8B8); - CASE(X8R8G8B8); - CASE(A8B8G8R8); - CASE(X8B8G8R8); - - CASE(R10G10B10A2); - CASE(R10G10B10X2); - CASE(B10G10R10A2); - CASE(B10G10R10X2); - - CASE(R8); - CASE(R8G8); - CASE(G8R8); - CASE(R8G8B8); - CASE(B8G8R8); - - CASE(R16); - CASE(R16G16); - CASE(G16R16); - CASE(R16G16B16); - - CASE(R16G16B16A16); - CASE(R16G16B16X16); - - CASE(R32); - CASE(R32G32); - CASE(R32G32B32); - CASE(R32G32B32A32); - - CASE(RGTC1); - CASE(RGTC2); - CASE(ETC2_R11); - CASE(ETC2_RG11); - - CASE(A8); - CASE(A16); - CASE(L8); - CASE(L16); - CASE(I8); - CASE(I16); - - CASE(L8A8); - CASE(L16A16); - CASE(R8A8); - CASE(R16A16); - - CASE(LATC1); - CASE(LATC2); - - default: - return format; - } - -#undef CASE -} - -enum pipe_format -util_format_rgbx_to_rgba(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_B8G8R8X8_UNORM: - return PIPE_FORMAT_B8G8R8A8_UNORM; - case PIPE_FORMAT_X8B8G8R8_UNORM: - return PIPE_FORMAT_A8B8G8R8_UNORM; - case PIPE_FORMAT_X8R8G8B8_UNORM: - return PIPE_FORMAT_A8R8G8B8_UNORM; - case PIPE_FORMAT_X8B8G8R8_SRGB: - return PIPE_FORMAT_A8B8G8R8_SRGB; - case PIPE_FORMAT_B8G8R8X8_SRGB: - return PIPE_FORMAT_B8G8R8A8_SRGB; - case PIPE_FORMAT_X8R8G8B8_SRGB: - return PIPE_FORMAT_A8R8G8B8_SRGB; - case PIPE_FORMAT_B5G5R5X1_UNORM: - return PIPE_FORMAT_B5G5R5A1_UNORM; - case PIPE_FORMAT_R10G10B10X2_USCALED: - return PIPE_FORMAT_R10G10B10A2_USCALED; - case PIPE_FORMAT_R10G10B10X2_SNORM: - return PIPE_FORMAT_R10G10B10A2_SNORM; - case PIPE_FORMAT_R8G8B8X8_UNORM: - return PIPE_FORMAT_R8G8B8A8_UNORM; - case PIPE_FORMAT_B4G4R4X4_UNORM: - return PIPE_FORMAT_B4G4R4A4_UNORM; - case PIPE_FORMAT_R8G8B8X8_SNORM: - return PIPE_FORMAT_R8G8B8A8_SNORM; - case PIPE_FORMAT_R8G8B8X8_SRGB: - return PIPE_FORMAT_R8G8B8A8_SRGB; - case PIPE_FORMAT_R8G8B8X8_UINT: - return PIPE_FORMAT_R8G8B8A8_UINT; - case PIPE_FORMAT_R8G8B8X8_SINT: - return PIPE_FORMAT_R8G8B8A8_SINT; - case PIPE_FORMAT_B10G10R10X2_UNORM: - return PIPE_FORMAT_B10G10R10A2_UNORM; - case PIPE_FORMAT_R16G16B16X16_UNORM: - return PIPE_FORMAT_R16G16B16A16_UNORM; - case PIPE_FORMAT_R16G16B16X16_SNORM: - return PIPE_FORMAT_R16G16B16A16_SNORM; - case PIPE_FORMAT_R16G16B16X16_FLOAT: - return PIPE_FORMAT_R16G16B16A16_FLOAT; - case PIPE_FORMAT_R16G16B16X16_UINT: - return PIPE_FORMAT_R16G16B16A16_UINT; - case PIPE_FORMAT_R16G16B16X16_SINT: - return PIPE_FORMAT_R16G16B16A16_SINT; - case PIPE_FORMAT_R32G32B32X32_FLOAT: - return PIPE_FORMAT_R32G32B32A32_FLOAT; - case PIPE_FORMAT_R32G32B32X32_UINT: - return PIPE_FORMAT_R32G32B32A32_UINT; - case PIPE_FORMAT_R32G32B32X32_SINT: - return PIPE_FORMAT_R32G32B32A32_SINT; - case PIPE_FORMAT_X8B8G8R8_SNORM: - return PIPE_FORMAT_A8B8G8R8_SNORM; - case PIPE_FORMAT_R10G10B10X2_UNORM: - return PIPE_FORMAT_R10G10B10A2_UNORM; - case PIPE_FORMAT_X1B5G5R5_UNORM: - return PIPE_FORMAT_A1B5G5R5_UNORM; - case PIPE_FORMAT_X8B8G8R8_SINT: - return PIPE_FORMAT_A8B8G8R8_SINT; - case PIPE_FORMAT_B8G8R8X8_SNORM: - return PIPE_FORMAT_B8G8R8A8_SNORM; - case PIPE_FORMAT_B8G8R8X8_UINT: - return PIPE_FORMAT_B8G8R8A8_UINT; - case PIPE_FORMAT_B8G8R8X8_SINT: - return PIPE_FORMAT_B8G8R8A8_SINT; - case PIPE_FORMAT_X8R8G8B8_SNORM: - return PIPE_FORMAT_A8R8G8B8_SNORM; - case PIPE_FORMAT_X8R8G8B8_SINT: - return PIPE_FORMAT_A8R8G8B8_SINT; - case PIPE_FORMAT_R5G5B5X1_UNORM: - return PIPE_FORMAT_R5G5B5A1_UNORM; - case PIPE_FORMAT_X1R5G5B5_UNORM: - return PIPE_FORMAT_A1R5G5B5_UNORM; - case PIPE_FORMAT_R4G4B4X4_UNORM: - return PIPE_FORMAT_R4G4B4A4_UNORM; - case PIPE_FORMAT_B10G10R10X2_SNORM: - return PIPE_FORMAT_B10G10R10A2_SNORM; - case PIPE_FORMAT_R10G10B10X2_SINT: - return PIPE_FORMAT_R10G10B10A2_SINT; - case PIPE_FORMAT_B10G10R10X2_SINT: - return PIPE_FORMAT_B10G10R10A2_SINT; - default: { - ASSERTED const struct util_format_description *desc = util_format_description(format); - - /* Assert that the format doesn't contain X instead of A. */ - assert(desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS || - (desc->channel[0].type != UTIL_FORMAT_TYPE_VOID && - desc->channel[desc->nr_channels - 1].type != UTIL_FORMAT_TYPE_VOID)); - return format; - } - } -} - -enum pipe_format -util_format_get_array(const enum util_format_type type, const unsigned bits, - const unsigned nr_components, const bool normalized, - const bool pure_integer) -{ -#define CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS, NR_VAR) \ - case BITS: \ - switch (NR_VAR) { \ - case 1: \ - return PIPE_FORMAT_R##BITS##_##TYPE; \ - case 2: \ - return PIPE_FORMAT_R##BITS##G##BITS##_##TYPE; \ - case 3: \ - return PIPE_FORMAT_R##BITS##G##BITS##B##BITS##_##TYPE; \ - case 4: \ - return PIPE_FORMAT_R##BITS##G##BITS##B##BITS##A##BITS##_##TYPE; \ - default: \ - return PIPE_FORMAT_NONE; \ - } - -#define SWITCH_BY_BITS_CASEX3(TYPE, BITS_VAR, BITS1, BITS2, BITS3, NR_VAR) \ - switch (BITS_VAR) { \ - CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS1, NR_VAR) \ - CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS2, NR_VAR) \ - CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS3, NR_VAR) \ - default: \ - return PIPE_FORMAT_NONE; \ - } - -#define SWITCH_BY_BITS_CASEX4(TYPE, BITS_VAR, BITS1, BITS2, BITS3, BITS4, NR_VAR) \ - switch (BITS_VAR) { \ - CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS1, NR_VAR) \ - CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS2, NR_VAR) \ - CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS3, NR_VAR) \ - CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4(TYPE, BITS4, NR_VAR) \ - default: \ - return PIPE_FORMAT_NONE; \ - } - - switch (type) { - case UTIL_FORMAT_TYPE_UNSIGNED: - if (normalized) - SWITCH_BY_BITS_CASEX3(UNORM, bits, 8, 16, 32, nr_components) - else if (!pure_integer) - SWITCH_BY_BITS_CASEX3(USCALED, bits, 8, 16, 32, nr_components) - else - SWITCH_BY_BITS_CASEX4(UINT, bits, 8, 16, 32, 64, nr_components) - case UTIL_FORMAT_TYPE_SIGNED: - if (normalized) - SWITCH_BY_BITS_CASEX3(SNORM, bits, 8, 16, 32, nr_components) - else if (!pure_integer) - SWITCH_BY_BITS_CASEX3(SSCALED, bits, 8, 16, 32, nr_components) - else - SWITCH_BY_BITS_CASEX4(SINT, bits, 8, 16, 32, 64, nr_components) - case UTIL_FORMAT_TYPE_FLOAT: - SWITCH_BY_BITS_CASEX3(FLOAT, bits, 16, 32, 64, nr_components) - default: - return PIPE_FORMAT_NONE; - } - -#undef CASE_BY_BIT_SWITCH_BY_NR_COMPONENTS_1TO4 -#undef SWITCH_BY_BITS_CASEX3 -#undef SWITCH_BY_BITS_CASEX4 - - return PIPE_FORMAT_NONE; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.csv b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.csv deleted file mode 100644 index 41664a9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.csv +++ /dev/null @@ -1,586 +0,0 @@ -########################################################################### -# -# Copyright 2009-2010 VMware, Inc. -# 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, sub license, 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 (including the -# next paragraph) 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 NON-INFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS 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. -# -########################################################################### - -# This CSV file has the input data for u_format.h's struct -# util_format_description. It is also used as input for radeonsi's format -# mapping. -# -# Each format entry contains: -# - name, per enum pipe_format -# - layout, per enum util_format_layout, in shortened lower caps -# - pixel block's width -# - pixel block's height -# - pixel block's depth, in number of pixels -# - channel encoding (only meaningful for plain layout), containing for each -# channel the following information: -# - type, one of -# - 'x': void -# - 'u': unsigned -# - 's': signed -# - 'h': fixed -# - 'f': FLOAT -# - optionally followed by 'n' if it is normalized -# - optionally followed by 'p' if it is pure -# - number of bits -# - channel swizzle -# - color space: rgb, srgb, yuv, zs -# - (optional) channel encoding for big-endian targets -# - (optional) channel swizzle for big-endian targets -# -# See also: -# - http://msdn.microsoft.com/en-us/library/bb172558.aspx (D3D9) -# - http://msdn.microsoft.com/en-us/library/bb205073.aspx#mapping_texture_formats (D3D9 -> D3D10) -# - http://msdn.microsoft.com/en-us/library/bb173059.aspx (D3D10) -# -# Note that GL doesn't really specify the layout of internal formats. See -# OpenGL 2.1 specification, Table 3.16, on the "Correspondence of sized -# internal formats to base in- ternal formats, and desired component -# resolutions for each sized internal format." - -# None -# Described as regular uint_8 bytes, i.e. PIPE_FORMAT_R8_USCALED -PIPE_FORMAT_NONE , plain, 1, 1, 1, u8 , , , , x001, rgb - -# Typical rendertarget formats -PIPE_FORMAT_B8G8R8A8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , un8 , zyxw, rgb -PIPE_FORMAT_B8G8R8X8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , x8 , zyx1, rgb -PIPE_FORMAT_B8G8R8X8_SNORM , plain, 1, 1, 1, sn8 , sn8 , sn8 , x8 , zyx1, rgb -PIPE_FORMAT_B8G8R8X8_UINT , plain, 1, 1, 1, up8 , up8 , up8 , x8 , zyx1, rgb -PIPE_FORMAT_B8G8R8X8_SINT , plain, 1, 1, 1, sp8 , sp8 , sp8 , x8 , zyx1, rgb -PIPE_FORMAT_A8R8G8B8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , un8 , yzwx, rgb -PIPE_FORMAT_A8R8G8B8_SNORM , plain, 1, 1, 1, sn8 , sn8 , sn8 , sn8 , yzwx, rgb -PIPE_FORMAT_A8R8G8B8_SINT , plain, 1, 1, 1, sp8 , sp8 , sp8 , sp8 , yzwx, rgb -PIPE_FORMAT_X8R8G8B8_UNORM , plain, 1, 1, 1, x8 , un8 , un8 , un8 , yzw1, rgb -PIPE_FORMAT_X8R8G8B8_SNORM , plain, 1, 1, 1, x8 , sn8 , sn8 , sn8 , yzw1, rgb -PIPE_FORMAT_X8R8G8B8_SINT , plain, 1, 1, 1, x8 , sp8 , sp8 , sp8 , yzw1, rgb -PIPE_FORMAT_A8B8G8R8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , un8 , wzyx, rgb -PIPE_FORMAT_X8B8G8R8_UNORM , plain, 1, 1, 1, x8 , un8 , un8 , un8 , wzy1, rgb -# PIPE_FORMAT_R8G8B8A8_UNORM is below -PIPE_FORMAT_R8G8B8X8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , x8 , xyz1, rgb -PIPE_FORMAT_R5G5B5A1_UNORM , plain, 1, 1, 1, un5 , un5 , un5 , un1 , xyzw, rgb -PIPE_FORMAT_R5G5B5X1_UNORM , plain, 1, 1, 1, un5 , un5 , un5 , x1 , xyz1, rgb -PIPE_FORMAT_B5G5R5X1_UNORM , plain, 1, 1, 1, un5 , un5 , un5 , x1 , zyx1, rgb -PIPE_FORMAT_B5G5R5A1_UNORM , plain, 1, 1, 1, un5 , un5 , un5 , un1 , zyxw, rgb -PIPE_FORMAT_X1B5G5R5_UNORM , plain, 1, 1, 1, x1 , un5 , un5 , un5 , wzy1, rgb -PIPE_FORMAT_A1R5G5B5_UNORM , plain, 1, 1, 1, un1 , un5 , un5 , un5 , yzwx, rgb -PIPE_FORMAT_X1R5G5B5_UNORM , plain, 1, 1, 1, x1 , un5 , un5 , un5 , yzw1, rgb -PIPE_FORMAT_A1B5G5R5_UNORM , plain, 1, 1, 1, un1 , un5 , un5 , un5 , wzyx, rgb -PIPE_FORMAT_R4G4B4A4_UNORM , plain, 1, 1, 1, un4 , un4 , un4 , un4 , xyzw, rgb -PIPE_FORMAT_R4G4B4X4_UNORM , plain, 1, 1, 1, un4 , un4 , un4 , x4 , xyz1, rgb -PIPE_FORMAT_B4G4R4A4_UNORM , plain, 1, 1, 1, un4 , un4 , un4 , un4 , zyxw, rgb -PIPE_FORMAT_B4G4R4X4_UNORM , plain, 1, 1, 1, un4 , un4 , un4 , x4 , zyx1, rgb -PIPE_FORMAT_A4R4G4B4_UNORM , plain, 1, 1, 1, un4 , un4 , un4 , un4 , yzwx, rgb -PIPE_FORMAT_A4B4G4R4_UNORM , plain, 1, 1, 1, un4 , un4 , un4 , un4 , wzyx, rgb -PIPE_FORMAT_R5G6B5_UNORM , plain, 1, 1, 1, un5 , un6 , un5 , , xyz1, rgb -PIPE_FORMAT_B5G6R5_UNORM , plain, 1, 1, 1, un5 , un6 , un5 , , zyx1, rgb -PIPE_FORMAT_R10G10B10A2_UNORM , plain, 1, 1, 1, un10, un10, un10, un2 , xyzw, rgb -PIPE_FORMAT_R10G10B10X2_UNORM , plain, 1, 1, 1, un10, un10, un10, x2, xyz1, rgb -PIPE_FORMAT_B10G10R10A2_UNORM , plain, 1, 1, 1, un10, un10, un10, un2 , zyxw, rgb -PIPE_FORMAT_A2R10G10B10_UNORM , plain, 1, 1, 1, un2 , un10, un10, un10, yzwx, rgb -PIPE_FORMAT_A2B10G10R10_UNORM , plain, 1, 1, 1, un2 , un10, un10, un10, wzyx, rgb -PIPE_FORMAT_R3G3B2_UNORM , plain, 1, 1, 1, un3 , un3 , un2 , , xyz1, rgb -PIPE_FORMAT_B2G3R3_UNORM , plain, 1, 1, 1, un2 , un3 , un3 , , zyx1, rgb - -# Luminance/Intensity/Alpha formats -PIPE_FORMAT_L8_UNORM , plain, 1, 1, 1, un8 , , , , xxx1, rgb -PIPE_FORMAT_A8_UNORM , plain, 1, 1, 1, un8 , , , , 000x, rgb -PIPE_FORMAT_I8_UNORM , plain, 1, 1, 1, un8 , , , , xxxx, rgb -PIPE_FORMAT_L4A4_UNORM , plain, 1, 1, 1, un4 , un4 , , , xxxy, rgb -PIPE_FORMAT_L8A8_UNORM , plain, 1, 1, 1, un8 , un8 , , , xxxy, rgb -PIPE_FORMAT_L16_UNORM , plain, 1, 1, 1, un16, , , , xxx1, rgb -PIPE_FORMAT_A16_UNORM , plain, 1, 1, 1, un16, , , , 000x, rgb -PIPE_FORMAT_I16_UNORM , plain, 1, 1, 1, un16, , , , xxxx, rgb -PIPE_FORMAT_L16A16_UNORM , plain, 1, 1, 1, un16, un16, , , xxxy, rgb -PIPE_FORMAT_A8_SNORM , plain, 1, 1, 1, sn8 , , , , 000x, rgb -PIPE_FORMAT_L8_SNORM , plain, 1, 1, 1, sn8 , , , , xxx1, rgb -PIPE_FORMAT_L8A8_SNORM , plain, 1, 1, 1, sn8 , sn8 , , , xxxy, rgb -PIPE_FORMAT_I8_SNORM , plain, 1, 1, 1, sn8 , , , , xxxx, rgb -PIPE_FORMAT_A16_SNORM , plain, 1, 1, 1, sn16, , , , 000x, rgb -PIPE_FORMAT_L16_SNORM , plain, 1, 1, 1, sn16, , , , xxx1, rgb -PIPE_FORMAT_L16A16_SNORM , plain, 1, 1, 1, sn16, sn16, , , xxxy, rgb -PIPE_FORMAT_I16_SNORM , plain, 1, 1, 1, sn16, , , , xxxx, rgb -PIPE_FORMAT_A16_FLOAT , plain, 1, 1, 1, f16 , , , , 000x, rgb -PIPE_FORMAT_L16_FLOAT , plain, 1, 1, 1, f16 , , , , xxx1, rgb -PIPE_FORMAT_L16A16_FLOAT , plain, 1, 1, 1, f16 , f16 , , , xxxy, rgb -PIPE_FORMAT_I16_FLOAT , plain, 1, 1, 1, f16 , , , , xxxx, rgb -PIPE_FORMAT_A32_FLOAT , plain, 1, 1, 1, f32 , , , , 000x, rgb -PIPE_FORMAT_L32_FLOAT , plain, 1, 1, 1, f32 , , , , xxx1, rgb -PIPE_FORMAT_L32A32_FLOAT , plain, 1, 1, 1, f32 , f32 , , , xxxy, rgb -PIPE_FORMAT_I32_FLOAT , plain, 1, 1, 1, f32 , , , , xxxx, rgb - -# SRGB formats -PIPE_FORMAT_L8_SRGB , plain, 1, 1, 1, un8 , , , , xxx1, srgb -PIPE_FORMAT_R8_SRGB , plain, 1, 1, 1, un8 , , , , x001, srgb -PIPE_FORMAT_L8A8_SRGB , plain, 1, 1, 1, un8 , un8 , , , xxxy, srgb -PIPE_FORMAT_R8G8_SRGB , plain, 1, 1, 1, un8 , un8 , , , xy01, srgb -PIPE_FORMAT_R8G8B8_SRGB , plain, 1, 1, 1, un8 , un8 , un8 , , xyz1, srgb -PIPE_FORMAT_B8G8R8_SRGB , plain, 1, 1, 1, un8 , un8 , un8 , , zyx1, srgb -PIPE_FORMAT_R8G8B8A8_SRGB , plain, 1, 1, 1, un8 , un8 , un8 , un8 , xyzw, srgb -PIPE_FORMAT_A8B8G8R8_SRGB , plain, 1, 1, 1, un8 , un8 , un8 , un8 , wzyx, srgb -PIPE_FORMAT_X8B8G8R8_SRGB , plain, 1, 1, 1, x8 , un8 , un8 , un8 , wzy1, srgb -PIPE_FORMAT_B8G8R8A8_SRGB , plain, 1, 1, 1, un8 , un8 , un8 , un8 , zyxw, srgb -PIPE_FORMAT_B8G8R8X8_SRGB , plain, 1, 1, 1, un8 , un8 , un8 , x8 , zyx1, srgb -PIPE_FORMAT_A8R8G8B8_SRGB , plain, 1, 1, 1, un8 , un8 , un8 , un8 , yzwx, srgb -PIPE_FORMAT_X8R8G8B8_SRGB , plain, 1, 1, 1, x8 , un8 , un8 , un8 , yzw1, srgb - -# Mixed-sign formats (typically used for bump map textures) -PIPE_FORMAT_R8SG8SB8UX8U_NORM , plain, 1, 1, 1, sn8 , sn8 , un8 , x8 , xyz1, rgb -PIPE_FORMAT_R10SG10SB10SA2U_NORM , plain, 1, 1, 1, sn10, sn10, sn10, un2 , xyzw, rgb -PIPE_FORMAT_R5SG5SB6U_NORM , plain, 1, 1, 1, sn5 , sn5 , un6 , , xyz1, rgb - -# Depth-stencil formats -PIPE_FORMAT_S8_UINT , plain, 1, 1, 1, up8 , , , , _x__, zs -PIPE_FORMAT_Z16_UNORM , plain, 1, 1, 1, un16, , , , x___, zs -PIPE_FORMAT_Z16_UNORM_S8_UINT , plain, 1, 1, 1, un16, up8 , , , xy__, zs -PIPE_FORMAT_Z32_UNORM , plain, 1, 1, 1, un32, , , , x___, zs -PIPE_FORMAT_Z32_FLOAT , plain, 1, 1, 1, f32 , , , , x___, zs -PIPE_FORMAT_Z24_UNORM_S8_UINT , plain, 1, 1, 1, un24, up8 , , , xy__, zs -PIPE_FORMAT_S8_UINT_Z24_UNORM , plain, 1, 1, 1, up8 , un24, , , yx__, zs -PIPE_FORMAT_X24S8_UINT , plain, 1, 1, 1, x24 , up8 , , , _y__, zs -PIPE_FORMAT_S8X24_UINT , plain, 1, 1, 1, up8 , x24 , , , _x__, zs -PIPE_FORMAT_Z24X8_UNORM , plain, 1, 1, 1, un24, x8 , , , x___, zs -PIPE_FORMAT_X8Z24_UNORM , plain, 1, 1, 1, x8 , un24, , , y___, zs -PIPE_FORMAT_Z32_FLOAT_S8X24_UINT , plain, 1, 1, 1, f32 , up8 , x24, , xy__, zs, f32 , x24 , up8, , xz__ -PIPE_FORMAT_X32_S8X24_UINT , plain, 1, 1, 1, x32 , up8 , x24, , _y__, zs, x32 , x24 , up8, , _z__ - -# Depth-stencil formats equivalent to blitting PIPE_FORMAT_Z24_UNORM_S8_UINT -# as PIPE_FORMAT_R8G8B8A8_*, in that it is an equivalent size to the z/s -# format. This is mainly for hw that has some sort of bandwidth compressed -# format where the compression for z24s8 is not equivalent to r8g8b8a8, -# and therefore some special handling is required for blits. -PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8 , plain, 1, 1, 1, un8 , un8 , un8 , un8 , xyzw, rgb - -# YUV formats -# http://www.fourcc.org/yuv.php#UYVY -PIPE_FORMAT_UYVY , subsampled, 2, 1, 1, un8 , un8 , un8 , un8 , xyz1, yuv -# http://www.fourcc.org/yuv.php#YUYV (a.k.a http://www.fourcc.org/yuv.php#YUY2) -PIPE_FORMAT_YUYV , subsampled, 2, 1, 1, un8 , un8 , un8 , un8 , xyz1, yuv - -PIPE_FORMAT_AYUV , other, 4, 4, 1, un8 , , , , xyzw, yuv -PIPE_FORMAT_XYUV , other, 4, 4, 1, un8 , , , , xyz1, yuv - -# same subsampling but with rgb channels -PIPE_FORMAT_R8G8_B8G8_UNORM , subsampled, 2, 1, 1, x32 , , , , xyz1, rgb -PIPE_FORMAT_G8R8_G8B8_UNORM , subsampled, 2, 1, 1, x32 , , , , xyz1, rgb -PIPE_FORMAT_G8R8_B8R8_UNORM , subsampled, 2, 1, 1, x32 , , , , zyx1, rgb -PIPE_FORMAT_R8G8_R8B8_UNORM , subsampled, 2, 1, 1, x32 , , , , zyx1, rgb - -# some special formats not fitting anywhere else -PIPE_FORMAT_R11G11B10_FLOAT , other, 1, 1, 1, f11 , f11 , f10 , , xyz1, rgb -PIPE_FORMAT_R9G9B9E5_FLOAT , other, 1, 1, 1, f9 , f9 , f9 , x5 , xyz1, rgb -PIPE_FORMAT_R1_UNORM , other, 8, 1, 1, x8 , , , , x001, rgb -# A.k.a. D3DFMT_CxV8U8 -PIPE_FORMAT_R8G8Bx_SNORM , other, 1, 1, 1, sn8 , sn8 , , , xyz1, rgb - -# Compressed formats -# - http://en.wikipedia.org/wiki/S3_Texture_Compression -# - http://www.opengl.org/registry/specs/EXT/texture_compression_s3tc.txt -# - http://www.opengl.org/registry/specs/ARB/texture_compression_rgtc.txt -# - http://www.opengl.org/registry/specs/EXT/texture_compression_latc.txt -# - http://www.opengl.org/registry/specs/ARB/texture_compression_bptc.txt -# - http://www.khronos.org/registry/gles/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt -# - http://msdn.microsoft.com/en-us/library/bb694531.aspx -PIPE_FORMAT_DXT1_RGB , s3tc, 4, 4, 1, x64 , , , , xyz1, rgb -PIPE_FORMAT_DXT1_RGBA , s3tc, 4, 4, 1, x64 , , , , xyzw, rgb -PIPE_FORMAT_DXT3_RGBA , s3tc, 4, 4, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_DXT5_RGBA , s3tc, 4, 4, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_DXT1_SRGB , s3tc, 4, 4, 1, x64 , , , , xyz1, srgb -PIPE_FORMAT_DXT1_SRGBA , s3tc, 4, 4, 1, x64 , , , , xyzw, srgb -PIPE_FORMAT_DXT3_SRGBA , s3tc, 4, 4, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_DXT5_SRGBA , s3tc, 4, 4, 1, x128, , , , xyzw, srgb - -# FXT1 compressed formats -PIPE_FORMAT_FXT1_RGB , fxt1, 8, 4, 1, x128, , , , xyz1, rgb -PIPE_FORMAT_FXT1_RGBA , fxt1, 8, 4, 1, x128, , , , xyzw, rgb - -PIPE_FORMAT_RGTC1_UNORM , rgtc, 4, 4, 1, x64, , , , x001, rgb -PIPE_FORMAT_RGTC1_SNORM , rgtc, 4, 4, 1, x64, , , , x001, rgb -PIPE_FORMAT_RGTC2_UNORM , rgtc, 4, 4, 1, x128, , , , xy01, rgb -PIPE_FORMAT_RGTC2_SNORM , rgtc, 4, 4, 1, x128, , , , xy01, rgb - -PIPE_FORMAT_LATC1_UNORM , rgtc, 4, 4, 1, x64, , , , xxx1, rgb -PIPE_FORMAT_LATC1_SNORM , rgtc, 4, 4, 1, x64, , , , xxx1, rgb -PIPE_FORMAT_LATC2_UNORM , rgtc, 4, 4, 1, x128, , , , xxxy, rgb -PIPE_FORMAT_LATC2_SNORM , rgtc, 4, 4, 1, x128, , , , xxxy, rgb - -PIPE_FORMAT_ETC1_RGB8 , etc, 4, 4, 1, x64, , , , xyz1, rgb - -PIPE_FORMAT_ETC2_RGB8 , etc, 4, 4, 1, x64, , , , xyz1, rgb -PIPE_FORMAT_ETC2_SRGB8 , etc, 4, 4, 1, x64, , , , xyz1, srgb -PIPE_FORMAT_ETC2_RGB8A1 , etc, 4, 4, 1, x64, , , , xyzw, rgb -PIPE_FORMAT_ETC2_SRGB8A1 , etc, 4, 4, 1, x64, , , , xyzw, srgb -PIPE_FORMAT_ETC2_RGBA8 , etc, 4, 4, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ETC2_SRGBA8 , etc, 4, 4, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ETC2_R11_UNORM , etc, 4, 4, 1, x64, , , , x001, rgb -PIPE_FORMAT_ETC2_R11_SNORM , etc, 4, 4, 1, x64, , , , x001, rgb -PIPE_FORMAT_ETC2_RG11_UNORM , etc, 4, 4, 1, x128, , , , xy01, rgb -PIPE_FORMAT_ETC2_RG11_SNORM , etc, 4, 4, 1, x128, , , , xy01, rgb - -PIPE_FORMAT_BPTC_RGBA_UNORM , bptc, 4, 4, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_BPTC_SRGBA , bptc, 4, 4, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_BPTC_RGB_FLOAT , bptc, 4, 4, 1, x128, , , , xyz1, rgb -PIPE_FORMAT_BPTC_RGB_UFLOAT , bptc, 4, 4, 1, x128, , , , xyz1, rgb - -PIPE_FORMAT_ASTC_4x4 , astc, 4, 4, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_5x4 , astc, 5, 4, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_5x5 , astc, 5, 5, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_6x5 , astc, 6, 5, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_6x6 , astc, 6, 6, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_8x5 , astc, 8, 5, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_8x6 , astc, 8, 6, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_8x8 , astc, 8, 8, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_10x5 , astc,10, 5, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_10x6 , astc,10, 6, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_10x8 , astc,10, 8, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_10x10 , astc,10,10, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_12x10 , astc,12,10, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_12x12 , astc,12,12, 1, x128, , , , xyzw, rgb - -PIPE_FORMAT_ASTC_4x4_SRGB , astc, 4, 4, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_5x4_SRGB , astc, 5, 4, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_5x5_SRGB , astc, 5, 5, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_6x5_SRGB , astc, 6, 5, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_6x6_SRGB , astc, 6, 6, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_8x5_SRGB , astc, 8, 5, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_8x6_SRGB , astc, 8, 6, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_8x8_SRGB , astc, 8, 8, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_10x5_SRGB , astc,10, 5, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_10x6_SRGB , astc,10, 6, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_10x8_SRGB , astc,10, 8, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_10x10_SRGB , astc,10,10, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_12x10_SRGB , astc,12,10, 1, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_12x12_SRGB , astc,12,12, 1, x128, , , , xyzw, srgb - -PIPE_FORMAT_ASTC_3x3x3 , astc, 3, 3, 3, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_4x3x3 , astc, 4, 3, 3, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_4x4x3 , astc, 4, 4, 3, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_4x4x4 , astc, 4, 4, 4, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_5x4x4 , astc, 5, 4, 4, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_5x5x4 , astc, 5, 5, 4, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_5x5x5 , astc, 5, 5, 5, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_6x5x5 , astc, 6, 5, 5, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_6x6x5 , astc, 6, 6, 5, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_6x6x6 , astc, 6, 6, 6, x128, , , , xyzw, rgb -PIPE_FORMAT_ASTC_3x3x3_SRGB , astc, 3, 3, 3, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_4x3x3_SRGB , astc, 4, 3, 3, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_4x4x3_SRGB , astc, 4, 4, 3, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_4x4x4_SRGB , astc, 4, 4, 4, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_5x4x4_SRGB , astc, 5, 4, 4, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_5x5x4_SRGB , astc, 5, 5, 4, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_5x5x5_SRGB , astc, 5, 5, 5, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_6x5x5_SRGB , astc, 6, 5, 5, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_6x6x5_SRGB , astc, 6, 6, 5, x128, , , , xyzw, srgb -PIPE_FORMAT_ASTC_6x6x6_SRGB , astc, 6, 6, 6, x128, , , , xyzw, srgb - -PIPE_FORMAT_ATC_RGB , atc, 4, 4, 1, x64, , , , xyz1, rgb -PIPE_FORMAT_ATC_RGBA_EXPLICIT , atc, 4, 4, 1, x128, , , , xyzw, rgb -PIPE_FORMAT_ATC_RGBA_INTERPOLATED , atc, 4, 4, 1, x128, , , , xyzw, rgb - -# Straightforward D3D10-like formats (also used for -# vertex buffer element description) -# -# See also: -# - src/gallium/auxiliary/translate/translate_generic.c -# - src/mesa/state_tracker/st_draw.c -PIPE_FORMAT_R64_FLOAT , plain, 1, 1, 1, f64 , , , , x001, rgb -PIPE_FORMAT_R64G64_FLOAT , plain, 1, 1, 1, f64 , f64 , , , xy01, rgb -PIPE_FORMAT_R64G64B64_FLOAT , plain, 1, 1, 1, f64 , f64 , f64 , , xyz1, rgb -PIPE_FORMAT_R64G64B64A64_FLOAT , plain, 1, 1, 1, f64 , f64 , f64 , f64 , xyzw, rgb -PIPE_FORMAT_R32_FLOAT , plain, 1, 1, 1, f32 , , , , x001, rgb -PIPE_FORMAT_R32G32_FLOAT , plain, 1, 1, 1, f32 , f32 , , , xy01, rgb -PIPE_FORMAT_R32G32B32_FLOAT , plain, 1, 1, 1, f32 , f32 , f32 , , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_FLOAT , plain, 1, 1, 1, f32 , f32 , f32 , f32 , xyzw, rgb -PIPE_FORMAT_R32_UNORM , plain, 1, 1, 1, un32, , , , x001, rgb -PIPE_FORMAT_R32G32_UNORM , plain, 1, 1, 1, un32, un32, , , xy01, rgb -PIPE_FORMAT_R32G32B32_UNORM , plain, 1, 1, 1, un32, un32, un32, , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_UNORM , plain, 1, 1, 1, un32, un32, un32, un32, xyzw, rgb -PIPE_FORMAT_R32_USCALED , plain, 1, 1, 1, u32 , , , , x001, rgb -PIPE_FORMAT_R32G32_USCALED , plain, 1, 1, 1, u32 , u32 , , , xy01, rgb -PIPE_FORMAT_R32G32B32_USCALED , plain, 1, 1, 1, u32 , u32 , u32 , , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_USCALED , plain, 1, 1, 1, u32 , u32 , u32 , u32 , xyzw, rgb -PIPE_FORMAT_R32_SNORM , plain, 1, 1, 1, sn32, , , , x001, rgb -PIPE_FORMAT_R32G32_SNORM , plain, 1, 1, 1, sn32, sn32, , , xy01, rgb -PIPE_FORMAT_R32G32B32_SNORM , plain, 1, 1, 1, sn32, sn32, sn32, , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_SNORM , plain, 1, 1, 1, sn32, sn32, sn32, sn32, xyzw, rgb -PIPE_FORMAT_R32_SSCALED , plain, 1, 1, 1, s32 , , , , x001, rgb -PIPE_FORMAT_R32G32_SSCALED , plain, 1, 1, 1, s32 , s32 , , , xy01, rgb -PIPE_FORMAT_R32G32B32_SSCALED , plain, 1, 1, 1, s32 , s32 , s32 , , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_SSCALED , plain, 1, 1, 1, s32 , s32 , s32 , s32 , xyzw, rgb -PIPE_FORMAT_R16_FLOAT , plain, 1, 1, 1, f16 , , , , x001, rgb -PIPE_FORMAT_R16G16_FLOAT , plain, 1, 1, 1, f16 , f16 , , , xy01, rgb -PIPE_FORMAT_R16G16B16_FLOAT , plain, 1, 1, 1, f16 , f16 , f16 , , xyz1, rgb -PIPE_FORMAT_R16G16B16A16_FLOAT , plain, 1, 1, 1, f16 , f16 , f16 , f16 , xyzw, rgb -PIPE_FORMAT_R16_UNORM , plain, 1, 1, 1, un16, , , , x001, rgb -PIPE_FORMAT_R16G16_UNORM , plain, 1, 1, 1, un16, un16, , , xy01, rgb -PIPE_FORMAT_R16G16B16_UNORM , plain, 1, 1, 1, un16, un16, un16, , xyz1, rgb -PIPE_FORMAT_R16G16B16A16_UNORM , plain, 1, 1, 1, un16, un16, un16, un16, xyzw, rgb -PIPE_FORMAT_R16_USCALED , plain, 1, 1, 1, u16 , , , , x001, rgb -PIPE_FORMAT_R16G16_USCALED , plain, 1, 1, 1, u16 , u16 , , , xy01, rgb -PIPE_FORMAT_R16G16B16_USCALED , plain, 1, 1, 1, u16 , u16 , u16 , , xyz1, rgb -PIPE_FORMAT_R16G16B16A16_USCALED , plain, 1, 1, 1, u16 , u16 , u16 , u16 , xyzw, rgb -PIPE_FORMAT_R16_SNORM , plain, 1, 1, 1, sn16, , , , x001, rgb -PIPE_FORMAT_R16G16_SNORM , plain, 1, 1, 1, sn16, sn16, , , xy01, rgb -PIPE_FORMAT_R16G16B16_SNORM , plain, 1, 1, 1, sn16, sn16, sn16, , xyz1, rgb -PIPE_FORMAT_R16G16B16A16_SNORM , plain, 1, 1, 1, sn16, sn16, sn16, sn16, xyzw, rgb -PIPE_FORMAT_R16_SSCALED , plain, 1, 1, 1, s16 , , , , x001, rgb -PIPE_FORMAT_R16G16_SSCALED , plain, 1, 1, 1, s16 , s16 , , , xy01, rgb -PIPE_FORMAT_R16G16B16_SSCALED , plain, 1, 1, 1, s16 , s16 , s16 , , xyz1, rgb -PIPE_FORMAT_R16G16B16A16_SSCALED , plain, 1, 1, 1, s16 , s16 , s16 , s16 , xyzw, rgb -PIPE_FORMAT_R8_UNORM , plain, 1, 1, 1, un8 , , , , x001, rgb -PIPE_FORMAT_R8G8_UNORM , plain, 1, 1, 1, un8 , un8 , , , xy01, rgb -PIPE_FORMAT_R8G8B8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , , xyz1, rgb -PIPE_FORMAT_B8G8R8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , , zyx1, rgb -PIPE_FORMAT_R8G8B8A8_UNORM , plain, 1, 1, 1, un8 , un8 , un8 , un8 , xyzw, rgb -PIPE_FORMAT_R8_USCALED , plain, 1, 1, 1, u8 , , , , x001, rgb -PIPE_FORMAT_R8G8_USCALED , plain, 1, 1, 1, u8 , u8 , , , xy01, rgb -PIPE_FORMAT_R8G8B8_USCALED , plain, 1, 1, 1, u8 , u8 , u8 , , xyz1, rgb -PIPE_FORMAT_B8G8R8_USCALED , plain, 1, 1, 1, u8 , u8 , u8 , , zyx1, rgb -PIPE_FORMAT_R8G8B8A8_USCALED , plain, 1, 1, 1, u8 , u8 , u8 , u8 , xyzw, rgb -PIPE_FORMAT_B8G8R8A8_USCALED , plain, 1, 1, 1, u8 , u8 , u8 , u8 , zyxw, rgb -PIPE_FORMAT_A8B8G8R8_USCALED , plain, 1, 1, 1, u8 , u8 , u8 , u8 , wzyx, rgb -PIPE_FORMAT_R8_SNORM , plain, 1, 1, 1, sn8 , , , , x001, rgb -PIPE_FORMAT_R8G8_SNORM , plain, 1, 1, 1, sn8 , sn8 , , , xy01, rgb -PIPE_FORMAT_R8G8B8_SNORM , plain, 1, 1, 1, sn8 , sn8 , sn8 , , xyz1, rgb -PIPE_FORMAT_B8G8R8_SNORM , plain, 1, 1, 1, sn8 , sn8 , sn8 , , zyx1, rgb -PIPE_FORMAT_R8G8B8A8_SNORM , plain, 1, 1, 1, sn8 , sn8 , sn8 , sn8 , xyzw, rgb -PIPE_FORMAT_B8G8R8A8_SNORM , plain, 1, 1, 1, sn8 , sn8 , sn8 , sn8 , zyxw, rgb -PIPE_FORMAT_R8_SSCALED , plain, 1, 1, 1, s8 , , , , x001, rgb -PIPE_FORMAT_R8G8_SSCALED , plain, 1, 1, 1, s8 , s8 , , , xy01, rgb -PIPE_FORMAT_R8G8B8_SSCALED , plain, 1, 1, 1, s8 , s8 , s8 , , xyz1, rgb -PIPE_FORMAT_B8G8R8_SSCALED , plain, 1, 1, 1, s8 , s8 , s8 , , zyx1, rgb -PIPE_FORMAT_R8G8B8A8_SSCALED , plain, 1, 1, 1, s8 , s8 , s8 , s8 , xyzw, rgb -PIPE_FORMAT_B8G8R8A8_SSCALED , plain, 1, 1, 1, s8 , s8 , s8 , s8 , zyxw, rgb -PIPE_FORMAT_A8B8G8R8_SSCALED , plain, 1, 1, 1, s8 , s8 , s8 , s8 , wzyx, rgb - -# GL-specific vertex buffer element formats -# A.k.a. GL_FIXED -PIPE_FORMAT_R32_FIXED , plain, 1, 1, 1, h32 , , , , x001, rgb -PIPE_FORMAT_R32G32_FIXED , plain, 1, 1, 1, h32 , h32 , , , xy01, rgb -PIPE_FORMAT_R32G32B32_FIXED , plain, 1, 1, 1, h32 , h32 , h32 , , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_FIXED , plain, 1, 1, 1, h32 , h32 , h32 , h32 , xyzw, rgb - -# D3D9-specific vertex buffer element formats -# See also: -# - http://msdn.microsoft.com/en-us/library/bb172533.aspx -# A.k.a. D3DDECLTYPE_UDEC3 -PIPE_FORMAT_R10G10B10X2_USCALED , plain, 1, 1, 1, u10 , u10 , u10 , x2 , xyz1, rgb -# A.k.a. D3DDECLTYPE_DEC3N -PIPE_FORMAT_R10G10B10X2_SNORM , plain, 1, 1, 1, sn10, sn10, sn10 , x2 , xyz1, rgb -PIPE_FORMAT_R10G10B10X2_SINT , plain, 1, 1, 1, sp10, sp10, sp10 , x2 , xyz1, rgb - -PIPE_FORMAT_YV12 , planar3, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_YV16 , planar3, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_IYUV , planar3, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_NV12 , planar2, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_NV21 , planar2, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_Y8_400_UNORM , other , 1, 1, 1, un8, , , , x001, yuv - -# RGB version of NV12 and YV12 for hardware that supports sampling from -# multiplane textures but needs color-space conversion in the shader. -PIPE_FORMAT_R8_G8B8_420_UNORM , planar2, 1, 1, 1, un8, , , , xyzw, rgb -PIPE_FORMAT_G8_B8R8_420_UNORM , planar2, 1, 1, 1, un8, , , , xyzw, rgb -PIPE_FORMAT_G8_B8_R8_420_UNORM , planar3, 1, 1, 1, un8, , , , xyzw, rgb - -# While most of Mesa uses R8 for Y, U, and V planes, freedreno requires distinguishing -# between tiled Y8 data and tiled R8 data. -PIPE_FORMAT_Y8_UNORM , other, 1, 1, 1, un8, , , , x001, yuv - -PIPE_FORMAT_Y8_U8_V8_422_UNORM , planar3, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_Y8_U8V8_422_UNORM , planar2, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_Y8_U8_V8_444_UNORM , planar3, 1, 1, 1, , , , , xyzw, yuv - -PIPE_FORMAT_Y16_U16_V16_420_UNORM , planar3, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_Y16_U16_V16_422_UNORM , planar3, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_Y16_U16V16_422_UNORM , planar2, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_Y16_U16_V16_444_UNORM , planar3, 1, 1, 1, , , , , xyzw, yuv - -PIPE_FORMAT_P010 , planar2, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_P012 , planar2, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_P016 , planar2, 1, 1, 1, , , , , xyzw, yuv -PIPE_FORMAT_P030 , planar2, 1, 1, 1, , , , , xyzw, yuv - -PIPE_FORMAT_Y210 , subsampled, 2, 1, 1, x64 , , , , xyz1, yuv -PIPE_FORMAT_Y212 , subsampled, 2, 1, 1, x64 , , , , xyz1, yuv -PIPE_FORMAT_Y216 , subsampled, 2, 1, 1, x64 , , , , xyz1, yuv - -PIPE_FORMAT_Y410 , other, 1, 1, 1, un10, un10, un10, un2 , yzxw, yuv -PIPE_FORMAT_Y412 , other, 1, 1, 1, un16, un16, un16, un16, yzxw, yuv -PIPE_FORMAT_Y416 , other, 1, 1, 1, un16, un16, un16, un16, yzxw, yuv - -# Usually used to implement IA44 and AI44 formats in video decoding -PIPE_FORMAT_A4R4_UNORM , plain, 1, 1, 1, un4 , un4 , , , y00x, rgb -PIPE_FORMAT_R4A4_UNORM , plain, 1, 1, 1, un4 , un4 , , , x00y, rgb -PIPE_FORMAT_R8A8_UNORM , plain, 1, 1, 1, un8 , un8 , , , x00y, rgb -PIPE_FORMAT_A8R8_UNORM , plain, 1, 1, 1, un8 , un8 , , , y00x, rgb - -# ARB_vertex_type_10_10_10_2_REV -PIPE_FORMAT_R10G10B10A2_USCALED , plain, 1, 1, 1, u10 , u10 , u10 , u2 , xyzw, rgb -PIPE_FORMAT_R10G10B10A2_SSCALED , plain, 1, 1, 1, s10 , s10 , s10 , s2 , xyzw, rgb -PIPE_FORMAT_R10G10B10A2_SNORM , plain, 1, 1, 1, sn10, sn10, sn10, sn2 , xyzw, rgb -PIPE_FORMAT_B10G10R10A2_USCALED , plain, 1, 1, 1, u10 , u10 , u10 , u2 , zyxw, rgb -PIPE_FORMAT_B10G10R10A2_SSCALED , plain, 1, 1, 1, s10 , s10 , s10 , s2 , zyxw, rgb -PIPE_FORMAT_B10G10R10A2_SNORM , plain, 1, 1, 1, sn10, sn10, sn10, sn2 , zyxw, rgb - -PIPE_FORMAT_R8_UINT , plain, 1, 1, 1, up8, , , , x001, rgb -PIPE_FORMAT_R8G8_UINT , plain, 1, 1, 1, up8, up8, , , xy01, rgb -PIPE_FORMAT_R8G8B8_UINT , plain, 1, 1, 1, up8, up8, up8, , xyz1, rgb -PIPE_FORMAT_R8G8B8A8_UINT , plain, 1, 1, 1, up8, up8, up8, up8, xyzw, rgb - -PIPE_FORMAT_R8_SINT , plain, 1, 1, 1, sp8, , , , x001, rgb -PIPE_FORMAT_R8G8_SINT , plain, 1, 1, 1, sp8, sp8, , , xy01, rgb -PIPE_FORMAT_R8G8B8_SINT , plain, 1, 1, 1, sp8, sp8, sp8, , xyz1, rgb -PIPE_FORMAT_R8G8B8A8_SINT , plain, 1, 1, 1, sp8, sp8, sp8, sp8, xyzw, rgb - -PIPE_FORMAT_R16_UINT , plain, 1, 1, 1, up16, , , , x001, rgb -PIPE_FORMAT_R16G16_UINT , plain, 1, 1, 1, up16, up16, , , xy01, rgb -PIPE_FORMAT_R16G16B16_UINT , plain, 1, 1, 1, up16, up16, up16, , xyz1, rgb -PIPE_FORMAT_R16G16B16A16_UINT , plain, 1, 1, 1, up16, up16, up16, up16, xyzw, rgb - -PIPE_FORMAT_R16_SINT , plain, 1, 1, 1, sp16, , , , x001, rgb -PIPE_FORMAT_R16G16_SINT , plain, 1, 1, 1, sp16, sp16, , , xy01, rgb -PIPE_FORMAT_R16G16B16_SINT , plain, 1, 1, 1, sp16, sp16, sp16, , xyz1, rgb -PIPE_FORMAT_R16G16B16A16_SINT , plain, 1, 1, 1, sp16, sp16, sp16, sp16, xyzw, rgb - -PIPE_FORMAT_R32_UINT , plain, 1, 1, 1, up32, , , , x001, rgb -PIPE_FORMAT_R32G32_UINT , plain, 1, 1, 1, up32, up32, , , xy01, rgb -PIPE_FORMAT_R32G32B32_UINT , plain, 1, 1, 1, up32, up32, up32, , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_UINT , plain, 1, 1, 1, up32, up32, up32, up32, xyzw, rgb - -PIPE_FORMAT_R32_SINT , plain, 1, 1, 1, sp32, , , , x001, rgb -PIPE_FORMAT_R32G32_SINT , plain, 1, 1, 1, sp32, sp32, , , xy01, rgb -PIPE_FORMAT_R32G32B32_SINT , plain, 1, 1, 1, sp32, sp32, sp32, , xyz1, rgb -PIPE_FORMAT_R32G32B32A32_SINT , plain, 1, 1, 1, sp32, sp32, sp32, sp32, xyzw, rgb - -PIPE_FORMAT_R64_UINT , plain, 1, 1, 1, up64, , , , x001, rgb -PIPE_FORMAT_R64G64_UINT , plain, 1, 1, 1, up64, up64, , , xy01, rgb -PIPE_FORMAT_R64G64B64_UINT , plain, 1, 1, 1, up64, up64, up64, , xyz1, rgb -PIPE_FORMAT_R64G64B64A64_UINT , plain, 1, 1, 1, up64, up64, up64, up64, xyzw, rgb - -PIPE_FORMAT_R64_SINT , plain, 1, 1, 1, sp64, , , , x001, rgb -PIPE_FORMAT_R64G64_SINT , plain, 1, 1, 1, sp64, sp64, , , xy01, rgb -PIPE_FORMAT_R64G64B64_SINT , plain, 1, 1, 1, sp64, sp64, sp64, , xyz1, rgb -PIPE_FORMAT_R64G64B64A64_SINT , plain, 1, 1, 1, sp64, sp64, sp64, sp64, xyzw, rgb - -PIPE_FORMAT_A8_UINT , plain, 1, 1, 1, up8, , , , 000x, rgb -PIPE_FORMAT_I8_UINT , plain, 1, 1, 1, up8, , , , xxxx, rgb -PIPE_FORMAT_L8_UINT , plain, 1, 1, 1, up8, , , , xxx1, rgb -PIPE_FORMAT_L8A8_UINT , plain, 1, 1, 1, up8, up8, , , xxxy, rgb - -PIPE_FORMAT_A8_SINT , plain, 1, 1, 1, sp8, , , , 000x, rgb -PIPE_FORMAT_I8_SINT , plain, 1, 1, 1, sp8, , , , xxxx, rgb -PIPE_FORMAT_L8_SINT , plain, 1, 1, 1, sp8, , , , xxx1, rgb -PIPE_FORMAT_L8A8_SINT , plain, 1, 1, 1, sp8, sp8, , , xxxy, rgb - -PIPE_FORMAT_A16_UINT , plain, 1, 1, 1, up16, , , , 000x, rgb -PIPE_FORMAT_I16_UINT , plain, 1, 1, 1, up16, , , , xxxx, rgb -PIPE_FORMAT_L16_UINT , plain, 1, 1, 1, up16, , , , xxx1, rgb -PIPE_FORMAT_L16A16_UINT , plain, 1, 1, 1, up16, up16, , , xxxy, rgb - -PIPE_FORMAT_A16_SINT , plain, 1, 1, 1, sp16, , , , 000x, rgb -PIPE_FORMAT_I16_SINT , plain, 1, 1, 1, sp16, , , , xxxx, rgb -PIPE_FORMAT_L16_SINT , plain, 1, 1, 1, sp16, , , , xxx1, rgb -PIPE_FORMAT_L16A16_SINT , plain, 1, 1, 1, sp16, sp16, , , xxxy, rgb - -PIPE_FORMAT_A32_UINT , plain, 1, 1, 1, up32, , , , 000x, rgb -PIPE_FORMAT_I32_UINT , plain, 1, 1, 1, up32, , , , xxxx, rgb -PIPE_FORMAT_L32_UINT , plain, 1, 1, 1, up32, , , , xxx1, rgb -PIPE_FORMAT_L32A32_UINT , plain, 1, 1, 1, up32, up32, , , xxxy, rgb - -PIPE_FORMAT_A32_SINT , plain, 1, 1, 1, sp32, , , , 000x, rgb -PIPE_FORMAT_I32_SINT , plain, 1, 1, 1, sp32, , , , xxxx, rgb -PIPE_FORMAT_L32_SINT , plain, 1, 1, 1, sp32, , , , xxx1, rgb -PIPE_FORMAT_L32A32_SINT , plain, 1, 1, 1, sp32, sp32, , , xxxy, rgb - -PIPE_FORMAT_B8G8R8_UINT , plain, 1, 1, 1, up8 , up8 , up8 , , zyx1, rgb -PIPE_FORMAT_B8G8R8A8_UINT , plain, 1, 1, 1, up8 , up8 , up8 , up8 , zyxw, rgb - -PIPE_FORMAT_B8G8R8_SINT , plain, 1, 1, 1, sp8 , sp8 , sp8 , , zyx1, rgb -PIPE_FORMAT_B8G8R8A8_SINT , plain, 1, 1, 1, sp8 , sp8 , sp8 , sp8 , zyxw, rgb - -PIPE_FORMAT_A8R8G8B8_UINT , plain, 1, 1, 1, up8 , up8 , up8 , up8 , yzwx, rgb -PIPE_FORMAT_A8B8G8R8_UINT , plain, 1, 1, 1, up8 , up8 , up8 , up8 , wzyx, rgb -PIPE_FORMAT_A2R10G10B10_UINT , plain, 1, 1, 1, up2 , up10, up10, up10, yzwx, rgb -PIPE_FORMAT_A2B10G10R10_UINT , plain, 1, 1, 1, up2 , up10, up10, up10, wzyx, rgb -PIPE_FORMAT_B10G10R10A2_UINT , plain, 1, 1, 1, up10, up10, up10, up2, zyxw, rgb -PIPE_FORMAT_B10G10R10A2_SINT , plain, 1, 1, 1, sp10, sp10, sp10, sp2, zyxw, rgb -PIPE_FORMAT_R5G6B5_UINT , plain, 1, 1, 1, up5 , up6 , up5 , , xyz1, rgb -PIPE_FORMAT_B5G6R5_UINT , plain, 1, 1, 1, up5 , up6 , up5 , , zyx1, rgb -PIPE_FORMAT_R3G3B2_UINT , plain, 1, 1, 1, up3 , up3 , up2 , , xyz1, rgb -PIPE_FORMAT_B2G3R3_UINT , plain, 1, 1, 1, up2 , up3 , up3 , , zyx1, rgb -PIPE_FORMAT_R4G4B4A4_UINT , plain, 1, 1, 1, up4 , up4 , up4 , up4 , xyzw, rgb -PIPE_FORMAT_B4G4R4A4_UINT , plain, 1, 1, 1, up4 , up4 , up4 , up4 , zyxw, rgb -PIPE_FORMAT_A4R4G4B4_UINT , plain, 1, 1, 1, up4 , up4 , up4 , up4 , yzwx, rgb -PIPE_FORMAT_A4B4G4R4_UINT , plain, 1, 1, 1, up4 , up4 , up4 , up4 , wzyx, rgb -PIPE_FORMAT_A1R5G5B5_UINT , plain, 1, 1, 1, up1 , up5 , up5 , up5 , yzwx, rgb -PIPE_FORMAT_A1B5G5R5_UINT , plain, 1, 1, 1, up1 , up5 , up5 , up5 , wzyx, rgb -PIPE_FORMAT_R5G5B5A1_UINT , plain, 1, 1, 1, up5 , up5 , up5 , up1 , xyzw, rgb -PIPE_FORMAT_B5G5R5A1_UINT , plain, 1, 1, 1, up5 , up5 , up5 , up1 , zyxw, rgb - -PIPE_FORMAT_R8G8B8X8_SNORM , plain, 1, 1, 1, sn8, sn8, sn8, x8, xyz1, rgb -PIPE_FORMAT_R8G8B8X8_SRGB , plain, 1, 1, 1, un8, un8, un8, x8, xyz1, srgb -PIPE_FORMAT_R8G8B8X8_UINT , plain, 1, 1, 1, up8, up8, up8, x8, xyz1, rgb -PIPE_FORMAT_R8G8B8X8_SINT , plain, 1, 1, 1, sp8, sp8, sp8, x8, xyz1, rgb -PIPE_FORMAT_B10G10R10X2_UNORM , plain, 1, 1, 1, un10, un10, un10, x2, zyx1, rgb -PIPE_FORMAT_B10G10R10X2_SNORM , plain, 1, 1, 1, sn10, sn10, sn10, x2, zyx1, rgb -PIPE_FORMAT_B10G10R10X2_SINT , plain, 1, 1, 1, sp10, sp10, sp10, x2, zyx1, rgb -PIPE_FORMAT_R16G16B16X16_UNORM , plain, 1, 1, 1, un16, un16, un16, x16, xyz1, rgb -PIPE_FORMAT_R16G16B16X16_SNORM , plain, 1, 1, 1, sn16, sn16, sn16, x16, xyz1, rgb -PIPE_FORMAT_R16G16B16X16_FLOAT , plain, 1, 1, 1, f16, f16, f16, x16, xyz1, rgb -PIPE_FORMAT_R16G16B16X16_UINT , plain, 1, 1, 1, up16, up16, up16, x16, xyz1, rgb -PIPE_FORMAT_R16G16B16X16_SINT , plain, 1, 1, 1, sp16, sp16, sp16, x16, xyz1, rgb -PIPE_FORMAT_R32G32B32X32_FLOAT , plain, 1, 1, 1, f32, f32, f32, x32, xyz1, rgb -PIPE_FORMAT_R32G32B32X32_UINT , plain, 1, 1, 1, up32, up32, up32, x32, xyz1, rgb -PIPE_FORMAT_R32G32B32X32_SINT , plain, 1, 1, 1, sp32, sp32, sp32, x32, xyz1, rgb - -PIPE_FORMAT_R8A8_SNORM , plain, 1, 1, 1, sn8 , sn8 , , , x00y, rgb -PIPE_FORMAT_R16A16_UNORM , plain, 1, 1, 1, un16 , un16 , , , x00y, rgb -PIPE_FORMAT_R16A16_SNORM , plain, 1, 1, 1, sn16 , sn16 , , , x00y, rgb -PIPE_FORMAT_R16A16_FLOAT , plain, 1, 1, 1, f16 , f16 , , , x00y, rgb -PIPE_FORMAT_R32A32_FLOAT , plain, 1, 1, 1, f32 , f32 , , , x00y, rgb -PIPE_FORMAT_R8A8_UINT , plain, 1, 1, 1, up8 , up8 , , , x00y, rgb -PIPE_FORMAT_R8A8_SINT , plain, 1, 1, 1, sp8 , sp8 , , , x00y, rgb -PIPE_FORMAT_R16A16_UINT , plain, 1, 1, 1, up16 , up16 , , , x00y, rgb -PIPE_FORMAT_R16A16_SINT , plain, 1, 1, 1, sp16 , sp16 , , , x00y, rgb -PIPE_FORMAT_R32A32_UINT , plain, 1, 1, 1, up32 , up32 , , , x00y, rgb -PIPE_FORMAT_R32A32_SINT , plain, 1, 1, 1, sp32 , sp32 , , , x00y, rgb -PIPE_FORMAT_R10G10B10A2_UINT , plain, 1, 1, 1, up10 , up10 , up10, up2 , xyzw, rgb -PIPE_FORMAT_R10G10B10A2_SINT , plain, 1, 1, 1, sp10 , sp10 , sp10, sp2 , xyzw, rgb - -PIPE_FORMAT_B5G6R5_SRGB , plain, 1, 1, 1, un5 , un6 , un5 , , zyx1, srgb -PIPE_FORMAT_R5G6B5_SRGB , plain, 1, 1, 1, un5 , un6 , un5 , , xyz1, srgb - -PIPE_FORMAT_G8R8_UNORM , plain, 1, 1, 1, un8 , un8 , , , yx01, rgb -PIPE_FORMAT_G8R8_SNORM , plain, 1, 1, 1, sn8 , sn8 , , , yx01, rgb -PIPE_FORMAT_G8R8_SINT , plain, 1, 1, 1, sp8 , sp8 , , , yx01, rgb -PIPE_FORMAT_G16R16_UNORM , plain, 1, 1, 1, un16, un16, , , yx01, rgb -PIPE_FORMAT_G16R16_SNORM , plain, 1, 1, 1, sn16, sn16, , , yx01, rgb -PIPE_FORMAT_G16R16_SINT , plain, 1, 1, 1, sp16, sp16, , , yx01, rgb - -PIPE_FORMAT_A8B8G8R8_SNORM , plain, 1, 1, 1, sn8 , sn8 , sn8 , sn8 , wzyx, rgb -PIPE_FORMAT_A8B8G8R8_SINT , plain, 1, 1, 1, sp8 , sp8 , sp8 , sp8 , wzyx, rgb -PIPE_FORMAT_X8B8G8R8_SNORM , plain, 1, 1, 1, x8, sn8, sn8, sn8, wzy1, rgb -PIPE_FORMAT_X8B8G8R8_SINT , plain, 1, 1, 1, x8, sp8, sp8, sp8, wzy1, rgb diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.h deleted file mode 100644 index 560a474..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format.h +++ /dev/null @@ -1,1719 +0,0 @@ -/************************************************************************** - * - * Copyright 2009-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -#ifndef U_FORMAT_H -#define U_FORMAT_H - - -#include "u_formats.h" -#include "../../gallium/include/pipe/p_defines.h" -#include "../u_debug.h" - -#include "../../../include/c99_compat.h" - -union pipe_color_union; -struct pipe_screen; - - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * Describe how to pack/unpack pixels into/from the prescribed format. - * - * XXX: This could be renamed to something like util_format_pack, or broke down - * in flags inside util_format_block that said exactly what we want. - */ -enum util_format_layout { - /** - * Formats with util_format_block::width == util_format_block::height == 1 - * that can be described as an ordinary data structure. - */ - UTIL_FORMAT_LAYOUT_PLAIN, - - /** - * Formats with sub-sampled channels. - * - * This is for formats like YVYU where there is less than one sample per - * pixel. - */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - - /** - * S3 Texture Compression formats. - */ - UTIL_FORMAT_LAYOUT_S3TC, - - /** - * Red-Green Texture Compression formats. - */ - UTIL_FORMAT_LAYOUT_RGTC, - - /** - * Ericsson Texture Compression - */ - UTIL_FORMAT_LAYOUT_ETC, - - /** - * BC6/7 Texture Compression - */ - UTIL_FORMAT_LAYOUT_BPTC, - - UTIL_FORMAT_LAYOUT_ASTC, - - UTIL_FORMAT_LAYOUT_ATC, - - /** Formats with 2 or more planes. */ - UTIL_FORMAT_LAYOUT_PLANAR2, - UTIL_FORMAT_LAYOUT_PLANAR3, - - UTIL_FORMAT_LAYOUT_FXT1 = 10, - - /** - * Everything else that doesn't fit in any of the above layouts. - */ - UTIL_FORMAT_LAYOUT_OTHER, -}; - - -struct util_format_block -{ - /** Block width in pixels */ - unsigned width; - - /** Block height in pixels */ - unsigned height; - - /** Block depth in pixels */ - unsigned depth; - - /** Block size in bits */ - unsigned bits; -}; - - -enum util_format_type { - UTIL_FORMAT_TYPE_VOID = 0, - UTIL_FORMAT_TYPE_UNSIGNED = 1, - UTIL_FORMAT_TYPE_SIGNED = 2, - UTIL_FORMAT_TYPE_FIXED = 3, - UTIL_FORMAT_TYPE_FLOAT = 4 -}; - - -enum util_format_colorspace { - UTIL_FORMAT_COLORSPACE_RGB = 0, - UTIL_FORMAT_COLORSPACE_SRGB = 1, - UTIL_FORMAT_COLORSPACE_YUV = 2, - UTIL_FORMAT_COLORSPACE_ZS = 3 -}; - - -struct util_format_channel_description -{ - unsigned type:5; /**< UTIL_FORMAT_TYPE_x */ - unsigned normalized:1; - unsigned pure_integer:1; - unsigned size:9; /**< bits per channel */ - unsigned shift:16; /** number of bits from lsb */ -}; - - -struct util_format_description -{ - enum pipe_format format; - - const char *name; - - /** - * Short name, striped of the prefix, lower case. - */ - const char *short_name; - - /** - * Pixel block dimensions. - */ - struct util_format_block block; - - enum util_format_layout layout; - - /** - * The number of channels. - */ - unsigned nr_channels:3; - - /** - * Whether all channels have the same number of (whole) bytes and type. - */ - unsigned is_array:1; - - /** - * Whether the pixel format can be described as a bitfield structure. - * - * In particular: - * - pixel depth must be 8, 16, or 32 bits; - * - all channels must be unsigned, signed, or void - */ - unsigned is_bitmask:1; - - /** - * Whether channels have mixed types (ignoring UTIL_FORMAT_TYPE_VOID). - */ - unsigned is_mixed:1; - - /** - * Whether the format contains UNORM channels - */ - unsigned is_unorm:1; - - /** - * Whether the format contains SNORM channels - */ - unsigned is_snorm:1; - - /** - * Input channel description, in the order XYZW. - * - * Only valid for UTIL_FORMAT_LAYOUT_PLAIN formats. - * - * If each channel is accessed as an individual N-byte value, X is always - * at the lowest address in memory, Y is always next, and so on. For all - * currently-defined formats, the N-byte value has native endianness. - * - * If instead a group of channels is accessed as a single N-byte value, - * the order of the channels within that value depends on endianness. - * For big-endian targets, X is the most significant subvalue, - * otherwise it is the least significant one. - * - * For example, if X is 8 bits and Y is 24 bits, the memory order is: - * - * 0 1 2 3 - * little-endian: X Yl Ym Yu (l = lower, m = middle, u = upper) - * big-endian: X Yu Ym Yl - * - * If X is 5 bits, Y is 5 bits, Z is 5 bits and W is 1 bit, the layout is: - * - * 0 1 - * msb lsb msb lsb - * little-endian: YYYXXXXX WZZZZZYY - * big-endian: XXXXXYYY YYZZZZZW - */ - struct util_format_channel_description channel[4]; - - /** - * Output channel swizzle. - * - * The order is either: - * - RGBA - * - YUV(A) - * - ZS - * depending on the colorspace. - */ - unsigned char swizzle[4]; - - /** - * Colorspace transformation. - */ - enum util_format_colorspace colorspace; -}; - -struct util_format_pack_description { - /** - * Pack pixel blocks from R8G8B8A8_UNORM. - * Note: strides are in bytes. - * - * Only defined for non-depth-stencil formats. - */ - void - (*pack_rgba_8unorm)(uint8_t *restrict dst, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Pack pixel blocks from R32G32B32A32_FLOAT. - * Note: strides are in bytes. - * - * Only defined for non-depth-stencil formats. - */ - void - (*pack_rgba_float)(uint8_t *restrict dst, unsigned dst_stride, - const float *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Pack pixels from Z32_FLOAT. - * Note: strides are in bytes. - * - * Only defined for depth formats. - */ - void - (*pack_z_32unorm)(uint8_t *restrict dst, unsigned dst_stride, - const uint32_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Pack pixels from Z32_FLOAT. - * Note: strides are in bytes. - * - * Only defined for depth formats. - */ - void - (*pack_z_float)(uint8_t *restrict dst, unsigned dst_stride, - const float *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Pack pixels from S8_UINT. - * Note: strides are in bytes. - * - * Only defined for stencil formats. - */ - void - (*pack_s_8uint)(uint8_t *restrict dst, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - void - (*pack_rgba_uint)(uint8_t *restrict dst, unsigned dst_stride, - const uint32_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - void - (*pack_rgba_sint)(uint8_t *restrict dst, unsigned dst_stride, - const int32_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); -}; - - -struct util_format_unpack_description { - /** - * Unpack pixel blocks to R8G8B8A8_UNORM. - * Note: strides are in bytes. - * - * Only defined for non-block non-depth-stencil formats. - */ - void - (*unpack_rgba_8unorm)(uint8_t *restrict dst, const uint8_t *restrict src, - unsigned width); - - /** - * Unpack pixel blocks to R8G8B8A8_UNORM. - * Note: strides are in bytes. - * - * Only defined for block non-depth-stencil formats. - */ - void - (*unpack_rgba_8unorm_rect)(uint8_t *restrict dst, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Fetch a single pixel (i, j) from a block. - * - * XXX: Only defined for a very few select formats. - */ - void - (*fetch_rgba_8unorm)(uint8_t *restrict dst, - const uint8_t *restrict src, - unsigned i, unsigned j); - - /** - * Unpack pixel blocks to R32G32B32A32_UINT/_INT_FLOAT based on whether the - * type is pure uint, int, or other. - * - * Note: strides are in bytes. - * - * Only defined for non-block non-depth-stencil formats. - */ - void - (*unpack_rgba)(void *restrict dst, const uint8_t *restrict src, - unsigned width); - - /** - * Unpack pixel blocks to R32G32B32A32_UINT/_INT_FLOAT based on whether the - * type is pure uint, int, or other. - * - * Note: strides are in bytes. - * - * Only defined for block non-depth-stencil formats. - */ - void - (*unpack_rgba_rect)(void *restrict dst, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Unpack pixels to Z32_UNORM. - * Note: strides are in bytes. - * - * Only defined for depth formats. - */ - void - (*unpack_z_32unorm)(uint32_t *restrict dst, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Unpack pixels to Z32_FLOAT. - * Note: strides are in bytes. - * - * Only defined for depth formats. - */ - void - (*unpack_z_float)(float *restrict dst, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); - - /** - * Unpack pixels to S8_UINT. - * Note: strides are in bytes. - * - * Only defined for stencil formats. - */ - void - (*unpack_s_8uint)(uint8_t *restrict dst, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height); -}; - -typedef void (*util_format_fetch_rgba_func_ptr)(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -/* Silence warnings triggered by sharing function/struct names */ -#ifdef __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wshadow" -#endif -const struct util_format_description * -util_format_description(enum pipe_format format) ATTRIBUTE_CONST; - -const struct util_format_pack_description * -util_format_pack_description(enum pipe_format format) ATTRIBUTE_CONST; - -/* Lookup with CPU detection for choosing optimized paths. */ -const struct util_format_unpack_description * -util_format_unpack_description(enum pipe_format format) ATTRIBUTE_CONST; - -/* Codegenned table of CPU-agnostic unpack code. */ -const struct util_format_unpack_description * -util_format_unpack_description_generic(enum pipe_format format) ATTRIBUTE_CONST; - -const struct util_format_unpack_description * -util_format_unpack_description_neon(enum pipe_format format) ATTRIBUTE_CONST; - -#ifdef __GNUC__ -#pragma GCC diagnostic pop -#endif - -/** - * Returns a function to fetch a single pixel (i, j) from a block. - * - * Only defined for non-depth-stencil and non-integer formats. - */ -util_format_fetch_rgba_func_ptr -util_format_fetch_rgba_func(enum pipe_format format) ATTRIBUTE_CONST; - -/* - * Format query functions. - */ - -static inline const char * -util_format_name(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return "PIPE_FORMAT_???"; - } - - return desc->name; -} - -static inline const char * -util_format_short_name(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return "???"; - } - - return desc->short_name; -} - -/** - * Whether this format is plain, see UTIL_FORMAT_LAYOUT_PLAIN for more info. - */ -static inline bool -util_format_is_plain(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - if (!format) { - return false; - } - - return desc->layout == UTIL_FORMAT_LAYOUT_PLAIN ? true : false; -} - -static inline bool -util_format_is_compressed(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return false; - } - - switch (desc->layout) { - case UTIL_FORMAT_LAYOUT_S3TC: - case UTIL_FORMAT_LAYOUT_RGTC: - case UTIL_FORMAT_LAYOUT_ETC: - case UTIL_FORMAT_LAYOUT_BPTC: - case UTIL_FORMAT_LAYOUT_ASTC: - case UTIL_FORMAT_LAYOUT_ATC: - case UTIL_FORMAT_LAYOUT_FXT1: - /* XXX add other formats in the future */ - return true; - default: - return false; - } -} - -static inline bool -util_format_is_s3tc(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return false; - } - - return desc->layout == UTIL_FORMAT_LAYOUT_S3TC ? true : false; -} - -static inline bool -util_format_is_etc(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return false; - } - - return desc->layout == UTIL_FORMAT_LAYOUT_ETC ? true : false; -} - -static inline bool -util_format_is_srgb(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - return desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB; -} - -static inline bool -util_format_has_depth(const struct util_format_description *desc) -{ - return desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS && - desc->swizzle[0] != PIPE_SWIZZLE_NONE; -} - -static inline bool -util_format_has_stencil(const struct util_format_description *desc) -{ - return desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS && - desc->swizzle[1] != PIPE_SWIZZLE_NONE; -} - -static inline bool -util_format_is_depth_or_stencil(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return false; - } - - return util_format_has_depth(desc) || - util_format_has_stencil(desc); -} - -static inline bool -util_format_is_depth_and_stencil(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return false; - } - - return util_format_has_depth(desc) && - util_format_has_stencil(desc); -} - -/** - * For depth-stencil formats, return the equivalent depth-only format. - */ -static inline enum pipe_format -util_format_get_depth_only(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_Z24_UNORM_S8_UINT: - return PIPE_FORMAT_Z24X8_UNORM; - - case PIPE_FORMAT_S8_UINT_Z24_UNORM: - return PIPE_FORMAT_X8Z24_UNORM; - - case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: - return PIPE_FORMAT_Z32_FLOAT; - - default: - return format; - } -} - -static inline bool -util_format_is_yuv(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return false; - } - - return desc->colorspace == UTIL_FORMAT_COLORSPACE_YUV; -} - -/** - * Calculates the depth format type based upon the incoming format description. - */ -static inline unsigned -util_get_depth_format_type(const struct util_format_description *desc) -{ - unsigned depth_channel = desc->swizzle[0]; - if (desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS && - depth_channel != PIPE_SWIZZLE_NONE) { - return desc->channel[depth_channel].type; - } else { - return UTIL_FORMAT_TYPE_VOID; - } -} - - -/** - * Calculates the MRD for the depth format. MRD is used in depth bias - * for UNORM and unbound depth buffers. When the depth buffer is floating - * point, the depth bias calculation does not use the MRD. However, the - * default MRD will be 1.0 / ((1 << 24) - 1). - */ -double -util_get_depth_format_mrd(const struct util_format_description *desc); - - -/** - * Return whether this is an RGBA, Z, S, or combined ZS format. - * Useful for initializing pipe_blit_info::mask. - */ -static inline unsigned -util_format_get_mask(enum pipe_format format) -{ - const struct util_format_description *desc = - util_format_description(format); - - if (!desc) - return 0; - - if (util_format_has_depth(desc)) { - if (util_format_has_stencil(desc)) { - return PIPE_MASK_ZS; - } else { - return PIPE_MASK_Z; - } - } else { - if (util_format_has_stencil(desc)) { - return PIPE_MASK_S; - } else { - return PIPE_MASK_RGBA; - } - } -} - -/** - * Give the RGBA colormask of the channels that can be represented in this - * format. - * - * That is, the channels whose values are preserved. - */ -static inline unsigned -util_format_colormask(const struct util_format_description *desc) -{ - unsigned colormask; - unsigned chan; - - switch (desc->colorspace) { - case UTIL_FORMAT_COLORSPACE_RGB: - case UTIL_FORMAT_COLORSPACE_SRGB: - case UTIL_FORMAT_COLORSPACE_YUV: - colormask = 0; - for (chan = 0; chan < 4; ++chan) { - if (desc->swizzle[chan] < 4) { - colormask |= (1 << chan); - } - } - return colormask; - case UTIL_FORMAT_COLORSPACE_ZS: - return 0; - default: - assert(0); - return 0; - } -} - - -/** - * Checks if color mask covers every channel for the specified format - * - * @param desc a format description to check colormask with - * @param colormask a bit mask for channels, matches format of PIPE_MASK_RGBA - */ -static inline bool -util_format_colormask_full(const struct util_format_description *desc, unsigned colormask) -{ - return (~colormask & util_format_colormask(desc)) == 0; -} - - -bool -util_format_is_float(enum pipe_format format) ATTRIBUTE_CONST; - - -bool -util_format_has_alpha(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_has_alpha1(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_luminance(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_alpha(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_luminance_alpha(enum pipe_format format) ATTRIBUTE_CONST; - - -bool -util_format_is_intensity(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_subsampled_422(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_pure_integer(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_pure_sint(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_pure_uint(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_snorm(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_unorm(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_snorm8(enum pipe_format format) ATTRIBUTE_CONST; - -bool -util_format_is_scaled(enum pipe_format format) ATTRIBUTE_CONST; -/** - * Check if the src format can be blitted to the destination format with - * a simple memcpy. For example, blitting from RGBA to RGBx is OK, but not - * the reverse. - */ -bool -util_is_format_compatible(const struct util_format_description *src_desc, - const struct util_format_description *dst_desc) ATTRIBUTE_CONST; - -/** - * Whether this format is a rgab8 variant. - * - * That is, any format that matches the - * - * PIPE_FORMAT_?8?8?8?8_UNORM - */ -static inline bool -util_format_is_rgba8_variant(const struct util_format_description *desc) -{ - unsigned chan; - - if(desc->block.width != 1 || - desc->block.height != 1 || - desc->block.bits != 32) - return false; - - for(chan = 0; chan < 4; ++chan) { - if(desc->channel[chan].type != UTIL_FORMAT_TYPE_UNSIGNED && - desc->channel[chan].type != UTIL_FORMAT_TYPE_VOID) - return false; - if(desc->channel[chan].type == UTIL_FORMAT_TYPE_UNSIGNED && - !desc->channel[chan].normalized) - return false; - if(desc->channel[chan].size != 8) - return false; - } - - return true; -} - - -static inline bool -util_format_is_rgbx_or_bgrx(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - return desc->layout == UTIL_FORMAT_LAYOUT_PLAIN && - desc->nr_channels == 4 && - (desc->swizzle[0] == PIPE_SWIZZLE_X || desc->swizzle[0] == PIPE_SWIZZLE_Z) && - desc->swizzle[1] == PIPE_SWIZZLE_Y && - (desc->swizzle[2] == PIPE_SWIZZLE_Z || desc->swizzle[2] == PIPE_SWIZZLE_X) && - desc->swizzle[3] == PIPE_SWIZZLE_1; -} - -/** - * Return total bits needed for the pixel format per block. - */ -static inline unsigned -util_format_get_blocksizebits(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return 0; - } - - return desc->block.bits; -} - -/** - * Return bytes per block (not pixel) for the given format. - */ -static inline unsigned -util_format_get_blocksize(enum pipe_format format) -{ - unsigned bits = util_format_get_blocksizebits(format); - unsigned bytes = bits / 8; - - assert(bits % 8 == 0); - /* Some formats have bits set to 0, let's default to 1.*/ - if (bytes == 0) { - bytes = 1; - } - - return bytes; -} - -static inline unsigned -util_format_get_blockwidth(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return 1; - } - - return desc->block.width; -} - -static inline unsigned -util_format_get_blockheight(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return 1; - } - - return desc->block.height; -} - -static inline unsigned -util_format_get_blockdepth(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - - assert(desc); - if (!desc) { - return 1; - } - - return desc->block.depth; -} - -static inline unsigned -util_format_get_nblocksx(enum pipe_format format, - unsigned x) -{ - unsigned blockwidth = util_format_get_blockwidth(format); - return (x + blockwidth - 1) / blockwidth; -} - -static inline unsigned -util_format_get_nblocksy(enum pipe_format format, - unsigned y) -{ - unsigned blockheight = util_format_get_blockheight(format); - return (y + blockheight - 1) / blockheight; -} - -static inline unsigned -util_format_get_nblocksz(enum pipe_format format, - unsigned z) -{ - unsigned blockdepth = util_format_get_blockdepth(format); - return (z + blockdepth - 1) / blockdepth; -} - -static inline unsigned -util_format_get_nblocks(enum pipe_format format, - unsigned width, - unsigned height) -{ - assert(util_format_get_blockdepth(format) == 1); - return util_format_get_nblocksx(format, width) * util_format_get_nblocksy(format, height); -} - -static inline size_t -util_format_get_stride(enum pipe_format format, - unsigned width) -{ - return (size_t)util_format_get_nblocksx(format, width) * util_format_get_blocksize(format); -} - -static inline size_t -util_format_get_2d_size(enum pipe_format format, - size_t stride, - unsigned height) -{ - return util_format_get_nblocksy(format, height) * stride; -} - -static inline unsigned -util_format_get_component_bits(enum pipe_format format, - enum util_format_colorspace colorspace, - unsigned component) -{ - const struct util_format_description *desc = util_format_description(format); - enum util_format_colorspace desc_colorspace; - - assert(format); - if (!format) { - return 0; - } - - assert(component < 4); - - /* Treat RGB and SRGB as equivalent. */ - if (colorspace == UTIL_FORMAT_COLORSPACE_SRGB) { - colorspace = UTIL_FORMAT_COLORSPACE_RGB; - } - if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) { - desc_colorspace = UTIL_FORMAT_COLORSPACE_RGB; - } else { - desc_colorspace = desc->colorspace; - } - - if (desc_colorspace != colorspace) { - return 0; - } - - switch (desc->swizzle[component]) { - case PIPE_SWIZZLE_X: - return desc->channel[0].size; - case PIPE_SWIZZLE_Y: - return desc->channel[1].size; - case PIPE_SWIZZLE_Z: - return desc->channel[2].size; - case PIPE_SWIZZLE_W: - return desc->channel[3].size; - default: - return 0; - } -} - -/** - * Given a linear RGB colorspace format, return the corresponding SRGB - * format, or PIPE_FORMAT_NONE if none. - */ -static inline enum pipe_format -util_format_srgb(enum pipe_format format) -{ - if (util_format_is_srgb(format)) - return format; - - switch (format) { - case PIPE_FORMAT_L8_UNORM: - return PIPE_FORMAT_L8_SRGB; - case PIPE_FORMAT_R8_UNORM: - return PIPE_FORMAT_R8_SRGB; - case PIPE_FORMAT_L8A8_UNORM: - return PIPE_FORMAT_L8A8_SRGB; - case PIPE_FORMAT_R8G8_UNORM: - return PIPE_FORMAT_R8G8_SRGB; - case PIPE_FORMAT_R8G8B8_UNORM: - return PIPE_FORMAT_R8G8B8_SRGB; - case PIPE_FORMAT_B8G8R8_UNORM: - return PIPE_FORMAT_B8G8R8_SRGB; - case PIPE_FORMAT_A8B8G8R8_UNORM: - return PIPE_FORMAT_A8B8G8R8_SRGB; - case PIPE_FORMAT_X8B8G8R8_UNORM: - return PIPE_FORMAT_X8B8G8R8_SRGB; - case PIPE_FORMAT_B8G8R8A8_UNORM: - return PIPE_FORMAT_B8G8R8A8_SRGB; - case PIPE_FORMAT_B8G8R8X8_UNORM: - return PIPE_FORMAT_B8G8R8X8_SRGB; - case PIPE_FORMAT_A8R8G8B8_UNORM: - return PIPE_FORMAT_A8R8G8B8_SRGB; - case PIPE_FORMAT_X8R8G8B8_UNORM: - return PIPE_FORMAT_X8R8G8B8_SRGB; - case PIPE_FORMAT_R8G8B8A8_UNORM: - return PIPE_FORMAT_R8G8B8A8_SRGB; - case PIPE_FORMAT_R8G8B8X8_UNORM: - return PIPE_FORMAT_R8G8B8X8_SRGB; - case PIPE_FORMAT_DXT1_RGB: - return PIPE_FORMAT_DXT1_SRGB; - case PIPE_FORMAT_DXT1_RGBA: - return PIPE_FORMAT_DXT1_SRGBA; - case PIPE_FORMAT_DXT3_RGBA: - return PIPE_FORMAT_DXT3_SRGBA; - case PIPE_FORMAT_DXT5_RGBA: - return PIPE_FORMAT_DXT5_SRGBA; - case PIPE_FORMAT_R5G6B5_UNORM: - return PIPE_FORMAT_R5G6B5_SRGB; - case PIPE_FORMAT_B5G6R5_UNORM: - return PIPE_FORMAT_B5G6R5_SRGB; - case PIPE_FORMAT_BPTC_RGBA_UNORM: - return PIPE_FORMAT_BPTC_SRGBA; - case PIPE_FORMAT_ETC2_RGB8: - return PIPE_FORMAT_ETC2_SRGB8; - case PIPE_FORMAT_ETC2_RGB8A1: - return PIPE_FORMAT_ETC2_SRGB8A1; - case PIPE_FORMAT_ETC2_RGBA8: - return PIPE_FORMAT_ETC2_SRGBA8; - case PIPE_FORMAT_ASTC_4x4: - return PIPE_FORMAT_ASTC_4x4_SRGB; - case PIPE_FORMAT_ASTC_5x4: - return PIPE_FORMAT_ASTC_5x4_SRGB; - case PIPE_FORMAT_ASTC_5x5: - return PIPE_FORMAT_ASTC_5x5_SRGB; - case PIPE_FORMAT_ASTC_6x5: - return PIPE_FORMAT_ASTC_6x5_SRGB; - case PIPE_FORMAT_ASTC_6x6: - return PIPE_FORMAT_ASTC_6x6_SRGB; - case PIPE_FORMAT_ASTC_8x5: - return PIPE_FORMAT_ASTC_8x5_SRGB; - case PIPE_FORMAT_ASTC_8x6: - return PIPE_FORMAT_ASTC_8x6_SRGB; - case PIPE_FORMAT_ASTC_8x8: - return PIPE_FORMAT_ASTC_8x8_SRGB; - case PIPE_FORMAT_ASTC_10x5: - return PIPE_FORMAT_ASTC_10x5_SRGB; - case PIPE_FORMAT_ASTC_10x6: - return PIPE_FORMAT_ASTC_10x6_SRGB; - case PIPE_FORMAT_ASTC_10x8: - return PIPE_FORMAT_ASTC_10x8_SRGB; - case PIPE_FORMAT_ASTC_10x10: - return PIPE_FORMAT_ASTC_10x10_SRGB; - case PIPE_FORMAT_ASTC_12x10: - return PIPE_FORMAT_ASTC_12x10_SRGB; - case PIPE_FORMAT_ASTC_12x12: - return PIPE_FORMAT_ASTC_12x12_SRGB; - case PIPE_FORMAT_ASTC_3x3x3: - return PIPE_FORMAT_ASTC_3x3x3_SRGB; - case PIPE_FORMAT_ASTC_4x3x3: - return PIPE_FORMAT_ASTC_4x3x3_SRGB; - case PIPE_FORMAT_ASTC_4x4x3: - return PIPE_FORMAT_ASTC_4x4x3_SRGB; - case PIPE_FORMAT_ASTC_4x4x4: - return PIPE_FORMAT_ASTC_4x4x4_SRGB; - case PIPE_FORMAT_ASTC_5x4x4: - return PIPE_FORMAT_ASTC_5x4x4_SRGB; - case PIPE_FORMAT_ASTC_5x5x4: - return PIPE_FORMAT_ASTC_5x5x4_SRGB; - case PIPE_FORMAT_ASTC_5x5x5: - return PIPE_FORMAT_ASTC_5x5x5_SRGB; - case PIPE_FORMAT_ASTC_6x5x5: - return PIPE_FORMAT_ASTC_6x5x5_SRGB; - case PIPE_FORMAT_ASTC_6x6x5: - return PIPE_FORMAT_ASTC_6x6x5_SRGB; - case PIPE_FORMAT_ASTC_6x6x6: - return PIPE_FORMAT_ASTC_6x6x6_SRGB; - - default: - return PIPE_FORMAT_NONE; - } -} - -/** - * Given an sRGB format, return the corresponding linear colorspace format. - * For non sRGB formats, return the format unchanged. - */ -static inline enum pipe_format -util_format_linear(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_L8_SRGB: - return PIPE_FORMAT_L8_UNORM; - case PIPE_FORMAT_R8_SRGB: - return PIPE_FORMAT_R8_UNORM; - case PIPE_FORMAT_L8A8_SRGB: - return PIPE_FORMAT_L8A8_UNORM; - case PIPE_FORMAT_R8G8_SRGB: - return PIPE_FORMAT_R8G8_UNORM; - case PIPE_FORMAT_R8G8B8_SRGB: - return PIPE_FORMAT_R8G8B8_UNORM; - case PIPE_FORMAT_B8G8R8_SRGB: - return PIPE_FORMAT_B8G8R8_UNORM; - case PIPE_FORMAT_A8B8G8R8_SRGB: - return PIPE_FORMAT_A8B8G8R8_UNORM; - case PIPE_FORMAT_X8B8G8R8_SRGB: - return PIPE_FORMAT_X8B8G8R8_UNORM; - case PIPE_FORMAT_B8G8R8A8_SRGB: - return PIPE_FORMAT_B8G8R8A8_UNORM; - case PIPE_FORMAT_B8G8R8X8_SRGB: - return PIPE_FORMAT_B8G8R8X8_UNORM; - case PIPE_FORMAT_A8R8G8B8_SRGB: - return PIPE_FORMAT_A8R8G8B8_UNORM; - case PIPE_FORMAT_X8R8G8B8_SRGB: - return PIPE_FORMAT_X8R8G8B8_UNORM; - case PIPE_FORMAT_R8G8B8A8_SRGB: - return PIPE_FORMAT_R8G8B8A8_UNORM; - case PIPE_FORMAT_R8G8B8X8_SRGB: - return PIPE_FORMAT_R8G8B8X8_UNORM; - case PIPE_FORMAT_DXT1_SRGB: - return PIPE_FORMAT_DXT1_RGB; - case PIPE_FORMAT_DXT1_SRGBA: - return PIPE_FORMAT_DXT1_RGBA; - case PIPE_FORMAT_DXT3_SRGBA: - return PIPE_FORMAT_DXT3_RGBA; - case PIPE_FORMAT_DXT5_SRGBA: - return PIPE_FORMAT_DXT5_RGBA; - case PIPE_FORMAT_R5G6B5_SRGB: - return PIPE_FORMAT_R5G6B5_UNORM; - case PIPE_FORMAT_B5G6R5_SRGB: - return PIPE_FORMAT_B5G6R5_UNORM; - case PIPE_FORMAT_BPTC_SRGBA: - return PIPE_FORMAT_BPTC_RGBA_UNORM; - case PIPE_FORMAT_ETC2_SRGB8: - return PIPE_FORMAT_ETC2_RGB8; - case PIPE_FORMAT_ETC2_SRGB8A1: - return PIPE_FORMAT_ETC2_RGB8A1; - case PIPE_FORMAT_ETC2_SRGBA8: - return PIPE_FORMAT_ETC2_RGBA8; - case PIPE_FORMAT_ASTC_4x4_SRGB: - return PIPE_FORMAT_ASTC_4x4; - case PIPE_FORMAT_ASTC_5x4_SRGB: - return PIPE_FORMAT_ASTC_5x4; - case PIPE_FORMAT_ASTC_5x5_SRGB: - return PIPE_FORMAT_ASTC_5x5; - case PIPE_FORMAT_ASTC_6x5_SRGB: - return PIPE_FORMAT_ASTC_6x5; - case PIPE_FORMAT_ASTC_6x6_SRGB: - return PIPE_FORMAT_ASTC_6x6; - case PIPE_FORMAT_ASTC_8x5_SRGB: - return PIPE_FORMAT_ASTC_8x5; - case PIPE_FORMAT_ASTC_8x6_SRGB: - return PIPE_FORMAT_ASTC_8x6; - case PIPE_FORMAT_ASTC_8x8_SRGB: - return PIPE_FORMAT_ASTC_8x8; - case PIPE_FORMAT_ASTC_10x5_SRGB: - return PIPE_FORMAT_ASTC_10x5; - case PIPE_FORMAT_ASTC_10x6_SRGB: - return PIPE_FORMAT_ASTC_10x6; - case PIPE_FORMAT_ASTC_10x8_SRGB: - return PIPE_FORMAT_ASTC_10x8; - case PIPE_FORMAT_ASTC_10x10_SRGB: - return PIPE_FORMAT_ASTC_10x10; - case PIPE_FORMAT_ASTC_12x10_SRGB: - return PIPE_FORMAT_ASTC_12x10; - case PIPE_FORMAT_ASTC_12x12_SRGB: - return PIPE_FORMAT_ASTC_12x12; - case PIPE_FORMAT_ASTC_3x3x3_SRGB: - return PIPE_FORMAT_ASTC_3x3x3; - case PIPE_FORMAT_ASTC_4x3x3_SRGB: - return PIPE_FORMAT_ASTC_4x3x3; - case PIPE_FORMAT_ASTC_4x4x3_SRGB: - return PIPE_FORMAT_ASTC_4x4x3; - case PIPE_FORMAT_ASTC_4x4x4_SRGB: - return PIPE_FORMAT_ASTC_4x4x4; - case PIPE_FORMAT_ASTC_5x4x4_SRGB: - return PIPE_FORMAT_ASTC_5x4x4; - case PIPE_FORMAT_ASTC_5x5x4_SRGB: - return PIPE_FORMAT_ASTC_5x5x4; - case PIPE_FORMAT_ASTC_5x5x5_SRGB: - return PIPE_FORMAT_ASTC_5x5x5; - case PIPE_FORMAT_ASTC_6x5x5_SRGB: - return PIPE_FORMAT_ASTC_6x5x5; - case PIPE_FORMAT_ASTC_6x6x5_SRGB: - return PIPE_FORMAT_ASTC_6x6x5; - case PIPE_FORMAT_ASTC_6x6x6_SRGB: - return PIPE_FORMAT_ASTC_6x6x6; - default: - assert(!util_format_is_srgb(format)); - return format; - } -} - -/** - * Given a depth-stencil format, return the corresponding stencil-only format. - * For stencil-only formats, return the format unchanged. - */ -static inline enum pipe_format -util_format_stencil_only(enum pipe_format format) -{ - switch (format) { - /* mask out the depth component */ - case PIPE_FORMAT_Z24_UNORM_S8_UINT: - return PIPE_FORMAT_X24S8_UINT; - case PIPE_FORMAT_S8_UINT_Z24_UNORM: - return PIPE_FORMAT_S8X24_UINT; - case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: - return PIPE_FORMAT_X32_S8X24_UINT; - - /* stencil only formats */ - case PIPE_FORMAT_X24S8_UINT: - case PIPE_FORMAT_S8X24_UINT: - case PIPE_FORMAT_X32_S8X24_UINT: - case PIPE_FORMAT_S8_UINT: - return format; - - default: - assert(0); - return PIPE_FORMAT_NONE; - } -} - -/** - * Converts PIPE_FORMAT_*I* to PIPE_FORMAT_*R*. - * This is identity for non-intensity formats. - */ -static inline enum pipe_format -util_format_intensity_to_red(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_I8_UNORM: - return PIPE_FORMAT_R8_UNORM; - case PIPE_FORMAT_I8_SNORM: - return PIPE_FORMAT_R8_SNORM; - case PIPE_FORMAT_I16_UNORM: - return PIPE_FORMAT_R16_UNORM; - case PIPE_FORMAT_I16_SNORM: - return PIPE_FORMAT_R16_SNORM; - case PIPE_FORMAT_I16_FLOAT: - return PIPE_FORMAT_R16_FLOAT; - case PIPE_FORMAT_I32_FLOAT: - return PIPE_FORMAT_R32_FLOAT; - case PIPE_FORMAT_I8_UINT: - return PIPE_FORMAT_R8_UINT; - case PIPE_FORMAT_I8_SINT: - return PIPE_FORMAT_R8_SINT; - case PIPE_FORMAT_I16_UINT: - return PIPE_FORMAT_R16_UINT; - case PIPE_FORMAT_I16_SINT: - return PIPE_FORMAT_R16_SINT; - case PIPE_FORMAT_I32_UINT: - return PIPE_FORMAT_R32_UINT; - case PIPE_FORMAT_I32_SINT: - return PIPE_FORMAT_R32_SINT; - default: - assert(!util_format_is_intensity(format)); - return format; - } -} - -/** - * Converts PIPE_FORMAT_*L* to PIPE_FORMAT_*R*. - * This is identity for non-luminance formats. - */ -static inline enum pipe_format -util_format_luminance_to_red(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_L8_UNORM: - return PIPE_FORMAT_R8_UNORM; - case PIPE_FORMAT_L8_SNORM: - return PIPE_FORMAT_R8_SNORM; - case PIPE_FORMAT_L16_UNORM: - return PIPE_FORMAT_R16_UNORM; - case PIPE_FORMAT_L16_SNORM: - return PIPE_FORMAT_R16_SNORM; - case PIPE_FORMAT_L16_FLOAT: - return PIPE_FORMAT_R16_FLOAT; - case PIPE_FORMAT_L32_FLOAT: - return PIPE_FORMAT_R32_FLOAT; - case PIPE_FORMAT_L8_UINT: - return PIPE_FORMAT_R8_UINT; - case PIPE_FORMAT_L8_SINT: - return PIPE_FORMAT_R8_SINT; - case PIPE_FORMAT_L16_UINT: - return PIPE_FORMAT_R16_UINT; - case PIPE_FORMAT_L16_SINT: - return PIPE_FORMAT_R16_SINT; - case PIPE_FORMAT_L32_UINT: - return PIPE_FORMAT_R32_UINT; - case PIPE_FORMAT_L32_SINT: - return PIPE_FORMAT_R32_SINT; - - case PIPE_FORMAT_LATC1_UNORM: - return PIPE_FORMAT_RGTC1_UNORM; - case PIPE_FORMAT_LATC1_SNORM: - return PIPE_FORMAT_RGTC1_SNORM; - - case PIPE_FORMAT_L4A4_UNORM: - return PIPE_FORMAT_R4A4_UNORM; - - case PIPE_FORMAT_L8A8_UNORM: - return PIPE_FORMAT_R8A8_UNORM; - case PIPE_FORMAT_L8A8_SNORM: - return PIPE_FORMAT_R8A8_SNORM; - case PIPE_FORMAT_L16A16_UNORM: - return PIPE_FORMAT_R16A16_UNORM; - case PIPE_FORMAT_L16A16_SNORM: - return PIPE_FORMAT_R16A16_SNORM; - case PIPE_FORMAT_L16A16_FLOAT: - return PIPE_FORMAT_R16A16_FLOAT; - case PIPE_FORMAT_L32A32_FLOAT: - return PIPE_FORMAT_R32A32_FLOAT; - case PIPE_FORMAT_L8A8_UINT: - return PIPE_FORMAT_R8A8_UINT; - case PIPE_FORMAT_L8A8_SINT: - return PIPE_FORMAT_R8A8_SINT; - case PIPE_FORMAT_L16A16_UINT: - return PIPE_FORMAT_R16A16_UINT; - case PIPE_FORMAT_L16A16_SINT: - return PIPE_FORMAT_R16A16_SINT; - case PIPE_FORMAT_L32A32_UINT: - return PIPE_FORMAT_R32A32_UINT; - case PIPE_FORMAT_L32A32_SINT: - return PIPE_FORMAT_R32A32_SINT; - - case PIPE_FORMAT_L8_SRGB: - return PIPE_FORMAT_R8_SRGB; - - case PIPE_FORMAT_L8A8_SRGB: - return PIPE_FORMAT_R8G8_SRGB; - - /* We don't have compressed red-alpha variants for these. */ - case PIPE_FORMAT_LATC2_UNORM: - case PIPE_FORMAT_LATC2_SNORM: - return PIPE_FORMAT_NONE; - - default: - assert(!util_format_is_luminance(format) && - !util_format_is_luminance_alpha(format)); - return format; - } -} - -static inline unsigned -util_format_get_num_planes(enum pipe_format format) -{ - switch (util_format_description(format)->layout) { - case UTIL_FORMAT_LAYOUT_PLANAR3: - return 3; - case UTIL_FORMAT_LAYOUT_PLANAR2: - return 2; - default: - return 1; - } -} - -static inline enum pipe_format -util_format_get_plane_format(enum pipe_format format, unsigned plane) -{ - switch (format) { - case PIPE_FORMAT_YV12: - case PIPE_FORMAT_YV16: - case PIPE_FORMAT_IYUV: - case PIPE_FORMAT_Y8_U8_V8_422_UNORM: - case PIPE_FORMAT_Y8_U8_V8_444_UNORM: - case PIPE_FORMAT_Y8_400_UNORM: - return PIPE_FORMAT_R8_UNORM; - case PIPE_FORMAT_NV12: - case PIPE_FORMAT_Y8_U8V8_422_UNORM: - return !plane ? PIPE_FORMAT_R8_UNORM : PIPE_FORMAT_RG88_UNORM; - case PIPE_FORMAT_NV21: - return !plane ? PIPE_FORMAT_R8_UNORM : PIPE_FORMAT_GR88_UNORM; - case PIPE_FORMAT_Y16_U16_V16_420_UNORM: - case PIPE_FORMAT_Y16_U16_V16_422_UNORM: - case PIPE_FORMAT_Y16_U16_V16_444_UNORM: - return PIPE_FORMAT_R16_UNORM; - case PIPE_FORMAT_P010: - case PIPE_FORMAT_P012: - case PIPE_FORMAT_P016: - case PIPE_FORMAT_P030: - case PIPE_FORMAT_Y16_U16V16_422_UNORM: - return !plane ? PIPE_FORMAT_R16_UNORM : PIPE_FORMAT_R16G16_UNORM; - default: - return format; - } -} - -static inline unsigned -util_format_get_plane_width(enum pipe_format format, unsigned plane, - unsigned width) -{ - switch (format) { - case PIPE_FORMAT_YV12: - case PIPE_FORMAT_YV16: - case PIPE_FORMAT_IYUV: - case PIPE_FORMAT_NV12: - case PIPE_FORMAT_NV21: - case PIPE_FORMAT_P010: - case PIPE_FORMAT_P012: - case PIPE_FORMAT_P016: - case PIPE_FORMAT_P030: - case PIPE_FORMAT_Y8_U8_V8_422_UNORM: - case PIPE_FORMAT_Y8_U8V8_422_UNORM: - case PIPE_FORMAT_Y16_U16_V16_420_UNORM: - case PIPE_FORMAT_Y16_U16_V16_422_UNORM: - case PIPE_FORMAT_Y16_U16V16_422_UNORM: - return !plane ? width : (width + 1) / 2; - default: - return width; - } -} - -static inline unsigned -util_format_get_plane_height(enum pipe_format format, unsigned plane, - unsigned height) -{ - switch (format) { - case PIPE_FORMAT_YV12: - case PIPE_FORMAT_IYUV: - case PIPE_FORMAT_NV12: - case PIPE_FORMAT_NV21: - case PIPE_FORMAT_P010: - case PIPE_FORMAT_P012: - case PIPE_FORMAT_P016: - case PIPE_FORMAT_P030: - case PIPE_FORMAT_Y16_U16_V16_420_UNORM: - return !plane ? height : (height + 1) / 2; - case PIPE_FORMAT_YV16: - default: - return height; - } -} - -/** - * Return the number of components stored. - * Formats with block size != 1x1 will always have 1 component (the block). - */ -static inline unsigned -util_format_get_nr_components(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - return desc->nr_channels; -} - -/** - * Return the index of the first non-void channel - * -1 if no non-void channels - */ -static inline int -util_format_get_first_non_void_channel(enum pipe_format format) -{ - const struct util_format_description *desc = util_format_description(format); - int i; - - for (i = 0; i < 4; i++) - if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) - break; - - if (i == 4) - return -1; - - return i; -} - -/** - * Whether this format is any 8-bit UNORM variant. Looser than - * util_is_rgba8_variant (also includes alpha textures, for instance). - */ - -static inline bool -util_format_is_unorm8(const struct util_format_description *desc) -{ - int c = util_format_get_first_non_void_channel(desc->format); - - if (c == -1) - return false; - - return desc->is_unorm && desc->is_array && desc->channel[c].size == 8; -} - -static inline void -util_format_unpack_z_float(enum pipe_format format, float *dst, - const void *src, unsigned w) -{ - const struct util_format_unpack_description *desc = - util_format_unpack_description(format); - - desc->unpack_z_float(dst, 0, (const uint8_t *)src, 0, w, 1); -} - -static inline void -util_format_unpack_z_32unorm(enum pipe_format format, uint32_t *dst, - const void *src, unsigned w) -{ - const struct util_format_unpack_description *desc = - util_format_unpack_description(format); - - desc->unpack_z_32unorm(dst, 0, (const uint8_t *)src, 0, w, 1); -} - -static inline void -util_format_unpack_s_8uint(enum pipe_format format, uint8_t *dst, - const void *src, unsigned w) -{ - const struct util_format_unpack_description *desc = - util_format_unpack_description(format); - - desc->unpack_s_8uint(dst, 0, (const uint8_t *)src, 0, w, 1); -} - -/** - * Unpacks a row of color data to 32-bit RGBA, either integers for pure - * integer formats (sign-extended for signed data), or 32-bit floats. - */ -static inline void -util_format_unpack_rgba(enum pipe_format format, void *dst, - const void *src, unsigned w) -{ - const struct util_format_unpack_description *desc = - util_format_unpack_description(format); - - desc->unpack_rgba(dst, (const uint8_t *)src, w); -} - -static inline void -util_format_pack_z_float(enum pipe_format format, void *dst, - const float *src, unsigned w) -{ - const struct util_format_pack_description *desc = - util_format_pack_description(format); - - desc->pack_z_float((uint8_t *)dst, 0, src, 0, w, 1); -} - -static inline void -util_format_pack_z_32unorm(enum pipe_format format, void *dst, - const uint32_t *src, unsigned w) -{ - const struct util_format_pack_description *desc = - util_format_pack_description(format); - - desc->pack_z_32unorm((uint8_t *)dst, 0, src, 0, w, 1); -} - -static inline void -util_format_pack_s_8uint(enum pipe_format format, void *dst, - const uint8_t *src, unsigned w) -{ - const struct util_format_pack_description *desc = - util_format_pack_description(format); - - desc->pack_s_8uint((uint8_t *)dst, 0, src, 0, w, 1); -} - -/** - * Packs a row of color data from 32-bit RGBA, either integers for pure - * integer formats, or 32-bit floats. Values are clamped to the packed - * representation's range. - */ -static inline void -util_format_pack_rgba(enum pipe_format format, void *dst, - const void *src, unsigned w) -{ - const struct util_format_pack_description *desc = - util_format_pack_description(format); - - if (util_format_is_pure_uint(format)) - desc->pack_rgba_uint((uint8_t *)dst, 0, (const uint32_t *)src, 0, w, 1); - else if (util_format_is_pure_sint(format)) - desc->pack_rgba_sint((uint8_t *)dst, 0, (const int32_t *)src, 0, w, 1); - else - desc->pack_rgba_float((uint8_t *)dst, 0, (const float *)src, 0, w, 1); -} - -/* - * Format access functions for subrectangles - */ - -void -util_format_read_4(enum pipe_format format, - void *dst, unsigned dst_stride, - const void *src, unsigned src_stride, - unsigned x, unsigned y, unsigned w, unsigned h); - -void -util_format_write_4(enum pipe_format format, - const void *src, unsigned src_stride, - void *dst, unsigned dst_stride, - unsigned x, unsigned y, unsigned w, unsigned h); - -void -util_format_read_4ub(enum pipe_format format, - uint8_t *dst, unsigned dst_stride, - const void *src, unsigned src_stride, - unsigned x, unsigned y, unsigned w, unsigned h); - -void -util_format_write_4ub(enum pipe_format format, - const uint8_t *src, unsigned src_stride, - void *dst, unsigned dst_stride, - unsigned x, unsigned y, unsigned w, unsigned h); - -void -util_format_unpack_rgba_rect(enum pipe_format format, - void *dst, unsigned dst_stride, - const void *src, unsigned src_stride, - unsigned w, unsigned h); - -void -util_format_unpack_rgba_8unorm_rect(enum pipe_format format, - void *dst, unsigned dst_stride, - const void *src, unsigned src_stride, - unsigned w, unsigned h); - -/* - * Generic format conversion; - */ - -bool -util_format_fits_8unorm(const struct util_format_description *format_desc) ATTRIBUTE_CONST; - -bool -util_format_translate(enum pipe_format dst_format, - void *dst, unsigned dst_stride, - unsigned dst_x, unsigned dst_y, - enum pipe_format src_format, - const void *src, unsigned src_stride, - unsigned src_x, unsigned src_y, - unsigned width, unsigned height); - -bool -util_format_translate_3d(enum pipe_format dst_format, - void *dst, unsigned dst_stride, - unsigned dst_slice_stride, - unsigned dst_x, unsigned dst_y, - unsigned dst_z, - enum pipe_format src_format, - const void *src, unsigned src_stride, - unsigned src_slice_stride, - unsigned src_x, unsigned src_y, - unsigned src_z, unsigned width, - unsigned height, unsigned depth); - -/* - * Swizzle operations. - */ - -/* Compose two sets of swizzles. - * If V is a 4D vector and the function parameters represent functions that - * swizzle vector components, this holds: - * swz2(swz1(V)) = dst(V) - */ -void util_format_compose_swizzles(const unsigned char swz1[4], - const unsigned char swz2[4], - unsigned char dst[4]); - -/* Apply the swizzle provided in \param swz (which is one of PIPE_SWIZZLE_x) - * to \param src and store the result in \param dst. - * \param is_integer determines the value written for PIPE_SWIZZLE_1. - */ -void util_format_apply_color_swizzle(union pipe_color_union *dst, - const union pipe_color_union *src, - const unsigned char swz[4], - const bool is_integer); - -void pipe_swizzle_4f(float *dst, const float *src, - const unsigned char swz[4]); - -void util_format_unswizzle_4f(float *dst, const float *src, - const unsigned char swz[4]); - -enum pipe_format -util_format_snorm_to_sint(enum pipe_format format) ATTRIBUTE_CONST; - -extern void -util_copy_rect(void * dst, enum pipe_format format, - unsigned dst_stride, unsigned dst_x, unsigned dst_y, - unsigned width, unsigned height, const void * src, - int src_stride, unsigned src_x, unsigned src_y); - -/** - * If the format is RGB, return BGR. If the format is BGR, return RGB. - * This may fail by returning PIPE_FORMAT_NONE. - */ -enum pipe_format -util_format_rgb_to_bgr(enum pipe_format format); - -/* Returns the pipe format with SNORM formats cast to UNORM, otherwise the original pipe format. */ -enum pipe_format -util_format_snorm_to_unorm(enum pipe_format format); - -enum pipe_format -util_format_rgbx_to_rgba(enum pipe_format format); - -/* Returns the pipe format for the given array type, bitsize and component count. */ -enum pipe_format -util_format_get_array(const enum util_format_type type, const unsigned bits, - const unsigned nr_components, const bool normalized, - const bool pure_integer); - -#ifdef __cplusplus -} // extern "C" { -#endif - -#endif /* ! U_FORMAT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_bptc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_bptc.c deleted file mode 100644 index 9e36951..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_bptc.c +++ /dev/null @@ -1,300 +0,0 @@ -/************************************************************************** - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * Copyright (c) 2008 VMware, Inc. - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - -#include "u_format.h" -#include "u_format_bptc.h" -#include "u_format_pack.h" -#include "../format_srgb.h" -#include "../u_math.h" - -#include "texcompress_bptc_tmp.h" - -void -util_format_bptc_rgba_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - decompress_rgba_unorm(width, height, - src_row, src_stride, - dst_row, dst_stride); -} - -void -util_format_bptc_rgba_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - compress_rgba_unorm(width, height, - src_row, src_stride, - dst_row, dst_stride); -} - -void -util_format_bptc_rgba_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - uint8_t *temp_block; - temp_block = malloc(width * height * 4 * sizeof(uint8_t)); - decompress_rgba_unorm(width, height, - src_row, src_stride, - temp_block, width * 4 * sizeof(uint8_t)); - /* Direct call to row unpack instead of util_format_rgba_unpack_rect() - * to avoid table lookup that would pull in all unpack symbols. - */ - for (int y = 0; y < height; y++) { - util_format_r8g8b8a8_unorm_unpack_rgba_float((char *)dst_row + dst_stride * y, - temp_block + 4 * width * y, - width); - } - free((void *) temp_block); -} - -void -util_format_bptc_rgba_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - uint8_t *temp_block; - temp_block = malloc(width * height * 4 * sizeof(uint8_t)); - /* Direct call to row unpack instead of util_format_rgba_unpack_rect() - * to avoid table lookup that would pull in all unpack symbols. - */ - for (int y = 0; y < height; y++) { - util_format_r32g32b32a32_float_unpack_rgba_8unorm( - temp_block + 4 * width * y, - (uint8_t *)src_row + src_stride * y, - width); - } - compress_rgba_unorm(width, height, - temp_block, width * 4 * sizeof(uint8_t), - dst_row, dst_stride); - free((void *) temp_block); -} - -void -util_format_bptc_rgba_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height) -{ - uint8_t temp_block[4]; - - fetch_rgba_unorm_from_block(src + ((width * sizeof(uint8_t)) * (height / 4) + (width / 4)) * 16, - temp_block, (width % 4) + (height % 4) * 4); - - util_format_read_4(PIPE_FORMAT_R8G8B8A8_UNORM, - dst, 4 * sizeof(float), - temp_block, 4 * sizeof(uint8_t), - 0, 0, 1, 1); -} - -void -util_format_bptc_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - decompress_rgba_unorm(width, height, - src_row, src_stride, - dst_row, dst_stride); -} - -void -util_format_bptc_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - compress_rgba_unorm(width, height, - src_row, src_stride, - dst_row, dst_stride); -} - -void -util_format_bptc_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - uint8_t *temp_block; - temp_block = malloc(width * height * 4 * sizeof(uint8_t)); - decompress_rgba_unorm(width, height, - src_row, src_stride, - temp_block, width * 4 * sizeof(uint8_t)); - - /* Direct call to row unpack instead of util_format_rgba_unpack_rect() - * to avoid table lookup that would pull in all unpack symbols. - */ - for (int y = 0; y < height; y++) { - util_format_r8g8b8a8_srgb_unpack_rgba_float((char *)dst_row + dst_stride * y, - temp_block + width * 4 * y, - width); - } - - free((void *) temp_block); -} - -void -util_format_bptc_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - compress_rgb_float(width, height, - src_row, src_stride, - dst_row, dst_stride, - true); -} - -void -util_format_bptc_srgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height) -{ - uint8_t temp_block[4]; - - fetch_rgba_unorm_from_block(src + ((width * sizeof(uint8_t)) * (height / 4) + (width / 4)) * 16, - temp_block, (width % 4) + (height % 4) * 4); - util_format_r8g8b8a8_srgb_fetch_rgba(dst, temp_block, 0, 0); -} - -void -util_format_bptc_rgb_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - float *temp_block; - temp_block = malloc(width * height * 4 * sizeof(float)); - decompress_rgb_float(width, height, - src_row, src_stride, - temp_block, width * 4 * sizeof(float), - true); - /* Direct call to row unpack instead of util_format_rgba_unpack_rect() - * to avoid table lookup that would pull in all unpack symbols. - */ - for (int y = 0; y < height; y++) { - util_format_r32g32b32a32_float_unpack_rgba_8unorm( - dst_row + dst_stride * y, - (const uint8_t *)temp_block + width * 4 * sizeof(float) * y, - width); - } - free((void *) temp_block); -} - -void -util_format_bptc_rgb_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - compress_rgba_unorm(width, height, - src_row, src_stride, - dst_row, dst_stride); -} - -void -util_format_bptc_rgb_float_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - decompress_rgb_float(width, height, - src_row, src_stride, - dst_row, dst_stride, - true); -} - -void -util_format_bptc_rgb_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - compress_rgb_float(width, height, - src_row, src_stride, - dst_row, dst_stride, - true); -} - -void -util_format_bptc_rgb_float_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height) -{ - fetch_rgb_float_from_block(src + ((width * sizeof(uint8_t)) * (height / 4) + (width / 4)) * 16, - dst, (width % 4) + (height % 4) * 4, true); -} - -void -util_format_bptc_rgb_ufloat_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - float *temp_block; - temp_block = malloc(width * height * 4 * sizeof(float)); - decompress_rgb_float(width, height, - src_row, src_stride, - temp_block, width * 4 * sizeof(float), - false); - /* Direct call to row unpack instead of util_format_rgba_unpack_8unorm() - * to avoid table lookup that would pull in all unpack symbols. - */ - for (int y = 0; y < height; y++) { - util_format_r32g32b32a32_float_unpack_rgba_8unorm(dst_row + dst_stride * y, - (void *)(temp_block + 4 * width * y), - width); - } - free((void *) temp_block); -} - -void -util_format_bptc_rgb_ufloat_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - compress_rgba_unorm(width, height, - src_row, src_stride, - dst_row, dst_stride); -} - -void -util_format_bptc_rgb_ufloat_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - decompress_rgb_float(width, height, - src_row, src_stride, - dst_row, dst_stride, - false); -} - -void -util_format_bptc_rgb_ufloat_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - compress_rgb_float(width, height, - src_row, src_stride, - dst_row, dst_stride, - false); -} - -void -util_format_bptc_rgb_ufloat_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height) -{ - fetch_rgb_float_from_block(src + ((width * sizeof(uint8_t)) * (height / 4) + (width / 4)) * 16, - dst, (width % 4) + (height % 4) * 4, false); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_bptc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_bptc.h deleted file mode 100644 index 53b2d9c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_bptc.h +++ /dev/null @@ -1,124 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#ifndef U_FORMAT_BPTC_H_ -#define U_FORMAT_BPTC_H_ - - -#include "../../gallium/include/pipe/p_compiler.h" - -#include "../../../include/c99_compat.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void -util_format_bptc_rgba_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgba_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgba_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgba_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgba_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height); - -void -util_format_bptc_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_srgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height); - -void -util_format_bptc_rgb_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_float_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_float_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height); - -void -util_format_bptc_rgb_ufloat_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_ufloat_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_ufloat_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_ufloat_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); -void -util_format_bptc_rgb_ufloat_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned width, unsigned height); -#ifdef __cplusplus -} -#endif - -#endif /* U_FORMAT_BPTC_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_etc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_etc.c deleted file mode 100644 index 1a9598b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_etc.c +++ /dev/null @@ -1,85 +0,0 @@ -#include "../../gallium/include/pipe/p_compiler.h" -#include "../u_debug.h" -#include "../u_math.h" -#include "u_format_etc.h" - -/* define etc1_parse_block and etc. */ -#define UINT8_TYPE uint8_t -#define TAG(x) x -#include "texcompress_etc_tmp.h" -#undef TAG -#undef UINT8_TYPE - -void -util_format_etc1_rgb8_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - etc1_unpack_rgba8888(dst_row, dst_stride, src_row, src_stride, width, height); -} - -void -util_format_etc1_rgb8_pack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - assert(0); -} - -void -util_format_etc1_rgb8_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, bs = 8, comps = 4; - struct etc1_block block; - unsigned x, y, i, j; - - for (y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - - for (x = 0; x < width; x+= bw) { - etc1_parse_block(&block, src); - - for (j = 0; j < bh; j++) { - float *dst = (float *)((uint8_t *)dst_row + (y + j) * dst_stride + x * comps * 4); - uint8_t tmp[3]; - - for (i = 0; i < bw; i++) { - etc1_fetch_texel(&block, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = 1.0f; - dst += comps; - } - } - - src += bs; - } - - src_row += src_stride; - } -} - -void -util_format_etc1_rgb8_pack_rgba_float(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const float *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - assert(0); -} - -void -util_format_etc1_rgb8_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - struct etc1_block block; - uint8_t tmp[3]; - - assert(i < 4 && j < 4); /* check i, j against 4x4 block size */ - - etc1_parse_block(&block, src); - etc1_fetch_texel(&block, i, j, tmp); - - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = 1.0f; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_etc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_etc.h deleted file mode 100644 index 27861c7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_etc.h +++ /dev/null @@ -1,48 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 LunarG, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - -#ifndef U_FORMAT_ETC1_H_ -#define U_FORMAT_ETC1_H_ - -#include "../../../include/c99_compat.h" - -void -util_format_etc1_rgb8_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_etc1_rgb8_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_etc1_rgb8_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_etc1_rgb8_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_etc1_rgb8_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -#endif /* U_FORMAT_ETC1_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_fxt1.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_fxt1.c deleted file mode 100644 index 8ea8697..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_fxt1.c +++ /dev/null @@ -1,1726 +0,0 @@ -/************************************************************************** - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (c) 2008 VMware, Inc. - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - -#include "u_format.h" -#include "u_format_fxt1.h" -#include "u_format_pack.h" -#include "../format_srgb.h" -#include "../u_math.h" - -#define RCOMP 0 -#define GCOMP 1 -#define BCOMP 2 -#define ACOMP 3 - -#define FXT1_BLOCK_SIZE 16 - -static void -fxt1_encode (uint32_t width, uint32_t height, int32_t comps, - const void *source, int32_t srcRowStride, - void *dest, int32_t destRowStride); - -static void -fxt1_decode_1 (const void *texture, int32_t stride, - int32_t i, int32_t j, uint8_t *rgba); - -/***************************************************************************\ - * FXT1 encoder - * - * The encoder was built by reversing the decoder, - * and is vaguely based on Texus2 by 3dfx. Note that this code - * is merely a proof of concept, since it is highly UNoptimized; - * moreover, it is sub-optimal due to initial conditions passed - * to Lloyd's algorithm (the interpolation modes are even worse). -\***************************************************************************/ - - -#define MAX_COMP 4 /* ever needed maximum number of components in texel */ -#define MAX_VECT 4 /* ever needed maximum number of base vectors to find */ -#define N_TEXELS 32 /* number of texels in a block (always 32) */ -#define LL_N_REP 50 /* number of iterations in lloyd's vq */ -#define LL_RMS_D 10 /* fault tolerance (maximum delta) */ -#define LL_RMS_E 255 /* fault tolerance (maximum error) */ -#define ALPHA_TS 2 /* alpha threshold: (255 - ALPHA_TS) deemed opaque */ -static const uint32_t zero = 0; -#define ISTBLACK(v) (memcmp(&(v), &zero, sizeof(zero)) == 0) - -/* - * Define a 64-bit unsigned integer type and macros - */ -#if 1 - -#define FX64_NATIVE 1 - -typedef uint64_t Fx64; - -#define FX64_MOV32(a, b) a = b -#define FX64_OR32(a, b) a |= b -#define FX64_SHL(a, c) a <<= c - -#else - -#define FX64_NATIVE 0 - -typedef struct { - uint32_t lo, hi; -} Fx64; - -#define FX64_MOV32(a, b) a.lo = b -#define FX64_OR32(a, b) a.lo |= b - -#define FX64_SHL(a, c) \ - do { \ - if ((c) >= 32) { \ - a.hi = a.lo << ((c) - 32); \ - a.lo = 0; \ - } else { \ - a.hi = (a.hi << (c)) | (a.lo >> (32 - (c))); \ - a.lo <<= (c); \ - } \ - } while (0) - -#endif - - -#define F(i) (float)1 /* can be used to obtain an oblong metric: 0.30 / 0.59 / 0.11 */ -#define SAFECDOT 1 /* for paranoids */ - -#define MAKEIVEC(NV, NC, IV, B, V0, V1) \ - do { \ - /* compute interpolation vector */ \ - float d2 = 0.0F; \ - float rd2; \ - \ - for (i = 0; i < NC; i++) { \ - IV[i] = (V1[i] - V0[i]) * F(i); \ - d2 += IV[i] * IV[i]; \ - } \ - rd2 = (float)NV / d2; \ - B = 0; \ - for (i = 0; i < NC; i++) { \ - IV[i] *= F(i); \ - B -= IV[i] * V0[i]; \ - IV[i] *= rd2; \ - } \ - B = B * rd2 + 0.5f; \ - } while (0) - -#define CALCCDOT(TEXEL, NV, NC, IV, B, V)\ - do { \ - float dot = 0.0F; \ - for (i = 0; i < NC; i++) { \ - dot += V[i] * IV[i]; \ - } \ - TEXEL = (int32_t)(dot + B); \ - if (SAFECDOT) { \ - if (TEXEL < 0) { \ - TEXEL = 0; \ - } else if (TEXEL > NV) { \ - TEXEL = NV; \ - } \ - } \ - } while (0) - - -static int32_t -fxt1_bestcol (float vec[][MAX_COMP], int32_t nv, - uint8_t input[MAX_COMP], int32_t nc) -{ - int32_t i, j, best = -1; - float err = 1e9; /* big enough */ - - for (j = 0; j < nv; j++) { - float e = 0.0F; - for (i = 0; i < nc; i++) { - e += (vec[j][i] - input[i]) * (vec[j][i] - input[i]); - } - if (e < err) { - err = e; - best = j; - } - } - - return best; -} - - -static int32_t -fxt1_worst (float vec[MAX_COMP], - uint8_t input[N_TEXELS][MAX_COMP], int32_t nc, int32_t n) -{ - int32_t i, k, worst = -1; - float err = -1.0F; /* small enough */ - - for (k = 0; k < n; k++) { - float e = 0.0F; - for (i = 0; i < nc; i++) { - e += (vec[i] - input[k][i]) * (vec[i] - input[k][i]); - } - if (e > err) { - err = e; - worst = k; - } - } - - return worst; -} - - -static int32_t -fxt1_variance (uint8_t input[N_TEXELS / 2][MAX_COMP], int32_t nc) -{ - const int n = N_TEXELS / 2; - int32_t i, k, best = 0; - int32_t sx, sx2; - double var, maxvar = -1; /* small enough */ - double teenth = 1.0 / n; - - for (i = 0; i < nc; i++) { - sx = sx2 = 0; - for (k = 0; k < n; k++) { - int32_t t = input[k][i]; - sx += t; - sx2 += t * t; - } - var = sx2 * teenth - sx * sx * teenth * teenth; - if (maxvar < var) { - maxvar = var; - best = i; - } - } - - return best; -} - - -static int32_t -fxt1_choose (float vec[][MAX_COMP], int32_t nv, - uint8_t input[N_TEXELS][MAX_COMP], int32_t nc, int32_t n) -{ -#if 0 - /* Choose colors from a grid. - */ - int32_t i, j; - - for (j = 0; j < nv; j++) { - int32_t m = j * (n - 1) / (nv - 1); - for (i = 0; i < nc; i++) { - vec[j][i] = input[m][i]; - } - } -#else - /* Our solution here is to find the darkest and brightest colors in - * the 8x4 tile and use those as the two representative colors. - * There are probably better algorithms to use (histogram-based). - */ - int32_t i, j, k; - int32_t minSum = 2000; /* big enough */ - int32_t maxSum = -1; /* small enough */ - int32_t minCol = 0; /* phoudoin: silent compiler! */ - int32_t maxCol = 0; /* phoudoin: silent compiler! */ - - struct { - int32_t flag; - int32_t key; - int32_t freq; - int32_t idx; - } hist[N_TEXELS]; - int32_t lenh = 0; - - memset(hist, 0, sizeof(hist)); - - for (k = 0; k < n; k++) { - int32_t l; - int32_t key = 0; - int32_t sum = 0; - for (i = 0; i < nc; i++) { - key <<= 8; - key |= input[k][i]; - sum += input[k][i]; - } - for (l = 0; l < n; l++) { - if (!hist[l].flag) { - /* alloc new slot */ - hist[l].flag = !0; - hist[l].key = key; - hist[l].freq = 1; - hist[l].idx = k; - lenh = l + 1; - break; - } else if (hist[l].key == key) { - hist[l].freq++; - break; - } - } - if (minSum > sum) { - minSum = sum; - minCol = k; - } - if (maxSum < sum) { - maxSum = sum; - maxCol = k; - } - } - - if (lenh <= nv) { - for (j = 0; j < lenh; j++) { - for (i = 0; i < nc; i++) { - vec[j][i] = (float)input[hist[j].idx][i]; - } - } - for (; j < nv; j++) { - for (i = 0; i < nc; i++) { - vec[j][i] = vec[0][i]; - } - } - return 0; - } - - for (j = 0; j < nv; j++) { - for (i = 0; i < nc; i++) { - vec[j][i] = ((nv - 1 - j) * input[minCol][i] + j * input[maxCol][i] + (nv - 1) / 2) / (float)(nv - 1); - } - } -#endif - - return !0; -} - - -static int32_t -fxt1_lloyd (float vec[][MAX_COMP], int32_t nv, - uint8_t input[N_TEXELS][MAX_COMP], int32_t nc, int32_t n) -{ - /* Use the generalized lloyd's algorithm for VQ: - * find 4 color vectors. - * - * for each sample color - * sort to nearest vector. - * - * replace each vector with the centroid of its matching colors. - * - * repeat until RMS doesn't improve. - * - * if a color vector has no samples, or becomes the same as another - * vector, replace it with the color which is farthest from a sample. - * - * vec[][MAX_COMP] initial vectors and resulting colors - * nv number of resulting colors required - * input[N_TEXELS][MAX_COMP] input texels - * nc number of components in input / vec - * n number of input samples - */ - - int32_t sum[MAX_VECT][MAX_COMP]; /* used to accumulate closest texels */ - int32_t cnt[MAX_VECT]; /* how many times a certain vector was chosen */ - float error, lasterror = 1e9; - - int32_t i, j, k, rep; - - /* the quantizer */ - for (rep = 0; rep < LL_N_REP; rep++) { - /* reset sums & counters */ - for (j = 0; j < nv; j++) { - for (i = 0; i < nc; i++) { - sum[j][i] = 0; - } - cnt[j] = 0; - } - error = 0; - - /* scan whole block */ - for (k = 0; k < n; k++) { -#if 1 - int32_t best = -1; - float err = 1e9; /* big enough */ - /* determine best vector */ - for (j = 0; j < nv; j++) { - float e = (vec[j][0] - input[k][0]) * (vec[j][0] - input[k][0]) + - (vec[j][1] - input[k][1]) * (vec[j][1] - input[k][1]) + - (vec[j][2] - input[k][2]) * (vec[j][2] - input[k][2]); - if (nc == 4) { - e += (vec[j][3] - input[k][3]) * (vec[j][3] - input[k][3]); - } - if (e < err) { - err = e; - best = j; - } - } -#else - int32_t best = fxt1_bestcol(vec, nv, input[k], nc, &err); -#endif - assert(best >= 0); - /* add in closest color */ - for (i = 0; i < nc; i++) { - sum[best][i] += input[k][i]; - } - /* mark this vector as used */ - cnt[best]++; - /* accumulate error */ - error += err; - } - - /* check RMS */ - if ((error < LL_RMS_E) || - ((error < lasterror) && ((lasterror - error) < LL_RMS_D))) { - return !0; /* good match */ - } - lasterror = error; - - /* move each vector to the barycenter of its closest colors */ - for (j = 0; j < nv; j++) { - if (cnt[j]) { - float div = 1.0F / cnt[j]; - for (i = 0; i < nc; i++) { - vec[j][i] = div * sum[j][i]; - } - } else { - /* this vec has no samples or is identical with a previous vec */ - int32_t worst = fxt1_worst(vec[j], input, nc, n); - for (i = 0; i < nc; i++) { - vec[j][i] = input[worst][i]; - } - } - } - } - - return 0; /* could not converge fast enough */ -} - - -static void -fxt1_quantize_CHROMA (uint32_t *cc, - uint8_t input[N_TEXELS][MAX_COMP]) -{ - const int32_t n_vect = 4; /* 4 base vectors to find */ - const int32_t n_comp = 3; /* 3 components: R, G, B */ - float vec[MAX_VECT][MAX_COMP]; - int32_t i, j, k; - Fx64 hi; /* high quadword */ - uint32_t lohi, lolo; /* low quadword: hi dword, lo dword */ - - if (fxt1_choose(vec, n_vect, input, n_comp, N_TEXELS) != 0) { - fxt1_lloyd(vec, n_vect, input, n_comp, N_TEXELS); - } - - FX64_MOV32(hi, 4); /* cc-chroma = "010" + unused bit */ - for (j = n_vect - 1; j >= 0; j--) { - for (i = 0; i < n_comp; i++) { - /* add in colors */ - FX64_SHL(hi, 5); - FX64_OR32(hi, (uint32_t)(vec[j][i] / 8.0F)); - } - } - ((Fx64 *)cc)[1] = hi; - - lohi = lolo = 0; - /* right microtile */ - for (k = N_TEXELS - 1; k >= N_TEXELS/2; k--) { - lohi <<= 2; - lohi |= fxt1_bestcol(vec, n_vect, input[k], n_comp); - } - /* left microtile */ - for (; k >= 0; k--) { - lolo <<= 2; - lolo |= fxt1_bestcol(vec, n_vect, input[k], n_comp); - } - cc[1] = lohi; - cc[0] = lolo; -} - - -static void -fxt1_quantize_ALPHA0 (uint32_t *cc, - uint8_t input[N_TEXELS][MAX_COMP], - uint8_t reord[N_TEXELS][MAX_COMP], int32_t n) -{ - const int32_t n_vect = 3; /* 3 base vectors to find */ - const int32_t n_comp = 4; /* 4 components: R, G, B, A */ - float vec[MAX_VECT][MAX_COMP]; - int32_t i, j, k; - Fx64 hi; /* high quadword */ - uint32_t lohi, lolo; /* low quadword: hi dword, lo dword */ - - /* the last vector indicates zero */ - for (i = 0; i < n_comp; i++) { - vec[n_vect][i] = 0; - } - - /* the first n texels in reord are guaranteed to be non-zero */ - if (fxt1_choose(vec, n_vect, reord, n_comp, n) != 0) { - fxt1_lloyd(vec, n_vect, reord, n_comp, n); - } - - FX64_MOV32(hi, 6); /* alpha = "011" + lerp = 0 */ - for (j = n_vect - 1; j >= 0; j--) { - /* add in alphas */ - FX64_SHL(hi, 5); - FX64_OR32(hi, (uint32_t)(vec[j][ACOMP] / 8.0F)); - } - for (j = n_vect - 1; j >= 0; j--) { - for (i = 0; i < n_comp - 1; i++) { - /* add in colors */ - FX64_SHL(hi, 5); - FX64_OR32(hi, (uint32_t)(vec[j][i] / 8.0F)); - } - } - ((Fx64 *)cc)[1] = hi; - - lohi = lolo = 0; - /* right microtile */ - for (k = N_TEXELS - 1; k >= N_TEXELS/2; k--) { - lohi <<= 2; - lohi |= fxt1_bestcol(vec, n_vect + 1, input[k], n_comp); - } - /* left microtile */ - for (; k >= 0; k--) { - lolo <<= 2; - lolo |= fxt1_bestcol(vec, n_vect + 1, input[k], n_comp); - } - cc[1] = lohi; - cc[0] = lolo; -} - - -static void -fxt1_quantize_ALPHA1 (uint32_t *cc, - uint8_t input[N_TEXELS][MAX_COMP]) -{ - const int32_t n_vect = 3; /* highest vector number in each microtile */ - const int32_t n_comp = 4; /* 4 components: R, G, B, A */ - float vec[1 + 1 + 1][MAX_COMP]; /* 1.5 extrema for each sub-block */ - float b, iv[MAX_COMP]; /* interpolation vector */ - int32_t i, j, k; - Fx64 hi; /* high quadword */ - uint32_t lohi, lolo; /* low quadword: hi dword, lo dword */ - - int32_t minSum; - int32_t maxSum; - int32_t minColL = 0, maxColL = 0; - int32_t minColR = 0, maxColR = 0; - int32_t sumL = 0, sumR = 0; - int32_t nn_comp; - /* Our solution here is to find the darkest and brightest colors in - * the 4x4 tile and use those as the two representative colors. - * There are probably better algorithms to use (histogram-based). - */ - nn_comp = n_comp; - while ((minColL == maxColL) && nn_comp) { - minSum = 2000; /* big enough */ - maxSum = -1; /* small enough */ - for (k = 0; k < N_TEXELS / 2; k++) { - int32_t sum = 0; - for (i = 0; i < nn_comp; i++) { - sum += input[k][i]; - } - if (minSum > sum) { - minSum = sum; - minColL = k; - } - if (maxSum < sum) { - maxSum = sum; - maxColL = k; - } - sumL += sum; - } - - nn_comp--; - } - - nn_comp = n_comp; - while ((minColR == maxColR) && nn_comp) { - minSum = 2000; /* big enough */ - maxSum = -1; /* small enough */ - for (k = N_TEXELS / 2; k < N_TEXELS; k++) { - int32_t sum = 0; - for (i = 0; i < nn_comp; i++) { - sum += input[k][i]; - } - if (minSum > sum) { - minSum = sum; - minColR = k; - } - if (maxSum < sum) { - maxSum = sum; - maxColR = k; - } - sumR += sum; - } - - nn_comp--; - } - - /* choose the common vector (yuck!) */ - { - int32_t j1, j2; - int32_t v1 = 0, v2 = 0; - float err = 1e9; /* big enough */ - float tv[2 * 2][MAX_COMP]; /* 2 extrema for each sub-block */ - for (i = 0; i < n_comp; i++) { - tv[0][i] = input[minColL][i]; - tv[1][i] = input[maxColL][i]; - tv[2][i] = input[minColR][i]; - tv[3][i] = input[maxColR][i]; - } - for (j1 = 0; j1 < 2; j1++) { - for (j2 = 2; j2 < 4; j2++) { - float e = 0.0F; - for (i = 0; i < n_comp; i++) { - e += (tv[j1][i] - tv[j2][i]) * (tv[j1][i] - tv[j2][i]); - } - if (e < err) { - err = e; - v1 = j1; - v2 = j2; - } - } - } - for (i = 0; i < n_comp; i++) { - vec[0][i] = tv[1 - v1][i]; - vec[1][i] = (tv[v1][i] * sumL + tv[v2][i] * sumR) / (sumL + sumR); - vec[2][i] = tv[5 - v2][i]; - } - } - - /* left microtile */ - cc[0] = 0; - if (minColL != maxColL) { - /* compute interpolation vector */ - MAKEIVEC(n_vect, n_comp, iv, b, vec[0], vec[1]); - - /* add in texels */ - lolo = 0; - for (k = N_TEXELS / 2 - 1; k >= 0; k--) { - int32_t texel; - /* interpolate color */ - CALCCDOT(texel, n_vect, n_comp, iv, b, input[k]); - /* add in texel */ - lolo <<= 2; - lolo |= texel; - } - - cc[0] = lolo; - } - - /* right microtile */ - cc[1] = 0; - if (minColR != maxColR) { - /* compute interpolation vector */ - MAKEIVEC(n_vect, n_comp, iv, b, vec[2], vec[1]); - - /* add in texels */ - lohi = 0; - for (k = N_TEXELS - 1; k >= N_TEXELS / 2; k--) { - int32_t texel; - /* interpolate color */ - CALCCDOT(texel, n_vect, n_comp, iv, b, input[k]); - /* add in texel */ - lohi <<= 2; - lohi |= texel; - } - - cc[1] = lohi; - } - - FX64_MOV32(hi, 7); /* alpha = "011" + lerp = 1 */ - for (j = n_vect - 1; j >= 0; j--) { - /* add in alphas */ - FX64_SHL(hi, 5); - FX64_OR32(hi, (uint32_t)(vec[j][ACOMP] / 8.0F)); - } - for (j = n_vect - 1; j >= 0; j--) { - for (i = 0; i < n_comp - 1; i++) { - /* add in colors */ - FX64_SHL(hi, 5); - FX64_OR32(hi, (uint32_t)(vec[j][i] / 8.0F)); - } - } - ((Fx64 *)cc)[1] = hi; -} - - -static void -fxt1_quantize_HI (uint32_t *cc, - uint8_t input[N_TEXELS][MAX_COMP], - uint8_t reord[N_TEXELS][MAX_COMP], int32_t n) -{ - const int32_t n_vect = 6; /* highest vector number */ - const int32_t n_comp = 3; /* 3 components: R, G, B */ - float b = 0.0F; /* phoudoin: silent compiler! */ - float iv[MAX_COMP]; /* interpolation vector */ - int32_t i, k; - uint32_t hihi; /* high quadword: hi dword */ - - int32_t minSum = 2000; /* big enough */ - int32_t maxSum = -1; /* small enough */ - int32_t minCol = 0; /* phoudoin: silent compiler! */ - int32_t maxCol = 0; /* phoudoin: silent compiler! */ - - /* Our solution here is to find the darkest and brightest colors in - * the 8x4 tile and use those as the two representative colors. - * There are probably better algorithms to use (histogram-based). - */ - for (k = 0; k < n; k++) { - int32_t sum = 0; - for (i = 0; i < n_comp; i++) { - sum += reord[k][i]; - } - if (minSum > sum) { - minSum = sum; - minCol = k; - } - if (maxSum < sum) { - maxSum = sum; - maxCol = k; - } - } - - hihi = 0; /* cc-hi = "00" */ - for (i = 0; i < n_comp; i++) { - /* add in colors */ - hihi <<= 5; - hihi |= reord[maxCol][i] >> 3; - } - for (i = 0; i < n_comp; i++) { - /* add in colors */ - hihi <<= 5; - hihi |= reord[minCol][i] >> 3; - } - cc[3] = hihi; - cc[0] = cc[1] = cc[2] = 0; - - /* compute interpolation vector */ - if (minCol != maxCol) { - MAKEIVEC(n_vect, n_comp, iv, b, reord[minCol], reord[maxCol]); - } - - /* add in texels */ - for (k = N_TEXELS - 1; k >= 0; k--) { - int32_t t = k * 3; - uint32_t *kk = (uint32_t *)((char *)cc + t / 8); - int32_t texel = n_vect + 1; /* transparent black */ - - if (!ISTBLACK(input[k])) { - if (minCol != maxCol) { - /* interpolate color */ - CALCCDOT(texel, n_vect, n_comp, iv, b, input[k]); - /* add in texel */ - kk[0] |= texel << (t & 7); - } - } else { - /* add in texel */ - kk[0] |= texel << (t & 7); - } - } -} - - -static void -fxt1_quantize_MIXED1 (uint32_t *cc, - uint8_t input[N_TEXELS][MAX_COMP]) -{ - const int32_t n_vect = 2; /* highest vector number in each microtile */ - const int32_t n_comp = 3; /* 3 components: R, G, B */ - uint8_t vec[2 * 2][MAX_COMP]; /* 2 extrema for each sub-block */ - float b, iv[MAX_COMP]; /* interpolation vector */ - int32_t i, j, k; - Fx64 hi; /* high quadword */ - uint32_t lohi, lolo; /* low quadword: hi dword, lo dword */ - - int32_t minSum; - int32_t maxSum; - int32_t minColL = 0, maxColL = -1; - int32_t minColR = 0, maxColR = -1; - - /* Our solution here is to find the darkest and brightest colors in - * the 4x4 tile and use those as the two representative colors. - * There are probably better algorithms to use (histogram-based). - */ - minSum = 2000; /* big enough */ - maxSum = -1; /* small enough */ - for (k = 0; k < N_TEXELS / 2; k++) { - if (!ISTBLACK(input[k])) { - int32_t sum = 0; - for (i = 0; i < n_comp; i++) { - sum += input[k][i]; - } - if (minSum > sum) { - minSum = sum; - minColL = k; - } - if (maxSum < sum) { - maxSum = sum; - maxColL = k; - } - } - } - minSum = 2000; /* big enough */ - maxSum = -1; /* small enough */ - for (; k < N_TEXELS; k++) { - if (!ISTBLACK(input[k])) { - int32_t sum = 0; - for (i = 0; i < n_comp; i++) { - sum += input[k][i]; - } - if (minSum > sum) { - minSum = sum; - minColR = k; - } - if (maxSum < sum) { - maxSum = sum; - maxColR = k; - } - } - } - - /* left microtile */ - if (maxColL == -1) { - /* all transparent black */ - cc[0] = ~0u; - for (i = 0; i < n_comp; i++) { - vec[0][i] = 0; - vec[1][i] = 0; - } - } else { - cc[0] = 0; - for (i = 0; i < n_comp; i++) { - vec[0][i] = input[minColL][i]; - vec[1][i] = input[maxColL][i]; - } - if (minColL != maxColL) { - /* compute interpolation vector */ - MAKEIVEC(n_vect, n_comp, iv, b, vec[0], vec[1]); - - /* add in texels */ - lolo = 0; - for (k = N_TEXELS / 2 - 1; k >= 0; k--) { - int32_t texel = n_vect + 1; /* transparent black */ - if (!ISTBLACK(input[k])) { - /* interpolate color */ - CALCCDOT(texel, n_vect, n_comp, iv, b, input[k]); - } - /* add in texel */ - lolo <<= 2; - lolo |= texel; - } - cc[0] = lolo; - } - } - - /* right microtile */ - if (maxColR == -1) { - /* all transparent black */ - cc[1] = ~0u; - for (i = 0; i < n_comp; i++) { - vec[2][i] = 0; - vec[3][i] = 0; - } - } else { - cc[1] = 0; - for (i = 0; i < n_comp; i++) { - vec[2][i] = input[minColR][i]; - vec[3][i] = input[maxColR][i]; - } - if (minColR != maxColR) { - /* compute interpolation vector */ - MAKEIVEC(n_vect, n_comp, iv, b, vec[2], vec[3]); - - /* add in texels */ - lohi = 0; - for (k = N_TEXELS - 1; k >= N_TEXELS / 2; k--) { - int32_t texel = n_vect + 1; /* transparent black */ - if (!ISTBLACK(input[k])) { - /* interpolate color */ - CALCCDOT(texel, n_vect, n_comp, iv, b, input[k]); - } - /* add in texel */ - lohi <<= 2; - lohi |= texel; - } - cc[1] = lohi; - } - } - - FX64_MOV32(hi, 9 | (vec[3][GCOMP] & 4) | ((vec[1][GCOMP] >> 1) & 2)); /* chroma = "1" */ - for (j = 2 * 2 - 1; j >= 0; j--) { - for (i = 0; i < n_comp; i++) { - /* add in colors */ - FX64_SHL(hi, 5); - FX64_OR32(hi, vec[j][i] >> 3); - } - } - ((Fx64 *)cc)[1] = hi; -} - - -static void -fxt1_quantize_MIXED0 (uint32_t *cc, - uint8_t input[N_TEXELS][MAX_COMP]) -{ - const int32_t n_vect = 3; /* highest vector number in each microtile */ - const int32_t n_comp = 3; /* 3 components: R, G, B */ - uint8_t vec[2 * 2][MAX_COMP]; /* 2 extrema for each sub-block */ - float b, iv[MAX_COMP]; /* interpolation vector */ - int32_t i, j, k; - Fx64 hi; /* high quadword */ - uint32_t lohi, lolo; /* low quadword: hi dword, lo dword */ - - int32_t minColL = 0, maxColL = 0; - int32_t minColR = 0, maxColR = 0; -#if 0 - int32_t minSum; - int32_t maxSum; - - /* Our solution here is to find the darkest and brightest colors in - * the 4x4 tile and use those as the two representative colors. - * There are probably better algorithms to use (histogram-based). - */ - minSum = 2000; /* big enough */ - maxSum = -1; /* small enough */ - for (k = 0; k < N_TEXELS / 2; k++) { - int32_t sum = 0; - for (i = 0; i < n_comp; i++) { - sum += input[k][i]; - } - if (minSum > sum) { - minSum = sum; - minColL = k; - } - if (maxSum < sum) { - maxSum = sum; - maxColL = k; - } - } - minSum = 2000; /* big enough */ - maxSum = -1; /* small enough */ - for (; k < N_TEXELS; k++) { - int32_t sum = 0; - for (i = 0; i < n_comp; i++) { - sum += input[k][i]; - } - if (minSum > sum) { - minSum = sum; - minColR = k; - } - if (maxSum < sum) { - maxSum = sum; - maxColR = k; - } - } -#else - int32_t minVal; - int32_t maxVal; - int32_t maxVarL = fxt1_variance(input, n_comp); - int32_t maxVarR = fxt1_variance(&input[N_TEXELS / 2], n_comp); - - /* Scan the channel with max variance for lo & hi - * and use those as the two representative colors. - */ - minVal = 2000; /* big enough */ - maxVal = -1; /* small enough */ - for (k = 0; k < N_TEXELS / 2; k++) { - int32_t t = input[k][maxVarL]; - if (minVal > t) { - minVal = t; - minColL = k; - } - if (maxVal < t) { - maxVal = t; - maxColL = k; - } - } - minVal = 2000; /* big enough */ - maxVal = -1; /* small enough */ - for (; k < N_TEXELS; k++) { - int32_t t = input[k][maxVarR]; - if (minVal > t) { - minVal = t; - minColR = k; - } - if (maxVal < t) { - maxVal = t; - maxColR = k; - } - } -#endif - - /* left microtile */ - cc[0] = 0; - for (i = 0; i < n_comp; i++) { - vec[0][i] = input[minColL][i]; - vec[1][i] = input[maxColL][i]; - } - if (minColL != maxColL) { - /* compute interpolation vector */ - MAKEIVEC(n_vect, n_comp, iv, b, vec[0], vec[1]); - - /* add in texels */ - lolo = 0; - for (k = N_TEXELS / 2 - 1; k >= 0; k--) { - int32_t texel; - /* interpolate color */ - CALCCDOT(texel, n_vect, n_comp, iv, b, input[k]); - /* add in texel */ - lolo <<= 2; - lolo |= texel; - } - - /* funky encoding for LSB of green */ - if ((int32_t)((lolo >> 1) & 1) != (((vec[1][GCOMP] ^ vec[0][GCOMP]) >> 2) & 1)) { - for (i = 0; i < n_comp; i++) { - vec[1][i] = input[minColL][i]; - vec[0][i] = input[maxColL][i]; - } - lolo = ~lolo; - } - - cc[0] = lolo; - } - - /* right microtile */ - cc[1] = 0; - for (i = 0; i < n_comp; i++) { - vec[2][i] = input[minColR][i]; - vec[3][i] = input[maxColR][i]; - } - if (minColR != maxColR) { - /* compute interpolation vector */ - MAKEIVEC(n_vect, n_comp, iv, b, vec[2], vec[3]); - - /* add in texels */ - lohi = 0; - for (k = N_TEXELS - 1; k >= N_TEXELS / 2; k--) { - int32_t texel; - /* interpolate color */ - CALCCDOT(texel, n_vect, n_comp, iv, b, input[k]); - /* add in texel */ - lohi <<= 2; - lohi |= texel; - } - - /* funky encoding for LSB of green */ - if ((int32_t)((lohi >> 1) & 1) != (((vec[3][GCOMP] ^ vec[2][GCOMP]) >> 2) & 1)) { - for (i = 0; i < n_comp; i++) { - vec[3][i] = input[minColR][i]; - vec[2][i] = input[maxColR][i]; - } - lohi = ~lohi; - } - - cc[1] = lohi; - } - - FX64_MOV32(hi, 8 | (vec[3][GCOMP] & 4) | ((vec[1][GCOMP] >> 1) & 2)); /* chroma = "1" */ - for (j = 2 * 2 - 1; j >= 0; j--) { - for (i = 0; i < n_comp; i++) { - /* add in colors */ - FX64_SHL(hi, 5); - FX64_OR32(hi, vec[j][i] >> 3); - } - } - ((Fx64 *)cc)[1] = hi; -} - - -static void -fxt1_quantize (uint32_t *cc, const uint8_t *lines[], int32_t comps) -{ - int32_t trualpha; - uint8_t reord[N_TEXELS][MAX_COMP]; - - uint8_t input[N_TEXELS][MAX_COMP]; - int32_t i, k, l; - - if (comps == 3) { - /* make the whole block opaque */ - memset(input, -1, sizeof(input)); - } - - /* 8 texels each line */ - for (l = 0; l < 4; l++) { - for (k = 0; k < 4; k++) { - for (i = 0; i < comps; i++) { - input[k + l * 4][i] = *lines[l]++; - } - } - for (; k < 8; k++) { - for (i = 0; i < comps; i++) { - input[k + l * 4 + 12][i] = *lines[l]++; - } - } - } - - /* block layout: - * 00, 01, 02, 03, 08, 09, 0a, 0b - * 10, 11, 12, 13, 18, 19, 1a, 1b - * 04, 05, 06, 07, 0c, 0d, 0e, 0f - * 14, 15, 16, 17, 1c, 1d, 1e, 1f - */ - - /* [dBorca] - * stupidity flows forth from this - */ - l = N_TEXELS; - trualpha = 0; - if (comps == 4) { - /* skip all transparent black texels */ - l = 0; - for (k = 0; k < N_TEXELS; k++) { - /* test all components against 0 */ - if (!ISTBLACK(input[k])) { - /* texel is not transparent black */ - memcpy(reord[l], input[k], 4); - if (reord[l][ACOMP] < (255 - ALPHA_TS)) { - /* non-opaque texel */ - trualpha = !0; - } - l++; - } - } - } - -#if 0 - if (trualpha) { - fxt1_quantize_ALPHA0(cc, input, reord, l); - } else if (l == 0) { - cc[0] = cc[1] = cc[2] = -1; - cc[3] = 0; - } else if (l < N_TEXELS) { - fxt1_quantize_HI(cc, input, reord, l); - } else { - fxt1_quantize_CHROMA(cc, input); - } - (void)fxt1_quantize_ALPHA1; - (void)fxt1_quantize_MIXED1; - (void)fxt1_quantize_MIXED0; -#else - if (trualpha) { - fxt1_quantize_ALPHA1(cc, input); - } else if (l == 0) { - cc[0] = cc[1] = cc[2] = ~0u; - cc[3] = 0; - } else if (l < N_TEXELS) { - fxt1_quantize_MIXED1(cc, input); - } else { - fxt1_quantize_MIXED0(cc, input); - } - (void)fxt1_quantize_ALPHA0; - (void)fxt1_quantize_HI; - (void)fxt1_quantize_CHROMA; -#endif -} - - - -/** - * Upscale an image by replication, not (typical) stretching. - * We use this when the image width or height is less than a - * certain size (4, 8) and we need to upscale an image. - */ -static void -upscale_teximage2d(int32_t inWidth, int32_t inHeight, - int32_t outWidth, int32_t outHeight, - int32_t comps, const uint8_t *src, int32_t srcRowStride, - uint8_t *dest ) -{ - int32_t i, j, k; - - assert(outWidth >= inWidth); - assert(outHeight >= inHeight); -#if 0 - assert(inWidth == 1 || inWidth == 2 || inHeight == 1 || inHeight == 2); - assert((outWidth & 3) == 0); - assert((outHeight & 3) == 0); -#endif - - for (i = 0; i < outHeight; i++) { - const int32_t ii = i % inHeight; - for (j = 0; j < outWidth; j++) { - const int32_t jj = j % inWidth; - for (k = 0; k < comps; k++) { - dest[(i * outWidth + j) * comps + k] - = src[ii * srcRowStride + jj * comps + k]; - } - } - } -} - - -static void -fxt1_encode (uint32_t width, uint32_t height, int32_t comps, - const void *source, int32_t srcRowStride, - void *dest, int32_t destRowStride) -{ - uint32_t x, y; - const uint8_t *data; - uint32_t *encoded = (uint32_t *)dest; - void *newSource = NULL; - - assert(comps == 3 || comps == 4); - - /* Replicate image if width is not M8 or height is not M4 */ - if ((width & 7) | (height & 3)) { - int32_t newWidth = (width + 7) & ~7; - int32_t newHeight = (height + 3) & ~3; - newSource = malloc(comps * newWidth * newHeight * sizeof(uint8_t)); - if (!newSource) - return; - upscale_teximage2d(width, height, newWidth, newHeight, - comps, (const uint8_t *) source, - srcRowStride, (uint8_t *) newSource); - source = newSource; - width = newWidth; - height = newHeight; - srcRowStride = comps * newWidth; - } - - data = (const uint8_t *) source; - destRowStride = (destRowStride - width * 2) / 4; - for (y = 0; y < height; y += 4) { - uint32_t offs = 0 + (y + 0) * srcRowStride; - for (x = 0; x < width; x += 8) { - const uint8_t *lines[4]; - lines[0] = &data[offs]; - lines[1] = lines[0] + srcRowStride; - lines[2] = lines[1] + srcRowStride; - lines[3] = lines[2] + srcRowStride; - offs += 8 * comps; - fxt1_quantize(encoded, lines, comps); - /* 128 bits per 8x4 block */ - encoded += 4; - } - encoded += destRowStride; - } - - free(newSource); -} - - -/***************************************************************************\ - * FXT1 decoder - * - * The decoder is based on GL_3DFX_texture_compression_FXT1 - * specification and serves as a concept for the encoder. -\***************************************************************************/ - - -/* lookup table for scaling 5 bit colors up to 8 bits */ -static const uint8_t _rgb_scale_5[] = { - 0, 8, 16, 25, 33, 41, 49, 58, - 66, 74, 82, 90, 99, 107, 115, 123, - 132, 140, 148, 156, 165, 173, 181, 189, - 197, 206, 214, 222, 230, 239, 247, 255 -}; - -/* lookup table for scaling 6 bit colors up to 8 bits */ -static const uint8_t _rgb_scale_6[] = { - 0, 4, 8, 12, 16, 20, 24, 28, - 32, 36, 40, 45, 49, 53, 57, 61, - 65, 69, 73, 77, 81, 85, 89, 93, - 97, 101, 105, 109, 113, 117, 121, 125, - 130, 134, 138, 142, 146, 150, 154, 158, - 162, 166, 170, 174, 178, 182, 186, 190, - 194, 198, 202, 206, 210, 215, 219, 223, - 227, 231, 235, 239, 243, 247, 251, 255 -}; - - -#define CC_SEL(cc, which) (((uint32_t *)(cc))[(which) / 32] >> ((which) & 31)) -#define UP5(c) _rgb_scale_5[(c) & 31] -#define UP6(c, b) _rgb_scale_6[(((c) & 31) << 1) | ((b) & 1)] -#define LERP(n, t, c0, c1) (((n) - (t)) * (c0) + (t) * (c1) + (n) / 2) / (n) - - -static void -fxt1_decode_1HI (const uint8_t *code, int32_t t, uint8_t *rgba) -{ - const uint32_t *cc; - - t *= 3; - cc = (const uint32_t *)(code + t / 8); - t = (cc[0] >> (t & 7)) & 7; - - if (t == 7) { - rgba[RCOMP] = rgba[GCOMP] = rgba[BCOMP] = rgba[ACOMP] = 0; - } else { - uint8_t r, g, b; - cc = (const uint32_t *)(code + 12); - if (t == 0) { - b = UP5(CC_SEL(cc, 0)); - g = UP5(CC_SEL(cc, 5)); - r = UP5(CC_SEL(cc, 10)); - } else if (t == 6) { - b = UP5(CC_SEL(cc, 15)); - g = UP5(CC_SEL(cc, 20)); - r = UP5(CC_SEL(cc, 25)); - } else { - b = LERP(6, t, UP5(CC_SEL(cc, 0)), UP5(CC_SEL(cc, 15))); - g = LERP(6, t, UP5(CC_SEL(cc, 5)), UP5(CC_SEL(cc, 20))); - r = LERP(6, t, UP5(CC_SEL(cc, 10)), UP5(CC_SEL(cc, 25))); - } - rgba[RCOMP] = r; - rgba[GCOMP] = g; - rgba[BCOMP] = b; - rgba[ACOMP] = 255; - } -} - - -static void -fxt1_decode_1CHROMA (const uint8_t *code, int32_t t, uint8_t *rgba) -{ - const uint32_t *cc; - uint32_t kk; - - cc = (const uint32_t *)code; - if (t & 16) { - cc++; - t &= 15; - } - t = (cc[0] >> (t * 2)) & 3; - - t *= 15; - cc = (const uint32_t *)(code + 8 + t / 8); - kk = cc[0] >> (t & 7); - rgba[BCOMP] = UP5(kk); - rgba[GCOMP] = UP5(kk >> 5); - rgba[RCOMP] = UP5(kk >> 10); - rgba[ACOMP] = 255; -} - - -static void -fxt1_decode_1MIXED (const uint8_t *code, int32_t t, uint8_t *rgba) -{ - const uint32_t *cc; - uint32_t col[2][3]; - int32_t glsb, selb; - - cc = (const uint32_t *)code; - if (t & 16) { - t &= 15; - t = (cc[1] >> (t * 2)) & 3; - /* col 2 */ - col[0][BCOMP] = (*(const uint32_t *)(code + 11)) >> 6; - col[0][GCOMP] = CC_SEL(cc, 99); - col[0][RCOMP] = CC_SEL(cc, 104); - /* col 3 */ - col[1][BCOMP] = CC_SEL(cc, 109); - col[1][GCOMP] = CC_SEL(cc, 114); - col[1][RCOMP] = CC_SEL(cc, 119); - glsb = CC_SEL(cc, 126); - selb = CC_SEL(cc, 33); - } else { - t = (cc[0] >> (t * 2)) & 3; - /* col 0 */ - col[0][BCOMP] = CC_SEL(cc, 64); - col[0][GCOMP] = CC_SEL(cc, 69); - col[0][RCOMP] = CC_SEL(cc, 74); - /* col 1 */ - col[1][BCOMP] = CC_SEL(cc, 79); - col[1][GCOMP] = CC_SEL(cc, 84); - col[1][RCOMP] = CC_SEL(cc, 89); - glsb = CC_SEL(cc, 125); - selb = CC_SEL(cc, 1); - } - - if (CC_SEL(cc, 124) & 1) { - /* alpha[0] == 1 */ - - if (t == 3) { - /* zero */ - rgba[RCOMP] = rgba[BCOMP] = rgba[GCOMP] = rgba[ACOMP] = 0; - } else { - uint8_t r, g, b; - if (t == 0) { - b = UP5(col[0][BCOMP]); - g = UP5(col[0][GCOMP]); - r = UP5(col[0][RCOMP]); - } else if (t == 2) { - b = UP5(col[1][BCOMP]); - g = UP6(col[1][GCOMP], glsb); - r = UP5(col[1][RCOMP]); - } else { - b = (UP5(col[0][BCOMP]) + UP5(col[1][BCOMP])) / 2; - g = (UP5(col[0][GCOMP]) + UP6(col[1][GCOMP], glsb)) / 2; - r = (UP5(col[0][RCOMP]) + UP5(col[1][RCOMP])) / 2; - } - rgba[RCOMP] = r; - rgba[GCOMP] = g; - rgba[BCOMP] = b; - rgba[ACOMP] = 255; - } - } else { - /* alpha[0] == 0 */ - uint8_t r, g, b; - if (t == 0) { - b = UP5(col[0][BCOMP]); - g = UP6(col[0][GCOMP], glsb ^ selb); - r = UP5(col[0][RCOMP]); - } else if (t == 3) { - b = UP5(col[1][BCOMP]); - g = UP6(col[1][GCOMP], glsb); - r = UP5(col[1][RCOMP]); - } else { - b = LERP(3, t, UP5(col[0][BCOMP]), UP5(col[1][BCOMP])); - g = LERP(3, t, UP6(col[0][GCOMP], glsb ^ selb), - UP6(col[1][GCOMP], glsb)); - r = LERP(3, t, UP5(col[0][RCOMP]), UP5(col[1][RCOMP])); - } - rgba[RCOMP] = r; - rgba[GCOMP] = g; - rgba[BCOMP] = b; - rgba[ACOMP] = 255; - } -} - - -static void -fxt1_decode_1ALPHA (const uint8_t *code, int32_t t, uint8_t *rgba) -{ - const uint32_t *cc; - uint8_t r, g, b, a; - - cc = (const uint32_t *)code; - if (CC_SEL(cc, 124) & 1) { - /* lerp == 1 */ - uint32_t col0[4]; - - if (t & 16) { - t &= 15; - t = (cc[1] >> (t * 2)) & 3; - /* col 2 */ - col0[BCOMP] = (*(const uint32_t *)(code + 11)) >> 6; - col0[GCOMP] = CC_SEL(cc, 99); - col0[RCOMP] = CC_SEL(cc, 104); - col0[ACOMP] = CC_SEL(cc, 119); - } else { - t = (cc[0] >> (t * 2)) & 3; - /* col 0 */ - col0[BCOMP] = CC_SEL(cc, 64); - col0[GCOMP] = CC_SEL(cc, 69); - col0[RCOMP] = CC_SEL(cc, 74); - col0[ACOMP] = CC_SEL(cc, 109); - } - - if (t == 0) { - b = UP5(col0[BCOMP]); - g = UP5(col0[GCOMP]); - r = UP5(col0[RCOMP]); - a = UP5(col0[ACOMP]); - } else if (t == 3) { - b = UP5(CC_SEL(cc, 79)); - g = UP5(CC_SEL(cc, 84)); - r = UP5(CC_SEL(cc, 89)); - a = UP5(CC_SEL(cc, 114)); - } else { - b = LERP(3, t, UP5(col0[BCOMP]), UP5(CC_SEL(cc, 79))); - g = LERP(3, t, UP5(col0[GCOMP]), UP5(CC_SEL(cc, 84))); - r = LERP(3, t, UP5(col0[RCOMP]), UP5(CC_SEL(cc, 89))); - a = LERP(3, t, UP5(col0[ACOMP]), UP5(CC_SEL(cc, 114))); - } - } else { - /* lerp == 0 */ - - if (t & 16) { - cc++; - t &= 15; - } - t = (cc[0] >> (t * 2)) & 3; - - if (t == 3) { - /* zero */ - r = g = b = a = 0; - } else { - uint32_t kk; - cc = (const uint32_t *)code; - a = UP5(cc[3] >> (t * 5 + 13)); - t *= 15; - cc = (const uint32_t *)(code + 8 + t / 8); - kk = cc[0] >> (t & 7); - b = UP5(kk); - g = UP5(kk >> 5); - r = UP5(kk >> 10); - } - } - rgba[RCOMP] = r; - rgba[GCOMP] = g; - rgba[BCOMP] = b; - rgba[ACOMP] = a; -} - - -static void -fxt1_decode_1 (const void *texture, int32_t stride, /* in pixels */ - int32_t i, int32_t j, uint8_t *rgba) -{ - static void (*decode_1[]) (const uint8_t *, int32_t, uint8_t *) = { - fxt1_decode_1HI, /* cc-high = "00?" */ - fxt1_decode_1HI, /* cc-high = "00?" */ - fxt1_decode_1CHROMA, /* cc-chroma = "010" */ - fxt1_decode_1ALPHA, /* alpha = "011" */ - fxt1_decode_1MIXED, /* mixed = "1??" */ - fxt1_decode_1MIXED, /* mixed = "1??" */ - fxt1_decode_1MIXED, /* mixed = "1??" */ - fxt1_decode_1MIXED /* mixed = "1??" */ - }; - - const uint8_t *code = (const uint8_t *)texture + - ((j / 4) * (stride / 8) + (i / 8)) * 16; - int32_t mode = CC_SEL(code, 125); - int32_t t = i & 7; - - if (t & 4) { - t += 12; - } - t += (j & 3) * 4; - - decode_1[mode](code, t, rgba); -} - -/* - * Pixel fetch within a block. - */ - -void -util_format_fxt1_rgb_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - fxt1_decode_1(src, 0, i, j, dst); -} - -void -util_format_fxt1_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - fxt1_decode_1(src, 0, i, j, dst); - dst[3] = 0xff; -} - -void -util_format_fxt1_rgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - fxt1_decode_1(src, 0, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = 1.0; -} - -void -util_format_fxt1_rgba_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - fxt1_decode_1(src, 0, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = ubyte_to_float(tmp[3]); -} - -/* - * Block decompression. - */ - -static inline void -util_format_fxtn_rgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height, - bool rgba) -{ - const unsigned bw = 8, bh = 4, comps = 4; - unsigned x, y, i, j; - for (y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - for (x = 0; x < width; x += bw) { - for (j = 0; j < bh; ++j) { - for (i = 0; i < bw; ++i) { - uint8_t *dst = dst_row + (y + j) * dst_stride / sizeof(*dst_row) + (x + i) * comps; - fxt1_decode_1(src, 0, i, j, dst); - if (!rgba) - dst[3] = 0xff; - } - } - src += FXT1_BLOCK_SIZE; - } - src_row += src_stride; - } -} - -void -util_format_fxt1_rgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_fxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - false); -} - -void -util_format_fxt1_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_fxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - true); -} - -static inline void -util_format_fxtn_rgb_unpack_rgba_float(float *dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height, - bool rgba) -{ - const unsigned bw = 8, bh = 4, comps = 4; - unsigned x, y, i, j; - for (y = 0; y < height; y += 4) { - const uint8_t *src = src_row; - for (x = 0; x < width; x += 8) { - for (j = 0; j < bh; ++j) { - for (i = 0; i < bw; ++i) { - float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i) * comps; - uint8_t tmp[4]; - fxt1_decode_1(src, 0, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - if (rgba) - dst[3] = ubyte_to_float(tmp[3]); - else - dst[3] = 1.0; - } - } - src += FXT1_BLOCK_SIZE; - } - src_row += src_stride; - } -} - -void -util_format_fxt1_rgb_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_fxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - false); -} - -void -util_format_fxt1_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_fxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - true); -} - -/* - * Block compression. - */ - -void -util_format_fxt1_rgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - /* The encoder for FXT1_RGB wants 24bpp packed rgb, so make a temporary to do that. - */ - int temp_stride = width * 3; - uint8_t *temp = malloc(height * temp_stride); - if (!temp) - return; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - temp[y * temp_stride + x * 3 + 0] = src[x * 4 + 0]; - temp[y * temp_stride + x * 3 + 1] = src[x * 4 + 1]; - temp[y * temp_stride + x * 3 + 2] = src[x * 4 + 2]; - } - src += src_stride; - } - - fxt1_encode(width, height, 3, temp, temp_stride, dst_row, dst_stride); - - free(temp); -} - -void -util_format_fxt1_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - fxt1_encode(width, height, 4, src, src_stride, dst_row, dst_stride); -} - -void -util_format_fxt1_rgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - int temp_stride = width * 4; - uint8_t *temp = malloc(height * temp_stride); - if (!temp) - return; - - util_format_r8g8b8a8_unorm_pack_rgba_float(temp, temp_stride, - src, src_stride, - width, height); - - util_format_fxt1_rgb_pack_rgba_8unorm(dst_row, dst_stride, - temp, temp_stride, - width, height); - - free(temp); -} - -void -util_format_fxt1_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - int temp_stride = width * 4; - uint8_t *temp = malloc(height * temp_stride); - if (!temp) - return; - - util_format_r8g8b8a8_unorm_pack_rgba_float(temp, temp_stride, - src, src_stride, - width, height); - - util_format_fxt1_rgba_pack_rgba_8unorm(dst_row, dst_stride, - temp, temp_stride, - width, height); - - free(temp); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_fxt1.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_fxt1.h deleted file mode 100644 index c6e2d42..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_fxt1.h +++ /dev/null @@ -1,81 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#ifndef U_FORMAT_FXT1_H_ -#define U_FORMAT_FXT1_H_ - - -#include "../../gallium/include/pipe/p_compiler.h" - -#include "../../../include/c99_compat.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void -util_format_fxt1_rgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgb_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_fxt1_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_fxt1_rgb_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgb_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_fxt1_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_fxt1_rgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -#ifdef __cplusplus -} -#endif - -#endif /* U_FORMAT_FXT1_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_latc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_latc.c deleted file mode 100644 index 8cc2547..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_latc.c +++ /dev/null @@ -1,310 +0,0 @@ -/************************************************************************** - * - * Copyright (C) 2011 Red Hat Inc. - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - -#include -#include "u_format.h" -#include "u_format_rgtc.h" -#include "u_format_latc.h" -#include "../rgtc.h" -#include "../u_math.h" - -void -util_format_latc1_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - /* Fix warnings here: */ - (void) util_format_unsigned_encode_rgtc_ubyte; - (void) util_format_signed_encode_rgtc_ubyte; - - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1); - dst[1] = dst[0]; - dst[2] = dst[0]; - dst[3] = 255; -} - -void -util_format_latc1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rgtc1_unorm_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); -} - -void -util_format_latc1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, - unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rgtc1_unorm_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); -} - -void -util_format_latc1_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 8; - - for(y = 0; y < height; y += 4) { - const uint8_t *src = src_row; - for(x = 0; x < width; x += 4) { - for(j = 0; j < 4; ++j) { - for(i = 0; i < 4; ++i) { - float *dst = (float *)((uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16); - uint8_t tmp_r; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1); - dst[0] = - dst[1] = - dst[2] = ubyte_to_float(tmp_r); - dst[3] = 1.0; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_latc1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rgtc1_unorm_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); -} - -void -util_format_latc1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp_r; - - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1); - dst[0] = - dst[1] = - dst[2] = ubyte_to_float(tmp_r); - dst[3] = 1.0; -} - -void -util_format_latc1_snorm_fetch_rgba_8unorm(UNUSED uint8_t *restrict dst, UNUSED const uint8_t *restrict src, - UNUSED unsigned i, UNUSED unsigned j) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_latc1_snorm_unpack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_latc1_snorm_pack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_latc1_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rgtc1_snorm_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height); -} - -void -util_format_latc1_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 8; - - for(y = 0; y < height; y += 4) { - const int8_t *src = (int8_t *)src_row; - for(x = 0; x < width; x += 4) { - for(j = 0; j < 4; ++j) { - for(i = 0; i < 4; ++i) { - float *dst = (float *)((uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16); - int8_t tmp_r; - util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1); - dst[0] = - dst[1] = - dst[2] = byte_to_float_tex(tmp_r); - dst[3] = 1.0; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_latc1_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - int8_t tmp_r; - - util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1); - dst[0] = - dst[1] = - dst[2] = byte_to_float_tex(tmp_r); - dst[3] = 1.0; -} - - -void -util_format_latc2_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2); - dst[1] = dst[0]; - dst[2] = dst[0]; - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 3, 2); -} - -void -util_format_latc2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rgtc2_unorm_unpack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); -} - -void -util_format_latc2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rgtc2_unorm_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, width, height); -} - -void -util_format_latc2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rxtc2_unorm_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height, 3); -} - -void -util_format_latc2_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 16; - - for(y = 0; y < height; y += 4) { - const uint8_t *src = src_row; - for(x = 0; x < width; x += 4) { - for(j = 0; j < 4; ++j) { - for(i = 0; i < 4; ++i) { - float *dst = (float *)((uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16); - uint8_t tmp_r, tmp_g; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2); - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2); - dst[0] = - dst[1] = - dst[2] = ubyte_to_float(tmp_r); - dst[3] = ubyte_to_float(tmp_g); - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_latc2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp_r, tmp_g; - - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2); - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2); - dst[0] = - dst[1] = - dst[2] = ubyte_to_float(tmp_r); - dst[3] = ubyte_to_float(tmp_g); -} - - -void -util_format_latc2_snorm_fetch_rgba_8unorm(UNUSED uint8_t *restrict dst, UNUSED const uint8_t *restrict src, - UNUSED unsigned i, UNUSED unsigned j) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_latc2_snorm_unpack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_latc2_snorm_pack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_latc2_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 16; - - for(y = 0; y < height; y += 4) { - const int8_t *src = (int8_t *)src_row; - for(x = 0; x < width; x += 4) { - for(j = 0; j < 4; ++j) { - for(i = 0; i < 4; ++i) { - float *dst = (float *)(uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16; - int8_t tmp_r, tmp_g; - util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2); - util_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2); - dst[0] = - dst[1] = - dst[2] = byte_to_float_tex(tmp_r); - dst[3] = byte_to_float_tex(tmp_g); - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_latc2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rxtc2_snorm_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height, 3); -} - -void -util_format_latc2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - int8_t tmp_r, tmp_g; - - util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2); - util_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2); - dst[0] = - dst[1] = - dst[2] = byte_to_float_tex(tmp_r); - dst[3] = byte_to_float_tex(tmp_g); -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_latc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_latc.h deleted file mode 100644 index ecff489..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_latc.h +++ /dev/null @@ -1,110 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 Red Hat Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - -#ifndef U_FORMAT_LATC_H_ -#define U_FORMAT_LATC_H_ - -#include "../../../include/c99_compat.h" - -void -util_format_latc1_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_latc1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - - -void -util_format_latc1_snorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_latc1_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc1_snorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - -void -util_format_latc2_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_latc2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - -void -util_format_latc2_snorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_latc2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_latc2_snorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_other.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_other.c deleted file mode 100644 index 93348bc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_other.c +++ /dev/null @@ -1,354 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#include "u_format_other.h" -#include "../u_math.h" -#include "../format_rgb9e5.h" -#include "../format_r11g11b10f.h" - - -void -util_format_r9g9b9e5_float_unpack_rgba_float(void *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width) -{ - unsigned x; - float *dst = dst_row; - const uint8_t *src = src_row; - for(x = 0; x < width; x += 1) { - uint32_t value = util_cpu_to_le32(*(const uint32_t *)src); - rgb9e5_to_float3(value, dst); - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r9g9b9e5_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = util_cpu_to_le32(float3_to_rgb9e5(src)); - *(uint32_t *)dst = value; - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r9g9b9e5_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, - UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint32_t value = util_cpu_to_le32(*(const uint32_t *)src); - rgb9e5_to_float3(value, dst); - dst[3] = 1; /* a */ -} - - -void -util_format_r9g9b9e5_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width) -{ - unsigned x; - float p[3]; - uint8_t *dst = dst_row; - const uint8_t *src = src_row; - for(x = 0; x < width; x += 1) { - uint32_t value = util_cpu_to_le32(*(const uint32_t *)src); - rgb9e5_to_float3(value, p); - dst[0] = float_to_ubyte(p[0]); /* r */ - dst[1] = float_to_ubyte(p[1]); /* g */ - dst[2] = float_to_ubyte(p[2]); /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - - -void -util_format_r9g9b9e5_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - float p[3]; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value; - p[0] = ubyte_to_float(src[0]); - p[1] = ubyte_to_float(src[1]); - p[2] = ubyte_to_float(src[2]); - value = util_cpu_to_le32(float3_to_rgb9e5(p)); - *(uint32_t *)dst = value; - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_r11g11b10_float_unpack_rgba_float(void *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width) -{ - unsigned x; - float *dst = dst_row; - const uint8_t *src = src_row; - for(x = 0; x < width; x += 1) { - uint32_t value = util_cpu_to_le32(*(const uint32_t *)src); - r11g11b10f_to_float3(value, dst); - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r11g11b10_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = util_cpu_to_le32(float3_to_r11g11b10f(src)); - *(uint32_t *)dst = value; - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r11g11b10_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, - UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint32_t value = util_cpu_to_le32(*(const uint32_t *)src); - r11g11b10f_to_float3(value, dst); - dst[3] = 1; /* a */ -} - - -void -util_format_r11g11b10_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width) -{ - unsigned x; - float p[3]; - uint8_t *dst = dst_row; - const uint8_t *src = src_row; - for(x = 0; x < width; x += 1) { - uint32_t value = util_cpu_to_le32(*(const uint32_t *)src); - r11g11b10f_to_float3(value, p); - dst[0] = float_to_ubyte(p[0]); /* r */ - dst[1] = float_to_ubyte(p[1]); /* g */ - dst[2] = float_to_ubyte(p[2]); /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - - -void -util_format_r11g11b10_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - float p[3]; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value; - p[0] = ubyte_to_float(src[0]); - p[1] = ubyte_to_float(src[1]); - p[2] = ubyte_to_float(src[2]); - value = util_cpu_to_le32(float3_to_r11g11b10f(p)); - *(uint32_t *)dst = value; - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -/* - * PIPE_FORMAT_R8G8Bx_SNORM - * - * A.k.a. D3DFMT_CxV8U8 - */ - -static uint8_t -r8g8bx_derive(int16_t r, int16_t g) -{ - /* Derive blue from red and green components. - * Apparently, we must always use integers to perform calculations, - * otherwise the results won't match D3D's CxV8U8 definition. - */ - return (uint8_t)sqrtf(0x7f * 0x7f - r * r - g * g) * 0xff / 0x7f; -} - -void -util_format_r8g8bx_snorm_unpack_rgba_float(void *restrict dst_row, - const uint8_t *restrict src_row, unsigned width) -{ - unsigned x; - float *dst = dst_row; - const uint16_t *src = (const uint16_t *)src_row; - for(x = 0; x < width; x += 1) { - uint16_t value = util_cpu_to_le16(*src++); - int16_t r, g; - - r = ((int16_t)(value << 8)) >> 8; - g = ((int16_t)(value << 0)) >> 8; - - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = r8g8bx_derive(r, g) * (1.0f/0xff); /* b */ - dst[3] = 1.0f; /* a */ - dst += 4; - } -} - - -void -util_format_r8g8bx_snorm_unpack_rgba_8unorm(uint8_t *restrict dst, - const uint8_t *restrict src_row, - unsigned width) -{ - unsigned x; - const uint16_t *src = (const uint16_t *)src_row; - for(x = 0; x < width; x += 1) { - uint16_t value = util_cpu_to_le16(*src++); - int16_t r, g; - - r = ((int16_t)(value << 8)) >> 8; - g = ((int16_t)(value << 0)) >> 8; - - dst[0] = (uint8_t)(((uint16_t)MAX2(r, 0)) * 0xff / 0x7f); /* r */ - dst[1] = (uint8_t)(((uint16_t)MAX2(g, 0)) * 0xff / 0x7f); /* g */ - dst[2] = r8g8bx_derive(r, g); /* b */ - dst[3] = 255; /* a */ - dst += 4; - } -} - - -void -util_format_r8g8bx_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint16_t *dst = (uint16_t *)dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - - value |= (uint16_t)(((int8_t)(CLAMP(src[0], -1, 1) * 0x7f)) & 0xff) ; - value |= (uint16_t)((((int8_t)(CLAMP(src[1], -1, 1) * 0x7f)) & 0xff) << 8) ; - - *dst++ = util_le16_to_cpu(value); - - src += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_r8g8bx_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint16_t *dst = (uint16_t *)dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - - value |= src[0] >> 1; - value |= (src[1] >> 1) << 8; - - *dst++ = util_le16_to_cpu(value); - - src += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_r8g8bx_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, - UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value = util_cpu_to_le16(*(const uint16_t *)src); - int16_t r, g; - - r = ((int16_t)(value << 8)) >> 8; - g = ((int16_t)(value << 0)) >> 8; - - dst[0] = r * (1.0f/0x7f); /* r */ - dst[1] = g * (1.0f/0x7f); /* g */ - dst[2] = r8g8bx_derive(r, g) * (1.0f/0xff); /* b */ - dst[3] = 1.0f; /* a */ -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_other.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_other.h deleted file mode 100644 index d19ba55..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_other.h +++ /dev/null @@ -1,111 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#ifndef U_FORMAT_OTHER_H_ -#define U_FORMAT_OTHER_H_ - - -#include "../../gallium/include/pipe/p_compiler.h" - -#include "../../../include/c99_compat.h" - -void -util_format_r9g9b9e5_float_unpack_rgba_float(void *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width); - -void -util_format_r9g9b9e5_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_r9g9b9e5_float_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -void -util_format_r9g9b9e5_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width); - -void -util_format_r9g9b9e5_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - - -void -util_format_r11g11b10_float_unpack_rgba_float(void *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width); - -void -util_format_r11g11b10_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_r11g11b10_float_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -void -util_format_r11g11b10_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width); - -void -util_format_r11g11b10_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - - -void -util_format_r8g8bx_snorm_unpack_rgba_float(void *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width); - -void -util_format_r8g8bx_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_r8g8bx_snorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -void -util_format_r8g8bx_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, - const uint8_t *restrict src_row, - unsigned width); - -void -util_format_r8g8bx_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -#endif /* U_FORMAT_OTHER_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_pack.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_pack.h deleted file mode 100644 index 119c3dc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_pack.h +++ /dev/null @@ -1,1355 +0,0 @@ -/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */ - -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#include "u_format.h" -#ifdef __cplusplus -extern "C" { -#endif - -void util_format_none_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_none_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_none_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_none_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_none_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8x8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8x8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8x8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8x8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8r8g8b8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8r8g8b8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8r8g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8r8g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8r8g8b8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8r8g8b8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8r8g8b8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8r8g8b8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8r8g8b8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8b8g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8b8g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8x8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g5b5a1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g5b5a1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g5b5a1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r5g5b5a1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g5b5a1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g5b5x1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g5b5x1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g5b5x1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r5g5b5x1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g5b5x1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g5r5x1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g5r5x1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g5r5x1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b5g5r5x1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g5r5x1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g5r5a1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g5r5a1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g5r5a1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b5g5r5a1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g5r5a1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x1b5g5r5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x1b5g5r5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x1b5g5r5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x1b5g5r5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x1b5g5r5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1r5g5b5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a1r5g5b5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1r5g5b5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a1r5g5b5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a1r5g5b5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x1r5g5b5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x1r5g5b5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x1r5g5b5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x1r5g5b5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x1r5g5b5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1b5g5r5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a1b5g5r5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1b5g5r5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a1b5g5r5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a1b5g5r5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4g4b4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r4g4b4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4g4b4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r4g4b4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r4g4b4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4g4b4x4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r4g4b4x4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4g4b4x4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r4g4b4x4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r4g4b4x4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b4g4r4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b4g4r4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b4g4r4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b4g4r4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b4g4r4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b4g4r4x4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b4g4r4x4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b4g4r4x4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b4g4r4x4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b4g4r4x4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4r4g4b4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4r4g4b4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4r4g4b4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a4r4g4b4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4r4g4b4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4b4g4r4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4b4g4r4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4b4g4r4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a4b4g4r4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4b4g4r4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g6b5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g6b5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g6b5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r5g6b5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g6b5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g6r5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g6r5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g6r5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b5g6r5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g6r5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10a2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10x2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10x2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10x2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10a2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2r10g10b10_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a2r10g10b10_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2r10g10b10_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a2r10g10b10_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a2r10g10b10_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2b10g10r10_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a2b10g10r10_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2b10g10r10_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a2b10g10r10_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a2b10g10r10_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r3g3b2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r3g3b2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r3g3b2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r3g3b2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r3g3b2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b2g3r3_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b2g3r3_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b2g3r3_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b2g3r3_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b2g3r3_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l32a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8a8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8a8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8b8g8r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8b8g8r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8a8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8x8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8x8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8x8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8r8g8b8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8r8g8b8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8r8g8b8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8sg8sb8ux8u_norm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8sg8sb8ux8u_norm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8sg8sb8ux8u_norm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8sg8sb8ux8u_norm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8sg8sb8ux8u_norm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10sg10sb10sa2u_norm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10sg10sb10sa2u_norm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10sg10sb10sa2u_norm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10sg10sb10sa2u_norm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10sg10sb10sa2u_norm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5sg5sb6u_norm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5sg5sb6u_norm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5sg5sb6u_norm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r5sg5sb6u_norm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5sg5sb6u_norm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_z24_unorm_s8_uint_as_r8g8b8a8_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_z24_unorm_s8_uint_as_r8g8b8a8_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_z24_unorm_s8_uint_as_r8g8b8a8_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_z24_unorm_s8_uint_as_r8g8b8a8_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_z24_unorm_s8_uint_as_r8g8b8a8_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64b64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64a64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64a64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64a64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64b64a64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64a64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16a16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16a16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8a8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8a8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8b8g8r8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8a8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8a8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8b8g8r8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10x2_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10x2_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10x2_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10x2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10x2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10x2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10x2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10x2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10x2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4r4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4r4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4r4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a4r4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4r4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10a2_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10a2_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10a2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10a2_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10a2_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10a2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64b64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64a64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64a64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64a64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64b64a64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64b64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64a64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r64g64b64a64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r64g64b64a64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r64g64b64a64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l16a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l16a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l16a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l32a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_i32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_i32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_i32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_l32a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_l32a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_l32a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b8g8r8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b8g8r8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b8g8r8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8r8g8b8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8r8g8b8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8r8g8b8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8b8g8r8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2r10g10b10_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a2r10g10b10_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2r10g10b10_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a2r10g10b10_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2b10g10r10_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a2b10g10r10_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a2b10g10r10_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a2b10g10r10_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10a2_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10a2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10a2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10a2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g6b5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g6b5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g6b5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r5g6b5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g6r5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g6r5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g6r5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b5g6r5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r3g3b2_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r3g3b2_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r3g3b2_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r3g3b2_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b2g3r3_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b2g3r3_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b2g3r3_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b2g3r3_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4g4b4a4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r4g4b4a4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r4g4b4a4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r4g4b4a4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b4g4r4a4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b4g4r4a4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b4g4r4a4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b4g4r4a4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4r4g4b4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4r4g4b4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4r4g4b4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a4r4g4b4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4b4g4r4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a4b4g4r4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a4b4g4r4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a4b4g4r4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1r5g5b5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a1r5g5b5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1r5g5b5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a1r5g5b5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1b5g5r5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a1b5g5r5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a1b5g5r5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a1b5g5r5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g5b5a1_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g5b5a1_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g5b5a1_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r5g5b5a1_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g5r5a1_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g5r5a1_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g5r5a1_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b5g5r5a1_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8x8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8x8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8x8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8g8b8x8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8g8b8x8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8g8b8x8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10x2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10x2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10x2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10x2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10x2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10x2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10x2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10x2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10x2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10x2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10x2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b10g10r10x2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b10g10r10x2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b10g10r10x2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16x16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16x16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16x16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16x16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16g16b16x16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16g16b16x16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16g16b16x16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32x32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32x32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32x32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32x32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32x32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32x32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32x32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32x32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32x32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32x32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32g32b32x32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32g32b32x32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32g32b32x32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r16a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r16a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r16a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r32a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r32a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r32a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10a2_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r10g10b10a2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r10g10b10a2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r10g10b10a2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g6r5_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g6r5_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_b5g6r5_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_b5g6r5_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_b5g6r5_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g6b5_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g6b5_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_r5g6b5_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_r5g6b5_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_r5g6b5_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g16r16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g16r16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g16r16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_g16r16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g16r16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g16r16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g16r16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g16r16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_g16r16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g16r16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g16r16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_g16r16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_g16r16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_g16r16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8b8g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_a8b8g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_a8b8g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_a8b8g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8b8g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8b8g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8b8g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width); -void util_format_x8b8g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -void util_format_x8b8g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j); -void util_format_x8b8g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height); -#ifdef __cplusplus -} /* extern "C" */ -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_pack.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_pack.py deleted file mode 100644 index b68669f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_pack.py +++ /dev/null @@ -1,753 +0,0 @@ - -''' -/************************************************************************** - * - * Copyright 2009-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Pixel format packing and unpacking functions. - * - * @author Jose Fonseca - */ -''' - -import sys - -from u_format_parse import * - - -def inv_swizzles(swizzles): - '''Return an array[4] of inverse swizzle terms''' - '''Only pick the first matching value to avoid l8 getting blue and i8 getting alpha''' - inv_swizzle = [None]*4 - for i in range(4): - swizzle = swizzles[i] - if swizzle < 4 and inv_swizzle[swizzle] == None: - inv_swizzle[swizzle] = i - return inv_swizzle - -def print_channels(format, func): - if format.nr_channels() <= 1: - func(format.le_channels, format.le_swizzles) - else: - if (format.le_channels == format.be_channels and - [c.shift for c in format.le_channels] == - [c.shift for c in format.be_channels] and - format.le_swizzles == format.be_swizzles): - func(format.le_channels, format.le_swizzles) - else: - print('#if UTIL_ARCH_BIG_ENDIAN') - func(format.be_channels, format.be_swizzles) - print('#else') - func(format.le_channels, format.le_swizzles) - print('#endif') - -def generate_format_type(format): - '''Generate a structure that describes the format.''' - - assert format.layout == PLAIN - - def generate_bitfields(channels, swizzles): - for channel in channels: - if channel.type == VOID: - if channel.size: - print(' unsigned %s:%u;' % (channel.name, channel.size)) - elif channel.type == UNSIGNED: - print(' unsigned %s:%u;' % (channel.name, channel.size)) - elif channel.type in (SIGNED, FIXED): - print(' int %s:%u;' % (channel.name, channel.size)) - elif channel.type == FLOAT: - if channel.size == 64: - print(' double %s;' % (channel.name)) - elif channel.size == 32: - print(' float %s;' % (channel.name)) - else: - print(' unsigned %s:%u;' % (channel.name, channel.size)) - else: - assert 0 - - def generate_full_fields(channels, swizzles): - for channel in channels: - assert channel.size % 8 == 0 and is_pot(channel.size) - if channel.type == VOID: - if channel.size: - print(' uint%u_t %s;' % (channel.size, channel.name)) - elif channel.type == UNSIGNED: - print(' uint%u_t %s;' % (channel.size, channel.name)) - elif channel.type in (SIGNED, FIXED): - print(' int%u_t %s;' % (channel.size, channel.name)) - elif channel.type == FLOAT: - if channel.size == 64: - print(' double %s;' % (channel.name)) - elif channel.size == 32: - print(' float %s;' % (channel.name)) - elif channel.size == 16: - print(' uint16_t %s;' % (channel.name)) - else: - assert 0 - else: - assert 0 - - use_bitfields = False - for channel in format.le_channels: - if channel.size % 8 or not is_pot(channel.size): - use_bitfields = True - - print('struct util_format_%s {' % format.short_name()) - if use_bitfields: - print_channels(format, generate_bitfields) - else: - print_channels(format, generate_full_fields) - print('};') - print() - - -def is_format_supported(format): - '''Determines whether we actually have the plumbing necessary to generate the - to read/write to/from this format.''' - - # FIXME: Ideally we would support any format combination here. - - if format.layout != PLAIN: - return False - - for i in range(4): - channel = format.le_channels[i] - if channel.type not in (VOID, UNSIGNED, SIGNED, FLOAT, FIXED): - return False - if channel.type == FLOAT and channel.size not in (16, 32, 64): - return False - - return True - -def native_type(format): - '''Get the native appropriate for a format.''' - - if format.name == 'PIPE_FORMAT_R11G11B10_FLOAT': - return 'uint32_t' - if format.name == 'PIPE_FORMAT_R9G9B9E5_FLOAT': - return 'uint32_t' - - if format.layout == PLAIN: - if not format.is_array(): - # For arithmetic pixel formats return the integer type that matches the whole pixel - return 'uint%u_t' % format.block_size() - else: - # For array pixel formats return the integer type that matches the color channel - channel = format.array_element() - if channel.type in (UNSIGNED, VOID): - return 'uint%u_t' % channel.size - elif channel.type in (SIGNED, FIXED): - return 'int%u_t' % channel.size - elif channel.type == FLOAT: - if channel.size == 16: - return 'uint16_t' - elif channel.size == 32: - return 'float' - elif channel.size == 64: - return 'double' - else: - assert False - else: - assert False - else: - assert False - - -def intermediate_native_type(bits, sign): - '''Find a native type adequate to hold intermediate results of the request bit size.''' - - bytes = 4 # don't use anything smaller than 32bits - while bytes * 8 < bits: - bytes *= 2 - bits = bytes*8 - - if sign: - return 'int%u_t' % bits - else: - return 'uint%u_t' % bits - - -def get_one_shift(type): - '''Get the number of the bit that matches unity for this type.''' - if type.type == 'FLOAT': - assert False - if not type.norm: - return 0 - if type.type == UNSIGNED: - return type.size - if type.type == SIGNED: - return type.size - 1 - if type.type == FIXED: - return type.size / 2 - assert False - - -def truncate_mantissa(x, bits): - '''Truncate an integer so it can be represented exactly with a floating - point mantissa''' - - assert isinstance(x, int) - - s = 1 - if x < 0: - s = -1 - x = -x - - # We can represent integers up to mantissa + 1 bits exactly - mask = (1 << (bits + 1)) - 1 - - # Slide the mask until the MSB matches - shift = 0 - while (x >> shift) & ~mask: - shift += 1 - - x &= mask << shift - x *= s - return x - - -def value_to_native(type, value): - '''Get the value of unity for this type.''' - if type.type == FLOAT: - if type.size <= 32 \ - and isinstance(value, int): - return truncate_mantissa(value, 23) - return value - if type.type == FIXED: - return int(value * (1 << (type.size // 2))) - if not type.norm: - return int(value) - if type.type == UNSIGNED: - return int(value * ((1 << type.size) - 1)) - if type.type == SIGNED: - return int(value * ((1 << (type.size - 1)) - 1)) - assert False - - -def native_to_constant(type, value): - '''Get the value of unity for this type.''' - if type.type == FLOAT: - if type.size <= 32: - return "%.1ff" % float(value) - else: - return "%.1f" % float(value) - else: - return str(int(value)) - - -def get_one(type): - '''Get the value of unity for this type.''' - return value_to_native(type, 1) - - -def clamp_expr(src_channel, dst_channel, dst_native_type, value): - '''Generate the expression to clamp the value in the source type to the - destination type range.''' - - if src_channel == dst_channel: - return value - - src_min = src_channel.min() - src_max = src_channel.max() - dst_min = dst_channel.min() - dst_max = dst_channel.max() - - # Translate the destination range to the src native value - dst_min_native = native_to_constant(src_channel, value_to_native(src_channel, dst_min)) - dst_max_native = native_to_constant(src_channel, value_to_native(src_channel, dst_max)) - - if src_min < dst_min and src_max > dst_max: - return 'CLAMP(%s, %s, %s)' % (value, dst_min_native, dst_max_native) - - if src_max > dst_max: - return 'MIN2(%s, %s)' % (value, dst_max_native) - - if src_min < dst_min: - return 'MAX2(%s, %s)' % (value, dst_min_native) - - return value - - -def conversion_expr(src_channel, - dst_channel, dst_native_type, - value, - clamp=True, - src_colorspace = RGB, - dst_colorspace = RGB): - '''Generate the expression to convert a value between two types.''' - - if src_colorspace != dst_colorspace: - if src_colorspace == SRGB: - assert src_channel.type == UNSIGNED - assert src_channel.norm - assert src_channel.size <= 8 - assert src_channel.size >= 4 - assert dst_colorspace == RGB - if src_channel.size < 8: - value = '%s << %x | %s >> %x' % (value, 8 - src_channel.size, value, 2 * src_channel.size - 8) - if dst_channel.type == FLOAT: - return 'util_format_srgb_8unorm_to_linear_float(%s)' % value - else: - assert dst_channel.type == UNSIGNED - assert dst_channel.norm - assert dst_channel.size == 8 - return 'util_format_srgb_to_linear_8unorm(%s)' % value - elif dst_colorspace == SRGB: - assert dst_channel.type == UNSIGNED - assert dst_channel.norm - assert dst_channel.size <= 8 - assert src_colorspace == RGB - if src_channel.type == FLOAT: - value = 'util_format_linear_float_to_srgb_8unorm(%s)' % value - else: - assert src_channel.type == UNSIGNED - assert src_channel.norm - assert src_channel.size == 8 - value = 'util_format_linear_to_srgb_8unorm(%s)' % value - # XXX rounding is all wrong. - if dst_channel.size < 8: - return '%s >> %x' % (value, 8 - dst_channel.size) - else: - return value - elif src_colorspace == ZS: - pass - elif dst_colorspace == ZS: - pass - else: - assert 0 - - if src_channel == dst_channel: - return value - - src_type = src_channel.type - src_size = src_channel.size - src_norm = src_channel.norm - src_pure = src_channel.pure - - # Promote half to float - if src_type == FLOAT and src_size == 16: - value = '_mesa_half_to_float(%s)' % value - src_size = 32 - - # Special case for float <-> ubytes for more accurate results - # Done before clamping since these functions already take care of that - if src_type == UNSIGNED and src_norm and src_size == 8 and dst_channel.type == FLOAT and dst_channel.size == 32: - return 'ubyte_to_float(%s)' % value - if src_type == FLOAT and src_size == 32 and dst_channel.type == UNSIGNED and dst_channel.norm and dst_channel.size == 8: - return 'float_to_ubyte(%s)' % value - - if clamp: - if dst_channel.type != FLOAT or src_type != FLOAT: - value = clamp_expr(src_channel, dst_channel, dst_native_type, value) - - if src_type in (SIGNED, UNSIGNED) and dst_channel.type in (SIGNED, UNSIGNED): - if not src_norm and not dst_channel.norm: - # neither is normalized -- just cast - return '(%s)%s' % (dst_native_type, value) - - if src_norm and dst_channel.norm: - return "_mesa_%snorm_to_%snorm(%s, %d, %d)" % ("s" if src_type == SIGNED else "u", - "s" if dst_channel.type == SIGNED else "u", - value, src_channel.size, dst_channel.size) - else: - # We need to rescale using an intermediate type big enough to hold the multiplication of both - src_one = get_one(src_channel) - dst_one = get_one(dst_channel) - tmp_native_type = intermediate_native_type(src_size + dst_channel.size, src_channel.sign and dst_channel.sign) - value = '((%s)%s)' % (tmp_native_type, value) - value = '(%s)(%s * 0x%x / 0x%x)' % (dst_native_type, value, dst_one, src_one) - return value - - - # Promote to either float or double - if src_type != FLOAT: - if src_norm or src_type == FIXED: - one = get_one(src_channel) - if src_size <= 23: - value = '(%s * (1.0f/0x%x))' % (value, one) - if dst_channel.size <= 32: - value = '(float)%s' % value - src_size = 32 - else: - # bigger than single precision mantissa, use double - value = '(%s * (1.0/0x%x))' % (value, one) - src_size = 64 - src_norm = False - else: - if src_size <= 23 or dst_channel.size <= 32: - value = '(float)%s' % value - src_size = 32 - else: - # bigger than single precision mantissa, use double - value = '(double)%s' % value - src_size = 64 - src_type = FLOAT - - # Convert double or float to non-float - if dst_channel.type != FLOAT: - if dst_channel.norm or dst_channel.type == FIXED: - dst_one = get_one(dst_channel) - if dst_channel.size <= 23: - value = 'util_iround(%s * 0x%x)' % (value, dst_one) - else: - # bigger than single precision mantissa, use double - value = '(%s * (double)0x%x)' % (value, dst_one) - value = '(%s)%s' % (dst_native_type, value) - else: - # Cast double to float when converting to either half or float - if dst_channel.size <= 32 and src_size > 32: - value = '(float)%s' % value - src_size = 32 - - if dst_channel.size == 16: - value = '_mesa_float_to_float16_rtz(%s)' % value - elif dst_channel.size == 64 and src_size < 64: - value = '(double)%s' % value - - return value - - -def generate_unpack_kernel(format, dst_channel, dst_native_type): - - if not is_format_supported(format): - return - - assert format.layout == PLAIN - - def unpack_from_bitmask(channels, swizzles): - depth = format.block_size() - print(' uint%u_t value;' % (depth)) - print(' memcpy(&value, src, sizeof value);') - - # Compute the intermediate unshifted values - for i in range(format.nr_channels()): - src_channel = channels[i] - value = 'value' - shift = src_channel.shift - if src_channel.type == UNSIGNED: - if shift: - value = '%s >> %u' % (value, shift) - if shift + src_channel.size < depth: - value = '(%s) & 0x%x' % (value, (1 << src_channel.size) - 1) - print(' uint%u_t %s = %s;' % (depth, src_channel.name, value)) - elif src_channel.type == SIGNED: - if shift + src_channel.size < depth: - # Align the sign bit - lshift = depth - (shift + src_channel.size) - value = '%s << %u' % (value, lshift) - # Cast to signed - value = '(int%u_t)(%s) ' % (depth, value) - if src_channel.size < depth: - # Align the LSB bit - rshift = depth - src_channel.size - value = '(%s) >> %u' % (value, rshift) - print(' int%u_t %s = %s;' % (depth, src_channel.name, value)) - else: - value = None - - # Convert, swizzle, and store final values - for i in range(4): - swizzle = swizzles[i] - if swizzle < 4: - src_channel = channels[swizzle] - src_colorspace = format.colorspace - if src_colorspace == SRGB and i == 3: - # Alpha channel is linear - src_colorspace = RGB - value = src_channel.name - value = conversion_expr(src_channel, - dst_channel, dst_native_type, - value, - src_colorspace = src_colorspace) - elif swizzle == SWIZZLE_0: - value = '0' - elif swizzle == SWIZZLE_1: - value = get_one(dst_channel) - elif swizzle == SWIZZLE_NONE: - value = '0' - else: - assert False - print(' dst[%u] = %s; /* %s */' % (i, value, 'rgba'[i])) - - def unpack_from_struct(channels, swizzles): - print(' struct util_format_%s pixel;' % format.short_name()) - print(' memcpy(&pixel, src, sizeof pixel);') - - for i in range(4): - swizzle = swizzles[i] - if swizzle < 4: - src_channel = channels[swizzle] - src_colorspace = format.colorspace - if src_colorspace == SRGB and i == 3: - # Alpha channel is linear - src_colorspace = RGB - value = 'pixel.%s' % src_channel.name - value = conversion_expr(src_channel, - dst_channel, dst_native_type, - value, - src_colorspace = src_colorspace) - elif swizzle == SWIZZLE_0: - value = '0' - elif swizzle == SWIZZLE_1: - value = get_one(dst_channel) - elif swizzle == SWIZZLE_NONE: - value = '0' - else: - assert False - print(' dst[%u] = %s; /* %s */' % (i, value, 'rgba'[i])) - - if format.is_bitmask(): - print_channels(format, unpack_from_bitmask) - else: - print_channels(format, unpack_from_struct) - - -def generate_pack_kernel(format, src_channel, src_native_type): - - if not is_format_supported(format): - return - - dst_native_type = native_type(format) - - assert format.layout == PLAIN - - def pack_into_bitmask(channels, swizzles): - inv_swizzle = inv_swizzles(swizzles) - - depth = format.block_size() - print(' uint%u_t value = 0;' % depth) - - for i in range(4): - dst_channel = channels[i] - shift = dst_channel.shift - if inv_swizzle[i] is not None: - value ='src[%u]' % inv_swizzle[i] - dst_colorspace = format.colorspace - if dst_colorspace == SRGB and inv_swizzle[i] == 3: - # Alpha channel is linear - dst_colorspace = RGB - value = conversion_expr(src_channel, - dst_channel, dst_native_type, - value, - dst_colorspace = dst_colorspace) - if dst_channel.type in (UNSIGNED, SIGNED): - if shift + dst_channel.size < depth: - value = '(%s) & 0x%x' % (value, (1 << dst_channel.size) - 1) - if shift: - value = '(uint32_t)(%s) << %u' % (value, shift) - if dst_channel.type == SIGNED: - # Cast to unsigned - value = '(uint%u_t)(%s) ' % (depth, value) - else: - value = None - if value is not None: - print(' value |= %s;' % (value)) - - print(' memcpy(dst, &value, sizeof value);') - - def pack_into_struct(channels, swizzles): - inv_swizzle = inv_swizzles(swizzles) - - print(' struct util_format_%s pixel = {0};' % format.short_name()) - - for i in range(4): - dst_channel = channels[i] - width = dst_channel.size - if inv_swizzle[i] is None: - continue - dst_colorspace = format.colorspace - if dst_colorspace == SRGB and inv_swizzle[i] == 3: - # Alpha channel is linear - dst_colorspace = RGB - value ='src[%u]' % inv_swizzle[i] - value = conversion_expr(src_channel, - dst_channel, dst_native_type, - value, - dst_colorspace = dst_colorspace) - print(' pixel.%s = %s;' % (dst_channel.name, value)) - - print(' memcpy(dst, &pixel, sizeof pixel);') - - if format.is_bitmask(): - print_channels(format, pack_into_bitmask) - else: - print_channels(format, pack_into_struct) - - -def generate_format_unpack(format, dst_channel, dst_native_type, dst_suffix): - '''Generate the function to unpack pixels from a particular format''' - - name = format.short_name() - - if "8unorm" in dst_suffix: - dst_proto_type = dst_native_type - else: - dst_proto_type = 'void' - - proto = 'util_format_%s_unpack_%s(%s *restrict dst_row, const uint8_t *restrict src, unsigned width)' % ( - name, dst_suffix, dst_proto_type) - print('void %s;' % proto, file=sys.stdout2) - - print('void') - print(proto) - print('{') - - if is_format_supported(format): - print(' %s *dst = dst_row;' % (dst_native_type)) - print( - ' for (unsigned x = 0; x < width; x += %u) {' % (format.block_width,)) - - generate_unpack_kernel(format, dst_channel, dst_native_type) - - print(' src += %u;' % (format.block_size() / 8,)) - print(' dst += 4;') - print(' }') - - print('}') - print() - - -def generate_format_pack(format, src_channel, src_native_type, src_suffix): - '''Generate the function to pack pixels to a particular format''' - - name = format.short_name() - - print('void') - print('util_format_%s_pack_%s(uint8_t *restrict dst_row, unsigned dst_stride, const %s *restrict src_row, unsigned src_stride, unsigned width, unsigned height)' % - (name, src_suffix, src_native_type)) - print('{') - - print('void util_format_%s_pack_%s(uint8_t *restrict dst_row, unsigned dst_stride, const %s *restrict src_row, unsigned src_stride, unsigned width, unsigned height);' % - (name, src_suffix, src_native_type), file=sys.stdout2) - - if is_format_supported(format): - print(' unsigned x, y;') - print(' for(y = 0; y < height; y += %u) {' % (format.block_height,)) - print(' const %s *src = src_row;' % (src_native_type)) - print(' uint8_t *dst = dst_row;') - print(' for(x = 0; x < width; x += %u) {' % (format.block_width,)) - - generate_pack_kernel(format, src_channel, src_native_type) - - print(' src += 4;') - print(' dst += %u;' % (format.block_size() / 8,)) - print(' }') - print(' dst_row += dst_stride;') - print(' src_row += src_stride/sizeof(*src_row);') - print(' }') - - print('}') - print() - - -def generate_format_fetch(format, dst_channel, dst_native_type): - '''Generate the function to unpack pixels from a particular format''' - - name = format.short_name() - - proto = 'util_format_%s_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j)' % (name) - print('void %s;' % proto, file=sys.stdout2) - - print('void') - print(proto) - - print('{') - print(' %s *dst = in_dst;' % dst_native_type) - - if is_format_supported(format): - generate_unpack_kernel(format, dst_channel, dst_native_type) - - print('}') - print() - - -def is_format_hand_written(format): - return format.layout != PLAIN or format.colorspace == ZS - - -def generate(formats): - print() - print('#include "pipe/p_compiler.h"') - print('#include "util/u_math.h"') - print('#include "util/half_float.h"') - print('#include "u_format.h"') - print('#include "u_format_other.h"') - print('#include "util/format_srgb.h"') - print('#include "format_utils.h"') - print('#include "u_format_yuv.h"') - print('#include "u_format_zs.h"') - print('#include "u_format_pack.h"') - print() - - for format in formats: - if not is_format_hand_written(format): - - if is_format_supported(format) and not format.is_bitmask(): - generate_format_type(format) - - if format.is_pure_unsigned(): - native_type = 'unsigned' - suffix = 'unsigned' - channel = Channel(UNSIGNED, False, True, 32) - - generate_format_unpack(format, channel, native_type, suffix) - generate_format_pack(format, channel, native_type, suffix) - generate_format_fetch(format, channel, native_type) - - channel = Channel(SIGNED, False, True, 32) - native_type = 'int' - suffix = 'signed' - generate_format_pack(format, channel, native_type, suffix) - elif format.is_pure_signed(): - native_type = 'int' - suffix = 'signed' - channel = Channel(SIGNED, False, True, 32) - - generate_format_unpack(format, channel, native_type, suffix) - generate_format_pack(format, channel, native_type, suffix) - generate_format_fetch(format, channel, native_type) - - native_type = 'unsigned' - suffix = 'unsigned' - channel = Channel(UNSIGNED, False, True, 32) - generate_format_pack(format, channel, native_type, suffix) - else: - channel = Channel(FLOAT, False, False, 32) - native_type = 'float' - suffix = 'rgba_float' - - generate_format_unpack(format, channel, native_type, suffix) - generate_format_pack(format, channel, native_type, suffix) - generate_format_fetch(format, channel, native_type) - - channel = Channel(UNSIGNED, True, False, 8) - native_type = 'uint8_t' - suffix = 'rgba_8unorm' - - generate_format_unpack(format, channel, native_type, suffix) - generate_format_pack(format, channel, native_type, suffix) diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_parse.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_parse.py deleted file mode 100644 index 8571a0f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_parse.py +++ /dev/null @@ -1,442 +0,0 @@ - -''' -/************************************************************************** - * - * Copyright 2009 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ -''' - - -import copy - -VOID, UNSIGNED, SIGNED, FIXED, FLOAT = range(5) - -SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_W, SWIZZLE_0, SWIZZLE_1, SWIZZLE_NONE, = range(7) - -PLAIN = 'plain' - -RGB = 'rgb' -SRGB = 'srgb' -YUV = 'yuv' -ZS = 'zs' - - -def is_pot(x): - return (x & (x - 1)) == 0 - - -VERY_LARGE = 99999999999999999999999 - - -class Channel: - '''Describe the channel of a color channel.''' - - def __init__(self, type, norm, pure, size, name=''): - self.type = type - self.norm = norm - self.pure = pure - self.size = size - self.sign = type in (SIGNED, FIXED, FLOAT) - self.name = name - - def __str__(self): - s = str(self.type) - if self.norm: - s += 'n' - if self.pure: - s += 'p' - s += str(self.size) - return s - - def __repr__(self): - return "Channel({})".format(self.__str__()) - - def __eq__(self, other): - if other is None: - return False - - return self.type == other.type and self.norm == other.norm and self.pure == other.pure and self.size == other.size - - def __ne__(self, other): - return not self == other - - def max(self): - '''Maximum representable number.''' - if self.type == FLOAT: - return VERY_LARGE - if self.type == FIXED: - return (1 << (self.size // 2)) - 1 - if self.norm: - return 1 - if self.type == UNSIGNED: - return (1 << self.size) - 1 - if self.type == SIGNED: - return (1 << (self.size - 1)) - 1 - assert False - - def min(self): - '''Minimum representable number.''' - if self.type == FLOAT: - return -VERY_LARGE - if self.type == FIXED: - return -(1 << (self.size // 2)) - if self.type == UNSIGNED: - return 0 - if self.norm: - return -1 - if self.type == SIGNED: - return -(1 << (self.size - 1)) - assert False - - -class Format: - '''Describe a pixel format.''' - - def __init__(self, name, layout, block_width, block_height, block_depth, le_channels, le_swizzles, be_channels, be_swizzles, colorspace): - self.name = name - self.layout = layout - self.block_width = block_width - self.block_height = block_height - self.block_depth = block_depth - self.colorspace = colorspace - - self.le_channels = le_channels - self.le_swizzles = le_swizzles - - le_shift = 0 - for channel in self.le_channels: - channel.shift = le_shift - le_shift += channel.size - - if be_channels: - if self.is_array(): - print( - "{} is an array format and should not include BE swizzles in the CSV".format(self.name)) - exit(1) - if self.is_bitmask(): - print( - "{} is a bitmask format and should not include BE swizzles in the CSV".format(self.name)) - exit(1) - self.be_channels = be_channels - self.be_swizzles = be_swizzles - elif self.is_bitmask() and not self.is_array(): - # Bitmask formats are "load a word the size of the block and - # bitshift channels out of it." However, the channel shifts - # defined in u_format_table.c are numbered right-to-left on BE - # for some historical reason (see below), which is hard to - # change due to llvmpipe, so we also have to flip the channel - # order and the channel-to-rgba swizzle values to read - # right-to-left from the defined (non-VOID) channels so that the - # correct shifts happen. - # - # This is nonsense, but it's the nonsense that makes - # u_format_test pass and you get the right colors in softpipe at - # least. - chans = self.nr_channels() - self.be_channels = self.le_channels[chans - - 1::-1] + self.le_channels[chans:4] - - xyzw = [SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_W] - chan_map = {SWIZZLE_X: xyzw[chans - 1] if chans >= 1 else SWIZZLE_X, - SWIZZLE_Y: xyzw[chans - 2] if chans >= 2 else SWIZZLE_X, - SWIZZLE_Z: xyzw[chans - 3] if chans >= 3 else SWIZZLE_X, - SWIZZLE_W: xyzw[chans - 4] if chans >= 4 else SWIZZLE_X, - SWIZZLE_1: SWIZZLE_1, - SWIZZLE_0: SWIZZLE_0, - SWIZZLE_NONE: SWIZZLE_NONE} - self.be_swizzles = [chan_map[s] for s in self.le_swizzles] - else: - self.be_channels = copy.deepcopy(le_channels) - self.be_swizzles = le_swizzles - - be_shift = 0 - for channel in reversed(self.be_channels): - channel.shift = be_shift - be_shift += channel.size - - assert le_shift == be_shift - for i in range(4): - assert (self.le_swizzles[i] != SWIZZLE_NONE) == ( - self.be_swizzles[i] != SWIZZLE_NONE) - - def __str__(self): - return self.name - - def short_name(self): - '''Make up a short norm for a format, suitable to be used as suffix in - function names.''' - - name = self.name - if name.startswith('PIPE_FORMAT_'): - name = name[len('PIPE_FORMAT_'):] - name = name.lower() - return name - - def block_size(self): - size = 0 - for channel in self.le_channels: - size += channel.size - return size - - def nr_channels(self): - nr_channels = 0 - for channel in self.le_channels: - if channel.size: - nr_channels += 1 - return nr_channels - - def array_element(self): - if self.layout != PLAIN: - return None - ref_channel = self.le_channels[0] - if ref_channel.type == VOID: - ref_channel = self.le_channels[1] - for channel in self.le_channels: - if channel.size and (channel.size != ref_channel.size or channel.size % 8): - return None - if channel.type != VOID: - if channel.type != ref_channel.type: - return None - if channel.norm != ref_channel.norm: - return None - if channel.pure != ref_channel.pure: - return None - return ref_channel - - def is_array(self): - return self.array_element() != None - - def is_mixed(self): - if self.layout != PLAIN: - return False - ref_channel = self.le_channels[0] - if ref_channel.type == VOID: - ref_channel = self.le_channels[1] - for channel in self.le_channels[1:]: - if channel.type != VOID: - if channel.type != ref_channel.type: - return True - if channel.norm != ref_channel.norm: - return True - if channel.pure != ref_channel.pure: - return True - return False - - def is_compressed(self): - for channel in self.le_channels: - if channel.type != VOID: - return False - return True - - def is_unorm(self): - # Non-compressed formats all have unorm or srgb in their name. - for keyword in ['_UNORM', '_SRGB']: - if keyword in self.name: - return True - - # All the compressed formats in GLES3.2 and GL4.6 ("Table 8.14: Generic - # and specific compressed internal formats.") that aren't snorm for - # border colors are unorm, other than BPTC_*_FLOAT. - return self.is_compressed() and not ('FLOAT' in self.name or self.is_snorm()) - - def is_snorm(self): - return '_SNORM' in self.name - - def is_pot(self): - return is_pot(self.block_size()) - - def is_int(self): - if self.layout != PLAIN: - return False - for channel in self.le_channels: - if channel.type not in (VOID, UNSIGNED, SIGNED): - return False - return True - - def is_float(self): - if self.layout != PLAIN: - return False - for channel in self.le_channels: - if channel.type not in (VOID, FLOAT): - return False - return True - - def is_bitmask(self): - if self.layout != PLAIN: - return False - if self.block_size() not in (8, 16, 32): - return False - for channel in self.le_channels: - if channel.type not in (VOID, UNSIGNED, SIGNED): - return False - return True - - def is_pure_color(self): - if self.layout != PLAIN or self.colorspace == ZS: - return False - pures = [channel.pure - for channel in self.le_channels - if channel.type != VOID] - for x in pures: - assert x == pures[0] - return pures[0] - - def channel_type(self): - types = [channel.type - for channel in self.le_channels - if channel.type != VOID] - for x in types: - assert x == types[0] - return types[0] - - def is_pure_signed(self): - return self.is_pure_color() and self.channel_type() == SIGNED - - def is_pure_unsigned(self): - return self.is_pure_color() and self.channel_type() == UNSIGNED - - def has_channel(self, id): - return self.le_swizzles[id] != SWIZZLE_NONE - - def has_depth(self): - return self.colorspace == ZS and self.has_channel(0) - - def has_stencil(self): - return self.colorspace == ZS and self.has_channel(1) - - def stride(self): - return self.block_size()/8 - - -_type_parse_map = { - '': VOID, - 'x': VOID, - 'u': UNSIGNED, - 's': SIGNED, - 'h': FIXED, - 'f': FLOAT, -} - -_swizzle_parse_map = { - 'x': SWIZZLE_X, - 'y': SWIZZLE_Y, - 'z': SWIZZLE_Z, - 'w': SWIZZLE_W, - '0': SWIZZLE_0, - '1': SWIZZLE_1, - '_': SWIZZLE_NONE, -} - - -def _parse_channels(fields, layout, colorspace, swizzles): - if layout == PLAIN: - names = ['']*4 - if colorspace in (RGB, SRGB): - for i in range(4): - swizzle = swizzles[i] - if swizzle < 4: - names[swizzle] += 'rgba'[i] - elif colorspace == ZS: - for i in range(4): - swizzle = swizzles[i] - if swizzle < 4: - names[swizzle] += 'zs'[i] - else: - assert False - for i in range(4): - if names[i] == '': - names[i] = 'x' - else: - names = ['x', 'y', 'z', 'w'] - - channels = [] - for i in range(0, 4): - field = fields[i] - if field: - type = _type_parse_map[field[0]] - if field[1] == 'n': - norm = True - pure = False - size = int(field[2:]) - elif field[1] == 'p': - pure = True - norm = False - size = int(field[2:]) - else: - norm = False - pure = False - size = int(field[1:]) - else: - type = VOID - norm = False - pure = False - size = 0 - channel = Channel(type, norm, pure, size, names[i]) - channels.append(channel) - - return channels - - -def parse(filename): - '''Parse the format description in CSV format in terms of the - Channel and Format classes above.''' - - stream = open(filename) - formats = [] - for line in stream: - try: - comment = line.index('#') - except ValueError: - pass - else: - line = line[:comment] - line = line.strip() - if not line: - continue - - fields = [field.strip() for field in line.split(',')] - assert(len(fields) == 11 or len(fields) == 16) - - name = fields[0] - layout = fields[1] - block_width, block_height, block_depth = map(int, fields[2:5]) - colorspace = fields[10] - - le_swizzles = [_swizzle_parse_map[swizzle] for swizzle in fields[9]] - le_channels = _parse_channels(fields[5:9], layout, colorspace, le_swizzles) - - be_swizzles = None - be_channels = None - if len(fields) == 16: - be_swizzles = [_swizzle_parse_map[swizzle] - - for swizzle in fields[15]] - be_channels = _parse_channels( - - fields[11:15], layout, colorspace, be_swizzles) - - format = Format(name, layout, block_width, block_height, block_depth, le_channels, le_swizzles, be_channels, be_swizzles, colorspace) - formats.append(format) - return formats diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_rgtc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_rgtc.c deleted file mode 100644 index 05ca439..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_rgtc.c +++ /dev/null @@ -1,566 +0,0 @@ -/************************************************************************** - * - * Copyright (C) 2011 Red Hat Inc. - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - -#include -#include "u_format.h" -#include "u_format_rgtc.h" -#include "../u_math.h" -#include "../rgtc.h" - -void -util_format_rgtc1_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1); - dst[1] = 0; - dst[2] = 0; - dst[3] = 255; -} - -void -util_format_rgtc1_unorm_unpack_r_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, comps = 1; - unsigned x, y, i, j; - unsigned block_size = 8; - - for(y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, bh); - for(x = 0; x < width; x += bw) { - const unsigned w = MIN2(width - x, bw); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1); - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, comps = 4; - unsigned x, y, i, j; - unsigned block_size = 8; - - for(y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, bh); - for(x = 0; x < width; x += bw) { - const unsigned w = MIN2(width - x, bw); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 1); - dst[1] = 0; - dst[2] = 0; - dst[3] = 255; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, - unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, bytes_per_block = 8; - unsigned x, y, i, j; - - for(y = 0; y < height; y += bh) { - uint8_t *dst = dst_row; - for(x = 0; x < width; x += bw) { - uint8_t tmp[4][4]; /* [bh][bw][comps] */ - for(j = 0; j < bh; ++j) { - for(i = 0; i < bw; ++i) { - tmp[j][i] = src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]; - } - } - util_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4); - dst += bytes_per_block; - } - dst_row += dst_stride / sizeof(*dst_row); - } -} - -void -util_format_rgtc1_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 8; - for(y = 0; y < height; y += 4) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, 4); - for(x = 0; x < width; x += 4) { - const unsigned w = MIN2(width - x, 4); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - float *dst = (float *)((uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16); - uint8_t tmp_r; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1); - dst[0] = ubyte_to_float(tmp_r); - dst[1] = 0.0; - dst[2] = 0.0; - dst[3] = 1.0; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, bytes_per_block = 8; - unsigned x, y, i, j; - - for(y = 0; y < height; y += bh) { - uint8_t *dst = dst_row; - for(x = 0; x < width; x += bw) { - uint8_t tmp[4][4]; /* [bh][bw][comps] */ - for(j = 0; j < bh; ++j) { - for(i = 0; i < bw; ++i) { - tmp[j][i] = float_to_ubyte(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]); - } - } - util_format_unsigned_encode_rgtc_ubyte(dst, tmp, 4, 4); - dst += bytes_per_block; - } - dst_row += dst_stride / sizeof(*dst_row); - } -} - -void -util_format_rgtc1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp_r; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1); - dst[0] = ubyte_to_float(tmp_r); - dst[1] = 0.0; - dst[2] = 0.0; - dst[3] = 1.0; -} - -void -util_format_rgtc1_snorm_fetch_rgba_8unorm(UNUSED uint8_t *restrict dst, UNUSED const uint8_t *restrict src, - UNUSED unsigned i, UNUSED unsigned j) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_rgtc1_snorm_unpack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_rgtc1_snorm_unpack_r_8snorm(int8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, comps = 1; - unsigned x, y, i, j; - unsigned block_size = 8; - - for(y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, bh); - for(x = 0; x < width; x += bw) { - const unsigned w = MIN2(width - x, bw); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - int8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; - util_format_signed_fetch_texel_rgtc(0, (const int8_t *)src, i, j, dst, 1); - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc1_snorm_pack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_rgtc1_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, bytes_per_block = 8; - unsigned x, y, i, j; - - for(y = 0; y < height; y += bh) { - int8_t *dst = (int8_t *)dst_row; - for(x = 0; x < width; x += bw) { - int8_t tmp[4][4]; /* [bh][bw][comps] */ - for(j = 0; j < bh; ++j) { - for(i = 0; i < bw; ++i) { - tmp[j][i] = float_to_byte_tex(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]); - } - } - util_format_signed_encode_rgtc_ubyte(dst, tmp, 4, 4); - dst += bytes_per_block; - } - dst_row += dst_stride / sizeof(*dst_row); - } -} - -void -util_format_rgtc1_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 8; - for(y = 0; y < height; y += 4) { - const int8_t *src = (int8_t *)src_row; - const unsigned h = MIN2(height - y, 4); - for(x = 0; x < width; x += 4) { - const unsigned w = MIN2(width - x, 4); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - float *dst = (float *)((uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16); - int8_t tmp_r; - util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 1); - dst[0] = byte_to_float_tex(tmp_r); - dst[1] = 0.0; - dst[2] = 0.0; - dst[3] = 1.0; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc1_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - int8_t tmp_r; - util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 1); - dst[0] = byte_to_float_tex(tmp_r); - dst[1] = 0.0; - dst[2] = 0.0; - dst[3] = 1.0; -} - - -void -util_format_rgtc2_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2); - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2); - dst[2] = 0; - dst[3] = 255; -} - -void -util_format_rgtc2_unorm_unpack_rg_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, comps = 2; - unsigned x, y, i, j; - unsigned block_size = 16; - - for(y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, bh); - for(x = 0; x < width; x += bw) { - const unsigned w = MIN2(width - x, bw); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2); - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2); - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, comps = 4; - unsigned x, y, i, j; - unsigned block_size = 16; - - for(y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, bh); - for(x = 0; x < width; x += bw) { - const unsigned w = MIN2(width - x, bw); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, dst, 2); - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, dst + 1, 2); - dst[2] = 0; - dst[3] = 255; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, bytes_per_block = 16; - unsigned x, y, i, j; - - for(y = 0; y < height; y += bh) { - uint8_t *dst = dst_row; - for(x = 0; x < width; x += bw) { - uint8_t tmp_r[4][4]; /* [bh][bw] */ - uint8_t tmp_g[4][4]; /* [bh][bw] */ - for(j = 0; j < bh; ++j) { - for(i = 0; i < bw; ++i) { - tmp_r[j][i] = src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]; - tmp_g[j][i] = src_row[((y + j)*src_stride/sizeof(*src_row) + (x + i)*4) + 1]; - } - } - util_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4); - util_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4); - dst += bytes_per_block; - } - dst_row += dst_stride / sizeof(*dst_row); - } -} - -void -util_format_rxtc2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height, unsigned chan2off) -{ - const unsigned bw = 4, bh = 4, bytes_per_block = 16; - unsigned x, y, i, j; - - for(y = 0; y < height; y += bh) { - uint8_t *dst = dst_row; - for(x = 0; x < width; x += bw) { - uint8_t tmp_r[4][4]; /* [bh][bw][comps] */ - uint8_t tmp_g[4][4]; /* [bh][bw][comps] */ - for(j = 0; j < bh; ++j) { - for(i = 0; i < bw; ++i) { - tmp_r[j][i] = float_to_ubyte(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]); - tmp_g[j][i] = float_to_ubyte(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4 + chan2off]); - } - } - util_format_unsigned_encode_rgtc_ubyte(dst, tmp_r, 4, 4); - util_format_unsigned_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4); - dst += bytes_per_block; - } - dst_row += dst_stride / sizeof(*dst_row); - } -} - -void -util_format_rgtc2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rxtc2_unorm_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height, 1); -} - -void -util_format_rgtc2_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 16; - for(y = 0; y < height; y += 4) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, 4); - for(x = 0; x < width; x += 4) { - const unsigned w = MIN2(width - x, 4); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - float *dst = (float *)((uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16); - uint8_t tmp_r, tmp_g; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2); - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2); - dst[0] = ubyte_to_float(tmp_r); - dst[1] = ubyte_to_float(tmp_g); - dst[2] = 0.0; - dst[3] = 1.0; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp_r, tmp_g; - util_format_unsigned_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2); - util_format_unsigned_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2); - dst[0] = ubyte_to_float(tmp_r); - dst[1] = ubyte_to_float(tmp_g); - dst[2] = 0.0; - dst[3] = 1.0; -} - - -void -util_format_rgtc2_snorm_fetch_rgba_8unorm(UNUSED uint8_t *restrict dst, UNUSED const uint8_t *restrict src, - UNUSED unsigned i, UNUSED unsigned j) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_rgtc2_snorm_unpack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_rgtc2_snorm_unpack_rg_8snorm(int8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - const unsigned bw = 4, bh = 4, comps = 2; - unsigned x, y, i, j; - unsigned block_size = 16; - - for(y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, bh); - for(x = 0; x < width; x += bw) { - const unsigned w = MIN2(width - x, bw); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - int8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; - util_format_signed_fetch_texel_rgtc(0, (const int8_t *)src, i, j, (int8_t *)dst, 2); - util_format_signed_fetch_texel_rgtc(0, (const int8_t *)src + 8, i, j, (int8_t *)dst + 1, 2); - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rgtc2_snorm_pack_rgba_8unorm(UNUSED uint8_t *restrict dst_row, UNUSED unsigned dst_stride, - UNUSED const uint8_t *restrict src_row, UNUSED unsigned src_stride, - UNUSED unsigned width, UNUSED unsigned height) -{ - fprintf(stderr,"%s\n", __func__); -} - -void -util_format_rgtc2_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y, i, j; - int block_size = 16; - for(y = 0; y < height; y += 4) { - const int8_t *src = (int8_t *)src_row; - const unsigned h = MIN2(height - y, 4); - for(x = 0; x < width; x += 4) { - const unsigned w = MIN2(width - x, 4); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - float *dst = (float *)((uint8_t *)dst_row + (y + j)*dst_stride + (x + i)*16); - int8_t tmp_r, tmp_g; - util_format_signed_fetch_texel_rgtc(0, src, i, j, &tmp_r, 2); - util_format_signed_fetch_texel_rgtc(0, src + 8, i, j, &tmp_g, 2); - dst[0] = byte_to_float_tex(tmp_r); - dst[1] = byte_to_float_tex(tmp_g); - dst[2] = 0.0; - dst[3] = 1.0; - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_rxtc2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height, unsigned chan2off) -{ - const unsigned bw = 4, bh = 4, bytes_per_block = 16; - unsigned x, y, i, j; - - for(y = 0; y < height; y += bh) { - int8_t *dst = (int8_t *)dst_row; - for(x = 0; x < width; x += bw) { - int8_t tmp_r[4][4]; /* [bh][bw][comps] */ - int8_t tmp_g[4][4]; /* [bh][bw][comps] */ - for(j = 0; j < bh; ++j) { - for(i = 0; i < bw; ++i) { - tmp_r[j][i] = float_to_byte_tex(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4]); - tmp_g[j][i] = float_to_byte_tex(src_row[(y + j)*src_stride/sizeof(*src_row) + (x + i)*4 + chan2off]); - } - } - util_format_signed_encode_rgtc_ubyte(dst, tmp_r, 4, 4); - util_format_signed_encode_rgtc_ubyte(dst + 8, tmp_g, 4, 4); - dst += bytes_per_block; - } - dst_row += dst_stride / sizeof(*dst_row); - } -} - -void -util_format_rgtc2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_rxtc2_snorm_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, width, height, 1); -} - -void -util_format_rgtc2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - int8_t tmp_r, tmp_g; - util_format_signed_fetch_texel_rgtc(0, (int8_t *)src, i, j, &tmp_r, 2); - util_format_signed_fetch_texel_rgtc(0, (int8_t *)src + 8, i, j, &tmp_g, 2); - dst[0] = byte_to_float_tex(tmp_r); - dst[1] = byte_to_float_tex(tmp_g); - dst[2] = 0.0; - dst[3] = 1.0; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_rgtc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_rgtc.h deleted file mode 100644 index bb1fff7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_rgtc.h +++ /dev/null @@ -1,128 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 Red Hat Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - -#ifndef U_FORMAT_RGTC_H_ -#define U_FORMAT_RGTC_H_ - -#include "../../../include/c99_compat.h" - -void -util_format_rgtc1_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_rgtc1_unorm_unpack_r_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - - -void -util_format_rgtc1_snorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_rgtc1_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_snorm_unpack_r_8snorm(int8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc1_snorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - -void -util_format_rgtc2_unorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_rgtc2_unorm_unpack_rg_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rxtc2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height, unsigned chan2off); - -void -util_format_rgtc2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - -void -util_format_rgtc2_snorm_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_rgtc2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_snorm_unpack_rg_8snorm(int8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_snorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rxtc2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height, unsigned chan2off); - -void -util_format_rgtc2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_rgtc2_snorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_s3tc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_s3tc.c deleted file mode 100644 index 6e4c0b6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_s3tc.c +++ /dev/null @@ -1,683 +0,0 @@ -/************************************************************************** - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * Copyright (c) 2008 VMware, Inc. - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - -#include "u_format.h" -#include "u_format_s3tc.h" -#include "../format_srgb.h" -#include "../u_math.h" - -#include "texcompress_s3tc_tmp.h" - -util_format_dxtn_fetch_t util_format_dxt1_rgb_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgb_dxt1; -util_format_dxtn_fetch_t util_format_dxt1_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt1; -util_format_dxtn_fetch_t util_format_dxt3_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt3; -util_format_dxtn_fetch_t util_format_dxt5_rgba_fetch = (util_format_dxtn_fetch_t)fetch_2d_texel_rgba_dxt5; - -util_format_dxtn_pack_t util_format_dxtn_pack = (util_format_dxtn_pack_t)tx_compress_dxtn; - - -/* - * Pixel fetch. - */ - -void -util_format_dxt1_rgb_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - util_format_dxt1_rgb_fetch(0, src, i, j, dst); -} - -void -util_format_dxt1_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - util_format_dxt1_rgba_fetch(0, src, i, j, dst); -} - -void -util_format_dxt3_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - util_format_dxt3_rgba_fetch(0, src, i, j, dst); -} - -void -util_format_dxt5_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - util_format_dxt5_rgba_fetch(0, src, i, j, dst); -} - -void -util_format_dxt1_rgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt1_rgb_fetch(0, src, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = 1.0; -} - -void -util_format_dxt1_rgba_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt1_rgba_fetch(0, src, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = ubyte_to_float(tmp[3]); -} - -void -util_format_dxt3_rgba_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt3_rgba_fetch(0, src, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = ubyte_to_float(tmp[3]); -} - -void -util_format_dxt5_rgba_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt5_rgba_fetch(0, src, i, j, tmp); - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - dst[3] = ubyte_to_float(tmp[3]); -} - - -/* - * Block decompression. - */ - -static inline void -util_format_dxtn_rgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height, - util_format_dxtn_fetch_t fetch, - unsigned block_size, bool srgb) -{ - const unsigned bw = 4, bh = 4, comps = 4; - unsigned x, y, i, j; - for(y = 0; y < height; y += bh) { - const uint8_t *src = src_row; - const unsigned h = MIN2(height - y, bh); - for(x = 0; x < width; x += bw) { - const unsigned w = MIN2(width - x, bw); - for(j = 0; j < h; ++j) { - for(i = 0; i < w; ++i) { - uint8_t *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*comps; - fetch(0, src, i, j, dst); - if (srgb) { - dst[0] = util_format_srgb_to_linear_8unorm(dst[0]); - dst[1] = util_format_srgb_to_linear_8unorm(dst[1]); - dst[2] = util_format_srgb_to_linear_8unorm(dst[2]); - } - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_dxt1_rgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgb_fetch, - 8, false); -} - -void -util_format_dxt1_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgba_fetch, - 8, false); -} - -void -util_format_dxt3_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt3_rgba_fetch, - 16, false); -} - -void -util_format_dxt5_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt5_rgba_fetch, - 16, false); -} - -static inline void -util_format_dxtn_rgb_unpack_rgba_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height, - util_format_dxtn_fetch_t fetch, - unsigned block_size, bool srgb) -{ - unsigned x, y, i, j; - for(y = 0; y < height; y += 4) { - const uint8_t *src = src_row; - for(x = 0; x < width; x += 4) { - for(j = 0; j < 4; ++j) { - for(i = 0; i < 4; ++i) { - float *dst = dst_row + (y + j)*dst_stride/sizeof(*dst_row) + (x + i)*4; - uint8_t tmp[4]; - fetch(0, src, i, j, tmp); - if (srgb) { - dst[0] = util_format_srgb_8unorm_to_linear_float(tmp[0]); - dst[1] = util_format_srgb_8unorm_to_linear_float(tmp[1]); - dst[2] = util_format_srgb_8unorm_to_linear_float(tmp[2]); - } - else { - dst[0] = ubyte_to_float(tmp[0]); - dst[1] = ubyte_to_float(tmp[1]); - dst[2] = ubyte_to_float(tmp[2]); - } - dst[3] = ubyte_to_float(tmp[3]); - } - } - src += block_size; - } - src_row += src_stride; - } -} - -void -util_format_dxt1_rgb_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgb_fetch, - 8, false); -} - -void -util_format_dxt1_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgba_fetch, - 8, false); -} - -void -util_format_dxt3_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt3_rgba_fetch, - 16, false); -} - -void -util_format_dxt5_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt5_rgba_fetch, - 16, false); -} - - -/* - * Block compression. - */ - -static inline void -util_format_dxtn_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height, - enum util_format_dxtn format, - unsigned block_size, bool srgb) -{ - const unsigned bw = 4, bh = 4, comps = 4; - unsigned x, y, i, j, k; - for(y = 0; y < height; y += bh) { - uint8_t *dst = dst_row; - for(x = 0; x < width; x += bw) { - uint8_t tmp[4][4][4]; /* [bh][bw][comps] */ - for(j = 0; j < bh; ++j) { - for(i = 0; i < bw; ++i) { - uint8_t src_tmp; - for(k = 0; k < 3; ++k) { - src_tmp = src[(y + j)*src_stride/sizeof(*src) + (x+i)*comps + k]; - if (srgb) { - tmp[j][i][k] = util_format_linear_to_srgb_8unorm(src_tmp); - } - else { - tmp[j][i][k] = src_tmp; - } - } - /* for sake of simplicity there's an unneeded 4th component for dxt1_rgb */ - tmp[j][i][3] = src[(y + j)*src_stride/sizeof(*src) + (x+i)*comps + 3]; - } - } - /* even for dxt1_rgb have 4 src comps */ - util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], format, dst, 0); - dst += block_size; - } - dst_row += dst_stride / sizeof(*dst_row); - } - -} - -void -util_format_dxt1_rgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT1_RGB, - 8, false); -} - -void -util_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT1_RGBA, - 8, false); -} - -void -util_format_dxt3_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT3_RGBA, - 16, false); -} - -void -util_format_dxt5_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT5_RGBA, - 16, false); -} - -static inline void -util_format_dxtn_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src, unsigned src_stride, - unsigned width, unsigned height, - enum util_format_dxtn format, - unsigned block_size, bool srgb) -{ - unsigned x, y, i, j, k; - for(y = 0; y < height; y += 4) { - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 4) { - uint8_t tmp[4][4][4]; - for(j = 0; j < 4; ++j) { - for(i = 0; i < 4; ++i) { - float src_tmp; - for(k = 0; k < 3; ++k) { - src_tmp = src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + k]; - if (srgb) { - tmp[j][i][k] = util_format_linear_float_to_srgb_8unorm(src_tmp); - } - else { - tmp[j][i][k] = float_to_ubyte(src_tmp); - } - } - /* for sake of simplicity there's an unneeded 4th component for dxt1_rgb */ - src_tmp = src[(y + j)*src_stride/sizeof(*src) + (x+i)*4 + 3]; - tmp[j][i][3] = float_to_ubyte(src_tmp); - } - } - util_format_dxtn_pack(4, 4, 4, &tmp[0][0][0], format, dst, 0); - dst += block_size; - } - dst_row += 4*dst_stride/sizeof(*dst_row); - } -} - -void -util_format_dxt1_rgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT1_RGB, - 8, false); -} - -void -util_format_dxt1_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT1_RGBA, - 8, false); -} - -void -util_format_dxt3_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT3_RGBA, - 16, false); -} - -void -util_format_dxt5_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *src, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src, src_stride, - width, height, UTIL_FORMAT_DXT5_RGBA, - 16, false); -} - - -/* - * SRGB variants. - */ - -void -util_format_dxt1_srgb_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - uint8_t tmp[4]; - util_format_dxt1_rgb_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_to_linear_8unorm(tmp[0]); - dst[1] = util_format_srgb_to_linear_8unorm(tmp[1]); - dst[2] = util_format_srgb_to_linear_8unorm(tmp[2]); - dst[3] = 255; -} - -void -util_format_dxt1_srgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - uint8_t tmp[4]; - util_format_dxt1_rgba_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_to_linear_8unorm(tmp[0]); - dst[1] = util_format_srgb_to_linear_8unorm(tmp[1]); - dst[2] = util_format_srgb_to_linear_8unorm(tmp[2]); - dst[3] = tmp[3]; -} - -void -util_format_dxt3_srgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - uint8_t tmp[4]; - util_format_dxt3_rgba_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_to_linear_8unorm(tmp[0]); - dst[1] = util_format_srgb_to_linear_8unorm(tmp[1]); - dst[2] = util_format_srgb_to_linear_8unorm(tmp[2]); - dst[3] = tmp[3]; -} - -void -util_format_dxt5_srgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - uint8_t tmp[4]; - util_format_dxt5_rgba_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_to_linear_8unorm(tmp[0]); - dst[1] = util_format_srgb_to_linear_8unorm(tmp[1]); - dst[2] = util_format_srgb_to_linear_8unorm(tmp[2]); - dst[3] = tmp[3]; -} - -void -util_format_dxt1_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt1_rgb_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_8unorm_to_linear_float(tmp[0]); - dst[1] = util_format_srgb_8unorm_to_linear_float(tmp[1]); - dst[2] = util_format_srgb_8unorm_to_linear_float(tmp[2]); - dst[3] = 1.0f; -} - -void -util_format_dxt1_srgba_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt1_rgba_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_8unorm_to_linear_float(tmp[0]); - dst[1] = util_format_srgb_8unorm_to_linear_float(tmp[1]); - dst[2] = util_format_srgb_8unorm_to_linear_float(tmp[2]); - dst[3] = ubyte_to_float(tmp[3]); -} - -void -util_format_dxt3_srgba_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt3_rgba_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_8unorm_to_linear_float(tmp[0]); - dst[1] = util_format_srgb_8unorm_to_linear_float(tmp[1]); - dst[2] = util_format_srgb_8unorm_to_linear_float(tmp[2]); - dst[3] = ubyte_to_float(tmp[3]); -} - -void -util_format_dxt5_srgba_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, unsigned i, unsigned j) -{ - float *dst = in_dst; - uint8_t tmp[4]; - util_format_dxt5_rgba_fetch(0, src, i, j, tmp); - dst[0] = util_format_srgb_8unorm_to_linear_float(tmp[0]); - dst[1] = util_format_srgb_8unorm_to_linear_float(tmp[1]); - dst[2] = util_format_srgb_8unorm_to_linear_float(tmp[2]); - dst[3] = ubyte_to_float(tmp[3]); -} - -void -util_format_dxt1_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgb_fetch, - 8, true); -} - -void -util_format_dxt1_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgba_fetch, - 8, true); -} - -void -util_format_dxt3_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt3_rgba_fetch, - 16, true); -} - -void -util_format_dxt5_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_8unorm(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt5_rgba_fetch, - 16, true); -} - -void -util_format_dxt1_srgb_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgb_fetch, - 8, true); -} - -void -util_format_dxt1_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt1_rgba_fetch, - 8, true); -} - -void -util_format_dxt3_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt3_rgba_fetch, - 16, true); -} - -void -util_format_dxt5_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_rgb_unpack_rgba_float(dst_row, dst_stride, - src_row, src_stride, - width, height, - util_format_dxt5_rgba_fetch, - 16, true); -} - -void -util_format_dxt1_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT1_RGB, - 8, true); -} - -void -util_format_dxt1_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT1_RGBA, - 8, true); -} - -void -util_format_dxt3_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT3_RGBA, - 16, true); -} - -void -util_format_dxt5_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_8unorm(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT5_RGBA, - 16, true); -} - -void -util_format_dxt1_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT1_RGB, - 8, true); -} - -void -util_format_dxt1_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT1_RGBA, - 8, true); -} - -void -util_format_dxt3_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT3_RGBA, - 16, true); -} - -void -util_format_dxt5_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_dxtn_pack_rgba_float(dst_row, dst_stride, src_row, src_stride, - width, height, UTIL_FORMAT_DXT5_RGBA, - 16, true); -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_s3tc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_s3tc.h deleted file mode 100644 index 50b6c1a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_s3tc.h +++ /dev/null @@ -1,220 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#ifndef U_FORMAT_S3TC_H_ -#define U_FORMAT_S3TC_H_ - - -#include "../../gallium/include/pipe/p_compiler.h" - -#include "../../../include/c99_compat.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum util_format_dxtn { - UTIL_FORMAT_DXT1_RGB = 0x83F0, - UTIL_FORMAT_DXT1_RGBA = 0x83F1, - UTIL_FORMAT_DXT3_RGBA = 0x83F2, - UTIL_FORMAT_DXT5_RGBA = 0x83F3 -}; - - -typedef void -(*util_format_dxtn_fetch_t)( int src_stride, - const uint8_t *src, - int col, int row, - uint8_t *dst ); - -typedef void -(*util_format_dxtn_pack_t)( int src_comps, - int width, int height, - const uint8_t *src, - enum util_format_dxtn dst_format, - uint8_t *dst, - int dst_stride); - -extern util_format_dxtn_fetch_t util_format_dxt1_rgb_fetch; -extern util_format_dxtn_fetch_t util_format_dxt1_rgba_fetch; -extern util_format_dxtn_fetch_t util_format_dxt3_rgba_fetch; -extern util_format_dxtn_fetch_t util_format_dxt5_rgba_fetch; - -extern util_format_dxtn_pack_t util_format_dxtn_pack; - - -void -util_format_dxt1_rgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgb_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt1_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt3_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt5_rgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_rgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_rgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt1_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgb_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt1_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt3_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_srgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt5_srgba_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_srgba_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_srgba_fetch_rgba_8unorm(uint8_t *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - - -void -util_format_dxt1_rgb_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgb_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt1_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_rgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt3_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_rgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt5_rgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_rgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_rgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt1_srgb_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgb_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt1_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt1_srgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt3_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt3_srgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -void -util_format_dxt5_srgba_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_srgba_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_dxt5_srgba_fetch_rgba(void *restrict dst, const uint8_t *restrict src, unsigned i, unsigned j); - -#ifdef __cplusplus -} -#endif - -#endif /* U_FORMAT_S3TC_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_table.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_table.c deleted file mode 100644 index c5a3b99..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_table.c +++ /dev/null @@ -1,54118 +0,0 @@ -/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */ - -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#include "u_format.h" -#include "u_format_bptc.h" -#include "u_format_fxt1.h" -#include "u_format_s3tc.h" -#include "u_format_rgtc.h" -#include "u_format_latc.h" -#include "u_format_etc.h" - - -#include "../../gallium/include/pipe/p_compiler.h" -#include "../u_math.h" -#include "../half_float.h" -#include "u_format.h" -#include "u_format_other.h" -#include "../format_srgb.h" -#include "format_utils.h" -#include "u_format_yuv.h" -#include "u_format_zs.h" -#include "u_format_pack.h" - -void -util_format_none_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_none_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)CLAMP(src[0], 0.0f, 255.0f); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_none_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_none_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_none_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[2])) << 24; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[2])) & 0xff; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_b8g8r8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[2]) << 24; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)((src[0]) & 0xff) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[2]) & 0xff; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (uint32_t)((src[0]) & 0xff) << 16; - value |= (uint32_t)(src[3]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[2])) << 24; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[2])) & 0xff; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8x8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[2]) << 24; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)((src[0]) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[2]) & 0xff; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (uint32_t)((src[0]) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8x8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[2], 8, 8)) << 24) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[2], 255)) << 24; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)MIN2(src[0], 255)) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)MIN2(src[2], 255)) & 0xff; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)MIN2(src[0], 255)) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8x8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[2], 0, 255)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0, 255)) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[2], 0, 255)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0, 255)) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[2], -128, 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8x8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[2], 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (float_to_ubyte(src[2])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[3])) & 0xff; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[2])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_a8r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[3]) << 24; - value |= (uint32_t)((src[0]) & 0xff) << 16; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (src[2]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[3]) & 0xff; - value |= (uint32_t)((src[0]) & 0xff) << 8; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)(src[2]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif -} - -void -util_format_a8r8g8b8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 8)) << 24) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[3], 8, 8)) & 0xff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[2], 8, 8)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[3], -128, 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[2], -128, 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_a8r8g8b8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[3], 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[2], 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8r8g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (float_to_ubyte(src[2])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((float_to_ubyte(src[0])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[2])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8r8g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((src[0]) & 0xff) << 16; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (src[2]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((src[0]) & 0xff) << 8; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)(src[2]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8r8g8b8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8r8g8b8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8r8g8b8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[2], 8, 8)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8r8g8b8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[2], -128, 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8r8g8b8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[2], 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (float_to_ubyte(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[3])) & 0xff; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[0])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_a8b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[3]) << 24; - value |= (uint32_t)((src[2]) & 0xff) << 16; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (src[0]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[3]) & 0xff; - value |= (uint32_t)((src[2]) & 0xff) << 8; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)(src[0]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8b8g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (float_to_ubyte(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[0])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8b8g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((src[2]) & 0xff) << 16; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (src[0]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((src[2]) & 0xff) << 8; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)(src[0]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[0])) << 24; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[0])) & 0xff; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8x8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[0]) << 24; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)((src[2]) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[0]) & 0xff; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (uint32_t)((src[2]) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g5b5a1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g5b5a1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) << 15; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g5b5a1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif -} - -void -util_format_r5g5b5a1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g5b5a1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 1)) << 15; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 10; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g5b5x1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g5b5x1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g5b5x1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r5g5b5x1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g5b5x1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 10; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g5r5x1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g5r5x1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g5r5x1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b5g5r5x1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g5r5x1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 10; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g5r5a1_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g5r5a1_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) << 15; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 10; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g5r5a1_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif -} - -void -util_format_b5g5r5a1_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g5r5a1_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 1)) << 15; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 5; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 10; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x1b5g5r5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_x1b5g5r5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) << 11; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x1b5g5r5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x1b5g5r5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_x1b5g5r5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 5)) << 11; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 1; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 5)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1r5g5b5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a1r5g5b5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) << 11; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) & 0x1; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1r5g5b5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif -} - -void -util_format_a1r5g5b5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a1r5g5b5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 5)) << 11; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 1; - value |= (_mesa_unorm_to_unorm(src[3], 8, 1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[3], 8, 1)) & 0x1; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 1; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 5)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x1r5g5b5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_x1r5g5b5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) << 11; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x1r5g5b5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x1r5g5b5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_x1r5g5b5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 5)) << 11; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f) << 1; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 5)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1b5g5r5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a1b5g5r5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) << 11; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x1)) & 0x1; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x1f)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1b5g5r5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x1f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif -} - -void -util_format_a1b5g5r5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 1, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a1b5g5r5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 5)) << 11; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 1; - value |= (_mesa_unorm_to_unorm(src[3], 8, 1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[3], 8, 1)) & 0x1; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f) << 1; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 5)) & 0x1f) << 6; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 5)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4g4b4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r4g4b4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 12; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4g4b4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif -} - -void -util_format_r4g4b4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r4g4b4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 12; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf) << 8; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf) << 8; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4g4b4x4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r4g4b4x4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4g4b4x4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r4g4b4x4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r4g4b4x4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf) << 8; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b4g4r4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b4g4r4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 12; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b4g4r4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif -} - -void -util_format_b4g4r4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b4g4r4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 12; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf) << 8; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf) << 8; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b4g4r4x4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b4g4r4x4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b4g4r4x4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b4g4r4x4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b4g4r4x4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf) << 8; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 4; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4r4g4b4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a4r4g4b4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) << 12; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4r4g4b4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif -} - -void -util_format_a4r4g4b4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = value >> 12; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a4r4g4b4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 4)) << 12; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 8; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf) << 4; - value |= (_mesa_unorm_to_unorm(src[3], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[3], 8, 4)) & 0xf; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf) << 4; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 8; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 4)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4b4g4r4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a4b4g4r4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) << 12; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xf)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xf)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4b4g4r4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = value >> 12; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif -} - -void -util_format_a4b4g4r4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = value >> 12; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a4b4g4r4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 4)) << 12; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 8; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf) << 4; - value |= (_mesa_unorm_to_unorm(src[3], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[3], 8, 4)) & 0xf; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 4)) & 0xf) << 4; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 4)) & 0xf) << 8; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 4)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g6b5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g6b5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) << 11; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3f)) & 0x3f) << 5; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) & 0x1f; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3f)) & 0x3f) << 5; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g6b5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r5g6b5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 6, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 6, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g6b5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 5)) << 11; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 6)) & 0x3f) << 5; - value |= (_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 5)) & 0x1f; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 6)) & 0x3f) << 5; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 5)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g6r5_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g6r5_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) << 11; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3f)) & 0x3f) << 5; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x1f)) & 0x1f; - value |= (uint32_t)(((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3f)) & 0x3f) << 5; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x1f)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g6r5_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = (float)(r * (1.0f/0x1f)); /* r */ - dst[1] = (float)(g * (1.0f/0x3f)); /* g */ - dst[2] = (float)(b * (1.0f/0x1f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b5g6r5_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 6, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = _mesa_unorm_to_unorm(r, 5, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 6, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 5, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g6r5_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 5)) << 11; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 6)) & 0x3f) << 5; - value |= (_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 5)) & 0x1f; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 6)) & 0x3f) << 5; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 5)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) << 30; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= ((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif -} - -void -util_format_r10g10b10a2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 2)) << 30; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff) << 20; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff) << 20; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 2)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10x2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= ((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r10g10b10x2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10x2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff) << 20; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff) << 20; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) << 30; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= ((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif -} - -void -util_format_b10g10r10a2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 2)) << 30; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff) << 20; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff) << 20; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 2)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2r10g10b10_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = value >> 22; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a2r10g10b10_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) << 22; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 12; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 2; - value |= ((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) & 0x3; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 2; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 12; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2r10g10b10_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = value >> 22; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif -} - -void -util_format_a2r10g10b10_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = value >> 22; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a2r10g10b10_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 10)) << 22; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 12; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff) << 2; - value |= (_mesa_unorm_to_unorm(src[3], 8, 2)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[3], 8, 2)) & 0x3; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff) << 2; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 12; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 10)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2b10g10r10_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = value >> 22; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a2b10g10r10_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) << 22; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 12; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 2; - value |= ((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) & 0x3; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 2; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 12; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2b10g10r10_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = value >> 22; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif -} - -void -util_format_a2b10g10r10_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = value >> 22; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a2b10g10r10_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 10)) << 22; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 12; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff) << 2; - value |= (_mesa_unorm_to_unorm(src[3], 8, 2)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[3], 8, 2)) & 0x3; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff) << 2; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 12; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 10)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r3g3b2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = value >> 6; - uint8_t g = (value >> 3) & 0x7; - uint8_t r = (value) & 0x7; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0x7; - uint8_t g = (value >> 3) & 0x7; - uint8_t b = value >> 6; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_r3g3b2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3)) << 6; - value |= (uint32_t)(((uint8_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x7)) & 0x7) << 3; - value |= ((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x7)) & 0x7; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x7)) & 0x7; - value |= (uint32_t)(((uint8_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x7)) & 0x7) << 3; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3)) << 6; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r3g3b2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = value >> 6; - uint8_t g = (value >> 3) & 0x7; - uint8_t r = (value) & 0x7; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0x7; - uint8_t g = (value >> 3) & 0x7; - uint8_t b = value >> 6; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r3g3b2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = value >> 6; - uint8_t g = (value >> 3) & 0x7; - uint8_t r = (value) & 0x7; - dst[0] = _mesa_unorm_to_unorm(r, 3, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 3, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 2, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0x7; - uint8_t g = (value >> 3) & 0x7; - uint8_t b = value >> 6; - dst[0] = _mesa_unorm_to_unorm(r, 3, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 3, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 2, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_r3g3b2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 2)) << 6; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 3)) & 0x7) << 3; - value |= (_mesa_unorm_to_unorm(src[0], 8, 3)) & 0x7; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 3)) & 0x7; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 3)) & 0x7) << 3; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 2)) << 6; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b2g3r3_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 5; - uint8_t g = (value >> 2) & 0x7; - uint8_t b = (value) & 0x3; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = (value) & 0x3; - uint8_t g = (value >> 2) & 0x7; - uint8_t r = value >> 5; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_b2g3r3_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x7)) << 5; - value |= (uint32_t)(((uint8_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x7)) & 0x7) << 2; - value |= ((uint8_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3)) & 0x3; - value |= (uint32_t)(((uint8_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x7)) & 0x7) << 2; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x7)) << 5; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b2g3r3_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 5; - uint8_t g = (value >> 2) & 0x7; - uint8_t b = (value) & 0x3; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = (value) & 0x3; - uint8_t g = (value >> 2) & 0x7; - uint8_t r = value >> 5; - dst[0] = (float)(r * (1.0f/0x7)); /* r */ - dst[1] = (float)(g * (1.0f/0x7)); /* g */ - dst[2] = (float)(b * (1.0f/0x3)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b2g3r3_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 5; - uint8_t g = (value >> 2) & 0x7; - uint8_t b = (value) & 0x3; - dst[0] = _mesa_unorm_to_unorm(r, 3, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 3, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 2, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = (value) & 0x3; - uint8_t g = (value >> 2) & 0x7; - uint8_t r = value >> 5; - dst[0] = _mesa_unorm_to_unorm(r, 3, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 3, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 2, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_b2g3r3_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 3)) << 5; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 3)) & 0x7) << 2; - value |= (_mesa_unorm_to_unorm(src[2], 8, 2)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 2)) & 0x3; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 3)) & 0x7) << 2; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 3)) << 5; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = ubyte_to_float(rgb); /* r */ - dst[1] = ubyte_to_float(rgb); /* g */ - dst[2] = ubyte_to_float(rgb); /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= float_to_ubyte(src[0]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = ubyte_to_float(rgb); /* r */ - dst[1] = ubyte_to_float(rgb); /* g */ - dst[2] = ubyte_to_float(rgb); /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = rgb; /* r */ - dst[1] = rgb; /* g */ - dst[2] = rgb; /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= src[0]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= float_to_ubyte(src[3]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -} - -void -util_format_a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= src[3]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgba = value; - dst[0] = ubyte_to_float(rgba); /* r */ - dst[1] = ubyte_to_float(rgba); /* g */ - dst[2] = ubyte_to_float(rgba); /* b */ - dst[3] = ubyte_to_float(rgba); /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_i8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= float_to_ubyte(src[0]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgba = value; - dst[0] = ubyte_to_float(rgba); /* r */ - dst[1] = ubyte_to_float(rgba); /* g */ - dst[2] = ubyte_to_float(rgba); /* b */ - dst[3] = ubyte_to_float(rgba); /* a */ -} - -void -util_format_i8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgba = value; - dst[0] = rgba; /* r */ - dst[1] = rgba; /* g */ - dst[2] = rgba; /* b */ - dst[3] = rgba; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_i8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= src[0]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value >> 4; - uint8_t rgb = (value) & 0xf; - dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = (value) & 0xf; - uint8_t a = value >> 4; - dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_l4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 4; - value |= ((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 4; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value >> 4; - uint8_t rgb = (value) & 0xf; - dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = (value) & 0xf; - uint8_t a = value >> 4; - dst[0] = (float)(rgb * (1.0f/0xf)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xf)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xf)); /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif -} - -void -util_format_l4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value >> 4; - uint8_t rgb = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(rgb, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(rgb, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(rgb, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = (value) & 0xf; - uint8_t a = value >> 4; - dst[0] = _mesa_unorm_to_unorm(rgb, 4, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(rgb, 4, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(rgb, 4, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_l4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 4; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 4; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = ubyte_to_float(rgb); /* r */ - dst[1] = ubyte_to_float(rgb); /* g */ - dst[2] = ubyte_to_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = ubyte_to_float(rgb); /* r */ - dst[1] = ubyte_to_float(rgb); /* g */ - dst[2] = ubyte_to_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[0])) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (float_to_ubyte(src[0])) & 0xff; - value |= (uint32_t)(float_to_ubyte(src[3])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = ubyte_to_float(rgb); /* r */ - dst[1] = ubyte_to_float(rgb); /* g */ - dst[2] = ubyte_to_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = ubyte_to_float(rgb); /* r */ - dst[1] = ubyte_to_float(rgb); /* g */ - dst[2] = ubyte_to_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_l8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = rgb; /* r */ - dst[1] = rgb; /* g */ - dst[2] = rgb; /* b */ - dst[3] = a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = rgb; /* r */ - dst[1] = rgb; /* g */ - dst[2] = rgb; /* b */ - dst[3] = a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(src[0]) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (src[0]) & 0xff; - value |= (uint32_t)(src[3]) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value; - dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value; - dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value; - dst[0] = _mesa_unorm_to_unorm(rgb, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(rgb, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(rgb, 16, 8); /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= _mesa_unorm_to_unorm(src[0], 8, 16); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -} - -void -util_format_a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 16, 8); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= _mesa_unorm_to_unorm(src[3], 8, 16); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgba = value; - dst[0] = (float)(rgba * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgba * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgba * (1.0f/0xffff)); /* b */ - dst[3] = (float)(rgba * (1.0f/0xffff)); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgba = value; - dst[0] = (float)(rgba * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgba * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgba * (1.0f/0xffff)); /* b */ - dst[3] = (float)(rgba * (1.0f/0xffff)); /* a */ -} - -void -util_format_i16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgba = value; - dst[0] = _mesa_unorm_to_unorm(rgba, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(rgba, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(rgba, 16, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(rgba, 16, 8); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= _mesa_unorm_to_unorm(src[0], 8, 16); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) << 16; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xffff)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) & 0xffff; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xffff)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (float)(rgb * (1.0f/0xffff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0xffff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0xffff)); /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#endif -} - -void -util_format_l16a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = _mesa_unorm_to_unorm(rgb, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(rgb, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(rgb, 16, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 16, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = _mesa_unorm_to_unorm(rgb, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(rgb, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(rgb, 16, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 16, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 16)) << 16; - value |= (_mesa_unorm_to_unorm(src[3], 8, 16)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 16)) & 0xffff; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 16)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t a = (int8_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t a = (int8_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -} - -void -util_format_a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t a = (int8_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)(_mesa_unorm_to_snorm(src[3], 8, 8)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgb = (int8_t)(value) ; - dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgb = (int8_t)(value) ; - dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgb = (int8_t)(value) ; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 8) ; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (float)(rgb * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif -} - -void -util_format_l8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 8) ; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[3], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 8)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgba = (int8_t)(value) ; - dst[0] = (float)(rgba * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgba * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgba * (1.0f/0x7f)); /* b */ - dst[3] = (float)(rgba * (1.0f/0x7f)); /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_i8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgba = (int8_t)(value) ; - dst[0] = (float)(rgba * (1.0f/0x7f)); /* r */ - dst[1] = (float)(rgba * (1.0f/0x7f)); /* g */ - dst[2] = (float)(rgba * (1.0f/0x7f)); /* b */ - dst[3] = (float)(rgba * (1.0f/0x7f)); /* a */ -} - -void -util_format_i8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgba = (int8_t)(value) ; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 8, 8); /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_i8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t a = (int16_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7fff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t a = (int16_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -} - -void -util_format_a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t a = (int16_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 16, 8); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)(_mesa_unorm_to_snorm(src[3], 8, 16)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = (int16_t)(value) ; - dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = (int16_t)(value) ; - dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = (int16_t)(value) ; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)(_mesa_unorm_to_snorm(src[0], 8, 16)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) << 16) ; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7fff)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (float)(rgb * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgb * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgb * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#endif -} - -void -util_format_l16a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 16, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgb, 0), 16, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 16, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 16)) << 16) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[3], 8, 16)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 16)) & 0xffff) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 16)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgba = (int16_t)(value) ; - dst[0] = (float)(rgba * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgba * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgba * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(rgba * (1.0f/0x7fff)); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgba = (int16_t)(value) ; - dst[0] = (float)(rgba * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(rgba * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(rgba * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(rgba * (1.0f/0x7fff)); /* a */ -} - -void -util_format_i16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgba = (int16_t)(value) ; - dst[0] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 16, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(rgba, 0), 16, 8); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)(_mesa_unorm_to_snorm(src[0], 8, 16)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_a16_float { - uint16_t a; -}; - -void -util_format_a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_a16_float pixel = {0}; - pixel.a = _mesa_float_to_float16_rtz(src[3]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -} - -void -util_format_a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.a)); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_a16_float pixel = {0}; - pixel.a = _mesa_float_to_float16_rtz((float)(src[3] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_l16_float { - uint16_t rgb; -}; - -void -util_format_l16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_l16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgb); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgb); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgb); /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_l16_float pixel = {0}; - pixel.rgb = _mesa_float_to_float16_rtz(src[0]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_l16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgb); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgb); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgb); /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_l16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_l16_float pixel = {0}; - pixel.rgb = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_l16a16_float { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t rgb; - uint16_t a; -#else - uint16_t rgb; - uint16_t a; -#endif -}; - -void -util_format_l16a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgb); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgb); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgb); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#else - struct util_format_l16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgb); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgb); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgb); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l16a16_float pixel = {0}; - pixel.rgb = _mesa_float_to_float16_rtz(src[0]); - pixel.a = _mesa_float_to_float16_rtz(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l16a16_float pixel = {0}; - pixel.rgb = _mesa_float_to_float16_rtz(src[0]); - pixel.a = _mesa_float_to_float16_rtz(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgb); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgb); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgb); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#else - struct util_format_l16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgb); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgb); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgb); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#endif -} - -void -util_format_l16a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.a)); /* a */ -#else - struct util_format_l16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.rgb)); /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.a)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l16a16_float pixel = {0}; - pixel.rgb = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.a = _mesa_float_to_float16_rtz((float)(src[3] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l16a16_float pixel = {0}; - pixel.rgb = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.a = _mesa_float_to_float16_rtz((float)(src[3] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_i16_float { - uint16_t rgba; -}; - -void -util_format_i16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_i16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgba); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgba); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgba); /* b */ - dst[3] = _mesa_half_to_float(pixel.rgba); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_i16_float pixel = {0}; - pixel.rgba = _mesa_float_to_float16_rtz(src[0]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_i16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.rgba); /* r */ - dst[1] = _mesa_half_to_float(pixel.rgba); /* g */ - dst[2] = _mesa_half_to_float(pixel.rgba); /* b */ - dst[3] = _mesa_half_to_float(pixel.rgba); /* a */ -} - -void -util_format_i16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_i16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.rgba)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.rgba)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.rgba)); /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.rgba)); /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_i16_float pixel = {0}; - pixel.rgba = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_a32_float { - float a; -}; - -void -util_format_a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_a32_float pixel = {0}; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -} - -void -util_format_a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = float_to_ubyte(pixel.a); /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_a32_float pixel = {0}; - pixel.a = ubyte_to_float(src[3]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_l32_float { - float rgb; -}; - -void -util_format_l32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_l32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_l32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_l32_float pixel = {0}; - pixel.rgb = src[0]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_l32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_l32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.rgb); /* r */ - dst[1] = float_to_ubyte(pixel.rgb); /* g */ - dst[2] = float_to_ubyte(pixel.rgb); /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_l32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_l32_float pixel = {0}; - pixel.rgb = ubyte_to_float(src[0]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_l32a32_float { -#if UTIL_ARCH_BIG_ENDIAN - float rgb; - float a; -#else - float rgb; - float a; -#endif -}; - -void -util_format_l32a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_l32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_l32a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_float pixel = {0}; - pixel.rgb = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l32a32_float pixel = {0}; - pixel.rgb = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_l32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_l32a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.rgb); /* r */ - dst[1] = float_to_ubyte(pixel.rgb); /* g */ - dst[2] = float_to_ubyte(pixel.rgb); /* b */ - dst[3] = float_to_ubyte(pixel.a); /* a */ -#else - struct util_format_l32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.rgb); /* r */ - dst[1] = float_to_ubyte(pixel.rgb); /* g */ - dst[2] = float_to_ubyte(pixel.rgb); /* b */ - dst[3] = float_to_ubyte(pixel.a); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_l32a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_float pixel = {0}; - pixel.rgb = ubyte_to_float(src[0]); - pixel.a = ubyte_to_float(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l32a32_float pixel = {0}; - pixel.rgb = ubyte_to_float(src[0]); - pixel.a = ubyte_to_float(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_i32_float { - float rgba; -}; - -void -util_format_i32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_i32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgba; /* r */ - dst[1] = pixel.rgba; /* g */ - dst[2] = pixel.rgba; /* b */ - dst[3] = pixel.rgba; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_i32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_i32_float pixel = {0}; - pixel.rgba = src[0]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_i32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgba; /* r */ - dst[1] = pixel.rgba; /* g */ - dst[2] = pixel.rgba; /* b */ - dst[3] = pixel.rgba; /* a */ -} - -void -util_format_i32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_i32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.rgba); /* r */ - dst[1] = float_to_ubyte(pixel.rgba); /* g */ - dst[2] = float_to_ubyte(pixel.rgba); /* b */ - dst[3] = float_to_ubyte(pixel.rgba); /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_i32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_i32_float pixel = {0}; - pixel.rgba = ubyte_to_float(src[0]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= util_format_linear_float_to_srgb_8unorm(src[0]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = util_format_srgb_to_linear_8unorm(rgb); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(rgb); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(rgb); /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= util_format_linear_to_srgb_8unorm(src[0]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= util_format_linear_float_to_srgb_8unorm(src[0]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= util_format_linear_to_srgb_8unorm(src[0]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0])) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)(float_to_ubyte(src[3])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = util_format_srgb_8unorm_to_linear_float(rgb); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(rgb); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(rgb); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_l8a8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(rgb); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(rgb); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(rgb); /* b */ - dst[3] = a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = util_format_srgb_to_linear_8unorm(rgb); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(rgb); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(rgb); /* b */ - dst[3] = a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0])) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)(src[3]) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0])) << 8; - value |= (util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[1])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0])) << 8; - value |= (util_format_linear_to_srgb_8unorm(src[1])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[1])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r8g8b8_srgb { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t r; - uint8_t g; - uint8_t b; -#else - uint8_t r; - uint8_t g; - uint8_t b; -#endif -}; - -void -util_format_r8g8b8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_srgb pixel = {0}; - pixel.r = util_format_linear_float_to_srgb_8unorm(src[0]); - pixel.g = util_format_linear_float_to_srgb_8unorm(src[1]); - pixel.b = util_format_linear_float_to_srgb_8unorm(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_srgb pixel = {0}; - pixel.r = util_format_linear_float_to_srgb_8unorm(src[0]); - pixel.g = util_format_linear_float_to_srgb_8unorm(src[1]); - pixel.b = util_format_linear_float_to_srgb_8unorm(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_to_linear_8unorm(pixel.r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(pixel.g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(pixel.b); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r8g8b8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_to_linear_8unorm(pixel.r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(pixel.g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(pixel.b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_srgb pixel = {0}; - pixel.r = util_format_linear_to_srgb_8unorm(src[0]); - pixel.g = util_format_linear_to_srgb_8unorm(src[1]); - pixel.b = util_format_linear_to_srgb_8unorm(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_srgb pixel = {0}; - pixel.r = util_format_linear_to_srgb_8unorm(src[0]); - pixel.g = util_format_linear_to_srgb_8unorm(src[1]); - pixel.b = util_format_linear_to_srgb_8unorm(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_b8g8r8_srgb { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t b; - uint8_t g; - uint8_t r; -#else - uint8_t b; - uint8_t g; - uint8_t r; -#endif -}; - -void -util_format_b8g8r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_srgb pixel = {0}; - pixel.b = util_format_linear_float_to_srgb_8unorm(src[2]); - pixel.g = util_format_linear_float_to_srgb_8unorm(src[1]); - pixel.r = util_format_linear_float_to_srgb_8unorm(src[0]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_srgb pixel = {0}; - pixel.b = util_format_linear_float_to_srgb_8unorm(src[2]); - pixel.g = util_format_linear_float_to_srgb_8unorm(src[1]); - pixel.r = util_format_linear_float_to_srgb_8unorm(src[0]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_8unorm_to_linear_float(pixel.r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(pixel.g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_to_linear_8unorm(pixel.r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(pixel.g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(pixel.b); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_b8g8r8_srgb pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = util_format_srgb_to_linear_8unorm(pixel.r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(pixel.g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(pixel.b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_srgb pixel = {0}; - pixel.b = util_format_linear_to_srgb_8unorm(src[2]); - pixel.g = util_format_linear_to_srgb_8unorm(src[1]); - pixel.r = util_format_linear_to_srgb_8unorm(src[0]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_srgb pixel = {0}; - pixel.b = util_format_linear_to_srgb_8unorm(src[2]); - pixel.g = util_format_linear_to_srgb_8unorm(src[1]); - pixel.r = util_format_linear_to_srgb_8unorm(src[0]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0])) << 24; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_r8g8b8a8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0])) << 24; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; - value |= (uint32_t)(src[3]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[3])) & 0xff; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_a8b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[3]) << 24; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[3]) & 0xff; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8b8g8r8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8b8g8r8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8b8g8r8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[2])) << 24; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_b8g8r8a8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[2])) << 24; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; - value |= (uint32_t)(src[3]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[2])) << 24; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8x8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8x8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8x8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[2])) << 24; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[3])) & 0xff; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[2])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_a8r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[3]) << 24; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[3]) & 0xff; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[2])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8r8g8b8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[2])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8r8g8b8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8r8g8b8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8r8g8b8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (util_format_linear_to_srgb_8unorm(src[2])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[0])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[2])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8sg8sb8ux8u_norm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - uint32_t b = (value >> 16) & 0xff; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8sg8sb8ux8u_norm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 16; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8sg8sb8ux8u_norm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - uint32_t b = (value >> 16) & 0xff; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8sg8sb8ux8u_norm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 16) & 0xff; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - uint32_t b = (value >> 16) & 0xff; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = b; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8sg8sb8ux8u_norm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((src[2]) & 0xff) << 16; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((src[2]) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10sg10sb10sa2u_norm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - uint32_t a = value >> 30; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10sg10sb10sa2u_norm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) << 30; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0x3)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10sg10sb10sa2u_norm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - uint32_t a = value >> 30; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x3)); /* a */ -#endif -} - -void -util_format_r10sg10sb10sa2u_norm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - uint32_t a = value >> 30; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 2, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10sg10sb10sa2u_norm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 2)) << 30; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 2)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5sg5sb6u_norm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 10; - int16_t g = ((int16_t)(value << 6) ) >> 11; - int16_t r = ((int16_t)(value << 11) ) >> 11; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0x3f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 11) ) >> 11; - int16_t g = ((int16_t)(value << 6) ) >> 11; - uint16_t b = value >> 10; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0x3f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5sg5sb6u_norm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3f)) << 10; - value |= (uint16_t)((uint32_t)(((uint16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0xf)) & 0x1f) << 5) ; - value |= (uint16_t)(((uint16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0xf)) & 0x1f) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((uint16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0xf)) & 0x1f) ; - value |= (uint16_t)((uint32_t)(((uint16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0xf)) & 0x1f) << 5) ; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3f)) << 10; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5sg5sb6u_norm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 10; - int16_t g = ((int16_t)(value << 6) ) >> 11; - int16_t r = ((int16_t)(value << 11) ) >> 11; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0x3f)); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 11) ) >> 11; - int16_t g = ((int16_t)(value << 6) ) >> 11; - uint16_t b = value >> 10; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = (float)(g * (1.0f/0xf)); /* g */ - dst[2] = (float)(b * (1.0f/0x3f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r5sg5sb6u_norm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 10; - int16_t g = ((int16_t)(value << 6) ) >> 11; - int16_t r = ((int16_t)(value << 11) ) >> 11; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 5, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 6, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 11) ) >> 11; - int16_t g = ((int16_t)(value << 6) ) >> 11; - uint16_t b = value >> 10; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 5, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 5, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 6, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5sg5sb6u_norm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 6)) << 10; - value |= (uint16_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 5)) & 0x1f) << 5) ; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[0], 8, 5)) & 0x1f) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[0], 8, 5)) & 0x1f) ; - value |= (uint16_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 5)) & 0x1f) << 5) ; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[2], 8, 6)) << 10; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z24_unorm_s8_uint_as_r8g8b8a8_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_z24_unorm_s8_uint_as_r8g8b8a8_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[0])) << 24; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[0])) & 0xff; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z24_unorm_s8_uint_as_r8g8b8a8_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_z24_unorm_s8_uint_as_r8g8b8a8_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_z24_unorm_s8_uint_as_r8g8b8a8_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[0]) << 24; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)((src[2]) & 0xff) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[0]) & 0xff; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (uint32_t)((src[2]) & 0xff) << 16; - value |= (uint32_t)(src[3]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64_float { - double r; -}; - -void -util_format_r64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 8; - dst += 4; - } -} - -void -util_format_r64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r64_float pixel = {0}; - pixel.r = (double)src[0]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_r64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround(CLAMP(pixel.r, 0.0, 1.0) * 0xff); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 8; - dst += 4; - } -} - -void -util_format_r64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r64_float pixel = {0}; - pixel.r = (double)(src[0] * (1.0f/0xff)); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64_float { -#if UTIL_ARCH_BIG_ENDIAN - double r; - double g; -#else - double r; - double g; -#endif -}; - -void -util_format_r64g64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r64g64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_float pixel = {0}; - pixel.r = (double)src[0]; - pixel.g = (double)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64_float pixel = {0}; - pixel.r = (double)src[0]; - pixel.g = (double)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r64g64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround(CLAMP(pixel.r, 0.0, 1.0) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround(CLAMP(pixel.g, 0.0, 1.0) * 0xff); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r64g64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround(CLAMP(pixel.r, 0.0, 1.0) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround(CLAMP(pixel.g, 0.0, 1.0) * 0xff); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r64g64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_float pixel = {0}; - pixel.r = (double)(src[0] * (1.0f/0xff)); - pixel.g = (double)(src[1] * (1.0f/0xff)); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64_float pixel = {0}; - pixel.r = (double)(src[0] * (1.0f/0xff)); - pixel.g = (double)(src[1] * (1.0f/0xff)); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64b64_float { -#if UTIL_ARCH_BIG_ENDIAN - double r; - double g; - double b; -#else - double r; - double g; - double b; -#endif -}; - -void -util_format_r64g64b64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64b64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 24; - dst += 4; - } -} - -void -util_format_r64g64b64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_float pixel = {0}; - pixel.r = (double)src[0]; - pixel.g = (double)src[1]; - pixel.b = (double)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64_float pixel = {0}; - pixel.r = (double)src[0]; - pixel.g = (double)src[1]; - pixel.b = (double)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 24; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64b64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64b64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r64g64b64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround(CLAMP(pixel.r, 0.0, 1.0) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround(CLAMP(pixel.g, 0.0, 1.0) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround(CLAMP(pixel.b, 0.0, 1.0) * 0xff); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r64g64b64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround(CLAMP(pixel.r, 0.0, 1.0) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround(CLAMP(pixel.g, 0.0, 1.0) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround(CLAMP(pixel.b, 0.0, 1.0) * 0xff); /* b */ - dst[3] = 255; /* a */ -#endif - src += 24; - dst += 4; - } -} - -void -util_format_r64g64b64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_float pixel = {0}; - pixel.r = (double)(src[0] * (1.0f/0xff)); - pixel.g = (double)(src[1] * (1.0f/0xff)); - pixel.b = (double)(src[2] * (1.0f/0xff)); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64_float pixel = {0}; - pixel.r = (double)(src[0] * (1.0f/0xff)); - pixel.g = (double)(src[1] * (1.0f/0xff)); - pixel.b = (double)(src[2] * (1.0f/0xff)); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 24; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64b64a64_float { -#if UTIL_ARCH_BIG_ENDIAN - double r; - double g; - double b; - double a; -#else - double r; - double g; - double b; - double a; -#endif -}; - -void -util_format_r64g64b64a64_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r64g64b64a64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif - src += 32; - dst += 4; - } -} - -void -util_format_r64g64b64a64_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_float pixel = {0}; - pixel.r = (double)src[0]; - pixel.g = (double)src[1]; - pixel.b = (double)src[2]; - pixel.a = (double)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64a64_float pixel = {0}; - pixel.r = (double)src[0]; - pixel.g = (double)src[1]; - pixel.b = (double)src[2]; - pixel.a = (double)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 32; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64b64a64_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r64g64b64a64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif -} - -void -util_format_r64g64b64a64_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround(CLAMP(pixel.r, 0.0, 1.0) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround(CLAMP(pixel.g, 0.0, 1.0) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround(CLAMP(pixel.b, 0.0, 1.0) * 0xff); /* b */ - dst[3] = (uint8_t)util_iround(CLAMP(pixel.a, 0.0, 1.0) * 0xff); /* a */ -#else - struct util_format_r64g64b64a64_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround(CLAMP(pixel.r, 0.0, 1.0) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround(CLAMP(pixel.g, 0.0, 1.0) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround(CLAMP(pixel.b, 0.0, 1.0) * 0xff); /* b */ - dst[3] = (uint8_t)util_iround(CLAMP(pixel.a, 0.0, 1.0) * 0xff); /* a */ -#endif - src += 32; - dst += 4; - } -} - -void -util_format_r64g64b64a64_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_float pixel = {0}; - pixel.r = (double)(src[0] * (1.0f/0xff)); - pixel.g = (double)(src[1] * (1.0f/0xff)); - pixel.b = (double)(src[2] * (1.0f/0xff)); - pixel.a = (double)(src[3] * (1.0f/0xff)); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64a64_float pixel = {0}; - pixel.r = (double)(src[0] * (1.0f/0xff)); - pixel.g = (double)(src[1] * (1.0f/0xff)); - pixel.b = (double)(src[2] * (1.0f/0xff)); - pixel.a = (double)(src[3] * (1.0f/0xff)); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 32; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32_float { - float r; -}; - -void -util_format_r32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r32_float pixel = {0}; - pixel.r = src[0]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_r32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_float { -#if UTIL_ARCH_BIG_ENDIAN - float r; - float g; -#else - float r; - float g; -#endif -}; - -void -util_format_r32g32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_float { -#if UTIL_ARCH_BIG_ENDIAN - float r; - float g; - float b; -#else - float r; - float g; - float b; -#endif -}; - -void -util_format_r32g32b32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = float_to_ubyte(pixel.b); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32b32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = float_to_ubyte(pixel.b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - pixel.b = ubyte_to_float(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - pixel.b = ubyte_to_float(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_float { -#if UTIL_ARCH_BIG_ENDIAN - float r; - float g; - float b; - float a; -#else - float r; - float g; - float b; - float a; -#endif -}; - -void -util_format_r32g32b32a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_r32g32b32a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = float_to_ubyte(pixel.b); /* b */ - dst[3] = float_to_ubyte(pixel.a); /* a */ -#else - struct util_format_r32g32b32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = float_to_ubyte(pixel.b); /* b */ - dst[3] = float_to_ubyte(pixel.a); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - pixel.b = ubyte_to_float(src[2]); - pixel.a = ubyte_to_float(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - pixel.b = ubyte_to_float(src[2]); - pixel.a = ubyte_to_float(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = (float)(r * (1.0/0xffffffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)(CLAMP(src[0], 0.0f, 1.0f) * (double)0xffffffff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = (float)(r * (1.0/0xffffffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = _mesa_unorm_to_unorm(r, 32, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= _mesa_unorm_to_unorm(src[0], 8, 32); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; -#else - uint32_t r; - uint32_t g; -#endif -}; - -void -util_format_r32g32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_unorm pixel = {0}; - pixel.r = (uint32_t)(CLAMP(src[0], 0.0f, 1.0f) * (double)0xffffffff); - pixel.g = (uint32_t)(CLAMP(src[1], 0.0f, 1.0f) * (double)0xffffffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_unorm pixel = {0}; - pixel.r = (uint32_t)(CLAMP(src[0], 0.0f, 1.0f) * (double)0xffffffff); - pixel.g = (uint32_t)(CLAMP(src[1], 0.0f, 1.0f) * (double)0xffffffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 32, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 32, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 32, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 32, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; - uint32_t b; -#else - uint32_t r; - uint32_t g; - uint32_t b; -#endif -}; - -void -util_format_r32g32b32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_unorm pixel = {0}; - pixel.r = (uint32_t)(CLAMP(src[0], 0.0f, 1.0f) * (double)0xffffffff); - pixel.g = (uint32_t)(CLAMP(src[1], 0.0f, 1.0f) * (double)0xffffffff); - pixel.b = (uint32_t)(CLAMP(src[2], 0.0f, 1.0f) * (double)0xffffffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_unorm pixel = {0}; - pixel.r = (uint32_t)(CLAMP(src[0], 0.0f, 1.0f) * (double)0xffffffff); - pixel.g = (uint32_t)(CLAMP(src[1], 0.0f, 1.0f) * (double)0xffffffff); - pixel.b = (uint32_t)(CLAMP(src[2], 0.0f, 1.0f) * (double)0xffffffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 32, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 32, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 32, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32b32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 32, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 32, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 32, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t a; -#else - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t a; -#endif -}; - -void -util_format_r32g32b32a32_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0xffffffff)); /* a */ -#else - struct util_format_r32g32b32a32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0xffffffff)); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_unorm pixel = {0}; - pixel.r = (uint32_t)(CLAMP(src[0], 0.0f, 1.0f) * (double)0xffffffff); - pixel.g = (uint32_t)(CLAMP(src[1], 0.0f, 1.0f) * (double)0xffffffff); - pixel.b = (uint32_t)(CLAMP(src[2], 0.0f, 1.0f) * (double)0xffffffff); - pixel.a = (uint32_t)(CLAMP(src[3], 0.0f, 1.0f) * (double)0xffffffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_unorm pixel = {0}; - pixel.r = (uint32_t)(CLAMP(src[0], 0.0f, 1.0f) * (double)0xffffffff); - pixel.g = (uint32_t)(CLAMP(src[1], 0.0f, 1.0f) * (double)0xffffffff); - pixel.b = (uint32_t)(CLAMP(src[2], 0.0f, 1.0f) * (double)0xffffffff); - pixel.a = (uint32_t)(CLAMP(src[3], 0.0f, 1.0f) * (double)0xffffffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0xffffffff)); /* a */ -#else - struct util_format_r32g32b32a32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0xffffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0xffffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0xffffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0xffffffff)); /* a */ -#endif -} - -void -util_format_r32g32b32a32_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 32, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 32, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 32, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(pixel.a, 32, 8); /* a */ -#else - struct util_format_r32g32b32a32_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 32, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 32, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 32, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(pixel.a, 32, 8); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 32); - pixel.a = _mesa_unorm_to_unorm(src[3], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 32); - pixel.a = _mesa_unorm_to_unorm(src[3], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)CLAMP(src[0], 0.0f, 4294967040.0f); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = (uint8_t)(((uint64_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_uscaled { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; -#else - uint32_t r; - uint32_t g; -#endif -}; - -void -util_format_r32g32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uscaled pixel = {0}; - pixel.r = (uint32_t)CLAMP(src[0], 0.0f, 4294967040.0f); - pixel.g = (uint32_t)CLAMP(src[1], 0.0f, 4294967040.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_uscaled pixel = {0}; - pixel.r = (uint32_t)CLAMP(src[0], 0.0f, 4294967040.0f); - pixel.g = (uint32_t)CLAMP(src[1], 0.0f, 4294967040.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uscaled pixel = {0}; - pixel.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_uscaled pixel = {0}; - pixel.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_uscaled { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; - uint32_t b; -#else - uint32_t r; - uint32_t g; - uint32_t b; -#endif -}; - -void -util_format_r32g32b32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uscaled pixel = {0}; - pixel.r = (uint32_t)CLAMP(src[0], 0.0f, 4294967040.0f); - pixel.g = (uint32_t)CLAMP(src[1], 0.0f, 4294967040.0f); - pixel.b = (uint32_t)CLAMP(src[2], 0.0f, 4294967040.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_uscaled pixel = {0}; - pixel.r = (uint32_t)CLAMP(src[0], 0.0f, 4294967040.0f); - pixel.g = (uint32_t)CLAMP(src[1], 0.0f, 4294967040.0f); - pixel.b = (uint32_t)CLAMP(src[2], 0.0f, 4294967040.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32b32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uscaled pixel = {0}; - pixel.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_uscaled pixel = {0}; - pixel.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_uscaled { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t a; -#else - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t a; -#endif -}; - -void -util_format_r32g32b32a32_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uscaled pixel = {0}; - pixel.r = (uint32_t)CLAMP(src[0], 0.0f, 4294967040.0f); - pixel.g = (uint32_t)CLAMP(src[1], 0.0f, 4294967040.0f); - pixel.b = (uint32_t)CLAMP(src[2], 0.0f, 4294967040.0f); - pixel.a = (uint32_t)CLAMP(src[3], 0.0f, 4294967040.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_uscaled pixel = {0}; - pixel.r = (uint32_t)CLAMP(src[0], 0.0f, 4294967040.0f); - pixel.g = (uint32_t)CLAMP(src[1], 0.0f, 4294967040.0f); - pixel.b = (uint32_t)CLAMP(src[2], 0.0f, 4294967040.0f); - pixel.a = (uint32_t)CLAMP(src[3], 0.0f, 4294967040.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif -} - -void -util_format_r32g32b32a32_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint64_t)MIN2(pixel.a, 1)) * 0xff / 0x1); /* a */ -#else - struct util_format_r32g32b32a32_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint64_t)MIN2(pixel.a, 1)) * 0xff / 0x1); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uscaled pixel = {0}; - pixel.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - pixel.a = (uint32_t)(((uint64_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_uscaled pixel = {0}; - pixel.r = (uint32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - pixel.a = (uint32_t)(((uint64_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = (float)(r * (1.0/0x7fffffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)((int32_t)(CLAMP(src[0], -1.0f, 1.0f) * (double)0x7fffffff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = (float)(r * (1.0/0x7fffffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 32, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 32)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; -#else - int32_t r; - int32_t g; -#endif -}; - -void -util_format_r32g32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_snorm pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.g = (int32_t)(CLAMP(src[1], -1.0f, 1.0f) * (double)0x7fffffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_snorm pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.g = (int32_t)(CLAMP(src[1], -1.0f, 1.0f) * (double)0x7fffffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 32, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 32, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 32, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 32, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; -#else - int32_t r; - int32_t g; - int32_t b; -#endif -}; - -void -util_format_r32g32b32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_snorm pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.g = (int32_t)(CLAMP(src[1], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.b = (int32_t)(CLAMP(src[2], -1.0f, 1.0f) * (double)0x7fffffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_snorm pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.g = (int32_t)(CLAMP(src[1], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.b = (int32_t)(CLAMP(src[2], -1.0f, 1.0f) * (double)0x7fffffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 32, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 32, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 32, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32b32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 32, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 32, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 32, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#else - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#endif -}; - -void -util_format_r32g32b32a32_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x7fffffff)); /* a */ -#else - struct util_format_r32g32b32a32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x7fffffff)); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_snorm pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.g = (int32_t)(CLAMP(src[1], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.b = (int32_t)(CLAMP(src[2], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.a = (int32_t)(CLAMP(src[3], -1.0f, 1.0f) * (double)0x7fffffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_snorm pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.g = (int32_t)(CLAMP(src[1], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.b = (int32_t)(CLAMP(src[2], -1.0f, 1.0f) * (double)0x7fffffff); - pixel.a = (int32_t)(CLAMP(src[3], -1.0f, 1.0f) * (double)0x7fffffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x7fffffff)); /* a */ -#else - struct util_format_r32g32b32a32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x7fffffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x7fffffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x7fffffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x7fffffff)); /* a */ -#endif -} - -void -util_format_r32g32b32a32_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 32, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 32, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 32, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(pixel.a, 0), 32, 8); /* a */ -#else - struct util_format_r32g32b32a32_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 32, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 32, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 32, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(pixel.a, 0), 32, 8); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 32); - pixel.a = _mesa_unorm_to_snorm(src[3], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 32); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 32); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 32); - pixel.a = _mesa_unorm_to_snorm(src[3], 8, 32); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)((int32_t)CLAMP(src[0], -2147483648.0f, 2147483520.0f)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = (uint8_t)(((uint64_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)((int32_t)(((uint64_t)src[0]) * 0x1 / 0xff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_sscaled { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; -#else - int32_t r; - int32_t g; -#endif -}; - -void -util_format_r32g32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sscaled pixel = {0}; - pixel.r = (int32_t)CLAMP(src[0], -2147483648.0f, 2147483520.0f); - pixel.g = (int32_t)CLAMP(src[1], -2147483648.0f, 2147483520.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_sscaled pixel = {0}; - pixel.r = (int32_t)CLAMP(src[0], -2147483648.0f, 2147483520.0f); - pixel.g = (int32_t)CLAMP(src[1], -2147483648.0f, 2147483520.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sscaled pixel = {0}; - pixel.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_sscaled pixel = {0}; - pixel.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_sscaled { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; -#else - int32_t r; - int32_t g; - int32_t b; -#endif -}; - -void -util_format_r32g32b32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sscaled pixel = {0}; - pixel.r = (int32_t)CLAMP(src[0], -2147483648.0f, 2147483520.0f); - pixel.g = (int32_t)CLAMP(src[1], -2147483648.0f, 2147483520.0f); - pixel.b = (int32_t)CLAMP(src[2], -2147483648.0f, 2147483520.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_sscaled pixel = {0}; - pixel.r = (int32_t)CLAMP(src[0], -2147483648.0f, 2147483520.0f); - pixel.g = (int32_t)CLAMP(src[1], -2147483648.0f, 2147483520.0f); - pixel.b = (int32_t)CLAMP(src[2], -2147483648.0f, 2147483520.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32b32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sscaled pixel = {0}; - pixel.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_sscaled pixel = {0}; - pixel.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_sscaled { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#else - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#endif -}; - -void -util_format_r32g32b32a32_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sscaled pixel = {0}; - pixel.r = (int32_t)CLAMP(src[0], -2147483648.0f, 2147483520.0f); - pixel.g = (int32_t)CLAMP(src[1], -2147483648.0f, 2147483520.0f); - pixel.b = (int32_t)CLAMP(src[2], -2147483648.0f, 2147483520.0f); - pixel.a = (int32_t)CLAMP(src[3], -2147483648.0f, 2147483520.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_sscaled pixel = {0}; - pixel.r = (int32_t)CLAMP(src[0], -2147483648.0f, 2147483520.0f); - pixel.g = (int32_t)CLAMP(src[1], -2147483648.0f, 2147483520.0f); - pixel.b = (int32_t)CLAMP(src[2], -2147483648.0f, 2147483520.0f); - pixel.a = (int32_t)CLAMP(src[3], -2147483648.0f, 2147483520.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif -} - -void -util_format_r32g32b32a32_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint64_t)CLAMP(pixel.a, 0, 1)) * 0xff / 0x1); /* a */ -#else - struct util_format_r32g32b32a32_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint64_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint64_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint64_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint64_t)CLAMP(pixel.a, 0, 1)) * 0xff / 0x1); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sscaled pixel = {0}; - pixel.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - pixel.a = (int32_t)(((uint64_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_sscaled pixel = {0}; - pixel.r = (int32_t)(((uint64_t)src[0]) * 0x1 / 0xff); - pixel.g = (int32_t)(((uint64_t)src[1]) * 0x1 / 0xff); - pixel.b = (int32_t)(((uint64_t)src[2]) * 0x1 / 0xff); - pixel.a = (int32_t)(((uint64_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16_float { - uint16_t r; -}; - -void -util_format_r16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_r16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16_float { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; -#else - uint16_t r; - uint16_t g; -#endif -}; - -void -util_format_r16g16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16_float { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; -#else - uint16_t r; - uint16_t g; - uint16_t b; -#endif -}; - -void -util_format_r16g16b16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - pixel.b = _mesa_float_to_float16_rtz(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - pixel.b = _mesa_float_to_float16_rtz(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.b)); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.b)); /* b */ - dst[3] = 255; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - pixel.b = _mesa_float_to_float16_rtz((float)(src[2] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - pixel.b = _mesa_float_to_float16_rtz((float)(src[2] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16a16_float { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#else - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#endif -}; - -void -util_format_r16g16b16a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#else - struct util_format_r16g16b16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - pixel.b = _mesa_float_to_float16_rtz(src[2]); - pixel.a = _mesa_float_to_float16_rtz(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - pixel.b = _mesa_float_to_float16_rtz(src[2]); - pixel.a = _mesa_float_to_float16_rtz(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#else - struct util_format_r16g16b16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#endif -} - -void -util_format_r16g16b16a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.b)); /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.a)); /* a */ -#else - struct util_format_r16g16b16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.b)); /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.a)); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - pixel.b = _mesa_float_to_float16_rtz((float)(src[2] * (1.0f/0xff))); - pixel.a = _mesa_float_to_float16_rtz((float)(src[3] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - pixel.b = _mesa_float_to_float16_rtz((float)(src[2] * (1.0f/0xff))); - pixel.a = _mesa_float_to_float16_rtz((float)(src[3] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = _mesa_unorm_to_unorm(r, 16, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= _mesa_unorm_to_unorm(src[0], 8, 16); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) << 16; - value |= ((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) & 0xffff; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = _mesa_unorm_to_unorm(r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = _mesa_unorm_to_unorm(r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 16)) << 16; - value |= (_mesa_unorm_to_unorm(src[1], 8, 16)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 16)) & 0xffff; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[1], 8, 16)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; -#else - uint16_t r; - uint16_t g; - uint16_t b; -#endif -}; - -void -util_format_r16g16b16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_unorm pixel = {0}; - pixel.r = (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - pixel.g = (uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff); - pixel.b = (uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_unorm pixel = {0}; - pixel.r = (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - pixel.g = (uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff); - pixel.b = (uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 16, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 16, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16a16_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#else - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#endif -}; - -void -util_format_r16g16b16a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0xffff)); /* a */ -#else - struct util_format_r16g16b16a16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0xffff)); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_unorm pixel = {0}; - pixel.r = (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - pixel.g = (uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff); - pixel.b = (uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xffff); - pixel.a = (uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_unorm pixel = {0}; - pixel.r = (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - pixel.g = (uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff); - pixel.b = (uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xffff); - pixel.a = (uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0xffff)); /* a */ -#else - struct util_format_r16g16b16a16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0xffff)); /* a */ -#endif -} - -void -util_format_r16g16b16a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 16, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(pixel.a, 16, 8); /* a */ -#else - struct util_format_r16g16b16a16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 16, 8); /* b */ - dst[3] = _mesa_unorm_to_unorm(pixel.a, 16, 8); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 16); - pixel.a = _mesa_unorm_to_unorm(src[3], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 16); - pixel.a = _mesa_unorm_to_unorm(src[3], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)CLAMP(src[0], 0.0f, 65535.0f); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0.0f, 65535.0f)) << 16; - value |= ((uint16_t)CLAMP(src[1], 0.0f, 65535.0f)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)CLAMP(src[0], 0.0f, 65535.0f)) & 0xffff; - value |= (uint32_t)((uint16_t)CLAMP(src[1], 0.0f, 65535.0f)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 16; - value |= ((uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xffff; - value |= (uint32_t)((uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16_uscaled { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; -#else - uint16_t r; - uint16_t g; - uint16_t b; -#endif -}; - -void -util_format_r16g16b16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uscaled pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0.0f, 65535.0f); - pixel.g = (uint16_t)CLAMP(src[1], 0.0f, 65535.0f); - pixel.b = (uint16_t)CLAMP(src[2], 0.0f, 65535.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_uscaled pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0.0f, 65535.0f); - pixel.g = (uint16_t)CLAMP(src[1], 0.0f, 65535.0f); - pixel.b = (uint16_t)CLAMP(src[2], 0.0f, 65535.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uscaled pixel = {0}; - pixel.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_uscaled pixel = {0}; - pixel.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16a16_uscaled { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#else - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#endif -}; - -void -util_format_r16g16b16a16_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uscaled pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0.0f, 65535.0f); - pixel.g = (uint16_t)CLAMP(src[1], 0.0f, 65535.0f); - pixel.b = (uint16_t)CLAMP(src[2], 0.0f, 65535.0f); - pixel.a = (uint16_t)CLAMP(src[3], 0.0f, 65535.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_uscaled pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0.0f, 65535.0f); - pixel.g = (uint16_t)CLAMP(src[1], 0.0f, 65535.0f); - pixel.b = (uint16_t)CLAMP(src[2], 0.0f, 65535.0f); - pixel.a = (uint16_t)CLAMP(src[3], 0.0f, 65535.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16a16_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif -} - -void -util_format_r16g16b16a16_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(pixel.a, 1)) * 0xff / 0x1); /* a */ -#else - struct util_format_r16g16b16a16_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(pixel.a, 1)) * 0xff / 0x1); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uscaled pixel = {0}; - pixel.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.a = (uint16_t)(((uint32_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_uscaled pixel = {0}; - pixel.r = (uint16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.a = (uint16_t)(((uint32_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 16, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)(_mesa_unorm_to_snorm(src[0], 8, 16)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) << 16) ; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 16)) << 16) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 16)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 16)) & 0xffff) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[1], 8, 16)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; -#else - int16_t r; - int16_t g; - int16_t b; -#endif -}; - -void -util_format_r16g16b16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_snorm pixel = {0}; - pixel.r = (int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff); - pixel.g = (int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff); - pixel.b = (int16_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7fff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_snorm pixel = {0}; - pixel.r = (int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff); - pixel.g = (int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff); - pixel.b = (int16_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7fff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 16, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 16, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16a16_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; - int16_t a; -#else - int16_t r; - int16_t g; - int16_t b; - int16_t a; -#endif -}; - -void -util_format_r16g16b16a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0x7fff)); /* a */ -#else - struct util_format_r16g16b16a16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0x7fff)); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_snorm pixel = {0}; - pixel.r = (int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff); - pixel.g = (int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff); - pixel.b = (int16_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7fff); - pixel.a = (int16_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7fff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_snorm pixel = {0}; - pixel.r = (int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff); - pixel.g = (int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff); - pixel.b = (int16_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7fff); - pixel.a = (int16_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7fff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0x7fff)); /* a */ -#else - struct util_format_r16g16b16a16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = (float)(pixel.a * (1.0f/0x7fff)); /* a */ -#endif -} - -void -util_format_r16g16b16a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 16, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(pixel.a, 0), 16, 8); /* a */ -#else - struct util_format_r16g16b16a16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 16, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(pixel.a, 0), 16, 8); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 16); - pixel.a = _mesa_unorm_to_snorm(src[3], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 16); - pixel.a = _mesa_unorm_to_snorm(src[3], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)CLAMP(src[0], -32768.0f, 32767.0f)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[0], -32768.0f, 32767.0f)) << 16) ; - value |= (uint32_t)(((int16_t)CLAMP(src[1], -32768.0f, 32767.0f)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768.0f, 32767.0f)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[1], -32768.0f, 32767.0f)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 16) ; - value |= (uint32_t)(((int16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16_sscaled { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; -#else - int16_t r; - int16_t g; - int16_t b; -#endif -}; - -void -util_format_r16g16b16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sscaled pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768.0f, 32767.0f); - pixel.g = (int16_t)CLAMP(src[1], -32768.0f, 32767.0f); - pixel.b = (int16_t)CLAMP(src[2], -32768.0f, 32767.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_sscaled pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768.0f, 32767.0f); - pixel.g = (int16_t)CLAMP(src[1], -32768.0f, 32767.0f); - pixel.b = (int16_t)CLAMP(src[2], -32768.0f, 32767.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sscaled pixel = {0}; - pixel.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_sscaled pixel = {0}; - pixel.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16a16_sscaled { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; - int16_t a; -#else - int16_t r; - int16_t g; - int16_t b; - int16_t a; -#endif -}; - -void -util_format_r16g16b16a16_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sscaled pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768.0f, 32767.0f); - pixel.g = (int16_t)CLAMP(src[1], -32768.0f, 32767.0f); - pixel.b = (int16_t)CLAMP(src[2], -32768.0f, 32767.0f); - pixel.a = (int16_t)CLAMP(src[3], -32768.0f, 32767.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_sscaled pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768.0f, 32767.0f); - pixel.g = (int16_t)CLAMP(src[1], -32768.0f, 32767.0f); - pixel.b = (int16_t)CLAMP(src[2], -32768.0f, 32767.0f); - pixel.a = (int16_t)CLAMP(src[3], -32768.0f, 32767.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16a16_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = (float)pixel.a; /* a */ -#endif -} - -void -util_format_r16g16b16a16_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(pixel.a, 0, 1)) * 0xff / 0x1); /* a */ -#else - struct util_format_r16g16b16a16_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(pixel.a, 0, 1)) * 0xff / 0x1); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sscaled pixel = {0}; - pixel.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.a = (int16_t)(((uint32_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_sscaled pixel = {0}; - pixel.r = (int16_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (int16_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (int16_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.a = (int16_t)(((uint32_t)src[3]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= float_to_ubyte(src[0]); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= src[0]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[0])) << 8; - value |= (float_to_ubyte(src[1])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (float_to_ubyte(src[0])) & 0xff; - value |= (uint32_t)(float_to_ubyte(src[1])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(src[0]) << 8; - value |= (src[1]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (src[0]) & 0xff; - value |= (uint32_t)(src[1]) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r8g8b8_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t r; - uint8_t g; - uint8_t b; -#else - uint8_t r; - uint8_t g; - uint8_t b; -#endif -}; - -void -util_format_r8g8b8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_unorm pixel = {0}; - pixel.r = float_to_ubyte(src[0]); - pixel.g = float_to_ubyte(src[1]); - pixel.b = float_to_ubyte(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_unorm pixel = {0}; - pixel.r = float_to_ubyte(src[0]); - pixel.g = float_to_ubyte(src[1]); - pixel.b = float_to_ubyte(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r8g8b8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_unorm pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_unorm pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_b8g8r8_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t b; - uint8_t g; - uint8_t r; -#else - uint8_t b; - uint8_t g; - uint8_t r; -#endif -}; - -void -util_format_b8g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_unorm pixel = {0}; - pixel.b = float_to_ubyte(src[2]); - pixel.g = float_to_ubyte(src[1]); - pixel.r = float_to_ubyte(src[0]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_unorm pixel = {0}; - pixel.b = float_to_ubyte(src[2]); - pixel.g = float_to_ubyte(src[1]); - pixel.r = float_to_ubyte(src[0]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = ubyte_to_float(pixel.r); /* r */ - dst[1] = ubyte_to_float(pixel.g); /* g */ - dst[2] = ubyte_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_b8g8r8_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_unorm pixel = {0}; - pixel.b = src[2]; - pixel.g = src[1]; - pixel.r = src[0]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_unorm pixel = {0}; - pixel.b = src[2]; - pixel.g = src[1]; - pixel.r = src[0]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[0])) << 24; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 16; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (float_to_ubyte(src[0])) & 0xff; - value |= (uint32_t)((float_to_ubyte(src[1])) & 0xff) << 8; - value |= (uint32_t)((float_to_ubyte(src[2])) & 0xff) << 16; - value |= (uint32_t)(float_to_ubyte(src[3])) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = ubyte_to_float(b); /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_r8g8b8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = b; /* b */ - dst[3] = a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(src[0]) << 24; - value |= (uint32_t)((src[1]) & 0xff) << 16; - value |= (uint32_t)((src[2]) & 0xff) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (src[0]) & 0xff; - value |= (uint32_t)((src[1]) & 0xff) << 8; - value |= (uint32_t)((src[2]) & 0xff) << 16; - value |= (uint32_t)(src[3]) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)CLAMP(src[0], 0.0f, 255.0f); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) << 8; - value |= ((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) & 0xff; - value |= (uint32_t)((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 8; - value |= ((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff; - value |= (uint32_t)((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r8g8b8_uscaled { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t r; - uint8_t g; - uint8_t b; -#else - uint8_t r; - uint8_t g; - uint8_t b; -#endif -}; - -void -util_format_r8g8b8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uscaled pixel = {0}; - pixel.r = (uint8_t)CLAMP(src[0], 0.0f, 255.0f); - pixel.g = (uint8_t)CLAMP(src[1], 0.0f, 255.0f); - pixel.b = (uint8_t)CLAMP(src[2], 0.0f, 255.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_uscaled pixel = {0}; - pixel.r = (uint8_t)CLAMP(src[0], 0.0f, 255.0f); - pixel.g = (uint8_t)CLAMP(src[1], 0.0f, 255.0f); - pixel.b = (uint8_t)CLAMP(src[2], 0.0f, 255.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r8g8b8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uscaled pixel = {0}; - pixel.r = (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_uscaled pixel = {0}; - pixel.r = (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_b8g8r8_uscaled { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t b; - uint8_t g; - uint8_t r; -#else - uint8_t b; - uint8_t g; - uint8_t r; -#endif -}; - -void -util_format_b8g8r8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uscaled pixel = {0}; - pixel.b = (uint8_t)CLAMP(src[2], 0.0f, 255.0f); - pixel.g = (uint8_t)CLAMP(src[1], 0.0f, 255.0f); - pixel.r = (uint8_t)CLAMP(src[0], 0.0f, 255.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_uscaled pixel = {0}; - pixel.b = (uint8_t)CLAMP(src[2], 0.0f, 255.0f); - pixel.g = (uint8_t)CLAMP(src[1], 0.0f, 255.0f); - pixel.r = (uint8_t)CLAMP(src[0], 0.0f, 255.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_b8g8r8_uscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)MIN2(pixel.r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(pixel.g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(pixel.b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uscaled pixel = {0}; - pixel.b = (uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.g = (uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.r = (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_uscaled pixel = {0}; - pixel.b = (uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.g = (uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.r = (uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0.0f, 255.0f)) & 0xff) << 8; - value |= ((uint8_t)CLAMP(src[3], 0.0f, 255.0f)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0.0f, 255.0f)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0.0f, 255.0f)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_r8g8b8a8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 24; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 8; - value |= ((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[2], 0.0f, 255.0f)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) & 0xff) << 8; - value |= ((uint8_t)CLAMP(src[3], 0.0f, 255.0f)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[2], 0.0f, 255.0f)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0.0f, 255.0f)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_b8g8r8a8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) << 24; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) << 8; - value |= ((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0.0f, 255.0f)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0.0f, 255.0f)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) & 0xff) << 8; - value |= ((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[3], 0.0f, 255.0f)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0.0f, 255.0f)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0.0f, 255.0f)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0.0f, 255.0f)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_a8b8g8r8_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8; - value |= ((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 8) ; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 8) ; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[1], 8, 8)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r8g8b8_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int8_t r; - int8_t g; - int8_t b; -#else - int8_t r; - int8_t g; - int8_t b; -#endif -}; - -void -util_format_r8g8b8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_snorm pixel = {0}; - pixel.r = (int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f); - pixel.g = (int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f); - pixel.b = (int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_snorm pixel = {0}; - pixel.r = (int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f); - pixel.g = (int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f); - pixel.b = (int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r8g8b8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 8); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 8); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 8); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 8); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 8); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 8); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_b8g8r8_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int8_t b; - int8_t g; - int8_t r; -#else - int8_t b; - int8_t g; - int8_t r; -#endif -}; - -void -util_format_b8g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_snorm pixel = {0}; - pixel.b = (int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f); - pixel.g = (int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f); - pixel.r = (int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_snorm pixel = {0}; - pixel.b = (int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f); - pixel.g = (int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f); - pixel.r = (int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_b8g8r8_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_snorm pixel = {0}; - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 8); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 8); - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 8); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_snorm pixel = {0}; - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 8); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 8); - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 8); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif -} - -void -util_format_r8g8b8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 24) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[3], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 8)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif -} - -void -util_format_b8g8r8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[2], 8, 8)) << 24) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[3], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 8)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)CLAMP(src[0], -128.0f, 127.0f)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = (float)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[0], -128.0f, 127.0f)) << 8) ; - value |= (uint16_t)(((int8_t)CLAMP(src[1], -128.0f, 127.0f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)CLAMP(src[0], -128.0f, 127.0f)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[1], -128.0f, 127.0f)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 8) ; - value |= (uint16_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r8g8b8_sscaled { -#if UTIL_ARCH_BIG_ENDIAN - int8_t r; - int8_t g; - int8_t b; -#else - int8_t r; - int8_t g; - int8_t b; -#endif -}; - -void -util_format_r8g8b8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sscaled pixel = {0}; - pixel.r = (int8_t)CLAMP(src[0], -128.0f, 127.0f); - pixel.g = (int8_t)CLAMP(src[1], -128.0f, 127.0f); - pixel.b = (int8_t)CLAMP(src[2], -128.0f, 127.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_sscaled pixel = {0}; - pixel.r = (int8_t)CLAMP(src[0], -128.0f, 127.0f); - pixel.g = (int8_t)CLAMP(src[1], -128.0f, 127.0f); - pixel.b = (int8_t)CLAMP(src[2], -128.0f, 127.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r8g8b8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sscaled pixel = {0}; - pixel.r = (int8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (int8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (int8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_sscaled pixel = {0}; - pixel.r = (int8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - pixel.g = (int8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.b = (int8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_b8g8r8_sscaled { -#if UTIL_ARCH_BIG_ENDIAN - int8_t b; - int8_t g; - int8_t r; -#else - int8_t b; - int8_t g; - int8_t r; -#endif -}; - -void -util_format_b8g8r8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sscaled pixel = {0}; - pixel.b = (int8_t)CLAMP(src[2], -128.0f, 127.0f); - pixel.g = (int8_t)CLAMP(src[1], -128.0f, 127.0f); - pixel.r = (int8_t)CLAMP(src[0], -128.0f, 127.0f); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_sscaled pixel = {0}; - pixel.b = (int8_t)CLAMP(src[2], -128.0f, 127.0f); - pixel.g = (int8_t)CLAMP(src[1], -128.0f, 127.0f); - pixel.r = (int8_t)CLAMP(src[0], -128.0f, 127.0f); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)pixel.r; /* r */ - dst[1] = (float)pixel.g; /* g */ - dst[2] = (float)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_b8g8r8_sscaled pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)(((uint32_t)CLAMP(pixel.r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(pixel.g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(pixel.b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sscaled pixel = {0}; - pixel.b = (int8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.g = (int8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.r = (int8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_sscaled pixel = {0}; - pixel.b = (int8_t)(((uint32_t)src[2]) * 0x1 / 0xff); - pixel.g = (int8_t)(((uint32_t)src[1]) * 0x1 / 0xff); - pixel.r = (int8_t)(((uint32_t)src[0]) * 0x1 / 0xff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[0], -128.0f, 127.0f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128.0f, 127.0f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128.0f, 127.0f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[3], -128.0f, 127.0f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[0], -128.0f, 127.0f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128.0f, 127.0f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128.0f, 127.0f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[3], -128.0f, 127.0f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_r8g8b8a8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[2], -128.0f, 127.0f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128.0f, 127.0f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128.0f, 127.0f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[3], -128.0f, 127.0f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[2], -128.0f, 127.0f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128.0f, 127.0f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128.0f, 127.0f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[3], -128.0f, 127.0f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_b8g8r8a8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[3], -128.0f, 127.0f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128.0f, 127.0f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128.0f, 127.0f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[0], -128.0f, 127.0f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[3], -128.0f, 127.0f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128.0f, 127.0f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128.0f, 127.0f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[0], -128.0f, 127.0f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_a8b8g8r8_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)CLAMP(a, 0, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)(((uint32_t)src[3]) * 0x1 / 0xff)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)(((uint32_t)src[0]) * 0x1 / 0xff)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32_fixed { - int32_t r; -}; - -void -util_format_r32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r32_fixed pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -65536.0f, 65535.0f) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; - struct util_format_r32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround((CLAMP(pixel.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r32_fixed pixel = {0}; - pixel.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_fixed { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; -#else - int32_t r; - int32_t g; -#endif -}; - -void -util_format_r32g32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_fixed pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -65536.0f, 65535.0f) * (double)0x10000); - pixel.g = (int32_t)(CLAMP(src[1], -65536.0f, 65535.0f) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_fixed pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -65536.0f, 65535.0f) * (double)0x10000); - pixel.g = (int32_t)(CLAMP(src[1], -65536.0f, 65535.0f) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround((CLAMP(pixel.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround((CLAMP(pixel.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround((CLAMP(pixel.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround((CLAMP(pixel.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_fixed pixel = {0}; - pixel.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); - pixel.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_fixed pixel = {0}; - pixel.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); - pixel.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_fixed { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; -#else - int32_t r; - int32_t g; - int32_t b; -#endif -}; - -void -util_format_r32g32b32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_fixed pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -65536.0f, 65535.0f) * (double)0x10000); - pixel.g = (int32_t)(CLAMP(src[1], -65536.0f, 65535.0f) * (double)0x10000); - pixel.b = (int32_t)(CLAMP(src[2], -65536.0f, 65535.0f) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_fixed pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -65536.0f, 65535.0f) * (double)0x10000); - pixel.g = (int32_t)(CLAMP(src[1], -65536.0f, 65535.0f) * (double)0x10000); - pixel.b = (int32_t)(CLAMP(src[2], -65536.0f, 65535.0f) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround((CLAMP(pixel.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround((CLAMP(pixel.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround((CLAMP(pixel.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32b32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround((CLAMP(pixel.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround((CLAMP(pixel.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround((CLAMP(pixel.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ - dst[3] = 255; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_fixed pixel = {0}; - pixel.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); - pixel.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); - pixel.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_fixed pixel = {0}; - pixel.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); - pixel.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); - pixel.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_fixed { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#else - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#endif -}; - -void -util_format_r32g32b32a32_fixed_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x10000)); /* a */ -#else - struct util_format_r32g32b32a32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x10000)); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_fixed_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_fixed pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -65536.0f, 65535.0f) * (double)0x10000); - pixel.g = (int32_t)(CLAMP(src[1], -65536.0f, 65535.0f) * (double)0x10000); - pixel.b = (int32_t)(CLAMP(src[2], -65536.0f, 65535.0f) * (double)0x10000); - pixel.a = (int32_t)(CLAMP(src[3], -65536.0f, 65535.0f) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_fixed pixel = {0}; - pixel.r = (int32_t)(CLAMP(src[0], -65536.0f, 65535.0f) * (double)0x10000); - pixel.g = (int32_t)(CLAMP(src[1], -65536.0f, 65535.0f) * (double)0x10000); - pixel.b = (int32_t)(CLAMP(src[2], -65536.0f, 65535.0f) * (double)0x10000); - pixel.a = (int32_t)(CLAMP(src[3], -65536.0f, 65535.0f) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_fixed_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x10000)); /* a */ -#else - struct util_format_r32g32b32a32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0/0x10000)); /* r */ - dst[1] = (float)(pixel.g * (1.0/0x10000)); /* g */ - dst[2] = (float)(pixel.b * (1.0/0x10000)); /* b */ - dst[3] = (float)(pixel.a * (1.0/0x10000)); /* a */ -#endif -} - -void -util_format_r32g32b32a32_fixed_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround((CLAMP(pixel.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround((CLAMP(pixel.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround((CLAMP(pixel.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ - dst[3] = (uint8_t)util_iround((CLAMP(pixel.a, 0, 65536) * (1.0/0x10000)) * 0xff); /* a */ -#else - struct util_format_r32g32b32a32_fixed pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (uint8_t)util_iround((CLAMP(pixel.r, 0, 65536) * (1.0/0x10000)) * 0xff); /* r */ - dst[1] = (uint8_t)util_iround((CLAMP(pixel.g, 0, 65536) * (1.0/0x10000)) * 0xff); /* g */ - dst[2] = (uint8_t)util_iround((CLAMP(pixel.b, 0, 65536) * (1.0/0x10000)) * 0xff); /* b */ - dst[3] = (uint8_t)util_iround((CLAMP(pixel.a, 0, 65536) * (1.0/0x10000)) * 0xff); /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_fixed_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_fixed pixel = {0}; - pixel.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); - pixel.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); - pixel.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); - pixel.a = (int32_t)((float)(src[3] * (1.0f/0xff)) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_fixed pixel = {0}; - pixel.r = (int32_t)((float)(src[0] * (1.0f/0xff)) * (double)0x10000); - pixel.g = (int32_t)((float)(src[1] * (1.0f/0xff)) * (double)0x10000); - pixel.b = (int32_t)((float)(src[2] * (1.0f/0xff)) * (double)0x10000); - pixel.a = (int32_t)((float)(src[3] * (1.0f/0xff)) * (double)0x10000); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10x2_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0.0f, 1023.0f)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0.0f, 1023.0f)) & 0x3ff) << 10; - value |= ((uint32_t)CLAMP(src[0], 0.0f, 1023.0f)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)CLAMP(src[0], 0.0f, 1023.0f)) & 0x3ff; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0.0f, 1023.0f)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0.0f, 1023.0f)) & 0x3ff) << 20; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r10g10b10x2_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10x2_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; - value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10x2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r10g10b10x2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10x2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10x2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10x2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r10g10b10x2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4r4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 4; - uint8_t a = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = (value) & 0xf; - uint8_t r = value >> 4; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_a4r4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) << 4; - value |= ((uint8_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) << 4; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4r4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 4; - uint8_t a = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = (value) & 0xf; - uint8_t r = value >> 4; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif -} - -void -util_format_a4r4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 4; - uint8_t a = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = (value) & 0xf; - uint8_t r = value >> 4; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_a4r4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 4)) << 4; - value |= (_mesa_unorm_to_unorm(src[3], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= (_mesa_unorm_to_unorm(src[3], 8, 4)) & 0xf; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 4)) << 4; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4a4_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value >> 4; - uint8_t r = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0xf; - uint8_t a = value >> 4; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_r4a4_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 4; - value |= ((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xf)) & 0xf; - value |= (uint32_t)((uint8_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xf)) << 4; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4a4_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value >> 4; - uint8_t r = (value) & 0xf; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0xf; - uint8_t a = value >> 4; - dst[0] = (float)(r * (1.0f/0xf)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xf)); /* a */ -#endif -} - -void -util_format_r4a4_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value >> 4; - uint8_t r = (value) & 0xf; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0xf; - uint8_t a = value >> 4; - dst[0] = _mesa_unorm_to_unorm(r, 4, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 4, 8); /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_r4a4_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 4; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 4)) & 0xf; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 4)) << 4; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8a8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[0])) << 8; - value |= (float_to_ubyte(src[3])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (float_to_ubyte(src[0])) & 0xff; - value |= (uint32_t)(float_to_ubyte(src[3])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_r8a8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8a8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(src[0]) << 8; - value |= (src[3]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (src[0]) & 0xff; - value |= (uint32_t)(src[3]) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 8; - uint16_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xff; - uint16_t r = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[3])) << 8; - value |= (float_to_ubyte(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (float_to_ubyte(src[3])) & 0xff; - value |= (uint32_t)(float_to_ubyte(src[0])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 8; - uint16_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xff; - uint16_t r = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = ubyte_to_float(a); /* a */ -#endif -} - -void -util_format_a8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 8; - uint16_t r = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xff; - uint16_t r = value >> 8; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(src[3]) << 8; - value |= (src[0]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (src[3]) & 0xff; - value |= (uint32_t)(src[0]) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0.0f, 3.0f)) << 30; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0.0f, 1023.0f)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0.0f, 1023.0f)) & 0x3ff) << 10; - value |= ((uint32_t)CLAMP(src[0], 0.0f, 1023.0f)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)CLAMP(src[0], 0.0f, 1023.0f)) & 0x3ff; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0.0f, 1023.0f)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0.0f, 1023.0f)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0.0f, 3.0f)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_r10g10b10a2_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; - value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2.0f, 1.0f)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[2], -512.0f, 511.0f)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512.0f, 511.0f)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512.0f, 511.0f)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512.0f, 511.0f)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512.0f, 511.0f)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[2], -512.0f, 511.0f)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2.0f, 1.0f)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_r10g10b10a2_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x1)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x1)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif -} - -void -util_format_r10g10b10a2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 2, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 2, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 2)) << 30) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 2)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_uscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_uscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0.0f, 3.0f)) << 30; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], 0.0f, 1023.0f)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0.0f, 1023.0f)) & 0x3ff) << 10; - value |= ((uint32_t)CLAMP(src[2], 0.0f, 1023.0f)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)CLAMP(src[2], 0.0f, 1023.0f)) & 0x3ff; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0.0f, 1023.0f)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], 0.0f, 1023.0f)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0.0f, 3.0f)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_uscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_b10g10r10a2_uscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (uint8_t)(((uint32_t)MIN2(r, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)MIN2(g, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)MIN2(b, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MIN2(a, 1)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_uscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; - value |= ((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_sscaled_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_sscaled_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2.0f, 1.0f)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[0], -512.0f, 511.0f)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512.0f, 511.0f)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512.0f, 511.0f)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512.0f, 511.0f)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512.0f, 511.0f)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[0], -512.0f, 511.0f)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2.0f, 1.0f)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_sscaled_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)r; /* r */ - dst[1] = (float)g; /* g */ - dst[2] = (float)b; /* b */ - dst[3] = (float)a; /* a */ -#endif -} - -void -util_format_b10g10r10a2_sscaled_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (uint8_t)(((uint32_t)CLAMP(r, 0, 1)) * 0xff / 0x1); /* r */ - dst[1] = (uint8_t)(((uint32_t)CLAMP(g, 0, 1)) * 0xff / 0x1); /* g */ - dst[2] = (uint8_t)(((uint32_t)CLAMP(b, 0, 1)) * 0xff / 0x1); /* b */ - dst[3] = (uint8_t)(((uint32_t)MAX2(a, 0)) * 0xff / 0x1); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_sscaled_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)(((uint32_t)src[2]) * 0x1 / 0xff)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[1]) * 0x1 / 0xff)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)(((uint32_t)src[0]) * 0x1 / 0xff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)(((uint32_t)src[3]) * 0x1 / 0xff)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x1)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x1)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = (float)(a * (1.0f/0x1)); /* a */ -#endif -} - -void -util_format_b10g10r10a2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 2, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 2, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 2)) << 30) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 2)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)MIN2(src[0], 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)CLAMP(src[0], 0, 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[0], 255)) << 8; - value |= ((uint8_t)MIN2(src[1], 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; - value |= (uint32_t)((uint8_t)MIN2(src[1], 255)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t g = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t g = value >> 8; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 255)) << 8; - value |= ((uint8_t)CLAMP(src[1], 0, 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; - value |= (uint32_t)((uint8_t)CLAMP(src[1], 0, 255)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r8g8b8_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t r; - uint8_t g; - uint8_t b; -#else - uint8_t r; - uint8_t g; - uint8_t b; -#endif -}; - -void -util_format_r8g8b8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uint pixel = {0}; - pixel.r = (uint8_t)MIN2(src[0], 255); - pixel.g = (uint8_t)MIN2(src[1], 255); - pixel.b = (uint8_t)MIN2(src[2], 255); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_uint pixel = {0}; - pixel.r = (uint8_t)MIN2(src[0], 255); - pixel.g = (uint8_t)MIN2(src[1], 255); - pixel.b = (uint8_t)MIN2(src[2], 255); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_uint pixel = {0}; - pixel.r = (uint8_t)CLAMP(src[0], 0, 255); - pixel.g = (uint8_t)CLAMP(src[1], 0, 255); - pixel.b = (uint8_t)CLAMP(src[2], 0, 255); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_uint pixel = {0}; - pixel.r = (uint8_t)CLAMP(src[0], 0, 255); - pixel.g = (uint8_t)CLAMP(src[1], 0, 255); - pixel.b = (uint8_t)CLAMP(src[2], 0, 255); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[0], 255)) << 24; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)MIN2(src[2], 255)) & 0xff) << 8; - value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)MIN2(src[2], 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)MIN2(src[3], 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_r8g8b8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 255)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 8; - value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0, 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)CLAMP(src[0], -128, 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t r = (int8_t)(value) ; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)MIN2(src[0], 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8g8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 8) ; - value |= (uint16_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[1], -128, 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t g = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t g = ((int16_t)(value) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 8) ; - value |= (uint16_t)(((int8_t)MIN2(src[1], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[1], 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r8g8b8_sint { -#if UTIL_ARCH_BIG_ENDIAN - int8_t r; - int8_t g; - int8_t b; -#else - int8_t r; - int8_t g; - int8_t b; -#endif -}; - -void -util_format_r8g8b8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_r8g8b8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sint pixel = {0}; - pixel.r = (int8_t)CLAMP(src[0], -128, 127); - pixel.g = (int8_t)CLAMP(src[1], -128, 127); - pixel.b = (int8_t)CLAMP(src[2], -128, 127); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_sint pixel = {0}; - pixel.r = (int8_t)CLAMP(src[0], -128, 127); - pixel.g = (int8_t)CLAMP(src[1], -128, 127); - pixel.b = (int8_t)CLAMP(src[2], -128, 127); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r8g8b8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r8g8b8_sint pixel = {0}; - pixel.r = (int8_t)MIN2(src[0], 127); - pixel.g = (int8_t)MIN2(src[1], 127); - pixel.b = (int8_t)MIN2(src[2], 127); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r8g8b8_sint pixel = {0}; - pixel.r = (int8_t)MIN2(src[0], 127); - pixel.g = (int8_t)MIN2(src[1], 127); - pixel.b = (int8_t)MIN2(src[2], 127); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[3], -128, 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_r8g8b8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[3], 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)MIN2(src[0], 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)CLAMP(src[0], 0, 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[0], 65535)) << 16; - value |= ((uint16_t)MIN2(src[1], 65535)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff; - value |= (uint32_t)((uint16_t)MIN2(src[1], 65535)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t g = (value) & 0xffff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t g = value >> 16; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 65535)) << 16; - value |= ((uint16_t)CLAMP(src[1], 0, 65535)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)CLAMP(src[0], 0, 65535)) & 0xffff; - value |= (uint32_t)((uint16_t)CLAMP(src[1], 0, 65535)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; -#else - uint16_t r; - uint16_t g; - uint16_t b; -#endif -}; - -void -util_format_r16g16b16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uint pixel = {0}; - pixel.r = (uint16_t)MIN2(src[0], 65535); - pixel.g = (uint16_t)MIN2(src[1], 65535); - pixel.b = (uint16_t)MIN2(src[2], 65535); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_uint pixel = {0}; - pixel.r = (uint16_t)MIN2(src[0], 65535); - pixel.g = (uint16_t)MIN2(src[1], 65535); - pixel.b = (uint16_t)MIN2(src[2], 65535); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_uint pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0, 65535); - pixel.g = (uint16_t)CLAMP(src[1], 0, 65535); - pixel.b = (uint16_t)CLAMP(src[2], 0, 65535); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_uint pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0, 65535); - pixel.g = (uint16_t)CLAMP(src[1], 0, 65535); - pixel.b = (uint16_t)CLAMP(src[2], 0, 65535); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16a16_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#else - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t a; -#endif -}; - -void -util_format_r16g16b16a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = (unsigned)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = (unsigned)pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uint pixel = {0}; - pixel.r = (uint16_t)MIN2(src[0], 65535); - pixel.g = (uint16_t)MIN2(src[1], 65535); - pixel.b = (uint16_t)MIN2(src[2], 65535); - pixel.a = (uint16_t)MIN2(src[3], 65535); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_uint pixel = {0}; - pixel.r = (uint16_t)MIN2(src[0], 65535); - pixel.g = (uint16_t)MIN2(src[1], 65535); - pixel.b = (uint16_t)MIN2(src[2], 65535); - pixel.a = (uint16_t)MIN2(src[3], 65535); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = (unsigned)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = (unsigned)pixel.a; /* a */ -#endif -} - -void -util_format_r16g16b16a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_uint pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0, 65535); - pixel.g = (uint16_t)CLAMP(src[1], 0, 65535); - pixel.b = (uint16_t)CLAMP(src[2], 0, 65535); - pixel.a = (uint16_t)CLAMP(src[3], 0, 65535); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_uint pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0, 65535); - pixel.g = (uint16_t)CLAMP(src[1], 0, 65535); - pixel.b = (uint16_t)CLAMP(src[2], 0, 65535); - pixel.a = (uint16_t)CLAMP(src[3], 0, 65535); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_r16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)CLAMP(src[0], -32768, 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = (int16_t)(value) ; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)MIN2(src[0], 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16g16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; - value |= (uint32_t)(((int16_t)CLAMP(src[1], -32768, 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[1], -32768, 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t g = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t g = ((int32_t)(value) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[0], 32767)) << 16) ; - value |= (uint32_t)(((int16_t)MIN2(src[1], 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[1], 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16_sint { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; -#else - int16_t r; - int16_t g; - int16_t b; -#endif -}; - -void -util_format_r16g16b16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 6; - dst += 4; - } -} - -void -util_format_r16g16b16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sint pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768, 32767); - pixel.g = (int16_t)CLAMP(src[1], -32768, 32767); - pixel.b = (int16_t)CLAMP(src[2], -32768, 32767); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_sint pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768, 32767); - pixel.g = (int16_t)CLAMP(src[1], -32768, 32767); - pixel.b = (int16_t)CLAMP(src[2], -32768, 32767); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16_sint pixel = {0}; - pixel.r = (int16_t)MIN2(src[0], 32767); - pixel.g = (int16_t)MIN2(src[1], 32767); - pixel.b = (int16_t)MIN2(src[2], 32767); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16_sint pixel = {0}; - pixel.r = (int16_t)MIN2(src[0], 32767); - pixel.g = (int16_t)MIN2(src[1], 32767); - pixel.b = (int16_t)MIN2(src[2], 32767); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 6; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16a16_sint { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; - int16_t a; -#else - int16_t r; - int16_t g; - int16_t b; - int16_t a; -#endif -}; - -void -util_format_r16g16b16a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = (int)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = (int)pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sint pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768, 32767); - pixel.g = (int16_t)CLAMP(src[1], -32768, 32767); - pixel.b = (int16_t)CLAMP(src[2], -32768, 32767); - pixel.a = (int16_t)CLAMP(src[3], -32768, 32767); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_sint pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768, 32767); - pixel.g = (int16_t)CLAMP(src[1], -32768, 32767); - pixel.b = (int16_t)CLAMP(src[2], -32768, 32767); - pixel.a = (int16_t)CLAMP(src[3], -32768, 32767); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = (int)pixel.a; /* a */ -#else - struct util_format_r16g16b16a16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = (int)pixel.a; /* a */ -#endif -} - -void -util_format_r16g16b16a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16a16_sint pixel = {0}; - pixel.r = (int16_t)MIN2(src[0], 32767); - pixel.g = (int16_t)MIN2(src[1], 32767); - pixel.b = (int16_t)MIN2(src[2], 32767); - pixel.a = (int16_t)MIN2(src[3], 32767); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16a16_sint pixel = {0}; - pixel.r = (int16_t)MIN2(src[0], 32767); - pixel.g = (int16_t)MIN2(src[1], 32767); - pixel.b = (int16_t)MIN2(src[2], 32767); - pixel.a = (int16_t)MIN2(src[3], 32767); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= src[0]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)MAX2(src[0], 0); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; -#else - uint32_t r; - uint32_t g; -#endif -}; - -void -util_format_r32g32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; - uint32_t b; -#else - uint32_t r; - uint32_t g; - uint32_t b; -#endif -}; - -void -util_format_r32g32b32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - pixel.b = (uint32_t)MAX2(src[2], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - pixel.b = (uint32_t)MAX2(src[2], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t a; -#else - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t a; -#endif -}; - -void -util_format_r32g32b32a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_r32g32b32a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - pixel.b = (uint32_t)MAX2(src[2], 0); - pixel.a = (uint32_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - pixel.b = (uint32_t)MAX2(src[2], 0); - pixel.a = (uint32_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_r32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)(src[0]) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = (int32_t)(value) ; - dst[0] = r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)((int32_t)MIN2(src[0], 2147483647)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32_sint { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; -#else - int32_t r; - int32_t g; -#endif -}; - -void -util_format_r32g32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32g32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32_sint { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; -#else - int32_t r; - int32_t g; - int32_t b; -#endif -}; - -void -util_format_r32g32b32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 12; - dst += 4; - } -} - -void -util_format_r32g32b32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - pixel.b = (int32_t)MIN2(src[2], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - pixel.b = (int32_t)MIN2(src[2], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 12; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32a32_sint { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#else - int32_t r; - int32_t g; - int32_t b; - int32_t a; -#endif -}; - -void -util_format_r32g32b32a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32g32b32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_r32g32b32a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32a32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - pixel.b = (int32_t)MIN2(src[2], 2147483647); - pixel.a = (int32_t)MIN2(src[3], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32a32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - pixel.b = (int32_t)MIN2(src[2], 2147483647); - pixel.a = (int32_t)MIN2(src[3], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64_uint { - uint64_t r; -}; - -void -util_format_r64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 8; - dst += 4; - } -} - -void -util_format_r64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r64_uint pixel = {0}; - pixel.r = (uint64_t)src[0]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - struct util_format_r64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r64_uint pixel = {0}; - pixel.r = (uint64_t)MAX2(src[0], 0); - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint64_t r; - uint64_t g; -#else - uint64_t r; - uint64_t g; -#endif -}; - -void -util_format_r64g64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r64g64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_uint pixel = {0}; - pixel.r = (uint64_t)src[0]; - pixel.g = (uint64_t)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64_uint pixel = {0}; - pixel.r = (uint64_t)src[0]; - pixel.g = (uint64_t)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r64g64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_uint pixel = {0}; - pixel.r = (uint64_t)MAX2(src[0], 0); - pixel.g = (uint64_t)MAX2(src[1], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64_uint pixel = {0}; - pixel.r = (uint64_t)MAX2(src[0], 0); - pixel.g = (uint64_t)MAX2(src[1], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64b64_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint64_t r; - uint64_t g; - uint64_t b; -#else - uint64_t r; - uint64_t g; - uint64_t b; -#endif -}; - -void -util_format_r64g64b64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64b64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = 1; /* a */ -#endif - src += 24; - dst += 4; - } -} - -void -util_format_r64g64b64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_uint pixel = {0}; - pixel.r = (uint64_t)src[0]; - pixel.g = (uint64_t)src[1]; - pixel.b = (uint64_t)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64_uint pixel = {0}; - pixel.r = (uint64_t)src[0]; - pixel.g = (uint64_t)src[1]; - pixel.b = (uint64_t)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 24; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64b64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64b64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r64g64b64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_uint pixel = {0}; - pixel.r = (uint64_t)MAX2(src[0], 0); - pixel.g = (uint64_t)MAX2(src[1], 0); - pixel.b = (uint64_t)MAX2(src[2], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64_uint pixel = {0}; - pixel.r = (uint64_t)MAX2(src[0], 0); - pixel.g = (uint64_t)MAX2(src[1], 0); - pixel.b = (uint64_t)MAX2(src[2], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 24; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64b64a64_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint64_t r; - uint64_t g; - uint64_t b; - uint64_t a; -#else - uint64_t r; - uint64_t g; - uint64_t b; - uint64_t a; -#endif -}; - -void -util_format_r64g64b64a64_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = (unsigned)MIN2(pixel.a, 4294967295); /* a */ -#else - struct util_format_r64g64b64a64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = (unsigned)MIN2(pixel.a, 4294967295); /* a */ -#endif - src += 32; - dst += 4; - } -} - -void -util_format_r64g64b64a64_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_uint pixel = {0}; - pixel.r = (uint64_t)src[0]; - pixel.g = (uint64_t)src[1]; - pixel.b = (uint64_t)src[2]; - pixel.a = (uint64_t)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64a64_uint pixel = {0}; - pixel.r = (uint64_t)src[0]; - pixel.g = (uint64_t)src[1]; - pixel.b = (uint64_t)src[2]; - pixel.a = (uint64_t)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 32; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64b64a64_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = (unsigned)MIN2(pixel.a, 4294967295); /* a */ -#else - struct util_format_r64g64b64a64_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)MIN2(pixel.r, 4294967295); /* r */ - dst[1] = (unsigned)MIN2(pixel.g, 4294967295); /* g */ - dst[2] = (unsigned)MIN2(pixel.b, 4294967295); /* b */ - dst[3] = (unsigned)MIN2(pixel.a, 4294967295); /* a */ -#endif -} - -void -util_format_r64g64b64a64_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_uint pixel = {0}; - pixel.r = (uint64_t)MAX2(src[0], 0); - pixel.g = (uint64_t)MAX2(src[1], 0); - pixel.b = (uint64_t)MAX2(src[2], 0); - pixel.a = (uint64_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64a64_uint pixel = {0}; - pixel.r = (uint64_t)MAX2(src[0], 0); - pixel.g = (uint64_t)MAX2(src[1], 0); - pixel.b = (uint64_t)MAX2(src[2], 0); - pixel.a = (uint64_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 32; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64_sint { - int64_t r; -}; - -void -util_format_r64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - struct util_format_r64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ - src += 8; - dst += 4; - } -} - -void -util_format_r64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - struct util_format_r64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_r64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - struct util_format_r64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - memcpy(dst, &pixel, sizeof pixel); - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64_sint { -#if UTIL_ARCH_BIG_ENDIAN - int64_t r; - int64_t g; -#else - int64_t r; - int64_t g; -#endif -}; - -void -util_format_r64g64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r64g64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r64g64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64b64_sint { -#if UTIL_ARCH_BIG_ENDIAN - int64_t r; - int64_t g; - int64_t b; -#else - int64_t r; - int64_t g; - int64_t b; -#endif -}; - -void -util_format_r64g64b64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64b64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = 1; /* a */ -#endif - src += 24; - dst += 4; - } -} - -void -util_format_r64g64b64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 24; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64b64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r64g64b64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r64g64b64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 24; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r64g64b64a64_sint { -#if UTIL_ARCH_BIG_ENDIAN - int64_t r; - int64_t g; - int64_t b; - int64_t a; -#else - int64_t r; - int64_t g; - int64_t b; - int64_t a; -#endif -}; - -void -util_format_r64g64b64a64_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = (int)CLAMP(pixel.a, -2147483648, 2147483647); /* a */ -#else - struct util_format_r64g64b64a64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = (int)CLAMP(pixel.a, -2147483648, 2147483647); /* a */ -#endif - src += 32; - dst += 4; - } -} - -void -util_format_r64g64b64a64_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - pixel.a = (int64_t)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64a64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - pixel.a = (int64_t)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 32; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r64g64b64a64_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = (int)CLAMP(pixel.a, -2147483648, 2147483647); /* a */ -#else - struct util_format_r64g64b64a64_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)CLAMP(pixel.r, -2147483648, 2147483647); /* r */ - dst[1] = (int)CLAMP(pixel.g, -2147483648, 2147483647); /* g */ - dst[2] = (int)CLAMP(pixel.b, -2147483648, 2147483647); /* b */ - dst[3] = (int)CLAMP(pixel.a, -2147483648, 2147483647); /* a */ -#endif -} - -void -util_format_r64g64b64a64_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r64g64b64a64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - pixel.a = (int64_t)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r64g64b64a64_sint pixel = {0}; - pixel.r = (int64_t)src[0]; - pixel.g = (int64_t)src[1]; - pixel.b = (int64_t)src[2]; - pixel.a = (int64_t)src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 32; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)MIN2(src[3], 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -} - -void -util_format_a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)CLAMP(src[3], 0, 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgba = value; - dst[0] = (unsigned)rgba; /* r */ - dst[1] = (unsigned)rgba; /* g */ - dst[2] = (unsigned)rgba; /* b */ - dst[3] = (unsigned)rgba; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_i8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)MIN2(src[0], 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgba = value; - dst[0] = (unsigned)rgba; /* r */ - dst[1] = (unsigned)rgba; /* g */ - dst[2] = (unsigned)rgba; /* b */ - dst[3] = (unsigned)rgba; /* a */ -} - -void -util_format_i8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)CLAMP(src[0], 0, 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)MIN2(src[0], 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t rgb = value; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)CLAMP(src[0], 0, 255); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[0], 255)) << 8; - value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; - value |= (uint32_t)((uint8_t)MIN2(src[3], 255)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_l8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 255)) << 8; - value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0, 255)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t a = (int8_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)CLAMP(src[3], -128, 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t a = (int8_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -} - -void -util_format_a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)MIN2(src[3], 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgba = (int8_t)(value) ; - dst[0] = (int)rgba; /* r */ - dst[1] = (int)rgba; /* g */ - dst[2] = (int)rgba; /* b */ - dst[3] = (int)rgba; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_i8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)CLAMP(src[0], -128, 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgba = (int8_t)(value) ; - dst[0] = (int)rgba; /* r */ - dst[1] = (int)rgba; /* g */ - dst[2] = (int)rgba; /* b */ - dst[3] = (int)rgba; /* a */ -} - -void -util_format_i8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)MIN2(src[0], 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgb = (int8_t)(value) ; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = 1; /* a */ - src += 1; - dst += 4; - } -} - -void -util_format_l8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)CLAMP(src[0], -128, 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint8_t value; - memcpy(&value, src, sizeof value); - int8_t rgb = (int8_t)(value) ; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint8_t value = 0; - value |= (uint8_t)((int8_t)MIN2(src[0], 127)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_l8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 8) ; - value |= (uint16_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[3], -128, 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_l8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 8) ; - value |= (uint16_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[3], 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)MIN2(src[3], 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -} - -void -util_format_a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)CLAMP(src[3], 0, 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgba = value; - dst[0] = (unsigned)rgba; /* r */ - dst[1] = (unsigned)rgba; /* g */ - dst[2] = (unsigned)rgba; /* b */ - dst[3] = (unsigned)rgba; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)MIN2(src[0], 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgba = value; - dst[0] = (unsigned)rgba; /* r */ - dst[1] = (unsigned)rgba; /* g */ - dst[2] = (unsigned)rgba; /* b */ - dst[3] = (unsigned)rgba; /* a */ -} - -void -util_format_i16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)CLAMP(src[0], 0, 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)MIN2(src[0], 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t rgb = value; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)CLAMP(src[0], 0, 65535); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[0], 65535)) << 16; - value |= ((uint16_t)MIN2(src[3], 65535)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff; - value |= (uint32_t)((uint16_t)MIN2(src[3], 65535)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (unsigned)rgb; /* r */ - dst[1] = (unsigned)rgb; /* g */ - dst[2] = (unsigned)rgb; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_l16a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 65535)) << 16; - value |= ((uint16_t)CLAMP(src[3], 0, 65535)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)CLAMP(src[0], 0, 65535)) & 0xffff; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 65535)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t a = (int16_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)CLAMP(src[3], -32768, 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t a = (int16_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -} - -void -util_format_a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)MIN2(src[3], 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgba = (int16_t)(value) ; - dst[0] = (int)rgba; /* r */ - dst[1] = (int)rgba; /* g */ - dst[2] = (int)rgba; /* b */ - dst[3] = (int)rgba; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_i16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)CLAMP(src[0], -32768, 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgba = (int16_t)(value) ; - dst[0] = (int)rgba; /* r */ - dst[1] = (int)rgba; /* g */ - dst[2] = (int)rgba; /* b */ - dst[3] = (int)rgba; /* a */ -} - -void -util_format_i16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)MIN2(src[0], 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = (int16_t)(value) ; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = 1; /* a */ - src += 2; - dst += 4; - } -} - -void -util_format_l16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)CLAMP(src[0], -32768, 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t rgb = (int16_t)(value) ; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint16_t value = 0; - value |= (uint16_t)((int16_t)MIN2(src[0], 32767)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_l16a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; - value |= (uint32_t)(((int16_t)CLAMP(src[3], -32768, 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[3], -32768, 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l16a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (int)rgb; /* r */ - dst[1] = (int)rgb; /* g */ - dst[2] = (int)rgb; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_l16a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[0], 32767)) << 16) ; - value |= (uint32_t)(((int16_t)MIN2(src[3], 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[3], 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= src[3]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ -} - -void -util_format_a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)MAX2(src[3], 0); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgba = value; - dst[0] = rgba; /* r */ - dst[1] = rgba; /* g */ - dst[2] = rgba; /* b */ - dst[3] = rgba; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_i32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= src[0]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgba = value; - dst[0] = rgba; /* r */ - dst[1] = rgba; /* g */ - dst[2] = rgba; /* b */ - dst[3] = rgba; /* a */ -} - -void -util_format_i32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)MAX2(src[0], 0); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = value; - dst[0] = rgb; /* r */ - dst[1] = rgb; /* g */ - dst[2] = rgb; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_l32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= src[0]; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t rgb = value; - dst[0] = rgb; /* r */ - dst[1] = rgb; /* g */ - dst[2] = rgb; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)MAX2(src[0], 0); - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_l32a32_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t rgb; - uint32_t a; -#else - uint32_t rgb; - uint32_t a; -#endif -}; - -void -util_format_l32a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_l32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_l32a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_uint pixel = {0}; - pixel.rgb = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l32a32_uint pixel = {0}; - pixel.rgb = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_l32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_l32a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_uint pixel = {0}; - pixel.rgb = (uint32_t)MAX2(src[0], 0); - pixel.a = (uint32_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l32a32_uint pixel = {0}; - pixel.rgb = (uint32_t)MAX2(src[0], 0); - pixel.a = (uint32_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = (int32_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)(src[3]) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = (int32_t)(value) ; - dst[0] = 0; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = a; /* a */ -} - -void -util_format_a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)((int32_t)MIN2(src[3], 2147483647)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgba = (int32_t)(value) ; - dst[0] = rgba; /* r */ - dst[1] = rgba; /* g */ - dst[2] = rgba; /* b */ - dst[3] = rgba; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_i32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)(src[0]) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_i32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgba = (int32_t)(value) ; - dst[0] = rgba; /* r */ - dst[1] = rgba; /* g */ - dst[2] = rgba; /* b */ - dst[3] = rgba; /* a */ -} - -void -util_format_i32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)((int32_t)MIN2(src[0], 2147483647)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = (int32_t)(value) ; - dst[0] = rgb; /* r */ - dst[1] = rgb; /* g */ - dst[2] = rgb; /* b */ - dst[3] = 1; /* a */ - src += 4; - dst += 4; - } -} - -void -util_format_l32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)(src[0]) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t rgb = (int32_t)(value) ; - dst[0] = rgb; /* r */ - dst[1] = rgb; /* g */ - dst[2] = rgb; /* b */ - dst[3] = 1; /* a */ -} - -void -util_format_l32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { - uint32_t value = 0; - value |= (uint32_t)((int32_t)MIN2(src[0], 2147483647)) ; - memcpy(dst, &value, sizeof value); - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_l32a32_sint { -#if UTIL_ARCH_BIG_ENDIAN - int32_t rgb; - int32_t a; -#else - int32_t rgb; - int32_t a; -#endif -}; - -void -util_format_l32a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_l32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_l32a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_sint pixel = {0}; - pixel.rgb = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l32a32_sint pixel = {0}; - pixel.rgb = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_l32a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_l32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.rgb; /* r */ - dst[1] = pixel.rgb; /* g */ - dst[2] = pixel.rgb; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_l32a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_l32a32_sint pixel = {0}; - pixel.rgb = (int32_t)MIN2(src[0], 2147483647); - pixel.a = (int32_t)MIN2(src[3], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_l32a32_sint pixel = {0}; - pixel.rgb = (int32_t)MIN2(src[0], 2147483647); - pixel.a = (int32_t)MIN2(src[3], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_b8g8r8_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t b; - uint8_t g; - uint8_t r; -#else - uint8_t b; - uint8_t g; - uint8_t r; -#endif -}; - -void -util_format_b8g8r8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uint pixel = {0}; - pixel.b = (uint8_t)MIN2(src[2], 255); - pixel.g = (uint8_t)MIN2(src[1], 255); - pixel.r = (uint8_t)MIN2(src[0], 255); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_uint pixel = {0}; - pixel.b = (uint8_t)MIN2(src[2], 255); - pixel.g = (uint8_t)MIN2(src[1], 255); - pixel.r = (uint8_t)MIN2(src[0], 255); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_uint pixel = {0}; - pixel.b = (uint8_t)CLAMP(src[2], 0, 255); - pixel.g = (uint8_t)CLAMP(src[1], 0, 255); - pixel.r = (uint8_t)CLAMP(src[0], 0, 255); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_uint pixel = {0}; - pixel.b = (uint8_t)CLAMP(src[2], 0, 255); - pixel.g = (uint8_t)CLAMP(src[1], 0, 255); - pixel.r = (uint8_t)CLAMP(src[0], 0, 255); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[2], 255)) << 24; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)MIN2(src[0], 255)) & 0xff) << 8; - value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)MIN2(src[2], 255)) & 0xff; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)MIN2(src[0], 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)MIN2(src[3], 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t a = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value >> 16) & 0xff; - uint32_t a = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_b8g8r8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[2], 0, 255)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0, 255)) & 0xff) << 8; - value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[2], 0, 255)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0, 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0, 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_b8g8r8_sint { -#if UTIL_ARCH_BIG_ENDIAN - int8_t b; - int8_t g; - int8_t r; -#else - int8_t b; - int8_t g; - int8_t r; -#endif -}; - -void -util_format_b8g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 3; - dst += 4; - } -} - -void -util_format_b8g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sint pixel = {0}; - pixel.b = (int8_t)CLAMP(src[2], -128, 127); - pixel.g = (int8_t)CLAMP(src[1], -128, 127); - pixel.r = (int8_t)CLAMP(src[0], -128, 127); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_sint pixel = {0}; - pixel.b = (int8_t)CLAMP(src[2], -128, 127); - pixel.g = (int8_t)CLAMP(src[1], -128, 127); - pixel.r = (int8_t)CLAMP(src[0], -128, 127); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_b8g8r8_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b8g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_b8g8r8_sint pixel = {0}; - pixel.b = (int8_t)MIN2(src[2], 127); - pixel.g = (int8_t)MIN2(src[1], 127); - pixel.r = (int8_t)MIN2(src[0], 127); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_b8g8r8_sint pixel = {0}; - pixel.b = (int8_t)MIN2(src[2], 127); - pixel.g = (int8_t)MIN2(src[1], 127); - pixel.r = (int8_t)MIN2(src[0], 127); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 3; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b8g8r8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[2], -128, 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[3], -128, 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b8g8r8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value << 16) ) >> 24; - int32_t a = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 8) ) >> 24; - int32_t a = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_b8g8r8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[2], 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[3], 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8r8g8b8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[3], 255)) << 24; - value |= (uint32_t)(((uint8_t)MIN2(src[0], 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; - value |= ((uint8_t)MIN2(src[2], 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; - value |= (uint32_t)(((uint8_t)MIN2(src[0], 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)MIN2(src[2], 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8r8g8b8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t r = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t r = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a8r8g8b8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0, 255)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0, 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; - value |= ((uint8_t)CLAMP(src[2], 0, 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[0], 0, 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)CLAMP(src[2], 0, 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[3], 255)) << 24; - value |= (uint32_t)(((uint8_t)MIN2(src[2], 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; - value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; - value |= (uint32_t)(((uint8_t)MIN2(src[2], 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)MIN2(src[0], 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 24; - uint32_t b = (value >> 16) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t r = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0xff; - uint32_t b = (value >> 8) & 0xff; - uint32_t g = (value >> 16) & 0xff; - uint32_t r = value >> 24; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a8b8g8r8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0, 255)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; - value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 255)) << 24; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2r10g10b10_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = value >> 22; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a2r10g10b10_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)MIN2(src[2], 1023)) << 22; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 12; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 1023)) & 0x3ff) << 2; - value |= ((uint32_t)MIN2(src[3], 3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)MIN2(src[3], 3)) & 0x3; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 1023)) & 0x3ff) << 2; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 12; - value |= (uint32_t)((uint32_t)MIN2(src[2], 1023)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2r10g10b10_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t r = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = value >> 22; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a2r10g10b10_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)CLAMP(src[2], 0, 1023)) << 22; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 2; - value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 2; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; - value |= (uint32_t)((uint32_t)CLAMP(src[2], 0, 1023)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2b10g10r10_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = value >> 22; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a2b10g10r10_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)MIN2(src[0], 1023)) << 22; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 12; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 1023)) & 0x3ff) << 2; - value |= ((uint32_t)MIN2(src[3], 3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)MIN2(src[3], 3)) & 0x3; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 1023)) & 0x3ff) << 2; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 12; - value |= (uint32_t)((uint32_t)MIN2(src[0], 1023)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a2b10g10r10_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 22; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t a = (value) & 0x3; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = (value) & 0x3; - uint32_t b = (value >> 2) & 0x3ff; - uint32_t g = (value >> 12) & 0x3ff; - uint32_t r = value >> 22; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a2b10g10r10_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)CLAMP(src[0], 0, 1023)) << 22; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 2; - value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)CLAMP(src[3], 0, 3)) & 0x3; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 2; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 12; - value |= (uint32_t)((uint32_t)CLAMP(src[0], 0, 1023)) << 22; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)MIN2(src[3], 3)) << 30; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 1023)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 10; - value |= ((uint32_t)MIN2(src[2], 1023)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)MIN2(src[2], 1023)) & 0x3ff; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 1023)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)MIN2(src[3], 3)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_b10g10r10a2_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0, 3)) << 30; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; - value |= ((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0, 3)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10a2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10a2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_b10g10r10a2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)MIN2(src[3], 1)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)MIN2(src[3], 1)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g6b5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g6b5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[2], 31)) << 11; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 63)) & 0x3f) << 5; - value |= ((uint16_t)MIN2(src[0], 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[0], 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 63)) & 0x3f) << 5; - value |= (uint32_t)((uint16_t)MIN2(src[2], 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g6b5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r5g6b5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[2], 0, 31)) << 11; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 63)) & 0x3f) << 5; - value |= ((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 63)) & 0x3f) << 5; - value |= (uint32_t)((uint16_t)CLAMP(src[2], 0, 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g6r5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g6r5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[0], 31)) << 11; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 63)) & 0x3f) << 5; - value |= ((uint16_t)MIN2(src[2], 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[2], 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 63)) & 0x3f) << 5; - value |= (uint32_t)((uint16_t)MIN2(src[0], 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g6r5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b5g6r5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 31)) << 11; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 63)) & 0x3f) << 5; - value |= ((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 63)) & 0x3f) << 5; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r3g3b2_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = value >> 6; - uint8_t g = (value >> 3) & 0x7; - uint8_t r = (value) & 0x7; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0x7; - uint8_t g = (value >> 3) & 0x7; - uint8_t b = value >> 6; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_r3g3b2_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[2], 3)) << 6; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 7)) & 0x7) << 3; - value |= ((uint8_t)MIN2(src[0], 7)) & 0x7; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)MIN2(src[0], 7)) & 0x7; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 7)) & 0x7) << 3; - value |= (uint32_t)((uint8_t)MIN2(src[2], 3)) << 6; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r3g3b2_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = value >> 6; - uint8_t g = (value >> 3) & 0x7; - uint8_t r = (value) & 0x7; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = (value) & 0x7; - uint8_t g = (value >> 3) & 0x7; - uint8_t b = value >> 6; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r3g3b2_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[2], 0, 3)) << 6; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 7)) & 0x7) << 3; - value |= ((uint8_t)CLAMP(src[0], 0, 7)) & 0x7; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0, 7)) & 0x7; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 7)) & 0x7) << 3; - value |= (uint32_t)((uint8_t)CLAMP(src[2], 0, 3)) << 6; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b2g3r3_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 5; - uint8_t g = (value >> 2) & 0x7; - uint8_t b = (value) & 0x3; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = (value) & 0x3; - uint8_t g = (value >> 2) & 0x7; - uint8_t r = value >> 5; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 1; - dst += 4; - } -} - -void -util_format_b2g3r3_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[0], 7)) << 5; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 7)) & 0x7) << 2; - value |= ((uint8_t)MIN2(src[2], 3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)MIN2(src[2], 3)) & 0x3; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 7)) & 0x7) << 2; - value |= (uint32_t)((uint8_t)MIN2(src[0], 7)) << 5; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b2g3r3_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t r = value >> 5; - uint8_t g = (value >> 2) & 0x7; - uint8_t b = (value) & 0x3; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint8_t value; - memcpy(&value, src, sizeof value); - uint8_t b = (value) & 0x3; - uint8_t g = (value >> 2) & 0x7; - uint8_t r = value >> 5; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b2g3r3_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint8_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 7)) << 5; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 7)) & 0x7) << 2; - value |= ((uint8_t)CLAMP(src[2], 0, 3)) & 0x3; - memcpy(dst, &value, sizeof value); -#else - uint8_t value = 0; - value |= ((uint8_t)CLAMP(src[2], 0, 3)) & 0x3; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 7)) & 0x7) << 2; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 7)) << 5; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 1; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4g4b4a4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r4g4b4a4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[3], 15)) << 12; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 4; - value |= ((uint16_t)MIN2(src[0], 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[0], 15)) & 0xf; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)MIN2(src[3], 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r4g4b4a4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t b = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_r4g4b4a4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 15)) << 12; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 4; - value |= ((uint16_t)CLAMP(src[0], 0, 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[0], 0, 15)) & 0xf; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b4g4r4a4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b4g4r4a4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[3], 15)) << 12; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 4; - value |= ((uint16_t)MIN2(src[2], 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[2], 15)) & 0xf; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)MIN2(src[3], 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b4g4r4a4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 12; - uint16_t r = (value >> 8) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t b = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0xf; - uint16_t g = (value >> 4) & 0xf; - uint16_t r = (value >> 8) & 0xf; - uint16_t a = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_b4g4r4a4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 15)) << 12; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 4; - value |= ((uint16_t)CLAMP(src[2], 0, 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[2], 0, 15)) & 0xf; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4r4g4b4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a4r4g4b4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[2], 15)) << 12; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 15)) & 0xf) << 4; - value |= ((uint16_t)MIN2(src[3], 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[3], 15)) & 0xf; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)MIN2(src[2], 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4r4g4b4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t r = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a4r4g4b4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[2], 0, 15)) << 12; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 15)) & 0xf) << 4; - value |= ((uint16_t)CLAMP(src[3], 0, 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[3], 0, 15)) & 0xf; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)CLAMP(src[2], 0, 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4b4g4r4_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a4b4g4r4_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[0], 15)) << 12; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 15)) & 0xf) << 4; - value |= ((uint16_t)MIN2(src[3], 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[3], 15)) & 0xf; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)MIN2(src[0], 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a4b4g4r4_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 12; - uint16_t g = (value >> 8) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t a = (value) & 0xf; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0xf; - uint16_t b = (value >> 4) & 0xf; - uint16_t g = (value >> 8) & 0xf; - uint16_t r = value >> 12; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a4b4g4r4_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 15)) << 12; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 8; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 15)) & 0xf) << 4; - value |= ((uint16_t)CLAMP(src[3], 0, 15)) & 0xf; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[3], 0, 15)) & 0xf; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 15)) & 0xf) << 4; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 15)) & 0xf) << 8; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 15)) << 12; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1r5g5b5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a1r5g5b5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[2], 31)) << 11; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 31)) & 0x1f) << 1; - value |= ((uint16_t)MIN2(src[3], 1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[3], 1)) & 0x1; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 31)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)MIN2(src[2], 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1r5g5b5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t r = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a1r5g5b5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[2], 0, 31)) << 11; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f) << 1; - value |= ((uint16_t)CLAMP(src[3], 0, 1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[3], 0, 1)) & 0x1; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)CLAMP(src[2], 0, 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1b5g5r5_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_a1b5g5r5_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[0], 31)) << 11; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 31)) & 0x1f) << 1; - value |= ((uint16_t)MIN2(src[3], 1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[3], 1)) & 0x1; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 31)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)MIN2(src[0], 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a1b5g5r5_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 6) & 0x1f; - uint16_t b = (value >> 1) & 0x1f; - uint16_t a = (value) & 0x1; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = (value) & 0x1; - uint16_t b = (value >> 1) & 0x1f; - uint16_t g = (value >> 6) & 0x1f; - uint16_t r = value >> 11; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_a1b5g5r5_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 31)) << 11; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 6; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f) << 1; - value |= ((uint16_t)CLAMP(src[3], 0, 1)) & 0x1; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[3], 0, 1)) & 0x1; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f) << 1; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 6; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 31)) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g5b5a1_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g5b5a1_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[3], 1)) << 15; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 31)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 5; - value |= ((uint16_t)MIN2(src[0], 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[0], 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)MIN2(src[2], 31)) & 0x1f) << 10; - value |= (uint32_t)((uint16_t)MIN2(src[3], 1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g5b5a1_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t b = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_r5g5b5a1_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 1)) << 15; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 5; - value |= ((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f) << 10; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g5r5a1_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g5r5a1_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[3], 1)) << 15; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 31)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 5; - value |= ((uint16_t)MIN2(src[2], 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)MIN2(src[2], 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)MIN2(src[1], 31)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)MIN2(src[0], 31)) & 0x1f) << 10; - value |= (uint32_t)((uint16_t)MIN2(src[3], 1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g5r5a1_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t a = value >> 15; - uint16_t r = (value >> 10) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t b = (value) & 0x1f; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x1f; - uint16_t r = (value >> 10) & 0x1f; - uint16_t a = value >> 15; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_b5g5r5a1_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 1)) << 15; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f) << 10; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 5; - value |= ((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint16_t)CLAMP(src[2], 0, 31)) & 0x1f; - value |= (uint32_t)(((uint16_t)CLAMP(src[1], 0, 31)) & 0x1f) << 5; - value |= (uint32_t)(((uint16_t)CLAMP(src[0], 0, 31)) & 0x1f) << 10; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 1)) << 15; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8x8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 24) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0])) << 24; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[2])) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = util_format_srgb_8unorm_to_linear_float(r); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8x8_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = util_format_srgb_to_linear_8unorm(r); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0])) << 24; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 16; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[0])) & 0xff; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1])) & 0xff) << 8; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[2])) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[0], 255)) << 24; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)MIN2(src[2], 255)) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; - value |= (uint32_t)(((uint8_t)MIN2(src[1], 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)MIN2(src[2], 255)) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 24; - uint32_t g = (value >> 16) & 0xff; - uint32_t b = (value >> 8) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xff; - uint32_t g = (value >> 8) & 0xff; - uint32_t b = (value >> 16) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8x8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 255)) << 24; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 16; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 8; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; - value |= (uint32_t)(((uint8_t)CLAMP(src[1], 0, 255)) & 0xff) << 8; - value |= (uint32_t)(((uint8_t)CLAMP(src[2], 0, 255)) & 0xff) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r8g8b8x8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8g8b8x8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 24) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r8g8b8x8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 8) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10x2_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10x2_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= ((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0x3ff)) & 0x3ff; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0x3ff)) & 0x3ff) << 20; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10x2_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - dst[0] = (float)(r * (1.0f/0x3ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x3ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x3ff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b10g10r10x2_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value) & 0x3ff; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t b = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value >> 20) & 0x3ff; - dst[0] = _mesa_unorm_to_unorm(r, 10, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 10, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(b, 10, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10x2_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff) << 20; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[2], 8, 10)) & 0x3ff; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[1], 8, 10)) & 0x3ff) << 10; - value |= (uint32_t)((_mesa_unorm_to_unorm(src[0], 8, 10)) & 0x3ff) << 20; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10x2_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10x2_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x1ff)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10x2_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - dst[0] = (float)(r * (1.0f/0x1ff)); /* r */ - dst[1] = (float)(g * (1.0f/0x1ff)); /* g */ - dst[2] = (float)(b * (1.0f/0x1ff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b10g10r10x2_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 10, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 10, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 10, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10x2_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 10)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 10)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 10)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10x2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_b10g10r10x2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b10g10r10x2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 2) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b10g10r10x2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) << 20) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16x16_unorm { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t x; -#else - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t x; -#endif -}; - -void -util_format_r16g16b16x16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_unorm pixel = {0}; - pixel.r = (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - pixel.g = (uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff); - pixel.b = (uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_unorm pixel = {0}; - pixel.r = (uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff); - pixel.g = (uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff); - pixel.b = (uint16_t)util_iround(CLAMP(src[2], 0.0f, 1.0f) * 0xffff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16x16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0xffff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0xffff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16x16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 16, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16x16_unorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_unorm_to_unorm(pixel.r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(pixel.g, 16, 8); /* g */ - dst[2] = _mesa_unorm_to_unorm(pixel.b, 16, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_unorm pixel = {0}; - pixel.r = _mesa_unorm_to_unorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_unorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_unorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16x16_snorm { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; - uint16_t x; -#else - int16_t r; - int16_t g; - int16_t b; - uint16_t x; -#endif -}; - -void -util_format_r16g16b16x16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_snorm pixel = {0}; - pixel.r = (int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff); - pixel.g = (int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff); - pixel.b = (int16_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7fff); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_snorm pixel = {0}; - pixel.r = (int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff); - pixel.g = (int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff); - pixel.b = (int16_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7fff); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16x16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (float)(pixel.r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(pixel.g * (1.0f/0x7fff)); /* g */ - dst[2] = (float)(pixel.b * (1.0f/0x7fff)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16x16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 16, 8); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16x16_snorm pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_snorm_to_unorm(MAX2(pixel.r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(pixel.g, 0), 16, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(pixel.b, 0), 16, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_snorm pixel = {0}; - pixel.r = _mesa_unorm_to_snorm(src[0], 8, 16); - pixel.g = _mesa_unorm_to_snorm(src[1], 8, 16); - pixel.b = _mesa_unorm_to_snorm(src[2], 8, 16); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16x16_float { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t x; -#else - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t x; -#endif -}; - -void -util_format_r16g16b16x16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - pixel.b = _mesa_float_to_float16_rtz(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.g = _mesa_float_to_float16_rtz(src[1]); - pixel.b = _mesa_float_to_float16_rtz(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16x16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = _mesa_half_to_float(pixel.g); /* g */ - dst[2] = _mesa_half_to_float(pixel.b); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16x16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.b)); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r16g16b16x16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = float_to_ubyte(_mesa_half_to_float(pixel.g)); /* g */ - dst[2] = float_to_ubyte(_mesa_half_to_float(pixel.b)); /* b */ - dst[3] = 255; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - pixel.b = _mesa_float_to_float16_rtz((float)(src[2] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.g = _mesa_float_to_float16_rtz((float)(src[1] * (1.0f/0xff))); - pixel.b = _mesa_float_to_float16_rtz((float)(src[2] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16x16_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t x; -#else - uint16_t r; - uint16_t g; - uint16_t b; - uint16_t x; -#endif -}; - -void -util_format_r16g16b16x16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_uint pixel = {0}; - pixel.r = (uint16_t)MIN2(src[0], 65535); - pixel.g = (uint16_t)MIN2(src[1], 65535); - pixel.b = (uint16_t)MIN2(src[2], 65535); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_uint pixel = {0}; - pixel.r = (uint16_t)MIN2(src[0], 65535); - pixel.g = (uint16_t)MIN2(src[1], 65535); - pixel.b = (uint16_t)MIN2(src[2], 65535); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16x16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (unsigned)pixel.r; /* r */ - dst[1] = (unsigned)pixel.g; /* g */ - dst[2] = (unsigned)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16x16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_uint pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0, 65535); - pixel.g = (uint16_t)CLAMP(src[1], 0, 65535); - pixel.b = (uint16_t)CLAMP(src[2], 0, 65535); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_uint pixel = {0}; - pixel.r = (uint16_t)CLAMP(src[0], 0, 65535); - pixel.g = (uint16_t)CLAMP(src[1], 0, 65535); - pixel.b = (uint16_t)CLAMP(src[2], 0, 65535); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16g16b16x16_sint { -#if UTIL_ARCH_BIG_ENDIAN - int16_t r; - int16_t g; - int16_t b; - uint16_t x; -#else - int16_t r; - int16_t g; - int16_t b; - uint16_t x; -#endif -}; - -void -util_format_r16g16b16x16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r16g16b16x16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_sint pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768, 32767); - pixel.g = (int16_t)CLAMP(src[1], -32768, 32767); - pixel.b = (int16_t)CLAMP(src[2], -32768, 32767); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_sint pixel = {0}; - pixel.r = (int16_t)CLAMP(src[0], -32768, 32767); - pixel.g = (int16_t)CLAMP(src[1], -32768, 32767); - pixel.b = (int16_t)CLAMP(src[2], -32768, 32767); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16g16b16x16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r16g16b16x16_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = (int)pixel.r; /* r */ - dst[1] = (int)pixel.g; /* g */ - dst[2] = (int)pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r16g16b16x16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16g16b16x16_sint pixel = {0}; - pixel.r = (int16_t)MIN2(src[0], 32767); - pixel.g = (int16_t)MIN2(src[1], 32767); - pixel.b = (int16_t)MIN2(src[2], 32767); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16g16b16x16_sint pixel = {0}; - pixel.r = (int16_t)MIN2(src[0], 32767); - pixel.g = (int16_t)MIN2(src[1], 32767); - pixel.b = (int16_t)MIN2(src[2], 32767); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32x32_float { -#if UTIL_ARCH_BIG_ENDIAN - float r; - float g; - float b; - uint32_t x; -#else - float r; - float g; - float b; - uint32_t x; -#endif -}; - -void -util_format_r32g32b32x32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32x32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32x32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32x32_float pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32x32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32x32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32x32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = float_to_ubyte(pixel.b); /* b */ - dst[3] = 255; /* a */ -#else - struct util_format_r32g32b32x32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = float_to_ubyte(pixel.g); /* g */ - dst[2] = float_to_ubyte(pixel.b); /* b */ - dst[3] = 255; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32x32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - pixel.b = ubyte_to_float(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32x32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.g = ubyte_to_float(src[1]); - pixel.b = ubyte_to_float(src[2]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32x32_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t x; -#else - uint32_t r; - uint32_t g; - uint32_t b; - uint32_t x; -#endif -}; - -void -util_format_r32g32b32x32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32x32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32x32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32x32_uint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32x32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32x32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32x32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - pixel.b = (uint32_t)MAX2(src[2], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32x32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.g = (uint32_t)MAX2(src[1], 0); - pixel.b = (uint32_t)MAX2(src[2], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32g32b32x32_sint { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t g; - int32_t b; - uint32_t x; -#else - int32_t r; - int32_t g; - int32_t b; - uint32_t x; -#endif -}; - -void -util_format_r32g32b32x32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32x32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 16; - dst += 4; - } -} - -void -util_format_r32g32b32x32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32x32_sint pixel = {0}; - pixel.r = src[0]; - pixel.g = src[1]; - pixel.b = src[2]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32g32b32x32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#else - struct util_format_r32g32b32x32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = pixel.g; /* g */ - dst[2] = pixel.b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r32g32b32x32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32g32b32x32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - pixel.b = (int32_t)MIN2(src[2], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32g32b32x32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.g = (int32_t)MIN2(src[1], 2147483647); - pixel.b = (int32_t)MIN2(src[2], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 16; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8a8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 8) ; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif -} - -void -util_format_r8a8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8a8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 8) ; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[3], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 8)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) << 16; - value |= ((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xffff)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) & 0xffff; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[3], 0.0f, 1.0f) * 0xffff)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0xffff)); /* a */ -#endif -} - -void -util_format_r16a16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = _mesa_unorm_to_unorm(r, 16, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 16, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = _mesa_unorm_to_unorm(r, 16, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_unorm_to_unorm(a, 16, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 16)) << 16; - value |= (_mesa_unorm_to_unorm(src[3], 8, 16)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[0], 8, 16)) & 0xffff; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[3], 8, 16)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) << 16) ; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7fff)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (float)(a * (1.0f/0x7fff)); /* a */ -#endif -} - -void -util_format_r16a16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 16, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 16, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 16, 8); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 16, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 16)) << 16) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[3], 8, 16)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 16)) & 0xffff) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 16)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r16a16_float { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t r; - uint16_t a; -#else - uint16_t r; - uint16_t a; -#endif -}; - -void -util_format_r16a16_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#else - struct util_format_r16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.a = _mesa_float_to_float16_rtz(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz(src[0]); - pixel.a = _mesa_float_to_float16_rtz(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#else - struct util_format_r16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = _mesa_half_to_float(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = _mesa_half_to_float(pixel.a); /* a */ -#endif -} - -void -util_format_r16a16_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.a)); /* a */ -#else - struct util_format_r16a16_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(_mesa_half_to_float(pixel.r)); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = float_to_ubyte(_mesa_half_to_float(pixel.a)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.a = _mesa_float_to_float16_rtz((float)(src[3] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r16a16_float pixel = {0}; - pixel.r = _mesa_float_to_float16_rtz((float)(src[0] * (1.0f/0xff))); - pixel.a = _mesa_float_to_float16_rtz((float)(src[3] * (1.0f/0xff))); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32a32_float { -#if UTIL_ARCH_BIG_ENDIAN - float r; - float a; -#else - float r; - float a; -#endif -}; - -void -util_format_r32a32_float_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32a32_float_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_float pixel = {0}; - pixel.r = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32a32_float pixel = {0}; - pixel.r = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32a32_float_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_r32a32_float_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = float_to_ubyte(pixel.a); /* a */ -#else - struct util_format_r32a32_float pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = float_to_ubyte(pixel.r); /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = float_to_ubyte(pixel.a); /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32a32_float_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.a = ubyte_to_float(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32a32_float pixel = {0}; - pixel.r = ubyte_to_float(src[0]); - pixel.a = ubyte_to_float(src[3]); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8a8_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)MIN2(src[0], 255)) << 8; - value |= ((uint8_t)MIN2(src[3], 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)MIN2(src[0], 255)) & 0xff; - value |= (uint32_t)((uint8_t)MIN2(src[3], 255)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 8; - uint16_t a = (value) & 0xff; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0xff; - uint16_t a = value >> 8; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_r8a8_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)((uint8_t)CLAMP(src[0], 0, 255)) << 8; - value |= ((uint8_t)CLAMP(src[3], 0, 255)) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= ((uint8_t)CLAMP(src[0], 0, 255)) & 0xff; - value |= (uint32_t)((uint8_t)CLAMP(src[3], 0, 255)) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r8a8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 8) ; - value |= (uint16_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[3], -128, 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r8a8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value) ) >> 8; - int16_t a = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t r = ((int16_t)(value << 8) ) >> 8; - int16_t a = ((int16_t)(value) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_r8a8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 8) ; - value |= (uint16_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[3], 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)MIN2(src[0], 65535)) << 16; - value |= ((uint16_t)MIN2(src[3], 65535)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)MIN2(src[0], 65535)) & 0xffff; - value |= (uint32_t)((uint16_t)MIN2(src[3], 65535)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = value >> 16; - uint32_t a = (value) & 0xffff; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0xffff; - uint32_t a = value >> 16; - dst[0] = (unsigned)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_r16a16_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)CLAMP(src[0], 0, 65535)) << 16; - value |= ((uint16_t)CLAMP(src[3], 0, 65535)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)CLAMP(src[0], 0, 65535)) & 0xffff; - value |= (uint32_t)((uint16_t)CLAMP(src[3], 0, 65535)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r16a16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; - value |= (uint32_t)(((int16_t)CLAMP(src[3], -32768, 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[3], -32768, 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r16a16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value) ) >> 16; - int32_t a = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 16) ) >> 16; - int32_t a = ((int32_t)(value) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_r16a16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[0], 32767)) << 16) ; - value |= (uint32_t)(((int16_t)MIN2(src[3], 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[3], 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32a32_uint { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t r; - uint32_t a; -#else - uint32_t r; - uint32_t a; -#endif -}; - -void -util_format_r32a32_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32a32_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_uint pixel = {0}; - pixel.r = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32a32_uint pixel = {0}; - pixel.r = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32a32_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32a32_uint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_r32a32_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.a = (uint32_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32a32_uint pixel = {0}; - pixel.r = (uint32_t)MAX2(src[0], 0); - pixel.a = (uint32_t)MAX2(src[3], 0); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -struct util_format_r32a32_sint { -#if UTIL_ARCH_BIG_ENDIAN - int32_t r; - int32_t a; -#else - int32_t r; - int32_t a; -#endif -}; - -void -util_format_r32a32_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#endif - src += 8; - dst += 4; - } -} - -void -util_format_r32a32_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_sint pixel = {0}; - pixel.r = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32a32_sint pixel = {0}; - pixel.r = src[0]; - pixel.a = src[3]; - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r32a32_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#else - struct util_format_r32a32_sint pixel; - memcpy(&pixel, src, sizeof pixel); - dst[0] = pixel.r; /* r */ - dst[1] = 0; /* g */ - dst[2] = 0; /* b */ - dst[3] = pixel.a; /* a */ -#endif -} - -void -util_format_r32a32_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - struct util_format_r32a32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.a = (int32_t)MIN2(src[3], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#else - struct util_format_r32a32_sint pixel = {0}; - pixel.r = (int32_t)MIN2(src[0], 2147483647); - pixel.a = (int32_t)MIN2(src[3], 2147483647); - memcpy(dst, &pixel, sizeof pixel); -#endif - src += 4; - dst += 8; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_uint_unpack_unsigned(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - unsigned *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_uint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)MIN2(src[3], 3)) << 30; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 1023)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 10; - value |= ((uint32_t)MIN2(src[0], 1023)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)MIN2(src[0], 1023)) & 0x3ff; - value |= (uint32_t)(((uint32_t)MIN2(src[1], 1023)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)MIN2(src[2], 1023)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)MIN2(src[3], 3)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_uint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - unsigned *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t a = value >> 30; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t r = (value) & 0x3ff; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t r = (value) & 0x3ff; - uint32_t g = (value >> 10) & 0x3ff; - uint32_t b = (value >> 20) & 0x3ff; - uint32_t a = value >> 30; - dst[0] = (unsigned)r; /* r */ - dst[1] = (unsigned)g; /* g */ - dst[2] = (unsigned)b; /* b */ - dst[3] = (unsigned)a; /* a */ -#endif -} - -void -util_format_r10g10b10a2_uint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0, 3)) << 30; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 20; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; - value |= ((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint32_t)CLAMP(src[0], 0, 1023)) & 0x3ff; - value |= (uint32_t)(((uint32_t)CLAMP(src[1], 0, 1023)) & 0x3ff) << 10; - value |= (uint32_t)(((uint32_t)CLAMP(src[2], 0, 1023)) & 0x3ff) << 20; - value |= (uint32_t)((uint32_t)CLAMP(src[3], 0, 3)) << 30; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_r10g10b10a2_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)CLAMP(src[0], -512, 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[1], -512, 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)CLAMP(src[2], -512, 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)CLAMP(src[3], -2, 1)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r10g10b10a2_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 30; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t r = ((int32_t)(value << 22) ) >> 22; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t r = ((int32_t)(value << 22) ) >> 22; - int32_t g = ((int32_t)(value << 12) ) >> 22; - int32_t b = ((int32_t)(value << 2) ) >> 22; - int32_t a = ((int32_t)(value) ) >> 30; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_r10g10b10a2_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((uint32_t)MIN2(src[3], 1)) << 30) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((uint32_t)MIN2(src[0], 511)) & 0x3ff) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[1], 511)) & 0x3ff) << 10) ; - value |= (uint32_t)((uint32_t)(((uint32_t)MIN2(src[2], 511)) & 0x3ff) << 20) ; - value |= (uint32_t)((uint32_t)((uint32_t)MIN2(src[3], 1)) << 30) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g6r5_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g6r5_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0]) >> 3) << 11; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (util_format_linear_float_to_srgb_8unorm(src[2]) >> 3) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[2]) >> 3) & 0x1f; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[0]) >> 3) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_b5g6r5_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_b5g6r5_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = (value) & 0x1f; - dst[0] = util_format_srgb_to_linear_8unorm(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b << 3 | b >> 2); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = value >> 11; - dst[0] = util_format_srgb_to_linear_8unorm(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b << 3 | b >> 2); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_b5g6r5_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0]) >> 3) << 11; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (util_format_linear_to_srgb_8unorm(src[2]) >> 3) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[2]) >> 3) & 0x1f; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[0]) >> 3) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g6b5_srgb_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g6b5_srgb_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[2]) >> 3) << 11; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (util_format_linear_float_to_srgb_8unorm(src[0]) >> 3) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_float_to_srgb_8unorm(src[0]) >> 3) & 0x1f; - value |= (uint32_t)((util_format_linear_float_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (uint32_t)(util_format_linear_float_to_srgb_8unorm(src[2]) >> 3) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_r5g6b5_srgb_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = util_format_srgb_8unorm_to_linear_float(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_8unorm_to_linear_float(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_8unorm_to_linear_float(b << 3 | b >> 2); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_r5g6b5_srgb_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t b = value >> 11; - uint16_t g = (value >> 5) & 0x3f; - uint16_t r = (value) & 0x1f; - dst[0] = util_format_srgb_to_linear_8unorm(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b << 3 | b >> 2); /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t r = (value) & 0x1f; - uint16_t g = (value >> 5) & 0x3f; - uint16_t b = value >> 11; - dst[0] = util_format_srgb_to_linear_8unorm(r << 3 | r >> 2); /* r */ - dst[1] = util_format_srgb_to_linear_8unorm(g << 2 | g >> 4); /* g */ - dst[2] = util_format_srgb_to_linear_8unorm(b << 3 | b >> 2); /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_r5g6b5_srgb_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[2]) >> 3) << 11; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (util_format_linear_to_srgb_8unorm(src[0]) >> 3) & 0x1f; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (util_format_linear_to_srgb_8unorm(src[0]) >> 3) & 0x1f; - value |= (uint32_t)((util_format_linear_to_srgb_8unorm(src[1]) >> 2) & 0x3f) << 5; - value |= (uint32_t)(util_format_linear_to_srgb_8unorm(src[2]) >> 3) << 11; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g8r8_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t g = value >> 8; - uint16_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t g = (value) & 0xff; - uint16_t r = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_g8r8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(float_to_ubyte(src[1])) << 8; - value |= (float_to_ubyte(src[0])) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (float_to_ubyte(src[1])) & 0xff; - value |= (uint32_t)(float_to_ubyte(src[0])) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g8r8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t g = value >> 8; - uint16_t r = (value) & 0xff; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t g = (value) & 0xff; - uint16_t r = value >> 8; - dst[0] = ubyte_to_float(r); /* r */ - dst[1] = ubyte_to_float(g); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_g8r8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t g = value >> 8; - uint16_t r = (value) & 0xff; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - uint16_t g = (value) & 0xff; - uint16_t r = value >> 8; - dst[0] = r; /* r */ - dst[1] = g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_g8r8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint32_t)(src[1]) << 8; - value |= (src[0]) & 0xff; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (src[1]) & 0xff; - value |= (uint32_t)(src[0]) << 8; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value) ) >> 8; - int16_t r = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value << 8) ) >> 8; - int16_t r = ((int16_t)(value) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) << 8) ; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value) ) >> 8; - int16_t r = ((int16_t)(value << 8) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value << 8) ) >> 8; - int16_t r = ((int16_t)(value) ) >> 8; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value) ) >> 8; - int16_t r = ((int16_t)(value << 8) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value << 8) ) >> 8; - int16_t r = ((int16_t)(value) ) >> 8; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[1], 8, 8)) << 8) ; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) ; - value |= (uint16_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value) ) >> 8; - int16_t r = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value << 8) ) >> 8; - int16_t r = ((int16_t)(value) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 2; - dst += 4; - } -} - -void -util_format_g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[1], -128, 127)) << 8) ; - value |= (uint16_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value) ) >> 8; - int16_t r = ((int16_t)(value << 8) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint16_t value; - memcpy(&value, src, sizeof value); - int16_t g = ((int16_t)(value << 8) ) >> 8; - int16_t r = ((int16_t)(value) ) >> 8; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint16_t value = 0; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[1], 127)) << 8) ; - value |= (uint16_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint16_t value = 0; - value |= (uint16_t)(((int8_t)MIN2(src[1], 127)) & 0xff) ; - value |= (uint16_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 8) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 2; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g16r16_unorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t g = value >> 16; - uint32_t r = (value) & 0xffff; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t g = (value) & 0xffff; - uint32_t r = value >> 16; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_g16r16_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff)) << 16; - value |= ((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= ((uint16_t)util_iround(CLAMP(src[1], 0.0f, 1.0f) * 0xffff)) & 0xffff; - value |= (uint32_t)((uint16_t)util_iround(CLAMP(src[0], 0.0f, 1.0f) * 0xffff)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g16r16_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t g = value >> 16; - uint32_t r = (value) & 0xffff; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t g = (value) & 0xffff; - uint32_t r = value >> 16; - dst[0] = (float)(r * (1.0f/0xffff)); /* r */ - dst[1] = (float)(g * (1.0f/0xffff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_g16r16_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t g = value >> 16; - uint32_t r = (value) & 0xffff; - dst[0] = _mesa_unorm_to_unorm(r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - uint32_t g = (value) & 0xffff; - uint32_t r = value >> 16; - dst[0] = _mesa_unorm_to_unorm(r, 16, 8); /* r */ - dst[1] = _mesa_unorm_to_unorm(g, 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_g16r16_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[1], 8, 16)) << 16; - value |= (_mesa_unorm_to_unorm(src[0], 8, 16)) & 0xffff; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (_mesa_unorm_to_unorm(src[1], 8, 16)) & 0xffff; - value |= (uint32_t)(_mesa_unorm_to_unorm(src[0], 8, 16)) << 16; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g16r16_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value) ) >> 16; - int32_t r = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value << 16) ) >> 16; - int32_t r = ((int32_t)(value) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_g16r16_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff)) << 16) ; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7fff)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7fff)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g16r16_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value) ) >> 16; - int32_t r = ((int32_t)(value << 16) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value << 16) ) >> 16; - int32_t r = ((int32_t)(value) ) >> 16; - dst[0] = (float)(r * (1.0f/0x7fff)); /* r */ - dst[1] = (float)(g * (1.0f/0x7fff)); /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_g16r16_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value) ) >> 16; - int32_t r = ((int32_t)(value << 16) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value << 16) ) >> 16; - int32_t r = ((int32_t)(value) ) >> 16; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 16, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 16, 8); /* g */ - dst[2] = 0; /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_g16r16_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[1], 8, 16)) << 16) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 16)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 16)) & 0xffff) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 16)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g16r16_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value) ) >> 16; - int32_t r = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value << 16) ) >> 16; - int32_t r = ((int32_t)(value) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_g16r16_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[1], -32768, 32767)) << 16) ; - value |= (uint32_t)(((int16_t)CLAMP(src[0], -32768, 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)CLAMP(src[1], -32768, 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)CLAMP(src[0], -32768, 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_g16r16_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value) ) >> 16; - int32_t r = ((int32_t)(value << 16) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t g = ((int32_t)(value << 16) ) >> 16; - int32_t r = ((int32_t)(value) ) >> 16; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = 0; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_g16r16_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[1], 32767)) << 16) ; - value |= (uint32_t)(((int16_t)MIN2(src[0], 32767)) & 0xffff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int16_t)MIN2(src[1], 32767)) & 0xffff) ; - value |= (uint32_t)((uint32_t)((int16_t)MIN2(src[0], 32767)) << 16) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[3], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = (float)(a * (1.0f/0x7f)); /* a */ -#endif -} - -void -util_format_a8b8g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = _mesa_snorm_to_unorm(MAX2(a, 0), 8, 8); /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[3], 8, 8)) << 24) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[3], 8, 8)) & 0xff) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_a8b8g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[3], -128, 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)CLAMP(src[3], -128, 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_a8b8g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value) ) >> 24; - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t a = ((int32_t)(value << 24) ) >> 24; - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = (int)a; /* a */ -#endif -} - -void -util_format_a8b8g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[3], 127)) << 24) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)(((int8_t)MIN2(src[3], 127)) & 0xff) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_snorm_unpack_rgba_float(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - float *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8b8g8r8_snorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const float *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[2], -1.0f, 1.0f) * 0x7f)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)util_iround(CLAMP(src[1], -1.0f, 1.0f) * 0x7f)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)util_iround(CLAMP(src[0], -1.0f, 1.0f) * 0x7f)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_snorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - float *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (float)(r * (1.0f/0x7f)); /* r */ - dst[1] = (float)(g * (1.0f/0x7f)); /* g */ - dst[2] = (float)(b * (1.0f/0x7f)); /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8b8g8r8_snorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - uint8_t *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = _mesa_snorm_to_unorm(MAX2(r, 0), 8, 8); /* r */ - dst[1] = _mesa_snorm_to_unorm(MAX2(g, 0), 8, 8); /* g */ - dst[2] = _mesa_snorm_to_unorm(MAX2(b, 0), 8, 8); /* b */ - dst[3] = 255; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8b8g8r8_snorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((_mesa_unorm_to_snorm(src[0], 8, 8)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[2], 8, 8)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)((_mesa_unorm_to_snorm(src[1], 8, 8)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(_mesa_unorm_to_snorm(src[0], 8, 8)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_sint_unpack_signed(void *restrict dst_row, const uint8_t *restrict src, unsigned width) -{ - int *dst = dst_row; - for (unsigned x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif - src += 4; - dst += 4; - } -} - -void -util_format_x8b8g8r8_sint_pack_signed(uint8_t *restrict dst_row, unsigned dst_stride, const int *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const int *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)CLAMP(src[0], -128, 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[2], -128, 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)CLAMP(src[1], -128, 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)CLAMP(src[0], -128, 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8b8g8r8_sint_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, UNUSED unsigned i, UNUSED unsigned j) -{ - int *dst = in_dst; -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 8) ) >> 24; - int32_t g = ((int32_t)(value << 16) ) >> 24; - int32_t r = ((int32_t)(value << 24) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#else - uint32_t value; - memcpy(&value, src, sizeof value); - int32_t b = ((int32_t)(value << 16) ) >> 24; - int32_t g = ((int32_t)(value << 8) ) >> 24; - int32_t r = ((int32_t)(value) ) >> 24; - dst[0] = (int)r; /* r */ - dst[1] = (int)g; /* g */ - dst[2] = (int)b; /* b */ - dst[3] = 1; /* a */ -#endif -} - -void -util_format_x8b8g8r8_sint_pack_unsigned(uint8_t *restrict dst_row, unsigned dst_stride, const unsigned *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; y += 1) { - const unsigned *src = src_row; - uint8_t *dst = dst_row; - for(x = 0; x < width; x += 1) { -#if UTIL_ARCH_BIG_ENDIAN - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 8) ; - value |= (uint32_t)(((int8_t)MIN2(src[0], 127)) & 0xff) ; - memcpy(dst, &value, sizeof value); -#else - uint32_t value = 0; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[2], 127)) & 0xff) << 8) ; - value |= (uint32_t)((uint32_t)(((int8_t)MIN2(src[1], 127)) & 0xff) << 16) ; - value |= (uint32_t)((uint32_t)((int8_t)MIN2(src[0], 127)) << 24) ; - memcpy(dst, &value, sizeof value); -#endif - src += 4; - dst += 4; - } - dst_row += dst_stride; - src_row += src_stride/sizeof(*src_row); - } -} - -static const struct util_format_description -util_format_descriptions[PIPE_FORMAT_COUNT] = { - [PIPE_FORMAT_NONE] = { - PIPE_FORMAT_NONE, - "PIPE_FORMAT_NONE", - "none", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8A8_UNORM] = { - PIPE_FORMAT_B8G8R8A8_UNORM, - "PIPE_FORMAT_B8G8R8A8_UNORM", - "b8g8r8a8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8X8_UNORM] = { - PIPE_FORMAT_B8G8R8X8_UNORM, - "PIPE_FORMAT_B8G8R8X8_UNORM", - "b8g8r8x8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8X8_SNORM] = { - PIPE_FORMAT_B8G8R8X8_SNORM, - "PIPE_FORMAT_B8G8R8X8_SNORM", - "b8g8r8x8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8X8_UINT] = { - PIPE_FORMAT_B8G8R8X8_UINT, - "PIPE_FORMAT_B8G8R8X8_UINT", - "b8g8r8x8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8X8_SINT] = { - PIPE_FORMAT_B8G8R8X8_SINT, - "PIPE_FORMAT_B8G8R8X8_SINT", - "b8g8r8x8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8R8G8B8_UNORM] = { - PIPE_FORMAT_A8R8G8B8_UNORM, - "PIPE_FORMAT_A8R8G8B8_UNORM", - "a8r8g8b8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8R8G8B8_SNORM] = { - PIPE_FORMAT_A8R8G8B8_SNORM, - "PIPE_FORMAT_A8R8G8B8_SNORM", - "a8r8g8b8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8R8G8B8_SINT] = { - PIPE_FORMAT_A8R8G8B8_SINT, - "PIPE_FORMAT_A8R8G8B8_SINT", - "a8r8g8b8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X8R8G8B8_UNORM] = { - PIPE_FORMAT_X8R8G8B8_UNORM, - "PIPE_FORMAT_X8R8G8B8_UNORM", - "x8r8g8b8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X8R8G8B8_SNORM] = { - PIPE_FORMAT_X8R8G8B8_SNORM, - "PIPE_FORMAT_X8R8G8B8_SNORM", - "x8r8g8b8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X8R8G8B8_SINT] = { - PIPE_FORMAT_X8R8G8B8_SINT, - "PIPE_FORMAT_X8R8G8B8_SINT", - "x8r8g8b8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8B8G8R8_UNORM] = { - PIPE_FORMAT_A8B8G8R8_UNORM, - "PIPE_FORMAT_A8B8G8R8_UNORM", - "a8b8g8r8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X8B8G8R8_UNORM] = { - PIPE_FORMAT_X8B8G8R8_UNORM, - "PIPE_FORMAT_X8B8G8R8_UNORM", - "x8b8g8r8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8X8_UNORM] = { - PIPE_FORMAT_R8G8B8X8_UNORM, - "PIPE_FORMAT_R8G8B8X8_UNORM", - "r8g8b8x8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R5G5B5A1_UNORM] = { - PIPE_FORMAT_R5G5B5A1_UNORM, - "PIPE_FORMAT_R5G5B5A1_UNORM", - "r5g5b5a1_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 15}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 15} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R5G5B5X1_UNORM] = { - PIPE_FORMAT_R5G5B5X1_UNORM, - "PIPE_FORMAT_R5G5B5X1_UNORM", - "r5g5b5x1_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 15}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 15} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B5G5R5X1_UNORM] = { - PIPE_FORMAT_B5G5R5X1_UNORM, - "PIPE_FORMAT_B5G5R5X1_UNORM", - "b5g5r5x1_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 15}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 15} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B5G5R5A1_UNORM] = { - PIPE_FORMAT_B5G5R5A1_UNORM, - "PIPE_FORMAT_B5G5R5A1_UNORM", - "b5g5r5a1_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 15}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 10}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 15} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X1B5G5R5_UNORM] = { - PIPE_FORMAT_X1B5G5R5_UNORM, - "PIPE_FORMAT_X1B5G5R5_UNORM", - "x1b5g5r5_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A1R5G5B5_UNORM] = { - PIPE_FORMAT_A1R5G5B5_UNORM, - "PIPE_FORMAT_A1R5G5B5_UNORM", - "a1r5g5b5_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X1R5G5B5_UNORM] = { - PIPE_FORMAT_X1R5G5B5_UNORM, - "PIPE_FORMAT_X1R5G5B5_UNORM", - "x1r5g5b5_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 1, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A1B5G5R5_UNORM] = { - PIPE_FORMAT_A1B5G5R5_UNORM, - "PIPE_FORMAT_A1B5G5R5_UNORM", - "a1b5g5r5_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 1, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 1}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 6}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R4G4B4A4_UNORM] = { - PIPE_FORMAT_R4G4B4A4_UNORM, - "PIPE_FORMAT_R4G4B4A4_UNORM", - "r4g4b4a4_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R4G4B4X4_UNORM] = { - PIPE_FORMAT_R4G4B4X4_UNORM, - "PIPE_FORMAT_R4G4B4X4_UNORM", - "r4g4b4x4_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 4, 12}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 4, 12} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B4G4R4A4_UNORM] = { - PIPE_FORMAT_B4G4R4A4_UNORM, - "PIPE_FORMAT_B4G4R4A4_UNORM", - "b4g4r4a4_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B4G4R4X4_UNORM] = { - PIPE_FORMAT_B4G4R4X4_UNORM, - "PIPE_FORMAT_B4G4R4X4_UNORM", - "b4g4r4x4_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 4, 12}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 4, 12} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A4R4G4B4_UNORM] = { - PIPE_FORMAT_A4R4G4B4_UNORM, - "PIPE_FORMAT_A4R4G4B4_UNORM", - "a4r4g4b4_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A4B4G4R4_UNORM] = { - PIPE_FORMAT_A4B4G4R4_UNORM, - "PIPE_FORMAT_A4B4G4R4_UNORM", - "a4b4g4r4_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 12} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R5G6B5_UNORM] = { - PIPE_FORMAT_R5G6B5_UNORM, - "PIPE_FORMAT_R5G6B5_UNORM", - "r5g6b5_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B5G6R5_UNORM] = { - PIPE_FORMAT_B5G6R5_UNORM, - "PIPE_FORMAT_B5G6R5_UNORM", - "b5g6r5_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10A2_UNORM] = { - PIPE_FORMAT_R10G10B10A2_UNORM, - "PIPE_FORMAT_R10G10B10A2_UNORM", - "r10g10b10a2_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10X2_UNORM] = { - PIPE_FORMAT_R10G10B10X2_UNORM, - "PIPE_FORMAT_R10G10B10X2_UNORM", - "r10g10b10x2_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10A2_UNORM] = { - PIPE_FORMAT_B10G10R10A2_UNORM, - "PIPE_FORMAT_B10G10R10A2_UNORM", - "b10g10r10a2_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A2R10G10B10_UNORM] = { - PIPE_FORMAT_A2R10G10B10_UNORM, - "PIPE_FORMAT_A2R10G10B10_UNORM", - "a2r10g10b10_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 22}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 12}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 2}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 2}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 12}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 22} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A2B10G10R10_UNORM] = { - PIPE_FORMAT_A2B10G10R10_UNORM, - "PIPE_FORMAT_A2B10G10R10_UNORM", - "a2b10g10r10_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 22}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 12}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 2}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 2}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 12}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 22} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R3G3B2_UNORM] = { - PIPE_FORMAT_R3G3B2_UNORM, - "PIPE_FORMAT_R3G3B2_UNORM", - "r3g3b2_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 6}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 3}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 3}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 6}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B2G3R3_UNORM] = { - PIPE_FORMAT_B2G3R3_UNORM, - "PIPE_FORMAT_B2G3R3_UNORM", - "b2g3r3_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 5}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 2}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 2}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 3, 5}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8_UNORM] = { - PIPE_FORMAT_L8_UNORM, - "PIPE_FORMAT_L8_UNORM", - "l8_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8_UNORM] = { - PIPE_FORMAT_A8_UNORM, - "PIPE_FORMAT_A8_UNORM", - "a8_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I8_UNORM] = { - PIPE_FORMAT_I8_UNORM, - "PIPE_FORMAT_I8_UNORM", - "i8_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L4A4_UNORM] = { - PIPE_FORMAT_L4A4_UNORM, - "PIPE_FORMAT_L4A4_UNORM", - "l4a4_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* y = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8A8_UNORM] = { - PIPE_FORMAT_L8A8_UNORM, - "PIPE_FORMAT_L8A8_UNORM", - "l8a8_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16_UNORM] = { - PIPE_FORMAT_L16_UNORM, - "PIPE_FORMAT_L16_UNORM", - "l16_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A16_UNORM] = { - PIPE_FORMAT_A16_UNORM, - "PIPE_FORMAT_A16_UNORM", - "a16_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I16_UNORM] = { - PIPE_FORMAT_I16_UNORM, - "PIPE_FORMAT_I16_UNORM", - "i16_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16A16_UNORM] = { - PIPE_FORMAT_L16A16_UNORM, - "PIPE_FORMAT_L16A16_UNORM", - "l16a16_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8_SNORM] = { - PIPE_FORMAT_A8_SNORM, - "PIPE_FORMAT_A8_SNORM", - "a8_snorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8_SNORM] = { - PIPE_FORMAT_L8_SNORM, - "PIPE_FORMAT_L8_SNORM", - "l8_snorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8A8_SNORM] = { - PIPE_FORMAT_L8A8_SNORM, - "PIPE_FORMAT_L8A8_SNORM", - "l8a8_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I8_SNORM] = { - PIPE_FORMAT_I8_SNORM, - "PIPE_FORMAT_I8_SNORM", - "i8_snorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A16_SNORM] = { - PIPE_FORMAT_A16_SNORM, - "PIPE_FORMAT_A16_SNORM", - "a16_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16_SNORM] = { - PIPE_FORMAT_L16_SNORM, - "PIPE_FORMAT_L16_SNORM", - "l16_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16A16_SNORM] = { - PIPE_FORMAT_L16A16_SNORM, - "PIPE_FORMAT_L16A16_SNORM", - "l16a16_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I16_SNORM] = { - PIPE_FORMAT_I16_SNORM, - "PIPE_FORMAT_I16_SNORM", - "i16_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A16_FLOAT] = { - PIPE_FORMAT_A16_FLOAT, - "PIPE_FORMAT_A16_FLOAT", - "a16_float", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16_FLOAT] = { - PIPE_FORMAT_L16_FLOAT, - "PIPE_FORMAT_L16_FLOAT", - "l16_float", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16A16_FLOAT] = { - PIPE_FORMAT_L16A16_FLOAT, - "PIPE_FORMAT_L16A16_FLOAT", - "l16a16_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* x = rgb */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I16_FLOAT] = { - PIPE_FORMAT_I16_FLOAT, - "PIPE_FORMAT_I16_FLOAT", - "i16_float", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A32_FLOAT] = { - PIPE_FORMAT_A32_FLOAT, - "PIPE_FORMAT_A32_FLOAT", - "a32_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L32_FLOAT] = { - PIPE_FORMAT_L32_FLOAT, - "PIPE_FORMAT_L32_FLOAT", - "l32_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L32A32_FLOAT] = { - PIPE_FORMAT_L32A32_FLOAT, - "PIPE_FORMAT_L32A32_FLOAT", - "l32a32_float", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* x = rgb */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I32_FLOAT] = { - PIPE_FORMAT_I32_FLOAT, - "PIPE_FORMAT_I32_FLOAT", - "i32_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8_SRGB] = { - PIPE_FORMAT_L8_SRGB, - "PIPE_FORMAT_L8_SRGB", - "l8_srgb", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_X, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_R8_SRGB] = { - PIPE_FORMAT_R8_SRGB, - "PIPE_FORMAT_R8_SRGB", - "r8_srgb", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_0, /* sg */ - PIPE_SWIZZLE_0, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_L8A8_SRGB] = { - PIPE_FORMAT_L8A8_SRGB, - "PIPE_FORMAT_L8A8_SRGB", - "l8a8_srgb", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_X, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_X, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_R8G8_SRGB] = { - PIPE_FORMAT_R8G8_SRGB, - "PIPE_FORMAT_R8G8_SRGB", - "r8g8_srgb", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_0, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_0, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_R8G8B8_SRGB] = { - PIPE_FORMAT_R8G8B8_SRGB, - "PIPE_FORMAT_R8G8B8_SRGB", - "r8g8b8_srgb", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_B8G8R8_SRGB] = { - PIPE_FORMAT_B8G8R8_SRGB, - "PIPE_FORMAT_B8G8R8_SRGB", - "b8g8r8_srgb", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_R8G8B8A8_SRGB] = { - PIPE_FORMAT_R8G8B8A8_SRGB, - "PIPE_FORMAT_R8G8B8A8_SRGB", - "r8g8b8a8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_A8B8G8R8_SRGB] = { - PIPE_FORMAT_A8B8G8R8_SRGB, - "PIPE_FORMAT_A8B8G8R8_SRGB", - "a8b8g8r8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_Y, /* sb */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_Y, /* sb */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_X8B8G8R8_SRGB] = { - PIPE_FORMAT_X8B8G8R8_SRGB, - "PIPE_FORMAT_X8B8G8R8_SRGB", - "x8b8g8r8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_Y, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_Y, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_B8G8R8A8_SRGB] = { - PIPE_FORMAT_B8G8R8A8_SRGB, - "PIPE_FORMAT_B8G8R8A8_SRGB", - "b8g8r8a8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_B8G8R8X8_SRGB] = { - PIPE_FORMAT_B8G8R8X8_SRGB, - "PIPE_FORMAT_B8G8R8X8_SRGB", - "b8g8r8x8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_A8R8G8B8_SRGB] = { - PIPE_FORMAT_A8R8G8B8_SRGB, - "PIPE_FORMAT_A8R8G8B8_SRGB", - "a8r8g8b8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_W, /* sb */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_W, /* sb */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_X8R8G8B8_SRGB] = { - PIPE_FORMAT_X8R8G8B8_SRGB, - "PIPE_FORMAT_X8R8G8B8_SRGB", - "x8r8g8b8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_W, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* sr */ - PIPE_SWIZZLE_Z, /* sg */ - PIPE_SWIZZLE_W, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_R8SG8SB8UX8U_NORM] = { - PIPE_FORMAT_R8SG8SB8UX8U_NORM, - "PIPE_FORMAT_R8SG8SB8UX8U_NORM", - "r8sg8sb8ux8u_norm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - true, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10SG10SB10SA2U_NORM] = { - PIPE_FORMAT_R10SG10SB10SA2U_NORM, - "PIPE_FORMAT_R10SG10SB10SA2U_NORM", - "r10sg10sb10sa2u_norm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - true, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R5SG5SB6U_NORM] = { - PIPE_FORMAT_R5SG5SB6U_NORM, - "PIPE_FORMAT_R5SG5SB6U_NORM", - "r5sg5sb6u_norm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - true, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 10}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 5, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 5, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 10}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_S8_UINT] = { - PIPE_FORMAT_S8_UINT, - "PIPE_FORMAT_S8_UINT", - "s8_uint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = s */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_NONE, /* z */ - PIPE_SWIZZLE_X, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z16_UNORM] = { - PIPE_FORMAT_Z16_UNORM, - "PIPE_FORMAT_Z16_UNORM", - "z16_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = z */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_NONE, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z16_UNORM_S8_UINT] = { - PIPE_FORMAT_Z16_UNORM_S8_UINT, - "PIPE_FORMAT_Z16_UNORM_S8_UINT", - "z16_unorm_s8_uint", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - true, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 8}, /* x = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* y = s */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* y = s */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z32_UNORM] = { - PIPE_FORMAT_Z32_UNORM, - "PIPE_FORMAT_Z32_UNORM", - "z32_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0}, /* x = z */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_NONE, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z32_FLOAT] = { - PIPE_FORMAT_Z32_FLOAT, - "PIPE_FORMAT_Z32_FLOAT", - "z32_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = z */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_NONE, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z24_UNORM_S8_UINT] = { - PIPE_FORMAT_Z24_UNORM_S8_UINT, - "PIPE_FORMAT_Z24_UNORM_S8_UINT", - "z24_unorm_s8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - true, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = s */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 0}, /* y = z */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 0}, /* x = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* y = s */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* z */ - PIPE_SWIZZLE_X, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_S8_UINT_Z24_UNORM] = { - PIPE_FORMAT_S8_UINT_Z24_UNORM, - "PIPE_FORMAT_S8_UINT_Z24_UNORM", - "s8_uint_z24_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - true, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 8}, /* x = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* y = s */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = s */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 8}, /* y = z */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_Y, /* z */ - PIPE_SWIZZLE_X, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_X24S8_UINT] = { - PIPE_FORMAT_X24S8_UINT, - "PIPE_FORMAT_X24S8_UINT", - "x24s8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = s */ - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 0}, /* y = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* y = s */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_NONE, /* z */ - PIPE_SWIZZLE_X, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_NONE, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_S8X24_UINT] = { - PIPE_FORMAT_S8X24_UINT, - "PIPE_FORMAT_S8X24_UINT", - "s8x24_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 8}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* y = s */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = s */ - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 8}, /* y = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_NONE, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_NONE, /* z */ - PIPE_SWIZZLE_X, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z24X8_UNORM] = { - PIPE_FORMAT_Z24X8_UNORM, - "PIPE_FORMAT_Z24X8_UNORM", - "z24x8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 0}, /* y = z */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 0}, /* x = z */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* y = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* z */ - PIPE_SWIZZLE_NONE, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_NONE, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_X8Z24_UNORM] = { - PIPE_FORMAT_X8Z24_UNORM, - "PIPE_FORMAT_X8Z24_UNORM", - "x8z24_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 8}, /* x = z */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* y = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 24, 8}, /* y = z */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_NONE, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_Y, /* z */ - PIPE_SWIZZLE_NONE, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT] = { - PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, - "PIPE_FORMAT_Z32_FLOAT_S8X24_UINT", - "z32_float_s8x24_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - true, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* x = z */ - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 8}, /* y = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* z = s */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 32}, /* y = s */ - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 40}, /* z = x */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_Z, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_X, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_X32_S8X24_UINT] = { - PIPE_FORMAT_X32_S8X24_UINT, - "PIPE_FORMAT_X32_S8X24_UINT", - "x32_s8x24_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 32}, /* x = x */ - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 8}, /* y = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* z = s */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 32}, /* y = s */ - {UTIL_FORMAT_TYPE_VOID, false, false, 24, 40}, /* z = x */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_NONE, /* z */ - PIPE_SWIZZLE_Z, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#else - { - PIPE_SWIZZLE_NONE, /* z */ - PIPE_SWIZZLE_Y, /* s */ - PIPE_SWIZZLE_NONE, /* ignored */ - PIPE_SWIZZLE_NONE /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_ZS, - }, - - [PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8] = { - PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8, - "PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8", - "z24_unorm_s8_uint_as_r8g8b8a8", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_UYVY] = { - PIPE_FORMAT_UYVY, - "PIPE_FORMAT_UYVY", - "uyvy", - {2, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 4, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = w */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = w */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, -#else - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_YUYV] = { - PIPE_FORMAT_YUYV, - "PIPE_FORMAT_YUYV", - "yuyv", - {2, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 4, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = w */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = w */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, -#else - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_AYUV] = { - PIPE_FORMAT_AYUV, - "PIPE_FORMAT_AYUV", - "ayuv", - {4, 4, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_XYUV] = { - PIPE_FORMAT_XYUV, - "PIPE_FORMAT_XYUV", - "xyuv", - {4, 4, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_R8G8_B8G8_UNORM] = { - PIPE_FORMAT_R8G8_B8G8_UNORM, - "PIPE_FORMAT_R8G8_B8G8_UNORM", - "r8g8_b8g8_unorm", - {2, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G8R8_G8B8_UNORM] = { - PIPE_FORMAT_G8R8_G8B8_UNORM, - "PIPE_FORMAT_G8R8_G8B8_UNORM", - "g8r8_g8b8_unorm", - {2, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G8R8_B8R8_UNORM] = { - PIPE_FORMAT_G8R8_B8R8_UNORM, - "PIPE_FORMAT_G8R8_B8R8_UNORM", - "g8r8_b8r8_unorm", - {2, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8_R8B8_UNORM] = { - PIPE_FORMAT_R8G8_R8B8_UNORM, - "PIPE_FORMAT_R8G8_R8B8_UNORM", - "r8g8_r8b8_unorm", - {2, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R11G11B10_FLOAT] = { - PIPE_FORMAT_R11G11B10_FLOAT, - "PIPE_FORMAT_R11G11B10_FLOAT", - "r11g11b10_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 3, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 11, 21}, /* x = x */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 11, 10}, /* y = y */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 10, 0}, /* z = z */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 11, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 11, 11}, /* y = y */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 10, 22}, /* z = z */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R9G9B9E5_FLOAT] = { - PIPE_FORMAT_R9G9B9E5_FLOAT, - "PIPE_FORMAT_R9G9B9E5_FLOAT", - "r9g9b9e5_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 4, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 9, 23}, /* x = x */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 9, 14}, /* y = y */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 9, 5}, /* z = z */ - {UTIL_FORMAT_TYPE_VOID, false, false, 5, 0} /* w = w */ - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 9, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 9, 9}, /* y = y */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 9, 18}, /* z = z */ - {UTIL_FORMAT_TYPE_VOID, false, false, 5, 27} /* w = w */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R1_UNORM] = { - PIPE_FORMAT_R1_UNORM, - "PIPE_FORMAT_R1_UNORM", - "r1_unorm", - {8, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8Bx_SNORM] = { - PIPE_FORMAT_R8G8Bx_SNORM, - "PIPE_FORMAT_R8G8Bx_SNORM", - "r8g8bx_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 2, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* y = y */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = y */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_DXT1_RGB] = { - PIPE_FORMAT_DXT1_RGB, - "PIPE_FORMAT_DXT1_RGB", - "dxt1_rgb", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_DXT1_RGBA] = { - PIPE_FORMAT_DXT1_RGBA, - "PIPE_FORMAT_DXT1_RGBA", - "dxt1_rgba", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_DXT3_RGBA] = { - PIPE_FORMAT_DXT3_RGBA, - "PIPE_FORMAT_DXT3_RGBA", - "dxt3_rgba", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_DXT5_RGBA] = { - PIPE_FORMAT_DXT5_RGBA, - "PIPE_FORMAT_DXT5_RGBA", - "dxt5_rgba", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_DXT1_SRGB] = { - PIPE_FORMAT_DXT1_SRGB, - "PIPE_FORMAT_DXT1_SRGB", - "dxt1_srgb", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_DXT1_SRGBA] = { - PIPE_FORMAT_DXT1_SRGBA, - "PIPE_FORMAT_DXT1_SRGBA", - "dxt1_srgba", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_DXT3_SRGBA] = { - PIPE_FORMAT_DXT3_SRGBA, - "PIPE_FORMAT_DXT3_SRGBA", - "dxt3_srgba", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_DXT5_SRGBA] = { - PIPE_FORMAT_DXT5_SRGBA, - "PIPE_FORMAT_DXT5_SRGBA", - "dxt5_srgba", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_S3TC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_FXT1_RGB] = { - PIPE_FORMAT_FXT1_RGB, - "PIPE_FORMAT_FXT1_RGB", - "fxt1_rgb", - {8, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_FXT1, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_FXT1_RGBA] = { - PIPE_FORMAT_FXT1_RGBA, - "PIPE_FORMAT_FXT1_RGBA", - "fxt1_rgba", - {8, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_FXT1, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_RGTC1_UNORM] = { - PIPE_FORMAT_RGTC1_UNORM, - "PIPE_FORMAT_RGTC1_UNORM", - "rgtc1_unorm", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_RGTC1_SNORM] = { - PIPE_FORMAT_RGTC1_SNORM, - "PIPE_FORMAT_RGTC1_SNORM", - "rgtc1_snorm", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_RGTC2_UNORM] = { - PIPE_FORMAT_RGTC2_UNORM, - "PIPE_FORMAT_RGTC2_UNORM", - "rgtc2_unorm", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_RGTC2_SNORM] = { - PIPE_FORMAT_RGTC2_SNORM, - "PIPE_FORMAT_RGTC2_SNORM", - "rgtc2_snorm", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_LATC1_UNORM] = { - PIPE_FORMAT_LATC1_UNORM, - "PIPE_FORMAT_LATC1_UNORM", - "latc1_unorm", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_LATC1_SNORM] = { - PIPE_FORMAT_LATC1_SNORM, - "PIPE_FORMAT_LATC1_SNORM", - "latc1_snorm", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_LATC2_UNORM] = { - PIPE_FORMAT_LATC2_UNORM, - "PIPE_FORMAT_LATC2_UNORM", - "latc2_unorm", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_LATC2_SNORM] = { - PIPE_FORMAT_LATC2_SNORM, - "PIPE_FORMAT_LATC2_SNORM", - "latc2_snorm", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_RGTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC1_RGB8] = { - PIPE_FORMAT_ETC1_RGB8, - "PIPE_FORMAT_ETC1_RGB8", - "etc1_rgb8", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC2_RGB8] = { - PIPE_FORMAT_ETC2_RGB8, - "PIPE_FORMAT_ETC2_RGB8", - "etc2_rgb8", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC2_SRGB8] = { - PIPE_FORMAT_ETC2_SRGB8, - "PIPE_FORMAT_ETC2_SRGB8", - "etc2_srgb8", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ETC2_RGB8A1] = { - PIPE_FORMAT_ETC2_RGB8A1, - "PIPE_FORMAT_ETC2_RGB8A1", - "etc2_rgb8a1", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC2_SRGB8A1] = { - PIPE_FORMAT_ETC2_SRGB8A1, - "PIPE_FORMAT_ETC2_SRGB8A1", - "etc2_srgb8a1", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ETC2_RGBA8] = { - PIPE_FORMAT_ETC2_RGBA8, - "PIPE_FORMAT_ETC2_RGBA8", - "etc2_rgba8", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC2_SRGBA8] = { - PIPE_FORMAT_ETC2_SRGBA8, - "PIPE_FORMAT_ETC2_SRGBA8", - "etc2_srgba8", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ETC2_R11_UNORM] = { - PIPE_FORMAT_ETC2_R11_UNORM, - "PIPE_FORMAT_ETC2_R11_UNORM", - "etc2_r11_unorm", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC2_R11_SNORM] = { - PIPE_FORMAT_ETC2_R11_SNORM, - "PIPE_FORMAT_ETC2_R11_SNORM", - "etc2_r11_snorm", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC2_RG11_UNORM] = { - PIPE_FORMAT_ETC2_RG11_UNORM, - "PIPE_FORMAT_ETC2_RG11_UNORM", - "etc2_rg11_unorm", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ETC2_RG11_SNORM] = { - PIPE_FORMAT_ETC2_RG11_SNORM, - "PIPE_FORMAT_ETC2_RG11_SNORM", - "etc2_rg11_snorm", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ETC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_BPTC_RGBA_UNORM] = { - PIPE_FORMAT_BPTC_RGBA_UNORM, - "PIPE_FORMAT_BPTC_RGBA_UNORM", - "bptc_rgba_unorm", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_BPTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_BPTC_SRGBA] = { - PIPE_FORMAT_BPTC_SRGBA, - "PIPE_FORMAT_BPTC_SRGBA", - "bptc_srgba", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_BPTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_BPTC_RGB_FLOAT] = { - PIPE_FORMAT_BPTC_RGB_FLOAT, - "PIPE_FORMAT_BPTC_RGB_FLOAT", - "bptc_rgb_float", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_BPTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_BPTC_RGB_UFLOAT] = { - PIPE_FORMAT_BPTC_RGB_UFLOAT, - "PIPE_FORMAT_BPTC_RGB_UFLOAT", - "bptc_rgb_ufloat", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_BPTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_4x4] = { - PIPE_FORMAT_ASTC_4x4, - "PIPE_FORMAT_ASTC_4x4", - "astc_4x4", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_5x4] = { - PIPE_FORMAT_ASTC_5x4, - "PIPE_FORMAT_ASTC_5x4", - "astc_5x4", - {5, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_5x5] = { - PIPE_FORMAT_ASTC_5x5, - "PIPE_FORMAT_ASTC_5x5", - "astc_5x5", - {5, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_6x5] = { - PIPE_FORMAT_ASTC_6x5, - "PIPE_FORMAT_ASTC_6x5", - "astc_6x5", - {6, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_6x6] = { - PIPE_FORMAT_ASTC_6x6, - "PIPE_FORMAT_ASTC_6x6", - "astc_6x6", - {6, 6, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_8x5] = { - PIPE_FORMAT_ASTC_8x5, - "PIPE_FORMAT_ASTC_8x5", - "astc_8x5", - {8, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_8x6] = { - PIPE_FORMAT_ASTC_8x6, - "PIPE_FORMAT_ASTC_8x6", - "astc_8x6", - {8, 6, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_8x8] = { - PIPE_FORMAT_ASTC_8x8, - "PIPE_FORMAT_ASTC_8x8", - "astc_8x8", - {8, 8, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_10x5] = { - PIPE_FORMAT_ASTC_10x5, - "PIPE_FORMAT_ASTC_10x5", - "astc_10x5", - {10, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_10x6] = { - PIPE_FORMAT_ASTC_10x6, - "PIPE_FORMAT_ASTC_10x6", - "astc_10x6", - {10, 6, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_10x8] = { - PIPE_FORMAT_ASTC_10x8, - "PIPE_FORMAT_ASTC_10x8", - "astc_10x8", - {10, 8, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_10x10] = { - PIPE_FORMAT_ASTC_10x10, - "PIPE_FORMAT_ASTC_10x10", - "astc_10x10", - {10, 10, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_12x10] = { - PIPE_FORMAT_ASTC_12x10, - "PIPE_FORMAT_ASTC_12x10", - "astc_12x10", - {12, 10, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_12x12] = { - PIPE_FORMAT_ASTC_12x12, - "PIPE_FORMAT_ASTC_12x12", - "astc_12x12", - {12, 12, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_4x4_SRGB] = { - PIPE_FORMAT_ASTC_4x4_SRGB, - "PIPE_FORMAT_ASTC_4x4_SRGB", - "astc_4x4_srgb", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_5x4_SRGB] = { - PIPE_FORMAT_ASTC_5x4_SRGB, - "PIPE_FORMAT_ASTC_5x4_SRGB", - "astc_5x4_srgb", - {5, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_5x5_SRGB] = { - PIPE_FORMAT_ASTC_5x5_SRGB, - "PIPE_FORMAT_ASTC_5x5_SRGB", - "astc_5x5_srgb", - {5, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_6x5_SRGB] = { - PIPE_FORMAT_ASTC_6x5_SRGB, - "PIPE_FORMAT_ASTC_6x5_SRGB", - "astc_6x5_srgb", - {6, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_6x6_SRGB] = { - PIPE_FORMAT_ASTC_6x6_SRGB, - "PIPE_FORMAT_ASTC_6x6_SRGB", - "astc_6x6_srgb", - {6, 6, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_8x5_SRGB] = { - PIPE_FORMAT_ASTC_8x5_SRGB, - "PIPE_FORMAT_ASTC_8x5_SRGB", - "astc_8x5_srgb", - {8, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_8x6_SRGB] = { - PIPE_FORMAT_ASTC_8x6_SRGB, - "PIPE_FORMAT_ASTC_8x6_SRGB", - "astc_8x6_srgb", - {8, 6, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_8x8_SRGB] = { - PIPE_FORMAT_ASTC_8x8_SRGB, - "PIPE_FORMAT_ASTC_8x8_SRGB", - "astc_8x8_srgb", - {8, 8, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_10x5_SRGB] = { - PIPE_FORMAT_ASTC_10x5_SRGB, - "PIPE_FORMAT_ASTC_10x5_SRGB", - "astc_10x5_srgb", - {10, 5, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_10x6_SRGB] = { - PIPE_FORMAT_ASTC_10x6_SRGB, - "PIPE_FORMAT_ASTC_10x6_SRGB", - "astc_10x6_srgb", - {10, 6, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_10x8_SRGB] = { - PIPE_FORMAT_ASTC_10x8_SRGB, - "PIPE_FORMAT_ASTC_10x8_SRGB", - "astc_10x8_srgb", - {10, 8, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_10x10_SRGB] = { - PIPE_FORMAT_ASTC_10x10_SRGB, - "PIPE_FORMAT_ASTC_10x10_SRGB", - "astc_10x10_srgb", - {10, 10, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_12x10_SRGB] = { - PIPE_FORMAT_ASTC_12x10_SRGB, - "PIPE_FORMAT_ASTC_12x10_SRGB", - "astc_12x10_srgb", - {12, 10, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_12x12_SRGB] = { - PIPE_FORMAT_ASTC_12x12_SRGB, - "PIPE_FORMAT_ASTC_12x12_SRGB", - "astc_12x12_srgb", - {12, 12, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_3x3x3] = { - PIPE_FORMAT_ASTC_3x3x3, - "PIPE_FORMAT_ASTC_3x3x3", - "astc_3x3x3", - {3, 3, 3, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_4x3x3] = { - PIPE_FORMAT_ASTC_4x3x3, - "PIPE_FORMAT_ASTC_4x3x3", - "astc_4x3x3", - {4, 3, 3, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_4x4x3] = { - PIPE_FORMAT_ASTC_4x4x3, - "PIPE_FORMAT_ASTC_4x4x3", - "astc_4x4x3", - {4, 4, 3, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_4x4x4] = { - PIPE_FORMAT_ASTC_4x4x4, - "PIPE_FORMAT_ASTC_4x4x4", - "astc_4x4x4", - {4, 4, 4, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_5x4x4] = { - PIPE_FORMAT_ASTC_5x4x4, - "PIPE_FORMAT_ASTC_5x4x4", - "astc_5x4x4", - {5, 4, 4, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_5x5x4] = { - PIPE_FORMAT_ASTC_5x5x4, - "PIPE_FORMAT_ASTC_5x5x4", - "astc_5x5x4", - {5, 5, 4, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_5x5x5] = { - PIPE_FORMAT_ASTC_5x5x5, - "PIPE_FORMAT_ASTC_5x5x5", - "astc_5x5x5", - {5, 5, 5, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_6x5x5] = { - PIPE_FORMAT_ASTC_6x5x5, - "PIPE_FORMAT_ASTC_6x5x5", - "astc_6x5x5", - {6, 5, 5, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_6x6x5] = { - PIPE_FORMAT_ASTC_6x6x5, - "PIPE_FORMAT_ASTC_6x6x5", - "astc_6x6x5", - {6, 6, 5, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_6x6x6] = { - PIPE_FORMAT_ASTC_6x6x6, - "PIPE_FORMAT_ASTC_6x6x6", - "astc_6x6x6", - {6, 6, 6, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ASTC_3x3x3_SRGB] = { - PIPE_FORMAT_ASTC_3x3x3_SRGB, - "PIPE_FORMAT_ASTC_3x3x3_SRGB", - "astc_3x3x3_srgb", - {3, 3, 3, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_4x3x3_SRGB] = { - PIPE_FORMAT_ASTC_4x3x3_SRGB, - "PIPE_FORMAT_ASTC_4x3x3_SRGB", - "astc_4x3x3_srgb", - {4, 3, 3, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_4x4x3_SRGB] = { - PIPE_FORMAT_ASTC_4x4x3_SRGB, - "PIPE_FORMAT_ASTC_4x4x3_SRGB", - "astc_4x4x3_srgb", - {4, 4, 3, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_4x4x4_SRGB] = { - PIPE_FORMAT_ASTC_4x4x4_SRGB, - "PIPE_FORMAT_ASTC_4x4x4_SRGB", - "astc_4x4x4_srgb", - {4, 4, 4, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_5x4x4_SRGB] = { - PIPE_FORMAT_ASTC_5x4x4_SRGB, - "PIPE_FORMAT_ASTC_5x4x4_SRGB", - "astc_5x4x4_srgb", - {5, 4, 4, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_5x5x4_SRGB] = { - PIPE_FORMAT_ASTC_5x5x4_SRGB, - "PIPE_FORMAT_ASTC_5x5x4_SRGB", - "astc_5x5x4_srgb", - {5, 5, 4, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_5x5x5_SRGB] = { - PIPE_FORMAT_ASTC_5x5x5_SRGB, - "PIPE_FORMAT_ASTC_5x5x5_SRGB", - "astc_5x5x5_srgb", - {5, 5, 5, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_6x5x5_SRGB] = { - PIPE_FORMAT_ASTC_6x5x5_SRGB, - "PIPE_FORMAT_ASTC_6x5x5_SRGB", - "astc_6x5x5_srgb", - {6, 5, 5, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_6x6x5_SRGB] = { - PIPE_FORMAT_ASTC_6x6x5_SRGB, - "PIPE_FORMAT_ASTC_6x6x5_SRGB", - "astc_6x6x5_srgb", - {6, 6, 5, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ASTC_6x6x6_SRGB] = { - PIPE_FORMAT_ASTC_6x6x6_SRGB, - "PIPE_FORMAT_ASTC_6x6x6_SRGB", - "astc_6x6x6_srgb", - {6, 6, 6, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ASTC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_ATC_RGB] = { - PIPE_FORMAT_ATC_RGB, - "PIPE_FORMAT_ATC_RGB", - "atc_rgb", - {4, 4, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_ATC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ATC_RGBA_EXPLICIT] = { - PIPE_FORMAT_ATC_RGBA_EXPLICIT, - "PIPE_FORMAT_ATC_RGBA_EXPLICIT", - "atc_rgba_explicit", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ATC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_ATC_RGBA_INTERPOLATED] = { - PIPE_FORMAT_ATC_RGBA_INTERPOLATED, - "PIPE_FORMAT_ATC_RGBA_INTERPOLATED", - "atc_rgba_interpolated", - {4, 4, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_ATC, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 128, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64_FLOAT] = { - PIPE_FORMAT_R64_FLOAT, - "PIPE_FORMAT_R64_FLOAT", - "r64_float", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64_FLOAT] = { - PIPE_FORMAT_R64G64_FLOAT, - "PIPE_FORMAT_R64G64_FLOAT", - "r64g64_float", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 64}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64B64_FLOAT] = { - PIPE_FORMAT_R64G64B64_FLOAT, - "PIPE_FORMAT_R64G64B64_FLOAT", - "r64g64b64_float", - {1, 1, 1, 192}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 128}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 128}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64B64A64_FLOAT] = { - PIPE_FORMAT_R64G64B64A64_FLOAT, - "PIPE_FORMAT_R64G64B64A64_FLOAT", - "r64g64b64a64_float", - {1, 1, 1, 256}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 192}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 128}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 128}, /* z = b */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 64, 192} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_FLOAT] = { - PIPE_FORMAT_R32_FLOAT, - "PIPE_FORMAT_R32_FLOAT", - "r32_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_FLOAT] = { - PIPE_FORMAT_R32G32_FLOAT, - "PIPE_FORMAT_R32G32_FLOAT", - "r32g32_float", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_FLOAT] = { - PIPE_FORMAT_R32G32B32_FLOAT, - "PIPE_FORMAT_R32G32B32_FLOAT", - "r32g32b32_float", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_FLOAT] = { - PIPE_FORMAT_R32G32B32A32_FLOAT, - "PIPE_FORMAT_R32G32B32A32_FLOAT", - "r32g32b32a32_float", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_UNORM] = { - PIPE_FORMAT_R32_UNORM, - "PIPE_FORMAT_R32_UNORM", - "r32_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_UNORM] = { - PIPE_FORMAT_R32G32_UNORM, - "PIPE_FORMAT_R32G32_UNORM", - "r32g32_unorm", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_UNORM] = { - PIPE_FORMAT_R32G32B32_UNORM, - "PIPE_FORMAT_R32G32B32_UNORM", - "r32g32b32_unorm", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_UNORM] = { - PIPE_FORMAT_R32G32B32A32_UNORM, - "PIPE_FORMAT_R32G32B32A32_UNORM", - "r32g32b32a32_unorm", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_USCALED] = { - PIPE_FORMAT_R32_USCALED, - "PIPE_FORMAT_R32_USCALED", - "r32_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_USCALED] = { - PIPE_FORMAT_R32G32_USCALED, - "PIPE_FORMAT_R32G32_USCALED", - "r32g32_uscaled", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_USCALED] = { - PIPE_FORMAT_R32G32B32_USCALED, - "PIPE_FORMAT_R32G32B32_USCALED", - "r32g32b32_uscaled", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_USCALED] = { - PIPE_FORMAT_R32G32B32A32_USCALED, - "PIPE_FORMAT_R32G32B32A32_USCALED", - "r32g32b32a32_uscaled", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_SNORM] = { - PIPE_FORMAT_R32_SNORM, - "PIPE_FORMAT_R32_SNORM", - "r32_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_SNORM] = { - PIPE_FORMAT_R32G32_SNORM, - "PIPE_FORMAT_R32G32_SNORM", - "r32g32_snorm", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_SNORM] = { - PIPE_FORMAT_R32G32B32_SNORM, - "PIPE_FORMAT_R32G32B32_SNORM", - "r32g32b32_snorm", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_SNORM] = { - PIPE_FORMAT_R32G32B32A32_SNORM, - "PIPE_FORMAT_R32G32B32A32_SNORM", - "r32g32b32a32_snorm", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_SSCALED] = { - PIPE_FORMAT_R32_SSCALED, - "PIPE_FORMAT_R32_SSCALED", - "r32_sscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_SSCALED] = { - PIPE_FORMAT_R32G32_SSCALED, - "PIPE_FORMAT_R32G32_SSCALED", - "r32g32_sscaled", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_SSCALED] = { - PIPE_FORMAT_R32G32B32_SSCALED, - "PIPE_FORMAT_R32G32B32_SSCALED", - "r32g32b32_sscaled", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_SSCALED] = { - PIPE_FORMAT_R32G32B32A32_SSCALED, - "PIPE_FORMAT_R32G32B32A32_SSCALED", - "r32g32b32a32_sscaled", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16_FLOAT] = { - PIPE_FORMAT_R16_FLOAT, - "PIPE_FORMAT_R16_FLOAT", - "r16_float", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16_FLOAT] = { - PIPE_FORMAT_R16G16_FLOAT, - "PIPE_FORMAT_R16G16_FLOAT", - "r16g16_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16_FLOAT] = { - PIPE_FORMAT_R16G16B16_FLOAT, - "PIPE_FORMAT_R16G16B16_FLOAT", - "r16g16b16_float", - {1, 1, 1, 48}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 32}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16A16_FLOAT] = { - PIPE_FORMAT_R16G16B16A16_FLOAT, - "PIPE_FORMAT_R16G16B16A16_FLOAT", - "r16g16b16a16_float", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 48} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16_UNORM] = { - PIPE_FORMAT_R16_UNORM, - "PIPE_FORMAT_R16_UNORM", - "r16_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16_UNORM] = { - PIPE_FORMAT_R16G16_UNORM, - "PIPE_FORMAT_R16G16_UNORM", - "r16g16_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16_UNORM] = { - PIPE_FORMAT_R16G16B16_UNORM, - "PIPE_FORMAT_R16G16B16_UNORM", - "r16g16b16_unorm", - {1, 1, 1, 48}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16A16_UNORM] = { - PIPE_FORMAT_R16G16B16A16_UNORM, - "PIPE_FORMAT_R16G16B16A16_UNORM", - "r16g16b16a16_unorm", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 48} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16_USCALED] = { - PIPE_FORMAT_R16_USCALED, - "PIPE_FORMAT_R16_USCALED", - "r16_uscaled", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16_USCALED] = { - PIPE_FORMAT_R16G16_USCALED, - "PIPE_FORMAT_R16G16_USCALED", - "r16g16_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 16}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16_USCALED] = { - PIPE_FORMAT_R16G16B16_USCALED, - "PIPE_FORMAT_R16G16B16_USCALED", - "r16g16b16_uscaled", - {1, 1, 1, 48}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 32}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16A16_USCALED] = { - PIPE_FORMAT_R16G16B16A16_USCALED, - "PIPE_FORMAT_R16G16B16A16_USCALED", - "r16g16b16a16_uscaled", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 16, 48} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16_SNORM] = { - PIPE_FORMAT_R16_SNORM, - "PIPE_FORMAT_R16_SNORM", - "r16_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16_SNORM] = { - PIPE_FORMAT_R16G16_SNORM, - "PIPE_FORMAT_R16G16_SNORM", - "r16g16_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16_SNORM] = { - PIPE_FORMAT_R16G16B16_SNORM, - "PIPE_FORMAT_R16G16B16_SNORM", - "r16g16b16_snorm", - {1, 1, 1, 48}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 32}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16A16_SNORM] = { - PIPE_FORMAT_R16G16B16A16_SNORM, - "PIPE_FORMAT_R16G16B16A16_SNORM", - "r16g16b16a16_snorm", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 48} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16_SSCALED] = { - PIPE_FORMAT_R16_SSCALED, - "PIPE_FORMAT_R16_SSCALED", - "r16_sscaled", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16_SSCALED] = { - PIPE_FORMAT_R16G16_SSCALED, - "PIPE_FORMAT_R16G16_SSCALED", - "r16g16_sscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 16}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16_SSCALED] = { - PIPE_FORMAT_R16G16B16_SSCALED, - "PIPE_FORMAT_R16G16B16_SSCALED", - "r16g16b16_sscaled", - {1, 1, 1, 48}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 32}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16A16_SSCALED] = { - PIPE_FORMAT_R16G16B16A16_SSCALED, - "PIPE_FORMAT_R16G16B16A16_SSCALED", - "r16g16b16a16_sscaled", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 16, 48} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8_UNORM] = { - PIPE_FORMAT_R8_UNORM, - "PIPE_FORMAT_R8_UNORM", - "r8_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8_UNORM] = { - PIPE_FORMAT_R8G8_UNORM, - "PIPE_FORMAT_R8G8_UNORM", - "r8g8_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8_UNORM] = { - PIPE_FORMAT_R8G8B8_UNORM, - "PIPE_FORMAT_R8G8B8_UNORM", - "r8g8b8_unorm", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8_UNORM] = { - PIPE_FORMAT_B8G8R8_UNORM, - "PIPE_FORMAT_B8G8R8_UNORM", - "b8g8r8_unorm", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8A8_UNORM] = { - PIPE_FORMAT_R8G8B8A8_UNORM, - "PIPE_FORMAT_R8G8B8A8_UNORM", - "r8g8b8a8_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8_USCALED] = { - PIPE_FORMAT_R8_USCALED, - "PIPE_FORMAT_R8_USCALED", - "r8_uscaled", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8_USCALED] = { - PIPE_FORMAT_R8G8_USCALED, - "PIPE_FORMAT_R8G8_USCALED", - "r8g8_uscaled", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8_USCALED] = { - PIPE_FORMAT_R8G8B8_USCALED, - "PIPE_FORMAT_R8G8B8_USCALED", - "r8g8b8_uscaled", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8_USCALED] = { - PIPE_FORMAT_B8G8R8_USCALED, - "PIPE_FORMAT_B8G8R8_USCALED", - "b8g8r8_uscaled", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8A8_USCALED] = { - PIPE_FORMAT_R8G8B8A8_USCALED, - "PIPE_FORMAT_R8G8B8A8_USCALED", - "r8g8b8a8_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8A8_USCALED] = { - PIPE_FORMAT_B8G8R8A8_USCALED, - "PIPE_FORMAT_B8G8R8A8_USCALED", - "b8g8r8a8_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8B8G8R8_USCALED] = { - PIPE_FORMAT_A8B8G8R8_USCALED, - "PIPE_FORMAT_A8B8G8R8_USCALED", - "a8b8g8r8_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8_SNORM] = { - PIPE_FORMAT_R8_SNORM, - "PIPE_FORMAT_R8_SNORM", - "r8_snorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8_SNORM] = { - PIPE_FORMAT_R8G8_SNORM, - "PIPE_FORMAT_R8G8_SNORM", - "r8g8_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8_SNORM] = { - PIPE_FORMAT_R8G8B8_SNORM, - "PIPE_FORMAT_R8G8B8_SNORM", - "r8g8b8_snorm", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8_SNORM] = { - PIPE_FORMAT_B8G8R8_SNORM, - "PIPE_FORMAT_B8G8R8_SNORM", - "b8g8r8_snorm", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8A8_SNORM] = { - PIPE_FORMAT_R8G8B8A8_SNORM, - "PIPE_FORMAT_R8G8B8A8_SNORM", - "r8g8b8a8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8A8_SNORM] = { - PIPE_FORMAT_B8G8R8A8_SNORM, - "PIPE_FORMAT_B8G8R8A8_SNORM", - "b8g8r8a8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8_SSCALED] = { - PIPE_FORMAT_R8_SSCALED, - "PIPE_FORMAT_R8_SSCALED", - "r8_sscaled", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8_SSCALED] = { - PIPE_FORMAT_R8G8_SSCALED, - "PIPE_FORMAT_R8G8_SSCALED", - "r8g8_sscaled", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8_SSCALED] = { - PIPE_FORMAT_R8G8B8_SSCALED, - "PIPE_FORMAT_R8G8B8_SSCALED", - "r8g8b8_sscaled", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8_SSCALED] = { - PIPE_FORMAT_B8G8R8_SSCALED, - "PIPE_FORMAT_B8G8R8_SSCALED", - "b8g8r8_sscaled", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8A8_SSCALED] = { - PIPE_FORMAT_R8G8B8A8_SSCALED, - "PIPE_FORMAT_R8G8B8A8_SSCALED", - "r8g8b8a8_sscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8A8_SSCALED] = { - PIPE_FORMAT_B8G8R8A8_SSCALED, - "PIPE_FORMAT_B8G8R8A8_SSCALED", - "b8g8r8a8_sscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8B8G8R8_SSCALED] = { - PIPE_FORMAT_A8B8G8R8_SSCALED, - "PIPE_FORMAT_A8B8G8R8_SSCALED", - "a8b8g8r8_sscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_FIXED] = { - PIPE_FORMAT_R32_FIXED, - "PIPE_FORMAT_R32_FIXED", - "r32_fixed", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_FIXED] = { - PIPE_FORMAT_R32G32_FIXED, - "PIPE_FORMAT_R32G32_FIXED", - "r32g32_fixed", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_FIXED] = { - PIPE_FORMAT_R32G32B32_FIXED, - "PIPE_FORMAT_R32G32B32_FIXED", - "r32g32b32_fixed", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_FIXED] = { - PIPE_FORMAT_R32G32B32A32_FIXED, - "PIPE_FORMAT_R32G32B32A32_FIXED", - "r32g32b32a32_fixed", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_FIXED, false, false, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10X2_USCALED] = { - PIPE_FORMAT_R10G10B10X2_USCALED, - "PIPE_FORMAT_R10G10B10X2_USCALED", - "r10g10b10x2_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10X2_SNORM] = { - PIPE_FORMAT_R10G10B10X2_SNORM, - "PIPE_FORMAT_R10G10B10X2_SNORM", - "r10g10b10x2_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10X2_SINT] = { - PIPE_FORMAT_R10G10B10X2_SINT, - "PIPE_FORMAT_R10G10B10X2_SINT", - "r10g10b10x2_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_YV12] = { - PIPE_FORMAT_YV12, - "PIPE_FORMAT_YV12", - "yv12", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_YV16] = { - PIPE_FORMAT_YV16, - "PIPE_FORMAT_YV16", - "yv16", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_IYUV] = { - PIPE_FORMAT_IYUV, - "PIPE_FORMAT_IYUV", - "iyuv", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_NV12] = { - PIPE_FORMAT_NV12, - "PIPE_FORMAT_NV12", - "nv12", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_NV21] = { - PIPE_FORMAT_NV21, - "PIPE_FORMAT_NV21", - "nv21", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y8_400_UNORM] = { - PIPE_FORMAT_Y8_400_UNORM, - "PIPE_FORMAT_Y8_400_UNORM", - "y8_400_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_0, /* u */ - PIPE_SWIZZLE_0, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_R8_G8B8_420_UNORM] = { - PIPE_FORMAT_R8_G8B8_420_UNORM, - "PIPE_FORMAT_R8_G8B8_420_UNORM", - "r8_g8b8_420_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G8_B8R8_420_UNORM] = { - PIPE_FORMAT_G8_B8R8_420_UNORM, - "PIPE_FORMAT_G8_B8R8_420_UNORM", - "g8_b8r8_420_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G8_B8_R8_420_UNORM] = { - PIPE_FORMAT_G8_B8_R8_420_UNORM, - "PIPE_FORMAT_G8_B8_R8_420_UNORM", - "g8_b8_r8_420_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_Y8_UNORM] = { - PIPE_FORMAT_Y8_UNORM, - "PIPE_FORMAT_Y8_UNORM", - "y8_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_0, /* u */ - PIPE_SWIZZLE_0, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y8_U8_V8_422_UNORM] = { - PIPE_FORMAT_Y8_U8_V8_422_UNORM, - "PIPE_FORMAT_Y8_U8_V8_422_UNORM", - "y8_u8_v8_422_unorm", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y8_U8V8_422_UNORM] = { - PIPE_FORMAT_Y8_U8V8_422_UNORM, - "PIPE_FORMAT_Y8_U8V8_422_UNORM", - "y8_u8v8_422_unorm", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y8_U8_V8_444_UNORM] = { - PIPE_FORMAT_Y8_U8_V8_444_UNORM, - "PIPE_FORMAT_Y8_U8_V8_444_UNORM", - "y8_u8_v8_444_unorm", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y16_U16_V16_420_UNORM] = { - PIPE_FORMAT_Y16_U16_V16_420_UNORM, - "PIPE_FORMAT_Y16_U16_V16_420_UNORM", - "y16_u16_v16_420_unorm", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y16_U16_V16_422_UNORM] = { - PIPE_FORMAT_Y16_U16_V16_422_UNORM, - "PIPE_FORMAT_Y16_U16_V16_422_UNORM", - "y16_u16_v16_422_unorm", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y16_U16V16_422_UNORM] = { - PIPE_FORMAT_Y16_U16V16_422_UNORM, - "PIPE_FORMAT_Y16_U16V16_422_UNORM", - "y16_u16v16_422_unorm", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y16_U16_V16_444_UNORM] = { - PIPE_FORMAT_Y16_U16_V16_444_UNORM, - "PIPE_FORMAT_Y16_U16_V16_444_UNORM", - "y16_u16_v16_444_unorm", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR3, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_P010] = { - PIPE_FORMAT_P010, - "PIPE_FORMAT_P010", - "p010", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_P012] = { - PIPE_FORMAT_P012, - "PIPE_FORMAT_P012", - "p012", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_P016] = { - PIPE_FORMAT_P016, - "PIPE_FORMAT_P016", - "p016", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_P030] = { - PIPE_FORMAT_P030, - "PIPE_FORMAT_P030", - "p030", - {1, 1, 1, 0}, /* block */ - UTIL_FORMAT_LAYOUT_PLANAR2, - 0, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y210] = { - PIPE_FORMAT_Y210, - "PIPE_FORMAT_Y210", - "y210", - {2, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y212] = { - PIPE_FORMAT_Y212, - "PIPE_FORMAT_Y212", - "y212", - {2, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y216] = { - PIPE_FORMAT_Y216, - "PIPE_FORMAT_Y216", - "y216", - {2, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_SUBSAMPLED, - 1, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_VOID, false, false, 64, 0}, /* x = x */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* y */ - PIPE_SWIZZLE_Y, /* u */ - PIPE_SWIZZLE_Z, /* v */ - PIPE_SWIZZLE_1 /* ignored */ - }, - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y410] = { - PIPE_FORMAT_Y410, - "PIPE_FORMAT_Y410", - "y410", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 4, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 22}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 12}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 2}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 0} /* w = w */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 2, 30} /* w = w */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* y */ - PIPE_SWIZZLE_Z, /* u */ - PIPE_SWIZZLE_X, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, -#else - { - PIPE_SWIZZLE_Y, /* y */ - PIPE_SWIZZLE_Z, /* u */ - PIPE_SWIZZLE_X, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y412] = { - PIPE_FORMAT_Y412, - "PIPE_FORMAT_Y412", - "y412", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 4, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 48}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0} /* w = w */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 48} /* w = w */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* y */ - PIPE_SWIZZLE_Z, /* u */ - PIPE_SWIZZLE_X, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, -#else - { - PIPE_SWIZZLE_Y, /* y */ - PIPE_SWIZZLE_Z, /* u */ - PIPE_SWIZZLE_X, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_Y416] = { - PIPE_FORMAT_Y416, - "PIPE_FORMAT_Y416", - "y416", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_OTHER, - 4, /* nr_channels */ - false, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 48}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0} /* w = w */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = y */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* z = z */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 48} /* w = w */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* y */ - PIPE_SWIZZLE_Z, /* u */ - PIPE_SWIZZLE_X, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, -#else - { - PIPE_SWIZZLE_Y, /* y */ - PIPE_SWIZZLE_Z, /* u */ - PIPE_SWIZZLE_X, /* v */ - PIPE_SWIZZLE_W /* ignored */ - }, -#endif - UTIL_FORMAT_COLORSPACE_YUV, - }, - - [PIPE_FORMAT_A4R4_UNORM] = { - PIPE_FORMAT_A4R4_UNORM, - "PIPE_FORMAT_A4R4_UNORM", - "a4r4_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R4A4_UNORM] = { - PIPE_FORMAT_R4A4_UNORM, - "PIPE_FORMAT_R4A4_UNORM", - "r4a4_unorm", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 4, 4}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8A8_UNORM] = { - PIPE_FORMAT_R8A8_UNORM, - "PIPE_FORMAT_R8A8_UNORM", - "r8a8_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8R8_UNORM] = { - PIPE_FORMAT_A8R8_UNORM, - "PIPE_FORMAT_A8R8_UNORM", - "a8r8_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10A2_USCALED] = { - PIPE_FORMAT_R10G10B10A2_USCALED, - "PIPE_FORMAT_R10G10B10A2_USCALED", - "r10g10b10a2_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10A2_SSCALED] = { - PIPE_FORMAT_R10G10B10A2_SSCALED, - "PIPE_FORMAT_R10G10B10A2_SSCALED", - "r10g10b10a2_sscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10A2_SNORM] = { - PIPE_FORMAT_R10G10B10A2_SNORM, - "PIPE_FORMAT_R10G10B10A2_SNORM", - "r10g10b10a2_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10A2_USCALED] = { - PIPE_FORMAT_B10G10R10A2_USCALED, - "PIPE_FORMAT_B10G10R10A2_USCALED", - "b10g10r10a2_uscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10A2_SSCALED] = { - PIPE_FORMAT_B10G10R10A2_SSCALED, - "PIPE_FORMAT_B10G10R10A2_SSCALED", - "b10g10r10a2_sscaled", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10A2_SNORM] = { - PIPE_FORMAT_B10G10R10A2_SNORM, - "PIPE_FORMAT_B10G10R10A2_SNORM", - "b10g10r10a2_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8_UINT] = { - PIPE_FORMAT_R8_UINT, - "PIPE_FORMAT_R8_UINT", - "r8_uint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8_UINT] = { - PIPE_FORMAT_R8G8_UINT, - "PIPE_FORMAT_R8G8_UINT", - "r8g8_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8_UINT] = { - PIPE_FORMAT_R8G8B8_UINT, - "PIPE_FORMAT_R8G8B8_UINT", - "r8g8b8_uint", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8A8_UINT] = { - PIPE_FORMAT_R8G8B8A8_UINT, - "PIPE_FORMAT_R8G8B8A8_UINT", - "r8g8b8a8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8_SINT] = { - PIPE_FORMAT_R8_SINT, - "PIPE_FORMAT_R8_SINT", - "r8_sint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8_SINT] = { - PIPE_FORMAT_R8G8_SINT, - "PIPE_FORMAT_R8G8_SINT", - "r8g8_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8_SINT] = { - PIPE_FORMAT_R8G8B8_SINT, - "PIPE_FORMAT_R8G8B8_SINT", - "r8g8b8_sint", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8A8_SINT] = { - PIPE_FORMAT_R8G8B8A8_SINT, - "PIPE_FORMAT_R8G8B8A8_SINT", - "r8g8b8a8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16_UINT] = { - PIPE_FORMAT_R16_UINT, - "PIPE_FORMAT_R16_UINT", - "r16_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16_UINT] = { - PIPE_FORMAT_R16G16_UINT, - "PIPE_FORMAT_R16G16_UINT", - "r16g16_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16_UINT] = { - PIPE_FORMAT_R16G16B16_UINT, - "PIPE_FORMAT_R16G16B16_UINT", - "r16g16b16_uint", - {1, 1, 1, 48}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 32}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16A16_UINT] = { - PIPE_FORMAT_R16G16B16A16_UINT, - "PIPE_FORMAT_R16G16B16A16_UINT", - "r16g16b16a16_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 48} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16_SINT] = { - PIPE_FORMAT_R16_SINT, - "PIPE_FORMAT_R16_SINT", - "r16_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16_SINT] = { - PIPE_FORMAT_R16G16_SINT, - "PIPE_FORMAT_R16G16_SINT", - "r16g16_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16_SINT] = { - PIPE_FORMAT_R16G16B16_SINT, - "PIPE_FORMAT_R16G16B16_SINT", - "r16g16b16_sint", - {1, 1, 1, 48}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 32}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16A16_SINT] = { - PIPE_FORMAT_R16G16B16A16_SINT, - "PIPE_FORMAT_R16G16B16A16_SINT", - "r16g16b16a16_sint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 48} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_UINT] = { - PIPE_FORMAT_R32_UINT, - "PIPE_FORMAT_R32_UINT", - "r32_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_UINT] = { - PIPE_FORMAT_R32G32_UINT, - "PIPE_FORMAT_R32G32_UINT", - "r32g32_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_UINT] = { - PIPE_FORMAT_R32G32B32_UINT, - "PIPE_FORMAT_R32G32B32_UINT", - "r32g32b32_uint", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_UINT] = { - PIPE_FORMAT_R32G32B32A32_UINT, - "PIPE_FORMAT_R32G32B32A32_UINT", - "r32g32b32a32_uint", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32_SINT] = { - PIPE_FORMAT_R32_SINT, - "PIPE_FORMAT_R32_SINT", - "r32_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32_SINT] = { - PIPE_FORMAT_R32G32_SINT, - "PIPE_FORMAT_R32G32_SINT", - "r32g32_sint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32_SINT] = { - PIPE_FORMAT_R32G32B32_SINT, - "PIPE_FORMAT_R32G32B32_SINT", - "r32g32b32_sint", - {1, 1, 1, 96}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 64}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32A32_SINT] = { - PIPE_FORMAT_R32G32B32A32_SINT, - "PIPE_FORMAT_R32G32B32A32_SINT", - "r32g32b32a32_sint", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 96} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64_UINT] = { - PIPE_FORMAT_R64_UINT, - "PIPE_FORMAT_R64_UINT", - "r64_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64_UINT] = { - PIPE_FORMAT_R64G64_UINT, - "PIPE_FORMAT_R64G64_UINT", - "r64g64_uint", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 64}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64B64_UINT] = { - PIPE_FORMAT_R64G64B64_UINT, - "PIPE_FORMAT_R64G64B64_UINT", - "r64g64b64_uint", - {1, 1, 1, 192}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 128}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 128}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64B64A64_UINT] = { - PIPE_FORMAT_R64G64B64A64_UINT, - "PIPE_FORMAT_R64G64B64A64_UINT", - "r64g64b64a64_uint", - {1, 1, 1, 256}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 192}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 128}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 128}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 64, 192} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64_SINT] = { - PIPE_FORMAT_R64_SINT, - "PIPE_FORMAT_R64_SINT", - "r64_sint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 0}, /* x = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64_SINT] = { - PIPE_FORMAT_R64G64_SINT, - "PIPE_FORMAT_R64G64_SINT", - "r64g64_sint", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 64}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 0}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 64}, /* y = g */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64B64_SINT] = { - PIPE_FORMAT_R64G64B64_SINT, - "PIPE_FORMAT_R64G64B64_SINT", - "r64g64b64_sint", - {1, 1, 1, 192}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 128}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 128}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R64G64B64A64_SINT] = { - PIPE_FORMAT_R64G64B64A64_SINT, - "PIPE_FORMAT_R64G64B64A64_SINT", - "r64g64b64a64_sint", - {1, 1, 1, 256}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 192}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 128}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 128}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 64, 192} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8_UINT] = { - PIPE_FORMAT_A8_UINT, - "PIPE_FORMAT_A8_UINT", - "a8_uint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I8_UINT] = { - PIPE_FORMAT_I8_UINT, - "PIPE_FORMAT_I8_UINT", - "i8_uint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8_UINT] = { - PIPE_FORMAT_L8_UINT, - "PIPE_FORMAT_L8_UINT", - "l8_uint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8A8_UINT] = { - PIPE_FORMAT_L8A8_UINT, - "PIPE_FORMAT_L8A8_UINT", - "l8a8_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8_SINT] = { - PIPE_FORMAT_A8_SINT, - "PIPE_FORMAT_A8_SINT", - "a8_sint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I8_SINT] = { - PIPE_FORMAT_I8_SINT, - "PIPE_FORMAT_I8_SINT", - "i8_sint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8_SINT] = { - PIPE_FORMAT_L8_SINT, - "PIPE_FORMAT_L8_SINT", - "l8_sint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L8A8_SINT] = { - PIPE_FORMAT_L8A8_SINT, - "PIPE_FORMAT_L8A8_SINT", - "l8a8_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A16_UINT] = { - PIPE_FORMAT_A16_UINT, - "PIPE_FORMAT_A16_UINT", - "a16_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I16_UINT] = { - PIPE_FORMAT_I16_UINT, - "PIPE_FORMAT_I16_UINT", - "i16_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16_UINT] = { - PIPE_FORMAT_L16_UINT, - "PIPE_FORMAT_L16_UINT", - "l16_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16A16_UINT] = { - PIPE_FORMAT_L16A16_UINT, - "PIPE_FORMAT_L16A16_UINT", - "l16a16_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A16_SINT] = { - PIPE_FORMAT_A16_SINT, - "PIPE_FORMAT_A16_SINT", - "a16_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I16_SINT] = { - PIPE_FORMAT_I16_SINT, - "PIPE_FORMAT_I16_SINT", - "i16_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16_SINT] = { - PIPE_FORMAT_L16_SINT, - "PIPE_FORMAT_L16_SINT", - "l16_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L16A16_SINT] = { - PIPE_FORMAT_L16A16_SINT, - "PIPE_FORMAT_L16A16_SINT", - "l16a16_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A32_UINT] = { - PIPE_FORMAT_A32_UINT, - "PIPE_FORMAT_A32_UINT", - "a32_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I32_UINT] = { - PIPE_FORMAT_I32_UINT, - "PIPE_FORMAT_I32_UINT", - "i32_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L32_UINT] = { - PIPE_FORMAT_L32_UINT, - "PIPE_FORMAT_L32_UINT", - "l32_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L32A32_UINT] = { - PIPE_FORMAT_L32A32_UINT, - "PIPE_FORMAT_L32A32_UINT", - "l32a32_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A32_SINT] = { - PIPE_FORMAT_A32_SINT, - "PIPE_FORMAT_A32_SINT", - "a32_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_0, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_I32_SINT] = { - PIPE_FORMAT_I32_SINT, - "PIPE_FORMAT_I32_SINT", - "i32_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = rgba */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_X /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L32_SINT] = { - PIPE_FORMAT_L32_SINT, - "PIPE_FORMAT_L32_SINT", - "l32_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 1, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = rgb */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_L32A32_SINT] = { - PIPE_FORMAT_L32A32_SINT, - "PIPE_FORMAT_L32A32_SINT", - "l32a32_sint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = rgb */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8_UINT] = { - PIPE_FORMAT_B8G8R8_UINT, - "PIPE_FORMAT_B8G8R8_UINT", - "b8g8r8_uint", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8A8_UINT] = { - PIPE_FORMAT_B8G8R8A8_UINT, - "PIPE_FORMAT_B8G8R8A8_UINT", - "b8g8r8a8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8_SINT] = { - PIPE_FORMAT_B8G8R8_SINT, - "PIPE_FORMAT_B8G8R8_SINT", - "b8g8r8_sint", - {1, 1, 1, 24}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B8G8R8A8_SINT] = { - PIPE_FORMAT_B8G8R8A8_SINT, - "PIPE_FORMAT_B8G8R8A8_SINT", - "b8g8r8a8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8R8G8B8_UINT] = { - PIPE_FORMAT_A8R8G8B8_UINT, - "PIPE_FORMAT_A8R8G8B8_UINT", - "a8r8g8b8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8B8G8R8_UINT] = { - PIPE_FORMAT_A8B8G8R8_UINT, - "PIPE_FORMAT_A8B8G8R8_UINT", - "a8b8g8r8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A2R10G10B10_UINT] = { - PIPE_FORMAT_A2R10G10B10_UINT, - "PIPE_FORMAT_A2R10G10B10_UINT", - "a2r10g10b10_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 22}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 12}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 2}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 2}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 12}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 22} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A2B10G10R10_UINT] = { - PIPE_FORMAT_A2B10G10R10_UINT, - "PIPE_FORMAT_A2B10G10R10_UINT", - "a2b10g10r10_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 22}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 12}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 2}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 2}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 12}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 22} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10A2_UINT] = { - PIPE_FORMAT_B10G10R10A2_UINT, - "PIPE_FORMAT_B10G10R10A2_UINT", - "b10g10r10a2_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10A2_SINT] = { - PIPE_FORMAT_B10G10R10A2_SINT, - "PIPE_FORMAT_B10G10R10A2_SINT", - "b10g10r10a2_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R5G6B5_UINT] = { - PIPE_FORMAT_R5G6B5_UINT, - "PIPE_FORMAT_R5G6B5_UINT", - "r5g6b5_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B5G6R5_UINT] = { - PIPE_FORMAT_B5G6R5_UINT, - "PIPE_FORMAT_B5G6R5_UINT", - "b5g6r5_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R3G3B2_UINT] = { - PIPE_FORMAT_R3G3B2_UINT, - "PIPE_FORMAT_R3G3B2_UINT", - "r3g3b2_uint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 6}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 3}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 3}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 6}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B2G3R3_UINT] = { - PIPE_FORMAT_B2G3R3_UINT, - "PIPE_FORMAT_B2G3R3_UINT", - "b2g3r3_uint", - {1, 1, 1, 8}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 5}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 2}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 2}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 3, 5}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R4G4B4A4_UINT] = { - PIPE_FORMAT_R4G4B4A4_UINT, - "PIPE_FORMAT_R4G4B4A4_UINT", - "r4g4b4a4_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B4G4R4A4_UINT] = { - PIPE_FORMAT_B4G4R4A4_UINT, - "PIPE_FORMAT_B4G4R4A4_UINT", - "b4g4r4a4_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A4R4G4B4_UINT] = { - PIPE_FORMAT_A4R4G4B4_UINT, - "PIPE_FORMAT_A4R4G4B4_UINT", - "a4r4g4b4_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A4B4G4R4_UINT] = { - PIPE_FORMAT_A4B4G4R4_UINT, - "PIPE_FORMAT_A4B4G4R4_UINT", - "a4b4g4r4_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 4}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 4, 12} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A1R5G5B5_UINT] = { - PIPE_FORMAT_A1R5G5B5_UINT, - "PIPE_FORMAT_A1R5G5B5_UINT", - "a1r5g5b5_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 6}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 1}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 1}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 6}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11} /* w = b */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A1B5G5R5_UINT] = { - PIPE_FORMAT_A1B5G5R5_UINT, - "PIPE_FORMAT_A1B5G5R5_UINT", - "a1b5g5r5_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 6}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 1}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 0} /* w = a */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 1}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 6}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 11} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R5G5B5A1_UINT] = { - PIPE_FORMAT_R5G5B5A1_UINT, - "PIPE_FORMAT_R5G5B5A1_UINT", - "r5g5b5a1_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 15}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 10}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 5}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 10}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 15} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B5G5R5A1_UINT] = { - PIPE_FORMAT_B5G5R5A1_UINT, - "PIPE_FORMAT_B5G5R5A1_UINT", - "b5g5r5a1_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 15}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 10}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 5}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 5, 10}, /* z = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 1, 15} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8X8_SNORM] = { - PIPE_FORMAT_R8G8B8X8_SNORM, - "PIPE_FORMAT_R8G8B8X8_SNORM", - "r8g8b8x8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8X8_SRGB] = { - PIPE_FORMAT_R8G8B8X8_SRGB, - "PIPE_FORMAT_R8G8B8X8_SRGB", - "r8g8b8x8_srgb", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_R8G8B8X8_UINT] = { - PIPE_FORMAT_R8G8B8X8_UINT, - "PIPE_FORMAT_R8G8B8X8_UINT", - "r8g8b8x8_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8G8B8X8_SINT] = { - PIPE_FORMAT_R8G8B8X8_SINT, - "PIPE_FORMAT_R8G8B8X8_SINT", - "r8g8b8x8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10X2_UNORM] = { - PIPE_FORMAT_B10G10R10X2_UNORM, - "PIPE_FORMAT_B10G10R10X2_UNORM", - "b10g10r10x2_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30}, /* x = x */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10X2_SNORM] = { - PIPE_FORMAT_B10G10R10X2_SNORM, - "PIPE_FORMAT_B10G10R10X2_SNORM", - "b10g10r10x2_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B10G10R10X2_SINT] = { - PIPE_FORMAT_B10G10R10X2_SINT, - "PIPE_FORMAT_B10G10R10X2_SINT", - "b10g10r10x2_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* y = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0} /* w = b */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* z = r */ - {UTIL_FORMAT_TYPE_VOID, false, false, 2, 30} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_W, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_X, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16X16_UNORM] = { - PIPE_FORMAT_R16G16B16X16_UNORM, - "PIPE_FORMAT_R16G16B16X16_UNORM", - "r16g16b16x16_unorm", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 48} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16X16_SNORM] = { - PIPE_FORMAT_R16G16B16X16_SNORM, - "PIPE_FORMAT_R16G16B16X16_SNORM", - "r16g16b16x16_snorm", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 48} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16X16_FLOAT] = { - PIPE_FORMAT_R16G16B16X16_FLOAT, - "PIPE_FORMAT_R16G16B16X16_FLOAT", - "r16g16b16x16_float", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 48} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16X16_UINT] = { - PIPE_FORMAT_R16G16B16X16_UINT, - "PIPE_FORMAT_R16G16B16X16_UINT", - "r16g16b16x16_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 48} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16G16B16X16_SINT] = { - PIPE_FORMAT_R16G16B16X16_SINT, - "PIPE_FORMAT_R16G16B16X16_SINT", - "r16g16b16x16_sint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 48}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 16, 48} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32X32_FLOAT] = { - PIPE_FORMAT_R32G32B32X32_FLOAT, - "PIPE_FORMAT_R32G32B32X32_FLOAT", - "r32g32b32x32_float", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 96} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32X32_UINT] = { - PIPE_FORMAT_R32G32B32X32_UINT, - "PIPE_FORMAT_R32G32B32X32_UINT", - "r32g32b32x32_uint", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 96} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32G32B32X32_SINT] = { - PIPE_FORMAT_R32G32B32X32_SINT, - "PIPE_FORMAT_R32G32B32X32_SINT", - "r32g32b32x32_sint", - {1, 1, 1, 128}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 96}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 64}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 0} /* w = x */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 64}, /* z = b */ - {UTIL_FORMAT_TYPE_VOID, false, false, 32, 96} /* w = x */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8A8_SNORM] = { - PIPE_FORMAT_R8A8_SNORM, - "PIPE_FORMAT_R8A8_SNORM", - "r8a8_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16A16_UNORM] = { - PIPE_FORMAT_R16A16_UNORM, - "PIPE_FORMAT_R16A16_UNORM", - "r16a16_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16A16_SNORM] = { - PIPE_FORMAT_R16A16_SNORM, - "PIPE_FORMAT_R16A16_SNORM", - "r16a16_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16A16_FLOAT] = { - PIPE_FORMAT_R16A16_FLOAT, - "PIPE_FORMAT_R16A16_FLOAT", - "r16a16_float", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32A32_FLOAT] = { - PIPE_FORMAT_R32A32_FLOAT, - "PIPE_FORMAT_R32A32_FLOAT", - "r32a32_float", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_FLOAT, false, false, 32, 32}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8A8_UINT] = { - PIPE_FORMAT_R8A8_UINT, - "PIPE_FORMAT_R8A8_UINT", - "r8a8_uint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R8A8_SINT] = { - PIPE_FORMAT_R8A8_SINT, - "PIPE_FORMAT_R8A8_SINT", - "r8a8_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16A16_UINT] = { - PIPE_FORMAT_R16A16_UINT, - "PIPE_FORMAT_R16A16_UINT", - "r16a16_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R16A16_SINT] = { - PIPE_FORMAT_R16A16_SINT, - "PIPE_FORMAT_R16A16_SINT", - "r16a16_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32A32_UINT] = { - PIPE_FORMAT_R32A32_UINT, - "PIPE_FORMAT_R32A32_UINT", - "r32a32_uint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 32, 32}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R32A32_SINT] = { - PIPE_FORMAT_R32A32_SINT, - "PIPE_FORMAT_R32A32_SINT", - "r32a32_sint", - {1, 1, 1, 64}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - false, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 32, 32}, /* y = a */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_0, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_Y /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10A2_UINT] = { - PIPE_FORMAT_R10G10B10A2_UINT, - "PIPE_FORMAT_R10G10B10A2_UINT", - "r10g10b10a2_uint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, false, true, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_R10G10B10A2_SINT] = { - PIPE_FORMAT_R10G10B10A2_SINT, - "PIPE_FORMAT_R10G10B10A2_SINT", - "r10g10b10a2_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 2, 30}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 10}, /* y = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 10, 20}, /* z = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 2, 30} /* w = a */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* r */ - PIPE_SWIZZLE_Y, /* g */ - PIPE_SWIZZLE_Z, /* b */ - PIPE_SWIZZLE_W /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_B5G6R5_SRGB] = { - PIPE_FORMAT_B5G6R5_SRGB, - "PIPE_FORMAT_B5G6R5_SRGB", - "b5g6r5_srgb", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_R5G6B5_SRGB] = { - PIPE_FORMAT_R5G6B5_SRGB, - "PIPE_FORMAT_R5G6B5_SRGB", - "r5g6b5_srgb", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 3, /* nr_channels */ - false, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* x = b */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* z = r */ - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 0}, /* x = r */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 6, 5}, /* y = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 5, 11}, /* z = b */ - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Z, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_X, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_X, /* sr */ - PIPE_SWIZZLE_Y, /* sg */ - PIPE_SWIZZLE_Z, /* sb */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_SRGB, - }, - - [PIPE_FORMAT_G8R8_UNORM] = { - PIPE_FORMAT_G8R8_UNORM, - "PIPE_FORMAT_G8R8_UNORM", - "g8r8_unorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* x = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 0}, /* x = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 8, 8}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G8R8_SNORM] = { - PIPE_FORMAT_G8R8_SNORM, - "PIPE_FORMAT_G8R8_SNORM", - "g8r8_snorm", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G8R8_SINT] = { - PIPE_FORMAT_G8R8_SINT, - "PIPE_FORMAT_G8R8_SINT", - "g8r8_sint", - {1, 1, 1, 16}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G16R16_UNORM] = { - PIPE_FORMAT_G16R16_UNORM, - "PIPE_FORMAT_G16R16_UNORM", - "g16r16_unorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - true, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* x = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 0}, /* x = g */ - {UTIL_FORMAT_TYPE_UNSIGNED, true, false, 16, 16}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G16R16_SNORM] = { - PIPE_FORMAT_G16R16_SNORM, - "PIPE_FORMAT_G16R16_SNORM", - "g16r16_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 0}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 16, 16}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_G16R16_SINT] = { - PIPE_FORMAT_G16R16_SINT, - "PIPE_FORMAT_G16R16_SINT", - "g16r16_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 2, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 0}, /* x = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 16, 16}, /* y = r */ - {0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0} - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_Y, /* r */ - PIPE_SWIZZLE_X, /* g */ - PIPE_SWIZZLE_0, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8B8G8R8_SNORM] = { - PIPE_FORMAT_A8B8G8R8_SNORM, - "PIPE_FORMAT_A8B8G8R8_SNORM", - "a8b8g8r8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_A8B8G8R8_SINT] = { - PIPE_FORMAT_A8B8G8R8_SINT, - "PIPE_FORMAT_A8B8G8R8_SINT", - "a8b8g8r8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0}, /* x = a */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_X /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X8B8G8R8_SNORM] = { - PIPE_FORMAT_X8B8G8R8_SNORM, - "PIPE_FORMAT_X8B8G8R8_SNORM", - "x8b8g8r8_snorm", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - true, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, true, false, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - - [PIPE_FORMAT_X8B8G8R8_SINT] = { - PIPE_FORMAT_X8B8G8R8_SINT, - "PIPE_FORMAT_X8B8G8R8_SINT", - "x8b8g8r8_sint", - {1, 1, 1, 32}, /* block */ - UTIL_FORMAT_LAYOUT_PLAIN, - 4, /* nr_channels */ - true, /* is_array */ - true, /* is_bitmask */ - false, /* is_mixed */ - false, /* is_unorm */ - false, /* is_snorm */ -#if UTIL_ARCH_BIG_ENDIAN - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 24}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 0} /* w = r */ - }, -#else - { - {UTIL_FORMAT_TYPE_VOID, false, false, 8, 0}, /* x = x */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 8}, /* y = b */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 16}, /* z = g */ - {UTIL_FORMAT_TYPE_SIGNED, false, true, 8, 24} /* w = r */ - }, -#endif -#if UTIL_ARCH_BIG_ENDIAN - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#else - { - PIPE_SWIZZLE_W, /* r */ - PIPE_SWIZZLE_Z, /* g */ - PIPE_SWIZZLE_Y, /* b */ - PIPE_SWIZZLE_1 /* a */ - }, -#endif - UTIL_FORMAT_COLORSPACE_RGB, - }, - -}; - -ATTRIBUTE_RETURNS_NONNULL const struct util_format_description * -util_format_description(enum pipe_format format) -{ - assert(format < PIPE_FORMAT_COUNT); - return &util_format_descriptions[format]; -} - -static const struct util_format_pack_description -util_format_pack_descriptions[PIPE_FORMAT_COUNT] = { - [PIPE_FORMAT_NONE] = { - .pack_rgba_8unorm = &util_format_none_pack_rgba_8unorm, - .pack_rgba_float = &util_format_none_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8A8_UNORM] = { - .pack_rgba_8unorm = &util_format_b8g8r8a8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8a8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8X8_UNORM] = { - .pack_rgba_8unorm = &util_format_b8g8r8x8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8x8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8X8_SNORM] = { - .pack_rgba_8unorm = &util_format_b8g8r8x8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8x8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8X8_UINT] = { - .pack_rgba_uint = &util_format_b8g8r8x8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b8g8r8x8_uint_pack_signed, - }, - - [PIPE_FORMAT_B8G8R8X8_SINT] = { - .pack_rgba_uint = &util_format_b8g8r8x8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_b8g8r8x8_sint_pack_signed, - }, - - [PIPE_FORMAT_A8R8G8B8_UNORM] = { - .pack_rgba_8unorm = &util_format_a8r8g8b8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8r8g8b8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A8R8G8B8_SNORM] = { - .pack_rgba_8unorm = &util_format_a8r8g8b8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8r8g8b8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A8R8G8B8_SINT] = { - .pack_rgba_uint = &util_format_a8r8g8b8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_a8r8g8b8_sint_pack_signed, - }, - - [PIPE_FORMAT_X8R8G8B8_UNORM] = { - .pack_rgba_8unorm = &util_format_x8r8g8b8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x8r8g8b8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_X8R8G8B8_SNORM] = { - .pack_rgba_8unorm = &util_format_x8r8g8b8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x8r8g8b8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_X8R8G8B8_SINT] = { - .pack_rgba_uint = &util_format_x8r8g8b8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_x8r8g8b8_sint_pack_signed, - }, - - [PIPE_FORMAT_A8B8G8R8_UNORM] = { - .pack_rgba_8unorm = &util_format_a8b8g8r8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8b8g8r8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_X8B8G8R8_UNORM] = { - .pack_rgba_8unorm = &util_format_x8b8g8r8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x8b8g8r8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8X8_UNORM] = { - .pack_rgba_8unorm = &util_format_r8g8b8x8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8x8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R5G5B5A1_UNORM] = { - .pack_rgba_8unorm = &util_format_r5g5b5a1_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r5g5b5a1_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R5G5B5X1_UNORM] = { - .pack_rgba_8unorm = &util_format_r5g5b5x1_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r5g5b5x1_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B5G5R5X1_UNORM] = { - .pack_rgba_8unorm = &util_format_b5g5r5x1_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b5g5r5x1_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B5G5R5A1_UNORM] = { - .pack_rgba_8unorm = &util_format_b5g5r5a1_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b5g5r5a1_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_X1B5G5R5_UNORM] = { - .pack_rgba_8unorm = &util_format_x1b5g5r5_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x1b5g5r5_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A1R5G5B5_UNORM] = { - .pack_rgba_8unorm = &util_format_a1r5g5b5_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a1r5g5b5_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_X1R5G5B5_UNORM] = { - .pack_rgba_8unorm = &util_format_x1r5g5b5_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x1r5g5b5_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A1B5G5R5_UNORM] = { - .pack_rgba_8unorm = &util_format_a1b5g5r5_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a1b5g5r5_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R4G4B4A4_UNORM] = { - .pack_rgba_8unorm = &util_format_r4g4b4a4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r4g4b4a4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R4G4B4X4_UNORM] = { - .pack_rgba_8unorm = &util_format_r4g4b4x4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r4g4b4x4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B4G4R4A4_UNORM] = { - .pack_rgba_8unorm = &util_format_b4g4r4a4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b4g4r4a4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B4G4R4X4_UNORM] = { - .pack_rgba_8unorm = &util_format_b4g4r4x4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b4g4r4x4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A4R4G4B4_UNORM] = { - .pack_rgba_8unorm = &util_format_a4r4g4b4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a4r4g4b4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A4B4G4R4_UNORM] = { - .pack_rgba_8unorm = &util_format_a4b4g4r4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a4b4g4r4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R5G6B5_UNORM] = { - .pack_rgba_8unorm = &util_format_r5g6b5_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r5g6b5_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B5G6R5_UNORM] = { - .pack_rgba_8unorm = &util_format_b5g6r5_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b5g6r5_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10A2_UNORM] = { - .pack_rgba_8unorm = &util_format_r10g10b10a2_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10g10b10a2_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10X2_UNORM] = { - .pack_rgba_8unorm = &util_format_r10g10b10x2_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10g10b10x2_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B10G10R10A2_UNORM] = { - .pack_rgba_8unorm = &util_format_b10g10r10a2_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b10g10r10a2_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A2R10G10B10_UNORM] = { - .pack_rgba_8unorm = &util_format_a2r10g10b10_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a2r10g10b10_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A2B10G10R10_UNORM] = { - .pack_rgba_8unorm = &util_format_a2b10g10r10_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a2b10g10r10_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R3G3B2_UNORM] = { - .pack_rgba_8unorm = &util_format_r3g3b2_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r3g3b2_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B2G3R3_UNORM] = { - .pack_rgba_8unorm = &util_format_b2g3r3_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b2g3r3_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L8_UNORM] = { - .pack_rgba_8unorm = &util_format_l8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A8_UNORM] = { - .pack_rgba_8unorm = &util_format_a8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_I8_UNORM] = { - .pack_rgba_8unorm = &util_format_i8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_i8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L4A4_UNORM] = { - .pack_rgba_8unorm = &util_format_l4a4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l4a4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L8A8_UNORM] = { - .pack_rgba_8unorm = &util_format_l8a8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l8a8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L16_UNORM] = { - .pack_rgba_8unorm = &util_format_l16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A16_UNORM] = { - .pack_rgba_8unorm = &util_format_a16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_I16_UNORM] = { - .pack_rgba_8unorm = &util_format_i16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_i16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L16A16_UNORM] = { - .pack_rgba_8unorm = &util_format_l16a16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l16a16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A8_SNORM] = { - .pack_rgba_8unorm = &util_format_a8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L8_SNORM] = { - .pack_rgba_8unorm = &util_format_l8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L8A8_SNORM] = { - .pack_rgba_8unorm = &util_format_l8a8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l8a8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_I8_SNORM] = { - .pack_rgba_8unorm = &util_format_i8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_i8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A16_SNORM] = { - .pack_rgba_8unorm = &util_format_a16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L16_SNORM] = { - .pack_rgba_8unorm = &util_format_l16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_L16A16_SNORM] = { - .pack_rgba_8unorm = &util_format_l16a16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l16a16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_I16_SNORM] = { - .pack_rgba_8unorm = &util_format_i16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_i16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A16_FLOAT] = { - .pack_rgba_8unorm = &util_format_a16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_L16_FLOAT] = { - .pack_rgba_8unorm = &util_format_l16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_L16A16_FLOAT] = { - .pack_rgba_8unorm = &util_format_l16a16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l16a16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_I16_FLOAT] = { - .pack_rgba_8unorm = &util_format_i16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_i16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_A32_FLOAT] = { - .pack_rgba_8unorm = &util_format_a32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_L32_FLOAT] = { - .pack_rgba_8unorm = &util_format_l32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_L32A32_FLOAT] = { - .pack_rgba_8unorm = &util_format_l32a32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l32a32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_I32_FLOAT] = { - .pack_rgba_8unorm = &util_format_i32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_i32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_L8_SRGB] = { - .pack_rgba_8unorm = &util_format_l8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_R8_SRGB] = { - .pack_rgba_8unorm = &util_format_r8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_L8A8_SRGB] = { - .pack_rgba_8unorm = &util_format_l8a8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_l8a8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8_SRGB] = { - .pack_rgba_8unorm = &util_format_r8g8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8_SRGB] = { - .pack_rgba_8unorm = &util_format_r8g8b8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8_SRGB] = { - .pack_rgba_8unorm = &util_format_b8g8r8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8A8_SRGB] = { - .pack_rgba_8unorm = &util_format_r8g8b8a8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8a8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_A8B8G8R8_SRGB] = { - .pack_rgba_8unorm = &util_format_a8b8g8r8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8b8g8r8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_X8B8G8R8_SRGB] = { - .pack_rgba_8unorm = &util_format_x8b8g8r8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x8b8g8r8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8A8_SRGB] = { - .pack_rgba_8unorm = &util_format_b8g8r8a8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8a8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8X8_SRGB] = { - .pack_rgba_8unorm = &util_format_b8g8r8x8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8x8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_A8R8G8B8_SRGB] = { - .pack_rgba_8unorm = &util_format_a8r8g8b8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8r8g8b8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_X8R8G8B8_SRGB] = { - .pack_rgba_8unorm = &util_format_x8r8g8b8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x8r8g8b8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_R8SG8SB8UX8U_NORM] = { - .pack_rgba_8unorm = &util_format_r8sg8sb8ux8u_norm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8sg8sb8ux8u_norm_pack_rgba_float, - }, - - [PIPE_FORMAT_R10SG10SB10SA2U_NORM] = { - .pack_rgba_8unorm = &util_format_r10sg10sb10sa2u_norm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10sg10sb10sa2u_norm_pack_rgba_float, - }, - - [PIPE_FORMAT_R5SG5SB6U_NORM] = { - .pack_rgba_8unorm = &util_format_r5sg5sb6u_norm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r5sg5sb6u_norm_pack_rgba_float, - }, - - [PIPE_FORMAT_S8_UINT] = { - .pack_s_8uint = &util_format_s8_uint_pack_s_8uint, - }, - - [PIPE_FORMAT_Z16_UNORM] = { - .pack_z_32unorm = &util_format_z16_unorm_pack_z_32unorm, - .pack_z_float = &util_format_z16_unorm_pack_z_float, - }, - - [PIPE_FORMAT_Z16_UNORM_S8_UINT] = { - .pack_z_32unorm = &util_format_z16_unorm_s8_uint_pack_z_32unorm, - .pack_z_float = &util_format_z16_unorm_s8_uint_pack_z_float, - .pack_s_8uint = &util_format_z16_unorm_s8_uint_pack_s_8uint, - }, - - [PIPE_FORMAT_Z32_UNORM] = { - .pack_z_32unorm = &util_format_z32_unorm_pack_z_32unorm, - .pack_z_float = &util_format_z32_unorm_pack_z_float, - }, - - [PIPE_FORMAT_Z32_FLOAT] = { - .pack_z_32unorm = &util_format_z32_float_pack_z_32unorm, - .pack_z_float = &util_format_z32_float_pack_z_float, - }, - - [PIPE_FORMAT_Z24_UNORM_S8_UINT] = { - .pack_z_32unorm = &util_format_z24_unorm_s8_uint_pack_z_32unorm, - .pack_z_float = &util_format_z24_unorm_s8_uint_pack_z_float, - .pack_s_8uint = &util_format_z24_unorm_s8_uint_pack_s_8uint, - }, - - [PIPE_FORMAT_S8_UINT_Z24_UNORM] = { - .pack_z_32unorm = &util_format_s8_uint_z24_unorm_pack_z_32unorm, - .pack_z_float = &util_format_s8_uint_z24_unorm_pack_z_float, - .pack_s_8uint = &util_format_s8_uint_z24_unorm_pack_s_8uint, - }, - - [PIPE_FORMAT_X24S8_UINT] = { - .pack_s_8uint = &util_format_x24s8_uint_pack_s_8uint, - }, - - [PIPE_FORMAT_S8X24_UINT] = { - .pack_s_8uint = &util_format_s8x24_uint_pack_s_8uint, - }, - - [PIPE_FORMAT_Z24X8_UNORM] = { - .pack_z_32unorm = &util_format_z24x8_unorm_pack_z_32unorm, - .pack_z_float = &util_format_z24x8_unorm_pack_z_float, - }, - - [PIPE_FORMAT_X8Z24_UNORM] = { - .pack_z_32unorm = &util_format_x8z24_unorm_pack_z_32unorm, - .pack_z_float = &util_format_x8z24_unorm_pack_z_float, - }, - - [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT] = { - .pack_z_32unorm = &util_format_z32_float_s8x24_uint_pack_z_32unorm, - .pack_z_float = &util_format_z32_float_s8x24_uint_pack_z_float, - .pack_s_8uint = &util_format_z32_float_s8x24_uint_pack_s_8uint, - }, - - [PIPE_FORMAT_X32_S8X24_UINT] = { - .pack_s_8uint = &util_format_x32_s8x24_uint_pack_s_8uint, - }, - - [PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8] = { - .pack_rgba_8unorm = &util_format_z24_unorm_s8_uint_as_r8g8b8a8_pack_rgba_8unorm, - .pack_rgba_float = &util_format_z24_unorm_s8_uint_as_r8g8b8a8_pack_rgba_float, - }, - - [PIPE_FORMAT_UYVY] = { - .pack_rgba_8unorm = &util_format_uyvy_pack_rgba_8unorm, - .pack_rgba_float = &util_format_uyvy_pack_rgba_float, - }, - - [PIPE_FORMAT_YUYV] = { - .pack_rgba_8unorm = &util_format_yuyv_pack_rgba_8unorm, - .pack_rgba_float = &util_format_yuyv_pack_rgba_float, - }, - - [PIPE_FORMAT_AYUV] = { 0 }, - [PIPE_FORMAT_XYUV] = { 0 }, - [PIPE_FORMAT_R8G8_B8G8_UNORM] = { - .pack_rgba_8unorm = &util_format_r8g8_b8g8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8_b8g8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_G8R8_G8B8_UNORM] = { 0 }, - [PIPE_FORMAT_G8R8_B8R8_UNORM] = { 0 }, - [PIPE_FORMAT_R8G8_R8B8_UNORM] = { 0 }, - [PIPE_FORMAT_R11G11B10_FLOAT] = { - .pack_rgba_8unorm = &util_format_r11g11b10_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r11g11b10_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R9G9B9E5_FLOAT] = { - .pack_rgba_8unorm = &util_format_r9g9b9e5_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r9g9b9e5_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R1_UNORM] = { 0 }, - [PIPE_FORMAT_R8G8Bx_SNORM] = { - .pack_rgba_8unorm = &util_format_r8g8bx_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8bx_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT1_RGB] = { - .pack_rgba_8unorm = &util_format_dxt1_rgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt1_rgb_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT1_RGBA] = { - .pack_rgba_8unorm = &util_format_dxt1_rgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt1_rgba_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT3_RGBA] = { - .pack_rgba_8unorm = &util_format_dxt3_rgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt3_rgba_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT5_RGBA] = { - .pack_rgba_8unorm = &util_format_dxt5_rgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt5_rgba_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT1_SRGB] = { - .pack_rgba_8unorm = &util_format_dxt1_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt1_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT1_SRGBA] = { - .pack_rgba_8unorm = &util_format_dxt1_srgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt1_srgba_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT3_SRGBA] = { - .pack_rgba_8unorm = &util_format_dxt3_srgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt3_srgba_pack_rgba_float, - }, - - [PIPE_FORMAT_DXT5_SRGBA] = { - .pack_rgba_8unorm = &util_format_dxt5_srgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_dxt5_srgba_pack_rgba_float, - }, - - [PIPE_FORMAT_FXT1_RGB] = { - .pack_rgba_8unorm = &util_format_fxt1_rgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_fxt1_rgb_pack_rgba_float, - }, - - [PIPE_FORMAT_FXT1_RGBA] = { - .pack_rgba_8unorm = &util_format_fxt1_rgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_fxt1_rgba_pack_rgba_float, - }, - - [PIPE_FORMAT_RGTC1_UNORM] = { - .pack_rgba_8unorm = &util_format_rgtc1_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_rgtc1_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_RGTC1_SNORM] = { - .pack_rgba_8unorm = &util_format_rgtc1_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_rgtc1_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_RGTC2_UNORM] = { - .pack_rgba_8unorm = &util_format_rgtc2_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_rgtc2_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_RGTC2_SNORM] = { - .pack_rgba_8unorm = &util_format_rgtc2_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_rgtc2_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_LATC1_UNORM] = { - .pack_rgba_8unorm = &util_format_latc1_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_latc1_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_LATC1_SNORM] = { - .pack_rgba_8unorm = &util_format_latc1_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_latc1_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_LATC2_UNORM] = { - .pack_rgba_8unorm = &util_format_latc2_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_latc2_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_LATC2_SNORM] = { - .pack_rgba_8unorm = &util_format_latc2_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_latc2_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_ETC1_RGB8] = { - .pack_rgba_8unorm = &util_format_etc1_rgb8_pack_rgba_8unorm, - .pack_rgba_float = &util_format_etc1_rgb8_pack_rgba_float, - }, - - [PIPE_FORMAT_ETC2_RGB8] = { 0 }, - [PIPE_FORMAT_ETC2_SRGB8] = { 0 }, - [PIPE_FORMAT_ETC2_RGB8A1] = { 0 }, - [PIPE_FORMAT_ETC2_SRGB8A1] = { 0 }, - [PIPE_FORMAT_ETC2_RGBA8] = { 0 }, - [PIPE_FORMAT_ETC2_SRGBA8] = { 0 }, - [PIPE_FORMAT_ETC2_R11_UNORM] = { 0 }, - [PIPE_FORMAT_ETC2_R11_SNORM] = { 0 }, - [PIPE_FORMAT_ETC2_RG11_UNORM] = { 0 }, - [PIPE_FORMAT_ETC2_RG11_SNORM] = { 0 }, - [PIPE_FORMAT_BPTC_RGBA_UNORM] = { - .pack_rgba_8unorm = &util_format_bptc_rgba_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_bptc_rgba_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_BPTC_SRGBA] = { - .pack_rgba_8unorm = &util_format_bptc_srgba_pack_rgba_8unorm, - .pack_rgba_float = &util_format_bptc_srgba_pack_rgba_float, - }, - - [PIPE_FORMAT_BPTC_RGB_FLOAT] = { - .pack_rgba_8unorm = &util_format_bptc_rgb_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_bptc_rgb_float_pack_rgba_float, - }, - - [PIPE_FORMAT_BPTC_RGB_UFLOAT] = { - .pack_rgba_8unorm = &util_format_bptc_rgb_ufloat_pack_rgba_8unorm, - .pack_rgba_float = &util_format_bptc_rgb_ufloat_pack_rgba_float, - }, - - [PIPE_FORMAT_ASTC_4x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x6] = { 0 }, - [PIPE_FORMAT_ASTC_8x5] = { 0 }, - [PIPE_FORMAT_ASTC_8x6] = { 0 }, - [PIPE_FORMAT_ASTC_8x8] = { 0 }, - [PIPE_FORMAT_ASTC_10x5] = { 0 }, - [PIPE_FORMAT_ASTC_10x6] = { 0 }, - [PIPE_FORMAT_ASTC_10x8] = { 0 }, - [PIPE_FORMAT_ASTC_10x10] = { 0 }, - [PIPE_FORMAT_ASTC_12x10] = { 0 }, - [PIPE_FORMAT_ASTC_12x12] = { 0 }, - [PIPE_FORMAT_ASTC_4x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x6_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_8x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_8x6_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_8x8_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x6_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x8_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x10_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_12x10_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_12x12_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_3x3x3] = { 0 }, - [PIPE_FORMAT_ASTC_4x3x3] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x3] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x4x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x5x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x6] = { 0 }, - [PIPE_FORMAT_ASTC_3x3x3_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_4x3x3_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x3_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x4x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x5x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x6_SRGB] = { 0 }, - [PIPE_FORMAT_ATC_RGB] = { 0 }, - [PIPE_FORMAT_ATC_RGBA_EXPLICIT] = { 0 }, - [PIPE_FORMAT_ATC_RGBA_INTERPOLATED] = { 0 }, - [PIPE_FORMAT_R64_FLOAT] = { - .pack_rgba_8unorm = &util_format_r64_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r64_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R64G64_FLOAT] = { - .pack_rgba_8unorm = &util_format_r64g64_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r64g64_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R64G64B64_FLOAT] = { - .pack_rgba_8unorm = &util_format_r64g64b64_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r64g64b64_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R64G64B64A64_FLOAT] = { - .pack_rgba_8unorm = &util_format_r64g64b64a64_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r64g64b64a64_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R32_FLOAT] = { - .pack_rgba_8unorm = &util_format_r32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32_FLOAT] = { - .pack_rgba_8unorm = &util_format_r32g32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32_FLOAT] = { - .pack_rgba_8unorm = &util_format_r32g32b32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32A32_FLOAT] = { - .pack_rgba_8unorm = &util_format_r32g32b32a32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32a32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R32_UNORM] = { - .pack_rgba_8unorm = &util_format_r32_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32_UNORM] = { - .pack_rgba_8unorm = &util_format_r32g32_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32_UNORM] = { - .pack_rgba_8unorm = &util_format_r32g32b32_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32A32_UNORM] = { - .pack_rgba_8unorm = &util_format_r32g32b32a32_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32a32_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32_USCALED] = { - .pack_rgba_8unorm = &util_format_r32_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32_USCALED] = { - .pack_rgba_8unorm = &util_format_r32g32_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32_USCALED] = { - .pack_rgba_8unorm = &util_format_r32g32b32_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32A32_USCALED] = { - .pack_rgba_8unorm = &util_format_r32g32b32a32_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32a32_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32_SNORM] = { - .pack_rgba_8unorm = &util_format_r32_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32_SNORM] = { - .pack_rgba_8unorm = &util_format_r32g32_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32_SNORM] = { - .pack_rgba_8unorm = &util_format_r32g32b32_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32A32_SNORM] = { - .pack_rgba_8unorm = &util_format_r32g32b32a32_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32a32_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R32_SSCALED] = { - .pack_rgba_8unorm = &util_format_r32_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32_SSCALED] = { - .pack_rgba_8unorm = &util_format_r32g32_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32_SSCALED] = { - .pack_rgba_8unorm = &util_format_r32g32b32_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32A32_SSCALED] = { - .pack_rgba_8unorm = &util_format_r32g32b32a32_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32a32_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16_FLOAT] = { - .pack_rgba_8unorm = &util_format_r16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16_FLOAT] = { - .pack_rgba_8unorm = &util_format_r16g16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16_FLOAT] = { - .pack_rgba_8unorm = &util_format_r16g16b16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16A16_FLOAT] = { - .pack_rgba_8unorm = &util_format_r16g16b16a16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16a16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R16_UNORM] = { - .pack_rgba_8unorm = &util_format_r16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16_UNORM] = { - .pack_rgba_8unorm = &util_format_r16g16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16_UNORM] = { - .pack_rgba_8unorm = &util_format_r16g16b16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16A16_UNORM] = { - .pack_rgba_8unorm = &util_format_r16g16b16a16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16a16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16_USCALED] = { - .pack_rgba_8unorm = &util_format_r16_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16_USCALED] = { - .pack_rgba_8unorm = &util_format_r16g16_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16_USCALED] = { - .pack_rgba_8unorm = &util_format_r16g16b16_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16A16_USCALED] = { - .pack_rgba_8unorm = &util_format_r16g16b16a16_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16a16_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16_SNORM] = { - .pack_rgba_8unorm = &util_format_r16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16_SNORM] = { - .pack_rgba_8unorm = &util_format_r16g16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16_SNORM] = { - .pack_rgba_8unorm = &util_format_r16g16b16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16A16_SNORM] = { - .pack_rgba_8unorm = &util_format_r16g16b16a16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16a16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16_SSCALED] = { - .pack_rgba_8unorm = &util_format_r16_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16_SSCALED] = { - .pack_rgba_8unorm = &util_format_r16g16_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16_SSCALED] = { - .pack_rgba_8unorm = &util_format_r16g16b16_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16A16_SSCALED] = { - .pack_rgba_8unorm = &util_format_r16g16b16a16_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16a16_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8_UNORM] = { - .pack_rgba_8unorm = &util_format_r8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8_UNORM] = { - .pack_rgba_8unorm = &util_format_r8g8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8_UNORM] = { - .pack_rgba_8unorm = &util_format_r8g8b8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8_UNORM] = { - .pack_rgba_8unorm = &util_format_b8g8r8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8A8_UNORM] = { - .pack_rgba_8unorm = &util_format_r8g8b8a8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8a8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8_USCALED] = { - .pack_rgba_8unorm = &util_format_r8_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8_USCALED] = { - .pack_rgba_8unorm = &util_format_r8g8_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8_USCALED] = { - .pack_rgba_8unorm = &util_format_r8g8b8_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8_USCALED] = { - .pack_rgba_8unorm = &util_format_b8g8r8_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8A8_USCALED] = { - .pack_rgba_8unorm = &util_format_r8g8b8a8_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8a8_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8A8_USCALED] = { - .pack_rgba_8unorm = &util_format_b8g8r8a8_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8a8_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_A8B8G8R8_USCALED] = { - .pack_rgba_8unorm = &util_format_a8b8g8r8_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8b8g8r8_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8_SNORM] = { - .pack_rgba_8unorm = &util_format_r8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8_SNORM] = { - .pack_rgba_8unorm = &util_format_r8g8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8_SNORM] = { - .pack_rgba_8unorm = &util_format_r8g8b8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8_SNORM] = { - .pack_rgba_8unorm = &util_format_b8g8r8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8A8_SNORM] = { - .pack_rgba_8unorm = &util_format_r8g8b8a8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8a8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8A8_SNORM] = { - .pack_rgba_8unorm = &util_format_b8g8r8a8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8a8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8_SSCALED] = { - .pack_rgba_8unorm = &util_format_r8_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8_SSCALED] = { - .pack_rgba_8unorm = &util_format_r8g8_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8_SSCALED] = { - .pack_rgba_8unorm = &util_format_r8g8b8_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8_SSCALED] = { - .pack_rgba_8unorm = &util_format_b8g8r8_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8A8_SSCALED] = { - .pack_rgba_8unorm = &util_format_r8g8b8a8_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8a8_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_B8G8R8A8_SSCALED] = { - .pack_rgba_8unorm = &util_format_b8g8r8a8_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b8g8r8a8_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_A8B8G8R8_SSCALED] = { - .pack_rgba_8unorm = &util_format_a8b8g8r8_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8b8g8r8_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R32_FIXED] = { - .pack_rgba_8unorm = &util_format_r32_fixed_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32_fixed_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32_FIXED] = { - .pack_rgba_8unorm = &util_format_r32g32_fixed_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32_fixed_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32_FIXED] = { - .pack_rgba_8unorm = &util_format_r32g32b32_fixed_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32_fixed_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32A32_FIXED] = { - .pack_rgba_8unorm = &util_format_r32g32b32a32_fixed_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32a32_fixed_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10X2_USCALED] = { - .pack_rgba_8unorm = &util_format_r10g10b10x2_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10g10b10x2_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10X2_SNORM] = { - .pack_rgba_8unorm = &util_format_r10g10b10x2_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10g10b10x2_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10X2_SINT] = { - .pack_rgba_uint = &util_format_r10g10b10x2_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r10g10b10x2_sint_pack_signed, - }, - - [PIPE_FORMAT_YV12] = { 0 }, - [PIPE_FORMAT_YV16] = { 0 }, - [PIPE_FORMAT_IYUV] = { 0 }, - [PIPE_FORMAT_NV12] = { 0 }, - [PIPE_FORMAT_NV21] = { 0 }, - [PIPE_FORMAT_Y8_400_UNORM] = { 0 }, - [PIPE_FORMAT_R8_G8B8_420_UNORM] = { 0 }, - [PIPE_FORMAT_G8_B8R8_420_UNORM] = { 0 }, - [PIPE_FORMAT_G8_B8_R8_420_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_U8_V8_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_U8V8_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_U8_V8_444_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16_V16_420_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16_V16_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16V16_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16_V16_444_UNORM] = { 0 }, - [PIPE_FORMAT_P010] = { 0 }, - [PIPE_FORMAT_P012] = { 0 }, - [PIPE_FORMAT_P016] = { 0 }, - [PIPE_FORMAT_P030] = { 0 }, - [PIPE_FORMAT_Y210] = { 0 }, - [PIPE_FORMAT_Y212] = { 0 }, - [PIPE_FORMAT_Y216] = { 0 }, - [PIPE_FORMAT_Y410] = { 0 }, - [PIPE_FORMAT_Y412] = { 0 }, - [PIPE_FORMAT_Y416] = { 0 }, - [PIPE_FORMAT_A4R4_UNORM] = { - .pack_rgba_8unorm = &util_format_a4r4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a4r4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R4A4_UNORM] = { - .pack_rgba_8unorm = &util_format_r4a4_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r4a4_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8A8_UNORM] = { - .pack_rgba_8unorm = &util_format_r8a8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8a8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A8R8_UNORM] = { - .pack_rgba_8unorm = &util_format_a8r8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8r8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10A2_USCALED] = { - .pack_rgba_8unorm = &util_format_r10g10b10a2_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10g10b10a2_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10A2_SSCALED] = { - .pack_rgba_8unorm = &util_format_r10g10b10a2_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10g10b10a2_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_R10G10B10A2_SNORM] = { - .pack_rgba_8unorm = &util_format_r10g10b10a2_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r10g10b10a2_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B10G10R10A2_USCALED] = { - .pack_rgba_8unorm = &util_format_b10g10r10a2_uscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b10g10r10a2_uscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_B10G10R10A2_SSCALED] = { - .pack_rgba_8unorm = &util_format_b10g10r10a2_sscaled_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b10g10r10a2_sscaled_pack_rgba_float, - }, - - [PIPE_FORMAT_B10G10R10A2_SNORM] = { - .pack_rgba_8unorm = &util_format_b10g10r10a2_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b10g10r10a2_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8_UINT] = { - .pack_rgba_uint = &util_format_r8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r8_uint_pack_signed, - }, - - [PIPE_FORMAT_R8G8_UINT] = { - .pack_rgba_uint = &util_format_r8g8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8_uint_pack_signed, - }, - - [PIPE_FORMAT_R8G8B8_UINT] = { - .pack_rgba_uint = &util_format_r8g8b8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8b8_uint_pack_signed, - }, - - [PIPE_FORMAT_R8G8B8A8_UINT] = { - .pack_rgba_uint = &util_format_r8g8b8a8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8b8a8_uint_pack_signed, - }, - - [PIPE_FORMAT_R8_SINT] = { - .pack_rgba_uint = &util_format_r8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r8_sint_pack_signed, - }, - - [PIPE_FORMAT_R8G8_SINT] = { - .pack_rgba_uint = &util_format_r8g8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8_sint_pack_signed, - }, - - [PIPE_FORMAT_R8G8B8_SINT] = { - .pack_rgba_uint = &util_format_r8g8b8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8b8_sint_pack_signed, - }, - - [PIPE_FORMAT_R8G8B8A8_SINT] = { - .pack_rgba_uint = &util_format_r8g8b8a8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8b8a8_sint_pack_signed, - }, - - [PIPE_FORMAT_R16_UINT] = { - .pack_rgba_uint = &util_format_r16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r16_uint_pack_signed, - }, - - [PIPE_FORMAT_R16G16_UINT] = { - .pack_rgba_uint = &util_format_r16g16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16_uint_pack_signed, - }, - - [PIPE_FORMAT_R16G16B16_UINT] = { - .pack_rgba_uint = &util_format_r16g16b16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16b16_uint_pack_signed, - }, - - [PIPE_FORMAT_R16G16B16A16_UINT] = { - .pack_rgba_uint = &util_format_r16g16b16a16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16b16a16_uint_pack_signed, - }, - - [PIPE_FORMAT_R16_SINT] = { - .pack_rgba_uint = &util_format_r16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r16_sint_pack_signed, - }, - - [PIPE_FORMAT_R16G16_SINT] = { - .pack_rgba_uint = &util_format_r16g16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16_sint_pack_signed, - }, - - [PIPE_FORMAT_R16G16B16_SINT] = { - .pack_rgba_uint = &util_format_r16g16b16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16b16_sint_pack_signed, - }, - - [PIPE_FORMAT_R16G16B16A16_SINT] = { - .pack_rgba_uint = &util_format_r16g16b16a16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16b16a16_sint_pack_signed, - }, - - [PIPE_FORMAT_R32_UINT] = { - .pack_rgba_uint = &util_format_r32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r32_uint_pack_signed, - }, - - [PIPE_FORMAT_R32G32_UINT] = { - .pack_rgba_uint = &util_format_r32g32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32_uint_pack_signed, - }, - - [PIPE_FORMAT_R32G32B32_UINT] = { - .pack_rgba_uint = &util_format_r32g32b32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32b32_uint_pack_signed, - }, - - [PIPE_FORMAT_R32G32B32A32_UINT] = { - .pack_rgba_uint = &util_format_r32g32b32a32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32b32a32_uint_pack_signed, - }, - - [PIPE_FORMAT_R32_SINT] = { - .pack_rgba_uint = &util_format_r32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r32_sint_pack_signed, - }, - - [PIPE_FORMAT_R32G32_SINT] = { - .pack_rgba_uint = &util_format_r32g32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32_sint_pack_signed, - }, - - [PIPE_FORMAT_R32G32B32_SINT] = { - .pack_rgba_uint = &util_format_r32g32b32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32b32_sint_pack_signed, - }, - - [PIPE_FORMAT_R32G32B32A32_SINT] = { - .pack_rgba_uint = &util_format_r32g32b32a32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32b32a32_sint_pack_signed, - }, - - [PIPE_FORMAT_R64_UINT] = { - .pack_rgba_uint = &util_format_r64_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r64_uint_pack_signed, - }, - - [PIPE_FORMAT_R64G64_UINT] = { - .pack_rgba_uint = &util_format_r64g64_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r64g64_uint_pack_signed, - }, - - [PIPE_FORMAT_R64G64B64_UINT] = { - .pack_rgba_uint = &util_format_r64g64b64_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r64g64b64_uint_pack_signed, - }, - - [PIPE_FORMAT_R64G64B64A64_UINT] = { - .pack_rgba_uint = &util_format_r64g64b64a64_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r64g64b64a64_uint_pack_signed, - }, - - [PIPE_FORMAT_R64_SINT] = { - .pack_rgba_uint = &util_format_r64_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r64_sint_pack_signed, - }, - - [PIPE_FORMAT_R64G64_SINT] = { - .pack_rgba_uint = &util_format_r64g64_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r64g64_sint_pack_signed, - }, - - [PIPE_FORMAT_R64G64B64_SINT] = { - .pack_rgba_uint = &util_format_r64g64b64_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r64g64b64_sint_pack_signed, - }, - - [PIPE_FORMAT_R64G64B64A64_SINT] = { - .pack_rgba_uint = &util_format_r64g64b64a64_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r64g64b64a64_sint_pack_signed, - }, - - [PIPE_FORMAT_A8_UINT] = { - .pack_rgba_uint = &util_format_a8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a8_uint_pack_signed, - }, - - [PIPE_FORMAT_I8_UINT] = { - .pack_rgba_uint = &util_format_i8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_i8_uint_pack_signed, - }, - - [PIPE_FORMAT_L8_UINT] = { - .pack_rgba_uint = &util_format_l8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_l8_uint_pack_signed, - }, - - [PIPE_FORMAT_L8A8_UINT] = { - .pack_rgba_uint = &util_format_l8a8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_l8a8_uint_pack_signed, - }, - - [PIPE_FORMAT_A8_SINT] = { - .pack_rgba_uint = &util_format_a8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_a8_sint_pack_signed, - }, - - [PIPE_FORMAT_I8_SINT] = { - .pack_rgba_uint = &util_format_i8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_i8_sint_pack_signed, - }, - - [PIPE_FORMAT_L8_SINT] = { - .pack_rgba_uint = &util_format_l8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_l8_sint_pack_signed, - }, - - [PIPE_FORMAT_L8A8_SINT] = { - .pack_rgba_uint = &util_format_l8a8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_l8a8_sint_pack_signed, - }, - - [PIPE_FORMAT_A16_UINT] = { - .pack_rgba_uint = &util_format_a16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a16_uint_pack_signed, - }, - - [PIPE_FORMAT_I16_UINT] = { - .pack_rgba_uint = &util_format_i16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_i16_uint_pack_signed, - }, - - [PIPE_FORMAT_L16_UINT] = { - .pack_rgba_uint = &util_format_l16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_l16_uint_pack_signed, - }, - - [PIPE_FORMAT_L16A16_UINT] = { - .pack_rgba_uint = &util_format_l16a16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_l16a16_uint_pack_signed, - }, - - [PIPE_FORMAT_A16_SINT] = { - .pack_rgba_uint = &util_format_a16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_a16_sint_pack_signed, - }, - - [PIPE_FORMAT_I16_SINT] = { - .pack_rgba_uint = &util_format_i16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_i16_sint_pack_signed, - }, - - [PIPE_FORMAT_L16_SINT] = { - .pack_rgba_uint = &util_format_l16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_l16_sint_pack_signed, - }, - - [PIPE_FORMAT_L16A16_SINT] = { - .pack_rgba_uint = &util_format_l16a16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_l16a16_sint_pack_signed, - }, - - [PIPE_FORMAT_A32_UINT] = { - .pack_rgba_uint = &util_format_a32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a32_uint_pack_signed, - }, - - [PIPE_FORMAT_I32_UINT] = { - .pack_rgba_uint = &util_format_i32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_i32_uint_pack_signed, - }, - - [PIPE_FORMAT_L32_UINT] = { - .pack_rgba_uint = &util_format_l32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_l32_uint_pack_signed, - }, - - [PIPE_FORMAT_L32A32_UINT] = { - .pack_rgba_uint = &util_format_l32a32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_l32a32_uint_pack_signed, - }, - - [PIPE_FORMAT_A32_SINT] = { - .pack_rgba_uint = &util_format_a32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_a32_sint_pack_signed, - }, - - [PIPE_FORMAT_I32_SINT] = { - .pack_rgba_uint = &util_format_i32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_i32_sint_pack_signed, - }, - - [PIPE_FORMAT_L32_SINT] = { - .pack_rgba_uint = &util_format_l32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_l32_sint_pack_signed, - }, - - [PIPE_FORMAT_L32A32_SINT] = { - .pack_rgba_uint = &util_format_l32a32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_l32a32_sint_pack_signed, - }, - - [PIPE_FORMAT_B8G8R8_UINT] = { - .pack_rgba_uint = &util_format_b8g8r8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b8g8r8_uint_pack_signed, - }, - - [PIPE_FORMAT_B8G8R8A8_UINT] = { - .pack_rgba_uint = &util_format_b8g8r8a8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b8g8r8a8_uint_pack_signed, - }, - - [PIPE_FORMAT_B8G8R8_SINT] = { - .pack_rgba_uint = &util_format_b8g8r8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_b8g8r8_sint_pack_signed, - }, - - [PIPE_FORMAT_B8G8R8A8_SINT] = { - .pack_rgba_uint = &util_format_b8g8r8a8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_b8g8r8a8_sint_pack_signed, - }, - - [PIPE_FORMAT_A8R8G8B8_UINT] = { - .pack_rgba_uint = &util_format_a8r8g8b8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a8r8g8b8_uint_pack_signed, - }, - - [PIPE_FORMAT_A8B8G8R8_UINT] = { - .pack_rgba_uint = &util_format_a8b8g8r8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a8b8g8r8_uint_pack_signed, - }, - - [PIPE_FORMAT_A2R10G10B10_UINT] = { - .pack_rgba_uint = &util_format_a2r10g10b10_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a2r10g10b10_uint_pack_signed, - }, - - [PIPE_FORMAT_A2B10G10R10_UINT] = { - .pack_rgba_uint = &util_format_a2b10g10r10_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a2b10g10r10_uint_pack_signed, - }, - - [PIPE_FORMAT_B10G10R10A2_UINT] = { - .pack_rgba_uint = &util_format_b10g10r10a2_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b10g10r10a2_uint_pack_signed, - }, - - [PIPE_FORMAT_B10G10R10A2_SINT] = { - .pack_rgba_uint = &util_format_b10g10r10a2_sint_pack_unsigned, - .pack_rgba_sint = &util_format_b10g10r10a2_sint_pack_signed, - }, - - [PIPE_FORMAT_R5G6B5_UINT] = { - .pack_rgba_uint = &util_format_r5g6b5_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r5g6b5_uint_pack_signed, - }, - - [PIPE_FORMAT_B5G6R5_UINT] = { - .pack_rgba_uint = &util_format_b5g6r5_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b5g6r5_uint_pack_signed, - }, - - [PIPE_FORMAT_R3G3B2_UINT] = { - .pack_rgba_uint = &util_format_r3g3b2_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r3g3b2_uint_pack_signed, - }, - - [PIPE_FORMAT_B2G3R3_UINT] = { - .pack_rgba_uint = &util_format_b2g3r3_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b2g3r3_uint_pack_signed, - }, - - [PIPE_FORMAT_R4G4B4A4_UINT] = { - .pack_rgba_uint = &util_format_r4g4b4a4_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r4g4b4a4_uint_pack_signed, - }, - - [PIPE_FORMAT_B4G4R4A4_UINT] = { - .pack_rgba_uint = &util_format_b4g4r4a4_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b4g4r4a4_uint_pack_signed, - }, - - [PIPE_FORMAT_A4R4G4B4_UINT] = { - .pack_rgba_uint = &util_format_a4r4g4b4_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a4r4g4b4_uint_pack_signed, - }, - - [PIPE_FORMAT_A4B4G4R4_UINT] = { - .pack_rgba_uint = &util_format_a4b4g4r4_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a4b4g4r4_uint_pack_signed, - }, - - [PIPE_FORMAT_A1R5G5B5_UINT] = { - .pack_rgba_uint = &util_format_a1r5g5b5_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a1r5g5b5_uint_pack_signed, - }, - - [PIPE_FORMAT_A1B5G5R5_UINT] = { - .pack_rgba_uint = &util_format_a1b5g5r5_uint_pack_unsigned, - .pack_rgba_sint = &util_format_a1b5g5r5_uint_pack_signed, - }, - - [PIPE_FORMAT_R5G5B5A1_UINT] = { - .pack_rgba_uint = &util_format_r5g5b5a1_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r5g5b5a1_uint_pack_signed, - }, - - [PIPE_FORMAT_B5G5R5A1_UINT] = { - .pack_rgba_uint = &util_format_b5g5r5a1_uint_pack_unsigned, - .pack_rgba_sint = &util_format_b5g5r5a1_uint_pack_signed, - }, - - [PIPE_FORMAT_R8G8B8X8_SNORM] = { - .pack_rgba_8unorm = &util_format_r8g8b8x8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8x8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8X8_SRGB] = { - .pack_rgba_8unorm = &util_format_r8g8b8x8_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8g8b8x8_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_R8G8B8X8_UINT] = { - .pack_rgba_uint = &util_format_r8g8b8x8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8b8x8_uint_pack_signed, - }, - - [PIPE_FORMAT_R8G8B8X8_SINT] = { - .pack_rgba_uint = &util_format_r8g8b8x8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r8g8b8x8_sint_pack_signed, - }, - - [PIPE_FORMAT_B10G10R10X2_UNORM] = { - .pack_rgba_8unorm = &util_format_b10g10r10x2_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b10g10r10x2_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B10G10R10X2_SNORM] = { - .pack_rgba_8unorm = &util_format_b10g10r10x2_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b10g10r10x2_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_B10G10R10X2_SINT] = { - .pack_rgba_uint = &util_format_b10g10r10x2_sint_pack_unsigned, - .pack_rgba_sint = &util_format_b10g10r10x2_sint_pack_signed, - }, - - [PIPE_FORMAT_R16G16B16X16_UNORM] = { - .pack_rgba_8unorm = &util_format_r16g16b16x16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16x16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16X16_SNORM] = { - .pack_rgba_8unorm = &util_format_r16g16b16x16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16x16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16X16_FLOAT] = { - .pack_rgba_8unorm = &util_format_r16g16b16x16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16g16b16x16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R16G16B16X16_UINT] = { - .pack_rgba_uint = &util_format_r16g16b16x16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16b16x16_uint_pack_signed, - }, - - [PIPE_FORMAT_R16G16B16X16_SINT] = { - .pack_rgba_uint = &util_format_r16g16b16x16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r16g16b16x16_sint_pack_signed, - }, - - [PIPE_FORMAT_R32G32B32X32_FLOAT] = { - .pack_rgba_8unorm = &util_format_r32g32b32x32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32g32b32x32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R32G32B32X32_UINT] = { - .pack_rgba_uint = &util_format_r32g32b32x32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32b32x32_uint_pack_signed, - }, - - [PIPE_FORMAT_R32G32B32X32_SINT] = { - .pack_rgba_uint = &util_format_r32g32b32x32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r32g32b32x32_sint_pack_signed, - }, - - [PIPE_FORMAT_R8A8_SNORM] = { - .pack_rgba_8unorm = &util_format_r8a8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r8a8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16A16_UNORM] = { - .pack_rgba_8unorm = &util_format_r16a16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16a16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16A16_SNORM] = { - .pack_rgba_8unorm = &util_format_r16a16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16a16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_R16A16_FLOAT] = { - .pack_rgba_8unorm = &util_format_r16a16_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r16a16_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R32A32_FLOAT] = { - .pack_rgba_8unorm = &util_format_r32a32_float_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r32a32_float_pack_rgba_float, - }, - - [PIPE_FORMAT_R8A8_UINT] = { - .pack_rgba_uint = &util_format_r8a8_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r8a8_uint_pack_signed, - }, - - [PIPE_FORMAT_R8A8_SINT] = { - .pack_rgba_uint = &util_format_r8a8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r8a8_sint_pack_signed, - }, - - [PIPE_FORMAT_R16A16_UINT] = { - .pack_rgba_uint = &util_format_r16a16_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r16a16_uint_pack_signed, - }, - - [PIPE_FORMAT_R16A16_SINT] = { - .pack_rgba_uint = &util_format_r16a16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r16a16_sint_pack_signed, - }, - - [PIPE_FORMAT_R32A32_UINT] = { - .pack_rgba_uint = &util_format_r32a32_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r32a32_uint_pack_signed, - }, - - [PIPE_FORMAT_R32A32_SINT] = { - .pack_rgba_uint = &util_format_r32a32_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r32a32_sint_pack_signed, - }, - - [PIPE_FORMAT_R10G10B10A2_UINT] = { - .pack_rgba_uint = &util_format_r10g10b10a2_uint_pack_unsigned, - .pack_rgba_sint = &util_format_r10g10b10a2_uint_pack_signed, - }, - - [PIPE_FORMAT_R10G10B10A2_SINT] = { - .pack_rgba_uint = &util_format_r10g10b10a2_sint_pack_unsigned, - .pack_rgba_sint = &util_format_r10g10b10a2_sint_pack_signed, - }, - - [PIPE_FORMAT_B5G6R5_SRGB] = { - .pack_rgba_8unorm = &util_format_b5g6r5_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_b5g6r5_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_R5G6B5_SRGB] = { - .pack_rgba_8unorm = &util_format_r5g6b5_srgb_pack_rgba_8unorm, - .pack_rgba_float = &util_format_r5g6b5_srgb_pack_rgba_float, - }, - - [PIPE_FORMAT_G8R8_UNORM] = { - .pack_rgba_8unorm = &util_format_g8r8_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_g8r8_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_G8R8_SNORM] = { - .pack_rgba_8unorm = &util_format_g8r8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_g8r8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_G8R8_SINT] = { - .pack_rgba_uint = &util_format_g8r8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_g8r8_sint_pack_signed, - }, - - [PIPE_FORMAT_G16R16_UNORM] = { - .pack_rgba_8unorm = &util_format_g16r16_unorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_g16r16_unorm_pack_rgba_float, - }, - - [PIPE_FORMAT_G16R16_SNORM] = { - .pack_rgba_8unorm = &util_format_g16r16_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_g16r16_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_G16R16_SINT] = { - .pack_rgba_uint = &util_format_g16r16_sint_pack_unsigned, - .pack_rgba_sint = &util_format_g16r16_sint_pack_signed, - }, - - [PIPE_FORMAT_A8B8G8R8_SNORM] = { - .pack_rgba_8unorm = &util_format_a8b8g8r8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_a8b8g8r8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_A8B8G8R8_SINT] = { - .pack_rgba_uint = &util_format_a8b8g8r8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_a8b8g8r8_sint_pack_signed, - }, - - [PIPE_FORMAT_X8B8G8R8_SNORM] = { - .pack_rgba_8unorm = &util_format_x8b8g8r8_snorm_pack_rgba_8unorm, - .pack_rgba_float = &util_format_x8b8g8r8_snorm_pack_rgba_float, - }, - - [PIPE_FORMAT_X8B8G8R8_SINT] = { - .pack_rgba_uint = &util_format_x8b8g8r8_sint_pack_unsigned, - .pack_rgba_sint = &util_format_x8b8g8r8_sint_pack_signed, - }, - -}; - -ATTRIBUTE_RETURNS_NONNULL const struct util_format_pack_description * -util_format_pack_description(enum pipe_format format) -{ - assert(format < PIPE_FORMAT_COUNT); - return &util_format_pack_descriptions[format]; -} - -static const struct util_format_unpack_description -util_format_unpack_descriptions[PIPE_FORMAT_COUNT] = { - [PIPE_FORMAT_NONE] = { - .unpack_rgba_8unorm = &util_format_none_unpack_rgba_8unorm, - .unpack_rgba = &util_format_none_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8A8_UNORM] = { - .unpack_rgba_8unorm = &util_format_b8g8r8a8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8a8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8X8_UNORM] = { - .unpack_rgba_8unorm = &util_format_b8g8r8x8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8x8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8X8_SNORM] = { - .unpack_rgba_8unorm = &util_format_b8g8r8x8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8x8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8X8_UINT] = { - .unpack_rgba = &util_format_b8g8r8x8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B8G8R8X8_SINT] = { - .unpack_rgba = &util_format_b8g8r8x8_sint_unpack_signed, - }, - [PIPE_FORMAT_A8R8G8B8_UNORM] = { - .unpack_rgba_8unorm = &util_format_a8r8g8b8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8r8g8b8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A8R8G8B8_SNORM] = { - .unpack_rgba_8unorm = &util_format_a8r8g8b8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8r8g8b8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A8R8G8B8_SINT] = { - .unpack_rgba = &util_format_a8r8g8b8_sint_unpack_signed, - }, - [PIPE_FORMAT_X8R8G8B8_UNORM] = { - .unpack_rgba_8unorm = &util_format_x8r8g8b8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x8r8g8b8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_X8R8G8B8_SNORM] = { - .unpack_rgba_8unorm = &util_format_x8r8g8b8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x8r8g8b8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_X8R8G8B8_SINT] = { - .unpack_rgba = &util_format_x8r8g8b8_sint_unpack_signed, - }, - [PIPE_FORMAT_A8B8G8R8_UNORM] = { - .unpack_rgba_8unorm = &util_format_a8b8g8r8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8b8g8r8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_X8B8G8R8_UNORM] = { - .unpack_rgba_8unorm = &util_format_x8b8g8r8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x8b8g8r8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8X8_UNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8b8x8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8x8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R5G5B5A1_UNORM] = { - .unpack_rgba_8unorm = &util_format_r5g5b5a1_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r5g5b5a1_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R5G5B5X1_UNORM] = { - .unpack_rgba_8unorm = &util_format_r5g5b5x1_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r5g5b5x1_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B5G5R5X1_UNORM] = { - .unpack_rgba_8unorm = &util_format_b5g5r5x1_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b5g5r5x1_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B5G5R5A1_UNORM] = { - .unpack_rgba_8unorm = &util_format_b5g5r5a1_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b5g5r5a1_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_X1B5G5R5_UNORM] = { - .unpack_rgba_8unorm = &util_format_x1b5g5r5_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x1b5g5r5_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A1R5G5B5_UNORM] = { - .unpack_rgba_8unorm = &util_format_a1r5g5b5_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a1r5g5b5_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_X1R5G5B5_UNORM] = { - .unpack_rgba_8unorm = &util_format_x1r5g5b5_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x1r5g5b5_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A1B5G5R5_UNORM] = { - .unpack_rgba_8unorm = &util_format_a1b5g5r5_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a1b5g5r5_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R4G4B4A4_UNORM] = { - .unpack_rgba_8unorm = &util_format_r4g4b4a4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r4g4b4a4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R4G4B4X4_UNORM] = { - .unpack_rgba_8unorm = &util_format_r4g4b4x4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r4g4b4x4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B4G4R4A4_UNORM] = { - .unpack_rgba_8unorm = &util_format_b4g4r4a4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b4g4r4a4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B4G4R4X4_UNORM] = { - .unpack_rgba_8unorm = &util_format_b4g4r4x4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b4g4r4x4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A4R4G4B4_UNORM] = { - .unpack_rgba_8unorm = &util_format_a4r4g4b4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a4r4g4b4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A4B4G4R4_UNORM] = { - .unpack_rgba_8unorm = &util_format_a4b4g4r4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a4b4g4r4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R5G6B5_UNORM] = { - .unpack_rgba_8unorm = &util_format_r5g6b5_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r5g6b5_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B5G6R5_UNORM] = { - .unpack_rgba_8unorm = &util_format_b5g6r5_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b5g6r5_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10A2_UNORM] = { - .unpack_rgba_8unorm = &util_format_r10g10b10a2_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10g10b10a2_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10X2_UNORM] = { - .unpack_rgba_8unorm = &util_format_r10g10b10x2_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10g10b10x2_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B10G10R10A2_UNORM] = { - .unpack_rgba_8unorm = &util_format_b10g10r10a2_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b10g10r10a2_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A2R10G10B10_UNORM] = { - .unpack_rgba_8unorm = &util_format_a2r10g10b10_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a2r10g10b10_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A2B10G10R10_UNORM] = { - .unpack_rgba_8unorm = &util_format_a2b10g10r10_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a2b10g10r10_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R3G3B2_UNORM] = { - .unpack_rgba_8unorm = &util_format_r3g3b2_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r3g3b2_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B2G3R3_UNORM] = { - .unpack_rgba_8unorm = &util_format_b2g3r3_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b2g3r3_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L8_UNORM] = { - .unpack_rgba_8unorm = &util_format_l8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A8_UNORM] = { - .unpack_rgba_8unorm = &util_format_a8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_I8_UNORM] = { - .unpack_rgba_8unorm = &util_format_i8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_i8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L4A4_UNORM] = { - .unpack_rgba_8unorm = &util_format_l4a4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l4a4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L8A8_UNORM] = { - .unpack_rgba_8unorm = &util_format_l8a8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l8a8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L16_UNORM] = { - .unpack_rgba_8unorm = &util_format_l16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A16_UNORM] = { - .unpack_rgba_8unorm = &util_format_a16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_I16_UNORM] = { - .unpack_rgba_8unorm = &util_format_i16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_i16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L16A16_UNORM] = { - .unpack_rgba_8unorm = &util_format_l16a16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l16a16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A8_SNORM] = { - .unpack_rgba_8unorm = &util_format_a8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L8_SNORM] = { - .unpack_rgba_8unorm = &util_format_l8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L8A8_SNORM] = { - .unpack_rgba_8unorm = &util_format_l8a8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l8a8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_I8_SNORM] = { - .unpack_rgba_8unorm = &util_format_i8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_i8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A16_SNORM] = { - .unpack_rgba_8unorm = &util_format_a16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L16_SNORM] = { - .unpack_rgba_8unorm = &util_format_l16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_L16A16_SNORM] = { - .unpack_rgba_8unorm = &util_format_l16a16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l16a16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_I16_SNORM] = { - .unpack_rgba_8unorm = &util_format_i16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_i16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_a16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_L16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_l16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_L16A16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_l16a16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l16a16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_I16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_i16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_i16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_A32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_a32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_L32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_l32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_L32A32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_l32a32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l32a32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_I32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_i32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_i32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_L8_SRGB] = { - .unpack_rgba_8unorm = &util_format_l8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_R8_SRGB] = { - .unpack_rgba_8unorm = &util_format_r8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_L8A8_SRGB] = { - .unpack_rgba_8unorm = &util_format_l8a8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_l8a8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8_SRGB] = { - .unpack_rgba_8unorm = &util_format_r8g8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8_SRGB] = { - .unpack_rgba_8unorm = &util_format_r8g8b8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8_SRGB] = { - .unpack_rgba_8unorm = &util_format_b8g8r8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8A8_SRGB] = { - .unpack_rgba_8unorm = &util_format_r8g8b8a8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8a8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_A8B8G8R8_SRGB] = { - .unpack_rgba_8unorm = &util_format_a8b8g8r8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8b8g8r8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_X8B8G8R8_SRGB] = { - .unpack_rgba_8unorm = &util_format_x8b8g8r8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x8b8g8r8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8A8_SRGB] = { - .unpack_rgba_8unorm = &util_format_b8g8r8a8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8a8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8X8_SRGB] = { - .unpack_rgba_8unorm = &util_format_b8g8r8x8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8x8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_A8R8G8B8_SRGB] = { - .unpack_rgba_8unorm = &util_format_a8r8g8b8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8r8g8b8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_X8R8G8B8_SRGB] = { - .unpack_rgba_8unorm = &util_format_x8r8g8b8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x8r8g8b8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_R8SG8SB8UX8U_NORM] = { - .unpack_rgba_8unorm = &util_format_r8sg8sb8ux8u_norm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8sg8sb8ux8u_norm_unpack_rgba_float, - }, - [PIPE_FORMAT_R10SG10SB10SA2U_NORM] = { - .unpack_rgba_8unorm = &util_format_r10sg10sb10sa2u_norm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10sg10sb10sa2u_norm_unpack_rgba_float, - }, - [PIPE_FORMAT_R5SG5SB6U_NORM] = { - .unpack_rgba_8unorm = &util_format_r5sg5sb6u_norm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r5sg5sb6u_norm_unpack_rgba_float, - }, - [PIPE_FORMAT_S8_UINT] = { - .unpack_s_8uint = &util_format_s8_uint_unpack_s_8uint, - }, - [PIPE_FORMAT_Z16_UNORM] = { - .unpack_z_32unorm = &util_format_z16_unorm_unpack_z_32unorm, - .unpack_z_float = &util_format_z16_unorm_unpack_z_float, - }, - [PIPE_FORMAT_Z16_UNORM_S8_UINT] = { - .unpack_z_32unorm = &util_format_z16_unorm_s8_uint_unpack_z_32unorm, - .unpack_z_float = &util_format_z16_unorm_s8_uint_unpack_z_float, - .unpack_s_8uint = &util_format_z16_unorm_s8_uint_unpack_s_8uint, - }, - [PIPE_FORMAT_Z32_UNORM] = { - .unpack_z_32unorm = &util_format_z32_unorm_unpack_z_32unorm, - .unpack_z_float = &util_format_z32_unorm_unpack_z_float, - }, - [PIPE_FORMAT_Z32_FLOAT] = { - .unpack_z_32unorm = &util_format_z32_float_unpack_z_32unorm, - .unpack_z_float = &util_format_z32_float_unpack_z_float, - }, - [PIPE_FORMAT_Z24_UNORM_S8_UINT] = { - .unpack_z_32unorm = &util_format_z24_unorm_s8_uint_unpack_z_32unorm, - .unpack_z_float = &util_format_z24_unorm_s8_uint_unpack_z_float, - .unpack_s_8uint = &util_format_z24_unorm_s8_uint_unpack_s_8uint, - }, - [PIPE_FORMAT_S8_UINT_Z24_UNORM] = { - .unpack_z_32unorm = &util_format_s8_uint_z24_unorm_unpack_z_32unorm, - .unpack_z_float = &util_format_s8_uint_z24_unorm_unpack_z_float, - .unpack_s_8uint = &util_format_s8_uint_z24_unorm_unpack_s_8uint, - }, - [PIPE_FORMAT_X24S8_UINT] = { - .unpack_s_8uint = &util_format_x24s8_uint_unpack_s_8uint, - }, - [PIPE_FORMAT_S8X24_UINT] = { - .unpack_s_8uint = &util_format_s8x24_uint_unpack_s_8uint, - }, - [PIPE_FORMAT_Z24X8_UNORM] = { - .unpack_z_32unorm = &util_format_z24x8_unorm_unpack_z_32unorm, - .unpack_z_float = &util_format_z24x8_unorm_unpack_z_float, - }, - [PIPE_FORMAT_X8Z24_UNORM] = { - .unpack_z_32unorm = &util_format_x8z24_unorm_unpack_z_32unorm, - .unpack_z_float = &util_format_x8z24_unorm_unpack_z_float, - }, - [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT] = { - .unpack_z_32unorm = &util_format_z32_float_s8x24_uint_unpack_z_32unorm, - .unpack_z_float = &util_format_z32_float_s8x24_uint_unpack_z_float, - .unpack_s_8uint = &util_format_z32_float_s8x24_uint_unpack_s_8uint, - }, - [PIPE_FORMAT_X32_S8X24_UINT] = { - .unpack_s_8uint = &util_format_x32_s8x24_uint_unpack_s_8uint, - }, - [PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8] = { - .unpack_rgba_8unorm = &util_format_z24_unorm_s8_uint_as_r8g8b8a8_unpack_rgba_8unorm, - .unpack_rgba = &util_format_z24_unorm_s8_uint_as_r8g8b8a8_unpack_rgba_float, - }, - [PIPE_FORMAT_UYVY] = { - .unpack_rgba_8unorm_rect = &util_format_uyvy_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_uyvy_unpack_rgba_float, - }, - [PIPE_FORMAT_YUYV] = { - .unpack_rgba_8unorm_rect = &util_format_yuyv_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_yuyv_unpack_rgba_float, - }, - [PIPE_FORMAT_AYUV] = { 0 }, - [PIPE_FORMAT_XYUV] = { 0 }, - [PIPE_FORMAT_R8G8_B8G8_UNORM] = { - .unpack_rgba_8unorm_rect = &util_format_r8g8_b8g8_unorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_r8g8_b8g8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_G8R8_G8B8_UNORM] = { 0 }, - [PIPE_FORMAT_G8R8_B8R8_UNORM] = { 0 }, - [PIPE_FORMAT_R8G8_R8B8_UNORM] = { 0 }, - [PIPE_FORMAT_R11G11B10_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r11g11b10_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r11g11b10_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R9G9B9E5_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r9g9b9e5_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r9g9b9e5_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R1_UNORM] = { 0 }, - [PIPE_FORMAT_R8G8Bx_SNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8bx_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8bx_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT1_RGB] = { - .fetch_rgba_8unorm = &util_format_dxt1_rgb_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt1_rgb_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt1_rgb_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT1_RGBA] = { - .fetch_rgba_8unorm = &util_format_dxt1_rgba_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt1_rgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt1_rgba_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT3_RGBA] = { - .fetch_rgba_8unorm = &util_format_dxt3_rgba_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt3_rgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt3_rgba_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT5_RGBA] = { - .fetch_rgba_8unorm = &util_format_dxt5_rgba_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt5_rgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt5_rgba_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT1_SRGB] = { - .fetch_rgba_8unorm = &util_format_dxt1_srgb_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt1_srgb_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt1_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT1_SRGBA] = { - .fetch_rgba_8unorm = &util_format_dxt1_srgba_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt1_srgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt1_srgba_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT3_SRGBA] = { - .fetch_rgba_8unorm = &util_format_dxt3_srgba_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt3_srgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt3_srgba_unpack_rgba_float, - }, - [PIPE_FORMAT_DXT5_SRGBA] = { - .fetch_rgba_8unorm = &util_format_dxt5_srgba_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_dxt5_srgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_dxt5_srgba_unpack_rgba_float, - }, - [PIPE_FORMAT_FXT1_RGB] = { - .unpack_rgba_8unorm_rect = &util_format_fxt1_rgb_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_fxt1_rgb_unpack_rgba_float, - }, - [PIPE_FORMAT_FXT1_RGBA] = { - .unpack_rgba_8unorm_rect = &util_format_fxt1_rgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_fxt1_rgba_unpack_rgba_float, - }, - [PIPE_FORMAT_RGTC1_UNORM] = { - .fetch_rgba_8unorm = &util_format_rgtc1_unorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_rgtc1_unorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_rgtc1_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_RGTC1_SNORM] = { - .fetch_rgba_8unorm = &util_format_rgtc1_snorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_rgtc1_snorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_rgtc1_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_RGTC2_UNORM] = { - .fetch_rgba_8unorm = &util_format_rgtc2_unorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_rgtc2_unorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_rgtc2_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_RGTC2_SNORM] = { - .fetch_rgba_8unorm = &util_format_rgtc2_snorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_rgtc2_snorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_rgtc2_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_LATC1_UNORM] = { - .fetch_rgba_8unorm = &util_format_latc1_unorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_latc1_unorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_latc1_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_LATC1_SNORM] = { - .fetch_rgba_8unorm = &util_format_latc1_snorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_latc1_snorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_latc1_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_LATC2_UNORM] = { - .fetch_rgba_8unorm = &util_format_latc2_unorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_latc2_unorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_latc2_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_LATC2_SNORM] = { - .fetch_rgba_8unorm = &util_format_latc2_snorm_fetch_rgba_8unorm, - .unpack_rgba_8unorm_rect = &util_format_latc2_snorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_latc2_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_ETC1_RGB8] = { - .unpack_rgba_8unorm_rect = &util_format_etc1_rgb8_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_etc1_rgb8_unpack_rgba_float, - }, - [PIPE_FORMAT_ETC2_RGB8] = { 0 }, - [PIPE_FORMAT_ETC2_SRGB8] = { 0 }, - [PIPE_FORMAT_ETC2_RGB8A1] = { 0 }, - [PIPE_FORMAT_ETC2_SRGB8A1] = { 0 }, - [PIPE_FORMAT_ETC2_RGBA8] = { 0 }, - [PIPE_FORMAT_ETC2_SRGBA8] = { 0 }, - [PIPE_FORMAT_ETC2_R11_UNORM] = { 0 }, - [PIPE_FORMAT_ETC2_R11_SNORM] = { 0 }, - [PIPE_FORMAT_ETC2_RG11_UNORM] = { 0 }, - [PIPE_FORMAT_ETC2_RG11_SNORM] = { 0 }, - [PIPE_FORMAT_BPTC_RGBA_UNORM] = { - .unpack_rgba_8unorm_rect = &util_format_bptc_rgba_unorm_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_bptc_rgba_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_BPTC_SRGBA] = { - .unpack_rgba_8unorm_rect = &util_format_bptc_srgba_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_bptc_srgba_unpack_rgba_float, - }, - [PIPE_FORMAT_BPTC_RGB_FLOAT] = { - .unpack_rgba_8unorm_rect = &util_format_bptc_rgb_float_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_bptc_rgb_float_unpack_rgba_float, - }, - [PIPE_FORMAT_BPTC_RGB_UFLOAT] = { - .unpack_rgba_8unorm_rect = &util_format_bptc_rgb_ufloat_unpack_rgba_8unorm, - .unpack_rgba_rect = &util_format_bptc_rgb_ufloat_unpack_rgba_float, - }, - [PIPE_FORMAT_ASTC_4x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x6] = { 0 }, - [PIPE_FORMAT_ASTC_8x5] = { 0 }, - [PIPE_FORMAT_ASTC_8x6] = { 0 }, - [PIPE_FORMAT_ASTC_8x8] = { 0 }, - [PIPE_FORMAT_ASTC_10x5] = { 0 }, - [PIPE_FORMAT_ASTC_10x6] = { 0 }, - [PIPE_FORMAT_ASTC_10x8] = { 0 }, - [PIPE_FORMAT_ASTC_10x10] = { 0 }, - [PIPE_FORMAT_ASTC_12x10] = { 0 }, - [PIPE_FORMAT_ASTC_12x12] = { 0 }, - [PIPE_FORMAT_ASTC_4x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x6_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_8x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_8x6_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_8x8_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x6_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x8_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_10x10_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_12x10_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_12x12_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_3x3x3] = { 0 }, - [PIPE_FORMAT_ASTC_4x3x3] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x3] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x4x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x4] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x5x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x5] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x6] = { 0 }, - [PIPE_FORMAT_ASTC_3x3x3_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_4x3x3_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x3_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_4x4x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x4x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x4_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_5x5x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x5x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x5_SRGB] = { 0 }, - [PIPE_FORMAT_ASTC_6x6x6_SRGB] = { 0 }, - [PIPE_FORMAT_ATC_RGB] = { 0 }, - [PIPE_FORMAT_ATC_RGBA_EXPLICIT] = { 0 }, - [PIPE_FORMAT_ATC_RGBA_INTERPOLATED] = { 0 }, - [PIPE_FORMAT_R64_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r64_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r64_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R64G64_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r64g64_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r64g64_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R64G64B64_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r64g64b64_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r64g64b64_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R64G64B64A64_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r64g64b64a64_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r64g64b64a64_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r32g32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r32g32b32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32A32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r32g32b32a32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32a32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R32_UNORM] = { - .unpack_rgba_8unorm = &util_format_r32_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32_UNORM] = { - .unpack_rgba_8unorm = &util_format_r32g32_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32_UNORM] = { - .unpack_rgba_8unorm = &util_format_r32g32b32_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32A32_UNORM] = { - .unpack_rgba_8unorm = &util_format_r32g32b32a32_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32a32_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32_USCALED] = { - .unpack_rgba_8unorm = &util_format_r32_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32_USCALED] = { - .unpack_rgba_8unorm = &util_format_r32g32_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32_USCALED] = { - .unpack_rgba_8unorm = &util_format_r32g32b32_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32A32_USCALED] = { - .unpack_rgba_8unorm = &util_format_r32g32b32a32_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32a32_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32_SNORM] = { - .unpack_rgba_8unorm = &util_format_r32_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32_SNORM] = { - .unpack_rgba_8unorm = &util_format_r32g32_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32_SNORM] = { - .unpack_rgba_8unorm = &util_format_r32g32b32_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32A32_SNORM] = { - .unpack_rgba_8unorm = &util_format_r32g32b32a32_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32a32_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R32_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r32_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r32g32_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r32g32b32_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32A32_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r32g32b32a32_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32a32_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r16g16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r16g16b16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16A16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r16g16b16a16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16a16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R16_UNORM] = { - .unpack_rgba_8unorm = &util_format_r16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16_UNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16_UNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16b16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16A16_UNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16b16a16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16a16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16_USCALED] = { - .unpack_rgba_8unorm = &util_format_r16_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16_USCALED] = { - .unpack_rgba_8unorm = &util_format_r16g16_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16_USCALED] = { - .unpack_rgba_8unorm = &util_format_r16g16b16_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16A16_USCALED] = { - .unpack_rgba_8unorm = &util_format_r16g16b16a16_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16a16_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16_SNORM] = { - .unpack_rgba_8unorm = &util_format_r16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16_SNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16_SNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16b16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16A16_SNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16b16a16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16a16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r16_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r16g16_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r16g16b16_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16A16_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r16g16b16a16_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16a16_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8_UNORM] = { - .unpack_rgba_8unorm = &util_format_r8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8_UNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8_UNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8b8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8_UNORM] = { - .unpack_rgba_8unorm = &util_format_b8g8r8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8A8_UNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8b8a8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8a8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8_USCALED] = { - .unpack_rgba_8unorm = &util_format_r8_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8_USCALED] = { - .unpack_rgba_8unorm = &util_format_r8g8_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8_USCALED] = { - .unpack_rgba_8unorm = &util_format_r8g8b8_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8_USCALED] = { - .unpack_rgba_8unorm = &util_format_b8g8r8_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8A8_USCALED] = { - .unpack_rgba_8unorm = &util_format_r8g8b8a8_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8a8_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8A8_USCALED] = { - .unpack_rgba_8unorm = &util_format_b8g8r8a8_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8a8_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_A8B8G8R8_USCALED] = { - .unpack_rgba_8unorm = &util_format_a8b8g8r8_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8b8g8r8_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8_SNORM] = { - .unpack_rgba_8unorm = &util_format_r8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8_SNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8_SNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8b8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8_SNORM] = { - .unpack_rgba_8unorm = &util_format_b8g8r8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8A8_SNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8b8a8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8a8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8A8_SNORM] = { - .unpack_rgba_8unorm = &util_format_b8g8r8a8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8a8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r8_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r8g8_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r8g8b8_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8_SSCALED] = { - .unpack_rgba_8unorm = &util_format_b8g8r8_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8A8_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r8g8b8a8_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8a8_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_B8G8R8A8_SSCALED] = { - .unpack_rgba_8unorm = &util_format_b8g8r8a8_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b8g8r8a8_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_A8B8G8R8_SSCALED] = { - .unpack_rgba_8unorm = &util_format_a8b8g8r8_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8b8g8r8_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R32_FIXED] = { - .unpack_rgba_8unorm = &util_format_r32_fixed_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32_fixed_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32_FIXED] = { - .unpack_rgba_8unorm = &util_format_r32g32_fixed_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32_fixed_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32_FIXED] = { - .unpack_rgba_8unorm = &util_format_r32g32b32_fixed_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32_fixed_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32A32_FIXED] = { - .unpack_rgba_8unorm = &util_format_r32g32b32a32_fixed_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32a32_fixed_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10X2_USCALED] = { - .unpack_rgba_8unorm = &util_format_r10g10b10x2_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10g10b10x2_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10X2_SNORM] = { - .unpack_rgba_8unorm = &util_format_r10g10b10x2_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10g10b10x2_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10X2_SINT] = { - .unpack_rgba = &util_format_r10g10b10x2_sint_unpack_signed, - }, - [PIPE_FORMAT_YV12] = { 0 }, - [PIPE_FORMAT_YV16] = { 0 }, - [PIPE_FORMAT_IYUV] = { 0 }, - [PIPE_FORMAT_NV12] = { 0 }, - [PIPE_FORMAT_NV21] = { 0 }, - [PIPE_FORMAT_Y8_400_UNORM] = { 0 }, - [PIPE_FORMAT_R8_G8B8_420_UNORM] = { 0 }, - [PIPE_FORMAT_G8_B8R8_420_UNORM] = { 0 }, - [PIPE_FORMAT_G8_B8_R8_420_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_U8_V8_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_U8V8_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y8_U8_V8_444_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16_V16_420_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16_V16_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16V16_422_UNORM] = { 0 }, - [PIPE_FORMAT_Y16_U16_V16_444_UNORM] = { 0 }, - [PIPE_FORMAT_P010] = { 0 }, - [PIPE_FORMAT_P012] = { 0 }, - [PIPE_FORMAT_P016] = { 0 }, - [PIPE_FORMAT_P030] = { 0 }, - [PIPE_FORMAT_Y210] = { 0 }, - [PIPE_FORMAT_Y212] = { 0 }, - [PIPE_FORMAT_Y216] = { 0 }, - [PIPE_FORMAT_Y410] = { 0 }, - [PIPE_FORMAT_Y412] = { 0 }, - [PIPE_FORMAT_Y416] = { 0 }, - [PIPE_FORMAT_A4R4_UNORM] = { - .unpack_rgba_8unorm = &util_format_a4r4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a4r4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R4A4_UNORM] = { - .unpack_rgba_8unorm = &util_format_r4a4_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r4a4_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8A8_UNORM] = { - .unpack_rgba_8unorm = &util_format_r8a8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8a8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A8R8_UNORM] = { - .unpack_rgba_8unorm = &util_format_a8r8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8r8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10A2_USCALED] = { - .unpack_rgba_8unorm = &util_format_r10g10b10a2_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10g10b10a2_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10A2_SSCALED] = { - .unpack_rgba_8unorm = &util_format_r10g10b10a2_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10g10b10a2_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_R10G10B10A2_SNORM] = { - .unpack_rgba_8unorm = &util_format_r10g10b10a2_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r10g10b10a2_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B10G10R10A2_USCALED] = { - .unpack_rgba_8unorm = &util_format_b10g10r10a2_uscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b10g10r10a2_uscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_B10G10R10A2_SSCALED] = { - .unpack_rgba_8unorm = &util_format_b10g10r10a2_sscaled_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b10g10r10a2_sscaled_unpack_rgba_float, - }, - [PIPE_FORMAT_B10G10R10A2_SNORM] = { - .unpack_rgba_8unorm = &util_format_b10g10r10a2_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b10g10r10a2_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8_UINT] = { - .unpack_rgba = &util_format_r8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R8G8_UINT] = { - .unpack_rgba = &util_format_r8g8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R8G8B8_UINT] = { - .unpack_rgba = &util_format_r8g8b8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R8G8B8A8_UINT] = { - .unpack_rgba = &util_format_r8g8b8a8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R8_SINT] = { - .unpack_rgba = &util_format_r8_sint_unpack_signed, - }, - [PIPE_FORMAT_R8G8_SINT] = { - .unpack_rgba = &util_format_r8g8_sint_unpack_signed, - }, - [PIPE_FORMAT_R8G8B8_SINT] = { - .unpack_rgba = &util_format_r8g8b8_sint_unpack_signed, - }, - [PIPE_FORMAT_R8G8B8A8_SINT] = { - .unpack_rgba = &util_format_r8g8b8a8_sint_unpack_signed, - }, - [PIPE_FORMAT_R16_UINT] = { - .unpack_rgba = &util_format_r16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R16G16_UINT] = { - .unpack_rgba = &util_format_r16g16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R16G16B16_UINT] = { - .unpack_rgba = &util_format_r16g16b16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R16G16B16A16_UINT] = { - .unpack_rgba = &util_format_r16g16b16a16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R16_SINT] = { - .unpack_rgba = &util_format_r16_sint_unpack_signed, - }, - [PIPE_FORMAT_R16G16_SINT] = { - .unpack_rgba = &util_format_r16g16_sint_unpack_signed, - }, - [PIPE_FORMAT_R16G16B16_SINT] = { - .unpack_rgba = &util_format_r16g16b16_sint_unpack_signed, - }, - [PIPE_FORMAT_R16G16B16A16_SINT] = { - .unpack_rgba = &util_format_r16g16b16a16_sint_unpack_signed, - }, - [PIPE_FORMAT_R32_UINT] = { - .unpack_rgba = &util_format_r32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R32G32_UINT] = { - .unpack_rgba = &util_format_r32g32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R32G32B32_UINT] = { - .unpack_rgba = &util_format_r32g32b32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R32G32B32A32_UINT] = { - .unpack_rgba = &util_format_r32g32b32a32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R32_SINT] = { - .unpack_rgba = &util_format_r32_sint_unpack_signed, - }, - [PIPE_FORMAT_R32G32_SINT] = { - .unpack_rgba = &util_format_r32g32_sint_unpack_signed, - }, - [PIPE_FORMAT_R32G32B32_SINT] = { - .unpack_rgba = &util_format_r32g32b32_sint_unpack_signed, - }, - [PIPE_FORMAT_R32G32B32A32_SINT] = { - .unpack_rgba = &util_format_r32g32b32a32_sint_unpack_signed, - }, - [PIPE_FORMAT_R64_UINT] = { - .unpack_rgba = &util_format_r64_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R64G64_UINT] = { - .unpack_rgba = &util_format_r64g64_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R64G64B64_UINT] = { - .unpack_rgba = &util_format_r64g64b64_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R64G64B64A64_UINT] = { - .unpack_rgba = &util_format_r64g64b64a64_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R64_SINT] = { - .unpack_rgba = &util_format_r64_sint_unpack_signed, - }, - [PIPE_FORMAT_R64G64_SINT] = { - .unpack_rgba = &util_format_r64g64_sint_unpack_signed, - }, - [PIPE_FORMAT_R64G64B64_SINT] = { - .unpack_rgba = &util_format_r64g64b64_sint_unpack_signed, - }, - [PIPE_FORMAT_R64G64B64A64_SINT] = { - .unpack_rgba = &util_format_r64g64b64a64_sint_unpack_signed, - }, - [PIPE_FORMAT_A8_UINT] = { - .unpack_rgba = &util_format_a8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_I8_UINT] = { - .unpack_rgba = &util_format_i8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_L8_UINT] = { - .unpack_rgba = &util_format_l8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_L8A8_UINT] = { - .unpack_rgba = &util_format_l8a8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A8_SINT] = { - .unpack_rgba = &util_format_a8_sint_unpack_signed, - }, - [PIPE_FORMAT_I8_SINT] = { - .unpack_rgba = &util_format_i8_sint_unpack_signed, - }, - [PIPE_FORMAT_L8_SINT] = { - .unpack_rgba = &util_format_l8_sint_unpack_signed, - }, - [PIPE_FORMAT_L8A8_SINT] = { - .unpack_rgba = &util_format_l8a8_sint_unpack_signed, - }, - [PIPE_FORMAT_A16_UINT] = { - .unpack_rgba = &util_format_a16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_I16_UINT] = { - .unpack_rgba = &util_format_i16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_L16_UINT] = { - .unpack_rgba = &util_format_l16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_L16A16_UINT] = { - .unpack_rgba = &util_format_l16a16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A16_SINT] = { - .unpack_rgba = &util_format_a16_sint_unpack_signed, - }, - [PIPE_FORMAT_I16_SINT] = { - .unpack_rgba = &util_format_i16_sint_unpack_signed, - }, - [PIPE_FORMAT_L16_SINT] = { - .unpack_rgba = &util_format_l16_sint_unpack_signed, - }, - [PIPE_FORMAT_L16A16_SINT] = { - .unpack_rgba = &util_format_l16a16_sint_unpack_signed, - }, - [PIPE_FORMAT_A32_UINT] = { - .unpack_rgba = &util_format_a32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_I32_UINT] = { - .unpack_rgba = &util_format_i32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_L32_UINT] = { - .unpack_rgba = &util_format_l32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_L32A32_UINT] = { - .unpack_rgba = &util_format_l32a32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A32_SINT] = { - .unpack_rgba = &util_format_a32_sint_unpack_signed, - }, - [PIPE_FORMAT_I32_SINT] = { - .unpack_rgba = &util_format_i32_sint_unpack_signed, - }, - [PIPE_FORMAT_L32_SINT] = { - .unpack_rgba = &util_format_l32_sint_unpack_signed, - }, - [PIPE_FORMAT_L32A32_SINT] = { - .unpack_rgba = &util_format_l32a32_sint_unpack_signed, - }, - [PIPE_FORMAT_B8G8R8_UINT] = { - .unpack_rgba = &util_format_b8g8r8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B8G8R8A8_UINT] = { - .unpack_rgba = &util_format_b8g8r8a8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B8G8R8_SINT] = { - .unpack_rgba = &util_format_b8g8r8_sint_unpack_signed, - }, - [PIPE_FORMAT_B8G8R8A8_SINT] = { - .unpack_rgba = &util_format_b8g8r8a8_sint_unpack_signed, - }, - [PIPE_FORMAT_A8R8G8B8_UINT] = { - .unpack_rgba = &util_format_a8r8g8b8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A8B8G8R8_UINT] = { - .unpack_rgba = &util_format_a8b8g8r8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A2R10G10B10_UINT] = { - .unpack_rgba = &util_format_a2r10g10b10_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A2B10G10R10_UINT] = { - .unpack_rgba = &util_format_a2b10g10r10_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B10G10R10A2_UINT] = { - .unpack_rgba = &util_format_b10g10r10a2_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B10G10R10A2_SINT] = { - .unpack_rgba = &util_format_b10g10r10a2_sint_unpack_signed, - }, - [PIPE_FORMAT_R5G6B5_UINT] = { - .unpack_rgba = &util_format_r5g6b5_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B5G6R5_UINT] = { - .unpack_rgba = &util_format_b5g6r5_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R3G3B2_UINT] = { - .unpack_rgba = &util_format_r3g3b2_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B2G3R3_UINT] = { - .unpack_rgba = &util_format_b2g3r3_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R4G4B4A4_UINT] = { - .unpack_rgba = &util_format_r4g4b4a4_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B4G4R4A4_UINT] = { - .unpack_rgba = &util_format_b4g4r4a4_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A4R4G4B4_UINT] = { - .unpack_rgba = &util_format_a4r4g4b4_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A4B4G4R4_UINT] = { - .unpack_rgba = &util_format_a4b4g4r4_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A1R5G5B5_UINT] = { - .unpack_rgba = &util_format_a1r5g5b5_uint_unpack_unsigned, - }, - [PIPE_FORMAT_A1B5G5R5_UINT] = { - .unpack_rgba = &util_format_a1b5g5r5_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R5G5B5A1_UINT] = { - .unpack_rgba = &util_format_r5g5b5a1_uint_unpack_unsigned, - }, - [PIPE_FORMAT_B5G5R5A1_UINT] = { - .unpack_rgba = &util_format_b5g5r5a1_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R8G8B8X8_SNORM] = { - .unpack_rgba_8unorm = &util_format_r8g8b8x8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8x8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8X8_SRGB] = { - .unpack_rgba_8unorm = &util_format_r8g8b8x8_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8g8b8x8_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_R8G8B8X8_UINT] = { - .unpack_rgba = &util_format_r8g8b8x8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R8G8B8X8_SINT] = { - .unpack_rgba = &util_format_r8g8b8x8_sint_unpack_signed, - }, - [PIPE_FORMAT_B10G10R10X2_UNORM] = { - .unpack_rgba_8unorm = &util_format_b10g10r10x2_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b10g10r10x2_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B10G10R10X2_SNORM] = { - .unpack_rgba_8unorm = &util_format_b10g10r10x2_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b10g10r10x2_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_B10G10R10X2_SINT] = { - .unpack_rgba = &util_format_b10g10r10x2_sint_unpack_signed, - }, - [PIPE_FORMAT_R16G16B16X16_UNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16b16x16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16x16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16X16_SNORM] = { - .unpack_rgba_8unorm = &util_format_r16g16b16x16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16x16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16X16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r16g16b16x16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16g16b16x16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R16G16B16X16_UINT] = { - .unpack_rgba = &util_format_r16g16b16x16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R16G16B16X16_SINT] = { - .unpack_rgba = &util_format_r16g16b16x16_sint_unpack_signed, - }, - [PIPE_FORMAT_R32G32B32X32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r32g32b32x32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32g32b32x32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R32G32B32X32_UINT] = { - .unpack_rgba = &util_format_r32g32b32x32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R32G32B32X32_SINT] = { - .unpack_rgba = &util_format_r32g32b32x32_sint_unpack_signed, - }, - [PIPE_FORMAT_R8A8_SNORM] = { - .unpack_rgba_8unorm = &util_format_r8a8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r8a8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16A16_UNORM] = { - .unpack_rgba_8unorm = &util_format_r16a16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16a16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16A16_SNORM] = { - .unpack_rgba_8unorm = &util_format_r16a16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16a16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_R16A16_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r16a16_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r16a16_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R32A32_FLOAT] = { - .unpack_rgba_8unorm = &util_format_r32a32_float_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r32a32_float_unpack_rgba_float, - }, - [PIPE_FORMAT_R8A8_UINT] = { - .unpack_rgba = &util_format_r8a8_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R8A8_SINT] = { - .unpack_rgba = &util_format_r8a8_sint_unpack_signed, - }, - [PIPE_FORMAT_R16A16_UINT] = { - .unpack_rgba = &util_format_r16a16_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R16A16_SINT] = { - .unpack_rgba = &util_format_r16a16_sint_unpack_signed, - }, - [PIPE_FORMAT_R32A32_UINT] = { - .unpack_rgba = &util_format_r32a32_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R32A32_SINT] = { - .unpack_rgba = &util_format_r32a32_sint_unpack_signed, - }, - [PIPE_FORMAT_R10G10B10A2_UINT] = { - .unpack_rgba = &util_format_r10g10b10a2_uint_unpack_unsigned, - }, - [PIPE_FORMAT_R10G10B10A2_SINT] = { - .unpack_rgba = &util_format_r10g10b10a2_sint_unpack_signed, - }, - [PIPE_FORMAT_B5G6R5_SRGB] = { - .unpack_rgba_8unorm = &util_format_b5g6r5_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_b5g6r5_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_R5G6B5_SRGB] = { - .unpack_rgba_8unorm = &util_format_r5g6b5_srgb_unpack_rgba_8unorm, - .unpack_rgba = &util_format_r5g6b5_srgb_unpack_rgba_float, - }, - [PIPE_FORMAT_G8R8_UNORM] = { - .unpack_rgba_8unorm = &util_format_g8r8_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_g8r8_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_G8R8_SNORM] = { - .unpack_rgba_8unorm = &util_format_g8r8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_g8r8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_G8R8_SINT] = { - .unpack_rgba = &util_format_g8r8_sint_unpack_signed, - }, - [PIPE_FORMAT_G16R16_UNORM] = { - .unpack_rgba_8unorm = &util_format_g16r16_unorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_g16r16_unorm_unpack_rgba_float, - }, - [PIPE_FORMAT_G16R16_SNORM] = { - .unpack_rgba_8unorm = &util_format_g16r16_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_g16r16_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_G16R16_SINT] = { - .unpack_rgba = &util_format_g16r16_sint_unpack_signed, - }, - [PIPE_FORMAT_A8B8G8R8_SNORM] = { - .unpack_rgba_8unorm = &util_format_a8b8g8r8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_a8b8g8r8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_A8B8G8R8_SINT] = { - .unpack_rgba = &util_format_a8b8g8r8_sint_unpack_signed, - }, - [PIPE_FORMAT_X8B8G8R8_SNORM] = { - .unpack_rgba_8unorm = &util_format_x8b8g8r8_snorm_unpack_rgba_8unorm, - .unpack_rgba = &util_format_x8b8g8r8_snorm_unpack_rgba_float, - }, - [PIPE_FORMAT_X8B8G8R8_SINT] = { - .unpack_rgba = &util_format_x8b8g8r8_sint_unpack_signed, - }, -}; - -ATTRIBUTE_RETURNS_NONNULL const struct util_format_unpack_description * -util_format_unpack_description_generic(enum pipe_format format) -{ - assert(format < PIPE_FORMAT_COUNT); - return &util_format_unpack_descriptions[format]; -} - -static const util_format_fetch_rgba_func_ptr util_format_fetch_rgba_table[PIPE_FORMAT_COUNT] = { - [PIPE_FORMAT_NONE] = &util_format_none_fetch_rgba, - [PIPE_FORMAT_B8G8R8A8_UNORM] = &util_format_b8g8r8a8_unorm_fetch_rgba, - [PIPE_FORMAT_B8G8R8X8_UNORM] = &util_format_b8g8r8x8_unorm_fetch_rgba, - [PIPE_FORMAT_B8G8R8X8_SNORM] = &util_format_b8g8r8x8_snorm_fetch_rgba, - [PIPE_FORMAT_B8G8R8X8_UINT] = &util_format_b8g8r8x8_uint_fetch_rgba, - [PIPE_FORMAT_B8G8R8X8_SINT] = &util_format_b8g8r8x8_sint_fetch_rgba, - [PIPE_FORMAT_A8R8G8B8_UNORM] = &util_format_a8r8g8b8_unorm_fetch_rgba, - [PIPE_FORMAT_A8R8G8B8_SNORM] = &util_format_a8r8g8b8_snorm_fetch_rgba, - [PIPE_FORMAT_A8R8G8B8_SINT] = &util_format_a8r8g8b8_sint_fetch_rgba, - [PIPE_FORMAT_X8R8G8B8_UNORM] = &util_format_x8r8g8b8_unorm_fetch_rgba, - [PIPE_FORMAT_X8R8G8B8_SNORM] = &util_format_x8r8g8b8_snorm_fetch_rgba, - [PIPE_FORMAT_X8R8G8B8_SINT] = &util_format_x8r8g8b8_sint_fetch_rgba, - [PIPE_FORMAT_A8B8G8R8_UNORM] = &util_format_a8b8g8r8_unorm_fetch_rgba, - [PIPE_FORMAT_X8B8G8R8_UNORM] = &util_format_x8b8g8r8_unorm_fetch_rgba, - [PIPE_FORMAT_R8G8B8X8_UNORM] = &util_format_r8g8b8x8_unorm_fetch_rgba, - [PIPE_FORMAT_R5G5B5A1_UNORM] = &util_format_r5g5b5a1_unorm_fetch_rgba, - [PIPE_FORMAT_R5G5B5X1_UNORM] = &util_format_r5g5b5x1_unorm_fetch_rgba, - [PIPE_FORMAT_B5G5R5X1_UNORM] = &util_format_b5g5r5x1_unorm_fetch_rgba, - [PIPE_FORMAT_B5G5R5A1_UNORM] = &util_format_b5g5r5a1_unorm_fetch_rgba, - [PIPE_FORMAT_X1B5G5R5_UNORM] = &util_format_x1b5g5r5_unorm_fetch_rgba, - [PIPE_FORMAT_A1R5G5B5_UNORM] = &util_format_a1r5g5b5_unorm_fetch_rgba, - [PIPE_FORMAT_X1R5G5B5_UNORM] = &util_format_x1r5g5b5_unorm_fetch_rgba, - [PIPE_FORMAT_A1B5G5R5_UNORM] = &util_format_a1b5g5r5_unorm_fetch_rgba, - [PIPE_FORMAT_R4G4B4A4_UNORM] = &util_format_r4g4b4a4_unorm_fetch_rgba, - [PIPE_FORMAT_R4G4B4X4_UNORM] = &util_format_r4g4b4x4_unorm_fetch_rgba, - [PIPE_FORMAT_B4G4R4A4_UNORM] = &util_format_b4g4r4a4_unorm_fetch_rgba, - [PIPE_FORMAT_B4G4R4X4_UNORM] = &util_format_b4g4r4x4_unorm_fetch_rgba, - [PIPE_FORMAT_A4R4G4B4_UNORM] = &util_format_a4r4g4b4_unorm_fetch_rgba, - [PIPE_FORMAT_A4B4G4R4_UNORM] = &util_format_a4b4g4r4_unorm_fetch_rgba, - [PIPE_FORMAT_R5G6B5_UNORM] = &util_format_r5g6b5_unorm_fetch_rgba, - [PIPE_FORMAT_B5G6R5_UNORM] = &util_format_b5g6r5_unorm_fetch_rgba, - [PIPE_FORMAT_R10G10B10A2_UNORM] = &util_format_r10g10b10a2_unorm_fetch_rgba, - [PIPE_FORMAT_R10G10B10X2_UNORM] = &util_format_r10g10b10x2_unorm_fetch_rgba, - [PIPE_FORMAT_B10G10R10A2_UNORM] = &util_format_b10g10r10a2_unorm_fetch_rgba, - [PIPE_FORMAT_A2R10G10B10_UNORM] = &util_format_a2r10g10b10_unorm_fetch_rgba, - [PIPE_FORMAT_A2B10G10R10_UNORM] = &util_format_a2b10g10r10_unorm_fetch_rgba, - [PIPE_FORMAT_R3G3B2_UNORM] = &util_format_r3g3b2_unorm_fetch_rgba, - [PIPE_FORMAT_B2G3R3_UNORM] = &util_format_b2g3r3_unorm_fetch_rgba, - [PIPE_FORMAT_L8_UNORM] = &util_format_l8_unorm_fetch_rgba, - [PIPE_FORMAT_A8_UNORM] = &util_format_a8_unorm_fetch_rgba, - [PIPE_FORMAT_I8_UNORM] = &util_format_i8_unorm_fetch_rgba, - [PIPE_FORMAT_L4A4_UNORM] = &util_format_l4a4_unorm_fetch_rgba, - [PIPE_FORMAT_L8A8_UNORM] = &util_format_l8a8_unorm_fetch_rgba, - [PIPE_FORMAT_L16_UNORM] = &util_format_l16_unorm_fetch_rgba, - [PIPE_FORMAT_A16_UNORM] = &util_format_a16_unorm_fetch_rgba, - [PIPE_FORMAT_I16_UNORM] = &util_format_i16_unorm_fetch_rgba, - [PIPE_FORMAT_L16A16_UNORM] = &util_format_l16a16_unorm_fetch_rgba, - [PIPE_FORMAT_A8_SNORM] = &util_format_a8_snorm_fetch_rgba, - [PIPE_FORMAT_L8_SNORM] = &util_format_l8_snorm_fetch_rgba, - [PIPE_FORMAT_L8A8_SNORM] = &util_format_l8a8_snorm_fetch_rgba, - [PIPE_FORMAT_I8_SNORM] = &util_format_i8_snorm_fetch_rgba, - [PIPE_FORMAT_A16_SNORM] = &util_format_a16_snorm_fetch_rgba, - [PIPE_FORMAT_L16_SNORM] = &util_format_l16_snorm_fetch_rgba, - [PIPE_FORMAT_L16A16_SNORM] = &util_format_l16a16_snorm_fetch_rgba, - [PIPE_FORMAT_I16_SNORM] = &util_format_i16_snorm_fetch_rgba, - [PIPE_FORMAT_A16_FLOAT] = &util_format_a16_float_fetch_rgba, - [PIPE_FORMAT_L16_FLOAT] = &util_format_l16_float_fetch_rgba, - [PIPE_FORMAT_L16A16_FLOAT] = &util_format_l16a16_float_fetch_rgba, - [PIPE_FORMAT_I16_FLOAT] = &util_format_i16_float_fetch_rgba, - [PIPE_FORMAT_A32_FLOAT] = &util_format_a32_float_fetch_rgba, - [PIPE_FORMAT_L32_FLOAT] = &util_format_l32_float_fetch_rgba, - [PIPE_FORMAT_L32A32_FLOAT] = &util_format_l32a32_float_fetch_rgba, - [PIPE_FORMAT_I32_FLOAT] = &util_format_i32_float_fetch_rgba, - [PIPE_FORMAT_L8_SRGB] = &util_format_l8_srgb_fetch_rgba, - [PIPE_FORMAT_R8_SRGB] = &util_format_r8_srgb_fetch_rgba, - [PIPE_FORMAT_L8A8_SRGB] = &util_format_l8a8_srgb_fetch_rgba, - [PIPE_FORMAT_R8G8_SRGB] = &util_format_r8g8_srgb_fetch_rgba, - [PIPE_FORMAT_R8G8B8_SRGB] = &util_format_r8g8b8_srgb_fetch_rgba, - [PIPE_FORMAT_B8G8R8_SRGB] = &util_format_b8g8r8_srgb_fetch_rgba, - [PIPE_FORMAT_R8G8B8A8_SRGB] = &util_format_r8g8b8a8_srgb_fetch_rgba, - [PIPE_FORMAT_A8B8G8R8_SRGB] = &util_format_a8b8g8r8_srgb_fetch_rgba, - [PIPE_FORMAT_X8B8G8R8_SRGB] = &util_format_x8b8g8r8_srgb_fetch_rgba, - [PIPE_FORMAT_B8G8R8A8_SRGB] = &util_format_b8g8r8a8_srgb_fetch_rgba, - [PIPE_FORMAT_B8G8R8X8_SRGB] = &util_format_b8g8r8x8_srgb_fetch_rgba, - [PIPE_FORMAT_A8R8G8B8_SRGB] = &util_format_a8r8g8b8_srgb_fetch_rgba, - [PIPE_FORMAT_X8R8G8B8_SRGB] = &util_format_x8r8g8b8_srgb_fetch_rgba, - [PIPE_FORMAT_R8SG8SB8UX8U_NORM] = &util_format_r8sg8sb8ux8u_norm_fetch_rgba, - [PIPE_FORMAT_R10SG10SB10SA2U_NORM] = &util_format_r10sg10sb10sa2u_norm_fetch_rgba, - [PIPE_FORMAT_R5SG5SB6U_NORM] = &util_format_r5sg5sb6u_norm_fetch_rgba, - [PIPE_FORMAT_S8_UINT] = NULL, - [PIPE_FORMAT_Z16_UNORM] = NULL, - [PIPE_FORMAT_Z16_UNORM_S8_UINT] = NULL, - [PIPE_FORMAT_Z32_UNORM] = NULL, - [PIPE_FORMAT_Z32_FLOAT] = NULL, - [PIPE_FORMAT_Z24_UNORM_S8_UINT] = NULL, - [PIPE_FORMAT_S8_UINT_Z24_UNORM] = NULL, - [PIPE_FORMAT_X24S8_UINT] = NULL, - [PIPE_FORMAT_S8X24_UINT] = NULL, - [PIPE_FORMAT_Z24X8_UNORM] = NULL, - [PIPE_FORMAT_X8Z24_UNORM] = NULL, - [PIPE_FORMAT_Z32_FLOAT_S8X24_UINT] = NULL, - [PIPE_FORMAT_X32_S8X24_UINT] = NULL, - [PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8] = &util_format_z24_unorm_s8_uint_as_r8g8b8a8_fetch_rgba, - [PIPE_FORMAT_UYVY] = &util_format_uyvy_fetch_rgba, - [PIPE_FORMAT_YUYV] = &util_format_yuyv_fetch_rgba, - [PIPE_FORMAT_AYUV] = NULL, - [PIPE_FORMAT_XYUV] = NULL, - [PIPE_FORMAT_R8G8_B8G8_UNORM] = &util_format_r8g8_b8g8_unorm_fetch_rgba, - [PIPE_FORMAT_G8R8_G8B8_UNORM] = NULL, - [PIPE_FORMAT_G8R8_B8R8_UNORM] = NULL, - [PIPE_FORMAT_R8G8_R8B8_UNORM] = NULL, - [PIPE_FORMAT_R11G11B10_FLOAT] = &util_format_r11g11b10_float_fetch_rgba, - [PIPE_FORMAT_R9G9B9E5_FLOAT] = &util_format_r9g9b9e5_float_fetch_rgba, - [PIPE_FORMAT_R1_UNORM] = NULL, - [PIPE_FORMAT_R8G8Bx_SNORM] = &util_format_r8g8bx_snorm_fetch_rgba, - [PIPE_FORMAT_DXT1_RGB] = &util_format_dxt1_rgb_fetch_rgba, - [PIPE_FORMAT_DXT1_RGBA] = &util_format_dxt1_rgba_fetch_rgba, - [PIPE_FORMAT_DXT3_RGBA] = &util_format_dxt3_rgba_fetch_rgba, - [PIPE_FORMAT_DXT5_RGBA] = &util_format_dxt5_rgba_fetch_rgba, - [PIPE_FORMAT_DXT1_SRGB] = &util_format_dxt1_srgb_fetch_rgba, - [PIPE_FORMAT_DXT1_SRGBA] = &util_format_dxt1_srgba_fetch_rgba, - [PIPE_FORMAT_DXT3_SRGBA] = &util_format_dxt3_srgba_fetch_rgba, - [PIPE_FORMAT_DXT5_SRGBA] = &util_format_dxt5_srgba_fetch_rgba, - [PIPE_FORMAT_FXT1_RGB] = &util_format_fxt1_rgb_fetch_rgba, - [PIPE_FORMAT_FXT1_RGBA] = &util_format_fxt1_rgba_fetch_rgba, - [PIPE_FORMAT_RGTC1_UNORM] = &util_format_rgtc1_unorm_fetch_rgba, - [PIPE_FORMAT_RGTC1_SNORM] = &util_format_rgtc1_snorm_fetch_rgba, - [PIPE_FORMAT_RGTC2_UNORM] = &util_format_rgtc2_unorm_fetch_rgba, - [PIPE_FORMAT_RGTC2_SNORM] = &util_format_rgtc2_snorm_fetch_rgba, - [PIPE_FORMAT_LATC1_UNORM] = &util_format_latc1_unorm_fetch_rgba, - [PIPE_FORMAT_LATC1_SNORM] = &util_format_latc1_snorm_fetch_rgba, - [PIPE_FORMAT_LATC2_UNORM] = &util_format_latc2_unorm_fetch_rgba, - [PIPE_FORMAT_LATC2_SNORM] = &util_format_latc2_snorm_fetch_rgba, - [PIPE_FORMAT_ETC1_RGB8] = &util_format_etc1_rgb8_fetch_rgba, - [PIPE_FORMAT_ETC2_RGB8] = NULL, - [PIPE_FORMAT_ETC2_SRGB8] = NULL, - [PIPE_FORMAT_ETC2_RGB8A1] = NULL, - [PIPE_FORMAT_ETC2_SRGB8A1] = NULL, - [PIPE_FORMAT_ETC2_RGBA8] = NULL, - [PIPE_FORMAT_ETC2_SRGBA8] = NULL, - [PIPE_FORMAT_ETC2_R11_UNORM] = NULL, - [PIPE_FORMAT_ETC2_R11_SNORM] = NULL, - [PIPE_FORMAT_ETC2_RG11_UNORM] = NULL, - [PIPE_FORMAT_ETC2_RG11_SNORM] = NULL, - [PIPE_FORMAT_BPTC_RGBA_UNORM] = &util_format_bptc_rgba_unorm_fetch_rgba, - [PIPE_FORMAT_BPTC_SRGBA] = &util_format_bptc_srgba_fetch_rgba, - [PIPE_FORMAT_BPTC_RGB_FLOAT] = &util_format_bptc_rgb_float_fetch_rgba, - [PIPE_FORMAT_BPTC_RGB_UFLOAT] = &util_format_bptc_rgb_ufloat_fetch_rgba, - [PIPE_FORMAT_ASTC_4x4] = NULL, - [PIPE_FORMAT_ASTC_5x4] = NULL, - [PIPE_FORMAT_ASTC_5x5] = NULL, - [PIPE_FORMAT_ASTC_6x5] = NULL, - [PIPE_FORMAT_ASTC_6x6] = NULL, - [PIPE_FORMAT_ASTC_8x5] = NULL, - [PIPE_FORMAT_ASTC_8x6] = NULL, - [PIPE_FORMAT_ASTC_8x8] = NULL, - [PIPE_FORMAT_ASTC_10x5] = NULL, - [PIPE_FORMAT_ASTC_10x6] = NULL, - [PIPE_FORMAT_ASTC_10x8] = NULL, - [PIPE_FORMAT_ASTC_10x10] = NULL, - [PIPE_FORMAT_ASTC_12x10] = NULL, - [PIPE_FORMAT_ASTC_12x12] = NULL, - [PIPE_FORMAT_ASTC_4x4_SRGB] = NULL, - [PIPE_FORMAT_ASTC_5x4_SRGB] = NULL, - [PIPE_FORMAT_ASTC_5x5_SRGB] = NULL, - [PIPE_FORMAT_ASTC_6x5_SRGB] = NULL, - [PIPE_FORMAT_ASTC_6x6_SRGB] = NULL, - [PIPE_FORMAT_ASTC_8x5_SRGB] = NULL, - [PIPE_FORMAT_ASTC_8x6_SRGB] = NULL, - [PIPE_FORMAT_ASTC_8x8_SRGB] = NULL, - [PIPE_FORMAT_ASTC_10x5_SRGB] = NULL, - [PIPE_FORMAT_ASTC_10x6_SRGB] = NULL, - [PIPE_FORMAT_ASTC_10x8_SRGB] = NULL, - [PIPE_FORMAT_ASTC_10x10_SRGB] = NULL, - [PIPE_FORMAT_ASTC_12x10_SRGB] = NULL, - [PIPE_FORMAT_ASTC_12x12_SRGB] = NULL, - [PIPE_FORMAT_ASTC_3x3x3] = NULL, - [PIPE_FORMAT_ASTC_4x3x3] = NULL, - [PIPE_FORMAT_ASTC_4x4x3] = NULL, - [PIPE_FORMAT_ASTC_4x4x4] = NULL, - [PIPE_FORMAT_ASTC_5x4x4] = NULL, - [PIPE_FORMAT_ASTC_5x5x4] = NULL, - [PIPE_FORMAT_ASTC_5x5x5] = NULL, - [PIPE_FORMAT_ASTC_6x5x5] = NULL, - [PIPE_FORMAT_ASTC_6x6x5] = NULL, - [PIPE_FORMAT_ASTC_6x6x6] = NULL, - [PIPE_FORMAT_ASTC_3x3x3_SRGB] = NULL, - [PIPE_FORMAT_ASTC_4x3x3_SRGB] = NULL, - [PIPE_FORMAT_ASTC_4x4x3_SRGB] = NULL, - [PIPE_FORMAT_ASTC_4x4x4_SRGB] = NULL, - [PIPE_FORMAT_ASTC_5x4x4_SRGB] = NULL, - [PIPE_FORMAT_ASTC_5x5x4_SRGB] = NULL, - [PIPE_FORMAT_ASTC_5x5x5_SRGB] = NULL, - [PIPE_FORMAT_ASTC_6x5x5_SRGB] = NULL, - [PIPE_FORMAT_ASTC_6x6x5_SRGB] = NULL, - [PIPE_FORMAT_ASTC_6x6x6_SRGB] = NULL, - [PIPE_FORMAT_ATC_RGB] = NULL, - [PIPE_FORMAT_ATC_RGBA_EXPLICIT] = NULL, - [PIPE_FORMAT_ATC_RGBA_INTERPOLATED] = NULL, - [PIPE_FORMAT_R64_FLOAT] = &util_format_r64_float_fetch_rgba, - [PIPE_FORMAT_R64G64_FLOAT] = &util_format_r64g64_float_fetch_rgba, - [PIPE_FORMAT_R64G64B64_FLOAT] = &util_format_r64g64b64_float_fetch_rgba, - [PIPE_FORMAT_R64G64B64A64_FLOAT] = &util_format_r64g64b64a64_float_fetch_rgba, - [PIPE_FORMAT_R32_FLOAT] = &util_format_r32_float_fetch_rgba, - [PIPE_FORMAT_R32G32_FLOAT] = &util_format_r32g32_float_fetch_rgba, - [PIPE_FORMAT_R32G32B32_FLOAT] = &util_format_r32g32b32_float_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_FLOAT] = &util_format_r32g32b32a32_float_fetch_rgba, - [PIPE_FORMAT_R32_UNORM] = &util_format_r32_unorm_fetch_rgba, - [PIPE_FORMAT_R32G32_UNORM] = &util_format_r32g32_unorm_fetch_rgba, - [PIPE_FORMAT_R32G32B32_UNORM] = &util_format_r32g32b32_unorm_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_UNORM] = &util_format_r32g32b32a32_unorm_fetch_rgba, - [PIPE_FORMAT_R32_USCALED] = &util_format_r32_uscaled_fetch_rgba, - [PIPE_FORMAT_R32G32_USCALED] = &util_format_r32g32_uscaled_fetch_rgba, - [PIPE_FORMAT_R32G32B32_USCALED] = &util_format_r32g32b32_uscaled_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_USCALED] = &util_format_r32g32b32a32_uscaled_fetch_rgba, - [PIPE_FORMAT_R32_SNORM] = &util_format_r32_snorm_fetch_rgba, - [PIPE_FORMAT_R32G32_SNORM] = &util_format_r32g32_snorm_fetch_rgba, - [PIPE_FORMAT_R32G32B32_SNORM] = &util_format_r32g32b32_snorm_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_SNORM] = &util_format_r32g32b32a32_snorm_fetch_rgba, - [PIPE_FORMAT_R32_SSCALED] = &util_format_r32_sscaled_fetch_rgba, - [PIPE_FORMAT_R32G32_SSCALED] = &util_format_r32g32_sscaled_fetch_rgba, - [PIPE_FORMAT_R32G32B32_SSCALED] = &util_format_r32g32b32_sscaled_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_SSCALED] = &util_format_r32g32b32a32_sscaled_fetch_rgba, - [PIPE_FORMAT_R16_FLOAT] = &util_format_r16_float_fetch_rgba, - [PIPE_FORMAT_R16G16_FLOAT] = &util_format_r16g16_float_fetch_rgba, - [PIPE_FORMAT_R16G16B16_FLOAT] = &util_format_r16g16b16_float_fetch_rgba, - [PIPE_FORMAT_R16G16B16A16_FLOAT] = &util_format_r16g16b16a16_float_fetch_rgba, - [PIPE_FORMAT_R16_UNORM] = &util_format_r16_unorm_fetch_rgba, - [PIPE_FORMAT_R16G16_UNORM] = &util_format_r16g16_unorm_fetch_rgba, - [PIPE_FORMAT_R16G16B16_UNORM] = &util_format_r16g16b16_unorm_fetch_rgba, - [PIPE_FORMAT_R16G16B16A16_UNORM] = &util_format_r16g16b16a16_unorm_fetch_rgba, - [PIPE_FORMAT_R16_USCALED] = &util_format_r16_uscaled_fetch_rgba, - [PIPE_FORMAT_R16G16_USCALED] = &util_format_r16g16_uscaled_fetch_rgba, - [PIPE_FORMAT_R16G16B16_USCALED] = &util_format_r16g16b16_uscaled_fetch_rgba, - [PIPE_FORMAT_R16G16B16A16_USCALED] = &util_format_r16g16b16a16_uscaled_fetch_rgba, - [PIPE_FORMAT_R16_SNORM] = &util_format_r16_snorm_fetch_rgba, - [PIPE_FORMAT_R16G16_SNORM] = &util_format_r16g16_snorm_fetch_rgba, - [PIPE_FORMAT_R16G16B16_SNORM] = &util_format_r16g16b16_snorm_fetch_rgba, - [PIPE_FORMAT_R16G16B16A16_SNORM] = &util_format_r16g16b16a16_snorm_fetch_rgba, - [PIPE_FORMAT_R16_SSCALED] = &util_format_r16_sscaled_fetch_rgba, - [PIPE_FORMAT_R16G16_SSCALED] = &util_format_r16g16_sscaled_fetch_rgba, - [PIPE_FORMAT_R16G16B16_SSCALED] = &util_format_r16g16b16_sscaled_fetch_rgba, - [PIPE_FORMAT_R16G16B16A16_SSCALED] = &util_format_r16g16b16a16_sscaled_fetch_rgba, - [PIPE_FORMAT_R8_UNORM] = &util_format_r8_unorm_fetch_rgba, - [PIPE_FORMAT_R8G8_UNORM] = &util_format_r8g8_unorm_fetch_rgba, - [PIPE_FORMAT_R8G8B8_UNORM] = &util_format_r8g8b8_unorm_fetch_rgba, - [PIPE_FORMAT_B8G8R8_UNORM] = &util_format_b8g8r8_unorm_fetch_rgba, - [PIPE_FORMAT_R8G8B8A8_UNORM] = &util_format_r8g8b8a8_unorm_fetch_rgba, - [PIPE_FORMAT_R8_USCALED] = &util_format_r8_uscaled_fetch_rgba, - [PIPE_FORMAT_R8G8_USCALED] = &util_format_r8g8_uscaled_fetch_rgba, - [PIPE_FORMAT_R8G8B8_USCALED] = &util_format_r8g8b8_uscaled_fetch_rgba, - [PIPE_FORMAT_B8G8R8_USCALED] = &util_format_b8g8r8_uscaled_fetch_rgba, - [PIPE_FORMAT_R8G8B8A8_USCALED] = &util_format_r8g8b8a8_uscaled_fetch_rgba, - [PIPE_FORMAT_B8G8R8A8_USCALED] = &util_format_b8g8r8a8_uscaled_fetch_rgba, - [PIPE_FORMAT_A8B8G8R8_USCALED] = &util_format_a8b8g8r8_uscaled_fetch_rgba, - [PIPE_FORMAT_R8_SNORM] = &util_format_r8_snorm_fetch_rgba, - [PIPE_FORMAT_R8G8_SNORM] = &util_format_r8g8_snorm_fetch_rgba, - [PIPE_FORMAT_R8G8B8_SNORM] = &util_format_r8g8b8_snorm_fetch_rgba, - [PIPE_FORMAT_B8G8R8_SNORM] = &util_format_b8g8r8_snorm_fetch_rgba, - [PIPE_FORMAT_R8G8B8A8_SNORM] = &util_format_r8g8b8a8_snorm_fetch_rgba, - [PIPE_FORMAT_B8G8R8A8_SNORM] = &util_format_b8g8r8a8_snorm_fetch_rgba, - [PIPE_FORMAT_R8_SSCALED] = &util_format_r8_sscaled_fetch_rgba, - [PIPE_FORMAT_R8G8_SSCALED] = &util_format_r8g8_sscaled_fetch_rgba, - [PIPE_FORMAT_R8G8B8_SSCALED] = &util_format_r8g8b8_sscaled_fetch_rgba, - [PIPE_FORMAT_B8G8R8_SSCALED] = &util_format_b8g8r8_sscaled_fetch_rgba, - [PIPE_FORMAT_R8G8B8A8_SSCALED] = &util_format_r8g8b8a8_sscaled_fetch_rgba, - [PIPE_FORMAT_B8G8R8A8_SSCALED] = &util_format_b8g8r8a8_sscaled_fetch_rgba, - [PIPE_FORMAT_A8B8G8R8_SSCALED] = &util_format_a8b8g8r8_sscaled_fetch_rgba, - [PIPE_FORMAT_R32_FIXED] = &util_format_r32_fixed_fetch_rgba, - [PIPE_FORMAT_R32G32_FIXED] = &util_format_r32g32_fixed_fetch_rgba, - [PIPE_FORMAT_R32G32B32_FIXED] = &util_format_r32g32b32_fixed_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_FIXED] = &util_format_r32g32b32a32_fixed_fetch_rgba, - [PIPE_FORMAT_R10G10B10X2_USCALED] = &util_format_r10g10b10x2_uscaled_fetch_rgba, - [PIPE_FORMAT_R10G10B10X2_SNORM] = &util_format_r10g10b10x2_snorm_fetch_rgba, - [PIPE_FORMAT_R10G10B10X2_SINT] = &util_format_r10g10b10x2_sint_fetch_rgba, - [PIPE_FORMAT_YV12] = NULL, - [PIPE_FORMAT_YV16] = NULL, - [PIPE_FORMAT_IYUV] = NULL, - [PIPE_FORMAT_NV12] = NULL, - [PIPE_FORMAT_NV21] = NULL, - [PIPE_FORMAT_Y8_400_UNORM] = NULL, - [PIPE_FORMAT_R8_G8B8_420_UNORM] = NULL, - [PIPE_FORMAT_G8_B8R8_420_UNORM] = NULL, - [PIPE_FORMAT_G8_B8_R8_420_UNORM] = NULL, - [PIPE_FORMAT_Y8_UNORM] = NULL, - [PIPE_FORMAT_Y8_U8_V8_422_UNORM] = NULL, - [PIPE_FORMAT_Y8_U8V8_422_UNORM] = NULL, - [PIPE_FORMAT_Y8_U8_V8_444_UNORM] = NULL, - [PIPE_FORMAT_Y16_U16_V16_420_UNORM] = NULL, - [PIPE_FORMAT_Y16_U16_V16_422_UNORM] = NULL, - [PIPE_FORMAT_Y16_U16V16_422_UNORM] = NULL, - [PIPE_FORMAT_Y16_U16_V16_444_UNORM] = NULL, - [PIPE_FORMAT_P010] = NULL, - [PIPE_FORMAT_P012] = NULL, - [PIPE_FORMAT_P016] = NULL, - [PIPE_FORMAT_P030] = NULL, - [PIPE_FORMAT_Y210] = NULL, - [PIPE_FORMAT_Y212] = NULL, - [PIPE_FORMAT_Y216] = NULL, - [PIPE_FORMAT_Y410] = NULL, - [PIPE_FORMAT_Y412] = NULL, - [PIPE_FORMAT_Y416] = NULL, - [PIPE_FORMAT_A4R4_UNORM] = &util_format_a4r4_unorm_fetch_rgba, - [PIPE_FORMAT_R4A4_UNORM] = &util_format_r4a4_unorm_fetch_rgba, - [PIPE_FORMAT_R8A8_UNORM] = &util_format_r8a8_unorm_fetch_rgba, - [PIPE_FORMAT_A8R8_UNORM] = &util_format_a8r8_unorm_fetch_rgba, - [PIPE_FORMAT_R10G10B10A2_USCALED] = &util_format_r10g10b10a2_uscaled_fetch_rgba, - [PIPE_FORMAT_R10G10B10A2_SSCALED] = &util_format_r10g10b10a2_sscaled_fetch_rgba, - [PIPE_FORMAT_R10G10B10A2_SNORM] = &util_format_r10g10b10a2_snorm_fetch_rgba, - [PIPE_FORMAT_B10G10R10A2_USCALED] = &util_format_b10g10r10a2_uscaled_fetch_rgba, - [PIPE_FORMAT_B10G10R10A2_SSCALED] = &util_format_b10g10r10a2_sscaled_fetch_rgba, - [PIPE_FORMAT_B10G10R10A2_SNORM] = &util_format_b10g10r10a2_snorm_fetch_rgba, - [PIPE_FORMAT_R8_UINT] = &util_format_r8_uint_fetch_rgba, - [PIPE_FORMAT_R8G8_UINT] = &util_format_r8g8_uint_fetch_rgba, - [PIPE_FORMAT_R8G8B8_UINT] = &util_format_r8g8b8_uint_fetch_rgba, - [PIPE_FORMAT_R8G8B8A8_UINT] = &util_format_r8g8b8a8_uint_fetch_rgba, - [PIPE_FORMAT_R8_SINT] = &util_format_r8_sint_fetch_rgba, - [PIPE_FORMAT_R8G8_SINT] = &util_format_r8g8_sint_fetch_rgba, - [PIPE_FORMAT_R8G8B8_SINT] = &util_format_r8g8b8_sint_fetch_rgba, - [PIPE_FORMAT_R8G8B8A8_SINT] = &util_format_r8g8b8a8_sint_fetch_rgba, - [PIPE_FORMAT_R16_UINT] = &util_format_r16_uint_fetch_rgba, - [PIPE_FORMAT_R16G16_UINT] = &util_format_r16g16_uint_fetch_rgba, - [PIPE_FORMAT_R16G16B16_UINT] = &util_format_r16g16b16_uint_fetch_rgba, - [PIPE_FORMAT_R16G16B16A16_UINT] = &util_format_r16g16b16a16_uint_fetch_rgba, - [PIPE_FORMAT_R16_SINT] = &util_format_r16_sint_fetch_rgba, - [PIPE_FORMAT_R16G16_SINT] = &util_format_r16g16_sint_fetch_rgba, - [PIPE_FORMAT_R16G16B16_SINT] = &util_format_r16g16b16_sint_fetch_rgba, - [PIPE_FORMAT_R16G16B16A16_SINT] = &util_format_r16g16b16a16_sint_fetch_rgba, - [PIPE_FORMAT_R32_UINT] = &util_format_r32_uint_fetch_rgba, - [PIPE_FORMAT_R32G32_UINT] = &util_format_r32g32_uint_fetch_rgba, - [PIPE_FORMAT_R32G32B32_UINT] = &util_format_r32g32b32_uint_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_UINT] = &util_format_r32g32b32a32_uint_fetch_rgba, - [PIPE_FORMAT_R32_SINT] = &util_format_r32_sint_fetch_rgba, - [PIPE_FORMAT_R32G32_SINT] = &util_format_r32g32_sint_fetch_rgba, - [PIPE_FORMAT_R32G32B32_SINT] = &util_format_r32g32b32_sint_fetch_rgba, - [PIPE_FORMAT_R32G32B32A32_SINT] = &util_format_r32g32b32a32_sint_fetch_rgba, - [PIPE_FORMAT_R64_UINT] = &util_format_r64_uint_fetch_rgba, - [PIPE_FORMAT_R64G64_UINT] = &util_format_r64g64_uint_fetch_rgba, - [PIPE_FORMAT_R64G64B64_UINT] = &util_format_r64g64b64_uint_fetch_rgba, - [PIPE_FORMAT_R64G64B64A64_UINT] = &util_format_r64g64b64a64_uint_fetch_rgba, - [PIPE_FORMAT_R64_SINT] = &util_format_r64_sint_fetch_rgba, - [PIPE_FORMAT_R64G64_SINT] = &util_format_r64g64_sint_fetch_rgba, - [PIPE_FORMAT_R64G64B64_SINT] = &util_format_r64g64b64_sint_fetch_rgba, - [PIPE_FORMAT_R64G64B64A64_SINT] = &util_format_r64g64b64a64_sint_fetch_rgba, - [PIPE_FORMAT_A8_UINT] = &util_format_a8_uint_fetch_rgba, - [PIPE_FORMAT_I8_UINT] = &util_format_i8_uint_fetch_rgba, - [PIPE_FORMAT_L8_UINT] = &util_format_l8_uint_fetch_rgba, - [PIPE_FORMAT_L8A8_UINT] = &util_format_l8a8_uint_fetch_rgba, - [PIPE_FORMAT_A8_SINT] = &util_format_a8_sint_fetch_rgba, - [PIPE_FORMAT_I8_SINT] = &util_format_i8_sint_fetch_rgba, - [PIPE_FORMAT_L8_SINT] = &util_format_l8_sint_fetch_rgba, - [PIPE_FORMAT_L8A8_SINT] = &util_format_l8a8_sint_fetch_rgba, - [PIPE_FORMAT_A16_UINT] = &util_format_a16_uint_fetch_rgba, - [PIPE_FORMAT_I16_UINT] = &util_format_i16_uint_fetch_rgba, - [PIPE_FORMAT_L16_UINT] = &util_format_l16_uint_fetch_rgba, - [PIPE_FORMAT_L16A16_UINT] = &util_format_l16a16_uint_fetch_rgba, - [PIPE_FORMAT_A16_SINT] = &util_format_a16_sint_fetch_rgba, - [PIPE_FORMAT_I16_SINT] = &util_format_i16_sint_fetch_rgba, - [PIPE_FORMAT_L16_SINT] = &util_format_l16_sint_fetch_rgba, - [PIPE_FORMAT_L16A16_SINT] = &util_format_l16a16_sint_fetch_rgba, - [PIPE_FORMAT_A32_UINT] = &util_format_a32_uint_fetch_rgba, - [PIPE_FORMAT_I32_UINT] = &util_format_i32_uint_fetch_rgba, - [PIPE_FORMAT_L32_UINT] = &util_format_l32_uint_fetch_rgba, - [PIPE_FORMAT_L32A32_UINT] = &util_format_l32a32_uint_fetch_rgba, - [PIPE_FORMAT_A32_SINT] = &util_format_a32_sint_fetch_rgba, - [PIPE_FORMAT_I32_SINT] = &util_format_i32_sint_fetch_rgba, - [PIPE_FORMAT_L32_SINT] = &util_format_l32_sint_fetch_rgba, - [PIPE_FORMAT_L32A32_SINT] = &util_format_l32a32_sint_fetch_rgba, - [PIPE_FORMAT_B8G8R8_UINT] = &util_format_b8g8r8_uint_fetch_rgba, - [PIPE_FORMAT_B8G8R8A8_UINT] = &util_format_b8g8r8a8_uint_fetch_rgba, - [PIPE_FORMAT_B8G8R8_SINT] = &util_format_b8g8r8_sint_fetch_rgba, - [PIPE_FORMAT_B8G8R8A8_SINT] = &util_format_b8g8r8a8_sint_fetch_rgba, - [PIPE_FORMAT_A8R8G8B8_UINT] = &util_format_a8r8g8b8_uint_fetch_rgba, - [PIPE_FORMAT_A8B8G8R8_UINT] = &util_format_a8b8g8r8_uint_fetch_rgba, - [PIPE_FORMAT_A2R10G10B10_UINT] = &util_format_a2r10g10b10_uint_fetch_rgba, - [PIPE_FORMAT_A2B10G10R10_UINT] = &util_format_a2b10g10r10_uint_fetch_rgba, - [PIPE_FORMAT_B10G10R10A2_UINT] = &util_format_b10g10r10a2_uint_fetch_rgba, - [PIPE_FORMAT_B10G10R10A2_SINT] = &util_format_b10g10r10a2_sint_fetch_rgba, - [PIPE_FORMAT_R5G6B5_UINT] = &util_format_r5g6b5_uint_fetch_rgba, - [PIPE_FORMAT_B5G6R5_UINT] = &util_format_b5g6r5_uint_fetch_rgba, - [PIPE_FORMAT_R3G3B2_UINT] = &util_format_r3g3b2_uint_fetch_rgba, - [PIPE_FORMAT_B2G3R3_UINT] = &util_format_b2g3r3_uint_fetch_rgba, - [PIPE_FORMAT_R4G4B4A4_UINT] = &util_format_r4g4b4a4_uint_fetch_rgba, - [PIPE_FORMAT_B4G4R4A4_UINT] = &util_format_b4g4r4a4_uint_fetch_rgba, - [PIPE_FORMAT_A4R4G4B4_UINT] = &util_format_a4r4g4b4_uint_fetch_rgba, - [PIPE_FORMAT_A4B4G4R4_UINT] = &util_format_a4b4g4r4_uint_fetch_rgba, - [PIPE_FORMAT_A1R5G5B5_UINT] = &util_format_a1r5g5b5_uint_fetch_rgba, - [PIPE_FORMAT_A1B5G5R5_UINT] = &util_format_a1b5g5r5_uint_fetch_rgba, - [PIPE_FORMAT_R5G5B5A1_UINT] = &util_format_r5g5b5a1_uint_fetch_rgba, - [PIPE_FORMAT_B5G5R5A1_UINT] = &util_format_b5g5r5a1_uint_fetch_rgba, - [PIPE_FORMAT_R8G8B8X8_SNORM] = &util_format_r8g8b8x8_snorm_fetch_rgba, - [PIPE_FORMAT_R8G8B8X8_SRGB] = &util_format_r8g8b8x8_srgb_fetch_rgba, - [PIPE_FORMAT_R8G8B8X8_UINT] = &util_format_r8g8b8x8_uint_fetch_rgba, - [PIPE_FORMAT_R8G8B8X8_SINT] = &util_format_r8g8b8x8_sint_fetch_rgba, - [PIPE_FORMAT_B10G10R10X2_UNORM] = &util_format_b10g10r10x2_unorm_fetch_rgba, - [PIPE_FORMAT_B10G10R10X2_SNORM] = &util_format_b10g10r10x2_snorm_fetch_rgba, - [PIPE_FORMAT_B10G10R10X2_SINT] = &util_format_b10g10r10x2_sint_fetch_rgba, - [PIPE_FORMAT_R16G16B16X16_UNORM] = &util_format_r16g16b16x16_unorm_fetch_rgba, - [PIPE_FORMAT_R16G16B16X16_SNORM] = &util_format_r16g16b16x16_snorm_fetch_rgba, - [PIPE_FORMAT_R16G16B16X16_FLOAT] = &util_format_r16g16b16x16_float_fetch_rgba, - [PIPE_FORMAT_R16G16B16X16_UINT] = &util_format_r16g16b16x16_uint_fetch_rgba, - [PIPE_FORMAT_R16G16B16X16_SINT] = &util_format_r16g16b16x16_sint_fetch_rgba, - [PIPE_FORMAT_R32G32B32X32_FLOAT] = &util_format_r32g32b32x32_float_fetch_rgba, - [PIPE_FORMAT_R32G32B32X32_UINT] = &util_format_r32g32b32x32_uint_fetch_rgba, - [PIPE_FORMAT_R32G32B32X32_SINT] = &util_format_r32g32b32x32_sint_fetch_rgba, - [PIPE_FORMAT_R8A8_SNORM] = &util_format_r8a8_snorm_fetch_rgba, - [PIPE_FORMAT_R16A16_UNORM] = &util_format_r16a16_unorm_fetch_rgba, - [PIPE_FORMAT_R16A16_SNORM] = &util_format_r16a16_snorm_fetch_rgba, - [PIPE_FORMAT_R16A16_FLOAT] = &util_format_r16a16_float_fetch_rgba, - [PIPE_FORMAT_R32A32_FLOAT] = &util_format_r32a32_float_fetch_rgba, - [PIPE_FORMAT_R8A8_UINT] = &util_format_r8a8_uint_fetch_rgba, - [PIPE_FORMAT_R8A8_SINT] = &util_format_r8a8_sint_fetch_rgba, - [PIPE_FORMAT_R16A16_UINT] = &util_format_r16a16_uint_fetch_rgba, - [PIPE_FORMAT_R16A16_SINT] = &util_format_r16a16_sint_fetch_rgba, - [PIPE_FORMAT_R32A32_UINT] = &util_format_r32a32_uint_fetch_rgba, - [PIPE_FORMAT_R32A32_SINT] = &util_format_r32a32_sint_fetch_rgba, - [PIPE_FORMAT_R10G10B10A2_UINT] = &util_format_r10g10b10a2_uint_fetch_rgba, - [PIPE_FORMAT_R10G10B10A2_SINT] = &util_format_r10g10b10a2_sint_fetch_rgba, - [PIPE_FORMAT_B5G6R5_SRGB] = &util_format_b5g6r5_srgb_fetch_rgba, - [PIPE_FORMAT_R5G6B5_SRGB] = &util_format_r5g6b5_srgb_fetch_rgba, - [PIPE_FORMAT_G8R8_UNORM] = &util_format_g8r8_unorm_fetch_rgba, - [PIPE_FORMAT_G8R8_SNORM] = &util_format_g8r8_snorm_fetch_rgba, - [PIPE_FORMAT_G8R8_SINT] = &util_format_g8r8_sint_fetch_rgba, - [PIPE_FORMAT_G16R16_UNORM] = &util_format_g16r16_unorm_fetch_rgba, - [PIPE_FORMAT_G16R16_SNORM] = &util_format_g16r16_snorm_fetch_rgba, - [PIPE_FORMAT_G16R16_SINT] = &util_format_g16r16_sint_fetch_rgba, - [PIPE_FORMAT_A8B8G8R8_SNORM] = &util_format_a8b8g8r8_snorm_fetch_rgba, - [PIPE_FORMAT_A8B8G8R8_SINT] = &util_format_a8b8g8r8_sint_fetch_rgba, - [PIPE_FORMAT_X8B8G8R8_SNORM] = &util_format_x8b8g8r8_snorm_fetch_rgba, - [PIPE_FORMAT_X8B8G8R8_SINT] = &util_format_x8b8g8r8_sint_fetch_rgba, -}; - -util_format_fetch_rgba_func_ptr -util_format_fetch_rgba_func(enum pipe_format format) -{ - assert(format < PIPE_FORMAT_COUNT); - return util_format_fetch_rgba_table[format]; -} - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_table.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_table.py deleted file mode 100644 index fdab1a2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_table.py +++ /dev/null @@ -1,333 +0,0 @@ -CopyRight = ''' -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ -''' - - -import sys, os - -from u_format_parse import * -import u_format_pack - - -def layout_map(layout): - return 'UTIL_FORMAT_LAYOUT_' + str(layout).upper() - - -def colorspace_map(colorspace): - return 'UTIL_FORMAT_COLORSPACE_' + str(colorspace).upper() - - -colorspace_channels_map = { - 'rgb': ['r', 'g', 'b', 'a'], - 'srgb': ['sr', 'sg', 'sb', 'a'], - 'zs': ['z', 's'], - 'yuv': ['y', 'u', 'v'], -} - - -type_map = { - VOID: "UTIL_FORMAT_TYPE_VOID", - UNSIGNED: "UTIL_FORMAT_TYPE_UNSIGNED", - SIGNED: "UTIL_FORMAT_TYPE_SIGNED", - FIXED: "UTIL_FORMAT_TYPE_FIXED", - FLOAT: "UTIL_FORMAT_TYPE_FLOAT", -} - - -def bool_map(value): - if value: - return "true" - else: - return "false" - - -swizzle_map = { - SWIZZLE_X: "PIPE_SWIZZLE_X", - SWIZZLE_Y: "PIPE_SWIZZLE_Y", - SWIZZLE_Z: "PIPE_SWIZZLE_Z", - SWIZZLE_W: "PIPE_SWIZZLE_W", - SWIZZLE_0: "PIPE_SWIZZLE_0", - SWIZZLE_1: "PIPE_SWIZZLE_1", - SWIZZLE_NONE: "PIPE_SWIZZLE_NONE", -} - -def has_access(format): - # We don't generate code for YUV formats, and many of the new ones lack - # pack/unpack functions for softpipe/llvmpipe. - noaccess_formats = [ - 'r1_unorm', - 'yv12', - 'yv16', - 'iyuv', - 'nv12', - 'nv16', - 'nv21', - 'p010', - 'p012', - 'p016', - 'p030', - 'y210', - 'y212', - 'y216', - 'y410', - 'y412', - 'y416', - 'xyuv', - 'ayuv', - 'r8g8_r8b8_unorm', - 'g8r8_b8r8_unorm', - 'g8r8_g8b8_unorm', - 'y8_400_unorm', - 'y8_u8_v8_422_unorm', - 'y8_u8v8_422_unorm', - 'y8_u8_v8_444_unorm', - 'y16_u16_v16_420_unorm', - 'y16_u16_v16_422_unorm', - 'y16_u16v16_422_unorm', - 'y16_u16_v16_444_unorm', - 'r8_g8b8_420_unorm', - 'g8_b8r8_420_unorm', - 'g8_b8_r8_420_unorm', - 'y8_unorm', - ] - if format.short_name() in noaccess_formats: - return False - if format.layout in ('astc', 'atc'): - return False - if format.layout == 'etc' and format.short_name() != 'etc1_rgb8': - return False - return True - -def write_format_table_header(file): - print('/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */', file=file) - print(file=file) - # This will print the copyright message on the top of this file - print(CopyRight.strip(), file=file) - print(file=file) - print('#include "util/format/u_format.h"', file=file) - -def write_format_table(formats): - write_format_table_header(sys.stdout) - print('#include "u_format_bptc.h"') - print('#include "u_format_fxt1.h"') - print('#include "u_format_s3tc.h"') - print('#include "u_format_rgtc.h"') - print('#include "u_format_latc.h"') - print('#include "u_format_etc.h"') - print() - - write_format_table_header(sys.stdout2) - - print('#ifdef __cplusplus', file=sys.stdout2) - print('extern "C" {', file=sys.stdout2) - print('#endif', file=sys.stdout2) - print(file=sys.stdout2) - - u_format_pack.generate(formats) - - print('#ifdef __cplusplus', file=sys.stdout2) - print('} /* extern "C" */', file=sys.stdout2) - print('#endif', file=sys.stdout2) - - def do_channel_array(channels, swizzles): - print(" {") - for i in range(4): - channel = channels[i] - if i < 3: - sep = "," - else: - sep = "" - if channel.size: - print(" {%s, %s, %s, %u, %u}%s\t/* %s = %s */" % (type_map[channel.type], bool_map(channel.norm), bool_map(channel.pure), channel.size, channel.shift, sep, "xyzw"[i], channel.name)) - else: - print(" {0, 0, 0, 0, 0}%s" % (sep,)) - print(" },") - - def do_swizzle_array(channels, swizzles): - print(" {") - for i in range(4): - swizzle = swizzles[i] - if i < 3: - sep = "," - else: - sep = "" - try: - comment = colorspace_channels_map[format.colorspace][i] - except (KeyError, IndexError): - comment = 'ignored' - print(" %s%s\t/* %s */" % (swizzle_map[swizzle], sep, comment)) - print(" },") - - def generate_table_getter(type): - suffix = "" - if type == "unpack_": - suffix = "_generic" - print("ATTRIBUTE_RETURNS_NONNULL const struct util_format_%sdescription *" % type) - print("util_format_%sdescription%s(enum pipe_format format)" % (type, suffix)) - print("{") - print(" assert(format < PIPE_FORMAT_COUNT);") - print(" return &util_format_%sdescriptions[format];" % (type)) - print("}") - print() - - def generate_function_getter(func): - print("util_format_%s_func_ptr" % func) - print("util_format_%s_func(enum pipe_format format)" % (func)) - print("{") - print(" assert(format < PIPE_FORMAT_COUNT);") - print(" return util_format_%s_table[format];" % (func)) - print("}") - print() - - print('static const struct util_format_description') - print('util_format_descriptions[PIPE_FORMAT_COUNT] = {') - for format in formats: - sn = format.short_name() - - print(" [%s] = {" % (format.name,)) - print(" %s," % (format.name,)) - print(" \"%s\"," % (format.name,)) - print(" \"%s\"," % (sn,)) - print(" {%u, %u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_depth, format.block_size())) - print(" %s," % (layout_map(format.layout),)) - print(" %u,\t/* nr_channels */" % (format.nr_channels(),)) - print(" %s,\t/* is_array */" % (bool_map(format.is_array()),)) - print(" %s,\t/* is_bitmask */" % (bool_map(format.is_bitmask()),)) - print(" %s,\t/* is_mixed */" % (bool_map(format.is_mixed()),)) - print(" %s,\t/* is_unorm */" % (bool_map(format.is_unorm()),)) - print(" %s,\t/* is_snorm */" % (bool_map(format.is_snorm()),)) - u_format_pack.print_channels(format, do_channel_array) - u_format_pack.print_channels(format, do_swizzle_array) - print(" %s," % (colorspace_map(format.colorspace),)) - print(" },") - print() - print("};") - print() - generate_table_getter("") - - print('static const struct util_format_pack_description') - print('util_format_pack_descriptions[PIPE_FORMAT_COUNT] = {') - for format in formats: - sn = format.short_name() - - if not has_access(format): - print(" [%s] = { 0 }," % (format.name,)) - continue - - print(" [%s] = {" % (format.name,)) - if format.colorspace != ZS and not format.is_pure_color(): - print(" .pack_rgba_8unorm = &util_format_%s_pack_rgba_8unorm," % sn) - print(" .pack_rgba_float = &util_format_%s_pack_rgba_float," % sn) - - if format.has_depth(): - print(" .pack_z_32unorm = &util_format_%s_pack_z_32unorm," % sn) - print(" .pack_z_float = &util_format_%s_pack_z_float," % sn) - - if format.has_stencil(): - print(" .pack_s_8uint = &util_format_%s_pack_s_8uint," % sn) - - if format.is_pure_unsigned() or format.is_pure_signed(): - print(" .pack_rgba_uint = &util_format_%s_pack_unsigned," % sn) - print(" .pack_rgba_sint = &util_format_%s_pack_signed," % sn) - print(" },") - print() - print("};") - print() - generate_table_getter("pack_") - print('static const struct util_format_unpack_description') - print('util_format_unpack_descriptions[PIPE_FORMAT_COUNT] = {') - for format in formats: - sn = format.short_name() - - if not has_access(format): - print(" [%s] = { 0 }," % (format.name,)) - continue - - print(" [%s] = {" % (format.name,)) - - if format.colorspace != ZS and not format.is_pure_color(): - if format.layout == 's3tc' or format.layout == 'rgtc': - print(" .fetch_rgba_8unorm = &util_format_%s_fetch_rgba_8unorm," % sn) - if format.block_width > 1: - print( - " .unpack_rgba_8unorm_rect = &util_format_%s_unpack_rgba_8unorm," % sn) - print( - " .unpack_rgba_rect = &util_format_%s_unpack_rgba_float," % sn) - else: - print( - " .unpack_rgba_8unorm = &util_format_%s_unpack_rgba_8unorm," % sn) - print(" .unpack_rgba = &util_format_%s_unpack_rgba_float," % sn) - - if format.has_depth(): - print(" .unpack_z_32unorm = &util_format_%s_unpack_z_32unorm," % sn) - print(" .unpack_z_float = &util_format_%s_unpack_z_float," % sn) - - if format.has_stencil(): - print(" .unpack_s_8uint = &util_format_%s_unpack_s_8uint," % sn) - - if format.is_pure_unsigned(): - print(" .unpack_rgba = &util_format_%s_unpack_unsigned," % sn) - elif format.is_pure_signed(): - print(" .unpack_rgba = &util_format_%s_unpack_signed," % sn) - print(" },") - print("};") - print() - - generate_table_getter("unpack_") - - print('static const util_format_fetch_rgba_func_ptr util_format_fetch_rgba_table[PIPE_FORMAT_COUNT] = {') - for format in formats: - sn = format.short_name() - - if format.colorspace != ZS and has_access(format): - print(" [%s] = &util_format_%s_fetch_rgba," % (format.name, sn)) - else: - print(" [%s] = NULL," % format.name) - - print("};") - print() - - generate_function_getter("fetch_rgba") - -def main(): - formats = [] - - sys.stdout2 = open(os.devnull, "w") - - for arg in sys.argv[1:]: - if arg == '--header': - sys.stdout2 = sys.stdout - sys.stdout = open(os.devnull, "w") - continue - - formats.extend(parse(arg)) - - write_format_table(formats) - -if __name__ == '__main__': - main() diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_unpack_neon.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_unpack_neon.c deleted file mode 100644 index 07f52e7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_unpack_neon.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright © 2021 Google LLC - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "../detect_arch.h" -#include "u_format.h" - -#if (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM) && !defined(NO_FORMAT_ASM) && !defined(__SOFTFP__) - -/* armhf builds default to vfp, not neon, and refuses to compile neon intrinsics - * unless you tell it "no really". - */ -#if DETECT_ARCH_ARM -#pragma GCC target ("fpu=neon") -#endif - -#include -#include "u_format_pack.h" -#include "../u_cpu_detect.h" - -static void -util_format_b8g8r8a8_unorm_unpack_rgba_8unorm_neon(uint8_t *restrict dst, const uint8_t *restrict src, unsigned width) -{ - while (width >= 16) { - uint8x16x4_t load = vld4q_u8(src); - uint8x16x4_t swap = { .val = { load.val[2], load.val[1], load.val[0], load.val[3] } }; - vst4q_u8(dst, swap); - width -= 16; - dst += 16 * 4; - src += 16 * 4; - } - if (width) - util_format_b8g8r8a8_unorm_unpack_rgba_8unorm(dst, src, width); -} - -static const struct util_format_unpack_description util_format_unpack_descriptions_neon[] = { - [PIPE_FORMAT_B8G8R8A8_UNORM] = { - .unpack_rgba_8unorm = &util_format_b8g8r8a8_unorm_unpack_rgba_8unorm_neon, - .unpack_rgba = &util_format_b8g8r8a8_unorm_unpack_rgba_float, - }, -}; - -const struct util_format_unpack_description * -util_format_unpack_description_neon(enum pipe_format format) -{ - /* CPU detect for NEON support. On arm64, it's implied. */ -#if DETECT_ARCH_ARM - if (!util_get_cpu_caps()->has_neon) - return NULL; -#endif - - if (format >= ARRAY_SIZE(util_format_unpack_descriptions_neon)) - return NULL; - - if (!util_format_unpack_descriptions_neon[format].unpack_rgba) - return NULL; - - return &util_format_unpack_descriptions_neon[format]; -} - -#endif /* DETECT_ARCH_AARCH64 | DETECT_ARCH_ARM */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_yuv.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_yuv.c deleted file mode 100644 index fd60301..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_yuv.c +++ /dev/null @@ -1,926 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -/** - * @file - * YUV and RGB subsampled formats conversion. - * - * @author Jose Fonseca - */ - - -#include "../u_debug.h" -#include "u_format_yuv.h" - - -void -util_format_r8g8_b8g8_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - float r, g0, g1, b; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - r = ubyte_to_float((value >> 0) & 0xff); - g0 = ubyte_to_float((value >> 8) & 0xff); - b = ubyte_to_float((value >> 16) & 0xff); - g1 = ubyte_to_float((value >> 24) & 0xff); - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 1.0f; /* a */ - dst += 4; - - dst[0] = r; /* r */ - dst[1] = g1; /* g */ - dst[2] = b; /* b */ - dst[3] = 1.0f; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - r = ubyte_to_float((value >> 0) & 0xff); - g0 = ubyte_to_float((value >> 8) & 0xff); - b = ubyte_to_float((value >> 16) & 0xff); - g1 = ubyte_to_float((value >> 24) & 0xff); - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 1.0f; /* a */ - } - - src_row = (uint8_t *)src_row + src_stride; - dst_row = (uint8_t *)dst_row + dst_stride; - } -} - - -void -util_format_r8g8_b8g8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - uint8_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - uint8_t r, g0, g1, b; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - r = (value >> 0) & 0xff; - g0 = (value >> 8) & 0xff; - b = (value >> 16) & 0xff; - g1 = (value >> 24) & 0xff; - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 0xff; /* a */ - dst += 4; - - dst[0] = r; /* r */ - dst[1] = g1; /* g */ - dst[2] = b; /* b */ - dst[3] = 0xff; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - r = (value >> 0) & 0xff; - g0 = (value >> 8) & 0xff; - b = (value >> 16) & 0xff; - g1 = (value >> 24) & 0xff; - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 0xff; /* a */ - } - - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - - -void -util_format_r8g8_b8g8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - float r, g0, g1, b; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - r = 0.5f*(src[0] + src[4]); - g0 = src[1]; - g1 = src[5]; - b = 0.5f*(src[2] + src[6]); - - value = (uint32_t)float_to_ubyte(r); - value |= (uint32_t)float_to_ubyte(g0) << 8; - value |= (uint32_t)float_to_ubyte(b) << 16; - value |= (uint32_t)float_to_ubyte(g1) << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - r = src[0]; - g0 = src[1]; - g1 = 0; - b = src[2]; - - value = (uint32_t)float_to_ubyte(r); - value |= (uint32_t)float_to_ubyte(g0) << 8; - value |= (uint32_t)float_to_ubyte(b) << 16; - value |= (uint32_t)float_to_ubyte(g1) << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_r8g8_b8g8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - uint32_t r, g0, g1, b; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - r = (src[0] + src[4] + 1) >> 1; - g0 = src[1]; - g1 = src[5]; - b = (src[2] + src[6] + 1) >> 1; - - value = r; - value |= (uint32_t)g0 << 8; - value |= (uint32_t)b << 16; - value |= (uint32_t)g1 << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - r = src[0]; - g0 = src[1]; - g1 = 0; - b = src[2]; - - value = r; - value |= (uint32_t)g0 << 8; - value |= (uint32_t)b << 16; - value |= (uint32_t)g1 << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_r8g8_b8g8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, - unsigned i, ASSERTED unsigned j) -{ - float *dst = in_dst; - - assert(i < 2); - assert(j < 1); - - dst[0] = ubyte_to_float(src[0]); /* r */ - dst[1] = ubyte_to_float(src[1 + 2*i]); /* g */ - dst[2] = ubyte_to_float(src[2]); /* b */ - dst[3] = 1.0f; /* a */ -} - - -void -util_format_g8r8_g8b8_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - float r, g0, g1, b; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - g0 = ubyte_to_float((value >> 0) & 0xff); - r = ubyte_to_float((value >> 8) & 0xff); - g1 = ubyte_to_float((value >> 16) & 0xff); - b = ubyte_to_float((value >> 24) & 0xff); - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 1.0f; /* a */ - dst += 4; - - dst[0] = r; /* r */ - dst[1] = g1; /* g */ - dst[2] = b; /* b */ - dst[3] = 1.0f; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - g0 = ubyte_to_float((value >> 0) & 0xff); - r = ubyte_to_float((value >> 8) & 0xff); - g1 = ubyte_to_float((value >> 16) & 0xff); - b = ubyte_to_float((value >> 24) & 0xff); - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 1.0f; /* a */ - } - - src_row = (uint8_t *)src_row + src_stride; - dst_row = (uint8_t *)dst_row + dst_stride; - } -} - - -void -util_format_g8r8_g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - uint8_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - uint8_t r, g0, g1, b; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - g0 = (value >> 0) & 0xff; - r = (value >> 8) & 0xff; - g1 = (value >> 16) & 0xff; - b = (value >> 24) & 0xff; - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 0xff; /* a */ - dst += 4; - - dst[0] = r; /* r */ - dst[1] = g1; /* g */ - dst[2] = b; /* b */ - dst[3] = 0xff; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - g0 = (value >> 0) & 0xff; - r = (value >> 8) & 0xff; - g1 = (value >> 16) & 0xff; - b = (value >> 24) & 0xff; - - dst[0] = r; /* r */ - dst[1] = g0; /* g */ - dst[2] = b; /* b */ - dst[3] = 0xff; /* a */ - } - - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - - -void -util_format_g8r8_g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - float r, g0, g1, b; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - r = 0.5f*(src[0] + src[4]); - g0 = src[1]; - g1 = src[5]; - b = 0.5f*(src[2] + src[6]); - - value = (uint32_t)float_to_ubyte(g0); - value |= (uint32_t)float_to_ubyte(r) << 8; - value |= (uint32_t)float_to_ubyte(g1) << 16; - value |= (uint32_t)float_to_ubyte(b) << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - r = src[0]; - g0 = src[1]; - g1 = 0; - b = src[2]; - - value = (uint32_t)float_to_ubyte(g0); - value |= (uint32_t)float_to_ubyte(r) << 8; - value |= (uint32_t)float_to_ubyte(g1) << 16; - value |= (uint32_t)float_to_ubyte(b) << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_g8r8_g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - uint32_t r, g0, g1, b; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - r = (src[0] + src[4] + 1) >> 1; - g0 = src[1]; - g1 = src[5]; - b = (src[2] + src[6] + 1) >> 1; - - value = g0; - value |= (uint32_t)r << 8; - value |= (uint32_t)g1 << 16; - value |= (uint32_t)b << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - r = src[0]; - g0 = src[1]; - g1 = 0; - b = src[2]; - - value = g0; - value |= (uint32_t)r << 8; - value |= (uint32_t)g1 << 16; - value |= (uint32_t)b << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_g8r8_g8b8_unorm_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, - unsigned i, ASSERTED unsigned j) -{ - float *dst = in_dst; - - assert(i < 2); - assert(j < 1); - - dst[0] = ubyte_to_float(src[1]); /* r */ - dst[1] = ubyte_to_float(src[0 + 2*i]); /* g */ - dst[2] = ubyte_to_float(src[3]); /* b */ - dst[3] = 1.0f; /* a */ -} - - -void -util_format_uyvy_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - uint8_t y0, y1, u, v; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - u = (value >> 0) & 0xff; - y0 = (value >> 8) & 0xff; - v = (value >> 16) & 0xff; - y1 = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 1.0f; /* a */ - dst += 4; - - util_format_yuv_to_rgb_float(y1, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 1.0f; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - u = (value >> 0) & 0xff; - y0 = (value >> 8) & 0xff; - v = (value >> 16) & 0xff; - y1 = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 1.0f; /* a */ - } - - src_row = (uint8_t *)src_row + src_stride; - dst_row = (uint8_t *)dst_row + dst_stride; - } -} - - -void -util_format_uyvy_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - uint8_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - uint8_t y0, y1, u, v; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - u = (value >> 0) & 0xff; - y0 = (value >> 8) & 0xff; - v = (value >> 16) & 0xff; - y1 = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 0xff; /* a */ - dst += 4; - - util_format_yuv_to_rgb_8unorm(y1, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 0xff; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - u = (value >> 0) & 0xff; - y0 = (value >> 8) & 0xff; - v = (value >> 16) & 0xff; - y1 = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 0xff; /* a */ - } - - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - - -void -util_format_uyvy_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - uint8_t y0, y1, u, v; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - uint8_t y0, y1, u0, u1, v0, v1, u, v; - - util_format_rgb_float_to_yuv(src[0], src[1], src[2], - &y0, &u0, &v0); - util_format_rgb_float_to_yuv(src[4], src[5], src[6], - &y1, &u1, &v1); - - u = (u0 + u1 + 1) >> 1; - v = (v0 + v1 + 1) >> 1; - - value = u; - value |= (uint32_t)y0 << 8; - value |= (uint32_t)v << 16; - value |= (uint32_t)y1 << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - util_format_rgb_float_to_yuv(src[0], src[1], src[2], - &y0, &u, &v); - y1 = 0; - - value = u; - value |= (uint32_t)y0 << 8; - value |= (uint32_t)v << 16; - value |= (uint32_t)y1 << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_uyvy_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - uint8_t y0, y1, u, v; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - uint8_t y0, y1, u0, u1, v0, v1, u, v; - - util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], - &y0, &u0, &v0); - util_format_rgb_8unorm_to_yuv(src[4], src[5], src[6], - &y1, &u1, &v1); - - u = (u0 + u1 + 1) >> 1; - v = (v0 + v1 + 1) >> 1; - - value = u; - value |= (uint32_t)y0 << 8; - value |= (uint32_t)v << 16; - value |= (uint32_t)y1 << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], - &y0, &u, &v); - y1 = 0; - - value = u; - value |= (uint32_t)y0 << 8; - value |= (uint32_t)v << 16; - value |= (uint32_t)y1 << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_uyvy_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, - unsigned i, ASSERTED unsigned j) -{ - float *dst = in_dst; - uint8_t y, u, v; - - assert(i < 2); - assert(j < 1); - - y = src[1 + i*2]; - u = src[0]; - v = src[2]; - - util_format_yuv_to_rgb_float(y, u, v, &dst[0], &dst[1], &dst[2]); - - dst[3] = 1.0f; -} - - -void -util_format_yuyv_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - uint8_t y0, y1, u, v; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - y0 = (value >> 0) & 0xff; - u = (value >> 8) & 0xff; - y1 = (value >> 16) & 0xff; - v = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 1.0f; /* a */ - dst += 4; - - util_format_yuv_to_rgb_float(y1, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 1.0f; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - y0 = (value >> 0) & 0xff; - u = (value >> 8) & 0xff; - y1 = (value >> 16) & 0xff; - v = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 1.0f; /* a */ - } - - src_row = (uint8_t *)src_row + src_stride; - dst_row = (uint8_t *)dst_row + dst_stride; - } -} - - -void -util_format_yuyv_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - uint8_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - uint32_t value; - uint8_t y0, y1, u, v; - - for (x = 0; x + 1 < width; x += 2) { - value = util_cpu_to_le32(*src++); - - y0 = (value >> 0) & 0xff; - u = (value >> 8) & 0xff; - y1 = (value >> 16) & 0xff; - v = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 0xff; /* a */ - dst += 4; - - util_format_yuv_to_rgb_8unorm(y1, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 0xff; /* a */ - dst += 4; - } - - if (x < width) { - value = util_cpu_to_le32(*src); - - y0 = (value >> 0) & 0xff; - u = (value >> 8) & 0xff; - y1 = (value >> 16) & 0xff; - v = (value >> 24) & 0xff; - - util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); - dst[3] = 0xff; /* a */ - } - - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - - -void -util_format_yuyv_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - uint8_t y0, y1, u, v; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - uint8_t y0, y1, u0, u1, v0, v1, u, v; - - util_format_rgb_float_to_yuv(src[0], src[1], src[2], - &y0, &u0, &v0); - util_format_rgb_float_to_yuv(src[4], src[5], src[6], - &y1, &u1, &v1); - - u = (u0 + u1 + 1) >> 1; - v = (v0 + v1 + 1) >> 1; - - value = y0; - value |= (uint32_t)u << 8; - value |= (uint32_t)y1 << 16; - value |= (uint32_t)v << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - util_format_rgb_float_to_yuv(src[0], src[1], src[2], - &y0, &u, &v); - y1 = 0; - - value = y0; - value |= (uint32_t)u << 8; - value |= (uint32_t)y1 << 16; - value |= (uint32_t)v << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_yuyv_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - - for (y = 0; y < height; y += 1) { - const uint8_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - uint8_t y0, y1, u, v; - uint32_t value; - - for (x = 0; x + 1 < width; x += 2) { - uint8_t y0, y1, u0, u1, v0, v1, u, v; - - util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], - &y0, &u0, &v0); - util_format_rgb_8unorm_to_yuv(src[4], src[5], src[6], - &y1, &u1, &v1); - - u = (u0 + u1 + 1) >> 1; - v = (v0 + v1 + 1) >> 1; - - value = y0; - value |= (uint32_t)u << 8; - value |= (uint32_t)y1 << 16; - value |= (uint32_t)v << 24; - - *dst++ = util_le32_to_cpu(value); - - src += 8; - } - - if (x < width) { - util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], - &y0, &u, &v); - y1 = 0; - - value = y0; - value |= (uint32_t)u << 8; - value |= (uint32_t)y1 << 16; - value |= (uint32_t)v << 24; - - *dst = util_le32_to_cpu(value); - } - - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_yuyv_fetch_rgba(void *restrict in_dst, const uint8_t *restrict src, - unsigned i, ASSERTED unsigned j) -{ - float *dst = in_dst; - uint8_t y, u, v; - - assert(i < 2); - assert(j < 1); - - y = src[0 + i*2]; - u = src[1]; - v = src[3]; - - util_format_yuv_to_rgb_float(y, u, v, &dst[0], &dst[1], &dst[2]); - - dst[3] = 1.0f; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_yuv.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_yuv.h deleted file mode 100644 index 17b3dfb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_yuv.h +++ /dev/null @@ -1,221 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -/** - * @file - * YUV colorspace conversion. - * - * @author Brian Paul - * @author Michal Krol - * @author Jose Fonseca - * - * See also: - * - http://www.fourcc.org/fccyvrgb.php - * - http://msdn.microsoft.com/en-us/library/ms893078 - * - http://en.wikipedia.org/wiki/YUV - */ - - -#ifndef U_FORMAT_YUV_H_ -#define U_FORMAT_YUV_H_ - - -#include "../../gallium/include/pipe/p_compiler.h" -#include "../u_math.h" - -#include "../../../include/c99_compat.h" - -/* - * TODO: Ensure we use consistent and right floating formulas, with enough - * precision in the coefficients. - */ - -static inline void -util_format_rgb_float_to_yuv(float r, float g, float b, - uint8_t *y, uint8_t *u, uint8_t *v) -{ - const float _r = SATURATE(r); - const float _g = SATURATE(g); - const float _b = SATURATE(b); - - const float scale = 255.0f; - - const int _y = scale * ( (0.257f * _r) + (0.504f * _g) + (0.098f * _b)); - const int _u = scale * (-(0.148f * _r) - (0.291f * _g) + (0.439f * _b)); - const int _v = scale * ( (0.439f * _r) - (0.368f * _g) - (0.071f * _b)); - - *y = _y + 16; - *u = _u + 128; - *v = _v + 128; -} - - -static inline void -util_format_yuv_to_rgb_float(uint8_t y, uint8_t u, uint8_t v, - float *r, float *g, float *b) -{ - const int _y = y - 16; - const int _u = u - 128; - const int _v = v - 128; - - const float y_factor = 255.0f / 219.0f; - - const float scale = 1.0f / 255.0f; - - *r = scale * (y_factor * _y + 1.596f * _v); - *g = scale * (y_factor * _y - 0.391f * _u - 0.813f * _v); - *b = scale * (y_factor * _y + 2.018f * _u ); -} - - -static inline void -util_format_rgb_8unorm_to_yuv(uint8_t r, uint8_t g, uint8_t b, - uint8_t *y, uint8_t *u, uint8_t *v) -{ - *y = (( 66 * r + 129 * g + 25 * b + 128) >> 8) + 16; - *u = (( -38 * r - 74 * g + 112 * b + 128) >> 8) + 128; - *v = (( 112 * r - 94 * g - 18 * b + 128) >> 8) + 128; -} - - -static inline void -util_format_yuv_to_rgb_8unorm(uint8_t y, uint8_t u, uint8_t v, - uint8_t *r, uint8_t *g, uint8_t *b) -{ - const int _y = y - 16; - const int _u = u - 128; - const int _v = v - 128; - - const int _r = (298 * _y + 409 * _v + 128) >> 8; - const int _g = (298 * _y - 100 * _u - 208 * _v + 128) >> 8; - const int _b = (298 * _y + 516 * _u + 128) >> 8; - - *r = CLAMP(_r, 0, 255); - *g = CLAMP(_g, 0, 255); - *b = CLAMP(_b, 0, 255); -} - - - -void -util_format_uyvy_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_uyvy_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_uyvy_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_uyvy_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_uyvy_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -void -util_format_yuyv_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_yuyv_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_yuyv_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_yuyv_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_yuyv_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -void -util_format_r8g8_b8g8_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_r8g8_b8g8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_r8g8_b8g8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_r8g8_b8g8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_r8g8_b8g8_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -void -util_format_g8r8_g8b8_unorm_unpack_rgba_float(void *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_g8r8_g8b8_unorm_unpack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_g8r8_g8b8_unorm_pack_rgba_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_g8r8_g8b8_unorm_pack_rgba_8unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height); - -void -util_format_g8r8_g8b8_unorm_fetch_rgba(void *restrict dst, const uint8_t *restrict src, - unsigned i, unsigned j); - -#endif /* U_FORMAT_YUV_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_zs.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_zs.c deleted file mode 100644 index cb8893a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_zs.c +++ /dev/null @@ -1,979 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#include "u_format_zs.h" -#include "../u_math.h" - - -/* - * z32_unorm conversion functions - */ - -static inline uint16_t -z32_unorm_to_z16_unorm(uint32_t z) -{ - /* z * 0xffff / 0xffffffff */ - return z >> 16; -} - -static inline uint32_t -z16_unorm_to_z32_unorm(uint16_t z) -{ - /* z * 0xffffffff / 0xffff */ - return ((uint32_t)z << 16) | z; -} - -static inline uint32_t -z32_unorm_to_z24_unorm(uint32_t z) -{ - /* z * 0xffffff / 0xffffffff */ - return z >> 8; -} - -static inline uint32_t -z24_unorm_to_z32_unorm(uint32_t z) -{ - /* z * 0xffffffff / 0xffffff */ - return (z << 8) | (z >> 16); -} - - -/* - * z32_float conversion functions - */ - -static inline uint16_t -z32_float_to_z16_unorm(float z) -{ - const float scale = 0xffff; - return (uint16_t)(z * scale + 0.5f); -} - -static inline float -z16_unorm_to_z32_float(uint16_t z) -{ - const float scale = 1.0 / 0xffff; - return (float)(z * scale); -} - -static inline uint32_t -z32_float_to_z24_unorm(float z) -{ - const double scale = 0xffffff; - return (uint32_t)(z * scale) & 0xffffff; -} - -static inline float -z24_unorm_to_z32_float(uint32_t z) -{ - const double scale = 1.0 / 0xffffff; - return (float)(z * scale); -} - -static inline uint32_t -z32_float_to_z32_unorm(float z) -{ - const double scale = 0xffffffff; - return (uint32_t)(z * scale); -} - -static inline float -z32_unorm_to_z32_float(uint32_t z) -{ - const double scale = 1.0 / 0xffffffff; - return (float)(z * scale); -} - - -void -util_format_s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned y; - for(y = 0; y < height; ++y) { - memcpy(dst_row, src_row, width); - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned y; - for(y = 0; y < height; ++y) { - memcpy(dst_row, src_row, width); - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z16_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - float *dst = dst_row; - const uint16_t *src = (const uint16_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z16_unorm_to_z32_float(*src++); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z16_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const float *src = src_row; - uint16_t *dst = (uint16_t *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_float_to_z16_unorm(*src++); - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z16_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = dst_row; - const uint16_t *src = (const uint16_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z16_unorm_to_z32_unorm(*src++); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z16_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = src_row; - uint16_t *dst = (uint16_t *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_unorm_to_z16_unorm(*src++); - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z32_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_unorm_to_z32_float(*src++); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ =z32_float_to_z32_unorm(*src++); - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z32_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned y; - for(y = 0; y < height; ++y) { - memcpy(dst_row, src_row, width * 4); - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned y; - for(y = 0; y < height; ++y) { - memcpy(dst_row, src_row, width * 4); - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_float_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned y; - for(y = 0; y < height; ++y) { - memcpy(dst_row, src_row, width * 4); - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_float_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned y; - for(y = 0; y < height; ++y) { - memcpy(dst_row, src_row, width * 4); - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_float_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = dst_row; - const float *src = (const float *)src_row; - for(x = 0; x < width; ++x) { - float z = *src++; - *dst++ = z32_float_to_z32_unorm(CLAMP(z, 0.0f, 1.0f)); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_float_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = src_row; - float *dst = (float *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_unorm_to_z32_float(*src++); - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z16_unorm_s8_uint_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unreachable("z16_s8 packing/unpacking is not implemented."); -} - -void -util_format_z16_unorm_s8_uint_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unreachable("z16_s8 packing/unpacking is not implemented."); -} - -void -util_format_z16_unorm_s8_uint_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unreachable("z16_s8 packing/unpacking is not implemented."); -} - -void -util_format_z16_unorm_s8_uint_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unreachable("z16_s8 packing/unpacking is not implemented."); -} - -void -util_format_z16_unorm_s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unreachable("z16_s8 packing/unpacking is not implemented."); -} - -void -util_format_z16_unorm_s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unreachable("z16_s8 packing/unpacking is not implemented."); -} - -void -util_format_z24_unorm_s8_uint_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z24_unorm_to_z32_float((*src++) & 0xffffff); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z24_unorm_s8_uint_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - uint32_t value = *dst; - value &= 0xff000000; - value |= z32_float_to_z24_unorm(*src++); - *dst++ = value; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_z24_unorm_s8_uint_unpack_z24(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = (uint32_t *)dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = ((*src++) & 0xffffff); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z24_unorm_s8_uint_pack_z24(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = (const uint32_t *)src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - uint32_t value = *dst; - value &= 0xff000000; - value |= *src & 0xffffff; - src++; - *dst++ = value; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z24_unorm_s8_uint_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z24_unorm_to_z32_unorm((*src++) & 0xffffff); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z24_unorm_s8_uint_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - uint32_t value = *dst; - value &= 0xff000000; - value |= z32_unorm_to_z24_unorm(*src++); - *dst++ = value; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z24_unorm_s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint8_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = (*src++) >> 24; - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z24_unorm_s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint8_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - uint32_t value = util_le32_to_cpu(*dst); - value &= 0x00ffffff; - value |= (uint32_t)*src++ << 24; - *dst++ = value; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z24_unorm_s8_uint_pack_separate(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *z_src_row, unsigned z_src_stride, - const uint8_t *s_src_row, unsigned s_src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for (y = 0; y < height; ++y) { - const uint32_t *z_src = z_src_row; - const uint8_t *s_src = s_src_row; - uint32_t *dst = (uint32_t *)dst_row; - for (x = 0; x < width; ++x) { - *dst++ = (*z_src++ & 0x00ffffff) | ((uint32_t)*s_src++ << 24); - } - dst_row += dst_stride / sizeof(*dst_row); - z_src_row += z_src_stride / sizeof(*z_src_row); - s_src_row += s_src_stride / sizeof(*s_src_row); - } -} - -void -util_format_z24_unorm_s8_uint_pack_separate_z32(uint8_t *restrict dst_row, unsigned dst_stride, - const float *z_src_row, unsigned z_src_stride, - const uint8_t *s_src_row, unsigned s_src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for (y = 0; y < height; ++y) { - const float *z_src = z_src_row; - const uint8_t *s_src = s_src_row; - uint32_t *dst = (uint32_t *)dst_row; - for (x = 0; x < width; ++x) { - *dst++ = (z32_float_to_z24_unorm(*z_src++) & 0x00ffffff) | ((uint32_t)*s_src++ << 24); - } - dst_row += dst_stride / sizeof(*dst_row); - z_src_row += z_src_stride / sizeof(*z_src_row); - s_src_row += s_src_stride / sizeof(*s_src_row); - } -} - -void -util_format_s8_uint_z24_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z24_unorm_to_z32_float((*src++) >> 8); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_s8_uint_z24_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - uint32_t value = *dst; - value &= 0x000000ff; - value |= z32_float_to_z24_unorm(*src++) << 8; - *dst++ = value; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_s8_uint_z24_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - uint32_t value = *src++; - *dst++ = z24_unorm_to_z32_unorm(value >> 8); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_s8_uint_z24_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - uint32_t value = *dst; - value &= 0x000000ff; - value |= *src++ & 0xffffff00; - *dst++ = value; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_s8_uint_z24_unorm_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint8_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = (*src++) & 0xff; - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_s8_uint_z24_unorm_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint8_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - uint32_t value = *dst; - value &= 0xffffff00; - value |= *src++; - *dst++ = value; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z24x8_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - float *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z24_unorm_to_z32_float((*src++) & 0xffffff); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z24x8_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_float_to_z24_unorm(*src++); - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z24x8_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z24_unorm_to_z32_unorm((*src++) & 0xffffff); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z24x8_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_unorm_to_z24_unorm(*src++); - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8z24_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - float *dst = dst_row; - const uint32_t *src = (uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z24_unorm_to_z32_float((*src++) >> 8); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_x8z24_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const float *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_float_to_z24_unorm(*src++) << 8; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_x8z24_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = dst_row; - const uint32_t *src = (const uint32_t *)src_row; - for(x = 0; x < width; ++x) { - *dst++ = z24_unorm_to_z32_unorm((*src++) >> 8); - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_x8z24_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = src_row; - uint32_t *dst = (uint32_t *)dst_row; - for(x = 0; x < width; ++x) { - *dst++ = z32_unorm_to_z24_unorm(*src++) << 8; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z32_float_s8x24_uint_unpack_z_float(float *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - float *dst = dst_row; - const float *src = (const float *)src_row; - for(x = 0; x < width; ++x) { - *dst = *src; - src += 2; - dst += 1; - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_float_s8x24_uint_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, - const float *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const float *src = src_row; - float *dst = (float *)dst_row; - for(x = 0; x < width; ++x) { - *dst = *src; - src += 1; - dst += 2; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z32_float_s8x24_uint_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint32_t *dst = dst_row; - const float *src = (const float *)src_row; - for(x = 0; x < width; ++x) { - *dst = z32_float_to_z32_unorm(CLAMP(*src, 0.0f, 1.0f)); - src += 2; - dst += 1; - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_float_s8x24_uint_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, - const uint32_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint32_t *src = src_row; - float *dst = (float *)dst_row; - for(x = 0; x < width; ++x) { - *dst = z32_unorm_to_z32_float(*src++); - dst += 2; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - -void -util_format_z32_float_s8x24_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - uint8_t *dst = dst_row; - const uint32_t *src = (uint32_t *)(src_row + 4); - for(x = 0; x < width; ++x) { - *dst = *src; - src += 2; - dst += 1; - } - src_row += src_stride/sizeof(*src_row); - dst_row += dst_stride/sizeof(*dst_row); - } -} - -void -util_format_z32_float_s8x24_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - unsigned x, y; - for(y = 0; y < height; ++y) { - const uint8_t *src = src_row; - uint32_t *dst = ((uint32_t *)dst_row) + 1; - for(x = 0; x < width; ++x) { - *dst = *src; - src += 1; - dst += 2; - } - dst_row += dst_stride/sizeof(*dst_row); - src_row += src_stride/sizeof(*src_row); - } -} - - -void -util_format_x24s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_z24_unorm_s8_uint_unpack_s_8uint(dst_row, dst_stride, - src_row, src_stride, - width, height); -} - -void -util_format_x24s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_z24_unorm_s8_uint_pack_s_8uint(dst_row, dst_stride, - src_row, src_stride, - width, height); -} - -void -util_format_s8x24_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_s8_uint_z24_unorm_unpack_s_8uint(dst_row, dst_stride, - src_row, src_stride, - width, height); -} - -void -util_format_s8x24_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height) -{ - util_format_s8_uint_z24_unorm_pack_s_8uint(dst_row, dst_stride, - src_row, src_stride, - width, height); -} - -void -util_format_x32_s8x24_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_z32_float_s8x24_uint_unpack_s_8uint(dst_row, dst_stride, - src_row, src_stride, - width, height); - -} - -void -util_format_x32_s8x24_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, - const uint8_t *restrict src_row, unsigned src_stride, - unsigned width, unsigned height) -{ - util_format_z32_float_s8x24_uint_pack_s_8uint(dst_row, dst_stride, - src_row, src_stride, - width, height); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_zs.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_zs.h deleted file mode 100644 index 4dc3766..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_format_zs.h +++ /dev/null @@ -1,256 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#ifndef U_FORMAT_ZS_H_ -#define U_FORMAT_ZS_H_ - - -#include "../../gallium/include/pipe/p_compiler.h" - -#include "../../../include/c99_compat.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void -util_format_s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24_unorm_s8_uint_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24_unorm_s8_uint_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24_unorm_s8_uint_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24_unorm_s8_uint_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24_unorm_s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24_unorm_s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_z24_unorm_s8_uint_pack_separate(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *z_src_row, unsigned z_src_stride, const uint8_t *s_src_row, unsigned s_src_stride, unsigned width, unsigned height); - -void -util_format_z24_unorm_s8_uint_pack_separate_z32(uint8_t *restrict dst_row, unsigned dst_stride, const float *z_src_row, unsigned z_src_stride, const uint8_t *s_src_row, unsigned s_src_stride, unsigned width, unsigned height); - -void -util_format_z24_unorm_s8_uint_unpack_z24(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_z24_unorm_s8_uint_pack_z24(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_s8_uint_z24_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_s8_uint_z24_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_s8_uint_z24_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_s8_uint_z24_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_s8_uint_z24_unorm_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_s8_uint_z24_unorm_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24x8_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24x8_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24x8_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z24x8_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_x8z24_unorm_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_x8z24_unorm_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_x8z24_unorm_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_x8z24_unorm_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_s8x24_uint_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_s8x24_uint_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_s8x24_uint_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_s8x24_uint_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_s8x24_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z32_float_s8x24_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_z16_unorm_s8_uint_unpack_z_float(float *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_s8_uint_pack_z_float(uint8_t *restrict dst_row, unsigned dst_stride, const float *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_s8_uint_unpack_z_32unorm(uint32_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_s8_uint_pack_z_32unorm(uint8_t *restrict dst_row, unsigned dst_stride, const uint32_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - - -void -util_format_z16_unorm_s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_x24s8_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_x24s8_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_s8x24_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_s8x24_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_x32_s8x24_uint_unpack_s_8uint(uint8_t *restrict dst_row, unsigned dst_stride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -void -util_format_x32_s8x24_uint_pack_s_8uint(uint8_t *restrict dst_row, unsigned dst_sride, const uint8_t *restrict src_row, unsigned src_stride, unsigned width, unsigned height); - -#ifdef __cplusplus -} -#endif - -#endif /* U_FORMAT_ZS_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_formats.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_formats.h deleted file mode 100644 index 45132e5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format/u_formats.h +++ /dev/null @@ -1,652 +0,0 @@ -/************************************************************************** - * - * Copyright 2007 VMware, Inc. - * Copyright (c) 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef U_FORMATS_H_ -#define U_FORMATS_H_ - -#include "../detect.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Formats for textures, surfaces and vertex data - */ -enum pipe_format { - PIPE_FORMAT_NONE, - /* Vertex formats must be first and must be <= 255. */ - PIPE_FORMAT_R64_UINT, /**< raw doubles (ARB_vertex_attrib_64bit) */ - PIPE_FORMAT_R64G64_UINT, - PIPE_FORMAT_R64G64B64_UINT, - PIPE_FORMAT_R64G64B64A64_UINT, - PIPE_FORMAT_R64_SINT, - PIPE_FORMAT_R64G64_SINT, - PIPE_FORMAT_R64G64B64_SINT, - PIPE_FORMAT_R64G64B64A64_SINT, - PIPE_FORMAT_R64_FLOAT, /**< doubles converted to float */ - PIPE_FORMAT_R64G64_FLOAT, - PIPE_FORMAT_R64G64B64_FLOAT, - PIPE_FORMAT_R64G64B64A64_FLOAT, - PIPE_FORMAT_R32_FLOAT, - PIPE_FORMAT_R32G32_FLOAT, - PIPE_FORMAT_R32G32B32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_R32_UNORM, - PIPE_FORMAT_R32G32_UNORM, - PIPE_FORMAT_R32G32B32_UNORM, - PIPE_FORMAT_R32G32B32A32_UNORM, - PIPE_FORMAT_R32_USCALED, - PIPE_FORMAT_R32G32_USCALED, - PIPE_FORMAT_R32G32B32_USCALED, - PIPE_FORMAT_R32G32B32A32_USCALED, - PIPE_FORMAT_R32_SNORM, - PIPE_FORMAT_R32G32_SNORM, - PIPE_FORMAT_R32G32B32_SNORM, - PIPE_FORMAT_R32G32B32A32_SNORM, - PIPE_FORMAT_R32_SSCALED, - PIPE_FORMAT_R32G32_SSCALED, - PIPE_FORMAT_R32G32B32_SSCALED, - PIPE_FORMAT_R32G32B32A32_SSCALED, - PIPE_FORMAT_R16_UNORM, - PIPE_FORMAT_R16G16_UNORM, - PIPE_FORMAT_R16G16B16_UNORM, - PIPE_FORMAT_R16G16B16A16_UNORM, - PIPE_FORMAT_R16_USCALED, - PIPE_FORMAT_R16G16_USCALED, - PIPE_FORMAT_R16G16B16_USCALED, - PIPE_FORMAT_R16G16B16A16_USCALED, - PIPE_FORMAT_R16_SNORM, - PIPE_FORMAT_R16G16_SNORM, - PIPE_FORMAT_R16G16B16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_R16_SSCALED, - PIPE_FORMAT_R16G16_SSCALED, - PIPE_FORMAT_R16G16B16_SSCALED, - PIPE_FORMAT_R16G16B16A16_SSCALED, - PIPE_FORMAT_R8_UNORM, - PIPE_FORMAT_R8G8_UNORM, - PIPE_FORMAT_R8G8B8_UNORM, - PIPE_FORMAT_B8G8R8_UNORM, - PIPE_FORMAT_R8G8B8A8_UNORM, - PIPE_FORMAT_B8G8R8A8_UNORM, - PIPE_FORMAT_R8_USCALED, - PIPE_FORMAT_R8G8_USCALED, - PIPE_FORMAT_R8G8B8_USCALED, - PIPE_FORMAT_B8G8R8_USCALED, - PIPE_FORMAT_R8G8B8A8_USCALED, - PIPE_FORMAT_B8G8R8A8_USCALED, - PIPE_FORMAT_A8B8G8R8_USCALED, - PIPE_FORMAT_R8_SNORM, - PIPE_FORMAT_R8G8_SNORM, - PIPE_FORMAT_R8G8B8_SNORM, - PIPE_FORMAT_B8G8R8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - PIPE_FORMAT_B8G8R8A8_SNORM, - PIPE_FORMAT_R8_SSCALED, - PIPE_FORMAT_R8G8_SSCALED, - PIPE_FORMAT_R8G8B8_SSCALED, - PIPE_FORMAT_B8G8R8_SSCALED, - PIPE_FORMAT_R8G8B8A8_SSCALED, - PIPE_FORMAT_B8G8R8A8_SSCALED, - PIPE_FORMAT_A8B8G8R8_SSCALED, - PIPE_FORMAT_A8R8G8B8_UNORM, - PIPE_FORMAT_R32_FIXED, - PIPE_FORMAT_R32G32_FIXED, - PIPE_FORMAT_R32G32B32_FIXED, - PIPE_FORMAT_R32G32B32A32_FIXED, - PIPE_FORMAT_R16_FLOAT, - PIPE_FORMAT_R16G16_FLOAT, - PIPE_FORMAT_R16G16B16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_R8_UINT, - PIPE_FORMAT_R8G8_UINT, - PIPE_FORMAT_R8G8B8_UINT, - PIPE_FORMAT_B8G8R8_UINT, - PIPE_FORMAT_R8G8B8A8_UINT, - PIPE_FORMAT_B8G8R8A8_UINT, - PIPE_FORMAT_R8_SINT, - PIPE_FORMAT_R8G8_SINT, - PIPE_FORMAT_R8G8B8_SINT, - PIPE_FORMAT_B8G8R8_SINT, - PIPE_FORMAT_R8G8B8A8_SINT, - PIPE_FORMAT_B8G8R8A8_SINT, - PIPE_FORMAT_R16_UINT, - PIPE_FORMAT_R16G16_UINT, - PIPE_FORMAT_R16G16B16_UINT, - PIPE_FORMAT_R16G16B16A16_UINT, - PIPE_FORMAT_R16_SINT, - PIPE_FORMAT_R16G16_SINT, - PIPE_FORMAT_R16G16B16_SINT, - PIPE_FORMAT_R16G16B16A16_SINT, - PIPE_FORMAT_R32_UINT, - PIPE_FORMAT_R32G32_UINT, - PIPE_FORMAT_R32G32B32_UINT, - PIPE_FORMAT_R32G32B32A32_UINT, - PIPE_FORMAT_R32_SINT, - PIPE_FORMAT_R32G32_SINT, - PIPE_FORMAT_R32G32B32_SINT, - PIPE_FORMAT_R32G32B32A32_SINT, - - PIPE_FORMAT_R10G10B10A2_UNORM, - PIPE_FORMAT_R10G10B10A2_SNORM, - PIPE_FORMAT_R10G10B10A2_USCALED, - PIPE_FORMAT_R10G10B10A2_SSCALED, - - PIPE_FORMAT_B10G10R10A2_UNORM, - PIPE_FORMAT_B10G10R10A2_SNORM, - PIPE_FORMAT_B10G10R10A2_USCALED, - PIPE_FORMAT_B10G10R10A2_SSCALED, - - PIPE_FORMAT_R11G11B10_FLOAT, - - PIPE_FORMAT_R10G10B10A2_UINT, - PIPE_FORMAT_R10G10B10A2_SINT, - - PIPE_FORMAT_B10G10R10A2_UINT, - PIPE_FORMAT_B10G10R10A2_SINT, - - /* End of vertex formats. */ - - /* Texture-only formats are below. */ - PIPE_FORMAT_B8G8R8X8_UNORM, - PIPE_FORMAT_X8B8G8R8_UNORM, - PIPE_FORMAT_X8R8G8B8_UNORM, - PIPE_FORMAT_B5G5R5A1_UNORM, - PIPE_FORMAT_R4G4B4A4_UNORM, - PIPE_FORMAT_B4G4R4A4_UNORM, - PIPE_FORMAT_R5G6B5_UNORM, - PIPE_FORMAT_B5G6R5_UNORM, - PIPE_FORMAT_L8_UNORM, /**< ubyte luminance */ - PIPE_FORMAT_A8_UNORM, /**< ubyte alpha */ - PIPE_FORMAT_I8_UNORM, /**< ubyte intensity */ - PIPE_FORMAT_L8A8_UNORM, /**< ubyte alpha, luminance */ - PIPE_FORMAT_L16_UNORM, /**< ushort luminance */ - PIPE_FORMAT_UYVY, - PIPE_FORMAT_YUYV, - PIPE_FORMAT_Z16_UNORM, - PIPE_FORMAT_Z16_UNORM_S8_UINT, - PIPE_FORMAT_Z32_UNORM, - PIPE_FORMAT_Z32_FLOAT, - PIPE_FORMAT_Z24_UNORM_S8_UINT, - PIPE_FORMAT_S8_UINT_Z24_UNORM, - PIPE_FORMAT_Z24X8_UNORM, - PIPE_FORMAT_X8Z24_UNORM, - PIPE_FORMAT_S8_UINT, /**< ubyte stencil */ - - /* sRGB formats */ - PIPE_FORMAT_L8_SRGB, - PIPE_FORMAT_R8_SRGB, - PIPE_FORMAT_L8A8_SRGB, - PIPE_FORMAT_R8G8_SRGB, - PIPE_FORMAT_R8G8B8_SRGB, - PIPE_FORMAT_B8G8R8_SRGB, - PIPE_FORMAT_A8B8G8R8_SRGB, - PIPE_FORMAT_X8B8G8R8_SRGB, - PIPE_FORMAT_B8G8R8A8_SRGB, - PIPE_FORMAT_B8G8R8X8_SRGB, - PIPE_FORMAT_A8R8G8B8_SRGB, - PIPE_FORMAT_X8R8G8B8_SRGB, - PIPE_FORMAT_R8G8B8A8_SRGB, - - /* compressed formats */ - PIPE_FORMAT_DXT1_RGB, - PIPE_FORMAT_DXT1_RGBA, - PIPE_FORMAT_DXT3_RGBA, - PIPE_FORMAT_DXT5_RGBA, - - /* sRGB, compressed */ - PIPE_FORMAT_DXT1_SRGB, - PIPE_FORMAT_DXT1_SRGBA, - PIPE_FORMAT_DXT3_SRGBA, - PIPE_FORMAT_DXT5_SRGBA, - - /* rgtc compressed */ - PIPE_FORMAT_RGTC1_UNORM, - PIPE_FORMAT_RGTC1_SNORM, - PIPE_FORMAT_RGTC2_UNORM, - PIPE_FORMAT_RGTC2_SNORM, - - PIPE_FORMAT_R8G8_B8G8_UNORM, - PIPE_FORMAT_G8R8_G8B8_UNORM, - - /* mixed formats */ - PIPE_FORMAT_R8SG8SB8UX8U_NORM, - PIPE_FORMAT_R5SG5SB6U_NORM, - - /* TODO: re-order these */ - PIPE_FORMAT_A8B8G8R8_UNORM, - PIPE_FORMAT_B5G5R5X1_UNORM, - PIPE_FORMAT_R9G9B9E5_FLOAT, - PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, - PIPE_FORMAT_R1_UNORM, - PIPE_FORMAT_R10G10B10X2_USCALED, - PIPE_FORMAT_R10G10B10X2_SNORM, - PIPE_FORMAT_L4A4_UNORM, - PIPE_FORMAT_A2R10G10B10_UNORM, - PIPE_FORMAT_A2B10G10R10_UNORM, - PIPE_FORMAT_R10SG10SB10SA2U_NORM, - PIPE_FORMAT_R8G8Bx_SNORM, - PIPE_FORMAT_R8G8B8X8_UNORM, - PIPE_FORMAT_B4G4R4X4_UNORM, - - /* some stencil samplers formats */ - PIPE_FORMAT_X24S8_UINT, - PIPE_FORMAT_S8X24_UINT, - PIPE_FORMAT_X32_S8X24_UINT, - - PIPE_FORMAT_R3G3B2_UNORM, - PIPE_FORMAT_B2G3R3_UNORM, - PIPE_FORMAT_L16A16_UNORM, - PIPE_FORMAT_A16_UNORM, - PIPE_FORMAT_I16_UNORM, - - PIPE_FORMAT_LATC1_UNORM, - PIPE_FORMAT_LATC1_SNORM, - PIPE_FORMAT_LATC2_UNORM, - PIPE_FORMAT_LATC2_SNORM, - - PIPE_FORMAT_A8_SNORM, - PIPE_FORMAT_L8_SNORM, - PIPE_FORMAT_L8A8_SNORM, - PIPE_FORMAT_I8_SNORM, - PIPE_FORMAT_A16_SNORM, - PIPE_FORMAT_L16_SNORM, - PIPE_FORMAT_L16A16_SNORM, - PIPE_FORMAT_I16_SNORM, - - PIPE_FORMAT_A16_FLOAT, - PIPE_FORMAT_L16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_I16_FLOAT, - PIPE_FORMAT_A32_FLOAT, - PIPE_FORMAT_L32_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_I32_FLOAT, - - PIPE_FORMAT_YV12, - PIPE_FORMAT_YV16, - PIPE_FORMAT_IYUV, /**< aka I420 */ - PIPE_FORMAT_NV12, - PIPE_FORMAT_NV21, - - PIPE_FORMAT_Y8_400_UNORM, - /* PIPE_FORMAT_Y8_U8_V8_420_UNORM = IYUV */ - /* PIPE_FORMAT_Y8_U8V8_420_UNORM = NV12 */ - PIPE_FORMAT_Y8_U8_V8_422_UNORM, - PIPE_FORMAT_Y8_U8V8_422_UNORM, - PIPE_FORMAT_Y8_U8_V8_444_UNORM, - - PIPE_FORMAT_Y16_U16_V16_420_UNORM, - /* PIPE_FORMAT_Y16_U16V16_420_UNORM */ - PIPE_FORMAT_Y16_U16_V16_422_UNORM, - PIPE_FORMAT_Y16_U16V16_422_UNORM, - PIPE_FORMAT_Y16_U16_V16_444_UNORM, - - PIPE_FORMAT_A4R4_UNORM, - PIPE_FORMAT_R4A4_UNORM, - PIPE_FORMAT_R8A8_UNORM, - PIPE_FORMAT_A8R8_UNORM, - - PIPE_FORMAT_A8_UINT, - PIPE_FORMAT_I8_UINT, - PIPE_FORMAT_L8_UINT, - PIPE_FORMAT_L8A8_UINT, - - PIPE_FORMAT_A8_SINT, - PIPE_FORMAT_I8_SINT, - PIPE_FORMAT_L8_SINT, - PIPE_FORMAT_L8A8_SINT, - - PIPE_FORMAT_A16_UINT, - PIPE_FORMAT_I16_UINT, - PIPE_FORMAT_L16_UINT, - PIPE_FORMAT_L16A16_UINT, - - PIPE_FORMAT_A16_SINT, - PIPE_FORMAT_I16_SINT, - PIPE_FORMAT_L16_SINT, - PIPE_FORMAT_L16A16_SINT, - - PIPE_FORMAT_A32_UINT, - PIPE_FORMAT_I32_UINT, - PIPE_FORMAT_L32_UINT, - PIPE_FORMAT_L32A32_UINT, - - PIPE_FORMAT_A32_SINT, - PIPE_FORMAT_I32_SINT, - PIPE_FORMAT_L32_SINT, - PIPE_FORMAT_L32A32_SINT, - - PIPE_FORMAT_A8R8G8B8_UINT, - PIPE_FORMAT_A8B8G8R8_UINT, - PIPE_FORMAT_A2R10G10B10_UINT, - PIPE_FORMAT_A2B10G10R10_UINT, - PIPE_FORMAT_R5G6B5_UINT, - PIPE_FORMAT_B5G6R5_UINT, - PIPE_FORMAT_R5G5B5A1_UINT, - PIPE_FORMAT_B5G5R5A1_UINT, - PIPE_FORMAT_A1R5G5B5_UINT, - PIPE_FORMAT_A1B5G5R5_UINT, - PIPE_FORMAT_R4G4B4A4_UINT, - PIPE_FORMAT_B4G4R4A4_UINT, - PIPE_FORMAT_A4R4G4B4_UINT, - PIPE_FORMAT_A4B4G4R4_UINT, - PIPE_FORMAT_R3G3B2_UINT, - PIPE_FORMAT_B2G3R3_UINT, - - PIPE_FORMAT_ETC1_RGB8, - - PIPE_FORMAT_R8G8_R8B8_UNORM, - PIPE_FORMAT_G8R8_B8R8_UNORM, - - PIPE_FORMAT_R8G8B8X8_SNORM, - PIPE_FORMAT_R8G8B8X8_SRGB, - PIPE_FORMAT_R8G8B8X8_UINT, - PIPE_FORMAT_R8G8B8X8_SINT, - PIPE_FORMAT_B10G10R10X2_UNORM, - PIPE_FORMAT_R16G16B16X16_UNORM, - PIPE_FORMAT_R16G16B16X16_SNORM, - PIPE_FORMAT_R16G16B16X16_FLOAT, - PIPE_FORMAT_R16G16B16X16_UINT, - PIPE_FORMAT_R16G16B16X16_SINT, - PIPE_FORMAT_R32G32B32X32_FLOAT, - PIPE_FORMAT_R32G32B32X32_UINT, - PIPE_FORMAT_R32G32B32X32_SINT, - - PIPE_FORMAT_R8A8_SNORM, - PIPE_FORMAT_R16A16_UNORM, - PIPE_FORMAT_R16A16_SNORM, - PIPE_FORMAT_R16A16_FLOAT, - PIPE_FORMAT_R32A32_FLOAT, - PIPE_FORMAT_R8A8_UINT, - PIPE_FORMAT_R8A8_SINT, - PIPE_FORMAT_R16A16_UINT, - PIPE_FORMAT_R16A16_SINT, - PIPE_FORMAT_R32A32_UINT, - PIPE_FORMAT_R32A32_SINT, - - PIPE_FORMAT_B5G6R5_SRGB, - - PIPE_FORMAT_BPTC_RGBA_UNORM, - PIPE_FORMAT_BPTC_SRGBA, - PIPE_FORMAT_BPTC_RGB_FLOAT, - PIPE_FORMAT_BPTC_RGB_UFLOAT, - - PIPE_FORMAT_G8R8_UNORM, - PIPE_FORMAT_G8R8_SNORM, - PIPE_FORMAT_G16R16_UNORM, - PIPE_FORMAT_G16R16_SNORM, - - PIPE_FORMAT_A8B8G8R8_SNORM, - PIPE_FORMAT_X8B8G8R8_SNORM, - - PIPE_FORMAT_ETC2_RGB8, - PIPE_FORMAT_ETC2_SRGB8, - PIPE_FORMAT_ETC2_RGB8A1, - PIPE_FORMAT_ETC2_SRGB8A1, - PIPE_FORMAT_ETC2_RGBA8, - PIPE_FORMAT_ETC2_SRGBA8, - PIPE_FORMAT_ETC2_R11_UNORM, - PIPE_FORMAT_ETC2_R11_SNORM, - PIPE_FORMAT_ETC2_RG11_UNORM, - PIPE_FORMAT_ETC2_RG11_SNORM, - - PIPE_FORMAT_ASTC_4x4, - PIPE_FORMAT_ASTC_5x4, - PIPE_FORMAT_ASTC_5x5, - PIPE_FORMAT_ASTC_6x5, - PIPE_FORMAT_ASTC_6x6, - PIPE_FORMAT_ASTC_8x5, - PIPE_FORMAT_ASTC_8x6, - PIPE_FORMAT_ASTC_8x8, - PIPE_FORMAT_ASTC_10x5, - PIPE_FORMAT_ASTC_10x6, - PIPE_FORMAT_ASTC_10x8, - PIPE_FORMAT_ASTC_10x10, - PIPE_FORMAT_ASTC_12x10, - PIPE_FORMAT_ASTC_12x12, - - PIPE_FORMAT_ASTC_4x4_SRGB, - PIPE_FORMAT_ASTC_5x4_SRGB, - PIPE_FORMAT_ASTC_5x5_SRGB, - PIPE_FORMAT_ASTC_6x5_SRGB, - PIPE_FORMAT_ASTC_6x6_SRGB, - PIPE_FORMAT_ASTC_8x5_SRGB, - PIPE_FORMAT_ASTC_8x6_SRGB, - PIPE_FORMAT_ASTC_8x8_SRGB, - PIPE_FORMAT_ASTC_10x5_SRGB, - PIPE_FORMAT_ASTC_10x6_SRGB, - PIPE_FORMAT_ASTC_10x8_SRGB, - PIPE_FORMAT_ASTC_10x10_SRGB, - PIPE_FORMAT_ASTC_12x10_SRGB, - PIPE_FORMAT_ASTC_12x12_SRGB, - - PIPE_FORMAT_ASTC_3x3x3, - PIPE_FORMAT_ASTC_4x3x3, - PIPE_FORMAT_ASTC_4x4x3, - PIPE_FORMAT_ASTC_4x4x4, - PIPE_FORMAT_ASTC_5x4x4, - PIPE_FORMAT_ASTC_5x5x4, - PIPE_FORMAT_ASTC_5x5x5, - PIPE_FORMAT_ASTC_6x5x5, - PIPE_FORMAT_ASTC_6x6x5, - PIPE_FORMAT_ASTC_6x6x6, - - PIPE_FORMAT_ASTC_3x3x3_SRGB, - PIPE_FORMAT_ASTC_4x3x3_SRGB, - PIPE_FORMAT_ASTC_4x4x3_SRGB, - PIPE_FORMAT_ASTC_4x4x4_SRGB, - PIPE_FORMAT_ASTC_5x4x4_SRGB, - PIPE_FORMAT_ASTC_5x5x4_SRGB, - PIPE_FORMAT_ASTC_5x5x5_SRGB, - PIPE_FORMAT_ASTC_6x5x5_SRGB, - PIPE_FORMAT_ASTC_6x6x5_SRGB, - PIPE_FORMAT_ASTC_6x6x6_SRGB, - - PIPE_FORMAT_FXT1_RGB, - PIPE_FORMAT_FXT1_RGBA, - - PIPE_FORMAT_P010, - PIPE_FORMAT_P012, - PIPE_FORMAT_P016, - PIPE_FORMAT_P030, - - PIPE_FORMAT_Y210, - PIPE_FORMAT_Y212, - PIPE_FORMAT_Y216, - - PIPE_FORMAT_Y410, - PIPE_FORMAT_Y412, - PIPE_FORMAT_Y416, - - PIPE_FORMAT_R10G10B10X2_UNORM, - PIPE_FORMAT_A1R5G5B5_UNORM, - PIPE_FORMAT_A1B5G5R5_UNORM, - PIPE_FORMAT_X1B5G5R5_UNORM, - PIPE_FORMAT_R5G5B5A1_UNORM, - PIPE_FORMAT_A4R4G4B4_UNORM, - PIPE_FORMAT_A4B4G4R4_UNORM, - - PIPE_FORMAT_G8R8_SINT, - PIPE_FORMAT_A8B8G8R8_SINT, - PIPE_FORMAT_X8B8G8R8_SINT, - - PIPE_FORMAT_ATC_RGB, - PIPE_FORMAT_ATC_RGBA_EXPLICIT, - PIPE_FORMAT_ATC_RGBA_INTERPOLATED, - - PIPE_FORMAT_Z24_UNORM_S8_UINT_AS_R8G8B8A8, - - PIPE_FORMAT_AYUV, - PIPE_FORMAT_XYUV, - - PIPE_FORMAT_R8_G8B8_420_UNORM, - PIPE_FORMAT_G8_B8R8_420_UNORM, - PIPE_FORMAT_G8_B8_R8_420_UNORM, - PIPE_FORMAT_Y8_UNORM, - - PIPE_FORMAT_B8G8R8X8_SNORM, - PIPE_FORMAT_B8G8R8X8_UINT, - PIPE_FORMAT_B8G8R8X8_SINT, - PIPE_FORMAT_A8R8G8B8_SNORM, - PIPE_FORMAT_A8R8G8B8_SINT, - PIPE_FORMAT_X8R8G8B8_SNORM, - PIPE_FORMAT_X8R8G8B8_SINT, - PIPE_FORMAT_R5G5B5X1_UNORM, - PIPE_FORMAT_X1R5G5B5_UNORM, - PIPE_FORMAT_R4G4B4X4_UNORM, - PIPE_FORMAT_B10G10R10X2_SNORM, - PIPE_FORMAT_R5G6B5_SRGB, - PIPE_FORMAT_R10G10B10X2_SINT, - PIPE_FORMAT_B10G10R10X2_SINT, - PIPE_FORMAT_G16R16_SINT, - - PIPE_FORMAT_COUNT -}; - -#if UTIL_ARCH_LITTLE_ENDIAN -#define PIPE_FORMAT_RGBA8888_UNORM PIPE_FORMAT_R8G8B8A8_UNORM -#define PIPE_FORMAT_RGBX8888_UNORM PIPE_FORMAT_R8G8B8X8_UNORM -#define PIPE_FORMAT_BGRA8888_UNORM PIPE_FORMAT_B8G8R8A8_UNORM -#define PIPE_FORMAT_BGRX8888_UNORM PIPE_FORMAT_B8G8R8X8_UNORM -#define PIPE_FORMAT_ARGB8888_UNORM PIPE_FORMAT_A8R8G8B8_UNORM -#define PIPE_FORMAT_XRGB8888_UNORM PIPE_FORMAT_X8R8G8B8_UNORM -#define PIPE_FORMAT_ABGR8888_UNORM PIPE_FORMAT_A8B8G8R8_UNORM -#define PIPE_FORMAT_XBGR8888_UNORM PIPE_FORMAT_X8B8G8R8_UNORM -#define PIPE_FORMAT_RGBA8888_SNORM PIPE_FORMAT_R8G8B8A8_SNORM -#define PIPE_FORMAT_RGBX8888_SNORM PIPE_FORMAT_R8G8B8X8_SNORM -#define PIPE_FORMAT_ABGR8888_SNORM PIPE_FORMAT_A8B8G8R8_SNORM -#define PIPE_FORMAT_XBGR8888_SNORM PIPE_FORMAT_X8B8G8R8_SNORM -#define PIPE_FORMAT_RGBA8888_SRGB PIPE_FORMAT_R8G8B8A8_SRGB -#define PIPE_FORMAT_RGBX8888_SRGB PIPE_FORMAT_R8G8B8X8_SRGB -#define PIPE_FORMAT_BGRA8888_SRGB PIPE_FORMAT_B8G8R8A8_SRGB -#define PIPE_FORMAT_BGRX8888_SRGB PIPE_FORMAT_B8G8R8X8_SRGB -#define PIPE_FORMAT_ARGB8888_SRGB PIPE_FORMAT_A8R8G8B8_SRGB -#define PIPE_FORMAT_XRGB8888_SRGB PIPE_FORMAT_X8R8G8B8_SRGB -#define PIPE_FORMAT_ABGR8888_SRGB PIPE_FORMAT_A8B8G8R8_SRGB -#define PIPE_FORMAT_XBGR8888_SRGB PIPE_FORMAT_X8B8G8R8_SRGB -#define PIPE_FORMAT_RGBA8888_USCALED PIPE_FORMAT_R8G8B8A8_USCALED -#define PIPE_FORMAT_RGBA8888_SSCALED PIPE_FORMAT_R8G8B8A8_SSCALED -#define PIPE_FORMAT_RGBA8888_UINT PIPE_FORMAT_R8G8B8A8_UINT -#define PIPE_FORMAT_BGRA8888_UINT PIPE_FORMAT_B8G8R8A8_UINT -#define PIPE_FORMAT_ARGB8888_UINT PIPE_FORMAT_A8R8G8B8_UINT -#define PIPE_FORMAT_ABGR8888_UINT PIPE_FORMAT_A8B8G8R8_UINT -#define PIPE_FORMAT_RGBA8888_SINT PIPE_FORMAT_R8G8B8A8_SINT -#define PIPE_FORMAT_RG88_UNORM PIPE_FORMAT_R8G8_UNORM -#define PIPE_FORMAT_GR88_UNORM PIPE_FORMAT_G8R8_UNORM -#define PIPE_FORMAT_RG88_SNORM PIPE_FORMAT_R8G8_SNORM -#define PIPE_FORMAT_GR88_SNORM PIPE_FORMAT_G8R8_SNORM -#define PIPE_FORMAT_RG1616_UNORM PIPE_FORMAT_R16G16_UNORM -#define PIPE_FORMAT_GR1616_UNORM PIPE_FORMAT_G16R16_UNORM -#define PIPE_FORMAT_RG1616_SNORM PIPE_FORMAT_R16G16_SNORM -#define PIPE_FORMAT_GR1616_SNORM PIPE_FORMAT_G16R16_SNORM -#elif UTIL_ARCH_BIG_ENDIAN -#define PIPE_FORMAT_ABGR8888_UNORM PIPE_FORMAT_R8G8B8A8_UNORM -#define PIPE_FORMAT_XBGR8888_UNORM PIPE_FORMAT_R8G8B8X8_UNORM -#define PIPE_FORMAT_ARGB8888_UNORM PIPE_FORMAT_B8G8R8A8_UNORM -#define PIPE_FORMAT_XRGB8888_UNORM PIPE_FORMAT_B8G8R8X8_UNORM -#define PIPE_FORMAT_BGRA8888_UNORM PIPE_FORMAT_A8R8G8B8_UNORM -#define PIPE_FORMAT_BGRX8888_UNORM PIPE_FORMAT_X8R8G8B8_UNORM -#define PIPE_FORMAT_RGBA8888_UNORM PIPE_FORMAT_A8B8G8R8_UNORM -#define PIPE_FORMAT_RGBX8888_UNORM PIPE_FORMAT_X8B8G8R8_UNORM -#define PIPE_FORMAT_ABGR8888_SNORM PIPE_FORMAT_R8G8B8A8_SNORM -#define PIPE_FORMAT_XBGR8888_SNORM PIPE_FORMAT_R8G8B8X8_SNORM -#define PIPE_FORMAT_RGBA8888_SNORM PIPE_FORMAT_A8B8G8R8_SNORM -#define PIPE_FORMAT_RGBX8888_SNORM PIPE_FORMAT_X8B8G8R8_SNORM -#define PIPE_FORMAT_ABGR8888_SRGB PIPE_FORMAT_R8G8B8A8_SRGB -#define PIPE_FORMAT_XBGR8888_SRGB PIPE_FORMAT_R8G8B8X8_SRGB -#define PIPE_FORMAT_ARGB8888_SRGB PIPE_FORMAT_B8G8R8A8_SRGB -#define PIPE_FORMAT_XRGB8888_SRGB PIPE_FORMAT_B8G8R8X8_SRGB -#define PIPE_FORMAT_BGRA8888_SRGB PIPE_FORMAT_A8R8G8B8_SRGB -#define PIPE_FORMAT_BGRX8888_SRGB PIPE_FORMAT_X8R8G8B8_SRGB -#define PIPE_FORMAT_RGBA8888_SRGB PIPE_FORMAT_A8B8G8R8_SRGB -#define PIPE_FORMAT_RGBX8888_SRGB PIPE_FORMAT_X8B8G8R8_SRGB -#define PIPE_FORMAT_RGBA8888_USCALED PIPE_FORMAT_A8B8G8R8_USCALED -#define PIPE_FORMAT_RGBA8888_SSCALED PIPE_FORMAT_A8B8G8R8_SSCALED -#define PIPE_FORMAT_RGBA8888_UINT PIPE_FORMAT_A8B8G8R8_UINT -#define PIPE_FORMAT_BGRA8888_UINT PIPE_FORMAT_A8R8G8B8_UINT -#define PIPE_FORMAT_ARGB8888_UINT PIPE_FORMAT_B8G8R8A8_UINT -#define PIPE_FORMAT_ABGR8888_UINT PIPE_FORMAT_R8G8B8A8_UINT -#define PIPE_FORMAT_RGBA8888_SINT PIPE_FORMAT_A8B8G8R8_SINT -#define PIPE_FORMAT_RG88_UNORM PIPE_FORMAT_G8R8_UNORM -#define PIPE_FORMAT_GR88_UNORM PIPE_FORMAT_R8G8_UNORM -#define PIPE_FORMAT_RG88_SNORM PIPE_FORMAT_G8R8_SNORM -#define PIPE_FORMAT_GR88_SNORM PIPE_FORMAT_R8G8_SNORM -#define PIPE_FORMAT_RG1616_UNORM PIPE_FORMAT_G16R16_UNORM -#define PIPE_FORMAT_GR1616_UNORM PIPE_FORMAT_R16G16_UNORM -#define PIPE_FORMAT_RG1616_SNORM PIPE_FORMAT_G16R16_SNORM -#define PIPE_FORMAT_GR1616_SNORM PIPE_FORMAT_R16G16_SNORM -#endif - -enum pipe_video_chroma_format -{ - PIPE_VIDEO_CHROMA_FORMAT_400, - PIPE_VIDEO_CHROMA_FORMAT_420, - PIPE_VIDEO_CHROMA_FORMAT_422, - PIPE_VIDEO_CHROMA_FORMAT_444, - PIPE_VIDEO_CHROMA_FORMAT_NONE -}; - -static inline enum pipe_video_chroma_format -pipe_format_to_chroma_format(enum pipe_format format) -{ - switch (format) { - case PIPE_FORMAT_NV12: - case PIPE_FORMAT_NV21: - case PIPE_FORMAT_YV12: - case PIPE_FORMAT_IYUV: - case PIPE_FORMAT_P010: - case PIPE_FORMAT_P012: - case PIPE_FORMAT_P016: - case PIPE_FORMAT_P030: - case PIPE_FORMAT_Y16_U16_V16_420_UNORM: - return PIPE_VIDEO_CHROMA_FORMAT_420; - case PIPE_FORMAT_UYVY: - case PIPE_FORMAT_YUYV: - case PIPE_FORMAT_YV16: - case PIPE_FORMAT_Y8_U8_V8_422_UNORM: - case PIPE_FORMAT_Y8_U8V8_422_UNORM: - case PIPE_FORMAT_Y16_U16_V16_422_UNORM: - case PIPE_FORMAT_Y16_U16V16_422_UNORM: - return PIPE_VIDEO_CHROMA_FORMAT_422; - case PIPE_FORMAT_Y8_U8_V8_444_UNORM: - case PIPE_FORMAT_Y16_U16_V16_444_UNORM: - return PIPE_VIDEO_CHROMA_FORMAT_444; - case PIPE_FORMAT_Y8_400_UNORM: - return PIPE_VIDEO_CHROMA_FORMAT_400; - default: - return PIPE_VIDEO_CHROMA_FORMAT_NONE; - } -} - -#ifdef __cplusplus -} -#endif - -#endif /* U_FORMATS_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_r11g11b10f.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_r11g11b10f.h deleted file mode 100644 index ec5abf9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_r11g11b10f.h +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (C) 2011 Marek Olšák - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* Based on code from The OpenGL Programming Guide / 7th Edition, Appendix J. - * Available here: http://www.opengl-redbook.com/appendices/ - * The algorithm in the book contains a bug though, which is fixed in the code - * below. - */ - -#ifndef FORMAT_R11G11B10F_H -#define FORMAT_R11G11B10F_H - -#include - -#define UF11(e, m) ((e << 6) | (m)) -#define UF11_EXPONENT_BIAS 15 -#define UF11_EXPONENT_BITS 0x1F -#define UF11_EXPONENT_SHIFT 6 -#define UF11_MANTISSA_BITS 0x3F -#define UF11_MANTISSA_SHIFT (23 - UF11_EXPONENT_SHIFT) -#define UF11_MAX_EXPONENT (UF11_EXPONENT_BITS << UF11_EXPONENT_SHIFT) - -#define UF10(e, m) ((e << 5) | (m)) -#define UF10_EXPONENT_BIAS 15 -#define UF10_EXPONENT_BITS 0x1F -#define UF10_EXPONENT_SHIFT 5 -#define UF10_MANTISSA_BITS 0x1F -#define UF10_MANTISSA_SHIFT (23 - UF10_EXPONENT_SHIFT) -#define UF10_MAX_EXPONENT (UF10_EXPONENT_BITS << UF10_EXPONENT_SHIFT) - -#define F32_INFINITY 0x7f800000 - -static inline uint32_t f32_to_uf11(float val) -{ - union { - float f; - uint32_t ui; - } f32 = {val}; - - uint16_t uf11 = 0; - - /* Decode little-endian 32-bit floating-point value */ - int sign = (f32.ui >> 16) & 0x8000; - /* Map exponent to the range [-127,128] */ - int exponent = ((f32.ui >> 23) & 0xff) - 127; - int mantissa = f32.ui & 0x007fffff; - - if (exponent == 128) { /* Infinity or NaN */ - /* From the GL_EXT_packed_float spec: - * - * "Additionally: negative infinity is converted to zero; positive - * infinity is converted to positive infinity; and both positive and - * negative NaN are converted to positive NaN." - */ - uf11 = UF11_MAX_EXPONENT; - if (mantissa) { - uf11 |= 1; /* NaN */ - } else { - if (sign) - uf11 = 0; /* 0.0 */ - } - } else if (sign) { - return 0; - } else if (val > 65024.0f) { - /* From the GL_EXT_packed_float spec: - * - * "Likewise, finite positive values greater than 65024 (the maximum - * finite representable unsigned 11-bit floating-point value) are - * converted to 65024." - */ - uf11 = UF11(30, 63); - } else if (exponent > -15) { /* Representable value */ - exponent += UF11_EXPONENT_BIAS; - mantissa >>= UF11_MANTISSA_SHIFT; - uf11 = exponent << UF11_EXPONENT_SHIFT | mantissa; - } - - return uf11; -} - -static inline float uf11_to_f32(uint16_t val) -{ - union { - float f; - uint32_t ui; - } f32; - - int exponent = (val & 0x07c0) >> UF11_EXPONENT_SHIFT; - int mantissa = (val & 0x003f); - - f32.f = 0.0; - - if (exponent == 0) { - if (mantissa != 0) { - const float scale = 1.0 / (1 << 20); - f32.f = scale * mantissa; - } - } else if (exponent == 31) { - f32.ui = F32_INFINITY | mantissa; - } else { - float scale, decimal; - exponent -= 15; - if (exponent < 0) { - scale = 1.0f / (1 << -exponent); - } else { - scale = (float) (1 << exponent); - } - decimal = 1.0f + (float) mantissa / 64; - f32.f = scale * decimal; - } - - return f32.f; -} - -static inline uint32_t f32_to_uf10(float val) -{ - union { - float f; - uint32_t ui; - } f32 = {val}; - - uint16_t uf10 = 0; - - /* Decode little-endian 32-bit floating-point value */ - int sign = (f32.ui >> 16) & 0x8000; - /* Map exponent to the range [-127,128] */ - int exponent = ((f32.ui >> 23) & 0xff) - 127; - int mantissa = f32.ui & 0x007fffff; - - if (exponent == 128) { - /* From the GL_EXT_packed_float spec: - * - * "Additionally: negative infinity is converted to zero; positive - * infinity is converted to positive infinity; and both positive and - * negative NaN are converted to positive NaN." - */ - uf10 = UF10_MAX_EXPONENT; - if (mantissa) { - uf10 |= 1; /* NaN */ - } else { - if (sign) - uf10 = 0; /* 0.0 */ - } - } else if (sign) { - return 0; - } else if (val > 64512.0f) { - /* From the GL_EXT_packed_float spec: - * - * "Likewise, finite positive values greater than 64512 (the maximum - * finite representable unsigned 10-bit floating-point value) are - * converted to 64512." - */ - uf10 = UF10(30, 31); - } else if (exponent > -15) { /* Representable value */ - exponent += UF10_EXPONENT_BIAS; - mantissa >>= UF10_MANTISSA_SHIFT; - uf10 = exponent << UF10_EXPONENT_SHIFT | mantissa; - } - - return uf10; -} - -static inline float uf10_to_f32(uint16_t val) -{ - union { - float f; - uint32_t ui; - } f32; - - int exponent = (val & 0x03e0) >> UF10_EXPONENT_SHIFT; - int mantissa = (val & 0x001f); - - f32.f = 0.0; - - if (exponent == 0) { - if (mantissa != 0) { - const float scale = 1.0 / (1 << 19); - f32.f = scale * mantissa; - } - } else if (exponent == 31) { - f32.ui = F32_INFINITY | mantissa; - } else { - float scale, decimal; - exponent -= 15; - if (exponent < 0) { - scale = 1.0f / (1 << -exponent); - } - else { - scale = (float) (1 << exponent); - } - decimal = 1.0f + (float) mantissa / 32; - f32.f = scale * decimal; - } - - return f32.f; -} - -static inline uint32_t float3_to_r11g11b10f(const float rgb[3]) -{ - return ( f32_to_uf11(rgb[0]) & 0x7ff) | - ((f32_to_uf11(rgb[1]) & 0x7ff) << 11) | - ((f32_to_uf10(rgb[2]) & 0x3ff) << 22); -} - -static inline void r11g11b10f_to_float3(uint32_t rgb, float retval[3]) -{ - retval[0] = uf11_to_f32( rgb & 0x7ff); - retval[1] = uf11_to_f32((rgb >> 11) & 0x7ff); - retval[2] = uf10_to_f32((rgb >> 22) & 0x3ff); -} - -#endif /* FORMAT_R11G11B10F_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_rgb9e5.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_rgb9e5.h deleted file mode 100644 index 51debd2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_rgb9e5.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2011 Marek Olšák - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* Copied from EXT_texture_shared_exponent and edited, getting rid of - * expensive float math bits too. */ - -#ifndef RGB9E5_H -#define RGB9E5_H - -#include -#include -#include - -#define RGB9E5_EXPONENT_BITS 5 -#define RGB9E5_MANTISSA_BITS 9 -#define RGB9E5_EXP_BIAS 15 -#define RGB9E5_MAX_VALID_BIASED_EXP 31 - -#define MAX_RGB9E5_EXP (RGB9E5_MAX_VALID_BIASED_EXP - RGB9E5_EXP_BIAS) -#define RGB9E5_MANTISSA_VALUES (1< 0x7f800000) - /* catches neg, NaNs */ - return 0; - else if (f.u >= max.u) - return max.u; - else - return f.u; -} - -static inline uint32_t float3_to_rgb9e5(const float rgb[3]) -{ - int rm, gm, bm, exp_shared; - uint32_t revdenom_biasedexp; - union { float f; uint32_t u; } rc, bc, gc, maxrgb, revdenom; - - rc.u = rgb9e5_ClampRange(rgb[0]); - gc.u = rgb9e5_ClampRange(rgb[1]); - bc.u = rgb9e5_ClampRange(rgb[2]); - maxrgb.u = MAX3(rc.u, gc.u, bc.u); - - /* - * Compared to what the spec suggests, instead of conditionally adjusting - * the exponent after the fact do it here by doing the equivalent of +0.5 - - * the int add will spill over into the exponent in this case. - */ - maxrgb.u += maxrgb.u & (1 << (23-9)); - exp_shared = MAX2((maxrgb.u >> 23), -RGB9E5_EXP_BIAS - 1 + 127) + - 1 + RGB9E5_EXP_BIAS - 127; - revdenom_biasedexp = 127 - (exp_shared - RGB9E5_EXP_BIAS - - RGB9E5_MANTISSA_BITS) + 1; - revdenom.u = revdenom_biasedexp << 23; - assert(exp_shared <= RGB9E5_MAX_VALID_BIASED_EXP); - - /* - * The spec uses strict round-up behavior (d3d10 disagrees, but in any case - * must match what is done above for figuring out exponent). - * We avoid the doubles ((int) rc * revdenom + 0.5) by doing the rounding - * ourselves (revdenom was adjusted by +1, above). - */ - rm = (int) (rc.f * revdenom.f); - gm = (int) (gc.f * revdenom.f); - bm = (int) (bc.f * revdenom.f); - rm = (rm & 1) + (rm >> 1); - gm = (gm & 1) + (gm >> 1); - bm = (bm & 1) + (bm >> 1); - - assert(rm <= MAX_RGB9E5_MANTISSA); - assert(gm <= MAX_RGB9E5_MANTISSA); - assert(bm <= MAX_RGB9E5_MANTISSA); - assert(rm >= 0); - assert(gm >= 0); - assert(bm >= 0); - - return (exp_shared << 27) | (bm << 18) | (gm << 9) | rm; -} - -static inline void rgb9e5_to_float3(uint32_t rgb, float retval[3]) -{ - int exponent; - union { float f; uint32_t u; } scale; - - exponent = (rgb >> 27) - RGB9E5_EXP_BIAS - RGB9E5_MANTISSA_BITS; - scale.u = (exponent + 127) << 23; - - retval[0] = ( rgb & 0x1ff) * scale.f; - retval[1] = ((rgb >> 9) & 0x1ff) * scale.f; - retval[2] = ((rgb >> 18) & 0x1ff) * scale.f; -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.c deleted file mode 100644 index f4e1a09..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.c +++ /dev/null @@ -1,178 +0,0 @@ -/* This file is autogenerated by u_format_srgb.py. Do not edit directly. */ - -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * SRGB translation. - * - * @author Brian Paul - * @author Michal Krol - * @author Jose Fonseca - */ - -#include "format_srgb.h" - -const float -util_format_srgb_8unorm_to_linear_float_table[256] = { - 0.0000000e+00f, 3.0352698e-04f, 6.0705397e-04f, 9.1058095e-04f, - 1.2141079e-03f, 1.5176349e-03f, 1.8211619e-03f, 2.1246889e-03f, - 2.4282159e-03f, 2.7317429e-03f, 3.0352698e-03f, 3.3465358e-03f, - 3.6765073e-03f, 4.0247170e-03f, 4.3914420e-03f, 4.7769535e-03f, - 5.1815167e-03f, 5.6053916e-03f, 6.0488330e-03f, 6.5120908e-03f, - 6.9954102e-03f, 7.4990320e-03f, 8.0231930e-03f, 8.5681256e-03f, - 9.1340587e-03f, 9.7212173e-03f, 1.0329823e-02f, 1.0960094e-02f, - 1.1612245e-02f, 1.2286488e-02f, 1.2983032e-02f, 1.3702083e-02f, - 1.4443844e-02f, 1.5208514e-02f, 1.5996293e-02f, 1.6807376e-02f, - 1.7641954e-02f, 1.8500220e-02f, 1.9382361e-02f, 2.0288563e-02f, - 2.1219010e-02f, 2.2173885e-02f, 2.3153366e-02f, 2.4157632e-02f, - 2.5186860e-02f, 2.6241222e-02f, 2.7320892e-02f, 2.8426040e-02f, - 2.9556834e-02f, 3.0713444e-02f, 3.1896033e-02f, 3.3104767e-02f, - 3.4339807e-02f, 3.5601315e-02f, 3.6889450e-02f, 3.8204372e-02f, - 3.9546235e-02f, 4.0915197e-02f, 4.2311411e-02f, 4.3735029e-02f, - 4.5186204e-02f, 4.6665086e-02f, 4.8171824e-02f, 4.9706566e-02f, - 5.1269458e-02f, 5.2860647e-02f, 5.4480276e-02f, 5.6128490e-02f, - 5.7805430e-02f, 5.9511238e-02f, 6.1246054e-02f, 6.3010018e-02f, - 6.4803267e-02f, 6.6625939e-02f, 6.8478170e-02f, 7.0360096e-02f, - 7.2271851e-02f, 7.4213568e-02f, 7.6185381e-02f, 7.8187422e-02f, - 8.0219820e-02f, 8.2282707e-02f, 8.4376212e-02f, 8.6500462e-02f, - 8.8655586e-02f, 9.0841711e-02f, 9.3058963e-02f, 9.5307467e-02f, - 9.7587347e-02f, 9.9898728e-02f, 1.0224173e-01f, 1.0461648e-01f, - 1.0702310e-01f, 1.0946171e-01f, 1.1193243e-01f, 1.1443537e-01f, - 1.1697067e-01f, 1.1953843e-01f, 1.2213877e-01f, 1.2477182e-01f, - 1.2743768e-01f, 1.3013648e-01f, 1.3286832e-01f, 1.3563333e-01f, - 1.3843162e-01f, 1.4126329e-01f, 1.4412847e-01f, 1.4702727e-01f, - 1.4995979e-01f, 1.5292615e-01f, 1.5592646e-01f, 1.5896084e-01f, - 1.6202938e-01f, 1.6513219e-01f, 1.6826940e-01f, 1.7144110e-01f, - 1.7464740e-01f, 1.7788842e-01f, 1.8116424e-01f, 1.8447499e-01f, - 1.8782077e-01f, 1.9120168e-01f, 1.9461783e-01f, 1.9806932e-01f, - 2.0155625e-01f, 2.0507874e-01f, 2.0863687e-01f, 2.1223076e-01f, - 2.1586050e-01f, 2.1952620e-01f, 2.2322796e-01f, 2.2696587e-01f, - 2.3074005e-01f, 2.3455058e-01f, 2.3839757e-01f, 2.4228112e-01f, - 2.4620133e-01f, 2.5015828e-01f, 2.5415209e-01f, 2.5818285e-01f, - 2.6225066e-01f, 2.6635560e-01f, 2.7049779e-01f, 2.7467731e-01f, - 2.7889426e-01f, 2.8314874e-01f, 2.8744084e-01f, 2.9177065e-01f, - 2.9613827e-01f, 3.0054379e-01f, 3.0498731e-01f, 3.0946892e-01f, - 3.1398871e-01f, 3.1854678e-01f, 3.2314321e-01f, 3.2777810e-01f, - 3.3245154e-01f, 3.3716362e-01f, 3.4191442e-01f, 3.4670406e-01f, - 3.5153260e-01f, 3.5640014e-01f, 3.6130678e-01f, 3.6625260e-01f, - 3.7123768e-01f, 3.7626212e-01f, 3.8132601e-01f, 3.8642943e-01f, - 3.9157248e-01f, 3.9675523e-01f, 4.0197778e-01f, 4.0724021e-01f, - 4.1254261e-01f, 4.1788507e-01f, 4.2326767e-01f, 4.2869050e-01f, - 4.3415364e-01f, 4.3965717e-01f, 4.4520119e-01f, 4.5078578e-01f, - 4.5641102e-01f, 4.6207700e-01f, 4.6778380e-01f, 4.7353150e-01f, - 4.7932018e-01f, 4.8514994e-01f, 4.9102085e-01f, 4.9693300e-01f, - 5.0288646e-01f, 5.0888132e-01f, 5.1491767e-01f, 5.2099557e-01f, - 5.2711513e-01f, 5.3327640e-01f, 5.3947949e-01f, 5.4572446e-01f, - 5.5201140e-01f, 5.5834039e-01f, 5.6471151e-01f, 5.7112483e-01f, - 5.7758044e-01f, 5.8407842e-01f, 5.9061884e-01f, 5.9720179e-01f, - 6.0382734e-01f, 6.1049557e-01f, 6.1720656e-01f, 6.2396039e-01f, - 6.3075714e-01f, 6.3759687e-01f, 6.4447968e-01f, 6.5140564e-01f, - 6.5837482e-01f, 6.6538730e-01f, 6.7244316e-01f, 6.7954247e-01f, - 6.8668531e-01f, 6.9387176e-01f, 7.0110189e-01f, 7.0837578e-01f, - 7.1569350e-01f, 7.2305513e-01f, 7.3046074e-01f, 7.3791041e-01f, - 7.4540421e-01f, 7.5294222e-01f, 7.6052450e-01f, 7.6815115e-01f, - 7.7582222e-01f, 7.8353779e-01f, 7.9129794e-01f, 7.9910274e-01f, - 8.0695226e-01f, 8.1484657e-01f, 8.2278575e-01f, 8.3076988e-01f, - 8.3879901e-01f, 8.4687323e-01f, 8.5499261e-01f, 8.6315721e-01f, - 8.7136712e-01f, 8.7962240e-01f, 8.8792312e-01f, 8.9626935e-01f, - 9.0466117e-01f, 9.1309865e-01f, 9.2158186e-01f, 9.3011086e-01f, - 9.3868573e-01f, 9.4730654e-01f, 9.5597335e-01f, 9.6468625e-01f, - 9.7344529e-01f, 9.8225055e-01f, 9.9110210e-01f, 1.0000000e+00f, -}; - -const uint8_t -util_format_srgb_to_linear_8unorm_table[256] = { - 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, - 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, - 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 18, 19, 19, 20, - 20, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, - 30, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 37, 38, 39, 40, 41, - 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, - 90, 91, 92, 93, 95, 96, 97, 99, 100, 101, 103, 104, 105, 107, 108, 109, - 111, 112, 114, 115, 116, 118, 119, 121, 122, 124, 125, 127, 128, 130, 131, 133, - 134, 136, 138, 139, 141, 142, 144, 146, 147, 149, 151, 152, 154, 156, 157, 159, - 161, 163, 164, 166, 168, 170, 171, 173, 175, 177, 179, 181, 183, 184, 186, 188, - 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, - 222, 224, 226, 229, 231, 233, 235, 237, 239, 242, 244, 246, 248, 250, 253, 255, -}; - -const uint8_t -util_format_linear_to_srgb_8unorm_table[256] = { - 0, 13, 22, 28, 34, 38, 42, 46, 50, 53, 56, 59, 61, 64, 66, 69, - 71, 73, 75, 77, 79, 81, 83, 85, 86, 88, 90, 92, 93, 95, 96, 98, - 99, 101, 102, 104, 105, 106, 108, 109, 110, 112, 113, 114, 115, 117, 118, 119, - 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 148, 149, 150, 151, - 152, 153, 154, 155, 155, 156, 157, 158, 159, 159, 160, 161, 162, 163, 163, 164, - 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 175, 176, - 177, 178, 178, 179, 180, 180, 181, 182, 182, 183, 184, 185, 185, 186, 187, 187, - 188, 189, 189, 190, 190, 191, 192, 192, 193, 194, 194, 195, 196, 196, 197, 197, - 198, 199, 199, 200, 200, 201, 202, 202, 203, 203, 204, 205, 205, 206, 206, 207, - 208, 208, 209, 209, 210, 210, 211, 212, 212, 213, 213, 214, 214, 215, 215, 216, - 216, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, - 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233, - 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, 240, - 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, 248, - 248, 249, 249, 250, 250, 251, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, -}; - -const unsigned -util_format_linear_to_srgb_helper_table[104] = { - 0x0073000d, 0x007a000d, 0x0080000d, 0x0087000d, - 0x008d000d, 0x0094000d, 0x009a000d, 0x00a1000d, - 0x00a7001a, 0x00b4001a, 0x00c1001a, 0x00ce001a, - 0x00da001a, 0x00e7001a, 0x00f4001a, 0x0101001a, - 0x010e0033, 0x01280033, 0x01410033, 0x015b0033, - 0x01750033, 0x018f0033, 0x01a80033, 0x01c20033, - 0x01dc0067, 0x020f0067, 0x02430067, 0x02760067, - 0x02aa0067, 0x02dd0067, 0x03110067, 0x03440067, - 0x037800ce, 0x03df00ce, 0x044600ce, 0x04ad00ce, - 0x051400ce, 0x057b00c5, 0x05dd00bc, 0x063b00b5, - 0x06970158, 0x07420142, 0x07e30130, 0x087b0120, - 0x090b0112, 0x09940106, 0x0a1700fc, 0x0a9500f2, - 0x0b0f01cb, 0x0bf401ae, 0x0ccb0195, 0x0d950180, - 0x0e56016e, 0x0f0d015e, 0x0fbc0150, 0x10630143, - 0x11070264, 0x1238023e, 0x1357021d, 0x14660201, - 0x156601e9, 0x165a01d3, 0x174401c0, 0x182401af, - 0x18fe0331, 0x1a9602fe, 0x1c1502d2, 0x1d7e02ad, - 0x1ed4028d, 0x201a0270, 0x21520256, 0x227d0240, - 0x239f0443, 0x25c003fe, 0x27bf03c4, 0x29a10392, - 0x2b6a0367, 0x2d1d0341, 0x2ebe031f, 0x304d0300, - 0x31d105b0, 0x34a80555, 0x37520507, 0x39d504c5, - 0x3c37048b, 0x3e7c0458, 0x40a8042a, 0x42bd0401, - 0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d, - 0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559, - 0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f, - 0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723, -}; - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.h deleted file mode 100644 index 5861b23..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.h +++ /dev/null @@ -1,162 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - -/** - * @file - * SRGB translation. - * - * @author Brian Paul - * @author Michal Krol - * @author Jose Fonseca - */ - -#ifndef U_FORMAT_SRGB_H_ -#define U_FORMAT_SRGB_H_ - -#include -#include - -extern const float -util_format_srgb_8unorm_to_linear_float_table[256]; - -extern const uint8_t -util_format_srgb_to_linear_8unorm_table[256]; - -extern const uint8_t -util_format_linear_to_srgb_8unorm_table[256]; - -extern const unsigned -util_format_linear_to_srgb_helper_table[104]; - - -static inline float -util_format_srgb_to_linear_float(float cs) -{ - if (cs <= 0.0f) - return 0.0f; - else if (cs <= 0.04045f) - return cs / 12.92f; - else if (cs < 1.0f) - return powf((cs + 0.055) / 1.055f, 2.4f); - else - return 1.0f; -} - - -static inline float -util_format_linear_to_srgb_float(float cl) -{ - if (cl <= 0.0f) - return 0.0f; - else if (cl < 0.0031308f) - return 12.92f * cl; - else if (cl < 1.0f) - return 1.055f * powf(cl, 0.41666f) - 0.055f; - else - return 1.0f; -} - - -/** - * Convert a unclamped linear float to srgb value in the [0,255]. - */ -static inline uint8_t -util_format_linear_float_to_srgb_8unorm(float x) -{ - /* - * This is taken from https://gist.github.com/rygorous/2203834 - * Use LUT and do linear interpolation. - */ - union { - uint32_t ui; - float f; - } almostone, minval, f; - unsigned tab, bias, scale, t; - - almostone.ui = 0x3f7fffff; - minval.ui = (127-13) << 23; - - /* - * Clamp to [2^(-13), 1-eps]; these two values map to 0 and 1, respectively. - * The tests are carefully written so that NaNs map to 0, same as in the - * reference implementation. - */ - if (!(x > minval.f)) - x = minval.f; - if (x > almostone.f) - x = almostone.f; - - /* Do the table lookup and unpack bias, scale */ - f.f = x; - tab = util_format_linear_to_srgb_helper_table[(f.ui - minval.ui) >> 20]; - bias = (tab >> 16) << 9; - scale = tab & 0xffff; - - /* Grab next-highest mantissa bits and perform linear interpolation */ - t = (f.ui >> 12) & 0xff; - return (uint8_t) ((bias + scale*t) >> 16); -} - - -/** - * Convert an 8-bit sRGB value from non-linear space to a - * linear RGB value in [0, 1]. - * Implemented with a 256-entry lookup table. - */ -static inline float -util_format_srgb_8unorm_to_linear_float(uint8_t x) -{ - return util_format_srgb_8unorm_to_linear_float_table[x]; -} - - -/* - * XXX These 2 functions probably don't make a lot of sense (but lots - * of potential callers which most likely all don't make sense neither) - */ - -/** - * Convert a 8bit normalized value from linear to srgb. - */ -static inline uint8_t -util_format_linear_to_srgb_8unorm(uint8_t x) -{ - return util_format_linear_to_srgb_8unorm_table[x]; -} - - -/** - * Convert a 8bit normalized value from srgb to linear. - */ -static inline uint8_t -util_format_srgb_to_linear_8unorm(uint8_t x) -{ - return util_format_srgb_to_linear_8unorm_table[x]; -} - - -#endif /* U_FORMAT_SRGB_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.py deleted file mode 100644 index f52455c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/format_srgb.py +++ /dev/null @@ -1,145 +0,0 @@ -CopyRight = ''' -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * SRGB translation. - * - * @author Brian Paul - * @author Michal Krol - * @author Jose Fonseca - */ -''' - - -import math -import struct - - -def srgb_to_linear(x): - if x <= 0.04045: - return x / 12.92 - else: - return math.pow((x + 0.055) / 1.055, 2.4) - - -def linear_to_srgb(x): - if x >= 0.0031308: - return 1.055 * math.pow(x, 0.41666666) - 0.055 - else: - return 12.92 * x - - -def generate_srgb_tables(): - print('const float') - print('util_format_srgb_8unorm_to_linear_float_table[256] = {') - for j in range(0, 256, 4): - print(' ', end=' ') - print(' '.join(['%.7ef,' % srgb_to_linear(i / 255.0) for i in range(j, j + 4)])) - print('};') - print() - print('const uint8_t') - print('util_format_srgb_to_linear_8unorm_table[256] = {') - for j in range(0, 256, 16): - print(' ', end=' ') - print(' '.join(['%3u,' % int(srgb_to_linear(i / 255.0) * 255.0 + 0.5) for i in range(j, j + 16)])) - print('};') - print() - print('const uint8_t') - print('util_format_linear_to_srgb_8unorm_table[256] = {') - for j in range(0, 256, 16): - print(' ', end=' ') - print(' '.join(['%3u,' % int(linear_to_srgb(i / 255.0) * 255.0 + 0.5) for i in range(j, j + 16)])) - print('};') - print() - -# calculate the table interpolation values used in float linear to unorm8 srgb - numexp = 13 - mantissa_msb = 3 -# stepshift is just used to only use every x-th float to make things faster, -# 5 is largest value which still gives exact same table as 0 - stepshift = 5 - nbuckets = numexp << mantissa_msb - bucketsize = (1 << (23 - mantissa_msb)) >> stepshift - mantshift = 12 - valtable = [] - sum_aa = float(bucketsize) - sum_ab = 0.0 - sum_bb = 0.0 - for i in range(0, bucketsize): - j = (i << stepshift) >> mantshift - sum_ab += j - sum_bb += j*j - inv_det = 1.0 / (sum_aa * sum_bb - sum_ab * sum_ab) - - for bucket in range(0, nbuckets): - start = ((127 - numexp) << 23) + bucket*(bucketsize << stepshift) - sum_a = 0.0 - sum_b = 0.0 - - for i in range(0, bucketsize): - j = (i << stepshift) >> mantshift - fint = start + (i << stepshift) - ffloat = struct.unpack('f', struct.pack('I', fint))[0] - val = linear_to_srgb(ffloat) * 255.0 + 0.5 - sum_a += val - sum_b += j*val - - solved_a = inv_det * (sum_bb*sum_a - sum_ab*sum_b) - solved_b = inv_det * (sum_aa*sum_b - sum_ab*sum_a) - - scaled_a = solved_a * 65536.0 / 512.0 - scaled_b = solved_b * 65536.0 - - int_a = int(scaled_a + 0.5) - int_b = int(scaled_b + 0.5) - - valtable.append((int_a << 16) + int_b) - - print('const unsigned') - print('util_format_linear_to_srgb_helper_table[104] = {') - - for j in range(0, nbuckets, 4): - print(' ', end=' ') - print(' '.join(['0x%08x,' % valtable[i] for i in range(j, j + 4)])) - print('};') - print() - -def main(): - print('/* This file is autogenerated by u_format_srgb.py. Do not edit directly. */') - print() - # This will print the copyright message on the top of this file - print(CopyRight.strip()) - print() - print('#include "format_srgb.h"') - print() - generate_srgb_tables() - - -if __name__ == '__main__': - main() diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fossilize_db.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fossilize_db.c deleted file mode 100644 index 17c6c89..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fossilize_db.c +++ /dev/null @@ -1,786 +0,0 @@ -/* - * Copyright © 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* This is a basic c implementation of a fossilize db like format intended for - * use with the Mesa shader cache. - * - * The format is compatible enough to allow the fossilize db tools to be used - * to do things like merge db collections. - */ - -#include "fossilize_db.h" - -#ifdef FOZ_DB_UTIL - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef FOZ_DB_UTIL_DYNAMIC_LIST -#include -#endif - -#include "u_debug.h" - -#include "crc32.h" -#include "hash_table.h" -#include "mesa-sha1.h" -#include "ralloc.h" - -#define FOZ_REF_MAGIC_SIZE 16 - -static const uint8_t stream_reference_magic_and_version[FOZ_REF_MAGIC_SIZE] = { - 0x81, 'F', 'O', 'S', - 'S', 'I', 'L', 'I', - 'Z', 'E', 'D', 'B', - 0, 0, 0, FOSSILIZE_FORMAT_VERSION, /* 4 bytes to use for versioning. */ -}; - -/* Mesa uses 160bit hashes to identify cache entries, a hash of this size - * makes collisions virtually impossible for our use case. However the foz db - * format uses a 64bit hash table to lookup file offsets for reading cache - * entries so we must shorten our hash. - */ -static uint64_t -truncate_hash_to_64bits(const uint8_t *cache_key) -{ - uint64_t hash = 0; - unsigned shift = 7; - for (unsigned i = 0; i < 8; i++) { - hash |= ((uint64_t)cache_key[i]) << shift * 8; - shift--; - } - return hash; -} - -static bool -check_files_opened_successfully(FILE *file, FILE *db_idx) -{ - if (!file) { - if (db_idx) - fclose(db_idx); - return false; - } - - if (!db_idx) { - if (file) - fclose(file); - return false; - } - - return true; -} - -static bool -create_foz_db_filenames(const char *cache_path, - char *name, - char **filename, - char **idx_filename) -{ - if (asprintf(filename, "%s/%s.foz", cache_path, name) == -1) - return false; - - if (asprintf(idx_filename, "%s/%s_idx.foz", cache_path, name) == -1) { - free(*filename); - return false; - } - - return true; -} - - -/* This looks at stuff that was added to the index since the last time we looked at it. This is safe - * to do without locking the file as we assume the file is append only */ -static void -update_foz_index(struct foz_db *foz_db, FILE *db_idx, unsigned file_idx) -{ - uint64_t offset = ftell(db_idx); - fseek(db_idx, 0, SEEK_END); - uint64_t len = ftell(db_idx); - uint64_t parsed_offset = offset; - - if (offset == len) - return; - - fseek(db_idx, offset, SEEK_SET); - while (offset < len) { - char bytes_to_read[FOSSILIZE_BLOB_HASH_LENGTH + sizeof(struct foz_payload_header)]; - struct foz_payload_header *header; - - /* Corrupt entry. Our process might have been killed before we - * could write all data. - */ - if (offset + sizeof(bytes_to_read) > len) - break; - - /* NAME + HEADER in one read */ - if (fread(bytes_to_read, 1, sizeof(bytes_to_read), db_idx) != - sizeof(bytes_to_read)) - break; - - offset += sizeof(bytes_to_read); - header = (struct foz_payload_header*)&bytes_to_read[FOSSILIZE_BLOB_HASH_LENGTH]; - - /* Corrupt entry. Our process might have been killed before we - * could write all data. - */ - if (offset + header->payload_size > len || - header->payload_size != sizeof(uint64_t)) - break; - - char hash_str[FOSSILIZE_BLOB_HASH_LENGTH + 1] = {0}; - memcpy(hash_str, bytes_to_read, FOSSILIZE_BLOB_HASH_LENGTH); - - /* read cache item offset from index file */ - uint64_t cache_offset; - if (fread(&cache_offset, 1, sizeof(cache_offset), db_idx) != - sizeof(cache_offset)) - break; - - offset += header->payload_size; - parsed_offset = offset; - - struct foz_db_entry *entry = ralloc(foz_db->mem_ctx, - struct foz_db_entry); - entry->header = *header; - entry->file_idx = file_idx; - _mesa_sha1_hex_to_sha1(entry->key, hash_str); - - /* Truncate the entry's hash string to a 64bit hash for use with a - * 64bit hash table for looking up file offsets. - */ - hash_str[16] = '\0'; - uint64_t key = strtoull(hash_str, NULL, 16); - - entry->offset = cache_offset; - - _mesa_hash_table_u64_insert(foz_db->index_db, key, entry); - } - - - fseek(db_idx, parsed_offset, SEEK_SET); -} - -/* exclusive flock with timeout. timeout is in nanoseconds */ -static int lock_file_with_timeout(FILE *f, int64_t timeout) -{ - int err; - int fd = fileno(f); - int64_t iterations = MAX2(DIV_ROUND_UP(timeout, 1000000), 1); - - /* Since there is no blocking flock with timeout and we don't want to totally spin on getting the - * lock, use a nonblocking method and retry every millisecond. */ - for (int64_t iter = 0; iter < iterations; ++iter) { - err = flock(fd, LOCK_EX | LOCK_NB); - if (err == 0 || errno != EAGAIN) - break; - usleep(1000); - } - return err; -} - -static bool -load_foz_dbs(struct foz_db *foz_db, FILE *db_idx, uint8_t file_idx, - bool read_only) -{ - /* Scan through the archive and get the list of cache entries. */ - fseek(db_idx, 0, SEEK_END); - size_t len = ftell(db_idx); - rewind(db_idx); - - /* Try not to take the lock if len >= the size of the header, but if it is smaller we take the - * lock to potentially initialize the files. */ - if (len < sizeof(stream_reference_magic_and_version)) { - /* Wait for 100 ms in case of contention, after that we prioritize getting the app started. */ - int err = lock_file_with_timeout(foz_db->file[file_idx], 100000000); - if (err == -1) - goto fail; - - /* Compute length again so we know nobody else did it in the meantime */ - fseek(db_idx, 0, SEEK_END); - len = ftell(db_idx); - rewind(db_idx); - } - - if (len != 0) { - uint8_t magic[FOZ_REF_MAGIC_SIZE]; - if (fread(magic, 1, FOZ_REF_MAGIC_SIZE, db_idx) != FOZ_REF_MAGIC_SIZE) - goto fail; - - if (memcmp(magic, stream_reference_magic_and_version, - FOZ_REF_MAGIC_SIZE - 1)) - goto fail; - - int version = magic[FOZ_REF_MAGIC_SIZE - 1]; - if (version > FOSSILIZE_FORMAT_VERSION || - version < FOSSILIZE_FORMAT_MIN_COMPAT_VERSION) - goto fail; - - } else { - /* Appending to a fresh file. Make sure we have the magic. */ - if (fwrite(stream_reference_magic_and_version, 1, - sizeof(stream_reference_magic_and_version), foz_db->file[file_idx]) != - sizeof(stream_reference_magic_and_version)) - goto fail; - - if (fwrite(stream_reference_magic_and_version, 1, - sizeof(stream_reference_magic_and_version), db_idx) != - sizeof(stream_reference_magic_and_version)) - goto fail; - - fflush(foz_db->file[file_idx]); - fflush(db_idx); - } - - flock(fileno(foz_db->file[file_idx]), LOCK_UN); - - if (foz_db->updater.thrd) { - /* If MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST is enabled, access to - * the foz_db hash table requires locking to prevent racing between this - * updated thread loading DBs at runtime and cache entry read/writes. */ - simple_mtx_lock(&foz_db->mtx); - update_foz_index(foz_db, db_idx, file_idx); - simple_mtx_unlock(&foz_db->mtx); - } else { - update_foz_index(foz_db, db_idx, file_idx); - } - - foz_db->alive = true; - return true; - -fail: - flock(fileno(foz_db->file[file_idx]), LOCK_UN); - return false; -} - -static void -load_foz_dbs_ro(struct foz_db *foz_db, char *foz_dbs_ro) -{ - uint8_t file_idx = 1; - char *filename = NULL; - char *idx_filename = NULL; - - for (unsigned n; n = strcspn(foz_dbs_ro, ","), *foz_dbs_ro; - foz_dbs_ro += MAX2(1, n)) { - char *foz_db_filename = strndup(foz_dbs_ro, n); - - filename = NULL; - idx_filename = NULL; - if (!create_foz_db_filenames(foz_db->cache_path, foz_db_filename, - &filename, &idx_filename)) { - free(foz_db_filename); - continue; /* Ignore invalid user provided filename and continue */ - } - free(foz_db_filename); - - /* Open files as read only */ - foz_db->file[file_idx] = fopen(filename, "rb"); - FILE *db_idx = fopen(idx_filename, "rb"); - - free(filename); - free(idx_filename); - - if (!check_files_opened_successfully(foz_db->file[file_idx], db_idx)) { - /* Prevent foz_destroy from destroying it a second time. */ - foz_db->file[file_idx] = NULL; - - continue; /* Ignore invalid user provided filename and continue */ - } - - if (!load_foz_dbs(foz_db, db_idx, file_idx, true)) { - fclose(db_idx); - fclose(foz_db->file[file_idx]); - foz_db->file[file_idx] = NULL; - - continue; /* Ignore invalid user provided foz db */ - } - - fclose(db_idx); - file_idx++; - - if (file_idx >= FOZ_MAX_DBS) - break; - } -} - -#ifdef FOZ_DB_UTIL_DYNAMIC_LIST -static bool -check_file_already_loaded(struct foz_db *foz_db, - FILE *db_file, - uint8_t max_file_idx) -{ - struct stat new_file_stat; - - if (fstat(fileno(db_file), &new_file_stat) == -1) - return false; - - for (int i = 0; i < max_file_idx; i++) { - struct stat loaded_file_stat; - - if (fstat(fileno(foz_db->file[i]), &loaded_file_stat) == -1) - continue; - - if ((loaded_file_stat.st_dev == new_file_stat.st_dev) && - (loaded_file_stat.st_ino == new_file_stat.st_ino)) - return true; - } - - return false; -} - -static bool -load_from_list_file(struct foz_db *foz_db, const char *foz_dbs_list_filename) -{ - uint8_t file_idx; - char list_entry[PATH_MAX]; - - /* Find the first empty file idx slot */ - for (file_idx = 0; file_idx < FOZ_MAX_DBS; file_idx++) { - if (!foz_db->file[file_idx]) - break; - } - - if (file_idx >= FOZ_MAX_DBS) - return false; - - FILE *foz_dbs_list_file = fopen(foz_dbs_list_filename, "rb"); - if (!foz_dbs_list_file) - return false; - - while (fgets(list_entry, sizeof(list_entry), foz_dbs_list_file)) { - char *db_filename = NULL; - char *idx_filename = NULL; - FILE *db_file = NULL; - FILE *idx_file = NULL; - - list_entry[strcspn(list_entry, "\n")] = '\0'; - - if (!create_foz_db_filenames(foz_db->cache_path, list_entry, - &db_filename, &idx_filename)) - continue; - - db_file = fopen(db_filename, "rb"); - idx_file = fopen(idx_filename, "rb"); - - free(db_filename); - free(idx_filename); - - if (!check_files_opened_successfully(db_file, idx_file)) - continue; - - if (check_file_already_loaded(foz_db, db_file, file_idx)) { - fclose(db_file); - fclose(idx_file); - - continue; - } - - /* Must be set before calling load_foz_dbs() */ - foz_db->file[file_idx] = db_file; - - if (!load_foz_dbs(foz_db, idx_file, file_idx, true)) { - fclose(db_file); - fclose(idx_file); - foz_db->file[file_idx] = NULL; - - continue; - } - - fclose(idx_file); - file_idx++; - - if (file_idx >= FOZ_MAX_DBS) - break; - } - - fclose(foz_dbs_list_file); - return true; -} - -static int -foz_dbs_list_updater_thrd(void *data) -{ - char buf[10 * (sizeof(struct inotify_event) + NAME_MAX + 1)]; - struct foz_db *foz_db = data; - struct foz_dbs_list_updater *updater = &foz_db->updater; - - while (1) { - int len = read(updater->inotify_fd, buf, sizeof(buf)); - - if (len == -1 && errno != EAGAIN) - return errno; - - int i = 0; - while (i < len) { - struct inotify_event *event = (struct inotify_event *)&buf[i]; - - i += sizeof(struct inotify_event) + event->len; - - if (event->mask & IN_CLOSE_WRITE) - load_from_list_file(foz_db, foz_db->updater.list_filename); - - /* List file deleted or watch removed by foz destroy */ - if ((event->mask & IN_DELETE_SELF) || (event->mask & IN_IGNORED)) - return 0; - } - } - - return 0; -} - -static bool -foz_dbs_list_updater_init(struct foz_db *foz_db, char *list_filename) -{ - struct foz_dbs_list_updater *updater = &foz_db->updater; - - /* Initial load */ - if (!load_from_list_file(foz_db, list_filename)) - return false; - - updater->list_filename = list_filename; - - int fd = inotify_init1(IN_CLOEXEC); - if (fd < 0) - return false; - - int wd = inotify_add_watch(fd, foz_db->updater.list_filename, - IN_CLOSE_WRITE | IN_DELETE_SELF); - if (wd < 0) { - close(fd); - return false; - } - - updater->inotify_fd = fd; - updater->inotify_wd = wd; - - if (thrd_create(&updater->thrd, foz_dbs_list_updater_thrd, foz_db)) { - inotify_rm_watch(fd, wd); - close(fd); - - return false; - } - - return true; -} -#endif - -/* Here we open mesa cache foz dbs files. If the files exist we load the index - * db into a hash table. The index db contains the offsets needed to later - * read cache entries from the foz db containing the actual cache entries. - */ -bool -foz_prepare(struct foz_db *foz_db, char *cache_path) -{ - char *filename = NULL; - char *idx_filename = NULL; - - simple_mtx_init(&foz_db->mtx, mtx_plain); - simple_mtx_init(&foz_db->flock_mtx, mtx_plain); - foz_db->mem_ctx = ralloc_context(NULL); - foz_db->index_db = _mesa_hash_table_u64_create(NULL); - foz_db->cache_path = cache_path; - - /* Open the default foz dbs for read/write. If the files didn't already exist - * create them. - */ - if (debug_get_bool_option("MESA_DISK_CACHE_SINGLE_FILE", false)) { - if (!create_foz_db_filenames(cache_path, "foz_cache", - &filename, &idx_filename)) - goto fail; - - foz_db->file[0] = fopen(filename, "a+b"); - foz_db->db_idx = fopen(idx_filename, "a+b"); - - free(filename); - free(idx_filename); - - if (!check_files_opened_successfully(foz_db->file[0], foz_db->db_idx)) - goto fail; - - if (!load_foz_dbs(foz_db, foz_db->db_idx, 0, false)) - goto fail; - } - - char *foz_dbs_ro = getenv("MESA_DISK_CACHE_READ_ONLY_FOZ_DBS"); - if (foz_dbs_ro) - load_foz_dbs_ro(foz_db, foz_dbs_ro); - -#ifdef FOZ_DB_UTIL_DYNAMIC_LIST - char *foz_dbs_list = - getenv("MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST"); - if (foz_dbs_list) - foz_dbs_list_updater_init(foz_db, foz_dbs_list); -#endif - - return true; - -fail: - foz_destroy(foz_db); - - return false; -} - -void -foz_destroy(struct foz_db *foz_db) -{ -#ifdef FOZ_DB_UTIL_DYNAMIC_LIST - struct foz_dbs_list_updater *updater = &foz_db->updater; - if (updater->thrd) { - inotify_rm_watch(updater->inotify_fd, updater->inotify_wd); - /* inotify_rm_watch() triggers the IN_IGNORE event for the thread - * to exit. - */ - thrd_join(updater->thrd, NULL); - close(updater->inotify_fd); - } -#endif - - if (foz_db->db_idx) - fclose(foz_db->db_idx); - for (unsigned i = 0; i < FOZ_MAX_DBS; i++) { - if (foz_db->file[i]) - fclose(foz_db->file[i]); - } - - if (foz_db->mem_ctx) { - _mesa_hash_table_u64_destroy(foz_db->index_db); - ralloc_free(foz_db->mem_ctx); - simple_mtx_destroy(&foz_db->flock_mtx); - simple_mtx_destroy(&foz_db->mtx); - } - - memset(foz_db, 0, sizeof(*foz_db)); -} - -/* Here we lookup a cache entry in the index hash table. If an entry is found - * we use the retrieved offset to read the cache entry from disk. - */ -void * -foz_read_entry(struct foz_db *foz_db, const uint8_t *cache_key_160bit, - size_t *size) -{ - uint64_t hash = truncate_hash_to_64bits(cache_key_160bit); - - void *data = NULL; - - if (!foz_db->alive) - return NULL; - - simple_mtx_lock(&foz_db->mtx); - - struct foz_db_entry *entry = - _mesa_hash_table_u64_search(foz_db->index_db, hash); - if (!entry && foz_db->db_idx) { - update_foz_index(foz_db, foz_db->db_idx, 0); - entry = _mesa_hash_table_u64_search(foz_db->index_db, hash); - } - if (!entry) { - simple_mtx_unlock(&foz_db->mtx); - return NULL; - } - - uint8_t file_idx = entry->file_idx; - if (fseek(foz_db->file[file_idx], entry->offset, SEEK_SET) < 0) - goto fail; - - uint32_t header_size = sizeof(struct foz_payload_header); - if (fread(&entry->header, 1, header_size, foz_db->file[file_idx]) != - header_size) - goto fail; - - /* Check for collision using full 160bit hash for increased assurance - * against potential collisions. - */ - for (int i = 0; i < 20; i++) { - if (cache_key_160bit[i] != entry->key[i]) - goto fail; - } - - uint32_t data_sz = entry->header.payload_size; - data = malloc(data_sz); - if (fread(data, 1, data_sz, foz_db->file[file_idx]) != data_sz) - goto fail; - - /* verify checksum */ - if (entry->header.crc != 0) { - if (util_hash_crc32(data, data_sz) != entry->header.crc) - goto fail; - } - - simple_mtx_unlock(&foz_db->mtx); - - if (size) - *size = data_sz; - - return data; - -fail: - free(data); - - /* reading db entry failed. reset the file offset */ - simple_mtx_unlock(&foz_db->mtx); - - return NULL; -} - -/* Here we write the cache entry to disk and store its offset in the index db. - */ -bool -foz_write_entry(struct foz_db *foz_db, const uint8_t *cache_key_160bit, - const void *blob, size_t blob_size) -{ - uint64_t hash = truncate_hash_to_64bits(cache_key_160bit); - - if (!foz_db->alive || !foz_db->file[0]) - return false; - - /* The flock is per-fd, not per thread, we do it outside of the main mutex to avoid having to - * wait in the mutex potentially blocking reads. We use the secondary flock_mtx to stop race - * conditions between the write threads sharing the same file descriptor. */ - simple_mtx_lock(&foz_db->flock_mtx); - - /* Wait for 1 second. This is done outside of the main mutex as I believe there is more potential - * for file contention than mtx contention of significant length. */ - int err = lock_file_with_timeout(foz_db->file[0], 1000000000); - if (err == -1) - goto fail_file; - - simple_mtx_lock(&foz_db->mtx); - - update_foz_index(foz_db, foz_db->db_idx, 0); - - struct foz_db_entry *entry = - _mesa_hash_table_u64_search(foz_db->index_db, hash); - if (entry) { - simple_mtx_unlock(&foz_db->mtx); - flock(fileno(foz_db->file[0]), LOCK_UN); - simple_mtx_unlock(&foz_db->flock_mtx); - return NULL; - } - - /* Prepare db entry header and blob ready for writing */ - struct foz_payload_header header; - header.uncompressed_size = blob_size; - header.format = FOSSILIZE_COMPRESSION_NONE; - header.payload_size = blob_size; - header.crc = util_hash_crc32(blob, blob_size); - - fseek(foz_db->file[0], 0, SEEK_END); - - /* Write hash header to db */ - char hash_str[FOSSILIZE_BLOB_HASH_LENGTH + 1]; /* 40 digits + null */ - _mesa_sha1_format(hash_str, cache_key_160bit); - if (fwrite(hash_str, 1, FOSSILIZE_BLOB_HASH_LENGTH, foz_db->file[0]) != - FOSSILIZE_BLOB_HASH_LENGTH) - goto fail; - - off_t offset = ftell(foz_db->file[0]); - - /* Write db entry header */ - if (fwrite(&header, 1, sizeof(header), foz_db->file[0]) != sizeof(header)) - goto fail; - - /* Now write the db entry blob */ - if (fwrite(blob, 1, blob_size, foz_db->file[0]) != blob_size) - goto fail; - - /* Flush everything to file to reduce chance of cache corruption */ - fflush(foz_db->file[0]); - - /* Write hash header to index db */ - if (fwrite(hash_str, 1, FOSSILIZE_BLOB_HASH_LENGTH, foz_db->db_idx) != - FOSSILIZE_BLOB_HASH_LENGTH) - goto fail; - - header.uncompressed_size = sizeof(uint64_t); - header.format = FOSSILIZE_COMPRESSION_NONE; - header.payload_size = sizeof(uint64_t); - header.crc = 0; - - if (fwrite(&header, 1, sizeof(header), foz_db->db_idx) != - sizeof(header)) - goto fail; - - if (fwrite(&offset, 1, sizeof(uint64_t), foz_db->db_idx) != - sizeof(uint64_t)) - goto fail; - - /* Flush everything to file to reduce chance of cache corruption */ - fflush(foz_db->db_idx); - - entry = ralloc(foz_db->mem_ctx, struct foz_db_entry); - entry->header = header; - entry->offset = offset; - entry->file_idx = 0; - _mesa_sha1_hex_to_sha1(entry->key, hash_str); - _mesa_hash_table_u64_insert(foz_db->index_db, hash, entry); - - simple_mtx_unlock(&foz_db->mtx); - flock(fileno(foz_db->file[0]), LOCK_UN); - simple_mtx_unlock(&foz_db->flock_mtx); - - return true; - -fail: - simple_mtx_unlock(&foz_db->mtx); -fail_file: - flock(fileno(foz_db->file[0]), LOCK_UN); - simple_mtx_unlock(&foz_db->flock_mtx); - return false; -} -#else - -bool -foz_prepare(struct foz_db *foz_db, char *filename) -{ - fprintf(stderr, "Warning: Mesa single file cache selected but Mesa wasn't " - "built with single cache file support. Shader cache will be disabled" - "!\n"); - return false; -} - -void -foz_destroy(struct foz_db *foz_db) -{ -} - -void * -foz_read_entry(struct foz_db *foz_db, const uint8_t *cache_key_160bit, - size_t *size) -{ - return false; -} - -bool -foz_write_entry(struct foz_db *foz_db, const uint8_t *cache_key_160bit, - const void *blob, size_t size) -{ - return false; -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fossilize_db.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fossilize_db.h deleted file mode 100644 index 5ecdb2c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/fossilize_db.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2020 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* This is a basic c implementation of a fossilize db like format intended for - * use with the Mesa shader cache. - * - * The format is compatible enough to allow the fossilize db tools to be used - * to do things like merge db collections, but unlike fossilize db which uses - * a zlib implementation for compression of data entries, we use zstd for - * compression. - */ - -#ifndef FOSSILIZE_DB_H -#define FOSSILIZE_DB_H - -#ifdef HAVE_FLOCK -#define FOZ_DB_UTIL 1 -#endif - -#ifdef HAVE_SYS_INOTIFY_H -#define FOZ_DB_UTIL_DYNAMIC_LIST 1 -#endif - -#include -#include -#include - -#include "simple_mtx.h" - -/* Max number of DBs our implementation can read from at once */ -#define FOZ_MAX_DBS 9 /* Default DB + 8 Read only DBs */ - -#define FOSSILIZE_BLOB_HASH_LENGTH 40 - -enum { - FOSSILIZE_COMPRESSION_NONE = 1, - FOSSILIZE_COMPRESSION_DEFLATE = 2 -}; - -enum { - FOSSILIZE_FORMAT_VERSION = 6, - FOSSILIZE_FORMAT_MIN_COMPAT_VERSION = 5 -}; - -struct foz_payload_header { - uint32_t payload_size; - uint32_t format; - uint32_t crc; - uint32_t uncompressed_size; -}; - -struct foz_db_entry { - uint8_t file_idx; - uint8_t key[20]; - uint64_t offset; - struct foz_payload_header header; -}; - -struct foz_dbs_list_updater { - int inotify_fd; - int inotify_wd; /* watch descriptor */ - const char *list_filename; - thrd_t thrd; -}; - -struct foz_db { - FILE *file[FOZ_MAX_DBS]; /* An array of all foz dbs */ - FILE *db_idx; /* The default writable foz db idx */ - simple_mtx_t mtx; /* Mutex for file/hash table read/writes */ - simple_mtx_t flock_mtx; /* Mutex for flocking the file for writes */ - void *mem_ctx; - struct hash_table_u64 *index_db; /* Hash table of all foz db entries */ - bool alive; - const char *cache_path; - struct foz_dbs_list_updater updater; -}; - -bool -foz_prepare(struct foz_db *foz_db, char *cache_path); - -void -foz_destroy(struct foz_db *foz_db); - -void * -foz_read_entry(struct foz_db *foz_db, const uint8_t *cache_key_160bit, - size_t *size); - -bool -foz_write_entry(struct foz_db *foz_db, const uint8_t *cache_key_160bit, - const void *blob, size_t size); - -#endif /* FOSSILIZE_DB_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/futex.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/futex.c deleted file mode 100644 index 7aebc8f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/futex.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright © 2015 Intel - * Copyright © 2022 Yonggang Luo - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "futex.h" - -#if UTIL_FUTEX_SUPPORTED - -#if defined(HAVE_LINUX_FUTEX_H) - -#include -#include -#include -#include -#include - -#ifndef SYS_futex -#define SYS_futex SYS_futex_time64 -#endif - -static inline long sys_futex(void *addr1, int op, int val1, const struct timespec *timeout, void *addr2, int val3) -{ - return syscall(SYS_futex, addr1, op, val1, timeout, addr2, val3); -} - -int futex_wake(uint32_t *addr, int count) -{ - return sys_futex(addr, FUTEX_WAKE, count, NULL, NULL, 0); -} - -int futex_wait(uint32_t *addr, int32_t value, const struct timespec *timeout) -{ - /* FUTEX_WAIT_BITSET with FUTEX_BITSET_MATCH_ANY is equivalent to - * FUTEX_WAIT, except that it treats the timeout as absolute. */ - return sys_futex(addr, FUTEX_WAIT_BITSET, value, timeout, NULL, - FUTEX_BITSET_MATCH_ANY); -} - -#elif defined(__FreeBSD__) - -#include -#include -#include -#include -#include - -int futex_wake(uint32_t *addr, int count) -{ - assert(count == (int)(uint32_t)count); /* Check that bits weren't discarded */ - return _umtx_op(addr, UMTX_OP_WAKE, (uint32_t)count, NULL, NULL) == -1 ? errno : 0; -} - -int futex_wait(uint32_t *addr, int32_t value, const struct timespec *timeout) -{ - void *uaddr = NULL, *uaddr2 = NULL; - struct _umtx_time tmo = { - ._flags = UMTX_ABSTIME, - ._clockid = CLOCK_MONOTONIC - }; - - assert(value == (int)(uint32_t)value); /* Check that bits weren't discarded */ - - if (timeout != NULL) { - tmo._timeout = *timeout; - uaddr = (void *)(uintptr_t)sizeof(tmo); - uaddr2 = (void *)&tmo; - } - - return _umtx_op(addr, UMTX_OP_WAIT_UINT, (uint32_t)value, uaddr, uaddr2) == -1 ? errno : 0; -} - -#elif defined(__OpenBSD__) - -#include -#include - -int futex_wake(uint32_t *addr, int count) -{ - return futex(addr, FUTEX_WAKE, count, NULL, NULL); -} - -int futex_wait(uint32_t *addr, int32_t value, const struct timespec *timeout) -{ - struct timespec tsnow, tsrel; - - if (timeout == NULL) - return futex(addr, FUTEX_WAIT, value, NULL, NULL); - - clock_gettime(CLOCK_MONOTONIC, &tsnow); - if (timespeccmp(&tsnow, timeout, <)) - timespecsub(timeout, &tsnow, &tsrel); - else - timespecclear(&tsrel); - return futex(addr, FUTEX_WAIT, value, &tsrel, NULL); -} - -#elif defined(_WIN32) && !defined(WINDOWS_NO_FUTEX) - -#include -#include -#include -#include -#include - -int futex_wake(uint32_t *addr, int count) -{ - /* All current callers fall into one of these buckets, and we'll get the semantics - * wrong if someone tries to be more clever. - */ - assert(count == 1 || count == INT32_MAX); - if (count == 1) - WakeByAddressSingle(addr); - else - WakeByAddressAll(addr); - return count; -} - -int futex_wait(uint32_t *addr, int32_t value, const struct timespec *timeout) -{ - DWORD timeout_ms = INFINITE; - if (timeout != NULL) { - struct timespec tsnow; - timespec_get(&tsnow, TIME_UTC); - - timeout_ms = (timeout->tv_sec - tsnow.tv_nsec) * 1000 + - (timeout->tv_nsec - tsnow.tv_nsec) / 1000000; - } - - if (WaitOnAddress(addr, &value, sizeof(value), timeout_ms)) - return 0; - return GetLastError() == ERROR_TIMEOUT ? ETIMEDOUT : -1; -} - -#else -#error UTIL_FUTEX_SUPPORTED is not implemented but the header told it is supported on this platform -#endif - -#endif /* UTIL_FUTEX_SUPPORTED */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/futex.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/futex.h deleted file mode 100644 index c397507..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/futex.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright © 2015 Intel - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef UTIL_FUTEX_H -#define UTIL_FUTEX_H - -#if defined(HAVE_LINUX_FUTEX_H) -#define UTIL_FUTEX_SUPPORTED 1 -#elif defined(__FreeBSD__) -#define UTIL_FUTEX_SUPPORTED 1 -#elif defined(__OpenBSD__) -#define UTIL_FUTEX_SUPPORTED 1 -#elif defined(_WIN32) && !defined(WINDOWS_NO_FUTEX) -#define UTIL_FUTEX_SUPPORTED 1 -#else -#define UTIL_FUTEX_SUPPORTED 0 -#endif - -#if UTIL_FUTEX_SUPPORTED -#include -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if UTIL_FUTEX_SUPPORTED -int futex_wake(uint32_t *addr, int count); -int futex_wait(uint32_t *addr, int32_t value, const struct timespec *timeout); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* UTIL_FUTEX_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/glheader.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/glheader.h deleted file mode 100644 index 09a583b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/glheader.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. - * Copyright (C) 2022 Yongang Luo 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 glheader.h - * Wrapper for GL/gl*.h and GLES[3|2|]/gl*.h - */ - - -#ifndef GLHEADER_H -#define GLHEADER_H - - -#define GL_GLEXT_PROTOTYPES -#if defined(_WIN32) && !defined(__CYGWIN__) -/* Prevent glheader.h from including by defining APIENTRY */ -#pragma push_macro("APIENTRY") -#ifndef APIENTRY -#define APIENTRY GLAPIENTRY -#endif -#include "../../include/GL/gl.h" -#include "../../include/GL/glext.h" -#pragma pop_macro("APIENTRY") -#else /* !(defined(_WIN32) && !defined(__CYGWIN__)) */ -#include "../../include/GL/gl.h" -#include "../../include/GL/glext.h" -#endif /* defined(_WIN32) && !defined(__CYGWIN__) */ - -/** - * Define GL_API, GL_APICALL and GL_APIENTRY to avoid MSVC/MinGW warnings - * about different dllimport attributes for prototypes between - * GL/gl*.h and GLES[|3|2]/gl*.h - */ -#define GL_API GLAPI -#define GL_APICALL GLAPI -#define GL_APIENTRY GLAPIENTRY - -/** - * The order for including GLES[|3|2]/gl*.h headers are from newest to oldest. - * As the newer header contains extra symbols that are not present in the - * older header, some extra symbols can be visible only when you include the - * newer header first; otherwise, if the older header is included first, some - * extra symbols will be hidden by the older header. - * For example, suppose we move the inclusion of GLES/gl*.h to the front, - * then GL_SAMPLER_EXTERNAL_OES will not be present and cause compiling error. - */ - - -//#include "GLES3/gl3.h" -//#include "GLES3/gl31.h" -//#include "GLES3/gl32.h" -//#include "GLES3/gl3ext.h" -//#include "../../include/GLES2/gl2.h" -#include "../../include/GLES2/gl2ext.h" -#include "../../include/GL/gl.h" -#include "../../include/GL/glext.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Custom Mesa types to save space. */ -typedef unsigned char GLenum8; /* only for primitive modes */ -typedef unsigned short GLenum16; -typedef unsigned char GLbitfield8; -typedef unsigned short GLbitfield16; -typedef GLuint64 GLbitfield64; - -/* There is no formal spec for the following extension. */ -#ifndef GL_ATI_texture_compression_3dc -#define GL_ATI_texture_compression_3dc 1 -#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 -#endif - -/** - * Internal token to represent a GLSL shader program (a collection of - * one or more shaders that get linked together). Note that GLSL - * shaders and shader programs share one name space (one hash table) - * so we need a value that's different from any of the - * GL_VERTEX/FRAGMENT/GEOMETRY_PROGRAM tokens. - */ -#define GL_SHADER_PROGRAM_MESA 0x9999 - -#ifdef __cplusplus -} -#endif - -#endif /* GLHEADER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/glsl2spirv.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/glsl2spirv.py deleted file mode 100644 index 4df5abd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/glsl2spirv.py +++ /dev/null @@ -1,196 +0,0 @@ -# Copyright © 2022 Intel Corporation -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. - -# Converts GLSL shader to SPIR-V library - -import argparse -import subprocess -import sys -import os -import typing as T - -if T.TYPE_CHECKING: - class Arguments(T.Protocol): - input: str - output: str - glslang: str - create_entry: T.Optional[str] - glsl_ver: T.Optional[str] - Olib: bool - extra: T.Optional[str] - vn: str - stage: str - - -def get_args() -> 'Arguments': - parser = argparse.ArgumentParser() - parser.add_argument('input', help="Name of input file.") - parser.add_argument('output', help="Name of output file.") - parser.add_argument('glslang', help="path to glslangValidator") - - parser.add_argument("--create-entry", - dest="create_entry", - help="Create a new entry point and put to the end of a file.") - - parser.add_argument('--glsl-version', - dest="glsl_ver", - choices=['100', '110', '120', '130', '140', '150', '300es', '310es', '330', '400', '410', '420', '430', '440', '450', '460'], - help="Override GLSL #version declaration in source.") - - parser.add_argument("-Olib", - action='store_true', - help="Any optimizations are disabled and unused functions are saved.") - - parser.add_argument("--extra-flags", - dest="extra", - help="Pass additional flags to glslangValidator.") - - parser.add_argument("--vn", - dest="vn", - required=True, - help="Variable name. Creates a C header file that contains a uint32_t array.") - - parser.add_argument("--stage", - default="vert", - choices=['vert', 'tesc', 'tese', 'geom', 'frag', 'comp'], - help="Uses specified stage rather than parsing the file extension") - - parser.add_argument("-I", - dest="includes", - default=[], - action='append', - help="Include directory") - - args = parser.parse_args() - return args - - -def create_include_guard(lines: T.List[str], filename: str) -> T.List[str]: - filename = filename.replace('.', '_') - upper_name = filename.upper() - - guard_head = [f"#ifndef {upper_name}\n", - f"#define {upper_name}\n"] - guard_tail = [f"\n#endif // {upper_name}\n"] - - # remove '#pragma once' - for idx, l in enumerate(lines): - if '#pragma once' in l: - lines.pop(idx) - break - - return guard_head + lines + guard_tail - - -def convert_to_static_variable(lines: T.List[str], varname: str) -> T.List[str]: - for idx, l in enumerate(lines): - if varname in l: - lines[idx] = f"static {l}" - return lines - raise RuntimeError(f'Did not find {varname}, this is unexpected') - - -def override_version(lines: T.List[str], glsl_version: str) -> T.List[str]: - for idx, l in enumerate(lines): - if '#version ' in l: - lines[idx] = f"#version {glsl_version}\n" - return lines - raise RuntimeError('Did not find #version directive, this is unexpected') - - -def postprocess_file(args: 'Arguments') -> None: - with open(args.output, "r") as r: - lines = r.readlines() - - # glslangValidator creates a variable without the static modifier. - lines = convert_to_static_variable(lines, args.vn) - - # '#pragma once' is unstandardised. - lines = create_include_guard(lines, os.path.basename(r.name)) - - with open(args.output, "w") as w: - w.writelines(lines) - - -def preprocess_file(args: 'Arguments', origin_file: T.TextIO, directory: os.PathLike) -> str: - with open(os.path.join(directory, os.path.basename(origin_file.name)), "w") as copy_file: - lines = origin_file.readlines() - - if args.create_entry is not None: - lines.append(f"\nvoid {args.create_entry}() {{}}\n") - - if args.glsl_ver is not None: - override_version(lines, args.glsl_ver) - - copy_file.writelines(lines) - - return copy_file.name - - -def process_file(args: 'Arguments') -> None: - with open(args.input, "r") as infile: - copy_file = preprocess_file(args, infile, - os.path.dirname(args.output)) - - cmd_list = [args.glslang] - - if args.Olib: - cmd_list.append("--keep-uncalled") - - if args.vn is not None: - cmd_list.extend(["--variable-name", args.vn]) - - if args.extra is not None: - cmd_list.append(args.extra) - - if args.create_entry is not None: - cmd_list.extend(["--entry-point", args.create_entry]) - - for f in args.includes: - cmd_list.append('-I' + f) - - cmd_list.extend([ - '-V', - '-o', args.output, - '-S', args.stage, - copy_file, - ]) - - ret = subprocess.run(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=30) - if ret.returncode != 0: - print(ret.stdout) - print(ret.stderr, file=sys.stderr) - sys.exit(1) - - if args.vn is not None: - postprocess_file(args) - - if args.create_entry is not None: - os.remove(copy_file) - - -def main() -> None: - args = get_args() - process_file(args) - - -if __name__ == "__main__": - main() diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/half_float.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/half_float.c deleted file mode 100644 index 0eacf06..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/half_float.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * Copyright 2015 Philip Taylor - * Copyright 2018 Advanced Micro Devices, Inc. - * Copyright (C) 2018-2019 Intel Corporation - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include "half_float.h" -#include "rounding.h" -#include "softfloat.h" -#include "macros.h" -#include "u_math.h" - -typedef union { float f; int32_t i; uint32_t u; } fi_type; - -/** - * Convert a 4-byte float to a 2-byte half float. - * - * Not all float32 values can be represented exactly as a float16 value. We - * round such intermediate float32 values to the nearest float16. When the - * float32 lies exactly between to float16 values, we round to the one with - * an even mantissa. - * - * This rounding behavior has several benefits: - * - It has no sign bias. - * - * - It reproduces the behavior of real hardware: opcode F32TO16 in Intel's - * GPU ISA. - * - * - By reproducing the behavior of the GPU (at least on Intel hardware), - * compile-time evaluation of constant packHalf2x16 GLSL expressions will - * result in the same value as if the expression were executed on the GPU. - */ -uint16_t -_mesa_float_to_half_slow(float val) -{ - const fi_type fi = {val}; - const int flt_m = fi.i & 0x7fffff; - const int flt_e = (fi.i >> 23) & 0xff; - const int flt_s = (fi.i >> 31) & 0x1; - int s, e, m = 0; - uint16_t result; - - /* sign bit */ - s = flt_s; - - /* handle special cases */ - if ((flt_e == 0) && (flt_m == 0)) { - /* zero */ - /* m = 0; - already set */ - e = 0; - } - else if ((flt_e == 0) && (flt_m != 0)) { - /* denorm -- denorm float maps to 0 half */ - /* m = 0; - already set */ - e = 0; - } - else if ((flt_e == 0xff) && (flt_m == 0)) { - /* infinity */ - /* m = 0; - already set */ - e = 31; - } - else if ((flt_e == 0xff) && (flt_m != 0)) { - /* Retain the top bits of a NaN to make sure that the quiet/signaling - * status stays the same. - */ - m = flt_m >> 13; - if (!m) - m = 1; - e = 31; - } - else { - /* regular number */ - const int new_exp = flt_e - 127; - if (new_exp < -14) { - /* The float32 lies in the range (0.0, min_normal16) and is rounded - * to a nearby float16 value. The result will be either zero, subnormal, - * or normal. - */ - e = 0; - m = _mesa_lroundevenf((1 << 24) * fabsf(fi.f)); - } - else if (new_exp > 15) { - /* map this value to infinity */ - /* m = 0; - already set */ - e = 31; - } - else { - /* The float32 lies in the range - * [min_normal16, max_normal16 + max_step16) - * and is rounded to a nearby float16 value. The result will be - * either normal or infinite. - */ - e = new_exp + 15; - m = _mesa_lroundevenf(flt_m / (float) (1 << 13)); - } - } - - assert(0 <= m && m <= 1024); - if (m == 1024) { - /* The float32 was rounded upwards into the range of the next exponent, - * so bump the exponent. This correctly handles the case where f32 - * should be rounded up to float16 infinity. - */ - ++e; - m = 0; - } - - result = (s << 15) | (e << 10) | m; - return result; -} - -uint16_t -_mesa_float_to_float16_rtz_slow(float val) -{ - return _mesa_float_to_half_rtz_slow(val); -} - -/** - * Convert a 2-byte half float to a 4-byte float. - * Based on code from: - * http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/008786.html - */ -float -_mesa_half_to_float_slow(uint16_t val) -{ - union fi infnan; - union fi magic; - union fi f32; - - infnan.ui = 0x8f << 23; - infnan.f = 65536.0f; - magic.ui = 0xef << 23; - - /* Exponent / Mantissa */ - f32.ui = (val & 0x7fff) << 13; - - /* Adjust */ - f32.f *= magic.f; - /* XXX: The magic mul relies on denorms being available */ - - /* Inf / NaN */ - if (f32.f >= infnan.f) - f32.ui |= 0xff << 23; - - /* Sign */ - f32.ui |= (uint32_t)(val & 0x8000) << 16; - - return f32.f; -} - -/** - * Takes a uint16_t, divides by 65536, converts the infinite-precision - * result to fp16 with round-to-zero. Used by the ASTC decoder. - */ -uint16_t _mesa_uint16_div_64k_to_half(uint16_t v) -{ - /* Zero or subnormal. Set the mantissa to (v << 8) and return. */ - if (v < 4) - return v << 8; - - /* Count the leading 0s in the uint16_t */ -#ifdef HAVE___BUILTIN_CLZ - int n = __builtin_clz(v) - 16; -#else - int n = 16; - for (int i = 15; i >= 0; i--) { - if (v & (1 << i)) { - n = 15 - i; - break; - } - } -#endif - - /* Shift the mantissa up so bit 16 is the hidden 1 bit, - * mask it off, then shift back down to 10 bits - */ - int m = ( ((uint32_t)v << (n + 1)) & 0xffff ) >> 6; - - /* (0{n} 1 X{15-n}) * 2^-16 - * = 1.X * 2^(15-n-16) - * = 1.X * 2^(14-n - 15) - * which is the FP16 form with e = 14 - n - */ - int e = 14 - n; - - assert(e >= 1 && e <= 30); - assert(m >= 0 && m < 0x400); - - return (e << 10) | m; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/half_float.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/half_float.h deleted file mode 100644 index 2db98b0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/half_float.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Mesa 3-D graphics library - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * Copyright (C) 2018-2019 Intel Corporation - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _HALF_FLOAT_H_ -#define _HALF_FLOAT_H_ - -#include -#include -#include -#include "u_cpu_detect.h" - -#if defined(USE_X86_64_ASM) -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define FP16_ONE ((uint16_t) 0x3c00) -#define FP16_ZERO ((uint16_t) 0) - -uint16_t _mesa_float_to_half_slow(float val); -float _mesa_half_to_float_slow(uint16_t val); -uint16_t _mesa_uint16_div_64k_to_half(uint16_t v); - -/* - * _mesa_float_to_float16_rtz_slow is no more than a wrapper to the counterpart - * softfloat.h call. Still, softfloat.h conversion API is meant to be kept - * private. In other words, only use the API published here, instead of - * calling directly the softfloat.h one. - */ -uint16_t _mesa_float_to_float16_rtz_slow(float val); - -static inline uint16_t -_mesa_float_to_half(float val) -{ -#if defined(USE_X86_64_ASM) - if (util_get_cpu_caps()->has_f16c) { - __m128 in = {val}; - __m128i out; - - /* $0 = round to nearest */ - __asm volatile("vcvtps2ph $0, %1, %0" : "=v"(out) : "v"(in)); - return out[0]; - } -#endif - return _mesa_float_to_half_slow(val); -} - -static inline float -_mesa_half_to_float(uint16_t val) -{ -#if defined(USE_X86_64_ASM) - if (util_get_cpu_caps()->has_f16c) { - __m128i in = {val}; - __m128 out; - - __asm volatile("vcvtph2ps %1, %0" : "=v"(out) : "v"(in)); - return out[0]; - } -#endif - return _mesa_half_to_float_slow(val); -} - -static inline uint16_t -_mesa_float_to_float16_rtz(float val) -{ -#if defined(USE_X86_64_ASM) - if (util_get_cpu_caps()->has_f16c) { - __m128 in = {val}; - __m128i out; - - /* $3 = round towards zero (truncate) */ - __asm volatile("vcvtps2ph $3, %1, %0" : "=v"(out) : "v"(in)); - return out[0]; - } -#endif - return _mesa_float_to_float16_rtz_slow(val); -} - -static inline uint16_t -_mesa_float_to_float16_rtne(float val) -{ - return _mesa_float_to_half(val); -} - -static inline bool -_mesa_half_is_negative(uint16_t h) -{ - return !!(h & 0x8000); -} - - -#ifdef __cplusplus - -/* Helper class for disambiguating fp16 from uint16_t in C++ overloads */ - -struct float16_t { - uint16_t bits; - float16_t(float f) : bits(_mesa_float_to_half(f)) {} - float16_t(double d) : bits(_mesa_float_to_half(d)) {} - float16_t(uint16_t raw_bits) : bits(raw_bits) {} - static float16_t one() { return float16_t(FP16_ONE); } - static float16_t zero() { return float16_t(FP16_ZERO); } -}; - -#endif - - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* _HALF_FLOAT_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/hash_table.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/hash_table.c deleted file mode 100644 index 0e79f09..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/hash_table.c +++ /dev/null @@ -1,910 +0,0 @@ -/* - * Copyright © 2009,2012 Intel Corporation - * Copyright © 1988-2004 Keith Packard and Bart Massey. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Except as contained in this notice, the names of the authors - * or their institutions shall not be used in advertising or - * otherwise to promote the sale, use or other dealings in this - * Software without prior written authorization from the - * authors. - * - * Authors: - * Eric Anholt - * Keith Packard - */ - -/** - * Implements an open-addressing, linear-reprobing hash table. - * - * For more information, see: - * - * http://cgit.freedesktop.org/~anholt/hash_table/tree/README - */ - -#include -#include -#include - -#include "hash_table.h" -#include "ralloc.h" -#include "macros.h" -#include "u_memory.h" -#include "fast_urem_by_const.h" -#include "u_memory.h" - -#define XXH_INLINE_ALL -#include "xxhash.h" - -/** - * Magic number that gets stored outside of the struct hash_table. - * - * The hash table needs a particular pointer to be the marker for a key that - * was deleted from the table, along with NULL for the "never allocated in the - * table" marker. Legacy GL allows any GLuint to be used as a GL object name, - * and we use a 1:1 mapping from GLuints to key pointers, so we need to be - * able to track a GLuint that happens to match the deleted key outside of - * struct hash_table. We tell the hash table to use "1" as the deleted key - * value, so that we test the deleted-key-in-the-table path as best we can. - */ -#define DELETED_KEY_VALUE 1 - -static inline void * -uint_key(unsigned id) -{ - return (void *)(uintptr_t) id; -} - -static const uint32_t deleted_key_value; - -/** - * From Knuth -- a good choice for hash/rehash values is p, p-2 where - * p and p-2 are both prime. These tables are sized to have an extra 10% - * free to avoid exponential performance degradation as the hash table fills - */ -static const struct { - uint32_t max_entries, size, rehash; - uint64_t size_magic, rehash_magic; -} hash_sizes[] = { -#define ENTRY(max_entries, size, rehash) \ - { max_entries, size, rehash, \ - REMAINDER_MAGIC(size), REMAINDER_MAGIC(rehash) } - - ENTRY(2, 5, 3 ), - ENTRY(4, 7, 5 ), - ENTRY(8, 13, 11 ), - ENTRY(16, 19, 17 ), - ENTRY(32, 43, 41 ), - ENTRY(64, 73, 71 ), - ENTRY(128, 151, 149 ), - ENTRY(256, 283, 281 ), - ENTRY(512, 571, 569 ), - ENTRY(1024, 1153, 1151 ), - ENTRY(2048, 2269, 2267 ), - ENTRY(4096, 4519, 4517 ), - ENTRY(8192, 9013, 9011 ), - ENTRY(16384, 18043, 18041 ), - ENTRY(32768, 36109, 36107 ), - ENTRY(65536, 72091, 72089 ), - ENTRY(131072, 144409, 144407 ), - ENTRY(262144, 288361, 288359 ), - ENTRY(524288, 576883, 576881 ), - ENTRY(1048576, 1153459, 1153457 ), - ENTRY(2097152, 2307163, 2307161 ), - ENTRY(4194304, 4613893, 4613891 ), - ENTRY(8388608, 9227641, 9227639 ), - ENTRY(16777216, 18455029, 18455027 ), - ENTRY(33554432, 36911011, 36911009 ), - ENTRY(67108864, 73819861, 73819859 ), - ENTRY(134217728, 147639589, 147639587 ), - ENTRY(268435456, 295279081, 295279079 ), - ENTRY(536870912, 590559793, 590559791 ), - ENTRY(1073741824, 1181116273, 1181116271 ), - ENTRY(2147483648ul, 2362232233ul, 2362232231ul ) -}; - -ASSERTED static inline bool -key_pointer_is_reserved(const struct hash_table *ht, const void *key) -{ - return key == NULL || key == ht->deleted_key; -} - -static int -entry_is_free(const struct hash_entry *entry) -{ - return entry->key == NULL; -} - -static int -entry_is_deleted(const struct hash_table *ht, struct hash_entry *entry) -{ - return entry->key == ht->deleted_key; -} - -static int -entry_is_present(const struct hash_table *ht, struct hash_entry *entry) -{ - return entry->key != NULL && entry->key != ht->deleted_key; -} - -bool -_mesa_hash_table_init(struct hash_table *ht, - void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)) -{ - ht->size_index = 0; - ht->size = hash_sizes[ht->size_index].size; - ht->rehash = hash_sizes[ht->size_index].rehash; - ht->size_magic = hash_sizes[ht->size_index].size_magic; - ht->rehash_magic = hash_sizes[ht->size_index].rehash_magic; - ht->max_entries = hash_sizes[ht->size_index].max_entries; - ht->key_hash_function = key_hash_function; - ht->key_equals_function = key_equals_function; - ht->table = rzalloc_array(mem_ctx, struct hash_entry, ht->size); - ht->entries = 0; - ht->deleted_entries = 0; - ht->deleted_key = &deleted_key_value; - - return ht->table != NULL; -} - -struct hash_table * -_mesa_hash_table_create(void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)) -{ - struct hash_table *ht; - - /* mem_ctx is used to allocate the hash table, but the hash table is used - * to allocate all of the suballocations. - */ - ht = ralloc(mem_ctx, struct hash_table); - if (ht == NULL) - return NULL; - - if (!_mesa_hash_table_init(ht, ht, key_hash_function, key_equals_function)) { - ralloc_free(ht); - return NULL; - } - - return ht; -} - -static uint32_t -key_u32_hash(const void *key) -{ - uint32_t u = (uint32_t)(uintptr_t)key; - return _mesa_hash_uint(&u); -} - -static bool -key_u32_equals(const void *a, const void *b) -{ - return (uint32_t)(uintptr_t)a == (uint32_t)(uintptr_t)b; -} - -/* key == 0 and key == deleted_key are not allowed */ -struct hash_table * -_mesa_hash_table_create_u32_keys(void *mem_ctx) -{ - return _mesa_hash_table_create(mem_ctx, key_u32_hash, key_u32_equals); -} - -struct hash_table * -_mesa_hash_table_clone(struct hash_table *src, void *dst_mem_ctx) -{ - struct hash_table *ht; - - ht = ralloc(dst_mem_ctx, struct hash_table); - if (ht == NULL) - return NULL; - - memcpy(ht, src, sizeof(struct hash_table)); - - ht->table = ralloc_array(ht, struct hash_entry, ht->size); - if (ht->table == NULL) { - ralloc_free(ht); - return NULL; - } - - memcpy(ht->table, src->table, ht->size * sizeof(struct hash_entry)); - - return ht; -} - -/** - * Frees the given hash table. - * - * If delete_function is passed, it gets called on each entry present before - * freeing. - */ -void -_mesa_hash_table_destroy(struct hash_table *ht, - void (*delete_function)(struct hash_entry *entry)) -{ - if (!ht) - return; - - if (delete_function) { - hash_table_foreach(ht, entry) { - delete_function(entry); - } - } - ralloc_free(ht); -} - -static void -hash_table_clear_fast(struct hash_table *ht) -{ - memset(ht->table, 0, sizeof(struct hash_entry) * hash_sizes[ht->size_index].size); - ht->entries = ht->deleted_entries = 0; -} - -/** - * Deletes all entries of the given hash table without deleting the table - * itself or changing its structure. - * - * If delete_function is passed, it gets called on each entry present. - */ -void -_mesa_hash_table_clear(struct hash_table *ht, - void (*delete_function)(struct hash_entry *entry)) -{ - if (!ht) - return; - - struct hash_entry *entry; - - if (delete_function) { - for (entry = ht->table; entry != ht->table + ht->size; entry++) { - if (entry_is_present(ht, entry)) - delete_function(entry); - - entry->key = NULL; - } - ht->entries = 0; - ht->deleted_entries = 0; - } else - hash_table_clear_fast(ht); -} - -/** Sets the value of the key pointer used for deleted entries in the table. - * - * The assumption is that usually keys are actual pointers, so we use a - * default value of a pointer to an arbitrary piece of storage in the library. - * But in some cases a consumer wants to store some other sort of value in the - * table, like a uint32_t, in which case that pointer may conflict with one of - * their valid keys. This lets that user select a safe value. - * - * This must be called before any keys are actually deleted from the table. - */ -void -_mesa_hash_table_set_deleted_key(struct hash_table *ht, const void *deleted_key) -{ - ht->deleted_key = deleted_key; -} - -static struct hash_entry * -hash_table_search(struct hash_table *ht, uint32_t hash, const void *key) -{ - assert(!key_pointer_is_reserved(ht, key)); - - uint32_t size = ht->size; - uint32_t start_hash_address = util_fast_urem32(hash, size, ht->size_magic); - uint32_t double_hash = 1 + util_fast_urem32(hash, ht->rehash, - ht->rehash_magic); - uint32_t hash_address = start_hash_address; - - do { - struct hash_entry *entry = ht->table + hash_address; - - if (entry_is_free(entry)) { - return NULL; - } else if (entry_is_present(ht, entry) && entry->hash == hash) { - if (ht->key_equals_function(key, entry->key)) { - return entry; - } - } - - hash_address += double_hash; - if (hash_address >= size) - hash_address -= size; - } while (hash_address != start_hash_address); - - return NULL; -} - -/** - * Finds a hash table entry with the given key and hash of that key. - * - * Returns NULL if no entry is found. Note that the data pointer may be - * modified by the user. - */ -struct hash_entry * -_mesa_hash_table_search(struct hash_table *ht, const void *key) -{ - assert(ht->key_hash_function); - return hash_table_search(ht, ht->key_hash_function(key), key); -} - -struct hash_entry * -_mesa_hash_table_search_pre_hashed(struct hash_table *ht, uint32_t hash, - const void *key) -{ - assert(ht->key_hash_function == NULL || hash == ht->key_hash_function(key)); - return hash_table_search(ht, hash, key); -} - -static struct hash_entry * -hash_table_insert(struct hash_table *ht, uint32_t hash, - const void *key, void *data); - -static void -hash_table_insert_rehash(struct hash_table *ht, uint32_t hash, - const void *key, void *data) -{ - uint32_t size = ht->size; - uint32_t start_hash_address = util_fast_urem32(hash, size, ht->size_magic); - uint32_t double_hash = 1 + util_fast_urem32(hash, ht->rehash, - ht->rehash_magic); - uint32_t hash_address = start_hash_address; - do { - struct hash_entry *entry = ht->table + hash_address; - - if (likely(entry->key == NULL)) { - entry->hash = hash; - entry->key = key; - entry->data = data; - return; - } - - hash_address += double_hash; - if (hash_address >= size) - hash_address -= size; - } while (true); -} - -static void -_mesa_hash_table_rehash(struct hash_table *ht, unsigned new_size_index) -{ - struct hash_table old_ht; - struct hash_entry *table; - - if (ht->size_index == new_size_index && ht->deleted_entries == ht->max_entries) { - hash_table_clear_fast(ht); - assert(!ht->entries); - return; - } - - if (new_size_index >= ARRAY_SIZE(hash_sizes)) - return; - - table = rzalloc_array(ralloc_parent(ht->table), struct hash_entry, - hash_sizes[new_size_index].size); - if (table == NULL) - return; - - old_ht = *ht; - - ht->table = table; - ht->size_index = new_size_index; - ht->size = hash_sizes[ht->size_index].size; - ht->rehash = hash_sizes[ht->size_index].rehash; - ht->size_magic = hash_sizes[ht->size_index].size_magic; - ht->rehash_magic = hash_sizes[ht->size_index].rehash_magic; - ht->max_entries = hash_sizes[ht->size_index].max_entries; - ht->entries = 0; - ht->deleted_entries = 0; - - hash_table_foreach(&old_ht, entry) { - hash_table_insert_rehash(ht, entry->hash, entry->key, entry->data); - } - - ht->entries = old_ht.entries; - - ralloc_free(old_ht.table); -} - -static struct hash_entry * -hash_table_insert(struct hash_table *ht, uint32_t hash, - const void *key, void *data) -{ - struct hash_entry *available_entry = NULL; - - assert(!key_pointer_is_reserved(ht, key)); - - if (ht->entries >= ht->max_entries) { - _mesa_hash_table_rehash(ht, ht->size_index + 1); - } else if (ht->deleted_entries + ht->entries >= ht->max_entries) { - _mesa_hash_table_rehash(ht, ht->size_index); - } - - uint32_t size = ht->size; - uint32_t start_hash_address = util_fast_urem32(hash, size, ht->size_magic); - uint32_t double_hash = 1 + util_fast_urem32(hash, ht->rehash, - ht->rehash_magic); - uint32_t hash_address = start_hash_address; - do { - struct hash_entry *entry = ht->table + hash_address; - - if (!entry_is_present(ht, entry)) { - /* Stash the first available entry we find */ - if (available_entry == NULL) - available_entry = entry; - if (entry_is_free(entry)) - break; - } - - /* Implement replacement when another insert happens - * with a matching key. This is a relatively common - * feature of hash tables, with the alternative - * generally being "insert the new value as well, and - * return it first when the key is searched for". - * - * Note that the hash table doesn't have a delete - * callback. If freeing of old data pointers is - * required to avoid memory leaks, perform a search - * before inserting. - */ - if (!entry_is_deleted(ht, entry) && - entry->hash == hash && - ht->key_equals_function(key, entry->key)) { - entry->key = key; - entry->data = data; - return entry; - } - - hash_address += double_hash; - if (hash_address >= size) - hash_address -= size; - } while (hash_address != start_hash_address); - - if (available_entry) { - if (entry_is_deleted(ht, available_entry)) - ht->deleted_entries--; - available_entry->hash = hash; - available_entry->key = key; - available_entry->data = data; - ht->entries++; - return available_entry; - } - - /* We could hit here if a required resize failed. An unchecked-malloc - * application could ignore this result. - */ - return NULL; -} - -/** - * Inserts the key with the given hash into the table. - * - * Note that insertion may rearrange the table on a resize or rehash, - * so previously found hash_entries are no longer valid after this function. - */ -struct hash_entry * -_mesa_hash_table_insert(struct hash_table *ht, const void *key, void *data) -{ - assert(ht->key_hash_function); - return hash_table_insert(ht, ht->key_hash_function(key), key, data); -} - -struct hash_entry * -_mesa_hash_table_insert_pre_hashed(struct hash_table *ht, uint32_t hash, - const void *key, void *data) -{ - assert(ht->key_hash_function == NULL || hash == ht->key_hash_function(key)); - return hash_table_insert(ht, hash, key, data); -} - -/** - * This function deletes the given hash table entry. - * - * Note that deletion doesn't otherwise modify the table, so an iteration over - * the table deleting entries is safe. - */ -void -_mesa_hash_table_remove(struct hash_table *ht, - struct hash_entry *entry) -{ - if (!entry) - return; - - entry->key = ht->deleted_key; - ht->entries--; - ht->deleted_entries++; -} - -/** - * Removes the entry with the corresponding key, if exists. - */ -void _mesa_hash_table_remove_key(struct hash_table *ht, - const void *key) -{ - _mesa_hash_table_remove(ht, _mesa_hash_table_search(ht, key)); -} - -/** - * This function is an iterator over the hash_table when no deleted entries are present. - * - * Pass in NULL for the first entry, as in the start of a for loop. - */ -struct hash_entry * -_mesa_hash_table_next_entry_unsafe(const struct hash_table *ht, struct hash_entry *entry) -{ - assert(!ht->deleted_entries); - if (!ht->entries) - return NULL; - if (entry == NULL) - entry = ht->table; - else - entry = entry + 1; - if (entry != ht->table + ht->size) - return entry->key ? entry : _mesa_hash_table_next_entry_unsafe(ht, entry); - - return NULL; -} - -/** - * This function is an iterator over the hash table. - * - * Pass in NULL for the first entry, as in the start of a for loop. Note that - * an iteration over the table is O(table_size) not O(entries). - */ -struct hash_entry * -_mesa_hash_table_next_entry(struct hash_table *ht, - struct hash_entry *entry) -{ - if (entry == NULL) - entry = ht->table; - else - entry = entry + 1; - - for (; entry != ht->table + ht->size; entry++) { - if (entry_is_present(ht, entry)) { - return entry; - } - } - - return NULL; -} - -/** - * Returns a random entry from the hash table. - * - * This may be useful in implementing random replacement (as opposed - * to just removing everything) in caches based on this hash table - * implementation. @predicate may be used to filter entries, or may - * be set to NULL for no filtering. - */ -struct hash_entry * -_mesa_hash_table_random_entry(struct hash_table *ht, - bool (*predicate)(struct hash_entry *entry)) -{ - struct hash_entry *entry; - uint32_t i = rand() % ht->size; - - if (ht->entries == 0) - return NULL; - - for (entry = ht->table + i; entry != ht->table + ht->size; entry++) { - if (entry_is_present(ht, entry) && - (!predicate || predicate(entry))) { - return entry; - } - } - - for (entry = ht->table; entry != ht->table + i; entry++) { - if (entry_is_present(ht, entry) && - (!predicate || predicate(entry))) { - return entry; - } - } - - return NULL; -} - - -uint32_t -_mesa_hash_data(const void *data, size_t size) -{ - return XXH32(data, size, 0); -} - -uint32_t -_mesa_hash_data_with_seed(const void *data, size_t size, uint32_t seed) -{ - return XXH32(data, size, seed); -} - -uint32_t -_mesa_hash_int(const void *key) -{ - return XXH32(key, sizeof(int), 0); -} - -uint32_t -_mesa_hash_uint(const void *key) -{ - return XXH32(key, sizeof(unsigned), 0); -} - -uint32_t -_mesa_hash_u32(const void *key) -{ - return XXH32(key, 4, 0); -} - -/** FNV-1a string hash implementation */ -uint32_t -_mesa_hash_string(const void *_key) -{ - return _mesa_hash_string_with_length(_key, strlen((const char *)_key)); -} - -uint32_t -_mesa_hash_string_with_length(const void *_key, unsigned length) -{ - uint32_t hash = 0; - const char *key = _key; -#if defined(_WIN64) || defined(__x86_64__) - hash = (uint32_t)XXH64(key, length, hash); -#else - hash = XXH32(key, length, hash); -#endif - return hash; -} - -uint32_t -_mesa_hash_pointer(const void *pointer) -{ - uintptr_t num = (uintptr_t) pointer; - return (uint32_t) ((num >> 2) ^ (num >> 6) ^ (num >> 10) ^ (num >> 14)); -} - -bool -_mesa_key_int_equal(const void *a, const void *b) -{ - return *((const int *)a) == *((const int *)b); -} - -bool -_mesa_key_uint_equal(const void *a, const void *b) -{ - - return *((const unsigned *)a) == *((const unsigned *)b); -} - -bool -_mesa_key_u32_equal(const void *a, const void *b) -{ - return *((const uint32_t *)a) == *((const uint32_t *)b); -} - -/** - * String compare function for use as the comparison callback in - * _mesa_hash_table_create(). - */ -bool -_mesa_key_string_equal(const void *a, const void *b) -{ - return strcmp(a, b) == 0; -} - -bool -_mesa_key_pointer_equal(const void *a, const void *b) -{ - return a == b; -} - -/** - * Helper to create a hash table with pointer keys. - */ -struct hash_table * -_mesa_pointer_hash_table_create(void *mem_ctx) -{ - return _mesa_hash_table_create(mem_ctx, _mesa_hash_pointer, - _mesa_key_pointer_equal); -} - - -bool -_mesa_hash_table_reserve(struct hash_table *ht, unsigned size) -{ - if (size < ht->max_entries) - return true; - for (unsigned i = ht->size_index + 1; i < ARRAY_SIZE(hash_sizes); i++) { - if (hash_sizes[i].max_entries >= size) { - _mesa_hash_table_rehash(ht, i); - break; - } - } - return ht->max_entries >= size; -} - -/** - * Hash table wrapper which supports 64-bit keys. - * - * TODO: unify all hash table implementations. - */ - -struct hash_key_u64 { - uint64_t value; -}; - -static uint32_t -key_u64_hash(const void *key) -{ - return _mesa_hash_data(key, sizeof(struct hash_key_u64)); -} - -static bool -key_u64_equals(const void *a, const void *b) -{ - const struct hash_key_u64 *aa = a; - const struct hash_key_u64 *bb = b; - - return aa->value == bb->value; -} - -#define FREED_KEY_VALUE 0 - -struct hash_table_u64 * -_mesa_hash_table_u64_create(void *mem_ctx) -{ - STATIC_ASSERT(FREED_KEY_VALUE != DELETED_KEY_VALUE); - struct hash_table_u64 *ht; - - ht = rzalloc(mem_ctx, struct hash_table_u64); - if (!ht) - return NULL; - - if (sizeof(void *) == 8) { - ht->table = _mesa_hash_table_create(ht, _mesa_hash_pointer, - _mesa_key_pointer_equal); - } else { - ht->table = _mesa_hash_table_create(ht, key_u64_hash, - key_u64_equals); - } - - if (ht->table) - _mesa_hash_table_set_deleted_key(ht->table, uint_key(DELETED_KEY_VALUE)); - - return ht; -} - -static void -_mesa_hash_table_u64_delete_key(struct hash_entry *entry) -{ - if (sizeof(void *) == 8) - return; - - struct hash_key_u64 *_key = (struct hash_key_u64 *)entry->key; - - if (_key) - free(_key); -} - -void -_mesa_hash_table_u64_clear(struct hash_table_u64 *ht) -{ - if (!ht) - return; - - _mesa_hash_table_clear(ht->table, _mesa_hash_table_u64_delete_key); - ht->freed_key_data = NULL; - ht->deleted_key_data = NULL; -} - -void -_mesa_hash_table_u64_destroy(struct hash_table_u64 *ht) -{ - if (!ht) - return; - ralloc_free(ht); -} - -void -_mesa_hash_table_u64_insert(struct hash_table_u64 *ht, uint64_t key, - void *data) -{ - if (key == FREED_KEY_VALUE) { - ht->freed_key_data = data; - return; - } - - if (key == DELETED_KEY_VALUE) { - ht->deleted_key_data = data; - return; - } - - if (sizeof(void *) == 8) { - _mesa_hash_table_insert(ht->table, (void *)(uintptr_t)key, data); - } else { - struct hash_key_u64 *_key = CALLOC_STRUCT(hash_key_u64); - - if (!_key) - return; - _key->value = key; - - _mesa_hash_table_insert(ht->table, _key, data); - } -} - -static struct hash_entry * -hash_table_u64_search(struct hash_table_u64 *ht, uint64_t key) -{ - if (sizeof(void *) == 8) { - return _mesa_hash_table_search(ht->table, (void *)(uintptr_t)key); - } else { - struct hash_key_u64 _key = { .value = key }; - return _mesa_hash_table_search(ht->table, &_key); - } -} - -void * -_mesa_hash_table_u64_search(struct hash_table_u64 *ht, uint64_t key) -{ - struct hash_entry *entry; - - if (key == FREED_KEY_VALUE) - return ht->freed_key_data; - - if (key == DELETED_KEY_VALUE) - return ht->deleted_key_data; - - entry = hash_table_u64_search(ht, key); - if (!entry) - return NULL; - - return entry->data; -} - -void -_mesa_hash_table_u64_remove(struct hash_table_u64 *ht, uint64_t key) -{ - struct hash_entry *entry; - - if (key == FREED_KEY_VALUE) { - ht->freed_key_data = NULL; - return; - } - - if (key == DELETED_KEY_VALUE) { - ht->deleted_key_data = NULL; - return; - } - - entry = hash_table_u64_search(ht, key); - if (!entry) - return; - - if (sizeof(void *) == 8) { - _mesa_hash_table_remove(ht->table, entry); - } else { - struct hash_key *_key = (struct hash_key *)entry->key; - - _mesa_hash_table_remove(ht->table, entry); - free(_key); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/hash_table.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/hash_table.h deleted file mode 100644 index 1191ffa..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/hash_table.h +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright © 2009,2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Eric Anholt - * - */ - -#ifndef _HASH_TABLE_H -#define _HASH_TABLE_H - -#include -#include -#include -#include "macros.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct hash_entry { - uint32_t hash; - const void *key; - void *data; -}; - -struct hash_table { - struct hash_entry *table; - uint32_t (*key_hash_function)(const void *key); - bool (*key_equals_function)(const void *a, const void *b); - const void *deleted_key; - uint32_t size; - uint32_t rehash; - uint64_t size_magic; - uint64_t rehash_magic; - uint32_t max_entries; - uint32_t size_index; - uint32_t entries; - uint32_t deleted_entries; -}; - -struct hash_table * -_mesa_hash_table_create(void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)); - -bool -_mesa_hash_table_init(struct hash_table *ht, - void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)); - -struct hash_table * -_mesa_hash_table_create_u32_keys(void *mem_ctx); - -struct hash_table * -_mesa_hash_table_clone(struct hash_table *src, void *dst_mem_ctx); -void _mesa_hash_table_destroy(struct hash_table *ht, - void (*delete_function)(struct hash_entry *entry)); -void _mesa_hash_table_clear(struct hash_table *ht, - void (*delete_function)(struct hash_entry *entry)); -void _mesa_hash_table_set_deleted_key(struct hash_table *ht, - const void *deleted_key); - -static inline uint32_t _mesa_hash_table_num_entries(struct hash_table *ht) -{ - return ht->entries; -} - -struct hash_entry * -_mesa_hash_table_insert(struct hash_table *ht, const void *key, void *data); -struct hash_entry * -_mesa_hash_table_insert_pre_hashed(struct hash_table *ht, uint32_t hash, - const void *key, void *data); -struct hash_entry * -_mesa_hash_table_search(struct hash_table *ht, const void *key); -struct hash_entry * -_mesa_hash_table_search_pre_hashed(struct hash_table *ht, uint32_t hash, - const void *key); -void _mesa_hash_table_remove(struct hash_table *ht, - struct hash_entry *entry); -void _mesa_hash_table_remove_key(struct hash_table *ht, - const void *key); - -struct hash_entry *_mesa_hash_table_next_entry(struct hash_table *ht, - struct hash_entry *entry); -struct hash_entry *_mesa_hash_table_next_entry_unsafe(const struct hash_table *ht, - struct hash_entry *entry); -struct hash_entry * -_mesa_hash_table_random_entry(struct hash_table *ht, - bool (*predicate)(struct hash_entry *entry)); - -uint32_t _mesa_hash_data(const void *data, size_t size); -uint32_t _mesa_hash_data_with_seed(const void *data, size_t size, uint32_t seed); - -uint32_t _mesa_hash_int(const void *key); -uint32_t _mesa_hash_uint(const void *key); -uint32_t _mesa_hash_u32(const void *key); -uint32_t _mesa_hash_string(const void *key); -uint32_t _mesa_hash_string_with_length(const void *_key, unsigned length); -uint32_t _mesa_hash_pointer(const void *pointer); - -bool _mesa_key_int_equal(const void *a, const void *b); -bool _mesa_key_uint_equal(const void *a, const void *b); -bool _mesa_key_u32_equal(const void *a, const void *b); -bool _mesa_key_string_equal(const void *a, const void *b); -bool _mesa_key_pointer_equal(const void *a, const void *b); - -struct hash_table * -_mesa_pointer_hash_table_create(void *mem_ctx); - -bool -_mesa_hash_table_reserve(struct hash_table *ht, unsigned size); -/** - * This foreach function is safe against deletion (which just replaces - * an entry's data with the deleted marker), but not against insertion - * (which may rehash the table, making entry a dangling pointer). - */ -#define hash_table_foreach(ht, entry) \ - for (struct hash_entry *entry = _mesa_hash_table_next_entry(ht, NULL); \ - entry != NULL; \ - entry = _mesa_hash_table_next_entry(ht, entry)) -/** - * This foreach function destroys the table as it iterates. - * It is not safe to use when inserting or removing entries. - */ -#define hash_table_foreach_remove(ht, entry) \ - for (struct hash_entry *entry = _mesa_hash_table_next_entry_unsafe(ht, NULL); \ - (ht)->entries; \ - entry->hash = 0, entry->key = (void*)NULL, entry->data = NULL, \ - (ht)->entries--, entry = _mesa_hash_table_next_entry_unsafe(ht, entry)) - -static inline void -hash_table_call_foreach(struct hash_table *ht, - void (*callback)(const void *key, - void *data, - void *closure), - void *closure) -{ - hash_table_foreach(ht, entry) - callback(entry->key, entry->data, closure); -} - -/** - * Hash table wrapper which supports 64-bit keys. - */ -struct hash_table_u64 { - struct hash_table *table; - void *freed_key_data; - void *deleted_key_data; -}; - -struct hash_table_u64 * -_mesa_hash_table_u64_create(void *mem_ctx); - -void -_mesa_hash_table_u64_destroy(struct hash_table_u64 *ht); - -void -_mesa_hash_table_u64_insert(struct hash_table_u64 *ht, uint64_t key, - void *data); - -void * -_mesa_hash_table_u64_search(struct hash_table_u64 *ht, uint64_t key); - -void -_mesa_hash_table_u64_remove(struct hash_table_u64 *ht, uint64_t key); - -void -_mesa_hash_table_u64_clear(struct hash_table_u64 *ht); - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* _HASH_TABLE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/libdrm.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/libdrm.h deleted file mode 100644 index 900f2f3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/libdrm.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright © 2023 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * A simple header that either gives you the real libdrm or a no-op shim, - * depending on whether HAVE_LIBDRM is defined. This is intended to avoid - * the proliferation of #ifdef'ery to support environments without libdrm. - */ - -#ifdef HAVE_LIBDRM -#include -#else - -#include - -#define DRM_NODE_PRIMARY 0 -#define DRM_NODE_CONTROL 1 -#define DRM_NODE_RENDER 2 -#define DRM_NODE_MAX 3 - -#define DRM_BUS_PCI 0 -#define DRM_BUS_USB 1 -#define DRM_BUS_PLATFORM 2 -#define DRM_BUS_HOST1X 3 - -typedef struct _drmDevice { - char **nodes; /* DRM_NODE_MAX sized array */ - int available_nodes; /* DRM_NODE_* bitmask */ - int bustype; - /* ... */ -} drmDevice, *drmDevicePtr; - -static inline int -drmGetDevices2(uint32_t flags, drmDevicePtr devices[], int max_devices) -{ - return -ENOENT; -} - -static inline void -drmFreeDevices(drmDevicePtr devices[], int count) {} - -typedef struct _drmVersion { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - int name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - int date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - int desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ -} drmVersion, *drmVersionPtr; - -static inline struct _drmVersion * -drmGetVersion(int fd) { return NULL; } - -static inline void -drmFreeVersion(struct _drmVersion *v) {} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/libsync.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/libsync.h deleted file mode 100644 index 60e3e5d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/libsync.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * sync abstraction - * Copyright 2015-2016 Collabora Ltd. - * - * Based on the implementation from the Android Open Source Project, - * - * Copyright 2012 Google, Inc - * - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _LIBSYNC_H -#define _LIBSYNC_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -#ifdef ANDROID -/* On Android, rely on the system's libsync instead of rolling our own - * sync_wait() and sync_merge(). This gives us compatibility with pre-4.7 - * Android kernels. - */ -#include - -/** - * Check if the fd represents a valid fence-fd. - * - * The android variant of this debug helper is implemented on top of the - * system's libsync for compatibility with pre-4.7 android kernels. - */ -static inline bool -sync_valid_fd(int fd) -{ - /* sync_file_info() only available in SDK 26. */ -#if ANDROID_API_LEVEL >= 26 - struct sync_file_info *info = sync_file_info(fd); - if (!info) - return false; - sync_file_info_free(info); -#endif - return true; -} -#else - -#ifndef SYNC_IOC_MERGE -/* duplicated from linux/sync_file.h to avoid build-time dependency - * on new (v4.7) kernel headers. Once distro's are mostly using - * something newer than v4.7 drop this and #include - * instead. - */ -struct sync_merge_data { - char name[32]; - int32_t fd2; - int32_t fence; - uint32_t flags; - uint32_t pad; -}; - -struct sync_file_info { - char name[32]; - int32_t status; - uint32_t flags; - uint32_t num_fences; - uint32_t pad; - - uint64_t sync_fence_info; -}; - -#define SYNC_IOC_MAGIC '>' -#define SYNC_IOC_MERGE _IOWR(SYNC_IOC_MAGIC, 3, struct sync_merge_data) -#define SYNC_IOC_FILE_INFO _IOWR(SYNC_IOC_MAGIC, 4, struct sync_file_info) -#endif - - -static inline int sync_wait(int fd, int timeout) -{ - struct pollfd fds = {0}; - int ret; - struct timespec poll_start, poll_end; - - fds.fd = fd; - fds.events = POLLIN; - - do { - clock_gettime(CLOCK_MONOTONIC, &poll_start); - ret = poll(&fds, 1, timeout); - clock_gettime(CLOCK_MONOTONIC, &poll_end); - if (ret > 0) { - if (fds.revents & (POLLERR | POLLNVAL)) { - errno = EINVAL; - return -1; - } - return 0; - } else if (ret == 0) { - errno = ETIME; - return -1; - } - timeout -= (poll_end.tv_sec - poll_start.tv_sec) * 1000 + - (poll_end.tv_nsec - poll_end.tv_nsec) / 1000000; - } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); - - return ret; -} - -static inline int sync_merge(const char *name, int fd1, int fd2) -{ - struct sync_merge_data data = {{0}}; - int ret; - - data.fd2 = fd2; - strncpy(data.name, name, sizeof(data.name)); - - do { - ret = ioctl(fd1, SYNC_IOC_MERGE, &data); - } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); - - if (ret < 0) - return ret; - - return data.fence; -} - -/** - * Check if the fd represents a valid fence-fd. - */ -static inline bool -sync_valid_fd(int fd) -{ - struct sync_file_info info = {{0}}; - return ioctl(fd, SYNC_IOC_FILE_INFO, &info) >= 0; -} - -#endif /* !ANDROID */ - -/* accumulate fd2 into fd1. If *fd1 is not a valid fd then dup fd2, - * otherwise sync_merge() and close the old *fd1. This can be used - * to implement the pattern: - * - * init() - * { - * batch.fence_fd = -1; - * } - * - * // does *NOT* take ownership of fd - * server_sync(int fd) - * { - * if (sync_accumulate("foo", &batch.fence_fd, fd)) { - * ... error ... - * } - * } - */ -static inline int sync_accumulate(const char *name, int *fd1, int fd2) -{ - int ret; - - assert(fd2 >= 0); - - if (*fd1 < 0) { - *fd1 = dup(fd2); - return 0; - } - - ret = sync_merge(name, *fd1, fd2); - if (ret < 0) { - /* leave *fd1 as it is */ - return ret; - } - - close(*fd1); - *fd1 = ret; - - return 0; -} - -/* Helper macro to complain if fd is non-negative and not a valid fence fd. - * Sprinkle this around to help catch fd lifetime issues. - */ -#ifdef DEBUG -# include "util/log.h" -# define validate_fence_fd(fd) do { \ - if (((fd) >= 0) && !sync_valid_fd(fd)) \ - mesa_loge("%s:%d: invalid fence fd: %d", __func__, __LINE__, (fd)); \ - } while (0) -#else -# define validate_fence_fd(fd) do {} while (0) -#endif - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/list.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/list.h deleted file mode 100644 index 97419b8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/list.h +++ /dev/null @@ -1,290 +0,0 @@ -/************************************************************************** - * - * Copyright 2006 VMware, Inc., Bismarck, ND. USA. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - -/** - * \file - * List macros heavily inspired by the Linux kernel - * list handling. No list looping yet. - * - * Is not threadsafe, so common operations need to - * be protected using an external mutex. - */ - -#ifndef _UTIL_LIST_H_ -#define _UTIL_LIST_H_ - - -#include -#include -#include - -#define list_assert(cond, msg) assert(cond && msg) - -struct list_head -{ - struct list_head *prev; - struct list_head *next; -}; - -static inline void list_inithead(struct list_head *item) -{ - item->prev = item; - item->next = item; -} - -/** - * Prepend an item to a list - * - * @param item The element to add to the list - * @param list The list to prepend to - */ -static inline void list_add(struct list_head *item, struct list_head *list) -{ - item->prev = list; - item->next = list->next; - list->next->prev = item; - list->next = item; -} - -/** - * Append an item to a list - * - * @param item The element to add to the list - * @param list The list to append to - */ -static inline void list_addtail(struct list_head *item, struct list_head *list) -{ - item->next = list; - item->prev = list->prev; - list->prev->next = item; - list->prev = item; -} - -static inline bool list_is_empty(const struct list_head *list); - -static inline void list_replace(struct list_head *from, struct list_head *to) -{ - if (list_is_empty(from)) { - list_inithead(to); - } else { - to->prev = from->prev; - to->next = from->next; - from->next->prev = to; - from->prev->next = to; - } -} - -static inline void list_del(struct list_head *item) -{ - item->prev->next = item->next; - item->next->prev = item->prev; - item->prev = item->next = NULL; -} - -static inline void list_delinit(struct list_head *item) -{ - item->prev->next = item->next; - item->next->prev = item->prev; - item->next = item; - item->prev = item; -} - -static inline bool list_is_empty(const struct list_head *list) -{ - return list->next == list; -} - -static inline bool list_is_linked(const struct list_head *list) -{ - /* both must be NULL or both must be not NULL */ - assert((list->prev != NULL) == (list->next != NULL)); - - return list->next != NULL; -} - -/** - * Returns whether the list has exactly one element. - */ -static inline bool list_is_singular(const struct list_head *list) -{ - return list_is_linked(list) && !list_is_empty(list) && list->next->next == list; -} - -static inline unsigned list_length(const struct list_head *list) -{ - struct list_head *node; - unsigned length = 0; - for (node = list->next; node != list; node = node->next) - length++; - return length; -} - -static inline void list_splice(struct list_head *src, struct list_head *dst) -{ - if (list_is_empty(src)) - return; - - src->next->prev = dst; - src->prev->next = dst->next; - dst->next->prev = src->prev; - dst->next = src->next; -} - -static inline void list_splicetail(struct list_head *src, struct list_head *dst) -{ - if (list_is_empty(src)) - return; - - src->prev->next = dst; - src->next->prev = dst->prev; - dst->prev->next = src->next; - dst->prev = src->prev; -} - -static inline void list_validate(const struct list_head *list) -{ - struct list_head *node; - assert(list_is_linked(list)); - assert(list->next->prev == list && list->prev->next == list); - for (node = list->next; node != list; node = node->next) - assert(node->next->prev == node && node->prev->next == node); -} - -/** - * Move an item from one place in a list to another - * - * The item can be in this list, or in another. - * - * @param item The item to move - * @param loc The element to put the item in front of - */ -static inline void list_move_to(struct list_head *item, struct list_head *loc) { - list_del(item); - list_add(item, loc); -} - -#define list_entry(__item, __type, __field) \ - ((__type *)(((char *)(__item)) - offsetof(__type, __field))) - -/** - * Cast from a pointer to a member of a struct back to the containing struct. - * - * 'sample' MUST be initialized, or else the result is undefined! - */ -#define list_container_of(ptr, sample, member) \ - (void *)((char *)(ptr) \ - - ((char *)&(sample)->member - (char *)(sample))) - -#define list_first_entry(ptr, type, member) \ - list_entry((ptr)->next, type, member) - -#define list_last_entry(ptr, type, member) \ - list_entry((ptr)->prev, type, member) - - -#define LIST_FOR_EACH_ENTRY(pos, head, member) \ - for (pos = NULL, pos = list_container_of((head)->next, pos, member); \ - &pos->member != (head); \ - pos = list_container_of(pos->member.next, pos, member)) - -#define LIST_FOR_EACH_ENTRY_SAFE(pos, storage, head, member) \ - for (pos = NULL, pos = list_container_of((head)->next, pos, member), \ - storage = list_container_of(pos->member.next, pos, member); \ - &pos->member != (head); \ - pos = storage, storage = list_container_of(storage->member.next, storage, member)) - -#define LIST_FOR_EACH_ENTRY_SAFE_REV(pos, storage, head, member) \ - for (pos = NULL, pos = list_container_of((head)->prev, pos, member), \ - storage = list_container_of(pos->member.prev, pos, member); \ - &pos->member != (head); \ - pos = storage, storage = list_container_of(storage->member.prev, storage, member)) - -#define LIST_FOR_EACH_ENTRY_FROM(pos, start, head, member) \ - for (pos = NULL, pos = list_container_of((start), pos, member); \ - &pos->member != (head); \ - pos = list_container_of(pos->member.next, pos, member)) - -#define LIST_FOR_EACH_ENTRY_FROM_REV(pos, start, head, member) \ - for (pos = NULL, pos = list_container_of((start), pos, member); \ - &pos->member != (head); \ - pos = list_container_of(pos->member.prev, pos, member)) - -#define list_for_each_entry(type, pos, head, member) \ - for (type *pos = list_entry((head)->next, type, member), \ - *__next = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ - pos = list_entry(pos->member.next, type, member), \ - list_assert(pos == __next, "use _safe iterator"), \ - __next = list_entry(__next->member.next, type, member)) - -#define list_for_each_entry_safe(type, pos, head, member) \ - for (type *pos = list_entry((head)->next, type, member), \ - *__next = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ - pos = __next, \ - __next = list_entry(__next->member.next, type, member)) - -#define list_for_each_entry_rev(type, pos, head, member) \ - for (type *pos = list_entry((head)->prev, type, member), \ - *__prev = list_entry(pos->member.prev, type, member); \ - &pos->member != (head); \ - pos = list_entry(pos->member.prev, type, member), \ - list_assert(pos == __prev, "use _safe iterator"), \ - __prev = list_entry(__prev->member.prev, type, member)) - -#define list_for_each_entry_safe_rev(type, pos, head, member) \ - for (type *pos = list_entry((head)->prev, type, member), \ - *__prev = list_entry(pos->member.prev, type, member); \ - &pos->member != (head); \ - pos = __prev, \ - __prev = list_entry(__prev->member.prev, type, member)) - -#define list_for_each_entry_from(type, pos, start, head, member) \ - for (type *pos = list_entry((start), type, member); \ - &pos->member != (head); \ - pos = list_entry(pos->member.next, type, member)) - -#define list_for_each_entry_from_safe(type, pos, start, head, member) \ - for (type *pos = list_entry((start), type, member), \ - *__next = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ - pos = __next, \ - __next = list_entry(__next->member.next, type, member)) - -#define list_for_each_entry_from_rev(type, pos, start, head, member) \ - for (type *pos = list_entry((start), type, member); \ - &pos->member != (head); \ - pos = list_entry(pos->member.prev, type, member)) - -#define list_pair_for_each_entry(type, pos1, pos2, head1, head2, member) \ - for (type *pos1 = list_entry((head1)->next, type, member), \ - *pos2 = list_entry((head2)->next, type, member); \ - &pos1->member != (head1) && &pos2->member != (head2); \ - pos1 = list_entry(pos1->member.next, type, member), \ - pos2 = list_entry(pos2->member.next, type, member)) - -#endif /*_UTIL_LIST_H_*/ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/log.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/log.c deleted file mode 100644 index 836ea56..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/log.c +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Copyright © 2017 Google, Inc. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include -#include -#include "../../include/c11/threads.h" -#include "detect_os.h" -#include "log.h" -#include "ralloc.h" -#include "u_debug.h" - -#if DETECT_OS_UNIX -#include -#include "u_process.h" -#endif - -#if DETECT_OS_ANDROID -#include -#endif - -#if DETECT_OS_WINDOWS -#include -#endif - -enum mesa_log_control { - MESA_LOG_CONTROL_NULL = 1 << 0, - MESA_LOG_CONTROL_FILE = 1 << 1, - MESA_LOG_CONTROL_SYSLOG = 1 << 2, - MESA_LOG_CONTROL_ANDROID = 1 << 3, - MESA_LOG_CONTROL_WINDBG = 1 << 4, - MESA_LOG_CONTROL_LOGGER_MASK = 0xff, - - MESA_LOG_CONTROL_WAIT = 1 << 8, -}; - -static const struct debug_control mesa_log_control_options[] = { - /* loggers */ - { "null", MESA_LOG_CONTROL_NULL }, - { "file", MESA_LOG_CONTROL_FILE }, - { "syslog", MESA_LOG_CONTROL_SYSLOG }, - { "android", MESA_LOG_CONTROL_ANDROID }, - { "windbg", MESA_LOG_CONTROL_WINDBG }, - /* flags */ - { "wait", MESA_LOG_CONTROL_WAIT }, - { NULL, 0 }, -}; - -static uint32_t mesa_log_control; -static FILE *mesa_log_file; - -static void -mesa_log_init_once(void) -{ - mesa_log_control = parse_debug_string(os_get_option("MESA_LOG"), - mesa_log_control_options); - - if (!(mesa_log_control & MESA_LOG_CONTROL_LOGGER_MASK)) { - /* pick the default loggers */ -#if DETECT_OS_ANDROID - mesa_log_control |= MESA_LOG_CONTROL_ANDROID; -#else - mesa_log_control |= MESA_LOG_CONTROL_FILE; -#endif - -#if DETECT_OS_WINDOWS - /* stderr from windows applications without console is not usually - * visible, so communicate with the debugger instead */ - mesa_log_control |= MESA_LOG_CONTROL_WINDBG; -#endif - } - - mesa_log_file = stderr; - -#if !DETECT_OS_WINDOWS - if (geteuid() == getuid()) { - const char *log_file = os_get_option("MESA_LOG_FILE"); - if (log_file) { - FILE *fp = fopen(log_file, "w"); - if (fp) { - mesa_log_file = fp; - mesa_log_control |= MESA_LOG_CONTROL_FILE; - } - } - } -#endif - -#if DETECT_OS_UNIX - if (mesa_log_control & MESA_LOG_CONTROL_SYSLOG) - openlog(util_get_process_name(), LOG_NDELAY | LOG_PID, LOG_USER); -#endif -} - -static void -mesa_log_init(void) -{ - static once_flag once = ONCE_FLAG_INIT; - call_once(&once, mesa_log_init_once); -} - -static inline const char * -level_to_str(enum mesa_log_level l) -{ - switch (l) { - case MESA_LOG_ERROR: return "error"; - case MESA_LOG_WARN: return "warning"; - case MESA_LOG_INFO: return "info"; - case MESA_LOG_DEBUG: return "debug"; - } - - unreachable("bad mesa_log_level"); -} - -enum logger_vasnprintf_affix { - LOGGER_VASNPRINTF_AFFIX_TAG = 1 << 0, - LOGGER_VASNPRINTF_AFFIX_LEVEL = 1 << 1, - LOGGER_VASNPRINTF_AFFIX_NEWLINE = 1 << 2, -}; - -/* Try vsnprintf first and fall back to vasprintf if buf is too small. This - * function handles all errors and never fails. - */ -static char * -logger_vasnprintf(char *buf, - int size, - int affixes, - enum mesa_log_level level, - const char *tag, - const char *format, - va_list in_va) -{ - struct { - char *cur; - int rem; - int total; - bool invalid; - } state = { - .cur = buf, - .rem = size, - }; - - va_list va; - va_copy(va, in_va); - -#define APPEND(state, func, ...) \ - do { \ - int ret = func(state.cur, state.rem, __VA_ARGS__); \ - if (ret < 0) { \ - state.invalid = true; \ - } else { \ - state.total += ret; \ - if (ret >= state.rem) \ - ret = state.rem; \ - state.cur += ret; \ - state.rem -= ret; \ - } \ - } while (false) - - if (affixes & LOGGER_VASNPRINTF_AFFIX_TAG) - APPEND(state, snprintf, "%s: ", tag); - if (affixes & LOGGER_VASNPRINTF_AFFIX_LEVEL) - APPEND(state, snprintf, "%s: ", level_to_str(level)); - - APPEND(state, vsnprintf, format, va); - - if (affixes & LOGGER_VASNPRINTF_AFFIX_NEWLINE) { - if (state.cur == buf || state.cur[-1] != '\n') - APPEND(state, snprintf, "\n"); - } -#undef APPEND - - assert(size >= 64); - if (state.invalid) { - strncpy(buf, "invalid message format", size); - } else if (state.total >= size) { - /* print again into alloc to avoid truncation */ - void *alloc = malloc(state.total + 1); - if (alloc) { - buf = logger_vasnprintf(alloc, state.total + 1, affixes, level, tag, - format, in_va); - assert(buf == alloc); - } else { - /* pretty-truncate the message */ - strncpy(buf + size - 4, "...", 4); - } - } - - va_end(va); - - return buf; -} - -static void -logger_file(enum mesa_log_level level, - const char *tag, - const char *format, - va_list va) -{ - FILE *fp = mesa_log_file; - char local_msg[1024]; - char *msg = logger_vasnprintf(local_msg, sizeof(local_msg), - LOGGER_VASNPRINTF_AFFIX_TAG | - LOGGER_VASNPRINTF_AFFIX_LEVEL | - LOGGER_VASNPRINTF_AFFIX_NEWLINE, - level, tag, format, va); - - fprintf(fp, "%s", msg); - fflush(fp); - - if (msg != local_msg) - free(msg); -} - -#if DETECT_OS_UNIX - -static inline int -level_to_syslog(enum mesa_log_level l) -{ - switch (l) { - case MESA_LOG_ERROR: return LOG_ERR; - case MESA_LOG_WARN: return LOG_WARNING; - case MESA_LOG_INFO: return LOG_INFO; - case MESA_LOG_DEBUG: return LOG_DEBUG; - } - - unreachable("bad mesa_log_level"); -} - -static void -logger_syslog(enum mesa_log_level level, - const char *tag, - const char *format, - va_list va) -{ - char local_msg[1024]; - char *msg = logger_vasnprintf(local_msg, sizeof(local_msg), - LOGGER_VASNPRINTF_AFFIX_TAG, level, tag, format, va); - - syslog(level_to_syslog(level), "%s", msg); - - if (msg != local_msg) - free(msg); -} - -#endif /* DETECT_OS_UNIX */ - -#if DETECT_OS_ANDROID - -static inline android_LogPriority -level_to_android(enum mesa_log_level l) -{ - switch (l) { - case MESA_LOG_ERROR: return ANDROID_LOG_ERROR; - case MESA_LOG_WARN: return ANDROID_LOG_WARN; - case MESA_LOG_INFO: return ANDROID_LOG_INFO; - case MESA_LOG_DEBUG: return ANDROID_LOG_DEBUG; - } - - unreachable("bad mesa_log_level"); -} - -static void -logger_android(enum mesa_log_level level, - const char *tag, - const char *format, - va_list va) -{ - /* Android can truncate/drop messages - * - * - the internal buffer for vsnprintf has a fixed size (usually 1024) - * - the socket to logd is non-blocking - * - * and provides no way to detect. Try our best. - */ - char local_msg[1024]; - char *msg = logger_vasnprintf(local_msg, sizeof(local_msg), 0, level, tag, - format, va); - - __android_log_write(level_to_android(level), tag, msg); - - if (msg != local_msg) - free(msg); - - /* increase the chance of logd doing its part */ - if (mesa_log_control & MESA_LOG_CONTROL_WAIT) - thrd_yield(); -} - -#endif /* DETECT_OS_ANDROID */ - -#if DETECT_OS_WINDOWS - -static void -logger_windbg(enum mesa_log_level level, - const char *tag, - const char *format, - va_list va) -{ - char local_msg[1024]; - char *msg = logger_vasnprintf(local_msg, sizeof(local_msg), - LOGGER_VASNPRINTF_AFFIX_TAG | - LOGGER_VASNPRINTF_AFFIX_LEVEL | - LOGGER_VASNPRINTF_AFFIX_NEWLINE, - level, tag, format, va); - - OutputDebugStringA(msg); - - if (msg != local_msg) - free(msg); -} - -#endif /* DETECT_OS_WINDOWS */ - -/* This is for use with debug functions that take a FILE, such as - * nir_print_shader, although switching to nir_log_shader* is preferred. - */ -FILE * -mesa_log_get_file(void) -{ - mesa_log_init(); - return mesa_log_file; -} - -void -mesa_log(enum mesa_log_level level, const char *tag, const char *format, ...) -{ - va_list va; - - va_start(va, format); - mesa_log_v(level, tag, format, va); - va_end(va); -} - -void -mesa_log_v(enum mesa_log_level level, const char *tag, const char *format, - va_list va) -{ - static const struct { - enum mesa_log_control bit; - void (*log)(enum mesa_log_level level, - const char *tag, - const char *format, - va_list va); - } loggers[] = { - { MESA_LOG_CONTROL_FILE, logger_file }, -#if DETECT_OS_UNIX - { MESA_LOG_CONTROL_SYSLOG, logger_syslog }, -#endif -#if DETECT_OS_ANDROID - { MESA_LOG_CONTROL_ANDROID, logger_android }, -#endif -#if DETECT_OS_WINDOWS - { MESA_LOG_CONTROL_WINDBG, logger_windbg }, -#endif - }; - - mesa_log_init(); - - for (uint32_t i = 0; i < ARRAY_SIZE(loggers); i++) { - if (mesa_log_control & loggers[i].bit) { - va_list copy; - va_copy(copy, va); - loggers[i].log(level, tag, format, copy); - va_end(copy); - } - } -} - -struct log_stream * -_mesa_log_stream_create(enum mesa_log_level level, char *tag) -{ - struct log_stream *stream = ralloc(NULL, struct log_stream); - stream->level = level; - stream->tag = tag; - stream->msg = ralloc_strdup(stream, ""); - stream->pos = 0; - return stream; -} - -void -mesa_log_stream_destroy(struct log_stream *stream) -{ - /* If you left trailing stuff in the log stream, flush it out as a line. */ - if (stream->pos != 0) - mesa_log(stream->level, stream->tag, "%s", stream->msg); - - ralloc_free(stream); -} - -static void -mesa_log_stream_flush(struct log_stream *stream, size_t scan_offset) -{ - char *end; - char *next = stream->msg; - while ((end = strchr(stream->msg + scan_offset, '\n'))) { - *end = 0; - mesa_log(stream->level, stream->tag, "%s", next); - next = end + 1; - scan_offset = next - stream->msg; - } - if (next != stream->msg) { - /* Clear out the lines we printed and move any trailing chars to the start. */ - size_t remaining = stream->msg + stream->pos - next; - memmove(stream->msg, next, remaining); - stream->pos = remaining; - } -} - -void mesa_log_stream_printf(struct log_stream *stream, const char *format, ...) -{ - size_t old_pos = stream->pos; - - va_list va; - va_start(va, format); - ralloc_vasprintf_rewrite_tail(&stream->msg, &stream->pos, format, va); - va_end(va); - - mesa_log_stream_flush(stream, old_pos); -} - -void -_mesa_log_multiline(enum mesa_log_level level, const char *tag, const char *lines) -{ - struct log_stream tmp = { - .level = level, - .tag = tag, - .msg = strdup(lines), - .pos = strlen(lines), - }; - mesa_log_stream_flush(&tmp, 0); - free(tmp.msg); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/log.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/log.h deleted file mode 100644 index 30b1693..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/log.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2017 Google - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef MESA_LOG_H -#define MESA_LOG_H - -#include -#include - -#include "macros.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef MESA_LOG_TAG -#define MESA_LOG_TAG "MESA" -#endif - -enum mesa_log_level { - MESA_LOG_ERROR, - MESA_LOG_WARN, - MESA_LOG_INFO, - MESA_LOG_DEBUG, -}; - -FILE * -mesa_log_get_file(void); - -void PRINTFLIKE(3, 4) -mesa_log(enum mesa_log_level, const char *tag, const char *format, ...); - -void -mesa_log_v(enum mesa_log_level, const char *tag, const char *format, - va_list va); - -#define mesa_loge(fmt, ...) mesa_log(MESA_LOG_ERROR, (MESA_LOG_TAG), (fmt), ##__VA_ARGS__) -#define mesa_logw(fmt, ...) mesa_log(MESA_LOG_WARN, (MESA_LOG_TAG), (fmt), ##__VA_ARGS__) -#define mesa_logi(fmt, ...) mesa_log(MESA_LOG_INFO, (MESA_LOG_TAG), (fmt), ##__VA_ARGS__) -#ifdef DEBUG -#define mesa_logd(fmt, ...) mesa_log(MESA_LOG_DEBUG, (MESA_LOG_TAG), (fmt), ##__VA_ARGS__) -#else -#define mesa_logd(fmt, ...) __mesa_log_use_args((fmt), ##__VA_ARGS__) -#endif - -#define mesa_loge_v(fmt, va) mesa_log_v(MESA_LOG_ERROR, (MESA_LOG_TAG), (fmt), (va)) -#define mesa_logw_v(fmt, va) mesa_log_v(MESA_LOG_WARN, (MESA_LOG_TAG), (fmt), (va)) -#define mesa_logi_v(fmt, va) mesa_log_v(MESA_LOG_INFO, (MESA_LOG_TAG), (fmt), (va)) -#ifdef DEBUG -#define mesa_logd_v(fmt, va) mesa_log_v(MESA_LOG_DEBUG, (MESA_LOG_TAG), (fmt), (va)) -#else -#define mesa_logd_v(fmt, va) __mesa_log_use_args((fmt), (va)) -#endif - -#define mesa_log_once(level, fmt, ...) \ - do \ - { \ - static bool once; \ - if (!once) { \ - once = true; \ - mesa_log(level, (MESA_LOG_TAG), fmt, ##__VA_ARGS__); \ - } \ - } while (0) - -#define mesa_loge_once(fmt, ...) mesa_log_once(MESA_LOG_ERROR, fmt, ##__VA_ARGS__) -#define mesa_logw_once(fmt, ...) mesa_log_once(MESA_LOG_WARN, fmt, ##__VA_ARGS__) -#define mesa_logi_once(fmt, ...) mesa_log_once(MESA_LOG_INFO, fmt, ##__VA_ARGS__) -#define mesa_logd_once(fmt, ...) mesa_log_once(MESA_LOG_DEBUG, fmt, ##__VA_ARGS__) - -struct log_stream { - char *msg; - const char *tag; - size_t pos; - enum mesa_log_level level; -}; - -struct log_stream *_mesa_log_stream_create(enum mesa_log_level level, char *tag); -#define mesa_log_streame() _mesa_log_stream_create(MESA_LOG_ERROR, (MESA_LOG_TAG)) -#define mesa_log_streamw() _mesa_log_stream_create(MESA_LOG_WARN, (MESA_LOG_TAG)) -#define mesa_log_streami() _mesa_log_stream_create(MESA_LOG_INFO, (MESA_LOG_TAG)) -void mesa_log_stream_destroy(struct log_stream *stream); -void mesa_log_stream_printf(struct log_stream *stream, const char *format, ...); - -void _mesa_log_multiline(enum mesa_log_level level, const char *tag, const char *lines); -#define mesa_log_multiline(level, lines) _mesa_log_multiline(level, (MESA_LOG_TAG), lines) - -#ifndef DEBUG -/* Suppres -Wunused */ -static inline void PRINTFLIKE(1, 2) -__mesa_log_use_args(UNUSED const char *format, ...) { } -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* MESA_LOG_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/macros.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/macros.h deleted file mode 100644 index 580fc8d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/macros.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef UTIL_MACROS_H -#define UTIL_MACROS_H - -#include -#if defined(__HAIKU__) && !defined(__cplusplus) -#define static_assert _Static_assert -#endif -#include -#include -#include - -#ifdef _GAMING_XBOX -#define strdup _strdup -#define stricmp _stricmp -#define unlink _unlink -#define access(a, b) _access(a, b) -#endif - -/* Compute the size of an array */ -#ifndef ARRAY_SIZE -# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -#endif - -/* For compatibility with Clang's __has_builtin() */ -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -#ifndef __has_attribute -# define __has_attribute(x) 0 -#endif - -/** - * __builtin_expect macros - */ -#if !defined(HAVE___BUILTIN_EXPECT) -# define __builtin_expect(x, y) (x) -#endif - -#ifndef likely -# ifdef HAVE___BUILTIN_EXPECT -# define likely(x) __builtin_expect(!!(x), 1) -# define unlikely(x) __builtin_expect(!!(x), 0) -# else -# define likely(x) (x) -# define unlikely(x) (x) -# endif -#endif - -/** - * __builtin_types_compatible_p compat - */ -#if defined(__cplusplus) || !defined(HAVE___BUILTIN_TYPES_COMPATIBLE_P) -# define __builtin_types_compatible_p(type1, type2) (1) -#endif - -/* This should match linux gcc cdecl semantics everywhere, so that we - * just codegen one calling convention on all platforms. - */ -#ifdef _MSC_VER -#define UTIL_CDECL __cdecl -#else -#define UTIL_CDECL -#endif - -/** - * Static (compile-time) assertion. - */ -#define STATIC_ASSERT(cond) do { \ - static_assert(cond, #cond); \ -} while (0) - -/** - * container_of - cast a member of a structure out to the containing structure - * @ptr: the pointer to the member. - * @type: the type of the container struct this is embedded in. - * @member: the name of the member within the struct. - */ -#ifndef __GNUC__ - /* a grown-up compiler is required for the extra type checking: */ -# define container_of(ptr, type, member) \ - (type*)((uint8_t *)ptr - offsetof(type, member)) -#else -# define __same_type(a, b) \ - __builtin_types_compatible_p(__typeof__(a), __typeof__(b)) -# define container_of(ptr, type, member) ({ \ - uint8_t *__mptr = (uint8_t *)(ptr); \ - static_assert(__same_type(*(ptr), ((type *)0)->member) || \ - __same_type(*(ptr), void), \ - "pointer type mismatch in container_of()"); \ - ((type *)(__mptr - offsetof(type, member))); \ - }) -#endif - -/** - * Unreachable macro. Useful for suppressing "control reaches end of non-void - * function" warnings. - */ -#if defined(HAVE___BUILTIN_UNREACHABLE) || __has_builtin(__builtin_unreachable) -#define unreachable(str) \ -do { \ - assert(!str); \ - __builtin_unreachable(); \ -} while (0) -#elif defined (_MSC_VER) -#define unreachable(str) \ -do { \ - assert(!str); \ - __assume(0); \ -} while (0) -#else -#define unreachable(str) assert(!str) -#endif - -/** - * Assume macro. Useful for expressing our assumptions to the compiler, - * typically for purposes of silencing warnings. - */ -#if __has_builtin(__builtin_assume) -#define assume(expr) \ -do { \ - assert(expr); \ - __builtin_assume(expr); \ -} while (0) -#elif defined HAVE___BUILTIN_UNREACHABLE -#define assume(expr) ((expr) ? ((void) 0) \ - : (assert(!"assumption failed"), \ - __builtin_unreachable())) -#elif defined (_MSC_VER) -#define assume(expr) __assume(expr) -#else -#define assume(expr) assert(expr) -#endif - -/* Attribute const is used for functions that have no effects other than their - * return value, and only rely on the argument values to compute the return - * value. As a result, calls to it can be CSEed. Note that using memory - * pointed to by the arguments is not allowed for const functions. - */ -#if !defined(__clang__) && defined(HAVE_FUNC_ATTRIBUTE_CONST) -#define ATTRIBUTE_CONST __attribute__((__const__)) -#else -#define ATTRIBUTE_CONST -#endif - -#ifdef HAVE_FUNC_ATTRIBUTE_FLATTEN -#define FLATTEN __attribute__((__flatten__)) -#else -#define FLATTEN -#endif - -#ifdef HAVE_FUNC_ATTRIBUTE_FORMAT -#if defined (__MINGW_PRINTF_FORMAT) -# define PRINTFLIKE(f, a) __attribute__ ((format(__MINGW_PRINTF_FORMAT, f, a))) -#else -# define PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a))) -#endif -#else -#define PRINTFLIKE(f, a) -#endif - -#ifdef HAVE_FUNC_ATTRIBUTE_MALLOC -#define MALLOCLIKE __attribute__((__malloc__)) -#else -#define MALLOCLIKE -#endif - -/* Forced function inlining */ -/* Note: Clang also sets __GNUC__ (see other cases below) */ -#ifndef ALWAYS_INLINE -# if defined(__GNUC__) -# define ALWAYS_INLINE inline __attribute__((always_inline)) -# elif defined(_MSC_VER) -# define ALWAYS_INLINE __forceinline -# else -# define ALWAYS_INLINE inline -# endif -#endif - -/* Used to optionally mark structures with misaligned elements or size as - * packed, to trade off performance for space. - */ -#ifdef HAVE_FUNC_ATTRIBUTE_PACKED -#define PACKED __attribute__((__packed__)) -#else -#define PACKED -#endif - -/* Attribute pure is used for functions that have no effects other than their - * return value. As a result, calls to it can be dead code eliminated. - */ -#ifdef HAVE_FUNC_ATTRIBUTE_PURE -#define ATTRIBUTE_PURE __attribute__((__pure__)) -#else -#define ATTRIBUTE_PURE -#endif - -#ifdef HAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL -#define ATTRIBUTE_RETURNS_NONNULL __attribute__((__returns_nonnull__)) -#else -#define ATTRIBUTE_RETURNS_NONNULL -#endif - -#ifndef NORETURN -# ifdef _MSC_VER -# define NORETURN __declspec(noreturn) -# elif defined HAVE_FUNC_ATTRIBUTE_NORETURN -# define NORETURN __attribute__((__noreturn__)) -# else -# define NORETURN -# endif -#endif - -#ifdef __cplusplus -/** - * Macro function that evaluates to true if T is a trivially - * destructible type -- that is, if its (non-virtual) destructor - * performs no action and all member variables and base classes are - * trivially destructible themselves. - */ -# if defined(__clang__) -# if __has_builtin(__is_trivially_destructible) -# define HAS_TRIVIAL_DESTRUCTOR(T) __is_trivially_destructible(T) -# elif (defined(__has_feature) && __has_feature(has_trivial_destructor)) -# define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) -# endif -# elif defined(__GNUC__) -# if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))) -# define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) -# endif -# elif defined(_MSC_VER) && !defined(__INTEL_COMPILER) -# define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) -# endif -# ifndef HAS_TRIVIAL_DESTRUCTOR - /* It's always safe (if inefficient) to assume that a - * destructor is non-trivial. - */ -# define HAS_TRIVIAL_DESTRUCTOR(T) (false) -# endif -#endif - -/** - * PUBLIC/USED macros - * - * If we build the library with gcc's -fvisibility=hidden flag, we'll - * use the PUBLIC macro to mark functions that are to be exported. - * - * We also need to define a USED attribute, so the optimizer doesn't - * inline a static function that we later use in an alias. - ajax - */ -#ifndef PUBLIC -# if defined(_WIN32) -# define PUBLIC __declspec(dllexport) -# define USED -# elif defined(__GNUC__) -# define PUBLIC __attribute__((visibility("default"))) -# define USED __attribute__((used)) -# else -# define PUBLIC -# define USED -# endif -#endif - -/** - * UNUSED marks variables (or sometimes functions) that have to be defined, - * but are sometimes (or always) unused beyond that. A common case is for - * a function parameter to be used in some build configurations but not others. - * Another case is fallback vfuncs that don't do anything with their params. - * - * Note that this should not be used for identifiers used in `assert()`; - * see ASSERTED below. - */ -#ifdef HAVE_FUNC_ATTRIBUTE_UNUSED -#define UNUSED __attribute__((unused)) -#elif defined (_MSC_VER) -#define UNUSED __pragma(warning(suppress:4100 4101 4189)) -#else -#define UNUSED -#endif - -/** - * Use ASSERTED to indicate that an identifier is unused outside of an `assert()`, - * so that assert-free builds don't get "unused variable" warnings. - */ -#ifdef NDEBUG -#define ASSERTED UNUSED -#else -#define ASSERTED -#endif - -#ifdef HAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT -#define MUST_CHECK __attribute__((warn_unused_result)) -#else -#define MUST_CHECK -#endif - -#if defined(__GNUC__) -#define ATTRIBUTE_NOINLINE __attribute__((noinline)) -#elif defined(_MSC_VER) -#define ATTRIBUTE_NOINLINE __declspec(noinline) -#else -#define ATTRIBUTE_NOINLINE -#endif - -/** - * Check that STRUCT::FIELD can hold MAXVAL. We use a lot of bitfields - * in Mesa/gallium. We have to be sure they're of sufficient size to - * hold the largest expected value. - * Note that with MSVC, enums are signed and enum bitfields need one extra - * high bit (always zero) to ensure the max value is handled correctly. - * This macro will detect that with MSVC, but not GCC. - */ -#define ASSERT_BITFIELD_SIZE(STRUCT, FIELD, MAXVAL) \ - do { \ - ASSERTED STRUCT s; \ - s.FIELD = (MAXVAL); \ - assert((int) s.FIELD == (MAXVAL) && "Insufficient bitfield size!"); \ - } while (0) - - -/** Compute ceiling of integer quotient of A divided by B. */ -#define DIV_ROUND_UP( A, B ) ( ((A) + (B) - 1) / (B) ) - -/** Clamp X to [MIN,MAX]. Turn NaN into MIN, arbitrarily. */ -#define CLAMP( X, MIN, MAX ) ( (X)>(MIN) ? ((X)>(MAX) ? (MAX) : (X)) : (MIN) ) - -/* Syntax sugar occuring frequently in graphics code */ -#define SATURATE( X ) CLAMP(X, 0.0f, 1.0f) - -/** Minimum of two values: */ -#define MIN2( A, B ) ( (A)<(B) ? (A) : (B) ) - -/** Maximum of two values: */ -#define MAX2( A, B ) ( (A)>(B) ? (A) : (B) ) - -/** Minimum and maximum of three values: */ -#define MIN3( A, B, C ) ((A) < (B) ? MIN2(A, C) : MIN2(B, C)) -#define MAX3( A, B, C ) ((A) > (B) ? MAX2(A, C) : MAX2(B, C)) - -/** Align a value to a power of two */ -#define ALIGN_POT(x, pot_align) (((x) + (pot_align) - 1) & ~((pot_align) - 1)) - -/** Checks is a value is a power of two. Does not handle zero. */ -#define IS_POT(v) (((v) & ((v) - 1)) == 0) - -/** Set a single bit */ -#define BITFIELD_BIT(b) (1u << (b)) -/** Set all bits up to excluding bit b */ -#define BITFIELD_MASK(b) \ - ((b) == 32 ? (~0u) : BITFIELD_BIT((b) % 32) - 1) -/** Set count bits starting from bit b */ -#define BITFIELD_RANGE(b, count) \ - (BITFIELD_MASK((b) + (count)) & ~BITFIELD_MASK(b)) - -/** Set a single bit */ -#define BITFIELD64_BIT(b) (1ull << (b)) -/** Set all bits up to excluding bit b */ -#define BITFIELD64_MASK(b) \ - ((b) == 64 ? (~0ull) : BITFIELD64_BIT(b) - 1) -/** Set count bits starting from bit b */ -#define BITFIELD64_RANGE(b, count) \ - (BITFIELD64_MASK((b) + (count)) & ~BITFIELD64_MASK(b)) - -static inline int64_t -u_intN_max(unsigned bit_size) -{ - assert(bit_size <= 64 && bit_size > 0); - return INT64_MAX >> (64 - bit_size); -} - -static inline int64_t -u_intN_min(unsigned bit_size) -{ - /* On 2's compliment platforms, which is every platform Mesa is likely to - * every worry about, stdint.h generally calculated INT##_MIN in this - * manner. - */ - return (-u_intN_max(bit_size)) - 1; -} - -static inline uint64_t -u_uintN_max(unsigned bit_size) -{ - assert(bit_size <= 64 && bit_size > 0); - return UINT64_MAX >> (64 - bit_size); -} - -/* alignas usage - * For struct or union, use alignas(align_size) on any member - * of it will make it aligned to align_size. - * See https://en.cppreference.com/w/c/language/_Alignas for - * details. We can use static_assert and alignof to check if - * the alignment result of alignas(align_size) on struct or - * union is valid. - * For example: - * static_assert(alignof(struct tgsi_exec_machine) == 16, "") - * Also, we can use special code to see the size of the aligned - * struct or union at the compile time with GCC, Clang or MSVC. - * So we can see if the size of union or struct are as expected - * when using alignas(align_size) on its member. - * For example: - * char (*__kaboom)[sizeof(struct tgsi_exec_machine)] = 1; - * can show us the size of struct tgsi_exec_machine at compile - * time. - */ -#ifndef __cplusplus -#ifdef _MSC_VER -#define alignof _Alignof -#define alignas _Alignas -#else -#include -#endif -#endif - -/* Macros for static type-safety checking. - * - * https://clang.llvm.org/docs/ThreadSafetyAnalysis.html - */ - -#if __has_attribute(capability) -typedef int __attribute__((capability("mutex"))) lock_cap_t; - -#define guarded_by(l) __attribute__((guarded_by(l))) -#define acquire_cap(l) __attribute((acquire_capability(l), no_thread_safety_analysis)) -#define release_cap(l) __attribute((release_capability(l), no_thread_safety_analysis)) -#define assert_cap(l) __attribute((assert_capability(l), no_thread_safety_analysis)) -#define requires_cap(l) __attribute((requires_capability(l))) -#define disable_thread_safety_analysis __attribute((no_thread_safety_analysis)) - -#else - -typedef int lock_cap_t; - -#define guarded_by(l) -#define acquire_cap(l) -#define release_cap(l) -#define assert_cap(l) -#define requires_cap(l) -#define disable_thread_safety_analysis - -#endif - -#define DO_PRAGMA(X) _Pragma (#X) - -#if defined(__clang__) -#define PRAGMA_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") -#define PRAGMA_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") -#define PRAGMA_DIAGNOSTIC_ERROR(X) DO_PRAGMA( clang diagnostic error #X ) -#define PRAGMA_DIAGNOSTIC_WARNING(X) DO_PRAGMA( clang diagnostic warning #X ) -#define PRAGMA_DIAGNOSTIC_IGNORED(X) DO_PRAGMA( clang diagnostic ignored #X ) -#elif defined(__GNUC__) -#define PRAGMA_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") -#define PRAGMA_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") -#define PRAGMA_DIAGNOSTIC_ERROR(X) DO_PRAGMA( GCC diagnostic error #X ) -#define PRAGMA_DIAGNOSTIC_WARNING(X) DO_PRAGMA( GCC diagnostic warning #X ) -#define PRAGMA_DIAGNOSTIC_IGNORED(X) DO_PRAGMA( GCC diagnostic ignored #X ) -#else -#define PRAGMA_DIAGNOSTIC_PUSH -#define PRAGMA_DIAGNOSTIC_POP -#define PRAGMA_DIAGNOSTIC_ERROR(X) -#define PRAGMA_DIAGNOSTIC_WARNING(X) -#define PRAGMA_DIAGNOSTIC_IGNORED(X) -#endif - -#define PASTE2(a, b) a ## b -#define PASTE3(a, b, c) a ## b ## c -#define PASTE4(a, b, c, d) a ## b ## c ## d - -#define CONCAT2(a, b) PASTE2(a, b) -#define CONCAT3(a, b, c) PASTE3(a, b, c) -#define CONCAT4(a, b, c, d) PASTE4(a, b, c, d) - -#if defined(__GNUC__) -#define PRAGMA_POISON(X) DO_PRAGMA( GCC poison X ) -#elif defined(__clang__) -#define PRAGMA_POISON(X) DO_PRAGMA( clang poison X ) -#else -#define PRAGMA_POISON -#endif - -#endif /* UTIL_MACROS_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa-sha1.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa-sha1.c deleted file mode 100644 index 03c7ae7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa-sha1.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Copyright © 2007 Carl Worth - * Copyright © 2009 Jeremy Huddleston, Julien Cristau, and Matthieu Herrb - * Copyright © 2009-2010 Mikhail Gusarov - * Copyright © 2012 Yaakov Selkowitz and Keith Packard - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "./sha1/sha1.h" -#include "mesa-sha1.h" -#include -#include - -void -_mesa_sha1_compute(const void *data, size_t size, unsigned char result[20]) -{ - struct mesa_sha1 ctx; - - _mesa_sha1_init(&ctx); - _mesa_sha1_update(&ctx, data, size); - _mesa_sha1_final(&ctx, result); -} - -void -_mesa_sha1_format(char *buf, const unsigned char *sha1) -{ - static const char hex_digits[] = "0123456789abcdef"; - int i; - - for (i = 0; i < 40; i += 2) { - buf[i] = hex_digits[sha1[i >> 1] >> 4]; - buf[i + 1] = hex_digits[sha1[i >> 1] & 0x0f]; - } - buf[i] = '\0'; -} - -/* Convert a hashs string hexidecimal representation into its more compact - * form. - */ -void -_mesa_sha1_hex_to_sha1(unsigned char *buf, const char *hex) -{ - for (unsigned i = 0; i < 20; i++) { - char tmp[3]; - tmp[0] = hex[i * 2]; - tmp[1] = hex[(i * 2) + 1]; - tmp[2] = '\0'; - buf[i] = strtol(tmp, NULL, 16); - } -} - -static void -sha1_to_uint32(const uint8_t sha1[SHA1_DIGEST_LENGTH], - uint32_t out[SHA1_DIGEST_LENGTH32]) -{ - memset(out, 0, SHA1_DIGEST_LENGTH); - - for (unsigned i = 0; i < SHA1_DIGEST_LENGTH; i++) - out[i / 4] |= (uint32_t)sha1[i] << ((i % 4) * 8); -} - -void -_mesa_sha1_print(FILE *f, const uint8_t sha1[SHA1_DIGEST_LENGTH]) -{ - uint32_t u32[SHA1_DIGEST_LENGTH]; - sha1_to_uint32(sha1, u32); - - for (unsigned i = 0; i < SHA1_DIGEST_LENGTH32; i++) { - fprintf(f, i ? ", 0x%08" PRIx32 : "0x%08" PRIx32, u32[i]); - } -} - -bool -_mesa_printed_sha1_equal(const uint8_t sha1[SHA1_DIGEST_LENGTH], - const uint32_t printed_sha1[SHA1_DIGEST_LENGTH32]) -{ - uint32_t u32[SHA1_DIGEST_LENGTH32]; - sha1_to_uint32(sha1, u32); - - return memcmp(u32, printed_sha1, sizeof(u32)) == 0; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa-sha1.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa-sha1.h deleted file mode 100644 index 70c4682..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa-sha1.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef MESA_SHA1_H -#define MESA_SHA1_H - -#include -#include -#include -#include "./sha1/sha1.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define mesa_sha1 _SHA1_CTX -#define SHA1_DIGEST_LENGTH32 (SHA1_DIGEST_LENGTH / 4) - -static inline void -_mesa_sha1_init(struct mesa_sha1 *ctx) -{ - SHA1Init(ctx); -} - -static inline void -_mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, size_t size) -{ - SHA1Update(ctx, (const unsigned char *)data, size); -} - -static inline void -_mesa_sha1_final(struct mesa_sha1 *ctx, unsigned char result[20]) -{ - SHA1Final(result, ctx); -} - -void -_mesa_sha1_format(char *buf, const unsigned char *sha1); - -void -_mesa_sha1_hex_to_sha1(unsigned char *buf, const char *hex); - -void -_mesa_sha1_compute(const void *data, size_t size, unsigned char result[20]); - -void -_mesa_sha1_print(FILE *f, const uint8_t sha1[SHA1_DIGEST_LENGTH]); - -bool -_mesa_printed_sha1_equal(const uint8_t sha1[SHA1_DIGEST_LENGTH], - const uint32_t printed_sha1[SHA1_DIGEST_LENGTH32]); - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db.c deleted file mode 100644 index 7cd0ca4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db.c +++ /dev/null @@ -1,999 +0,0 @@ -/* - * Copyright © 2022 Collabora, Ltd. - * - * Based on Fossilize DB: - * Copyright © 2020 Valve Corporation - * - * SPDX-License-Identifier: MIT - */ - -#include "detect_os.h" - -#if DETECT_OS_WINDOWS == 0 - -#include -#include -#include -#include -#include -#include - -#include "crc32.h" -#include "disk_cache.h" -#include "hash_table.h" -#include "mesa-sha1.h" -#include "mesa_cache_db.h" -#include "os_time.h" -#include "ralloc.h" -#include "u_debug.h" -#include "u_qsort.h" - -#define MESA_CACHE_DB_VERSION 1 -#define MESA_CACHE_DB_MAGIC "MESA_DB" - -struct PACKED mesa_db_file_header { - char magic[8]; - uint32_t version; - uint64_t uuid; -}; - -struct PACKED mesa_cache_db_file_entry { - cache_key key; - uint32_t crc; - uint32_t size; -}; - -struct PACKED mesa_index_db_file_entry { - uint64_t hash; - uint32_t size; - uint64_t last_access_time; - uint64_t cache_db_file_offset; -}; - -struct mesa_index_db_hash_entry { - uint64_t cache_db_file_offset; - uint64_t index_db_file_offset; - uint64_t last_access_time; - uint32_t size; - bool evicted; -}; - -static inline bool mesa_db_seek_end(FILE *file) -{ - return !fseek(file, 0, SEEK_END); -} - -static inline bool mesa_db_seek(FILE *file, long pos) -{ - return !fseek(file, pos, SEEK_SET); -} - -static inline bool mesa_db_seek_cur(FILE *file, long pos) -{ - return !fseek(file, pos, SEEK_CUR); -} - -static inline bool mesa_db_read_data(FILE *file, void *data, size_t size) -{ - return fread(data, 1, size, file) == size; -} -#define mesa_db_read(file, var) mesa_db_read_data(file, var, sizeof(*(var))) - -static inline bool mesa_db_write_data(FILE *file, const void *data, size_t size) -{ - return fwrite(data, 1, size, file) == size; -} -#define mesa_db_write(file, var) mesa_db_write_data(file, var, sizeof(*(var))) - -static inline bool mesa_db_truncate(FILE *file, long pos) -{ - return !ftruncate(fileno(file), pos); -} - -static bool -mesa_db_lock(struct mesa_cache_db *db) -{ - simple_mtx_lock(&db->flock_mtx); - - if (flock(fileno(db->cache.file), LOCK_EX) == -1) - goto unlock_mtx; - - if (flock(fileno(db->index.file), LOCK_EX) == -1) - goto unlock_cache; - - return true; - -unlock_cache: - flock(fileno(db->cache.file), LOCK_UN); -unlock_mtx: - simple_mtx_unlock(&db->flock_mtx); - - return false; -} - -static void -mesa_db_unlock(struct mesa_cache_db *db) -{ - flock(fileno(db->index.file), LOCK_UN); - flock(fileno(db->cache.file), LOCK_UN); - simple_mtx_unlock(&db->flock_mtx); -} - -static uint64_t to_mesa_cache_db_hash(const uint8_t *cache_key_160bit) -{ - uint64_t hash = 0; - - for (unsigned i = 0; i < 8; i++) - hash |= ((uint64_t)cache_key_160bit[i]) << i * 8; - - return hash; -} - -static uint64_t -mesa_db_generate_uuid(void) -{ - /* This simple UUID implementation is sufficient for our needs - * because UUID is updated rarely. It's nice to make UUID meaningful - * and incremental by adding the timestamp to it, which also prevents - * the potential collisions. */ - return ((os_time_get() / 1000000) << 32) | rand(); -} - -static bool -mesa_db_read_header(FILE *file, struct mesa_db_file_header *header) -{ - rewind(file); - fflush(file); - - if (!mesa_db_read(file, header)) - return false; - - if (strncmp(header->magic, MESA_CACHE_DB_MAGIC, sizeof(header->magic)) || - header->version != MESA_CACHE_DB_VERSION || !header->uuid) - return false; - - return true; -} - -static bool -mesa_db_load_header(struct mesa_cache_db_file *db_file) -{ - struct mesa_db_file_header header; - - if (!mesa_db_read_header(db_file->file, &header)) - return false; - - db_file->uuid = header.uuid; - - return true; -} - -static bool mesa_db_uuid_changed(struct mesa_cache_db *db) -{ - struct mesa_db_file_header cache_header; - struct mesa_db_file_header index_header; - - if (!mesa_db_read_header(db->cache.file, &cache_header) || - !mesa_db_read_header(db->index.file, &index_header) || - cache_header.uuid != index_header.uuid || - cache_header.uuid != db->uuid) - return true; - - return false; -} - -static bool -mesa_db_write_header(struct mesa_cache_db_file *db_file, - uint64_t uuid, bool reset) -{ - struct mesa_db_file_header header; - - rewind(db_file->file); - - sprintf(header.magic, "MESA_DB"); - header.version = MESA_CACHE_DB_VERSION; - header.uuid = uuid; - - if (!mesa_db_write(db_file->file, &header)) - return false; - - if (reset) { - if (!mesa_db_truncate(db_file->file, ftell(db_file->file))) - return false; - } - - fflush(db_file->file); - - return true; -} - -/* Wipe out all database cache files. - * - * Whenever we get an unmanageable error on reading or writing to the - * database file, wipe out the whole database and start over. All the - * cached entries will be lost, but the broken cache will be auto-repaired - * reliably. Normally cache shall never get corrupted and losing cache - * entries is acceptable, hence it's more practical to repair DB using - * the simplest method. - */ -static bool -mesa_db_zap(struct mesa_cache_db *db) -{ - /* Disable cache to prevent the recurring faults */ - db->alive = false; - - /* Zap corrupted database files to start over from a clean slate */ - if (!mesa_db_truncate(db->cache.file, 0) || - !mesa_db_truncate(db->index.file, 0)) - return false; - - fflush(db->cache.file); - fflush(db->index.file); - - return true; -} - -static bool -mesa_db_index_entry_valid(struct mesa_index_db_file_entry *entry) -{ - return entry->size && entry->hash && - (int64_t)entry->cache_db_file_offset >= sizeof(struct mesa_db_file_header); -} - -static bool -mesa_db_cache_entry_valid(struct mesa_cache_db_file_entry *entry) -{ - return entry->size && entry->crc; -} - -static bool -mesa_db_update_index(struct mesa_cache_db *db) -{ - struct mesa_index_db_hash_entry *hash_entry; - struct mesa_index_db_file_entry index_entry; - size_t file_length; - - if (!mesa_db_seek_end(db->index.file)) - return false; - - file_length = ftell(db->index.file); - - if (!mesa_db_seek(db->index.file, db->index.offset)) - return false; - - while (db->index.offset < file_length) { - if (!mesa_db_read(db->index.file, &index_entry)) - break; - - /* Check whether the index entry looks valid or we have a corrupted DB */ - if (!mesa_db_index_entry_valid(&index_entry)) - break; - - hash_entry = ralloc(db->mem_ctx, struct mesa_index_db_hash_entry); - if (!hash_entry) - break; - - hash_entry->cache_db_file_offset = index_entry.cache_db_file_offset; - hash_entry->index_db_file_offset = db->index.offset; - hash_entry->last_access_time = index_entry.last_access_time; - hash_entry->size = index_entry.size; - - _mesa_hash_table_u64_insert(db->index_db, index_entry.hash, hash_entry); - - db->index.offset += sizeof(index_entry); - } - - if (!mesa_db_seek(db->index.file, db->index.offset)) - return false; - - return db->index.offset == file_length; -} - -static void -mesa_db_hash_table_reset(struct mesa_cache_db *db) -{ - _mesa_hash_table_u64_clear(db->index_db); - ralloc_free(db->mem_ctx); - db->mem_ctx = ralloc_context(NULL); -} - -static bool -mesa_db_recreate_files(struct mesa_cache_db *db) -{ - db->uuid = mesa_db_generate_uuid(); - - if (!mesa_db_write_header(&db->cache, db->uuid, true) || - !mesa_db_write_header(&db->index, db->uuid, true)) - return false; - - return true; -} - -static bool -mesa_db_load(struct mesa_cache_db *db, bool reload) -{ - /* reloading must be done under the held lock */ - if (!reload) { - if (!mesa_db_lock(db)) - return false; - } - - /* If file headers are invalid, then zap database files and start over */ - if (!mesa_db_load_header(&db->cache) || - !mesa_db_load_header(&db->index) || - db->cache.uuid != db->index.uuid) { - - /* This is unexpected to happen on reload, bail out */ - if (reload) - goto fail; - - if (!mesa_db_recreate_files(db)) - goto fail; - } else { - db->uuid = db->cache.uuid; - } - - db->index.offset = ftell(db->index.file); - - if (reload) - mesa_db_hash_table_reset(db); - - if (!mesa_db_update_index(db)) - goto fail; - - if (!reload) - mesa_db_unlock(db); - - db->alive = true; - - return true; - -fail: - if (!reload) - mesa_db_unlock(db); - - return false; -} - -static bool -mesa_db_reload(struct mesa_cache_db *db) -{ - fflush(db->cache.file); - fflush(db->index.file); - - return mesa_db_load(db, true); -} - -static void -touch_file(const char* path) -{ - close(open(path, O_CREAT | O_CLOEXEC, 0644)); -} - -static bool -mesa_db_open_file(struct mesa_cache_db_file *db_file, - const char *cache_path, - const char *filename) -{ - if (asprintf(&db_file->path, "%s/%s", cache_path, filename) == -1) - return false; - - /* The fopen("r+b") mode doesn't auto-create new file, hence we need to - * explicitly create the file first. - */ - touch_file(db_file->path); - - db_file->file = fopen(db_file->path, "r+b"); - if (!db_file->file) { - free(db_file->path); - return false; - } - - return true; -} - -static void -mesa_db_close_file(struct mesa_cache_db_file *db_file) -{ - fclose(db_file->file); - free(db_file->path); -} - -static bool -mesa_db_remove_file(struct mesa_cache_db_file *db_file, - const char *cache_path, - const char *filename) -{ - if (asprintf(&db_file->path, "%s/%s", cache_path, filename) == -1) - return false; - - unlink(db_file->path); - - return true; -} - -static int -entry_sort_lru(const void *_a, const void *_b, void *arg) -{ - const struct mesa_index_db_hash_entry *a = *((const struct mesa_index_db_hash_entry **)_a); - const struct mesa_index_db_hash_entry *b = *((const struct mesa_index_db_hash_entry **)_b); - - /* In practice it's unlikely that we will get two entries with the - * same timestamp, but technically it's possible to happen if OS - * timer's resolution is low. */ - if (a->last_access_time == b->last_access_time) - return 0; - - return a->last_access_time > b->last_access_time ? 1 : -1; -} - -static int -entry_sort_offset(const void *_a, const void *_b, void *arg) -{ - const struct mesa_index_db_hash_entry *a = *((const struct mesa_index_db_hash_entry **)_a); - const struct mesa_index_db_hash_entry *b = *((const struct mesa_index_db_hash_entry **)_b); - struct mesa_cache_db *db = arg; - - /* Two entries will never have the identical offset, otherwise DB is - * corrupted. */ - if (a->cache_db_file_offset == b->cache_db_file_offset) - mesa_db_zap(db); - - return a->cache_db_file_offset > b->cache_db_file_offset ? 1 : -1; -} - -static uint32_t blob_file_size(uint32_t blob_size) -{ - return sizeof(struct mesa_cache_db_file_entry) + blob_size; -} - -static bool -mesa_db_compact(struct mesa_cache_db *db, int64_t blob_size, - struct mesa_index_db_hash_entry *remove_entry) -{ - uint32_t num_entries, buffer_size = sizeof(struct mesa_index_db_file_entry); - struct mesa_db_file_header cache_header, index_header; - FILE *compacted_cache = NULL, *compacted_index = NULL; - struct mesa_index_db_file_entry index_entry; - struct mesa_index_db_hash_entry **entries; - bool success = false, compact = false; - void *buffer = NULL; - unsigned int i = 0; - - /* reload index to sync the last access times */ - if (!remove_entry && !mesa_db_reload(db)) - return false; - - num_entries = _mesa_hash_table_num_entries(db->index_db->table); - entries = calloc(num_entries, sizeof(*entries)); - if (!entries) - return false; - - compacted_cache = fopen(db->cache.path, "r+b"); - compacted_index = fopen(db->index.path, "r+b"); - if (!compacted_cache || !compacted_index) - goto cleanup; - - /* The database file has been replaced if UUID changed. We opened - * some other cache, stop processing this database. */ - if (!mesa_db_read_header(compacted_cache, &cache_header) || - !mesa_db_read_header(compacted_index, &index_header) || - cache_header.uuid != db->uuid || - index_header.uuid != db->uuid) - goto cleanup; - - hash_table_foreach(db->index_db->table, entry) { - entries[i] = entry->data; - entries[i]->evicted = (entries[i] == remove_entry); - buffer_size = MAX2(buffer_size, blob_file_size(entries[i]->size)); - i++; - } - - util_qsort_r(entries, num_entries, sizeof(*entries), - entry_sort_lru, db); - - for (i = 0; blob_size > 0 && i < num_entries; i++) { - blob_size -= blob_file_size(entries[i]->size); - entries[i]->evicted = true; - } - - util_qsort_r(entries, num_entries, sizeof(*entries), - entry_sort_offset, db); - - /* entry_sort_offset() may zap the database */ - if (!db->alive) - goto cleanup; - - buffer = malloc(buffer_size); - if (!buffer) - goto cleanup; - - /* Mark cache file invalid by writing zero-UUID header. If compaction will - * fail, then the file will remain to be invalid since we can't repair it. */ - if (!mesa_db_write_header(&db->cache, 0, false) || - !mesa_db_write_header(&db->index, 0, false)) - goto cleanup; - - /* Sync the file pointers */ - if (!mesa_db_seek(compacted_cache, ftell(db->cache.file)) || - !mesa_db_seek(compacted_index, ftell(db->index.file))) - goto cleanup; - - /* Do the compaction */ - for (i = 0; i < num_entries; i++) { - blob_size = blob_file_size(entries[i]->size); - - /* Sanity-check the cache-read offset */ - if (ftell(db->cache.file) != entries[i]->cache_db_file_offset) - goto cleanup; - - if (entries[i]->evicted) { - /* Jump over the evicted entry */ - if (!mesa_db_seek_cur(db->cache.file, blob_size) || - !mesa_db_seek_cur(db->index.file, sizeof(index_entry))) - goto cleanup; - - compact = true; - continue; - } - - if (compact) { - /* Compact the cache file */ - if (!mesa_db_read_data(db->cache.file, buffer, blob_size) || - !mesa_db_cache_entry_valid(buffer) || - !mesa_db_write_data(compacted_cache, buffer, blob_size)) - goto cleanup; - - /* Compact the index file */ - if (!mesa_db_read(db->index.file, &index_entry) || - !mesa_db_index_entry_valid(&index_entry) || - index_entry.cache_db_file_offset != entries[i]->cache_db_file_offset || - index_entry.size != entries[i]->size) - goto cleanup; - - index_entry.cache_db_file_offset = ftell(compacted_cache) - blob_size; - - if (!mesa_db_write(compacted_index, &index_entry)) - goto cleanup; - } else { - /* Sanity-check the cache-write offset */ - if (ftell(compacted_cache) != entries[i]->cache_db_file_offset) - goto cleanup; - - /* Jump over the unchanged entry */ - if (!mesa_db_seek_cur(db->index.file, sizeof(index_entry)) || - !mesa_db_seek_cur(compacted_index, sizeof(index_entry)) || - !mesa_db_seek_cur(db->cache.file, blob_size) || - !mesa_db_seek_cur(compacted_cache, blob_size)) - goto cleanup; - } - } - - fflush(compacted_cache); - fflush(compacted_index); - - /* Cut off the the freed space left after compaction */ - if (!mesa_db_truncate(db->cache.file, ftell(compacted_cache)) || - !mesa_db_truncate(db->index.file, ftell(compacted_index))) - goto cleanup; - - /* Set the new UUID to let all cache readers know that the cache was changed */ - db->uuid = mesa_db_generate_uuid(); - - if (!mesa_db_write_header(&db->cache, db->uuid, false) || - !mesa_db_write_header(&db->index, db->uuid, false)) - goto cleanup; - - success = true; - -cleanup: - free(buffer); - if (compacted_index) - fclose(compacted_index); - if (compacted_cache) - fclose(compacted_cache); - free(entries); - - /* reload compacted index */ - if (success && !mesa_db_reload(db)) - success = false; - - return success; -} - -bool -mesa_cache_db_open(struct mesa_cache_db *db, const char *cache_path) -{ - if (!mesa_db_open_file(&db->cache, cache_path, "mesa_cache.db")) - return false; - - if (!mesa_db_open_file(&db->index, cache_path, "mesa_cache.idx")) - goto close_cache; - - db->mem_ctx = ralloc_context(NULL); - if (!db->mem_ctx) - goto close_index; - - simple_mtx_init(&db->flock_mtx, mtx_plain); - - db->index_db = _mesa_hash_table_u64_create(NULL); - if (!db->index_db) - goto destroy_mtx; - - if (!mesa_db_load(db, false)) - goto destroy_hash; - - return true; - -destroy_hash: - _mesa_hash_table_u64_destroy(db->index_db); -destroy_mtx: - simple_mtx_destroy(&db->flock_mtx); - - ralloc_free(db->mem_ctx); -close_index: - mesa_db_close_file(&db->index); -close_cache: - mesa_db_close_file(&db->cache); - - return false; -} - -bool -mesa_db_wipe_path(const char *cache_path) -{ - struct mesa_cache_db db = {0}; - bool success = true; - - if (!mesa_db_remove_file(&db.cache, cache_path, "mesa_cache.db") || - !mesa_db_remove_file(&db.index, cache_path, "mesa_cache.idx")) - success = false; - - free(db.cache.path); - free(db.index.path); - - return success; -} - -void -mesa_cache_db_close(struct mesa_cache_db *db) -{ - _mesa_hash_table_u64_destroy(db->index_db); - simple_mtx_destroy(&db->flock_mtx); - ralloc_free(db->mem_ctx); - - mesa_db_close_file(&db->index); - mesa_db_close_file(&db->cache); -} - -void -mesa_cache_db_set_size_limit(struct mesa_cache_db *db, - uint64_t max_cache_size) -{ - db->max_cache_size = max_cache_size; -} - -unsigned int -mesa_cache_db_file_entry_size(void) -{ - return sizeof(struct mesa_cache_db_file_entry); -} - -void * -mesa_cache_db_read_entry(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit, - size_t *size) -{ - uint64_t hash = to_mesa_cache_db_hash(cache_key_160bit); - struct mesa_cache_db_file_entry cache_entry; - struct mesa_index_db_file_entry index_entry; - struct mesa_index_db_hash_entry *hash_entry; - void *data = NULL; - - if (!mesa_db_lock(db)) - return NULL; - - if (!db->alive) - goto fail; - - if (mesa_db_uuid_changed(db) && !mesa_db_reload(db)) - goto fail_fatal; - - if (!mesa_db_update_index(db)) - goto fail_fatal; - - hash_entry = _mesa_hash_table_u64_search(db->index_db, hash); - if (!hash_entry) - goto fail; - - if (!mesa_db_seek(db->cache.file, hash_entry->cache_db_file_offset) || - !mesa_db_read(db->cache.file, &cache_entry) || - !mesa_db_cache_entry_valid(&cache_entry)) - goto fail_fatal; - - if (memcmp(cache_entry.key, cache_key_160bit, sizeof(cache_entry.key))) - goto fail; - - data = malloc(cache_entry.size); - if (!data) - goto fail; - - if (!mesa_db_read_data(db->cache.file, data, cache_entry.size) || - util_hash_crc32(data, cache_entry.size) != cache_entry.crc) - goto fail_fatal; - - if (!mesa_db_seek(db->index.file, hash_entry->index_db_file_offset) || - !mesa_db_read(db->index.file, &index_entry) || - !mesa_db_index_entry_valid(&index_entry) || - index_entry.cache_db_file_offset != hash_entry->cache_db_file_offset || - index_entry.size != hash_entry->size) - goto fail_fatal; - - index_entry.last_access_time = os_time_get_nano(); - hash_entry->last_access_time = index_entry.last_access_time; - - if (!mesa_db_seek(db->index.file, hash_entry->index_db_file_offset) || - !mesa_db_write(db->index.file, &index_entry)) - goto fail_fatal; - - fflush(db->index.file); - - mesa_db_unlock(db); - - *size = cache_entry.size; - - return data; - -fail_fatal: - mesa_db_zap(db); -fail: - free(data); - - mesa_db_unlock(db); - - return NULL; -} - -static bool -mesa_cache_db_has_space_locked(struct mesa_cache_db *db, size_t blob_size) -{ - return ftell(db->cache.file) + blob_file_size(blob_size) - - sizeof(struct mesa_db_file_header) <= db->max_cache_size; -} - -static size_t -mesa_cache_db_eviction_size(struct mesa_cache_db *db) -{ - return db->max_cache_size / 2 - sizeof(struct mesa_db_file_header); -} - -bool -mesa_cache_db_entry_write(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit, - const void *blob, size_t blob_size) -{ - uint64_t hash = to_mesa_cache_db_hash(cache_key_160bit); - struct mesa_index_db_hash_entry *hash_entry = NULL; - struct mesa_cache_db_file_entry cache_entry; - struct mesa_index_db_file_entry index_entry; - - if (!mesa_db_lock(db)) - return false; - - if (!db->alive) - goto fail; - - if (mesa_db_uuid_changed(db) && !mesa_db_reload(db)) - goto fail_fatal; - - if (!mesa_db_seek_end(db->cache.file)) - goto fail_fatal; - - if (!mesa_cache_db_has_space_locked(db, blob_size)) { - if (!mesa_db_compact(db, MAX2(blob_size, mesa_cache_db_eviction_size(db)), - NULL)) - goto fail_fatal; - } else { - if (!mesa_db_update_index(db)) - goto fail_fatal; - } - - hash_entry = _mesa_hash_table_u64_search(db->index_db, hash); - if (hash_entry) { - hash_entry = NULL; - goto fail; - } - - if (!mesa_db_seek_end(db->cache.file) || - !mesa_db_seek_end(db->index.file)) - goto fail_fatal; - - memcpy(cache_entry.key, cache_key_160bit, sizeof(cache_entry.key)); - cache_entry.crc = util_hash_crc32(blob, blob_size); - cache_entry.size = blob_size; - - index_entry.hash = hash; - index_entry.size = blob_size; - index_entry.last_access_time = os_time_get_nano(); - index_entry.cache_db_file_offset = ftell(db->cache.file); - - hash_entry = ralloc(db->mem_ctx, struct mesa_index_db_hash_entry); - if (!hash_entry) - goto fail; - - hash_entry->cache_db_file_offset = index_entry.cache_db_file_offset; - hash_entry->index_db_file_offset = ftell(db->index.file); - hash_entry->last_access_time = index_entry.last_access_time; - hash_entry->size = index_entry.size; - - if (!mesa_db_write(db->cache.file, &cache_entry) || - !mesa_db_write_data(db->cache.file, blob, blob_size) || - !mesa_db_write(db->index.file, &index_entry)) - goto fail_fatal; - - fflush(db->cache.file); - fflush(db->index.file); - - db->index.offset = ftell(db->index.file); - - _mesa_hash_table_u64_insert(db->index_db, hash, hash_entry); - - mesa_db_unlock(db); - - return true; - -fail_fatal: - mesa_db_zap(db); -fail: - mesa_db_unlock(db); - - if (hash_entry) - ralloc_free(hash_entry); - - return false; -} - -bool -mesa_cache_db_entry_remove(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit) -{ - uint64_t hash = to_mesa_cache_db_hash(cache_key_160bit); - struct mesa_cache_db_file_entry cache_entry; - struct mesa_index_db_hash_entry *hash_entry; - - if (!mesa_db_lock(db)) - return NULL; - - if (!db->alive) - goto fail; - - if (mesa_db_uuid_changed(db) && !mesa_db_reload(db)) - goto fail_fatal; - - if (!mesa_db_update_index(db)) - goto fail_fatal; - - hash_entry = _mesa_hash_table_u64_search(db->index_db, hash); - if (!hash_entry) - goto fail; - - if (!mesa_db_seek(db->cache.file, hash_entry->cache_db_file_offset) || - !mesa_db_read(db->cache.file, &cache_entry) || - !mesa_db_cache_entry_valid(&cache_entry)) - goto fail_fatal; - - if (memcmp(cache_entry.key, cache_key_160bit, sizeof(cache_entry.key))) - goto fail; - - if (!mesa_db_compact(db, 0, hash_entry)) - goto fail_fatal; - - mesa_db_unlock(db); - - return true; - -fail_fatal: - mesa_db_zap(db); -fail: - mesa_db_unlock(db); - - return false; -} - -bool -mesa_cache_db_has_space(struct mesa_cache_db *db, size_t blob_size) -{ - bool has_space; - - if (!mesa_db_lock(db)) - return false; - - if (!mesa_db_seek_end(db->cache.file)) - goto fail_fatal; - - has_space = mesa_cache_db_has_space_locked(db, blob_size); - - mesa_db_unlock(db); - - return has_space; - -fail_fatal: - mesa_db_zap(db); - mesa_db_unlock(db); - - return false; -} - -static uint64_t -mesa_cache_db_eviction_2x_score_period(void) -{ - const uint64_t nsec_per_sec = 1000000000ull; - static uint64_t period = 0; - - if (period) - return period; - - period = debug_get_num_option("MESA_DISK_CACHE_DATABASE_EVICTION_SCORE_2X_PERIOD", - 30 * 24 * 60 * 60) * nsec_per_sec; - - return period; -} - -double -mesa_cache_db_eviction_score(struct mesa_cache_db *db) -{ - int64_t eviction_size = mesa_cache_db_eviction_size(db); - struct mesa_index_db_hash_entry **entries; - unsigned num_entries, i = 0; - double eviction_score = 0; - - if (!mesa_db_lock(db)) - return 0; - - if (!db->alive) - goto fail; - - if (!mesa_db_reload(db)) - goto fail_fatal; - - num_entries = _mesa_hash_table_num_entries(db->index_db->table); - entries = calloc(num_entries, sizeof(*entries)); - if (!entries) - goto fail; - - hash_table_foreach(db->index_db->table, entry) - entries[i++] = entry->data; - - util_qsort_r(entries, num_entries, sizeof(*entries), - entry_sort_lru, db); - - for (i = 0; eviction_size > 0 && i < num_entries; i++) { - uint64_t entry_age = os_time_get_nano() - entries[i]->last_access_time; - unsigned entry_size = blob_file_size(entries[i]->size); - - /* Eviction score is a sum of weighted cache entry sizes, - * where weight doubles for each month of entry's age. - */ - uint64_t period = mesa_cache_db_eviction_2x_score_period(); - double entry_scale = 1 + (double)entry_age / period; - double entry_score = entry_size * entry_scale; - - eviction_score += entry_score; - eviction_size -= entry_size; - } - - free(entries); - - mesa_db_unlock(db); - - return eviction_score; - -fail_fatal: - mesa_db_zap(db); -fail: - mesa_db_unlock(db); - - return 0; -} - -#endif /* DETECT_OS_WINDOWS */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db.h deleted file mode 100644 index f6097d8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright © 2022 Collabora, Ltd. - * - * Based on Fossilize DB: - * Copyright © 2020 Valve Corporation - * - * SPDX-License-Identifier: MIT - */ - -#ifndef MESA_CACHE_DB_H -#define MESA_CACHE_DB_H - -#include -#include -#include - -#include "detect_os.h" -#include "simple_mtx.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct mesa_cache_db_file { - FILE *file; - char *path; - off_t offset; - uint64_t uuid; -}; - -struct mesa_cache_db { - struct hash_table_u64 *index_db; - struct mesa_cache_db_file cache; - struct mesa_cache_db_file index; - uint64_t max_cache_size; - simple_mtx_t flock_mtx; - void *mem_ctx; - uint64_t uuid; - bool alive; -}; - -#if DETECT_OS_WINDOWS == 0 -bool -mesa_cache_db_open(struct mesa_cache_db *db, const char *cache_path); - -void -mesa_cache_db_close(struct mesa_cache_db *db); - -void -mesa_cache_db_set_size_limit(struct mesa_cache_db *db, - uint64_t max_cache_size); - -unsigned int -mesa_cache_db_file_entry_size(void); - -void * -mesa_cache_db_read_entry(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit, - size_t *size); - -bool -mesa_cache_db_entry_write(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit, - const void *blob, size_t blob_size); - -bool -mesa_cache_db_entry_remove(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit); - -bool -mesa_db_wipe_path(const char *cache_path); - -bool -mesa_cache_db_has_space(struct mesa_cache_db *db, size_t blob_size); - -double -mesa_cache_db_eviction_score(struct mesa_cache_db *db); -#else -static inline bool -mesa_cache_db_open(struct mesa_cache_db *db, const char *cache_path) -{ - return false; -} - -static inline void -mesa_cache_db_close(struct mesa_cache_db *db) -{ -} - -static inline void -mesa_cache_db_set_size_limit(struct mesa_cache_db *db, - uint64_t max_cache_size) -{ -} - -static inline unsigned int -mesa_cache_db_file_entry_size(void) -{ - return 0; -} - -static inline void * -mesa_cache_db_read_entry(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit, - size_t *size) -{ - return NULL; -} - -static inline bool -mesa_cache_db_entry_write(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit, - const void *blob, size_t blob_size) -{ - return false; -} - -static inline bool -mesa_cache_db_entry_remove(struct mesa_cache_db *db, - const uint8_t *cache_key_160bit) -{ - return false; -} - -static inline bool -mesa_db_wipe_path(const char *cache_path) -{ - return false; -} - -static inline bool -mesa_cache_db_has_space(struct mesa_cache_db *db, size_t blob_size) -{ - return false; -} - -static inline double -mesa_cache_db_eviction_score(struct mesa_cache_db *db) -{ - return 0; -} -#endif /* DETECT_OS_WINDOWS */ - -#ifdef __cplusplus -} -#endif - -#endif /* MESA_CACHE_DB_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db_multipart.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db_multipart.c deleted file mode 100644 index 39605cc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db_multipart.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright © 2022 Collabora, Ltd. - * - * SPDX-License-Identifier: MIT - */ - -#include - -#include "detect_os.h" -#include "string.h" -#include "mesa_cache_db_multipart.h" -#include "u_debug.h" - -bool -mesa_cache_db_multipart_open(struct mesa_cache_db_multipart *db, - const char *cache_path) -{ -#if DETECT_OS_WINDOWS - return false; -#else - char *part_path = NULL; - unsigned int i; - - db->num_parts = debug_get_num_option("MESA_DISK_CACHE_DATABASE_NUM_PARTS", 50); - - db->parts = calloc(db->num_parts, sizeof(*db->parts)); - if (!db->parts) - return false; - - for (i = 0; i < db->num_parts; i++) { - bool db_opened = false; - - if (asprintf(&part_path, "%s/part%u", cache_path, i) == -1) - goto close_db; - - if (mkdir(part_path, 0755) == -1 && errno != EEXIST) - goto free_path; - - /* DB opening may fail only in a case of a severe problem, - * like IO error. - */ - db_opened = mesa_cache_db_open(&db->parts[i], part_path); - if (!db_opened) - goto free_path; - - free(part_path); - } - - /* remove old pre multi-part cache */ - mesa_db_wipe_path(cache_path); - - return true; - -free_path: - free(part_path); -close_db: - while (i--) - mesa_cache_db_close(&db->parts[i]); - - free(db->parts); - - return false; -#endif -} - -void -mesa_cache_db_multipart_close(struct mesa_cache_db_multipart *db) -{ - while (db->num_parts--) - mesa_cache_db_close(&db->parts[db->num_parts]); - - free(db->parts); -} - -void -mesa_cache_db_multipart_set_size_limit(struct mesa_cache_db_multipart *db, - uint64_t max_cache_size) -{ - for (unsigned int i = 0; i < db->num_parts; i++) - mesa_cache_db_set_size_limit(&db->parts[i], - max_cache_size / db->num_parts); -} - -void * -mesa_cache_db_multipart_read_entry(struct mesa_cache_db_multipart *db, - const uint8_t *cache_key_160bit, - size_t *size) -{ - unsigned last_read_part = db->last_read_part; - - for (unsigned int i = 0; i < db->num_parts; i++) { - unsigned int part = (last_read_part + i) % db->num_parts; - - void *cache_item = mesa_cache_db_read_entry(&db->parts[part], - cache_key_160bit, size); - if (cache_item) { - /* Likely that the next entry lookup will hit the same DB part. */ - db->last_read_part = part; - return cache_item; - } - } - - return NULL; -} - -static unsigned -mesa_cache_db_multipart_select_victim_part(struct mesa_cache_db_multipart *db) -{ - double best_score = 0, score; - unsigned victim = 0; - - for (unsigned int i = 0; i < db->num_parts; i++) { - score = mesa_cache_db_eviction_score(&db->parts[i]); - if (score > best_score) { - best_score = score; - victim = i; - } - } - - return victim; -} - -bool -mesa_cache_db_multipart_entry_write(struct mesa_cache_db_multipart *db, - const uint8_t *cache_key_160bit, - const void *blob, size_t blob_size) -{ - unsigned last_written_part = db->last_written_part; - int wpart = -1; - - for (unsigned int i = 0; i < db->num_parts; i++) { - unsigned int part = (last_written_part + i) % db->num_parts; - - /* Note that each DB part has own locking. */ - if (mesa_cache_db_has_space(&db->parts[part], blob_size)) { - wpart = part; - break; - } - } - - /* All DB parts are full. Writing to a full DB part will auto-trigger - * eviction of LRU cache entries from the part. Select DB part that - * contains majority of LRU cache entries. - */ - if (wpart < 0) - wpart = mesa_cache_db_multipart_select_victim_part(db); - - db->last_written_part = wpart; - - return mesa_cache_db_entry_write(&db->parts[wpart], cache_key_160bit, - blob, blob_size); -} - -void -mesa_cache_db_multipart_entry_remove(struct mesa_cache_db_multipart *db, - const uint8_t *cache_key_160bit) -{ - for (unsigned int i = 0; i < db->num_parts; i++) - mesa_cache_db_entry_remove(&db->parts[i], cache_key_160bit); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db_multipart.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db_multipart.h deleted file mode 100644 index b3fda91..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/mesa_cache_db_multipart.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright © 2022 Collabora, Ltd. - * - * SPDX-License-Identifier: MIT - */ - -#ifndef MESA_CACHE_DB_MULTIPART_H -#define MESA_CACHE_DB_MULTIPART_H - -#include "mesa_cache_db.h" - -struct mesa_cache_db_multipart { - struct mesa_cache_db *parts; - unsigned int num_parts; - volatile unsigned int last_read_part; - volatile unsigned int last_written_part; -}; - -bool -mesa_cache_db_multipart_open(struct mesa_cache_db_multipart *db, - const char *cache_path); - -void -mesa_cache_db_multipart_close(struct mesa_cache_db_multipart *db); - -void -mesa_cache_db_multipart_set_size_limit(struct mesa_cache_db_multipart *db, - uint64_t max_cache_size); - -void * -mesa_cache_db_multipart_read_entry(struct mesa_cache_db_multipart *db, - const uint8_t *cache_key_160bit, - size_t *size); - -bool -mesa_cache_db_multipart_entry_write(struct mesa_cache_db_multipart *db, - const uint8_t *cache_key_160bit, - const void *blob, size_t blob_size); - -void -mesa_cache_db_multipart_entry_remove(struct mesa_cache_db_multipart *db, - const uint8_t *cache_key_160bit); - -#endif /* MESA_CACHE_DB_MULTIPART_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/meson.build b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/meson.build deleted file mode 100644 index e74b187..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/meson.build +++ /dev/null @@ -1,428 +0,0 @@ -# Copyright © 2017 Intel Corporation - -# 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 THE -# AUTHORS OR COPYRIGHT HOLDERS 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. - -# inc_util only depends inc_include, this folder and nothing else under src -# so we use include_directories('..') instead of inc_src to tell the fact -# util is self contained. -inc_util = [inc_include, include_directories('..')] - -subdir('format') - -files_mesa_util = files( - 'anon_file.h', - 'anon_file.c', - 'bigmath.h', - 'bitscan.c', - 'bitscan.h', - 'bitset.h', - 'blob.c', - 'blob.h', - 'build_id.c', - 'build_id.h', - 'cnd_monotonic.h', - 'compiler.h', - 'compress.c', - 'compress.h', - 'crc32.c', - 'crc32.h', - 'dag.c', - 'disk_cache.c', - 'disk_cache.h', - 'disk_cache_os.c', - 'disk_cache_os.h', - 'double.c', - 'double.h', - 'enum_operators.h', - 'fast_idiv_by_const.c', - 'fast_idiv_by_const.h', - 'format_r11g11b10f.h', - 'format_rgb9e5.h', - 'format_srgb.h', - 'fossilize_db.c', - 'fossilize_db.h', - 'futex.c', - 'futex.h', - 'glheader.h', - 'half_float.c', - 'half_float.h', - 'hash_table.c', - 'hash_table.h', - 'u_idalloc.c', - 'u_idalloc.h', - 'list.h', - 'log.c', - 'macros.h', - 'memstream.c', - 'memstream.h', - 'mesa-sha1.c', - 'mesa-sha1.h', - 'os_time.c', - 'os_time.h', - 'os_file.c', - 'os_memory_fd.c', - 'os_misc.c', - 'os_misc.h', - 'os_socket.c', - 'os_socket.h', - 'ptralloc.h', - 'perf/u_trace.h', - 'perf/u_trace.c', - 'perf/u_trace_priv.h', - 'u_process.c', - 'u_process.h', - 'u_qsort.cpp', - 'u_qsort.h', - 'rwlock.c', - 'rwlock.h', - 'sha1/sha1.c', - 'sha1/sha1.h', - 'ralloc.c', - 'ralloc.h', - 'rand_xor.c', - 'rand_xor.h', - 'rb_tree.c', - 'rb_tree.h', - 'register_allocate.c', - 'register_allocate.h', - 'rgtc.c', - 'rgtc.h', - 'rounding.h', - 'set.c', - 'set.h', - 'simple_mtx.c', - 'simple_mtx.h', - 'slab.c', - 'slab.h', - 'softfloat.c', - 'softfloat.h', - 'sparse_array.c', - 'sparse_array.h', - 'string_buffer.c', - 'string_buffer.h', - 'strndup.h', - 'strtod.c', - 'strtod.h', - 'texcompress_rgtc_tmp.h', - 'timespec.h', - 'u_atomic.c', - 'u_atomic.h', - 'u_call_once.c', - 'u_call_once.h', - 'u_debug_describe.c', - 'u_debug_describe.h', - 'u_debug_refcnt.c', - 'u_debug_refcnt.h', - 'u_dl.c', - 'u_dl.h', - 'u_dynarray.h', - 'u_endian.h', - 'u_hash_table.c', - 'u_hash_table.h', - 'u_pointer.h', - 'u_queue.c', - 'u_queue.h', - 'u_string.h', - 'u_thread.c', - 'u_thread.h', - 'u_vector.c', - 'u_vector.h', - 'u_math.c', - 'u_math.h', - 'u_memset.h', - 'u_mm.c', - 'u_mm.h', - 'u_debug.c', - 'u_debug.h', - 'u_debug_memory.c', - 'u_cpu_detect.c', - 'u_cpu_detect.h', - 'u_printf.c', - 'u_printf.h', - 'u_worklist.c', - 'u_worklist.h', - 'vl_vlc.h', - 'vl_rbsp.h', - 'vma.c', - 'vma.h', - 'xxhash.h', - 'mesa_cache_db.c', - 'mesa_cache_db.h', - 'mesa_cache_db_multipart.c', - 'mesa_cache_db_multipart.h', -) - -files_drirc = files('00-mesa-defaults.conf') - -if with_amd_vk - files_drirc += files('00-radv-defaults.conf') -endif - -if with_tests - prog_xmllint = find_program('xmllint', required : false, native : true) - if prog_xmllint.found() - test( - 'drirc xml validation', - prog_xmllint, - args : ['--noout', '--valid', files_drirc], - suite : ['util'], - ) - endif -endif - -files_xmlconfig = files( - 'xmlconfig.c', - 'xmlconfig.h', -) - -files_xmlconfig += custom_target( - 'driconf_static.h', - input: ['driconf_static.py'] + files_drirc, - output: 'driconf_static.h', - command: [ - prog_python, '@INPUT@', '@OUTPUT@', - ], -) - -format_srgb = custom_target( - 'format_srgb', - input : ['format_srgb.py'], - output : 'format_srgb.c', - command : [prog_python, '@INPUT0@'], - capture : true, -) - -deps_for_libmesa_util = [ - dep_zlib, - dep_clock, - dep_thread, - dep_atomic, - dep_m, - dep_valgrind, - dep_zstd, - dep_dl, - dep_unwind, - dep_futex, - idep_mesautilc11 -] - -if with_platform_android - deps_for_libmesa_util += dep_android - files_debug_stack = files('u_debug_stack_android.cpp') - else - files_debug_stack = files( - 'u_debug_stack.c', - 'u_debug_symbol.c', - 'u_debug_symbol.h', - ) -endif - -if with_platform_haiku - deps_for_libmesa_util += dep_network -endif - -if with_perfetto - files_mesa_util += files( - 'perf/u_perfetto.cc', - 'perf/u_perfetto.h', - ) - deps_for_libmesa_util += dep_perfetto -endif - -u_trace_py = files('perf/u_trace.py') - -libmesa_util_sse41 = static_library( - 'mesa_util_sse41', - files('streaming-load-memcpy.c'), - c_args : [c_msvc_compat_args, sse41_args], - include_directories : [inc_include, inc_src, inc_mesa], - gnu_symbol_visibility : 'hidden', -) - -_libmesa_util = static_library( - 'mesa_util', - [files_mesa_util, files_debug_stack, format_srgb], - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - dependencies : deps_for_libmesa_util, - link_with: [libmesa_format, libmesa_util_sse41], - c_args : [c_msvc_compat_args], - gnu_symbol_visibility : 'hidden', - build_by_default : false -) - -idep_mesautil = declare_dependency( - link_with : _libmesa_util, - include_directories : [inc_util, inc_gallium], - dependencies : deps_for_libmesa_util, -) - -# Only install the drirc file if we build with support for parsing drirc files -if use_xmlconfig - install_data(files_drirc, install_dir : join_paths(get_option('datadir'), 'drirc.d')) -endif - -xmlconfig_deps = [] -if use_xmlconfig - xmlconfig_deps += dep_expat -endif -xmlconfig_deps += dep_regex - -c_xmlconfig_arg = '-DWITH_XMLCONFIG=@0@'.format(use_xmlconfig.to_int()) - -_libxmlconfig = static_library( - 'xmlconfig', - files_xmlconfig, - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - dependencies : [idep_mesautil, dep_m, xmlconfig_deps], - c_args : [ - c_msvc_compat_args, - c_xmlconfig_arg, - '-DSYSCONFDIR="@0@"'.format( - join_paths(get_option('prefix'), get_option('sysconfdir')) - ), - '-DDATADIR="@0@"'.format( - join_paths(get_option('prefix'), get_option('datadir')) - ), - ], - gnu_symbol_visibility : 'hidden', - build_by_default : false, -) - -idep_xmlconfig = declare_dependency( - dependencies : xmlconfig_deps, - link_with : _libxmlconfig, -) - -files_xxd = files('xxd.py') -glsl2spirv = files('glsl2spirv.py') - -if with_tests - # DRI_CONF macros use designated initializers (required for union - # initializaiton), so we need c++2a since gtest forces us to use c++ - if host_machine.system() != 'windows' and cpp.has_argument('-std=c++2a') - test('xmlconfig', - executable('xmlconfig_test', - files('tests/xmlconfig.cpp'), - include_directories : [inc_include, inc_src], - dependencies : [idep_mesautil, idep_xmlconfig, idep_gtest], - override_options : ['cpp_std=c++2a'], - cpp_args: ['-Wno-write-strings', c_xmlconfig_arg] - ), - suite : ['util'], - env: ['HOME=' + join_paths(meson.current_source_dir(), - 'tests', 'drirc_home'), - 'DRIRC_CONFIGDIR=' + join_paths(meson.current_source_dir(), - 'tests', 'drirc_configdir')], - protocol : 'gtest', - ) - endif - - files_util_tests = files( - 'tests/bitset_test.cpp', - 'tests/blob_test.cpp', - 'tests/dag_test.cpp', - 'tests/fast_idiv_by_const_test.cpp', - 'tests/fast_urem_by_const_test.cpp', - 'tests/half_float_test.cpp', - 'tests/int_min_max.cpp', - 'tests/mesa-sha1_test.cpp', - 'tests/os_mman_test.cpp', - 'tests/perf/u_trace_test.cpp', - 'tests/rb_tree_test.cpp', - 'tests/register_allocate_test.cpp', - 'tests/roundeven_test.cpp', - 'tests/set_test.cpp', - 'tests/string_buffer_test.cpp', - 'tests/timespec_test.cpp', - 'tests/u_atomic_test.cpp', - 'tests/u_call_once_test.cpp', - 'tests/u_debug_stack_test.cpp', - 'tests/u_debug_test.cpp', - 'tests/u_printf_test.cpp', - 'tests/u_qsort_test.cpp', - 'tests/vector_test.cpp', - ) - - # FIXME: this test cause a big timeout on MacOS - if host_machine.system() != 'darwin' - files_util_tests += files( - 'tests/sparse_array_test.cpp', - ) - endif - - if with_shader_cache - files_util_tests += files( - 'tests/cache_test.cpp', - ) - endif - - test( - 'util_tests', - executable( - 'util_tests', - files_util_tests, - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - dependencies : [idep_mesautil, idep_gtest], - ), - suite : ['util'], - protocol : 'gtest', - timeout : 180, - ) - - process_test_exe = executable( - 'process_test', - files('tests/process_test.c'), - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - dependencies : idep_mesautil, - c_args : [c_msvc_compat_args], - ) - if (host_machine.system() == 'windows' and build_machine.system() != 'windows') - # This conversion is only required on mingw crosscompilers, otherwise we hit at least one of these issues - # https://gitlab.freedesktop.org/mesa/mesa/-/issues/2690 - # https://gitlab.freedesktop.org/mesa/mesa/-/issues/2788 - prog_winepath = find_program('winepath') - process_test_exe_full_path = run_command( - prog_winepath, '-w', process_test_exe.full_path(), - check : true - ).stdout().strip() - else - process_test_exe_full_path = process_test_exe.full_path() - endif - - test( - 'process', - process_test_exe, - suite : ['util'], - env: ['BUILD_FULL_PATH='+process_test_exe_full_path] - ) - - test( - 'process_with_overrides', - process_test_exe, - suite : ['util'], - env: [ - 'BUILD_FULL_PATH='+process_test_exe_full_path, - 'MESA_PROCESS_NAME=hello', - ] - ) - - subdir('tests/hash_table') - subdir('tests/vma') - subdir('tests/format') -endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_file.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_file.c deleted file mode 100644 index 5fb30f2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_file.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright 2019 Intel Corporation - * SPDX-License-Identifier: MIT - */ - -#include "os_file.h" -#include "detect_os.h" - -#include -#include -#include -#include - -#if DETECT_OS_WINDOWS -#include -#define open _open -#define fdopen _fdopen -#define close _close -#define dup _dup -#define read _read -#define O_CREAT _O_CREAT -#define O_EXCL _O_EXCL -#define O_WRONLY _O_WRONLY -#else -#include -#ifndef F_DUPFD_CLOEXEC -#define F_DUPFD_CLOEXEC 1030 -#endif -#endif - - -FILE * -os_file_create_unique(const char *filename, int filemode) -{ - int fd = open(filename, O_CREAT | O_EXCL | O_WRONLY, filemode); - if (fd == -1) - return NULL; - return fdopen(fd, "w"); -} - - -#if DETECT_OS_WINDOWS -int -os_dupfd_cloexec(int fd) -{ - /* - * On Windows child processes don't inherit handles by default: - * https://devblogs.microsoft.com/oldnewthing/20111216-00/?p=8873 - */ - return dup(fd); -} -#else -int -os_dupfd_cloexec(int fd) -{ - int minfd = 3; - int newfd = fcntl(fd, F_DUPFD_CLOEXEC, minfd); - - if (newfd >= 0) - return newfd; - - if (errno != EINVAL) - return -1; - - newfd = fcntl(fd, F_DUPFD, minfd); - - if (newfd < 0) - return -1; - - long flags = fcntl(newfd, F_GETFD); - if (flags == -1) { - close(newfd); - return -1; - } - - if (fcntl(newfd, F_SETFD, flags | FD_CLOEXEC) == -1) { - close(newfd); - return -1; - } - - return newfd; -} -#endif - -#include -#include - -#if DETECT_OS_WINDOWS -typedef ptrdiff_t ssize_t; -#endif - -static ssize_t -readN(int fd, char *buf, size_t len) -{ - /* err was initially set to -ENODATA but in some BSD systems - * ENODATA is not defined and ENOATTR is used instead. - * As err is not returned by any function it can be initialized - * to -EFAULT that exists everywhere. - */ - int err = -EFAULT; - size_t total = 0; - do { - ssize_t ret = read(fd, buf + total, len - total); - - if (ret < 0) - ret = -errno; - - if (ret == -EINTR || ret == -EAGAIN) - continue; - - if (ret <= 0) { - err = ret; - break; - } - - total += ret; - } while (total != len); - - return total ? (ssize_t)total : err; -} - -#ifndef O_BINARY -/* Unix makes no distinction between text and binary files. */ -#define O_BINARY 0 -#endif - -char * -os_read_file(const char *filename, size_t *size) -{ - /* Note that this also serves as a slight margin to avoid a 2x grow when - * the file is just a few bytes larger when we read it than when we - * fstat'ed it. - * The string's NULL terminator is also included in here. - */ - size_t len = 64; - - int fd = open(filename, O_RDONLY | O_BINARY); - if (fd == -1) { - /* errno set by open() */ - return NULL; - } - - /* Pre-allocate a buffer at least the size of the file if we can read - * that information. - */ - struct stat stat; - if (fstat(fd, &stat) == 0) - len += stat.st_size; - - char *buf = malloc(len); - if (!buf) { - close(fd); - errno = -ENOMEM; - return NULL; - } - - ssize_t actually_read; - size_t offset = 0, remaining = len - 1; - while ((actually_read = readN(fd, buf + offset, remaining)) == (ssize_t)remaining) { - char *newbuf = realloc(buf, 2 * len); - if (!newbuf) { - free(buf); - close(fd); - errno = -ENOMEM; - return NULL; - } - - buf = newbuf; - len *= 2; - offset += actually_read; - remaining = len - offset - 1; - } - - close(fd); - - if (actually_read > 0) - offset += actually_read; - - /* Final resize to actual size */ - len = offset + 1; - char *newbuf = realloc(buf, len); - if (!newbuf) { - free(buf); - errno = -ENOMEM; - return NULL; - } - buf = newbuf; - - buf[offset] = '\0'; - - if (size) - *size = offset; - - return buf; -} - -#if DETECT_OS_LINUX && ALLOW_KCMP - -#include -#include - -/* copied from */ -#define KCMP_FILE 0 - -int -os_same_file_description(int fd1, int fd2) -{ - pid_t pid = getpid(); - - /* Same file descriptor trivially implies same file description */ - if (fd1 == fd2) - return 0; - - return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2); -} - -#else - -int -os_same_file_description(int fd1, int fd2) -{ - /* Same file descriptor trivially implies same file description */ - if (fd1 == fd2) - return 0; - - /* Otherwise we can't tell */ - return -1; -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_file.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_file.h deleted file mode 100644 index 85065c2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_file.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2019 Intel Corporation - * SPDX-License-Identifier: MIT - * - * File operations helpers - */ - -#ifndef _OS_FILE_H_ -#define _OS_FILE_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Create a new file and opens it for writing-only. - * If the given filename already exists, nothing is done and NULL is returned. - * `errno` gets set to the failure reason; if that is not EEXIST, the caller - * might want to do something other than trying again. - */ -FILE * -os_file_create_unique(const char *filename, int filemode); - -/* - * Duplicate a file descriptor, making sure not to keep it open after an exec*() - */ -int -os_dupfd_cloexec(int fd); - -/* - * Read a file. - * Returns a char* that the caller must free(), or NULL and sets errno. - * If size is not null and no error occurred it's set to the size of the - * file. - * Reads files as binary and includes a NUL terminator after the end of the - * returned buffer. - */ -char * -os_read_file(const char *filename, size_t *size); - -/* - * Try to determine if two file descriptors reference the same file description - * - * Return values: - * - 0: They reference the same file description - * - > 0: They do not reference the same file description - * - < 0: Unable to determine whether they reference the same file description - */ -int -os_same_file_description(int fd1, int fd2); - -#ifdef __cplusplus -} -#endif - -#endif /* _OS_FILE_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory.h deleted file mode 100644 index 6efd154..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory.h +++ /dev/null @@ -1,39 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -/* - * OS memory management abstractions - */ - - -#ifndef _OS_MEMORY_H_ -#define _OS_MEMORY_H_ - -#include "os_memory_stdc.h" - -#endif /* _OS_MEMORY_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_aligned.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_aligned.h deleted file mode 100644 index 99a0b20..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_aligned.h +++ /dev/null @@ -1,128 +0,0 @@ -/************************************************************************** - * - * Copyright 2008-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -/* - * Memory alignment wrappers. - */ - - -#ifndef _OS_MEMORY_H_ -#error "Must not be included directly. Include os_memory.h instead" -#endif - - -/** - * Add two size_t values with integer overflow check. - * TODO: leverage __builtin_add_overflow where available - */ -static inline bool -add_overflow_size_t(size_t a, size_t b, size_t *res) -{ - *res = a + b; - return *res < a || *res < b; -} - - -#if defined(HAVE_POSIX_MEMALIGN) - -static inline void * -os_malloc_aligned(size_t size, size_t alignment) -{ - void *ptr; - alignment = (alignment + sizeof(void*) - 1) & ~(sizeof(void*) - 1); - if(posix_memalign(&ptr, alignment, size) != 0) - return NULL; - return ptr; -} - -#define os_free_aligned(_ptr) free(_ptr) - -#else - -/** - * Return memory on given byte alignment - */ -static inline void * -os_malloc_aligned(size_t size, size_t alignment) -{ - char *ptr, *buf; - size_t alloc_size; - - /* - * Calculate - * - * alloc_size = size + alignment + sizeof(void *) - * - * while checking for overflow. - */ - if (add_overflow_size_t(size, alignment, &alloc_size) || - add_overflow_size_t(alloc_size, sizeof(void *), &alloc_size)) { - return NULL; - } - - ptr = (char *) os_malloc(alloc_size); - if (!ptr) - return NULL; - - buf = (char *)(((uintptr_t)ptr + sizeof(void *) + alignment - 1) & ~((uintptr_t)(alignment - 1))); - *(char **)(buf - sizeof(void *)) = ptr; - - return buf; -} - - -/** - * Free memory returned by os_malloc_aligned(). - */ -static inline void -os_free_aligned(void *ptr) -{ - if (ptr) { - void **cubbyHole = (void **) ((char *) ptr - sizeof(void *)); - void *realAddr = *cubbyHole; - os_free(realAddr); - } -} - -#endif - -/** - * Reallocate memeory, with alignment - */ -static inline void * -os_realloc_aligned(void *ptr, size_t oldsize, size_t newsize, size_t alignment) -{ - const size_t copySize = MIN2(oldsize, newsize); - void *newBuf = os_malloc_aligned(newsize, alignment); - if (newBuf && ptr && copySize > 0) { - memcpy(newBuf, ptr, copySize); - } - - os_free_aligned(ptr); - return newBuf; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_debug.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_debug.h deleted file mode 100644 index 08b922b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_debug.h +++ /dev/null @@ -1,95 +0,0 @@ -/************************************************************************** - * - * Copyright 2008-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -/* - * Debugging wrappers for OS memory management abstractions. - */ - - -#ifndef _OS_MEMORY_H_ -#error "Must not be included directly. Include os_memory.h instead" -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - - -void * -debug_malloc(const char *file, unsigned line, const char *function, - size_t size); - -void * -debug_calloc(const char *file, unsigned line, const char *function, - size_t count, size_t size ); - -void -debug_free(const char *file, unsigned line, const char *function, - void *ptr); - -void * -debug_realloc(const char *file, unsigned line, const char *function, - void *old_ptr, size_t old_size, size_t new_size ); - -unsigned long -debug_memory_begin(void); - -void -debug_memory_end(unsigned long start_no); - -void -debug_memory_tag(void *ptr, unsigned tag); - -void -debug_memory_check_block(void *ptr); - -void -debug_memory_check(void); - - -#ifdef __cplusplus -} -#endif - - -#ifndef DEBUG_MEMORY_IMPLEMENTATION - -#define os_malloc( _size ) \ - debug_malloc( __FILE__, __LINE__, __func__, _size ) -#define os_calloc( _count, _size ) \ - debug_calloc(__FILE__, __LINE__, __func__, _count, _size ) -#define os_free( _ptr ) \ - debug_free( __FILE__, __LINE__, __func__, _ptr ) -#define os_realloc( _ptr, _old_size, _new_size ) \ - debug_realloc( __FILE__, __LINE__, __func__, _ptr, _old_size, _new_size ) - -/* TODO: wrap os_malloc_aligned() and os_free_aligned() too */ -#include "os_memory_aligned.h" - -#endif /* !DEBUG_MEMORY_IMPLEMENTATION */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_fd.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_fd.c deleted file mode 100644 index 5d1a152..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_fd.c +++ /dev/null @@ -1,182 +0,0 @@ -/************************************************************************** - * - * Copyright 2021 Snap Inc. - * SPDX-License-Identifier: MIT - * - * 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 THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - -/* - * Memory fd wrappers. - */ - -#include "detect_os.h" - -#if DETECT_OS_UNIX - -#include -#include -#include -#include - -#include "anon_file.h" -#include "mesa-sha1.h" -#include "u_math.h" -#include "os_memory.h" - -/* (Re)define UUID_SIZE to avoid including vulkan.h (or p_defines.h) here. */ -#define UUID_SIZE 16 - -struct memory_header { - size_t size; - size_t offset; - uint8_t uuid[UUID_SIZE]; -}; - -static void -get_driver_id_sha1_hash(uint8_t sha1[SHA1_DIGEST_LENGTH], const char *driver_id) { - struct mesa_sha1 sha1_ctx; - _mesa_sha1_init(&sha1_ctx); - - _mesa_sha1_update(&sha1_ctx, driver_id, strlen(driver_id)); - - _mesa_sha1_final(&sha1_ctx, sha1); -} - -/** - * Imports memory from a file descriptor - */ -bool -os_import_memory_fd(int fd, void **ptr, uint64_t *size, char const *driver_id) -{ - void *mapped_ptr; - struct memory_header header; - - lseek(fd, 0, SEEK_SET); - int bytes_read = read(fd, &header, sizeof(header)); - if(bytes_read != sizeof(header)) - return false; - - // Check the uuid we put after the sizes in order to verify that the fd - // is a memfd that we created and not some random fd. - uint8_t sha1[SHA1_DIGEST_LENGTH]; - get_driver_id_sha1_hash(sha1, driver_id); - - assert(SHA1_DIGEST_LENGTH >= UUID_SIZE); - if (memcmp(header.uuid, sha1, UUID_SIZE)) { - return false; - } - - mapped_ptr = mmap(NULL, header.size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (mapped_ptr == MAP_FAILED) { - return false; - } - *ptr = (void*)((uintptr_t)mapped_ptr + header.offset); - // the offset does not count as part of the size - *size = header.size - header.offset; - return true; -} - -/** - * Return memory on given byte alignment - */ -void * -os_malloc_aligned_fd(size_t size, size_t alignment, int *fd, char const *fd_name, char const *driver_id) -{ - void *ptr, *buf; - int mem_fd; - size_t alloc_size, offset; - - *fd = -1; - - /* - * Calculate - * - * alloc_size = size + alignment + sizeof(struct memory_header) + sizeof(size_t) - * - * while checking for overflow. - */ - const size_t header_size = sizeof(struct memory_header) + sizeof(size_t); - if (add_overflow_size_t(size, alignment, &alloc_size) || - add_overflow_size_t(alloc_size, header_size, &alloc_size)) - return NULL; - - mem_fd = os_create_anonymous_file(alloc_size, fd_name); - - if(mem_fd < 0) - return NULL; - -#if defined(HAVE_MEMFD_CREATE) || defined(ANDROID) - // Seal fd, so no one can grow or shrink the memory. - if (fcntl(mem_fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_SEAL) != 0) - goto fail; -#endif - - ptr = mmap(NULL, alloc_size, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, 0); - if (ptr == MAP_FAILED) - goto fail; - - // Save the size and offset at the start, so we have all we need to unmap the memory - // and we are able to find the start of the actual data-section. Also save the - // offset directly before the data-section, so we can find the start of the mapped memory. - // | size | offset | ... padding ... | offset | ... data ... | - // ^ ^ ^ - // 0 offset size - buf = (char *)(((uintptr_t)ptr + header_size + alignment - 1) & ~((uintptr_t)(alignment - 1))); - offset = (size_t)((uintptr_t)buf - (uintptr_t)ptr); - struct memory_header* header = (struct memory_header*)ptr; - header->size = alloc_size; - header->offset = offset; - ((size_t*)buf)[-1] = offset; - - // Add the hash of the driver_id as a uuid to the header in order to identify the memory - // when importing. - uint8_t sha1[SHA1_DIGEST_LENGTH]; - get_driver_id_sha1_hash(sha1, driver_id); - - assert(SHA1_DIGEST_LENGTH >= UUID_SIZE); - memcpy(header->uuid, sha1, UUID_SIZE); - - *fd = mem_fd; - return buf; - -fail: - close(mem_fd); - return NULL; -} - -/** - * Free memory returned by os_malloc_aligned_fd(). - */ -void -os_free_fd(void *ptr) -{ - if (ptr) { - size_t offset = ((size_t*)ptr)[-1]; - struct memory_header* header = (struct memory_header*)((uintptr_t)ptr - offset); - // check if the offset at the beginning of the memory - // is the same as the one we saved directly before the data. - assert(offset == header->offset); - munmap(header, header->size); - } -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_fd.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_fd.h deleted file mode 100644 index 936e391..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_fd.h +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************** - * - * Copyright 2021 Snap Inc. - * SPDX-License-Identifier: MIT - * - * 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 THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - - -/* - * Memory fd wrappers. - */ - - -#ifndef _OS_MEMORY_H_ -#error "Must not be included directly. Include os_memory.h instead" -#endif - -/** - * Imports memory from a file descriptor - */ -bool -os_import_memory_fd(int fd, void **ptr, uint64_t *size, char const *driver_id); - -/** - * Return memory on given byte alignment - */ -void * -os_malloc_aligned_fd(size_t size, size_t alignment, int *fd, char const *fd_name, char const *driver_id); - -/** - * Free memory returned by os_malloc_aligned_fd(). - */ -void -os_free_fd(void *ptr); diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_stdc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_stdc.h deleted file mode 100644 index 81645ec..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_memory_stdc.h +++ /dev/null @@ -1,66 +0,0 @@ -/************************************************************************** - * - * Copyright 2008-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -/* - * OS memory management abstractions for the standard C library. - */ - - -#ifndef _OS_MEMORY_H_ -#error "Must not be included directly. Include os_memory.h instead" -#endif - -#include - - -#define os_malloc(_size) malloc(_size) -#define os_calloc(_count, _size ) calloc(_count, _size ) -#define os_free(_ptr) free(_ptr) - -#define os_realloc( _old_ptr, _old_size, _new_size) \ - realloc(_old_ptr, _new_size + 0*(_old_size)) - -#if DETECT_OS_WINDOWS - -#include - -#define os_malloc_aligned(_size, _align) _aligned_malloc(_size, _align) -#define os_free_aligned(_ptr) _aligned_free(_ptr) -#define os_realloc_aligned(_ptr, _oldsize, _newsize, _alignment) _aligned_realloc(_ptr, _newsize, _alignment) - -#else - -#include "os_memory_aligned.h" - -#if DETECT_OS_UNIX - -#include "os_memory_fd.h" - -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_misc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_misc.c deleted file mode 100644 index 29c6a96..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_misc.c +++ /dev/null @@ -1,398 +0,0 @@ -/************************************************************************** - * - * Copyright 2008-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -#include "hash_table.h" -#include "macros.h" -#include "os_misc.h" -#include "os_file.h" -#include "ralloc.h" -#include "simple_mtx.h" -#include "android/log.h" - -#include - - -#if DETECT_OS_WINDOWS - -#include -#include -#include - -#else - -#include -#include -#include -#include - -#endif - - -#if DETECT_OS_ANDROID -# define LOG_TAG "MESA" -# include -//# include -#elif DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD -# include -#elif DETECT_OS_OPENBSD || DETECT_OS_FREEBSD -# include -# include -#elif DETECT_OS_APPLE || DETECT_OS_BSD -# include -#elif DETECT_OS_HAIKU -# include -#elif DETECT_OS_WINDOWS -# include -#else -#error unexpected platform in os_sysinfo.c -#endif - - -void -os_log_message(const char *message) -{ - /* If the GALLIUM_LOG_FILE environment variable is set to a valid filename, - * write all messages to that file. - */ - static FILE *fout = NULL; - - if (!fout) { -#ifdef DEBUG - /* one-time init */ - const char *filename = os_get_option("GALLIUM_LOG_FILE"); - if (filename) { - if (strcmp(filename, "stdout") == 0) { - fout = stdout; - } else { - const char *mode = "w"; - if (filename[0] == '+') { - /* If the filename is prefixed with '+' then open the file for - * appending instead of normal writing. - */ - mode = "a"; - filename++; /* skip the '+' */ - } - fout = fopen(filename, mode); - } - } -#endif - if (!fout) - fout = stderr; - } - -#if DETECT_OS_WINDOWS - OutputDebugStringA(message); -#if !defined(_GAMING_XBOX) - if(GetConsoleWindow() && !IsDebuggerPresent()) { - fflush(stdout); - fputs(message, fout); - fflush(fout); - } - else if (fout != stderr) { - fputs(message, fout); - fflush(fout); - } -#endif -#else /* !DETECT_OS_WINDOWS */ - fflush(stdout); - fputs(message, fout); - fflush(fout); -# if DETECT_OS_ANDROID - //LOG_PRI(ANDROID_LOG_ERROR, LOG_TAG, "%s", message); - printf("%s", message); -# endif -#endif -} - -#if DETECT_OS_ANDROID -//# include -//# include "../../include/c11/threads.h" - -/** - * Get an option value from android's property system, as a fallback to - * getenv() (which is generally less useful on android due to processes - * typically being forked from the zygote. - * - * The option name used for getenv is translated into a property name - * by: - * - * 1) convert to lowercase - * 2) replace '_' with '.' - * 3) if necessary, prepend "mesa." - * - * For example: - * - MESA_EXTENSION_OVERRIDE -> mesa.extension.override - * - GALLIUM_HUD -> mesa.gallium.hud - * - */ - /* -static char * -os_get_android_option(const char *name) -{ - static thread_local char os_android_option_value[PROPERTY_VALUE_MAX]; - char key[PROPERTY_KEY_MAX]; - char *p = key, *end = key + PROPERTY_KEY_MAX; - if (strstr(name, "MESA_") != name) - p += strlcpy(p, "mesa.", end - p); - p += strlcpy(p, name, end - p); - for (int i = 0; key[i]; i++) { - if (key[i] == '_') { - key[i] = '.'; - } else { - key[i] = tolower(key[i]); - } - } - - int len = property_get(key, os_android_option_value, NULL); - if (len > 1) { - return os_android_option_value; - } - return NULL; -} -*/ -#endif - -const char * -os_get_option(const char *name) -{ - const char *opt = getenv(name); - /* -#if DETECT_OS_ANDROID - if (!opt) { - opt = os_get_android_option(name); - } -#endif - */ - return opt; -} - -static struct hash_table *options_tbl; -static bool options_tbl_exited = false; -static simple_mtx_t options_tbl_mtx = SIMPLE_MTX_INITIALIZER; - -/** - * NOTE: The strings that allocated with ralloc_strdup(options_tbl, ...) - * are freed by _mesa_hash_table_destroy automatically - */ -static void -options_tbl_fini(void) -{ - simple_mtx_lock(&options_tbl_mtx); - _mesa_hash_table_destroy(options_tbl, NULL); - options_tbl = NULL; - options_tbl_exited = true; - simple_mtx_unlock(&options_tbl_mtx); -} - -const char * -os_get_option_cached(const char *name) -{ - const char *opt = NULL; - simple_mtx_lock(&options_tbl_mtx); - if (options_tbl_exited) { - opt = os_get_option(name); - goto exit_mutex; - } - - if (!options_tbl) { - options_tbl = _mesa_hash_table_create(NULL, _mesa_hash_string, - _mesa_key_string_equal); - if (options_tbl == NULL) { - goto exit_mutex; - } - atexit(options_tbl_fini); - } - struct hash_entry *entry = _mesa_hash_table_search(options_tbl, name); - if (entry) { - opt = entry->data; - goto exit_mutex; - } - - char *name_dup = ralloc_strdup(options_tbl, name); - if (name_dup == NULL) { - goto exit_mutex; - } - opt = ralloc_strdup(options_tbl, os_get_option(name)); - _mesa_hash_table_insert(options_tbl, name_dup, (void *)opt); -exit_mutex: - simple_mtx_unlock(&options_tbl_mtx); - return opt; -} - -/** - * Return the size of the total physical memory. - * \param size returns the size of the total physical memory - * \return true for success, or false on failure - */ -bool -os_get_total_physical_memory(uint64_t *size) -{ -#if DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD - const long phys_pages = sysconf(_SC_PHYS_PAGES); - const long page_size = sysconf(_SC_PAGE_SIZE); - - if (phys_pages <= 0 || page_size <= 0) - return false; - - *size = (uint64_t)phys_pages * (uint64_t)page_size; - return true; -#elif DETECT_OS_APPLE || DETECT_OS_BSD - size_t len = sizeof(*size); - int mib[2]; - - mib[0] = CTL_HW; -#if DETECT_OS_APPLE - mib[1] = HW_MEMSIZE; -#elif DETECT_OS_NETBSD || DETECT_OS_OPENBSD - mib[1] = HW_PHYSMEM64; -#elif DETECT_OS_FREEBSD - mib[1] = HW_REALMEM; -#elif DETECT_OS_DRAGONFLY - mib[1] = HW_PHYSMEM; -#else -#error Unsupported *BSD -#endif - - return (sysctl(mib, 2, size, &len, NULL, 0) == 0); -#elif DETECT_OS_HAIKU - system_info info; - status_t ret; - - ret = get_system_info(&info); - if (ret != B_OK || info.max_pages <= 0) - return false; - - *size = (uint64_t)info.max_pages * (uint64_t)B_PAGE_SIZE; - return true; -#elif DETECT_OS_WINDOWS - MEMORYSTATUSEX status; - BOOL ret; - - status.dwLength = sizeof(status); - ret = GlobalMemoryStatusEx(&status); - *size = status.ullTotalPhys; - return (ret == TRUE); -#else -#error unexpected platform in os_misc.c - return false; -#endif -} - -bool -os_get_available_system_memory(uint64_t *size) -{ -#if DETECT_OS_LINUX - char *meminfo = os_read_file("/proc/meminfo", NULL); - if (!meminfo) - return false; - - char *str = strstr(meminfo, "MemAvailable:"); - if (!str) { - free(meminfo); - return false; - } - - uint64_t kb_mem_available; - if (sscanf(str, "MemAvailable: %" PRIu64, &kb_mem_available) == 1) { - free(meminfo); - *size = kb_mem_available << 10; - return true; - } - - free(meminfo); - return false; -#elif DETECT_OS_OPENBSD || DETECT_OS_FREEBSD - struct rlimit rl; -#if DETECT_OS_OPENBSD - int mib[] = { CTL_HW, HW_USERMEM64 }; -#elif DETECT_OS_FREEBSD - int mib[] = { CTL_HW, HW_USERMEM }; -#endif - int64_t mem_available; - size_t len = sizeof(mem_available); - - /* physmem - wired */ - if (sysctl(mib, 2, &mem_available, &len, NULL, 0) == -1) - return false; - - /* static login.conf limit */ - if (getrlimit(RLIMIT_DATA, &rl) == -1) - return false; - - *size = MIN2(mem_available, rl.rlim_cur); - return true; -#elif DETECT_OS_WINDOWS - MEMORYSTATUSEX status; - BOOL ret; - - status.dwLength = sizeof(status); - ret = GlobalMemoryStatusEx(&status); - *size = status.ullAvailPhys; - return (ret == TRUE); -#else - return false; -#endif -} - -/** - * Return the size of a page - * \param size returns the size of a page - * \return true for success, or false on failure - */ -bool -os_get_page_size(uint64_t *size) -{ -#if DETECT_OS_UNIX && !DETECT_OS_APPLE && !DETECT_OS_HAIKU - const long page_size = sysconf(_SC_PAGE_SIZE); - - if (page_size <= 0) - return false; - - *size = (uint64_t)page_size; - return true; -#elif DETECT_OS_HAIKU - *size = (uint64_t)B_PAGE_SIZE; - return true; -#elif DETECT_OS_WINDOWS - SYSTEM_INFO SysInfo; - - GetSystemInfo(&SysInfo); - *size = SysInfo.dwPageSize; - return true; -#elif DETECT_OS_APPLE - size_t len = sizeof(*size); - int mib[2]; - - mib[0] = CTL_HW; - mib[1] = HW_PAGESIZE; - return (sysctl(mib, 2, size, &len, NULL, 0) == 0); -#else -#error unexpected platform in os_sysinfo.c - return false; -#endif -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_misc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_misc.h deleted file mode 100644 index 3eee4e7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_misc.h +++ /dev/null @@ -1,128 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -/* - * Miscellaneous OS services. - */ - - -#ifndef _OS_MISC_H_ -#define _OS_MISC_H_ - -#include -#include - -#include "detect.h" - - -#if DETECT_OS_UNIX -# include /* for kill() */ -# include /* getpid() */ -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* - * Trap into the debugger. - */ -#if (DETECT_ARCH_X86 || DETECT_ARCH_X86_64) && DETECT_CC_GCC -# define os_break() __asm("int3") -#elif DETECT_CC_MSVC -# define os_break() __debugbreak() -#elif DETECT_OS_UNIX -# define os_break() kill(getpid(), SIGTRAP) -#else -# define os_break() abort() -#endif - - -/* - * Abort the program. - */ -#if defined(DEBUG) -# define os_abort() do { os_break(); abort(); } while(0) -#else -# define os_abort() abort() -#endif - - -/* - * Output a message. Message should preferably end in a newline. - */ -void -os_log_message(const char *message); - - -/* - * Get an option. Should return NULL if specified option is not set. - * It has the same disadvantage as getenv, see - * https://wiki.sei.cmu.edu/confluence/display/c/ENV34-C.+Do+not+store+pointers+returned+by+certain+functions - */ -const char * -os_get_option(const char *name); - -/* - * Get an option. Should return NULL if specified option is not set. - * It's will save the option into hash table for the first time, and - * for latter calling, it's will return the value comes from hash table - * directly, and the returned value will always be valid before program exit - * The disadvantage is that setenv, unsetenv, putenv won't take effect - * after this function is called - */ -const char * -os_get_option_cached(const char *name); - -/* - * Get the total amount of physical memory available on the system. - */ -bool -os_get_total_physical_memory(uint64_t *size); - -/* - * Amount of physical memory available to a process - */ -bool -os_get_available_system_memory(uint64_t *size); - -/* - * Size of a page - */ -bool -os_get_page_size(uint64_t *size); - - -#ifdef __cplusplus -} -#endif - - -#endif /* _OS_MISC_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_mman.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_mman.h deleted file mode 100644 index cff1462..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_mman.h +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 LunarG, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * OS independent memory mapping (with large file support). - * - * @author Chia-I Wu - */ - -#ifndef _OS_MMAN_H_ -#define _OS_MMAN_H_ - -#include -#include - -#include "detect_os.h" - -#if DETECT_OS_UNIX -# include -#else -# error Unsupported OS -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -#if DETECT_OS_ANDROID && !defined(__LP64__) -/* 32-bit needs mmap64 for 64-bit offsets */ -# define os_mmap(addr, length, prot, flags, fd, offset) \ - mmap64(addr, length, prot, flags, fd, offset) - -# define os_munmap(addr, length) \ - munmap(addr, length) - -#else -/* assume large file support exists */ -# define os_mmap(addr, length, prot, flags, fd, offset) \ - mmap(addr, length, prot, flags, fd, offset) - -static inline int os_munmap(void *addr, size_t length) -{ - /* Copied from configure code generated by AC_SYS_LARGEFILE */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + \ - (((off_t) 1 << 31) << 31)) - static_assert(LARGE_OFF_T % 2147483629 == 721 && - LARGE_OFF_T % 2147483647 == 1, ""); -#undef LARGE_OFF_T - - return munmap(addr, length); -} -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* _OS_MMAN_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_socket.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_socket.c deleted file mode 100644 index 6562ccc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_socket.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2019 Intel Corporation - * SPDX-License-Identifier: MIT - */ - -#include - -#include "os_socket.h" - -#if defined(__linux__) - -#include -#include -#include -#include -#include -#include -#include - -int -os_socket_listen_abstract(const char *path, int count) -{ - int s = socket(AF_UNIX, SOCK_STREAM, 0); - if (s < 0) - return -1; - - struct sockaddr_un addr; - memset(&addr, 0, sizeof(addr)); - addr.sun_family = AF_UNIX; - strncpy(addr.sun_path + 1, path, sizeof(addr.sun_path) - 2); - - /* Create an abstract socket */ - int ret = bind(s, (struct sockaddr*)&addr, - offsetof(struct sockaddr_un, sun_path) + - strlen(path) + 1); - if (ret < 0) { - close(s); - return -1; - } - - if (listen(s, count) < 0) { - close(s); - return -1; - } - - return s; -} - -int -os_socket_accept(int s) -{ - return accept(s, NULL, NULL); -} - -ssize_t -os_socket_recv(int socket, void *buffer, size_t length, int flags) -{ - return recv(socket, buffer, length, flags); -} - -ssize_t -os_socket_send(int socket, const void *buffer, size_t length, int flags) -{ - return send(socket, buffer, length, flags); -} - -void -os_socket_block(int s, bool block) -{ - int old = fcntl(s, F_GETFL, 0); - if (old == -1) - return; - - /* TODO obey block */ - if (block) - fcntl(s, F_SETFL, old & ~O_NONBLOCK); - else - fcntl(s, F_SETFL, old | O_NONBLOCK); -} - -void -os_socket_close(int s) -{ - close(s); -} - -#else - -int -os_socket_listen_abstract(const char *path, int count) -{ - errno = -ENOSYS; - return -1; -} - -int -os_socket_accept(int s) -{ - errno = -ENOSYS; - return -1; -} - -ssize_t -os_socket_recv(int socket, void *buffer, size_t length, int flags) -{ - errno = -ENOSYS; - return -1; -} - -ssize_t -os_socket_send(int socket, const void *buffer, size_t length, int flags) -{ - errno = -ENOSYS; - return -1; -} - -void -os_socket_block(int s, bool block) -{ -} - -void -os_socket_close(int s) -{ -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_socket.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_socket.h deleted file mode 100644 index 70b1951..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_socket.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2019 Intel Corporation - * SPDX-License-Identifier: MIT - * - * Socket operations helpers - */ - -#ifndef _OS_SOCKET_H_ -#define _OS_SOCKET_H_ - -#include -#include -#ifdef _MSC_VER -#include -typedef SSIZE_T ssize_t; -#else -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -int os_socket_accept(int s); - -int os_socket_listen_abstract(const char *path, int count); - -ssize_t os_socket_recv(int socket, void *buffer, size_t length, int flags); -ssize_t os_socket_send(int socket, const void *buffer, size_t length, int flags); - -void os_socket_block(int s, bool block); -void os_socket_close(int s); - -#ifdef __cplusplus -} -#endif - -#endif /* _OS_SOCKET_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_time.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_time.c deleted file mode 100644 index cff5f06..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_time.c +++ /dev/null @@ -1,189 +0,0 @@ -/************************************************************************** - * - * Copyright 2008-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * OS independent time-manipulation functions. - * - * @author Jose Fonseca - */ - -#include "os_time.h" -#include "detect_os.h" - -#include "u_atomic.h" - -#if DETECT_OS_UNIX -# include /* usleep */ -# include /* timeval */ -# include /* timeval */ -# include /* sched_yield */ -# include -#elif DETECT_OS_WINDOWS -# include -#else -# error Unsupported OS -#endif - - -int64_t -os_time_get_nano(void) -{ -#if DETECT_OS_LINUX || DETECT_OS_BSD - - struct timespec tv; - clock_gettime(CLOCK_MONOTONIC, &tv); - return tv.tv_nsec + tv.tv_sec*INT64_C(1000000000); - -#elif DETECT_OS_UNIX - - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_usec*INT64_C(1000) + tv.tv_sec*INT64_C(1000000000); - -#elif DETECT_OS_WINDOWS - - LARGE_INTEGER frequency; - LARGE_INTEGER counter; - int64_t secs, nanosecs; - QueryPerformanceFrequency(&frequency); - QueryPerformanceCounter(&counter); - /* Compute seconds and nanoseconds parts separately to - * reduce severity of precision loss. - */ - secs = counter.QuadPart / frequency.QuadPart; - nanosecs = (counter.QuadPart % frequency.QuadPart) * INT64_C(1000000000) - / frequency.QuadPart; - return secs*INT64_C(1000000000) + nanosecs; - -#else - -#error Unsupported OS - -#endif -} - - - -void -os_time_sleep(int64_t usecs) -{ -#if DETECT_OS_LINUX - struct timespec time; - time.tv_sec = usecs / 1000000; - time.tv_nsec = (usecs % 1000000) * 1000; - while (clock_nanosleep(CLOCK_MONOTONIC, 0, &time, &time) == EINTR); - -#elif DETECT_OS_UNIX - usleep(usecs); - -#elif DETECT_OS_WINDOWS - DWORD dwMilliseconds = (DWORD) ((usecs + 999) / 1000); - /* Avoid Sleep(O) as that would cause to sleep for an undetermined duration */ - if (dwMilliseconds) { - Sleep(dwMilliseconds); - } -#else -# error Unsupported OS -#endif -} - - - -int64_t -os_time_get_absolute_timeout(uint64_t timeout) -{ - int64_t time, abs_timeout; - - /* Also check for the type upper bound. */ - if (timeout == OS_TIMEOUT_INFINITE || timeout > INT64_MAX) - return OS_TIMEOUT_INFINITE; - - time = os_time_get_nano(); - abs_timeout = time + (int64_t)timeout; - - /* Check for overflow. */ - if (abs_timeout < time) - return OS_TIMEOUT_INFINITE; - - return abs_timeout; -} - - -bool -os_wait_until_zero(volatile int *var, uint64_t timeout) -{ - if (!p_atomic_read(var)) - return true; - - if (!timeout) - return false; - - if (timeout == OS_TIMEOUT_INFINITE) { - while (p_atomic_read(var)) { -#if DETECT_OS_UNIX - sched_yield(); -#endif - } - return true; - } - else { - int64_t start_time = os_time_get_nano(); - int64_t end_time = start_time + timeout; - - while (p_atomic_read(var)) { - if (os_time_timeout(start_time, end_time, os_time_get_nano())) - return false; - -#if DETECT_OS_UNIX - sched_yield(); -#endif - } - return true; - } -} - - -bool -os_wait_until_zero_abs_timeout(volatile int *var, int64_t timeout) -{ - if (!p_atomic_read(var)) - return true; - - if (timeout == OS_TIMEOUT_INFINITE) - return os_wait_until_zero(var, OS_TIMEOUT_INFINITE); - - while (p_atomic_read(var)) { - if (os_time_get_nano() >= timeout) - return false; - -#if DETECT_OS_UNIX - sched_yield(); -#endif - } - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_time.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_time.h deleted file mode 100644 index 5b30bb9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/os_time.h +++ /dev/null @@ -1,144 +0,0 @@ -/************************************************************************** - * - * Copyright 2008-2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * OS independent time-manipulation functions. - * - * @author Jose Fonseca - */ - -#ifndef _OS_TIME_H_ -#define _OS_TIME_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define ONE_SECOND_IN_NS INT64_C(1000000000) - -/* must be equal to PIPE_TIMEOUT_INFINITE */ -#define OS_TIMEOUT_INFINITE 0xffffffffffffffffull - -/* - * Get the current time in nanoseconds from an unknown base. - */ -int64_t -os_time_get_nano(void); - - -/* - * Get the current time in microseconds from an unknown base. - */ -static inline int64_t -os_time_get(void) -{ - return os_time_get_nano() / 1000; -} - - -static inline struct tm * -os_localtime(const time_t *timer, struct tm *buf) -{ -#ifdef _WIN32 - return localtime_s(buf, timer) ? NULL : buf; -#else - return localtime_r(timer, buf); -#endif -} - - -/* - * Sleep. - */ -void -os_time_sleep(int64_t usecs); - - -/* - * Helper function for detecting time outs, taking in account overflow. - * - * Returns true if the current time has elapsed beyond the specified interval. - */ -static inline bool -os_time_timeout(int64_t start, - int64_t end, - int64_t curr) -{ - if (start <= end) - return !(start <= curr && curr < end); - else - return !((start <= curr) || (curr < end)); -} - - -/** - * Convert a relative timeout in nanoseconds into an absolute timeout, - * in other words, it returns current time + timeout. - * os_time_get_nano() must be monotonic. - * OS_TIMEOUT_INFINITE is passed through unchanged. If the calculation - * overflows, OS_TIMEOUT_INFINITE is returned. - */ -int64_t -os_time_get_absolute_timeout(uint64_t timeout); - - -/** - * Wait until the variable at the given memory location is zero. - * - * \param var variable - * \param timeout timeout in ns, can be anything from 0 (no wait) to - * OS_TIMEOUT_INFINITE (wait forever) - * \return true if the variable is zero - */ -bool -os_wait_until_zero(volatile int *var, uint64_t timeout); - - -/** - * Wait until the variable at the given memory location is zero. - * The timeout is the absolute time when the waiting should stop. If it is - * less than or equal to the current time, it only returns the status and - * doesn't wait. OS_TIMEOUT_INFINITE waits forever. This requires that - * os_time_get_nano is monotonic. - * - * \param var variable - * \param timeout the time in ns when the waiting should stop - * \return true if the variable is zero - */ -bool -os_wait_until_zero_abs_timeout(volatile int *var, int64_t timeout); - -#ifdef __cplusplus -} -#endif - -#endif /* _OS_TIME_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ptralloc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ptralloc.h deleted file mode 100644 index d74b343..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ptralloc.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright © 2021 Valve Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Mike Blumenkrantz - */ - -#pragma once - -#include -#include -#include -#include "macros.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static inline void * -ptralloc(size_t base_size, unsigned member_count, size_t *member_sizes, void ***members) -{ - size_t size = base_size; - for (unsigned i = 0; i < member_count; i++) - size += member_sizes[i]; - - uint8_t *ptr = (uint8_t*)malloc(size); - if (!ptr) - return NULL; - - size_t accum = base_size; - for (unsigned i = 0; i < member_count; i++) { - *members[i] = (void*)(ptr + accum); - accum += member_sizes[i]; - } - return (void*)ptr; -} - -static inline void * -ptrzalloc(size_t base_size, unsigned member_count, size_t *member_sizes, void ***members) -{ - size_t size = base_size; - for (unsigned i = 0; i < member_count; i++) - size += member_sizes[i]; - - uint8_t *ptr = (uint8_t*)calloc(1, size); - if (!ptr) - return NULL; - - size_t accum = base_size; - for (unsigned i = 0; i < member_count; i++) { - *members[i] = (void*)(ptr + accum); - accum += member_sizes[i]; - } - return (void*)ptr; -} - -#ifdef __cplusplus -} -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ralloc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ralloc.c deleted file mode 100644 index 717eb3e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ralloc.c +++ /dev/null @@ -1,1287 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include -#include -#include -#include -#include - -#include "list.h" -#include "macros.h" -#include "u_math.h" -#include "u_printf.h" - -#include "ralloc.h" - -#define CANARY 0x5A1106 - -#if defined(__LP64__) || defined(_WIN64) -#define HEADER_ALIGN alignas(16) -#else -#define HEADER_ALIGN alignas(8) -#endif - -/* Align the header's size so that ralloc() allocations will return with the - * same alignment as a libc malloc would have (8 on 32-bit GLIBC, 16 on - * 64-bit), avoiding performance penalities on x86 and alignment faults on - * ARM. - */ -struct ralloc_header -{ - HEADER_ALIGN - -#ifndef NDEBUG - /* A canary value used to determine whether a pointer is ralloc'd. */ - unsigned canary; -#endif - - struct ralloc_header *parent; - - /* The first child (head of a linked list) */ - struct ralloc_header *child; - - /* Linked list of siblings */ - struct ralloc_header *prev; - struct ralloc_header *next; - - void (*destructor)(void *); -}; - -typedef struct ralloc_header ralloc_header; - -static void unlink_block(ralloc_header *info); -static void unsafe_free(ralloc_header *info); - -static ralloc_header * -get_header(const void *ptr) -{ - ralloc_header *info = (ralloc_header *) (((char *) ptr) - - sizeof(ralloc_header)); - assert(info->canary == CANARY); - return info; -} - -#define PTR_FROM_HEADER(info) (((char *) info) + sizeof(ralloc_header)) - -static void -add_child(ralloc_header *parent, ralloc_header *info) -{ - if (parent != NULL) { - info->parent = parent; - info->next = parent->child; - parent->child = info; - - if (info->next != NULL) - info->next->prev = info; - } -} - -void * -ralloc_context(const void *ctx) -{ - return ralloc_size(ctx, 0); -} - -void * -ralloc_size(const void *ctx, size_t size) -{ - /* Some malloc allocation doesn't always align to 16 bytes even on 64 bits - * system, from Android bionic/tests/malloc_test.cpp: - * - Allocations of a size that rounds up to a multiple of 16 bytes - * must have at least 16 byte alignment. - * - Allocations of a size that rounds up to a multiple of 8 bytes and - * not 16 bytes, are only required to have at least 8 byte alignment. - */ - void *block = malloc(align64(size + sizeof(ralloc_header), - alignof(ralloc_header))); - ralloc_header *info; - ralloc_header *parent; - - if (unlikely(block == NULL)) - return NULL; - - info = (ralloc_header *) block; - /* measurements have shown that calloc is slower (because of - * the multiplication overflow checking?), so clear things - * manually - */ - info->parent = NULL; - info->child = NULL; - info->prev = NULL; - info->next = NULL; - info->destructor = NULL; - - parent = ctx != NULL ? get_header(ctx) : NULL; - - add_child(parent, info); - -#ifndef NDEBUG - info->canary = CANARY; -#endif - - return PTR_FROM_HEADER(info); -} - -void * -rzalloc_size(const void *ctx, size_t size) -{ - void *ptr = ralloc_size(ctx, size); - - if (likely(ptr)) - memset(ptr, 0, size); - - return ptr; -} - -/* helper function - assumes ptr != NULL */ -static void * -resize(void *ptr, size_t size) -{ - ralloc_header *child, *old, *info; - - old = get_header(ptr); - info = realloc(old, align64(size + sizeof(ralloc_header), - alignof(ralloc_header))); - - if (info == NULL) - return NULL; - - /* Update parent and sibling's links to the reallocated node. */ - if (info != old && info->parent != NULL) { - if (info->parent->child == old) - info->parent->child = info; - - if (info->prev != NULL) - info->prev->next = info; - - if (info->next != NULL) - info->next->prev = info; - } - - /* Update child->parent links for all children */ - for (child = info->child; child != NULL; child = child->next) - child->parent = info; - - return PTR_FROM_HEADER(info); -} - -void * -reralloc_size(const void *ctx, void *ptr, size_t size) -{ - if (unlikely(ptr == NULL)) - return ralloc_size(ctx, size); - - assert(ralloc_parent(ptr) == ctx); - return resize(ptr, size); -} - -void * -rerzalloc_size(const void *ctx, void *ptr, size_t old_size, size_t new_size) -{ - if (unlikely(ptr == NULL)) - return rzalloc_size(ctx, new_size); - - assert(ralloc_parent(ptr) == ctx); - ptr = resize(ptr, new_size); - - if (new_size > old_size) - memset((char *)ptr + old_size, 0, new_size - old_size); - - return ptr; -} - -void * -ralloc_array_size(const void *ctx, size_t size, unsigned count) -{ - if (count > SIZE_MAX/size) - return NULL; - - return ralloc_size(ctx, size * count); -} - -void * -rzalloc_array_size(const void *ctx, size_t size, unsigned count) -{ - if (count > SIZE_MAX/size) - return NULL; - - return rzalloc_size(ctx, size * count); -} - -void * -reralloc_array_size(const void *ctx, void *ptr, size_t size, unsigned count) -{ - if (count > SIZE_MAX/size) - return NULL; - - return reralloc_size(ctx, ptr, size * count); -} - -void * -rerzalloc_array_size(const void *ctx, void *ptr, size_t size, - unsigned old_count, unsigned new_count) -{ - if (new_count > SIZE_MAX/size) - return NULL; - - return rerzalloc_size(ctx, ptr, size * old_count, size * new_count); -} - -void -ralloc_free(void *ptr) -{ - ralloc_header *info; - - if (ptr == NULL) - return; - - info = get_header(ptr); - unlink_block(info); - unsafe_free(info); -} - -static void -unlink_block(ralloc_header *info) -{ - /* Unlink from parent & siblings */ - if (info->parent != NULL) { - if (info->parent->child == info) - info->parent->child = info->next; - - if (info->prev != NULL) - info->prev->next = info->next; - - if (info->next != NULL) - info->next->prev = info->prev; - } - info->parent = NULL; - info->prev = NULL; - info->next = NULL; -} - -static void -unsafe_free(ralloc_header *info) -{ - /* Recursively free any children...don't waste time unlinking them. */ - ralloc_header *temp; - while (info->child != NULL) { - temp = info->child; - info->child = temp->next; - unsafe_free(temp); - } - - /* Free the block itself. Call the destructor first, if any. */ - if (info->destructor != NULL) - info->destructor(PTR_FROM_HEADER(info)); - - free(info); -} - -void -ralloc_steal(const void *new_ctx, void *ptr) -{ - ralloc_header *info, *parent; - - if (unlikely(ptr == NULL)) - return; - - info = get_header(ptr); - parent = new_ctx ? get_header(new_ctx) : NULL; - - unlink_block(info); - - add_child(parent, info); -} - -void -ralloc_adopt(const void *new_ctx, void *old_ctx) -{ - ralloc_header *new_info, *old_info, *child; - - if (unlikely(old_ctx == NULL)) - return; - - old_info = get_header(old_ctx); - new_info = get_header(new_ctx); - - /* If there are no children, bail. */ - if (unlikely(old_info->child == NULL)) - return; - - /* Set all the children's parent to new_ctx; get a pointer to the last child. */ - for (child = old_info->child; child->next != NULL; child = child->next) { - child->parent = new_info; - } - child->parent = new_info; - - /* Connect the two lists together; parent them to new_ctx; make old_ctx empty. */ - child->next = new_info->child; - if (child->next) - child->next->prev = child; - new_info->child = old_info->child; - old_info->child = NULL; -} - -void * -ralloc_parent(const void *ptr) -{ - ralloc_header *info; - - if (unlikely(ptr == NULL)) - return NULL; - - info = get_header(ptr); - return info->parent ? PTR_FROM_HEADER(info->parent) : NULL; -} - -void -ralloc_set_destructor(const void *ptr, void(*destructor)(void *)) -{ - ralloc_header *info = get_header(ptr); - info->destructor = destructor; -} - -char * -ralloc_strdup(const void *ctx, const char *str) -{ - size_t n; - char *ptr; - - if (unlikely(str == NULL)) - return NULL; - - n = strlen(str); - ptr = ralloc_array(ctx, char, n + 1); - memcpy(ptr, str, n); - ptr[n] = '\0'; - return ptr; -} - -char * -ralloc_strndup(const void *ctx, const char *str, size_t max) -{ - size_t n; - char *ptr; - - if (unlikely(str == NULL)) - return NULL; - - n = strnlen(str, max); - ptr = ralloc_array(ctx, char, n + 1); - memcpy(ptr, str, n); - ptr[n] = '\0'; - return ptr; -} - -/* helper routine for strcat/strncat - n is the exact amount to copy */ -static bool -cat(char **dest, const char *str, size_t n) -{ - char *both; - size_t existing_length; - assert(dest != NULL && *dest != NULL); - - existing_length = strlen(*dest); - both = resize(*dest, existing_length + n + 1); - if (unlikely(both == NULL)) - return false; - - memcpy(both + existing_length, str, n); - both[existing_length + n] = '\0'; - - *dest = both; - return true; -} - - -bool -ralloc_strcat(char **dest, const char *str) -{ - return cat(dest, str, strlen(str)); -} - -bool -ralloc_strncat(char **dest, const char *str, size_t n) -{ - return cat(dest, str, strnlen(str, n)); -} - -bool -ralloc_str_append(char **dest, const char *str, - size_t existing_length, size_t str_size) -{ - char *both; - assert(dest != NULL && *dest != NULL); - - both = resize(*dest, existing_length + str_size + 1); - if (unlikely(both == NULL)) - return false; - - memcpy(both + existing_length, str, str_size); - both[existing_length + str_size] = '\0'; - - *dest = both; - - return true; -} - -char * -ralloc_asprintf(const void *ctx, const char *fmt, ...) -{ - char *ptr; - va_list args; - va_start(args, fmt); - ptr = ralloc_vasprintf(ctx, fmt, args); - va_end(args); - return ptr; -} - -char * -ralloc_vasprintf(const void *ctx, const char *fmt, va_list args) -{ - size_t size = u_printf_length(fmt, args) + 1; - - char *ptr = ralloc_size(ctx, size); - if (ptr != NULL) - vsnprintf(ptr, size, fmt, args); - - return ptr; -} - -bool -ralloc_asprintf_append(char **str, const char *fmt, ...) -{ - bool success; - va_list args; - va_start(args, fmt); - success = ralloc_vasprintf_append(str, fmt, args); - va_end(args); - return success; -} - -bool -ralloc_vasprintf_append(char **str, const char *fmt, va_list args) -{ - size_t existing_length; - assert(str != NULL); - existing_length = *str ? strlen(*str) : 0; - return ralloc_vasprintf_rewrite_tail(str, &existing_length, fmt, args); -} - -bool -ralloc_asprintf_rewrite_tail(char **str, size_t *start, const char *fmt, ...) -{ - bool success; - va_list args; - va_start(args, fmt); - success = ralloc_vasprintf_rewrite_tail(str, start, fmt, args); - va_end(args); - return success; -} - -bool -ralloc_vasprintf_rewrite_tail(char **str, size_t *start, const char *fmt, - va_list args) -{ - size_t new_length; - char *ptr; - - assert(str != NULL); - - if (unlikely(*str == NULL)) { - // Assuming a NULL context is probably bad, but it's expected behavior. - *str = ralloc_vasprintf(NULL, fmt, args); - *start = strlen(*str); - return true; - } - - new_length = u_printf_length(fmt, args); - - ptr = resize(*str, *start + new_length + 1); - if (unlikely(ptr == NULL)) - return false; - - vsnprintf(ptr + *start, new_length + 1, fmt, args); - *str = ptr; - *start += new_length; - return true; -} - -/*************************************************************************** - * GC context. - *************************************************************************** - */ - -/* The maximum size of an object that will be allocated specially. - */ -#define MAX_FREELIST_SIZE 512 - -/* Allocations small enough to be allocated from a freelist will be aligned up - * to this size. - */ -#define FREELIST_ALIGNMENT 32 - -#define NUM_FREELIST_BUCKETS (MAX_FREELIST_SIZE / FREELIST_ALIGNMENT) - -/* The size of a slab. */ -#define SLAB_SIZE (32 * 1024) - -#define GC_CANARY 0xAF6B5B72 - -enum gc_flags { - IS_USED = (1 << 0), - CURRENT_GENERATION = (1 << 1), - IS_PADDING = (1 << 7), -}; - -typedef struct -{ -#ifndef NDEBUG - /* A canary value used to determine whether a pointer is allocated using gc_alloc. */ - unsigned canary; -#endif - - uint16_t slab_offset; - uint8_t bucket; - uint8_t flags; - - /* The last padding byte must have IS_PADDING set and is used to store the amount of padding. If - * there is no padding, the IS_PADDING bit of "flags" is unset and "flags" is checked instead. - * Because of this, "flags" must be the last member of this struct. - */ - uint8_t padding[]; -} gc_block_header; - -/* This structure is at the start of the slab. Objects inside a slab are - * allocated using a freelist backed by a simple linear allocator. - */ -typedef struct gc_slab { - HEADER_ALIGN - - gc_ctx *ctx; - - /* Objects are allocated using either linear or freelist allocation. "next_available" is the - * pointer used for linear allocation, while "freelist" is the next free object for freelist - * allocation. - */ - char *next_available; - gc_block_header *freelist; - - /* Slabs that handle the same-sized objects. */ - struct list_head link; - - /* Free slabs that handle the same-sized objects. */ - struct list_head free_link; - - /* Number of allocated and free objects, recorded so that we can free the slab if it - * becomes empty or add one to the freelist if it's no longer full. - */ - unsigned num_allocated; - unsigned num_free; -} gc_slab; - -struct gc_ctx { - /* Array of slabs for fixed-size allocations. Each slab tracks allocations - * of specific sized blocks. User allocations are rounded up to the nearest - * fixed size. slabs[N] contains allocations of size - * FREELIST_ALIGNMENT * (N + 1). - */ - struct { - /* List of slabs in this bucket. */ - struct list_head slabs; - - /* List of slabs with free space in this bucket, so we can quickly choose one when - * allocating. - */ - struct list_head free_slabs; - } slabs[NUM_FREELIST_BUCKETS]; - - uint8_t current_gen; - void *rubbish; -}; - -static gc_block_header * -get_gc_header(const void *ptr) -{ - uint8_t *c_ptr = (uint8_t *)ptr; - - /* Adjust for padding added to ensure alignment of the allocation. There might also be padding - * added by the compiler into gc_block_header, but that isn't counted in the IS_PADDING byte. - */ - if (c_ptr[-1] & IS_PADDING) - c_ptr -= c_ptr[-1] & ~IS_PADDING; - - c_ptr -= sizeof(gc_block_header); - - gc_block_header *info = (gc_block_header *)c_ptr; - assert(info->canary == GC_CANARY); - return info; -} - -static gc_block_header * -get_gc_freelist_next(gc_block_header *ptr) -{ - gc_block_header *next; - /* work around possible strict aliasing bug using memcpy */ - memcpy(&next, (void*)(ptr + 1), sizeof(next)); - return next; -} - -static void -set_gc_freelist_next(gc_block_header *ptr, gc_block_header *next) -{ - memcpy((void*)(ptr + 1), &next, sizeof(next)); -} - -static gc_slab * -get_gc_slab(gc_block_header *header) -{ - return (gc_slab *)((char *)header - header->slab_offset); -} - -gc_ctx * -gc_context(const void *parent) -{ - gc_ctx *ctx = rzalloc(parent, gc_ctx); - for (unsigned i = 0; i < NUM_FREELIST_BUCKETS; i++) { - list_inithead(&ctx->slabs[i].slabs); - list_inithead(&ctx->slabs[i].free_slabs); - } - return ctx; -} - -static size_t -gc_bucket_obj_size(unsigned bucket) -{ - return (bucket + 1) * FREELIST_ALIGNMENT; -} - -static unsigned -gc_bucket_for_size(size_t size) -{ - return (size - 1) / FREELIST_ALIGNMENT; -} - -static unsigned -gc_bucket_num_objs(unsigned bucket) -{ - return (SLAB_SIZE - sizeof(gc_slab)) / gc_bucket_obj_size(bucket); -} - -static gc_block_header * -alloc_from_slab(gc_slab *slab, unsigned bucket) -{ - size_t size = gc_bucket_obj_size(bucket); - gc_block_header *header; - if (slab->freelist) { - /* Prioritize already-allocated chunks, since they probably have a page - * backing them. - */ - header = slab->freelist; - slab->freelist = get_gc_freelist_next(slab->freelist); - } else if (slab->next_available + size <= ((char *) slab) + SLAB_SIZE) { - header = (gc_block_header *) slab->next_available; - header->slab_offset = (char *) header - (char *) slab; - header->bucket = bucket; - slab->next_available += size; - } else { - return NULL; - } - - slab->num_allocated++; - slab->num_free--; - if (!slab->num_free) - list_del(&slab->free_link); - return header; -} - -static void -free_slab(gc_slab *slab) -{ - if (list_is_linked(&slab->free_link)) - list_del(&slab->free_link); - list_del(&slab->link); - ralloc_free(slab); -} - -static void -free_from_slab(gc_block_header *header, bool keep_empty_slabs) -{ - gc_slab *slab = get_gc_slab(header); - - if (slab->num_allocated == 1 && !(keep_empty_slabs && list_is_singular(&slab->free_link))) { - /* Free the slab if this is the last object. */ - free_slab(slab); - return; - } else if (slab->num_free == 0) { - list_add(&slab->free_link, &slab->ctx->slabs[header->bucket].free_slabs); - } else { - /* Keep the free list sorted by the number of free objects in ascending order. By prefering to - * allocate from the slab with the fewest free objects, we help free the slabs with many free - * objects. - */ - while (slab->free_link.next != &slab->ctx->slabs[header->bucket].free_slabs && - slab->num_free > list_entry(slab->free_link.next, gc_slab, free_link)->num_free) { - gc_slab *next = list_entry(slab->free_link.next, gc_slab, free_link); - - /* Move "slab" to after "next". */ - list_move_to(&slab->free_link, &next->free_link); - } - } - - set_gc_freelist_next(header, slab->freelist); - slab->freelist = header; - - slab->num_allocated--; - slab->num_free++; -} - -static unsigned -get_slab_size(unsigned bucket) -{ - /* SLAB_SIZE rounded down to a multiple of the object size so that it's not larger than what can - * be used. - */ - unsigned obj_size = gc_bucket_obj_size(bucket); - unsigned num_objs = gc_bucket_num_objs(bucket); - return align64(sizeof(gc_slab) + num_objs * obj_size, alignof(gc_slab)); -} - -static gc_slab * -create_slab(gc_ctx *ctx, unsigned bucket) -{ - gc_slab *slab = ralloc_size(ctx, get_slab_size(bucket)); - if (unlikely(!slab)) - return NULL; - - slab->ctx = ctx; - slab->freelist = NULL; - slab->next_available = (char*)(slab + 1); - slab->num_allocated = 0; - slab->num_free = gc_bucket_num_objs(bucket); - - list_addtail(&slab->link, &ctx->slabs[bucket].slabs); - list_addtail(&slab->free_link, &ctx->slabs[bucket].free_slabs); - - return slab; -} - -void * -gc_alloc_size(gc_ctx *ctx, size_t size, size_t align) -{ - assert(ctx); - assert(util_is_power_of_two_nonzero(align)); - - align = MAX2(align, alignof(gc_block_header)); - - /* Alignment will add at most align-alignof(gc_block_header) bytes of padding to the header, and - * the IS_PADDING byte can only encode up to 127. - */ - assert((align - alignof(gc_block_header)) <= 127); - - size_t header_size = align64(sizeof(gc_block_header), align); - size = align64(size, align); - size += header_size; - - gc_block_header *header = NULL; - if (size <= MAX_FREELIST_SIZE) { - unsigned bucket = gc_bucket_for_size(size); - if (list_is_empty(&ctx->slabs[bucket].free_slabs) && !create_slab(ctx, bucket)) - return NULL; - gc_slab *slab = list_first_entry(&ctx->slabs[bucket].free_slabs, gc_slab, free_link); - header = alloc_from_slab(slab, bucket); - } else { - header = ralloc_size(ctx, size); - if (unlikely(!header)) - return NULL; - /* Mark the header as allocated directly, so we know to actually free it. */ - header->bucket = NUM_FREELIST_BUCKETS; - } - - header->flags = ctx->current_gen | IS_USED; -#ifndef NDEBUG - header->canary = GC_CANARY; -#endif - - uint8_t *ptr = (uint8_t *)header + header_size; - if ((header_size - 1) != offsetof(gc_block_header, flags)) - ptr[-1] = IS_PADDING | (header_size - sizeof(gc_block_header)); - - assert(((uintptr_t)ptr & (align - 1)) == 0); - return ptr; -} - -void * -gc_zalloc_size(gc_ctx *ctx, size_t size, size_t align) -{ - void *ptr = gc_alloc_size(ctx, size, align); - - if (likely(ptr)) - memset(ptr, 0, size); - - return ptr; -} - -void -gc_free(void *ptr) -{ - if (!ptr) - return; - - gc_block_header *header = get_gc_header(ptr); - header->flags &= ~IS_USED; - - if (header->bucket < NUM_FREELIST_BUCKETS) - free_from_slab(header, true); - else - ralloc_free(header); -} - -gc_ctx *gc_get_context(void *ptr) -{ - gc_block_header *header = get_gc_header(ptr); - - if (header->bucket < NUM_FREELIST_BUCKETS) - return get_gc_slab(header)->ctx; - else - return ralloc_parent(header); -} - -void -gc_sweep_start(gc_ctx *ctx) -{ - ctx->current_gen ^= CURRENT_GENERATION; - - ctx->rubbish = ralloc_context(NULL); - ralloc_adopt(ctx->rubbish, ctx); -} - -void -gc_mark_live(gc_ctx *ctx, const void *mem) -{ - gc_block_header *header = get_gc_header(mem); - if (header->bucket < NUM_FREELIST_BUCKETS) - header->flags ^= CURRENT_GENERATION; - else - ralloc_steal(ctx, header); -} - -void -gc_sweep_end(gc_ctx *ctx) -{ - assert(ctx->rubbish); - - for (unsigned i = 0; i < NUM_FREELIST_BUCKETS; i++) { - unsigned obj_size = gc_bucket_obj_size(i); - list_for_each_entry_safe(gc_slab, slab, &ctx->slabs[i].slabs, link) { - if (!slab->num_allocated) { - free_slab(slab); - continue; - } - - for (char *ptr = (char*)(slab + 1); ptr != slab->next_available; ptr += obj_size) { - gc_block_header *header = (gc_block_header *)ptr; - if (!(header->flags & IS_USED)) - continue; - if ((header->flags & CURRENT_GENERATION) == ctx->current_gen) - continue; - - bool last = slab->num_allocated == 1; - - header->flags &= ~IS_USED; - free_from_slab(header, false); - - if (last) - break; - } - } - } - - for (unsigned i = 0; i < NUM_FREELIST_BUCKETS; i++) { - list_for_each_entry(gc_slab, slab, &ctx->slabs[i].slabs, link) { - assert(slab->num_allocated > 0); /* free_from_slab() should free it otherwise */ - ralloc_steal(ctx, slab); - } - } - - ralloc_free(ctx->rubbish); - ctx->rubbish = NULL; -} - -/*************************************************************************** - * Linear allocator for short-lived allocations. - *************************************************************************** - * - * The allocator consists of a parent node (2K buffer), which requires - * a ralloc parent, and child nodes (allocations). Child nodes can't be freed - * directly, because the parent doesn't track them. You have to release - * the parent node in order to release all its children. - * - * The allocator uses a fixed-sized buffer with a monotonically increasing - * offset after each allocation. If the buffer is all used, another buffer - * is allocated, sharing the same ralloc parent, so all buffers are at - * the same level in the ralloc hierarchy. - * - * The linear parent node is always the first buffer and keeps track of all - * other buffers. - */ - -#define MIN_LINEAR_BUFSIZE 2048 -#define SUBALLOC_ALIGNMENT 8 -#define LMAGIC 0x87b9c7d3 - -struct linear_header { - - HEADER_ALIGN - -#ifndef NDEBUG - unsigned magic; /* for debugging */ -#endif - unsigned offset; /* points to the first unused byte in the buffer */ - unsigned size; /* size of the buffer */ - void *ralloc_parent; /* new buffers will use this */ - struct linear_header *next; /* next buffer if we have more */ - struct linear_header *latest; /* the only buffer that has free space */ - - /* After this structure, the buffer begins. - * Each suballocation consists of linear_size_chunk as its header followed - * by the suballocation, so it goes: - * - * - linear_size_chunk - * - allocated space - * - linear_size_chunk - * - allocated space - * etc. - * - * linear_size_chunk is only needed by linear_realloc. - */ -}; - -struct linear_size_chunk { - unsigned size; /* for realloc */ - unsigned _padding; -}; - -typedef struct linear_header linear_header; -typedef struct linear_size_chunk linear_size_chunk; - -#define LINEAR_PARENT_TO_HEADER(parent) \ - (linear_header*) \ - ((char*)(parent) - sizeof(linear_size_chunk) - sizeof(linear_header)) - -/* Allocate the linear buffer with its header. */ -static linear_header * -create_linear_node(void *ralloc_ctx, unsigned min_size) -{ - linear_header *node; - - min_size += sizeof(linear_size_chunk); - - if (likely(min_size < MIN_LINEAR_BUFSIZE)) - min_size = MIN_LINEAR_BUFSIZE; - - node = ralloc_size(ralloc_ctx, sizeof(linear_header) + min_size); - if (unlikely(!node)) - return NULL; - -#ifndef NDEBUG - node->magic = LMAGIC; -#endif - node->offset = 0; - node->size = min_size; - node->ralloc_parent = ralloc_ctx; - node->next = NULL; - node->latest = node; - return node; -} - -void * -linear_alloc_child(void *parent, unsigned size) -{ - linear_header *first = LINEAR_PARENT_TO_HEADER(parent); - linear_header *latest = first->latest; - linear_header *new_node; - linear_size_chunk *ptr; - unsigned full_size; - - assert(first->magic == LMAGIC); - assert(!latest->next); - - size = ALIGN_POT(size, SUBALLOC_ALIGNMENT); - full_size = sizeof(linear_size_chunk) + size; - - if (unlikely(latest->offset + full_size > latest->size)) { - /* allocate a new node */ - new_node = create_linear_node(latest->ralloc_parent, size); - if (unlikely(!new_node)) - return NULL; - - first->latest = new_node; - latest->latest = new_node; - latest->next = new_node; - latest = new_node; - } - - ptr = (linear_size_chunk *)((char*)&latest[1] + latest->offset); - ptr->size = size; - latest->offset += full_size; - - assert((uintptr_t)&ptr[1] % SUBALLOC_ALIGNMENT == 0); - return &ptr[1]; -} - -void * -linear_alloc_parent(void *ralloc_ctx, unsigned size) -{ - linear_header *node; - - if (unlikely(!ralloc_ctx)) - return NULL; - - size = ALIGN_POT(size, SUBALLOC_ALIGNMENT); - - node = create_linear_node(ralloc_ctx, size); - if (unlikely(!node)) - return NULL; - - return linear_alloc_child((char*)node + - sizeof(linear_header) + - sizeof(linear_size_chunk), size); -} - -void * -linear_zalloc_child(void *parent, unsigned size) -{ - void *ptr = linear_alloc_child(parent, size); - - if (likely(ptr)) - memset(ptr, 0, size); - return ptr; -} - -void * -linear_zalloc_parent(void *parent, unsigned size) -{ - void *ptr = linear_alloc_parent(parent, size); - - if (likely(ptr)) - memset(ptr, 0, size); - return ptr; -} - -void -linear_free_parent(void *ptr) -{ - linear_header *node; - - if (unlikely(!ptr)) - return; - - node = LINEAR_PARENT_TO_HEADER(ptr); - assert(node->magic == LMAGIC); - - while (node) { - void *ptr = node; - - node = node->next; - ralloc_free(ptr); - } -} - -void -ralloc_steal_linear_parent(void *new_ralloc_ctx, void *ptr) -{ - linear_header *node; - - if (unlikely(!ptr)) - return; - - node = LINEAR_PARENT_TO_HEADER(ptr); - assert(node->magic == LMAGIC); - - while (node) { - ralloc_steal(new_ralloc_ctx, node); - node->ralloc_parent = new_ralloc_ctx; - node = node->next; - } -} - -void * -ralloc_parent_of_linear_parent(void *ptr) -{ - linear_header *node = LINEAR_PARENT_TO_HEADER(ptr); - assert(node->magic == LMAGIC); - return node->ralloc_parent; -} - -void * -linear_realloc(void *parent, void *old, unsigned new_size) -{ - unsigned old_size = 0; - ralloc_header *new_ptr; - - new_ptr = linear_alloc_child(parent, new_size); - - if (unlikely(!old)) - return new_ptr; - - old_size = ((linear_size_chunk*)old)[-1].size; - - if (likely(new_ptr && old_size)) - memcpy(new_ptr, old, MIN2(old_size, new_size)); - - return new_ptr; -} - -/* All code below is pretty much copied from ralloc and only the alloc - * calls are different. - */ - -char * -linear_strdup(void *parent, const char *str) -{ - unsigned n; - char *ptr; - - if (unlikely(!str)) - return NULL; - - n = strlen(str); - ptr = linear_alloc_child(parent, n + 1); - if (unlikely(!ptr)) - return NULL; - - memcpy(ptr, str, n); - ptr[n] = '\0'; - return ptr; -} - -char * -linear_asprintf(void *parent, const char *fmt, ...) -{ - char *ptr; - va_list args; - va_start(args, fmt); - ptr = linear_vasprintf(parent, fmt, args); - va_end(args); - return ptr; -} - -char * -linear_vasprintf(void *parent, const char *fmt, va_list args) -{ - unsigned size = u_printf_length(fmt, args) + 1; - - char *ptr = linear_alloc_child(parent, size); - if (ptr != NULL) - vsnprintf(ptr, size, fmt, args); - - return ptr; -} - -bool -linear_asprintf_append(void *parent, char **str, const char *fmt, ...) -{ - bool success; - va_list args; - va_start(args, fmt); - success = linear_vasprintf_append(parent, str, fmt, args); - va_end(args); - return success; -} - -bool -linear_vasprintf_append(void *parent, char **str, const char *fmt, va_list args) -{ - size_t existing_length; - assert(str != NULL); - existing_length = *str ? strlen(*str) : 0; - return linear_vasprintf_rewrite_tail(parent, str, &existing_length, fmt, args); -} - -bool -linear_asprintf_rewrite_tail(void *parent, char **str, size_t *start, - const char *fmt, ...) -{ - bool success; - va_list args; - va_start(args, fmt); - success = linear_vasprintf_rewrite_tail(parent, str, start, fmt, args); - va_end(args); - return success; -} - -bool -linear_vasprintf_rewrite_tail(void *parent, char **str, size_t *start, - const char *fmt, va_list args) -{ - size_t new_length; - char *ptr; - - assert(str != NULL); - - if (unlikely(*str == NULL)) { - *str = linear_vasprintf(parent, fmt, args); - *start = strlen(*str); - return true; - } - - new_length = u_printf_length(fmt, args); - - ptr = linear_realloc(parent, *str, *start + new_length + 1); - if (unlikely(ptr == NULL)) - return false; - - vsnprintf(ptr + *start, new_length + 1, fmt, args); - *str = ptr; - *start += new_length; - return true; -} - -/* helper routine for strcat/strncat - n is the exact amount to copy */ -static bool -linear_cat(void *parent, char **dest, const char *str, unsigned n) -{ - char *both; - unsigned existing_length; - assert(dest != NULL && *dest != NULL); - - existing_length = strlen(*dest); - both = linear_realloc(parent, *dest, existing_length + n + 1); - if (unlikely(both == NULL)) - return false; - - memcpy(both + existing_length, str, n); - both[existing_length + n] = '\0'; - - *dest = both; - return true; -} - -bool -linear_strcat(void *parent, char **dest, const char *str) -{ - return linear_cat(parent, dest, str, strlen(str)); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ralloc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ralloc.h deleted file mode 100644 index ccd8a4f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/ralloc.h +++ /dev/null @@ -1,633 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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 ralloc.h - * - * ralloc: a recursive memory allocator - * - * The ralloc memory allocator creates a hierarchy of allocated - * objects. Every allocation is in reference to some parent, and - * every allocated object can in turn be used as the parent of a - * subsequent allocation. This allows for extremely convenient - * discarding of an entire tree/sub-tree of allocations by calling - * ralloc_free on any particular object to free it and all of its - * children. - * - * The conceptual working of ralloc was directly inspired by Andrew - * Tridgell's talloc, but ralloc is an independent implementation - * released under the MIT license and tuned for Mesa. - * - * talloc is more sophisticated than ralloc in that it includes reference - * counting and useful debugging features. However, it is released under - * a non-permissive open source license. - */ - -#ifndef RALLOC_H -#define RALLOC_H - -#include -#include -#include - -#include "macros.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \def ralloc(ctx, type) - * Allocate a new object chained off of the given context. - * - * This is equivalent to: - * \code - * ((type *) ralloc_size(ctx, sizeof(type)) - * \endcode - */ -#define ralloc(ctx, type) ((type *) ralloc_size(ctx, sizeof(type))) - -/** - * \def rzalloc(ctx, type) - * Allocate a new object out of the given context and initialize it to zero. - * - * This is equivalent to: - * \code - * ((type *) rzalloc_size(ctx, sizeof(type)) - * \endcode - */ -#define rzalloc(ctx, type) ((type *) rzalloc_size(ctx, sizeof(type))) - -/** - * Allocate a new ralloc context. - * - * While any ralloc'd pointer can be used as a context, sometimes it is useful - * to simply allocate a context with no associated memory. - * - * It is equivalent to: - * \code - * ((type *) ralloc_size(ctx, 0) - * \endcode - */ -void *ralloc_context(const void *ctx); - -/** - * Allocate memory chained off of the given context. - * - * This is the core allocation routine which is used by all others. It - * simply allocates storage for \p size bytes and returns the pointer, - * similar to \c malloc. - */ -void *ralloc_size(const void *ctx, size_t size) MALLOCLIKE; - -/** - * Allocate zero-initialized memory chained off of the given context. - * - * This is similar to \c calloc with a size of 1. - */ -void *rzalloc_size(const void *ctx, size_t size) MALLOCLIKE; - -/** - * Resize a piece of ralloc-managed memory, preserving data. - * - * Similar to \c realloc. Unlike C89, passing 0 for \p size does not free the - * memory. Instead, it resizes it to a 0-byte ralloc context, just like - * calling ralloc_size(ctx, 0). This is different from talloc. - * - * \param ctx The context to use for new allocation. If \p ptr != NULL, - * it must be the same as ralloc_parent(\p ptr). - * \param ptr Pointer to the memory to be resized. May be NULL. - * \param size The amount of memory to allocate, in bytes. - */ -void *reralloc_size(const void *ctx, void *ptr, size_t size); - -/** - * Resize a ralloc-managed array, preserving data and initializing any newly - * allocated data to zero. - * - * Similar to \c realloc. Unlike C89, passing 0 for \p size does not free the - * memory. Instead, it resizes it to a 0-byte ralloc context, just like - * calling ralloc_size(ctx, 0). This is different from talloc. - * - * \param ctx The context to use for new allocation. If \p ptr != NULL, - * it must be the same as ralloc_parent(\p ptr). - * \param ptr Pointer to the memory to be resized. May be NULL. - * \param old_size The amount of memory in the previous allocation, in bytes. - * \param new_size The amount of memory to allocate, in bytes. - */ -void *rerzalloc_size(const void *ctx, void *ptr, - size_t old_size, size_t new_size); - -/// \defgroup array Array Allocators @{ - -/** - * \def ralloc_array(ctx, type, count) - * Allocate an array of objects chained off the given context. - * - * Similar to \c calloc, but does not initialize the memory to zero. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \c sizeof(type) and \p count. This is necessary for security. - * - * This is equivalent to: - * \code - * ((type *) ralloc_array_size(ctx, sizeof(type), count) - * \endcode - */ -#define ralloc_array(ctx, type, count) \ - ((type *) ralloc_array_size(ctx, sizeof(type), count)) - -/** - * \def rzalloc_array(ctx, type, count) - * Allocate a zero-initialized array chained off the given context. - * - * Similar to \c calloc. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \c sizeof(type) and \p count. This is necessary for security. - * - * This is equivalent to: - * \code - * ((type *) rzalloc_array_size(ctx, sizeof(type), count) - * \endcode - */ -#define rzalloc_array(ctx, type, count) \ - ((type *) rzalloc_array_size(ctx, sizeof(type), count)) - -/** - * \def reralloc(ctx, ptr, type, count) - * Resize a ralloc-managed array, preserving data. - * - * Similar to \c realloc. Unlike C89, passing 0 for \p size does not free the - * memory. Instead, it resizes it to a 0-byte ralloc context, just like - * calling ralloc_size(ctx, 0). This is different from talloc. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \c sizeof(type) and \p count. This is necessary for security. - * - * \param ctx The context to use for new allocation. If \p ptr != NULL, - * it must be the same as ralloc_parent(\p ptr). - * \param ptr Pointer to the array to be resized. May be NULL. - * \param type The element type. - * \param count The number of elements to allocate. - */ -#define reralloc(ctx, ptr, type, count) \ - ((type *) reralloc_array_size(ctx, ptr, sizeof(type), count)) - -/** - * \def rerzalloc(ctx, ptr, type, count) - * Resize a ralloc-managed array, preserving data and initializing any newly - * allocated data to zero. - * - * Similar to \c realloc. Unlike C89, passing 0 for \p size does not free the - * memory. Instead, it resizes it to a 0-byte ralloc context, just like - * calling ralloc_size(ctx, 0). This is different from talloc. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \c sizeof(type) and \p count. This is necessary for security. - * - * \param ctx The context to use for new allocation. If \p ptr != NULL, - * it must be the same as ralloc_parent(\p ptr). - * \param ptr Pointer to the array to be resized. May be NULL. - * \param type The element type. - * \param old_count The number of elements in the previous allocation. - * \param new_count The number of elements to allocate. - */ -#define rerzalloc(ctx, ptr, type, old_count, new_count) \ - ((type *) rerzalloc_array_size(ctx, ptr, sizeof(type), old_count, new_count)) - -/** - * Allocate memory for an array chained off the given context. - * - * Similar to \c calloc, but does not initialize the memory to zero. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \p size and \p count. This is necessary for security. - */ -void *ralloc_array_size(const void *ctx, size_t size, unsigned count) MALLOCLIKE; - -/** - * Allocate a zero-initialized array chained off the given context. - * - * Similar to \c calloc. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \p size and \p count. This is necessary for security. - */ -void *rzalloc_array_size(const void *ctx, size_t size, unsigned count) MALLOCLIKE; - -/** - * Resize a ralloc-managed array, preserving data. - * - * Similar to \c realloc. Unlike C89, passing 0 for \p size does not free the - * memory. Instead, it resizes it to a 0-byte ralloc context, just like - * calling ralloc_size(ctx, 0). This is different from talloc. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \c sizeof(type) and \p count. This is necessary for security. - * - * \param ctx The context to use for new allocation. If \p ptr != NULL, - * it must be the same as ralloc_parent(\p ptr). - * \param ptr Pointer to the array to be resized. May be NULL. - * \param size The size of an individual element. - * \param count The number of elements to allocate. - * - * \return True unless allocation failed. - */ -void *reralloc_array_size(const void *ctx, void *ptr, size_t size, - unsigned count); - -/** - * Resize a ralloc-managed array, preserving data and initializing any newly - * allocated data to zero. - * - * Similar to \c realloc. Unlike C89, passing 0 for \p size does not free the - * memory. Instead, it resizes it to a 0-byte ralloc context, just like - * calling ralloc_size(ctx, 0). This is different from talloc. - * - * More than a convenience function, this also checks for integer overflow when - * multiplying \c sizeof(type) and \p count. This is necessary for security. - * - * \param ctx The context to use for new allocation. If \p ptr != NULL, - * it must be the same as ralloc_parent(\p ptr). - * \param ptr Pointer to the array to be resized. May be NULL. - * \param size The size of an individual element. - * \param old_count The number of elements in the previous allocation. - * \param new_count The number of elements to allocate. - * - * \return True unless allocation failed. - */ -void *rerzalloc_array_size(const void *ctx, void *ptr, size_t size, - unsigned old_count, unsigned new_count); -/// @} - -/** - * Free a piece of ralloc-managed memory. - * - * This will also free the memory of any children allocated this context. - */ -void ralloc_free(void *ptr); - -/** - * "Steal" memory from one context, changing it to another. - * - * This changes \p ptr's context to \p new_ctx. This is quite useful if - * memory is allocated out of a temporary context. - */ -void ralloc_steal(const void *new_ctx, void *ptr); - -/** - * Reparent all children from one context to another. - * - * This effectively calls ralloc_steal(new_ctx, child) for all children of \p old_ctx. - */ -void ralloc_adopt(const void *new_ctx, void *old_ctx); - -/** - * Return the given pointer's ralloc context. - */ -void *ralloc_parent(const void *ptr); - -/** - * Set a callback to occur just before an object is freed. - */ -void ralloc_set_destructor(const void *ptr, void(*destructor)(void *)); - -/// \defgroup array String Functions @{ -/** - * Duplicate a string, allocating the memory from the given context. - */ -char *ralloc_strdup(const void *ctx, const char *str) MALLOCLIKE; - -/** - * Duplicate a string, allocating the memory from the given context. - * - * Like \c strndup, at most \p n characters are copied. If \p str is longer - * than \p n characters, \p n are copied, and a termining \c '\0' byte is added. - */ -char *ralloc_strndup(const void *ctx, const char *str, size_t n) MALLOCLIKE; - -/** - * Concatenate two strings, allocating the necessary space. - * - * This appends \p str to \p *dest, similar to \c strcat, using ralloc_resize - * to expand \p *dest to the appropriate size. \p dest will be updated to the - * new pointer unless allocation fails. - * - * The result will always be null-terminated. - * - * \return True unless allocation failed. - */ -bool ralloc_strcat(char **dest, const char *str); - -/** - * Concatenate two strings, allocating the necessary space. - * - * This appends at most \p n bytes of \p str to \p *dest, using ralloc_resize - * to expand \p *dest to the appropriate size. \p dest will be updated to the - * new pointer unless allocation fails. - * - * The result will always be null-terminated; \p str does not need to be null - * terminated if it is longer than \p n. - * - * \return True unless allocation failed. - */ -bool ralloc_strncat(char **dest, const char *str, size_t n); - -/** - * Concatenate two strings, allocating the necessary space. - * - * This appends \p n bytes of \p str to \p *dest, using ralloc_resize - * to expand \p *dest to the appropriate size. \p dest will be updated to the - * new pointer unless allocation fails. - * - * The result will always be null-terminated. - * - * This function differs from ralloc_strcat() and ralloc_strncat() in that it - * does not do any strlen() calls which can become costly on large strings. - * - * \return True unless allocation failed. - */ -bool -ralloc_str_append(char **dest, const char *str, - size_t existing_length, size_t str_size); - -/** - * Print to a string. - * - * This is analogous to \c sprintf, but allocates enough space (using \p ctx - * as the context) for the resulting string. - * - * \return The newly allocated string. - */ -char *ralloc_asprintf (const void *ctx, const char *fmt, ...) PRINTFLIKE(2, 3) MALLOCLIKE; - -/** - * Print to a string, given a va_list. - * - * This is analogous to \c vsprintf, but allocates enough space (using \p ctx - * as the context) for the resulting string. - * - * \return The newly allocated string. - */ -char *ralloc_vasprintf(const void *ctx, const char *fmt, va_list args) MALLOCLIKE; - -/** - * Rewrite the tail of an existing string, starting at a given index. - * - * Overwrites the contents of *str starting at \p start with newly formatted - * text, including a new null-terminator. Allocates more memory as necessary. - * - * This can be used to append formatted text when the length of the existing - * string is already known, saving a strlen() call. - * - * \sa ralloc_asprintf_append - * - * \param str The string to be updated. - * \param start The index to start appending new data at. - * \param fmt A printf-style formatting string - * - * \p str will be updated to the new pointer unless allocation fails. - * \p start will be increased by the length of the newly formatted text. - * - * \return True unless allocation failed. - */ -bool ralloc_asprintf_rewrite_tail(char **str, size_t *start, - const char *fmt, ...) - PRINTFLIKE(3, 4); - -/** - * Rewrite the tail of an existing string, starting at a given index. - * - * Overwrites the contents of *str starting at \p start with newly formatted - * text, including a new null-terminator. Allocates more memory as necessary. - * - * This can be used to append formatted text when the length of the existing - * string is already known, saving a strlen() call. - * - * \sa ralloc_vasprintf_append - * - * \param str The string to be updated. - * \param start The index to start appending new data at. - * \param fmt A printf-style formatting string - * \param args A va_list containing the data to be formatted - * - * \p str will be updated to the new pointer unless allocation fails. - * \p start will be increased by the length of the newly formatted text. - * - * \return True unless allocation failed. - */ -bool ralloc_vasprintf_rewrite_tail(char **str, size_t *start, const char *fmt, - va_list args); - -/** - * Append formatted text to the supplied string. - * - * This is equivalent to - * \code - * ralloc_asprintf_rewrite_tail(str, strlen(*str), fmt, ...) - * \endcode - * - * \sa ralloc_asprintf - * \sa ralloc_asprintf_rewrite_tail - * \sa ralloc_strcat - * - * \p str will be updated to the new pointer unless allocation fails. - * - * \return True unless allocation failed. - */ -bool ralloc_asprintf_append (char **str, const char *fmt, ...) - PRINTFLIKE(2, 3); - -/** - * Append formatted text to the supplied string, given a va_list. - * - * This is equivalent to - * \code - * ralloc_vasprintf_rewrite_tail(str, strlen(*str), fmt, args) - * \endcode - * - * \sa ralloc_vasprintf - * \sa ralloc_vasprintf_rewrite_tail - * \sa ralloc_strcat - * - * \p str will be updated to the new pointer unless allocation fails. - * - * \return True unless allocation failed. - */ -bool ralloc_vasprintf_append(char **str, const char *fmt, va_list args); -/// @} - -typedef struct gc_ctx gc_ctx; - -/** - * Allocate a new garbage collection context. The children of the - * context are not necessarily ralloc'd pointers and cannot be stolen to a ralloc context. Instead, - * The user should use the mark-and-sweep interface below to free any unused children. Under the - * hood, this restriction lets us manage allocations ourselves, using a freelist. This means that - * GC contexts should be used for scenarios where there are many allocations and frees, most of - * which use only a few different sizes. - */ -gc_ctx *gc_context(const void *parent); - -#define gc_alloc(ctx, type, count) gc_alloc_size(ctx, sizeof(type) * (count), alignof(type)) -#define gc_zalloc(ctx, type, count) gc_zalloc_size(ctx, sizeof(type) * (count), alignof(type)) - -#define gc_alloc_zla(ctx, type, type2, count) \ - gc_alloc_size(ctx, sizeof(type) + sizeof(type2) * (count), MAX2(alignof(type), alignof(type2))) -#define gc_zalloc_zla(ctx, type, type2, count) \ - gc_zalloc_size(ctx, sizeof(type) + sizeof(type2) * (count), MAX2(alignof(type), alignof(type2))) - -void *gc_alloc_size(gc_ctx *ctx, size_t size, size_t align) MALLOCLIKE; -void *gc_zalloc_size(gc_ctx *ctx, size_t size, size_t align) MALLOCLIKE; -void gc_free(void *ptr); -gc_ctx *gc_get_context(void *ptr); - -void gc_sweep_start(gc_ctx *ctx); -void gc_mark_live(gc_ctx *ctx, const void *mem); -void gc_sweep_end(gc_ctx *ctx); - -/** - * Declare C++ new and delete operators which use ralloc. - * - * Placing this macro in the body of a class makes it possible to do: - * - * TYPE *var = new(mem_ctx) TYPE(...); - * delete var; - * - * which is more idiomatic in C++ than calling ralloc. - */ -#define DECLARE_ALLOC_CXX_OPERATORS_TEMPLATE(TYPE, ALLOC_FUNC) \ -private: \ - static void _ralloc_destructor(void *p) \ - { \ - reinterpret_cast(p)->TYPE::~TYPE(); \ - } \ -public: \ - static void* operator new(size_t size, void *mem_ctx) \ - { \ - void *p = ALLOC_FUNC(mem_ctx, size); \ - assert(p != NULL); \ - if (!HAS_TRIVIAL_DESTRUCTOR(TYPE)) \ - ralloc_set_destructor(p, _ralloc_destructor); \ - return p; \ - } \ - \ - static void operator delete(void *p) \ - { \ - /* The object's destructor is guaranteed to have already been \ - * called by the delete operator at this point -- Make sure it's \ - * not called again. \ - */ \ - if (!HAS_TRIVIAL_DESTRUCTOR(TYPE)) \ - ralloc_set_destructor(p, NULL); \ - ralloc_free(p); \ - } - -#define DECLARE_RALLOC_CXX_OPERATORS(type) \ - DECLARE_ALLOC_CXX_OPERATORS_TEMPLATE(type, ralloc_size) - -#define DECLARE_RZALLOC_CXX_OPERATORS(type) \ - DECLARE_ALLOC_CXX_OPERATORS_TEMPLATE(type, rzalloc_size) - -#define DECLARE_LINEAR_ALLOC_CXX_OPERATORS(type) \ - DECLARE_ALLOC_CXX_OPERATORS_TEMPLATE(type, linear_alloc_child) - -#define DECLARE_LINEAR_ZALLOC_CXX_OPERATORS(type) \ - DECLARE_ALLOC_CXX_OPERATORS_TEMPLATE(type, linear_zalloc_child) - - -/** - * Do a fast allocation from the linear buffer, also known as the child node - * from the allocator's point of view. It can't be freed directly. You have - * to free the parent or the ralloc parent. - * - * \param parent parent node of the linear allocator - * \param size size to allocate (max 32 bits) - */ -void *linear_alloc_child(void *parent, unsigned size); - -/** - * Allocate a parent node that will hold linear buffers. The returned - * allocation is actually the first child node, but it's also the handle - * of the parent node. Use it for all child node allocations. - * - * \param ralloc_ctx ralloc context, must not be NULL - * \param size size to allocate (max 32 bits) - */ -void *linear_alloc_parent(void *ralloc_ctx, unsigned size); - -/** - * Same as linear_alloc_child, but also clears memory. - */ -void *linear_zalloc_child(void *parent, unsigned size); - -/** - * Same as linear_alloc_parent, but also clears memory. - */ -void *linear_zalloc_parent(void *ralloc_ctx, unsigned size); - -/** - * Free the linear parent node. This will free all child nodes too. - * Freeing the ralloc parent will also free this. - */ -void linear_free_parent(void *ptr); - -/** - * Same as ralloc_steal, but steals the linear parent node. - */ -void ralloc_steal_linear_parent(void *new_ralloc_ctx, void *ptr); - -/** - * Return the ralloc parent of the linear parent node. - */ -void *ralloc_parent_of_linear_parent(void *ptr); - -/** - * Same as realloc except that the linear allocator doesn't free child nodes, - * so it's reduced to memory duplication. It's used in places where - * reallocation is required. Don't use it often. It's much slower than - * realloc. - */ -void *linear_realloc(void *parent, void *old, unsigned new_size); - -/* The functions below have the same semantics as their ralloc counterparts, - * except that they always allocate a linear child node. - */ -char *linear_strdup(void *parent, const char *str); -char *linear_asprintf(void *parent, const char *fmt, ...); -char *linear_vasprintf(void *parent, const char *fmt, va_list args); -bool linear_asprintf_append(void *parent, char **str, const char *fmt, ...); -bool linear_vasprintf_append(void *parent, char **str, const char *fmt, - va_list args); -bool linear_asprintf_rewrite_tail(void *parent, char **str, size_t *start, - const char *fmt, ...); -bool linear_vasprintf_rewrite_tail(void *parent, char **str, size_t *start, - const char *fmt, va_list args); -bool linear_strcat(void *parent, char **dest, const char *str); - -#ifdef __cplusplus -} /* end of extern "C" */ -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rand_xor.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rand_xor.c deleted file mode 100644 index 81b64f1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rand_xor.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2017 Timothy Arceri - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#include "detect_os.h" - -#if !DETECT_OS_WINDOWS -#if defined(HAVE_GETRANDOM) -#include -#endif -#include -#include -#endif - -#include - -#include "rand_xor.h" - -/* Super fast random number generator. - * - * This rand_xorshift128plus function by Sebastiano Vigna belongs - * to the public domain. - */ -uint64_t -rand_xorshift128plus(uint64_t seed[2]) -{ - uint64_t *s = seed; - - uint64_t s1 = s[0]; - const uint64_t s0 = s[1]; - s[0] = s0; - s1 ^= s1 << 23; - s[1] = s1 ^ s0 ^ (s1 >> 18) ^ (s0 >> 5); - - return s[1] + s0; -} - -void -s_rand_xorshift128plus(uint64_t seed[2], bool randomised_seed) -{ - if (!randomised_seed) { - /* Use a fixed seed */ - seed[0] = 0x3bffb83978e24f88; - seed[1] = 0x9238d5d56c71cd35; - return; - } - -#if !DETECT_OS_WINDOWS - size_t seed_size = sizeof(uint64_t) * 2; - -#if defined(HAVE_GETRANDOM) - ssize_t ret = getrandom(seed, seed_size, GRND_NONBLOCK); - if (ret == seed_size) - return; -#endif - - int fd = open("/dev/urandom", O_RDONLY); - if (fd >= 0) { - if (read(fd, seed, seed_size) == seed_size) { - close(fd); - return; - } - close(fd); - } -#endif - - seed[0] = 0x3bffb83978e24f88; - seed[1] = time(NULL); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rand_xor.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rand_xor.h deleted file mode 100644 index b55598f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rand_xor.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2017 Timothy Arceri - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#ifndef RAND_XOR_H -#define RAND_XOR_H - -#include -#include - -uint64_t -rand_xorshift128plus(uint64_t seed[2]); - -void -s_rand_xorshift128plus(uint64_t seed[2], bool randomised_seed); - -#endif /* RAND_XOR_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rb_tree.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rb_tree.c deleted file mode 100644 index b23919e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rb_tree.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright © 2017 Faith Ekstrand - * - * 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 THE - * AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "rb_tree.h" - -/** \file rb_tree.c - * - * An implementation of a red-black tree - * - * This file implements the guts of a red-black tree. The implementation - * is mostly based on the one in "Introduction to Algorithms", third - * edition, by Cormen, Leiserson, Rivest, and Stein. The primary - * divergence in our algorithms from those presented in CLRS is that we use - * NULL for the leaves instead of a sentinel. This means we have to do a - * tiny bit more tracking in our implementation of delete but it makes the - * algorithms far more explicit than stashing stuff in the sentinel. - */ - -#include -#include -#include - -static bool -rb_node_is_black(struct rb_node *n) -{ - /* NULL nodes are leaves and therefore black */ - return (n == NULL) || (n->parent & 1); -} - -static bool -rb_node_is_red(struct rb_node *n) -{ - return !rb_node_is_black(n); -} - -static void -rb_node_set_black(struct rb_node *n) -{ - n->parent |= 1; -} - -static void -rb_node_set_red(struct rb_node *n) -{ - n->parent &= ~1ull; -} - -static void -rb_node_copy_color(struct rb_node *dst, struct rb_node *src) -{ - dst->parent = (dst->parent & ~1ull) | (src->parent & 1); -} - -static void -rb_node_set_parent(struct rb_node *n, struct rb_node *p) -{ - n->parent = (n->parent & 1) | (uintptr_t)p; -} - -static struct rb_node * -rb_node_minimum(struct rb_node *node) -{ - while (node->left) - node = node->left; - return node; -} - -static struct rb_node * -rb_node_maximum(struct rb_node *node) -{ - while (node->right) - node = node->right; - return node; -} - -void -rb_tree_init(struct rb_tree *T) -{ - T->root = NULL; -} - -/** - * Replace the subtree of T rooted at u with the subtree rooted at v - * - * This is called RB-transplant in CLRS. - * - * The node to be replaced is assumed to be a non-leaf. - */ -static void -rb_tree_splice(struct rb_tree *T, struct rb_node *u, struct rb_node *v) -{ - assert(u); - struct rb_node *p = rb_node_parent(u); - if (p == NULL) { - assert(T->root == u); - T->root = v; - } else if (u == p->left) { - p->left = v; - } else { - assert(u == p->right); - p->right = v; - } - if (v) - rb_node_set_parent(v, p); -} - -static void -rb_tree_rotate_left(struct rb_tree *T, struct rb_node *x) -{ - assert(x && x->right); - - struct rb_node *y = x->right; - x->right = y->left; - if (y->left) - rb_node_set_parent(y->left, x); - rb_tree_splice(T, x, y); - y->left = x; - rb_node_set_parent(x, y); -} - -static void -rb_tree_rotate_right(struct rb_tree *T, struct rb_node *y) -{ - assert(y && y->left); - - struct rb_node *x = y->left; - y->left = x->right; - if (x->right) - rb_node_set_parent(x->right, y); - rb_tree_splice(T, y, x); - x->right = y; - rb_node_set_parent(y, x); -} - -void -rb_tree_insert_at(struct rb_tree *T, struct rb_node *parent, - struct rb_node *node, bool insert_left) -{ - /* This sets null children, parent, and a color of red */ - memset(node, 0, sizeof(*node)); - - if (parent == NULL) { - assert(T->root == NULL); - T->root = node; - rb_node_set_black(node); - return; - } - - if (insert_left) { - assert(parent->left == NULL); - parent->left = node; - } else { - assert(parent->right == NULL); - parent->right = node; - } - rb_node_set_parent(node, parent); - - /* Now we do the insertion fixup */ - struct rb_node *z = node; - while (rb_node_is_red(rb_node_parent(z))) { - struct rb_node *z_p = rb_node_parent(z); - assert(z == z_p->left || z == z_p->right); - struct rb_node *z_p_p = rb_node_parent(z_p); - assert(z_p_p != NULL); - if (z_p == z_p_p->left) { - struct rb_node *y = z_p_p->right; - if (rb_node_is_red(y)) { - rb_node_set_black(z_p); - rb_node_set_black(y); - rb_node_set_red(z_p_p); - z = z_p_p; - } else { - if (z == z_p->right) { - z = z_p; - rb_tree_rotate_left(T, z); - /* We changed z */ - z_p = rb_node_parent(z); - assert(z == z_p->left || z == z_p->right); - z_p_p = rb_node_parent(z_p); - } - rb_node_set_black(z_p); - rb_node_set_red(z_p_p); - rb_tree_rotate_right(T, z_p_p); - } - } else { - struct rb_node *y = z_p_p->left; - if (rb_node_is_red(y)) { - rb_node_set_black(z_p); - rb_node_set_black(y); - rb_node_set_red(z_p_p); - z = z_p_p; - } else { - if (z == z_p->left) { - z = z_p; - rb_tree_rotate_right(T, z); - /* We changed z */ - z_p = rb_node_parent(z); - assert(z == z_p->left || z == z_p->right); - z_p_p = rb_node_parent(z_p); - } - rb_node_set_black(z_p); - rb_node_set_red(z_p_p); - rb_tree_rotate_left(T, z_p_p); - } - } - } - rb_node_set_black(T->root); -} - -void -rb_tree_remove(struct rb_tree *T, struct rb_node *z) -{ - /* x_p is always the parent node of X. We have to track this - * separately because x may be NULL. - */ - struct rb_node *x, *x_p; - struct rb_node *y = z; - bool y_was_black = rb_node_is_black(y); - if (z->left == NULL) { - x = z->right; - x_p = rb_node_parent(z); - rb_tree_splice(T, z, x); - } else if (z->right == NULL) { - x = z->left; - x_p = rb_node_parent(z); - rb_tree_splice(T, z, x); - } else { - /* Find the minimum sub-node of z->right */ - y = rb_node_minimum(z->right); - y_was_black = rb_node_is_black(y); - - x = y->right; - if (rb_node_parent(y) == z) { - x_p = y; - } else { - x_p = rb_node_parent(y); - rb_tree_splice(T, y, x); - y->right = z->right; - rb_node_set_parent(y->right, y); - } - assert(y->left == NULL); - rb_tree_splice(T, z, y); - y->left = z->left; - rb_node_set_parent(y->left, y); - rb_node_copy_color(y, z); - } - - assert(x_p == NULL || x == x_p->left || x == x_p->right); - - if (!y_was_black) - return; - - /* Fixup RB tree after the delete */ - while (x != T->root && rb_node_is_black(x)) { - if (x == x_p->left) { - struct rb_node *w = x_p->right; - if (rb_node_is_red(w)) { - rb_node_set_black(w); - rb_node_set_red(x_p); - rb_tree_rotate_left(T, x_p); - assert(x == x_p->left); - w = x_p->right; - } - if (rb_node_is_black(w->left) && rb_node_is_black(w->right)) { - rb_node_set_red(w); - x = x_p; - } else { - if (rb_node_is_black(w->right)) { - rb_node_set_black(w->left); - rb_node_set_red(w); - rb_tree_rotate_right(T, w); - w = x_p->right; - } - rb_node_copy_color(w, x_p); - rb_node_set_black(x_p); - rb_node_set_black(w->right); - rb_tree_rotate_left(T, x_p); - x = T->root; - } - } else { - struct rb_node *w = x_p->left; - if (rb_node_is_red(w)) { - rb_node_set_black(w); - rb_node_set_red(x_p); - rb_tree_rotate_right(T, x_p); - assert(x == x_p->right); - w = x_p->left; - } - if (rb_node_is_black(w->right) && rb_node_is_black(w->left)) { - rb_node_set_red(w); - x = x_p; - } else { - if (rb_node_is_black(w->left)) { - rb_node_set_black(w->right); - rb_node_set_red(w); - rb_tree_rotate_left(T, w); - w = x_p->left; - } - rb_node_copy_color(w, x_p); - rb_node_set_black(x_p); - rb_node_set_black(w->left); - rb_tree_rotate_right(T, x_p); - x = T->root; - } - } - x_p = rb_node_parent(x); - } - if (x) - rb_node_set_black(x); -} - -struct rb_node * -rb_tree_first(struct rb_tree *T) -{ - return T->root ? rb_node_minimum(T->root) : NULL; -} - -struct rb_node * -rb_tree_last(struct rb_tree *T) -{ - return T->root ? rb_node_maximum(T->root) : NULL; -} - -struct rb_node * -rb_node_next(struct rb_node *node) -{ - if (node->right) { - /* If we have a right child, then the next thing (compared to this - * node) is the left-most child of our right child. - */ - return rb_node_minimum(node->right); - } else { - /* If node doesn't have a right child, crawl back up the to the - * left until we hit a parent to the right. - */ - struct rb_node *p = rb_node_parent(node); - while (p && node == p->right) { - node = p; - p = rb_node_parent(node); - } - assert(p == NULL || node == p->left); - return p; - } -} - -struct rb_node * -rb_node_prev(struct rb_node *node) -{ - if (node->left) { - /* If we have a left child, then the previous thing (compared to - * this node) is the right-most child of our left child. - */ - return rb_node_maximum(node->left); - } else { - /* If node doesn't have a left child, crawl back up the to the - * right until we hit a parent to the left. - */ - struct rb_node *p = rb_node_parent(node); - while (p && node == p->left) { - node = p; - p = rb_node_parent(node); - } - assert(p == NULL || node == p->right); - return p; - } -} - -static void -validate_rb_node(struct rb_node *n, int black_depth) -{ - if (n == NULL) { - assert(black_depth == 0); - return; - } - - if (rb_node_is_black(n)) { - black_depth--; - } else { - assert(rb_node_is_black(n->left)); - assert(rb_node_is_black(n->right)); - } - - validate_rb_node(n->left, black_depth); - validate_rb_node(n->right, black_depth); -} - -void -rb_tree_validate(struct rb_tree *T) -{ - if (T->root == NULL) - return; - - assert(rb_node_is_black(T->root)); - - unsigned black_depth = 0; - for (struct rb_node *n = T->root; n; n = n->left) { - if (rb_node_is_black(n)) - black_depth++; - } - - validate_rb_node(T->root, black_depth); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rb_tree.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rb_tree.h deleted file mode 100644 index 9466e73..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rb_tree.h +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Copyright © 2017 Faith Ekstrand - * - * 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 THE - * AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef RB_TREE_H -#define RB_TREE_H - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** A red-black tree node - * - * This struct represents a node in the red-black tree. This struct should - * be embedded as a member in whatever structure you wish to put in the - * tree. - */ -struct rb_node { - /** Parent and color of this node - * - * The least significant bit represents the color and is est to 1 for - * black and 0 for red. The other bits are the pointer to the parent - * and that pointer can be retrieved by masking off the bottom bit and - * casting to a pointer. - */ - uintptr_t parent; - - /** Left child of this node, null for a leaf */ - struct rb_node *left; - - /** Right child of this node, null for a leaf */ - struct rb_node *right; -}; - -/** Return the parent node of the given node or NULL if it is the root */ -static inline struct rb_node * -rb_node_parent(struct rb_node *n) -{ - return (struct rb_node *)(n->parent & ~(uintptr_t)1); -} - -/** A red-black tree - * - * This struct represents the red-black tree itself. It is just a pointer - * to the root node with no other metadata. - */ -struct rb_tree { - struct rb_node *root; -}; - -/** Initialize a red-black tree */ -void rb_tree_init(struct rb_tree *T); - -/** Returns true if the red-black tree is empty */ -static inline bool -rb_tree_is_empty(const struct rb_tree *T) -{ - return T->root == NULL; -} - -/** Retrieve the data structure containing a node - * - * \param type The type of the containing data structure - * - * \param node A pointer to a rb_node - * - * \param field The rb_node field in the containing data structure - */ -#define rb_node_data(type, node, field) \ - ((type *)(((char *)(node)) - offsetof(type, field))) - -/** Insert a node into a tree at a particular location - * - * This function should probably not be used directly as it relies on the - * caller to ensure that the parent node is correct. Use rb_tree_insert - * instead. - * - * \param T The red-black tree into which to insert the new node - * - * \param parent The node in the tree that will be the parent of the - * newly inserted node - * - * \param node The node to insert - * - * \param insert_left If true, the new node will be the left child of - * \p parent, otherwise it will be the right child - */ -void rb_tree_insert_at(struct rb_tree *T, struct rb_node *parent, - struct rb_node *node, bool insert_left); - -/** Insert a node into a tree - * - * \param T The red-black tree into which to insert the new node - * - * \param node The node to insert - * - * \param cmp A comparison function to use to order the nodes. - */ -static inline void -rb_tree_insert(struct rb_tree *T, struct rb_node *node, - int (*cmp)(const struct rb_node *, const struct rb_node *)) -{ - /* This function is declared inline in the hopes that the compiler can - * optimize away the comparison function pointer call. - */ - struct rb_node *y = NULL; - struct rb_node *x = T->root; - bool left = false; - while (x != NULL) { - y = x; - left = cmp(x, node) < 0; - if (left) - x = x->left; - else - x = x->right; - } - - rb_tree_insert_at(T, y, node, left); -} - -/** Remove a node from a tree - * - * \param T The red-black tree from which to remove the node - * - * \param node The node to remove - */ -void rb_tree_remove(struct rb_tree *T, struct rb_node *z); - -/** Search the tree for a node - * - * If a node with a matching key exists, the first matching node found will - * be returned. If no matching node exists, NULL is returned. - * - * \param T The red-black tree to search - * - * \param key The key to search for - * - * \param cmp A comparison function to use to order the nodes - */ -static inline struct rb_node * -rb_tree_search(struct rb_tree *T, const void *key, - int (*cmp)(const struct rb_node *, const void *)) -{ - /* This function is declared inline in the hopes that the compiler can - * optimize away the comparison function pointer call. - */ - struct rb_node *x = T->root; - while (x != NULL) { - int c = cmp(x, key); - if (c < 0) - x = x->left; - else if (c > 0) - x = x->right; - else - return x; - } - - return x; -} - -/** Sloppily search the tree for a node - * - * This function searches the tree for a given node. If a node with a - * matching key exists, that first matching node found will be returned. - * If no node with an exactly matching key exists, the node returned will - * be either the right-most node comparing less than \p key or the - * right-most node comparing greater than \p key. If the tree is empty, - * NULL is returned. - * - * \param T The red-black tree to search - * - * \param key The key to search for - * - * \param cmp A comparison function to use to order the nodes - */ -static inline struct rb_node * -rb_tree_search_sloppy(struct rb_tree *T, const void *key, - int (*cmp)(const struct rb_node *, const void *)) -{ - /* This function is declared inline in the hopes that the compiler can - * optimize away the comparison function pointer call. - */ - struct rb_node *y = NULL; - struct rb_node *x = T->root; - while (x != NULL) { - y = x; - int c = cmp(x, key); - if (c < 0) - x = x->left; - else if (c > 0) - x = x->right; - else - return x; - } - - return y; -} - -/** Get the first (left-most) node in the tree or NULL */ -struct rb_node *rb_tree_first(struct rb_tree *T); - -/** Get the last (right-most) node in the tree or NULL */ -struct rb_node *rb_tree_last(struct rb_tree *T); - -/** Get the next node (to the right) in the tree or NULL */ -struct rb_node *rb_node_next(struct rb_node *node); - -/** Get the next previous (to the left) in the tree or NULL */ -struct rb_node *rb_node_prev(struct rb_node *node); - -#define rb_node_next_or_null(n) ((n) == NULL ? NULL : rb_node_next(n)) -#define rb_node_prev_or_null(n) ((n) == NULL ? NULL : rb_node_prev(n)) - -/** Iterate over the nodes in the tree - * - * \param type The type of the containing data structure - * - * \param node The variable name for current node in the iteration; - * this will be declared as a pointer to \p type - * - * \param T The red-black tree - * - * \param field The rb_node field in containing data structure - */ -#define rb_tree_foreach(type, iter, T, field) \ - for (type *iter, *__node = (type *)rb_tree_first(T); \ - __node != NULL && \ - (iter = rb_node_data(type, (struct rb_node *)__node, field), true); \ - __node = (type *)rb_node_next((struct rb_node *)__node)) - -/** Iterate over the nodes in the tree, allowing the current node to be freed - * - * \param type The type of the containing data structure - * - * \param node The variable name for current node in the iteration; - * this will be declared as a pointer to \p type - * - * \param T The red-black tree - * - * \param field The rb_node field in containing data structure - */ -#define rb_tree_foreach_safe(type, iter, T, field) \ - for (type *iter, \ - *__node = (type *)rb_tree_first(T), \ - *__next = (type *)rb_node_next_or_null((struct rb_node *)__node); \ - __node != NULL && \ - (iter = rb_node_data(type, (struct rb_node *)__node, field), true); \ - __node = __next, \ - __next = (type *)rb_node_next_or_null((struct rb_node *)__node)) - -/** Iterate over the nodes in the tree in reverse - * - * \param type The type of the containing data structure - * - * \param node The variable name for current node in the iteration; - * this will be declared as a pointer to \p type - * - * \param T The red-black tree - * - * \param field The rb_node field in containing data structure - */ -#define rb_tree_foreach_rev(type, iter, T, field) \ - for (type *iter, *__node = (type *)rb_tree_last(T); \ - __node != NULL && \ - (iter = rb_node_data(type, (struct rb_node *)__node, field), true); \ - __node = (type *)rb_node_prev((struct rb_node *)__node)) - -/** Iterate over the nodes in the tree in reverse, allowing the current node to be freed - * - * \param type The type of the containing data structure - * - * \param node The variable name for current node in the iteration; - * this will be declared as a pointer to \p type - * - * \param T The red-black tree - * - * \param field The rb_node field in containing data structure - */ -#define rb_tree_foreach_rev_safe(type, iter, T, field) \ - for (type *iter, \ - *__node = (type *)rb_tree_last(T), \ - *__prev = (type *)rb_node_prev_or_null((struct rb_node *)__node); \ - __node != NULL && \ - (iter = rb_node_data(type, (struct rb_node *)__node, field), true); \ - __node = __prev, \ - __prev = (type *)rb_node_prev_or_null((struct rb_node *)__node)) - -/** Validate a red-black tree - * - * This function walks the tree and validates that this is a valid red- - * black tree. If anything is wrong, it will assert-fail. - */ -void rb_tree_validate(struct rb_tree *T); - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* RB_TREE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/reallocarray.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/reallocarray.h deleted file mode 100644 index 6020139..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/reallocarray.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2022 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef REALLOCARRAY_H -#define REALLOCARRAY_H - -#if !defined(HAVE_REALLOCARRAY) - -#include // size_t -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* taken from the X server */ -/* - * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX - * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW - */ -#define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4)) - -static inline void * -reallocarray(void *optr, size_t nmemb, size_t size) -{ - if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) && - nmemb > 0 && SIZE_MAX / nmemb < size) { - errno = ENOMEM; - return NULL; - } - return realloc(optr, size * nmemb); -} - -#ifdef __cplusplus -} -#endif - -#endif /* !defined(HAVE_REALLOCARRAY) */ - -#endif /* REALLOCARRAY_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate.c deleted file mode 100644 index c1875c0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate.c +++ /dev/null @@ -1,1079 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Eric Anholt - * - */ - -/** @file register_allocate.c - * - * Graph-coloring register allocator. - * - * The basic idea of graph coloring is to make a node in a graph for - * every thing that needs a register (color) number assigned, and make - * edges in the graph between nodes that interfere (can't be allocated - * to the same register at the same time). - * - * During the "simplify" process, any any node with fewer edges than - * there are registers means that that edge can get assigned a - * register regardless of what its neighbors choose, so that node is - * pushed on a stack and removed (with its edges) from the graph. - * That likely causes other nodes to become trivially colorable as well. - * - * Then during the "select" process, nodes are popped off of that - * stack, their edges restored, and assigned a color different from - * their neighbors. Because they were pushed on the stack only when - * they were trivially colorable, any color chosen won't interfere - * with the registers to be popped later. - * - * The downside to most graph coloring is that real hardware often has - * limitations, like registers that need to be allocated to a node in - * pairs, or aligned on some boundary. This implementation follows - * the paper "Retargetable Graph-Coloring Register Allocation for - * Irregular Architectures" by Johan Runeson and Sven-Olof Nyström. - * - * In this system, there are register classes each containing various - * registers, and registers may interfere with other registers. For - * example, one might have a class of base registers, and a class of - * aligned register pairs that would each interfere with their pair of - * the base registers. Each node has a register class it needs to be - * assigned to. Define p(B) to be the size of register class B, and - * q(B,C) to be the number of registers in B that the worst choice - * register in C could conflict with. Then, this system replaces the - * basic graph coloring test of "fewer edges from this node than there - * are registers" with "For this node of class B, the sum of q(B,C) - * for each neighbor node of class C is less than pB". - * - * A nice feature of the pq test is that q(B,C) can be computed once - * up front and stored in a 2-dimensional array, so that the cost of - * coloring a node is constant with the number of registers. We do - * this during ra_set_finalize(). - */ - -#include -#include - -#include "blob.h" -#include "ralloc.h" -#include "bitset.h" -#include "u_dynarray.h" -#include "u_math.h" -#include "register_allocate.h" -#include "register_allocate_internal.h" - -/** - * Creates a set of registers for the allocator. - * - * mem_ctx is a ralloc context for the allocator. The reg set may be freed - * using ralloc_free(). - */ -struct ra_regs * -ra_alloc_reg_set(void *mem_ctx, unsigned int count, bool need_conflict_lists) -{ - unsigned int i; - struct ra_regs *regs; - - regs = rzalloc(mem_ctx, struct ra_regs); - regs->count = count; - regs->regs = rzalloc_array(regs, struct ra_reg, count); - - for (i = 0; i < count; i++) { - regs->regs[i].conflicts = rzalloc_array(regs->regs, BITSET_WORD, - BITSET_WORDS(count)); - BITSET_SET(regs->regs[i].conflicts, i); - - util_dynarray_init(®s->regs[i].conflict_list, - need_conflict_lists ? regs->regs : NULL); - if (need_conflict_lists) - util_dynarray_append(®s->regs[i].conflict_list, unsigned int, i); - } - - return regs; -} - -/** - * The register allocator by default prefers to allocate low register numbers, - * since it was written for hardware (gen4/5 Intel) that is limited in its - * multithreadedness by the number of registers used in a given shader. - * - * However, for hardware without that restriction, densely packed register - * allocation can put serious constraints on instruction scheduling. This - * function tells the allocator to rotate around the registers if possible as - * it allocates the nodes. - */ -void -ra_set_allocate_round_robin(struct ra_regs *regs) -{ - regs->round_robin = true; -} - -static void -ra_add_conflict_list(struct ra_regs *regs, unsigned int r1, unsigned int r2) -{ - struct ra_reg *reg1 = ®s->regs[r1]; - - if (reg1->conflict_list.mem_ctx) { - util_dynarray_append(®1->conflict_list, unsigned int, r2); - } - BITSET_SET(reg1->conflicts, r2); -} - -void -ra_add_reg_conflict(struct ra_regs *regs, unsigned int r1, unsigned int r2) -{ - if (!BITSET_TEST(regs->regs[r1].conflicts, r2)) { - ra_add_conflict_list(regs, r1, r2); - ra_add_conflict_list(regs, r2, r1); - } -} - -/** - * Adds a conflict between base_reg and reg, and also between reg and - * anything that base_reg conflicts with. - * - * This can simplify code for setting up multiple register classes - * which are aggregates of some base hardware registers, compared to - * explicitly using ra_add_reg_conflict. - */ -void -ra_add_transitive_reg_conflict(struct ra_regs *regs, - unsigned int base_reg, unsigned int reg) -{ - ra_add_reg_conflict(regs, reg, base_reg); - - util_dynarray_foreach(®s->regs[base_reg].conflict_list, unsigned int, - r2p) { - ra_add_reg_conflict(regs, reg, *r2p); - } -} - -/** - * Set up conflicts between base_reg and it's two half registers reg0 and - * reg1, but take care to not add conflicts between reg0 and reg1. - * - * This is useful for architectures where full size registers are aliased by - * two half size registers (eg 32 bit float and 16 bit float registers). - */ -void -ra_add_transitive_reg_pair_conflict(struct ra_regs *regs, - unsigned int base_reg, unsigned int reg0, unsigned int reg1) -{ - ra_add_reg_conflict(regs, reg0, base_reg); - ra_add_reg_conflict(regs, reg1, base_reg); - - util_dynarray_foreach(®s->regs[base_reg].conflict_list, unsigned int, i) { - unsigned int conflict = *i; - if (conflict != reg1) - ra_add_reg_conflict(regs, reg0, conflict); - if (conflict != reg0) - ra_add_reg_conflict(regs, reg1, conflict); - } -} - -/** - * Makes every conflict on the given register transitive. In other words, - * every register that conflicts with r will now conflict with every other - * register conflicting with r. - * - * This can simplify code for setting up multiple register classes - * which are aggregates of some base hardware registers, compared to - * explicitly using ra_add_reg_conflict. - */ -void -ra_make_reg_conflicts_transitive(struct ra_regs *regs, unsigned int r) -{ - struct ra_reg *reg = ®s->regs[r]; - int c; - - BITSET_FOREACH_SET(c, reg->conflicts, regs->count) { - struct ra_reg *other = ®s->regs[c]; - unsigned i; - for (i = 0; i < BITSET_WORDS(regs->count); i++) - other->conflicts[i] |= reg->conflicts[i]; - } -} - -struct ra_class * -ra_alloc_reg_class(struct ra_regs *regs) -{ - struct ra_class *class; - - regs->classes = reralloc(regs->regs, regs->classes, struct ra_class *, - regs->class_count + 1); - - class = rzalloc(regs, struct ra_class); - class->regset = regs; - - /* Users may rely on the class index being allocated in order starting from 0. */ - class->index = regs->class_count++; - regs->classes[class->index] = class; - - class->regs = rzalloc_array(class, BITSET_WORD, BITSET_WORDS(regs->count)); - - return class; -} - -/** - * Creates a register class for contiguous register groups of a base register - * set. - * - * A reg set using this type of register class must use only this type of - * register class. - */ -struct ra_class * -ra_alloc_contig_reg_class(struct ra_regs *regs, int contig_len) -{ - struct ra_class *c = ra_alloc_reg_class(regs); - - assert(contig_len != 0); - c->contig_len = contig_len; - - return c; -} - -struct ra_class * -ra_get_class_from_index(struct ra_regs *regs, unsigned int class) -{ - return regs->classes[class]; -} - -unsigned int -ra_class_index(struct ra_class *c) -{ - return c->index; -} - -void -ra_class_add_reg(struct ra_class *class, unsigned int r) -{ - assert(r < class->regset->count); - assert(r + class->contig_len <= class->regset->count); - - BITSET_SET(class->regs, r); - class->p++; -} - -/** - * Returns true if the register belongs to the given class. - */ -static bool -reg_belongs_to_class(unsigned int r, struct ra_class *c) -{ - return BITSET_TEST(c->regs, r); -} - -/** - * Must be called after all conflicts and register classes have been - * set up and before the register set is used for allocation. - * To avoid costly q value computation, use the q_values paramater - * to pass precomputed q values to this function. - */ -void -ra_set_finalize(struct ra_regs *regs, unsigned int **q_values) -{ - unsigned int b, c; - - for (b = 0; b < regs->class_count; b++) { - regs->classes[b]->q = ralloc_array(regs, unsigned int, regs->class_count); - } - - if (q_values) { - for (b = 0; b < regs->class_count; b++) { - for (c = 0; c < regs->class_count; c++) { - regs->classes[b]->q[c] = q_values[b][c]; - } - } - } else { - /* Compute, for each class B and C, how many regs of B an - * allocation to C could conflict with. - */ - for (b = 0; b < regs->class_count; b++) { - for (c = 0; c < regs->class_count; c++) { - struct ra_class *class_b = regs->classes[b]; - struct ra_class *class_c = regs->classes[c]; - - if (class_b->contig_len && class_c->contig_len) { - if (class_b->contig_len == 1 && class_c->contig_len == 1) { - /* If both classes are single registers, then they only - * conflict if there are any regs shared between them. This - * is a cheap test for a common case. - */ - class_b->q[c] = 0; - for (int i = 0; i < BITSET_WORDS(regs->count); i++) { - if (class_b->regs[i] & class_c->regs[i]) { - class_b->q[c] = 1; - break; - } - } - } else { - int max_possible_conflicts = class_b->contig_len + class_c->contig_len - 1; - - unsigned int max_conflicts = 0; - unsigned int rc; - BITSET_FOREACH_SET(rc, regs->classes[c]->regs, regs->count) { - int start = MAX2(0, (int)rc - class_b->contig_len + 1); - int end = MIN2(regs->count, rc + class_c->contig_len); - unsigned int conflicts = 0; - for (int i = start; i < end; i++) { - if (BITSET_TEST(class_b->regs, i)) - conflicts++; - } - max_conflicts = MAX2(max_conflicts, conflicts); - /* Unless a class has some restriction like the register - * bases are all aligned, then we should quickly find this - * limit and exit the loop. - */ - if (max_conflicts == max_possible_conflicts) - break; - } - class_b->q[c] = max_conflicts; - } - } else { - /* If you're doing contiguous classes, you have to be all in - * because I don't want to deal with it. - */ - assert(!class_b->contig_len && !class_c->contig_len); - - unsigned int rc; - int max_conflicts = 0; - - BITSET_FOREACH_SET(rc, regs->classes[c]->regs, regs->count) { - int conflicts = 0; - - util_dynarray_foreach(®s->regs[rc].conflict_list, - unsigned int, rbp) { - unsigned int rb = *rbp; - if (reg_belongs_to_class(rb, regs->classes[b])) - conflicts++; - } - max_conflicts = MAX2(max_conflicts, conflicts); - } - regs->classes[b]->q[c] = max_conflicts; - } - } - } - } - - for (b = 0; b < regs->count; b++) { - util_dynarray_fini(®s->regs[b].conflict_list); - } - - bool all_contig = true; - for (int c = 0; c < regs->class_count; c++) - all_contig &= regs->classes[c]->contig_len != 0; - if (all_contig) { - /* In this case, we never need the conflicts lists (and it would probably - * be a mistake to look at conflicts when doing contiguous classes!), so - * free them. TODO: Avoid the allocation in the first place. - */ - for (int i = 0; i < regs->count; i++) { - ralloc_free(regs->regs[i].conflicts); - regs->regs[i].conflicts = NULL; - } - } -} - -void -ra_set_serialize(const struct ra_regs *regs, struct blob *blob) -{ - blob_write_uint32(blob, regs->count); - blob_write_uint32(blob, regs->class_count); - - bool is_contig = regs->classes[0]->contig_len != 0; - blob_write_uint8(blob, is_contig); - - if (!is_contig) { - for (unsigned int r = 0; r < regs->count; r++) { - struct ra_reg *reg = ®s->regs[r]; - blob_write_bytes(blob, reg->conflicts, BITSET_WORDS(regs->count) * - sizeof(BITSET_WORD)); - assert(util_dynarray_num_elements(®->conflict_list, unsigned int) == 0); - } - } - - for (unsigned int c = 0; c < regs->class_count; c++) { - struct ra_class *class = regs->classes[c]; - blob_write_bytes(blob, class->regs, BITSET_WORDS(regs->count) * - sizeof(BITSET_WORD)); - blob_write_uint32(blob, class->contig_len); - blob_write_uint32(blob, class->p); - blob_write_bytes(blob, class->q, regs->class_count * sizeof(*class->q)); - } - - blob_write_uint32(blob, regs->round_robin); -} - -struct ra_regs * -ra_set_deserialize(void *mem_ctx, struct blob_reader *blob) -{ - unsigned int reg_count = blob_read_uint32(blob); - unsigned int class_count = blob_read_uint32(blob); - bool is_contig = blob_read_uint8(blob); - - struct ra_regs *regs = ra_alloc_reg_set(mem_ctx, reg_count, false); - assert(regs->count == reg_count); - - if (is_contig) { - for (int i = 0; i < regs->count; i++) { - ralloc_free(regs->regs[i].conflicts); - regs->regs[i].conflicts = NULL; - } - } else { - for (unsigned int r = 0; r < reg_count; r++) { - struct ra_reg *reg = ®s->regs[r]; - blob_copy_bytes(blob, reg->conflicts, BITSET_WORDS(reg_count) * - sizeof(BITSET_WORD)); - } - } - - assert(regs->classes == NULL); - regs->classes = ralloc_array(regs->regs, struct ra_class *, class_count); - regs->class_count = class_count; - - for (unsigned int c = 0; c < class_count; c++) { - struct ra_class *class = rzalloc(regs, struct ra_class); - regs->classes[c] = class; - class->regset = regs; - class->index = c; - - class->regs = ralloc_array(class, BITSET_WORD, BITSET_WORDS(reg_count)); - blob_copy_bytes(blob, class->regs, BITSET_WORDS(reg_count) * - sizeof(BITSET_WORD)); - - class->contig_len = blob_read_uint32(blob); - class->p = blob_read_uint32(blob); - - class->q = ralloc_array(regs->classes[c], unsigned int, class_count); - blob_copy_bytes(blob, class->q, class_count * sizeof(*class->q)); - } - - regs->round_robin = blob_read_uint32(blob); - - return regs; -} - -static uint64_t -ra_get_num_adjacency_bits(uint64_t n) -{ - return (n * (n - 1)) / 2; -} - -static uint64_t -ra_get_adjacency_bit_index(unsigned n1, unsigned n2) -{ - assert(n1 != n2); - unsigned k1 = MAX2(n1, n2); - unsigned k2 = MIN2(n1, n2); - return ra_get_num_adjacency_bits(k1) + k2; -} - -static bool -ra_test_adjacency_bit(struct ra_graph *g, unsigned n1, unsigned n2) -{ - uint64_t index = ra_get_adjacency_bit_index(n1, n2); - return BITSET_TEST(g->adjacency, index); -} - -static void -ra_set_adjacency_bit(struct ra_graph *g, unsigned n1, unsigned n2) -{ - unsigned index = ra_get_adjacency_bit_index(n1, n2); - BITSET_SET(g->adjacency, index); -} - -static void -ra_clear_adjacency_bit(struct ra_graph *g, unsigned n1, unsigned n2) -{ - unsigned index = ra_get_adjacency_bit_index(n1, n2); - BITSET_CLEAR(g->adjacency, index); -} - -static void -ra_add_node_adjacency(struct ra_graph *g, unsigned int n1, unsigned int n2) -{ - assert(n1 != n2); - - int n1_class = g->nodes[n1].class; - int n2_class = g->nodes[n2].class; - g->nodes[n1].q_total += g->regs->classes[n1_class]->q[n2_class]; - - util_dynarray_append(&g->nodes[n1].adjacency_list, unsigned int, n2); -} - -static void -ra_node_remove_adjacency(struct ra_graph *g, unsigned int n1, unsigned int n2) -{ - assert(n1 != n2); - ra_clear_adjacency_bit(g, n1, n2); - - int n1_class = g->nodes[n1].class; - int n2_class = g->nodes[n2].class; - g->nodes[n1].q_total -= g->regs->classes[n1_class]->q[n2_class]; - - util_dynarray_delete_unordered(&g->nodes[n1].adjacency_list, unsigned int, - n2); -} - -static void -ra_realloc_interference_graph(struct ra_graph *g, unsigned int alloc) -{ - if (alloc <= g->alloc) - return; - - /* If we always have a whole number of BITSET_WORDs, it makes it much - * easier to memset the top of the growing bitsets. - */ - assert(g->alloc % BITSET_WORDBITS == 0); - alloc = align64(alloc, BITSET_WORDBITS); - g->nodes = rerzalloc(g, g->nodes, struct ra_node, g->alloc, alloc); - g->adjacency = rerzalloc(g, g->adjacency, BITSET_WORD, - BITSET_WORDS(ra_get_num_adjacency_bits(g->alloc)), - BITSET_WORDS(ra_get_num_adjacency_bits(alloc))); - - /* Initialize new nodes. */ - for (unsigned i = g->alloc; i < alloc; i++) { - struct ra_node* node = g->nodes + i; - util_dynarray_init(&node->adjacency_list, g); - node->q_total = 0; - node->forced_reg = NO_REG; - node->reg = NO_REG; - } - - /* These are scratch values and don't need to be zeroed. We'll clear them - * as part of ra_select() setup. - */ - unsigned bitset_count = BITSET_WORDS(alloc); - g->tmp.stack = reralloc(g, g->tmp.stack, unsigned int, alloc); - g->tmp.in_stack = reralloc(g, g->tmp.in_stack, BITSET_WORD, bitset_count); - - g->tmp.reg_assigned = reralloc(g, g->tmp.reg_assigned, BITSET_WORD, - bitset_count); - g->tmp.pq_test = reralloc(g, g->tmp.pq_test, BITSET_WORD, bitset_count); - g->tmp.min_q_total = reralloc(g, g->tmp.min_q_total, unsigned int, - bitset_count); - g->tmp.min_q_node = reralloc(g, g->tmp.min_q_node, unsigned int, - bitset_count); - - g->alloc = alloc; -} - -struct ra_graph * -ra_alloc_interference_graph(struct ra_regs *regs, unsigned int count) -{ - struct ra_graph *g; - - g = rzalloc(NULL, struct ra_graph); - g->regs = regs; - g->count = count; - ra_realloc_interference_graph(g, count); - - return g; -} - -void -ra_resize_interference_graph(struct ra_graph *g, unsigned int count) -{ - g->count = count; - if (count > g->alloc) - ra_realloc_interference_graph(g, g->alloc * 2); -} - -void ra_set_select_reg_callback(struct ra_graph *g, - ra_select_reg_callback callback, - void *data) -{ - g->select_reg_callback = callback; - g->select_reg_callback_data = data; -} - -void -ra_set_node_class(struct ra_graph *g, - unsigned int n, struct ra_class *class) -{ - g->nodes[n].class = class->index; -} - -struct ra_class * -ra_get_node_class(struct ra_graph *g, - unsigned int n) -{ - return g->regs->classes[g->nodes[n].class]; -} - -unsigned int -ra_add_node(struct ra_graph *g, struct ra_class *class) -{ - unsigned int n = g->count; - ra_resize_interference_graph(g, g->count + 1); - - ra_set_node_class(g, n, class); - - return n; -} - -void -ra_add_node_interference(struct ra_graph *g, - unsigned int n1, unsigned int n2) -{ - assert(n1 < g->count && n2 < g->count); - if (n1 != n2 && !ra_test_adjacency_bit(g, n1, n2)) { - ra_set_adjacency_bit(g, n1, n2); - ra_add_node_adjacency(g, n1, n2); - ra_add_node_adjacency(g, n2, n1); - } -} - -void -ra_reset_node_interference(struct ra_graph *g, unsigned int n) -{ - util_dynarray_foreach(&g->nodes[n].adjacency_list, unsigned int, n2p) { - ra_node_remove_adjacency(g, *n2p, n); - } - - util_dynarray_clear(&g->nodes[n].adjacency_list); -} - -static void -update_pq_info(struct ra_graph *g, unsigned int n) -{ - int i = n / BITSET_WORDBITS; - int n_class = g->nodes[n].class; - if (g->nodes[n].tmp.q_total < g->regs->classes[n_class]->p) { - BITSET_SET(g->tmp.pq_test, n); - } else if (g->tmp.min_q_total[i] != UINT_MAX) { - /* Only update min_q_total and min_q_node if min_q_total != UINT_MAX so - * that we don't update while we have stale data and accidentally mark - * it as non-stale. Also, in order to remain consistent with the old - * naive implementation of the algorithm, we do a lexicographical sort - * to ensure that we always choose the node with the highest node index. - */ - if (g->nodes[n].tmp.q_total < g->tmp.min_q_total[i] || - (g->nodes[n].tmp.q_total == g->tmp.min_q_total[i] && - n > g->tmp.min_q_node[i])) { - g->tmp.min_q_total[i] = g->nodes[n].tmp.q_total; - g->tmp.min_q_node[i] = n; - } - } -} - -static void -add_node_to_stack(struct ra_graph *g, unsigned int n) -{ - int n_class = g->nodes[n].class; - - assert(!BITSET_TEST(g->tmp.in_stack, n)); - - util_dynarray_foreach(&g->nodes[n].adjacency_list, unsigned int, n2p) { - unsigned int n2 = *n2p; - unsigned int n2_class = g->nodes[n2].class; - - if (!BITSET_TEST(g->tmp.in_stack, n2) && - !BITSET_TEST(g->tmp.reg_assigned, n2)) { - assert(g->nodes[n2].tmp.q_total >= g->regs->classes[n2_class]->q[n_class]); - g->nodes[n2].tmp.q_total -= g->regs->classes[n2_class]->q[n_class]; - update_pq_info(g, n2); - } - } - - g->tmp.stack[g->tmp.stack_count] = n; - g->tmp.stack_count++; - BITSET_SET(g->tmp.in_stack, n); - - /* Flag the min_q_total for n's block as dirty so it gets recalculated */ - g->tmp.min_q_total[n / BITSET_WORDBITS] = UINT_MAX; -} - -/** - * Simplifies the interference graph by pushing all - * trivially-colorable nodes into a stack of nodes to be colored, - * removing them from the graph, and rinsing and repeating. - * - * If we encounter a case where we can't push any nodes on the stack, then - * we optimistically choose a node and push it on the stack. We heuristically - * push the node with the lowest total q value, since it has the fewest - * neighbors and therefore is most likely to be allocated. - */ -static void -ra_simplify(struct ra_graph *g) -{ - bool progress = true; - unsigned int stack_optimistic_start = UINT_MAX; - - /* Figure out the high bit and bit mask for the first iteration of a loop - * over BITSET_WORDs. - */ - const unsigned int top_word_high_bit = (g->count - 1) % BITSET_WORDBITS; - - /* Do a quick pre-pass to set things up */ - g->tmp.stack_count = 0; - for (int i = BITSET_WORDS(g->count) - 1, high_bit = top_word_high_bit; - i >= 0; i--, high_bit = BITSET_WORDBITS - 1) { - g->tmp.in_stack[i] = 0; - g->tmp.reg_assigned[i] = 0; - g->tmp.pq_test[i] = 0; - g->tmp.min_q_total[i] = UINT_MAX; - g->tmp.min_q_node[i] = UINT_MAX; - for (int j = high_bit; j >= 0; j--) { - unsigned int n = i * BITSET_WORDBITS + j; - g->nodes[n].reg = g->nodes[n].forced_reg; - g->nodes[n].tmp.q_total = g->nodes[n].q_total; - if (g->nodes[n].reg != NO_REG) - g->tmp.reg_assigned[i] |= BITSET_BIT(j); - update_pq_info(g, n); - } - } - - while (progress) { - unsigned int min_q_total = UINT_MAX; - unsigned int min_q_node = UINT_MAX; - - progress = false; - - for (int i = BITSET_WORDS(g->count) - 1, high_bit = top_word_high_bit; - i >= 0; i--, high_bit = BITSET_WORDBITS - 1) { - BITSET_WORD mask = ~(BITSET_WORD)0 >> (31 - high_bit); - - BITSET_WORD skip = g->tmp.in_stack[i] | g->tmp.reg_assigned[i]; - if (skip == mask) - continue; - - BITSET_WORD pq = g->tmp.pq_test[i] & ~skip; - if (pq) { - /* In this case, we have stuff we can immediately take off the - * stack. This also means that we're guaranteed to make progress - * and we don't need to bother updating lowest_q_total because we - * know we're going to loop again before attempting to do anything - * optimistic. - */ - for (int j = high_bit; j >= 0; j--) { - if (pq & BITSET_BIT(j)) { - unsigned int n = i * BITSET_WORDBITS + j; - assert(n < g->count); - add_node_to_stack(g, n); - /* add_node_to_stack() may update pq_test for this word so - * we need to update our local copy. - */ - pq = g->tmp.pq_test[i] & ~skip; - progress = true; - } - } - } else if (!progress) { - if (g->tmp.min_q_total[i] == UINT_MAX) { - /* The min_q_total and min_q_node are dirty because we added - * one of these nodes to the stack. It needs to be - * recalculated. - */ - for (int j = high_bit; j >= 0; j--) { - if (skip & BITSET_BIT(j)) - continue; - - unsigned int n = i * BITSET_WORDBITS + j; - assert(n < g->count); - if (g->nodes[n].tmp.q_total < g->tmp.min_q_total[i]) { - g->tmp.min_q_total[i] = g->nodes[n].tmp.q_total; - g->tmp.min_q_node[i] = n; - } - } - } - if (g->tmp.min_q_total[i] < min_q_total) { - min_q_node = g->tmp.min_q_node[i]; - min_q_total = g->tmp.min_q_total[i]; - } - } - } - - if (!progress && min_q_total != UINT_MAX) { - if (stack_optimistic_start == UINT_MAX) - stack_optimistic_start = g->tmp.stack_count; - - add_node_to_stack(g, min_q_node); - progress = true; - } - } - - g->tmp.stack_optimistic_start = stack_optimistic_start; -} - -bool -ra_class_allocations_conflict(struct ra_class *c1, unsigned int r1, - struct ra_class *c2, unsigned int r2) -{ - if (c1->contig_len) { - assert(c2->contig_len); - - int r1_end = r1 + c1->contig_len; - int r2_end = r2 + c2->contig_len; - return !(r2 >= r1_end || r1 >= r2_end); - } else { - return BITSET_TEST(c1->regset->regs[r1].conflicts, r2); - } -} - -static struct ra_node * -ra_find_conflicting_neighbor(struct ra_graph *g, unsigned int n, unsigned int r) -{ - util_dynarray_foreach(&g->nodes[n].adjacency_list, unsigned int, n2p) { - unsigned int n2 = *n2p; - - /* If our adjacent node is in the stack, it's not allocated yet. */ - if (!BITSET_TEST(g->tmp.in_stack, n2) && - ra_class_allocations_conflict(g->regs->classes[g->nodes[n].class], r, - g->regs->classes[g->nodes[n2].class], g->nodes[n2].reg)) { - return &g->nodes[n2]; - } - } - - return NULL; -} - -/* Computes a bitfield of what regs are available for a given register - * selection. - * - * This lets drivers implement a more complicated policy than our simple first - * or round robin policies (which don't require knowing the whole bitset) - */ -static bool -ra_compute_available_regs(struct ra_graph *g, unsigned int n, BITSET_WORD *regs) -{ - struct ra_class *c = g->regs->classes[g->nodes[n].class]; - - /* Populate with the set of regs that are in the node's class. */ - memcpy(regs, c->regs, BITSET_WORDS(g->regs->count) * sizeof(BITSET_WORD)); - - /* Remove any regs that conflict with nodes that we're adjacent to and have - * already colored. - */ - util_dynarray_foreach(&g->nodes[n].adjacency_list, unsigned int, n2p) { - struct ra_node *n2 = &g->nodes[*n2p]; - struct ra_class *n2c = g->regs->classes[n2->class]; - - if (!BITSET_TEST(g->tmp.in_stack, *n2p)) { - if (c->contig_len) { - int start = MAX2(0, (int)n2->reg - c->contig_len + 1); - int end = MIN2(g->regs->count, n2->reg + n2c->contig_len); - for (unsigned i = start; i < end; i++) - BITSET_CLEAR(regs, i); - } else { - for (int j = 0; j < BITSET_WORDS(g->regs->count); j++) - regs[j] &= ~g->regs->regs[n2->reg].conflicts[j]; - } - } - } - - for (int i = 0; i < BITSET_WORDS(g->regs->count); i++) { - if (regs[i]) - return true; - } - - return false; -} - -/** - * Pops nodes from the stack back into the graph, coloring them with - * registers as they go. - * - * If all nodes were trivially colorable, then this must succeed. If - * not (optimistic coloring), then it may return false; - */ -static bool -ra_select(struct ra_graph *g) -{ - int start_search_reg = 0; - BITSET_WORD *select_regs = NULL; - - if (g->select_reg_callback) - select_regs = malloc(BITSET_WORDS(g->regs->count) * sizeof(BITSET_WORD)); - - while (g->tmp.stack_count != 0) { - unsigned int ri; - unsigned int r = -1; - int n = g->tmp.stack[g->tmp.stack_count - 1]; - struct ra_class *c = g->regs->classes[g->nodes[n].class]; - - /* set this to false even if we return here so that - * ra_get_best_spill_node() considers this node later. - */ - BITSET_CLEAR(g->tmp.in_stack, n); - - if (g->select_reg_callback) { - if (!ra_compute_available_regs(g, n, select_regs)) { - free(select_regs); - return false; - } - - r = g->select_reg_callback(n, select_regs, g->select_reg_callback_data); - assert(r < g->regs->count); - } else { - /* Find the lowest-numbered reg which is not used by a member - * of the graph adjacent to us. - */ - for (ri = 0; ri < g->regs->count; ri++) { - r = (start_search_reg + ri) % g->regs->count; - if (!reg_belongs_to_class(r, c)) - continue; - - struct ra_node *conflicting = ra_find_conflicting_neighbor(g, n, r); - if (!conflicting) { - /* Found a reg! */ - break; - } - if (g->regs->classes[conflicting->class]->contig_len) { - /* Skip to point at the last base reg of the conflicting reg - * allocation -- the loop will increment us to check the next reg - * after the conflicting allocaiton. - */ - unsigned conflicting_end = (conflicting->reg + - g->regs->classes[conflicting->class]->contig_len - 1); - assert(conflicting_end >= r); - ri += conflicting_end - r; - } - } - - if (ri >= g->regs->count) - return false; - } - - g->nodes[n].reg = r; - g->tmp.stack_count--; - - /* Rotate the starting point except for any nodes above the lowest - * optimistically colorable node. The likelihood that we will succeed - * at allocating optimistically colorable nodes is highly dependent on - * the way that the previous nodes popped off the stack are laid out. - * The round-robin strategy increases the fragmentation of the register - * file and decreases the number of nearby nodes assigned to the same - * color, what increases the likelihood of spilling with respect to the - * dense packing strategy. - */ - if (g->regs->round_robin && - g->tmp.stack_count - 1 <= g->tmp.stack_optimistic_start) - start_search_reg = r + 1; - } - - free(select_regs); - - return true; -} - -bool -ra_allocate(struct ra_graph *g) -{ - ra_simplify(g); - return ra_select(g); -} - -unsigned int -ra_get_node_reg(struct ra_graph *g, unsigned int n) -{ - if (g->nodes[n].forced_reg != NO_REG) - return g->nodes[n].forced_reg; - else - return g->nodes[n].reg; -} - -/** - * Forces a node to a specific register. This can be used to avoid - * creating a register class containing one node when handling data - * that must live in a fixed location and is known to not conflict - * with other forced register assignment (as is common with shader - * input data). These nodes do not end up in the stack during - * ra_simplify(), and thus at ra_select() time it is as if they were - * the first popped off the stack and assigned their fixed locations. - * Nodes that use this function do not need to be assigned a register - * class. - * - * Must be called before ra_simplify(). - */ -void -ra_set_node_reg(struct ra_graph *g, unsigned int n, unsigned int reg) -{ - g->nodes[n].forced_reg = reg; -} - -static float -ra_get_spill_benefit(struct ra_graph *g, unsigned int n) -{ - float benefit = 0; - int n_class = g->nodes[n].class; - - /* Define the benefit of eliminating an interference between n, n2 - * through spilling as q(C, B) / p(C). This is similar to the - * "count number of edges" approach of traditional graph coloring, - * but takes classes into account. - */ - util_dynarray_foreach(&g->nodes[n].adjacency_list, unsigned int, n2p) { - unsigned int n2 = *n2p; - unsigned int n2_class = g->nodes[n2].class; - benefit += ((float)g->regs->classes[n_class]->q[n2_class] / - g->regs->classes[n_class]->p); - } - - return benefit; -} - -/** - * Returns a node number to be spilled according to the cost/benefit using - * the pq test, or -1 if there are no spillable nodes. - */ -int -ra_get_best_spill_node(struct ra_graph *g) -{ - unsigned int best_node = -1; - float best_benefit = 0.0; - unsigned int n; - - /* Consider any nodes that we colored successfully or the node we failed to - * color for spilling. When we failed to color a node in ra_select(), we - * only considered these nodes, so spilling any other ones would not result - * in us making progress. - */ - for (n = 0; n < g->count; n++) { - float cost = g->nodes[n].spill_cost; - float benefit; - - if (cost <= 0.0f) - continue; - - if (BITSET_TEST(g->tmp.in_stack, n)) - continue; - - benefit = ra_get_spill_benefit(g, n); - - if (benefit / cost > best_benefit) { - best_benefit = benefit / cost; - best_node = n; - } - } - - return best_node; -} - -/** - * Only nodes with a spill cost set (cost != 0.0) will be considered - * for register spilling. - */ -void -ra_set_node_spill_cost(struct ra_graph *g, unsigned int n, float cost) -{ - g->nodes[n].spill_cost = cost; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate.h deleted file mode 100644 index 90dad82..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Eric Anholt - * - */ - -#ifndef REGISTER_ALLOCATE_H -#define REGISTER_ALLOCATE_H - -#include -#include "bitset.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -struct ra_class; -struct ra_regs; - -struct blob; -struct blob_reader; - -/* @{ - * Register set setup. - * - * This should be done once at backend initializaion, as - * ra_set_finalize is O(r^2*c^2). The registers may be virtual - * registers, such as aligned register pairs that conflict with the - * two real registers from which they are composed. - */ -struct ra_regs *ra_alloc_reg_set(void *mem_ctx, unsigned int count, - bool need_conflict_lists); -void ra_set_allocate_round_robin(struct ra_regs *regs); -struct ra_class *ra_alloc_reg_class(struct ra_regs *regs); -struct ra_class *ra_alloc_contig_reg_class(struct ra_regs *regs, int contig_len); -unsigned int ra_class_index(struct ra_class *c); -void ra_add_reg_conflict(struct ra_regs *regs, - unsigned int r1, unsigned int r2); -void ra_add_transitive_reg_conflict(struct ra_regs *regs, - unsigned int base_reg, unsigned int reg); - -void -ra_add_transitive_reg_pair_conflict(struct ra_regs *regs, - unsigned int base_reg, unsigned int reg0, unsigned int reg1); - -void ra_make_reg_conflicts_transitive(struct ra_regs *regs, unsigned int reg); -void ra_class_add_reg(struct ra_class *c, unsigned int reg); -struct ra_class *ra_get_class_from_index(struct ra_regs *regs, unsigned int c); -void ra_set_num_conflicts(struct ra_regs *regs, unsigned int class_a, - unsigned int class_b, unsigned int num_conflicts); -void ra_set_finalize(struct ra_regs *regs, unsigned int **conflicts); - -void ra_set_serialize(const struct ra_regs *regs, struct blob *blob); -struct ra_regs *ra_set_deserialize(void *mem_ctx, struct blob_reader *blob); -/** @} */ - -/** @{ Interference graph setup. - * - * Each interference graph node is a virtual variable in the IL. It - * is up to the user to ra_set_node_class() for the virtual variable, - * and compute live ranges and ra_node_interfere() between conflicting - * live ranges. Note that an interference *must not* be added between - * two nodes if their classes haven't been assigned yet. The user - * should set the class of each node before building the interference - * graph. - */ -struct ra_graph *ra_alloc_interference_graph(struct ra_regs *regs, - unsigned int count); -void ra_resize_interference_graph(struct ra_graph *g, unsigned int count); -void ra_set_node_class(struct ra_graph *g, unsigned int n, struct ra_class *c); -struct ra_class *ra_get_node_class(struct ra_graph *g, unsigned int n); -unsigned int ra_add_node(struct ra_graph *g, struct ra_class *c); - -/** @{ Register selection callback. - * - * The register allocator can use either one of two built-in register - * selection behaviors (ie. lowest-available or round-robin), or the - * user can implement it's own selection policy by setting an register - * selection callback. The parameters to the callback are: - * - * - n the graph node, ie. the virtual variable to select a - * register for - * - regs bitset of available registers to choose; this bitset - * contains *all* registers, but registers of different - * classes will not have their corresponding bit set. - * - data callback data specified in ra_set_select_reg_callback() - */ -typedef unsigned int (*ra_select_reg_callback)( - unsigned int n, /* virtual variable to choose a physical reg for */ - BITSET_WORD *regs, /* available physical regs to choose from */ - void *data); - -void ra_set_select_reg_callback(struct ra_graph *g, - ra_select_reg_callback callback, - void *data); -void ra_add_node_interference(struct ra_graph *g, - unsigned int n1, unsigned int n2); -void ra_reset_node_interference(struct ra_graph *g, unsigned int n); -/** @} */ - -/** @{ Graph-coloring register allocation */ -bool ra_allocate(struct ra_graph *g); - -#define NO_REG ~0U -/** - * Returns NO_REG for a node that has not (yet) been assigned. - */ -unsigned int ra_get_node_reg(struct ra_graph *g, unsigned int n); -void ra_set_node_reg(struct ra_graph * g, unsigned int n, unsigned int reg); -void ra_set_node_spill_cost(struct ra_graph *g, unsigned int n, float cost); -int ra_get_best_spill_node(struct ra_graph *g); -/** @} */ - - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif /* REGISTER_ALLOCATE_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate_internal.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate_internal.h deleted file mode 100644 index 4a65c00..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/register_allocate_internal.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright © 2010 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Eric Anholt - * - */ - -#ifndef REGISTER_ALLOCATE_INTERNAL_H -#define REGISTER_ALLOCATE_INTERNAL_H - -#include -#include "bitset.h" -#include "u_dynarray.h" - -#ifdef __cplusplus -extern "C" { - -#define class klass -#endif - -struct ra_reg { - BITSET_WORD *conflicts; - struct util_dynarray conflict_list; -}; - -struct ra_regs { - struct ra_reg *regs; - unsigned int count; - - struct ra_class **classes; - unsigned int class_count; - - bool round_robin; -}; - -struct ra_class { - struct ra_regs *regset; - - /** - * Bitset indicating which registers belong to this class. - * - * (If bit N is set, then register N belongs to this class.) - */ - BITSET_WORD *regs; - - /** - * Number of regs after each bit in *regs that are also conflicted by an - * allocation to that reg for this class. - */ - int contig_len; - - /** - * p(B) in Runeson/Nyström paper. - * - * This is "how many regs are in the set." - */ - unsigned int p; - - /** - * q(B,C) (indexed by C, B is this register class) in - * Runeson/Nyström paper. This is "how many registers of B could - * the worst choice register from C conflict with". - */ - unsigned int *q; - - int index; -}; - -struct ra_node { - /** @{ - * - * List of which nodes this node interferes with. This should be - * symmetric with the other node. - */ - struct util_dynarray adjacency_list; - /** @} */ - - unsigned int class; - - /* Client-assigned register, if assigned, or NO_REG. */ - unsigned int forced_reg; - - /* Register, if assigned, or NO_REG. */ - unsigned int reg; - - /** - * The q total, as defined in the Runeson/Nyström paper, for all the - * interfering nodes not in the stack. - */ - unsigned int q_total; - - /* For an implementation that needs register spilling, this is the - * approximate cost of spilling this node. - */ - float spill_cost; - - /* Temporary data for the algorithm to scratch around in */ - struct { - /** - * Temporary version of q_total which we decrement as things are placed - * into the stack. - */ - unsigned int q_total; - } tmp; -}; - -struct ra_graph { - struct ra_regs *regs; - /** - * the variables that need register allocation. - */ - struct ra_node *nodes; - BITSET_WORD *adjacency; - unsigned int count; /**< count of nodes. */ - - unsigned int alloc; /**< count of nodes allocated. */ - - ra_select_reg_callback select_reg_callback; - void *select_reg_callback_data; - - /* Temporary data for the algorithm to scratch around in */ - struct { - unsigned int *stack; - unsigned int stack_count; - - /** Bit-set indicating, for each register, if it's in the stack */ - BITSET_WORD *in_stack; - - /** Bit-set indicating, for each register, if it pre-assigned */ - BITSET_WORD *reg_assigned; - - /** Bit-set indicating, for each register, the value of the pq test */ - BITSET_WORD *pq_test; - - /** For each BITSET_WORD, the minimum q value or ~0 if unknown */ - unsigned int *min_q_total; - - /* - * * For each BITSET_WORD, the node with the minimum q_total if - * min_q_total[i] != ~0. - */ - unsigned int *min_q_node; - - /** - * Tracks the start of the set of optimistically-colored registers in the - * stack. - */ - unsigned int stack_optimistic_start; - } tmp; -}; - -bool ra_class_allocations_conflict(struct ra_class *c1, unsigned int r1, - struct ra_class *c2, unsigned int r2); - -#ifdef __cplusplus -} /* extern "C" */ - -#undef class -#endif - -#endif /* REGISTER_ALLOCATE_INTERNAL_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rgtc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rgtc.c deleted file mode 100644 index b444e7d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rgtc.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2011 Red Hat Inc. - * - * block compression parts are: - * Copyright (C) 2004 Roland Scheidegger 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Author: - * Dave Airlie - */ - -#include -#include "macros.h" - -#include "rgtc.h" - -#define RGTC_DEBUG 0 - -#define TAG(x) util_format_unsigned_##x - -#define TYPE unsigned char -#define T_MIN 0 -#define T_MAX 0xff - -#include "texcompress_rgtc_tmp.h" - -#undef TAG -#undef TYPE -#undef T_MIN -#undef T_MAX - -#define TAG(x) util_format_signed_##x -#define TYPE signed char -#define T_MIN (signed char)-128 -#define T_MAX (signed char)127 - -#include "texcompress_rgtc_tmp.h" - -#undef TAG -#undef TYPE -#undef T_MIN -#undef T_MAX - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rgtc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rgtc.h deleted file mode 100644 index 6bba9f2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rgtc.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright © 2014 Red Hat - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#ifndef _RGTC_H -#define _RGTC_H - -void util_format_unsigned_fetch_texel_rgtc(unsigned srcRowStride, const unsigned char *pixdata, - unsigned i, unsigned j, unsigned char *value, unsigned comps); - -void util_format_signed_fetch_texel_rgtc(unsigned srcRowStride, const signed char *pixdata, - unsigned i, unsigned j, signed char *value, unsigned comps); - -void util_format_unsigned_encode_rgtc_ubyte(unsigned char *blkaddr, unsigned char srccolors[4][4], - int numxpixels, int numypixels); - -void util_format_signed_encode_rgtc_ubyte(signed char *blkaddr, signed char srccolors[4][4], - int numxpixels, int numypixels); -#endif /* _RGTC_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rounding.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rounding.h deleted file mode 100644 index f79671b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/rounding.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _ROUNDING_H -#define _ROUNDING_H - -#include -#include -#include - -#if defined(__SSE__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || (defined(_M_X64) && !defined(_M_ARM64EC)) -#include -#include -#endif - -#ifdef __SSE4_1__ -#include -#endif - -/* The C standard library has functions round()/rint()/nearbyint() that round - * their arguments according to the rounding mode set in the floating-point - * control register. While there are trunc()/ceil()/floor() functions that do - * a specific operation without modifying the rounding mode, there is no - * roundeven() in any version of C. - * - * Technical Specification 18661 (ISO/IEC TS 18661-1:2014) adds roundeven(), - * but it's unfortunately not implemented by glibc. - * - * This implementation differs in that it does not raise the inexact exception. - * - * We use rint() to implement these functions, with the assumption that the - * floating-point rounding mode has not been changed from the default Round - * to Nearest. - */ - -/** - * \brief Rounds \c x to the nearest integer, with ties to the even integer. - */ -static inline float -_mesa_roundevenf(float x) -{ -#ifdef __SSE4_1__ - float ret; - __m128 m = _mm_load_ss(&x); - m = _mm_round_ss(m, m, _MM_FROUND_CUR_DIRECTION | _MM_FROUND_NO_EXC); - _mm_store_ss(&ret, m); - return ret; -#else - return rintf(x); -#endif -} - -/** - * \brief Rounds \c x to the nearest integer, with ties to the even integer. - */ -static inline double -_mesa_roundeven(double x) -{ -#ifdef __SSE4_1__ - double ret; - __m128d m = _mm_load_sd(&x); - m = _mm_round_sd(m, m, _MM_FROUND_CUR_DIRECTION | _MM_FROUND_NO_EXC); - _mm_store_sd(&ret, m); - return ret; -#else - return rint(x); -#endif -} - -/** - * \brief Rounds \c x to the nearest integer, with ties to the even integer, - * and returns the value as a long int. - */ -static inline long -_mesa_lroundevenf(float x) -{ -#if defined(__SSE__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || (defined(_M_X64) && !defined(_M_ARM64EC)) -#if LONG_MAX == INT64_MAX - return _mm_cvtss_si64(_mm_load_ss(&x)); -#elif LONG_MAX == INT32_MAX - return _mm_cvtss_si32(_mm_load_ss(&x)); -#else -#error "Unsupported long size" -#endif -#else - return lrintf(x); -#endif -} - -/** - * \brief Rounds \c x to the nearest integer, with ties to the even integer, - * and returns the value as a long int. - */ -static inline long -_mesa_lroundeven(double x) -{ -#if defined(__SSE2__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || (defined(_M_X64) && !defined(_M_ARM64EC)) -#if LONG_MAX == INT64_MAX - return _mm_cvtsd_si64(_mm_load_sd(&x)); -#elif LONG_MAX == INT32_MAX - return _mm_cvtsd_si32(_mm_load_sd(&x)); -#else -#error "Unsupported long size" -#endif -#else - return lrint(x); -#endif -} - -/** - * \brief Rounds \c x to the nearest integer, with ties to the even integer, - * and returns the value as an int64_t. - */ -static inline int64_t -_mesa_i64roundevenf(float x) -{ -#if LONG_MAX == INT64_MAX - return _mesa_lroundevenf(x); -#elif LONG_MAX == INT32_MAX - return llrintf(x); -#else -#error "Unsupported long size" -#endif -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/set.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/set.c deleted file mode 100644 index dc83714..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/set.c +++ /dev/null @@ -1,635 +0,0 @@ -/* - * Copyright © 2009-2012 Intel Corporation - * Copyright © 1988-2004 Keith Packard and Bart Massey. - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Except as contained in this notice, the names of the authors - * or their institutions shall not be used in advertising or - * otherwise to promote the sale, use or other dealings in this - * Software without prior written authorization from the - * authors. - * - * Authors: - * Eric Anholt - * Keith Packard - */ - -#include -#include -#include - -#include "hash_table.h" -#include "macros.h" -#include "ralloc.h" -#include "set.h" -#include "fast_urem_by_const.h" - -/* - * From Knuth -- a good choice for hash/rehash values is p, p-2 where - * p and p-2 are both prime. These tables are sized to have an extra 10% - * free to avoid exponential performance degradation as the hash table fills - */ - -static const uint32_t deleted_key_value; -static const void *deleted_key = &deleted_key_value; - -static const struct { - uint32_t max_entries, size, rehash; - uint64_t size_magic, rehash_magic; -} hash_sizes[] = { -#define ENTRY(max_entries, size, rehash) \ - { max_entries, size, rehash, \ - REMAINDER_MAGIC(size), REMAINDER_MAGIC(rehash) } - - ENTRY(2, 5, 3 ), - ENTRY(4, 7, 5 ), - ENTRY(8, 13, 11 ), - ENTRY(16, 19, 17 ), - ENTRY(32, 43, 41 ), - ENTRY(64, 73, 71 ), - ENTRY(128, 151, 149 ), - ENTRY(256, 283, 281 ), - ENTRY(512, 571, 569 ), - ENTRY(1024, 1153, 1151 ), - ENTRY(2048, 2269, 2267 ), - ENTRY(4096, 4519, 4517 ), - ENTRY(8192, 9013, 9011 ), - ENTRY(16384, 18043, 18041 ), - ENTRY(32768, 36109, 36107 ), - ENTRY(65536, 72091, 72089 ), - ENTRY(131072, 144409, 144407 ), - ENTRY(262144, 288361, 288359 ), - ENTRY(524288, 576883, 576881 ), - ENTRY(1048576, 1153459, 1153457 ), - ENTRY(2097152, 2307163, 2307161 ), - ENTRY(4194304, 4613893, 4613891 ), - ENTRY(8388608, 9227641, 9227639 ), - ENTRY(16777216, 18455029, 18455027 ), - ENTRY(33554432, 36911011, 36911009 ), - ENTRY(67108864, 73819861, 73819859 ), - ENTRY(134217728, 147639589, 147639587 ), - ENTRY(268435456, 295279081, 295279079 ), - ENTRY(536870912, 590559793, 590559791 ), - ENTRY(1073741824, 1181116273, 1181116271 ), - ENTRY(2147483648ul, 2362232233ul, 2362232231ul ) -}; - -ASSERTED static inline bool -key_pointer_is_reserved(const void *key) -{ - return key == NULL || key == deleted_key; -} - -static int -entry_is_free(struct set_entry *entry) -{ - return entry->key == NULL; -} - -static int -entry_is_deleted(struct set_entry *entry) -{ - return entry->key == deleted_key; -} - -static int -entry_is_present(struct set_entry *entry) -{ - return entry->key != NULL && entry->key != deleted_key; -} - -bool -_mesa_set_init(struct set *ht, void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)) -{ - ht->size_index = 0; - ht->size = hash_sizes[ht->size_index].size; - ht->rehash = hash_sizes[ht->size_index].rehash; - ht->size_magic = hash_sizes[ht->size_index].size_magic; - ht->rehash_magic = hash_sizes[ht->size_index].rehash_magic; - ht->max_entries = hash_sizes[ht->size_index].max_entries; - ht->key_hash_function = key_hash_function; - ht->key_equals_function = key_equals_function; - ht->table = rzalloc_array(mem_ctx, struct set_entry, ht->size); - ht->entries = 0; - ht->deleted_entries = 0; - - return ht->table != NULL; -} - -struct set * -_mesa_set_create(void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)) -{ - struct set *ht; - - ht = ralloc(mem_ctx, struct set); - if (ht == NULL) - return NULL; - - if (!_mesa_set_init(ht, ht, key_hash_function, key_equals_function)) { - ralloc_free(ht); - return NULL; - } - - return ht; -} - -static uint32_t -key_u32_hash(const void *key) -{ - uint32_t u = (uint32_t)(uintptr_t)key; - return _mesa_hash_uint(&u); -} - -static bool -key_u32_equals(const void *a, const void *b) -{ - return (uint32_t)(uintptr_t)a == (uint32_t)(uintptr_t)b; -} - -/* key == 0 and key == deleted_key are not allowed */ -struct set * -_mesa_set_create_u32_keys(void *mem_ctx) -{ - return _mesa_set_create(mem_ctx, key_u32_hash, key_u32_equals); -} - -struct set * -_mesa_set_clone(struct set *set, void *dst_mem_ctx) -{ - struct set *clone; - - clone = ralloc(dst_mem_ctx, struct set); - if (clone == NULL) - return NULL; - - memcpy(clone, set, sizeof(struct set)); - - clone->table = ralloc_array(clone, struct set_entry, clone->size); - if (clone->table == NULL) { - ralloc_free(clone); - return NULL; - } - - memcpy(clone->table, set->table, clone->size * sizeof(struct set_entry)); - - return clone; -} - -/** - * Frees the given set. - * - * If delete_function is passed, it gets called on each entry present before - * freeing. - */ -void -_mesa_set_destroy(struct set *ht, void (*delete_function)(struct set_entry *entry)) -{ - if (!ht) - return; - - if (delete_function) { - set_foreach (ht, entry) { - delete_function(entry); - } - } - ralloc_free(ht->table); - ralloc_free(ht); -} - - -static void -set_clear_fast(struct set *ht) -{ - memset(ht->table, 0, sizeof(struct set_entry) * hash_sizes[ht->size_index].size); - ht->entries = ht->deleted_entries = 0; -} - -/** - * Clears all values from the given set. - * - * If delete_function is passed, it gets called on each entry present before - * the set is cleared. - */ -void -_mesa_set_clear(struct set *set, void (*delete_function)(struct set_entry *entry)) -{ - if (!set) - return; - - struct set_entry *entry; - - if (delete_function) { - for (entry = set->table; entry != set->table + set->size; entry++) { - if (entry_is_present(entry)) - delete_function(entry); - - entry->key = NULL; - } - set->entries = 0; - set->deleted_entries = 0; - } else - set_clear_fast(set); -} - -/** - * Finds a set entry with the given key and hash of that key. - * - * Returns NULL if no entry is found. - */ -static struct set_entry * -set_search(const struct set *ht, uint32_t hash, const void *key) -{ - assert(!key_pointer_is_reserved(key)); - - uint32_t size = ht->size; - uint32_t start_address = util_fast_urem32(hash, size, ht->size_magic); - uint32_t double_hash = util_fast_urem32(hash, ht->rehash, - ht->rehash_magic) + 1; - uint32_t hash_address = start_address; - do { - struct set_entry *entry = ht->table + hash_address; - - if (entry_is_free(entry)) { - return NULL; - } else if (entry_is_present(entry) && entry->hash == hash) { - if (ht->key_equals_function(key, entry->key)) { - return entry; - } - } - - hash_address += double_hash; - if (hash_address >= size) - hash_address -= size; - } while (hash_address != start_address); - - return NULL; -} - -struct set_entry * -_mesa_set_search(const struct set *set, const void *key) -{ - assert(set->key_hash_function); - return set_search(set, set->key_hash_function(key), key); -} - -struct set_entry * -_mesa_set_search_pre_hashed(const struct set *set, uint32_t hash, - const void *key) -{ - assert(set->key_hash_function == NULL || - hash == set->key_hash_function(key)); - return set_search(set, hash, key); -} - -static void -set_add_rehash(struct set *ht, uint32_t hash, const void *key) -{ - uint32_t size = ht->size; - uint32_t start_address = util_fast_urem32(hash, size, ht->size_magic); - uint32_t double_hash = util_fast_urem32(hash, ht->rehash, - ht->rehash_magic) + 1; - uint32_t hash_address = start_address; - do { - struct set_entry *entry = ht->table + hash_address; - if (likely(entry->key == NULL)) { - entry->hash = hash; - entry->key = key; - return; - } - - hash_address = hash_address + double_hash; - if (hash_address >= size) - hash_address -= size; - } while (true); -} - -static void -set_rehash(struct set *ht, unsigned new_size_index) -{ - struct set old_ht; - struct set_entry *table; - - if (ht->size_index == new_size_index && ht->deleted_entries == ht->max_entries) { - set_clear_fast(ht); - assert(!ht->entries); - return; - } - - if (new_size_index >= ARRAY_SIZE(hash_sizes)) - return; - - table = rzalloc_array(ralloc_parent(ht->table), struct set_entry, - hash_sizes[new_size_index].size); - if (table == NULL) - return; - - old_ht = *ht; - - ht->table = table; - ht->size_index = new_size_index; - ht->size = hash_sizes[ht->size_index].size; - ht->rehash = hash_sizes[ht->size_index].rehash; - ht->size_magic = hash_sizes[ht->size_index].size_magic; - ht->rehash_magic = hash_sizes[ht->size_index].rehash_magic; - ht->max_entries = hash_sizes[ht->size_index].max_entries; - ht->entries = 0; - ht->deleted_entries = 0; - - set_foreach(&old_ht, entry) { - set_add_rehash(ht, entry->hash, entry->key); - } - - ht->entries = old_ht.entries; - - ralloc_free(old_ht.table); -} - -void -_mesa_set_resize(struct set *set, uint32_t entries) -{ - /* You can't shrink a set below its number of entries */ - if (set->entries > entries) - entries = set->entries; - - unsigned size_index = 0; - while (hash_sizes[size_index].max_entries < entries) - size_index++; - - set_rehash(set, size_index); -} - -/** - * Find a matching entry for the given key, or insert it if it doesn't already - * exist. - * - * Note that insertion may rearrange the table on a resize or rehash, - * so previously found hash_entries are no longer valid after this function. - */ -static struct set_entry * -set_search_or_add(struct set *ht, uint32_t hash, const void *key, bool *found) -{ - struct set_entry *available_entry = NULL; - - assert(!key_pointer_is_reserved(key)); - - if (ht->entries >= ht->max_entries) { - set_rehash(ht, ht->size_index + 1); - } else if (ht->deleted_entries + ht->entries >= ht->max_entries) { - set_rehash(ht, ht->size_index); - } - - uint32_t size = ht->size; - uint32_t start_address = util_fast_urem32(hash, size, ht->size_magic); - uint32_t double_hash = util_fast_urem32(hash, ht->rehash, - ht->rehash_magic) + 1; - uint32_t hash_address = start_address; - do { - struct set_entry *entry = ht->table + hash_address; - - if (!entry_is_present(entry)) { - /* Stash the first available entry we find */ - if (available_entry == NULL) - available_entry = entry; - if (entry_is_free(entry)) - break; - } - - if (!entry_is_deleted(entry) && - entry->hash == hash && - ht->key_equals_function(key, entry->key)) { - if (found) - *found = true; - return entry; - } - - hash_address = hash_address + double_hash; - if (hash_address >= size) - hash_address -= size; - } while (hash_address != start_address); - - if (available_entry) { - /* There is no matching entry, create it. */ - if (entry_is_deleted(available_entry)) - ht->deleted_entries--; - available_entry->hash = hash; - available_entry->key = key; - ht->entries++; - if (found) - *found = false; - return available_entry; - } - - /* We could hit here if a required resize failed. An unchecked-malloc - * application could ignore this result. - */ - return NULL; -} - -/** - * Inserts the key with the given hash into the table. - * - * Note that insertion may rearrange the table on a resize or rehash, - * so previously found hash_entries are no longer valid after this function. - */ -static struct set_entry * -set_add(struct set *ht, uint32_t hash, const void *key) -{ - struct set_entry *entry = set_search_or_add(ht, hash, key, NULL); - - if (unlikely(!entry)) - return NULL; - - /* Note: If a matching entry already exists, this will replace it. This is - * a relatively common feature of hash tables, with the alternative - * generally being "insert the new value as well, and return it first when - * the key is searched for". - * - * Note that the hash table doesn't have a delete callback. If freeing of - * old keys is required to avoid memory leaks, use the alternative - * _mesa_set_search_or_add function and implement the replacement yourself. - */ - entry->key = key; - return entry; -} - -struct set_entry * -_mesa_set_add(struct set *set, const void *key) -{ - assert(set->key_hash_function); - return set_add(set, set->key_hash_function(key), key); -} - -struct set_entry * -_mesa_set_add_pre_hashed(struct set *set, uint32_t hash, const void *key) -{ - assert(set->key_hash_function == NULL || - hash == set->key_hash_function(key)); - return set_add(set, hash, key); -} - -struct set_entry * -_mesa_set_search_and_add(struct set *set, const void *key, bool *replaced) -{ - assert(set->key_hash_function); - return _mesa_set_search_and_add_pre_hashed(set, - set->key_hash_function(key), - key, replaced); -} - -struct set_entry * -_mesa_set_search_and_add_pre_hashed(struct set *set, uint32_t hash, - const void *key, bool *replaced) -{ - assert(set->key_hash_function == NULL || - hash == set->key_hash_function(key)); - struct set_entry *entry = set_search_or_add(set, hash, key, replaced); - - if (unlikely(!entry)) - return NULL; - - /* This implements the replacement, same as _mesa_set_add(). The user will - * be notified if we're overwriting a found entry. - */ - entry->key = key; - return entry; -} - -struct set_entry * -_mesa_set_search_or_add(struct set *set, const void *key, bool *found) -{ - assert(set->key_hash_function); - return set_search_or_add(set, set->key_hash_function(key), key, found); -} - -struct set_entry * -_mesa_set_search_or_add_pre_hashed(struct set *set, uint32_t hash, - const void *key, bool *found) -{ - assert(set->key_hash_function == NULL || - hash == set->key_hash_function(key)); - return set_search_or_add(set, hash, key, found); -} - -/** - * This function deletes the given hash table entry. - * - * Note that deletion doesn't otherwise modify the table, so an iteration over - * the table deleting entries is safe. - */ -void -_mesa_set_remove(struct set *ht, struct set_entry *entry) -{ - if (!entry) - return; - - entry->key = deleted_key; - ht->entries--; - ht->deleted_entries++; -} - -/** - * Removes the entry with the corresponding key, if exists. - */ -void -_mesa_set_remove_key(struct set *set, const void *key) -{ - _mesa_set_remove(set, _mesa_set_search(set, key)); -} - -/** - * This function is an iterator over the set when no deleted entries are present. - * - * Pass in NULL for the first entry, as in the start of a for loop. - */ -struct set_entry * -_mesa_set_next_entry_unsafe(const struct set *ht, struct set_entry *entry) -{ - assert(!ht->deleted_entries); - if (!ht->entries) - return NULL; - if (entry == NULL) - entry = ht->table; - else - entry = entry + 1; - if (entry != ht->table + ht->size) - return entry->key ? entry : _mesa_set_next_entry_unsafe(ht, entry); - - return NULL; -} - -/** - * This function is an iterator over the hash table. - * - * Pass in NULL for the first entry, as in the start of a for loop. Note that - * an iteration over the table is O(table_size) not O(entries). - */ -struct set_entry * -_mesa_set_next_entry(const struct set *ht, struct set_entry *entry) -{ - if (entry == NULL) - entry = ht->table; - else - entry = entry + 1; - - for (; entry != ht->table + ht->size; entry++) { - if (entry_is_present(entry)) { - return entry; - } - } - - return NULL; -} - -/** - * Helper to create a set with pointer keys. - */ -struct set * -_mesa_pointer_set_create(void *mem_ctx) -{ - return _mesa_set_create(mem_ctx, _mesa_hash_pointer, - _mesa_key_pointer_equal); -} - -bool -_mesa_set_intersects(struct set *a, struct set *b) -{ - assert(a->key_hash_function == b->key_hash_function); - assert(a->key_equals_function == b->key_equals_function); - - /* iterate over the set with less entries */ - if (b->entries < a->entries) { - struct set *tmp = a; - a = b; - b = tmp; - } - - set_foreach(a, entry) { - if (_mesa_set_search_pre_hashed(b, entry->hash, entry->key)) - return true; - } - return false; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/set.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/set.h deleted file mode 100644 index 4af5c0d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/set.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright © 2009-2012 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Eric Anholt - * - */ - -#ifndef _SET_H -#define _SET_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct set_entry { - uint32_t hash; - const void *key; -}; - -struct set { - void *mem_ctx; - struct set_entry *table; - uint32_t (*key_hash_function)(const void *key); - bool (*key_equals_function)(const void *a, const void *b); - uint32_t size; - uint32_t rehash; - uint64_t size_magic; - uint64_t rehash_magic; - uint32_t max_entries; - uint32_t size_index; - uint32_t entries; - uint32_t deleted_entries; -}; - -bool -_mesa_set_init(struct set *ht, void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)); - -struct set * -_mesa_set_create(void *mem_ctx, - uint32_t (*key_hash_function)(const void *key), - bool (*key_equals_function)(const void *a, - const void *b)); -struct set * -_mesa_set_create_u32_keys(void *mem_ctx); - -struct set * -_mesa_set_clone(struct set *set, void *dst_mem_ctx); - -void -_mesa_set_destroy(struct set *set, - void (*delete_function)(struct set_entry *entry)); -void -_mesa_set_resize(struct set *set, uint32_t entries); -void -_mesa_set_clear(struct set *set, - void (*delete_function)(struct set_entry *entry)); - -struct set_entry * -_mesa_set_add(struct set *set, const void *key); -struct set_entry * -_mesa_set_add_pre_hashed(struct set *set, uint32_t hash, const void *key); - -struct set_entry * -_mesa_set_search_or_add(struct set *set, const void *key, bool *found); -struct set_entry * -_mesa_set_search_or_add_pre_hashed(struct set *set, uint32_t hash, - const void *key, bool *found); - -struct set_entry * -_mesa_set_search(const struct set *set, const void *key); -struct set_entry * -_mesa_set_search_pre_hashed(const struct set *set, uint32_t hash, - const void *key); - -struct set_entry * -_mesa_set_search_and_add(struct set *set, const void *key, bool *replaced); -struct set_entry * -_mesa_set_search_and_add_pre_hashed(struct set *set, uint32_t hash, - const void *key, bool *replaced); - -void -_mesa_set_remove(struct set *set, struct set_entry *entry); -void -_mesa_set_remove_key(struct set *set, const void *key); - -struct set_entry * -_mesa_set_next_entry(const struct set *set, struct set_entry *entry); -struct set_entry * -_mesa_set_next_entry_unsafe(const struct set *set, struct set_entry *entry); - -struct set * -_mesa_pointer_set_create(void *mem_ctx); - -bool -_mesa_set_intersects(struct set *a, struct set *b); - -/** - * This foreach function is safe against deletion, but not against - * insertion (which may rehash the set, making entry a dangling - * pointer). - */ -#define set_foreach(set, entry) \ - for (struct set_entry *entry = _mesa_set_next_entry(set, NULL); \ - entry != NULL; \ - entry = _mesa_set_next_entry(set, entry)) - -/** - * This foreach function destroys the table as it iterates. - * It is not safe to use when inserting or removing entries. - */ -#define set_foreach_remove(set, entry) \ - for (struct set_entry *entry = _mesa_set_next_entry_unsafe(set, NULL); \ - (set)->entries; \ - entry->hash = 0, entry->key = (void*)NULL, (set)->entries--, entry = _mesa_set_next_entry_unsafe(set, entry)) - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* _SET_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/README b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/README deleted file mode 100644 index 445d237..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/README +++ /dev/null @@ -1,62 +0,0 @@ -This local copy of a SHA1 implementation based on the sources below. - -Why: - - Some libraries suffer from race condition and other issues. For example see -commit ade3108bb5b0 ("util: Fix race condition on libgcrypt initialization"). - - - Fold the handling and detection of _eight_ implementations at configure -stage and _seven_ different codepaths. - - - Have a single, uniform, code used by developers, testers and users. - - - Avoid conflicts when using software which ships with it's own SHA1 library. -The latter of which conflicting with the one mesa is build against. - - - -Source: -The SHA1 implementation is copied verbatim from the following links. -At the time of checkout HEAD is 1.25 and 1.24 respectively. - -http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/lib/libc/hash/sha1.c?rev=HEAD -http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/include/sha1.h?rev=HEAD - - -Notes: - - The files should not have any local changes. If there are any they should be -clearly documented below and one should aim to upstream them where possible. - - - Files will be periodically syncronised with the respective upstream sources. -Updates will be made regularly, but since the code is _not_ aimed as a -cryptography solution any issues found should not be considered security ones. - - -Local changes: - - Removed __bounded__ attribute qualifiers. Unavailable on platforms targeted -by Mesa. Upstream status: TBD (N/A ?) - - - Pick the sha1.h header from the current folder, by using "" over <> in the -include directive. Upstream status: TBD - - - Remove unused function prototypes - SHA1End, SHA1File, SHA1FileChunk and -SHA1Data. Upstream status: TBD - - - Use stdint.h integer types - u_int{8,16,32}_t -> uint{8,16,32}_t and -u_int -> uint32_t, change header include. Upstream status: TBD - - - Revert sha1.c rev 1.26 change (introduce DEF_WEAK). -Upstream status: TBD (N/A ?) - - - Add stdint.h include in sha1.h for uint*_t types. Upstream status: TBD - - - Add stddef.h include in sha1.h for size_t type. Upstream status: TBD - - - Use memset over explicit_bzero, since memset_s once isn't widely available. -Upstream status: TBD (N/A ?) - - - Manually expand __BEGIN_DECLS/__END_DECLS and make sure that they include -the struct declaration. -Upstream status: TBD - - - Add non-typedef struct name. -Upstream status: TBD diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/sha1.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/sha1.c deleted file mode 100644 index 69ab94e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/sha1.c +++ /dev/null @@ -1,174 +0,0 @@ -/* $OpenBSD: sha1.c,v 1.26 2015/09/11 09:18:27 guenther Exp $ */ - -/* - * SHA-1 in C - * By Steve Reid - * 100% Public Domain - * - * Test Vectors (from FIPS PUB 180-1) - * "abc" - * A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D - * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - * 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 - * A million repetitions of "a" - * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F - */ - -#include -#include -#include "../u_endian.h" -#include "sha1.h" - -#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) - -/* - * blk0() and blk() perform the initial expand. - * I got the idea of expanding during the round function from SSLeay - */ -#if UTIL_ARCH_LITTLE_ENDIAN -# define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ - |(rol(block->l[i],8)&0x00FF00FF)) -#else -# define blk0(i) block->l[i] -#endif -#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ - ^block->l[(i+2)&15]^block->l[i&15],1)) - -/* - * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1 - */ -#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); -#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); -#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); - -typedef union { - uint8_t c[64]; - uint32_t l[16]; -} CHAR64LONG16; - -/* - * Hash a single 512-bit block. This is the core of the algorithm. - */ -void -SHA1Transform(uint32_t state[5], const uint8_t buffer[SHA1_BLOCK_LENGTH]) -{ - uint32_t a, b, c, d, e; - uint8_t workspace[SHA1_BLOCK_LENGTH]; - CHAR64LONG16 *block = (CHAR64LONG16 *)workspace; - - (void)memcpy(block, buffer, SHA1_BLOCK_LENGTH); - - /* Copy context->state[] to working vars */ - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - - /* 4 rounds of 20 operations each. Loop unrolled. */ - R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); - R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); - R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); - R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); - R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); - R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); - R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); - R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); - R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); - R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); - R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); - R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); - R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); - R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); - R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); - R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); - R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); - R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); - R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); - R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); - - /* Add the working vars back into context.state[] */ - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; - - /* Wipe variables */ - a = b = c = d = e = 0; -} - - -/* - * SHA1Init - Initialize new context - */ -void -SHA1Init(SHA1_CTX *context) -{ - - /* SHA1 initialization constants */ - context->count = 0; - context->state[0] = 0x67452301; - context->state[1] = 0xEFCDAB89; - context->state[2] = 0x98BADCFE; - context->state[3] = 0x10325476; - context->state[4] = 0xC3D2E1F0; -} - - -/* - * Run your data through this. - */ -void -SHA1Update(SHA1_CTX *context, const uint8_t *data, size_t len) -{ - size_t i, j; - - j = (size_t)((context->count >> 3) & 63); - context->count += (len << 3); - if ((j + len) > 63) { - (void)memcpy(&context->buffer[j], data, (i = 64-j)); - SHA1Transform(context->state, context->buffer); - for ( ; i + 63 < len; i += 64) - SHA1Transform(context->state, (uint8_t *)&data[i]); - j = 0; - } else { - i = 0; - } - (void)memcpy(&context->buffer[j], &data[i], len - i); -} - - -/* - * Add padding and return the message digest. - */ -void -SHA1Pad(SHA1_CTX *context) -{ - uint8_t finalcount[8]; - uint32_t i; - - for (i = 0; i < 8; i++) { - finalcount[i] = (uint8_t)((context->count >> - ((7 - (i & 7)) * 8)) & 255); /* Endian independent */ - } - SHA1Update(context, (uint8_t *)"\200", 1); - while ((context->count & 504) != 448) - SHA1Update(context, (uint8_t *)"\0", 1); - SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ -} - -void -SHA1Final(uint8_t digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context) -{ - uint32_t i; - - SHA1Pad(context); - for (i = 0; i < SHA1_DIGEST_LENGTH; i++) { - digest[i] = (uint8_t) - ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); - } - memset(context, 0, sizeof(*context)); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/sha1.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/sha1.h deleted file mode 100644 index 029a0ae..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sha1/sha1.h +++ /dev/null @@ -1,53 +0,0 @@ -/* $OpenBSD: sha1.h,v 1.24 2012/12/05 23:19:57 deraadt Exp $ */ - -/* - * SHA-1 in C - * By Steve Reid - * 100% Public Domain - */ - -#ifndef _SHA1_H -#define _SHA1_H - -#include -#include - -#define SHA1_BLOCK_LENGTH 64 -#define SHA1_DIGEST_LENGTH 20 -#define SHA1_DIGEST_STRING_LENGTH (SHA1_DIGEST_LENGTH * 2 + 1) - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _SHA1_CTX { - uint32_t state[5]; - uint64_t count; - uint8_t buffer[SHA1_BLOCK_LENGTH]; -} SHA1_CTX; - -void SHA1Init(SHA1_CTX *); -void SHA1Pad(SHA1_CTX *); -void SHA1Transform(uint32_t [5], const uint8_t [SHA1_BLOCK_LENGTH]); -void SHA1Update(SHA1_CTX *, const uint8_t *, size_t); -void SHA1Final(uint8_t [SHA1_DIGEST_LENGTH], SHA1_CTX *); - -#define HTONDIGEST(x) do { \ - x[0] = htonl(x[0]); \ - x[1] = htonl(x[1]); \ - x[2] = htonl(x[2]); \ - x[3] = htonl(x[3]); \ - x[4] = htonl(x[4]); } while (0) - -#define NTOHDIGEST(x) do { \ - x[0] = ntohl(x[0]); \ - x[1] = ntohl(x[1]); \ - x[2] = ntohl(x[2]); \ - x[3] = ntohl(x[3]); \ - x[4] = ntohl(x[4]); } while (0) - -#ifdef __cplusplus -} -#endif - -#endif /* _SHA1_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/simple_mtx.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/simple_mtx.c deleted file mode 100644 index 8b53e10..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/simple_mtx.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2022 Yonggang Luo - * SPDX-License-Identifier: MIT - * - */ - -#include "simple_mtx.h" - -#if !UTIL_FUTEX_SUPPORTED - -void _simple_mtx_plain_init_once(simple_mtx_t *mtx) -{ - mtx_init(&mtx->mtx, mtx_plain); -} - -void -simple_mtx_init(simple_mtx_t *mtx, ASSERTED int type) -{ - const util_once_flag flag = UTIL_ONCE_FLAG_INIT; - assert(type == mtx_plain); - mtx->flag = flag; - _simple_mtx_init_with_once(mtx); -} - -void -simple_mtx_destroy(simple_mtx_t *mtx) -{ - if (mtx->flag.called) { - mtx_destroy(&mtx->mtx); - } -} - -#endif /* !UTIL_FUTEX_SUPPORTED */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/simple_mtx.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/simple_mtx.h deleted file mode 100644 index 68fc206..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/simple_mtx.h +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright © 2015 Intel - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _SIMPLE_MTX_H -#define _SIMPLE_MTX_H - -#include "futex.h" -#include "macros.h" -#include "u_call_once.h" -#include "u_atomic.h" - -#if UTIL_FUTEX_SUPPORTED -#if defined(HAVE_VALGRIND) && !defined(NDEBUG) -# include -# include -# define HG(x) x -#else -# define HG(x) -#endif -#else /* !UTIL_FUTEX_SUPPORTED */ -# include "../../include/c11/threads.h" -#endif /* UTIL_FUTEX_SUPPORTED */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if UTIL_FUTEX_SUPPORTED - -/* mtx_t - Fast, simple mutex - * - * While modern pthread mutexes are very fast (implemented using futex), they - * still incur a call to an external DSO and overhead of the generality and - * features of pthread mutexes. Most mutexes in mesa only needs lock/unlock, - * and the idea here is that we can inline the atomic operation and make the - * fast case just two intructions. Mutexes are subtle and finicky to - * implement, so we carefully copy the implementation from Ulrich Dreppers - * well-written and well-reviewed paper: - * - * "Futexes Are Tricky" - * http://www.akkadia.org/drepper/futex.pdf - * - * We implement "mutex3", which gives us a mutex that has no syscalls on - * uncontended lock or unlock. Further, the uncontended case boils down to a - * locked cmpxchg and an untaken branch, the uncontended unlock is just a - * locked decr and an untaken branch. We use __builtin_expect() to indicate - * that contention is unlikely so that gcc will put the contention code out of - * the main code flow. - * - * A fast mutex only supports lock/unlock, can't be recursive or used with - * condition variables. - */ - -typedef struct { - uint32_t val; -} simple_mtx_t; - -#define SIMPLE_MTX_INITIALIZER { 0 } - -#define _SIMPLE_MTX_INVALID_VALUE 0xd0d0d0d0 - -static inline void -simple_mtx_init(simple_mtx_t *mtx, ASSERTED int type) -{ - assert(type == mtx_plain); - - mtx->val = 0; - - HG(ANNOTATE_RWLOCK_CREATE(mtx)); -} - -static inline void -simple_mtx_destroy(ASSERTED simple_mtx_t *mtx) -{ - HG(ANNOTATE_RWLOCK_DESTROY(mtx)); -#ifndef NDEBUG - mtx->val = _SIMPLE_MTX_INVALID_VALUE; -#endif -} - -static inline void -simple_mtx_lock(simple_mtx_t *mtx) -{ - uint32_t c; - - c = p_atomic_cmpxchg(&mtx->val, 0, 1); - - assert(c != _SIMPLE_MTX_INVALID_VALUE); - - if (__builtin_expect(c != 0, 0)) { - if (c != 2) - c = p_atomic_xchg(&mtx->val, 2); - while (c != 0) { - futex_wait(&mtx->val, 2, NULL); - c = p_atomic_xchg(&mtx->val, 2); - } - } - - HG(ANNOTATE_RWLOCK_ACQUIRED(mtx, 1)); -} - -static inline void -simple_mtx_unlock(simple_mtx_t *mtx) -{ - uint32_t c; - - HG(ANNOTATE_RWLOCK_RELEASED(mtx, 1)); - - c = p_atomic_fetch_add(&mtx->val, -1); - - assert(c != _SIMPLE_MTX_INVALID_VALUE); - - if (__builtin_expect(c != 1, 0)) { - mtx->val = 0; - futex_wake(&mtx->val, 1); - } -} - -static inline void -simple_mtx_assert_locked(simple_mtx_t *mtx) -{ - assert(mtx->val); -} - -#else /* !UTIL_FUTEX_SUPPORTED */ - -typedef struct simple_mtx_t { - util_once_flag flag; - mtx_t mtx; -} simple_mtx_t; - -#define SIMPLE_MTX_INITIALIZER { UTIL_ONCE_FLAG_INIT } - -void _simple_mtx_plain_init_once(simple_mtx_t *mtx); - -static inline void -_simple_mtx_init_with_once(simple_mtx_t *mtx) -{ - util_call_once_data(&mtx->flag, - (util_call_once_data_func)_simple_mtx_plain_init_once, mtx); -} - -void -simple_mtx_init(simple_mtx_t *mtx, int type); - -void -simple_mtx_destroy(simple_mtx_t *mtx); - -static inline void -simple_mtx_lock(simple_mtx_t *mtx) -{ - _simple_mtx_init_with_once(mtx); - mtx_lock(&mtx->mtx); -} - -static inline void -simple_mtx_unlock(simple_mtx_t *mtx) -{ - _simple_mtx_init_with_once(mtx); - mtx_unlock(&mtx->mtx); -} - -static inline void -simple_mtx_assert_locked(simple_mtx_t *mtx) -{ -#ifndef NDEBUG - _simple_mtx_init_with_once(mtx); - /* NOTE: this would not work for recursive mutexes, but - * mtx_t doesn't support those - */ - int ret = mtx_trylock(&mtx->mtx); - assert(ret == thrd_busy); - if (ret == thrd_success) - mtx_unlock(&mtx->mtx); -#else - (void)mtx; -#endif -} - -#endif /* UTIL_FUTEX_SUPPORTED */ - -#ifdef __cplusplus -} -#endif - -#endif /* _SIMPLE_MTX_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/slab.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/slab.c deleted file mode 100644 index 9dee236..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/slab.c +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Copyright 2010 Marek Olšák - * Copyright 2016 Advanced Micro Devices, Inc. - * - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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. */ - -#include "slab.h" -#include "macros.h" -#include "u_atomic.h" -#include -#include -#include - -#define SLAB_MAGIC_ALLOCATED 0xcafe4321 -#define SLAB_MAGIC_FREE 0x7ee01234 - -#ifndef NDEBUG -#define SET_MAGIC(element, value) (element)->magic = (value) -#define CHECK_MAGIC(element, value) assert((element)->magic == (value)) -#else -#define SET_MAGIC(element, value) -#define CHECK_MAGIC(element, value) -#endif - -/* One array element within a big buffer. */ -struct slab_element_header { - /* The next element in the free or migrated list. */ - struct slab_element_header *next; - - /* This is either - * - a pointer to the child pool to which this element belongs, or - * - a pointer to the orphaned page of the element, with the least - * significant bit set to 1. - */ - intptr_t owner; - -#ifndef NDEBUG - intptr_t magic; -#endif -}; - -/* The page is an array of allocations in one block. */ -struct slab_page_header { - union { - /* Next page in the same child pool. */ - struct slab_page_header *next; - - /* Number of remaining, non-freed elements (for orphaned pages). */ - unsigned num_remaining; - } u; - /* Memory after the last member is dedicated to the page itself. - * The allocated size is always larger than this structure. - */ -}; - - -static struct slab_element_header * -slab_get_element(struct slab_parent_pool *parent, - struct slab_page_header *page, unsigned index) -{ - return (struct slab_element_header*) - ((uint8_t*)&page[1] + (parent->element_size * index)); -} - -/* The given object/element belongs to an orphaned page (i.e. the owning child - * pool has been destroyed). Mark the element as freed and free the whole page - * when no elements are left in it. - */ -static void -slab_free_orphaned(struct slab_element_header *elt) -{ - struct slab_page_header *page; - - assert(elt->owner & 1); - - page = (struct slab_page_header *)(elt->owner & ~(intptr_t)1); - if (!p_atomic_dec_return(&page->u.num_remaining)) - free(page); -} - -/** - * Create a parent pool for the allocation of same-sized objects. - * - * \param item_size Size of one object. - * \param num_items Number of objects to allocate at once. - */ -void -slab_create_parent(struct slab_parent_pool *parent, - unsigned item_size, - unsigned num_items) -{ - simple_mtx_init(&parent->mutex, mtx_plain); - parent->element_size = ALIGN_POT(sizeof(struct slab_element_header) + item_size, - sizeof(intptr_t)); - parent->num_elements = num_items; - parent->item_size = item_size; -} - -void -slab_destroy_parent(struct slab_parent_pool *parent) -{ - simple_mtx_destroy(&parent->mutex); -} - -/** - * Create a child pool linked to the given parent. - */ -void slab_create_child(struct slab_child_pool *pool, - struct slab_parent_pool *parent) -{ - pool->parent = parent; - pool->pages = NULL; - pool->free = NULL; - pool->migrated = NULL; -} - -/** - * Destroy the child pool. - * - * Pages associated to the pool will be orphaned. They are eventually freed - * when all objects in them are freed. - */ -void slab_destroy_child(struct slab_child_pool *pool) -{ - if (!pool->parent) - return; /* the slab probably wasn't even created */ - - simple_mtx_lock(&pool->parent->mutex); - - while (pool->pages) { - struct slab_page_header *page = pool->pages; - pool->pages = page->u.next; - p_atomic_set(&page->u.num_remaining, pool->parent->num_elements); - - for (unsigned i = 0; i < pool->parent->num_elements; ++i) { - struct slab_element_header *elt = slab_get_element(pool->parent, page, i); - p_atomic_set(&elt->owner, (intptr_t)page | 1); - } - } - - while (pool->migrated) { - struct slab_element_header *elt = pool->migrated; - pool->migrated = elt->next; - slab_free_orphaned(elt); - } - - simple_mtx_unlock(&pool->parent->mutex); - - while (pool->free) { - struct slab_element_header *elt = pool->free; - pool->free = elt->next; - slab_free_orphaned(elt); - } - - /* Guard against use-after-free. */ - pool->parent = NULL; -} - -static bool -slab_add_new_page(struct slab_child_pool *pool) -{ - struct slab_page_header *page = malloc(sizeof(struct slab_page_header) + - pool->parent->num_elements * pool->parent->element_size); - - if (!page) - return false; - - for (unsigned i = 0; i < pool->parent->num_elements; ++i) { - struct slab_element_header *elt = slab_get_element(pool->parent, page, i); - elt->owner = (intptr_t)pool; - assert(!(elt->owner & 1)); - - elt->next = pool->free; - pool->free = elt; - SET_MAGIC(elt, SLAB_MAGIC_FREE); - } - - page->u.next = pool->pages; - pool->pages = page; - - return true; -} - -/** - * Allocate an object from the child pool. Single-threaded (i.e. the caller - * must ensure that no operation happens on the same child pool in another - * thread). - */ -void * -slab_alloc(struct slab_child_pool *pool) -{ - struct slab_element_header *elt; - - if (!pool->free) { - /* First, collect elements that belong to us but were freed from a - * different child pool. - */ - simple_mtx_lock(&pool->parent->mutex); - pool->free = pool->migrated; - pool->migrated = NULL; - simple_mtx_unlock(&pool->parent->mutex); - - /* Now allocate a new page. */ - if (!pool->free && !slab_add_new_page(pool)) - return NULL; - } - - elt = pool->free; - pool->free = elt->next; - - CHECK_MAGIC(elt, SLAB_MAGIC_FREE); - SET_MAGIC(elt, SLAB_MAGIC_ALLOCATED); - - return &elt[1]; -} - -/** - * Same as slab_alloc but memset the returned object to 0. - */ -void * -slab_zalloc(struct slab_child_pool *pool) -{ - void *r = slab_alloc(pool); - if (r) - memset(r, 0, pool->parent->item_size); - return r; -} - -/** - * Free an object allocated from the slab. Single-threaded (i.e. the caller - * must ensure that no operation happens on the same child pool in another - * thread). - * - * Freeing an object in a different child pool from the one where it was - * allocated is allowed, as long the pool belong to the same parent. No - * additional locking is required in this case. - */ -void slab_free(struct slab_child_pool *pool, void *ptr) -{ - struct slab_element_header *elt = ((struct slab_element_header*)ptr - 1); - intptr_t owner_int; - - CHECK_MAGIC(elt, SLAB_MAGIC_ALLOCATED); - SET_MAGIC(elt, SLAB_MAGIC_FREE); - - if (p_atomic_read(&elt->owner) == (intptr_t)pool) { - /* This is the simple case: The caller guarantees that we can safely - * access the free list. - */ - elt->next = pool->free; - pool->free = elt; - return; - } - - /* The slow case: migration or an orphaned page. */ - if (pool->parent) - simple_mtx_lock(&pool->parent->mutex); - - /* Note: we _must_ re-read elt->owner here because the owning child pool - * may have been destroyed by another thread in the meantime. - */ - owner_int = p_atomic_read(&elt->owner); - - if (!(owner_int & 1)) { - struct slab_child_pool *owner = (struct slab_child_pool *)owner_int; - elt->next = owner->migrated; - owner->migrated = elt; - if (pool->parent) - simple_mtx_unlock(&pool->parent->mutex); - } else { - if (pool->parent) - simple_mtx_unlock(&pool->parent->mutex); - - slab_free_orphaned(elt); - } -} - -/** - * Allocate an object from the slab. Single-threaded (no mutex). - */ -void * -slab_alloc_st(struct slab_mempool *mempool) -{ - return slab_alloc(&mempool->child); -} - -/** - * Free an object allocated from the slab. Single-threaded (no mutex). - */ -void -slab_free_st(struct slab_mempool *mempool, void *ptr) -{ - slab_free(&mempool->child, ptr); -} - -void -slab_destroy(struct slab_mempool *mempool) -{ - slab_destroy_child(&mempool->child); - slab_destroy_parent(&mempool->parent); -} - -/** - * Create an allocator for same-sized objects. - * - * \param item_size Size of one object. - * \param num_items Number of objects to allocate at once. - */ -void -slab_create(struct slab_mempool *mempool, - unsigned item_size, - unsigned num_items) -{ - slab_create_parent(&mempool->parent, item_size, num_items); - slab_create_child(&mempool->child, &mempool->parent); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/slab.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/slab.h deleted file mode 100644 index f6dcbe5..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/slab.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2010 Marek Olšák - * Copyright 2016 Advanced Micro Devices, Inc. - * - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHOR(S) AND/OR THEIR SUPPLIERS 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. */ - -/** - * Slab allocator for equally sized memory allocations. - * - * Objects are allocated from "child" pools that are connected to a "parent" - * pool. - * - * Calls to slab_alloc/slab_free for the same child pool must not occur from - * multiple threads simultaneously. - * - * Allocations obtained from one child pool should usually be freed in the - * same child pool. Freeing an allocation in a different child pool associated - * to the same parent is allowed (and requires no locking by the caller), but - * it is discouraged because it implies a performance penalty. - * - * For convenience and to ease the transition, there is also a set of wrapper - * functions around a single parent-child pair. - */ - -#ifndef SLAB_H -#define SLAB_H - -#include "simple_mtx.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct slab_element_header; -struct slab_page_header; - -struct slab_parent_pool { - simple_mtx_t mutex; - unsigned element_size; - unsigned num_elements; - unsigned item_size; -}; - -struct slab_child_pool { - struct slab_parent_pool *parent; - - struct slab_page_header *pages; - - /* Free elements. */ - struct slab_element_header *free; - - /* Elements that are owned by this pool but were freed with a different - * pool as the argument to slab_free. - * - * This list is protected by the parent mutex. - */ - struct slab_element_header *migrated; -}; - -void slab_create_parent(struct slab_parent_pool *parent, - unsigned item_size, - unsigned num_items); -void slab_destroy_parent(struct slab_parent_pool *parent); -void slab_create_child(struct slab_child_pool *pool, - struct slab_parent_pool *parent); -void slab_destroy_child(struct slab_child_pool *pool); -void *slab_alloc(struct slab_child_pool *pool); -void *slab_zalloc(struct slab_child_pool *pool); -void slab_free(struct slab_child_pool *pool, void *ptr); - -struct slab_mempool { - struct slab_parent_pool parent; - struct slab_child_pool child; -}; - -void slab_create(struct slab_mempool *mempool, - unsigned item_size, - unsigned num_items); -void slab_destroy(struct slab_mempool *mempool); -void *slab_alloc_st(struct slab_mempool *mempool); -void slab_free_st(struct slab_mempool *mempool, void *ptr); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/softfloat.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/softfloat.c deleted file mode 100644 index 2ff835f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/softfloat.c +++ /dev/null @@ -1,1483 +0,0 @@ -/* - * License for Berkeley SoftFloat Release 3e - * - * John R. Hauser - * 2018 January 20 - * - * The following applies to the whole of SoftFloat Release 3e as well as to - * each source file individually. - * - * Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the - * University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions, and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions, and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * - * The functions listed in this file are modified versions of the ones - * from the Berkeley SoftFloat 3e Library. - * - * Their implementation correctness has been checked with the Berkeley - * TestFloat Release 3e tool for x86_64. - */ - -#include "rounding.h" -#include "bitscan.h" -#include "softfloat.h" - -#if defined(BIG_ENDIAN) -#define word_incr -1 -#define index_word(total, n) ((total) - 1 - (n)) -#define index_word_hi(total) 0 -#define index_word_lo(total) ((total) - 1) -#define index_multiword_hi(total, n) 0 -#define index_multiword_lo(total, n) ((total) - (n)) -#define index_multiword_hi_but(total, n) 0 -#define index_multiword_lo_but(total, n) (n) -#else -#define word_incr 1 -#define index_word(total, n) (n) -#define index_word_hi(total) ((total) - 1) -#define index_word_lo(total) 0 -#define index_multiword_hi(total, n) ((total) - (n)) -#define index_multiword_lo(total, n) 0 -#define index_multiword_hi_but(total, n) (n) -#define index_multiword_lo_but(total, n) 0 -#endif - -typedef union { double f; int64_t i; uint64_t u; } di_type; -typedef union { float f; int32_t i; uint32_t u; } fi_type; - -const uint8_t count_leading_zeros8[256] = { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/** - * \brief Shifts 'a' right by the number of bits given in 'dist', which must be in - * the range 1 to 63. If any nonzero bits are shifted off, they are "jammed" - * into the least-significant bit of the shifted value by setting the - * least-significant bit to 1. This shifted-and-jammed value is returned. - * - * From softfloat_shortShiftRightJam64() - */ -static inline -uint64_t _mesa_short_shift_right_jam64(uint64_t a, uint8_t dist) -{ - return a >> dist | ((a & (((uint64_t) 1 << dist) - 1)) != 0); -} - -/** - * \brief Shifts 'a' right by the number of bits given in 'dist', which must not - * be zero. If any nonzero bits are shifted off, they are "jammed" into the - * least-significant bit of the shifted value by setting the least-significant - * bit to 1. This shifted-and-jammed value is returned. - * The value of 'dist' can be arbitrarily large. In particular, if 'dist' is - * greater than 64, the result will be either 0 or 1, depending on whether 'a' - * is zero or nonzero. - * - * From softfloat_shiftRightJam64() - */ -static inline -uint64_t _mesa_shift_right_jam64(uint64_t a, uint32_t dist) -{ - return - (dist < 63) ? a >> dist | ((uint64_t) (a << (-dist & 63)) != 0) : (a != 0); -} - -/** - * \brief Shifts 'a' right by the number of bits given in 'dist', which must not be - * zero. If any nonzero bits are shifted off, they are "jammed" into the - * least-significant bit of the shifted value by setting the least-significant - * bit to 1. This shifted-and-jammed value is returned. - * The value of 'dist' can be arbitrarily large. In particular, if 'dist' is - * greater than 32, the result will be either 0 or 1, depending on whether 'a' - * is zero or nonzero. - * - * From softfloat_shiftRightJam32() - */ -static inline -uint32_t _mesa_shift_right_jam32(uint32_t a, uint16_t dist) -{ - return - (dist < 31) ? a >> dist | ((uint32_t) (a << (-dist & 31)) != 0) : (a != 0); -} - -/** - * \brief Extracted from softfloat_roundPackToF64() - */ -static inline -double _mesa_roundtozero_f64(int64_t s, int64_t e, int64_t m) -{ - di_type result; - - if ((uint64_t) e >= 0x7fd) { - if (e < 0) { - m = _mesa_shift_right_jam64(m, -e); - e = 0; - } else if ((e > 0x7fd) || (0x8000000000000000 <= m)) { - e = 0x7ff; - m = 0; - result.u = (s << 63) + (e << 52) + m; - result.u -= 1; - return result.f; - } - } - - m >>= 10; - if (m == 0) - e = 0; - - result.u = (s << 63) + (e << 52) + m; - return result.f; -} - -/** - * \brief Extracted from softfloat_roundPackToF32() - */ -static inline -float _mesa_round_f32(int32_t s, int32_t e, int32_t m, bool rtz) -{ - fi_type result; - uint8_t round_increment = rtz ? 0 : 0x40; - - if ((uint32_t) e >= 0xfd) { - if (e < 0) { - m = _mesa_shift_right_jam32(m, -e); - e = 0; - } else if ((e > 0xfd) || (0x80000000 <= m + round_increment)) { - e = 0xff; - m = 0; - result.u = (s << 31) + (e << 23) + m; - result.u -= !round_increment; - return result.f; - } - } - - uint8_t round_bits; - round_bits = m & 0x7f; - m = ((uint32_t) m + round_increment) >> 7; - m &= ~(uint32_t) (! (round_bits ^ 0x40) & !rtz); - if (m == 0) - e = 0; - - result.u = (s << 31) + (e << 23) + m; - return result.f; -} - -/** - * \brief Extracted from softfloat_roundPackToF16() - */ -static inline -uint16_t _mesa_roundtozero_f16(int16_t s, int16_t e, int16_t m) -{ - if ((uint16_t) e >= 0x1d) { - if (e < 0) { - m = _mesa_shift_right_jam32(m, -e); - e = 0; - } else if (e > 0x1d) { - e = 0x1f; - m = 0; - return (s << 15) + (e << 10) + m - 1; - } - } - - m >>= 4; - if (m == 0) - e = 0; - - return (s << 15) + (e << 10) + m; -} - -/** - * \brief Shifts the N-bit unsigned integer pointed to by 'a' left by the number of - * bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' - * must be in the range 1 to 31. Any nonzero bits shifted off are lost. The - * shifted N-bit result is stored at the location pointed to by 'm_out'. Each - * of 'a' and 'm_out' points to a 'size_words'-long array of 32-bit elements - * that concatenate in the platform's normal endian order to form an N-bit - * integer. - * - * From softfloat_shortShiftLeftM() - */ -static inline void -_mesa_short_shift_left_m(uint8_t size_words, const uint32_t *a, uint8_t dist, uint32_t *m_out) -{ - uint8_t neg_dist; - unsigned index, last_index; - uint32_t part_word, a_word; - - neg_dist = -dist; - index = index_word_hi(size_words); - last_index = index_word_lo(size_words); - part_word = a[index] << dist; - while (index != last_index) { - a_word = a[index - word_incr]; - m_out[index] = part_word | a_word >> (neg_dist & 31); - index -= word_incr; - part_word = a_word << dist; - } - m_out[index] = part_word; -} - -/** - * \brief Shifts the N-bit unsigned integer pointed to by 'a' left by the number of - * bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' - * must not be zero. Any nonzero bits shifted off are lost. The shifted - * N-bit result is stored at the location pointed to by 'm_out'. Each of 'a' - * and 'm_out' points to a 'size_words'-long array of 32-bit elements that - * concatenate in the platform's normal endian order to form an N-bit - * integer. The value of 'dist' can be arbitrarily large. In particular, if - * 'dist' is greater than N, the stored result will be 0. - * - * From softfloat_shiftLeftM() - */ -static inline void -_mesa_shift_left_m(uint8_t size_words, const uint32_t *a, uint32_t dist, uint32_t *m_out) -{ - uint32_t word_dist; - uint8_t inner_dist; - uint8_t i; - - word_dist = dist >> 5; - if (word_dist < size_words) { - a += index_multiword_lo_but(size_words, word_dist); - inner_dist = dist & 31; - if (inner_dist) { - _mesa_short_shift_left_m(size_words - word_dist, a, inner_dist, - m_out + index_multiword_hi_but(size_words, word_dist)); - if (!word_dist) - return; - } else { - uint32_t *dest = m_out + index_word_hi(size_words); - a += index_word_hi(size_words - word_dist); - for (i = size_words - word_dist; i; --i) { - *dest = *a; - a -= word_incr; - dest -= word_incr; - } - } - m_out += index_multiword_lo(size_words, word_dist); - } else { - word_dist = size_words; - } - do { - *m_out++ = 0; - --word_dist; - } while (word_dist); -} - -/** - * \brief Shifts the N-bit unsigned integer pointed to by 'a' right by the number of - * bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' - * must be in the range 1 to 31. Any nonzero bits shifted off are lost. The - * shifted N-bit result is stored at the location pointed to by 'm_out'. Each - * of 'a' and 'm_out' points to a 'size_words'-long array of 32-bit elements - * that concatenate in the platform's normal endian order to form an N-bit - * integer. - * - * From softfloat_shortShiftRightM() - */ -static inline void -_mesa_short_shift_right_m(uint8_t size_words, const uint32_t *a, uint8_t dist, uint32_t *m_out) -{ - uint8_t neg_dist; - unsigned index, last_index; - uint32_t part_word, a_word; - - neg_dist = -dist; - index = index_word_lo(size_words); - last_index = index_word_hi(size_words); - part_word = a[index] >> dist; - while (index != last_index) { - a_word = a[index + word_incr]; - m_out[index] = a_word << (neg_dist & 31) | part_word; - index += word_incr; - part_word = a_word >> dist; - } - m_out[index] = part_word; -} - -/** - * \brief Shifts the N-bit unsigned integer pointed to by 'a' right by the number of - * bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' - * must be in the range 1 to 31. If any nonzero bits are shifted off, they - * are "jammed" into the least-significant bit of the shifted value by setting - * the least-significant bit to 1. This shifted-and-jammed N-bit result is - * stored at the location pointed to by 'm_out'. Each of 'a' and 'm_out' - * points to a 'size_words'-long array of 32-bit elements that concatenate in - * the platform's normal endian order to form an N-bit integer. - * - * - * From softfloat_shortShiftRightJamM() - */ -static inline void -_mesa_short_shift_right_jam_m(uint8_t size_words, const uint32_t *a, uint8_t dist, uint32_t *m_out) -{ - uint8_t neg_dist; - unsigned index, last_index; - uint64_t part_word, a_word; - - neg_dist = -dist; - index = index_word_lo(size_words); - last_index = index_word_hi(size_words); - a_word = a[index]; - part_word = a_word >> dist; - if (part_word << dist != a_word ) - part_word |= 1; - while (index != last_index) { - a_word = a[index + word_incr]; - m_out[index] = a_word << (neg_dist & 31) | part_word; - index += word_incr; - part_word = a_word >> dist; - } - m_out[index] = part_word; -} - -/** - * \brief Shifts the N-bit unsigned integer pointed to by 'a' right by the number of - * bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' - * must not be zero. If any nonzero bits are shifted off, they are "jammed" - * into the least-significant bit of the shifted value by setting the - * least-significant bit to 1. This shifted-and-jammed N-bit result is stored - * at the location pointed to by 'm_out'. Each of 'a' and 'm_out' points to a - * 'size_words'-long array of 32-bit elements that concatenate in the - * platform's normal endian order to form an N-bit integer. The value of - * 'dist' can be arbitrarily large. In particular, if 'dist' is greater than - * N, the stored result will be either 0 or 1, depending on whether the - * original N bits are all zeros. - * - * From softfloat_shiftRightJamM() - */ -static inline void -_mesa_shift_right_jam_m(uint8_t size_words, const uint32_t *a, uint32_t dist, uint32_t *m_out) -{ - uint32_t word_jam, word_dist, *tmp; - uint8_t i, inner_dist; - - word_jam = 0; - word_dist = dist >> 5; - tmp = NULL; - if (word_dist) { - if (size_words < word_dist) - word_dist = size_words; - tmp = (uint32_t *) (a + index_multiword_lo(size_words, word_dist)); - i = word_dist; - do { - word_jam = *tmp++; - if (word_jam) - break; - --i; - } while (i); - tmp = m_out; - } - if (word_dist < size_words) { - a += index_multiword_hi_but(size_words, word_dist); - inner_dist = dist & 31; - if (inner_dist) { - _mesa_short_shift_right_jam_m(size_words - word_dist, a, inner_dist, - m_out + index_multiword_lo_but(size_words, word_dist)); - if (!word_dist) { - if (word_jam) - m_out[index_word_lo(size_words)] |= 1; - return; - } - } else { - a += index_word_lo(size_words - word_dist); - tmp = m_out + index_word_lo(size_words); - for (i = size_words - word_dist; i; --i) { - *tmp = *a; - a += word_incr; - tmp += word_incr; - } - } - tmp = m_out + index_multiword_hi(size_words, word_dist); - } - if (tmp) { - do { - *tmp++ = 0; - --word_dist; - } while (word_dist); - } - if (word_jam) - m_out[index_word_lo(size_words)] |= 1; -} - -/** - * \brief Calculate a + b but rounding to zero. - * - * Notice that this mainly differs from the original Berkeley SoftFloat 3e - * implementation in that we don't really treat NaNs, Zeroes nor the - * signalling flags. Any NaN is good for us and the sign of the Zero is not - * important. - * - * From f64_add() - */ -double -_mesa_double_add_rtz(double a, double b) -{ - const di_type a_di = {a}; - uint64_t a_flt_m = a_di.u & 0x0fffffffffffff; - uint64_t a_flt_e = (a_di.u >> 52) & 0x7ff; - uint64_t a_flt_s = (a_di.u >> 63) & 0x1; - const di_type b_di = {b}; - uint64_t b_flt_m = b_di.u & 0x0fffffffffffff; - uint64_t b_flt_e = (b_di.u >> 52) & 0x7ff; - uint64_t b_flt_s = (b_di.u >> 63) & 0x1; - int64_t s, e, m = 0; - - s = a_flt_s; - - const int64_t exp_diff = a_flt_e - b_flt_e; - - /* Handle special cases */ - - if (a_flt_s != b_flt_s) { - return _mesa_double_sub_rtz(a, -b); - } else if ((a_flt_e == 0) && (a_flt_m == 0)) { - /* 'a' is zero, return 'b' */ - return b; - } else if ((b_flt_e == 0) && (b_flt_m == 0)) { - /* 'b' is zero, return 'a' */ - return a; - } else if (a_flt_e == 0x7ff && a_flt_m != 0) { - /* 'a' is a NaN, return NaN */ - return a; - } else if (b_flt_e == 0x7ff && b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } else if (a_flt_e == 0x7ff && a_flt_m == 0) { - /* Inf + x = Inf */ - return a; - } else if (b_flt_e == 0x7ff && b_flt_m == 0) { - /* x + Inf = Inf */ - return b; - } else if (exp_diff == 0 && a_flt_e == 0) { - di_type result_di; - result_di.u = a_di.u + b_flt_m; - return result_di.f; - } else if (exp_diff == 0) { - e = a_flt_e; - m = 0x0020000000000000 + a_flt_m + b_flt_m; - m <<= 9; - } else if (exp_diff < 0) { - a_flt_m <<= 9; - b_flt_m <<= 9; - e = b_flt_e; - - if (a_flt_e != 0) - a_flt_m += 0x2000000000000000; - else - a_flt_m <<= 1; - - a_flt_m = _mesa_shift_right_jam64(a_flt_m, -exp_diff); - m = 0x2000000000000000 + a_flt_m + b_flt_m; - if (m < 0x4000000000000000) { - --e; - m <<= 1; - } - } else { - a_flt_m <<= 9; - b_flt_m <<= 9; - e = a_flt_e; - - if (b_flt_e != 0) - b_flt_m += 0x2000000000000000; - else - b_flt_m <<= 1; - - b_flt_m = _mesa_shift_right_jam64(b_flt_m, exp_diff); - m = 0x2000000000000000 + a_flt_m + b_flt_m; - if (m < 0x4000000000000000) { - --e; - m <<= 1; - } - } - - return _mesa_roundtozero_f64(s, e, m); -} - -/** - * \brief Returns the number of leading 0 bits before the most-significant 1 bit of - * 'a'. If 'a' is zero, 64 is returned. - */ -static inline unsigned -_mesa_count_leading_zeros64(uint64_t a) -{ - return 64 - util_last_bit64(a); -} - -/** - * \brief Returns the number of leading 0 bits before the most-significant 1 bit of - * 'a'. If 'a' is zero, 32 is returned. - */ -static inline unsigned -_mesa_count_leading_zeros32(uint32_t a) -{ - return 32 - util_last_bit(a); -} - -static inline double -_mesa_norm_round_pack_f64(int64_t s, int64_t e, int64_t m) -{ - int8_t shift_dist; - - shift_dist = _mesa_count_leading_zeros64(m) - 1; - e -= shift_dist; - if ((10 <= shift_dist) && ((unsigned) e < 0x7fd)) { - di_type result; - result.u = (s << 63) + ((m ? e : 0) << 52) + (m << (shift_dist - 10)); - return result.f; - } else { - return _mesa_roundtozero_f64(s, e, m << shift_dist); - } -} - -/** - * \brief Replaces the N-bit unsigned integer pointed to by 'm_out' by the - * 2s-complement of itself, where N = 'size_words' * 32. Argument 'm_out' - * points to a 'size_words'-long array of 32-bit elements that concatenate in - * the platform's normal endian order to form an N-bit integer. - * - * From softfloat_negXM() - */ -static inline void -_mesa_neg_x_m(uint8_t size_words, uint32_t *m_out) -{ - unsigned index, last_index; - uint8_t carry; - uint32_t word; - - index = index_word_lo(size_words); - last_index = index_word_hi(size_words); - carry = 1; - for (;;) { - word = ~m_out[index] + carry; - m_out[index] = word; - if (index == last_index) - break; - index += word_incr; - if (word) - carry = 0; - } -} - -/** - * \brief Adds the two N-bit integers pointed to by 'a' and 'b', where N = - * 'size_words' * 32. The addition is modulo 2^N, so any carry out is - * lost. The N-bit sum is stored at the location pointed to by 'm_out'. Each - * of 'a', 'b', and 'm_out' points to a 'size_words'-long array of 32-bit - * elements that concatenate in the platform's normal endian order to form an - * N-bit integer. - * - * From softfloat_addM() - */ -static inline void -_mesa_add_m(uint8_t size_words, const uint32_t *a, const uint32_t *b, uint32_t *m_out) -{ - unsigned index, last_index; - uint8_t carry; - uint32_t a_word, word; - - index = index_word_lo(size_words); - last_index = index_word_hi(size_words); - carry = 0; - for (;;) { - a_word = a[index]; - word = a_word + b[index] + carry; - m_out[index] = word; - if (index == last_index) - break; - if (word != a_word) - carry = (word < a_word); - index += word_incr; - } -} - -/** - * \brief Subtracts the two N-bit integers pointed to by 'a' and 'b', where N = - * 'size_words' * 32. The subtraction is modulo 2^N, so any borrow out (carry - * out) is lost. The N-bit difference is stored at the location pointed to by - * 'm_out'. Each of 'a', 'b', and 'm_out' points to a 'size_words'-long array - * of 32-bit elements that concatenate in the platform's normal endian order - * to form an N-bit integer. - * - * From softfloat_subM() - */ -static inline void -_mesa_sub_m(uint8_t size_words, const uint32_t *a, const uint32_t *b, uint32_t *m_out) -{ - unsigned index, last_index; - uint8_t borrow; - uint32_t a_word, b_word; - - index = index_word_lo(size_words); - last_index = index_word_hi(size_words); - borrow = 0; - for (;;) { - a_word = a[index]; - b_word = b[index]; - m_out[index] = a_word - b_word - borrow; - if (index == last_index) - break; - borrow = borrow ? (a_word <= b_word) : (a_word < b_word); - index += word_incr; - } -} - -/* Calculate a - b but rounding to zero. - * - * Notice that this mainly differs from the original Berkeley SoftFloat 3e - * implementation in that we don't really treat NaNs, Zeroes nor the - * signalling flags. Any NaN is good for us and the sign of the Zero is not - * important. - * - * From f64_sub() - */ -double -_mesa_double_sub_rtz(double a, double b) -{ - const di_type a_di = {a}; - uint64_t a_flt_m = a_di.u & 0x0fffffffffffff; - uint64_t a_flt_e = (a_di.u >> 52) & 0x7ff; - uint64_t a_flt_s = (a_di.u >> 63) & 0x1; - const di_type b_di = {b}; - uint64_t b_flt_m = b_di.u & 0x0fffffffffffff; - uint64_t b_flt_e = (b_di.u >> 52) & 0x7ff; - uint64_t b_flt_s = (b_di.u >> 63) & 0x1; - int64_t s, e, m = 0; - int64_t m_diff = 0; - unsigned shift_dist = 0; - - s = a_flt_s; - - const int64_t exp_diff = a_flt_e - b_flt_e; - - /* Handle special cases */ - - if (a_flt_s != b_flt_s) { - return _mesa_double_add_rtz(a, -b); - } else if ((a_flt_e == 0) && (a_flt_m == 0)) { - /* 'a' is zero, return '-b' */ - return -b; - } else if ((b_flt_e == 0) && (b_flt_m == 0)) { - /* 'b' is zero, return 'a' */ - return a; - } else if (a_flt_e == 0x7ff && a_flt_m != 0) { - /* 'a' is a NaN, return NaN */ - return a; - } else if (b_flt_e == 0x7ff && b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } else if (a_flt_e == 0x7ff && a_flt_m == 0) { - if (b_flt_e == 0x7ff && b_flt_m == 0) { - /* Inf - Inf = NaN */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0x1; - return result.f; - } - /* Inf - x = Inf */ - return a; - } else if (b_flt_e == 0x7ff && b_flt_m == 0) { - /* x - Inf = -Inf */ - return -b; - } else if (exp_diff == 0) { - m_diff = a_flt_m - b_flt_m; - - if (m_diff == 0) - return 0; - if (a_flt_e) - --a_flt_e; - if (m_diff < 0) { - s = !s; - m_diff = -m_diff; - } - - shift_dist = _mesa_count_leading_zeros64(m_diff) - 11; - e = a_flt_e - shift_dist; - if (e < 0) { - shift_dist = a_flt_e; - e = 0; - } - - di_type result; - result.u = (s << 63) + (e << 52) + (m_diff << shift_dist); - return result.f; - } else if (exp_diff < 0) { - a_flt_m <<= 10; - b_flt_m <<= 10; - s = !s; - - a_flt_m += (a_flt_e) ? 0x4000000000000000 : a_flt_m; - a_flt_m = _mesa_shift_right_jam64(a_flt_m, -exp_diff); - b_flt_m |= 0x4000000000000000; - e = b_flt_e; - m = b_flt_m - a_flt_m; - } else { - a_flt_m <<= 10; - b_flt_m <<= 10; - - b_flt_m += (b_flt_e) ? 0x4000000000000000 : b_flt_m; - b_flt_m = _mesa_shift_right_jam64(b_flt_m, exp_diff); - a_flt_m |= 0x4000000000000000; - e = a_flt_e; - m = a_flt_m - b_flt_m; - } - - return _mesa_norm_round_pack_f64(s, e - 1, m); -} - -static inline void -_mesa_norm_subnormal_mantissa_f64(uint64_t m, uint64_t *exp, uint64_t *m_out) -{ - int shift_dist; - - shift_dist = _mesa_count_leading_zeros64(m) - 11; - *exp = 1 - shift_dist; - *m_out = m << shift_dist; -} - -static inline void -_mesa_norm_subnormal_mantissa_f32(uint32_t m, uint32_t *exp, uint32_t *m_out) -{ - int shift_dist; - - shift_dist = _mesa_count_leading_zeros32(m) - 8; - *exp = 1 - shift_dist; - *m_out = m << shift_dist; -} - -/** - * \brief Multiplies 'a' and 'b' and stores the 128-bit product at the location - * pointed to by 'zPtr'. Argument 'zPtr' points to an array of four 32-bit - * elements that concatenate in the platform's normal endian order to form a - * 128-bit integer. - * - * From softfloat_mul64To128M() - */ -static inline void -_mesa_softfloat_mul_f64_to_f128_m(uint64_t a, uint64_t b, uint32_t *m_out) -{ - uint32_t a32, a0, b32, b0; - uint64_t z0, mid1, z64, mid; - - a32 = a >> 32; - a0 = a; - b32 = b >> 32; - b0 = b; - z0 = (uint64_t) a0 * b0; - mid1 = (uint64_t) a32 * b0; - mid = mid1 + (uint64_t) a0 * b32; - z64 = (uint64_t) a32 * b32; - z64 += (uint64_t) (mid < mid1) << 32 | mid >> 32; - mid <<= 32; - z0 += mid; - m_out[index_word(4, 1)] = z0 >> 32; - m_out[index_word(4, 0)] = z0; - z64 += (z0 < mid); - m_out[index_word(4, 3)] = z64 >> 32; - m_out[index_word(4, 2)] = z64; -} - -/* Calculate a * b but rounding to zero. - * - * Notice that this mainly differs from the original Berkeley SoftFloat 3e - * implementation in that we don't really treat NaNs, Zeroes nor the - * signalling flags. Any NaN is good for us and the sign of the Zero is not - * important. - * - * From f64_mul() - */ -double -_mesa_double_mul_rtz(double a, double b) -{ - const di_type a_di = {a}; - uint64_t a_flt_m = a_di.u & 0x0fffffffffffff; - uint64_t a_flt_e = (a_di.u >> 52) & 0x7ff; - uint64_t a_flt_s = (a_di.u >> 63) & 0x1; - const di_type b_di = {b}; - uint64_t b_flt_m = b_di.u & 0x0fffffffffffff; - uint64_t b_flt_e = (b_di.u >> 52) & 0x7ff; - uint64_t b_flt_s = (b_di.u >> 63) & 0x1; - int64_t s, e, m = 0; - - s = a_flt_s ^ b_flt_s; - - if (a_flt_e == 0x7ff) { - if (a_flt_m != 0) { - /* 'a' is a NaN, return NaN */ - return a; - } else if (b_flt_e == 0x7ff && b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } - - if (!(b_flt_e | b_flt_m)) { - /* Inf * 0 = NaN */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0x1; - return result.f; - } - /* Inf * x = Inf */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0; - return result.f; - } - - if (b_flt_e == 0x7ff) { - if (b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } - if (!(a_flt_e | a_flt_m)) { - /* 0 * Inf = NaN */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0x1; - return result.f; - } - /* x * Inf = Inf */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0; - return result.f; - } - - if (a_flt_e == 0) { - if (a_flt_m == 0) { - /* 'a' is zero. Return zero */ - di_type result; - result.u = (s << 63) + 0; - return result.f; - } - _mesa_norm_subnormal_mantissa_f64(a_flt_m , &a_flt_e, &a_flt_m); - } - if (b_flt_e == 0) { - if (b_flt_m == 0) { - /* 'b' is zero. Return zero */ - di_type result; - result.u = (s << 63) + 0; - return result.f; - } - _mesa_norm_subnormal_mantissa_f64(b_flt_m , &b_flt_e, &b_flt_m); - } - - e = a_flt_e + b_flt_e - 0x3ff; - a_flt_m = (a_flt_m | 0x0010000000000000) << 10; - b_flt_m = (b_flt_m | 0x0010000000000000) << 11; - - uint32_t m_128[4]; - _mesa_softfloat_mul_f64_to_f128_m(a_flt_m, b_flt_m, m_128); - - m = (uint64_t) m_128[index_word(4, 3)] << 32 | m_128[index_word(4, 2)]; - if (m_128[index_word(4, 1)] || m_128[index_word(4, 0)]) - m |= 1; - - if (m < 0x4000000000000000) { - --e; - m <<= 1; - } - - return _mesa_roundtozero_f64(s, e, m); -} - - -/** - * \brief Calculate a * b + c but rounding to zero. - * - * Notice that this mainly differs from the original Berkeley SoftFloat 3e - * implementation in that we don't really treat NaNs, Zeroes nor the - * signalling flags. Any NaN is good for us and the sign of the Zero is not - * important. - * - * From f64_mulAdd() - */ -double -_mesa_double_fma_rtz(double a, double b, double c) -{ - const di_type a_di = {a}; - uint64_t a_flt_m = a_di.u & 0x0fffffffffffff; - uint64_t a_flt_e = (a_di.u >> 52) & 0x7ff; - uint64_t a_flt_s = (a_di.u >> 63) & 0x1; - const di_type b_di = {b}; - uint64_t b_flt_m = b_di.u & 0x0fffffffffffff; - uint64_t b_flt_e = (b_di.u >> 52) & 0x7ff; - uint64_t b_flt_s = (b_di.u >> 63) & 0x1; - const di_type c_di = {c}; - uint64_t c_flt_m = c_di.u & 0x0fffffffffffff; - uint64_t c_flt_e = (c_di.u >> 52) & 0x7ff; - uint64_t c_flt_s = (c_di.u >> 63) & 0x1; - int64_t s, e, m = 0; - - c_flt_s ^= 0; - s = a_flt_s ^ b_flt_s ^ 0; - - if (a_flt_e == 0x7ff) { - if (a_flt_m != 0) { - /* 'a' is a NaN, return NaN */ - return a; - } else if (b_flt_e == 0x7ff && b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } else if (c_flt_e == 0x7ff && c_flt_m != 0) { - /* 'c' is a NaN, return NaN */ - return c; - } - - if (!(b_flt_e | b_flt_m)) { - /* Inf * 0 + y = NaN */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0x1; - return result.f; - } - - if ((c_flt_e == 0x7ff && c_flt_m == 0) && (s != c_flt_s)) { - /* Inf * x - Inf = NaN */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0x1; - return result.f; - } - - /* Inf * x + y = Inf */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0; - return result.f; - } - - if (b_flt_e == 0x7ff) { - if (b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } else if (c_flt_e == 0x7ff && c_flt_m != 0) { - /* 'c' is a NaN, return NaN */ - return c; - } - - if (!(a_flt_e | a_flt_m)) { - /* 0 * Inf + y = NaN */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0x1; - return result.f; - } - - if ((c_flt_e == 0x7ff && c_flt_m == 0) && (s != c_flt_s)) { - /* x * Inf - Inf = NaN */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0x1; - return result.f; - } - - /* x * Inf + y = Inf */ - di_type result; - e = 0x7ff; - result.u = (s << 63) + (e << 52) + 0; - return result.f; - } - - if (c_flt_e == 0x7ff) { - if (c_flt_m != 0) { - /* 'c' is a NaN, return NaN */ - return c; - } - - /* x * y + Inf = Inf */ - return c; - } - - if (a_flt_e == 0) { - if (a_flt_m == 0) { - /* 'a' is zero, return 'c' */ - return c; - } - _mesa_norm_subnormal_mantissa_f64(a_flt_m , &a_flt_e, &a_flt_m); - } - - if (b_flt_e == 0) { - if (b_flt_m == 0) { - /* 'b' is zero, return 'c' */ - return c; - } - _mesa_norm_subnormal_mantissa_f64(b_flt_m , &b_flt_e, &b_flt_m); - } - - e = a_flt_e + b_flt_e - 0x3fe; - a_flt_m = (a_flt_m | 0x0010000000000000) << 10; - b_flt_m = (b_flt_m | 0x0010000000000000) << 11; - - uint32_t m_128[4]; - _mesa_softfloat_mul_f64_to_f128_m(a_flt_m, b_flt_m, m_128); - - m = (uint64_t) m_128[index_word(4, 3)] << 32 | m_128[index_word(4, 2)]; - - int64_t shift_dist = 0; - if (!(m & 0x4000000000000000)) { - --e; - shift_dist = -1; - } - - if (c_flt_e == 0) { - if (c_flt_m == 0) { - /* 'c' is zero, return 'a * b' */ - if (shift_dist) - m <<= 1; - - if (m_128[index_word(4, 1)] || m_128[index_word(4, 0)]) - m |= 1; - return _mesa_roundtozero_f64(s, e - 1, m); - } - _mesa_norm_subnormal_mantissa_f64(c_flt_m , &c_flt_e, &c_flt_m); - } - c_flt_m = (c_flt_m | 0x0010000000000000) << 10; - - uint32_t c_flt_m_128[4]; - int64_t exp_diff = e - c_flt_e; - if (exp_diff < 0) { - e = c_flt_e; - if ((s == c_flt_s) || (exp_diff < -1)) { - shift_dist -= exp_diff; - if (shift_dist) { - m = _mesa_shift_right_jam64(m, shift_dist); - } - } else { - if (!shift_dist) { - _mesa_short_shift_right_m(4, m_128, 1, m_128); - } - } - } else { - if (shift_dist) - _mesa_add_m(4, m_128, m_128, m_128); - if (!exp_diff) { - m = (uint64_t) m_128[index_word(4, 3)] << 32 - | m_128[index_word(4, 2)]; - } else { - c_flt_m_128[index_word(4, 3)] = c_flt_m >> 32; - c_flt_m_128[index_word(4, 2)] = c_flt_m; - c_flt_m_128[index_word(4, 1)] = 0; - c_flt_m_128[index_word(4, 0)] = 0; - _mesa_shift_right_jam_m(4, c_flt_m_128, exp_diff, c_flt_m_128); - } - } - - if (s == c_flt_s) { - if (exp_diff <= 0) { - m += c_flt_m; - } else { - _mesa_add_m(4, m_128, c_flt_m_128, m_128); - m = (uint64_t) m_128[index_word(4, 3)] << 32 - | m_128[index_word(4, 2)]; - } - if (m & 0x8000000000000000) { - e++; - m = _mesa_short_shift_right_jam64(m, 1); - } - } else { - if (exp_diff < 0) { - s = c_flt_s; - if (exp_diff < -1) { - m = c_flt_m - m; - if (m_128[index_word(4, 1)] || m_128[index_word(4, 0)]) { - m = (m - 1) | 1; - } - if (!(m & 0x4000000000000000)) { - --e; - m <<= 1; - } - return _mesa_roundtozero_f64(s, e - 1, m); - } else { - c_flt_m_128[index_word(4, 3)] = c_flt_m >> 32; - c_flt_m_128[index_word(4, 2)] = c_flt_m; - c_flt_m_128[index_word(4, 1)] = 0; - c_flt_m_128[index_word(4, 0)] = 0; - _mesa_sub_m(4, c_flt_m_128, m_128, m_128); - } - } else if (!exp_diff) { - m -= c_flt_m; - if (!m && !m_128[index_word(4, 1)] && !m_128[index_word(4, 0)]) { - /* Return zero */ - di_type result; - result.u = (s << 63) + 0; - return result.f; - } - m_128[index_word(4, 3)] = m >> 32; - m_128[index_word(4, 2)] = m; - if (m & 0x8000000000000000) { - s = !s; - _mesa_neg_x_m(4, m_128); - } - } else { - _mesa_sub_m(4, m_128, c_flt_m_128, m_128); - if (1 < exp_diff) { - m = (uint64_t) m_128[index_word(4, 3)] << 32 - | m_128[index_word(4, 2)]; - if (!(m & 0x4000000000000000)) { - --e; - m <<= 1; - } - if (m_128[index_word(4, 1)] || m_128[index_word(4, 0)]) - m |= 1; - return _mesa_roundtozero_f64(s, e - 1, m); - } - } - - shift_dist = 0; - m = (uint64_t) m_128[index_word(4, 3)] << 32 - | m_128[index_word(4, 2)]; - if (!m) { - shift_dist = 64; - m = (uint64_t) m_128[index_word(4, 1)] << 32 - | m_128[index_word(4, 0)]; - } - shift_dist += _mesa_count_leading_zeros64(m) - 1; - if (shift_dist) { - e -= shift_dist; - _mesa_shift_left_m(4, m_128, shift_dist, m_128); - m = (uint64_t) m_128[index_word(4, 3)] << 32 - | m_128[index_word(4, 2)]; - } - } - - if (m_128[index_word(4, 1)] || m_128[index_word(4, 0)]) - m |= 1; - return _mesa_roundtozero_f64(s, e - 1, m); -} - - -/** - * \brief Calculate a * b + c but rounding to zero. - * - * Notice that this mainly differs from the original Berkeley SoftFloat 3e - * implementation in that we don't really treat NaNs, Zeroes nor the - * signalling flags. Any NaN is good for us and the sign of the Zero is not - * important. - * - * From f32_mulAdd() - */ -float -_mesa_float_fma_rtz(float a, float b, float c) -{ - const fi_type a_fi = {a}; - uint32_t a_flt_m = a_fi.u & 0x07fffff; - uint32_t a_flt_e = (a_fi.u >> 23) & 0xff; - uint32_t a_flt_s = (a_fi.u >> 31) & 0x1; - const fi_type b_fi = {b}; - uint32_t b_flt_m = b_fi.u & 0x07fffff; - uint32_t b_flt_e = (b_fi.u >> 23) & 0xff; - uint32_t b_flt_s = (b_fi.u >> 31) & 0x1; - const fi_type c_fi = {c}; - uint32_t c_flt_m = c_fi.u & 0x07fffff; - uint32_t c_flt_e = (c_fi.u >> 23) & 0xff; - uint32_t c_flt_s = (c_fi.u >> 31) & 0x1; - int32_t s, e, m = 0; - - c_flt_s ^= 0; - s = a_flt_s ^ b_flt_s ^ 0; - - if (a_flt_e == 0xff) { - if (a_flt_m != 0) { - /* 'a' is a NaN, return NaN */ - return a; - } else if (b_flt_e == 0xff && b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } else if (c_flt_e == 0xff && c_flt_m != 0) { - /* 'c' is a NaN, return NaN */ - return c; - } - - if (!(b_flt_e | b_flt_m)) { - /* Inf * 0 + y = NaN */ - fi_type result; - e = 0xff; - result.u = (s << 31) + (e << 23) + 0x1; - return result.f; - } - - if ((c_flt_e == 0xff && c_flt_m == 0) && (s != c_flt_s)) { - /* Inf * x - Inf = NaN */ - fi_type result; - e = 0xff; - result.u = (s << 31) + (e << 23) + 0x1; - return result.f; - } - - /* Inf * x + y = Inf */ - fi_type result; - e = 0xff; - result.u = (s << 31) + (e << 23) + 0; - return result.f; - } - - if (b_flt_e == 0xff) { - if (b_flt_m != 0) { - /* 'b' is a NaN, return NaN */ - return b; - } else if (c_flt_e == 0xff && c_flt_m != 0) { - /* 'c' is a NaN, return NaN */ - return c; - } - - if (!(a_flt_e | a_flt_m)) { - /* 0 * Inf + y = NaN */ - fi_type result; - e = 0xff; - result.u = (s << 31) + (e << 23) + 0x1; - return result.f; - } - - if ((c_flt_e == 0xff && c_flt_m == 0) && (s != c_flt_s)) { - /* x * Inf - Inf = NaN */ - fi_type result; - e = 0xff; - result.u = (s << 31) + (e << 23) + 0x1; - return result.f; - } - - /* x * Inf + y = Inf */ - fi_type result; - e = 0xff; - result.u = (s << 31) + (e << 23) + 0; - return result.f; - } - - if (c_flt_e == 0xff) { - if (c_flt_m != 0) { - /* 'c' is a NaN, return NaN */ - return c; - } - - /* x * y + Inf = Inf */ - return c; - } - - if (a_flt_e == 0) { - if (a_flt_m == 0) { - /* 'a' is zero, return 'c' */ - return c; - } - _mesa_norm_subnormal_mantissa_f32(a_flt_m , &a_flt_e, &a_flt_m); - } - - if (b_flt_e == 0) { - if (b_flt_m == 0) { - /* 'b' is zero, return 'c' */ - return c; - } - _mesa_norm_subnormal_mantissa_f32(b_flt_m , &b_flt_e, &b_flt_m); - } - - e = a_flt_e + b_flt_e - 0x7e; - a_flt_m = (a_flt_m | 0x00800000) << 7; - b_flt_m = (b_flt_m | 0x00800000) << 7; - - uint64_t m_64 = (uint64_t) a_flt_m * b_flt_m; - if (m_64 < 0x2000000000000000) { - --e; - m_64 <<= 1; - } - - if (c_flt_e == 0) { - if (c_flt_m == 0) { - /* 'c' is zero, return 'a * b' */ - m = _mesa_short_shift_right_jam64(m_64, 31); - return _mesa_round_f32(s, e - 1, m, true); - } - _mesa_norm_subnormal_mantissa_f32(c_flt_m , &c_flt_e, &c_flt_m); - } - c_flt_m = (c_flt_m | 0x00800000) << 6; - - int16_t exp_diff = e - c_flt_e; - if (s == c_flt_s) { - if (exp_diff <= 0) { - e = c_flt_e; - m = c_flt_m + _mesa_shift_right_jam64(m_64, 32 - exp_diff); - } else { - m_64 += _mesa_shift_right_jam64((uint64_t) c_flt_m << 32, exp_diff); - m = _mesa_short_shift_right_jam64(m_64, 32); - } - if (m < 0x40000000) { - --e; - m <<= 1; - } - } else { - uint64_t c_flt_m_64 = (uint64_t) c_flt_m << 32; - if (exp_diff < 0) { - s = c_flt_s; - e = c_flt_e; - m_64 = c_flt_m_64 - _mesa_shift_right_jam64(m_64, -exp_diff); - } else if (!exp_diff) { - m_64 -= c_flt_m_64; - if (!m_64) { - /* Return zero */ - fi_type result; - result.u = (s << 31) + 0; - return result.f; - } - if (m_64 & 0x8000000000000000) { - s = !s; - m_64 = -m_64; - } - } else { - m_64 -= _mesa_shift_right_jam64(c_flt_m_64, exp_diff); - } - int8_t shift_dist = _mesa_count_leading_zeros64(m_64) - 1; - e -= shift_dist; - shift_dist -= 32; - if (shift_dist < 0) { - m = _mesa_short_shift_right_jam64(m_64, -shift_dist); - } else { - m = (uint32_t) m_64 << shift_dist; - } - } - - return _mesa_round_f32(s, e, m, true); -} - - -/** - * \brief Converts from 64bits to 32bits float and rounds according to - * instructed. - * - * From f64_to_f32() - */ -float -_mesa_double_to_f32(double val, bool rtz) -{ - const di_type di = {val}; - uint64_t flt_m = di.u & 0x0fffffffffffff; - uint64_t flt_e = (di.u >> 52) & 0x7ff; - uint64_t flt_s = (di.u >> 63) & 0x1; - int32_t s, e, m = 0; - - s = flt_s; - - if (flt_e == 0x7ff) { - if (flt_m != 0) { - /* 'val' is a NaN, return NaN */ - fi_type result; - e = 0xff; - m = 0x1; - result.u = (s << 31) + (e << 23) + m; - return result.f; - } - - /* 'val' is Inf, return Inf */ - fi_type result; - e = 0xff; - result.u = (s << 31) + (e << 23) + m; - return result.f; - } - - if (!(flt_e | flt_m)) { - /* 'val' is zero, return zero */ - fi_type result; - e = 0; - result.u = (s << 31) + (e << 23) + m; - return result.f; - } - - m = _mesa_short_shift_right_jam64(flt_m, 22); - if ( ! (flt_e | m) ) { - /* 'val' is denorm, return zero */ - fi_type result; - e = 0; - result.u = (s << 31) + (e << 23) + m; - return result.f; - } - - return _mesa_round_f32(s, flt_e - 0x381, m | 0x40000000, rtz); -} - - -/** - * \brief Converts from 32bits to 16bits float and rounds the result to zero. - * - * From f32_to_f16() - */ -uint16_t -_mesa_float_to_half_rtz_slow(float val) -{ - const fi_type fi = {val}; - const uint32_t flt_m = fi.u & 0x7fffff; - const uint32_t flt_e = (fi.u >> 23) & 0xff; - const uint32_t flt_s = (fi.u >> 31) & 0x1; - int16_t s, e, m = 0; - - s = flt_s; - - if (flt_e == 0xff) { - if (flt_m != 0) { - /* 'val' is a NaN, return NaN */ - e = 0x1f; - /* Retain the top bits of a NaN to make sure that the quiet/signaling - * status stays the same. - */ - m = flt_m >> 13; - if (!m) - m = 1; - return (s << 15) + (e << 10) + m; - } - - /* 'val' is Inf, return Inf */ - e = 0x1f; - return (s << 15) + (e << 10) + m; - } - - if (!(flt_e | flt_m)) { - /* 'val' is zero, return zero */ - e = 0; - return (s << 15) + (e << 10) + m; - } - - m = flt_m >> 9 | ((flt_m & 0x1ff) != 0); - if ( ! (flt_e | m) ) { - /* 'val' is denorm, return zero */ - e = 0; - return (s << 15) + (e << 10) + m; - } - - return _mesa_roundtozero_f16(s, flt_e - 0x71, m | 0x4000); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/softfloat.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/softfloat.h deleted file mode 100644 index 2e254e2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/softfloat.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * License for Berkeley SoftFloat Release 3e - * - * John R. Hauser - * 2018 January 20 - * - * The following applies to the whole of SoftFloat Release 3e as well as to - * each source file individually. - * - * Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the - * University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions, and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions, and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE - * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * - * The functions listed in this file are modified versions of the ones - * from the Berkeley SoftFloat 3e Library. - */ - -#ifndef _SOFTFLOAT_H_ -#define _SOFTFLOAT_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -double _mesa_double_add_rtz(double a, double b); -double _mesa_double_sub_rtz(double a, double b); -double _mesa_double_mul_rtz(double a, double b); -double _mesa_double_fma_rtz(double a, double b, double c); -float _mesa_float_fma_rtz(float a, float b, float c); -float _mesa_double_to_f32(double x, bool rtz); -uint16_t _mesa_float_to_half_rtz_slow(float x); - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* _SOFTFLOAT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sparse_array.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sparse_array.c deleted file mode 100644 index f5b7855..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sparse_array.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "sparse_array.h" -#include "os_memory.h" - -/* Aligning our allocations to 64 has two advantages: - * - * 1. On x86 platforms, it means that they are cache-line aligned so we - * reduce the likelihood that one of our allocations shares a cache line - * with some other allocation. - * - * 2. It lets us use the bottom 6 bits of the pointer to store the tree level - * of the node so we can avoid some pointer indirections. - */ -#define NODE_ALLOC_ALIGN 64 - -void -util_sparse_array_init(struct util_sparse_array *arr, - size_t elem_size, size_t node_size) -{ - memset(arr, 0, sizeof(*arr)); - arr->elem_size = elem_size; - arr->node_size_log2 = util_logbase2_64(node_size); - assert(node_size >= 2 && node_size == (1ull << arr->node_size_log2)); -} - -#define NODE_PTR_MASK (~((uintptr_t)NODE_ALLOC_ALIGN - 1)) -#define NODE_LEVEL_MASK ((uintptr_t)NODE_ALLOC_ALIGN - 1) -#define NULL_NODE 0 - -static inline uintptr_t -_util_sparse_array_node(void *data, unsigned level) -{ - assert(data != NULL); - assert(((uintptr_t)data & NODE_LEVEL_MASK) == 0); - assert((level & NODE_PTR_MASK) == 0); - return (uintptr_t)data | level; -} - -static inline void * -_util_sparse_array_node_data(uintptr_t handle) -{ - return (void *)(handle & NODE_PTR_MASK); -} - -static inline unsigned -_util_sparse_array_node_level(uintptr_t handle) -{ - return handle & NODE_LEVEL_MASK; -} - -static inline void -_util_sparse_array_node_finish(struct util_sparse_array *arr, - uintptr_t node) -{ - if (_util_sparse_array_node_level(node) > 0) { - uintptr_t *children = _util_sparse_array_node_data(node); - size_t node_size = 1ull << arr->node_size_log2; - for (size_t i = 0; i < node_size; i++) { - if (children[i]) - _util_sparse_array_node_finish(arr, children[i]); - } - } - - os_free_aligned(_util_sparse_array_node_data(node)); -} - -void -util_sparse_array_finish(struct util_sparse_array *arr) -{ - if (arr->root) - _util_sparse_array_node_finish(arr, arr->root); -} - -static inline uintptr_t -_util_sparse_array_node_alloc(struct util_sparse_array *arr, - unsigned level) -{ - size_t size; - if (level == 0) { - size = arr->elem_size << arr->node_size_log2; - } else { - size = sizeof(uintptr_t) << arr->node_size_log2; - } - - void *data = os_malloc_aligned(size, NODE_ALLOC_ALIGN); - memset(data, 0, size); - - return _util_sparse_array_node(data, level); -} - -static inline uintptr_t -_util_sparse_array_set_or_free_node(uintptr_t *node_ptr, - uintptr_t cmp_node, - uintptr_t node) -{ - uintptr_t prev_node = p_atomic_cmpxchg(node_ptr, cmp_node, node); - - if (prev_node != cmp_node) { - /* We lost the race. Free this one and return the one that was already - * allocated. - */ - os_free_aligned(_util_sparse_array_node_data(node)); - return prev_node; - } else { - return node; - } -} - -void * -util_sparse_array_get(struct util_sparse_array *arr, uint64_t idx) -{ - const unsigned node_size_log2 = arr->node_size_log2; - uintptr_t root = p_atomic_read(&arr->root); - if (unlikely(!root)) { - unsigned root_level = 0; - uint64_t idx_iter = idx >> node_size_log2; - while (idx_iter) { - idx_iter >>= node_size_log2; - root_level++; - } - uintptr_t new_root = _util_sparse_array_node_alloc(arr, root_level); - root = _util_sparse_array_set_or_free_node(&arr->root, - NULL_NODE, new_root); - } - - while (1) { - unsigned root_level = _util_sparse_array_node_level(root); - uint64_t root_idx = idx >> (root_level * node_size_log2); - if (likely(root_idx < (1ull << node_size_log2))) - break; - - /* In this case, we have a root but its level is low enough that the - * requested index is out-of-bounds. - */ - uintptr_t new_root = _util_sparse_array_node_alloc(arr, root_level + 1); - - uintptr_t *new_root_children = _util_sparse_array_node_data(new_root); - new_root_children[0] = root; - - /* We only add one at a time instead of the whole tree because it's - * easier to ensure correctness of both the tree building and the - * clean-up path. Because we're only adding one node we never have to - * worry about trying to free multiple things without freeing the old - * things. - */ - root = _util_sparse_array_set_or_free_node(&arr->root, root, new_root); - } - - void *node_data = _util_sparse_array_node_data(root); - unsigned node_level = _util_sparse_array_node_level(root); - while (node_level > 0) { - uint64_t child_idx = (idx >> (node_level * node_size_log2)) & - ((1ull << node_size_log2) - 1); - - uintptr_t *children = node_data; - uintptr_t child = p_atomic_read(&children[child_idx]); - - if (unlikely(!child)) { - child = _util_sparse_array_node_alloc(arr, node_level - 1); - child = _util_sparse_array_set_or_free_node(&children[child_idx], - NULL_NODE, child); - } - - node_data = _util_sparse_array_node_data(child); - node_level = _util_sparse_array_node_level(child); - } - - uint64_t elem_idx = idx & ((1ull << node_size_log2) - 1); - return (void *)((char *)node_data + (elem_idx * arr->elem_size)); -} - -static void -validate_node_level(struct util_sparse_array *arr, - uintptr_t node, unsigned level) -{ - assert(_util_sparse_array_node_level(node) == level); - - if (_util_sparse_array_node_level(node) > 0) { - uintptr_t *children = _util_sparse_array_node_data(node); - size_t node_size = 1ull << arr->node_size_log2; - for (size_t i = 0; i < node_size; i++) { - if (children[i]) - validate_node_level(arr, children[i], level - 1); - } - } -} - -void -util_sparse_array_validate(struct util_sparse_array *arr) -{ - uintptr_t root = p_atomic_read(&arr->root); - validate_node_level(arr, root, _util_sparse_array_node_level(root)); -} - -void -util_sparse_array_free_list_init(struct util_sparse_array_free_list *fl, - struct util_sparse_array *arr, - uint32_t sentinel, - uint32_t next_offset) -{ - fl->head = sentinel; - fl->arr = arr; - fl->sentinel = sentinel; - fl->next_offset = next_offset; -} - -static uint64_t -free_list_head(uint64_t old, uint32_t next) -{ - return ((old & 0xffffffff00000000ull) + 0x100000000ull) | next; -} - -void -util_sparse_array_free_list_push(struct util_sparse_array_free_list *fl, - uint32_t *items, unsigned num_items) -{ - assert(num_items > 0); - assert(items[0] != fl->sentinel); - void *last_elem = util_sparse_array_get(fl->arr, items[0]); - uint32_t *last_next = (uint32_t *)((char *)last_elem + fl->next_offset); - for (unsigned i = 1; i < num_items; i++) { - p_atomic_set(last_next, items[i]); - assert(items[i] != fl->sentinel); - last_elem = util_sparse_array_get(fl->arr, items[i]); - last_next = (uint32_t *)((char *)last_elem + fl->next_offset); - } - - uint64_t current_head, old_head; - old_head = p_atomic_read(&fl->head); - do { - current_head = old_head; - p_atomic_set(last_next, (uint32_t)current_head); /* Index is the bottom 32 bits */ - uint64_t new_head = free_list_head(current_head, items[0]); - old_head = p_atomic_cmpxchg(&fl->head, current_head, new_head); - } while (old_head != current_head); -} - -uint32_t -util_sparse_array_free_list_pop_idx(struct util_sparse_array_free_list *fl) -{ - uint64_t current_head; - - current_head = p_atomic_read(&fl->head); - while (1) { - if ((uint32_t)current_head == fl->sentinel) - return fl->sentinel; - - uint32_t head_idx = current_head; /* Index is the bottom 32 bits */ - void *head_elem = util_sparse_array_get(fl->arr, head_idx); - uint32_t *head_next = (uint32_t *)((char *)head_elem + fl->next_offset); - uint64_t new_head = free_list_head(current_head, p_atomic_read(head_next)); - uint64_t old_head = p_atomic_cmpxchg(&fl->head, current_head, new_head); - if (old_head == current_head) - return head_idx; - current_head = old_head; - } -} - -void * -util_sparse_array_free_list_pop_elem(struct util_sparse_array_free_list *fl) -{ - uint64_t current_head; - - current_head = p_atomic_read(&fl->head); - while (1) { - if ((uint32_t)current_head == fl->sentinel) - return NULL; - - uint32_t head_idx = current_head; /* Index is the bottom 32 bits */ - void *head_elem = util_sparse_array_get(fl->arr, head_idx); - uint32_t *head_next = (uint32_t *)((char *)head_elem + fl->next_offset); - uint64_t new_head = free_list_head(current_head, p_atomic_read(head_next)); - uint64_t old_head = p_atomic_cmpxchg(&fl->head, current_head, new_head); - if (old_head == current_head) - return head_elem; - current_head = old_head; - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sparse_array.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sparse_array.h deleted file mode 100644 index 6989e55..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/sparse_array.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright © 2019 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _UTIL_SPARSE_ARRAY_H -#define _UTIL_SPARSE_ARRAY_H - -#include - -#include "../../include/c11/threads.h" -#include "macros.h" -#include "u_atomic.h" -#include "u_math.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct util_sparse_array_node; - -/** A thread-safe automatically growing sparse array data structure - * - * This data structure has the following very nice properties: - * - * 1. Accessing an element is basically constant time. Technically, it's - * O(log_b n) where the base b is the node size and n is the maximum - * index. However, node sizes are expected to be fairly large and the - * index is a uint64_t so, if your node size is 256, it's O(8). - * - * 2. The data stored in the array is never moved in memory. Instead, the - * data structure only ever grows and new nodes are added as-needed. This - * means it's safe to store a pointer to something stored in the sparse - * array without worrying about a realloc invalidating it. - * - * 3. The data structure is thread-safe. No guarantees are made about the - * data stored in the sparse array but it is safe to call - * util_sparse_array_get(arr, idx) from as many threads as you'd like and - * we guarantee that two calls to util_sparse_array_get(arr, idx) with the - * same array and index will always return the same pointer regardless - * contention between threads. - * - * 4. The data structure is lock-free. All manipulations of the tree are - * done by a careful use of atomics to maintain thread safety and no locks - * are ever taken other than those taken implicitly by calloc(). If no - * allocation is required, util_sparse_array_get(arr, idx) does a simple - * walk over the tree should be efficient even in the case where many - * threads are accessing the sparse array at once. - */ -struct util_sparse_array { - size_t elem_size; - unsigned node_size_log2; - - uintptr_t root; -}; - -void util_sparse_array_init(struct util_sparse_array *arr, - size_t elem_size, size_t node_size); - -void util_sparse_array_finish(struct util_sparse_array *arr); - -void *util_sparse_array_get(struct util_sparse_array *arr, uint64_t idx); - -void util_sparse_array_validate(struct util_sparse_array *arr); - -/** A thread-safe free list for use with struct util_sparse_array - * - * This data structure provides an easy way to manage a singly linked list of - * "free" elements backed by a util_sparse_array. The list supports only two - * operations: push and pop both of which are thread-safe and lock-free. T - */ -struct util_sparse_array_free_list -{ - /** Head of the list - * - * The bottom 64 bits of this value are the index to the next free element - * or the sentinel value if the list is empty. - * - * We want this element to be 8-byte aligned. Otherwise, the performance - * of atomic operations on it will be aweful on 32-bit platforms. - */ - alignas(8) uint64_t head; - - /** The array backing this free list */ - struct util_sparse_array *arr; - - /** Sentinel value to indicate the end of the list - * - * This value must never be passed into util_sparse_array_free_list_push. - */ - uint32_t sentinel; - - /** Offset into the array element at which to find the "next" value - * - * The assumption is that there is some uint32_t "next" value embedded in - * the array element for use in the free list. This is its offset. - */ - uint32_t next_offset; -}; - -void util_sparse_array_free_list_init(struct util_sparse_array_free_list *fl, - struct util_sparse_array *arr, - uint32_t sentinel, - uint32_t next_offset); - -void util_sparse_array_free_list_push(struct util_sparse_array_free_list *fl, - uint32_t *items, unsigned num_items); - -uint32_t util_sparse_array_free_list_pop_idx(struct util_sparse_array_free_list *fl); -void *util_sparse_array_free_list_pop_elem(struct util_sparse_array_free_list *fl); - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* _UTIL_SPARSE_ARRAY_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/streaming-load-memcpy.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/streaming-load-memcpy.c deleted file mode 100644 index 7e5ea4e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/streaming-load-memcpy.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Eric Anholt - * Matt Turner - * - */ - -#include "streaming-load-memcpy.h" -#include "u_cpu_detect.h" -#include "u_math.h" -#ifdef USE_SSE41 -#include -#endif - -/* Copies memory from src to dst, using SSE 4.1's MOVNTDQA to get streaming - * read performance from uncached memory. - */ -void -util_streaming_load_memcpy(void *restrict dst, void *restrict src, size_t len) -{ - char *restrict d = dst; - char *restrict s = src; - -#ifdef USE_SSE41 - /* If dst and src are not co-aligned, or if SSE4.1 is not present, fallback to memcpy(). */ - if (((uintptr_t)d & 15) != ((uintptr_t)s & 15) || !util_get_cpu_caps()->has_sse4_1) { - memcpy(d, s, len); - return; - } - - /* memcpy() the misaligned header. At the end of this if block, and - * are aligned to a 16-byte boundary or == 0. - */ - if ((uintptr_t)d & 15) { - uintptr_t bytes_before_alignment_boundary = 16 - ((uintptr_t)d & 15); - assert(bytes_before_alignment_boundary < 16); - - memcpy(d, s, MIN2(bytes_before_alignment_boundary, len)); - - d = (char *)ALIGN((uintptr_t)d, 16); - s = (char *)ALIGN((uintptr_t)s, 16); - len -= MIN2(bytes_before_alignment_boundary, len); - } - - if (len >= 64) - _mm_mfence(); - - while (len >= 64) { - __m128i *dst_cacheline = (__m128i *)d; - __m128i *src_cacheline = (__m128i *)s; - - __m128i temp1 = _mm_stream_load_si128(src_cacheline + 0); - __m128i temp2 = _mm_stream_load_si128(src_cacheline + 1); - __m128i temp3 = _mm_stream_load_si128(src_cacheline + 2); - __m128i temp4 = _mm_stream_load_si128(src_cacheline + 3); - - _mm_store_si128(dst_cacheline + 0, temp1); - _mm_store_si128(dst_cacheline + 1, temp2); - _mm_store_si128(dst_cacheline + 2, temp3); - _mm_store_si128(dst_cacheline + 3, temp4); - - d += 64; - s += 64; - len -= 64; - } -#endif - /* memcpy() the tail. */ - if (len) { - memcpy(d, s, len); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/streaming-load-memcpy.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/streaming-load-memcpy.h deleted file mode 100644 index ee277b0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/streaming-load-memcpy.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2013 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Authors: - * Eric Anholt - * Matt Turner - * - */ - -/* Copies memory from src to dst, using SSE 4.1's MOVNTDQA to get streaming - * read performance from uncached memory. - */ - -#ifndef STREAMING_LOAD_MEMCPY_H -#define STREAMING_LOAD_MEMCPY_H - -#include - -void -util_streaming_load_memcpy(void *restrict dst, void *restrict src, size_t len); - -#endif /* STREAMING_LOAD_MEMCPY_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/string_buffer.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/string_buffer.c deleted file mode 100644 index 062c9da..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/string_buffer.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright © 2017 Thomas Helland - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ - -#include "string_buffer.h" - -static bool -ensure_capacity(struct _mesa_string_buffer *str, uint32_t needed_capacity) -{ - if (needed_capacity <= str->capacity) - return true; - - /* Too small, double until we can fit the new string */ - uint32_t new_capacity = str->capacity * 2; - while (needed_capacity > new_capacity) - new_capacity *= 2; - - str->buf = reralloc_array_size(str, str->buf, sizeof(char), new_capacity); - if (str->buf == NULL) - return false; - - str->capacity = new_capacity; - return true; -} - -struct _mesa_string_buffer * -_mesa_string_buffer_create(void *mem_ctx, uint32_t initial_capacity) -{ - struct _mesa_string_buffer *str; - str = ralloc(mem_ctx, struct _mesa_string_buffer); - - if (str == NULL) - return NULL; - - /* If no initial capacity is set then set it to something */ - str->capacity = initial_capacity ? initial_capacity : 32; - str->buf = ralloc_array(str, char, str->capacity); - - if (!str->buf) { - ralloc_free(str); - return NULL; - } - - str->length = 0; - str->buf[str->length] = '\0'; - return str; -} - -bool -_mesa_string_buffer_append_all(struct _mesa_string_buffer *str, - uint32_t num_args, ...) -{ - int i; - char* s; - va_list args; - va_start(args, num_args); - for (i = 0; i < num_args; i++) { - s = va_arg(args, char*); - if (!_mesa_string_buffer_append_len(str, s, strlen(s))) { - va_end(args); - return false; - } - } - va_end(args); - return true; -} - -bool -_mesa_string_buffer_append_len(struct _mesa_string_buffer *str, - const char *c, uint32_t len) -{ - uint32_t needed_length = str->length + len + 1; - - /* Check if we're overflowing uint32_t */ - if (needed_length < str->length) - return false; - - if (!ensure_capacity(str, needed_length)) - return false; - - memcpy(str->buf + str->length, c, len); - str->length += len; - str->buf[str->length] = '\0'; - return true; -} - -bool -_mesa_string_buffer_vprintf(struct _mesa_string_buffer *str, - const char *format, va_list args) -{ - /* We're looping two times to avoid duplicating code */ - for (uint32_t i = 0; i < 2; i++) { - va_list arg_copy; - va_copy(arg_copy, args); - uint32_t space_left = str->capacity - str->length; - - int32_t len = vsnprintf(str->buf + str->length, - space_left, format, arg_copy); - va_end(arg_copy); - - /* Error in vsnprintf() or measured len overflows size_t */ - if (unlikely(len < 0 || str->length + len + 1 < str->length)) - return false; - - /* There was enough space for the string; we're done */ - if (len < space_left) { - str->length += len; - return true; - } - - /* Not enough space, resize and retry */ - ensure_capacity(str, str->length + len + 1); - } - - return false; -} - -bool -_mesa_string_buffer_printf(struct _mesa_string_buffer *str, - const char *format, ...) -{ - bool res; - va_list args; - va_start(args, format); - res = _mesa_string_buffer_vprintf(str, format, args); - va_end(args); - return res; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/string_buffer.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/string_buffer.h deleted file mode 100644 index 81fb7f7..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/string_buffer.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2017 Thomas Helland - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - */ -#ifndef _STRING_BUFFER_H -#define _STRING_BUFFER_H - -#include "ralloc.h" -#include "u_string.h" -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct _mesa_string_buffer { - char *buf; - uint32_t length; - uint32_t capacity; -}; - -struct _mesa_string_buffer * -_mesa_string_buffer_create(void *mem_ctx, uint32_t initial_capacity); - -static inline void -_mesa_string_buffer_destroy(struct _mesa_string_buffer *str) -{ - ralloc_free(str); -} - -bool -_mesa_string_buffer_append_all(struct _mesa_string_buffer *str, - uint32_t num_args, ...); -bool -_mesa_string_buffer_append_len(struct _mesa_string_buffer *str, - const char *c, uint32_t len); - -static inline bool -_mesa_string_buffer_append_char(struct _mesa_string_buffer *str, char c) -{ - return _mesa_string_buffer_append_len(str, &c, 1); -} - -static inline bool -_mesa_string_buffer_append(struct _mesa_string_buffer *str, const char *c) -{ - return _mesa_string_buffer_append_len(str, c, strlen(c)); -} - -static inline void -_mesa_string_buffer_clear(struct _mesa_string_buffer *str) -{ - str->length = 0; - str->buf[str->length] = '\0'; -} - -static inline void -_mesa_string_buffer_crimp_to_fit(struct _mesa_string_buffer *str) -{ - char *crimped = - (char *) reralloc_array_size(str, str->buf, sizeof(char), - str->capacity); - if (!crimped) - return; - - str->capacity = str->length + 1; - str->buf = crimped; -} - -bool -_mesa_string_buffer_vprintf(struct _mesa_string_buffer *str, - const char *format, va_list args); - -bool -_mesa_string_buffer_printf(struct _mesa_string_buffer *str, - const char *format, ...); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* _STRING_BUFFER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strndup.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strndup.h deleted file mode 100644 index dcaa429..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strndup.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef STRNDUP_H -#define STRNDUP_H - -#if defined(_WIN32) - -#include // size_t -#include - -#ifdef __cplusplus -extern "C" { -#endif - -static inline char * -strndup(const char *str, size_t max) -{ - size_t n; - char *ptr; - - if (!str) - return NULL; - - n = strnlen(str, max); - ptr = (char *) calloc(n + 1, sizeof(char)); - if (!ptr) - return NULL; - - memcpy(ptr, str, n); - return ptr; -} - -#ifdef __cplusplus -} -#endif - -#endif /* _WIN32 */ - -#endif /* STRNDUP_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strtod.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strtod.c deleted file mode 100644 index 0a3552d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strtod.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - */ - - -#include - -#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L) -#include -#ifdef HAVE_XLOCALE_H -#include -#endif -static locale_t loc; -#endif - -#include "strtod.h" -#include "u_call_once.h" - -static void -_mesa_locale_init_once(void) -{ - #if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L) - loc = newlocale(LC_CTYPE_MASK, "C", NULL); - atexit(_mesa_locale_fini); - #endif -} - -void -_mesa_locale_init(void) -{ - static util_once_flag once = UTIL_ONCE_FLAG_INIT; - util_call_once(&once, _mesa_locale_init_once); -} - -void -_mesa_locale_fini(void) -{ -#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L) - freelocale(loc); -#endif -} - -/** - * Wrapper around strtod which uses the "C" locale so the decimal - * point is always '.' - */ -double -_mesa_strtod(const char *s, char **end) -{ -#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L) - if (!loc) _mesa_locale_init(); - return strtod_l(s, end, loc); -#else - return strtod(s, end); -#endif -} - - -/** - * Wrapper around strtof which uses the "C" locale so the decimal - * point is always '.' - */ -float -_mesa_strtof(const char *s, char **end) -{ -#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L) - if (!loc) _mesa_locale_init(); - return strtof_l(s, end, loc); -#elif defined(HAVE_STRTOF) - return strtof(s, end); -#else - return (float) strtod(s, end); -#endif -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strtod.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strtod.h deleted file mode 100644 index 60e15cf..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/strtod.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2010 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - */ - - -#ifndef STRTOD_H -#define STRTOD_H - -#ifdef __cplusplus -extern "C" { -#endif - -extern void -_mesa_locale_init(void); - -extern void -_mesa_locale_fini(void); - -extern double -_mesa_strtod(const char *s, char **end); - -extern float -_mesa_strtof(const char *s, char **end); - - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/texcompress_rgtc_tmp.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/texcompress_rgtc_tmp.h deleted file mode 100644 index 02566b1..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/texcompress_rgtc_tmp.h +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright (C) 2011 Red Hat Inc. - * - * block compression parts are: - * Copyright (C) 2004 Roland Scheidegger 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - * Author: - * Dave Airlie - */ - -/* included by texcompress_rgtc to define byte/ubyte compressors */ - -void TAG(fetch_texel_rgtc)(unsigned srcRowStride, const TYPE *pixdata, - unsigned i, unsigned j, TYPE *value, unsigned comps) -{ - TYPE decode; - const TYPE *blksrc = (pixdata + ((srcRowStride + 3) / 4 * (j / 4) + (i / 4)) * 8 * comps); - const TYPE alpha0 = blksrc[0]; - const TYPE alpha1 = blksrc[1]; - const char bit_pos = ((j&3) * 4 + (i&3)) * 3; - const unsigned char acodelow = blksrc[2 + bit_pos / 8]; - const unsigned char acodehigh = (3 + bit_pos / 8) < 8 ? blksrc[3 + bit_pos / 8] : 0; - const unsigned char code = (acodelow >> (bit_pos & 0x7) | - (acodehigh << (8 - (bit_pos & 0x7)))) & 0x7; - - if (code == 0) - decode = alpha0; - else if (code == 1) - decode = alpha1; - else if (alpha0 > alpha1) - decode = ((alpha0 * (8 - code) + (alpha1 * (code - 1))) / 7); - else if (code < 6) - decode = ((alpha0 * (6 - code) + (alpha1 * (code - 1))) / 5); - else if (code == 6) - decode = T_MIN; - else - decode = T_MAX; - - *value = decode; -} - -static void TAG(write_rgtc_encoded_channel)(TYPE *blkaddr, - TYPE alphabase1, - TYPE alphabase2, - TYPE alphaenc[16]) -{ - *blkaddr++ = alphabase1; - *blkaddr++ = alphabase2; - *blkaddr++ = alphaenc[0] | (alphaenc[1] << 3) | ((alphaenc[2] & 3) << 6); - *blkaddr++ = (alphaenc[2] >> 2) | (alphaenc[3] << 1) | (alphaenc[4] << 4) | ((alphaenc[5] & 1) << 7); - *blkaddr++ = (alphaenc[5] >> 1) | (alphaenc[6] << 2) | (alphaenc[7] << 5); - *blkaddr++ = alphaenc[8] | (alphaenc[9] << 3) | ((alphaenc[10] & 3) << 6); - *blkaddr++ = (alphaenc[10] >> 2) | (alphaenc[11] << 1) | (alphaenc[12] << 4) | ((alphaenc[13] & 1) << 7); - *blkaddr++ = (alphaenc[13] >> 1) | (alphaenc[14] << 2) | (alphaenc[15] << 5); -} - -void TAG(encode_rgtc_ubyte)(TYPE *blkaddr, TYPE srccolors[4][4], - int numxpixels, int numypixels) -{ - TYPE alphabase[2], alphause[2]; - short alphatest[2] = { 0 }; - unsigned int alphablockerror1, alphablockerror2, alphablockerror3; - TYPE i, j, aindex, acutValues[7]; - TYPE alphaenc1[16], alphaenc2[16], alphaenc3[16]; - int alphaabsmin = 0, alphaabsmax = 0; - short alphadist; - - /* find lowest and highest alpha value in block, alphabase[0] lowest, alphabase[1] highest */ - alphabase[0] = T_MAX; alphabase[1] = T_MIN; - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - if (srccolors[j][i] == T_MIN) - alphaabsmin = 1; - else if (srccolors[j][i] == T_MAX) - alphaabsmax = 1; - else { - if (srccolors[j][i] > alphabase[1]) - alphabase[1] = srccolors[j][i]; - if (srccolors[j][i] < alphabase[0]) - alphabase[0] = srccolors[j][i]; - } - } - } - - - if (((alphabase[0] > alphabase[1]) && !(alphaabsmin && alphaabsmax)) - || (alphabase[0] == alphabase[1] && !alphaabsmin && !alphaabsmax)) { /* one color, either max or min */ - /* shortcut here since it is a very common case (and also avoids later problems) */ - /* could also thest for alpha0 == alpha1 (and not min/max), but probably not common, so don't bother */ - - *blkaddr++ = srccolors[0][0]; - blkaddr++; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; - *blkaddr++ = 0; -#if RGTC_DEBUG - fprintf(stderr, "enc0 used\n"); -#endif - return; - } - - /* find best encoding for alpha0 > alpha1 */ - /* it's possible this encoding is better even if both alphaabsmin and alphaabsmax are true */ - alphablockerror1 = 0x0; - alphablockerror2 = 0xffffffff; - alphablockerror3 = 0xffffffff; - if (alphaabsmin) alphause[0] = T_MIN; - else alphause[0] = alphabase[0]; - if (alphaabsmax) alphause[1] = T_MAX; - else alphause[1] = alphabase[1]; - /* calculate the 7 cut values, just the middle between 2 of the computed alpha values */ - for (aindex = 0; aindex < 7; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphause[0] * (2*aindex + 1) + alphause[1] * (14 - (2*aindex + 1))) / 14; - } - - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - /* maybe it's overkill to have the most complicated calculation just for the error - calculation which we only need to figure out if encoding1 or encoding2 is better... */ - if (srccolors[j][i] > acutValues[0]) { - alphaenc1[4*j + i] = 0; - alphadist = srccolors[j][i] - alphause[1]; - } - else if (srccolors[j][i] > acutValues[1]) { - alphaenc1[4*j + i] = 2; - alphadist = srccolors[j][i] - (alphause[1] * 6 + alphause[0] * 1) / 7; - } - else if (srccolors[j][i] > acutValues[2]) { - alphaenc1[4*j + i] = 3; - alphadist = srccolors[j][i] - (alphause[1] * 5 + alphause[0] * 2) / 7; - } - else if (srccolors[j][i] > acutValues[3]) { - alphaenc1[4*j + i] = 4; - alphadist = srccolors[j][i] - (alphause[1] * 4 + alphause[0] * 3) / 7; - } - else if (srccolors[j][i] > acutValues[4]) { - alphaenc1[4*j + i] = 5; - alphadist = srccolors[j][i] - (alphause[1] * 3 + alphause[0] * 4) / 7; - } - else if (srccolors[j][i] > acutValues[5]) { - alphaenc1[4*j + i] = 6; - alphadist = srccolors[j][i] - (alphause[1] * 2 + alphause[0] * 5) / 7; - } - else if (srccolors[j][i] > acutValues[6]) { - alphaenc1[4*j + i] = 7; - alphadist = srccolors[j][i] - (alphause[1] * 1 + alphause[0] * 6) / 7; - } - else { - alphaenc1[4*j + i] = 1; - alphadist = srccolors[j][i] - alphause[0]; - } - alphablockerror1 += alphadist * alphadist; - } - } - -#if RGTC_DEBUG - for (i = 0; i < 16; i++) { - fprintf(stderr, "%d ", alphaenc1[i]); - } - fprintf(stderr, "cutVals "); - for (i = 0; i < 7; i++) { - fprintf(stderr, "%d ", acutValues[i]); - } - fprintf(stderr, "srcVals "); - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - fprintf(stderr, "%d ", srccolors[j][i]); - } - } - fprintf(stderr, "\n"); -#endif - - /* it's not very likely this encoding is better if both alphaabsmin and alphaabsmax - are false but try it anyway */ - if (alphablockerror1 >= 32) { - - /* don't bother if encoding is already very good, this condition should also imply - we have valid alphabase colors which we absolutely need (alphabase[0] <= alphabase[1]) */ - alphablockerror2 = 0; - for (aindex = 0; aindex < 5; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphabase[0] * (10 - (2*aindex + 1)) + alphabase[1] * (2*aindex + 1)) / 10; - } - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - /* maybe it's overkill to have the most complicated calculation just for the error - calculation which we only need to figure out if encoding1 or encoding2 is better... */ - if (srccolors[j][i] == T_MIN) { - alphaenc2[4*j + i] = 6; - alphadist = 0; - } - else if (srccolors[j][i] == T_MAX) { - alphaenc2[4*j + i] = 7; - alphadist = 0; - } - else if (srccolors[j][i] <= acutValues[0]) { - alphaenc2[4*j + i] = 0; - alphadist = srccolors[j][i] - alphabase[0]; - } - else if (srccolors[j][i] <= acutValues[1]) { - alphaenc2[4*j + i] = 2; - alphadist = srccolors[j][i] - (alphabase[0] * 4 + alphabase[1] * 1) / 5; - } - else if (srccolors[j][i] <= acutValues[2]) { - alphaenc2[4*j + i] = 3; - alphadist = srccolors[j][i] - (alphabase[0] * 3 + alphabase[1] * 2) / 5; - } - else if (srccolors[j][i] <= acutValues[3]) { - alphaenc2[4*j + i] = 4; - alphadist = srccolors[j][i] - (alphabase[0] * 2 + alphabase[1] * 3) / 5; - } - else if (srccolors[j][i] <= acutValues[4]) { - alphaenc2[4*j + i] = 5; - alphadist = srccolors[j][i] - (alphabase[0] * 1 + alphabase[1] * 4) / 5; - } - else { - alphaenc2[4*j + i] = 1; - alphadist = srccolors[j][i] - alphabase[1]; - } - alphablockerror2 += alphadist * alphadist; - } - } - - - /* skip this if the error is already very small - this encoding is MUCH better on average than #2 though, but expensive! */ - if ((alphablockerror2 > 96) && (alphablockerror1 > 96)) { - short blockerrlin1 = 0; - short blockerrlin2 = 0; - TYPE nralphainrangelow = 0; - TYPE nralphainrangehigh = 0; - alphatest[0] = T_MAX; - alphatest[1] = T_MIN; - /* if we have large range it's likely there are values close to 0/255, try to map them to 0/255 */ - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - if ((srccolors[j][i] > alphatest[1]) && (srccolors[j][i] < (T_MAX -(alphabase[1] - alphabase[0]) / 28))) - alphatest[1] = srccolors[j][i]; - if ((srccolors[j][i] < alphatest[0]) && (srccolors[j][i] > (alphabase[1] - alphabase[0]) / 28)) - alphatest[0] = srccolors[j][i]; - } - } - /* shouldn't happen too often, don't really care about those degenerated cases */ - if (alphatest[1] <= alphatest[0]) { - alphatest[0] = T_MIN+1; - alphatest[1] = T_MAX-1; - } - for (aindex = 0; aindex < 5; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphatest[0] * (10 - (2*aindex + 1)) + alphatest[1] * (2*aindex + 1)) / 10; - } - - /* find the "average" difference between the alpha values and the next encoded value. - This is then used to calculate new base values. - Should there be some weighting, i.e. those values closer to alphatest[x] have more weight, - since they will see more improvement, and also because the values in the middle are somewhat - likely to get no improvement at all (because the base values might move in different directions)? - OTOH it would mean the values in the middle are even less likely to get an improvement - */ - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - if (srccolors[j][i] <= alphatest[0] / 2) { - } - else if (srccolors[j][i] > ((T_MAX + alphatest[1]) / 2)) { - } - else if (srccolors[j][i] <= acutValues[0]) { - blockerrlin1 += (srccolors[j][i] - alphatest[0]); - nralphainrangelow += 1; - } - else if (srccolors[j][i] <= acutValues[1]) { - blockerrlin1 += (srccolors[j][i] - (alphatest[0] * 4 + alphatest[1] * 1) / 5); - blockerrlin2 += (srccolors[j][i] - (alphatest[0] * 4 + alphatest[1] * 1) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else if (srccolors[j][i] <= acutValues[2]) { - blockerrlin1 += (srccolors[j][i] - (alphatest[0] * 3 + alphatest[1] * 2) / 5); - blockerrlin2 += (srccolors[j][i] - (alphatest[0] * 3 + alphatest[1] * 2) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else if (srccolors[j][i] <= acutValues[3]) { - blockerrlin1 += (srccolors[j][i] - (alphatest[0] * 2 + alphatest[1] * 3) / 5); - blockerrlin2 += (srccolors[j][i] - (alphatest[0] * 2 + alphatest[1] * 3) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else if (srccolors[j][i] <= acutValues[4]) { - blockerrlin1 += (srccolors[j][i] - (alphatest[0] * 1 + alphatest[1] * 4) / 5); - blockerrlin2 += (srccolors[j][i] - (alphatest[0] * 1 + alphatest[1] * 4) / 5); - nralphainrangelow += 1; - nralphainrangehigh += 1; - } - else { - blockerrlin2 += (srccolors[j][i] - alphatest[1]); - nralphainrangehigh += 1; - } - } - } - /* shouldn't happen often, needed to avoid div by zero */ - if (nralphainrangelow == 0) nralphainrangelow = 1; - if (nralphainrangehigh == 0) nralphainrangehigh = 1; - alphatest[0] = alphatest[0] + (blockerrlin1 / nralphainrangelow); -#if RGTC_DEBUG - fprintf(stderr, "block err lin low %d, nr %d\n", blockerrlin1, nralphainrangelow); - fprintf(stderr, "block err lin high %d, nr %d\n", blockerrlin2, nralphainrangehigh); -#endif - /* again shouldn't really happen often... */ - if (alphatest[0] < T_MIN) { - alphatest[0] = T_MIN; - } - alphatest[1] = alphatest[1] + (blockerrlin2 / nralphainrangehigh); - if (alphatest[1] > T_MAX) { - alphatest[1] = T_MAX; - } - - alphablockerror3 = 0; - for (aindex = 0; aindex < 5; aindex++) { - /* don't forget here is always rounded down */ - acutValues[aindex] = (alphatest[0] * (10 - (2*aindex + 1)) + alphatest[1] * (2*aindex + 1)) / 10; - } - for (j = 0; j < numypixels; j++) { - for (i = 0; i < numxpixels; i++) { - /* maybe it's overkill to have the most complicated calculation just for the error - calculation which we only need to figure out if encoding1 or encoding2 is better... */ - if (srccolors[j][i] <= alphatest[0] / 2) { - alphaenc3[4*j + i] = 6; - alphadist = srccolors[j][i]; - } - else if (srccolors[j][i] > ((T_MAX + alphatest[1]) / 2)) { - alphaenc3[4*j + i] = 7; - alphadist = T_MAX - srccolors[j][i]; - } - else if (srccolors[j][i] <= acutValues[0]) { - alphaenc3[4*j + i] = 0; - alphadist = srccolors[j][i] - alphatest[0]; - } - else if (srccolors[j][i] <= acutValues[1]) { - alphaenc3[4*j + i] = 2; - alphadist = srccolors[j][i] - (alphatest[0] * 4 + alphatest[1] * 1) / 5; - } - else if (srccolors[j][i] <= acutValues[2]) { - alphaenc3[4*j + i] = 3; - alphadist = srccolors[j][i] - (alphatest[0] * 3 + alphatest[1] * 2) / 5; - } - else if (srccolors[j][i] <= acutValues[3]) { - alphaenc3[4*j + i] = 4; - alphadist = srccolors[j][i] - (alphatest[0] * 2 + alphatest[1] * 3) / 5; - } - else if (srccolors[j][i] <= acutValues[4]) { - alphaenc3[4*j + i] = 5; - alphadist = srccolors[j][i] - (alphatest[0] * 1 + alphatest[1] * 4) / 5; - } - else { - alphaenc3[4*j + i] = 1; - alphadist = srccolors[j][i] - alphatest[1]; - } - alphablockerror3 += alphadist * alphadist; - } - } - } - } - - /* write the alpha values and encoding back. */ - if ((alphablockerror1 <= alphablockerror2) && (alphablockerror1 <= alphablockerror3)) { -#if RGTC_DEBUG - if (alphablockerror1 > 96) fprintf(stderr, "enc1 used, error %d\n", alphablockerror1); - fprintf(stderr,"w1: min %d max %d au0 %d au1 %d\n", - T_MIN, T_MAX, - alphause[1], alphause[0]); -#endif - - TAG(write_rgtc_encoded_channel)( blkaddr, alphause[1], alphause[0], alphaenc1 ); - } - else if (alphablockerror2 <= alphablockerror3) { -#if RGTC_DEBUG - if (alphablockerror2 > 96) fprintf(stderr, "enc2 used, error %d\n", alphablockerror2); - fprintf(stderr,"w2: min %d max %d au0 %d au1 %d\n", - T_MIN, T_MAX, - alphabase[0], alphabase[1]); -#endif - - TAG(write_rgtc_encoded_channel)( blkaddr, alphabase[0], alphabase[1], alphaenc2 ); - } - else { -#if RGTC_DEBUG - fprintf(stderr, "enc3 used, error %d\n", alphablockerror3); - fprintf(stderr,"w3: min %d max %d au0 %d au1 %d\n", - T_MIN, T_MAX, - alphatest[0], alphatest[1]); -#endif - - TAG(write_rgtc_encoded_channel)( blkaddr, (TYPE)alphatest[0], (TYPE)alphatest[1], alphaenc3 ); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_atomic.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_atomic.c deleted file mode 100644 index 5a5eab4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_atomic.c +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright © 2017 Gražvydas Ignotas - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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(MISSING_64BIT_ATOMICS) && defined(HAVE_PTHREAD) - -#include -#include - -#if defined(HAVE_FUNC_ATTRIBUTE_WEAK) && !defined(__CYGWIN__) -#define WEAK __attribute__((weak)) -#else -#define WEAK -#endif - -static pthread_mutex_t sync_mutex = PTHREAD_MUTEX_INITIALIZER; - -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wmissing-prototypes" -#pragma redefine_extname __sync_add_and_fetch_8_c __sync_add_and_fetch_8 -#pragma redefine_extname __sync_sub_and_fetch_8_c __sync_sub_and_fetch_8 -#pragma redefine_extname __sync_fetch_and_add_8_c __sync_fetch_and_add_8 -#pragma redefine_extname __sync_fetch_and_sub_8_c __sync_fetch_and_sub_8 -#pragma redefine_extname __sync_val_compare_and_swap_8_c \ - __sync_val_compare_and_swap_8 -#define __sync_add_and_fetch_8 __sync_add_and_fetch_8_c -#define __sync_sub_and_fetch_8 __sync_sub_and_fetch_8_c -#define __sync_fetch_and_add_8 __sync_fetch_and_add_8_c -#define __sync_fetch_and_sub_8 __sync_fetch_and_sub_8_c -#define __sync_val_compare_and_swap_8 __sync_val_compare_and_swap_8_c -#endif - -WEAK uint64_t -__sync_add_and_fetch_8(uint64_t *ptr, uint64_t val) -{ - uint64_t r; - - pthread_mutex_lock(&sync_mutex); - *ptr += val; - r = *ptr; - pthread_mutex_unlock(&sync_mutex); - - return r; -} - -WEAK uint64_t -__sync_sub_and_fetch_8(uint64_t *ptr, uint64_t val) -{ - uint64_t r; - - pthread_mutex_lock(&sync_mutex); - *ptr -= val; - r = *ptr; - pthread_mutex_unlock(&sync_mutex); - - return r; -} - -WEAK uint64_t -__sync_fetch_and_add_8(uint64_t *ptr, uint64_t val) -{ - uint64_t r; - - pthread_mutex_lock(&sync_mutex); - r = *ptr; - *ptr += val; - pthread_mutex_unlock(&sync_mutex); - - return r; -} - -WEAK uint64_t -__sync_fetch_and_sub_8(uint64_t *ptr, uint64_t val) -{ - uint64_t r; - - pthread_mutex_lock(&sync_mutex); - r = *ptr; - *ptr -= val; - pthread_mutex_unlock(&sync_mutex); - - return r; -} - -WEAK uint64_t -__sync_val_compare_and_swap_8(uint64_t *ptr, uint64_t oldval, uint64_t newval) -{ - uint64_t r; - - pthread_mutex_lock(&sync_mutex); - r = *ptr; - if (*ptr == oldval) - *ptr = newval; - pthread_mutex_unlock(&sync_mutex); - - return r; -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_atomic.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_atomic.h deleted file mode 100644 index ade6f7a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_atomic.h +++ /dev/null @@ -1,355 +0,0 @@ -/** - * Many similar implementations exist. See for example libwsbm - * or the linux kernel include/atomic.h - * - * No copyright claimed on this file. - * - */ - -#include "../../include/no_extern_c.h" - -#ifndef U_ATOMIC_H -#define U_ATOMIC_H - -#include -#include - -/* Favor OS-provided implementations. - * - * Where no OS-provided implementation is available, fall back to - * locally coded assembly, compiler intrinsic or ultimately a - * mutex-based implementation. - */ -#if defined(__sun) -#define PIPE_ATOMIC_OS_SOLARIS -#elif defined(_MSC_VER) -#define PIPE_ATOMIC_MSVC_INTRINSIC -#elif defined(__GNUC__) -#define PIPE_ATOMIC_GCC_INTRINSIC -#else -#error "Unsupported platform" -#endif - - -/* Implementation using GCC-provided synchronization intrinsics - */ -#if defined(PIPE_ATOMIC_GCC_INTRINSIC) - -#define PIPE_ATOMIC "GCC Sync Intrinsics" - -#if defined(USE_GCC_ATOMIC_BUILTINS) - -/* The builtins with explicit memory model are available since GCC 4.7. */ -#define p_atomic_set(_v, _i) __atomic_store_n((_v), (_i), __ATOMIC_RELEASE) -#define p_atomic_read(_v) __atomic_load_n((_v), __ATOMIC_ACQUIRE) -#define p_atomic_read_relaxed(_v) __atomic_load_n((_v), __ATOMIC_RELAXED) -#define p_atomic_dec_zero(v) (__atomic_sub_fetch((v), 1, __ATOMIC_ACQ_REL) == 0) -#define p_atomic_inc(v) (void) __atomic_add_fetch((v), 1, __ATOMIC_ACQ_REL) -#define p_atomic_dec(v) (void) __atomic_sub_fetch((v), 1, __ATOMIC_ACQ_REL) -#define p_atomic_add(v, i) (void) __atomic_add_fetch((v), (i), __ATOMIC_ACQ_REL) -#define p_atomic_inc_return(v) __atomic_add_fetch((v), 1, __ATOMIC_ACQ_REL) -#define p_atomic_dec_return(v) __atomic_sub_fetch((v), 1, __ATOMIC_ACQ_REL) -#define p_atomic_add_return(v, i) __atomic_add_fetch((v), (i), __ATOMIC_ACQ_REL) -#define p_atomic_fetch_add(v, i) __atomic_fetch_add((v), (i), __ATOMIC_ACQ_REL) -#define p_atomic_xchg(v, i) __atomic_exchange_n((v), (i), __ATOMIC_ACQ_REL) -#define PIPE_NATIVE_ATOMIC_XCHG - -#else - -#define p_atomic_set(_v, _i) (*(_v) = (_i)) -#define p_atomic_read(_v) (*(_v)) -#define p_atomic_read_relaxed(_v) (*(_v)) -#define p_atomic_dec_zero(v) (__sync_sub_and_fetch((v), 1) == 0) -#define p_atomic_inc(v) (void) __sync_add_and_fetch((v), 1) -#define p_atomic_dec(v) (void) __sync_sub_and_fetch((v), 1) -#define p_atomic_add(v, i) (void) __sync_add_and_fetch((v), (i)) -#define p_atomic_inc_return(v) __sync_add_and_fetch((v), 1) -#define p_atomic_dec_return(v) __sync_sub_and_fetch((v), 1) -#define p_atomic_add_return(v, i) __sync_add_and_fetch((v), (i)) -#define p_atomic_fetch_add(v, i) __sync_fetch_and_add((v), (i)) - -#endif - -/* There is no __atomic_* compare and exchange that returns the current value. - * Also, GCC 5.4 seems unable to optimize a compound statement expression that - * uses an additional stack variable with __atomic_compare_exchange[_n]. - */ -#define p_atomic_cmpxchg(v, old, _new) \ - __sync_val_compare_and_swap((v), (old), (_new)) -#define p_atomic_cmpxchg_ptr(v, old, _new) p_atomic_cmpxchg(v, old, _new) - -#endif - - - -/* Unlocked version for single threaded environments, such as some - * windows kernel modules. - */ -#if defined(PIPE_ATOMIC_OS_UNLOCKED) - -#define PIPE_ATOMIC "Unlocked" - -#define p_atomic_set(_v, _i) (*(_v) = (_i)) -#define p_atomic_read(_v) (*(_v)) -#define p_atomic_read_relaxed(_v) (*(_v)) -#define p_atomic_dec_zero(_v) (p_atomic_dec_return(_v) == 0) -#define p_atomic_inc(_v) ((void) p_atomic_inc_return(_v)) -#define p_atomic_dec(_v) ((void) p_atomic_dec_return(_v)) -#define p_atomic_add(_v, _i) ((void) p_atomic_add_return((_v), (_i))) -#define p_atomic_inc_return(_v) (++(*(_v))) -#define p_atomic_dec_return(_v) (--(*(_v))) -#define p_atomic_add_return(_v, _i) (*(_v) = *(_v) + (_i)) -#define p_atomic_fetch_add(_v, _i) (*(_v) = *(_v) + (_i), *(_v) - (_i)) -#define p_atomic_cmpxchg(_v, _old, _new) (*(_v) == (_old) ? (*(_v) = (_new), (_old)) : *(_v)) -#define p_atomic_cmpxchg_ptr(_v, _old, _new) p_atomic_cmpxchg(_v, _old, _new) - -#endif - - -#if defined(PIPE_ATOMIC_MSVC_INTRINSIC) - -#define PIPE_ATOMIC "MSVC Intrinsics" - -/* We use the Windows header's Interlocked*64 functions instead of the - * _Interlocked*64 intrinsics wherever we can, as support for the latter varies - * with target CPU, whereas Windows headers take care of all portability - * issues: using intrinsics where available, falling back to library - * implementations where not. - */ -#include -#include - -__forceinline char _interlockedadd8(char volatile * _Addend, char _Value) -{ - return _InterlockedExchangeAdd8(_Addend, _Value) + _Value; -} - -__forceinline short _interlockedadd16(short volatile * _Addend, short _Value) -{ - return _InterlockedExchangeAdd16(_Addend, _Value) + _Value; -} - -/* MSVC supports decltype keyword, but it's only supported on C++ and doesn't - * quite work here; and if a C++-only solution is worthwhile, then it would be - * better to use templates / function overloading, instead of decltype magic. - * Therefore, we rely on implicit casting to LONGLONG for the functions that return - */ - -#define p_atomic_set(_v, _i) (*(_v) = (_i)) -#define p_atomic_read(_v) (*(_v)) -#define p_atomic_read_relaxed(_v) (*(_v)) - -#define p_atomic_dec_zero(_v) \ - (p_atomic_dec_return(_v) == 0) - -#define p_atomic_inc(_v) \ - ((void) p_atomic_inc_return(_v)) - -#define p_atomic_inc_return(_v) (\ - sizeof *(_v) == sizeof(char) ? p_atomic_add_return((_v), 1) : \ - sizeof *(_v) == sizeof(short) ? _InterlockedIncrement16((short *) (_v)) : \ - sizeof *(_v) == sizeof(long) ? _InterlockedIncrement ((long *) (_v)) : \ - sizeof *(_v) == sizeof(__int64) ? _interlockedincrement64((__int64 *)(_v)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_dec(_v) \ - ((void) p_atomic_dec_return(_v)) - -#define p_atomic_dec_return(_v) (\ - sizeof *(_v) == sizeof(char) ? p_atomic_add_return((_v), -1) : \ - sizeof *(_v) == sizeof(short) ? _InterlockedDecrement16((short *) (_v)) : \ - sizeof *(_v) == sizeof(long) ? _InterlockedDecrement ((long *) (_v)) : \ - sizeof *(_v) == sizeof(__int64) ? _interlockeddecrement64((__int64 *)(_v)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_add(_v, _i) \ - ((void) p_atomic_fetch_add((_v), (_i))) - -#define p_atomic_add_return(_v, _i) (\ - sizeof *(_v) == sizeof(char) ? _interlockedadd8 ((char *) (_v), (_i)) : \ - sizeof *(_v) == sizeof(short) ? _interlockedadd16((short *) (_v), (_i)) : \ - sizeof *(_v) == sizeof(long) ? _interlockedadd ((long *) (_v), (_i)) : \ - sizeof *(_v) == sizeof(__int64) ? _interlockedadd64((__int64 *)(_v), (_i)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_fetch_add(_v, _i) (\ - sizeof *(_v) == sizeof(char) ? _InterlockedExchangeAdd8 ((char *) (_v), (_i)) : \ - sizeof *(_v) == sizeof(short) ? _InterlockedExchangeAdd16((short *) (_v), (_i)) : \ - sizeof *(_v) == sizeof(long) ? _InterlockedExchangeAdd ((long *) (_v), (_i)) : \ - sizeof *(_v) == sizeof(__int64) ? _interlockedexchangeadd64((__int64 *)(_v), (_i)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_cmpxchg(_v, _old, _new) (\ - sizeof *(_v) == sizeof(char) ? _InterlockedCompareExchange8 ((char *) (_v), (char) (_new), (char) (_old)) : \ - sizeof *(_v) == sizeof(short) ? _InterlockedCompareExchange16((short *) (_v), (short) (_new), (short) (_old)) : \ - sizeof *(_v) == sizeof(long) ? _InterlockedCompareExchange ((long *) (_v), (long) (_new), (long) (_old)) : \ - sizeof *(_v) == sizeof(__int64) ? _InterlockedCompareExchange64((__int64 *)(_v), (__int64)(_new), (__int64)(_old)) : \ - (assert(!"should not get here"), 0)) - -#if defined(_WIN64) -#define p_atomic_cmpxchg_ptr(_v, _old, _new) (void *)_InterlockedCompareExchange64((__int64 *)(_v), (__int64)(_new), (__int64)(_old)) -#else -#define p_atomic_cmpxchg_ptr(_v, _old, _new) (void *)_InterlockedCompareExchange((long *)(_v), (long)(_new), (long)(_old)) -#endif - -#define PIPE_NATIVE_ATOMIC_XCHG -#define p_atomic_xchg(_v, _new) (\ - sizeof *(_v) == sizeof(char) ? _InterlockedExchange8 ((char *) (_v), (char) (_new)) : \ - sizeof *(_v) == sizeof(short) ? _InterlockedExchange16((short *) (_v), (short) (_new)) : \ - sizeof *(_v) == sizeof(long) ? _InterlockedExchange ((long *) (_v), (long) (_new)) : \ - sizeof *(_v) == sizeof(__int64) ? _interlockedexchange64((__int64 *)(_v), (__int64)(_new)) : \ - (assert(!"should not get here"), 0)) - -#endif - -#if defined(PIPE_ATOMIC_OS_SOLARIS) - -#define PIPE_ATOMIC "Solaris OS atomic functions" - -#include -#include - -#define p_atomic_set(_v, _i) (*(_v) = (_i)) -#define p_atomic_read(_v) (*(_v)) - -#define p_atomic_dec_zero(v) (\ - sizeof(*v) == sizeof(uint8_t) ? atomic_dec_8_nv ((uint8_t *)(v)) == 0 : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_dec_16_nv((uint16_t *)(v)) == 0 : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_dec_32_nv((uint32_t *)(v)) == 0 : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_dec_64_nv((uint64_t *)(v)) == 0 : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_inc(v) (void) (\ - sizeof(*v) == sizeof(uint8_t) ? atomic_inc_8 ((uint8_t *)(v)) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_inc_16((uint16_t *)(v)) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_inc_32((uint32_t *)(v)) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_inc_64((uint64_t *)(v)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_inc_return(v) (__typeof(*v))( \ - sizeof(*v) == sizeof(uint8_t) ? atomic_inc_8_nv ((uint8_t *)(v)) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_inc_16_nv((uint16_t *)(v)) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_inc_32_nv((uint32_t *)(v)) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_inc_64_nv((uint64_t *)(v)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_dec(v) (void) ( \ - sizeof(*v) == sizeof(uint8_t) ? atomic_dec_8 ((uint8_t *)(v)) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_dec_16((uint16_t *)(v)) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_dec_32((uint32_t *)(v)) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_dec_64((uint64_t *)(v)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_dec_return(v) (__typeof(*v))( \ - sizeof(*v) == sizeof(uint8_t) ? atomic_dec_8_nv ((uint8_t *)(v)) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_dec_16_nv((uint16_t *)(v)) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_dec_32_nv((uint32_t *)(v)) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_dec_64_nv((uint64_t *)(v)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_add(v, i) (void) ( \ - sizeof(*v) == sizeof(uint8_t) ? atomic_add_8 ((uint8_t *)(v), (i)) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_add_16((uint16_t *)(v), (i)) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_add_32((uint32_t *)(v), (i)) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_add_64((uint64_t *)(v), (i)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_add_return(v, i) (__typeof(*v)) ( \ - sizeof(*v) == sizeof(uint8_t) ? atomic_add_8_nv ((uint8_t *)(v), (i)) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_add_16_nv((uint16_t *)(v), (i)) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_add_32_nv((uint32_t *)(v), (i)) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_add_64_nv((uint64_t *)(v), (i)) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_fetch_add(v, i) (__typeof(*v)) ( \ - sizeof(*v) == sizeof(uint8_t) ? atomic_add_8_nv ((uint8_t *)(v), (i)) - (i) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_add_16_nv((uint16_t *)(v), (i)) - (i) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_add_32_nv((uint32_t *)(v), (i)) - (i) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_add_64_nv((uint64_t *)(v), (i)) - (i) : \ - (assert(!"should not get here"), 0)) - -#define p_atomic_cmpxchg(v, old, _new) (__typeof(*v))( \ - sizeof(*v) == sizeof(uint8_t) ? atomic_cas_8 ((uint8_t *)(v), (uint8_t )(old), (uint8_t )(_new)) : \ - sizeof(*v) == sizeof(uint16_t) ? atomic_cas_16((uint16_t *)(v), (uint16_t)(old), (uint16_t)(_new)) : \ - sizeof(*v) == sizeof(uint32_t) ? atomic_cas_32((uint32_t *)(v), (uint32_t)(old), (uint32_t)(_new)) : \ - sizeof(*v) == sizeof(uint64_t) ? atomic_cas_64((uint64_t *)(v), (uint64_t)(old), (uint64_t)(_new)) : \ - (assert(!"should not get here"), 0)) - -#if INTPTR_MAX == INT32_MAX -#define p_atomic_cmpxchg_ptr(v, old, _new) (__typeof(*v))(atomic_cas_32((uint32_t *)(v), (uint32_t)(old), (uint32_t)(_new))) -#else -#define p_atomic_cmpxchg_ptr(v, old, _new) (__typeof(*v))(atomic_cas_64((uint64_t *)(v), (uint64_t)(old), (uint64_t)(_new))) -#endif - -#endif - -#ifndef PIPE_ATOMIC -#error "No pipe_atomic implementation selected" -#endif - -#ifndef PIPE_NATIVE_ATOMIC_XCHG -static inline uint8_t p_atomic_xchg_8(uint8_t *v, uint8_t i) -{ - uint8_t actual = p_atomic_read(v); - uint8_t expected; - do { - expected = actual; - actual = p_atomic_cmpxchg(v, expected, i); - } while (expected != actual); - return actual; -} - -static inline uint16_t p_atomic_xchg_16(uint16_t *v, uint16_t i) -{ - uint16_t actual = p_atomic_read(v); - uint16_t expected; - do { - expected = actual; - actual = p_atomic_cmpxchg(v, expected, i); - } while (expected != actual); - return actual; -} - -static inline uint32_t p_atomic_xchg_32(uint32_t *v, uint32_t i) -{ - uint32_t actual = p_atomic_read(v); - uint32_t expected; - do { - expected = actual; - actual = p_atomic_cmpxchg(v, expected, i); - } while (expected != actual); - return actual; -} - -static inline uint64_t p_atomic_xchg_64(uint64_t *v, uint64_t i) -{ - uint64_t actual = p_atomic_read(v); - uint64_t expected; - do { - expected = actual; - actual = p_atomic_cmpxchg(v, expected, i); - } while (expected != actual); - return actual; -} - -#define p_atomic_xchg(v, i) (__typeof(*(v)))( \ - sizeof(*(v)) == sizeof(uint8_t) ? p_atomic_xchg_8 ((uint8_t *)(v), (uint8_t )(i)) : \ - sizeof(*(v)) == sizeof(uint16_t) ? p_atomic_xchg_16((uint16_t *)(v), (uint16_t)(i)) : \ - sizeof(*(v)) == sizeof(uint32_t) ? p_atomic_xchg_32((uint32_t *)(v), (uint32_t)(i)) : \ - sizeof(*(v)) == sizeof(uint64_t) ? p_atomic_xchg_64((uint64_t *)(v), (uint64_t)(i)) : \ - (assert(!"should not get here"), 0)) -#endif - -/* On x86 we can have sizeof(uint64_t) = 8 and _Alignof(uint64_t) = 4. causing split locks. The - * implementation does handle that correctly, but with an internal mutex. Extend the alignment to - * avoid this. - */ -#if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) && defined(USE_GCC_ATOMIC_BUILTINS) -typedef int64_t __attribute__((aligned(_Alignof(_Atomic(int64_t))))) p_atomic_int64_t; -typedef uint64_t __attribute__((aligned(_Alignof(_Atomic(uint64_t))))) p_atomic_uint64_t; -#else -typedef int64_t p_atomic_int64_t; -typedef uint64_t p_atomic_uint64_t; -#endif - -#endif /* U_ATOMIC_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_call_once.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_call_once.c deleted file mode 100644 index a9921b4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_call_once.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2022 Yonggang Luo - * SPDX-License-Identifier: MIT - */ - -#include "u_call_once.h" - -struct util_call_once_context_t -{ - const void *data; - util_call_once_data_func func; -}; - -static /*thread_local*/ struct util_call_once_context_t call_once_context; - -static void -util_call_once_data_slow_once(void) -{ - struct util_call_once_context_t *once_context = &call_once_context; - once_context->func(once_context->data); -} - -void -util_call_once_data_slow(once_flag *once, util_call_once_data_func func, const void *data) -{ - struct util_call_once_context_t *once_context = &call_once_context; - once_context->data = data; - once_context->func = func; - call_once(once, util_call_once_data_slow_once); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_call_once.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_call_once.h deleted file mode 100644 index cfb783f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_call_once.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2022 Yonggang Luo - * SPDX-License-Identifier: MIT - * - * Extend C11 call_once to support context parameter - */ - -#ifndef U_CALL_ONCE_H_ -#define U_CALL_ONCE_H_ - -#include - - -#include "../../include/c11/threads.h" -#include "macros.h" -#include "u_atomic.h" -//#include "../../include/c11/threads_posix.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* The data can be mutable or immutable. */ -typedef void (*util_call_once_data_func)(const void *data); - -struct util_once_flag { - bool called; - once_flag flag; -}; -typedef struct util_once_flag util_once_flag; - -#define UTIL_ONCE_FLAG_INIT { false, ONCE_FLAG_INIT } - -/** - * This is used to optimize the call to call_once out when the func are - * already called and finished, so when util_call_once are called in - * hot path it's only incur an extra load instruction cost. - */ -static ALWAYS_INLINE void -util_call_once(util_once_flag *flag, void (*func)(void)) -{ - if (unlikely(!p_atomic_read_relaxed(&flag->called))) { - call_once(&flag->flag, func); - p_atomic_set(&flag->called, true); - } -} - -/** - * @brief Wrapper around call_once to pass data to func - */ -void -util_call_once_data_slow(once_flag *once, util_call_once_data_func func, const void *data); - -/** - * This is used to optimize the call to util_call_once_data_slow out when - * the func function are already called and finished, - * so when util_call_once_data are called in hot path it's only incur an extra - * load instruction cost. - */ -static ALWAYS_INLINE void -util_call_once_data(util_once_flag *flag, util_call_once_data_func func, const void *data) -{ - if (unlikely(!p_atomic_read_relaxed(&flag->called))) { - util_call_once_data_slow(&(flag->flag), func, data); - p_atomic_set(&flag->called, true); - } -} - -#ifdef __cplusplus -} -#endif - -#endif /* U_CALL_ONCE_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_cpu_detect.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_cpu_detect.c deleted file mode 100644 index 092ea51..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_cpu_detect.c +++ /dev/null @@ -1,967 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 Dennis Smit - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * AUTHORS, COPYRIGHT HOLDERS, AND/OR THEIR SUPPLIERS 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 - * CPU feature detection. - * - * @author Dennis Smit - * @author Based on the work of Eric Anholt - */ - -#include "detect.h" -#include "../gallium/include/pipe/p_compiler.h" - -#include "u_debug.h" -#include "u_cpu_detect.h" -#include "u_math.h" -#include "../../include/c11/threads.h" - -#include -#include - -#if DETECT_ARCH_PPC -#if DETECT_OS_APPLE -#include -#else -#include -#include -#endif -#endif - -#if DETECT_OS_BSD -#include -#include -#include -#endif - -#if DETECT_OS_FREEBSD -#if __has_include() -#include -#define HAVE_ELF_AUX_INFO -#endif -#endif - -#if DETECT_OS_LINUX -#include -#include -#include -#endif - -#if DETECT_OS_UNIX -#include -#endif - -#if defined(HAS_ANDROID_CPUFEATURES) -#include -#endif - -#if DETECT_OS_WINDOWS -#include -#if DETECT_CC_MSVC -#include -#endif -#endif - -#if defined(HAS_SCHED_H) -#include -#endif - -// prevent inadvert infinite recursion -#define util_get_cpu_caps() util_get_cpu_caps_DO_NOT_USE() - -DEBUG_GET_ONCE_BOOL_OPTION(dump_cpu, "GALLIUM_DUMP_CPU", false) - -static -struct util_cpu_caps_t util_cpu_caps; - -/* Do not try to access _util_cpu_caps_state directly, call to util_get_cpu_caps instead */ -struct _util_cpu_caps_state_t _util_cpu_caps_state = { - .once_flag = ONCE_FLAG_INIT, - .detect_done = 0, -}; - -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 -static int has_cpuid(void); -#endif - - -#if DETECT_ARCH_PPC && !DETECT_OS_APPLE && !DETECT_OS_BSD && !DETECT_OS_LINUX -static jmp_buf __lv_powerpc_jmpbuf; -static volatile sig_atomic_t __lv_powerpc_canjump = 0; - -static void -sigill_handler(int sig) -{ - if (!__lv_powerpc_canjump) { - signal (sig, SIG_DFL); - raise (sig); - } - - __lv_powerpc_canjump = 0; - longjmp(__lv_powerpc_jmpbuf, 1); -} -#endif - -#if DETECT_ARCH_PPC -static void -check_os_altivec_support(void) -{ -#if defined(__ALTIVEC__) - util_cpu_caps.has_altivec = 1; -#endif -#if defined(__VSX__) - util_cpu_caps.has_vsx = 1; -#endif -#if defined(__ALTIVEC__) && defined(__VSX__) -/* Do nothing */ -#elif DETECT_OS_APPLE || DETECT_OS_NETBSD || DETECT_OS_OPENBSD -#ifdef HW_VECTORUNIT - int sels[2] = {CTL_HW, HW_VECTORUNIT}; -#else - int sels[2] = {CTL_MACHDEP, CPU_ALTIVEC}; -#endif - int has_vu = 0; - size_t len = sizeof (has_vu); - int err; - - err = sysctl(sels, 2, &has_vu, &len, NULL, 0); - - if (err == 0) { - if (has_vu != 0) { - util_cpu_caps.has_altivec = 1; - } - } -#elif DETECT_OS_FREEBSD /* !DETECT_OS_APPLE && !DETECT_OS_NETBSD && !DETECT_OS_OPENBSD */ - unsigned long hwcap = 0; -#ifdef HAVE_ELF_AUX_INFO - elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap)); -#else - size_t len = sizeof(hwcap); - sysctlbyname("hw.cpu_features", &hwcap, &len, NULL, 0); -#endif - if (hwcap & PPC_FEATURE_HAS_ALTIVEC) - util_cpu_caps.has_altivec = 1; - if (hwcap & PPC_FEATURE_HAS_VSX) - util_cpu_caps.has_vsx = 1; -#elif DETECT_OS_LINUX /* !DETECT_OS_FREEBSD */ -#if DETECT_ARCH_PPC_64 - Elf64_auxv_t aux; -#else - Elf32_auxv_t aux; -#endif - int fd = open("/proc/self/auxv", O_RDONLY | O_CLOEXEC); - if (fd >= 0) { - while (read(fd, &aux, sizeof(aux)) == sizeof(aux)) { - if (aux.a_type == AT_HWCAP) { - char *env_vsx = getenv("GALLIVM_VSX"); - uint64_t hwcap = aux.a_un.a_val; - util_cpu_caps.has_altivec = (hwcap >> 28) & 1; - if (!env_vsx || env_vsx[0] != '0') { - util_cpu_caps.has_vsx = (hwcap >> 7) & 1; - } - break; - } - } - close(fd); - } -#else /* !DETECT_OS_APPLE && !DETECT_OS_BSD && !DETECT_OS_LINUX */ - /* not on Apple/Darwin or Linux, do it the brute-force way */ - /* this is borrowed from the libmpeg2 library */ - signal(SIGILL, sigill_handler); - if (setjmp(__lv_powerpc_jmpbuf)) { - signal(SIGILL, SIG_DFL); - } else { - bool enable_altivec = true; /* Default: enable if available, and if not overridden */ - bool enable_vsx = true; -#ifdef DEBUG - /* Disabling Altivec code generation is not the same as disabling VSX code generation, - * which can be done simply by passing -mattr=-vsx to the LLVM compiler; cf. - * lp_build_create_jit_compiler_for_module(). - * If you want to disable Altivec code generation, the best place to do it is here. - */ - char *env_control = getenv("GALLIVM_ALTIVEC"); /* 1=enable (default); 0=disable */ - if (env_control && env_control[0] == '0') { - enable_altivec = false; - } -#endif - /* VSX instructions can be explicitly enabled/disabled via GALLIVM_VSX=1 or 0 */ - char *env_vsx = getenv("GALLIVM_VSX"); - if (env_vsx && env_vsx[0] == '0') { - enable_vsx = false; - } - if (enable_altivec) { - __lv_powerpc_canjump = 1; - - __asm __volatile - ("mtspr 256, %0\n\t" - "vand %%v0, %%v0, %%v0" - : - : "r" (-1)); - - util_cpu_caps.has_altivec = 1; - - if (enable_vsx) { - __asm __volatile("xxland %vs0, %vs0, %vs0"); - util_cpu_caps.has_vsx = 1; - } - signal(SIGILL, SIG_DFL); - } else { - util_cpu_caps.has_altivec = 0; - } - } -#endif /* !DETECT_OS_APPLE && !DETECT_OS_LINUX */ -} -#endif /* DETECT_ARCH_PPC */ - - -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 -static int has_cpuid(void) -{ -#if DETECT_ARCH_X86 -#if DETECT_OS_GCC - int a, c; - - __asm __volatile - ("pushf\n" - "popl %0\n" - "movl %0, %1\n" - "xorl $0x200000, %0\n" - "push %0\n" - "popf\n" - "pushf\n" - "popl %0\n" - : "=a" (a), "=c" (c) - : - : "cc"); - - return a != c; -#else - /* FIXME */ - return 1; -#endif -#elif DETECT_ARCH_X86_64 - return 1; -#else - return 0; -#endif -} - - -/** - * @sa cpuid.h included in gcc-4.3 onwards. - * @sa http://msdn.microsoft.com/en-us/library/hskdteyh.aspx - */ -static inline void -cpuid(uint32_t ax, uint32_t *p) -{ -#if DETECT_CC_GCC && DETECT_ARCH_X86 - __asm __volatile ( - "xchgl %%ebx, %1\n\t" - "cpuid\n\t" - "xchgl %%ebx, %1" - : "=a" (p[0]), - "=S" (p[1]), - "=c" (p[2]), - "=d" (p[3]) - : "0" (ax) - ); -#elif DETECT_CC_GCC && DETECT_ARCH_X86_64 - __asm __volatile ( - "cpuid\n\t" - : "=a" (p[0]), - "=b" (p[1]), - "=c" (p[2]), - "=d" (p[3]) - : "0" (ax) - ); -#elif DETECT_CC_MSVC - __cpuid(p, ax); -#else - p[0] = 0; - p[1] = 0; - p[2] = 0; - p[3] = 0; -#endif -} - -/** - * @sa cpuid.h included in gcc-4.4 onwards. - * @sa http://msdn.microsoft.com/en-us/library/hskdteyh%28v=vs.90%29.aspx - */ -static inline void -cpuid_count(uint32_t ax, uint32_t cx, uint32_t *p) -{ -#if DETECT_CC_GCC && DETECT_ARCH_X86 - __asm __volatile ( - "xchgl %%ebx, %1\n\t" - "cpuid\n\t" - "xchgl %%ebx, %1" - : "=a" (p[0]), - "=S" (p[1]), - "=c" (p[2]), - "=d" (p[3]) - : "0" (ax), "2" (cx) - ); -#elif DETECT_CC_GCC && DETECT_ARCH_X86_64 - __asm __volatile ( - "cpuid\n\t" - : "=a" (p[0]), - "=b" (p[1]), - "=c" (p[2]), - "=d" (p[3]) - : "0" (ax), "2" (cx) - ); -#elif DETECT_CC_MSVC - __cpuidex(p, ax, cx); -#else - p[0] = 0; - p[1] = 0; - p[2] = 0; - p[3] = 0; -#endif -} - - -static inline uint64_t xgetbv(void) -{ -#if DETECT_CC_GCC - uint32_t eax, edx; - - __asm __volatile ( - ".byte 0x0f, 0x01, 0xd0" // xgetbv isn't supported on gcc < 4.4 - : "=a"(eax), - "=d"(edx) - : "c"(0) - ); - - return ((uint64_t)edx << 32) | eax; -#elif DETECT_CC_MSVC && defined(_MSC_FULL_VER) && defined(_XCR_XFEATURE_ENABLED_MASK) - return _xgetbv(_XCR_XFEATURE_ENABLED_MASK); -#else - return 0; -#endif -} - - -#if DETECT_ARCH_X86 -UTIL_ALIGN_STACK -static inline bool -sse2_has_daz(void) -{ - alignas(16) struct { - uint32_t pad1[7]; - uint32_t mxcsr_mask; - uint32_t pad2[128-8]; - } fxarea; - - fxarea.mxcsr_mask = 0; -#if DETECT_CC_GCC - __asm __volatile ("fxsave %0" : "+m" (fxarea)); -#elif DETECT_CC_MSVC || DETECT_CC_ICL - _fxsave(&fxarea); -#else - fxarea.mxcsr_mask = 0; -#endif - return !!(fxarea.mxcsr_mask & (1 << 6)); -} -#endif - -#endif /* X86 or X86_64 */ - -#if DETECT_ARCH_ARM -static void -check_os_arm_support(void) -{ - /* - * On Android, the cpufeatures library is preferred way of checking - * CPU capabilities. However, it is not available for standalone Mesa - * builds, i.e. when Android build system (Android.mk-based) is not - * used. Because of this we cannot use DETECT_OS_ANDROID here, but rather - * have a separate macro that only gets enabled from respective Android.mk. - */ -#if defined(__ARM_NEON) || defined(__ARM_NEON__) - util_cpu_caps.has_neon = 1; -#elif DETECT_OS_FREEBSD && defined(HAVE_ELF_AUX_INFO) - unsigned long hwcap = 0; - elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap)); - if (hwcap & HWCAP_NEON) - util_cpu_caps.has_neon = 1; -#elif defined(HAS_ANDROID_CPUFEATURES) - AndroidCpuFamily cpu_family = android_getCpuFamily(); - uint64_t cpu_features = android_getCpuFeatures(); - - if (cpu_family == ANDROID_CPU_FAMILY_ARM) { - if (cpu_features & ANDROID_CPU_ARM_FEATURE_NEON) - util_cpu_caps.has_neon = 1; - } -#elif DETECT_OS_LINUX - Elf32_auxv_t aux; - int fd; - - fd = open("/proc/self/auxv", O_RDONLY | O_CLOEXEC); - if (fd >= 0) { - while (read(fd, &aux, sizeof(Elf32_auxv_t)) == sizeof(Elf32_auxv_t)) { - if (aux.a_type == AT_HWCAP) { - uint32_t hwcap = aux.a_un.a_val; - - util_cpu_caps.has_neon = (hwcap >> 12) & 1; - break; - } - } - close (fd); - } -#endif /* DETECT_OS_LINUX */ -} - -#elif DETECT_ARCH_AARCH64 -static void -check_os_arm_support(void) -{ - util_cpu_caps.has_neon = true; -} -#endif /* DETECT_ARCH_ARM || DETECT_ARCH_AARCH64 */ - -#if DETECT_ARCH_MIPS64 -static void -check_os_mips64_support(void) -{ -#if DETECT_OS_LINUX - Elf64_auxv_t aux; - int fd; - - fd = open("/proc/self/auxv", O_RDONLY | O_CLOEXEC); - if (fd >= 0) { - while (read(fd, &aux, sizeof(Elf64_auxv_t)) == sizeof(Elf64_auxv_t)) { - if (aux.a_type == AT_HWCAP) { - uint64_t hwcap = aux.a_un.a_val; - - util_cpu_caps.has_msa = (hwcap >> 1) & 1; - break; - } - } - close (fd); - } -#endif /* DETECT_OS_LINUX */ -} -#endif /* DETECT_ARCH_MIPS64 */ - - -static void -get_cpu_topology(void) -{ - /* Default. This is OK if L3 is not present or there is only one. */ - util_cpu_caps.num_L3_caches = 1; - - memset(util_cpu_caps.cpu_to_L3, 0xff, sizeof(util_cpu_caps.cpu_to_L3)); - -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 - /* AMD Zen */ - if (util_cpu_caps.family >= CPU_AMD_ZEN1_ZEN2 && - util_cpu_caps.family < CPU_AMD_LAST) { - uint32_t regs[4]; - - uint32_t saved_mask[UTIL_MAX_CPUS / 32] = {0}; - uint32_t mask[UTIL_MAX_CPUS / 32] = {0}; - bool saved = false; - - uint32_t L3_found[UTIL_MAX_CPUS] = {0}; - uint32_t num_L3_caches = 0; - util_affinity_mask *L3_affinity_masks = NULL; - - /* Query APIC IDs from each CPU core. - * - * An APIC ID is a logical ID of the CPU with respect to the cache - * hierarchy, meaning that consecutive APIC IDs are neighbours in - * the hierarchy, e.g. sharing the same cache. - * - * For example, CPU 0 can have APIC ID 0 and CPU 12 can have APIC ID 1, - * which means that both CPU 0 and 12 are next to each other. - * (e.g. they are 2 threads belonging to 1 SMT2 core) - * - * We need to find out which CPUs share the same L3 cache and they can - * be all over the place. - * - * Querying the APIC ID can only be done by pinning the current thread - * to each core. The original affinity mask is saved. - * - * Loop over all possible CPUs even though some may be offline. - */ - for (int16_t i = 0; i < util_cpu_caps.max_cpus && i < UTIL_MAX_CPUS; i++) { - uint32_t cpu_bit = 1u << (i % 32); - - mask[i / 32] = cpu_bit; - - /* The assumption is that trying to bind the thread to a CPU that is - * offline will fail. - */ - if (util_set_current_thread_affinity(mask, - !saved ? saved_mask : NULL, - util_cpu_caps.num_cpu_mask_bits)) { - saved = true; - - /* Query the APIC ID of the current core. */ - cpuid(0x00000001, regs); - unsigned apic_id = regs[1] >> 24; - - /* Query the total core count for the CPU */ - uint32_t core_count = 1; - if (regs[3] & (1 << 28)) - core_count = (regs[1] >> 16) & 0xff; - - core_count = util_next_power_of_two(core_count); - - /* Query the L3 cache count. */ - cpuid_count(0x8000001D, 3, regs); - unsigned cache_level = (regs[0] >> 5) & 0x7; - unsigned cores_per_L3 = ((regs[0] >> 14) & 0xfff) + 1; - - if (cache_level != 3) - continue; - - unsigned local_core_id = apic_id & (core_count - 1); - unsigned phys_id = (apic_id & ~(core_count - 1)) >> util_logbase2(core_count); - unsigned local_l3_cache_index = local_core_id / util_next_power_of_two(cores_per_L3); -#define L3_ID(p, i) (p << 16 | i << 1 | 1); - - unsigned l3_id = L3_ID(phys_id, local_l3_cache_index); - int idx = -1; - for (unsigned c = 0; c < num_L3_caches; c++) { - if (L3_found[c] == l3_id) { - idx = c; - break; - } - } - if (idx == -1) { - idx = num_L3_caches; - L3_found[num_L3_caches++] = l3_id; - L3_affinity_masks = realloc(L3_affinity_masks, sizeof(util_affinity_mask) * num_L3_caches); - if (!L3_affinity_masks) - return; - memset(&L3_affinity_masks[num_L3_caches - 1], 0, sizeof(util_affinity_mask)); - } - util_cpu_caps.cpu_to_L3[i] = idx; - L3_affinity_masks[idx][i / 32] |= cpu_bit; - - } - mask[i / 32] = 0; - } - - util_cpu_caps.num_L3_caches = num_L3_caches; - util_cpu_caps.L3_affinity_mask = L3_affinity_masks; - - if (saved) { - if (debug_get_option_dump_cpu()) { - fprintf(stderr, "CPU <-> L3 cache mapping:\n"); - for (unsigned i = 0; i < util_cpu_caps.num_L3_caches; i++) { - fprintf(stderr, " - L3 %u mask = ", i); - for (int j = util_cpu_caps.max_cpus - 1; j >= 0; j -= 32) - fprintf(stderr, "%08x ", util_cpu_caps.L3_affinity_mask[i][j / 32]); - fprintf(stderr, "\n"); - } - } - - /* Restore the original affinity mask. */ - util_set_current_thread_affinity(saved_mask, NULL, - util_cpu_caps.num_cpu_mask_bits); - } else { - if (debug_get_option_dump_cpu()) - fprintf(stderr, "Cannot set thread affinity for any thread.\n"); - } - } -#endif -} - -static -void check_cpu_caps_override(void) -{ - const char *override_cpu_caps = debug_get_option("GALLIUM_OVERRIDE_CPU_CAPS", NULL); -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 - if (debug_get_bool_option("GALLIUM_NOSSE", false)) { - util_cpu_caps.has_sse = 0; - } -#ifdef DEBUG - /* For simulating less capable machines */ - if (debug_get_bool_option("LP_FORCE_SSE2", false)) { - util_cpu_caps.has_sse3 = 0; - } -#endif -#endif /* DETECT_ARCH_X86 || DETECT_ARCH_X86_64 */ - - if (override_cpu_caps != NULL) { -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 - if (!strcmp(override_cpu_caps, "nosse")) { - util_cpu_caps.has_sse = 0; - } else if (!strcmp(override_cpu_caps, "sse")) { - util_cpu_caps.has_sse2 = 0; - } else if (!strcmp(override_cpu_caps, "sse2")) { - util_cpu_caps.has_sse3 = 0; - } else if (!strcmp(override_cpu_caps, "sse3")) { - util_cpu_caps.has_ssse3 = 0; - } else if (!strcmp(override_cpu_caps, "ssse3")) { - util_cpu_caps.has_sse4_1 = 0; - } else if (!strcmp(override_cpu_caps, "sse4.1")) { - util_cpu_caps.has_avx = 0; - } else if (!strcmp(override_cpu_caps, "avx")) { - util_cpu_caps.has_avx512f = 0; - } -#endif /* DETECT_ARCH_X86 || DETECT_ARCH_X86_64 */ - } - -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 - if (!util_cpu_caps.has_sse) { - util_cpu_caps.has_sse2 = 0; - } - if (!util_cpu_caps.has_sse2) { - util_cpu_caps.has_sse3 = 0; - } - if (!util_cpu_caps.has_sse3) { - util_cpu_caps.has_ssse3 = 0; - } - if (!util_cpu_caps.has_ssse3) { - util_cpu_caps.has_sse4_1 = 0; - } - if (!util_cpu_caps.has_sse4_1) { - util_cpu_caps.has_sse4_2 = 0; - util_cpu_caps.has_avx = 0; - } - if (!util_cpu_caps.has_avx) { - util_cpu_caps.has_avx2 = 0; - util_cpu_caps.has_f16c = 0; - util_cpu_caps.has_fma = 0; - util_cpu_caps.has_avx512f = 0; - } - if (!util_cpu_caps.has_avx512f) { - /* avx512 are cleared */ - util_cpu_caps.has_avx512dq = 0; - util_cpu_caps.has_avx512ifma = 0; - util_cpu_caps.has_avx512pf = 0; - util_cpu_caps.has_avx512er = 0; - util_cpu_caps.has_avx512cd = 0; - util_cpu_caps.has_avx512bw = 0; - util_cpu_caps.has_avx512vl = 0; - util_cpu_caps.has_avx512vbmi = 0; - } -#endif /* DETECT_ARCH_X86 || DETECT_ARCH_X86_64 */ -} - -static -void check_max_vector_bits(void) -{ - /* Leave it at 128, even when no SIMD extensions are available. - * Really needs to be a multiple of 128 so can fit 4 floats. - */ - util_cpu_caps.max_vector_bits = 128; -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 - if (util_cpu_caps.has_avx512f) { - util_cpu_caps.max_vector_bits = 512; - } else if (util_cpu_caps.has_avx) { - util_cpu_caps.max_vector_bits = 256; - } -#endif -} - -void _util_cpu_detect_once(void); - -void -_util_cpu_detect_once(void) -{ - int available_cpus = 0; - int total_cpus = 0; - - memset(&util_cpu_caps, 0, sizeof util_cpu_caps); - - /* Count the number of CPUs in system */ -#if DETECT_OS_WINDOWS - { - SYSTEM_INFO system_info; - GetSystemInfo(&system_info); - available_cpus = MAX2(1, system_info.dwNumberOfProcessors); - } -#elif DETECT_OS_UNIX -# if defined(HAS_SCHED_GETAFFINITY) - { - /* sched_setaffinity() can be used to further restrict the number of - * CPUs on which the process can run. Use sched_getaffinity() to - * determine the true number of available CPUs. - * - * FIXME: The Linux manual page for sched_getaffinity describes how this - * simple implementation will fail with > 1024 CPUs, and we'll fall back - * to the _SC_NPROCESSORS_ONLN path. Support for > 1024 CPUs can be - * added to this path once someone has such a system for testing. - */ - cpu_set_t affin; - if (sched_getaffinity(getpid(), sizeof(affin), &affin) == 0) - available_cpus = CPU_COUNT(&affin); - } -# endif - - /* Linux, FreeBSD, DragonFly, and Mac OS X should have - * _SC_NOPROCESSORS_ONLN. NetBSD and OpenBSD should have HW_NCPUONLINE. - * This is what FFmpeg uses on those platforms. - */ -# if DETECT_OS_BSD && defined(HW_NCPUONLINE) - if (available_cpus == 0) { - const int mib[] = { CTL_HW, HW_NCPUONLINE }; - int ncpu; - size_t len = sizeof(ncpu); - - sysctl(mib, 2, &ncpu, &len, NULL, 0); - available_cpus = ncpu; - } -# elif defined(_SC_NPROCESSORS_ONLN) - if (available_cpus == 0) { - available_cpus = sysconf(_SC_NPROCESSORS_ONLN); - if (available_cpus == ~0) - available_cpus = 1; - } -# elif DETECT_OS_BSD - if (available_cpus == 0) { - const int mib[] = { CTL_HW, HW_NCPU }; - int ncpu; - int len = sizeof(ncpu); - - sysctl(mib, 2, &ncpu, &len, NULL, 0); - available_cpus = ncpu; - } -# endif /* DETECT_OS_BSD */ - - /* Determine the maximum number of CPUs configured in the system. This is - * used to properly set num_cpu_mask_bits below. On BSDs that don't have - * HW_NCPUONLINE, it was not clear whether HW_NCPU is the number of - * configured or the number of online CPUs. For that reason, prefer the - * _SC_NPROCESSORS_CONF path on all BSDs. - */ -# if defined(_SC_NPROCESSORS_CONF) - total_cpus = sysconf(_SC_NPROCESSORS_CONF); - if (total_cpus == ~0) - total_cpus = 1; -# elif DETECT_OS_BSD - { - const int mib[] = { CTL_HW, HW_NCPU }; - int ncpu; - int len = sizeof(ncpu); - - sysctl(mib, 2, &ncpu, &len, NULL, 0); - total_cpus = ncpu; - } -# endif /* DETECT_OS_BSD */ -#endif /* DETECT_OS_UNIX */ - - util_cpu_caps.nr_cpus = MAX2(1, available_cpus); - total_cpus = MAX2(total_cpus, util_cpu_caps.nr_cpus); - - util_cpu_caps.max_cpus = total_cpus; - util_cpu_caps.num_cpu_mask_bits = align(total_cpus, 32); - - /* Make the fallback cacheline size nonzero so that it can be - * safely passed to align(). - */ - util_cpu_caps.cacheline = sizeof(void *); - -#if DETECT_ARCH_X86 || DETECT_ARCH_X86_64 - if (has_cpuid()) { - uint32_t regs[4]; - uint32_t regs2[4]; - - util_cpu_caps.cacheline = 32; - - /* Get max cpuid level */ - cpuid(0x00000000, regs); - - if (regs[0] >= 0x00000001) { - unsigned int cacheline; - - cpuid (0x00000001, regs2); - - util_cpu_caps.x86_cpu_type = (regs2[0] >> 8) & 0xf; - /* Add "extended family". */ - if (util_cpu_caps.x86_cpu_type == 0xf) - util_cpu_caps.x86_cpu_type += ((regs2[0] >> 20) & 0xff); - - switch (util_cpu_caps.x86_cpu_type) { - case 0x17: - util_cpu_caps.family = CPU_AMD_ZEN1_ZEN2; - break; - case 0x18: - util_cpu_caps.family = CPU_AMD_ZEN_HYGON; - break; - case 0x19: - util_cpu_caps.family = CPU_AMD_ZEN3; - break; - default: - if (util_cpu_caps.x86_cpu_type > 0x19) - util_cpu_caps.family = CPU_AMD_ZEN_NEXT; - } - - /* general feature flags */ - util_cpu_caps.has_tsc = (regs2[3] >> 4) & 1; /* 0x0000010 */ - util_cpu_caps.has_mmx = (regs2[3] >> 23) & 1; /* 0x0800000 */ - util_cpu_caps.has_sse = (regs2[3] >> 25) & 1; /* 0x2000000 */ - util_cpu_caps.has_sse2 = (regs2[3] >> 26) & 1; /* 0x4000000 */ - util_cpu_caps.has_sse3 = (regs2[2] >> 0) & 1; /* 0x0000001 */ - util_cpu_caps.has_ssse3 = (regs2[2] >> 9) & 1; /* 0x0000020 */ - util_cpu_caps.has_sse4_1 = (regs2[2] >> 19) & 1; - util_cpu_caps.has_sse4_2 = (regs2[2] >> 20) & 1; - util_cpu_caps.has_popcnt = (regs2[2] >> 23) & 1; - util_cpu_caps.has_avx = ((regs2[2] >> 28) & 1) && // AVX - ((regs2[2] >> 27) & 1) && // OSXSAVE - ((xgetbv() & 6) == 6); // XMM & YMM - util_cpu_caps.has_f16c = ((regs2[2] >> 29) & 1) && util_cpu_caps.has_avx; - util_cpu_caps.has_fma = ((regs2[2] >> 12) & 1) && util_cpu_caps.has_avx; - util_cpu_caps.has_mmx2 = util_cpu_caps.has_sse; /* SSE cpus supports mmxext too */ -#if DETECT_ARCH_X86_64 - util_cpu_caps.has_daz = 1; -#else - util_cpu_caps.has_daz = util_cpu_caps.has_sse3 || - (util_cpu_caps.has_sse2 && sse2_has_daz()); -#endif - - cacheline = ((regs2[1] >> 8) & 0xFF) * 8; - if (cacheline > 0) - util_cpu_caps.cacheline = cacheline; - } - if (util_cpu_caps.has_avx && regs[0] >= 0x00000007) { - uint32_t regs7[4]; - cpuid_count(0x00000007, 0x00000000, regs7); - util_cpu_caps.has_avx2 = (regs7[1] >> 5) & 1; - } - - // check for avx512 - if (((regs2[2] >> 27) & 1) && // OSXSAVE - (xgetbv() & (0x7 << 5)) && // OPMASK: upper-256 enabled by OS - ((xgetbv() & 6) == 6)) { // XMM/YMM enabled by OS - uint32_t regs3[4]; - cpuid_count(0x00000007, 0x00000000, regs3); - util_cpu_caps.has_avx512f = (regs3[1] >> 16) & 1; - util_cpu_caps.has_avx512dq = (regs3[1] >> 17) & 1; - util_cpu_caps.has_avx512ifma = (regs3[1] >> 21) & 1; - util_cpu_caps.has_avx512pf = (regs3[1] >> 26) & 1; - util_cpu_caps.has_avx512er = (regs3[1] >> 27) & 1; - util_cpu_caps.has_avx512cd = (regs3[1] >> 28) & 1; - util_cpu_caps.has_avx512bw = (regs3[1] >> 30) & 1; - util_cpu_caps.has_avx512vl = (regs3[1] >> 31) & 1; - util_cpu_caps.has_avx512vbmi = (regs3[2] >> 1) & 1; - } - - if (regs[1] == 0x756e6547 && regs[2] == 0x6c65746e && regs[3] == 0x49656e69) { - /* GenuineIntel */ - util_cpu_caps.has_intel = 1; - } - - cpuid(0x80000000, regs); - - if (regs[0] >= 0x80000001) { - - cpuid(0x80000001, regs2); - - util_cpu_caps.has_mmx |= (regs2[3] >> 23) & 1; - util_cpu_caps.has_mmx2 |= (regs2[3] >> 22) & 1; - util_cpu_caps.has_3dnow = (regs2[3] >> 31) & 1; - util_cpu_caps.has_3dnow_ext = (regs2[3] >> 30) & 1; - - util_cpu_caps.has_xop = util_cpu_caps.has_avx && - ((regs2[2] >> 11) & 1); - } - - if (regs[0] >= 0x80000006) { - /* should we really do this if the clflush size above worked? */ - unsigned int cacheline; - cpuid(0x80000006, regs2); - cacheline = regs2[2] & 0xFF; - if (cacheline > 0) - util_cpu_caps.cacheline = cacheline; - } - } -#endif /* DETECT_ARCH_X86 || DETECT_ARCH_X86_64 */ - -#if DETECT_ARCH_ARM || DETECT_ARCH_AARCH64 - check_os_arm_support(); -#endif - -#if DETECT_ARCH_PPC - check_os_altivec_support(); -#endif /* DETECT_ARCH_PPC */ - -#if DETECT_ARCH_MIPS64 - check_os_mips64_support(); -#endif /* DETECT_ARCH_MIPS64 */ - -#if DETECT_ARCH_S390 - util_cpu_caps.family = CPU_S390X; -#endif - - check_cpu_caps_override(); - - /* max_vector_bits should be checked after cpu caps override */ - check_max_vector_bits(); - - get_cpu_topology(); - - if (debug_get_option_dump_cpu()) { - printf("util_cpu_caps.nr_cpus = %u\n", util_cpu_caps.nr_cpus); - - printf("util_cpu_caps.x86_cpu_type = %u\n", util_cpu_caps.x86_cpu_type); - printf("util_cpu_caps.cacheline = %u\n", util_cpu_caps.cacheline); - - printf("util_cpu_caps.has_tsc = %u\n", util_cpu_caps.has_tsc); - printf("util_cpu_caps.has_mmx = %u\n", util_cpu_caps.has_mmx); - printf("util_cpu_caps.has_mmx2 = %u\n", util_cpu_caps.has_mmx2); - printf("util_cpu_caps.has_sse = %u\n", util_cpu_caps.has_sse); - printf("util_cpu_caps.has_sse2 = %u\n", util_cpu_caps.has_sse2); - printf("util_cpu_caps.has_sse3 = %u\n", util_cpu_caps.has_sse3); - printf("util_cpu_caps.has_ssse3 = %u\n", util_cpu_caps.has_ssse3); - printf("util_cpu_caps.has_sse4_1 = %u\n", util_cpu_caps.has_sse4_1); - printf("util_cpu_caps.has_sse4_2 = %u\n", util_cpu_caps.has_sse4_2); - printf("util_cpu_caps.has_avx = %u\n", util_cpu_caps.has_avx); - printf("util_cpu_caps.has_avx2 = %u\n", util_cpu_caps.has_avx2); - printf("util_cpu_caps.has_f16c = %u\n", util_cpu_caps.has_f16c); - printf("util_cpu_caps.has_popcnt = %u\n", util_cpu_caps.has_popcnt); - printf("util_cpu_caps.has_3dnow = %u\n", util_cpu_caps.has_3dnow); - printf("util_cpu_caps.has_3dnow_ext = %u\n", util_cpu_caps.has_3dnow_ext); - printf("util_cpu_caps.has_xop = %u\n", util_cpu_caps.has_xop); - printf("util_cpu_caps.has_altivec = %u\n", util_cpu_caps.has_altivec); - printf("util_cpu_caps.has_vsx = %u\n", util_cpu_caps.has_vsx); - printf("util_cpu_caps.has_neon = %u\n", util_cpu_caps.has_neon); - printf("util_cpu_caps.has_msa = %u\n", util_cpu_caps.has_msa); - printf("util_cpu_caps.has_daz = %u\n", util_cpu_caps.has_daz); - printf("util_cpu_caps.has_avx512f = %u\n", util_cpu_caps.has_avx512f); - printf("util_cpu_caps.has_avx512dq = %u\n", util_cpu_caps.has_avx512dq); - printf("util_cpu_caps.has_avx512ifma = %u\n", util_cpu_caps.has_avx512ifma); - printf("util_cpu_caps.has_avx512pf = %u\n", util_cpu_caps.has_avx512pf); - printf("util_cpu_caps.has_avx512er = %u\n", util_cpu_caps.has_avx512er); - printf("util_cpu_caps.has_avx512cd = %u\n", util_cpu_caps.has_avx512cd); - printf("util_cpu_caps.has_avx512bw = %u\n", util_cpu_caps.has_avx512bw); - printf("util_cpu_caps.has_avx512vl = %u\n", util_cpu_caps.has_avx512vl); - printf("util_cpu_caps.has_avx512vbmi = %u\n", util_cpu_caps.has_avx512vbmi); - printf("util_cpu_caps.num_L3_caches = %u\n", util_cpu_caps.num_L3_caches); - printf("util_cpu_caps.num_cpu_mask_bits = %u\n", util_cpu_caps.num_cpu_mask_bits); - } - _util_cpu_caps_state.caps = util_cpu_caps; - - /* This must happen at the end as it's used to guard everything else */ - p_atomic_set(&_util_cpu_caps_state.detect_done, 1); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_cpu_detect.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_cpu_detect.h deleted file mode 100644 index f1be206..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_cpu_detect.h +++ /dev/null @@ -1,185 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 Dennis Smit - * 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 - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, 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 (including the next - * paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * AUTHORS, COPYRIGHT HOLDERS, AND/OR THEIR SUPPLIERS 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 - * CPU feature detection. - * - * @author Dennis Smit - * @author Based on the work of Eric Anholt - */ - -#ifndef _UTIL_CPU_DETECT_H -#define _UTIL_CPU_DETECT_H - -#include - -#include "macros.h" -#include "u_atomic.h" -#include "u_thread.h" - - -/* Maximal cpu count for update affinity */ -#define UTIL_MAX_CPUS 1024 /* this should be enough */ - -#ifdef __cplusplus -extern "C" { -#endif - -enum cpu_family { - CPU_UNKNOWN, - - CPU_AMD_ZEN1_ZEN2, - CPU_AMD_ZEN_HYGON, - CPU_AMD_ZEN3, - CPU_AMD_ZEN_NEXT, - CPU_AMD_LAST, - - CPU_S390X, -}; - -typedef uint32_t util_affinity_mask[UTIL_MAX_CPUS / 32]; - -struct util_cpu_caps_t { - /** - * Number of CPUs available to the process. - * - * This will be less than or equal to \c max_cpus. This is the number of - * CPUs that are online and available to the process. - */ - int16_t nr_cpus; - - /** - * Maximum number of CPUs that can be online in the system. - * - * This will be greater than or equal to \c nr_cpus. This is the number of - * CPUs installed in the system. \c nr_cpus will be less if some CPUs are - * offline. - */ - int16_t max_cpus; - - enum cpu_family family; - - /* Feature flags */ - int x86_cpu_type; - unsigned cacheline; - - unsigned has_intel:1; - unsigned has_tsc:1; - unsigned has_mmx:1; - unsigned has_mmx2:1; - unsigned has_sse:1; - unsigned has_sse2:1; - unsigned has_sse3:1; - unsigned has_ssse3:1; - unsigned has_sse4_1:1; - unsigned has_sse4_2:1; - unsigned has_popcnt:1; - unsigned has_avx:1; - unsigned has_avx2:1; - unsigned has_f16c:1; - unsigned has_fma:1; - unsigned has_3dnow:1; - unsigned has_3dnow_ext:1; - unsigned has_xop:1; - unsigned has_altivec:1; - unsigned has_vsx:1; - unsigned has_daz:1; - unsigned has_neon:1; - unsigned has_msa:1; - - unsigned has_avx512f:1; - unsigned has_avx512dq:1; - unsigned has_avx512ifma:1; - unsigned has_avx512pf:1; - unsigned has_avx512er:1; - unsigned has_avx512cd:1; - unsigned has_avx512bw:1; - unsigned has_avx512vl:1; - unsigned has_avx512vbmi:1; - - unsigned num_L3_caches; - unsigned num_cpu_mask_bits; - unsigned max_vector_bits; - - uint16_t cpu_to_L3[UTIL_MAX_CPUS]; - /* Affinity masks for each L3 cache. */ - util_affinity_mask *L3_affinity_mask; -}; - -struct _util_cpu_caps_state_t { - once_flag once_flag; - /** - * Initialized to 0 and set to non-zero with an atomic after the entire - * struct has been initialized. - */ - uint32_t detect_done; - struct util_cpu_caps_t caps; -}; - -#define U_CPU_INVALID_L3 0xffff - -static inline ATTRIBUTE_CONST const struct util_cpu_caps_t * -util_get_cpu_caps(void) -{ - extern void _util_cpu_detect_once(void); - extern struct _util_cpu_caps_state_t _util_cpu_caps_state; - - /* On most CPU architectures, an atomic read is simply a regular memory - * load instruction with some extra compiler magic to prevent code - * re-ordering around it. The perf impact of doing this check should be - * negligible in most cases. - * - * Also, even though it looks like a bit of a lie, we've declared this - * function with ATTRIBUTE_CONST. The GCC docs say: - * - * "Calls to functions whose return value is not affected by changes to - * the observable state of the program and that have no observable - * effects on such state other than to return a value may lend - * themselves to optimizations such as common subexpression elimination. - * Declaring such functions with the const attribute allows GCC to avoid - * emitting some calls in repeated invocations of the function with the - * same argument values." - * - * The word "observable" is important here. With the exception of a - * llvmpipe debug flag behind an environment variable and a few unit tests, - * all of which emulate worse CPUs, this function neither affects nor is - * affected by any "observable" state. It has its own internal state for - * sure, but that state is such that it appears to return exactly the same - * value with the same internal data every time. - */ - if (unlikely(!p_atomic_read(&_util_cpu_caps_state.detect_done))) - call_once(&_util_cpu_caps_state.once_flag, _util_cpu_detect_once); - - return &_util_cpu_caps_state.caps; -} - -#ifdef __cplusplus -} -#endif - - -#endif /* _UTIL_CPU_DETECT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug.c deleted file mode 100644 index 9089112..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug.c +++ /dev/null @@ -1,501 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * Copyright (c) 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#include "u_atomic.h" -#include "u_debug.h" -#include "u_string.h" -#include "u_math.h" -#include - -#include -#include /* CHAR_BIT */ -#include /* isalnum */ - -#ifdef _WIN32 -#include -#include -#endif - - -void -_debug_vprintf(const char *format, va_list ap) -{ - static char buf[4096] = {'\0'}; -#if DETECT_OS_WINDOWS - /* We buffer until we find a newline. */ - size_t len = strlen(buf); - int ret = vsnprintf(buf + len, sizeof(buf) - len, format, ap); - if (ret > (int)(sizeof(buf) - len - 1) || strchr(buf + len, '\n')) { - os_log_message(buf); - buf[0] = '\0'; - } -#else - vsnprintf(buf, sizeof(buf), format, ap); - os_log_message(buf); -#endif -} - - -void -_util_debug_message(struct util_debug_callback *cb, - unsigned *id, - enum util_debug_type type, - const char *fmt, ...) -{ - if (!cb || !cb->debug_message) - return; - va_list args; - va_start(args, fmt); - cb->debug_message(cb->data, id, type, fmt, args); - va_end(args); -} - - -#ifdef _WIN32 -void -debug_disable_win32_error_dialogs(void) -{ - /* When Windows' error message boxes are disabled for this process (as is - * typically the case when running tests in an automated fashion) we disable - * CRT message boxes too. - */ - UINT uMode = SetErrorMode(0); - SetErrorMode(uMode); -#ifndef _GAMING_XBOX - if (uMode & SEM_FAILCRITICALERRORS) { - /* Disable assertion failure message box. - * http://msdn.microsoft.com/en-us/library/sas1dkb2.aspx - */ - _set_error_mode(_OUT_TO_STDERR); -#ifdef _MSC_VER - /* Disable abort message box. - * http://msdn.microsoft.com/en-us/library/e631wekh.aspx - */ - _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); -#endif - } -#endif /* _GAMING_XBOX */ -} -#endif /* _WIN32 */ - -bool -debug_parse_bool_option(const char *str, bool dfault) -{ - bool result; - - if (str == NULL) - result = dfault; - else if (!strcmp(str, "0")) - result = false; - else if (!strcasecmp(str, "n")) - result = false; - else if (!strcasecmp(str, "no")) - result = false; - else if (!strcasecmp(str, "f")) - result = false; - else if (!strcasecmp(str, "false")) - result = false; - else if (!strcmp(str, "1")) - result = true; - else if (!strcasecmp(str, "y")) - result = true; - else if (!strcasecmp(str, "yes")) - result = true; - else if (!strcasecmp(str, "t")) - result = true; - else if (!strcasecmp(str, "true")) - result = true; - else - result = dfault; - return result; -} - -static bool -debug_get_option_should_print(void) -{ - static bool initialized = false; - static bool value = false; - - if (unlikely(!p_atomic_read_relaxed(&initialized))) { - bool parsed_value = debug_parse_bool_option(os_get_option("GALLIUM_PRINT_OPTIONS"), false); - p_atomic_set(&value, parsed_value); - p_atomic_set(&initialized, true); - } - - /* We do not print value of GALLIUM_PRINT_OPTIONS intentionally. */ - return value; -} - - -const char * -debug_get_option(const char *name, const char *dfault) -{ - const char *result; - - result = os_get_option(name); - if (!result) - result = dfault; - - if (debug_get_option_should_print()) - debug_printf("%s: %s = %s\n", __func__, name, - result ? result : "(null)"); - - return result; -} - - -const char * -debug_get_option_cached(const char *name, const char *dfault) -{ - const char *result; - - result = os_get_option_cached(name); - if (!result) - result = dfault; - - if (debug_get_option_should_print()) - debug_printf("%s: %s = %s\n", __FUNCTION__, name, - result ? result : "(null)"); - - return result; -} - - -/** - * Reads an environment variable and interprets its value as a boolean. - * Recognizes 0/n/no/f/false case insensitive as false. - * Recognizes 1/y/yes/t/true case insensitive as true. - * Other values result in the default value. - */ -bool -debug_get_bool_option(const char *name, bool dfault) -{ - bool result = debug_parse_bool_option(os_get_option(name), dfault); - if (debug_get_option_should_print()) - debug_printf("%s: %s = %s\n", __func__, name, - result ? "TRUE" : "FALSE"); - - return result; -} - - -int64_t -debug_parse_num_option(const char *str, int64_t dfault) -{ - int64_t result; - if (!str) { - result = dfault; - } else { - char *endptr; - - result = strtoll(str, &endptr, 0); - if (str == endptr) { - /* Restore the default value when no digits were found. */ - result = dfault; - } - } - return result; -} - -int64_t -debug_get_num_option(const char *name, int64_t dfault) -{ - int64_t result = debug_parse_num_option(os_get_option(name), dfault); - - if (debug_get_option_should_print()) - debug_printf("%s: %s = %"PRId64"\n", __func__, name, result); - - return result; -} - -void -debug_get_version_option(const char *name, unsigned *major, unsigned *minor) -{ - const char *str; - - str = os_get_option(name); - if (str) { - unsigned v_maj, v_min; - int n; - - n = sscanf(str, "%u.%u", &v_maj, &v_min); - if (n != 2) { - debug_printf("Illegal version specified for %s : %s\n", name, str); - return; - } - *major = v_maj; - *minor = v_min; - } - - if (debug_get_option_should_print()) - debug_printf("%s: %s = %u.%u\n", __func__, name, *major, *minor); - - return; -} - -static bool -str_has_option(const char *str, const char *name) -{ - /* Empty string. */ - if (!*str) { - return false; - } - - /* OPTION=all */ - if (!strcmp(str, "all")) { - return true; - } - - /* Find 'name' in 'str' surrounded by non-alphanumeric characters. */ - { - const char *start = str; - unsigned name_len = strlen(name); - - /* 'start' is the beginning of the currently-parsed word, - * we increment 'str' each iteration. - * if we find either the end of string or a non-alphanumeric character, - * we compare 'start' up to 'str-1' with 'name'. */ - - while (1) { - if (!*str || !(isalnum(*str) || *str == '_')) { - if (str-start == name_len && - !memcmp(start, name, name_len)) { - return true; - } - - if (!*str) { - return false; - } - - start = str+1; - } - - str++; - } - } - - return false; -} - - -uint64_t -debug_parse_flags_option(const char *name, - const char *str, - const struct debug_named_value *flags, - uint64_t dfault) -{ - uint64_t result; - const struct debug_named_value *orig = flags; - unsigned namealign = 0; - - if (!str) - result = dfault; - else if (!strcmp(str, "help")) { - result = dfault; - _debug_printf("%s: help for %s:\n", __func__, name); - for (; flags->name; ++flags) - namealign = MAX2(namealign, strlen(flags->name)); - for (flags = orig; flags->name; ++flags) - _debug_printf("| %*s [0x%0*"PRIx64"]%s%s\n", namealign, flags->name, - (int)sizeof(uint64_t)*CHAR_BIT/4, flags->value, - flags->desc ? " " : "", flags->desc ? flags->desc : ""); - } - else { - result = 0; - while (flags->name) { - if (str_has_option(str, flags->name)) - result |= flags->value; - ++flags; - } - } - - return result; -} - -uint64_t -debug_get_flags_option(const char *name, - const struct debug_named_value *flags, - uint64_t dfault) -{ - const char *str = os_get_option(name); - uint64_t result = debug_parse_flags_option(name, str, flags, dfault); - - if (debug_get_option_should_print()) { - if (str) { - debug_printf("%s: %s = 0x%"PRIx64" (%s)\n", - __func__, name, result, str); - } else { - debug_printf("%s: %s = 0x%"PRIx64"\n", __func__, name, result); - } - } - - return result; -} - - -const char * -debug_dump_enum(const struct debug_named_value *names, - uint64_t value) -{ - static char rest[64]; - - while (names->name) { - if (names->value == value) - return names->name; - ++names; - } - - snprintf(rest, sizeof(rest), "0x%08"PRIx64, value); - return rest; -} - - -const char * -debug_dump_flags(const struct debug_named_value *names, uint64_t value) -{ - static char output[4096]; - static char rest[256]; - int first = 1; - - output[0] = '\0'; - - while (names->name) { - if ((names->value & value) == names->value) { - if (!first) - strncat(output, "|", sizeof(output) - strlen(output) - 1); - else - first = 0; - strncat(output, names->name, sizeof(output) - strlen(output) - 1); - output[sizeof(output) - 1] = '\0'; - value &= ~names->value; - } - ++names; - } - - if (value) { - if (!first) - strncat(output, "|", sizeof(output) - strlen(output) - 1); - else - first = 0; - - snprintf(rest, sizeof(rest), "0x%08"PRIx64, value); - strncat(output, rest, sizeof(output) - strlen(output) - 1); - output[sizeof(output) - 1] = '\0'; - } - - if (first) - return "0"; - - return output; -} - - -uint64_t -parse_debug_string(const char *debug, - const struct debug_control *control) -{ - uint64_t flag = 0; - - if (debug != NULL) { - for (; control->string != NULL; control++) { - if (!strcmp(debug, "all")) { - flag |= control->flag; - - } else { - const char *s = debug; - unsigned n; - - for (; n = strcspn(s, ", "), *s; s += MAX2(1, n)) { - if (strlen(control->string) == n && - !strncmp(control->string, s, n)) - flag |= control->flag; - } - } - } - } - - return flag; -} - - -uint64_t -parse_enable_string(const char *debug, - uint64_t default_value, - const struct debug_control *control) -{ - uint64_t flag = default_value; - - if (debug != NULL) { - for (; control->string != NULL; control++) { - if (!strcmp(debug, "all")) { - flag |= control->flag; - - } else { - const char *s = debug; - unsigned n; - - for (; n = strcspn(s, ", "), *s; s += MAX2(1, n)) { - bool enable; - if (s[0] == '+') { - enable = true; - s++; n--; - } else if (s[0] == '-') { - enable = false; - s++; n--; - } else { - enable = true; - } - if (strlen(control->string) == n && - !strncmp(control->string, s, n)) { - if (enable) - flag |= control->flag; - else - flag &= ~control->flag; - } - } - } - } - } - - return flag; -} - - -bool -comma_separated_list_contains(const char *list, const char *s) -{ - assert(list); - const size_t len = strlen(s); - - for (unsigned n; n = strcspn(list, ","), *list; list += MAX2(1, n)) { - if (n == len && !strncmp(list, s, n)) - return true; - } - - return false; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug.h deleted file mode 100644 index e87c32a..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug.h +++ /dev/null @@ -1,456 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Cross-platform debugging helpers. - * - * For now it just has assert and printf replacements, but it might be extended - * with stack trace reports and more advanced logging in the near future. - * - * @author Jose Fonseca - */ - -#ifndef U_DEBUG_H_ -#define U_DEBUG_H_ - -#include -#include -#if !defined(_WIN32) -#include -#include -#endif - -#include "os_misc.h" -#include "u_atomic.h" -#include "detect_os.h" -#include "macros.h" - -#if DETECT_OS_HAIKU -/* Haiku provides debug_printf in libroot with OS.h */ -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -enum util_debug_type -{ - UTIL_DEBUG_TYPE_OUT_OF_MEMORY = 1, - UTIL_DEBUG_TYPE_ERROR, - UTIL_DEBUG_TYPE_SHADER_INFO, - UTIL_DEBUG_TYPE_PERF_INFO, - UTIL_DEBUG_TYPE_INFO, - UTIL_DEBUG_TYPE_FALLBACK, - UTIL_DEBUG_TYPE_CONFORMANCE, -}; - -/** - * Structure that contains a callback for debug messages from the driver back - * to the gallium frontend. - */ -struct util_debug_callback -{ - /** - * When set to \c true, the callback may be called asynchronously from a - * driver-created thread. - */ - bool async; - - /** - * Callback for the driver to report debug/performance/etc information back - * to the gallium frontend. - * - * \param data user-supplied data pointer - * \param id message type identifier, if pointed value is 0, then a - * new id is assigned - * \param type UTIL_DEBUG_TYPE_* - * \param format printf-style format string - * \param args args for format string - */ - void (*debug_message)(void *data, - unsigned *id, - enum util_debug_type type, - const char *fmt, - va_list args); - void *data; -}; - -#define _util_printf_format(fmt, list) PRINTFLIKE(fmt, list) - -void _debug_vprintf(const char *format, va_list ap); - - -static inline void -_debug_printf(const char *format, ...) -{ - va_list ap; - va_start(ap, format); - _debug_vprintf(format, ap); - va_end(ap); -} - - -/** - * Print debug messages. - * - * The actual channel used to output debug message is platform specific. To - * avoid misformating or truncation, follow these rules of thumb: - * - output whole lines - * - avoid outputing large strings (512 bytes is the current maximum length - * that is guaranteed to be printed in all platforms) - */ -#if !DETECT_OS_HAIKU -static inline void -debug_printf(const char *format, ...) _util_printf_format(1,2); - -static inline void -debug_printf(const char *format, ...) -{ -#ifdef DEBUG - va_list ap; - va_start(ap, format); - _debug_vprintf(format, ap); - va_end(ap); -#else - (void) format; /* silence warning */ -#endif -} -#endif - - -/* - * ... isn't portable so we need to pass arguments in parentheses. - * - * usage: - * debug_printf_once(("answer: %i\n", 42)); - */ -#define debug_printf_once(args) \ - do { \ - static bool once = true; \ - if (once) { \ - once = false; \ - debug_printf args; \ - } \ - } while (0) - - -#ifdef DEBUG -#define debug_vprintf(_format, _ap) _debug_vprintf(_format, _ap) -#else -#define debug_vprintf(_format, _ap) ((void)0) -#endif - -#ifdef _WIN32 -/** - * Disable Win32 interactive error message boxes. - * - * Should be called as soon as possible for effectiveness. - */ -void -debug_disable_win32_error_dialogs(void); -#endif - - -/** - * Hard-coded breakpoint. - */ -#ifdef DEBUG -#define debug_break() os_break() -#else /* !DEBUG */ -#define debug_break() ((void)0) -#endif /* !DEBUG */ - - -void -debug_get_version_option(const char *name, unsigned *major, unsigned *minor); - - -/** - * Output the current function name. - */ -#ifdef DEBUG -#define debug_checkpoint() \ - _debug_printf("%s\n", __func__) -#else -#define debug_checkpoint() \ - ((void)0) -#endif - - -/** - * Output the full source code position. - */ -#ifdef DEBUG -#define debug_checkpoint_full() \ - _debug_printf("%s:%u:%s\n", __FILE__, __LINE__, __func__) -#else -#define debug_checkpoint_full() \ - ((void)0) -#endif - - -/** - * Output a warning message. Muted on release version. - */ -#ifdef DEBUG -#define debug_warning(__msg) \ - _debug_printf("%s:%u:%s: warning: %s\n", __FILE__, __LINE__, __func__, __msg) -#else -#define debug_warning(__msg) \ - ((void)0) -#endif - - -/** - * Emit a warning message, but only once. - */ -#ifdef DEBUG -#define debug_warn_once(__msg) \ - do { \ - static bool warned = false; \ - if (!warned) { \ - _debug_printf("%s:%u:%s: one time warning: %s\n", \ - __FILE__, __LINE__, __func__, __msg); \ - warned = true; \ - } \ - } while (0) -#else -#define debug_warn_once(__msg) \ - ((void)0) -#endif - - -/** - * Output an error message. Not muted on release version. - */ -#ifdef DEBUG -#define debug_error(__msg) \ - _debug_printf("%s:%u:%s: error: %s\n", __FILE__, __LINE__, __func__, __msg) -#else -#define debug_error(__msg) \ - _debug_printf("error: %s\n", __msg) -#endif - -/** - * Output a debug log message to the debug info callback. - */ -#define util_debug_message(cb, type, fmt, ...) do { \ - static unsigned id = 0; \ - _util_debug_message(cb, &id, \ - UTIL_DEBUG_TYPE_ ## type, \ - fmt, ##__VA_ARGS__); \ -} while (0) - -void -_util_debug_message( - struct util_debug_callback *cb, - unsigned *id, - enum util_debug_type type, - const char *fmt, ...) _util_printf_format(4, 5); - - -/** - * Used by debug_dump_enum and debug_dump_flags to describe symbols. - */ -struct debug_named_value -{ - const char *name; - uint64_t value; - const char *desc; -}; - - -/** - * Some C pre-processor magic to simplify creating named values. - * - * Example: - * @code - * static const debug_named_value my_names[] = { - * DEBUG_NAMED_VALUE(MY_ENUM_VALUE_X), - * DEBUG_NAMED_VALUE(MY_ENUM_VALUE_Y), - * DEBUG_NAMED_VALUE(MY_ENUM_VALUE_Z), - * DEBUG_NAMED_VALUE_END - * }; - * - * ... - * debug_printf("%s = %s\n", - * name, - * debug_dump_enum(my_names, my_value)); - * ... - * @endcode - */ -#define DEBUG_NAMED_VALUE(__symbol) {#__symbol, (uint64_t)__symbol, NULL} -#define DEBUG_NAMED_VALUE_WITH_DESCRIPTION(__symbol, __desc) {#__symbol, (uint64_t)__symbol, __desc} -#define DEBUG_NAMED_VALUE_END {NULL, 0, NULL} - - -/** - * Convert a enum value to a string. - */ -const char * -debug_dump_enum(const struct debug_named_value *names, - uint64_t value); - -/** - * Convert binary flags value to a string. - */ -const char * -debug_dump_flags(const struct debug_named_value *names, - uint64_t value); - - -struct debug_control { - const char * string; - uint64_t flag; -}; - -uint64_t -parse_debug_string(const char *debug, - const struct debug_control *control); - - -uint64_t -parse_enable_string(const char *debug, - uint64_t default_value, - const struct debug_control *control); - - -bool -comma_separated_list_contains(const char *list, const char *s); - -/** - * Get option. - * - * It is an alias for getenv on Unix and Windows. - * - */ -const char * -debug_get_option(const char *name, const char *dfault); - -const char * -debug_get_option_cached(const char *name, const char *dfault); - -bool -debug_parse_bool_option(const char *str, bool dfault); - -bool -debug_get_bool_option(const char *name, bool dfault); - -int64_t -debug_parse_num_option(const char *str, int64_t dfault); - -int64_t -debug_get_num_option(const char *name, int64_t dfault); - -uint64_t -debug_parse_flags_option(const char *name, - const char *str, - const struct debug_named_value *flags, - uint64_t dfault); - -uint64_t -debug_get_flags_option(const char *name, - const struct debug_named_value *flags, - uint64_t dfault); - -#define DEBUG_GET_ONCE_OPTION(suffix, name, dfault) \ -static const char * \ -debug_get_option_ ## suffix (void) \ -{ \ - static bool initialized = false; \ - static const char * value; \ - if (unlikely(!p_atomic_read_relaxed(&initialized))) { \ - const char *str = debug_get_option_cached(name, dfault); \ - p_atomic_set(&value, str); \ - p_atomic_set(&initialized, true); \ - } \ - return value; \ -} - -static inline bool -__check_suid(void) -{ -#if !defined(_WIN32) - if (geteuid() != getuid()) - return true; -#endif - return false; -} - -#define DEBUG_GET_ONCE_BOOL_OPTION(sufix, name, dfault) \ -static bool \ -debug_get_option_ ## sufix (void) \ -{ \ - static bool initialized = false; \ - static bool value; \ - if (unlikely(!p_atomic_read_relaxed(&initialized))) { \ - const char *str = debug_get_option_cached(name, NULL); \ - bool parsed_value = debug_parse_bool_option(str, dfault); \ - p_atomic_set(&value, parsed_value); \ - p_atomic_set(&initialized, true); \ - } \ - return value; \ -} - -#define DEBUG_GET_ONCE_NUM_OPTION(sufix, name, dfault) \ -static int64_t \ -debug_get_option_ ## sufix (void) \ -{ \ - static bool initialized = false; \ - static int64_t value; \ - if (unlikely(!p_atomic_read_relaxed(&initialized))) { \ - const char *str = debug_get_option_cached(name, NULL); \ - int64_t parsed_value = debug_parse_num_option(str, dfault); \ - p_atomic_set(&value, parsed_value); \ - p_atomic_set(&initialized, true); \ - } \ - return value; \ -} - -#define DEBUG_GET_ONCE_FLAGS_OPTION(sufix, name, flags, dfault) \ -static uint64_t \ -debug_get_option_ ## sufix (void) \ -{ \ - static bool initialized = false; \ - static uint64_t value; \ - if (unlikely(!p_atomic_read_relaxed(&initialized))) { \ - const char *str = debug_get_option_cached(name, NULL); \ - uint64_t parsed_value = debug_parse_flags_option(name, str, flags, dfault); \ - p_atomic_set(&value, parsed_value); \ - p_atomic_set(&initialized, true); \ - } \ - return value; \ -} - - -#ifdef __cplusplus -} -#endif - -#endif /* U_DEBUG_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_describe.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_describe.c deleted file mode 100644 index 92beb79..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_describe.c +++ /dev/null @@ -1,109 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 Luca Barbieri - * - * 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 (including the - * next paragraph) 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 THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#include "../gallium/include/pipe/p_state.h" -#include "./format/u_format.h" -#include "u_debug_describe.h" -#include "u_string.h" - -void -debug_describe_reference(char* buf, UNUSED const struct pipe_reference*ptr) -{ - strcpy(buf, "pipe_object"); -} - -void -debug_describe_resource(char* buf, const struct pipe_resource *ptr) -{ - switch(ptr->target) - { - case PIPE_BUFFER: - sprintf(buf, "pipe_buffer<%u>", (unsigned)util_format_get_stride(ptr->format, ptr->width0)); - break; - case PIPE_TEXTURE_1D: - sprintf(buf, "pipe_texture1d<%u,%s,%u>", ptr->width0, util_format_short_name(ptr->format), ptr->last_level); - break; - case PIPE_TEXTURE_2D: - sprintf(buf, "pipe_texture2d<%u,%u,%s,%u>", ptr->width0, ptr->height0, util_format_short_name(ptr->format), ptr->last_level); - break; - case PIPE_TEXTURE_RECT: - sprintf(buf, "pipe_texture_rect<%u,%u,%s>", ptr->width0, ptr->height0, util_format_short_name(ptr->format)); - break; - case PIPE_TEXTURE_CUBE: - sprintf(buf, "pipe_texture_cube<%u,%u,%s,%u>", ptr->width0, ptr->height0, util_format_short_name(ptr->format), ptr->last_level); - break; - case PIPE_TEXTURE_3D: - sprintf(buf, "pipe_texture3d<%u,%u,%u,%s,%u>", ptr->width0, ptr->height0, ptr->depth0, util_format_short_name(ptr->format), ptr->last_level); - break; - case PIPE_TEXTURE_1D_ARRAY: - sprintf(buf, "pipe_texture_1darray<%u,%u,%s,%u>", ptr->width0, ptr->array_size, util_format_short_name(ptr->format), ptr->last_level); - break; - case PIPE_TEXTURE_2D_ARRAY: - sprintf(buf, "pipe_texture_2darray<%u,%u,%u,%s,%u>", ptr->width0, ptr->height0, ptr->array_size, util_format_short_name(ptr->format), ptr->last_level); - break; - case PIPE_TEXTURE_CUBE_ARRAY: - sprintf(buf, "pipe_texture_cubearray<%u,%u,%u,%s,%u>", ptr->width0, ptr->height0, ptr->array_size, util_format_short_name(ptr->format), ptr->last_level); - break; - default: - sprintf(buf, "pipe_martian_resource<%u>", ptr->target); - break; - } -} - -void -debug_describe_surface(char* buf, const struct pipe_surface *ptr) -{ - char res[128]; - debug_describe_resource(res, ptr->texture); - sprintf(buf, "pipe_surface<%s,%u,%u,%u>", res, ptr->u.tex.level, ptr->u.tex.first_layer, ptr->u.tex.last_layer); -} - -void -debug_describe_sampler_view(char* buf, const struct pipe_sampler_view *ptr) -{ - char res[128]; - debug_describe_resource(res, ptr->texture); - sprintf(buf, "pipe_sampler_view<%s,%s>", res, util_format_short_name(ptr->format)); -} - -void -debug_describe_image_view(char* buf, const struct pipe_image_view *ptr) -{ - char res[128]; - debug_describe_resource(res, ptr->resource); - sprintf(buf, "pipe_image_view<%s,%s>", res, - util_format_short_name(ptr->format)); -} - -void -debug_describe_so_target(char* buf, - const struct pipe_stream_output_target *ptr) -{ - char res[128]; - debug_describe_resource(res, ptr->buffer); - sprintf(buf, "pipe_stream_output_target<%s,%u,%u>", res, - ptr->buffer_offset, ptr->buffer_size); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_describe.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_describe.h deleted file mode 100644 index 2172ecb..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_describe.h +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 Luca Barbieri - * - * 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 (including the - * next paragraph) 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 THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef U_DEBUG_DESCRIBE_H_ -#define U_DEBUG_DESCRIBE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -struct pipe_reference; -struct pipe_resource; -struct pipe_surface; -struct pipe_sampler_view; -struct pipe_image_view; - -/* a 256-byte buffer is necessary and sufficient */ -void debug_describe_reference(char* buf, const struct pipe_reference*ptr); -void debug_describe_resource(char* buf, const struct pipe_resource *ptr); -void debug_describe_surface(char* buf, const struct pipe_surface *ptr); -void debug_describe_sampler_view(char* buf, const struct pipe_sampler_view *ptr); -void debug_describe_image_view(char* buf, const struct pipe_image_view *ptr); -void debug_describe_so_target(char* buf, - const struct pipe_stream_output_target *ptr); - -#ifdef __cplusplus -} -#endif - -#endif /* U_DEBUG_DESCRIBE_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_memory.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_memory.c deleted file mode 100644 index 817dce4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_memory.c +++ /dev/null @@ -1,452 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Memory debugging. - * - * @author Jos√© Fonseca - */ - -#include "detect.h" - -#define DEBUG_MEMORY_IMPLEMENTATION - -#include "u_thread.h" - -#include "simple_mtx.h" -#include "u_debug.h" -#include "u_debug_stack.h" -#include "list.h" -#include "os_memory.h" -#include "os_memory_debug.h" - - -#define DEBUG_MEMORY_MAGIC 0x6e34090aU -#define DEBUG_MEMORY_STACK 0 /* XXX: disabled until we have symbol lookup */ - -/** - * Set to 1 to enable checking of freed blocks of memory. - * Basically, don't really deallocate freed memory; keep it in the list - * but mark it as freed and do extra checking in debug_memory_check(). - * This can detect some cases of use-after-free. But note that since we - * never really free anything this will use a lot of memory. - */ -#define DEBUG_FREED_MEMORY 0 -#define DEBUG_FREED_BYTE 0x33 - - -struct debug_memory_header -{ - struct list_head head; - - unsigned long no; - const char *file; - unsigned line; - const char *function; -#if DEBUG_MEMORY_STACK - struct debug_stack_frame backtrace[DEBUG_MEMORY_STACK]; -#endif - size_t size; -#if DEBUG_FREED_MEMORY - bool freed; /**< Is this a freed block? */ -#endif - - unsigned magic; - unsigned tag; -}; - -struct debug_memory_footer -{ - unsigned magic; -}; - - -static struct list_head list = { &list, &list }; - -static simple_mtx_t list_mutex = SIMPLE_MTX_INITIALIZER; - -static unsigned long last_no = 0; - - -static inline struct debug_memory_header * -header_from_data(void *data) -{ - if (data) - return (struct debug_memory_header *)((char *)data - sizeof(struct debug_memory_header)); - else - return NULL; -} - -static inline void * -data_from_header(struct debug_memory_header *hdr) -{ - if (hdr) - return (void *)((char *)hdr + sizeof(struct debug_memory_header)); - else - return NULL; -} - -static inline struct debug_memory_footer * -footer_from_header(struct debug_memory_header *hdr) -{ - if (hdr) - return (struct debug_memory_footer *)((char *)hdr + sizeof(struct debug_memory_header) + hdr->size); - else - return NULL; -} - - -void * -debug_malloc(const char *file, unsigned line, const char *function, - size_t size) -{ - struct debug_memory_header *hdr; - struct debug_memory_footer *ftr; - - hdr = os_malloc(sizeof(*hdr) + size + sizeof(*ftr)); - if (!hdr) { - debug_printf("%s:%u:%s: out of memory when trying to allocate %lu bytes\n", - file, line, function, - (long unsigned)size); - return NULL; - } - - hdr->no = last_no++; - hdr->file = file; - hdr->line = line; - hdr->function = function; - hdr->size = size; - hdr->magic = DEBUG_MEMORY_MAGIC; - hdr->tag = 0; -#if DEBUG_FREED_MEMORY - hdr->freed = false; -#endif - -#if DEBUG_MEMORY_STACK - debug_backtrace_capture(hdr->backtrace, 0, DEBUG_MEMORY_STACK); -#endif - - ftr = footer_from_header(hdr); - ftr->magic = DEBUG_MEMORY_MAGIC; - - simple_mtx_lock(&list_mutex); - list_addtail(&hdr->head, &list); - simple_mtx_unlock(&list_mutex); - - return data_from_header(hdr); -} - -void -debug_free(const char *file, unsigned line, const char *function, - void *ptr) -{ - struct debug_memory_header *hdr; - struct debug_memory_footer *ftr; - - if (!ptr) - return; - - hdr = header_from_data(ptr); - if (hdr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: freeing bad or corrupted memory %p\n", - file, line, function, - ptr); - assert(0); - return; - } - - ftr = footer_from_header(hdr); - if (ftr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: buffer overflow %p\n", - hdr->file, hdr->line, hdr->function, - ptr); - assert(0); - } - -#if DEBUG_FREED_MEMORY - /* Check for double-free */ - assert(!hdr->freed); - /* Mark the block as freed but don't really free it */ - hdr->freed = true; - /* Save file/line where freed */ - hdr->file = file; - hdr->line = line; - /* set freed memory to special value */ - memset(ptr, DEBUG_FREED_BYTE, hdr->size); -#else - simple_mtx_lock(&list_mutex); - list_del(&hdr->head); - simple_mtx_unlock(&list_mutex); - hdr->magic = 0; - ftr->magic = 0; - - os_free(hdr); -#endif -} - -void * -debug_calloc(const char *file, unsigned line, const char *function, - size_t count, size_t size ) -{ - void *ptr = debug_malloc( file, line, function, count * size ); - if (ptr) - memset( ptr, 0, count * size ); - return ptr; -} - -void * -debug_realloc(const char *file, unsigned line, const char *function, - void *old_ptr, size_t old_size, size_t new_size ) -{ - struct debug_memory_header *old_hdr, *new_hdr; - struct debug_memory_footer *old_ftr, *new_ftr; - void *new_ptr; - - if (!old_ptr) - return debug_malloc( file, line, function, new_size ); - - if (!new_size) { - debug_free( file, line, function, old_ptr ); - return NULL; - } - - old_hdr = header_from_data(old_ptr); - if (old_hdr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: reallocating bad or corrupted memory %p\n", - file, line, function, - old_ptr); - assert(0); - return NULL; - } - - old_ftr = footer_from_header(old_hdr); - if (old_ftr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: buffer overflow %p\n", - old_hdr->file, old_hdr->line, old_hdr->function, - old_ptr); - assert(0); - } - - /* alloc new */ - new_hdr = os_malloc(sizeof(*new_hdr) + new_size + sizeof(*new_ftr)); - if (!new_hdr) { - debug_printf("%s:%u:%s: out of memory when trying to allocate %lu bytes\n", - file, line, function, - (long unsigned)new_size); - return NULL; - } - new_hdr->no = old_hdr->no; - new_hdr->file = old_hdr->file; - new_hdr->line = old_hdr->line; - new_hdr->function = old_hdr->function; - new_hdr->size = new_size; - new_hdr->magic = DEBUG_MEMORY_MAGIC; - new_hdr->tag = 0; -#if DEBUG_FREED_MEMORY - new_hdr->freed = false; -#endif - - new_ftr = footer_from_header(new_hdr); - new_ftr->magic = DEBUG_MEMORY_MAGIC; - - simple_mtx_lock(&list_mutex); - list_replace(&old_hdr->head, &new_hdr->head); - simple_mtx_unlock(&list_mutex); - - /* copy data */ - new_ptr = data_from_header(new_hdr); - memcpy( new_ptr, old_ptr, old_size < new_size ? old_size : new_size ); - - /* free old */ - old_hdr->magic = 0; - old_ftr->magic = 0; - os_free(old_hdr); - - return new_ptr; -} - -unsigned long -debug_memory_begin(void) -{ - return last_no; -} - -void -debug_memory_end(unsigned long start_no) -{ - size_t total_size = 0; - struct list_head *entry; - - if (start_no == last_no) - return; - - entry = list.prev; - for (; entry != &list; entry = entry->prev) { - struct debug_memory_header *hdr; - void *ptr; - struct debug_memory_footer *ftr; - - hdr = list_entry(entry, struct debug_memory_header, head); - ptr = data_from_header(hdr); - ftr = footer_from_header(hdr); - - if (hdr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: bad or corrupted memory %p\n", - hdr->file, hdr->line, hdr->function, - ptr); - assert(0); - } - - if ((start_no <= hdr->no && hdr->no < last_no) || - (last_no < start_no && (hdr->no < last_no || start_no <= hdr->no))) { - debug_printf("%s:%u:%s: %lu bytes at %p not freed\n", - hdr->file, hdr->line, hdr->function, - (unsigned long) hdr->size, ptr); -#if DEBUG_MEMORY_STACK - debug_backtrace_dump(hdr->backtrace, DEBUG_MEMORY_STACK); -#endif - total_size += hdr->size; - } - - if (ftr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: buffer overflow %p\n", - hdr->file, hdr->line, hdr->function, - ptr); - assert(0); - } - } - - if (total_size) { - debug_printf("Total of %lu KB of system memory apparently leaked\n", - (unsigned long) (total_size + 1023)/1024); - } - else { - debug_printf("No memory leaks detected.\n"); - } -} - - -/** - * Put a tag (arbitrary integer) on a memory block. - * Can be useful for debugging. - */ -void -debug_memory_tag(void *ptr, unsigned tag) -{ - struct debug_memory_header *hdr; - - if (!ptr) - return; - - hdr = header_from_data(ptr); - if (hdr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s corrupted memory at %p\n", __func__, ptr); - assert(0); - } - - hdr->tag = tag; -} - - -/** - * Check the given block of memory for validity/corruption. - */ -void -debug_memory_check_block(void *ptr) -{ - struct debug_memory_header *hdr; - struct debug_memory_footer *ftr; - - if (!ptr) - return; - - hdr = header_from_data(ptr); - ftr = footer_from_header(hdr); - - if (hdr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: bad or corrupted memory %p\n", - hdr->file, hdr->line, hdr->function, ptr); - assert(0); - } - - if (ftr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: buffer overflow %p\n", - hdr->file, hdr->line, hdr->function, ptr); - assert(0); - } -} - - - -/** - * We can periodically call this from elsewhere to do a basic sanity - * check of the heap memory we've allocated. - */ -void -debug_memory_check(void) -{ - struct list_head *entry; - - entry = list.prev; - for (; entry != &list; entry = entry->prev) { - struct debug_memory_header *hdr; - struct debug_memory_footer *ftr; - const char *ptr; - - hdr = list_entry(entry, struct debug_memory_header, head); - ftr = footer_from_header(hdr); - ptr = (const char *) data_from_header(hdr); - - if (hdr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: bad or corrupted memory %p\n", - hdr->file, hdr->line, hdr->function, ptr); - assert(0); - } - - if (ftr->magic != DEBUG_MEMORY_MAGIC) { - debug_printf("%s:%u:%s: buffer overflow %p\n", - hdr->file, hdr->line, hdr->function, ptr); - assert(0); - } - -#if DEBUG_FREED_MEMORY - /* If this block is marked as freed, check that it hasn't been touched */ - if (hdr->freed) { - int i; - for (i = 0; i < hdr->size; i++) { - if (ptr[i] != DEBUG_FREED_BYTE) { - debug_printf("Memory error: byte %d of block at %p of size %d is 0x%x\n", - i, ptr, hdr->size, ptr[i]); - debug_printf("Block was freed at %s:%d\n", hdr->file, hdr->line); - } - assert(ptr[i] == DEBUG_FREED_BYTE); - } - } -#endif - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_refcnt.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_refcnt.c deleted file mode 100644 index 2ef77b6..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_refcnt.c +++ /dev/null @@ -1,191 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 Luca Barbieri - * - * 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 (including the - * next paragraph) 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 THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS 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(DEBUG) - -/** - * If the GALLIUM_REFCNT_LOG env var is defined as a filename, gallium - * reference counting will be logged to the file. - * - * See http://www-archive.mozilla.org/performance/refcnt-balancer.html - * for what to do with the output on Linux, use tools/addr2line.sh to - * postprocess it before anything else. - */ - -#include - -#include "simple_mtx.h" -#include "u_debug.h" -#include "u_debug_refcnt.h" -#include "u_debug_stack.h" -#include "u_debug_symbol.h" -#include "u_string.h" -#include "u_hash_table.h" -#include "u_thread.h" - -int debug_refcnt_state; - -static FILE *stream; - -/* TODO: maybe move this serial machinery to a stand-alone module and - * expose it? - */ - -static simple_mtx_t serials_mutex = SIMPLE_MTX_INITIALIZER; -static struct hash_table *serials_hash; -static unsigned serials_last; - - -/** - * Return a small integer serial number for the given pointer. - */ -static boolean -debug_serial(void *p, unsigned *pserial) -{ - unsigned serial; - boolean found = TRUE; - - simple_mtx_lock(&serials_mutex); - if (!serials_hash) - serials_hash = util_hash_table_create_ptr_keys(); - - serial = (unsigned) (uintptr_t) util_hash_table_get(serials_hash, p); - if (!serial) { - /* time to stop logging... (you'll have a 100 GB logfile at least at - * this point) TODO: avoid this - */ - serial = ++serials_last; - if (!serial) { - debug_error("More than 2^32 objects detected, aborting.\n"); - os_abort(); - } - - _mesa_hash_table_insert(serials_hash, p, (void *) (uintptr_t) serial); - found = FALSE; - } - simple_mtx_unlock(&serials_mutex); - - *pserial = serial; - - return found; -} - - -/** - * Free the serial number for the given pointer. - */ -static void -debug_serial_delete(void *p) -{ - simple_mtx_lock(&serials_mutex); - _mesa_hash_table_remove_key(serials_hash, p); - simple_mtx_unlock(&serials_mutex); -} - - -#if DETECT_OS_WINDOWS -#define STACK_LEN 60 -#else -#define STACK_LEN 64 -#endif - -/** - * Log a reference count change to the log file (if enabled). - * This is called via the pipe_reference() and debug_reference() functions, - * basically whenever a reference count is initialized or changed. - * - * \param p the refcount being changed (the value is not changed here) - * \param get_desc a function which will be called to print an object's - * name/pointer into a string buffer during logging - * \param change the reference count change which must be +/-1 or 0 when - * creating the object and initializing the refcount. - */ -void -debug_reference_slowpath(const struct pipe_reference *p, - debug_reference_descriptor get_desc, int change) -{ - assert(change >= -1); - assert(change <= 1); - - if (debug_refcnt_state < 0) - return; - - if (!debug_refcnt_state) { - const char *filename = debug_get_option("GALLIUM_REFCNT_LOG", NULL); - if (filename && filename[0]) - stream = fopen(filename, "wt"); - - if (stream) - debug_refcnt_state = 1; - else - debug_refcnt_state = -1; - } - - if (debug_refcnt_state > 0) { - struct debug_stack_frame frames[STACK_LEN]; - char buf[1024]; - unsigned i; - unsigned refcnt = p->count; - unsigned serial; - boolean existing = debug_serial((void *) p, &serial); - - debug_backtrace_capture(frames, 1, STACK_LEN); - - get_desc(buf, p); - - if (!existing) { - fprintf(stream, "<%s> %p %u Create\n", buf, (void *) p, serial); - debug_backtrace_print(stream, frames, STACK_LEN); - - /* this is here to provide a gradual change even if we don't see - * the initialization - */ - if (refcnt <= 10) { - for (i = 1; i <= refcnt - change; ++i) { - fprintf(stream, "<%s> %p %u AddRef %u\n", buf, (void *) p, - serial, i); - debug_backtrace_print(stream, frames, STACK_LEN); - } - } - } - - if (change) { - fprintf(stream, "<%s> %p %u %s %u\n", buf, (void *) p, serial, - change > 0 ? "AddRef" : "Release", refcnt); - debug_backtrace_print(stream, frames, STACK_LEN); - } - - if (!refcnt) { - debug_serial_delete((void *) p); - fprintf(stream, "<%s> %p %u Destroy\n", buf, (void *) p, serial); - debug_backtrace_print(stream, frames, STACK_LEN); - } - - fflush(stream); - } -} - -#endif /* DEBUG */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_refcnt.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_refcnt.h deleted file mode 100644 index 0593e5c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_refcnt.h +++ /dev/null @@ -1,69 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 Luca Barbieri - * - * 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 (including the - * next paragraph) 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 THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef U_DEBUG_REFCNT_H_ -#define U_DEBUG_REFCNT_H_ - -#include "detect.h" -#include "../gallium/include/pipe/p_state.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (*debug_reference_descriptor)(char*, const struct pipe_reference*); - -#if defined(DEBUG) - -extern int debug_refcnt_state; - -void -debug_reference_slowpath(const struct pipe_reference* p, - debug_reference_descriptor get_desc, int change); - -static inline void -debug_reference(const struct pipe_reference* p, - debug_reference_descriptor get_desc, int change) -{ - if (debug_refcnt_state >= 0) - debug_reference_slowpath(p, get_desc, change); -} - -#else - -static inline void -debug_reference(UNUSED const struct pipe_reference* p, - UNUSED debug_reference_descriptor get_desc, UNUSED int change) -{ -} - -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* U_DEBUG_REFCNT_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack.c deleted file mode 100644 index 450a38d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack.c +++ /dev/null @@ -1,335 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Stack backtracing. - * - * @author Jose Fonseca - */ - -#include "simple_mtx.h" -#include "u_debug.h" -#include "u_debug_symbol.h" -#include "u_debug_stack.h" -#include "detect.h" - -#if defined(HAVE_LIBUNWIND) - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include - -#include "u_thread.h" -#include "hash_table.h" - -static struct hash_table* symbols_hash; -static simple_mtx_t symbols_mutex = SIMPLE_MTX_INITIALIZER; - -/* TODO with some refactoring we might be able to re-use debug_symbol_name_cached() - * instead.. otoh if using libunwind I think u_debug_symbol could just be excluded - * from build? - */ -static const char * -symbol_name_cached(unw_cursor_t *cursor, unw_proc_info_t *pip) -{ - void *addr = (void *)(uintptr_t)pip->start_ip; - char *name; - - simple_mtx_lock(&symbols_mutex); - if(!symbols_hash) - symbols_hash = _mesa_pointer_hash_table_create(NULL); - struct hash_entry *entry = _mesa_hash_table_search(symbols_hash, addr); - if (!entry) { - char procname[256]; - unw_word_t off; - int ret; - - ret = unw_get_proc_name(cursor, procname, sizeof(procname), &off); - if (ret && ret != -UNW_ENOMEM) { - procname[0] = '?'; - procname[1] = 0; - } - - if (asprintf(&name, "%s%s", procname, ret == -UNW_ENOMEM ? "..." : "") == -1) - name = "??"; - entry = _mesa_hash_table_insert(symbols_hash, addr, (void*)name); - } - simple_mtx_unlock(&symbols_mutex); - - return entry->data; -} - -void -debug_backtrace_capture(struct debug_stack_frame *backtrace, - unsigned start_frame, - unsigned nr_frames) -{ - unw_cursor_t cursor; - unw_context_t context; - unw_proc_info_t pip; - unsigned i = 0; - - pip.unwind_info = 0; - - unw_getcontext(&context); - unw_init_local(&cursor, &context); - - while ((start_frame > 0) && (unw_step(&cursor) > 0)) - start_frame--; - - while ((i < nr_frames) && (unw_step(&cursor) > 0)) { - unw_word_t ip; - - unw_get_reg(&cursor, UNW_REG_IP, &ip); - unw_get_proc_info(&cursor, &pip); - - backtrace[i].start_ip = pip.start_ip; - backtrace[i].off = ip - pip.start_ip; - backtrace[i].procname = symbol_name_cached(&cursor, &pip); - - i++; - } - - while (i < nr_frames) { - backtrace[i].start_ip = 0; - i++; - } -} - -static const void * -frame_ip(const struct debug_stack_frame *frame) -{ - return (void *)(uintptr_t)(frame->start_ip + frame->off); -} - -static const char * -frame_info(const struct debug_stack_frame *frame, unsigned *offset) -{ - Dl_info dlinfo; - const void *addr = frame_ip(frame); - - - if (dladdr(addr, &dlinfo) && dlinfo.dli_fname && - *dlinfo.dli_fname) { - *offset = (unsigned)((uintptr_t)addr - (uintptr_t)dlinfo.dli_fbase); - return dlinfo.dli_fname; - } - - *offset = 0; - return "?"; -} - -void -debug_backtrace_dump(const struct debug_stack_frame *backtrace, - unsigned nr_frames) -{ - unsigned i, offset; - const char *filename; - - for (i = 0; i < nr_frames; ++i) { - if (!backtrace[i].start_ip) - break; - filename = frame_info(&backtrace[i], &offset); - debug_printf("\t%s(+0x%x) (%s+0x%x) [%p]\n", filename, offset, - backtrace[i].procname, backtrace[i].off, - frame_ip(&backtrace[i])); - } -} - -void -debug_backtrace_print(FILE *f, - const struct debug_stack_frame *backtrace, - unsigned nr_frames) -{ - unsigned i, offset; - const char *filename; - - for (i = 0; i < nr_frames; ++i) { - if (!backtrace[i].start_ip) - break; - filename = frame_info(&backtrace[i], &offset); - fprintf(f, "\t%s(+0x%x) (%s+0x%x) [%p]\n", filename, offset, - backtrace[i].procname, backtrace[i].off, - frame_ip(&backtrace[i])); - } -} -#elif defined(ANDROID) - /* Not implemented here; see u_debug_stack_android.cpp */ -#else /* ! HAVE_LIBUNWIND */ - -#if DETECT_OS_WINDOWS -#include -#endif - -/** - * Capture stack backtrace. - * - * NOTE: The implementation of this function is quite big, but it is important - * not to break it down in smaller functions to avoid adding new frames to the - * calling stack. - */ -void -debug_backtrace_capture(struct debug_stack_frame *backtrace, - unsigned start_frame, - unsigned nr_frames) -{ - unsigned i = 0; - - if (!nr_frames) { - return; - } - - /* - * On Windows try obtaining the stack backtrace via CaptureStackBackTrace. - * - * It works reliably both for x86 for x86_64. - */ -#if DETECT_OS_WINDOWS - { - typedef USHORT (WINAPI *PFNCAPTURESTACKBACKTRACE)(ULONG, ULONG, - PVOID *, PULONG); - static PFNCAPTURESTACKBACKTRACE pfnCaptureStackBackTrace = NULL; - - if (!pfnCaptureStackBackTrace) { - static HMODULE hModule = NULL; - if (!hModule) { - hModule = LoadLibraryA("kernel32"); - assert(hModule); - } - if (hModule) { - pfnCaptureStackBackTrace = - (PFNCAPTURESTACKBACKTRACE)GetProcAddress(hModule, - "RtlCaptureStackBackTrace"); - } - } - if (pfnCaptureStackBackTrace) { - /* - * Skip this (debug_backtrace_capture) function's frame. - */ - - start_frame += 1; - - assert(start_frame + nr_frames < 63); - i = pfnCaptureStackBackTrace(start_frame, nr_frames, - (PVOID *) &backtrace->function, NULL); - - /* Pad remaing requested frames with NULL */ - while (i < nr_frames) { - backtrace[i++].function = NULL; - } - - return; - } - } -#endif - -#if DETECT_ARCH_X86 -#if DETECT_CC_GCC && (DETECT_CC_GCC_VERSION > 404) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wframe-address" - const void **frame_pointer = ((const void **)__builtin_frame_address(1)); -#pragma GCC diagnostic pop -#elif DETECT_CC_MSVC - const void **frame_pointer; - __asm { - mov frame_pointer, ebp - } - frame_pointer = (const void **)frame_pointer[0]; -#else - const void **frame_pointer = NULL; -#endif - - while (nr_frames) { - const void **next_frame_pointer; - - if (!frame_pointer) - break; - - if (start_frame) - --start_frame; - else { - backtrace[i++].function = frame_pointer[1]; - --nr_frames; - } - - next_frame_pointer = (const void **)frame_pointer[0]; - - /* Limit the stack walk to avoid referencing undefined memory */ - if ((uintptr_t)next_frame_pointer <= (uintptr_t)frame_pointer || - (uintptr_t)next_frame_pointer > (uintptr_t)frame_pointer + 64*1024) - break; - - frame_pointer = next_frame_pointer; - } -#endif - - while (nr_frames) { - backtrace[i++].function = NULL; - --nr_frames; - } -} - -static simple_mtx_t backtrace_mutex = SIMPLE_MTX_INITIALIZER; - -void -debug_backtrace_dump(const struct debug_stack_frame *backtrace, - unsigned nr_frames) -{ - unsigned i; - simple_mtx_lock(&backtrace_mutex); - for (i = 0; i < nr_frames; ++i) { - if (!backtrace[i].function) - break; - debug_symbol_print(backtrace[i].function); - } - simple_mtx_unlock(&backtrace_mutex); -} - - -void -debug_backtrace_print(FILE *f, - const struct debug_stack_frame *backtrace, - unsigned nr_frames) -{ - unsigned i; - - simple_mtx_lock(&backtrace_mutex); - for (i = 0; i < nr_frames; ++i) { - const char *symbol; - if (!backtrace[i].function) - break; - symbol = debug_symbol_name_cached(backtrace[i].function); - if (symbol) - fprintf(f, "%s\n", symbol); - } - fflush(f); - simple_mtx_unlock(&backtrace_mutex); -} - -#endif /* HAVE_LIBUNWIND */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack.h deleted file mode 100644 index 00ef499..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack.h +++ /dev/null @@ -1,94 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef U_DEBUG_STACK_H_ -#define U_DEBUG_STACK_H_ - -#include - -#include "detect_os.h" - -#ifdef HAVE_LIBUNWIND -#define UNW_LOCAL_ONLY -#include -#endif - -/** - * @file - * Stack backtracing. - * - * @author Jose Fonseca - */ - - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * Represent a frame from a stack backtrace. - * -#if DETECT_OS_WINDOWS && !defined(HAVE_LIBUNWIND) - * XXX: Do not change this. (passed to Windows' CaptureStackBackTrace()) -#endif - * - * TODO: This should be refactored as a void * typedef. - */ -struct debug_stack_frame -{ -#if defined(HAVE_ANDROID_PLATFORM) || defined(HAVE_LIBUNWIND) - const char *procname; - uint64_t start_ip; - unsigned off; - const char *map; - unsigned int map_off; -#else - const void *function; -#endif -}; - - -void -debug_backtrace_capture(struct debug_stack_frame *backtrace, - unsigned start_frame, - unsigned nr_frames); - -void -debug_backtrace_dump(const struct debug_stack_frame *backtrace, - unsigned nr_frames); - -void -debug_backtrace_print(FILE *f, - const struct debug_stack_frame *backtrace, - unsigned nr_frames); - -#ifdef __cplusplus -} -#endif - -#endif /* U_DEBUG_STACK_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack_android.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack_android.cpp deleted file mode 100644 index 294fe49..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_stack_android.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (C) 2018 Stefan Schake - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "u_debug_stack.h" - -#if WITH_LIBBACKTRACE - -#include - -#include "simple_mtx.h" -#include "u_debug.h" -#include "hash_table.h" -#include "u_thread.h" - -static hash_table *symbol_table; -static simple_mtx_t table_mutex = SIMPLE_MTX_INITIALIZER; - -static const char * -intern_symbol(const char *symbol) -{ - if (!symbol_table) - symbol_table = _mesa_hash_table_create(NULL, NULL, _mesa_key_string_equal); - - uint32_t hash = _mesa_hash_string(symbol); - hash_entry *entry = - _mesa_hash_table_search_pre_hashed(symbol_table, hash, symbol); - if (!entry) - entry = _mesa_hash_table_insert_pre_hashed(symbol_table, hash, symbol, strdup(symbol)); - - return (const char *) entry->data; -} - -void -debug_backtrace_capture(debug_stack_frame *backtrace, - unsigned start_frame, - unsigned nr_frames) -{ - Backtrace *bt; - - if (!nr_frames) - return; - - bt = Backtrace::Create(BACKTRACE_CURRENT_PROCESS, - BACKTRACE_CURRENT_THREAD); - if (bt == NULL) { - for (unsigned i = 0; i < nr_frames; i++) - backtrace[i].procname = NULL; - return; - } - - /* Add one to exclude this call. Unwind already ignores itself. */ - bt->Unwind(start_frame + 1); - - simple_mtx_lock(&table_mutex); - - for (unsigned i = 0; i < nr_frames; i++) { - const backtrace_frame_data_t* frame = bt->GetFrame(i); - if (frame) { - backtrace[i].procname = intern_symbol(frame->func_name.c_str()); - backtrace[i].start_ip = frame->pc; - backtrace[i].off = frame->func_offset; - backtrace[i].map = intern_symbol(frame->map.Name().c_str()); - backtrace[i].map_off = frame->rel_pc; - } else { - backtrace[i].procname = NULL; - } - } - - simple_mtx_unlock(&table_mutex); - - delete bt; -} - -void -debug_backtrace_dump(const debug_stack_frame *backtrace, - unsigned nr_frames) -{ - for (unsigned i = 0; i < nr_frames; i++) { - if (backtrace[i].procname) - debug_printf( - "%s(+0x%x)\t%012" PRIx64 ": %s+0x%x\n", - backtrace[i].map, - backtrace[i].map_off, - backtrace[i].start_ip, - backtrace[i].procname, - backtrace[i].off); - } -} - -void -debug_backtrace_print(FILE *f, - const debug_stack_frame *backtrace, - unsigned nr_frames) -{ - for (unsigned i = 0; i < nr_frames; i++) { - if (backtrace[i].procname) - fprintf(f, - "%s(+0x%x)\t%012" PRIx64 ": %s+0x%x\n", - backtrace[i].map, - backtrace[i].map_off, - backtrace[i].start_ip, - backtrace[i].procname, - backtrace[i].off); - } -} - -#else - -void -debug_backtrace_capture(debug_stack_frame *backtrace, - unsigned start_frame, - unsigned nr_frames) -{ -} - -void -debug_backtrace_dump(const debug_stack_frame *backtrace, - unsigned nr_frames) -{ -} - -void -debug_backtrace_print(FILE *f, - const debug_stack_frame *backtrace, - unsigned nr_frames) -{ -} - -#endif // WITH_LIBBACKTRACE \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_symbol.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_symbol.c deleted file mode 100644 index ad4a257..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_symbol.c +++ /dev/null @@ -1,279 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Symbol lookup. - * - * @author Jose Fonseca - */ - -#include "../gallium/include/pipe/p_compiler.h" -#include "u_thread.h" -#include "simple_mtx.h" -#include "u_string.h" - -#include "u_debug.h" -#include "u_debug_symbol.h" -#include "hash_table.h" - - -#if DETECT_OS_WINDOWS - -#include -#include - -#include "dbghelp.h" - - -/** - * SymInitialize() must be called once for each process (in this case, the - * current process), before any of the other functions can be called. - */ -static BOOL g_bSymInitialized = FALSE; - - -/** - * Lookup the address of a DbgHelp function. - */ -static FARPROC WINAPI -getDbgHelpProcAddress(LPCSTR lpProcName) -{ - static HMODULE hModule = NULL; - - if (!hModule) { - static bool bail = false; - - if (bail) { - return NULL; - } - -#if DETECT_CC_GCC - /* - * DbgHelp does not understand the debug information generated by MinGW toolchain. - * - * mgwhelp.dll is a dbghelp.dll look-alike replacement, which is able to - * understand MinGW symbols, including on 64-bit builds. - */ - if (!hModule) { - hModule = LoadLibraryA("mgwhelp.dll"); - if (!hModule) { - _debug_printf("warning: mgwhelp.dll not found: symbol names will not be resolved\n" - "warning: download it from https://github.com/jrfonseca/drmingw/#mgwhelp\n"); - } - } -#endif - - /* - * Fallback to the real DbgHelp. - */ - if (!hModule) { - hModule = LoadLibraryA("dbghelp.dll"); - } - - if (!hModule) { - bail = true; - return NULL; - } - } - - return GetProcAddress(hModule, lpProcName); -} - - -/** - * Generic macro to dispatch a DbgHelp functions. - */ -#define DBGHELP_DISPATCH(_name, _ret_type, _ret_default, _arg_types, _arg_names) \ - static _ret_type WINAPI \ - j_##_name _arg_types \ - { \ - typedef BOOL (WINAPI *PFN) _arg_types; \ - static PFN pfn = NULL; \ - if (!pfn) { \ - pfn = (PFN) getDbgHelpProcAddress(#_name); \ - if (!pfn) { \ - return _ret_default; \ - } \ - } \ - return pfn _arg_names; \ - } - -DBGHELP_DISPATCH(SymInitialize, - BOOL, 0, - (HANDLE hProcess, PSTR UserSearchPath, BOOL fInvadeProcess), - (hProcess, UserSearchPath, fInvadeProcess)) - -DBGHELP_DISPATCH(SymSetOptions, - DWORD, FALSE, - (DWORD SymOptions), - (SymOptions)) - -#ifndef _GAMING_XBOX -DBGHELP_DISPATCH(SymFromAddr, - BOOL, FALSE, - (HANDLE hProcess, DWORD64 Address, PDWORD64 Displacement, PSYMBOL_INFO Symbol), - (hProcess, Address, Displacement, Symbol)) -#endif - -DBGHELP_DISPATCH(SymGetLineFromAddr64, - BOOL, FALSE, - (HANDLE hProcess, DWORD64 dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line), - (hProcess, dwAddr, pdwDisplacement, Line)) - -DBGHELP_DISPATCH(SymCleanup, BOOL, FALSE, (HANDLE hProcess), (hProcess)) - - -#undef DBGHELP_DISPATCH - - -static inline bool -debug_symbol_name_dbghelp(const void *addr, char* buf, unsigned size) -{ -#ifndef _GAMING_XBOX - DWORD64 dwAddr = (DWORD64)(uintptr_t)addr; - HANDLE hProcess = GetCurrentProcess(); - - /* General purpose buffer, to back pSymbol and other temporary stuff. - * Must not be too memory hungry here to avoid stack overflows. - */ - CHAR buffer[512]; - - PSYMBOL_INFO pSymbol = (PSYMBOL_INFO) buffer; - DWORD64 dwDisplacement = 0; /* Displacement of the input address, relative to the start of the symbol */ - DWORD dwLineDisplacement = 0; - IMAGEHLP_LINE64 Line; - - memset(pSymbol, 0, sizeof *pSymbol); - pSymbol->SizeOfStruct = sizeof *pSymbol; - pSymbol->MaxNameLen = sizeof buffer - offsetof(SYMBOL_INFO, Name); - - if (!g_bSymInitialized) { - /* Some components (e.g. Java) will init dbghelp before we're loaded, causing the "invade process" - * option to be invalid when attempting to re-init. But without it, we'd have to manually - * load symbols for all modules in the stack. For simplicity, we can just uninit and then - * re-"invade". - */ - if (debug_get_bool_option("GALLIUM_SYMBOL_FORCE_REINIT", false)) - j_SymCleanup(hProcess); - - j_SymSetOptions(/* SYMOPT_UNDNAME | */ SYMOPT_LOAD_LINES); - if (j_SymInitialize(hProcess, NULL, TRUE)) { - g_bSymInitialized = TRUE; - } - } - - /* Lookup symbol name */ - if (!g_bSymInitialized || - !j_SymFromAddr(hProcess, dwAddr, &dwDisplacement, pSymbol)) { - /* - * We couldn't obtain symbol information. At least tell which module the address belongs. - */ - - HMODULE hModule = NULL; - - if (!GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, - (LPCTSTR)addr, - &hModule)) { - return false; - } - - if (GetModuleFileNameA(hModule, buffer, sizeof buffer) == sizeof buffer) { - return false; - } - snprintf(buf, size, "%p at %s+0x%lx", - addr, buffer, - (unsigned long)((uintptr_t)addr - (uintptr_t)hModule)); - - return true; - } - - /* - * Try to get filename and line number. - */ - memset(&Line, 0, sizeof Line); - Line.SizeOfStruct = sizeof Line; - if (!j_SymGetLineFromAddr64(hProcess, dwAddr, &dwLineDisplacement, &Line)) { - Line.FileName = NULL; - } - - if (Line.FileName) { - snprintf(buf, size, "%s at %s:%lu", pSymbol->Name, Line.FileName, Line.LineNumber); - } else { - snprintf(buf, size, "%s", pSymbol->Name); - } - - return true; -#else - return false; -#endif /* _GAMING_XBOX */ -} - -#endif /* DETECT_OS_WINDOWS */ - -void -debug_symbol_name(const void *addr, char* buf, unsigned size) -{ -#if DETECT_OS_WINDOWS - if (debug_symbol_name_dbghelp(addr, buf, size)) { - return; - } -#endif - - snprintf(buf, size, "%p", addr); - buf[size - 1] = 0; -} - -void -debug_symbol_print(const void *addr) -{ - char buf[1024]; - debug_symbol_name(addr, buf, sizeof(buf)); - debug_printf("\t%s\n", buf); -} - -static struct hash_table* symbols_hash; -static simple_mtx_t symbols_mutex = SIMPLE_MTX_INITIALIZER; - -const char* -debug_symbol_name_cached(const void *addr) -{ - const char* name; - simple_mtx_lock(&symbols_mutex); - if(!symbols_hash) - symbols_hash = _mesa_pointer_hash_table_create(NULL); - struct hash_entry *entry = _mesa_hash_table_search(symbols_hash, addr); - if (!entry) { - char buf[1024]; - debug_symbol_name(addr, buf, sizeof(buf)); - name = strdup(buf); - - entry = _mesa_hash_table_insert(symbols_hash, addr, (void*)name); - } - simple_mtx_unlock(&symbols_mutex); - return entry->data; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_symbol.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_symbol.h deleted file mode 100644 index 1ba41f4..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_debug_symbol.h +++ /dev/null @@ -1,58 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef U_DEBUG_SYMBOL_H_ -#define U_DEBUG_SYMBOL_H_ - - -/** - * @file - * Symbol lookup. - * - * @author Jose Fonseca - */ - - -#ifdef __cplusplus -extern "C" { -#endif - - -void -debug_symbol_name(const void *addr, char* buf, unsigned size); - -const char* -debug_symbol_name_cached(const void *addr); - -void -debug_symbol_print(const void *addr); - -#ifdef __cplusplus -} -#endif - -#endif /* U_DEBUG_SYMBOL_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dl.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dl.c deleted file mode 100644 index c0c0cbc..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dl.c +++ /dev/null @@ -1,93 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 VMware, Inc. - * Copyright 1999-2008 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#include "detect_os.h" - -#if DETECT_OS_UNIX -#include -#endif -#if DETECT_OS_WINDOWS -#include -#endif - -#include "u_dl.h" -#include "u_pointer.h" - - -struct util_dl_library * -util_dl_open(const char *filename) -{ -#if DETECT_OS_UNIX - return (struct util_dl_library *)dlopen(filename, RTLD_LAZY | RTLD_LOCAL); -#elif DETECT_OS_WINDOWS - return (struct util_dl_library *)LoadLibraryA(filename); -#else - return NULL; -#endif -} - - -util_dl_proc -util_dl_get_proc_address(struct util_dl_library *library, - const char *procname) -{ -#if DETECT_OS_UNIX - return (util_dl_proc) pointer_to_func(dlsym((void *)library, procname)); -#elif DETECT_OS_WINDOWS - return (util_dl_proc)GetProcAddress((HMODULE)library, procname); -#else - return (util_dl_proc)NULL; -#endif -} - - -void -util_dl_close(struct util_dl_library *library) -{ -#if DETECT_OS_UNIX - dlclose((void *)library); -#elif DETECT_OS_WINDOWS - FreeLibrary((HMODULE)library); -#else - (void)library; -#endif -} - - -const char * -util_dl_error(void) -{ -#if DETECT_OS_UNIX - return dlerror(); -#elif DETECT_OS_WINDOWS - return "unknown error"; -#else - return "unknown error"; -#endif -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dl.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dl.h deleted file mode 100644 index 03e53f8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dl.h +++ /dev/null @@ -1,89 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 VMware, Inc. - * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - **************************************************************************/ - - -#ifndef U_DL_H_ -#define U_DL_H_ - - -#include "detect_os.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if DETECT_OS_WINDOWS -# define UTIL_DL_EXT ".dll" -# define UTIL_DL_PREFIX "" -#elif DETECT_OS_APPLE -# define UTIL_DL_EXT ".dylib" -# define UTIL_DL_PREFIX "lib" -#else -# define UTIL_DL_EXT ".so" -# define UTIL_DL_PREFIX "lib" -#endif - - -struct util_dl_library; - - -typedef void (*util_dl_proc)(void); - - -/** - * Open a library dynamically. - */ -struct util_dl_library * -util_dl_open(const char *filename); - - -/** - * Lookup a function in a library. - */ -util_dl_proc -util_dl_get_proc_address(struct util_dl_library *library, - const char *procname); - - -/** - * Close a library. - */ -void -util_dl_close(struct util_dl_library *library); - - -/** - * Return most recent error message. - */ -const char * -util_dl_error(void); - -#ifdef __cplusplus -} -#endif - -#endif /* U_DL_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_drm.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_drm.h deleted file mode 100644 index a0b4a84..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_drm.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright © 2014 Broadcom - * Copyright (C) 2012 Rob Clark - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef U_DRM_H -#define U_DRM_H - -#include -#include - -/* Does the u64 array contain the listed u64? */ - -static inline bool -util_array_contains_u64(uint64_t needle, const uint64_t *haystack, unsigned count) -{ - unsigned i; - - for (i = 0; i < count; i++) { - if (haystack[i] == needle) - return true; - } - - return false; -} - -/* Given a list of DRM modifiers and a desired modifier, returns whether the - * modifier is found */ - -static inline bool -drm_find_modifier(uint64_t modifier, const uint64_t *modifiers, unsigned count) -{ - return util_array_contains_u64(modifier, modifiers, count); -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dynarray.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dynarray.h deleted file mode 100644 index 769669e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_dynarray.h +++ /dev/null @@ -1,245 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 Luca Barbieri - * - * 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 (including the - * next paragraph) 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 THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef U_DYNARRAY_H -#define U_DYNARRAY_H - -#include -#include -#include -#include "ralloc.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static unsigned util_dynarray_is_data_stack_allocated; - -/* A zero-initialized version of this is guaranteed to represent an - * empty array. - * - * Also, size <= capacity and data != 0 if and only if capacity != 0 - * capacity will always be the allocation size of data - */ -struct util_dynarray -{ - void *mem_ctx; - void *data; - unsigned size; - unsigned capacity; -}; - -static inline void -util_dynarray_init(struct util_dynarray *buf, void *mem_ctx) -{ - memset(buf, 0, sizeof(*buf)); - buf->mem_ctx = mem_ctx; -} - -static inline void -util_dynarray_init_from_stack(struct util_dynarray *buf, void *data, unsigned capacity) -{ - memset(buf, 0, sizeof(*buf)); - buf->mem_ctx = &util_dynarray_is_data_stack_allocated; - buf->data = data; - buf->capacity = capacity; -} - -static inline void -util_dynarray_fini(struct util_dynarray *buf) -{ - if (buf->data) { - if (buf->mem_ctx == &util_dynarray_is_data_stack_allocated) { - } else if (buf->mem_ctx) { - ralloc_free(buf->data); - } else { - free(buf->data); - } - util_dynarray_init(buf, buf->mem_ctx); - } -} - -static inline void -util_dynarray_clear(struct util_dynarray *buf) -{ - buf->size = 0; -} - -#define DYN_ARRAY_INITIAL_SIZE 64 - -MUST_CHECK static inline void * -util_dynarray_ensure_cap(struct util_dynarray *buf, unsigned newcap) -{ - if (newcap > buf->capacity) { - unsigned capacity = MAX3(DYN_ARRAY_INITIAL_SIZE, buf->capacity * 2, newcap); - void *data; - - if (buf->mem_ctx == &util_dynarray_is_data_stack_allocated) { - data = malloc(capacity); - if (data) { - memcpy(data, buf->data, buf->size); - buf->mem_ctx = NULL; - } - } else if (buf->mem_ctx) { - data = reralloc_size(buf->mem_ctx, buf->data, capacity); - } else { - data = realloc(buf->data, capacity); - } - if (!data) - return NULL; - - buf->data = data; - buf->capacity = capacity; - } - - return (void *)((char *)buf->data + buf->size); -} - -/* use util_dynarray_trim to reduce the allocated storage */ -MUST_CHECK static inline void * -util_dynarray_resize_bytes(struct util_dynarray *buf, unsigned nelts, size_t eltsize) -{ - if (unlikely(nelts > UINT_MAX / eltsize)) - return NULL; - - unsigned newsize = nelts * eltsize; - void *p = util_dynarray_ensure_cap(buf, newsize); - if (!p) - return NULL; - - buf->size = newsize; - - return p; -} - -static inline void -util_dynarray_clone(struct util_dynarray *buf, void *mem_ctx, - struct util_dynarray *from_buf) -{ - util_dynarray_init(buf, mem_ctx); - if (util_dynarray_resize_bytes(buf, from_buf->size, 1)) - memcpy(buf->data, from_buf->data, from_buf->size); -} - -MUST_CHECK static inline void * -util_dynarray_grow_bytes(struct util_dynarray *buf, unsigned ngrow, size_t eltsize) -{ - unsigned growbytes = ngrow * eltsize; - - if (unlikely(ngrow > (UINT_MAX / eltsize) || - growbytes > UINT_MAX - buf->size)) - return NULL; - - unsigned newsize = buf->size + growbytes; - void *p = util_dynarray_ensure_cap(buf, newsize); - if (!p) - return NULL; - - buf->size = newsize; - - return p; -} - -static inline void -util_dynarray_trim(struct util_dynarray *buf) -{ - if (buf->mem_ctx == &util_dynarray_is_data_stack_allocated) - return; - - if (buf->size != buf->capacity) { - if (buf->size) { - if (buf->mem_ctx) { - buf->data = reralloc_size(buf->mem_ctx, buf->data, buf->size); - } else { - buf->data = realloc(buf->data, buf->size); - } - buf->capacity = buf->size; - } else { - if (buf->mem_ctx) { - ralloc_free(buf->data); - } else { - free(buf->data); - } - buf->data = NULL; - buf->capacity = 0; - } - } -} - -static inline void -util_dynarray_append_dynarray(struct util_dynarray *buf, - const struct util_dynarray *other) -{ - if (other->size > 0) { - void *p = util_dynarray_grow_bytes(buf, 1, other->size); - memcpy(p, other->data, other->size); - } -} - -#define util_dynarray_append(buf, type, v) do {type __v = (v); memcpy(util_dynarray_grow_bytes((buf), 1, sizeof(type)), &__v, sizeof(type));} while(0) -/* Returns a pointer to the space of the first new element (in case of growth) or NULL on failure. */ -#define util_dynarray_resize(buf, type, nelts) util_dynarray_resize_bytes(buf, (nelts), sizeof(type)) -#define util_dynarray_grow(buf, type, ngrow) util_dynarray_grow_bytes(buf, (ngrow), sizeof(type)) -#define util_dynarray_top_ptr(buf, type) (type*)((char*)(buf)->data + (buf)->size - sizeof(type)) -#define util_dynarray_top(buf, type) *util_dynarray_top_ptr(buf, type) -#define util_dynarray_pop_ptr(buf, type) (type*)((char*)(buf)->data + ((buf)->size -= sizeof(type))) -#define util_dynarray_pop(buf, type) *util_dynarray_pop_ptr(buf, type) -#define util_dynarray_contains(buf, type) ((buf)->size >= sizeof(type)) -#define util_dynarray_element(buf, type, idx) ((type*)(buf)->data + (idx)) -#define util_dynarray_begin(buf) ((buf)->data) -#define util_dynarray_end(buf) ((void*)util_dynarray_element((buf), char, (buf)->size)) -#define util_dynarray_num_elements(buf, type) ((buf)->size / sizeof(type)) - -#define util_dynarray_foreach(buf, type, elem) \ - for (type *elem = (type *)(buf)->data; \ - elem < (type *)((char *)(buf)->data + (buf)->size); elem++) - -#define util_dynarray_foreach_reverse(buf, type, elem) \ - if ((buf)->size > 0) \ - for (type *elem = util_dynarray_top_ptr(buf, type); \ - elem; \ - elem = elem > (type *)(buf)->data ? elem - 1 : NULL) - -#define util_dynarray_delete_unordered(buf, type, v) \ - do { \ - unsigned num_elements = (buf)->size / sizeof(type); \ - unsigned i; \ - for (i = 0; i < num_elements; i++) { \ - type __v = *util_dynarray_element((buf), type, (i)); \ - if (v == __v) { \ - memcpy(util_dynarray_element((buf), type, (i)), \ - util_dynarray_pop_ptr((buf), type), sizeof(type)); \ - break; \ - } \ - } \ - } while (0) - -#ifdef __cplusplus -} -#endif - -#endif /* U_DYNARRAY_H */ - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_endian.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_endian.h deleted file mode 100644 index 661628e..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_endian.h +++ /dev/null @@ -1,98 +0,0 @@ -/************************************************************************** - * - * Copyright 2007-2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ -#ifndef U_ENDIAN_H -#define U_ENDIAN_H - -#ifdef HAVE_ENDIAN_H -#include - -/* glibc */ -#if defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN) -# define UTIL_ARCH_LITTLE_ENDIAN 1 -# define UTIL_ARCH_BIG_ENDIAN 0 -#elif defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN) -# define UTIL_ARCH_LITTLE_ENDIAN 0 -# define UTIL_ARCH_BIG_ENDIAN 1 -#endif - -#if defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN) -# define UTIL_ARCH_LITTLE_ENDIAN 1 -# define UTIL_ARCH_BIG_ENDIAN 0 -#elif defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN) -# define UTIL_ARCH_LITTLE_ENDIAN 0 -# define UTIL_ARCH_BIG_ENDIAN 1 -#endif - -#elif defined(__APPLE__) -#include - -#if __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN -# define UTIL_ARCH_LITTLE_ENDIAN 1 -# define UTIL_ARCH_BIG_ENDIAN 0 -#elif __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN -# define UTIL_ARCH_LITTLE_ENDIAN 0 -# define UTIL_ARCH_BIG_ENDIAN 1 -#endif - -#elif defined(__sun) -#include - -#if defined(_LITTLE_ENDIAN) -# define UTIL_ARCH_LITTLE_ENDIAN 1 -# define UTIL_ARCH_BIG_ENDIAN 0 -#elif defined(_BIG_ENDIAN) -# define UTIL_ARCH_LITTLE_ENDIAN 0 -# define UTIL_ARCH_BIG_ENDIAN 1 -#endif - -#elif defined(__NetBSD__) || defined(__FreeBSD__) || \ - defined(__DragonFly__) -#include -#include - -#if _BYTE_ORDER == _LITTLE_ENDIAN -# define UTIL_ARCH_LITTLE_ENDIAN 1 -# define UTIL_ARCH_BIG_ENDIAN 0 -#elif _BYTE_ORDER == _BIG_ENDIAN -# define UTIL_ARCH_LITTLE_ENDIAN 0 -# define UTIL_ARCH_BIG_ENDIAN 1 -#endif - -#elif defined(_WIN32) || defined(ANDROID) - -#define UTIL_ARCH_LITTLE_ENDIAN 1 -#define UTIL_ARCH_BIG_ENDIAN 0 - -#endif - -#if !defined(UTIL_ARCH_LITTLE_ENDIAN) || !defined(UTIL_ARCH_BIG_ENDIAN) -# error "UTIL_ARCH_LITTLE_ENDIAN and/or UTIL_ARCH_BIG_ENDIAN were unset." -#elif UTIL_ARCH_LITTLE_ENDIAN == UTIL_ARCH_BIG_ENDIAN -# error "UTIL_ARCH_LITTLE_ENDIAN and UTIL_ARCH_BIG_ENDIAN must not both be 1 or 0." -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_hash_table.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_hash_table.c deleted file mode 100644 index 6ce90cd..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_hash_table.c +++ /dev/null @@ -1,121 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -#include "u_pointer.h" -#include "u_hash_table.h" - -#if DETECT_OS_UNIX -#include -#endif - - -static uint32_t -pointer_hash(const void *key) -{ - return _mesa_hash_pointer(key); -} - - -static bool -pointer_equal(const void *a, const void *b) -{ - return a == b; -} - - -struct hash_table * -util_hash_table_create_ptr_keys(void) -{ - return _mesa_hash_table_create(NULL, pointer_hash, pointer_equal); -} - - -static uint32_t hash_fd(const void *key) -{ -#if DETECT_OS_UNIX - int fd = pointer_to_intptr(key); - struct stat stat; - - fstat(fd, &stat); - - return stat.st_dev ^ stat.st_ino ^ stat.st_rdev; -#else - return 0; -#endif -} - - -static bool equal_fd(const void *key1, const void *key2) -{ -#if DETECT_OS_UNIX - int fd1 = pointer_to_intptr(key1); - int fd2 = pointer_to_intptr(key2); - struct stat stat1, stat2; - - fstat(fd1, &stat1); - fstat(fd2, &stat2); - - return stat1.st_dev == stat2.st_dev && - stat1.st_ino == stat2.st_ino && - stat1.st_rdev == stat2.st_rdev; -#else - return 0; -#endif -} - - -struct hash_table * -util_hash_table_create_fd_keys(void) -{ - return _mesa_hash_table_create(NULL, hash_fd, equal_fd); -} - - -void * -util_hash_table_get(struct hash_table *ht, - void *key) -{ - struct hash_entry *entry = _mesa_hash_table_search(ht, key); - - return entry ? entry->data : NULL; -} - - -int -util_hash_table_foreach(struct hash_table *ht, - int (*callback) - (void *key, void *value, void *data), - void *data) -{ - hash_table_foreach(ht, entry) { - int error = callback((void*)entry->key, entry->data, data); - if (error != 0) - return error; - } - return 0; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_hash_table.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_hash_table.h deleted file mode 100644 index 28701f3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_hash_table.h +++ /dev/null @@ -1,73 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -/** - * General purpose hash table. - */ - -#ifndef U_HASH_TABLE_H_ -#define U_HASH_TABLE_H_ - - -#include "../gallium/include/pipe/p_defines.h" -#include "hash_table.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Create a hash table where the keys are generic pointers. - */ -struct hash_table * -util_hash_table_create_ptr_keys(void); - - -/** - * Create a hash table where the keys are device FDs. - */ -struct hash_table * -util_hash_table_create_fd_keys(void); - - -void * -util_hash_table_get(struct hash_table *ht, - void *key); - - -int -util_hash_table_foreach(struct hash_table *ht, - int (*callback) - (void *key, void *value, void *data), - void *data); - -#ifdef __cplusplus -} -#endif - -#endif /* U_HASH_TABLE_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_idalloc.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_idalloc.c deleted file mode 100644 index 8f165ab..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_idalloc.c +++ /dev/null @@ -1,207 +0,0 @@ -/************************************************************************** - * - * Copyright 2017 Valve Corporation - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS 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 - * A simple allocator that allocates and release "numbers". - * - * @author Samuel Pitoiset - */ - -#include "u_idalloc.h" -#include "u_math.h" -#include - -static void -util_idalloc_resize(struct util_idalloc *buf, unsigned new_num_elements) -{ - if (new_num_elements > buf->num_elements) { - buf->data = realloc(buf->data, new_num_elements * sizeof(*buf->data)); - memset(&buf->data[buf->num_elements], 0, - (new_num_elements - buf->num_elements) * sizeof(*buf->data)); - buf->num_elements = new_num_elements; - } -} - -void -util_idalloc_init(struct util_idalloc *buf, unsigned initial_num_ids) -{ - memset(buf, 0, sizeof(*buf)); - assert(initial_num_ids); - util_idalloc_resize(buf, DIV_ROUND_UP(initial_num_ids, 32)); -} - -void -util_idalloc_fini(struct util_idalloc *buf) -{ - if (buf->data) - free(buf->data); -} - -unsigned -util_idalloc_alloc(struct util_idalloc *buf) -{ - unsigned num_elements = buf->num_elements; - - for (unsigned i = buf->lowest_free_idx; i < num_elements; i++) { - if (buf->data[i] == 0xffffffff) - continue; - - unsigned bit = ffs(~buf->data[i]) - 1; - buf->data[i] |= 1u << bit; - buf->lowest_free_idx = i; - return i * 32 + bit; - } - - /* No slots available, resize and return the first free. */ - util_idalloc_resize(buf, MAX2(num_elements, 1) * 2); - - buf->lowest_free_idx = num_elements; - buf->data[num_elements] |= 1; - return num_elements * 32; -} - -static unsigned -find_free_block(struct util_idalloc *buf, unsigned start) -{ - for (unsigned i = start; i < buf->num_elements; i++) { - if (!buf->data[i]) - return i; - } - return buf->num_elements; -} - -/* Allocate a range of consecutive IDs. Return the first ID. */ -unsigned -util_idalloc_alloc_range(struct util_idalloc *buf, unsigned num) -{ - if (num == 1) - return util_idalloc_alloc(buf); - - unsigned num_alloc = DIV_ROUND_UP(num, 32); - unsigned num_elements = buf->num_elements; - unsigned base = find_free_block(buf, buf->lowest_free_idx); - - while (1) { - unsigned i; - for (i = base; - i < num_elements && i - base < num_alloc && !buf->data[i]; i++); - - if (i - base == num_alloc) - goto ret; /* found */ - - if (i == num_elements) - break; /* not found */ - - /* continue searching */ - base = !buf->data[i] ? i : i + 1; - } - - /* No slots available, allocate more. */ - util_idalloc_resize(buf, num_elements * 2 + num_alloc); - -ret: - /* Mark the bits as used. */ - for (unsigned i = base; i < base + num_alloc - (num % 32 != 0); i++) - buf->data[i] = 0xffffffff; - if (num % 32 != 0) - buf->data[base + num_alloc - 1] |= BITFIELD_MASK(num % 32); - - if (buf->lowest_free_idx == base) - buf->lowest_free_idx = base + num / 32; - - /* Validate this algorithm. */ - for (unsigned i = 0; i < num; i++) - assert(util_idalloc_exists(buf, base * 32 + i)); - - return base * 32; -} - -void -util_idalloc_free(struct util_idalloc *buf, unsigned id) -{ - assert(id / 32 < buf->num_elements); - unsigned idx = id / 32; - buf->lowest_free_idx = MIN2(idx, buf->lowest_free_idx); - buf->data[idx] &= ~(1 << (id % 32)); -} - -void -util_idalloc_reserve(struct util_idalloc *buf, unsigned id) -{ - if (id / 32 >= buf->num_elements) - util_idalloc_resize(buf, (id / 32 + 1) * 2); - buf->data[id / 32] |= 1u << (id % 32); -} - -void -util_idalloc_mt_init(struct util_idalloc_mt *buf, - unsigned initial_num_ids, bool skip_zero) -{ - simple_mtx_init(&buf->mutex, mtx_plain); - util_idalloc_init(&buf->buf, initial_num_ids); - buf->skip_zero = skip_zero; - - if (skip_zero) { - ASSERTED unsigned zero = util_idalloc_alloc(&buf->buf); - assert(zero == 0); - } -} - -/* Callback for drivers using u_threaded_context (abbreviated as tc). */ -void -util_idalloc_mt_init_tc(struct util_idalloc_mt *buf) -{ - util_idalloc_mt_init(buf, 1 << 16, true); -} - -void -util_idalloc_mt_fini(struct util_idalloc_mt *buf) -{ - util_idalloc_fini(&buf->buf); - simple_mtx_destroy(&buf->mutex); -} - -unsigned -util_idalloc_mt_alloc(struct util_idalloc_mt *buf) -{ - simple_mtx_lock(&buf->mutex); - unsigned id = util_idalloc_alloc(&buf->buf); - simple_mtx_unlock(&buf->mutex); - return id; -} - -void -util_idalloc_mt_free(struct util_idalloc_mt *buf, unsigned id) -{ - if (id == 0 && buf->skip_zero) - return; - - simple_mtx_lock(&buf->mutex); - util_idalloc_free(&buf->buf, id); - simple_mtx_unlock(&buf->mutex); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_idalloc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_idalloc.h deleted file mode 100644 index cedc1e3..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_idalloc.h +++ /dev/null @@ -1,113 +0,0 @@ -/************************************************************************** - * - * Copyright 2017 Valve Corporation - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -/* Allocator of IDs (e.g. OpenGL object IDs), or simply an allocator of - * numbers. - * - * The allocator uses a bit array to track allocated IDs. - */ - -#ifndef U_IDALLOC_H -#define U_IDALLOC_H - -#include -#include -#include "simple_mtx.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct util_idalloc -{ - uint32_t *data; - unsigned num_elements; /* number of allocated elements of "data" */ - unsigned lowest_free_idx; -}; - -void -util_idalloc_init(struct util_idalloc *buf, unsigned initial_num_ids); - -void -util_idalloc_fini(struct util_idalloc *buf); - -unsigned -util_idalloc_alloc(struct util_idalloc *buf); - -unsigned -util_idalloc_alloc_range(struct util_idalloc *buf, unsigned num); - -void -util_idalloc_free(struct util_idalloc *buf, unsigned id); - -void -util_idalloc_reserve(struct util_idalloc *buf, unsigned id); - -static inline bool -util_idalloc_exists(struct util_idalloc *buf, unsigned id) -{ - return id / 32 < buf->num_elements && - buf->data[id / 32] & BITFIELD_BIT(id % 32); -} - -#define util_idalloc_foreach(buf, id) \ - for (uint32_t i = 0, mask = (buf)->num_elements ? (buf)->data[0] : 0, id, \ - count = (buf)->num_elements; \ - i < count; mask = ++i < count ? (buf)->data[i] : 0) \ - while (mask) \ - if ((id = i * 32 + u_bit_scan(&mask)), true) - - -/* Thread-safe variant. */ -struct util_idalloc_mt { - struct util_idalloc buf; - simple_mtx_t mutex; - bool skip_zero; -}; - -void -util_idalloc_mt_init(struct util_idalloc_mt *buf, - unsigned initial_num_ids, bool skip_zero); - -void -util_idalloc_mt_init_tc(struct util_idalloc_mt *buf); - -void -util_idalloc_mt_fini(struct util_idalloc_mt *buf); - -unsigned -util_idalloc_mt_alloc(struct util_idalloc_mt *buf); - -void -util_idalloc_mt_free(struct util_idalloc_mt *buf, unsigned id); - - -#ifdef __cplusplus -} -#endif - -#endif /* U_IDALLOC_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_math.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_math.c deleted file mode 100644 index c22481c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_math.c +++ /dev/null @@ -1,311 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - - -#include "detect.h" -#include "u_math.h" -#include "u_cpu_detect.h" - -#if DETECT_ARCH_SSE -#include -/* This is defined in pmmintrin.h, but it can only be included when -msse3 is - * used, so just define it here to avoid further. */ -#ifndef _MM_DENORMALS_ZERO_MASK -#define _MM_DENORMALS_ZERO_MASK 0x0040 -#endif -#endif - - -/** log2(x), for x in [1.0, 2.0) */ -float log2_table[LOG2_TABLE_SIZE]; - - -static void -init_log2_table(void) -{ - unsigned i; - for (i = 0; i < LOG2_TABLE_SIZE; i++) - log2_table[i] = (float) log2(1.0 + i * (1.0 / LOG2_TABLE_SCALE)); -} - - -/** - * One time init for math utilities. - */ -void -util_init_math(void) -{ - static bool initialized = false; - if (!initialized) { - init_log2_table(); - initialized = true; - } -} - -/** - * Fetches the contents of the fpstate (mxcsr on x86) register. - * - * On platforms without support for it just returns 0. - */ -unsigned -util_fpstate_get(void) -{ - unsigned mxcsr = 0; - -#if DETECT_ARCH_SSE - if (util_get_cpu_caps()->has_sse) { - mxcsr = _mm_getcsr(); - } -#endif - - return mxcsr; -} - -/** - * Make sure that the fp treats the denormalized floating - * point numbers as zero. - * - * This is the behavior required by D3D10. OpenGL doesn't care. - */ -unsigned -util_fpstate_set_denorms_to_zero(unsigned current_mxcsr) -{ -#if DETECT_ARCH_SSE - if (util_get_cpu_caps()->has_sse) { - /* Enable flush to zero mode */ - current_mxcsr |= _MM_FLUSH_ZERO_MASK; - if (util_get_cpu_caps()->has_daz) { - /* Enable denormals are zero mode */ - current_mxcsr |= _MM_DENORMALS_ZERO_MASK; - } - util_fpstate_set(current_mxcsr); - } -#endif - return current_mxcsr; -} - -/** - * Set the state of the fpstate (mxcsr on x86) register. - * - * On platforms without support for it's a noop. - */ -void -util_fpstate_set(unsigned mxcsr) -{ -#if DETECT_ARCH_SSE - if (util_get_cpu_caps()->has_sse) { - _mm_setcsr(mxcsr); - } -#endif -} - -/** - * Compute inverse of 4x4 matrix. - * - * \return false if the source matrix is singular. - * - * \author - * Code contributed by Jacques Leroy jle@star.be - * - * Calculates the inverse matrix by performing the gaussian matrix reduction - * with partial pivoting followed by back/substitution with the loops manually - * unrolled. - */ -bool -util_invert_mat4x4(float *out, const float *m) -{ - float wtmp[4][8]; - float m0, m1, m2, m3, s; - float *r0, *r1, *r2, *r3; - -#define MAT(m, r, c) (m)[(c)*4 + (r)] -#define SWAP_ROWS(a, b) \ - { \ - float *_tmp = a; \ - (a) = (b); \ - (b) = _tmp; \ - } - - r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3]; - - r0[0] = MAT(m, 0, 0), r0[1] = MAT(m, 0, 1), r0[2] = MAT(m, 0, 2), r0[3] = MAT(m, 0, 3), - r0[4] = 1.0, r0[5] = r0[6] = r0[7] = 0.0, - - r1[0] = MAT(m, 1, 0), r1[1] = MAT(m, 1, 1), r1[2] = MAT(m, 1, 2), r1[3] = MAT(m, 1, 3), - r1[5] = 1.0, r1[4] = r1[6] = r1[7] = 0.0, - - r2[0] = MAT(m, 2, 0), r2[1] = MAT(m, 2, 1), r2[2] = MAT(m, 2, 2), r2[3] = MAT(m, 2, 3), - r2[6] = 1.0, r2[4] = r2[5] = r2[7] = 0.0, - - r3[0] = MAT(m, 3, 0), r3[1] = MAT(m, 3, 1), r3[2] = MAT(m, 3, 2), r3[3] = MAT(m, 3, 3), - r3[7] = 1.0, r3[4] = r3[5] = r3[6] = 0.0; - - /* choose pivot - or die */ - if (fabsf(r3[0]) > fabsf(r2[0])) - SWAP_ROWS(r3, r2); - if (fabsf(r2[0]) > fabsf(r1[0])) - SWAP_ROWS(r2, r1); - if (fabsf(r1[0]) > fabsf(r0[0])) - SWAP_ROWS(r1, r0); - if (0.0F == r0[0]) - return false; - - /* eliminate first variable */ - m1 = r1[0] / r0[0]; - m2 = r2[0] / r0[0]; - m3 = r3[0] / r0[0]; - s = r0[1]; - r1[1] -= m1 * s; - r2[1] -= m2 * s; - r3[1] -= m3 * s; - s = r0[2]; - r1[2] -= m1 * s; - r2[2] -= m2 * s; - r3[2] -= m3 * s; - s = r0[3]; - r1[3] -= m1 * s; - r2[3] -= m2 * s; - r3[3] -= m3 * s; - s = r0[4]; - if (s != 0.0F) { - r1[4] -= m1 * s; - r2[4] -= m2 * s; - r3[4] -= m3 * s; - } - s = r0[5]; - if (s != 0.0F) { - r1[5] -= m1 * s; - r2[5] -= m2 * s; - r3[5] -= m3 * s; - } - s = r0[6]; - if (s != 0.0F) { - r1[6] -= m1 * s; - r2[6] -= m2 * s; - r3[6] -= m3 * s; - } - s = r0[7]; - if (s != 0.0F) { - r1[7] -= m1 * s; - r2[7] -= m2 * s; - r3[7] -= m3 * s; - } - - /* choose pivot - or die */ - if (fabsf(r3[1]) > fabsf(r2[1])) - SWAP_ROWS(r3, r2); - if (fabsf(r2[1]) > fabsf(r1[1])) - SWAP_ROWS(r2, r1); - if (0.0F == r1[1]) - return false; - - /* eliminate second variable */ - m2 = r2[1] / r1[1]; - m3 = r3[1] / r1[1]; - r2[2] -= m2 * r1[2]; - r3[2] -= m3 * r1[2]; - r2[3] -= m2 * r1[3]; - r3[3] -= m3 * r1[3]; - s = r1[4]; - if (0.0F != s) { - r2[4] -= m2 * s; - r3[4] -= m3 * s; - } - s = r1[5]; - if (0.0F != s) { - r2[5] -= m2 * s; - r3[5] -= m3 * s; - } - s = r1[6]; - if (0.0F != s) { - r2[6] -= m2 * s; - r3[6] -= m3 * s; - } - s = r1[7]; - if (0.0F != s) { - r2[7] -= m2 * s; - r3[7] -= m3 * s; - } - - /* choose pivot - or die */ - if (fabsf(r3[2]) > fabsf(r2[2])) - SWAP_ROWS(r3, r2); - if (0.0F == r2[2]) - return false; - - /* eliminate third variable */ - m3 = r3[2] / r2[2]; - r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4], r3[5] -= m3 * r2[5], r3[6] -= m3 * r2[6], - r3[7] -= m3 * r2[7]; - - /* last check */ - if (0.0F == r3[3]) - return false; - - s = 1.0F / r3[3]; /* now back substitute row 3 */ - r3[4] *= s; - r3[5] *= s; - r3[6] *= s; - r3[7] *= s; - - m2 = r2[3]; /* now back substitute row 2 */ - s = 1.0F / r2[2]; - r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2), - r2[6] = s * (r2[6] - r3[6] * m2), r2[7] = s * (r2[7] - r3[7] * m2); - m1 = r1[3]; - r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1, r1[6] -= r3[6] * m1, r1[7] -= r3[7] * m1; - m0 = r0[3]; - r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0, r0[6] -= r3[6] * m0, r0[7] -= r3[7] * m0; - - m1 = r1[2]; /* now back substitute row 1 */ - s = 1.0F / r1[1]; - r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1), - r1[6] = s * (r1[6] - r2[6] * m1), r1[7] = s * (r1[7] - r2[7] * m1); - m0 = r0[2]; - r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0, r0[6] -= r2[6] * m0, r0[7] -= r2[7] * m0; - - m0 = r0[1]; /* now back substitute row 0 */ - s = 1.0F / r0[0]; - r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0), - r0[6] = s * (r0[6] - r1[6] * m0), r0[7] = s * (r0[7] - r1[7] * m0); - - MAT(out, 0, 0) = r0[4]; - MAT(out, 0, 1) = r0[5], MAT(out, 0, 2) = r0[6]; - MAT(out, 0, 3) = r0[7], MAT(out, 1, 0) = r1[4]; - MAT(out, 1, 1) = r1[5], MAT(out, 1, 2) = r1[6]; - MAT(out, 1, 3) = r1[7], MAT(out, 2, 0) = r2[4]; - MAT(out, 2, 1) = r2[5], MAT(out, 2, 2) = r2[6]; - MAT(out, 2, 3) = r2[7], MAT(out, 3, 0) = r3[4]; - MAT(out, 3, 1) = r3[5], MAT(out, 3, 2) = r3[6]; - MAT(out, 3, 3) = r3[7]; - -#undef MAT -#undef SWAP_ROWS - - return true; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_math.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_math.h deleted file mode 100644 index 7f87e98..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_math.h +++ /dev/null @@ -1,822 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -/** - * Math utilities and approximations for common math functions. - * Reduced precision is usually acceptable in shaders... - * - * "fast" is used in the names of functions which are low-precision, - * or at least lower-precision than the normal C lib functions. - */ - - -#ifndef U_MATH_H -#define U_MATH_H - - -#include "../../include/c99_compat.h" -#include -#include -#include -#include - -#include "bitscan.h" -#include "u_endian.h" /* for UTIL_ARCH_BIG_ENDIAN */ -#include "detect_cc.h" -#include "detect_arch.h" - -#ifdef __HAIKU__ -#include -#undef ALIGN -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 -#endif - - -/** - * Initialize math module. This should be called before using any - * other functions in this module. - */ -extern void -util_init_math(void); - - -union fi { - float f; - int32_t i; - uint32_t ui; -}; - - -union di { - double d; - int64_t i; - uint64_t ui; -}; - - -/** - * Extract the IEEE float32 exponent. - */ -static inline signed -util_get_float32_exponent(float x) -{ - union fi f; - - f.f = x; - - return ((f.ui >> 23) & 0xff) - 127; -} - - -#define LOG2_TABLE_SIZE_LOG2 8 -#define LOG2_TABLE_SCALE (1 << LOG2_TABLE_SIZE_LOG2) -#define LOG2_TABLE_SIZE (LOG2_TABLE_SCALE + 1) -extern float log2_table[LOG2_TABLE_SIZE]; - - -/** - * Fast approximation to log2(x). - */ -static inline float -util_fast_log2(float x) -{ - union fi num; - float epart, mpart; - num.f = x; - epart = (float)(((num.i & 0x7f800000) >> 23) - 127); - /* mpart = log2_table[mantissa*LOG2_TABLE_SCALE + 0.5] */ - mpart = log2_table[((num.i & 0x007fffff) + (1 << (22 - LOG2_TABLE_SIZE_LOG2))) >> (23 - LOG2_TABLE_SIZE_LOG2)]; - return epart + mpart; -} - - -/** - * Floor(x), returned as int. - */ -static inline int -util_ifloor(float f) -{ -#if defined(USE_X86_ASM) && defined(__GNUC__) && defined(__i386__) - /* - * IEEE floor for computers that round to nearest or even. - * 'f' must be between -4194304 and 4194303. - * This floor operation is done by "(iround(f + .5) + iround(f - .5)) >> 1", - * but uses some IEEE specific tricks for better speed. - * Contributed by Josh Vanderhoof - */ - int ai, bi; - double af, bf; - af = (3 << 22) + 0.5 + (double)f; - bf = (3 << 22) + 0.5 - (double)f; - /* GCC generates an extra fstp/fld without this. */ - __asm__ ("fstps %0" : "=m" (ai) : "t" (af) : "st"); - __asm__ ("fstps %0" : "=m" (bi) : "t" (bf) : "st"); - return (ai - bi) >> 1; -#else - int ai, bi; - double af, bf; - union fi u; - af = (3 << 22) + 0.5 + (double) f; - bf = (3 << 22) + 0.5 - (double) f; - u.f = (float) af; ai = u.i; - u.f = (float) bf; bi = u.i; - return (ai - bi) >> 1; -#endif -} - - -/** - * Round float to nearest int. - * the range of f should be [INT_MIN, INT_MAX] - */ -static inline int -util_iround(float f) -{ - return (int)lrintf(f); -} - - -/** - * Approximate floating point comparison - */ -static inline bool -util_is_approx(float a, float b, float tol) -{ - return fabsf(b - a) <= tol; -} - - -/** - * util_is_X_inf_or_nan = test if x is NaN or +/- Inf - * util_is_X_nan = test if x is NaN - * util_X_inf_sign = return +1 for +Inf, -1 for -Inf, or 0 for not Inf - * - * NaN can be checked with x != x, however this fails with the fast math flag - **/ - - -/** - * Single-float - */ -static inline bool -util_is_inf_or_nan(float x) -{ - union fi tmp; - tmp.f = x; - return (tmp.ui & 0x7f800000) == 0x7f800000; -} - - -static inline bool -util_is_nan(float x) -{ - union fi tmp; - tmp.f = x; - return (tmp.ui & 0x7fffffff) > 0x7f800000; -} - - -static inline int -util_inf_sign(float x) -{ - union fi tmp; - tmp.f = x; - if ((tmp.ui & 0x7fffffff) != 0x7f800000) { - return 0; - } - - return (x < 0) ? -1 : 1; -} - - -/** - * Double-float - */ -static inline bool -util_is_double_inf_or_nan(double x) -{ - union di tmp; - tmp.d = x; - return (tmp.ui & 0x7ff0000000000000ULL) == 0x7ff0000000000000ULL; -} - - -static inline bool -util_is_double_nan(double x) -{ - union di tmp; - tmp.d = x; - return (tmp.ui & 0x7fffffffffffffffULL) > 0x7ff0000000000000ULL; -} - - -static inline int -util_double_inf_sign(double x) -{ - union di tmp; - tmp.d = x; - if ((tmp.ui & 0x7fffffffffffffffULL) != 0x7ff0000000000000ULL) { - return 0; - } - - return (x < 0) ? -1 : 1; -} - - -/** - * Half-float - */ -static inline bool -util_is_half_inf_or_nan(int16_t x) -{ - return (x & 0x7c00) == 0x7c00; -} - - -static inline bool -util_is_half_nan(int16_t x) -{ - return (x & 0x7fff) > 0x7c00; -} - - -static inline int -util_half_inf_sign(int16_t x) -{ - if ((x & 0x7fff) != 0x7c00) { - return 0; - } - - return (x < 0) ? -1 : 1; -} - - -/** - * Return float bits. - */ -static inline unsigned -fui( float f ) -{ - union fi fi; - fi.f = f; - return fi.ui; -} - -static inline float -uif(uint32_t ui) -{ - union fi fi; - fi.ui = ui; - return fi.f; -} - - -/** - * Convert uint8_t to float in [0, 1]. - */ -static inline float -ubyte_to_float(uint8_t ub) -{ - return (float) ub * (1.0f / 255.0f); -} - - -/** - * Convert float in [0,1] to uint8_t in [0,255] with clamping. - */ -static inline uint8_t -float_to_ubyte(float f) -{ - /* return 0 for NaN too */ - if (!(f > 0.0f)) { - return (uint8_t) 0; - } - else if (f >= 1.0f) { - return (uint8_t) 255; - } - else { - union fi tmp; - tmp.f = f; - tmp.f = tmp.f * (255.0f/256.0f) + 32768.0f; - return (uint8_t) tmp.i; - } -} - -/** - * Convert uint16_t to float in [0, 1]. - */ -static inline float -ushort_to_float(uint16_t us) -{ - return (float) us * (1.0f / 65535.0f); -} - - -/** - * Convert float in [0,1] to uint16_t in [0,65535] with clamping. - */ -static inline uint16_t -float_to_ushort(float f) -{ - /* return 0 for NaN too */ - if (!(f > 0.0f)) { - return (uint16_t) 0; - } - else if (f >= 1.0f) { - return (uint16_t) 65535; - } - else { - union fi tmp; - tmp.f = f; - tmp.f = tmp.f * (65535.0f/65536.0f) + 128.0f; - return (uint16_t) tmp.i; - } -} - -static inline float -byte_to_float_tex(int8_t b) -{ - return (b == -128) ? -1.0F : b * 1.0F / 127.0F; -} - -static inline int8_t -float_to_byte_tex(float f) -{ - return (int8_t) (127.0F * f); -} - -/** - * Calc log base 2 - */ -static inline unsigned -util_logbase2(unsigned n) -{ -#if defined(HAVE___BUILTIN_CLZ) - return ((sizeof(unsigned) * 8 - 1) - __builtin_clz(n | 1)); -#else - unsigned pos = 0; - if (n >= 1<<16) { n >>= 16; pos += 16; } - if (n >= 1<< 8) { n >>= 8; pos += 8; } - if (n >= 1<< 4) { n >>= 4; pos += 4; } - if (n >= 1<< 2) { n >>= 2; pos += 2; } - if (n >= 1<< 1) { pos += 1; } - return pos; -#endif -} - -static inline uint64_t -util_logbase2_64(uint64_t n) -{ -#if defined(HAVE___BUILTIN_CLZLL) - return ((sizeof(uint64_t) * 8 - 1) - __builtin_clzll(n | 1)); -#else - uint64_t pos = 0ull; - if (n >= 1ull<<32) { n >>= 32; pos += 32; } - if (n >= 1ull<<16) { n >>= 16; pos += 16; } - if (n >= 1ull<< 8) { n >>= 8; pos += 8; } - if (n >= 1ull<< 4) { n >>= 4; pos += 4; } - if (n >= 1ull<< 2) { n >>= 2; pos += 2; } - if (n >= 1ull<< 1) { pos += 1; } - return pos; -#endif -} - -/** - * Returns the ceiling of log n base 2, and 0 when n == 0. Equivalently, - * returns the smallest x such that n <= 2**x. - */ -static inline unsigned -util_logbase2_ceil(unsigned n) -{ - if (n <= 1) - return 0; - - return 1 + util_logbase2(n - 1); -} - -static inline uint64_t -util_logbase2_ceil64(uint64_t n) -{ - if (n <= 1) - return 0; - - return 1ull + util_logbase2_64(n - 1); -} - -/** - * Returns the smallest power of two >= x - */ -static inline unsigned -util_next_power_of_two(unsigned x) -{ -#if defined(HAVE___BUILTIN_CLZ) - if (x <= 1) - return 1; - - return (1 << ((sizeof(unsigned) * 8) - __builtin_clz(x - 1))); -#else - unsigned val = x; - - if (x <= 1) - return 1; - - if (util_is_power_of_two_or_zero(x)) - return x; - - val--; - val = (val >> 1) | val; - val = (val >> 2) | val; - val = (val >> 4) | val; - val = (val >> 8) | val; - val = (val >> 16) | val; - val++; - return val; -#endif -} - -static inline uint64_t -util_next_power_of_two64(uint64_t x) -{ -#if defined(HAVE___BUILTIN_CLZLL) - if (x <= 1) - return 1; - - return (1ull << ((sizeof(uint64_t) * 8) - __builtin_clzll(x - 1))); -#else - uint64_t val = x; - - if (x <= 1) - return 1; - - if (util_is_power_of_two_or_zero64(x)) - return x; - - val--; - val = (val >> 1) | val; - val = (val >> 2) | val; - val = (val >> 4) | val; - val = (val >> 8) | val; - val = (val >> 16) | val; - val = (val >> 32) | val; - val++; - return val; -#endif -} - -/** - * Reverse bits in n - * Algorithm taken from: - * http://stackoverflow.com/questions/9144800/c-reverse-bits-in-unsigned-integer - */ -static inline unsigned -util_bitreverse(unsigned n) -{ - n = ((n >> 1) & 0x55555555u) | ((n & 0x55555555u) << 1); - n = ((n >> 2) & 0x33333333u) | ((n & 0x33333333u) << 2); - n = ((n >> 4) & 0x0f0f0f0fu) | ((n & 0x0f0f0f0fu) << 4); - n = ((n >> 8) & 0x00ff00ffu) | ((n & 0x00ff00ffu) << 8); - n = ((n >> 16) & 0xffffu) | ((n & 0xffffu) << 16); - return n; -} - -/** - * Convert from little endian to CPU byte order. - */ - -#if UTIL_ARCH_BIG_ENDIAN -#define util_le64_to_cpu(x) util_bswap64(x) -#define util_le32_to_cpu(x) util_bswap32(x) -#define util_le16_to_cpu(x) util_bswap16(x) -#else -#define util_le64_to_cpu(x) (x) -#define util_le32_to_cpu(x) (x) -#define util_le16_to_cpu(x) (x) -#endif - -#define util_cpu_to_le64(x) util_le64_to_cpu(x) -#define util_cpu_to_le32(x) util_le32_to_cpu(x) -#define util_cpu_to_le16(x) util_le16_to_cpu(x) - -/** - * Reverse byte order of a 32 bit word. - */ -static inline uint32_t -util_bswap32(uint32_t n) -{ -#if defined(HAVE___BUILTIN_BSWAP32) - return __builtin_bswap32(n); -#else - return (n >> 24) | - ((n >> 8) & 0x0000ff00) | - ((n << 8) & 0x00ff0000) | - (n << 24); -#endif -} - -/** - * Reverse byte order of a 64bit word. - */ -static inline uint64_t -util_bswap64(uint64_t n) -{ -#if defined(HAVE___BUILTIN_BSWAP64) - return __builtin_bswap64(n); -#else - return ((uint64_t)util_bswap32((uint32_t)n) << 32) | - util_bswap32((n >> 32)); -#endif -} - - -/** - * Reverse byte order of a 16 bit word. - */ -static inline uint16_t -util_bswap16(uint16_t n) -{ - return (n >> 8) | - (n << 8); -} - -/** - * Mask and sign-extend a number - * - * The bit at position `width - 1` is replicated to all the higher bits. - * This makes no assumptions about the high bits of the value and will - * overwrite them with the sign bit. - */ -static inline int64_t -util_mask_sign_extend(uint64_t val, unsigned width) -{ - assert(width > 0 && width <= 64); - unsigned shift = 64 - width; - return (int64_t)(val << shift) >> shift; -} - -/** - * Sign-extend a number - * - * The bit at position `width - 1` is replicated to all the higher bits. - * This assumes and asserts that the value fits into `width` bits. - */ -static inline int64_t -util_sign_extend(uint64_t val, unsigned width) -{ - assert(width == 64 || val < (UINT64_C(1) << width)); - return util_mask_sign_extend(val, width); -} - -static inline void* -util_memcpy_cpu_to_le32(void * restrict dest, const void * restrict src, size_t n) -{ -#if UTIL_ARCH_BIG_ENDIAN - size_t i, e; - assert(n % 4 == 0); - - for (i = 0, e = n / 4; i < e; i++) { - uint32_t * restrict d = (uint32_t* restrict)dest; - const uint32_t * restrict s = (const uint32_t* restrict)src; - d[i] = util_bswap32(s[i]); - } - return dest; -#else - return memcpy(dest, src, n); -#endif -} - -/** - * Clamp X to [MIN, MAX]. - * This is a macro to allow float, int, uint, etc. types. - * We arbitrarily turn NaN into MIN. - */ -#define CLAMP( X, MIN, MAX ) ( (X)>(MIN) ? ((X)>(MAX) ? (MAX) : (X)) : (MIN) ) - -/* Syntax sugar occuring frequently in graphics code */ -#define SATURATE( X ) CLAMP(X, 0.0f, 1.0f) - -#define MIN2( A, B ) ( (A)<(B) ? (A) : (B) ) -#define MAX2( A, B ) ( (A)>(B) ? (A) : (B) ) - -#define MIN3( A, B, C ) ((A) < (B) ? MIN2(A, C) : MIN2(B, C)) -#define MAX3( A, B, C ) ((A) > (B) ? MAX2(A, C) : MAX2(B, C)) - -#define MIN4( A, B, C, D ) ((A) < (B) ? MIN3(A, C, D) : MIN3(B, C, D)) -#define MAX4( A, B, C, D ) ((A) > (B) ? MAX3(A, C, D) : MAX3(B, C, D)) - - -/** - * Align a value up to an alignment value - * - * If \c value is not already aligned to the requested alignment value, it - * will be rounded up. - * - * \param value Value to be rounded - * \param alignment Alignment value to be used. This must be a power of two. - * - * \sa ROUND_DOWN_TO() - */ - -#if defined(ALIGN) -#undef ALIGN -#endif -static inline uintptr_t -ALIGN(uintptr_t value, int32_t alignment) -{ - assert(util_is_power_of_two_nonzero(alignment)); - return (((value) + (alignment) - 1) & ~((alignment) - 1)); -} - -/** - * Like ALIGN(), but works with a non-power-of-two alignment. - */ -static inline uintptr_t -ALIGN_NPOT(uintptr_t value, int32_t alignment) -{ - assert(alignment > 0); - return (value + alignment - 1) / alignment * alignment; -} - -/** - * Align a value down to an alignment value - * - * If \c value is not already aligned to the requested alignment value, it - * will be rounded down. - * - * \param value Value to be rounded - * \param alignment Alignment value to be used. This must be a power of two. - * - * \sa ALIGN() - */ -static inline uint64_t -ROUND_DOWN_TO(uint64_t value, int32_t alignment) -{ - assert(util_is_power_of_two_nonzero(alignment)); - return ((value) & ~(alignment - 1)); -} - -/** - * Align a value, only works pot alignemnts. - */ -static inline int -align(int value, int alignment) -{ - return (value + alignment - 1) & ~(alignment - 1); -} - -static inline uint64_t -align64(uint64_t value, uint64_t alignment) -{ - return (value + alignment - 1) & ~(alignment - 1); -} - -/** - * Works like align but on npot alignments. - */ -static inline size_t -util_align_npot(size_t value, size_t alignment) -{ - if (value % alignment) - return value + (alignment - (value % alignment)); - return value; -} - -static inline unsigned -u_minify(unsigned value, unsigned levels) -{ - return MAX2(1, value >> levels); -} - -#ifndef COPY_4V -#define COPY_4V( DST, SRC ) \ -do { \ - (DST)[0] = (SRC)[0]; \ - (DST)[1] = (SRC)[1]; \ - (DST)[2] = (SRC)[2]; \ - (DST)[3] = (SRC)[3]; \ -} while (0) -#endif - - -#ifndef COPY_4FV -#define COPY_4FV( DST, SRC ) COPY_4V(DST, SRC) -#endif - - -#ifndef ASSIGN_4V -#define ASSIGN_4V( DST, V0, V1, V2, V3 ) \ -do { \ - (DST)[0] = (V0); \ - (DST)[1] = (V1); \ - (DST)[2] = (V2); \ - (DST)[3] = (V3); \ -} while (0) -#endif - - -static inline uint32_t -util_unsigned_fixed(float value, unsigned frac_bits) -{ - return value < 0 ? 0 : (uint32_t)(value * (1< 256) - return upload_vertex_count > draw_vertex_count * 4; - else if (upload_vertex_count > 64) - return upload_vertex_count > draw_vertex_count * 8; - else - return upload_vertex_count > draw_vertex_count * 16; -} - -bool util_invert_mat4x4(float *out, const float *m); - -/* Quantize the lod bias value to reduce the number of sampler state - * variants in gallium because apps use it for smooth mipmap transitions, - * thrashing cso_cache and degrading performance. - * - * This quantization matches the AMD hw specification, so having more - * precision would have no effect anyway. - */ -static inline float -util_quantize_lod_bias(float lod) -{ - lod = CLAMP(lod, -32, 31); - return roundf(lod * 256) / 256; -} - -/** - * Adds two unsigned integers and if the addition - * overflows then clamp it to ~0U. - */ -static inline unsigned -util_clamped_uadd(unsigned a, unsigned b) -{ - unsigned res = a + b; - if (res < a) { - res = ~0U; - } - return res; -} - -#ifdef __cplusplus -} -#endif - -#endif /* U_MATH_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_memory.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_memory.h deleted file mode 100644 index 173510b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_memory.h +++ /dev/null @@ -1,123 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - - -/* - * Memory functions - */ - - -#ifndef U_MEMORY_H -#define U_MEMORY_H - -#include "u_debug.h" -#include "os_memory.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -#define MALLOC(_size) os_malloc(_size) - -#define CALLOC(_count, _size) os_calloc(_count, _size) - -#define FREE(_ptr ) os_free(_ptr) - -#define REALLOC(_ptr, _old_size, _size) os_realloc(_ptr, _old_size, _size) - -#define MALLOC_STRUCT(T) (struct T *) MALLOC(sizeof(struct T)) - -#define CALLOC_STRUCT(T) (struct T *) CALLOC(1, sizeof(struct T)) - -#define CALLOC_VARIANT_LENGTH_STRUCT(T,more_size) ((struct T *) CALLOC(1, sizeof(struct T) + more_size)) - - -#define align_malloc(_size, _alignment) os_malloc_aligned(_size, _alignment) -#define align_free(_ptr) os_free_aligned(_ptr) -#define align_realloc(_ptr, _oldsize, _newsize, _alignment) os_realloc_aligned(_ptr, _oldsize, _newsize, _alignment) - -static inline void * -align_calloc(size_t size, unsigned long alignment) -{ - void *ptr = align_malloc(size, alignment); - if (ptr) - memset(ptr, 0, size); - return ptr; -} - -/** - * Duplicate a block of memory. - */ -static inline void * -mem_dup(const void *src, size_t size) -{ - void *dup = MALLOC(size); - if (dup) - memcpy(dup, src, size); - return dup; -} - - -/** - * Offset of a field in a struct, in bytes. - */ -#define Offset(TYPE, MEMBER) ((uintptr_t)&(((TYPE *)NULL)->MEMBER)) - -/* TODO: this could be different on non-x86 architectures. */ -#define CACHE_LINE_SIZE 64 - -/** - * Declare a variable on its own cache line. - * - * This helps eliminate "False sharing" to make atomic operations - * on pipe_reference::count faster and/or access to adjacent fields faster. - * - * https://en.wikipedia.org/wiki/False_sharing - * - * CALLOC_STRUCT_CL or MALLOC_STRUCT_CL and FREE_CL should be used to allocate - * structures that contain this. - * - * NOTE: Don't use c11 alignas because it causes the whole structure to be - * aligned, but we only want to align the field. - */ -#define EXCLUSIVE_CACHELINE(decl) \ - union { char __cl_space[CACHE_LINE_SIZE]; \ - decl; } - -/* Allocate a structure aligned to a cache line. (used to make atomic ops faster) */ -#define MALLOC_STRUCT_CL(T) (struct T *)align_malloc(sizeof(struct T), CACHE_LINE_SIZE) -#define CALLOC_STRUCT_CL(T) (struct T *)align_calloc(sizeof(struct T), CACHE_LINE_SIZE) -#define FREE_CL(ptr) align_free(ptr) - -#ifdef __cplusplus -} -#endif - - -#endif /* U_MEMORY_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_memset.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_memset.h deleted file mode 100644 index ed7d824..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_memset.h +++ /dev/null @@ -1,67 +0,0 @@ -/************************************************************************** - * - * Copyright 2020 Red Hat - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#include "detect.h" - -static inline void * -util_memset32(void *s, uint32_t ui, size_t n) -{ -#if DETECT_CC_GCC && DETECT_ARCH_X86_64 - long d0, d1; - __asm__ volatile("rep\n\t" - "stosl" - : "=&c" (d0), "=&D" (d1) - : "a" (ui), "1" (s), "0" (n) - : "memory"); - return s; -#else - uint32_t *xs = (uint32_t *)s; - while (n--) - *xs++ = ui; - return s; -#endif -} - -static inline void * -util_memset64(void *s, uint64_t ui, size_t n) -{ -#if DETECT_CC_GCC && DETECT_ARCH_X86_64 - long d0, d1; - __asm__ volatile("rep\n\t" - "stosq" - : "=&c" (d0), "=&D" (d1) - : "a" (ui), "1" (s), "0" (n) - : "memory"); - return s; -#else - uint64_t *xs = (uint64_t *)s; - while (n--) - *xs++ = ui; - return s; -#endif - -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_mm.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_mm.c deleted file mode 100644 index a82ba03..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_mm.c +++ /dev/null @@ -1,299 +0,0 @@ -/************************************************************************** - * - * Copyright (C) 1999 Wittawat Yamwong - * - * 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 - * WITTAWAT YAMWONG, OR ANY OTHER CONTRIBUTORS 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. - * - **************************************************************************/ - - -#include "u_debug.h" - -#include "u_memory.h" -#include "u_mm.h" -#include "macros.h" - - -void -u_mmDumpMemInfo(const struct mem_block *heap) -{ - debug_printf("Memory heap %p:\n", (void *) heap); - if (heap == NULL) { - debug_printf(" heap == 0\n"); - } - else { - const struct mem_block *p; - int total_used = 0, total_free = 0; - - for (p = heap->next; p != heap; p = p->next) { - debug_printf(" Offset:%08x, Size:%08x, %c%c\n", p->ofs, p->size, - p->free ? 'F':'.', - p->reserved ? 'R':'.'); - if (p->free) - total_free += p->size; - else - total_used += p->size; - } - - debug_printf("'\nMemory stats: total = %d, used = %d, free = %d\n", - total_used + total_free, total_used, total_free); - debug_printf("\nFree list:\n"); - - for (p = heap->next_free; p != heap; p = p->next_free) { - debug_printf(" FREE Offset:%08x, Size:%08x, %c%c\n", p->ofs, p->size, - p->free ? 'F':'.', - p->reserved ? 'R':'.'); - } - - } - debug_printf("End of memory blocks\n"); -} - - -struct mem_block * -u_mmInit(int ofs, int size) -{ - struct mem_block *heap, *block; - - if (size <= 0) - return NULL; - - heap = CALLOC_STRUCT(mem_block); - if (!heap) - return NULL; - - block = CALLOC_STRUCT(mem_block); - if (!block) { - FREE(heap); - return NULL; - } - - heap->next = block; - heap->prev = block; - heap->next_free = block; - heap->prev_free = block; - - block->heap = heap; - block->next = heap; - block->prev = heap; - block->next_free = heap; - block->prev_free = heap; - - block->ofs = ofs; - block->size = size; - block->free = 1; - - return heap; -} - - -static struct mem_block * -SliceBlock(struct mem_block *p, - int startofs, int size, - int reserved, UNUSED int alignment) -{ - struct mem_block *newblock; - - /* break left [p, newblock, p->next], then p = newblock */ - if (startofs > p->ofs) { - newblock = CALLOC_STRUCT(mem_block); - if (!newblock) - return NULL; - newblock->ofs = startofs; - newblock->size = p->size - (startofs - p->ofs); - newblock->free = 1; - newblock->heap = p->heap; - - newblock->next = p->next; - newblock->prev = p; - p->next->prev = newblock; - p->next = newblock; - - newblock->next_free = p->next_free; - newblock->prev_free = p; - p->next_free->prev_free = newblock; - p->next_free = newblock; - - p->size -= newblock->size; - p = newblock; - } - - /* break right, also [p, newblock, p->next] */ - if (size < p->size) { - newblock = CALLOC_STRUCT(mem_block); - if (!newblock) - return NULL; - newblock->ofs = startofs + size; - newblock->size = p->size - size; - newblock->free = 1; - newblock->heap = p->heap; - - newblock->next = p->next; - newblock->prev = p; - p->next->prev = newblock; - p->next = newblock; - - newblock->next_free = p->next_free; - newblock->prev_free = p; - p->next_free->prev_free = newblock; - p->next_free = newblock; - - p->size = size; - } - - /* p = middle block */ - p->free = 0; - - /* Remove p from the free list: - */ - p->next_free->prev_free = p->prev_free; - p->prev_free->next_free = p->next_free; - - p->next_free = NULL; - p->prev_free = NULL; - - p->reserved = reserved; - return p; -} - - -struct mem_block * -u_mmAllocMem(struct mem_block *heap, int size, int align2, int startSearch) -{ - struct mem_block *p; - const int mask = (1 << align2)-1; - int startofs = 0; - int endofs; - - assert(size >= 0); - assert(align2 >= 0); - /* Make sure that a byte alignment isn't getting passed for our - * power-of-two alignment arg. - */ - assert(align2 < 32); - - if (!heap || align2 < 0 || size <= 0) - return NULL; - - for (p = heap->next_free; p != heap; p = p->next_free) { - assert(p->free); - - startofs = (p->ofs + mask) & ~mask; - if ( startofs < startSearch ) { - startofs = startSearch; - } - endofs = startofs+size; - if (endofs <= (p->ofs+p->size)) - break; - } - - if (p == heap) - return NULL; - - assert(p->free); - p = SliceBlock(p,startofs,size,0,mask+1); - - return p; -} - - -struct mem_block * -u_mmFindBlock(struct mem_block *heap, int start) -{ - struct mem_block *p; - - for (p = heap->next; p != heap; p = p->next) { - if (p->ofs == start) - return p; - } - - return NULL; -} - - -static inline int -Join2Blocks(struct mem_block *p) -{ - /* XXX there should be some assertions here */ - - /* NOTE: heap->free == 0 */ - - if (p->free && p->next->free) { - struct mem_block *q = p->next; - - assert(p->ofs + p->size == q->ofs); - p->size += q->size; - - p->next = q->next; - q->next->prev = p; - - q->next_free->prev_free = q->prev_free; - q->prev_free->next_free = q->next_free; - - FREE(q); - return 1; - } - return 0; -} - -int -u_mmFreeMem(struct mem_block *b) -{ - if (!b) - return 0; - - if (b->free) { - debug_printf("block already free\n"); - return -1; - } - if (b->reserved) { - debug_printf("block is reserved\n"); - return -1; - } - - b->free = 1; - b->next_free = b->heap->next_free; - b->prev_free = b->heap; - b->next_free->prev_free = b; - b->prev_free->next_free = b; - - Join2Blocks(b); - if (b->prev != b->heap) - Join2Blocks(b->prev); - - return 0; -} - - -void -u_mmDestroy(struct mem_block *heap) -{ - struct mem_block *p; - - if (!heap) - return; - - for (p = heap->next; p != heap; ) { - struct mem_block *next = p->next; - FREE(p); - p = next; - } - - FREE(heap); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_mm.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_mm.h deleted file mode 100644 index 66886fe..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_mm.h +++ /dev/null @@ -1,91 +0,0 @@ -/************************************************************************** - * - * Copyright (C) 1999 Wittawat Yamwong - * - * 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 - * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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 - * Memory manager code. Primarily used by device drivers to manage texture - * heaps, etc. - */ - - -#ifndef _U_MM_H_ -#define _U_MM_H_ - - -struct mem_block { - struct mem_block *next, *prev; - struct mem_block *next_free, *prev_free; - struct mem_block *heap; - int ofs,size; - unsigned int free:1; - unsigned int reserved:1; -}; - - - -/** - * input: total size in bytes - * return: a heap pointer if OK, NULL if error - */ -extern struct mem_block *u_mmInit(int ofs, int size); - -/** - * Allocate 'size' bytes with 2^align2 bytes alignment, - * restrict the search to free memory after 'startSearch' - * depth and back buffers should be in different 4mb banks - * to get better page hits if possible - * input: size = size of block - * align2 = 2^align2 bytes alignment - * startSearch = linear offset from start of heap to begin search - * return: pointer to the allocated block, 0 if error - */ -extern struct mem_block *u_mmAllocMem(struct mem_block *heap, int size, int align2, - int startSearch); - -/** - * Free block starts at offset - * input: pointer to a block - * return: 0 if OK, -1 if error - */ -extern int u_mmFreeMem(struct mem_block *b); - -/** - * Free block starts at offset - * input: pointer to a heap, start offset - * return: pointer to a block - */ -extern struct mem_block *u_mmFindBlock(struct mem_block *heap, int start); - -/** - * destroy MM - */ -extern void u_mmDestroy(struct mem_block *mmInit); - -/** - * For debugging purposes. - */ -extern void u_mmDumpMemInfo(const struct mem_block *mmInit); - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_pointer.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_pointer.h deleted file mode 100644 index e106eb2..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_pointer.h +++ /dev/null @@ -1,130 +0,0 @@ -/************************************************************************** - * - * Copyright 2007-2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -#ifndef U_POINTER_H -#define U_POINTER_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -static inline intptr_t -pointer_to_intptr( const void *p ) -{ - union { - const void *p; - intptr_t i; - } pi; - pi.p = p; - return pi.i; -} - -static inline void * -intptr_to_pointer( intptr_t i ) -{ - union { - void *p; - intptr_t i; - } pi; - pi.i = i; - return pi.p; -} - -static inline uintptr_t -pointer_to_uintptr( const void *ptr ) -{ - union { - const void *p; - uintptr_t u; - } pu; - pu.p = ptr; - return pu.u; -} - -static inline void * -uintptr_to_pointer( uintptr_t u ) -{ - union { - void *p; - uintptr_t u; - } pu; - pu.u = u; - return pu.p; -} - -/** - * Return a pointer aligned to next multiple of N bytes. - */ -static inline void * -align_pointer( const void *unaligned, uintptr_t alignment ) -{ - uintptr_t aligned = (pointer_to_uintptr( unaligned ) + alignment - 1) & ~(alignment - 1); - return uintptr_to_pointer( aligned ); -} - - -/** - * Return a pointer aligned to next multiple of 16 bytes. - */ -static inline void * -align16( void *unaligned ) -{ - return align_pointer( unaligned, 16 ); -} - -typedef void (*func_pointer)(void); - -static inline func_pointer -pointer_to_func( void *p ) -{ - union { - void *p; - func_pointer f; - } pf; - pf.p = p; - return pf.f; -} - -static inline void * -func_to_pointer( func_pointer f ) -{ - union { - void *p; - func_pointer f; - } pf; - pf.f = f; - return pf.p; -} - - -#ifdef __cplusplus -} -#endif - -#endif /* U_POINTER_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_printf.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_printf.c deleted file mode 100644 index c9c8053..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_printf.c +++ /dev/null @@ -1,234 +0,0 @@ -// -// Copyright 2020 Serge Martin -// -// 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 -// THE AUTHORS OR COPYRIGHT HOLDERS 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. -// -// Extract from Serge's printf clover code by airlied. - -#include -#include -#include -#include -#include - -#include "macros.h" -#include "strndup.h" -#include "u_math.h" -#include "u_printf.h" - -/* Some versions of MinGW are missing _vscprintf's declaration, although they - * still provide the symbol in the import library. */ -#ifdef __MINGW32__ -_CRTIMP int _vscprintf(const char *format, va_list argptr); -#endif - -static const char* -util_printf_prev_tok(const char *str) -{ - while (*str != '%') - str--; - return str; -} - -size_t util_printf_next_spec_pos(const char *str, size_t pos) -{ - if (str == NULL) - return -1; - - const char *str_found = str + pos; - do { - str_found = strchr(str_found, '%'); - if (str_found == NULL) - return -1; - - ++str_found; - if (*str_found == '%') { - ++str_found; - continue; - } - - char *spec_pos = strpbrk(str_found, "cdieEfFgGaAosuxXp%"); - if (spec_pos == NULL) { - return -1; - } else if (*spec_pos == '%') { - str_found = spec_pos; - } else { - return spec_pos - str; - } - } while (1); -} - -size_t u_printf_length(const char *fmt, va_list untouched_args) -{ - int size; - char junk; - - /* Make a copy of the va_list so the original caller can still use it */ - va_list args; - va_copy(args, untouched_args); - -#ifdef _WIN32 - /* We need to use _vcsprintf to calculate the size as vsnprintf returns -1 - * if the number of characters to write is greater than count. - */ - size = _vscprintf(fmt, args); - (void)junk; -#else - size = vsnprintf(&junk, 1, fmt, args); -#endif - assert(size >= 0); - - va_end(args); - - return size; -} - -void u_printf(FILE *out, const char *buffer, size_t buffer_size, - const u_printf_info *info, unsigned info_size) -{ - for (size_t buf_pos = 0; buf_pos < buffer_size;) { - uint32_t fmt_idx = *(uint32_t*)&buffer[buf_pos]; - - /* the idx is 1 based */ - assert(fmt_idx > 0); - fmt_idx -= 1; - - /* The API allows more arguments than the format uses */ - if (fmt_idx >= info_size) - return; - - const u_printf_info *fmt = &info[fmt_idx]; - const char *format = fmt->strings; - buf_pos += sizeof(fmt_idx); - - if (!fmt->num_args) { - fprintf(out, "%s", format); - continue; - } - - for (int i = 0; i < fmt->num_args; i++) { - int arg_size = fmt->arg_sizes[i]; - size_t spec_pos = util_printf_next_spec_pos(format, 0); - - if (spec_pos == -1) { - fprintf(out, "%s", format); - continue; - } - - const char *token = util_printf_prev_tok(&format[spec_pos]); - const char *next_format = &format[spec_pos + 1]; - - /* print the part before the format token */ - if (token != format) - fwrite(format, token - format, 1, out); - - char *print_str = strndup(token, next_format - token); - /* rebase spec_pos so we can use it with print_str */ - spec_pos += format - token; - - /* print the formated part */ - if (print_str[spec_pos] == 's') { - uint64_t idx; - memcpy(&idx, &buffer[buf_pos], 8); - fprintf(out, print_str, &fmt->strings[idx]); - - /* Never pass a 'n' spec to the host printf */ - } else if (print_str[spec_pos] != 'n') { - char *vec_pos = strchr(print_str, 'v'); - char *mod_pos = strpbrk(print_str, "hl"); - - int component_count = 1; - if (vec_pos != NULL) { - /* non vector part of the format */ - size_t base = mod_pos ? mod_pos - print_str : spec_pos; - size_t l = base - (vec_pos - print_str) - 1; - char *vec = strndup(&vec_pos[1], l); - component_count = atoi(vec); - free(vec); - - /* remove the vector and precision stuff */ - memmove(&print_str[vec_pos - print_str], &print_str[spec_pos], 2); - } - - /* in fact vec3 are vec4 */ - int men_components = component_count == 3 ? 4 : component_count; - size_t elmt_size = arg_size / men_components; - bool is_float = strpbrk(print_str, "fFeEgGaA") != NULL; - - for (int i = 0; i < component_count; i++) { - size_t elmt_buf_pos = buf_pos + i * elmt_size; - switch (elmt_size) { - case 1: { - uint8_t v; - memcpy(&v, &buffer[elmt_buf_pos], elmt_size); - fprintf(out, print_str, v); - break; - } - case 2: { - uint16_t v; - memcpy(&v, &buffer[elmt_buf_pos], elmt_size); - fprintf(out, print_str, v); - break; - } - case 4: { - if (is_float) { - float v; - memcpy(&v, &buffer[elmt_buf_pos], elmt_size); - fprintf(out, print_str, v); - } else { - uint32_t v; - memcpy(&v, &buffer[elmt_buf_pos], elmt_size); - fprintf(out, print_str, v); - } - break; - } - case 8: { - if (is_float) { - double v; - memcpy(&v, &buffer[elmt_buf_pos], elmt_size); - fprintf(out, print_str, v); - } else { - uint64_t v; - memcpy(&v, &buffer[elmt_buf_pos], elmt_size); - fprintf(out, print_str, v); - } - break; - } - default: - assert(false); - break; - } - - if (i < component_count - 1) - fprintf(out, ","); - } - } - - /* rebase format */ - format = next_format; - free(print_str); - - buf_pos += arg_size; - buf_pos = ALIGN(buf_pos, 4); - } - - /* print remaining */ - fprintf(out, "%s", format); - } -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_printf.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_printf.h deleted file mode 100644 index d0f6b4d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_printf.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright 2020 Serge Martin -// -// 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 -// THE AUTHORS OR COPYRIGHT HOLDERS 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. -// -#ifndef U_PRINTF_H -#define U_PRINTF_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct u_printf_info { - unsigned num_args; - unsigned *arg_sizes; - unsigned string_size; - char *strings; -} u_printf_info; - -/* find next valid printf specifier in a C string wrapper */ -size_t util_printf_next_spec_pos(const char *str, size_t pos); - -/* Return the length of the string that would be generated by a printf-style - * format and argument list, not including the \0 byte. - * The untouched_args parameter is left untouched so it can be re-used by the - * caller in a vsnprintf() call or similar. - */ -size_t u_printf_length(const char *fmt, va_list untouched_args); - -void u_printf(FILE *out, const char *buffer, size_t buffer_size, - const u_printf_info*, unsigned info_size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_process.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_process.c deleted file mode 100644 index 322fe11..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_process.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Copyright © 2003 Felix Kuehling - * Copyright © 2018 Advanced Micro Devices, Inc. - * 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, sub license, 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 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 - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ - -#include "os_misc.h" -#include "u_process.h" -#include "detect_os.h" -#include "macros.h" -#include -#include -#include - -#if DETECT_OS_WINDOWS -#include -#else -#include -#endif - -#if DETECT_OS_APPLE -#include -#endif - -#if DETECT_OS_BSD -#include -#include -#endif - -#if DETECT_OS_LINUX -#include -#endif - -#include "u_call_once.h" - -#undef GET_PROGRAM_NAME_NOT_AVAILABLE - -#if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME) -static char * -__getProgramName() -{ - char * arg = strrchr(program_invocation_name, '/'); - if (arg) { - char *program_name = NULL; - /* If the / character was found this is likely a linux path or - * an invocation path for a 64-bit wine program. - * - * However, some programs pass command line arguments into argv[0]. - * Strip these arguments out by using the realpath only if it was - * a prefix of the invocation name. - */ - char *path = realpath("/proc/self/exe", NULL); - - if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) { - /* This shouldn't be null because path is a a prefix, - * but check it anyway since path is static. */ - char * name = strrchr(path, '/'); - if (name) - program_name = strdup(name + 1); - } - if (path) { - free(path); - } - if (!program_name) { - program_name = strdup(arg+1); - } - return program_name; - } - - /* If there was no '/' at all we likely have a windows like path from - * a wine application. - */ - arg = strrchr(program_invocation_name, '\\'); - if (arg) - return strdup(arg+1); - - return strdup(program_invocation_name); -} -#elif defined(HAVE_PROGRAM_INVOCATION_NAME) -static char * -__getProgramName() -{ - return strdup(program_invocation_short_name); -} -#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__) || defined(ANDROID) || defined(__NetBSD__) -#if defined(__NetBSD__) -# include -#endif -#if defined(__NetBSD_Version__) && (__NetBSD_Version__ < 106000100) -#define GET_PROGRAM_NAME_NOT_AVAILABLE -#else /* !(defined(__NetBSD_Version__) && (__NetBSD_Version__ < 106000100)) */ -static char * -__getProgramName() -{ - const char *program_name = getprogname(); - if (program_name) { - return strdup(program_name); - } - return NULL; -} -#endif /* defined(__NetBSD_Version__) && (__NetBSD_Version__ < 106000100) */ -#elif defined(__sun) -/* Solaris has getexecname() which returns the full path - return just - the basename to match BSD getprogname() */ -# include - -static char * -__getProgramName() -{ - char *progname = NULL; - const char *e = getexecname(); - if (e != NULL) { - /* Have to make a copy since getexecname can return a readonly - string, but basename expects to be able to modify its arg. */ - char *n = strdup(e); - if (n != NULL) { - progname = strdup(basename(n)); - free(n); - } - } - return progname; -} -#elif DETECT_OS_WINDOWS -static char * -__getProgramName() -{ - char *progname; - static char buf[MAX_PATH]; - GetModuleFileNameA(NULL, buf, sizeof(buf)); - progname = strrchr(buf, '\\'); - if (progname) - progname++; - else - progname = buf; - return strdup(progname); -} -#elif DETECT_OS_HAIKU -# include -# include -static char * -__getProgramName() -{ - image_info info; - get_image_info(B_CURRENT_TEAM, &info); - return strdup(info.name); -} -#else -#define GET_PROGRAM_NAME_NOT_AVAILABLE -#endif - -#if defined(GET_PROGRAM_NAME_NOT_AVAILABLE) -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__UCLIBC__) || defined(ANDROID) -/* This is a hack. It's said to work on OpenBSD, NetBSD and GNU. - * Rogelio M.Serrano Jr. reported it's also working with UCLIBC. It's - * used as a last resort, if there is no documented facility available. */ -static char * -__getProgramName() -{ - extern const char *__progname; - char * arg = strrchr(__progname, '/'); - if (arg) - return strdup(arg+1); - else - return strdup(__progname); -} -#else -#pragma message ( "Warning: Per application configuration won't work with your OS version." ) -static char * -__getProgramName() -{ - return strdup(""); -} -#endif -#endif /* GET_PROGRAM_NAME_NOT_AVAILABLE */ - -static char *program_name; - -static void -free_program_name(void) -{ - free(program_name); - program_name = NULL; -} - -static void -util_get_process_name_callback(void) -{ - const char *override_name = os_get_option("MESA_PROCESS_NAME"); - program_name = override_name ? strdup(override_name) : __getProgramName(); - - if (program_name) - atexit(free_program_name); -} - -const char * -util_get_process_name(void) -{ - static util_once_flag once_state = UTIL_ONCE_FLAG_INIT; - util_call_once(&once_state, util_get_process_name_callback); - return program_name; -} - -size_t -util_get_process_exec_path(char* process_path, size_t len) -{ -#if DETECT_OS_WINDOWS - return GetModuleFileNameA(NULL, process_path, len); -#elif DETECT_OS_APPLE - uint32_t bufSize = len; - int result = _NSGetExecutablePath(process_path, &bufSize); - - return (result == 0) ? strlen(process_path) : 0; -#elif DETECT_OS_FREEBSD - int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; - - (void) sysctl(mib, 4, process_path, &len, NULL, 0); - process_path[len - 1] = '\0'; - - return len; -#elif DETECT_OS_UNIX - ssize_t r; - - if ((r = readlink("/proc/self/exe", process_path, len)) > 0) - goto success; - if ((r = readlink("/proc/curproc/exe", process_path, len)) > 0) - goto success; - if ((r = readlink("/proc/curproc/file", process_path, len)) > 0) - goto success; - - return 0; -success: - if (r == len) - return 0; - - process_path[r] = '\0'; - return r; - -#endif - return 0; -} - -bool -util_get_command_line(char *cmdline, size_t size) -{ -#if DETECT_OS_WINDOWS - const char *args = GetCommandLineA(); - if (args) { - strncpy(cmdline, args, size); - // make sure we terminate the string - cmdline[size - 1] = 0; - return true; - } -#elif DETECT_OS_LINUX - int f = open("/proc/self/cmdline", O_RDONLY); - if (f != -1) { - const int n = read(f, cmdline, size - 1); - int i; - assert(n < size); - // The arguments are separated by '\0' chars. Convert them to spaces. - for (i = 0; i < n; i++) { - if (cmdline[i] == 0) { - cmdline[i] = ' '; - } - } - // terminate the string - cmdline[n] = 0; - close(f); - return true; - } -#elif DETECT_OS_BSD - int mib[] = { - CTL_KERN, -#if DETECT_OS_NETBSD || DETECT_OS_OPENBSD - KERN_PROC_ARGS, - getpid(), - KERN_PROC_ARGV, -#else - KERN_PROC, - KERN_PROC_ARGS, - getpid(), -#endif - }; - - /* Like /proc/pid/cmdline each argument is separated by NUL byte */ - if (sysctl(mib, ARRAY_SIZE(mib), cmdline, &size, NULL, 0) == -1) { - return false; - } - - /* Replace NUL with space except terminating NUL */ - for (size_t i = 0; i < (size - 1); i++) { - if (cmdline[i] == '\0') - cmdline[i] = ' '; - } - - return true; -#endif - - /* XXX to-do: implement this function for other operating systems */ - - cmdline[0] = 0; - return false; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_process.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_process.h deleted file mode 100644 index cc52e03..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_process.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2003 Felix Kuehling - * Copyright © 2018 Advanced Micro Devices, Inc. - * 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, sub license, 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 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 - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ - -#ifndef PROCESS_H -#define PROCESS_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -const char * -util_get_process_name(void); - -size_t -util_get_process_exec_path(char* process_path, size_t len); - -/** - * Return the command line for the calling process. This is basically - * the argv[] array with the arguments separated by spaces. - * \param cmdline returns the command line string - * \param size size of the cmdline buffer - * \return true or false for success, failure - */ -bool -util_get_command_line(char *cmdline, size_t size); - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_qsort.cpp b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_qsort.cpp deleted file mode 100644 index 69a71f0..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_qsort.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "u_qsort.h" -#include - -thread_local int (*tl_qsort_r_compar)(const void *, const void *, void *); -thread_local void *tl_qsort_r_arg; - -static int -qsort_r_compar(const void *a, const void *b) -{ - return tl_qsort_r_compar(a, b, tl_qsort_r_arg); -} - -void -util_tls_qsort_r(void *base, size_t nmemb, size_t size, - int (*compar)(const void *, const void *, void *), - void *arg) -{ - tl_qsort_r_compar = compar; - tl_qsort_r_arg = arg; - return qsort(base, nmemb, size, qsort_r_compar); -} - -int -util_qsort_adapter(void *ctx, const void *elem1, const void *elem2) -{ - util_qsort_adapter_data *data = - reinterpret_cast(ctx); - return data->compar(elem1, elem2, data->args); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_qsort.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_qsort.h deleted file mode 100644 index 3983ada..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_qsort.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright © 2020 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef U_QSORT_H -#define U_QSORT_H - -#include - -#include "detect_os.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void util_tls_qsort_r(void *base, size_t nmemb, size_t size, - int (*compar)(const void *, const void *, void *), - void *arg); - - -struct util_qsort_adapter_data { - int (*compar)(const void*, const void*, void*); - void *args; -}; - -/** - * Converts comparison function arguments - * from [MSVC, BSD, macOS] - * (void *ctx, const void *elem1, const void *elem2) - * to [GNU, C11] - * (const void *elem1, const void *elem2, void *ctx); - */ -int util_qsort_adapter(void *ctx, const void *elem1, const void *elem2); - -static inline void -util_qsort_r(void *base, size_t nmemb, size_t size, - int (*compar)(const void *, const void *, void *), - void *arg) -{ -#if defined(HAVE_GNU_QSORT_R) - /* GNU extension added in glibc 2.8 */ - qsort_r(base, nmemb, size, compar, arg); -#elif defined(HAVE_BSD_QSORT_R) - /* BSD/macOS qsort_r takes "arg" before the comparison function and it - * pass the "arg" before the elements. - */ - struct util_qsort_adapter_data data = { - compar, - arg - }; - qsort_r(base, nmemb, size, &data, util_qsort_adapter); -#elif HAVE_QSORT_S -# ifdef _WIN32 - /* MSVC/MinGW qsort_s takes "arg" after the comparison function and it - * pass the "arg" before the elements. - */ - struct util_qsort_adapter_data data = { - compar, - arg - }; - qsort_s(base, nmemb, size, util_qsort_adapter, &data); -# else - /* C11 added qsort_s */ - qsort_s(base, nmemb, size, compar, arg); -# endif -#else - /* Fall-back to using thread local storage */ - util_tls_qsort_r(base, nmemb, size, compar, arg); -#endif -} - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* U_QSORT_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_queue.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_queue.c deleted file mode 100644 index 19a01de..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_queue.c +++ /dev/null @@ -1,752 +0,0 @@ -/* - * Copyright © 2016 Advanced Micro Devices, Inc. - * 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, sub license, 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 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 - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ - -#include "u_queue.h" - -#include "../../include/c11/threads.h" -#include "u_cpu_detect.h" -#include "os_time.h" -#include "u_string.h" -#include "u_thread.h" -#include "u_process.h" - -#if defined(__linux__) -#include -#include -#include -#endif - - -/* Define 256MB */ -#define S_256MB (256 * 1024 * 1024) - -static void -util_queue_kill_threads(struct util_queue *queue, unsigned keep_num_threads, - bool locked); - -/**************************************************************************** - * Wait for all queues to assert idle when exit() is called. - * - * Otherwise, C++ static variable destructors can be called while threads - * are using the static variables. - */ - -static once_flag atexit_once_flag = ONCE_FLAG_INIT; -static struct list_head queue_list = { - .next = &queue_list, - .prev = &queue_list, -}; -static mtx_t exit_mutex; - -static void -atexit_handler(void) -{ - struct util_queue *iter; - - mtx_lock(&exit_mutex); - /* Wait for all queues to assert idle. */ - LIST_FOR_EACH_ENTRY(iter, &queue_list, head) { - util_queue_kill_threads(iter, 0, false); - } - mtx_unlock(&exit_mutex); -} - -static void -global_init(void) -{ - mtx_init(&exit_mutex, mtx_plain); - atexit(atexit_handler); -} - -static void -add_to_atexit_list(struct util_queue *queue) -{ - call_once(&atexit_once_flag, global_init); - - mtx_lock(&exit_mutex); - list_add(&queue->head, &queue_list); - mtx_unlock(&exit_mutex); -} - -static void -remove_from_atexit_list(struct util_queue *queue) -{ - struct util_queue *iter, *tmp; - - mtx_lock(&exit_mutex); - LIST_FOR_EACH_ENTRY_SAFE(iter, tmp, &queue_list, head) { - if (iter == queue) { - list_del(&iter->head); - break; - } - } - mtx_unlock(&exit_mutex); -} - -/**************************************************************************** - * util_queue_fence - */ - -#ifdef UTIL_QUEUE_FENCE_FUTEX -static bool -do_futex_fence_wait(struct util_queue_fence *fence, - bool timeout, int64_t abs_timeout) -{ - uint32_t v = p_atomic_read_relaxed(&fence->val); - struct timespec ts; - ts.tv_sec = abs_timeout / (1000*1000*1000); - ts.tv_nsec = abs_timeout % (1000*1000*1000); - - while (v != 0) { - if (v != 2) { - v = p_atomic_cmpxchg(&fence->val, 1, 2); - if (v == 0) - return true; - } - - int r = futex_wait(&fence->val, 2, timeout ? &ts : NULL); - if (timeout && r < 0) { - if (errno == ETIMEDOUT) - return false; - } - - v = p_atomic_read_relaxed(&fence->val); - } - - return true; -} - -void -_util_queue_fence_wait(struct util_queue_fence *fence) -{ - do_futex_fence_wait(fence, false, 0); -} - -bool -_util_queue_fence_wait_timeout(struct util_queue_fence *fence, - int64_t abs_timeout) -{ - return do_futex_fence_wait(fence, true, abs_timeout); -} - -#endif - -#ifdef UTIL_QUEUE_FENCE_STANDARD -void -util_queue_fence_signal(struct util_queue_fence *fence) -{ - mtx_lock(&fence->mutex); - fence->signalled = true; - cnd_broadcast(&fence->cond); - mtx_unlock(&fence->mutex); -} - -void -_util_queue_fence_wait(struct util_queue_fence *fence) -{ - mtx_lock(&fence->mutex); - while (!fence->signalled) - cnd_wait(&fence->cond, &fence->mutex); - mtx_unlock(&fence->mutex); -} - -bool -_util_queue_fence_wait_timeout(struct util_queue_fence *fence, - int64_t abs_timeout) -{ - /* This terrible hack is made necessary by the fact that we really want an - * internal interface consistent with os_time_*, but cnd_timedwait is spec'd - * to be relative to the TIME_UTC clock. - */ - int64_t rel = abs_timeout - os_time_get_nano(); - - if (rel > 0) { - struct timespec ts; - - timespec_get(&ts, TIME_UTC); - - ts.tv_sec += abs_timeout / (1000*1000*1000); - ts.tv_nsec += abs_timeout % (1000*1000*1000); - if (ts.tv_nsec >= (1000*1000*1000)) { - ts.tv_sec++; - ts.tv_nsec -= (1000*1000*1000); - } - - mtx_lock(&fence->mutex); - while (!fence->signalled) { - if (cnd_timedwait(&fence->cond, &fence->mutex, &ts) != thrd_success) - break; - } - mtx_unlock(&fence->mutex); - } - - return fence->signalled; -} - -void -util_queue_fence_init(struct util_queue_fence *fence) -{ - memset(fence, 0, sizeof(*fence)); - (void) mtx_init(&fence->mutex, mtx_plain); - cnd_init(&fence->cond); - fence->signalled = true; -} - -void -util_queue_fence_destroy(struct util_queue_fence *fence) -{ - assert(fence->signalled); - - /* Ensure that another thread is not in the middle of - * util_queue_fence_signal (having set the fence to signalled but still - * holding the fence mutex). - * - * A common contract between threads is that as soon as a fence is signalled - * by thread A, thread B is allowed to destroy it. Since - * util_queue_fence_is_signalled does not lock the fence mutex (for - * performance reasons), we must do so here. - */ - mtx_lock(&fence->mutex); - mtx_unlock(&fence->mutex); - - cnd_destroy(&fence->cond); - mtx_destroy(&fence->mutex); -} -#endif - -/**************************************************************************** - * util_queue implementation - */ - -struct thread_input { - struct util_queue *queue; - int thread_index; -}; - -static int -util_queue_thread_func(void *input) -{ - struct util_queue *queue = ((struct thread_input*)input)->queue; - int thread_index = ((struct thread_input*)input)->thread_index; - - free(input); - - if (queue->flags & UTIL_QUEUE_INIT_SET_FULL_THREAD_AFFINITY) { - /* Don't inherit the thread affinity from the parent thread. - * Set the full mask. - */ - uint32_t mask[UTIL_MAX_CPUS / 32]; - - memset(mask, 0xff, sizeof(mask)); - - util_set_current_thread_affinity(mask, NULL, - util_get_cpu_caps()->num_cpu_mask_bits); - } - -#if defined(__linux__) - if (queue->flags & UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY) { - /* The nice() function can only set a maximum of 19. */ - setpriority(PRIO_PROCESS, syscall(SYS_gettid), 19); - } -#endif - - if (strlen(queue->name) > 0) { - char name[16]; - snprintf(name, sizeof(name), "%s%i", queue->name, thread_index); - u_thread_setname(name); - } - - while (1) { - struct util_queue_job job; - - mtx_lock(&queue->lock); - assert(queue->num_queued >= 0 && queue->num_queued <= queue->max_jobs); - - /* wait if the queue is empty */ - while (thread_index < queue->num_threads && queue->num_queued == 0) - cnd_wait(&queue->has_queued_cond, &queue->lock); - - /* only kill threads that are above "num_threads" */ - if (thread_index >= queue->num_threads) { - mtx_unlock(&queue->lock); - break; - } - - job = queue->jobs[queue->read_idx]; - memset(&queue->jobs[queue->read_idx], 0, sizeof(struct util_queue_job)); - queue->read_idx = (queue->read_idx + 1) % queue->max_jobs; - - queue->num_queued--; - cnd_signal(&queue->has_space_cond); - if (job.job) - queue->total_jobs_size -= job.job_size; - mtx_unlock(&queue->lock); - - if (job.job) { - job.execute(job.job, job.global_data, thread_index); - if (job.fence) - util_queue_fence_signal(job.fence); - if (job.cleanup) - job.cleanup(job.job, job.global_data, thread_index); - } - } - - /* signal remaining jobs if all threads are being terminated */ - mtx_lock(&queue->lock); - if (queue->num_threads == 0) { - for (unsigned i = queue->read_idx; i != queue->write_idx; - i = (i + 1) % queue->max_jobs) { - if (queue->jobs[i].job) { - if (queue->jobs[i].fence) - util_queue_fence_signal(queue->jobs[i].fence); - queue->jobs[i].job = NULL; - } - } - queue->read_idx = queue->write_idx; - queue->num_queued = 0; - } - mtx_unlock(&queue->lock); - return 0; -} - -static bool -util_queue_create_thread(struct util_queue *queue, unsigned index) -{ - struct thread_input *input = - (struct thread_input *) malloc(sizeof(struct thread_input)); - input->queue = queue; - input->thread_index = index; - - if (thrd_success != u_thread_create(queue->threads + index, util_queue_thread_func, input)) { - free(input); - return false; - } - - if (queue->flags & UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY) { -#if defined(__linux__) && defined(SCHED_BATCH) - struct sched_param sched_param = {0}; - - /* The nice() function can only set a maximum of 19. - * SCHED_BATCH gives the scheduler a hint that this is a latency - * insensitive thread. - * - * Note that Linux only allows decreasing the priority. The original - * priority can't be restored. - */ - pthread_setschedparam(queue->threads[index], SCHED_BATCH, &sched_param); -#endif - } - return true; -} - -void -util_queue_adjust_num_threads(struct util_queue *queue, unsigned num_threads, - bool locked) -{ - num_threads = MIN2(num_threads, queue->max_threads); - num_threads = MAX2(num_threads, 1); - - if (!locked) - mtx_lock(&queue->lock); - - unsigned old_num_threads = queue->num_threads; - - if (num_threads == old_num_threads) { - if (!locked) - mtx_unlock(&queue->lock); - return; - } - - if (num_threads < old_num_threads) { - util_queue_kill_threads(queue, num_threads, true); - if (!locked) - mtx_unlock(&queue->lock); - return; - } - - /* Create threads. - * - * We need to update num_threads first, because threads terminate - * when thread_index < num_threads. - */ - queue->num_threads = num_threads; - for (unsigned i = old_num_threads; i < num_threads; i++) { - if (!util_queue_create_thread(queue, i)) { - queue->num_threads = i; - break; - } - } - - if (!locked) - mtx_unlock(&queue->lock); -} - -bool -util_queue_init(struct util_queue *queue, - const char *name, - unsigned max_jobs, - unsigned num_threads, - unsigned flags, - void *global_data) -{ - unsigned i; - - /* Form the thread name from process_name and name, limited to 13 - * characters. Characters 14-15 are reserved for the thread number. - * Character 16 should be 0. Final form: "process:name12" - * - * If name is too long, it's truncated. If any space is left, the process - * name fills it. - */ - const char *process_name = util_get_process_name(); - int process_len = process_name ? strlen(process_name) : 0; - int name_len = strlen(name); - const int max_chars = sizeof(queue->name) - 1; - - name_len = MIN2(name_len, max_chars); - - /* See if there is any space left for the process name, reserve 1 for - * the colon. */ - process_len = MIN2(process_len, max_chars - name_len - 1); - process_len = MAX2(process_len, 0); - - memset(queue, 0, sizeof(*queue)); - - if (process_len) { - snprintf(queue->name, sizeof(queue->name), "%.*s:%s", - process_len, process_name, name); - } else { - snprintf(queue->name, sizeof(queue->name), "%s", name); - } - - queue->flags = flags; - queue->max_threads = num_threads; - queue->num_threads = (flags & UTIL_QUEUE_INIT_SCALE_THREADS) ? 1 : num_threads; - queue->max_jobs = max_jobs; - queue->global_data = global_data; - - (void) mtx_init(&queue->lock, mtx_plain); - - queue->num_queued = 0; - cnd_init(&queue->has_queued_cond); - cnd_init(&queue->has_space_cond); - - queue->jobs = (struct util_queue_job*) - calloc(max_jobs, sizeof(struct util_queue_job)); - if (!queue->jobs) - goto fail; - - queue->threads = (thrd_t*) calloc(queue->max_threads, sizeof(thrd_t)); - if (!queue->threads) - goto fail; - - /* start threads */ - for (i = 0; i < queue->num_threads; i++) { - if (!util_queue_create_thread(queue, i)) { - if (i == 0) { - /* no threads created, fail */ - goto fail; - } else { - /* at least one thread created, so use it */ - queue->num_threads = i; - break; - } - } - } - - add_to_atexit_list(queue); - return true; - -fail: - free(queue->threads); - - if (queue->jobs) { - cnd_destroy(&queue->has_space_cond); - cnd_destroy(&queue->has_queued_cond); - mtx_destroy(&queue->lock); - free(queue->jobs); - } - /* also util_queue_is_initialized can be used to check for success */ - memset(queue, 0, sizeof(*queue)); - return false; -} - -static void -util_queue_kill_threads(struct util_queue *queue, unsigned keep_num_threads, - bool locked) -{ - /* Signal all threads to terminate. */ - if (!locked) - mtx_lock(&queue->lock); - - if (keep_num_threads >= queue->num_threads) { - if (!locked) - mtx_unlock(&queue->lock); - return; - } - - unsigned old_num_threads = queue->num_threads; - /* Setting num_threads is what causes the threads to terminate. - * Then cnd_broadcast wakes them up and they will exit their function. - */ - queue->num_threads = keep_num_threads; - cnd_broadcast(&queue->has_queued_cond); - - /* Wait for threads to terminate. */ - if (keep_num_threads < old_num_threads) { - /* We need to unlock the mutex to allow threads to terminate. */ - mtx_unlock(&queue->lock); - for (unsigned i = keep_num_threads; i < old_num_threads; i++) - thrd_join(queue->threads[i], NULL); - if (locked) - mtx_lock(&queue->lock); - } else { - if (!locked) - mtx_unlock(&queue->lock); - } -} - -static void -util_queue_finish_execute(void *data, void *gdata, int num_thread) -{ - util_barrier *barrier = data; - if (util_barrier_wait(barrier)) - util_barrier_destroy(barrier); -} - -void -util_queue_destroy(struct util_queue *queue) -{ - util_queue_kill_threads(queue, 0, false); - - /* This makes it safe to call on a queue that failed util_queue_init. */ - if (queue->head.next != NULL) - remove_from_atexit_list(queue); - - cnd_destroy(&queue->has_space_cond); - cnd_destroy(&queue->has_queued_cond); - mtx_destroy(&queue->lock); - free(queue->jobs); - free(queue->threads); -} - -static void -util_queue_add_job_locked(struct util_queue *queue, - void *job, - struct util_queue_fence *fence, - util_queue_execute_func execute, - util_queue_execute_func cleanup, - const size_t job_size, - bool locked) -{ - struct util_queue_job *ptr; - - if (!locked) - mtx_lock(&queue->lock); - if (queue->num_threads == 0) { - if (!locked) - mtx_unlock(&queue->lock); - /* well no good option here, but any leaks will be - * short-lived as things are shutting down.. - */ - return; - } - - if (fence) - util_queue_fence_reset(fence); - - assert(queue->num_queued >= 0 && queue->num_queued <= queue->max_jobs); - - /* Scale the number of threads up if there's already one job waiting. */ - if (queue->num_queued > 0 && - queue->flags & UTIL_QUEUE_INIT_SCALE_THREADS && - execute != util_queue_finish_execute && - queue->num_threads < queue->max_threads) { - util_queue_adjust_num_threads(queue, queue->num_threads + 1, true); - } - - if (queue->num_queued == queue->max_jobs) { - if (queue->flags & UTIL_QUEUE_INIT_RESIZE_IF_FULL && - queue->total_jobs_size + job_size < S_256MB) { - /* If the queue is full, make it larger to avoid waiting for a free - * slot. - */ - unsigned new_max_jobs = queue->max_jobs + 8; - struct util_queue_job *jobs = - (struct util_queue_job*)calloc(new_max_jobs, - sizeof(struct util_queue_job)); - assert(jobs); - - /* Copy all queued jobs into the new list. */ - unsigned num_jobs = 0; - unsigned i = queue->read_idx; - - do { - jobs[num_jobs++] = queue->jobs[i]; - i = (i + 1) % queue->max_jobs; - } while (i != queue->write_idx); - - assert(num_jobs == queue->num_queued); - - free(queue->jobs); - queue->jobs = jobs; - queue->read_idx = 0; - queue->write_idx = num_jobs; - queue->max_jobs = new_max_jobs; - } else { - /* Wait until there is a free slot. */ - while (queue->num_queued == queue->max_jobs) - cnd_wait(&queue->has_space_cond, &queue->lock); - } - } - - ptr = &queue->jobs[queue->write_idx]; - assert(ptr->job == NULL); - ptr->job = job; - ptr->global_data = queue->global_data; - ptr->fence = fence; - ptr->execute = execute; - ptr->cleanup = cleanup; - ptr->job_size = job_size; - - queue->write_idx = (queue->write_idx + 1) % queue->max_jobs; - queue->total_jobs_size += ptr->job_size; - - queue->num_queued++; - cnd_signal(&queue->has_queued_cond); - if (!locked) - mtx_unlock(&queue->lock); -} - -void -util_queue_add_job(struct util_queue *queue, - void *job, - struct util_queue_fence *fence, - util_queue_execute_func execute, - util_queue_execute_func cleanup, - const size_t job_size) -{ - util_queue_add_job_locked(queue, job, fence, execute, cleanup, job_size, - false); -} - -/** - * Remove a queued job. If the job hasn't started execution, it's removed from - * the queue. If the job has started execution, the function waits for it to - * complete. - * - * In all cases, the fence is signalled when the function returns. - * - * The function can be used when destroying an object associated with the job - * when you don't care about the job completion state. - */ -void -util_queue_drop_job(struct util_queue *queue, struct util_queue_fence *fence) -{ - bool removed = false; - - if (util_queue_fence_is_signalled(fence)) - return; - - mtx_lock(&queue->lock); - for (unsigned i = queue->read_idx; i != queue->write_idx; - i = (i + 1) % queue->max_jobs) { - if (queue->jobs[i].fence == fence) { - if (queue->jobs[i].cleanup) - queue->jobs[i].cleanup(queue->jobs[i].job, queue->global_data, -1); - - /* Just clear it. The threads will treat as a no-op job. */ - memset(&queue->jobs[i], 0, sizeof(queue->jobs[i])); - removed = true; - break; - } - } - mtx_unlock(&queue->lock); - - if (removed) - util_queue_fence_signal(fence); - else - util_queue_fence_wait(fence); -} - -/** - * Wait until all previously added jobs have completed. - */ -void -util_queue_finish(struct util_queue *queue) -{ - util_barrier barrier; - struct util_queue_fence *fences; - - /* If 2 threads were adding jobs for 2 different barries at the same time, - * a deadlock would happen, because 1 barrier requires that all threads - * wait for it exclusively. - */ - mtx_lock(&queue->lock); - - /* The number of threads can be changed to 0, e.g. by the atexit handler. */ - if (!queue->num_threads) { - mtx_unlock(&queue->lock); - return; - } - - /* We need to disable adding new threads in util_queue_add_job because - * the finish operation requires a fixed number of threads. - * - * Also note that util_queue_add_job can unlock the mutex if there is not - * enough space in the queue and wait for space. - */ - unsigned saved_flags = queue->flags; - queue->flags &= ~UTIL_QUEUE_INIT_SCALE_THREADS; - - fences = malloc(queue->num_threads * sizeof(*fences)); - util_barrier_init(&barrier, queue->num_threads); - - for (unsigned i = 0; i < queue->num_threads; ++i) { - util_queue_fence_init(&fences[i]); - util_queue_add_job_locked(queue, &barrier, &fences[i], - util_queue_finish_execute, NULL, 0, true); - } - queue->flags = saved_flags; - mtx_unlock(&queue->lock); - - for (unsigned i = 0; i < queue->num_threads; ++i) { - util_queue_fence_wait(&fences[i]); - util_queue_fence_destroy(&fences[i]); - } - - free(fences); -} - -int64_t -util_queue_get_thread_time_nano(struct util_queue *queue, unsigned thread_index) -{ - /* Allow some flexibility by not raising an error. */ - if (thread_index >= queue->num_threads) - return 0; - - return util_thread_get_time_nano(queue->threads[thread_index]); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_queue.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_queue.h deleted file mode 100644 index 2b0b83b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_queue.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright © 2016 Advanced Micro Devices, Inc. - * 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, sub license, 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 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 - * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS - * AND/OR ITS SUPPLIERS 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. - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - */ - -/* Job queue with execution in a separate thread. - * - * Jobs can be added from any thread. After that, the wait call can be used - * to wait for completion of the job. - */ - -#ifndef U_QUEUE_H -#define U_QUEUE_H - -#include - -#include "simple_mtx.h" -#include "futex.h" -#include "list.h" -#include "macros.h" -#include "os_time.h" -#include "u_atomic.h" -#include "u_thread.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define UTIL_QUEUE_INIT_USE_MINIMUM_PRIORITY (1 << 0) -#define UTIL_QUEUE_INIT_RESIZE_IF_FULL (1 << 1) -#define UTIL_QUEUE_INIT_SET_FULL_THREAD_AFFINITY (1 << 2) -#define UTIL_QUEUE_INIT_SCALE_THREADS (1 << 3) - -#if UTIL_FUTEX_SUPPORTED -#define UTIL_QUEUE_FENCE_FUTEX -#else -#define UTIL_QUEUE_FENCE_STANDARD -#endif - -#ifdef UTIL_QUEUE_FENCE_FUTEX -/* Job completion fence. - * Put this into your job structure. - */ -struct util_queue_fence { - /* The fence can be in one of three states: - * 0 - signaled - * 1 - unsignaled - * 2 - unsignaled, may have waiters - */ - uint32_t val; -}; - -static inline void -util_queue_fence_init(struct util_queue_fence *fence) -{ - fence->val = 0; -} - -static inline void -util_queue_fence_destroy(struct util_queue_fence *fence) -{ - assert(p_atomic_read_relaxed(&fence->val) == 0); - /* no-op */ -} - -static inline void -util_queue_fence_signal(struct util_queue_fence *fence) -{ - uint32_t val = p_atomic_xchg(&fence->val, 0); - - assert(val != 0); - - if (val == 2) - futex_wake(&fence->val, INT_MAX); -} - -/** - * Move \p fence back into unsignalled state. - * - * \warning The caller must ensure that no other thread may currently be - * waiting (or about to wait) on the fence. - */ -static inline void -util_queue_fence_reset(struct util_queue_fence *fence) -{ -#ifdef NDEBUG - fence->val = 1; -#else - uint32_t v = p_atomic_xchg(&fence->val, 1); - assert(v == 0); -#endif -} - -static inline bool -util_queue_fence_is_signalled(struct util_queue_fence *fence) -{ - return p_atomic_read_relaxed(&fence->val) == 0; -} -#endif - -#ifdef UTIL_QUEUE_FENCE_STANDARD -/* Job completion fence. - * Put this into your job structure. - */ -struct util_queue_fence { - mtx_t mutex; - cnd_t cond; - int signalled; -}; - -void util_queue_fence_init(struct util_queue_fence *fence); -void util_queue_fence_destroy(struct util_queue_fence *fence); -void util_queue_fence_signal(struct util_queue_fence *fence); - -/** - * Move \p fence back into unsignalled state. - * - * \warning The caller must ensure that no other thread may currently be - * waiting (or about to wait) on the fence. - */ -static inline void -util_queue_fence_reset(struct util_queue_fence *fence) -{ - assert(fence->signalled); - fence->signalled = 0; -} - -static inline bool -util_queue_fence_is_signalled(struct util_queue_fence *fence) -{ - return fence->signalled != 0; -} -#endif - -void -_util_queue_fence_wait(struct util_queue_fence *fence); - -static inline void -util_queue_fence_wait(struct util_queue_fence *fence) -{ - if (unlikely(!util_queue_fence_is_signalled(fence))) - _util_queue_fence_wait(fence); -} - -bool -_util_queue_fence_wait_timeout(struct util_queue_fence *fence, - int64_t abs_timeout); - -/** - * Wait for the fence to be signaled with a timeout. - * - * \param fence the fence - * \param abs_timeout the absolute timeout in nanoseconds, relative to the - * clock provided by os_time_get_nano. - * - * \return true if the fence was signaled, false if the timeout occurred. - */ -static inline bool -util_queue_fence_wait_timeout(struct util_queue_fence *fence, - int64_t abs_timeout) -{ - if (util_queue_fence_is_signalled(fence)) - return true; - - if (abs_timeout == (int64_t)OS_TIMEOUT_INFINITE) { - _util_queue_fence_wait(fence); - return true; - } - - return _util_queue_fence_wait_timeout(fence, abs_timeout); -} - -typedef void (*util_queue_execute_func)(void *job, void *gdata, int thread_index); - -struct util_queue_job { - void *job; - void *global_data; - size_t job_size; - struct util_queue_fence *fence; - util_queue_execute_func execute; - util_queue_execute_func cleanup; -}; - -/* Put this into your context. */ -struct util_queue { - char name[14]; /* 13 characters = the thread name without the index */ - mtx_t lock; - cnd_t has_queued_cond; - cnd_t has_space_cond; - thrd_t *threads; - unsigned flags; - int num_queued; - unsigned max_threads; - unsigned num_threads; /* decreasing this number will terminate threads */ - int max_jobs; - int write_idx, read_idx; /* ring buffer pointers */ - size_t total_jobs_size; /* memory use of all jobs in the queue */ - struct util_queue_job *jobs; - void *global_data; - - /* for cleanup at exit(), protected by exit_mutex */ - struct list_head head; -}; - -bool util_queue_init(struct util_queue *queue, - const char *name, - unsigned max_jobs, - unsigned num_threads, - unsigned flags, - void *global_data); -void util_queue_destroy(struct util_queue *queue); - -/* optional cleanup callback is called after fence is signaled: */ -void util_queue_add_job(struct util_queue *queue, - void *job, - struct util_queue_fence *fence, - util_queue_execute_func execute, - util_queue_execute_func cleanup, - const size_t job_size); -void util_queue_drop_job(struct util_queue *queue, - struct util_queue_fence *fence); - -void util_queue_finish(struct util_queue *queue); - -/* Adjust the number of active threads. The new number of threads can't be - * greater than the initial number of threads at the creation of the queue, - * and it can't be less than 1. - */ -void -util_queue_adjust_num_threads(struct util_queue *queue, unsigned num_threads, - bool locked); - -int64_t util_queue_get_thread_time_nano(struct util_queue *queue, - unsigned thread_index); - -/* util_queue needs to be cleared to zeroes for this to work */ -static inline bool -util_queue_is_initialized(struct util_queue *queue) -{ - return queue->threads != NULL; -} - -/* Convenient structure for monitoring the queue externally and passing - * the structure between Mesa components. The queue doesn't use it directly. - */ -struct util_queue_monitoring -{ - /* For querying the thread busyness. */ - struct util_queue *queue; - - /* Counters updated by the user of the queue. */ - unsigned num_offloaded_items; - unsigned num_direct_items; - unsigned num_syncs; - unsigned num_batches; -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_string.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_string.h deleted file mode 100644 index 488c603..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_string.h +++ /dev/null @@ -1,132 +0,0 @@ -/************************************************************************** - * - * Copyright 2008 VMware, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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 - * Platform independent functions for string manipulation. - * - * @author Jose Fonseca - */ - -#ifndef U_STRING_H_ -#define U_STRING_H_ - -#if !defined(XF86_LIBC_H) -#include -#endif -#include -#include -#include -#include -#include - -#include "macros.h" // PRINTFLIKE - - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(_GNU_SOURCE) || defined(__APPLE__) - -#define strchrnul util_strchrnul -static inline char * -util_strchrnul(const char *s, char c) -{ - for (; *s && *s != c; ++s); - - return (char *)s; -} - -#endif - -#ifdef _WIN32 - -#define sprintf util_sprintf -static inline int - PRINTFLIKE(2, 3) -util_sprintf(char *str, const char *format, ...) -{ - va_list ap; - va_start(ap, format); - int r = vsnprintf(str, INT_MAX, format, ap); - va_end(ap); - return r; -} - -#define vasprintf util_vasprintf -static inline int -util_vasprintf(char **ret, const char *format, va_list ap) -{ - va_list ap_copy; - - /* Compute length of output string first */ - va_copy(ap_copy, ap); - int r = vsnprintf(NULL, 0, format, ap_copy); - va_end(ap_copy); - - if (r < 0) - return -1; - - *ret = (char *) malloc(r + 1); - if (!*ret) - return -1; - - /* Print to buffer */ - return vsnprintf(*ret, r + 1, format, ap); -} - -#define asprintf util_asprintf -static inline int -util_asprintf(char **str, const char *fmt, ...) -{ - int ret; - va_list args; - va_start(args, fmt); - ret = vasprintf(str, fmt, args); - va_end(args); - return ret; -} - -#ifndef strcasecmp -#define strcasecmp stricmp -#endif - -#define strdup _strdup - -#if defined(_WIN32) && !defined(HAVE_STRTOK_R) -#define strtok_r strtok_s -#endif - -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* U_STRING_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_thread.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_thread.c deleted file mode 100644 index 8573b8b..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_thread.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright 1999-2006 Brian Paul - * Copyright 2008 VMware, Inc. - * Copyright 2022 Yonggang Luo - * SPDX-License-Identifier: MIT - */ - -#include "u_thread.h" - -#include "macros.h" - -#ifdef HAVE_PTHREAD -#include -#ifdef HAVE_PTHREAD_NP_H -#include -#endif -#endif - -#ifdef __HAIKU__ -#include -#endif - -#if DETECT_OS_LINUX && !defined(ANDROID) -#include -#elif defined(_WIN32) && !defined(HAVE_PTHREAD) -#include -#endif - -#ifdef __FreeBSD__ -/* pthread_np.h -> sys/param.h -> machine/param.h - * - defines ALIGN which clashes with our ALIGN - */ -#undef ALIGN -#define cpu_set_t cpuset_t -#endif - -int -util_get_current_cpu(void) -{ -#if DETECT_OS_LINUX && !defined(ANDROID) - return sched_getcpu(); - -#elif defined(_WIN32) && !defined(HAVE_PTHREAD) - return GetCurrentProcessorNumber(); - -#else - return -1; -#endif -} - -int u_thread_create(thrd_t *thrd, int (*routine)(void *), void *param) -{ - int ret = thrd_error; -#ifdef HAVE_PTHREAD - sigset_t saved_set, new_set; - - sigfillset(&new_set); - sigdelset(&new_set, SIGSYS); - - /* SIGSEGV is commonly used by Vulkan API tracing layers in order to track - * accesses in device memory mapped to user space. Blocking the signal hinders - * that tracking mechanism. - */ - sigdelset(&new_set, SIGSEGV); - pthread_sigmask(SIG_BLOCK, &new_set, &saved_set); - ret = thrd_create(thrd, routine, param); - pthread_sigmask(SIG_SETMASK, &saved_set, NULL); -#else - ret = thrd_create(thrd, routine, param); -#endif - - return ret; -} - -void u_thread_setname( const char *name ) -{ -#if defined(HAVE_PTHREAD) -#if DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || defined(__GLIBC__) - int ret = pthread_setname_np(pthread_self(), name); - if (ret == ERANGE) { - char buf[16]; - const size_t len = MIN2(strlen(name), ARRAY_SIZE(buf) - 1); - memcpy(buf, name, len); - buf[len] = '\0'; - pthread_setname_np(pthread_self(), buf); - } -#elif DETECT_OS_FREEBSD || DETECT_OS_OPENBSD - pthread_set_name_np(pthread_self(), name); -#elif DETECT_OS_NETBSD - pthread_setname_np(pthread_self(), "%s", (void *)name); -#elif DETECT_OS_APPLE - pthread_setname_np(name); -#elif DETECT_OS_HAIKU - rename_thread(find_thread(NULL), name); -#else -#warning Not sure how to call pthread_setname_np -#endif -#endif - (void)name; -} - -bool -util_set_thread_affinity(thrd_t thread, - const uint32_t *mask, - uint32_t *old_mask, - unsigned num_mask_bits) -{ -#if defined(HAVE_PTHREAD_SETAFFINITY) - cpu_set_t cpuset; - - if (old_mask) { - if (pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset) != 0) - return false; - - memset(old_mask, 0, num_mask_bits / 8); - for (unsigned i = 0; i < num_mask_bits && i < CPU_SETSIZE; i++) { - if (CPU_ISSET(i, &cpuset)) - old_mask[i / 32] |= 1u << (i % 32); - } - } - - CPU_ZERO(&cpuset); - for (unsigned i = 0; i < num_mask_bits && i < CPU_SETSIZE; i++) { - if (mask[i / 32] & (1u << (i % 32))) - CPU_SET(i, &cpuset); - } - return pthread_setaffinity_np(thread, sizeof(cpuset), &cpuset) == 0; - -#elif defined(_WIN32) && !defined(HAVE_PTHREAD) - DWORD_PTR m = mask[0]; - - if (sizeof(m) > 4 && num_mask_bits > 32) - m |= (uint64_t)mask[1] << 32; - - m = SetThreadAffinityMask(thread.handle, m); - if (!m) - return false; - - if (old_mask) { - memset(old_mask, 0, num_mask_bits / 8); - - old_mask[0] = m; -#ifdef _WIN64 - old_mask[1] = m >> 32; -#endif - } - - return true; -#else - return false; -#endif -} - -int64_t -util_thread_get_time_nano(thrd_t thread) -{ -#if defined(HAVE_PTHREAD) && !defined(__APPLE__) && !defined(__HAIKU__) - struct timespec ts; - clockid_t cid; - - pthread_getcpuclockid(thread, &cid); - clock_gettime(cid, &ts); - return (int64_t)ts.tv_sec * 1000000000 + ts.tv_nsec; -#elif defined(_WIN32) - union { - FILETIME time; - ULONGLONG value; - } kernel_time, user_time; - GetThreadTimes((HANDLE)thread.handle, NULL, NULL, &kernel_time.time, &user_time.time); - return (kernel_time.value + user_time.value) * 100; -#else - (void)thread; - return 0; -#endif -} - -#if defined(HAVE_PTHREAD) && !defined(__APPLE__) && !defined(__HAIKU__) - -void util_barrier_init(util_barrier *barrier, unsigned count) -{ - pthread_barrier_init(barrier, NULL, count); -} - -void util_barrier_destroy(util_barrier *barrier) -{ - pthread_barrier_destroy(barrier); -} - -bool util_barrier_wait(util_barrier *barrier) -{ - return pthread_barrier_wait(barrier) == PTHREAD_BARRIER_SERIAL_THREAD; -} - -#else /* If the OS doesn't have its own, implement barriers using a mutex and a condvar */ - -void util_barrier_init(util_barrier *barrier, unsigned count) -{ - barrier->count = count; - barrier->waiters = 0; - barrier->sequence = 0; - (void) mtx_init(&barrier->mutex, mtx_plain); - cnd_init(&barrier->condvar); -} - -void util_barrier_destroy(util_barrier *barrier) -{ - assert(barrier->waiters == 0); - mtx_destroy(&barrier->mutex); - cnd_destroy(&barrier->condvar); -} - -bool util_barrier_wait(util_barrier *barrier) -{ - mtx_lock(&barrier->mutex); - - assert(barrier->waiters < barrier->count); - barrier->waiters++; - - if (barrier->waiters < barrier->count) { - uint64_t sequence = barrier->sequence; - - do { - cnd_wait(&barrier->condvar, &barrier->mutex); - } while (sequence == barrier->sequence); - } else { - barrier->waiters = 0; - barrier->sequence++; - cnd_broadcast(&barrier->condvar); - } - - mtx_unlock(&barrier->mutex); - - return true; -} - -#endif diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_thread.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_thread.h deleted file mode 100644 index c462613..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_thread.h +++ /dev/null @@ -1,194 +0,0 @@ -/************************************************************************** - * - * Copyright 1999-2006 Brian Paul - * Copyright 2008 VMware, Inc. - * 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - * - **************************************************************************/ - -#ifndef U_THREAD_H_ -#define U_THREAD_H_ - -#include -#include -#include -#include - -#include "../../include/c11/threads.h" -#include "detect_os.h" - -/* Some highly performance-sensitive thread-local variables like the current GL - * context are declared with the initial-exec model on Linux. glibc allocates a - * fixed number of extra slots for initial-exec TLS variables at startup, and - * Mesa relies on (even if it's dlopen()ed after init) being able to fit into - * those. This model saves the call to look up the address of the TLS variable. - * - * However, if we don't have this TLS model available on the platform, then we - * still want to use normal TLS (which involves a function call, but not the - * expensive pthread_getspecific() or its equivalent). - */ -#if DETECT_OS_APPLE -/* Apple Clang emits wrappers when using thread_local that break module linkage, - * but not with __thread - */ -#define __THREAD_INITIAL_EXEC __thread -#elif defined(__GLIBC__) -#define __THREAD_INITIAL_EXEC thread_local __attribute__((tls_model("initial-exec"))) -#define REALLY_INITIAL_EXEC -#else -#define __THREAD_INITIAL_EXEC thread_local -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -int -util_get_current_cpu(void); - -int u_thread_create(thrd_t *thrd, int (*routine)(void *), void *param); - -void u_thread_setname( const char *name ); - -/** - * Set thread affinity. - * - * \param thread Thread - * \param mask Set this affinity mask - * \param old_mask Previous affinity mask returned if not NULL - * \param num_mask_bits Number of bits in both masks - * \return true on success - */ -bool -util_set_thread_affinity(thrd_t thread, - const uint32_t *mask, - uint32_t *old_mask, - unsigned num_mask_bits); - -static inline bool -util_set_current_thread_affinity(const uint32_t *mask, - uint32_t *old_mask, - unsigned num_mask_bits) -{ - return util_set_thread_affinity(thrd_current(), mask, old_mask, - num_mask_bits); -} - -/* - * Thread statistics. - */ - -/* Return the time of a thread's CPU time clock. */ -int64_t -util_thread_get_time_nano(thrd_t thread); - -/* Return the time of the current thread's CPU time clock. */ -static inline int64_t -util_current_thread_get_time_nano(void) -{ - return util_thread_get_time_nano(thrd_current()); -} - -static inline bool u_thread_is_self(thrd_t thread) -{ - return thrd_equal(thrd_current(), thread); -} - -/* - * util_barrier - */ - -#if defined(HAVE_PTHREAD) && !defined(__APPLE__) && !defined(__HAIKU__) - -typedef pthread_barrier_t util_barrier; - -#else /* If the OS doesn't have its own, implement barriers using a mutex and a condvar */ - -typedef struct { - unsigned count; - unsigned waiters; - uint64_t sequence; - mtx_t mutex; - cnd_t condvar; -} util_barrier; - -#endif - -void util_barrier_init(util_barrier *barrier, unsigned count); - -void util_barrier_destroy(util_barrier *barrier); - -bool util_barrier_wait(util_barrier *barrier); - -/* - * Semaphores - */ - -typedef struct -{ - mtx_t mutex; - cnd_t cond; - int counter; -} util_semaphore; - - -static inline void -util_semaphore_init(util_semaphore *sema, int init_val) -{ - (void) mtx_init(&sema->mutex, mtx_plain); - cnd_init(&sema->cond); - sema->counter = init_val; -} - -static inline void -util_semaphore_destroy(util_semaphore *sema) -{ - mtx_destroy(&sema->mutex); - cnd_destroy(&sema->cond); -} - -/** Signal/increment semaphore counter */ -static inline void -util_semaphore_signal(util_semaphore *sema) -{ - mtx_lock(&sema->mutex); - sema->counter++; - cnd_signal(&sema->cond); - mtx_unlock(&sema->mutex); -} - -/** Wait for semaphore counter to be greater than zero */ -static inline void -util_semaphore_wait(util_semaphore *sema) -{ - mtx_lock(&sema->mutex); - while (sema->counter <= 0) { - cnd_wait(&sema->cond, &sema->mutex); - } - sema->counter--; - mtx_unlock(&sema->mutex); -} - -#ifdef __cplusplus -} -#endif - -#endif /* U_THREAD_H_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_vector.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_vector.c deleted file mode 100644 index ad9db25..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_vector.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include "u_math.h" -#include "u_vector.h" - -/** @file u_vector.c - * - * A dynamically growable, circular buffer. Elements are added at head and - * removed from tail. head and tail are free-running uint32_t indices and we - * only compute the modulo with size when accessing the array. This way, - * number of bytes in the queue is always head - tail, even in case of - * wraparound. - */ - -/** - * initial_element_count and element_size must be power-of-two. - */ -int -u_vector_init_pow2(struct u_vector *vector, - uint32_t initial_element_count, - uint32_t element_size) -{ - assert(util_is_power_of_two_nonzero(initial_element_count)); - assert(util_is_power_of_two_nonzero(element_size)); - - vector->head = 0; - vector->tail = 0; - vector->element_size = element_size; - vector->size = element_size * initial_element_count; - vector->data = malloc(vector->size); - - return vector->data != NULL; -} - -void * -u_vector_add(struct u_vector *vector) -{ - uint32_t offset, size, split, src_tail, dst_tail; - void *data; - - if (vector->head - vector->tail == vector->size) { - size = vector->size * 2; - data = malloc(size); - if (data == NULL) - return NULL; - src_tail = vector->tail & (vector->size - 1); - dst_tail = vector->tail & (size - 1); - if (src_tail == 0) { - /* Since we know that the vector is full, this means that it's - * linear from start to end so we can do one copy. - */ - memcpy((char *)data + dst_tail, vector->data, vector->size); - } else { - /* In this case, the vector is split into two pieces and we have - * to do two copies. We have to be careful to make sure each - * piece goes to the right locations. Thanks to the change in - * size, it may or may not still wrap around. - */ - split = u_align_u32(vector->tail, vector->size); - assert(vector->tail <= split && split < vector->head); - memcpy((char *)data + dst_tail, (char *)vector->data + src_tail, - split - vector->tail); - memcpy((char *)data + (split & (size - 1)), vector->data, - vector->head - split); - } - free(vector->data); - vector->data = data; - vector->size = size; - } - - assert(vector->head - vector->tail < vector->size); - - offset = vector->head & (vector->size - 1); - vector->head += vector->element_size; - - return (char *)vector->data + offset; -} - -void * -u_vector_remove(struct u_vector *vector) -{ - uint32_t offset; - - if (vector->head == vector->tail) - return NULL; - - assert(vector->head - vector->tail <= vector->size); - - offset = vector->tail & (vector->size - 1); - vector->tail += vector->element_size; - - return (char *)vector->data + offset; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_vector.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_vector.h deleted file mode 100644 index 912b553..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_vector.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright © 2015 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -/* - * u_vector is a vector based queue for storing arbitrary - * sized arrays of objects without using a linked list. - */ - -#ifndef U_VECTOR_H -#define U_VECTOR_H - -#include -#include -#include "macros.h" -#include "u_math.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* TODO - move to u_math.h - name it better etc */ -static inline uint32_t -u_align_u32(uint32_t v, uint32_t a) -{ - assert(a != 0 && a == (a & -((int32_t) a))); - return (v + a - 1) & ~(a - 1); -} - -struct u_vector { - uint32_t head; - uint32_t tail; - uint32_t element_size; - uint32_t size; - void *data; -}; - -int u_vector_init_pow2(struct u_vector *queue, - uint32_t initial_element_count, - uint32_t element_size); - -void *u_vector_add(struct u_vector *queue); -void *u_vector_remove(struct u_vector *queue); - -static inline int -u_vector_init(struct u_vector *queue, - uint32_t initial_element_count, - uint32_t element_size) -{ - initial_element_count = util_next_power_of_two(initial_element_count); - element_size = util_next_power_of_two(element_size); - return u_vector_init_pow2(queue, initial_element_count, element_size); -} - -static inline int -u_vector_length(struct u_vector *queue) -{ - return (queue->head - queue->tail) / queue->element_size; -} - -static inline void * -u_vector_head(struct u_vector *vector) -{ - assert(vector->tail < vector->head); - return (void *)((char *)vector->data + - ((vector->head - vector->element_size) & - (vector->size - 1))); -} - -static inline void * -u_vector_tail(struct u_vector *vector) -{ - return (void *)((char *)vector->data + (vector->tail & (vector->size - 1))); -} - -static inline void -u_vector_finish(struct u_vector *queue) -{ - free(queue->data); -} - -#ifdef __cplusplus -#define u_vector_element_cast(elem) (decltype(elem)) -#else -#define u_vector_element_cast(elem) (void *) -#endif - -#define u_vector_foreach(elem, queue) \ - STATIC_ASSERT(__builtin_types_compatible_p(__typeof__(queue), struct u_vector *)); \ - for (uint32_t __u_vector_offset = (queue)->tail; \ - elem = u_vector_element_cast(elem)((char *)(queue)->data + \ - (__u_vector_offset & ((queue)->size - 1))), \ - __u_vector_offset != (queue)->head; \ - __u_vector_offset += (queue)->element_size) - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_worklist.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_worklist.c deleted file mode 100644 index 207f87c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_worklist.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2022 Collabora Ltd. - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include "u_worklist.h" -#include "ralloc.h" - -void -u_worklist_init(u_worklist *w, unsigned num_entries, void *mem_ctx) -{ - w->size = num_entries; - w->count = 0; - w->start = 0; - - w->present = rzalloc_array(mem_ctx, BITSET_WORD, BITSET_WORDS(num_entries)); - w->entries = rzalloc_array(mem_ctx, unsigned *, num_entries); -} - -void -u_worklist_fini(u_worklist *w) -{ - ralloc_free(w->present); - ralloc_free(w->entries); -} - -void -u_worklist_push_head_index(u_worklist *w, unsigned *index) -{ - /* Pushing a block we already have is a no-op */ - if (BITSET_TEST(w->present, *index)) - return; - - assert(w->count < w->size); - - if (w->start == 0) - w->start = w->size - 1; - else - w->start--; - - w->count++; - - w->entries[w->start] = index; - BITSET_SET(w->present, *index); -} - -unsigned * -u_worklist_peek_head_index(const u_worklist *w) -{ - assert(w->count > 0); - - return w->entries[w->start]; -} - -unsigned * -u_worklist_pop_head_index(u_worklist *w) -{ - assert(w->count > 0); - - unsigned head = w->start; - - w->start = (w->start + 1) % w->size; - w->count--; - - BITSET_CLEAR(w->present, *(w->entries[head])); - return w->entries[head]; -} - -void -u_worklist_push_tail_index(u_worklist *w, unsigned *index) -{ - /* Pushing a block we already have is a no-op */ - if (BITSET_TEST(w->present, *index)) - return; - - assert(w->count < w->size); - - w->count++; - - unsigned tail = (w->start + w->count - 1) % w->size; - - w->entries[tail] = index; - BITSET_SET(w->present, *index); -} - -unsigned * -u_worklist_peek_tail_index(const u_worklist *w) -{ - assert(w->count > 0); - - unsigned tail = (w->start + w->count - 1) % w->size; - - return w->entries[tail]; -} - -unsigned * -u_worklist_pop_tail_index(u_worklist *w) -{ - assert(w->count > 0); - - unsigned tail = (w->start + w->count - 1) % w->size; - - w->count--; - - BITSET_CLEAR(w->present, *(w->entries[tail])); - return w->entries[tail]; -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_worklist.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_worklist.h deleted file mode 100644 index e11ab46..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/u_worklist.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2022 Collabora Ltd. - * Copyright © 2014 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - - -#ifndef _U_WORKLIST_ -#define _U_WORKLIST_ - -#include "bitset.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Represents a double-ended queue of unique entries. Each entry must have a - * unique index in the range [0, num_entries). Internally, entries are tracked - * as pointers to that index (so you can go from the index pointer back to a - * containing structure). This requires index pointers to remain valid while - * they are in the worklist (i.e. no realloc). - * - * The worklist data structure guarantees that each entry is in the queue at - * most once. Pushing an entry onto either end of the queue is a no-op if the - * entry is already in the queue. Internally, the data structure maintains a - * bitset of present entries. - */ -typedef struct { - /* The total size of the worklist */ - unsigned size; - - /* The number of entries currently in the worklist */ - unsigned count; - - /* The offset in the array of entries at which the list starts */ - unsigned start; - - /* A bitset of all of the entries currently present in the worklist */ - BITSET_WORD *present; - - /* The actual worklist */ - unsigned **entries; -} u_worklist; - -void u_worklist_init(u_worklist *w, unsigned num_entries, void *mem_ctx); - -void u_worklist_fini(u_worklist *w); - -static inline bool -u_worklist_is_empty(const u_worklist *w) -{ - return w->count == 0; -} - -void u_worklist_push_head_index(u_worklist *w, unsigned *block); - -unsigned *u_worklist_peek_head_index(const u_worklist *w); - -unsigned *u_worklist_pop_head_index(u_worklist *w); - -unsigned *u_worklist_peek_tail_index(const u_worklist *w); - -void u_worklist_push_tail_index(u_worklist *w, unsigned *block); - -unsigned *u_worklist_pop_tail_index(u_worklist *w); - -#define u_worklist_push_tail(w, block, index) \ - u_worklist_push_tail_index(w, &((block)->index)) - -#define u_worklist_push_head(w, block, index) \ - u_worklist_push_head_index(w, &((block)->index)) - -#define u_worklist_pop_head(w, entry_t, index) \ - container_of(u_worklist_pop_head_index(w), entry_t, index) - -#define u_worklist_pop_tail(w, entry_t, index) \ - container_of(u_worklist_pop_tail_index(w), entry_t, index) - -#define u_worklist_peek_head(w, entry_t, index) \ - container_of(u_worklist_peek_head_index(w), entry_t, index) - -#define u_worklist_peek_tail(w, entry_t, index) \ - container_of(u_worklist_peek_tail_index(w), entry_t, index) - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* _U_WORKLIST_ */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vl_rbsp.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vl_rbsp.h deleted file mode 100644 index 62ee796..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vl_rbsp.h +++ /dev/null @@ -1,176 +0,0 @@ -/************************************************************************** - * - * Copyright 2013 Advanced Micro Devices, Inc. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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. - * - **************************************************************************/ - -/* - * Authors: - * Christian König - * - */ - -/* - * Functions for reading the raw byte sequence payload of H.264 - */ - -#ifndef vl_rbsp_h -#define vl_rbsp_h - -#include "vl_vlc.h" - -struct vl_rbsp { - struct vl_vlc nal; - unsigned escaped; -}; - -/** - * Initialize the RBSP object - */ -static inline void vl_rbsp_init(struct vl_rbsp *rbsp, struct vl_vlc *nal, unsigned num_bits) -{ - unsigned valid, bits_left = vl_vlc_bits_left(nal); - int i; - - /* copy the position */ - rbsp->nal = *nal; - - /* search for the end of the NAL unit */ - while (vl_vlc_search_byte(nal, num_bits, 0x00)) { - if (vl_vlc_peekbits(nal, 24) == 0x000001 || - vl_vlc_peekbits(nal, 32) == 0x00000001) { - vl_vlc_limit(&rbsp->nal, bits_left - vl_vlc_bits_left(nal)); - break; - } - vl_vlc_eatbits(nal, 8); - } - - valid = vl_vlc_valid_bits(&rbsp->nal); - /* search for the emulation prevention three byte */ - for (i = 24; i <= valid; i += 8) { - if ((vl_vlc_peekbits(&rbsp->nal, i) & 0xffffff) == 0x3) { - vl_vlc_removebits(&rbsp->nal, i - 8, 8); - i += 8; - } - } - - valid = vl_vlc_valid_bits(&rbsp->nal); - - rbsp->escaped = (valid >= 16) ? 16 : ((valid >= 8) ? 8 : 0); -} - -/** - * Make at least 16 more bits available - */ -static inline void vl_rbsp_fillbits(struct vl_rbsp *rbsp) -{ - unsigned valid = vl_vlc_valid_bits(&rbsp->nal); - unsigned i, bits; - - /* abort if we still have enough bits */ - if (valid >= 32) - return; - - vl_vlc_fillbits(&rbsp->nal); - - /* abort if we have less than 24 bits left in this nal */ - if (vl_vlc_bits_left(&rbsp->nal) < 24) - return; - - /* check that we have enough bits left from the last fillbits */ - assert(valid >= rbsp->escaped); - - /* handle the already escaped bits */ - valid -= rbsp->escaped; - - /* search for the emulation prevention three byte */ - rbsp->escaped = 16; - bits = vl_vlc_valid_bits(&rbsp->nal); - for (i = valid + 24; i <= bits; i += 8) { - if ((vl_vlc_peekbits(&rbsp->nal, i) & 0xffffff) == 0x3) { - vl_vlc_removebits(&rbsp->nal, i - 8, 8); - rbsp->escaped = bits - i; - bits -= 8; - i += 8; - } - } -} - -/** - * Return an unsigned integer from the first n bits - */ -static inline unsigned vl_rbsp_u(struct vl_rbsp *rbsp, unsigned n) -{ - if (n == 0) - return 0; - - vl_rbsp_fillbits(rbsp); - return vl_vlc_get_uimsbf(&rbsp->nal, n); -} - -/** - * Return an unsigned exponential Golomb encoded integer - */ -static inline unsigned vl_rbsp_ue(struct vl_rbsp *rbsp) -{ - unsigned bits = 0; - - vl_rbsp_fillbits(rbsp); - while (!vl_vlc_get_uimsbf(&rbsp->nal, 1)) - ++bits; - - return (1 << bits) - 1 + vl_rbsp_u(rbsp, bits); -} - -/** - * Return an signed exponential Golomb encoded integer - */ -static inline signed vl_rbsp_se(struct vl_rbsp *rbsp) -{ - signed codeNum = vl_rbsp_ue(rbsp); - if (codeNum & 1) - return (codeNum + 1) >> 1; - else - return -(codeNum >> 1); -} - -/** - * Are more data available in the RBSP ? - */ -static inline bool vl_rbsp_more_data(struct vl_rbsp *rbsp) -{ - unsigned bits, value; - - if (vl_vlc_bits_left(&rbsp->nal) > 8) - return true; - - bits = vl_vlc_valid_bits(&rbsp->nal); - value = vl_vlc_peekbits(&rbsp->nal, bits); - if (value == 0 || value == (1 << (bits - 1))) - return false; - - return true; -} - -#endif /* vl_rbsp_h */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vl_vlc.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vl_vlc.h deleted file mode 100644 index 0c80bc8..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vl_vlc.h +++ /dev/null @@ -1,378 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 Christian König. - * 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, sub license, 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 (including the - * next paragraph) 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 NON-INFRINGEMENT. - * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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. - * - **************************************************************************/ - -/* - * Functions for fast bitwise access to multiple probably unaligned input buffers - */ - -#ifndef vl_vlc_h -#define vl_vlc_h - -#include "u_math.h" - -struct vl_vlc -{ - uint64_t buffer; - signed invalid_bits; - const uint8_t *data; - const uint8_t *end; - - const void *const *inputs; - const unsigned *sizes; - unsigned bytes_left; -}; - -struct vl_vlc_entry -{ - int8_t length; - int8_t value; -}; - -struct vl_vlc_compressed -{ - uint16_t bitcode; - struct vl_vlc_entry entry; -}; - -/** - * initalize and decompress a lookup table - */ -static inline void -vl_vlc_init_table(struct vl_vlc_entry *dst, unsigned dst_size, const struct vl_vlc_compressed *src, unsigned src_size) -{ - unsigned i, bits = util_logbase2(dst_size); - - assert(dst && dst_size); - assert(src && src_size); - - for (i=0;i 0; --src_size, ++src) { - for(i = 0; i < (1u << (bits - src->entry.length)); ++i) - dst[src->bitcode >> (16 - bits) | i] = src->entry; - } -} - -/** - * switch over to next input buffer - */ -static inline void -vl_vlc_next_input(struct vl_vlc *vlc) -{ - unsigned len = vlc->sizes[0]; - - assert(vlc); - assert(vlc->bytes_left); - - if (len < vlc->bytes_left) - vlc->bytes_left -= len; - else { - len = vlc->bytes_left; - vlc->bytes_left = 0; - } - - vlc->data = (const uint8_t *) vlc->inputs[0]; - vlc->end = vlc->data + len; - - ++vlc->inputs; - ++vlc->sizes; -} - -/** - * align the data pointer to the next dword - */ -static inline void -vl_vlc_align_data_ptr(struct vl_vlc *vlc) -{ - /* align the data pointer */ - while (vlc->data != vlc->end && ((uintptr_t)vlc->data) & 3) { - vlc->buffer |= (uint64_t)*vlc->data << (24 + vlc->invalid_bits); - ++vlc->data; - vlc->invalid_bits -= 8; - } -} - -/** - * fill the bit buffer, so that at least 32 bits are valid - */ -static inline void -vl_vlc_fillbits(struct vl_vlc *vlc) -{ - assert(vlc); - - /* as long as the buffer needs to be filled */ - while (vlc->invalid_bits > 0) { - unsigned bytes_left = vlc->end - vlc->data; - - /* if this input is depleted */ - if (bytes_left == 0) { - - if (vlc->bytes_left) { - /* go on to next input */ - vl_vlc_next_input(vlc); - vl_vlc_align_data_ptr(vlc); - } else - /* or give up since we don't have anymore inputs */ - return; - - } else if (bytes_left >= 4) { - - /* enough bytes in buffer, read in a whole dword */ - uint64_t value = *(const uint32_t*)vlc->data; - -#if !UTIL_ARCH_BIG_ENDIAN - value = util_bswap32(value); -#endif - - vlc->buffer |= value << vlc->invalid_bits; - vlc->data += 4; - vlc->invalid_bits -= 32; - - /* buffer is now definitely filled up avoid the loop test */ - break; - - } else while (vlc->data < vlc->end) { - - /* not enough bytes left in buffer, read single bytes */ - vlc->buffer |= (uint64_t)*vlc->data << (24 + vlc->invalid_bits); - ++vlc->data; - vlc->invalid_bits -= 8; - } - } -} - -/** - * initialize vlc structure and start reading from first input buffer - */ -static inline void -vl_vlc_init(struct vl_vlc *vlc, unsigned num_inputs, - const void *const *inputs, const unsigned *sizes) -{ - unsigned i; - - assert(vlc); - assert(num_inputs); - - vlc->buffer = 0; - vlc->invalid_bits = 32; - vlc->inputs = inputs; - vlc->sizes = sizes; - vlc->bytes_left = 0; - - for (i = 0; i < num_inputs; ++i) - vlc->bytes_left += sizes[i]; - - if (vlc->bytes_left) { - vl_vlc_next_input(vlc); - vl_vlc_align_data_ptr(vlc); - vl_vlc_fillbits(vlc); - } -} - -/** - * number of bits still valid in bit buffer - */ -static inline unsigned -vl_vlc_valid_bits(struct vl_vlc *vlc) -{ - return 32 - vlc->invalid_bits; -} - -/** - * number of bits left over all inbut buffers - */ -static inline unsigned -vl_vlc_bits_left(struct vl_vlc *vlc) -{ - signed bytes_left = vlc->end - vlc->data; - bytes_left += vlc->bytes_left; - return bytes_left * 8 + vl_vlc_valid_bits(vlc); -} - -/** - * get num_bits from bit buffer without removing them - */ -static inline unsigned -vl_vlc_peekbits(struct vl_vlc *vlc, unsigned num_bits) -{ - assert(vl_vlc_valid_bits(vlc) >= num_bits || vlc->data >= vlc->end); - return vlc->buffer >> (64 - num_bits); -} - -/** - * remove num_bits from bit buffer - */ -static inline void -vl_vlc_eatbits(struct vl_vlc *vlc, unsigned num_bits) -{ - assert(vl_vlc_valid_bits(vlc) >= num_bits); - - vlc->buffer <<= num_bits; - vlc->invalid_bits += num_bits; -} - -/** - * get num_bits from bit buffer with removing them - */ -static inline unsigned -vl_vlc_get_uimsbf(struct vl_vlc *vlc, unsigned num_bits) -{ - unsigned value; - - assert(vl_vlc_valid_bits(vlc) >= num_bits); - - value = vlc->buffer >> (64 - num_bits); - vl_vlc_eatbits(vlc, num_bits); - - return value; -} - -/** - * treat num_bits as signed value and remove them from bit buffer - */ -static inline signed -vl_vlc_get_simsbf(struct vl_vlc *vlc, unsigned num_bits) -{ - signed value; - - assert(vl_vlc_valid_bits(vlc) >= num_bits); - - value = ((int64_t)vlc->buffer) >> (64 - num_bits); - vl_vlc_eatbits(vlc, num_bits); - - return value; -} - -/** - * lookup a value and length in a decompressed table - */ -static inline int8_t -vl_vlc_get_vlclbf(struct vl_vlc *vlc, const struct vl_vlc_entry *tbl, unsigned num_bits) -{ - tbl += vl_vlc_peekbits(vlc, num_bits); - vl_vlc_eatbits(vlc, tbl->length); - return tbl->value; -} - -/** - * fast forward search for a specific byte value - */ -static inline bool -vl_vlc_search_byte(struct vl_vlc *vlc, unsigned num_bits, uint8_t value) -{ - /* make sure we are on a byte boundary */ - assert((vl_vlc_valid_bits(vlc) % 8) == 0); - assert(num_bits == ~0u || (num_bits % 8) == 0); - - /* deplete the bit buffer */ - while (vl_vlc_valid_bits(vlc) > 0) { - - if (vl_vlc_peekbits(vlc, 8) == value) { - vl_vlc_fillbits(vlc); - return true; - } - - vl_vlc_eatbits(vlc, 8); - - if (num_bits != ~0u) { - num_bits -= 8; - if (num_bits == 0) - return false; - } - } - - /* deplete the byte buffers */ - while (1) { - - /* if this input is depleted */ - if (vlc->data == vlc->end) { - if (vlc->bytes_left) - /* go on to next input */ - vl_vlc_next_input(vlc); - else - /* or give up since we don't have anymore inputs */ - return false; - } - - if (*vlc->data == value) { - vl_vlc_align_data_ptr(vlc); - vl_vlc_fillbits(vlc); - return true; - } - - ++vlc->data; - if (num_bits != ~0u) { - num_bits -= 8; - if (num_bits == 0) { - vl_vlc_align_data_ptr(vlc); - return false; - } - } - } -} - -/** - * remove num_bits bits starting at pos from the bitbuffer - */ -static inline void -vl_vlc_removebits(struct vl_vlc *vlc, unsigned pos, unsigned num_bits) -{ - uint64_t lo = (vlc->buffer & (~0UL >> (pos + num_bits))) << num_bits; - uint64_t hi = (vlc->buffer & (~0UL << (64 - pos))); - vlc->buffer = lo | hi; - vlc->invalid_bits += num_bits; -} - -/** - * limit the number of bits left for fetching - */ -static inline void -vl_vlc_limit(struct vl_vlc *vlc, unsigned bits_left) -{ - assert(bits_left <= vl_vlc_bits_left(vlc)); - - vl_vlc_fillbits(vlc); - if (bits_left < vl_vlc_valid_bits(vlc)) { - vlc->invalid_bits = 32 - bits_left; - vlc->buffer &= ~0L << (vlc->invalid_bits + 32); - vlc->end = vlc->data; - vlc->bytes_left = 0; - } else { - assert((bits_left - vl_vlc_valid_bits(vlc)) % 8 == 0); - vlc->bytes_left = (bits_left - vl_vlc_valid_bits(vlc)) / 8; - if (vlc->bytes_left < (vlc->end - vlc->data)) { - vlc->end = vlc->data + vlc->bytes_left; - vlc->bytes_left = 0; - } else - vlc->bytes_left -= vlc->end - vlc->data; - } -} - -#endif /* vl_vlc_h */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vma.c b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vma.c deleted file mode 100644 index c8a45c9..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vma.c +++ /dev/null @@ -1,372 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#include -#include - -#include "macros.h" -#include "u_math.h" -#include "vma.h" - -struct util_vma_hole { - struct list_head link; - uint64_t offset; - uint64_t size; -}; - -#define util_vma_foreach_hole(_hole, _heap) \ - list_for_each_entry(struct util_vma_hole, _hole, &(_heap)->holes, link) - -#define util_vma_foreach_hole_safe(_hole, _heap) \ - list_for_each_entry_safe(struct util_vma_hole, _hole, &(_heap)->holes, link) - -#define util_vma_foreach_hole_safe_rev(_hole, _heap) \ - list_for_each_entry_safe_rev(struct util_vma_hole, _hole, &(_heap)->holes, link) - -void -util_vma_heap_init(struct util_vma_heap *heap, - uint64_t start, uint64_t size) -{ - list_inithead(&heap->holes); - heap->free_size = 0; - util_vma_heap_free(heap, start, size); - - /* Default to using high addresses */ - heap->alloc_high = true; - - /* Default to not having a nospan alignment */ - heap->nospan_shift = 0; -} - -void -util_vma_heap_finish(struct util_vma_heap *heap) -{ - util_vma_foreach_hole_safe(hole, heap) - free(hole); -} - -#ifndef NDEBUG -static void -util_vma_heap_validate(struct util_vma_heap *heap) -{ - uint64_t free_size = 0; - uint64_t prev_offset = 0; - util_vma_foreach_hole(hole, heap) { - assert(hole->offset > 0); - assert(hole->size > 0); - - free_size += hole->size; - - if (&hole->link == heap->holes.next) { - /* This must be the top-most hole. Assert that, if it overflows, it - * overflows to 0, i.e. 2^64. - */ - assert(hole->size + hole->offset == 0 || - hole->size + hole->offset > hole->offset); - } else { - /* This is not the top-most hole so it must not overflow and, in - * fact, must be strictly lower than the top-most hole. If - * hole->size + hole->offset == prev_offset, then we failed to join - * holes during a util_vma_heap_free. - */ - assert(hole->size + hole->offset > hole->offset && - hole->size + hole->offset < prev_offset); - } - prev_offset = hole->offset; - } - - assert(free_size == heap->free_size); -} -#else -#define util_vma_heap_validate(heap) -#endif - -static void -util_vma_hole_alloc(struct util_vma_heap *heap, - struct util_vma_hole *hole, - uint64_t offset, uint64_t size) -{ - assert(hole->offset <= offset); - assert(hole->size >= offset - hole->offset + size); - - if (offset == hole->offset && size == hole->size) { - /* Just get rid of the hole. */ - list_del(&hole->link); - free(hole); - goto done; - } - - assert(offset - hole->offset <= hole->size - size); - uint64_t waste = (hole->size - size) - (offset - hole->offset); - if (waste == 0) { - /* We allocated at the top. Shrink the hole down. */ - hole->size -= size; - goto done; - } - - if (offset == hole->offset) { - /* We allocated at the bottom. Shrink the hole up. */ - hole->offset += size; - hole->size -= size; - goto done; - } - - /* We allocated in the middle. We need to split the old hole into two - * holes, one high and one low. - */ - struct util_vma_hole *high_hole = calloc(1, sizeof(*hole)); - high_hole->offset = offset + size; - high_hole->size = waste; - - /* Adjust the hole to be the amount of space left at he bottom of the - * original hole. - */ - hole->size = offset - hole->offset; - - /* Place the new hole before the old hole so that the list is in order - * from high to low. - */ - list_addtail(&high_hole->link, &hole->link); - - done: - heap->free_size -= size; -} - -uint64_t -util_vma_heap_alloc(struct util_vma_heap *heap, - uint64_t size, uint64_t alignment) -{ - /* The caller is expected to reject zero-size allocations */ - assert(size > 0); - assert(alignment > 0); - - util_vma_heap_validate(heap); - - /* The requested alignment should not be stronger than the block/nospan - * alignment. - */ - if (heap->nospan_shift) { - assert(ALIGN(BITFIELD64_BIT(heap->nospan_shift), alignment) == - BITFIELD64_BIT(heap->nospan_shift)); - } - - if (heap->alloc_high) { - util_vma_foreach_hole_safe(hole, heap) { - if (size > hole->size) - continue; - - /* Compute the offset as the highest address where a chunk of the - * given size can be without going over the top of the hole. - * - * This calculation is known to not overflow because we know that - * hole->size + hole->offset can only overflow to 0 and size > 0. - */ - uint64_t offset = (hole->size - size) + hole->offset; - - if (heap->nospan_shift) { - uint64_t end = offset + size - 1; - if ((end >> heap->nospan_shift) != (offset >> heap->nospan_shift)) { - /* can we shift the offset down and still fit in the current hole? */ - end &= ~BITFIELD64_MASK(heap->nospan_shift); - assert(end >= size); - offset -= size; - if (offset < hole->offset) - continue; - } - } - - /* Align the offset. We align down and not up because we are - * allocating from the top of the hole and not the bottom. - */ - offset = (offset / alignment) * alignment; - - if (offset < hole->offset) - continue; - - util_vma_hole_alloc(heap, hole, offset, size); - util_vma_heap_validate(heap); - return offset; - } - } else { - util_vma_foreach_hole_safe_rev(hole, heap) { - if (size > hole->size) - continue; - - uint64_t offset = hole->offset; - - /* Align the offset */ - uint64_t misalign = offset % alignment; - if (misalign) { - uint64_t pad = alignment - misalign; - if (pad > hole->size - size) - continue; - - offset += pad; - } - - if (heap->nospan_shift) { - uint64_t end = offset + size - 1; - if ((end >> heap->nospan_shift) != (offset >> heap->nospan_shift)) { - /* can we shift the offset up and still fit in the current hole? */ - offset = end & ~BITFIELD64_MASK(heap->nospan_shift); - if ((offset + size) > (hole->offset + hole->size)) - continue; - } - } - - util_vma_hole_alloc(heap, hole, offset, size); - util_vma_heap_validate(heap); - return offset; - } - } - - /* Failed to allocate */ - return 0; -} - -bool -util_vma_heap_alloc_addr(struct util_vma_heap *heap, - uint64_t offset, uint64_t size) -{ - /* An offset of 0 is reserved for allocation failure. It is not a valid - * address and cannot be allocated. - */ - assert(offset > 0); - - /* Allocating something with a size of 0 is also not valid. */ - assert(size > 0); - - /* It's possible for offset + size to wrap around if we touch the top of - * the 64-bit address space, but we cannot go any higher than 2^64. - */ - assert(offset + size == 0 || offset + size > offset); - - /* Find the hole if one exists. */ - util_vma_foreach_hole_safe(hole, heap) { - if (hole->offset > offset) - continue; - - /* Holes are ordered high-to-low so the first hole we find with - * hole->offset <= is our hole. If it's not big enough to contain the - * requested range, then the allocation fails. - */ - assert(hole->offset <= offset); - if (hole->size < offset - hole->offset + size) - return false; - - util_vma_hole_alloc(heap, hole, offset, size); - return true; - } - - /* We didn't find a suitable hole */ - return false; -} - -void -util_vma_heap_free(struct util_vma_heap *heap, - uint64_t offset, uint64_t size) -{ - /* An offset of 0 is reserved for allocation failure. It is not a valid - * address and cannot be freed. - */ - assert(offset > 0); - - /* Freeing something with a size of 0 is also not valid. */ - assert(size > 0); - - /* It's possible for offset + size to wrap around if we touch the top of - * the 64-bit address space, but we cannot go any higher than 2^64. - */ - assert(offset + size == 0 || offset + size > offset); - - util_vma_heap_validate(heap); - - /* Find immediately higher and lower holes if they exist. */ - struct util_vma_hole *high_hole = NULL, *low_hole = NULL; - util_vma_foreach_hole(hole, heap) { - if (hole->offset <= offset) { - low_hole = hole; - break; - } - high_hole = hole; - } - - if (high_hole) - assert(offset + size <= high_hole->offset); - bool high_adjacent = high_hole && offset + size == high_hole->offset; - - if (low_hole) { - assert(low_hole->offset + low_hole->size > low_hole->offset); - assert(low_hole->offset + low_hole->size <= offset); - } - bool low_adjacent = low_hole && low_hole->offset + low_hole->size == offset; - - if (low_adjacent && high_adjacent) { - /* Merge the two holes */ - low_hole->size += size + high_hole->size; - list_del(&high_hole->link); - free(high_hole); - } else if (low_adjacent) { - /* Merge into the low hole */ - low_hole->size += size; - } else if (high_adjacent) { - /* Merge into the high hole */ - high_hole->offset = offset; - high_hole->size += size; - } else { - /* Neither hole is adjacent; make a new one */ - struct util_vma_hole *hole = calloc(1, sizeof(*hole)); - - hole->offset = offset; - hole->size = size; - - /* Add it after the high hole so we maintain high-to-low ordering */ - if (high_hole) - list_add(&hole->link, &high_hole->link); - else - list_add(&hole->link, &heap->holes); - } - - heap->free_size += size; - util_vma_heap_validate(heap); -} - -void -util_vma_heap_print(struct util_vma_heap *heap, FILE *fp, - const char *tab, uint64_t total_size) -{ - fprintf(fp, "%sutil_vma_heap:\n", tab); - - uint64_t total_free = 0; - util_vma_foreach_hole(hole, heap) { - fprintf(fp, "%s hole: offset = %"PRIu64" (0x%"PRIx64"), " - "size = %"PRIu64" (0x%"PRIx64")\n", - tab, hole->offset, hole->offset, hole->size, hole->size); - total_free += hole->size; - } - assert(total_free <= total_size); - assert(total_free == heap->free_size); - fprintf(fp, "%s%"PRIu64"B (0x%"PRIx64") free (%.2f%% full)\n", - tab, total_free, total_free, - ((double)(total_size - total_free) / (double)total_size) * 100); -} diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vma.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vma.h deleted file mode 100644 index ae9c77f..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/vma.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2018 Intel Corporation - * - * 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 (including the next - * paragraph) 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 - * THE AUTHORS OR COPYRIGHT HOLDERS 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. - */ - -#ifndef _UTIL_VMA_H -#define _UTIL_VMA_H - -#include -#include - -#include "list.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct util_vma_heap { - struct list_head holes; - - /** Total size of free memory. */ - uint64_t free_size; - - /** If true, util_vma_heap_alloc will prefer high addresses - * - * Default is true. - */ - bool alloc_high; - - /** - * If non-zero, util_vma_heap_alloc will avoid allocating regions which - * span (1 << nospan_shift) ranges. For example, to avoid allocations - * which straddle 4GB boundaries, use nospan_shift=log2(4GB) - */ - unsigned nospan_shift; -}; - -void util_vma_heap_init(struct util_vma_heap *heap, - uint64_t start, uint64_t size); -void util_vma_heap_finish(struct util_vma_heap *heap); - -uint64_t util_vma_heap_alloc(struct util_vma_heap *heap, - uint64_t size, uint64_t alignment); - -bool util_vma_heap_alloc_addr(struct util_vma_heap *heap, - uint64_t addr, uint64_t size); - -void util_vma_heap_free(struct util_vma_heap *heap, - uint64_t offset, uint64_t size); - -void util_vma_heap_print(struct util_vma_heap *heap, FILE *fp, - const char *tab, uint64_t total_size); - -#ifdef __cplusplus -} /* extern C */ -#endif - -#endif /* _UTIL_DEBUG_H */ diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/xxd.py b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/xxd.py deleted file mode 100644 index e5c0e9d..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/xxd.py +++ /dev/null @@ -1,99 +0,0 @@ -# encoding=utf-8 -# Copyright © 2018 Intel Corporation -# -# 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 (including the next -# paragraph) 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 -# THE AUTHORS OR COPYRIGHT HOLDERS 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. - -# Converts a file to a C/C++ #include containing a string - -import argparse -import io -import os - - -def get_args(): - parser = argparse.ArgumentParser() - parser.add_argument('input', help="Name of input file") - parser.add_argument('output', help="Name of output file") - parser.add_argument("-n", "--name", - help="Name of C variable") - parser.add_argument("-b", "--binary", dest='binary', action='store_const', - const=True, default=False) - args = parser.parse_args() - return args - - -def filename_to_C_identifier(n): - if n[0] != '_' and not n[0].isalpha(): - n = "_" + n[1:] - - return "".join([c if c.isalnum() or c == "_" else "_" for c in n]) - - -def emit_byte(f, b): - f.write("0x{:02x}, ".format(ord(b)).encode('utf-8')) - - -def process_file(args): - with io.open(args.input, "rb") as infile: - try: - with io.open(args.output, "wb") as outfile: - # If a name was not specified on the command line, pick one based on the - # name of the input file. If no input filename was specified, use - # from_stdin. - if args.name is not None: - name = args.name - else: - name = filename_to_C_identifier(args.input) - - outfile.write("static const char {}[] = {{\n".format(name).encode('utf-8')) - - linecount = 0 - while True: - byte = infile.read(1) - if byte == b"": - break - - if not args.binary: - assert(ord(byte) != 0) - - emit_byte(outfile, byte) - linecount = linecount + 1 - if linecount > 20: - outfile.write(b"\n ") - linecount = 0 - if not args.binary: - outfile.write(b"\n0") - outfile.write(b"\n};\n\n") - except Exception: - # In the event that anything goes wrong, delete the output file, - # then re-raise the exception. Deleteing the output file should - # ensure that the build system doesn't try to use the stale, - # half-generated file. - os.unlink(args.output) - raise - - -def main(): - args = get_args() - process_file(args) - - -if __name__ == "__main__": - main() diff --git a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/xxhash.h b/ltw/src/main/tinywrapper/glsl_optimizer/src/util/xxhash.h deleted file mode 100644 index 8d7c22c..0000000 --- a/ltw/src/main/tinywrapper/glsl_optimizer/src/util/xxhash.h +++ /dev/null @@ -1,1446 +0,0 @@ -/* - xxHash - Extremely Fast Hash algorithm - Header File - Copyright (C) 2012-2016, Yann Collet. - - BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - You can contact the author at : - - xxHash source repository : https://github.com/Cyan4973/xxHash -*/ - -/* Notice extracted from xxHash homepage : - -xxHash is an extremely fast Hash algorithm, running at RAM speed limits. -It also successfully passes all tests from the SMHasher suite. - -Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz) - -Name Speed Q.Score Author -xxHash 5.4 GB/s 10 -CrapWow 3.2 GB/s 2 Andrew -MumurHash 3a 2.7 GB/s 10 Austin Appleby -SpookyHash 2.0 GB/s 10 Bob Jenkins -SBox 1.4 GB/s 9 Bret Mulvey -Lookup3 1.2 GB/s 9 Bob Jenkins -SuperFastHash 1.2 GB/s 1 Paul Hsieh -CityHash64 1.05 GB/s 10 Pike & Alakuijala -FNV 0.55 GB/s 5 Fowler, Noll, Vo -CRC32 0.43 GB/s 9 -MD5-32 0.33 GB/s 10 Ronald L. Rivest -SHA1-32 0.28 GB/s 10 - -Q.Score is a measure of quality of the hash function. -It depends on successfully passing SMHasher test set. -10 is a perfect score. - -Note : SMHasher's CRC32 implementation is not the fastest one. -Other speed-oriented implementations can be faster, -especially in combination with PCLMUL instruction : -http://fastcompression.blogspot.com/2019/03/presenting-xxh3.html?showComment=1552696407071#c3490092340461170735 - -A 64-bit version, named XXH64, is available since r35. -It offers much better speed, but for 64-bit applications only. -Name Speed on 64 bits Speed on 32 bits -XXH64 13.8 GB/s 1.9 GB/s -XXH32 6.8 GB/s 6.0 GB/s -*/ - -/* Mesa leaves strict aliasing on in the compiler, and this code likes to - * dereference the passed in data as u32*, which means that the compiler is - * free to move the u32 read before the write of the struct members being - * hashed, and in practice it did in freedreno. Forcing these two things - * prevents it. - */ -#define XXH_FORCE_ALIGN_CHECK 0 -#define XXH_FORCE_MEMORY_ACCESS 0 - -#include "compiler.h" /* for FALLTHROUGH */ - -#if defined (__cplusplus) -extern "C" { -#endif - - -#ifndef XXHASH_H_5627135585666179 -#define XXHASH_H_5627135585666179 1 - -/* **************************** - * API modifier - ******************************/ -/** XXH_INLINE_ALL (and XXH_PRIVATE_API) - * This build macro includes xxhash functions in `static` mode - * in order to inline them, and remove their symbol from the public list. - * Inlining offers great performance improvement on small keys, - * and dramatic ones when length is expressed as a compile-time constant. - * See https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html . - * Methodology : - * #define XXH_INLINE_ALL - * #include "xxhash.h" - * `xxhash.c` is automatically included. - * It's not useful to compile and link it as a separate object. - */ -#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) -# ifndef XXH_STATIC_LINKING_ONLY -# define XXH_STATIC_LINKING_ONLY -# endif -# if defined(__GNUC__) -# define XXH_PUBLIC_API static __inline __attribute__((unused)) -# elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) -# define XXH_PUBLIC_API static inline -# elif defined(_MSC_VER) -# define XXH_PUBLIC_API static __inline -# else - /* this version may generate warnings for unused static functions */ -# define XXH_PUBLIC_API static -# endif -#else -# if defined(WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT)) -# ifdef XXH_EXPORT -# define XXH_PUBLIC_API __declspec(dllexport) -# elif XXH_IMPORT -# define XXH_PUBLIC_API __declspec(dllimport) -# endif -# else -# define XXH_PUBLIC_API /* do nothing */ -# endif -#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */ - -/*! XXH_NAMESPACE, aka Namespace Emulation : - * - * If you want to include _and expose_ xxHash functions from within your own library, - * but also want to avoid symbol collisions with other libraries which may also include xxHash, - * - * you can use XXH_NAMESPACE, to automatically prefix any public symbol from xxhash library - * with the value of XXH_NAMESPACE (therefore, avoid NULL and numeric values). - * - * Note that no change is required within the calling program as long as it includes `xxhash.h` : - * regular symbol name will be automatically translated by this header. - */ -#ifdef XXH_NAMESPACE -# define XXH_CAT(A,B) A##B -# define XXH_NAME2(A,B) XXH_CAT(A,B) -# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber) -# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32) -# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState) -# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState) -# define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset) -# define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update) -# define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest) -# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState) -# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash) -# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical) -# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64) -# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState) -# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState) -# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset) -# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update) -# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest) -# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState) -# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash) -# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical) -#endif - - -/* ************************************* -* Version -***************************************/ -#define XXH_VERSION_MAJOR 0 -#define XXH_VERSION_MINOR 7 -#define XXH_VERSION_RELEASE 2 -#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE) -XXH_PUBLIC_API unsigned XXH_versionNumber (void); - - -/* **************************** -* Definitions -******************************/ -#include /* size_t */ -typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode; - - -/*-********************************************************************** -* 32-bit hash -************************************************************************/ -#if !defined (__VMS) \ - && (defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) -# include - typedef uint32_t XXH32_hash_t; -#else -# include -# if UINT_MAX == 0xFFFFFFFFUL - typedef unsigned int XXH32_hash_t; -# else -# if ULONG_MAX == 0xFFFFFFFFUL - typedef unsigned long XXH32_hash_t; -# else -# error "unsupported platform : need a 32-bit type" -# endif -# endif -#endif - -/*! XXH32() : - Calculate the 32-bit hash of sequence "length" bytes stored at memory address "input". - The memory between input & input+length must be valid (allocated and read-accessible). - "seed" can be used to alter the result predictably. - Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s */ -XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed); - -/******* Streaming *******/ - -/* - * Streaming functions generate the xxHash value from an incrememtal input. - * This method is slower than single-call functions, due to state management. - * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized. - * - * XXH state must first be allocated, using XXH*_createState() . - * - * Start a new hash by initializing state with a seed, using XXH*_reset(). - * - * Then, feed the hash state by calling XXH*_update() as many times as necessary. - * The function returns an error code, with 0 meaning OK, and any other value meaning there is an error. - * - * Finally, a hash value can be produced anytime, by using XXH*_digest(). - * This function returns the nn-bits hash as an int or long long. - * - * It's still possible to continue inserting input into the hash state after a digest, - * and generate some new hash values later on, by invoking again XXH*_digest(). - * - * When done, release the state, using XXH*_freeState(). - */ - -typedef struct XXH32_state_s XXH32_state_t; /* incomplete type */ -XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void); -XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr); -XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state); - -XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, XXH32_hash_t seed); -XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length); -XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr); - -/******* Canonical representation *******/ - -/* Default return values from XXH functions are basic unsigned 32 and 64 bits. - * This the simplest and fastest format for further post-processing. - * However, this leaves open the question of what is the order of bytes, - * since little and big endian conventions will write the same number differently. - * - * The canonical representation settles this issue, - * by mandating big-endian convention, - * aka, the same convention as human-readable numbers (large digits first). - * When writing hash values to storage, sending them over a network, or printing them, - * it's highly recommended to use the canonical representation, - * to ensure portability across a wider range of systems, present and future. - * - * The following functions allow transformation of hash values into and from canonical format. - */ - -typedef struct { unsigned char digest[4]; } XXH32_canonical_t; -XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash); -XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src); - - -#ifndef XXH_NO_LONG_LONG -/*-********************************************************************** -* 64-bit hash -************************************************************************/ -#if !defined (__VMS) \ - && (defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) -# include - typedef uint64_t XXH64_hash_t; -#else - /* the following type must have a width of 64-bit */ - typedef unsigned long long XXH64_hash_t; -#endif - -/*! XXH64() : - * Returns the 64-bit hash of sequence of length @length stored at memory address @input. - * @seed can be used to alter the result predictably. - * This function runs faster on 64-bit systems, but slower on 32-bit systems (see benchmark). - */ -XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, XXH64_hash_t seed); - -/******* Streaming *******/ -typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */ -XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void); -XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr); -XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state); - -XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, XXH64_hash_t seed); -XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length); -XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr); - -/******* Canonical representation *******/ -typedef struct { unsigned char digest[8]; } XXH64_canonical_t; -XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash); -XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src); - - -#endif /* XXH_NO_LONG_LONG */ - -#endif /* XXHASH_H_5627135585666179 */ - - - -#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) -#define XXHASH_H_STATIC_13879238742 -/* ************************************************************************************************ - This section contains declarations which are not guaranteed to remain stable. - They may change in future versions, becoming incompatible with a different version of the library. - These declarations should only be used with static linking. - Never use them in association with dynamic linking ! -*************************************************************************************************** */ - -/* These definitions are only present to allow - * static allocation of XXH state, on stack or in a struct for example. - * Never **ever** use members directly. */ - -struct XXH32_state_s { - XXH32_hash_t total_len_32; - XXH32_hash_t large_len; - XXH32_hash_t v1; - XXH32_hash_t v2; - XXH32_hash_t v3; - XXH32_hash_t v4; - XXH32_hash_t mem32[4]; - XXH32_hash_t memsize; - XXH32_hash_t reserved; /* never read nor write, might be removed in a future version */ -}; /* typedef'd to XXH32_state_t */ - - -#ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */ - -struct XXH64_state_s { - XXH64_hash_t total_len; - XXH64_hash_t v1; - XXH64_hash_t v2; - XXH64_hash_t v3; - XXH64_hash_t v4; - XXH64_hash_t mem64[4]; - XXH32_hash_t memsize; - XXH32_hash_t reserved32; /* required for padding anyway */ - XXH64_hash_t reserved64; /* never read nor write, might be removed in a future version */ -}; /* typedef'd to XXH64_state_t */ - -#endif /* XXH_NO_LONG_LONG */ - -#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) -# define XXH_IMPLEMENTATION -#endif - -#endif /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */ - - - -/*-********************************************************************** -* xxHash implementation -* Functions implementation used to be hosted within xxhash.c . -* However, code inlining requires to place implementation in the header file. -* As a consequence, xxhash.c used to be included within xxhash.h . -* But some build systems don't like *.c inclusions. -* So the implementation is now directly integrated within xxhash.h . -* Another small advantage is that xxhash.c is no longer required in /includes . -************************************************************************/ - -#if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \ - || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387) -# define XXH_IMPLEM_13a8737387 - -/* ************************************* -* Tuning parameters -***************************************/ -/*!XXH_FORCE_MEMORY_ACCESS : - * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable. - * Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal. - * The below switch allow to select different access method for improved performance. - * Method 0 (default) : use `memcpy()`. Safe and portable. - * Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable). - * This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`. - * Method 2 : direct access. This method doesn't depend on compiler but violate C standard. - * It can generate buggy code on targets which do not support unaligned memory accesses. - * But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6) - * See http://stackoverflow.com/a/32095106/646947 for details. - * Prefer these methods in priority order (0 > 1 > 2) - */ -#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ -# if !defined(__clang__) && defined(__GNUC__) && defined(__ARM_FEATURE_UNALIGNED) && defined(__ARM_ARCH) && (__ARM_ARCH == 6) -# define XXH_FORCE_MEMORY_ACCESS 2 -# elif !defined(__clang__) && ((defined(__INTEL_COMPILER) && !defined(_WIN32)) || \ - (defined(__GNUC__) && (defined(__ARM_ARCH) && __ARM_ARCH >= 7))) -# define XXH_FORCE_MEMORY_ACCESS 1 -# endif -#endif - -/*!XXH_ACCEPT_NULL_INPUT_POINTER : - * If input pointer is NULL, xxHash default behavior is to dereference it, triggering a segfault. - * When this macro is enabled, xxHash actively checks input for null pointer. - * It it is, result for null input pointers is the same as a null-length input. - */ -#ifndef XXH_ACCEPT_NULL_INPUT_POINTER /* can be defined externally */ -# define XXH_ACCEPT_NULL_INPUT_POINTER 0 -#endif - -/*!XXH_FORCE_ALIGN_CHECK : - * This is a minor performance trick, only useful with lots of very small keys. - * It means : check for aligned/unaligned input. - * The check costs one initial branch per hash; - * set it to 0 when the input is guaranteed to be aligned, - * or when alignment doesn't matter for performance. - */ -#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */ -# if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64) -# define XXH_FORCE_ALIGN_CHECK 0 -# else -# define XXH_FORCE_ALIGN_CHECK 1 -# endif -#endif - -/*!XXH_REROLL: - * Whether to reroll XXH32_finalize, and XXH64_finalize, - * instead of using an unrolled jump table/if statement loop. - * - * This is automatically defined on -Os/-Oz on GCC and Clang. */ -#ifndef XXH_REROLL -# if defined(__OPTIMIZE_SIZE__) -# define XXH_REROLL 1 -# else -# define XXH_REROLL 0 -# endif -#endif - - -/* ************************************* -* Includes & Memory related functions -***************************************/ -/*! Modify the local functions below should you wish to use some other memory routines -* for malloc(), free() */ -#include -static void* XXH_malloc(size_t s) { return malloc(s); } -static void XXH_free (void* p) { free(p); } -/*! and for memcpy() */ -#include -static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcpy(dest,src,size); } - -#include /* ULLONG_MAX */ - - -/* ************************************* -* Compiler Specific Options -***************************************/ -#ifdef _MSC_VER /* Visual Studio */ -# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ -# define XXH_FORCE_INLINE static __forceinline -# define XXH_NO_INLINE static __declspec(noinline) -#else -# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ -# ifdef __GNUC__ -# define XXH_FORCE_INLINE static inline __attribute__((always_inline)) -# define XXH_NO_INLINE static __attribute__((noinline)) -# else -# define XXH_FORCE_INLINE static inline -# define XXH_NO_INLINE static -# endif -# else -# define XXH_FORCE_INLINE static -# define XXH_NO_INLINE static -# endif /* __STDC_VERSION__ */ -#endif - - - -/* ************************************* -* Debug -***************************************/ -/* DEBUGLEVEL is expected to be defined externally, - * typically through compiler command line. - * Value must be a number. */ -#ifndef DEBUGLEVEL -# define DEBUGLEVEL 0 -#endif - -#if (DEBUGLEVEL>=1) -# include /* note : can still be disabled with NDEBUG */ -# define XXH_ASSERT(c) assert(c) -#else -# define XXH_ASSERT(c) ((void)0) -#endif - -/* note : use after variable declarations */ -#define XXH_STATIC_ASSERT(c) { enum { XXH_sa = 1/(int)(!!(c)) }; } - - -/* ************************************* -* Basic Types -***************************************/ -#if !defined (__VMS) \ - && (defined (__cplusplus) \ - || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) -# include - typedef uint8_t xxh_u8; -#else - typedef unsigned char xxh_u8; -#endif -typedef XXH32_hash_t xxh_u32; - - -/* *** Memory access *** */ - -#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) - -/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ -static xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr; } - -#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) - -/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ -/* currently only defined for gcc and icc */ -typedef union { xxh_u32 u32; } __attribute__((packed)) unalign; -static xxh_u32 XXH_read32(const void* ptr) { return ((const unalign*)ptr)->u32; } - -#else - -/* portable and safe solution. Generally efficient. - * see : http://stackoverflow.com/a/32095106/646947 - */ -static xxh_u32 XXH_read32(const void* memPtr) -{ - xxh_u32 val; - memcpy(&val, memPtr, sizeof(val)); - return val; -} - -#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ - - -/* *** Endianess *** */ -typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess; - -/* XXH_CPU_LITTLE_ENDIAN can be defined externally, for example on the compiler command line */ -#ifndef XXH_CPU_LITTLE_ENDIAN -# if defined(_WIN32) /* Windows is always little endian */ \ - || defined(__LITTLE_ENDIAN__) \ - || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) -# define XXH_CPU_LITTLE_ENDIAN 1 -# elif defined(__BIG_ENDIAN__) \ - || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) -# define XXH_CPU_LITTLE_ENDIAN 0 -# else -static int XXH_isLittleEndian(void) -{ - const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 }; /* don't use static : performance detrimental */ - return one.c[0]; -} -# define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian() -# endif -#endif - - - - -/* **************************************** -* Compiler-specific Functions and Macros -******************************************/ -#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) - -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -#if !defined(NO_CLANG_BUILTIN) && __has_builtin(__builtin_rotateleft32) && __has_builtin(__builtin_rotateleft64) -# define XXH_rotl32 __builtin_rotateleft32 -# define XXH_rotl64 __builtin_rotateleft64 -/* Note : although _rotl exists for minGW (GCC under windows), performance seems poor */ -#elif defined(_MSC_VER) -# define XXH_rotl32(x,r) _rotl(x,r) -# define XXH_rotl64(x,r) _rotl64(x,r) -#else -# define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) -# define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r)))) -#endif - -#if defined(_MSC_VER) /* Visual Studio */ -# define XXH_swap32 _byteswap_ulong -#elif XXH_GCC_VERSION >= 403 -# define XXH_swap32 __builtin_bswap32 -#else -static xxh_u32 XXH_swap32 (xxh_u32 x) -{ - return ((x << 24) & 0xff000000 ) | - ((x << 8) & 0x00ff0000 ) | - ((x >> 8) & 0x0000ff00 ) | - ((x >> 24) & 0x000000ff ); -} -#endif - - -/* *************************** -* Memory reads -*****************************/ -typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment; - -XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr)); -} - -static xxh_u32 XXH_readBE32(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr); -} - -XXH_FORCE_INLINE xxh_u32 -XXH_readLE32_align(const void* ptr, XXH_alignment align) -{ - if (align==XXH_unaligned) { - return XXH_readLE32(ptr); - } else { - return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr); - } -} - - -/* ************************************* -* Misc -***************************************/ -XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; } - - -/* ******************************************************************* -* 32-bit hash functions -*********************************************************************/ -static const xxh_u32 PRIME32_1 = 0x9E3779B1U; /* 0b10011110001101110111100110110001 */ -static const xxh_u32 PRIME32_2 = 0x85EBCA77U; /* 0b10000101111010111100101001110111 */ -static const xxh_u32 PRIME32_3 = 0xC2B2AE3DU; /* 0b11000010101100101010111000111101 */ -static const xxh_u32 PRIME32_4 = 0x27D4EB2FU; /* 0b00100111110101001110101100101111 */ -static const xxh_u32 PRIME32_5 = 0x165667B1U; /* 0b00010110010101100110011110110001 */ - -static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input) -{ - acc += input * PRIME32_2; - acc = XXH_rotl32(acc, 13); - acc *= PRIME32_1; -#if defined(__GNUC__) && defined(__SSE4_1__) && !defined(XXH_ENABLE_AUTOVECTORIZE) - /* UGLY HACK: - * This inline assembly hack forces acc into a normal register. This is the - * only thing that prevents GCC and Clang from autovectorizing the XXH32 loop - * (pragmas and attributes don't work for some resason) without globally - * disabling SSE4.1. - * - * The reason we want to avoid vectorization is because despite working on - * 4 integers at a time, there are multiple factors slowing XXH32 down on - * SSE4: - * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on newer chips!) - * making it slightly slower to multiply four integers at once compared to four - * integers independently. Even when pmulld was fastest, Sandy/Ivy Bridge, it is - * still not worth it to go into SSE just to multiply unless doing a long operation. - * - * - Four instructions are required to rotate, - * movqda tmp, v // not required with VEX encoding - * pslld tmp, 13 // tmp <<= 13 - * psrld v, 19 // x >>= 19 - * por v, tmp // x |= tmp - * compared to one for scalar: - * roll v, 13 // reliably fast across the board - * shldl v, v, 13 // Sandy Bridge and later prefer this for some reason - * - * - Instruction level parallelism is actually more beneficial here because the - * SIMD actually serializes this operation: While v1 is rotating, v2 can load data, - * while v3 can multiply. SSE forces them to operate together. - * - * How this hack works: - * __asm__("" // Declare an assembly block but don't declare any instructions - * : // However, as an Input/Output Operand, - * "+r" // constrain a read/write operand (+) as a general purpose register (r). - * (acc) // and set acc as the operand - * ); - * - * Because of the 'r', the compiler has promised that seed will be in a - * general purpose register and the '+' says that it will be 'read/write', - * so it has to assume it has changed. It is like volatile without all the - * loads and stores. - * - * Since the argument has to be in a normal register (not an SSE register), - * each time XXH32_round is called, it is impossible to vectorize. */ - __asm__("" : "+r" (acc)); -#endif - return acc; -} - -/* mix all bits */ -static xxh_u32 XXH32_avalanche(xxh_u32 h32) -{ - h32 ^= h32 >> 15; - h32 *= PRIME32_2; - h32 ^= h32 >> 13; - h32 *= PRIME32_3; - h32 ^= h32 >> 16; - return(h32); -} - -#define XXH_get32bits(p) XXH_readLE32_align(p, align) - -static xxh_u32 -XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align) -{ -#define PROCESS1 \ - h32 += (*ptr++) * PRIME32_5; \ - h32 = XXH_rotl32(h32, 11) * PRIME32_1 ; - -#define PROCESS4 \ - h32 += XXH_get32bits(ptr) * PRIME32_3; \ - ptr+=4; \ - h32 = XXH_rotl32(h32, 17) * PRIME32_4 ; - - /* Compact rerolled version */ - if (XXH_REROLL) { - len &= 15; - while (len >= 4) { - PROCESS4; - len -= 4; - } - while (len > 0) { - PROCESS1; - --len; - } - return XXH32_avalanche(h32); - } else { - switch(len&15) /* or switch(bEnd - p) */ { - case 12: PROCESS4; - - case 8: PROCESS4; - - case 4: PROCESS4; - return XXH32_avalanche(h32); - - case 13: PROCESS4; - - case 9: PROCESS4; - - case 5: PROCESS4; - PROCESS1; - return XXH32_avalanche(h32); - - case 14: PROCESS4; - - case 10: PROCESS4; - - case 6: PROCESS4; - PROCESS1; - PROCESS1; - return XXH32_avalanche(h32); - - case 15: PROCESS4; - - case 11: PROCESS4; - - case 7: PROCESS4; - - case 3: PROCESS1; - - case 2: PROCESS1; - - case 1: PROCESS1; - - case 0: return XXH32_avalanche(h32); - } - XXH_ASSERT(0); - return h32; /* reaching this point is deemed impossible */ - } -} - -XXH_FORCE_INLINE xxh_u32 -XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align) -{ - const xxh_u8* bEnd = input + len; - xxh_u32 h32; - -#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) - if (input==NULL) { - len=0; - bEnd=input=(const xxh_u8*)(size_t)16; - } -#endif - - if (len>=16) { - const xxh_u8* const limit = bEnd - 15; - xxh_u32 v1 = seed + PRIME32_1 + PRIME32_2; - xxh_u32 v2 = seed + PRIME32_2; - xxh_u32 v3 = seed + 0; - xxh_u32 v4 = seed - PRIME32_1; - - do { - v1 = XXH32_round(v1, XXH_get32bits(input)); input += 4; - v2 = XXH32_round(v2, XXH_get32bits(input)); input += 4; - v3 = XXH32_round(v3, XXH_get32bits(input)); input += 4; - v4 = XXH32_round(v4, XXH_get32bits(input)); input += 4; - } while (input < limit); - - h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7) - + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18); - } else { - h32 = seed + PRIME32_5; - } - - h32 += (xxh_u32)len; - - return XXH32_finalize(h32, input, len&15, align); -} - - -XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed) -{ -#if 0 - /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ - XXH32_state_t state; - XXH32_reset(&state, seed); - XXH32_update(&state, (const xxh_u8*)input, len); - return XXH32_digest(&state); - -#else - - if (XXH_FORCE_ALIGN_CHECK) { - if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */ - return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); - } } - - return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); -#endif -} - - - -/******* Hash streaming *******/ - -XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void) -{ - return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t)); -} -XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr) -{ - XXH_free(statePtr); - return XXH_OK; -} - -XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState) -{ - memcpy(dstState, srcState, sizeof(*dstState)); -} - -XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed) -{ - XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ - memset(&state, 0, sizeof(state)); - state.v1 = seed + PRIME32_1 + PRIME32_2; - state.v2 = seed + PRIME32_2; - state.v3 = seed + 0; - state.v4 = seed - PRIME32_1; - /* do not write into reserved, planned to be removed in a future version */ - memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved)); - return XXH_OK; -} - - -XXH_PUBLIC_API XXH_errorcode -XXH32_update(XXH32_state_t* state, const void* input, size_t len) -{ - if (input==NULL) -#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) - return XXH_OK; -#else - return XXH_ERROR; -#endif - - { const xxh_u8* p = (const xxh_u8*)input; - const xxh_u8* const bEnd = p + len; - - state->total_len_32 += (XXH32_hash_t)len; - state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16)); - - if (state->memsize + len < 16) { /* fill in tmp buffer */ - XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, len); - state->memsize += (XXH32_hash_t)len; - return XXH_OK; - } - - if (state->memsize) { /* some data left from previous update */ - XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, 16-state->memsize); - { const xxh_u32* p32 = state->mem32; - state->v1 = XXH32_round(state->v1, XXH_readLE32(p32)); p32++; - state->v2 = XXH32_round(state->v2, XXH_readLE32(p32)); p32++; - state->v3 = XXH32_round(state->v3, XXH_readLE32(p32)); p32++; - state->v4 = XXH32_round(state->v4, XXH_readLE32(p32)); - } - p += 16-state->memsize; - state->memsize = 0; - } - - if (p <= bEnd-16) { - const xxh_u8* const limit = bEnd - 16; - xxh_u32 v1 = state->v1; - xxh_u32 v2 = state->v2; - xxh_u32 v3 = state->v3; - xxh_u32 v4 = state->v4; - - do { - v1 = XXH32_round(v1, XXH_readLE32(p)); p+=4; - v2 = XXH32_round(v2, XXH_readLE32(p)); p+=4; - v3 = XXH32_round(v3, XXH_readLE32(p)); p+=4; - v4 = XXH32_round(v4, XXH_readLE32(p)); p+=4; - } while (p<=limit); - - state->v1 = v1; - state->v2 = v2; - state->v3 = v3; - state->v4 = v4; - } - - if (p < bEnd) { - XXH_memcpy(state->mem32, p, (size_t)(bEnd-p)); - state->memsize = (unsigned)(bEnd-p); - } - } - - return XXH_OK; -} - - -XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* state) -{ - xxh_u32 h32; - - if (state->large_len) { - h32 = XXH_rotl32(state->v1, 1) - + XXH_rotl32(state->v2, 7) - + XXH_rotl32(state->v3, 12) - + XXH_rotl32(state->v4, 18); - } else { - h32 = state->v3 /* == seed */ + PRIME32_5; - } - - h32 += state->total_len_32; - - return XXH32_finalize(h32, (const xxh_u8*)state->mem32, state->memsize, XXH_aligned); -} - - -/******* Canonical representation *******/ - -/*! Default XXH result types are basic unsigned 32 and 64 bits. -* The canonical representation follows human-readable write convention, aka big-endian (large digits first). -* These functions allow transformation of hash result into and from its canonical format. -* This way, hash values can be written into a file or buffer, remaining comparable across different systems. -*/ - -XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash) -{ - XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t)); - if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash); - memcpy(dst, &hash, sizeof(*dst)); -} - -XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src) -{ - return XXH_readBE32(src); -} - - -#ifndef XXH_NO_LONG_LONG - -/* ******************************************************************* -* 64-bit hash functions -*********************************************************************/ - -/******* Memory access *******/ - -typedef XXH64_hash_t xxh_u64; - - -/*! XXH_REROLL_XXH64: - * Whether to reroll the XXH64_finalize() loop. - * - * Just like XXH32, we can unroll the XXH64_finalize() loop. This can be a performance gain - * on 64-bit hosts, as only one jump is required. - * - * However, on 32-bit hosts, because arithmetic needs to be done with two 32-bit registers, - * and 64-bit arithmetic needs to be simulated, it isn't beneficial to unroll. The code becomes - * ridiculously large (the largest function in the binary on i386!), and rerolling it saves - * anywhere from 3kB to 20kB. It is also slightly faster because it fits into cache better - * and is more likely to be inlined by the compiler. - * - * If XXH_REROLL is defined, this is ignored and the loop is always rerolled. */ -#ifndef XXH_REROLL_XXH64 -# if (defined(__ILP32__) || defined(_ILP32)) /* ILP32 is often defined on 32-bit GCC family */ \ - || !(defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) /* x86-64 */ \ - || defined(_M_ARM64) || defined(__aarch64__) || defined(__arm64__) /* aarch64 */ \ - || defined(__PPC64__) || defined(__PPC64LE__) || defined(__ppc64__) || defined(__powerpc64__) /* ppc64 */ \ - || defined(__mips64__) || defined(__mips64)) /* mips64 */ \ - || (!defined(SIZE_MAX) || SIZE_MAX < ULLONG_MAX) /* check limits */ -# define XXH_REROLL_XXH64 1 -# else -# define XXH_REROLL_XXH64 0 -# endif -#endif /* !defined(XXH_REROLL_XXH64) */ - -#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2)) - -/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */ -static xxh_u64 XXH_read64(const void* memPtr) { return *(const xxh_u64*) memPtr; } - -#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1)) - -/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ -/* currently only defined for gcc and icc */ -typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) unalign64; -static xxh_u64 XXH_read64(const void* ptr) { return ((const unalign64*)ptr)->u64; } - -#else - -/* portable and safe solution. Generally efficient. - * see : http://stackoverflow.com/a/32095106/646947 - */ - -static xxh_u64 XXH_read64(const void* memPtr) -{ - xxh_u64 val; - memcpy(&val, memPtr, sizeof(val)); - return val; -} - -#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */ - -#if defined(_MSC_VER) /* Visual Studio */ -# define XXH_swap64 _byteswap_uint64 -#elif XXH_GCC_VERSION >= 403 -# define XXH_swap64 __builtin_bswap64 -#else -static xxh_u64 XXH_swap64 (xxh_u64 x) -{ - return ((x << 56) & 0xff00000000000000ULL) | - ((x << 40) & 0x00ff000000000000ULL) | - ((x << 24) & 0x0000ff0000000000ULL) | - ((x << 8) & 0x000000ff00000000ULL) | - ((x >> 8) & 0x00000000ff000000ULL) | - ((x >> 24) & 0x0000000000ff0000ULL) | - ((x >> 40) & 0x000000000000ff00ULL) | - ((x >> 56) & 0x00000000000000ffULL); -} -#endif - -XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr)); -} - -static xxh_u64 XXH_readBE64(const void* ptr) -{ - return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr); -} - -XXH_FORCE_INLINE xxh_u64 -XXH_readLE64_align(const void* ptr, XXH_alignment align) -{ - if (align==XXH_unaligned) - return XXH_readLE64(ptr); - else - return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr); -} - - -/******* xxh64 *******/ - -static const xxh_u64 PRIME64_1 = 0x9E3779B185EBCA87ULL; /* 0b1001111000110111011110011011000110000101111010111100101010000111 */ -static const xxh_u64 PRIME64_2 = 0xC2B2AE3D27D4EB4FULL; /* 0b1100001010110010101011100011110100100111110101001110101101001111 */ -static const xxh_u64 PRIME64_3 = 0x165667B19E3779F9ULL; /* 0b0001011001010110011001111011000110011110001101110111100111111001 */ -static const xxh_u64 PRIME64_4 = 0x85EBCA77C2B2AE63ULL; /* 0b1000010111101011110010100111011111000010101100101010111001100011 */ -static const xxh_u64 PRIME64_5 = 0x27D4EB2F165667C5ULL; /* 0b0010011111010100111010110010111100010110010101100110011111000101 */ - -static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input) -{ - acc += input * PRIME64_2; - acc = XXH_rotl64(acc, 31); - acc *= PRIME64_1; - return acc; -} - -static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val) -{ - val = XXH64_round(0, val); - acc ^= val; - acc = acc * PRIME64_1 + PRIME64_4; - return acc; -} - -static xxh_u64 XXH64_avalanche(xxh_u64 h64) -{ - h64 ^= h64 >> 33; - h64 *= PRIME64_2; - h64 ^= h64 >> 29; - h64 *= PRIME64_3; - h64 ^= h64 >> 32; - return h64; -} - - -#define XXH_get64bits(p) XXH_readLE64_align(p, align) - -static xxh_u64 -XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align) -{ -#define PROCESS1_64 \ - h64 ^= (*ptr++) * PRIME64_5; \ - h64 = XXH_rotl64(h64, 11) * PRIME64_1; - -#define PROCESS4_64 \ - h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * PRIME64_1; \ - ptr+=4; \ - h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3; - -#define PROCESS8_64 { \ - xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr)); \ - ptr+=8; \ - h64 ^= k1; \ - h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4; \ -} - - /* Rerolled version for 32-bit targets is faster and much smaller. */ - if (XXH_REROLL || XXH_REROLL_XXH64) { - len &= 31; - while (len >= 8) { - PROCESS8_64; - len -= 8; - } - if (len >= 4) { - PROCESS4_64; - len -= 4; - } - while (len > 0) { - PROCESS1_64; - --len; - } - return XXH64_avalanche(h64); - } else { - switch(len & 31) { - case 24: PROCESS8_64; - - case 16: PROCESS8_64; - - case 8: PROCESS8_64; - return XXH64_avalanche(h64); - - case 28: PROCESS8_64; - - case 20: PROCESS8_64; - - case 12: PROCESS8_64; - - case 4: PROCESS4_64; - return XXH64_avalanche(h64); - - case 25: PROCESS8_64; - - case 17: PROCESS8_64; - - case 9: PROCESS8_64; - PROCESS1_64; - return XXH64_avalanche(h64); - - case 29: PROCESS8_64; - - case 21: PROCESS8_64; - - case 13: PROCESS8_64; - - case 5: PROCESS4_64; - PROCESS1_64; - return XXH64_avalanche(h64); - - case 26: PROCESS8_64; - - case 18: PROCESS8_64; - - case 10: PROCESS8_64; - PROCESS1_64; - PROCESS1_64; - return XXH64_avalanche(h64); - - case 30: PROCESS8_64; - - case 22: PROCESS8_64; - - case 14: PROCESS8_64; - - case 6: PROCESS4_64; - PROCESS1_64; - PROCESS1_64; - return XXH64_avalanche(h64); - - case 27: PROCESS8_64; - - case 19: PROCESS8_64; - - case 11: PROCESS8_64; - PROCESS1_64; - PROCESS1_64; - PROCESS1_64; - return XXH64_avalanche(h64); - - case 31: PROCESS8_64; - - case 23: PROCESS8_64; - - case 15: PROCESS8_64; - - case 7: PROCESS4_64; - - case 3: PROCESS1_64; - - case 2: PROCESS1_64; - - case 1: PROCESS1_64; - - case 0: return XXH64_avalanche(h64); - } - } - /* impossible to reach */ - XXH_ASSERT(0); - return 0; /* unreachable, but some compilers complain without it */ -} - -XXH_FORCE_INLINE xxh_u64 -XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align) -{ - const xxh_u8* bEnd = input + len; - xxh_u64 h64; - -#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) - if (input==NULL) { - len=0; - bEnd=input=(const xxh_u8*)(size_t)32; - } -#endif - - if (len>=32) { - const xxh_u8* const limit = bEnd - 32; - xxh_u64 v1 = seed + PRIME64_1 + PRIME64_2; - xxh_u64 v2 = seed + PRIME64_2; - xxh_u64 v3 = seed + 0; - xxh_u64 v4 = seed - PRIME64_1; - - do { - v1 = XXH64_round(v1, XXH_get64bits(input)); input+=8; - v2 = XXH64_round(v2, XXH_get64bits(input)); input+=8; - v3 = XXH64_round(v3, XXH_get64bits(input)); input+=8; - v4 = XXH64_round(v4, XXH_get64bits(input)); input+=8; - } while (input<=limit); - - h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); - h64 = XXH64_mergeRound(h64, v1); - h64 = XXH64_mergeRound(h64, v2); - h64 = XXH64_mergeRound(h64, v3); - h64 = XXH64_mergeRound(h64, v4); - - } else { - h64 = seed + PRIME64_5; - } - - h64 += (xxh_u64) len; - - return XXH64_finalize(h64, input, len, align); -} - - -XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t len, XXH64_hash_t seed) -{ -#if 0 - /* Simple version, good for code maintenance, but unfortunately slow for small inputs */ - XXH64_state_t state; - XXH64_reset(&state, seed); - XXH64_update(&state, (const xxh_u8*)input, len); - return XXH64_digest(&state); - -#else - - if (XXH_FORCE_ALIGN_CHECK) { - if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */ - return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_aligned); - } } - - return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned); - -#endif -} - -/******* Hash Streaming *******/ - -XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void) -{ - return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t)); -} -XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr) -{ - XXH_free(statePtr); - return XXH_OK; -} - -XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t* srcState) -{ - memcpy(dstState, srcState, sizeof(*dstState)); -} - -XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, XXH64_hash_t seed) -{ - XXH64_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */ - memset(&state, 0, sizeof(state)); - state.v1 = seed + PRIME64_1 + PRIME64_2; - state.v2 = seed + PRIME64_2; - state.v3 = seed + 0; - state.v4 = seed - PRIME64_1; - /* do not write into reserved64, might be removed in a future version */ - memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved64)); - return XXH_OK; -} - -XXH_PUBLIC_API XXH_errorcode -XXH64_update (XXH64_state_t* state, const void* input, size_t len) -{ - if (input==NULL) -#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1) - return XXH_OK; -#else - return XXH_ERROR; -#endif - - { const xxh_u8* p = (const xxh_u8*)input; - const xxh_u8* const bEnd = p + len; - - state->total_len += len; - - if (state->memsize + len < 32) { /* fill in tmp buffer */ - XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, len); - state->memsize += (xxh_u32)len; - return XXH_OK; - } - - if (state->memsize) { /* tmp buffer is full */ - XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, 32-state->memsize); - state->v1 = XXH64_round(state->v1, XXH_readLE64(state->mem64+0)); - state->v2 = XXH64_round(state->v2, XXH_readLE64(state->mem64+1)); - state->v3 = XXH64_round(state->v3, XXH_readLE64(state->mem64+2)); - state->v4 = XXH64_round(state->v4, XXH_readLE64(state->mem64+3)); - p += 32-state->memsize; - state->memsize = 0; - } - - if (p+32 <= bEnd) { - const xxh_u8* const limit = bEnd - 32; - xxh_u64 v1 = state->v1; - xxh_u64 v2 = state->v2; - xxh_u64 v3 = state->v3; - xxh_u64 v4 = state->v4; - - do { - v1 = XXH64_round(v1, XXH_readLE64(p)); p+=8; - v2 = XXH64_round(v2, XXH_readLE64(p)); p+=8; - v3 = XXH64_round(v3, XXH_readLE64(p)); p+=8; - v4 = XXH64_round(v4, XXH_readLE64(p)); p+=8; - } while (p<=limit); - - state->v1 = v1; - state->v2 = v2; - state->v3 = v3; - state->v4 = v4; - } - - if (p < bEnd) { - XXH_memcpy(state->mem64, p, (size_t)(bEnd-p)); - state->memsize = (unsigned)(bEnd-p); - } - } - - return XXH_OK; -} - - -XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* state) -{ - xxh_u64 h64; - - if (state->total_len >= 32) { - xxh_u64 const v1 = state->v1; - xxh_u64 const v2 = state->v2; - xxh_u64 const v3 = state->v3; - xxh_u64 const v4 = state->v4; - - h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); - h64 = XXH64_mergeRound(h64, v1); - h64 = XXH64_mergeRound(h64, v2); - h64 = XXH64_mergeRound(h64, v3); - h64 = XXH64_mergeRound(h64, v4); - } else { - h64 = state->v3 /*seed*/ + PRIME64_5; - } - - h64 += (xxh_u64) state->total_len; - - return XXH64_finalize(h64, (const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned); -} - - -/******* Canonical representation *******/ - -XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash) -{ - XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t)); - if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash); - memcpy(dst, &hash, sizeof(*dst)); -} - -XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src) -{ - return XXH_readBE64(src); -} - - - -/* ********************************************************************* -* XXH3 -* New generation hash designed for speed on small keys and vectorization -************************************************************************ */ - -/* #include "xxh3.h" */ - - -#endif /* XXH_NO_LONG_LONG */ - - -#endif /* XXH_IMPLEMENTATION */ - - -#if defined (__cplusplus) -} -#endif diff --git a/ltw/src/main/tinywrapper/libraryinternal.h b/ltw/src/main/tinywrapper/libraryinternal.h deleted file mode 100644 index f776722..0000000 --- a/ltw/src/main/tinywrapper/libraryinternal.h +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef POJAVLAUNCHER_LIBRARYINTERNAL_H -#define POJAVLAUNCHER_LIBRARYINTERNAL_H - -#define INTERNAL __attribute__((visibility("hidden"))) - -#endif //POJAVLAUNCHER_LIBRARYINTERNAL_H diff --git a/ltw/src/main/tinywrapper/license_notice.c b/ltw/src/main/tinywrapper/license_notice.c deleted file mode 100644 index fa4ca0b..0000000 --- a/ltw/src/main/tinywrapper/license_notice.c +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -// Persistent notice that gets added into the final binary -const volatile char* LICENSE_NOTICE = "Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. For use under LGPL-3.0. " - "Build date: "__DATE__" "__TIME__; \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/main.c b/ltw/src/main/tinywrapper/main.c deleted file mode 100644 index 1899ad7..0000000 --- a/ltw/src/main/tinywrapper/main.c +++ /dev/null @@ -1,515 +0,0 @@ -/** - * Created by: artDev, DuyKhanhTran - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ -#include -#include - -#include -#include "GL/gl.h" -#include -#include "string_utils.h" -#include -#include -#include "proc.h" -#include "egl.h" -#include "glformats.h" -#include "main.h" -#include "swizzle.h" -#include "libraryinternal.h" -#include "env.h" - -void glClearDepth(GLdouble depth) { - if(!current_context) return; - es3_functions.glClearDepthf((GLfloat) depth); -} - -void *glMapBuffer(GLenum target, GLenum access) { - if(!current_context) return NULL; - - GLenum access_range; - GLint length; - - switch (target) { - // GL 4.2 - case GL_ATOMIC_COUNTER_BUFFER: - // GL 4.3 - case GL_DISPATCH_INDIRECT_BUFFER: - case GL_SHADER_STORAGE_BUFFER: - // GL 4.4 - case GL_QUERY_BUFFER: - printf("ERROR: glMapBuffer unsupported target=0x%x\n", target); - break; // not supported for now - case GL_DRAW_INDIRECT_BUFFER: - case GL_TEXTURE_BUFFER: - printf("ERROR: glMapBuffer unimplemented target=0x%x\n", target); - break; - } - - switch (access) { - case GL_READ_ONLY: - access_range = GL_MAP_READ_BIT; - break; - - case GL_WRITE_ONLY: - access_range = GL_MAP_WRITE_BIT; - break; - - case GL_READ_WRITE: - access_range = GL_MAP_READ_BIT | GL_MAP_WRITE_BIT; - break; - } - - es3_functions.glGetBufferParameteriv(target, GL_BUFFER_SIZE, &length); - return es3_functions.glMapBufferRange(target, 0, length, access_range); -} - -INTERNAL int isProxyTexture(GLenum target) { - switch (target) { - case GL_PROXY_TEXTURE_1D: - case GL_PROXY_TEXTURE_2D: - case GL_PROXY_TEXTURE_3D: - case GL_PROXY_TEXTURE_RECTANGLE_ARB: - return 1; - } - return 0; -} - -INTERNAL GLenum get_textarget_query_param(GLenum target) { - switch (target) { - case GL_TEXTURE_2D: - return GL_TEXTURE_BINDING_2D; - case GL_TEXTURE_2D_MULTISAMPLE: - return GL_TEXTURE_BINDING_2D_MULTISAMPLE; - case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: - return GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY; - case GL_TEXTURE_3D: - return GL_TEXTURE_BINDING_3D; - case GL_TEXTURE_2D_ARRAY: - return GL_TEXTURE_BINDING_2D_ARRAY; - case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: - case GL_TEXTURE_CUBE_MAP_POSITIVE_X: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: - case GL_TEXTURE_CUBE_MAP: - return GL_TEXTURE_BINDING_CUBE_MAP; - case GL_TEXTURE_CUBE_MAP_ARRAY: - return GL_TEXTURE_BINDING_CUBE_MAP_ARRAY; - case GL_TEXTURE_BUFFER: - return GL_TEXTURE_BUFFER_BINDING; - default: - return 0; - } -} - -static int inline nlevel(int size, int level) { - if(size) { - size>>=level; - if(!size) size=1; - } - return size; -} - -static bool trigger_texlevelparameter = false; - -static bool check_texlevelparameter() { - if(current_context->es31) return true; - if(trigger_texlevelparameter) return false; - printf("glGetTexLevelParameter* functions are not supported below OpenGL ES 3.1\n"); - trigger_texlevelparameter = true; - return false; -} - -static void proxy_getlevelparameter(GLenum target, GLint level, GLenum pname, GLint *params) { - switch (pname) { - case GL_TEXTURE_WIDTH: - (*params) = nlevel(current_context->proxy_width, level); - break; - case GL_TEXTURE_HEIGHT: - (*params) = nlevel(current_context->proxy_height, level); - break; - case GL_TEXTURE_INTERNAL_FORMAT: - (*params) = current_context->proxy_intformat; - break; - } -} - -void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params) { - if(!current_context) return; - if(isProxyTexture(target)) { - GLint param = 0; - proxy_getlevelparameter(target, level, pname, ¶m); - *params = (GLfloat) param; - return; - } - if(!check_texlevelparameter()) return; - es3_functions.glGetTexLevelParameterfv(target, level, pname, params); -} - -void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params) { - if(!current_context) return; - if (isProxyTexture(target)) { - proxy_getlevelparameter(target, level, pname, params); - return; - } - if(!check_texlevelparameter()) return; - es3_functions.glGetTexLevelParameteriv(target, level, pname, params); - -} - -void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *data) { - if(!current_context) return; - if (isProxyTexture(target)) { - current_context->proxy_width = ((width<current_context->maxTextureSize)?0:width; - current_context->proxy_height = ((height<current_context->maxTextureSize)?0:height; - current_context->proxy_intformat = internalformat; - } else { - if(data != NULL) swizzle_process_upload(target, &format, &type); - pick_internalformat(&internalformat, &type, &format, &data); - es3_functions.glTexImage2D(target, level, internalformat, width, height, border, format, type, data); - } -} - -INTERNAL bool filter_params_integer(GLenum target, GLenum pname, GLint param) { - return true; -} -INTERNAL bool filter_params_float(GLenum target, GLenum pname, GLfloat param) { - if(pname == GL_TEXTURE_LOD_BIAS) { - if(param != 0.0f) { - static bool lodbias_trigger = false; - if(!lodbias_trigger) { - printf("LTW: setting GL_TEXTURE_LOD_BIAS to nondefault value not supported\n"); - } - } - return false; - } - return true; -} -void glTexParameterf( GLenum target, - GLenum pname, - GLfloat param) { - if(!current_context) return; - if(!filter_params_integer(target, pname, (GLint) param)) return; - if(!filter_params_float(target, pname, param)) return; - es3_functions.glTexParameterf(target, pname, param); -} -void glTexParameteri( GLenum target, - GLenum pname, - GLint param) { - if(!current_context) return; - if(!filter_params_integer(target, pname, param)) return; - if(!filter_params_float(target, pname, (GLfloat)param)) return; - swizzle_process_swizzle_param(target, pname, ¶m); - es3_functions.glTexParameteri(target, pname, param); -} - -void glTexParameterfv( GLenum target, - GLenum pname, - const GLfloat * params) { - if(!current_context) return; - if(!filter_params_integer(target, pname, (GLint)*params)) return; - if(!filter_params_float(target, pname, *params)) return; - es3_functions.glTexParameterfv(target, pname, params); -} -void glTexParameteriv( GLenum target, - GLenum pname, - const GLint * params) { - if(!current_context) return; - if(!filter_params_integer(target, pname, *params)) return; - if(!filter_params_float(target, pname, (GLfloat)*params)) return; - swizzle_process_swizzle_param(target, pname, params); - es3_functions.glTexParameteriv(target, pname, params); -} -static bool trigger_gltexparameteri = false; -void glTexParameterIiv( GLenum target, - GLenum pname, - const GLint * params) { - if(!current_context) return; - if(pname != GL_TEXTURE_SWIZZLE_RGBA) { - if(!trigger_gltexparameteri) { - printf("LTW: glTexParameterIiv for parameters other than GL_TEXTURE_SWIZZLE_RGBA is not supported\n"); - trigger_gltexparameteri = true; - } - return; - } - swizzle_process_swizzle_param(target, pname, params); -} - -void glTexParameterIuiv( GLenum target, - GLenum pname, - const GLuint * params) { - if(!current_context) return; - if(pname != GL_TEXTURE_SWIZZLE_RGBA) { - if(!trigger_gltexparameteri) { - printf("LTW: glTexParameterIuiv for parameters other than GL_TEXTURE_SWIZZLE_RGBA is not supported\n"); - trigger_gltexparameteri = true; - } - return; - } - swizzle_process_swizzle_param(target, pname, params); -} - -void glRenderbufferStorage( GLenum target, - GLenum internalformat, - GLsizei width, - GLsizei height) { - if(!current_context) return; - if(internalformat == GL_DEPTH_COMPONENT) internalformat = GL_DEPTH_COMPONENT16; - es3_functions.glRenderbufferStorage(target, internalformat, width, height); -} - -static bool never_flush_buffers; -static bool coherent_dynamic_storage; - -void glBufferStorage(GLenum target, - GLsizeiptr size, - const void * data, - GLbitfield flags) { - if(!current_context || !current_context->buffer_storage) return; - // Enable coherence to make sure the buffers are synced without flushing. - if(never_flush_buffers && ((flags & GL_MAP_PERSISTENT_BIT) != 0)) { - flags |= GL_MAP_COHERENT_BIT; - } - // Force dynamic storage buffers to be coherent (for working around driver bugs) - if(coherent_dynamic_storage && (flags & GL_DYNAMIC_STORAGE_BIT) != 0) { - flags |= (GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT); - } - es3_functions.glBufferStorageEXT(target, size, data, flags); -} - -void *glMapBufferRange( GLenum target, - GLintptr offset, - GLsizeiptr length, - GLbitfield access) { - if(never_flush_buffers) access &= ~GL_MAP_FLUSH_EXPLICIT_BIT; - return es3_functions.glMapBufferRange(target, offset, length, access); -} - -void glFlushMappedBufferRange( GLenum target, - GLintptr offset, - GLsizeiptr length) { - if(!never_flush_buffers) es3_functions.glFlushMappedBufferRange(target, offset, length); -} - -const GLubyte* glGetStringi(GLenum name, GLuint index) { - if(!current_context || name != GL_EXTENSIONS) return NULL; - if(index < current_context->nextensions_es) { - return es3_functions.glGetStringi(name, index); - }else { - int extra_index = index - current_context->nextensions_es; - if(extra_index >= current_context->nextras) return NULL; - return (const GLubyte*)current_context->extra_extensions_array[extra_index]; - } -} - -const GLubyte* glGetString(GLenum name) { - if(!current_context) return NULL; - switch(name) { - case GL_VERSION: - return (const GLubyte*)"3.0 OpenLTW"; - case GL_SHADING_LANGUAGE_VERSION: - return (const GLubyte*)"4.60 LTW"; - case GL_VENDOR: - return (const GLubyte*)"artDev, SerpentSpirale, CADIndie"; - case GL_EXTENSIONS: - if(current_context->extensions_string != NULL) return (const GLubyte*)current_context->extensions_string; - return (const GLubyte*)es3_functions.glGetString(GL_EXTENSIONS); - default: - return es3_functions.glGetString(name); - } -} - -static bool debug = false; - -void glEnable(GLenum cap) { - if(!current_context) return; - if(cap == GL_DEBUG_OUTPUT && !debug) return; - es3_functions.glEnable(cap); -} - -INTERNAL int get_buffer_index(GLenum buffer) { - switch (buffer) { - case GL_ARRAY_BUFFER: return 0; - case GL_COPY_READ_BUFFER: return 1; - case GL_COPY_WRITE_BUFFER: return 2; - case GL_PIXEL_PACK_BUFFER: return 3; - case GL_PIXEL_UNPACK_BUFFER: return 4; - case GL_TRANSFORM_FEEDBACK_BUFFER: return 5; - case GL_UNIFORM_BUFFER: return 6; - case GL_SHADER_STORAGE_BUFFER: return 7; - case GL_DRAW_INDIRECT_BUFFER: return 8; - default: return -1; - } -} - -INTERNAL int get_base_buffer_index(GLenum buffer) { - switch (buffer) { - case GL_ATOMIC_COUNTER_BUFFER: return 0; - case GL_SHADER_STORAGE_BUFFER: return 1; - case GL_TRANSFORM_FEEDBACK_BUFFER: return 2; - case GL_UNIFORM_BUFFER: return 3; - default: return -1; - } -} - -INTERNAL GLenum get_base_buffer_enum(int buffer_index) { - switch (buffer_index) { - case 0: return GL_ATOMIC_COUNTER_BUFFER; - case 1: return GL_SHADER_STORAGE_BUFFER; - case 2: return GL_TRANSFORM_FEEDBACK_BUFFER; - case 3: return GL_UNIFORM_BUFFER; - default: return -1; - } -} - -void glBindBuffer(GLenum buffer, GLuint name) { - if(!current_context) return; - es3_functions.glBindBuffer(buffer, name); - int buffer_index = get_buffer_index(buffer); - if(buffer_index == -1) return; - current_context->bound_buffers[buffer_index] = name; -} - -static basebuffer_binding_t* set_basebuffer(GLenum target, GLuint index, GLuint buffer) { - int buffer_mapindex = get_base_buffer_index(target); - if(buffer_mapindex == -1) return NULL; - if(!buffer) { - basebuffer_binding_t *old_binding = unordered_map_remove(current_context->bound_basebuffers[buffer_mapindex], (void*)index); - free(old_binding); - return NULL; - }else { - basebuffer_binding_t *binding = unordered_map_get(current_context->bound_basebuffers[buffer_mapindex], (void*)index); - if(binding == NULL) { - binding = calloc(1, sizeof(basebuffer_binding_t)); - unordered_map_put(current_context->bound_basebuffers[buffer_mapindex], (void*)index, binding); - } - binding->index = index; - binding->buffer = buffer; - return binding; - } -} - -void glBindBufferBase(GLenum target, GLuint index, GLuint buffer) { - if(!current_context) return; - es3_functions.glBindBufferBase(target, index, buffer); - basebuffer_binding_t * binding = set_basebuffer(target, index, buffer); - if(!binding) return; - binding->ranged = false; -} - -void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) { - if(!current_context) return; - es3_functions.glBindBufferRange(target, index, buffer, offset, size); - basebuffer_binding_t * binding = set_basebuffer(target, index, buffer); - if(!binding) return; - binding->ranged = true; - binding->size = size; - binding->offset = offset; -} - -void glUseProgram(GLuint program) { - if(!current_context) return; - es3_functions.glUseProgram(program); - current_context->program = program; -} - -void glGetIntegerv(GLenum pname, GLint* data) { - if(!current_context) return; - switch (pname) { - case GL_NUM_EXTENSIONS: - es3_functions.glGetIntegerv(pname, data); - (*data) += current_context->nextras; - break; - case GL_MAX_COLOR_ATTACHMENTS: - *data = MAX_FBTARGETS; - return; - case GL_MAX_DRAW_BUFFERS: - *data = current_context->max_drawbuffers; - break; - default: - es3_functions.glGetIntegerv(pname, data); - } -} - -void glGetQueryObjectiv( GLuint id, - GLenum pname, - GLint * params) { - if(!current_context) return; - // This is not recommended but i don't care - es3_functions.glGetQueryObjectuiv(id, pname, (GLuint*)params); -} - -void glDepthRange(GLdouble nearVal, - GLdouble farVal) { - if(!current_context) return; - es3_functions.glDepthRangef((GLfloat)nearVal, (GLfloat)farVal); -} - -void glDeleteTextures(GLsizei n, const GLuint *textures) { - if(!current_context) return; - es3_functions.glDeleteTextures(n, textures); - for(int i = 0; i < n; i++) { - void* tracker = unordered_map_remove(current_context->texture_swztrack_map, (void*)textures[i]); - free(tracker); - } -} - -static bool buf_tex_trigger = false; - -void glTexBuffer(GLenum target, GLenum internalFormat, GLuint buffer) { - if(!current_context) return; - if(current_context->es32) es3_functions.glTexBuffer(target, internalFormat, buffer); - else if(current_context->buffer_texture_ext) es3_functions.glTexBufferEXT(target, internalFormat, buffer); - else if(!buf_tex_trigger) { - buf_tex_trigger = true; - printf("LTW: Buffer textures aren't supported on your device\n"); - } -} - -void glTexBufferARB(GLenum target, GLenum internalFormat, GLuint buffer) { - glTexBuffer(target, internalFormat, buffer); -} - -void glTexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer, GLintptr offset, GLsizeiptr size) { - if(!current_context) return; - if(current_context->es32) es3_functions.glTexBufferRange(target, internalFormat, buffer, offset, size); - else if(current_context->buffer_texture_ext) es3_functions.glTexBufferRangeEXT(target, internalFormat, buffer, offset, size); - else if(!buf_tex_trigger) { - buf_tex_trigger = true; - printf("LTW: Buffer textures aren't supported on your device\n"); - } -} - -void glTexBufferRangeARB(GLenum target, GLenum internalFormat, GLuint buffer, GLintptr offset, GLsizeiptr size) { - glTexBufferRange(target, internalFormat, buffer, offset, size); -} - -static bool noerror; - -__attribute((constructor)) void init_noerror() { - noerror = env_istrue("LIBGL_NOERROR"); - debug = env_istrue("LTW_DEBUG"); - never_flush_buffers = env_istrue_d("LTW_NEVER_FLUSH_BUFFERS", true); - coherent_dynamic_storage = env_istrue_d("LTW_COHERENT_DYNAMIC_STORAGE", true); - if(!noerror) printf("LTW will NOT ignore GL errors. This may break mods, consider yourself warned.\n"); - if(coherent_dynamic_storage) printf("LTW will force dynamic storage buffers to be coherent.\n"); - if(debug) printf("LTW will allow GL_DEBUG_OUTPUT to be enabled. Expect massive logs.\n"); - if(never_flush_buffers) printf("LTW will prevent all explicit buffer flushes.\n"); -} - -GLenum glGetError() { - if(noerror) return 0; - else return es3_functions.glGetError(); -} - -void glDebugMessageControl( GLenum source, - GLenum type, - GLenum severity, - GLsizei count, - const GLuint *ids, - GLboolean enabled) { - //STUB -} diff --git a/ltw/src/main/tinywrapper/main.h b/ltw/src/main/tinywrapper/main.h deleted file mode 100644 index 45300dd..0000000 --- a/ltw/src/main/tinywrapper/main.h +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef POJAVLAUNCHER_MAIN_H -#define POJAVLAUNCHER_MAIN_H - -int get_buffer_index(GLenum buffer); -int get_base_buffer_index(GLenum buffer); -GLenum get_base_buffer_enum(int buffer_index); - -#endif //POJAVLAUNCHER_MAIN_H diff --git a/ltw/src/main/tinywrapper/multidraw.c b/ltw/src/main/tinywrapper/multidraw.c deleted file mode 100644 index b3a33ae..0000000 --- a/ltw/src/main/tinywrapper/multidraw.c +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#include -#include -#include "basevertex.h" -void glMultiDrawArrays( GLenum mode, GLint *first, GLsizei *count, GLsizei primcount ) -{ - // We'd need to merge each buffer attached to the VBO to properly achieve this. Nuh-uh. Aint no way im doin allat - if(!current_context) return; - for (int i = 0; i < primcount; i++) { - if (count[i] > 0) - es3_functions.glDrawArrays(mode, first[i], count[i]); - } -} - -void glMultiDrawElements( GLenum mode, GLsizei *count, GLenum type, const void * const *indices, GLsizei primcount ) -{ - if(!current_context) return; - GLint elementbuffer; - es3_functions.glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &elementbuffer); - es3_functions.glBindBuffer(GL_COPY_WRITE_BUFFER, current_context->multidraw_element_buffer); - GLsizei total = 0, offset = 0, typebytes = type_bytes(type); - for (GLsizei i = 0; i < primcount; i++) { - total += count[i]; - } - es3_functions.glBufferData(GL_COPY_WRITE_BUFFER, total*typebytes, NULL, GL_STREAM_DRAW); - for (GLsizei i = 0; i < primcount; i++) { - GLsizei icount = count[i]; - if(icount == 0) continue; - icount *= typebytes; - if(elementbuffer != 0) { - es3_functions.glCopyBufferSubData(GL_ELEMENT_ARRAY_BUFFER, GL_COPY_WRITE_BUFFER, (GLintptr)indices[i], offset, icount); - }else { - es3_functions.glBufferSubData(GL_COPY_WRITE_BUFFER, offset, icount, indices[i]); - } - offset += icount; - } - es3_functions.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, current_context->multidraw_element_buffer); - es3_functions.glDrawElements(mode, total, type, 0); - if(elementbuffer != 0) es3_functions.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementbuffer); - -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/of_buffer_copier.c b/ltw/src/main/tinywrapper/of_buffer_copier.c deleted file mode 100644 index 2eaae00..0000000 --- a/ltw/src/main/tinywrapper/of_buffer_copier.c +++ /dev/null @@ -1,173 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ -#include "proc.h" -#include "egl.h" -#include -#include "swizzle.h" -void buffer_copier_init(context_t* context) { - framebuffer_copier_t* copier = &context->framebuffer_copier; - while(es3_functions.glGetError() != 0) {} - es3_functions.glGenTextures(1, &copier->temp_texture); - es3_functions.glGenFramebuffers(1, &copier->tempfb); - es3_functions.glGenFramebuffers(1, &copier->destfb); - es3_functions.glBindTexture(GL_TEXTURE_2D, copier->temp_texture); - es3_functions.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - es3_functions.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - es3_functions.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - es3_functions.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - GLenum error = es3_functions.glGetError(); - if(error != 0) { - printf("LTW: error while initializing buffer-copier: %x\n", error); - return; - } - copier->ready = true; -} - -static void buffer_copier_store(GLint x, GLint y, GLsizei w, GLsizei h) { - framebuffer_copier_t* copier = ¤t_context->framebuffer_copier; - if(!copier->ready) return; - GLint current_texbind; - es3_functions.glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texbind); - es3_functions.glBindTexture(GL_TEXTURE_2D, copier->temp_texture); - es3_functions.glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, w, h, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); - es3_functions.glBindTexture(GL_TEXTURE_2D, current_texbind); - es3_functions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, copier->tempfb); - es3_functions.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, copier->temp_texture, 0); - es3_functions.glBlitFramebuffer(x, y, x+w, y+h, 0, 0, w, h, GL_DEPTH_BUFFER_BIT, GL_NEAREST); - es3_functions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current_context->draw_framebuffer); -} - -static void buffer_copier_release(GLenum target, GLint level, GLint x, GLint y, GLsizei w, GLsizei h) { - framebuffer_copier_t* copier = ¤t_context->framebuffer_copier; - if(!copier->ready) return; - GLint current_texbind; - GLenum target_query = get_textarget_query_param(target); - if(target_query == GL_NONE) return; - es3_functions.glGetIntegerv(target_query, ¤t_texbind); - es3_functions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, copier->destfb); - es3_functions.glBindFramebuffer(GL_READ_FRAMEBUFFER, copier->tempfb); - es3_functions.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, target, current_texbind, level); - es3_functions.glBlitFramebuffer(0, 0, w, h, x, y, x+w, y+h, GL_DEPTH_BUFFER_BIT, GL_NEAREST); - es3_functions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current_context->draw_framebuffer); - es3_functions.glBindFramebuffer(GL_READ_FRAMEBUFFER, current_context->read_framebuffer); -} - -void glGetTexImage( GLenum target, - GLint level, - GLenum format, - GLenum type, - void * pixels) { - if(!current_context) return; - if(!current_context->es31) goto unsupported_esver; - if(format != GL_RGBA && format != GL_RGBA_INTEGER && type != GL_UNSIGNED_BYTE && type != GL_UNSIGNED_INT && type != GL_INT && type != GL_FLOAT) goto unsupported; - framebuffer_copier_t* copier = ¤t_context->framebuffer_copier; - GLint texture; - es3_functions.glGetIntegerv(get_textarget_query_param(target), &texture); - es3_functions.glBindFramebuffer(GL_READ_FRAMEBUFFER, copier->tempfb); - es3_functions.glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target, texture, level); - GLint w, h; - es3_functions.glGetTexLevelParameteriv(target, level, GL_TEXTURE_WIDTH, &w); - es3_functions.glGetTexLevelParameteriv(target, level, GL_TEXTURE_HEIGHT, &h); - es3_functions.glReadPixels(0, 0, w, h, format, type, pixels); - es3_functions.glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0); - return; - unsupported_esver: - printf("LTW: glGetTexImage only supported on OpenGL ES 3.1"); - return; - unsupported: - printf("LTW: unsupported parameters for glGetTexImage"); -} - -void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data) { - if(!current_context) return; - if(format == GL_DEPTH_COMPONENT) { - framebuffer_copier_t* copier = ¤t_context->framebuffer_copier; - copier->depthData = data; - copier->depthWidth = width; - copier->depthHeight = height; - buffer_copier_store(x, y, width, height); - return; - } - es3_functions.glReadPixels(x, y, width, height, format, type, data); -} - -void glTexSubImage2D(GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLsizei width, - GLsizei height, - GLenum format, - GLenum type, - const void * data) { - if(!current_context) return; - swizzle_process_upload(target, &format, &type); - if(format == GL_DEPTH_COMPONENT) { - framebuffer_copier_t* copier = ¤t_context->framebuffer_copier; - if(width == copier->depthWidth && height == copier->depthHeight && copier->depthData == data) { - buffer_copier_release(target, level, xoffset, yoffset, width, height); - return; - } - } - es3_functions.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data); -} - -void texture_blit_framebuffer(GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint x, - GLint y, - GLsizei width, - GLsizei height, - bool depth) { - framebuffer_copier_t* copier = ¤t_context->framebuffer_copier; - if(!copier->ready) return; - - GLenum fb_attachment; - GLbitfield fb_blit_bit; - if(depth) { - fb_attachment = GL_DEPTH_ATTACHMENT; - fb_blit_bit = GL_DEPTH_BUFFER_BIT; - }else { - fb_attachment = GL_COLOR_ATTACHMENT0; - fb_blit_bit = GL_COLOR_BUFFER_BIT; - } - - GLint texture; - es3_functions.glGetIntegerv(get_textarget_query_param(target), &texture); - es3_functions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, copier->destfb); - es3_functions.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, fb_attachment, target, texture, level); - es3_functions.glBlitFramebuffer(x, y, width+x, height+y, xoffset, yoffset, width+xoffset, height+yoffset, fb_blit_bit, GL_NEAREST); - es3_functions.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current_context->draw_framebuffer); -} - -void glCopyTexSubImage2D(GLenum target, - GLint level, - GLint xoffset, - GLint yoffset, - GLint x, - GLint y, - GLsizei width, - GLsizei height) { - if(current_context->es31) { - GLint depthtype; - es3_functions.glGetTexLevelParameteriv(target, level, GL_TEXTURE_DEPTH_TYPE, &depthtype); - if(depthtype != GL_NONE) { - texture_blit_framebuffer(target, level, xoffset, yoffset, x, y, width, height, true); - }else { - texture_blit_framebuffer(target, level, xoffset, yoffset, x, y, width, height, false); - } - } else { - es3_functions.glGetError(); - es3_functions.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); - // The QCOM driver is a pathological liar and emits wrong GL errors. Abuse this to decide when we actually need to at least try copying depth. - if(es3_functions.glGetError() == GL_INVALID_OPERATION) { - texture_blit_framebuffer(target, level, xoffset, yoffset, x, y, width, height, true); - } - } - -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/proc.c b/ltw/src/main/tinywrapper/proc.c deleted file mode 100644 index f3a65b3..0000000 --- a/ltw/src/main/tinywrapper/proc.c +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ -#include -#include -#include -#include -#include -#include -#include "proc.h" -#include "egl.h" -#include "libraryinternal.h" -#define GL_GLEXT_PROTOTYPES -#include "GL/gl.h" -#include "GL/glext.h" - -INTERNAL eglMustCastToProperFunctionPointerType (*host_eglGetProcAddress)(const char *procname); -INTERNAL es3_functions_t es3_functions; - -static void error_sysegl() { - __android_log_print(ANDROID_LOG_ERROR, "LTWInit", "Failed to load system EGL: %s", dlerror()); - abort(); -} - -static void error_init(const char* functionName) { - __android_log_print(ANDROID_LOG_ERROR, "LTWInit", "Failed to load function \"%s\"", functionName); - abort(); -} - -static void init_es3_proc() { -#define GLESFUNC(name, type) es3_functions.name = (type)host_eglGetProcAddress(#name); if(es3_functions.name == NULL) error_init(#name); -#include "es3_functions.h" -#undef GLESFUNC -#define GLESFUNC(name, type) es3_functions.name = (type)host_eglGetProcAddress(#name); -#include "es3_extended.h" -#undef GLESFUNC -} - -__attribute__((constructor, used)) void proc_init(){ - void* eglHandle = dlopen("libEGL.so", RTLD_LAZY | RTLD_LOCAL); - if(eglHandle == NULL) error_sysegl(); - host_eglGetProcAddress = dlsym(eglHandle, "eglGetProcAddress"); - if(host_eglGetProcAddress == NULL) error_sysegl(); - init_egl(); - init_es3_proc(); -} - -// This is exported for it to be automatically picked up by LWJGL's symbol resolver. -__attribute__((used)) eglMustCastToProperFunctionPointerType glXGetProcAddress(const char *procname) { - return eglGetProcAddress(procname); -} - -static eglMustCastToProperFunctionPointerType resolve_stub(const char* procname) { - size_t procnamelen = strlen(procname); - size_t stublen = procnamelen + 6; - char stub_procname[stublen]; - memcpy(stub_procname, "stub_", 5); - memcpy(stub_procname + 5, procname, procnamelen); - stub_procname[stublen] = 0; - return dlsym(NULL, stub_procname); -} - -eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) { - // EGL functions that we implement. - // All of the other platform EGL functions will be redirected into Android's default EGL implementation. - if(!strncmp(procname, "egl", 3)) { - if(!strcmp("eglCreateContext", procname)) return (eglMustCastToProperFunctionPointerType) eglCreateContext; - if(!strcmp("eglDestroyContext", procname)) return (eglMustCastToProperFunctionPointerType) eglDestroyContext; - if(!strcmp("eglMakeCurrent", procname)) return (eglMustCastToProperFunctionPointerType) eglMakeCurrent; - } - // If the function doesn't start with "gl", don't even bother, pass through immediately. - if(strncmp(procname, "gl", 2) != 0) goto fallback; -#define GLESOVERRIDE(name) \ - if(!strcmp(procname, #name)) { \ - printf("LTW: Overridden %s\n", #name); \ - return (eglMustCastToProperFunctionPointerType) name; \ - } -#include "es3_overrides.h" -#undef GLESOVERRIDE - eglMustCastToProperFunctionPointerType function; -fallback: - function = host_eglGetProcAddress(procname); - if(function == NULL) function = resolve_stub(procname); - return function; -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/proc.h b/ltw/src/main/tinywrapper/proc.h deleted file mode 100644 index 15099cb..0000000 --- a/ltw/src/main/tinywrapper/proc.h +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef POJAVLAUNCHER_PROC_H -#define POJAVLAUNCHER_PROC_H - -#include -#include -#include - -typedef void (*eglMustCastToProperFunctionPointerType)(void); - -typedef struct { -#define GLESFUNC(name, type) type name; -#include "es3_functions.h" -#include "es3_extended.h" -#undef GLESFUNC -} es3_functions_t; - -extern eglMustCastToProperFunctionPointerType (*host_eglGetProcAddress)(const char *procname); -extern es3_functions_t es3_functions; - -#endif //POJAVLAUNCHER_PROC_H diff --git a/ltw/src/main/tinywrapper/shader_wrapper.c b/ltw/src/main/tinywrapper/shader_wrapper.c deleted file mode 100644 index 3c1bd48..0000000 --- a/ltw/src/main/tinywrapper/shader_wrapper.c +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#include "unordered_map/unordered_map.h" -#include "vgpu_shaderconv/shaderconv.h" -#include "glsl_optimizer/src/code/c_wrapper.h" -#include -#include -#include "string_utils.h" -#include "egl.h" -#include "proc.h" - -typedef struct { - GLenum shader_type; - const GLchar* source; -} shader_info_t; - -typedef struct { - GLuint frag_shader; - GLchar* colorbindings[MAX_DRAWBUFFERS]; -} program_info_t; - -GLuint glCreateProgram(void) { - if(!current_context) return 0; - GLuint phys_program = es3_functions.glCreateProgram(); - if(phys_program == 0) return phys_program; - program_info_t *prog_info = calloc(1, sizeof(program_info_t)); - if(prog_info == NULL) { - printf("LTWShdrWp: failed to allocate program_info\n"); - abort(); - } - unordered_map_put(current_context->program_map, (void*)phys_program, prog_info); - return phys_program; -} - -void glDeleteProgram(GLuint program) { - if(!current_context) return; - es3_functions.glDeleteProgram(program); - program_info_t *old_programinfo = unordered_map_remove(current_context->program_map, (void*)program); - if(old_programinfo == NULL) return; - for(GLuint i = 0; i < MAX_DRAWBUFFERS; i++) { - const GLchar* binding = old_programinfo->colorbindings[i]; - if(binding != NULL) free((void*)binding); - } - free(old_programinfo); -} - -void glAttachShader( GLuint program, - GLuint shader) { - if(!current_context) return; - es3_functions.glAttachShader(program, shader); - program_info_t* program_info = unordered_map_get(current_context->program_map, (void*)program); - shader_info_t* shader_info = unordered_map_get(current_context->shader_map, (void*)shader); - if(program_info == NULL || shader_info == NULL || shader_info->shader_type != GL_FRAGMENT_SHADER) return; - program_info->frag_shader = shader; -} - -void glBindFragDataLocation( GLuint program, - GLuint colorNumber, - const char * name) { - if(!current_context) return; - program_info_t *program_info = unordered_map_get(current_context->program_map, (void*)program); - if(program_info == NULL || colorNumber >= MAX_DRAWBUFFERS) return; - // Insert binding name at the specific index - GLchar** pname = &program_info->colorbindings[colorNumber]; - if(asprintf(pname, "%s", name) == -1) { - *pname = NULL; - } -} - -void glGetShaderiv(GLuint shader, GLuint pname, GLint* params) { - if(!current_context) return; - shader_info_t* shader_info = unordered_map_get(current_context->shader_map, (void*)shader); - if(shader_info != NULL && shader_info->shader_type == GL_FRAGMENT_SHADER && pname == GL_COMPILE_STATUS) { - // HACK: ignore compile results for frag shaders, as some drivers may not compile them without explicit fragouts - // (which we add at link-time) - *params = GL_TRUE; - return; - } - es3_functions.glGetShaderiv(shader, pname, params); -} - -static void insert_fragout_pos(char* source, int* size, const char* name, GLuint pos) { - char src_string[256] = { 0 }; - char dst_string[256] = { 0 }; - snprintf(src_string, sizeof(src_string), "/* LTW INSERT LOCATION %s LTW */", name); - snprintf(dst_string, sizeof(dst_string), "layout(location = %u) ", pos); - gl4es_inplace_replace_simple(source, size, src_string, dst_string); -} - -void glLinkProgram(GLuint program) { - if(!current_context) return; - program_info_t* program_info = unordered_map_get(current_context->program_map, (void*)program); - if(program_info == NULL || program_info->frag_shader == 0) { - // Don't have any fragment shader to patch the locations in, fall through. - goto fallthrough; - } - shader_info_t *shader = unordered_map_get(current_context->shader_map, (void*)program_info->frag_shader); - if(shader == NULL) { - printf("LTWShdrWp: failed to patch frag data location due to missing shader info\n"); - goto fallthrough; - } - int nsrc_size = (int)(strlen(shader->source) + 1); - char* new_source = malloc(nsrc_size); - memcpy(new_source, shader->source, nsrc_size); - bool changesMade = false; - for(GLuint i = 0; i < MAX_DRAWBUFFERS; i++) { - const char* colorbind = program_info->colorbindings[i]; - if(colorbind == NULL) continue; - insert_fragout_pos(new_source, &nsrc_size, colorbind, i); - changesMade = true; - } - if(!changesMade) { - free(new_source); - goto fallthrough; - }else { - //printf("\n\n\nShader Result POST PATCH\n%s\n\n\n", new_source); - } - const GLchar* const_source = (const GLchar*)new_source; - GLuint patched_shader = es3_functions.glCreateShader(GL_FRAGMENT_SHADER); - if(patched_shader == 0) { - free(new_source); - printf("LTWShdrWp: failed to initialize patched shader\n"); - goto fallthrough; - } - es3_functions.glShaderSource(patched_shader, 1, &const_source, NULL); - es3_functions.glCompileShader(patched_shader); - free(new_source); - GLint compileStatus; - es3_functions.glGetShaderiv(patched_shader, GL_COMPILE_STATUS, &compileStatus); - if(compileStatus != GL_TRUE) { - GLint logSize; - es3_functions.glGetShaderiv(patched_shader, GL_INFO_LOG_LENGTH, &logSize); - GLchar log[logSize]; - es3_functions.glGetShaderInfoLog(patched_shader, logSize, NULL, log); - printf("LTWShdrWp: failed to compile patched fragment shader, using default. Log:\n\n%s\n\nShader content:\n\n%s\n\n", log, const_source); - goto fallthrough; - } - es3_functions.glDetachShader(program, program_info->frag_shader); - es3_functions.glAttachShader(program, patched_shader); - es3_functions.glLinkProgram(program); - es3_functions.glDeleteShader(patched_shader); - return; - fallthrough: - es3_functions.glLinkProgram(program); -} - -GLuint glCreateShader(GLenum shaderType) { - if(!current_context) return 0; - GLuint phys_shader = es3_functions.glCreateShader(shaderType); - if(phys_shader == 0) return 0; - shader_info_t* info_struct = calloc(1, sizeof(shader_info_t)); - if(info_struct == NULL) { - printf("LTWShdrWp: failed to allocate shader_info\n"); - abort(); - } - info_struct->shader_type = shaderType; - unordered_map_put(current_context->shader_map, (void*)phys_shader, info_struct); - return phys_shader; -} - -void glDeleteShader(GLuint shader) { - if(!current_context) return; - es3_functions.glDeleteShader(shader); - shader_info_t * old_shaderinfo = unordered_map_remove(current_context->shader_map, (void*)shader); - if(old_shaderinfo == NULL) return; - if(old_shaderinfo->source != NULL) free((void*)old_shaderinfo->source); - free(old_shaderinfo); -} - -void glShaderSource(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length) { - if(!current_context) return; - shader_info_t* shader_info = unordered_map_get(current_context->shader_map, (void*)shader); - if(shader_info == NULL) { - printf("LTWShdrWp: shader_info missing for shader %u\n", shader); - es3_functions.glShaderSource(shader, count, string, length); - return; - } - - size_t target_length = 0; -#define SRC_LEN(x) length != NULL ? length[x] : strlen(string[x]) - for(GLsizei i = 0; i < count; i++) target_length += SRC_LEN(i); - GLchar* target_string = malloc((target_length + 1) * sizeof(GLchar)); - size_t offset = 0; - for(GLsizei i = 0; i < count; i++) { - memcpy(&target_string[offset], string[i], SRC_LEN(i)); - } - target_string[target_length] = 0; - -#undef SRC_LEN - GLchar* new_source = optimize_shader(target_string, shader_info->shader_type, 460, current_context->shader_version); - //printf("\n\n\nShader Result\n%s\n\n\n", new_source); - if(shader_info->source != NULL) free((void*)shader_info->source); - shader_info->source = new_source; - es3_functions.glShaderSource(shader, 1, &shader_info->source, 0); - free(target_string); -} diff --git a/ltw/src/main/tinywrapper/string_utils.c b/ltw/src/main/tinywrapper/string_utils.c deleted file mode 100644 index df964ed..0000000 --- a/ltw/src/main/tinywrapper/string_utils.c +++ /dev/null @@ -1,305 +0,0 @@ -#include -#include -#include - -#include "string_utils.h" - -#pragma GCC visibility push(hidden) - -const char* AllSeparators = " \t\n\r.,;()[]{}-<>+*/%&\\\"'^$=!:?"; - -char* gl4es_resize_if_needed(char* pBuffer, int *size, int addsize); - -char* gl4es_inplace_replace(char* pBuffer, int* size, const char* S, const char* D) -{ - int lS = strlen(S), lD = strlen(D); - pBuffer = gl4es_resize_if_needed(pBuffer, size, (lD-lS)*gl4es_count_string(pBuffer, S)); - char* p = pBuffer; - while((p = strstr(p, S))) - { - // found an occurrence of S - // check if good to replace, strchr also found '\0' :) - if(strchr(AllSeparators, p[lS])!=NULL && (p==pBuffer || strchr(AllSeparators, p[-1])!=NULL)) { - // move out rest of string - memmove(p+lD, p+lS, strlen(p)-lS+1); - // replace - memcpy(p, D, strlen(D)); - // next - p+=lD; - } else p+=lS; - } - - return pBuffer; -} - - -char * InplaceReplaceByIndex(char* pBuffer, int* size, const int startIndex, const int endIndex, const char* replacement) -{ - //SHUT_LOGD("BY INDEX: %s", replacement); - //SHUT_LOGD("BY INDEX: %i", strlen(replacement)); - - int length_difference; - if(endIndex < startIndex) - length_difference = strlen(replacement) + (endIndex - startIndex); - else if(endIndex == startIndex) - length_difference = strlen(replacement) - 1; // The initial char gets replaced - else - length_difference = strlen(replacement) - (endIndex - startIndex); // Can be negative if repl is smaller - - pBuffer = gl4es_resize_if_needed(pBuffer, size, length_difference); - //SHUT_LOGD("BEFORE MOVING: \n%s", pBuffer); - // Move the end of the string - memmove(pBuffer + startIndex + strlen(replacement) , pBuffer + endIndex + 1, strlen(pBuffer) - endIndex + 1); - //SHUT_LOGD("AFTER MOVING 1: \n%s", pBuffer); - - // Insert the replacement - memcpy(pBuffer + startIndex, replacement, strlen(replacement)); - //strncpy(pBuffer + startIndex, replacement, strlen(replacement)); - //SHUT_LOGD("AFTER MOVING 2: \n%s", pBuffer); - - return pBuffer; -} - -/** - * Insert the string at the index, pushing "every chars to the right" - * @param source The shader as a string - * @param sourceLength The ALLOCATED length of the shader - * @param insertPoint The index at which the string is inserted. - * @param insertedString The string to insert - * @return The shader as a string, maybe in a different memory location - */ -char * InplaceInsertByIndex(char * source, int *sourceLength, const int insertPoint, const char *insertedString){ - int insertLength = strlen(insertedString); - source = gl4es_resize_if_needed(source, sourceLength, insertLength); - memmove(source + insertPoint + insertLength, source + insertPoint, strlen(source) - insertPoint + 1); - memcpy(source + insertPoint, insertedString, insertLength); - - return source; -} - -char* gl4es_inplace_insert(char* pBuffer, const char* S, char* master, int* size) -{ - char* m = gl4es_resize_if_needed(master, size, strlen(S)); - if(m!=master) { - pBuffer += (m-master); - master = m; - } - char* p = pBuffer; - int lS = strlen(S), ll = strlen(pBuffer); - memmove(p+lS, p, ll+1); - memcpy(p, S, lS); - - return master; -} - -char* gl4es_getline(char* pBuffer, int num) -{ - char *p = pBuffer; - while(num-- && (p=strstr(p, "\n"))) p+=strlen("\n"); - return (p)?p:pBuffer; -} - -int gl4es_countline(const char* pBuffer) -{ - int n=0; - const char* p = pBuffer; - while((p=strstr(p, "\n"))) { - p+=strlen("\n"); - n++; - } - return n; -} - -int gl4es_getline_for(const char* pBuffer, const char* S) -{ - int n=0; - const char* p = pBuffer; - const char* end = gl4es_find_string(pBuffer, S); - if(!end) - return 0; - while((p=strstr(p, "\n"))) { - p+=strlen("\n"); - n++; - if(p>=end) - return n; - } - return n; -} - -int gl4es_count_string(const char* pBuffer, const char* S) -{ - const char* p = pBuffer; - int lS = strlen(S); - int n = 0; - while((p = strstr(p, S))) - { - // found an occurrence of S - // check if good to count, strchr also found '\0' :) - if(strchr(AllSeparators, p[lS])!=NULL && (p==pBuffer || strchr(AllSeparators, p[-1])!=NULL)) - n++; - p+=lS; - } - return n; -} - -const char* gl4es_find_string(const char* pBuffer, const char* S) -{ - const char* p = pBuffer; - int lS = strlen(S); - while((p = strstr(p, S))) - { - // found an occurrence of S - // check if good to count, strchr also found '\0' :) - if(strchr(AllSeparators, p[lS])!=NULL && (p==pBuffer || strchr(AllSeparators, p[-1])!=NULL)) - return p; - p+=lS; - } - return NULL; -} - -char* gl4es_find_string_nc(char* pBuffer, const char* S) -{ - char* p = pBuffer; - int lS = strlen(S); - while((p = strstr(p, S))) - { - // found an occurrence of S - // check if good to count, strchr also found '\0' :) - if(strchr(AllSeparators, p[lS])!=NULL && (p==pBuffer || strchr(AllSeparators, p[-1])!=NULL)) - return p; - p+=lS; - } - return NULL; -} - -char* gl4es_resize_if_needed(char* pBuffer, int *size, int addsize) { - char* p = pBuffer; - int newsize = strlen(pBuffer)+addsize+1; - if (newsize>*size) { - //newsize += 100; - p = (char*)realloc(pBuffer, newsize); - *size=newsize; - } - return p; -} - -char* gl4es_append(char* pBuffer, int* size, const char* S) { - char* p =pBuffer; - p = gl4es_resize_if_needed(pBuffer, size, strlen(S)); - strcat(p, S); - return p; -} - -static int gl4es_is_blank(char c) { - switch(c) { - case ' ': - case '\t': - case '\n': - case '\r': - case ':': - case ',': - case ';': - case '/': - return 1; - default: - return 0; - } -} - -int isDigit(char value){ - return (value >= '0' && value <= '9'); -} - -int isValidFunctionName(char value){ - return ((value >= 'a' && value <= 'z') || (value >= 'A' && value <= 'Z') || (value == '_')); -} - -char* gl4es_str_next(char *pBuffer, const char* S) { - if(!pBuffer) return NULL; - char *p = strstr(pBuffer, S); - return (p)?p:(p+strlen(S)); -} - -char* gl4es_next_str(char* pBuffer) { - if(!pBuffer) return NULL; - while(gl4es_is_blank(*pBuffer)) - ++pBuffer; - return pBuffer; -} - -char* gl4es_prev_str(char* Str, char* pBuffer) { - if(!pBuffer) return NULL; - if(pBuffer == Str) - return Str; - // go to previous non blank - do { - --pBuffer; - } while(gl4es_is_blank(*pBuffer) && (pBuffer!=Str)); - // go to blank - while((pBuffer!=Str) && !gl4es_is_blank(*(pBuffer-1))) - --pBuffer; - return pBuffer; -} - -char* gl4es_next_blank(char* pBuffer) { - if(!pBuffer) return NULL; - while(!gl4es_is_blank(*pBuffer)) - ++pBuffer; - return pBuffer; -} - -char* gl4es_next_line(char* pBuffer) { - if(!pBuffer) return NULL; - while(*pBuffer && *pBuffer!='\n') - ++pBuffer; - return pBuffer; -} - -const char* gl4es_get_next_str(char* pBuffer) { - static char buff[100] = {0}; - buff[0] = '\0'; - if(!pBuffer) return NULL; - char* p1 = gl4es_next_str(pBuffer); - if(!p1) return buff; - char* p2 = gl4es_next_blank(p1); - if(!p2) return buff; - int i=0; - while(p1!=p2 && i<99) - buff[i++] = *(p1++); - buff[i] = '\0'; - return buff; -} - -int gl4es_countstring_simple(char* pBuffer, const char* S) -{ - char* p = pBuffer; - int lS = strlen(S); - int n = 0; - while((p = strstr(p, S))) - { - // found an occurrence of S - n++; - p+=lS; - } - return n; -} - -char* gl4es_inplace_replace_simple(char* pBuffer, int* size, const char* S, const char* D) -{ - int lS = strlen(S), lD = strlen(D); - pBuffer = gl4es_resize_if_needed(pBuffer, size, (lD-lS)*gl4es_countstring_simple(pBuffer, S)); - char* p = pBuffer; - while((p = strstr(p, S))) - { - // found an occurrence of S - // move out rest of string - memmove(p+lD, p+lS, strlen(p)-lS+1); - // replace - memcpy(p, D, strlen(D)); - // next - p+=lD; - } - - return pBuffer; -} -#pragma GCC visibility pop(hidden) \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/string_utils.h b/ltw/src/main/tinywrapper/string_utils.h deleted file mode 100644 index 59f0aa3..0000000 --- a/ltw/src/main/tinywrapper/string_utils.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef _GL4ES_STRING_UTILS_H_ -#define _GL4ES_STRING_UTILS_H_ - -extern const char* AllSeparators; - -int isDigit(char value); -int isValidFunctionName(char value); - - -char * InplaceReplaceByIndex(char* pBuffer, int* size, int startIndex, int endIndex, const char* replacement); -char * InplaceInsertByIndex(char * source, int *sourceLength, int insertPoint, const char *insertedString); - -const char* gl4es_find_string(const char* pBuffer, const char* S); -char* gl4es_find_string_nc(char* pBuffer, const char* S); -int gl4es_count_string(const char* pBuffer, const char* S); -char* gl4es_resize_if_needed(char* pBuffer, int *size, int addsize); -char* gl4es_inplace_replace(char* pBuffer, int* size, const char* S, const char* D); -char* gl4es_append(char* pBuffer, int* size, const char* S); -char* gl4es_inplace_insert(char* pBuffer, const char* S, char* master, int* size); -char* gl4es_getline(char* pBuffer, int num); -int gl4es_countline(const char* pBuffer); -int gl4es_getline_for(const char* pBuffer, const char* S); // get the line number for 1st occurent of S in pBuffer -char* gl4es_str_next(char *pBuffer, const char* S); // mostly as strstr, but go after the substring if found - -//"blank" (space, tab, cr, lf,":", ",", ";", ".", "/") -char* gl4es_next_str(char* pBuffer); // go to next non "blank" -char* gl4es_prev_str(char* Str, char* pBuffer); // go to previous non "blank" -char* gl4es_next_blank(char* pBuffer); // go to next "blank" -char* gl4es_next_line(char* pBuffer); // go to next new line (crlf not included) - -const char* gl4es_get_next_str(char* pBuffer); // get a (static) copy of next str (until next separator), can be a simple number or separator also - -// those function don't try to be smart with separators... -int gl4es_countstring_simple(char* pBuffer, const char* S); -char* gl4es_inplace_replace_simple(char* pBuffer, int* size, const char* S, const char* D); - - -#endif // _GL4ES_STRING_UTILS_H_ diff --git a/ltw/src/main/tinywrapper/stubs.c b/ltw/src/main/tinywrapper/stubs.c deleted file mode 100644 index 0486b3b..0000000 --- a/ltw/src/main/tinywrapper/stubs.c +++ /dev/null @@ -1,7685 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -//run: -#include -#include -static bool trigger_glCullFace = false; -void stub_glCullFace() { - if(trigger_glCullFace) return; - trigger_glCullFace = true; - printf("Stub: glCullFace\n"); -} -static bool trigger_glFrontFace = false; -void stub_glFrontFace() { - if(trigger_glFrontFace) return; - trigger_glFrontFace = true; - printf("Stub: glFrontFace\n"); -} -static bool trigger_glHint = false; -void stub_glHint() { - if(trigger_glHint) return; - trigger_glHint = true; - printf("Stub: glHint\n"); -} -static bool trigger_glLineWidth = false; -void stub_glLineWidth() { - if(trigger_glLineWidth) return; - trigger_glLineWidth = true; - printf("Stub: glLineWidth\n"); -} -static bool trigger_glPointSize = false; -void stub_glPointSize() { - if(trigger_glPointSize) return; - trigger_glPointSize = true; - printf("Stub: glPointSize\n"); -} -static bool trigger_glPolygonMode = false; -void stub_glPolygonMode() { - if(trigger_glPolygonMode) return; - trigger_glPolygonMode = true; - printf("Stub: glPolygonMode\n"); -} -static bool trigger_glScissor = false; -void stub_glScissor() { - if(trigger_glScissor) return; - trigger_glScissor = true; - printf("Stub: glScissor\n"); -} -static bool trigger_glTexParameterf = false; -void stub_glTexParameterf() { - if(trigger_glTexParameterf) return; - trigger_glTexParameterf = true; - printf("Stub: glTexParameterf\n"); -} -static bool trigger_glTexParameterfv = false; -void stub_glTexParameterfv() { - if(trigger_glTexParameterfv) return; - trigger_glTexParameterfv = true; - printf("Stub: glTexParameterfv\n"); -} -static bool trigger_glTexParameteri = false; -void stub_glTexParameteri() { - if(trigger_glTexParameteri) return; - trigger_glTexParameteri = true; - printf("Stub: glTexParameteri\n"); -} -static bool trigger_glTexParameteriv = false; -void stub_glTexParameteriv() { - if(trigger_glTexParameteriv) return; - trigger_glTexParameteriv = true; - printf("Stub: glTexParameteriv\n"); -} -static bool trigger_glTexImage1D = false; -void stub_glTexImage1D() { - if(trigger_glTexImage1D) return; - trigger_glTexImage1D = true; - printf("Stub: glTexImage1D\n"); -} -static bool trigger_glTexImage2D = false; -void stub_glTexImage2D() { - if(trigger_glTexImage2D) return; - trigger_glTexImage2D = true; - printf("Stub: glTexImage2D\n"); -} -static bool trigger_glDrawBuffer = false; -void stub_glDrawBuffer() { - if(trigger_glDrawBuffer) return; - trigger_glDrawBuffer = true; - printf("Stub: glDrawBuffer\n"); -} -static bool trigger_glClear = false; -void stub_glClear() { - if(trigger_glClear) return; - trigger_glClear = true; - printf("Stub: glClear\n"); -} -static bool trigger_glClearColor = false; -void stub_glClearColor() { - if(trigger_glClearColor) return; - trigger_glClearColor = true; - printf("Stub: glClearColor\n"); -} -static bool trigger_glClearStencil = false; -void stub_glClearStencil() { - if(trigger_glClearStencil) return; - trigger_glClearStencil = true; - printf("Stub: glClearStencil\n"); -} -static bool trigger_glClearDepth = false; -void stub_glClearDepth() { - if(trigger_glClearDepth) return; - trigger_glClearDepth = true; - printf("Stub: glClearDepth\n"); -} -static bool trigger_glStencilMask = false; -void stub_glStencilMask() { - if(trigger_glStencilMask) return; - trigger_glStencilMask = true; - printf("Stub: glStencilMask\n"); -} -static bool trigger_glColorMask = false; -void stub_glColorMask() { - if(trigger_glColorMask) return; - trigger_glColorMask = true; - printf("Stub: glColorMask\n"); -} -static bool trigger_glDepthMask = false; -void stub_glDepthMask() { - if(trigger_glDepthMask) return; - trigger_glDepthMask = true; - printf("Stub: glDepthMask\n"); -} -static bool trigger_glDisable = false; -void stub_glDisable() { - if(trigger_glDisable) return; - trigger_glDisable = true; - printf("Stub: glDisable\n"); -} -static bool trigger_glEnable = false; -void stub_glEnable() { - if(trigger_glEnable) return; - trigger_glEnable = true; - printf("Stub: glEnable\n"); -} -static bool trigger_glFinish = false; -void stub_glFinish() { - if(trigger_glFinish) return; - trigger_glFinish = true; - printf("Stub: glFinish\n"); -} -static bool trigger_glFlush = false; -void stub_glFlush() { - if(trigger_glFlush) return; - trigger_glFlush = true; - printf("Stub: glFlush\n"); -} -static bool trigger_glBlendFunc = false; -void stub_glBlendFunc() { - if(trigger_glBlendFunc) return; - trigger_glBlendFunc = true; - printf("Stub: glBlendFunc\n"); -} -static bool trigger_glLogicOp = false; -void stub_glLogicOp() { - if(trigger_glLogicOp) return; - trigger_glLogicOp = true; - printf("Stub: glLogicOp\n"); -} -static bool trigger_glStencilFunc = false; -void stub_glStencilFunc() { - if(trigger_glStencilFunc) return; - trigger_glStencilFunc = true; - printf("Stub: glStencilFunc\n"); -} -static bool trigger_glStencilOp = false; -void stub_glStencilOp() { - if(trigger_glStencilOp) return; - trigger_glStencilOp = true; - printf("Stub: glStencilOp\n"); -} -static bool trigger_glDepthFunc = false; -void stub_glDepthFunc() { - if(trigger_glDepthFunc) return; - trigger_glDepthFunc = true; - printf("Stub: glDepthFunc\n"); -} -static bool trigger_glPixelStoref = false; -void stub_glPixelStoref() { - if(trigger_glPixelStoref) return; - trigger_glPixelStoref = true; - printf("Stub: glPixelStoref\n"); -} -static bool trigger_glPixelStorei = false; -void stub_glPixelStorei() { - if(trigger_glPixelStorei) return; - trigger_glPixelStorei = true; - printf("Stub: glPixelStorei\n"); -} -static bool trigger_glReadBuffer = false; -void stub_glReadBuffer() { - if(trigger_glReadBuffer) return; - trigger_glReadBuffer = true; - printf("Stub: glReadBuffer\n"); -} -static bool trigger_glReadPixels = false; -void stub_glReadPixels() { - if(trigger_glReadPixels) return; - trigger_glReadPixels = true; - printf("Stub: glReadPixels\n"); -} -static bool trigger_glGetBooleanv = false; -void stub_glGetBooleanv() { - if(trigger_glGetBooleanv) return; - trigger_glGetBooleanv = true; - printf("Stub: glGetBooleanv\n"); -} -static bool trigger_glGetDoublev = false; -void stub_glGetDoublev() { - if(trigger_glGetDoublev) return; - trigger_glGetDoublev = true; - printf("Stub: glGetDoublev\n"); -} -static bool trigger_glGetError = false; -void stub_glGetError() { - if(trigger_glGetError) return; - trigger_glGetError = true; - printf("Stub: glGetError\n"); -} -static bool trigger_glGetFloatv = false; -void stub_glGetFloatv() { - if(trigger_glGetFloatv) return; - trigger_glGetFloatv = true; - printf("Stub: glGetFloatv\n"); -} -static bool trigger_glGetIntegerv = false; -void stub_glGetIntegerv() { - if(trigger_glGetIntegerv) return; - trigger_glGetIntegerv = true; - printf("Stub: glGetIntegerv\n"); -} -static bool trigger_glGetString = false; -void stub_glGetString() { - if(trigger_glGetString) return; - trigger_glGetString = true; - printf("Stub: glGetString\n"); -} -static bool trigger_glGetTexImage = false; -void stub_glGetTexImage() { - if(trigger_glGetTexImage) return; - trigger_glGetTexImage = true; - printf("Stub: glGetTexImage\n"); -} -static bool trigger_glGetTexParameterfv = false; -void stub_glGetTexParameterfv() { - if(trigger_glGetTexParameterfv) return; - trigger_glGetTexParameterfv = true; - printf("Stub: glGetTexParameterfv\n"); -} -static bool trigger_glGetTexParameteriv = false; -void stub_glGetTexParameteriv() { - if(trigger_glGetTexParameteriv) return; - trigger_glGetTexParameteriv = true; - printf("Stub: glGetTexParameteriv\n"); -} -static bool trigger_glGetTexLevelParameterfv = false; -void stub_glGetTexLevelParameterfv() { - if(trigger_glGetTexLevelParameterfv) return; - trigger_glGetTexLevelParameterfv = true; - printf("Stub: glGetTexLevelParameterfv\n"); -} -static bool trigger_glGetTexLevelParameteriv = false; -void stub_glGetTexLevelParameteriv() { - if(trigger_glGetTexLevelParameteriv) return; - trigger_glGetTexLevelParameteriv = true; - printf("Stub: glGetTexLevelParameteriv\n"); -} -static bool trigger_glIsEnabled = false; -void stub_glIsEnabled() { - if(trigger_glIsEnabled) return; - trigger_glIsEnabled = true; - printf("Stub: glIsEnabled\n"); -} -static bool trigger_glDepthRange = false; -void stub_glDepthRange() { - if(trigger_glDepthRange) return; - trigger_glDepthRange = true; - printf("Stub: glDepthRange\n"); -} -static bool trigger_glViewport = false; -void stub_glViewport() { - if(trigger_glViewport) return; - trigger_glViewport = true; - printf("Stub: glViewport\n"); -} -static bool trigger_glDrawArrays = false; -void stub_glDrawArrays() { - if(trigger_glDrawArrays) return; - trigger_glDrawArrays = true; - printf("Stub: glDrawArrays\n"); -} -static bool trigger_glDrawElements = false; -void stub_glDrawElements() { - if(trigger_glDrawElements) return; - trigger_glDrawElements = true; - printf("Stub: glDrawElements\n"); -} -static bool trigger_glGetPointerv = false; -void stub_glGetPointerv() { - if(trigger_glGetPointerv) return; - trigger_glGetPointerv = true; - printf("Stub: glGetPointerv\n"); -} -static bool trigger_glPolygonOffset = false; -void stub_glPolygonOffset() { - if(trigger_glPolygonOffset) return; - trigger_glPolygonOffset = true; - printf("Stub: glPolygonOffset\n"); -} -static bool trigger_glCopyTexImage1D = false; -void stub_glCopyTexImage1D() { - if(trigger_glCopyTexImage1D) return; - trigger_glCopyTexImage1D = true; - printf("Stub: glCopyTexImage1D\n"); -} -static bool trigger_glCopyTexImage2D = false; -void stub_glCopyTexImage2D() { - if(trigger_glCopyTexImage2D) return; - trigger_glCopyTexImage2D = true; - printf("Stub: glCopyTexImage2D\n"); -} -static bool trigger_glCopyTexSubImage1D = false; -void stub_glCopyTexSubImage1D() { - if(trigger_glCopyTexSubImage1D) return; - trigger_glCopyTexSubImage1D = true; - printf("Stub: glCopyTexSubImage1D\n"); -} -static bool trigger_glCopyTexSubImage2D = false; -void stub_glCopyTexSubImage2D() { - if(trigger_glCopyTexSubImage2D) return; - trigger_glCopyTexSubImage2D = true; - printf("Stub: glCopyTexSubImage2D\n"); -} -static bool trigger_glTexSubImage1D = false; -void stub_glTexSubImage1D() { - if(trigger_glTexSubImage1D) return; - trigger_glTexSubImage1D = true; - printf("Stub: glTexSubImage1D\n"); -} -static bool trigger_glTexSubImage2D = false; -void stub_glTexSubImage2D() { - if(trigger_glTexSubImage2D) return; - trigger_glTexSubImage2D = true; - printf("Stub: glTexSubImage2D\n"); -} -static bool trigger_glBindTexture = false; -void stub_glBindTexture() { - if(trigger_glBindTexture) return; - trigger_glBindTexture = true; - printf("Stub: glBindTexture\n"); -} -static bool trigger_glDeleteTextures = false; -void stub_glDeleteTextures() { - if(trigger_glDeleteTextures) return; - trigger_glDeleteTextures = true; - printf("Stub: glDeleteTextures\n"); -} -static bool trigger_glGenTextures = false; -void stub_glGenTextures() { - if(trigger_glGenTextures) return; - trigger_glGenTextures = true; - printf("Stub: glGenTextures\n"); -} -static bool trigger_glIsTexture = false; -void stub_glIsTexture() { - if(trigger_glIsTexture) return; - trigger_glIsTexture = true; - printf("Stub: glIsTexture\n"); -} -static bool trigger_glDrawRangeElements = false; -void stub_glDrawRangeElements() { - if(trigger_glDrawRangeElements) return; - trigger_glDrawRangeElements = true; - printf("Stub: glDrawRangeElements\n"); -} -static bool trigger_glTexImage3D = false; -void stub_glTexImage3D() { - if(trigger_glTexImage3D) return; - trigger_glTexImage3D = true; - printf("Stub: glTexImage3D\n"); -} -static bool trigger_glTexSubImage3D = false; -void stub_glTexSubImage3D() { - if(trigger_glTexSubImage3D) return; - trigger_glTexSubImage3D = true; - printf("Stub: glTexSubImage3D\n"); -} -static bool trigger_glCopyTexSubImage3D = false; -void stub_glCopyTexSubImage3D() { - if(trigger_glCopyTexSubImage3D) return; - trigger_glCopyTexSubImage3D = true; - printf("Stub: glCopyTexSubImage3D\n"); -} -static bool trigger_glActiveTexture = false; -void stub_glActiveTexture() { - if(trigger_glActiveTexture) return; - trigger_glActiveTexture = true; - printf("Stub: glActiveTexture\n"); -} -static bool trigger_glSampleCoverage = false; -void stub_glSampleCoverage() { - if(trigger_glSampleCoverage) return; - trigger_glSampleCoverage = true; - printf("Stub: glSampleCoverage\n"); -} -static bool trigger_glCompressedTexImage3D = false; -void stub_glCompressedTexImage3D() { - if(trigger_glCompressedTexImage3D) return; - trigger_glCompressedTexImage3D = true; - printf("Stub: glCompressedTexImage3D\n"); -} -static bool trigger_glCompressedTexImage2D = false; -void stub_glCompressedTexImage2D() { - if(trigger_glCompressedTexImage2D) return; - trigger_glCompressedTexImage2D = true; - printf("Stub: glCompressedTexImage2D\n"); -} -static bool trigger_glCompressedTexImage1D = false; -void stub_glCompressedTexImage1D() { - if(trigger_glCompressedTexImage1D) return; - trigger_glCompressedTexImage1D = true; - printf("Stub: glCompressedTexImage1D\n"); -} -static bool trigger_glCompressedTexSubImage3D = false; -void stub_glCompressedTexSubImage3D() { - if(trigger_glCompressedTexSubImage3D) return; - trigger_glCompressedTexSubImage3D = true; - printf("Stub: glCompressedTexSubImage3D\n"); -} -static bool trigger_glCompressedTexSubImage2D = false; -void stub_glCompressedTexSubImage2D() { - if(trigger_glCompressedTexSubImage2D) return; - trigger_glCompressedTexSubImage2D = true; - printf("Stub: glCompressedTexSubImage2D\n"); -} -static bool trigger_glCompressedTexSubImage1D = false; -void stub_glCompressedTexSubImage1D() { - if(trigger_glCompressedTexSubImage1D) return; - trigger_glCompressedTexSubImage1D = true; - printf("Stub: glCompressedTexSubImage1D\n"); -} -static bool trigger_glGetCompressedTexImage = false; -void stub_glGetCompressedTexImage() { - if(trigger_glGetCompressedTexImage) return; - trigger_glGetCompressedTexImage = true; - printf("Stub: glGetCompressedTexImage\n"); -} -static bool trigger_glBlendFuncSeparate = false; -void stub_glBlendFuncSeparate() { - if(trigger_glBlendFuncSeparate) return; - trigger_glBlendFuncSeparate = true; - printf("Stub: glBlendFuncSeparate\n"); -} -static bool trigger_glMultiDrawArrays = false; -void stub_glMultiDrawArrays() { - if(trigger_glMultiDrawArrays) return; - trigger_glMultiDrawArrays = true; - printf("Stub: glMultiDrawArrays\n"); -} -static bool trigger_glMultiDrawElements = false; -void stub_glMultiDrawElements() { - if(trigger_glMultiDrawElements) return; - trigger_glMultiDrawElements = true; - printf("Stub: glMultiDrawElements\n"); -} -static bool trigger_glPointParameterf = false; -void stub_glPointParameterf() { - if(trigger_glPointParameterf) return; - trigger_glPointParameterf = true; - printf("Stub: glPointParameterf\n"); -} -static bool trigger_glPointParameterfv = false; -void stub_glPointParameterfv() { - if(trigger_glPointParameterfv) return; - trigger_glPointParameterfv = true; - printf("Stub: glPointParameterfv\n"); -} -static bool trigger_glPointParameteri = false; -void stub_glPointParameteri() { - if(trigger_glPointParameteri) return; - trigger_glPointParameteri = true; - printf("Stub: glPointParameteri\n"); -} -static bool trigger_glPointParameteriv = false; -void stub_glPointParameteriv() { - if(trigger_glPointParameteriv) return; - trigger_glPointParameteriv = true; - printf("Stub: glPointParameteriv\n"); -} -static bool trigger_glBlendColor = false; -void stub_glBlendColor() { - if(trigger_glBlendColor) return; - trigger_glBlendColor = true; - printf("Stub: glBlendColor\n"); -} -static bool trigger_glBlendEquation = false; -void stub_glBlendEquation() { - if(trigger_glBlendEquation) return; - trigger_glBlendEquation = true; - printf("Stub: glBlendEquation\n"); -} -static bool trigger_glGenQueries = false; -void stub_glGenQueries() { - if(trigger_glGenQueries) return; - trigger_glGenQueries = true; - printf("Stub: glGenQueries\n"); -} -static bool trigger_glDeleteQueries = false; -void stub_glDeleteQueries() { - if(trigger_glDeleteQueries) return; - trigger_glDeleteQueries = true; - printf("Stub: glDeleteQueries\n"); -} -static bool trigger_glIsQuery = false; -void stub_glIsQuery() { - if(trigger_glIsQuery) return; - trigger_glIsQuery = true; - printf("Stub: glIsQuery\n"); -} -static bool trigger_glBeginQuery = false; -void stub_glBeginQuery() { - if(trigger_glBeginQuery) return; - trigger_glBeginQuery = true; - printf("Stub: glBeginQuery\n"); -} -static bool trigger_glEndQuery = false; -void stub_glEndQuery() { - if(trigger_glEndQuery) return; - trigger_glEndQuery = true; - printf("Stub: glEndQuery\n"); -} -static bool trigger_glGetQueryiv = false; -void stub_glGetQueryiv() { - if(trigger_glGetQueryiv) return; - trigger_glGetQueryiv = true; - printf("Stub: glGetQueryiv\n"); -} -static bool trigger_glGetQueryObjectiv = false; -void stub_glGetQueryObjectiv() { - if(trigger_glGetQueryObjectiv) return; - trigger_glGetQueryObjectiv = true; - printf("Stub: glGetQueryObjectiv\n"); -} -static bool trigger_glGetQueryObjectuiv = false; -void stub_glGetQueryObjectuiv() { - if(trigger_glGetQueryObjectuiv) return; - trigger_glGetQueryObjectuiv = true; - printf("Stub: glGetQueryObjectuiv\n"); -} -static bool trigger_glBindBuffer = false; -void stub_glBindBuffer() { - if(trigger_glBindBuffer) return; - trigger_glBindBuffer = true; - printf("Stub: glBindBuffer\n"); -} -static bool trigger_glDeleteBuffers = false; -void stub_glDeleteBuffers() { - if(trigger_glDeleteBuffers) return; - trigger_glDeleteBuffers = true; - printf("Stub: glDeleteBuffers\n"); -} -static bool trigger_glGenBuffers = false; -void stub_glGenBuffers() { - if(trigger_glGenBuffers) return; - trigger_glGenBuffers = true; - printf("Stub: glGenBuffers\n"); -} -static bool trigger_glIsBuffer = false; -void stub_glIsBuffer() { - if(trigger_glIsBuffer) return; - trigger_glIsBuffer = true; - printf("Stub: glIsBuffer\n"); -} -static bool trigger_glBufferData = false; -void stub_glBufferData() { - if(trigger_glBufferData) return; - trigger_glBufferData = true; - printf("Stub: glBufferData\n"); -} -static bool trigger_glBufferSubData = false; -void stub_glBufferSubData() { - if(trigger_glBufferSubData) return; - trigger_glBufferSubData = true; - printf("Stub: glBufferSubData\n"); -} -static bool trigger_glGetBufferSubData = false; -void stub_glGetBufferSubData() { - if(trigger_glGetBufferSubData) return; - trigger_glGetBufferSubData = true; - printf("Stub: glGetBufferSubData\n"); -} -static bool trigger_glMapBuffer = false; -void stub_glMapBuffer() { - if(trigger_glMapBuffer) return; - trigger_glMapBuffer = true; - printf("Stub: glMapBuffer\n"); -} -static bool trigger_glUnmapBuffer = false; -void stub_glUnmapBuffer() { - if(trigger_glUnmapBuffer) return; - trigger_glUnmapBuffer = true; - printf("Stub: glUnmapBuffer\n"); -} -static bool trigger_glGetBufferParameteriv = false; -void stub_glGetBufferParameteriv() { - if(trigger_glGetBufferParameteriv) return; - trigger_glGetBufferParameteriv = true; - printf("Stub: glGetBufferParameteriv\n"); -} -static bool trigger_glGetBufferPointerv = false; -void stub_glGetBufferPointerv() { - if(trigger_glGetBufferPointerv) return; - trigger_glGetBufferPointerv = true; - printf("Stub: glGetBufferPointerv\n"); -} -static bool trigger_glBlendEquationSeparate = false; -void stub_glBlendEquationSeparate() { - if(trigger_glBlendEquationSeparate) return; - trigger_glBlendEquationSeparate = true; - printf("Stub: glBlendEquationSeparate\n"); -} -static bool trigger_glDrawBuffers = false; -void stub_glDrawBuffers() { - if(trigger_glDrawBuffers) return; - trigger_glDrawBuffers = true; - printf("Stub: glDrawBuffers\n"); -} -static bool trigger_glStencilOpSeparate = false; -void stub_glStencilOpSeparate() { - if(trigger_glStencilOpSeparate) return; - trigger_glStencilOpSeparate = true; - printf("Stub: glStencilOpSeparate\n"); -} -static bool trigger_glStencilFuncSeparate = false; -void stub_glStencilFuncSeparate() { - if(trigger_glStencilFuncSeparate) return; - trigger_glStencilFuncSeparate = true; - printf("Stub: glStencilFuncSeparate\n"); -} -static bool trigger_glStencilMaskSeparate = false; -void stub_glStencilMaskSeparate() { - if(trigger_glStencilMaskSeparate) return; - trigger_glStencilMaskSeparate = true; - printf("Stub: glStencilMaskSeparate\n"); -} -static bool trigger_glAttachShader = false; -void stub_glAttachShader() { - if(trigger_glAttachShader) return; - trigger_glAttachShader = true; - printf("Stub: glAttachShader\n"); -} -static bool trigger_glBindAttribLocation = false; -void stub_glBindAttribLocation() { - if(trigger_glBindAttribLocation) return; - trigger_glBindAttribLocation = true; - printf("Stub: glBindAttribLocation\n"); -} -static bool trigger_glCompileShader = false; -void stub_glCompileShader() { - if(trigger_glCompileShader) return; - trigger_glCompileShader = true; - printf("Stub: glCompileShader\n"); -} -static bool trigger_glCreateProgram = false; -void stub_glCreateProgram() { - if(trigger_glCreateProgram) return; - trigger_glCreateProgram = true; - printf("Stub: glCreateProgram\n"); -} -static bool trigger_glCreateShader = false; -void stub_glCreateShader() { - if(trigger_glCreateShader) return; - trigger_glCreateShader = true; - printf("Stub: glCreateShader\n"); -} -static bool trigger_glDeleteProgram = false; -void stub_glDeleteProgram() { - if(trigger_glDeleteProgram) return; - trigger_glDeleteProgram = true; - printf("Stub: glDeleteProgram\n"); -} -static bool trigger_glDeleteShader = false; -void stub_glDeleteShader() { - if(trigger_glDeleteShader) return; - trigger_glDeleteShader = true; - printf("Stub: glDeleteShader\n"); -} -static bool trigger_glDetachShader = false; -void stub_glDetachShader() { - if(trigger_glDetachShader) return; - trigger_glDetachShader = true; - printf("Stub: glDetachShader\n"); -} -static bool trigger_glDisableVertexAttribArray = false; -void stub_glDisableVertexAttribArray() { - if(trigger_glDisableVertexAttribArray) return; - trigger_glDisableVertexAttribArray = true; - printf("Stub: glDisableVertexAttribArray\n"); -} -static bool trigger_glEnableVertexAttribArray = false; -void stub_glEnableVertexAttribArray() { - if(trigger_glEnableVertexAttribArray) return; - trigger_glEnableVertexAttribArray = true; - printf("Stub: glEnableVertexAttribArray\n"); -} -static bool trigger_glGetActiveAttrib = false; -void stub_glGetActiveAttrib() { - if(trigger_glGetActiveAttrib) return; - trigger_glGetActiveAttrib = true; - printf("Stub: glGetActiveAttrib\n"); -} -static bool trigger_glGetActiveUniform = false; -void stub_glGetActiveUniform() { - if(trigger_glGetActiveUniform) return; - trigger_glGetActiveUniform = true; - printf("Stub: glGetActiveUniform\n"); -} -static bool trigger_glGetAttachedShaders = false; -void stub_glGetAttachedShaders() { - if(trigger_glGetAttachedShaders) return; - trigger_glGetAttachedShaders = true; - printf("Stub: glGetAttachedShaders\n"); -} -static bool trigger_glGetAttribLocation = false; -void stub_glGetAttribLocation() { - if(trigger_glGetAttribLocation) return; - trigger_glGetAttribLocation = true; - printf("Stub: glGetAttribLocation\n"); -} -static bool trigger_glGetProgramiv = false; -void stub_glGetProgramiv() { - if(trigger_glGetProgramiv) return; - trigger_glGetProgramiv = true; - printf("Stub: glGetProgramiv\n"); -} -static bool trigger_glGetProgramInfoLog = false; -void stub_glGetProgramInfoLog() { - if(trigger_glGetProgramInfoLog) return; - trigger_glGetProgramInfoLog = true; - printf("Stub: glGetProgramInfoLog\n"); -} -static bool trigger_glGetShaderiv = false; -void stub_glGetShaderiv() { - if(trigger_glGetShaderiv) return; - trigger_glGetShaderiv = true; - printf("Stub: glGetShaderiv\n"); -} -static bool trigger_glGetShaderInfoLog = false; -void stub_glGetShaderInfoLog() { - if(trigger_glGetShaderInfoLog) return; - trigger_glGetShaderInfoLog = true; - printf("Stub: glGetShaderInfoLog\n"); -} -static bool trigger_glGetShaderSource = false; -void stub_glGetShaderSource() { - if(trigger_glGetShaderSource) return; - trigger_glGetShaderSource = true; - printf("Stub: glGetShaderSource\n"); -} -static bool trigger_glGetUniformLocation = false; -void stub_glGetUniformLocation() { - if(trigger_glGetUniformLocation) return; - trigger_glGetUniformLocation = true; - printf("Stub: glGetUniformLocation\n"); -} -static bool trigger_glGetUniformfv = false; -void stub_glGetUniformfv() { - if(trigger_glGetUniformfv) return; - trigger_glGetUniformfv = true; - printf("Stub: glGetUniformfv\n"); -} -static bool trigger_glGetUniformiv = false; -void stub_glGetUniformiv() { - if(trigger_glGetUniformiv) return; - trigger_glGetUniformiv = true; - printf("Stub: glGetUniformiv\n"); -} -static bool trigger_glGetVertexAttribdv = false; -void stub_glGetVertexAttribdv() { - if(trigger_glGetVertexAttribdv) return; - trigger_glGetVertexAttribdv = true; - printf("Stub: glGetVertexAttribdv\n"); -} -static bool trigger_glGetVertexAttribfv = false; -void stub_glGetVertexAttribfv() { - if(trigger_glGetVertexAttribfv) return; - trigger_glGetVertexAttribfv = true; - printf("Stub: glGetVertexAttribfv\n"); -} -static bool trigger_glGetVertexAttribiv = false; -void stub_glGetVertexAttribiv() { - if(trigger_glGetVertexAttribiv) return; - trigger_glGetVertexAttribiv = true; - printf("Stub: glGetVertexAttribiv\n"); -} -static bool trigger_glGetVertexAttribPointerv = false; -void stub_glGetVertexAttribPointerv() { - if(trigger_glGetVertexAttribPointerv) return; - trigger_glGetVertexAttribPointerv = true; - printf("Stub: glGetVertexAttribPointerv\n"); -} -static bool trigger_glIsProgram = false; -void stub_glIsProgram() { - if(trigger_glIsProgram) return; - trigger_glIsProgram = true; - printf("Stub: glIsProgram\n"); -} -static bool trigger_glIsShader = false; -void stub_glIsShader() { - if(trigger_glIsShader) return; - trigger_glIsShader = true; - printf("Stub: glIsShader\n"); -} -static bool trigger_glLinkProgram = false; -void stub_glLinkProgram() { - if(trigger_glLinkProgram) return; - trigger_glLinkProgram = true; - printf("Stub: glLinkProgram\n"); -} -static bool trigger_glShaderSource = false; -void stub_glShaderSource() { - if(trigger_glShaderSource) return; - trigger_glShaderSource = true; - printf("Stub: glShaderSource\n"); -} -static bool trigger_glUseProgram = false; -void stub_glUseProgram() { - if(trigger_glUseProgram) return; - trigger_glUseProgram = true; - printf("Stub: glUseProgram\n"); -} -static bool trigger_glUniform1f = false; -void stub_glUniform1f() { - if(trigger_glUniform1f) return; - trigger_glUniform1f = true; - printf("Stub: glUniform1f\n"); -} -static bool trigger_glUniform2f = false; -void stub_glUniform2f() { - if(trigger_glUniform2f) return; - trigger_glUniform2f = true; - printf("Stub: glUniform2f\n"); -} -static bool trigger_glUniform3f = false; -void stub_glUniform3f() { - if(trigger_glUniform3f) return; - trigger_glUniform3f = true; - printf("Stub: glUniform3f\n"); -} -static bool trigger_glUniform4f = false; -void stub_glUniform4f() { - if(trigger_glUniform4f) return; - trigger_glUniform4f = true; - printf("Stub: glUniform4f\n"); -} -static bool trigger_glUniform1i = false; -void stub_glUniform1i() { - if(trigger_glUniform1i) return; - trigger_glUniform1i = true; - printf("Stub: glUniform1i\n"); -} -static bool trigger_glUniform2i = false; -void stub_glUniform2i() { - if(trigger_glUniform2i) return; - trigger_glUniform2i = true; - printf("Stub: glUniform2i\n"); -} -static bool trigger_glUniform3i = false; -void stub_glUniform3i() { - if(trigger_glUniform3i) return; - trigger_glUniform3i = true; - printf("Stub: glUniform3i\n"); -} -static bool trigger_glUniform4i = false; -void stub_glUniform4i() { - if(trigger_glUniform4i) return; - trigger_glUniform4i = true; - printf("Stub: glUniform4i\n"); -} -static bool trigger_glUniform1fv = false; -void stub_glUniform1fv() { - if(trigger_glUniform1fv) return; - trigger_glUniform1fv = true; - printf("Stub: glUniform1fv\n"); -} -static bool trigger_glUniform2fv = false; -void stub_glUniform2fv() { - if(trigger_glUniform2fv) return; - trigger_glUniform2fv = true; - printf("Stub: glUniform2fv\n"); -} -static bool trigger_glUniform3fv = false; -void stub_glUniform3fv() { - if(trigger_glUniform3fv) return; - trigger_glUniform3fv = true; - printf("Stub: glUniform3fv\n"); -} -static bool trigger_glUniform4fv = false; -void stub_glUniform4fv() { - if(trigger_glUniform4fv) return; - trigger_glUniform4fv = true; - printf("Stub: glUniform4fv\n"); -} -static bool trigger_glUniform1iv = false; -void stub_glUniform1iv() { - if(trigger_glUniform1iv) return; - trigger_glUniform1iv = true; - printf("Stub: glUniform1iv\n"); -} -static bool trigger_glUniform2iv = false; -void stub_glUniform2iv() { - if(trigger_glUniform2iv) return; - trigger_glUniform2iv = true; - printf("Stub: glUniform2iv\n"); -} -static bool trigger_glUniform3iv = false; -void stub_glUniform3iv() { - if(trigger_glUniform3iv) return; - trigger_glUniform3iv = true; - printf("Stub: glUniform3iv\n"); -} -static bool trigger_glUniform4iv = false; -void stub_glUniform4iv() { - if(trigger_glUniform4iv) return; - trigger_glUniform4iv = true; - printf("Stub: glUniform4iv\n"); -} -static bool trigger_glUniformMatrix2fv = false; -void stub_glUniformMatrix2fv() { - if(trigger_glUniformMatrix2fv) return; - trigger_glUniformMatrix2fv = true; - printf("Stub: glUniformMatrix2fv\n"); -} -static bool trigger_glUniformMatrix3fv = false; -void stub_glUniformMatrix3fv() { - if(trigger_glUniformMatrix3fv) return; - trigger_glUniformMatrix3fv = true; - printf("Stub: glUniformMatrix3fv\n"); -} -static bool trigger_glUniformMatrix4fv = false; -void stub_glUniformMatrix4fv() { - if(trigger_glUniformMatrix4fv) return; - trigger_glUniformMatrix4fv = true; - printf("Stub: glUniformMatrix4fv\n"); -} -static bool trigger_glValidateProgram = false; -void stub_glValidateProgram() { - if(trigger_glValidateProgram) return; - trigger_glValidateProgram = true; - printf("Stub: glValidateProgram\n"); -} -static bool trigger_glVertexAttrib1d = false; -void stub_glVertexAttrib1d() { - if(trigger_glVertexAttrib1d) return; - trigger_glVertexAttrib1d = true; - printf("Stub: glVertexAttrib1d\n"); -} -static bool trigger_glVertexAttrib1dv = false; -void stub_glVertexAttrib1dv() { - if(trigger_glVertexAttrib1dv) return; - trigger_glVertexAttrib1dv = true; - printf("Stub: glVertexAttrib1dv\n"); -} -static bool trigger_glVertexAttrib1f = false; -void stub_glVertexAttrib1f() { - if(trigger_glVertexAttrib1f) return; - trigger_glVertexAttrib1f = true; - printf("Stub: glVertexAttrib1f\n"); -} -static bool trigger_glVertexAttrib1fv = false; -void stub_glVertexAttrib1fv() { - if(trigger_glVertexAttrib1fv) return; - trigger_glVertexAttrib1fv = true; - printf("Stub: glVertexAttrib1fv\n"); -} -static bool trigger_glVertexAttrib1s = false; -void stub_glVertexAttrib1s() { - if(trigger_glVertexAttrib1s) return; - trigger_glVertexAttrib1s = true; - printf("Stub: glVertexAttrib1s\n"); -} -static bool trigger_glVertexAttrib1sv = false; -void stub_glVertexAttrib1sv() { - if(trigger_glVertexAttrib1sv) return; - trigger_glVertexAttrib1sv = true; - printf("Stub: glVertexAttrib1sv\n"); -} -static bool trigger_glVertexAttrib2d = false; -void stub_glVertexAttrib2d() { - if(trigger_glVertexAttrib2d) return; - trigger_glVertexAttrib2d = true; - printf("Stub: glVertexAttrib2d\n"); -} -static bool trigger_glVertexAttrib2dv = false; -void stub_glVertexAttrib2dv() { - if(trigger_glVertexAttrib2dv) return; - trigger_glVertexAttrib2dv = true; - printf("Stub: glVertexAttrib2dv\n"); -} -static bool trigger_glVertexAttrib2f = false; -void stub_glVertexAttrib2f() { - if(trigger_glVertexAttrib2f) return; - trigger_glVertexAttrib2f = true; - printf("Stub: glVertexAttrib2f\n"); -} -static bool trigger_glVertexAttrib2fv = false; -void stub_glVertexAttrib2fv() { - if(trigger_glVertexAttrib2fv) return; - trigger_glVertexAttrib2fv = true; - printf("Stub: glVertexAttrib2fv\n"); -} -static bool trigger_glVertexAttrib2s = false; -void stub_glVertexAttrib2s() { - if(trigger_glVertexAttrib2s) return; - trigger_glVertexAttrib2s = true; - printf("Stub: glVertexAttrib2s\n"); -} -static bool trigger_glVertexAttrib2sv = false; -void stub_glVertexAttrib2sv() { - if(trigger_glVertexAttrib2sv) return; - trigger_glVertexAttrib2sv = true; - printf("Stub: glVertexAttrib2sv\n"); -} -static bool trigger_glVertexAttrib3d = false; -void stub_glVertexAttrib3d() { - if(trigger_glVertexAttrib3d) return; - trigger_glVertexAttrib3d = true; - printf("Stub: glVertexAttrib3d\n"); -} -static bool trigger_glVertexAttrib3dv = false; -void stub_glVertexAttrib3dv() { - if(trigger_glVertexAttrib3dv) return; - trigger_glVertexAttrib3dv = true; - printf("Stub: glVertexAttrib3dv\n"); -} -static bool trigger_glVertexAttrib3f = false; -void stub_glVertexAttrib3f() { - if(trigger_glVertexAttrib3f) return; - trigger_glVertexAttrib3f = true; - printf("Stub: glVertexAttrib3f\n"); -} -static bool trigger_glVertexAttrib3fv = false; -void stub_glVertexAttrib3fv() { - if(trigger_glVertexAttrib3fv) return; - trigger_glVertexAttrib3fv = true; - printf("Stub: glVertexAttrib3fv\n"); -} -static bool trigger_glVertexAttrib3s = false; -void stub_glVertexAttrib3s() { - if(trigger_glVertexAttrib3s) return; - trigger_glVertexAttrib3s = true; - printf("Stub: glVertexAttrib3s\n"); -} -static bool trigger_glVertexAttrib3sv = false; -void stub_glVertexAttrib3sv() { - if(trigger_glVertexAttrib3sv) return; - trigger_glVertexAttrib3sv = true; - printf("Stub: glVertexAttrib3sv\n"); -} -static bool trigger_glVertexAttrib4Nbv = false; -void stub_glVertexAttrib4Nbv() { - if(trigger_glVertexAttrib4Nbv) return; - trigger_glVertexAttrib4Nbv = true; - printf("Stub: glVertexAttrib4Nbv\n"); -} -static bool trigger_glVertexAttrib4Niv = false; -void stub_glVertexAttrib4Niv() { - if(trigger_glVertexAttrib4Niv) return; - trigger_glVertexAttrib4Niv = true; - printf("Stub: glVertexAttrib4Niv\n"); -} -static bool trigger_glVertexAttrib4Nsv = false; -void stub_glVertexAttrib4Nsv() { - if(trigger_glVertexAttrib4Nsv) return; - trigger_glVertexAttrib4Nsv = true; - printf("Stub: glVertexAttrib4Nsv\n"); -} -static bool trigger_glVertexAttrib4Nub = false; -void stub_glVertexAttrib4Nub() { - if(trigger_glVertexAttrib4Nub) return; - trigger_glVertexAttrib4Nub = true; - printf("Stub: glVertexAttrib4Nub\n"); -} -static bool trigger_glVertexAttrib4Nubv = false; -void stub_glVertexAttrib4Nubv() { - if(trigger_glVertexAttrib4Nubv) return; - trigger_glVertexAttrib4Nubv = true; - printf("Stub: glVertexAttrib4Nubv\n"); -} -static bool trigger_glVertexAttrib4Nuiv = false; -void stub_glVertexAttrib4Nuiv() { - if(trigger_glVertexAttrib4Nuiv) return; - trigger_glVertexAttrib4Nuiv = true; - printf("Stub: glVertexAttrib4Nuiv\n"); -} -static bool trigger_glVertexAttrib4Nusv = false; -void stub_glVertexAttrib4Nusv() { - if(trigger_glVertexAttrib4Nusv) return; - trigger_glVertexAttrib4Nusv = true; - printf("Stub: glVertexAttrib4Nusv\n"); -} -static bool trigger_glVertexAttrib4bv = false; -void stub_glVertexAttrib4bv() { - if(trigger_glVertexAttrib4bv) return; - trigger_glVertexAttrib4bv = true; - printf("Stub: glVertexAttrib4bv\n"); -} -static bool trigger_glVertexAttrib4d = false; -void stub_glVertexAttrib4d() { - if(trigger_glVertexAttrib4d) return; - trigger_glVertexAttrib4d = true; - printf("Stub: glVertexAttrib4d\n"); -} -static bool trigger_glVertexAttrib4dv = false; -void stub_glVertexAttrib4dv() { - if(trigger_glVertexAttrib4dv) return; - trigger_glVertexAttrib4dv = true; - printf("Stub: glVertexAttrib4dv\n"); -} -static bool trigger_glVertexAttrib4f = false; -void stub_glVertexAttrib4f() { - if(trigger_glVertexAttrib4f) return; - trigger_glVertexAttrib4f = true; - printf("Stub: glVertexAttrib4f\n"); -} -static bool trigger_glVertexAttrib4fv = false; -void stub_glVertexAttrib4fv() { - if(trigger_glVertexAttrib4fv) return; - trigger_glVertexAttrib4fv = true; - printf("Stub: glVertexAttrib4fv\n"); -} -static bool trigger_glVertexAttrib4iv = false; -void stub_glVertexAttrib4iv() { - if(trigger_glVertexAttrib4iv) return; - trigger_glVertexAttrib4iv = true; - printf("Stub: glVertexAttrib4iv\n"); -} -static bool trigger_glVertexAttrib4s = false; -void stub_glVertexAttrib4s() { - if(trigger_glVertexAttrib4s) return; - trigger_glVertexAttrib4s = true; - printf("Stub: glVertexAttrib4s\n"); -} -static bool trigger_glVertexAttrib4sv = false; -void stub_glVertexAttrib4sv() { - if(trigger_glVertexAttrib4sv) return; - trigger_glVertexAttrib4sv = true; - printf("Stub: glVertexAttrib4sv\n"); -} -static bool trigger_glVertexAttrib4ubv = false; -void stub_glVertexAttrib4ubv() { - if(trigger_glVertexAttrib4ubv) return; - trigger_glVertexAttrib4ubv = true; - printf("Stub: glVertexAttrib4ubv\n"); -} -static bool trigger_glVertexAttrib4uiv = false; -void stub_glVertexAttrib4uiv() { - if(trigger_glVertexAttrib4uiv) return; - trigger_glVertexAttrib4uiv = true; - printf("Stub: glVertexAttrib4uiv\n"); -} -static bool trigger_glVertexAttrib4usv = false; -void stub_glVertexAttrib4usv() { - if(trigger_glVertexAttrib4usv) return; - trigger_glVertexAttrib4usv = true; - printf("Stub: glVertexAttrib4usv\n"); -} -static bool trigger_glVertexAttribPointer = false; -void stub_glVertexAttribPointer() { - if(trigger_glVertexAttribPointer) return; - trigger_glVertexAttribPointer = true; - printf("Stub: glVertexAttribPointer\n"); -} -static bool trigger_glUniformMatrix2x3fv = false; -void stub_glUniformMatrix2x3fv() { - if(trigger_glUniformMatrix2x3fv) return; - trigger_glUniformMatrix2x3fv = true; - printf("Stub: glUniformMatrix2x3fv\n"); -} -static bool trigger_glUniformMatrix3x2fv = false; -void stub_glUniformMatrix3x2fv() { - if(trigger_glUniformMatrix3x2fv) return; - trigger_glUniformMatrix3x2fv = true; - printf("Stub: glUniformMatrix3x2fv\n"); -} -static bool trigger_glUniformMatrix2x4fv = false; -void stub_glUniformMatrix2x4fv() { - if(trigger_glUniformMatrix2x4fv) return; - trigger_glUniformMatrix2x4fv = true; - printf("Stub: glUniformMatrix2x4fv\n"); -} -static bool trigger_glUniformMatrix4x2fv = false; -void stub_glUniformMatrix4x2fv() { - if(trigger_glUniformMatrix4x2fv) return; - trigger_glUniformMatrix4x2fv = true; - printf("Stub: glUniformMatrix4x2fv\n"); -} -static bool trigger_glUniformMatrix3x4fv = false; -void stub_glUniformMatrix3x4fv() { - if(trigger_glUniformMatrix3x4fv) return; - trigger_glUniformMatrix3x4fv = true; - printf("Stub: glUniformMatrix3x4fv\n"); -} -static bool trigger_glUniformMatrix4x3fv = false; -void stub_glUniformMatrix4x3fv() { - if(trigger_glUniformMatrix4x3fv) return; - trigger_glUniformMatrix4x3fv = true; - printf("Stub: glUniformMatrix4x3fv\n"); -} -static bool trigger_glColorMaski = false; -void stub_glColorMaski() { - if(trigger_glColorMaski) return; - trigger_glColorMaski = true; - printf("Stub: glColorMaski\n"); -} -static bool trigger_glGetBooleani_v = false; -void stub_glGetBooleani_v() { - if(trigger_glGetBooleani_v) return; - trigger_glGetBooleani_v = true; - printf("Stub: glGetBooleani_v\n"); -} -static bool trigger_glGetIntegeri_v = false; -void stub_glGetIntegeri_v() { - if(trigger_glGetIntegeri_v) return; - trigger_glGetIntegeri_v = true; - printf("Stub: glGetIntegeri_v\n"); -} -static bool trigger_glEnablei = false; -void stub_glEnablei() { - if(trigger_glEnablei) return; - trigger_glEnablei = true; - printf("Stub: glEnablei\n"); -} -static bool trigger_glDisablei = false; -void stub_glDisablei() { - if(trigger_glDisablei) return; - trigger_glDisablei = true; - printf("Stub: glDisablei\n"); -} -static bool trigger_glIsEnabledi = false; -void stub_glIsEnabledi() { - if(trigger_glIsEnabledi) return; - trigger_glIsEnabledi = true; - printf("Stub: glIsEnabledi\n"); -} -static bool trigger_glBeginTransformFeedback = false; -void stub_glBeginTransformFeedback() { - if(trigger_glBeginTransformFeedback) return; - trigger_glBeginTransformFeedback = true; - printf("Stub: glBeginTransformFeedback\n"); -} -static bool trigger_glEndTransformFeedback = false; -void stub_glEndTransformFeedback() { - if(trigger_glEndTransformFeedback) return; - trigger_glEndTransformFeedback = true; - printf("Stub: glEndTransformFeedback\n"); -} -static bool trigger_glBindBufferRange = false; -void stub_glBindBufferRange() { - if(trigger_glBindBufferRange) return; - trigger_glBindBufferRange = true; - printf("Stub: glBindBufferRange\n"); -} -static bool trigger_glBindBufferBase = false; -void stub_glBindBufferBase() { - if(trigger_glBindBufferBase) return; - trigger_glBindBufferBase = true; - printf("Stub: glBindBufferBase\n"); -} -static bool trigger_glTransformFeedbackVaryings = false; -void stub_glTransformFeedbackVaryings() { - if(trigger_glTransformFeedbackVaryings) return; - trigger_glTransformFeedbackVaryings = true; - printf("Stub: glTransformFeedbackVaryings\n"); -} -static bool trigger_glGetTransformFeedbackVarying = false; -void stub_glGetTransformFeedbackVarying() { - if(trigger_glGetTransformFeedbackVarying) return; - trigger_glGetTransformFeedbackVarying = true; - printf("Stub: glGetTransformFeedbackVarying\n"); -} -static bool trigger_glClampColor = false; -void stub_glClampColor() { - if(trigger_glClampColor) return; - trigger_glClampColor = true; - printf("Stub: glClampColor\n"); -} -static bool trigger_glBeginConditionalRender = false; -void stub_glBeginConditionalRender() { - if(trigger_glBeginConditionalRender) return; - trigger_glBeginConditionalRender = true; - printf("Stub: glBeginConditionalRender\n"); -} -static bool trigger_glEndConditionalRender = false; -void stub_glEndConditionalRender() { - if(trigger_glEndConditionalRender) return; - trigger_glEndConditionalRender = true; - printf("Stub: glEndConditionalRender\n"); -} -static bool trigger_glVertexAttribIPointer = false; -void stub_glVertexAttribIPointer() { - if(trigger_glVertexAttribIPointer) return; - trigger_glVertexAttribIPointer = true; - printf("Stub: glVertexAttribIPointer\n"); -} -static bool trigger_glGetVertexAttribIiv = false; -void stub_glGetVertexAttribIiv() { - if(trigger_glGetVertexAttribIiv) return; - trigger_glGetVertexAttribIiv = true; - printf("Stub: glGetVertexAttribIiv\n"); -} -static bool trigger_glGetVertexAttribIuiv = false; -void stub_glGetVertexAttribIuiv() { - if(trigger_glGetVertexAttribIuiv) return; - trigger_glGetVertexAttribIuiv = true; - printf("Stub: glGetVertexAttribIuiv\n"); -} -static bool trigger_glVertexAttribI1i = false; -void stub_glVertexAttribI1i() { - if(trigger_glVertexAttribI1i) return; - trigger_glVertexAttribI1i = true; - printf("Stub: glVertexAttribI1i\n"); -} -static bool trigger_glVertexAttribI2i = false; -void stub_glVertexAttribI2i() { - if(trigger_glVertexAttribI2i) return; - trigger_glVertexAttribI2i = true; - printf("Stub: glVertexAttribI2i\n"); -} -static bool trigger_glVertexAttribI3i = false; -void stub_glVertexAttribI3i() { - if(trigger_glVertexAttribI3i) return; - trigger_glVertexAttribI3i = true; - printf("Stub: glVertexAttribI3i\n"); -} -static bool trigger_glVertexAttribI4i = false; -void stub_glVertexAttribI4i() { - if(trigger_glVertexAttribI4i) return; - trigger_glVertexAttribI4i = true; - printf("Stub: glVertexAttribI4i\n"); -} -static bool trigger_glVertexAttribI1ui = false; -void stub_glVertexAttribI1ui() { - if(trigger_glVertexAttribI1ui) return; - trigger_glVertexAttribI1ui = true; - printf("Stub: glVertexAttribI1ui\n"); -} -static bool trigger_glVertexAttribI2ui = false; -void stub_glVertexAttribI2ui() { - if(trigger_glVertexAttribI2ui) return; - trigger_glVertexAttribI2ui = true; - printf("Stub: glVertexAttribI2ui\n"); -} -static bool trigger_glVertexAttribI3ui = false; -void stub_glVertexAttribI3ui() { - if(trigger_glVertexAttribI3ui) return; - trigger_glVertexAttribI3ui = true; - printf("Stub: glVertexAttribI3ui\n"); -} -static bool trigger_glVertexAttribI4ui = false; -void stub_glVertexAttribI4ui() { - if(trigger_glVertexAttribI4ui) return; - trigger_glVertexAttribI4ui = true; - printf("Stub: glVertexAttribI4ui\n"); -} -static bool trigger_glVertexAttribI1iv = false; -void stub_glVertexAttribI1iv() { - if(trigger_glVertexAttribI1iv) return; - trigger_glVertexAttribI1iv = true; - printf("Stub: glVertexAttribI1iv\n"); -} -static bool trigger_glVertexAttribI2iv = false; -void stub_glVertexAttribI2iv() { - if(trigger_glVertexAttribI2iv) return; - trigger_glVertexAttribI2iv = true; - printf("Stub: glVertexAttribI2iv\n"); -} -static bool trigger_glVertexAttribI3iv = false; -void stub_glVertexAttribI3iv() { - if(trigger_glVertexAttribI3iv) return; - trigger_glVertexAttribI3iv = true; - printf("Stub: glVertexAttribI3iv\n"); -} -static bool trigger_glVertexAttribI4iv = false; -void stub_glVertexAttribI4iv() { - if(trigger_glVertexAttribI4iv) return; - trigger_glVertexAttribI4iv = true; - printf("Stub: glVertexAttribI4iv\n"); -} -static bool trigger_glVertexAttribI1uiv = false; -void stub_glVertexAttribI1uiv() { - if(trigger_glVertexAttribI1uiv) return; - trigger_glVertexAttribI1uiv = true; - printf("Stub: glVertexAttribI1uiv\n"); -} -static bool trigger_glVertexAttribI2uiv = false; -void stub_glVertexAttribI2uiv() { - if(trigger_glVertexAttribI2uiv) return; - trigger_glVertexAttribI2uiv = true; - printf("Stub: glVertexAttribI2uiv\n"); -} -static bool trigger_glVertexAttribI3uiv = false; -void stub_glVertexAttribI3uiv() { - if(trigger_glVertexAttribI3uiv) return; - trigger_glVertexAttribI3uiv = true; - printf("Stub: glVertexAttribI3uiv\n"); -} -static bool trigger_glVertexAttribI4uiv = false; -void stub_glVertexAttribI4uiv() { - if(trigger_glVertexAttribI4uiv) return; - trigger_glVertexAttribI4uiv = true; - printf("Stub: glVertexAttribI4uiv\n"); -} -static bool trigger_glVertexAttribI4bv = false; -void stub_glVertexAttribI4bv() { - if(trigger_glVertexAttribI4bv) return; - trigger_glVertexAttribI4bv = true; - printf("Stub: glVertexAttribI4bv\n"); -} -static bool trigger_glVertexAttribI4sv = false; -void stub_glVertexAttribI4sv() { - if(trigger_glVertexAttribI4sv) return; - trigger_glVertexAttribI4sv = true; - printf("Stub: glVertexAttribI4sv\n"); -} -static bool trigger_glVertexAttribI4ubv = false; -void stub_glVertexAttribI4ubv() { - if(trigger_glVertexAttribI4ubv) return; - trigger_glVertexAttribI4ubv = true; - printf("Stub: glVertexAttribI4ubv\n"); -} -static bool trigger_glVertexAttribI4usv = false; -void stub_glVertexAttribI4usv() { - if(trigger_glVertexAttribI4usv) return; - trigger_glVertexAttribI4usv = true; - printf("Stub: glVertexAttribI4usv\n"); -} -static bool trigger_glGetUniformuiv = false; -void stub_glGetUniformuiv() { - if(trigger_glGetUniformuiv) return; - trigger_glGetUniformuiv = true; - printf("Stub: glGetUniformuiv\n"); -} -static bool trigger_glBindFragDataLocation = false; -void stub_glBindFragDataLocation() { - if(trigger_glBindFragDataLocation) return; - trigger_glBindFragDataLocation = true; - printf("Stub: glBindFragDataLocation\n"); -} -static bool trigger_glGetFragDataLocation = false; -void stub_glGetFragDataLocation() { - if(trigger_glGetFragDataLocation) return; - trigger_glGetFragDataLocation = true; - printf("Stub: glGetFragDataLocation\n"); -} -static bool trigger_glUniform1ui = false; -void stub_glUniform1ui() { - if(trigger_glUniform1ui) return; - trigger_glUniform1ui = true; - printf("Stub: glUniform1ui\n"); -} -static bool trigger_glUniform2ui = false; -void stub_glUniform2ui() { - if(trigger_glUniform2ui) return; - trigger_glUniform2ui = true; - printf("Stub: glUniform2ui\n"); -} -static bool trigger_glUniform3ui = false; -void stub_glUniform3ui() { - if(trigger_glUniform3ui) return; - trigger_glUniform3ui = true; - printf("Stub: glUniform3ui\n"); -} -static bool trigger_glUniform4ui = false; -void stub_glUniform4ui() { - if(trigger_glUniform4ui) return; - trigger_glUniform4ui = true; - printf("Stub: glUniform4ui\n"); -} -static bool trigger_glUniform1uiv = false; -void stub_glUniform1uiv() { - if(trigger_glUniform1uiv) return; - trigger_glUniform1uiv = true; - printf("Stub: glUniform1uiv\n"); -} -static bool trigger_glUniform2uiv = false; -void stub_glUniform2uiv() { - if(trigger_glUniform2uiv) return; - trigger_glUniform2uiv = true; - printf("Stub: glUniform2uiv\n"); -} -static bool trigger_glUniform3uiv = false; -void stub_glUniform3uiv() { - if(trigger_glUniform3uiv) return; - trigger_glUniform3uiv = true; - printf("Stub: glUniform3uiv\n"); -} -static bool trigger_glUniform4uiv = false; -void stub_glUniform4uiv() { - if(trigger_glUniform4uiv) return; - trigger_glUniform4uiv = true; - printf("Stub: glUniform4uiv\n"); -} -static bool trigger_glTexParameterIiv = false; -void stub_glTexParameterIiv() { - if(trigger_glTexParameterIiv) return; - trigger_glTexParameterIiv = true; - printf("Stub: glTexParameterIiv\n"); -} -static bool trigger_glTexParameterIuiv = false; -void stub_glTexParameterIuiv() { - if(trigger_glTexParameterIuiv) return; - trigger_glTexParameterIuiv = true; - printf("Stub: glTexParameterIuiv\n"); -} -static bool trigger_glGetTexParameterIiv = false; -void stub_glGetTexParameterIiv() { - if(trigger_glGetTexParameterIiv) return; - trigger_glGetTexParameterIiv = true; - printf("Stub: glGetTexParameterIiv\n"); -} -static bool trigger_glGetTexParameterIuiv = false; -void stub_glGetTexParameterIuiv() { - if(trigger_glGetTexParameterIuiv) return; - trigger_glGetTexParameterIuiv = true; - printf("Stub: glGetTexParameterIuiv\n"); -} -static bool trigger_glClearBufferiv = false; -void stub_glClearBufferiv() { - if(trigger_glClearBufferiv) return; - trigger_glClearBufferiv = true; - printf("Stub: glClearBufferiv\n"); -} -static bool trigger_glClearBufferuiv = false; -void stub_glClearBufferuiv() { - if(trigger_glClearBufferuiv) return; - trigger_glClearBufferuiv = true; - printf("Stub: glClearBufferuiv\n"); -} -static bool trigger_glClearBufferfv = false; -void stub_glClearBufferfv() { - if(trigger_glClearBufferfv) return; - trigger_glClearBufferfv = true; - printf("Stub: glClearBufferfv\n"); -} -static bool trigger_glClearBufferfi = false; -void stub_glClearBufferfi() { - if(trigger_glClearBufferfi) return; - trigger_glClearBufferfi = true; - printf("Stub: glClearBufferfi\n"); -} -static bool trigger_glGetStringi = false; -void stub_glGetStringi() { - if(trigger_glGetStringi) return; - trigger_glGetStringi = true; - printf("Stub: glGetStringi\n"); -} -static bool trigger_glIsRenderbuffer = false; -void stub_glIsRenderbuffer() { - if(trigger_glIsRenderbuffer) return; - trigger_glIsRenderbuffer = true; - printf("Stub: glIsRenderbuffer\n"); -} -static bool trigger_glBindRenderbuffer = false; -void stub_glBindRenderbuffer() { - if(trigger_glBindRenderbuffer) return; - trigger_glBindRenderbuffer = true; - printf("Stub: glBindRenderbuffer\n"); -} -static bool trigger_glDeleteRenderbuffers = false; -void stub_glDeleteRenderbuffers() { - if(trigger_glDeleteRenderbuffers) return; - trigger_glDeleteRenderbuffers = true; - printf("Stub: glDeleteRenderbuffers\n"); -} -static bool trigger_glGenRenderbuffers = false; -void stub_glGenRenderbuffers() { - if(trigger_glGenRenderbuffers) return; - trigger_glGenRenderbuffers = true; - printf("Stub: glGenRenderbuffers\n"); -} -static bool trigger_glRenderbufferStorage = false; -void stub_glRenderbufferStorage() { - if(trigger_glRenderbufferStorage) return; - trigger_glRenderbufferStorage = true; - printf("Stub: glRenderbufferStorage\n"); -} -static bool trigger_glGetRenderbufferParameteriv = false; -void stub_glGetRenderbufferParameteriv() { - if(trigger_glGetRenderbufferParameteriv) return; - trigger_glGetRenderbufferParameteriv = true; - printf("Stub: glGetRenderbufferParameteriv\n"); -} -static bool trigger_glIsFramebuffer = false; -void stub_glIsFramebuffer() { - if(trigger_glIsFramebuffer) return; - trigger_glIsFramebuffer = true; - printf("Stub: glIsFramebuffer\n"); -} -static bool trigger_glBindFramebuffer = false; -void stub_glBindFramebuffer() { - if(trigger_glBindFramebuffer) return; - trigger_glBindFramebuffer = true; - printf("Stub: glBindFramebuffer\n"); -} -static bool trigger_glDeleteFramebuffers = false; -void stub_glDeleteFramebuffers() { - if(trigger_glDeleteFramebuffers) return; - trigger_glDeleteFramebuffers = true; - printf("Stub: glDeleteFramebuffers\n"); -} -static bool trigger_glGenFramebuffers = false; -void stub_glGenFramebuffers() { - if(trigger_glGenFramebuffers) return; - trigger_glGenFramebuffers = true; - printf("Stub: glGenFramebuffers\n"); -} -static bool trigger_glCheckFramebufferStatus = false; -void stub_glCheckFramebufferStatus() { - if(trigger_glCheckFramebufferStatus) return; - trigger_glCheckFramebufferStatus = true; - printf("Stub: glCheckFramebufferStatus\n"); -} -static bool trigger_glFramebufferTexture1D = false; -void stub_glFramebufferTexture1D() { - if(trigger_glFramebufferTexture1D) return; - trigger_glFramebufferTexture1D = true; - printf("Stub: glFramebufferTexture1D\n"); -} -static bool trigger_glFramebufferTexture2D = false; -void stub_glFramebufferTexture2D() { - if(trigger_glFramebufferTexture2D) return; - trigger_glFramebufferTexture2D = true; - printf("Stub: glFramebufferTexture2D\n"); -} -static bool trigger_glFramebufferTexture3D = false; -void stub_glFramebufferTexture3D() { - if(trigger_glFramebufferTexture3D) return; - trigger_glFramebufferTexture3D = true; - printf("Stub: glFramebufferTexture3D\n"); -} -static bool trigger_glFramebufferRenderbuffer = false; -void stub_glFramebufferRenderbuffer() { - if(trigger_glFramebufferRenderbuffer) return; - trigger_glFramebufferRenderbuffer = true; - printf("Stub: glFramebufferRenderbuffer\n"); -} -static bool trigger_glGetFramebufferAttachmentParameteriv = false; -void stub_glGetFramebufferAttachmentParameteriv() { - if(trigger_glGetFramebufferAttachmentParameteriv) return; - trigger_glGetFramebufferAttachmentParameteriv = true; - printf("Stub: glGetFramebufferAttachmentParameteriv\n"); -} -static bool trigger_glGenerateMipmap = false; -void stub_glGenerateMipmap() { - if(trigger_glGenerateMipmap) return; - trigger_glGenerateMipmap = true; - printf("Stub: glGenerateMipmap\n"); -} -static bool trigger_glBlitFramebuffer = false; -void stub_glBlitFramebuffer() { - if(trigger_glBlitFramebuffer) return; - trigger_glBlitFramebuffer = true; - printf("Stub: glBlitFramebuffer\n"); -} -static bool trigger_glRenderbufferStorageMultisample = false; -void stub_glRenderbufferStorageMultisample() { - if(trigger_glRenderbufferStorageMultisample) return; - trigger_glRenderbufferStorageMultisample = true; - printf("Stub: glRenderbufferStorageMultisample\n"); -} -static bool trigger_glFramebufferTextureLayer = false; -void stub_glFramebufferTextureLayer() { - if(trigger_glFramebufferTextureLayer) return; - trigger_glFramebufferTextureLayer = true; - printf("Stub: glFramebufferTextureLayer\n"); -} -static bool trigger_glMapBufferRange = false; -void stub_glMapBufferRange() { - if(trigger_glMapBufferRange) return; - trigger_glMapBufferRange = true; - printf("Stub: glMapBufferRange\n"); -} -static bool trigger_glFlushMappedBufferRange = false; -void stub_glFlushMappedBufferRange() { - if(trigger_glFlushMappedBufferRange) return; - trigger_glFlushMappedBufferRange = true; - printf("Stub: glFlushMappedBufferRange\n"); -} -static bool trigger_glBindVertexArray = false; -void stub_glBindVertexArray() { - if(trigger_glBindVertexArray) return; - trigger_glBindVertexArray = true; - printf("Stub: glBindVertexArray\n"); -} -static bool trigger_glDeleteVertexArrays = false; -void stub_glDeleteVertexArrays() { - if(trigger_glDeleteVertexArrays) return; - trigger_glDeleteVertexArrays = true; - printf("Stub: glDeleteVertexArrays\n"); -} -static bool trigger_glGenVertexArrays = false; -void stub_glGenVertexArrays() { - if(trigger_glGenVertexArrays) return; - trigger_glGenVertexArrays = true; - printf("Stub: glGenVertexArrays\n"); -} -static bool trigger_glIsVertexArray = false; -void stub_glIsVertexArray() { - if(trigger_glIsVertexArray) return; - trigger_glIsVertexArray = true; - printf("Stub: glIsVertexArray\n"); -} -static bool trigger_glDrawArraysInstanced = false; -void stub_glDrawArraysInstanced() { - if(trigger_glDrawArraysInstanced) return; - trigger_glDrawArraysInstanced = true; - printf("Stub: glDrawArraysInstanced\n"); -} -static bool trigger_glDrawElementsInstanced = false; -void stub_glDrawElementsInstanced() { - if(trigger_glDrawElementsInstanced) return; - trigger_glDrawElementsInstanced = true; - printf("Stub: glDrawElementsInstanced\n"); -} -static bool trigger_glTexBuffer = false; -void stub_glTexBuffer() { - if(trigger_glTexBuffer) return; - trigger_glTexBuffer = true; - printf("Stub: glTexBuffer\n"); -} -static bool trigger_glPrimitiveRestartIndex = false; -void stub_glPrimitiveRestartIndex() { - if(trigger_glPrimitiveRestartIndex) return; - trigger_glPrimitiveRestartIndex = true; - printf("Stub: glPrimitiveRestartIndex\n"); -} -static bool trigger_glCopyBufferSubData = false; -void stub_glCopyBufferSubData() { - if(trigger_glCopyBufferSubData) return; - trigger_glCopyBufferSubData = true; - printf("Stub: glCopyBufferSubData\n"); -} -static bool trigger_glGetUniformIndices = false; -void stub_glGetUniformIndices() { - if(trigger_glGetUniformIndices) return; - trigger_glGetUniformIndices = true; - printf("Stub: glGetUniformIndices\n"); -} -static bool trigger_glGetActiveUniformsiv = false; -void stub_glGetActiveUniformsiv() { - if(trigger_glGetActiveUniformsiv) return; - trigger_glGetActiveUniformsiv = true; - printf("Stub: glGetActiveUniformsiv\n"); -} -static bool trigger_glGetActiveUniformName = false; -void stub_glGetActiveUniformName() { - if(trigger_glGetActiveUniformName) return; - trigger_glGetActiveUniformName = true; - printf("Stub: glGetActiveUniformName\n"); -} -static bool trigger_glGetUniformBlockIndex = false; -void stub_glGetUniformBlockIndex() { - if(trigger_glGetUniformBlockIndex) return; - trigger_glGetUniformBlockIndex = true; - printf("Stub: glGetUniformBlockIndex\n"); -} -static bool trigger_glGetActiveUniformBlockiv = false; -void stub_glGetActiveUniformBlockiv() { - if(trigger_glGetActiveUniformBlockiv) return; - trigger_glGetActiveUniformBlockiv = true; - printf("Stub: glGetActiveUniformBlockiv\n"); -} -static bool trigger_glGetActiveUniformBlockName = false; -void stub_glGetActiveUniformBlockName() { - if(trigger_glGetActiveUniformBlockName) return; - trigger_glGetActiveUniformBlockName = true; - printf("Stub: glGetActiveUniformBlockName\n"); -} -static bool trigger_glUniformBlockBinding = false; -void stub_glUniformBlockBinding() { - if(trigger_glUniformBlockBinding) return; - trigger_glUniformBlockBinding = true; - printf("Stub: glUniformBlockBinding\n"); -} -static bool trigger_glDrawElementsBaseVertex = false; -void stub_glDrawElementsBaseVertex() { - if(trigger_glDrawElementsBaseVertex) return; - trigger_glDrawElementsBaseVertex = true; - printf("Stub: glDrawElementsBaseVertex\n"); -} -static bool trigger_glDrawRangeElementsBaseVertex = false; -void stub_glDrawRangeElementsBaseVertex() { - if(trigger_glDrawRangeElementsBaseVertex) return; - trigger_glDrawRangeElementsBaseVertex = true; - printf("Stub: glDrawRangeElementsBaseVertex\n"); -} -static bool trigger_glDrawElementsInstancedBaseVertex = false; -void stub_glDrawElementsInstancedBaseVertex() { - if(trigger_glDrawElementsInstancedBaseVertex) return; - trigger_glDrawElementsInstancedBaseVertex = true; - printf("Stub: glDrawElementsInstancedBaseVertex\n"); -} -static bool trigger_glMultiDrawElementsBaseVertex = false; -void stub_glMultiDrawElementsBaseVertex() { - if(trigger_glMultiDrawElementsBaseVertex) return; - trigger_glMultiDrawElementsBaseVertex = true; - printf("Stub: glMultiDrawElementsBaseVertex\n"); -} -static bool trigger_glProvokingVertex = false; -void stub_glProvokingVertex() { - if(trigger_glProvokingVertex) return; - trigger_glProvokingVertex = true; - printf("Stub: glProvokingVertex\n"); -} -static bool trigger_glFenceSync = false; -void stub_glFenceSync() { - if(trigger_glFenceSync) return; - trigger_glFenceSync = true; - printf("Stub: glFenceSync\n"); -} -static bool trigger_glIsSync = false; -void stub_glIsSync() { - if(trigger_glIsSync) return; - trigger_glIsSync = true; - printf("Stub: glIsSync\n"); -} -static bool trigger_glDeleteSync = false; -void stub_glDeleteSync() { - if(trigger_glDeleteSync) return; - trigger_glDeleteSync = true; - printf("Stub: glDeleteSync\n"); -} -static bool trigger_glClientWaitSync = false; -void stub_glClientWaitSync() { - if(trigger_glClientWaitSync) return; - trigger_glClientWaitSync = true; - printf("Stub: glClientWaitSync\n"); -} -static bool trigger_glWaitSync = false; -void stub_glWaitSync() { - if(trigger_glWaitSync) return; - trigger_glWaitSync = true; - printf("Stub: glWaitSync\n"); -} -static bool trigger_glGetInteger64v = false; -void stub_glGetInteger64v() { - if(trigger_glGetInteger64v) return; - trigger_glGetInteger64v = true; - printf("Stub: glGetInteger64v\n"); -} -static bool trigger_glGetSynciv = false; -void stub_glGetSynciv() { - if(trigger_glGetSynciv) return; - trigger_glGetSynciv = true; - printf("Stub: glGetSynciv\n"); -} -static bool trigger_glGetInteger64i_v = false; -void stub_glGetInteger64i_v() { - if(trigger_glGetInteger64i_v) return; - trigger_glGetInteger64i_v = true; - printf("Stub: glGetInteger64i_v\n"); -} -static bool trigger_glGetBufferParameteri64v = false; -void stub_glGetBufferParameteri64v() { - if(trigger_glGetBufferParameteri64v) return; - trigger_glGetBufferParameteri64v = true; - printf("Stub: glGetBufferParameteri64v\n"); -} -static bool trigger_glFramebufferTexture = false; -void stub_glFramebufferTexture() { - if(trigger_glFramebufferTexture) return; - trigger_glFramebufferTexture = true; - printf("Stub: glFramebufferTexture\n"); -} -static bool trigger_glTexImage2DMultisample = false; -void stub_glTexImage2DMultisample() { - if(trigger_glTexImage2DMultisample) return; - trigger_glTexImage2DMultisample = true; - printf("Stub: glTexImage2DMultisample\n"); -} -static bool trigger_glTexImage3DMultisample = false; -void stub_glTexImage3DMultisample() { - if(trigger_glTexImage3DMultisample) return; - trigger_glTexImage3DMultisample = true; - printf("Stub: glTexImage3DMultisample\n"); -} -static bool trigger_glGetMultisamplefv = false; -void stub_glGetMultisamplefv() { - if(trigger_glGetMultisamplefv) return; - trigger_glGetMultisamplefv = true; - printf("Stub: glGetMultisamplefv\n"); -} -static bool trigger_glSampleMaski = false; -void stub_glSampleMaski() { - if(trigger_glSampleMaski) return; - trigger_glSampleMaski = true; - printf("Stub: glSampleMaski\n"); -} -static bool trigger_glBindFragDataLocationIndexed = false; -void stub_glBindFragDataLocationIndexed() { - if(trigger_glBindFragDataLocationIndexed) return; - trigger_glBindFragDataLocationIndexed = true; - printf("Stub: glBindFragDataLocationIndexed\n"); -} -static bool trigger_glGetFragDataIndex = false; -void stub_glGetFragDataIndex() { - if(trigger_glGetFragDataIndex) return; - trigger_glGetFragDataIndex = true; - printf("Stub: glGetFragDataIndex\n"); -} -static bool trigger_glGenSamplers = false; -void stub_glGenSamplers() { - if(trigger_glGenSamplers) return; - trigger_glGenSamplers = true; - printf("Stub: glGenSamplers\n"); -} -static bool trigger_glDeleteSamplers = false; -void stub_glDeleteSamplers() { - if(trigger_glDeleteSamplers) return; - trigger_glDeleteSamplers = true; - printf("Stub: glDeleteSamplers\n"); -} -static bool trigger_glIsSampler = false; -void stub_glIsSampler() { - if(trigger_glIsSampler) return; - trigger_glIsSampler = true; - printf("Stub: glIsSampler\n"); -} -static bool trigger_glBindSampler = false; -void stub_glBindSampler() { - if(trigger_glBindSampler) return; - trigger_glBindSampler = true; - printf("Stub: glBindSampler\n"); -} -static bool trigger_glSamplerParameteri = false; -void stub_glSamplerParameteri() { - if(trigger_glSamplerParameteri) return; - trigger_glSamplerParameteri = true; - printf("Stub: glSamplerParameteri\n"); -} -static bool trigger_glSamplerParameteriv = false; -void stub_glSamplerParameteriv() { - if(trigger_glSamplerParameteriv) return; - trigger_glSamplerParameteriv = true; - printf("Stub: glSamplerParameteriv\n"); -} -static bool trigger_glSamplerParameterf = false; -void stub_glSamplerParameterf() { - if(trigger_glSamplerParameterf) return; - trigger_glSamplerParameterf = true; - printf("Stub: glSamplerParameterf\n"); -} -static bool trigger_glSamplerParameterfv = false; -void stub_glSamplerParameterfv() { - if(trigger_glSamplerParameterfv) return; - trigger_glSamplerParameterfv = true; - printf("Stub: glSamplerParameterfv\n"); -} -static bool trigger_glSamplerParameterIiv = false; -void stub_glSamplerParameterIiv() { - if(trigger_glSamplerParameterIiv) return; - trigger_glSamplerParameterIiv = true; - printf("Stub: glSamplerParameterIiv\n"); -} -static bool trigger_glSamplerParameterIuiv = false; -void stub_glSamplerParameterIuiv() { - if(trigger_glSamplerParameterIuiv) return; - trigger_glSamplerParameterIuiv = true; - printf("Stub: glSamplerParameterIuiv\n"); -} -static bool trigger_glGetSamplerParameteriv = false; -void stub_glGetSamplerParameteriv() { - if(trigger_glGetSamplerParameteriv) return; - trigger_glGetSamplerParameteriv = true; - printf("Stub: glGetSamplerParameteriv\n"); -} -static bool trigger_glGetSamplerParameterIiv = false; -void stub_glGetSamplerParameterIiv() { - if(trigger_glGetSamplerParameterIiv) return; - trigger_glGetSamplerParameterIiv = true; - printf("Stub: glGetSamplerParameterIiv\n"); -} -static bool trigger_glGetSamplerParameterfv = false; -void stub_glGetSamplerParameterfv() { - if(trigger_glGetSamplerParameterfv) return; - trigger_glGetSamplerParameterfv = true; - printf("Stub: glGetSamplerParameterfv\n"); -} -static bool trigger_glGetSamplerParameterIuiv = false; -void stub_glGetSamplerParameterIuiv() { - if(trigger_glGetSamplerParameterIuiv) return; - trigger_glGetSamplerParameterIuiv = true; - printf("Stub: glGetSamplerParameterIuiv\n"); -} -static bool trigger_glQueryCounter = false; -void stub_glQueryCounter() { - if(trigger_glQueryCounter) return; - trigger_glQueryCounter = true; - printf("Stub: glQueryCounter\n"); -} -static bool trigger_glGetQueryObjecti64v = false; -void stub_glGetQueryObjecti64v() { - if(trigger_glGetQueryObjecti64v) return; - trigger_glGetQueryObjecti64v = true; - printf("Stub: glGetQueryObjecti64v\n"); -} -static bool trigger_glGetQueryObjectui64v = false; -void stub_glGetQueryObjectui64v() { - if(trigger_glGetQueryObjectui64v) return; - trigger_glGetQueryObjectui64v = true; - printf("Stub: glGetQueryObjectui64v\n"); -} -static bool trigger_glVertexAttribDivisor = false; -void stub_glVertexAttribDivisor() { - if(trigger_glVertexAttribDivisor) return; - trigger_glVertexAttribDivisor = true; - printf("Stub: glVertexAttribDivisor\n"); -} -static bool trigger_glVertexAttribP1ui = false; -void stub_glVertexAttribP1ui() { - if(trigger_glVertexAttribP1ui) return; - trigger_glVertexAttribP1ui = true; - printf("Stub: glVertexAttribP1ui\n"); -} -static bool trigger_glVertexAttribP1uiv = false; -void stub_glVertexAttribP1uiv() { - if(trigger_glVertexAttribP1uiv) return; - trigger_glVertexAttribP1uiv = true; - printf("Stub: glVertexAttribP1uiv\n"); -} -static bool trigger_glVertexAttribP2ui = false; -void stub_glVertexAttribP2ui() { - if(trigger_glVertexAttribP2ui) return; - trigger_glVertexAttribP2ui = true; - printf("Stub: glVertexAttribP2ui\n"); -} -static bool trigger_glVertexAttribP2uiv = false; -void stub_glVertexAttribP2uiv() { - if(trigger_glVertexAttribP2uiv) return; - trigger_glVertexAttribP2uiv = true; - printf("Stub: glVertexAttribP2uiv\n"); -} -static bool trigger_glVertexAttribP3ui = false; -void stub_glVertexAttribP3ui() { - if(trigger_glVertexAttribP3ui) return; - trigger_glVertexAttribP3ui = true; - printf("Stub: glVertexAttribP3ui\n"); -} -static bool trigger_glVertexAttribP3uiv = false; -void stub_glVertexAttribP3uiv() { - if(trigger_glVertexAttribP3uiv) return; - trigger_glVertexAttribP3uiv = true; - printf("Stub: glVertexAttribP3uiv\n"); -} -static bool trigger_glVertexAttribP4ui = false; -void stub_glVertexAttribP4ui() { - if(trigger_glVertexAttribP4ui) return; - trigger_glVertexAttribP4ui = true; - printf("Stub: glVertexAttribP4ui\n"); -} -static bool trigger_glVertexAttribP4uiv = false; -void stub_glVertexAttribP4uiv() { - if(trigger_glVertexAttribP4uiv) return; - trigger_glVertexAttribP4uiv = true; - printf("Stub: glVertexAttribP4uiv\n"); -} -static bool trigger_glMinSampleShading = false; -void stub_glMinSampleShading() { - if(trigger_glMinSampleShading) return; - trigger_glMinSampleShading = true; - printf("Stub: glMinSampleShading\n"); -} -static bool trigger_glBlendEquationi = false; -void stub_glBlendEquationi() { - if(trigger_glBlendEquationi) return; - trigger_glBlendEquationi = true; - printf("Stub: glBlendEquationi\n"); -} -static bool trigger_glBlendEquationSeparatei = false; -void stub_glBlendEquationSeparatei() { - if(trigger_glBlendEquationSeparatei) return; - trigger_glBlendEquationSeparatei = true; - printf("Stub: glBlendEquationSeparatei\n"); -} -static bool trigger_glBlendFunci = false; -void stub_glBlendFunci() { - if(trigger_glBlendFunci) return; - trigger_glBlendFunci = true; - printf("Stub: glBlendFunci\n"); -} -static bool trigger_glBlendFuncSeparatei = false; -void stub_glBlendFuncSeparatei() { - if(trigger_glBlendFuncSeparatei) return; - trigger_glBlendFuncSeparatei = true; - printf("Stub: glBlendFuncSeparatei\n"); -} -static bool trigger_glDrawArraysIndirect = false; -void stub_glDrawArraysIndirect() { - if(trigger_glDrawArraysIndirect) return; - trigger_glDrawArraysIndirect = true; - printf("Stub: glDrawArraysIndirect\n"); -} -static bool trigger_glDrawElementsIndirect = false; -void stub_glDrawElementsIndirect() { - if(trigger_glDrawElementsIndirect) return; - trigger_glDrawElementsIndirect = true; - printf("Stub: glDrawElementsIndirect\n"); -} -static bool trigger_glUniform1d = false; -void stub_glUniform1d() { - if(trigger_glUniform1d) return; - trigger_glUniform1d = true; - printf("Stub: glUniform1d\n"); -} -static bool trigger_glUniform2d = false; -void stub_glUniform2d() { - if(trigger_glUniform2d) return; - trigger_glUniform2d = true; - printf("Stub: glUniform2d\n"); -} -static bool trigger_glUniform3d = false; -void stub_glUniform3d() { - if(trigger_glUniform3d) return; - trigger_glUniform3d = true; - printf("Stub: glUniform3d\n"); -} -static bool trigger_glUniform4d = false; -void stub_glUniform4d() { - if(trigger_glUniform4d) return; - trigger_glUniform4d = true; - printf("Stub: glUniform4d\n"); -} -static bool trigger_glUniform1dv = false; -void stub_glUniform1dv() { - if(trigger_glUniform1dv) return; - trigger_glUniform1dv = true; - printf("Stub: glUniform1dv\n"); -} -static bool trigger_glUniform2dv = false; -void stub_glUniform2dv() { - if(trigger_glUniform2dv) return; - trigger_glUniform2dv = true; - printf("Stub: glUniform2dv\n"); -} -static bool trigger_glUniform3dv = false; -void stub_glUniform3dv() { - if(trigger_glUniform3dv) return; - trigger_glUniform3dv = true; - printf("Stub: glUniform3dv\n"); -} -static bool trigger_glUniform4dv = false; -void stub_glUniform4dv() { - if(trigger_glUniform4dv) return; - trigger_glUniform4dv = true; - printf("Stub: glUniform4dv\n"); -} -static bool trigger_glUniformMatrix2dv = false; -void stub_glUniformMatrix2dv() { - if(trigger_glUniformMatrix2dv) return; - trigger_glUniformMatrix2dv = true; - printf("Stub: glUniformMatrix2dv\n"); -} -static bool trigger_glUniformMatrix3dv = false; -void stub_glUniformMatrix3dv() { - if(trigger_glUniformMatrix3dv) return; - trigger_glUniformMatrix3dv = true; - printf("Stub: glUniformMatrix3dv\n"); -} -static bool trigger_glUniformMatrix4dv = false; -void stub_glUniformMatrix4dv() { - if(trigger_glUniformMatrix4dv) return; - trigger_glUniformMatrix4dv = true; - printf("Stub: glUniformMatrix4dv\n"); -} -static bool trigger_glUniformMatrix2x3dv = false; -void stub_glUniformMatrix2x3dv() { - if(trigger_glUniformMatrix2x3dv) return; - trigger_glUniformMatrix2x3dv = true; - printf("Stub: glUniformMatrix2x3dv\n"); -} -static bool trigger_glUniformMatrix2x4dv = false; -void stub_glUniformMatrix2x4dv() { - if(trigger_glUniformMatrix2x4dv) return; - trigger_glUniformMatrix2x4dv = true; - printf("Stub: glUniformMatrix2x4dv\n"); -} -static bool trigger_glUniformMatrix3x2dv = false; -void stub_glUniformMatrix3x2dv() { - if(trigger_glUniformMatrix3x2dv) return; - trigger_glUniformMatrix3x2dv = true; - printf("Stub: glUniformMatrix3x2dv\n"); -} -static bool trigger_glUniformMatrix3x4dv = false; -void stub_glUniformMatrix3x4dv() { - if(trigger_glUniformMatrix3x4dv) return; - trigger_glUniformMatrix3x4dv = true; - printf("Stub: glUniformMatrix3x4dv\n"); -} -static bool trigger_glUniformMatrix4x2dv = false; -void stub_glUniformMatrix4x2dv() { - if(trigger_glUniformMatrix4x2dv) return; - trigger_glUniformMatrix4x2dv = true; - printf("Stub: glUniformMatrix4x2dv\n"); -} -static bool trigger_glUniformMatrix4x3dv = false; -void stub_glUniformMatrix4x3dv() { - if(trigger_glUniformMatrix4x3dv) return; - trigger_glUniformMatrix4x3dv = true; - printf("Stub: glUniformMatrix4x3dv\n"); -} -static bool trigger_glGetUniformdv = false; -void stub_glGetUniformdv() { - if(trigger_glGetUniformdv) return; - trigger_glGetUniformdv = true; - printf("Stub: glGetUniformdv\n"); -} -static bool trigger_glGetSubroutineUniformLocation = false; -void stub_glGetSubroutineUniformLocation() { - if(trigger_glGetSubroutineUniformLocation) return; - trigger_glGetSubroutineUniformLocation = true; - printf("Stub: glGetSubroutineUniformLocation\n"); -} -static bool trigger_glGetSubroutineIndex = false; -void stub_glGetSubroutineIndex() { - if(trigger_glGetSubroutineIndex) return; - trigger_glGetSubroutineIndex = true; - printf("Stub: glGetSubroutineIndex\n"); -} -static bool trigger_glGetActiveSubroutineUniformiv = false; -void stub_glGetActiveSubroutineUniformiv() { - if(trigger_glGetActiveSubroutineUniformiv) return; - trigger_glGetActiveSubroutineUniformiv = true; - printf("Stub: glGetActiveSubroutineUniformiv\n"); -} -static bool trigger_glGetActiveSubroutineUniformName = false; -void stub_glGetActiveSubroutineUniformName() { - if(trigger_glGetActiveSubroutineUniformName) return; - trigger_glGetActiveSubroutineUniformName = true; - printf("Stub: glGetActiveSubroutineUniformName\n"); -} -static bool trigger_glGetActiveSubroutineName = false; -void stub_glGetActiveSubroutineName() { - if(trigger_glGetActiveSubroutineName) return; - trigger_glGetActiveSubroutineName = true; - printf("Stub: glGetActiveSubroutineName\n"); -} -static bool trigger_glUniformSubroutinesuiv = false; -void stub_glUniformSubroutinesuiv() { - if(trigger_glUniformSubroutinesuiv) return; - trigger_glUniformSubroutinesuiv = true; - printf("Stub: glUniformSubroutinesuiv\n"); -} -static bool trigger_glGetUniformSubroutineuiv = false; -void stub_glGetUniformSubroutineuiv() { - if(trigger_glGetUniformSubroutineuiv) return; - trigger_glGetUniformSubroutineuiv = true; - printf("Stub: glGetUniformSubroutineuiv\n"); -} -static bool trigger_glGetProgramStageiv = false; -void stub_glGetProgramStageiv() { - if(trigger_glGetProgramStageiv) return; - trigger_glGetProgramStageiv = true; - printf("Stub: glGetProgramStageiv\n"); -} -static bool trigger_glPatchParameteri = false; -void stub_glPatchParameteri() { - if(trigger_glPatchParameteri) return; - trigger_glPatchParameteri = true; - printf("Stub: glPatchParameteri\n"); -} -static bool trigger_glPatchParameterfv = false; -void stub_glPatchParameterfv() { - if(trigger_glPatchParameterfv) return; - trigger_glPatchParameterfv = true; - printf("Stub: glPatchParameterfv\n"); -} -static bool trigger_glBindTransformFeedback = false; -void stub_glBindTransformFeedback() { - if(trigger_glBindTransformFeedback) return; - trigger_glBindTransformFeedback = true; - printf("Stub: glBindTransformFeedback\n"); -} -static bool trigger_glDeleteTransformFeedbacks = false; -void stub_glDeleteTransformFeedbacks() { - if(trigger_glDeleteTransformFeedbacks) return; - trigger_glDeleteTransformFeedbacks = true; - printf("Stub: glDeleteTransformFeedbacks\n"); -} -static bool trigger_glGenTransformFeedbacks = false; -void stub_glGenTransformFeedbacks() { - if(trigger_glGenTransformFeedbacks) return; - trigger_glGenTransformFeedbacks = true; - printf("Stub: glGenTransformFeedbacks\n"); -} -static bool trigger_glIsTransformFeedback = false; -void stub_glIsTransformFeedback() { - if(trigger_glIsTransformFeedback) return; - trigger_glIsTransformFeedback = true; - printf("Stub: glIsTransformFeedback\n"); -} -static bool trigger_glPauseTransformFeedback = false; -void stub_glPauseTransformFeedback() { - if(trigger_glPauseTransformFeedback) return; - trigger_glPauseTransformFeedback = true; - printf("Stub: glPauseTransformFeedback\n"); -} -static bool trigger_glResumeTransformFeedback = false; -void stub_glResumeTransformFeedback() { - if(trigger_glResumeTransformFeedback) return; - trigger_glResumeTransformFeedback = true; - printf("Stub: glResumeTransformFeedback\n"); -} -static bool trigger_glDrawTransformFeedback = false; -void stub_glDrawTransformFeedback() { - if(trigger_glDrawTransformFeedback) return; - trigger_glDrawTransformFeedback = true; - printf("Stub: glDrawTransformFeedback\n"); -} -static bool trigger_glDrawTransformFeedbackStream = false; -void stub_glDrawTransformFeedbackStream() { - if(trigger_glDrawTransformFeedbackStream) return; - trigger_glDrawTransformFeedbackStream = true; - printf("Stub: glDrawTransformFeedbackStream\n"); -} -static bool trigger_glBeginQueryIndexed = false; -void stub_glBeginQueryIndexed() { - if(trigger_glBeginQueryIndexed) return; - trigger_glBeginQueryIndexed = true; - printf("Stub: glBeginQueryIndexed\n"); -} -static bool trigger_glEndQueryIndexed = false; -void stub_glEndQueryIndexed() { - if(trigger_glEndQueryIndexed) return; - trigger_glEndQueryIndexed = true; - printf("Stub: glEndQueryIndexed\n"); -} -static bool trigger_glGetQueryIndexediv = false; -void stub_glGetQueryIndexediv() { - if(trigger_glGetQueryIndexediv) return; - trigger_glGetQueryIndexediv = true; - printf("Stub: glGetQueryIndexediv\n"); -} -static bool trigger_glReleaseShaderCompiler = false; -void stub_glReleaseShaderCompiler() { - if(trigger_glReleaseShaderCompiler) return; - trigger_glReleaseShaderCompiler = true; - printf("Stub: glReleaseShaderCompiler\n"); -} -static bool trigger_glShaderBinary = false; -void stub_glShaderBinary() { - if(trigger_glShaderBinary) return; - trigger_glShaderBinary = true; - printf("Stub: glShaderBinary\n"); -} -static bool trigger_glGetShaderPrecisionFormat = false; -void stub_glGetShaderPrecisionFormat() { - if(trigger_glGetShaderPrecisionFormat) return; - trigger_glGetShaderPrecisionFormat = true; - printf("Stub: glGetShaderPrecisionFormat\n"); -} -static bool trigger_glDepthRangef = false; -void stub_glDepthRangef() { - if(trigger_glDepthRangef) return; - trigger_glDepthRangef = true; - printf("Stub: glDepthRangef\n"); -} -static bool trigger_glClearDepthf = false; -void stub_glClearDepthf() { - if(trigger_glClearDepthf) return; - trigger_glClearDepthf = true; - printf("Stub: glClearDepthf\n"); -} -static bool trigger_glGetProgramBinary = false; -void stub_glGetProgramBinary() { - if(trigger_glGetProgramBinary) return; - trigger_glGetProgramBinary = true; - printf("Stub: glGetProgramBinary\n"); -} -static bool trigger_glProgramBinary = false; -void stub_glProgramBinary() { - if(trigger_glProgramBinary) return; - trigger_glProgramBinary = true; - printf("Stub: glProgramBinary\n"); -} -static bool trigger_glProgramParameteri = false; -void stub_glProgramParameteri() { - if(trigger_glProgramParameteri) return; - trigger_glProgramParameteri = true; - printf("Stub: glProgramParameteri\n"); -} -static bool trigger_glUseProgramStages = false; -void stub_glUseProgramStages() { - if(trigger_glUseProgramStages) return; - trigger_glUseProgramStages = true; - printf("Stub: glUseProgramStages\n"); -} -static bool trigger_glActiveShaderProgram = false; -void stub_glActiveShaderProgram() { - if(trigger_glActiveShaderProgram) return; - trigger_glActiveShaderProgram = true; - printf("Stub: glActiveShaderProgram\n"); -} -static bool trigger_glCreateShaderProgramv = false; -void stub_glCreateShaderProgramv() { - if(trigger_glCreateShaderProgramv) return; - trigger_glCreateShaderProgramv = true; - printf("Stub: glCreateShaderProgramv\n"); -} -static bool trigger_glBindProgramPipeline = false; -void stub_glBindProgramPipeline() { - if(trigger_glBindProgramPipeline) return; - trigger_glBindProgramPipeline = true; - printf("Stub: glBindProgramPipeline\n"); -} -static bool trigger_glDeleteProgramPipelines = false; -void stub_glDeleteProgramPipelines() { - if(trigger_glDeleteProgramPipelines) return; - trigger_glDeleteProgramPipelines = true; - printf("Stub: glDeleteProgramPipelines\n"); -} -static bool trigger_glGenProgramPipelines = false; -void stub_glGenProgramPipelines() { - if(trigger_glGenProgramPipelines) return; - trigger_glGenProgramPipelines = true; - printf("Stub: glGenProgramPipelines\n"); -} -static bool trigger_glIsProgramPipeline = false; -void stub_glIsProgramPipeline() { - if(trigger_glIsProgramPipeline) return; - trigger_glIsProgramPipeline = true; - printf("Stub: glIsProgramPipeline\n"); -} -static bool trigger_glGetProgramPipelineiv = false; -void stub_glGetProgramPipelineiv() { - if(trigger_glGetProgramPipelineiv) return; - trigger_glGetProgramPipelineiv = true; - printf("Stub: glGetProgramPipelineiv\n"); -} -static bool trigger_glProgramUniform1i = false; -void stub_glProgramUniform1i() { - if(trigger_glProgramUniform1i) return; - trigger_glProgramUniform1i = true; - printf("Stub: glProgramUniform1i\n"); -} -static bool trigger_glProgramUniform1iv = false; -void stub_glProgramUniform1iv() { - if(trigger_glProgramUniform1iv) return; - trigger_glProgramUniform1iv = true; - printf("Stub: glProgramUniform1iv\n"); -} -static bool trigger_glProgramUniform1f = false; -void stub_glProgramUniform1f() { - if(trigger_glProgramUniform1f) return; - trigger_glProgramUniform1f = true; - printf("Stub: glProgramUniform1f\n"); -} -static bool trigger_glProgramUniform1fv = false; -void stub_glProgramUniform1fv() { - if(trigger_glProgramUniform1fv) return; - trigger_glProgramUniform1fv = true; - printf("Stub: glProgramUniform1fv\n"); -} -static bool trigger_glProgramUniform1d = false; -void stub_glProgramUniform1d() { - if(trigger_glProgramUniform1d) return; - trigger_glProgramUniform1d = true; - printf("Stub: glProgramUniform1d\n"); -} -static bool trigger_glProgramUniform1dv = false; -void stub_glProgramUniform1dv() { - if(trigger_glProgramUniform1dv) return; - trigger_glProgramUniform1dv = true; - printf("Stub: glProgramUniform1dv\n"); -} -static bool trigger_glProgramUniform1ui = false; -void stub_glProgramUniform1ui() { - if(trigger_glProgramUniform1ui) return; - trigger_glProgramUniform1ui = true; - printf("Stub: glProgramUniform1ui\n"); -} -static bool trigger_glProgramUniform1uiv = false; -void stub_glProgramUniform1uiv() { - if(trigger_glProgramUniform1uiv) return; - trigger_glProgramUniform1uiv = true; - printf("Stub: glProgramUniform1uiv\n"); -} -static bool trigger_glProgramUniform2i = false; -void stub_glProgramUniform2i() { - if(trigger_glProgramUniform2i) return; - trigger_glProgramUniform2i = true; - printf("Stub: glProgramUniform2i\n"); -} -static bool trigger_glProgramUniform2iv = false; -void stub_glProgramUniform2iv() { - if(trigger_glProgramUniform2iv) return; - trigger_glProgramUniform2iv = true; - printf("Stub: glProgramUniform2iv\n"); -} -static bool trigger_glProgramUniform2f = false; -void stub_glProgramUniform2f() { - if(trigger_glProgramUniform2f) return; - trigger_glProgramUniform2f = true; - printf("Stub: glProgramUniform2f\n"); -} -static bool trigger_glProgramUniform2fv = false; -void stub_glProgramUniform2fv() { - if(trigger_glProgramUniform2fv) return; - trigger_glProgramUniform2fv = true; - printf("Stub: glProgramUniform2fv\n"); -} -static bool trigger_glProgramUniform2d = false; -void stub_glProgramUniform2d() { - if(trigger_glProgramUniform2d) return; - trigger_glProgramUniform2d = true; - printf("Stub: glProgramUniform2d\n"); -} -static bool trigger_glProgramUniform2dv = false; -void stub_glProgramUniform2dv() { - if(trigger_glProgramUniform2dv) return; - trigger_glProgramUniform2dv = true; - printf("Stub: glProgramUniform2dv\n"); -} -static bool trigger_glProgramUniform2ui = false; -void stub_glProgramUniform2ui() { - if(trigger_glProgramUniform2ui) return; - trigger_glProgramUniform2ui = true; - printf("Stub: glProgramUniform2ui\n"); -} -static bool trigger_glProgramUniform2uiv = false; -void stub_glProgramUniform2uiv() { - if(trigger_glProgramUniform2uiv) return; - trigger_glProgramUniform2uiv = true; - printf("Stub: glProgramUniform2uiv\n"); -} -static bool trigger_glProgramUniform3i = false; -void stub_glProgramUniform3i() { - if(trigger_glProgramUniform3i) return; - trigger_glProgramUniform3i = true; - printf("Stub: glProgramUniform3i\n"); -} -static bool trigger_glProgramUniform3iv = false; -void stub_glProgramUniform3iv() { - if(trigger_glProgramUniform3iv) return; - trigger_glProgramUniform3iv = true; - printf("Stub: glProgramUniform3iv\n"); -} -static bool trigger_glProgramUniform3f = false; -void stub_glProgramUniform3f() { - if(trigger_glProgramUniform3f) return; - trigger_glProgramUniform3f = true; - printf("Stub: glProgramUniform3f\n"); -} -static bool trigger_glProgramUniform3fv = false; -void stub_glProgramUniform3fv() { - if(trigger_glProgramUniform3fv) return; - trigger_glProgramUniform3fv = true; - printf("Stub: glProgramUniform3fv\n"); -} -static bool trigger_glProgramUniform3d = false; -void stub_glProgramUniform3d() { - if(trigger_glProgramUniform3d) return; - trigger_glProgramUniform3d = true; - printf("Stub: glProgramUniform3d\n"); -} -static bool trigger_glProgramUniform3dv = false; -void stub_glProgramUniform3dv() { - if(trigger_glProgramUniform3dv) return; - trigger_glProgramUniform3dv = true; - printf("Stub: glProgramUniform3dv\n"); -} -static bool trigger_glProgramUniform3ui = false; -void stub_glProgramUniform3ui() { - if(trigger_glProgramUniform3ui) return; - trigger_glProgramUniform3ui = true; - printf("Stub: glProgramUniform3ui\n"); -} -static bool trigger_glProgramUniform3uiv = false; -void stub_glProgramUniform3uiv() { - if(trigger_glProgramUniform3uiv) return; - trigger_glProgramUniform3uiv = true; - printf("Stub: glProgramUniform3uiv\n"); -} -static bool trigger_glProgramUniform4i = false; -void stub_glProgramUniform4i() { - if(trigger_glProgramUniform4i) return; - trigger_glProgramUniform4i = true; - printf("Stub: glProgramUniform4i\n"); -} -static bool trigger_glProgramUniform4iv = false; -void stub_glProgramUniform4iv() { - if(trigger_glProgramUniform4iv) return; - trigger_glProgramUniform4iv = true; - printf("Stub: glProgramUniform4iv\n"); -} -static bool trigger_glProgramUniform4f = false; -void stub_glProgramUniform4f() { - if(trigger_glProgramUniform4f) return; - trigger_glProgramUniform4f = true; - printf("Stub: glProgramUniform4f\n"); -} -static bool trigger_glProgramUniform4fv = false; -void stub_glProgramUniform4fv() { - if(trigger_glProgramUniform4fv) return; - trigger_glProgramUniform4fv = true; - printf("Stub: glProgramUniform4fv\n"); -} -static bool trigger_glProgramUniform4d = false; -void stub_glProgramUniform4d() { - if(trigger_glProgramUniform4d) return; - trigger_glProgramUniform4d = true; - printf("Stub: glProgramUniform4d\n"); -} -static bool trigger_glProgramUniform4dv = false; -void stub_glProgramUniform4dv() { - if(trigger_glProgramUniform4dv) return; - trigger_glProgramUniform4dv = true; - printf("Stub: glProgramUniform4dv\n"); -} -static bool trigger_glProgramUniform4ui = false; -void stub_glProgramUniform4ui() { - if(trigger_glProgramUniform4ui) return; - trigger_glProgramUniform4ui = true; - printf("Stub: glProgramUniform4ui\n"); -} -static bool trigger_glProgramUniform4uiv = false; -void stub_glProgramUniform4uiv() { - if(trigger_glProgramUniform4uiv) return; - trigger_glProgramUniform4uiv = true; - printf("Stub: glProgramUniform4uiv\n"); -} -static bool trigger_glProgramUniformMatrix2fv = false; -void stub_glProgramUniformMatrix2fv() { - if(trigger_glProgramUniformMatrix2fv) return; - trigger_glProgramUniformMatrix2fv = true; - printf("Stub: glProgramUniformMatrix2fv\n"); -} -static bool trigger_glProgramUniformMatrix3fv = false; -void stub_glProgramUniformMatrix3fv() { - if(trigger_glProgramUniformMatrix3fv) return; - trigger_glProgramUniformMatrix3fv = true; - printf("Stub: glProgramUniformMatrix3fv\n"); -} -static bool trigger_glProgramUniformMatrix4fv = false; -void stub_glProgramUniformMatrix4fv() { - if(trigger_glProgramUniformMatrix4fv) return; - trigger_glProgramUniformMatrix4fv = true; - printf("Stub: glProgramUniformMatrix4fv\n"); -} -static bool trigger_glProgramUniformMatrix2dv = false; -void stub_glProgramUniformMatrix2dv() { - if(trigger_glProgramUniformMatrix2dv) return; - trigger_glProgramUniformMatrix2dv = true; - printf("Stub: glProgramUniformMatrix2dv\n"); -} -static bool trigger_glProgramUniformMatrix3dv = false; -void stub_glProgramUniformMatrix3dv() { - if(trigger_glProgramUniformMatrix3dv) return; - trigger_glProgramUniformMatrix3dv = true; - printf("Stub: glProgramUniformMatrix3dv\n"); -} -static bool trigger_glProgramUniformMatrix4dv = false; -void stub_glProgramUniformMatrix4dv() { - if(trigger_glProgramUniformMatrix4dv) return; - trigger_glProgramUniformMatrix4dv = true; - printf("Stub: glProgramUniformMatrix4dv\n"); -} -static bool trigger_glProgramUniformMatrix2x3fv = false; -void stub_glProgramUniformMatrix2x3fv() { - if(trigger_glProgramUniformMatrix2x3fv) return; - trigger_glProgramUniformMatrix2x3fv = true; - printf("Stub: glProgramUniformMatrix2x3fv\n"); -} -static bool trigger_glProgramUniformMatrix3x2fv = false; -void stub_glProgramUniformMatrix3x2fv() { - if(trigger_glProgramUniformMatrix3x2fv) return; - trigger_glProgramUniformMatrix3x2fv = true; - printf("Stub: glProgramUniformMatrix3x2fv\n"); -} -static bool trigger_glProgramUniformMatrix2x4fv = false; -void stub_glProgramUniformMatrix2x4fv() { - if(trigger_glProgramUniformMatrix2x4fv) return; - trigger_glProgramUniformMatrix2x4fv = true; - printf("Stub: glProgramUniformMatrix2x4fv\n"); -} -static bool trigger_glProgramUniformMatrix4x2fv = false; -void stub_glProgramUniformMatrix4x2fv() { - if(trigger_glProgramUniformMatrix4x2fv) return; - trigger_glProgramUniformMatrix4x2fv = true; - printf("Stub: glProgramUniformMatrix4x2fv\n"); -} -static bool trigger_glProgramUniformMatrix3x4fv = false; -void stub_glProgramUniformMatrix3x4fv() { - if(trigger_glProgramUniformMatrix3x4fv) return; - trigger_glProgramUniformMatrix3x4fv = true; - printf("Stub: glProgramUniformMatrix3x4fv\n"); -} -static bool trigger_glProgramUniformMatrix4x3fv = false; -void stub_glProgramUniformMatrix4x3fv() { - if(trigger_glProgramUniformMatrix4x3fv) return; - trigger_glProgramUniformMatrix4x3fv = true; - printf("Stub: glProgramUniformMatrix4x3fv\n"); -} -static bool trigger_glProgramUniformMatrix2x3dv = false; -void stub_glProgramUniformMatrix2x3dv() { - if(trigger_glProgramUniformMatrix2x3dv) return; - trigger_glProgramUniformMatrix2x3dv = true; - printf("Stub: glProgramUniformMatrix2x3dv\n"); -} -static bool trigger_glProgramUniformMatrix3x2dv = false; -void stub_glProgramUniformMatrix3x2dv() { - if(trigger_glProgramUniformMatrix3x2dv) return; - trigger_glProgramUniformMatrix3x2dv = true; - printf("Stub: glProgramUniformMatrix3x2dv\n"); -} -static bool trigger_glProgramUniformMatrix2x4dv = false; -void stub_glProgramUniformMatrix2x4dv() { - if(trigger_glProgramUniformMatrix2x4dv) return; - trigger_glProgramUniformMatrix2x4dv = true; - printf("Stub: glProgramUniformMatrix2x4dv\n"); -} -static bool trigger_glProgramUniformMatrix4x2dv = false; -void stub_glProgramUniformMatrix4x2dv() { - if(trigger_glProgramUniformMatrix4x2dv) return; - trigger_glProgramUniformMatrix4x2dv = true; - printf("Stub: glProgramUniformMatrix4x2dv\n"); -} -static bool trigger_glProgramUniformMatrix3x4dv = false; -void stub_glProgramUniformMatrix3x4dv() { - if(trigger_glProgramUniformMatrix3x4dv) return; - trigger_glProgramUniformMatrix3x4dv = true; - printf("Stub: glProgramUniformMatrix3x4dv\n"); -} -static bool trigger_glProgramUniformMatrix4x3dv = false; -void stub_glProgramUniformMatrix4x3dv() { - if(trigger_glProgramUniformMatrix4x3dv) return; - trigger_glProgramUniformMatrix4x3dv = true; - printf("Stub: glProgramUniformMatrix4x3dv\n"); -} -static bool trigger_glValidateProgramPipeline = false; -void stub_glValidateProgramPipeline() { - if(trigger_glValidateProgramPipeline) return; - trigger_glValidateProgramPipeline = true; - printf("Stub: glValidateProgramPipeline\n"); -} -static bool trigger_glGetProgramPipelineInfoLog = false; -void stub_glGetProgramPipelineInfoLog() { - if(trigger_glGetProgramPipelineInfoLog) return; - trigger_glGetProgramPipelineInfoLog = true; - printf("Stub: glGetProgramPipelineInfoLog\n"); -} -static bool trigger_glVertexAttribL1d = false; -void stub_glVertexAttribL1d() { - if(trigger_glVertexAttribL1d) return; - trigger_glVertexAttribL1d = true; - printf("Stub: glVertexAttribL1d\n"); -} -static bool trigger_glVertexAttribL2d = false; -void stub_glVertexAttribL2d() { - if(trigger_glVertexAttribL2d) return; - trigger_glVertexAttribL2d = true; - printf("Stub: glVertexAttribL2d\n"); -} -static bool trigger_glVertexAttribL3d = false; -void stub_glVertexAttribL3d() { - if(trigger_glVertexAttribL3d) return; - trigger_glVertexAttribL3d = true; - printf("Stub: glVertexAttribL3d\n"); -} -static bool trigger_glVertexAttribL4d = false; -void stub_glVertexAttribL4d() { - if(trigger_glVertexAttribL4d) return; - trigger_glVertexAttribL4d = true; - printf("Stub: glVertexAttribL4d\n"); -} -static bool trigger_glVertexAttribL1dv = false; -void stub_glVertexAttribL1dv() { - if(trigger_glVertexAttribL1dv) return; - trigger_glVertexAttribL1dv = true; - printf("Stub: glVertexAttribL1dv\n"); -} -static bool trigger_glVertexAttribL2dv = false; -void stub_glVertexAttribL2dv() { - if(trigger_glVertexAttribL2dv) return; - trigger_glVertexAttribL2dv = true; - printf("Stub: glVertexAttribL2dv\n"); -} -static bool trigger_glVertexAttribL3dv = false; -void stub_glVertexAttribL3dv() { - if(trigger_glVertexAttribL3dv) return; - trigger_glVertexAttribL3dv = true; - printf("Stub: glVertexAttribL3dv\n"); -} -static bool trigger_glVertexAttribL4dv = false; -void stub_glVertexAttribL4dv() { - if(trigger_glVertexAttribL4dv) return; - trigger_glVertexAttribL4dv = true; - printf("Stub: glVertexAttribL4dv\n"); -} -static bool trigger_glVertexAttribLPointer = false; -void stub_glVertexAttribLPointer() { - if(trigger_glVertexAttribLPointer) return; - trigger_glVertexAttribLPointer = true; - printf("Stub: glVertexAttribLPointer\n"); -} -static bool trigger_glGetVertexAttribLdv = false; -void stub_glGetVertexAttribLdv() { - if(trigger_glGetVertexAttribLdv) return; - trigger_glGetVertexAttribLdv = true; - printf("Stub: glGetVertexAttribLdv\n"); -} -static bool trigger_glViewportArrayv = false; -void stub_glViewportArrayv() { - if(trigger_glViewportArrayv) return; - trigger_glViewportArrayv = true; - printf("Stub: glViewportArrayv\n"); -} -static bool trigger_glViewportIndexedf = false; -void stub_glViewportIndexedf() { - if(trigger_glViewportIndexedf) return; - trigger_glViewportIndexedf = true; - printf("Stub: glViewportIndexedf\n"); -} -static bool trigger_glViewportIndexedfv = false; -void stub_glViewportIndexedfv() { - if(trigger_glViewportIndexedfv) return; - trigger_glViewportIndexedfv = true; - printf("Stub: glViewportIndexedfv\n"); -} -static bool trigger_glScissorArrayv = false; -void stub_glScissorArrayv() { - if(trigger_glScissorArrayv) return; - trigger_glScissorArrayv = true; - printf("Stub: glScissorArrayv\n"); -} -static bool trigger_glScissorIndexed = false; -void stub_glScissorIndexed() { - if(trigger_glScissorIndexed) return; - trigger_glScissorIndexed = true; - printf("Stub: glScissorIndexed\n"); -} -static bool trigger_glScissorIndexedv = false; -void stub_glScissorIndexedv() { - if(trigger_glScissorIndexedv) return; - trigger_glScissorIndexedv = true; - printf("Stub: glScissorIndexedv\n"); -} -static bool trigger_glDepthRangeArrayv = false; -void stub_glDepthRangeArrayv() { - if(trigger_glDepthRangeArrayv) return; - trigger_glDepthRangeArrayv = true; - printf("Stub: glDepthRangeArrayv\n"); -} -static bool trigger_glDepthRangeIndexed = false; -void stub_glDepthRangeIndexed() { - if(trigger_glDepthRangeIndexed) return; - trigger_glDepthRangeIndexed = true; - printf("Stub: glDepthRangeIndexed\n"); -} -static bool trigger_glGetFloati_v = false; -void stub_glGetFloati_v() { - if(trigger_glGetFloati_v) return; - trigger_glGetFloati_v = true; - printf("Stub: glGetFloati_v\n"); -} -static bool trigger_glGetDoublei_v = false; -void stub_glGetDoublei_v() { - if(trigger_glGetDoublei_v) return; - trigger_glGetDoublei_v = true; - printf("Stub: glGetDoublei_v\n"); -} -static bool trigger_glDrawArraysInstancedBaseInstance = false; -void stub_glDrawArraysInstancedBaseInstance() { - if(trigger_glDrawArraysInstancedBaseInstance) return; - trigger_glDrawArraysInstancedBaseInstance = true; - printf("Stub: glDrawArraysInstancedBaseInstance\n"); -} -static bool trigger_glDrawElementsInstancedBaseInstance = false; -void stub_glDrawElementsInstancedBaseInstance() { - if(trigger_glDrawElementsInstancedBaseInstance) return; - trigger_glDrawElementsInstancedBaseInstance = true; - printf("Stub: glDrawElementsInstancedBaseInstance\n"); -} -static bool trigger_glDrawElementsInstancedBaseVertexBaseInstance = false; -void stub_glDrawElementsInstancedBaseVertexBaseInstance() { - if(trigger_glDrawElementsInstancedBaseVertexBaseInstance) return; - trigger_glDrawElementsInstancedBaseVertexBaseInstance = true; - printf("Stub: glDrawElementsInstancedBaseVertexBaseInstance\n"); -} -static bool trigger_glGetInternalformativ = false; -void stub_glGetInternalformativ() { - if(trigger_glGetInternalformativ) return; - trigger_glGetInternalformativ = true; - printf("Stub: glGetInternalformativ\n"); -} -static bool trigger_glGetActiveAtomicCounterBufferiv = false; -void stub_glGetActiveAtomicCounterBufferiv() { - if(trigger_glGetActiveAtomicCounterBufferiv) return; - trigger_glGetActiveAtomicCounterBufferiv = true; - printf("Stub: glGetActiveAtomicCounterBufferiv\n"); -} -static bool trigger_glBindImageTexture = false; -void stub_glBindImageTexture() { - if(trigger_glBindImageTexture) return; - trigger_glBindImageTexture = true; - printf("Stub: glBindImageTexture\n"); -} -static bool trigger_glMemoryBarrier = false; -void stub_glMemoryBarrier() { - if(trigger_glMemoryBarrier) return; - trigger_glMemoryBarrier = true; - printf("Stub: glMemoryBarrier\n"); -} -static bool trigger_glTexStorage1D = false; -void stub_glTexStorage1D() { - if(trigger_glTexStorage1D) return; - trigger_glTexStorage1D = true; - printf("Stub: glTexStorage1D\n"); -} -static bool trigger_glTexStorage2D = false; -void stub_glTexStorage2D() { - if(trigger_glTexStorage2D) return; - trigger_glTexStorage2D = true; - printf("Stub: glTexStorage2D\n"); -} -static bool trigger_glTexStorage3D = false; -void stub_glTexStorage3D() { - if(trigger_glTexStorage3D) return; - trigger_glTexStorage3D = true; - printf("Stub: glTexStorage3D\n"); -} -static bool trigger_glDrawTransformFeedbackInstanced = false; -void stub_glDrawTransformFeedbackInstanced() { - if(trigger_glDrawTransformFeedbackInstanced) return; - trigger_glDrawTransformFeedbackInstanced = true; - printf("Stub: glDrawTransformFeedbackInstanced\n"); -} -static bool trigger_glDrawTransformFeedbackStreamInstanced = false; -void stub_glDrawTransformFeedbackStreamInstanced() { - if(trigger_glDrawTransformFeedbackStreamInstanced) return; - trigger_glDrawTransformFeedbackStreamInstanced = true; - printf("Stub: glDrawTransformFeedbackStreamInstanced\n"); -} -static bool trigger_glClearBufferData = false; -void stub_glClearBufferData() { - if(trigger_glClearBufferData) return; - trigger_glClearBufferData = true; - printf("Stub: glClearBufferData\n"); -} -static bool trigger_glClearBufferSubData = false; -void stub_glClearBufferSubData() { - if(trigger_glClearBufferSubData) return; - trigger_glClearBufferSubData = true; - printf("Stub: glClearBufferSubData\n"); -} -static bool trigger_glDispatchCompute = false; -void stub_glDispatchCompute() { - if(trigger_glDispatchCompute) return; - trigger_glDispatchCompute = true; - printf("Stub: glDispatchCompute\n"); -} -static bool trigger_glDispatchComputeIndirect = false; -void stub_glDispatchComputeIndirect() { - if(trigger_glDispatchComputeIndirect) return; - trigger_glDispatchComputeIndirect = true; - printf("Stub: glDispatchComputeIndirect\n"); -} -static bool trigger_glCopyImageSubData = false; -void stub_glCopyImageSubData() { - if(trigger_glCopyImageSubData) return; - trigger_glCopyImageSubData = true; - printf("Stub: glCopyImageSubData\n"); -} -static bool trigger_glFramebufferParameteri = false; -void stub_glFramebufferParameteri() { - if(trigger_glFramebufferParameteri) return; - trigger_glFramebufferParameteri = true; - printf("Stub: glFramebufferParameteri\n"); -} -static bool trigger_glGetFramebufferParameteriv = false; -void stub_glGetFramebufferParameteriv() { - if(trigger_glGetFramebufferParameteriv) return; - trigger_glGetFramebufferParameteriv = true; - printf("Stub: glGetFramebufferParameteriv\n"); -} -static bool trigger_glGetInternalformati64v = false; -void stub_glGetInternalformati64v() { - if(trigger_glGetInternalformati64v) return; - trigger_glGetInternalformati64v = true; - printf("Stub: glGetInternalformati64v\n"); -} -static bool trigger_glInvalidateTexSubImage = false; -void stub_glInvalidateTexSubImage() { - if(trigger_glInvalidateTexSubImage) return; - trigger_glInvalidateTexSubImage = true; - printf("Stub: glInvalidateTexSubImage\n"); -} -static bool trigger_glInvalidateTexImage = false; -void stub_glInvalidateTexImage() { - if(trigger_glInvalidateTexImage) return; - trigger_glInvalidateTexImage = true; - printf("Stub: glInvalidateTexImage\n"); -} -static bool trigger_glInvalidateBufferSubData = false; -void stub_glInvalidateBufferSubData() { - if(trigger_glInvalidateBufferSubData) return; - trigger_glInvalidateBufferSubData = true; - printf("Stub: glInvalidateBufferSubData\n"); -} -static bool trigger_glInvalidateBufferData = false; -void stub_glInvalidateBufferData() { - if(trigger_glInvalidateBufferData) return; - trigger_glInvalidateBufferData = true; - printf("Stub: glInvalidateBufferData\n"); -} -static bool trigger_glInvalidateFramebuffer = false; -void stub_glInvalidateFramebuffer() { - if(trigger_glInvalidateFramebuffer) return; - trigger_glInvalidateFramebuffer = true; - printf("Stub: glInvalidateFramebuffer\n"); -} -static bool trigger_glInvalidateSubFramebuffer = false; -void stub_glInvalidateSubFramebuffer() { - if(trigger_glInvalidateSubFramebuffer) return; - trigger_glInvalidateSubFramebuffer = true; - printf("Stub: glInvalidateSubFramebuffer\n"); -} -static bool trigger_glMultiDrawArraysIndirect = false; -void stub_glMultiDrawArraysIndirect() { - if(trigger_glMultiDrawArraysIndirect) return; - trigger_glMultiDrawArraysIndirect = true; - printf("Stub: glMultiDrawArraysIndirect\n"); -} -static bool trigger_glMultiDrawElementsIndirect = false; -void stub_glMultiDrawElementsIndirect() { - if(trigger_glMultiDrawElementsIndirect) return; - trigger_glMultiDrawElementsIndirect = true; - printf("Stub: glMultiDrawElementsIndirect\n"); -} -static bool trigger_glGetProgramInterfaceiv = false; -void stub_glGetProgramInterfaceiv() { - if(trigger_glGetProgramInterfaceiv) return; - trigger_glGetProgramInterfaceiv = true; - printf("Stub: glGetProgramInterfaceiv\n"); -} -static bool trigger_glGetProgramResourceIndex = false; -void stub_glGetProgramResourceIndex() { - if(trigger_glGetProgramResourceIndex) return; - trigger_glGetProgramResourceIndex = true; - printf("Stub: glGetProgramResourceIndex\n"); -} -static bool trigger_glGetProgramResourceName = false; -void stub_glGetProgramResourceName() { - if(trigger_glGetProgramResourceName) return; - trigger_glGetProgramResourceName = true; - printf("Stub: glGetProgramResourceName\n"); -} -static bool trigger_glGetProgramResourceiv = false; -void stub_glGetProgramResourceiv() { - if(trigger_glGetProgramResourceiv) return; - trigger_glGetProgramResourceiv = true; - printf("Stub: glGetProgramResourceiv\n"); -} -static bool trigger_glGetProgramResourceLocation = false; -void stub_glGetProgramResourceLocation() { - if(trigger_glGetProgramResourceLocation) return; - trigger_glGetProgramResourceLocation = true; - printf("Stub: glGetProgramResourceLocation\n"); -} -static bool trigger_glGetProgramResourceLocationIndex = false; -void stub_glGetProgramResourceLocationIndex() { - if(trigger_glGetProgramResourceLocationIndex) return; - trigger_glGetProgramResourceLocationIndex = true; - printf("Stub: glGetProgramResourceLocationIndex\n"); -} -static bool trigger_glShaderStorageBlockBinding = false; -void stub_glShaderStorageBlockBinding() { - if(trigger_glShaderStorageBlockBinding) return; - trigger_glShaderStorageBlockBinding = true; - printf("Stub: glShaderStorageBlockBinding\n"); -} -static bool trigger_glTexBufferRange = false; -void stub_glTexBufferRange() { - if(trigger_glTexBufferRange) return; - trigger_glTexBufferRange = true; - printf("Stub: glTexBufferRange\n"); -} -static bool trigger_glTexStorage2DMultisample = false; -void stub_glTexStorage2DMultisample() { - if(trigger_glTexStorage2DMultisample) return; - trigger_glTexStorage2DMultisample = true; - printf("Stub: glTexStorage2DMultisample\n"); -} -static bool trigger_glTexStorage3DMultisample = false; -void stub_glTexStorage3DMultisample() { - if(trigger_glTexStorage3DMultisample) return; - trigger_glTexStorage3DMultisample = true; - printf("Stub: glTexStorage3DMultisample\n"); -} -static bool trigger_glTextureView = false; -void stub_glTextureView() { - if(trigger_glTextureView) return; - trigger_glTextureView = true; - printf("Stub: glTextureView\n"); -} -static bool trigger_glBindVertexBuffer = false; -void stub_glBindVertexBuffer() { - if(trigger_glBindVertexBuffer) return; - trigger_glBindVertexBuffer = true; - printf("Stub: glBindVertexBuffer\n"); -} -static bool trigger_glVertexAttribFormat = false; -void stub_glVertexAttribFormat() { - if(trigger_glVertexAttribFormat) return; - trigger_glVertexAttribFormat = true; - printf("Stub: glVertexAttribFormat\n"); -} -static bool trigger_glVertexAttribIFormat = false; -void stub_glVertexAttribIFormat() { - if(trigger_glVertexAttribIFormat) return; - trigger_glVertexAttribIFormat = true; - printf("Stub: glVertexAttribIFormat\n"); -} -static bool trigger_glVertexAttribLFormat = false; -void stub_glVertexAttribLFormat() { - if(trigger_glVertexAttribLFormat) return; - trigger_glVertexAttribLFormat = true; - printf("Stub: glVertexAttribLFormat\n"); -} -static bool trigger_glVertexAttribBinding = false; -void stub_glVertexAttribBinding() { - if(trigger_glVertexAttribBinding) return; - trigger_glVertexAttribBinding = true; - printf("Stub: glVertexAttribBinding\n"); -} -static bool trigger_glVertexBindingDivisor = false; -void stub_glVertexBindingDivisor() { - if(trigger_glVertexBindingDivisor) return; - trigger_glVertexBindingDivisor = true; - printf("Stub: glVertexBindingDivisor\n"); -} -static bool trigger_glDebugMessageControl = false; -void stub_glDebugMessageControl() { - if(trigger_glDebugMessageControl) return; - trigger_glDebugMessageControl = true; - printf("Stub: glDebugMessageControl\n"); -} -static bool trigger_glDebugMessageInsert = false; -void stub_glDebugMessageInsert() { - if(trigger_glDebugMessageInsert) return; - trigger_glDebugMessageInsert = true; - printf("Stub: glDebugMessageInsert\n"); -} -static bool trigger_glDebugMessageCallback = false; -void stub_glDebugMessageCallback() { - if(trigger_glDebugMessageCallback) return; - trigger_glDebugMessageCallback = true; - printf("Stub: glDebugMessageCallback\n"); -} -static bool trigger_glGetDebugMessageLog = false; -void stub_glGetDebugMessageLog() { - if(trigger_glGetDebugMessageLog) return; - trigger_glGetDebugMessageLog = true; - printf("Stub: glGetDebugMessageLog\n"); -} -static bool trigger_glPushDebugGroup = false; -void stub_glPushDebugGroup() { - if(trigger_glPushDebugGroup) return; - trigger_glPushDebugGroup = true; - printf("Stub: glPushDebugGroup\n"); -} -static bool trigger_glPopDebugGroup = false; -void stub_glPopDebugGroup() { - if(trigger_glPopDebugGroup) return; - trigger_glPopDebugGroup = true; - printf("Stub: glPopDebugGroup\n"); -} -static bool trigger_glObjectLabel = false; -void stub_glObjectLabel() { - if(trigger_glObjectLabel) return; - trigger_glObjectLabel = true; - printf("Stub: glObjectLabel\n"); -} -static bool trigger_glGetObjectLabel = false; -void stub_glGetObjectLabel() { - if(trigger_glGetObjectLabel) return; - trigger_glGetObjectLabel = true; - printf("Stub: glGetObjectLabel\n"); -} -static bool trigger_glObjectPtrLabel = false; -void stub_glObjectPtrLabel() { - if(trigger_glObjectPtrLabel) return; - trigger_glObjectPtrLabel = true; - printf("Stub: glObjectPtrLabel\n"); -} -static bool trigger_glGetObjectPtrLabel = false; -void stub_glGetObjectPtrLabel() { - if(trigger_glGetObjectPtrLabel) return; - trigger_glGetObjectPtrLabel = true; - printf("Stub: glGetObjectPtrLabel\n"); -} -static bool trigger_glBufferStorage = false; -void stub_glBufferStorage() { - if(trigger_glBufferStorage) return; - trigger_glBufferStorage = true; - printf("Stub: glBufferStorage\n"); -} -static bool trigger_glClearTexImage = false; -void stub_glClearTexImage() { - if(trigger_glClearTexImage) return; - trigger_glClearTexImage = true; - printf("Stub: glClearTexImage\n"); -} -static bool trigger_glClearTexSubImage = false; -void stub_glClearTexSubImage() { - if(trigger_glClearTexSubImage) return; - trigger_glClearTexSubImage = true; - printf("Stub: glClearTexSubImage\n"); -} -static bool trigger_glBindBuffersBase = false; -void stub_glBindBuffersBase() { - if(trigger_glBindBuffersBase) return; - trigger_glBindBuffersBase = true; - printf("Stub: glBindBuffersBase\n"); -} -static bool trigger_glBindBuffersRange = false; -void stub_glBindBuffersRange() { - if(trigger_glBindBuffersRange) return; - trigger_glBindBuffersRange = true; - printf("Stub: glBindBuffersRange\n"); -} -static bool trigger_glBindTextures = false; -void stub_glBindTextures() { - if(trigger_glBindTextures) return; - trigger_glBindTextures = true; - printf("Stub: glBindTextures\n"); -} -static bool trigger_glBindSamplers = false; -void stub_glBindSamplers() { - if(trigger_glBindSamplers) return; - trigger_glBindSamplers = true; - printf("Stub: glBindSamplers\n"); -} -static bool trigger_glBindImageTextures = false; -void stub_glBindImageTextures() { - if(trigger_glBindImageTextures) return; - trigger_glBindImageTextures = true; - printf("Stub: glBindImageTextures\n"); -} -static bool trigger_glBindVertexBuffers = false; -void stub_glBindVertexBuffers() { - if(trigger_glBindVertexBuffers) return; - trigger_glBindVertexBuffers = true; - printf("Stub: glBindVertexBuffers\n"); -} -static bool trigger_glClipControl = false; -void stub_glClipControl() { - if(trigger_glClipControl) return; - trigger_glClipControl = true; - printf("Stub: glClipControl\n"); -} -static bool trigger_glCreateTransformFeedbacks = false; -void stub_glCreateTransformFeedbacks() { - if(trigger_glCreateTransformFeedbacks) return; - trigger_glCreateTransformFeedbacks = true; - printf("Stub: glCreateTransformFeedbacks\n"); -} -static bool trigger_glTransformFeedbackBufferBase = false; -void stub_glTransformFeedbackBufferBase() { - if(trigger_glTransformFeedbackBufferBase) return; - trigger_glTransformFeedbackBufferBase = true; - printf("Stub: glTransformFeedbackBufferBase\n"); -} -static bool trigger_glTransformFeedbackBufferRange = false; -void stub_glTransformFeedbackBufferRange() { - if(trigger_glTransformFeedbackBufferRange) return; - trigger_glTransformFeedbackBufferRange = true; - printf("Stub: glTransformFeedbackBufferRange\n"); -} -static bool trigger_glGetTransformFeedbackiv = false; -void stub_glGetTransformFeedbackiv() { - if(trigger_glGetTransformFeedbackiv) return; - trigger_glGetTransformFeedbackiv = true; - printf("Stub: glGetTransformFeedbackiv\n"); -} -static bool trigger_glGetTransformFeedbacki_v = false; -void stub_glGetTransformFeedbacki_v() { - if(trigger_glGetTransformFeedbacki_v) return; - trigger_glGetTransformFeedbacki_v = true; - printf("Stub: glGetTransformFeedbacki_v\n"); -} -static bool trigger_glGetTransformFeedbacki64_v = false; -void stub_glGetTransformFeedbacki64_v() { - if(trigger_glGetTransformFeedbacki64_v) return; - trigger_glGetTransformFeedbacki64_v = true; - printf("Stub: glGetTransformFeedbacki64_v\n"); -} -static bool trigger_glCreateBuffers = false; -void stub_glCreateBuffers() { - if(trigger_glCreateBuffers) return; - trigger_glCreateBuffers = true; - printf("Stub: glCreateBuffers\n"); -} -static bool trigger_glNamedBufferStorage = false; -void stub_glNamedBufferStorage() { - if(trigger_glNamedBufferStorage) return; - trigger_glNamedBufferStorage = true; - printf("Stub: glNamedBufferStorage\n"); -} -static bool trigger_glNamedBufferData = false; -void stub_glNamedBufferData() { - if(trigger_glNamedBufferData) return; - trigger_glNamedBufferData = true; - printf("Stub: glNamedBufferData\n"); -} -static bool trigger_glNamedBufferSubData = false; -void stub_glNamedBufferSubData() { - if(trigger_glNamedBufferSubData) return; - trigger_glNamedBufferSubData = true; - printf("Stub: glNamedBufferSubData\n"); -} -static bool trigger_glCopyNamedBufferSubData = false; -void stub_glCopyNamedBufferSubData() { - if(trigger_glCopyNamedBufferSubData) return; - trigger_glCopyNamedBufferSubData = true; - printf("Stub: glCopyNamedBufferSubData\n"); -} -static bool trigger_glClearNamedBufferData = false; -void stub_glClearNamedBufferData() { - if(trigger_glClearNamedBufferData) return; - trigger_glClearNamedBufferData = true; - printf("Stub: glClearNamedBufferData\n"); -} -static bool trigger_glClearNamedBufferSubData = false; -void stub_glClearNamedBufferSubData() { - if(trigger_glClearNamedBufferSubData) return; - trigger_glClearNamedBufferSubData = true; - printf("Stub: glClearNamedBufferSubData\n"); -} -static bool trigger_glMapNamedBuffer = false; -void stub_glMapNamedBuffer() { - if(trigger_glMapNamedBuffer) return; - trigger_glMapNamedBuffer = true; - printf("Stub: glMapNamedBuffer\n"); -} -static bool trigger_glMapNamedBufferRange = false; -void stub_glMapNamedBufferRange() { - if(trigger_glMapNamedBufferRange) return; - trigger_glMapNamedBufferRange = true; - printf("Stub: glMapNamedBufferRange\n"); -} -static bool trigger_glUnmapNamedBuffer = false; -void stub_glUnmapNamedBuffer() { - if(trigger_glUnmapNamedBuffer) return; - trigger_glUnmapNamedBuffer = true; - printf("Stub: glUnmapNamedBuffer\n"); -} -static bool trigger_glFlushMappedNamedBufferRange = false; -void stub_glFlushMappedNamedBufferRange() { - if(trigger_glFlushMappedNamedBufferRange) return; - trigger_glFlushMappedNamedBufferRange = true; - printf("Stub: glFlushMappedNamedBufferRange\n"); -} -static bool trigger_glGetNamedBufferParameteriv = false; -void stub_glGetNamedBufferParameteriv() { - if(trigger_glGetNamedBufferParameteriv) return; - trigger_glGetNamedBufferParameteriv = true; - printf("Stub: glGetNamedBufferParameteriv\n"); -} -static bool trigger_glGetNamedBufferParameteri64v = false; -void stub_glGetNamedBufferParameteri64v() { - if(trigger_glGetNamedBufferParameteri64v) return; - trigger_glGetNamedBufferParameteri64v = true; - printf("Stub: glGetNamedBufferParameteri64v\n"); -} -static bool trigger_glGetNamedBufferPointerv = false; -void stub_glGetNamedBufferPointerv() { - if(trigger_glGetNamedBufferPointerv) return; - trigger_glGetNamedBufferPointerv = true; - printf("Stub: glGetNamedBufferPointerv\n"); -} -static bool trigger_glGetNamedBufferSubData = false; -void stub_glGetNamedBufferSubData() { - if(trigger_glGetNamedBufferSubData) return; - trigger_glGetNamedBufferSubData = true; - printf("Stub: glGetNamedBufferSubData\n"); -} -static bool trigger_glCreateFramebuffers = false; -void stub_glCreateFramebuffers() { - if(trigger_glCreateFramebuffers) return; - trigger_glCreateFramebuffers = true; - printf("Stub: glCreateFramebuffers\n"); -} -static bool trigger_glNamedFramebufferRenderbuffer = false; -void stub_glNamedFramebufferRenderbuffer() { - if(trigger_glNamedFramebufferRenderbuffer) return; - trigger_glNamedFramebufferRenderbuffer = true; - printf("Stub: glNamedFramebufferRenderbuffer\n"); -} -static bool trigger_glNamedFramebufferParameteri = false; -void stub_glNamedFramebufferParameteri() { - if(trigger_glNamedFramebufferParameteri) return; - trigger_glNamedFramebufferParameteri = true; - printf("Stub: glNamedFramebufferParameteri\n"); -} -static bool trigger_glNamedFramebufferTexture = false; -void stub_glNamedFramebufferTexture() { - if(trigger_glNamedFramebufferTexture) return; - trigger_glNamedFramebufferTexture = true; - printf("Stub: glNamedFramebufferTexture\n"); -} -static bool trigger_glNamedFramebufferTextureLayer = false; -void stub_glNamedFramebufferTextureLayer() { - if(trigger_glNamedFramebufferTextureLayer) return; - trigger_glNamedFramebufferTextureLayer = true; - printf("Stub: glNamedFramebufferTextureLayer\n"); -} -static bool trigger_glNamedFramebufferDrawBuffer = false; -void stub_glNamedFramebufferDrawBuffer() { - if(trigger_glNamedFramebufferDrawBuffer) return; - trigger_glNamedFramebufferDrawBuffer = true; - printf("Stub: glNamedFramebufferDrawBuffer\n"); -} -static bool trigger_glNamedFramebufferDrawBuffers = false; -void stub_glNamedFramebufferDrawBuffers() { - if(trigger_glNamedFramebufferDrawBuffers) return; - trigger_glNamedFramebufferDrawBuffers = true; - printf("Stub: glNamedFramebufferDrawBuffers\n"); -} -static bool trigger_glNamedFramebufferReadBuffer = false; -void stub_glNamedFramebufferReadBuffer() { - if(trigger_glNamedFramebufferReadBuffer) return; - trigger_glNamedFramebufferReadBuffer = true; - printf("Stub: glNamedFramebufferReadBuffer\n"); -} -static bool trigger_glInvalidateNamedFramebufferData = false; -void stub_glInvalidateNamedFramebufferData() { - if(trigger_glInvalidateNamedFramebufferData) return; - trigger_glInvalidateNamedFramebufferData = true; - printf("Stub: glInvalidateNamedFramebufferData\n"); -} -static bool trigger_glInvalidateNamedFramebufferSubData = false; -void stub_glInvalidateNamedFramebufferSubData() { - if(trigger_glInvalidateNamedFramebufferSubData) return; - trigger_glInvalidateNamedFramebufferSubData = true; - printf("Stub: glInvalidateNamedFramebufferSubData\n"); -} -static bool trigger_glClearNamedFramebufferiv = false; -void stub_glClearNamedFramebufferiv() { - if(trigger_glClearNamedFramebufferiv) return; - trigger_glClearNamedFramebufferiv = true; - printf("Stub: glClearNamedFramebufferiv\n"); -} -static bool trigger_glClearNamedFramebufferuiv = false; -void stub_glClearNamedFramebufferuiv() { - if(trigger_glClearNamedFramebufferuiv) return; - trigger_glClearNamedFramebufferuiv = true; - printf("Stub: glClearNamedFramebufferuiv\n"); -} -static bool trigger_glClearNamedFramebufferfv = false; -void stub_glClearNamedFramebufferfv() { - if(trigger_glClearNamedFramebufferfv) return; - trigger_glClearNamedFramebufferfv = true; - printf("Stub: glClearNamedFramebufferfv\n"); -} -static bool trigger_glClearNamedFramebufferfi = false; -void stub_glClearNamedFramebufferfi() { - if(trigger_glClearNamedFramebufferfi) return; - trigger_glClearNamedFramebufferfi = true; - printf("Stub: glClearNamedFramebufferfi\n"); -} -static bool trigger_glBlitNamedFramebuffer = false; -void stub_glBlitNamedFramebuffer() { - if(trigger_glBlitNamedFramebuffer) return; - trigger_glBlitNamedFramebuffer = true; - printf("Stub: glBlitNamedFramebuffer\n"); -} -static bool trigger_glCheckNamedFramebufferStatus = false; -void stub_glCheckNamedFramebufferStatus() { - if(trigger_glCheckNamedFramebufferStatus) return; - trigger_glCheckNamedFramebufferStatus = true; - printf("Stub: glCheckNamedFramebufferStatus\n"); -} -static bool trigger_glGetNamedFramebufferParameteriv = false; -void stub_glGetNamedFramebufferParameteriv() { - if(trigger_glGetNamedFramebufferParameteriv) return; - trigger_glGetNamedFramebufferParameteriv = true; - printf("Stub: glGetNamedFramebufferParameteriv\n"); -} -static bool trigger_glGetNamedFramebufferAttachmentParameteriv = false; -void stub_glGetNamedFramebufferAttachmentParameteriv() { - if(trigger_glGetNamedFramebufferAttachmentParameteriv) return; - trigger_glGetNamedFramebufferAttachmentParameteriv = true; - printf("Stub: glGetNamedFramebufferAttachmentParameteriv\n"); -} -static bool trigger_glCreateRenderbuffers = false; -void stub_glCreateRenderbuffers() { - if(trigger_glCreateRenderbuffers) return; - trigger_glCreateRenderbuffers = true; - printf("Stub: glCreateRenderbuffers\n"); -} -static bool trigger_glNamedRenderbufferStorage = false; -void stub_glNamedRenderbufferStorage() { - if(trigger_glNamedRenderbufferStorage) return; - trigger_glNamedRenderbufferStorage = true; - printf("Stub: glNamedRenderbufferStorage\n"); -} -static bool trigger_glNamedRenderbufferStorageMultisample = false; -void stub_glNamedRenderbufferStorageMultisample() { - if(trigger_glNamedRenderbufferStorageMultisample) return; - trigger_glNamedRenderbufferStorageMultisample = true; - printf("Stub: glNamedRenderbufferStorageMultisample\n"); -} -static bool trigger_glGetNamedRenderbufferParameteriv = false; -void stub_glGetNamedRenderbufferParameteriv() { - if(trigger_glGetNamedRenderbufferParameteriv) return; - trigger_glGetNamedRenderbufferParameteriv = true; - printf("Stub: glGetNamedRenderbufferParameteriv\n"); -} -static bool trigger_glCreateTextures = false; -void stub_glCreateTextures() { - if(trigger_glCreateTextures) return; - trigger_glCreateTextures = true; - printf("Stub: glCreateTextures\n"); -} -static bool trigger_glTextureBuffer = false; -void stub_glTextureBuffer() { - if(trigger_glTextureBuffer) return; - trigger_glTextureBuffer = true; - printf("Stub: glTextureBuffer\n"); -} -static bool trigger_glTextureBufferRange = false; -void stub_glTextureBufferRange() { - if(trigger_glTextureBufferRange) return; - trigger_glTextureBufferRange = true; - printf("Stub: glTextureBufferRange\n"); -} -static bool trigger_glTextureStorage1D = false; -void stub_glTextureStorage1D() { - if(trigger_glTextureStorage1D) return; - trigger_glTextureStorage1D = true; - printf("Stub: glTextureStorage1D\n"); -} -static bool trigger_glTextureStorage2D = false; -void stub_glTextureStorage2D() { - if(trigger_glTextureStorage2D) return; - trigger_glTextureStorage2D = true; - printf("Stub: glTextureStorage2D\n"); -} -static bool trigger_glTextureStorage3D = false; -void stub_glTextureStorage3D() { - if(trigger_glTextureStorage3D) return; - trigger_glTextureStorage3D = true; - printf("Stub: glTextureStorage3D\n"); -} -static bool trigger_glTextureStorage2DMultisample = false; -void stub_glTextureStorage2DMultisample() { - if(trigger_glTextureStorage2DMultisample) return; - trigger_glTextureStorage2DMultisample = true; - printf("Stub: glTextureStorage2DMultisample\n"); -} -static bool trigger_glTextureStorage3DMultisample = false; -void stub_glTextureStorage3DMultisample() { - if(trigger_glTextureStorage3DMultisample) return; - trigger_glTextureStorage3DMultisample = true; - printf("Stub: glTextureStorage3DMultisample\n"); -} -static bool trigger_glTextureSubImage1D = false; -void stub_glTextureSubImage1D() { - if(trigger_glTextureSubImage1D) return; - trigger_glTextureSubImage1D = true; - printf("Stub: glTextureSubImage1D\n"); -} -static bool trigger_glTextureSubImage2D = false; -void stub_glTextureSubImage2D() { - if(trigger_glTextureSubImage2D) return; - trigger_glTextureSubImage2D = true; - printf("Stub: glTextureSubImage2D\n"); -} -static bool trigger_glTextureSubImage3D = false; -void stub_glTextureSubImage3D() { - if(trigger_glTextureSubImage3D) return; - trigger_glTextureSubImage3D = true; - printf("Stub: glTextureSubImage3D\n"); -} -static bool trigger_glCompressedTextureSubImage1D = false; -void stub_glCompressedTextureSubImage1D() { - if(trigger_glCompressedTextureSubImage1D) return; - trigger_glCompressedTextureSubImage1D = true; - printf("Stub: glCompressedTextureSubImage1D\n"); -} -static bool trigger_glCompressedTextureSubImage2D = false; -void stub_glCompressedTextureSubImage2D() { - if(trigger_glCompressedTextureSubImage2D) return; - trigger_glCompressedTextureSubImage2D = true; - printf("Stub: glCompressedTextureSubImage2D\n"); -} -static bool trigger_glCompressedTextureSubImage3D = false; -void stub_glCompressedTextureSubImage3D() { - if(trigger_glCompressedTextureSubImage3D) return; - trigger_glCompressedTextureSubImage3D = true; - printf("Stub: glCompressedTextureSubImage3D\n"); -} -static bool trigger_glCopyTextureSubImage1D = false; -void stub_glCopyTextureSubImage1D() { - if(trigger_glCopyTextureSubImage1D) return; - trigger_glCopyTextureSubImage1D = true; - printf("Stub: glCopyTextureSubImage1D\n"); -} -static bool trigger_glCopyTextureSubImage2D = false; -void stub_glCopyTextureSubImage2D() { - if(trigger_glCopyTextureSubImage2D) return; - trigger_glCopyTextureSubImage2D = true; - printf("Stub: glCopyTextureSubImage2D\n"); -} -static bool trigger_glCopyTextureSubImage3D = false; -void stub_glCopyTextureSubImage3D() { - if(trigger_glCopyTextureSubImage3D) return; - trigger_glCopyTextureSubImage3D = true; - printf("Stub: glCopyTextureSubImage3D\n"); -} -static bool trigger_glTextureParameterf = false; -void stub_glTextureParameterf() { - if(trigger_glTextureParameterf) return; - trigger_glTextureParameterf = true; - printf("Stub: glTextureParameterf\n"); -} -static bool trigger_glTextureParameterfv = false; -void stub_glTextureParameterfv() { - if(trigger_glTextureParameterfv) return; - trigger_glTextureParameterfv = true; - printf("Stub: glTextureParameterfv\n"); -} -static bool trigger_glTextureParameteri = false; -void stub_glTextureParameteri() { - if(trigger_glTextureParameteri) return; - trigger_glTextureParameteri = true; - printf("Stub: glTextureParameteri\n"); -} -static bool trigger_glTextureParameterIiv = false; -void stub_glTextureParameterIiv() { - if(trigger_glTextureParameterIiv) return; - trigger_glTextureParameterIiv = true; - printf("Stub: glTextureParameterIiv\n"); -} -static bool trigger_glTextureParameterIuiv = false; -void stub_glTextureParameterIuiv() { - if(trigger_glTextureParameterIuiv) return; - trigger_glTextureParameterIuiv = true; - printf("Stub: glTextureParameterIuiv\n"); -} -static bool trigger_glTextureParameteriv = false; -void stub_glTextureParameteriv() { - if(trigger_glTextureParameteriv) return; - trigger_glTextureParameteriv = true; - printf("Stub: glTextureParameteriv\n"); -} -static bool trigger_glGenerateTextureMipmap = false; -void stub_glGenerateTextureMipmap() { - if(trigger_glGenerateTextureMipmap) return; - trigger_glGenerateTextureMipmap = true; - printf("Stub: glGenerateTextureMipmap\n"); -} -static bool trigger_glBindTextureUnit = false; -void stub_glBindTextureUnit() { - if(trigger_glBindTextureUnit) return; - trigger_glBindTextureUnit = true; - printf("Stub: glBindTextureUnit\n"); -} -static bool trigger_glGetTextureImage = false; -void stub_glGetTextureImage() { - if(trigger_glGetTextureImage) return; - trigger_glGetTextureImage = true; - printf("Stub: glGetTextureImage\n"); -} -static bool trigger_glGetCompressedTextureImage = false; -void stub_glGetCompressedTextureImage() { - if(trigger_glGetCompressedTextureImage) return; - trigger_glGetCompressedTextureImage = true; - printf("Stub: glGetCompressedTextureImage\n"); -} -static bool trigger_glGetTextureLevelParameterfv = false; -void stub_glGetTextureLevelParameterfv() { - if(trigger_glGetTextureLevelParameterfv) return; - trigger_glGetTextureLevelParameterfv = true; - printf("Stub: glGetTextureLevelParameterfv\n"); -} -static bool trigger_glGetTextureLevelParameteriv = false; -void stub_glGetTextureLevelParameteriv() { - if(trigger_glGetTextureLevelParameteriv) return; - trigger_glGetTextureLevelParameteriv = true; - printf("Stub: glGetTextureLevelParameteriv\n"); -} -static bool trigger_glGetTextureParameterfv = false; -void stub_glGetTextureParameterfv() { - if(trigger_glGetTextureParameterfv) return; - trigger_glGetTextureParameterfv = true; - printf("Stub: glGetTextureParameterfv\n"); -} -static bool trigger_glGetTextureParameterIiv = false; -void stub_glGetTextureParameterIiv() { - if(trigger_glGetTextureParameterIiv) return; - trigger_glGetTextureParameterIiv = true; - printf("Stub: glGetTextureParameterIiv\n"); -} -static bool trigger_glGetTextureParameterIuiv = false; -void stub_glGetTextureParameterIuiv() { - if(trigger_glGetTextureParameterIuiv) return; - trigger_glGetTextureParameterIuiv = true; - printf("Stub: glGetTextureParameterIuiv\n"); -} -static bool trigger_glGetTextureParameteriv = false; -void stub_glGetTextureParameteriv() { - if(trigger_glGetTextureParameteriv) return; - trigger_glGetTextureParameteriv = true; - printf("Stub: glGetTextureParameteriv\n"); -} -static bool trigger_glCreateVertexArrays = false; -void stub_glCreateVertexArrays() { - if(trigger_glCreateVertexArrays) return; - trigger_glCreateVertexArrays = true; - printf("Stub: glCreateVertexArrays\n"); -} -static bool trigger_glDisableVertexArrayAttrib = false; -void stub_glDisableVertexArrayAttrib() { - if(trigger_glDisableVertexArrayAttrib) return; - trigger_glDisableVertexArrayAttrib = true; - printf("Stub: glDisableVertexArrayAttrib\n"); -} -static bool trigger_glEnableVertexArrayAttrib = false; -void stub_glEnableVertexArrayAttrib() { - if(trigger_glEnableVertexArrayAttrib) return; - trigger_glEnableVertexArrayAttrib = true; - printf("Stub: glEnableVertexArrayAttrib\n"); -} -static bool trigger_glVertexArrayElementBuffer = false; -void stub_glVertexArrayElementBuffer() { - if(trigger_glVertexArrayElementBuffer) return; - trigger_glVertexArrayElementBuffer = true; - printf("Stub: glVertexArrayElementBuffer\n"); -} -static bool trigger_glVertexArrayVertexBuffer = false; -void stub_glVertexArrayVertexBuffer() { - if(trigger_glVertexArrayVertexBuffer) return; - trigger_glVertexArrayVertexBuffer = true; - printf("Stub: glVertexArrayVertexBuffer\n"); -} -static bool trigger_glVertexArrayVertexBuffers = false; -void stub_glVertexArrayVertexBuffers() { - if(trigger_glVertexArrayVertexBuffers) return; - trigger_glVertexArrayVertexBuffers = true; - printf("Stub: glVertexArrayVertexBuffers\n"); -} -static bool trigger_glVertexArrayAttribBinding = false; -void stub_glVertexArrayAttribBinding() { - if(trigger_glVertexArrayAttribBinding) return; - trigger_glVertexArrayAttribBinding = true; - printf("Stub: glVertexArrayAttribBinding\n"); -} -static bool trigger_glVertexArrayAttribFormat = false; -void stub_glVertexArrayAttribFormat() { - if(trigger_glVertexArrayAttribFormat) return; - trigger_glVertexArrayAttribFormat = true; - printf("Stub: glVertexArrayAttribFormat\n"); -} -static bool trigger_glVertexArrayAttribIFormat = false; -void stub_glVertexArrayAttribIFormat() { - if(trigger_glVertexArrayAttribIFormat) return; - trigger_glVertexArrayAttribIFormat = true; - printf("Stub: glVertexArrayAttribIFormat\n"); -} -static bool trigger_glVertexArrayAttribLFormat = false; -void stub_glVertexArrayAttribLFormat() { - if(trigger_glVertexArrayAttribLFormat) return; - trigger_glVertexArrayAttribLFormat = true; - printf("Stub: glVertexArrayAttribLFormat\n"); -} -static bool trigger_glVertexArrayBindingDivisor = false; -void stub_glVertexArrayBindingDivisor() { - if(trigger_glVertexArrayBindingDivisor) return; - trigger_glVertexArrayBindingDivisor = true; - printf("Stub: glVertexArrayBindingDivisor\n"); -} -static bool trigger_glGetVertexArrayiv = false; -void stub_glGetVertexArrayiv() { - if(trigger_glGetVertexArrayiv) return; - trigger_glGetVertexArrayiv = true; - printf("Stub: glGetVertexArrayiv\n"); -} -static bool trigger_glGetVertexArrayIndexediv = false; -void stub_glGetVertexArrayIndexediv() { - if(trigger_glGetVertexArrayIndexediv) return; - trigger_glGetVertexArrayIndexediv = true; - printf("Stub: glGetVertexArrayIndexediv\n"); -} -static bool trigger_glGetVertexArrayIndexed64iv = false; -void stub_glGetVertexArrayIndexed64iv() { - if(trigger_glGetVertexArrayIndexed64iv) return; - trigger_glGetVertexArrayIndexed64iv = true; - printf("Stub: glGetVertexArrayIndexed64iv\n"); -} -static bool trigger_glCreateSamplers = false; -void stub_glCreateSamplers() { - if(trigger_glCreateSamplers) return; - trigger_glCreateSamplers = true; - printf("Stub: glCreateSamplers\n"); -} -static bool trigger_glCreateProgramPipelines = false; -void stub_glCreateProgramPipelines() { - if(trigger_glCreateProgramPipelines) return; - trigger_glCreateProgramPipelines = true; - printf("Stub: glCreateProgramPipelines\n"); -} -static bool trigger_glCreateQueries = false; -void stub_glCreateQueries() { - if(trigger_glCreateQueries) return; - trigger_glCreateQueries = true; - printf("Stub: glCreateQueries\n"); -} -static bool trigger_glGetQueryBufferObjecti64v = false; -void stub_glGetQueryBufferObjecti64v() { - if(trigger_glGetQueryBufferObjecti64v) return; - trigger_glGetQueryBufferObjecti64v = true; - printf("Stub: glGetQueryBufferObjecti64v\n"); -} -static bool trigger_glGetQueryBufferObjectiv = false; -void stub_glGetQueryBufferObjectiv() { - if(trigger_glGetQueryBufferObjectiv) return; - trigger_glGetQueryBufferObjectiv = true; - printf("Stub: glGetQueryBufferObjectiv\n"); -} -static bool trigger_glGetQueryBufferObjectui64v = false; -void stub_glGetQueryBufferObjectui64v() { - if(trigger_glGetQueryBufferObjectui64v) return; - trigger_glGetQueryBufferObjectui64v = true; - printf("Stub: glGetQueryBufferObjectui64v\n"); -} -static bool trigger_glGetQueryBufferObjectuiv = false; -void stub_glGetQueryBufferObjectuiv() { - if(trigger_glGetQueryBufferObjectuiv) return; - trigger_glGetQueryBufferObjectuiv = true; - printf("Stub: glGetQueryBufferObjectuiv\n"); -} -static bool trigger_glMemoryBarrierByRegion = false; -void stub_glMemoryBarrierByRegion() { - if(trigger_glMemoryBarrierByRegion) return; - trigger_glMemoryBarrierByRegion = true; - printf("Stub: glMemoryBarrierByRegion\n"); -} -static bool trigger_glGetTextureSubImage = false; -void stub_glGetTextureSubImage() { - if(trigger_glGetTextureSubImage) return; - trigger_glGetTextureSubImage = true; - printf("Stub: glGetTextureSubImage\n"); -} -static bool trigger_glGetCompressedTextureSubImage = false; -void stub_glGetCompressedTextureSubImage() { - if(trigger_glGetCompressedTextureSubImage) return; - trigger_glGetCompressedTextureSubImage = true; - printf("Stub: glGetCompressedTextureSubImage\n"); -} -static bool trigger_glGetGraphicsResetStatus = false; -void stub_glGetGraphicsResetStatus() { - if(trigger_glGetGraphicsResetStatus) return; - trigger_glGetGraphicsResetStatus = true; - printf("Stub: glGetGraphicsResetStatus\n"); -} -static bool trigger_glGetnCompressedTexImage = false; -void stub_glGetnCompressedTexImage() { - if(trigger_glGetnCompressedTexImage) return; - trigger_glGetnCompressedTexImage = true; - printf("Stub: glGetnCompressedTexImage\n"); -} -static bool trigger_glGetnTexImage = false; -void stub_glGetnTexImage() { - if(trigger_glGetnTexImage) return; - trigger_glGetnTexImage = true; - printf("Stub: glGetnTexImage\n"); -} -static bool trigger_glGetnUniformdv = false; -void stub_glGetnUniformdv() { - if(trigger_glGetnUniformdv) return; - trigger_glGetnUniformdv = true; - printf("Stub: glGetnUniformdv\n"); -} -static bool trigger_glGetnUniformfv = false; -void stub_glGetnUniformfv() { - if(trigger_glGetnUniformfv) return; - trigger_glGetnUniformfv = true; - printf("Stub: glGetnUniformfv\n"); -} -static bool trigger_glGetnUniformiv = false; -void stub_glGetnUniformiv() { - if(trigger_glGetnUniformiv) return; - trigger_glGetnUniformiv = true; - printf("Stub: glGetnUniformiv\n"); -} -static bool trigger_glGetnUniformuiv = false; -void stub_glGetnUniformuiv() { - if(trigger_glGetnUniformuiv) return; - trigger_glGetnUniformuiv = true; - printf("Stub: glGetnUniformuiv\n"); -} -static bool trigger_glReadnPixels = false; -void stub_glReadnPixels() { - if(trigger_glReadnPixels) return; - trigger_glReadnPixels = true; - printf("Stub: glReadnPixels\n"); -} -static bool trigger_glTextureBarrier = false; -void stub_glTextureBarrier() { - if(trigger_glTextureBarrier) return; - trigger_glTextureBarrier = true; - printf("Stub: glTextureBarrier\n"); -} -static bool trigger_glSpecializeShader = false; -void stub_glSpecializeShader() { - if(trigger_glSpecializeShader) return; - trigger_glSpecializeShader = true; - printf("Stub: glSpecializeShader\n"); -} -static bool trigger_glMultiDrawArraysIndirectCount = false; -void stub_glMultiDrawArraysIndirectCount() { - if(trigger_glMultiDrawArraysIndirectCount) return; - trigger_glMultiDrawArraysIndirectCount = true; - printf("Stub: glMultiDrawArraysIndirectCount\n"); -} -static bool trigger_glMultiDrawElementsIndirectCount = false; -void stub_glMultiDrawElementsIndirectCount() { - if(trigger_glMultiDrawElementsIndirectCount) return; - trigger_glMultiDrawElementsIndirectCount = true; - printf("Stub: glMultiDrawElementsIndirectCount\n"); -} -static bool trigger_glPolygonOffsetClamp = false; -void stub_glPolygonOffsetClamp() { - if(trigger_glPolygonOffsetClamp) return; - trigger_glPolygonOffsetClamp = true; - printf("Stub: glPolygonOffsetClamp\n"); -} -static bool trigger_glPrimitiveBoundingBoxARB = false; -void stub_glPrimitiveBoundingBoxARB() { - if(trigger_glPrimitiveBoundingBoxARB) return; - trigger_glPrimitiveBoundingBoxARB = true; - printf("Stub: glPrimitiveBoundingBoxARB\n"); -} -static bool trigger_glGetTextureHandleARB = false; -void stub_glGetTextureHandleARB() { - if(trigger_glGetTextureHandleARB) return; - trigger_glGetTextureHandleARB = true; - printf("Stub: glGetTextureHandleARB\n"); -} -static bool trigger_glGetTextureSamplerHandleARB = false; -void stub_glGetTextureSamplerHandleARB() { - if(trigger_glGetTextureSamplerHandleARB) return; - trigger_glGetTextureSamplerHandleARB = true; - printf("Stub: glGetTextureSamplerHandleARB\n"); -} -static bool trigger_glMakeTextureHandleResidentARB = false; -void stub_glMakeTextureHandleResidentARB() { - if(trigger_glMakeTextureHandleResidentARB) return; - trigger_glMakeTextureHandleResidentARB = true; - printf("Stub: glMakeTextureHandleResidentARB\n"); -} -static bool trigger_glMakeTextureHandleNonResidentARB = false; -void stub_glMakeTextureHandleNonResidentARB() { - if(trigger_glMakeTextureHandleNonResidentARB) return; - trigger_glMakeTextureHandleNonResidentARB = true; - printf("Stub: glMakeTextureHandleNonResidentARB\n"); -} -static bool trigger_glGetImageHandleARB = false; -void stub_glGetImageHandleARB() { - if(trigger_glGetImageHandleARB) return; - trigger_glGetImageHandleARB = true; - printf("Stub: glGetImageHandleARB\n"); -} -static bool trigger_glMakeImageHandleResidentARB = false; -void stub_glMakeImageHandleResidentARB() { - if(trigger_glMakeImageHandleResidentARB) return; - trigger_glMakeImageHandleResidentARB = true; - printf("Stub: glMakeImageHandleResidentARB\n"); -} -static bool trigger_glMakeImageHandleNonResidentARB = false; -void stub_glMakeImageHandleNonResidentARB() { - if(trigger_glMakeImageHandleNonResidentARB) return; - trigger_glMakeImageHandleNonResidentARB = true; - printf("Stub: glMakeImageHandleNonResidentARB\n"); -} -static bool trigger_glUniformHandleui64ARB = false; -void stub_glUniformHandleui64ARB() { - if(trigger_glUniformHandleui64ARB) return; - trigger_glUniformHandleui64ARB = true; - printf("Stub: glUniformHandleui64ARB\n"); -} -static bool trigger_glUniformHandleui64vARB = false; -void stub_glUniformHandleui64vARB() { - if(trigger_glUniformHandleui64vARB) return; - trigger_glUniformHandleui64vARB = true; - printf("Stub: glUniformHandleui64vARB\n"); -} -static bool trigger_glProgramUniformHandleui64ARB = false; -void stub_glProgramUniformHandleui64ARB() { - if(trigger_glProgramUniformHandleui64ARB) return; - trigger_glProgramUniformHandleui64ARB = true; - printf("Stub: glProgramUniformHandleui64ARB\n"); -} -static bool trigger_glProgramUniformHandleui64vARB = false; -void stub_glProgramUniformHandleui64vARB() { - if(trigger_glProgramUniformHandleui64vARB) return; - trigger_glProgramUniformHandleui64vARB = true; - printf("Stub: glProgramUniformHandleui64vARB\n"); -} -static bool trigger_glIsTextureHandleResidentARB = false; -void stub_glIsTextureHandleResidentARB() { - if(trigger_glIsTextureHandleResidentARB) return; - trigger_glIsTextureHandleResidentARB = true; - printf("Stub: glIsTextureHandleResidentARB\n"); -} -static bool trigger_glIsImageHandleResidentARB = false; -void stub_glIsImageHandleResidentARB() { - if(trigger_glIsImageHandleResidentARB) return; - trigger_glIsImageHandleResidentARB = true; - printf("Stub: glIsImageHandleResidentARB\n"); -} -static bool trigger_glVertexAttribL1ui64ARB = false; -void stub_glVertexAttribL1ui64ARB() { - if(trigger_glVertexAttribL1ui64ARB) return; - trigger_glVertexAttribL1ui64ARB = true; - printf("Stub: glVertexAttribL1ui64ARB\n"); -} -static bool trigger_glVertexAttribL1ui64vARB = false; -void stub_glVertexAttribL1ui64vARB() { - if(trigger_glVertexAttribL1ui64vARB) return; - trigger_glVertexAttribL1ui64vARB = true; - printf("Stub: glVertexAttribL1ui64vARB\n"); -} -static bool trigger_glGetVertexAttribLui64vARB = false; -void stub_glGetVertexAttribLui64vARB() { - if(trigger_glGetVertexAttribLui64vARB) return; - trigger_glGetVertexAttribLui64vARB = true; - printf("Stub: glGetVertexAttribLui64vARB\n"); -} -static bool trigger_glCreateSyncFromCLeventARB = false; -void stub_glCreateSyncFromCLeventARB() { - if(trigger_glCreateSyncFromCLeventARB) return; - trigger_glCreateSyncFromCLeventARB = true; - printf("Stub: glCreateSyncFromCLeventARB\n"); -} -static bool trigger_glDispatchComputeGroupSizeARB = false; -void stub_glDispatchComputeGroupSizeARB() { - if(trigger_glDispatchComputeGroupSizeARB) return; - trigger_glDispatchComputeGroupSizeARB = true; - printf("Stub: glDispatchComputeGroupSizeARB\n"); -} -static bool trigger_glDebugMessageControlARB = false; -void stub_glDebugMessageControlARB() { - if(trigger_glDebugMessageControlARB) return; - trigger_glDebugMessageControlARB = true; - printf("Stub: glDebugMessageControlARB\n"); -} -static bool trigger_glDebugMessageInsertARB = false; -void stub_glDebugMessageInsertARB() { - if(trigger_glDebugMessageInsertARB) return; - trigger_glDebugMessageInsertARB = true; - printf("Stub: glDebugMessageInsertARB\n"); -} -static bool trigger_glDebugMessageCallbackARB = false; -void stub_glDebugMessageCallbackARB() { - if(trigger_glDebugMessageCallbackARB) return; - trigger_glDebugMessageCallbackARB = true; - printf("Stub: glDebugMessageCallbackARB\n"); -} -static bool trigger_glGetDebugMessageLogARB = false; -void stub_glGetDebugMessageLogARB() { - if(trigger_glGetDebugMessageLogARB) return; - trigger_glGetDebugMessageLogARB = true; - printf("Stub: glGetDebugMessageLogARB\n"); -} -static bool trigger_glBlendEquationiARB = false; -void stub_glBlendEquationiARB() { - if(trigger_glBlendEquationiARB) return; - trigger_glBlendEquationiARB = true; - printf("Stub: glBlendEquationiARB\n"); -} -static bool trigger_glBlendEquationSeparateiARB = false; -void stub_glBlendEquationSeparateiARB() { - if(trigger_glBlendEquationSeparateiARB) return; - trigger_glBlendEquationSeparateiARB = true; - printf("Stub: glBlendEquationSeparateiARB\n"); -} -static bool trigger_glBlendFunciARB = false; -void stub_glBlendFunciARB() { - if(trigger_glBlendFunciARB) return; - trigger_glBlendFunciARB = true; - printf("Stub: glBlendFunciARB\n"); -} -static bool trigger_glBlendFuncSeparateiARB = false; -void stub_glBlendFuncSeparateiARB() { - if(trigger_glBlendFuncSeparateiARB) return; - trigger_glBlendFuncSeparateiARB = true; - printf("Stub: glBlendFuncSeparateiARB\n"); -} -static bool trigger_glDrawArraysInstancedARB = false; -void stub_glDrawArraysInstancedARB() { - if(trigger_glDrawArraysInstancedARB) return; - trigger_glDrawArraysInstancedARB = true; - printf("Stub: glDrawArraysInstancedARB\n"); -} -static bool trigger_glDrawElementsInstancedARB = false; -void stub_glDrawElementsInstancedARB() { - if(trigger_glDrawElementsInstancedARB) return; - trigger_glDrawElementsInstancedARB = true; - printf("Stub: glDrawElementsInstancedARB\n"); -} -static bool trigger_glProgramParameteriARB = false; -void stub_glProgramParameteriARB() { - if(trigger_glProgramParameteriARB) return; - trigger_glProgramParameteriARB = true; - printf("Stub: glProgramParameteriARB\n"); -} -static bool trigger_glFramebufferTextureARB = false; -void stub_glFramebufferTextureARB() { - if(trigger_glFramebufferTextureARB) return; - trigger_glFramebufferTextureARB = true; - printf("Stub: glFramebufferTextureARB\n"); -} -static bool trigger_glFramebufferTextureLayerARB = false; -void stub_glFramebufferTextureLayerARB() { - if(trigger_glFramebufferTextureLayerARB) return; - trigger_glFramebufferTextureLayerARB = true; - printf("Stub: glFramebufferTextureLayerARB\n"); -} -static bool trigger_glFramebufferTextureFaceARB = false; -void stub_glFramebufferTextureFaceARB() { - if(trigger_glFramebufferTextureFaceARB) return; - trigger_glFramebufferTextureFaceARB = true; - printf("Stub: glFramebufferTextureFaceARB\n"); -} -static bool trigger_glSpecializeShaderARB = false; -void stub_glSpecializeShaderARB() { - if(trigger_glSpecializeShaderARB) return; - trigger_glSpecializeShaderARB = true; - printf("Stub: glSpecializeShaderARB\n"); -} -static bool trigger_glUniform1i64ARB = false; -void stub_glUniform1i64ARB() { - if(trigger_glUniform1i64ARB) return; - trigger_glUniform1i64ARB = true; - printf("Stub: glUniform1i64ARB\n"); -} -static bool trigger_glUniform2i64ARB = false; -void stub_glUniform2i64ARB() { - if(trigger_glUniform2i64ARB) return; - trigger_glUniform2i64ARB = true; - printf("Stub: glUniform2i64ARB\n"); -} -static bool trigger_glUniform3i64ARB = false; -void stub_glUniform3i64ARB() { - if(trigger_glUniform3i64ARB) return; - trigger_glUniform3i64ARB = true; - printf("Stub: glUniform3i64ARB\n"); -} -static bool trigger_glUniform4i64ARB = false; -void stub_glUniform4i64ARB() { - if(trigger_glUniform4i64ARB) return; - trigger_glUniform4i64ARB = true; - printf("Stub: glUniform4i64ARB\n"); -} -static bool trigger_glUniform1i64vARB = false; -void stub_glUniform1i64vARB() { - if(trigger_glUniform1i64vARB) return; - trigger_glUniform1i64vARB = true; - printf("Stub: glUniform1i64vARB\n"); -} -static bool trigger_glUniform2i64vARB = false; -void stub_glUniform2i64vARB() { - if(trigger_glUniform2i64vARB) return; - trigger_glUniform2i64vARB = true; - printf("Stub: glUniform2i64vARB\n"); -} -static bool trigger_glUniform3i64vARB = false; -void stub_glUniform3i64vARB() { - if(trigger_glUniform3i64vARB) return; - trigger_glUniform3i64vARB = true; - printf("Stub: glUniform3i64vARB\n"); -} -static bool trigger_glUniform4i64vARB = false; -void stub_glUniform4i64vARB() { - if(trigger_glUniform4i64vARB) return; - trigger_glUniform4i64vARB = true; - printf("Stub: glUniform4i64vARB\n"); -} -static bool trigger_glUniform1ui64ARB = false; -void stub_glUniform1ui64ARB() { - if(trigger_glUniform1ui64ARB) return; - trigger_glUniform1ui64ARB = true; - printf("Stub: glUniform1ui64ARB\n"); -} -static bool trigger_glUniform2ui64ARB = false; -void stub_glUniform2ui64ARB() { - if(trigger_glUniform2ui64ARB) return; - trigger_glUniform2ui64ARB = true; - printf("Stub: glUniform2ui64ARB\n"); -} -static bool trigger_glUniform3ui64ARB = false; -void stub_glUniform3ui64ARB() { - if(trigger_glUniform3ui64ARB) return; - trigger_glUniform3ui64ARB = true; - printf("Stub: glUniform3ui64ARB\n"); -} -static bool trigger_glUniform4ui64ARB = false; -void stub_glUniform4ui64ARB() { - if(trigger_glUniform4ui64ARB) return; - trigger_glUniform4ui64ARB = true; - printf("Stub: glUniform4ui64ARB\n"); -} -static bool trigger_glUniform1ui64vARB = false; -void stub_glUniform1ui64vARB() { - if(trigger_glUniform1ui64vARB) return; - trigger_glUniform1ui64vARB = true; - printf("Stub: glUniform1ui64vARB\n"); -} -static bool trigger_glUniform2ui64vARB = false; -void stub_glUniform2ui64vARB() { - if(trigger_glUniform2ui64vARB) return; - trigger_glUniform2ui64vARB = true; - printf("Stub: glUniform2ui64vARB\n"); -} -static bool trigger_glUniform3ui64vARB = false; -void stub_glUniform3ui64vARB() { - if(trigger_glUniform3ui64vARB) return; - trigger_glUniform3ui64vARB = true; - printf("Stub: glUniform3ui64vARB\n"); -} -static bool trigger_glUniform4ui64vARB = false; -void stub_glUniform4ui64vARB() { - if(trigger_glUniform4ui64vARB) return; - trigger_glUniform4ui64vARB = true; - printf("Stub: glUniform4ui64vARB\n"); -} -static bool trigger_glGetUniformi64vARB = false; -void stub_glGetUniformi64vARB() { - if(trigger_glGetUniformi64vARB) return; - trigger_glGetUniformi64vARB = true; - printf("Stub: glGetUniformi64vARB\n"); -} -static bool trigger_glGetUniformui64vARB = false; -void stub_glGetUniformui64vARB() { - if(trigger_glGetUniformui64vARB) return; - trigger_glGetUniformui64vARB = true; - printf("Stub: glGetUniformui64vARB\n"); -} -static bool trigger_glGetnUniformi64vARB = false; -void stub_glGetnUniformi64vARB() { - if(trigger_glGetnUniformi64vARB) return; - trigger_glGetnUniformi64vARB = true; - printf("Stub: glGetnUniformi64vARB\n"); -} -static bool trigger_glGetnUniformui64vARB = false; -void stub_glGetnUniformui64vARB() { - if(trigger_glGetnUniformui64vARB) return; - trigger_glGetnUniformui64vARB = true; - printf("Stub: glGetnUniformui64vARB\n"); -} -static bool trigger_glProgramUniform1i64ARB = false; -void stub_glProgramUniform1i64ARB() { - if(trigger_glProgramUniform1i64ARB) return; - trigger_glProgramUniform1i64ARB = true; - printf("Stub: glProgramUniform1i64ARB\n"); -} -static bool trigger_glProgramUniform2i64ARB = false; -void stub_glProgramUniform2i64ARB() { - if(trigger_glProgramUniform2i64ARB) return; - trigger_glProgramUniform2i64ARB = true; - printf("Stub: glProgramUniform2i64ARB\n"); -} -static bool trigger_glProgramUniform3i64ARB = false; -void stub_glProgramUniform3i64ARB() { - if(trigger_glProgramUniform3i64ARB) return; - trigger_glProgramUniform3i64ARB = true; - printf("Stub: glProgramUniform3i64ARB\n"); -} -static bool trigger_glProgramUniform4i64ARB = false; -void stub_glProgramUniform4i64ARB() { - if(trigger_glProgramUniform4i64ARB) return; - trigger_glProgramUniform4i64ARB = true; - printf("Stub: glProgramUniform4i64ARB\n"); -} -static bool trigger_glProgramUniform1i64vARB = false; -void stub_glProgramUniform1i64vARB() { - if(trigger_glProgramUniform1i64vARB) return; - trigger_glProgramUniform1i64vARB = true; - printf("Stub: glProgramUniform1i64vARB\n"); -} -static bool trigger_glProgramUniform2i64vARB = false; -void stub_glProgramUniform2i64vARB() { - if(trigger_glProgramUniform2i64vARB) return; - trigger_glProgramUniform2i64vARB = true; - printf("Stub: glProgramUniform2i64vARB\n"); -} -static bool trigger_glProgramUniform3i64vARB = false; -void stub_glProgramUniform3i64vARB() { - if(trigger_glProgramUniform3i64vARB) return; - trigger_glProgramUniform3i64vARB = true; - printf("Stub: glProgramUniform3i64vARB\n"); -} -static bool trigger_glProgramUniform4i64vARB = false; -void stub_glProgramUniform4i64vARB() { - if(trigger_glProgramUniform4i64vARB) return; - trigger_glProgramUniform4i64vARB = true; - printf("Stub: glProgramUniform4i64vARB\n"); -} -static bool trigger_glProgramUniform1ui64ARB = false; -void stub_glProgramUniform1ui64ARB() { - if(trigger_glProgramUniform1ui64ARB) return; - trigger_glProgramUniform1ui64ARB = true; - printf("Stub: glProgramUniform1ui64ARB\n"); -} -static bool trigger_glProgramUniform2ui64ARB = false; -void stub_glProgramUniform2ui64ARB() { - if(trigger_glProgramUniform2ui64ARB) return; - trigger_glProgramUniform2ui64ARB = true; - printf("Stub: glProgramUniform2ui64ARB\n"); -} -static bool trigger_glProgramUniform3ui64ARB = false; -void stub_glProgramUniform3ui64ARB() { - if(trigger_glProgramUniform3ui64ARB) return; - trigger_glProgramUniform3ui64ARB = true; - printf("Stub: glProgramUniform3ui64ARB\n"); -} -static bool trigger_glProgramUniform4ui64ARB = false; -void stub_glProgramUniform4ui64ARB() { - if(trigger_glProgramUniform4ui64ARB) return; - trigger_glProgramUniform4ui64ARB = true; - printf("Stub: glProgramUniform4ui64ARB\n"); -} -static bool trigger_glProgramUniform1ui64vARB = false; -void stub_glProgramUniform1ui64vARB() { - if(trigger_glProgramUniform1ui64vARB) return; - trigger_glProgramUniform1ui64vARB = true; - printf("Stub: glProgramUniform1ui64vARB\n"); -} -static bool trigger_glProgramUniform2ui64vARB = false; -void stub_glProgramUniform2ui64vARB() { - if(trigger_glProgramUniform2ui64vARB) return; - trigger_glProgramUniform2ui64vARB = true; - printf("Stub: glProgramUniform2ui64vARB\n"); -} -static bool trigger_glProgramUniform3ui64vARB = false; -void stub_glProgramUniform3ui64vARB() { - if(trigger_glProgramUniform3ui64vARB) return; - trigger_glProgramUniform3ui64vARB = true; - printf("Stub: glProgramUniform3ui64vARB\n"); -} -static bool trigger_glProgramUniform4ui64vARB = false; -void stub_glProgramUniform4ui64vARB() { - if(trigger_glProgramUniform4ui64vARB) return; - trigger_glProgramUniform4ui64vARB = true; - printf("Stub: glProgramUniform4ui64vARB\n"); -} -static bool trigger_glMultiDrawArraysIndirectCountARB = false; -void stub_glMultiDrawArraysIndirectCountARB() { - if(trigger_glMultiDrawArraysIndirectCountARB) return; - trigger_glMultiDrawArraysIndirectCountARB = true; - printf("Stub: glMultiDrawArraysIndirectCountARB\n"); -} -static bool trigger_glMultiDrawElementsIndirectCountARB = false; -void stub_glMultiDrawElementsIndirectCountARB() { - if(trigger_glMultiDrawElementsIndirectCountARB) return; - trigger_glMultiDrawElementsIndirectCountARB = true; - printf("Stub: glMultiDrawElementsIndirectCountARB\n"); -} -static bool trigger_glVertexAttribDivisorARB = false; -void stub_glVertexAttribDivisorARB() { - if(trigger_glVertexAttribDivisorARB) return; - trigger_glVertexAttribDivisorARB = true; - printf("Stub: glVertexAttribDivisorARB\n"); -} -static bool trigger_glMaxShaderCompilerThreadsARB = false; -void stub_glMaxShaderCompilerThreadsARB() { - if(trigger_glMaxShaderCompilerThreadsARB) return; - trigger_glMaxShaderCompilerThreadsARB = true; - printf("Stub: glMaxShaderCompilerThreadsARB\n"); -} -static bool trigger_glGetGraphicsResetStatusARB = false; -void stub_glGetGraphicsResetStatusARB() { - if(trigger_glGetGraphicsResetStatusARB) return; - trigger_glGetGraphicsResetStatusARB = true; - printf("Stub: glGetGraphicsResetStatusARB\n"); -} -static bool trigger_glGetnTexImageARB = false; -void stub_glGetnTexImageARB() { - if(trigger_glGetnTexImageARB) return; - trigger_glGetnTexImageARB = true; - printf("Stub: glGetnTexImageARB\n"); -} -static bool trigger_glReadnPixelsARB = false; -void stub_glReadnPixelsARB() { - if(trigger_glReadnPixelsARB) return; - trigger_glReadnPixelsARB = true; - printf("Stub: glReadnPixelsARB\n"); -} -static bool trigger_glGetnCompressedTexImageARB = false; -void stub_glGetnCompressedTexImageARB() { - if(trigger_glGetnCompressedTexImageARB) return; - trigger_glGetnCompressedTexImageARB = true; - printf("Stub: glGetnCompressedTexImageARB\n"); -} -static bool trigger_glGetnUniformfvARB = false; -void stub_glGetnUniformfvARB() { - if(trigger_glGetnUniformfvARB) return; - trigger_glGetnUniformfvARB = true; - printf("Stub: glGetnUniformfvARB\n"); -} -static bool trigger_glGetnUniformivARB = false; -void stub_glGetnUniformivARB() { - if(trigger_glGetnUniformivARB) return; - trigger_glGetnUniformivARB = true; - printf("Stub: glGetnUniformivARB\n"); -} -static bool trigger_glGetnUniformuivARB = false; -void stub_glGetnUniformuivARB() { - if(trigger_glGetnUniformuivARB) return; - trigger_glGetnUniformuivARB = true; - printf("Stub: glGetnUniformuivARB\n"); -} -static bool trigger_glGetnUniformdvARB = false; -void stub_glGetnUniformdvARB() { - if(trigger_glGetnUniformdvARB) return; - trigger_glGetnUniformdvARB = true; - printf("Stub: glGetnUniformdvARB\n"); -} -static bool trigger_glFramebufferSampleLocationsfvARB = false; -void stub_glFramebufferSampleLocationsfvARB() { - if(trigger_glFramebufferSampleLocationsfvARB) return; - trigger_glFramebufferSampleLocationsfvARB = true; - printf("Stub: glFramebufferSampleLocationsfvARB\n"); -} -static bool trigger_glNamedFramebufferSampleLocationsfvARB = false; -void stub_glNamedFramebufferSampleLocationsfvARB() { - if(trigger_glNamedFramebufferSampleLocationsfvARB) return; - trigger_glNamedFramebufferSampleLocationsfvARB = true; - printf("Stub: glNamedFramebufferSampleLocationsfvARB\n"); -} -static bool trigger_glEvaluateDepthValuesARB = false; -void stub_glEvaluateDepthValuesARB() { - if(trigger_glEvaluateDepthValuesARB) return; - trigger_glEvaluateDepthValuesARB = true; - printf("Stub: glEvaluateDepthValuesARB\n"); -} -static bool trigger_glMinSampleShadingARB = false; -void stub_glMinSampleShadingARB() { - if(trigger_glMinSampleShadingARB) return; - trigger_glMinSampleShadingARB = true; - printf("Stub: glMinSampleShadingARB\n"); -} -static bool trigger_glNamedStringARB = false; -void stub_glNamedStringARB() { - if(trigger_glNamedStringARB) return; - trigger_glNamedStringARB = true; - printf("Stub: glNamedStringARB\n"); -} -static bool trigger_glDeleteNamedStringARB = false; -void stub_glDeleteNamedStringARB() { - if(trigger_glDeleteNamedStringARB) return; - trigger_glDeleteNamedStringARB = true; - printf("Stub: glDeleteNamedStringARB\n"); -} -static bool trigger_glCompileShaderIncludeARB = false; -void stub_glCompileShaderIncludeARB() { - if(trigger_glCompileShaderIncludeARB) return; - trigger_glCompileShaderIncludeARB = true; - printf("Stub: glCompileShaderIncludeARB\n"); -} -static bool trigger_glIsNamedStringARB = false; -void stub_glIsNamedStringARB() { - if(trigger_glIsNamedStringARB) return; - trigger_glIsNamedStringARB = true; - printf("Stub: glIsNamedStringARB\n"); -} -static bool trigger_glGetNamedStringARB = false; -void stub_glGetNamedStringARB() { - if(trigger_glGetNamedStringARB) return; - trigger_glGetNamedStringARB = true; - printf("Stub: glGetNamedStringARB\n"); -} -static bool trigger_glGetNamedStringivARB = false; -void stub_glGetNamedStringivARB() { - if(trigger_glGetNamedStringivARB) return; - trigger_glGetNamedStringivARB = true; - printf("Stub: glGetNamedStringivARB\n"); -} -static bool trigger_glBufferPageCommitmentARB = false; -void stub_glBufferPageCommitmentARB() { - if(trigger_glBufferPageCommitmentARB) return; - trigger_glBufferPageCommitmentARB = true; - printf("Stub: glBufferPageCommitmentARB\n"); -} -static bool trigger_glNamedBufferPageCommitmentEXT = false; -void stub_glNamedBufferPageCommitmentEXT() { - if(trigger_glNamedBufferPageCommitmentEXT) return; - trigger_glNamedBufferPageCommitmentEXT = true; - printf("Stub: glNamedBufferPageCommitmentEXT\n"); -} -static bool trigger_glNamedBufferPageCommitmentARB = false; -void stub_glNamedBufferPageCommitmentARB() { - if(trigger_glNamedBufferPageCommitmentARB) return; - trigger_glNamedBufferPageCommitmentARB = true; - printf("Stub: glNamedBufferPageCommitmentARB\n"); -} -static bool trigger_glTexPageCommitmentARB = false; -void stub_glTexPageCommitmentARB() { - if(trigger_glTexPageCommitmentARB) return; - trigger_glTexPageCommitmentARB = true; - printf("Stub: glTexPageCommitmentARB\n"); -} -static bool trigger_glTexBufferARB = false; -void stub_glTexBufferARB() { - if(trigger_glTexBufferARB) return; - trigger_glTexBufferARB = true; - printf("Stub: glTexBufferARB\n"); -} -static bool trigger_glDepthRangeArraydvNV = false; -void stub_glDepthRangeArraydvNV() { - if(trigger_glDepthRangeArraydvNV) return; - trigger_glDepthRangeArraydvNV = true; - printf("Stub: glDepthRangeArraydvNV\n"); -} -static bool trigger_glDepthRangeIndexeddNV = false; -void stub_glDepthRangeIndexeddNV() { - if(trigger_glDepthRangeIndexeddNV) return; - trigger_glDepthRangeIndexeddNV = true; - printf("Stub: glDepthRangeIndexeddNV\n"); -} -static bool trigger_glBlendBarrierKHR = false; -void stub_glBlendBarrierKHR() { - if(trigger_glBlendBarrierKHR) return; - trigger_glBlendBarrierKHR = true; - printf("Stub: glBlendBarrierKHR\n"); -} -static bool trigger_glMaxShaderCompilerThreadsKHR = false; -void stub_glMaxShaderCompilerThreadsKHR() { - if(trigger_glMaxShaderCompilerThreadsKHR) return; - trigger_glMaxShaderCompilerThreadsKHR = true; - printf("Stub: glMaxShaderCompilerThreadsKHR\n"); -} -static bool trigger_glRenderbufferStorageMultisampleAdvancedAMD = false; -void stub_glRenderbufferStorageMultisampleAdvancedAMD() { - if(trigger_glRenderbufferStorageMultisampleAdvancedAMD) return; - trigger_glRenderbufferStorageMultisampleAdvancedAMD = true; - printf("Stub: glRenderbufferStorageMultisampleAdvancedAMD\n"); -} -static bool trigger_glNamedRenderbufferStorageMultisampleAdvancedAMD = false; -void stub_glNamedRenderbufferStorageMultisampleAdvancedAMD() { - if(trigger_glNamedRenderbufferStorageMultisampleAdvancedAMD) return; - trigger_glNamedRenderbufferStorageMultisampleAdvancedAMD = true; - printf("Stub: glNamedRenderbufferStorageMultisampleAdvancedAMD\n"); -} -static bool trigger_glGetPerfMonitorGroupsAMD = false; -void stub_glGetPerfMonitorGroupsAMD() { - if(trigger_glGetPerfMonitorGroupsAMD) return; - trigger_glGetPerfMonitorGroupsAMD = true; - printf("Stub: glGetPerfMonitorGroupsAMD\n"); -} -static bool trigger_glGetPerfMonitorCountersAMD = false; -void stub_glGetPerfMonitorCountersAMD() { - if(trigger_glGetPerfMonitorCountersAMD) return; - trigger_glGetPerfMonitorCountersAMD = true; - printf("Stub: glGetPerfMonitorCountersAMD\n"); -} -static bool trigger_glGetPerfMonitorGroupStringAMD = false; -void stub_glGetPerfMonitorGroupStringAMD() { - if(trigger_glGetPerfMonitorGroupStringAMD) return; - trigger_glGetPerfMonitorGroupStringAMD = true; - printf("Stub: glGetPerfMonitorGroupStringAMD\n"); -} -static bool trigger_glGetPerfMonitorCounterStringAMD = false; -void stub_glGetPerfMonitorCounterStringAMD() { - if(trigger_glGetPerfMonitorCounterStringAMD) return; - trigger_glGetPerfMonitorCounterStringAMD = true; - printf("Stub: glGetPerfMonitorCounterStringAMD\n"); -} -static bool trigger_glGetPerfMonitorCounterInfoAMD = false; -void stub_glGetPerfMonitorCounterInfoAMD() { - if(trigger_glGetPerfMonitorCounterInfoAMD) return; - trigger_glGetPerfMonitorCounterInfoAMD = true; - printf("Stub: glGetPerfMonitorCounterInfoAMD\n"); -} -static bool trigger_glGenPerfMonitorsAMD = false; -void stub_glGenPerfMonitorsAMD() { - if(trigger_glGenPerfMonitorsAMD) return; - trigger_glGenPerfMonitorsAMD = true; - printf("Stub: glGenPerfMonitorsAMD\n"); -} -static bool trigger_glDeletePerfMonitorsAMD = false; -void stub_glDeletePerfMonitorsAMD() { - if(trigger_glDeletePerfMonitorsAMD) return; - trigger_glDeletePerfMonitorsAMD = true; - printf("Stub: glDeletePerfMonitorsAMD\n"); -} -static bool trigger_glSelectPerfMonitorCountersAMD = false; -void stub_glSelectPerfMonitorCountersAMD() { - if(trigger_glSelectPerfMonitorCountersAMD) return; - trigger_glSelectPerfMonitorCountersAMD = true; - printf("Stub: glSelectPerfMonitorCountersAMD\n"); -} -static bool trigger_glBeginPerfMonitorAMD = false; -void stub_glBeginPerfMonitorAMD() { - if(trigger_glBeginPerfMonitorAMD) return; - trigger_glBeginPerfMonitorAMD = true; - printf("Stub: glBeginPerfMonitorAMD\n"); -} -static bool trigger_glEndPerfMonitorAMD = false; -void stub_glEndPerfMonitorAMD() { - if(trigger_glEndPerfMonitorAMD) return; - trigger_glEndPerfMonitorAMD = true; - printf("Stub: glEndPerfMonitorAMD\n"); -} -static bool trigger_glGetPerfMonitorCounterDataAMD = false; -void stub_glGetPerfMonitorCounterDataAMD() { - if(trigger_glGetPerfMonitorCounterDataAMD) return; - trigger_glGetPerfMonitorCounterDataAMD = true; - printf("Stub: glGetPerfMonitorCounterDataAMD\n"); -} -static bool trigger_glEGLImageTargetTexStorageEXT = false; -void stub_glEGLImageTargetTexStorageEXT() { - if(trigger_glEGLImageTargetTexStorageEXT) return; - trigger_glEGLImageTargetTexStorageEXT = true; - printf("Stub: glEGLImageTargetTexStorageEXT\n"); -} -static bool trigger_glEGLImageTargetTextureStorageEXT = false; -void stub_glEGLImageTargetTextureStorageEXT() { - if(trigger_glEGLImageTargetTextureStorageEXT) return; - trigger_glEGLImageTargetTextureStorageEXT = true; - printf("Stub: glEGLImageTargetTextureStorageEXT\n"); -} -static bool trigger_glLabelObjectEXT = false; -void stub_glLabelObjectEXT() { - if(trigger_glLabelObjectEXT) return; - trigger_glLabelObjectEXT = true; - printf("Stub: glLabelObjectEXT\n"); -} -static bool trigger_glGetObjectLabelEXT = false; -void stub_glGetObjectLabelEXT() { - if(trigger_glGetObjectLabelEXT) return; - trigger_glGetObjectLabelEXT = true; - printf("Stub: glGetObjectLabelEXT\n"); -} -static bool trigger_glInsertEventMarkerEXT = false; -void stub_glInsertEventMarkerEXT() { - if(trigger_glInsertEventMarkerEXT) return; - trigger_glInsertEventMarkerEXT = true; - printf("Stub: glInsertEventMarkerEXT\n"); -} -static bool trigger_glPushGroupMarkerEXT = false; -void stub_glPushGroupMarkerEXT() { - if(trigger_glPushGroupMarkerEXT) return; - trigger_glPushGroupMarkerEXT = true; - printf("Stub: glPushGroupMarkerEXT\n"); -} -static bool trigger_glPopGroupMarkerEXT = false; -void stub_glPopGroupMarkerEXT() { - if(trigger_glPopGroupMarkerEXT) return; - trigger_glPopGroupMarkerEXT = true; - printf("Stub: glPopGroupMarkerEXT\n"); -} -static bool trigger_glMatrixLoadfEXT = false; -void stub_glMatrixLoadfEXT() { - if(trigger_glMatrixLoadfEXT) return; - trigger_glMatrixLoadfEXT = true; - printf("Stub: glMatrixLoadfEXT\n"); -} -static bool trigger_glMatrixLoaddEXT = false; -void stub_glMatrixLoaddEXT() { - if(trigger_glMatrixLoaddEXT) return; - trigger_glMatrixLoaddEXT = true; - printf("Stub: glMatrixLoaddEXT\n"); -} -static bool trigger_glMatrixMultfEXT = false; -void stub_glMatrixMultfEXT() { - if(trigger_glMatrixMultfEXT) return; - trigger_glMatrixMultfEXT = true; - printf("Stub: glMatrixMultfEXT\n"); -} -static bool trigger_glMatrixMultdEXT = false; -void stub_glMatrixMultdEXT() { - if(trigger_glMatrixMultdEXT) return; - trigger_glMatrixMultdEXT = true; - printf("Stub: glMatrixMultdEXT\n"); -} -static bool trigger_glMatrixLoadIdentityEXT = false; -void stub_glMatrixLoadIdentityEXT() { - if(trigger_glMatrixLoadIdentityEXT) return; - trigger_glMatrixLoadIdentityEXT = true; - printf("Stub: glMatrixLoadIdentityEXT\n"); -} -static bool trigger_glMatrixRotatefEXT = false; -void stub_glMatrixRotatefEXT() { - if(trigger_glMatrixRotatefEXT) return; - trigger_glMatrixRotatefEXT = true; - printf("Stub: glMatrixRotatefEXT\n"); -} -static bool trigger_glMatrixRotatedEXT = false; -void stub_glMatrixRotatedEXT() { - if(trigger_glMatrixRotatedEXT) return; - trigger_glMatrixRotatedEXT = true; - printf("Stub: glMatrixRotatedEXT\n"); -} -static bool trigger_glMatrixScalefEXT = false; -void stub_glMatrixScalefEXT() { - if(trigger_glMatrixScalefEXT) return; - trigger_glMatrixScalefEXT = true; - printf("Stub: glMatrixScalefEXT\n"); -} -static bool trigger_glMatrixScaledEXT = false; -void stub_glMatrixScaledEXT() { - if(trigger_glMatrixScaledEXT) return; - trigger_glMatrixScaledEXT = true; - printf("Stub: glMatrixScaledEXT\n"); -} -static bool trigger_glMatrixTranslatefEXT = false; -void stub_glMatrixTranslatefEXT() { - if(trigger_glMatrixTranslatefEXT) return; - trigger_glMatrixTranslatefEXT = true; - printf("Stub: glMatrixTranslatefEXT\n"); -} -static bool trigger_glMatrixTranslatedEXT = false; -void stub_glMatrixTranslatedEXT() { - if(trigger_glMatrixTranslatedEXT) return; - trigger_glMatrixTranslatedEXT = true; - printf("Stub: glMatrixTranslatedEXT\n"); -} -static bool trigger_glMatrixFrustumEXT = false; -void stub_glMatrixFrustumEXT() { - if(trigger_glMatrixFrustumEXT) return; - trigger_glMatrixFrustumEXT = true; - printf("Stub: glMatrixFrustumEXT\n"); -} -static bool trigger_glMatrixOrthoEXT = false; -void stub_glMatrixOrthoEXT() { - if(trigger_glMatrixOrthoEXT) return; - trigger_glMatrixOrthoEXT = true; - printf("Stub: glMatrixOrthoEXT\n"); -} -static bool trigger_glMatrixPopEXT = false; -void stub_glMatrixPopEXT() { - if(trigger_glMatrixPopEXT) return; - trigger_glMatrixPopEXT = true; - printf("Stub: glMatrixPopEXT\n"); -} -static bool trigger_glMatrixPushEXT = false; -void stub_glMatrixPushEXT() { - if(trigger_glMatrixPushEXT) return; - trigger_glMatrixPushEXT = true; - printf("Stub: glMatrixPushEXT\n"); -} -static bool trigger_glClientAttribDefaultEXT = false; -void stub_glClientAttribDefaultEXT() { - if(trigger_glClientAttribDefaultEXT) return; - trigger_glClientAttribDefaultEXT = true; - printf("Stub: glClientAttribDefaultEXT\n"); -} -static bool trigger_glPushClientAttribDefaultEXT = false; -void stub_glPushClientAttribDefaultEXT() { - if(trigger_glPushClientAttribDefaultEXT) return; - trigger_glPushClientAttribDefaultEXT = true; - printf("Stub: glPushClientAttribDefaultEXT\n"); -} -static bool trigger_glTextureParameterfEXT = false; -void stub_glTextureParameterfEXT() { - if(trigger_glTextureParameterfEXT) return; - trigger_glTextureParameterfEXT = true; - printf("Stub: glTextureParameterfEXT\n"); -} -static bool trigger_glTextureParameterfvEXT = false; -void stub_glTextureParameterfvEXT() { - if(trigger_glTextureParameterfvEXT) return; - trigger_glTextureParameterfvEXT = true; - printf("Stub: glTextureParameterfvEXT\n"); -} -static bool trigger_glTextureParameteriEXT = false; -void stub_glTextureParameteriEXT() { - if(trigger_glTextureParameteriEXT) return; - trigger_glTextureParameteriEXT = true; - printf("Stub: glTextureParameteriEXT\n"); -} -static bool trigger_glTextureParameterivEXT = false; -void stub_glTextureParameterivEXT() { - if(trigger_glTextureParameterivEXT) return; - trigger_glTextureParameterivEXT = true; - printf("Stub: glTextureParameterivEXT\n"); -} -static bool trigger_glTextureImage1DEXT = false; -void stub_glTextureImage1DEXT() { - if(trigger_glTextureImage1DEXT) return; - trigger_glTextureImage1DEXT = true; - printf("Stub: glTextureImage1DEXT\n"); -} -static bool trigger_glTextureImage2DEXT = false; -void stub_glTextureImage2DEXT() { - if(trigger_glTextureImage2DEXT) return; - trigger_glTextureImage2DEXT = true; - printf("Stub: glTextureImage2DEXT\n"); -} -static bool trigger_glTextureSubImage1DEXT = false; -void stub_glTextureSubImage1DEXT() { - if(trigger_glTextureSubImage1DEXT) return; - trigger_glTextureSubImage1DEXT = true; - printf("Stub: glTextureSubImage1DEXT\n"); -} -static bool trigger_glTextureSubImage2DEXT = false; -void stub_glTextureSubImage2DEXT() { - if(trigger_glTextureSubImage2DEXT) return; - trigger_glTextureSubImage2DEXT = true; - printf("Stub: glTextureSubImage2DEXT\n"); -} -static bool trigger_glCopyTextureImage1DEXT = false; -void stub_glCopyTextureImage1DEXT() { - if(trigger_glCopyTextureImage1DEXT) return; - trigger_glCopyTextureImage1DEXT = true; - printf("Stub: glCopyTextureImage1DEXT\n"); -} -static bool trigger_glCopyTextureImage2DEXT = false; -void stub_glCopyTextureImage2DEXT() { - if(trigger_glCopyTextureImage2DEXT) return; - trigger_glCopyTextureImage2DEXT = true; - printf("Stub: glCopyTextureImage2DEXT\n"); -} -static bool trigger_glCopyTextureSubImage1DEXT = false; -void stub_glCopyTextureSubImage1DEXT() { - if(trigger_glCopyTextureSubImage1DEXT) return; - trigger_glCopyTextureSubImage1DEXT = true; - printf("Stub: glCopyTextureSubImage1DEXT\n"); -} -static bool trigger_glCopyTextureSubImage2DEXT = false; -void stub_glCopyTextureSubImage2DEXT() { - if(trigger_glCopyTextureSubImage2DEXT) return; - trigger_glCopyTextureSubImage2DEXT = true; - printf("Stub: glCopyTextureSubImage2DEXT\n"); -} -static bool trigger_glGetTextureImageEXT = false; -void stub_glGetTextureImageEXT() { - if(trigger_glGetTextureImageEXT) return; - trigger_glGetTextureImageEXT = true; - printf("Stub: glGetTextureImageEXT\n"); -} -static bool trigger_glGetTextureParameterfvEXT = false; -void stub_glGetTextureParameterfvEXT() { - if(trigger_glGetTextureParameterfvEXT) return; - trigger_glGetTextureParameterfvEXT = true; - printf("Stub: glGetTextureParameterfvEXT\n"); -} -static bool trigger_glGetTextureParameterivEXT = false; -void stub_glGetTextureParameterivEXT() { - if(trigger_glGetTextureParameterivEXT) return; - trigger_glGetTextureParameterivEXT = true; - printf("Stub: glGetTextureParameterivEXT\n"); -} -static bool trigger_glGetTextureLevelParameterfvEXT = false; -void stub_glGetTextureLevelParameterfvEXT() { - if(trigger_glGetTextureLevelParameterfvEXT) return; - trigger_glGetTextureLevelParameterfvEXT = true; - printf("Stub: glGetTextureLevelParameterfvEXT\n"); -} -static bool trigger_glGetTextureLevelParameterivEXT = false; -void stub_glGetTextureLevelParameterivEXT() { - if(trigger_glGetTextureLevelParameterivEXT) return; - trigger_glGetTextureLevelParameterivEXT = true; - printf("Stub: glGetTextureLevelParameterivEXT\n"); -} -static bool trigger_glTextureImage3DEXT = false; -void stub_glTextureImage3DEXT() { - if(trigger_glTextureImage3DEXT) return; - trigger_glTextureImage3DEXT = true; - printf("Stub: glTextureImage3DEXT\n"); -} -static bool trigger_glTextureSubImage3DEXT = false; -void stub_glTextureSubImage3DEXT() { - if(trigger_glTextureSubImage3DEXT) return; - trigger_glTextureSubImage3DEXT = true; - printf("Stub: glTextureSubImage3DEXT\n"); -} -static bool trigger_glCopyTextureSubImage3DEXT = false; -void stub_glCopyTextureSubImage3DEXT() { - if(trigger_glCopyTextureSubImage3DEXT) return; - trigger_glCopyTextureSubImage3DEXT = true; - printf("Stub: glCopyTextureSubImage3DEXT\n"); -} -static bool trigger_glBindMultiTextureEXT = false; -void stub_glBindMultiTextureEXT() { - if(trigger_glBindMultiTextureEXT) return; - trigger_glBindMultiTextureEXT = true; - printf("Stub: glBindMultiTextureEXT\n"); -} -static bool trigger_glMultiTexCoordPointerEXT = false; -void stub_glMultiTexCoordPointerEXT() { - if(trigger_glMultiTexCoordPointerEXT) return; - trigger_glMultiTexCoordPointerEXT = true; - printf("Stub: glMultiTexCoordPointerEXT\n"); -} -static bool trigger_glMultiTexEnvfEXT = false; -void stub_glMultiTexEnvfEXT() { - if(trigger_glMultiTexEnvfEXT) return; - trigger_glMultiTexEnvfEXT = true; - printf("Stub: glMultiTexEnvfEXT\n"); -} -static bool trigger_glMultiTexEnvfvEXT = false; -void stub_glMultiTexEnvfvEXT() { - if(trigger_glMultiTexEnvfvEXT) return; - trigger_glMultiTexEnvfvEXT = true; - printf("Stub: glMultiTexEnvfvEXT\n"); -} -static bool trigger_glMultiTexEnviEXT = false; -void stub_glMultiTexEnviEXT() { - if(trigger_glMultiTexEnviEXT) return; - trigger_glMultiTexEnviEXT = true; - printf("Stub: glMultiTexEnviEXT\n"); -} -static bool trigger_glMultiTexEnvivEXT = false; -void stub_glMultiTexEnvivEXT() { - if(trigger_glMultiTexEnvivEXT) return; - trigger_glMultiTexEnvivEXT = true; - printf("Stub: glMultiTexEnvivEXT\n"); -} -static bool trigger_glMultiTexGendEXT = false; -void stub_glMultiTexGendEXT() { - if(trigger_glMultiTexGendEXT) return; - trigger_glMultiTexGendEXT = true; - printf("Stub: glMultiTexGendEXT\n"); -} -static bool trigger_glMultiTexGendvEXT = false; -void stub_glMultiTexGendvEXT() { - if(trigger_glMultiTexGendvEXT) return; - trigger_glMultiTexGendvEXT = true; - printf("Stub: glMultiTexGendvEXT\n"); -} -static bool trigger_glMultiTexGenfEXT = false; -void stub_glMultiTexGenfEXT() { - if(trigger_glMultiTexGenfEXT) return; - trigger_glMultiTexGenfEXT = true; - printf("Stub: glMultiTexGenfEXT\n"); -} -static bool trigger_glMultiTexGenfvEXT = false; -void stub_glMultiTexGenfvEXT() { - if(trigger_glMultiTexGenfvEXT) return; - trigger_glMultiTexGenfvEXT = true; - printf("Stub: glMultiTexGenfvEXT\n"); -} -static bool trigger_glMultiTexGeniEXT = false; -void stub_glMultiTexGeniEXT() { - if(trigger_glMultiTexGeniEXT) return; - trigger_glMultiTexGeniEXT = true; - printf("Stub: glMultiTexGeniEXT\n"); -} -static bool trigger_glMultiTexGenivEXT = false; -void stub_glMultiTexGenivEXT() { - if(trigger_glMultiTexGenivEXT) return; - trigger_glMultiTexGenivEXT = true; - printf("Stub: glMultiTexGenivEXT\n"); -} -static bool trigger_glGetMultiTexEnvfvEXT = false; -void stub_glGetMultiTexEnvfvEXT() { - if(trigger_glGetMultiTexEnvfvEXT) return; - trigger_glGetMultiTexEnvfvEXT = true; - printf("Stub: glGetMultiTexEnvfvEXT\n"); -} -static bool trigger_glGetMultiTexEnvivEXT = false; -void stub_glGetMultiTexEnvivEXT() { - if(trigger_glGetMultiTexEnvivEXT) return; - trigger_glGetMultiTexEnvivEXT = true; - printf("Stub: glGetMultiTexEnvivEXT\n"); -} -static bool trigger_glGetMultiTexGendvEXT = false; -void stub_glGetMultiTexGendvEXT() { - if(trigger_glGetMultiTexGendvEXT) return; - trigger_glGetMultiTexGendvEXT = true; - printf("Stub: glGetMultiTexGendvEXT\n"); -} -static bool trigger_glGetMultiTexGenfvEXT = false; -void stub_glGetMultiTexGenfvEXT() { - if(trigger_glGetMultiTexGenfvEXT) return; - trigger_glGetMultiTexGenfvEXT = true; - printf("Stub: glGetMultiTexGenfvEXT\n"); -} -static bool trigger_glGetMultiTexGenivEXT = false; -void stub_glGetMultiTexGenivEXT() { - if(trigger_glGetMultiTexGenivEXT) return; - trigger_glGetMultiTexGenivEXT = true; - printf("Stub: glGetMultiTexGenivEXT\n"); -} -static bool trigger_glMultiTexParameteriEXT = false; -void stub_glMultiTexParameteriEXT() { - if(trigger_glMultiTexParameteriEXT) return; - trigger_glMultiTexParameteriEXT = true; - printf("Stub: glMultiTexParameteriEXT\n"); -} -static bool trigger_glMultiTexParameterivEXT = false; -void stub_glMultiTexParameterivEXT() { - if(trigger_glMultiTexParameterivEXT) return; - trigger_glMultiTexParameterivEXT = true; - printf("Stub: glMultiTexParameterivEXT\n"); -} -static bool trigger_glMultiTexParameterfEXT = false; -void stub_glMultiTexParameterfEXT() { - if(trigger_glMultiTexParameterfEXT) return; - trigger_glMultiTexParameterfEXT = true; - printf("Stub: glMultiTexParameterfEXT\n"); -} -static bool trigger_glMultiTexParameterfvEXT = false; -void stub_glMultiTexParameterfvEXT() { - if(trigger_glMultiTexParameterfvEXT) return; - trigger_glMultiTexParameterfvEXT = true; - printf("Stub: glMultiTexParameterfvEXT\n"); -} -static bool trigger_glMultiTexImage1DEXT = false; -void stub_glMultiTexImage1DEXT() { - if(trigger_glMultiTexImage1DEXT) return; - trigger_glMultiTexImage1DEXT = true; - printf("Stub: glMultiTexImage1DEXT\n"); -} -static bool trigger_glMultiTexImage2DEXT = false; -void stub_glMultiTexImage2DEXT() { - if(trigger_glMultiTexImage2DEXT) return; - trigger_glMultiTexImage2DEXT = true; - printf("Stub: glMultiTexImage2DEXT\n"); -} -static bool trigger_glMultiTexSubImage1DEXT = false; -void stub_glMultiTexSubImage1DEXT() { - if(trigger_glMultiTexSubImage1DEXT) return; - trigger_glMultiTexSubImage1DEXT = true; - printf("Stub: glMultiTexSubImage1DEXT\n"); -} -static bool trigger_glMultiTexSubImage2DEXT = false; -void stub_glMultiTexSubImage2DEXT() { - if(trigger_glMultiTexSubImage2DEXT) return; - trigger_glMultiTexSubImage2DEXT = true; - printf("Stub: glMultiTexSubImage2DEXT\n"); -} -static bool trigger_glCopyMultiTexImage1DEXT = false; -void stub_glCopyMultiTexImage1DEXT() { - if(trigger_glCopyMultiTexImage1DEXT) return; - trigger_glCopyMultiTexImage1DEXT = true; - printf("Stub: glCopyMultiTexImage1DEXT\n"); -} -static bool trigger_glCopyMultiTexImage2DEXT = false; -void stub_glCopyMultiTexImage2DEXT() { - if(trigger_glCopyMultiTexImage2DEXT) return; - trigger_glCopyMultiTexImage2DEXT = true; - printf("Stub: glCopyMultiTexImage2DEXT\n"); -} -static bool trigger_glCopyMultiTexSubImage1DEXT = false; -void stub_glCopyMultiTexSubImage1DEXT() { - if(trigger_glCopyMultiTexSubImage1DEXT) return; - trigger_glCopyMultiTexSubImage1DEXT = true; - printf("Stub: glCopyMultiTexSubImage1DEXT\n"); -} -static bool trigger_glCopyMultiTexSubImage2DEXT = false; -void stub_glCopyMultiTexSubImage2DEXT() { - if(trigger_glCopyMultiTexSubImage2DEXT) return; - trigger_glCopyMultiTexSubImage2DEXT = true; - printf("Stub: glCopyMultiTexSubImage2DEXT\n"); -} -static bool trigger_glGetMultiTexImageEXT = false; -void stub_glGetMultiTexImageEXT() { - if(trigger_glGetMultiTexImageEXT) return; - trigger_glGetMultiTexImageEXT = true; - printf("Stub: glGetMultiTexImageEXT\n"); -} -static bool trigger_glGetMultiTexParameterfvEXT = false; -void stub_glGetMultiTexParameterfvEXT() { - if(trigger_glGetMultiTexParameterfvEXT) return; - trigger_glGetMultiTexParameterfvEXT = true; - printf("Stub: glGetMultiTexParameterfvEXT\n"); -} -static bool trigger_glGetMultiTexParameterivEXT = false; -void stub_glGetMultiTexParameterivEXT() { - if(trigger_glGetMultiTexParameterivEXT) return; - trigger_glGetMultiTexParameterivEXT = true; - printf("Stub: glGetMultiTexParameterivEXT\n"); -} -static bool trigger_glGetMultiTexLevelParameterfvEXT = false; -void stub_glGetMultiTexLevelParameterfvEXT() { - if(trigger_glGetMultiTexLevelParameterfvEXT) return; - trigger_glGetMultiTexLevelParameterfvEXT = true; - printf("Stub: glGetMultiTexLevelParameterfvEXT\n"); -} -static bool trigger_glGetMultiTexLevelParameterivEXT = false; -void stub_glGetMultiTexLevelParameterivEXT() { - if(trigger_glGetMultiTexLevelParameterivEXT) return; - trigger_glGetMultiTexLevelParameterivEXT = true; - printf("Stub: glGetMultiTexLevelParameterivEXT\n"); -} -static bool trigger_glMultiTexImage3DEXT = false; -void stub_glMultiTexImage3DEXT() { - if(trigger_glMultiTexImage3DEXT) return; - trigger_glMultiTexImage3DEXT = true; - printf("Stub: glMultiTexImage3DEXT\n"); -} -static bool trigger_glMultiTexSubImage3DEXT = false; -void stub_glMultiTexSubImage3DEXT() { - if(trigger_glMultiTexSubImage3DEXT) return; - trigger_glMultiTexSubImage3DEXT = true; - printf("Stub: glMultiTexSubImage3DEXT\n"); -} -static bool trigger_glCopyMultiTexSubImage3DEXT = false; -void stub_glCopyMultiTexSubImage3DEXT() { - if(trigger_glCopyMultiTexSubImage3DEXT) return; - trigger_glCopyMultiTexSubImage3DEXT = true; - printf("Stub: glCopyMultiTexSubImage3DEXT\n"); -} -static bool trigger_glEnableClientStateIndexedEXT = false; -void stub_glEnableClientStateIndexedEXT() { - if(trigger_glEnableClientStateIndexedEXT) return; - trigger_glEnableClientStateIndexedEXT = true; - printf("Stub: glEnableClientStateIndexedEXT\n"); -} -static bool trigger_glDisableClientStateIndexedEXT = false; -void stub_glDisableClientStateIndexedEXT() { - if(trigger_glDisableClientStateIndexedEXT) return; - trigger_glDisableClientStateIndexedEXT = true; - printf("Stub: glDisableClientStateIndexedEXT\n"); -} -static bool trigger_glGetFloatIndexedvEXT = false; -void stub_glGetFloatIndexedvEXT() { - if(trigger_glGetFloatIndexedvEXT) return; - trigger_glGetFloatIndexedvEXT = true; - printf("Stub: glGetFloatIndexedvEXT\n"); -} -static bool trigger_glGetDoubleIndexedvEXT = false; -void stub_glGetDoubleIndexedvEXT() { - if(trigger_glGetDoubleIndexedvEXT) return; - trigger_glGetDoubleIndexedvEXT = true; - printf("Stub: glGetDoubleIndexedvEXT\n"); -} -static bool trigger_glGetPointerIndexedvEXT = false; -void stub_glGetPointerIndexedvEXT() { - if(trigger_glGetPointerIndexedvEXT) return; - trigger_glGetPointerIndexedvEXT = true; - printf("Stub: glGetPointerIndexedvEXT\n"); -} -static bool trigger_glEnableIndexedEXT = false; -void stub_glEnableIndexedEXT() { - if(trigger_glEnableIndexedEXT) return; - trigger_glEnableIndexedEXT = true; - printf("Stub: glEnableIndexedEXT\n"); -} -static bool trigger_glDisableIndexedEXT = false; -void stub_glDisableIndexedEXT() { - if(trigger_glDisableIndexedEXT) return; - trigger_glDisableIndexedEXT = true; - printf("Stub: glDisableIndexedEXT\n"); -} -static bool trigger_glIsEnabledIndexedEXT = false; -void stub_glIsEnabledIndexedEXT() { - if(trigger_glIsEnabledIndexedEXT) return; - trigger_glIsEnabledIndexedEXT = true; - printf("Stub: glIsEnabledIndexedEXT\n"); -} -static bool trigger_glGetIntegerIndexedvEXT = false; -void stub_glGetIntegerIndexedvEXT() { - if(trigger_glGetIntegerIndexedvEXT) return; - trigger_glGetIntegerIndexedvEXT = true; - printf("Stub: glGetIntegerIndexedvEXT\n"); -} -static bool trigger_glGetBooleanIndexedvEXT = false; -void stub_glGetBooleanIndexedvEXT() { - if(trigger_glGetBooleanIndexedvEXT) return; - trigger_glGetBooleanIndexedvEXT = true; - printf("Stub: glGetBooleanIndexedvEXT\n"); -} -static bool trigger_glCompressedTextureImage3DEXT = false; -void stub_glCompressedTextureImage3DEXT() { - if(trigger_glCompressedTextureImage3DEXT) return; - trigger_glCompressedTextureImage3DEXT = true; - printf("Stub: glCompressedTextureImage3DEXT\n"); -} -static bool trigger_glCompressedTextureImage2DEXT = false; -void stub_glCompressedTextureImage2DEXT() { - if(trigger_glCompressedTextureImage2DEXT) return; - trigger_glCompressedTextureImage2DEXT = true; - printf("Stub: glCompressedTextureImage2DEXT\n"); -} -static bool trigger_glCompressedTextureImage1DEXT = false; -void stub_glCompressedTextureImage1DEXT() { - if(trigger_glCompressedTextureImage1DEXT) return; - trigger_glCompressedTextureImage1DEXT = true; - printf("Stub: glCompressedTextureImage1DEXT\n"); -} -static bool trigger_glCompressedTextureSubImage3DEXT = false; -void stub_glCompressedTextureSubImage3DEXT() { - if(trigger_glCompressedTextureSubImage3DEXT) return; - trigger_glCompressedTextureSubImage3DEXT = true; - printf("Stub: glCompressedTextureSubImage3DEXT\n"); -} -static bool trigger_glCompressedTextureSubImage2DEXT = false; -void stub_glCompressedTextureSubImage2DEXT() { - if(trigger_glCompressedTextureSubImage2DEXT) return; - trigger_glCompressedTextureSubImage2DEXT = true; - printf("Stub: glCompressedTextureSubImage2DEXT\n"); -} -static bool trigger_glCompressedTextureSubImage1DEXT = false; -void stub_glCompressedTextureSubImage1DEXT() { - if(trigger_glCompressedTextureSubImage1DEXT) return; - trigger_glCompressedTextureSubImage1DEXT = true; - printf("Stub: glCompressedTextureSubImage1DEXT\n"); -} -static bool trigger_glGetCompressedTextureImageEXT = false; -void stub_glGetCompressedTextureImageEXT() { - if(trigger_glGetCompressedTextureImageEXT) return; - trigger_glGetCompressedTextureImageEXT = true; - printf("Stub: glGetCompressedTextureImageEXT\n"); -} -static bool trigger_glCompressedMultiTexImage3DEXT = false; -void stub_glCompressedMultiTexImage3DEXT() { - if(trigger_glCompressedMultiTexImage3DEXT) return; - trigger_glCompressedMultiTexImage3DEXT = true; - printf("Stub: glCompressedMultiTexImage3DEXT\n"); -} -static bool trigger_glCompressedMultiTexImage2DEXT = false; -void stub_glCompressedMultiTexImage2DEXT() { - if(trigger_glCompressedMultiTexImage2DEXT) return; - trigger_glCompressedMultiTexImage2DEXT = true; - printf("Stub: glCompressedMultiTexImage2DEXT\n"); -} -static bool trigger_glCompressedMultiTexImage1DEXT = false; -void stub_glCompressedMultiTexImage1DEXT() { - if(trigger_glCompressedMultiTexImage1DEXT) return; - trigger_glCompressedMultiTexImage1DEXT = true; - printf("Stub: glCompressedMultiTexImage1DEXT\n"); -} -static bool trigger_glCompressedMultiTexSubImage3DEXT = false; -void stub_glCompressedMultiTexSubImage3DEXT() { - if(trigger_glCompressedMultiTexSubImage3DEXT) return; - trigger_glCompressedMultiTexSubImage3DEXT = true; - printf("Stub: glCompressedMultiTexSubImage3DEXT\n"); -} -static bool trigger_glCompressedMultiTexSubImage2DEXT = false; -void stub_glCompressedMultiTexSubImage2DEXT() { - if(trigger_glCompressedMultiTexSubImage2DEXT) return; - trigger_glCompressedMultiTexSubImage2DEXT = true; - printf("Stub: glCompressedMultiTexSubImage2DEXT\n"); -} -static bool trigger_glCompressedMultiTexSubImage1DEXT = false; -void stub_glCompressedMultiTexSubImage1DEXT() { - if(trigger_glCompressedMultiTexSubImage1DEXT) return; - trigger_glCompressedMultiTexSubImage1DEXT = true; - printf("Stub: glCompressedMultiTexSubImage1DEXT\n"); -} -static bool trigger_glGetCompressedMultiTexImageEXT = false; -void stub_glGetCompressedMultiTexImageEXT() { - if(trigger_glGetCompressedMultiTexImageEXT) return; - trigger_glGetCompressedMultiTexImageEXT = true; - printf("Stub: glGetCompressedMultiTexImageEXT\n"); -} -static bool trigger_glMatrixLoadTransposefEXT = false; -void stub_glMatrixLoadTransposefEXT() { - if(trigger_glMatrixLoadTransposefEXT) return; - trigger_glMatrixLoadTransposefEXT = true; - printf("Stub: glMatrixLoadTransposefEXT\n"); -} -static bool trigger_glMatrixLoadTransposedEXT = false; -void stub_glMatrixLoadTransposedEXT() { - if(trigger_glMatrixLoadTransposedEXT) return; - trigger_glMatrixLoadTransposedEXT = true; - printf("Stub: glMatrixLoadTransposedEXT\n"); -} -static bool trigger_glMatrixMultTransposefEXT = false; -void stub_glMatrixMultTransposefEXT() { - if(trigger_glMatrixMultTransposefEXT) return; - trigger_glMatrixMultTransposefEXT = true; - printf("Stub: glMatrixMultTransposefEXT\n"); -} -static bool trigger_glMatrixMultTransposedEXT = false; -void stub_glMatrixMultTransposedEXT() { - if(trigger_glMatrixMultTransposedEXT) return; - trigger_glMatrixMultTransposedEXT = true; - printf("Stub: glMatrixMultTransposedEXT\n"); -} -static bool trigger_glNamedBufferDataEXT = false; -void stub_glNamedBufferDataEXT() { - if(trigger_glNamedBufferDataEXT) return; - trigger_glNamedBufferDataEXT = true; - printf("Stub: glNamedBufferDataEXT\n"); -} -static bool trigger_glNamedBufferSubDataEXT = false; -void stub_glNamedBufferSubDataEXT() { - if(trigger_glNamedBufferSubDataEXT) return; - trigger_glNamedBufferSubDataEXT = true; - printf("Stub: glNamedBufferSubDataEXT\n"); -} -static bool trigger_glMapNamedBufferEXT = false; -void stub_glMapNamedBufferEXT() { - if(trigger_glMapNamedBufferEXT) return; - trigger_glMapNamedBufferEXT = true; - printf("Stub: glMapNamedBufferEXT\n"); -} -static bool trigger_glUnmapNamedBufferEXT = false; -void stub_glUnmapNamedBufferEXT() { - if(trigger_glUnmapNamedBufferEXT) return; - trigger_glUnmapNamedBufferEXT = true; - printf("Stub: glUnmapNamedBufferEXT\n"); -} -static bool trigger_glGetNamedBufferParameterivEXT = false; -void stub_glGetNamedBufferParameterivEXT() { - if(trigger_glGetNamedBufferParameterivEXT) return; - trigger_glGetNamedBufferParameterivEXT = true; - printf("Stub: glGetNamedBufferParameterivEXT\n"); -} -static bool trigger_glGetNamedBufferPointervEXT = false; -void stub_glGetNamedBufferPointervEXT() { - if(trigger_glGetNamedBufferPointervEXT) return; - trigger_glGetNamedBufferPointervEXT = true; - printf("Stub: glGetNamedBufferPointervEXT\n"); -} -static bool trigger_glGetNamedBufferSubDataEXT = false; -void stub_glGetNamedBufferSubDataEXT() { - if(trigger_glGetNamedBufferSubDataEXT) return; - trigger_glGetNamedBufferSubDataEXT = true; - printf("Stub: glGetNamedBufferSubDataEXT\n"); -} -static bool trigger_glProgramUniform1fEXT = false; -void stub_glProgramUniform1fEXT() { - if(trigger_glProgramUniform1fEXT) return; - trigger_glProgramUniform1fEXT = true; - printf("Stub: glProgramUniform1fEXT\n"); -} -static bool trigger_glProgramUniform2fEXT = false; -void stub_glProgramUniform2fEXT() { - if(trigger_glProgramUniform2fEXT) return; - trigger_glProgramUniform2fEXT = true; - printf("Stub: glProgramUniform2fEXT\n"); -} -static bool trigger_glProgramUniform3fEXT = false; -void stub_glProgramUniform3fEXT() { - if(trigger_glProgramUniform3fEXT) return; - trigger_glProgramUniform3fEXT = true; - printf("Stub: glProgramUniform3fEXT\n"); -} -static bool trigger_glProgramUniform4fEXT = false; -void stub_glProgramUniform4fEXT() { - if(trigger_glProgramUniform4fEXT) return; - trigger_glProgramUniform4fEXT = true; - printf("Stub: glProgramUniform4fEXT\n"); -} -static bool trigger_glProgramUniform1iEXT = false; -void stub_glProgramUniform1iEXT() { - if(trigger_glProgramUniform1iEXT) return; - trigger_glProgramUniform1iEXT = true; - printf("Stub: glProgramUniform1iEXT\n"); -} -static bool trigger_glProgramUniform2iEXT = false; -void stub_glProgramUniform2iEXT() { - if(trigger_glProgramUniform2iEXT) return; - trigger_glProgramUniform2iEXT = true; - printf("Stub: glProgramUniform2iEXT\n"); -} -static bool trigger_glProgramUniform3iEXT = false; -void stub_glProgramUniform3iEXT() { - if(trigger_glProgramUniform3iEXT) return; - trigger_glProgramUniform3iEXT = true; - printf("Stub: glProgramUniform3iEXT\n"); -} -static bool trigger_glProgramUniform4iEXT = false; -void stub_glProgramUniform4iEXT() { - if(trigger_glProgramUniform4iEXT) return; - trigger_glProgramUniform4iEXT = true; - printf("Stub: glProgramUniform4iEXT\n"); -} -static bool trigger_glProgramUniform1fvEXT = false; -void stub_glProgramUniform1fvEXT() { - if(trigger_glProgramUniform1fvEXT) return; - trigger_glProgramUniform1fvEXT = true; - printf("Stub: glProgramUniform1fvEXT\n"); -} -static bool trigger_glProgramUniform2fvEXT = false; -void stub_glProgramUniform2fvEXT() { - if(trigger_glProgramUniform2fvEXT) return; - trigger_glProgramUniform2fvEXT = true; - printf("Stub: glProgramUniform2fvEXT\n"); -} -static bool trigger_glProgramUniform3fvEXT = false; -void stub_glProgramUniform3fvEXT() { - if(trigger_glProgramUniform3fvEXT) return; - trigger_glProgramUniform3fvEXT = true; - printf("Stub: glProgramUniform3fvEXT\n"); -} -static bool trigger_glProgramUniform4fvEXT = false; -void stub_glProgramUniform4fvEXT() { - if(trigger_glProgramUniform4fvEXT) return; - trigger_glProgramUniform4fvEXT = true; - printf("Stub: glProgramUniform4fvEXT\n"); -} -static bool trigger_glProgramUniform1ivEXT = false; -void stub_glProgramUniform1ivEXT() { - if(trigger_glProgramUniform1ivEXT) return; - trigger_glProgramUniform1ivEXT = true; - printf("Stub: glProgramUniform1ivEXT\n"); -} -static bool trigger_glProgramUniform2ivEXT = false; -void stub_glProgramUniform2ivEXT() { - if(trigger_glProgramUniform2ivEXT) return; - trigger_glProgramUniform2ivEXT = true; - printf("Stub: glProgramUniform2ivEXT\n"); -} -static bool trigger_glProgramUniform3ivEXT = false; -void stub_glProgramUniform3ivEXT() { - if(trigger_glProgramUniform3ivEXT) return; - trigger_glProgramUniform3ivEXT = true; - printf("Stub: glProgramUniform3ivEXT\n"); -} -static bool trigger_glProgramUniform4ivEXT = false; -void stub_glProgramUniform4ivEXT() { - if(trigger_glProgramUniform4ivEXT) return; - trigger_glProgramUniform4ivEXT = true; - printf("Stub: glProgramUniform4ivEXT\n"); -} -static bool trigger_glProgramUniformMatrix2fvEXT = false; -void stub_glProgramUniformMatrix2fvEXT() { - if(trigger_glProgramUniformMatrix2fvEXT) return; - trigger_glProgramUniformMatrix2fvEXT = true; - printf("Stub: glProgramUniformMatrix2fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix3fvEXT = false; -void stub_glProgramUniformMatrix3fvEXT() { - if(trigger_glProgramUniformMatrix3fvEXT) return; - trigger_glProgramUniformMatrix3fvEXT = true; - printf("Stub: glProgramUniformMatrix3fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix4fvEXT = false; -void stub_glProgramUniformMatrix4fvEXT() { - if(trigger_glProgramUniformMatrix4fvEXT) return; - trigger_glProgramUniformMatrix4fvEXT = true; - printf("Stub: glProgramUniformMatrix4fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix2x3fvEXT = false; -void stub_glProgramUniformMatrix2x3fvEXT() { - if(trigger_glProgramUniformMatrix2x3fvEXT) return; - trigger_glProgramUniformMatrix2x3fvEXT = true; - printf("Stub: glProgramUniformMatrix2x3fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix3x2fvEXT = false; -void stub_glProgramUniformMatrix3x2fvEXT() { - if(trigger_glProgramUniformMatrix3x2fvEXT) return; - trigger_glProgramUniformMatrix3x2fvEXT = true; - printf("Stub: glProgramUniformMatrix3x2fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix2x4fvEXT = false; -void stub_glProgramUniformMatrix2x4fvEXT() { - if(trigger_glProgramUniformMatrix2x4fvEXT) return; - trigger_glProgramUniformMatrix2x4fvEXT = true; - printf("Stub: glProgramUniformMatrix2x4fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix4x2fvEXT = false; -void stub_glProgramUniformMatrix4x2fvEXT() { - if(trigger_glProgramUniformMatrix4x2fvEXT) return; - trigger_glProgramUniformMatrix4x2fvEXT = true; - printf("Stub: glProgramUniformMatrix4x2fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix3x4fvEXT = false; -void stub_glProgramUniformMatrix3x4fvEXT() { - if(trigger_glProgramUniformMatrix3x4fvEXT) return; - trigger_glProgramUniformMatrix3x4fvEXT = true; - printf("Stub: glProgramUniformMatrix3x4fvEXT\n"); -} -static bool trigger_glProgramUniformMatrix4x3fvEXT = false; -void stub_glProgramUniformMatrix4x3fvEXT() { - if(trigger_glProgramUniformMatrix4x3fvEXT) return; - trigger_glProgramUniformMatrix4x3fvEXT = true; - printf("Stub: glProgramUniformMatrix4x3fvEXT\n"); -} -static bool trigger_glTextureBufferEXT = false; -void stub_glTextureBufferEXT() { - if(trigger_glTextureBufferEXT) return; - trigger_glTextureBufferEXT = true; - printf("Stub: glTextureBufferEXT\n"); -} -static bool trigger_glMultiTexBufferEXT = false; -void stub_glMultiTexBufferEXT() { - if(trigger_glMultiTexBufferEXT) return; - trigger_glMultiTexBufferEXT = true; - printf("Stub: glMultiTexBufferEXT\n"); -} -static bool trigger_glTextureParameterIivEXT = false; -void stub_glTextureParameterIivEXT() { - if(trigger_glTextureParameterIivEXT) return; - trigger_glTextureParameterIivEXT = true; - printf("Stub: glTextureParameterIivEXT\n"); -} -static bool trigger_glTextureParameterIuivEXT = false; -void stub_glTextureParameterIuivEXT() { - if(trigger_glTextureParameterIuivEXT) return; - trigger_glTextureParameterIuivEXT = true; - printf("Stub: glTextureParameterIuivEXT\n"); -} -static bool trigger_glGetTextureParameterIivEXT = false; -void stub_glGetTextureParameterIivEXT() { - if(trigger_glGetTextureParameterIivEXT) return; - trigger_glGetTextureParameterIivEXT = true; - printf("Stub: glGetTextureParameterIivEXT\n"); -} -static bool trigger_glGetTextureParameterIuivEXT = false; -void stub_glGetTextureParameterIuivEXT() { - if(trigger_glGetTextureParameterIuivEXT) return; - trigger_glGetTextureParameterIuivEXT = true; - printf("Stub: glGetTextureParameterIuivEXT\n"); -} -static bool trigger_glMultiTexParameterIivEXT = false; -void stub_glMultiTexParameterIivEXT() { - if(trigger_glMultiTexParameterIivEXT) return; - trigger_glMultiTexParameterIivEXT = true; - printf("Stub: glMultiTexParameterIivEXT\n"); -} -static bool trigger_glMultiTexParameterIuivEXT = false; -void stub_glMultiTexParameterIuivEXT() { - if(trigger_glMultiTexParameterIuivEXT) return; - trigger_glMultiTexParameterIuivEXT = true; - printf("Stub: glMultiTexParameterIuivEXT\n"); -} -static bool trigger_glGetMultiTexParameterIivEXT = false; -void stub_glGetMultiTexParameterIivEXT() { - if(trigger_glGetMultiTexParameterIivEXT) return; - trigger_glGetMultiTexParameterIivEXT = true; - printf("Stub: glGetMultiTexParameterIivEXT\n"); -} -static bool trigger_glGetMultiTexParameterIuivEXT = false; -void stub_glGetMultiTexParameterIuivEXT() { - if(trigger_glGetMultiTexParameterIuivEXT) return; - trigger_glGetMultiTexParameterIuivEXT = true; - printf("Stub: glGetMultiTexParameterIuivEXT\n"); -} -static bool trigger_glProgramUniform1uiEXT = false; -void stub_glProgramUniform1uiEXT() { - if(trigger_glProgramUniform1uiEXT) return; - trigger_glProgramUniform1uiEXT = true; - printf("Stub: glProgramUniform1uiEXT\n"); -} -static bool trigger_glProgramUniform2uiEXT = false; -void stub_glProgramUniform2uiEXT() { - if(trigger_glProgramUniform2uiEXT) return; - trigger_glProgramUniform2uiEXT = true; - printf("Stub: glProgramUniform2uiEXT\n"); -} -static bool trigger_glProgramUniform3uiEXT = false; -void stub_glProgramUniform3uiEXT() { - if(trigger_glProgramUniform3uiEXT) return; - trigger_glProgramUniform3uiEXT = true; - printf("Stub: glProgramUniform3uiEXT\n"); -} -static bool trigger_glProgramUniform4uiEXT = false; -void stub_glProgramUniform4uiEXT() { - if(trigger_glProgramUniform4uiEXT) return; - trigger_glProgramUniform4uiEXT = true; - printf("Stub: glProgramUniform4uiEXT\n"); -} -static bool trigger_glProgramUniform1uivEXT = false; -void stub_glProgramUniform1uivEXT() { - if(trigger_glProgramUniform1uivEXT) return; - trigger_glProgramUniform1uivEXT = true; - printf("Stub: glProgramUniform1uivEXT\n"); -} -static bool trigger_glProgramUniform2uivEXT = false; -void stub_glProgramUniform2uivEXT() { - if(trigger_glProgramUniform2uivEXT) return; - trigger_glProgramUniform2uivEXT = true; - printf("Stub: glProgramUniform2uivEXT\n"); -} -static bool trigger_glProgramUniform3uivEXT = false; -void stub_glProgramUniform3uivEXT() { - if(trigger_glProgramUniform3uivEXT) return; - trigger_glProgramUniform3uivEXT = true; - printf("Stub: glProgramUniform3uivEXT\n"); -} -static bool trigger_glProgramUniform4uivEXT = false; -void stub_glProgramUniform4uivEXT() { - if(trigger_glProgramUniform4uivEXT) return; - trigger_glProgramUniform4uivEXT = true; - printf("Stub: glProgramUniform4uivEXT\n"); -} -static bool trigger_glNamedProgramLocalParameters4fvEXT = false; -void stub_glNamedProgramLocalParameters4fvEXT() { - if(trigger_glNamedProgramLocalParameters4fvEXT) return; - trigger_glNamedProgramLocalParameters4fvEXT = true; - printf("Stub: glNamedProgramLocalParameters4fvEXT\n"); -} -static bool trigger_glNamedProgramLocalParameterI4iEXT = false; -void stub_glNamedProgramLocalParameterI4iEXT() { - if(trigger_glNamedProgramLocalParameterI4iEXT) return; - trigger_glNamedProgramLocalParameterI4iEXT = true; - printf("Stub: glNamedProgramLocalParameterI4iEXT\n"); -} -static bool trigger_glNamedProgramLocalParameterI4ivEXT = false; -void stub_glNamedProgramLocalParameterI4ivEXT() { - if(trigger_glNamedProgramLocalParameterI4ivEXT) return; - trigger_glNamedProgramLocalParameterI4ivEXT = true; - printf("Stub: glNamedProgramLocalParameterI4ivEXT\n"); -} -static bool trigger_glNamedProgramLocalParametersI4ivEXT = false; -void stub_glNamedProgramLocalParametersI4ivEXT() { - if(trigger_glNamedProgramLocalParametersI4ivEXT) return; - trigger_glNamedProgramLocalParametersI4ivEXT = true; - printf("Stub: glNamedProgramLocalParametersI4ivEXT\n"); -} -static bool trigger_glNamedProgramLocalParameterI4uiEXT = false; -void stub_glNamedProgramLocalParameterI4uiEXT() { - if(trigger_glNamedProgramLocalParameterI4uiEXT) return; - trigger_glNamedProgramLocalParameterI4uiEXT = true; - printf("Stub: glNamedProgramLocalParameterI4uiEXT\n"); -} -static bool trigger_glNamedProgramLocalParameterI4uivEXT = false; -void stub_glNamedProgramLocalParameterI4uivEXT() { - if(trigger_glNamedProgramLocalParameterI4uivEXT) return; - trigger_glNamedProgramLocalParameterI4uivEXT = true; - printf("Stub: glNamedProgramLocalParameterI4uivEXT\n"); -} -static bool trigger_glNamedProgramLocalParametersI4uivEXT = false; -void stub_glNamedProgramLocalParametersI4uivEXT() { - if(trigger_glNamedProgramLocalParametersI4uivEXT) return; - trigger_glNamedProgramLocalParametersI4uivEXT = true; - printf("Stub: glNamedProgramLocalParametersI4uivEXT\n"); -} -static bool trigger_glGetNamedProgramLocalParameterIivEXT = false; -void stub_glGetNamedProgramLocalParameterIivEXT() { - if(trigger_glGetNamedProgramLocalParameterIivEXT) return; - trigger_glGetNamedProgramLocalParameterIivEXT = true; - printf("Stub: glGetNamedProgramLocalParameterIivEXT\n"); -} -static bool trigger_glGetNamedProgramLocalParameterIuivEXT = false; -void stub_glGetNamedProgramLocalParameterIuivEXT() { - if(trigger_glGetNamedProgramLocalParameterIuivEXT) return; - trigger_glGetNamedProgramLocalParameterIuivEXT = true; - printf("Stub: glGetNamedProgramLocalParameterIuivEXT\n"); -} -static bool trigger_glEnableClientStateiEXT = false; -void stub_glEnableClientStateiEXT() { - if(trigger_glEnableClientStateiEXT) return; - trigger_glEnableClientStateiEXT = true; - printf("Stub: glEnableClientStateiEXT\n"); -} -static bool trigger_glDisableClientStateiEXT = false; -void stub_glDisableClientStateiEXT() { - if(trigger_glDisableClientStateiEXT) return; - trigger_glDisableClientStateiEXT = true; - printf("Stub: glDisableClientStateiEXT\n"); -} -static bool trigger_glGetFloati_vEXT = false; -void stub_glGetFloati_vEXT() { - if(trigger_glGetFloati_vEXT) return; - trigger_glGetFloati_vEXT = true; - printf("Stub: glGetFloati_vEXT\n"); -} -static bool trigger_glGetDoublei_vEXT = false; -void stub_glGetDoublei_vEXT() { - if(trigger_glGetDoublei_vEXT) return; - trigger_glGetDoublei_vEXT = true; - printf("Stub: glGetDoublei_vEXT\n"); -} -static bool trigger_glGetPointeri_vEXT = false; -void stub_glGetPointeri_vEXT() { - if(trigger_glGetPointeri_vEXT) return; - trigger_glGetPointeri_vEXT = true; - printf("Stub: glGetPointeri_vEXT\n"); -} -static bool trigger_glNamedProgramStringEXT = false; -void stub_glNamedProgramStringEXT() { - if(trigger_glNamedProgramStringEXT) return; - trigger_glNamedProgramStringEXT = true; - printf("Stub: glNamedProgramStringEXT\n"); -} -static bool trigger_glNamedProgramLocalParameter4dEXT = false; -void stub_glNamedProgramLocalParameter4dEXT() { - if(trigger_glNamedProgramLocalParameter4dEXT) return; - trigger_glNamedProgramLocalParameter4dEXT = true; - printf("Stub: glNamedProgramLocalParameter4dEXT\n"); -} -static bool trigger_glNamedProgramLocalParameter4dvEXT = false; -void stub_glNamedProgramLocalParameter4dvEXT() { - if(trigger_glNamedProgramLocalParameter4dvEXT) return; - trigger_glNamedProgramLocalParameter4dvEXT = true; - printf("Stub: glNamedProgramLocalParameter4dvEXT\n"); -} -static bool trigger_glNamedProgramLocalParameter4fEXT = false; -void stub_glNamedProgramLocalParameter4fEXT() { - if(trigger_glNamedProgramLocalParameter4fEXT) return; - trigger_glNamedProgramLocalParameter4fEXT = true; - printf("Stub: glNamedProgramLocalParameter4fEXT\n"); -} -static bool trigger_glNamedProgramLocalParameter4fvEXT = false; -void stub_glNamedProgramLocalParameter4fvEXT() { - if(trigger_glNamedProgramLocalParameter4fvEXT) return; - trigger_glNamedProgramLocalParameter4fvEXT = true; - printf("Stub: glNamedProgramLocalParameter4fvEXT\n"); -} -static bool trigger_glGetNamedProgramLocalParameterdvEXT = false; -void stub_glGetNamedProgramLocalParameterdvEXT() { - if(trigger_glGetNamedProgramLocalParameterdvEXT) return; - trigger_glGetNamedProgramLocalParameterdvEXT = true; - printf("Stub: glGetNamedProgramLocalParameterdvEXT\n"); -} -static bool trigger_glGetNamedProgramLocalParameterfvEXT = false; -void stub_glGetNamedProgramLocalParameterfvEXT() { - if(trigger_glGetNamedProgramLocalParameterfvEXT) return; - trigger_glGetNamedProgramLocalParameterfvEXT = true; - printf("Stub: glGetNamedProgramLocalParameterfvEXT\n"); -} -static bool trigger_glGetNamedProgramivEXT = false; -void stub_glGetNamedProgramivEXT() { - if(trigger_glGetNamedProgramivEXT) return; - trigger_glGetNamedProgramivEXT = true; - printf("Stub: glGetNamedProgramivEXT\n"); -} -static bool trigger_glGetNamedProgramStringEXT = false; -void stub_glGetNamedProgramStringEXT() { - if(trigger_glGetNamedProgramStringEXT) return; - trigger_glGetNamedProgramStringEXT = true; - printf("Stub: glGetNamedProgramStringEXT\n"); -} -static bool trigger_glNamedRenderbufferStorageEXT = false; -void stub_glNamedRenderbufferStorageEXT() { - if(trigger_glNamedRenderbufferStorageEXT) return; - trigger_glNamedRenderbufferStorageEXT = true; - printf("Stub: glNamedRenderbufferStorageEXT\n"); -} -static bool trigger_glGetNamedRenderbufferParameterivEXT = false; -void stub_glGetNamedRenderbufferParameterivEXT() { - if(trigger_glGetNamedRenderbufferParameterivEXT) return; - trigger_glGetNamedRenderbufferParameterivEXT = true; - printf("Stub: glGetNamedRenderbufferParameterivEXT\n"); -} -static bool trigger_glNamedRenderbufferStorageMultisampleEXT = false; -void stub_glNamedRenderbufferStorageMultisampleEXT() { - if(trigger_glNamedRenderbufferStorageMultisampleEXT) return; - trigger_glNamedRenderbufferStorageMultisampleEXT = true; - printf("Stub: glNamedRenderbufferStorageMultisampleEXT\n"); -} -static bool trigger_glNamedRenderbufferStorageMultisampleCoverageEXT = false; -void stub_glNamedRenderbufferStorageMultisampleCoverageEXT() { - if(trigger_glNamedRenderbufferStorageMultisampleCoverageEXT) return; - trigger_glNamedRenderbufferStorageMultisampleCoverageEXT = true; - printf("Stub: glNamedRenderbufferStorageMultisampleCoverageEXT\n"); -} -static bool trigger_glCheckNamedFramebufferStatusEXT = false; -void stub_glCheckNamedFramebufferStatusEXT() { - if(trigger_glCheckNamedFramebufferStatusEXT) return; - trigger_glCheckNamedFramebufferStatusEXT = true; - printf("Stub: glCheckNamedFramebufferStatusEXT\n"); -} -static bool trigger_glNamedFramebufferTexture1DEXT = false; -void stub_glNamedFramebufferTexture1DEXT() { - if(trigger_glNamedFramebufferTexture1DEXT) return; - trigger_glNamedFramebufferTexture1DEXT = true; - printf("Stub: glNamedFramebufferTexture1DEXT\n"); -} -static bool trigger_glNamedFramebufferTexture2DEXT = false; -void stub_glNamedFramebufferTexture2DEXT() { - if(trigger_glNamedFramebufferTexture2DEXT) return; - trigger_glNamedFramebufferTexture2DEXT = true; - printf("Stub: glNamedFramebufferTexture2DEXT\n"); -} -static bool trigger_glNamedFramebufferTexture3DEXT = false; -void stub_glNamedFramebufferTexture3DEXT() { - if(trigger_glNamedFramebufferTexture3DEXT) return; - trigger_glNamedFramebufferTexture3DEXT = true; - printf("Stub: glNamedFramebufferTexture3DEXT\n"); -} -static bool trigger_glNamedFramebufferRenderbufferEXT = false; -void stub_glNamedFramebufferRenderbufferEXT() { - if(trigger_glNamedFramebufferRenderbufferEXT) return; - trigger_glNamedFramebufferRenderbufferEXT = true; - printf("Stub: glNamedFramebufferRenderbufferEXT\n"); -} -static bool trigger_glGetNamedFramebufferAttachmentParameterivEXT = false; -void stub_glGetNamedFramebufferAttachmentParameterivEXT() { - if(trigger_glGetNamedFramebufferAttachmentParameterivEXT) return; - trigger_glGetNamedFramebufferAttachmentParameterivEXT = true; - printf("Stub: glGetNamedFramebufferAttachmentParameterivEXT\n"); -} -static bool trigger_glGenerateTextureMipmapEXT = false; -void stub_glGenerateTextureMipmapEXT() { - if(trigger_glGenerateTextureMipmapEXT) return; - trigger_glGenerateTextureMipmapEXT = true; - printf("Stub: glGenerateTextureMipmapEXT\n"); -} -static bool trigger_glGenerateMultiTexMipmapEXT = false; -void stub_glGenerateMultiTexMipmapEXT() { - if(trigger_glGenerateMultiTexMipmapEXT) return; - trigger_glGenerateMultiTexMipmapEXT = true; - printf("Stub: glGenerateMultiTexMipmapEXT\n"); -} -static bool trigger_glFramebufferDrawBufferEXT = false; -void stub_glFramebufferDrawBufferEXT() { - if(trigger_glFramebufferDrawBufferEXT) return; - trigger_glFramebufferDrawBufferEXT = true; - printf("Stub: glFramebufferDrawBufferEXT\n"); -} -static bool trigger_glFramebufferDrawBuffersEXT = false; -void stub_glFramebufferDrawBuffersEXT() { - if(trigger_glFramebufferDrawBuffersEXT) return; - trigger_glFramebufferDrawBuffersEXT = true; - printf("Stub: glFramebufferDrawBuffersEXT\n"); -} -static bool trigger_glFramebufferReadBufferEXT = false; -void stub_glFramebufferReadBufferEXT() { - if(trigger_glFramebufferReadBufferEXT) return; - trigger_glFramebufferReadBufferEXT = true; - printf("Stub: glFramebufferReadBufferEXT\n"); -} -static bool trigger_glGetFramebufferParameterivEXT = false; -void stub_glGetFramebufferParameterivEXT() { - if(trigger_glGetFramebufferParameterivEXT) return; - trigger_glGetFramebufferParameterivEXT = true; - printf("Stub: glGetFramebufferParameterivEXT\n"); -} -static bool trigger_glNamedCopyBufferSubDataEXT = false; -void stub_glNamedCopyBufferSubDataEXT() { - if(trigger_glNamedCopyBufferSubDataEXT) return; - trigger_glNamedCopyBufferSubDataEXT = true; - printf("Stub: glNamedCopyBufferSubDataEXT\n"); -} -static bool trigger_glNamedFramebufferTextureEXT = false; -void stub_glNamedFramebufferTextureEXT() { - if(trigger_glNamedFramebufferTextureEXT) return; - trigger_glNamedFramebufferTextureEXT = true; - printf("Stub: glNamedFramebufferTextureEXT\n"); -} -static bool trigger_glNamedFramebufferTextureLayerEXT = false; -void stub_glNamedFramebufferTextureLayerEXT() { - if(trigger_glNamedFramebufferTextureLayerEXT) return; - trigger_glNamedFramebufferTextureLayerEXT = true; - printf("Stub: glNamedFramebufferTextureLayerEXT\n"); -} -static bool trigger_glNamedFramebufferTextureFaceEXT = false; -void stub_glNamedFramebufferTextureFaceEXT() { - if(trigger_glNamedFramebufferTextureFaceEXT) return; - trigger_glNamedFramebufferTextureFaceEXT = true; - printf("Stub: glNamedFramebufferTextureFaceEXT\n"); -} -static bool trigger_glTextureRenderbufferEXT = false; -void stub_glTextureRenderbufferEXT() { - if(trigger_glTextureRenderbufferEXT) return; - trigger_glTextureRenderbufferEXT = true; - printf("Stub: glTextureRenderbufferEXT\n"); -} -static bool trigger_glMultiTexRenderbufferEXT = false; -void stub_glMultiTexRenderbufferEXT() { - if(trigger_glMultiTexRenderbufferEXT) return; - trigger_glMultiTexRenderbufferEXT = true; - printf("Stub: glMultiTexRenderbufferEXT\n"); -} -static bool trigger_glVertexArrayVertexOffsetEXT = false; -void stub_glVertexArrayVertexOffsetEXT() { - if(trigger_glVertexArrayVertexOffsetEXT) return; - trigger_glVertexArrayVertexOffsetEXT = true; - printf("Stub: glVertexArrayVertexOffsetEXT\n"); -} -static bool trigger_glVertexArrayColorOffsetEXT = false; -void stub_glVertexArrayColorOffsetEXT() { - if(trigger_glVertexArrayColorOffsetEXT) return; - trigger_glVertexArrayColorOffsetEXT = true; - printf("Stub: glVertexArrayColorOffsetEXT\n"); -} -static bool trigger_glVertexArrayEdgeFlagOffsetEXT = false; -void stub_glVertexArrayEdgeFlagOffsetEXT() { - if(trigger_glVertexArrayEdgeFlagOffsetEXT) return; - trigger_glVertexArrayEdgeFlagOffsetEXT = true; - printf("Stub: glVertexArrayEdgeFlagOffsetEXT\n"); -} -static bool trigger_glVertexArrayIndexOffsetEXT = false; -void stub_glVertexArrayIndexOffsetEXT() { - if(trigger_glVertexArrayIndexOffsetEXT) return; - trigger_glVertexArrayIndexOffsetEXT = true; - printf("Stub: glVertexArrayIndexOffsetEXT\n"); -} -static bool trigger_glVertexArrayNormalOffsetEXT = false; -void stub_glVertexArrayNormalOffsetEXT() { - if(trigger_glVertexArrayNormalOffsetEXT) return; - trigger_glVertexArrayNormalOffsetEXT = true; - printf("Stub: glVertexArrayNormalOffsetEXT\n"); -} -static bool trigger_glVertexArrayTexCoordOffsetEXT = false; -void stub_glVertexArrayTexCoordOffsetEXT() { - if(trigger_glVertexArrayTexCoordOffsetEXT) return; - trigger_glVertexArrayTexCoordOffsetEXT = true; - printf("Stub: glVertexArrayTexCoordOffsetEXT\n"); -} -static bool trigger_glVertexArrayMultiTexCoordOffsetEXT = false; -void stub_glVertexArrayMultiTexCoordOffsetEXT() { - if(trigger_glVertexArrayMultiTexCoordOffsetEXT) return; - trigger_glVertexArrayMultiTexCoordOffsetEXT = true; - printf("Stub: glVertexArrayMultiTexCoordOffsetEXT\n"); -} -static bool trigger_glVertexArrayFogCoordOffsetEXT = false; -void stub_glVertexArrayFogCoordOffsetEXT() { - if(trigger_glVertexArrayFogCoordOffsetEXT) return; - trigger_glVertexArrayFogCoordOffsetEXT = true; - printf("Stub: glVertexArrayFogCoordOffsetEXT\n"); -} -static bool trigger_glVertexArraySecondaryColorOffsetEXT = false; -void stub_glVertexArraySecondaryColorOffsetEXT() { - if(trigger_glVertexArraySecondaryColorOffsetEXT) return; - trigger_glVertexArraySecondaryColorOffsetEXT = true; - printf("Stub: glVertexArraySecondaryColorOffsetEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribOffsetEXT = false; -void stub_glVertexArrayVertexAttribOffsetEXT() { - if(trigger_glVertexArrayVertexAttribOffsetEXT) return; - trigger_glVertexArrayVertexAttribOffsetEXT = true; - printf("Stub: glVertexArrayVertexAttribOffsetEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribIOffsetEXT = false; -void stub_glVertexArrayVertexAttribIOffsetEXT() { - if(trigger_glVertexArrayVertexAttribIOffsetEXT) return; - trigger_glVertexArrayVertexAttribIOffsetEXT = true; - printf("Stub: glVertexArrayVertexAttribIOffsetEXT\n"); -} -static bool trigger_glEnableVertexArrayEXT = false; -void stub_glEnableVertexArrayEXT() { - if(trigger_glEnableVertexArrayEXT) return; - trigger_glEnableVertexArrayEXT = true; - printf("Stub: glEnableVertexArrayEXT\n"); -} -static bool trigger_glDisableVertexArrayEXT = false; -void stub_glDisableVertexArrayEXT() { - if(trigger_glDisableVertexArrayEXT) return; - trigger_glDisableVertexArrayEXT = true; - printf("Stub: glDisableVertexArrayEXT\n"); -} -static bool trigger_glEnableVertexArrayAttribEXT = false; -void stub_glEnableVertexArrayAttribEXT() { - if(trigger_glEnableVertexArrayAttribEXT) return; - trigger_glEnableVertexArrayAttribEXT = true; - printf("Stub: glEnableVertexArrayAttribEXT\n"); -} -static bool trigger_glDisableVertexArrayAttribEXT = false; -void stub_glDisableVertexArrayAttribEXT() { - if(trigger_glDisableVertexArrayAttribEXT) return; - trigger_glDisableVertexArrayAttribEXT = true; - printf("Stub: glDisableVertexArrayAttribEXT\n"); -} -static bool trigger_glGetVertexArrayIntegervEXT = false; -void stub_glGetVertexArrayIntegervEXT() { - if(trigger_glGetVertexArrayIntegervEXT) return; - trigger_glGetVertexArrayIntegervEXT = true; - printf("Stub: glGetVertexArrayIntegervEXT\n"); -} -static bool trigger_glGetVertexArrayPointervEXT = false; -void stub_glGetVertexArrayPointervEXT() { - if(trigger_glGetVertexArrayPointervEXT) return; - trigger_glGetVertexArrayPointervEXT = true; - printf("Stub: glGetVertexArrayPointervEXT\n"); -} -static bool trigger_glGetVertexArrayIntegeri_vEXT = false; -void stub_glGetVertexArrayIntegeri_vEXT() { - if(trigger_glGetVertexArrayIntegeri_vEXT) return; - trigger_glGetVertexArrayIntegeri_vEXT = true; - printf("Stub: glGetVertexArrayIntegeri_vEXT\n"); -} -static bool trigger_glGetVertexArrayPointeri_vEXT = false; -void stub_glGetVertexArrayPointeri_vEXT() { - if(trigger_glGetVertexArrayPointeri_vEXT) return; - trigger_glGetVertexArrayPointeri_vEXT = true; - printf("Stub: glGetVertexArrayPointeri_vEXT\n"); -} -static bool trigger_glMapNamedBufferRangeEXT = false; -void stub_glMapNamedBufferRangeEXT() { - if(trigger_glMapNamedBufferRangeEXT) return; - trigger_glMapNamedBufferRangeEXT = true; - printf("Stub: glMapNamedBufferRangeEXT\n"); -} -static bool trigger_glFlushMappedNamedBufferRangeEXT = false; -void stub_glFlushMappedNamedBufferRangeEXT() { - if(trigger_glFlushMappedNamedBufferRangeEXT) return; - trigger_glFlushMappedNamedBufferRangeEXT = true; - printf("Stub: glFlushMappedNamedBufferRangeEXT\n"); -} -static bool trigger_glNamedBufferStorageEXT = false; -void stub_glNamedBufferStorageEXT() { - if(trigger_glNamedBufferStorageEXT) return; - trigger_glNamedBufferStorageEXT = true; - printf("Stub: glNamedBufferStorageEXT\n"); -} -static bool trigger_glClearNamedBufferDataEXT = false; -void stub_glClearNamedBufferDataEXT() { - if(trigger_glClearNamedBufferDataEXT) return; - trigger_glClearNamedBufferDataEXT = true; - printf("Stub: glClearNamedBufferDataEXT\n"); -} -static bool trigger_glClearNamedBufferSubDataEXT = false; -void stub_glClearNamedBufferSubDataEXT() { - if(trigger_glClearNamedBufferSubDataEXT) return; - trigger_glClearNamedBufferSubDataEXT = true; - printf("Stub: glClearNamedBufferSubDataEXT\n"); -} -static bool trigger_glNamedFramebufferParameteriEXT = false; -void stub_glNamedFramebufferParameteriEXT() { - if(trigger_glNamedFramebufferParameteriEXT) return; - trigger_glNamedFramebufferParameteriEXT = true; - printf("Stub: glNamedFramebufferParameteriEXT\n"); -} -static bool trigger_glGetNamedFramebufferParameterivEXT = false; -void stub_glGetNamedFramebufferParameterivEXT() { - if(trigger_glGetNamedFramebufferParameterivEXT) return; - trigger_glGetNamedFramebufferParameterivEXT = true; - printf("Stub: glGetNamedFramebufferParameterivEXT\n"); -} -static bool trigger_glProgramUniform1dEXT = false; -void stub_glProgramUniform1dEXT() { - if(trigger_glProgramUniform1dEXT) return; - trigger_glProgramUniform1dEXT = true; - printf("Stub: glProgramUniform1dEXT\n"); -} -static bool trigger_glProgramUniform2dEXT = false; -void stub_glProgramUniform2dEXT() { - if(trigger_glProgramUniform2dEXT) return; - trigger_glProgramUniform2dEXT = true; - printf("Stub: glProgramUniform2dEXT\n"); -} -static bool trigger_glProgramUniform3dEXT = false; -void stub_glProgramUniform3dEXT() { - if(trigger_glProgramUniform3dEXT) return; - trigger_glProgramUniform3dEXT = true; - printf("Stub: glProgramUniform3dEXT\n"); -} -static bool trigger_glProgramUniform4dEXT = false; -void stub_glProgramUniform4dEXT() { - if(trigger_glProgramUniform4dEXT) return; - trigger_glProgramUniform4dEXT = true; - printf("Stub: glProgramUniform4dEXT\n"); -} -static bool trigger_glProgramUniform1dvEXT = false; -void stub_glProgramUniform1dvEXT() { - if(trigger_glProgramUniform1dvEXT) return; - trigger_glProgramUniform1dvEXT = true; - printf("Stub: glProgramUniform1dvEXT\n"); -} -static bool trigger_glProgramUniform2dvEXT = false; -void stub_glProgramUniform2dvEXT() { - if(trigger_glProgramUniform2dvEXT) return; - trigger_glProgramUniform2dvEXT = true; - printf("Stub: glProgramUniform2dvEXT\n"); -} -static bool trigger_glProgramUniform3dvEXT = false; -void stub_glProgramUniform3dvEXT() { - if(trigger_glProgramUniform3dvEXT) return; - trigger_glProgramUniform3dvEXT = true; - printf("Stub: glProgramUniform3dvEXT\n"); -} -static bool trigger_glProgramUniform4dvEXT = false; -void stub_glProgramUniform4dvEXT() { - if(trigger_glProgramUniform4dvEXT) return; - trigger_glProgramUniform4dvEXT = true; - printf("Stub: glProgramUniform4dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix2dvEXT = false; -void stub_glProgramUniformMatrix2dvEXT() { - if(trigger_glProgramUniformMatrix2dvEXT) return; - trigger_glProgramUniformMatrix2dvEXT = true; - printf("Stub: glProgramUniformMatrix2dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix3dvEXT = false; -void stub_glProgramUniformMatrix3dvEXT() { - if(trigger_glProgramUniformMatrix3dvEXT) return; - trigger_glProgramUniformMatrix3dvEXT = true; - printf("Stub: glProgramUniformMatrix3dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix4dvEXT = false; -void stub_glProgramUniformMatrix4dvEXT() { - if(trigger_glProgramUniformMatrix4dvEXT) return; - trigger_glProgramUniformMatrix4dvEXT = true; - printf("Stub: glProgramUniformMatrix4dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix2x3dvEXT = false; -void stub_glProgramUniformMatrix2x3dvEXT() { - if(trigger_glProgramUniformMatrix2x3dvEXT) return; - trigger_glProgramUniformMatrix2x3dvEXT = true; - printf("Stub: glProgramUniformMatrix2x3dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix2x4dvEXT = false; -void stub_glProgramUniformMatrix2x4dvEXT() { - if(trigger_glProgramUniformMatrix2x4dvEXT) return; - trigger_glProgramUniformMatrix2x4dvEXT = true; - printf("Stub: glProgramUniformMatrix2x4dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix3x2dvEXT = false; -void stub_glProgramUniformMatrix3x2dvEXT() { - if(trigger_glProgramUniformMatrix3x2dvEXT) return; - trigger_glProgramUniformMatrix3x2dvEXT = true; - printf("Stub: glProgramUniformMatrix3x2dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix3x4dvEXT = false; -void stub_glProgramUniformMatrix3x4dvEXT() { - if(trigger_glProgramUniformMatrix3x4dvEXT) return; - trigger_glProgramUniformMatrix3x4dvEXT = true; - printf("Stub: glProgramUniformMatrix3x4dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix4x2dvEXT = false; -void stub_glProgramUniformMatrix4x2dvEXT() { - if(trigger_glProgramUniformMatrix4x2dvEXT) return; - trigger_glProgramUniformMatrix4x2dvEXT = true; - printf("Stub: glProgramUniformMatrix4x2dvEXT\n"); -} -static bool trigger_glProgramUniformMatrix4x3dvEXT = false; -void stub_glProgramUniformMatrix4x3dvEXT() { - if(trigger_glProgramUniformMatrix4x3dvEXT) return; - trigger_glProgramUniformMatrix4x3dvEXT = true; - printf("Stub: glProgramUniformMatrix4x3dvEXT\n"); -} -static bool trigger_glTextureBufferRangeEXT = false; -void stub_glTextureBufferRangeEXT() { - if(trigger_glTextureBufferRangeEXT) return; - trigger_glTextureBufferRangeEXT = true; - printf("Stub: glTextureBufferRangeEXT\n"); -} -static bool trigger_glTextureStorage1DEXT = false; -void stub_glTextureStorage1DEXT() { - if(trigger_glTextureStorage1DEXT) return; - trigger_glTextureStorage1DEXT = true; - printf("Stub: glTextureStorage1DEXT\n"); -} -static bool trigger_glTextureStorage2DEXT = false; -void stub_glTextureStorage2DEXT() { - if(trigger_glTextureStorage2DEXT) return; - trigger_glTextureStorage2DEXT = true; - printf("Stub: glTextureStorage2DEXT\n"); -} -static bool trigger_glTextureStorage3DEXT = false; -void stub_glTextureStorage3DEXT() { - if(trigger_glTextureStorage3DEXT) return; - trigger_glTextureStorage3DEXT = true; - printf("Stub: glTextureStorage3DEXT\n"); -} -static bool trigger_glTextureStorage2DMultisampleEXT = false; -void stub_glTextureStorage2DMultisampleEXT() { - if(trigger_glTextureStorage2DMultisampleEXT) return; - trigger_glTextureStorage2DMultisampleEXT = true; - printf("Stub: glTextureStorage2DMultisampleEXT\n"); -} -static bool trigger_glTextureStorage3DMultisampleEXT = false; -void stub_glTextureStorage3DMultisampleEXT() { - if(trigger_glTextureStorage3DMultisampleEXT) return; - trigger_glTextureStorage3DMultisampleEXT = true; - printf("Stub: glTextureStorage3DMultisampleEXT\n"); -} -static bool trigger_glVertexArrayBindVertexBufferEXT = false; -void stub_glVertexArrayBindVertexBufferEXT() { - if(trigger_glVertexArrayBindVertexBufferEXT) return; - trigger_glVertexArrayBindVertexBufferEXT = true; - printf("Stub: glVertexArrayBindVertexBufferEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribFormatEXT = false; -void stub_glVertexArrayVertexAttribFormatEXT() { - if(trigger_glVertexArrayVertexAttribFormatEXT) return; - trigger_glVertexArrayVertexAttribFormatEXT = true; - printf("Stub: glVertexArrayVertexAttribFormatEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribIFormatEXT = false; -void stub_glVertexArrayVertexAttribIFormatEXT() { - if(trigger_glVertexArrayVertexAttribIFormatEXT) return; - trigger_glVertexArrayVertexAttribIFormatEXT = true; - printf("Stub: glVertexArrayVertexAttribIFormatEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribLFormatEXT = false; -void stub_glVertexArrayVertexAttribLFormatEXT() { - if(trigger_glVertexArrayVertexAttribLFormatEXT) return; - trigger_glVertexArrayVertexAttribLFormatEXT = true; - printf("Stub: glVertexArrayVertexAttribLFormatEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribBindingEXT = false; -void stub_glVertexArrayVertexAttribBindingEXT() { - if(trigger_glVertexArrayVertexAttribBindingEXT) return; - trigger_glVertexArrayVertexAttribBindingEXT = true; - printf("Stub: glVertexArrayVertexAttribBindingEXT\n"); -} -static bool trigger_glVertexArrayVertexBindingDivisorEXT = false; -void stub_glVertexArrayVertexBindingDivisorEXT() { - if(trigger_glVertexArrayVertexBindingDivisorEXT) return; - trigger_glVertexArrayVertexBindingDivisorEXT = true; - printf("Stub: glVertexArrayVertexBindingDivisorEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribLOffsetEXT = false; -void stub_glVertexArrayVertexAttribLOffsetEXT() { - if(trigger_glVertexArrayVertexAttribLOffsetEXT) return; - trigger_glVertexArrayVertexAttribLOffsetEXT = true; - printf("Stub: glVertexArrayVertexAttribLOffsetEXT\n"); -} -static bool trigger_glTexturePageCommitmentEXT = false; -void stub_glTexturePageCommitmentEXT() { - if(trigger_glTexturePageCommitmentEXT) return; - trigger_glTexturePageCommitmentEXT = true; - printf("Stub: glTexturePageCommitmentEXT\n"); -} -static bool trigger_glVertexArrayVertexAttribDivisorEXT = false; -void stub_glVertexArrayVertexAttribDivisorEXT() { - if(trigger_glVertexArrayVertexAttribDivisorEXT) return; - trigger_glVertexArrayVertexAttribDivisorEXT = true; - printf("Stub: glVertexArrayVertexAttribDivisorEXT\n"); -} -static bool trigger_glDrawArraysInstancedEXT = false; -void stub_glDrawArraysInstancedEXT() { - if(trigger_glDrawArraysInstancedEXT) return; - trigger_glDrawArraysInstancedEXT = true; - printf("Stub: glDrawArraysInstancedEXT\n"); -} -static bool trigger_glDrawElementsInstancedEXT = false; -void stub_glDrawElementsInstancedEXT() { - if(trigger_glDrawElementsInstancedEXT) return; - trigger_glDrawElementsInstancedEXT = true; - printf("Stub: glDrawElementsInstancedEXT\n"); -} -static bool trigger_glPolygonOffsetClampEXT = false; -void stub_glPolygonOffsetClampEXT() { - if(trigger_glPolygonOffsetClampEXT) return; - trigger_glPolygonOffsetClampEXT = true; - printf("Stub: glPolygonOffsetClampEXT\n"); -} -static bool trigger_glRasterSamplesEXT = false; -void stub_glRasterSamplesEXT() { - if(trigger_glRasterSamplesEXT) return; - trigger_glRasterSamplesEXT = true; - printf("Stub: glRasterSamplesEXT\n"); -} -static bool trigger_glUseShaderProgramEXT = false; -void stub_glUseShaderProgramEXT() { - if(trigger_glUseShaderProgramEXT) return; - trigger_glUseShaderProgramEXT = true; - printf("Stub: glUseShaderProgramEXT\n"); -} -static bool trigger_glActiveProgramEXT = false; -void stub_glActiveProgramEXT() { - if(trigger_glActiveProgramEXT) return; - trigger_glActiveProgramEXT = true; - printf("Stub: glActiveProgramEXT\n"); -} -static bool trigger_glCreateShaderProgramEXT = false; -void stub_glCreateShaderProgramEXT() { - if(trigger_glCreateShaderProgramEXT) return; - trigger_glCreateShaderProgramEXT = true; - printf("Stub: glCreateShaderProgramEXT\n"); -} -static bool trigger_glFramebufferFetchBarrierEXT = false; -void stub_glFramebufferFetchBarrierEXT() { - if(trigger_glFramebufferFetchBarrierEXT) return; - trigger_glFramebufferFetchBarrierEXT = true; - printf("Stub: glFramebufferFetchBarrierEXT\n"); -} -static bool trigger_glTexStorage1DEXT = false; -void stub_glTexStorage1DEXT() { - if(trigger_glTexStorage1DEXT) return; - trigger_glTexStorage1DEXT = true; - printf("Stub: glTexStorage1DEXT\n"); -} -static bool trigger_glTexStorage2DEXT = false; -void stub_glTexStorage2DEXT() { - if(trigger_glTexStorage2DEXT) return; - trigger_glTexStorage2DEXT = true; - printf("Stub: glTexStorage2DEXT\n"); -} -static bool trigger_glTexStorage3DEXT = false; -void stub_glTexStorage3DEXT() { - if(trigger_glTexStorage3DEXT) return; - trigger_glTexStorage3DEXT = true; - printf("Stub: glTexStorage3DEXT\n"); -} -static bool trigger_glWindowRectanglesEXT = false; -void stub_glWindowRectanglesEXT() { - if(trigger_glWindowRectanglesEXT) return; - trigger_glWindowRectanglesEXT = true; - printf("Stub: glWindowRectanglesEXT\n"); -} -static bool trigger_glApplyFramebufferAttachmentCMAAINTEL = false; -void stub_glApplyFramebufferAttachmentCMAAINTEL() { - if(trigger_glApplyFramebufferAttachmentCMAAINTEL) return; - trigger_glApplyFramebufferAttachmentCMAAINTEL = true; - printf("Stub: glApplyFramebufferAttachmentCMAAINTEL\n"); -} -static bool trigger_glBeginPerfQueryINTEL = false; -void stub_glBeginPerfQueryINTEL() { - if(trigger_glBeginPerfQueryINTEL) return; - trigger_glBeginPerfQueryINTEL = true; - printf("Stub: glBeginPerfQueryINTEL\n"); -} -static bool trigger_glCreatePerfQueryINTEL = false; -void stub_glCreatePerfQueryINTEL() { - if(trigger_glCreatePerfQueryINTEL) return; - trigger_glCreatePerfQueryINTEL = true; - printf("Stub: glCreatePerfQueryINTEL\n"); -} -static bool trigger_glDeletePerfQueryINTEL = false; -void stub_glDeletePerfQueryINTEL() { - if(trigger_glDeletePerfQueryINTEL) return; - trigger_glDeletePerfQueryINTEL = true; - printf("Stub: glDeletePerfQueryINTEL\n"); -} -static bool trigger_glEndPerfQueryINTEL = false; -void stub_glEndPerfQueryINTEL() { - if(trigger_glEndPerfQueryINTEL) return; - trigger_glEndPerfQueryINTEL = true; - printf("Stub: glEndPerfQueryINTEL\n"); -} -static bool trigger_glGetFirstPerfQueryIdINTEL = false; -void stub_glGetFirstPerfQueryIdINTEL() { - if(trigger_glGetFirstPerfQueryIdINTEL) return; - trigger_glGetFirstPerfQueryIdINTEL = true; - printf("Stub: glGetFirstPerfQueryIdINTEL\n"); -} -static bool trigger_glGetNextPerfQueryIdINTEL = false; -void stub_glGetNextPerfQueryIdINTEL() { - if(trigger_glGetNextPerfQueryIdINTEL) return; - trigger_glGetNextPerfQueryIdINTEL = true; - printf("Stub: glGetNextPerfQueryIdINTEL\n"); -} -static bool trigger_glGetPerfCounterInfoINTEL = false; -void stub_glGetPerfCounterInfoINTEL() { - if(trigger_glGetPerfCounterInfoINTEL) return; - trigger_glGetPerfCounterInfoINTEL = true; - printf("Stub: glGetPerfCounterInfoINTEL\n"); -} -static bool trigger_glGetPerfQueryDataINTEL = false; -void stub_glGetPerfQueryDataINTEL() { - if(trigger_glGetPerfQueryDataINTEL) return; - trigger_glGetPerfQueryDataINTEL = true; - printf("Stub: glGetPerfQueryDataINTEL\n"); -} -static bool trigger_glGetPerfQueryIdByNameINTEL = false; -void stub_glGetPerfQueryIdByNameINTEL() { - if(trigger_glGetPerfQueryIdByNameINTEL) return; - trigger_glGetPerfQueryIdByNameINTEL = true; - printf("Stub: glGetPerfQueryIdByNameINTEL\n"); -} -static bool trigger_glGetPerfQueryInfoINTEL = false; -void stub_glGetPerfQueryInfoINTEL() { - if(trigger_glGetPerfQueryInfoINTEL) return; - trigger_glGetPerfQueryInfoINTEL = true; - printf("Stub: glGetPerfQueryInfoINTEL\n"); -} -static bool trigger_glFramebufferParameteriMESA = false; -void stub_glFramebufferParameteriMESA() { - if(trigger_glFramebufferParameteriMESA) return; - trigger_glFramebufferParameteriMESA = true; - printf("Stub: glFramebufferParameteriMESA\n"); -} -static bool trigger_glGetFramebufferParameterivMESA = false; -void stub_glGetFramebufferParameterivMESA() { - if(trigger_glGetFramebufferParameterivMESA) return; - trigger_glGetFramebufferParameterivMESA = true; - printf("Stub: glGetFramebufferParameterivMESA\n"); -} -static bool trigger_glMultiDrawArraysIndirectBindlessNV = false; -void stub_glMultiDrawArraysIndirectBindlessNV() { - if(trigger_glMultiDrawArraysIndirectBindlessNV) return; - trigger_glMultiDrawArraysIndirectBindlessNV = true; - printf("Stub: glMultiDrawArraysIndirectBindlessNV\n"); -} -static bool trigger_glMultiDrawElementsIndirectBindlessNV = false; -void stub_glMultiDrawElementsIndirectBindlessNV() { - if(trigger_glMultiDrawElementsIndirectBindlessNV) return; - trigger_glMultiDrawElementsIndirectBindlessNV = true; - printf("Stub: glMultiDrawElementsIndirectBindlessNV\n"); -} -static bool trigger_glMultiDrawArraysIndirectBindlessCountNV = false; -void stub_glMultiDrawArraysIndirectBindlessCountNV() { - if(trigger_glMultiDrawArraysIndirectBindlessCountNV) return; - trigger_glMultiDrawArraysIndirectBindlessCountNV = true; - printf("Stub: glMultiDrawArraysIndirectBindlessCountNV\n"); -} -static bool trigger_glMultiDrawElementsIndirectBindlessCountNV = false; -void stub_glMultiDrawElementsIndirectBindlessCountNV() { - if(trigger_glMultiDrawElementsIndirectBindlessCountNV) return; - trigger_glMultiDrawElementsIndirectBindlessCountNV = true; - printf("Stub: glMultiDrawElementsIndirectBindlessCountNV\n"); -} -static bool trigger_glGetTextureHandleNV = false; -void stub_glGetTextureHandleNV() { - if(trigger_glGetTextureHandleNV) return; - trigger_glGetTextureHandleNV = true; - printf("Stub: glGetTextureHandleNV\n"); -} -static bool trigger_glGetTextureSamplerHandleNV = false; -void stub_glGetTextureSamplerHandleNV() { - if(trigger_glGetTextureSamplerHandleNV) return; - trigger_glGetTextureSamplerHandleNV = true; - printf("Stub: glGetTextureSamplerHandleNV\n"); -} -static bool trigger_glMakeTextureHandleResidentNV = false; -void stub_glMakeTextureHandleResidentNV() { - if(trigger_glMakeTextureHandleResidentNV) return; - trigger_glMakeTextureHandleResidentNV = true; - printf("Stub: glMakeTextureHandleResidentNV\n"); -} -static bool trigger_glMakeTextureHandleNonResidentNV = false; -void stub_glMakeTextureHandleNonResidentNV() { - if(trigger_glMakeTextureHandleNonResidentNV) return; - trigger_glMakeTextureHandleNonResidentNV = true; - printf("Stub: glMakeTextureHandleNonResidentNV\n"); -} -static bool trigger_glGetImageHandleNV = false; -void stub_glGetImageHandleNV() { - if(trigger_glGetImageHandleNV) return; - trigger_glGetImageHandleNV = true; - printf("Stub: glGetImageHandleNV\n"); -} -static bool trigger_glMakeImageHandleResidentNV = false; -void stub_glMakeImageHandleResidentNV() { - if(trigger_glMakeImageHandleResidentNV) return; - trigger_glMakeImageHandleResidentNV = true; - printf("Stub: glMakeImageHandleResidentNV\n"); -} -static bool trigger_glMakeImageHandleNonResidentNV = false; -void stub_glMakeImageHandleNonResidentNV() { - if(trigger_glMakeImageHandleNonResidentNV) return; - trigger_glMakeImageHandleNonResidentNV = true; - printf("Stub: glMakeImageHandleNonResidentNV\n"); -} -static bool trigger_glUniformHandleui64NV = false; -void stub_glUniformHandleui64NV() { - if(trigger_glUniformHandleui64NV) return; - trigger_glUniformHandleui64NV = true; - printf("Stub: glUniformHandleui64NV\n"); -} -static bool trigger_glUniformHandleui64vNV = false; -void stub_glUniformHandleui64vNV() { - if(trigger_glUniformHandleui64vNV) return; - trigger_glUniformHandleui64vNV = true; - printf("Stub: glUniformHandleui64vNV\n"); -} -static bool trigger_glProgramUniformHandleui64NV = false; -void stub_glProgramUniformHandleui64NV() { - if(trigger_glProgramUniformHandleui64NV) return; - trigger_glProgramUniformHandleui64NV = true; - printf("Stub: glProgramUniformHandleui64NV\n"); -} -static bool trigger_glProgramUniformHandleui64vNV = false; -void stub_glProgramUniformHandleui64vNV() { - if(trigger_glProgramUniformHandleui64vNV) return; - trigger_glProgramUniformHandleui64vNV = true; - printf("Stub: glProgramUniformHandleui64vNV\n"); -} -static bool trigger_glIsTextureHandleResidentNV = false; -void stub_glIsTextureHandleResidentNV() { - if(trigger_glIsTextureHandleResidentNV) return; - trigger_glIsTextureHandleResidentNV = true; - printf("Stub: glIsTextureHandleResidentNV\n"); -} -static bool trigger_glIsImageHandleResidentNV = false; -void stub_glIsImageHandleResidentNV() { - if(trigger_glIsImageHandleResidentNV) return; - trigger_glIsImageHandleResidentNV = true; - printf("Stub: glIsImageHandleResidentNV\n"); -} -static bool trigger_glBlendParameteriNV = false; -void stub_glBlendParameteriNV() { - if(trigger_glBlendParameteriNV) return; - trigger_glBlendParameteriNV = true; - printf("Stub: glBlendParameteriNV\n"); -} -static bool trigger_glBlendBarrierNV = false; -void stub_glBlendBarrierNV() { - if(trigger_glBlendBarrierNV) return; - trigger_glBlendBarrierNV = true; - printf("Stub: glBlendBarrierNV\n"); -} -static bool trigger_glViewportPositionWScaleNV = false; -void stub_glViewportPositionWScaleNV() { - if(trigger_glViewportPositionWScaleNV) return; - trigger_glViewportPositionWScaleNV = true; - printf("Stub: glViewportPositionWScaleNV\n"); -} -static bool trigger_glCreateStatesNV = false; -void stub_glCreateStatesNV() { - if(trigger_glCreateStatesNV) return; - trigger_glCreateStatesNV = true; - printf("Stub: glCreateStatesNV\n"); -} -static bool trigger_glDeleteStatesNV = false; -void stub_glDeleteStatesNV() { - if(trigger_glDeleteStatesNV) return; - trigger_glDeleteStatesNV = true; - printf("Stub: glDeleteStatesNV\n"); -} -static bool trigger_glIsStateNV = false; -void stub_glIsStateNV() { - if(trigger_glIsStateNV) return; - trigger_glIsStateNV = true; - printf("Stub: glIsStateNV\n"); -} -static bool trigger_glStateCaptureNV = false; -void stub_glStateCaptureNV() { - if(trigger_glStateCaptureNV) return; - trigger_glStateCaptureNV = true; - printf("Stub: glStateCaptureNV\n"); -} -static bool trigger_glGetCommandHeaderNV = false; -void stub_glGetCommandHeaderNV() { - if(trigger_glGetCommandHeaderNV) return; - trigger_glGetCommandHeaderNV = true; - printf("Stub: glGetCommandHeaderNV\n"); -} -static bool trigger_glGetStageIndexNV = false; -void stub_glGetStageIndexNV() { - if(trigger_glGetStageIndexNV) return; - trigger_glGetStageIndexNV = true; - printf("Stub: glGetStageIndexNV\n"); -} -static bool trigger_glDrawCommandsNV = false; -void stub_glDrawCommandsNV() { - if(trigger_glDrawCommandsNV) return; - trigger_glDrawCommandsNV = true; - printf("Stub: glDrawCommandsNV\n"); -} -static bool trigger_glDrawCommandsAddressNV = false; -void stub_glDrawCommandsAddressNV() { - if(trigger_glDrawCommandsAddressNV) return; - trigger_glDrawCommandsAddressNV = true; - printf("Stub: glDrawCommandsAddressNV\n"); -} -static bool trigger_glDrawCommandsStatesNV = false; -void stub_glDrawCommandsStatesNV() { - if(trigger_glDrawCommandsStatesNV) return; - trigger_glDrawCommandsStatesNV = true; - printf("Stub: glDrawCommandsStatesNV\n"); -} -static bool trigger_glDrawCommandsStatesAddressNV = false; -void stub_glDrawCommandsStatesAddressNV() { - if(trigger_glDrawCommandsStatesAddressNV) return; - trigger_glDrawCommandsStatesAddressNV = true; - printf("Stub: glDrawCommandsStatesAddressNV\n"); -} -static bool trigger_glCreateCommandListsNV = false; -void stub_glCreateCommandListsNV() { - if(trigger_glCreateCommandListsNV) return; - trigger_glCreateCommandListsNV = true; - printf("Stub: glCreateCommandListsNV\n"); -} -static bool trigger_glDeleteCommandListsNV = false; -void stub_glDeleteCommandListsNV() { - if(trigger_glDeleteCommandListsNV) return; - trigger_glDeleteCommandListsNV = true; - printf("Stub: glDeleteCommandListsNV\n"); -} -static bool trigger_glIsCommandListNV = false; -void stub_glIsCommandListNV() { - if(trigger_glIsCommandListNV) return; - trigger_glIsCommandListNV = true; - printf("Stub: glIsCommandListNV\n"); -} -static bool trigger_glListDrawCommandsStatesClientNV = false; -void stub_glListDrawCommandsStatesClientNV() { - if(trigger_glListDrawCommandsStatesClientNV) return; - trigger_glListDrawCommandsStatesClientNV = true; - printf("Stub: glListDrawCommandsStatesClientNV\n"); -} -static bool trigger_glCommandListSegmentsNV = false; -void stub_glCommandListSegmentsNV() { - if(trigger_glCommandListSegmentsNV) return; - trigger_glCommandListSegmentsNV = true; - printf("Stub: glCommandListSegmentsNV\n"); -} -static bool trigger_glCompileCommandListNV = false; -void stub_glCompileCommandListNV() { - if(trigger_glCompileCommandListNV) return; - trigger_glCompileCommandListNV = true; - printf("Stub: glCompileCommandListNV\n"); -} -static bool trigger_glCallCommandListNV = false; -void stub_glCallCommandListNV() { - if(trigger_glCallCommandListNV) return; - trigger_glCallCommandListNV = true; - printf("Stub: glCallCommandListNV\n"); -} -static bool trigger_glBeginConditionalRenderNV = false; -void stub_glBeginConditionalRenderNV() { - if(trigger_glBeginConditionalRenderNV) return; - trigger_glBeginConditionalRenderNV = true; - printf("Stub: glBeginConditionalRenderNV\n"); -} -static bool trigger_glEndConditionalRenderNV = false; -void stub_glEndConditionalRenderNV() { - if(trigger_glEndConditionalRenderNV) return; - trigger_glEndConditionalRenderNV = true; - printf("Stub: glEndConditionalRenderNV\n"); -} -static bool trigger_glSubpixelPrecisionBiasNV = false; -void stub_glSubpixelPrecisionBiasNV() { - if(trigger_glSubpixelPrecisionBiasNV) return; - trigger_glSubpixelPrecisionBiasNV = true; - printf("Stub: glSubpixelPrecisionBiasNV\n"); -} -static bool trigger_glConservativeRasterParameterfNV = false; -void stub_glConservativeRasterParameterfNV() { - if(trigger_glConservativeRasterParameterfNV) return; - trigger_glConservativeRasterParameterfNV = true; - printf("Stub: glConservativeRasterParameterfNV\n"); -} -static bool trigger_glConservativeRasterParameteriNV = false; -void stub_glConservativeRasterParameteriNV() { - if(trigger_glConservativeRasterParameteriNV) return; - trigger_glConservativeRasterParameteriNV = true; - printf("Stub: glConservativeRasterParameteriNV\n"); -} -static bool trigger_glDepthRangedNV = false; -void stub_glDepthRangedNV() { - if(trigger_glDepthRangedNV) return; - trigger_glDepthRangedNV = true; - printf("Stub: glDepthRangedNV\n"); -} -static bool trigger_glClearDepthdNV = false; -void stub_glClearDepthdNV() { - if(trigger_glClearDepthdNV) return; - trigger_glClearDepthdNV = true; - printf("Stub: glClearDepthdNV\n"); -} -static bool trigger_glDepthBoundsdNV = false; -void stub_glDepthBoundsdNV() { - if(trigger_glDepthBoundsdNV) return; - trigger_glDepthBoundsdNV = true; - printf("Stub: glDepthBoundsdNV\n"); -} -static bool trigger_glDrawVkImageNV = false; -void stub_glDrawVkImageNV() { - if(trigger_glDrawVkImageNV) return; - trigger_glDrawVkImageNV = true; - printf("Stub: glDrawVkImageNV\n"); -} -static bool trigger_glGetVkProcAddrNV = false; -void stub_glGetVkProcAddrNV() { - if(trigger_glGetVkProcAddrNV) return; - trigger_glGetVkProcAddrNV = true; - printf("Stub: glGetVkProcAddrNV\n"); -} -static bool trigger_glWaitVkSemaphoreNV = false; -void stub_glWaitVkSemaphoreNV() { - if(trigger_glWaitVkSemaphoreNV) return; - trigger_glWaitVkSemaphoreNV = true; - printf("Stub: glWaitVkSemaphoreNV\n"); -} -static bool trigger_glSignalVkSemaphoreNV = false; -void stub_glSignalVkSemaphoreNV() { - if(trigger_glSignalVkSemaphoreNV) return; - trigger_glSignalVkSemaphoreNV = true; - printf("Stub: glSignalVkSemaphoreNV\n"); -} -static bool trigger_glSignalVkFenceNV = false; -void stub_glSignalVkFenceNV() { - if(trigger_glSignalVkFenceNV) return; - trigger_glSignalVkFenceNV = true; - printf("Stub: glSignalVkFenceNV\n"); -} -static bool trigger_glFragmentCoverageColorNV = false; -void stub_glFragmentCoverageColorNV() { - if(trigger_glFragmentCoverageColorNV) return; - trigger_glFragmentCoverageColorNV = true; - printf("Stub: glFragmentCoverageColorNV\n"); -} -static bool trigger_glCoverageModulationTableNV = false; -void stub_glCoverageModulationTableNV() { - if(trigger_glCoverageModulationTableNV) return; - trigger_glCoverageModulationTableNV = true; - printf("Stub: glCoverageModulationTableNV\n"); -} -static bool trigger_glGetCoverageModulationTableNV = false; -void stub_glGetCoverageModulationTableNV() { - if(trigger_glGetCoverageModulationTableNV) return; - trigger_glGetCoverageModulationTableNV = true; - printf("Stub: glGetCoverageModulationTableNV\n"); -} -static bool trigger_glCoverageModulationNV = false; -void stub_glCoverageModulationNV() { - if(trigger_glCoverageModulationNV) return; - trigger_glCoverageModulationNV = true; - printf("Stub: glCoverageModulationNV\n"); -} -static bool trigger_glRenderbufferStorageMultisampleCoverageNV = false; -void stub_glRenderbufferStorageMultisampleCoverageNV() { - if(trigger_glRenderbufferStorageMultisampleCoverageNV) return; - trigger_glRenderbufferStorageMultisampleCoverageNV = true; - printf("Stub: glRenderbufferStorageMultisampleCoverageNV\n"); -} -static bool trigger_glUniform1i64NV = false; -void stub_glUniform1i64NV() { - if(trigger_glUniform1i64NV) return; - trigger_glUniform1i64NV = true; - printf("Stub: glUniform1i64NV\n"); -} -static bool trigger_glUniform2i64NV = false; -void stub_glUniform2i64NV() { - if(trigger_glUniform2i64NV) return; - trigger_glUniform2i64NV = true; - printf("Stub: glUniform2i64NV\n"); -} -static bool trigger_glUniform3i64NV = false; -void stub_glUniform3i64NV() { - if(trigger_glUniform3i64NV) return; - trigger_glUniform3i64NV = true; - printf("Stub: glUniform3i64NV\n"); -} -static bool trigger_glUniform4i64NV = false; -void stub_glUniform4i64NV() { - if(trigger_glUniform4i64NV) return; - trigger_glUniform4i64NV = true; - printf("Stub: glUniform4i64NV\n"); -} -static bool trigger_glUniform1i64vNV = false; -void stub_glUniform1i64vNV() { - if(trigger_glUniform1i64vNV) return; - trigger_glUniform1i64vNV = true; - printf("Stub: glUniform1i64vNV\n"); -} -static bool trigger_glUniform2i64vNV = false; -void stub_glUniform2i64vNV() { - if(trigger_glUniform2i64vNV) return; - trigger_glUniform2i64vNV = true; - printf("Stub: glUniform2i64vNV\n"); -} -static bool trigger_glUniform3i64vNV = false; -void stub_glUniform3i64vNV() { - if(trigger_glUniform3i64vNV) return; - trigger_glUniform3i64vNV = true; - printf("Stub: glUniform3i64vNV\n"); -} -static bool trigger_glUniform4i64vNV = false; -void stub_glUniform4i64vNV() { - if(trigger_glUniform4i64vNV) return; - trigger_glUniform4i64vNV = true; - printf("Stub: glUniform4i64vNV\n"); -} -static bool trigger_glUniform1ui64NV = false; -void stub_glUniform1ui64NV() { - if(trigger_glUniform1ui64NV) return; - trigger_glUniform1ui64NV = true; - printf("Stub: glUniform1ui64NV\n"); -} -static bool trigger_glUniform2ui64NV = false; -void stub_glUniform2ui64NV() { - if(trigger_glUniform2ui64NV) return; - trigger_glUniform2ui64NV = true; - printf("Stub: glUniform2ui64NV\n"); -} -static bool trigger_glUniform3ui64NV = false; -void stub_glUniform3ui64NV() { - if(trigger_glUniform3ui64NV) return; - trigger_glUniform3ui64NV = true; - printf("Stub: glUniform3ui64NV\n"); -} -static bool trigger_glUniform4ui64NV = false; -void stub_glUniform4ui64NV() { - if(trigger_glUniform4ui64NV) return; - trigger_glUniform4ui64NV = true; - printf("Stub: glUniform4ui64NV\n"); -} -static bool trigger_glUniform1ui64vNV = false; -void stub_glUniform1ui64vNV() { - if(trigger_glUniform1ui64vNV) return; - trigger_glUniform1ui64vNV = true; - printf("Stub: glUniform1ui64vNV\n"); -} -static bool trigger_glUniform2ui64vNV = false; -void stub_glUniform2ui64vNV() { - if(trigger_glUniform2ui64vNV) return; - trigger_glUniform2ui64vNV = true; - printf("Stub: glUniform2ui64vNV\n"); -} -static bool trigger_glUniform3ui64vNV = false; -void stub_glUniform3ui64vNV() { - if(trigger_glUniform3ui64vNV) return; - trigger_glUniform3ui64vNV = true; - printf("Stub: glUniform3ui64vNV\n"); -} -static bool trigger_glUniform4ui64vNV = false; -void stub_glUniform4ui64vNV() { - if(trigger_glUniform4ui64vNV) return; - trigger_glUniform4ui64vNV = true; - printf("Stub: glUniform4ui64vNV\n"); -} -static bool trigger_glGetUniformi64vNV = false; -void stub_glGetUniformi64vNV() { - if(trigger_glGetUniformi64vNV) return; - trigger_glGetUniformi64vNV = true; - printf("Stub: glGetUniformi64vNV\n"); -} -static bool trigger_glProgramUniform1i64NV = false; -void stub_glProgramUniform1i64NV() { - if(trigger_glProgramUniform1i64NV) return; - trigger_glProgramUniform1i64NV = true; - printf("Stub: glProgramUniform1i64NV\n"); -} -static bool trigger_glProgramUniform2i64NV = false; -void stub_glProgramUniform2i64NV() { - if(trigger_glProgramUniform2i64NV) return; - trigger_glProgramUniform2i64NV = true; - printf("Stub: glProgramUniform2i64NV\n"); -} -static bool trigger_glProgramUniform3i64NV = false; -void stub_glProgramUniform3i64NV() { - if(trigger_glProgramUniform3i64NV) return; - trigger_glProgramUniform3i64NV = true; - printf("Stub: glProgramUniform3i64NV\n"); -} -static bool trigger_glProgramUniform4i64NV = false; -void stub_glProgramUniform4i64NV() { - if(trigger_glProgramUniform4i64NV) return; - trigger_glProgramUniform4i64NV = true; - printf("Stub: glProgramUniform4i64NV\n"); -} -static bool trigger_glProgramUniform1i64vNV = false; -void stub_glProgramUniform1i64vNV() { - if(trigger_glProgramUniform1i64vNV) return; - trigger_glProgramUniform1i64vNV = true; - printf("Stub: glProgramUniform1i64vNV\n"); -} -static bool trigger_glProgramUniform2i64vNV = false; -void stub_glProgramUniform2i64vNV() { - if(trigger_glProgramUniform2i64vNV) return; - trigger_glProgramUniform2i64vNV = true; - printf("Stub: glProgramUniform2i64vNV\n"); -} -static bool trigger_glProgramUniform3i64vNV = false; -void stub_glProgramUniform3i64vNV() { - if(trigger_glProgramUniform3i64vNV) return; - trigger_glProgramUniform3i64vNV = true; - printf("Stub: glProgramUniform3i64vNV\n"); -} -static bool trigger_glProgramUniform4i64vNV = false; -void stub_glProgramUniform4i64vNV() { - if(trigger_glProgramUniform4i64vNV) return; - trigger_glProgramUniform4i64vNV = true; - printf("Stub: glProgramUniform4i64vNV\n"); -} -static bool trigger_glProgramUniform1ui64NV = false; -void stub_glProgramUniform1ui64NV() { - if(trigger_glProgramUniform1ui64NV) return; - trigger_glProgramUniform1ui64NV = true; - printf("Stub: glProgramUniform1ui64NV\n"); -} -static bool trigger_glProgramUniform2ui64NV = false; -void stub_glProgramUniform2ui64NV() { - if(trigger_glProgramUniform2ui64NV) return; - trigger_glProgramUniform2ui64NV = true; - printf("Stub: glProgramUniform2ui64NV\n"); -} -static bool trigger_glProgramUniform3ui64NV = false; -void stub_glProgramUniform3ui64NV() { - if(trigger_glProgramUniform3ui64NV) return; - trigger_glProgramUniform3ui64NV = true; - printf("Stub: glProgramUniform3ui64NV\n"); -} -static bool trigger_glProgramUniform4ui64NV = false; -void stub_glProgramUniform4ui64NV() { - if(trigger_glProgramUniform4ui64NV) return; - trigger_glProgramUniform4ui64NV = true; - printf("Stub: glProgramUniform4ui64NV\n"); -} -static bool trigger_glProgramUniform1ui64vNV = false; -void stub_glProgramUniform1ui64vNV() { - if(trigger_glProgramUniform1ui64vNV) return; - trigger_glProgramUniform1ui64vNV = true; - printf("Stub: glProgramUniform1ui64vNV\n"); -} -static bool trigger_glProgramUniform2ui64vNV = false; -void stub_glProgramUniform2ui64vNV() { - if(trigger_glProgramUniform2ui64vNV) return; - trigger_glProgramUniform2ui64vNV = true; - printf("Stub: glProgramUniform2ui64vNV\n"); -} -static bool trigger_glProgramUniform3ui64vNV = false; -void stub_glProgramUniform3ui64vNV() { - if(trigger_glProgramUniform3ui64vNV) return; - trigger_glProgramUniform3ui64vNV = true; - printf("Stub: glProgramUniform3ui64vNV\n"); -} -static bool trigger_glProgramUniform4ui64vNV = false; -void stub_glProgramUniform4ui64vNV() { - if(trigger_glProgramUniform4ui64vNV) return; - trigger_glProgramUniform4ui64vNV = true; - printf("Stub: glProgramUniform4ui64vNV\n"); -} -static bool trigger_glGetInternalformatSampleivNV = false; -void stub_glGetInternalformatSampleivNV() { - if(trigger_glGetInternalformatSampleivNV) return; - trigger_glGetInternalformatSampleivNV = true; - printf("Stub: glGetInternalformatSampleivNV\n"); -} -static bool trigger_glGetMemoryObjectDetachedResourcesuivNV = false; -void stub_glGetMemoryObjectDetachedResourcesuivNV() { - if(trigger_glGetMemoryObjectDetachedResourcesuivNV) return; - trigger_glGetMemoryObjectDetachedResourcesuivNV = true; - printf("Stub: glGetMemoryObjectDetachedResourcesuivNV\n"); -} -static bool trigger_glResetMemoryObjectParameterNV = false; -void stub_glResetMemoryObjectParameterNV() { - if(trigger_glResetMemoryObjectParameterNV) return; - trigger_glResetMemoryObjectParameterNV = true; - printf("Stub: glResetMemoryObjectParameterNV\n"); -} -static bool trigger_glTexAttachMemoryNV = false; -void stub_glTexAttachMemoryNV() { - if(trigger_glTexAttachMemoryNV) return; - trigger_glTexAttachMemoryNV = true; - printf("Stub: glTexAttachMemoryNV\n"); -} -static bool trigger_glBufferAttachMemoryNV = false; -void stub_glBufferAttachMemoryNV() { - if(trigger_glBufferAttachMemoryNV) return; - trigger_glBufferAttachMemoryNV = true; - printf("Stub: glBufferAttachMemoryNV\n"); -} -static bool trigger_glTextureAttachMemoryNV = false; -void stub_glTextureAttachMemoryNV() { - if(trigger_glTextureAttachMemoryNV) return; - trigger_glTextureAttachMemoryNV = true; - printf("Stub: glTextureAttachMemoryNV\n"); -} -static bool trigger_glNamedBufferAttachMemoryNV = false; -void stub_glNamedBufferAttachMemoryNV() { - if(trigger_glNamedBufferAttachMemoryNV) return; - trigger_glNamedBufferAttachMemoryNV = true; - printf("Stub: glNamedBufferAttachMemoryNV\n"); -} -static bool trigger_glBufferPageCommitmentMemNV = false; -void stub_glBufferPageCommitmentMemNV() { - if(trigger_glBufferPageCommitmentMemNV) return; - trigger_glBufferPageCommitmentMemNV = true; - printf("Stub: glBufferPageCommitmentMemNV\n"); -} -static bool trigger_glTexPageCommitmentMemNV = false; -void stub_glTexPageCommitmentMemNV() { - if(trigger_glTexPageCommitmentMemNV) return; - trigger_glTexPageCommitmentMemNV = true; - printf("Stub: glTexPageCommitmentMemNV\n"); -} -static bool trigger_glNamedBufferPageCommitmentMemNV = false; -void stub_glNamedBufferPageCommitmentMemNV() { - if(trigger_glNamedBufferPageCommitmentMemNV) return; - trigger_glNamedBufferPageCommitmentMemNV = true; - printf("Stub: glNamedBufferPageCommitmentMemNV\n"); -} -static bool trigger_glTexturePageCommitmentMemNV = false; -void stub_glTexturePageCommitmentMemNV() { - if(trigger_glTexturePageCommitmentMemNV) return; - trigger_glTexturePageCommitmentMemNV = true; - printf("Stub: glTexturePageCommitmentMemNV\n"); -} -static bool trigger_glDrawMeshTasksNV = false; -void stub_glDrawMeshTasksNV() { - if(trigger_glDrawMeshTasksNV) return; - trigger_glDrawMeshTasksNV = true; - printf("Stub: glDrawMeshTasksNV\n"); -} -static bool trigger_glDrawMeshTasksIndirectNV = false; -void stub_glDrawMeshTasksIndirectNV() { - if(trigger_glDrawMeshTasksIndirectNV) return; - trigger_glDrawMeshTasksIndirectNV = true; - printf("Stub: glDrawMeshTasksIndirectNV\n"); -} -static bool trigger_glMultiDrawMeshTasksIndirectNV = false; -void stub_glMultiDrawMeshTasksIndirectNV() { - if(trigger_glMultiDrawMeshTasksIndirectNV) return; - trigger_glMultiDrawMeshTasksIndirectNV = true; - printf("Stub: glMultiDrawMeshTasksIndirectNV\n"); -} -static bool trigger_glMultiDrawMeshTasksIndirectCountNV = false; -void stub_glMultiDrawMeshTasksIndirectCountNV() { - if(trigger_glMultiDrawMeshTasksIndirectCountNV) return; - trigger_glMultiDrawMeshTasksIndirectCountNV = true; - printf("Stub: glMultiDrawMeshTasksIndirectCountNV\n"); -} -static bool trigger_glGenPathsNV = false; -void stub_glGenPathsNV() { - if(trigger_glGenPathsNV) return; - trigger_glGenPathsNV = true; - printf("Stub: glGenPathsNV\n"); -} -static bool trigger_glDeletePathsNV = false; -void stub_glDeletePathsNV() { - if(trigger_glDeletePathsNV) return; - trigger_glDeletePathsNV = true; - printf("Stub: glDeletePathsNV\n"); -} -static bool trigger_glIsPathNV = false; -void stub_glIsPathNV() { - if(trigger_glIsPathNV) return; - trigger_glIsPathNV = true; - printf("Stub: glIsPathNV\n"); -} -static bool trigger_glPathCommandsNV = false; -void stub_glPathCommandsNV() { - if(trigger_glPathCommandsNV) return; - trigger_glPathCommandsNV = true; - printf("Stub: glPathCommandsNV\n"); -} -static bool trigger_glPathCoordsNV = false; -void stub_glPathCoordsNV() { - if(trigger_glPathCoordsNV) return; - trigger_glPathCoordsNV = true; - printf("Stub: glPathCoordsNV\n"); -} -static bool trigger_glPathSubCommandsNV = false; -void stub_glPathSubCommandsNV() { - if(trigger_glPathSubCommandsNV) return; - trigger_glPathSubCommandsNV = true; - printf("Stub: glPathSubCommandsNV\n"); -} -static bool trigger_glPathSubCoordsNV = false; -void stub_glPathSubCoordsNV() { - if(trigger_glPathSubCoordsNV) return; - trigger_glPathSubCoordsNV = true; - printf("Stub: glPathSubCoordsNV\n"); -} -static bool trigger_glPathStringNV = false; -void stub_glPathStringNV() { - if(trigger_glPathStringNV) return; - trigger_glPathStringNV = true; - printf("Stub: glPathStringNV\n"); -} -static bool trigger_glPathGlyphsNV = false; -void stub_glPathGlyphsNV() { - if(trigger_glPathGlyphsNV) return; - trigger_glPathGlyphsNV = true; - printf("Stub: glPathGlyphsNV\n"); -} -static bool trigger_glPathGlyphRangeNV = false; -void stub_glPathGlyphRangeNV() { - if(trigger_glPathGlyphRangeNV) return; - trigger_glPathGlyphRangeNV = true; - printf("Stub: glPathGlyphRangeNV\n"); -} -static bool trigger_glWeightPathsNV = false; -void stub_glWeightPathsNV() { - if(trigger_glWeightPathsNV) return; - trigger_glWeightPathsNV = true; - printf("Stub: glWeightPathsNV\n"); -} -static bool trigger_glCopyPathNV = false; -void stub_glCopyPathNV() { - if(trigger_glCopyPathNV) return; - trigger_glCopyPathNV = true; - printf("Stub: glCopyPathNV\n"); -} -static bool trigger_glInterpolatePathsNV = false; -void stub_glInterpolatePathsNV() { - if(trigger_glInterpolatePathsNV) return; - trigger_glInterpolatePathsNV = true; - printf("Stub: glInterpolatePathsNV\n"); -} -static bool trigger_glTransformPathNV = false; -void stub_glTransformPathNV() { - if(trigger_glTransformPathNV) return; - trigger_glTransformPathNV = true; - printf("Stub: glTransformPathNV\n"); -} -static bool trigger_glPathParameterivNV = false; -void stub_glPathParameterivNV() { - if(trigger_glPathParameterivNV) return; - trigger_glPathParameterivNV = true; - printf("Stub: glPathParameterivNV\n"); -} -static bool trigger_glPathParameteriNV = false; -void stub_glPathParameteriNV() { - if(trigger_glPathParameteriNV) return; - trigger_glPathParameteriNV = true; - printf("Stub: glPathParameteriNV\n"); -} -static bool trigger_glPathParameterfvNV = false; -void stub_glPathParameterfvNV() { - if(trigger_glPathParameterfvNV) return; - trigger_glPathParameterfvNV = true; - printf("Stub: glPathParameterfvNV\n"); -} -static bool trigger_glPathParameterfNV = false; -void stub_glPathParameterfNV() { - if(trigger_glPathParameterfNV) return; - trigger_glPathParameterfNV = true; - printf("Stub: glPathParameterfNV\n"); -} -static bool trigger_glPathDashArrayNV = false; -void stub_glPathDashArrayNV() { - if(trigger_glPathDashArrayNV) return; - trigger_glPathDashArrayNV = true; - printf("Stub: glPathDashArrayNV\n"); -} -static bool trigger_glPathStencilFuncNV = false; -void stub_glPathStencilFuncNV() { - if(trigger_glPathStencilFuncNV) return; - trigger_glPathStencilFuncNV = true; - printf("Stub: glPathStencilFuncNV\n"); -} -static bool trigger_glPathStencilDepthOffsetNV = false; -void stub_glPathStencilDepthOffsetNV() { - if(trigger_glPathStencilDepthOffsetNV) return; - trigger_glPathStencilDepthOffsetNV = true; - printf("Stub: glPathStencilDepthOffsetNV\n"); -} -static bool trigger_glStencilFillPathNV = false; -void stub_glStencilFillPathNV() { - if(trigger_glStencilFillPathNV) return; - trigger_glStencilFillPathNV = true; - printf("Stub: glStencilFillPathNV\n"); -} -static bool trigger_glStencilStrokePathNV = false; -void stub_glStencilStrokePathNV() { - if(trigger_glStencilStrokePathNV) return; - trigger_glStencilStrokePathNV = true; - printf("Stub: glStencilStrokePathNV\n"); -} -static bool trigger_glStencilFillPathInstancedNV = false; -void stub_glStencilFillPathInstancedNV() { - if(trigger_glStencilFillPathInstancedNV) return; - trigger_glStencilFillPathInstancedNV = true; - printf("Stub: glStencilFillPathInstancedNV\n"); -} -static bool trigger_glStencilStrokePathInstancedNV = false; -void stub_glStencilStrokePathInstancedNV() { - if(trigger_glStencilStrokePathInstancedNV) return; - trigger_glStencilStrokePathInstancedNV = true; - printf("Stub: glStencilStrokePathInstancedNV\n"); -} -static bool trigger_glPathCoverDepthFuncNV = false; -void stub_glPathCoverDepthFuncNV() { - if(trigger_glPathCoverDepthFuncNV) return; - trigger_glPathCoverDepthFuncNV = true; - printf("Stub: glPathCoverDepthFuncNV\n"); -} -static bool trigger_glCoverFillPathNV = false; -void stub_glCoverFillPathNV() { - if(trigger_glCoverFillPathNV) return; - trigger_glCoverFillPathNV = true; - printf("Stub: glCoverFillPathNV\n"); -} -static bool trigger_glCoverStrokePathNV = false; -void stub_glCoverStrokePathNV() { - if(trigger_glCoverStrokePathNV) return; - trigger_glCoverStrokePathNV = true; - printf("Stub: glCoverStrokePathNV\n"); -} -static bool trigger_glCoverFillPathInstancedNV = false; -void stub_glCoverFillPathInstancedNV() { - if(trigger_glCoverFillPathInstancedNV) return; - trigger_glCoverFillPathInstancedNV = true; - printf("Stub: glCoverFillPathInstancedNV\n"); -} -static bool trigger_glCoverStrokePathInstancedNV = false; -void stub_glCoverStrokePathInstancedNV() { - if(trigger_glCoverStrokePathInstancedNV) return; - trigger_glCoverStrokePathInstancedNV = true; - printf("Stub: glCoverStrokePathInstancedNV\n"); -} -static bool trigger_glGetPathParameterivNV = false; -void stub_glGetPathParameterivNV() { - if(trigger_glGetPathParameterivNV) return; - trigger_glGetPathParameterivNV = true; - printf("Stub: glGetPathParameterivNV\n"); -} -static bool trigger_glGetPathParameterfvNV = false; -void stub_glGetPathParameterfvNV() { - if(trigger_glGetPathParameterfvNV) return; - trigger_glGetPathParameterfvNV = true; - printf("Stub: glGetPathParameterfvNV\n"); -} -static bool trigger_glGetPathCommandsNV = false; -void stub_glGetPathCommandsNV() { - if(trigger_glGetPathCommandsNV) return; - trigger_glGetPathCommandsNV = true; - printf("Stub: glGetPathCommandsNV\n"); -} -static bool trigger_glGetPathCoordsNV = false; -void stub_glGetPathCoordsNV() { - if(trigger_glGetPathCoordsNV) return; - trigger_glGetPathCoordsNV = true; - printf("Stub: glGetPathCoordsNV\n"); -} -static bool trigger_glGetPathDashArrayNV = false; -void stub_glGetPathDashArrayNV() { - if(trigger_glGetPathDashArrayNV) return; - trigger_glGetPathDashArrayNV = true; - printf("Stub: glGetPathDashArrayNV\n"); -} -static bool trigger_glGetPathMetricsNV = false; -void stub_glGetPathMetricsNV() { - if(trigger_glGetPathMetricsNV) return; - trigger_glGetPathMetricsNV = true; - printf("Stub: glGetPathMetricsNV\n"); -} -static bool trigger_glGetPathMetricRangeNV = false; -void stub_glGetPathMetricRangeNV() { - if(trigger_glGetPathMetricRangeNV) return; - trigger_glGetPathMetricRangeNV = true; - printf("Stub: glGetPathMetricRangeNV\n"); -} -static bool trigger_glGetPathSpacingNV = false; -void stub_glGetPathSpacingNV() { - if(trigger_glGetPathSpacingNV) return; - trigger_glGetPathSpacingNV = true; - printf("Stub: glGetPathSpacingNV\n"); -} -static bool trigger_glIsPointInFillPathNV = false; -void stub_glIsPointInFillPathNV() { - if(trigger_glIsPointInFillPathNV) return; - trigger_glIsPointInFillPathNV = true; - printf("Stub: glIsPointInFillPathNV\n"); -} -static bool trigger_glIsPointInStrokePathNV = false; -void stub_glIsPointInStrokePathNV() { - if(trigger_glIsPointInStrokePathNV) return; - trigger_glIsPointInStrokePathNV = true; - printf("Stub: glIsPointInStrokePathNV\n"); -} -static bool trigger_glGetPathLengthNV = false; -void stub_glGetPathLengthNV() { - if(trigger_glGetPathLengthNV) return; - trigger_glGetPathLengthNV = true; - printf("Stub: glGetPathLengthNV\n"); -} -static bool trigger_glPointAlongPathNV = false; -void stub_glPointAlongPathNV() { - if(trigger_glPointAlongPathNV) return; - trigger_glPointAlongPathNV = true; - printf("Stub: glPointAlongPathNV\n"); -} -static bool trigger_glMatrixLoad3x2fNV = false; -void stub_glMatrixLoad3x2fNV() { - if(trigger_glMatrixLoad3x2fNV) return; - trigger_glMatrixLoad3x2fNV = true; - printf("Stub: glMatrixLoad3x2fNV\n"); -} -static bool trigger_glMatrixLoad3x3fNV = false; -void stub_glMatrixLoad3x3fNV() { - if(trigger_glMatrixLoad3x3fNV) return; - trigger_glMatrixLoad3x3fNV = true; - printf("Stub: glMatrixLoad3x3fNV\n"); -} -static bool trigger_glMatrixLoadTranspose3x3fNV = false; -void stub_glMatrixLoadTranspose3x3fNV() { - if(trigger_glMatrixLoadTranspose3x3fNV) return; - trigger_glMatrixLoadTranspose3x3fNV = true; - printf("Stub: glMatrixLoadTranspose3x3fNV\n"); -} -static bool trigger_glMatrixMult3x2fNV = false; -void stub_glMatrixMult3x2fNV() { - if(trigger_glMatrixMult3x2fNV) return; - trigger_glMatrixMult3x2fNV = true; - printf("Stub: glMatrixMult3x2fNV\n"); -} -static bool trigger_glMatrixMult3x3fNV = false; -void stub_glMatrixMult3x3fNV() { - if(trigger_glMatrixMult3x3fNV) return; - trigger_glMatrixMult3x3fNV = true; - printf("Stub: glMatrixMult3x3fNV\n"); -} -static bool trigger_glMatrixMultTranspose3x3fNV = false; -void stub_glMatrixMultTranspose3x3fNV() { - if(trigger_glMatrixMultTranspose3x3fNV) return; - trigger_glMatrixMultTranspose3x3fNV = true; - printf("Stub: glMatrixMultTranspose3x3fNV\n"); -} -static bool trigger_glStencilThenCoverFillPathNV = false; -void stub_glStencilThenCoverFillPathNV() { - if(trigger_glStencilThenCoverFillPathNV) return; - trigger_glStencilThenCoverFillPathNV = true; - printf("Stub: glStencilThenCoverFillPathNV\n"); -} -static bool trigger_glStencilThenCoverStrokePathNV = false; -void stub_glStencilThenCoverStrokePathNV() { - if(trigger_glStencilThenCoverStrokePathNV) return; - trigger_glStencilThenCoverStrokePathNV = true; - printf("Stub: glStencilThenCoverStrokePathNV\n"); -} -static bool trigger_glStencilThenCoverFillPathInstancedNV = false; -void stub_glStencilThenCoverFillPathInstancedNV() { - if(trigger_glStencilThenCoverFillPathInstancedNV) return; - trigger_glStencilThenCoverFillPathInstancedNV = true; - printf("Stub: glStencilThenCoverFillPathInstancedNV\n"); -} -static bool trigger_glStencilThenCoverStrokePathInstancedNV = false; -void stub_glStencilThenCoverStrokePathInstancedNV() { - if(trigger_glStencilThenCoverStrokePathInstancedNV) return; - trigger_glStencilThenCoverStrokePathInstancedNV = true; - printf("Stub: glStencilThenCoverStrokePathInstancedNV\n"); -} -static bool trigger_glPathGlyphIndexRangeNV = false; -void stub_glPathGlyphIndexRangeNV() { - if(trigger_glPathGlyphIndexRangeNV) return; - trigger_glPathGlyphIndexRangeNV = true; - printf("Stub: glPathGlyphIndexRangeNV\n"); -} -static bool trigger_glPathGlyphIndexArrayNV = false; -void stub_glPathGlyphIndexArrayNV() { - if(trigger_glPathGlyphIndexArrayNV) return; - trigger_glPathGlyphIndexArrayNV = true; - printf("Stub: glPathGlyphIndexArrayNV\n"); -} -static bool trigger_glPathMemoryGlyphIndexArrayNV = false; -void stub_glPathMemoryGlyphIndexArrayNV() { - if(trigger_glPathMemoryGlyphIndexArrayNV) return; - trigger_glPathMemoryGlyphIndexArrayNV = true; - printf("Stub: glPathMemoryGlyphIndexArrayNV\n"); -} -static bool trigger_glProgramPathFragmentInputGenNV = false; -void stub_glProgramPathFragmentInputGenNV() { - if(trigger_glProgramPathFragmentInputGenNV) return; - trigger_glProgramPathFragmentInputGenNV = true; - printf("Stub: glProgramPathFragmentInputGenNV\n"); -} -static bool trigger_glGetProgramResourcefvNV = false; -void stub_glGetProgramResourcefvNV() { - if(trigger_glGetProgramResourcefvNV) return; - trigger_glGetProgramResourcefvNV = true; - printf("Stub: glGetProgramResourcefvNV\n"); -} -static bool trigger_glFramebufferSampleLocationsfvNV = false; -void stub_glFramebufferSampleLocationsfvNV() { - if(trigger_glFramebufferSampleLocationsfvNV) return; - trigger_glFramebufferSampleLocationsfvNV = true; - printf("Stub: glFramebufferSampleLocationsfvNV\n"); -} -static bool trigger_glNamedFramebufferSampleLocationsfvNV = false; -void stub_glNamedFramebufferSampleLocationsfvNV() { - if(trigger_glNamedFramebufferSampleLocationsfvNV) return; - trigger_glNamedFramebufferSampleLocationsfvNV = true; - printf("Stub: glNamedFramebufferSampleLocationsfvNV\n"); -} -static bool trigger_glResolveDepthValuesNV = false; -void stub_glResolveDepthValuesNV() { - if(trigger_glResolveDepthValuesNV) return; - trigger_glResolveDepthValuesNV = true; - printf("Stub: glResolveDepthValuesNV\n"); -} -static bool trigger_glScissorExclusiveNV = false; -void stub_glScissorExclusiveNV() { - if(trigger_glScissorExclusiveNV) return; - trigger_glScissorExclusiveNV = true; - printf("Stub: glScissorExclusiveNV\n"); -} -static bool trigger_glScissorExclusiveArrayvNV = false; -void stub_glScissorExclusiveArrayvNV() { - if(trigger_glScissorExclusiveArrayvNV) return; - trigger_glScissorExclusiveArrayvNV = true; - printf("Stub: glScissorExclusiveArrayvNV\n"); -} -static bool trigger_glMakeBufferResidentNV = false; -void stub_glMakeBufferResidentNV() { - if(trigger_glMakeBufferResidentNV) return; - trigger_glMakeBufferResidentNV = true; - printf("Stub: glMakeBufferResidentNV\n"); -} -static bool trigger_glMakeBufferNonResidentNV = false; -void stub_glMakeBufferNonResidentNV() { - if(trigger_glMakeBufferNonResidentNV) return; - trigger_glMakeBufferNonResidentNV = true; - printf("Stub: glMakeBufferNonResidentNV\n"); -} -static bool trigger_glIsBufferResidentNV = false; -void stub_glIsBufferResidentNV() { - if(trigger_glIsBufferResidentNV) return; - trigger_glIsBufferResidentNV = true; - printf("Stub: glIsBufferResidentNV\n"); -} -static bool trigger_glMakeNamedBufferResidentNV = false; -void stub_glMakeNamedBufferResidentNV() { - if(trigger_glMakeNamedBufferResidentNV) return; - trigger_glMakeNamedBufferResidentNV = true; - printf("Stub: glMakeNamedBufferResidentNV\n"); -} -static bool trigger_glMakeNamedBufferNonResidentNV = false; -void stub_glMakeNamedBufferNonResidentNV() { - if(trigger_glMakeNamedBufferNonResidentNV) return; - trigger_glMakeNamedBufferNonResidentNV = true; - printf("Stub: glMakeNamedBufferNonResidentNV\n"); -} -static bool trigger_glIsNamedBufferResidentNV = false; -void stub_glIsNamedBufferResidentNV() { - if(trigger_glIsNamedBufferResidentNV) return; - trigger_glIsNamedBufferResidentNV = true; - printf("Stub: glIsNamedBufferResidentNV\n"); -} -static bool trigger_glGetBufferParameterui64vNV = false; -void stub_glGetBufferParameterui64vNV() { - if(trigger_glGetBufferParameterui64vNV) return; - trigger_glGetBufferParameterui64vNV = true; - printf("Stub: glGetBufferParameterui64vNV\n"); -} -static bool trigger_glGetNamedBufferParameterui64vNV = false; -void stub_glGetNamedBufferParameterui64vNV() { - if(trigger_glGetNamedBufferParameterui64vNV) return; - trigger_glGetNamedBufferParameterui64vNV = true; - printf("Stub: glGetNamedBufferParameterui64vNV\n"); -} -static bool trigger_glGetIntegerui64vNV = false; -void stub_glGetIntegerui64vNV() { - if(trigger_glGetIntegerui64vNV) return; - trigger_glGetIntegerui64vNV = true; - printf("Stub: glGetIntegerui64vNV\n"); -} -static bool trigger_glUniformui64NV = false; -void stub_glUniformui64NV() { - if(trigger_glUniformui64NV) return; - trigger_glUniformui64NV = true; - printf("Stub: glUniformui64NV\n"); -} -static bool trigger_glUniformui64vNV = false; -void stub_glUniformui64vNV() { - if(trigger_glUniformui64vNV) return; - trigger_glUniformui64vNV = true; - printf("Stub: glUniformui64vNV\n"); -} -static bool trigger_glGetUniformui64vNV = false; -void stub_glGetUniformui64vNV() { - if(trigger_glGetUniformui64vNV) return; - trigger_glGetUniformui64vNV = true; - printf("Stub: glGetUniformui64vNV\n"); -} -static bool trigger_glProgramUniformui64NV = false; -void stub_glProgramUniformui64NV() { - if(trigger_glProgramUniformui64NV) return; - trigger_glProgramUniformui64NV = true; - printf("Stub: glProgramUniformui64NV\n"); -} -static bool trigger_glProgramUniformui64vNV = false; -void stub_glProgramUniformui64vNV() { - if(trigger_glProgramUniformui64vNV) return; - trigger_glProgramUniformui64vNV = true; - printf("Stub: glProgramUniformui64vNV\n"); -} -static bool trigger_glBindShadingRateImageNV = false; -void stub_glBindShadingRateImageNV() { - if(trigger_glBindShadingRateImageNV) return; - trigger_glBindShadingRateImageNV = true; - printf("Stub: glBindShadingRateImageNV\n"); -} -static bool trigger_glGetShadingRateImagePaletteNV = false; -void stub_glGetShadingRateImagePaletteNV() { - if(trigger_glGetShadingRateImagePaletteNV) return; - trigger_glGetShadingRateImagePaletteNV = true; - printf("Stub: glGetShadingRateImagePaletteNV\n"); -} -static bool trigger_glGetShadingRateSampleLocationivNV = false; -void stub_glGetShadingRateSampleLocationivNV() { - if(trigger_glGetShadingRateSampleLocationivNV) return; - trigger_glGetShadingRateSampleLocationivNV = true; - printf("Stub: glGetShadingRateSampleLocationivNV\n"); -} -static bool trigger_glShadingRateImageBarrierNV = false; -void stub_glShadingRateImageBarrierNV() { - if(trigger_glShadingRateImageBarrierNV) return; - trigger_glShadingRateImageBarrierNV = true; - printf("Stub: glShadingRateImageBarrierNV\n"); -} -static bool trigger_glShadingRateImagePaletteNV = false; -void stub_glShadingRateImagePaletteNV() { - if(trigger_glShadingRateImagePaletteNV) return; - trigger_glShadingRateImagePaletteNV = true; - printf("Stub: glShadingRateImagePaletteNV\n"); -} -static bool trigger_glShadingRateSampleOrderNV = false; -void stub_glShadingRateSampleOrderNV() { - if(trigger_glShadingRateSampleOrderNV) return; - trigger_glShadingRateSampleOrderNV = true; - printf("Stub: glShadingRateSampleOrderNV\n"); -} -static bool trigger_glShadingRateSampleOrderCustomNV = false; -void stub_glShadingRateSampleOrderCustomNV() { - if(trigger_glShadingRateSampleOrderCustomNV) return; - trigger_glShadingRateSampleOrderCustomNV = true; - printf("Stub: glShadingRateSampleOrderCustomNV\n"); -} -static bool trigger_glTextureBarrierNV = false; -void stub_glTextureBarrierNV() { - if(trigger_glTextureBarrierNV) return; - trigger_glTextureBarrierNV = true; - printf("Stub: glTextureBarrierNV\n"); -} -static bool trigger_glVertexAttribL1i64NV = false; -void stub_glVertexAttribL1i64NV() { - if(trigger_glVertexAttribL1i64NV) return; - trigger_glVertexAttribL1i64NV = true; - printf("Stub: glVertexAttribL1i64NV\n"); -} -static bool trigger_glVertexAttribL2i64NV = false; -void stub_glVertexAttribL2i64NV() { - if(trigger_glVertexAttribL2i64NV) return; - trigger_glVertexAttribL2i64NV = true; - printf("Stub: glVertexAttribL2i64NV\n"); -} -static bool trigger_glVertexAttribL3i64NV = false; -void stub_glVertexAttribL3i64NV() { - if(trigger_glVertexAttribL3i64NV) return; - trigger_glVertexAttribL3i64NV = true; - printf("Stub: glVertexAttribL3i64NV\n"); -} -static bool trigger_glVertexAttribL4i64NV = false; -void stub_glVertexAttribL4i64NV() { - if(trigger_glVertexAttribL4i64NV) return; - trigger_glVertexAttribL4i64NV = true; - printf("Stub: glVertexAttribL4i64NV\n"); -} -static bool trigger_glVertexAttribL1i64vNV = false; -void stub_glVertexAttribL1i64vNV() { - if(trigger_glVertexAttribL1i64vNV) return; - trigger_glVertexAttribL1i64vNV = true; - printf("Stub: glVertexAttribL1i64vNV\n"); -} -static bool trigger_glVertexAttribL2i64vNV = false; -void stub_glVertexAttribL2i64vNV() { - if(trigger_glVertexAttribL2i64vNV) return; - trigger_glVertexAttribL2i64vNV = true; - printf("Stub: glVertexAttribL2i64vNV\n"); -} -static bool trigger_glVertexAttribL3i64vNV = false; -void stub_glVertexAttribL3i64vNV() { - if(trigger_glVertexAttribL3i64vNV) return; - trigger_glVertexAttribL3i64vNV = true; - printf("Stub: glVertexAttribL3i64vNV\n"); -} -static bool trigger_glVertexAttribL4i64vNV = false; -void stub_glVertexAttribL4i64vNV() { - if(trigger_glVertexAttribL4i64vNV) return; - trigger_glVertexAttribL4i64vNV = true; - printf("Stub: glVertexAttribL4i64vNV\n"); -} -static bool trigger_glVertexAttribL1ui64NV = false; -void stub_glVertexAttribL1ui64NV() { - if(trigger_glVertexAttribL1ui64NV) return; - trigger_glVertexAttribL1ui64NV = true; - printf("Stub: glVertexAttribL1ui64NV\n"); -} -static bool trigger_glVertexAttribL2ui64NV = false; -void stub_glVertexAttribL2ui64NV() { - if(trigger_glVertexAttribL2ui64NV) return; - trigger_glVertexAttribL2ui64NV = true; - printf("Stub: glVertexAttribL2ui64NV\n"); -} -static bool trigger_glVertexAttribL3ui64NV = false; -void stub_glVertexAttribL3ui64NV() { - if(trigger_glVertexAttribL3ui64NV) return; - trigger_glVertexAttribL3ui64NV = true; - printf("Stub: glVertexAttribL3ui64NV\n"); -} -static bool trigger_glVertexAttribL4ui64NV = false; -void stub_glVertexAttribL4ui64NV() { - if(trigger_glVertexAttribL4ui64NV) return; - trigger_glVertexAttribL4ui64NV = true; - printf("Stub: glVertexAttribL4ui64NV\n"); -} -static bool trigger_glVertexAttribL1ui64vNV = false; -void stub_glVertexAttribL1ui64vNV() { - if(trigger_glVertexAttribL1ui64vNV) return; - trigger_glVertexAttribL1ui64vNV = true; - printf("Stub: glVertexAttribL1ui64vNV\n"); -} -static bool trigger_glVertexAttribL2ui64vNV = false; -void stub_glVertexAttribL2ui64vNV() { - if(trigger_glVertexAttribL2ui64vNV) return; - trigger_glVertexAttribL2ui64vNV = true; - printf("Stub: glVertexAttribL2ui64vNV\n"); -} -static bool trigger_glVertexAttribL3ui64vNV = false; -void stub_glVertexAttribL3ui64vNV() { - if(trigger_glVertexAttribL3ui64vNV) return; - trigger_glVertexAttribL3ui64vNV = true; - printf("Stub: glVertexAttribL3ui64vNV\n"); -} -static bool trigger_glVertexAttribL4ui64vNV = false; -void stub_glVertexAttribL4ui64vNV() { - if(trigger_glVertexAttribL4ui64vNV) return; - trigger_glVertexAttribL4ui64vNV = true; - printf("Stub: glVertexAttribL4ui64vNV\n"); -} -static bool trigger_glGetVertexAttribLi64vNV = false; -void stub_glGetVertexAttribLi64vNV() { - if(trigger_glGetVertexAttribLi64vNV) return; - trigger_glGetVertexAttribLi64vNV = true; - printf("Stub: glGetVertexAttribLi64vNV\n"); -} -static bool trigger_glGetVertexAttribLui64vNV = false; -void stub_glGetVertexAttribLui64vNV() { - if(trigger_glGetVertexAttribLui64vNV) return; - trigger_glGetVertexAttribLui64vNV = true; - printf("Stub: glGetVertexAttribLui64vNV\n"); -} -static bool trigger_glVertexAttribLFormatNV = false; -void stub_glVertexAttribLFormatNV() { - if(trigger_glVertexAttribLFormatNV) return; - trigger_glVertexAttribLFormatNV = true; - printf("Stub: glVertexAttribLFormatNV\n"); -} -static bool trigger_glBufferAddressRangeNV = false; -void stub_glBufferAddressRangeNV() { - if(trigger_glBufferAddressRangeNV) return; - trigger_glBufferAddressRangeNV = true; - printf("Stub: glBufferAddressRangeNV\n"); -} -static bool trigger_glVertexFormatNV = false; -void stub_glVertexFormatNV() { - if(trigger_glVertexFormatNV) return; - trigger_glVertexFormatNV = true; - printf("Stub: glVertexFormatNV\n"); -} -static bool trigger_glNormalFormatNV = false; -void stub_glNormalFormatNV() { - if(trigger_glNormalFormatNV) return; - trigger_glNormalFormatNV = true; - printf("Stub: glNormalFormatNV\n"); -} -static bool trigger_glColorFormatNV = false; -void stub_glColorFormatNV() { - if(trigger_glColorFormatNV) return; - trigger_glColorFormatNV = true; - printf("Stub: glColorFormatNV\n"); -} -static bool trigger_glIndexFormatNV = false; -void stub_glIndexFormatNV() { - if(trigger_glIndexFormatNV) return; - trigger_glIndexFormatNV = true; - printf("Stub: glIndexFormatNV\n"); -} -static bool trigger_glTexCoordFormatNV = false; -void stub_glTexCoordFormatNV() { - if(trigger_glTexCoordFormatNV) return; - trigger_glTexCoordFormatNV = true; - printf("Stub: glTexCoordFormatNV\n"); -} -static bool trigger_glEdgeFlagFormatNV = false; -void stub_glEdgeFlagFormatNV() { - if(trigger_glEdgeFlagFormatNV) return; - trigger_glEdgeFlagFormatNV = true; - printf("Stub: glEdgeFlagFormatNV\n"); -} -static bool trigger_glSecondaryColorFormatNV = false; -void stub_glSecondaryColorFormatNV() { - if(trigger_glSecondaryColorFormatNV) return; - trigger_glSecondaryColorFormatNV = true; - printf("Stub: glSecondaryColorFormatNV\n"); -} -static bool trigger_glFogCoordFormatNV = false; -void stub_glFogCoordFormatNV() { - if(trigger_glFogCoordFormatNV) return; - trigger_glFogCoordFormatNV = true; - printf("Stub: glFogCoordFormatNV\n"); -} -static bool trigger_glVertexAttribFormatNV = false; -void stub_glVertexAttribFormatNV() { - if(trigger_glVertexAttribFormatNV) return; - trigger_glVertexAttribFormatNV = true; - printf("Stub: glVertexAttribFormatNV\n"); -} -static bool trigger_glVertexAttribIFormatNV = false; -void stub_glVertexAttribIFormatNV() { - if(trigger_glVertexAttribIFormatNV) return; - trigger_glVertexAttribIFormatNV = true; - printf("Stub: glVertexAttribIFormatNV\n"); -} -static bool trigger_glGetIntegerui64i_vNV = false; -void stub_glGetIntegerui64i_vNV() { - if(trigger_glGetIntegerui64i_vNV) return; - trigger_glGetIntegerui64i_vNV = true; - printf("Stub: glGetIntegerui64i_vNV\n"); -} -static bool trigger_glViewportSwizzleNV = false; -void stub_glViewportSwizzleNV() { - if(trigger_glViewportSwizzleNV) return; - trigger_glViewportSwizzleNV = true; - printf("Stub: glViewportSwizzleNV\n"); -} -static bool trigger_glFramebufferTextureMultiviewOVR = false; -void stub_glFramebufferTextureMultiviewOVR() { - if(trigger_glFramebufferTextureMultiviewOVR) return; - trigger_glFramebufferTextureMultiviewOVR = true; - printf("Stub: glFramebufferTextureMultiviewOVR\n"); -} -static bool trigger_glNamedFramebufferTextureMultiviewOVR = false; -void stub_glNamedFramebufferTextureMultiviewOVR() { - if(trigger_glNamedFramebufferTextureMultiviewOVR) return; - trigger_glNamedFramebufferTextureMultiviewOVR = true; - printf("Stub: glNamedFramebufferTextureMultiviewOVR\n"); -} - -//BUILD SUCCESSFUL (total time: 0 seconds) diff --git a/ltw/src/main/tinywrapper/swizzle.c b/ltw/src/main/tinywrapper/swizzle.c deleted file mode 100644 index 9c1def1..0000000 --- a/ltw/src/main/tinywrapper/swizzle.c +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#include "proc.h" -#include "egl.h" -#include -#include "libraryinternal.h" -//#include - -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 - -static void swizzle_process_bgra(GLenum* swizzle) { - GLenum red_src = swizzle[0]; - GLenum blue_src = swizzle[2]; - swizzle[0] = blue_src; - swizzle[2] = red_src; -} - -static void swizzle_process_endianness(GLenum* swizzle) { - GLenum orig_swizzle[4]; - memcpy(orig_swizzle, swizzle, 4 * sizeof(GLenum)); - swizzle[0] = orig_swizzle[3]; - swizzle[1] = orig_swizzle[2]; - swizzle[2] = orig_swizzle[1]; - swizzle[3] = orig_swizzle[0]; -} - -static texture_swizzle_track_t* get_swizzle_track(GLenum target) { - GLint texture; - GLenum getter = get_textarget_query_param(target); - if(getter == 0) return NULL; - es3_functions.glGetIntegerv(getter, &texture); - texture_swizzle_track_t* track = unordered_map_get(current_context->texture_swztrack_map, (void*)texture); - if(track == NULL) { - track = malloc(sizeof(texture_swizzle_track_t)); - es3_functions.glGetTexParameteriv(target, GL_TEXTURE_SWIZZLE_R, (GLint*)&track->original_swizzle[0]); - es3_functions.glGetTexParameteriv(target, GL_TEXTURE_SWIZZLE_G, (GLint*)&track->original_swizzle[1]); - es3_functions.glGetTexParameteriv(target, GL_TEXTURE_SWIZZLE_B, (GLint*)&track->original_swizzle[2]); - es3_functions.glGetTexParameteriv(target, GL_TEXTURE_SWIZZLE_A, (GLint*)&track->original_swizzle[3]); - unordered_map_put(current_context->texture_swztrack_map, (void*)texture, track); - } - return track; -} - -static void apply_swizzles(GLenum target, texture_swizzle_track_t* track) { - GLenum new_swizzle[4]; - memcpy(new_swizzle, track->original_swizzle, 4 * sizeof(GLenum)); - if(track->goofy_byte_order) swizzle_process_endianness(new_swizzle); - if(track->upload_bgra) swizzle_process_bgra(new_swizzle); - es3_functions.glTexParameteri(target, GL_TEXTURE_SWIZZLE_R, new_swizzle[0]); - es3_functions.glTexParameteri(target, GL_TEXTURE_SWIZZLE_G, new_swizzle[1]); - es3_functions.glTexParameteri(target, GL_TEXTURE_SWIZZLE_B, new_swizzle[2]); - es3_functions.glTexParameteri(target, GL_TEXTURE_SWIZZLE_A, new_swizzle[3]); -} - -INTERNAL void swizzle_process_upload(GLenum target, GLenum* format, GLenum* type) { - texture_swizzle_track_t* track = get_swizzle_track(target); - if(track == NULL) return; - bool apply_upload_bgra = false; - bool apply_goofy_order = false; - if((*format) == GL_BGRA_EXT) { - apply_upload_bgra = true; - *format = GL_RGBA; - } - if((*type) == 0x8035) { - apply_goofy_order = true; - *type = GL_UNSIGNED_BYTE; - } - if((*type) == 0x8367) { - *type = GL_UNSIGNED_BYTE; - } - if(apply_goofy_order != track->goofy_byte_order || apply_upload_bgra != track->upload_bgra) { - track->goofy_byte_order = apply_goofy_order; - track->upload_bgra = apply_upload_bgra; - apply_swizzles(target, track); - } -} - -INTERNAL void swizzle_process_swizzle_param(GLenum target, GLenum swizzle_param, const GLenum* swizzle) { - switch (swizzle_param) { - case GL_TEXTURE_SWIZZLE_R: - case GL_TEXTURE_SWIZZLE_G: - case GL_TEXTURE_SWIZZLE_B: - case GL_TEXTURE_SWIZZLE_A: - case GL_TEXTURE_SWIZZLE_RGBA: - break; - default: - return; - } - texture_swizzle_track_t* track = get_swizzle_track(target); - if(track == NULL) return; - switch(swizzle_param) { - case GL_TEXTURE_SWIZZLE_R: - case GL_TEXTURE_SWIZZLE_G: - case GL_TEXTURE_SWIZZLE_B: - case GL_TEXTURE_SWIZZLE_A: - track->original_swizzle[swizzle_param - GL_TEXTURE_SWIZZLE_R] = *swizzle; - apply_swizzles(target, track); - break; - case GL_TEXTURE_SWIZZLE_RGBA: - memcpy(track->original_swizzle, swizzle, 4 * sizeof(GLenum)); - apply_swizzles(target, track); - break; - } -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/swizzle.h b/ltw/src/main/tinywrapper/swizzle.h deleted file mode 100644 index fe880d9..0000000 --- a/ltw/src/main/tinywrapper/swizzle.h +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef GL4ES_WRAPPER_SWIZZLE_H -#define GL4ES_WRAPPER_SWIZZLE_H - -#include "egl.h" - -void swizzle_process_upload(GLenum target, GLenum *format, GLenum *type); -void swizzle_process_swizzle_param(GLenum target, GLenum swizzle_param, const GLenum* swizzle); - -#endif //GL4ES_WRAPPER_SWIZZLE_H diff --git a/ltw/src/main/tinywrapper/texture_tracker.c.unused b/ltw/src/main/tinywrapper/texture_tracker.c.unused deleted file mode 100644 index 97266fa..0000000 --- a/ltw/src/main/tinywrapper/texture_tracker.c.unused +++ /dev/null @@ -1,91 +0,0 @@ -// -// Created by maks on 09.03.2024. -// -#include "egl.h" -#include "proc.h" -#include "glformats.h" -#include "GL/gl.h" - -static int isProxyTexture(GLenum target) { - switch (target) { - case GL_PROXY_TEXTURE_1D: - case GL_PROXY_TEXTURE_2D: - case GL_PROXY_TEXTURE_3D: - case GL_PROXY_TEXTURE_RECTANGLE_ARB: - return 1; - } - return 0; -} - -static int inline nlevel(int size, int level) { - if(size) { - size>>=level; - if(!size) size=1; - } - return size; -} - -void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params) { - if(!current_context) return; - // NSLog("glGetTexLevelParameteriv(%x, %d, %x, %p)", target, level, pname, params); - if (isProxyTexture(target)) { - switch (pname) { - case GL_TEXTURE_WIDTH: - (*params) = nlevel(current_context->proxy_width, level); - break; - case GL_TEXTURE_HEIGHT: - (*params) = nlevel(current_context->proxy_height, level); - break; - case GL_TEXTURE_INTERNAL_FORMAT: - (*params) = current_context->proxy_intformat; - break; - } - } else { - GLint texture; - es3_functions.glGetIntegerv(GL_TEXTURE_BINDING_2D, &texture); - texture_t* tracked_texture = unordered_map_get(current_context->texture_map, (void*) texture); - } -} - -void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *data) { - if(!current_context) return; - if (isProxyTexture(target)) { - current_context->proxy_width = ((width<current_context->maxTextureSize)?0:width; - current_context->proxy_height = ((height<current_context->maxTextureSize)?0:height; - current_context->proxy_intformat = internalformat; - } else { - pick_internalformat(&internalformat, &type, &format, &data); - GLint texture; - es3_functions.glGetIntegerv(GL_TEXTURE_BINDING_2D, &texture); - texture_t* tracked_texture = unordered_map_get(current_context->texture_map, (void*) texture); - if(tracked_texture != NULL && level == 0) { - tracked_texture->internalformat = internalformat; - tracked_texture->format = format; - tracked_texture->type = type; - tracked_texture->width = width; - tracked_texture->height = height; - } - es3_functions.glTexImage2D(target, level, internalformat, width, height, border, format, type, data); - } -} - -void glGenTextures(GLsizei n, GLuint* textures) { - if(!current_context) return; - es3_functions.glGenTextures(n, textures); - texture_t* texture; - for(GLsizei i = 0; i < n; i++) { - texture = calloc(1, sizeof(texture_t)); - unordered_map_put(current_context->texture_map, (void*)textures[i], texture); - } -} - -void glDeleteTextures(GLsizei n, const GLuint* textures) { - if(!current_context) return; - es3_functions.glDeleteTextures(n, textures); - texture_t * texture; - for(GLsizei i = 0; i < n; i++) { - texture = unordered_map_remove(current_context->texture_map, (void*)textures[i]); - if(texture == NULL) continue; - free(texture); - } -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/unordered_map/int_hash.c b/ltw/src/main/tinywrapper/unordered_map/int_hash.c deleted file mode 100644 index 88e6c3d..0000000 --- a/ltw/src/main/tinywrapper/unordered_map/int_hash.c +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ -#include "int_hash.h" -#include "../libraryinternal.h" -static size_t intmap_hash(void* key) { - return (size_t)key; -} - -static bool intmap_equals(void* v1, void* v2) { - return v1 == v2; -} - -INTERNAL unordered_map* alloc_intmap_safe() { - return unordered_map_alloc(0, 1, intmap_hash, intmap_equals); -} - -INTERNAL unordered_map* alloc_intmap() { - unordered_map* map = alloc_intmap_safe(); - if(map == NULL) { - printf("failed to alloc_intmap\n"); - abort(); - } - return map; -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/unordered_map/int_hash.h b/ltw/src/main/tinywrapper/unordered_map/int_hash.h deleted file mode 100644 index c2392b5..0000000 --- a/ltw/src/main/tinywrapper/unordered_map/int_hash.h +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef POJAVLAUNCHER_INT_HASH_H -#define POJAVLAUNCHER_INT_HASH_H -#include -#include -#include -#include "unordered_map.h" -unordered_map* alloc_intmap_safe(); -unordered_map* alloc_intmap(); - -#endif //POJAVLAUNCHER_INT_HASH_H diff --git a/ltw/src/main/tinywrapper/unordered_map/unordered_map.c b/ltw/src/main/tinywrapper/unordered_map/unordered_map.c deleted file mode 100644 index f483d40..0000000 --- a/ltw/src/main/tinywrapper/unordered_map/unordered_map.c +++ /dev/null @@ -1,475 +0,0 @@ -#include "unordered_map.h" -#include -#include -static unordered_map_entry* unordered_map_entry_alloc(void* key, void* value) -{ - unordered_map_entry* entry = malloc(sizeof(*entry)); - - if (!entry) - { - return NULL; - } - - entry->key = key; - entry->value = value; - entry->chain_next = NULL; - entry->next = NULL; - entry->prev = NULL; - - return entry; -} - -static const float MINIMUM_LOAD_FACTOR = 0.2f; -static const size_t MINIMUM_INITIAL_CAPACITY = 16; - -static float maxf(float a, float b) -{ - return a < b ? b : a; -} - -static int maxi(int a, int b) -{ - return a < b ? b : a; -} - -/******************************************************************************* -* Makes sure that the load factor is no less than a minimum threshold. * -*******************************************************************************/ -static float fix_load_factor(float load_factor) -{ - return maxf(load_factor, MINIMUM_LOAD_FACTOR); -} - -/******************************************************************************* -* Makes sure that the initial capacity is no less than a minimum allowed and * -* is a power of two. * -*******************************************************************************/ -static size_t fix_initial_capacity(size_t initial_capacity) -{ - size_t ret; - - initial_capacity = maxi(initial_capacity, MINIMUM_INITIAL_CAPACITY); - ret = 1; - - while (ret < initial_capacity) - { - ret <<= 1; - } - - return ret; -} - -unordered_map* unordered_map_alloc(size_t initial_capacity, - float load_factor, - size_t (*hash_function)(void*), - bool (*equals_function)(void*, void*)) -{ - unordered_map* map; - - if (!hash_function || !equals_function) - { - return NULL; - } - - map = malloc(sizeof(*map)); - - if (!map) - { - return NULL; - } - - load_factor = fix_load_factor(load_factor); - initial_capacity = fix_initial_capacity(initial_capacity); - - map->load_factor = load_factor; - map->table_capacity = initial_capacity; - map->size = 0; - map->mod_count = 0; - map->head = NULL; - map->tail = NULL; - map->table = calloc(initial_capacity, - sizeof(unordered_map_entry*)); - map->hash_function = hash_function; - map->equals_function = equals_function; - map->mask = initial_capacity - 1; - map->max_allowed_size = (size_t)(initial_capacity * load_factor); - - return map; -} - -static void ensure_capacity(unordered_map* map) -{ - size_t new_capacity; - size_t new_mask; - size_t index; - unordered_map_entry* entry; - unordered_map_entry** new_table; - - if (map->size < map->max_allowed_size) - { - return; - } - - new_capacity = 2 * map->table_capacity; - new_mask = new_capacity - 1; - new_table = calloc(new_capacity, sizeof(unordered_map_entry*)); - - if (!new_table) - { - return; - } - - /* Rehash the entries. */ - for (entry = map->head; entry; entry = entry->next) - { - index = map->hash_function(entry->key) & new_mask; - entry->chain_next = new_table[index]; - new_table[index] = entry; - } - - free(map->table); - - map->table = new_table; - map->table_capacity = new_capacity; - map->mask = new_mask; - map->max_allowed_size = (size_t)(new_capacity * map->load_factor); -} - -void* unordered_map_put(unordered_map* map, void* key, void* value) -{ - size_t index; - size_t hash_value; - void* old_value; - unordered_map_entry* entry; - - if (!map) - { - return NULL; - } - - hash_value = map->hash_function(key); - index = hash_value & map->mask; - - for (entry = map->table[index]; entry; entry = entry->chain_next) - { - if (map->equals_function(entry->key, key)) - { - old_value = entry->value; - entry->value = value; - return old_value; - } - } - - ensure_capacity(map); - - /* Recompute the index since it is possibly changed by 'ensure_capacity' */ - index = hash_value & map->mask; - entry = unordered_map_entry_alloc(key, value); - entry->chain_next = map->table[index]; - map->table[index] = entry; - - /* Link the new entry to the tail of the list. */ - if (!map->tail) - { - map->head = entry; - map->tail = entry; - } - else - { - map->tail->next = entry; - entry->prev = map->tail; - map->tail = entry; - } - - map->size++; - map->mod_count++; - - return NULL; -} - -bool unordered_map_contains_key(unordered_map* map, void* key) -{ - size_t index; - unordered_map_entry* entry; - - if (!map) - { - return false; - } - - index = map->hash_function(key) & map->mask; - - for (entry = map->table[index]; entry; entry = entry->chain_next) - { - if (map->equals_function(key, entry->key)) - { - return true; - } - } - - return false; -} - -void* unordered_map_get(unordered_map* map, void* key) -{ - size_t index; - unordered_map_entry* p_entry; - - if (!map) - { - return NULL; - } - - index = map->hash_function(key) & map->mask; - - for (p_entry = map->table[index]; p_entry; p_entry = p_entry->chain_next) - { - if (map->equals_function(key, p_entry->key)) - { - return p_entry->value; - } - } - - return NULL; -} - -void* unordered_map_remove(unordered_map* map, void* key) -{ - void* value; - size_t index; - unordered_map_entry* prev_entry; - unordered_map_entry* current_entry; - - if (!map) - { - return NULL; - } - - index = map->hash_function(key) & map->mask; - - prev_entry = NULL; - - for (current_entry = map->table[index]; - current_entry; - current_entry = current_entry->chain_next) - { - if (map->equals_function(key, current_entry->key)) - { - if (prev_entry) - { - /* Omit the 'p_current_entry' in the collision chain. */ - prev_entry->chain_next = current_entry->chain_next; - } - else - { - map->table[index] = current_entry->chain_next; - } - - /* Unlink from the global iteration chain. */ - if (current_entry->prev) - { - current_entry->prev->next = current_entry->next; - } - else - { - map->head = current_entry->next; - } - - if (current_entry->next) - { - current_entry->next->prev = current_entry->prev; - } - else - { - map->tail = current_entry->prev; - } - - value = current_entry->value; - map->size--; - map->mod_count++; - free(current_entry); - return value; - } - - prev_entry = current_entry; - } - - return NULL; -} - -void unordered_map_clear(unordered_map* map) -{ - unordered_map_entry* entry; - unordered_map_entry* next_entry; - size_t index; - - if (!map) - { - return; - } - - entry = map->head; - - while (entry) - { - index = map->hash_function(entry->key) & map->mask; - next_entry = entry->next; - free(entry); - entry = next_entry; - map->table[index] = NULL; - } - - map->mod_count += map->size; - map->size = 0; - map->head = NULL; - map->tail = NULL; -} - -size_t unordered_map_size(unordered_map* map) -{ - return map ? map->size : 0; -} - -bool unordered_map_is_healthy(unordered_map* map) -{ - size_t counter; - unordered_map_entry* entry; - - if (!map) - { - return false; - } - - counter = 0; - entry = map->head; - - if (entry && entry->prev) - { - return false; - } - - for (; entry; entry = entry->next) - { - counter++; - } - - return counter == map->size; -} - -void unordered_map_free(unordered_map* map) -{ - if (!map) - { - return; - } - - unordered_map_clear(map); - free(map->table); - free(map); -} - -unordered_map_iterator* -unordered_map_iterator_alloc(unordered_map* map) -{ - unordered_map_iterator* p_ret; - - if (!map) - { - return NULL; - } - - p_ret = malloc(sizeof(*p_ret)); - - if (!p_ret) - { - return NULL; - } - - p_ret->map = map; - p_ret->iterated_count = 0; - p_ret->next_entry = map->head; - p_ret->expected_mod_count = map->mod_count; - - return p_ret; -} - -bool -unordered_map_iterator_alloc_local(unordered_map* map, unordered_map_iterator* iterator) -{ - if (!map) - { - return false; - } - - - iterator->map = map; - iterator->iterated_count = 0; - iterator->next_entry = map->head; - iterator->expected_mod_count = map->mod_count; - - return iterator; -} - -size_t unordered_map_iterator_has_next(unordered_map_iterator* iterator) -{ - if (!iterator) - { - return 0; - } - - if (unordered_map_iterator_is_disturbed(iterator)) - { - return 0; - } - - return iterator->map->size - iterator->iterated_count; -} - -bool unordered_map_iterator_next(unordered_map_iterator* iterator, - void** key_pointer, - void** value_pointer) -{ - if (!iterator) - { - return false; - } - - if (!iterator->next_entry) - { - return false; - } - - if (unordered_map_iterator_is_disturbed(iterator)) - { - return false; - } - - *key_pointer = iterator->next_entry->key; - *value_pointer = iterator->next_entry->value; - iterator->iterated_count++; - iterator->next_entry = iterator->next_entry->next; - - return true; -} - -bool unordered_map_iterator_is_disturbed(unordered_map_iterator* iterator) -{ - if (!iterator) - { - false; - } - - return iterator->expected_mod_count != iterator->map->mod_count; -} - -void unordered_map_iterator_free(unordered_map_iterator* iterator) -{ - if (!iterator) - { - return; - } - - iterator->map = NULL; - iterator->next_entry = NULL; - free(iterator); -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/unordered_map/unordered_map.h b/ltw/src/main/tinywrapper/unordered_map/unordered_map.h deleted file mode 100644 index d4be4e7..0000000 --- a/ltw/src/main/tinywrapper/unordered_map/unordered_map.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef UNORDERED_MAP_H -#define UNORDERED_MAP_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - - - - - -typedef struct unordered_map_entry { - void* key; - void* value; - struct unordered_map_entry* chain_next; - struct unordered_map_entry* prev; - struct unordered_map_entry* next; -} unordered_map_entry; - -struct unordered_map { - unordered_map_entry** table; - unordered_map_entry* head; - unordered_map_entry* tail; - size_t (*hash_function)(void*); - bool (*equals_function)(void*, void*); - size_t mod_count; - size_t table_capacity; - size_t size; - size_t max_allowed_size; - size_t mask; - float load_factor; -}; - -typedef struct unordered_map unordered_map; - -struct unordered_map_iterator { - unordered_map* map; - unordered_map_entry* next_entry; - size_t iterated_count; - size_t expected_mod_count; -}; - -typedef struct unordered_map_iterator unordered_map_iterator; - -/*************************************************************************** -* Allocates a new, empty map with given hash function and given equality * -* testing function. * -***************************************************************************/ -unordered_map* unordered_map_alloc - (size_t initial_capacity, - float load_factor, - size_t (*hash_function)(void*), - bool (*equals_function)(void*, void*)); - -/*************************************************************************** -* If p_map does not contain the key p_key, inserts it in the map, * -* associates p_value with it and return NULL. Otherwise updates the value * -* and returns the old value. * -***************************************************************************/ -void* unordered_map_put (unordered_map* map, void* key, void* value); - -/*************************************************************************** -* Returns a positive value if p_key is mapped to some value in this map. * -***************************************************************************/ -bool unordered_map_contains_key (unordered_map* map, void* key); - -/*************************************************************************** -* Returns the value associated with the p_key, or NULL if p_key is not * -* mapped in the map. * -***************************************************************************/ -void* unordered_map_get (unordered_map* map, void* key); - -/*************************************************************************** -* If p_key is mapped in the map, removes the mapping and returns the value * -* of that mapping. If the map did not contain the mapping, returns NULL. * -***************************************************************************/ -void* unordered_map_remove (unordered_map* map, void* p_key); - -/*************************************************************************** -* Removes all the contents of the map. * -***************************************************************************/ -void unordered_map_clear (unordered_map* map); - -/*************************************************************************** -* Returns the size of the map, or namely, the amount of key/value mappings * -* in the map. * -***************************************************************************/ -size_t unordered_map_size (unordered_map* map); - -/*************************************************************************** -* Checks that the map is in valid state. * -***************************************************************************/ -bool unordered_map_is_healthy (unordered_map* map); - -/*************************************************************************** -* Deallocates the entire map. Only the map and its nodes are deallocated. * -* The user is responsible for deallocating the actual data stored in the * -* map. * -***************************************************************************/ -void unordered_map_free (unordered_map* map); - -/*************************************************************************** -* Returns the iterator over the map. The entries are iterated in insertion * -* order. * -***************************************************************************/ -unordered_map_iterator* unordered_map_iterator_alloc - (unordered_map* map); -bool unordered_map_iterator_alloc_local(unordered_map* map, unordered_map_iterator* iterator); - -/*************************************************************************** -* Returns the number of keys not yet iterated over. * -***************************************************************************/ -size_t unordered_map_iterator_has_next - (unordered_map_iterator* iterator); - -/*************************************************************************** -* Loads the next entry in the iteration order. * -***************************************************************************/ -bool unordered_map_iterator_next(unordered_map_iterator* iterator, - void** key_pointer, - void** value_pointer); - -/*************************************************************************** -* Returns a true if the map was modified during the iteration. * -***************************************************************************/ -bool unordered_map_iterator_is_disturbed - (unordered_map_iterator* iterator); - -/*************************************************************************** -* Deallocates the map iterator. * -***************************************************************************/ -void unordered_map_iterator_free(unordered_map_iterator* iterator); - -#ifdef __cplusplus -} -#endif - -#endif /* UNORDERED_MAP_H */ diff --git a/ltw/src/main/tinywrapper/version.script b/ltw/src/main/tinywrapper/version.script deleted file mode 100644 index 8697714..0000000 --- a/ltw/src/main/tinywrapper/version.script +++ /dev/null @@ -1,4 +0,0 @@ -{ - global: gl*; egl*; - local: *; -}; \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/vertexattrib.c b/ltw/src/main/tinywrapper/vertexattrib.c deleted file mode 100644 index bfcc8e0..0000000 --- a/ltw/src/main/tinywrapper/vertexattrib.c +++ /dev/null @@ -1,258 +0,0 @@ -/** - * Created by: artDev - * Copyright (c) 2025 artDev, SerpentSpirale, CADIndie. - * For use under LGPL-3.0 - */ - -#include -#include - -/* glVertexAttribXs family */ -void glVertexAttrib1s( GLuint index, - GLshort v0) { - es3_functions.glVertexAttrib1f(index, (GLfloat) v0); -} - -void glVertexAttrib2s( GLuint index, - GLshort v0, - GLshort v1) { - es3_functions.glVertexAttrib2f(index, (GLfloat) v0, (GLfloat) v1); -} -void glVertexAttrib3s( GLuint index, - GLshort v0, - GLshort v1, - GLshort v2) { - es3_functions.glVertexAttrib3f(index, (GLfloat) v0, (GLfloat) v1, (GLfloat) v2); -} -void glVertexAttrib4s( GLuint index, - GLshort v0, - GLshort v1, - GLshort v2, - GLshort v3) { - es3_functions.glVertexAttrib4f(index, (GLfloat) v0, (GLfloat) v1, (GLfloat) v2, (GLfloat) v3); -} - -/* glVertexAttribXsv family */ -void glVertexAttrib1sv( GLuint index, - const GLshort *v) { - glVertexAttrib1s(index, v[0]); -} -void glVertexAttrib2sv( GLuint index, - const GLshort *v) { - glVertexAttrib2s(index, v[0], v[1]); -} -void glVertexAttrib3sv( GLuint index, - const GLshort *v) { - glVertexAttrib3s(index, v[0], v[1], v[2]); -} -void glVertexAttrib4sv( GLuint index, - const GLshort *v) { - glVertexAttrib4s(index, v[0], v[1], v[2], v[3]); -} - -/* glVertexAttribXd family */ -void glVertexAttrib1d( GLuint index, - GLdouble v0) { - es3_functions.glVertexAttrib1f(index, (GLfloat) v0); -} - -void glVertexAttrib2d( GLuint index, - GLdouble v0, - GLdouble v1) { - es3_functions.glVertexAttrib2f(index, (GLfloat) v0, (GLfloat) v1); -} -void glVertexAttrib3d( GLuint index, - GLdouble v0, - GLdouble v1, - GLdouble v2) { - es3_functions.glVertexAttrib3f(index, (GLfloat) v0, (GLfloat) v1, (GLfloat) v2); -} -void glVertexAttrib4d( GLuint index, - GLdouble v0, - GLdouble v1, - GLdouble v2, - GLdouble v3) { - es3_functions.glVertexAttrib4f(index, (GLfloat) v0, (GLfloat) v1, (GLfloat) v2, (GLfloat) v3); -} - -/* glVertexAttribXdv family */ -void glVertexAttrib1dv( GLuint index, - const GLdouble *v) { - glVertexAttrib1d(index, v[0]); -} -void glVertexAttrib2dv( GLuint index, - const GLdouble *v) { - glVertexAttrib2d(index, v[0], v[1]); -} -void glVertexAttrib3dv( GLuint index, - const GLdouble *v) { - glVertexAttrib3d(index, v[0], v[1], v[2]); -} -void glVertexAttrib4dv( GLuint index, - const GLdouble *v) { - glVertexAttrib4d(index, v[0], v[1], v[2], v[3]); -} - -/* glVertexAttribIXi family */ -void glVertexAttribI1i( GLuint index, - GLint v0) { - es3_functions.glVertexAttribI4i(index, v0, 0, 0, 1); -} -void glVertexAttribI2i( GLuint index, - GLint v0, - GLint v1) { - es3_functions.glVertexAttribI4i(index, v0, v1, 0, 1); -} -void glVertexAttribI3i( GLuint index, - GLint v0, - GLint v1, - GLint v2) { - es3_functions.glVertexAttribI4i(index, v0, v1, v2, 1); -} -// glVertexAttribI4i is natively implemented in OpenGL ES - -/* glVertexAttribIXiv family */ -void glVertexAttribI1iv( GLuint index, - const GLint *v) { - glVertexAttribI1i(index, v[0]); -} -void glVertexAttribI2iv( GLuint index, - const GLint *v) { - glVertexAttribI2i(index, v[0], v[1]); -} -void glVertexAttribI3iv( GLuint index, - const GLint *v) { - glVertexAttribI3i(index, v[0], v[1], v[2]); -} -// glVertexAttribI4iv is natively implemented in OpenGL ES - -/* glVertexAttribI4XYv family */ -void glVertexAttribI4bv( GLuint index, - const GLbyte *v) { - es3_functions.glVertexAttribI4i(index, (GLint)v[0], (GLint)v[1], (GLint)v[2], (GLint)v[3]); -} -void glVertexAttribI4ubv( GLuint index, - const GLubyte *v) { - es3_functions.glVertexAttribI4ui(index, (GLuint)v[0], (GLuint)v[1], (GLuint)v[2], (GLuint)v[3]); -} -void glVertexAttribI4sv( GLuint index, - const GLshort *v) { - es3_functions.glVertexAttribI4i(index, (GLint)v[0], (GLint)v[1], (GLint)v[2], (GLint)v[3]); -} -void glVertexAttribI4usv( GLuint index, - const GLushort *v) { - es3_functions.glVertexAttribI4ui(index, (GLuint)v[0], (GLuint)v[1], (GLuint)v[2], (GLuint)v[3]); -} - -/* glVertexAttribIXui family */ -void glVertexAttribI1ui( GLuint index, - GLuint v0) { - es3_functions.glVertexAttribI4ui(index, v0, 0, 0, 1); -} -void glVertexAttribI2ui( GLuint index, - GLuint v0, - GLuint v1) { - es3_functions.glVertexAttribI4ui(index, v0, v1, 0, 1); -} -void glVertexAttribI3ui( GLuint index, - GLuint v0, - GLuint v1, - GLuint v2) { - es3_functions.glVertexAttribI4ui(index, v0, v1, v2, 1); -} -// glVertexAttibI4ui is natively implemented in OpenGL ES - -/* glVertexAttribIXuiv family */ -void glVertexAttribI1uiv( GLuint index, - const GLuint *v) { - glVertexAttribI1ui(index, v[0]); -} -void glVertexAttribI2uiv( GLuint index, - const GLuint *v) { - glVertexAttribI2ui(index, v[0], v[1]); -} -void glVertexAttribI3uiv( GLuint index, - const GLuint *v) { - glVertexAttribI3ui(index, v[0], v[1], v[2]); -} -// glVertexAttribI4uiv is natively implemented in OpenGL ES - -/* glVertexAttrib4N*** family */ -void glVertexAttrib4Nub( GLuint index, - GLubyte v0, - GLubyte v1, - GLubyte v2, - GLubyte v3) { - GLfloat fv0 = ((GLfloat)v0 / 255.0f); - GLfloat fv1 = ((GLfloat)v1 / 255.0f); - GLfloat fv2 = ((GLfloat)v2 / 255.0f); - GLfloat fv3 = ((GLfloat)v3 / 255.0f); - es3_functions.glVertexAttrib4f(index, fv0, fv1, fv2, fv3); -} - -void glVertexAttrib4Nubv( GLuint index, - const GLubyte *v) { - glVertexAttrib4Nub(index, v[0], v[1], v[2], v[3]); -} - -void glVertexAttrib4Nusv( GLuint index, - const GLushort *v) { - GLfloat fv0 = ((GLfloat)v[0] / 32767.0f); - GLfloat fv1 = ((GLfloat)v[1] / 32767.0f); - GLfloat fv2 = ((GLfloat)v[2] / 32767.0f); - GLfloat fv3 = ((GLfloat)v[3] / 32767.0f); - es3_functions.glVertexAttrib4f(index, fv0, fv1, fv2, fv3); -} - -void glVertexAttrib4Nuiv( GLuint index, - const GLuint *v) { - // GLfloat has a precision limit of 24 bits, so truncate the input integers to it. - GLfloat fv0 = ((GLfloat)v[0] / 4294967295.0f); - GLfloat fv1 = ((GLfloat)v[1] / 4294967295.0f); - GLfloat fv2 = ((GLfloat)v[2] / 4294967295.0f); - GLfloat fv3 = ((GLfloat)v[3] / 4294967295.0f); - es3_functions.glVertexAttrib4f(index, fv0, fv1, fv2, fv3); -} - -static float bnormalize(GLbyte x) { - return x < 0 ? (GLfloat)x/128.0f : (GLfloat)x/127.0f; -} -static float snormalize(GLshort x) { - return x < 0 ? (GLfloat) x / 32768.0f : (GLfloat) x / 32767.0f; -} -static float inormalize(GLint x) { - return x < 0 ? (GLfloat)x/2147483648.0f : (GLfloat)x/2147483647.0f; -} - -void glVertexAttrib4Nbv( GLuint index, - const GLbyte *v) { - es3_functions.glVertexAttrib4f( - index, - bnormalize(v[0]), - bnormalize(v[1]), - bnormalize(v[2]), - bnormalize(v[3]) - ); -} - -void glVertexAttrib4Nsv( GLuint index, - const GLshort *v) { - es3_functions.glVertexAttrib4f( - index, - snormalize(v[0]), - snormalize(v[1]), - snormalize(v[2]), - snormalize(v[3]) - ); -} - -void glVertexAttrib4Niv( GLuint index, - const GLint *v) { - es3_functions.glVertexAttrib4f( - index, - inormalize(v[0]), - inormalize(v[1]), - inormalize(v[2]), - inormalize(v[3]) - ); -} diff --git a/ltw/src/main/tinywrapper/vgpu_shaderconv/shaderconv.c b/ltw/src/main/tinywrapper/vgpu_shaderconv/shaderconv.c deleted file mode 100644 index 9ab604a..0000000 --- a/ltw/src/main/tinywrapper/vgpu_shaderconv/shaderconv.c +++ /dev/null @@ -1,1728 +0,0 @@ -/** - * Created by: SerpentSpirale - * Copyright (c) 2025 SerpentSpirale, artDev, CADIndie. - * For use under LGPL-3.0 - */ -#include -#include -#include -#include -#include "shaderconv.h" -#include "../string_utils.h" - -int NO_OPERATOR_VALUE = 9999; -int ADDITIVE_OPERATOR_VALUE = 5; - - - -/** Just prints the shader at a stage, for heavy dump */ -void VerbosePrint(char * source, char * stage) { -#ifdef SHADERCONV_VERBOSE - printf("Stage - %s :\n%s\n", stage, source); -#endif -} - -/** Convert the shader through multiple steps - * @param source The start of the shader as a string - * @param second_pass Whether gl4es tries to solve a linking error - */ -char * ConvertShaderVgpu(char* source, int is_vertex, int second_pass){ - -#ifdef SHADERCONV_DEBUG - printf("New VGPU Shader source:\n%s\n", source); -#endif - - // Get the shader source - int sourceLength = strlen(source) + 1; - // For now, skip stuff - - - // Remove 'const' storage qualifier - //printf("REMOVING CONST qualifiers"); - //source = RemoveConstInsideBlocks(source, &sourceLength); - //source = ReplaceVariableName(source, &sourceLength, "const", " "); - - - - - // Avoid keyword clash with gl4es #define blocks - //printf("REPLACING KEYWORDS"); - source = gl4es_inplace_replace_simple(source, &sourceLength, "#define texture2D texture\n", ""); - source = ReplaceVariableName(source, &sourceLength, "sample", "vgpu_Sample"); - source = ReplaceVariableName(source, &sourceLength, "texture", "vgpu_texture"); - - source = ReplaceFunctionName(source, &sourceLength, "texture2D", "texture"); - source = ReplaceFunctionName(source, &sourceLength, "texture3D", "texture"); - source = ReplaceFunctionName(source, &sourceLength, "texture2DLod", "textureLod"); - - - - //printf("REMOVING \" CHARS "); - // " not really supported here - source = gl4es_inplace_replace_simple(source, &sourceLength, "\"", ""); - VerbosePrint(source, "Function renames"); - - // For now let's hope no extensions are used - // TODO deal with extensions but properly - //printf("REMOVING EXTENSIONS"); - //source = RemoveUnsupportedExtensions(source); - - // OpenGL natively supports non const global initializers, not OPENGL ES except if we add an extension - //printf("ADDING EXTENSIONS\n"); - source = InsertExtensions(source, &sourceLength); - VerbosePrint(source, "Extensions inserted"); - - //printf("REPLACING mod OPERATORS"); - // No support for % operator, so we replace it - source = ReplaceModOperator(source, &sourceLength); - VerbosePrint(source, "Modulo operator replaced"); - - //printf("COERCING INT TO FLOATS"); - // Hey we don't want to deal with implicit type stuff - source = CoerceIntToFloat(source, &sourceLength); - VerbosePrint(source, "Int coerced to float"); - - //printf("FIXING ARRAY ACCESS"); - // Avoid any weird type trying to be an index for an array - source = ForceIntegerArrayAccess(source, &sourceLength); - VerbosePrint(source, "Array access cast to integers"); - - //printf("WRAPPING FUNCTION"); - // Since everything is a float, we need to overload WAY TOO MANY functions - source = WrapIvecFunctions(source, &sourceLength); - VerbosePrint(source, "Wrapped ivec function renames"); - - //printf("REMOVING DUBIOUS DEFINES"); - source = gl4es_inplace_replace_simple(source, &sourceLength, "#define texture texture2D\n", ""); - source = gl4es_inplace_replace_simple(source, &sourceLength, "#define attribute in\n", ""); - source = gl4es_inplace_replace_simple(source, &sourceLength, "#define varying out\n", ""); - - if (is_vertex){ - source = ReplaceVariableName(source, &sourceLength, "attribute", "in"); - source = ReplaceVariableName(source, &sourceLength, "varying", "out"); - }else{ - source = ReplaceVariableName(source, &sourceLength, "varying", "in"); - } - - VerbosePrint(source, "Basic renames - PART 2"); - - // Draw buffers aren't dealt the same on OPEN GL|ES - if(!is_vertex && doesShaderVersionContainsES(source) ){ - //printf("REPLACING FRAG DATA"); - source = ReplaceGLFragData(source, &sourceLength); - //printf("REPLACING FRAG COLOR"); - source = ReplaceGLFragColor(source, &sourceLength); - - VerbosePrint(source, "GL_FRAG renames"); - } - - //printf("FUCKING UP PRECISION"); - source = ReplacePrecisionQualifiers(source, &sourceLength, is_vertex); - - source = ProcessSwitchCases(source, &sourceLength); - VerbosePrint(source, "Complex case statement replaced"); - - source = FixSimpleSwitchCases(source, &sourceLength); - VerbosePrint(source, "Simple case statement replaced"); - - source = WrapSwitchStatements(source, &sourceLength); - VerbosePrint(source, "Switch statement wrapped"); - - source = RemoveUniformProperty(source); - VerbosePrint(source, "Uniform property removed"); - - source = ForceIntegerLayoutOutput(source, &sourceLength); - VerbosePrint(source, "Layout output corrected back to integers"); - - source = WrapBitShiftOperators(source, &sourceLength); - VerbosePrint(source, "Bit shifts wrapped !"); - - source = WrapBitwiseOrAnd(source, &sourceLength); - VerbosePrint(source, "Inclusive Or wrapped"); - - source = SimplifyRedundantParentheses(source, &sourceLength); - VerbosePrint(source, "Simplified parentheses"); - - source = SimplifyRedundantIntTypecasts(source, &sourceLength); - VerbosePrint(source, "Non const typecast simplified"); - - source = SimplifyConstIntTypecasts(source, &sourceLength); - VerbosePrint(source, "Simplified const typecast typecast !"); - - source = FixReturnTypes(source, &sourceLength); - VerbosePrint(source, "Wrapped some function return statement"); - -#ifdef SHADERCONV_DEBUG - printf("New VGPU Shader conversion:\n%s\n", source); -#endif - - return source; -} - -static const char* switch_template = " switch (%n%[^)] { "; -static const char* case_template = " case %n%[^:] "; -static const char* declaration_template = " const float %s = %s ;"; - -#define VARIABLE_SIZE 1024 -#define MODE_SWITCH 0 -#define MODE_CASE 1 - -/** - * Check if the input string is a conformant variable name or not - * @returns 1 if yes, 0 if no - */ -unsigned char CheckVariableName(const char* name) { - if(isalpha(name[0]) || name[0] == '_') { - size_t cnt = 0; - while(1) { // You only crash once - cnt++; - if(name[cnt] == 0) return 1; - if(!isDigit(name[cnt]) && !isalpha(name[cnt]) && name[cnt] != '_') return 0; - } - } - return 0; -} - -/** - * Convert switches or cases to be usable with the current int to float conversion - * @param source The shader as a string - * @param sourceLength The shader allocated length - * @param mode Whether to scan and fix switches or cases - * @return The shader as a string, converted appropriately, maybe in a different memory location -*/ -char* FindAndCorrect(char* source, int* length, int mode) { - const char* template = mode == MODE_SWITCH ? switch_template : mode == MODE_CASE ? case_template : NULL; - char* scan_source = source; - char template_string[VARIABLE_SIZE]; - size_t string_offset; - size_t offset = 0; - unsigned char rewind = 0; - while(1) { - int scan_result = sscanf(scan_source, template, &string_offset, &template_string); - if(scan_result == 0) { - scan_source++; - continue; - }else if(scan_result == EOF) { - break; - } - offset = string_offset + (strstr(scan_source, mode == MODE_SWITCH ? "{" : mode == MODE_CASE ? ":" : 0) - scan_source); // find it by hand cause sscanf has trouble with two %n operators - string_offset += (scan_source - source); // convert it from relative to scan to relative to base - if(mode == MODE_SWITCH && !strstr(template_string, "int(") ) { // already cast to int, skip - size_t insert_end_offset = string_offset + strlen(template_string); - source = InplaceInsertByIndex(source, length, insert_end_offset, ")"); - source = InplaceInsertByIndex(source, length, string_offset, "int("); - rewind = 1; - } - if(mode == MODE_CASE) { - if(CheckVariableName(template_string)) { - char decltemplate_formatted[VARIABLE_SIZE]; - float declared_value = 99; - snprintf(decltemplate_formatted, VARIABLE_SIZE, declaration_template, template_string, "%f"); - printf("Scanning with template %s\n", decltemplate_formatted); - char* scanbase = source; - while(1) { - int result = sscanf(scanbase, decltemplate_formatted, &declared_value); - if(result == 0) { - scanbase++; - continue; - }else if(result == EOF) { - printf("Scanned the whole shader and didn't find declaration for %s with template \"%s\"\n", template_string, decltemplate_formatted); - abort(); - } - break; - } - char integer[VARIABLE_SIZE]; - snprintf(integer, VARIABLE_SIZE, "%i", (int)declared_value); - size_t replace_end_offset = string_offset + strlen(template_string)-1; - source = InplaceReplaceByIndex(source, length, string_offset, replace_end_offset, integer); - rewind = 1; - } - } - if(rewind) { - scan_source = source; // since inplace replacement operations are destructive, the scan will be rewound after doing them - rewind = 0; - }else scan_source += offset; - } - return source; -} - -/** - * Convert switches and cases in the shader to be usable with the current int to float coercion - * @param source The shader as a string - * @param sourceLength The shader allocated length - * @return The shader as a string, converted appropriately, maybe in a different memory location -*/ - -char* ProcessSwitchCases(char* source, int* length) { - //source = FindAndCorrect(source, length, MODE_SWITCH); - source = FindAndCorrect(source, length, MODE_CASE); - return source; -} - -/** - * Wraps the content of a switch statement into an integer - * @param source The shader as a string - * @param sourceLength The allocated length of the shader - * @return The shader as a string, maybe in a different memory location - */ -char * WrapSwitchStatements(char *source, int *sourceLength){ - unsigned long offset = 0; - while (1){ - // Find the switch statement - unsigned long startIndex = strstrPos(source + offset, "switch"); - if(startIndex == 0) break; - - // Go to the end of the switch statement - startIndex += 5; - - // Get to the start parentheses, then to the end one - unsigned long startParentheses = GetNextTokenPosition(source + offset, startIndex, '(', "\n\t\r "); - if(startParentheses == startIndex) break; - - // Get to the end token - unsigned long endParentheses = GetClosingTokenPosition(source + offset, startParentheses); - if(endParentheses == startParentheses) break; - - // Insert the token replacements - source = InplaceInsertByIndex(source, sourceLength, offset + endParentheses, ")"); - source = InplaceInsertByIndex(source, sourceLength, offset + startParentheses + 1, "int("); - - offset += endParentheses; - } - - return source; -} - -/** - * Fix case : to case : - * @param source The shader as a string - * @param sourceLength The length of the allocated shader - * @return The shader as a string, maybe in a different memory location - */ -char * FixSimpleSwitchCases(char *source, int *sourceLength){ - unsigned long offset = 0; - while (1){ - // First find the case statement - unsigned long startIndex = strstrPos(source + offset, "case "); - if(startIndex == 0) break; - - // Reach the floating dot, fail otherwise - unsigned long floatingIndex = GetNextTokenPosition(source + offset, startIndex, '.', "\\:()/+-"); - if(floatingIndex == startIndex) { - offset += startIndex + 5; // 5 just to get ahead of the case statement - continue; - } - - source = InplaceReplaceByIndex(source, sourceLength, offset + floatingIndex, offset + floatingIndex + 1, ""); - - offset += startIndex + 5; // 5 just to get ahead of the case statement - } - - return source; -} - -/** - * Turn const arrays and its accesses into a function and function calls - * @param source The shader as a string - * @param sourceLength The shader allocated length - * @return The shader as a string, maybe in a different memory location - */ -char * BackportConstArrays(char *source, int * sourceLength){ - unsigned long startPoint = strstrPos(source, "const"); - if(startPoint == 0){ - return source; - } - int constStart, constStop; - GetNextWord(source, startPoint, &constStart, &constStop); // Catch the "const" - - int typeStart, typeStop; - GetNextWord(source, constStop, &typeStart, &typeStop); // Catch the type, without [] - - int variableNameStart, variableNameStop; - GetNextWord(source, typeStop, &variableNameStart, &variableNameStop); // Catch the var name - char * variableName = ExtractString(source, variableNameStart, variableNameStop); - - //Now, verify the data type is actually an array - char * tokenStart = strstr(source + typeStop, "["); - if( tokenStart != NULL && (tokenStart - source) < variableNameStart){ - // We've found an array. So we need to get to the starting parenthesis and isolate each member - int startArray = GetNextTokenPosition(source, variableNameStop, '(', ""); - int endArray = GetClosingTokenPosition(source, startArray); - - // First pass, to count the amount of entries in the array - int arrayEntryCount = -1; - int currentPoint = startArray; - while (currentPoint < endArray){ - ++arrayEntryCount; - currentPoint = GetClosingTokenPositionTokenOverride(source, currentPoint, ','); - } - if(currentPoint == endArray){ - ++arrayEntryCount; - } - - // Now we know how many entries we have, we can copy data - int entryStart = startArray + 1; - int entryEnd; - for(int j=0; j= 300 && version <= 320; -} - -char * WrapIvecFunctions(char * source, int * sourceLength){ - source = WrapFunction(source, sourceLength, "texelFetch", "vgpu_texelFetch", "\nvec4 vgpu_texelFetch(sampler2D sampler, vec2 P, float lod){return texelFetch(sampler, ivec2(P), int(lod));}\n" - "vec4 vgpu_texelFetch(sampler3D sampler, vec3 P, float lod){return texelFetch(sampler, ivec3(P), int(lod));}\n" - "vec4 vgpu_texelFetch(sampler2DArray sampler, vec3 P, float lod){return texelFetch(sampler, ivec3(P), int(lod));}\n" - "#ifdef GL_EXT_texture_buffer\n" - "vec4 vgpu_texelFetch(samplerBuffer sampler, float P){return texelFetch(sampler, int(P));}\n" - "#endif\n" - "#ifdef GL_OES_texture_storage_multisample_2d_array\n" - "vec4 vgpu_texelFetch(sampler2DMS sampler, vec2 P, float _sample){return texelFetch(sampler, ivec2(P), int(_sample));}\n" - "vec4 vgpu_texelFetch(sampler2DMSArray sampler, vec3 P, float _sample){return texelFetch(sampler, ivec3(P), int(_sample));}\n" - "#endif\n"); - - source = WrapFunction(source, sourceLength, "textureSize", "vgpu_textureSize", "\nvec2 vgpu_textureSize(sampler2D sampler, float lod){return vec2(textureSize(sampler, int(lod)));}\n" - "vec3 vgpu_textureSize(sampler3D sampler, float lod){return vec3(textureSize(sampler, int(lod)));}\n" - "vec2 vgpu_textureSize(samplerCube sampler, float lod){return vec2(textureSize(sampler, int(lod)));}\n" - "vec2 vgpu_textureSize(sampler2DShadow sampler, float lod){return vec2(textureSize(sampler, int(lod)));}\n" - "vec2 vgpu_textureSize(samplerCubeShadow sampler, float lod){return vec2(textureSize(sampler, int(lod)));}\n" - "#ifdef GL_EXT_texture_cube_map_array\n" - "vec3 vgpu_textureSize(samplerCubeArray sampler, float lod){return vec3(textureSize(sampler, int(lod)));}\n" - "vec3 vgpu_textureSize(samplerCubeArrayShadow sampler, float lod){return vec3(textureSize(sampler, int(lod)));}\n" - "#endif\n" - "vec3 vgpu_textureSize(sampler2DArray sampler, float lod){return vec3(textureSize(sampler, int(lod)));}\n" - "vec3 vgpu_textureSize(sampler2DArrayShadow sampler, float lod){return vec3(textureSize(sampler, int(lod)));}\n" - "#ifdef GL_EXT_texture_buffer\n" - "float vgpu_textureSize(samplerBuffer sampler){return float(textureSize(sampler));}\n" - "#endif\n" - "#ifdef GL_OES_texture_storage_multisample_2d_array\n" - "vec2 vgpu_textureSize(sampler2DMS sampler){return vec2(textureSize(sampler));}\n" - "vec3 vgpu_textureSize(sampler2DMSArray sampler){return vec3(textureSize(sampler));}\n" - "#endif\n"); - - source = WrapFunction(source, sourceLength, "textureOffset", "vgpu_textureOffset", "\nvec4 vgpu_textureOffset(sampler2D tex, vec2 P, vec2 offset, float bias){ivec2 Size = textureSize(tex, 0);return texture(tex, P+offset/vec2(float(Size.x), float(Size.y)), bias);}\n" - "vec4 vgpu_textureOffset(sampler2D tex, vec2 P, vec2 offset){return vgpu_textureOffset(tex, P, offset, 0.0);}\n" - "vec4 vgpu_textureOffset(sampler3D tex, vec3 P, vec3 offset, float bias){ivec3 Size = textureSize(tex, 0);return texture(tex, P+offset/vec3(float(Size.x), float(Size.y), float(Size.z)), bias);}\n" - "vec4 vgpu_textureOffset(sampler3D tex, vec3 P, vec3 offset){return vgpu_textureOffset(tex, P, offset, 0.0);}\n" - "float vgpu_textureOffset(sampler2DShadow tex, vec3 P, vec2 offset, float bias){ivec2 Size = textureSize(tex, 0);return texture(tex, P+vec3(offset.x, offset.y, 0)/vec3(float(Size.x), float(Size.y), 1.0), bias);}\n" - "float vgpu_textureOffset(sampler2DShadow tex, vec3 P, vec2 offset){return vgpu_textureOffset(tex, P, offset, 0.0);}\n" - "vec4 vgpu_textureOffset(sampler2DArray tex, vec3 P, vec2 offset, float bias){ivec3 Size = textureSize(tex, 0);return texture(tex, P+vec3(offset.x, offset.y, 0)/vec3(float(Size.x), float(Size.y), float(Size.z)), bias);}\n" - "vec4 vgpu_textureOffset(sampler2DArray tex, vec3 P, vec2 offset){return vgpu_textureOffset(tex, P, offset, 0.0);}\n"); - - source = WrapFunction(source, sourceLength, "shadow2D", "vgpu_shadow2D", "\nvec4 vgpu_shadow2D(sampler2DShadow shadow, vec3 coord){return vec4(texture(shadow, coord), 0.0, 0.0, 0.0);}\n" - "vec4 vgpu_shadow2D(sampler2DShadow shadow, vec3 coord, float bias){return vec4(texture(shadow, coord, bias), 0.0, 0.0, 0.0);}\n"); - return source; -} - -/** - * Replace a function and its calls by a wrapper version, only if needed - * @param source The shader code as a string - * @param functionName The function to be replaced - * @param wrapperFunctionName The replacing function name - * @param function The wrapper function itself - * @return The shader as a string, maybe in a different memory location - */ -char * WrapFunction(char * source, int * sourceLength, char * functionName, char * wrapperFunctionName, char * wrapperFunction){ - int originalSize = strlen(source); - source = ReplaceFunctionName(source, sourceLength, functionName, wrapperFunctionName); - // If some calls got replaced, add the wrapper - if(originalSize != strlen(source)){ - int insertPoint = FindPositionAfterDirectives(source); - source = InplaceInsertByIndex(source, sourceLength, insertPoint + 1, wrapperFunction); - } - - return source; -} - -/** - * Replace the % operator with a mathematical equivalent (x - y * floor(x/y)) - * @param source The shader as a string - * @return The shader as a string, maybe in a different memory location - */ -char * ReplaceModOperator(char * source, int * sourceLength){ - char * modelString = " mod(x, y) "; - int startIndex, endIndex = 0; - int * startPtr = &startIndex, *endPtr = &endIndex; - - for(int i=0;i<*sourceLength; ++i){ - if(source[i] != '%') continue; - // A mod operator is found ! - char * leftOperand = GetOperandFromOperator(source, i, 0, startPtr); - char * rightOperand = GetOperandFromOperator(source, i, 1, endPtr); - - // Generate a model string to be inserted - char * replacementString = malloc(strlen(modelString) + 1); - strcpy(replacementString, modelString); - int replacementSize = strlen(replacementString); - replacementString = gl4es_inplace_replace(replacementString, &replacementSize, "x", leftOperand); - replacementString = gl4es_inplace_replace(replacementString, &replacementSize, "y", rightOperand); - - // Insert the new string - source = InplaceReplaceByIndex(source, sourceLength, startIndex, endIndex, replacementString); - - // Free all the temporary strings - free(leftOperand); - free(rightOperand); - free(replacementString); - } - - return source; -} - -/** - * Wrap << and >> operands with int() casts (caused by the float coercion) - * @param source The shader as a string - * @param sourceLength The allocated shader length - * @return The shader as a string, maybe in a different memory location - */ -char * WrapBitShiftOperators(char * source, int *sourceLength) { - int startIndex, endIndex = 0; - int * startPtr = &startIndex, *endPtr = &endIndex; - - for(int i=0;i<*sourceLength-2; ++i){ - if((source[i] == '<' && source[i+1] == '<') || (source[i] == '>' && source[i+1] == '>')){ - // A bit shift operator is found - char * leftOperand = GetOperandFromOperatorValueOverride(source, i, 0, startPtr, GetOperatorValue('<', '<')); - char * rightOperand = GetOperandFromOperatorValueOverride(source, i+1, 1, endPtr, GetOperatorValue('<', '<')); - - // Remember to insert from end to start in order to not throw away the result of the operation - source = InplaceInsertByIndex(source, sourceLength, endIndex + 1, ")"); - source = InplaceInsertByIndex(source, sourceLength, i+2, "int("); - - source = InplaceInsertByIndex(source, sourceLength, i-1, ")"); - source = InplaceInsertByIndex(source, sourceLength, startIndex, "int("); - - i = endIndex; - } - } - - return source; -} - -char * WrapBitwiseOrAnd(char * source, int *sourceLength) { - int startIndex, endIndex = 0; - int * startPtr = &startIndex, *endPtr = &endIndex; - - for(int i=0;i<*sourceLength-2; ++i){ - if((source[i] == '|' && !(source[i+1] == '|' || source[i-1] == '|')) - || (source[i] == '&' && !(source[i+1] == '&' || source[i-1] == '&') - || (source[i] == '^' && !(source[i+1] == '^' || source[i-1] == '^'))) ){ - // An inclusive operator is found - char * leftOperand = GetOperandFromOperatorValueOverride(source, i, 0, startPtr, GetOperatorValue(source[i], ' ')); - char * rightOperand = GetOperandFromOperatorValueOverride(source, i+1, 1, endPtr, GetOperatorValue(source[i], ' ')); - - // Insert from end to start in order to not throw away the result of the index marking operation - source = InplaceInsertByIndex(source, sourceLength, endIndex + 1, ")"); - source = InplaceInsertByIndex(source, sourceLength, i+2, "int("); - - source = InplaceInsertByIndex(source, sourceLength, i-1, ")"); - source = InplaceInsertByIndex(source, sourceLength, startIndex, "int("); - - i = endIndex; - } - } - - return source; -} - -/** - * Change all (u)ints to floats. - * This is a hack to avoid dealing with implicit conversions on common operators - * @param source The shader as a string - * @return The shader as a string, maybe in a new memory location - * @see ForceIntegerArrayAccess - */ -char * CoerceIntToFloat(char * source, int * sourceLength){ - // Let's go the "freestyle way" - - // Step 1 is to translate keywords - // Attempt and loop unrolling -> worked well, time to fix my shit I guess - source = ReplaceVariableName(source, sourceLength, "int", "float"); - source = WrapFunction(source, sourceLength, "int", "float", "\n "); - source = ReplaceVariableName(source, sourceLength, "uint", "float"); - source = WrapFunction(source, sourceLength, "uint", "float", "\n "); - - // TODO Yes I could just do the same as above but I'm lazy at times - source = gl4es_inplace_replace_simple(source, sourceLength, "ivec", "vec"); - source = gl4es_inplace_replace_simple(source, sourceLength, "uvec", "vec"); - - source = gl4es_inplace_replace_simple(source, sourceLength, "isampleBuffer", "sampleBuffer"); - source = gl4es_inplace_replace_simple(source, sourceLength, "usampleBuffer", "sampleBuffer"); - - source = gl4es_inplace_replace_simple(source, sourceLength, "isampler", "sampler"); - source = gl4es_inplace_replace_simple(source, sourceLength, "usampler", "sampler"); - - - // Step 3 is slower. - // We need to parse hardcoded values like 1 and turn it into 1.(0) - for(int i=0; i<*sourceLength; ++i){ - - // Avoid version/line directives - if(source[i] == '#' && (source[i + 1] == 'v' || source[i + 1] == 'l') ){ - // Look for the next line - while (source[i] != '\n' && source[i] != '\0'){ - i++; - } - } - - if(!isDigit(source[i])){ continue; } - // So there is a few situations that we have to distinguish: - // functionName1 ( ----- meaning there is SOMETHING on its left side that is related to the number - // function(1, ----- there is something, and it ISN'T related to the number - // float test=3; ----- something on both sides, not related to the number. - // float test=X.2 ----- There is a dot, so it is part of a float already - // float test = 0.00000 ----- I have to backtrack to find the dot - // float test = 4u ----- I delete the u, then branch back to normal int handling - - if(source[i-1] == '.' || source[i+1] == '.') continue;// Number part of a float - if(isValidFunctionName(source[i - 1])) continue; // Char attached to something related - if(isDigit(source[i+1])) continue; // End of number not reached - if(isDigit(source[i-1])){ - // Backtrack to check if the number is floating point - int shouldBeCoerced = 0; - for(int j=1; 1; ++j){ - if(isDigit(source[i-j])) continue; - if(isValidFunctionName(source[i-j])) break; // Function or variable name, don't coerce - if(source[i-j] == '.' || ((source[i-j] == '+' || source[i-j] == '-') && (source[i-j-1] == 'e'|| source[i-j-1] == 'E') )) break; // No coercion, float or scientific notation already - // Nothing found, should be coerced then - shouldBeCoerced = 1; - break; - } - - if(!shouldBeCoerced) continue; - } - - // Check if we have the scientific notation - if(((source[i-1] == '+' || source[i-1] == '-') && (source[i-2] == 'e'|| source[i-2] == 'E'))) continue; - - - // Remove the potential uint literal marking - if(source[i+1] == 'u') source[i+1] = ' '; - - // Now we know there is nothing related to the digit, turn it into a float - source = InplaceInsertByIndex(source, sourceLength, i+1, ".0"); - } - - // TODO Hacks for special built in values and typecasts ? - source = gl4es_inplace_replace_simple(source, sourceLength, "gl_VertexID", "float(gl_VertexID)"); - source = gl4es_inplace_replace_simple(source, sourceLength, "gl_InstanceID", "float(gl_InstanceID)"); - - return source; -} - -/** - * Wrap functions return statement if they have an int typecast - * @param source The shader as a string - * @param sourceLength The length of the shader - */ -char * FixReturnTypes(char * source, int * sourceLength) { - unsigned long offset = 0; - while (1){ - // Find a return statement - unsigned long startingIndex = strstrPos(source + offset, "return "); - if(startingIndex == 0) break; - - // Verify we have an int typecast - unsigned long typecastIndex = GetNextTokenPosition(source, offset + startingIndex + strlen("return "), '(', " int"); - if(typecastIndex == offset + startingIndex + strlen("return ")) { - offset += startingIndex + strlen("return "); - continue; - } - - // We have a typecast, get the end on instruction and wrap it - unsigned long endInstructionIndex = GetNextTokenPosition(source, typecastIndex, ';', ""); - source = InplaceInsertByIndex(source, sourceLength, endInstructionIndex, ")"); - source = InplaceInsertByIndex(source, sourceLength, startingIndex + offset + strlen("return "), "float("); - - offset = endInstructionIndex; - } - return source; -} - -/** Force all array accesses to use integers by adding an explicit typecast - * @param source The shader as a string - * @return The shader as a string, maybe at a new memory location */ -char * ForceIntegerArrayAccess(char* source, int * sourceLength){ - char * markerStart = "$"; - char * markerEnd = "`"; - - // Step 1, we need to mark all [] that are empty and must not be changed - int leftCharIndex = 0; - for(int i=0; i< *sourceLength; ++i){ - if(source[i] == '['){ - leftCharIndex = i; - continue; - } - // If a start has been found - if(leftCharIndex){ - if(source[i] == ' ' || source[i] == '\n'){ - continue; - } - // We find the other side and mark both ends - if(source[i] == ']'){ - source[leftCharIndex] = *markerStart; - source[i] = *markerEnd; - } - } - //Something else is there, abort the marking phase for this one - leftCharIndex = 0; - } - - // Step 2, replace the array accesses with a forced typecast version - source = gl4es_inplace_replace_simple(source, sourceLength, "]", ")]"); - source = gl4es_inplace_replace_simple(source, sourceLength, "[", "[int("); - - // Step 3, restore all marked empty [] - source = gl4es_inplace_replace_simple(source, sourceLength, markerStart, "["); - source = gl4es_inplace_replace_simple(source, sourceLength, markerEnd, "]"); - - return source; -} - - -/** - * Turn layout (location=) into layout (location=) - * @param source The shader as a string - * @param sourceLength The shader allocated length - * @return The shader as a string, maybe in a different memory location - */ -char * ForceIntegerLayoutOutput(char *source, int *sourceLength) { - unsigned long offset = 0; - while (1){ - unsigned long startIndex = strstrPos(source + offset, "location"); - if(startIndex == 0) break; - - // Find the assignment - unsigned long assignmentIndex = GetNextTokenPosition(source + offset, startIndex, '=', ""); - - // Find the dot for floating point - unsigned long dotIndex = GetNextTokenPosition(source + offset, assignmentIndex, '.', "\\)"); - if(dotIndex == assignmentIndex) { - offset += assignmentIndex; - continue; - } - - unsigned long endIndex = GetNextTokenPosition(source + offset, dotIndex, ')',""); - source = InplaceReplaceByIndex(source, sourceLength, dotIndex + offset, endIndex + offset -1, ""); - - // Add offset for next iteration - offset += endIndex; - } - - return source; -} - -/** Small helper to help evaluate whether to continue or not I guess - * Values over 9900 are not for real operators, more like stop indicators - * @param operator The char corresponding to the current operator position - * @param operator2 The char corresponding to the current operator position + 1 tp either the left or right. Used to evaluate 2 char operators - */ -int GetOperatorValue(char operator, char operator2){ - - if(operator == ',' || operator == ';') return 9998; - - - // Operators will appear reversed depending on the direction of the shader parser - if(operator == '|' && operator2 == '|') return 14; - if(operator == '^' && operator2 == '^') return 13; - if(operator == '&' && operator2 == '&') return 12; - if(operator == '|') return 11; - if(operator == '^') return 10; - if(operator == '&') return 9; - if((operator == '=' && operator2 == '=') - || (operator == '!' && operator2 == '=') - || (operator == '=' && operator2 == '!')) return 8; - - if(operator == '=') return 9997; // Simple assignment is last - - // Note that 6 is evaluated before 7 here - if((operator == '<' && operator2 == '<') || (operator == '>' && operator2 == '>')) return 6; - if(operator == '<' || operator == '>') return 7; // TODO handle <=/>= ? - if(operator == '+' || operator == '-') return ADDITIVE_OPERATOR_VALUE; - if(operator == '*' || operator == '/' || operator == '%') return 4; - - return NO_OPERATOR_VALUE; // Meaning no value; -} - - - -/** Get the left or right operand, given the last index of the operator - * It bases its ability to get operands by evaluating the priority of operators. - * @param source The shader as a string - * @param operatorIndex The index the operator is found - * @param rightOperand Whether we get the right or left operator - * @param limit The left or right index of the operand - * @return newly allocated string with the operand - */ -char* GetOperandFromOperator(char* source, int operatorIndex, int rightOperand, int * limit){ - return GetOperandFromOperatorValueOverride( - source, - operatorIndex, - rightOperand, - limit, - GetOperatorValue(source[operatorIndex], source[rightOperand ? operatorIndex+1 : operatorIndex-1])); -} - -/** test whether a keyword in present at the left side if the index */ -int TestKeyword(const char *source, unsigned long index, const char* keyword){ - unsigned keywordLength = strlen(keyword); - for(int i=0; i < keywordLength; ++i){ - if(source[index - i] != keyword[keywordLength - 1 - i]){ - return 0; - } - } - return 1; -} - -char* GetOperandFromOperatorValueOverride(char* source, int operatorIndex, int rightOperand, int * limit, int overrideTokenValue){ - int parserState = 0; - int parserDirection = rightOperand ? 1 : -1; - int operandStartIndex = 0, operandEndIndex = 0; - int parenthesesLeft = 0, hasFoundParentheses = 0; - int operatorValue = overrideTokenValue; - int lastOperator = 0; // Used to determine priority for unary operators - - char parenthesesStart = rightOperand ? '(' : ')'; - char parenthesesEnd = rightOperand ? ')' : '('; - char bracketStart = rightOperand ? '[' : ']'; - char bracketEnd = rightOperand ? ']' : '['; - int stringIndex = operatorIndex; - - // Get to the operand - while (parserState == 0){ - stringIndex += parserDirection; - if(source[stringIndex] != ' '){ - parserState = 1; - // Place the mark - if(rightOperand){ - operandStartIndex = stringIndex; - }else{ - operandEndIndex = stringIndex; - } - - // Special case for unary operator when parsing to the right - if(GetOperatorValue(source[stringIndex], source[stringIndex+parserDirection]) == ADDITIVE_OPERATOR_VALUE ){ // 5 is +- operators - stringIndex += parserDirection; - } - } - } - - // Get to the other side of the operand, the twist is here. - while (parenthesesLeft > 0 || parserState == 1){ - - // Look for parentheses or border of case statements - if(source[stringIndex] == parenthesesStart || source[stringIndex] == bracketStart){ - - hasFoundParentheses = 1; - parenthesesLeft += 1; - stringIndex += parserDirection; - continue; - } - - if(source[stringIndex] == parenthesesEnd || source[stringIndex] == bracketEnd || source[stringIndex] == ':' || - TestKeyword(source, stringIndex, "case ") || TestKeyword(source, stringIndex, "return ")){ - hasFoundParentheses = 1; - parenthesesLeft -= 1; - - // Likely to happen in a function call - if(parenthesesLeft < 0){ - parserState = 3; - if(rightOperand){ - operandEndIndex = stringIndex - 1; - }else{ - operandStartIndex = stringIndex + 1; - } - continue; - } - stringIndex += parserDirection; - continue; - } - - // Small optimisation - if(parenthesesLeft > 0){ - stringIndex += parserDirection; - continue; - } - - // So by now the following assumptions are made - // 1 - We aren't between parentheses - // 2 - No implicit multiplications are present - // 3 - No fuckery with operators like "test = +-+-+-+-+-+-+-+-3;" although I attempt to support them - - // Higher value operators have less priority - int currentValue = GetOperatorValue(source[stringIndex], source[stringIndex + parserDirection]); - - - // The condition is different due to the evaluation order which is left to right, aside from the unary operators - if((rightOperand ? currentValue >= operatorValue: currentValue > operatorValue)){ - if(currentValue == NO_OPERATOR_VALUE){ - if(source[stringIndex] == ' '){ - stringIndex += parserDirection; - continue; - } - - // Found an operand, so reset the operator eval for unary - if(rightOperand) lastOperator = NO_OPERATOR_VALUE; - - // maybe it is the start of a function ? - if(hasFoundParentheses){ - parserState = 2; - continue; - } - // If no full () set is found, assume we didn't fully travel the operand - stringIndex += parserDirection; - continue; - } - - // Special case when parsing unary operator to the right - if(rightOperand && operatorValue == ADDITIVE_OPERATOR_VALUE && lastOperator < currentValue){ - stringIndex += parserDirection; - continue; - } - - // Stop, we found an operator of same worth. - parserState = 3; - if(rightOperand){ - operandEndIndex = stringIndex - 1; - }else{ - operandStartIndex = stringIndex + 1; - } - } - - // Special case for unary operators from the right - if(rightOperand && operatorValue == ADDITIVE_OPERATOR_VALUE) { // 5 is + - operators - lastOperator = currentValue; - } // Special case for unary operators from the left - if(!rightOperand && operatorValue < ADDITIVE_OPERATOR_VALUE && currentValue == ADDITIVE_OPERATOR_VALUE){ - lastOperator = NO_OPERATOR_VALUE; - for(int j=1; 1; ++j){ - int subCurrentValue = GetOperatorValue(source[stringIndex - j], source[stringIndex - j + parserDirection]); - if(subCurrentValue != NO_OPERATOR_VALUE){ - lastOperator = subCurrentValue; - continue; - } - - // No operator value, can be almost anything - if(source[stringIndex - j] == ' ') continue; - // Else we found something. Did we find a high priority operator ? - if(lastOperator <= operatorValue){ // If so, we allow continuing and going out of the loop - stringIndex -= j; - parserState = 1; - break; - } - // No other operator found - operandStartIndex = stringIndex; - parserState = 3; - break; - } - } - stringIndex += parserDirection; - } - - // Status when we get the name of a function and nothing else. - while (parserState == 2){ - if(source[stringIndex] != ' '){ - stringIndex += parserDirection; - continue; - } - if(rightOperand){ - operandEndIndex = stringIndex - 1; - }else{ - operandStartIndex = stringIndex + 1; - } - parserState = 3; - } - - // At this point, we know both the start and end point of our operand, let's copy it - char * operand = malloc(operandEndIndex - operandStartIndex + 2); - memcpy(operand, source+operandStartIndex, operandEndIndex - operandStartIndex + 1); - // Make sure the string is null terminated - operand[operandEndIndex - operandStartIndex + 1] = '\0'; - - // Send back the limitIndex - *limit = rightOperand ? operandEndIndex : operandStartIndex; - - return operand; -} - -/** - * Replace any gl_FragData[n] reference by creating an out variable with the manual layout binding - * @param source The shader source as a string - * @return The shader as a string, maybe at a different memory location - */ -char * ReplaceGLFragData(char * source, int * sourceLength){ - - // 10 is arbitrary, but I don't expect the shader to use so many - // TODO I guess the array could be accessed with one or more spaces :think: - // TODO wait they can access via a variable ! - for (int i = 0; i < 10; ++i) { - // Check for 2 forms on the glFragData and take the first one found - char needle[30]; - sprintf(needle, "gl_FragData[%i]", i); - - // Skip if the draw buffer isn't used at this index - char * useFragData = strstr(source, &needle[0]); - if(useFragData == NULL){ - sprintf(needle, "gl_FragData[int(%i.0)]", i); - useFragData = strstr(source, &needle[0]); - if(useFragData == NULL) continue; - } - - // Construct replacement string - char replacement[20]; - char replacementLine[70]; - sprintf(replacement, "vgpu_FragData%i", i); - sprintf(replacementLine, "\nlayout(location = %i) out mediump vec4 %s;\n", i, replacement); - int insertPoint = FindPositionAfterDirectives(source); - - // And place them into the shader - source = gl4es_inplace_replace_simple(source, sourceLength, &needle[0], &replacement[0]); - source = InplaceInsertByIndex(source, sourceLength, insertPoint + 1, &replacementLine[0]); - } - return source; -} - -/** - * Replace the gl_FragColor - * @param source The shader as a string - * @return The shader a a string, maybe in a different memory location - */ -char * ReplaceGLFragColor(char * source, int * sourceLength){ - if(strstr(source, "gl_FragColor")){ - source = gl4es_inplace_replace_simple(source, sourceLength, "gl_FragColor", "vgpu_FragColor"); - int insertPoint = FindPositionAfterDirectives(source); - source = InplaceInsertByIndex(source, sourceLength, insertPoint + 1, "out mediump vec4 vgpu_FragColor;\n"); - } - return source; -} - -/** - * Remove all extensions right now by replacing them with spaces - * @param source The shader as a string - * @return The shader as a string, maybe in a different memory location - */ -char * RemoveUnsupportedExtensions(char * source){ - //TODO remove only specific extensions ? - for(char * extensionPtr = strstr(source, "#extension "); extensionPtr; extensionPtr = strstr(source, "#extension ")){ - int i = 0; - while(extensionPtr[i] != '\n'){ - extensionPtr[i] = ' '; - ++i; - } - } - return source; -} - -/** - * Replace the variable name in a shader, mostly used to avoid keyword clashing - * @param source The shader as a string - * @param initialName The initial name for the variable - * @param newName The new name for the variable - * @return The shader as a string, maybe in a different memory location - */ -char * ReplaceVariableName(char * source, int * sourceLength, char * initialName, char* newName) { - - char * toReplace = malloc(strlen(initialName) + 3); - char * replacement = malloc(strlen(newName) + 3); - char * charBefore = "{}([];+-*/~!%<>,&| \n\t"; - char * charAfter = ")[];+-*/%<>;,|&. \n\t"; - - // Prepare the fixed part of the strings - strcpy(toReplace+1, initialName); - toReplace[strlen(initialName)+2] = '\0'; - - strcpy(replacement+1, newName); - replacement[strlen(newName)+2] = '\0'; - - for (int i = 0; i < strlen(charBefore); ++i) { - for (int j = 0; j < strlen(charAfter); ++j) { - // Prepare the string to replace - toReplace[0] = charBefore[i]; - toReplace[strlen(initialName)+1] = charAfter[j]; - - // Prepare the replacement string - replacement[0] = charBefore[i]; - replacement[strlen(newName)+1] = charAfter[j]; - - source = gl4es_inplace_replace_simple(source, sourceLength, toReplace, replacement); - } - } - - free(toReplace); - free(replacement); - - return source; -} - -/** - * Look if the variable name is present - * @return 1 if the variable is present, 0 otherwise - */ -int IsVariableNamePresent(const char * source, const int * sourceLength, const char * variableName) { - char * toReplace = malloc(strlen(variableName) + 3); - char * charBefore = "{}([];+-*/~!%<>,&| \n\t"; - char * charAfter = ")[];+-*/%<>;,|&. \n\t"; - - unsigned variableLength = strlen(variableName); - - // Prepare the fixed part of the strings - strcpy(toReplace + 1, variableName); - toReplace[variableLength + 2] = '\0'; - - for (int i = 0; i < strlen(charBefore); ++i) { - for (int j = 0; j < strlen(charAfter); ++j) { - toReplace[0] = charBefore[i]; - toReplace[variableLength+1] = charAfter[j]; - - // Look if the combination exists - if (strstr(source, toReplace) != NULL) { - return 1; - } - } - } - - free(toReplace); - - return 0; -} - -/** - * Replace a function definition and calls to the function to another name - * @param source The shader as a string - * @param sourceLength The shader length - * @param initialName The name be to changed - * @param finalName The name to use instead - * @return The shader as a string, maybe in a different memory location - */ -char * ReplaceFunctionName(char * source, int * sourceLength, char * initialName, char * finalName){ - for(unsigned long currentPosition = 0; 1; currentPosition += strlen(initialName)){ - unsigned long newPosition = strstrPos(source + currentPosition, initialName); - if(newPosition == 0) // No more calls - break; - - // Check if that is indeed a function call on the right side - if (source[GetNextTokenPosition(source, currentPosition + newPosition + strlen(initialName), '(', " \n\t")] != '('){ - currentPosition += newPosition; - continue; // Skip to the next potential call - } - - // Check the naming on the left side - if (isValidFunctionName(source[currentPosition + newPosition - 1])){ - currentPosition += newPosition; - continue; // Skip to the next potential call - } - - // This is a valid function call/definition, replace it - source = InplaceReplaceByIndex(source, sourceLength, currentPosition + newPosition, currentPosition + newPosition + strlen(initialName) - 1, finalName); - currentPosition += newPosition; - } - return source; -} - -/** - * Remove all "uniform" keywords from uniform variables with a default initializer. - * The default "uniform" initializer is not part of the GLSL ES specification. - * @param source The shader as a string - * @param sourceLength The allocated length of the shader - * @return The shader as a string, maybe in a different memory position. Probably not here though. - */ -char * RemoveUniformProperty(char * source){ - unsigned long currentPosition = 0; - while(1){ - unsigned long newPosition = strstrPos(source + currentPosition, "uniform "); - if(newPosition == 0) // No more uniform vars - break; - - // Now, get to the end of declaration/initialization - int endPosition = GetNextTokenPosition(source + currentPosition + newPosition, 0, ';', "\\="); - if (endPosition == 0) { - // It tripped at the =, meaning there is an init phase, remove the uniform tag - for(int i = 0; i<8; ++i){ - source[currentPosition + newPosition + i] = ' '; - } - } - currentPosition += newPosition + strlen("uniform"); - } - - return source; -} - -/** Remove 'const ' storage qualifier from variables inside {..} blocks - * @param source The pointer to the start of the shader */ -char * RemoveConstInsideBlocks(char* source, int * sourceLength){ - int insideBlock = 0; - char * keyword = "const \0"; - int keywordLength = strlen(keyword); - - - for(int i=0; i< *sourceLength+1; ++i){ - // Step 1, look for a block - if(source[i] == '{'){ - insideBlock += 1; - continue; - } - if(!insideBlock) continue; - - // A block has been found, look for the keyword - if(source[i] == keyword[0]){ - int keywordMatch = 1; - int j = 1; - while (j < keywordLength){ - if (source[i+j] != keyword[j]){ - keywordMatch = 0; - break; - } - j +=1; - } - // A match is found, remove it - if(keywordMatch){ - source = InplaceReplaceByIndex(source, sourceLength, i, i+j - 1, " "); - continue; - } - } - - // Look for an exit - if(source[i] == '}'){ - insideBlock -= 1; - continue; - } - } - return source; -} - -/** Find the first point which is right after most shader directives - * @param source The shader as a string - * @return The index position after the #version line, start of the shader if not found - */ -int FindPositionAfterDirectives(char * source){ - const char * position = strstr(source, "#version"); - if (position == NULL) return 0; - for(int i=7; 1; ++i){ - if(position[i] == '\n'){ - if(position[i+1] == '#') continue; // a directive is present right after, skip - return i; - } - } -} - -int FindPositionAfterVersion(const char * source){ - const char * position = strstr(source, "#version"); - if (position == NULL) return 0; - for(int i=7; 1; ++i){ - if(position[i] == '\n'){ - return i; - } - } -} - -/** - * Replace and inserts precision qualifiers as necessary, see LIBGL_VGPU_PRECISION - * @param source The shader as a string - * @param sourceLength The length of the string - * @return The shader as a string, maybe in a different memory location - */ -char * ReplacePrecisionQualifiers(char * source, int * sourceLength, int isVertex){ - - if(!doesShaderVersionContainsES(source)){ -#ifdef SHADERCONV_DEBUG - printf("\nSKIPPING the replacement qualifiers step\n"); -#endif - return source; - } - - // Step 1 is to remove any "precision" qualifiers - for(unsigned long currentPosition=strstrPos(source, "precision "); currentPosition>0;currentPosition=strstrPos(source, "precision ")){ - // Once a qualifier is found, get to the end of the instruction and replace - int endPosition = GetNextTokenPosition(source, currentPosition, ';', ""); - source = InplaceReplaceByIndex(source, sourceLength, currentPosition, endPosition,""); - } - - // Step 2 is to insert precision qualifiers, even the ones we think are defaults, since there are defaults only for some types - - int insertPoint = FindPositionAfterDirectives(source); - source = InplaceInsertByIndex(source, sourceLength, insertPoint, - "\nprecision lowp sampler2D;\n" - "precision lowp sampler3D;\n" - "precision lowp sampler2DShadow;\n" - "precision lowp samplerCubeShadow;\n" - "precision lowp sampler2DArray;\n" - "precision lowp sampler2DArrayShadow;\n" - "precision lowp samplerCube;\n" - "#ifdef GL_EXT_texture_buffer\n" - "precision lowp samplerBuffer;\n" - "precision lowp imageBuffer;\n" - "#endif\n" - "#ifdef GL_EXT_texture_cube_map_array\n" - "precision lowp imageCubeArray;\n" - "precision lowp samplerCubeArray;\n" - "precision lowp samplerCubeArrayShadow;\n" - "#endif\n" - "#ifdef GL_OES_texture_storage_multisample_2d_array\n" - "precision lowp sampler2DMS;\n" - "precision lowp sampler2DMSArray;\n" - "#endif\n"); - - if(GetShaderVersion(source) > 300){ - source = InplaceInsertByIndex(source, sourceLength,insertPoint, - "\nprecision lowp image2D;\n" - "precision lowp image2DArray;\n" - "precision lowp image3D;\n" - "precision lowp imageCube;\n"); - } - int supportHighp = 1; - source = InplaceInsertByIndex(source, sourceLength, insertPoint, supportHighp ? "\nprecision highp float;\n" : "\nprecision medium float;\n"); - - if (2){ - char * target_precision; - switch (2) { - case 1: target_precision = "highp"; break; - case 2: target_precision = "mediump"; break; - case 3: target_precision = "lowp"; break; - default: target_precision = "highp"; - } - source = ReplaceVariableName(source, sourceLength, "highp", target_precision); - source = ReplaceVariableName(source, sourceLength, "mediump", target_precision); - source = ReplaceVariableName(source, sourceLength, "lowp", target_precision); - } - - return source; -} - - -/** - * Simplify to - * @param source The shader as a string - * @param sourceLength The length of the shader - * @param sour - */ -char * SimplifyConstIntTypecasts(char * source, int * sourceLength) { - unsigned long currentPosition = 0; - while (1){ - // Find the start of a typecast - unsigned long startPos = strstrPos(source + currentPosition, "int("); - if(startPos == 0) return source; - - // Go to the end of said typecast - unsigned long endPos = GetNextTokenPosition(source + currentPosition, startPos + 4, ')', " (\n\t\r01234567890.-"); - if(endPos == startPos + 4) { - currentPosition += startPos + 3; - continue; - } - - // Find the floating dot - unsigned long dotPos = GetNextTokenPosition(source + currentPosition, startPos, '.', "\\)"); - if(dotPos == startPos) { - currentPosition += startPos + 3; - continue; - } - - // Then replace the cast - source = InplaceReplaceByIndex(source, sourceLength, currentPosition + dotPos, currentPosition + endPos, ""); - source = InplaceReplaceByIndex(source, sourceLength, currentPosition + startPos, currentPosition + startPos + 3, ""); - - currentPosition += startPos; - } - return source; -} - -/** - * Simplify to - * @param source The shader as a string - * @param sourceLength The shader length - * @return The shader as a string, probably not in a different memory location - */ -char * SimplifyRedundantIntTypecasts(char * source, int * sourceLength) { - for(int i=0; i < strlen(source) - 4; ++i){ - if(source[i] != 'i' || source[i+1] != 'n' || source[i+2] != 't' || source[i+3] != '(') continue; - // Get the next parentheses opening - const int secondParenthesesIndex = GetNextTokenPosition(source, i+3, '(', " int"); - if(secondParenthesesIndex == i+3) continue; - - // Get to the second parentheses end - const int thirdParenthesesIndex = GetClosingTokenPosition(source, secondParenthesesIndex); - if(thirdParenthesesIndex == secondParenthesesIndex) continue; - - // Then the first parentheses end - const int fourthParenthesesIndex = GetNextTokenPosition(source, thirdParenthesesIndex, ')', " "); - if(fourthParenthesesIndex == thirdParenthesesIndex) continue; - - // Redundant parentheses found, remove them - source = InplaceReplaceByIndex(source, sourceLength, fourthParenthesesIndex, fourthParenthesesIndex, ""); - source = InplaceReplaceByIndex(source, sourceLength, i, i+3, ""); - i--; - } - - return source; -} - - -/** - * Simplify (()) into () - * @param source The shader as a string - * @param sourceLength The length of the shader - */ -char * SimplifyRedundantParentheses(char * source, int * sourceLength){ - for(int i=0; i < strlen(source); ++i){ - if(source[i] != '(') continue; - // Get the next parentheses opening - const int secondParenthesesIndex = GetNextTokenPosition(source, i, '(', " "); - if(secondParenthesesIndex == i) continue; - - // Get to the second parentheses end - const int thirdParenthesesIndex = GetClosingTokenPosition(source, secondParenthesesIndex); - if(thirdParenthesesIndex == secondParenthesesIndex) continue; - - // Then the first parentheses end - const int fourthParenthesesIndex = GetNextTokenPosition(source, thirdParenthesesIndex, ')', " "); - if(fourthParenthesesIndex == thirdParenthesesIndex) continue; - - // Redundant parentheses found, remove them - source = InplaceReplaceByIndex(source, sourceLength, fourthParenthesesIndex, fourthParenthesesIndex, ""); - source = InplaceReplaceByIndex(source, sourceLength, i, i, ""); - i--; - } - - return source; -} - -/** - * @param openingToken The opening token - * @return All closing tokens, if available - */ -char * GetClosingTokens(char openingToken){ - switch (openingToken) { - case '(': return ")"; - case '[': return "]"; - case ',': return ",)"; - case '{': return "}"; - case ';': return ";"; - - default: return ""; - } -} - -/** - * @param openingToken The opening token - * @return Whether the token is an opening token - */ -int isOpeningToken(char openingToken){ - return openingToken != ',' && strlen(GetClosingTokens(openingToken)) != 0; -} - -int GetClosingTokenPosition(const char * source, int initialTokenPosition){ - return GetClosingTokenPositionTokenOverride(source, initialTokenPosition, source[initialTokenPosition]); -} - -/** - * Get the index of the closing token within a string, same as initialTokenPosition if not found - * @param source The string to look into - * @param initialTokenPosition The opening token position - * @return The closing token position - */ -int GetClosingTokenPositionTokenOverride(const char * source, int initialTokenPosition, char initialToken){ - // Step 1: Determine the closing token - char openingToken = initialToken; - char * closingTokens = GetClosingTokens(openingToken); - - if (strlen(closingTokens) == 0){ - printf("No closing tokens, somehow \n"); - return initialTokenPosition; - } - - // Step 2: Go through the string to find what we want - for(int i=initialTokenPosition+1; i 0 && acceptedChars[0] == '\\'; - - for(int i=initialPosition+1; i< strlen(source); ++i){ - if (source[i] == token){ - return i; - } - - // Tripping check - if(strlen(acceptedChars) > 0){ - int acceptedCharFound = 0; - for(int j=0; j< strlen(acceptedChars); ++j){ - if (source[i] == acceptedChars[j]) { - if(inverseTripping) // Tripped, break out. - return initialPosition; - // Else, we're good, no need to do more checks - acceptedCharFound = 1; - break; - } - } - if(!inverseTripping && !acceptedCharFound) - return initialPosition; // Tripped, meaning the accepted token is not found - } - - - } - return initialPosition; -} - -/** - * @param haystack - * @param needle - * @return The position of the first occurrence of the needle in the haystack - */ -unsigned long strstrPos(const char * haystack, const char * needle){ - char * substr = strstr(haystack, needle); - if (substr == NULL) return 0; - return (substr - haystack); -} - -/** - * Inserts int(...) on a specific argument from each call to the function - * @param source The shader as a string - * @param functionName The name of the function to manipulate - * @param argumentPosition The position of the argument to manipulate, from 0. If not found, no changes are made. - * @return The shader as a string, maybe in a different memory location - */ -char * insertIntAtFunctionCall(char * source, int * sourceSize, const char * functionName, int argumentPosition){ - //TODO a less naive function for edge-cases ? - unsigned long functionCallPosition = strstrPos(source, functionName); - while(functionCallPosition != 0){ - int openingTokenPosition = GetNextTokenPosition(source, functionCallPosition + strlen(functionName), '(', " \n\r\t"); - if (source[openingTokenPosition] == '('){ - // Function call found, determine the start and end of the argument - int endArgPos = openingTokenPosition; - int startArgPos = openingTokenPosition; - - // Note the additional check to see we aren't at the end of a function - for(int argCount=0; argCount<=argumentPosition && source[startArgPos] != ')'; ++argCount){ - endArgPos = GetClosingTokenPositionTokenOverride(source, endArgPos, ','); - if (argCount == argumentPosition){ - // Argument found, insert the int(...) - source = InplaceInsertByIndex(source, sourceSize, endArgPos+1, ")"); - source = InplaceInsertByIndex(source, sourceSize, startArgPos+1, "int("); - break; - } - // Not the arg we want, got to the next one - startArgPos = endArgPos; - } - } - - // Get the next function call - unsigned long offset = strstrPos(source + functionCallPosition + strlen(functionName), functionName); - if (offset == 0) break; // No more function calls - functionCallPosition += offset + strlen(functionName); - } - return source; -} - -/** Convenience macro to test shader versions */ -#define test_version_context(version, context) \ - if(strstr(versionString, "#version "#version " " #context) != NULL ){ free(versionString); return version; } - -#define test_version(version) \ - if(strstr(versionString, "#version "#version) != NULL ){ free(versionString); return version; } - -/** - * @param source The shader as a string - * @return The shader version: eg. 310 for #version 310 es - */ -int GetShaderVersion(const char * source) { - int endVersionPosition = FindPositionAfterVersion(source); - char * versionString = ExtractString(source, 0, endVersionPosition); - - test_version(150) - test_version(100) - test_version_context(320, es) - test_version_context(310, es) - test_version_context(300, es) - - test_version(120) - test_version(110) - test_version(140) - test_version(130) - - test_version(460) - test_version(450) - test_version(440) - test_version(430) - test_version(420) - test_version(410) - test_version(400) - - free(versionString); - return 100; -} \ No newline at end of file diff --git a/ltw/src/main/tinywrapper/vgpu_shaderconv/shaderconv.h b/ltw/src/main/tinywrapper/vgpu_shaderconv/shaderconv.h deleted file mode 100644 index 77abfd7..0000000 --- a/ltw/src/main/tinywrapper/vgpu_shaderconv/shaderconv.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Created by: SerpentSpirale - * Copyright (c) 2025 SerpentSpirale, artDev, CADIndie. - * For use under LGPL-3.0 - */ - -#ifndef UNTITLED_SHADERCONV_H -#define UNTITLED_SHADERCONV_H - -char * ConvertShaderVgpu(char* source, int is_vertex, int second_pass); - -char * GLSLHeader(char* source); -char * RemoveConstInsideBlocks(char* source, int * sourceLength); -char * ForceIntegerArrayAccess(char* source, int * sourceLength); -char * CoerceIntToFloat(char * source, int * sourceLength); -char * ReplaceModOperator(char * source, int * sourceLength); -char * WrapBitShiftOperators(char * source, int *sourceLength); -char * WrapBitwiseOrAnd(char * source, int *sourceLength); -char * WrapIvecFunctions(char * source, int * sourceLength); -char * WrapFunction(char * source, int * sourceLength, char * functionName, char * wrapperFunctionName, char * wrapperFunction); -int FindPositionAfterDirectives(char * source); -int FindPositionAfterVersion(const char * source); -char * ReplaceGLFragData(char * source, int * sourceLength); -char * ReplaceGLFragColor(char * source, int * sourceLength); -char * ReplaceVariableName(char * source, int * sourceLength, char * initialName, char* newName); -char * ReplaceFunctionName(char * source, int * sourceLength, char * initialName, char * finalName); -char * RemoveUnsupportedExtensions(char * source); -int doesShaderVersionContainsES(const char * source); -char *ReplacePrecisionQualifiers(char *source, int *sourceLength, int isVertex); -char * GetClosingTokens(char openingToken); -int isOpeningToken(char openingToken); -int GetClosingTokenPosition(const char * source, int initialTokenPosition); -int GetClosingTokenPositionTokenOverride(const char * source, int initialTokenPosition, char initialToken); -int GetNextTokenPosition(const char * source, int initialPosition, char token, const char * acceptedChars); -void GetNextWord(char *source, int startPoint, int * startWord, int * endWord); -unsigned long strstrPos(const char * haystack, const char * needle); -char * insertIntAtFunctionCall(char * source, int * sourceSize, const char * functionName, int argumentPosition); -char * InsertExtension(char * source, int * sourceLength, int insertPoint, const char * extension); -char * InsertExtensions(char *source, int *sourceLength); -int GetShaderVersion(const char * source); -char * ReplaceFragmentOut(char * source, int *sourceLength); -char * BackportConstArrays(char *source, int * sourceLength); -char * ExtractString(const char * source, int startString, int endString); -char * RemoveUniformProperty(char * source); -char* ProcessSwitchCases(char* source, int* length); -char * ForceIntegerLayoutOutput(char * source, int *sourceLength); -char * FixSimpleSwitchCases(char *source, int *sourceLength); -char * WrapSwitchStatements(char *source, int *sourceLength); -char * SimplifyConstIntTypecasts(char * source, int * sourceLength); -char * SimplifyRedundantIntTypecasts(char * source, int * sourceLength); -char * SimplifyRedundantParentheses(char * source, int * sourceLength); -char * FixReturnTypes(char * source, int * sourceLength); - -char* GetOperandFromOperator(char* source, int operatorIndex, int rightOperand, int * limit); -char* GetOperandFromOperatorValueOverride(char* source, int operatorIndex, int rightOperand, int * limit, int overrideTokenValue); -int GetOperatorValue(char operator, char operator2); - -int IsVariableNamePresent(const char * source, const int * sourceLength, const char * variableName); - -#endif //UNTITLED_SHADERCONV_H \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index dd20522..c8354ad 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,5 +13,5 @@ dependencyResolutionManagement { } } rootProject.name = "GL4ES-Wrapper" -include ':ltw' +include ':NGG' include ':wrapper' diff --git a/wrapper/build.gradle b/wrapper/build.gradle index cefb03d..75c92e5 100644 --- a/wrapper/build.gradle +++ b/wrapper/build.gradle @@ -3,13 +3,13 @@ plugins { } android { - namespace 'git.artdeell.gl4eswrapper' - compileSdk 33 + namespace 'git.git.artdeell.gl4eswrapper' + compileSdk 36 defaultConfig { applicationId "git.artdeell.gl4eswrapper" minSdk 21 - targetSdk 33 + targetSdk 36 versionCode 1 versionName "1.0" } @@ -28,6 +28,5 @@ android { } dependencies { - implementation project(path: ':ltw') + implementation project(':NGG') } -